diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index 09f3713f..8ffe500f 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -360,7 +360,8 @@ d/lyt/meter/d_lyt_meter_item_select.cpp: .ctors start:0x804DB700 end:0x804DB704 .rodata start:0x804E5B28 end:0x804E5F28 .data start:0x805153A8 end:0x80516A28 - .sdata2 start:0x80579BD0 end:0x80579C08 + .sdata start:0x805723F0 end:0x80572400 + .sdata2 start:0x80579BD0 end:0x80579BF8 .bss start:0x805AACD0 end:0x805AB650 d/lyt/meter/d_lyt_meter_plus_btn.cpp: diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index aebf67a3..d163b62a 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -902,8 +902,8 @@ fn_80026D70 = .text:0x80026D70; // type:function size:0x3C fn_80026DB0 = .text:0x80026DB0; // type:function size:0xA0 fn_80026E50 = .text:0x80026E50; // type:function size:0x3C fn_80026E90 = .text:0x80026E90; // type:function size:0x3C -fn_80026ED0 = .text:0x80026ED0; // type:function size:0x3C -fn_80026F10 = .text:0x80026F10; // type:function size:0x3C +fn_80026ED0__13EffectsStructFv = .text:0x80026ED0; // type:function size:0x3C +fn_80026F10__13EffectsStructFv = .text:0x80026F10; // type:function size:0x3C fn_80026F50 = .text:0x80026F50; // type:function size:0xD8 fn_80027030 = .text:0x80027030; // type:function size:0xD8 fn_80027110 = .text:0x80027110; // type:function size:0xC8 @@ -961,13 +961,13 @@ EffectManager__dtor = .text:0x800296F0; // type:function size:0xBC fn_800297B0 = .text:0x800297B0; // type:function size:0x90 fn_80029840 = .text:0x80029840; // type:function size:0x6C fn_800298B0 = .text:0x800298B0; // type:function size:0x4 -fn_800298C0 = .text:0x800298C0; // type:function size:0x4C +fn_800298C0__13EffectsStructFUsP7mVec3_cPvPvPvPv = .text:0x800298C0; // type:function size:0x4C fn_80029910 = .text:0x80029910; // type:function size:0x4 fn_80029920 = .text:0x80029920; // type:function size:0x54 fn_80029980 = .text:0x80029980; // type:function size:0x64 fn_800299F0__13EffectsStructFUsP6mMtx_cPvPv = .text:0x800299F0; // type:function size:0x20 fn_80029A10__13EffectsStructFUsP7mVec3_cP7mAng3_cP7mVec3_cPvPv = .text:0x80029A10; // type:function size:0x54 -fn_80029A70 = .text:0x80029A70; // type:function size:0x64 +fn_80029A70__13EffectsStructFUsP7mVec3_cP7mAng3_cP7mVec3_cPvPv = .text:0x80029A70; // type:function size:0x64 fn_80029AE0 = .text:0x80029AE0; // type:function size:0x20 fn_80029B00 = .text:0x80029B00; // type:function size:0xD8 fn_80029BE0 = .text:0x80029BE0; // type:function size:0x43C @@ -2490,14 +2490,14 @@ updateCurrentSword = .text:0x8005C110; // type:function size:0x24 doesPlayerHaveSword = .text:0x8005C140; // type:function size:0x1C getSwordName = .text:0x8005C160; // type:function size:0x14 getCurrentlyEquippedShieldType = .text:0x8005C180; // type:function size:0x44 -getCurrentSlingshotType = .text:0x8005C1D0; // type:function size:0x48 -getCurrentBugNetType = .text:0x8005C220; // type:function size:0x48 -getCurrentBeetleType = .text:0x8005C270; // type:function size:0x78 -getCurrentBowType = .text:0x8005C2F0; // type:function size:0x60 +getCurrentSlingshotType__7dAcPy_cFv = .text:0x8005C1D0; // type:function size:0x48 +getCurrentBugNetType__7dAcPy_cFv = .text:0x8005C220; // type:function size:0x48 +getCurrentBeetleType__7dAcPy_cFv = .text:0x8005C270; // type:function size:0x78 +getCurrentBowType__7dAcPy_cFv = .text:0x8005C2F0; // type:function size:0x60 getCurrentMittsType = .text:0x8005C350; // type:function size:0x48 isPouchUsable = .text:0x8005C3A0; // type:function size:0x80 isInBossRushMinigameState = .text:0x8005C420; // type:function size:0x8 -isItemRestrictedByBokoBase = .text:0x8005C430; // type:function size:0xB8 +isItemRestrictedByBokoBase__7dAcPy_cF7ITEM_ID = .text:0x8005C430; // type:function size:0xB8 isItemRestricted = .text:0x8005C4F0; // type:function size:0xE0 fn_8005C5D0 = .text:0x8005C5D0; // type:function size:0x34 getLinkPtr2 = .text:0x8005C610; // type:function size:0x8 @@ -5466,7 +5466,7 @@ build__15dLytMeterABtn_cFPQ23d2d10ResAccIf_c = .text:0x800E02C0; // type:functio remove__15dLytMeterABtn_cFv = .text:0x800E04A0; // type:function size:0x58 fn_800E0500 = .text:0x800E0500; // type:function size:0x370 fn_800E0870 = .text:0x800E0870; // type:function size:0x1E4 -fn_800E0A60__10dTextBox_cFPCce = .text:0x800E0A60; // type:function size:0xA0 +setMessageWithGlobalTextProcessor2__10dTextBox_cFPCcPve = .text:0x800E0A60; // type:function size:0xA0 getName__15dLytMeterABtn_cCFv = .text:0x800E0B00; // type:function size:0x8 getLyt__15dLytMeterABtn_cFv = .text:0x800E0B10; // type:function size:0x8 getPane__15dLytMeterABtn_cFv = .text:0x800E0B20; // type:function size:0x8 @@ -5810,42 +5810,42 @@ remove__21dLytMeterItemSelect_cFv = .text:0x800EE210; // type:function size:0x10 execute__21dLytMeterItemSelect_cFv = .text:0x800EE320; // type:function size:0x123C getStateID__90sStateMgr_c<21dLytMeterItemSelect_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x800EF560; // type:function size:0x10 executeState__90sStateMgr_c<21dLytMeterItemSelect_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x800EF570; // type:function size:0x10 -fn_800EF580 = .text:0x800EF580; // type:function size:0x128 -fn_800EF6B0 = .text:0x800EF6B0; // type:function size:0x38 -fn_800EF6F0 = .text:0x800EF6F0; // type:function size:0x18 -fn_800EF710 = .text:0x800EF710; // type:function size:0x8 -relatedToBWheelDisplay = .text:0x800EF720; // type:function size:0x7C -fn_800EF7A0 = .text:0x800EF7A0; // type:function size:0x14 -fn_800EF7C0__21dLytMeterItemSelect_cFv = .text:0x800EF7C0; // type:function size:0xF8 -fn_800EF8C0__21dLytMeterItemSelect_cFUc = .text:0x800EF8C0; // type:function size:0x10C -fn_800EF9D0 = .text:0x800EF9D0; // type:function size:0x100 -fn_800EFAD0__21dLytMeterItemSelect_cFlb = .text:0x800EFAD0; // type:function size:0x200 -fn_800EFCD0 = .text:0x800EFCD0; // type:function size:0xD0 -fn_800EFDA0 = .text:0x800EFDA0; // type:function size:0x4C -fn_800EFDF0 = .text:0x800EFDF0; // type:function size:0x238 -fn_800F0030 = .text:0x800F0030; // type:function size:0x114 -fn_800F0150 = .text:0x800F0150; // type:function size:0x14 -fn_800F0170 = .text:0x800F0170; // type:function size:0x14 -fn_800F0190 = .text:0x800F0190; // type:function size:0x18 -fn_800F01B0__21dLytMeterItemSelect_cFl = .text:0x800F01B0; // type:function size:0x30 -fn_800F01E0__21dLytMeterItemSelect_cFl = .text:0x800F01E0; // type:function size:0xC -fn_800F01F0 = .text:0x800F01F0; // type:function size:0x28 -fn_800F0220 = .text:0x800F0220; // type:function size:0xC8 -fn_800F02F0 = .text:0x800F02F0; // type:function size:0x14 -fn_800F0310 = .text:0x800F0310; // type:function size:0x128 -fn_800F0440__21dLytMeterItemSelect_cFl = .text:0x800F0440; // type:function size:0x23C -fn_800F0680__21dLytMeterItemSelect_cFUc = .text:0x800F0680; // type:function size:0x78 -fn_800F0700__21dLytMeterItemSelect_cFv = .text:0x800F0700; // type:function size:0xC8 -fn_800F07D0__21dLytMeterItemSelect_cFl = .text:0x800F07D0; // type:function size:0xD4 -fn_800F08B0 = .text:0x800F08B0; // type:function size:0xD4 -fn_800F0990__21dLytMeterItemSelect_cFUc = .text:0x800F0990; // type:function size:0x44 -fn_800F09E0__21dLytMeterItemSelect_cFv = .text:0x800F09E0; // type:function size:0xBC -fn_800F0AA0 = .text:0x800F0AA0; // type:function size:0x8 -checkRollercoasterMinigameState = .text:0x800F0AB0; // type:function size:0x8 -fn_800F0AC0 = .text:0x800F0AC0; // type:function size:0xA8 -fn_800F0B70 = .text:0x800F0B70; // type:function size:0x8 -fn_800F0B80 = .text:0x800F0B80; // type:function size:0x8 -fn_800F0B90 = .text:0x800F0B90; // type:function size:0x8 +fn_800EF580__21dLytMeterItemSelect_cFv = .text:0x800EF580; // type:function size:0x128 +fn_800EF6B0__21dLytMeterItemSelect_cFUc = .text:0x800EF6B0; // type:function size:0x38 +setOwnerPane__21dLytMeterItemSelect_cFPQ34nw4r3lyt4Pane = .text:0x800EF6F0; // type:function size:0x18 +fn_800EF710__21dLytMeterItemSelect_cFUc = .text:0x800EF710; // type:function size:0x8 +fn_800EF720__21dLytMeterItemSelect_cFl = .text:0x800EF720; // type:function size:0x7C +fn_800EF7A0__21dLytMeterItemSelect_cFbl = .text:0x800EF7A0; // type:function size:0x14 +realizeSelectedWheelItem__21dLytMeterItemSelect_cFv = .text:0x800EF7C0; // type:function size:0xF8 +fn_800EF8C0__21dLytMeterItemSelect_cFb = .text:0x800EF8C0; // type:function size:0x10C +realizeWheelNumberForLytIndex__21dLytMeterItemSelect_cFll = .text:0x800EF9D0; // type:function size:0x100 +realizeBtnNumberForLytIndex__21dLytMeterItemSelect_cFlb = .text:0x800EFAD0; // type:function size:0x200 +sprintf__16SizedWString<32>FPCwe = .text:0x800EFCD0; // type:function size:0xD0 +realizeWheelNumberVForLytIndex__21dLytMeterItemSelect_cFll = .text:0x800EFDA0; // type:function size:0x4C +fn_800EFDF0__21dLytMeterItemSelect_cCFb = .text:0x800EFDF0; // type:function size:0x238 +fn_800F0030__21dLytMeterItemSelect_cCFv = .text:0x800F0030; // type:function size:0x114 +getBaseItemForBWheelSlot__21dLytMeterItemSelect_cFl = .text:0x800F0150; // type:function size:0x14 +fn_800F0170__21dLytMeterItemSelect_cCFl = .text:0x800F0170; // type:function size:0x14 +fn_800F0190__21dLytMeterItemSelect_cCFl = .text:0x800F0190; // type:function size:0x18 +fn_800F01B0__21dLytMeterItemSelect_cCFl = .text:0x800F01B0; // type:function size:0x30 +fn_800F01E0__21dLytMeterItemSelect_cCFl = .text:0x800F01E0; // type:function size:0xC +isSlotBocoburinLocked__21dLytMeterItemSelect_cFl = .text:0x800F01F0; // type:function size:0x28 +fn_800F0220__21dLytMeterItemSelect_cFl = .text:0x800F0220; // type:function size:0xC8 +fn_800F02F0__21dLytMeterItemSelect_cCFv = .text:0x800F02F0; // type:function size:0x14 +fn_800F0310__21dLytMeterItemSelect_cFv = .text:0x800F0310; // type:function size:0x128 +setBtnText__21dLytMeterItemSelect_cFl = .text:0x800F0440; // type:function size:0x23C +setBtnItem__21dLytMeterItemSelect_cFl = .text:0x800F0680; // type:function size:0x78 +realizeWheelItems__21dLytMeterItemSelect_cFv = .text:0x800F0700; // type:function size:0xC8 +baseItemLytIndexToCurrentVariant__21dLytMeterItemSelect_cCFl = .text:0x800F07D0; // type:function size:0xD4 +baseItemIdToCurrentVariant__21dLytMeterItemSelect_cCF7ITEM_ID = .text:0x800F08B0; // type:function size:0xD4 +getBaseItemLytIndexforUnkId__21dLytMeterItemSelect_cCFl = .text:0x800F0990; // type:function size:0x44 +isWheelBlockedByCurrentAction__21dLytMeterItemSelect_cFv = .text:0x800F09E0; // type:function size:0xBC +isInSpiralChargeTutorialMinigame__21dLytMeterItemSelect_cFv = .text:0x800F0AA0; // type:function size:0x8 +isInRollercoasterMinigame__21dLytMeterItemSelect_cFv = .text:0x800F0AB0; // type:function size:0x8 +setCurrentItemText__21dLytMeterItemSelect_cF7ITEM_ID = .text:0x800F0AC0; // type:function size:0xA8 +getName__21dLytMeterItemSelect_cCFv = .text:0x800F0B70; // type:function size:0x8 +getLyt__21dLytMeterItemSelect_cFv = .text:0x800F0B80; // type:function size:0x8 +getPane__21dLytMeterItemSelect_cFv = .text:0x800F0B90; // type:function size:0x8 build__37sFStateFct_c<21dLytMeterItemSelect_c>FRC12sStateIDIf_c = .text:0x800F0BA0; // type:function size:0x60 dispose__37sFStateFct_c<21dLytMeterItemSelect_c>FRP10sStateIf_c = .text:0x800F0C00; // type:function size:0xC build__40sFStateFct_c<24dLytMeterItemSelectBtn_c>FRC12sStateIDIf_c = .text:0x800F0C10; // type:function size:0x60 @@ -5920,7 +5920,7 @@ initializeState__39sFStateID_c<24dLytMeterItemSelectBtn_c>CFR24dLytMeterItemSele finalizeState__36sFStateID_c<21dLytMeterItemSelect_c>CFR21dLytMeterItemSelect_c = .text:0x800F1410; // type:function size:0x30 executeState__36sFStateID_c<21dLytMeterItemSelect_c>CFR21dLytMeterItemSelect_c = .text:0x800F1440; // type:function size:0x30 initializeState__36sFStateID_c<21dLytMeterItemSelect_c>CFR21dLytMeterItemSelect_c = .text:0x800F1470; // type:function size:0x30 -__sinit_\d_lyt_meter_item_select_cpp = .text:0x800F14A0; // type:function size:0x1C60 +__sinit_\d_lyt_meter_item_select_cpp = .text:0x800F14A0; // type:function size:0x1C60 scope:local __dt__40sFStateID_c<25dLytMeterItemSelectIcon_c>Fv = .text:0x800F3100; // type:function size:0x58 __dt__41sFStateID_c<26dLytMeterItemSelectBlink_c>Fv = .text:0x800F3160; // type:function size:0x58 __dt__40sFStateID_c<25dLytMeterItemSelectText_c>Fv = .text:0x800F31C0; // type:function size:0x58 @@ -12385,7 +12385,7 @@ fn_80202D50 = .text:0x80202D50; // type:function size:0x8 fn_80202D60 = .text:0x80202D60; // type:function size:0x8 fn_80202D70 = .text:0x80202D70; // type:function size:0x8 fn_80202D80 = .text:0x80202D80; // type:function size:0x8 -fn_80202D90 = .text:0x80202D90; // type:function size:0x48 +fn_80202D90__7dAcPy_cFb = .text:0x80202D90; // type:function size:0x48 ActorLink__getTotalNumberOfBombs = .text:0x80202DE0; // type:function size:0x4 ActorLink__changeBombCounterAndPouch = .text:0x80202DF0; // type:function size:0x8 fn_80202E00 = .text:0x80202E00; // type:function size:0x7C @@ -13563,13 +13563,13 @@ getTotalArrowCount__9dAcItem_cFv = .text:0x80251EE0; // type:function size:0x38 changeArrowCounter = .text:0x80251F20; // type:function size:0xC AddOrRemoveArrows = .text:0x80251F30; // type:function size:0x9C AcItem__getMaxNumberOfArrows = .text:0x80251FD0; // type:function size:0x8 -getCurrentTotalArrowCapacity = .text:0x80251FE0; // type:function size:0x38 +getTotalArrowCapacity__9dAcItem_cFv = .text:0x80251FE0; // type:function size:0x38 getBombsCounter = .text:0x80252020; // type:function size:0x8 getTotalBombCount__9dAcItem_cFv = .text:0x80252030; // type:function size:0x38 changeBombCounter = .text:0x80252070; // type:function size:0xC changeBombCounterAndPouch = .text:0x80252080; // type:function size:0x9C getMaxStandardBombCapacity = .text:0x80252120; // type:function size:0x8 -getCurrentTotalBombCapacity = .text:0x80252130; // type:function size:0x38 +getTotalBombCapacity__9dAcItem_cFv = .text:0x80252130; // type:function size:0x38 getCurrentTearCount = .text:0x80252170; // type:function size:0x8 AcItem__incrementTearCount = .text:0x80252180; // type:function size:0xC getMaxTearCount = .text:0x80252190; // type:function size:0x8 @@ -13578,7 +13578,7 @@ getTotalSeedCount__9dAcItem_cFv = .text:0x802521B0; // type:function size:0x38 AcItem__changeSlingshotSeedCount = .text:0x802521F0; // type:function size:0xC addDekuSeeds = .text:0x80252200; // type:function size:0x9C AcItem__getMaxNumberOfSlingshotSeeds = .text:0x802522A0; // type:function size:0x8 -getCurrentTotalSlingshotSeedCapacity = .text:0x802522B0; // type:function size:0x38 +getTotalSeedCapacity__9dAcItem_cFv = .text:0x802522B0; // type:function size:0x38 getKeyPieceCount = .text:0x802522F0; // type:function size:0x8 increaseKeyPieceCounter = .text:0x80252300; // type:function size:0xC getSmallKeyCounter = .text:0x80252310; // type:function size:0x8 @@ -28254,7 +28254,7 @@ lbl_804E5B48 = .rodata:0x804E5B48; // type:object size:0x110 data:4byte lbl_804E5C58 = .rodata:0x804E5C58; // type:object size:0x20 lbl_804E5C78 = .rodata:0x804E5C78; // type:object size:0x260 lbl_804E5ED8 = .rodata:0x804E5ED8; // type:object size:0x20 data:4byte -lbl_804E5EF8 = .rodata:0x804E5EF8; // type:object size:0x30 +lbl_804E5EF8 = .rodata:0x804E5EF8; // type:object size:0x2C lbl_804E5F28 = .rodata:0x804E5F28; // type:object size:0x18 data:4byte lbl_804E5F40 = .rodata:0x804E5F40; // type:object size:0x260 lbl_804E61A0 = .rodata:0x804E61A0; // type:object size:0x108 data:4byte @@ -31390,84 +31390,84 @@ lbl_80515208 = .data:0x80515208; // type:object size:0x10 lbl_80515218 = .data:0x80515218; // type:object size:0x10 __vt__17dLytMeterNunStk_c = .data:0x80515228; // type:object size:0x14C __vt__32sFStateID_c<17dLytMeterNunStk_c> = .data:0x80515374; // type:object size:0x34 -lbl_805153A8 = .data:0x805153A8; // type:object size:0x10 -lbl_805153B8 = .data:0x805153B8; // type:object size:0x10 -lbl_805153C8 = .data:0x805153C8; // type:object size:0x10 +lbl_805153A8 = .data:0x805153A8; // type:object size:0xF data:string +lbl_805153B8 = .data:0x805153B8; // type:object size:0xF data:string +lbl_805153C8 = .data:0x805153C8; // type:object size:0xA data:string lbl_805153D8 = .data:0x805153D8; // type:object size:0x10 data:string lbl_805153E8 = .data:0x805153E8; // type:object size:0xC data:string -lbl_805153F4 = .data:0x805153F4; // type:object size:0xC -lbl_80515400 = .data:0x80515400; // type:object size:0xC -lbl_8051540C = .data:0x8051540C; // type:object size:0xC -lbl_80515418 = .data:0x80515418; // type:object size:0xC -lbl_80515424 = .data:0x80515424; // type:object size:0xC -lbl_80515430 = .data:0x80515430; // type:object size:0xC -lbl_8051543C = .data:0x8051543C; // type:object size:0xC -lbl_80515448 = .data:0x80515448; // type:object size:0xC -lbl_80515454 = .data:0x80515454; // type:object size:0xC -lbl_80515460 = .data:0x80515460; // type:object size:0xC -lbl_8051546C = .data:0x8051546C; // type:object size:0xC -lbl_80515478 = .data:0x80515478; // type:object size:0x50 -lbl_805154C8 = .data:0x805154C8; // type:object size:0x18 -lbl_805154E0 = .data:0x805154E0; // type:object size:0xC -lbl_805154EC = .data:0x805154EC; // type:object size:0x1C -lbl_80515508 = .data:0x80515508; // type:object size:0xC -lbl_80515514 = .data:0x80515514; // type:object size:0xC -lbl_80515520 = .data:0x80515520; // type:object size:0xC -lbl_8051552C = .data:0x8051552C; // type:object size:0xC -lbl_80515538 = .data:0x80515538; // type:object size:0xC -lbl_80515544 = .data:0x80515544; // type:object size:0xC -lbl_80515550 = .data:0x80515550; // type:object size:0xC -lbl_8051555C = .data:0x8051555C; // type:object size:0xC -lbl_80515568 = .data:0x80515568; // type:object size:0xC -lbl_80515574 = .data:0x80515574; // type:object size:0xC -lbl_80515580 = .data:0x80515580; // type:object size:0x20 +lbl_805153F4 = .data:0x805153F4; // type:object size:0xA data:string +lbl_80515400 = .data:0x80515400; // type:object size:0xB data:string +lbl_8051540C = .data:0x8051540C; // type:object size:0x9 data:string +lbl_80515418 = .data:0x80515418; // type:object size:0xB data:string +lbl_80515424 = .data:0x80515424; // type:object size:0xB data:string +lbl_80515430 = .data:0x80515430; // type:object size:0xB data:string +lbl_8051543C = .data:0x8051543C; // type:object size:0xB data:string +lbl_80515448 = .data:0x80515448; // type:object size:0xB data:string +lbl_80515454 = .data:0x80515454; // type:object size:0xB data:string +lbl_80515460 = .data:0x80515460; // type:object size:0xB data:string +lbl_8051546C = .data:0x8051546C; // type:object size:0xB data:string +lbl_80515478 = .data:0x80515478; // type:object size:0xB data:string +lbl_805154C8 = .data:0x805154C8; // type:object size:0x17 data:string +lbl_805154E0 = .data:0x805154E0; // type:object size:0xB data:string +lbl_805154EC = .data:0x805154EC; // type:object size:0x1A data:string +lbl_80515508 = .data:0x80515508; // type:object size:0xB data:string +lbl_80515514 = .data:0x80515514; // type:object size:0xB data:string +lbl_80515520 = .data:0x80515520; // type:object size:0xB data:string +lbl_8051552C = .data:0x8051552C; // type:object size:0xB data:string +lbl_80515538 = .data:0x80515538; // type:object size:0xB data:string +lbl_80515544 = .data:0x80515544; // type:object size:0xB data:string +lbl_80515550 = .data:0x80515550; // type:object size:0xB data:string +lbl_8051555C = .data:0x8051555C; // type:object size:0xB data:string +lbl_80515568 = .data:0x80515568; // type:object size:0xA data:string +lbl_80515574 = .data:0x80515574; // type:object size:0xA data:string +lbl_80515580 = .data:0x80515580; // type:object size:0x19 data:string lbl_805155A0 = .data:0x805155A0; // type:object size:0x20 data:string -lbl_805155C0 = .data:0x805155C0; // type:object size:0x14 -lbl_805155D4 = .data:0x805155D4; // type:object size:0x24 +lbl_805155C0 = .data:0x805155C0; // type:object size:0x11 data:string +lbl_805155D4 = .data:0x805155D4; // type:object size:0x1F data:string lbl_805155F8 = .data:0x805155F8; // type:object size:0x10 data:string -lbl_80515608 = .data:0x80515608; // type:object size:0x20 -lbl_80515628 = .data:0x80515628; // type:object size:0x10 -lbl_80515638 = .data:0x80515638; // type:object size:0x1C +lbl_80515608 = .data:0x80515608; // type:object size:0x1E data:string +lbl_80515628 = .data:0x80515628; // type:object size:0xF data:string +lbl_80515638 = .data:0x80515638; // type:object size:0x1B data:string lbl_80515654 = .data:0x80515654; // type:object size:0xC data:string lbl_80515660 = .data:0x80515660; // type:object size:0x1C data:string -lbl_8051567C = .data:0x8051567C; // type:object size:0x14 +lbl_8051567C = .data:0x8051567C; // type:object size:0xD data:string lbl_80515690 = .data:0x80515690; // type:object size:0x18 data:string -lbl_805156A8 = .data:0x805156A8; // type:object size:0x1C -lbl_805156C4 = .data:0x805156C4; // type:object size:0x20 -lbl_805156E4 = .data:0x805156E4; // type:object size:0x10 -lbl_805156F4 = .data:0x805156F4; // type:object size:0x1C +lbl_805156A8 = .data:0x805156A8; // type:object size:0x1A data:string +lbl_805156C4 = .data:0x805156C4; // type:object size:0x1E data:string +lbl_805156E4 = .data:0x805156E4; // type:object size:0xF data:string +lbl_805156F4 = .data:0x805156F4; // type:object size:0x1B data:string lbl_80515710 = .data:0x80515710; // type:object size:0xC data:string -lbl_8051571C = .data:0x8051571C; // type:object size:0x1C -lbl_80515738 = .data:0x80515738; // type:object size:0xC -lbl_80515744 = .data:0x80515744; // type:object size:0x1C -lbl_80515760 = .data:0x80515760; // type:object size:0xC -lbl_8051576C = .data:0x8051576C; // type:object size:0x1C -lbl_80515788 = .data:0x80515788; // type:object size:0xC -lbl_80515794 = .data:0x80515794; // type:object size:0xC -lbl_805157A0 = .data:0x805157A0; // type:object size:0xC -lbl_805157AC = .data:0x805157AC; // type:object size:0xC +lbl_8051571C = .data:0x8051571C; // type:object size:0x19 data:string +lbl_80515738 = .data:0x80515738; // type:object size:0xA data:string +lbl_80515744 = .data:0x80515744; // type:object size:0x19 data:string +lbl_80515760 = .data:0x80515760; // type:object size:0xA data:string +lbl_8051576C = .data:0x8051576C; // type:object size:0x1A data:string +lbl_80515788 = .data:0x80515788; // type:object size:0xB data:string +lbl_80515794 = .data:0x80515794; // type:object size:0xB data:string +lbl_805157A0 = .data:0x805157A0; // type:object size:0xB data:string +lbl_805157AC = .data:0x805157AC; // type:object size:0xB data:string lbl_805157B8 = .data:0x805157B8; // type:object size:0xC data:string -lbl_805157C4 = .data:0x805157C4; // type:object size:0x10 -lbl_805157D4 = .data:0x805157D4; // type:object size:0x10 -lbl_805157E4 = .data:0x805157E4; // type:object size:0x10 -lbl_805157F4 = .data:0x805157F4; // type:object size:0xC -lbl_80515800 = .data:0x80515800; // type:object size:0xC -lbl_8051580C = .data:0x8051580C; // type:object size:0x10 -lbl_8051581C = .data:0x8051581C; // type:object size:0x10 -lbl_8051582C = .data:0x8051582C; // type:object size:0xC -lbl_80515838 = .data:0x80515838; // type:object size:0x38 -lbl_80515870 = .data:0x80515870; // type:object size:0xC -lbl_8051587C = .data:0x8051587C; // type:object size:0xC -lbl_80515888 = .data:0x80515888; // type:object size:0xC -lbl_80515894 = .data:0x80515894; // type:object size:0x1C -lbl_805158B0 = .data:0x805158B0; // type:object size:0x20 +lbl_805157C4 = .data:0x805157C4; // type:object size:0xD data:string +lbl_805157D4 = .data:0x805157D4; // type:object size:0xD data:string +lbl_805157E4 = .data:0x805157E4; // type:object size:0xD data:string +lbl_805157F4 = .data:0x805157F4; // type:object size:0xA data:string +lbl_80515800 = .data:0x80515800; // type:object size:0xB data:string +lbl_8051580C = .data:0x8051580C; // type:object size:0xE data:string +lbl_8051581C = .data:0x8051581C; // type:object size:0xF data:string +lbl_8051582C = .data:0x8051582C; // type:object size:0xA data:string +lbl_80515838 = .data:0x80515838; // type:object size:0xB data:string +lbl_80515870 = .data:0x80515870; // type:object size:0x9 data:string +lbl_8051587C = .data:0x8051587C; // type:object size:0x9 data:string +lbl_80515888 = .data:0x80515888; // type:object size:0x9 data:string +lbl_80515894 = .data:0x80515894; // type:object size:0x9 data:string +lbl_805158B0 = .data:0x805158B0; // type:object size:0x9 data:string lbl_805158D0 = .data:0x805158D0; // type:object size:0x10 data:string lbl_805158E0 = .data:0x805158E0; // type:object size:0x20 lbl_80515900 = .data:0x80515900; // type:object size:0x20 -lbl_80515920 = .data:0x80515920; // type:object size:0x10 -lbl_80515930 = .data:0x80515930; // type:object size:0x10 -lbl_80515940 = .data:0x80515940; // type:object size:0x10 -__vt__21dLytMeterItemSelect_c = .data:0x80515950; // type:object size:0x38 +lbl_80515920 = .data:0x80515920; // type:object size:0xE data:string +lbl_80515930 = .data:0x80515930; // type:object size:0xD data:string +lbl_80515940 = .data:0x80515940; // type:object size:0xF data:string +__vt__21dLytMeterItemSelect_c = .data:0x80515950; // type:object size:0x34 __vt__60sFStateMgr_c<21dLytMeterItemSelect_c,20sStateMethodUsr_FI_c> = .data:0x80515988; // type:object size:0x30 __vt__90sStateMgr_c<21dLytMeterItemSelect_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x805159B8; // type:object size:0x30 __vt__37sFStateFct_c<21dLytMeterItemSelect_c> = .data:0x805159E8; // type:object size:0x14 @@ -33339,7 +33339,6 @@ __vt__56sFStateMgr_c<17dLytCommonArrow_c,20sStateMethodUsr_FI_c> = .data:0x80527 __vt__86sStateMgr_c<17dLytCommonArrow_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x80527418; // type:object size:0x30 scope:weak __vt__33sFStateFct_c<17dLytCommonArrow_c> = .data:0x80527448; // type:object size:0x14 scope:weak __vt__30sFState_c<17dLytCommonArrow_c> = .data:0x80527460; // type:object size:0x18 scope:weak -__vt__17dCursorHitCheck_c = .data:0x80527478; // type:object size:0x10 scope:weak @8395 = .data:0x805274B4; // type:object size:0xC scope:local @8396 = .data:0x805274C0; // type:object size:0xC scope:local @8397 = .data:0x805274CC; // type:object size:0xC scope:local @@ -38142,8 +38141,8 @@ lbl_805723D8 = .sdata:0x805723D8; // type:object size:0x8 data:4byte lbl_805723E0 = .sdata:0x805723E0; // type:object size:0x8 data:4byte lbl_805723E8 = .sdata:0x805723E8; // type:object size:0x8 data:4byte lbl_805723F0 = .sdata:0x805723F0; // type:object size:0x4 data:4byte -lbl_805723F4 = .sdata:0x805723F4; // type:object size:0x8 -lbl_805723FC = .sdata:0x805723FC; // type:object size:0x4 +lbl_805723F4 = .sdata:0x805723F4; // type:object size:0x6 data:wstring +lbl_805723FC = .sdata:0x805723FC; // type:object size:0x2 lbl_80572400 = .sdata:0x80572400; // type:object size:0x8 data:4byte lbl_80572408 = .sdata:0x80572408; // type:object size:0x8 data:4byte lbl_80572410 = .sdata:0x80572410; // type:object size:0x8 data:4byte @@ -40260,7 +40259,7 @@ sDoSomethingWithFileAOnTransition__9dScGame_c = .sbss:0x8057579F; // type:object sPreventClearingSomeFlag__9dScGame_c = .sbss:0x805757A0; // type:object size:0x1 data:byte sInstance__9dCsBase_c = .sbss:0x805757A8; // type:object size:0x8 data:4byte C_GAME = .sbss:0x805757B0; // type:object size:0x8 data:4byte -LINK_PTR2 = .sbss:0x805757B8; // type:object size:0x4 data:4byte +LINK2__7dAcPy_c = .sbss:0x805757B8; // type:object size:0x4 data:4byte lbl_805757BC = .sbss:0x805757BC; // type:object size:0x1 data:byte lbl_805757C0 = .sbss:0x805757C0; // type:object size:0x4 data:float lbl_805757C4 = .sbss:0x805757C4; // type:object size:0x2 data:2byte @@ -48674,37 +48673,37 @@ LytMeterNunStk__STATE_WAIT = .bss:0x805AABE0; // type:object size:0x40 data:4byt LytMeterNunStk__STATE_ON = .bss:0x805AAC20; // type:object size:0x40 data:4byte LytMeterNunStk__STATE_ACTIVE = .bss:0x805AAC60; // type:object size:0x40 data:4byte LytMeterNunStk__STATE_OFF = .bss:0x805AACA0; // type:object size:0x30 data:4byte -lbl_805AACD0 = .bss:0x805AACD0; // type:object size:0x10 -LytMeterItemSelectIcon__STATE_WAIT = .bss:0x805AACE0; // type:object size:0x40 data:4byte -LytMeterItemSelectIcon__STATE_ON = .bss:0x805AAD20; // type:object size:0x40 data:4byte -LytMeterItemSelectIcon__STATE_SELECT = .bss:0x805AAD60; // type:object size:0x40 data:4byte -LytMeterItemSelectIcon__STATE_OFF = .bss:0x805AADA0; // type:object size:0x40 data:4byte -LytMeterItemSelectBlink__STATE_WAIT = .bss:0x805AADE0; // type:object size:0x40 data:4byte -LytMeterItemSelectBlink__STATE_ON = .bss:0x805AAE20; // type:object size:0x40 data:4byte -LytMeterItemSelectBlink__STATE_SELECT = .bss:0x805AAE60; // type:object size:0x40 data:4byte -LytMeterItemSelectBlink__STATE_OFF = .bss:0x805AAEA0; // type:object size:0x40 data:4byte -LytMeterItemSelectText__STATE_WAIT = .bss:0x805AAEE0; // type:object size:0x40 data:4byte -LytMeterItemSelectText__STATE_ON = .bss:0x805AAF20; // type:object size:0x40 data:4byte -LytMeterItemSelectText__STATE_SELECT = .bss:0x805AAF60; // type:object size:0x40 data:4byte -LytMeterItemSelectText__STATE_OFF = .bss:0x805AAFA0; // type:object size:0x40 data:4byte -LytMeterItemSelectBtn__STATE_INVISIBLE = .bss:0x805AAFE0; // type:object size:0x40 data:4byte -LytMeterItemSelectBtn__STATE_ON = .bss:0x805AB020; // type:object size:0x40 data:4byte -LytMeterItemSelectBtn__STATE_VISIBLE = .bss:0x805AB060; // type:object size:0x40 data:4byte -LytMeterItemSelectBtn__STATE_OFF = .bss:0x805AB0A0; // type:object size:0x40 data:4byte -LytMeterItemSelect__STATE_INIT_WAIT = .bss:0x805AB0E0; // type:object size:0x40 data:4byte -LytMeterItemSelect__LytMeterItemSelect__STATE_WAIT = .bss:0x805AB120; // type:object size:0x80 data:4byte -LytMeterItemSelect__STATE_SELECT = .bss:0x805AB1A0; // type:object size:0x40 data:4byte -LytMeterItemSelect__STATE_SET_IN = .bss:0x805AB1E0; // type:object size:0x40 data:4byte -LytMeterItemSelect__STATE_SET_SPECIAL_ITEM_IN = .bss:0x805AB220; // type:object size:0x40 data:4byte -LytMeterItemSelect__STATE_SET = .bss:0x805AB260; // type:object size:0x80 data:4byte -LytMeterItemSelect__STATE_SET_NONE = .bss:0x805AB2E0; // type:object size:0x40 data:4byte -LytMeterItemSelect__STATE_SELECT_OUT = .bss:0x805AB320; // type:object size:0x80 data:4byte -LytMeterItemSelect__STATE_RESET = .bss:0x805AB3A0; // type:object size:0x40 data:4byte -LytMeterItemSelect__STATE_RESET_OUT = .bss:0x805AB3E0; // type:object size:0xC0 data:4byte -LytMeterItemSelect__STATE_UNUSE = .bss:0x805AB4A0; // type:object size:0x80 data:4byte -LytMeterItemSelect__STATE_DEMO_OUT_0 = .bss:0x805AB520; // type:object size:0x40 data:4byte -LytMeterItemSelect__STATE_DEMO_OUT_1 = .bss:0x805AB560; // type:object size:0x80 data:4byte -LytMeterItemSelect__STATE_FRAME_OFF_MOVE = .bss:0x805AB5E0; // type:object size:0x40 data:4byte +lbl_805AACD0 = .bss:0x805AACD0; // type:object size:0xC +LytMeterItemSelectIcon__STATE_WAIT = .bss:0x805AACE0; // type:object size:0x30 data:4byte +LytMeterItemSelectIcon__STATE_ON = .bss:0x805AAD20; // type:object size:0x30 data:4byte +LytMeterItemSelectIcon__STATE_SELECT = .bss:0x805AAD60; // type:object size:0x30 data:4byte +LytMeterItemSelectIcon__STATE_OFF = .bss:0x805AADA0; // type:object size:0x30 data:4byte +LytMeterItemSelectBlink__STATE_WAIT = .bss:0x805AADE0; // type:object size:0x30 data:4byte +LytMeterItemSelectBlink__STATE_ON = .bss:0x805AAE20; // type:object size:0x30 data:4byte +LytMeterItemSelectBlink__STATE_SELECT = .bss:0x805AAE60; // type:object size:0x30 data:4byte +LytMeterItemSelectBlink__STATE_OFF = .bss:0x805AAEA0; // type:object size:0x30 data:4byte +LytMeterItemSelectText__STATE_WAIT = .bss:0x805AAEE0; // type:object size:0x30 data:4byte +LytMeterItemSelectText__STATE_ON = .bss:0x805AAF20; // type:object size:0x30 data:4byte +LytMeterItemSelectText__STATE_SELECT = .bss:0x805AAF60; // type:object size:0x30 data:4byte +LytMeterItemSelectText__STATE_OFF = .bss:0x805AAFA0; // type:object size:0x30 data:4byte +LytMeterItemSelectBtn__STATE_INVISIBLE = .bss:0x805AAFE0; // type:object size:0x30 data:4byte +LytMeterItemSelectBtn__STATE_ON = .bss:0x805AB020; // type:object size:0x30 data:4byte +LytMeterItemSelectBtn__STATE_VISIBLE = .bss:0x805AB060; // type:object size:0x30 data:4byte +LytMeterItemSelectBtn__STATE_OFF = .bss:0x805AB0A0; // type:object size:0x30 data:4byte +LytMeterItemSelect__STATE_INIT_WAIT = .bss:0x805AB0E0; // type:object size:0x30 data:4byte +LytMeterItemSelect__LytMeterItemSelect__STATE_WAIT = .bss:0x805AB120; // type:object size:0x30 data:4byte +LytMeterItemSelect__STATE_SELECT = .bss:0x805AB1A0; // type:object size:0x30 data:4byte +LytMeterItemSelect__STATE_SET_IN = .bss:0x805AB1E0; // type:object size:0x30 data:4byte +LytMeterItemSelect__STATE_SET_SPECIAL_ITEM_IN = .bss:0x805AB220; // type:object size:0x30 data:4byte +LytMeterItemSelect__STATE_SET = .bss:0x805AB260; // type:object size:0x30 data:4byte +LytMeterItemSelect__STATE_SET_NONE = .bss:0x805AB2E0; // type:object size:0x30 data:4byte +LytMeterItemSelect__STATE_SELECT_OUT = .bss:0x805AB320; // type:object size:0x30 data:4byte +LytMeterItemSelect__STATE_RESET = .bss:0x805AB3A0; // type:object size:0x30 data:4byte +LytMeterItemSelect__STATE_RESET_OUT = .bss:0x805AB3E0; // type:object size:0x30 data:4byte +LytMeterItemSelect__STATE_UNUSE = .bss:0x805AB4A0; // type:object size:0x30 data:4byte +LytMeterItemSelect__STATE_DEMO_OUT_0 = .bss:0x805AB520; // type:object size:0x30 data:4byte +LytMeterItemSelect__STATE_DEMO_OUT_1 = .bss:0x805AB560; // type:object size:0x30 data:4byte +LytMeterItemSelect__STATE_FRAME_OFF_MOVE = .bss:0x805AB5E0; // type:object size:0x30 data:4byte LytMeterItemSelect__STATE_FRAME_OFF_OUT = .bss:0x805AB620; // type:object size:0x30 data:4byte lbl_805AB650 = .bss:0x805AB650; // type:object size:0x10 LytMeterPlusBtn__STATE_WAIT = .bss:0x805AB660; // type:object size:0x40 data:4byte diff --git a/configure.py b/configure.py index 2af65881..48daa2ad 100644 --- a/configure.py +++ b/configure.py @@ -393,7 +393,7 @@ config.libs = [ Object(NonMatching, "d/lyt/meter/d_lyt_meter_remocon_bg.cpp"), Object(NonMatching, "d/lyt/meter/d_lyt_meter_nunchaku_bg.cpp"), Object(NonMatching, "d/lyt/meter/d_lyt_meter_nun_stk.cpp"), - Object(NonMatching, "d/lyt/meter/d_lyt_meter_item_select.cpp"), + Object(Matching, "d/lyt/meter/d_lyt_meter_item_select.cpp"), Object(NonMatching, "d/lyt/meter/d_lyt_meter_plus_btn.cpp"), Object(NonMatching, "d/lyt/meter/d_lyt_meter_minus_btn.cpp"), Object(NonMatching, "d/lyt/meter/d_lyt_meter_cross_btn.cpp"), diff --git a/include/d/a/d_a_item.h b/include/d/a/d_a_item.h index 35e71c7b..bfce4cac 100644 --- a/include/d/a/d_a_item.h +++ b/include/d/a/d_a_item.h @@ -51,9 +51,13 @@ public: void getItemFromBWheelItem(); bool isStateWait(); - static int getTotalBombCount(); - static int getTotalArrowCount(); - static int getTotalSeedCount(); + static s32 getTotalBombCount(); + static s32 getTotalArrowCount(); + static s32 getTotalSeedCount(); + + static s32 getTotalBombCapacity(); + static s32 getTotalSeedCapacity(); + static s32 getTotalArrowCapacity(); static bool isRupee(ITEM_ID item); static bool isKeyPiece(ITEM_ID item); diff --git a/include/d/a/d_a_itembase.h b/include/d/a/d_a_itembase.h index 79bee679..70950f06 100644 --- a/include/d/a/d_a_itembase.h +++ b/include/d/a/d_a_itembase.h @@ -109,7 +109,7 @@ enum ITEM_ID { /* 0x066 */ ITEM_TREASURE_MEDAL = 102, /* 0x067 */ ITEM_POTION_MEDAL = 103, /* 0x068 */ ITEM_CURSED_MEDAL = 104, - /* 0x069 */ ITEM_SCATTERSHOT = 105, + /* 0x069 */ ITEM_MIGHTY_SCATTERSHOT = 105, /* 0x06A */ ITEM_UNK_106 = 106, /* 0x06B */ ITEM_UNK_107 = 107, /* 0x06C */ ITEM_MEDIUM_WALLET = 108, diff --git a/include/d/a/d_a_player.h b/include/d/a/d_a_player.h index 3bb8fc97..d3b88a9b 100644 --- a/include/d/a/d_a_player.h +++ b/include/d/a/d_a_player.h @@ -3,6 +3,7 @@ #include "common.h" #include "d/a/d_a_base.h" +#include "d/a/d_a_itembase.h" #include "d/a/obj/d_a_obj_base.h" #include "m/m_allocator.h" #include "m/m_angle.h" @@ -61,6 +62,7 @@ public: void setPosYRot(const mVec3_c &pos, mAng rot, UNKWORD, UNKWORD, UNKWORD); // argument is always false in existing code, true doesn't seem to make a difference void bonk(bool unk = false); + bool fn_80202D90(bool); /* vt 0x080 */ virtual UNKWORD IfCurrentActionToActor(dAcBase_c *ac, UNKWORD); /* vt 0x084 */ virtual void vt_0x084(dAcBase_c *ac, UNKWORD); @@ -288,7 +290,19 @@ public: return LINK; } + static dAcPy_c *GetLink2() { + return LINK2; + } + static dAcPy_c *LINK; + static dAcPy_c *LINK2; + + static s32 getCurrentBowType(); + static s32 getCurrentSlingshotType(); + static s32 getCurrentBeetleType(); + static s32 getCurrentBugNetType(); + + static bool isItemRestrictedByBokoBase(ITEM_ID item); }; #endif diff --git a/include/d/lyt/d_lyt_common_icon_item.h b/include/d/lyt/d_lyt_common_icon_item.h index 41fed1b3..cf0a2af7 100644 --- a/include/d/lyt/d_lyt_common_icon_item.h +++ b/include/d/lyt/d_lyt_common_icon_item.h @@ -8,27 +8,19 @@ #include "nw4r/lyt/lyt_bounding.h" #include "s/s_State.hpp" -class dLytCommonIconItemPartBase_c { -public: - virtual ~dLytCommonIconItemPartBase_c() {} - virtual nw4r::lyt::Pane *getPane() = 0; - virtual d2d::LytBase_c *getLyt() = 0; - virtual const char *getName() const = 0; -}; - /** B-Wheel item */ -class dLytCommonIconItemPart1_c : public dLytCommonIconItemPartBase_c { +class dLytCommonIconItemPart1_c { public: dLytCommonIconItemPart1_c() : mItem(0), mColor(0), field_0x2B4(false), mHasNumber(false), mSize(false), mBocoburinLocked(false) {} virtual ~dLytCommonIconItemPart1_c() {} - virtual nw4r::lyt::Pane *getPane() override { + virtual nw4r::lyt::Pane *getPane() { return mLyt.getLayout()->GetRootPane(); } - virtual d2d::LytBase_c *getLyt() override { + virtual d2d::LytBase_c *getLyt() { return &mLyt; } - virtual const char *getName() const override { + virtual const char *getName() const { return mLyt.getName(); } @@ -82,7 +74,7 @@ private: }; /** Pouch item */ -class dLytCommonIconItemPart2_c : public dLytCommonIconItemPartBase_c { +class dLytCommonIconItemPart2_c { public: dLytCommonIconItemPart2_c() : mItem(0), @@ -94,13 +86,13 @@ public: mOnOff(true), mDurability(0.0f) {} virtual ~dLytCommonIconItemPart2_c() {} - virtual nw4r::lyt::Pane *getPane() override { + virtual nw4r::lyt::Pane *getPane() { return mLyt.getLayout()->GetRootPane(); } - virtual d2d::LytBase_c *getLyt() override { + virtual d2d::LytBase_c *getLyt() { return &mLyt; } - virtual const char *getName() const override { + virtual const char *getName() const { return mLyt.getName(); } @@ -162,17 +154,17 @@ private: }; /** Dowsing "item" */ -class dLytCommonIconItemPart3_c : public dLytCommonIconItemPartBase_c { +class dLytCommonIconItemPart3_c { public: dLytCommonIconItemPart3_c() : mItem(0), mSize(false), mBocoburinLocked(false) {} virtual ~dLytCommonIconItemPart3_c() {} - virtual nw4r::lyt::Pane *getPane() override { + virtual nw4r::lyt::Pane *getPane() { return mLyt.getLayout()->GetRootPane(); } - virtual d2d::LytBase_c *getLyt() override { + virtual d2d::LytBase_c *getLyt() { return &mLyt; } - virtual const char *getName() const override { + virtual const char *getName() const { return mLyt.getName(); } diff --git a/include/d/lyt/d_lyt_common_icon_item_maps.h b/include/d/lyt/d_lyt_common_icon_item_maps.h index 53708090..4ed2d95b 100644 --- a/include/d/lyt/d_lyt_common_icon_item_maps.h +++ b/include/d/lyt/d_lyt_common_icon_item_maps.h @@ -34,6 +34,7 @@ #define LYT_CMN_ItemBigBugnet (15) // [14] uc_netB_00.tpl #define LYT_CMN_ItemBoatCannon (16) // [ 7] uc_boatCannon_00.tpl #define LYT_CMN_ItemHarp (17) // [ 0] tr_tategoto_00.tpl +#define LYT_CMN_ItemNone (18) // ------------------------- // Pouch Items #define LYT_CMN_PouchPotionHealyh (0) // [12] uc_bottleKusuriA_00.tpl diff --git a/include/d/lyt/d_textbox.h b/include/d/lyt/d_textbox.h index 57b406fc..75d44987 100644 --- a/include/d/lyt/d_textbox.h +++ b/include/d/lyt/d_textbox.h @@ -1,6 +1,7 @@ #ifndef D_LYT_TEXTBOX_H #define D_LYT_TEXTBOX_H +#include "common.h" #include "d/lyt/d2d.h" #include "libms/msgfile.h" #include "nw4r/lyt/lyt_drawInfo.h" @@ -47,8 +48,11 @@ public: return mMyScale; } - void fn_800E0A60(const char *area, ...) { - // TODO + void setMessageWithGlobalTextProcessor2(const char *message, void *unk, ...) { + va_list l; + va_start(l, str); + setMessageWithGlobalTextProcessorV(message, nullptr, unk, l); + va_end(l); } void setTextWithGlobalTextProcessor(const wchar_t *str); @@ -58,7 +62,9 @@ public: void setTextWithTextProcessor(const wchar_t *str, dTagProcessor_c *tagProcessor, void *, ...); s32 calcTextLines(const wchar_t *src, dTagProcessor_c *tagProcessor); - void setMessageWithGlobalTextProcessorAndMsbtInfo(const MsbtInfo *info, const char *labelId, wchar_t *destBuf, u32 maxLen); + void setMessageWithGlobalTextProcessorAndMsbtInfo( + const MsbtInfo *info, const char *labelId, wchar_t *destBuf, u32 maxLen + ); void loadTextFormatVars(); void setupGX() const; diff --git a/include/d/lyt/meter/d_lyt_meter.h b/include/d/lyt/meter/d_lyt_meter.h index e9d4a3cf..039e48f0 100644 --- a/include/d/lyt/meter/d_lyt_meter.h +++ b/include/d/lyt/meter/d_lyt_meter.h @@ -49,6 +49,14 @@ public: bool isSilentRealm(); + u8 getField_0x13792() const { + return field_0x13792; + } + + u8 getField_0x1377E() const { + return field_0x1377E; + } + /* 0x00004 */ d2d::ResAccIf_c mResAcc; /* 0x00374 */ d2d::LytBase_c mLyt; /* 0x00404 */ d2d::AnmGroup_c mAnmGroups[34]; @@ -91,7 +99,13 @@ public: /* 0x1373C */ mVec3_c mPos2; /* 0x13748 */ u8 field_0x13748[0x13750 - 0x13748]; /* 0x13750 */ s32 field_0x13750; - /* 0x13754 */ u8 field_0x13754[0x137B4 - 0x13754]; + /* 0x13754 */ u8 field_0x13754[0x13770 - 0x13754]; + /* 0x13770 */ u8 field_0x13770; + /* 0x13771 */ u8 field_0x13771[0x1377E - 0x13771]; + /* 0x1377E */ u8 field_0x1377E; + /* 0x1377F */ u8 field_0x1375F[0x13792 - 0x1377F]; + /* 0x13792 */ u8 field_0x13792; + /* 0x13793 */ u8 field_0x13793[0x137B4 - 0x13793]; /* 0x137B4 */ mVec3_c mPos3; /* 0x137C0 */ u32 field_0x137C0; }; @@ -110,6 +124,7 @@ STATIC_ASSERT(offsetof(dLytMeter_c, mRemoCon) == 0x12350); STATIC_ASSERT(offsetof(dLytMeter_c, mNunBg) == 0x12440); STATIC_ASSERT(offsetof(dLytMeter_c, mHeart) == 0x12608); STATIC_ASSERT(offsetof(dLytMeter_c, mShield) == 0x12DA4); +STATIC_ASSERT(offsetof(dLytMeter_c, field_0x137C0) == 0x137C0); // made up name class dLytMeterContainer_c { @@ -123,10 +138,6 @@ public: bool remove(); bool draw(); - bool checkFlag(u32 flag) { - return (mFlags & flag) == flag; - } - static dLytMeterContainer_c *GetInstance() { return sInstance; } @@ -135,6 +146,10 @@ public: return &sInstance->mMeter; } + u8 getMeterField_0x13770() const { + return mMeter.field_0x13770; + } + bool checkAllFlags(u32 mask) const { return (mFlags & mask) == mask; } diff --git a/include/d/lyt/meter/d_lyt_meter_a_btn.h b/include/d/lyt/meter/d_lyt_meter_a_btn.h index ef7a51e2..7b17e5c9 100644 --- a/include/d/lyt/meter/d_lyt_meter_a_btn.h +++ b/include/d/lyt/meter/d_lyt_meter_a_btn.h @@ -17,7 +17,7 @@ public: virtual d2d::LytBase_c *getLyt() override { return &mLyt; } - virtual const char *getName() const { + virtual const char *getName() const override { return mLyt.getName(); } diff --git a/include/d/lyt/meter/d_lyt_meter_item_select.h b/include/d/lyt/meter/d_lyt_meter_item_select.h index 3c567c91..15d53c39 100644 --- a/include/d/lyt/meter/d_lyt_meter_item_select.h +++ b/include/d/lyt/meter/d_lyt_meter_item_select.h @@ -1,6 +1,7 @@ #ifndef D_LYT_METER_ITEM_SELECT_H #define D_LYT_METER_ITEM_SELECT_H +#include "d/a/d_a_itembase.h" #include "d/lyt/d2d.h" #include "d/lyt/d_lyt_common_icon_item.h" #include "d/lyt/d_textbox.h" @@ -49,6 +50,10 @@ public: mpAnm = anim; } + void setShouldBeSelect(u32 v) { + mShouldBeSelect = v; + } + private: STATE_FUNC_DECLARE(dLytMeterItemSelectBlink_c, Wait); STATE_FUNC_DECLARE(dLytMeterItemSelectBlink_c, On); @@ -73,6 +78,10 @@ public: mpAnm = anim; } + void setShouldBeSelect(u32 v) { + mShouldBeSelect = v; + } + private: STATE_FUNC_DECLARE(dLytMeterItemSelectText_c, Wait); STATE_FUNC_DECLARE(dLytMeterItemSelectText_c, On); @@ -95,7 +104,7 @@ public: void setVisible(bool bVisible); void setVisible2(bool bVisible); void execute(); - + bool isSettled() const; void setAnm(d2d::AnmGroup_c *anim) { @@ -114,6 +123,14 @@ public: return mShouldBeVisible; } + bool getInstant() const { + return mInstant; + } + + void setOwnerPane(nw4r::lyt::Pane *p) { + mpPane2 = p; + } + private: STATE_FUNC_DECLARE(dLytMeterItemSelectBtn_c, Invisible); STATE_FUNC_DECLARE(dLytMeterItemSelectBtn_c, On); @@ -140,24 +157,59 @@ public: virtual bool build(d2d::ResAccIf_c *resAcc) override; virtual bool remove() override; virtual bool execute() override; - virtual nw4r::lyt::Pane *getPane() override; - virtual d2d::LytBase_c *getLyt() override; - virtual const char *getName() const override; + virtual nw4r::lyt::Pane *getPane() override { + return mLyt.getLayout()->GetRootPane(); + } + virtual d2d::LytBase_c *getLyt() override { + return &mLyt; + } + virtual const char *getName() const override { + return mLyt.getName(); + } virtual ~dLytMeterItemSelect_c() {} + static bool isInSpiralChargeTutorialMinigame(); + static bool isInRollercoasterMinigame(); + + + void fn_800EF580(); + void fn_800EF6B0(u8); + void setOwnerPane(nw4r::lyt::Pane *p); + void fn_800EF710(u8); + void fn_800EF720(s32); + void fn_800EF7A0(bool, s32); + bool fn_800EFDF0(bool b) const; + bool fn_800F02F0() const; + bool fn_800F0220(s32 arg); + private: - void fn_800F0680(u8); - s32 fn_800F0990(u8); - s32 fn_800F07D0(s32); - void fn_800EFAD0(s32, bool); - void fn_800EF7C0(); - void fn_800EF8C0(u8); - bool fn_800F09E0(); - void fn_800F0440(s32); - void fn_800F0700(); - bool fn_800F01B0(s32); - bool fn_800F01E0(s32); + void setBtnItem(s32 unkId); + void realizeSelectedWheelItem(); + void fn_800EF8C0(bool); + bool isWheelBlockedByCurrentAction(); + void setBtnText(s32); + bool fn_800F01B0(s32) const; + bool fn_800F01E0(s32) const; + bool isSlotBocoburinLocked(s32); + void fn_800F0310(); + bool fn_800F0030() const; + s32 fn_800F0170(s32) const; + u8 fn_800F0190(s32) const; + + bool isWheelIndexLocked(s32 idx); + + void realizeWheelItems(); + + void realizeWheelNumberForLytIndex(s32 iconIdx, s32 lytItemIdx); + void realizeBtnNumberForLytIndex(s32 iconIdx, bool); + void realizeWheelNumberVForLytIndex(s32 iconIdx, s32 lytItemIdx); + + void setCurrentItemText(ITEM_ID item); + static ITEM_ID getBaseItemForBWheelSlot(s32 idx); + ITEM_ID baseItemIdToCurrentVariant(ITEM_ID baseItem) const; + s32 baseItemLytIndexToCurrentVariant(s32 lytIndex) const; + s32 getBaseItemLytIndexforUnkId(s32 idx) const; STATE_FUNC_DECLARE(dLytMeterItemSelect_c, InitWait); STATE_FUNC_DECLARE(dLytMeterItemSelect_c, Wait); @@ -192,7 +244,7 @@ private: /* 0x0DA4 */ nw4r::lyt::Pane *mpPanes[17]; - /* 0x0DE8 */ nw4r::lyt::Pane *mpSomePane; + /* 0x0DE8 */ nw4r::lyt::Pane *mpOwnerPane; /* 0x0DEC */ dTextBox_c *mpTextBoxes[10]; /* 0x0E14 */ dWindow_c *mpWindows[4]; /* 0x0E24 */ dTextBox_c *mpSizeBoxes[4]; @@ -206,7 +258,7 @@ private: /* 0x5754 */ s32 field_0x5754; /* 0x5758 */ s32 field_0x5758; /* 0x575C */ s32 field_0x575C; - /* 0x5760 */ s32 field_0x5760; + /* 0x5760 */ s32 mDemoMoveTimer; /* 0x5764 */ s32 field_0x5764; /* 0x5768 */ s32 field_0x5768; /* 0x576C */ s32 field_0x576C; @@ -234,8 +286,8 @@ private: /* 0x57A0 */ u8 field_0x57A0; /* 0x57A1 */ u8 field_0x57A1; /* 0x57A2 */ u8 field_0x57A2; - /* 0x57A3 */ u8 field_0x57A3[8]; - /* 0x57AB */ u8 field_0x57AB[8]; + /* 0x57A3 */ bool field_0x57A3[8]; + /* 0x57AB */ bool mIsBocoburinLocked[8]; /* 0x57B3 */ u8 field_0x57B3; /* 0x57B4 */ u8 field_0x57B4; /* 0x57B5 */ u8 field_0x57B5; diff --git a/include/toBeSorted/counters/goddess_chest_counter.h b/include/toBeSorted/counters/goddess_chest_counter.h index e1c62403..e34eda56 100644 --- a/include/toBeSorted/counters/goddess_chest_counter.h +++ b/include/toBeSorted/counters/goddess_chest_counter.h @@ -8,9 +8,9 @@ public: GoddessChestCounter() : Counter(0x43F) {} virtual ~GoddessChestCounter() {}; - virtual u16 getCommittedValue() override; - virtual u16 getMax() override; - virtual u16 getUncommittedValue() override; + virtual u16 getCommittedValue() const override; + virtual u16 getMax() const override; + virtual u16 getUncommittedValue() const override; virtual void setValue(u16 num) override; static GoddessChestCounter sInstance; diff --git a/include/toBeSorted/effects_struct.h b/include/toBeSorted/effects_struct.h index 740718eb..de9b948f 100644 --- a/include/toBeSorted/effects_struct.h +++ b/include/toBeSorted/effects_struct.h @@ -28,8 +28,14 @@ public: void fn_80029980(u16 effect, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, void *, void *); void fn_800299F0(u16 effect, mMtx_c *mtx, void *, void *); void fn_80029A10(u16 effect, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, void *, void *); + void fn_80029A70(u16 effect, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, void *, void *); void setMtx(const mMtx_c &); + static void fn_800298C0(u16 effect, mVec3_c *pos, void*, void*, void*, void*); + + void fn_80026ED0(); + void fn_80026F10(); + bool checkField0x00() const { return field_0x00 != 0; } diff --git a/src/REL/d/a/obj/d_a_obj_dungeon_ship.cpp b/src/REL/d/a/obj/d_a_obj_dungeon_ship.cpp index b0c93221..ae522bae 100644 --- a/src/REL/d/a/obj/d_a_obj_dungeon_ship.cpp +++ b/src/REL/d/a/obj/d_a_obj_dungeon_ship.cpp @@ -171,8 +171,8 @@ int dAcODungeonShip_c::doDelete() { return SUCCEEDED; } -extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_682_; -extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_683_; +extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_682_; +extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_683_; int dAcODungeonShip_c::actorExecute() { field_0x850++; diff --git a/src/REL/d/a/obj/d_a_obj_tower_gearD101.cpp b/src/REL/d/a/obj/d_a_obj_tower_gearD101.cpp index c5e741e2..cbf4a29c 100644 --- a/src/REL/d/a/obj/d_a_obj_tower_gearD101.cpp +++ b/src/REL/d/a/obj/d_a_obj_tower_gearD101.cpp @@ -126,7 +126,7 @@ void dAcOTowerGearD101_c::initTransform() { mMdl.setLocalMtx(field_0x3C4); } -extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_585_; +extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_585_; void dAcOTowerGearD101_c::playVisualEffect() { mEffects.fn_80029A10(PARTICLE_RESOURCE_ID_MAPPING_585_, &field_0x3F4, &rotation, nullptr, nullptr, nullptr); } diff --git a/src/REL/d/a/obj/d_a_obj_tower_hand_D101.cpp b/src/REL/d/a/obj/d_a_obj_tower_hand_D101.cpp index 5a1a4190..910dd1e4 100644 --- a/src/REL/d/a/obj/d_a_obj_tower_hand_D101.cpp +++ b/src/REL/d/a/obj/d_a_obj_tower_hand_D101.cpp @@ -593,7 +593,7 @@ void dAcOTowerHandD101_c::executeState_RemainOpen() { } void dAcOTowerHandD101_c::finalizeState_RemainOpen() {} -extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_573; +extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_573; void dAcOTowerHandD101_c::initializeState_Close() { mMdl.getAnm().setPlayState(m3d::PLAY_MODE_1); mMdl.setRate(getCloseRate()); diff --git a/src/REL/d/a/obj/d_a_obj_tubo.cpp b/src/REL/d/a/obj/d_a_obj_tubo.cpp index ad83d657..14a0f3ff 100644 --- a/src/REL/d/a/obj/d_a_obj_tubo.cpp +++ b/src/REL/d/a/obj/d_a_obj_tubo.cpp @@ -449,7 +449,7 @@ void dAcOtubo_c::finalizeState_Rebirth() { extern "C" void fn_80027510(void *, bool); extern "C" void fn_80027560(void *, bool, int); extern "C" void *fn_800298B0(u16, mVec3_c *, mVec3_c *, u32, u32, u32, u32, u32); -extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_109_, PARTICLE_RESOURCE_ID_MAPPING_209_; +extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_109_, PARTICLE_RESOURCE_ID_MAPPING_209_; extern "C" void *ENVIRONMENT; extern "C" void fn_80022BE0(void *, const mVec3_c &); diff --git a/src/REL/d/a/obj/d_a_obj_tumble_weed.cpp b/src/REL/d/a/obj/d_a_obj_tumble_weed.cpp index b5f99107..e3b37f65 100644 --- a/src/REL/d/a/obj/d_a_obj_tumble_weed.cpp +++ b/src/REL/d/a/obj/d_a_obj_tumble_weed.cpp @@ -259,7 +259,7 @@ bool dAcOTumbleWeed_c::checkInvalidGround() const { code == POLY_ATTR_SAND_DEEP_SLOW; } -extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_743_; +extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_743_; extern "C" void fn_800298B0(u16, mVec3_c *, mAng3_c *, u32, u32, u32, u32, u32); void dAcOTumbleWeed_c::doBreak() { diff --git a/src/d/a/obj/d_a_obj_tbox.cpp b/src/d/a/obj/d_a_obj_tbox.cpp index b85de5cd..81d3923e 100644 --- a/src/d/a/obj/d_a_obj_tbox.cpp +++ b/src/d/a/obj/d_a_obj_tbox.cpp @@ -1933,8 +1933,8 @@ void dAcTbox_c::executeState_LoadArchive() { void dAcTbox_c::finalizeState_LoadArchive() {} extern "C" void fn_800298B0(u16 effectIndex, mVec3_c *, mAng3_c *, mVec3_c *, void *, void *, void *, void *); -extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_209_; -extern "C" bool isPouchItem(u16); +extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_209_; +extern "C" const bool isPouchItem(u16); extern "C" u8 adventurePouchFindItemSlot(ITEM_ID item); extern "C" u16 findItemInItemCheck(ITEM_ID item); extern "C" dAcItem_c *giveItem3(u16 item, s32); diff --git a/src/d/a/obj/d_a_obj_water_spout.cpp b/src/d/a/obj/d_a_obj_water_spout.cpp index 78c223e0..a7e05ec3 100644 --- a/src/d/a/obj/d_a_obj_water_spout.cpp +++ b/src/d/a/obj/d_a_obj_water_spout.cpp @@ -60,7 +60,7 @@ int dAcOwaterSpout_c::draw() { } extern "C" void fn_800298B0(u16, mVec3_c *, mVec3_c *, mVec3_c *, u32, u32, u32, u32); -extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_213_; +extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_213_; void dAcOwaterSpout_c::initializeState_Wait() { if (params == 1) { diff --git a/src/d/lyt/d_lyt_area_caption.cpp b/src/d/lyt/d_lyt_area_caption.cpp index 97145059..8ba56ccd 100644 --- a/src/d/lyt/d_lyt_area_caption.cpp +++ b/src/d/lyt/d_lyt_area_caption.cpp @@ -105,9 +105,9 @@ bool dLytAreaCaptionParts_c::draw() { void dLytAreaCaptionParts_c::setTextIfWaiting(const char *text) { if (*mStateMgr.getStateID() == StateID_Wait) { - mTextBoxes[0]->fn_800E0A60(text, nullptr); - mTextBoxes[1]->fn_800E0A60(text, nullptr); - mTextBoxes[2]->fn_800E0A60(text, nullptr); + mTextBoxes[0]->setMessageWithGlobalTextProcessor2(text, nullptr); + mTextBoxes[1]->setMessageWithGlobalTextProcessor2(text, nullptr); + mTextBoxes[2]->setMessageWithGlobalTextProcessor2(text, nullptr); field_0x54C = 1; } } @@ -120,7 +120,7 @@ void dLytAreaCaptionParts_c::check() { void dLytAreaCaptionParts_c::initializeState_Wait() {} void dLytAreaCaptionParts_c::executeState_Wait() { - mTextBoxes[0]->fn_800E0A60("N_inOut_00", nullptr); + mTextBoxes[0]->setMessageWithGlobalTextProcessor2("N_inOut_00", nullptr); } void dLytAreaCaptionParts_c::finalizeState_Wait() {} diff --git a/src/d/lyt/meter/d_lyt_meter.cpp b/src/d/lyt/meter/d_lyt_meter.cpp index 602031c3..4cf8ab35 100644 --- a/src/d/lyt/meter/d_lyt_meter.cpp +++ b/src/d/lyt/meter/d_lyt_meter.cpp @@ -30,7 +30,7 @@ STATE_DEFINE(dLytMeterParts_c, Out); void dLytMeter1Button_c::initializeState_Wait() {} void dLytMeter1Button_c::executeState_Wait() { - if (dLytMeterContainer_c::GetInstance()->checkFlag(0x80)) { + if (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x80)) { return; } mStateMgr.changeState(StateID_ToUnuse); @@ -77,7 +77,7 @@ void dLytMeter1Button_c::initializeState_Unuse() { field_0x1A4 = 15; } void dLytMeter1Button_c::executeState_Unuse() { - if (dLytMeterContainer_c::GetInstance()->checkFlag(0x80)) { + if (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x80)) { if (!(field_0x1A4 > 0)) { mStateMgr.changeState(StateID_ToUse); return; @@ -143,7 +143,7 @@ bool dLytMeter1Button_c::execute() { void dLytMeter2Button_c::initializeState_Wait() {} void dLytMeter2Button_c::executeState_Wait() { - if (dLytMeterContainer_c::GetInstance()->checkFlag(0x100)) { + if (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x100)) { return; } mStateMgr.changeState(StateID_ToUnuse); @@ -190,7 +190,7 @@ void dLytMeter2Button_c::initializeState_Unuse() { field_0x1A4 = 15; } void dLytMeter2Button_c::executeState_Unuse() { - if (dLytMeterContainer_c::GetInstance()->checkFlag(0x100)) { + if (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x100)) { if (!(field_0x1A4 > 0)) { mStateMgr.changeState(StateID_ToUse); return; diff --git a/src/d/lyt/meter/d_lyt_meter_a_btn.cpp b/src/d/lyt/meter/d_lyt_meter_a_btn.cpp index aec3ca26..c41ccf8a 100644 --- a/src/d/lyt/meter/d_lyt_meter_a_btn.cpp +++ b/src/d/lyt/meter/d_lyt_meter_a_btn.cpp @@ -1,5 +1,6 @@ #include "d/lyt/meter/d_lyt_meter_a_btn.h" +#include "common.h" #include "d/lyt/d_textbox.h" #include "d/lyt/d_window.h" @@ -139,3 +140,8 @@ bool dLytMeterABtn_c::remove() { } return true; } + +void dLytMeterABtn_c::fn_800E0870(u32) { + // TODO, just getting this function to spawn to figure out its signature + mpTextBoxes[0]->setMessageWithGlobalTextProcessor2("", nullptr); +} diff --git a/src/d/lyt/meter/d_lyt_meter_item_select.cpp b/src/d/lyt/meter/d_lyt_meter_item_select.cpp index 9ee6111a..611fde0f 100644 --- a/src/d/lyt/meter/d_lyt_meter_item_select.cpp +++ b/src/d/lyt/meter/d_lyt_meter_item_select.cpp @@ -1,18 +1,26 @@ #include "d/lyt/meter/d_lyt_meter_item_select.h" #include "common.h" +#include "d/a/d_a_item.h" +#include "d/a/d_a_itembase.h" #include "d/a/d_a_player.h" #include "d/d_pad.h" #include "d/flag/storyflag_manager.h" #include "d/lyt/d2d.h" #include "d/lyt/d_lyt_common_icon_item.h" +#include "d/lyt/d_lyt_common_icon_item_maps.h" #include "d/lyt/d_lyt_control_game.h" #include "d/lyt/d_lyt_do_button.h" #include "d/lyt/d_lyt_unknowns.h" #include "d/lyt/meter/d_lyt_meter.h" #include "m/m_vec.h" #include "nw4r/lyt/lyt_group.h" +#include "nw4r/math/math_types.h" #include "s/s_Math.h" +#include "sized_string.h" +#include "toBeSorted/effects_struct.h" +#include "toBeSorted/event_manager.h" +#include "toBeSorted/minigame_mgr.h" #include "toBeSorted/small_sound_mgr.h" STATE_DEFINE(dLytMeterItemSelectIcon_c, Wait); @@ -366,6 +374,10 @@ void dLytMeterItemSelectBtn_c::setVisible(bool bVisible) { } } +bool dLytMeterItemSelectBtn_c::isSettled() const { + return !mpAnm->isEnabled(); +} + void dLytMeterItemSelectBtn_c::setVisible2(bool bVisible) { field_0x57 = 1; if (bVisible) { @@ -383,16 +395,27 @@ void dLytMeterItemSelectBtn_c::setVisible2(bool bVisible) { } } -bool dLytMeterItemSelectBtn_c::isSettled() const { - return !mpAnm->isEnabled(); -} - static const char *sPaneNames[] = { "N_itemArrow_00", "N_arrowHand_00", "N_bBtn_00", "N_itemSelect_00", "N_setBtn_00", "N_bBtn_01", "N_btnBg_00", "N_btn_00", "N_input_00", "N_iconA_00", "N_iconB_00", "N_iconC_00", "N_iconD_00", "N_iconE_00", "N_iconF_00", "N_iconG_00", "N_iconH_00", }; +#define ITEM_SELECT_PANE_ITEM_ARROW 0 +#define ITEM_SELECT_PANE_ARROW_HAND 1 +#define ITEM_SELECT_PANE_N_BTN_0 2 +#define ITEM_SELECT_PANE_ITEM_SELECT 3 +#define ITEM_SELECT_PANE_SET_BTN 4 +#define ITEM_SELECT_PANE_B_BTN_1 5 +#define ITEM_SELECT_PANE_BTN_BG 6 +#define ITEM_SELECT_PANE_BTN 7 +#define ITEM_SELECT_PANE_INPUT 8 +#define ITEM_SELECT_PANE_ICON_OFFSET 9 + +#define ITEM_SELECT_NUM_PANES 17 + +static const int sDemoMoveIntsUnk[] = {4, 2, 3, 1, 7, 6, 5, 0}; + static const d2d::LytBrlanMapping brlanMap[] = { { "remoConBtn_00_in.brlan", "G_inOut_00"}, { "remoConBtn_00_onOff.brlan", "G_itemA_00"}, @@ -449,6 +472,8 @@ static const d2d::LytBrlanMapping brlanMap[] = { #define ITEM_SELECT_NUM_ANIMS 34 +#define ITEM_SELECT_NUM_ITEMS 8 + static const char *sTextboxNames[] = { "T_number_00", "T_numberS_00", "T_numberS_01", "T_numberS_02", "T_back_00", "T_backS_00", "T_itemName_00", "T_itemNameS_00", "T_item_00", "T_itemS_00", @@ -469,7 +494,7 @@ dLytMeterItemSelect_c::dLytMeterItemSelect_c() : mStateMgr(*this, sStateID::null field_0x5754 = 0; field_0x5758 = -1; field_0x575C = 0; - field_0x5760 = 0; + mDemoMoveTimer = 0; field_0x5764 = -1; field_0x5768 = 2; @@ -478,9 +503,9 @@ dLytMeterItemSelect_c::dLytMeterItemSelect_c() : mStateMgr(*this, sStateID::null field_0x57B7 = 0; field_0x57B8 = 0; - for (int i = 0; i < 8; i++) { - field_0x57A3[i] = 0; - field_0x57AB[i] = 0; + for (int i = 0; i < ITEM_SELECT_NUM_ITEMS; i++) { + field_0x57A3[i] = false; + mIsBocoburinLocked[i] = false; } } @@ -493,10 +518,10 @@ void dLytMeterItemSelect_c::executeState_InitWait() { field_0x579A = field_0x5794; } - bool blocked = fn_800F09E0(); + bool blocked = isWheelBlockedByCurrentAction(); if ((field_0x574C != 11 && field_0x5794 != 11 && !blocked) || field_0x579A != 11) { - fn_800EF7C0(); - fn_800EF8C0(1); + realizeSelectedWheelItem(); + fn_800EF8C0(true); if (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10)) { for (int i = 0; i < 4; i++) { if (i == 2) { @@ -506,7 +531,7 @@ void dLytMeterItemSelect_c::executeState_InitWait() { } } - mpPanes[4]->SetVisible(true); + mpPanes[ITEM_SELECT_PANE_SET_BTN]->SetVisible(true); for (int i = 0; i < 4; i++) { mAnm[i + ITEM_SELECT_ANIM_INPUT_OFFSET].setAnimEnable(true); @@ -523,7 +548,7 @@ void dLytMeterItemSelect_c::executeState_InitWait() { mAnm[i + ITEM_SELECT_ANIM_INPUT_OFFSET].setAnimEnable(false); } - mpPanes[4]->SetVisible(false); + mpPanes[ITEM_SELECT_PANE_SET_BTN]->SetVisible(false); mAnm[ITEM_SELECT_ANIM_OUT].setToEnd(); mAnm[ITEM_SELECT_ANIM_OUT].setAnimEnable(true); @@ -536,7 +561,7 @@ void dLytMeterItemSelect_c::executeState_InitWait() { mBtn[i].setVisible2(false); } - mpPanes[4]->SetVisible(true); + mpPanes[ITEM_SELECT_PANE_SET_BTN]->SetVisible(true); for (int i = 0; i < 4; i++) { mAnm[i + ITEM_SELECT_ANIM_INPUT_OFFSET].setAnimEnable(true); @@ -549,7 +574,7 @@ void dLytMeterItemSelect_c::executeState_InitWait() { mAnm[i + ITEM_SELECT_ANIM_INPUT_OFFSET].setAnimEnable(false); } - mpPanes[4]->SetVisible(false); + mpPanes[ITEM_SELECT_PANE_SET_BTN]->SetVisible(false); mAnm[ITEM_SELECT_ANIM_OUT].setToEnd(); mAnm[ITEM_SELECT_ANIM_OUT].setAnimEnable(true); @@ -565,7 +590,7 @@ void dLytMeterItemSelect_c::executeState_InitWait() { mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(true); mLyt.calc(); mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(false); - mpPanes[3]->SetVisible(false); + mpPanes[ITEM_SELECT_PANE_ITEM_SELECT]->SetVisible(false); } mAnm[ITEM_SELECT_ANIM_SELECT_LOOP].setAnimEnable(true); if (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10)) { @@ -577,7 +602,7 @@ void dLytMeterItemSelect_c::executeState_InitWait() { } } - mpPanes[4]->SetVisible(true); + mpPanes[ITEM_SELECT_PANE_SET_BTN]->SetVisible(true); for (int i = 0; i < 4; i++) { mAnm[i + ITEM_SELECT_ANIM_INPUT_OFFSET].setAnimEnable(true); @@ -594,7 +619,7 @@ void dLytMeterItemSelect_c::executeState_InitWait() { mAnm[i + ITEM_SELECT_ANIM_INPUT_OFFSET].setAnimEnable(false); } - mpPanes[4]->SetVisible(false); + mpPanes[ITEM_SELECT_PANE_SET_BTN]->SetVisible(false); if (blocked) { field_0x5768 = 0; @@ -611,7 +636,7 @@ void dLytMeterItemSelect_c::executeState_InitWait() { } } - mpPanes[4]->SetVisible(true); + mpPanes[ITEM_SELECT_PANE_SET_BTN]->SetVisible(true); for (int i = 0; i < 4; i++) { mAnm[i + ITEM_SELECT_ANIM_INPUT_OFFSET].setAnimEnable(true); @@ -628,7 +653,7 @@ void dLytMeterItemSelect_c::executeState_InitWait() { mAnm[i + ITEM_SELECT_ANIM_INPUT_OFFSET].setAnimEnable(false); } - mpPanes[4]->SetVisible(false); + mpPanes[ITEM_SELECT_PANE_SET_BTN]->SetVisible(false); mStateMgr.changeState(StateID_Unuse); } } @@ -636,8 +661,8 @@ void dLytMeterItemSelect_c::executeState_InitWait() { void dLytMeterItemSelect_c::finalizeState_InitWait() {} void dLytMeterItemSelect_c::initializeState_Wait() { - if (mpPanes[11]->GetAlpha() == 64) { - mpPanes[11]->SetAlpha(255); + if (mpPanes[ITEM_SELECT_PANE_ICON_OFFSET + 2]->GetAlpha() == 64) { + mpPanes[ITEM_SELECT_PANE_ICON_OFFSET + 2]->SetAlpha(255); } } void dLytMeterItemSelect_c::executeState_Wait() { @@ -653,7 +678,7 @@ void dLytMeterItemSelect_c::executeState_Wait() { mStateMgr.changeState(StateID_SetIn); } else if (field_0x57A2 != 0) { mStateMgr.changeState(StateID_SelectIn); - } else if (fn_800F09E0()) { + } else if (isWheelBlockedByCurrentAction()) { field_0x5768 = 0; mStateMgr.changeState(StateID_FrameOffIn); } else if ((field_0x5794 == 2 || (field_0x5794 == 9 || field_0x5794 == 10)) && field_0x579A == 11) { @@ -675,8 +700,8 @@ void dLytMeterItemSelect_c::initializeState_SelectIn() { field_0x5788 = 0; field_0x579B = 0; mEffects.fn_80027320(0); - mpPanes[11]->SetInfluencedAlpha(true); - mpPanes[11]->SetAlpha(64); + mpPanes[ITEM_SELECT_PANE_ICON_OFFSET + 2]->SetInfluencedAlpha(true); + mpPanes[ITEM_SELECT_PANE_ICON_OFFSET + 2]->SetAlpha(64); } if (mAnm[ITEM_SELECT_ANIM_FULL].isEnabled()) { @@ -688,11 +713,11 @@ void dLytMeterItemSelect_c::initializeState_SelectIn() { mAnm[ITEM_SELECT_ANIM_DECIDE].setAnimEnable(true); mAnm[ITEM_SELECT_ANIM_DECIDE].setFrame(0.0f); - for (int i = 0; i < 8; i++) { + for (int i = 0; i < ITEM_SELECT_NUM_ITEMS; i++) { if (fn_800F01B0(i)) { mAnm[i + ITEM_SELECT_ANIM_HAVE_OFFSET].setFrame(0.0f); if (fn_800F01E0(i)) { - field_0x57AB[i] = 1; + mIsBocoburinLocked[i] = true; } } else { mAnm[i + ITEM_SELECT_ANIM_HAVE_OFFSET].setFrame(1.0f); @@ -700,7 +725,7 @@ void dLytMeterItemSelect_c::initializeState_SelectIn() { mAnm[i + ITEM_SELECT_ANIM_HAVE_OFFSET].setAnimEnable(true); } - for (int i = 0; i < 8; i++) { + for (int i = 0; i < ITEM_SELECT_NUM_ITEMS; i++) { mAnm[i + ITEM_SELECT_ANIM_ITEM_ONOFF_OFFSET].setForwardOnce(); mAnm[i + ITEM_SELECT_ANIM_ITEM_ONOFF_OFFSET].setAnimEnable(true); mAnm[i + ITEM_SELECT_ANIM_ITEM_ONOFF_OFFSET].setFrame(0.0f); @@ -711,16 +736,16 @@ void dLytMeterItemSelect_c::initializeState_SelectIn() { mAnm[ITEM_SELECT_ANIM_DECIDE].setAnimEnable(false); - for (int i = 0; i < 8; i++) { + for (int i = 0; i < ITEM_SELECT_NUM_ITEMS; i++) { mAnm[i + ITEM_SELECT_ANIM_HAVE_OFFSET].setAnimEnable(false); } - mpPanes[3]->SetVisible(true); + mpPanes[ITEM_SELECT_PANE_ITEM_SELECT]->SetVisible(true); mAnm[ITEM_SELECT_ANIM_IN].setForwardOnce(); mAnm[ITEM_SELECT_ANIM_IN].setFrame(0.0f); mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(true); - fn_800F0700(); + realizeWheelItems(); } void dLytMeterItemSelect_c::executeState_SelectIn() { bool bAllAnimsSettled = true; @@ -821,7 +846,7 @@ void dLytMeterItemSelect_c::executeState_SetIn() { if (settled0x57BE && settled0x5784) { field_0x57BD = 0; field_0x57BE = 0; - mpPanes[11]->SetAlpha(0xFF); + mpPanes[ITEM_SELECT_PANE_ICON_OFFSET + 2]->SetAlpha(0xFF); } else { bAllAnimsSettled = false; } @@ -918,74 +943,709 @@ void dLytMeterItemSelect_c::initializeState_Set() { field_0x579A = field_0x5794; } } -void dLytMeterItemSelect_c::executeState_Set() {} +void dLytMeterItemSelect_c::executeState_Set() { + if (field_0x57A0 == 0) { + if (field_0x5794 == 11) { + mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(true); + mAnm[ITEM_SELECT_ANIM_IN].setFrame(0.0f); + mLyt.calc(); + mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(false); + mpPanes[ITEM_SELECT_PANE_ITEM_SELECT]->SetVisible(false); + if (!dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10)) { + mStateMgr.changeState(StateID_ToUnuse); + } else { + mStateMgr.changeState(StateID_SetNone); + } + } else { + mAnm[ITEM_SELECT_ANIM_OUT].setForwardOnce(); + mAnm[ITEM_SELECT_ANIM_OUT].setAnimEnable(true); + mAnm[ITEM_SELECT_ANIM_OUT].setToStart(); + mStateMgr.changeState(StateID_SetOut); + } + } else { + if ((field_0x5794 == 2 || field_0x5794 == 9 || field_0x5794 == 10) && field_0x579A != field_0x5794) { + mStateMgr.changeState(StateID_SetSpecialItemIn); + } else if (!dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) && field_0x5790 <= 0 && + (field_0x5794 == 9 || field_0x5794 == 10)) { + mStateMgr.changeState(StateID_ToUnuse); + } else if (field_0x57A2 != 0) { + mStateMgr.changeState(StateID_SelectIn); + } + } +} void dLytMeterItemSelect_c::finalizeState_Set() {} -void dLytMeterItemSelect_c::initializeState_SetOut() {} -void dLytMeterItemSelect_c::executeState_SetOut() {} +void dLytMeterItemSelect_c::initializeState_SetOut() { + field_0x57B3 = 0; + field_0x5790 = 0; +} +void dLytMeterItemSelect_c::executeState_SetOut() { + if (mAnm[ITEM_SELECT_ANIM_OUT].isStop2()) { + mAnm[ITEM_SELECT_ANIM_OUT].setAnimEnable(false); + field_0x57B3 = 0; + field_0x579A = 11; + mStateMgr.changeState(StateID_Wait); + } + + if (mAnm[ITEM_SELECT_ANIM_OUT].isEnabled()) { + mAnm[ITEM_SELECT_ANIM_OUT].play(); + } +} void dLytMeterItemSelect_c::finalizeState_SetOut() {} -void dLytMeterItemSelect_c::initializeState_SetNone() {} -void dLytMeterItemSelect_c::executeState_SetNone() {} +void dLytMeterItemSelect_c::initializeState_SetNone() { + mAnm[ITEM_SELECT_ANIM_RESET].setForwardOnce(); + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(true); + if (field_0x5795 == 2 || field_0x5795 == 9 || field_0x5795 == 10) { + // "instant" + mAnm[ITEM_SELECT_ANIM_RESET].setToEnd2(); + mBtn[0].setVisible(true, true); + mBtn[2].setVisible(true, true); + } else { + mAnm[ITEM_SELECT_ANIM_RESET].setToStart(); + mBtn[0].setVisible(true, false); + mBtn[2].setVisible(true, false); + } +} +void dLytMeterItemSelect_c::executeState_SetNone() { + if (field_0x5754 == 1) { + mAnm[ITEM_SELECT_ANIM_RESET].setBackwardsOnce(); + mAnm[ITEM_SELECT_ANIM_RESET].setToEnd2(); + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(true); + mLyt.calc(); + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(false); + fn_800F0310(); + } else { + if (mAnm[ITEM_SELECT_ANIM_RESET].isStop2() && mBtn[0].isSettled()) { + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(false); + field_0x57B3 = 0; + field_0x579A = 11; + mStateMgr.changeState(StateID_Wait); + } + + if (mAnm[ITEM_SELECT_ANIM_RESET].isEnabled()) { + mAnm[ITEM_SELECT_ANIM_RESET].play(); + } + } +} void dLytMeterItemSelect_c::finalizeState_SetNone() {} -void dLytMeterItemSelect_c::initializeState_SelectOut() {} -void dLytMeterItemSelect_c::executeState_SelectOut() {} +void dLytMeterItemSelect_c::initializeState_SelectOut() { + mAnm[ITEM_SELECT_ANIM_IN].setBackwardsOnce(); + mAnm[ITEM_SELECT_ANIM_IN].setToStart(); + mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(true); + field_0x57B3 = 0; + if (field_0x5796 != 11) { + mBtn[2].setVisible(false, false); + } else { + mBtn[2].setVisible(true, false); + } + if (field_0x57BD != 0) { + field_0x5788 = 0; + } +} +void dLytMeterItemSelect_c::executeState_SelectOut() { + bool bAllAnimsSettled = true; + if (field_0x57BD != 0) { + if (field_0x5788 > 0) { + field_0x5788--; + bAllAnimsSettled = false; + } else { + bool settled0x57BE = true; + bool settled0x5784 = true; + if (field_0x579B != 0) { + settled0x57BE = sLib::chaseUC(&field_0x579B, 0, 0x55); + } + if (field_0x5784 != 0.8f) { + settled0x5784 = sLib::chase(&field_0x5784, 0.8f, 0.06666666f); + } + mEffects.fn_80027320(field_0x579B); + if (settled0x57BE && settled0x5784) { + field_0x57BD = 0; + field_0x57BE = 0; + mpPanes[ITEM_SELECT_PANE_ICON_OFFSET + 2]->SetAlpha(0xFF); + } else { + bAllAnimsSettled = false; + } + } + } + + if (bAllAnimsSettled) { + if (mAnm[ITEM_SELECT_ANIM_IN].isStop2() && mBtn[2].isSettled()) { + mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(false); + mpPanes[ITEM_SELECT_PANE_ITEM_SELECT]->SetVisible(false); + mStateMgr.changeState(StateID_Wait); + } + } + + if (mAnm[ITEM_SELECT_ANIM_IN].isEnabled()) { + mAnm[ITEM_SELECT_ANIM_IN].play(); + } +} void dLytMeterItemSelect_c::finalizeState_SelectOut() {} -void dLytMeterItemSelect_c::initializeState_ResetIn() {} -void dLytMeterItemSelect_c::executeState_ResetIn() {} +void dLytMeterItemSelect_c::initializeState_ResetIn() { + mAnm[ITEM_SELECT_ANIM_RESET].setForwardOnce(); + mAnm[ITEM_SELECT_ANIM_RESET].setToStart(); + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(true); + mBtn[2].setVisible(true); + setBtnText(field_0x576C); +} +void dLytMeterItemSelect_c::executeState_ResetIn() { + if (mAnm[ITEM_SELECT_ANIM_RESET].isStop2()) { + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(false); + field_0x57B3 = 0; + mStateMgr.changeState(StateID_Reset); + } + + if (mAnm[ITEM_SELECT_ANIM_RESET].isEnabled()) { + mAnm[ITEM_SELECT_ANIM_RESET].play(); + } +} void dLytMeterItemSelect_c::finalizeState_ResetIn() {} void dLytMeterItemSelect_c::initializeState_Reset() {} -void dLytMeterItemSelect_c::executeState_Reset() {} +void dLytMeterItemSelect_c::executeState_Reset() { + if (field_0x57A2 != 0 || field_0x5754 == 1 || + (field_0x57A0 != 0 && + (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || (field_0x5794 != 10 && field_0x5794 != 9)))) { + mAnm[ITEM_SELECT_ANIM_RESET].setBackwardsOnce(); + mAnm[ITEM_SELECT_ANIM_RESET].setToEnd2(); + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(true); + mLyt.calc(); + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(false); + fn_800F0310(); + } else if (field_0x5794 == 2 || field_0x5794 == 9 || field_0x5794 == 10) { + mStateMgr.changeState(StateID_SetSpecialItemIn); + } else if (LytDoButtonRelated::get0x08() == 0x85 || LytDoButtonRelated::get0x08() == 0x7F || + LytDoButtonRelated::get0x08() == 0x87 || LytDoButtonRelated::get0x08() == 0x84 || field_0x5794 == 11 || + !dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || field_0x5754 == 1) { + mStateMgr.changeState(StateID_ResetOut); + } +} void dLytMeterItemSelect_c::finalizeState_Reset() {} -void dLytMeterItemSelect_c::initializeState_ResetOut() {} -void dLytMeterItemSelect_c::executeState_ResetOut() {} +void dLytMeterItemSelect_c::initializeState_ResetOut() { + mAnm[ITEM_SELECT_ANIM_RESET].setBackwardsOnce(); + mAnm[ITEM_SELECT_ANIM_RESET].setToStart(); + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(true); + mBtn[2].setVisible(false); +} +void dLytMeterItemSelect_c::executeState_ResetOut() { + if (field_0x57A2 != 0 || field_0x5754 == 1 || + (field_0x57A0 != 0 && + (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || (field_0x5794 != 10 && field_0x5794 != 9)))) { + mAnm[ITEM_SELECT_ANIM_RESET].setToEnd2(); + mBtn[2].setVisible(false, true); + mLyt.calc(); + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(false); + fn_800F0310(); + } else { + if (mAnm[ITEM_SELECT_ANIM_RESET].isStop2() && mBtn[2].isSettled()) { + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(false); + mStateMgr.changeState(StateID_Wait); + } + + if (mAnm[ITEM_SELECT_ANIM_RESET].isEnabled()) { + mAnm[ITEM_SELECT_ANIM_RESET].play(); + } + } +} void dLytMeterItemSelect_c::finalizeState_ResetOut() {} -void dLytMeterItemSelect_c::initializeState_ToUse() {} -void dLytMeterItemSelect_c::executeState_ToUse() {} -void dLytMeterItemSelect_c::finalizeState_ToUse() {} +void dLytMeterItemSelect_c::initializeState_ToUse() { + if (field_0x5796 != 11) { + field_0x57B4 = 0; + } + field_0x57C4 = 0; + mBtn[1].setVisible(true, false); + mBtn[0].setVisible(true, false); -void dLytMeterItemSelect_c::initializeState_ToUnuse() {} -void dLytMeterItemSelect_c::executeState_ToUnuse() {} + if (field_0x57B3 == 0) { + if (field_0x5796 != 11) { + mBtn[2].setVisible(false, false); + } else { + mBtn[2].setVisible(true, false); + } + + if (field_0x57B4 != 0) { + mAnm[ITEM_SELECT_ANIM_RESET].setForwardOnce(); + mAnm[ITEM_SELECT_ANIM_RESET].setToStart(); + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(true); + } + } else if (field_0x5794 != 11 && (field_0x5795 == 9 || field_0x5795 == 10)) { + field_0x57B3 = 0; + field_0x57C4 = 1; + mAnm[ITEM_SELECT_ANIM_OUT].setForwardOnce(); + mAnm[ITEM_SELECT_ANIM_OUT].setAnimEnable(true); + mAnm[ITEM_SELECT_ANIM_OUT].setToStart(); + } +} +void dLytMeterItemSelect_c::executeState_ToUse() { + if (field_0x57A2 != 0 || field_0x5754 == 1 || + (field_0x57A0 != 0 && + (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || (field_0x5794 != 10 && field_0x5794 != 9)))) { + if (field_0x57C4 != 0 && mAnm[ITEM_SELECT_ANIM_OUT].isEnabled()) { + mAnm[ITEM_SELECT_ANIM_OUT].setToEnd2(); + mLyt.calc(); + mAnm[ITEM_SELECT_ANIM_OUT].setAnimEnable(false); + } + + fn_800F0310(); + } else { + bool b = false; + if (field_0x57C4 != 0) { + if (mAnm[ITEM_SELECT_ANIM_OUT].isEnabled()) { + if (mAnm[ITEM_SELECT_ANIM_OUT].isStop2()) { + mAnm[ITEM_SELECT_ANIM_OUT].setAnimEnable(false); + b = true; + } + } else { + b = true; + } + } else { + b = true; + } + + if (mBtn[1].isSettled() && b) { + if (field_0x57B3 == 0) { + if (mBtn[0].isSettled() && mBtn[2].isSettled()) { + if (field_0x57B4 != 0) { + if (mAnm[ITEM_SELECT_ANIM_RESET].isStop2()) { + mStateMgr.changeState(StateID_Wait); + } + } else { + mStateMgr.changeState(StateID_Wait); + } + } + } else { + mStateMgr.changeState(StateID_Wait); + } + } + + if (field_0x57B3 == 0 && field_0x57B4 != 0 && mAnm[ITEM_SELECT_ANIM_RESET].isEnabled()) { + mAnm[ITEM_SELECT_ANIM_RESET].play(); + } + + if (field_0x57C4 != 0 && mAnm[ITEM_SELECT_ANIM_OUT].isEnabled()) { + mAnm[ITEM_SELECT_ANIM_OUT].play(); + } + } +} +void dLytMeterItemSelect_c::finalizeState_ToUse() { + if (field_0x57B3 == 0 && field_0x57B4 != 0) { + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(false); + field_0x57B4 = 0; + } +} + +void dLytMeterItemSelect_c::initializeState_ToUnuse() { + mBtn[1].setVisible(false, false); + mBtn[0].setVisible(false, false); + if (field_0x57B3 == 0) { + if (field_0x5794 != 11) { + mBtn[2].setVisible(false, false); + } else { + mBtn[2].setVisible(true, false); + } + } + + field_0x57A1 = field_0x57A0; +} +void dLytMeterItemSelect_c::executeState_ToUnuse() { + if (field_0x57B3 == 0 && field_0x5794 == 11 && (field_0x579A == 2 || field_0x579A == 9 || field_0x579A == 10)) { + mStateMgr.changeState(StateID_SetNone); + } else if (field_0x57A2 != 0 || field_0x5754 == 1 || + (field_0x57A0 != 0 && (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || + (field_0x5794 != 10 && field_0x5794 != 9)))) { + fn_800F0310(); + return; + } + + if (field_0x57A0 == 0 && field_0x57A1 != 0) { + field_0x57A1 = field_0x57A0; + if (field_0x5794 == 11) { + mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(true); + mAnm[ITEM_SELECT_ANIM_IN].setFrame(0.0f); + mLyt.calc(); + mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(false); + mBtn[1].setVisible(false); + mBtn[2].setVisible(true); + } else { + mAnm[ITEM_SELECT_ANIM_OUT].setForwardOnce(); + mAnm[ITEM_SELECT_ANIM_OUT].setAnimEnable(true); + mAnm[ITEM_SELECT_ANIM_OUT].setToEnd2(); + mLyt.calc(); + mAnm[ITEM_SELECT_ANIM_OUT].setAnimEnable(false); + mBtn[2].setVisible(false); + field_0x57B3 = 0; + } + } + + if (mBtn[1].isSettled() && mBtn[0].isSettled()) { + mBtn[1].setVisible(false); + mBtn[0].setVisible(false); + if (field_0x57B3 == 0) { + if (mBtn[2].isSettled()) { + if (field_0x5794 != 11) { + mBtn[2].setVisible(false); + } else { + mBtn[2].setVisible(true); + } + mStateMgr.changeState(StateID_Unuse); + } + } else { + mStateMgr.changeState(StateID_Unuse); + } + } +} void dLytMeterItemSelect_c::finalizeState_ToUnuse() {} void dLytMeterItemSelect_c::initializeState_Unuse() {} -void dLytMeterItemSelect_c::executeState_Unuse() {} +void dLytMeterItemSelect_c::executeState_Unuse() { + if (isWheelBlockedByCurrentAction()) { + field_0x5768 = 1; + mBtn[2].setVisible(false); + mStateMgr.changeState(StateID_FrameOffIn); + } else if (field_0x57A2 != 0 || field_0x5754 == 1 || + (field_0x57A0 != 0 && (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || + (field_0x5794 != 10 && field_0x5794 != 9)))) { + fn_800F0310(); + } else if (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || field_0x5754 == 1) { + if (field_0x5794 != 11) { + if (field_0x5794 == 2 || field_0x5794 == 9 || field_0x5794 == 10) { + mStateMgr.changeState(StateID_SetSpecialItemIn); + return; + } + } else { + field_0x57B4 = 0; + } + mStateMgr.changeState(StateID_ToUse); + } +} void dLytMeterItemSelect_c::finalizeState_Unuse() {} -void dLytMeterItemSelect_c::initializeState_DemoMove() {} -void dLytMeterItemSelect_c::executeState_DemoMove() {} +void dLytMeterItemSelect_c::initializeState_DemoMove() { + mDemoMoveTimer = 0; + for (int i = 0; i < ITEM_SELECT_NUM_ITEMS; i++) { + if (field_0x5758 < 8) { + if (i == sDemoMoveIntsUnk[field_0x5758]) { + field_0x57A3[i] = false; + field_0x575C++; + } else { + field_0x57A3[i] = true; + } + } else if ((i == 0 || i == 2 || i == 3) && fn_800F01B0(i)) { + field_0x57A3[i] = false; + field_0x575C++; + } else { + field_0x57A3[i] = true; + } + mIsBocoburinLocked[i] = false; + } + + for (int i = 0; i < ITEM_SELECT_NUM_ITEMS; i++) { + if (fn_800F01B0(i)) { + if (fn_800F01E0(i) || field_0x57A3[i] == 0) { + if (isSlotBocoburinLocked(i)) { + mIsBocoburinLocked[i] = true; + mAnm[i + ITEM_SELECT_ANIM_HAVE_OFFSET].setFrame(0.0f); + } else { + mAnm[i + ITEM_SELECT_ANIM_HAVE_OFFSET].setFrame(1.0f); + } + } else { + mAnm[i + ITEM_SELECT_ANIM_HAVE_OFFSET].setFrame(0.0f); + } + } else { + mAnm[i + ITEM_SELECT_ANIM_HAVE_OFFSET].setFrame(1.0f); + } + + mAnm[i + ITEM_SELECT_ANIM_HAVE_OFFSET].setAnimEnable(true); + } + + realizeWheelItems(); + mpPanes[ITEM_SELECT_PANE_SET_BTN]->SetVisible(true); + mpPanes[ITEM_SELECT_PANE_B_BTN_1]->SetVisible(true); + mpPanes[ITEM_SELECT_PANE_ITEM_SELECT]->SetVisible(true); + field_0x57C5 = 1; + mpPanes[ITEM_SELECT_PANE_BTN_BG]->SetVisible(false); + mpPanes[ITEM_SELECT_PANE_BTN]->SetVisible(false); + mpPanes[ITEM_SELECT_PANE_INPUT]->SetVisible(false); + + mAnm[ITEM_SELECT_ANIM_IN].setForwardOnce(); + mAnm[ITEM_SELECT_ANIM_IN].setToEnd2(); + mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(true); + mLyt.calc(); + mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(false); + + for (int i = 0; i < ITEM_SELECT_NUM_ITEMS; i++) { + mAnm[i + ITEM_SELECT_ANIM_HAVE_OFFSET].setAnimEnable(false); + } + + SmallSoundManager::GetInstance()->playSound(SE_S_GET_ITEM_SET); +} +extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_740_; +void dLytMeterItemSelect_c::executeState_DemoMove() { + mDemoMoveTimer++; + if (mDemoMoveTimer == 15) { + for (int i = 0; i < ITEM_SELECT_NUM_ITEMS; i++) { + if (fn_800F01B0(i) && !field_0x57A3[i]) { + mAnm[i + ITEM_SELECT_ANIM_HAVE_OFFSET].setFrame(0.0f); + field_0x57A3[i] = true; + + field_0x575C--; + + mAnm[i + ITEM_SELECT_ANIM_HAVE_OFFSET].setAnimEnable(true); + mLyt.calc(); + mAnm[i + ITEM_SELECT_ANIM_HAVE_OFFSET].setAnimEnable(false); + + nw4r::math::MTX34 mtx = mpPanes[i + ITEM_SELECT_PANE_ICON_OFFSET]->GetGlobalMtx(); + mVec3_c pos(mtx._03, mtx._13, 0.0f); + EffectsStruct::fn_800298C0(PARTICLE_RESOURCE_ID_MAPPING_740_, &pos, nullptr, nullptr, nullptr, nullptr); + + if (mIsBocoburinLocked[i]) { + mIsBocoburinLocked[i] = false; + field_0x5799 = 11; + } else { + field_0x5799 = fn_800F0190(i); + field_0x5794 = field_0x5799; + } + } + } + realizeWheelItems(); + } + + if (mDemoMoveTimer > 80) { + mDemoMoveTimer = 0; + if (field_0x575C <= 0) { + mStateMgr.changeState(StateID_DemoOut0); + } + } +} void dLytMeterItemSelect_c::finalizeState_DemoMove() {} -void dLytMeterItemSelect_c::initializeState_DemoOut0() {} -void dLytMeterItemSelect_c::executeState_DemoOut0() {} +void dLytMeterItemSelect_c::initializeState_DemoOut0() { + if (field_0x5799 != 11) { + mAnm[ITEM_SELECT_ANIM_DECIDE].setAnimEnable(true); + mAnm[ITEM_SELECT_ANIM_DECIDE].setFrame(0.0f); + } else { + mAnm[ITEM_SELECT_ANIM_IN].setBackwardsOnce(); + mAnm[ITEM_SELECT_ANIM_IN].setToStart(); + mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(true); + } +} +void dLytMeterItemSelect_c::executeState_DemoOut0() { + if (field_0x5799 != 11) { + if (mAnm[ITEM_SELECT_ANIM_DECIDE].isEndReached()) { + if (!mBtn[1].getShouldBeVisible()) { + mBtn[1].setVisible(true, true); + } + mAnm[ITEM_SELECT_ANIM_DECIDE].setAnimEnable(false); + mStateMgr.changeState(StateID_DemoOut1); + } + + if (mAnm[ITEM_SELECT_ANIM_DECIDE].isEnabled()) { + mAnm[ITEM_SELECT_ANIM_DECIDE].play(); + } + } else { + if (mAnm[ITEM_SELECT_ANIM_IN].isStop2()) { + mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(false); + field_0x5754 = 4; + mStateMgr.changeState(StateID_Wait); + } + + if (mAnm[ITEM_SELECT_ANIM_IN].isEnabled()) { + mAnm[ITEM_SELECT_ANIM_IN].play(); + } + } +} void dLytMeterItemSelect_c::finalizeState_DemoOut0() {} -void dLytMeterItemSelect_c::initializeState_DemoOut1() {} -void dLytMeterItemSelect_c::executeState_DemoOut1() {} +void dLytMeterItemSelect_c::initializeState_DemoOut1() { + mAnm[ITEM_SELECT_ANIM_OUT].setForwardOnce(); + mAnm[ITEM_SELECT_ANIM_OUT].setAnimEnable(true); + mAnm[ITEM_SELECT_ANIM_OUT].setFrame(0.0f); +} +void dLytMeterItemSelect_c::executeState_DemoOut1() { + if (mAnm[ITEM_SELECT_ANIM_OUT].isEndReached()) { + mAnm[ITEM_SELECT_ANIM_OUT].setAnimEnable(false); + field_0x57B3 = 1; + field_0x5754 = 4; + field_0x5799 = 11; + mStateMgr.changeState(StateID_Wait); + } + + if (mAnm[ITEM_SELECT_ANIM_OUT].isEnabled()) { + mAnm[ITEM_SELECT_ANIM_OUT].play(); + } +} void dLytMeterItemSelect_c::finalizeState_DemoOut1() {} -void dLytMeterItemSelect_c::initializeState_FrameOffIn() {} -void dLytMeterItemSelect_c::executeState_FrameOffIn() {} +void dLytMeterItemSelect_c::initializeState_FrameOffIn() { + field_0x57C2 = 0; + if ((field_0x57B3 == 0 || (field_0x57B3 == 1 && field_0x57B4 == 1)) && field_0x5768 == 1) { + mBtn[0].setVisible(true, false); + mBtn[1].setVisible(true, false); + } + + if (field_0x5768 == 1) { + mBtn[0].setVisible(true, false); + } + + if (field_0x57B3 == 0) { + if (field_0x5794 == 11) { + mBtn[2].setVisible(false, false); + } else if (field_0x57B4 == 0) { + field_0x57C2 = 1; + mBtn[2].setVisible(false, true); + } + } + + if (field_0x57B3 == 0 && field_0x5794 != 11) { + mAnm[ITEM_SELECT_ANIM_RESET].setForwardOnce(); + mAnm[ITEM_SELECT_ANIM_RESET].setToStart(); + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(true); + } +} +void dLytMeterItemSelect_c::executeState_FrameOffIn() { + bool isDone = true; + if (!mBtn[0].isSettled()) { + isDone = false; + } + if (!mBtn[1].isSettled()) { + isDone = false; + } + if (!mBtn[2].isSettled()) { + isDone = false; + } + if (mAnm[ITEM_SELECT_ANIM_RESET].isEnabled()) { + if (mAnm[ITEM_SELECT_ANIM_RESET].isStop2()) { + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(false); + } else { + isDone = false; + } + } + + if (isDone) { + mStateMgr.changeState(StateID_FrameOffMove); + } + + if (mAnm[ITEM_SELECT_ANIM_RESET].isEnabled()) { + mAnm[ITEM_SELECT_ANIM_RESET].play(); + } +} void dLytMeterItemSelect_c::finalizeState_FrameOffIn() {} void dLytMeterItemSelect_c::initializeState_FrameOffMove() {} -void dLytMeterItemSelect_c::executeState_FrameOffMove() {} +void dLytMeterItemSelect_c::executeState_FrameOffMove() { + if (!dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10)) { + mBtn[1].setVisible(false, false); + mBtn[0].setVisible(false, false); + } else { + mBtn[1].setVisible(true, false); + mBtn[0].setVisible(true, false); + } + + if (!isWheelBlockedByCurrentAction()) { + mStateMgr.changeState(StateID_FrameOffOut); + } +} void dLytMeterItemSelect_c::finalizeState_FrameOffMove() {} -void dLytMeterItemSelect_c::initializeState_FrameOffOut() {} -void dLytMeterItemSelect_c::executeState_FrameOffOut() {} +void dLytMeterItemSelect_c::initializeState_FrameOffOut() { + if (!mpPanes[ITEM_SELECT_PANE_SET_BTN]->IsVisible()) { + mpPanes[ITEM_SELECT_PANE_SET_BTN]->SetVisible(true); + } + + if (field_0x57B3 == 0 && field_0x5794 != 11) { + if (field_0x57A0 != 0) { + field_0x57B3 = 1; + mAnm[ITEM_SELECT_ANIM_DECIDE].setAnimEnable(true); + mAnm[ITEM_SELECT_ANIM_DECIDE].setToEnd(); + mLyt.calc(); + mAnm[ITEM_SELECT_ANIM_DECIDE].setAnimEnable(false); + } else { + mAnm[ITEM_SELECT_ANIM_RESET].setBackwardsOnce(); + mAnm[ITEM_SELECT_ANIM_RESET].setToStart(); + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(true); + } + + if (!dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10)) { + mBtn[0].setVisible(false); + mBtn[1].setVisible(false); + mBtn[2].setVisible(false); + } else { + mBtn[0].setVisible(true, false); + mBtn[1].setVisible(true, false); + mBtn[3].setVisible(true); + mBtn[2].setVisible(false, false); + } + } else { + mBtn[0].setVisible(true, false); + mBtn[1].setVisible(true, false); + mBtn[3].setVisible(true); + if (field_0x5794 != 11) { + mBtn[2].setVisible(false, false); + } else { + mBtn[2].setVisible(true, false); + } + } +} +void dLytMeterItemSelect_c::executeState_FrameOffOut() { + bool isDone = true; + if (!mBtn[0].isSettled()) { + isDone = false; + } + if (!mBtn[1].isSettled()) { + isDone = false; + } + if (!mBtn[2].isSettled()) { + isDone = false; + } + + if (mAnm[ITEM_SELECT_ANIM_RESET].isEnabled()) { + if (mAnm[ITEM_SELECT_ANIM_RESET].isStop2()) { + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(false); + } else { + isDone = false; + } + } + + if (isDone) { + if (field_0x57C2 != 0) { + field_0x57C2 = 0; + } + + if (field_0x5768 == 1) { + mBtn[1].setVisible(false); + mStateMgr.changeState(StateID_Unuse); + } else if (!dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10)) { + mBtn[1].setVisible(false); + mStateMgr.changeState(StateID_Unuse); + } else { + mBtn[0].setVisible(true); + mBtn[1].setVisible(true); + mBtn[3].setVisible(true); + if (field_0x5794 != 11) { + mBtn[2].setVisible(false); + } else { + mBtn[2].setVisible(true); + } + mStateMgr.changeState(StateID_Wait); + } + } + + if (mAnm[ITEM_SELECT_ANIM_RESET].isEnabled()) { + mAnm[ITEM_SELECT_ANIM_RESET].play(); + } +} void dLytMeterItemSelect_c::finalizeState_FrameOffOut() {} bool dLytMeterItemSelect_c::build(d2d::ResAccIf_c *resAcc) { mLyt.setResAcc(resAcc); mLyt.build("remoConBtn_00.brlyt", nullptr); - for (int i = 0; i < 17; i++) { + for (int i = 0; i < ITEM_SELECT_NUM_PANES; i++) { mpPanes[i] = mLyt.findPane(sPaneNames[i]); } @@ -995,7 +1655,7 @@ bool dLytMeterItemSelect_c::build(d2d::ResAccIf_c *resAcc) { mAnm[i].setAnimEnable(false); } - for (int i = 0; i < 8; i++) { + for (int i = 0; i < ITEM_SELECT_NUM_ITEMS; i++) { mIcon[i].setAnm(&mAnm[i + ITEM_SELECT_ANIM_ITEM_ONOFF_OFFSET]); mIcon[i].init(); } @@ -1005,7 +1665,7 @@ bool dLytMeterItemSelect_c::build(d2d::ResAccIf_c *resAcc) { field_0x578C = 0; field_0x5790 = 0; - field_0x5784 = 0.0f; + field_0x5784 = 0.8f; field_0x5788 = 0; field_0x579B = 0; field_0x57BD = 0; @@ -1067,22 +1727,22 @@ bool dLytMeterItemSelect_c::build(d2d::ResAccIf_c *resAcc) { field_0x5799 = 11; field_0x579A = 11; - field_0x579C = fn_800F07D0(fn_800F0990(1)); - field_0x579D = fn_800F07D0(fn_800F0990(5)); - field_0x579E = fn_800F07D0(fn_800F0990(4)); - field_0x579F = fn_800F07D0(fn_800F0990(7)); + field_0x579C = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(1)); + field_0x579D = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(5)); + field_0x579E = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(4)); + field_0x579F = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(7)); field_0x57B3 = 0; field_0x57B4 = 0; - fn_800F0700(); - fn_800F0680(field_0x5796); + realizeWheelItems(); + setBtnItem(field_0x5796); mAnm[ITEM_SELECT_ANIM_NUMBERV].setAnimEnable(true); mAnm[ITEM_SELECT_ANIM_CALL].setToEnd(); mAnm[ITEM_SELECT_ANIM_CALL].setAnimEnable(true); - mpPanes[4]->SetVisible(true); + mpPanes[ITEM_SELECT_PANE_SET_BTN]->SetVisible(true); mAnm[ITEM_SELECT_ANIM_INPUT_OFFSET + 0].setAnimEnable(true); mAnm[ITEM_SELECT_ANIM_INPUT_OFFSET + 0].setToEnd(); @@ -1105,7 +1765,7 @@ bool dLytMeterItemSelect_c::build(d2d::ResAccIf_c *resAcc) { mAnm[ITEM_SELECT_ANIM_INPUT_OFFSET + 2].setAnimEnable(false); mAnm[ITEM_SELECT_ANIM_INPUT_OFFSET + 3].setAnimEnable(false); - mpPanes[4]->SetVisible(false); + mpPanes[ITEM_SELECT_PANE_SET_BTN]->SetVisible(false); field_0x57A0 = 0; field_0x57A1 = 0; @@ -1113,7 +1773,7 @@ bool dLytMeterItemSelect_c::build(d2d::ResAccIf_c *resAcc) { field_0x577C = 0.0f; field_0x5780 = 0.0f; - mpSomePane = nullptr; + mpOwnerPane = nullptr; field_0x57B9 = 0; field_0x57BA = 0; @@ -1123,7 +1783,7 @@ bool dLytMeterItemSelect_c::build(d2d::ResAccIf_c *resAcc) { field_0x576C = 0x98; field_0x5770 = 5; - fn_800F0440(0x98); + setBtnText(0x98); mStateMgr.changeState(StateID_InitWait); @@ -1166,16 +1826,16 @@ bool dLytMeterItemSelect_c::execute() { } field_0x57BF = field_0x57BE; - if (mpSomePane == nullptr) { + if (mpOwnerPane == nullptr) { return true; } - if (!mpSomePane->IsVisible()) { + if (!mpOwnerPane->IsVisible()) { if (*mStateMgr.getStateID() != StateID_DemoMove && *mStateMgr.getStateID() != StateID_DemoOut0 && *mStateMgr.getStateID() != StateID_DemoOut1 && field_0x57C5 != 0) { - mpPanes[6]->SetVisible(true); - mpPanes[7]->SetVisible(true); - mpPanes[8]->SetVisible(true); + mpPanes[ITEM_SELECT_PANE_BTN_BG]->SetVisible(true); + mpPanes[ITEM_SELECT_PANE_BTN]->SetVisible(true); + mpPanes[ITEM_SELECT_PANE_INPUT]->SetVisible(true); field_0x57C5 = 0; } if ((*mStateMgr.getStateID() == StateID_SetIn) || (*mStateMgr.getStateID() == StateID_Set) || @@ -1256,7 +1916,7 @@ bool dLytMeterItemSelect_c::execute() { mEffects.fn_80027320(0); field_0x57BD = 0; field_0x57BE = 0; - mpPanes[11]->SetAlpha(0xFF); + mpPanes[ITEM_SELECT_PANE_ICON_OFFSET + 2]->SetAlpha(0xFF); } mLyt.getLayout()->Animate(0); @@ -1285,7 +1945,7 @@ bool dLytMeterItemSelect_c::execute() { } if (*mStateMgr.getStateID() == StateID_SetSpecialItemIn) { mBtn[0].setVisible(true, true); - if (mpSomePane->GetAlpha() != 0xFF) { + if (mpOwnerPane->GetAlpha() != 0xFF) { if (mAnm[ITEM_SELECT_ANIM_OUT].isEnabled()) { mAnm[ITEM_SELECT_ANIM_OUT].setAnimEnable(false); } @@ -1294,7 +1954,7 @@ bool dLytMeterItemSelect_c::execute() { mAnm[ITEM_SELECT_ANIM_RESET].setToStart(); } - mpPanes[4]->SetVisible(true); + mpPanes[ITEM_SELECT_PANE_SET_BTN]->SetVisible(true); mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(true); mAnm[ITEM_SELECT_ANIM_IN].setFrame(0.0f); @@ -1305,7 +1965,7 @@ bool dLytMeterItemSelect_c::execute() { mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(false); mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(false); - mpPanes[4]->SetVisible(false); + mpPanes[ITEM_SELECT_PANE_SET_BTN]->SetVisible(false); field_0x57B3 = 0; field_0x579A = 11; mStateMgr.changeState(StateID_Wait); @@ -1349,28 +2009,28 @@ bool dLytMeterItemSelect_c::execute() { } else { field_0x57B4 = 1; } - fn_800F0680(field_0x5796); + setBtnItem(field_0x5796); b = true; - } else if (field_0x579C != fn_800F07D0(fn_800F0990(1))) { - field_0x579C = fn_800F07D0(fn_800F0990(1)); - fn_800F0680(field_0x5796); + } else if (field_0x579C != baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(1))) { + field_0x579C = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(1)); + setBtnItem(field_0x5796); b = true; - } else if (field_0x579D != fn_800F07D0(fn_800F0990(5))) { - field_0x579D = fn_800F07D0(fn_800F0990(5)); - fn_800F0680(field_0x5796); + } else if (field_0x579D != baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(5))) { + field_0x579D = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(5)); + setBtnItem(field_0x5796); b = true; - } else if (field_0x579E != fn_800F07D0(fn_800F0990(4))) { - field_0x579E = fn_800F07D0(fn_800F0990(4)); - fn_800F0680(field_0x5796); + } else if (field_0x579E != baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(4))) { + field_0x579E = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(4)); + setBtnItem(field_0x5796); b = true; - } else if (field_0x579F != fn_800F07D0(fn_800F0990(7))) { - field_0x579F = fn_800F07D0(fn_800F0990(7)); - fn_800F0680(field_0x5796); + } else if (field_0x579F != baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(7))) { + field_0x579F = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(7)); + setBtnItem(field_0x5796); b = true; } if (field_0x5797 != 11) { - fn_800EFAD0(fn_800F07D0(fn_800F0990(field_0x5797)), a); + realizeBtnNumberForLytIndex(baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(field_0x5797)), a); } if (field_0x57B6) { @@ -1396,9 +2056,9 @@ bool dLytMeterItemSelect_c::execute() { field_0x57B7 = false; } - fn_800EF7C0(); + realizeSelectedWheelItem(); mStateMgr.executeState(); - fn_800EF8C0(0); + fn_800EF8C0(false); // TODO maybe an inline s32 tmp; @@ -1473,7 +2133,7 @@ bool dLytMeterItemSelect_c::execute() { field_0x57BB = 0; if (*mStateMgr.getStateID() != StateID_InitWait) { - for (int i = 0; i < 8; i++) { + for (int i = 0; i < ITEM_SELECT_NUM_ITEMS; i++) { mIcon[i].execute(); } mBlink.execute(); @@ -1495,11 +2155,11 @@ bool dLytMeterItemSelect_c::execute() { mVec3_c t1(0.0f, 0.0f, 0.0f); t1.z = field_0x5778; - mpPanes[0]->SetRotate(t1); + mpPanes[ITEM_SELECT_PANE_ITEM_ARROW]->SetRotate(t1); mVec3_c t2(0.0f, 0.0f, 0.0f); t2.z = -field_0x5778; - mpPanes[1]->SetRotate(t2); - mpPanes[2]->SetRotate(t2); + mpPanes[ITEM_SELECT_PANE_ARROW_HAND]->SetRotate(t2); + mpPanes[ITEM_SELECT_PANE_N_BTN_0]->SetRotate(t2); f32 frame = mAnm[ITEM_SELECT_ANIM_ARROW].getAnimDuration(); if (field_0x577C < 0.0f) { @@ -1558,12 +2218,12 @@ bool dLytMeterItemSelect_c::execute() { *mStateMgr.getStateID() != StateID_Unuse) { if (field_0x576C != LytDoButtonRelated::get0x08()) { field_0x576C = LytDoButtonRelated::get0x08(); - fn_800F0440(field_0x576C); + setBtnText(field_0x576C); } } else { if (field_0x576C != 0x98) { field_0x576C = 0x98; - fn_800F0440(field_0x576C); + setBtnText(field_0x576C); } if (field_0x578C > 0) { @@ -1576,6 +2236,524 @@ bool dLytMeterItemSelect_c::execute() { } } - field_0x57C1 = fn_800F09E0(); + field_0x57C1 = isWheelBlockedByCurrentAction(); return true; } + +extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_717_; +void dLytMeterItemSelect_c::fn_800EF580() { + nw4r::math::MTX34 mtx = mpPanes[11]->GetGlobalMtx(); + mVec3_c pos(mtx._03, mtx._13, 0.0f); + mVec3_c scale(field_0x5784, field_0x5784, field_0x5784); + mEffects.fn_80029A70(PARTICLE_RESOURCE_ID_MAPPING_717_, &pos, nullptr, &scale, nullptr, nullptr); + + if (field_0x57C0 != 0) { + mEffects.fn_80026ED0(); + field_0x57C0 = 0; + } else { + if (field_0x57BE != field_0x57BF) { + if (field_0x57BE != 0) { + mEffects.fn_80026F10(); + } else { + mEffects.fn_80026ED0(); + } + } + } +} + +void dLytMeterItemSelect_c::fn_800EF6B0(u8 arg) { + if (field_0x5794 != 2 && field_0x5794 != 9 && field_0x5794 != 10) { + field_0x5798 = field_0x5794; + } + + if (field_0x5794 != arg) { + field_0x5795 = field_0x5794; + } + field_0x5794 = arg; +} + +void dLytMeterItemSelect_c::setOwnerPane(nw4r::lyt::Pane *p) { + mpOwnerPane = p; + for (int i = 0; i < 4; i++) { + mBtn[i].setOwnerPane(p); + } +} + +void dLytMeterItemSelect_c::fn_800EF710(u8 arg) { + field_0x57A0 = arg; +} + +void dLytMeterItemSelect_c::fn_800EF720(s32 arg) { + if (field_0x57B5 == 0 || *mStateMgr.getStateID() != StateID_InitWait) { + field_0x57B5 = 1; + field_0x574C = arg; + } +} + +void dLytMeterItemSelect_c::fn_800EF7A0(bool a, s32 b) { + if (field_0x5796 == b) { + field_0x57B6 = a; + } +} + +void dLytMeterItemSelect_c::realizeSelectedWheelItem() { + s32 selectedSlot = -1; + if (field_0x5754 == 0) { + for (int i = 0; i < ITEM_SELECT_NUM_ITEMS; i++) { + if (field_0x574C == fn_800F0170(i)) { + selectedSlot = i; + break; + } + } + } + + ITEM_ID id = static_cast(-1); + for (int i = 0; i < ITEM_SELECT_NUM_ITEMS; i++) { + if (selectedSlot == i) { + id = getBaseItemForBWheelSlot(selectedSlot); + mIcon[i].setShouldBeSelect(true); + } else { + mIcon[i].setShouldBeSelect(false); + } + } + + setCurrentItemText(baseItemIdToCurrentVariant(id)); + if (selectedSlot != -1 && field_0x5754 == 0) { + mBlink.setShouldBeSelect(true); + mText[0].setShouldBeSelect(true); + } else { + mBlink.setShouldBeSelect(false); + mText[0].setShouldBeSelect(false); + } +} + +void dLytMeterItemSelect_c::fn_800EF8C0(bool bInstant) { + bool visible = true; + if (dAcPy_c::GetLink2()->fn_80202D90(false)) { + mpPanes[10]->SetInfluencedAlpha(true); + mpPanes[10]->SetAlpha(64); + if (field_0x5794 == 0) { + visible = false; + } + } else { + mpPanes[10]->SetInfluencedAlpha(true); + mpPanes[10]->SetAlpha(0xFF); + } + + if (!mBtn[1].getShouldBeVisible() && dLytMeterContainer_c::GetInstance()->getMeterField_0x13770() != 1 && + dLytMeterContainer_c::GetInstance()->getMeterField_0x13770() != 2) { + visible = false; + } + if (bInstant == false) { + bInstant = mBtn[1].getInstant(); + } + + if (visible) { + mBtn[3].setVisible(true, bInstant); + } else { + mBtn[3].setVisible(false, bInstant); + } +} + +void dLytMeterItemSelect_c::realizeWheelNumberForLytIndex(s32 iconIdx, s32 lytItemIdx) { + if (lytItemIdx == LYT_CMN_ItemBombBag || lytItemIdx == LYT_CMN_ItemBow || lytItemIdx == LYT_CMN_ItemSlingshot || + lytItemIdx == LYT_CMN_ItemIronBow || lytItemIdx == LYT_CMN_ItemSacredBow || + lytItemIdx == LYT_CMN_ItemScattershot) { + s32 num = 0; + s32 max = 0; + switch (lytItemIdx) { + case LYT_CMN_ItemBombBag: + num = dAcItem_c::getTotalBombCount(); + max = dAcItem_c::getTotalBombCapacity(); + break; + case LYT_CMN_ItemBow: + case LYT_CMN_ItemIronBow: + case LYT_CMN_ItemSacredBow: + num = dAcItem_c::getTotalArrowCount(); + max = dAcItem_c::getTotalArrowCapacity(); + break; + case LYT_CMN_ItemSlingshot: + case LYT_CMN_ItemScattershot: + num = dAcItem_c::getTotalSeedCount(); + max = dAcItem_c::getTotalSeedCapacity(); + break; + } + + u8 color = 0; + if (num == 0) { + color = 1; + } else if (num == max) { + color = 2; + } + mItemIcons[iconIdx].setNumber(num); + mItemIcons[iconIdx].setNumberColor(color); + } +} + +void dLytMeterItemSelect_c::realizeBtnNumberForLytIndex(s32 lytItemIdx, bool b) { + if (lytItemIdx == LYT_CMN_ItemBombBag || lytItemIdx == LYT_CMN_ItemBow || lytItemIdx == LYT_CMN_ItemSlingshot || + lytItemIdx == LYT_CMN_ItemIronBow || lytItemIdx == LYT_CMN_ItemSacredBow || + lytItemIdx == LYT_CMN_ItemScattershot) { + s32 num = 0; + s32 max = 0; + switch (lytItemIdx) { + case LYT_CMN_ItemBombBag: + num = dAcItem_c::getTotalBombCount(); + max = dAcItem_c::getTotalBombCapacity(); + break; + case LYT_CMN_ItemBow: + case LYT_CMN_ItemIronBow: + case LYT_CMN_ItemSacredBow: + num = dAcItem_c::getTotalArrowCount(); + max = dAcItem_c::getTotalArrowCapacity(); + break; + case LYT_CMN_ItemSlingshot: + case LYT_CMN_ItemScattershot: + num = dAcItem_c::getTotalSeedCount(); + max = dAcItem_c::getTotalSeedCapacity(); + break; + } + + SizedWString<32> numberText; + numberText.sprintf(L"%d", num); + mpTextBoxes[0]->setTextWithGlobalTextProcessor(numberText, nullptr); + mpTextBoxes[1]->setTextWithGlobalTextProcessor(numberText, nullptr); + mpTextBoxes[2]->setTextWithGlobalTextProcessor(numberText, nullptr); + mpTextBoxes[3]->setTextWithGlobalTextProcessor(numberText, nullptr); + + s32 color = 0; + if (num == 0) { + color = 1; + } else if (num == max) { + color = 2; + } + + if (color != field_0x5764) { + if (!b && color == 2) { + field_0x57B7 = 1; + } + field_0x5764 = color; + } + + mAnm[ITEM_SELECT_ANIM_TEXTCOLOR].setFrame(color); + mAnm[ITEM_SELECT_ANIM_TEXTCOLOR].setAnimEnable(true); + mLyt.calc(); + mAnm[ITEM_SELECT_ANIM_TEXTCOLOR].setAnimEnable(false); + mAnm[ITEM_SELECT_ANIM_NUMBERV].setFrame(1.0f); + } else { + mAnm[ITEM_SELECT_ANIM_NUMBERV].setFrame(0.0f); + } +} + +void dLytMeterItemSelect_c::realizeWheelNumberVForLytIndex(s32 iconIdx, s32 lytItemIdx) { + if (!mIsBocoburinLocked[iconIdx] && + (lytItemIdx == LYT_CMN_ItemBombBag || lytItemIdx == LYT_CMN_ItemBow || lytItemIdx == LYT_CMN_ItemSlingshot || + lytItemIdx == LYT_CMN_ItemIronBow || lytItemIdx == LYT_CMN_ItemSacredBow || + lytItemIdx == LYT_CMN_ItemScattershot)) { + mItemIcons[iconIdx].setHasNumber(true); + } else { + mItemIcons[iconIdx].setHasNumber(false); + } +} + +bool dLytMeterItemSelect_c::fn_800EFDF0(bool b) const { + if (!mpOwnerPane->IsVisible()) { + return false; + } + + if (field_0x57A2 != 0) { + if (*mStateMgr.getStateID() == StateID_ToUse || *mStateMgr.getStateID() == StateID_InitWait || + *mStateMgr.getStateID() == StateID_Wait) { + return true; + } + } + + if (*mStateMgr.getStateID() == StateID_SelectIn || *mStateMgr.getStateID() == StateID_Select || + *mStateMgr.getStateID() == StateID_SelectOut) { + return true; + } + + if (!b && (*mStateMgr.getStateID() == StateID_SetIn || *mStateMgr.getStateID() == StateID_Set || + *mStateMgr.getStateID() == StateID_SetOut)) { + return true; + } + return false; +} + +bool dLytMeterItemSelect_c::fn_800F0030() const { + if (!StoryflagManager::sInstance->getCounterOrFlag(58) && + !(EventManager::isInEvent() && EventManager::isCurrentEvent("ItemGetGorgeous")) || + (mpOwnerPane == nullptr || !mpOwnerPane->IsVisible() || dLytMeterContainer_c::GetMeter()->fn_800D5650() || + dLytMeterContainer_c::GetMeter()->fn_800D5680() || + dLytMeterContainer_c::GetMeter()->getField_0x13792() == 0)) { + // If we don't have a B-Wheel and we're not currently in the ItemGetGorgeous event, + // or (random other conditions), return false + return false; + } + + return true; +} + +static const ITEM_ID sSlotToBaseItem[] = { + ITEM_BOW, ITEM_BOMB_BAG, ITEM_BEETLE, ITEM_BUG_NET, ITEM_SLINGSHOT, ITEM_CLAWSHOTS, ITEM_WHIP, ITEM_GUST_BELLOWS, +}; + +ITEM_ID dLytMeterItemSelect_c::getBaseItemForBWheelSlot(s32 idx) { + return sSlotToBaseItem[idx]; +} + +static s32 sUnkArray1[] = {1, 0, 3, 8, 4, 2, 6, 5}; + +s32 dLytMeterItemSelect_c::fn_800F0170(s32 slot) const { + return sUnkArray1[slot]; +} + +static s32 sUnkArray2[] = {1, 0, 4, 7, 5, 3, 8, 6}; + +u8 dLytMeterItemSelect_c::fn_800F0190(s32 idx) const { + return sUnkArray2[idx]; +} + +extern "C" s32 fn_801673B0(s32); + +bool dLytMeterItemSelect_c::fn_800F01B0(s32 arg) const { + return fn_801673B0(arg) != 0; +} + +extern "C" bool fn_80167780(s32, bool); + +bool dLytMeterItemSelect_c::fn_800F01E0(s32 arg) const { + return fn_80167780(arg, true); +} + +bool dLytMeterItemSelect_c::isSlotBocoburinLocked(s32 slot) { + return dAcPy_c::isItemRestrictedByBokoBase(getBaseItemForBWheelSlot(slot)); +} + +bool dLytMeterItemSelect_c::fn_800F0220(s32 arg) { + if (field_0x5754 == 0) { + field_0x5754 = 1; + + field_0x5758 = arg; + field_0x575C = 0; + field_0x5778 = 0.0f; + field_0x577C = 0.0f; + mpPanes[4]->SetVisible(false); + mpPanes[5]->SetVisible(false); + mpPanes[3]->SetVisible(false); + for (int i = 0; i < ITEM_SELECT_NUM_ITEMS; i++) { + mIcon[i].init(); + } + } else if (field_0x5754 == 4) { + field_0x5754 = 0; + return true; + } + return false; +} + +bool dLytMeterItemSelect_c::fn_800F02F0() const { + return field_0x5754 != 0; +} + +void dLytMeterItemSelect_c::fn_800F0310() { + mBtn[1].setVisible(false, true); + if (field_0x57B3 == 0) { + mBtn[0].setVisible(false, true); + mBtn[2].setVisible(false, true); + } + + mLyt.calc(); + + if (field_0x57B3 == 0 && field_0x57B4 != 0) { + mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(false); + field_0x57B4 = 0; + } + + if (field_0x5754 == 1) { + mStateMgr.changeState(StateID_DemoMove); + } else if (field_0x57A0 != 0) { + field_0x5780 = mAnm[ITEM_SELECT_ANIM_DECIDE].getAnimDuration(); + mStateMgr.changeState(StateID_SetIn); + } else { + mStateMgr.changeState(StateID_SelectIn); + } +} + +// TODO +static const s32 sActIds[] = { + 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF, 0x10, 0x11, 0x12, 0x13, + 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, + 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, + 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, -1, 0x1, + 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF, 0x10, 0x11, 0x12, 0x13, 0x14, + 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x0, 0x0, 0x0, 0x0, 0x0 +}; + +void dLytMeterItemSelect_c::setBtnText(s32 unkId) { + SizedString<16> id; + if (unkId < 0x98) { + mpTextBoxes[8]->SetVisible(true); + mpTextBoxes[9]->SetVisible(true); + mpWindows[0]->SetVisible(true); + mpTextBoxes[4]->SetVisible(true); + mpTextBoxes[5]->SetVisible(true); + mpWindows[3]->SetVisible(true); + if (unkId < 0x5D) { + id.sprintf("ACT_INFO_%03d", sActIds[unkId]); + } else { + unkId -= 0x5E; + id.sprintf("ACT_ETC_%03d", sActIds[unkId]); + } + mpTextBoxes[8]->setMessageWithGlobalTextProcessor2(id, nullptr); + mpTextBoxes[9]->setMessageWithGlobalTextProcessor2(id, nullptr); + mpWindows[0]->UpdateSize(mpSizeBoxes[0], 32.0f); + mpTextBoxes[4]->setMessageWithGlobalTextProcessor2(id, nullptr); + mpTextBoxes[5]->setMessageWithGlobalTextProcessor2(id, nullptr); + mpWindows[3]->UpdateSize(mpSizeBoxes[3], 32.0f); + } else { + const wchar_t *empty = L""; + mpTextBoxes[8]->setTextWithGlobalTextProcessor(empty, nullptr); + mpTextBoxes[9]->setTextWithGlobalTextProcessor(empty, nullptr); + mpTextBoxes[8]->SetVisible(false); + mpTextBoxes[9]->SetVisible(false); + mpWindows[0]->SetVisible(false); + mpTextBoxes[4]->setTextWithGlobalTextProcessor(empty, nullptr); + mpTextBoxes[5]->setTextWithGlobalTextProcessor(empty, nullptr); + mpTextBoxes[4]->SetVisible(false); + mpTextBoxes[5]->SetVisible(false); + mpWindows[3]->SetVisible(false); + } +} + +void dLytMeterItemSelect_c::setBtnItem(s32 unkId) { + if (unkId == 2 || unkId == 9 || unkId == 10) { + field_0x57B8 = 1; + } else { + field_0x57B8 = 0; + } + + if (unkId != 11) { + mItemIcons[8].setItem(baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(unkId))); + } +} + +static const s32 sSlotToBaseItemLytIdx[] = { + LYT_CMN_ItemBow, LYT_CMN_ItemBombBag, LYT_CMN_ItemBeetle, LYT_CMN_ItemBugnet, + LYT_CMN_ItemSlingshot, LYT_CMN_ItemClawshots, LYT_CMN_ItemWhip, LYT_CMN_ItemGustBellows, +}; + +void dLytMeterItemSelect_c::realizeWheelItems() { + for (int i = 0; i < ITEM_SELECT_NUM_ITEMS; i++) { + s32 lytItem = baseItemLytIndexToCurrentVariant(sSlotToBaseItemLytIdx[i]); + if (mIsBocoburinLocked[i]) { + mItemIcons[i].setBocoburinLocked(true); + } else { + mItemIcons[i].setBocoburinLocked(false); + } + mItemIcons[i].setUnk(false); + realizeWheelNumberVForLytIndex(i, lytItem); + realizeWheelNumberForLytIndex(i, lytItem); + mItemIcons[i].setItem(lytItem); + } +} + +s32 dLytMeterItemSelect_c::baseItemLytIndexToCurrentVariant(s32 baseItem) const { + if (baseItem == LYT_CMN_ItemBow) { + switch (dAcPy_c::getCurrentBowType()) { + case 2: return LYT_CMN_ItemIronBow; + case 3: return LYT_CMN_ItemSacredBow; + } + } else if (baseItem == LYT_CMN_ItemSlingshot) { + switch (dAcPy_c::getCurrentSlingshotType()) { + case 2: return LYT_CMN_ItemScattershot; + } + } else if (baseItem == LYT_CMN_ItemBeetle) { + switch (dAcPy_c::getCurrentBeetleType()) { + case 2: return LYT_CMN_ItemHookBeetle; + case 3: return LYT_CMN_ItemQuickBeetle; + case 4: return LYT_CMN_ItemToughBeetle; + } + } else if (baseItem == LYT_CMN_ItemBugnet) { + switch (dAcPy_c::getCurrentBugNetType()) { + case 2: return LYT_CMN_ItemBigBugnet; + } + } + return baseItem; +} + +ITEM_ID dLytMeterItemSelect_c::baseItemIdToCurrentVariant(ITEM_ID baseItem) const { + if (baseItem == ITEM_BOW) { + switch (dAcPy_c::getCurrentBowType()) { + case 2: return ITEM_IRON_BOW; + case 3: return ITEM_SACRED_BOW; + } + } else if (baseItem == ITEM_SLINGSHOT) { + switch (dAcPy_c::getCurrentSlingshotType()) { + case 2: return ITEM_MIGHTY_SCATTERSHOT; + } + } else if (baseItem == ITEM_BEETLE) { + switch (dAcPy_c::getCurrentBeetleType()) { + case 2: return ITEM_HOOK_BEETLE; + case 3: return ITEM_QUICK_BEETLE; + case 4: return ITEM_TOUGH_BEETLE; + } + } else if (baseItem == ITEM_BUG_NET) { + switch (dAcPy_c::getCurrentBugNetType()) { + case 2: return ITEM_BIG_BUG_NET; + } + } + return baseItem; +} + +static const s32 sUnkIdItemLytIndex[] = { + LYT_CMN_ItemBombBag, LYT_CMN_ItemBow, LYT_CMN_ItemSailcloth, LYT_CMN_ItemClawshots, + LYT_CMN_ItemBeetle, LYT_CMN_ItemSlingshot, LYT_CMN_ItemGustBellows, LYT_CMN_ItemBugnet, + LYT_CMN_ItemWhip, LYT_CMN_ItemBoatCannon, LYT_CMN_ItemHarp, +}; + +s32 dLytMeterItemSelect_c::getBaseItemLytIndexforUnkId(s32 idx) const { + if (idx < 11) { + return sUnkIdItemLytIndex[idx]; + } else if (field_0x5797 != 11) { + return sUnkIdItemLytIndex[field_0x5797]; + } + + return LYT_CMN_ItemNone; +} + +extern "C" bool checkIsInSkykeepPuzzle(); + +bool dLytMeterItemSelect_c::isWheelBlockedByCurrentAction() { + if (dAcPy_c::LINK->getRidingActorType() == 2 || dAcPy_c::LINK->checkActionFlags(dAcPy_c::FLG0_SWING_ROPE) || + dAcPy_c::LINK->checkCurrentAction(0x9C) || dAcPy_c::LINK->getRidingActorType() == 1 || + dAcPy_c::LINK->checkCurrentAction(0x95) || isInSpiralChargeTutorialMinigame() || isInRollercoasterMinigame() || + dAcPy_c::LINK->checkCurrentAction(0x8C) || dLytMeterContainer_c::GetMeter()->getField_0x1377E() != 0 || + checkIsInSkykeepPuzzle() || dLytMeterContainer_c::GetInstance()->getMeterField_0x13770() == 0) { + return true; + } + + return false; +} + +bool dLytMeterItemSelect_c::isInSpiralChargeTutorialMinigame() { + return MinigameManager::isInMinigameState(MinigameManager::SPIRAL_CHARGE_TUTORIAL); +} + +bool dLytMeterItemSelect_c::isInRollercoasterMinigame() { + return MinigameManager::isInMinigameState(MinigameManager::ROLLERCOASTER); +} + +void dLytMeterItemSelect_c::setCurrentItemText(ITEM_ID item) { + if (item >= ITEM_NONE && field_0x5754 == 0) { + mText[1].setShouldBeSelect(true); + SizedString<16> msg; + msg.sprintf("NAME_ITEM_%03d", item); + mpTextBoxes[6]->setMessageWithGlobalTextProcessor2(msg, nullptr); + mpTextBoxes[7]->setMessageWithGlobalTextProcessor2(msg, nullptr); + mpWindows[2]->UpdateSize(mpSizeBoxes[2], 32.0f); + } else { + mText[1].setShouldBeSelect(false); + } +} diff --git a/src/toBeSorted/special_item_drop_mgr.cpp b/src/toBeSorted/special_item_drop_mgr.cpp index add2324c..86906f3e 100644 --- a/src/toBeSorted/special_item_drop_mgr.cpp +++ b/src/toBeSorted/special_item_drop_mgr.cpp @@ -385,8 +385,6 @@ static const struct { }; static const u16 RAND_RUPEE_ARRAY[3] = {ITEM_GREEN_RUPEE, ITEM_BLUE_RUPEE, ITEM_RED_RUPEE}; -extern "C" int getCurrentBowType(); -extern "C" int getCurrentSlingshotType(); extern "C" bool isHeroMode(); // 800c7bb0 @@ -402,12 +400,12 @@ int SpecialItemDropMgr::fn_800C7BB0(int specialItemId) { int weight = e->mDropChance; if (entryIdx == 9 || entryIdx == 10) { - if (getCurrentBowType() == 0) { + if (dAcPy_c::getCurrentBowType() == 0) { // No arrows until you get the Bow weight = 0; } } else if (entryIdx == 11) { - if (getCurrentSlingshotType() == 0) { + if (dAcPy_c::getCurrentSlingshotType() == 0) { // No seeds until you get the Slingshot weight = 0; }