Beispiel #1
0
        public DebugBoot(string modDirectory, IReloadedHooks hooks)
        {
            // Setup Config
            _configurator = new Configurator(modDirectory);
            _config       = _configurator.GetConfiguration <Config.Config>(0);
            _config.ConfigurationUpdated += configurable =>
            {
                _config = (Config.Config)configurable;
                ConfigToPinnable(_config);
                Console.WriteLine($"Debug Boot Configuration Updated. Set new main menu mode.");
            };

            ConfigToPinnable(_config);

            // Apply Boot Time Constants
            *_stageId   = _config.BootOptions.Stage;
            *_teamOne   = _config.BootOptions.TeamP1;
            *_teamTwo   = _config.BootOptions.TeamP2;
            *_teamThree = _config.BootOptions.TeamP3;
            *_teamFour  = _config.BootOptions.TeamP4;

            // Setup mid function hooks.
            // Disasm name: Main::Loop
            string[] asmHookSetMainMenu =
            {
                $"use32",
                $"mov ecx, dword [{(IntPtr)_mainMenuSystemMode.Pointer}]", // New line, sacrificing ECX.
                $"mov [eax + 0x38], ecx",
                $"mov ecx, [esi]",
                $"mov [esi + 4], edi",
            };

            string[] asmHookStartGame =
            {
                $"use32",
                $"mov [{(IntPtr)_ediBackup.Pointer}], edi",            // Backup EDI
                $"mov edi, dword [{(IntPtr)_bootSystemMode.Pointer}]", // Replace EDI
                $"mov [0xA82034], ebp",
                $"mov [eax + 0x38], edi",                              // Set SystemMode
                $"mov edi, dword [{(IntPtr)_ediBackup.Pointer}]",      // Restore EDI
            };

            _loadMainMenuHook = hooks.CreateAsmHook(asmHookSetMainMenu, 0x427342, AsmHookBehaviour.DoNotExecuteOriginal).Activate();
            _bootHook         = hooks.CreateAsmHook(asmHookStartGame, 0x00427138, AsmHookBehaviour.DoNotExecuteOriginal).Activate();
        }
Beispiel #2
0
 private void ConfigToPinnable(Config.Config config)
 {
     _mainMenuSystemMode.Value = (int)config.MainMenuMode;
     _bootSystemMode.Value     = (int)config.BootMode;
 }