Example #1
0
        static int Main(string[] args)
        {
            var argsDictionary = DictionaryHelper.FromProgramArguments(args);
            var settings       = new GameplaySettings();
            var outputSettings = new OutputSettings();

            settings.Update("fz1mr--16psr-lc-f");
            settings.CustomItemListString         = "81-80000000----3fff-ffffffff-ffffffff-fe000000-6619ff-7fffffff-f378ffff-ffffffff";
            settings.CustomItemList               = ConvertIntString(settings.CustomItemListString);
            settings.CustomStartingItemListString = "-3fc04000-";
            settings.CustomStartingItemList       = ConvertItemString(ItemUtils.StartingItems().Where(item => !item.Name().Contains("Heart")).ToList(), settings.CustomStartingItemListString);
            settings.CustomJunkLocationsString    = "----------200000--f000";
            settings.CustomJunkLocations          = ConvertItemString(ItemUtils.AllLocations().ToList(), settings.CustomJunkLocationsString);

            outputSettings.GeneratePatch      = argsDictionary.ContainsKey("-patch");
            outputSettings.GenerateSpoilerLog = argsDictionary.ContainsKey("-spoiler");
            outputSettings.GenerateHTMLLog    = argsDictionary.ContainsKey("-html");
            outputSettings.GenerateROM        = argsDictionary.ContainsKey("-rom");

            int seed;

            if (argsDictionary.ContainsKey("-seed"))
            {
                seed = int.Parse(argsDictionary["-seed"][0]);
            }
            else
            {
                seed = new Random().Next();
            }

            var outputArg = argsDictionary.GetValueOrDefault("-output");

            if (outputArg != null)
            {
                if (outputArg.Count > 1)
                {
                    throw new ArgumentException("Invalid argument.", "-output");
                }
                outputSettings.OutputROMFilename = outputArg.SingleOrDefault();
            }
            outputSettings.OutputROMFilename ??= Path.Combine("output", FileUtils.MakeFilenameValid(DateTime.UtcNow.ToString("o")));

            var inputArg = argsDictionary.GetValueOrDefault("-input");

            if (inputArg != null)
            {
                if (inputArg.Count > 1)
                {
                    throw new ArgumentException("Invalid argument.", "-input");
                }
                outputSettings.InputROMFilename = inputArg.SingleOrDefault();
            }
            outputSettings.InputROMFilename ??= "input.z64";

            var validationResult = settings.Validate();

            if (validationResult != null)
            {
                Console.WriteLine(validationResult);
                return(-1);
            }

            try
            {
                string result;
                using (var progressBar = new ProgressBar())
                {
                    //var progressReporter = new TextWriterProgressReporter(Console.Out);
                    var progressReporter = new ProgressBarProgressReporter(progressBar);
                    result = ConfigurationProcessor.Process(new Configuration
                    {
                        GameplaySettings = settings,
                        OutputSettings   = outputSettings,
                    }, seed, progressReporter);
                }
                if (result != null)
                {
                    Console.Error.WriteLine(result);
                }
                else
                {
                    Console.WriteLine("Generation complete!");
                }
                return(result == null ? 0 : -1);
            }
            catch (Exception e)
            {
                Console.Error.Write(e.Message);
                Console.Error.Write(e.StackTrace);
                return(-1);
            }
        }