From 0aaeb4123d09bd112a2a0b742a1bd60e236669b1 Mon Sep 17 00:00:00 2001 From: robojumper Date: Sat, 26 Jul 2025 15:23:07 +0200 Subject: [PATCH] d_lyt_cursor_stick OK --- config/SOUE01/symbols.txt | 139 ++++++++++--------- configure.py | 2 +- include/d/d_cs_base.h | 2 +- include/d/lyt/d_lyt_cursor_stick.h | 27 +++- src/d/d_cs_base.cpp | 8 +- src/d/lyt/d_lyt_cursor_stick.cpp | 205 +++++++++++++++++++++++++++++ 6 files changed, 310 insertions(+), 73 deletions(-) create mode 100644 src/d/lyt/d_lyt_cursor_stick.cpp diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index d2d9f88e..bb544b36 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -2370,8 +2370,8 @@ getDownTrig2__4dPadFv = .text:0x800597A0; // type:function size:0x18 getDownTrigMinus__4dPadFv = .text:0x800597C0; // type:function size:0x18 getDownTrigPlus__4dPadFv = .text:0x800597E0; // type:function size:0x18 getDown__4dPadFUl = .text:0x80059800; // type:function size:0x18 -down__Q23EGG14CoreControllerCFUl = .text:0x80059820; // type:function size:0x18 -downAll__Q23EGG14CoreControllerCFUl = .text:0x80059840; // type:function size:0x18 +down__Q23EGG14CoreControllerCFUl = .text:0x80059820; // type:function size:0x18 scope:weak +downAll__Q23EGG14CoreControllerCFUl = .text:0x80059840; // type:function size:0x18 scope:weak getDownA__4dPadFv = .text:0x80059860; // type:function size:0x18 getDownB__4dPadFv = .text:0x80059880; // type:function size:0x18 getDownC__4dPadFv = .text:0x800598A0; // type:function size:0x18 @@ -2384,12 +2384,12 @@ getDown1__4dPadFv = .text:0x80059960; // type:function size:0x18 getDown2__4dPadFv = .text:0x80059980; // type:function size:0x18 getDownMinus__4dPadFv = .text:0x800599A0; // type:function size:0x18 getDownPlus__4dPadFv = .text:0x800599C0; // type:function size:0x18 -upTrigger__Q23EGG14CoreControllerCFUl = .text:0x800599E0; // type:function size:0x18 +upTrigger__Q23EGG14CoreControllerCFUl = .text:0x800599E0; // type:function size:0x18 scope:weak getUpTrigA__4dPadFv = .text:0x80059A00; // type:function size:0x18 getUpTrigB__4dPadFv = .text:0x80059A20; // type:function size:0x18 getUpTrigZ__4dPadFv = .text:0x80059A40; // type:function size:0x18 -up__Q23EGG14CoreControllerCFUl = .text:0x80059A60; // type:function size:0x1C -upAll__Q23EGG14CoreControllerCFUl = .text:0x80059A80; // type:function size:0x14 +up__Q23EGG14CoreControllerCFUl = .text:0x80059A60; // type:function size:0x1C scope:weak +upAll__Q23EGG14CoreControllerCFUl = .text:0x80059A80; // type:function size:0x14 scope:weak getUpA__4dPadFv = .text:0x80059AA0; // type:function size:0x18 getDpdPos__4dPadFv = .text:0x80059AC0; // type:function size:0x8 getDpdPosScreen__4dPadFv = .text:0x80059AD0; // type:function size:0xC @@ -2935,7 +2935,7 @@ Calculate__Q26dReset8Manage_cFv = .text:0x80067D40; // type:function size:0x70 Draw__Q26dReset8Manage_cFv = .text:0x80067DB0; // type:function size:0x14 BootComplete__Q26dReset8Manage_cFb = .text:0x80067DD0; // type:function size:0x8 CanExecSoftReset__Q26dReset8Manage_cCFv = .text:0x80067DE0; // type:function size:0xD4 -getStatus__Q23EGG10ColorFaderCFv = .text:0x80067EC0; // type:function size:0x8 +getStatus__Q23EGG10ColorFaderCFv = .text:0x80067EC0; // type:function size:0x8 scope:weak SetSoftResetFinish__Q26dReset8Manage_cFv = .text:0x80067ED0; // type:function size:0x24 SetSoftResetScene__Q26dReset8Manage_cFv = .text:0x80067F00; // type:function size:0x50 PostDeleteScene__Q26dReset8Manage_cFv = .text:0x80067F50; // type:function size:0x4 @@ -9300,33 +9300,33 @@ fn_8016AD90 = .text:0x8016AD90; // type:function size:0x30 LytCommonTitle__initStates = .text:0x8016ADC0; // type:function size:0x3F4 LytCommonTitle__state_dtor = .text:0x8016B1C0; // type:function size:0x58 fn_8016B220 = .text:0x8016B220; // type:function size:0x88 -fn_8016B2B0 = .text:0x8016B2B0; // type:function size:0x28 -fn_8016B2E0 = .text:0x8016B2E0; // type:function size:0x38 -fn_8016B320 = .text:0x8016B320; // type:function size:0x30 +build__17dLytCursorStick_cFv = .text:0x8016B2B0; // type:function size:0x28 +remove__17dLytCursorStick_cFv = .text:0x8016B2E0; // type:function size:0x38 +execute__17dLytCursorStick_cFv = .text:0x8016B320; // type:function size:0x30 draw__17dLytCursorStick_cFv = .text:0x8016B350; // type:function size:0x30 -similarToDraw__17dLytCursorStick_cFv = .text:0x8016B380; // type:function size:0x30 -fn_8016B3B0 = .text:0x8016B3B0; // type:function size:0x138 -changeState__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x8016B4F0; // type:function size:0x10 -fn_8016B500 = .text:0x8016B500; // type:function size:0x50 -fn_8016B550 = .text:0x8016B550; // type:function size:0x5C -executeState__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8016B5B0; // type:function size:0x10 -fn_8016B5C0 = .text:0x8016B5C0; // type:function size:0x34 -fn_8016B600 = .text:0x8016B600; // type:function size:0x40 -fn_8016B640 = .text:0x8016B640; // type:function size:0x8 -LytCursorStick__stateOffEnter = .text:0x8016B650; // type:function size:0x4 -LytCursorStick__stateOffUpdate = .text:0x8016B660; // type:function size:0x70 -LytCursorStick__stateOffLeave = .text:0x8016B6D0; // type:function size:0x4 -LytCursorStick__stateOnEnter = .text:0x8016B6E0; // type:function size:0x4 -LytCursorStick__stateOnUpdate = .text:0x8016B6F0; // type:function size:0x94 -LytCursorStick__stateOnLeave = .text:0x8016B790; // type:function size:0x4 -fn_8016B7A0 = .text:0x8016B7A0; // type:function size:0x8 -fn_8016B7B0 = .text:0x8016B7B0; // type:function size:0x1EC -fn_8016B9A0 = .text:0x8016B9A0; // type:function size:0x30 -fn_8016B9D0 = .text:0x8016B9D0; // type:function size:0x30 -fn_8016BA00 = .text:0x8016BA00; // type:function size:0x30 -LytCursorStick__initStates = .text:0x8016BA30; // type:function size:0x1C0 -LytCursorStick__dtor = .text:0x8016BBF0; // type:function size:0x58 -fn_8016BC50 = .text:0x8016BC50; // type:function size:0x88 +drawDirectly__17dLytCursorStick_cFv = .text:0x8016B380; // type:function size:0x30 +build___17dLytCursorStick_cFv = .text:0x8016B3B0; // type:function size:0x138 +changeState__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x8016B4F0; // type:function size:0x10 scope:weak +remove___17dLytCursorStick_cFv = .text:0x8016B500; // type:function size:0x50 +execute___17dLytCursorStick_cFv = .text:0x8016B550; // type:function size:0x5C +executeState__86sStateMgr_c<17dLytCursorStick_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8016B5B0; // type:function size:0x10 scope:weak +draw___17dLytCursorStick_cFv = .text:0x8016B5C0; // type:function size:0x34 +drawDirectly___17dLytCursorStick_cFv = .text:0x8016B600; // type:function size:0x40 +setPriority__17dLytCursorStick_cFUc = .text:0x8016B640; // type:function size:0x8 +initializeState_Off__17dLytCursorStick_cFv = .text:0x8016B650; // type:function size:0x4 +executeState_Off__17dLytCursorStick_cFv = .text:0x8016B660; // type:function size:0x70 +finalizeState_Off__17dLytCursorStick_cFv = .text:0x8016B6D0; // type:function size:0x4 +initializeState_On__17dLytCursorStick_cFv = .text:0x8016B6E0; // type:function size:0x4 +executeState_On__17dLytCursorStick_cFv = .text:0x8016B6F0; // type:function size:0x94 +finalizeState_On__17dLytCursorStick_cFv = .text:0x8016B790; // type:function size:0x4 +setTargetPane__17dLytCursorStick_cFPQ34nw4r3lyt4Pane = .text:0x8016B7A0; // type:function size:0x8 +positionToTarget__17dLytCursorStick_cFv = .text:0x8016B7B0; // type:function size:0x1EC +finalizeState__32sFStateID_c<17dLytCursorStick_c>CFR17dLytCursorStick_c = .text:0x8016B9A0; // type:function size:0x30 scope:weak +executeState__32sFStateID_c<17dLytCursorStick_c>CFR17dLytCursorStick_c = .text:0x8016B9D0; // type:function size:0x30 scope:weak +initializeState__32sFStateID_c<17dLytCursorStick_c>CFR17dLytCursorStick_c = .text:0x8016BA00; // type:function size:0x30 scope:weak +__sinit_\d_lyt_cursor_stick_cpp = .text:0x8016BA30; // type:function size:0x1C0 scope:local +__dt__32sFStateID_c<17dLytCursorStick_c>Fv = .text:0x8016BBF0; // type:function size:0x58 scope:weak +isSameName__32sFStateID_c<17dLytCursorStick_c>CFPCc = .text:0x8016BC50; // type:function size:0x88 scope:weak isValid__16FiAnalysisHandleCFv = .text:0x8016BCE0; // type:function size:0x14 getAreaIndexForFiAreaName__16FiAnalysisHandleCFv = .text:0x8016BD00; // type:function size:0x44 getCurrentFocus__16FiAnalysisHandleFv = .text:0x8016BD50; // type:function size:0x68 @@ -11248,7 +11248,7 @@ execute__9dCsBase_cFv = .text:0x801BCD80; // type:function size:0x1E4 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 -similarToDraw__9dCsBase_cFv = .text:0x801BD050; // type:function size:0xBC +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 @@ -17765,7 +17765,7 @@ createOrDie__15mDvd_callback_cFPFPv_PvPv = .text:0x802EF650; // type:function si execute__15mDvd_callback_cFv = .text:0x802EF680; // type:function size:0x54 __dt__22mDvd_mountMemArchive_cFv = .text:0x802EF6E0; // type:function size:0x58 __ct__22mDvd_mountMemArchive_cFi = .text:0x802EF740; // type:function size:0x74 -ConvertPathToEntrynumASD___4mDvdFPCcPUc = .text:0x802EF7C0; // type:function size:0x16C +ConvertPathToEntrynumASD___4mDvdFPCcPUc = .text:0x802EF7C0; // type:function size:0x16C scope:local setAutoStreamDecomp__4mDvdFb = .text:0x802EF930; // type:function size:0x8 isAutoStreamDecomp__4mDvdFv = .text:0x802EF940; // type:function size:0x8 ConvertPathToEntrynum__4mDvdFPCcPUc = .text:0x802EF950; // type:function size:0x80 scope:local @@ -26703,7 +26703,7 @@ getBaseTexMtx__Q23EGG14PostEffectBaseCFPQ34nw4r4math5MTX34 = .text:0x804AF2D0; / setProjection__Q23EGG14PostEffectBaseFRCQ23EGG6Screen = .text:0x804AF3C0; // type:function size:0xF4 __ct__Q23EGG14PostEffectBlurFv = .text:0x804AF4C0; // type:function size:0xE0 draw__Q23EGG14PostEffectBlurFff = .text:0x804AF5A0; // type:function size:0x190 -drawInternal__Q23EGG14PostEffectBlurFUcUcff = .text:0x804AF730; // type:function size:0x4D4 +setMaterialMulti__Q23EGG14PostEffectBlurFUcUcff = .text:0x804AF730; // type:function size:0x4D4 __ct__Q23EGG20PostEffectBlurGatherFv = .text:0x804AFC10; // type:function size:0xC0 setMaterialInternal__Q23EGG20PostEffectBlurGatherFv = .text:0x804AFCD0; // type:function size:0x3C8 __ct__Q23EGG14PostEffectUnk2Fv = .text:0x804B00A0; // type:function size:0x1F8 @@ -28214,8 +28214,8 @@ lbl_804E0E3C = .rodata:0x804E0E3C; // type:object size:0x3C lbl_804E0E78 = .rodata:0x804E0E78; // type:object size:0x3C lbl_804E0EB4 = .rodata:0x804E0EB4; // type:object size:0x3C lbl_804E0EF0 = .rodata:0x804E0EF0; // type:object size:0x28 -@LOCAL@ModeProc__Q26dReset8Manage_cFv@procs = .rodata:0x804E0F18; // type:object size:0x48 -@LOCAL@ModeRequest__Q26dReset8Manage_cFQ36dReset8Manage_c6Mode_e@procs = .rodata:0x804E0F60; // type:object size:0x48 +@LOCAL@ModeProc__Q26dReset8Manage_cFv@procs = .rodata:0x804E0F18; // type:object size:0x48 scope:local +@LOCAL@ModeRequest__Q26dReset8Manage_cFQ36dReset8Manage_c6Mode_e@procs = .rodata:0x804E0F60; // type:object size:0x48 scope:local sInfos = .rodata:0x804E0FA8; // type:object size:0x246C scope:local data:4byte lbl_804E3418 = .rodata:0x804E3418; // type:object size:0x40 data:4byte lbl_804E3458 = .rodata:0x804E3458; // type:object size:0x38 data:4byte @@ -30874,10 +30874,10 @@ __vt__20dCursorHitCheckLyt_c = .data:0x8050DF70; // type:object size:0x14 __vt__24dCsCheckLyt_BoundingData = .data:0x8050DF84; // type:object size:0xC __vt__19dCursorHitCheckCC_c = .data:0x8050DF90; // type:object size:0x10 __vt__9dRumble_c = .data:0x8050DFA0; // type:object size:0xC -lbl_8050DFB0 = .data:0x8050DFB0; // type:object size:0xC -lbl_8050DFBC = .data:0x8050DFBC; // type:object size:0xC -lbl_8050DFC8 = .data:0x8050DFC8; // type:object size:0xC -lbl_8050DFD4 = .data:0x8050DFD4; // type:object size:0xC +@24614 = .data:0x8050DFB0; // type:object size:0xA scope:local data:string +@24731 = .data:0x8050DFBC; // type:object size:0x9 scope:local data:string +@24749 = .data:0x8050DFC8; // type:object size:0xB scope:local data:string +@24755 = .data:0x8050DFD4; // type:object size:0xB scope:local data:string @4319 = .data:0x8050DFE0; // type:object size:0xA scope:local data:string @4352 = .data:0x8050DFEC; // type:object size:0xB scope:local data:string @4394 = .data:0x8050DFF8; // type:object size:0x9 scope:local data:string @@ -34612,10 +34612,22 @@ lbl_80527880 = .data:0x80527880; // type:object size:0x30 lbl_805278B0 = .data:0x805278B0; // type:object size:0x18 lbl_805278C8 = .data:0x805278C8; // type:object size:0x19C lbl_80527A64 = .data:0x80527A64; // type:object size:0x34 -lbl_80527A98 = .data:0x80527A98; // type:object size:0x1C -lbl_80527AB4 = .data:0x80527AB4; // type:object size:0xC -lbl_80527AC0 = .data:0x80527AC0; // type:object size:0xCC -lbl_80527B8C = .data:0x80527B8C; // type:object size:0x34 +@11234 = .data:0x80527A98; // type:object size:0x1A scope:local data:string +...data.0 = .data:0x80527A98; // type:label scope:local +@11235 = .data:0x80527AB4; // type:object size:0xA scope:local data:string +@11236 = .data:0x80527AC0; // type:object size:0x9 scope:local data:string +sPaneNames = .data:0x80527ACC; // type:object size:0x14 scope:local +@11625 = .data:0x80527AE0; // type:object size:0xC scope:local data:string +@11627 = .data:0x80527AEC; // type:object size:0x15 scope:local data:string +@11751 = .data:0x80527B04; // type:object size:0xC scope:local +@11752 = .data:0x80527B10; // type:object size:0xC scope:local +@11753 = .data:0x80527B1C; // type:object size:0xC scope:local +@11754 = .data:0x80527B28; // type:object size:0xC scope:local +@11755 = .data:0x80527B34; // type:object size:0xC scope:local +@11756 = .data:0x80527B40; // type:object size:0xC scope:local +@11758 = .data:0x80527B4C; // type:object size:0x1F scope:local data:string +@11759 = .data:0x80527B6C; // type:object size:0x1E scope:local data:string +__vt__32sFStateID_c<17dLytCursorStick_c> = .data:0x80527B8C; // type:object size:0x34 scope:weak @30384 = .data:0x80527BC0; // type:object size:0xB scope:local data:string __vt__23GratitudeCrystalCounter = .data:0x80527BD0; // type:object size:0x20 __vt__19GoddessPlumeCounter = .data:0x80527BF0; // type:object size:0x20 @@ -39253,8 +39265,8 @@ RootActorID = .sdata:0x80571D08; // type:object size:0x2 scope:local data:2byte gameStateIsActive = .sdata:0x80571D0A; // type:object size:0x1 scope:local data:byte @9006 = .sdata:0x80571D10; // type:object size:0x7 scope:local data:string @9007 = .sdata:0x80571D18; // type:object size:0x3 scope:local data:string -lbl_80571D20 = .sdata:0x80571D20; // type:object size:0x8 -lbl_80571D28 = .sdata:0x80571D28; // type:object size:0x8 data:string +@24583 = .sdata:0x80571D20; // type:object size:0x7 scope:local data:string +@24703 = .sdata:0x80571D28; // type:object size:0x8 scope:local data:string @4320 = .sdata:0x80571D30; // type:object size:0x7 scope:local data:string @4387 = .sdata:0x80571D38; // type:object size:0x7 scope:local data:string @4244 = .sdata:0x80571D40; // type:object size:0x7 scope:local data:string @@ -39762,11 +39774,11 @@ sGroupName = .sdata:0x805729C8; // type:object size:0x4 scope:local data:4byte @8185 = .sdata:0x805729D0; // type:object size:0x1 scope:local lbl_805729D8 = .sdata:0x805729D8; // type:object size:0x4 lbl_805729DC = .sdata:0x805729DC; // type:object size:0x4 -lbl_805729E0 = .sdata:0x805729E0; // type:object size:0x8 data:string -lbl_805729E8 = .sdata:0x805729E8; // type:object size:0x8 data:string -lbl_805729F0 = .sdata:0x805729F0; // type:object size:0x8 data:string -lbl_805729F8 = .sdata:0x805729F8; // type:object size:0x8 data:string -lbl_80572A00 = .sdata:0x80572A00; // type:object size:0x8 +@11237 = .sdata:0x805729E0; // type:object size:0x8 scope:local data:string +@11238 = .sdata:0x805729E8; // type:object size:0x8 scope:local data:string +@11239 = .sdata:0x805729F0; // type:object size:0x8 scope:local data:string +@11240 = .sdata:0x805729F8; // type:object size:0x8 scope:local data:string +@11626 = .sdata:0x80572A00; // type:object size:0x1 scope:local @30454 = .sdata:0x80572A08; // type:object size:0x5 scope:local data:string lbl_80572A10 = .sdata:0x80572A10; // type:object size:0x8 data:string lbl_80572A18 = .sdata:0x80572A18; // type:object size:0x8 data:string @@ -41538,7 +41550,7 @@ sInstance__18dLytSystemWindow_c = .sbss:0x805754D8; // type:object size:0x8 data sInstance__15dLytBirdGauge_c = .sbss:0x805754E0; // type:object size:0x4 data:4byte sInstance__14dLytSkyGauge_c = .sbss:0x805754E8; // type:object size:0x4 data:4byte lbl_805754F0 = .sbss:0x805754F0; // type:object size:0x8 data:4byte -sInstance__17dLytCursorStick_c = .sbss:0x805754F8; // type:object size:0x8 data:4byte +sInstance__17dLytCursorStick_c = .sbss:0x805754F8; // type:object size:0x4 data:4byte sInstance__9FiContext = .sbss:0x80575500; // type:object size:0x4 data:4byte sNaviTable = .sbss:0x80575504; // type:object size:0x4 scope:local data:4byte sSmallKeyCounter = .sbss:0x80575508; // type:object size:0x8 data:4byte @@ -43433,8 +43445,8 @@ lbl_805779CC = .sdata2:0x805779CC; // type:object size:0x4 align:4 data:float lbl_805779D0 = .sdata2:0x805779D0; // type:object size:0x4 align:4 data:float lbl_805779D8 = .sdata2:0x805779D8; // type:object size:0x8 align:8 data:double lbl_805779E0 = .sdata2:0x805779E0; // type:object size:0x4 align:4 data:float -lbl_805779E8 = .sdata2:0x805779E8; // type:object size:0x4 align:4 data:float -lbl_805779F0 = .sdata2:0x805779F0; // type:object size:0x8 align:8 data:double +@24439 = .sdata2:0x805779E8; // type:object size:0x4 scope:local align:4 data:float +@24442 = .sdata2:0x805779F0; // type:object size:0x8 scope:local align:8 data:double @62 = .sdata2:0x805779F8; // type:object size:0x7 scope:local data:string @63 = .sdata2:0x80577A00; // type:object size:0x7 scope:local data:string @64 = .sdata2:0x80577A08; // type:object size:0x7 scope:local data:string @@ -45039,9 +45051,9 @@ TRIFORCE_PIECE_ITEM_IDS = .sdata2:0x8057A178; // type:object size:0x8 data:wstri lbl_8057A188 = .sdata2:0x8057A188; // type:object size:0x4 align:4 data:float lbl_8057A18C = .sdata2:0x8057A18C; // type:object size:0x4 align:4 data:float lbl_8057A190 = .sdata2:0x8057A190; // type:object size:0x4 align:4 data:float -lbl_8057A198 = .sdata2:0x8057A198; // type:object size:0x8 data:4byte -lbl_8057A1A0 = .sdata2:0x8057A1A0; // type:object size:0x4 align:4 data:float -lbl_8057A1A4 = .sdata2:0x8057A1A4; // type:object size:0x4 align:4 data:float +brlanMap = .sdata2:0x8057A198; // type:object size:0x8 scope:local data:4byte +@11660 = .sdata2:0x8057A1A0; // type:object size:0x4 scope:local align:4 data:float +@11740 = .sdata2:0x8057A1A4; // type:object size:0x4 scope:local align:4 data:float @LOCAL@getEquipmentFocus__16FiAnalysisHandleCFv@sEquipmentFocuses = .sdata2:0x8057A1A8; // type:object size:0x8 scope:local @30283 = .sdata2:0x8057A1B0; // type:object size:0x4 scope:local align:4 data:float @30284 = .sdata2:0x8057A1B4; // type:object size:0x4 scope:local align:4 data:float @@ -50450,6 +50462,7 @@ sHandMats = .bss:0x805A06C8; // type:object size:0xE scope:local data:byte sFader__8dScene_c = .bss:0x805A06FC; // type:object size:0x24 data:4byte SysConfig = .bss:0x805A0720; // type:object size:0x58 data:4byte sRumblePreset0__9dRumble_c = .bss:0x805A0778; // type:object size:0xC data:4byte +...bss.0 = .bss:0x805A0778; // type:label scope:local sRumblePreset1__9dRumble_c = .bss:0x805A0784; // type:object size:0xC data:4byte sRumblePreset2__9dRumble_c = .bss:0x805A0790; // type:object size:0xC data:4byte sRumblePreset3__9dRumble_c = .bss:0x805A079C; // type:object size:0xC data:4byte @@ -51319,9 +51332,11 @@ LytCommonTitle__STATE_IN = .bss:0x805B1E00; // type:object size:0x40 data:4byte LytCommonTitle__STATE_WAIT = .bss:0x805B1E40; // type:object size:0x40 data:4byte LytCommonTitle__STATE_OUT = .bss:0x805B1E80; // type:object size:0x40 data:4byte LytCommonTitle__STATE_CHANGE = .bss:0x805B1EC0; // type:object size:0x30 data:4byte -lbl_805B1EF0 = .bss:0x805B1EF0; // type:object size:0x10 -LytCursorStick__STATE_OFF = .bss:0x805B1F00; // type:object size:0x40 data:4byte -LytCursorStick__STATE_ON = .bss:0x805B1F40; // type:object size:0x30 data:4byte +@11229 = .bss:0x805B1EF0; // type:object size:0xC scope:local +...bss.0 = .bss:0x805B1EF0; // type:label scope:local +StateID_Off__17dLytCursorStick_c = .bss:0x805B1F00; // type:object size:0x30 data:4byte +@11233 = .bss:0x805B1F30; // type:object size:0xC scope:local +StateID_On__17dLytCursorStick_c = .bss:0x805B1F40; // type:object size:0x30 data:4byte lbl_805B1F70 = .bss:0x805B1F70; // type:object size:0xA0 data:4byte lbl_805B2010 = .bss:0x805B2010; // type:object size:0x14 REVISION_r = .bss:0x805B2024; // type:object size:0xC data:4byte @@ -52041,7 +52056,7 @@ sHeapList__Q23EGG4Heap = .bss:0x80673AE8; // type:object size:0xC sRootMutex__Q23EGG4Heap = .bss:0x80673AF8; // type:object size:0x18 sThreadList__Q23EGG6Thread = .bss:0x80673B10; // type:object size:0xC clear_z_tobj__29@unnamed@eggAsyncDisplay_cpp@ = .bss:0x80673B20; // type:object size:0x20 scope:local -null_controller = .bss:0x80673B40; // type:object size:0x10C0 data:4byte +null_controller__3EGG = .bss:0x80673B40; // type:object size:0x10C0 data:4byte ident__Q23EGG9Matrix34f = .bss:0x80674C00; // type:object size:0x30 zero__Q23EGG8Vector3f = .bss:0x80674C30; // type:object size:0xC align:4 data:float ...bss.0 = .bss:0x80674C30; // type:label scope:local diff --git a/configure.py b/configure.py index ff3610bd..48379a83 100644 --- a/configure.py +++ b/configure.py @@ -533,7 +533,7 @@ config.libs = [ Object(NonMatching, "d/lyt/d_lyt_util_items.cpp"), Object(Matching, "d/lyt/d_lyt_common_arrow.cpp"), Object(NonMatching, "d/lyt/d_lyt_common_title.cpp"), - Object(NonMatching, "d/lyt/d_lyt_cursor_stick.cpp"), + Object(Matching, "d/lyt/d_lyt_cursor_stick.cpp"), Object(Matching, "toBeSorted/fi_context.cpp"), Object(NonMatching, "toBeSorted/item_mdl_name.cpp"), Object(Matching, "toBeSorted/counters/counter.cpp"), diff --git a/include/d/d_cs_base.h b/include/d/d_cs_base.h index 5f39ad67..2279d268 100644 --- a/include/d/d_cs_base.h +++ b/include/d/d_cs_base.h @@ -19,7 +19,7 @@ public: virtual int execute() override; int update(); - int similarToDraw(); + bool drawDirectly(); void setField703(bool val) { field_0x703 = val; diff --git a/include/d/lyt/d_lyt_cursor_stick.h b/include/d/lyt/d_lyt_cursor_stick.h index 83836c0c..cf5703ac 100644 --- a/include/d/lyt/d_lyt_cursor_stick.h +++ b/include/d/lyt/d_lyt_cursor_stick.h @@ -3,9 +3,10 @@ #include "common.h" #include "d/lyt/d2d.h" +#include "nw4r/lyt/lyt_pane.h" #include "s/s_State.hpp" -#include "s/s_StateMgr.hpp" +/** 2D UI - element outline when selecting with cursor */ class dLytCursorStick_c { public: dLytCursorStick_c() : mStateMgr(*this, sStateID::null) { @@ -15,19 +16,35 @@ public: sInstance = nullptr; } - static dLytCursorStick_c *sInstance; + static bool build(); + static bool remove(); + static bool execute(); static bool draw(); - static bool similarToDraw(); + static bool drawDirectly(); + + bool setPriority(u8 priority); + void setTargetPane(nw4r::lyt::Pane *pane); private: + bool build_(); + bool remove_(); + bool execute_(); + bool draw_(); + bool drawDirectly_(); + static dLytCursorStick_c *sInstance; + STATE_FUNC_DECLARE(dLytCursorStick_c, Off); STATE_FUNC_DECLARE(dLytCursorStick_c, On); + void positionToTarget(); + /* 0x000 */ UI_STATE_MGR_DECLARE(dLytCursorStick_c); /* 0x03C */ d2d::ResAccIf_c mResAcc; /* 0x3AC */ d2d::dLytSub mLyt; - /* 0x440 */ d2d::AnmGroup_c mAnmGroups[1]; - /* 0x480 */ u8 field_0x480[0x49C - 0x480]; + /* 0x440 */ d2d::AnmGroup_c mAnm[1]; + /* 0x480 */ nw4r::lyt::Pane *mpPanes[5]; + /* 0x494 */ nw4r::lyt::Pane *mpTargetPane; + /* 0x498 */ bool mShouldBeOn; }; #endif diff --git a/src/d/d_cs_base.cpp b/src/d/d_cs_base.cpp index 8e2609ce..1326c80c 100644 --- a/src/d/d_cs_base.cpp +++ b/src/d/d_cs_base.cpp @@ -103,9 +103,9 @@ int dCsBase_c::update() { return execute(); } -int dCsBase_c::similarToDraw() { +bool dCsBase_c::drawDirectly() { if (field_0x704 != 1) { - return SUCCEEDED; + return true; } if (field_0x703 && lbl_80572D10 && field_0x702) { @@ -118,7 +118,7 @@ int dCsBase_c::similarToDraw() { mpCurrLyt->calc(); mpCurrLyt->draw(); } - mCursorStick.similarToDraw(); + mCursorStick.drawDirectly(); - return SUCCEEDED; + return true; } diff --git a/src/d/lyt/d_lyt_cursor_stick.cpp b/src/d/lyt/d_lyt_cursor_stick.cpp new file mode 100644 index 00000000..ab633eab --- /dev/null +++ b/src/d/lyt/d_lyt_cursor_stick.cpp @@ -0,0 +1,205 @@ +#include "d/lyt/d_lyt_cursor_stick.h" + +#include "common.h" +#include "d/d_gfx.h" +#include "m/m_vec.h" +#include "nw4r/lyt/lyt_types.h" +#include "toBeSorted/arc_managers/layout_arc_manager.h" + + +STATE_DEFINE(dLytCursorStick_c, Off); +STATE_DEFINE(dLytCursorStick_c, On); + +static const d2d::LytBrlanMapping brlanMap[] = { + {"cursorStick_00_loop.brlan", "G_loop_00"}, +}; + +#define CURSOR_STICK_ANIM_LOOP 0 +#define CURSOR_STICK_NUM_ANIMS 1 + +static const char *sPaneNames[] = { + "N_all_00", "N_RT_00", "N_LT_00", "N_LD_00", "N_RD_00", +}; + +#define CURSOR_STICK_PANE_ALL 0 +#define CURSOR_STICK_PANE_RT 1 +#define CURSOR_STICK_PANE_LT 2 +#define CURSOR_STICK_PANE_LD 3 +#define CURSOR_STICK_PANE_RD 4 +#define CURSOR_STICK_NUM_PANES 5 + +dLytCursorStick_c *dLytCursorStick_c::sInstance; + +bool dLytCursorStick_c::build() { + sInstance->build_(); + return true; +} + +bool dLytCursorStick_c::remove() { + if (sInstance != nullptr) { + sInstance->remove_(); + sInstance = nullptr; + } + return true; +} + +bool dLytCursorStick_c::execute() { + if (sInstance != nullptr) { + sInstance->execute_(); + } + return true; +} + +bool dLytCursorStick_c::draw() { + if (sInstance != nullptr) { + sInstance->draw_(); + } + return true; +} + +bool dLytCursorStick_c::drawDirectly() { + if (sInstance != nullptr) { + sInstance->drawDirectly_(); + } + return true; +} + +bool dLytCursorStick_c::build_() { + void *data = LayoutArcManager::GetInstance()->getLoadedData("CursorStick"); + mResAcc.attach(data, ""); + + mLyt.setResAcc(&mResAcc); + mLyt.build("cursorStick_00.brlyt", nullptr); + mLyt.setPriority(0x8A); + + for (int i = 0; i < CURSOR_STICK_NUM_ANIMS; i++) { + mAnm[i].init(brlanMap[i].mFile, &mResAcc, mLyt.getLayout(), brlanMap[i].mName); + mAnm[i].bind(false); + mAnm[i].setAnimEnable(false); + } + + for (int i = 0; i < CURSOR_STICK_NUM_PANES; i++) { + mpPanes[i] = mLyt.findPane(sPaneNames[i]); + } + mStateMgr.changeState(StateID_Off); + mLyt.calc(); + mShouldBeOn = false; + mpTargetPane = nullptr; + + return true; +} + +bool dLytCursorStick_c::remove_() { + for (int i = 0; i < CURSOR_STICK_NUM_ANIMS; i++) { + mAnm[i].unbind(); + mAnm[i].remove(); + } + mResAcc.detach(); + return true; +} + +bool dLytCursorStick_c::execute_() { + mStateMgr.executeState(); + if (mShouldBeOn) { + mLyt.calc(); + } + return true; +} + +bool dLytCursorStick_c::draw_() { + if (mShouldBeOn) { + mLyt.addToDrawList(); + } + return true; +} + +bool dLytCursorStick_c::drawDirectly_() { + if (mShouldBeOn) { + mLyt.draw(); + } + return true; +} + +bool dLytCursorStick_c::setPriority(u8 priority) { + mLyt.setPriority(priority); +} + +void dLytCursorStick_c::initializeState_Off() {} +void dLytCursorStick_c::executeState_Off() { + if (mShouldBeOn) { + mAnm[CURSOR_STICK_ANIM_LOOP].setAnimEnable(true); + mAnm[CURSOR_STICK_ANIM_LOOP].setFrame(0.0f); + mStateMgr.changeState(StateID_On); + } +} +void dLytCursorStick_c::finalizeState_Off() {} + +void dLytCursorStick_c::initializeState_On() {} +void dLytCursorStick_c::executeState_On() { + if (!mShouldBeOn) { + mAnm[CURSOR_STICK_ANIM_LOOP].setAnimEnable(false); + mAnm[CURSOR_STICK_ANIM_LOOP].setFrame(0.0f); + mStateMgr.changeState(StateID_Off); + } + + positionToTarget(); + + if (mAnm[CURSOR_STICK_ANIM_LOOP].isEnabled()) { + mAnm[CURSOR_STICK_ANIM_LOOP].play(); + } +} +void dLytCursorStick_c::finalizeState_On() {} + +void dLytCursorStick_c::setTargetPane(nw4r::lyt::Pane *pane) { + mpTargetPane = pane; + positionToTarget(); +} + +void dLytCursorStick_c::positionToTarget() { + if (mpTargetPane == nullptr) { + return; + } + + u8 positionV = mpTargetPane->GetPositionV(); + u8 positionH = mpTargetPane->GetPositionH(); + + nw4r::math::MTX34 mtx = mpTargetPane->GetGlobalMtx(); + + nw4r::lyt::Size size = mpTargetPane->GetSize(); + f32 halfWidthScaled = size.width / 2.0f / dGfx_c::get16x9to4x3WidthScaleF(); + + f32 posX; + f32 posY; + if (positionH == 0) { + posX = mtx._03 + halfWidthScaled; + } else if (positionH == 1) { + posX = mtx._03; + } else { + posX = mtx._03 - halfWidthScaled; + } + + if (positionV == 0) { + posY = mtx._13 - size.height / 2.0f; + } else if (positionV == 1) { + posY = mtx._13; + } else { + posY = mtx._13 + size.height / 2.0f; + } + + mVec3_c v(posX, posY, 0.0f); + mpPanes[CURSOR_STICK_PANE_ALL]->SetTranslate(v); + + v.x = -size.width / 2.0f; + v.y = size.height / 2.0f; + mpPanes[CURSOR_STICK_PANE_LT]->SetTranslate(v); + v.x = size.width / 2.0f; + v.y = size.height / 2.0f; + mpPanes[CURSOR_STICK_PANE_RT]->SetTranslate(v); + v.x = -size.width / 2.0f; + v.y = -size.height / 2.0f; + mpPanes[CURSOR_STICK_PANE_LD]->SetTranslate(v); + v.x = size.width / 2.0f; + v.y = -size.height / 2.0f; + mpPanes[CURSOR_STICK_PANE_RD]->SetTranslate(v); + mLyt.calc(); +}