From 34b21412c4d62ad498d6dbe085a95ba308cf0c15 Mon Sep 17 00:00:00 2001 From: YunataSavior <58997725+YunataSavior@users.noreply.github.com> Date: Mon, 3 Feb 2025 00:30:40 -0800 Subject: [PATCH] d_a_obj_TvCdlst matching (#2292) * d_a_obj_TvCdlst matching * d_a_obj_kwheel00, 01, & d_a_obj_klift00 Equivalent (weak func and/or vtable order) (#2291) * d_a_obj_kwheel00, 01, & d_a_obj_klift00 Equivalent (weak func and/or vtable order) * Three rels equivalent * Basic documentation for the three rels * Define explicit constructor for dMdl_obj_c (needed for proper array creation in d_a_obj_klift00) * Modify d_a_obj_bky_rock to account for new explicit constructor of dMdl_obj_c * Specify weak func and/or vtable orders for rels in config.py * Cleanup includes and dol2asm artifacts * * Fix debug build * Restore incorrectly removed l_bmdidx * Fix US retail equivalency * d_a_obj_Turara equivalent (#2289) * Initial d_a_obj_Turara work * More d_a_obj_Turara work * d_a_obj_Turara equivalent except for weak func order of dEvLib_callback_c dtor * Updates to d_a_obj_Turara after feedback from Taka * b_dre equivalent (#2290) * Update d_a_obj_Turara to remove unnecessary comment based on hatal\'s request --------- Co-authored-by: TakaRikka <38417346+TakaRikka@users.noreply.github.com> * Fix spurious differences when using `ninja diff` (#2294) * Fix spurious differences when using ninja diff * Fix some clangd errors/warnings * d_a_obj_waterGate matching + d_a_obj_lv3Water2 equivalent (#2293) * d_a_obj_waterGate matching + d_a_obj_lv3Water2 equivalent * Add simpleCalcMaterial implicit inline to J3DModelData (seen in debug) * Basic documentation for both actors * WIP debug build implementations (note TODOs) * Update configure.py and note weak ordering issues for lv3Water2 * Actually add modified J3DModelData.h & explicitly note fake padding * Add fopAcM_Register... macros (for debug build) (#2295) * Update d_a_obj_Tvcdlst to use LIGHT_INFLUENCE after Taka gave feedback --------- Co-authored-by: Huitzi <73550465+marwernerh@users.noreply.github.com> Co-authored-by: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Co-authored-by: LagoLunatic --- config/GZ2E01/rels/d_a_obj_TvCdlst/splits.txt | 2 +- .../GZ2E01/rels/d_a_obj_TvCdlst/symbols.txt | 12 +- configure.py | 2 +- include/d/actor/d_a_obj_TvCdlst.h | 45 +- src/d/actor/d_a_obj_TvCdlst.cpp | 586 +++++++----------- 5 files changed, 271 insertions(+), 376 deletions(-) diff --git a/config/GZ2E01/rels/d_a_obj_TvCdlst/splits.txt b/config/GZ2E01/rels/d_a_obj_TvCdlst/splits.txt index da4e6e05928..2b151c42848 100644 --- a/config/GZ2E01/rels/d_a_obj_TvCdlst/splits.txt +++ b/config/GZ2E01/rels/d_a_obj_TvCdlst/splits.txt @@ -17,6 +17,6 @@ REL/global_destructor_chain.c: d/actor/d_a_obj_TvCdlst.cpp: .text start:0x000000EC end:0x00000C9C .ctors start:0x00000000 end:0x00000004 - .rodata start:0x00000000 end:0x00000070 + .rodata start:0x00000000 end:0x0000006E .data start:0x00000000 end:0x000000C4 .bss start:0x00000008 end:0x0000001C diff --git a/config/GZ2E01/rels/d_a_obj_TvCdlst/symbols.txt b/config/GZ2E01/rels/d_a_obj_TvCdlst/symbols.txt index 4b95fcff28c..add8fc2c8b9 100644 --- a/config/GZ2E01/rels/d_a_obj_TvCdlst/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_TvCdlst/symbols.txt @@ -18,10 +18,10 @@ pointLightProc__11daTvCdlst_cFv = .text:0x00000670; // type:function size:0xB0 s Execute__11daTvCdlst_cFv = .text:0x00000720; // type:function size:0x334 scope:global Draw__11daTvCdlst_cFv = .text:0x00000A54; // type:function size:0xA4 scope:global Delete__11daTvCdlst_cFv = .text:0x00000AF8; // type:function size:0x58 scope:global -daTvCdlst_Draw__FP11daTvCdlst_c = .text:0x00000B50; // type:function size:0x20 scope:global -daTvCdlst_Execute__FP11daTvCdlst_c = .text:0x00000B70; // type:function size:0x20 scope:global -daTvCdlst_Delete__FP11daTvCdlst_c = .text:0x00000B90; // type:function size:0x20 scope:global -daTvCdlst_Create__FP10fopAc_ac_c = .text:0x00000BB0; // type:function size:0x20 scope:global +daTvCdlst_Draw__FP11daTvCdlst_c = .text:0x00000B50; // type:function size:0x20 scope:local +daTvCdlst_Execute__FP11daTvCdlst_c = .text:0x00000B70; // type:function size:0x20 scope:local +daTvCdlst_Delete__FP11daTvCdlst_c = .text:0x00000B90; // type:function size:0x20 scope:local +daTvCdlst_Create__FP10fopAc_ac_c = .text:0x00000BB0; // type:function size:0x20 scope:local __dt__15daTvCdlst_HIO_cFv = .text:0x00000BD0; // type:function size:0x5C scope:global __sinit_d_a_obj_TvCdlst_cpp = .text:0x00000C2C; // type:function size:0x70 scope:local _ctors = .ctors:0x00000000; // type:label scope:global @@ -44,7 +44,7 @@ mCcDObjInfo__11daTvCdlst_c = .rodata:0x00000000; // type:object size:0x30 scope: @3939 = .rodata:0x00000060; // type:object size:0x4 scope:local @stringBase0 = .rodata:0x00000064; // type:object size:0xA scope:local data:string_table mCcDCyl__11daTvCdlst_c = .data:0x00000000; // type:object size:0x44 scope:global -l_daTvCdlst_Method = .data:0x00000044; // type:object size:0x20 scope:global +l_daTvCdlst_Method = .data:0x00000044; // type:object size:0x20 scope:local g_profile_Obj_TvCdlst = .data:0x00000064; // type:object size:0x30 scope:global __vt__8cM3dGCyl = .data:0x00000094; // type:object size:0xC scope:global __vt__8cM3dGAab = .data:0x000000A0; // type:object size:0xC scope:global @@ -52,4 +52,4 @@ __vt__15daTvCdlst_HIO_c = .data:0x000000AC; // type:object size:0xC scope:global __vt__14mDoHIO_entry_c = .data:0x000000B8; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global @3622 = .bss:0x00000008; // type:object size:0xC scope:local -l_HIO = .bss:0x00000014; // type:object size:0x8 scope:global +l_HIO = .bss:0x00000014; // type:object size:0x8 scope:local diff --git a/configure.py b/configure.py index eaa603193d3..3a6955dc9d3 100755 --- a/configure.py +++ b/configure.py @@ -1800,7 +1800,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_npc_zrz"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_Lv5Key"), ActorRel(Equivalent, "d_a_obj_Turara"), - ActorRel(NonMatching, "d_a_obj_TvCdlst"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_TvCdlst"), ActorRel(NonMatching, "d_a_obj_Y_taihou"), ActorRel(NonMatching, "d_a_obj_amiShutter"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_ari"), diff --git a/include/d/actor/d_a_obj_TvCdlst.h b/include/d/actor/d_a_obj_TvCdlst.h index 5ac985903c2..765c4924e9f 100644 --- a/include/d/actor/d_a_obj_TvCdlst.h +++ b/include/d/actor/d_a_obj_TvCdlst.h @@ -2,6 +2,7 @@ #define D_A_OBJ_TVCDLST_H #include "f_op/f_op_actor_mng.h" +#include "include/d/d_com_inf_game.h" /** * @ingroup actors-objects @@ -14,30 +15,52 @@ class daTvCdlst_c : public fopAc_ac_c { public: /* 80B9ED40 */ void setBaseMtx(); - /* 80B9EDC8 */ void CreateHeap(); - /* 80B9EE34 */ void create(); - /* 80B9F144 */ void createHeapCallBack(fopAc_ac_c*); + /* 80B9EDC8 */ int CreateHeap(); + /* 80B9EE34 */ int create(); + /* 80B9F144 */ static int createHeapCallBack(fopAc_ac_c*); /* 80B9F164 */ void lightInit(); /* 80B9F1F0 */ void setLight(); /* 80B9F220 */ void cutLight(); /* 80B9F250 */ void pointLightProc(); - /* 80B9F300 */ void Execute(); - /* 80B9F634 */ void Draw(); - /* 80B9F6D8 */ void Delete(); + /* 80B9F300 */ int Execute(); + /* 80B9F634 */ int Draw(); + /* 80B9F6D8 */ int Delete(); - static u8 const mCcDObjInfo[48]; - static u8 mCcDCyl[68]; + static dCcD_SrcGObjInf const mCcDObjInfo; + static dCcD_SrcCyl mCcDCyl; + + u8 getLightType() { return fopAcM_GetParamBit(this,8,8); } + u8 getOnSw() { return fopAcM_GetParamBit(this,0,8); } + u8 getOffSw() { return fopAcM_GetParamBit(this,0x10,8); } private: - /* 0x568 */ u8 field_0x568[0x754 - 0x568]; + /* 0x568 */ request_of_phase_process_class mPhaseReq; + /* 0x570 */ J3DModel* mpModel; + /* 0x574 */ dCcD_Stts mStts; + /* 0x5b0 */ dCcD_Cyl mCyl; + /* 0x6ec */ cXyz field_0x6ec; + /* 0x6f8 */ u8 field_0x6f8; + /* 0x6f9 */ u8 mIsOn; + /* 0x6fa */ u8 mIsOff; + /* 0x6fb */ u8 mOnSw; + /* 0x6fc */ u8 mOffSw; + /* 0x6fd */ u8 mDoIgnite; + /* 0x700 */ cXyz field_0x700; + /* 0x70c */ u8 mLightType; + /* 0x710 */ f32 field_0x710; + /* 0x714 */ LIGHT_INFLUENCE mLight; + /* 0x734 */ Z2SoundObjSimple mSound; }; STATIC_ASSERT(sizeof(daTvCdlst_c) == 0x754); -class daTvCdlst_HIO_c { +class daTvCdlst_HIO_c : public mDoHIO_entry_c { public: /* 80B9ECCC */ daTvCdlst_HIO_c(); - /* 80B9F7B0 */ ~daTvCdlst_HIO_c(); + /* 80B9F7B0 */ virtual ~daTvCdlst_HIO_c() {} + + /* 0x4 */ u8 field_0x4; + /* 0x5 */ u8 field_0x5; }; diff --git a/src/d/actor/d_a_obj_TvCdlst.cpp b/src/d/actor/d_a_obj_TvCdlst.cpp index 6cd928758f0..2858ca96d19 100644 --- a/src/d/actor/d_a_obj_TvCdlst.cpp +++ b/src/d/actor/d_a_obj_TvCdlst.cpp @@ -5,112 +5,247 @@ #include "d/actor/d_a_obj_TvCdlst.h" #include "dol2asm.h" - - - -// -// Forward References: -// - -extern "C" void __ct__15daTvCdlst_HIO_cFv(); -extern "C" void __dt__14mDoHIO_entry_cFv(); -extern "C" void setBaseMtx__11daTvCdlst_cFv(); -extern "C" void CreateHeap__11daTvCdlst_cFv(); -extern "C" void create__11daTvCdlst_cFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void createHeapCallBack__11daTvCdlst_cFP10fopAc_ac_c(); -extern "C" void lightInit__11daTvCdlst_cFv(); -extern "C" void setLight__11daTvCdlst_cFv(); -extern "C" void cutLight__11daTvCdlst_cFv(); -extern "C" void pointLightProc__11daTvCdlst_cFv(); -extern "C" void Execute__11daTvCdlst_cFv(); -extern "C" void Draw__11daTvCdlst_cFv(); -extern "C" void Delete__11daTvCdlst_cFv(); -extern "C" static void daTvCdlst_Draw__FP11daTvCdlst_c(); -extern "C" static void daTvCdlst_Execute__FP11daTvCdlst_c(); -extern "C" static void daTvCdlst_Delete__FP11daTvCdlst_c(); -extern "C" static void daTvCdlst_Create__FP10fopAc_ac_c(); -extern "C" void __dt__15daTvCdlst_HIO_cFv(); -extern "C" void __sinit_d_a_obj_TvCdlst_cpp(); -extern "C" u8 const mCcDObjInfo__11daTvCdlst_c[48]; -extern "C" extern char const* const d_a_obj_TvCdlst__stringBase0; -extern "C" u8 mCcDCyl__11daTvCdlst_c[68]; - -// -// External References: -// - -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData(); -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 isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void setSimple__13dPa_control_cFUsPC4cXyzPC12dKy_tevstr_cUcRC8_GXColorRC8_GXColorif(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void GetTgHitObj__12dCcD_GObjInfFv(); -extern "C" void GetTgHitObjSe__12dCcD_GObjInfFv(); -extern "C" void getHitSeID__12dCcD_GObjInfFUci(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void dKy_plight_set__FP15LIGHT_INFLUENCE(); -extern "C" void dKy_plight_cut__FP15LIGHT_INFLUENCE(); -extern "C" void dKy_BossLight_set__FP4cXyzP8_GXColorfUc(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void SetH__8cM3dGCylFf(); -extern "C" void SetR__8cM3dGCylFf(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void deleteObject__14Z2SoundObjBaseFv(); -extern "C" void startCollisionSE__14Z2SoundObjBaseFUlUlP14Z2SoundObjBase(); -extern "C" void __ct__16Z2SoundObjSimpleFv(); -extern "C" void __dl__FPv(); -extern "C" void _savegpr_29(); -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" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u32 g_whiteColor; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void __register_global_object(); +#include "include/d/d_com_inf_game.h" // // Declarations: // +/* 80B9F9DC-80B9F9E4 000014 0008+00 1/1 0/0 0/0 .bss l_HIO */ +static daTvCdlst_HIO_c l_HIO; + /* ############################################################################################## */ /* 80B9F900-80B9F944 000000 0044+00 2/2 0/0 0/0 .data mCcDCyl__11daTvCdlst_c */ -SECTION_DATA u8 daTvCdlst_c::mCcDCyl[68] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +dCcD_SrcCyl daTvCdlst_c::mCcDCyl = { + daTvCdlst_c::mCcDObjInfo, // mObjInf + { + {0.0f, 0.0f, 0.0f}, // mCenter + 0.0f, // mRadius + 0.0f // mHeight + } // mCyl }; +/* 80B9ECCC-80B9ECF8 0000EC 002C+00 1/1 0/0 0/0 .text __ct__15daTvCdlst_HIO_cFv */ +daTvCdlst_HIO_c::daTvCdlst_HIO_c() { + field_0x4 = 0x3c; + field_0x5 = 1; +} + +/* 80B9ED40-80B9EDC8 000160 0088+00 2/2 0/0 0/0 .text setBaseMtx__11daTvCdlst_cFv */ +void daTvCdlst_c::setBaseMtx() { + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(current.angle.x, current.angle.y, current.angle.z); + mpModel->setBaseScale(scale); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); +} + +/* 80B9EDC8-80B9EE34 0001E8 006C+00 1/1 0/0 0/0 .text CreateHeap__11daTvCdlst_cFv */ +int daTvCdlst_c::CreateHeap() { + J3DModelData* pModelData = (J3DModelData*) dComIfG_getObjectRes("HShokudai", 3); + JUT_ASSERT(222, pModelData != NULL); + mpModel = mDoExt_J3DModel__create(pModelData, 0x80000,0x11000084); + if (mpModel == NULL) + return 0; + return 1; +} + +/* ############################################################################################## */ +/* 80B9F890-80B9F8C0 000000 0030+00 4/4 0/0 0/0 .rodata mCcDObjInfo__11daTvCdlst_c */ +const dCcD_SrcGObjInf daTvCdlst_c::mCcDObjInfo = { + {0, // mFlags + { + {0x0, 0x0, 0x0}, // mObjAt + {0xD8FBFFFF, 0x1F}, // mObjTg + {0x79} // mObjCo + } // mSrcObjHitInf + }, // mObj + {1, 0, 0, 0, 0}, // mGObjAt + {0xA, 0, 0, 0, 0}, // mGObjTg + {0} // mGObjCo +}; + +/* 80B9EE34-80B9F0B4 000254 0280+00 1/1 0/0 0/0 .text create__11daTvCdlst_cFv */ +int daTvCdlst_c::create() { + fopAcM_SetupActor(this, daTvCdlst_c); + int phase = dComIfG_resLoad(&mPhaseReq,"HShokudai"); + if (phase == cPhs_COMPLEATE_e) { + if (fopAcM_entrySolidHeap(this,createHeapCallBack,0x820) == 0) { + return cPhs_ERROR_e; + } + setBaseMtx(); + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + fopAcM_setCullSizeBox2(this, mpModel->getModelData()); + field_0x6ec.x = current.pos.x; + field_0x6ec.y = current.pos.y + 155.0f; + field_0x6ec.z = current.pos.z; + mLightType = getLightType(); + if (mLightType == 0xff) { + mLightType = 0; + } + lightInit(); + eyePos = field_0x6ec; + mOnSw = getOnSw(); + mOffSw = getOffSw(); + mIsOn = fopAcM_isSwitch(this, mOnSw); + mIsOff = fopAcM_isSwitch(this, mOffSw); + mDoIgnite = 0; + field_0x6f8 = 0; + if (mIsOn && mIsOff == 0) { + field_0x6f8 = 1; + mDoIgnite = 0; + setLight(); + } + mStts.Init(0xff, 0xff, this); + mCyl.Set(mCcDCyl); + mCyl.SetStts(&mStts); + mSound.init(¤t.pos, 1); + // FIXME: Need mDoHIO_entry_c::entryHIO + } + return phase; +} + +/* 80B9F144-80B9F164 000564 0020+00 1/1 0/0 0/0 .text + * createHeapCallBack__11daTvCdlst_cFP10fopAc_ac_c */ +int daTvCdlst_c::createHeapCallBack(fopAc_ac_c* i_this) { + return static_cast(i_this)->CreateHeap(); +} + +/* 80B9F164-80B9F1F0 000584 008C+00 1/1 0/0 0/0 .text lightInit__11daTvCdlst_cFv */ +void daTvCdlst_c::lightInit() { + field_0x700 = field_0x6ec; + field_0x700.y += 10.0f; + if (mLightType) { + mLight.mPosition = field_0x700; + mLight.mColor.r = 0xbc; + mLight.mColor.g = 0x66; + mLight.mColor.b = 0x42; + mLight.mPow = 500.0f; + mLight.mFluctuation = 1.0f; + return; + } + field_0x710 = 0.0f; +} + +/* 80B9F1F0-80B9F220 000610 0030+00 2/2 0/0 0/0 .text setLight__11daTvCdlst_cFv */ +void daTvCdlst_c::setLight() { + if (mLightType) { + dKy_plight_set(&mLight); + } +} + +/* 80B9F220-80B9F250 000640 0030+00 1/1 0/0 0/0 .text cutLight__11daTvCdlst_cFv */ +void daTvCdlst_c::cutLight() { + if (mLightType) { + dKy_plight_cut(&mLight); + } +} + +/* 80B9F250-80B9F300 000670 00B0+00 1/1 0/0 0/0 .text pointLightProc__11daTvCdlst_cFv */ +void daTvCdlst_c::pointLightProc() { + if (mLightType == 0) { + GXColor color = {0xbc, 0x66, 0x42, 0xff}; + if (field_0x6f8 != 0) { + cLib_addCalc(&field_0x710, 1.0f, 0.5f, 0.1f, 0.0001f); + } else { + cLib_addCalc(&field_0x710, 0.0f, 0.5f, 0.1f, 0.0001f); + } + if (field_0x710 >= 1e-06f) { + dKy_BossLight_set(&field_0x700, &color, field_0x710, 0); + } + } +} + +/* 80B9F300-80B9F634 000720 0334+00 1/1 0/0 0/0 .text Execute__11daTvCdlst_cFv */ +int daTvCdlst_c::Execute() { + mIsOn = fopAcM_isSwitch(this, mOnSw); + mIsOff = fopAcM_isSwitch(this, mOffSw); + if (mIsOn && mIsOff == 0 && field_0x6f8 == 0) { + field_0x6f8 = 1; + mDoIgnite = 1; + setLight(); + } + if ((mIsOn == 0 && mIsOff == 0 || mIsOff) && field_0x6f8 == 1) { + s8 roomNo = fopAcM_GetRoomNo(this); + mDoAud_seStart(Z2SE_OBJ_FIRE_OFF, &field_0x6ec, 0, dComIfGp_getReverb(roomNo)); + field_0x6f8 = 0; + cutLight(); + } + if (field_0x6f8) { + dComIfGp_particle_setSimple(0x100, &field_0x6ec, 0xff, g_whiteColor, g_whiteColor, 0, 0.0f); + dComIfGp_particle_setSimple(0x101, &field_0x6ec, 0xff, g_whiteColor, g_whiteColor, 0, 0.0f); + dComIfGp_particle_setSimple(0x103, &field_0x6ec, 0xff, g_whiteColor, g_whiteColor, 0, 0.0f); + if (mDoIgnite) { + s8 roomNo = fopAcM_GetRoomNo(this); + mDoAud_seStart(Z2SE_OBJ_FIRE_IGNITION, &field_0x6ec, 0, dComIfGp_getReverb(roomNo)); + mDoIgnite = 0; + } else { + s8 roomNo = fopAcM_GetRoomNo(this); + mDoAud_seStartLevel(Z2SE_OBJ_FIRE_BURNING, &field_0x6ec, 0, dComIfGp_getReverb(roomNo)); + } + } + setBaseMtx(); + if (mCyl.ChkTgHit() && mCyl.GetTgHitObj()) { + mSound.startCollisionSE(mCyl.GetTgHitObjHitSeID(1), 5, NULL); + } + s8 roomNo = fopAcM_GetRoomNo(this); + mSound.framework(0, dComIfGp_getReverb(roomNo)); + mCyl.SetR(25.0f); + mCyl.SetH(140.0f); + mCyl.SetC(current.pos); + dComIfG_Ccsp()->Set(&mCyl); + pointLightProc(); + return 1; +} + +/* 80B9F634-80B9F6D8 000A54 00A4+00 1/1 0/0 0/0 .text Draw__11daTvCdlst_cFv */ +int daTvCdlst_c::Draw() { + g_env_light.settingTevStruct(0x40, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + return 1; +} + +/* 80B9F6D8-80B9F730 000AF8 0058+00 1/1 0/0 0/0 .text Delete__11daTvCdlst_cFv */ +int daTvCdlst_c::Delete() { + mSound.deleteObject(); + dComIfG_resDelete(&mPhaseReq, "HShokudai"); + if (mLightType) { + dKy_plight_cut(&mLight); + } + return 1; +} + +/* 80B9F730-80B9F750 000B50 0020+00 1/0 0/0 0/0 .text daTvCdlst_Draw__FP11daTvCdlst_c */ +static int daTvCdlst_Draw(daTvCdlst_c* i_this) { + return i_this->Draw(); +} + +/* 80B9F750-80B9F770 000B70 0020+00 1/0 0/0 0/0 .text daTvCdlst_Execute__FP11daTvCdlst_c + */ +static int daTvCdlst_Execute(daTvCdlst_c* i_this) { + return i_this->Execute(); +} + +/* 80B9F770-80B9F790 000B90 0020+00 1/0 0/0 0/0 .text daTvCdlst_Delete__FP11daTvCdlst_c + */ +static int daTvCdlst_Delete(daTvCdlst_c* i_this) { + return i_this->Delete(); +} + +/* 80B9F790-80B9F7B0 000BB0 0020+00 1/0 0/0 0/0 .text daTvCdlst_Create__FP10fopAc_ac_c */ +static int daTvCdlst_Create(fopAc_ac_c* i_this) { + return static_cast(i_this)->create(); +} + /* 80B9F944-80B9F964 -00001 0020+00 1/0 0/0 0/0 .data l_daTvCdlst_Method */ static actor_method_class l_daTvCdlst_Method = { - (process_method_func)daTvCdlst_Create__FP10fopAc_ac_c, - (process_method_func)daTvCdlst_Delete__FP11daTvCdlst_c, - (process_method_func)daTvCdlst_Execute__FP11daTvCdlst_c, + (process_method_func)daTvCdlst_Create, + (process_method_func)daTvCdlst_Delete, + (process_method_func)daTvCdlst_Execute, 0, - (process_method_func)daTvCdlst_Draw__FP11daTvCdlst_c, + (process_method_func)daTvCdlst_Draw, }; /* 80B9F964-80B9F994 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_TvCdlst */ @@ -131,267 +266,4 @@ extern actor_process_profile_definition g_profile_Obj_TvCdlst = { fopAc_CULLBOX_CUSTOM_e, // cullType }; -/* 80B9F994-80B9F9A0 000094 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 80B9F9A0-80B9F9AC 0000A0 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 80B9F9AC-80B9F9B8 0000AC 000C+00 2/2 0/0 0/0 .data __vt__15daTvCdlst_HIO_c */ -SECTION_DATA extern void* __vt__15daTvCdlst_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__15daTvCdlst_HIO_cFv, -}; - -/* 80B9F9B8-80B9F9C4 0000B8 000C+00 3/3 0/0 0/0 .data __vt__14mDoHIO_entry_c */ -SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14mDoHIO_entry_cFv, -}; - -/* 80B9ECCC-80B9ECF8 0000EC 002C+00 1/1 0/0 0/0 .text __ct__15daTvCdlst_HIO_cFv */ -daTvCdlst_HIO_c::daTvCdlst_HIO_c() { - // NONMATCHING -} - -/* 80B9ECF8-80B9ED40 000118 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */ -// mDoHIO_entry_c::~mDoHIO_entry_c() { -extern "C" void __dt__14mDoHIO_entry_cFv() { - // NONMATCHING -} - -/* 80B9ED40-80B9EDC8 000160 0088+00 2/2 0/0 0/0 .text setBaseMtx__11daTvCdlst_cFv */ -void daTvCdlst_c::setBaseMtx() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80B9F8F4-80B9F8F4 000064 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80B9F8F4 = "HShokudai"; -#pragma pop - -/* 80B9EDC8-80B9EE34 0001E8 006C+00 1/1 0/0 0/0 .text CreateHeap__11daTvCdlst_cFv */ -void daTvCdlst_c::CreateHeap() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80B9F890-80B9F8C0 000000 0030+00 4/4 0/0 0/0 .rodata mCcDObjInfo__11daTvCdlst_c */ -SECTION_RODATA u8 const daTvCdlst_c::mCcDObjInfo[48] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xD8, 0xFB, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x79, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80B9F890, &daTvCdlst_c::mCcDObjInfo); - -/* 80B9F8C0-80B9F8C4 000030 0004+00 1/1 0/0 0/0 .rodata @3750 */ -SECTION_RODATA static f32 const lit_3750 = 155.0f; -COMPILER_STRIP_GATE(0x80B9F8C0, &lit_3750); - -/* 80B9EE34-80B9F0B4 000254 0280+00 1/1 0/0 0/0 .text create__11daTvCdlst_cFv */ -void daTvCdlst_c::create() { - // NONMATCHING -} - -/* 80B9F0B4-80B9F0FC 0004D4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 80B9F0FC-80B9F144 00051C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80B9F144-80B9F164 000564 0020+00 1/1 0/0 0/0 .text - * createHeapCallBack__11daTvCdlst_cFP10fopAc_ac_c */ -void daTvCdlst_c::createHeapCallBack(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80B9F8C4-80B9F8C8 000034 0004+00 0/1 0/0 0/0 .rodata @3840 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3840 = 10.0f; -COMPILER_STRIP_GATE(0x80B9F8C4, &lit_3840); -#pragma pop - -/* 80B9F8C8-80B9F8CC 000038 0004+00 0/1 0/0 0/0 .rodata @3841 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3841 = 500.0f; -COMPILER_STRIP_GATE(0x80B9F8C8, &lit_3841); -#pragma pop - -/* 80B9F8CC-80B9F8D0 00003C 0004+00 0/3 0/0 0/0 .rodata @3842 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3842 = 1.0f; -COMPILER_STRIP_GATE(0x80B9F8CC, &lit_3842); -#pragma pop - -/* 80B9F8D0-80B9F8D4 000040 0004+00 0/3 0/0 0/0 .rodata @3843 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3843[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80B9F8D0, &lit_3843); -#pragma pop - -/* 80B9F164-80B9F1F0 000584 008C+00 1/1 0/0 0/0 .text lightInit__11daTvCdlst_cFv */ -void daTvCdlst_c::lightInit() { - // NONMATCHING -} - -/* 80B9F1F0-80B9F220 000610 0030+00 2/2 0/0 0/0 .text setLight__11daTvCdlst_cFv */ -void daTvCdlst_c::setLight() { - // NONMATCHING -} - -/* 80B9F220-80B9F250 000640 0030+00 1/1 0/0 0/0 .text cutLight__11daTvCdlst_cFv */ -void daTvCdlst_c::cutLight() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80B9F8D4-80B9F8D8 000044 0004+00 0/1 0/0 0/0 .rodata @3861 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_3861 = 0xBC6642FF; -COMPILER_STRIP_GATE(0x80B9F8D4, &lit_3861); -#pragma pop - -/* 80B9F8D8-80B9F8DC 000048 0004+00 0/1 0/0 0/0 .rodata @3869 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3869 = 0.5f; -COMPILER_STRIP_GATE(0x80B9F8D8, &lit_3869); -#pragma pop - -/* 80B9F8DC-80B9F8E0 00004C 0004+00 0/1 0/0 0/0 .rodata @3870 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3870 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80B9F8DC, &lit_3870); -#pragma pop - -/* 80B9F8E0-80B9F8E4 000050 0004+00 0/1 0/0 0/0 .rodata @3871 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_3871 = 0x38D1B717; -COMPILER_STRIP_GATE(0x80B9F8E0, &lit_3871); -#pragma pop - -/* 80B9F8E4-80B9F8E8 000054 0004+00 0/1 0/0 0/0 .rodata @3872 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_3872 = 0x358637BD; -COMPILER_STRIP_GATE(0x80B9F8E4, &lit_3872); -#pragma pop - -/* 80B9F250-80B9F300 000670 00B0+00 1/1 0/0 0/0 .text pointLightProc__11daTvCdlst_cFv */ -void daTvCdlst_c::pointLightProc() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80B9F8E8-80B9F8EC 000058 0004+00 0/1 0/0 0/0 .rodata @3937 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3937 = -1.0f; -COMPILER_STRIP_GATE(0x80B9F8E8, &lit_3937); -#pragma pop - -/* 80B9F8EC-80B9F8F0 00005C 0004+00 0/1 0/0 0/0 .rodata @3938 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3938 = 25.0f; -COMPILER_STRIP_GATE(0x80B9F8EC, &lit_3938); -#pragma pop - -/* 80B9F8F0-80B9F8F4 000060 0004+00 0/1 0/0 0/0 .rodata @3939 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3939 = 140.0f; -COMPILER_STRIP_GATE(0x80B9F8F0, &lit_3939); -#pragma pop - -/* 80B9F300-80B9F634 000720 0334+00 1/1 0/0 0/0 .text Execute__11daTvCdlst_cFv */ -void daTvCdlst_c::Execute() { - // NONMATCHING -} - -/* 80B9F634-80B9F6D8 000A54 00A4+00 1/1 0/0 0/0 .text Draw__11daTvCdlst_cFv */ -void daTvCdlst_c::Draw() { - // NONMATCHING -} - -/* 80B9F6D8-80B9F730 000AF8 0058+00 1/1 0/0 0/0 .text Delete__11daTvCdlst_cFv */ -void daTvCdlst_c::Delete() { - // NONMATCHING -} - -/* 80B9F730-80B9F750 000B50 0020+00 1/0 0/0 0/0 .text daTvCdlst_Draw__FP11daTvCdlst_c */ -static void daTvCdlst_Draw(daTvCdlst_c* param_0) { - // NONMATCHING -} - -/* 80B9F750-80B9F770 000B70 0020+00 1/0 0/0 0/0 .text daTvCdlst_Execute__FP11daTvCdlst_c - */ -static void daTvCdlst_Execute(daTvCdlst_c* param_0) { - // NONMATCHING -} - -/* 80B9F770-80B9F790 000B90 0020+00 1/0 0/0 0/0 .text daTvCdlst_Delete__FP11daTvCdlst_c - */ -static void daTvCdlst_Delete(daTvCdlst_c* param_0) { - // NONMATCHING -} - -/* 80B9F790-80B9F7B0 000BB0 0020+00 1/0 0/0 0/0 .text daTvCdlst_Create__FP10fopAc_ac_c */ -static void daTvCdlst_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80B9F7B0-80B9F80C 000BD0 005C+00 2/1 0/0 0/0 .text __dt__15daTvCdlst_HIO_cFv */ -daTvCdlst_HIO_c::~daTvCdlst_HIO_c() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80B9F9D0-80B9F9DC 000008 000C+00 1/1 0/0 0/0 .bss @3622 */ -static u8 lit_3622[12]; - -/* 80B9F9DC-80B9F9E4 000014 0008+00 1/1 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[8]; - -/* 80B9F80C-80B9F87C 000C2C 0070+00 0/0 1/0 0/0 .text __sinit_d_a_obj_TvCdlst_cpp */ -void __sinit_d_a_obj_TvCdlst_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80B9F80C, __sinit_d_a_obj_TvCdlst_cpp); -#pragma pop - /* 80B9F8F4-80B9F8F4 000064 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */