コード例 #1
0
ファイル: whap.cs プロジェクト: impiaaa/flaaffy
        public override void LoadParams(string[] arguments)
        {
            base.LoadParams(arguments);

            var cmdline = new aCommandLine(arguments);
            aCommandLineParameter parameter;

            parameter = mareep.GetLastCmdParam(cmdline, "-wave-dir");

            if (parameter == null)
            {
                mWavePath = "waves/";
            }
            else if (parameter.Count == 0)
            {
                mareep.WriteError("WHAP: missing argument for -wave-dir parameter.");
            }
            else
            {
                mWavePath = parameter[0];
            }

            parameter = mareep.GetLastCmdParam(cmdline, "-bank-dir");

            if (parameter == null)
            {
                mBankPath = "banks/";
            }
            else if (parameter.Count == 0)
            {
                mareep.WriteError("WHAP: missing argument for -bank-dir parameter.");
            }
            else
            {
                mBankPath = parameter[0];
            }

            parameter = mareep.GetLastCmdParam(cmdline, "-mix-mode");

            if (parameter == null)
            {
                mMixerMode = WaveMixerMode.Mix;
            }
            else if (parameter.Count == 0)
            {
                mareep.WriteError("WHAP: missing argument for -mix-mode parameter.");
            }
            else if (!Enum.TryParse(parameter[0], true, out mMixerMode))
            {
                mareep.WriteError("WHAP: unknown mix mode '{0}'.", parameter[0]);
            }

            mExtractWav = (mareep.GetLastCmdParam(cmdline, "-extract-wav") != null);
        }
コード例 #2
0
 public CorrupterOptions(aCommandLine cmd)
     : this()
 {
     foreach (var param in cmd)
     {
         switch (param.Name.ToLowerInvariant())
         {
             case "-start": LoadStart(param); continue;
             case "-end": LoadEnd(param); continue;
             case "-inc": LoadInc(param); continue;
             case "-mode": LoadMode(param); continue;
             case "-skip": LoadSkip(param); continue;
             case "-only": LoadOnly(param); continue;
             case "-zdoom": LoadZDOOM(param); continue;
         }
         DOOMWADCorrupter.Warning("Skipping unknown option '{0}'...", param.Name);
     }
 }
