From 91e84ecd33b1a547e3bab81919824bd805795ec1 Mon Sep 17 00:00:00 2001 From: Tom Date: Fri, 1 Aug 2025 13:32:39 -0400 Subject: [PATCH] d_a_obj_crvhahen matching (#2564) * useHeapInit 73%, ctor and dtor 100%, Delete 94%, wallcheck 43%, create 42% * useHeapInit 100% * Wall_Check 85% * Update fields and return types * crvhahen Wall_Check and Execute 100 * update createheap return type for matching * crvhahen create 70 draw 57 * Revert change that made useHeapInit non-matching * delete matching, .rodata 91 * create 94% * crvhahen draw 85% * setBaseMtx matching * CheckCull and checkViewArea 100% * rename & cleanup fields * cleanup fields, rodata. hahenset and hahen_hakai partials * cleanup and remove SECTION_RODATA * d_a_obj_crvhahen OK * cleanup and fix various inconsistancies or issues --------- Co-authored-by: StuckInLimbo --- configure.py | 2 +- include/d/actor/d_a_obj_crvhahen.h | 43 ++- src/d/actor/d_a_obj_crvhahen.cpp | 522 ++++++++++++----------------- 3 files changed, 249 insertions(+), 318 deletions(-) diff --git a/configure.py b/configure.py index 26127c20ad2..327c7a55593 100755 --- a/configure.py +++ b/configure.py @@ -1905,7 +1905,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_obj_crope"), ActorRel(NonMatching, "d_a_obj_crvfence"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_crvgate"), - ActorRel(NonMatching, "d_a_obj_crvhahen"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_crvhahen"), ActorRel(NonMatching, "d_a_obj_crvlh_down"), ActorRel(NonMatching, "d_a_obj_crvlh_up"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_crvsteel"), diff --git a/include/d/actor/d_a_obj_crvhahen.h b/include/d/actor/d_a_obj_crvhahen.h index 64a9408a2bd..a2eb6df6afe 100644 --- a/include/d/actor/d_a_obj_crvhahen.h +++ b/include/d/actor/d_a_obj_crvhahen.h @@ -1,33 +1,54 @@ #ifndef D_A_OBJ_CRVHAHEN_H #define D_A_OBJ_CRVHAHEN_H +#include "d/d_com_inf_game.h" #include "f_op/f_op_actor_mng.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_lib.h" /** * @ingroup actors-objects * @class daObjCRVHAHEN_c - * @brief Caravan Wood + * @brief Bulblin Camp Caraven Wooden Fence Fragments * - * @details + * @details Hahen (はへん) a fragment, shard, or splinter. + * physics-enabled shards or fragments that simulate debris from destruction. * */ class daObjCRVHAHEN_c : public fopAc_ac_c { public: - /* 80BD342C */ void HahenSet(cXyz, cXyz, cXyz, cXyz, f32); - /* 80BD3628 */ void Wall_Check(cXyz, cXyz); + /* 80BD342C */ int HahenSet(cXyz, cXyz, cXyz, cXyz, f32); + /* 80BD3628 */ bool Wall_Check(cXyz, cXyz); /* 80BD3720 */ void Hahen_Hakai(int, int); /* 80BD38DC */ void CheckCull(); - /* 80BD3A9C */ void checkViewArea(cXyz*); - /* 80BD3B20 */ void Execute(); - /* 80BD3B74 */ void Delete(); + /* 80BD3A9C */ bool checkViewArea(cXyz*); + /* 80BD3B20 */ int Execute(); + /* 80BD3B74 */ int Delete(); /* 80BD3C0C */ void setBaseMtx(); - /* 80BD3DBC */ void create(); + /* 80BD3DBC */ int create(); -private: - /* 0x568 */ u8 field_0x568[0x794 - 0x568]; + /* 80BD3338 */ int CreateHeap(); + /* 80BD3CA0 */ int Draw(); + + /* 0x568 */ cXyz mPos[10]; + /* 0x5e0 */ cXyz mVelocity[10]; + /* 0x658 */ cXyz mInitialPos[10]; + /* 0x6d0 */ csXyz mRotation[10]; + /* 0x70c */ csXyz mRotSpeed[10]; + /* 0x748 */ u32 mFlags; + /* 0x74c */ f32 mGroundHeight; + /* 0x750 */ bool mDrawHahen; + /* 0x751 */ u8 mStatus[10]; + /* 0x75b */ u8 field_0x75b; + /* 0x75c */ f32 mTimer; + /* 0x760 */ J3DModel* mpModel[10]; + /* 0x788 */ request_of_phase_process_class mPhase; + /* 0x790 */ u8 mEffectState; + /* 0x791 */ bool mInitialized; + /* 0x792 */ u8 mCounter; + /* 0x793 */ u8 mDrawState; }; STATIC_ASSERT(sizeof(daObjCRVHAHEN_c) == 0x794); - #endif /* D_A_OBJ_CRVHAHEN_H */ diff --git a/src/d/actor/d_a_obj_crvhahen.cpp b/src/d/actor/d_a_obj_crvhahen.cpp index 4ce657fe524..b3e650f458f 100644 --- a/src/d/actor/d_a_obj_crvhahen.cpp +++ b/src/d/actor/d_a_obj_crvhahen.cpp @@ -1,369 +1,279 @@ /** * @file d_a_obj_crvhahen.cpp - * -*/ + * + */ #include "d/actor/d_a_obj_crvhahen.h" -#include "dol2asm.h" - - -// -// Forward References: -// - -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" static void daObjCRVHAHEN_Create__FP10fopAc_ac_c(); -extern "C" static void daObjCRVHAHEN_Delete__FP15daObjCRVHAHEN_c(); -extern "C" void HahenSet__15daObjCRVHAHEN_cF4cXyz4cXyz4cXyz4cXyzf(); -extern "C" void Wall_Check__15daObjCRVHAHEN_cF4cXyz4cXyz(); -extern "C" void __dt__4cXyzFv(); -extern "C" void Hahen_Hakai__15daObjCRVHAHEN_cFii(); -extern "C" void CheckCull__15daObjCRVHAHEN_cFv(); -extern "C" void checkViewArea__15daObjCRVHAHEN_cFP4cXyz(); -extern "C" void Execute__15daObjCRVHAHEN_cFv(); -extern "C" void Delete__15daObjCRVHAHEN_cFv(); -extern "C" void setBaseMtx__15daObjCRVHAHEN_cFv(); -extern "C" static void daObjCRVHAHEN_Draw__FP15daObjCRVHAHEN_c(); -extern "C" static void daObjCRVHAHEN_Execute__FP15daObjCRVHAHEN_c(); -extern "C" void create__15daObjCRVHAHEN_cFv(); -extern "C" void __dt__5csXyzFv(); -extern "C" void __ct__5csXyzFv(); -extern "C" void __ct__4cXyzFv(); -extern "C" static bool daObjCRVHAHEN_IsDelete__FP15daObjCRVHAHEN_c(); -extern "C" extern char const* const d_a_obj_crvhahen__stringBase0; - -// -// External References: -// - -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void scaleM__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void ZXYrotS__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void mDoLib_project__FP3VecP3Vec(); -extern "C" void __ct__10fopAc_ac_cFv(); -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 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 LineCross__4cBgSFP11cBgS_LinChk(); -extern "C" void __ct__11dBgS_LinChkFv(); -extern "C" void __dt__11dBgS_LinChkFv(); -extern "C" void Set__11dBgS_LinChkFPC4cXyzPC4cXyzPC10fopAc_ac_c(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void cM_rndF__Ff(); -extern "C" void cM_rndFX__Ff(); -extern "C" void __dl__FPv(); -extern "C" void __construct_array(); -extern "C" void _savegpr_21(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_21(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_29(); -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80BD4048-80BD4048 000058 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80BD4048 = "CrvFence"; -SECTION_DEAD static char const* const stringBase_80BD4051 = "CaravanPiece.bmd"; -#pragma pop /* 80BD4064-80BD4068 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_obj_crvhahen__stringBase0; +static const char* l_arcName = "CrvFence"; + +inline int daObjCRVHAHEN_c::CreateHeap() { + J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes(l_arcName, "CaravanPiece.bmd"); + + for (int i = 0; i < 10; i++) { + mpModel[i] = mDoExt_J3DModel__create(model_data, 0x20000, 0x11000084); + if (mpModel[i] == NULL) { + return 0; + } + } + + return 1; +} /* 80BD3338-80BD33E8 000078 00B0+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING +static int useHeapInit(fopAc_ac_c* i_this) { + return ((daObjCRVHAHEN_c*)i_this)->CreateHeap(); } /* 80BD33E8-80BD3408 000128 0020+00 1/0 0/0 0/0 .text daObjCRVHAHEN_Create__FP10fopAc_ac_c */ -static void daObjCRVHAHEN_Create(fopAc_ac_c* param_0) { - // NONMATCHING +static int daObjCRVHAHEN_Create(fopAc_ac_c* i_this) { + static_cast(i_this)->create(); } /* 80BD3408-80BD342C 000148 0024+00 1/0 0/0 0/0 .text daObjCRVHAHEN_Delete__FP15daObjCRVHAHEN_c */ -static void daObjCRVHAHEN_Delete(daObjCRVHAHEN_c* param_0) { - // NONMATCHING +static int daObjCRVHAHEN_Delete(daObjCRVHAHEN_c* i_this) { + i_this->Delete(); + return 1; } -/* ############################################################################################## */ -/* 80BD3FF0-80BD3FF4 000000 0004+00 5/5 0/0 0/0 .rodata @3703 */ -SECTION_RODATA static f32 const lit_3703 = 0.5f; -COMPILER_STRIP_GATE(0x80BD3FF0, &lit_3703); - -/* 80BD3FF4-80BD3FF8 000004 0004+00 0/1 0/0 0/0 .rodata @3704 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3704 = 1.0f; -COMPILER_STRIP_GATE(0x80BD3FF4, &lit_3704); -#pragma pop - -/* 80BD3FF8-80BD3FFC 000008 0004+00 0/1 0/0 0/0 .rodata @3705 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3705 = 5000.0f; -COMPILER_STRIP_GATE(0x80BD3FF8, &lit_3705); -#pragma pop - -/* 80BD3FFC-80BD4000 00000C 0004+00 0/1 0/0 0/0 .rodata @3706 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3706 = 65536.0f; -COMPILER_STRIP_GATE(0x80BD3FFC, &lit_3706); -#pragma pop - /* 80BD342C-80BD3628 00016C 01FC+00 0/0 0/0 2/2 .text * HahenSet__15daObjCRVHAHEN_cF4cXyz4cXyz4cXyz4cXyzf */ -void daObjCRVHAHEN_c::HahenSet(cXyz param_0, cXyz param_1, cXyz param_2, cXyz param_3, - f32 param_4) { - // NONMATCHING +int daObjCRVHAHEN_c::HahenSet(cXyz i_param_1, cXyz i_param_2, cXyz i_param_3, cXyz i_param_4, + f32 duration) { + mDrawHahen = true; + mTimer = duration; + + for (int i = 0; i < 10; i++) { + mPos[i].set(i_param_2.x + cM_rndFX(i_param_1.x), i_param_2.y + cM_rndF(i_param_1.y), + i_param_2.z + cM_rndFX(i_param_1.z)); + mInitialPos[i].set(cM_rndF(1.0f) + 0.5f, cM_rndF(1.0f) + 0.5f, cM_rndF(1.0f) + 0.5f); + mVelocity[i].set(i_param_4.x + cM_rndFX(i_param_3.x), i_param_4.y + cM_rndF(i_param_3.y), + i_param_4.z + cM_rndF(i_param_3.z)); + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + + mDoMtx_stack_c::multVec(&mPos[i], &mPos[i]); + mDoMtx_stack_c::ZXYrotS(shape_angle); + mDoMtx_stack_c::multVec(&mVelocity[i], &mVelocity[i]); + + mRotSpeed[i].x = cM_rndFX(5000.0f); + mRotSpeed[i].y = cM_rndFX(5000.0f); + mRotation[i].x = cM_rndFX(65536.0f); + mRotation[i].y = cM_rndFX(65536.0f); + } + return 1; } /* 80BD3628-80BD36E4 000368 00BC+00 1/1 0/0 0/0 .text Wall_Check__15daObjCRVHAHEN_cF4cXyz4cXyz */ -void daObjCRVHAHEN_c::Wall_Check(cXyz param_0, cXyz param_1) { - // NONMATCHING +bool daObjCRVHAHEN_c::Wall_Check(cXyz i_origin, cXyz i_target) { + dBgS_LinChk line_check; + + cXyz linePos(i_origin.x + i_target.x, i_origin.y, i_origin.z + i_target.z); + + line_check.Set(&i_origin, &linePos, NULL); + + bool did_line_cross = dComIfG_Bgsp().LineCross(&line_check); + + if (did_line_cross == true) { + return true; + } else { + return false; + } + return did_line_cross; } -/* 80BD36E4-80BD3720 000424 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80BD4000-80BD4004 000010 0004+00 0/2 0/0 0/0 .rodata @3773 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3773 = -9.0f; -COMPILER_STRIP_GATE(0x80BD4000, &lit_3773); -#pragma pop - -/* 80BD4004-80BD4008 000014 0004+00 0/1 0/0 0/0 .rodata @3774 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3774 = 13.0f; -COMPILER_STRIP_GATE(0x80BD4004, &lit_3774); -#pragma pop - -/* 80BD4008-80BD400C 000018 0004+00 0/1 0/0 0/0 .rodata @3775 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3775 = -3.0f / 5.0f; -COMPILER_STRIP_GATE(0x80BD4008, &lit_3775); -#pragma pop - -/* 80BD400C-80BD4010 00001C 0004+00 0/1 0/0 0/0 .rodata @3776 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3776 = 4.0f / 5.0f; -COMPILER_STRIP_GATE(0x80BD400C, &lit_3776); -#pragma pop - /* 80BD3720-80BD38DC 000460 01BC+00 1/1 0/0 0/0 .text Hahen_Hakai__15daObjCRVHAHEN_cFii */ -void daObjCRVHAHEN_c::Hahen_Hakai(int param_0, int param_1) { - // NONMATCHING +void daObjCRVHAHEN_c::Hahen_Hakai(int i_start, int i_end) { + for (int i = i_start; i < i_end; ++i) { + if (mStatus[i] > 3) { + mPos[i].y = mGroundHeight; + mRotation[i].x = 0x4000; + } else { + mVelocity[i].y += +-9.0f; + Wall_Check(mPos[i], mVelocity[i]); + + // mPos[i].x = mPos[i].x + mVelocity[i].x; + // mPos[i].y = mPos[i].y + mVelocity[i].y; + // mPos[i].z = mPos[i].z + mVelocity[i].z; + + mPos[i].x += mVelocity[i].x; + mPos[i].y += mVelocity[i].y; + mPos[i].z += mVelocity[i].z; + + mRotation[i].x += mRotSpeed[i].x; + mRotation[i].y += mRotSpeed[i].y; + mRotation[i].z += mRotSpeed[i].z; + + if ((mGroundHeight + 13.0f) >= mPos[i].y) { + ++mStatus[i]; + mPos[i].y = mGroundHeight + 13.0f; + + mVelocity[i].y = mVelocity[i].y * -0.6f; + mVelocity[i].x = mVelocity[i].x * 0.8f; + mVelocity[i].z = mVelocity[i].z * 0.8f; + + // mVelocity[i].y *= -0.6f; + // mVelocity[i].x *= 0.8f; + // mVelocity[i].z *= 0.8f; + + mRotation[i].x = 0x4000; + mRotation[i].y = mRotation[i].y + mRotSpeed[i].y; + } + } + } } -/* ############################################################################################## */ -/* 80BD4010-80BD4018 000020 0004+04 0/2 0/0 0/0 .rodata @3836 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3836[4 + 4 /* padding */] = { - 0x00, - 0x00, - 0x00, - 0x00, - /* padding */ - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80BD4010, &lit_3836); -#pragma pop - -/* 80BD4018-80BD4020 000028 0008+00 0/1 0/0 0/0 .rodata @3837 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3837[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BD4018, &lit_3837); -#pragma pop - -/* 80BD4020-80BD4028 000030 0008+00 0/1 0/0 0/0 .rodata @3838 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3838[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BD4020, &lit_3838); -#pragma pop - -/* 80BD4028-80BD4030 000038 0008+00 0/1 0/0 0/0 .rodata @3839 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3839[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BD4028, &lit_3839); -#pragma pop - /* 80BD38DC-80BD3A9C 00061C 01C0+00 1/1 0/0 0/0 .text CheckCull__15daObjCRVHAHEN_cFv */ void daObjCRVHAHEN_c::CheckCull() { - // NONMATCHING + daPy_py_c* player_actor = daPy_getPlayerActorClass(); + cXyz& player_pos = fopAcM_GetPosition((fopAc_ac_c*)player_actor); + + int culled_num = 1; + for (int i = 0; i < 10; i++) { + if ((mPos[i].absXZ(player_pos) > mTimer) && !checkViewArea(&mPos[i])) { + culled_num++; + if (culled_num == 10) { + fopAcM_delete(this); + } + } + } } -/* ############################################################################################## */ -/* 80BD4030-80BD4034 000040 0004+00 0/1 0/0 0/0 .rodata @3852 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3852 = 608.0f; -COMPILER_STRIP_GATE(0x80BD4030, &lit_3852); -#pragma pop - -/* 80BD4034-80BD4038 000044 0004+00 0/1 0/0 0/0 .rodata @3853 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3853 = 448.0f; -COMPILER_STRIP_GATE(0x80BD4034, &lit_3853); -#pragma pop - /* 80BD3A9C-80BD3B20 0007DC 0084+00 1/1 0/0 0/0 .text checkViewArea__15daObjCRVHAHEN_cFP4cXyz */ -void daObjCRVHAHEN_c::checkViewArea(cXyz* param_0) { - // NONMATCHING +bool daObjCRVHAHEN_c::checkViewArea(cXyz* i_this) { + Vec proj; + mDoLib_project(i_this, &proj); + + bool ret = false; + + if (proj.x >= 0.0f && proj.x <= 608.0f && proj.y >= 0.0f && proj.y <= 448.0f) { + ret = true; + } + + return ret; } /* 80BD3B20-80BD3B74 000860 0054+00 1/1 0/0 0/0 .text Execute__15daObjCRVHAHEN_cFv */ -void daObjCRVHAHEN_c::Execute() { - // NONMATCHING +int daObjCRVHAHEN_c::Execute() { + if (mDrawHahen) { + daObjCRVHAHEN_c::Hahen_Hakai(0, 10); + } + + daObjCRVHAHEN_c::setBaseMtx(); + daObjCRVHAHEN_c::CheckCull(); + + return 1; } /* 80BD3B74-80BD3C0C 0008B4 0098+00 1/1 0/0 0/0 .text Delete__15daObjCRVHAHEN_cFv */ -void daObjCRVHAHEN_c::Delete() { - // NONMATCHING +int daObjCRVHAHEN_c::Delete() { + if (mInitialized) { + J3DModelData* model_data = (J3DModelData*)dRes_control_c::getRes( + l_arcName, "CaravanPiece.bmd", g_dComIfG_gameInfo.mResControl.mObjectInfo, 0x80); + dComIfGp_removeSimpleModel(model_data, (int)(char)current.roomNo); + } + + dComIfG_resDelete(&mPhase, l_arcName); + + return 1; } /* 80BD3C0C-80BD3CA0 00094C 0094+00 1/1 0/0 0/0 .text setBaseMtx__15daObjCRVHAHEN_cFv */ void daObjCRVHAHEN_c::setBaseMtx() { - // NONMATCHING + for (int i = 0; i < 10; i++) { + mDoMtx_stack_c::transS(mPos[i]); + mDoMtx_stack_c::ZXYrotM(mRotation[i]); + mDoMtx_stack_c::scaleM(mInitialPos[i]); + mpModel[i]->setBaseTRMtx(mDoMtx_stack_c::get()); + } +} + +inline int daObjCRVHAHEN_c::Draw() { + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + + for (int i = 0, j = i; i < 10; i = i + 1) { + g_env_light.setLightTevColorType_MAJI(mpModel[i], &tevStr); + } + + dComIfGd_setListBG(); + + if (mDrawHahen) { + for (int i = 0; i < 10; i = i + 1) { + s8 roomno = fopAcM_GetRoomNo(this); + dComIfGp_entrySimpleModel(mpModel[i], roomno); + } + } + + dComIfGd_setList(); + + return 1; } /* 80BD3CA0-80BD3D9C 0009E0 00FC+00 1/0 0/0 0/0 .text daObjCRVHAHEN_Draw__FP15daObjCRVHAHEN_c */ -static void daObjCRVHAHEN_Draw(daObjCRVHAHEN_c* param_0) { - // NONMATCHING +static int daObjCRVHAHEN_Draw(daObjCRVHAHEN_c* i_this) { + return i_this->Draw(); } -/* 80BD3D9C-80BD3DBC 000ADC 0020+00 2/1 0/0 0/0 .text daObjCRVHAHEN_Execute__FP15daObjCRVHAHEN_c - */ -static void daObjCRVHAHEN_Execute(daObjCRVHAHEN_c* param_0) { - // NONMATCHING +/* 80BD3D9C-80BD3DBC 000ADC 0020+00 2/1 0/0 0/0 .text daObjCRVHAHEN_Execute__FP15daObjCRVHAHEN_c */ +static int daObjCRVHAHEN_Execute(daObjCRVHAHEN_c* i_this) { + i_this->Execute(); } -/* ############################################################################################## */ -/* 80BD4038-80BD403C 000048 0004+00 0/1 0/0 0/0 .rodata @3993 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3993 = -1000.0f; -COMPILER_STRIP_GATE(0x80BD4038, &lit_3993); -#pragma pop - -/* 80BD403C-80BD4040 00004C 0004+00 0/1 0/0 0/0 .rodata @3994 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3994 = -500.0f; -COMPILER_STRIP_GATE(0x80BD403C, &lit_3994); -#pragma pop - -/* 80BD4040-80BD4044 000050 0004+00 0/1 0/0 0/0 .rodata @3995 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3995 = 1000.0f; -COMPILER_STRIP_GATE(0x80BD4040, &lit_3995); -#pragma pop - -/* 80BD4044-80BD4048 000054 0004+00 0/1 0/0 0/0 .rodata @3996 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3996 = 500.0f; -COMPILER_STRIP_GATE(0x80BD4044, &lit_3996); -#pragma pop - /* 80BD3DBC-80BD3F9C 000AFC 01E0+00 1/1 0/0 0/0 .text create__15daObjCRVHAHEN_cFv */ -void daObjCRVHAHEN_c::create() { - // NONMATCHING +int daObjCRVHAHEN_c::create() { + fopAcM_SetupActor(this, daObjCRVHAHEN_c); + + + + int phase_state = dComIfG_resLoad(&mPhase, l_arcName); + + if (phase_state == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x1320)) { + return cPhs_ERROR_e; + } + mDrawHahen = 0; + gravity = -9.0f; + J3DModelData* model_data = (J3DModelData*)dRes_control_c::getRes( + l_arcName, "CaravanPiece.bmd", g_dComIfG_gameInfo.mResControl.mObjectInfo, 0x80); + dComIfGp_addSimpleModel(model_data, (int)(char)current.roomNo, '\0'); + mInitialized = true; + mGroundHeight = current.pos.y; + fopAcM_setCullSizeBox(this, -1000.0, -500.0, -1000.0, 1000.0, 500.0, 1000.0); + daObjCRVHAHEN_Execute(this); + } + return phase_state; } -/* 80BD3F9C-80BD3FD8 000CDC 003C+00 1/1 0/0 0/0 .text __dt__5csXyzFv */ -// csXyz::~csXyz() { -extern "C" void __dt__5csXyzFv() { - // NONMATCHING -} - -/* 80BD3FD8-80BD3FDC 000D18 0004+00 1/1 0/0 0/0 .text __ct__5csXyzFv */ -// csXyz::csXyz() { -extern "C" void __ct__5csXyzFv() { - /* empty function */ -} - -/* 80BD3FDC-80BD3FE0 000D1C 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */ -// cXyz::cXyz() { -extern "C" void __ct__4cXyzFv() { - /* empty function */ -} - -/* 80BD3FE0-80BD3FE8 000D20 0008+00 1/0 0/0 0/0 .text daObjCRVHAHEN_IsDelete__FP15daObjCRVHAHEN_c - */ -static bool daObjCRVHAHEN_IsDelete(daObjCRVHAHEN_c* param_0) { +/* 80BD3FE0-80BD3FE8 000D20 0008+00 1/0 0/0 0/0 .text daObjCRVHAHEN_IsDelete__FP15daObjCRVHAHEN_c */ +static int daObjCRVHAHEN_IsDelete(daObjCRVHAHEN_c* i_this) { return true; } /* ############################################################################################## */ /* 80BD4068-80BD4088 -00001 0020+00 1/0 0/0 0/0 .data l_daObjCRVHAHEN_Method */ static actor_method_class l_daObjCRVHAHEN_Method = { - (process_method_func)daObjCRVHAHEN_Create__FP10fopAc_ac_c, - (process_method_func)daObjCRVHAHEN_Delete__FP15daObjCRVHAHEN_c, - (process_method_func)daObjCRVHAHEN_Execute__FP15daObjCRVHAHEN_c, - (process_method_func)daObjCRVHAHEN_IsDelete__FP15daObjCRVHAHEN_c, - (process_method_func)daObjCRVHAHEN_Draw__FP15daObjCRVHAHEN_c, + (process_method_func)daObjCRVHAHEN_Create, (process_method_func)daObjCRVHAHEN_Delete, + (process_method_func)daObjCRVHAHEN_Execute, (process_method_func)daObjCRVHAHEN_IsDelete, + (process_method_func)daObjCRVHAHEN_Draw, }; /* 80BD4088-80BD40B8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_CRVHAHEN */ extern actor_process_profile_definition g_profile_Obj_CRVHAHEN = { - fpcLy_CURRENT_e, // mLayerID - 3, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Obj_CRVHAHEN, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daObjCRVHAHEN_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 468, // mPriority - &l_daObjCRVHAHEN_Method, // sub_method - 0x00040000, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType + fpcLy_CURRENT_e, // mLayerID + 3, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Obj_CRVHAHEN, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daObjCRVHAHEN_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 468, // mPriority + &l_daObjCRVHAHEN_Method, // sub_method + 0x00040000, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 80BD4048-80BD4048 000058 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */