diff --git a/config/YFEE01/arm9/overlays/ov000/delinks.txt b/config/YFEE01/arm9/overlays/ov000/delinks.txt index 67f6cab..be15942 100644 --- a/config/YFEE01/arm9/overlays/ov000/delinks.txt +++ b/config/YFEE01/arm9/overlays/ov000/delinks.txt @@ -13,6 +13,9 @@ src/ov000/camera.cpp: complete .text start:0x021a4a7c end:0x021a5318 +src/ov000/map_input_handler.cpp: + .text start:0x021a5318 end:0x021a68c0 + src/ov000/cursor.cpp: .text start:0x021a68c0 end:0x021a6f10 diff --git a/config/YFEE01/arm9/overlays/ov000/symbols.txt b/config/YFEE01/arm9/overlays/ov000/symbols.txt index 2426fe9..155e07a 100644 --- a/config/YFEE01/arm9/overlays/ov000/symbols.txt +++ b/config/YFEE01/arm9/overlays/ov000/symbols.txt @@ -83,26 +83,26 @@ _ZN6Camera19func_ov000_021a52b0Ev kind:function(arm,size=0x18) addr:0x021a52b0 _ZN6Camera19func_ov000_021a52c8Elll kind:function(arm,size=0x8) addr:0x021a52c8 _ZN6Camera19func_ov000_021a52d0Elll kind:function(arm,size=0x28) addr:0x021a52d0 _ZN6Camera19func_ov000_021a52f8EllP4Vec3 kind:function(arm,size=0x20) addr:0x021a52f8 -func_ov000_021a5318 kind:function(arm,size=0x70) addr:0x021a5318 -func_ov000_021a5388 kind:function(arm,size=0x294) addr:0x021a5388 -func_ov000_021a561c kind:function(arm,size=0x34) addr:0x021a561c -func_ov000_021a5650 kind:function(arm,size=0x38) addr:0x021a5650 -func_ov000_021a5688 kind:function(arm,size=0xe0) addr:0x021a5688 -func_ov000_021a5768 kind:function(arm,size=0xc) addr:0x021a5768 -func_ov000_021a5774 kind:function(arm,size=0x70) addr:0x021a5774 -func_ov000_021a57e4 kind:function(arm,size=0x2c) addr:0x021a57e4 -func_ov000_021a5810 kind:function(arm,size=0x30) addr:0x021a5810 -func_ov000_021a5840 kind:function(arm,size=0x1c) addr:0x021a5840 -func_ov000_021a585c kind:function(arm,size=0xf8) addr:0x021a585c +_ZN12InputHandler4InitEv kind:function(arm,size=0x70) addr:0x021a5318 +_ZN12InputHandler13CreateButtonsEv kind:function(arm,size=0x294) addr:0x021a5388 +_ZN12InputHandler14DestroyButtonsEv kind:function(arm,size=0x34) addr:0x021a561c +_ZN12InputHandler9_021a5650El kind:function(arm,size=0x38) addr:0x021a5650 +_ZN12InputHandler9_021a5688Ev kind:function(arm,size=0xe0) addr:0x021a5688 +_ZN12InputHandler15IsButtonVisibleEh kind:function(arm,size=0xc) addr:0x021a5768 +_ZN12InputHandler19SetButtonVisibilityEl kind:function(arm,size=0x70) addr:0x021a5774 +_ZN12InputHandler10HideButtonEl kind:function(arm,size=0x2c) addr:0x021a57e4 +_ZN12InputHandler10ShowButtonEl kind:function(arm,size=0x30) addr:0x021a5810 +_ZN12InputHandler9_021a5840El kind:function(arm,size=0x1c) addr:0x021a5840 +_ZN12InputHandler9_021a585cEl kind:function(arm,size=0xf8) addr:0x021a585c func_ov000_021a5954 kind:function(arm,size=0x78) addr:0x021a5954 func_ov000_021a59cc kind:function(arm,size=0xf0) addr:0x021a59cc -func_ov000_021a5abc kind:function(arm,size=0x1c4) addr:0x021a5abc -func_ov000_021a5c80 kind:function(arm,size=0x88) addr:0x021a5c80 -func_ov000_021a5d08 kind:function(arm,size=0x54) addr:0x021a5d08 -func_ov000_021a5d5c kind:function(arm,size=0x670) addr:0x021a5d5c -func_ov000_021a63cc kind:function(arm,size=0x6c) addr:0x021a63cc -func_ov000_021a6438 kind:function(arm,size=0x3c8) addr:0x021a6438 -func_ov000_021a6800 kind:function(arm,size=0xc0) addr:0x021a6800 +_ZN12InputHandler9_021a5abcElll kind:function(arm,size=0x1c4) addr:0x021a5abc +_ZN12InputHandler9_021a5c80Ell kind:function(arm,size=0x88) addr:0x021a5c80 +_ZN12InputHandler9_021a5d08Ev kind:function(arm,size=0x54) addr:0x021a5d08 +_ZN12InputHandler9_021a5d5cEl kind:function(arm,size=0x670) addr:0x021a5d5c +_ZN12InputHandler9_021a63ccEll kind:function(arm,size=0x6c) addr:0x021a63cc +_ZN12InputHandler9_021a6438Ev kind:function(arm,size=0x3c8) addr:0x021a6438 +_ZN12InputHandler9_021a6800Ev kind:function(arm,size=0xc0) addr:0x021a6800 _ZN6Cursor4InitEv kind:function(arm,size=0x50) addr:0x021a68c0 _ZN6Cursor6SetPosElll kind:function(arm,size=0x84) addr:0x021a6910 _ZN6Cursor14SetPosAnimatedElllh kind:function(arm,size=0x124) addr:0x021a6994 diff --git a/include/map.hpp b/include/map.hpp index 637dc78..ae85416 100644 --- a/include/map.hpp +++ b/include/map.hpp @@ -176,26 +176,63 @@ struct MapStateManager_08 /* 10F8 */ s8 unk_10f8[0x80]; }; -struct MapStateManager_0C +class Button; + +enum +{ + INPUT_TYPE_NONE = 0, + INPUT_TYPE_KEY = 1, + INPUT_TYPE_TOUCH = 2, +}; + +class InputHandler { -// +0x10 contains last touch coords -// +0x14 contains current touch coords -// +0x18 contains key handlers - STRUCT_PAD(0x00, 0x1C); - u16 unk_1c; - u8 unk_1e; - u8 unk_1f; - u8 unk_20; - u8 unk_21_0 : 2; - u8 unk_21_2 : 1; - u8 unk_21_3 : 1; - u8 unk_21_4 : 2; - u8 unk_21_6 : 1; - u8 unk_21_7 : 1; - u8 unk_21_8 : 1; - STRUCT_PAD(0x22, 0x23); - u8 unk_24; - STRUCT_PAD(0x25, 0x28); +public: + /* 00 */ Button * buttons[4]; + /* 10 */ s16 xTouchPrev; + /* 12 */ s16 yTouchPrev; + /* 14 */ s16 xTouchCur; + /* 16 */ s16 yTouchCur; + /* 18 */ u16 keyHeld; + /* 1A */ u16 keyRepeated; + /* 1C */ u16 keyPressed; + /* 1E */ u8 unk_1e; + /* 1F */ u8 inputType; + /* 20 */ u8 unk_20; + /* 21 */ u8 unk_21_0 : 2; + /* 21 */ u8 unk_21_2 : 2; + /* 21 */ u8 unk_21_4 : 2; + /* 21 */ u8 unk_21_6 : 2; + /* 22 */ u8 buttonVisibilityMask; + /* 23 */ u8 unk_23; + /* 24 */ u8 unk_24; + /* 25 */ u8 unk_25; + /* 26 */ u8 unk_26; + /* 27 */ s8 unk_27; + + void Init(void); + void CreateButtons(void); + void DestroyButtons(void); + BOOL _021a5650(s32); + void _021a5688(void); + BOOL IsButtonVisible(u8); + void SetButtonVisibility(s32); + void HideButton(s32); + void ShowButton(s32); + void _021a5840(s32); + void _021a585c(s32); + BOOL _021a5abc(s32, s32, BOOL); + BOOL _021a5c80(s32, s32); + void _021a5d08(void); + void _021a5d5c(s32); + BOOL _021a63cc(s32, s32); + void _021a6438(void); + BOOL _021a6800(void); + + inline BOOL IsUsingKeyInputs(void) + { + return this->inputType == INPUT_TYPE_KEY; + } }; class Cursor @@ -332,7 +369,7 @@ class MapStateManager /* 000 */ Camera * camera; /* 004 */ struct MapStateManager_04 * unk_04; /* 008 */ struct MapStateManager_08 * unk_08; - /* 00C */ struct MapStateManager_0C * unk_0c; + /* 00C */ InputHandler * inputHandler; /* 010 */ Cursor * cursor; /* 014 */ struct MapStateManager_14 * unk_14; /* 018 */ void * unk_18; diff --git a/include/unknown_funcs.h b/include/unknown_funcs.h index abcb191..556c5a4 100644 --- a/include/unknown_funcs.h +++ b/include/unknown_funcs.h @@ -5765,26 +5765,26 @@ EC void _ZN6Camera19func_ov000_021a516cEv(s32); // EC ??? _ZN6Camera19func_ov000_021a52c8Elll // EC ??? _ZN6Camera19func_ov000_021a52d0Elll // EC ??? _ZN6Camera19func_ov000_021a52f8EllP4Vec3 -// EC ??? func_ov000_021a5318 -// EC ??? func_ov000_021a5388 -// EC ??? func_ov000_021a561c -EC BOOL func_ov000_021a5650(void *, u32); -// EC ??? func_ov000_021a5688 -EC BOOL func_ov000_021a5768(void *, u32); -EC void func_ov000_021a5774(void *, u32); -EC void func_ov000_021a57e4(void *, u32); -EC void func_ov000_021a5810(void *, u32); -// EC ??? func_ov000_021a5840 -// EC ??? func_ov000_021a585c +// EC ??? _ZN12InputHandler4InitEv +// EC ??? _ZN12InputHandler13CreateButtonsEv +// EC ??? _ZN12InputHandler14DestroyButtonsEv +EC BOOL _ZN12InputHandler9_021a5650El(void *, u32); +// EC ??? _ZN12InputHandler9_021a5688Ev +EC BOOL _ZN12InputHandler15IsButtonVisibleEh(void *, u32); +EC void _ZN12InputHandler19SetButtonVisibilityEl(void *, u32); +EC void _ZN12InputHandler10HideButtonEl(void *, u32); +EC void _ZN12InputHandler10ShowButtonEl(void *, u32); +// EC ??? _ZN12InputHandler9_021a5840El +// EC ??? _ZN12InputHandler9_021a585cEl // EC ??? func_ov000_021a5954 // EC ??? func_ov000_021a59cc -// EC ??? func_ov000_021a5abc -// EC ??? func_ov000_021a5c80 -// EC ??? func_ov000_021a5d08 -EC void func_ov000_021a5d5c(void *, u32); -// EC ??? func_ov000_021a63cc -// EC ??? func_ov000_021a6438 -// EC ??? func_ov000_021a6800 +// EC ??? _ZN12InputHandler9_021a5abcElll +// EC ??? _ZN12InputHandler9_021a5c80Ell +// EC ??? _ZN12InputHandler9_021a5d08Ev +// EC void _ZN12InputHandler9_021a5d5cEl(void *, u32); +// EC ??? _ZN12InputHandler9_021a63ccEll +// EC ??? _ZN12InputHandler9_021a6438Ev +// EC ??? _ZN12InputHandler9_021a6800Ev // EC ??? _ZN6Cursor4InitEv // EC ??? _ZN6Cursor6SetPosElll // EC ??? _ZN6Cursor14SetPosAnimatedElllh diff --git a/include/unknown_types.hpp b/include/unknown_types.hpp index 7de1dd6..ec64030 100644 --- a/include/unknown_types.hpp +++ b/include/unknown_types.hpp @@ -71,12 +71,14 @@ struct UnkStruct_02196f24 { STRUCT_PAD(0x00, 0x03); u8 unk_03; - STRUCT_PAD(0x04, 0x07); + /* 04 */ u8 controlSettings; + STRUCT_PAD(0x05, 0x07); /* 07 */ u8 enableBgm; /* 08 */ u8 enableSoundEffects; STRUCT_PAD(0x09, 0x0C); /* 0C */ u8 enableTutorials; - STRUCT_PAD(0x0D, 0x10); + /* 0D */ u8 unk_0d; + STRUCT_PAD(0x0E, 0x10); }; struct UnkStruct_02196f20 diff --git a/src/ov000/arena.cpp b/src/ov000/arena.cpp index 8d31f0f..9e2128a 100644 --- a/src/ov000/arena.cpp +++ b/src/ov000/arena.cpp @@ -147,7 +147,7 @@ class Arena : public ProcEx gpActiveScreenSt->dispIo->bldcnt.target2_obj_on = 0; gpActiveScreenSt->dispIo->bldcnt.target2_bd_on = 1; - func_ov000_021a5810(gMapStateManager->unk_0c, 1); + gMapStateManager->inputHandler->ShowButton(1); this->_021d9078(); } @@ -155,7 +155,7 @@ class Arena : public ProcEx { gpActiveScreenSt->dispIo->bldcnt.effect = 0; - func_ov000_021a57e4(gMapStateManager->unk_0c, 1); + gMapStateManager->inputHandler->HideButton(1); this->_021d9120(); this->_021d9024(); @@ -976,7 +976,7 @@ void arena::Arena::_021d87a4(void) { u8 tmp; - if ((gKeySt->pressed & KEY_BUTTON_B) || (func_ov000_021a5650(gMapStateManager->unk_0c, 0) != 0)) + if ((gKeySt->pressed & KEY_BUTTON_B) || (gMapStateManager->inputHandler->_021a5650(0))) { this->unk_59 = 1; } @@ -1022,7 +1022,7 @@ void arena::Arena::_021d882c(BOOL arg_1) if (func_ov000_021ca0b8(this->unk_5c) == this->unk_3c) { - func_ov000_021a5810(gMapStateManager->unk_0c, 0); + gMapStateManager->inputHandler->ShowButton(0); Proc_Goto(this, 6, 0); pUnit = func_0203c378(this->unk_38); @@ -1037,19 +1037,19 @@ void arena::Arena::_021d882c(BOOL arg_1) { if (func_ov000_021ca0b8(this->unk_5c) == this->unk_38) { - func_ov000_021a57e4(gMapStateManager->unk_0c, 0); + gMapStateManager->inputHandler->HideButton(0); Proc_Goto(this, 7, 0); uVar6 = -1; } else if (this->unk_59 != 0) { - func_ov000_021a57e4(gMapStateManager->unk_0c, 0); + gMapStateManager->inputHandler->HideButton(0); Proc_Goto(this, 8, 0); uVar6 = -1; } else { - func_ov000_021a57e4(gMapStateManager->unk_0c, 0); + gMapStateManager->inputHandler->HideButton(0); Proc_Goto(this, 9, 0); uVar6 = -1; } @@ -1570,7 +1570,7 @@ EC void Arena_ov000_021d94f4(arena::Arena * proc) EC void Arena_ov000_021d9500(arena::Arena * unused) { - func_ov000_021a57e4(gMapStateManager->unk_0c, 0); + gMapStateManager->inputHandler->HideButton(0); return; } diff --git a/src/ov000/camera.cpp b/src/ov000/camera.cpp index d1cbd26..cdb429f 100644 --- a/src/ov000/camera.cpp +++ b/src/ov000/camera.cpp @@ -349,7 +349,7 @@ void Camera::func_ov000_021a4fb4(void) range = this->unk_12; - if (gMapStateManager->unk_0c->unk_24) + if (gMapStateManager->inputHandler->unk_24) { range *= 2; } diff --git a/src/ov000/cursor.cpp b/src/ov000/cursor.cpp index d0db693..73ad530 100644 --- a/src/ov000/cursor.cpp +++ b/src/ov000/cursor.cpp @@ -126,7 +126,7 @@ void Cursor::_021a6b4c(s32 xPx, s32 yPx) s32 diff; s32 var_r4 = gMapStateManager->camera->unk_12; - if (gMapStateManager->unk_0c->unk_24 != 0) + if (gMapStateManager->inputHandler->unk_24 != 0) { var_r4 *= 2; } @@ -169,12 +169,12 @@ void Cursor::_021a6bd0(void) this->xDisplay = this->xTile * GetTileSize(); this->yDisplay = this->yTile * GetTileSize(); - if ((gMapStateManager->unk_0c->unk_1f == 1 ? TRUE : FALSE) == 0) + if (gMapStateManager->inputHandler->IsUsingKeyInputs()) { - return; + gMapStateManager->camera->func_ov000_021a4ba0(this->xDisplay, this->yDisplay, 0); } - gMapStateManager->camera->func_ov000_021a4ba0(this->xDisplay, this->yDisplay, 0); + return; } void Cursor::_021a6c38(void) @@ -185,7 +185,7 @@ void Cursor::_021a6c38(void) xDisp = this->xTile * GetTileSize(); yDisp = this->yTile * GetTileSize(); - if (gMapStateManager->unk_0c->unk_1e != 0) + if (gMapStateManager->inputHandler->unk_1e != 0) { xDisp = this->xTile * GetTileSize(); yDisp = this->yTile * GetTileSize(); @@ -209,13 +209,11 @@ void Cursor::_021a6c38(void) return; } - if (((gMapStateManager->unk_0c->unk_1f == 1) ? TRUE : FALSE) == 0) + if (gMapStateManager->inputHandler->IsUsingKeyInputs()) { - return; + gMapStateManager->camera->func_ov000_021a4ba0(this->xDisplay, this->yDisplay, 0); } - gMapStateManager->camera->func_ov000_021a4ba0(this->xDisplay, this->yDisplay, 0); - return; } diff --git a/src/ov000/map_input_handler.cpp b/src/ov000/map_input_handler.cpp new file mode 100644 index 0000000..148daf1 --- /dev/null +++ b/src/ov000/map_input_handler.cpp @@ -0,0 +1,1117 @@ +#include "global.h" + +#include + +#include "button.hpp" +#include "hardware.hpp" +#include "hashtable.hpp" +#include "map.hpp" +#include "menu.hpp" + +#include "unknown_funcs.h" +#include "unknown_types.hpp" + +extern struct UnkStruct_021974fc * data_021974fc; +extern struct UnkStruct_02196f24 * data_02196f24; +extern struct UnkStruct_02196f0c * data_02196f0c; + +namespace map +{ +class Button_Main : public Button +{ +public: + Button_Main() + { + this->unk_58 = 1; + } + + virtual ~Button_Main(); + + virtual void vfunc_0c(void); + virtual BOOL vfunc_18(void); +}; + +class Button_Common : public Button +{ +public: + Button_Common() + { + this->unk_58 = 1; + } + + virtual ~Button_Common(); + + virtual void vfunc_0c(void); + virtual BOOL vfunc_18(void); +}; +} // namespace map + +void InputHandler::Init(void) +{ + s32 i; + + this->keyHeld = 0; + this->keyRepeated = 0; + this->keyPressed = 0; + this->unk_1e = 0; + this->inputType = INPUT_TYPE_NONE; + this->unk_20 = 0; + this->unk_23 = 0; + this->unk_21_0 = 0; + this->unk_21_2 = 0; + this->unk_21_4 = 0; + this->unk_21_6 = 0; + this->unk_24 = 0; + this->unk_25 = 0; + this->unk_26 = 0; + this->buttonVisibilityMask = 0; + + for (i = 0; i < 4; i++) + { + this->buttons[i] = NULL; + } + + return; +} + +extern struct ProcCmd ProcScr_020ce750[]; + +void InputHandler::CreateButtons(void) +{ + struct VmMap_Common * iVar1 = static_cast(HashTable::Get2("VmMap_Common")); + + this->buttons[0] = new (Proc_Start(ProcScr_020ce750, PROC_TREE_6)) map::Button_Main; + + this->buttons[0]->func_02034838(BUTTON_KIND_A_MENU, iVar1->unk_04, iVar1->unk_06, 0, 2); + this->buttons[0]->proc_mark = PROC_MARK_6; + this->buttons[0]->SetPosition(112, 0); + this->buttons[0]->func_020354bc(0); + this->buttons[0]->SetVisible(TRUE); + + this->buttons[1] = new (Proc_Start(ProcScr_020ce750, PROC_TREE_6)) map::Button_Common; + + this->buttons[1]->func_02034838(BUTTON_KIND_R_CHANGE, iVar1->unk_04 + 0x18, iVar1->unk_06, 0, 2); + this->buttons[1]->proc_mark = PROC_MARK_6; + this->buttons[1]->SetPosition(200, 0); + this->buttons[1]->func_020354bc(0); + this->buttons[1]->SetVisible(TRUE); + + this->buttons[2] = new (Proc_Start(ProcScr_020ce750, PROC_TREE_6)) map::Button_Common; + + this->buttons[2]->func_02034838(BUTTON_KIND_X_DANGER, iVar1->unk_04 + 0x24, iVar1->unk_06, 0, 2); + this->buttons[2]->proc_mark = PROC_MARK_6; + this->buttons[2]->SetPosition(156, 0); + this->buttons[2]->func_020354bc(0); + this->buttons[2]->SetVisible(TRUE); + + if ((data_02196f0c->state & 0x40) != 0) + { + this->buttons[3] = new (Proc_Start(ProcScr_020ce750, PROC_TREE_6)) map::Button_Common; + + this->buttons[3]->func_02034838(BUTTON_KIND_START_START, iVar1->unk_04 + 0x30, iVar1->unk_06, 0, 2); + this->buttons[3]->proc_mark = PROC_MARK_6; + this->buttons[3]->SetPosition(68, 0); + this->buttons[3]->func_020354bc(0); + this->buttons[3]->SetVisible(TRUE); + } + + return; +} + +void InputHandler::DestroyButtons(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if (this->buttons[i] != NULL) + { + Proc_End(this->buttons[i]); + this->buttons[i] = NULL; + } + } + + return; +} + +BOOL InputHandler::_021a5650(s32 param_2) +{ + if (data_02196f24->controlSettings == 0) + { + return FALSE; + } + + if (this->buttons[param_2] != NULL) + { + return this->buttons[param_2]->func_02035450(); + } + + return FALSE; +} + +EC s32 func_02034f74(s32); +EC void func_02034930(s32, s32, s32); + +void InputHandler::_021a5688(void) +{ + VmMap_Common * iVar1; + s32 iVar2; + s32 uVar3; + + iVar1 = static_cast(HashTable::Get2("VmMap_Button")); + uVar3 = iVar1->unk_04; + + if (data_02196f0c->state & 0x40) + { + func_02034930(4, uVar3, iVar1->unk_06); + iVar2 = func_02034f74(4); + } + else + { + func_02034930(0, uVar3, iVar1->unk_06); + iVar2 = func_02034f74(0); + } + + func_02034930(1, uVar3 + iVar2, -1); + + iVar2 = uVar3 + iVar2 + func_02034f74(1); + func_02034930(2, iVar2, -1); + + iVar2 = iVar2 + func_02034f74(2); + func_02034930(0xb, iVar2, -1); + + uVar3 = func_02034f74(0xb); + + if (!(data_02196f0c->state & 0x40)) + { + return; + } + + func_02034930(3, iVar2 + uVar3, -1); + func_02034f74(3); + + return; +} + +BOOL InputHandler::IsButtonVisible(u8 mask) +{ + return this->buttonVisibilityMask & mask; +} + +void InputHandler::SetButtonVisibility(s32 param_2) +{ + s32 i; + + this->buttonVisibilityMask = param_2; + + for (i = 0; i < 4; i++) + { + if (this->buttons[i] != NULL) + { + if ((param_2 & (1 << i)) != 0) + { + this->buttons[i]->func_020354a0(); + this->buttons[i]->SetVisible(FALSE); + } + else + { + this->buttons[i]->func_020354bc(0); + this->buttons[i]->SetVisible(TRUE); + } + } + } + + return; +} + +void InputHandler::HideButton(s32 i) +{ + if (this->buttons[i] == NULL) + { + return; + } + + this->buttons[i]->func_020354a0(); + this->buttons[i]->SetVisible(FALSE); + + return; +} + +void InputHandler::ShowButton(s32 i) +{ + if (this->buttons[i] == NULL) + { + return; + } + + this->buttons[i]->func_020354bc(0); + this->buttons[i]->SetVisible(TRUE); + + return; +} + +void InputHandler::_021a5840(s32 i) +{ + if (this->buttons[i] == NULL) + { + return; + } + + this->buttons[i]->func_020354bc(0); + + return; +} + +extern KeyState * gKeySt; +extern TouchState * gTouchSt; + +void InputHandler::_021a585c(s32 param_2) +{ + struct Vec3 auStack_18; + + if (data_02196f24->controlSettings == 0) + { + return; + } + + if ((gTouchSt->unk_12 == 0) && !(gTouchSt->unk_15 != 0)) + { + this->xTouchCur = -1; + this->yTouchCur = -1; + + return; + } + + if (param_2 != 0) + { + gMapStateManager->camera->func_ov000_021a5228(gTouchSt->unk_00, gTouchSt->unk_02, &auStack_18); + + this->xTouchPrev = auStack_18.x; + this->yTouchPrev = auStack_18.y; + + if (gTouchSt->unk_14 != 0) + { + this->xTouchCur = this->xTouchPrev; + this->yTouchCur = this->yTouchPrev; + } + } + else + { + this->xTouchPrev = gMapStateManager->cursor->xTile; + this->yTouchPrev = gMapStateManager->cursor->yTile; + } + + this->unk_1e = 1; + + return; +} + +static inline BOOL BoundsCheck(s32 x, s32 y) +{ + if (x < gMapStateManager->unk_24) + { + return TRUE; + } + else if (y < gMapStateManager->unk_25) + { + return TRUE; + } + else if (x >= gMapStateManager->unk_26) + { + return TRUE; + } + else if (y >= gMapStateManager->unk_27) + { + return TRUE; + } + + return FALSE; +} + +EC BOOL func_ov000_021a5954(s32 x, s32 y) +{ + if (BoundsCheck(x, y)) + { + return FALSE; + } + + if (gMapStateManager->unk_08->unk_0854[x | y << 5] < 0) + { + return FALSE; + } + + return TRUE; +} + +EC BOOL func_020015e4(MapStateManager_08 *, s32, s32, s32); + +EC BOOL func_ov000_021a59cc(s32 x, s32 y) +{ + if (BoundsCheck(x, y)) + { + return FALSE; + } + + if (func_020015e4(gMapStateManager->unk_08, x, y, 0) != 0) + { + return TRUE; + } + + if (gMapStateManager->unk_08->unk_0854[x | y << 5] < 0) + { + if (func_020015e4(gMapStateManager->unk_08, x, y, 1) != 0) + { + return TRUE; + } + + if (func_020015e4(gMapStateManager->unk_08, x, y, 2) != 0) + { + return TRUE; + } + } + + return FALSE; +} + +extern struct Unit * gUnitList; + +extern struct UnkStruct_021e3528 data_ov000_021e3528; + +BOOL InputHandler::_021a5abc(s32 x, s32 y, BOOL param_4) +{ + s32 uVar1; + s32 uVar2; + s32 unitId; + Unit * pUnit; + s32 i; + BOOL bVar6; + s32 pos; + + if (BoundsCheck(x, y)) + { + return FALSE; + } + + pos = x | y << 5; + + if (param_4 == 0) + { + uVar2 = this->yTouchCur; + uVar1 = this->xTouchCur; + unitId = gMapStateManager->unk_028[uVar1 | uVar2 << 5]; + + if (unitId == 0) + { + pUnit = NULL; + } + else + { + pUnit = gUnitList + unitId - 1; + } + + if (pUnit != NULL) + { + if (unitId == 0) + { + pUnit = NULL; + } + else + { + pUnit = gUnitList + unitId - 1; + } + + if ((pUnit->state2 & 1) != 0) + { + return FALSE; + } + + return x == uVar1 && y == uVar2; + } + + if (((data_02196f0c->state & 0x40) != 0) && (x == uVar1 && y == uVar2)) + { + for (i = 0; i < data_ov000_021e3528.unk_2e; i++) + { + if (x == data_ov000_021e3528.unk_00[i * 2 + 0] && y == data_ov000_021e3528.unk_00[i * 2 + 1]) + { + bVar6 = TRUE; + break; + } + } + + if (bVar6) + { + return TRUE; + } + } + + return FALSE; + } + else + { + if (x == this->xTouchCur && y == this->yTouchCur) + { + if (gMapStateManager->unk_08->unk_0854[pos] >= 0) + { + return TRUE; + } + + if ((param_4 == 1) && (func_ov000_021a59cc(x, y) != 0)) + { + return TRUE; + } + } + + return FALSE; + } + + return FALSE; +} + +class UnkStruct_021e3348 +{ +public: + u8 unk_000[1]; + STRUCT_PAD(0x001, 0x118); + ItemData * unk_118; + Button * unk_11c[2]; + u8 unk_124; + s8 unk_125; + u8 unk_126; + u8 unk_127; + s8 unk_128; + s8 unk_129; + s8 unk_12a; + s8 unk_12b; + u8 unk_12c; + s8 unk_12d; + u8 unk_12e; + STRUCT_PAD(0x12F, 0x130); +}; + +extern UnkStruct_021e3348 * data_ov000_021e3348; + +EC BOOL func_ov000_021b6264(void *, s32, s32); + +BOOL InputHandler::_021a5c80(s32 param_2, s32 param_3) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if (this->buttons[i] == NULL) + { + continue; + } + + if (!this->buttons[i]->func_020353b8()) + { + continue; + } + + if (this->buttons[i]->func_020353e0(param_2, param_3)) + { + return TRUE; + } + } + + if (data_ov000_021e3348 != NULL) + { + if (func_ov000_021b6264(data_ov000_021e3348, param_2, param_3)) + { + return TRUE; + } + } + + return FALSE; +} + +void InputHandler::_021a5d08(void) +{ + this->keyHeld = 0; + this->keyRepeated = 0; + this->keyPressed = 0; + this->unk_1e = 0; + this->unk_20 = 0; + this->unk_23 = 0; + this->unk_21_0 = 0; + this->unk_21_2 = 0; + this->unk_21_4 = 0; + this->unk_21_6 = 0; + this->unk_24 = 0; + this->unk_25 = 0; + this->unk_26 = 0; + + return; +} + +EC BOOL _ZN12InputHandler9_021a63ccEll(InputHandler *, s32, s32); + +struct UnkStruct_021e3344 +{ + STRUCT_PAD(0x00, 0x2C); + s8 unk_2c; + s8 unk_2d; + u8 unk_2e; + u8 unk_2f; + s8 unk_30; + s8 unk_31; + s8 unk_32; + u8 unk_33; + u8 unk_34; + u8 unk_35; + u8 unk_36; + u8 unk_37; +}; + +extern struct UnkStruct_021e3344 * data_ov000_021e3344; + +void InputHandler::_021a5d5c(s32 param_2) +{ + struct Unit * pUnit; + s32 unitId; + s32 unaff_r4; + s32 uVar7; + s32 uVar8; + s32 uVar10; + s32 uVar11; + s32 uVar12; + BOOL bVar13; + + uVar7 = gMapStateManager->cursor->xTile; + uVar8 = gMapStateManager->cursor->yTile; + + this->keyHeld = 0; + this->keyRepeated = 0; + this->keyPressed = 0; + this->unk_1e = 0; + this->unk_21_0 = 0; + this->unk_21_4 = 0; + this->unk_21_2 = 0; + this->unk_21_6 = 0; + this->unk_24 = 0; + this->unk_26 = 0; + + if (gTouchSt->unk_12 != 0 || gTouchSt->unk_15 != 0) + { + if (this->_021a5c80(gTouchSt->unk_00, gTouchSt->unk_02) == 0) + { + this->unk_25 = 1; + } + } + + this->_021a585c(this->unk_25); + + if (this->unk_1e != 0) + { + this->inputType = INPUT_TYPE_TOUCH; + + uVar7 = this->xTouchPrev; + + if (this->xTouchPrev < gMapStateManager->unk_24) + { + uVar7 = gMapStateManager->unk_24; + } + + uVar8 = this->yTouchPrev; + + if (this->yTouchPrev < gMapStateManager->unk_25) + { + uVar8 = gMapStateManager->unk_25; + } + + if (uVar7 >= gMapStateManager->unk_26) + { + uVar7 = gMapStateManager->unk_26 - 1; + } + + if (uVar8 >= gMapStateManager->unk_27) + { + uVar8 = gMapStateManager->unk_27 - 1; + } + + if (this->unk_25 != 0) + { + gMapStateManager->camera->func_ov000_021a4c30(gTouchSt->unk_00, gTouchSt->unk_02); + if (gMapStateManager->camera->func_ov000_021a4f4c()) + { + this->unk_26 = 1; + } + } + else + { + pUnit = 0; + } + + if (gTouchSt->unk_14 != 0) + { + if ((pUnit == 0 && unaff_r4 == 0) && (this->_021a5abc(this->xTouchPrev, this->yTouchPrev, param_2) != 0)) + { + this->unk_21_2 = 1; + this->unk_23 = 1; + } + + this->unk_20 = 2; + } + else + { + if (gTouchSt->unk_15 != 0) + { + if (((this->unk_20 & 6) == 0) || !((gTouchSt->unk_10 < 0x1e) ? TRUE : FALSE)) + { + bVar13 = FALSE; + } + else + { + bVar13 = TRUE; + } + + if (bVar13) + { + this->unk_20 = 8; + + if (pUnit != 0) + { + this->unk_23 = 0; + } + + if (this->unk_23 != 0) + { + if (this->_021a5abc(this->xTouchPrev, this->yTouchPrev, param_2) != 0) + { + this->unk_21_0 = 1; + } + + this->unk_23 = 0; + } + } + else + { + this->unk_20 = 0; + } + + this->unk_25 = 0; + } + else + { + this->unk_20 = 4; + + if (pUnit != 0) + { + this->unk_23 = 0; + } + + if ((this->unk_23 != 0) && (this->_021a5abc(this->xTouchPrev, this->yTouchPrev, param_2) == 0)) + { + this->unk_23 = 0; + } + } + } + } + else + { + if (gKeySt->held != 0) + { + this->unk_20 = 0; + this->unk_25 = 0; + this->unk_23 = 0; + + this->keyHeld = gKeySt->held; + this->keyRepeated = gKeySt->repeated; + this->keyPressed = gKeySt->pressed; + + if ((gKeySt->pressed == 0) && ((gKeySt->held & KEY_BUTTON_Y) != 0)) + { + this->unk_24 = 1; + } + + unitId = uVar7; + uVar12 = uVar8; + + if (((gKeySt->repeated & KEY_DPAD_ANY) != 0) || + (this->unk_24 != 0 && ((gKeySt->held & KEY_DPAD_ANY) != 0) && ((gKeySt->repeatClock & 1) == 0))) + { + this->inputType = INPUT_TYPE_KEY; + + uVar10 = uVar7; + + if (((gKeySt->held & KEY_DPAD_LEFT) != 0) && (uVar10 < gMapStateManager->unk_24)) + { + uVar10--; + } + + if (((gKeySt->held & KEY_DPAD_RIGHT) != 0) && (uVar10 < (gMapStateManager->unk_26 - 1))) + { + uVar10++; + } + + uVar11 = uVar8; + + if (((gKeySt->held & KEY_DPAD_UP) != 0) && (uVar11 < gMapStateManager->unk_25)) + { + uVar11--; + } + + if (((gKeySt->held & KEY_DPAD_DOWN) != 0) && (uVar11 < (gMapStateManager->unk_27 - 1))) + { + uVar11++; + } + + unitId = uVar10; + uVar12 = uVar11; + + if ((param_2 != 0) && (gKeySt->pressed == 0) && + (func_ov000_021a5954(uVar7, uVar8) == 0 || + (func_ov000_021a5954(uVar10, uVar11) != 0 || (func_ov000_021a59cc(uVar10, uVar11) != 0))) && + (func_ov000_021a59cc(uVar7, uVar8) != 0) && (func_ov000_021a59cc(uVar10, uVar11) == 0)) + { + unitId = uVar7; + uVar12 = uVar8; + } + } + + if ((gKeySt->pressed & KEY_BUTTON_A) != 0) + { + this->unk_21_0 = 1; + this->unk_21_2 = 1; + } + + uVar7 = unitId; + uVar8 = uVar12; + + if ((gKeySt->pressed & 2) != 0) + { + this->unk_21_4 = 1; + this->unk_21_6 = 1; + } + } + else + { + this->unk_20 = 0; + this->unk_25 = 0; + this->unk_23 = 0; + } + } + + gMapStateManager->cursor->SetPos((s16)uVar7, (s16)uVar8, 1); + + if (gMapStateManager->cursor->changed == 0) + { + return; + } + + unitId = gMapStateManager->unk_028[uVar7 | uVar8 << 5]; + + if (unitId == 0) + { + pUnit = 0; + } + else + { + pUnit = gUnitList + unitId - 1; + } + + if ((pUnit == 0) && (gMapStateManager->unk_04->unk_00 != 0)) + { + if (uVar7 != pUnit->xPos || uVar8 != pUnit->yPos) + { + pUnit = 0; + } + } + + if (pUnit != 0) + { + func_0204e1a4(pUnit, 2, 1); + } + else + { + if ((gMapStateManager->unk_04->unk_08 == 1) && (gMapStateManager->unk_04->unk_00 != data_021974fc->unk_00)) + { + func_0204e1a4(gMapStateManager->unk_04->unk_00, 2, 1); + } + else if (gMapStateManager->unk_04->unk_08 == 2) + { + unitId = data_ov000_021e3344->unk_34; + + if (unitId == 0) + { + pUnit = 0; + } + else + { + pUnit = gUnitList + unitId - 1; + } + + if (pUnit != data_021974fc->unk_00) + { + if (unitId == 0) + { + pUnit = 0; + } + else + { + pUnit = gUnitList + unitId - 1; + } + + func_0204e1a4(pUnit, 2, 1); + } + } + } + + func_0204eab8(uVar7, uVar8, 2); + + return; +} + +EC Menu * func_0202ffb4(ProcPtr proc); + +BOOL InputHandler::_021a63cc(s32 arg1, s32 arg2) +{ + s32 temp_r2; + s32 temp_r3; + + Menu * menu = func_0202ffb4(NULL); + + if (menu == NULL) + { + return FALSE; + } + + temp_r3 = menu->unk_34; + + if (arg1 < (temp_r3 * 8)) + { + return FALSE; + } + + temp_r2 = menu->unk_35; + + if (arg2 < (temp_r2 * 8)) + { + return FALSE; + } + + if (arg1 >= ((temp_r3 + menu->unk_36) * 8)) + { + return FALSE; + } + + if (arg2 >= ((temp_r2 + menu->unk_37) * 8)) + { + return FALSE; + } + + return TRUE; +} + +EC s32 func_ov000_021b60e8(void *, s32, s32, s32); + +EC s32 func_ov000_021b615c(void); +EC void PlayerPhase_GotoLabel(s32, s32, s32); + +void InputHandler::_021a6438(void) +{ + s32 var_r0_2; + s32 var_r5; + s32 var_r6; + s32 var_r7; + s32 var_r4; + + this->keyHeld = 0; + this->keyRepeated = 0; + this->keyPressed = 0; + this->unk_1e = 0; + + var_r4 = -1; + + this->unk_21_0 = 0; + this->unk_21_4 = 0; + + this->unk_26 = 0; + + if ((gTouchSt->unk_12 != 0) || (gTouchSt->unk_15 != 0)) + { + var_r6 = this->_021a63cc(gTouchSt->unk_00, gTouchSt->unk_02); + var_r7 = this->_021a5c80(gTouchSt->unk_00, gTouchSt->unk_02); + + if ((var_r6 == 0) && (var_r7 == 0)) + { + this->unk_25 = 1; + } + } + + this->_021a585c(this->unk_25); + + if (this->unk_1e != 0) + { + this->inputType = INPUT_TYPE_TOUCH; + + var_r4 = -1; + + if ((var_r6 == 0) && (this->unk_25 != 0)) + { + var_r5 = gMapStateManager->camera->func_ov000_021a4c30(gTouchSt->unk_00, gTouchSt->unk_02); + + if (gMapStateManager->camera->func_ov000_021a4f4c() != 0) + { + this->unk_26 = 1; + } + } + else + { + var_r5 = 0; + } + + if ((var_r5 == 0) && (var_r6 == 0)) + { + var_r4 = func_ov000_021b60e8(data_ov000_021e3348, this->xTouchPrev, this->yTouchPrev, 0); + + if ((func_0202ffb4(NULL) != 0) && (gTouchSt->unk_14 == 0) && (var_r4 != 0x7F)) + { + var_r4 = -1; + } + } + + if (gTouchSt->unk_14 != 0) + { + if ((var_r5 == 0) && (var_r7 == 0)) + { + if (var_r4 != -1) + { + this->unk_23 = 1; + } + } + + this->unk_20 = 2; + } + else if (gTouchSt->unk_15 != 0) + { + if (this->unk_20 & 6) + { + if ((gTouchSt->unk_10 < 30) ? TRUE : FALSE) + { + var_r0_2 = 1; + } + else + { + goto block_36; + } + } + else + { + block_36: + var_r0_2 = 0; + } + + if (var_r0_2 != 0) + { + this->unk_20 = 8U; + + if (var_r5 != 0) + { + this->unk_23 = 0; + } + + if (this->unk_23 != 0) + { + if ((var_r4 != -1) && (var_r4 == this->unk_27)) + { + this->unk_21_0 = 1; + } + + this->unk_23 = 0; + } + } + else + { + this->unk_20 = 0; + } + + this->unk_25 = 0; + } + else + { + this->unk_20 = 4; + + if (var_r5 != 0) + { + this->unk_23 = 0; + } + + if ((this->unk_23 != 0) && (var_r4 == -1)) + { + if (var_r4 != this->unk_27) + { + this->unk_23 = 0; + } + } + } + } + else if (gKeySt->held & ~0) + { + this->unk_20 = 0; + this->unk_25 = 0; + + this->keyHeld = gKeySt->held & ~0; + this->keyRepeated = gKeySt->repeated & ~0; + this->keyPressed = gKeySt->pressed & ~0; + + if (gKeySt->held & KEY_DPAD_ANY) + { + this->inputType = INPUT_TYPE_KEY; + } + + if (gKeySt->pressed & KEY_BUTTON_A) + { + this->unk_21_0 = 1; + } + + if (gKeySt->pressed & KEY_BUTTON_B) + { + this->unk_21_2 = 1; + } + + if (gKeySt->pressed & (KEY_BUTTON_X | KEY_BUTTON_Y)) + { + if (!(((data_ov000_021e3348->unk_125 != -1) ? TRUE : FALSE) & 0xFF)) + { + var_r4 = func_ov000_021b615c(); + if (var_r4 != -1) + { + PlayerPhase_GotoLabel(39, 0, 0); + } + } + } + } + else + { + this->unk_20 = 0; + this->unk_25 = 0; + } + + this->unk_27 = var_r4; + + return; +} + +BOOL InputHandler::_021a6800(void) +{ + if ((gMapStateManager->cursor->isVisible || data_ov000_021e3348 != 0) && + (gMapStateManager->inputHandler->unk_1e != 0) && + (!((gMapStateManager->inputHandler->unk_20 != 8 ? FALSE : TRUE) & 0xFF))) + { + if ((this->unk_26 == 0) && (this->_021a5c80(gTouchSt->unk_00, gTouchSt->unk_02) != 0)) + { + return FALSE; + } + + if (this->_021a63cc(gTouchSt->unk_00, gTouchSt->unk_02)) + { + return FALSE; + } + + return TRUE; + } + + return FALSE; +} diff --git a/src/ov000/map_state.cpp b/src/ov000/map_state.cpp index 7422f3d..ad89433 100644 --- a/src/ov000/map_state.cpp +++ b/src/ov000/map_state.cpp @@ -26,7 +26,6 @@ EC void func_0204f080(struct UnkStruct_021974fc *); EC void func_ov000_021a2eb0(struct SaveBuffer *, s32); -EC void func_ov000_021a5318(MapStateManager_0C *); EC void func_ov000_021b9a10(MapStateManager_14 *); EC void func_ov000_021a37c4(void); @@ -282,7 +281,7 @@ MapStateManager::MapStateManager() this->unk_04 = new MapStateManager_04; this->unk_08 = (MapStateManager_08 *)func_02000c70(); - this->unk_0c = new struct MapStateManager_0C; + this->inputHandler = new InputHandler; this->cursor = new Cursor; this->unk_14 = new MapStateManager_14; @@ -310,7 +309,7 @@ MapStateManager::~MapStateManager() delete this->camera; delete this->unk_04; - delete this->unk_0c; + delete this->inputHandler; delete this->cursor; delete this->unk_14; @@ -377,7 +376,7 @@ void MapStateManager::func_ov000_021a276c(char * mapName) void MapStateManager::func_ov000_021a28cc(void) { gMapStateManager->camera->func_ov000_021a4a7c(); - func_ov000_021a5318(gMapStateManager->unk_0c); + gMapStateManager->inputHandler->Init(); gMapStateManager->cursor->Init(); func_ov000_021b9a10(gMapStateManager->unk_14); return; diff --git a/src/ov000/playerphase.cpp b/src/ov000/playerphase.cpp index 4a8d3db..fb3c110 100644 --- a/src/ov000/playerphase.cpp +++ b/src/ov000/playerphase.cpp @@ -123,7 +123,7 @@ EC void func_ov000_021aa210(void) data_ov000_021e332c.unk_14->unk_03 = 0; func_ov000_021d6e30(0); - func_ov000_021a5774(gMapStateManager->unk_0c, 0xf); + gMapStateManager->inputHandler->SetButtonVisibility(0xf); return; } @@ -221,7 +221,7 @@ EC void func_ov000_021abd58(void) EC void func_ov000_021abd9c(void) { - func_ov000_021a5d5c(gMapStateManager->unk_0c, 2); + gMapStateManager->inputHandler->_021a5d5c(2); if (func_ov000_021a471c() != 0) { @@ -229,8 +229,8 @@ EC void func_ov000_021abd9c(void) return; } - if ((((gMapStateManager->unk_0c->unk_1c & 0x400) != 0) || - (func_ov000_021a5650(gMapStateManager->unk_0c, 2) != 0)) && + if ((((gMapStateManager->inputHandler->keyPressed & 0x400) != 0) || + (gMapStateManager->inputHandler->_021a5650(2) != 0)) && (func_ov000_021a9cac() != 0)) { if (data_ov000_021e3324->unk_03 != 0) @@ -251,7 +251,7 @@ EC void func_ov000_021abd9c(void) func_ov000_021abbc8(); } - if (gMapStateManager->unk_0c->unk_21_0 != 0) + if (gMapStateManager->inputHandler->unk_21_0 != 0) { if (func_ov000_021abf30()) { @@ -259,9 +259,9 @@ EC void func_ov000_021abd9c(void) } } - if (gMapStateManager->unk_0c->unk_21_4 == 0) + if (gMapStateManager->inputHandler->unk_21_4 == 0) { - if (!func_ov000_021a5650(gMapStateManager->unk_0c, 0)) + if (!gMapStateManager->inputHandler->_021a5650(0)) { return; } @@ -568,7 +568,7 @@ EC void func_ov000_021ac6a0(void) { if (func_02050474() == 0) { - if ((gKeySt->pressed & KEY_BUTTON_R) != 0 || (func_ov000_021a5650(gMapStateManager->unk_0c, 1) != 0)) + if ((gKeySt->pressed & KEY_BUTTON_R) != 0 || (gMapStateManager->inputHandler->_021a5650(1) != 0)) { if (func_0204b1f8(0) != 0) { @@ -588,7 +588,7 @@ EC void func_ov000_021ac6a0(void) } } - if (func_ov000_021a5768(gMapStateManager->unk_0c, -1) == 0) + if (gMapStateManager->inputHandler->IsButtonVisible(-1) == 0) { return; } @@ -671,7 +671,7 @@ EC void func_ov000_021ac8b4(void) } gMapStateManager->cursor->isVisible = TRUE; - func_ov000_021a5774(gMapStateManager->unk_0c, 0xf); + gMapStateManager->inputHandler->SetButtonVisibility(0xf); if ((data_02196f0c->state & 0x40) != 0) { @@ -817,7 +817,7 @@ static inline BOOL CHECK_02(void) EC void func_ov000_021acc7c(ProcPtr proc) { - func_ov000_021a5774(gMapStateManager->unk_0c, 0x8b); + gMapStateManager->inputHandler->SetButtonVisibility(0x8b); func_ov000_021bec24(proc); if (CHECK_02()) @@ -830,7 +830,7 @@ EC void func_ov000_021acc7c(ProcPtr proc) EC void func_ov000_021accfc(ProcPtr proc) { - func_ov000_021a5774(gMapStateManager->unk_0c, 0x8b); + gMapStateManager->inputHandler->SetButtonVisibility(0x8b); StartUnitMenu(proc); if (CHECK_02()) @@ -870,7 +870,7 @@ EC void func_ov000_021acd8c(void) gMapStateManager->unk_14->unk_04->unk_15 = 1; func_ov000_021d3fa8(); - func_ov000_021a5774(gMapStateManager->unk_0c, 0x8f); + gMapStateManager->inputHandler->SetButtonVisibility(0x8f); Proc_Goto(data_ov000_021e332c.unk_00[4], 6, 0); data_ov000_021e332c.unk_14->unk_02 = 0; @@ -1059,7 +1059,7 @@ EC void func_ov000_021ad5bc(void) EC void func_ov000_021ad674(ProcPtr proc) { - func_ov000_021a5774(gMapStateManager->unk_0c, 0); + gMapStateManager->inputHandler->SetButtonVisibility(0); StartProcMind(proc); return; } @@ -1181,7 +1181,7 @@ EC void func_ov000_021ad8c4(struct PlayerPhaseProc * proc) EC void func_ov000_021ad97c(ProcPtr proc) { - func_ov000_021a5774(gMapStateManager->unk_0c, 0); + 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; @@ -1193,7 +1193,7 @@ EC void func_ov000_021ad97c(ProcPtr proc) EC void func_ov000_021ad9d4(ProcPtr proc) { - func_ov000_021a5774(gMapStateManager->unk_0c, 0); + 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; @@ -1253,7 +1253,7 @@ EC void func_ov000_021adb48(void) data_ov000_021e332c.unk_14->unk_02 = 0; data_ov000_021e332c.unk_14->unk_03 = 0; - func_ov000_021a5774(gMapStateManager->unk_0c, 0xf); + gMapStateManager->inputHandler->SetButtonVisibility(0xf); func_ov000_021d6e30(0); return; @@ -1284,7 +1284,7 @@ EC void func_ov000_021adbf0(void) func_ov000_021d6e30(0); } - func_ov000_021a5774(gMapStateManager->unk_0c, 0xf); + gMapStateManager->inputHandler->SetButtonVisibility(0xf); return; } @@ -1301,7 +1301,7 @@ EC void func_ov000_021adc98(u32 arg_0) func_0204eb24(); func_02062a54(arg_0); - func_ov000_021a5774(gMapStateManager->unk_0c, 0xf); + gMapStateManager->inputHandler->SetButtonVisibility(0xf); return; } @@ -1353,7 +1353,7 @@ EC void func_ov000_021addec(void) EC void func_ov000_021ade2c(void) { func_02067510(); - func_ov000_021a5774(gMapStateManager->unk_0c, 0xf); + gMapStateManager->inputHandler->SetButtonVisibility(0xf); return; } @@ -1446,7 +1446,7 @@ EC void func_ov000_021ae0a8(ProcPtr proc) { s32 phase; - func_ov000_021a5774(gMapStateManager->unk_0c, 0); + gMapStateManager->inputHandler->SetButtonVisibility(0); phase = data_ov000_021e3324->phase;