diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index 92ad6b69..fd559e4b 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -1256,9 +1256,11 @@ d/a/d_a_salbage_npc.cpp: .data start:0x8052B078 end:0x8052B618 .bss start:0x805B22E8 end:0x805B2428 -toBeSorted/d_unk_pad.cpp: +d/d_pad_nav.cpp: .text start:0x80194080 end:0x801946F4 align:16 + .sdata start:0x80572D10 end:0x80572D18 .sbss start:0x80575690 end:0x805756A8 + .sdata2 start:0x8057AE80 end:0x8057AE88 toBeSorted/goddess_chest_counter.cpp: .text start:0x80194700 end:0x8019486C align:16 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index bb544b36..b4dfc78f 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -10397,18 +10397,18 @@ fn_80193F60 = .text:0x80193F60; // type:function size:0x88 fn_80193FF0 = .text:0x80193FF0; // type:function size:0x30 fn_80194020 = .text:0x80194020; // type:function size:0x30 fn_80194050 = .text:0x80194050; // type:function size:0x30 -fn_80194080 = .text:0x80194080; // type:function size:0x38 -fn_801940C0 = .text:0x801940C0; // type:function size:0x228 -fn_801942F0 = .text:0x801942F0; // type:function size:0x54 -fn_80194350 = .text:0x80194350; // type:function size:0x16C -fn_801944C0 = .text:0x801944C0; // type:function size:0xB0 -fn_80194570 = .text:0x80194570; // type:function size:0x14 -fn_80194590 = .text:0x80194590; // type:function size:0xC -fn_801945A0 = .text:0x801945A0; // type:function size:0xC -fn_801945B0 = .text:0x801945B0; // type:function size:0xC -fn_801945C0 = .text:0x801945C0; // type:function size:0x84 -fn_80194650 = .text:0x80194650; // type:function size:0x84 -fn_801946E0 = .text:0x801946E0; // type:function size:0x14 +init__7dPadNavFv = .text:0x80194080; // type:function size:0x38 +calc__7dPadNavFv = .text:0x801940C0; // type:function size:0x228 +setNavEnabled__7dPadNavFbb = .text:0x801942F0; // type:function size:0x54 +getFSStickDirectionTrig__7dPadNavFv = .text:0x80194350; // type:function size:0x16C +getFSStickDirection__7dPadNavFv = .text:0x801944C0; // type:function size:0xB0 +stopFSStickNav__7dPadNavFv = .text:0x80194570; // type:function size:0x14 +hidePointer__7dPadNavFv = .text:0x80194590; // type:function size:0xC +setCursorStickInvisible__7dPadNavFv = .text:0x801945A0; // type:function size:0xC +setCursorStickVisible__7dPadNavFv = .text:0x801945B0; // type:function size:0xC +checkForNavLeftGesture__7dPadNavFv = .text:0x801945C0; // type:function size:0x84 +checkForNavRightGesture__7dPadNavFv = .text:0x80194650; // type:function size:0x84 +scrollRelated__7dPadNavFv = .text:0x801946E0; // type:function size:0x14 fn_80194700 = .text:0x80194700; // type:function size:0x40 GoddessChestsOpenedCounter__getCommittedValue = .text:0x80194740; // type:function size:0x1C GoddessChestsOpenedCounter__getUncommittedValue = .text:0x80194760; // type:function size:0x1C @@ -11237,10 +11237,10 @@ superID__30sFStateVirtualID_c<9dScGame_c>CFv = .text:0x801BC550; // type:functio isSameName__23sFStateID_c<9dScGame_c>CFPCc = .text:0x801BC630; // type:function size:0x88 dCsBase_c_classInit__Fv = .text:0x801BC6C0; // type:function size:0x30 __ct__9dCsBase_cFv = .text:0x801BC6F0; // type:function size:0x1AC -__dt__30sFState_c<17dLytCursorStick_c>Fv = .text:0x801BC8A0; // type:function size:0x58 -__dt__33sFStateFct_c<17dLytCursorStick_c>Fv = .text:0x801BC900; // type:function size:0x6C -__dt__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801BC970; // type:function size:0xA0 -__dt__56sFStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c>Fv = .text:0x801BCA10; // type:function size:0xA4 +__dt__30sFState_c<17dLytCursorStick_c>Fv = .text:0x801BC8A0; // type:function size:0x58 scope:weak +__dt__33sFStateFct_c<17dLytCursorStick_c>Fv = .text:0x801BC900; // type:function size:0x6C scope:weak +__dt__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801BC970; // type:function size:0xA0 scope:weak +__dt__56sFStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c>Fv = .text:0x801BCA10; // type:function size:0xA4 scope:weak __dt__9dCsBase_cFv = .text:0x801BCAC0; // type:function size:0x158 create__9dCsBase_cFv = .text:0x801BCC20; // type:function size:0x104 doDelete__9dCsBase_cFv = .text:0x801BCD30; // type:function size:0x44 @@ -11249,18 +11249,18 @@ draw__9dCsBase_cFv = .text:0x801BCF70; // type:function size:0xB0 setCurrentLyt__9dCsBase_cFi = .text:0x801BD020; // type:function size:0x14 update__9dCsBase_cFv = .text:0x801BD040; // type:function size:0x10 drawDirectly__9dCsBase_cFv = .text:0x801BD050; // type:function size:0xBC -build__33sFStateFct_c<17dLytCursorStick_c>FRC12sStateIDIf_c = .text:0x801BD110; // type:function size:0x60 -dispose__33sFStateFct_c<17dLytCursorStick_c>FRP10sStateIf_c = .text:0x801BD170; // type:function size:0xC -initialize__30sFState_c<17dLytCursorStick_c>Fv = .text:0x801BD180; // type:function size:0x1C -execute__30sFState_c<17dLytCursorStick_c>Fv = .text:0x801BD1A0; // type:function size:0x1C -finalize__30sFState_c<17dLytCursorStick_c>Fv = .text:0x801BD1C0; // type:function size:0x1C -initializeState__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801BD1E0; // type:function size:0x10 -finalizeState__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801BD1F0; // type:function size:0x10 -refreshState__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801BD200; // type:function size:0x10 -getState__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801BD210; // type:function size:0x10 -getNewStateID__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801BD220; // type:function size:0x10 -getStateID__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801BD230; // type:function size:0x10 -getOldStateID__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801BD240; // type:function size:0x10 +build__33sFStateFct_c<17dLytCursorStick_c>FRC12sStateIDIf_c = .text:0x801BD110; // type:function size:0x60 scope:weak +dispose__33sFStateFct_c<17dLytCursorStick_c>FRP10sStateIf_c = .text:0x801BD170; // type:function size:0xC scope:weak +initialize__30sFState_c<17dLytCursorStick_c>Fv = .text:0x801BD180; // type:function size:0x1C scope:weak +execute__30sFState_c<17dLytCursorStick_c>Fv = .text:0x801BD1A0; // type:function size:0x1C scope:weak +finalize__30sFState_c<17dLytCursorStick_c>Fv = .text:0x801BD1C0; // type:function size:0x1C scope:weak +initializeState__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801BD1E0; // type:function size:0x10 scope:weak +finalizeState__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801BD1F0; // type:function size:0x10 scope:weak +refreshState__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801BD200; // type:function size:0x10 scope:weak +getState__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801BD210; // type:function size:0x10 scope:weak +getNewStateID__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801BD220; // type:function size:0x10 scope:weak +getStateID__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801BD230; // type:function size:0x10 scope:weak +getOldStateID__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801BD240; // type:function size:0x10 scope:weak dCsGame_c_classInit__Fv = .text:0x801BD250; // type:function size:0x30 __ct__13dCsGame_HIO_cFv = .text:0x801BD280; // type:function size:0x8C __dt__13dCsGame_HIO_cFv = .text:0x801BD310; // type:function size:0x40 @@ -35535,13 +35535,13 @@ lbl_8052E774 = .data:0x8052E774; // type:object size:0x80 __vt__30sFStateVirtualID_c<9dScGame_c> = .data:0x8052E7F4; // type:object size:0x34 lbl_8052E828 = .data:0x8052E828; // type:object size:0x38 g_profile_C_BASE = .data:0x8052E860; // type:object size:0xC -lbl_8052E86C = .data:0x8052E86C; // type:object size:0x10 -lbl_8052E87C = .data:0x8052E87C; // type:object size:0x10 +@13263 = .data:0x8052E86C; // type:object size:0xD scope:local data:string +@13264 = .data:0x8052E87C; // type:object size:0xD scope:local data:string __vt__9dCsBase_c = .data:0x8052E88C; // type:object size:0x4C -__vt__56sFStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c> = .data:0x8052E8D8; // type:object size:0x30 -__vt__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x8052E908; // type:object size:0x30 -__vt__33sFStateFct_c<17dLytCursorStick_c> = .data:0x8052E938; // type:object size:0x14 -__vt__30sFState_c<17dLytCursorStick_c> = .data:0x8052E950; // type:object size:0x18 +__vt__56sFStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c> = .data:0x8052E8D8; // type:object size:0x30 scope:weak +__vt__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x8052E908; // type:object size:0x30 scope:weak +__vt__33sFStateFct_c<17dLytCursorStick_c> = .data:0x8052E938; // type:object size:0x14 scope:weak +__vt__30sFState_c<17dLytCursorStick_c> = .data:0x8052E950; // type:object size:0x18 scope:weak g_profile_C_GAME = .data:0x8052E968; // type:object size:0xC lbl_8052E974 = .data:0x8052E974; // type:object size:0x10 lbl_8052E984 = .data:0x8052E984; // type:object size:0x10 @@ -39890,9 +39890,9 @@ lbl_80572CFC = .sdata:0x80572CFC; // type:object size:0x4 lbl_80572D00 = .sdata:0x80572D00; // type:object size:0x8 lbl_80572D08 = .sdata:0x80572D08; // type:object size:0x4 data:4byte lbl_80572D0C = .sdata:0x80572D0C; // type:object size:0x4 data:4byte -lbl_80572D10 = .sdata:0x80572D10; // type:object size:0x1 data:byte -lbl_80572D11 = .sdata:0x80572D11; // type:object size:0x1 data:byte -lbl_80572D12 = .sdata:0x80572D12; // type:object size:0x6 data:byte +sIsPointerVisible__7dPadNav = .sdata:0x80572D10; // type:object size:0x1 data:byte +sPrevIsPointerVisible__7dPadNav = .sdata:0x80572D11; // type:object size:0x1 data:byte +sIsCursorStickVisible__7dPadNav = .sdata:0x80572D12; // type:object size:0x1 data:byte lbl_80572D18 = .sdata:0x80572D18; // type:object size:0x8 lbl_80572D20 = .sdata:0x80572D20; // type:object size:0x8 lbl_80572D28 = .sdata:0x80572D28; // type:object size:0x8 @@ -40132,10 +40132,10 @@ lbl_80573414 = .sdata:0x80573414; // type:object size:0x8 lbl_8057341C = .sdata:0x8057341C; // type:object size:0x8 lbl_80573424 = .sdata:0x80573424; // type:object size:0x8 lbl_8057342C = .sdata:0x8057342C; // type:object size:0x4 -lbl_80573430 = .sdata:0x80573430; // type:object size:0x8 data:4byte -lbl_80573438 = .sdata:0x80573438; // type:object size:0x4 data:4byte -lbl_8057343C = .sdata:0x8057343C; // type:object size:0x8 -lbl_80573444 = .sdata:0x80573444; // type:object size:0x4 data:string +sLytNames = .sdata:0x80573430; // type:object size:0x8 scope:local data:4byte +@13276 = .sdata:0x80573438; // type:object size:0x4 scope:local data:4byte +@13956 = .sdata:0x8057343C; // type:object size:0x7 scope:local data:string +@13957 = .sdata:0x80573444; // type:object size:0x4 scope:local data:string lbl_80573448 = .sdata:0x80573448; // type:object size:0x8 lbl_80573450 = .sdata:0x80573450; // type:object size:0x4 data:string lbl_80573454 = .sdata:0x80573454; // type:object size:0x8 @@ -41603,15 +41603,15 @@ lbl_80575670 = .sbss:0x80575670; // type:object size:0x8 data:byte lbl_80575678 = .sbss:0x80575678; // type:object size:0x8 data:4byte lbl_80575680 = .sbss:0x80575680; // type:object size:0x8 data:4byte sInstance__15SaveTimeRelated = .sbss:0x80575688; // type:object size:0x8 data:4byte -lbl_80575690 = .sbss:0x80575690; // type:object size:0x1 data:byte -lbl_80575691 = .sbss:0x80575691; // type:object size:0x1 data:byte -lbl_80575692 = .sbss:0x80575692; // type:object size:0x1 data:byte -lbl_80575693 = .sbss:0x80575693; // type:object size:0x1 data:byte -lbl_80575694 = .sbss:0x80575694; // type:object size:0x4 data:4byte -lbl_80575698 = .sbss:0x80575698; // type:object size:0x4 data:4byte -lbl_8057569C = .sbss:0x8057569C; // type:object size:0x4 data:4byte -lbl_805756A0 = .sbss:0x805756A0; // type:object size:0x4 data:4byte -lbl_805756A4 = .sbss:0x805756A4; // type:object size:0x4 data:4byte +sIsNavEnabled__7dPadNav = .sbss:0x80575690; // type:object size:0x1 data:byte +sIsMplsNavLeftGesture__7dPadNav = .sbss:0x80575691; // type:object size:0x1 data:byte +sIsMplsNavRightGesture__7dPadNav = .sbss:0x80575692; // type:object size:0x1 data:byte +sDisableAutoReturnToPointerNav__7dPadNav = .sbss:0x80575693; // type:object size:0x1 scope:local data:byte +sFSStickDirection__7dPadNav = .sbss:0x80575694; // type:object size:0x4 data:4byte +sFSStickNavDirection__7dPadNav = .sbss:0x80575698; // type:object size:0x4 data:4byte +sFSStickNavActiveTimer__7dPadNav = .sbss:0x8057569C; // type:object size:0x4 scope:local data:4byte +sFSStickDirectionStableTimer__7dPadNav = .sbss:0x805756A0; // type:object size:0x4 scope:local data:4byte +sMPLSNavGestureTimer__7dPadNav = .sbss:0x805756A4; // type:object size:0x4 scope:local data:4byte sInstance__19GoddessChestCounter = .sbss:0x805756A8; // type:object size:0x8 data:4byte sInstance__9dScBoot_c = .sbss:0x805756B0; // type:object size:0x4 data:4byte sInstance__11dTitleMgr_c = .sbss:0x805756B4; // type:object size:0x4 data:4byte @@ -41687,7 +41687,7 @@ sReloaderType__9dScGame_c = .sbss:0x8057579D; // type:object size:0x1 data:byte sCopyFileBToCurrentAfterRespawn__9dScGame_c = .sbss:0x8057579E; // type:object size:0x1 data:byte sDoSomethingWithFileAOnTransition__9dScGame_c = .sbss:0x8057579F; // type:object size:0x1 data:byte sPreventClearingSomeFlag__9dScGame_c = .sbss:0x805757A0; // type:object size:0x1 data:byte -sInstance__9dCsBase_c = .sbss:0x805757A8; // type:object size:0x8 data:4byte +sInstance__9dCsBase_c = .sbss:0x805757A8; // type:object size:0x4 data:4byte sInstance__9dCsGame_c = .sbss:0x805757B0; // type:object size:0x8 data:4byte LINK2__7dAcPy_c = .sbss:0x805757B8; // type:object size:0x4 data:4byte lbl_805757BC = .sbss:0x805757BC; // type:object size:0x1 data:byte @@ -46330,8 +46330,8 @@ lbl_8057AE70 = .sdata2:0x8057AE70; // type:object size:0x4 align:4 data:float lbl_8057AE74 = .sdata2:0x8057AE74; // type:object size:0x4 align:4 data:float lbl_8057AE78 = .sdata2:0x8057AE78; // type:object size:0x4 align:4 data:float lbl_8057AE7C = .sdata2:0x8057AE7C; // type:object size:0x4 align:4 data:float -lbl_8057AE80 = .sdata2:0x8057AE80; // type:object size:0x4 align:4 data:float -lbl_8057AE84 = .sdata2:0x8057AE84; // type:object size:0x4 align:4 data:float +@3537 = .sdata2:0x8057AE80; // type:object size:0x4 scope:local align:4 data:float +@3648 = .sdata2:0x8057AE84; // type:object size:0x4 scope:local align:4 data:float lbl_8057AE88 = .sdata2:0x8057AE88; // type:object size:0x8 align:8 data:double lbl_8057AE90 = .sdata2:0x8057AE90; // type:object size:0x4 align:4 data:float lbl_8057AE94 = .sdata2:0x8057AE94; // type:object size:0x4 align:4 data:float @@ -46740,11 +46740,11 @@ lbl_8057B594 = .sdata2:0x8057B594; // type:object size:0x4 align:4 data:float lbl_8057B598 = .sdata2:0x8057B598; // type:object size:0x8 align:8 data:double lbl_8057B5A0 = .sdata2:0x8057B5A0; // type:object size:0x4 align:4 data:float lbl_8057B5A4 = .sdata2:0x8057B5A4; // type:object size:0x4 align:4 data:float -lbl_8057B5A8 = .sdata2:0x8057B5A8; // type:object size:0x4 align:4 data:float -lbl_8057B5AC = .sdata2:0x8057B5AC; // type:object size:0x4 align:4 data:float -lbl_8057B5B0 = .sdata2:0x8057B5B0; // type:object size:0x4 align:4 data:float -lbl_8057B5B4 = .sdata2:0x8057B5B4; // type:object size:0x4 align:4 data:float -lbl_8057B5B8 = .sdata2:0x8057B5B8; // type:object size:0x4 align:4 data:float +@13846 = .sdata2:0x8057B5A8; // type:object size:0x4 scope:local align:4 data:float +@13897 = .sdata2:0x8057B5AC; // type:object size:0x4 scope:local align:4 data:float +@14041 = .sdata2:0x8057B5B0; // type:object size:0x4 scope:local align:4 data:float +@14042 = .sdata2:0x8057B5B4; // type:object size:0x4 scope:local align:4 data:float +@14043 = .sdata2:0x8057B5B8; // type:object size:0x4 scope:local align:4 data:float lbl_8057B5C0 = .sdata2:0x8057B5C0; // type:object size:0x4 align:4 data:float lbl_8057B5C4 = .sdata2:0x8057B5C4; // type:object size:0x4 align:4 data:float lbl_8057B5C8 = .sdata2:0x8057B5C8; // type:object size:0x4 align:4 data:float diff --git a/configure.py b/configure.py index 48379a83..3bb6304c 100644 --- a/configure.py +++ b/configure.py @@ -564,7 +564,7 @@ config.libs = [ Object(NonMatching, "toBeSorted/unk_save_time.cpp"), Object(NonMatching, "d/a/d_a_salbage_obj.cpp"), Object(NonMatching, "d/a/d_a_salbage_npc.cpp"), - Object(NonMatching, "toBeSorted/d_unk_pad.cpp"), + Object(Matching, "d/d_pad_nav.cpp"), Object(NonMatching, "toBeSorted/goddess_chest_counter.cpp"), Object(NonMatching, "toBeSorted/misc_actor.cpp"), Object(NonMatching, "d/d_hbm.cpp"), @@ -580,7 +580,7 @@ config.libs = [ Object(NonMatching, "d/tg/d_t_vr_box.cpp"), Object(Matching, "d/d_sc_title.cpp"), Object(NonMatching, "d/d_sc_game.cpp"), - Object(NonMatching, "d/d_cs_base.cpp"), + Object(Matching, "d/d_cs_base.cpp"), Object(NonMatching, "d/d_cs_game.cpp"), Object(NonMatching, "d/a/d_a_player.cpp"), Object(NonMatching, "d/a/d_a_item.cpp"), diff --git a/include/d/d_cs_base.h b/include/d/d_cs_base.h index 2279d268..361175cf 100644 --- a/include/d/d_cs_base.h +++ b/include/d/d_cs_base.h @@ -8,6 +8,7 @@ #include "d/lyt/d_lyt_cursor_stick.h" #include "m/m2d.h" #include "m/m_angle.h" +#include "m/m_vec.h" class dCsBase_c : public dCs_c { public: @@ -49,12 +50,10 @@ private: /* 0x23C */ d2d::LytBase_c *mpCurrLyt; /* 0x240 */ dCursorInterface_c mCursorIf; /* 0x254 */ dLytCursorStick_c mCursorStick; - /* 0x6F0 */ f32 field_0x6F0; - /* 0x6F4 */ f32 field_0x6F4; - /* 0x6F8 */ f32 field_0x6F8; - /* 0x6FC */ f32 field_0x6FC; + /* 0x6F0 */ mVec2_c mCsPosition; + /* 0x6F8 */ mVec2_c mCsVelocity; /* 0x700 */ mAng field_0x700; - /* 0x702 */ u8 field_0x702; + /* 0x702 */ u8 mAlpha; /* 0x703 */ u8 field_0x703; /* 0x704 */ u8 field_0x704; /* 0x705 */ u8 field_0x705; diff --git a/include/d/d_pad.h b/include/d/d_pad.h index fbfca801..fa95a003 100644 --- a/include/d/d_pad.h +++ b/include/d/d_pad.h @@ -177,6 +177,22 @@ public: return m_current_ex; } + bool getFSStickTrig(u32 mask) const { + return mFSStickMaskChanged && mFSStickMask == mask; + } + + bool getFSStickTrig() const { + return mFSStickMaskChanged && (mFSStickMask & 0xFF) != 0; + } + + const mVec3_c& getMPLSVelocity() const { + return mMPLSVelocity; + } + + const mVec2_c& getDpdPosScreen() const { + return mDpdPosScreen; + } + enum ExState_e { EX_STATE_WAITING_FOR_CONNECT = 0, EX_STATE_POST_CONNECT = 1, diff --git a/include/d/d_pad_nav.h b/include/d/d_pad_nav.h new file mode 100644 index 00000000..d481f0d0 --- /dev/null +++ b/include/d/d_pad_nav.h @@ -0,0 +1,69 @@ +#ifndef D_PAD_NAV_H +#define D_PAD_NAV_H + +/** + * Navigation with Wiimote and Nunchuk - seamlessly switching + * between pointer (dpd) and Nunchuk stick (FSStick). + */ +#include "common.h" + +namespace dPadNav { + +enum FSStickDirection_e { + FS_STICK_NONE = 0, + FS_STICK_UP = 1, + FS_STICK_UP_RIGHT = 2, + FS_STICK_RIGHT = 3, + FS_STICK_DOWN_RIGHT = 4, + FS_STICK_DOWN = 5, + FS_STICK_DOWN_LEFT = 6, + FS_STICK_LEFT = 7, + FS_STICK_UP_LEFT = 8, +}; + +extern bool sIsNavEnabled; +// WARNING: Swinging the Wiimote to the right -> navigate left. +// This naming refers to the latter (where the navigation goes). +extern bool sIsMplsNavLeftGesture; +extern bool sIsMplsNavRightGesture; + +extern bool sIsPointerVisible; +extern bool sPrevIsPointerVisible; +extern bool sIsCursorStickVisible; + +extern s32 sFSStickDirection; +extern s32 sFSStickNavDirection; + +inline bool isPointerVisible() { + return sIsPointerVisible; +} + +inline bool isCursorStickVisible() { + return sIsCursorStickVisible; +} + +void init(); +void calc(); +void setNavEnabled(bool navEnabled, bool autoReturnToPointerNav); + +// I really wish these returned enums but the codegen requires not-enums +s32 getFSStickDirection(); +s32 getFSStickDirectionTrig(); + +void stopFSStickNav(); +void hidePointer(); + +void setCursorStickInvisible(); +void setCursorStickVisible(); + +// Not sure what this does. Related to Deposit +// and Seeker Stone scrolling +void scrollRelated(); + +// detail: +void checkForNavRightGesture(); +void checkForNavLeftGesture(); + +} // namespace dPadNav + +#endif diff --git a/include/d/lyt/d_lyt_cursor_stick.h b/include/d/lyt/d_lyt_cursor_stick.h index cf5703ac..73a5ff1f 100644 --- a/include/d/lyt/d_lyt_cursor_stick.h +++ b/include/d/lyt/d_lyt_cursor_stick.h @@ -25,6 +25,10 @@ public: bool setPriority(u8 priority); void setTargetPane(nw4r::lyt::Pane *pane); + void setShouldBeOn(bool value) { + mShouldBeOn = value; + } + private: bool build_(); bool remove_(); diff --git a/include/m/m_pad.h b/include/m/m_pad.h index 07f172cb..1c0bc9e6 100644 --- a/include/m/m_pad.h +++ b/include/m/m_pad.h @@ -2,6 +2,7 @@ #define M_PAD_H #include "egg/core/eggController.h" +#include "m/m_vec.h" namespace mPad { @@ -48,6 +49,14 @@ inline bool isMplsPtFS(const int i) { return g_padMg->getDevType(i) == EGG::cDEV_MPLS_PT_FS; } +inline mVec2_c getDpdRawPos() { + return g_currentCore->getDpdRawPos(); +} + +inline mVec2_c getDpdRawPos(int i) { + return g_core[i]->getDpdRawPos(); +} + // Defined in dPad, referenced in both mPad and dPad extern "C" void async_info_callback(s32 chan, s32 result); diff --git a/include/m/m_vec.h b/include/m/m_vec.h index c540f470..f5dd02ef 100644 --- a/include/m/m_vec.h +++ b/include/m/m_vec.h @@ -235,6 +235,9 @@ public: f32 squareMagXZ() const { return x * x + z * z; } + f32 squareMagXY() const { + return x * x + y * y; + } f32 squareDistanceToXZ(const mVec3_c &other) const { return (*this - other).squareMagXZ(); } @@ -251,10 +254,6 @@ public: p->z = z; } - s16 ang() const { - return cM::atan2s(x * x, z * z); - } - f32 inprodXZ(const mVec3_c &other) const { return x * other.x + z * other.z; } @@ -312,6 +311,10 @@ public: mVec2_c operator+(const mVec2_c &v) const { return mVec2_c(x + v.x, y + v.y); } + + mVec2_c operator-(const mVec2_c &v) const { + return mVec2_c(x - v.x, y - v.y); + } }; #endif diff --git a/src/d/d_cs_base.cpp b/src/d/d_cs_base.cpp index 1326c80c..30fc60f1 100644 --- a/src/d/d_cs_base.cpp +++ b/src/d/d_cs_base.cpp @@ -1,21 +1,29 @@ #include "d/d_cs_base.h" #include "common.h" +#include "d/d_gfx.h" +#include "d/d_pad.h" +#include "d/d_pad_nav.h" +#include "d/lyt/d_lyt_cursor_stick.h" +#include "egg/math/eggMath.h" #include "f/f_base.h" #include "f/f_profile_name.h" +#include "m/m_pad.h" +#include "m/m_vec.h" #include "nw4r/math/math_types.h" +#include "s/s_Math.h" #include "toBeSorted/arc_managers/layout_arc_manager.h" SPECIAL_BASE_PROFILE(C_BASE, dCsBase_c, fProfile::C_BASE, 0x2C0, 0x06F9); +dCsBase_c *dCsBase_c::sInstance; + dCsBase_c::dCsBase_c() : mpCurrLyt(nullptr), - field_0x6F0(0.0f), - field_0x6F4(0.0f), - field_0x6F8(0.0f), - field_0x6FC(0.0f), + mCsPosition(0.0f, 0.0f), + mCsVelocity(0.0f, 0.0f), field_0x700(0), - field_0x702(0), + mAlpha(0), field_0x703(0), field_0x704(0), field_0x705(0) { @@ -26,11 +34,6 @@ dCsBase_c::~dCsBase_c() { sInstance = nullptr; } -extern "C" void fn_8016B2B0(); -extern "C" void fn_8016B2E0(); -extern "C" bool lbl_80572D10; -extern "C" int lbl_80573438; - static const char *sLytNames[] = { "P1_Def.brlyt", "P1_Cat.brlyt", @@ -49,14 +52,12 @@ int dCsBase_c::create() { setCurrentLyt(0); mCursorIf.setCursorMask(1); dCsMgr_c::GetInstance()->registCursor(&mCursorIf); - fn_8016B2B0(); - field_0x6F0 = 0.0f; - field_0x6F4 = 0.0f; - field_0x6F8 = 0.0f; - field_0x6FC = 0.0f; + dLytCursorStick_c::build(); + mCsPosition.set(0.0f, 0.0f); + mCsVelocity.set(0.0f, 0.0f); field_0x700 = 0; - field_0x702 = 0; + mAlpha = 0; field_0x703 = 0; return SUCCEEDED; @@ -64,14 +65,49 @@ int dCsBase_c::create() { int dCsBase_c::doDelete() { dCsMgr_c::GetInstance()->unregistCursor(&mCursorIf); - fn_8016B2E0(); + dLytCursorStick_c::remove(); mResAcc.detach(); return SUCCEEDED; } int dCsBase_c::execute() { - // TODO this needs player / controller / d_pad stuff? + mVec2_c dpdPosScreen = dPad::ex_c::getInstance()->getDpdPosScreen(); + u8 oldAlpha = mAlpha; + bool bIsInBounds = false; + if (field_0x705 == 1) { + mVec2_c dpdPos = mPad::getDpdRawPos(); + dpdPosScreen.x = dGfx_c::getWidth4x3F() * 0.5f * (1.f + dpdPos.x) + dGfx_c::getWidth4x3LeftF(); + dpdPosScreen.y = dGfx_c::getCurrentScreenHeightF() * -0.5f * (1.f + dpdPos.y) + dGfx_c::getCurrentScreenTopF(); + if (dPad::ex_c::getInstance()->field_0x22D8 == 0) { + dpdPosScreen.x = EGG::Math::maxNumber(); + dpdPosScreen.y = EGG::Math::maxNumber(); + } + } + + if (dGfx_c::getWidth4x3LeftF() <= dpdPosScreen.x && dpdPosScreen.x <= dGfx_c::getWidth4x3RightF()) { + if (dGfx_c::getCurrentScreenBottomF() <= dpdPosScreen.y && dpdPosScreen.y <= dGfx_c::getCurrentScreenTopF()) { + bIsInBounds = true; + } + } + + mCsVelocity = dpdPosScreen - mCsPosition; + mCsPosition = dpdPosScreen; + + sLib::addCalcAngle(&field_0x700.mVal, mCsVelocity.ang(), 0x10, 2000); + sLib::chaseUC(&mAlpha, bIsInBounds ? 255 : 0, 10); + if (oldAlpha != mAlpha) { + mLyts[0].getLayout()->GetRootPane()->SetAlpha(mAlpha); + mLyts[1].getLayout()->GetRootPane()->SetAlpha(mAlpha); + } + + if (dPadNav::isPointerVisible()) { + mCursorStick.setShouldBeOn(false); + } else if (dPadNav::isCursorStickVisible()) { + mCursorStick.setShouldBeOn(true); + } + + mCursorStick.execute(); return SUCCEEDED; } @@ -80,11 +116,11 @@ int dCsBase_c::draw() { return SUCCEEDED; } - if (field_0x703 && lbl_80572D10 && field_0x702) { + if (field_0x703 && dPadNav::isPointerVisible() && mAlpha) { nw4r::lyt::Pane *p = mpCurrLyt->getLayout()->GetRootPane(); nw4r::math::VEC3 pos; - pos.x = field_0x6F0; - pos.y = field_0x6F4; + pos.x = mCsPosition.x; + pos.y = mCsPosition.y; pos.z = 0.0f; p->SetTranslate(pos); mpCurrLyt->calc(); @@ -108,11 +144,11 @@ bool dCsBase_c::drawDirectly() { return true; } - if (field_0x703 && lbl_80572D10 && field_0x702) { + if (field_0x703 && dPadNav::isPointerVisible() && mAlpha) { nw4r::lyt::Pane *p = mpCurrLyt->getLayout()->GetRootPane(); nw4r::math::VEC3 pos; - pos.x = field_0x6F0; - pos.y = field_0x6F4; + pos.x = mCsPosition.x; + pos.y = mCsPosition.y; pos.z = 0.0f; p->SetTranslate(pos); mpCurrLyt->calc(); diff --git a/src/d/d_cursor_hit_check.cpp b/src/d/d_cursor_hit_check.cpp index 47535182..61fe1108 100644 --- a/src/d/d_cursor_hit_check.cpp +++ b/src/d/d_cursor_hit_check.cpp @@ -6,6 +6,7 @@ #include "d/col/cc/d_cc_s.h" #include "d/d_gfx.h" #include "d/d_pad.h" +#include "d/d_pad_nav.h" #include "d/d_stage_mgr.h" #include "m/m_mtx.h" #include "m/m_vec.h" @@ -21,10 +22,9 @@ dCsMgr_c::dCsMgr_c() { sInstance = this; } -extern "C" bool lbl_80572D10; void dCsMgr_c::execute() { // NONMATCHING - TList - if (field_0x18 == 0 && lbl_80572D10 == 0) { + if (field_0x18 == 0 && !dPadNav::isPointerVisible()) { for (CursorList::Iterator it = mList1.GetBeginIter(); it != mList1.GetEndIter(); ++it) { it->mpHit = nullptr; } diff --git a/src/d/d_pad.cpp b/src/d/d_pad.cpp index f90c09d3..1630083f 100644 --- a/src/d/d_pad.cpp +++ b/src/d/d_pad.cpp @@ -7,6 +7,7 @@ #include "d/d_cs_game.h" #include "d/d_gfx.h" #include "d/d_hbm.h" +#include "d/d_pad_nav.h" #include "d/d_pause.h" #include "d/d_reset.h" #include "d/d_sc_game.h" @@ -134,7 +135,6 @@ void convertDpdPosToScreenPos(mVec2_c &in, mVec2_c &out) { out.y = dGfx_c::getCurrentScreenHeightF() * -0.5f * (1.f + in.y) + dGfx_c::getCurrentScreenTopF(); } -extern "C" void fn_801940C0(); void beginPad_BR() { mPad::beginPad(); @@ -270,9 +270,7 @@ void beginPad_BR() { ex.mDpdPos = ex.field_0x5C; } else { if (mPad::getCore(0)->getDpdValidFlag() > 0) { - // TODO - ctor regswap - ex.mDpdPos = mPad::getCore(0)->getDpdRawPos(); - // ex.mDpdPos.set(v.x, v.y); + ex.mDpdPos = mPad::getDpdRawPos(0); } else { ex.mDpdPos.set(-2.f, -2.f); } @@ -291,7 +289,7 @@ void beginPad_BR() { core->getCoreStatus()->release &= EGG::cCORE_BUTTON_HOME; } } - fn_801940C0(); + dPadNav::calc(); } void endPad_BR() { @@ -502,8 +500,7 @@ void ex_c::centerCursor(s32 chan, bool b) { } void ex_c::fn_80056790(s32 chan) { - // unused - TODO ctor regswap - mVec2_c dpdRawPos = mPad::getCore(chan)->getDpdRawPos(); + mVec2_c dpdRawPos = mPad::getDpdRawPos(chan); f32 f; if (dScGame_c::GetInstance() != nullptr && dLytMap_c::GetInstance() != nullptr && diff --git a/src/d/d_pad_nav.cpp b/src/d/d_pad_nav.cpp new file mode 100644 index 00000000..50c9e081 --- /dev/null +++ b/src/d/d_pad_nav.cpp @@ -0,0 +1,241 @@ +#include "d/d_pad_nav.h" + +#include "d/d_pad.h" +#include "m/m_vec.h" + +namespace dPadNav { + +bool sIsNavEnabled = false; +bool sIsMplsNavLeftGesture = false; +bool sIsMplsNavRightGesture = false; +static bool sDisableAutoReturnToPointerNav = false; + +bool sIsPointerVisible = true; +bool sPrevIsPointerVisible = true; +bool sIsCursorStickVisible = true; + +s32 sFSStickDirection; +s32 sFSStickNavDirection; + +static s32 sFSStickNavActiveTimer = 0; +static s32 sFSStickDirectionStableTimer = 0; +static s32 sMPLSNavGestureTimer = 0; + +void init() { + sIsNavEnabled = false; + sIsPointerVisible = true; + sIsMplsNavLeftGesture = false; + sIsMplsNavRightGesture = false; + sDisableAutoReturnToPointerNav = false; + sPrevIsPointerVisible = true; + sFSStickDirection = FS_STICK_NONE; + sFSStickNavDirection = FS_STICK_NONE; + sFSStickNavActiveTimer = 0; + sFSStickDirectionStableTimer = 0; + sMPLSNavGestureTimer = 0; + setCursorStickInvisible(); +} + +void calc() { + sPrevIsPointerVisible = sIsPointerVisible; + sFSStickNavDirection = FS_STICK_NONE; + + if (!sIsNavEnabled) { + return; + } + + mVec3_c vel = dPad::ex_c::getInstance()->getMPLSVelocity(); + if (sMPLSNavGestureTimer != 0) { + sMPLSNavGestureTimer--; + sIsMplsNavLeftGesture = false; + sIsMplsNavRightGesture = false; + } else { + checkForNavLeftGesture(); + checkForNavRightGesture(); + } + + if (vel.squareMagXY() > 1.5f) { + // Large MPLS movement - stop FS stick navigation + stopFSStickNav(); + return; + } + + if (sIsPointerVisible) { + if (dPad::ex_c::getInstance()->getFSStickTrig()) { + // starting FS stick navigation - immediate nav event, with delay of + // 8 frames (267ms) for repeat nav event + sFSStickDirection = getFSStickDirectionTrig(); + sFSStickNavDirection = sFSStickDirection; + sFSStickNavActiveTimer = 120; + sFSStickDirectionStableTimer = 8; + sIsPointerVisible = false; + } + } else { + s32 direction = getFSStickDirection(); + if (sFSStickDirection != FS_STICK_NONE && direction == sFSStickDirection) { + // no change in FS stick direction + sFSStickNavActiveTimer = 120; + if (sFSStickDirectionStableTimer == 0) { + // repeat event - now with a delay of 3 frames (100ms) + sFSStickNavDirection = sFSStickDirection; + sFSStickDirectionStableTimer = 3; + } else { + sFSStickDirectionStableTimer--; + } + } else { + if (dPad::ex_c::getInstance()->getFSStickTrig()) { + // change in FS stick direction - same as if started navigation + direction = getFSStickDirectionTrig(); + sFSStickDirectionStableTimer = 8; + sFSStickDirection = direction; + sFSStickNavDirection = direction; + sFSStickNavActiveTimer = 120; + } else { + // let go of FS stick + sFSStickDirection = FS_STICK_NONE; + sFSStickDirectionStableTimer = 0; + } + } + + if (!sDisableAutoReturnToPointerNav) { + if (sFSStickNavActiveTimer == 0) { + // FS stick nav timer expired (or was set to 0 via explicit call), + // check if we need to return to pointer nav + if (direction != FS_STICK_NONE && sFSStickDirection == direction) { + sFSStickNavActiveTimer = 120; + } else { + if (direction == FS_STICK_NONE) { + // No direction, return to pointer nav + sFSStickDirection = FS_STICK_NONE; + sIsPointerVisible = true; + } else { + sFSStickDirectionStableTimer = 8; + // Note: Redundant check + if (!sDisableAutoReturnToPointerNav) { + sFSStickDirection = direction; + } + sFSStickNavDirection = sFSStickDirection; + sFSStickNavActiveTimer = 120; + } + } + } else { + sFSStickNavActiveTimer--; + } + } + } +} + +void setNavEnabled(bool navEnabled, bool disableAutoReturnToPointerNav) { + sIsNavEnabled = navEnabled; + sIsPointerVisible = true; + if (navEnabled) { + setCursorStickVisible(); + sDisableAutoReturnToPointerNav = disableAutoReturnToPointerNav; + } else { + setCursorStickInvisible(); + sDisableAutoReturnToPointerNav = false; + } +} + +s32 getFSStickDirectionTrig() { + if (dPad::ex_c::getInstance()->getFSStickTrig(0x1)) { + return FS_STICK_UP; + } + + if (dPad::ex_c::getInstance()->getFSStickTrig(0x80)) { + return FS_STICK_UP_RIGHT; + } + + if (dPad::ex_c::getInstance()->getFSStickTrig(0x40)) { + return FS_STICK_RIGHT; + } + + if (dPad::ex_c::getInstance()->getFSStickTrig(0x20)) { + return FS_STICK_DOWN_RIGHT; + } + + if (dPad::ex_c::getInstance()->getFSStickTrig(0x10)) { + return FS_STICK_DOWN; + } + + if (dPad::ex_c::getInstance()->getFSStickTrig(0x8)) { + return FS_STICK_DOWN_LEFT; + } + + if (dPad::ex_c::getInstance()->getFSStickTrig(0x4)) { + return FS_STICK_LEFT; + } + + if (dPad::ex_c::getInstance()->getFSStickTrig(0x2)) { + return FS_STICK_UP_LEFT; + } + + return FS_STICK_NONE; +} + +s32 getFSStickDirection() { + switch (dPad::ex_c::getInstance()->mFSStickMask) { + case 0x1: return FS_STICK_UP; + case 0x80: return FS_STICK_UP_RIGHT; + case 0x40: return FS_STICK_RIGHT; + case 0x20: return FS_STICK_DOWN_RIGHT; + case 0x10: return FS_STICK_DOWN; + case 0x8: return FS_STICK_DOWN_LEFT; + case 0x4: return FS_STICK_LEFT; + case 0x2: return FS_STICK_UP_LEFT; + } + + return FS_STICK_NONE; +} + +void stopFSStickNav() { + sFSStickNavActiveTimer = 0; + sIsPointerVisible = true; +} + +void hidePointer() { + sIsPointerVisible = false; +} + +void setCursorStickInvisible() { + sIsCursorStickVisible = false; +} + +void setCursorStickVisible() { + sIsCursorStickVisible = true; +} + +void checkForNavLeftGesture() { + mVec3_c vel = dPad::ex_c::getInstance()->getMPLSVelocity(); + if (vel.y <= 0.0f && vel.squareMagXY() > 1.5f) { + if (!sIsPointerVisible) { + sMPLSNavGestureTimer = 10; + sIsMplsNavLeftGesture = false; + } else { + sIsMplsNavLeftGesture = true; + } + } else { + sIsMplsNavLeftGesture = false; + } +} + +void checkForNavRightGesture() { + mVec3_c vel = dPad::ex_c::getInstance()->getMPLSVelocity(); + if (vel.y >= 0.0f && vel.squareMagXY() > 1.5f) { + if (!sIsPointerVisible) { + sMPLSNavGestureTimer = 10; + sIsMplsNavRightGesture = false; + } else { + sIsMplsNavRightGesture = true; + } + } else { + sIsMplsNavRightGesture = false; + } +} + +void scrollRelated() { + sFSStickDirectionStableTimer = 3; + sFSStickNavActiveTimer = 120; +} + +} // namespace dPadNav diff --git a/src/d/d_scene.cpp b/src/d/d_scene.cpp index 0a8fa4a4..59f59f7a 100644 --- a/src/d/d_scene.cpp +++ b/src/d/d_scene.cpp @@ -2,6 +2,7 @@ #include "common.h" #include "d/d_base.h" +#include "d/d_pad_nav.h" #include "d/d_reset.h" #include "d/d_rumble.h" #include "f/f_base.h" @@ -14,7 +15,6 @@ static bool gameStateIsActive = true; extern "C" u32 lbl_80574FA0; extern "C" u32 lbl_80574FA4; -extern "C" void fn_801942F0(int, int); dFader_c dScene_c::sFader; @@ -22,7 +22,7 @@ dScene_c::dScene_c() { lbl_80574FA0 = 0; lbl_80574FA4 = 0; setProcControlFlag(ROOT_DISABLE_DRAW | ROOT_DISABLE_EXECUTE); - fn_801942F0(0, 0); + dPadNav::setNavEnabled(false, false); } void dScene_c::postCreate(MAIN_STATE_e state) { diff --git a/src/d/lyt/d_lyt_common_arrow.cpp b/src/d/lyt/d_lyt_common_arrow.cpp index 393f5068..024e81ab 100644 --- a/src/d/lyt/d_lyt_common_arrow.cpp +++ b/src/d/lyt/d_lyt_common_arrow.cpp @@ -2,6 +2,7 @@ #include "d/d_cs_base.h" #include "d/d_cursor_hit_check.h" +#include "d/d_pad_nav.h" #include "d/snd/d_snd_small_effect_mgr.h" #include "rvl/MTX/mtx.h" #include "toBeSorted/arc_managers/layout_arc_manager.h" @@ -144,11 +145,9 @@ void dLytCommonArrow_c::tickDown(d2d::AnmGroup_c *ctrl) { } } -extern "C" u8 lbl_80572D10; - void dLytCommonArrow_c::fn_80168880() { int i = -1; - if (lbl_80572D10 == 0) { + if (!dPadNav::isPointerVisible()) { field_0x6B4 = 2; return; } diff --git a/src/d/lyt/d_lyt_map.cpp b/src/d/lyt/d_lyt_map.cpp index 08a97822..478117d1 100644 --- a/src/d/lyt/d_lyt_map.cpp +++ b/src/d/lyt/d_lyt_map.cpp @@ -1,6 +1,7 @@ #include "d/lyt/d_lyt_map.h" #include "common.h" +#include "d/d_pad_nav.h" #include "d/lyt/d2d.h" #include "d/d_cursor_hit_check.h" #include "egg/core/eggColorFader.h" @@ -395,14 +396,13 @@ void dLytMapFloorBtnMgr_c::initializeState_Wait() {} void dLytMapFloorBtnMgr_c::executeState_Wait() {} void dLytMapFloorBtnMgr_c::finalizeState_Wait() {} -extern "C" void fn_801942F0(int, int); dLytMapFloorBtnMgr_c::~dLytMapFloorBtnMgr_c() { for (int i = 0; i < 4; i++) { if (dCsMgr_c::GetInstance()->isRegist(&mCsHitChecks[i])) { dCsMgr_c::GetInstance()->unregistCursorTarget(&mCsHitChecks[i]); } } - fn_801942F0(0, 0); + dPadNav::setNavEnabled(false, false); } void dLytMapPopupInfo_c::initializeState_Invisible() {} diff --git a/src/d/lyt/msg_window/d_lyt_msg_window_select_btn.cpp b/src/d/lyt/msg_window/d_lyt_msg_window_select_btn.cpp index 5adc3ef8..a837e3e8 100644 --- a/src/d/lyt/msg_window/d_lyt_msg_window_select_btn.cpp +++ b/src/d/lyt/msg_window/d_lyt_msg_window_select_btn.cpp @@ -2,6 +2,7 @@ #include "common.h" #include "d/d_pad.h" +#include "d/d_pad_nav.h" #include "d/lyt/d2d.h" #include "d/snd/d_snd_small_effect_mgr.h" #include "toBeSorted/music_mgrs.h" @@ -524,8 +525,6 @@ bool dLytMsgWindowSelectBtn_c::build(d2d::ResAccIf_c *resAcc) { return true; } -extern "C" void fn_801942F0(int, int); - bool dLytMsgWindowSelectBtn_c::remove() { for (int i = 0; i < SELECT_BTN_NUM_ANIMS; i++) { mAnm[i].unbind(); @@ -534,7 +533,7 @@ bool dLytMsgWindowSelectBtn_c::remove() { if (mBtnHelper.field_0x52 != 0) { mBtnHelper.field_0x52 = 0; - fn_801942F0(0, 0); + dPadNav::setNavEnabled(false, false); } return true;