コード例 #3
0
        public void LoadParams(string[] arguments)
        {
            var cmdline = new aCommandLine(arguments);
            aCommandLineParameter parameter;

            // input
            parameter = mareep.GetLastCmdParam(cmdline, "-input");

            if (parameter == null)
            {
                mareep.WriteError("WAVE: missing -input parameter.");
            }
            else if (parameter.Count == 0)
            {
                mareep.WriteError("WAVE: missing argument for -input parameter.");
            }

            mInput       = parameter[0];
            mInputFormat = GetFormat(Path.GetExtension(mInput));

            if (mInputFormat == IOFormat.Raw)
            {
                if (parameter.Count < 2)
                {
                    mareep.WriteError("WAVE: missing format for raw input.");
                }

                if (!Enum.TryParse(parameter[1], true, out mRawInputFormat))
                {
                    mareep.WriteError("WAVE: bad format '{0}' for raw input.", parameter[1]);
                }
            }

            // output
            parameter = mareep.GetLastCmdParam(cmdline, "-output");

            if (parameter == null)
            {
                mareep.WriteError("WAVE: missing -output parameter.");
            }
            else if (parameter.Count == 0)
            {
                mareep.WriteError("WAVE: missing argument for -output parameter.");
            }

            mOutput       = parameter[0];
            mOutputFormat = GetFormat(Path.GetExtension(mOutput));

            if (mOutputFormat == IOFormat.Raw)
            {
                if (parameter.Count < 2)
                {
                    mareep.WriteError("WAVE: missing format for raw output.");
                }

                if (!Enum.TryParse(parameter[1], true, out mRawOutputFormat))
                {
                    mareep.WriteError("WAVE: bad format '{0}' for raw output.", parameter[1]);
                }
            }
            else if (mOutputFormat == IOFormat.AfcStream)
            {
                if (parameter.Count < 2)
                {
                    mStreamFormat = StreamFormat.Adpcm;
                }
                else if (!Enum.TryParse(parameter[1], true, out mStreamFormat))
                {
                    mareep.WriteError("WAVE: bad stream format '{0}'.", parameter[1]);
                }
            }

            // mode
            if (mInputFormat == IOFormat.Raw && mOutputFormat == IOFormat.Raw)
            {
                mMode = Mode.RawToRaw;
            }
            else if (mInputFormat == IOFormat.Raw && mOutputFormat == IOFormat.MicrosoftWave)
            {
                mMode = Mode.RawToWav;
            }
            else if (mInputFormat == IOFormat.MicrosoftWave && mOutputFormat == IOFormat.Raw)
            {
                mMode = Mode.WavToRaw;
            }
            else if (mInputFormat == IOFormat.MicrosoftWave && mOutputFormat == IOFormat.AfcStream)
            {
                mMode = Mode.WavToStream;
            }
            else if (mInputFormat == IOFormat.AfcStream && mOutputFormat == IOFormat.MicrosoftWave)
            {
                mMode = Mode.StreamToWav;
            }
            else
            {
                mareep.WriteError("WAVE: unsupported combination of input and output formats.");
            }

            // mix mode
            parameter = mareep.GetLastCmdParam(cmdline, "-mix-mode");

            if (parameter != null)
            {
                if (parameter.Count < 1)
                {
                    mareep.WriteError("WAVE: bad -mix-mode parameter.");
                }

                if (!Enum.TryParse(parameter[0], true, out mMixerMode))
                {
                    mareep.WriteError("WAVE: bad mixer mode '{0}' in -mix-mode parameter.", parameter[0]);
                }
            }

            // sample rate
            parameter = mareep.GetLastCmdParam(cmdline, "-sample-rate");

            if (parameter != null)
            {
                if (parameter.Count < 1)
                {
                    mareep.WriteError("WAVE: missing argument for -sample-rate parameter.");
                }

                if (!Int32.TryParse(parameter[0], out mRawSampleRate) || mRawSampleRate < 0)
                {
                    mareep.WriteError("WAVE: bad sample rate '{0}'.", parameter[0]);
                }
            }
            else if (mInputFormat == IOFormat.Raw && mOutputFormat != IOFormat.Raw)
            {
                mareep.WriteError("WAVE: missing -sample-rate parameter for raw input.");
            }

            // frame rate
            parameter = mareep.GetLastCmdParam(cmdline, "-frame-rate");

            if (parameter != null)
            {
                if (parameter.Count < 1)
                {
                    mareep.WriteError("WAVE: missing argument for -frame-rate parameter.");
                }

                if (!Int32.TryParse(parameter[0], out mStreamFrameRate) || mStreamFrameRate < 0)
                {
                    mareep.WriteError("WAVE: bad frame rate '{0}'.", parameter[0]);
                }
            }
            else
            {
                mStreamFrameRate = 30;
            }

            // loop
            parameter = mareep.GetLastCmdParam(cmdline, "-loop");

            if (parameter != null)
            {
                mStreamLoop = true;

                if (parameter.Count < 1)
                {
                    mareep.WriteError("WAVE: missing argument for -loop parameter.");
                }

                if (!Int32.TryParse(parameter[0], out mStreamLoopStart) || mStreamLoopStart < 0)
                {
                    mareep.WriteError("WAVE: bad loop value '{0}'.", parameter[0]);
                }
            }
        }
