diff --git a/config/GZ2E01/rels/d_a_obj_sakuita/symbols.txt b/config/GZ2E01/rels/d_a_obj_sakuita/symbols.txt index e1ded19d59f..a95c5ccb0fd 100644 --- a/config/GZ2E01/rels/d_a_obj_sakuita/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_sakuita/symbols.txt @@ -6,13 +6,13 @@ initBaseMtx__14daObjSakuita_cFv = .text:0x00000178; // type:function size:0x20 s setBaseMtx__14daObjSakuita_cFv = .text:0x00000198; // type:function size:0x84 scope:global setPlatePos__14daObjSakuita_cFv = .text:0x0000021C; // type:function size:0x1FC scope:global calcAngle__14daObjSakuita_cFv = .text:0x00000418; // type:function size:0xC4 scope:global -createSolidHeap__FP10fopAc_ac_c = .text:0x000004DC; // type:function size:0x78 scope:global -daObjSakuita_Draw__FP14daObjSakuita_c = .text:0x00000554; // type:function size:0x40 scope:global -daObjSakuita_Execute__FP14daObjSakuita_c = .text:0x00000594; // type:function size:0x58 scope:global -daObjSakuita_IsDelete__FP14daObjSakuita_c = .text:0x000005EC; // type:function size:0x8 scope:global -daObjSakuita_Delete__FP14daObjSakuita_c = .text:0x000005F4; // type:function size:0x28 scope:global +createSolidHeap__FP10fopAc_ac_c = .text:0x000004DC; // type:function size:0x78 scope:local +daObjSakuita_Draw__FP14daObjSakuita_c = .text:0x00000554; // type:function size:0x40 scope:local +daObjSakuita_Execute__FP14daObjSakuita_c = .text:0x00000594; // type:function size:0x58 scope:local +daObjSakuita_IsDelete__FP14daObjSakuita_c = .text:0x000005EC; // type:function size:0x8 scope:local +daObjSakuita_Delete__FP14daObjSakuita_c = .text:0x000005F4; // type:function size:0x28 scope:local __dt__14daObjSakuita_cFv = .text:0x0000061C; // type:function size:0x1A4 scope:global -daObjSakuita_Create__FP10fopAc_ac_c = .text:0x000007C0; // type:function size:0x138 scope:global +daObjSakuita_Create__FP10fopAc_ac_c = .text:0x000007C0; // type:function size:0x138 scope:local __dt__8cM3dGCylFv = .text:0x000008F8; // type:function size:0x48 scope:global __dt__8cM3dGAabFv = .text:0x00000940; // type:function size:0x48 scope:global __dt__10dCcD_GSttsFv = .text:0x00000988; // type:function size:0x5C scope:global @@ -34,8 +34,8 @@ M_attr__14daObjSakuita_c = .rodata:0x00000000; // type:object size:0x2C scope:gl @3764 = .rodata:0x00000054; // type:object size:0x4 scope:local @3781 = .rodata:0x00000058; // type:object size:0x8 scope:local align:8 data:double @stringBase0 = .rodata:0x00000060; // type:object size:0x18 scope:local data:string_table -l_arcName = .data:0x00000000; // type:object size:0x4 scope:global -l_daObjSakuita_Method = .data:0x00000004; // type:object size:0x20 scope:global +l_arcName = .data:0x00000000; // type:object size:0x4 scope:local +l_daObjSakuita_Method = .data:0x00000004; // type:object size:0x20 scope:local g_profile_Obj_Sakuita = .data:0x00000024; // type:object size:0x30 scope:global __vt__10cCcD_GStts = .data:0x00000054; // type:object size:0xC scope:global __vt__10dCcD_GStts = .data:0x00000060; // type:object size:0xC scope:global diff --git a/configure.py b/configure.py index 868b75dd910..26f7337fbc2 100755 --- a/configure.py +++ b/configure.py @@ -2074,7 +2074,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_obj_rstair"), ActorRel(NonMatching, "d_a_obj_rw"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_saidan"), - ActorRel(NonMatching, "d_a_obj_sakuita"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_sakuita"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_sakuita_rope"), ActorRel(NonMatching, "d_a_obj_scannon"), ActorRel(NonMatching, "d_a_obj_scannon_crs"), diff --git a/include/d/actor/d_a_obj_sakuita.h b/include/d/actor/d_a_obj_sakuita.h index 2b1913de3ee..6ae3b7de9c5 100644 --- a/include/d/actor/d_a_obj_sakuita.h +++ b/include/d/actor/d_a_obj_sakuita.h @@ -1,8 +1,24 @@ #ifndef D_A_OBJ_SAKUITA_H #define D_A_OBJ_SAKUITA_H +#include "d/d_cc_d.h" #include "f_op/f_op_actor_mng.h" +struct daObjSakuita_Attr_c { + /* 0x00 */ f32 mGravity; + /* 0x04 */ f32 mCylR; + /* 0x08 */ f32 mCylH; + /* 0x0C */ f32 mOffset; + /* 0x10 */ f32 mWindRate; + /* 0x14 */ f32 mSpeedRate; + /* 0x18 */ f32 mHangingPosition; + /* 0x1C */ f32 mWindShake; + /* 0x20 */ f32 mYVibration; + /* 0x24 */ f32 mYConvergence; + /* 0x28 */ s16 mYPeriod; + /* 0x2C */ u8 mBoardWeight; +}; + /** * @ingroup actors-objects * @class daObjSakuita_c @@ -20,10 +36,28 @@ public: /* 80CC4A98 */ void calcAngle(); /* 80CC4C9C */ ~daObjSakuita_c(); - static u8 const M_attr[44]; + inline int createHeap(); + inline int draw(); + inline int execute(); + inline int create(); + + const daObjSakuita_Attr_c& attr() const { return M_attr; } + + static daObjSakuita_Attr_c const M_attr; private: - /* 0x568 */ u8 field_0x568[0x750 - 0x568]; + /* 0x568 */ J3DModel* mModel; + /* 0x56C */ request_of_phase_process_class mPhase; + /* 0x574 */ Mtx mMtx; + /* 0x5A4 */ dCcD_Stts mStts; + /* 0x5A4 */ dCcD_Cyl mCyl; + /* 0x71C */ cXyz field_0x71c; + /* 0x728 */ cXyz field_0x728; + /* 0x734 */ cXyz field_0x734; + /* 0x740 */ f32 field_0x740; + /* 0x744 */ csXyz field_0x744; + /* 0x74A */ s16 field_0x74a; + /* 0x74C */ u8 field_0x74c; }; STATIC_ASSERT(sizeof(daObjSakuita_c) == 0x750); diff --git a/src/d/actor/d_a_obj_sakuita.cpp b/src/d/actor/d_a_obj_sakuita.cpp index 79502a52a2c..b0802c51287 100644 --- a/src/d/actor/d_a_obj_sakuita.cpp +++ b/src/d/actor/d_a_obj_sakuita.cpp @@ -4,243 +4,235 @@ */ #include "d/actor/d_a_obj_sakuita.h" +#include "d/d_a_obj.h" +#include "d/d_com_inf_game.h" #include "dol2asm.h" +#ifdef DEBUG +class daObjSakuita_Hio_c : public JORReflexible { +public: + void genMessage(JORMContext* ctx); + void ct(); + void dt(); -// -// Forward References: -// - -extern "C" void create_init__14daObjSakuita_cFv(); -extern "C" void initBaseMtx__14daObjSakuita_cFv(); -extern "C" void setBaseMtx__14daObjSakuita_cFv(); -extern "C" void setPlatePos__14daObjSakuita_cFv(); -extern "C" void calcAngle__14daObjSakuita_cFv(); -extern "C" static void createSolidHeap__FP10fopAc_ac_c(); -extern "C" static void daObjSakuita_Draw__FP14daObjSakuita_c(); -extern "C" static void daObjSakuita_Execute__FP14daObjSakuita_c(); -extern "C" static bool daObjSakuita_IsDelete__FP14daObjSakuita_c(); -extern "C" static void daObjSakuita_Delete__FP14daObjSakuita_c(); -extern "C" void __dt__14daObjSakuita_cFv(); -extern "C" static void daObjSakuita_Create__FP10fopAc_ac_c(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" u8 const M_attr__14daObjSakuita_c[44]; -extern "C" extern char const* const d_a_obj_sakuita__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void mDoMtx_ZrotM__FPA4_fs(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -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_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void addSimpleModel__14dComIfG_play_cFP12J3DModelDataiUc(); -extern "C" void removeSimpleModel__14dComIfG_play_cFP12J3DModelDatai(); -extern "C" void entrySimpleModel__14dComIfG_play_cFP8J3DModeli(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void getRes__14dRes_control_cFPCcPCcP11dRes_info_ci(); -extern "C" void dKyw_get_AllWind_vec__FP4cXyzP4cXyzPf(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void __pl__4cXyzCFRC3Vec(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void __ml__4cXyzCFf(); -extern "C" void normalizeZP__4cXyzFv(); -extern "C" void cM_atan2s__Fff(); -extern "C" void cM_rnd__Fv(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void __dl__FPv(); -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" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 sincosTable___5JMath[65536]; - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80CC50B4-80CC50E0 000000 002C+00 3/3 0/0 0/0 .rodata M_attr__14daObjSakuita_c */ -SECTION_RODATA u8 const daObjSakuita_c::M_attr[44] = { - 0x41, 0xA0, 0x00, 0x00, 0x41, 0x40, 0x00, 0x00, 0x42, 0x8C, 0x00, 0x00, 0xC2, 0x48, 0x00, - 0x00, 0x3F, 0x4C, 0xCC, 0xCD, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x44, 0x61, - 0x00, 0x00, 0x46, 0x9C, 0x40, 0x00, 0x42, 0xC8, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, + /* 0x04 */ int field_0x04; + /* 0x08 */ daObjSakuita_Attr_c mAttr; }; -COMPILER_STRIP_GATE(0x80CC50B4, &daObjSakuita_c::M_attr); -/* 80CC50E0-80CC50E4 00002C 0004+00 0/1 0/0 0/0 .rodata @3658 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3658 = -30.0f; -COMPILER_STRIP_GATE(0x80CC50E0, &lit_3658); -#pragma pop +void daObjSakuita_Hio_c::ct() { + if (field_0x04++ == 0) { + daObj::HioVarious_c::init(this, "カラカラ板"); + } +} -/* 80CC50E4-80CC50E8 000030 0004+00 0/1 0/0 0/0 .rodata @3659 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3659 = -90.0f; -COMPILER_STRIP_GATE(0x80CC50E4, &lit_3659); -#pragma pop +void daObjSakuita_Hio_c::genMessage(JORMContext* ctx) { + ctx->genLabel("§ カラカラ板パラメータ設定 §\n", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("重力", &mAttr.mGravity, 0.0f, 200.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("円柱半径", &mAttr.mCylR, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("円柱高さ", &mAttr.mCylH, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("オフセット", &mAttr.mOffset, -300.0f, 0.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + ctx->genSlider("板の重さ", &mAttr.mBoardWeight, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("吊り下げ位置", &mAttr.mHangingPosition, -50.0f, 0.0f, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); + ctx->genSlider("windRate", &mAttr.mWindRate, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("speedRate", &mAttr.mSpeedRate, 0.0f, 5.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + ctx->genSlider("風震動", &mAttr.mWindShake, 0.0f, 30000.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + ctx->genSlider("Y震動", &mAttr.mYVibration, 0.0f, 30000.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + ctx->genSlider("Y収束", &mAttr.mYConvergence, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + ctx->genSlider("Y周期", &mAttr.mYPeriod, -0x4000, 0x3fff, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); +} -/* 80CC50E8-80CC50EC 000034 0004+00 0/1 0/0 0/0 .rodata @3660 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3660 = -10.0f; -COMPILER_STRIP_GATE(0x80CC50E8, &lit_3660); -#pragma pop +void daObjSakuita_Hio_c::dt() { + if (--field_0x04 == 0) { + daObj::HioVarious_c::clean(this); + } +} -/* 80CC50EC-80CC50F0 000038 0004+00 0/1 0/0 0/0 .rodata @3661 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3661 = 30.0f; -COMPILER_STRIP_GATE(0x80CC50EC, &lit_3661); -#pragma pop +static daObjSakuita_Hio_c M_hio; +#endif -/* 80CC50F0-80CC50F4 00003C 0004+00 0/1 0/0 0/0 .rodata @3662 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3662 = 20.0f; -COMPILER_STRIP_GATE(0x80CC50F0, &lit_3662); -#pragma pop - -/* 80CC50F4-80CC50F8 000040 0004+00 0/1 0/0 0/0 .rodata @3663 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3663 = 10.0f; -COMPILER_STRIP_GATE(0x80CC50F4, &lit_3663); -#pragma pop - -/* 80CC5114-80CC5114 000060 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80CC5114 = "A_Sakuita"; -SECTION_DEAD static char const* const stringBase_80CC511E = "A_Sakuita.bmd"; -#pragma pop +/* 80CC50B4-80CC50E0 000000 002C+00 3/3 0/0 0/0 .rodata M_attr__14daObjSakuita_c */ +daObjSakuita_Attr_c const daObjSakuita_c::M_attr = { + 20.0f, 12.0f, 70.0f, -50.0f, 0.8f, 0.5f, -6.0f, 900.0f, 20000.0f, 100.0f, 0x1400, 0x14, +}; /* 80CC512C-80CC5130 -00001 0004+00 4/4 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_obj_sakuita__stringBase0; +static char* l_arcName = "A_Sakuita"; /* 80CC46F8-80CC47F8 000078 0100+00 1/1 0/0 0/0 .text create_init__14daObjSakuita_cFv */ void daObjSakuita_c::create_init() { - // NONMATCHING + fopAcM_setCullSizeBox(this, -30.0f, -90.0f, -10.0f, 30.0f, 20.0f, 10.0f); + gravity = attr().mGravity; + field_0x71c.set(current.pos); + field_0x71c.y += attr().mOffset; + field_0x728 = field_0x71c; + initBaseMtx(); + J3DModelData* modelData = (J3DModelData*) dComIfG_getObjectRes(l_arcName, "A_Sakuita.bmd"); + JUT_ASSERT(210, modelData != 0); + if (dComIfGp_addSimpleModel(modelData, fopAcM_GetRoomNo(this), 0) == -1) { + OS_REPORT("\x1B[43;30mカラカラ板:シンプルモデル登録失敗しました。\n\x1B[m"); + } + field_0x74c = 1; + + #ifdef DEBUG + M_hio.ct(); + #endif } /* 80CC47F8-80CC4818 000178 0020+00 1/1 0/0 0/0 .text initBaseMtx__14daObjSakuita_cFv */ void daObjSakuita_c::initBaseMtx() { - // NONMATCHING + setBaseMtx(); } /* 80CC4818-80CC489C 000198 0084+00 2/2 0/0 0/0 .text setBaseMtx__14daObjSakuita_cFv */ void daObjSakuita_c::setBaseMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZrotM(field_0x744.z); + mDoMtx_stack_c::XrotM(field_0x744.x); + mDoMtx_stack_c::YrotM(field_0x744.y); + mModel->setBaseTRMtx(mDoMtx_stack_c::get()); + cMtx_copy(mDoMtx_stack_c::get(), mMtx); } -/* ############################################################################################## */ -/* 80CC50F8-80CC50FC 000044 0004+00 0/0 0/0 0/0 .rodata @3704 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3704 = 0.5f; -COMPILER_STRIP_GATE(0x80CC50F8, &lit_3704); -#pragma pop - -/* 80CC50FC-80CC5100 000048 0004+00 0/1 0/0 0/0 .rodata @3761 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3761 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80CC50FC, &lit_3761); -#pragma pop - -/* 80CC5100-80CC5104 00004C 0004+00 0/1 0/0 0/0 .rodata @3762 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3762[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80CC5100, &lit_3762); -#pragma pop - -/* 80CC5104-80CC5108 000050 0004+00 0/1 0/0 0/0 .rodata @3763 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3763 = 2.0f / 5.0f; -COMPILER_STRIP_GATE(0x80CC5104, &lit_3763); -#pragma pop - -/* 80CC5108-80CC510C 000054 0004+00 0/1 0/0 0/0 .rodata @3764 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3764 = 8192.0f; -COMPILER_STRIP_GATE(0x80CC5108, &lit_3764); -#pragma pop +f32 dummyLiteral() { return 0.5f; } /* 80CC489C-80CC4A98 00021C 01FC+00 1/1 0/0 0/0 .text setPlatePos__14daObjSakuita_cFv */ void daObjSakuita_c::setPlatePos() { - // NONMATCHING -} + cXyz cStack_24; + cXyz cStack_30; + f32 local_88; + dKyw_get_AllWind_vec(¤t.pos, &cStack_30, &local_88); + if (cM_rnd() < 0.1f) { + cStack_30 *= (local_88 * attr().mOffset) * attr().mWindRate; + } else { + cStack_30 *= 0.0f; + } -/* ############################################################################################## */ -/* 80CC510C-80CC5114 000058 0008+00 1/1 0/0 0/0 .rodata @3781 */ -SECTION_RODATA static u8 const lit_3781[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CC510C, &lit_3781); + cStack_24 = current.pos - field_0x71c; + cStack_24.y += gravity; + field_0x74a += attr().mYPeriod; + if (cLib_chaseF(&field_0x740, 0.0f, attr().mYConvergence) != 0) { + field_0x74a = 0; + } + cStack_24 += field_0x734; + if (cM_rnd() < 0.4f) { + cStack_24 += cStack_30; + if (field_0x740 < 8192.0f) { + field_0x740 += local_88 * attr().mWindShake; + } + } + cStack_24.normalizeZP(); + field_0x71c = current.pos + (cStack_24 * attr().mOffset); + field_0x734 = (field_0x734 + (field_0x728 - field_0x71c)) * attr().mSpeedRate; + field_0x728 = field_0x71c; +} /* 80CC4A98-80CC4B5C 000418 00C4+00 1/1 0/0 0/0 .text calcAngle__14daObjSakuita_cFv */ void daObjSakuita_c::calcAngle() { - // NONMATCHING + cXyz local_28 = current.pos - field_0x71c; + field_0x744.x = cM_atan2s(local_28.z, local_28.y); + field_0x744.y = shape_angle.y + (field_0x740 * cM_scos(field_0x74a)); + field_0x744.z = -cM_atan2s(local_28.x, local_28.y); +} + +inline int daObjSakuita_c::createHeap() { + J3DModelData* modelData = (J3DModelData*) dComIfG_getObjectRes(l_arcName, "A_Sakuita.bmd"); + JUT_ASSERT(567, modelData != 0); + mModel = mDoExt_J3DModel__create(modelData, 0x20000, 0x11000084); + return mModel != NULL ? 1 : 0; } /* 80CC4B5C-80CC4BD4 0004DC 0078+00 1/1 0/0 0/0 .text createSolidHeap__FP10fopAc_ac_c */ -static void createSolidHeap(fopAc_ac_c* param_0) { - // NONMATCHING +static int createSolidHeap(fopAc_ac_c* i_actor) { + return static_cast(i_actor)->createHeap(); +} + +inline int daObjSakuita_c::draw() { + dComIfGp_entrySimpleModel(mModel, fopAcM_GetRoomNo(this)); + return 1; } /* 80CC4BD4-80CC4C14 000554 0040+00 1/0 0/0 0/0 .text daObjSakuita_Draw__FP14daObjSakuita_c */ -static void daObjSakuita_Draw(daObjSakuita_c* param_0) { - // NONMATCHING +static int daObjSakuita_Draw(daObjSakuita_c* i_this) { + return i_this->draw(); +} + +inline int daObjSakuita_c::execute() { + #ifdef DEBUG + gravity = attr().mGravity; + #endif + current.pos.y += attr().mHangingPosition; + setPlatePos(); + calcAngle(); + setBaseMtx(); + return 1; } /* 80CC4C14-80CC4C6C 000594 0058+00 1/0 0/0 0/0 .text daObjSakuita_Execute__FP14daObjSakuita_c */ -static void daObjSakuita_Execute(daObjSakuita_c* param_0) { - // NONMATCHING +static int daObjSakuita_Execute(daObjSakuita_c* i_this) { + return i_this->execute(); } /* 80CC4C6C-80CC4C74 0005EC 0008+00 1/0 0/0 0/0 .text daObjSakuita_IsDelete__FP14daObjSakuita_c */ -static bool daObjSakuita_IsDelete(daObjSakuita_c* param_0) { - return true; +static int daObjSakuita_IsDelete(daObjSakuita_c* i_this) { + return 1; } /* 80CC4C74-80CC4C9C 0005F4 0028+00 1/0 0/0 0/0 .text daObjSakuita_Delete__FP14daObjSakuita_c */ -static void daObjSakuita_Delete(daObjSakuita_c* param_0) { - // NONMATCHING +static int daObjSakuita_Delete(daObjSakuita_c* i_this) { + fopAcM_GetID(i_this); + i_this->~daObjSakuita_c(); + return 1; +} + +/* 80CC4C9C-80CC4E40 00061C 01A4+00 1/1 0/0 0/0 .text __dt__14daObjSakuita_cFv */ +daObjSakuita_c::~daObjSakuita_c() { + #ifdef DEBUG + M_hio.dt(); + #endif + + if (field_0x74c != 0) { + J3DModelData* modelData = (J3DModelData*) dComIfG_getObjectRes(l_arcName, "A_Sakuita.bmd"); + JUT_ASSERT(160, modelData != 0); + dComIfGp_removeSimpleModel(modelData, fopAcM_GetRoomNo(this)); + } + dComIfG_resDelete(&mPhase, l_arcName); +} + +inline int daObjSakuita_c::create() { + fopAcM_SetupActor(this, daObjSakuita_c); + int rv = dComIfG_resLoad(&mPhase, l_arcName); + if (rv == cPhs_COMPLEATE_e) { + if (fopAcM_entrySolidHeap(this, createSolidHeap, 0x4000) == 0) { + return cPhs_ERROR_e; + } + + create_init(); + fopAcM_SetMtx(this, mMtx); + } + return rv; +} + +/* 80CC4E40-80CC4F78 0007C0 0138+00 1/0 0/0 0/0 .text daObjSakuita_Create__FP10fopAc_ac_c + */ +static int daObjSakuita_Create(fopAc_ac_c* i_actor) { + fopAcM_GetID(i_actor); + return static_cast(i_actor)->create(); } -/* ############################################################################################## */ /* 80CC5130-80CC5150 -00001 0020+00 1/0 0/0 0/0 .data l_daObjSakuita_Method */ static actor_method_class l_daObjSakuita_Method = { - (process_method_func)daObjSakuita_Create__FP10fopAc_ac_c, - (process_method_func)daObjSakuita_Delete__FP14daObjSakuita_c, - (process_method_func)daObjSakuita_Execute__FP14daObjSakuita_c, - (process_method_func)daObjSakuita_IsDelete__FP14daObjSakuita_c, - (process_method_func)daObjSakuita_Draw__FP14daObjSakuita_c, + (process_method_func)daObjSakuita_Create, + (process_method_func)daObjSakuita_Delete, + (process_method_func)daObjSakuita_Execute, + (process_method_func)daObjSakuita_IsDelete, + (process_method_func)daObjSakuita_Draw, }; /* 80CC5150-80CC5180 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Sakuita */ @@ -261,67 +253,4 @@ extern actor_process_profile_definition g_profile_Obj_Sakuita = { fopAc_CULLBOX_CUSTOM_e, // cullType }; -/* 80CC5180-80CC518C 000054 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, -}; - -/* 80CC518C-80CC5198 000060 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, -}; - -/* 80CC5198-80CC51A4 00006C 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, -}; - -/* 80CC51A4-80CC51B0 000078 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, -}; - -/* 80CC4C9C-80CC4E40 00061C 01A4+00 1/1 0/0 0/0 .text __dt__14daObjSakuita_cFv */ -daObjSakuita_c::~daObjSakuita_c() { - // NONMATCHING -} - -/* 80CC4E40-80CC4F78 0007C0 0138+00 1/0 0/0 0/0 .text daObjSakuita_Create__FP10fopAc_ac_c - */ -static void daObjSakuita_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80CC4F78-80CC4FC0 0008F8 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 80CC4FC0-80CC5008 000940 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80CC5008-80CC5064 000988 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 80CC5064-80CC50AC 0009E4 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - /* 80CC5114-80CC5114 000060 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */