diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index c3b2827a..af44b95e 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -1501,6 +1501,7 @@ d/a/d_a_item.cpp: .ctors start:0x804DB828 end:0x804DB82C .rodata start:0x804EBBB0 end:0x804ED340 .data start:0x80533268 end:0x80534490 + .sdata start:0x80573968 end:0x805739B0 .sbss start:0x805758B8 end:0x805758E0 .sdata2 start:0x8057BD88 end:0x8057BF80 .bss start:0x805B4490 end:0x805B48A8 @@ -1510,6 +1511,7 @@ d/a/obj/d_a_obj_bomb.cpp: .ctors start:0x804DB82C end:0x804DB830 .rodata start:0x804ED340 end:0x804ED350 .data start:0x80534490 end:0x805347A8 + .sdata start:0x805739B0 end:0x805739C8 .sbss start:0x805758E0 end:0x805758F0 d/a/obj/d_a_obj_arrow.cpp: @@ -1517,6 +1519,7 @@ d/a/obj/d_a_obj_arrow.cpp: .ctors start:0x804DB830 end:0x804DB834 .rodata start:0x804ED350 end:0x804ED380 .data start:0x805347A8 end:0x80534AD0 + .sdata start:0x805739C8 end:0x805739D8 .sbss start:0x805758F0 end:0x80575900 d/a/obj/d_a_obj_boomerang.cpp: diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 3475a99b..1fd503f6 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -13281,10 +13281,10 @@ AcItem__getItemTypeMaybeMaybeFromId = .text:0x80247220; // type:function size:0x AcItem__getItemAnimType = .text:0x80247280; // type:function size:0x44 AcItem__getHeartContainerHeartIncrease = .text:0x802472D0; // type:function size:0x8 AcItem__getCompletedHeatpieceHeartIncrease = .text:0x802472E0; // type:function size:0x8 -divBy5 = .text:0x802472F0; // type:function size:0x24 -getFlagIdxForTear = .text:0x80247320; // type:function size:0x60 -getShiftForTear = .text:0x80247380; // type:function size:0x34 -setDungeonflagForTearnum = .text:0x802473C0; // type:function size:0xB0 +getTearIdx__13dAcItemBase_cFi = .text:0x802472F0; // type:function size:0x24 +getFlagIdxForTear__13dAcItemBase_cFiPUl = .text:0x80247320; // type:function size:0x60 +getTearBit__13dAcItemBase_cFi = .text:0x80247380; // type:function size:0x34 +setDungeonFlagForTear__13dAcItemBase_cFi = .text:0x802473C0; // type:function size:0xB0 getTrialIndex2 = .text:0x80247470; // type:function size:0xA8 fn_80247520 = .text:0x80247520; // type:function size:0xC fn_80247530 = .text:0x80247530; // type:function size:0xC @@ -13329,14 +13329,14 @@ fn_80247950 = .text:0x80247950; // type:function size:0x28 AcItem__isItemFromMitts = .text:0x80247980; // type:function size:0x10 fn_80247990 = .text:0x80247990; // type:function size:0x8 getRandomEntryFromWeightedList = .text:0x802479A0; // type:function size:0x17C -determineActualItemIdFromItem = .text:0x80247B20; // type:function size:0x84 +determineActualItemIdFromItem__9dAcItem_cFUs = .text:0x80247B20; // type:function size:0x84 fn_80247BB0 = .text:0x80247BB0; // type:function size:0x10C m3d__smdl_c__getNodePos = .text:0x80247CC0; // type:function size:0x58 fn_80247D20 = .text:0x80247D20; // type:function size:0x14C fn_80247E70 = .text:0x80247E70; // type:function size:0x50 increment = .text:0x80247EC0; // type:function size:0x28 fn_80247EF0 = .text:0x80247EF0; // type:function size:0xA4 -fn_80247FA0 = .text:0x80247FA0; // type:function size:0x8 +getItemId__13dAcItemBase_cFv = .text:0x80247FA0; // type:function size:0x8 fn_80247FB0 = .text:0x80247FB0; // type:function size:0x8 dAcItem_c_classInit__Fv = .text:0x80247FC0; // type:function size:0x30 AcItem__dontForceDemo = .text:0x80247FF0; // type:function size:0x8 @@ -13354,8 +13354,8 @@ __dt__24sFStateFct_c<9dAcItem_c>Fv = .text:0x80248330; // type:function size:0x6 __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 +__dt__13dAcItem_0xB3CFv = .text:0x80248740; // type:function size:0x40 +__dt__13dAcItem_0xB34Fv = .text:0x80248780; // type:function size:0x40 AcItem__spawnItem = .text:0x802487C0; // type:function size:0x170 spawnItem2 = .text:0x80248930; // type:function size:0xBC fn_802489F0 = .text:0x802489F0; // type:function size:0x298 @@ -13380,7 +13380,7 @@ fn_8024A150 = .text:0x8024A150; // type:function size:0xC fn_8024A160 = .text:0x8024A160; // type:function size:0x34 spawnItem22 = .text:0x8024A1A0; // type:function size:0x4 AcItem__getItemIdFromParam = .text:0x8024A1B0; // type:function size:0x8 -AcItem__getSubtypeFromParam = .text:0x8024A1C0; // type:function size:0x8 +getSubtypeFromParam__9dAcItem_cFUl = .text:0x8024A1C0; // type:function size:0x8 playSpawnRupeeSound = .text:0x8024A1D0; // type:function size:0x1C playSpawnHeartSound = .text:0x8024A1F0; // type:function size:0x1C playSpawnItemSound = .text:0x8024A210; // type:function size:0x1C @@ -13388,16 +13388,16 @@ fn_8024A230 = .text:0x8024A230; // type:function size:0x30 AcItem__setupItemParams = .text:0x8024A260; // type:function size:0x3C fn_8024A2A0 = .text:0x8024A2A0; // type:function size:0x10 AcItem__getItemId = .text:0x8024A2B0; // type:function size:0x8 -AcItem__getTearNumber = .text:0x8024A2C0; // type:function size:0xC -getFirstBitParams2 = .text:0x8024A2D0; // type:function size:0x24 +getTearIdx__9dAcItem_cFv = .text:0x8024A2C0; // type:function size:0xC +getFirstBitParams2__9dAcBase_cCFv = .text:0x8024A2D0; // type:function size:0x24 getParams2Lower_shift1_0x7__9dAcItem_cCFv = .text:0x8024A300; // type:function size:0x24 getCurrentTrial__9dAcItem_cFv = .text:0x8024A330; // type:function size:0x68 getTearSubtype__9dAcItem_cF7ITEM_ID = .text:0x8024A3A0; // type:function size:0x68 AcItem__GetItemGetType = .text:0x8024A410; // type:function size:0x3C 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 +createHeap__9dAcItem_cFv = .text:0x8024A470; // type:function size:0x75C +create__9dAcItem_cFv = .text:0x8024ABD0; // type:function size:0x2888 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 @@ -13405,10 +13405,10 @@ AcItem__update = .text:0x8024D570; // type:function size:0x66C 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 +setFreestandingYOffset__9dAcItem_cFf = .text:0x8024DF10; // type:function size:0x8 AcItem__setFramesInAir = .text:0x8024DF20; // type:function size:0x8 fn_8024DF30 = .text:0x8024DF30; // type:function size:0x8 -isItemDropFromEnemy = .text:0x8024DF40; // type:function size:0x24 +isItemDropFromEnemy__9dAcItem_cCFv = .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 @@ -13487,20 +13487,20 @@ AcItem__isBombDrop = .text:0x80250BB0; // type:function size:0x58 isTear__9dAcItem_cF7ITEM_ID = .text:0x80250C10; // type:function size:0x78 AcItem__is_Larvae_Ore_JellyBlob_Claw_Horn_EvilCryst_OrnSkull_GoldSkull = .text:0x80250C90; // type:function size:0xB8 AcItem__isBug = .text:0x80250D50; // type:function size:0x7C -AcItem__isTreasure = .text:0x80250DD0; // type:function size:0x138 +isTreasure2__9dAcItem_cF7ITEM_ID = .text:0x80250DD0; // type:function size:0x138 isTreasure__9dAcItem_cF7ITEM_ID = .text:0x80250F10; // type:function size:0x88 -AcItem__isItemHeart = .text:0x80250FA0; // type:function size:0x34 +isHeart2__9dAcItem_cCFv = .text:0x80250FA0; // type:function size:0x34 isSingleArrow__9dAcItem_cCFv = .text:0x80250FE0; // type:function size:0x8 -isBundleOrArrows = .text:0x80250FF0; // type:function size:0x8 -AcItem__isItemSilverRupee = .text:0x80251000; // type:function size:0x8 -AcItem__isItemGoldRupee = .text:0x80251010; // type:function size:0x8 +isArrowBundle__9dAcItem_cCFv = .text:0x80250FF0; // type:function size:0x8 +isSilverRupee__9dAcItem_cCFv = .text:0x80251000; // type:function size:0x8 +isGoldRupee__9dAcItem_cCFv = .text:0x80251010; // type:function size:0x8 AcItem__isKeyPiece2 = .text:0x80251020; // type:function size:0x8 isItem10DekuSeeds = .text:0x80251030; // type:function size:0x8 -AcItem__isHeartPiece2 = .text:0x80251040; // type:function size:0x8 +isHeartPiece__9dAcItem_cCFv = .text:0x80251040; // type:function size:0x8 AcItem__isItemBirdStatuette = .text:0x80251050; // type:function size:0x8 AcItem__isLifeTreeFruit = .text:0x80251060; // type:function size:0x8 AcItem__isItemAnyRupee = .text:0x80251070; // type:function size:0x34 -AcItem__isItemAnyTear = .text:0x802510B0; // type:function size:0x8 +isAnyTear__9dAcItem_cCFv = .text:0x802510B0; // type:function size:0x8 AcItem__isBombRefill = .text:0x802510C0; // type:function size:0x8 isTriforce__9dAcItem_cCFv = .text:0x802510D0; // type:function size:0x8 fn_802510E0 = .text:0x802510E0; // type:function size:0x44 @@ -13674,11 +13674,11 @@ fn_80252AA0 = .text:0x80252AA0; // type:function size:0xC itemGetBirdMaybe = .text:0x80252AB0; // type:function size:0x40 itemGetEventStart__9dAcItem_cFP9dAcBase_c = .text:0x80252AF0; // type:function size:0xD8 itemGetEventEnd__9dAcItem_cFP9dAcBase_c = .text:0x80252BD0; // type:function size:0x90 -AcItem__getItemId2 = .text:0x80252C60; // type:function size:0x8 +getItemId2__9dAcItem_cCFv = .text:0x80252C60; // type:function size:0x8 AcItem__setFinalDeterminedItemId = .text:0x80252C70; // type:function size:0x8 getItemInitStructForItem = .text:0x80252C80; // type:function size:0x5C -AcItem__getItemInitStruct = .text:0x80252CE0; // type:function size:0x8 -AcItem__getItemFlagStruct = .text:0x80252CF0; // type:function size:0x54 +getItemInitStruct__9dAcItem_cCFv = .text:0x80252CE0; // type:function size:0x8 +getItemFlagStruct__13dAcItemBase_cFUs = .text:0x80252CF0; // type:function size:0x54 AcItem__setFlagForItem = .text:0x80252D50; // type:function size:0x34 AcItem__checkFlagForItem2 = .text:0x80252D90; // type:function size:0x34 AcItem__setItemFlagBasedOnId = .text:0x80252DD0; // type:function size:0x34 @@ -13689,7 +13689,7 @@ AcItem__setBoundingBox = .text:0x80252EF0; // type:function size:0x88 fn_80252F80 = .text:0x80252F80; // type:function size:0x88 fn_80253010 = .text:0x80253010; // type:function size:0x88 fn_802530A0 = .text:0x802530A0; // type:function size:0xFC -AcItem__setBoundingBox2 = .text:0x802531A0; // type:function size:0x28 +applyBoundingBox__9dAcItem_cFv = .text:0x802531A0; // type:function size:0x28 AcItem__performCollection1&2 = .text:0x802531D0; // type:function size:0x34 AcItem__performCollection1 = .text:0x80253210; // type:function size:0x7E4 AcItem__performCollection2 = .text:0x80253A00; // type:function size:0x350 @@ -13698,7 +13698,7 @@ fn_80253E20 = .text:0x80253E20; // type:function size:0xC fn_80253E30 = .text:0x80253E30; // type:function size:0x15C fn_80253F90 = .text:0x80253F90; // type:function size:0xC AcItem__shouldDespawn = .text:0x80253FA0; // type:function size:0xC4 -AcItem__onTouchLink = .text:0x80254070; // type:function size:0x1EC +onTouchLink__9dAcItem_cFv = .text:0x80254070; // type:function size:0x1EC AcItem__decideOnGetOrForcedGet = .text:0x80254260; // type:function size:0x80 fn_802542E0 = .text:0x802542E0; // type:function size:0xA4 AcItem__checkAbovePosition = .text:0x80254390; // type:function size:0x78 @@ -13714,11 +13714,11 @@ fn_802548A0 = .text:0x802548A0; // type:function size:0x5C fn_80254900 = .text:0x80254900; // type:function size:0x2C fn_80254930 = .text:0x80254930; // type:function size:0x24 AcItem__isSmallKeyStaminaFruitorHeartPiece = .text:0x80254960; // type:function size:0x64 -AcItem__setupUnkColliderFlags2 = .text:0x802549D0; // type:function size:0x1D0 +setupUnkColliderFlags2__9dAcItem_cFv = .text:0x802549D0; // type:function size:0x1D0 fn_80254BA0 = .text:0x80254BA0; // type:function size:0xC fn_80254BB0 = .text:0x80254BB0; // type:function size:0x10 fn_80254BC0 = .text:0x80254BC0; // type:function size:0xCC -AcItem__setDespawnTimer = .text:0x80254C90; // type:function size:0x10 +setDespawnTimer__9dAcItem_cFUs = .text:0x80254C90; // type:function size:0x10 fn_80254CA0 = .text:0x80254CA0; // type:function size:0xC AcItem__noLongerWaiting = .text:0x80254CB0; // type:function size:0xC fn_80254CC0 = .text:0x80254CC0; // type:function size:0x4C @@ -13884,26 +13884,26 @@ AcItem__addGetEvent = .text:0x802567F0; // type:function size:0xBC makeLinkLookTowardItem = .text:0x802568B0; // type:function size:0x98 AcItem__addToGetQueue = .text:0x80256950; // type:function size:0x7C AcItem__removeFromGetQueue = .text:0x802569D0; // type:function size:0x80 -fn_80256A50 = .text:0x80256A50; // type:function size:0x84 -AcItem__isSmallKey = .text:0x80256AE0; // type:function size:0x14 +hitCallback__9dAcItem_cFP12dAcObjBase_cP8cCcD_ObjP12dAcObjBase_cP8cCcD_Obj = .text:0x80256A50; // type:function size:0x84 +isSmallKey__9dAcItem_cCFv = .text:0x80256AE0; // type:function size:0x14 isAnyRupee = .text:0x80256B00; // type:function size:0x98 -AcItem__isItemGreenRupee = .text:0x80256BA0; // type:function size:0x8 -AcItem__isItemBlueRupee = .text:0x80256BB0; // type:function size:0x8 -AcItem__isItemRedRupee = .text:0x80256BC0; // type:function size:0x8 -AcItem__isHeart2 = .text:0x80256BD0; // type:function size:0x8 -AcItem__isItemRupoor = .text:0x80256BE0; // type:function size:0x8 -AcItem__is5GratitudeCrystals = .text:0x80256BF0; // type:function size:0x8 -AcItem__isLightFruit = .text:0x80256C00; // type:function size:0x8 -AcItem__isGratitudeCrystal = .text:0x80256C10; // type:function size:0x8 -AcItem__isItemSlingshot = .text:0x80256C20; // type:function size:0x8 -AcItem__isItemBabyRattle = .text:0x80256C30; // type:function size:0x8 -AcItem__isEldinOre2 = .text:0x80256C40; // type:function size:0x8 -AcItem__isJellyBlob2 = .text:0x80256C50; // type:function size:0x8 -AcItem__isAnyRupee = .text:0x80256C60; // type:function size:0x8 +isGreenRupee__9dAcItem_cCFv = .text:0x80256BA0; // type:function size:0x8 +isBlueRupee__9dAcItem_cCFv = .text:0x80256BB0; // type:function size:0x8 +isRedRupee__9dAcItem_cCFv = .text:0x80256BC0; // type:function size:0x8 +isHeart__9dAcItem_cCFv = .text:0x80256BD0; // type:function size:0x8 +isRupoor__9dAcItem_cCFv = .text:0x80256BE0; // type:function size:0x8 +is5GratitudeCrystals__9dAcItem_cCFv = .text:0x80256BF0; // type:function size:0x8 +isLightFruit__9dAcItem_cCFv = .text:0x80256C00; // type:function size:0x8 +isGratitudeCrystal__9dAcItem_cCFv = .text:0x80256C10; // type:function size:0x8 +isSlingshot__9dAcItem_cCFv = .text:0x80256C20; // type:function size:0x8 +isBabyRattle__9dAcItem_cCFv = .text:0x80256C30; // type:function size:0x8 +isEldinOre__9dAcItem_cCFv = .text:0x80256C40; // type:function size:0x8 +isJellyBlob__9dAcItem_cCFv = .text:0x80256C50; // type:function size:0x8 +isAnyRupee__9dAcItem_cCFv = .text:0x80256C60; // type:function size:0x8 AcItem__isSingleArrowOrBundle = .text:0x80256C70; // type:function size:0x20 -AcItem__isInsect = .text:0x80256C90; // type:function size:0x8 -AcItem__isUnkTreasureGroup1 = .text:0x80256CA0; // type:function size:0x8 -AcItem__isTreasure3 = .text:0x80256CB0; // type:function size:0x8 +isInsect__9dAcItem_cCFv = .text:0x80256C90; // type:function size:0x8 +isUnkTreasureGroup1__9dAcItem_cCFv = .text:0x80256CA0; // type:function size:0x8 +isTreasure3__9dAcItem_cCFv = .text:0x80256CB0; // type:function size:0x8 AcItem__isKeyPiece3 = .text:0x80256CC0; // type:function size:0x34 AcItem__is5GratitudeCrystals2 = .text:0x80256D00; // type:function size:0x34 AcItem__isItemSingleGratitudeCrystal = .text:0x80256D40; // type:function size:0x34 @@ -16988,7 +16988,7 @@ fn_802D5AC0 = .text:0x802D5AC0; // type:function size:0x8 fn_802D5AD0 = .text:0x802D5AD0; // type:function size:0x8 fn_802D5AE0 = .text:0x802D5AE0; // type:function size:0x8 fn_802D5AF0 = .text:0x802D5AF0; // type:function size:0x8 -fn_802D5B00 = .text:0x802D5B00; // type:function size:0x8 +tearIdxToParam__17dTgForceGetFlag_cFl = .text:0x802D5B00; // type:function size:0x8 fn_802D5B10 = .text:0x802D5B10; // type:function size:0x28 fn_802D5B40 = .text:0x802D5B40; // type:function size:0x10 fn_802D5B50 = .text:0x802D5B50; // type:function size:0xC @@ -28527,8 +28527,8 @@ lbl_804EBB94 = .rodata:0x804EBB94; // type:object size:0xC align:4 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 -l_item_flag_structs = .rodata:0x804EC440; // type:object size:0x538 scope:local -l_item_types = .rodata:0x804EC978; // type:object size:0x7F8 scope:local +sItemFlagStructs__13dAcItemBase_c = .rodata:0x804EC440; // type:object size:0x538 scope:local +sItemTypeFlags__13dAcItemBase_c = .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,10 +28539,10 @@ lbl_804ED208 = .rodata:0x804ED208; // type:object size:0x20 lbl_804ED228 = .rodata:0x804ED228; // type:object size:0x20 lbl_804ED248 = .rodata:0x804ED248; // type:object size:0x20 RANDOM_ITEM_DEFINITIONS = .rodata:0x804ED268; // type:object size:0x38 data:4byte -lbl_804ED2A0 = .rodata:0x804ED2A0; // type:object size:0x30 +sSrcCyl = .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:0x24 +sCb1s__15dAcItem_0xB3C_2 = .rodata:0x804ED300; // type:object size:0x18 +sCb2s__15dAcItem_0xB3C_2 = .rodata:0x804ED318; // type:object size:0x24 lbl_804ED340 = .rodata:0x804ED340; // type:object size:0x10 align:4 data:float lbl_804ED350 = .rodata:0x804ED350; // type:object size:0x30 lbl_804ED380 = .rodata:0x804ED380; // type:object size:0x30 @@ -36256,7 +36256,9 @@ AcItem__TearGetDemoThings = .data:0x805332C0; // type:object size:0x40 lbl_80533300 = .data:0x80533300; // type:object size:0xE data:string lbl_80533310 = .data:0x80533310; // type:object size:0x11 data:string g_profile_ITEM = .data:0x80533328; // type:object size:0x10 -lbl_80533338 = .data:0x80533338; // type:object size:0x85C +lbl_80533338 = .data:0x80533338; // type:object size:0x834 +lbl_80533B6C = .data:0x80533B6C; // type:object size:0x17 data:string +lbl_80533B84 = .data:0x80533B84; // type:object size:0xD data:string jumptable_80533B94 = .data:0x80533B94; // type:object size:0xE8 scope:local jumptable_80533C7C = .data:0x80533C7C; // type:object size:0xE8 scope:local lbl_80533D64 = .data:0x80533D64; // type:object size:0xC data:4byte @@ -36270,11 +36272,15 @@ __vt__47sFStateMgr_c<9dAcItem_c,20sStateMethodUsr_FI_c> = .data:0x80533F78; // t __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 -lbl_80534070 = .data:0x80534070; // type:object size:0x3EC -lbl_8053445C = .data:0x8053445C; // type:object size:0x34 +__vt__15dAcItem_0xB3C_2 = .data:0x80534008; // type:object size:0x1C +__vt__15dAcItem_0xB3C_1 = .data:0x80534024; // type:object size:0x1C +__vt__13dAcItem_0xB3C = .data:0x80534040; // type:object size:0x1C +__vt__15dAcItem_0xB34_2 = .data:0x8053405C; // type:object size:0x14 +__vt__15dAcItem_0xB34_1 = .data:0x80534070; // type:object size:0x14 +__vt__13dAcItem_0xB34 = .data:0x80534084; // type:object size:0x14 +__vt__13dAcItemBase_c = .data:0x80534098; // type:object size:0x94 +lbl_80534130 = .data:0x80534130; // type:object size:0x32C +__vt__23sFStateID_c<9dAcItem_c> = .data:0x8053445C; // type:object size:0x34 g_profile_BOMB = .data:0x80534490; // type:object size:0x10 lbl_805344A0 = .data:0x805344A0; // type:object size:0x2C lbl_805344CC = .data:0x805344CC; // type:object size:0xA data:string diff --git a/include/d/a/d_a_base.h b/include/d/a/d_a_base.h index 2eae40a1..f063e4e2 100644 --- a/include/d/a/d_a_base.h +++ b/include/d/a/d_a_base.h @@ -8,6 +8,7 @@ #include "m/m_allocator.h" #include "m/m_angle.h" #include "m/m_vec.h" +#include "sized_string.h" #include "toBeSorted/actor_info.h" #include "toBeSorted/raii_ptr.h" #include "toBeSorted/sound_info.h" @@ -109,8 +110,7 @@ public: /* 0xEE */ u8 mPolyAttr0; /* 0xEF */ u8 mPolyAttr1; /* 0xF0 */ u32 mJStudioActor; - /* 0xF4 */ char someStr[4]; - /* 0xF8 */ char field_0xf8[0xfc - 0xf8]; + /* 0xF4 */ SizedString<8> mSomeStr; public: /* vt 0x08 */ virtual int create(); @@ -240,6 +240,7 @@ public: void setParams2UpperByte(u32 val); static u32 buildParams2(u32 lower, u32 upper); u32 getParams2Lower() const; + u32 getFirstBitParams2() const; static dAcBase_c *findActor(char *objName, dAcBase_c *parent); static dAcBase_c *searchActor(dAcBase_c *parent); // Kinda performs the code of the first param on every actor (second param is optional parent) diff --git a/include/d/a/d_a_item.h b/include/d/a/d_a_item.h index cdaa3115..c6a22cd1 100644 --- a/include/d/a/d_a_item.h +++ b/include/d/a/d_a_item.h @@ -18,10 +18,76 @@ #include "toBeSorted/actor_event.h" #include "toBeSorted/d_emitter.h" #include "toBeSorted/dowsing_target.h" +#include "toBeSorted/item_mdl.h" class dAcItem_0xB34 { public: - virtual ~dAcItem_0xB34(); + virtual ~dAcItem_0xB34() {} + virtual void vt_0x0C() = 0; + virtual void vt_0x10() = 0; +}; + +class dAcItem_0xB34_1 : public dAcItem_0xB34 { +public: + virtual ~dAcItem_0xB34_1() {} + virtual void vt_0x0C() override; + virtual void vt_0x10() override; +}; + +class dAcItem_0xB34_2 : public dAcItem_0xB34 { +public: + virtual ~dAcItem_0xB34_2() {} + virtual void vt_0x0C() override; + virtual void vt_0x10() override; + +private: + /* 0x04 */ u8 _0x04[0x0C - 0x04]; +}; + +class dAcItem_0xB3C { +public: + virtual ~dAcItem_0xB3C() {} + virtual void vt_0x0C(u16) = 0; + virtual void vt_0x10() = 0; + virtual void vt_0x14() = 0; + virtual void vt_0x18() = 0; + +protected: + /* 0x04 */ u8 _0x04[0x08 - 0x04]; +}; + +class dAcItem_0xB3C_1 : public dAcItem_0xB3C { +public: + dAcItem_0xB3C_1(u16, u16) {} + virtual ~dAcItem_0xB3C_1(); + virtual void vt_0x0C(u16) override; + virtual void vt_0x10() override; + virtual void vt_0x14() override; + virtual void vt_0x18() override; +}; + +class dAcItem_0xB3C_2 : public dAcItem_0xB3C { +public: + dAcItem_0xB3C_2(u16 a1, u16 a2) { + mCb1 = sCb1s[a1]; + mCb2 = sCb2s[a2]; + } + virtual ~dAcItem_0xB3C_2(); + virtual void vt_0x0C(u16) override; + virtual void vt_0x10() override; + virtual void vt_0x14() override; + virtual void vt_0x18() override; + +public: + typedef void (dAcItem_0xB3C_2::*Callback1)(); + typedef bool (dAcItem_0xB3C_2::*Callback2)(); + + static Callback1 sCb1s[2]; + static Callback2 sCb2s[3]; + + /* 0x08 */ Callback1 mCb1; + /* 0x14 */ Callback2 mCb2; + /* 0x20 */ u8 _0x20[0x24 - 0x20]; }; class dAcItem_c : public dAcItemBase_c { @@ -29,6 +95,12 @@ public: dAcItem_c(); virtual ~dAcItem_c(); + virtual int create() override; + virtual bool createHeap() override; + + virtual u16 getItemIdFromParams() override; + virtual void setItemId(u16 id); + STATE_FUNC_DECLARE(dAcItem_c, Wait); STATE_FUNC_DECLARE(dAcItem_c, Carry); STATE_FUNC_DECLARE(dAcItem_c, GetBeetle); @@ -84,11 +156,35 @@ public: static bool isSlingshot(ITEM_ID item); static bool isRupee(ITEM_ID item); static bool isKeyPiece(ITEM_ID item); + static bool isTreasure2(ITEM_ID item); static bool isTreasure(ITEM_ID item); static bool isTear(ITEM_ID item); + bool isLightFruit() const; bool isSingleArrow() const; + bool isArrowBundle() const; bool isTriforce() const; + bool isGratitudeCrystal() const; + bool is5GratitudeCrystals() const; + bool isHeart() const; + bool isSmallKey() const; + bool isGreenRupee() const; + bool isBlueRupee() const; + bool isRedRupee() const; + bool isRupoor() const; + bool isSilverRupee() const; + bool isGoldRupee() const; + bool isSlingshot() const; + bool isEldinOre() const; + bool isJellyBlob() const; + bool isUnkTreasureGroup1() const; + bool isHeartPiece() const; + bool isTreasure3() const; + bool isInsect() const; + bool isHeart2() const; + bool isAnyRupee() const; + bool isAnyTear() const; + bool isBabyRattle() const; u32 getParams2Lower_shift1_0x7() const; @@ -138,7 +234,238 @@ private: static bool sIsPerformingInitialCollection; static s32 sCollectionCurrentCount; - /* 0x334 */ UNKTYPE *mpMdl; // Model has its own handling system + static s32 sGetItemPouchSlot; + static s32 sGetItemQuantity; + + static const mVec3_c sFreestandingDowsingOffset; + + typedef bool (dAcItem_c::*sStaticPtmf)(); + static const sStaticPtmf sStaticPtmfs[]; + + static const ItemInitStruct *getItemInitStructForId(u16 itemId); + const ItemInitStruct *getItemInitStruct() const; + bool isItemDropFromEnemy() const; + static u16 determineActualItemIdFromItem(u16); + u16 getItemId2() const; + static s32 getSubtypeFromParam(u32 params); + void setupUnkColliderFlags2(); + static bool hitCallback(dAcObjBase_c *i_actorA, cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB); + void fn_80253F90(bool); + void fn_80256790(); + void fn_802567D0(); + void onTouchLink(); + void fn_80255DF0(); + void fn_80254BB0(); + void setDespawnTimer(u16 timer); + void applyBoundingBox(); + s32 getTearIdx(); + void setFreestandingYOffset(f32); + void fn_8024DF30(u32 flags); + + // static PTMF callbacks + bool fn_80248020(); + bool fn_80248010(); + bool fn_80255B30(); + bool fn_80255BA0(); + bool fn_80248040(); + bool fn_80248030(); + bool fn_80255BD0(); + bool fn_80255C40(); + + // PTMF callbacks + f32 fn_80254DE0(); + f32 fn_80254DF0(); + + f32 getSmallKeyFreestandingScale(); + f32 getLowValueRupeeFreestandingScale(); + f32 getHighValueRupeeFreestandingScale(); + f32 getSlingshotFreestandingScale(); + f32 getEldinOreFreestandingScale(); + f32 getJellyBlobFreestandingScale(); + f32 getUnkTreasureGroup1FreestandingScale(); + f32 getHeartPieceFreestandingScale(); + f32 getGratitudeCrystalFreestandingScale(); + f32 getDefaultFreestandingScale(); + + f32 callGetFreestandingModelScale(); + + f32 getTreasure3Scale(); + f32 getInsectScale(); + f32 getDefaultScale(); + + f32 getHighValueRupeePickupScale(); + f32 getDefaultPickupScale(); + + void moveNormal0(); + void moveNormal1(); + void moveSpecial(); + + void fn_802555D0(); + void fn_802555F0(); + + void bounceNone(); + void bounceNormal(); + void bounceRupee(); + + void fn_802558F0(); + void fn_80255AE0(); + void fn_802558E0(); + + bool fn_80248060(); + bool fn_80248050(); + bool fn_80255D50(); + bool fn_80255DB0(); + + void setLowValueRupeeBoundingBox(); + void setHighValueRupeeBoundingBox(); + void setArrowBundleBoundingBox(); + void setDefaultBoundingBox(); + + f32 getSmallKeyGravity1(); + f32 getGreenRupeeGravity1(); + f32 getBlueRupeeGravity1(); + f32 getRedRupeeGravity1(); + f32 getHeartGravity1(); + f32 getSingleArrowGravity1(); + f32 getArrowBundleGravity1(); + f32 getSilverRupeeGravity1(); + f32 getGoldRupeeGravity1(); + f32 getRupoorGravity1(); + f32 get5BombsGravity1(); + f32 get10BombsGravity1(); + f32 getFaroreTearGravity1(); + f32 get5SeedsGravity1(); + f32 getDefaultGravity1(); + + f32 getHeartGravity2(); + + f32 getGreenRupeeGravity3(); + f32 getBlueRupeeGravity3(); + f32 getRedRupeeGravity3(); + f32 getRupoorGravity3(); + f32 getSilverRupeeGravity3(); + f32 getGoldRupeeGravity3(); + + f32 getSmallKeyGravity4(); + f32 getGreenRupeeGravity4(); + f32 getBlueRupeeGravity4(); + f32 getRedRupeeGravity4(); + f32 getHeartGravity4(); + f32 getSingleArrowGravity4(); + f32 getArrowBundleGravity4(); + f32 getSilverRupeeGravity4(); + f32 getGoldRupeeGravity4(); + f32 getRupoorGravity4(); + f32 get5BombsGravity4(); + f32 get10BombsGravity4(); + f32 getFaroreTearGravity4(); + f32 get5SeedsGravity4(); + f32 getDefaultGravit4(); + + f32 getGreenRupeeDirHitKnockback(); + f32 getBlueRupeeDirHitKnockback(); + f32 getRedRupeeDirHitKnockback(); + f32 getSilverRupeeDirHitKnockback(); + f32 getGoldRupeeDirHitKnockback(); + f32 getRupoorDirHitKnockback(); + + f32 getGreenRupeeDirHitKnockbackRand(); + f32 getBlueRupeeDirHitKnockbackRand(); + f32 getRedRupeeDirHitKnockbackRand(); + f32 getSilverRupeeDirHitKnockbackRand(); + f32 getGoldRupeeDirHitKnockbackRand(); + f32 getRupoorDirHitKnockbackRand(); + + f32 getGreenRupeeHitKnockback(); + f32 getBlueRupeeHitKnockback(); + f32 getRedRupeeHitKnockback(); + f32 getSilverRupeeHitKnockback(); + f32 getGoldRupeeHitKnockback(); + f32 getRupoorHitKnockback(); + + f32 getGreenRupeeHitKnockbackRand(); + f32 getBlueRupeeHitKnockbackRand(); + f32 getRedRupeeHitKnockbackRand(); + f32 getSilverRupeeHitKnockbackRand(); + f32 getGoldRupeeHitKnockbackRand(); + f32 getRupoorHitKnockbackRand(); + + f32 getGreenRupeeHitSquareDistance2(); + f32 getBlueRupeeHitSquareDistance2(); + f32 getRedRupeeHitSquareDistance2(); + f32 getSilverRupeeHitSquareDistance2(); + f32 getGoldRupeeHitSquareDistance2(); + f32 getRupoorHitSquareDistance2(); + f32 getHeartHitSquareDistance2(); + + f32 getGreenRupeeDirHitKnockback2(); + f32 getBlueRupeeDirHitKnockback2(); + f32 getRedRupeeDirHitKnockback2(); + f32 getSilverRupeeDirHitKnockback2(); + f32 getGoldRupeeDirHitKnockback2(); + f32 getRupoorDirHitKnockback2(); + f32 getHeartDirHitKnockback2(); + + f32 getGreenRupeeDirHitKnockbackRand2(); + f32 getBlueRupeeDirHitKnockbackRand2(); + f32 getRedRupeeDirHitKnockbackRand2(); + f32 getSilverRupeeDirHitKnockbackRand2(); + f32 getGoldRupeeDirHitKnockbackRand2(); + f32 getRupoorDirHitKnockbackRand2(); + f32 getHeartDirHitKnockbackRand2(); + + f32 getGreenRupeeHitKnockback2(); + f32 getBlueRupeeHitKnockback2(); + f32 getRedRupeeHitKnockback2(); + f32 getSilverRupeeHitKnockback2(); + f32 getGoldRupeeHitKnockback2(); + f32 getRupoorHitKnockback2(); + f32 getHeartHitKnockback2(); + + f32 getGreenRupeeHitKnockbackRand2(); + f32 getBlueRupeeHitKnockbackRand2(); + f32 getRedRupeeHitKnockbackRand2(); + f32 getSilverRupeeHitKnockbackRand2(); + f32 getGoldRupeeHitKnockbackRand2(); + f32 getRupoorHitKnockbackRand2(); + f32 getHeartHitKnockbackRand2(); + + f32 getGreenRupeeDirHitKnockback3(); + f32 getBlueRupeeDirHitKnockback3(); + f32 getRedRupeeDirHitKnockback3(); + f32 getSilverRupeeDirHitKnockback3(); + f32 getGoldRupeeDirHitKnockback3(); + f32 getRupoorDirHitKnockback3(); + f32 getHeartDirHitKnockback3(); + + f32 getGreenRupeeDirHitKnockbackRand3(); + f32 getBlueRupeeDirHitKnockbackRand3(); + f32 getRedRupeeDirHitKnockbackRand3(); + f32 getSilverRupeeDirHitKnockbackRand3(); + f32 getGoldRupeeDirHitKnockbackRand3(); + f32 getRupoorDirHitKnockbackRand3(); + f32 getHeartDirHitKnockbackRand3(); + + f32 getGreenRupeeHitKnockback3(); + f32 getBlueRupeeHitKnockback3(); + f32 getRedRupeeHitKnockback3(); + f32 getSilverRupeeHitKnockback3(); + f32 getGoldRupeeHitKnockback3(); + f32 getRupoorHitKnockback3(); + f32 getHeartHitKnockback3(); + + f32 getGreenRupeeHitKnockbackRand3(); + f32 getBlueRupeeHitKnockbackRand3(); + f32 getRedRupeeHitKnockbackRand3(); + f32 getSilverRupeeHitKnockbackRand3(); + f32 getGoldRupeeHitKnockbackRand3(); + f32 getRupoorHitKnockbackRand3(); + f32 getHeartHitKnockbackRand3(); + + f32 fn_802577C0(); + f32 fn_802577D0(); + + /* 0x334 */ dItemMdl_c *mpMdl; /* 0x338 */ dShadowCircle_c mShdw; /* 0x340 */ mVec3_c field_0x340; /* 0x34C */ nw4r::ut::Color mColorFilter; @@ -157,45 +484,45 @@ private: /* 0xA2C */ dEmitter_c mEff_0xA2C; /* 0xA60 */ dEmitter_c mEff_0xA60; /* 0xA94 */ dAcRef_c mCoveredSand; - /* 0xAA0 */ dAcRef_c mUnkRef; + /* 0xAA0 */ dAcRef_c mForceSignRef; /* 0xAAC */ mVec3_c posCopy; /* 0xAB8 */ fLiNdBa_c mNode; /* 0xAC4 */ ActorEventRelated mEventRelated; /* 0xB14 */ DowsingTarget mDowsingTarget; /* 0xB34 */ dAcItem_0xB34 *field_0xB34[2]; - /* 0xB34 */ dAcItem_0xB34 *field_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); + /* 0xB34 */ dAcItem_0xB3C *field_0xB3C; + /* 0xB40 */ void (dAcItem_c::*mFnAction)(); + /* 0xB4C */ void (dAcItem_c::*mFnBounce)(); + /* 0xB58 */ void (dAcItem_c::*mFunc_0xB58)(); + /* 0xB64 */ void (dAcItem_c::*mFnAction3)(); + /* 0xB70 */ bool (dAcItem_c::*mFnAction4)(); + /* 0xB7C */ f32 (dAcItem_c::*mFnGetGravity1)(); + /* 0xB88 */ f32 (dAcItem_c::*mFnGetHeartGravity)(); + /* 0xB94 */ f32 (dAcItem_c::*mFnGetRupeeGravity)(); + /* 0xBA0 */ f32 (dAcItem_c::*mFnGetGravity4)(); /* 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); + /* 0xBC4 */ f32 (dAcItem_c::*mFnGetFreestandingScale)(); + /* 0xBD0 */ f32 (dAcItem_c::*mFnGetScale)(); + /* 0xBDC */ f32 (dAcItem_c::*mFnGetPickupDemoScale)(); + /* 0xBE8 */ f32 (dAcItem_c::*mFnCallGetFreestandingScale)(); + /* 0xBF4 */ f32 (dAcItem_c::*mFnGetDirHitKnockback)(); + /* 0xC00 */ f32 (dAcItem_c::*mFnGetDirHitKnockbackRand)(); + /* 0xC0C */ f32 (dAcItem_c::*mFnGetHitKnockback)(); + /* 0xC18 */ f32 (dAcItem_c::*mFnGetHitKnockbackRand)(); + /* 0xC24 */ f32 (dAcItem_c::*mFnGetHitSquareDistance2)(); + /* 0xC30 */ f32 (dAcItem_c::*mFnGetDirHitKnockback2)(); + /* 0xC3C */ f32 (dAcItem_c::*mFnGetDirHitKnockbackRand2)(); + /* 0xC48 */ f32 (dAcItem_c::*mFnGetHitKnockback2)(); + /* 0xC54 */ f32 (dAcItem_c::*mFnGetHitKnockbackRand2)(); + /* 0xC60 */ f32 (dAcItem_c::*mFnGetDirHitKnockback3)(); + /* 0xC6C */ f32 (dAcItem_c::*mFnGetDirHitKnockbackRand3)(); + /* 0xC78 */ f32 (dAcItem_c::*mFnGetHitKnockback3)(); + /* 0xC84 */ f32 (dAcItem_c::*mFnGetHitKnockbackRand3)(); + /* 0xC90 */ f32 (dAcItem_c::*mFn_0xC90)(); /* 0xC9C */ UNKTYPE (dAcItem_c::*mFunc_0xC9C)(UNKTYPE); - /* 0xCA8 */ UNKTYPE (dAcItem_c::*mFunc_0xCA8)(UNKTYPE); - /* 0xCB4 */ UNKTYPE (dAcItem_c::*mFunc_0xCB4)(UNKTYPE); + /* 0xCA8 */ void (dAcItem_c::*mFnSetBoundingBox)(); + /* 0xCB4 */ f32 (dAcItem_c::*mFn_0xCB4)(void); /* 0xCC0 */ dAcRef_c mItemQueuePrev; /* 0xCCC */ dAcRef_c mItemQueueNext; /* 0xCD8 */ f32 field_0xCD8; @@ -210,11 +537,11 @@ private: /* 0xD08 */ u8 _D08[0xD14 - 0xD08]; /* 0xD14 */ f32 mFreestandingOffsetH; /* 0xD18 */ f32 field_0xD18; - /* 0xD1C */ int mGetItemPouchSlot; - /* 0xD20 */ int field_0xD20; + /* 0xD1C */ s32 mGetItemPouchSlot; + /* 0xD20 */ s32 field_0xD20; /* 0xD24 */ u8 _D24[0xD2C - 0xD24]; /* 0xD2C */ u32 mFramesInAir; - /* 0xD30 */ int mItemQuantity; + /* 0xD30 */ s32 mItemQuantity; /* 0xD34 */ u32 mItemFlags; /* 0xD38 */ mAng3_c field_0xD38; /* 0xD3E */ u16 field_0xD3E; @@ -222,8 +549,7 @@ private: /* 0xD42 */ s16 field_0xD42; /* 0xD44 */ u16 mRealItemId; /* 0xD46 */ s16 mDespawnTimer; - /* 0xD48 */ u8 field_0xD48; - /* 0xD49 */ u8 field_0xD49; + /* 0xD48 */ u16 field_0xD48; /* 0xD4A */ u8 field_0xD4A; /* 0xD4B */ u8 field_0xD4B; /* 0xD4C */ u8 field_0xD4C; diff --git a/include/d/a/d_a_itembase.h b/include/d/a/d_a_itembase.h index 9f91e60d..23f64926 100644 --- a/include/d/a/d_a_itembase.h +++ b/include/d/a/d_a_itembase.h @@ -234,11 +234,17 @@ struct ItemFlagStruct { u8 mFlagKind; u8 field_0x07; }; + +struct ItemInitStruct { + u8 _0x00[0x0D - 0x00]; +}; + class dAcItemBase_c : public dAcObjBase_c { public: dAcItemBase_c() {} virtual ~dAcItemBase_c() {} virtual u16 getItemId(); + virtual u16 getItemIdFromParams() = 0; static bool isValidItemTypeIdx(int itemId); static bool getItemTypeFromId(u16 itemID, u32 *pOutType); @@ -254,9 +260,12 @@ public: return mId; } -private: +protected: u16 mId; + const ItemFlagStruct* getItemFlagStruct() const; + static const ItemFlagStruct* getItemFlagStruct(u16 id); + static const ItemFlagStruct sDefaultFlagStruct; static const ItemFlagStruct sItemFlagStructs[167]; static const u32 sItemTypeFlags[MAX_ITEM_ID - 1]; diff --git a/include/d/col/bg/d_bg_s_acch.h b/include/d/col/bg/d_bg_s_acch.h index 0d12de5d..6756420f 100644 --- a/include/d/col/bg/d_bg_s_acch.h +++ b/include/d/col/bg/d_bg_s_acch.h @@ -388,7 +388,7 @@ public: // bool ChkRoofHit() { // return MaskRoofHit(); // } - void OffClrSpeedY() { + void SetClrSpeedY() { mFlags |= CLR_SPEED_Y; } bool ChkClrSpeedY() { diff --git a/include/d/col/c/c_cc_d.h b/include/d/col/c/c_cc_d.h index 58bf05e9..23e88d40 100644 --- a/include/d/col/c/c_cc_d.h +++ b/include/d/col/c/c_cc_d.h @@ -461,6 +461,10 @@ public: void OffRPrm(u32 m) { mRPrm = (mRPrm & ~m) | m; } + + void SetCallback(cCcD_HitCallback cb) { + mHit_cb = cb; + } }; class cCcD_ObjAt : public cCcD_GAtTgCoCommonBase { @@ -491,10 +495,6 @@ public: return MskSPrm(1); } - void SetCallback(cCcD_HitCallback cb) { - mHit_cb = cb; - } - u32 MskType(u32 mask) const { return mSrc.mType & mask; } @@ -657,6 +657,10 @@ public: field_0x4B = val; } + void SetSrcField_0x0C(u16 val) { + mSrc.field_0x0C = val; + } + void SetInfo_0x1(u8 val) { mSrc.mInfo.field_0x1 = val; } @@ -665,6 +669,10 @@ public: mSrc.mInfo.field_0x2 = val; } + void OnInfo_0x2(u16 val) { + mSrc.mInfo.field_0x2 |= val; + } + public: /* 0x1C */ cCcD_SrcGObjTg mSrc; /* 0x2C */ mVec3_c mAtHitDir; @@ -858,6 +866,10 @@ public: mTg.SetFlag_0xA(flag); } + void SetTgSrcField_0x0C(u16 val) { + mTg.SetSrcField_0x0C(val); + } + bool ChkTgHit() { return mTg.MskRPrm(1) != 0 && mTg.GetActor() != nullptr; } @@ -917,6 +929,10 @@ public: mAt.SetCallback(cb); } + void SetCoCallback(cCcD_HitCallback cb) { + mCo.SetCallback(cb); + } + u32 ChkTgNoAtHitInfSet() const { return mTg.MskSPrm(0x40); } @@ -997,6 +1013,12 @@ public: void OnTgElectric() { return mTg.OnSPrm(0x40000); } + void OnTg_0x800000() { + return mTg.OnSPrm(0x800000); + } + void OnTg_0x1000000() { + return mTg.OnSPrm(0x1000000); + } void OnTg_0x8000000() { return mTg.OnSPrm(0x8000000); } @@ -1006,6 +1028,9 @@ public: void ClrTg_0x10000() { return mTg.OffSPrm(0x10000); } + void ClrTg_0x800000() { + return mTg.OffSPrm(0x800000); + } void ClrTg_0x8000000() { return mTg.OffSPrm(0x8000000); } @@ -1016,6 +1041,9 @@ public: void OnTg_0x200000() { mTg.OnSPrm(0x200000); } + void ClrTg_0x200000() { + mTg.OffSPrm(0x200000); + } void SetTg_0x4B(u8 val) { mTg.Set_0x4B(val); @@ -1026,6 +1054,9 @@ public: void SetTgInfo_0x2(u16 val) { mTg.SetInfo_0x2(val); } + void OnTgInfo_0x2(u16 val) { + mTg.OnInfo_0x2(val); + } void SetTg_0x40000000() { mTg.OnSPrm(0x40000000); } diff --git a/include/d/t/d_t_force_get_flag.h b/include/d/t/d_t_force_get_flag.h new file mode 100644 index 00000000..b2dbcba5 --- /dev/null +++ b/include/d/t/d_t_force_get_flag.h @@ -0,0 +1,13 @@ +#ifndef D_T_FORCE_GET_FLAG_H +#define D_T_FORCE_GET_FLAG_H + +#include "d/t/d_tg.h" + +class dTgForceGetFlag_c : public dTg_c { +public: + static u32 tearIdxToParam(s32 tearNumber); + +private: +}; + +#endif diff --git a/include/toBeSorted/item_mdl.h b/include/toBeSorted/item_mdl.h index 107f9980..d4771617 100644 --- a/include/toBeSorted/item_mdl.h +++ b/include/toBeSorted/item_mdl.h @@ -14,6 +14,7 @@ class dAcItem_c; // vtable at 80533eb0 class dItemMdl_c : public dMdl_c { public: + dItemMdl_c() : field_0x14(ITEM_MDL_UNK0x14_0) {} /* 0x08 */ virtual ~dItemMdl_c() {} /* 0x0C */ virtual bool init(u16 itemId, dAcItem_c *item, mAllocator_c *allocator) = 0; /* 0x10 */ virtual void vt_0x10(u8) = 0; diff --git a/include/toBeSorted/item_mdl_misc.h b/include/toBeSorted/item_mdl_misc.h index a595fbcb..d34c9ff1 100644 --- a/include/toBeSorted/item_mdl_misc.h +++ b/include/toBeSorted/item_mdl_misc.h @@ -69,6 +69,7 @@ private: // Maybe a bad name because fairies etc. are also supported class dItemMdlBottle_c : public dItemMdl_c { public: + dItemMdlBottle_c() : mFlags(0) {} /* 0x08 */ virtual ~dItemMdlBottle_c() {} /* 0x0C */ virtual bool init(u16 itemId, dAcItem_c *item, mAllocator_c *allocator) override; /* 0x10 */ virtual void vt_0x10(u8) override; diff --git a/src/REL/d/a/obj/d_a_obj_barrel.cpp b/src/REL/d/a/obj/d_a_obj_barrel.cpp index 1955a3dd..a6c3d1ca 100644 --- a/src/REL/d/a/obj/d_a_obj_barrel.cpp +++ b/src/REL/d/a/obj/d_a_obj_barrel.cpp @@ -185,7 +185,7 @@ int dAcOBarrel_c::actorCreate() { } mSph.Set(sSrcSph); mSph.SetStts(mStts); - mObjAcch.OffClrSpeedY(); + mObjAcch.SetClrSpeedY(); mAcceleration = -4.f; mMaxSpeed = -40.f; 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 bbe61c61..1c89e7f2 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 @@ -51,7 +51,7 @@ int dAcOTumbleWeed_c::actorCreate() { mObjAcch.Set(this, 1, &mAcchCir); mAcchCir.SetWall(20.f, 60.f); - mObjAcch.OffClrSpeedY(); + mObjAcch.SetClrSpeedY(); mObjAcch.SetGndThinCellingOff(); mStts.SetRank(3); diff --git a/src/d/a/d_a_base.cpp b/src/d/a/d_a_base.cpp index 8619d9b2..9fac1e7a 100644 --- a/src/d/a/d_a_base.cpp +++ b/src/d/a/d_a_base.cpp @@ -53,10 +53,8 @@ dAcBase_c::dAcBase_c() mViewClipIdx(s_Create_ViewClipIdx), mActorNode(nullptr), mRoomID(s_Create_RoomId), - mActorSubtype(s_Create_Subtype) { - mJStudioActor = 0; - someStr[0] = 0; - + mActorSubtype(s_Create_Subtype), + mJStudioActor(0) { if (s_Create_Position) { setPosition(*s_Create_Position); } @@ -80,7 +78,7 @@ dAcBase_c::dAcBase_c() if (mpActorInfo == nullptr) { mpActorInfo = getActorInfoByProfileAndSubtype(mProfileName, mActorSubtype); } - someStr[0] = '\0'; + mSomeStr.empty(); } dAcBase_c::~dAcBase_c() {} diff --git a/src/d/a/d_a_item.cpp b/src/d/a/d_a_item.cpp index 1d4bcee5..8bbda693 100644 --- a/src/d/a/d_a_item.cpp +++ b/src/d/a/d_a_item.cpp @@ -1,12 +1,28 @@ #include "d/a/d_a_item.h" +#include "c/c_math.h" #include "common.h" #include "d/a/d_a_itembase.h" +#include "d/col/bg/d_bg_s.h" +#include "d/col/cc/d_cc_d.h" +#include "d/d_pouch.h" +#include "d/d_sc_game.h" #include "d/flag/dungeonflag_manager.h" -#include "d/flag/flag_index.h" +#include "d/flag/sceneflag_manager.h" +#include "d/flag/storyflag_manager.h" +#include "d/snd/d_snd_small_effect_mgr.h" +#include "d/snd/d_snd_wzsound.h" +#include "d/t/d_t_force_get_flag.h" #include "f/f_list_mg.h" +#include "f/f_profile_name.h" +#include "m/m_vec.h" #include "toBeSorted/dowsing_target.h" -#include "toBeSorted/file_manager.h" +#include "toBeSorted/event_manager.h" +#include "toBeSorted/item_mdl_item.h" +#include "toBeSorted/item_mdl_light_fruit.h" +#include "toBeSorted/item_mdl_misc.h" +#include "toBeSorted/item_mdl_rupee.h" +#include "toBeSorted/item_mdl_stamina_fruit.h" const ItemFlagStruct dAcItemBase_c::sDefaultFlagStruct = {0x28, 0x3C, 0x1E, 0xFF, 0x0000, 0x02, 0x01}; const ItemFlagStruct dAcItemBase_c::sItemFlagStructs[167] = { @@ -219,6 +235,42 @@ const u32 dAcItemBase_c::sItemTypeFlags[MAX_ITEM_ID - 1] = { 0xFFFF, 0x0, 0x0, 0x0, 0x0, 0x0, }; +static const dCcD_SrcCyl sSrcCyl = { + {{0, 0, {0, 0, 0}, 0, 0, 0, 0, 0, 0}, + {~(AT_TYPE_BEETLE | AT_TYPE_0x80000 | AT_TYPE_0x8000 | AT_TYPE_WIND), + 0x111, + {0, 0x08, 0x407}, + 0, + 0}, + {0xE9}}, + {40.0f, 60.0f} +}; + +static const char *const sResNodeName = "Set"; +/* static */ extern const char *const sDefaultGetItem = "DefaultGetItem"; +/* static */ extern const char *const sItemGetGorgeous = "ItemGetGorgeous"; +/* static */ extern const char *const sItemGetDefaultTbox = "ItemGetDefaultTBox"; +/* static */ extern const char *const sItemGetGorgeousTbox = "ItemGetGorgeousTBox"; +/* static */ extern const char *const sItemGetBird = "ItemGetBird"; + +struct TearIdIdx { + s32 idx; + u16 itemId; + u32 _0x04; + u32 _0x08; +}; + +/* static */ extern "C" TearIdIdx sTearIdxes[] = { + {0, ITEM_FARORE_TEAR}, + {1, ITEM_DIN_TEAR}, + {2, ITEM_NAYRU_TEAR}, + {3, ITEM_SACRED_TEAR}, +}; + +/* static */ extern const char *const sGetFairyBody = "GetFairy_body"; +/* static */ extern const char *const sBottleFairy_body = "BottleFairy_body"; + + bool dAcItemBase_c::isValidItemTypeIdx(int itemId) { return itemId < ARRAY_LENGTH(sItemTypeFlags); } @@ -306,18 +358,22 @@ 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); +const mVec3_c dAcItem_c::sFreestandingDowsingOffset(0.0f, 25.0f, 0.0f); + +const dAcItem_c::sStaticPtmf dAcItem_c::sStaticPtmfs[] = { + &dAcItem_c::fn_80248020, + nullptr, + &dAcItem_c::fn_80248010, + nullptr, + &dAcItem_c::fn_80255B30, + &dAcItem_c::fn_80255BA0, + &dAcItem_c::fn_80248040, + nullptr, + &dAcItem_c::fn_80248030, + nullptr, + &dAcItem_c::fn_80255BD0, + &dAcItem_c::fn_80255C40, +}; dAcItem_c::dAcItem_c() : mStateMgr(*this), @@ -360,14 +416,649 @@ dAcItem_c::dAcItem_c() sItemList.append(&mNode); mTargetFiRelated = 3; } + dAcItem_c::~dAcItem_c() { delete field_0xB3C; for (int i = 0; i < 2; i++) { delete field_0xB34[i]; } + delete mpMdl; mDowsingTarget.doUnregister(); } +bool dAcItem_c::createHeap() { + if (dItemMdlPut_c::isMdlForItemId(mRealItemId)) { + mpMdl = new dItemMdlPut_c(); + } else if (dItemMdlShield_c::isMdlForItemId(mRealItemId)) { + mpMdl = new dItemMdlShield_c(); + } else if (dItemMdlBottle_c::isMdlForItemId(mRealItemId)) { + mpMdl = new dItemMdlBottle_c(); + } else if (dItemMdlTear_c::isMdlForItemId(mRealItemId)) { + mpMdl = new dItemMdlTear_c(); + } else if (dItemMdlFirefly_c::isMdlForItemId(mRealItemId)) { + mpMdl = new dItemMdlFirefly_c(); + } else if (dItemMdlPotion_c::isMdlForItemId(mRealItemId)) { + mpMdl = new dItemMdlPotion_c(); + } else if (dItemMdlItem_c::isMdlForItemId(mRealItemId)) { + mpMdl = new dItemMdlItem_c(); + } else if (dItemMdlRupee_c::isMdlForItemId(mRealItemId)) { + mpMdl = new dItemMdlRupee_c(); + } else if (dItemMdlLightFruit_c::isMdlForItemId(mRealItemId)) { + mpMdl = new dItemMdlLightFruit_c(); + } else if (dItemMdlStaminaFruit_c::isMdlForItemId(mRealItemId)) { + mpMdl = new dItemMdlStaminaFruit_c(); + } else { + return false; + } + + if (mpMdl == nullptr) { + return false; + } + + if (!mpMdl->init(mRealItemId, this, &mAllocator)) { + return false; + } + + field_0xB34[0] = new dAcItem_0xB34_1(); + if (field_0xB34[0] == nullptr) { + return false; + } + field_0xB34[1] = new dAcItem_0xB34_2(); + if (field_0xB34[1] == nullptr) { + return false; + } + + if (getItemInitStruct()->_0x00[6] != 0) { + field_0xB3C = new dAcItem_0xB3C_2(getItemInitStruct()->_0x00[4], getItemInitStruct()->_0x00[5]); + if (mId == ITEM_STAMINA_FRUIT) { + // TODO ... + field_0xB3C->vt_0x0C(150 /* 0x96 */); + } else if (isLightFruit()) { + field_0xB3C->vt_0x0C(0 /* 0x0 */); + } + } else { + field_0xB3C = new dAcItem_0xB3C_1(getItemInitStruct()->_0x00[4], getItemInitStruct()->_0x00[5]); + } + + if (field_0xB3C == nullptr) { + return false; + } + + return true; +} + +// TODO this function pools .data but doesn't pool .bss for some reason +int dAcItem_c::create() { + u32 flag = getFromParams(0xA, 0xFF); + if (flag < 0xFF && SceneflagManager::sInstance->checkBoolFlag(mRoomID, flag)) { + return FAILED; + } + + u32 paramId = getItemIdFromParams(); + if (paramId == ITEM_NONE) { + return FAILED; + } + + if (isItemDropFromEnemy()) { + mId = determineActualItemIdFromItem(paramId); + } else { + mId = paramId; + } + + if (isGratitudeCrystal()) { + if (!StoryflagManager::sInstance->getCounterOrFlag(STORYFLAG_GRATITUDE_QUEST_STARTED) || !dScGame_c::currentSpawnInfo.isNight()) { + return FAILED; + } + } else if (isHeart()) { + if (isItemDropFromEnemy() && dScGame_c::isHeroMode()) { + switch (adventurePouchCountItem(ITEM_HEART_MEDAL)) { + case 0: return FAILED; + case 1: + if (cM::rndInt(2) < 1) { + return FAILED; + } + } + } + } + + setItemId(getItemId2()); + + switch (getItemInitStruct()->_0x00[9]) { + case 0: + mFn_0xC90 = &dAcItem_c::fn_80254DE0; + break; + case 1: + mFn_0xC90 = &dAcItem_c::fn_80254DF0; + break; + default: + return FAILED; + } + + if (isSmallKey()) { + mFnGetFreestandingScale = &dAcItem_c::getSmallKeyFreestandingScale; + } else if (isGreenRupee() || isBlueRupee() || isRedRupee() || isRupoor()) { + mFnGetFreestandingScale = &dAcItem_c::getLowValueRupeeFreestandingScale; + } else if (isSilverRupee() || isGoldRupee()) { + mFnGetFreestandingScale = &dAcItem_c::getHighValueRupeeFreestandingScale; + } else if (isSlingshot()) { + mFnGetFreestandingScale = &dAcItem_c::getSlingshotFreestandingScale; + } else if (isEldinOre()) { + mFnGetFreestandingScale = &dAcItem_c::getEldinOreFreestandingScale; + } else if (isJellyBlob()) { + mFnGetFreestandingScale = &dAcItem_c::getJellyBlobFreestandingScale; + } else if (isUnkTreasureGroup1()) { + mFnGetFreestandingScale = &dAcItem_c::getUnkTreasureGroup1FreestandingScale; + } else if (isHeartPiece()) { + mFnGetFreestandingScale = &dAcItem_c::getHeartPieceFreestandingScale; + } else if (isGratitudeCrystal()) { + mFnGetFreestandingScale = &dAcItem_c::getGratitudeCrystalFreestandingScale; + } else { + mFnGetFreestandingScale = &dAcItem_c::getDefaultFreestandingScale; + } + + if (isTreasure3()) { + mFnGetScale = &dAcItem_c::getTreasure3Scale; + } else if (isInsect()) { + mFnGetScale = &dAcItem_c::getInsectScale; + } else { + mFnGetScale = &dAcItem_c::getDefaultScale; + } + + if (isSilverRupee() || isGoldRupee()) { + mFnGetPickupDemoScale = &dAcItem_c::getHighValueRupeePickupScale; + } else { + mFnGetPickupDemoScale = &dAcItem_c::getDefaultPickupScale; + } + + mFnCallGetFreestandingScale = &dAcItem_c::callGetFreestandingModelScale; + + switch (getItemInitStruct()->_0x00[10]) { + case 0: + mFnAction = &dAcItem_c::moveNormal0; + break; + case 1: + mFnAction = &dAcItem_c::moveNormal1; + break; + case 2: + mFnAction = &dAcItem_c::moveSpecial; + break; + default: + return FAILED; + } + + if (isHeart2()) { + mFunc_0xB58 = &dAcItem_c::fn_802555F0; + } else { + mFunc_0xB58 = &dAcItem_c::fn_802555D0; + } + + if (isAnyRupee()) { + mFnBounce = &dAcItem_c::bounceRupee; + } else if (isHeart2()) { + mFnBounce = &dAcItem_c::bounceNone; + } else { + mFnBounce = &dAcItem_c::bounceNormal; + } + + if (isAnyRupee()) { + mFnAction3 = &dAcItem_c::fn_802558F0; + } else if (isAnyTear() || isTriforce() || isHeartPiece()) { + mFnAction3 = &dAcItem_c::fn_80255AE0; + } else { + mFnAction3 = &dAcItem_c::fn_802558E0; + } + + if (getItemInitStruct()->_0x00[8] == 0) { + mFnAction4 = &dAcItem_c::fn_80248060; + } else if (getItemInitStruct()->_0x00[8] == 1) { + mFnAction4 = &dAcItem_c::fn_80248050; + } else if (getItemInitStruct()->_0x00[8] == 2) { + mFnAction4 = &dAcItem_c::fn_80255D50; + } else if (getItemInitStruct()->_0x00[8] == 3) { + mFnAction4 = &dAcItem_c::fn_80255DB0; + } else if (getItemInitStruct()->_0x00[8] == 4) { + mFnAction4 = &dAcItem_c::fn_80248060; + } else { + return FAILED; + } + + mSubtype = mId; + + CREATE_ALLOCATOR(dAcItem_c); + + if (!getFromParams(0x13, 0x1)) { + mpMdl->setPriorityDraw(); + } + mStts.SetRank(1); + mCyl.Set(sSrcCyl); + mCyl.SetStts(mStts); + mCyl.SetR(getItemFlagStruct(mId)->field_0x00); + mCyl.SetH(getItemFlagStruct(mId)->field_0x01); + + setupUnkColliderFlags2(); + + if (isAnyRupee()) { + mCyl.OnTgInfo_0x2(0x8); + mCyl.SetTgSrcField_0x0C(0x8); + } + + u32 unk = getParams2Lower_shift1_0x7(); + if ((mId == ITEM_STAMINA_FRUIT && unk) || isLightFruit() || isAnyTear() || isTriforce() || isGratitudeCrystal()) { + mCyl.SetCoGrp(0x2); + } else { + mCyl.SetCoGrp(0xE); + } + + if (mId == ITEM_STAMINA_FRUIT || isHeartPiece() || isTriforce()) { + mCyl.ClrTg_0x800000(); + } else { + mCyl.OnTg_0x800000(); + } + + if (isHeartPiece()) { + mCyl.OnTg_0x1000000(); + } + + if (isHeartPiece()) { + mCyl.SetTg_0x4C(0x6CC0); + } else if (isBabyRattle()) { + mCyl.SetTg_0x4C(0x6480); + } else if (!isAnyRupee() && !isHeart2() && mId != ITEM_STAMINA_FRUIT) { + mCyl.SetTg_0x4C(0x6480); + } + + if (isBabyRattle()) { + mCyl.SetTgInfo_0x1(0x13); + } else if (isHeartPiece()) { + mCyl.SetTgInfo_0x1(0x15); + } else if (!isAnyRupee() && !isHeart2() && mId != ITEM_STAMINA_FRUIT) { + mCyl.SetTgInfo_0x1(0x13); + } + + if (isHeartPiece()) { + mCyl.ClrTg_0x200000(); + } else { + mCyl.OnTg_0x200000(); + } + + mCyl.SetCoCallback(hitCallback); + mAcchCir.SetWall(getItemFlagStruct(getItemId())->field_0x01 * 0.5f, getItemFlagStruct(getItemId())->field_0x00 * 0.6f); + mObjAcch.Set(this, 1, &mAcchCir); + mObjAcch.field_0x0D4 = 50.0f; + mObjAcch.SetClrSpeedY(); + mObjAcch.SetField_0xC(4); + mAcceleration = -2.0f; + mMaxSpeed = -80.0f; + + mGetItemPouchSlot = sGetItemPouchSlot; + mItemQuantity = sGetItemQuantity; + s32 subType = getSubtypeFromParam(mParams); + if (subType != 1 && subType != 2 && subType != 3 && subType != 4 && subType != 5 && subType != 6) { + fn_80253F90(true); + } else { + fn_80253F90(false); + } + + if (getSubtypeFromParam(mParams) == 2) { + fn_80256790(); + } else { + fn_802567D0(); + } + + // These need to not pool... + switch (getSubtypeFromParam(mParams)) { + default: + mStateMgr.changeState(StateID_Wait); + break; + case 1: + mStateMgr.changeState(StateID_Wait); + break; + case 2: + mStateMgr.changeState(StateID_Wait); + break; + case 3: + onTouchLink(); + break; + case 4: + mStateMgr.changeState(StateID_Get); + break; + case 5: + mStateMgr.changeState(StateID_WaitForcedGetDemo); + break; + case 6: + mStateMgr.changeState(StateID_GetBeetle); + break; + case 7: + mStateMgr.changeState(StateID_WaitTBoxGetDemo); + break; + } + + fn_80255DF0(); + fn_80254BB0(); + + if (isHeart()) { + setDespawnTimer(600); + } else { + setDespawnTimer(300); + } + + if (isGreenRupee() || isBlueRupee() || isRedRupee() || isRupoor()) { + mFnSetBoundingBox = &dAcItem_c::setLowValueRupeeBoundingBox; + } else if (isSilverRupee() || isGoldRupee()) { + mFnSetBoundingBox = &dAcItem_c::setHighValueRupeeBoundingBox; + } else if (isArrowBundle()) { + mFnSetBoundingBox = &dAcItem_c::setArrowBundleBoundingBox; + } else { + mFnSetBoundingBox = &dAcItem_c::setDefaultBoundingBox; + } + + applyBoundingBox(); + + switch (mId) { + case ITEM_SMALL_KEY: mFnGetGravity1 = &dAcItem_c::getSmallKeyGravity1; break; + case ITEM_GREEN_RUPEE: mFnGetGravity1 = &dAcItem_c::getGreenRupeeGravity1; break; + case ITEM_BLUE_RUPEE: mFnGetGravity1 = &dAcItem_c::getBlueRupeeGravity1; break; + case ITEM_RED_RUPEE: mFnGetGravity1 = &dAcItem_c::getRedRupeeGravity1; break; + case ITEM_HEART: mFnGetGravity1 = &dAcItem_c::getHeartGravity1; break; + case ITEM_SINGLE_ARROW: mFnGetGravity1 = &dAcItem_c::getSingleArrowGravity1; break; + case ITEM_BUNDLE_ARROWS: mFnGetGravity1 = &dAcItem_c::getArrowBundleGravity1; break; + case ITEM_SILVER_RUPEE: mFnGetGravity1 = &dAcItem_c::getSilverRupeeGravity1; break; + case ITEM_GOLD_RUPEE: mFnGetGravity1 = &dAcItem_c::getGoldRupeeGravity1; break; + case ITEM_RUPOOR: mFnGetGravity1 = &dAcItem_c::getRupoorGravity1; break; + case ITEM_5_BOMBS: mFnGetGravity1 = &dAcItem_c::get5BombsGravity1; break; + case ITEM_10_BOMBS: mFnGetGravity1 = &dAcItem_c::get10BombsGravity1; break; + case ITEM_FARORE_TEAR: mFnGetGravity1 = &dAcItem_c::getFaroreTearGravity1; break; + case ITEM_5_DEKU_SEEDS: mFnGetGravity1 = &dAcItem_c::get5SeedsGravity1; break; + default: mFnGetGravity1 = &dAcItem_c::getDefaultGravity1; break; + } + + switch (mId) { + case ITEM_HEART: mFnGetHeartGravity = &dAcItem_c::getHeartGravity2; break; + default: mFnGetHeartGravity = nullptr; break; + } + + switch (mId) { + case ITEM_GREEN_RUPEE: mFnGetRupeeGravity = &dAcItem_c::getGreenRupeeGravity3; break; + case ITEM_BLUE_RUPEE: mFnGetRupeeGravity = &dAcItem_c::getBlueRupeeGravity3; break; + case ITEM_RED_RUPEE: mFnGetRupeeGravity = &dAcItem_c::getRedRupeeGravity3; break; + case ITEM_SILVER_RUPEE: mFnGetRupeeGravity = &dAcItem_c::getSilverRupeeGravity3; break; + case ITEM_GOLD_RUPEE: mFnGetRupeeGravity = &dAcItem_c::getGoldRupeeGravity3; break; + case ITEM_RUPOOR: mFnGetRupeeGravity = &dAcItem_c::getRupoorGravity3; break; + default: mFnGetRupeeGravity = nullptr; break; + } + + switch (mId) { + case ITEM_SMALL_KEY: mFnGetGravity4 = &dAcItem_c::getSmallKeyGravity4; break; + case ITEM_GREEN_RUPEE: mFnGetGravity4 = &dAcItem_c::getGreenRupeeGravity4; break; + case ITEM_BLUE_RUPEE: mFnGetGravity4 = &dAcItem_c::getBlueRupeeGravity4; break; + case ITEM_RED_RUPEE: mFnGetGravity4 = &dAcItem_c::getRedRupeeGravity4; break; + case ITEM_HEART: mFnGetGravity4 = &dAcItem_c::getHeartGravity4; break; + case ITEM_SINGLE_ARROW: mFnGetGravity4 = &dAcItem_c::getSingleArrowGravity4; break; + case ITEM_BUNDLE_ARROWS: mFnGetGravity4 = &dAcItem_c::getArrowBundleGravity4; break; + case ITEM_SILVER_RUPEE: mFnGetGravity4 = &dAcItem_c::getSilverRupeeGravity4; break; + case ITEM_GOLD_RUPEE: mFnGetGravity4 = &dAcItem_c::getGoldRupeeGravity4; break; + case ITEM_RUPOOR: mFnGetGravity4 = &dAcItem_c::getRupoorGravity4; break; + case ITEM_5_BOMBS: mFnGetGravity4 = &dAcItem_c::get5BombsGravity4; break; + case ITEM_10_BOMBS: mFnGetGravity4 = &dAcItem_c::get10BombsGravity4; break; + case ITEM_FARORE_TEAR: mFnGetGravity4 = &dAcItem_c::getFaroreTearGravity4; break; + case ITEM_5_DEKU_SEEDS: mFnGetGravity4 = &dAcItem_c::get5SeedsGravity4; break; + default: mFnGetGravity4 = nullptr; break; + } + + switch (mId) { + case ITEM_GREEN_RUPEE: mFnGetDirHitKnockback = &dAcItem_c::getGreenRupeeDirHitKnockback; break; + case ITEM_BLUE_RUPEE: mFnGetDirHitKnockback = &dAcItem_c::getBlueRupeeDirHitKnockback; break; + case ITEM_RED_RUPEE: mFnGetDirHitKnockback = &dAcItem_c::getRedRupeeDirHitKnockback; break; + case ITEM_SILVER_RUPEE: mFnGetDirHitKnockback = &dAcItem_c::getSilverRupeeDirHitKnockback; break; + case ITEM_GOLD_RUPEE: mFnGetDirHitKnockback = &dAcItem_c::getGoldRupeeDirHitKnockback; break; + case ITEM_RUPOOR: mFnGetDirHitKnockback = &dAcItem_c::getRupoorDirHitKnockback; break; + default: mFnGetDirHitKnockback = nullptr; break; + } + + switch (mId) { + case ITEM_GREEN_RUPEE: mFnGetDirHitKnockbackRand = &dAcItem_c::getGreenRupeeDirHitKnockbackRand; break; + case ITEM_BLUE_RUPEE: mFnGetDirHitKnockbackRand = &dAcItem_c::getBlueRupeeDirHitKnockbackRand; break; + case ITEM_RED_RUPEE: mFnGetDirHitKnockbackRand = &dAcItem_c::getRedRupeeDirHitKnockbackRand; break; + case ITEM_SILVER_RUPEE: mFnGetDirHitKnockbackRand = &dAcItem_c::getSilverRupeeDirHitKnockbackRand; break; + case ITEM_GOLD_RUPEE: mFnGetDirHitKnockbackRand = &dAcItem_c::getGoldRupeeDirHitKnockbackRand; break; + case ITEM_RUPOOR: mFnGetDirHitKnockbackRand = &dAcItem_c::getRupoorDirHitKnockbackRand; break; + default: mFnGetDirHitKnockbackRand = nullptr; break; + } + + + switch (mId) { + case ITEM_GREEN_RUPEE: mFnGetHitKnockback = &dAcItem_c::getGreenRupeeHitKnockback; break; + case ITEM_BLUE_RUPEE: mFnGetHitKnockback = &dAcItem_c::getBlueRupeeHitKnockback; break; + case ITEM_RED_RUPEE: mFnGetHitKnockback = &dAcItem_c::getRedRupeeHitKnockback; break; + case ITEM_SILVER_RUPEE: mFnGetHitKnockback = &dAcItem_c::getSilverRupeeHitKnockback; break; + case ITEM_GOLD_RUPEE: mFnGetHitKnockback = &dAcItem_c::getGoldRupeeHitKnockback; break; + case ITEM_RUPOOR: mFnGetHitKnockback = &dAcItem_c::getRupoorHitKnockback; break; + default: mFnGetHitKnockback = nullptr; break; + } + + switch (mId) { + case ITEM_GREEN_RUPEE: mFnGetHitKnockbackRand = &dAcItem_c::getGreenRupeeHitKnockbackRand; break; + case ITEM_BLUE_RUPEE: mFnGetHitKnockbackRand = &dAcItem_c::getBlueRupeeHitKnockbackRand; break; + case ITEM_RED_RUPEE: mFnGetHitKnockbackRand = &dAcItem_c::getRedRupeeHitKnockbackRand; break; + case ITEM_SILVER_RUPEE: mFnGetHitKnockbackRand = &dAcItem_c::getSilverRupeeHitKnockbackRand; break; + case ITEM_GOLD_RUPEE: mFnGetHitKnockbackRand = &dAcItem_c::getGoldRupeeHitKnockbackRand; break; + case ITEM_RUPOOR: mFnGetHitKnockbackRand = &dAcItem_c::getRupoorHitKnockbackRand; break; + default: mFnGetHitKnockbackRand = nullptr; break; + } + + switch (mId) { + case ITEM_GREEN_RUPEE: mFnGetHitSquareDistance2 = &dAcItem_c::getGreenRupeeHitSquareDistance2; break; + case ITEM_BLUE_RUPEE: mFnGetHitSquareDistance2 = &dAcItem_c::getBlueRupeeHitSquareDistance2; break; + case ITEM_RED_RUPEE: mFnGetHitSquareDistance2 = &dAcItem_c::getRedRupeeHitSquareDistance2; break; + case ITEM_SILVER_RUPEE: mFnGetHitSquareDistance2 = &dAcItem_c::getSilverRupeeHitSquareDistance2; break; + case ITEM_GOLD_RUPEE: mFnGetHitSquareDistance2 = &dAcItem_c::getGoldRupeeHitSquareDistance2; break; + case ITEM_RUPOOR: mFnGetHitSquareDistance2 = &dAcItem_c::getRupoorHitSquareDistance2; break; + case ITEM_HEART: mFnGetHitSquareDistance2 = &dAcItem_c::getHeartHitSquareDistance2; break; + default: mFnGetHitSquareDistance2 = nullptr; break; + } + + switch (mId) { + case ITEM_GREEN_RUPEE: mFnGetDirHitKnockback2 = &dAcItem_c::getGreenRupeeDirHitKnockback2; break; + case ITEM_BLUE_RUPEE: mFnGetDirHitKnockback2 = &dAcItem_c::getBlueRupeeDirHitKnockback2; break; + case ITEM_RED_RUPEE: mFnGetDirHitKnockback2 = &dAcItem_c::getRedRupeeDirHitKnockback2; break; + case ITEM_SILVER_RUPEE: mFnGetDirHitKnockback2 = &dAcItem_c::getSilverRupeeDirHitKnockback2; break; + case ITEM_GOLD_RUPEE: mFnGetDirHitKnockback2 = &dAcItem_c::getGoldRupeeDirHitKnockback2; break; + case ITEM_RUPOOR: mFnGetDirHitKnockback2 = &dAcItem_c::getRupoorDirHitKnockback2; break; + case ITEM_HEART: mFnGetDirHitKnockback2 = &dAcItem_c::getHeartDirHitKnockback2; break; + default: mFnGetDirHitKnockback2 = nullptr; break; + } + + switch (mId) { + case ITEM_GREEN_RUPEE: mFnGetDirHitKnockbackRand2 = &dAcItem_c::getGreenRupeeDirHitKnockbackRand2; break; + case ITEM_BLUE_RUPEE: mFnGetDirHitKnockbackRand2 = &dAcItem_c::getBlueRupeeDirHitKnockbackRand2; break; + case ITEM_RED_RUPEE: mFnGetDirHitKnockbackRand2 = &dAcItem_c::getRedRupeeDirHitKnockbackRand2; break; + case ITEM_SILVER_RUPEE: mFnGetDirHitKnockbackRand2 = &dAcItem_c::getSilverRupeeDirHitKnockbackRand2; break; + case ITEM_GOLD_RUPEE: mFnGetDirHitKnockbackRand2 = &dAcItem_c::getGoldRupeeDirHitKnockbackRand2; break; + case ITEM_RUPOOR: mFnGetDirHitKnockbackRand2 = &dAcItem_c::getRupoorDirHitKnockbackRand2; break; + case ITEM_HEART: mFnGetDirHitKnockbackRand2 = &dAcItem_c::getHeartDirHitKnockbackRand2; break; + default: mFnGetDirHitKnockbackRand2 = nullptr; break; + } + + switch (mId) { + case ITEM_GREEN_RUPEE: mFnGetHitKnockback2 = &dAcItem_c::getGreenRupeeHitKnockback2; break; + case ITEM_BLUE_RUPEE: mFnGetHitKnockback2 = &dAcItem_c::getBlueRupeeHitKnockback2; break; + case ITEM_RED_RUPEE: mFnGetHitKnockback2 = &dAcItem_c::getRedRupeeHitKnockback2; break; + case ITEM_SILVER_RUPEE: mFnGetHitKnockback2 = &dAcItem_c::getSilverRupeeHitKnockback2; break; + case ITEM_GOLD_RUPEE: mFnGetHitKnockback2 = &dAcItem_c::getGoldRupeeHitKnockback2; break; + case ITEM_RUPOOR: mFnGetHitKnockback2 = &dAcItem_c::getRupoorHitKnockback2; break; + case ITEM_HEART: mFnGetHitKnockback2 = &dAcItem_c::getHeartHitKnockback2; break; + default: mFnGetHitKnockback2 = nullptr; break; + } + + switch (mId) { + case ITEM_GREEN_RUPEE: mFnGetHitKnockbackRand2 = &dAcItem_c::getGreenRupeeHitKnockbackRand2; break; + case ITEM_BLUE_RUPEE: mFnGetHitKnockbackRand2 = &dAcItem_c::getBlueRupeeHitKnockbackRand2; break; + case ITEM_RED_RUPEE: mFnGetHitKnockbackRand2 = &dAcItem_c::getRedRupeeHitKnockbackRand2; break; + case ITEM_SILVER_RUPEE: mFnGetHitKnockbackRand2 = &dAcItem_c::getSilverRupeeHitKnockbackRand2; break; + case ITEM_GOLD_RUPEE: mFnGetHitKnockbackRand2 = &dAcItem_c::getGoldRupeeHitKnockbackRand2; break; + case ITEM_RUPOOR: mFnGetHitKnockbackRand2 = &dAcItem_c::getRupoorHitKnockbackRand2; break; + case ITEM_HEART: mFnGetHitKnockbackRand2 = &dAcItem_c::getHeartHitKnockbackRand2; break; + default: mFnGetHitKnockbackRand2 = nullptr; break; + } + + switch (mId) { + case ITEM_GREEN_RUPEE: mFnGetDirHitKnockback3 = &dAcItem_c::getGreenRupeeDirHitKnockback3; break; + case ITEM_BLUE_RUPEE: mFnGetDirHitKnockback3 = &dAcItem_c::getBlueRupeeDirHitKnockback3; break; + case ITEM_RED_RUPEE: mFnGetDirHitKnockback3 = &dAcItem_c::getRedRupeeDirHitKnockback3; break; + case ITEM_SILVER_RUPEE: mFnGetDirHitKnockback3 = &dAcItem_c::getSilverRupeeDirHitKnockback3; break; + case ITEM_GOLD_RUPEE: mFnGetDirHitKnockback3 = &dAcItem_c::getGoldRupeeDirHitKnockback3; break; + case ITEM_RUPOOR: mFnGetDirHitKnockback3 = &dAcItem_c::getRupoorDirHitKnockback3; break; + case ITEM_HEART: mFnGetDirHitKnockback3 = &dAcItem_c::getHeartDirHitKnockback3; break; + default: mFnGetDirHitKnockbackRand2 = nullptr; break; // @bug copypasta mistake + } + + switch (mId) { + case ITEM_GREEN_RUPEE: mFnGetDirHitKnockbackRand3 = &dAcItem_c::getGreenRupeeDirHitKnockbackRand3; break; + case ITEM_BLUE_RUPEE: mFnGetDirHitKnockbackRand3 = &dAcItem_c::getBlueRupeeDirHitKnockbackRand3; break; + case ITEM_RED_RUPEE: mFnGetDirHitKnockbackRand3 = &dAcItem_c::getRedRupeeDirHitKnockbackRand3; break; + case ITEM_SILVER_RUPEE: mFnGetDirHitKnockbackRand3 = &dAcItem_c::getSilverRupeeDirHitKnockbackRand3; break; + case ITEM_GOLD_RUPEE: mFnGetDirHitKnockbackRand3 = &dAcItem_c::getGoldRupeeDirHitKnockbackRand3; break; + case ITEM_RUPOOR: mFnGetDirHitKnockbackRand3 = &dAcItem_c::getRupoorDirHitKnockbackRand3; break; + case ITEM_HEART: mFnGetDirHitKnockbackRand3 = &dAcItem_c::getHeartDirHitKnockbackRand3; break; + default: mFnGetDirHitKnockbackRand2 = nullptr; break; // @bug copypasta mistake + } + + switch (mId) { + case ITEM_GREEN_RUPEE: mFnGetHitKnockback3 = &dAcItem_c::getGreenRupeeHitKnockback3; break; + case ITEM_BLUE_RUPEE: mFnGetHitKnockback3 = &dAcItem_c::getBlueRupeeHitKnockback3; break; + case ITEM_RED_RUPEE: mFnGetHitKnockback3 = &dAcItem_c::getRedRupeeHitKnockback3; break; + case ITEM_SILVER_RUPEE: mFnGetHitKnockback3 = &dAcItem_c::getSilverRupeeHitKnockback3; break; + case ITEM_GOLD_RUPEE: mFnGetHitKnockback3 = &dAcItem_c::getGoldRupeeHitKnockback3; break; + case ITEM_RUPOOR: mFnGetHitKnockback3 = &dAcItem_c::getRupoorHitKnockback3; break; + case ITEM_HEART: mFnGetHitKnockback3 = &dAcItem_c::getHeartHitKnockback3; break; + default: mFnGetHitKnockback3 = nullptr; break; + } + + switch (mId) { + case ITEM_GREEN_RUPEE: mFnGetHitKnockbackRand3 = &dAcItem_c::getGreenRupeeHitKnockbackRand3; break; + case ITEM_BLUE_RUPEE: mFnGetHitKnockbackRand3 = &dAcItem_c::getBlueRupeeHitKnockbackRand3; break; + case ITEM_RED_RUPEE: mFnGetHitKnockbackRand3 = &dAcItem_c::getRedRupeeHitKnockbackRand3; break; + case ITEM_SILVER_RUPEE: mFnGetHitKnockbackRand3 = &dAcItem_c::getSilverRupeeHitKnockbackRand3; break; + case ITEM_GOLD_RUPEE: mFnGetHitKnockbackRand3 = &dAcItem_c::getGoldRupeeHitKnockbackRand3; break; + case ITEM_RUPOOR: mFnGetHitKnockbackRand3 = &dAcItem_c::getRupoorHitKnockbackRand3; break; + case ITEM_HEART: mFnGetHitKnockbackRand3 = &dAcItem_c::getHeartHitKnockbackRand3; break; + default: mFnGetHitKnockbackRand3 = nullptr; break; + } + + if (isHeart2()) { + mFn_0xCB4 = &dAcItem_c::fn_802577C0; + } else { + mFn_0xCB4 = &dAcItem_c::fn_802577D0; + } + + if (mbNoDespawn) { + dBgS::GetInstance()->SetLightingCode(this, 10.0f); + } else if (isHeart2()) { + mLinkage.bushTpFunc(mObjAcch); + } + + if (isHeart2()) { + field_0xD20 = 6; + } + + if (isAnyTear()) { + mSomeStr = "force"; + } + + if (isAnyTear()) { + s32 type = getTearSubtype((ITEM_ID)mId); + if (type == TEAR_MAX) { + type = TEAR_0; + } + dAcObjBase_c *forceSign = dAcObjBase_c::create(this, fProfile::OBJ_FORCE_SIGN, type & 0xFF, nullptr, nullptr, nullptr, nullptr, 0x3F); + if (forceSign != nullptr) { + mForceSignRef.link(forceSign); + } + } + + if (isAnyTear()) { + dAcBase_c *forceGetFlag = dAcBase_c::createActorStage(fProfile::TAG_FORCE_GET_FLAG, dTgForceGetFlag_c::tearIdxToParam(getTearIdx()), &mPosition, &mRotation, &mScale, 0, mRoomID, this); + if (forceGetFlag == nullptr) { + return FAILED; + } + } + + if (mId == ITEM_STAMINA_FRUIT && unk) { + // ((getFirstBitParams2__9dAcBase_cCFv((dAcBase_c *) this) << 8) & 0x100 & ~1) | (((u32) this->unk4 >> 0x13U) & 1) + + u32 p1 = (getFirstBitParams2() & 0x1) << 8; + u32 parms = ((mParams >> 0x13) & 0x1) | (p1 & ~0x1); + dAcObjBase_c *leaves = dAcObjBase_c::create(fProfile::OBJ_FRUIT_GUTS_LEAF, mRoomID, parms, &mPosition, &mRotation, &mScale, -1); + if (leaves == nullptr) { + return FAILED; + } + } + + if (isGreenRupee() || isBlueRupee() || isRedRupee() || isSilverRupee() || isGoldRupee()) { + mDowsingTarget.initialize(DowsingTarget::SLOT_RUPEE, 0, &sFreestandingDowsingOffset, 0.0f); + mDowsingTarget.doRegister(); + } else if (isHeart()) { + mDowsingTarget.initialize(DowsingTarget::SLOT_HEART, 0, &sFreestandingDowsingOffset, 0.0f); + mDowsingTarget.doRegister(); + } else if (is5GratitudeCrystals() || isGratitudeCrystal()) { + mDowsingTarget.initialize(DowsingTarget::SLOT_CRYSTAL, 0, &sFreestandingDowsingOffset, 0.0f); + mDowsingTarget.doRegister(); + } else if (isTreasure2((ITEM_ID)mId)) { + mDowsingTarget.initialize(DowsingTarget::SLOT_TREASURE, 0, &sFreestandingDowsingOffset, 0.0f); + mDowsingTarget.doRegister(); + } + + if (isGratitudeCrystal() || isUnkTreasureGroup1()) { + setFreestandingYOffset(-mpMdl->getMdl()->getResMdl().GetResNode(sResNodeName).GetTranslate().y); + } + + if (mId == ITEM_STAMINA_FRUIT && unk == 0) { + mItemFlags |= 4; + } + + if ((isGratitudeCrystal() || is5GratitudeCrystals()) && !isItemDropFromEnemy() && mStateMgr.isState(StateID_Wait)) { + dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_ENERGY_SOURCE_OUTWELL); + } + + if (EventManager::isInEvent() && EventManager::isCurrentEvent("GetGenkiItem")) { + fn_8024DF30(mItemFlags | 0x20); + } + + // okay + bool is = isHeartPiece(); + if (is) { + is = dScGame_c::isCurrentStage("D100"); + } + if (is) { + is = mPosition.squareDistance(mVec3_c(0.0f, -190.0f, -9590.0f)) < 10000.0f; + } + if (is) { + // Skyview Temple - Heart Piece behind bars in main room + fn_8024DF30(mItemFlags | 0x80); + } + + field_0xD48 = cM::rndInt(0x10000); + mColorFilter.r = 0; + mColorFilter.g = 0; + mColorFilter.b = 0; + mLightLevelMaybe = 0.0f; + + return SUCCEEDED; +} + +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); + void dAcItem_c::initializeState_Wait() {} void dAcItem_c::executeState_Wait() {} void dAcItem_c::finalizeState_Wait() {}