コード例 #4
0
        public void LoadParams(string[] arguments)
        {
            var cmdline = new aCommandLine(arguments);
            aCommandLineParameter parameter;

            parameter = mareep.GetLastCmdParam(cmdline, "-input");

            if (parameter == null)
            {
                mareep.WriteError("JOLT: missing -input parameter.");
            }
            else if (parameter.Count == 0)
            {
                mareep.WriteError("JOLT: missing argument for -input parameter.");
            }

            mInput    = parameter[0];
            parameter = mareep.GetLastCmdParam(cmdline, "-output");

            if (parameter == null)
            {
                mareep.WriteError("JOLT: missing -output parameter.");
            }
            else if (parameter.Count == 0)
            {
                mareep.WriteError("JOLT: missing argument for -output parameter.");
            }

            mOutput   = parameter[0];
            parameter = mareep.GetLastCmdParam(cmdline, "-loop");

            if (parameter != null)
            {
                mLoop         = 0;
                mLoopTimeUnit = LoopTimeUnit.Pulses;

                if (parameter.Count >= 1)
                {
                    if (!Int64.TryParse(parameter[0], NumberStyles.None, null, out mLoop))
                    {
                        mareep.WriteError("JOLT: bad loop value '{0}'.", parameter[0]);
                    }
                }

                if (parameter.Count >= 2)
                {
                    switch (parameter[1].ToLowerInvariant())
                    {
                    case "pulses":
                    case "ticks": {
                        mLoopTimeUnit = LoopTimeUnit.Pulses;
                        break;
                    }

                    case "beats":
                    case "quarters": {
                        mLoopTimeUnit = LoopTimeUnit.Beats;
                        break;
                    }

                    case "bars":
                    case "measures": {
                        mLoopTimeUnit = LoopTimeUnit.Measures;
                        break;
                    }

                    default: {
                        mareep.WriteError("JOLT: bad time unit '{0}'.", parameter[1]);
                        break;
                    }
                    }
                }
            }
        }
