From 0c7528aaa437f8c16f102f7c8e4bdb190b3ea6bc Mon Sep 17 00:00:00 2001 From: Mauro Junior <45118493+jetrotal@users.noreply.github.com> Date: Thu, 25 Jul 2024 07:49:59 -0300 Subject: [PATCH] Maniacs Patch - Call System Functions In Maniacs, CommandOpenSaveMenu is renamed to "Call System Function". I implemented what is closer to our code. Also expanded the code to cover our custom submenus (Cases 8 to 12). Update game_interpreter_map.cpp --- src/game_interpreter_map.cpp | 53 ++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/src/game_interpreter_map.cpp b/src/game_interpreter_map.cpp index e0d4f42577..0dfe4ab7a5 100644 --- a/src/game_interpreter_map.cpp +++ b/src/game_interpreter_map.cpp @@ -49,6 +49,7 @@ #include "scene_load.h" #include "scene_name.h" #include "scene_shop.h" +#include "scene_debug.h" #include "scene_gameover.h" #include "scene.h" #include "graphics.h" @@ -712,7 +713,7 @@ bool Game_Interpreter_Map::CommandPlayMovie(lcf::rpg::EventCommand const& com) { return true; } -bool Game_Interpreter_Map::CommandOpenSaveMenu(lcf::rpg::EventCommand const& /* com */) { // code 11910 +bool Game_Interpreter_Map::CommandOpenSaveMenu(lcf::rpg::EventCommand const& com) { // code 11910 auto& frame = GetFrame(); auto& index = frame.current_command; @@ -720,7 +721,55 @@ bool Game_Interpreter_Map::CommandOpenSaveMenu(lcf::rpg::EventCommand const& /* return false; } - Scene::instance->SetRequestedScene(std::make_shared()); + const int current_system_function = com.parameters[0]; + + // Handle save menu (default behavior) + if (!Player::IsPatchManiac() || current_system_function <= 0) { + Scene::instance->SetRequestedScene(std::make_shared()); + ++index; + return false; + } + + // Parse common parameters + const int fullscreen_mode = com.parameters[1]; // Broken in Maniac. + const int pause_while_debugging = com.parameters[1]; // unused in our ingame debug screen. + + const int actor_index = ValueOrVariable(com.parameters[1], com.parameters[2]); + const bool is_db_actor = ValueOrVariable(com.parameters[3], com.parameters[4]); + + switch (current_system_function) { + case 1: // Load menu + return CommandOpenLoadMenu(com); + case 2: // Game menu + Scene::instance->SetRequestedScene(std::make_shared()); + break; + case 3: // Toggle fullscreen + // TODO? Implement fullscreen mode once maniacs supports it + return CommandToggleFullscreen(com); + case 4: // Settings menu + return CommandOpenVideoOptions(com); + case 5: // Debug menu + Scene::instance->SetRequestedScene(std::make_shared()); + break; + case 6: // License information menu + // TODO? Implement license information menu + return true; + case 7: // Reset game + return CommandReturnToTitleScreen(com); + case 8: // EASYRPG Inventory menu + return RequestMainMenuScene(1); + case 9: // EASYRPG Skills menu + return RequestMainMenuScene(2, actor_index, is_db_actor); + case 10: // EASYRPG Equip menu + return RequestMainMenuScene(3, actor_index, is_db_actor); + case 11: // EASYRPG Status menu + return RequestMainMenuScene(4, actor_index, is_db_actor); + case 12: // EASYRPG Reorder Party menu + return RequestMainMenuScene(5); + default: + return true; + } + ++index; return false; }