summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-07-26 15:43:48 +0200
committerGitHub <noreply@github.com>2025-07-26 15:43:48 +0200
commit4ec5128eb4f6cdc8985f83f4c8b540115daf47fb (patch)
tree9b243377f73f9da40ee9854918485af84e3bb562
parent01d7ad1b4f77bc2952aa3803a8d290a49c6ac5e6 (diff)
parent0aaeb4123d09bd112a2a0b742a1bd60e236669b1 (diff)
Merge pull request #223 from robojumper/d_lyt_cursor_stick
d_lyt_cursor_stick OK
-rw-r--r--config/SOUE01/symbols.txt139
-rw-r--r--configure.py2
-rw-r--r--include/d/d_cs_base.h2
-rw-r--r--include/d/lyt/d_lyt_cursor_stick.h27
-rw-r--r--src/d/d_cs_base.cpp8
-rw-r--r--src/d/lyt/d_lyt_cursor_stick.cpp205
6 files changed, 310 insertions, 73 deletions
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();
+}