diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 60e56ab7..55c1a95b 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -1467,7 +1467,7 @@ func_ov000_0207e184 kind:function(arm,size=0x58) addr:0x0207e184 func_ov000_0207e1dc kind:function(arm,size=0x30) addr:0x0207e1dc func_ov000_0207e20c kind:function(arm,size=0x34) addr:0x0207e20c _ZN18UnkStruct_027e09c019func_ov000_0207e240EP15ActorUnkSCCN_B8 kind:function(arm,size=0x14) addr:0x0207e240 -func_ov000_0207e254 kind:function(arm,size=0x14) addr:0x0207e254 +_ZN18UnkStruct_027e09c019func_ov000_0207e254EP15ActorUnkSCCN_B8 kind:function(arm,size=0x14) addr:0x0207e254 func_ov000_0207e268 kind:function(arm,size=0x2c) addr:0x0207e268 _ZN5Actor19func_ov000_0207e294EP8Cylinder kind:function(arm,size=0x118) addr:0x0207e294 func_ov000_0207e3ac kind:function(arm,size=0xac) addr:0x0207e3ac @@ -1914,7 +1914,7 @@ func_ov000_0208ba60 kind:function(arm,size=0x20) addr:0x0208ba60 func_ov000_0208ba80 kind:function(arm,size=0x14) addr:0x0208ba80 func_ov000_0208ba94 kind:function(arm,size=0x1c) addr:0x0208ba94 func_ov000_0208bab0 kind:function(arm,size=0x1c) addr:0x0208bab0 -func_ov000_0208bacc kind:function(arm,size=0x10) addr:0x0208bacc +_ZN18UnkStruct_027e0ce019func_ov000_0208baccEiP7VecFx32 kind:function(arm,size=0x10) addr:0x0208bacc func_ov000_0208badc kind:function(arm,size=0x10) addr:0x0208badc func_ov000_0208baec kind:function(arm,size=0x10) addr:0x0208baec func_ov000_0208bafc kind:function(arm,size=0x10) addr:0x0208bafc diff --git a/config/eur/arm9/overlays/ov031/delinks.txt b/config/eur/arm9/overlays/ov031/delinks.txt index 74292ebf..5e8f93df 100644 --- a/config/eur/arm9/overlays/ov031/delinks.txt +++ b/config/eur/arm9/overlays/ov031/delinks.txt @@ -53,6 +53,7 @@ src/031_Land/Actor/ActorUnkROCK.cpp: .text start:0x020e8824 end:0x020e8cb8 .init start:0x02111220 end:0x02111270 .ctor start:0x021127b4 end:0x021127b8 + .data start:0x021133c4 end:0x02113468 .bss start:0x021165d0 end:0x021166e8 src/031_Land/Actor/ActorRupee.cpp: diff --git a/config/eur/arm9/overlays/ov031/relocs.txt b/config/eur/arm9/overlays/ov031/relocs.txt index 2b859b43..6426b759 100644 --- a/config/eur/arm9/overlays/ov031/relocs.txt +++ b/config/eur/arm9/overlays/ov031/relocs.txt @@ -1723,7 +1723,7 @@ from:0x020e8840 kind:arm_call to:0x02011f3c module:main from:0x020e884c kind:arm_call to:0x020e88e0 module:overlay(31) from:0x020e8860 kind:arm_call to:0x02097898 module:overlay(0) from:0x020e8870 kind:arm_call to:0x0207c018 module:overlay(0) -from:0x020e88c8 kind:load to:0x021133cc module:overlay(31) +from:0x020e88c8 kind:load to:0x021133c4 module:overlay(31) add:0x8 from:0x020e88cc kind:load to:0x02112a70 add:0x8 module:overlay(31) from:0x020e88d0 kind:load to:0x021133e8 add:0x8 module:overlay(31) from:0x020e88e8 kind:arm_call to:0x02098388 module:overlay(0) diff --git a/config/eur/arm9/overlays/ov031/symbols.txt b/config/eur/arm9/overlays/ov031/symbols.txt index d870f001..07938147 100644 --- a/config/eur/arm9/overlays/ov031/symbols.txt +++ b/config/eur/arm9/overlays/ov031/symbols.txt @@ -546,13 +546,13 @@ _ZN19ActorProfileUnkROCK10GetProfileEv kind:function(arm,size=0xc) addr:0x020e88 _ZN19ActorProfileUnkROCK6CreateEv kind:function(arm,size=0x24) addr:0x020e8830 _ZN19ActorProfileUnkROCKC1Ev kind:function(arm,size=0x8c) addr:0x020e8854 _ZN12ActorUnkROCKC1Ev kind:function(arm,size=0x9c) addr:0x020e88e0 -_ZN12ActorUnkROCK19func_ov031_020e897cEv kind:function(arm,size=0x30) addr:0x020e897c -_ZN12ActorUnkROCK19func_ov031_020e89acEv kind:function(arm,size=0x9c) addr:0x020e89ac -_ZN12ActorUnkROCK19func_ov031_020e8a48Ev kind:function(arm,size=0x84) addr:0x020e8a48 +_ZN12ActorUnkROCK8vfunc_18Ei kind:function(arm,size=0x30) addr:0x020e897c +_ZN12ActorUnkROCK8vfunc_20Ev kind:function(arm,size=0x9c) addr:0x020e89ac +_ZN12ActorUnkROCK19func_ov031_020e8a48Es kind:function(arm,size=0x84) addr:0x020e8a48 _ZN12ActorUnkROCK19func_ov031_020e8accEv kind:function(arm,size=0x30) addr:0x020e8acc -_ZN12ActorUnkROCK19func_ov031_020e8afcEv kind:function(arm,size=0xa4) addr:0x020e8afc -_ZN12ActorUnkROCK19func_ov031_020e8ba0Ev kind:function(arm,size=0x68) addr:0x020e8ba0 -_ZN12ActorUnkROCK19func_ov031_020e8c08Ev kind:function(arm,size=0x44) addr:0x020e8c08 +_ZN12ActorUnkROCK8vfunc_2CEi kind:function(arm,size=0xa4) addr:0x020e8afc +_ZN12ActorUnkROCK4GrabE15ActorGrabParams kind:function(arm,size=0x68) addr:0x020e8ba0 +_ZN12ActorUnkROCK4DropE15ActorGrabParamsPK7VecFx32 kind:function(arm,size=0x44) addr:0x020e8c08 _ZN12ActorUnkROCKD1Ev kind:function(arm,size=0x28) addr:0x020e8c4c _ZN12ActorUnkROCKD0Ev kind:function(arm,size=0x30) addr:0x020e8c74 _ZN19ActorProfileUnkROCKD1Ev kind:function(arm,size=0x14) addr:0x020e8ca4 @@ -2284,9 +2284,9 @@ data_ov031_02113204 kind:data(any) addr:0x02113204 data_ov031_02113218 kind:data(any) addr:0x02113218 data_ov031_02113260 kind:data(any) addr:0x02113260 _ZTV19data_ov031_021132a8 kind:data(any) addr:0x021132a8 -data_ov031_021133cc kind:data(any) addr:0x021133cc -_ZTV19data_ov031_021133e8 kind:data(any) addr:0x021133e8 -_ZTV19data_ov031_0211340c kind:data(any) addr:0x0211340c +_ZTV24ActorProfileUnkROCK_Base kind:data(any) addr:0x021133c4 +_ZTV19ActorProfileUnkROCK kind:data(any) addr:0x021133e8 +_ZTV12ActorUnkROCK kind:data(any) addr:0x0211340c data_ov031_02113468 kind:data(any) addr:0x02113468 data_ov031_02113478 kind:data(any) addr:0x02113478 _ZTV13ActorRupee_C4 kind:data(any) addr:0x02113488 diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index 6c28d805..146819c4 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -1465,7 +1465,7 @@ func_ov000_0207f83c kind:function(arm,size=0x58) addr:0x0207f83c func_ov000_0207f894 kind:function(arm,size=0x30) addr:0x0207f894 func_ov000_0207f8c4 kind:function(arm,size=0x34) addr:0x0207f8c4 _ZN18UnkStruct_027e09c019func_ov000_0207e240EP15ActorUnkSCCN_B8 kind:function(arm,size=0x14) addr:0x0207f8f8 -func_ov000_0207f90c kind:function(arm,size=0x14) addr:0x0207f90c +_ZN18UnkStruct_027e09c019func_ov000_0207e254EP15ActorUnkSCCN_B8 kind:function(arm,size=0x14) addr:0x0207f90c func_ov000_0207f920 kind:function(arm,size=0x2c) addr:0x0207f920 _ZN5Actor19func_ov000_0207e294EP8Cylinder kind:function(arm,size=0x118) addr:0x0207f94c func_ov000_0207fa64 kind:function(arm,size=0xac) addr:0x0207fa64 @@ -1912,7 +1912,7 @@ func_ov000_0208d134 kind:function(arm,size=0x20) addr:0x0208d134 func_ov000_0208d154 kind:function(arm,size=0x14) addr:0x0208d154 func_ov000_0208d168 kind:function(arm,size=0x1c) addr:0x0208d168 func_ov000_0208d184 kind:function(arm,size=0x1c) addr:0x0208d184 -func_ov000_0208d1a0 kind:function(arm,size=0x10) addr:0x0208d1a0 +_ZN18UnkStruct_027e0ce019func_ov000_0208baccEiP7VecFx32 kind:function(arm,size=0x10) addr:0x0208d1a0 func_ov000_0208d1b0 kind:function(arm,size=0x10) addr:0x0208d1b0 func_ov000_0208d1c0 kind:function(arm,size=0x10) addr:0x0208d1c0 func_ov000_0208d1d0 kind:function(arm,size=0x10) addr:0x0208d1d0 diff --git a/config/jp/arm9/overlays/ov031/delinks.txt b/config/jp/arm9/overlays/ov031/delinks.txt index b3782f9c..7a195990 100644 --- a/config/jp/arm9/overlays/ov031/delinks.txt +++ b/config/jp/arm9/overlays/ov031/delinks.txt @@ -52,6 +52,7 @@ src/031_Land/Actor/ActorUnkROCK.cpp: .text start:0x020ea210 end:0x020ea6a4 .init start:0x02112f90 end:0x02112fe0 .ctor start:0x02114540 end:0x02114544 + .data start:0x02115164 end:0x02115208 .bss start:0x02118370 end:0x02118458 src/031_Land/Actor/ActorRupee.cpp: diff --git a/config/jp/arm9/overlays/ov031/relocs.txt b/config/jp/arm9/overlays/ov031/relocs.txt index f5dd6e59..1d87abc3 100644 --- a/config/jp/arm9/overlays/ov031/relocs.txt +++ b/config/jp/arm9/overlays/ov031/relocs.txt @@ -1724,7 +1724,7 @@ from:0x020ea22c kind:arm_call to:0x02011f3c module:main from:0x020ea238 kind:arm_call to:0x020ea2cc module:overlay(31) from:0x020ea24c kind:arm_call to:0x02099040 module:overlay(0) from:0x020ea25c kind:arm_call to:0x0207d6d0 module:overlay(0) -from:0x020ea2b4 kind:load to:0x0211516c module:overlay(31) +from:0x020ea2b4 kind:load to:0x02115164 module:overlay(31) add:0x8 from:0x020ea2b8 kind:load to:0x02114818 module:overlay(31) from:0x020ea2bc kind:load to:0x02115188 add:0x8 module:overlay(31) from:0x020ea2d4 kind:arm_call to:0x02099b30 module:overlay(0) diff --git a/config/jp/arm9/overlays/ov031/symbols.txt b/config/jp/arm9/overlays/ov031/symbols.txt index 62b9c947..3b8be194 100644 --- a/config/jp/arm9/overlays/ov031/symbols.txt +++ b/config/jp/arm9/overlays/ov031/symbols.txt @@ -546,13 +546,13 @@ _ZN19ActorProfileUnkROCK10GetProfileEv kind:function(arm,size=0xc) addr:0x020ea2 _ZN19ActorProfileUnkROCK6CreateEv kind:function(arm,size=0x24) addr:0x020ea21c _ZN19ActorProfileUnkROCKC1Ev kind:function(arm,size=0x8c) addr:0x020ea240 _ZN12ActorUnkROCKC1Ev kind:function(arm,size=0x9c) addr:0x020ea2cc -_ZN12ActorUnkROCK19func_ov031_020e897cEv kind:function(arm,size=0x30) addr:0x020ea368 -_ZN12ActorUnkROCK19func_ov031_020e89acEv kind:function(arm,size=0x9c) addr:0x020ea398 -_ZN12ActorUnkROCK19func_ov031_020e8a48Ev kind:function(arm,size=0x84) addr:0x020ea434 +_ZN12ActorUnkROCK8vfunc_18Ei kind:function(arm,size=0x30) addr:0x020ea368 +_ZN12ActorUnkROCK8vfunc_20Ev kind:function(arm,size=0x9c) addr:0x020ea398 +_ZN12ActorUnkROCK19func_ov031_020e8a48Es kind:function(arm,size=0x84) addr:0x020ea434 _ZN12ActorUnkROCK19func_ov031_020e8accEv kind:function(arm,size=0x30) addr:0x020ea4b8 -_ZN12ActorUnkROCK19func_ov031_020e8afcEv kind:function(arm,size=0xa4) addr:0x020ea4e8 -_ZN12ActorUnkROCK19func_ov031_020e8ba0Ev kind:function(arm,size=0x68) addr:0x020ea58c -_ZN12ActorUnkROCK19func_ov031_020e8c08Ev kind:function(arm,size=0x44) addr:0x020ea5f4 +_ZN12ActorUnkROCK8vfunc_2CEi kind:function(arm,size=0xa4) addr:0x020ea4e8 +_ZN12ActorUnkROCK4GrabE15ActorGrabParams kind:function(arm,size=0x68) addr:0x020ea58c +_ZN12ActorUnkROCK4DropE15ActorGrabParamsPK7VecFx32 kind:function(arm,size=0x44) addr:0x020ea5f4 _ZN12ActorUnkROCKD1Ev kind:function(arm,size=0x28) addr:0x020ea638 _ZN12ActorUnkROCKD0Ev kind:function(arm,size=0x30) addr:0x020ea660 _ZN19ActorProfileUnkROCKD1Ev kind:function(arm,size=0x14) addr:0x020ea690 @@ -2281,9 +2281,9 @@ data_ov031_02114fa4 kind:data(any) addr:0x02114fa4 data_ov031_02114fb8 kind:data(any) addr:0x02114fb8 data_ov031_02115000 kind:data(any) addr:0x02115000 _ZTV19data_ov031_02115048 kind:data(any) addr:0x02115048 -data_ov031_0211516c kind:data(any) addr:0x0211516c -_ZTV19data_ov031_02115188 kind:data(any) addr:0x02115188 -_ZTV19data_ov031_021151ac kind:data(any) addr:0x021151ac +_ZTV24ActorProfileUnkROCK_Base kind:data(any) addr:0x02115164 +_ZTV19ActorProfileUnkROCK kind:data(any) addr:0x02115188 +_ZTV12ActorUnkROCK kind:data(any) addr:0x021151ac data_ov031_02115208 kind:data(any) addr:0x02115208 data_ov031_02115218 kind:data(any) addr:0x02115218 _ZTV13ActorRupee_C4 kind:data(any) addr:0x02115228 @@ -2538,7 +2538,7 @@ data_ov031_0211836c kind:bss addr:0x0211836c _ZGVN15ProfileInstanceI19ActorProfileUnkROCKE8sProfileE kind:bss addr:0x02118370 @30811 kind:bss addr:0x02118374 _ZN15ProfileInstanceI19ActorProfileUnkROCKE8sProfileE kind:bss addr:0x02118380 -data_ov031_02118458 kind:bss addr:0x02118458 +data_ov031_021166b8 kind:bss addr:0x02118458 data_ov031_02118478 kind:bss addr:0x02118478 data_ov031_0211847c kind:bss addr:0x0211847c _ZN15ProfileInstanceI17ActorProfileRupeeE8sProfileE kind:bss addr:0x02118488 diff --git a/include/Actor/ActorUnkROCK.hpp b/include/Actor/ActorUnkROCK.hpp index 4d42f4ef..e8aa504f 100644 --- a/include/Actor/ActorUnkROCK.hpp +++ b/include/Actor/ActorUnkROCK.hpp @@ -1,46 +1,59 @@ -//! TODO: This file was generated automatically and might contain errors - #pragma once #include "Actor/Actor.hpp" #include "Actor/ActorProfile.hpp" +#include "ActorUnkSCCN.hpp" +#include "MapObject/MapObject_ov031.hpp" #include "global.h" #include "types.h" -class ActorUnkROCK_C4 : public Actor_C4 { -public: - ActorUnkROCK_C4(Actor *param1); - - /* 00 */ virtual bool vfunc_00(ActorRef ref, unk32 param2) override; - /* 04 */ virtual bool vfunc_04() override; - /* 08 */ virtual void vfunc_08() override; - /* 0C */ virtual void vfunc_0C(unk32 param1) override; +enum ActorUnkROCKState_ { + ActorUnkROCKState_0 = 0, + ActorUnkROCKState_1 = 1, + ActorUnkROCKState_2 = 2, + ActorUnkROCKState_3 = 3, + ActorUnkROCKState_4 = 4, + ActorUnkROCKState_Max, }; class ActorUnkROCK : public Actor { public: /* 00 (base) */ - /* 94 */ + /* 94 */ UnkSystem6_Derived2 mUnk_94; + /* 9C */ bool mUnk_9C; + /* A0 */ ActorUnkSCCN_B8 mUnk_A0; + /* B0 */ ActorUnkROCK(); - /* 4C */ virtual ~ActorUnkROCK() override; + /* 18 */ virtual bool vfunc_18(unk32 param1) override; + /* 20 */ virtual void vfunc_20() override; + /* 2C */ virtual void vfunc_2C(unk32 param1) override; + /* 38 */ virtual bool Grab(ActorGrabParams param1) override; + /* 38 */ virtual bool Drop(ActorGrabParams param1, const VecFx32 *param2) override; - void func_ov031_020e897c(void); - void func_ov031_020e89ac(void); - void func_ov031_020e8a48(void); - void func_ov031_020e8acc(void); - void func_ov031_020e8afc(void); - void func_ov031_020e8ba0(void); - void func_ov031_020e8c08(void); + void func_ov031_020e8a48(ActorState state); + void func_ov031_020e8acc(); }; -class ActorProfileUnkROCK : public ActorProfile_Derived1 { +class ActorProfileUnkROCK_Base : public ActorProfile_Derived1 { public: /* 00 (base) */ + /* D8 */ MapObject_10_Pot mUnk_D8; + /* FC */ + + ActorProfileUnkROCK_Base(ActorId actorId) : + ActorProfile_Derived1(actorId) {} + + // data_ov031_021133cc +}; + +class ActorProfileUnkROCK : public ActorProfileUnkROCK_Base { +public: + /* 00 (base) */ + /* FC */ ActorProfileUnkROCK(); - ~ActorProfileUnkROCK(); /* 0C */ virtual Actor *Create(); diff --git a/include/Unknown/UnkStruct_027e09c0.hpp b/include/Unknown/UnkStruct_027e09c0.hpp index a701ee3e..09697fe6 100644 --- a/include/Unknown/UnkStruct_027e09c0.hpp +++ b/include/Unknown/UnkStruct_027e09c0.hpp @@ -71,6 +71,7 @@ public: s16 func_ov000_0207dc88(Actor **, Actor_38 *); void func_ov000_0207de98(ActorRef param1, UnkStruct_ov000_0207de98 *param2, Actor_38 *param3); void func_ov000_0207e240(ActorUnkSCCN_B8 *param1); + void func_ov000_0207e254(ActorUnkSCCN_B8 *param1); void func_ov000_0207e58c(ActorRef param1, unk32 param2, u8 param3, UnkStruct_ov031_Items_01 *param4); bool func_ov000_0207e458(unk32 param1, unk32 param2, VecFx32 *param3, unk32 param4, VecFx32 *param5, ActorRef param6); diff --git a/include/Unknown/UnkStruct_027e0ce0.hpp b/include/Unknown/UnkStruct_027e0ce0.hpp index 012c0420..6c3b815c 100644 --- a/include/Unknown/UnkStruct_027e0ce0.hpp +++ b/include/Unknown/UnkStruct_027e0ce0.hpp @@ -771,6 +771,7 @@ public: void func_ov000_0208a2c4(unk32 param1, unk32 param2); void func_ov000_0208a318(unk32 param1, unk32 param2, unk32 param3); void func_ov000_0208ba94(unk32 param1, VecFx32 *param2); + void func_ov000_0208bacc(unk32 param1, VecFx32 *param2); void func_ov000_0208bbd4(unk32 param1, VecFx32 *param2, u16 param3); bool func_ov000_0208bc1c(unk32 param1, unk32 param2, unk32 param3, unk32 param4, unk32 param5, unk32 param6); void func_ov000_0208bc9c(unk32 param1, unk32 param2); diff --git a/src/031_Land/Actor/ActorUnkROCK.cpp b/src/031_Land/Actor/ActorUnkROCK.cpp index 4b053a95..05a6fa86 100644 --- a/src/031_Land/Actor/ActorUnkROCK.cpp +++ b/src/031_Land/Actor/ActorUnkROCK.cpp @@ -1,7 +1,12 @@ -//! TODO: This file was generated automatically and might contain errors - #include "Actor/ActorUnkROCK.hpp" #include "System/SysNew.hpp" +#include "Unknown/UnkStruct_027e09a8.hpp" +#include "Unknown/UnkStruct_027e09b4.hpp" +#include "Unknown/UnkStruct_027e09c0.hpp" + +extern "C" Mat3p data_027e0130; + +static MapObject_10 data_ov031_021166b8; DECL_PROFILE(ActorProfileUnkROCK); @@ -9,18 +14,115 @@ Actor *ActorProfileUnkROCK::Create() { return new(HeapIndex_2) ActorUnkROCK(); } +// non-matching ActorProfileUnkROCK::ActorProfileUnkROCK() : - ActorProfile_Derived1(ActorId_ROCK) {} + ActorProfileUnkROCK_Base(ActorId_ROCK) { + this->mUnk_04.Init(FLOAT_TO_FX32(0.5f)); + VecFx32_Init(FLOAT_TO_FX32(7.0017f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), &this->mUnk_D8.mUnk_0C); + VecFx32_Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.6f), FLOAT_TO_FX32(1.2f), &this->mUnk_D8.mUnk_18); +} -ActorUnkROCK::ActorUnkROCK() {} +ActorUnkROCK::ActorUnkROCK() : + mUnk_94(G3d_GetModelPtr(GET_PROFILE(ActorProfileUnkROCK)->mUnk_3C.mUnk_50)), + mUnk_9C(true) { + this->mUnk_44 = 0x1F; + this->mUnk_4A[1] = 0x02; +} -void ActorUnkROCK::func_ov031_020e897c(void) {} -void ActorUnkROCK::func_ov031_020e89ac(void) {} -void ActorUnkROCK::func_ov031_020e8a48(void) {} -void ActorUnkROCK::func_ov031_020e8acc(void) {} -void ActorUnkROCK::func_ov031_020e8afc(void) {} -void ActorUnkROCK::func_ov031_020e8ba0(void) {} -void ActorUnkROCK::func_ov031_020e8c08(void) {} +bool ActorUnkROCK::vfunc_18(unk32 param1) { + this->mUnk_A0.mUnk_04 = this->mRef; + this->mUnk_A0.mUnk_08 = &this->mPos; + this->mUnk_A0.mUnk_0C = &data_ov031_021166b8; -ActorUnkROCK::~ActorUnkROCK() {} -ActorProfileUnkROCK::~ActorProfileUnkROCK() {} + this->func_ov031_020e8a48(ActorUnkROCKState_0); + + return true; +} + +void ActorUnkROCK::vfunc_20() { + VecFx32_Copy(&this->mPos, &this->mPrevPos); + switch (this->mState) { + case ActorUnkROCKState_1: + data_027e0ce0->func_ov000_0208bacc(0x1, &this->mPos); + break; + case ActorUnkROCKState_3: + this->func_ov000_02098838(); + VecFx32_Add(&this->mPos, &this->mVel, &this->mPos); + if (this->func_ov000_02098910(NULL, 0x10) == 0x0) { + break; + } + this->func_ov031_020e8a48(ActorUnkROCKState_4); + break; + case ActorUnkROCKState_0: + case ActorUnkROCKState_2: + case ActorUnkROCKState_4: + default: + break; + } +} + +void ActorUnkROCK::func_ov031_020e8a48(ActorState state) { + this->mUnk_52 = 0xFFFF; + this->mUnk_50 = 0x0000; + + if (this->mState == ActorUnkROCKState_0) { + data_027e09c0->func_ov000_0207e254(&this->mUnk_A0); + } + + this->mState = state; + switch (state) { + case ActorUnkROCKState_0: + data_027e09c0->func_ov000_0207e240(&this->mUnk_A0); + break; + case ActorUnkROCKState_4: + this->func_ov031_020e8acc(); + break; + case ActorUnkROCKState_1: + case ActorUnkROCKState_2: + case ActorUnkROCKState_3: + default: + break; + } +} + +void ActorUnkROCK::func_ov031_020e8acc() { + data_027e09a8->func_ov000_02071b30(0x0, &this->mPos, 0x0); + this->func_ov000_020984d0(); +} + +void ActorUnkROCK::vfunc_2C(unk32 param1) { + if (!this->func_01fff5d0(param1, 0x0)) { + return; + } + VecFx32 vecSp18; + VecFx32_Init(FLOAT_TO_FX32(1.2f), FLOAT_TO_FX32(1.2f), FLOAT_TO_FX32(1.2f), &vecSp18); + + VecFx32 vecSp0C = this->mPos; + vecSp0C.y += FLOAT_TO_FX32(0.8f); + + this->mUnk_94.vfunc_10(&vecSp18, &data_027e0130, &vecSp0C); + + data_027e09b4->func_01fff60c(&this->mPos, 0xC00, 0xC00, 0x1F, 0x0, 0x0); +} + +// non-matching +bool ActorUnkROCK::Grab(ActorGrabParams param1) { + if (param1.unk_00 != 0x100 || param1.unk_02 != 1) { + return false; + } + if (!this->Actor::Grab(param1)) { + return false; + } + this->func_ov031_020e8a48(ActorUnkROCKState_1); + return true; +} + +// non-matching +bool ActorUnkROCK::Drop(ActorGrabParams param1, const VecFx32 *param2) { + if (!this->Actor::Drop(param1, param2)) { + return false; + } + + this->func_ov031_020e8a48(ActorUnkROCKState_3); + return true; +}