diff options
Diffstat (limited to 'src/d/actor/d_a_obj_pillar.cpp')
| -rw-r--r-- | src/d/actor/d_a_obj_pillar.cpp | 951 |
1 files changed, 419 insertions, 532 deletions
diff --git a/src/d/actor/d_a_obj_pillar.cpp b/src/d/actor/d_a_obj_pillar.cpp index 8edb619e11..5256261dec 100644 --- a/src/d/actor/d_a_obj_pillar.cpp +++ b/src/d/actor/d_a_obj_pillar.cpp @@ -4,139 +4,33 @@ */ #include "d/actor/d_a_obj_pillar.h" -#include "d/d_cc_d.h" -#include "dol2asm.h" - - - -// -// Forward References: -// - -extern "C" void __ct__14daPillar_HIO_cFv(); -extern "C" void __dt__14mDoHIO_entry_cFv(); -extern "C" static void rideCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c(); -extern "C" void setBaseMtx__10daPillar_cFv(); -extern "C" void Create__10daPillar_cFv(); -extern "C" void CreateHeap__10daPillar_cFv(); -extern "C" void create1st__10daPillar_cFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void checkAttacked__10daPillar_cFv(); -extern "C" void on_switch__10daPillar_cFv(); -extern "C" void checkShake__10daPillar_cFv(); -extern "C" void setShake_rcrash__10daPillar_cFv(); -extern "C" void setShake_strong__10daPillar_cFv(); -extern "C" void setShake_weak__10daPillar_cFv(); -extern "C" void switch_proc_call__10daPillar_cFv(); -extern "C" void actionSwOnWait__10daPillar_cFv(); -extern "C" void actionSwOn__10daPillar_cFv(); -extern "C" void actionEnd__10daPillar_cFv(); -extern "C" void Execute__10daPillar_cFPPA3_A4_f(); -extern "C" void Draw__10daPillar_cFv(); -extern "C" void Delete__10daPillar_cFv(); -extern "C" static void daPillar_create1st__FP10daPillar_c(); -extern "C" static void daPillar_MoveBGDelete__FP10daPillar_c(); -extern "C" static void daPillar_MoveBGExecute__FP10daPillar_c(); -extern "C" static void daPillar_MoveBGDraw__FP10daPillar_c(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void __dt__14daPillar_HIO_cFv(); -extern "C" void __sinit_d_a_obj_pillar_cpp(); -extern "C" extern char const* const d_a_obj_pillar__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void fopAcM_rollPlayerCrash__FPC10fopAc_ac_cfUlffif(); -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 onSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void StartQuake__12dVibration_cFii4cXyz(); -extern "C" void StopQuake__12dVibration_cFi(); -extern "C" void dBgS_MoveBGProc_Typical__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__16dBgS_MoveBgActorFv(); -extern "C" bool IsDelete__16dBgS_MoveBgActorFv(); -extern "C" bool ToFore__16dBgS_MoveBgActorFv(); -extern "C" bool ToBack__16dBgS_MoveBgActorFv(); -extern "C" void -MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f(); -extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv(); -extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv(); -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 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 Set__4cCcSFP8cCcD_Obj(); -extern "C" void cM_rndF__Ff(); -extern "C" void cM_rndFX__Ff(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void cLib_addCalcAngleS__FPsssss(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __dl__FPv(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -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" u8 sincosTable___5JMath[65536]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ +#include "d/actor/d_a_player.h" +#include "d/d_com_inf_game.h" +#include "d/actor/d_a_obj_carry.h" +#include "SSystem/SComponent/c_math.h" +#include "d/d_bg_w.h" + +#define ACTION_WAIT 0 +#define ACTION_SWON 1 +#define ACTION_END 2 + +#define SHAKE_MODE_WAIT 0 +#define SHAKE_MODE_START 100 +#define SHAKE_MODE_RESET_ANGLE 101 +#define SHAKE_MODE_QUAKE 102 +#define SHAKE_MODE_END 103 + /* 80CB09D4-80CB09DC 000000 0008+00 7/7 0/0 0/0 .rodata l_bmd */ -SECTION_RODATA static u8 const l_bmd[8] = { - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, -}; -COMPILER_STRIP_GATE(0x80CB09D4, &l_bmd); +static const int l_bmd[] = {5, 5}; /* 80CB09DC-80CB09E4 000008 0008+00 1/1 0/0 0/0 .rodata l_dzb */ -SECTION_RODATA static u8 const l_dzb[8] = { - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, -}; -COMPILER_STRIP_GATE(0x80CB09DC, &l_dzb); +static const int l_dzb[] = {8, 8}; /* 80CB09E4-80CB09EC 000010 0008+00 1/1 0/0 0/0 .rodata l_shadowBmd */ -SECTION_RODATA static u8 const l_shadowBmd[8] = { - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, -}; -COMPILER_STRIP_GATE(0x80CB09E4, &l_shadowBmd); +static const int l_shadowBmd[] = {4, 4}; /* 80CB09EC-80CB09F4 000018 0008+00 1/1 0/0 0/0 .rodata l_heap_size */ -SECTION_RODATA static u8 const l_heap_size[8] = { - 0x00, 0x00, 0x18, 0x30, 0x00, 0x00, 0x0C, 0x00, -}; -COMPILER_STRIP_GATE(0x80CB09EC, &l_heap_size); +static const u32 l_heap_size[] = {0x1830, 0xC00}; /* 80CB09F4-80CB0A38 000020 0044+00 1/1 0/0 0/0 .rodata l_cyl_src */ const static dCcD_SrcCyl l_cyl_src = { @@ -153,499 +47,492 @@ const static dCcD_SrcCyl l_cyl_src = { } // mCyl }; +#define SHAKE_DATA_CRASH_FIRST 0 +#define SHAKE_DATA_STRONG 1 +#define SHAKE_DATA_WEAK 2 +#define SHAKE_DATA_CRASH 3 + /* 80CB0A38-80CB0A68 000064 0030+00 2/4 0/0 0/0 .rodata l_shake_data */ -SECTION_RODATA static u8 const l_shake_data[48] = { - 0x05, 0x00, 0x03, 0x20, 0x00, 0x14, 0x1B, 0x58, 0x01, 0x90, 0x00, 0x41, 0xFF, 0x00, 0x02, 0x58, - 0x00, 0x14, 0x17, 0x70, 0x01, 0x2C, 0x00, 0x28, 0xFF, 0x00, 0x01, 0x90, 0x00, 0x14, 0x13, 0x88, - 0x00, 0xC8, 0x00, 0x1E, 0x05, 0x00, 0x03, 0x20, 0x00, 0x78, 0x1B, 0x58, 0x00, 0x1E, 0x00, 0x0F, -}; -COMPILER_STRIP_GATE(0x80CB0A38, &l_shake_data); - -/* 80CB0A68-80CB0A6C 000094 0004+00 0/6 0/0 0/0 .rodata @3664 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3664[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80CB0A68, &lit_3664); -#pragma pop - -/* 80CB0A6C-80CB0A70 000098 0004+00 0/1 0/0 0/0 .rodata @3665 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3665 = -7.0f / 10.0f; -COMPILER_STRIP_GATE(0x80CB0A6C, &lit_3665); -#pragma pop - -/* 80CB0ACC-80CB0ACC 0000F8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80CB0ACC = "K_mbhasi0"; -SECTION_DEAD static char const* const stringBase_80CB0AD6 = "K_mbhasi1"; -#pragma pop - -/* 80CB0AE8-80CB0AF4 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */ -SECTION_DATA static u8 cNullVec__6Z2Calc[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static const daPillar_c::sdata_t l_shake_data[] = { + /* CRASH FIRST */ {5, 0, 800, 20, 7000, 400, 65}, + /* STRONG */ {255, 0, 600, 20, 6000, 300, 40}, + /* WEAK */ {255, 0, 400, 20, 5000, 200, 30}, + /* CRASH */ {5, 0, 800, 120, 7000, 30, 15}, }; -/* 80CB0AF4-80CB0B08 00000C 0004+10 0/0 0/0 0/0 .data @1787 */ -#pragma push -#pragma force_active on -SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { - 0x02000201, - /* padding */ - 0x40080000, - 0x00000000, - 0x3FE00000, - 0x00000000, -}; -#pragma pop +UNK_REL_DATA /* 80CB0B08-80CB0B10 -00001 0008+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName[2] = { - (void*)&d_a_obj_pillar__stringBase0, - (void*)(((char*)&d_a_obj_pillar__stringBase0) + 0xA), -}; - -/* 80CB0B10-80CB0B1C -00001 000C+00 0/1 0/0 0/0 .data @4193 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4193[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionSwOnWait__10daPillar_cFv, -}; -#pragma pop - -/* 80CB0B1C-80CB0B28 -00001 000C+00 0/1 0/0 0/0 .data @4194 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4194[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionSwOn__10daPillar_cFv, -}; -#pragma pop - -/* 80CB0B28-80CB0B34 -00001 000C+00 0/1 0/0 0/0 .data @4195 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4195[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionEnd__10daPillar_cFv, -}; -#pragma pop - -/* 80CB0B34-80CB0B58 00004C 0024+00 0/1 0/0 0/0 .data l_func$4192 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_func[36] = { - 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, -}; -#pragma pop - -/* 80CB0B58-80CB0B78 -00001 0020+00 1/0 0/0 0/0 .data daPillar_METHODS */ -static actor_method_class daPillar_METHODS = { - (process_method_func)daPillar_create1st__FP10daPillar_c, - (process_method_func)daPillar_MoveBGDelete__FP10daPillar_c, - (process_method_func)daPillar_MoveBGExecute__FP10daPillar_c, - 0, - (process_method_func)daPillar_MoveBGDraw__FP10daPillar_c, -}; - -/* 80CB0B78-80CB0BA8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Pillar */ -extern actor_process_profile_definition g_profile_Obj_Pillar = { - fpcLy_CURRENT_e, // mLayerID - 3, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Obj_Pillar, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daPillar_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 432, // mPriority - &daPillar_METHODS, // sub_method - 0x00044100, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 80CB0BA8-80CB0BB4 0000C0 000C+00 2/2 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, -}; - -/* 80CB0BB4-80CB0BC0 0000CC 000C+00 1/1 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, -}; - -/* 80CB0BC0-80CB0BCC 0000D8 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, -}; - -/* 80CB0BCC-80CB0BD8 0000E4 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, -}; - -/* 80CB0BD8-80CB0C00 0000F0 0028+00 2/2 0/0 0/0 .data __vt__10daPillar_c */ -SECTION_DATA extern void* __vt__10daPillar_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__10daPillar_cFv, - (void*)Create__10daPillar_cFv, - (void*)Execute__10daPillar_cFPPA3_A4_f, - (void*)Draw__10daPillar_cFv, - (void*)Delete__10daPillar_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; - -/* 80CB0C00-80CB0C0C 000118 000C+00 2/2 0/0 0/0 .data __vt__14daPillar_HIO_c */ -SECTION_DATA extern void* __vt__14daPillar_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14daPillar_HIO_cFv, -}; - -/* 80CB0C0C-80CB0C18 000124 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, +static char* l_arcName[] = { + "K_mbhasi0", + "K_mbhasi1", }; /* 80CAF32C-80CAF3B0 0000EC 0084+00 1/1 0/0 0/0 .text __ct__14daPillar_HIO_cFv */ daPillar_HIO_c::daPillar_HIO_c() { - // NONMATCHING + mShakeData = l_shake_data[SHAKE_DATA_CRASH_FIRST]; + field_0x1c = 0.0f; + field_0x20 = -0.7f; + field_0x24 = 0; + field_0x25 = 0; + field_0x26 = 0; + mIsAdjust = false; } -/* 80CAF3B0-80CAF3F8 000170 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 -} - -/* ############################################################################################## */ -/* 80CB0A70-80CB0A74 00009C 0004+00 0/1 0/0 0/0 .rodata @3681 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3681 = 8192.0f; -COMPILER_STRIP_GATE(0x80CB0A70, &lit_3681); -#pragma pop - -/* 80CB0A74-80CB0A78 0000A0 0004+00 0/1 0/0 0/0 .rodata @3682 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3682 = 1300.0f; -COMPILER_STRIP_GATE(0x80CB0A74, &lit_3682); -#pragma pop - -/* 80CB0A78-80CB0A7C 0000A4 0004+00 1/5 0/0 0/0 .rodata @3683 */ -SECTION_RODATA static f32 const lit_3683 = 1.0f; -COMPILER_STRIP_GATE(0x80CB0A78, &lit_3683); - -/* 80CB0A7C-80CB0A84 0000A8 0004+04 0/1 0/0 0/0 .rodata @3684 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3684[1 + 1 /* padding */] = { - 30.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80CB0A7C, &lit_3684); -#pragma pop - /* 80CAF3F8-80CAF4B4 0001B8 00BC+00 1/1 0/0 0/0 .text * rideCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c */ -static void rideCallBack(dBgW* param_0, fopAc_ac_c* param_1, fopAc_ac_c* param_2) { - // NONMATCHING +static void rideCallBack(dBgW* i_bgw, fopAc_ac_c* i_this, fopAc_ac_c* i_rideActor) { + daPy_py_c* player = dComIfGp_getLinkPlayer(); + if (((daPillar_c*)i_this)->mIsRollAttack && fopAcM_GetName(i_rideActor) == PROC_Obj_Carry) { + s16 var_r28 = cM_rndF(1300.0f) + 8192.0f; + if (cM_rndFX(1.0f) < 0.0f) { + var_r28 = -var_r28; + } + + i_rideActor->current.angle.y = player->current.angle.y + 0x7FFF + var_r28; + i_rideActor->speedF = 30.0f; + i_rideActor->speed.y = 1.0f; + ((daObjCarry_c*)i_rideActor)->setDrop(); + } } -/* ############################################################################################## */ -/* 80CB0A84-80CB0A8C 0000B0 0008+00 1/2 0/0 0/0 .rodata @3716 */ -SECTION_RODATA static u8 const lit_3716[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CB0A84, &lit_3716); - /* 80CAF4B4-80CAF5EC 000274 0138+00 2/2 0/0 0/0 .text setBaseMtx__10daPillar_cFv */ void daPillar_c::setBaseMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle.x, mRotY, shape_angle.z); + mDoMtx_stack_c::YrotM(-mRotY); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), mBgMtx); + + if (mpShadowModel != NULL) { + mDoMtx_stack_c::transS(current.pos.x, current.pos.y + 1.0f, current.pos.z); + mDoMtx_stack_c::YrotM(shape_angle.y + shape_angle.x * cM_ssin(mRotY)); + mpShadowModel->setBaseTRMtx(mDoMtx_stack_c::get()); + } } /* 80CAF5EC-80CAF7A8 0003AC 01BC+00 1/0 0/0 0/0 .text Create__10daPillar_cFv */ -void daPillar_c::Create() { - // NONMATCHING +int daPillar_c::Create() { + setBaseMtx(); + + if (mpShadowModel != NULL) { + fopAcM_SetMtx(this, mpShadowModel->getBaseTRMtx()); + } else { + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + } + + mColliderStts.Init(0xFF, 0xFF, this); + mCylCollider.Set(l_cyl_src); + mCylCollider.SetStts(&mColliderStts); + + J3DJoint* pjoint = mpModel->getModelData()->getJointNodePointer(0); + cXyz cull_min(*pjoint->getMin()); + cXyz cull_max(*pjoint->getMax()); + + if (mpShadowModel != NULL) { + J3DJoint* pshadow_joint = mpShadowModel->getModelData()->getJointNodePointer(0); + + if (cull_min.x > pshadow_joint->getMin()->x) { + cull_min.x = pshadow_joint->getMin()->x; + } + + if (cull_min.y > pshadow_joint->getMin()->y) { + cull_min.y = pshadow_joint->getMin()->y; + } + + if (cull_min.z > pshadow_joint->getMin()->z) { + cull_min.z = pshadow_joint->getMin()->z; + } + + if (cull_max.x < pshadow_joint->getMax()->x) { + cull_max.x = pshadow_joint->getMax()->x; + } + + if (cull_max.y < pshadow_joint->getMax()->y) { + cull_max.y = pshadow_joint->getMax()->y; + } + + if (cull_max.z < pshadow_joint->getMax()->z) { + cull_max.z = pshadow_joint->getMax()->z; + } + } + + J3DTransformInfo* pjoint_transform = &pjoint->getTransformInfo(); + cull_min.y += pjoint_transform->mTranslate.y; + cull_max.y += pjoint_transform->mTranslate.y; + fopAcM_setCullSizeBox(this, cull_min.x, cull_min.y, cull_min.z, cull_max.x, cull_max.y, cull_max.z); + + u16 timer = getTimer(); + if (timer == 0 || timer == 255) { + mTimer = 4; + } else { + mTimer = timer; + } + + mShake = SHAKE_NONE; + mpBgW->SetRideCallback(rideCallBack); + return 1; } /* 80CAF7A8-80CAF8A4 000568 00FC+00 1/0 0/0 0/0 .text CreateHeap__10daPillar_cFv */ -void daPillar_c::CreateHeap() { - // NONMATCHING +int daPillar_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName[mMdlType], l_bmd[mMdlType]); + JUT_ASSERT(modelData != 0); + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpModel == NULL) { + return 0; + } + + if (checkShadow() == 0xFF) { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName[mMdlType], l_shadowBmd[mMdlType]); + JUT_ASSERT(modelData != 0); + mpShadowModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpShadowModel == NULL) { + return 0; + } + } + + return 1; } /* 80CAF8A4-80CAFA58 000664 01B4+00 1/1 0/0 0/0 .text create1st__10daPillar_cFv */ -void daPillar_c::create1st() { - // NONMATCHING -} - -/* 80CAFA58-80CAFAA0 000818 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 80CAFAA0-80CAFAE8 000860 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80CAFAE8-80CAFB44 0008A8 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING +int daPillar_c::create1st() { + fopAcM_SetupActor(this, daPillar_c); + + if (!mIsPrmInit) { + mIsPrmInit = true; + field_0x73c = home.angle.x; + field_0x73e = home.angle.z; + mMdlType = field_0x73e & 0xF; + + home.angle.z = 0; + home.angle.x = 0; + current.angle.z = 0; + current.angle.x = 0; + shape_angle.z = 0; + shape_angle.x = 0; + } + + int phase_state = dComIfG_resLoad(&mPhase, l_arcName[mMdlType]); + if (phase_state == cPhs_COMPLEATE_e) { + phase_state = MoveBGCreate(l_arcName[mMdlType], l_dzb[mMdlType], dBgS_MoveBGProc_Typical, l_heap_size[mMdlType], NULL); + if (phase_state == cPhs_ERROR_e) { + return phase_state; + } + } + + return phase_state; } /* 80CAFB44-80CAFC08 000904 00C4+00 2/2 0/0 0/0 .text checkAttacked__10daPillar_cFv */ -void daPillar_c::checkAttacked() { - // NONMATCHING +bool daPillar_c::checkAttacked() { + u8 swbit = getSwbit(); + if (swbit != 0xFF) { + if (getType() == 0xFF) { + return fopAcM_isSwitch(this, swbit); + } + + if (getType() == 0) { + bool var_r27 = false; + for (int i = 0; i < 4; i++) { + if (fopAcM_isSwitch(this, swbit + i)) { + var_r27 = true; + } + } + + return var_r27; + } + } + + return false; } -/* ############################################################################################## */ -/* 80CB0A8C-80CB0A90 0000B8 0004+00 0/1 0/0 0/0 .rodata @4060 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4060 = 0x3BB40000; -COMPILER_STRIP_GATE(0x80CB0A8C, &lit_4060); -#pragma pop - -/* 80CB0A90-80CB0A94 0000BC 0004+00 0/1 0/0 0/0 .rodata @4061 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4061 = 0x43B3F333; -COMPILER_STRIP_GATE(0x80CB0A90, &lit_4061); -#pragma pop - -/* 80CB0A94-80CB0A9C 0000C0 0004+04 0/1 0/0 0/0 .rodata @4062 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4062[1 + 1 /* padding */] = { - 24.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80CB0A94, &lit_4062); -#pragma pop - /* 80CAFC08-80CAFD64 0009C8 015C+00 1/1 0/0 0/0 .text on_switch__10daPillar_cFv */ void daPillar_c::on_switch() { - // NONMATCHING + u8 swbit = getSwbit(); + if (swbit != 0xFF) { + if (getType() == 0xFF) { + fopAcM_onSwitch(this, swbit); + } else if (getType() == 0) { + bool var_r27 = false; + for (int i = 0; i < 4; i++) { + if (fopAcM_isSwitch(this, swbit + i)) { + var_r27 = true; + } + } + + if (!var_r27) { + f32 var_f31 = cM_sht2d(field_0x734); + if (var_f31 < 0.0f) { + var_f31 = 359.9f + var_f31; + } + + u16 var_r23 = (u16)(var_f31 / 24.0f + 1.0f); + u16 var_r26 = 1; + for (int i = 0; i < 4; i++) { + if (var_r23 & var_r26) { + fopAcM_onSwitch(this, swbit + i); + } + + var_r26 = (var_r26 << 1); + } + } + } + } } -/* ############################################################################################## */ -/* 80CB0A9C-80CB0AA4 0000C8 0008+00 0/1 0/0 0/0 .rodata @4116 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4116[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CB0A9C, &lit_4116); -#pragma pop - -/* 80CB0AA4-80CB0AAC 0000D0 0008+00 0/1 0/0 0/0 .rodata @4117 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4117[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CB0AA4, &lit_4117); -#pragma pop - -/* 80CB0AAC-80CB0AB4 0000D8 0008+00 0/1 0/0 0/0 .rodata @4118 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4118[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CB0AAC, &lit_4118); -#pragma pop - -/* 80CB0AB4-80CB0AB8 0000E0 0004+00 0/1 0/0 0/0 .rodata @4119 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4119 = 150.0f; -COMPILER_STRIP_GATE(0x80CB0AB4, &lit_4119); -#pragma pop - -/* 80CB0AB8-80CB0ABC 0000E4 0004+00 0/1 0/0 0/0 .rodata @4120 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4120 = 220.0f; -COMPILER_STRIP_GATE(0x80CB0AB8, &lit_4120); -#pragma pop - -/* 80CB0ACC-80CB0ACC 0000F8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80CB0AE0 = "D_MN05"; -#pragma pop - /* 80CAFD64-80CAFF60 000B24 01FC+00 1/1 0/0 0/0 .text checkShake__10daPillar_cFv */ -void daPillar_c::checkShake() { - // NONMATCHING +int daPillar_c::checkShake() { + daPy_py_c* player = daPy_getPlayerActorClass(); + f32 player_dist = player->current.pos.abs(current.pos); + f32 attack_range = 150.0f; + + if (daPy_py_c::i_checkNowWolf()) { + attack_range = 220.0f; + } + + if (player_dist < attack_range && (player->checkFrontRollCrash() || player->checkWolfAttackReverse())) { + if (strcmp(dComIfGp_getStartStageName(), "D_MN05") == 0 && fopAcM_GetRoomNo(this) == 2) { + return SHAKE_CRASH_LV1; + } else { + return SHAKE_CRASH; + } + } else { + if (mShake != SHAKE_NONE) { + return mShake; + } + + if (mCylCollider.ChkTgHit()) { + cCcD_Obj* hitobj = mCylCollider.GetTgHitObj(); + if (hitobj != NULL && hitobj->ChkAtType(AT_TYPE_IRON_BALL)) { + return SHAKE_IRONBALL; + } + } + } + + return SHAKE_NONE; } -/* ############################################################################################## */ -/* 80CB0ABC-80CB0AC0 0000E8 0004+00 0/1 0/0 0/0 .rodata @4178 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4178 = -1.0f; -COMPILER_STRIP_GATE(0x80CB0ABC, &lit_4178); -#pragma pop - /* 80CAFF60-80CB01E0 000D20 0280+00 1/1 0/0 0/0 .text setShake_rcrash__10daPillar_cFv */ void daPillar_c::setShake_rcrash() { - // NONMATCHING + daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer(); + u8 swbit = getSwbit(); + + if (strcmp(dComIfGp_getStartStageName(), "D_MN05") == 0 && fopAcM_GetRoomNo(this) == 2 && fopAcM_isSwitch(this, swbit)) { + mShakeData = l_shake_data[SHAKE_DATA_CRASH]; + mQuakeTimer = 0; + mShakeMode = SHAKE_MODE_START; + fopAcM_seStart(this, Z2SE_OBJ_COLUMN_SHAKE_HARD, 0); + } else { + mShakeData = l_shake_data[SHAKE_DATA_CRASH_FIRST]; + + if (strcmp(dComIfGp_getStartStageName(), "D_MN05") == 0 && fopAcM_GetRoomNo(this) == 2) { + fopAcM_seStart(this, Z2SE_OBJ_COLUMN_SHAKE_FIRST, 0); + } else { + fopAcM_seStart(this, Z2SE_OBJ_MK_COLUMN_SHAKE, 0); + } + } + + shape_angle.x = mShakeData.mInitAngleX; + dComIfGp_getVibration().StartShock(mShakeData.mPower, 15, cXyz(0.0f, 1.0f, 0.0f)); + mIsRollAttack = true; + + if (!checkAttacked()) { + field_0x734 = player->shape_angle.y; + } } /* 80CB01E0-80CB022C 000FA0 004C+00 1/1 0/0 0/0 .text setShake_strong__10daPillar_cFv */ void daPillar_c::setShake_strong() { - // NONMATCHING + mShakeData = l_shake_data[SHAKE_DATA_STRONG]; + shape_angle.x = mShakeData.mInitAngleX; } /* 80CB022C-80CB0278 000FEC 004C+00 1/1 0/0 0/0 .text setShake_weak__10daPillar_cFv */ void daPillar_c::setShake_weak() { - // NONMATCHING + mShakeData = l_shake_data[SHAKE_DATA_WEAK]; + shape_angle.x = mShakeData.mInitAngleX; } -/* ############################################################################################## */ -/* 80CB0C20-80CB0C2C 000008 000C+00 1/1 0/0 0/0 .bss @3657 */ -static u8 lit_3657[12]; - /* 80CB0C2C-80CB0C54 000014 0028+00 2/2 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[40]; - -/* 80CB0C54-80CB0C58 00003C 0004+00 1/1 0/0 0/0 .bss None */ -static u8 data_80CB0C54[4]; +static daPillar_HIO_c l_HIO; /* 80CB0278-80CB031C 001038 00A4+00 1/1 0/0 0/0 .text switch_proc_call__10daPillar_cFv */ void daPillar_c::switch_proc_call() { - // NONMATCHING + typedef void (daPillar_c::*actionFunc)(); + static actionFunc l_func[] = { + &daPillar_c::actionSwOnWait, + &daPillar_c::actionSwOn, + &daPillar_c::actionEnd, + }; + + (this->*l_func[mAction])(); } /* 80CB031C-80CB0378 0010DC 005C+00 1/0 0/0 0/0 .text actionSwOnWait__10daPillar_cFv */ void daPillar_c::actionSwOnWait() { - // NONMATCHING + if (mIsRollAttack) { + if (checkAttacked()) { + OS_REPORT("toACTION_END\n"); + setAction(ACTION_END); + } else { + OS_REPORT("toSWON\n"); + setAction(ACTION_SWON); + actionSwOn(); + } + } } /* 80CB0378-80CB03CC 001138 0054+00 2/1 0/0 0/0 .text actionSwOn__10daPillar_cFv */ void daPillar_c::actionSwOn() { - // NONMATCHING + OS_REPORT("swon:mTimer<%d>\n", mTimer); + if (mTimer > 0) { + mTimer--; + } else if (mTimer == 0) { + on_switch(); + setAction(ACTION_END); + } } /* 80CB03CC-80CB03D0 00118C 0004+00 1/0 0/0 0/0 .text actionEnd__10daPillar_cFv */ -void daPillar_c::actionEnd() { - /* empty function */ -} - -/* ############################################################################################## */ -/* 80CB0AC0-80CB0AC4 0000EC 0004+00 0/1 0/0 0/0 .rodata @4265 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4265 = 85.0f; -COMPILER_STRIP_GATE(0x80CB0AC0, &lit_4265); -#pragma pop - -/* 80CB0AC4-80CB0AC8 0000F0 0004+00 0/1 0/0 0/0 .rodata @4266 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4266 = 200.0f; -COMPILER_STRIP_GATE(0x80CB0AC4, &lit_4266); -#pragma pop - -/* 80CB0AC8-80CB0ACC 0000F4 0004+00 0/1 0/0 0/0 .rodata @4267 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4267 = -100.0f; -COMPILER_STRIP_GATE(0x80CB0AC8, &lit_4267); -#pragma pop +void daPillar_c::actionEnd() {} /* 80CB03D0-80CB0658 001190 0288+00 1/0 0/0 0/0 .text Execute__10daPillar_cFPPA3_A4_f */ -void daPillar_c::Execute(f32 (**param_0)[3][4]) { - // NONMATCHING +int daPillar_c::Execute(Mtx** param_0) { + fopAcM_rollPlayerCrash(this, l_HIO.field_0x1c + 85.0f, 0xD, 200.0f, -100.0f, TRUE, l_HIO.field_0x20); + mIsRollAttack = false; + + switch (checkShake()) { + case SHAKE_CRASH: + case SHAKE_CRASH_LV1: + case SHAKE_IRONBALL: + setShake_rcrash(); + break; + case SHAKE_STRONG: + setShake_strong(); + break; + case SHAKE_WEAK: + setShake_weak(); + break; + } + + mShake = SHAKE_NONE; + + switch (mShakeMode) { + case SHAKE_MODE_WAIT: + cLib_addCalcAngleS(&shape_angle.x, 0, mShakeData.mTime, mShakeData.mMaxChangeX, mShakeData.mMinChangeX); + break; + case SHAKE_MODE_START: + // "Shake!!!!\n" + OS_REPORT("揺れ!!!!\n"); + dComIfGp_getVibration().StartQuake(4, 1, cXyz(0.0f, 1.0f, 0.0f)); + mShakeMode = SHAKE_MODE_RESET_ANGLE; + break; + case SHAKE_MODE_RESET_ANGLE: + cLib_addCalcAngleS(&shape_angle.x, 0, 40, 20, 5); + if (shape_angle.x < 260) { + dComIfGp_getVibration().StopQuake(31); + dComIfGp_getVibration().StartQuake(2, 1, cXyz(0.0f, 1.0f, 0.0f)); + mShakeMode = SHAKE_MODE_QUAKE; + } + case SHAKE_MODE_QUAKE: + mQuakeTimer++; + if (mQuakeTimer > 110) { + dComIfGp_getVibration().StopQuake(31); + mShakeMode = SHAKE_MODE_END; + } + break; + case SHAKE_MODE_END: + if(cLib_addCalcAngleS(&shape_angle.x, 0, 60, 10, 3) == 0) { + mShakeMode = SHAKE_MODE_WAIT; + } + break; + default: + JUT_ASSERT(0); + } + + if (shape_angle.x != 0) { + mRotY += (s16)(mShakeData.mSpeedY + (0x300 / shape_angle.x)); + } + + *param_0 = &mBgMtx; + setBaseMtx(); + switch_proc_call(); + + mCylCollider.SetC(current.pos); + dComIfG_Ccsp()->Set(&mCylCollider); + return 1; } /* 80CB0658-80CB0740 001418 00E8+00 1/0 0/0 0/0 .text Draw__10daPillar_cFv */ -void daPillar_c::Draw() { - // NONMATCHING +int daPillar_c::Draw() { + g_env_light.settingTevStruct(0x10, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + + if (mpShadowModel != NULL) { + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpShadowModel, &tevStr); + mDoExt_modelUpdateDL(mpShadowModel); + } + + return 1; } /* 80CB0740-80CB0780 001500 0040+00 1/0 0/0 0/0 .text Delete__10daPillar_cFv */ -void daPillar_c::Delete() { - // NONMATCHING +int daPillar_c::Delete() { + dComIfG_resDelete(&mPhase, l_arcName[mMdlType]); + return 1; } /* 80CB0780-80CB0874 001540 00F4+00 1/0 0/0 0/0 .text daPillar_create1st__FP10daPillar_c */ -static void daPillar_create1st(daPillar_c* param_0) { - // NONMATCHING +static int daPillar_create1st(daPillar_c* i_this) { + fopAcM_SetupActor(i_this, daPillar_c); + return i_this->create1st(); } /* 80CB0874-80CB0894 001634 0020+00 1/0 0/0 0/0 .text daPillar_MoveBGDelete__FP10daPillar_c */ -static void daPillar_MoveBGDelete(daPillar_c* param_0) { - // NONMATCHING +static int daPillar_MoveBGDelete(daPillar_c* i_this) { + return i_this->MoveBGDelete(); } /* 80CB0894-80CB08B4 001654 0020+00 1/0 0/0 0/0 .text daPillar_MoveBGExecute__FP10daPillar_c */ -static void daPillar_MoveBGExecute(daPillar_c* param_0) { - // NONMATCHING +static int daPillar_MoveBGExecute(daPillar_c* i_this) { + return i_this->MoveBGExecute(); } /* 80CB08B4-80CB08E0 001674 002C+00 1/0 0/0 0/0 .text daPillar_MoveBGDraw__FP10daPillar_c */ -static void daPillar_MoveBGDraw(daPillar_c* param_0) { - // NONMATCHING -} - -/* 80CB08E0-80CB0928 0016A0 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING +static int daPillar_MoveBGDraw(daPillar_c* i_this) { + return i_this->MoveBGDraw(); } -/* 80CB0928-80CB0984 0016E8 005C+00 2/1 0/0 0/0 .text __dt__14daPillar_HIO_cFv */ -daPillar_HIO_c::~daPillar_HIO_c() { - // NONMATCHING -} - -/* 80CB0984-80CB09C0 001744 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_pillar_cpp */ -void __sinit_d_a_obj_pillar_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80CB0984, __sinit_d_a_obj_pillar_cpp); -#pragma pop +/* 80CB0B58-80CB0B78 -00001 0020+00 1/0 0/0 0/0 .data daPillar_METHODS */ +static actor_method_class daPillar_METHODS = { + (process_method_func)daPillar_create1st, + (process_method_func)daPillar_MoveBGDelete, + (process_method_func)daPillar_MoveBGExecute, + NULL, + (process_method_func)daPillar_MoveBGDraw, +}; -/* 80CB0ACC-80CB0ACC 0000F8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* 80CB0B78-80CB0BA8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Pillar */ +extern actor_process_profile_definition g_profile_Obj_Pillar = { + fpcLy_CURRENT_e, // mLayerID + 3, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Obj_Pillar, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daPillar_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 432, // mPriority + &daPillar_METHODS, // sub_method + 0x00044100, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +}; |
