From 021d899b385383051bd76dac23a0a12abc04cfb8 Mon Sep 17 00:00:00 2001 From: Eebit Date: Sun, 1 Mar 2026 17:29:32 -0500 Subject: [PATCH 1/5] (map_menu) Split (+ accumulation of assorted player-phase updates) --- config/YFEE01/arm9/overlays/ov000/delinks.txt | 3 + config/YFEE01/arm9/overlays/ov000/symbols.txt | 8 +- config/YFEE01/arm9/symbols.txt | 2 +- include/action.hpp | 11 +- include/database.hpp | 8 +- include/map.hpp | 10 + include/unit.hpp | 14 + include/unknown_data.h | 2 +- include/unknown_funcs.h | 14 +- include/unknown_types.h | 11 - include/unknown_types.hpp | 24 +- src/database.cpp | 2 +- src/gamectrl.cpp | 18 +- src/ov000/map_unit_menu.cpp | 67 +- src/ov000/playerphase.cpp | 673 +++++++++++------- src/ov008/title_seq.cpp | 2 +- 16 files changed, 520 insertions(+), 349 deletions(-) diff --git a/config/YFEE01/arm9/overlays/ov000/delinks.txt b/config/YFEE01/arm9/overlays/ov000/delinks.txt index be15942..450a134 100644 --- a/config/YFEE01/arm9/overlays/ov000/delinks.txt +++ b/config/YFEE01/arm9/overlays/ov000/delinks.txt @@ -25,6 +25,9 @@ src/ov000/playerphase.cpp: src/ov000/mind.cpp: .text start:0x021af79c end:0x021b06fc +src/ov000/map_menu.cpp: + .text start:0x021bec24 end:0x021bfa60 + src/ov000/map_unit_menu.cpp: .text start:0x021bfa60 end:0x021c1e18 .data start:0x021de3a8 end:0x021dfc20 diff --git a/config/YFEE01/arm9/overlays/ov000/symbols.txt b/config/YFEE01/arm9/overlays/ov000/symbols.txt index 155e07a..ace26a7 100644 --- a/config/YFEE01/arm9/overlays/ov000/symbols.txt +++ b/config/YFEE01/arm9/overlays/ov000/symbols.txt @@ -263,9 +263,9 @@ func_ov000_021adf58 kind:function(arm,size=0xc0) addr:0x021adf58 func_ov000_021ae018 kind:function(arm,size=0x90) addr:0x021ae018 func_ov000_021ae0a8 kind:function(arm,size=0x5c) addr:0x021ae0a8 func_ov000_021ae104 kind:function(arm,size=0x2c) addr:0x021ae104 -func_ov000_021ae130 kind:function(arm,size=0x50) addr:0x021ae130 -func_ov000_021ae180 kind:function(arm,size=0x3c) addr:0x021ae180 -func_ov000_021ae1bc kind:function(arm,size=0x14) addr:0x021ae1bc +StartPlayerPhase kind:function(arm,size=0x50) addr:0x021ae130 +PlayerPhase_GotoLabel kind:function(arm,size=0x3c) addr:0x021ae180 +GetPlayerPhaseProc kind:function(arm,size=0x14) addr:0x021ae1bc func_ov000_021ae1d0 kind:function(arm,size=0x2c) addr:0x021ae1d0 func_ov000_021ae1fc kind:function(arm,size=0x2c) addr:0x021ae1fc func_ov000_021ae228 kind:function(arm,size=0x44) addr:0x021ae228 @@ -1475,7 +1475,7 @@ data_ov000_021dbe58 kind:data(any) addr:0x021dbe58 data_ov000_021dbed0 kind:data(any) addr:0x021dbed0 data_ov000_021dbf68 kind:data(any) addr:0x021dbf68 data_ov000_021dc028 kind:data(any) addr:0x021dc028 -data_ov000_021dc190 kind:data(any) addr:0x021dc190 +ProcScr_map_ProcPL kind:data(any) addr:0x021dc190 data_ov000_021dc4e8 kind:data(any) addr:0x021dc4e8 data_ov000_021dc4f4 kind:data(any) addr:0x021dc4f4 data_ov000_021dc508 kind:data(any) addr:0x021dc508 diff --git a/config/YFEE01/arm9/symbols.txt b/config/YFEE01/arm9/symbols.txt index ad50b08..671cb9e 100644 --- a/config/YFEE01/arm9/symbols.txt +++ b/config/YFEE01/arm9/symbols.txt @@ -1246,7 +1246,7 @@ func_02022eb8 kind:function(arm,size=0x1c) addr:0x02022eb8 func_02022ed4 kind:function(arm,size=0x20) addr:0x02022ed4 func_02022ef4 kind:function(arm,size=0x1c) addr:0x02022ef4 StartGame kind:function(arm,size=0x18) addr:0x02022f10 -func_02022f28 kind:function(arm,size=0x24) addr:0x02022f28 +GameCtrl_GotoLabel kind:function(arm,size=0x24) addr:0x02022f28 func_02022f4c kind:function(arm,size=0x8) addr:0x02022f4c func_02022f54 kind:function(arm,size=0x8) addr:0x02022f54 func_02022f5c kind:function(arm,size=0x50) addr:0x02022f5c diff --git a/include/action.hpp b/include/action.hpp index a5999de..e8f3266 100644 --- a/include/action.hpp +++ b/include/action.hpp @@ -13,22 +13,23 @@ enum ACTION_DOOR = 0x05, ACTION_CHEST = 0x06, ACTION_BRIDGE = 0x07, - // 0x08 - // 0x09 + ACTION_VISIT_08 = 0x08, + ACTION_VISIT_09 = 0x09, ACTION_ARMORY = 0x0A, ACTION_VENDOR = 0x0B, ACTION_SECRET_SHOP = 0x0C, - // 0x0D + ACTION_ARENA = 0x0D, ACTION_SEIZE = 0x0E, ACTION_ESCAPE = 0x0F, - // 0x10 + ACTION_10 = 0x10, ACTION_IMITATION = 0x11, // 0x12 ACTION_DECOY = 0x13, ACTION_TALK = 0x14, // 0x15 - // 0x16 + ACTION_END_TURN = 0x16, // 0x17 + ACTION_SURRENDER = 0x18, }; class ActionState diff --git a/include/database.hpp b/include/database.hpp index 8234b29..8ee9561 100644 --- a/include/database.hpp +++ b/include/database.hpp @@ -33,6 +33,12 @@ struct CharmData char * unk_04; }; +struct TutorialData +{ + char * unk_00; + STRUCT_PAD(0x04, 0x18); +}; + struct DBFE11Footer { s32 pidTableLength; @@ -61,7 +67,7 @@ class FE11Database /* 30 */ void * unk_30; /* 34 */ void * unk_34; /* 38 */ struct Unit_unk_a4 * unk_38; - /* 3C */ void * unk_3c; + /* 3C */ struct TutorialData * unk_3c; /* 40 */ void * unk_40; /* 44 */ void * unk_44; /* 48 */ struct DBFE11Footer * pDBFE11Footer; diff --git a/include/map.hpp b/include/map.hpp index ae85416..7270872 100644 --- a/include/map.hpp +++ b/include/map.hpp @@ -107,6 +107,11 @@ class Camera void func_ov000_021a52c8(s32, s32, s32); void func_ov000_021a52d0(s32, s32, s32); BOOL func_ov000_021a52f8(s32, s32, struct Vec3 *); + + inline BOOL Check_18() + { + return this->unk_18 >= 2; + } }; class MapStateManager_04_04 @@ -129,6 +134,11 @@ class MapStateManager_04_04 this->unk_60 = -1; } } + + inline u8 Check_54(void) + { + return (!(this->unk_54 & 1)) & 0xFF; + } }; class MapStateManager_04 diff --git a/include/unit.hpp b/include/unit.hpp index 66e303c..7667747 100644 --- a/include/unit.hpp +++ b/include/unit.hpp @@ -215,6 +215,20 @@ inline struct Unit * func_0203c378(struct Unit * unit) return m ? func_0203c378(unit->unk_a0) : unit; } +extern Unit * gUnitList; + +inline Unit * GetUnit(s32 unitId) +{ + if (unitId != 0) + { + return gUnitList + unitId - 1; + } + else + { + return NULL; + } +} + EXTERN_C_END #endif // UNIT_HPP \ No newline at end of file diff --git a/include/unknown_data.h b/include/unknown_data.h index 98c175c..bf45ec8 100644 --- a/include/unknown_data.h +++ b/include/unknown_data.h @@ -3444,7 +3444,7 @@ extern int data_027e00e0; // extern ??? data_ov000_021dbed0 // extern ??? data_ov000_021dbf68 // extern ??? data_ov000_021dc028 -// extern ??? data_ov000_021dc190 +// extern ??? ProcScr_map_ProcPL // extern ??? data_ov000_021dc4e8 // extern ??? data_ov000_021dc4f4 // extern ??? data_ov000_021dc508 diff --git a/include/unknown_funcs.h b/include/unknown_funcs.h index 556c5a4..ee217e6 100644 --- a/include/unknown_funcs.h +++ b/include/unknown_funcs.h @@ -1267,7 +1267,7 @@ EC void func_020217b4(void); // EC ??? func_02022ed4 // EC ??? func_02022ef4 EC void StartGame(void); -EC void func_02022f28(u32 label); +EC void GameCtrl_GotoLabel(u32 label); // EC ??? func_02022f4c // EC ??? func_02022f54 // EC ??? func_02022f5c @@ -2509,7 +2509,7 @@ EC void func_0204ae9c(u32, BOOL); // EC ??? func_0204b010 // EC ??? func_0204b0ac EC void func_0204b194(s32, s32); -EC void func_0204b1e0(ProcPtr); +EC BOOL func_0204b1e0(void); EC BOOL func_0204b1f8(u32); // EC ??? func_0204b250 EC BOOL func_0204b260(u32); @@ -5945,9 +5945,9 @@ EC BOOL func_ov000_021abf30(void); // EC ??? func_ov000_021ae018 // EC ??? func_ov000_021ae0a8 // EC ??? func_ov000_021ae104 -// EC ??? func_ov000_021ae130 -// EC ??? func_ov000_021ae180 -// EC ??? func_ov000_021ae1bc +// EC ??? StartPlayerPhase +// EC ??? PlayerPhase_GotoLabel +// EC ??? GetPlayerPhaseProc // EC ??? func_ov000_021ae1d0 // EC ??? func_ov000_021ae1fc // EC ??? func_ov000_021ae228 @@ -6490,7 +6490,7 @@ EC void func_ov000_021c52fc(ProcPtr, struct Unit *); // EC ??? func_ov000_021c62fc // EC ??? func_ov000_021c6368 EC void func_ov000_021c63f8(void); -EC void func_ov000_021c669c(void); +EC void func_ov000_021c669c(ProcPtr); // EC ??? func_ov000_021c692c // EC ??? func_ov000_021c696c // EC ??? func_ov000_021c6994 @@ -6900,7 +6900,7 @@ EC s32 func_ov000_021d4d80(s32, ProcPtr, BOOL); // EC ??? func_ov000_021d5fb0 // EC ??? func_ov000_021d5fbc EC void func_ov000_021d604c(s32, ProcPtr); -EC void func_ov000_021d609c(void); +EC void func_ov000_021d609c(ProcPtr); // EC ??? func_ov000_021d6118 // EC ??? func_ov000_021d6130 // EC ??? func_ov000_021d6148 diff --git a/include/unknown_types.h b/include/unknown_types.h index 596a9c4..9643048 100644 --- a/include/unknown_types.h +++ b/include/unknown_types.h @@ -207,17 +207,6 @@ struct MapFile // Overlay 000: -struct UnkStruct_021e3340 -{ - u8 unk_00; - u8 unk_01; - u8 unk_02; - u8 unk_03; - STRUCT_PAD(0x04, 0x06); - u8 unk_06; - u8 unk_07; -}; - struct UnkStruct_021e3508 { void * unk_00; diff --git a/include/unknown_types.hpp b/include/unknown_types.hpp index ec64030..521bad0 100644 --- a/include/unknown_types.hpp +++ b/include/unknown_types.hpp @@ -103,7 +103,29 @@ struct UnkStruct_02196f1c { STRUCT_PAD(0x00, 0x09); u8 unk_09; - STRUCT_PAD(0x0A, 0x10); + u8 unk_0a; + u8 unk_0b; + STRUCT_PAD(0x0C, 0x10); +}; + +class UnkStruct_021e3340 +{ +public: + u8 unk_00; + s8 unk_01; + s8 unk_02; + u8 unk_03; + s8 unk_04; + s8 unk_05; + u8 unk_06; + u8 unk_07; + u8 unk_08; + u8 unk_09; + + inline BOOL Check_02() + { + return this->unk_02 != -1; + } }; #endif // UNKNOWN_TYPES_HPP diff --git a/src/database.cpp b/src/database.cpp index 7a8a4e3..d34e9cb 100644 --- a/src/database.cpp +++ b/src/database.cpp @@ -49,7 +49,7 @@ EC void FE11Database::Init(void) this->unk_30 = HashTable::Get2("WeaponBonus"); this->unk_34 = HashTable::Get2("WeaponDeadlock"); this->unk_38 = static_cast(HashTable::Get2("StringTable")); - this->unk_3c = HashTable::Get2("Tutorial"); + this->unk_3c = static_cast(HashTable::Get2("Tutorial")); this->unk_40 = HashTable::Get2("TutHelp"); this->unk_44 = HashTable::Get2("Charm"); this->pDBFE11Footer = static_cast(HashTable::Get2("DBFE11Footer")); diff --git a/src/gamectrl.cpp b/src/gamectrl.cpp index 785151a..c3fd3ad 100644 --- a/src/gamectrl.cpp +++ b/src/gamectrl.cpp @@ -21,7 +21,7 @@ extern void data_ov010_02209e54(ProcPtr); EC void func_020136bc(ProcPtr); EC void func_0201fd44(ProcPtr); -EC void func_0204b1e0(ProcPtr); +EC BOOL func_0204b1e0(void); EC void func_02021b00(void); EC void func_02021b14(void); @@ -472,7 +472,7 @@ extern struct UnkStruct_02196f24 * data_02196f24; // Forward declarations EC void InitOnlineShopItemFlags(void); EC void InitOnlineShopItemAmounts(void); -EC void func_02022f28(u32 label); +EC void GameCtrl_GotoLabel(u32 label); EC void func_020217b4(void) { @@ -899,7 +899,7 @@ EC void func_02022324(void) return; } - func_02022f28(7); + GameCtrl_GotoLabel(7); return; } @@ -957,7 +957,7 @@ EC void func_02022458(void) return; } - func_02022f28(10); + GameCtrl_GotoLabel(10); return; } @@ -1180,7 +1180,7 @@ EC void func_0202284c(ProcPtr proc) break; case 3: - func_02022f28(35); + GameCtrl_GotoLabel(35); break; } @@ -1366,7 +1366,7 @@ EC void func_02022bb0(ProcPtr proc) data_02196f10->unk_04 = var; func_020228ec(proc); - func_02022f28(30); + GameCtrl_GotoLabel(30); gSoundManager->unk_a4->vfunc_3c(0x10, 0x48, 0); } @@ -1436,7 +1436,7 @@ EC void func_02022d00(ProcPtr proc) } data_02196f0c->state &= ~0x2000; - func_02022f28(13); + GameCtrl_GotoLabel(13); return; } @@ -1444,7 +1444,7 @@ EC void func_02022d00(ProcPtr proc) if (data_02196f0c->state & 0x10000) { data_02196f0c->state &= ~0x10000; - func_02022f28(54); + GameCtrl_GotoLabel(54); return; } @@ -1538,7 +1538,7 @@ EC void StartGame(void) return; } -EC void func_02022f28(u32 label) +EC void GameCtrl_GotoLabel(u32 label) { Proc_Goto(Proc_Find(ProcScr_GameCtrl), label, 0); return; diff --git a/src/ov000/map_unit_menu.cpp b/src/ov000/map_unit_menu.cpp index 8c1ed52..aa53250 100644 --- a/src/ov000/map_unit_menu.cpp +++ b/src/ov000/map_unit_menu.cpp @@ -11,19 +11,6 @@ #include "unknown_types.hpp" extern struct UnkStruct_02196f24 * data_02196f24; -extern Unit * gUnitList; - -inline Unit * GetUnit(s32 unitId) -{ - if (unitId != 0) - { - return gUnitList + unitId - 1; - } - else - { - return NULL; - } -} EC s32 func_02039088(struct Unit * unit, int b, int c, int d, int e, int f, int g); EC void func_01ff9420(MapStateManager_08 *, Unit *, s32, s32); @@ -48,7 +35,7 @@ EC void func_ov000_021be21c(void); EC s32 func_ov000_021d49f4(s32, s32, s32); EC BOOL func_0202dad0(MenuItemState * menuItemState, Menu * menu); -EC void func_ov000_021ae180(s32, s32, s32); +EC void PlayerPhase_GotoLabel(s32, s32, s32); EC void func_ov000_021bfa3c(void); EC void func_ov000_021d6a9c(char *, s32); @@ -140,7 +127,7 @@ class UnitMenu : public BSystemMapMenu { func_ov000_021b0de8( gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, ACTION_WAIT, 0); - func_ov000_021ae180(0x28, 0, 0); + PlayerPhase_GotoLabel(40, 0, 0); func_ov000_021bfa3c(); return 0x81; @@ -247,7 +234,7 @@ class MIU_Talk : public MenuItem /* 1C */ virtual s32 vfunc_1c(void) { - func_ov000_021ae180(0x11, 9, 0); + PlayerPhase_GotoLabel(17, 9, 0); return MENU_ACTION_x40 | MENU_ACTION_x8; } }; @@ -331,7 +318,7 @@ class MIU_Attack : public MenuItem /* 1C */ virtual s32 vfunc_1c(void) { - func_ov000_021ae180(0xc, 0, 0); + PlayerPhase_GotoLabel(12, 0, 0); func_ov000_021d6dfc(0); return MENU_ACTION_x40 | MENU_ACTION_x8; } @@ -408,7 +395,7 @@ class MIU_Rod : public MenuItem /* 1C */ virtual s32 vfunc_1c(void) { - func_ov000_021ae180(0xc, 1, 0); + PlayerPhase_GotoLabel(12, 1, 0); func_ov000_021d6dfc(0); return MENU_ACTION_x40 | MENU_ACTION_x8; } @@ -459,7 +446,7 @@ class MIU_Item : public MenuItem /* 1C */ virtual s32 vfunc_1c(void) { - func_ov000_021ae180(0xc, 4, 0); + PlayerPhase_GotoLabel(12, 4, 0); func_ov000_021d6dfc(0); return MENU_ACTION_x40 | MENU_ACTION_x8; } @@ -567,7 +554,7 @@ class MIU_Trade : public MenuItem /* 1C */ virtual s32 vfunc_1c(void) { - func_ov000_021ae180(0x11, 7, 0); + PlayerPhase_GotoLabel(17, 7, 0); return MENU_ACTION_x40 | MENU_ACTION_x8; } }; @@ -625,23 +612,23 @@ class MIU_Visit : public MenuItem /* 1C */ virtual s32 vfunc_1c(void) { - s32 uVar2 = 0; + s32 actionId = ACTION_NONE; - if (func_ov000_021d49f4(gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, 8)) + if (func_ov000_021d49f4(gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, ACTION_VISIT_08)) { if (CheckUnitAttribute(gMapStateManager->unk_04->unk_00, 2)) { - uVar2 = 8; + actionId = ACTION_VISIT_08; } } - if (func_ov000_021d49f4(gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, 9)) + if (func_ov000_021d49f4(gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, ACTION_VISIT_09)) { - uVar2 = 9; + actionId = ACTION_VISIT_09; } - func_ov000_021b0de8(gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, uVar2, 0); - func_ov000_021ae180(0x28, 0, 0); + func_ov000_021b0de8(gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, actionId, 0); + PlayerPhase_GotoLabel(40, 0, 0); func_ov000_021d6dfc(0); return MENU_ACTION_x40 | MENU_ACTION_x1; @@ -742,7 +729,7 @@ class MIU_Door : public MenuItem { func_ov000_021b0de8( gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, ACTION_DOOR, 0); - func_ov000_021ae180(0x28, 0, 0); + PlayerPhase_GotoLabel(40, 0, 0); func_ov000_021d6dfc(0); return MENU_ACTION_x40 | MENU_ACTION_x1; } @@ -842,7 +829,7 @@ class MIU_Bridge : public MenuItem { func_ov000_021b0de8( gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, ACTION_BRIDGE, 0); - func_ov000_021ae180(0x28, 0, 0); + PlayerPhase_GotoLabel(40, 0, 0); func_ov000_021d6dfc(0); return MENU_ACTION_x40 | MENU_ACTION_x1; } @@ -902,7 +889,7 @@ class MIU_TBox : public MenuItem { func_ov000_021b0de8( gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, ACTION_CHEST, 0); - func_ov000_021ae180(0x28, 0, 0); + PlayerPhase_GotoLabel(40, 0, 0); func_ov000_021d6dfc(0); return MENU_ACTION_x40 | MENU_ACTION_x1; } @@ -956,7 +943,7 @@ class MIU_WeaponShop : public MenuItem /* 1C */ virtual s32 vfunc_1c(void) { gActionSt->actionId = ACTION_ARMORY; - func_ov000_021ae180(0x15, 0, 0); + PlayerPhase_GotoLabel(21, 0, 0); func_ov000_021d6dfc(0); return MENU_ACTION_x40 | MENU_ACTION_x1; } @@ -1009,7 +996,7 @@ class MIU_ItemShop : public MenuItem /* 1C */ virtual s32 vfunc_1c(void) { gActionSt->actionId = ACTION_VENDOR; - func_ov000_021ae180(0x15, 0, 0); + PlayerPhase_GotoLabel(21, 0, 0); func_ov000_021d6dfc(0); return MENU_ACTION_x40 | MENU_ACTION_x1; } @@ -1066,7 +1053,7 @@ class MIU_SecretShop : public MenuItem /* 1C */ virtual s32 vfunc_1c(void) { gActionSt->actionId = ACTION_SECRET_SHOP; - func_ov000_021ae180(0x15, 0, 0); + PlayerPhase_GotoLabel(21, 0, 0); func_ov000_021d6dfc(0); return MENU_ACTION_x40 | MENU_ACTION_x1; } @@ -1135,7 +1122,7 @@ class MIU_Arena : public MenuItem { if ((menuItemState->unk_09 & 7) != 1) { - func_ov000_021ae180(0x16, 0, 0); + PlayerPhase_GotoLabel(22, 0, 0); func_ov000_021d6dfc(0); return MENU_ACTION_x40 | MENU_ACTION_x1; } @@ -1261,7 +1248,7 @@ class MIU_Transporter : public MenuItem { if ((menuItemState->unk_09 & 7) != 1) { - func_ov000_021ae180(0x22, 0, 0); + PlayerPhase_GotoLabel(34, 0, 0); func_ov000_021d6dfc(0); return MENU_ACTION_x40 | MENU_ACTION_x1; } @@ -1277,7 +1264,7 @@ class DI_CompleteYes : public DialogItemYes { func_ov000_021b0de8( gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, ACTION_SEIZE, 0); - func_ov000_021ae180(0x28, 0, 0); + PlayerPhase_GotoLabel(40, 0, 0); func_ov000_021bfa3c(); func_ov000_021d6dfc(0); @@ -1404,7 +1391,7 @@ class MIU_Save : public MenuItem { if ((menuItemState->unk_09 & 7) != 1) { - func_ov000_021ae180(0xe, 0, 0); + PlayerPhase_GotoLabel(14, 0, 0); func_ov000_021d6dfc(0); return MENU_ACTION_x40 | MENU_ACTION_x8; } @@ -1519,7 +1506,7 @@ class MIU_Imitation : public MenuItem /* 1C */ virtual s32 vfunc_1c(void) { - func_ov000_021ae180(0x11, 10, 0); + PlayerPhase_GotoLabel(17, 10, 0); return MENU_ACTION_x40 | MENU_ACTION_x8; } }; @@ -1535,7 +1522,7 @@ class DI_LureYes : public DialogItemYes { func_ov000_021b0de8( gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, ACTION_DECOY, 0); - func_ov000_021ae180(0x28, 0, 0); + PlayerPhase_GotoLabel(40, 0, 0); func_ov000_021bfa3c(); func_ov000_021d6dfc(0); @@ -1634,7 +1621,7 @@ class MIU_Fixed : public MenuItem { func_ov000_021b0de8( gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, ACTION_WAIT, 0); - func_ov000_021ae180(0x28, 0, 0); + PlayerPhase_GotoLabel(40, 0, 0); func_ov000_021d6dfc(0); return MENU_ACTION_x40 | MENU_ACTION_x1; } diff --git a/src/ov000/playerphase.cpp b/src/ov000/playerphase.cpp index fb3c110..c8b1797 100644 --- a/src/ov000/playerphase.cpp +++ b/src/ov000/playerphase.cpp @@ -5,6 +5,7 @@ #include "unknown_funcs.h" #include "unknown_types.hpp" +#include "action.hpp" #include "database.hpp" #include "event.hpp" #include "hardware.hpp" @@ -15,10 +16,39 @@ #include "constants/sounds.h" +enum +{ + + L_PLAYERPHASE_END_PREP = 3, + + L_PLAYERPHASE_ACT = 12, // 0 attack, 1 staff, 4 item, 7 trade, 10 imitate + + L_PLAYERPHASE_SAVE_POINT = 14, + + L_PLAYERPHASE_TALK = 17, + + L_PLAYERPHASE_SHOP = 21, + L_PLAYERPHASE_ARENA = 22, + L_PLAYERPHASE_END_TURN = 23, + + L_PLAYERPHASE_END = 25, + L_PLAYERPHASE_EXIT = 26, + L_PLAYERPHASE_SUSPEND = 27, + + L_PLAYERPHASE_UNIT_LIST = 31, + L_PLAYERPHASE_GUIDE = 32, + L_PLAYERPHASE_CONFIG = 33, + L_PLAYERPHASE_CONVOY = 34, + + L_PLAYERPHASE_SURRENDER = 38, + + L_PLAYERPHASE_40 = 40, +}; + extern struct UnkStruct_021e3340 * data_ov000_021e3340; extern struct ProcCmd data_ov000_021dbe58[]; -extern struct ProcCmd data_ov000_021dc190[]; +extern struct ProcCmd ProcScr_map_ProcPL[]; extern struct ProcFuncTable data_ov000_021dbd94; extern UnkStruct_021E3324 * data_ov000_021e3324; @@ -53,34 +83,6 @@ extern struct UnkStruct_021e332c data_ov000_021e332c; extern struct UnkStruct_02196f0c * data_02196f0c; -class ActionState -{ -public: - STRUCT_PAD(0x00, 0x2C); - s8 unk_2c; - s8 unk_2d; - u8 unk_2e; - u8 unk_2f; - s8 xDecision; - s8 yDecision; - s8 unitId; - u8 actionId; - u8 unk_34; - u8 unk_35; - u8 unk_36; - u8 unk_37; -}; - -extern struct ActionState * gActionSt; - -extern struct Unit * gUnitList; - -struct PlayerPhaseProc -{ - PROC_HEADER - u32 unk_38; -}; - extern struct UnkStruct_02196f10 * data_02196f10; extern struct TouchState * gTouchSt; @@ -93,6 +95,8 @@ namespace map class ProcPL : public ProcEx { public: + u32 unk_38; + ProcPL() { data_ov000_021e332c.unk_00[4] = this; @@ -105,22 +109,17 @@ class ProcPL : public ProcEx }; // namespace map -EC struct PlayerPhaseProc * func_ov000_021ae1bc(void); +EC map::ProcPL * GetPlayerPhaseProc(void); EC BOOL func_ov000_021ac0c0(void); EC void func_ov000_021aa278(s32); -static inline BOOL UNK_18_CHECK() -{ - return (gMapStateManager->camera->unk_18 >= 2) ? TRUE : FALSE; -} - EC void func_ov000_021aa210(void) { gMapStateManager->cursor->isVisible = TRUE; Proc_Goto(data_ov000_021e332c.unk_00[4], 4, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; func_ov000_021d6e30(0); gMapStateManager->inputHandler->SetButtonVisibility(0xf); @@ -292,7 +291,7 @@ EC BOOL func_ov000_021abf30(void) gSoundManager->unk_b0->vfunc_28(SE_SYS_SELECT1, 0, 0); - if (data_ov000_021e332c.unk_14->unk_07 == 2) + if (data_ov000_021e3340->unk_07 == 2) { gMapStateManager->unk_14->unk_04->unk_15 = 0; @@ -308,9 +307,9 @@ EC BOOL func_ov000_021abf30(void) gMapStateManager->unk_04->unk_08 = 1; - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x28, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 40, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return TRUE; } @@ -324,13 +323,13 @@ EC BOOL func_ov000_021ac0c0(void) { u32 uVar7; - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x12, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 18, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; gSoundManager->unk_b0->vfunc_28(SE_SYS_CANSEL1, 0, 0); - if (data_ov000_021e332c.unk_14->unk_05 == 1) + if (data_ov000_021e3340->unk_05 == 1) { void * r9; struct Unit * r5; @@ -495,9 +494,9 @@ EC void func_ov000_021ac218(void) if (data_02196f0c->flagMgr->GetByName("gf_gameover")) { - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x18, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 24, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; func_ov000_021a969c(9); @@ -506,11 +505,11 @@ EC void func_ov000_021ac218(void) if (data_02196f0c->flagMgr->GetByName("gf_complete")) { - pUnit->state2 &= 0xfffffffe; + pUnit->state2 &= ~2; - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x18, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 24, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; func_ov000_021a969c(8); @@ -534,8 +533,8 @@ EC void func_ov000_021ac218(void) func_0204bbb4(0); Proc_Goto(data_ov000_021e332c.unk_00[4], 9, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } @@ -559,7 +558,7 @@ EC void func_ov000_021ac6a0(void) { func_ov000_021a48d8(); - if ((u8)data_ov000_021e332c.unk_14->unk_01 != 0) + if ((u8)data_ov000_021e3340->unk_01 != 0) { return; } @@ -588,7 +587,7 @@ EC void func_ov000_021ac6a0(void) } } - if (gMapStateManager->inputHandler->IsButtonVisible(-1) == 0) + if (gMapStateManager->inputHandler->IsButtonVisible(0xff) == 0) { return; } @@ -609,54 +608,44 @@ EC void func_ov000_021ac6a0(void) EC BOOL func_ov000_021ac80c(void) { - if (data_ov000_021e332c.unk_14->unk_01 != 0) + if (data_ov000_021e3340->unk_01 != 0) { return TRUE; } - if (data_ov000_021e332c.unk_14->unk_08 != 0) + if (data_ov000_021e3340->unk_08 != 0) { if (gMapStateManager->cursor->unk_0b == 2) { return TRUE; } - data_ov000_021e332c.unk_14->unk_08 = 0; + data_ov000_021e3340->unk_08 = 0; } - if (data_ov000_021e332c.unk_14->unk_09 != 0) + if (data_ov000_021e3340->unk_09 != 0) { - if (UNK_18_CHECK()) + if (gMapStateManager->camera->Check_18()) { return TRUE; } - data_ov000_021e332c.unk_14->unk_09 = 0; + data_ov000_021e3340->unk_09 = 0; } - return 0; + return FALSE; } EC void func_ov000_021ac8b4(void) { - int unitId; - struct Unit * pUnit; + Unit * pUnit; if (func_ov000_021ac80c() != 0) { return; } - unitId = gMapStateManager->unk_028[gMapStateManager->cursor->xTile | gMapStateManager->cursor->yTile << 5]; - - if (unitId != 0) - { - pUnit = gUnitList + unitId - 1; - } - else - { - pUnit = NULL; - } + pUnit = GetUnit(gMapStateManager->unk_028[gMapStateManager->cursor->xTile | gMapStateManager->cursor->yTile << 5]); if (pUnit != NULL) { @@ -676,17 +665,17 @@ EC void func_ov000_021ac8b4(void) if ((data_02196f0c->state & 0x40) != 0) { Proc_Goto(data_ov000_021e332c.unk_00[4], 1, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; - - return; + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; } + else + { + Proc_Goto(data_ov000_021e332c.unk_00[4], 4, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; - Proc_Goto(data_ov000_021e332c.unk_00[4], 4, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; - - func_ov000_021d6e30(0); + func_ov000_021d6e30(0); + } return; } @@ -699,6 +688,7 @@ EC void func_ov000_021aca18(void) } func_ov000_021aa278(1); + return; } @@ -706,9 +696,9 @@ EC void func_ov000_021aca50(void) { gSoundManager->unk_b0->vfunc_28(SE_SYS_CANSEL1, 0, 0); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x19, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], L_PLAYERPHASE_END, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; func_ov005_022054b0(1); func_ov000_021d6dfc(0); @@ -723,9 +713,9 @@ EC void func_ov000_021acac4(void) gMapStateManager->unk_14->unk_04->unk_19 = 0; - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x18, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 24, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; func_ov005_022054b0(10); @@ -745,6 +735,7 @@ EC void func_ov000_021acb34(void) } func_ov000_021aa278(0); + return; } @@ -787,14 +778,9 @@ EC void func_ov000_021acbd4(void) return; } -static inline BOOL CHECK_54() -{ - return (gMapStateManager->unk_04->unk_04->unk_54 & 1); -} - EC void func_ov000_021acc08(ProcPtr proc) { - if ((!CHECK_54() ? TRUE : FALSE) & 0xFF) + if (gMapStateManager->unk_04->unk_04->Check_54()) { Proc_Break(proc, 1); } @@ -805,22 +791,17 @@ EC void func_ov000_021acc08(ProcPtr proc) EC void func_ov000_021acc44(void) { Proc_Goto(data_ov000_021e332c.unk_00[4], 11, 1); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } -static inline BOOL CHECK_02(void) -{ - return (data_ov000_021e332c.unk_14->unk_02 != -1) ? TRUE : FALSE; -} - EC void func_ov000_021acc7c(ProcPtr proc) { gMapStateManager->inputHandler->SetButtonVisibility(0x8b); func_ov000_021bec24(proc); - if (CHECK_02()) + if (data_ov000_021e3340->Check_02()) { gSoundManager->unk_b0->vfunc_28(SE_SYS_WINDOW_OPEN1, 0, 0); } @@ -833,7 +814,7 @@ EC void func_ov000_021accfc(ProcPtr proc) gMapStateManager->inputHandler->SetButtonVisibility(0x8b); StartUnitMenu(proc); - if (CHECK_02()) + if (data_ov000_021e3340->Check_02()) { gSoundManager->unk_b0->vfunc_28(SE_SYS_WINDOW_OPEN1, 0, 0); } @@ -853,7 +834,7 @@ EC void func_ov000_021acd8c(void) gMapStateManager->cursor->SetPosImmediate(pUnit->xPos, pUnit->yPos); gMapStateManager->camera->func_ov000_021a4cec(pUnit->xPos, pUnit->yPos, 0, 0x20, 0); - data_ov000_021e332c.unk_14->unk_09 = 1; + data_ov000_021e3340->unk_09 = 1; func_ov000_021bc540(gMapStateManager->unk_04->unk_04); func_01ff8d88(gMapStateManager->unk_08, pUnit, -1, 6, 1, 1); @@ -873,64 +854,41 @@ EC void func_ov000_021acd8c(void) gMapStateManager->inputHandler->SetButtonVisibility(0x8f); Proc_Goto(data_ov000_021e332c.unk_00[4], 6, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; + return; } EC void func_ov000_021acef4(ProcPtr proc) { - struct Unit * pUnit; - u8 unitId = data_ov000_021e332c.unk_14->unk_03; - - if (unitId != 0) - { - pUnit = gUnitList + unitId - 1; - } - else - { - pUnit = NULL; - } - - func_ov000_021c266c(proc, data_ov000_021e332c.unk_14->unk_02, pUnit); + func_ov000_021c266c(proc, data_ov000_021e3340->unk_02, GetUnit(data_ov000_021e3340->unk_03)); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x27, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 39, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } EC void func_ov000_021acf64(ProcPtr proc) { - struct Unit * pUnit; - u8 unitId = data_ov000_021e332c.unk_14->unk_02; + func_ov000_021c52fc(proc, GetUnit(data_ov000_021e3340->unk_02)); - if (unitId != 0) - { - pUnit = gUnitList + unitId - 1; - } - else - { - pUnit = NULL; - } - - func_ov000_021c52fc(proc, pUnit); - - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x27, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 39, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } -EC void func_ov000_021acfd0(void) +EC void func_ov000_021acfd0(ProcPtr proc) { - func_ov000_021d609c(); + func_ov000_021d609c(proc); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x27, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 39, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } @@ -939,42 +897,63 @@ EC void func_ov000_021ad00c(void) { func_ov000_021c63f8(); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x27, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 39, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } EC void func_ov000_021ad048(void) { - func_ov000_021b799c(data_ov000_021e332c.unk_14->unk_02, data_ov000_021e332c.unk_14->unk_03, -1); + func_ov000_021b799c(data_ov000_021e3340->unk_02, data_ov000_021e3340->unk_03, -1); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x27, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 39, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } EC void func_ov000_021ad098(void) { - func_ov000_021b799c(data_ov000_021e332c.unk_14->unk_07, gActionSt->unk_37, gActionSt->unk_34); + func_ov000_021b799c(data_ov000_021e3340->unk_07, gActionSt->unk_37, gActionSt->unk_34); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x27, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 39, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } -// #func_ov000_021ad0f4 +EC void func_ov000_021ad0f4(ProcPtr param_1) +{ + struct Unit * psVar1; + struct Unit * psVar7; + char * uVar10; + char * iVar3; + + data_021974fc->unk_00 = GetUnit(gActionSt->unitId); + + func_ov000_021a5774(gMapStateManager->unk_0c, 0); + + psVar1 = GetUnit(data_ov000_021e3340->unk_02); + + uVar10 = func_0203c378(psVar1)->pPersonData->unk_00; + iVar3 = func_0203c378(gMapStateManager->unk_04->unk_00)->pPersonData->unk_00; + + EventCaller::TryStartTalkEvent(param_1, (u32)iVar3, (u32)uVar10, (u32)psVar7); + + data_ov000_021e3340->unk_06 |= 2; + + return; +} EC void func_ov000_021ad388(void) { - Proc_Goto(data_ov000_021e332c.unk_00[4], 0xb, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 11, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } @@ -987,13 +966,13 @@ EC void func_ov000_021ad3c0(ProcPtr proc) TryStartVisitEvent( proc, gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, gActionSt->actionId); - if (gActionSt->actionId == 0xa) + if (gActionSt->actionId == ACTION_ARMORY) { func_02054870(gMapStateManager->unk_04->unk_00, proc); return; } - if (gActionSt->actionId == 0xb) + if (gActionSt->actionId == ACTION_VENDOR) { func_02055224(gMapStateManager->unk_04->unk_00, proc); return; @@ -1008,25 +987,25 @@ EC void func_ov000_021ad49c(void) { if (func_020563fc() != 0) { - data_ov000_021e332c.unk_14->unk_06 |= 4; + data_ov000_021e3340->unk_06 |= 4; } - if ((data_ov000_021e332c.unk_14->unk_06 & 4) != 0) + if ((data_ov000_021e3340->unk_06 & 4) != 0) { func_ov000_021b0de8( gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, gActionSt->actionId, 0); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x28, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 40, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } func_ov000_021bc5a8(gMapStateManager->unk_04->unk_04); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0xb, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 11, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } @@ -1040,20 +1019,23 @@ EC void func_ov000_021ad580(ProcPtr proc) EC void func_ov000_021ad5bc(void) { - if ((data_ov000_021e332c.unk_14->unk_06 & 8) != 0) + if ((data_ov000_021e3340->unk_06 & 8) != 0) { - func_ov000_021b0de8(gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, 0xd, 0); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x28, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; - return; + func_ov000_021b0de8( + gMapStateManager->unk_04->unk_00->xPos, gMapStateManager->unk_04->unk_00->yPos, ACTION_ARENA, 0); + Proc_Goto(data_ov000_021e332c.unk_00[4], 40, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; } + else + { + func_ov000_021bc5a8(gMapStateManager->unk_04->unk_04); + Proc_Goto(data_ov000_021e332c.unk_00[4], 11, 0); - func_ov000_021bc5a8(gMapStateManager->unk_04->unk_04); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0xb, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; + } - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; return; } @@ -1064,9 +1046,9 @@ EC void func_ov000_021ad674(ProcPtr proc) return; } -EC void func_ov000_021ad6a0(struct PlayerPhaseProc * proc) +EC void func_ov000_021ad6a0(map::ProcPL * proc) { - if (UNK_18_CHECK()) + if (gMapStateManager->camera->Check_18()) { return; } @@ -1081,7 +1063,7 @@ EC void func_ov000_021ad6a0(struct PlayerPhaseProc * proc) return; } -EC void func_ov000_021ad6ec(struct PlayerPhaseProc * proc) +EC void func_ov000_021ad6ec(map::ProcPL * proc) { if (func_ov000_021a98ec(gActionSt->xDecision, gActionSt->yDecision) != 0) { @@ -1098,9 +1080,9 @@ EC void func_ov000_021ad740(void) if (data_02196f0c->flagMgr->GetByName("gf_gameover")) { func_ov000_021a46b8(); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x18, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 24, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; func_ov000_021a969c(9); return; } @@ -1108,31 +1090,31 @@ EC void func_ov000_021ad740(void) if (data_02196f0c->flagMgr->GetByName("gf_complete")) { func_ov000_021a46b8(); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x18, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 24, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; func_ov000_021a969c(8); return; } - if (gActionSt->actionId == 0x10) + if (gActionSt->actionId == ACTION_10) { func_ov000_021a43e8(); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x1c, 1); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 28, 1); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } func_ov000_021a46b8(); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x23, 1); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 35, 1); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } -EC void func_ov000_021ad884(struct PlayerPhaseProc * proc) +EC void func_ov000_021ad884(map::ProcPL * proc) { if (func_02012298() != 0) { @@ -1151,19 +1133,19 @@ EC void func_ov000_021ad884(struct PlayerPhaseProc * proc) return; } -EC void func_ov000_021ad8c4(struct PlayerPhaseProc * proc) +EC void func_ov000_021ad8c4(map::ProcPL * proc) { if (func_02014b20(proc, 1) != 0) { - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x24, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 36, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x1a, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 26, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; if (proc->unk_38 != 0) { @@ -1182,9 +1164,9 @@ EC void func_ov000_021ad8c4(struct PlayerPhaseProc * proc) EC void func_ov000_021ad97c(ProcPtr proc) { gMapStateManager->inputHandler->SetButtonVisibility(0); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x18, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 24, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; func_ov000_021a969c(10); @@ -1195,33 +1177,33 @@ EC void func_ov000_021ad9d4(ProcPtr proc) { gMapStateManager->inputHandler->SetButtonVisibility(0); func_ov000_021d604c(0x1b, proc); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x1a, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 26, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } EC void func_ov000_021ada34(ProcPtr proc) { func_ov000_021d604c(0x1c, proc); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x23, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 35, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } EC void func_ov000_021ada78(ProcPtr proc) { func_ov000_021d604c(0x1d, proc); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x24, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 36, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } -EC BOOL func_ov000_021adabc(int arg_0, int arg_1) +EC BOOL func_ov000_021adabc(s32 arg_0, s32 arg_1) { - if (func_ov000_021ae1bc() == 0) + if (GetPlayerPhaseProc() == NULL) { return FALSE; } @@ -1250,8 +1232,8 @@ EC void func_ov000_021adb48(void) { gMapStateManager->cursor->isVisible = TRUE; Proc_Goto(data_ov000_021e332c.unk_00[4], 4, 1); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; gMapStateManager->inputHandler->SetButtonVisibility(0xf); func_ov000_021d6e30(0); @@ -1259,9 +1241,9 @@ EC void func_ov000_021adb48(void) return; } - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x17, 1); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 23, 1); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } @@ -1273,14 +1255,14 @@ EC void func_ov000_021adbf0(void) if (data_02196f0c->state & 0x40) { Proc_Goto(data_ov000_021e332c.unk_00[4], 1, 1); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; } else { Proc_Goto(data_ov000_021e332c.unk_00[4], 4, 1); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; func_ov000_021d6e30(0); } @@ -1308,7 +1290,7 @@ EC void func_ov000_021adc98(u32 arg_0) EC void func_ov000_021add1c(void) { - int unitId; + s32 unitId; struct Unit * pUnit; unitId = gMapStateManager->unk_028[gMapStateManager->cursor->xTile | gMapStateManager->cursor->yTile << 5]; @@ -1330,23 +1312,24 @@ EC void func_ov000_021add1c(void) func_0204b194(gMapStateManager->cursor->xTile, gMapStateManager->cursor->yTile); func_0204ae9c(0, (pUnit != NULL) & 0xFF); func_0204eb24(); + return; } EC void func_ov000_021addb4(void) { - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x24, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 36, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } -EC void func_ov000_021addec(void) +EC void func_ov000_021addec(ProcPtr proc) { - func_ov000_021c669c(); - Proc_Goto(data_ov000_021e332c.unk_00[4], 0xa, 0); - data_ov000_021e332c.unk_14->unk_02 = -1; - data_ov000_021e332c.unk_14->unk_03 = 0; + func_ov000_021c669c(proc); + Proc_Goto(data_ov000_021e332c.unk_00[4], 10, 0); + data_ov000_021e3340->unk_02 = -1; + data_ov000_021e3340->unk_03 = 0; return; } @@ -1359,9 +1342,9 @@ EC void func_ov000_021ade2c(void) EC void func_ov000_021ade50(void) { - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x24, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 36, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } @@ -1376,6 +1359,7 @@ EC void func_ov000_021ade88(ProcPtr proc) func_0204ad38(1, 1, 1); func_0204eb24(); func_0205e138(pUnit, proc); + return; } @@ -1389,9 +1373,9 @@ EC void func_ov000_021adeec(void) EC void func_ov000_021adf20(void) { - Proc_Goto(data_ov000_021e332c.unk_00[4], 0xb, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + Proc_Goto(data_ov000_021e332c.unk_00[4], 11, 0); + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; return; } @@ -1406,34 +1390,32 @@ EC void func_ov000_021adf58(void) func_0204eb24(); } - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x18, 1); + Proc_Goto(data_ov000_021e332c.unk_00[4], 24, 1); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; - if (func_ov000_021a478c() == 0) + if (!func_ov000_021a478c()) { - return; + func_ov000_021b0de8(0, 0, ACTION_END_TURN, 0); + func_02012b64(gActionSt, sizeof(ActionState)); } - func_ov000_021b0de8(0, 0, 0x16, 0); - func_02012b64(gActionSt, sizeof(ActionState)); - return; } EC void func_ov000_021ae018(void) { - if (func_ov000_021a478c() != 0) + if (func_ov000_021a478c()) { - func_ov000_021b0de8(0, 0, 0x18, 0); + func_ov000_021b0de8(0, 0, ACTION_SURRENDER, 0); func_02012b64(gActionSt, sizeof(ActionState)); } - Proc_Goto(data_ov000_021e332c.unk_00[4], 0x18, 0); + Proc_Goto(data_ov000_021e332c.unk_00[4], 24, 0); - data_ov000_021e332c.unk_14->unk_02 = 0; - data_ov000_021e332c.unk_14->unk_03 = 0; + data_ov000_021e3340->unk_02 = 0; + data_ov000_021e3340->unk_03 = 0; data_02196f0c->flagMgr->SetByName("gf_gameover"); @@ -1464,33 +1446,190 @@ EC void func_ov000_021ae104(ProcPtr proc) return; } -EC void func_ov000_021ae130(ProcPtr parent) +EC ProcPtr func_ov000_021ae2c4(ProcPtr parent); + +// clang-format off + +struct ProcCmd ProcScr_map_ProcPL[] = +{ + PROC_NAME, + PROC_NAME, + PROC_SLEEP(0), + + PROC_CALL(func_ov000_021ac644), + PROC_06(0, func_ov000_021ac6a0), + +PROC_LABEL(0), + PROC_REPEAT(func_ov000_021ac8b4), + +PROC_LABEL(1), + PROC_REPEAT(func_ov000_021aca18), + +PROC_LABEL(2), + PROC_CALL(func_ov000_021aca50), + +PROC_LABEL(L_PLAYERPHASE_END_PREP), + PROC_CALL(func_ov000_021acac4), + +PROC_LABEL(4), + PROC_REPEAT(func_ov000_021acb34), + +PROC_LABEL(5), + PROC_CALL(func_ov000_021acb78), + +PROC_LABEL(6), + PROC_REPEAT(func_ov000_021acb88), + +PROC_LABEL(7), + PROC_CALL(func_ov000_021acbc8), + PROC_REPEAT(func_ov000_021acbd4), + +PROC_LABEL(8), + PROC_REPEAT(func_ov000_021acc08), + PROC_CALL(func_ov000_021acc44), + +PROC_LABEL(9), + PROC_REPEAT(func_ov000_021ad6a0), + PROC_CALL(func_ov000_021ad6ec), + PROC_CALL(func_ov000_021ad740), + +PROC_LABEL(10), + PROC_CALL(func_ov000_021acc7c), + PROC_CALL(func_ov000_021aa210), + +PROC_LABEL(11), + PROC_CALL(func_ov000_021accfc), + PROC_CALL(func_ov000_021acd8c), + +PROC_LABEL(L_PLAYERPHASE_ACT), + PROC_CALL(func_ov000_021acef4), + +PROC_LABEL(13), + PROC_CALL(func_ov000_021acf64), + +PROC_LABEL(L_PLAYERPHASE_SAVE_POINT), + PROC_CALL(func_ov000_021acfd0), + +PROC_LABEL(19), + PROC_CALL(func_ov000_021ad00c), + +PROC_LABEL(L_PLAYERPHASE_TALK), + PROC_REPEAT(func_ov000_021ad048), + +PROC_LABEL(18), + PROC_REPEAT(func_ov000_021ad098), + +PROC_LABEL(20), + PROC_REPEAT(func_ov000_021acc08), + PROC_CALL(func_ov000_021ad0f4), + PROC_CALL(func_ov000_021a43e8), + PROC_CALL(func_ov000_021ad388), + +PROC_LABEL(L_PLAYERPHASE_SHOP), + PROC_CALL(func_ov000_021ad3c0), + PROC_CALL(func_ov000_021ad49c), + +PROC_LABEL(L_PLAYERPHASE_ARENA), + PROC_CALL(func_ov000_021ad580), + PROC_CALL(func_ov000_021ad5bc), + +PROC_LABEL(37), + PROC_CALL(func_ov000_021ad884), + PROC_CALL(func_ov000_021ad8c4), + +PROC_LABEL(L_PLAYERPHASE_EXIT), + PROC_CALL(func_ov000_021ad97c), + +PROC_LABEL(L_PLAYERPHASE_SUSPEND), + PROC_CALL(func_ov000_021ad9d4), + +PROC_LABEL(28), + PROC_CALL(func_ov000_021ada34), + +PROC_LABEL(29), + PROC_CALL(func_ov000_021ada78), + +PROC_LABEL(L_PLAYERPHASE_UNIT_LIST), + PROC_CALL(func_ov000_021ae2c4), + PROC_CALL(func_ov000_021adc98), + PROC_CALL(func_ov000_021add1c), + PROC_CALL(func_ov000_021ae2f4), + PROC_CALL(func_ov000_021addb4), + +PROC_LABEL(L_PLAYERPHASE_GUIDE), + PROC_CALL(func_ov000_021addec), + +PROC_LABEL(L_PLAYERPHASE_CONFIG), + PROC_CALL(func_ov000_021ae2c4), + PROC_CALL(func_ov000_021ade2c), + PROC_CALL(func_ov000_021ae2f4), + PROC_CALL(func_ov000_021ade50), + +PROC_LABEL(L_PLAYERPHASE_CONVOY), + PROC_CALL(func_ov000_021ae2c4), + PROC_CALL(func_ov000_021ade88), + PROC_CALL(func_ov000_021adeec), + PROC_CALL(func_ov000_021ae2f4), + PROC_CALL(func_ov000_021adf20), + +PROC_LABEL(35), + PROC_CALL(func_ov000_021adb48), + +PROC_LABEL(36), + PROC_CALL(func_ov000_021adbf0), + +PROC_LABEL(40), + PROC_CALL(func_ov000_021ad674), + PROC_CALL(func_ov000_021ac218), + +PROC_LABEL(L_PLAYERPHASE_END_TURN), + PROC_WHILE(func_0204b1e0), + PROC_CALL(func_ov000_021adf58), + +PROC_LABEL(L_PLAYERPHASE_SURRENDER), + PROC_CALL(func_ov000_021ae018), + +PROC_LABEL(39), + { PROC_CMD_02, 0x0000, 0x00000000 }, + +PROC_LABEL(24), + PROC_CALL(func_ov000_021ae0a8), + +PROC_LABEL(L_PLAYERPHASE_END), + PROC_CALL(func_ov000_021ae104), + + PROC_END +}; + +// clang-format on + +EC void StartPlayerPhase(ProcPtr parent) { - new (Proc_StartBlocking(data_ov000_021dc190, parent)) map::ProcPL(); + new (Proc_StartBlocking(ProcScr_map_ProcPL, parent)) map::ProcPL(); return; } -EC void func_ov000_021ae180(int label, int arg_1, int arg_2) +EC void PlayerPhase_GotoLabel(s32 label, s32 arg_1, s32 arg_2) { - Proc_Goto(func_ov000_021ae1bc(), label, 0); - data_ov000_021e332c.unk_14->unk_02 = arg_1; - data_ov000_021e332c.unk_14->unk_03 = arg_2; + Proc_Goto(GetPlayerPhaseProc(), label, 0); + data_ov000_021e3340->unk_02 = arg_1; + data_ov000_021e3340->unk_03 = arg_2; return; } -EC struct PlayerPhaseProc * func_ov000_021ae1bc(void) +EC map::ProcPL * GetPlayerPhaseProc(void) { - return static_cast(Proc_Find(data_ov000_021dc190)); + return static_cast(Proc_Find(ProcScr_map_ProcPL)); } EC void func_ov000_021ae1d0(void) { - if (func_ov000_021ae1bc() == NULL) + if (GetPlayerPhaseProc() == NULL) { return; } - data_ov000_021e332c.unk_14->unk_01++; + data_ov000_021e3340->unk_01++; return; } @@ -1520,12 +1659,12 @@ EC void func_ov000_021ae26c(void) EC void func_ov000_021ae298(void) { - if (func_ov000_021ae1bc() == NULL) + if (GetPlayerPhaseProc() == NULL) { return; } - data_ov000_021e332c.unk_14->unk_01--; + data_ov000_021e3340->unk_01--; return; } diff --git a/src/ov008/title_seq.cpp b/src/ov008/title_seq.cpp index 17d0484..0fea701 100644 --- a/src/ov008/title_seq.cpp +++ b/src/ov008/title_seq.cpp @@ -277,7 +277,7 @@ EC void TitleSeq_ov008_0220508c(ProcPtr proc) return; case 0: - func_02022f28(3); + GameCtrl_GotoLabel(3); Proc_End(proc); return; } From b18e5cd185e4be858a4ed49f43cbb41f5694b57b Mon Sep 17 00:00:00 2001 From: Eebit Date: Sun, 1 Mar 2026 17:29:59 -0500 Subject: [PATCH 2/5] (map_menu) Raw decomp --- src/ov000/map_menu.cpp | 910 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 910 insertions(+) create mode 100644 src/ov000/map_menu.cpp diff --git a/src/ov000/map_menu.cpp b/src/ov000/map_menu.cpp new file mode 100644 index 0000000..42c9115 --- /dev/null +++ b/src/ov000/map_menu.cpp @@ -0,0 +1,910 @@ +#include "global.h" + +#include "hardware.hpp" +#include "hashtable.hpp" +#include "map.hpp" +#include "menu.hpp" +#include "sound_manager.hpp" + +#include "constants/sounds.h" + +#include "unknown_funcs.h" +#include "unknown_types.hpp" + +namespace map +{ + +class BMapMenu : public Menu +{ +public: + /* 008 */ virtual void vfunc_08(void); // func_ov000_021be588 + /* 01C */ virtual void vfunc_1c(void); // func_ov000_021be640 + /* 0A0 */ virtual BOOL vfunc_a0(void); // func_ov000_021be978 + /* 0AC */ virtual s32 vfunc_ac(void); // func_ov000_021be960 + + virtual ~BMapMenu() + { + if (this->unk_04 == NULL) + { + gpActiveScreenSt->dispIo->bldcnt.effect = 0; + } + } +}; + +class MI_Separator : public MenuItem +{ +public: + /* 14 */ virtual s32 vfunc_14(void); // func_ov000_021bf8a4 + /* CC */ virtual u32 vfunc_c4(void); // func_ov000_021bf8b4 + /* CC */ virtual u32 vfunc_cc(void); // func_ov000_021bf8ac +}; + +class BSystemMapMenu : public BMapMenu +{ +public: + virtual ~BSystemMapMenu() + { + } +}; + +class MapMenu : public BSystemMapMenu +{ + /* 000 */ virtual void vfunc_00(void); // func_ov000_021bf88c + /* 008 */ virtual void vfunc_08(void); // func_ov000_021be588 + /* 01C */ virtual void vfunc_1c(void); // func_ov000_021be640 + /* 024 */ virtual s32 vfunc_24(MenuItemState * menuItemState, s32 arg1); // func_ov000_021bf574 + /* 028 */ virtual s32 vfunc_28(s32 arg0); // func_ov000_021bf544 + /* 0A0 */ virtual BOOL vfunc_a0(void); // func_ov000_021be978 + /* 0AC */ virtual s32 vfunc_ac(void); // func_ov000_021be960 + /* 0D8 */ virtual void vfunc_d8(void); // func_ov000_021bf5d4 + /* 0DC */ virtual void vfunc_dc(void); // func_ov000_021bf57c + /* 0E8 */ virtual void vfunc_e8(void); // func_ov000_021bf7e8 + /* 0EC */ virtual void vfunc_ec(void); // func_ov000_021bf75c + + // d1 func_ov000_021bf4e0 + // d0 func_ov000_021bf474 + virtual ~MapMenu() + { + } +}; + +class MIM_UnitList : public MenuItem +{ + /* 00 */ virtual char * vfunc_00(void); // func_ov000_021bf460 + /* 14 */ virtual s32 vfunc_14(void); // func_ov000_021bf458 + /* 1C */ virtual s32 vfunc_1c(void); // func_ov000_021bf3ec + /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf410 + /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf42c +}; + +class MIM_TutList : public MenuItem +{ + /* 00 */ virtual char * vfunc_00(void); // func_ov000_021bf3d8 + /* 14 */ virtual s32 vfunc_14(void); // func_ov000_021bf3a0 + /* 1C */ virtual s32 vfunc_1c(void); // func_ov000_021bf334 + /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf358 + /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf374 +}; + +class MIM_Config : public MenuItem +{ + /* 00 */ virtual char * vfunc_00(void); // func_ov000_021bf320 + /* 14 */ virtual s32 vfunc_14(void); // func_ov000_021bf308 + /* 1C */ virtual s32 vfunc_1c(void); // func_ov000_021bf29c + /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf2c0 + /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf2dc +}; + +class MIM_TemporarySave : public MenuItem +{ + /* 00 */ virtual char * vfunc_00(void); // func_ov000_021bf1d8 + /* 10 */ virtual s32 vfunc_10(MenuItemState * menuItemState); // func_ov000_021bf1c0 + /* 14 */ virtual s32 vfunc_14(void); // func_ov000_021bf184 + /* 24 */ virtual s32 vfunc_24(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf0f4 + /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf11c + /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf148 +}; + +class MIM_Surrender : public MenuItem +{ + /* 00 */ virtual char * vfunc_00(void); // func_ov000_021bf070 + /* 10 */ virtual s32 vfunc_10(MenuItemState * menuItemState); // func_ov000_021bf058 + /* 14 */ virtual s32 vfunc_14(void); // func_ov000_021bf040 + /* 24 */ virtual s32 vfunc_24(Menu * menu, MenuItemState * menuItemState); // func_ov000_021befd0 + /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState); // func_ov000_021beff8 + /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf014 +}; + +class MIM_TurnEnd : public MenuItem +{ + /* 00 */ virtual char * vfunc_00(void); // func_ov000_021befbc + /* 1C */ virtual s32 vfunc_1c(void); // func_ov000_021bef50 + /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bef74 + /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bef90 +}; + +} // namespace map + +class BMapSallyEndYesNo : public DialogYesNo +{ + /* 0C0 */ virtual void vfunc_c0(void); // func_ov000_021bef1c +}; + +class BMapSallyEndYes : public DialogItemNo +{ + /* 1C */ virtual s32 vfunc_1c(void); // func_ov000_021bef00 +}; + +class BMapSallyEndNo : public DialogItemNo +{ + /* 1C */ virtual s32 vfunc_1c(void); // func_ov000_021bee60 +}; + +EC void StartChildMenu(Menu *, void *, ProcPtr, u32, u32); +EC void func_020303bc(Dialog *, char *, void *, ProcPtr, s32, s32); + +EC void func_ov000_021bec24(ProcPtr param_1) +{ + static map::MIM_UnitList sUnitList; + static map::MIM_TutList sTutList; + static map::MIM_Config sConfig; + static map::MIM_TemporarySave sTemporarySave; + static map::MIM_Surrender sSurrender; + static map::MI_Separator sSeparator; + static map::MIM_TurnEnd sTurnEnd; + + // clang-format off + static MenuItem * data_ov000_021dd268[] = + { + &sUnitList, + &sTutList, + &sConfig, + &sTemporarySave, + &sSurrender, + &sSeparator, + &sTurnEnd, + }; + // clang-format on + + StartChildMenu(new map::MapMenu(), data_ov000_021dd268, param_1, 1, 0); + + return; +} + +EC void func_ov000_021bed70(ProcPtr param_1) +{ + gMapStateManager->cursor->isVisible = FALSE; + + gMapStateManager->inputHandler->SetButtonVisibility(0x8b); + gMapStateManager->inputHandler->ShowButton(3); + + static BMapSallyEndYes sSallyEndYes; + static BMapSallyEndNo sSallyEndNo; + + // clang-format off + static MenuItem * data_ov000_021dd250[] = + { + &sSallyEndYes, + &sSallyEndNo, + }; + // clang-format on + + // "Conclude preparations?" + func_020303bc(new BMapSallyEndYesNo(), func_02039e10("MD_進撃終了"), data_ov000_021dd250, param_1, 1, 0); + + return; +} + +class UnkStruct_02217560 +{ +public: + u32 unk_00; + u32 unk_04; + u32 unk_08; + STRUCT_PAD(0x0C, 0x10); + u8 unk_10; + u8 unk_11; + STRUCT_PAD(0x12, 0x14); + u32 unk_14; + STRUCT_PAD(0x18, 0x20); + u32 unk_20; + + UnkStruct_02217560() + { + this->unk_00 = -1; + this->unk_04 = -1; + this->unk_10 = 0; + this->unk_11 = 0; + this->unk_20 = -1; + } +}; + +extern UnkStruct_02217560 * data_ov005_02217560; + +EC void func_ov000_021d6a9c(char *, s32); +EC void PlayerPhase_GotoLabel(s32, s32, s32); + +// func_ov000_021bee60 +s32 BMapSallyEndNo::vfunc_1c(void) +{ + gMapStateManager->inputHandler->HideButton(3); + + if (!((data_ov005_02217560->unk_00 != -1 ? TRUE : FALSE) & 0xff)) + { + gMapStateManager->inputHandler->SetButtonVisibility(0xf); + } + else + { + gMapStateManager->inputHandler->SetButtonVisibility(0x8f); + } + + gMapStateManager->cursor->isVisible = TRUE; + + // "Select two units to have them trade starting positions." + func_ov000_021d6a9c(func_02039e10("MSH_位置変更"), 0); + + return 0x81; +} + +// func_ov000_021bef00 +s32 BMapSallyEndYes::vfunc_1c(void) +{ + PlayerPhase_GotoLabel(3, 0, 0); + return 0x41; +} + +// func_ov000_021bef1c +void BMapSallyEndYesNo::vfunc_c0(void) +{ + gSoundManager->unk_b0->vfunc_28(SE_SYS_START1, 0, 0); + return; +} + +// func_ov000_021bef50 +s32 map::MIM_TurnEnd::vfunc_1c(void) +{ + PlayerPhase_GotoLabel(23, 0, 0); + func_ov000_021d6dfc(0); + return 0x41; +} + +// func_ov000_021bef74 +void map::MIM_TurnEnd::vfunc_78(Menu * menu, MenuItemState * menuItemState) +{ + // "End the player phase. The enemy will move next." + func_ov000_021d6a9c(func_02039e10("MMMH_終了"), 0); + return; +} + +EC BOOL func_0202dad0(MenuItemState * menuItemState, Menu * menu); + +// func_ov000_021bef90 +void map::MIM_TurnEnd::vfunc_90(Menu * menu, MenuItemState * menuItemState) +{ + if (func_0202dad0(menuItemState, menu)) + { + // "End the player phase. The enemy will move next." + func_ov000_021d6a9c(func_02039e10("MMMH_終了"), 0); + } + + return; +} + +// func_ov000_021befbc +char * map::MIM_TurnEnd::vfunc_00(void) +{ + // "End" + return func_02039e10("MMM_終了"); +} + +EC void func_ov000_021beb94(ProcPtr); + +// func_ov000_021befd0 +s32 map::MIM_Surrender::vfunc_24(Menu * menu, MenuItemState * menuItemState) +{ + if ((menuItemState->unk_09 & 7) != 1) + { + func_ov000_021beb94(menu->unk_10); + return 0x40; + } + + return 0x100; +} + +// func_ov000_021beff8 +void map::MIM_Surrender::vfunc_78(Menu * menu, MenuItemState * menuItemState) +{ + // "Surrender and end wireless play." + func_ov000_021d6a9c(func_02039e10("MMMH_降参"), 0); + return; +} + +// func_ov000_021bf014 +void map::MIM_Surrender::vfunc_90(Menu * menu, MenuItemState * menuItemState) +{ + if (func_0202dad0(menuItemState, menu)) + { + // "Surrender and end wireless play." + func_ov000_021d6a9c(func_02039e10("MMMH_降参"), 0); + } + + return; +} + +// func_ov000_021bf040 +s32 map::MIM_Surrender::vfunc_14(void) +{ + if (func_ov000_021a478c()) + { + return MENU_ENABLED; + } + + return MENU_NOTSHOWN; +} + +// func_ov000_021bf058 +s32 map::MIM_Surrender::vfunc_10(MenuItemState * menuItemState) +{ + if ((menuItemState->unk_09 & 7) != 1) + { + return 5; + } + + return 2; +} + +// func_ov000_021bf070 +char * map::MIM_Surrender::vfunc_00(void) +{ + // "Surrender" + return func_02039e10("MMM_降参"); +} + +namespace map +{ +class DI_Surrender : public MenuItem +{ +public: + /* 1C */ virtual s32 vfunc_1c(void); // func_ov000_021bf084 +}; + +class BMapDialogYesNo : public DialogYesNo +{ +public: + /* 000 */ virtual void vfunc_00(void); // func_ov000_021be6d8 + /* 0A0 */ virtual BOOL vfunc_a0(void); // func_ov000_021be934 + /* 0AC */ virtual s32 vfunc_ac(void); // func_ov000_021be91c + /* 130 */ virtual void vfunc_130(/* ? */); // func_ov000_021bea74 + /* 134 */ virtual void vfunc_134(/* ? */); // func_ov000_021beab0 +}; + +class SurrenderDialogYesNo : public BMapDialogYesNo +{ + /* 0B8 */ virtual void vfunc_b8(s32 arg0); // func_ov000_021bf0bc + + virtual ~SurrenderDialogYesNo(); + // // func_ov000_021bf93c + // // func_ov000_021bf978 + // virtual ~SurrenderDialogYesNo() + // { + // } +}; + +} // namespace map + +extern struct UnkStruct_02196f10 * data_02196f10; + +// func_ov000_021bf084 +s32 map::DI_Surrender::vfunc_1c(void) +{ + func_ov000_021d6dfc(0); + PlayerPhase_GotoLabel(38, 0, 0); + data_02196f10->unk_07 = 1; + return 0x44; +} + +// func_ov000_021bf0bc +void map::SurrenderDialogYesNo::vfunc_b8(s32 arg0) +{ + gMapStateManager->unk_14->unk_25 = Interpolate(0, 0, -16, arg0, 4); + return; +} + +EC void func_ov000_021beaf4(ProcPtr); + +// func_ov000_021bf0f4 +s32 map::MIM_TemporarySave::vfunc_24(Menu * menu, MenuItemState * menuItemState) +{ + if ((menuItemState->unk_09 & 7) != 1) + { + func_ov000_021beaf4(menu->unk_10); + return 0x40; + } + + return 0x100; +} + +// func_ov000_021bf11c +void map::MIM_TemporarySave::vfunc_78(Menu * menu, MenuItemState * menuItemState) +{ + char * str; + + if (func_ov000_021a47e4()) + { + // "Exit this practice session." + str = "MMMH_練習終了"; + } + else + { + // "Suspend the game." + str = "MMMH_中断"; + } + + func_ov000_021d6a9c(func_02039e10(str), 0); + + return; +} + +// func_ov000_021bf148 +void map::MIM_TemporarySave::vfunc_90(Menu * menu, MenuItemState * menuItemState) +{ + char * str; + + if (!func_0202dad0(menuItemState, menu)) + { + return; + } + + if (func_ov000_021a47e4()) + { + // "Exit this practice session." + str = "MMMH_練習終了"; + } + else + { + // "Suspend the game." + str = "MMMH_中断"; + } + + func_ov000_021d6a9c(func_02039e10(str), 0); + + return; +} + +EC BOOL func_0201f680(void); + +// func_ov000_021bf184 +s32 map::MIM_TemporarySave::vfunc_14(void) +{ + if (func_ov000_021a478c()) + { + return MENU_NOTSHOWN; + } + + if (func_ov000_021a47e4() || func_0201f680()) + { + return MENU_ENABLED; + } + + return MENU_DISABLED; +} + +// func_ov000_021bf1c0 +s32 map::MIM_TemporarySave::vfunc_10(MenuItemState * menuItemState) +{ + if ((menuItemState->unk_09 & 7) != 1) + { + return 5; + } + + return 2; +} + +// func_ov000_021bf1d8 +char * map::MIM_TemporarySave::vfunc_00(void) +{ + if (func_ov000_021a47e4()) + { + // "Exit" + return func_02039e10("MMM_練習終了"); + } + else + { + // "Suspend" + return func_02039e10("MMM_中断"); + } +} + +namespace map +{ + +class DI_TemporarySave : public DialogItemYes +{ +public: + /* 1C */ virtual s32 vfunc_1c(void); // func_ov000_021bf208 +}; + +} // namespace map + +// func_ov000_021bf208 +s32 map::DI_TemporarySave::vfunc_1c(void) +{ + func_ov000_021d6dfc(0); + + if (func_ov000_021a47e4()) + { + PlayerPhase_GotoLabel(26, 0, 0); + data_02196f10->unk_07 = 2; + return 0x44; + } + else + { + PlayerPhase_GotoLabel(27, 0, 0); + GameCtrl_GotoLabel(39); + return 0x60; + } +} + +// func_ov000_021bf264 +EC void func_ov000_021bf264(void * param_1, s32 param_2) +{ + gMapStateManager->unk_14->unk_25 = Interpolate(0, 0, -16, param_2, 4); + return; +} + +// func_ov000_021bf29c +s32 map::MIM_Config::vfunc_1c(void) +{ + PlayerPhase_GotoLabel(33, 0, 0); + func_ov000_021d6dfc(0); + return 0x41; +} + +// func_ov000_021bf2c0 +void map::MIM_Config::vfunc_78(Menu * menu, MenuItemState * menuItemState) +{ + // "Adjust game options." + func_ov000_021d6a9c(func_02039e10("MMMH_環境"), 0); + return; +} + +// func_ov000_021bf2dc +void map::MIM_Config::vfunc_90(Menu * menu, MenuItemState * menuItemState) +{ + if (func_0202dad0(menuItemState, menu)) + { + // "Adjust game options." + func_ov000_021d6a9c(func_02039e10("MMMH_環境"), 0); + } + + return; +} + +// func_ov000_021bf308 +s32 map::MIM_Config::vfunc_14(void) +{ + if (func_ov000_021a47e4()) + { + return MENU_NOTSHOWN; + } + + return MENU_ENABLED; +} + +// func_ov000_021bf320 +char * map::MIM_Config::vfunc_00(void) +{ + // "Options" + return func_02039e10("MMM_降参"); +} + +// func_ov000_021bf334 +s32 map::MIM_TutList::vfunc_1c(void) +{ + PlayerPhase_GotoLabel(32, 0, 0); + func_ov000_021d6dfc(0); + return 0x41; +} + +// func_ov000_021bf358 +void map::MIM_TutList::vfunc_78(Menu * menu, MenuItemState * menuItemState) +{ + // "Review tutorials on how the game is played." + func_ov000_021d6a9c(func_02039e10("MMMH_指南"), 0); + return; +} + +// func_ov000_021bf374 +void map::MIM_TutList::vfunc_90(Menu * menu, MenuItemState * menuItemState) +{ + if (func_0202dad0(menuItemState, menu)) + { + // "Review tutorials on how the game is played." + func_ov000_021d6a9c(func_02039e10("MMMH_指南"), 0); + } + + return; +} + +extern struct UnkStruct_02196f20 * data_02196f20; + +// func_ov000_021bf3a0 +s32 map::MIM_TutList::vfunc_14(void) +{ + if (func_ov000_021a47e4()) + { + return MENU_NOTSHOWN; + } + + if (!data_02196f20->flagMgr->func_02049438()) + { + return MENU_NOTSHOWN; + } + + return MENU_ENABLED; +} + +// func_ov000_021bf3d8 +char * map::MIM_TutList::vfunc_00(void) +{ + // "Guide" + return func_02039e10("MMM_指南"); +} + +// func_ov000_021bf3ec +s32 map::MIM_UnitList::vfunc_1c(void) +{ + PlayerPhase_GotoLabel(31, 0, 0); + func_ov000_021d6dfc(0); + return 0x41; +} + +// func_ov000_021bf410 +void map::MIM_UnitList::vfunc_78(Menu * menu, MenuItemState * menuItemState) +{ + // "Display a list of your units." + func_ov000_021d6a9c(func_02039e10("MMMH_部隊"), 0); + return; +} + +// func_ov000_021bf42c +void map::MIM_UnitList::vfunc_90(Menu * menu, MenuItemState * menuItemState) +{ + if (func_0202dad0(menuItemState, menu)) + { + // "Display a list of your units." + func_ov000_021d6a9c(func_02039e10("MMMH_部隊"), 0); + } + + return; +} + +// func_ov000_021bf458 +s32 map::MIM_UnitList::vfunc_14(void) +{ + return 0; +} + +char * map::MIM_UnitList::vfunc_00(void) +{ + // "Units" + return func_02039e10("MMM_部隊"); +} + +// func_ov000_021bf544 +s32 map::MapMenu::vfunc_28(s32 arg0) +{ + if (!((arg0 & 0x3f) == 0 ? TRUE : FALSE)) + { + func_ov000_021d6e30(0); + return arg0; + } + + return arg0; +} + +// func_ov000_021bf574 +s32 map::MapMenu::vfunc_24(MenuItemState * menuItemState, s32 arg1) +{ + return arg1; +} + +extern struct UnkStruct_02196f24 * data_02196f24; + +// func_ov000_021bf57c +void map::MapMenu::vfunc_dc(void) +{ + s32 iVar1; + + Menu::vfunc_dc(); + + if (data_02196f24->unk_0d) + { + iVar1 = 0x11; + } + else + { + iVar1 = 0x13; + } + + func_02010f98(gpActiveScreenSt->tilemap[this->unk_2c] + 0x16 + iVar1 * 0x20, 10, 4); + + return; +} + +struct UnkStruct_021970c4 +{ + void * unk_00; + void * unk_04; + void * unk_08; + void * unk_0c; + void * unk_10; + void * unk_14; +}; + +extern struct UnkStruct_021970c4 * data_021970c4; +extern struct UnkStruct_021970c4 * data_021970cc; + +// func_ov000_021bf5d4 +void map::MapMenu::vfunc_d8(void) +{ + s32 uVar2; + s32 uVar3; + s32 iVar5; + VmMap_Common * iVar5_; + int iVar7; + struct Unit * pUnit; + int iVar10; + + Menu::vfunc_d8(); + + iVar5_ = static_cast(HashTable::Get2("VmMap_FontMenuSub")); + uVar3 = iVar5_->unk_04; + uVar2 = iVar5_->unk_06; + + iVar5 = 0; + + if (data_02196f24->unk_0d) + { + iVar7 = 0x11; + } + else + { + iVar7 = 0x13; + } + + iVar7++; + + for (pUnit = Force::Get(data_ov000_021e3324->phase)->head; pUnit != NULL; pUnit = pUnit->unk_3c) + { + if (pUnit->state2 & 0xe1) + { + continue; + } + + iVar5++; + } + + if (iVar5 != 0) + { + data_021970c4->unk_08 = data_021970cc->unk_14; + } + else + { + data_021970c4->unk_08 = data_021970cc->unk_08; + } + + // "Free Units" + iVar10 = func_020295ec( + data_021970c4, func_02039e10("MMMINFO_未行動"), gpActiveScreenSt->bgTiles[this->unk_2c], + gpActiveScreenSt->tilemap[this->unk_2c], 0x17, iVar7, uVar3, uVar2, 0, 0); + + if (iVar5 != 0) + { + data_021970c4->unk_08 = data_021970cc->unk_04; + } + + func_02029850( + data_021970c4, iVar5, gpActiveScreenSt->bgTiles[this->unk_2c], gpActiveScreenSt->tilemap[this->unk_2c], 0x1e, + iVar7, uVar3 + iVar10, uVar2, 0); + + data_021970c4->unk_08 = data_021970cc->unk_04; + + return; +} + +EC void func_0202b260(void *, s32, s32, s32, s32); + +// func_ov000_021bf75c +void map::MapMenu::vfunc_ec(void) +{ + s32 r3; + s32 r1; + + Menu::vfunc_ec(); + + r3 = this->vfunc_d4(10); + r1 = 0x16; + + if (r3 >= 2) + { + return; + } + + func_0202b260( + gpActiveScreenSt->tilemap[this->unk_30], (5 - (r3 >> 1)) + r1, data_02196f24->unk_0d ? 0x11 : 0x13, 4, 0); + + return; +} + +// func_ov000_021bf7e8 +void map::MapMenu::vfunc_e8(void) +{ + s32 var_r2; + int iVar1; + + Menu::vfunc_e8(); + + iVar1 = this->vfunc_d4(10); + + if (data_02196f24->unk_0d != 0) + { + var_r2 = 0x11; + } + else + { + var_r2 = 0x13; + } + + if (iVar1 < 2) + { + func_0202b260(gpActiveScreenSt->tilemap[this->unk_30], (5 - (iVar1 >> 1)) + 0x16, var_r2, 4, 0); + } + + return; +} + +EC void func_ov000_021be21c(void); + +// func_ov000_021bf88c +void map::MapMenu::vfunc_00(void) +{ + func_ov000_021be21c(); + this->unk_40 = 1; + return; +} + +// func_ov000_021bf8a4 +s32 map::MI_Separator::vfunc_14(void) +{ + return 3; +} + +// func_ov000_021bf8ac +u32 map::MI_Separator::vfunc_cc(void) +{ + return 1; +} + +// func_ov000_021bf8b4 +u32 map::MI_Separator::vfunc_c4(void) +{ + return 0; +} + +// ~TemporarySaveDialogYesNo + +// func_ov000_021bf93c +// func_ov000_021bf978 +// ~SurrenderDialogYesNo() + +// func_ov000_021bf9bc +// func_ov000_021bf9f8 +// ~BMapSallyEndYesNo + +EC void func_ov000_021bfa3c(void) +{ + func_ov000_021b79f8(); + func_ov000_021bc9e4(gMapStateManager->unk_14->unk_04); + return; +} From 35683e25bef2e3dfe9a83a4c0320623e9180d83e Mon Sep 17 00:00:00 2001 From: Eebit Date: Sun, 1 Mar 2026 19:32:37 -0500 Subject: [PATCH 3/5] (map_menu) Reorganize into classes --- config/YFEE01/arm9/overlays/ov000/delinks.txt | 2 +- include/menu.hpp | 4 +- src/ov000/map_menu.cpp | 1278 ++++++++--------- 3 files changed, 628 insertions(+), 656 deletions(-) diff --git a/config/YFEE01/arm9/overlays/ov000/delinks.txt b/config/YFEE01/arm9/overlays/ov000/delinks.txt index 450a134..422023b 100644 --- a/config/YFEE01/arm9/overlays/ov000/delinks.txt +++ b/config/YFEE01/arm9/overlays/ov000/delinks.txt @@ -26,7 +26,7 @@ src/ov000/mind.cpp: .text start:0x021af79c end:0x021b06fc src/ov000/map_menu.cpp: - .text start:0x021bec24 end:0x021bfa60 + .text start:0x021beaf4 end:0x021bfa60 src/ov000/map_unit_menu.cpp: .text start:0x021bfa60 end:0x021c1e18 diff --git a/include/menu.hpp b/include/menu.hpp index f3bfd6d..ee4c679 100644 --- a/include/menu.hpp +++ b/include/menu.hpp @@ -679,7 +679,9 @@ class DialogYesNo : public Dialog { public: DialogYesNo() {}; - virtual ~DialogYesNo(); + virtual ~DialogYesNo() + { + } }; class DialogItem : public MenuItem diff --git a/src/ov000/map_menu.cpp b/src/ov000/map_menu.cpp index 42c9115..f0aeef8 100644 --- a/src/ov000/map_menu.cpp +++ b/src/ov000/map_menu.cpp @@ -11,9 +11,74 @@ #include "unknown_funcs.h" #include "unknown_types.hpp" +struct UnkStruct_021970c4 +{ + void * unk_00; + void * unk_04; + void * unk_08; + void * unk_0c; + void * unk_10; + void * unk_14; +}; + +extern struct UnkStruct_021970c4 * data_021970c4; +extern struct UnkStruct_021970c4 * data_021970cc; + +extern struct UnkStruct_02196f24 * data_02196f24; + +extern struct UnkStruct_02196f20 * data_02196f20; + +extern struct UnkStruct_02196f10 * data_02196f10; + +EC void func_0202b260(void *, s32, s32, s32, s32); +EC BOOL func_0201f680(void); +EC BOOL func_0202dad0(MenuItemState * menuItemState, Menu * menu); + +EC void func_ov000_021be21c(void); +EC void func_ov000_021beaf4(ProcPtr); +EC void func_ov000_021beb94(ProcPtr); +EC void func_ov000_021d6a9c(char *, s32); +EC void PlayerPhase_GotoLabel(s32, s32, s32); + +class UnkStruct_02217560 +{ +public: + u32 unk_00; + u32 unk_04; + u32 unk_08; + STRUCT_PAD(0x0C, 0x10); + u8 unk_10; + u8 unk_11; + STRUCT_PAD(0x12, 0x14); + u32 unk_14; + STRUCT_PAD(0x18, 0x20); + u32 unk_20; + + UnkStruct_02217560() + { + this->unk_00 = -1; + this->unk_04 = -1; + this->unk_10 = 0; + this->unk_11 = 0; + this->unk_20 = -1; + } +}; + +extern UnkStruct_02217560 * data_ov005_02217560; + namespace map { +class BMapDialogYesNo : public DialogYesNo +{ +public: + /* 000 */ virtual void vfunc_00(void); // func_ov000_021be6d8 + /* 0A0 */ virtual BOOL vfunc_a0(void); // func_ov000_021be934 + /* 0AC */ virtual s32 vfunc_ac(void); // func_ov000_021be91c + /* 130 */ virtual void vfunc_130(/* ? */); // func_ov000_021bea74 + /* 134 */ virtual void vfunc_134(/* ? */); // func_ov000_021beab0 +}; + class BMapMenu : public Menu { public: @@ -34,9 +99,23 @@ class BMapMenu : public Menu class MI_Separator : public MenuItem { public: - /* 14 */ virtual s32 vfunc_14(void); // func_ov000_021bf8a4 - /* CC */ virtual u32 vfunc_c4(void); // func_ov000_021bf8b4 - /* CC */ virtual u32 vfunc_cc(void); // func_ov000_021bf8ac + // func_ov000_021bf8b4 + /* C4 */ virtual u32 vfunc_c4(void) + { + return 0; + } + + // func_ov000_021bf8ac + /* CC */ virtual u32 vfunc_cc(void) + { + return 1; + } + + // func_ov000_021bf8a4 + /* 14 */ virtual s32 vfunc_14(void) + { + return 3; + } }; class BSystemMapMenu : public BMapMenu @@ -49,847 +128,738 @@ class BSystemMapMenu : public BMapMenu class MapMenu : public BSystemMapMenu { - /* 000 */ virtual void vfunc_00(void); // func_ov000_021bf88c - /* 008 */ virtual void vfunc_08(void); // func_ov000_021be588 - /* 01C */ virtual void vfunc_1c(void); // func_ov000_021be640 - /* 024 */ virtual s32 vfunc_24(MenuItemState * menuItemState, s32 arg1); // func_ov000_021bf574 - /* 028 */ virtual s32 vfunc_28(s32 arg0); // func_ov000_021bf544 - /* 0A0 */ virtual BOOL vfunc_a0(void); // func_ov000_021be978 - /* 0AC */ virtual s32 vfunc_ac(void); // func_ov000_021be960 - /* 0D8 */ virtual void vfunc_d8(void); // func_ov000_021bf5d4 - /* 0DC */ virtual void vfunc_dc(void); // func_ov000_021bf57c - /* 0E8 */ virtual void vfunc_e8(void); // func_ov000_021bf7e8 - /* 0EC */ virtual void vfunc_ec(void); // func_ov000_021bf75c - - // d1 func_ov000_021bf4e0 - // d0 func_ov000_021bf474 - virtual ~MapMenu() +public: + // func_ov000_021bf88c + /* 000 */ virtual void vfunc_00(void) { + func_ov000_021be21c(); + this->unk_40 = 1; + return; } -}; -class MIM_UnitList : public MenuItem -{ - /* 00 */ virtual char * vfunc_00(void); // func_ov000_021bf460 - /* 14 */ virtual s32 vfunc_14(void); // func_ov000_021bf458 - /* 1C */ virtual s32 vfunc_1c(void); // func_ov000_021bf3ec - /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf410 - /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf42c -}; - -class MIM_TutList : public MenuItem -{ - /* 00 */ virtual char * vfunc_00(void); // func_ov000_021bf3d8 - /* 14 */ virtual s32 vfunc_14(void); // func_ov000_021bf3a0 - /* 1C */ virtual s32 vfunc_1c(void); // func_ov000_021bf334 - /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf358 - /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf374 -}; - -class MIM_Config : public MenuItem -{ - /* 00 */ virtual char * vfunc_00(void); // func_ov000_021bf320 - /* 14 */ virtual s32 vfunc_14(void); // func_ov000_021bf308 - /* 1C */ virtual s32 vfunc_1c(void); // func_ov000_021bf29c - /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf2c0 - /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf2dc -}; - -class MIM_TemporarySave : public MenuItem -{ - /* 00 */ virtual char * vfunc_00(void); // func_ov000_021bf1d8 - /* 10 */ virtual s32 vfunc_10(MenuItemState * menuItemState); // func_ov000_021bf1c0 - /* 14 */ virtual s32 vfunc_14(void); // func_ov000_021bf184 - /* 24 */ virtual s32 vfunc_24(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf0f4 - /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf11c - /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf148 -}; - -class MIM_Surrender : public MenuItem -{ - /* 00 */ virtual char * vfunc_00(void); // func_ov000_021bf070 - /* 10 */ virtual s32 vfunc_10(MenuItemState * menuItemState); // func_ov000_021bf058 - /* 14 */ virtual s32 vfunc_14(void); // func_ov000_021bf040 - /* 24 */ virtual s32 vfunc_24(Menu * menu, MenuItemState * menuItemState); // func_ov000_021befd0 - /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState); // func_ov000_021beff8 - /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bf014 -}; - -class MIM_TurnEnd : public MenuItem -{ - /* 00 */ virtual char * vfunc_00(void); // func_ov000_021befbc - /* 1C */ virtual s32 vfunc_1c(void); // func_ov000_021bef50 - /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bef74 - /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState); // func_ov000_021bef90 -}; - -} // namespace map + // func_ov000_021bf7e8 + /* 0E8 */ virtual void vfunc_e8(void) + { + s32 var_r2; + int iVar1; -class BMapSallyEndYesNo : public DialogYesNo -{ - /* 0C0 */ virtual void vfunc_c0(void); // func_ov000_021bef1c -}; + Menu::vfunc_e8(); -class BMapSallyEndYes : public DialogItemNo -{ - /* 1C */ virtual s32 vfunc_1c(void); // func_ov000_021bef00 -}; + iVar1 = this->vfunc_d4(10); -class BMapSallyEndNo : public DialogItemNo -{ - /* 1C */ virtual s32 vfunc_1c(void); // func_ov000_021bee60 -}; + if (data_02196f24->unk_0d != 0) + { + var_r2 = 0x11; + } + else + { + var_r2 = 0x13; + } -EC void StartChildMenu(Menu *, void *, ProcPtr, u32, u32); -EC void func_020303bc(Dialog *, char *, void *, ProcPtr, s32, s32); + if (iVar1 < 2) + { + func_0202b260(gpActiveScreenSt->tilemap[this->unk_30], (5 - (iVar1 >> 1)) + 0x16, var_r2, 4, 0); + } -EC void func_ov000_021bec24(ProcPtr param_1) -{ - static map::MIM_UnitList sUnitList; - static map::MIM_TutList sTutList; - static map::MIM_Config sConfig; - static map::MIM_TemporarySave sTemporarySave; - static map::MIM_Surrender sSurrender; - static map::MI_Separator sSeparator; - static map::MIM_TurnEnd sTurnEnd; + return; + } - // clang-format off - static MenuItem * data_ov000_021dd268[] = + // func_ov000_021bf75c + /* 0EC */ virtual void vfunc_ec(void) { - &sUnitList, - &sTutList, - &sConfig, - &sTemporarySave, - &sSurrender, - &sSeparator, - &sTurnEnd, - }; - // clang-format on + s32 r3; + s32 r1; - StartChildMenu(new map::MapMenu(), data_ov000_021dd268, param_1, 1, 0); + Menu::vfunc_ec(); - return; -} + r3 = this->vfunc_d4(10); + r1 = 0x16; -EC void func_ov000_021bed70(ProcPtr param_1) -{ - gMapStateManager->cursor->isVisible = FALSE; + if (r3 >= 2) + { + return; + } - gMapStateManager->inputHandler->SetButtonVisibility(0x8b); - gMapStateManager->inputHandler->ShowButton(3); + func_0202b260( + gpActiveScreenSt->tilemap[this->unk_30], (5 - (r3 >> 1)) + r1, data_02196f24->unk_0d ? 0x11 : 0x13, 4, 0); - static BMapSallyEndYes sSallyEndYes; - static BMapSallyEndNo sSallyEndNo; + return; + } - // clang-format off - static MenuItem * data_ov000_021dd250[] = + // func_ov000_021bf5d4 + /* 0D8 */ virtual void vfunc_d8(void) { - &sSallyEndYes, - &sSallyEndNo, - }; - // clang-format on - - // "Conclude preparations?" - func_020303bc(new BMapSallyEndYesNo(), func_02039e10("MD_進撃終了"), data_ov000_021dd250, param_1, 1, 0); - - return; -} - -class UnkStruct_02217560 -{ -public: - u32 unk_00; - u32 unk_04; - u32 unk_08; - STRUCT_PAD(0x0C, 0x10); - u8 unk_10; - u8 unk_11; - STRUCT_PAD(0x12, 0x14); - u32 unk_14; - STRUCT_PAD(0x18, 0x20); - u32 unk_20; + s32 uVar2; + s32 uVar3; + s32 iVar5; + VmMap_Common * iVar5_; + int iVar7; + struct Unit * pUnit; + int iVar10; - UnkStruct_02217560() - { - this->unk_00 = -1; - this->unk_04 = -1; - this->unk_10 = 0; - this->unk_11 = 0; - this->unk_20 = -1; - } -}; + Menu::vfunc_d8(); -extern UnkStruct_02217560 * data_ov005_02217560; + iVar5_ = static_cast(HashTable::Get2("VmMap_FontMenuSub")); + uVar3 = iVar5_->unk_04; + uVar2 = iVar5_->unk_06; -EC void func_ov000_021d6a9c(char *, s32); -EC void PlayerPhase_GotoLabel(s32, s32, s32); + iVar5 = 0; -// func_ov000_021bee60 -s32 BMapSallyEndNo::vfunc_1c(void) -{ - gMapStateManager->inputHandler->HideButton(3); + if (data_02196f24->unk_0d) + { + iVar7 = 0x11; + } + else + { + iVar7 = 0x13; + } - if (!((data_ov005_02217560->unk_00 != -1 ? TRUE : FALSE) & 0xff)) - { - gMapStateManager->inputHandler->SetButtonVisibility(0xf); - } - else - { - gMapStateManager->inputHandler->SetButtonVisibility(0x8f); - } + iVar7++; - gMapStateManager->cursor->isVisible = TRUE; + for (pUnit = Force::Get(data_ov000_021e3324->phase)->head; pUnit != NULL; pUnit = pUnit->unk_3c) + { + if (pUnit->state2 & 0xe1) + { + continue; + } - // "Select two units to have them trade starting positions." - func_ov000_021d6a9c(func_02039e10("MSH_位置変更"), 0); + iVar5++; + } - return 0x81; -} + if (iVar5 != 0) + { + data_021970c4->unk_08 = data_021970cc->unk_14; + } + else + { + data_021970c4->unk_08 = data_021970cc->unk_08; + } -// func_ov000_021bef00 -s32 BMapSallyEndYes::vfunc_1c(void) -{ - PlayerPhase_GotoLabel(3, 0, 0); - return 0x41; -} + // "Free Units" + iVar10 = func_020295ec( + data_021970c4, func_02039e10("MMMINFO_未行動"), gpActiveScreenSt->bgTiles[this->unk_2c], + gpActiveScreenSt->tilemap[this->unk_2c], 0x17, iVar7, uVar3, uVar2, 0, 0); -// func_ov000_021bef1c -void BMapSallyEndYesNo::vfunc_c0(void) -{ - gSoundManager->unk_b0->vfunc_28(SE_SYS_START1, 0, 0); - return; -} + if (iVar5 != 0) + { + data_021970c4->unk_08 = data_021970cc->unk_04; + } -// func_ov000_021bef50 -s32 map::MIM_TurnEnd::vfunc_1c(void) -{ - PlayerPhase_GotoLabel(23, 0, 0); - func_ov000_021d6dfc(0); - return 0x41; -} + func_02029850( + data_021970c4, iVar5, gpActiveScreenSt->bgTiles[this->unk_2c], gpActiveScreenSt->tilemap[this->unk_2c], + 0x1e, iVar7, uVar3 + iVar10, uVar2, 0); -// func_ov000_021bef74 -void map::MIM_TurnEnd::vfunc_78(Menu * menu, MenuItemState * menuItemState) -{ - // "End the player phase. The enemy will move next." - func_ov000_021d6a9c(func_02039e10("MMMH_終了"), 0); - return; -} + data_021970c4->unk_08 = data_021970cc->unk_04; -EC BOOL func_0202dad0(MenuItemState * menuItemState, Menu * menu); + return; + } -// func_ov000_021bef90 -void map::MIM_TurnEnd::vfunc_90(Menu * menu, MenuItemState * menuItemState) -{ - if (func_0202dad0(menuItemState, menu)) + // func_ov000_021bf57c + /* 0DC */ virtual void vfunc_dc(void) { - // "End the player phase. The enemy will move next." - func_ov000_021d6a9c(func_02039e10("MMMH_終了"), 0); - } + s32 iVar1; - return; -} + Menu::vfunc_dc(); -// func_ov000_021befbc -char * map::MIM_TurnEnd::vfunc_00(void) -{ - // "End" - return func_02039e10("MMM_終了"); -} + if (data_02196f24->unk_0d) + { + iVar1 = 0x11; + } + else + { + iVar1 = 0x13; + } -EC void func_ov000_021beb94(ProcPtr); + func_02010f98(gpActiveScreenSt->tilemap[this->unk_2c] + 0x16 + iVar1 * 0x20, 10, 4); -// func_ov000_021befd0 -s32 map::MIM_Surrender::vfunc_24(Menu * menu, MenuItemState * menuItemState) -{ - if ((menuItemState->unk_09 & 7) != 1) - { - func_ov000_021beb94(menu->unk_10); - return 0x40; + return; } - return 0x100; -} - -// func_ov000_021beff8 -void map::MIM_Surrender::vfunc_78(Menu * menu, MenuItemState * menuItemState) -{ - // "Surrender and end wireless play." - func_ov000_021d6a9c(func_02039e10("MMMH_降参"), 0); - return; -} - -// func_ov000_021bf014 -void map::MIM_Surrender::vfunc_90(Menu * menu, MenuItemState * menuItemState) -{ - if (func_0202dad0(menuItemState, menu)) + // func_ov000_021bf574 + /* 024 */ virtual s32 vfunc_24(MenuItemState * menuItemState, s32 arg1) { - // "Surrender and end wireless play." - func_ov000_021d6a9c(func_02039e10("MMMH_降参"), 0); + return arg1; } - return; -} - -// func_ov000_021bf040 -s32 map::MIM_Surrender::vfunc_14(void) -{ - if (func_ov000_021a478c()) + // func_ov000_021bf544 + /* 028 */ virtual s32 vfunc_28(s32 arg0) { - return MENU_ENABLED; - } + if (!((arg0 & 0x3f) == 0 ? TRUE : FALSE)) + { + func_ov000_021d6e30(0); + return arg0; + } - return MENU_NOTSHOWN; -} + return arg0; + } -// func_ov000_021bf058 -s32 map::MIM_Surrender::vfunc_10(MenuItemState * menuItemState) -{ - if ((menuItemState->unk_09 & 7) != 1) + // d1 func_ov000_021bf4e0 + // d0 func_ov000_021bf474 + virtual ~MapMenu() { - return 5; } - - return 2; -} - -// func_ov000_021bf070 -char * map::MIM_Surrender::vfunc_00(void) -{ - // "Surrender" - return func_02039e10("MMM_降参"); -} - -namespace map -{ -class DI_Surrender : public MenuItem -{ -public: - /* 1C */ virtual s32 vfunc_1c(void); // func_ov000_021bf084 }; -class BMapDialogYesNo : public DialogYesNo +class MIM_UnitList : public MenuItem { public: - /* 000 */ virtual void vfunc_00(void); // func_ov000_021be6d8 - /* 0A0 */ virtual BOOL vfunc_a0(void); // func_ov000_021be934 - /* 0AC */ virtual s32 vfunc_ac(void); // func_ov000_021be91c - /* 130 */ virtual void vfunc_130(/* ? */); // func_ov000_021bea74 - /* 134 */ virtual void vfunc_134(/* ? */); // func_ov000_021beab0 -}; - -class SurrenderDialogYesNo : public BMapDialogYesNo -{ - /* 0B8 */ virtual void vfunc_b8(s32 arg0); // func_ov000_021bf0bc - - virtual ~SurrenderDialogYesNo(); - // // func_ov000_021bf93c - // // func_ov000_021bf978 - // virtual ~SurrenderDialogYesNo() - // { - // } -}; - -} // namespace map - -extern struct UnkStruct_02196f10 * data_02196f10; - -// func_ov000_021bf084 -s32 map::DI_Surrender::vfunc_1c(void) -{ - func_ov000_021d6dfc(0); - PlayerPhase_GotoLabel(38, 0, 0); - data_02196f10->unk_07 = 1; - return 0x44; -} - -// func_ov000_021bf0bc -void map::SurrenderDialogYesNo::vfunc_b8(s32 arg0) -{ - gMapStateManager->unk_14->unk_25 = Interpolate(0, 0, -16, arg0, 4); - return; -} - -EC void func_ov000_021beaf4(ProcPtr); - -// func_ov000_021bf0f4 -s32 map::MIM_TemporarySave::vfunc_24(Menu * menu, MenuItemState * menuItemState) -{ - if ((menuItemState->unk_09 & 7) != 1) + /* 00 */ virtual char * vfunc_00(void) { - func_ov000_021beaf4(menu->unk_10); - return 0x40; + // "Units" + return func_02039e10("MMM_部隊"); } - return 0x100; -} - -// func_ov000_021bf11c -void map::MIM_TemporarySave::vfunc_78(Menu * menu, MenuItemState * menuItemState) -{ - char * str; - - if (func_ov000_021a47e4()) - { - // "Exit this practice session." - str = "MMMH_練習終了"; - } - else + // func_ov000_021bf458 + /* 14 */ virtual s32 vfunc_14(void) { - // "Suspend the game." - str = "MMMH_中断"; + return 0; } - func_ov000_021d6a9c(func_02039e10(str), 0); - - return; -} - -// func_ov000_021bf148 -void map::MIM_TemporarySave::vfunc_90(Menu * menu, MenuItemState * menuItemState) -{ - char * str; - - if (!func_0202dad0(menuItemState, menu)) + // func_ov000_021bf42c + /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState) { + if (func_0202dad0(menuItemState, menu)) + { + // "Display a list of your units." + func_ov000_021d6a9c(func_02039e10("MMMH_部隊"), 0); + } + return; } - if (func_ov000_021a47e4()) + // func_ov000_021bf410 + /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState) { - // "Exit this practice session." - str = "MMMH_練習終了"; + // "Display a list of your units." + func_ov000_021d6a9c(func_02039e10("MMMH_部隊"), 0); + return; } - else + + // func_ov000_021bf3ec + /* 1C */ virtual s32 vfunc_1c(void) { - // "Suspend the game." - str = "MMMH_中断"; + PlayerPhase_GotoLabel(31, 0, 0); + func_ov000_021d6dfc(0); + return 0x41; } +}; - func_ov000_021d6a9c(func_02039e10(str), 0); - - return; -} - -EC BOOL func_0201f680(void); - -// func_ov000_021bf184 -s32 map::MIM_TemporarySave::vfunc_14(void) +class MIM_TutList : public MenuItem { - if (func_ov000_021a478c()) +public: + // func_ov000_021bf3d8 + /* 00 */ virtual char * vfunc_00(void) { - return MENU_NOTSHOWN; + // "Guide" + return func_02039e10("MMM_指南"); } - if (func_ov000_021a47e4() || func_0201f680()) + // func_ov000_021bf3a0 + /* 14 */ virtual s32 vfunc_14(void) { + if (func_ov000_021a47e4()) + { + return MENU_NOTSHOWN; + } + + if (!data_02196f20->flagMgr->func_02049438()) + { + return MENU_NOTSHOWN; + } + return MENU_ENABLED; } - return MENU_DISABLED; -} - -// func_ov000_021bf1c0 -s32 map::MIM_TemporarySave::vfunc_10(MenuItemState * menuItemState) -{ - if ((menuItemState->unk_09 & 7) != 1) + // func_ov000_021bf374 + /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState) { - return 5; - } + if (func_0202dad0(menuItemState, menu)) + { + // "Review tutorials on how the game is played." + func_ov000_021d6a9c(func_02039e10("MMMH_指南"), 0); + } - return 2; -} + return; + } -// func_ov000_021bf1d8 -char * map::MIM_TemporarySave::vfunc_00(void) -{ - if (func_ov000_021a47e4()) + // func_ov000_021bf358 + /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState) { - // "Exit" - return func_02039e10("MMM_練習終了"); + // "Review tutorials on how the game is played." + func_ov000_021d6a9c(func_02039e10("MMMH_指南"), 0); + return; } - else + + // func_ov000_021bf334 + /* 1C */ virtual s32 vfunc_1c(void) { - // "Suspend" - return func_02039e10("MMM_中断"); + PlayerPhase_GotoLabel(32, 0, 0); + func_ov000_021d6dfc(0); + return 0x41; } -} - -namespace map -{ - -class DI_TemporarySave : public DialogItemYes -{ -public: - /* 1C */ virtual s32 vfunc_1c(void); // func_ov000_021bf208 }; -} // namespace map - -// func_ov000_021bf208 -s32 map::DI_TemporarySave::vfunc_1c(void) +class MIM_Config : public MenuItem { - func_ov000_021d6dfc(0); - - if (func_ov000_021a47e4()) +public: + // func_ov000_021bf320 + /* 00 */ virtual char * vfunc_00(void) { - PlayerPhase_GotoLabel(26, 0, 0); - data_02196f10->unk_07 = 2; - return 0x44; + // "Options" + return func_02039e10("MMM_降参"); } - else + + // func_ov000_021bf308 + /* 14 */ virtual s32 vfunc_14(void) { - PlayerPhase_GotoLabel(27, 0, 0); - GameCtrl_GotoLabel(39); - return 0x60; - } -} + if (func_ov000_021a47e4()) + { + return MENU_NOTSHOWN; + } -// func_ov000_021bf264 -EC void func_ov000_021bf264(void * param_1, s32 param_2) -{ - gMapStateManager->unk_14->unk_25 = Interpolate(0, 0, -16, param_2, 4); - return; -} + return MENU_ENABLED; + } -// func_ov000_021bf29c -s32 map::MIM_Config::vfunc_1c(void) -{ - PlayerPhase_GotoLabel(33, 0, 0); - func_ov000_021d6dfc(0); - return 0x41; -} + // func_ov000_021bf2dc + /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState) + { + if (func_0202dad0(menuItemState, menu)) + { + // "Adjust game options." + func_ov000_021d6a9c(func_02039e10("MMMH_環境"), 0); + } -// func_ov000_021bf2c0 -void map::MIM_Config::vfunc_78(Menu * menu, MenuItemState * menuItemState) -{ - // "Adjust game options." - func_ov000_021d6a9c(func_02039e10("MMMH_環境"), 0); - return; -} + return; + } -// func_ov000_021bf2dc -void map::MIM_Config::vfunc_90(Menu * menu, MenuItemState * menuItemState) -{ - if (func_0202dad0(menuItemState, menu)) + // func_ov000_021bf2c0 + /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState) { // "Adjust game options." func_ov000_021d6a9c(func_02039e10("MMMH_環境"), 0); + return; } - return; -} + // func_ov000_021bf29c + /* 1C */ virtual s32 vfunc_1c(void) + { + PlayerPhase_GotoLabel(33, 0, 0); + func_ov000_021d6dfc(0); + return 0x41; + } +}; -// func_ov000_021bf308 -s32 map::MIM_Config::vfunc_14(void) +class TemporarySaveDialogYesNo : public BMapDialogYesNo { - if (func_ov000_021a47e4()) +public: + // func_ov000_021bf264 + /* B8 */ virtual void vfunc_b8(s32 param_2) { - return MENU_NOTSHOWN; + gMapStateManager->unk_14->unk_25 = Interpolate(0, 0, -16, param_2, 4); + return; } +}; - return MENU_ENABLED; -} - -// func_ov000_021bf320 -char * map::MIM_Config::vfunc_00(void) -{ - // "Options" - return func_02039e10("MMM_降参"); -} - -// func_ov000_021bf334 -s32 map::MIM_TutList::vfunc_1c(void) +class DI_TemporarySave : public DialogItemYes { - PlayerPhase_GotoLabel(32, 0, 0); - func_ov000_021d6dfc(0); - return 0x41; -} +public: + // func_ov000_021bf208 + /* 1C */ virtual s32 vfunc_1c(void) + { + func_ov000_021d6dfc(0); -// func_ov000_021bf358 -void map::MIM_TutList::vfunc_78(Menu * menu, MenuItemState * menuItemState) -{ - // "Review tutorials on how the game is played." - func_ov000_021d6a9c(func_02039e10("MMMH_指南"), 0); - return; -} + if (func_ov000_021a47e4()) + { + PlayerPhase_GotoLabel(26, 0, 0); + data_02196f10->unk_07 = 2; + return 0x44; + } + else + { + PlayerPhase_GotoLabel(27, 0, 0); + GameCtrl_GotoLabel(39); + return 0x60; + } + } +}; -// func_ov000_021bf374 -void map::MIM_TutList::vfunc_90(Menu * menu, MenuItemState * menuItemState) +class MIM_TemporarySave : public MenuItem { - if (func_0202dad0(menuItemState, menu)) +public: + // func_ov000_021bf1d8 + /* 00 */ virtual char * vfunc_00(void) { - // "Review tutorials on how the game is played." - func_ov000_021d6a9c(func_02039e10("MMMH_指南"), 0); + if (func_ov000_021a47e4()) + { + // "Exit" + return func_02039e10("MMM_練習終了"); + } + else + { + // "Suspend" + return func_02039e10("MMM_中断"); + } } - return; -} + // func_ov000_021bf1c0 + /* 10 */ virtual s32 vfunc_10(MenuItemState * menuItemState) + { + if ((menuItemState->unk_09 & 7) != 1) + { + return 5; + } -extern struct UnkStruct_02196f20 * data_02196f20; + return 2; + } -// func_ov000_021bf3a0 -s32 map::MIM_TutList::vfunc_14(void) -{ - if (func_ov000_021a47e4()) + // func_ov000_021bf184 + /* 14 */ virtual s32 vfunc_14(void) { - return MENU_NOTSHOWN; + if (func_ov000_021a478c()) + { + return MENU_NOTSHOWN; + } + + if (func_ov000_021a47e4() || func_0201f680()) + { + return MENU_ENABLED; + } + + return MENU_DISABLED; } - if (!data_02196f20->flagMgr->func_02049438()) + // func_ov000_021bf148 + /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState) { - return MENU_NOTSHOWN; - } + char * str; - return MENU_ENABLED; -} + if (!func_0202dad0(menuItemState, menu)) + { + return; + } -// func_ov000_021bf3d8 -char * map::MIM_TutList::vfunc_00(void) -{ - // "Guide" - return func_02039e10("MMM_指南"); -} + if (func_ov000_021a47e4()) + { + // "Exit this practice session." + str = "MMMH_練習終了"; + } + else + { + // "Suspend the game." + str = "MMMH_中断"; + } -// func_ov000_021bf3ec -s32 map::MIM_UnitList::vfunc_1c(void) -{ - PlayerPhase_GotoLabel(31, 0, 0); - func_ov000_021d6dfc(0); - return 0x41; -} + func_ov000_021d6a9c(func_02039e10(str), 0); -// func_ov000_021bf410 -void map::MIM_UnitList::vfunc_78(Menu * menu, MenuItemState * menuItemState) -{ - // "Display a list of your units." - func_ov000_021d6a9c(func_02039e10("MMMH_部隊"), 0); - return; -} + return; + } -// func_ov000_021bf42c -void map::MIM_UnitList::vfunc_90(Menu * menu, MenuItemState * menuItemState) -{ - if (func_0202dad0(menuItemState, menu)) + // func_ov000_021bf11c + /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState) { - // "Display a list of your units." - func_ov000_021d6a9c(func_02039e10("MMMH_部隊"), 0); - } + char * str; - return; -} + if (func_ov000_021a47e4()) + { + // "Exit this practice session." + str = "MMMH_練習終了"; + } + else + { + // "Suspend the game." + str = "MMMH_中断"; + } -// func_ov000_021bf458 -s32 map::MIM_UnitList::vfunc_14(void) -{ - return 0; -} + func_ov000_021d6a9c(func_02039e10(str), 0); -char * map::MIM_UnitList::vfunc_00(void) -{ - // "Units" - return func_02039e10("MMM_部隊"); -} + return; + } -// func_ov000_021bf544 -s32 map::MapMenu::vfunc_28(s32 arg0) -{ - if (!((arg0 & 0x3f) == 0 ? TRUE : FALSE)) + // func_ov000_021bf0f4 + /* 24 */ virtual s32 vfunc_24(Menu * menu, MenuItemState * menuItemState) { - func_ov000_021d6e30(0); - return arg0; - } + if ((menuItemState->unk_09 & 7) != 1) + { + func_ov000_021beaf4(menu->unk_10); + return 0x40; + } - return arg0; -} + return 0x100; + } +}; -// func_ov000_021bf574 -s32 map::MapMenu::vfunc_24(MenuItemState * menuItemState, s32 arg1) +class SurrenderDialogYesNo : public BMapDialogYesNo { - return arg1; -} +public: + // func_ov000_021bf0bc + /* 0B8 */ virtual void vfunc_b8(s32 arg0) + { + gMapStateManager->unk_14->unk_25 = Interpolate(0, 0, -16, arg0, 4); + return; + } -extern struct UnkStruct_02196f24 * data_02196f24; + // virtual ~SurrenderDialogYesNo() + // // func_ov000_021bf93c + // // func_ov000_021bf978 + // virtual ~SurrenderDialogYesNo() + // { + // } +}; -// func_ov000_021bf57c -void map::MapMenu::vfunc_dc(void) +class DI_Surrender : public DialogItemYes { - s32 iVar1; - - Menu::vfunc_dc(); - - if (data_02196f24->unk_0d) +public: + // func_ov000_021bf084 + /* 1C */ virtual s32 vfunc_1c(void) { - iVar1 = 0x11; + func_ov000_021d6dfc(0); + PlayerPhase_GotoLabel(38, 0, 0); + data_02196f10->unk_07 = 1; + return 0x44; } - else +}; + +class MIM_Surrender : public MenuItem +{ +public: + // func_ov000_021bf070 + /* 00 */ virtual char * vfunc_00(void) { - iVar1 = 0x13; + // "Surrender" + return func_02039e10("MMM_降参"); } - func_02010f98(gpActiveScreenSt->tilemap[this->unk_2c] + 0x16 + iVar1 * 0x20, 10, 4); - - return; -} - -struct UnkStruct_021970c4 -{ - void * unk_00; - void * unk_04; - void * unk_08; - void * unk_0c; - void * unk_10; - void * unk_14; -}; + // func_ov000_021bf058 + /* 10 */ virtual s32 vfunc_10(MenuItemState * menuItemState) + { + if ((menuItemState->unk_09 & 7) != 1) + { + return 5; + } -extern struct UnkStruct_021970c4 * data_021970c4; -extern struct UnkStruct_021970c4 * data_021970cc; + return 2; + } -// func_ov000_021bf5d4 -void map::MapMenu::vfunc_d8(void) -{ - s32 uVar2; - s32 uVar3; - s32 iVar5; - VmMap_Common * iVar5_; - int iVar7; - struct Unit * pUnit; - int iVar10; + // func_ov000_021bf040 + /* 14 */ virtual s32 vfunc_14(void) + { + if (func_ov000_021a478c()) + { + return MENU_ENABLED; + } - Menu::vfunc_d8(); + return MENU_NOTSHOWN; + } - iVar5_ = static_cast(HashTable::Get2("VmMap_FontMenuSub")); - uVar3 = iVar5_->unk_04; - uVar2 = iVar5_->unk_06; + // func_ov000_021bf014 + /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState) + { + if (func_0202dad0(menuItemState, menu)) + { + // "Surrender and end wireless play." + func_ov000_021d6a9c(func_02039e10("MMMH_降参"), 0); + } - iVar5 = 0; + return; + } - if (data_02196f24->unk_0d) + // func_ov000_021beff8 + /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState) { - iVar7 = 0x11; + // "Surrender and end wireless play." + func_ov000_021d6a9c(func_02039e10("MMMH_降参"), 0); + return; } - else + + // func_ov000_021befd0 + /* 24 */ virtual s32 vfunc_24(Menu * menu, MenuItemState * menuItemState) { - iVar7 = 0x13; + if ((menuItemState->unk_09 & 7) != 1) + { + func_ov000_021beb94(menu->unk_10); + return 0x40; + } + + return 0x100; } +}; - iVar7++; +class MIM_TurnEnd : public MenuItem +{ +public: + // func_ov000_021befbc + /* 00 */ virtual char * vfunc_00(void) + { + // "End" + return func_02039e10("MMM_終了"); + } - for (pUnit = Force::Get(data_ov000_021e3324->phase)->head; pUnit != NULL; pUnit = pUnit->unk_3c) + // func_ov000_021bef90 + /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState) { - if (pUnit->state2 & 0xe1) + if (func_0202dad0(menuItemState, menu)) { - continue; + // "End the player phase. The enemy will move next." + func_ov000_021d6a9c(func_02039e10("MMMH_終了"), 0); } - iVar5++; + return; } - if (iVar5 != 0) + // func_ov000_021bef74 + /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState) { - data_021970c4->unk_08 = data_021970cc->unk_14; + // "End the player phase. The enemy will move next." + func_ov000_021d6a9c(func_02039e10("MMMH_終了"), 0); + return; } - else + + // func_ov000_021bef50 + /* 1C */ virtual s32 vfunc_1c(void) { - data_021970c4->unk_08 = data_021970cc->unk_08; + PlayerPhase_GotoLabel(23, 0, 0); + func_ov000_021d6dfc(0); + return 0x41; } +}; + +} // namespace map - // "Free Units" - iVar10 = func_020295ec( - data_021970c4, func_02039e10("MMMINFO_未行動"), gpActiveScreenSt->bgTiles[this->unk_2c], - gpActiveScreenSt->tilemap[this->unk_2c], 0x17, iVar7, uVar3, uVar2, 0, 0); +class BMapSallyEndYesNo : public DialogYesNo +{ +public: + // func_ov000_021bef1c + /* 0C0 */ virtual void vfunc_c0(void) + { + gSoundManager->unk_b0->vfunc_28(SE_SYS_START1, 0, 0); + return; + } +}; - if (iVar5 != 0) +class BMapSallyEndYes : public DialogItemNo +{ +public: + // func_ov000_021bef00 + /* 1C */ virtual s32 vfunc_1c(void) { - data_021970c4->unk_08 = data_021970cc->unk_04; + PlayerPhase_GotoLabel(3, 0, 0); + return 0x41; } +}; - func_02029850( - data_021970c4, iVar5, gpActiveScreenSt->bgTiles[this->unk_2c], gpActiveScreenSt->tilemap[this->unk_2c], 0x1e, - iVar7, uVar3 + iVar10, uVar2, 0); +class BMapSallyEndNo : public DialogItemNo +{ +public: + // func_ov000_021bee60 + /* 1C */ virtual s32 vfunc_1c(void) + { + gMapStateManager->inputHandler->HideButton(3); - data_021970c4->unk_08 = data_021970cc->unk_04; + if (!((data_ov005_02217560->unk_00 != -1 ? TRUE : FALSE) & 0xff)) + { + gMapStateManager->inputHandler->SetButtonVisibility(0xf); + } + else + { + gMapStateManager->inputHandler->SetButtonVisibility(0x8f); + } - return; -} + gMapStateManager->cursor->isVisible = TRUE; -EC void func_0202b260(void *, s32, s32, s32, s32); + // "Select two units to have them trade starting positions." + func_ov000_021d6a9c(func_02039e10("MSH_位置変更"), 0); -// func_ov000_021bf75c -void map::MapMenu::vfunc_ec(void) -{ - s32 r3; - s32 r1; + return 0x81; + } +}; - Menu::vfunc_ec(); +EC void StartChildMenu(Menu *, void *, ProcPtr, u32, u32); +EC void func_020303bc(Dialog *, char *, void *, ProcPtr, s32, s32); - r3 = this->vfunc_d4(10); - r1 = 0x16; +EC void func_ov000_021bec24(ProcPtr param_1) +{ + static map::MIM_UnitList sUnitList; + static map::MIM_TutList sTutList; + static map::MIM_Config sConfig; + static map::MIM_TemporarySave sTemporarySave; + static map::MIM_Surrender sSurrender; + static map::MI_Separator sSeparator; + static map::MIM_TurnEnd sTurnEnd; - if (r3 >= 2) + // clang-format off + static MenuItem * data_ov000_021dd268[] = { - return; - } + &sUnitList, + &sTutList, + &sConfig, + &sTemporarySave, + &sSurrender, + &sSeparator, + &sTurnEnd, + }; + // clang-format on - func_0202b260( - gpActiveScreenSt->tilemap[this->unk_30], (5 - (r3 >> 1)) + r1, data_02196f24->unk_0d ? 0x11 : 0x13, 4, 0); + StartChildMenu(new map::MapMenu(), data_ov000_021dd268, param_1, 1, 0); return; } -// func_ov000_021bf7e8 -void map::MapMenu::vfunc_e8(void) +EC void func_ov000_021beaf4(ProcPtr param_1) { - s32 var_r2; - int iVar1; + static map::DI_TemporarySave sTemporarySave; - Menu::vfunc_e8(); - - iVar1 = this->vfunc_d4(10); - - if (data_02196f24->unk_0d != 0) - { - var_r2 = 0x11; - } - else + // clang-format off + static DialogItem * data_ov000_021dd25c[] = { - var_r2 = 0x13; - } + &sTemporarySave, + }; + // clang-format on - if (iVar1 < 2) - { - func_0202b260(gpActiveScreenSt->tilemap[this->unk_30], (5 - (iVar1 >> 1)) + 0x16, var_r2, 4, 0); - } + func_020303bc( + new map::TemporarySaveDialogYesNo(), func_02039e10((char *)(func_ov000_021a47e4() ? "MD_中断" : "MD_練習終了")), + data_ov000_021dd25c, param_1, 1, 0); return; } -EC void func_ov000_021be21c(void); - -// func_ov000_021bf88c -void map::MapMenu::vfunc_00(void) +EC void func_ov000_021beb94(ProcPtr param_1) { - func_ov000_021be21c(); - this->unk_40 = 1; + static map::DI_Surrender sSurrender; + + // clang-format off + static DialogItem * data_ov000_021dd244[] = + { + &sSurrender, + }; + // clang-format on + + func_020303bc(new map::SurrenderDialogYesNo(), func_02039e10("MD_降参"), data_ov000_021dd244, param_1, 1, 0); + return; } -// func_ov000_021bf8a4 -s32 map::MI_Separator::vfunc_14(void) +EC void func_ov000_021bed70(ProcPtr param_1) { - return 3; -} + gMapStateManager->cursor->isVisible = FALSE; -// func_ov000_021bf8ac -u32 map::MI_Separator::vfunc_cc(void) -{ - return 1; -} + gMapStateManager->inputHandler->SetButtonVisibility(0x8b); + gMapStateManager->inputHandler->ShowButton(3); -// func_ov000_021bf8b4 -u32 map::MI_Separator::vfunc_c4(void) -{ - return 0; + static BMapSallyEndYes sSallyEndYes; + static BMapSallyEndNo sSallyEndNo; + + // clang-format off + static MenuItem * data_ov000_021dd250[] = + { + &sSallyEndYes, + &sSallyEndNo, + }; + // clang-format on + + // "Conclude preparations?" + func_020303bc(new BMapSallyEndYesNo(), func_02039e10("MD_進撃終了"), data_ov000_021dd250, param_1, 1, 0); + + return; } // ~TemporarySaveDialogYesNo From e1d46869b1ece6b1d1963e45e6dfb9d2641ab79c Mon Sep 17 00:00:00 2001 From: Eebit Date: Sun, 1 Mar 2026 19:41:49 -0500 Subject: [PATCH 4/5] (map_menu) Renames --- config/YFEE01/arm9/overlays/ov000/symbols.txt | 120 +++++++++--------- include/unknown_funcs.h | 118 ++++++++--------- src/ov000/map_menu.cpp | 90 ++----------- src/ov000/playerphase.cpp | 2 +- 4 files changed, 132 insertions(+), 198 deletions(-) diff --git a/config/YFEE01/arm9/overlays/ov000/symbols.txt b/config/YFEE01/arm9/overlays/ov000/symbols.txt index ace26a7..9dbebff 100644 --- a/config/YFEE01/arm9/overlays/ov000/symbols.txt +++ b/config/YFEE01/arm9/overlays/ov000/symbols.txt @@ -531,66 +531,66 @@ func_ov000_021be9a4 kind:function(arm,size=0x6c) addr:0x021be9a4 func_ov000_021bea10 kind:function(arm,size=0x64) addr:0x021bea10 func_ov000_021bea74 kind:function(arm,size=0x3c) addr:0x021bea74 func_ov000_021beab0 kind:function(arm,size=0x44) addr:0x021beab0 -func_ov000_021beaf4 kind:function(arm,size=0xa0) addr:0x021beaf4 -func_ov000_021beb94 kind:function(arm,size=0x90) addr:0x021beb94 -func_ov000_021bec24 kind:function(arm,size=0x14c) addr:0x021bec24 -func_ov000_021bed70 kind:function(arm,size=0xf0) addr:0x021bed70 -func_ov000_021bee60 kind:function(arm,size=0xa0) addr:0x021bee60 -func_ov000_021bef00 kind:function(arm,size=0x1c) addr:0x021bef00 -func_ov000_021bef1c kind:function(arm,size=0x34) addr:0x021bef1c -func_ov000_021bef50 kind:function(arm,size=0x24) addr:0x021bef50 -func_ov000_021bef74 kind:function(arm,size=0x1c) addr:0x021bef74 -func_ov000_021bef90 kind:function(arm,size=0x2c) addr:0x021bef90 -func_ov000_021befbc kind:function(arm,size=0x14) addr:0x021befbc -func_ov000_021befd0 kind:function(arm,size=0x28) addr:0x021befd0 -func_ov000_021beff8 kind:function(arm,size=0x1c) addr:0x021beff8 -func_ov000_021bf014 kind:function(arm,size=0x2c) addr:0x021bf014 -func_ov000_021bf040 kind:function(arm,size=0x18) addr:0x021bf040 -func_ov000_021bf058 kind:function(arm,size=0x18) addr:0x021bf058 -func_ov000_021bf070 kind:function(arm,size=0x14) addr:0x021bf070 -func_ov000_021bf084 kind:function(arm,size=0x38) addr:0x021bf084 -func_ov000_021bf0bc kind:function(arm,size=0x38) addr:0x021bf0bc -func_ov000_021bf0f4 kind:function(arm,size=0x28) addr:0x021bf0f4 -func_ov000_021bf11c kind:function(arm,size=0x2c) addr:0x021bf11c -func_ov000_021bf148 kind:function(arm,size=0x3c) addr:0x021bf148 -func_ov000_021bf184 kind:function(arm,size=0x3c) addr:0x021bf184 -func_ov000_021bf1c0 kind:function(arm,size=0x18) addr:0x021bf1c0 -func_ov000_021bf1d8 kind:function(arm,size=0x30) addr:0x021bf1d8 -func_ov000_021bf208 kind:function(arm,size=0x5c) addr:0x021bf208 -func_ov000_021bf264 kind:function(arm,size=0x38) addr:0x021bf264 -func_ov000_021bf29c kind:function(arm,size=0x24) addr:0x021bf29c -func_ov000_021bf2c0 kind:function(arm,size=0x1c) addr:0x021bf2c0 -func_ov000_021bf2dc kind:function(arm,size=0x2c) addr:0x021bf2dc -func_ov000_021bf308 kind:function(arm,size=0x18) addr:0x021bf308 -func_ov000_021bf320 kind:function(arm,size=0x14) addr:0x021bf320 -func_ov000_021bf334 kind:function(arm,size=0x24) addr:0x021bf334 -func_ov000_021bf358 kind:function(arm,size=0x1c) addr:0x021bf358 -func_ov000_021bf374 kind:function(arm,size=0x2c) addr:0x021bf374 -func_ov000_021bf3a0 kind:function(arm,size=0x38) addr:0x021bf3a0 -func_ov000_021bf3d8 kind:function(arm,size=0x14) addr:0x021bf3d8 -func_ov000_021bf3ec kind:function(arm,size=0x24) addr:0x021bf3ec -func_ov000_021bf410 kind:function(arm,size=0x1c) addr:0x021bf410 -func_ov000_021bf42c kind:function(arm,size=0x2c) addr:0x021bf42c -func_ov000_021bf458 kind:function(arm,size=0x8) addr:0x021bf458 -func_ov000_021bf460 kind:function(arm,size=0x14) addr:0x021bf460 -func_ov000_021bf474 kind:function(arm,size=0x6c) addr:0x021bf474 -func_ov000_021bf4e0 kind:function(arm,size=0x64) addr:0x021bf4e0 -func_ov000_021bf544 kind:function(arm,size=0x30) addr:0x021bf544 -func_ov000_021bf574 kind:function(arm,size=0x8) addr:0x021bf574 -func_ov000_021bf57c kind:function(arm,size=0x58) addr:0x021bf57c -func_ov000_021bf5d4 kind:function(arm,size=0x188) addr:0x021bf5d4 -func_ov000_021bf75c kind:function(arm,size=0x8c) addr:0x021bf75c -func_ov000_021bf7e8 kind:function(arm,size=0xa4) addr:0x021bf7e8 -func_ov000_021bf88c kind:function(arm,size=0x18) addr:0x021bf88c -func_ov000_021bf8a4 kind:function(arm,size=0x8) addr:0x021bf8a4 -func_ov000_021bf8ac kind:function(arm,size=0x8) addr:0x021bf8ac -func_ov000_021bf8b4 kind:function(arm,size=0x8) addr:0x021bf8b4 -func_ov000_021bf8bc kind:function(arm,size=0x3c) addr:0x021bf8bc -func_ov000_021bf8f8 kind:function(arm,size=0x44) addr:0x021bf8f8 -func_ov000_021bf93c kind:function(arm,size=0x3c) addr:0x021bf93c -func_ov000_021bf978 kind:function(arm,size=0x44) addr:0x021bf978 -func_ov000_021bf9bc kind:function(arm,size=0x3c) addr:0x021bf9bc -func_ov000_021bf9f8 kind:function(arm,size=0x44) addr:0x021bf9f8 +StartChoice_TemporarySave kind:function(arm,size=0xa0) addr:0x021beaf4 +StartChoice_Surrender kind:function(arm,size=0x90) addr:0x021beb94 +StartMapMenu kind:function(arm,size=0x14c) addr:0x021bec24 +StartChoice_EndPreparations kind:function(arm,size=0xf0) addr:0x021bed70 +_ZN14BMapSallyEndNo8vfunc_1cEv kind:function(arm,size=0xa0) addr:0x021bee60 +_ZN15BMapSallyEndYes8vfunc_1cEv kind:function(arm,size=0x1c) addr:0x021bef00 +_ZN17BMapSallyEndYesNo8vfunc_c0Ev kind:function(arm,size=0x34) addr:0x021bef1c +_ZN3map11MIM_TurnEnd8vfunc_1cEv kind:function(arm,size=0x24) addr:0x021bef50 +_ZN3map11MIM_TurnEnd8vfunc_78EP4MenuP13MenuItemState kind:function(arm,size=0x1c) addr:0x021bef74 +_ZN3map11MIM_TurnEnd8vfunc_90EP4MenuP13MenuItemState kind:function(arm,size=0x2c) addr:0x021bef90 +_ZN3map11MIM_TurnEnd8vfunc_00Ev kind:function(arm,size=0x14) addr:0x021befbc +_ZN3map13MIM_Surrender8vfunc_24EP4MenuP13MenuItemState kind:function(arm,size=0x28) addr:0x021befd0 +_ZN3map13MIM_Surrender8vfunc_78EP4MenuP13MenuItemState kind:function(arm,size=0x1c) addr:0x021beff8 +_ZN3map13MIM_Surrender8vfunc_90EP4MenuP13MenuItemState kind:function(arm,size=0x2c) addr:0x021bf014 +_ZN3map13MIM_Surrender8vfunc_14Ev kind:function(arm,size=0x18) addr:0x021bf040 +_ZN3map13MIM_Surrender8vfunc_10EP13MenuItemState kind:function(arm,size=0x18) addr:0x021bf058 +_ZN3map13MIM_Surrender8vfunc_00Ev kind:function(arm,size=0x14) addr:0x021bf070 +_ZN3map12DI_Surrender8vfunc_1cEv kind:function(arm,size=0x38) addr:0x021bf084 +_ZN3map20SurrenderDialogYesNo8vfunc_b8El kind:function(arm,size=0x38) addr:0x021bf0bc +_ZN3map17MIM_TemporarySave8vfunc_24EP4MenuP13MenuItemState kind:function(arm,size=0x28) addr:0x021bf0f4 +_ZN3map17MIM_TemporarySave8vfunc_78EP4MenuP13MenuItemState kind:function(arm,size=0x2c) addr:0x021bf11c +_ZN3map17MIM_TemporarySave8vfunc_90EP4MenuP13MenuItemState kind:function(arm,size=0x3c) addr:0x021bf148 +_ZN3map17MIM_TemporarySave8vfunc_14Ev kind:function(arm,size=0x3c) addr:0x021bf184 +_ZN3map17MIM_TemporarySave8vfunc_10EP13MenuItemState kind:function(arm,size=0x18) addr:0x021bf1c0 +_ZN3map17MIM_TemporarySave8vfunc_00Ev kind:function(arm,size=0x30) addr:0x021bf1d8 +_ZN3map16DI_TemporarySave8vfunc_1cEv kind:function(arm,size=0x5c) addr:0x021bf208 +_ZN3map24TemporarySaveDialogYesNo8vfunc_b8El kind:function(arm,size=0x38) addr:0x021bf264 +_ZN3map10MIM_Config8vfunc_1cEv kind:function(arm,size=0x24) addr:0x021bf29c +_ZN3map10MIM_Config8vfunc_78EP4MenuP13MenuItemState kind:function(arm,size=0x1c) addr:0x021bf2c0 +_ZN3map10MIM_Config8vfunc_90EP4MenuP13MenuItemState kind:function(arm,size=0x2c) addr:0x021bf2dc +_ZN3map10MIM_Config8vfunc_14Ev kind:function(arm,size=0x18) addr:0x021bf308 +_ZN3map10MIM_Config8vfunc_00Ev kind:function(arm,size=0x14) addr:0x021bf320 +_ZN3map11MIM_TutList8vfunc_1cEv kind:function(arm,size=0x24) addr:0x021bf334 +_ZN3map11MIM_TutList8vfunc_78EP4MenuP13MenuItemState kind:function(arm,size=0x1c) addr:0x021bf358 +_ZN3map11MIM_TutList8vfunc_90EP4MenuP13MenuItemState kind:function(arm,size=0x2c) addr:0x021bf374 +_ZN3map11MIM_TutList8vfunc_14Ev kind:function(arm,size=0x38) addr:0x021bf3a0 +_ZN3map11MIM_TutList8vfunc_00Ev kind:function(arm,size=0x14) addr:0x021bf3d8 +_ZN3map12MIM_UnitList8vfunc_1cEv kind:function(arm,size=0x24) addr:0x021bf3ec +_ZN3map12MIM_UnitList8vfunc_78EP4MenuP13MenuItemState kind:function(arm,size=0x1c) addr:0x021bf410 +_ZN3map12MIM_UnitList8vfunc_90EP4MenuP13MenuItemState kind:function(arm,size=0x2c) addr:0x021bf42c +_ZN3map12MIM_UnitList8vfunc_14Ev kind:function(arm,size=0x8) addr:0x021bf458 +_ZN3map12MIM_UnitList8vfunc_00Ev kind:function(arm,size=0x14) addr:0x021bf460 +_ZN3map7MapMenuD0Ev kind:function(arm,size=0x6c) addr:0x021bf474 +_ZN3map7MapMenuD1Ev kind:function(arm,size=0x64) addr:0x021bf4e0 +_ZN3map7MapMenu8vfunc_28El kind:function(arm,size=0x30) addr:0x021bf544 +_ZN3map7MapMenu8vfunc_24EP13MenuItemStatel kind:function(arm,size=0x8) addr:0x021bf574 +_ZN3map7MapMenu8vfunc_dcEv kind:function(arm,size=0x58) addr:0x021bf57c +_ZN3map7MapMenu8vfunc_d8Ev kind:function(arm,size=0x188) addr:0x021bf5d4 +_ZN3map7MapMenu8vfunc_ecEv kind:function(arm,size=0x8c) addr:0x021bf75c +_ZN3map7MapMenu8vfunc_e8Ev kind:function(arm,size=0xa4) addr:0x021bf7e8 +_ZN3map7MapMenu8vfunc_00Ev kind:function(arm,size=0x18) addr:0x021bf88c +_ZN3map12MI_Separator8vfunc_14Ev kind:function(arm,size=0x8) addr:0x021bf8a4 +_ZN3map12MI_Separator8vfunc_ccEv kind:function(arm,size=0x8) addr:0x021bf8ac +_ZN3map12MI_Separator8vfunc_c4Ev kind:function(arm,size=0x8) addr:0x021bf8b4 +_ZN3map24TemporarySaveDialogYesNoD1Ev kind:function(arm,size=0x3c) addr:0x021bf8bc +_ZN3map24TemporarySaveDialogYesNoD0Ev kind:function(arm,size=0x44) addr:0x021bf8f8 +_ZN3map20SurrenderDialogYesNoD1Ev kind:function(arm,size=0x3c) addr:0x021bf93c +_ZN3map20SurrenderDialogYesNoD0Ev kind:function(arm,size=0x44) addr:0x021bf978 +_ZN17BMapSallyEndYesNoD1Ev kind:function(arm,size=0x3c) addr:0x021bf9bc +_ZN17BMapSallyEndYesNoD0Ev kind:function(arm,size=0x44) addr:0x021bf9f8 func_ov000_021bfa3c kind:function(arm,size=0x24) addr:0x021bfa3c func_ov000_021bfa60 kind:function(arm,size=0x90) addr:0x021bfa60 func_ov000_021bfaf0 kind:function(arm,size=0x90) addr:0x021bfaf0 diff --git a/include/unknown_funcs.h b/include/unknown_funcs.h index ee217e6..197424d 100644 --- a/include/unknown_funcs.h +++ b/include/unknown_funcs.h @@ -6213,66 +6213,66 @@ EC void func_ov000_021bc9e4(void *); // EC ??? func_ov000_021bea10 // EC ??? func_ov000_021bea74 // EC ??? func_ov000_021beab0 -// EC ??? func_ov000_021beaf4 -// EC ??? func_ov000_021beb94 -EC void func_ov000_021bec24(ProcPtr); -// EC ??? func_ov000_021bed70 -// EC ??? func_ov000_021bee60 -// EC ??? func_ov000_021bef00 -// EC ??? func_ov000_021bef1c -// EC ??? func_ov000_021bef50 -// EC ??? func_ov000_021bef74 -// EC ??? func_ov000_021bef90 -// EC ??? func_ov000_021befbc -// EC ??? func_ov000_021befd0 -// EC ??? func_ov000_021beff8 -// EC ??? func_ov000_021bf014 -// EC ??? func_ov000_021bf040 -// EC ??? func_ov000_021bf058 -// EC ??? func_ov000_021bf070 -// EC ??? func_ov000_021bf084 +// EC ??? StartChoice_TemporarySave +// EC ??? StartChoice_Surrender +EC void StartMapMenu(ProcPtr); +// EC ??? StartChoice_EndPreparations +// EC ??? _ZN14BMapSallyEndNo8vfunc_1cEv +// EC ??? _ZN15BMapSallyEndYes8vfunc_1cEv +// EC ??? _ZN17BMapSallyEndYesNo8vfunc_c0Ev +// EC ??? _ZN3map11MIM_TurnEnd8vfunc_1cEv +// EC ??? _ZN3map11MIM_TurnEnd8vfunc_78EP4MenuP13MenuItemState +// EC ??? _ZN3map11MIM_TurnEnd8vfunc_90EP4MenuP13MenuItemState +// EC ??? _ZN3map11MIM_TurnEnd8vfunc_00Ev +// EC ??? _ZN3map13MIM_Surrender8vfunc_24EP4MenuP13MenuItemState +// EC ??? _ZN3map13MIM_Surrender8vfunc_78EP4MenuP13MenuItemState +// EC ??? _ZN3map13MIM_Surrender8vfunc_90EP4MenuP13MenuItemState +// EC ??? _ZN3map13MIM_Surrender8vfunc_14Ev +// EC ??? _ZN3map13MIM_Surrender8vfunc_10EP13MenuItemState +// EC ??? _ZN3map13MIM_Surrender8vfunc_00Ev +// EC ??? _ZN3map12DI_Surrender8vfunc_1cEv // EC ??? func_ov000_021bf0bc -// EC ??? func_ov000_021bf0f4 -// EC ??? func_ov000_021bf11c -// EC ??? func_ov000_021bf148 -// EC ??? func_ov000_021bf184 -// EC ??? func_ov000_021bf1c0 -// EC ??? func_ov000_021bf1d8 -// EC ??? func_ov000_021bf208 -// EC ??? func_ov000_021bf264 -// EC ??? func_ov000_021bf29c -// EC ??? func_ov000_021bf2c0 -// EC ??? func_ov000_021bf2dc -// EC ??? func_ov000_021bf308 -// EC ??? func_ov000_021bf320 -// EC ??? func_ov000_021bf334 -// EC ??? func_ov000_021bf358 -// EC ??? func_ov000_021bf374 -// EC ??? func_ov000_021bf3a0 -// EC ??? func_ov000_021bf3d8 -// EC ??? func_ov000_021bf3ec -// EC ??? func_ov000_021bf410 -// EC ??? func_ov000_021bf42c -// EC ??? func_ov000_021bf458 -// EC ??? func_ov000_021bf460 -// EC ??? func_ov000_021bf474 -// EC ??? func_ov000_021bf4e0 -// EC ??? func_ov000_021bf544 -// EC ??? func_ov000_021bf574 -// EC ??? func_ov000_021bf57c -// EC ??? func_ov000_021bf5d4 -// EC ??? func_ov000_021bf75c -// EC ??? func_ov000_021bf7e8 -// EC ??? func_ov000_021bf88c -// EC ??? func_ov000_021bf8a4 -// EC ??? func_ov000_021bf8ac -// EC ??? func_ov000_021bf8b4 -// EC ??? func_ov000_021bf8bc -// EC ??? func_ov000_021bf8f8 -// EC ??? func_ov000_021bf93c -// EC ??? func_ov000_021bf978 -// EC ??? func_ov000_021bf9bc -// EC ??? func_ov000_021bf9f8 +// EC ??? _ZN3map17MIM_TemporarySave8vfunc_24EP4MenuP13MenuItemState +// EC ??? _ZN3map17MIM_TemporarySave8vfunc_78EP4MenuP13MenuItemState +// EC ??? _ZN3map17MIM_TemporarySave8vfunc_90EP4MenuP13MenuItemState +// EC ??? _ZN3map17MIM_TemporarySave8vfunc_14Ev +// EC ??? _ZN3map17MIM_TemporarySave8vfunc_10EP13MenuItemState +// EC ??? _ZN3map17MIM_TemporarySave8vfunc_00Ev +// EC ??? _ZN3map16DI_TemporarySave8vfunc_1cEv +// EC ??? _ZN3map24TemporarySaveDialogYesNo8vfunc_b8El +// EC ??? _ZN3map10MIM_Config8vfunc_1cEv +// EC ??? _ZN3map10MIM_Config8vfunc_78EP4MenuP13MenuItemState +// EC ??? _ZN3map10MIM_Config8vfunc_90EP4MenuP13MenuItemState +// EC ??? _ZN3map10MIM_Config8vfunc_14Ev +// EC ??? _ZN3map10MIM_Config8vfunc_00Ev +// EC ??? _ZN3map11MIM_TutList8vfunc_1cEv +// EC ??? _ZN3map11MIM_TutList8vfunc_78EP4MenuP13MenuItemState +// EC ??? _ZN3map11MIM_TutList8vfunc_90EP4MenuP13MenuItemState +// EC ??? _ZN3map11MIM_TutList8vfunc_14Ev +// EC ??? _ZN3map11MIM_TutList8vfunc_00Ev +// EC ??? _ZN3map12MIM_UnitList8vfunc_1cEv +// EC ??? _ZN3map12MIM_UnitList8vfunc_78EP4MenuP13MenuItemState +// EC ??? _ZN3map12MIM_UnitList8vfunc_90EP4MenuP13MenuItemState +// EC ??? _ZN3map12MIM_UnitList8vfunc_14Ev +// EC ??? _ZN3map12MIM_UnitList8vfunc_00Ev +// EC ??? _ZN3map7MapMenuD0Ev +// EC ??? _ZN3map7MapMenuD1Ev +// EC ??? _ZN3map7MapMenu8vfunc_28El +// EC ??? _ZN3map7MapMenu8vfunc_24EP13MenuItemStatel +// EC ??? _ZN3map7MapMenu8vfunc_dcEv +// EC ??? _ZN3map7MapMenu8vfunc_d8Ev +// EC ??? _ZN3map7MapMenu8vfunc_ecEv +// EC ??? _ZN3map7MapMenu8vfunc_e8Ev +// EC ??? _ZN3map7MapMenu8vfunc_00Ev +// EC ??? _ZN3map12MI_Separator8vfunc_14Ev +// EC ??? _ZN3map12MI_Separator8vfunc_ccEv +// EC ??? _ZN3map12MI_Separator8vfunc_c4Ev +// EC ??? _ZN3map24TemporarySaveDialogYesNoD1Ev +// EC ??? _ZN3map24TemporarySaveDialogYesNoD0Ev +// EC ??? _ZN3map20SurrenderDialogYesNoD1Ev +// EC ??? _ZN3map20SurrenderDialogYesNoD0Ev +// EC ??? _ZN17BMapSallyEndYesNoD1Ev +// EC ??? _ZN17BMapSallyEndYesNoD0Ev // EC ??? func_ov000_021bfa3c // EC ??? func_ov000_021bfa60 // EC ??? func_ov000_021bfaf0 diff --git a/src/ov000/map_menu.cpp b/src/ov000/map_menu.cpp index f0aeef8..dbf0195 100644 --- a/src/ov000/map_menu.cpp +++ b/src/ov000/map_menu.cpp @@ -35,8 +35,8 @@ EC BOOL func_0201f680(void); EC BOOL func_0202dad0(MenuItemState * menuItemState, Menu * menu); EC void func_ov000_021be21c(void); -EC void func_ov000_021beaf4(ProcPtr); -EC void func_ov000_021beb94(ProcPtr); +EC void StartChoice_TemporarySave(ProcPtr); +EC void StartChoice_Surrender(ProcPtr); EC void func_ov000_021d6a9c(char *, s32); EC void PlayerPhase_GotoLabel(s32, s32, s32); @@ -99,19 +99,16 @@ class BMapMenu : public Menu class MI_Separator : public MenuItem { public: - // func_ov000_021bf8b4 /* C4 */ virtual u32 vfunc_c4(void) { return 0; } - // func_ov000_021bf8ac /* CC */ virtual u32 vfunc_cc(void) { return 1; } - // func_ov000_021bf8a4 /* 14 */ virtual s32 vfunc_14(void) { return 3; @@ -129,7 +126,6 @@ class BSystemMapMenu : public BMapMenu class MapMenu : public BSystemMapMenu { public: - // func_ov000_021bf88c /* 000 */ virtual void vfunc_00(void) { func_ov000_021be21c(); @@ -137,7 +133,6 @@ class MapMenu : public BSystemMapMenu return; } - // func_ov000_021bf7e8 /* 0E8 */ virtual void vfunc_e8(void) { s32 var_r2; @@ -164,7 +159,6 @@ class MapMenu : public BSystemMapMenu return; } - // func_ov000_021bf75c /* 0EC */ virtual void vfunc_ec(void) { s32 r3; @@ -186,7 +180,6 @@ class MapMenu : public BSystemMapMenu return; } - // func_ov000_021bf5d4 /* 0D8 */ virtual void vfunc_d8(void) { s32 uVar2; @@ -254,7 +247,6 @@ class MapMenu : public BSystemMapMenu return; } - // func_ov000_021bf57c /* 0DC */ virtual void vfunc_dc(void) { s32 iVar1; @@ -275,13 +267,11 @@ class MapMenu : public BSystemMapMenu return; } - // func_ov000_021bf574 /* 024 */ virtual s32 vfunc_24(MenuItemState * menuItemState, s32 arg1) { return arg1; } - // func_ov000_021bf544 /* 028 */ virtual s32 vfunc_28(s32 arg0) { if (!((arg0 & 0x3f) == 0 ? TRUE : FALSE)) @@ -293,8 +283,6 @@ class MapMenu : public BSystemMapMenu return arg0; } - // d1 func_ov000_021bf4e0 - // d0 func_ov000_021bf474 virtual ~MapMenu() { } @@ -309,13 +297,11 @@ class MIM_UnitList : public MenuItem return func_02039e10("MMM_部隊"); } - // func_ov000_021bf458 /* 14 */ virtual s32 vfunc_14(void) { return 0; } - // func_ov000_021bf42c /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState) { if (func_0202dad0(menuItemState, menu)) @@ -327,7 +313,6 @@ class MIM_UnitList : public MenuItem return; } - // func_ov000_021bf410 /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState) { // "Display a list of your units." @@ -335,7 +320,6 @@ class MIM_UnitList : public MenuItem return; } - // func_ov000_021bf3ec /* 1C */ virtual s32 vfunc_1c(void) { PlayerPhase_GotoLabel(31, 0, 0); @@ -347,14 +331,12 @@ class MIM_UnitList : public MenuItem class MIM_TutList : public MenuItem { public: - // func_ov000_021bf3d8 /* 00 */ virtual char * vfunc_00(void) { // "Guide" return func_02039e10("MMM_指南"); } - // func_ov000_021bf3a0 /* 14 */ virtual s32 vfunc_14(void) { if (func_ov000_021a47e4()) @@ -370,7 +352,6 @@ class MIM_TutList : public MenuItem return MENU_ENABLED; } - // func_ov000_021bf374 /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState) { if (func_0202dad0(menuItemState, menu)) @@ -382,7 +363,6 @@ class MIM_TutList : public MenuItem return; } - // func_ov000_021bf358 /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState) { // "Review tutorials on how the game is played." @@ -390,7 +370,6 @@ class MIM_TutList : public MenuItem return; } - // func_ov000_021bf334 /* 1C */ virtual s32 vfunc_1c(void) { PlayerPhase_GotoLabel(32, 0, 0); @@ -402,14 +381,12 @@ class MIM_TutList : public MenuItem class MIM_Config : public MenuItem { public: - // func_ov000_021bf320 /* 00 */ virtual char * vfunc_00(void) { // "Options" return func_02039e10("MMM_降参"); } - // func_ov000_021bf308 /* 14 */ virtual s32 vfunc_14(void) { if (func_ov000_021a47e4()) @@ -420,7 +397,6 @@ class MIM_Config : public MenuItem return MENU_ENABLED; } - // func_ov000_021bf2dc /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState) { if (func_0202dad0(menuItemState, menu)) @@ -432,7 +408,6 @@ class MIM_Config : public MenuItem return; } - // func_ov000_021bf2c0 /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState) { // "Adjust game options." @@ -440,7 +415,6 @@ class MIM_Config : public MenuItem return; } - // func_ov000_021bf29c /* 1C */ virtual s32 vfunc_1c(void) { PlayerPhase_GotoLabel(33, 0, 0); @@ -452,7 +426,6 @@ class MIM_Config : public MenuItem class TemporarySaveDialogYesNo : public BMapDialogYesNo { public: - // func_ov000_021bf264 /* B8 */ virtual void vfunc_b8(s32 param_2) { gMapStateManager->unk_14->unk_25 = Interpolate(0, 0, -16, param_2, 4); @@ -463,7 +436,6 @@ class TemporarySaveDialogYesNo : public BMapDialogYesNo class DI_TemporarySave : public DialogItemYes { public: - // func_ov000_021bf208 /* 1C */ virtual s32 vfunc_1c(void) { func_ov000_021d6dfc(0); @@ -486,7 +458,6 @@ class DI_TemporarySave : public DialogItemYes class MIM_TemporarySave : public MenuItem { public: - // func_ov000_021bf1d8 /* 00 */ virtual char * vfunc_00(void) { if (func_ov000_021a47e4()) @@ -501,7 +472,6 @@ class MIM_TemporarySave : public MenuItem } } - // func_ov000_021bf1c0 /* 10 */ virtual s32 vfunc_10(MenuItemState * menuItemState) { if ((menuItemState->unk_09 & 7) != 1) @@ -512,7 +482,6 @@ class MIM_TemporarySave : public MenuItem return 2; } - // func_ov000_021bf184 /* 14 */ virtual s32 vfunc_14(void) { if (func_ov000_021a478c()) @@ -528,7 +497,6 @@ class MIM_TemporarySave : public MenuItem return MENU_DISABLED; } - // func_ov000_021bf148 /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState) { char * str; @@ -554,7 +522,6 @@ class MIM_TemporarySave : public MenuItem return; } - // func_ov000_021bf11c /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState) { char * str; @@ -575,12 +542,11 @@ class MIM_TemporarySave : public MenuItem return; } - // func_ov000_021bf0f4 /* 24 */ virtual s32 vfunc_24(Menu * menu, MenuItemState * menuItemState) { if ((menuItemState->unk_09 & 7) != 1) { - func_ov000_021beaf4(menu->unk_10); + StartChoice_TemporarySave(menu->unk_10); return 0x40; } @@ -591,25 +557,16 @@ class MIM_TemporarySave : public MenuItem class SurrenderDialogYesNo : public BMapDialogYesNo { public: - // func_ov000_021bf0bc /* 0B8 */ virtual void vfunc_b8(s32 arg0) { gMapStateManager->unk_14->unk_25 = Interpolate(0, 0, -16, arg0, 4); return; } - - // virtual ~SurrenderDialogYesNo() - // // func_ov000_021bf93c - // // func_ov000_021bf978 - // virtual ~SurrenderDialogYesNo() - // { - // } }; class DI_Surrender : public DialogItemYes { public: - // func_ov000_021bf084 /* 1C */ virtual s32 vfunc_1c(void) { func_ov000_021d6dfc(0); @@ -622,14 +579,12 @@ class DI_Surrender : public DialogItemYes class MIM_Surrender : public MenuItem { public: - // func_ov000_021bf070 /* 00 */ virtual char * vfunc_00(void) { // "Surrender" return func_02039e10("MMM_降参"); } - // func_ov000_021bf058 /* 10 */ virtual s32 vfunc_10(MenuItemState * menuItemState) { if ((menuItemState->unk_09 & 7) != 1) @@ -640,7 +595,6 @@ class MIM_Surrender : public MenuItem return 2; } - // func_ov000_021bf040 /* 14 */ virtual s32 vfunc_14(void) { if (func_ov000_021a478c()) @@ -651,7 +605,6 @@ class MIM_Surrender : public MenuItem return MENU_NOTSHOWN; } - // func_ov000_021bf014 /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState) { if (func_0202dad0(menuItemState, menu)) @@ -663,7 +616,6 @@ class MIM_Surrender : public MenuItem return; } - // func_ov000_021beff8 /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState) { // "Surrender and end wireless play." @@ -671,12 +623,11 @@ class MIM_Surrender : public MenuItem return; } - // func_ov000_021befd0 /* 24 */ virtual s32 vfunc_24(Menu * menu, MenuItemState * menuItemState) { if ((menuItemState->unk_09 & 7) != 1) { - func_ov000_021beb94(menu->unk_10); + StartChoice_Surrender(menu->unk_10); return 0x40; } @@ -687,14 +638,12 @@ class MIM_Surrender : public MenuItem class MIM_TurnEnd : public MenuItem { public: - // func_ov000_021befbc /* 00 */ virtual char * vfunc_00(void) { // "End" return func_02039e10("MMM_終了"); } - // func_ov000_021bef90 /* 90 */ virtual void vfunc_90(Menu * menu, MenuItemState * menuItemState) { if (func_0202dad0(menuItemState, menu)) @@ -706,7 +655,6 @@ class MIM_TurnEnd : public MenuItem return; } - // func_ov000_021bef74 /* 78 */ virtual void vfunc_78(Menu * menu, MenuItemState * menuItemState) { // "End the player phase. The enemy will move next." @@ -714,7 +662,6 @@ class MIM_TurnEnd : public MenuItem return; } - // func_ov000_021bef50 /* 1C */ virtual s32 vfunc_1c(void) { PlayerPhase_GotoLabel(23, 0, 0); @@ -728,7 +675,6 @@ class MIM_TurnEnd : public MenuItem class BMapSallyEndYesNo : public DialogYesNo { public: - // func_ov000_021bef1c /* 0C0 */ virtual void vfunc_c0(void) { gSoundManager->unk_b0->vfunc_28(SE_SYS_START1, 0, 0); @@ -739,7 +685,6 @@ class BMapSallyEndYesNo : public DialogYesNo class BMapSallyEndYes : public DialogItemNo { public: - // func_ov000_021bef00 /* 1C */ virtual s32 vfunc_1c(void) { PlayerPhase_GotoLabel(3, 0, 0); @@ -750,7 +695,6 @@ class BMapSallyEndYes : public DialogItemNo class BMapSallyEndNo : public DialogItemNo { public: - // func_ov000_021bee60 /* 1C */ virtual s32 vfunc_1c(void) { gMapStateManager->inputHandler->HideButton(3); @@ -776,7 +720,7 @@ class BMapSallyEndNo : public DialogItemNo EC void StartChildMenu(Menu *, void *, ProcPtr, u32, u32); EC void func_020303bc(Dialog *, char *, void *, ProcPtr, s32, s32); -EC void func_ov000_021bec24(ProcPtr param_1) +EC void StartMapMenu(ProcPtr parent) { static map::MIM_UnitList sUnitList; static map::MIM_TutList sTutList; @@ -799,12 +743,12 @@ EC void func_ov000_021bec24(ProcPtr param_1) }; // clang-format on - StartChildMenu(new map::MapMenu(), data_ov000_021dd268, param_1, 1, 0); + StartChildMenu(new map::MapMenu(), data_ov000_021dd268, parent, 1, 0); return; } -EC void func_ov000_021beaf4(ProcPtr param_1) +EC void StartChoice_TemporarySave(ProcPtr parent) { static map::DI_TemporarySave sTemporarySave; @@ -817,12 +761,12 @@ EC void func_ov000_021beaf4(ProcPtr param_1) func_020303bc( new map::TemporarySaveDialogYesNo(), func_02039e10((char *)(func_ov000_021a47e4() ? "MD_中断" : "MD_練習終了")), - data_ov000_021dd25c, param_1, 1, 0); + data_ov000_021dd25c, parent, 1, 0); return; } -EC void func_ov000_021beb94(ProcPtr param_1) +EC void StartChoice_Surrender(ProcPtr parent) { static map::DI_Surrender sSurrender; @@ -833,12 +777,12 @@ EC void func_ov000_021beb94(ProcPtr param_1) }; // clang-format on - func_020303bc(new map::SurrenderDialogYesNo(), func_02039e10("MD_降参"), data_ov000_021dd244, param_1, 1, 0); + func_020303bc(new map::SurrenderDialogYesNo(), func_02039e10("MD_降参"), data_ov000_021dd244, parent, 1, 0); return; } -EC void func_ov000_021bed70(ProcPtr param_1) +EC void StartChoice_EndPreparations(ProcPtr parent) { gMapStateManager->cursor->isVisible = FALSE; @@ -857,21 +801,11 @@ EC void func_ov000_021bed70(ProcPtr param_1) // clang-format on // "Conclude preparations?" - func_020303bc(new BMapSallyEndYesNo(), func_02039e10("MD_進撃終了"), data_ov000_021dd250, param_1, 1, 0); + func_020303bc(new BMapSallyEndYesNo(), func_02039e10("MD_進撃終了"), data_ov000_021dd250, parent, 1, 0); return; } -// ~TemporarySaveDialogYesNo - -// func_ov000_021bf93c -// func_ov000_021bf978 -// ~SurrenderDialogYesNo() - -// func_ov000_021bf9bc -// func_ov000_021bf9f8 -// ~BMapSallyEndYesNo - EC void func_ov000_021bfa3c(void) { func_ov000_021b79f8(); diff --git a/src/ov000/playerphase.cpp b/src/ov000/playerphase.cpp index c8b1797..72cf831 100644 --- a/src/ov000/playerphase.cpp +++ b/src/ov000/playerphase.cpp @@ -799,7 +799,7 @@ EC void func_ov000_021acc44(void) EC void func_ov000_021acc7c(ProcPtr proc) { gMapStateManager->inputHandler->SetButtonVisibility(0x8b); - func_ov000_021bec24(proc); + StartMapMenu(proc); if (data_ov000_021e3340->Check_02()) { From 9880bbbdd32e023471250061bba3c3828f1343a5 Mon Sep 17 00:00:00 2001 From: Eebit Date: Sun, 1 Mar 2026 19:47:06 -0500 Subject: [PATCH 5/5] (playerphase) Fix function after rename; fix inline in Disposition --- src/ov000/disposition.cpp | 14 -------------- src/ov000/playerphase.cpp | 2 +- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/src/ov000/disposition.cpp b/src/ov000/disposition.cpp index 02e47dd..8c2fe56 100644 --- a/src/ov000/disposition.cpp +++ b/src/ov000/disposition.cpp @@ -248,8 +248,6 @@ static inline BOOL BoundsCheck(s32 param_1, s32 param_2) return FALSE; } -extern struct Unit gUnitList[]; - EC BOOL func_ov000_021baafc(void *, struct Unit *, BOOL); EC void func_ov000_021a3974(void *, s32); @@ -278,18 +276,6 @@ EC void func_ov000_021a36e0(void); EC void func_ov000_021d9ca8(Spawn *, struct Unit *, s8, s8); -static inline struct Unit * GetUnit(s32 id) -{ - if (id == 0) - { - return NULL; - } - else - { - return gUnitList + id - 1; - } -} - void Spawn::func_ov000_021d9adc(struct JobData * job) { u32 flags; diff --git a/src/ov000/playerphase.cpp b/src/ov000/playerphase.cpp index 72cf831..5e54c4c 100644 --- a/src/ov000/playerphase.cpp +++ b/src/ov000/playerphase.cpp @@ -935,7 +935,7 @@ EC void func_ov000_021ad0f4(ProcPtr param_1) data_021974fc->unk_00 = GetUnit(gActionSt->unitId); - func_ov000_021a5774(gMapStateManager->unk_0c, 0); + gMapStateManager->inputHandler->SetButtonVisibility(0); psVar1 = GetUnit(data_ov000_021e3340->unk_02);