From c7703d106915675940de73b6c9ea059b059fd300 Mon Sep 17 00:00:00 2001 From: YunataSavior <58997725+YunataSavior@users.noreply.github.com> Date: Tue, 30 Sep 2025 09:49:33 -0700 Subject: [PATCH] d_a_obj_pumpkin OK (#2715) * Initial obj_pumpkin work * pumpkin execute done * d_a_obj_pumpkin OK * Remove NONMATCHING in obj_pumpkin * obj_pumpkin PR comments --- config/GZ2E01/rels/d_a_npc_bou/symbols.txt | 32 +- .../GZ2E01/rels/d_a_obj_pumpkin/symbols.txt | 24 +- configure.py | 2 +- include/d/actor/d_a_npc_jagar.h | 110 +- include/d/actor/d_a_obj_pumpkin.h | 183 +- src/d/actor/d_a_npc_jagar.cpp | 149 +- src/d/actor/d_a_obj_pumpkin.cpp | 1619 +++++++++-------- 7 files changed, 1231 insertions(+), 888 deletions(-) diff --git a/config/GZ2E01/rels/d_a_npc_bou/symbols.txt b/config/GZ2E01/rels/d_a_npc_bou/symbols.txt index 57663e263e7..8a1e2761c74 100644 --- a/config/GZ2E01/rels/d_a_npc_bou/symbols.txt +++ b/config/GZ2E01/rels/d_a_npc_bou/symbols.txt @@ -54,11 +54,11 @@ cutMeetingAgain__11daNpc_Bou_cFi = .text:0x000033D8; // type:function size:0x774 wait__11daNpc_Bou_cFPv = .text:0x00003B4C; // type:function size:0x410 scope:global talkwithJagar__11daNpc_Bou_cFPv = .text:0x00003F5C; // type:function size:0x1A0 scope:global talk__11daNpc_Bou_cFPv = .text:0x000040FC; // type:function size:0x4D0 scope:global -daNpc_Bou_Create__FPv = .text:0x000045CC; // type:function size:0x20 scope:global -daNpc_Bou_Delete__FPv = .text:0x000045EC; // type:function size:0x20 scope:global -daNpc_Bou_Execute__FPv = .text:0x0000460C; // type:function size:0x20 scope:global -daNpc_Bou_Draw__FPv = .text:0x0000462C; // type:function size:0x20 scope:global -daNpc_Bou_IsDelete__FPv = .text:0x0000464C; // type:function size:0x8 scope:global +daNpc_Bou_Create__FPv = .text:0x000045CC; // type:function size:0x20 scope:local +daNpc_Bou_Delete__FPv = .text:0x000045EC; // type:function size:0x20 scope:local +daNpc_Bou_Execute__FPv = .text:0x0000460C; // type:function size:0x20 scope:local +daNpc_Bou_Draw__FPv = .text:0x0000462C; // type:function size:0x20 scope:local +daNpc_Bou_IsDelete__FPv = .text:0x0000464C; // type:function size:0x8 scope:local calc__11J3DTexNoAnmCFPUs = .text:0x00004654; // type:function size:0x30 scope:global __dt__10cCcD_GSttsFv = .text:0x00004684; // type:function size:0x48 scope:global __dt__8daNpcT_cFv = .text:0x000046CC; // type:function size:0x388 scope:global @@ -143,18 +143,18 @@ heapSize$4096 = .rodata:0x0000009C; // type:object size:0x18 scope:local @6218 = .rodata:0x00000138; // type:object size:0x4 scope:local @stringBase0 = .rodata:0x0000013C; // type:object size:0xF1 scope:local data:string_table ...data.0 = .data:0x00000000; // type:label scope:local -cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global +cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:local @1787 = .data:0x0000000C; // type:object size:0x4 scope:local lbl_288_data_10 = .data:0x00000010; // type:object size:0x10 -l_bmdData = .data:0x00000020; // type:object size:0x8 scope:global data:4byte +l_bmdData = .data:0x00000020; // type:object size:0x8 scope:local data:4byte l_evtList = .data:0x00000028; // type:object size:0x58 scope:global -l_resNameList = .data:0x00000080; // type:object size:0x1C scope:global -l_loadResPtrn0 = .data:0x0000009C; // type:object size:0x4 scope:global -l_loadResPtrn1 = .data:0x000000A0; // type:object size:0x3 scope:global -l_loadResPtrn2 = .data:0x000000A4; // type:object size:0x3 scope:global -l_loadResPtrn3 = .data:0x000000A8; // type:object size:0x3 scope:global -l_loadResPtrn9 = .data:0x000000AC; // type:object size:0x5 scope:global -l_loadResPtrnList = .data:0x000000B4; // type:object size:0x18 scope:global +l_resNameList = .data:0x00000080; // type:object size:0x1C scope:local +l_loadResPtrn0 = .data:0x0000009C; // type:object size:0x4 scope:local +l_loadResPtrn1 = .data:0x000000A0; // type:object size:0x3 scope:local +l_loadResPtrn2 = .data:0x000000A4; // type:object size:0x3 scope:local +l_loadResPtrn3 = .data:0x000000A8; // type:object size:0x3 scope:local +l_loadResPtrn9 = .data:0x000000AC; // type:object size:0x5 scope:local +l_loadResPtrnList = .data:0x000000B4; // type:object size:0x18 scope:local l_faceMotionAnmData = .data:0x000000CC; // type:object size:0x134 scope:global l_motionAnmData = .data:0x00000200; // type:object size:0x284 scope:global l_faceMotionSequenceData = .data:0x00000484; // type:object size:0xB0 scope:global @@ -175,7 +175,7 @@ mCutList__11daNpc_Bou_c = .data:0x00000718; // type:object size:0x6C scope:globa @5136 = .data:0x000007A8; // type:object size:0xC scope:local data:4byte @5138 = .data:0x000007B4; // type:object size:0xC scope:local data:4byte @5286 = .data:0x000007C0; // type:object size:0x24 scope:local -daNpc_Bou_MethodTable = .data:0x000007E4; // type:object size:0x20 scope:global +daNpc_Bou_MethodTable = .data:0x000007E4; // type:object size:0x20 scope:local g_profile_NPC_BOU = .data:0x00000804; // type:object size:0x30 scope:global __vt__11J3DTexNoAnm = .data:0x00000834; // type:object size:0xC scope:global __vt__12J3DFrameCtrl = .data:0x00000840; // type:object size:0xC scope:global @@ -193,4 +193,4 @@ __vt__11daNpc_Bou_c = .data:0x000008DC; // type:object size:0xC4 scope:global __vt__17daNpc_Bou_Param_c = .data:0x000009A0; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global @3942 = .bss:0x00000008; // type:object size:0xC scope:local -l_HIO = .bss:0x00000014; // type:object size:0x4 scope:global data:4byte +l_HIO = .bss:0x00000014; // type:object size:0x4 scope:local data:4byte diff --git a/config/GZ2E01/rels/d_a_obj_pumpkin/symbols.txt b/config/GZ2E01/rels/d_a_obj_pumpkin/symbols.txt index 205e1beaaed..bb1597b4d52 100644 --- a/config/GZ2E01/rels/d_a_obj_pumpkin/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_pumpkin/symbols.txt @@ -28,11 +28,11 @@ setSmokePrtcl__15daObj_Pumpkin_cFv = .text:0x00002674; // type:function size:0x8 setWaterPrtcl__15daObj_Pumpkin_cFv = .text:0x000026F8; // type:function size:0x100 scope:global setHamonPrtcl__15daObj_Pumpkin_cFv = .text:0x000027F8; // type:function size:0x5C scope:global crash__15daObj_Pumpkin_cFv = .text:0x00002854; // type:function size:0x2B0 scope:global -daObj_Pumpkin_Create__FPv = .text:0x00002B04; // type:function size:0x20 scope:global -daObj_Pumpkin_Delete__FPv = .text:0x00002B24; // type:function size:0x20 scope:global -daObj_Pumpkin_Execute__FPv = .text:0x00002B44; // type:function size:0x20 scope:global -daObj_Pumpkin_Draw__FPv = .text:0x00002B64; // type:function size:0x20 scope:global -daObj_Pumpkin_IsDelete__FPv = .text:0x00002B84; // type:function size:0x8 scope:global +daObj_Pumpkin_Create__FPv = .text:0x00002B04; // type:function size:0x20 scope:local +daObj_Pumpkin_Delete__FPv = .text:0x00002B24; // type:function size:0x20 scope:local +daObj_Pumpkin_Execute__FPv = .text:0x00002B44; // type:function size:0x20 scope:local +daObj_Pumpkin_Draw__FPv = .text:0x00002B64; // type:function size:0x20 scope:local +daObj_Pumpkin_IsDelete__FPv = .text:0x00002B84; // type:function size:0x8 scope:local __dt__10cCcD_GSttsFv = .text:0x00002B8C; // type:function size:0x48 scope:global cLib_calcTimer__FPi = .text:0x00002BD4; // type:function size:0x1C scope:global __sinit_d_a_obj_pumpkin_cpp = .text:0x00002BF0; // type:function size:0x74 scope:local @@ -44,7 +44,7 @@ __destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 sc _dtors = .dtors:0x00000000; // type:label scope:global ...rodata.0 = .rodata:0x00000000; // type:label scope:local m__21daObj_Pumpkin_Param_c = .rodata:0x00000000; // type:object size:0x34 scope:global -l_ccDObjData = .rodata:0x00000034; // type:object size:0x30 scope:global +l_ccDObjData = .rodata:0x00000034; // type:object size:0x30 scope:local @4022 = .rodata:0x00000064; // type:object size:0x4 scope:local @4023 = .rodata:0x00000068; // type:object size:0x4 scope:local @4860 = .rodata:0x0000006C; // type:object size:0x4 scope:local align:4 data:float @@ -81,14 +81,14 @@ l_ccDObjData = .rodata:0x00000034; // type:object size:0x30 scope:global @5155 = .rodata:0x000000EC; // type:object size:0x4 scope:local align:4 data:float @stringBase0 = .rodata:0x000000F0; // type:object size:0x9 scope:local data:string_table ...data.0 = .data:0x00000000; // type:label scope:local -cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global +cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:local @1787 = .data:0x0000000C; // type:object size:0x4 scope:local lbl_599_data_10 = .data:0x00000010; // type:object size:0x10 -l_bmdData = .data:0x00000020; // type:object size:0x8 scope:global data:4byte -l_resNameList = .data:0x00000028; // type:object size:0x8 scope:global -l_ccDCyl = .data:0x00000030; // type:object size:0x44 scope:global +l_bmdData = .data:0x00000020; // type:object size:0x8 scope:local data:4byte +l_resNameList = .data:0x00000028; // type:object size:0x8 scope:local +l_ccDCyl = .data:0x00000030; // type:object size:0x44 scope:local emttrId$5110 = .data:0x00000074; // type:object size:0x8 scope:local -daObj_Pumpkin_MethodTable = .data:0x0000007C; // type:object size:0x20 scope:global +daObj_Pumpkin_MethodTable = .data:0x0000007C; // type:object size:0x20 scope:local g_profile_OBJ_PUMPKIN = .data:0x0000009C; // type:object size:0x30 scope:global __vt__8cM3dGPla = .data:0x000000CC; // type:object size:0xC scope:global __vt__12dBgS_ObjAcch = .data:0x000000D8; // type:object size:0x24 scope:global @@ -102,4 +102,4 @@ __vt__15daObj_Pumpkin_c = .data:0x00000144; // type:object size:0xC scope:global __vt__21daObj_Pumpkin_Param_c = .data:0x00000150; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global @3860 = .bss:0x00000008; // type:object size:0xC scope:local -l_HIO = .bss:0x00000014; // type:object size:0x4 scope:global data:4byte +l_HIO = .bss:0x00000014; // type:object size:0x4 scope:local data:4byte diff --git a/configure.py b/configure.py index 172f2cb304f..f6cddddd5e1 100755 --- a/configure.py +++ b/configure.py @@ -2126,7 +2126,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_poFire"), ActorRel(NonMatching, "d_a_obj_poTbox"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_prop"), - ActorRel(NonMatching, "d_a_obj_pumpkin"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_pumpkin"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_rcircle"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_rfHole"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_rgate"), diff --git a/include/d/actor/d_a_npc_jagar.h b/include/d/actor/d_a_npc_jagar.h index c548104028e..00b177757e5 100644 --- a/include/d/actor/d_a_npc_jagar.h +++ b/include/d/actor/d_a_npc_jagar.h @@ -12,58 +12,37 @@ * */ +struct daNpc_Jagar_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; + /* 0x8C */ f32 pumpkin_watch_range; + /* 0x90 */ f32 pumpkin_watch_Ymax; + /* 0x94 */ f32 pumpkin_watch_Ymin; + /* 0x98 */ f32 running_speed; + /* 0x9C */ f32 hidden_state_release_dist; +}; + class daNpc_Jagar_Param_c { - public: - /* 80A1A2C4 */ virtual ~daNpc_Jagar_Param_c() {} - - struct Data { - /* 0x00 */ f32 field_0x00; // 170.0f - /* 0x04 */ f32 field_0x04; // -3.0f - /* 0x08 */ f32 field_0x08; // 1.0f - /* 0x0C */ f32 field_0x0c; // 400.0f - /* 0x10 */ f32 field_0x10; // 255.0f - /* 0x14 */ f32 field_0x14; // 160.0f - /* 0x18 */ f32 field_0x18; // 35.0f - /* 0x1C */ f32 field_0x1c; // 30.0f - /* 0x20 */ f32 field_0x20; // 0.0f - /* 0x24 */ f32 field_0x24; // 0.0f - /* 0x28 */ f32 field_0x28; // 10.0f - /* 0x2C */ f32 field_0x2c; // -10.0f - /* 0x30 */ f32 field_0x30; // 30.0f - /* 0x34 */ f32 field_0x34; // -10.0f - /* 0x38 */ f32 field_0x38; // 45.0f - /* 0x3C */ f32 field_0x3c; // -45.0f - /* 0x40 */ f32 field_0x40; // 0.6f - /* 0x44 */ f32 field_0x44; // 12.0f - /* 0x48 */ s16 field_0x48; - /* 0x4A */ s16 field_0x4a; - /* 0x4C */ s16 field_0x4c; - /* 0x4E */ s16 field_0x4e; - /* 0x50 */ f32 field_0x50; // 110.0f - /* 0x54 */ f32 field_0x54; // 500.0f - /* 0x58 */ f32 field_0x58; // 300.0f - /* 0x5C */ f32 field_0x5c; // -300.0f - /* 0x60 */ s16 field_0x60; // 60 - /* 0x62 */ s16 field_0x62; // 8 - /* 0x64 */ f32 field_0x64; // 0.0f - /* 0x68 */ f32 field_0x68; // 0.0f - /* 0x6C */ f32 field_0x6c; // 4.0f - /* 0x70 */ f32 field_0x70; // 0.0f - /* 0x74 */ f32 field_0x74; // 0.0f - /* 0x78 */ f32 field_0x78; // 0.0f - /* 0x7C */ f32 field_0x7c; // 0.0f - /* 0x80 */ f32 field_0x80; // 0.0f - /* 0x84 */ f32 field_0x84; // 0.0f - /* 0x88 */ f32 field_0x88; // 0.0f - /* 0x8C */ f32 field_0x8c; // 1400.0f - /* 0x90 */ f32 field_0x90; // 200.0f - /* 0x94 */ f32 field_0x94; // -800.0f - /* 0x98 */ f32 field_0x98; // 16.0f - /* 0x9C */ f32 field_0x9c; // 1800.0f - }; - - static const Data m; - }; +public: + /* 80A1A2C4 */ virtual ~daNpc_Jagar_Param_c() {} + + static const daNpc_Jagar_HIOParam m; +}; + +#if DEBUG +class daNpc_Jagar_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Jagar_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + + daNpc_Jagar_HIOParam m; +}; + +#define NPC_JAGAR_HIO_CLASS daNpc_Jagar_HIO_c +#else +#define NPC_JAGAR_HIO_CLASS daNpc_Jagar_Param_c +#endif class daNpc_Jagar_c : public daNpcT_c { public: @@ -181,9 +160,9 @@ public: BOOL chkFindWolf() { int uVar3 = (int)daNpcT_getDistTableIdx(field_0xff0, field_0xff4); - return daNpcT_c::chkFindWolf(mCurAngle.y, uVar3, field_0xfec, daNpc_Jagar_Param_c::m.field_0x54, - daNpc_Jagar_Param_c::m.field_0x50, daNpc_Jagar_Param_c::m.field_0x58, - daNpc_Jagar_Param_c::m.field_0x5c, 1); + return daNpcT_c::chkFindWolf(mCurAngle.y, uVar3, field_0xfec, mpHIO->m.common.search_distance, + mpHIO->m.common.fov, mpHIO->m.common.search_height, + mpHIO->m.common.search_depth, 1); } int chkCondition(int i_val) { @@ -225,10 +204,29 @@ public: u8 getPathID() { return (fopAcM_GetParam(this) & 0xff00) >> 8; } + int crashPumpkin(fopAc_ac_c* pumpkin_p) { + int reg_r30; + if (mType == 0 && fopAcM_GetName(pumpkin_p) == PROC_OBJ_PUMPKIN && !daNpcT_chkEvtBit(0xAE) + && daNpcT_chkEvtBit(0x25B) && !daNpcT_chkEvtBit(0x235)) { + ++field_0xffc; + reg_r30 = chkPointInArea(pumpkin_p->current.pos, current.pos, mpHIO->m.pumpkin_watch_range, + mpHIO->m.pumpkin_watch_Ymax, mpHIO->m.pumpkin_watch_Ymin, 0); + if (reg_r30) { + if (field_0xffc >= 4) { + daNpcT_onTmpBit(0x1B); + } + + return 1; + } + } + + return 0; + } + static char* mCutNameList[7]; static cutFunc mCutList[7]; private: - /* 0x0E40 */ int field_0xe40; + /* 0x0E40 */ NPC_JAGAR_HIO_CLASS* mpHIO; /* 0x0E44 */ dCcD_Cyl mCyl1; /* 0x0F80 */ u8 mType; /* 0x0F84 */ daNpcT_ActorMngr_c mActorMngr[5]; @@ -239,7 +237,7 @@ private: /* 0x0FF0 */ int field_0xff0; /* 0x0FF4 */ int field_0xff4; /* 0x0FF8 */ int field_0xff8; - /* 0x0FFC */ u8 field_0xffc[0x1000 - 0xffc]; + /* 0x0FFC */ int field_0xffc; /* 0x1000 */ u8 field_0x1000; /* 0x1001 */ u8 field_0x1001; /* 0x1002 */ u8 field_0x1002; diff --git a/include/d/actor/d_a_obj_pumpkin.h b/include/d/actor/d_a_obj_pumpkin.h index 1d0d446d55c..b95481f9eeb 100644 --- a/include/d/actor/d_a_obj_pumpkin.h +++ b/include/d/actor/d_a_obj_pumpkin.h @@ -2,6 +2,50 @@ #define D_A_OBJ_PUMPKIN_H #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" +#include "d/actor/d_a_player.h" + +struct daObj_Pumpkin_HIOParam { + /* 0x00 */ f32 featured_offset; + /* 0x04 */ f32 gravity; + /* 0x08 */ f32 scale; + /* 0x0C */ f32 real_shadow_size; + /* 0x10 */ f32 weight; + /* 0x14 */ f32 height; + /* 0x18 */ f32 knee_length; + /* 0x1C */ f32 width; + /* 0x20 */ f32 fire_rate; + /* 0x24 */ f32 launch_angle; + /* 0x28 */ f32 floating_offset; + /* 0x2C */ s16 hold_on; + /* 0x2E */ s16 pull_sound_delay; + /* 0x30 */ s16 growth_time_1; + /* 0x32 */ s16 growth_time_2; +}; + +class daObj_Pumpkin_Param_c { +public: + /* 80CB8304 */ virtual ~daObj_Pumpkin_Param_c() {} + + static const daObj_Pumpkin_HIOParam m; +}; + +#if DEBUG +class daObj_Pumpkin_HIO_c : public mDoHIO_entry_c { +public: + daObj_Pumpkin_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + + daObj_Pumpkin_HIOParam m; +}; + +#define OBJ_PUMPKIN_HIO_CLASS daObj_Pumpkin_HIO_c +#else +#define OBJ_PUMPKIN_HIO_CLASS daObj_Pumpkin_Param_c +#endif /** * @ingroup actors-objects @@ -12,21 +56,78 @@ * */ class daObj_Pumpkin_c : public fopAc_ac_c { +private: + /* 0x568 */ OBJ_PUMPKIN_HIO_CLASS* mpHIO; + /* 0x56C */ request_of_phase_process_class mPhaseReq; + /* 0x574 */ J3DModel* mpModel; + /* 0x578 */ dBgS_ObjAcch mObjAcch; + /* 0x750 */ dCcD_Stts mStts; + /* 0x78C */ dBgS_AcchCir mAcchCir; + /* 0x7CC */ cBgS_GndChk mGndChk; + /* 0x808 */ dCcD_Cyl mCyl0; + /* 0x944 */ dCcD_Cyl mCyl1; + /* 0xA80 */ daPy_boomerangMove_c mBoomerangMove; + /* 0xA8C */ cM3dGLin mLin; + /* 0xAA8 */ dBgS_LinChk mLinChk; + /* 0xB18 */ f32 mPumpkinScale; + /* 0xB1C */ u8 mType; + /* 0xB20 */ cXyz field_0xB20; + /* 0xB2C */ cXyz field_0xB2C; + /* 0xB38 */ csXyz field_0xB38; + /* 0xB40 */ fpc_ProcID mItemProcId; + /* 0xB44 */ int field_0xB44; + /* 0xB48 */ int field_0xB48; + /* 0xB4C */ int field_0xB4C; + /* 0xB50 */ int field_0xB50; + /* 0xB54 */ int field_0xB54; + /* 0xB58 */ int field_0xB58; + /* 0xB5C */ f32 field_0xB5C; + /* 0xB60 */ f32 field_0xB60; + /* 0xB64 */ f32 mWaterY; + /* 0xB68 */ f32 field_0xB68; + /* 0xB6C */ u8 field_0xB6C[0xB70 - 0xB6C]; + /* 0xB70 */ f32 field_0xB70; + /* 0xB74 */ f32 field_0xB74; + /* 0xB78 */ s16 field_0xB78; + /* 0xB7A */ s16 field_0xB7A; + /* 0xB7C */ s16 field_0xB7C; + /* 0xB7E */ s16 field_0xB7E; + /* 0xB80 */ s16 field_0xB80; + /* 0xB82 */ u8 field_0xB82[0xB88 - 0xB82]; + /* 0xB88 */ u32 mWaterPrtcls[4]; + /* 0xB98 */ u32 mHamonPrtcl; + /* 0xB9C */ u8 field_0xB9C[0xBA0 - 0xB9C]; + /* 0xBA0 */ u32 mSmokePrtcl1; + /* 0xBA4 */ u32 mSmokePrtcl2; + /* 0xBA8 */ u8 field_0xBA8; + /* 0xBA9 */ u8 field_0xBA9; + /* 0xBAA */ u8 field_0xBAA; + /* 0xBAB */ u8 field_0xBAB; + /* 0xBAC */ u8 field_0xBAC; + /* 0xBAD */ u8 field_0xBAD; + /* 0xBAE */ u8 field_0xBAE; + /* 0xBAF */ u8 field_0xBAF; + /* 0xBB0 */ u8 field_0xBB0; + /* 0xBB1 */ u8 field_0xBB1; + /* 0xBB2 */ u8 field_0xBB2; + /* 0xBB3 */ u8 field_0xbb3; + /* 0xBB4 */ u8 field_0xbb4; + public: - /* 80CB578C */ ~daObj_Pumpkin_c(); - /* 80CB5A04 */ void create(); - /* 80CB5F88 */ void CreateHeap(); - /* 80CB6018 */ void Delete(); - /* 80CB604C */ void Execute(); - /* 80CB7638 */ void Draw(); - /* 80CB7824 */ void createHeapCallBack(fopAc_ac_c*); - /* 80CB7844 */ void isDelete(); + /* 80CB578C */ virtual ~daObj_Pumpkin_c(); + /* 80CB5A04 */ int create(); + /* 80CB5F88 */ int CreateHeap(); + /* 80CB6018 */ int Delete(); + /* 80CB604C */ int Execute(); + /* 80CB7638 */ int Draw(); + /* 80CB7824 */ static int createHeapCallBack(fopAc_ac_c*); + /* 80CB7844 */ int isDelete(); /* 80CB78C8 */ void setEnvTevColor(); /* 80CB7924 */ void setRoomNo(); /* 80CB7968 */ void reset(); /* 80CB79DC */ void setMtx(); - /* 80CB7AE4 */ void calcRollAngle(s16, int); - /* 80CB7B84 */ void getWallAngle(s16, s16*); + /* 80CB7AE4 */ s16 calcRollAngle(s16, int); + /* 80CB7B84 */ int getWallAngle(s16, s16*); /* 80CB7D14 */ void setSmokePrtcl(); /* 80CB7D98 */ void setWaterPrtcl(); /* 80CB7E98 */ void setHamonPrtcl(); @@ -42,22 +143,58 @@ public: mpModel->setBaseTRMtx(mtx); } -private: - /* 0x568 */ u8 field_0x568[0x574 - 0x568]; - /* 0x574 */ J3DModel* mpModel; - /* 0x578 */ u8 field_0x578[0xbb3 - 0x578]; - /* 0xB7C */ u8 field_0xbb3; - /* 0xB7E */ u8 field_0xbb4[0xbbc - 0xbb4]; + int getItemTableNo() { + u8 prm = fopAcM_GetParam(this) & 0xFF; + if (prm == 0xFF) { + return -1; + } + + return prm; + } + + u8 getType() { + u8 prm = (fopAcM_GetParam(this) & 0xFF00) >> 8; + switch (prm) { + case 0: + return 0; + case 1: + return 1; + case 2: + return 2; + case 3: + return 3; + default: + return 0; + } + } + + u8 getProcType() { + u8 prm = (fopAcM_GetParam(this) & 0xF0000000) >> 0x1C; + if (prm == 0xF) { + return 0; + } + + return prm; + } + + void popup(f32 i_f0, f32 i_deg, cXyz* ip_vec) { + if (ip_vec != NULL) { + current.pos = *ip_vec; + old.pos = current.pos; + } + + s16 temp_r30 = cM_deg2s(i_deg); + speed.setall(0.0f); + speed.y = i_f0 * cM_ssin(temp_r30); + speedF = i_f0 * cM_scos(temp_r30); + field_0xB50 = 6; + field_0xB7C = 0x4000; + field_0xBAD = 1; + field_0xB74 = 0.0f; + } }; STATIC_ASSERT(sizeof(daObj_Pumpkin_c) == 0xbbc); -class daObj_Pumpkin_Param_c { -public: - /* 80CB8304 */ ~daObj_Pumpkin_Param_c(); - - static u8 const m[52]; -}; - #endif /* D_A_OBJ_PUMPKIN_H */ diff --git a/src/d/actor/d_a_npc_jagar.cpp b/src/d/actor/d_a_npc_jagar.cpp index fe670683949..bb9967a8fa5 100644 --- a/src/d/actor/d_a_npc_jagar.cpp +++ b/src/d/actor/d_a_npc_jagar.cpp @@ -138,6 +138,45 @@ enum Event { /* 0x8 */ EVENT_FIND_WOLF_VER2, }; +/* 80A1A330-80A1A3D0 000000 00A0+00 13/13 0/0 1/1 .rodata m__19daNpc_Jagar_Param_c */ +daNpc_Jagar_HIOParam const daNpc_Jagar_Param_c::m = { + 170.0f, -3.0f, 1.0f, 400.0f, 255.0f, 160.0f, + 35.0f, 30.0f, 0.0f, 0.0f, 10.0f, -10.0f, + 30.0f, -10.0f, 45.0f, -45.0f, 0.6f, 12.0f, + 3, 6, 5, 6, 110.0f, 500.0f, 300.0f, -300.0f, + 60, 8, 0, 0, 0, 0.0f, 0.0f, 4.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + // Jagar-specific: + 1400.0f, 200.0f, -800.0f, 16.0f, 1800.0f, +}; + +#if DEBUG +daNpc_Jagar_HIO_c::daNpc_Jagar_HIO_c() { + m = daNpc_Jagar_Param_c::m; +} + +void daNpc_Jagar_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // TODO. +} + +void daNpc_Jagar_HIO_c::genMessage(JORMContext* ctext) { + // TODO. + daNpcT_cmnGenMessage(ctext, &m.common); + // pumpkin monitoring distance + ctext->genSlider("かぼちゃ監視距離", &m.pumpkin_watch_range, 0.0f, 1000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // pumpkin watch height + ctext->genSlider("かぼちゃ監視高さ", &m.pumpkin_watch_Ymax, -10000.0f, 10000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // "Pumpkin monitoring is low"? + ctext->genSlider("かぼちゃ監視低さ", &m.pumpkin_watch_Ymin, -10000.0f, 10000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // running speed + ctext->genSlider("走る速度 ", &m.running_speed, 0.0f, 10000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // hidden state release dist + ctext->genSlider("隠れ状態解除距離", &m.hidden_state_release_dist, 0.0f, 10000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // export file: + ctext->genButton("ファイル書き出し", 0x40000002, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); +} +#endif + /* 80A1A568-80A1A570 000020 0008+00 1/1 0/0 0/0 .data l_bmdData */ static int l_bmdData[1][2] = { {BMDR_JAGAR, 1}, @@ -310,6 +349,13 @@ daNpc_Jagar_c::cutFunc daNpc_Jagar_c::mCutList[7] = { &daNpc_Jagar_c::cutFindWolf, }; +#if DEBUG +static daNpc_Jagar_HIO_c l_HIO; +#else +/* 80A1AE2C-80A1AE30 000054 0004+00 1/1 0/0 0/0 .bss l_HIO */ +static daNpc_Jagar_Param_c l_HIO; +#endif + /* 80A1470C-80A14858 0000EC 014C+00 1/0 0/0 0/0 .text __dt__13daNpc_Jagar_cFv */ daNpc_Jagar_c::~daNpc_Jagar_c() { if (mpMorf[0] != 0) { @@ -318,17 +364,6 @@ daNpc_Jagar_c::~daNpc_Jagar_c() { deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); } -/* 80A1A330-80A1A3D0 000000 00A0+00 13/13 0/0 1/1 .rodata m__19daNpc_Jagar_Param_c */ -daNpc_Jagar_Param_c::Data const daNpc_Jagar_Param_c::m = { - 170.0f, -3.0f, 1.0f, 400.0f, 255.0f, 160.0f, - 35.0f, 30.0f, 0.0f, 0.0f, 10.0f, -10.0f, - 30.0f, -10.0f, 45.0f, -45.0f, 0.6f, 12.0f, - 3, 6, 5, 6, 110.0f, 500.0f, 300.0f, -300.0f, - 60, 8, 0.0f, 0.0f, 4.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1400.0f, - 200.0f, -800.0f, 16.0f, 1800.0f, -}; - /* 80A14858-80A14B20 000238 02C8+00 1/1 0/0 0/0 .text create__13daNpc_Jagar_cFv */ int daNpc_Jagar_c::create() { static int const heapSize[4] = {14416, 14448, 14448, 0}; @@ -359,7 +394,7 @@ int daNpc_Jagar_c::create() { mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Jagar_Param_c::m.field_0x10, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl1.Set(mCcDCyl); mCyl1.SetStts(&mCcStts); mCyl1.SetTgHitCallback(tgHitCallBack); @@ -536,39 +571,39 @@ void daNpc_Jagar_c::setParam() { selectAction(); srchActors(); u32 uVar7 = (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); - s16 sVar10 = daNpc_Jagar_Param_c::m.field_0x48; - s16 sVar9 = daNpc_Jagar_Param_c::m.field_0x4a; - s16 sVar8 = daNpc_Jagar_Param_c::m.field_0x4c; - s16 sVar7 = daNpc_Jagar_Param_c::m.field_0x4e; + s16 talk_dist = mpHIO->m.common.talk_distance; + s16 talk_ang = mpHIO->m.common.talk_angle; + s16 att_dist = mpHIO->m.common.attention_distance; + s16 att_ang = mpHIO->m.common.attention_angle; switch (mType) { case TYPE_0: - sVar10 = 4; - sVar9 = 6; - sVar8 = 5; - sVar7 = 6; + talk_dist = 4; + talk_ang = 6; + att_dist = 5; + att_ang = 6; break; case TYPE_1: field_0xff0 = 3; field_0xff4 = 6; - sVar10 = 19; - sVar9 = 6; - sVar8 = 19; - sVar7 = 6; + talk_dist = 19; + talk_ang = 6; + att_dist = 19; + att_ang = 6; break; case TYPE_2: - sVar10 = 3; - sVar9 = 6; - sVar8 = 5; - sVar7 = 6; + talk_dist = 3; + talk_ang = 6; + att_dist = 5; + att_ang = 6; break; } - attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(sVar8, sVar7); + attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(att_dist, att_ang); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; - attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(sVar10, sVar9); + attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_dist, talk_ang); if (mType == TYPE_1) { uVar7 |= fopAc_AttnFlag_UNK_0x800000; @@ -586,18 +621,18 @@ void daNpc_Jagar_c::setParam() { } attention_info.flags = uVar7; - scale.set(daNpc_Jagar_Param_c::m.field_0x08, daNpc_Jagar_Param_c::m.field_0x08, - daNpc_Jagar_Param_c::m.field_0x08); - mCcStts.SetWeight(daNpc_Jagar_Param_c::m.field_0x10); - mCylH = daNpc_Jagar_Param_c::m.field_0x14; - mWallR = daNpc_Jagar_Param_c::m.field_0x1c; - mAttnFovY = daNpc_Jagar_Param_c::m.field_0x50; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, + mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Jagar_Param_c::m.field_0x18); - mRealShadowSize = daNpc_Jagar_Param_c::m.field_0x0c; - mExpressionMorfFrame = daNpc_Jagar_Param_c::m.field_0x6c; - mMorfFrames = daNpc_Jagar_Param_c::m.field_0x44; - gravity = daNpc_Jagar_Param_c::m.field_0x04; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; } /* 80A155E4-80A15714 000FC4 0130+00 1/0 0/0 0/0 .text checkChangeEvt__13daNpc_Jagar_cFv */ @@ -775,9 +810,6 @@ void daNpc_Jagar_c::beforeMove() { } } -/* 80A1AE2C-80A1AE30 000054 0004+00 1/1 0/0 0/0 .bss l_HIO */ -static daNpc_Jagar_Param_c l_HIO; - /* 80A15D68-80A1607C 001748 0314+00 1/0 0/0 0/0 .text setAttnPos__13daNpc_Jagar_cFv */ void daNpc_Jagar_c::setAttnPos() { cXyz cStack_3c(-10.0f, 10.0f, 0.0f); @@ -785,11 +817,11 @@ void daNpc_Jagar_c::setAttnPos() { f32 dVar8 = cM_s2rad(mCurAngle.y - field_0xd7e.y); J3DModel* model = mpMorf[0]->getModel(); mJntAnm.setParam(this, model, &cStack_3c, getBackboneJointNo(), getNeckJointNo(), - getHeadJointNo(), daNpc_Jagar_Param_c::m.field_0x24, daNpc_Jagar_Param_c::m.field_0x20, - daNpc_Jagar_Param_c::m.field_0x2c, daNpc_Jagar_Param_c::m.field_0x28, - daNpc_Jagar_Param_c::m.field_0x34, daNpc_Jagar_Param_c::m.field_0x30, - daNpc_Jagar_Param_c::m.field_0x3c, daNpc_Jagar_Param_c::m.field_0x38, - daNpc_Jagar_Param_c::m.field_0x40, dVar8, NULL); + getHeadJointNo(), mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, + mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, dVar8, NULL); mJntAnm.calcJntRad(0.2f, 1.0f, dVar8); setMtx(); mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getHeadJointNo())); @@ -797,7 +829,7 @@ void daNpc_Jagar_c::setAttnPos() { mJntAnm.setEyeAngleX(eyePos, 1.0f, -0x2800); mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 1, 1.0f, 0); cStack_3c.set(0.0f, 0.0f, 10.0f); - cStack_3c.y = daNpc_Jagar_Param_c::m.field_0x00; + cStack_3c.y = mpHIO->m.common.attention_offset; if (field_0x1004 == 2) { cStack_3c.set(0.0f, 100.0f, -60.0f); } @@ -1323,7 +1355,7 @@ int daNpc_Jagar_c::cutFindWolf(int i_cutIndex) { cLib_chaseS(&shape_angle.y, current.angle.y, 0x800); mCurAngle.y = shape_angle.y; field_0xd7e.y = mCurAngle.y; - cLib_chaseF(&speedF, daNpc_Jagar_Param_c::m.field_0x98, 0.5f); + cLib_chaseF(&speedF, mpHIO->m.running_speed, 0.5f); mAcch.SetWallNone(); if (cLib_calcTimer(&mEventTimer) == 0) { rv = 1; @@ -1514,7 +1546,7 @@ int daNpc_Jagar_c::wait(void* param_1) { switch (mType) { case TYPE_0: daNpcT_offTmpBit(0x10); // dSv_event_tmp_flag_c::T_0015 - Ordon Village - Link came up the hill afte being called by Jaggle - cStack_24.set(daNpc_Jagar_Param_c::m.field_0x54, 10.0f, daNpc_Jagar_Param_c::m.field_0x54); + cStack_24.set(mpHIO->m.common.search_distance, 10.0f, mpHIO->m.common.search_distance); if (chkPointInArea(daPy_getPlayerActorClass()->current.pos, current.pos, cStack_24, 0)) { if (daPy_getPlayerActorClass()->checkPlayerFly()) { @@ -1545,9 +1577,9 @@ int daNpc_Jagar_c::wait(void* param_1) { case TYPE_2: if (!mHide) { if (daNpcT_c::chkFindWolf(mCurAngle.y, daNpcT_getDistTableIdx(field_0xff0, field_0xff4), - field_0xfec, daNpc_Jagar_Param_c::m.field_0x54, 180.0f, - daNpc_Jagar_Param_c::m.field_0x58, - daNpc_Jagar_Param_c::m.field_0x5c, 1)) { + field_0xfec, mpHIO->m.common.search_distance, 180.0f, + mpHIO->m.common.search_height, + mpHIO->m.common.search_depth, 1)) { mEvtNo = EVENT_FIND_WOLF_VER2; } } @@ -1649,13 +1681,14 @@ int daNpc_Jagar_c::talkwithBou(void* param_0) { } // fallthrough case 2: - if (mHide != 0 && !daNpcT_chkEvtBit(0xD3) /* dSv_event_flag_c::F_0211 - Ordon Village - Successfully eavesdrop on Bo and Jaggle */) { + if (mHide != 0 && !daNpcT_chkEvtBit(0xD3)) { + /* dSv_event_flag_c::F_0211 - Ordon Village - Successfully eavesdrop on Bo and Jaggle */ f32 actor_dist = fopAcM_searchActorDistanceXZ(this, daPy_getPlayerActorClass()); - if (daNpc_Jagar_Param_c::m.field_0x9c < actor_dist && field_0xe34 == 0) { + if (mpHIO->m.hidden_state_release_dist < actor_dist && field_0xe34 == 0) { if (bo) { bo->mHide = 0; } - + mHide = 0; } } diff --git a/src/d/actor/d_a_obj_pumpkin.cpp b/src/d/actor/d_a_obj_pumpkin.cpp index 6272653a81e..5877a976f61 100644 --- a/src/d/actor/d_a_obj_pumpkin.cpp +++ b/src/d/actor/d_a_obj_pumpkin.cpp @@ -7,193 +7,157 @@ #include "d/actor/d_a_obj_pumpkin.h" #include "d/d_cc_d.h" -#include "dol2asm.h" - - - - -// -// Forward References: -// - -extern "C" void __dt__15daObj_Pumpkin_cFv(); -extern "C" void create__15daObj_Pumpkin_cFv(); -extern "C" void __dt__8cM3dGLinFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void CreateHeap__15daObj_Pumpkin_cFv(); -extern "C" void Delete__15daObj_Pumpkin_cFv(); -extern "C" void Execute__15daObj_Pumpkin_cFv(); -extern "C" void Draw__15daObj_Pumpkin_cFv(); -extern "C" void __dt__8cM3dGPlaFv(); -extern "C" void createHeapCallBack__15daObj_Pumpkin_cFP10fopAc_ac_c(); -extern "C" void isDelete__15daObj_Pumpkin_cFv(); -extern "C" void setEnvTevColor__15daObj_Pumpkin_cFv(); -extern "C" void setRoomNo__15daObj_Pumpkin_cFv(); -extern "C" void reset__15daObj_Pumpkin_cFv(); -extern "C" void setMtx__15daObj_Pumpkin_cFv(); -extern "C" void calcRollAngle__15daObj_Pumpkin_cFsi(); -extern "C" void getWallAngle__15daObj_Pumpkin_cFsPs(); -extern "C" void setSmokePrtcl__15daObj_Pumpkin_cFv(); -extern "C" void setWaterPrtcl__15daObj_Pumpkin_cFv(); -extern "C" void setHamonPrtcl__15daObj_Pumpkin_cFv(); -extern "C" void crash__15daObj_Pumpkin_cFv(); -extern "C" static void daObj_Pumpkin_Create__FPv(); -extern "C" static void daObj_Pumpkin_Delete__FPv(); -extern "C" static void daObj_Pumpkin_Execute__FPv(); -extern "C" static void daObj_Pumpkin_Draw__FPv(); -extern "C" static bool daObj_Pumpkin_IsDelete__FPv(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void func_80CB8274(void* _this, int*); -extern "C" void __sinit_d_a_obj_pumpkin_cpp(); -extern "C" void __dt__21daObj_Pumpkin_Param_cFv(); -extern "C" static void func_80CB834C(); -extern "C" static void func_80CB8354(); -extern "C" u8 const m__21daObj_Pumpkin_Param_c[52]; -extern "C" extern char const* const d_a_obj_pumpkin__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void mDoMtx_ZrotM__FPA4_fs(); -extern "C" void scaleM__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcM_SearchByID__FUiPP10fopAc_ac_c(); -extern "C" void fopAcM_SearchByName__FsPP10fopAc_ac_c(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void fopAcM_calcSpeed__FP10fopAc_ac_c(); -extern "C" void fopAcM_posMove__FP10fopAc_ac_cPC4cXyz(); -extern "C" void fopAcM_createItemFromTable__FPC4cXyziiiPC5csXyziPC4cXyzPfPfb(); -extern "C" void fopAcM_effSmokeSet1__FPUlPUlPC4cXyzPC5csXyzfPC12dKy_tevstr_ci(); -extern "C" void fopAcM_effHamonSet__FPUlPC4cXyzff(); -extern "C" void fopAcM_carryOffRevise__FP10fopAc_ac_c(); -extern "C" void fopAcM_getWaterY__FPC4cXyzPf(); -extern "C" void fopAcM_getWaterStream__FPC4cXyzRC13cBgS_PolyInfoP4cXyzPii(); -extern "C" void fpcEx_IsExist__FUi(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void forceOnEventMove__Q213dPa_control_c7level_cFUl(); -extern "C" void -set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void setSimple__21dDlst_shadowControl_cFP4cXyzffP4cXyzsfP9_GXTexObj(); -extern "C" void LineCross__4cBgSFP11cBgS_LinChk(); -extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla(); -extern "C" void GetPolyColor__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void GetRoomId__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWallR__12dBgS_AcchCirFf(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void __ct__11dBgS_LinChkFv(); -extern "C" void __dt__11dBgS_LinChkFv(); -extern "C" void Set__11dBgS_LinChkFPC4cXyzPC4cXyzPC10fopAc_ac_c(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void GetTgHitGObj__12dCcD_GObjInfFv(); -extern "C" void ChkCoHit__12dCcD_GObjInfFv(); -extern "C" void GetCoHitObj__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void chkPointInArea__8daNpcT_cF4cXyz4cXyzfffs(); -extern "C" void daNpcT_chkEvtBit__FUl(); -extern "C" void daNpcT_onTmpBit__FUl(); -extern "C" void daNpcF_getGroundAngle__FP13cBgS_PolyInfos(); -extern "C" void initOffset__20daPy_boomerangMove_cFPC4cXyz(); -extern "C" void posMove__20daPy_boomerangMove_cFP4cXyzPsP10fopAc_ac_cs(); -extern "C" void bgCheckAfterOffset__20daPy_boomerangMove_cFPC4cXyz(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void ClrCcMove__9cCcD_SttsFv(); -extern "C" void GetAc__8cCcD_ObjFv(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void normalizeZP__4cXyzFv(); -extern "C" void cM_atan2s__Fff(); -extern "C" void cM_rndFX__Ff(); -extern "C" void __ct__11cBgS_GndChkFv(); -extern "C" void __dt__11cBgS_GndChkFv(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void SetH__8cM3dGCylFf(); -extern "C" void SetR__8cM3dGCylFf(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void cLib_addCalc2__FPffff(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void cLib_chaseAngleS__FPsss(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __dl__FPv(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_CylAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" u8 const m__19daNpc_Jagar_Param_c[160]; -extern "C" void __register_global_object(); - -// -// Declarations: -// +#if DEBUG +#include "SSystem/SComponent/c_counter.h" +#include "JSystem/JHostIO/JORFile.h" +#endif +#include "d/actor/d_a_npc.h" +#include "d/d_cc_uty.h" +#include "d/actor/d_a_npc_jagar.h" /* ############################################################################################## */ -/* 80CB8460-80CB8460 0000F0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80CB8460 = ""; -SECTION_DEAD static char const* const stringBase_80CB8461 = "pumpkin"; -#pragma pop +/* 80CB8370-80CB83A4 000000 0034+00 5/5 0/0 0/0 .rodata m__21daObj_Pumpkin_Param_c */ +const daObj_Pumpkin_HIOParam daObj_Pumpkin_Param_c::m = { + 0.0f, + -5.0f, + 1.4f, + 100.0f, + 73.0f, + 24.0f, + 12.0f, + 24.0f, + 37.0f, + 45.0f, + 18.0f, + 16, + 0, + 20, + 20, +}; + +#if DEBUG +daObj_Pumpkin_HIO_c::daObj_Pumpkin_HIO_c() { + m = daObj_Pumpkin_Param_c::m; +} + +void daObj_Pumpkin_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + char msg_buffer[2004]; + JORReflexible::listenPropertyEvent(event); + JORFile file_handle; + int len; + switch (reinterpret_cast(event->id)) { + case 0x40000002: + if (file_handle.open(6, "すべてのファイル(*.*)\0*.*\0", NULL, NULL, NULL) != 0) { + memset(msg_buffer, 0, 2000); + len = 0; + // interesting offset + sprintf(msg_buffer + len, "%.3ff,\t// 注目オフセット\n", m.featured_offset); + len = strlen(msg_buffer); + // gravity + sprintf(msg_buffer + len, "%.3ff,\t// 重力\n", m.gravity); + len = strlen(msg_buffer); + // scale + sprintf(msg_buffer + len, "%.3ff,\t// スケ-ル\n", m.scale); + len = strlen(msg_buffer); + // real shadow size + sprintf(msg_buffer + len, "%.3ff,\t// リアル影サイズ\n", m.real_shadow_size); + len = strlen(msg_buffer); + // weight + sprintf(msg_buffer + len, "%.3ff,\t// 体重\n", m.weight); + len = strlen(msg_buffer); + // height + sprintf(msg_buffer + len, "%.3ff,\t// 高さ\n", m.height); + len = strlen(msg_buffer); + // knee-length + sprintf(msg_buffer + len, "%.3ff,\t// ひざ丈\n", m.knee_length); + len = strlen(msg_buffer); + // width + sprintf(msg_buffer + len, "%.3ff,\t// 幅\n", m.width); + len = strlen(msg_buffer); + // Emission speed + sprintf(msg_buffer + len, "%.3ff,\t// 発射速度\n", m.fire_rate); + len = strlen(msg_buffer); + // Launch Angle + sprintf(msg_buffer + len, "%.3ff,\t// 発射角度\n", m.launch_angle); + len = strlen(msg_buffer); + // Floating offset + sprintf(msg_buffer + len, "%.3ff,\t// 浮きオフセット\n", m.floating_offset); + len = strlen(msg_buffer); + // Hold on + sprintf(msg_buffer + len, "%d, \t// ふんばり\n", m.hold_on); + len = strlen(msg_buffer); + // Pull sound delay + sprintf(msg_buffer + len, "%d, \t// 引き抜き音遅延\n", m.pull_sound_delay); + len = strlen(msg_buffer); + // Growth time 1 + sprintf(msg_buffer + len, "%d, \t// 成長時間1\n", m.growth_time_1); + len = strlen(msg_buffer); + // Growth time 2 + sprintf(msg_buffer + len, "%d, \t// 成長時間2\n", m.growth_time_2); + len = strlen(msg_buffer); + // + file_handle.writeData(msg_buffer, len); + file_handle.close(); + OS_REPORT("write append success!::%6d\n", len); + } else { + OS_REPORT("write append failure!\n"); + } + break; + } +} + +void daObj_Pumpkin_HIO_c::genMessage(JORMContext* ctext) { + ctext->genSlider("注目オフセット ", &m.featured_offset, 0.0f, 1000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("重力 ", &m.gravity, -100.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("スケ-ル ", &m.scale, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("リアル影サイズ ", &m.real_shadow_size, 0.0f, 10000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("体重 ", &m.weight, 0.0f, 255.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("高さ ", &m.height, 0.0f, 1000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("ひざ丈 ", &m.knee_length, 0.0f, 1000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("幅 ", &m.width, 0.0f, 1000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("発射速度 ", &m.fire_rate, 0.0f, 1000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // fire angle: + ctext->genSlider("発射角度 ", &m.launch_angle, 0.0f, 90.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("浮きオフセット ", &m.floating_offset, -100.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // stand strong: + ctext->genSlider("ふんばり ", &m.hold_on, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("引き抜き音遅延 ", &m.pull_sound_delay, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("成長時間1 ", &m.growth_time_1, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("成長時間2 ", &m.growth_time_2, 0, 1000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + // export file: + ctext->genButton("ファイル書き出し", 0x40000002, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); +} +#endif + +/* 80CB83A4-80CB83D4 000034 0030+00 1/1 0/0 0/0 .rodata l_ccDObjData */ +const dCcD_SrcGObjInf l_ccDObjData = { + {0, // mFlags + { + {0, 0, 0}, // mObjAt + {0xD8FBFDFF, 0x1F}, // mObjTg + {0x79} // mObjCo + } // mSrcObjHitInf + }, // mObj + {0, 0, 0, 0, 0}, // mGObjAt + {10, 0, 0, 0, 0}, // mGObjTg + {0} // mGObjCo +}; + /* 80CB848C-80CB8494 000020 0008+00 2/3 0/0 0/0 .data l_bmdData */ -SECTION_DATA static u8 l_bmdData[8] = { - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, +static int l_bmdData[1][2] = { + {3, 1}, }; /* 80CB8494-80CB849C -00001 0008+00 2/4 0/0 0/0 .data l_resNameList */ -SECTION_DATA static void* l_resNameList[2] = { - (void*)&d_a_obj_pumpkin__stringBase0, - (void*)(((char*)&d_a_obj_pumpkin__stringBase0) + 0x1), +static char* l_resNameList[2] = { + "", + "pumpkin", }; /* 80CB849C-80CB84E0 000030 0044+00 1/2 0/0 0/0 .data l_ccDCyl */ static dCcD_SrcCyl l_ccDCyl = { - { - {0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x0}}, // mObj - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf + l_ccDObjData, // mObjInf { {0.0f, 0.0f, 0.0f}, // mCenter 0.0f, // mRadius @@ -201,18 +165,766 @@ static dCcD_SrcCyl l_ccDCyl = { } // mCyl }; -/* 80CB84E0-80CB84E8 000074 0008+00 1/1 0/0 0/0 .data emttrId$5110 */ -SECTION_DATA static u8 emttrId[8] = { - 0x01, 0xB8, 0x01, 0xB9, 0x01, 0xBA, 0x01, 0xBB, -}; +#if DEBUG +static daObj_Pumpkin_HIO_c l_HIO; +#else +/* 80CB85DC-80CB85E0 000014 0004+00 1/1 0/0 0/0 .bss l_HIO */ +static daObj_Pumpkin_Param_c l_HIO; +#endif + +/* 80CB578C-80CB5A04 0000EC 0278+00 1/0 0/0 0/0 .text __dt__15daObj_Pumpkin_cFv */ +daObj_Pumpkin_c::~daObj_Pumpkin_c() { + // "|%06d:%x|daObj_Pumpkin_c -> Destruct\n": + OS_REPORT("|%06d:%x|daObj_Pumpkin_c -> デストラクト\n", g_Counter.mCounter0, this); +#if DEBUG + if (mpHIO != NULL) { + mpHIO->removeHIO(); + } +#endif + + dComIfG_resDelete(&mPhaseReq, l_resNameList[l_bmdData[0][1]]); +} + +/* 80CB5A04-80CB5D74 000364 0370+00 1/1 0/0 0/0 .text create__15daObj_Pumpkin_cFv */ +int daObj_Pumpkin_c::create() { + fopAcM_SetupActor(this, daObj_Pumpkin_c); + + mType = getType(); + cPhs__Step phase = (cPhs__Step) dComIfG_resLoad(&mPhaseReq, l_resNameList[l_bmdData[0][1]]); + if (phase == cPhs_COMPLEATE_e) { + OS_REPORT("\t(%s:%d) ItemTableNo:%d, ProcType:%d<%08x> -> roomNo.%d", fopAcM_getProcNameString(this), + getType(), getItemTableNo(), getProcType(), fopAcM_GetParam(this), fopAcM_GetRoomNo(this)); + if ((daNpcT_chkEvtBit(0x1E) || daNpcT_chkEvtBit(0x92)) && isDelete()) { + OS_REPORT("===>isDelete:TRUE\n"); + return cPhs_ERROR_e; + } + + OS_REPORT("\n"); + if (!fopAcM_entrySolidHeap(this, createHeapCallBack, 0xEB0)) { + return cPhs_ERROR_e; + } + + J3DModelData* model_data = mpModel->getModelData(); + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + + fopAcM_setCullSizeBox(this, -50.0f, -50.0f, -50.0f, 50.0f, 50.0f, 50.0f); +#if DEBUG + mpHIO = &l_HIO; + // pumpkin: + mpHIO->entryHIO("かぼちゃ"); +#endif + + reset(); + mObjAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, + fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); + mStts.Init(mpHIO->m.weight, 0, this); + mCyl0.Set(l_ccDCyl); + mCyl0.SetStts(&mStts); + mCyl1.Set(l_ccDCyl); + mCyl1.SetStts(&mStts); + current.pos = home.pos; + old.pos = current.pos; + field_0xB60 = current.pos.y; + setMtx(); + } + + return phase; +} + +/* 80CB5F88-80CB6018 0008E8 0090+00 1/1 0/0 0/0 .text CreateHeap__15daObj_Pumpkin_cFv */ +int daObj_Pumpkin_c::CreateHeap() { + J3DModelData* modelData = NULL; + modelData = (J3DModelData*)dComIfG_getObjectRes(l_resNameList[l_bmdData[0][1]], l_bmdData[0][0]); + if (modelData == NULL) { + return 0; + } + + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpModel == NULL) { + return 0; + } + + return 1; +} + +/* 80CB6018-80CB604C 000978 0034+00 1/1 0/0 0/0 .text Delete__15daObj_Pumpkin_cFv */ +int daObj_Pumpkin_c::Delete() { + OS_REPORT("|%06d:%x|daObj_Pumpkin_c -> Delete\n", g_Counter.mCounter0, this); + this->~daObj_Pumpkin_c(); + return 1; +} + +/* 80CB604C-80CB7638 0009AC 15EC+00 1/1 0/0 0/0 .text Execute__15daObj_Pumpkin_cFv */ +int daObj_Pumpkin_c::Execute() { + f32 var_f29 = mpHIO->m.floating_offset; + f32 f_scale = mpHIO->m.scale; + s16 sp_0x14 = 0; + s16 sp_0x12 = 0; + mPumpkinScale = 1.0f; + if (mType == 1) { + mPumpkinScale = 1.8f; + var_f29 *= mPumpkinScale; + f_scale *= mPumpkinScale; + } + + scale.set(f_scale, f_scale, f_scale); + fopAcM_OffCarryType(this, fopAcM_CARRY(fopAcM_CARRY_CHICKEN | fopAcM_CARRY_SIDE | fopAcM_CARRY_TYPE_1)); + attention_info.flags = 0; + switch (mType) { + case 0: + attention_info.distances[fopAc_attn_CARRY_e] = 6; + break; + case 1: + attention_info.distances[fopAc_attn_CARRY_e] = 8; + break; + case 2: + attention_info.distances[fopAc_attn_CARRY_e] = 6; + break; + case 3: + attention_info.distances[fopAc_attn_CARRY_e] = 8; + break; + default: + attention_info.distances[fopAc_attn_CARRY_e] = 6; + break; + } + + mAcchCir.SetWallR(mpHIO->m.width * mPumpkinScale); + mAcchCir.SetWallH(mpHIO->m.knee_length * mPumpkinScale); + gravity = mpHIO->m.gravity * mPumpkinScale; + int sp_0x30 = 0; + if (fopAcM_checkCarryNow(this) || fopAcM_checkHawkCarryNow(this) || field_0xbb3) { + sp_0x30 = 1; + } + + if (field_0xBAE) { + int item_table_no = getItemTableNo(); + if (item_table_no >= 0 && mItemProcId == fpcM_ERROR_PROCESS_ID_e) { + mItemProcId = fopAcM_createItemFromTable(¤t.pos, item_table_no, -1, fopAcM_GetRoomNo(this), + NULL, 0, NULL, NULL, NULL, NULL); + } + + if (mItemProcId == fpcM_ERROR_PROCESS_ID_e || fopAcM_IsExecuting(mItemProcId)) { + if (mType == 0 && getProcType() != 2) { + field_0xB48 = mpHIO->m.growth_time_1; + field_0xB4C = mpHIO->m.growth_time_2; + field_0xBAF = 0; + field_0xBB0 = 0; + current.pos = home.pos; + old.pos = home.pos; + current.angle = home.angle; + shape_angle = home.angle; + scale.setall(0.0f); + } else { + fopAcM_delete(this); + } + + field_0xBAE = 0; + } + } else if (field_0xB4C) { + if (field_0xBAF) { + field_0xB68 = (mpHIO->m.growth_time_2 - field_0xB4C) / f32(mpHIO->m.growth_time_2) * 0.5f + + (mpHIO->m.growth_time_1 - field_0xB48) / f32(mpHIO->m.growth_time_1) * 0.5f; + if (cLib_calcTimer(&field_0xB4C) == 0) { + field_0xBAF = 0; + field_0xB68 = 1.0f; + } + } else { + field_0xB68 = (mpHIO->m.growth_time_1 - field_0xB48) / f32(mpHIO->m.growth_time_1) * 0.5f; + if (mCyl1.ChkTgHit() && mCyl1.GetTgHitGObj() != NULL + && mCyl1.GetTgHitGObj()->GetAtType() == AT_TYPE_LANTERN_SWING + && mCyl1.GetTgHitGObj()->GetAtMtrl() == dCcD_MTRL_UNK_6) { + // + field_0xBAF = 1; + } + } + + cLib_calcTimer(&field_0xB48); + f_scale *= field_0xB68; + scale.set(f_scale, f_scale, f_scale); + } else { + int sp_0x28 = 0; + if (field_0xBAA == 0 && mCyl1.ChkTgHit()) { + if (mCyl1.GetTgHitGObj() != NULL && mCyl1.GetTgHitGObj()->GetAtType() == AT_TYPE_BOOMERANG) { + mBoomerangMove.initOffset(¤t.pos, mCyl1.GetTgHitGObj()); + field_0xBAA = 1; + sp_0x30 = 0; + if (field_0xBA8) { + dComIfGp_particle_set(-1, dPa_RM(ID_ZI_S_PUMPKIN_LEAF_A), ¤t.pos, &shape_angle, &scale); + dComIfGp_particle_set(-1, dPa_RM(ID_ZI_S_PUMPKIN_LEAF_B), ¤t.pos, &shape_angle, &scale); + field_0xBA8 = 0; + } + } else { + sp_0x28 = 1; + } + } else if (field_0xBAD && cM3d_IsZero(speedF) == 0 && mCyl0.ChkCoHit()) { + fopAc_ac_c* actor_p = dCc_GetAc(mCyl0.GetCoHitObj()->GetAc()); + if (fopAcM_GetName(actor_p) != PROC_ALINK) { + sp_0x28 = 1; + } + } + + if (sp_0x28) { + crash(); + sp_0x30 = 0; + } else { + if (field_0xBAA) { + if (mBoomerangMove.posMove(¤t.pos, &shape_angle.y, this, 0x1C00) == 0) { + sp_0x30 = fopAcM_checkCarryNow(this) != 0; + field_0xBAA = 0; + } else if (mObjAcch.ChkWallHit()) { + sp_0x30 = 0; + crash(); + } + } + + if (sp_0x30) { + if (getProcType() == 0) { + if (fopAcM_checkCarryNow(this) && field_0xBAA == 0) { + if (field_0xB44 < mpHIO->m.hold_on + mpHIO->m.pull_sound_delay) { + ++field_0xB44; + if (mpHIO->m.hold_on + mpHIO->m.pull_sound_delay <= field_0xB44) { + fopAcM_seStart(this, Z2SE_OBJ_PUMPKIN_PULLOUT, 0); + } + + if (field_0xBA8 && mpHIO->m.hold_on <= field_0xB44) { + dComIfGp_particle_set(-1, dPa_RM(ID_ZI_S_PUMPKIN_LEAF_A), ¤t.pos, &shape_angle, &scale); + dComIfGp_particle_set(-1, dPa_RM(ID_ZI_S_PUMPKIN_LEAF_B), ¤t.pos, &shape_angle, &scale); + field_0xBA8 = 0; + } + } + } else if (field_0xBA8) { + fopAcM_seStart(this, Z2SE_OBJ_PUMPKIN_PULLOUT, 0); + dComIfGp_particle_set(-1, dPa_RM(ID_ZI_S_PUMPKIN_LEAF_A), ¤t.pos, &shape_angle, &scale); + dComIfGp_particle_set(-1, dPa_RM(ID_ZI_S_PUMPKIN_LEAF_B), ¤t.pos, &shape_angle, &scale); + field_0xB44 = mpHIO->m.hold_on + mpHIO->m.pull_sound_delay; + field_0xBA8 = 0; + } + } + + mObjAcch.ClrWallHit(); + mObjAcch.ClrGroundHit(); + mObjAcch.SetWallNone(); + mObjAcch.SetGrndNone(); + field_0xB60 = 0.0f; + mStts.SetWeight(0); + speed.setall(0.0f); + speedF = 0.0f; + field_0xB20.setall(0.0f); + field_0xB38.setall(0); + gravity = 0.0f; + field_0xBAB = 0; + field_0xBAC = 0; + field_0xBAD = 0; + field_0xBB2 = 0; + } else { + mStts.SetWeight(mpHIO->m.weight); + if (field_0xBA8 || mType == 1) { + mStts.SetWeight(0xFF); + } + + mObjAcch.ClrWallNone(); + mObjAcch.ClrGrndNone(); + if (field_0xBB1 && cM3d_IsZero(speedF) == 0) { + popup(mpHIO->m.fire_rate, mpHIO->m.launch_angle, NULL); + if (fopAcM_carryOffRevise(this)) { + speed.setall(0.0f); + } + } else { + int sp_0x20 = 0; + cXyz sp_0x4C; + s16 sp_0x10 = 0x80; + fopAcM_getWaterY(¤t.pos, &mWaterY); + if (-G_CM3D_F_INF != mWaterY && var_f29 < mWaterY - field_0xB60) { + if (current.pos.y <= mWaterY) { + if (field_0xBAC == 0) { + speedF *= 0.3f; + speed.y *= 0.5f; + field_0xBAB = 0; + field_0xBAC = 1; + if (field_0xBAD || field_0xBB2 || field_0xBB1) { + fopAcM_seStart(this, Z2SE_CM_BODYFALL_WATER_S, 0); + setWaterPrtcl(); + sp_0x20 = 1; + if ((field_0xBAD || field_0xBB2) && speed.y < 0.0f) { + field_0xB70 = 3000.0f; + } + } + + field_0xBAD = 0; + field_0xBB2 = 0; + } + + int streamPower; + if (fopAcM_getWaterStream(¤t.pos, mGndChk, &sp_0x4C, &streamPower, 0)) { + sp_0x4C.normalizeZP(); + cLib_addCalcAngleS2(¤t.angle.y, cM_atan2s(sp_0x4C.x, sp_0x4C.z), 4, 0x200); + if (sp_0x20) { + current.angle.y = cM_atan2s(sp_0x4C.x, sp_0x4C.z); + } + + sp_0x10 *= streamPower; + cLib_chaseAngleS(&field_0xB38.y, (field_0xB38.y < 0) ? -sp_0x10 : sp_0x10, 0x10); + if (field_0xBAB) { + cLib_addCalc2(&speedF, streamPower * 1.55f, 0.15f, 1.0f); + } else { + cLib_addCalc2(&speedF, streamPower * 0.75f, 0.15f, 1.0f); + } + } else { + cLib_chaseF(&speedF, 0.0f, 0.3f); + } + + if (field_0xB54 == 0 && mObjAcch.ChkWallHit()) { + if (getWallAngle(current.angle.y, &sp_0x12)) { + current.angle.y = sp_0x12; + current.angle.y += s16(cM_rndFX(2000.0f)); + } else { + current.angle.y += s16(cM_rndFX(2000.0f)); + current.angle.y -= 0x8000; + } + + field_0xB38.y = -field_0xB38.y / 2; + field_0xB54 = 10; + } + + if (field_0xBAB) { + cLib_addCalc2(¤t.pos.y, mWaterY - var_f29, 0.5f, 2.0f); + speed.y = 0.0f; + setHamonPrtcl(); + } else if (current.pos.y + var_f29 < mWaterY) { + if (speed.y < 0.0f) { + cLib_addCalc(&speed.y, 2.0f, 0.8f, 11.0f, 0.1f); + } else { + cLib_addCalc(&speed.y, 2.0f, 0.5f, 0.5f, 0.1f); + } + + field_0xB38.y = 0x100; + mObjAcch.ClrGroundHit(); + field_0xBAB = 1; + } + + gravity = 0.0f; + } + } + } + + if (field_0xBAB) { + if (mObjAcch.ChkGroundHit()) { + field_0xBAB = 0; + field_0xBAC = 0; + field_0xB38.setall(0); + speedF = 0.0f; + speed.setall(0.0f); + } + } else if (field_0xBAC == 0) { + if (field_0xBAD) { + if (0.0f <= field_0xB20.y && speed.y < 0.0f) { + field_0xB74 = -500.0f; + } + + if (mObjAcch.ChkWallHit()) { + crash(); + } else if (mObjAcch.ChkGroundHit()) { + if (-250.0f < field_0xB74) { + if (cM3d_IsZero(field_0xB74) == 0) { + setSmokePrtcl(); + } + + field_0xBAD = 0; + speedF = 0.0f; + speed.setall(0.0f); + } else { + crash(); + } + } + } else if (field_0xBB2) { + if (mObjAcch.ChkGroundHit()) { + if (-250.0f < field_0xB74) { + if (cM3d_IsZero(field_0xB74) == 0) { + setSmokePrtcl(); + } + + field_0xBB2 = 0; + speedF = 0.0f; + speed.setall(0.0f); + } else { + crash(); + } + } + } else if (field_0xBB1) { + fopAcM_seStart(this, Z2SE_OBJ_PUMPKIN_PUT, 0); + } else if (mObjAcch.ChkGroundHit() == 0) { + field_0xB74 = field_0xB60 - current.pos.y; + field_0xBB2 = 1; + } + } + + if (field_0xBB0 == 0 && field_0xBAD == 0 && field_0xBB2 == 0) { + if (mType == 1 || field_0xBA8) { + fopAcM_OnCarryType(this, fopAcM_CARRY_TYPE_1); + } else { + fopAcM_OnCarryType(this, fopAcM_CARRY_SIDE); + } + + cLib_onBit(attention_info.flags, fopAc_AttnFlag_CARRY_e); + fopAcM_OnCarryType(this, fopAcM_CARRY_CHICKEN); + } + + field_0xB20 = speed; + if (field_0xBAC) { + cLib_addCalc2(&field_0xB70, mStts.GetCCMoveP() != NULL ? 1200.0f : 900.0f, 0.05f, 100.0f); + } else { + cLib_addCalc2(&field_0xB70, 0.0f, 0.25f, 100.0f); + } + + shape_angle.x = field_0xB70 * cM_ssin(field_0xB78 * 1000); + shape_angle.z = field_0xB70 * cM_scos(field_0xB78 * 1000); + cLib_chaseAngleS(&field_0xB38.y, 0, 10); + shape_angle.y += field_0xB38.y; + ++field_0xB78; + if (field_0xBAB) { + f32 sqrt = JMAFastSqrt(mStts.GetCCMoveP()->x * mStts.GetCCMoveP()->x + + mStts.GetCCMoveP()->z * mStts.GetCCMoveP()->z); + if (1.0f < sqrt) { + field_0xB80 = cM_atan2s(mStts.GetCCMoveP()->x, mStts.GetCCMoveP()->z); + if (field_0xB58 == 0) { + if (30.0f < sqrt) { + sqrt = 30.0f; + } else if (sqrt < 0.0f) { + sqrt = 0.0f; + } + + field_0xB5C = sqrt; + field_0xB38.y = 0x200; + field_0xB58 = 10; + } + } + } else { + field_0xB5C = 0.0f; + } + + cLib_addCalc2(&field_0xB5C, 0.0f, 0.33f, 100.0f); + fopAcM_calcSpeed(this); + if (field_0xBAB) { + field_0xB2C.x = field_0xB5C * cM_ssin(field_0xB80); + field_0xB2C.z = field_0xB5C * cM_scos(field_0xB80); + field_0xB2C.y = 0.0f; + speed += field_0xB2C; + } + + fopAcM_posMove(this, mStts.GetCCMoveP()); + mObjAcch.CrrPos(dComIfG_Bgsp()); + mGndChk = mObjAcch.m_gnd; + field_0xB60 = mObjAcch.GetGroundH(); + if (field_0xBAA) { + mBoomerangMove.bgCheckAfterOffset(¤t.pos); + } + + if (-G_CM3D_F_INF != field_0xB60) { + field_0xB7A = daNpcF_getGroundAngle(&mGndChk, shape_angle.y); + setEnvTevColor(); + setRoomNo(); + } + } + } + } + + attention_info.position = current.pos; + eyePos = current.pos; + if (field_0xbb3 == 0) { + setMtx(); + } + + field_0xB7C = calcRollAngle(field_0xB7C, 0x10000); + if (field_0xBB0 == 0 && field_0xB50 == 0) { + cXyz sp_0x40 = current.pos; + sp_0x40.y += 6.0f; + if (field_0xBAD && cM3d_IsZero(speedF) == 0) { + mCyl0.SetAtType(8); + mCyl0.SetAtAtp(1); + mCyl0.SetAtSPrm(0x1F); + } else { + mCyl0.SetAtType(0); + mCyl0.SetAtSPrm(0); + } + + if (field_0xB4C == 0) { + mCyl0.SetR(mpHIO->m.width * mPumpkinScale); + mCyl0.SetH(mpHIO->m.height * mPumpkinScale); + mCyl0.SetC(current.pos); + dComIfG_Ccsp()->Set(&mCyl0); + } + + mCyl1.SetCoSPrm(0); + if (field_0xB4C) { + mCyl1.SetTgType(0x200); + mCyl1.SetTgSPrm(0x1F); + } else { + mCyl1.SetTgType(0xD8FBFDFF); + mCyl1.SetTgSPrm(0x1F); + } + + mCyl1.SetR(mpHIO->m.width * mPumpkinScale); + mCyl1.SetH(mpHIO->m.height * mPumpkinScale); + mCyl1.SetC(sp_0x40); + dComIfG_Ccsp()->Set(&mCyl1); + } + + mCyl1.ClrTgHit(); + mCyl0.ClrAtHit(); + mCyl0.ClrCoHit(); + + field_0xBB1 = sp_0x30 != 0; + cLib_calcTimer(&field_0xB50); + cLib_calcTimer(&field_0xB54); + cLib_calcTimer(&field_0xB58); + field_0xbb3 = 0; + + return 1; +} + +/* 80CB7638-80CB77DC 001F98 01A4+00 1/1 0/0 0/0 .text Draw__15daObj_Pumpkin_cFv */ +int daObj_Pumpkin_c::Draw() { + if (field_0xBB0 == 0) { + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + if (field_0xBA8 == 0) { + mpModel->getModelData()->getMaterialNodePointer(0)->getShape()->hide(); + } + + mDoExt_modelUpdateDL(mpModel); + mpModel->getModelData()->getMaterialNodePointer(0)->getShape()->show(); + fopAc_ac_c* actor_p = NULL; + fopAcM_SearchByID(daPy_getPlayerActorClass()->getGrabActorID(), &actor_p); + if (actor_p == this) { + model = mpModel; + } else if (-G_CM3D_F_INF != field_0xB60) { + cM3dGPla pla; + bool tri_pla = dComIfG_Bgsp().GetTriPla(mGndChk, &pla); + if (tri_pla) { + f32 reg_f31 = scale.x / (mpHIO->m.scale * mPumpkinScale) * 50.0f; + dComIfGd_setSimpleShadow(¤t.pos, field_0xB60, reg_f31, &pla.mNormal, 0, 1.0f, + dDlst_shadowControl_c::getSimpleTex()); + } + } + } + + return 1; +} + +/* 80CB7824-80CB7844 002184 0020+00 1/1 0/0 0/0 .text + * createHeapCallBack__15daObj_Pumpkin_cFP10fopAc_ac_c */ +int daObj_Pumpkin_c::createHeapCallBack(fopAc_ac_c* i_this) { + daObj_Pumpkin_c* a_this = static_cast(i_this); + return a_this->CreateHeap(); +} + +/* 80CB7844-80CB78C8 0021A4 0084+00 1/1 0/0 0/0 .text isDelete__15daObj_Pumpkin_cFv */ +int daObj_Pumpkin_c::isDelete() { + switch ((s32) mType) { + case 0: + return 0; + case 1: + return daNpcT_chkEvtBit(0x1E) == 0; + case 2: + return daNpcT_chkEvtBit(0x92) == 0; + case 3: + return 0; + default: + return 0; + } +} + +/* 80CB78C8-80CB7924 002228 005C+00 1/1 0/0 0/0 .text setEnvTevColor__15daObj_Pumpkin_cFv + */ +void daObj_Pumpkin_c::setEnvTevColor() { + tevStr.YukaCol = dComIfG_Bgsp().GetPolyColor(mGndChk); + tevStr.room_no = dComIfG_Bgsp().GetRoomId(mGndChk); +} + +/* 80CB7924-80CB7968 002284 0044+00 1/1 0/0 0/0 .text setRoomNo__15daObj_Pumpkin_cFv */ +void daObj_Pumpkin_c::setRoomNo() { + s8 room_id = dComIfG_Bgsp().GetRoomId(mGndChk); + fopAcM_SetRoomNo(this, room_id); + mStts.SetRoomId(room_id); +} + +/* 80CB7968-80CB79DC 0022C8 0074+00 2/2 0/0 0/0 .text reset__15daObj_Pumpkin_cFv */ +void daObj_Pumpkin_c::reset() { + int num_bytes = (u8*)&field_0xbb4 - (u8*)&field_0xB20; + memset(&field_0xB20, 0, num_bytes); + switch (getProcType()) { + case 0: + field_0xBA8 = 1; + case 1: + case 2: + break; + } + + mItemProcId = -1; +} + +/* 80CB79DC-80CB7AE4 00233C 0108+00 2/2 0/0 0/0 .text setMtx__15daObj_Pumpkin_cFv */ +void daObj_Pumpkin_c::setMtx() { + s16 angleDiff = shape_angle.y - current.angle.y; + s16 dVar5 = field_0xB7C * cM_scos(angleDiff); + s16 dVar6 = field_0xB7C * cM_ssin(angleDiff); + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::XrotM(dVar5); + mDoMtx_stack_c::ZrotM(dVar6); + mDoMtx_stack_c::scaleM(scale); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); +} + +/* 80CB7AE4-80CB7B84 002444 00A0+00 1/1 0/0 0/0 .text calcRollAngle__15daObj_Pumpkin_cFsi + */ +s16 daObj_Pumpkin_c::calcRollAngle(s16 arg0, int arg1) { + int reg_r31; + int reg_r30; + int sp_0x8 = arg1; + int reg_r29 = 0x800; + int reg_27 = 4; + if (arg0) { + reg_r31 = (u16)arg0; + reg_r30 = sp_0x8 - reg_r31; + if (reg_27 < abs(reg_r30)) { + reg_r30 /= reg_27; + if (reg_r30 > reg_r29) { + reg_r31 = reg_r31 + reg_r29; + } else if (reg_r30 < -reg_r29) { + reg_r31 = reg_r31 - reg_r29; + } else { + reg_r31 = reg_r31 + reg_r30; + } + } else { + reg_r31 = sp_0x8; + } + + return reg_r31; + } + + return 0; +} + +/* 80CB7B84-80CB7D14 0024E4 0190+00 1/1 0/0 0/0 .text getWallAngle__15daObj_Pumpkin_cFsPs + */ +int daObj_Pumpkin_c::getWallAngle(s16 arg0, s16* arg1) { + cXyz sp_0x20; + cXyz sp_0x30[2]; + cXyz sp_0x14; + s16 reg_r27 = arg0; + mDoMtx_stack_c::YrotS(arg0); + sp_0x14.set(0.0f, 0.0f, -50.0f); + mDoMtx_stack_c::multVec(&sp_0x14, &sp_0x20); + sp_0x20 += current.pos; + sp_0x14.set(5.0f, 0.0f, 200.0f); + for (int idx = 0; idx < 2; ++idx) { + mDoMtx_stack_c::multVec(&sp_0x14, &sp_0x30[idx]); + sp_0x14.x = -1.0f * sp_0x14.x; + sp_0x30[idx] += sp_0x20; + mLinChk.Set(&sp_0x20, &sp_0x30[idx], this); + if (dComIfG_Bgsp().LineCross(&mLinChk)) { + sp_0x30[idx] = mLinChk.GetCross(); + continue; + } + + return 0; + } + + sp_0x14 = sp_0x30[1] - sp_0x30[0]; + reg_r27 = cM_atan2s(sp_0x14.x, sp_0x14.z); + *arg1 = reg_r27 + 0x4000; + return 1; +} + +/* 80CB7D14-80CB7D98 002674 0084+00 1/1 0/0 0/0 .text setSmokePrtcl__15daObj_Pumpkin_cFv + */ +void daObj_Pumpkin_c::setSmokePrtcl() { + fopAcM_effSmokeSet1(&mSmokePrtcl1, &mSmokePrtcl2, ¤t.pos, NULL, 0.6f * mPumpkinScale, &tevStr, 1); + dComIfGp_particle_levelEmitterOnEventMove(mSmokePrtcl1); + dComIfGp_particle_levelEmitterOnEventMove(mSmokePrtcl2); +} + +/* 80CB7D98-80CB7E98 0026F8 0100+00 1/1 0/0 0/0 .text setWaterPrtcl__15daObj_Pumpkin_cFv + */ +void daObj_Pumpkin_c::setWaterPrtcl() { + static u16 emttrId[4] = { + ID_ZI_J_DOWNWTRA_A, ID_ZI_J_DOWNWTRA_B, ID_ZI_J_DOWNWTRA_C, ID_ZI_J_DOWNWTRA_D, + }; + + cXyz prtcl_scale(0.6f * mPumpkinScale, 0.6f * mPumpkinScale, 0.6f * mPumpkinScale); + cXyz water_pos(current.pos.x, mWaterY, current.pos.z); + for (int idx = 0; idx < 4; ++idx) { + mWaterPrtcls[idx] = dComIfGp_particle_set(mWaterPrtcls[idx], emttrId[idx], &water_pos, &tevStr, + NULL, &prtcl_scale, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_levelEmitterOnEventMove(mWaterPrtcls[idx]); + } +} + +/* 80CB7E98-80CB7EF4 0027F8 005C+00 1/1 0/0 0/0 .text setHamonPrtcl__15daObj_Pumpkin_cFv + */ +void daObj_Pumpkin_c::setHamonPrtcl() { + cXyz water_pos(current.pos.x, mWaterY, current.pos.z); + fopAcM_effHamonSet(&mHamonPrtcl, &water_pos, 0.7f * mPumpkinScale, 0.05f); +} + +/* 80CB7EF4-80CB81A4 002854 02B0+00 1/1 0/0 0/0 .text crash__15daObj_Pumpkin_cFv */ +void daObj_Pumpkin_c::crash() { + fopAc_ac_c* actor_p = NULL; + s32 reg_r30 = 0; + reg_r30 = fopAcM_SearchByName(PROC_NPC_JAGAR, &actor_p); + if (reg_r30 && actor_p != NULL) { + ((daNpc_Jagar_c*)actor_p)->crashPumpkin(this); + } + + fopAcM_seStart(this, Z2SE_OBJ_PUMPKIN_CRASH, 0); + if (field_0xBA8) { + dComIfGp_particle_set(-1, dPa_RM(ID_ZI_S_PUMPKIN_LEAF_A), ¤t.pos, &shape_angle, &scale); + dComIfGp_particle_set(-1, dPa_RM(ID_ZI_S_PUMPKIN_LEAF_B), ¤t.pos, &shape_angle, &scale); + } + + dComIfGp_particle_set(-1, dPa_RM(ID_ZI_S_PUMPKIN_A), ¤t.pos, NULL, &scale); + reset(); + mStts.ClrCcMove(); + speedF = 0.0f; + speed.setall(0.0f); + field_0xBB0 = 1; + field_0xBAE = 1; +} + +/* 80CB81A4-80CB81C4 002B04 0020+00 1/0 0/0 0/0 .text daObj_Pumpkin_Create__FPv */ +static int daObj_Pumpkin_Create(void* i_this) { + int ret = static_cast(i_this)->create(); + return ret; +} + +/* 80CB81C4-80CB81E4 002B24 0020+00 1/0 0/0 0/0 .text daObj_Pumpkin_Delete__FPv */ +static int daObj_Pumpkin_Delete(void* i_this) { + return static_cast(i_this)->Delete(); +} + +/* 80CB81E4-80CB8204 002B44 0020+00 1/0 0/0 0/0 .text daObj_Pumpkin_Execute__FPv */ +static int daObj_Pumpkin_Execute(void* i_this) { + return static_cast(i_this)->Execute(); +} + +/* 80CB8204-80CB8224 002B64 0020+00 1/0 0/0 0/0 .text daObj_Pumpkin_Draw__FPv */ +static int daObj_Pumpkin_Draw(void* i_this) { + return static_cast(i_this)->Draw(); +} + +/* 80CB8224-80CB822C 002B84 0008+00 1/0 0/0 0/0 .text daObj_Pumpkin_IsDelete__FPv */ +static int daObj_Pumpkin_IsDelete(void*) { + return 1; +} /* 80CB84E8-80CB8508 -00001 0020+00 1/0 0/0 0/0 .data daObj_Pumpkin_MethodTable */ static actor_method_class daObj_Pumpkin_MethodTable = { - (process_method_func)daObj_Pumpkin_Create__FPv, - (process_method_func)daObj_Pumpkin_Delete__FPv, - (process_method_func)daObj_Pumpkin_Execute__FPv, - (process_method_func)daObj_Pumpkin_IsDelete__FPv, - (process_method_func)daObj_Pumpkin_Draw__FPv, + (process_method_func)daObj_Pumpkin_Create, + (process_method_func)daObj_Pumpkin_Delete, + (process_method_func)daObj_Pumpkin_Execute, + (process_method_func)daObj_Pumpkin_IsDelete, + (process_method_func)daObj_Pumpkin_Draw, }; /* 80CB8508-80CB8538 -00001 0030+00 0/0 0/0 1/0 .data g_profile_OBJ_PUMPKIN */ @@ -232,540 +944,3 @@ extern actor_process_profile_definition g_profile_OBJ_PUMPKIN = { fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 80CB8538-80CB8544 0000CC 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGPla */ -SECTION_DATA extern void* __vt__8cM3dGPla[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGPlaFv, -}; - -/* 80CB8544-80CB8568 0000D8 0024+00 3/3 0/0 0/0 .data __vt__12dBgS_ObjAcch */ -SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_ObjAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_80CB8354, - (void*)NULL, - (void*)NULL, - (void*)func_80CB834C, -}; - -/* 80CB8568-80CB8574 0000FC 000C+00 3/3 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 80CB8574-80CB8580 000108 000C+00 2/2 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 80CB8580-80CB858C 000114 000C+00 2/2 0/0 0/0 .data __vt__12dBgS_AcchCir */ -SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_AcchCirFv, -}; - -/* 80CB858C-80CB8598 000120 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 80CB8598-80CB85A4 00012C 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 80CB85A4-80CB85B0 000138 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGLin */ -SECTION_DATA extern void* __vt__8cM3dGLin[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGLinFv, -}; - -/* 80CB85B0-80CB85BC 000144 000C+00 2/2 0/0 0/0 .data __vt__15daObj_Pumpkin_c */ -SECTION_DATA extern void* __vt__15daObj_Pumpkin_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__15daObj_Pumpkin_cFv, -}; - -/* 80CB578C-80CB5A04 0000EC 0278+00 1/0 0/0 0/0 .text __dt__15daObj_Pumpkin_cFv */ -daObj_Pumpkin_c::~daObj_Pumpkin_c() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CB8370-80CB83A4 000000 0034+00 5/5 0/0 0/0 .rodata m__21daObj_Pumpkin_Param_c */ -SECTION_RODATA u8 const daObj_Pumpkin_Param_c::m[52] = { - 0x00, 0x00, 0x00, 0x00, 0xC0, 0xA0, 0x00, 0x00, 0x3F, 0xB3, 0x33, 0x33, 0x42, - 0xC8, 0x00, 0x00, 0x42, 0x92, 0x00, 0x00, 0x41, 0xC0, 0x00, 0x00, 0x41, 0x40, - 0x00, 0x00, 0x41, 0xC0, 0x00, 0x00, 0x42, 0x14, 0x00, 0x00, 0x42, 0x34, 0x00, - 0x00, 0x41, 0x90, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14, -}; -COMPILER_STRIP_GATE(0x80CB8370, &daObj_Pumpkin_Param_c::m); - -/* 80CB83A4-80CB83D4 000034 0030+00 1/1 0/0 0/0 .rodata l_ccDObjData */ -SECTION_RODATA static u8 const l_ccDObjData[48] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xD8, 0xFB, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CB83A4, &l_ccDObjData); - -/* 80CB83D4-80CB83D8 000064 0004+00 0/2 0/0 0/0 .rodata @4022 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4022 = -50.0f; -COMPILER_STRIP_GATE(0x80CB83D4, &lit_4022); -#pragma pop - -/* 80CB83D8-80CB83DC 000068 0004+00 0/2 0/0 0/0 .rodata @4023 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4023 = 50.0f; -COMPILER_STRIP_GATE(0x80CB83D8, &lit_4023); -#pragma pop - -/* 80CB5A04-80CB5D74 000364 0370+00 1/1 0/0 0/0 .text create__15daObj_Pumpkin_cFv */ -void daObj_Pumpkin_c::create() { - // NONMATCHING -} - -/* 80CB5D74-80CB5DBC 0006D4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGLinFv */ -// cM3dGLin::~cM3dGLin() { -extern "C" void __dt__8cM3dGLinFv() { - // NONMATCHING -} - -/* 80CB5DBC-80CB5E04 00071C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 80CB5E04-80CB5E4C 000764 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80CB5E4C-80CB5EBC 0007AC 0070+00 1/0 0/0 0/0 .text __dt__12dBgS_AcchCirFv */ -// dBgS_AcchCir::~dBgS_AcchCir() { -extern "C" void __dt__12dBgS_AcchCirFv() { - // NONMATCHING -} - -/* 80CB5EBC-80CB5F18 00081C 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 80CB5F18-80CB5F88 000878 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* 80CB5F88-80CB6018 0008E8 0090+00 1/1 0/0 0/0 .text CreateHeap__15daObj_Pumpkin_cFv */ -void daObj_Pumpkin_c::CreateHeap() { - // NONMATCHING -} - -/* 80CB6018-80CB604C 000978 0034+00 1/1 0/0 0/0 .text Delete__15daObj_Pumpkin_cFv */ -void daObj_Pumpkin_c::Delete() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CB83DC-80CB83E0 00006C 0004+00 1/4 0/0 0/0 .rodata @4860 */ -SECTION_RODATA static f32 const lit_4860 = 1.0f; -COMPILER_STRIP_GATE(0x80CB83DC, &lit_4860); - -/* 80CB83E0-80CB83E4 000070 0004+00 0/1 0/0 0/0 .rodata @4861 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4861 = 9.0f / 5.0f; -COMPILER_STRIP_GATE(0x80CB83E0, &lit_4861); -#pragma pop - -/* 80CB83E4-80CB83E8 000074 0004+00 0/3 0/0 0/0 .rodata @4862 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4862[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80CB83E4, &lit_4862); -#pragma pop - -/* 80CB83E8-80CB83EC 000078 0004+00 0/1 0/0 0/0 .rodata @4863 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4863 = 0.5f; -COMPILER_STRIP_GATE(0x80CB83E8, &lit_4863); -#pragma pop - -/* 80CB83EC-80CB83F0 00007C 0004+00 0/3 0/0 0/0 .rodata @4864 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4864 = -1.0f; -COMPILER_STRIP_GATE(0x80CB83EC, &lit_4864); -#pragma pop - -/* 80CB83F0-80CB83F4 000080 0004+00 0/1 0/0 0/0 .rodata @4865 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4865 = 0x43360B61; -COMPILER_STRIP_GATE(0x80CB83F0, &lit_4865); -#pragma pop - -/* 80CB83F4-80CB83F8 000084 0004+00 0/2 0/0 0/0 .rodata @4866 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4866 = -G_CM3D_F_INF; -COMPILER_STRIP_GATE(0x80CB83F4, &lit_4866); -#pragma pop - -/* 80CB83F8-80CB83FC 000088 0004+00 0/1 0/0 0/0 .rodata @4867 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4867 = 3.0f / 10.0f; -COMPILER_STRIP_GATE(0x80CB83F8, &lit_4867); -#pragma pop - -/* 80CB83FC-80CB8400 00008C 0004+00 0/1 0/0 0/0 .rodata @4868 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4868 = 3000.0f; -COMPILER_STRIP_GATE(0x80CB83FC, &lit_4868); -#pragma pop - -/* 80CB8400-80CB8404 000090 0004+00 0/1 0/0 0/0 .rodata @4869 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4869 = 31.0f / 20.0f; -COMPILER_STRIP_GATE(0x80CB8400, &lit_4869); -#pragma pop - -/* 80CB8404-80CB8408 000094 0004+00 0/1 0/0 0/0 .rodata @4870 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4870 = 3.0f / 20.0f; -COMPILER_STRIP_GATE(0x80CB8404, &lit_4870); -#pragma pop - -/* 80CB8408-80CB840C 000098 0004+00 0/1 0/0 0/0 .rodata @4871 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4871 = 0.75f; -COMPILER_STRIP_GATE(0x80CB8408, &lit_4871); -#pragma pop - -/* 80CB840C-80CB8410 00009C 0004+00 0/1 0/0 0/0 .rodata @4872 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4872 = 2000.0f; -COMPILER_STRIP_GATE(0x80CB840C, &lit_4872); -#pragma pop - -/* 80CB8410-80CB8414 0000A0 0004+00 0/1 0/0 0/0 .rodata @4873 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4873 = 2.0f; -COMPILER_STRIP_GATE(0x80CB8410, &lit_4873); -#pragma pop - -/* 80CB8414-80CB8418 0000A4 0004+00 0/1 0/0 0/0 .rodata @4874 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4874 = 4.0f / 5.0f; -COMPILER_STRIP_GATE(0x80CB8414, &lit_4874); -#pragma pop - -/* 80CB8418-80CB841C 0000A8 0004+00 0/1 0/0 0/0 .rodata @4875 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4875 = 11.0f; -COMPILER_STRIP_GATE(0x80CB8418, &lit_4875); -#pragma pop - -/* 80CB841C-80CB8420 0000AC 0004+00 0/1 0/0 0/0 .rodata @4876 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4876 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80CB841C, &lit_4876); -#pragma pop - -/* 80CB8420-80CB8424 0000B0 0004+00 0/1 0/0 0/0 .rodata @4877 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4877 = -500.0f; -COMPILER_STRIP_GATE(0x80CB8420, &lit_4877); -#pragma pop - -/* 80CB8424-80CB8428 0000B4 0004+00 0/1 0/0 0/0 .rodata @4878 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4878 = -250.0f; -COMPILER_STRIP_GATE(0x80CB8424, &lit_4878); -#pragma pop - -/* 80CB8428-80CB842C 0000B8 0004+00 0/1 0/0 0/0 .rodata @4879 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4879 = 1200.0f; -COMPILER_STRIP_GATE(0x80CB8428, &lit_4879); -#pragma pop - -/* 80CB842C-80CB8430 0000BC 0004+00 0/1 0/0 0/0 .rodata @4880 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4880 = 900.0f; -COMPILER_STRIP_GATE(0x80CB842C, &lit_4880); -#pragma pop - -/* 80CB8430-80CB8434 0000C0 0004+00 1/2 0/0 0/0 .rodata @4881 */ -SECTION_RODATA static f32 const lit_4881 = 1.0f / 20.0f; -COMPILER_STRIP_GATE(0x80CB8430, &lit_4881); - -/* 80CB8434-80CB8438 0000C4 0004+00 0/1 0/0 0/0 .rodata @4882 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4882 = 100.0f; -COMPILER_STRIP_GATE(0x80CB8434, &lit_4882); -#pragma pop - -/* 80CB8438-80CB843C 0000C8 0004+00 0/1 0/0 0/0 .rodata @4883 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4883 = 0.25f; -COMPILER_STRIP_GATE(0x80CB8438, &lit_4883); -#pragma pop - -/* 80CB843C-80CB8440 0000CC 0004+00 0/1 0/0 0/0 .rodata @4884 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4884 = 30.0f; -COMPILER_STRIP_GATE(0x80CB843C, &lit_4884); -#pragma pop - -/* 80CB8440-80CB8444 0000D0 0004+00 0/1 0/0 0/0 .rodata @4885 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4885 = 33.0f / 100.0f; -COMPILER_STRIP_GATE(0x80CB8440, &lit_4885); -#pragma pop - -/* 80CB8444-80CB8448 0000D4 0004+00 0/1 0/0 0/0 .rodata @4886 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4886 = 6.0f; -COMPILER_STRIP_GATE(0x80CB8444, &lit_4886); -#pragma pop - -/* 80CB8448-80CB8450 0000D8 0008+00 1/2 0/0 0/0 .rodata @4888 */ -SECTION_RODATA static u8 const lit_4888[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CB8448, &lit_4888); - -/* 80CB604C-80CB7638 0009AC 15EC+00 1/1 0/0 0/0 .text Execute__15daObj_Pumpkin_cFv */ -void daObj_Pumpkin_c::Execute() { - // NONMATCHING -} - -/* 80CB7638-80CB77DC 001F98 01A4+00 1/1 0/0 0/0 .text Draw__15daObj_Pumpkin_cFv */ -void daObj_Pumpkin_c::Draw() { - // NONMATCHING -} - -/* 80CB77DC-80CB7824 00213C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */ -// cM3dGPla::~cM3dGPla() { -extern "C" void __dt__8cM3dGPlaFv() { - // NONMATCHING -} - -/* 80CB7824-80CB7844 002184 0020+00 1/1 0/0 0/0 .text - * createHeapCallBack__15daObj_Pumpkin_cFP10fopAc_ac_c */ -void daObj_Pumpkin_c::createHeapCallBack(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80CB7844-80CB78C8 0021A4 0084+00 1/1 0/0 0/0 .text isDelete__15daObj_Pumpkin_cFv */ -void daObj_Pumpkin_c::isDelete() { - // NONMATCHING -} - -/* 80CB78C8-80CB7924 002228 005C+00 1/1 0/0 0/0 .text setEnvTevColor__15daObj_Pumpkin_cFv - */ -void daObj_Pumpkin_c::setEnvTevColor() { - // NONMATCHING -} - -/* 80CB7924-80CB7968 002284 0044+00 1/1 0/0 0/0 .text setRoomNo__15daObj_Pumpkin_cFv */ -void daObj_Pumpkin_c::setRoomNo() { - // NONMATCHING -} - -/* 80CB7968-80CB79DC 0022C8 0074+00 2/2 0/0 0/0 .text reset__15daObj_Pumpkin_cFv */ -void daObj_Pumpkin_c::reset() { - // NONMATCHING -} - -/* 80CB79DC-80CB7AE4 00233C 0108+00 2/2 0/0 0/0 .text setMtx__15daObj_Pumpkin_cFv */ -void daObj_Pumpkin_c::setMtx() { - // NONMATCHING -} - -/* 80CB7AE4-80CB7B84 002444 00A0+00 1/1 0/0 0/0 .text calcRollAngle__15daObj_Pumpkin_cFsi - */ -void daObj_Pumpkin_c::calcRollAngle(s16 param_0, int param_1) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CB8450-80CB8454 0000E0 0004+00 0/1 0/0 0/0 .rodata @5089 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5089 = 5.0f; -COMPILER_STRIP_GATE(0x80CB8450, &lit_5089); -#pragma pop - -/* 80CB8454-80CB8458 0000E4 0004+00 0/1 0/0 0/0 .rodata @5090 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5090 = 200.0f; -COMPILER_STRIP_GATE(0x80CB8454, &lit_5090); -#pragma pop - -/* 80CB7B84-80CB7D14 0024E4 0190+00 1/1 0/0 0/0 .text getWallAngle__15daObj_Pumpkin_cFsPs - */ -void daObj_Pumpkin_c::getWallAngle(s16 param_0, s16* param_1) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CB8458-80CB845C 0000E8 0004+00 2/2 0/0 0/0 .rodata @5106 */ -SECTION_RODATA static f32 const lit_5106 = 3.0f / 5.0f; -COMPILER_STRIP_GATE(0x80CB8458, &lit_5106); - -/* 80CB7D14-80CB7D98 002674 0084+00 1/1 0/0 0/0 .text setSmokePrtcl__15daObj_Pumpkin_cFv - */ -void daObj_Pumpkin_c::setSmokePrtcl() { - // NONMATCHING -} - -/* 80CB7D98-80CB7E98 0026F8 0100+00 1/1 0/0 0/0 .text setWaterPrtcl__15daObj_Pumpkin_cFv - */ -void daObj_Pumpkin_c::setWaterPrtcl() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CB845C-80CB8460 0000EC 0004+00 1/1 0/0 0/0 .rodata @5155 */ -SECTION_RODATA static f32 const lit_5155 = 7.0f / 10.0f; -COMPILER_STRIP_GATE(0x80CB845C, &lit_5155); - -/* 80CB7E98-80CB7EF4 0027F8 005C+00 1/1 0/0 0/0 .text setHamonPrtcl__15daObj_Pumpkin_cFv - */ -void daObj_Pumpkin_c::setHamonPrtcl() { - // NONMATCHING -} - -/* 80CB7EF4-80CB81A4 002854 02B0+00 1/1 0/0 0/0 .text crash__15daObj_Pumpkin_cFv */ -void daObj_Pumpkin_c::crash() { - // NONMATCHING -} - -/* 80CB81A4-80CB81C4 002B04 0020+00 1/0 0/0 0/0 .text daObj_Pumpkin_Create__FPv */ -static void daObj_Pumpkin_Create(void* param_0) { - // NONMATCHING -} - -/* 80CB81C4-80CB81E4 002B24 0020+00 1/0 0/0 0/0 .text daObj_Pumpkin_Delete__FPv */ -static void daObj_Pumpkin_Delete(void* param_0) { - // NONMATCHING -} - -/* 80CB81E4-80CB8204 002B44 0020+00 1/0 0/0 0/0 .text daObj_Pumpkin_Execute__FPv */ -static void daObj_Pumpkin_Execute(void* param_0) { - // NONMATCHING -} - -/* 80CB8204-80CB8224 002B64 0020+00 1/0 0/0 0/0 .text daObj_Pumpkin_Draw__FPv */ -static void daObj_Pumpkin_Draw(void* param_0) { - // NONMATCHING -} - -/* 80CB8224-80CB822C 002B84 0008+00 1/0 0/0 0/0 .text daObj_Pumpkin_IsDelete__FPv */ -static bool daObj_Pumpkin_IsDelete(void* param_0) { - return true; -} - -/* 80CB822C-80CB8274 002B8C 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 80CB8274-80CB8290 002BD4 001C+00 1/1 0/0 0/0 .text cLib_calcTimer__FPi */ -extern "C" void func_80CB8274(void* _this, int* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CB85BC-80CB85C8 000150 000C+00 2/2 0/0 0/0 .data __vt__21daObj_Pumpkin_Param_c */ -SECTION_DATA extern void* __vt__21daObj_Pumpkin_Param_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__21daObj_Pumpkin_Param_cFv, -}; - -/* 80CB85D0-80CB85DC 000008 000C+00 1/1 0/0 0/0 .bss @3860 */ -static u8 lit_3860[12]; - -/* 80CB85DC-80CB85E0 000014 0004+00 1/1 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[4]; - -/* 80CB8290-80CB8304 002BF0 0074+00 0/0 1/0 0/0 .text __sinit_d_a_obj_pumpkin_cpp */ -void __sinit_d_a_obj_pumpkin_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80CB8290, __sinit_d_a_obj_pumpkin_cpp); -#pragma pop - -/* 80CB8304-80CB834C 002C64 0048+00 2/1 0/0 0/0 .text __dt__21daObj_Pumpkin_Param_cFv */ -daObj_Pumpkin_Param_c::~daObj_Pumpkin_Param_c() { - // NONMATCHING -} - -/* 80CB834C-80CB8354 002CAC 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_80CB834C() { - // NONMATCHING -} - -/* 80CB8354-80CB835C 002CB4 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_80CB8354() { - // NONMATCHING -} - -/* 80CB8460-80CB8460 0000F0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */