d_a_item -> Layout and Enum (#92)

* mostly done

* Update d_t_tumble_weed.cpp

* remove cM::calcTimer

* just regswap on adjustSpeed

* checkpoint

* file setup

* fix incorrect symbol

* some tidbits i guess

* fixup merge

* fix merge 2.0

* Item Renames from Esme

* fix d_t_tumble_weed

* fixup merge
This commit is contained in:
Elijah Thomas
2024-11-09 11:53:22 -05:00
committed by GitHub
parent a3472ab02d
commit 126e1a9fd7
22 changed files with 1641 additions and 189 deletions
+6 -1
View File
@@ -590,9 +590,14 @@ d/a/d_a_player.cpp:
.text start:0x801C5C30 end:0x802471F8
.ctors start:0x804DB824 end:0x804DB828
d/a/obj/d_a_obj_item.cpp:
d/a/d_a_item.cpp:
.text start:0x80247200 end:0x80258E58
.ctors start:0x804DB828 end:0x804DB82C
.rodata start:0x804EBBB0 end:0x804ED33C
.data start:0x80533268 end:0x80534490
.sbss start:0x805758B8 end:0x805758E0
.sdata2 start:0x8057BD88 end:0x8057BF7C
.bss start:0x805B4490 end:0x805B48A8
d/a/obj/d_a_obj_bomb.cpp:
.text start:0x80258E60 end:0x8025D5D8
+77 -77
View File
@@ -13342,7 +13342,7 @@ increment = .text:0x80247EC0; // type:function size:0x28
fn_80247EF0 = .text:0x80247EF0; // type:function size:0xA4
fn_80247FA0 = .text:0x80247FA0; // type:function size:0x8
fn_80247FB0 = .text:0x80247FB0; // type:function size:0x8
AcItem__ctor = .text:0x80247FC0; // type:function size:0x30
dAcItem_c_classInit__Fv = .text:0x80247FC0; // type:function size:0x30
AcItem__dontForceDemo = .text:0x80247FF0; // type:function size:0x8
AcItem__shouldForceDemo = .text:0x80248000; // type:function size:0x8
fn_80248010 = .text:0x80248010; // type:function size:0x8
@@ -13351,13 +13351,13 @@ fn_80248030 = .text:0x80248030; // type:function size:0x8
fn_80248040 = .text:0x80248040; // type:function size:0x8
fn_80248050 = .text:0x80248050; // type:function size:0x8
fn_80248060 = .text:0x80248060; // type:function size:0x8
AcItem__ctorCont = .text:0x80248070; // type:function size:0x1FC
__ct__9dAcItem_cFv = .text:0x80248070; // type:function size:0x1FC
fn_80248270 = .text:0x80248270; // type:function size:0x58
fn_802482D0 = .text:0x802482D0; // type:function size:0x58
fn_80248330 = .text:0x80248330; // type:function size:0x6C
fn_802483A0 = .text:0x802483A0; // type:function size:0xA0
fn_80248440 = .text:0x80248440; // type:function size:0xA4
fn_802484F0 = .text:0x802484F0; // type:function size:0x248
__dt__21sFState_c<9dAcItem_c>Fv = .text:0x802482D0; // type:function size:0x58
__dt__24sFStateFct_c<9dAcItem_c>Fv = .text:0x80248330; // type:function size:0x6C
__dt__77sStateMgr_c<9dAcItem_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x802483A0; // type:function size:0xA0
__dt__47sFStateMgr_c<9dAcItem_c,20sStateMethodUsr_FI_c>Fv = .text:0x80248440; // type:function size:0xA4
__dt__9dAcItem_cFv = .text:0x802484F0; // type:function size:0x248
fn_80248740 = .text:0x80248740; // type:function size:0x40
fn_80248780 = .text:0x80248780; // type:function size:0x40
AcItem__spawnItem = .text:0x802487C0; // type:function size:0x170
@@ -13402,11 +13402,11 @@ AcItem__getItemListElement = .text:0x8024A450; // type:function size:0x8
AcItem__getFinalDeterminedItemId = .text:0x8024A460; // type:function size:0x8
AcItem__initModels = .text:0x8024A470; // type:function size:0x75C
AcItem__init = .text:0x8024ABD0; // type:function size:0x2888
changeStateFromEventMaybeMaybe = .text:0x8024D460; // type:function size:0x10
fn_8024D470 = .text:0x8024D470; // type:function size:0x10
changeState__77sStateMgr_c<9dAcItem_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x8024D460; // type:function size:0x10
getStateID__77sStateMgr_c<9dAcItem_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8024D470; // type:function size:0x10
AcItem__destroy = .text:0x8024D480; // type:function size:0xEC
AcItem__update = .text:0x8024D570; // type:function size:0x66C
fn_8024DBE0 = .text:0x8024DBE0; // type:function size:0x10
executeState__77sStateMgr_c<9dAcItem_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8024DBE0; // type:function size:0x10
AcItem__draw = .text:0x8024DBF0; // type:function size:0x304
setNumberOfItems = .text:0x8024DF00; // type:function size:0x8
AcItem__setFreestandingYOffset = .text:0x8024DF10; // type:function size:0x8
@@ -13416,42 +13416,42 @@ isItemDropFromEnemy = .text:0x8024DF40; // type:function size:0x24
resetNumberOfItems = .text:0x8024DF70; // type:function size:0xC
AcItem__resetFramesInAir = .text:0x8024DF80; // type:function size:0x8
AcItem__incrementFramesInAir = .text:0x8024DF90; // type:function size:0x44
AcItem__stateWaitEnter = .text:0x8024DFE0; // type:function size:0xA8
AcItem__stateWaitUpdate = .text:0x8024E090; // type:function size:0x10AC
AcItem__stateWaitLeave = .text:0x8024F140; // type:function size:0x7C
AcItem__stateCarryEnter = .text:0x8024F1C0; // type:function size:0x94
AcItem__stateCarryUpdate = .text:0x8024F260; // type:function size:0x2D0
AcItem__stateCarryLeave = .text:0x8024F530; // type:function size:0x4
AcItem__stateGetBeetleEnter = .text:0x8024F540; // type:function size:0x120
AcItem__stateGetBeetleUpdate = .text:0x8024F660; // type:function size:0x194
AcItem__stateGetBeetleLeave = .text:0x8024F800; // type:function size:0x4
AcItem__stateWaitGetEnter = .text:0x8024F810; // type:function size:0x48
AcItem__stateWaitGetUpdate = .text:0x8024F860; // type:function size:0x90
AcItem__stateWaitGetLeave = .text:0x8024F8F0; // type:function size:0x10
AcItem__stateGetEnter = .text:0x8024F900; // type:function size:0xAC
AcItem__stateGetUpdate = .text:0x8024F9B0; // type:function size:0x70
AcItem__stateGetLeave = .text:0x8024FA20; // type:function size:0x4
AcItem__stateWaitGetDemoEnter = .text:0x8024FA30; // type:function size:0x7C
AcItem__stateWaitGetDemoUpdate = .text:0x8024FAB0; // type:function size:0x14C
AcItem__stateWaitGetDemoLeave = .text:0x8024FC00; // type:function size:0x4
AcItem__stateWaitForcedGetEnter = .text:0x8024FC10; // type:function size:0x74
AcItem__stateWaitForcedGetUpdate = .text:0x8024FC90; // type:function size:0x68
AcItem__stateWaitForcedGetLeave = .text:0x8024FD00; // type:function size:0x4
AcItem__stateGetDemoEnter = .text:0x8024FD10; // type:function size:0x2EC
AcItem__stateGetDemoUpdate = .text:0x80250000; // type:function size:0x274
AcItem__stateGetDemoLeave = .text:0x80250280; // type:function size:0x84
AcItem__stateWaitTboxGetDemoEnter = .text:0x80250310; // type:function size:0x74
AcItem__stateWaitTboxGetDemoUpdate = .text:0x80250390; // type:function size:0x88
AcItem__stateWaitTboxGetDemoLeave = .text:0x80250420; // type:function size:0x4
AcItem__stateResurgeWaitEnter = .text:0x80250430; // type:function size:0xA4
AcItem__stateResurgeWaitUpdate = .text:0x802504E0; // type:function size:0xA4
AcItem__stateResurgeWaitLeave = .text:0x80250590; // type:function size:0x4
AcItem__stateWaitTurnOffEnter = .text:0x802505A0; // type:function size:0x64
AcItem__stateWaitTurnOffUpdate = .text:0x80250610; // type:function size:0x20
AcItem__stateWaitTurnOffLeave = .text:0x80250630; // type:function size:0x4
AcItem__stateWaitSacredDewGetEffectEnter = .text:0x80250640; // type:function size:0x64
AcItem__stateWaitSacredDewGetEffectUpdate = .text:0x802506B0; // type:function size:0x80
AcItem__stateWaitSacredDewGetEffectLeave = .text:0x80250730; // type:function size:0x4
initializeState_Wait__9dAcItem_cFv = .text:0x8024DFE0; // type:function size:0xA8
executeState_Wait__9dAcItem_cFv = .text:0x8024E090; // type:function size:0x10AC
finalizeState_Wait__9dAcItem_cFv = .text:0x8024F140; // type:function size:0x7C
initializeState_Carry__9dAcItem_cFv = .text:0x8024F1C0; // type:function size:0x94
executeState_Carry__9dAcItem_cFv = .text:0x8024F260; // type:function size:0x2D0
finalizeState_Carry__9dAcItem_cFv = .text:0x8024F530; // type:function size:0x4
initializeState_GetBeetle__9dAcItem_cFv = .text:0x8024F540; // type:function size:0x120
executeState_GetBeetle__9dAcItem_cFv = .text:0x8024F660; // type:function size:0x194
finalizeState_GetBeetle__9dAcItem_cFv = .text:0x8024F800; // type:function size:0x4
initializeState_WaitGet__9dAcItem_cFv = .text:0x8024F810; // type:function size:0x48
executeState_WaitGet__9dAcItem_cFv = .text:0x8024F860; // type:function size:0x90
finalizeState_WaitGet__9dAcItem_cFv = .text:0x8024F8F0; // type:function size:0x10
initializeState_Get__9dAcItem_cFv = .text:0x8024F900; // type:function size:0xAC
executeState_Get__9dAcItem_cFv = .text:0x8024F9B0; // type:function size:0x70
finalizeState_Get__9dAcItem_cFv = .text:0x8024FA20; // type:function size:0x4
initializeState_WaitGetDemo__9dAcItem_cFv = .text:0x8024FA30; // type:function size:0x7C
executeState_WaitGetDemo__9dAcItem_cFv = .text:0x8024FAB0; // type:function size:0x14C
finalizeState_WaitGetDemo__9dAcItem_cFv = .text:0x8024FC00; // type:function size:0x4
initializeState_WaitForcedGetDemo__9dAcItem_cFv = .text:0x8024FC10; // type:function size:0x74
executeState_WaitForcedGetDemo__9dAcItem_cFv = .text:0x8024FC90; // type:function size:0x68
finalizeState_WaitForcedGetDemo__9dAcItem_cFv = .text:0x8024FD00; // type:function size:0x4
initializeState_GetDemo__9dAcItem_cFv = .text:0x8024FD10; // type:function size:0x2EC
executeState_GetDemo__9dAcItem_cFv = .text:0x80250000; // type:function size:0x274
finalizeState_GetDemo__9dAcItem_cFv = .text:0x80250280; // type:function size:0x84
initializeState_WaitTBoxGetDemo__9dAcItem_cFv = .text:0x80250310; // type:function size:0x74
executeState_WaitTBoxGetDemo__9dAcItem_cFv = .text:0x80250390; // type:function size:0x88
finalizeState_WaitTBoxGetDemo__9dAcItem_cFv = .text:0x80250420; // type:function size:0x4
initializeState_ResurgeWait__9dAcItem_cFv = .text:0x80250430; // type:function size:0xA4
executeState_ResurgeWait__9dAcItem_cFv = .text:0x802504E0; // type:function size:0xA4
finalizeState_ResurgeWait__9dAcItem_cFv = .text:0x80250590; // type:function size:0x4
initializeState_WaitTurnOff__9dAcItem_cFv = .text:0x802505A0; // type:function size:0x64
executeState_WaitTurnOff__9dAcItem_cFv = .text:0x80250610; // type:function size:0x20
finalizeState_WaitTurnOff__9dAcItem_cFv = .text:0x80250630; // type:function size:0x4
initializeState_WaitSacredDewGetEffect__9dAcItem_cFv = .text:0x80250640; // type:function size:0x64
executeState_WaitSacredDewGetEffect__9dAcItem_cFv = .text:0x802506B0; // type:function size:0x80
finalizeState_WaitSacredDewGetEffect__9dAcItem_cFv = .text:0x80250730; // type:function size:0x4
getItemFromBWheelItem__9dAcItem_cFv = .text:0x80250740; // type:function size:0xEC
setItemPosition__9dAcItem_cFRC7mVec3_c = .text:0x80250830; // type:function size:0x40
fn_80250870 = .text:0x80250870; // type:function size:0x38
@@ -13953,27 +13953,27 @@ fn_80257C20 = .text:0x80257C20; // type:function size:0x40
fn_80257C60 = .text:0x80257C60; // type:function size:0x40
fn_80257CA0 = .text:0x80257CA0; // type:function size:0x40
fn_80257CE0 = .text:0x80257CE0; // type:function size:0x40
fn_80257D20 = .text:0x80257D20; // type:function size:0x60
fn_80257D80 = .text:0x80257D80; // type:function size:0xC
fn_80257D90 = .text:0x80257D90; // type:function size:0x1C
fn_80257DB0 = .text:0x80257DB0; // type:function size:0x1C
fn_80257DD0 = .text:0x80257DD0; // type:function size:0x1C
fn_80257DF0 = .text:0x80257DF0; // type:function size:0x10
fn_80257E00 = .text:0x80257E00; // type:function size:0x10
fn_80257E10 = .text:0x80257E10; // type:function size:0x10
fn_80257E20 = .text:0x80257E20; // type:function size:0x10
fn_80257E30 = .text:0x80257E30; // type:function size:0x10
fn_80257E40 = .text:0x80257E40; // type:function size:0x10
fn_80257E50 = .text:0x80257E50; // type:function size:0x30
fn_80257E80 = .text:0x80257E80; // type:function size:0x30
fn_80257EB0 = .text:0x80257EB0; // type:function size:0x30
AcItem__sinit = .text:0x80257EE0; // type:function size:0xDD0
build__24sFStateFct_c<9dAcItem_c>FRC12sStateIDIf_c = .text:0x80257D20; // type:function size:0x60
dispose__24sFStateFct_c<9dAcItem_c>FRP10sStateIf_c = .text:0x80257D80; // type:function size:0xC
initialize__21sFState_c<9dAcItem_c>Fv = .text:0x80257D90; // type:function size:0x1C
execute__21sFState_c<9dAcItem_c>Fv = .text:0x80257DB0; // type:function size:0x1C
finalize__21sFState_c<9dAcItem_c>Fv = .text:0x80257DD0; // type:function size:0x1C
initializeState__77sStateMgr_c<9dAcItem_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80257DF0; // type:function size:0x10
finalizeState__77sStateMgr_c<9dAcItem_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80257E00; // type:function size:0x10
refreshState__77sStateMgr_c<9dAcItem_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80257E10; // type:function size:0x10
getState__77sStateMgr_c<9dAcItem_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80257E20; // type:function size:0x10
getNewStateID__77sStateMgr_c<9dAcItem_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80257E30; // type:function size:0x10
getOldStateID__77sStateMgr_c<9dAcItem_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80257E40; // type:function size:0x10
finalizeState__23sFStateID_c<9dAcItem_c>CFR9dAcItem_c = .text:0x80257E50; // type:function size:0x30
executeState__23sFStateID_c<9dAcItem_c>CFR9dAcItem_c = .text:0x80257E80; // type:function size:0x30
initializeState__23sFStateID_c<9dAcItem_c>CFR9dAcItem_c = .text:0x80257EB0; // type:function size:0x30
__sinit_\d_a_item_cpp = .text:0x80257EE0; // type:function size:0xDD0 scope:local
fn_80258CB0 = .text:0x80258CB0; // type:function size:0x1C
fn_80258CD0 = .text:0x80258CD0; // type:function size:0x40
fn_80258D10 = .text:0x80258D10; // type:function size:0x1C
fn_80258D30 = .text:0x80258D30; // type:function size:0x40
AcItem__state_dtor = .text:0x80258D70; // type:function size:0x58
fn_80258DD0 = .text:0x80258DD0; // type:function size:0x88
__dt__23sFStateID_c<9dAcItem_c>Fv = .text:0x80258D70; // type:function size:0x58
isSameName__23sFStateID_c<9dAcItem_c>CFPCc = .text:0x80258DD0; // type:function size:0x88
dAcBomb_c_classInit__Fv = .text:0x80258E60; // type:function size:0x134
__dt__21sFState_c<9dAcBomb_c>Fv = .text:0x80258FA0; // type:function size:0x58
fn_80259000 = .text:0x80259000; // type:function size:0x6C
@@ -25413,7 +25413,7 @@ GetBasicPlayer__Q44nw4r3snd6detail8SeqSoundFv = .text:0x80473120; // type:functi
GetBasicPlayer__Q44nw4r3snd6detail8SeqSoundCFv = .text:0x80473130; // type:function size:0x8
IsPrepared__Q44nw4r3snd6detail8SeqSoundCFv = .text:0x80473140; // type:function size:0x8
GetRuntimeTypeInfo__Q44nw4r3snd6detail8SeqSoundCFv = .text:0x80473150; // type:function size:0x8 scope:weak
__sinit_snd_SeqSound_cpp = .text:0x80473160; // type:function size:0xC
__sinit_snd_SeqSound_cpp = .text:0x80473160; // type:function size:0xC scope:local
__ct__Q34nw4r3snd14SeqSoundHandleFPQ34nw4r3snd11SoundHandle = .text:0x80473170; // type:function size:0xF4
DetachSound__Q34nw4r3snd14SeqSoundHandleFv = .text:0x80473270; // type:function size:0x38
SetPlayerTrackNo__Q44nw4r3snd6detail8SeqTrackFi = .text:0x804732B0; // type:function size:0x8
@@ -25472,7 +25472,7 @@ detail_AllocAmbientArg__Q34nw4r3snd14Sound3DManagerFUl = .text:0x80475E70; // ty
detail_FreeAmbientArg__Q34nw4r3snd14Sound3DManagerFPvPCQ44nw4r3snd6detail10BasicSound = .text:0x80475EE0; // type:function size:0x14
SetBiquadFilterType__Q34nw4r3snd14Sound3DManagerFi = .text:0x80475F00; // type:function size:0x8
__ct__Q34nw4r3snd12Sound3DParamFv = .text:0x80475F10; // type:function size:0x28
__sinit_snd_Sound3DManager_cpp = .text:0x80475F40; // type:function size:0xC
__sinit_snd_Sound3DManager_cpp = .text:0x80475F40; // type:function size:0xC scope:local
@4@detail_FreeAmbientArg__Q34nw4r3snd14Sound3DManagerFPvPCQ44nw4r3snd6detail10BasicSound = .text:0x80475F50; // type:function size:0x8
@4@detail_AllocAmbientArg__Q34nw4r3snd14Sound3DManagerFUl = .text:0x80475F60; // type:function size:0x8
@4@__dt__Q34nw4r3snd14Sound3DManagerFv = .text:0x80475F70; // type:function size:0x8
@@ -25628,7 +25628,7 @@ GetRequiredMemSize__Q34nw4r3snd11SoundSystemFRCQ44nw4r3snd11SoundSystem16SoundSy
InitSoundSystem__Q34nw4r3snd11SoundSystemFRCQ44nw4r3snd11SoundSystem16SoundSystemParamPvUl = .text:0x8047C480; // type:function size:0x1AC
IsInitializedSoundSystem__Q34nw4r3snd11SoundSystemFv = .text:0x8047C630; // type:function size:0x8
WaitForResetReady__Q34nw4r3snd11SoundSystemFv = .text:0x8047C640; // type:function size:0x74
__sinit_snd_SoundSystem_cpp = .text:0x8047C6C0; // type:function size:0x48
__sinit_snd_SoundSystem_cpp = .text:0x8047C6C0; // type:function size:0x48 scope:local
GetInstance__Q44nw4r3snd6detail11SoundThreadFv = .text:0x8047C710; // type:function size:0xB8
__dt__Q44nw4r3snd6detail11SoundThreadFv = .text:0x8047C7D0; // type:function size:0x70
Create__Q44nw4r3snd6detail11SoundThreadFlPvUl = .text:0x8047C840; // type:function size:0x12C
@@ -25713,7 +25713,7 @@ GetBasicPlayer__Q44nw4r3snd6detail9StrmSoundFv = .text:0x80480D40; // type:funct
GetBasicPlayer__Q44nw4r3snd6detail9StrmSoundCFv = .text:0x80480D50; // type:function size:0x8
IsPrepared__Q44nw4r3snd6detail9StrmSoundCFv = .text:0x80480D60; // type:function size:0x8
GetRuntimeTypeInfo__Q44nw4r3snd6detail9StrmSoundCFv = .text:0x80480D70; // type:function size:0x8 scope:weak
__sinit_snd_StrmSound_cpp = .text:0x80480D80; // type:function size:0xC
__sinit_snd_StrmSound_cpp = .text:0x80480D80; // type:function size:0xC scope:local
__ct__Q34nw4r3snd15StrmSoundHandleFPQ34nw4r3snd11SoundHandle = .text:0x80480D90; // type:function size:0xF4
DetachSound__Q34nw4r3snd15StrmSoundHandleFv = .text:0x80480E90; // type:function size:0x38
__dt__Q44nw4r3snd6detail4TaskFv = .text:0x80480ED0; // type:function size:0x40
@@ -25816,7 +25816,7 @@ GetBasicPlayer__Q44nw4r3snd6detail9WaveSoundFv = .text:0x804852D0; // type:funct
GetBasicPlayer__Q44nw4r3snd6detail9WaveSoundCFv = .text:0x804852E0; // type:function size:0x8
IsPrepared__Q44nw4r3snd6detail9WaveSoundCFv = .text:0x804852F0; // type:function size:0x8
GetRuntimeTypeInfo__Q44nw4r3snd6detail9WaveSoundCFv = .text:0x80485300; // type:function size:0x8 scope:weak
__sinit_snd_WaveSound_cpp = .text:0x80485310; // type:function size:0xC
__sinit_snd_WaveSound_cpp = .text:0x80485310; // type:function size:0xC scope:local
detail_AttachSoundAsTempHandle__Q34nw4r3snd15WaveSoundHandleFPQ44nw4r3snd6detail9WaveSound = .text:0x80485320; // type:function size:0xF4
DetachSound__Q34nw4r3snd15WaveSoundHandleFv = .text:0x80485420; // type:function size:0x38
__ct__Q44nw4r3snd6detail13WsdFileReaderFPCv = .text:0x80485460; // type:function size:0x90
@@ -28524,8 +28524,8 @@ lbl_804EBB94 = .rodata:0x804EBB94; // type:object size:0xC data:float
lbl_804EBBA0 = .rodata:0x804EBBA0; // type:object size:0x10
ITEM_INIT_STRUCTS = .rodata:0x804EBBB0; // type:object size:0x87C
DEFAULT_ITEM_INIT_STRUCT = .rodata:0x804EC42C; // type:object size:0x14
ITEM_FLAG_STRUCTS = .rodata:0x804EC440; // type:object size:0x538
lbl_804EC978 = .rodata:0x804EC978; // type:object size:0x7F8
l_item_flag_structs = .rodata:0x804EC440; // type:object size:0x538 scope:local
l_item_types = .rodata:0x804EC978; // type:object size:0x7F8 scope:local
TRIAL_INDEX_STRUCTS = .rodata:0x804ED170; // type:object size:0x20
GLITTERING_SPORES_CHANCES = .rodata:0x804ED190; // type:object size:0x20 data:4byte
lbl_804ED1B0 = .rodata:0x804ED1B0; // type:object size:0x18
@@ -28539,7 +28539,7 @@ RANDOM_ITEM_DEFINITIONS = .rodata:0x804ED268; // type:object size:0x38 data:4byt
lbl_804ED2A0 = .rodata:0x804ED2A0; // type:object size:0x30
AcItem__SHOULD_DEMO_FUNCS = .rodata:0x804ED2D0; // type:object size:0x30
lbl_804ED300 = .rodata:0x804ED300; // type:object size:0x18
lbl_804ED318 = .rodata:0x804ED318; // type:object size:0x28
lbl_804ED318 = .rodata:0x804ED318; // type:object size:0x24
lbl_804ED340 = .rodata:0x804ED340; // type:object size:0x10 data:float
lbl_804ED350 = .rodata:0x804ED350; // type:object size:0x30
lbl_804ED380 = .rodata:0x804ED380; // type:object size:0x30
@@ -34399,11 +34399,11 @@ lbl_80533D70 = .data:0x80533D70; // type:object size:0xC data:4byte
jumptable_80533D7C = .data:0x80533D7C; // type:object size:0x90 scope:local
lbl_80533E0C = .data:0x80533E0C; // type:object size:0x10
jumptable_80533E1C = .data:0x80533E1C; // type:object size:0x90 scope:local
AcItem__vtable = .data:0x80533EE0; // type:object size:0x98
lbl_80533F78 = .data:0x80533F78; // type:object size:0x30
lbl_80533FA8 = .data:0x80533FA8; // type:object size:0x30
lbl_80533FD8 = .data:0x80533FD8; // type:object size:0x18
lbl_80533FF0 = .data:0x80533FF0; // type:object size:0x18
__vt__9dAcItem_c = .data:0x80533EE0; // type:object size:0x98
__vt__47sFStateMgr_c<9dAcItem_c,20sStateMethodUsr_FI_c> = .data:0x80533F78; // type:object size:0x30
__vt__77sStateMgr_c<9dAcItem_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x80533FA8; // type:object size:0x30
__vt__24sFStateFct_c<9dAcItem_c> = .data:0x80533FD8; // type:object size:0x18
__vt__21sFState_c<9dAcItem_c> = .data:0x80533FF0; // type:object size:0x18
lbl_80534008 = .data:0x80534008; // type:object size:0x1C
lbl_80534024 = .data:0x80534024; // type:object size:0x38
lbl_8053405C = .data:0x8053405C; // type:object size:0x14
@@ -45126,7 +45126,7 @@ lbl_8057BF68 = .sdata2:0x8057BF68; // type:object size:0x4 data:float
lbl_8057BF6C = .sdata2:0x8057BF6C; // type:object size:0x4 data:float
lbl_8057BF70 = .sdata2:0x8057BF70; // type:object size:0x4 data:float
lbl_8057BF74 = .sdata2:0x8057BF74; // type:object size:0x4 data:float
lbl_8057BF78 = .sdata2:0x8057BF78; // type:object size:0x8 data:float
lbl_8057BF78 = .sdata2:0x8057BF78; // type:object size:0x4 data:float
lbl_8057BF80 = .sdata2:0x8057BF80; // type:object size:0x4 data:float
lbl_8057BF84 = .sdata2:0x8057BF84; // type:object size:0x4 data:float
lbl_8057BF88 = .sdata2:0x8057BF88; // type:object size:0x4 data:float
+1 -1
View File
@@ -336,8 +336,8 @@ config.libs = [
Object(NonMatching, "toBeSorted/sound_info.cpp"),
Object(Matching, "toBeSorted/arc_callback_handler.cpp"),
Object(NonMatching, "d/a/d_a_base.cpp"),
Object(NonMatching, "d/a/d_a_item.cpp"),
Object(NonMatching, "d/a/obj/d_a_obj_base.cpp"),
Object(NonMatching, "d/a/obj/d_a_obj_item.cpp"),
Object(NonMatching, "d/a/obj/d_a_obj_bomb.cpp"),
Object(NonMatching, "d/a/obj/d_a_obj_arrow.cpp"),
Object(NonMatching, "d/a/obj/d_a_obj_boomerang.cpp"),
-1
View File
@@ -6,7 +6,6 @@
#include "m/m_allocator.h"
#include "m/m_angle.h"
#include "m/m_vec.h"
#include "stddef.h"
#include "toBeSorted/tlist.h"
class dAcBase_c;
+176
View File
@@ -0,0 +1,176 @@
#ifndef D_A_ITEM_H
#define D_A_ITEM_H
#include "common.h"
#include "d/a/d_a_base.h"
#include "d/a/d_a_itembase.h"
#include "d/a/obj/d_a_obj_scattersand.h"
#include "d/col/bg/d_bg_s_acch.h"
#include "d/col/c/c_cc_d.h"
#include "d/col/cc/d_cc_d.h"
#include "d/d_shadow.h"
#include "f/f_list_mg.h"
#include "f/f_list_nd.h"
#include "m/m_angle.h"
#include "m/m_vec.h"
#include "nw4r/ut/ut_Color.h"
#include "s/s_State.hpp"
#include "toBeSorted/actor_event.h"
#include "toBeSorted/dowsing_target.h"
#include "toBeSorted/effects_struct.h"
class dAcItem_0xB34 {
public:
virtual ~dAcItem_0xB34();
};
class dAcItem_c : public dAcItemBase_c {
public:
dAcItem_c();
virtual ~dAcItem_c();
STATE_FUNC_DECLARE(dAcItem_c, Wait);
STATE_FUNC_DECLARE(dAcItem_c, Carry);
STATE_FUNC_DECLARE(dAcItem_c, GetBeetle);
STATE_FUNC_DECLARE(dAcItem_c, WaitGet);
STATE_FUNC_DECLARE(dAcItem_c, Get);
STATE_FUNC_DECLARE(dAcItem_c, WaitGetDemo);
STATE_FUNC_DECLARE(dAcItem_c, WaitForcedGetDemo);
STATE_FUNC_DECLARE(dAcItem_c, GetDemo);
STATE_FUNC_DECLARE(dAcItem_c, WaitTBoxGetDemo);
STATE_FUNC_DECLARE(dAcItem_c, ResurgeWait);
STATE_FUNC_DECLARE(dAcItem_c, WaitTurnOff);
STATE_FUNC_DECLARE(dAcItem_c, WaitSacredDewGetEffect);
static u32 createItemParams(u16 itemId, u32 subType, u32 unk, u8 unk2, u8, u8);
static void spawnItem(u16 item, u32 room, const mVec3_c &pos, const mAng3_c &rot, u32 params, u32 arg);
static void spawnDrop(u16 item, u32 room, const mVec3_c &pos, const mAng3_c &rot);
static u32 checkFlag(u32 flag);
void setItemPosition(const mVec3_c &);
void getItemFromBWheelItem();
bool isStateWait();
private:
/* 0x334 */ UNKTYPE *mpMdl; // Model has its own handling system
/* 0x338 */ dShadowCircle_c mShdw;
/* 0x340 */ mVec3_c mField_0x340;
/* 0x34C */ nw4r::ut::Color mColorFilter;
/* 0x350 */ f32 mLightLevelMaybe;
/* 0x354 */ u8 _354[0x35C - 0x354];
/* 0x35C */ dBgS_AcchCir mAcchCir;
/* 0x3B8 */ dBgS_ObjAcch mObjAcch;
/* 0x768 */ dCcD_Cyl mCyl;
/* 0x8B8 */ STATE_MGR_DECLARE(dAcItem_c);
/* 0x8F4 */ EffectsStruct mEff_0x8F4;
/* 0x928 */ EffectsStruct mEff_0x928;
/* 0x95C */ EffectsStruct mEff_0x95C;
/* 0x990 */ EffectsStruct mEff_0x990;
/* 0x9C4 */ EffectsStruct mEff_0x9C4;
/* 0x9F8 */ EffectsStruct mEff_0x9F8;
/* 0xA2C */ EffectsStruct mEff_0xA2C;
/* 0xA60 */ EffectsStruct mEff_0xA60;
/* 0xA94 */ dAcRef_c<dAcOScatterSand> mCoveredSand;
/* 0xAA0 */ dAcRef_c<dAcObjBase_c> mUnkRef;
/* 0xAAC */ mVec3_c posCopy;
/* 0xAB8 */ fLiNdBa_c mNode;
/* 0xAC4 */ ActorEventRelated mEventRelated;
/* 0xB14 */ DowsingTarget mDowsingTarget;
/* 0xB34 */ dAcItem_0xB34 *mField_0xB34[2];
/* 0xB34 */ dAcItem_0xB34 *mField_0xB3C;
/* 0xB40 */ UNKTYPE (dAcItem_c::*mFunc_0xB40)(UNKTYPE);
/* 0xB4C */ UNKTYPE (dAcItem_c::*mFunc_0xB4C)(UNKTYPE);
/* 0xB58 */ UNKTYPE (dAcItem_c::*mFunc_0xB58)(UNKTYPE);
/* 0xB64 */ UNKTYPE (dAcItem_c::*mFunc_0xB64)(UNKTYPE);
/* 0xB70 */ UNKTYPE (dAcItem_c::*mFunc_0xB70)(UNKTYPE);
/* 0xB7C */ UNKTYPE (dAcItem_c::*mFunc_0xB7C)(UNKTYPE);
/* 0xB88 */ UNKTYPE (dAcItem_c::*mFunc_0xB88)(UNKTYPE);
/* 0xB94 */ UNKTYPE (dAcItem_c::*mFunc_0xB94)(UNKTYPE);
/* 0xBA0 */ UNKTYPE (dAcItem_c::*mFunc_0xBA0)(UNKTYPE);
/* 0xBAC */ UNKTYPE (dAcItem_c::*mFunc_0xBAC)(UNKTYPE);
/* 0xBB8 */ UNKTYPE (dAcItem_c::*mFunc_0xBB8)(UNKTYPE);
/* 0xBC4 */ UNKTYPE (dAcItem_c::*mFunc_0xBC4)(UNKTYPE);
/* 0xBD0 */ UNKTYPE (dAcItem_c::*mFunc_0xBD0)(UNKTYPE);
/* 0xBDC */ UNKTYPE (dAcItem_c::*mFunc_0xBDC)(UNKTYPE);
/* 0xBE8 */ UNKTYPE (dAcItem_c::*mFunc_0xBE8)(UNKTYPE);
/* 0xBF4 */ UNKTYPE (dAcItem_c::*mFunc_0xBF4)(UNKTYPE);
/* 0xC00 */ UNKTYPE (dAcItem_c::*mFunc_0xC00)(UNKTYPE);
/* 0xC0C */ UNKTYPE (dAcItem_c::*mFunc_0xC0C)(UNKTYPE);
/* 0xC18 */ UNKTYPE (dAcItem_c::*mFunc_0xC18)(UNKTYPE);
/* 0xC24 */ UNKTYPE (dAcItem_c::*mFunc_0xC24)(UNKTYPE);
/* 0xC30 */ UNKTYPE (dAcItem_c::*mFunc_0xC30)(UNKTYPE);
/* 0xC3C */ UNKTYPE (dAcItem_c::*mFunc_0xC3C)(UNKTYPE);
/* 0xC48 */ UNKTYPE (dAcItem_c::*mFunc_0xC48)(UNKTYPE);
/* 0xC54 */ UNKTYPE (dAcItem_c::*mFunc_0xC54)(UNKTYPE);
/* 0xC60 */ UNKTYPE (dAcItem_c::*mFunc_0xC60)(UNKTYPE);
/* 0xC6C */ UNKTYPE (dAcItem_c::*mFunc_0xC6C)(UNKTYPE);
/* 0xC78 */ UNKTYPE (dAcItem_c::*mFunc_0xC78)(UNKTYPE);
/* 0xC84 */ UNKTYPE (dAcItem_c::*mFunc_0xC84)(UNKTYPE);
/* 0xC90 */ UNKTYPE (dAcItem_c::*mFunc_0xC90)(UNKTYPE);
/* 0xC9C */ UNKTYPE (dAcItem_c::*mFunc_0xC9C)(UNKTYPE);
/* 0xCA8 */ UNKTYPE (dAcItem_c::*mFunc_0xCA8)(UNKTYPE);
/* 0xCB4 */ UNKTYPE (dAcItem_c::*mFunc_0xCB4)(UNKTYPE);
/* 0xCC0 */ dAcRef_c<dAcItem_c> mItemQueuePrev;
/* 0xCCC */ dAcRef_c<dAcItem_c> mItemQueueNext;
/* 0xCD8 */ f32 mField_0xCD8;
/* 0xCDC */ f32 mBaseScale;
/* 0xCE0 */ f32 mCurrentScale;
/* 0xCE4 */ f32 mField_0xCE4;
/* 0xCE8 */ f32 mField_0xCE8;
/* 0xCEC */ f32 mField_0xCEC;
/* 0xCF0 */ u8 _CF0[0xD00 - 0xCF0];
/* 0xD00 */ f32 mField_0xD00;
/* 0xD04 */ f32 mField_0xD04;
/* 0xD08 */ u8 _D08[0xD14 - 0xD08];
/* 0xD14 */ f32 mFreestandingOffsetH;
/* 0xD18 */ f32 mField_0xD18;
/* 0xD1C */ int mGetItemPouchSlot;
/* 0xD20 */ int mField_0xD20;
/* 0xD24 */ u8 _D24[0xD2C - 0xD24];
/* 0xD2C */ u32 mFramesInAir;
/* 0xD30 */ int mItemQuantity;
/* 0xD34 */ u32 mItemFlags;
/* 0xD38 */ mAng3_c mField_0xD38;
/* 0xD3E */ u16 mField_0xD3E;
/* 0xD40 */ mAng mMdlRotY;
/* 0xD42 */ s16 mField_0xD42;
/* 0xD44 */ u16 mRealItemId;
/* 0xD46 */ s16 mDespawnTimer;
/* 0xD48 */ u8 mField_0xD48;
/* 0xD49 */ u8 mField_0xD49;
/* 0xD4A */ u8 mField_0xD4A;
/* 0xD4B */ u8 mField_0xD4B;
/* 0xD4C */ u8 mField_0xD4C;
/* 0xD4D */ u8 mField_0xD4D;
/* 0xD4E */ u8 mMdlScaleType;
/* 0xD4F */ u8 mbNoDespawn;
/* 0xD50 */ u8 mbNoGravity;
/* 0xD51 */ u8 mField_0xD51;
/* 0xD52 */ u8 mField_0xD52;
/* 0xD53 */ u8 mField_0xD53;
/* 0xD54 */ u8 mbIsWaiting;
/* 0xD55 */ u8 mField_0xD55;
/* 0xD56 */ u8 mField_0xD56;
/* 0xD57 */ u8 mField_0xD57;
/* 0xD58 */ u8 mField_0xD58;
/* 0xD59 */ u8 mField_0xD59;
/* 0xD5A */ u8 mField_0xD5A;
/* 0xD5B */ u8 mField_0xD5B;
/* 0xD5C */ u8 mField_0xD5C;
/* 0xD5D */ bool mbShowItemLighting;
/* 0xD5E */ u8 mField_0xD5E;
/* 0xD5F */ u8 mField_0xD5F;
/* 0xD60 */ u8 mField_0xD60;
/* 0xD61 */ u8 mField_0xD61;
/* 0xD62 */ u8 mField_0xD62;
/* 0xD63 */ u8 mField_0xD63;
/* 0xD64 */ u8 mField_0xD64;
/* 0xD65 */ u8 mField_0xD65;
/* 0xD66 */ u8 mField_0xD66;
/* 0xD67 */ u8 mField_0xD67;
public:
static fLiMgBa_c sItemList;
};
#endif
+246
View File
@@ -0,0 +1,246 @@
#ifndef D_A_ITEMBASE_H
#define D_A_ITEMBASE_H
#include "d/a/obj/d_a_obj_base.h"
enum ITEM_ID {
/* 0x000 */ ITEM_NONE = 0,
/* 0x001 */ ITEM_SMALL_KEY = 1,
/* 0x002 */ ITEM_GREEN_RUPEE = 2,
/* 0x003 */ ITEM_BLUE_RUPEE = 3,
/* 0x004 */ ITEM_RED_RUPEE = 4,
/* 0x005 */ ITEM_COMPLETE_TRIFORCE = 5,
/* 0x006 */ ITEM_HEART = 6,
/* 0x007 */ ITEM_SINGLE_ARROW = 7,
/* 0x008 */ ITEM_BUNDLE_ARROWS = 8,
/* 0x009 */ ITEM_GODDESS_WHITESWORD = 9,
/* 0x00A */ ITEM_PRACTICE_SWORD = 10,
/* 0x00B */ ITEM_GODDESS_SWORD = 11,
/* 0x00C */ ITEM_GODDESS_LONGSWORD = 12,
/* 0x00D */ ITEM_MASTER_SWORD = 13,
/* 0x00E */ ITEM_TRUE_MASTER_SWORD = 14,
/* 0x00F */ ITEM_SAILCLOTH = 15,
/* 0x010 */ ITEM_GODDESS_HARP = 16,
/* 0x011 */ ITEM_SPIRIT_VESSEL = 17,
/* 0x012 */ ITEM_UNK_18 = 18,
/* 0x013 */ ITEM_BOW = 19,
/* 0x014 */ ITEM_CLAWSHOTS = 20,
/* 0x015 */ ITEM_BIRD_STATUETTE = 21,
/* 0x016 */ ITEM_COMMON_BUG = 22,
/* 0x017 */ ITEM_UNCOMMON_BUG = 23,
/* 0x018 */ ITEM_RARE_BUG = 24,
/* 0x019 */ ITEM_AC_BK = 25,
/* 0x01A */ ITEM_FS_BK = 26,
/* 0x01B */ ITEM_SSH_BK = 27,
/* 0x01C */ ITEM_KEY_PIECE = 28,
/* 0x01D */ ITEM_SV_BK = 29,
/* 0x01E */ ITEM_ET_BK = 30,
/* 0x01F */ ITEM_LMF_BK = 31,
/* 0x020 */ ITEM_SILVER_RUPEE = 32,
/* 0x021 */ ITEM_GOLD_RUPEE = 33,
/* 0x022 */ ITEM_RUPOOR = 34,
/* 0x023 */ ITEM_5_CRYSTALS = 35,
/* 0x024 */ ITEM_GLITTERING_SPORES = 36,
/* 0x025 */ ITEM_UNK_37 = 37,
/* 0x026 */ ITEM_UNK_38 = 38,
/* 0x027 */ ITEM_UNK_39 = 39,
/* 0x028 */ ITEM_5_BOMBS = 40,
/* 0x029 */ ITEM_10_BOMBS = 41,
/* 0x02A */ ITEM_STAMINA_FRUIT = 42,
/* 0x02B */ ITEM_FARORE_TEAR = 43,
/* 0x02C */ ITEM_DIN_TEAR = 44,
/* 0x02D */ ITEM_NAYRU_TEAR = 45,
/* 0x02E */ ITEM_SACRED_TEAR = 46,
/* 0x02F */ ITEM_LIGHT_FRUIT = 47,
/* 0x030 */ ITEM_1_CRYSTAL = 48,
/* 0x031 */ ITEM_GUST_BELLOWS = 49,
/* 0x032 */ ITEM_DUNGEON_MAP_FI = 50,
/* 0x033 */ ITEM_DUNGEON_MAP = 51,
/* 0x034 */ ITEM_SLINGSHOT = 52,
/* 0x035 */ ITEM_BEETLE = 53,
/* 0x036 */ ITEM_WATER = 54,
/* 0x037 */ ITEM_MUSHROOM_SPORES = 55,
/* 0x038 */ ITEM_DIGGING_MITTS = 56,
/* 0x039 */ ITEM_5_DEKU_SEEDS = 57,
/* 0x03A */ ITEM_UNK_58 = 58,
/* 0x03B */ ITEM_UNK_59 = 59,
/* 0x03C */ ITEM_10_DEKU_SEEDS = 60,
/* 0x03D */ ITEM_COMMON_TREASURE = 61,
/* 0x03E */ ITEM_COMMON_TREASURE2 = 62,
/* 0x03F */ ITEM_UNCOMMON_TREASURE = 63,
/* 0x040 */ ITEM_RARE_TREASURE = 64,
/* 0x041 */ ITEM_GUARDIAN_POTION = 65,
/* 0x042 */ ITEM_GUARDIAN_POTION_PLUS = 66,
/* 0x043 */ ITEM_UNK_67 = 67,
/* 0x044 */ ITEM_WATER_SCALE = 68,
/* 0x045 */ ITEM_UNK_69 = 69,
/* 0x046 */ ITEM_BUG_MEDAL = 70,
/* 0x047 */ ITEM_BUG_NET = 71,
/* 0x048 */ ITEM_FAIRY = 72,
/* 0x049 */ ITEM_UNK_73 = 73,
/* 0x04A */ ITEM_SACRED_WATER = 74,
/* 0x04B */ ITEM_HOOK_BEETLE = 75,
/* 0x04C */ ITEM_QUICK_BEETLE = 76,
/* 0x04D */ ITEM_TOUGH_BEETLE = 77,
/* 0x04E */ ITEM_HEART_POTION = 78,
/* 0x04F */ ITEM_HEART_POTION_PLUS = 79,
/* 0x050 */ ITEM_HEART_POTION_ALSO = 80,
/* 0x051 */ ITEM_HEART_POTION_PLUS_PLUS = 81,
/* 0x052 */ ITEM_UNK_82 = 82,
/* 0x053 */ ITEM_GUARDIAN_POTION_NO_TBOX = 83,
/* 0x054 */ ITEM_STAMINA_POTION = 84,
/* 0x055 */ ITEM_STAMINA_POTION_PLUS = 85,
/* 0x056 */ ITEM_AIR_POTION = 86,
/* 0x057 */ ITEM_AIR_POTION_PLUS = 87,
/* 0x058 */ ITEM_BOTTLED_FAIRY = 88,
/* 0x059 */ ITEM_UNK_89 = 89,
/* 0x05A */ ITEM_IRON_BOW = 90,
/* 0x05B */ ITEM_SACRED_BOW = 91,
/* 0x05C */ ITEM_BOMB_BAG = 92,
/* 0x05D */ ITEM_HEART_CONTAINER = 93,
/* 0x05E */ ITEM_HEART_PIECE = 94,
/* 0x05F */ ITEM_TRI_COURAGE = 95,
/* 0x060 */ ITEM_TRI_POWER = 96,
/* 0x061 */ ITEM_TRI_WISDOM = 97,
/* 0x062 */ ITEM_SEA_CHART = 98,
/* 0x063 */ ITEM_MOGMA_MITTS = 99,
/* 0x064 */ ITEM_HEART_MEDAL = 100,
/* 0x065 */ ITEM_RUPEE_MEDAL = 101,
/* 0x066 */ ITEM_TREASURE_MEDAL = 102,
/* 0x067 */ ITEM_POTION_MEDAL = 103,
/* 0x068 */ ITEM_CURSED_MEDAL = 104,
/* 0x069 */ ITEM_SCATTERSHOT = 105,
/* 0x06A */ ITEM_UNK_106 = 106,
/* 0x06B */ ITEM_UNK_107 = 107,
/* 0x06C */ ITEM_MEDIUM_WALLET = 108,
/* 0x06D */ ITEM_BIG_WALLET = 109,
/* 0x06E */ ITEM_GIANT_WALLET = 110,
/* 0x06F */ ITEM_TYCOON_WALLET = 111,
/* 0x070 */ ITEM_ADVENTURE_POUCH = 112,
/* 0x071 */ ITEM_POUCH_EXPANSION = 113,
/* 0x072 */ ITEM_LIFE_MEDAL = 114,
/* 0x073 */ ITEM_UNK_115 = 115,
/* 0x074 */ ITEM_WOODEN_SHIELD = 116,
/* 0x075 */ ITEM_BANDED_SHIELD = 117,
/* 0x076 */ ITEM_BRACED_SHIELD = 118,
/* 0x077 */ ITEM_IRON_SHIELD = 119,
/* 0x078 */ ITEM_REINFORCED_SHIELD = 120,
/* 0x079 */ ITEM_FORTIFIED_SHIELD = 121,
/* 0x07A */ ITEM_SACRED_SHIELD = 122,
/* 0x07B */ ITEM_DIVINE_SHIELD = 123,
/* 0x07C */ ITEM_GODDESS_SHIELD = 124,
/* 0x07D */ ITEM_HYLIAN_SHIELD = 125,
/* 0x07E */ ITEM_REVITALIZING_POTION = 126,
/* 0x07F */ ITEM_REVITALIZING_POTION_PLUS = 127,
/* 0x080 */ ITEM_SMALL_SEED_SATCHEL = 128,
/* 0x081 */ ITEM_MEDIUM_SEED_SATCHEL = 129,
/* 0x082 */ ITEM_LARGE_SEED_SATCHEL = 130,
/* 0x083 */ ITEM_SMALL_QUIVER = 131,
/* 0x084 */ ITEM_MEDIUM_QUIVER = 132,
/* 0x085 */ ITEM_LARGE_QUIVER = 133,
/* 0x086 */ ITEM_SMALL_BOMB_BAG = 134,
/* 0x087 */ ITEM_MEDIUM_BOMB_BAG = 135,
/* 0x088 */ ITEM_LARGE_BOMB_BAG = 136,
/* 0x089 */ ITEM_WHIP = 137,
/* 0x08A */ ITEM_FIRESHIELD_EARRINGS = 138,
/* 0x08B */ ITEM_UNK_139 = 139,
/* 0x08C */ ITEM_BIG_BUG_NET = 140,
/* 0x08D */ ITEM_FARON_GRASSHOPPER = 141,
/* 0x08E */ ITEM_WOODLAND_RHINO_BEETLE = 142,
/* 0x08F */ ITEM_DEKU_HORNET_ = 143,
/* 0x090 */ ITEM_SKYLOFT_MANTIS = 144,
/* 0x091 */ ITEM_VOLCANIC_LADYBUG = 145,
/* 0x092 */ ITEM_BLESSED_BUTTERFLY = 146,
/* 0x093 */ ITEM_LANAYRU_ANT = 147,
/* 0x094 */ ITEM_SAND_CICADA = 148,
/* 0x095 */ ITEM_GERUDO_DRAGONFLY = 149,
/* 0x096 */ ITEM_ELDIN_ROLLER = 150,
/* 0x097 */ ITEM_SKY_STAG_BEETLE = 151,
/* 0x098 */ ITEM_STARRY_FIREFLY = 152,
/* 0x099 */ ITEM_BOTTLE = 153,
/* 0x09A */ ITEM_RUPEE_MEDAL_ALSO = 154,
/* 0x09B */ ITEM_HEART_MEDAL_ALSO = 155,
/* 0x09C */ ITEM_UNK_156 = 156,
/* 0x09D */ ITEM_UNK_157 = 157,
/* 0x09E */ ITEM_CAWLIN_LETTER = 158,
/* 0x09F */ ITEM_BEEDLE_INSECT_CAGE = 159,
/* 0x0A0 */ ITEM_RATTLE = 160,
/* 0x0A1 */ ITEM_HORNET_LARVAE = 161,
/* 0x0A2 */ ITEM_BIRD_FEATHER = 162,
/* 0x0A3 */ ITEM_TUMBLE_WEED = 163,
/* 0x0A4 */ ITEM_LIZARD_TAIL = 164,
/* 0x0A5 */ ITEM_ELDIN_ORE = 165,
/* 0x0A6 */ ITEM_ANCIENT_FLOWER = 166,
/* 0x0A7 */ ITEM_AMBER_RELIC = 167,
/* 0x0A8 */ ITEM_DUSK_RELIC = 168,
/* 0x0A9 */ ITEM_JELLY_BLOB = 169,
/* 0x0AA */ ITEM_MONSTER_CLAW = 170,
/* 0x0AB */ ITEM_MONSTER_HORN = 171,
/* 0x0AC */ ITEM_ORNAMENTAL_SKULL = 172,
/* 0x0AD */ ITEM_EVIL_CRYSTAL = 173,
/* 0x0AE */ ITEM_BLUE_BIRD_FEATHER = 174,
/* 0x0AF */ ITEM_GOLDEN_SKULL = 175,
/* 0x0B0 */ ITEM_GODDESS_PLUME = 176,
/* 0x0B1 */ ITEM_EMERALD_TABLET = 177,
/* 0x0B2 */ ITEM_RUBY_TABLET = 178,
/* 0x0B3 */ ITEM_AMBER_TABLET = 179,
/* 0x0B4 */ ITEM_STONE_OF_TRIALS = 180,
/* 0x0B5 */ ITEM_UNK_181 = 181,
/* 0x0B6 */ ITEM_UNK_182 = 182,
/* 0x0B7 */ ITEM_UNK_183 = 183,
/* 0x0B8 */ ITEM_UNK_184 = 184,
/* 0x0B9 */ ITEM_UNK_185 = 185,
/* 0x0BA */ ITEM_BALLAD_OF_THE_GODDESS = 186,
/* 0x0BB */ ITEM_FARORES_COURAGE = 187,
/* 0x0BC */ ITEM_NAYRUS_WISDOM = 188,
/* 0x0BD */ ITEM_DINS_POWER = 189,
/* 0x0BE */ ITEM_FARON_SOTH = 190,
/* 0x0BF */ ITEM_ELDIN_SOTH = 191,
/* 0x0C0 */ ITEM_LANAYRU_SOTH = 192,
/* 0x0C1 */ ITEM_SOTH = 193,
/* 0x0C2 */ ITEM_REVITALIZING_POTION_PLUS_PLUS = 194,
/* 0x0C3 */ ITEM_HOT_SOUP = 195,
/* 0x0C4 */ ITEM_COLD_SOUP = 196,
/* 0x0C5 */ ITEM_LIFE_TREE_SEED = 197,
/* 0x0C6 */ ITEM_LIFE_TREE_FRUIT = 198,
/* 0x0C7 */ ITEM_EXTRA_WALLET = 199,
/* 0x0C8 */ ITEM_UNK_200 = 200,
/* 0x18D */ ITEM_LIFE_MEDAL_AGAIN = 397, // ?? Prob doesnt exist
/* 0x18E */ ITEM_POUCH_EXPANSION_GODDESS_CHEST = 398, // ?? Prob doesnt exist
/* 0x1FF */ MAX_ITEM_ID = 511
};
struct ItemFlagStruct {
u8 mField_0x00;
u8 mField_0x01;
u8 mField_0x02;
u8 mField_0x03;
u16 mFlag;
u8 mFlagKind;
u8 mField_0x07;
};
class dAcItemBase_c : public dAcObjBase_c {
public:
dAcItemBase_c() {}
virtual ~dAcItemBase_c() {}
virtual u16 getItemId();
static bool isValidItemTypeIdx(int itemId);
static bool getItemTypeFromId(u16 itemID, u32 *pOutType);
static bool getItemAnimType(u16 itemId, u32 *pOutType);
static int getHeartContainerHeartIncrease();
static int getCompletedHeartPieceHeartIncrease();
static u8 getTearIdx(int tearNum);
static bool getFlagIdxForTear(int tearNum, u32 *pOutFlag);
static u16 getTearBit(int tearNum);
static bool setDungeonFlagForTear(int tearNum);
private:
u16 mId;
static const ItemFlagStruct sDefaultFlagStruct;
static const ItemFlagStruct sItemFlagStructs[167];
static const u32 sItemTypeFlags[MAX_ITEM_ID - 1];
};
#endif
-25
View File
@@ -1,25 +0,0 @@
#ifndef D_A_ITEM_BASE_H
#define D_A_ITEM_BASE_H
#include "d/a/obj/d_a_obj_base.h"
#include "m/m_vec.h"
// Ghidra: AcItem
// Size: 0xd68
// official name
class dAcItem_c : public dAcObjBase_c {
public:
static u32 createItemParams(u16 itemId, u32 subType, u32 unk, u8 unk2, u8, u8);
static void spawnItem(u16 item, u32 room, const mVec3_c &pos, const mAng3_c &rot, u32 params, u32 arg);
static void spawnDrop(u16 item, u32 room, const mVec3_c &pos, const mAng3_c &rot);
static u32 checkFlag(u32 flag);
void setItemPosition(const mVec3_c &);
void getItemFromBWheelItem();
bool isStateWait();
static fLiMgBa_c sItemList;
};
#endif
+2 -1
View File
@@ -3,8 +3,8 @@
#include "common.h"
#include "d/a/d_a_base.h"
#include "d/a/d_a_item.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/a/obj/d_a_obj_item.h"
#include "d/col/bg/d_bg_w.h"
#include "m/m3d/m_anmmdl.h"
#include "m/m_angle.h"
@@ -15,6 +15,7 @@
#include "toBeSorted/actor_event.h"
#include "toBeSorted/effects_struct.h"
class dAcOTowerHandD101_c : public dAcObjBase_c {
public:
dAcOTowerHandD101_c() : mStateMgr(*this, sStateID::null), mEffects(this), mEvent(*this, nullptr), mFlags(0) {}
+5
View File
@@ -1,3 +1,6 @@
#ifndef D_SHADOW_H
#define D_SHADOW_H
#include "m/m3d/m_shadow.h"
// This is unofficial, idk if this is close, but this is a common shadow extension.
@@ -7,3 +10,5 @@ public:
dShadowCircle_c() {}
virtual ~dShadowCircle_c() {}
};
#endif
+1 -3
View File
@@ -2,14 +2,12 @@
#define FILE_MANAGER_H
#include "common.h"
#include "d/a/d_a_itembase.h"
#include "egg/core/eggHeap.h"
#include "m/m_angle.h"
#include "m/m_vec.h"
#include "toBeSorted/save_file.h"
enum ITEM_ID {
};
enum SAVE_ITEM_ID {
};
@@ -1,7 +1,7 @@
#include "d/a/obj/d_a_obj_toD3_stone_figure.h"
#include "d/a/d_a_item.h"
#include "d/col/cc/d_cc_s.h"
#include "d/a/obj/d_a_obj_item.h"
#include "d/flag/storyflag_manager.h"
#include "toBeSorted/attention.h"
#include "toBeSorted/event.h"
@@ -165,5 +165,5 @@ void dAcOtoD3StoneFigure_c::doInteraction(s32 arg) {
}
bool dAcOtoD3StoneFigure_c::hasStoneOfTrials() const {
return dAcItem_c::checkFlag(0xB4);
return dAcItem_c::checkFlag(ITEM_STONE_OF_TRIALS);
}
+1 -1
View File
@@ -1,8 +1,8 @@
#include "d/a/obj/d_a_obj_tower_hand_D101.h"
#include "common.h"
#include "d/a/d_a_item.h"
#include "d/a/d_a_player.h"
#include "d/a/obj/d_a_obj_item.h"
#include "d/col/bg/d_bg_s.h"
#include "d/col/bg/d_bg_w.h"
#include "d/flag/sceneflag_manager.h"
+2 -5
View File
@@ -2,23 +2,20 @@
#include "c/c_math.h"
#include "common.h"
#include "d/a/d_a_itembase.h"
#include "d/a/d_a_player.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s.h"
#include "d/col/bg/d_bg_s_gnd_chk.h"
#include "d/col/c/c_cc_d.h"
#include "d/col/c/c_m3d_g_pla.h"
#include "d/col/cc/d_cc_d.h"
#include "d/col/cc/d_cc_s.h"
#include "egg/math/eggMath.h"
#include "egg/math/eggQuat.h"
#include "f/f_base.h"
#include "m/m_angle.h"
#include "m/m_mtx.h"
#include "m/m_quat.h"
#include "m/m_vec.h"
#include "nw4r/math/math_triangular.h"
#include "rvl/MTX/mtx.h"
#include "rvl/MTX/vec.h"
#include "s/s_Math.h"
#include "toBeSorted/dowsing_target.h"
@@ -118,7 +115,7 @@ int dAcOTumbleWeed_c::actorExecute() {
mObjAcch.CrrPos(*dBgS::GetInstance());
mField_0x974 += position.y - mOldPosition.y;
if (checkCollect()) {
dAcPy_c::LINK->bugNetCollectTreasure(0xA3 /* TODO(Item Id) ITEM_TUMBLEWEED */);
dAcPy_c::LINK->bugNetCollectTreasure(ITEM_TUMBLE_WEED);
FUN_8002dcd0();
return SUCCEEDED;
}
+10 -6
View File
@@ -1,9 +1,9 @@
#include "d/t/d_t_dowsing.h"
#include "d/a/d_a_item.h"
#include "d/flag/itemflag_manager.h"
#include "d/flag/storyflag_manager.h"
#include "d/flag/sceneflag_manager.h"
#include "d/flag/storyflag_manager.h"
SPECIAL_ACTOR_PROFILE(T_DOWSING, dTgDowsing_c, fProfile::T_DOWSING, 0x0293, 0, 0);
@@ -56,13 +56,17 @@ bool dTgDowsing_c::checkDowsing() const {
switch (mDowsingOption) {
case TRIAL_0:
return ItemflagManager::sInstance->getFlagDirect(187) && !StoryflagManager::sInstance->getCounterOrFlag(93);
return ItemflagManager::sInstance->getFlagDirect(ITEM_FARORES_COURAGE) &&
!StoryflagManager::sInstance->getCounterOrFlag(93); // TOOD (Counter ID)
case TRIAL_1:
return ItemflagManager::sInstance->getFlagDirect(188) && !StoryflagManager::sInstance->getCounterOrFlag(97);
return ItemflagManager::sInstance->getFlagDirect(ITEM_NAYRUS_WISDOM) &&
!StoryflagManager::sInstance->getCounterOrFlag(97); // TOOD (Counter ID)
case TRIAL_2:
return ItemflagManager::sInstance->getFlagDirect(189) && !StoryflagManager::sInstance->getCounterOrFlag(98);
return ItemflagManager::sInstance->getFlagDirect(ITEM_DINS_POWER) &&
!StoryflagManager::sInstance->getCounterOrFlag(98); // TOOD (Counter ID)
case TRIAL_3:
return ItemflagManager::sInstance->getFlagDirect(193) && !StoryflagManager::sInstance->getCounterOrFlag(99);
return ItemflagManager::sInstance->getFlagDirect(ITEM_SOTH) &&
!StoryflagManager::sInstance->getCounterOrFlag(99); // TOOD (Counter ID)
case PROPELLER: return DowsingTarget::hasPropellerDowsing();
case WATER_BASIN: return DowsingTarget::hasWaterBasinDowsing();
case CRYSTAL_BALL: return DowsingTarget::hasCrystalBallDowsing();
+12 -10
View File
@@ -2,11 +2,13 @@
#include "c/c_lib.h"
#include "c/c_math.h"
#include "d/a/d_a_item.h"
#include "d/a/d_a_player.h"
#include "d/a/obj/d_a_obj_item.h"
#include "d/col/c/c_cc_d.h"
#include "d/col/cc/d_cc_s.h"
#include "d/flag/sceneflag_manager.h"
SPECIAL_ACTOR_PROFILE(TAG_REACTION, dTgReaction_c, fProfile::TAG_REACTION, 0x0151, 0, 0);
STATE_DEFINE(dTgReaction_c, Wait);
@@ -64,7 +66,7 @@ int dTgReaction_c::create() {
}
if (field_0x4DE) {
u32 heartMedalCount = adventurePouchCountItem(/* HEART_MEDAL*/ 100);
u32 heartMedalCount = adventurePouchCountItem(ITEM_HEART_MEDAL);
if (heartMedalCount == 0) {
return FAILED;
} else if (heartMedalCount == 1 && cM::rnd() < 0.5f) {
@@ -176,11 +178,11 @@ void dTgReaction_c::checkForBonkItem() {
c.rotY(rotation.y);
c2 += c;
c2.y += field_0x4E4;
u32 newItemParms = dAcItem_c::createItemParams(/* HEART_PIECE */ 0x5E, 1, 0, getSceneFlag(), 1, 0xFF);
u32 newItemParms = dAcItem_c::createItemParams(ITEM_HEART_PIECE, 1, 0, getSceneFlag(), 1, 0xFF);
if (dAcObjBase_c::create(fProfile::ITEM, roomid, newItemParms, &c2, nullptr, nullptr, 0xFFFFFFFF)) {
field_0x4DD = 1;
onDelete();
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x13AD);
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x13AD); // TODO (Sound ID)
}
}
} else {
@@ -202,7 +204,7 @@ void dTgReaction_c::checkForBonkItem() {
pos.y += field_0x4E4;
if (fn_578_DB0(pos, uVar3)) {
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x13AE);
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x13AE); // TODO (Sound ID)
}
SceneflagManager::sInstance->setFlag(roomid, getSceneFlag());
onDelete();
@@ -211,7 +213,7 @@ void dTgReaction_c::checkForBonkItem() {
}
void dTgReaction_c::checkForBubble() {
if (mCollision.ChkTgHit() && mCollision.ChkTgAtHitType(0x100000)) {
if (mCollision.ChkTgHit() && mCollision.ChkTgAtHitType(AT_TYPE_0x100000)) {
if (dAcPy_c::LINK != nullptr && dAcPy_c::LINK->checkFlags0x350(0x40)) {
mVec3_c spawnPos = position;
dAcObjBase_c::create(fProfile::OBJ_BUBBLE, roomid, 0x4, &spawnPos, nullptr, nullptr, 0xFFFFFFFF);
@@ -236,7 +238,7 @@ void dTgReaction_c::checkForSlingBellowsItem() {
mVec3_c spawnPos = position;
spawnPos.y += field_0x4E4;
if (fn_578_DB0(spawnPos, uVar3)) {
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x13AE);
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x13AE); // TODO (Sound ID)
}
SceneflagManager::sInstance->setFlag(roomid, getSceneFlag());
onDelete();
@@ -282,11 +284,11 @@ bool dTgReaction_c::spawnHearts(s32 params, const mVec3_c &pos, s32 arg, mAng an
mAng offset = cM::rndRange(-tmp2, tmp2);
ang.y = mAng(step) + offset;
if (arg == 5) {
dAcItem_c::spawnItem(/* HEART */ 0x6, roomid, pos, ang, 0xFFFFFFFF, 1);
dAcItem_c::spawnItem(ITEM_HEART, roomid, pos, ang, 0xFFFFFFFF, 1);
} else if (arg == 6) {
dAcItem_c::spawnItem(/* HEART */ 0x6, roomid, pos, ang, 0xFFFFFFFF, 0);
dAcItem_c::spawnItem(ITEM_HEART, roomid, pos, ang, 0xFFFFFFFF, 0);
} else {
dAcItem_c::spawnDrop(/* HEART */ 0x6, roomid, pos, ang);
dAcItem_c::spawnDrop(ITEM_HEART, roomid, pos, ang);
}
step = mAng(step) - stepSize;
}
-1
View File
@@ -3,7 +3,6 @@
#include "m/m_vec.h"
#include "s/s_Math.h"
SPECIAL_ACTOR_PROFILE(TUMBLE_WEED_TAG, dTgTumbleWeed_c, fProfile::TUMBLE_WEED_TAG, 0x0244, 0, 0);
STATE_DEFINE(dTgTumbleWeed_c, AreaOut);
+409
View File
@@ -0,0 +1,409 @@
#include "d/a/d_a_item.h"
#include "common.h"
#include "d/a/d_a_itembase.h"
#include "d/flag/dungeonflag_manager.h"
#include "d/flag/flag_index.h"
#include "f/f_list_mg.h"
#include "toBeSorted/dowsing_target.h"
#include "toBeSorted/file_manager.h"
const ItemFlagStruct dAcItemBase_c::sDefaultFlagStruct = {0x28, 0x3C, 0x1E, 0xFF, 0x0000, 0x02, 0x01};
const ItemFlagStruct dAcItemBase_c::sItemFlagStructs[167] = {
{0x28, 0x3c, 0x1e, 0xff, 0x0001, 0x00, 0x01},
{0x32, 0x46, 0x1e, 0xff, 0x0002, 0x02, 0x01},
{0x32, 0x46, 0x1e, 0xff, 0x0003, 0x02, 0x01},
{0x32, 0x46, 0x1e, 0xff, 0x0004, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0005, 0x02, 0x00},
{0x32, 0x46, 0x1e, 0xff, 0x0006, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0007, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0008, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0009, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000a, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000b, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000c, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000d, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000e, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000f, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0010, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0011, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0013, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0014, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0015, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000c, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000c, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x000c, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x001c, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x000c, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x000c, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x000c, 0x00, 0x01},
{0x32, 0x46, 0x1e, 0xff, 0x0020, 0x00, 0x01},
{0x32, 0x46, 0x1e, 0xff, 0x0021, 0x00, 0x01},
{0x32, 0x46, 0x1e, 0xff, 0x0022, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0023, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0024, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0028, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0029, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x002a, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x002b, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x002c, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x002d, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x002e, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0046, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0030, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0031, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0002, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0033, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0034, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0035, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0036, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0037, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0038, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0039, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x003c, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0041, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0042, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0044, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0046, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0047, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0048, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x004a, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x004b, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x004c, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x004d, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x004e, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x004f, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0051, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0054, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0055, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0056, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0057, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0058, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x005a, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x005b, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x005c, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x005d, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x005e, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x005f, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0060, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0061, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0062, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0063, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0064, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0065, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0066, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0067, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0068, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0069, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x006b, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x006c, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x006d, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x006e, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x006f, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0070, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0071, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0072, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0074, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0075, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0076, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0077, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0078, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0079, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x007a, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x007b, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x007c, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x007d, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x007e, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x007f, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0080, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0081, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0082, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0083, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0084, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0085, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0086, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0087, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0088, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x0089, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x008a, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x008c, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0x00, 0x008d, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x01, 0x008e, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x02, 0x007a, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x03, 0x0090, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x04, 0x0091, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x05, 0x0092, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x06, 0x0093, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x07, 0x0094, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x08, 0x0095, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x09, 0x0096, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x0a, 0x0097, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x0b, 0x0098, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x0099, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x009e, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x009f, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00a0, 0x00, 0x00},
{0x28, 0x3c, 0x1e, 0x0c, 0x02f1, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x0d, 0x02f2, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x0e, 0x02f3, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x0f, 0x02f4, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x10, 0x02f5, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x11, 0x02f6, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x12, 0x02f7, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x13, 0x02f8, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x14, 0x02f9, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x15, 0x02fa, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x16, 0x02fb, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x17, 0x02fc, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x18, 0x02fd, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x19, 0x02fe, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x1a, 0x02ff, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0x1b, 0x0300, 0x00, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x00b1, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00b2, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00b3, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00b4, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00ba, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00bb, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00bc, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00bd, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00be, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00bf, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00c0, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00c1, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00c2, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00c3, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00c4, 0x02, 0x00},
{0x28, 0x3c, 0x1e, 0xff, 0x00c5, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x00c6, 0x02, 0x01},
{0x28, 0x3c, 0x1e, 0xff, 0x00c7, 0x00, 0x00},
};
const u32 dAcItemBase_c::sItemTypeFlags[MAX_ITEM_ID - 1] = {
0x2000, 0x0, 0x3000, 0x3000, 0x0, 0x1000, 0x3000, 0x3000, 0x0, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000,
0x1000, 0x1000, 0x1000, 0x0, 0x0, 0x1000, 0x1000, 0x1000, 0x3000, 0x3000, 0x3000, 0x1000, 0x1000, 0x1000,
0x0, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x2000, 0x0, 0x2, 0x1000, 0x1000, 0x1000, 0x3000, 0x0,
0x3000, 0x0, 0x0, 0x0, 0x0, 0x3000, 0x0, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x3002, 0x3002,
0x1000, 0x3000, 0x0, 0x0, 0x0, 0x3000, 0x3000, 0x3000, 0x0, 0x220, 0x220, 0x1000, 0x1000, 0x0,
0x10, 0x1000, 0x0, 0x0, 0x2, 0x1000, 0x1000, 0x1000, 0x10, 0x20, 0x0, 0x20, 0x0, 0x0,
0x111, 0x111, 0x11, 0x11, 0x120, 0x0, 0x1000, 0x1000, 0x1000, 0x1000, 0x0, 0x1000, 0x1000, 0x1000,
0x0, 0x1000, 0x121, 0x2, 0x2, 0x222, 0x4, 0x1000, 0x1000, 0x0, 0x0, 0x0, 0x0, 0x1000,
0x1000, 0x0, 0x0, 0x3, 0x120, 0x120, 0x120, 0x120, 0x120, 0x120, 0x120, 0x120, 0x120, 0x1120,
0x110, 0x110, 0x101, 0x202, 0x203, 0x300, 0x400, 0x500, 0x201, 0x302, 0x303, 0x1000, 0x1000, 0x1000,
0x1000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x21,
0x3, 0x3, 0x3, 0x3, 0x0, 0x0, 0x0, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000,
0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x0, 0x0, 0x0, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000,
0x1000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x110, 0x110,
0x110, 0x0, 0x1000, 0x4, 0x0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0,
0xFFFF, 0xFFFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0xFFFF, 0xFFFF, 0xFFFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFFFF,
0xFFFF, 0x0, 0x0, 0x0, 0x0, 0x0,
};
bool dAcItemBase_c::isValidItemTypeIdx(int itemId) {
return itemId < ARRAY_LENGTH(sItemTypeFlags);
}
bool dAcItemBase_c::getItemTypeFromId(u16 itemID, u32 *pOutType) {
bool valid = isValidItemTypeIdx(itemID);
if (valid) {
*pOutType = sItemTypeFlags[itemID];
}
return valid;
}
bool dAcItemBase_c::getItemAnimType(u16 itemId, u32 *pOutType) {
u32 type;
bool valid = getItemTypeFromId(itemId, &type);
if (valid) {
*pOutType = type >> 12 & 0xF;
}
return valid;
}
int dAcItemBase_c::getHeartContainerHeartIncrease() {
return 1;
}
int dAcItemBase_c::getCompletedHeartPieceHeartIncrease() {
return 1;
}
u8 dAcItemBase_c::getTearIdx(int tearNum) {
return tearNum / 15;
}
bool dAcItemBase_c::getFlagIdxForTear(int tearNum, u32 *pOutFlag) {
u8 idx = getTearIdx(tearNum);
if (idx == 0) {
*pOutFlag = 0xd;
return true;
} else if (idx == 1) {
*pOutFlag = 0xe;
return true;
} else {
return false;
}
}
u16 dAcItemBase_c::getTearBit(int tearNum) {
return 1 << tearNum % 15;
}
bool dAcItemBase_c::setDungeonFlagForTear(int tearNum) {
u32 flag_idx;
if (!getFlagIdxForTear(tearNum, &flag_idx)) {
return false;
}
// idk
int idx = DungeonflagManager::sInstance->mStageIndex;
const u16 *pData = FileManager::sInstance->getDungeonFlagsConst() + ((idx & 0x1FFF) * 4);
u32 counterMask = DungeonflagManager::sInstance->mpFlagIndex->getCounterOrFlag(flag_idx, pData, 8);
u32 tearMask = getTearBit(tearNum);
DungeonflagManager::sInstance->setToValue(flag_idx, tearMask | counterMask);
return true;
}
u16 dAcItemBase_c::getItemId() {
return mId;
}
// TODO: Incorrect location
bool isItemThatHasStruct(u16 itemId) {
return itemId;
}
// TODO: Incorrect location
u16 getIndex(u16 itemId) {
return itemId;
}
// TODO: Incorrect location
// const ItemFlagStruct *getItemFlagStruct(u16 itemId) {
// if (isItemThatHasStruct(itemId)) {
// return &sItemFlagStructs[getIndex(itemId)];
// } else {
// return &sDefaultFlagStruct;
// }
// }
fLiMgBa_c dAcItem_c::sItemList;
SPECIAL_ACTOR_PROFILE(ITEM, dAcItem_c, fProfile::ITEM, 0x2B, 0, 2);
STATE_DEFINE(dAcItem_c, Wait);
STATE_DEFINE(dAcItem_c, Carry);
STATE_DEFINE(dAcItem_c, GetBeetle);
STATE_DEFINE(dAcItem_c, WaitGet);
STATE_DEFINE(dAcItem_c, Get);
STATE_DEFINE(dAcItem_c, WaitGetDemo);
STATE_DEFINE(dAcItem_c, WaitForcedGetDemo);
STATE_DEFINE(dAcItem_c, GetDemo);
STATE_DEFINE(dAcItem_c, WaitTBoxGetDemo);
STATE_DEFINE(dAcItem_c, ResurgeWait);
STATE_DEFINE(dAcItem_c, WaitTurnOff);
STATE_DEFINE(dAcItem_c, WaitSacredDewGetEffect);
dAcItem_c::dAcItem_c()
: mStateMgr(*this, sStateID::null), mEff_0x8F4(this), mEff_0x928(this), mEff_0x95C(this), mEff_0x990(this),
mEff_0x9C4(this), mEff_0x9F8(this), mEff_0xA2C(this), mEff_0xA60(this), mNode(this),
mEventRelated(*this, nullptr), mDowsingTarget(this, DowsingTarget::SLOT_NONE), mItemQueuePrev(nullptr),
mItemQueueNext(nullptr) {
mField_0xCD8 = 1.0f;
mBaseScale = 1.0f;
mCurrentScale = 1.0f;
mField_0xCE4 = 1.0f;
mField_0xCE8 = 1.0f;
mField_0xCEC = 1.0f;
mItemFlags = 0;
mField_0xD4C = 0;
mbNoDespawn = false;
mbNoGravity = false;
mField_0xD51 = 0;
mField_0xD56 = 0;
mbShowItemLighting = false;
mField_0xD62 = 0;
mField_0xD63 = 0;
mField_0xD65 = 0;
mField_0xD66 = 0;
sItemList.append(&mNode);
unkByteTargetFiRelated = 3;
}
dAcItem_c::~dAcItem_c() {
delete mField_0xB3C;
for (int i = 0; i < 2; i++) {
delete mField_0xB34[i];
}
mDowsingTarget.doUnregister();
}
void dAcItem_c::initializeState_Wait() {}
void dAcItem_c::executeState_Wait() {}
void dAcItem_c::finalizeState_Wait() {}
void dAcItem_c::initializeState_Carry() {}
void dAcItem_c::executeState_Carry() {}
void dAcItem_c::finalizeState_Carry() {}
void dAcItem_c::initializeState_GetBeetle() {}
void dAcItem_c::executeState_GetBeetle() {}
void dAcItem_c::finalizeState_GetBeetle() {}
void dAcItem_c::initializeState_WaitGet() {}
void dAcItem_c::executeState_WaitGet() {}
void dAcItem_c::finalizeState_WaitGet() {}
void dAcItem_c::initializeState_Get() {}
void dAcItem_c::executeState_Get() {}
void dAcItem_c::finalizeState_Get() {}
void dAcItem_c::initializeState_WaitGetDemo() {}
void dAcItem_c::executeState_WaitGetDemo() {}
void dAcItem_c::finalizeState_WaitGetDemo() {}
void dAcItem_c::initializeState_WaitForcedGetDemo() {}
void dAcItem_c::executeState_WaitForcedGetDemo() {}
void dAcItem_c::finalizeState_WaitForcedGetDemo() {}
void dAcItem_c::initializeState_GetDemo() {}
void dAcItem_c::executeState_GetDemo() {}
void dAcItem_c::finalizeState_GetDemo() {}
void dAcItem_c::initializeState_WaitTBoxGetDemo() {}
void dAcItem_c::executeState_WaitTBoxGetDemo() {}
void dAcItem_c::finalizeState_WaitTBoxGetDemo() {}
void dAcItem_c::initializeState_ResurgeWait() {}
void dAcItem_c::executeState_ResurgeWait() {}
void dAcItem_c::finalizeState_ResurgeWait() {}
void dAcItem_c::initializeState_WaitTurnOff() {}
void dAcItem_c::executeState_WaitTurnOff() {}
void dAcItem_c::finalizeState_WaitTurnOff() {}
void dAcItem_c::initializeState_WaitSacredDewGetEffect() {}
void dAcItem_c::executeState_WaitSacredDewGetEffect() {}
void dAcItem_c::finalizeState_WaitSacredDewGetEffect() {}
+7 -6
View File
@@ -1,5 +1,6 @@
#include "toBeSorted/counters/counter.h"
#include "d/a/d_a_item.h"
#include "d/flag/itemflag_manager.h"
#include "toBeSorted/counters/counter.h"
static u16 getBaseCapacity();
static u16 getExtraWalletCapacity();
@@ -21,10 +22,10 @@ struct WalletStruct {
/* 8016DE10 */ static u16 getBaseCapacity() {
int i = 0;
/* 804E91B0 */ WalletStruct wallet_definitions[4] = {
{0x6c, 500},
{0x6d, 1000},
{0x6e, 5000},
{0x6f, 9000},
{ITEM_MEDIUM_WALLET, 500},
{ ITEM_BIG_WALLET, 1000},
{ ITEM_GIANT_WALLET, 5000},
{ITEM_TYCOON_WALLET, 9000},
};
const WalletStruct *wallet = &wallet_definitions[3];
for (; i < 4; i++, wallet--) {
@@ -39,7 +40,7 @@ struct WalletStruct {
extern "C" u16 getCounterByIndex(u16);
/* 8016DEC0 */ static u16 getExtraWalletCapacity() {
return 300 * getCounterByIndex(0x27);
return 300 * getCounterByIndex(0x27); // Maybe 0x27 corresponds to item 27 -> small wallet?
}
/* 80575610 */ RupeeCounter RUPEE_COUNTER;
+10 -8
View File
@@ -1,19 +1,18 @@
#include "toBeSorted/dowsing_target.h"
#include "c/c_math.h"
#include "m/m_mtx.h"
#include "d/flag/itemflag_manager.h"
#include "d/flag/storyflag_manager.h"
#include "m/m_mtx.h"
#include "toBeSorted/tlist.h"
typedef TList<DowsingTarget, offsetof(DowsingTarget, mLink)> DowsingList;
DowsingList DOWSING_LISTS[8];
static const int DOWSING_TARGET_STORY_FLAGS[8] = {
100, 105, 100, 104, 108, 110, 109, 102,
};
}; // TODO (Story Flag ID)
DowsingTarget::~DowsingTarget() {
doUnregister();
@@ -56,6 +55,8 @@ void DowsingTarget::getPosition(mVec3_c &position) {
PSMTXMultVec(mtx.m, mOffset, position);
}
// TODO (Story Flag IDs)
bool DowsingTarget::hasZeldaDowsing() {
return StoryflagManager::sInstance->getCounterOrFlag(100);
}
@@ -73,14 +74,15 @@ bool DowsingTarget::hasDesertNodeDowsing() {
}
inline bool checkTrial(u16 itemflag, u16 storyflag) {
return (ItemflagManager::sInstance->getFlagDirect(itemflag) && !StoryflagManager::sInstance->getCounterOrFlag(storyflag)) ? true : false;
return (ItemflagManager::sInstance->getFlagDirect(itemflag) &&
!StoryflagManager::sInstance->getCounterOrFlag(storyflag)) ?
true :
false;
}
// TODO (Story Flag IDs) (you get the point lmao)
bool DowsingTarget::hasAnyTrialDowsing() {
return checkTrial(187, 93) ||
checkTrial(188, 97) ||
checkTrial(189, 98) ||
checkTrial(193, 99);
return checkTrial(187, 93) || checkTrial(188, 97) || checkTrial(189, 98) || checkTrial(193, 99);
}
bool DowsingTarget::hasSacredWaterDowsing() {
+8 -6
View File
@@ -6,6 +6,7 @@
// clang-format off
#include "sized_string.h"
#include "toBeSorted/dowsing_target.h"
// clang-format on
// This class here makes no sense and the name might
@@ -111,14 +112,15 @@ u16 *FileManager::getStoryFlagsMut() {
if (fileNum != 0) {
file = &mFileB;
}
file->new_file = 0;
file->health_capacity = 0x18;
file->unused_heart_related = 0x18;
file->current_health = 0x18;
file->health_capacity = 24; // 6 hearts * 4 quarters
file->unused_heart_related = 24;
file->current_health = 24;
file->shield_pouch_slot = 8;
file->equipped_b_item = 0xb;
file->selectedDowsingSlot = 0x8;
file->lastUsedPouchItemSlot = 0x8;
file->equipped_b_item = 0xb; // TODO (B Wheel Id)
file->selectedDowsingSlot = DowsingTarget::SLOT_NONE;
file->lastUsedPouchItemSlot = 8;
SizedString<32> buf;
buf = "F405";
+11 -35
View File
@@ -3,8 +3,9 @@
#include "c/c_lib.h"
#include "c/c_math.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/a/obj/d_a_obj_item.h"
#include "m/m_angle.h"
#include "m/m_vec.h"
@@ -366,34 +367,11 @@ const LowHealthReplacement LOW_HEALTH_REPLACEMENTS[] = {
},
};
// TODO: Convert to enum once work on items has started
static const u16 SPECIAL_ITEM_ARRAY[] = {
0, // None
6, // Heart
6, // Heart
2, // Green Rupee
3, // Blue Rupee
4, // Red Rupee
0x2b, // Farore Tear
0x28, // 5 Bombs
0x29, // 10 Bombs
7, // Single Arrow
8, // Bundle Arrows
0x39, // 5 Deku Seeds
0, // None
0, // None
0x1c, // ET Key Piece
0xa5, // Eldin Ore
58, // ???
59, // ???
183, // ???
184, // ???
185, // ???
72, // Fairy
72, // Fairy
1, // Small Key
34, // Rupoor
};
int SPECIAL_ITEM_ARRAY[] = {ITEM_NONE, ITEM_HEART, ITEM_HEART, ITEM_GREEN_RUPEE, ITEM_BLUE_RUPEE,
ITEM_RED_RUPEE, ITEM_FARORE_TEAR, ITEM_5_BOMBS, ITEM_10_BOMBS, ITEM_SINGLE_ARROW,
ITEM_BUNDLE_ARROWS, ITEM_5_DEKU_SEEDS, ITEM_NONE, ITEM_NONE, ITEM_KEY_PIECE,
ITEM_ELDIN_ORE, ITEM_UNK_58, ITEM_UNK_59, ITEM_UNK_183, ITEM_UNK_184,
ITEM_UNK_185, ITEM_FAIRY, ITEM_FAIRY, ITEM_SMALL_KEY, ITEM_RUPOOR};
static const u32 sNumDropEntries = 0x36;
static const struct {
@@ -403,8 +381,7 @@ static const struct {
0x36,
sList,
};
static const u16 RAND_RUPEE_ARRAY[] = {2, 3, 4};
static const int RAND_RUPEE_ARRAY[3] = {ITEM_GREEN_RUPEE, ITEM_BLUE_RUPEE, ITEM_RED_RUPEE};
extern "C" int getCurrentBowType();
extern "C" int getCurrentSlingshotType();
@@ -435,7 +412,7 @@ int SpecialItemDropMgr::fn_800C7BB0(int specialItemId) {
} else if (specialItemId != 0x27 && (entryIdx == 1 || entryIdx == 2) && isHeroMode()) {
// Hearts generally don't drop on Hero Mode unless it's a special kind of heart (which?)
weight = 0;
} else if ((entryIdx == 7 || entryIdx == 8) && !dAcItem_c::checkFlag(/* Bomb Bag */ 92)) {
} else if ((entryIdx == 7 || entryIdx == 8) && !dAcItem_c::checkFlag(ITEM_BOMB_BAG)) {
// Bombs won't drop until you get the Bomb Bag
weight = 0;
}
@@ -487,15 +464,14 @@ int SpecialItemDropMgr::giveSpecialDropItem(
bool ret = spawnSpecialDropItem(specialItemId, roomid, pos, subtype, rot);
if (shouldTryExtraHearts(specialItemId)) {
for (u32 i = 0; i < adventurePouchCountItem(/* HEART_MEDAL */ 100); i++) {
for (u32 i = 0; i < adventurePouchCountItem(ITEM_HEART_MEDAL); i++) {
bool ok = spawnSpecialDropItem(0x27, roomid, pos, subtype, rot);
ret |= ok;
}
}
if (shouldTryExtraRupees(specialItemId)) {
for (u32 i = 0;
i < adventurePouchCountItem(/* RUPEE_MEDAL */ 101) + adventurePouchCountItem(/* CURSED_MEDAL */ 104);
for (u32 i = 0; i < adventurePouchCountItem(ITEM_RUPEE_MEDAL) + adventurePouchCountItem(ITEM_CURSED_MEDAL);
i++) {
bool ok = spawnSpecialDropItem(0x28, roomid, pos, subtype, rot);
ret |= ok;
+655
View File
@@ -0,0 +1,655 @@
"""
File Setup sets up a header and cpp file template for the specified .s and symbol file.
Note: The file splits must already be made for this to work properly (including .data)
Call with:
python ./tools/custom/file_setup.py PATH_TO_S_FILE PATH_TO_SYMBOLS_FILE
From Rel Setup:
We have about 600 actor RELs, and quite a lot of them use a heavily
templated state system with 5 vtables, 24 function instances, and another
3 actual actor functions per state. This is not difficult to set up,
but it *is* quite tedious. But even if setting up a REL takes 5 minutes,
we're looking at 50+ hours, so if I can write this script in less than 50
hours, it was worth it.
For this file:
This has been modifed so that actors from the main DOL can be setup as well,
given a pre-split asm file. This has not yet been tested extensively, so please
make backup before running.
"""
from dataclasses import dataclass
import glob
import os
import pathlib
import re
import string
import sys
from typing import List
CLASS_DIR_TREE = {
"d": {
"a": {
"b": {},
"e": {},
"npc": {},
"obj": {},
},
"t": {},
}
}
def get_file_path(file_name: str, tree=CLASS_DIR_TREE):
name_components = file_name.split("_", 1)
if len(name_components) == 1:
return ""
subtree = tree.get(name_components[0], None)
if subtree is None:
return ""
else:
return name_components[0] + "/" + get_file_path(name_components[1], subtree)
def L(items):
"""Join items and add a length prefix"""
s = None
if isinstance(items, list):
s = "".join(items)
else:
s = items
return str(len(s)) + s
def m_size(size: int):
return lambda f: f.size == size
def m_instructions(instrs: list):
return lambda f: all(instr in f.instructions for instr in instrs)
def simple_state_function(fn_name: str, load_02: str):
instrs = m_instructions([f"lwzu r12, 0x18(r3)", f"lwz r12, {load_02}(r12)"])
return (
[m_size(0x10), instrs],
lambda x: fn_name
+ L(
[
"sStateMgr_c<",
L(x),
",20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>",
]
)
+ "Fv",
)
def state_proxy_function(fn_name: str, load_01: str):
instrs = m_instructions(
[
"mr r4, r3",
"lwz r3, 0x8(r3)",
"lwz r4, 0x4(r4)",
"lwz r12, 0x0(r3)",
f"lwz r12, {load_01}(r12)",
]
)
return (
[m_size(0x1C), instrs],
lambda x: fn_name + L(["sFState_c<", L(x), ">"]) + "Fv",
)
def state_get_function(fn_name: str, load_01: str):
instrs = m_instructions(["lwzu r12, 0x18(r3)", f"lwz r12, {load_01}(r12)"])
return (
[m_size(0x10), instrs],
lambda x: fn_name
+ L(
[
"sStateMgr_c<",
L(x),
",20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>",
]
)
+ "CFv",
)
def state_invoker_function(fn_name: str, ptmf_offset: str):
instrs = m_instructions([f"addi r12, r5, {ptmf_offset}", "bl __ptmf_scall"])
return (
[m_size(0x30), instrs],
lambda x: fn_name + L(["sFStateID_c<", L(x), ">"]) + "CFR" + L(x),
)
FUNCTION_MATCHERS = [
(
[m_size(0x58), m_instructions(["bl __dt__10sStateIf_cFv"])],
lambda x: "__dt__" + L(["sFState_c<", L(x), ">"]) + "Fv",
),
(
[m_size(0x6C), m_instructions(["bl __dt__13sStateFctIf_cFv"])],
lambda x: "__dt__" + L(["sFStateFct_c<", L(x), ">"]) + "Fv",
),
(
[m_size(0xA0), m_instructions(["bl __dt__13sStateMgrIf_cFv"])],
lambda x: "__dt__"
+ L(
[
"sStateMgr_c<",
L(x),
",20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>",
]
)
+ "Fv",
),
(
[m_size(0xA4), m_instructions(["bl __dt__13sStateMgrIf_cFv"])],
lambda x: "__dt__"
+ L(["sFStateMgr_c<", L(x), ",20sStateMethodUsr_FI_c>"])
+ "Fv",
),
(
[m_size(0x10), m_instructions([f"lwzu r12, 0x18(r3)", f"lwz r12, 0x18(r12)"])],
lambda x: "changeState__"
+ L(
[
"sStateMgr_c<",
L(x),
",20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>",
]
)
+ "FRC12sStateIDIf_c",
),
simple_state_function("executeState__", "0x10"),
state_get_function("getStateID__", "0x28"),
(
[m_size(0x60), m_instructions(["lwz r12, 0xc(r12)"])],
lambda x: "build__" + L(["sFStateFct_c<", L(x), ">"]) + "FRC12sStateIDIf_c",
),
(
[m_size(0xC), m_instructions(["stw r0, 0x0(r4)"])],
lambda x: "dispose__" + L(["sFStateFct_c<", L(x), ">"]) + "FRP10sStateIf_c",
),
state_proxy_function("initialize__", "0x28"),
state_proxy_function("execute__", "0x2c"),
state_proxy_function("finalize__", "0x30"),
simple_state_function("initializeState__", "0xc"),
simple_state_function("finalizeState__", "0x14"),
simple_state_function("refreshState__", "0x1c"),
state_get_function("getState__", "0x20"),
state_get_function("getNewStateID__", "0x24"),
state_get_function("getOldStateID__", "0x2c"),
state_invoker_function("finalizeState__", "0x24"),
state_invoker_function("executeState__", "0x18"),
state_invoker_function("initializeState__", "0xc"),
(
[m_size(0x58), m_instructions(["bl __dt__10sStateID_cFv"])],
lambda x: "__dt__" + L(["sFStateID_c<", L(x), ">"]) + "Fv",
),
(
[m_size(0x88), m_instructions(["bl strrchr", "bl strcmp"])],
lambda x: "isSameName__" + L(["sFStateID_c<", L(x), ">"]) + "CFPCc",
),
]
# ctor call, base class, include file
BASE_CLASSES = [
("bl __ct__7dBase_cFv", "dBase_c", "d/d_base.h"),
("bl __ct__9dAcBase_cFv", "dAcBase_c", "d/a/d_a_base.h"),
("bl __ct__12dAcObjBase_cFv", "dAcObjBase_c", "d/a/obj/d_a_obj_base.h"),
("bl __ct__11dAcEnBase_cFv", "dAcEnBase_c", "d/a/e/d_a_en_base.h"),
("bl __ct__8dAcNpc_cFv", "dAcNpc_c", "d/a/npc/d_a_npc.h"),
("bl ActorNpcBase__ctor2", "dAcNpc_c", "d/a/npc/d_a_npc.h"),
("bl __ct__16dAcObjDoor_cFv", "dAcObjDoor_c", "d/a/obj/d_a_obj_door_base.h"),
# bit of a lie but not worth automating
("bl ActorLytBase__ctor", "dBase_c", "d/d_base.h"),
("bl fn_800629D0", "dBase_c", "d/d_base.h"),
]
@dataclass
class Function:
name: str
size: int
instructions: list
@dataclass
class DataObj:
name: str
size: int
values: list
def get_strings(block: DataObj):
strings = []
curr_str = ""
for val in block.values:
if not val.startswith(".4byte 0x"):
if curr_str:
strings.append(curr_str)
curr_str = ""
if val.startswith(".string"):
strings.append(val[9:-1])
continue
num_val = val[9:]
for i in range(0, 4):
byte_val = int(num_val[(2 * i) : (2 * (i + 1))], 16)
if (
byte_val >= ord("0")
and byte_val <= ord("9")
or byte_val >= ord("a")
and byte_val <= ord("z")
or byte_val >= ord("A")
and byte_val <= ord("Z")
or byte_val == ord(":")
or byte_val == ord("_")
):
curr_str += chr(byte_val)
else:
if curr_str:
strings.append(curr_str)
curr_str = ""
continue
return strings
def load_profiles_list():
text = pathlib.Path("./include/f/f_profile_name.h").read_text()
result = []
for line in text.splitlines():
spl = line.split(" */ ")
if len(spl) > 1:
result.append(spl[1][:-1])
return result
PROFILES_LIST = load_profiles_list()
def get_profile_name(id: int):
return PROFILES_LIST[id]
def match_class_profile(block: DataObj, class_name: str, static_ctor: str):
"""
Returns new_ctor_function_name, new_data_name, decl_header
"""
if not len(block.values) or not static_ctor in block.values[0]:
return None
if not all(v.startswith(".4byte") for v in block.values):
return None
if block.values[0].startswith(".4byte 0x"):
return None
if not all(v.startswith(".4byte 0x") for v in block.values[1:4]):
return None
prof_id = int(block.values[1][9:13], 16)
draw_order = int(block.values[1][13:17], 16)
properties = int(block.values[2][9:], 16)
base_properties = int(block.values[3][9:], 16) if block.size >= 0x10 else None
prof_name = get_profile_name(prof_id)
new_fn_name = class_name + "_classInit__Fv"
new_block_name = "g_profile_" + prof_name
if base_properties is not None:
decl = f"SPECIAL_ACTOR_PROFILE({prof_name}, {class_name}, fProfile::{prof_name}, {hex(draw_order).upper()}, {str(properties)}, {str(base_properties)});"
else:
decl = f"SPECIAL_BASE_PROFILE({prof_name}, {class_name}, fProfile::{prof_name}, {hex(draw_order).upper()}, {str(properties)});"
return new_fn_name, new_block_name, decl
data_re = re.compile(
"# \\.data:0x([0-9A-F]+) \\| 0x([0-9A-F]+) \\| size: 0x([0-9A-F]+)"
)
def parse_data(file):
blocks = []
lines = file.splitlines()
i = 0
while i < len(lines):
if m := data_re.match(lines[i]):
block_lines = []
size = int(m.group(3), 16)
i += 1
obj_name = lines[i].split(",")[0][5:]
i += 1
while not lines[i].startswith(".endobj"):
block_lines.append(lines[i].strip())
i += 1
blocks.append(DataObj(obj_name, size, block_lines))
i += 1
return blocks
text_re = re.compile(
"# \\.text:0x([0-9A-F]+) \\| 0x([0-9A-F]+) \\| size: 0x([0-9A-F]+)"
)
def parse_function(file):
blocks = []
lines = file.splitlines()
i = 0
while i < len(lines):
if m := text_re.match(lines[i]):
block_lines = []
size = int(m.group(3), 16)
i += 1
obj_name = lines[i].split(",")[0][4:]
i += 1
while not lines[i].startswith(".endfn"):
if lines[i].startswith("/*"):
block_lines.append(lines[i].split("\t")[1].strip())
i += 1
blocks.append(Function(obj_name, size, block_lines))
i += 1
return blocks
DEFAULT_NAME_FALLBACKS = [
("d_a_b_", "dAcB"),
("d_a_e_", "dAcEn"),
("d_a_obj_", "dAcO"),
("d_a_npc_", "dAcNpc"),
("d_t_", "dTg"),
("d_a_", "dAc"),
("d_", "d"),
]
def build_class_name(strings, file_name):
for s in strings:
if "::StateID_" in s:
return s.split("::")[0]
for s in strings:
if "::m_allocator" in s:
return s.split("::")[0]
for base, cl in DEFAULT_NAME_FALLBACKS:
if file_name.startswith(base):
l = len(base)
return cl + string.capwords(file_name[l:], "_").replace("_", "") + "_c"
return None
def find_static_ctor(fns: List[Function]):
for fn in fns:
for instr in fn.instructions:
if instr == "bl __nw__7fBase_cFUl":
has_inline_ctor = fn.size > 0x34
return fn.name, has_inline_ctor
def find_dtors(fns: List[Function]):
dtors = []
for fn in fns:
for instr in fn.instructions:
if instr == "bl __dl__7fBase_cFPv":
dtors.append(fn.name)
return dtors
def find_state_candidates(data_blocks: List[DataObj], num_states):
for block in data_blocks:
fns = []
i = 0
while i + 2 < len(block.values):
if (
block.values[i] == ".4byte 0x00000000"
and block.values[i + 1] == ".4byte 0xFFFFFFFF"
):
fn_candidate = block.values[i + 2]
if fn_candidate.startswith(".4byte") and not fn_candidate[
7:
].startswith("0x"):
fns.append(fn_candidate[7:])
i += 1
if len(fns) == num_states * 3:
return fns
return None
def find_vtable_block_idx(data_blocks: list[DataObj], dtor_listing):
dtor = ".4byte " + dtor_listing
for i, block in enumerate(data_blocks):
if dtor in block.values:
return i
return None
def find_state_names(strings):
states = []
for s in strings:
spl = s.split("::StateID_")
if len(spl) == 2:
states.append(spl[1])
return states
FILES_WITH_MULTIPLE_STATE_MGRS = ["d_lyt_file_select", "d_a_b_girahimu3_first"]
def process_file(file_name, data_blocks: List[DataObj], fns: List[Function], sym_file):
has_multiple_templates = file_name in FILES_WITH_MULTIPLE_STATE_MGRS
strings = [s for b in data_blocks for s in get_strings(b)]
name = build_class_name(strings, file_name)
renames = []
new_ctor_name = "__ct__" + L(name) + "Fv"
new_dtor_name = "__dt__" + L(name) + "Fv"
old_static_ctor_name, has_inline_ctor = find_static_ctor(fns)
if not old_static_ctor_name:
print(file_name, "no ctor!")
return
old_dtor_names = find_dtors(fns)
if len(old_dtor_names) == 0:
print(file_name, "no dtor")
return
if len(old_dtor_names) > 1:
print(file_name, "multiple dtors")
print(old_dtor_names)
# chosen_dtor = 1 # HACK for dAcItem
return
else:
chosen_dtor = 0
old_dtor_name = old_dtor_names[chosen_dtor]
renames.append((old_dtor_name, new_dtor_name))
for b in data_blocks:
if res := match_class_profile(b, name, old_static_ctor_name):
new_static_ctor_name, new_data_name, decl_header = res
renames.append((old_static_ctor_name, new_static_ctor_name))
renames.append((b.name, new_data_name))
break
for f in fns:
for ctor, base_class_, include_ in BASE_CLASSES:
if any(instr == ctor for instr in f.instructions):
renames.append((f.name, new_ctor_name))
base_class = base_class_
include = include_
for f in fns:
if not has_multiple_templates:
for matchers, name_fn in FUNCTION_MATCHERS:
if all(match(f) for match in matchers):
renames.append((f.name, name_fn(name)))
if "bl __ct__10sStateID_cFPCc" in f.instructions:
renames.append((f.name, f"__sinit_\\{file_name}_cpp"))
uses_state_system = not has_multiple_templates and any(
"bl __ct__10sStateID_cFPCc" in fn.instructions for fn in fns
)
auto_functions = []
state_decls = []
state_defs = []
includes = [include]
if uses_state_system:
includes.append("s/s_State.hpp")
includes.append("s/s_StateMgr.hpp")
state_names = find_state_names(strings)
# Since find_state_candidates uses ptmfs for state funcs, a hint may need to be applied.
# This is done by finding the vtable, since most of the time (?) the funcs appear after the vtable.
# dAcItem has *many* ptmfs, which can cause issues
# Easy way to find vtable? Find the dtor in the obj :)
vtable_idx = find_vtable_block_idx(data_blocks, old_dtor_name)
blocks_after_vtable = data_blocks
if vtable_idx:
blocks_after_vtable = data_blocks[vtable_idx:]
state_candidates = find_state_candidates(blocks_after_vtable, len(state_names))
if state_candidates:
for idx, orig in enumerate(state_candidates):
if idx % 3 == 0:
method = "finalize"
elif idx % 3 == 1:
method = "execute"
elif idx % 3 == 2:
method = "initialize"
state_name = state_names[idx // 3]
readable_function = f"void {name}::{method}State_{state_name}()" + " {}"
mangled_function = f"{method}State_{state_name}__" + L(name) + "Fv"
renames.append((orig, mangled_function))
auto_functions.append(readable_function)
# fix order
if idx % 3 == 2:
auto_functions[-1], auto_functions[-3] = (
auto_functions[-3],
auto_functions[-1],
)
for state_name in state_names:
state_decls.append(f"STATE_FUNC_DECLARE({name}, {state_name});")
state_defs.append(f"STATE_DEFINE({name}, {state_name});")
else:
print(file_name, "no matching state functions (maybe virtual?)")
header_guard = file_name.upper() + "_H"
file_path = get_file_path(file_name) + file_name
with open(os.path.join("./include", file_path + ".h"), "w") as f:
f.write(f"#ifndef {header_guard}\n")
f.write(f"#define {header_guard}\n\n")
for i in includes:
f.write(f'#include "{i}"\n')
f.write("\n")
f.write(f"class {name} : public {base_class} {{ \n")
f.write(f"public:\n")
if has_inline_ctor:
f.write(f"\t{name}()")
if uses_state_system:
f.write(" : mStateMgr(*this, sStateID::null)")
f.write(" {}\n")
f.write(f"\tvirtual ~{name}() {{}}\n\n")
else:
f.write(f"\t{name}();\n")
f.write(f"\tvirtual ~{name}();\n\n")
if state_decls:
for s in state_decls:
f.write(f"\t{s}\n")
f.write("\n")
f.write("private:\n")
if uses_state_system:
f.write(f"\t/* 0x??? */ STATE_MGR_DECLARE({name});\n")
f.write("};\n")
f.write("#endif\n")
with open(os.path.join("./src/", file_path + ".cpp"), "w+") as f:
f.write(f'#include "{file_path}.h"\n\n')
f.write(f"{decl_header}\n\n")
if state_defs:
for s in state_defs:
f.write(f"{s}\n")
f.write("\n")
if not has_inline_ctor:
f.write(f"{name}::{name}()")
if uses_state_system:
f.write(" : mStateMgr(*this, sStateID::null)")
f.write(" {}\n")
f.write(f"{name}::~{name}() {{}}\n\n")
for fn in auto_functions:
f.write(fn + "\n")
symbols_path = pathlib.Path(sym_file)
symbols_txt = symbols_path.read_text()
# print(renames)
for orig, new_name in renames:
symbols_txt = symbols_txt.replace(f"{orig} = .", f"{new_name} = .")
symbol_lines = symbols_txt.splitlines()
for idx, l in enumerate(symbol_lines):
if l.startswith("__sinit") and l.find("scope:local") == -1:
symbol_lines[idx] += " scope:local"
symbols_txt = "\n".join(symbol_lines)
symbols_path.write_text(symbols_txt)
def main():
s_file = sys.argv[1]
sym_file = sys.argv[2]
s_text = pathlib.Path(s_file).read_text()
fns = parse_function(s_text)
datas = parse_data(s_text)
if len(datas) == 0:
print("No data found. Exiting")
file_name = pathlib.Path(s_file).stem.removesuffix("NP")
process_file(file_name, datas, fns, sym_file)
if __name__ == "__main__":
main()