コード例 #5
0
        static void Main(string[] arguments)
        {
            Message("doomwadcorrupter v{0} arookas", new Version(0, 1, 12));
            Separator();
            if (arguments == null || arguments.Length < 2) {
                Message("Usage: doomwadcorrupter <input.wad> <output.wad> [options]");
                Message();
                Message("Options:");
                Message("    -start <value>");
                Message("    -end <value>");
                Message("    -inc <value>");
                Message("    -mode <type> [<value>]");
                Message("    -skip <filter> [<filter> [...]]");
                Message("    -only <filter> [<filter> [...]]");
                Message("    -zdoom");
                Message();
                Message("For more detailed instructions, refer to the official repo page.");
                Pause();
                Exit(false);
            }
            var inputWAD = arguments[0];
            var outputWAD = arguments[1];
            cmd = new aCommandLine(arguments.Skip(2).ToArray());
            options = new CorrupterOptions(cmd);
            DisplayOptions(inputWAD, outputWAD);

            int lumpCount;
            var lumpsCorrupted = 0;
            var lumpsSkipped = 0;
            var bytesCorrupted = 0;
            rnd = new Random((uint)options.CorruptSeed);
            var timeTaken = Stopwatch.StartNew();
            using (var instream = OpenWAD(inputWAD)) {
                var reader = new aBinaryReader(instream, Endianness.Little, Encoding.ASCII);

                // header
                var wadType = reader.ReadString(4);

                if (wadType != "IWAD" && wadType != "PWAD") {
                    Error("Input file is not a DOOM WAD.");
                }

                lumpCount = reader.ReadS32();
                var directoryOffset = reader.ReadS32();

                // directory
                reader.Goto(directoryOffset);
                var lumps = aCollection.Initialize(lumpCount, () => new Lump(reader));

                using (var outstream = CreateWAD(outputWAD)) {
                    var writer = new aBinaryWriter(outstream, Endianness.Little, Encoding.ASCII);
                    // header
                    writer.WriteString(wadType);
                    writer.WriteS32(lumpCount);
                    writer.WriteS32(directoryOffset);

                    // data
                    var corruptBuff = new byte[options.Increment];
                    var startBuff = new byte[options.Start];
                    var ns = LumpNamespace.Global;

                    foreach (var lump in lumps) {
                        reader.Goto(lump.Start);
                        writer.Goto(lump.Start);
                        CheckNamespaceMarker(lump, ref ns);
                        if (options.Filter.IsCorruptable(lump.Name, ns) && !(options.ZDOOM && IsZDOOMLump(lump.Name))) {
                            ++lumpsCorrupted;
                            var i = options.Start;
                            var end = options.End ?? lump.Length;
                            if (i > 0) {
                                var count = (int)System.Math.Min(lump.Length, i);
                                reader.Read(startBuff, count);
                                writer.Write8s(startBuff, count);
                            }
                            while (i < lump.Length && i < end) {
                                Status("Corrupting '{0}'... (0x{1:X8} / 0x{2:X8})", lump.Name, i, lump.Length);
                                var count = (int)System.Math.Min(lump.Length - i, options.Increment);
                                reader.Read(corruptBuff, count);
                                CorruptByte(ref corruptBuff[0], options.CorruptMode, options.CorruptValue);
                                writer.Write8s(corruptBuff, count);
                                ++bytesCorrupted;
                                i += count;
                            }
                        }
                        else {
                            ++lumpsSkipped;
                            writer.Write8s(reader.Read8s(lump.Length));
                        }
                    }

                    // directory
                    writer.Goto(directoryOffset);
                    foreach (var lump in lumps) {
                        Status("Writing lump directory for '{0}'...", lump.Name);
                        lump.ToStream(writer);
                    }
                }
            }

            timeTaken.Stop();
            Status("Finished corrupting.");
            Message();
            Separator();
            Message("                       Files : {0}", lumpCount);
            Message("             Files corrupted : {0}", lumpsCorrupted);
            Message("               Files skipped : {0}", lumpsSkipped);
            Message("Bytes mercilessly sacrificed : {0}", bytesCorrupted);
            Message("                  Time taken : {0}", timeTaken.Elapsed.ToString("g"));
            Message("                 Finished at : {0}", DateTime.Now.ToString("HH:mm:ss tt"));
            Pause();
        }
コード例 #6
0
        public void LoadParams(string[] arguments)
        {
            var cmdline = new aCommandLine(arguments);

            foreach (var parameter in cmdline)
            {
                switch (parameter.Name)
                {
                case "-extract-seq": mAction = DoExtractSeq; break;

                case "-replace-seq": mAction = DoReplaceSeq; break;

                case "-extract-ibnk": mAction = DoExtractIbnk; break;

                case "-replace-ibnk": mAction = DoReplaceIbnk; break;

                case "-extract-wsys": mAction = DoExtractWsys; break;

                case "-replace-wsys": mAction = DoReplaceWsys; break;

                case "-init-data-file": {
                    if (parameter.Count == 0)
                    {
                        mareep.WriteError("CHARGE: bad -init-data-file parameter");
                    }

                    mAafInPath = parameter[0];

                    if (parameter.Count > 1)
                    {
                        mAafOutPath = parameter[1];
                    }
                    else
                    {
                        mAafOutPath = Path.ChangeExtension(mAafInPath, ".new.aaf");
                    }

                    break;
                }

                case "-seq-data-file": {
                    if (parameter.Count == 0)
                    {
                        mareep.WriteError("CHARGE: bad -seq-data-file parameter");
                    }

                    mArcInPath = parameter[0];

                    if (parameter.Count > 1)
                    {
                        mArcOutPath = parameter[1];
                    }
                    else
                    {
                        mArcOutPath = Path.ChangeExtension(mArcInPath, ".new.arc");
                    }

                    break;
                }

                case "-target": mTarget = parameter[0]; break;

                case "-input": mInput = parameter[0]; break;

                case "-output": mOutput = parameter[0]; break;
                }
            }
        }