diff options
Diffstat (limited to 'rel')
| -rw-r--r-- | rel/d/a/door/d_a_door_push/d_a_door_push.cpp | 4 | ||||
| -rw-r--r-- | rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key.cpp | 883 | ||||
| -rw-r--r-- | rel/d/a/obj/d_a_obj_iceblock/Makefile | 2 | ||||
| -rw-r--r-- | rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock.cpp | 1754 | ||||
| -rw-r--r-- | rel/d/a/obj/d_a_obj_iceblock/unknown_translation_unit_bss.cpp | 28 |
5 files changed, 1045 insertions, 1626 deletions
diff --git a/rel/d/a/door/d_a_door_push/d_a_door_push.cpp b/rel/d/a/door/d_a_door_push/d_a_door_push.cpp index c60cda1f7a..f43b815942 100644 --- a/rel/d/a/door/d_a_door_push/d_a_door_push.cpp +++ b/rel/d/a/door/d_a_door_push/d_a_door_push.cpp @@ -13,7 +13,7 @@ * PPCallBack__FP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel */ static void PPCallBack(fopAc_ac_c* i_this, fopAc_ac_c* i_unused, s16 i_unused2, dBgW_Base::PushPullLabel param_3) { - if (cLib_checkBit(param_3, dBgW_Base::PUSHPULL_LABEL1) != 0) { + if (cLib_checkBit(param_3, dBgW_Base::PPLABEL_PUSH) != 0) { daDoorPush_c* l_this = (daDoorPush_c*)i_this; l_this->field_0x62e[0]++; l_this->field_0x62e[1] = 0; @@ -25,7 +25,7 @@ static void PPCallBack(fopAc_ac_c* i_this, fopAc_ac_c* i_unused, s16 i_unused2, * PPCallBack2__FP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel */ static void PPCallBack2(fopAc_ac_c* i_this, fopAc_ac_c* i_unused, s16 i_unused2, dBgW_Base::PushPullLabel param_3) { - if (cLib_checkBit(param_3, dBgW_Base::PUSHPULL_LABEL1) != 0) { + if (cLib_checkBit(param_3, dBgW_Base::PPLABEL_PUSH) != 0) { daDoorPush_c* l_this = (daDoorPush_c*)i_this; l_this->field_0x62e[1]++; l_this->field_0x62e[0] = 0; diff --git a/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key.cpp b/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key.cpp index 99c2a03da1..16ea81993b 100644 --- a/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key.cpp +++ b/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key.cpp @@ -1,669 +1,384 @@ /** * @file d_a_obj_Lv5Key.cpp - * -*/ + * Snowpeak Ruins Key Lock + */ #include "rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key.h" -#include "dol2asm.h" - - -// -// Forward References: -// - -extern "C" void CreateHeap__13daObjLv5Key_cFv(); -extern "C" void Init__13daObjLv5Key_cFv(); -extern "C" void setBgc__13daObjLv5Key_cFv(); -extern "C" void initCcSph__13daObjLv5Key_cFv(); -extern "C" void setCcSph__13daObjLv5Key_cFv(); -extern "C" static void daObjLv5Key_Create__FP10fopAc_ac_c(); -extern "C" static void daObjLv5Key_Delete__FP13daObjLv5Key_c(); -extern "C" void setAction__13daObjLv5Key_cFM13daObjLv5Key_cFPCvPvi_vi(); -extern "C" void Action__13daObjLv5Key_cFv(); -extern "C" void Wait__13daObjLv5Key_cFi(); -extern "C" void Open__13daObjLv5Key_cFi(); -extern "C" void Fall__13daObjLv5Key_cFi(); -extern "C" void Land__13daObjLv5Key_cFi(); -extern "C" void Shake__13daObjLv5Key_cFi(); -extern "C" void TranslateByNowDirect__13daObjLv5Key_cFfff(); -extern "C" void Execute__13daObjLv5Key_cFv(); -extern "C" void Draw__13daObjLv5Key_cFv(); -extern "C" void Delete__13daObjLv5Key_cFv(); -extern "C" void setBaseMtx__13daObjLv5Key_cFv(); -extern "C" static void daObjLv5Key_Draw__FP13daObjLv5Key_c(); -extern "C" static void daObjLv5Key_Execute__FP13daObjLv5Key_c(); -extern "C" void create_1st__13daObjLv5Key_cFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" static bool daObjLv5Key_IsDelete__FP13daObjLv5Key_c(); -extern "C" static void func_80B9C908(); -extern "C" static void func_80B9C910(); -extern "C" extern char const* const d_a_obj_Lv5Key__stringBase0; - -// -// External References: -// - -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void ZXYrotS__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void play__14mDoExt_baseAnmFv(); -extern "C" void init__13mDoExt_bckAnmFP15J3DAnmTransformiifssb(); -extern "C" void entry__13mDoExt_bckAnmFP12J3DModelDataf(); -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_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void fopAcM_calcSpeed__FP10fopAc_ac_c(); -extern "C" void fopAcM_posMove__FP10fopAc_ac_cPC4cXyz(); -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_cFPCclP11dRes_info_ci(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void SetGndThinCellingOff__9dBgS_AcchFv(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -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 __apl__5csXyzFR5csXyz(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void SetR__8cM3dGSphFf(); -extern "C" void __ct__16Z2SoundObjSimpleFv(); -extern "C" void __dl__FPv(); -extern "C" void init__12J3DFrameCtrlFs(); -extern "C" void __ptmf_test(); -extern "C" void __ptmf_cmpr(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_29(); -extern "C" extern u8 const __ptmf_null[12 + 4 /* padding */]; -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[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]; - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80B9C920-80B9C924 000000 0004+00 6/6 0/0 0/0 .rodata @3755 */ -SECTION_RODATA static f32 const lit_3755 = 1.0f; -COMPILER_STRIP_GATE(0x80B9C920, &lit_3755); - -/* 80B9C9AC-80B9C9AC 00008C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80B9C9AC = "Lv5_KEY"; -#pragma pop +#include "d/com/d_com_inf_game.h" + +static int useHeapInit(fopAc_ac_c*); /* 80B9C9B4-80B9C9B8 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_obj_Lv5Key__stringBase0; +static char* l_arcName = "Lv5_KEY"; /* 80B9B9B8-80B9BA94 000078 00DC+00 1/1 0/0 0/0 .text CreateHeap__13daObjLv5Key_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::CreateHeap() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/CreateHeap__13daObjLv5Key_cFv.s" -} -#pragma pop - -/* ############################################################################################## */ -/* 80B9C924-80B9C928 000004 0004+00 0/1 0/0 0/0 .rodata @3767 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3767 = -50.0f; -COMPILER_STRIP_GATE(0x80B9C924, &lit_3767); -#pragma pop - -/* 80B9C928-80B9C92C 000008 0004+00 1/2 0/0 0/0 .rodata @3768 */ -SECTION_RODATA static f32 const lit_3768 = 30.0f; -COMPILER_STRIP_GATE(0x80B9C928, &lit_3768); - -/* 80B9C92C-80B9C930 00000C 0004+00 0/1 0/0 0/0 .rodata @3769 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3769 = -20.0f; -COMPILER_STRIP_GATE(0x80B9C92C, &lit_3769); -#pragma pop - -/* 80B9C930-80B9C934 000010 0004+00 0/1 0/0 0/0 .rodata @3770 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3770 = 50.0f; -COMPILER_STRIP_GATE(0x80B9C930, &lit_3770); -#pragma pop - -/* 80B9C934-80B9C938 000014 0004+00 0/1 0/0 0/0 .rodata @3771 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3771 = -90.0f; -COMPILER_STRIP_GATE(0x80B9C934, &lit_3771); -#pragma pop - -/* 80B9C938-80B9C93C 000018 0004+00 0/1 0/0 0/0 .rodata @3772 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3772 = 20.0f; -COMPILER_STRIP_GATE(0x80B9C938, &lit_3772); -#pragma pop - -/* 80B9C93C-80B9C940 00001C 0004+00 3/7 0/0 0/0 .rodata @3773 */ -SECTION_RODATA static u8 const lit_3773[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80B9C93C, &lit_3773); +int daObjLv5Key_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 7); + J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 4); + JUT_ASSERT(modelData != 0); -/* 80B9C9B8-80B9C9C4 -00001 000C+00 1/1 0/0 0/0 .data @3759 */ -SECTION_DATA static void* lit_3759[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)Wait__13daObjLv5Key_cFi, -}; + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpModel == NULL) { + return 0; + } + + if (!mBck.init(pbck, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, false)) { + return 0; + } + + return 1; +} /* 80B9BA94-80B9BB5C 000154 00C8+00 1/1 0/0 0/0 .text Init__13daObjLv5Key_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::Init() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/Init__13daObjLv5Key_cFv.s" +int daObjLv5Key_c::Init() { + initCcSph(); + fopAcM_setCullSizeBox(this, -50.0f, 30.0f, -20.0f, 50.0f, -90.0f, 20.0f); + setLocalOffset(0.0f, 0.0f, 0.0f); + setStatus(STATUS_WAIT); + + mAction = NULL; + setAction(&Wait, 1); + return cPhs_COMPLEATE_e; } -#pragma pop /* 80B9BB5C-80B9BBCC 00021C 0070+00 1/1 0/0 0/0 .text setBgc__13daObjLv5Key_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::setBgc() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/setBgc__13daObjLv5Key_cFv.s" +void daObjLv5Key_c::setBgc() { + OS_REPORT("-------------setBgc!!\n"); + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, + fopAcM_GetSpeed_p(this), NULL, NULL); + mAcch.SetGndThinCellingOff(); + mAcchCir.SetWall(30.0f, 30.0f); } -#pragma pop - -/* ############################################################################################## */ -/* 80B9C940-80B9C980 000020 0040+00 1/1 0/0 0/0 .rodata ccShpSrc$3784 */ -SECTION_RODATA static u8 const ccShpSrc[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xD8, 0xFB, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC1, 0x8E, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x42, 0x0C, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80B9C940, &ccShpSrc); /* 80B9BBCC-80B9BC2C 00028C 0060+00 1/1 0/0 0/0 .text initCcSph__13daObjLv5Key_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::initCcSph() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/initCcSph__13daObjLv5Key_cFv.s" +void daObjLv5Key_c::initCcSph() { + static const dCcD_SrcSph ccShpSrc = { + { + {0x0, {{0x400, 0x1, 0x0}, {0xD8FBFDFF, 0x11}, 0x0}}, // mObj + {dCcD_SE_STONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, -17.8f, 0.0f}, 35.0f} // mSph + } // mSphAttr + }; + + mCcStts.Init(0x3C, 0xFF, this); + mCcSph.Set(ccShpSrc); + mCcSph.SetStts(&mCcStts); + mCcSph.SetC(current.pos); } -#pragma pop - -/* ############################################################################################## */ -/* 80B9C980-80B9C984 000060 0004+00 0/1 0/0 0/0 .rodata @3797 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3797 = -17.5f; -COMPILER_STRIP_GATE(0x80B9C980, &lit_3797); -#pragma pop - -/* 80B9C984-80B9C988 000064 0004+00 0/1 0/0 0/0 .rodata @3798 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3798 = 35.0f; -COMPILER_STRIP_GATE(0x80B9C984, &lit_3798); -#pragma pop /* 80B9BC2C-80B9BCEC 0002EC 00C0+00 1/1 0/0 0/0 .text setCcSph__13daObjLv5Key_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::setCcSph() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/setCcSph__13daObjLv5Key_cFv.s" +void daObjLv5Key_c::setCcSph() { + cXyz center(0.0f, -17.5f, 0.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::multVec(¢er, ¢er); + + mCcSph.SetC(center); + mCcSph.SetR(35.0f); + dComIfG_Ccsp()->Set(&mCcSph); + + if (mCcSph.ChkTgHit()) { + mCcSph.ClrTgHit(); + } } -#pragma pop /* 80B9BCEC-80B9BD0C 0003AC 0020+00 1/0 0/0 0/0 .text daObjLv5Key_Create__FP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjLv5Key_Create(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/daObjLv5Key_Create__FP10fopAc_ac_c.s" +static int daObjLv5Key_Create(fopAc_ac_c* i_this) { + return ((daObjLv5Key_c*)i_this)->create_1st(); } -#pragma pop /* 80B9BD0C-80B9BD30 0003CC 0024+00 1/0 0/0 0/0 .text daObjLv5Key_Delete__FP13daObjLv5Key_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjLv5Key_Delete(daObjLv5Key_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/daObjLv5Key_Delete__FP13daObjLv5Key_c.s" +static int daObjLv5Key_Delete(daObjLv5Key_c* i_this) { + i_this->Delete(); + return 1; } -#pragma pop /* 80B9BD30-80B9BDD8 0003F0 00A8+00 5/5 0/0 0/0 .text * setAction__13daObjLv5Key_cFM13daObjLv5Key_cFPCvPvi_vi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::setAction(void (daObjLv5Key_c::*param_0)(int), int param_1) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/setAction__13daObjLv5Key_cFM13daObjLv5Key_cFPCvPvi_vi.s" +void daObjLv5Key_c::setAction(daObjLv5Key_c::actionFunc i_action, int param_1) { + if (mAction != i_action) { + if (mAction != NULL) { + mMode = -1; + (this->*mAction)(param_1); + } + + mMode = 0; + mAction = i_action; + (this->*mAction)(param_1); + } } -#pragma pop /* 80B9BDD8-80B9BE24 000498 004C+00 1/1 0/0 0/0 .text Action__13daObjLv5Key_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::Action() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/Action__13daObjLv5Key_cFv.s" +void daObjLv5Key_c::Action() { + if (mAction == NULL) { + OS_REPORT("ACTION NOT SET!!\n"); + } else { + (this->*mAction)(0); + } } -#pragma pop - -/* ############################################################################################## */ -/* 80B9C9C4-80B9C9D0 -00001 000C+00 1/1 0/0 0/0 .data @3837 */ -SECTION_DATA static void* lit_3837[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)Open__13daObjLv5Key_cFi, -}; - -/* 80B9C9D0-80B9C9DC -00001 000C+00 1/1 0/0 0/0 .data @3842 */ -SECTION_DATA static void* lit_3842[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)Shake__13daObjLv5Key_cFi, -}; /* 80B9BE24-80B9BF08 0004E4 00E4+00 2/0 0/0 0/0 .text Wait__13daObjLv5Key_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::Wait(int param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/Wait__13daObjLv5Key_cFi.s" +void daObjLv5Key_c::Wait(int param_0) { + switch (mMode) { + case -1: + break; + case 0: + setStatus(STATUS_WAIT); + mBck.setPlaySpeed(0.0f); + mMode = 1; + break; + case 1: + if (is_open_start()) { + setBgc(); + setAction(&Open, 1); + } else if (is_shake_start()) { + setAction(&Shake, 1); + } + } } -#pragma pop - -/* ############################################################################################## */ -/* 80B9C9DC-80B9C9E8 -00001 000C+00 1/1 0/0 0/0 .data @3862 */ -SECTION_DATA static void* lit_3862[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)Fall__13daObjLv5Key_cFi, -}; /* 80B9BF08-80B9BFDC 0005C8 00D4+00 1/0 0/0 0/0 .text Open__13daObjLv5Key_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::Open(int param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/Open__13daObjLv5Key_cFi.s" +void daObjLv5Key_c::Open(int param_0) { + switch (mMode) { + case -1: + break; + case 0: + mBck.setPlaySpeed(1.0f); + mCcSph.OffCoSetBit(); + mMode = 1; + break; + case 1: + mBck.play(); + + if (mBck.isStop()) { + setAction(&Fall, 1); + } + } } -#pragma pop - -/* ############################################################################################## */ -/* 80B9C988-80B9C98C 000068 0004+00 0/1 0/0 0/0 .rodata @3907 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3907 = -6.0f; -COMPILER_STRIP_GATE(0x80B9C988, &lit_3907); -#pragma pop - -/* 80B9C98C-80B9C990 00006C 0004+00 0/1 0/0 0/0 .rodata @3908 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3908 = 88.0f; -COMPILER_STRIP_GATE(0x80B9C98C, &lit_3908); -#pragma pop - -/* 80B9C990-80B9C994 000070 0004+00 0/1 0/0 0/0 .rodata @3909 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3909 = 4.0f; -COMPILER_STRIP_GATE(0x80B9C990, &lit_3909); -#pragma pop - -/* 80B9C994-80B9C998 000074 0004+00 0/1 0/0 0/0 .rodata @3910 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3910 = 22.0f; -COMPILER_STRIP_GATE(0x80B9C994, &lit_3910); -#pragma pop - -/* 80B9C998-80B9C99C 000078 0004+00 0/1 0/0 0/0 .rodata @3911 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3911 = 87.0f; -COMPILER_STRIP_GATE(0x80B9C998, &lit_3911); -#pragma pop - -/* 80B9C9E8-80B9C9F4 -00001 000C+00 1/1 0/0 0/0 .data @3891 */ -SECTION_DATA static void* lit_3891[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)Land__13daObjLv5Key_cFi, -}; /* 80B9BFDC-80B9C17C 00069C 01A0+00 1/0 0/0 0/0 .text Fall__13daObjLv5Key_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::Fall(int param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/Fall__13daObjLv5Key_cFi.s" +void daObjLv5Key_c::Fall(int param_0) { + switch (mMode) { + case -1: + break; + case 0: + fopAcM_SetSpeedF(this, 0.0f); + fopAcM_SetSpeed(this, 0.0f, 0.0f, 0.0f); + fopAcM_SetGravity(this, -6.0f); + mMode = 1; + break; + case 1: + fopAcM_calcSpeed(this); + fopAcM_posMove(this, NULL); + + f32 old_y = current.pos.y; + current.pos.y -= 88.0f; + mAcch.CrrPos(dComIfG_Bgsp()); + current.pos.y = old_y; + + OS_REPORT("FALL SPD = %f\n", speed.y); + + if (mAcch.i_ChkGroundHit()) { + fopAcM_GetSpeed(this); + fopAcM_SetSpeedF(this, 4.0f); + fopAcM_SetSpeed(this, 0.0f, 22.0f, 0.0f); + + setRotateSpd(0x120, 0, 0); + mMode = 2; + } + break; + case 2: + RotateAngle(); + + fopAcM_calcSpeed(this); + fopAcM_posMove(this, NULL); + OS_REPORT("BOUND SPD = %f\n", speed.y); + + f32 prev_y = current.pos.y; + current.pos.y -= 87.0f; + mAcch.CrrPos(dComIfG_Bgsp()); + current.pos.y = prev_y; + + if (mAcch.i_ChkGroundHit()) { + setAction(&Land, 1); + } + } } -#pragma pop - -/* ############################################################################################## */ -/* 80B9C99C-80B9C9A0 00007C 0004+00 0/1 0/0 0/0 .rodata @3929 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3929 = 92.0f / 5.0f; -COMPILER_STRIP_GATE(0x80B9C99C, &lit_3929); -#pragma pop - -/* 80B9C9A0-80B9C9A4 000080 0004+00 0/1 0/0 0/0 .rodata @3930 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3930 = -87.0f / 5.0f; -COMPILER_STRIP_GATE(0x80B9C9A0, &lit_3930); -#pragma pop - -/* 80B9C9A4-80B9C9A8 000084 0004+00 0/1 0/0 0/0 .rodata @3931 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_3931 = 0xC2956666; -COMPILER_STRIP_GATE(0x80B9C9A4, &lit_3931); -#pragma pop - -/* 80B9C9A8-80B9C9AC 000088 0004+00 0/1 0/0 0/0 .rodata @3932 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3932 = 87.0f / 10.0f; -COMPILER_STRIP_GATE(0x80B9C9A8, &lit_3932); -#pragma pop /* 80B9C17C-80B9C268 00083C 00EC+00 1/0 0/0 0/0 .text Land__13daObjLv5Key_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::Land(int param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/Land__13daObjLv5Key_cFi.s" +void daObjLv5Key_c::Land(int param_0) { + switch (mMode) { + case -1: + break; + case 0: + TranslateByNowDirect(0.0f, 0.0f, 18.4f); + setLocalOffset(-17.4, -74.7f, 8.7f); + setRotateAccel(0x2C0, 0, 0); + mRotateSpd.x -= 0x10; + mRotateSpd.z = 0; + + mMode = 1; + break; + case 1: + calcRotateSpd(); + OS_REPORT("ROTATE SPD = %x\n", mRotateSpd.x); + RotateAngle(); + + if (shape_angle.x >= 0x4000) { + shape_angle.x = 0x4000; + setStatus(STATUS_OPEN); + mMode = -1; + } + } } -#pragma pop - -/* ############################################################################################## */ -/* 80B9C9F4-80B9CA00 -00001 000C+00 1/1 0/0 0/0 .data @3947 */ -SECTION_DATA static void* lit_3947[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)Wait__13daObjLv5Key_cFi, -}; /* 80B9C268-80B9C3B0 000928 0148+00 1/0 0/0 0/0 .text Shake__13daObjLv5Key_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::Shake(int param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/Shake__13daObjLv5Key_cFi.s" +void daObjLv5Key_c::Shake(int param_0) { + switch (mMode) { + case -1: + break; + case 0: + setLocalOffset(0.0f, 0.0f, 0.0f); + setTimer(30); + mMode = 1; + break; + case 1: + if (countdown()) { + setShakeNum(2); + setRotateSpd(-0x100, 0, 0); + setRotateAccel(0x2A, 0, 0); + mMode = 2; + } + break; + case 2: + calcRotateSpd(); + RotateAngle(); + + if (shape_angle.x >= 0) { + shape_angle.x = 0; + setRotateSpd(-0x100, 0, 0); + decShakeNum(); + + if (is_shake_end()) { + setAction(&Wait, 1); + } + } + } } -#pragma pop /* 80B9C3B0-80B9C410 000A70 0060+00 1/1 0/0 0/0 .text TranslateByNowDirect__13daObjLv5Key_cFfff */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::TranslateByNowDirect(f32 param_0, f32 param_1, f32 param_2) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/TranslateByNowDirect__13daObjLv5Key_cFfff.s" +void daObjLv5Key_c::TranslateByNowDirect(f32 i_x, f32 i_y, f32 i_z) { + cXyz trans; + trans.set(i_x, i_y, i_z); + + mDoMtx_stack_c::ZXYrotS(shape_angle); + mDoMtx_stack_c::multVec(&trans, &trans); + current.pos += trans; } -#pragma pop /* 80B9C410-80B9C450 000AD0 0040+00 1/1 0/0 0/0 .text Execute__13daObjLv5Key_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::Execute() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/Execute__13daObjLv5Key_cFv.s" +int daObjLv5Key_c::Execute() { + Action(); + setBaseMtx(); + setCcSph(); + return 1; } -#pragma pop /* 80B9C450-80B9C500 000B10 00B0+00 1/1 0/0 0/0 .text Draw__13daObjLv5Key_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::Draw() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/Draw__13daObjLv5Key_cFv.s" +int daObjLv5Key_c::Draw() { + g_env_light.settingTevStruct(0x10, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + + dComIfGd_setListBG(); + mBck.entry(mpModel->getModelData()); + mDoExt_modelUpdateDL(mpModel); + mBck.remove(mpModel->getModelData()); + return 1; } -#pragma pop /* 80B9C500-80B9C534 000BC0 0034+00 1/1 0/0 0/0 .text Delete__13daObjLv5Key_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::Delete() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/Delete__13daObjLv5Key_cFv.s" +int daObjLv5Key_c::Delete() { + dComIfG_resDelete(&mPhase, l_arcName); + return 1; } -#pragma pop /* 80B9C534-80B9C5AC 000BF4 0078+00 1/1 0/0 0/0 .text setBaseMtx__13daObjLv5Key_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::setBaseMtx() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/setBaseMtx__13daObjLv5Key_cFv.s" +void daObjLv5Key_c::setBaseMtx() { + mDoMtx_stack_c::transS(current.pos); + + cXyz& localOffset = getLocalOffset(); + mDoMtx_stack_c::transM(localOffset.x, localOffset.y, localOffset.z); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::transM(-localOffset.x, -localOffset.y, -localOffset.z); + + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } -#pragma pop /* 80B9C5AC-80B9C5CC 000C6C 0020+00 1/0 0/0 0/0 .text daObjLv5Key_Draw__FP13daObjLv5Key_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjLv5Key_Draw(daObjLv5Key_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/daObjLv5Key_Draw__FP13daObjLv5Key_c.s" +static int daObjLv5Key_Draw(daObjLv5Key_c* i_this) { + return i_this->Draw(); } -#pragma pop /* 80B9C5CC-80B9C5EC 000C8C 0020+00 2/1 0/0 0/0 .text daObjLv5Key_Execute__FP13daObjLv5Key_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjLv5Key_Execute(daObjLv5Key_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/daObjLv5Key_Execute__FP13daObjLv5Key_c.s" +static int daObjLv5Key_Execute(daObjLv5Key_c* i_this) { + return i_this->Execute(); } -#pragma pop -/* ############################################################################################## */ -/* 80B9CA00-80B9CA20 -00001 0020+00 1/0 0/0 0/0 .data l_daObjLv5Key_Method */ -static actor_method_class l_daObjLv5Key_Method = { - (process_method_func)daObjLv5Key_Create__FP10fopAc_ac_c, - (process_method_func)daObjLv5Key_Delete__FP13daObjLv5Key_c, - (process_method_func)daObjLv5Key_Execute__FP13daObjLv5Key_c, - (process_method_func)daObjLv5Key_IsDelete__FP13daObjLv5Key_c, - (process_method_func)daObjLv5Key_Draw__FP13daObjLv5Key_c, -}; - -/* 80B9CA20-80B9CA50 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Lv5Key */ -extern actor_process_profile_definition g_profile_Obj_Lv5Key = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Obj_Lv5Key, // mProcName - &g_fpcLf_Method.mBase, // sub_method - sizeof(daObjLv5Key_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 46, // mPriority - &l_daObjLv5Key_Method, // sub_method - 0x00044180, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 80B9CA50-80B9CA5C 00009C 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 80B9CA5C-80B9CA68 0000A8 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, -}; +/* 80B9C5EC-80B9C798 000CAC 01AC+00 1/1 0/0 0/0 .text create_1st__13daObjLv5Key_cFv */ +int daObjLv5Key_c::create_1st() { + fopAcM_SetupActor(this, daObjLv5Key_c); -/* 80B9CA68-80B9CA8C 0000B4 0024+00 2/2 0/0 0/0 .data __vt__12dBgS_ObjAcch */ -SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_ObjAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_80B9C910, - (void*)NULL, - (void*)NULL, - (void*)func_80B9C908, -}; + int phase = dComIfG_resLoad(&mPhase, l_arcName); + if (phase == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x4B000)) { + return cPhs_ERROR_e; + } -/* 80B9CA8C-80B9CA98 0000D8 000C+00 2/2 0/0 0/0 .data __vt__12J3DFrameCtrl */ -SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12J3DFrameCtrlFv, -}; + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + Init(); + daObjLv5Key_Execute(this); + } -/* 80B9C5EC-80B9C798 000CAC 01AC+00 1/1 0/0 0/0 .text create_1st__13daObjLv5Key_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjLv5Key_c::create_1st() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/create_1st__13daObjLv5Key_cFv.s" -} -#pragma pop - -/* 80B9C798-80B9C7E0 000E58 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -// asm cM3dGSph::~cM3dGSph() { -extern "C" asm void __dt__8cM3dGSphFv() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/__dt__8cM3dGSphFv.s" + return phase; } -#pragma pop - -/* 80B9C7E0-80B9C828 000EA0 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -// asm cM3dGAab::~cM3dGAab() { -extern "C" asm void __dt__8cM3dGAabFv() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/__dt__8cM3dGAabFv.s" -} -#pragma pop - -/* 80B9C828-80B9C898 000EE8 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -// asm dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" asm void __dt__12dBgS_ObjAcchFv() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/__dt__12dBgS_ObjAcchFv.s" -} -#pragma pop - -/* 80B9C898-80B9C8E0 000F58 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __dt__12J3DFrameCtrlFv() { -//asm J3DFrameCtrl::~J3DFrameCtrl() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/__dt__12J3DFrameCtrlFv.s" -} -#pragma pop /* 80B9C8E0-80B9C900 000FA0 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void useHeapInit(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/useHeapInit__FP10fopAc_ac_c.s" +static int useHeapInit(fopAc_ac_c* i_this) { + return ((daObjLv5Key_c*)i_this)->CreateHeap(); } -#pragma pop /* 80B9C900-80B9C908 000FC0 0008+00 1/0 0/0 0/0 .text daObjLv5Key_IsDelete__FP13daObjLv5Key_c */ -static bool daObjLv5Key_IsDelete(daObjLv5Key_c* param_0) { - return true; +static int daObjLv5Key_IsDelete(daObjLv5Key_c* i_this) { + return 1; } -/* 80B9C908-80B9C910 000FC8 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void func_80B9C908() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/func_80B9C908.s" -} -#pragma pop - -/* 80B9C910-80B9C918 000FD0 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void func_80B9C910() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key/func_80B9C910.s" -} -#pragma pop +/* 80B9CA00-80B9CA20 -00001 0020+00 1/0 0/0 0/0 .data l_daObjLv5Key_Method */ +static actor_method_class l_daObjLv5Key_Method = { + (process_method_func)daObjLv5Key_Create, (process_method_func)daObjLv5Key_Delete, + (process_method_func)daObjLv5Key_Execute, (process_method_func)daObjLv5Key_IsDelete, + (process_method_func)daObjLv5Key_Draw, +}; -/* 80B9C9AC-80B9C9AC 00008C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* 80B9CA20-80B9CA50 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Lv5Key */ +extern actor_process_profile_definition g_profile_Obj_Lv5Key = { + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Obj_Lv5Key, // mProcName + &g_fpcLf_Method.mBase, // sub_method + sizeof(daObjLv5Key_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 46, // mPriority + &l_daObjLv5Key_Method, // sub_method + 0x00044180, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +}; diff --git a/rel/d/a/obj/d_a_obj_iceblock/Makefile b/rel/d/a/obj/d_a_obj_iceblock/Makefile index 758b58a169..c015089942 100644 --- a/rel/d/a/obj/d_a_obj_iceblock/Makefile +++ b/rel/d/a/obj/d_a_obj_iceblock/Makefile @@ -8,12 +8,10 @@ M481_MAP := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_iceblock.map M481_CPP_FILES := \ rel/executor.cpp \ - rel/d/a/obj/d_a_obj_iceblock/unknown_translation_unit_bss.cpp \ rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock.cpp \ M481_O_FILES := \ $(BUILD_DIR)/rel/executor.o \ - $(BUILD_DIR)/rel/d/a/obj/d_a_obj_iceblock/unknown_translation_unit_bss.o \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock.o \ M481_LIBS := \ diff --git a/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock.cpp b/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock.cpp index bc137c1487..d78d96e423 100644 --- a/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock.cpp +++ b/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock.cpp @@ -1,423 +1,225 @@ /** * @file d_a_obj_iceblock.cpp - * -*/ + * + */ #include "rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock.h" -#include "d/cc/d_cc_d.h" -#include "dol2asm.h" +#include "SSystem/SComponent/c_math.h" +#include "d/a/d_a_player.h" +#include "d/com/d_com_inf_game.h" #include "d/d_camera.h" +#include "rel/d/a/d_a_mirror/d_a_mirror.h" +enum PUSH_DIR { + DIR_SOUTH, + DIR_EAST, + DIR_NORTH, + DIR_WEST, +}; - - -// -// Forward References: -// - -extern "C" void -PPCallBack__13daObjIceBlk_cFP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel(); -extern "C" static void rideCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c(); -extern "C" void initBaseMtx__13daObjIceBlk_cFv(); -extern "C" void setBaseMtx__13daObjIceBlk_cFv(); -extern "C" void getPointNo__13daObjIceBlk_cFv(); -extern "C" void loadCurrentPos__13daObjIceBlk_cFv(); -extern "C" void saveCurrentPos__13daObjIceBlk_cFv(); -extern "C" void enablePushPull__13daObjIceBlk_cFv(); -extern "C" void disablePushPull__13daObjIceBlk_cFv(); -extern "C" void Create__13daObjIceBlk_cFv(); -extern "C" void CreateHeap__13daObjIceBlk_cFv(); -extern "C" void create1st__13daObjIceBlk_cFv(); -extern "C" void Execute__13daObjIceBlk_cFPPA3_A4_f(); -extern "C" void checkWalk__13daObjIceBlk_cFv(); -extern "C" void clrCounter__13daObjIceBlk_cFv(); -extern "C" void mode_proc_call__13daObjIceBlk_cFv(); -extern "C" void mode_init_wait__13daObjIceBlk_cFv(); -extern "C" void mode_proc_wait__13daObjIceBlk_cFv(); -extern "C" void mode_init_walk__13daObjIceBlk_cFv(); -extern "C" void mode_proc_walk__13daObjIceBlk_cFv(); -extern "C" void setEffect__13daObjIceBlk_cFv(); -extern "C" void checkWallPre__13daObjIceBlk_cFs(); -extern "C" void checkBgHit__13daObjIceBlk_cFv(); -extern "C" void bgCheck__13daObjIceBlk_cFv(); -extern "C" void init_bgCheck__13daObjIceBlk_cFv(); -extern "C" void checkFall__13daObjIceBlk_cFv(); -extern "C" void __dt__8cM3dGPlaFv(); -extern "C" void event_proc_call__13daObjIceBlk_cFv(); -extern "C" void actionWait__13daObjIceBlk_cFv(); -extern "C" void actionOrderEvent__13daObjIceBlk_cFv(); -extern "C" void actionEvent__13daObjIceBlk_cFv(); -extern "C" void actionDead__13daObjIceBlk_cFv(); -extern "C" void Draw__13daObjIceBlk_cFv(); -extern "C" void Delete__13daObjIceBlk_cFv(); -extern "C" static void daObjIceBlk_create1st__FP13daObjIceBlk_c(); -extern "C" void __dt__14dBgS_ObjGndChkFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" static void daObjIceBlk_MoveBGDelete__FP13daObjIceBlk_c(); -extern "C" static void daObjIceBlk_MoveBGExecute__FP13daObjIceBlk_c(); -extern "C" static void daObjIceBlk_MoveBGDraw__FP13daObjIceBlk_c(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" static void func_80C242C4(); -extern "C" static void func_80C242CC(); -extern "C" static void func_80C242D4(); -extern "C" static void func_80C242DC(); -extern "C" static void func_80C242E4(); -extern "C" extern char const* const d_a_obj_iceblock__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_setupShareTexture__FP12J3DModelDataP12J3DModelData(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void fopAcM_posMove__FP10fopAc_ac_cPC4cXyz(); -extern "C" void fopAcM_posMoveF__FP10fopAc_ac_cPC4cXyz(); -extern "C" void fopAcM_orderPotentialEvent__FP10fopAc_ac_cUsUsUs(); -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 entry__10daMirror_cFP8J3DModel(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void offSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void reset__14dEvt_control_cFv(); -extern "C" void -set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void -set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void dPath_GetRoomPath__Fii(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void Release__4cBgSFP9dBgW_Base(); -extern "C" void LineCross__4cBgSFP11cBgS_LinChk(); -extern "C" void GroundCross__4cBgSFP11cBgS_GndChk(); -extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla(); -extern "C" void Regist__4dBgSFP9dBgW_BaseP10fopAc_ac_c(); -extern "C" void dBgS_MoveBGProc_Trans__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void RideCallBack__4dBgSFRC13cBgS_PolyInfoP10fopAc_ac_c(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__11dBgS_GndChkFv(); -extern "C" void __dt__11dBgS_GndChkFv(); -extern "C" void Set__11dBgS_LinChkFPC4cXyzPC4cXyzPC10fopAc_ac_c(); -extern "C" void __ct__14dBgS_ObjLinChkFv(); -extern "C" void __dt__14dBgS_ObjLinChkFv(); -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 SetObj__16dBgS_PolyPassChkFv(); -extern "C" void Set__4cBgWFP6cBgD_tUlPA3_A4_f(); -extern "C" void __ct__4dBgWFv(); -extern "C" void Move__4dBgWFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Move__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 GetTgHitGObj__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void Start__9dCamera_cFv(); -extern "C" void Stop__9dCamera_cFv(); -extern "C" void SetTrimSize__9dCamera_cFl(); -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 __pl__4cXyzCFRC3Vec(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void __ml__4cXyzCFf(); -extern "C" void cM_atan2s__Fff(); -extern "C" void SetPos__11cBgS_GndChkFPC4cXyz(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void ChkUsed__9cBgW_BgIdCFv(); -extern "C" void cBgW_CheckBGround__Ff(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_23(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_23(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -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 BaseZ__4cXyz[12]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" extern u8 struct_80C24698[4]; - -// -// Declarations: -// +enum WALK_TYPE { + WALK_PUSH = 1, + WALK_IRON_BALL_HIT, +}; /* 80C21CD8-80C21DAC 000078 00D4+00 1/1 0/0 0/0 .text * PPCallBack__13daObjIceBlk_cFP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::PPCallBack(fopAc_ac_c* param_0, fopAc_ac_c* param_1, s16 param_2, - dBgW_Base::PushPullLabel param_3) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/func_80C21CD8.s" +void daObjIceBlk_c::PPCallBack(fopAc_ac_c* i_bgActor, fopAc_ac_c* i_pushActor, s16 i_angle, + dBgW_Base::PushPullLabel i_label) { + bool temp_r3 = cLib_checkBit<u8>(i_label, dBgW::PPLABEL_PUSH) != 0; + bool temp_r3_2 = cLib_checkBit<u8>(i_label, dBgW::PPLABEL_PUSH) != 0; + int push_dir = -1; + + if (temp_r3_2 && temp_r3) { + if (i_angle >= -0x2000 && i_angle < 0x2000) { + push_dir = DIR_SOUTH; + } else if (i_angle >= 0x2000 && i_angle < 0x6000) { + push_dir = DIR_EAST; + } else if (i_angle < -0x2000 && i_angle >= -0x6000) { + push_dir = DIR_WEST; + } else if (i_angle < -0x6000 || i_angle >= 0x6000) { + push_dir = DIR_NORTH; + } + } + + if (push_dir != -1) { + for (int i = 0; i < 4; i++) { + if (i == push_dir) { + ((daObjIceBlk_c*)i_bgActor)->mCounter[i]++; + } else { + ((daObjIceBlk_c*)i_bgActor)->mCounter[i] = 0; + } + } + } + + ((daObjIceBlk_c*)i_bgActor)->mPPLabel = i_label; } -#pragma pop /* 80C21DAC-80C21DC4 00014C 0018+00 1/1 0/0 0/0 .text * rideCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void rideCallBack(dBgW* param_0, fopAc_ac_c* param_1, fopAc_ac_c* param_2) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/rideCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c.s" +static void rideCallBack(dBgW* i_bgw, fopAc_ac_c* i_bgActor, fopAc_ac_c* i_rideActor) { + if (fopAcM_GetName(i_rideActor) == PROC_ALINK) { + ((daObjIceBlk_c*)i_bgActor)->mIsPlayerRide = true; + } } -#pragma pop /* 80C21DC4-80C21E24 000164 0060+00 1/1 0/0 0/0 .text initBaseMtx__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::initBaseMtx() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/initBaseMtx__13daObjIceBlk_cFv.s" +void daObjIceBlk_c::initBaseMtx() { + if (mpIceModel != NULL) { + mpIceModel->setBaseScale(scale); + } + + mpModel->setBaseScale(scale); + setBaseMtx(); } -#pragma pop /* 80C21E24-80C21EA4 0001C4 0080+00 2/2 0/0 0/0 .text setBaseMtx__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::setBaseMtx() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/setBaseMtx__13daObjIceBlk_cFv.s" +void daObjIceBlk_c::setBaseMtx() { + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(shape_angle.y); + + if (mpIceModel != NULL) { + mpIceModel->setBaseTRMtx(mDoMtx_stack_c::get()); + } + + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), mBgMtx); } -#pragma pop /* 80C21EA4-80C21F2C 000244 0088+00 1/1 0/0 0/0 .text getPointNo__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::getPointNo() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/getPointNo__13daObjIceBlk_cFv.s" +u16 daObjIceBlk_c::getPointNo() { + u16 point_no = 0; + + for (int i = 0; i < mMaxSwNum; i++) { + if (fopAcM_isSwitch(this, mSwbit + i)) { + point_no |= (1 << i); + } + } + + return point_no; } -#pragma pop /* 80C21F2C-80C21FC8 0002CC 009C+00 1/1 0/0 0/0 .text loadCurrentPos__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::loadCurrentPos() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/loadCurrentPos__13daObjIceBlk_cFv.s" +void daObjIceBlk_c::loadCurrentPos() { + if (mpPath != NULL) { + u16 point_no = getPointNo(); + if (point_no != 0) { + dStage_dPnt_c* point = &mpPath->m_points[point_no - 1]; + home.pos = point->m_position; + old.pos = home.pos; + current.pos = home.pos; + } + } } -#pragma pop -/* ############################################################################################## */ /* 80C242F4-80C24324 000000 0030+00 8/8 0/0 0/0 .rodata l_dir_vec */ -SECTION_RODATA static u8 const l_dir_vec[48] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xBF, 0x80, 0x00, 0x00, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static const Vec l_dir_vec[4] = { + {0.0f, 0.0f, 1.0f}, + {1.0f, 0.0f, 0.0f}, + {0.0f, 0.0f, -1.0f}, + {-1.0f, 0.0f, 0.0f}, }; -COMPILER_STRIP_GATE(0x80C242F4, &l_dir_vec); /* 80C24324-80C2432C 000030 0008+00 1/3 0/0 0/0 .rodata l_dir_angle */ -SECTION_RODATA static u8 const l_dir_angle[8] = { - 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0xC0, 0x00, -}; -COMPILER_STRIP_GATE(0x80C24324, &l_dir_angle); +static const s16 l_dir_angle[4] = {0x0000, 0x4000, 0x8000, 0xC000}; /* 80C2432C-80C24370 000038 0044+00 0/1 0/0 0/0 .rodata l_cyl_src */ -#pragma push -#pragma force_active on const static dCcD_SrcCyl l_cyl_src = { { - {0x0, {{0x100, 0x1, 0x1d}, {0x400000, 0x11}, 0x0}}, // mObj - {dCcD_SE_NONE, 0x0, 0x0, 0x2, 0x1}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x6}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf + {0x0, {{0x100, 0x1, 0x1d}, {0x400000, 0x11}, 0x0}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x2, 0x1}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x6}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf { - {0.0f, 0.0f, 0.0f}, // mCenter - 180.0f, // mRadius - 290.0f // mHeight - } // mCyl -}; -#pragma pop - -/* 80C24370-80C24374 00007C 0004+00 2/5 0/0 0/0 .rodata @3936 */ -SECTION_RODATA static u8 const lit_3936[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80C24370, &lit_3936); - -/* 80C24374-80C2437C 000080 0008+00 0/1 0/0 0/0 .rodata @3937 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3937[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C24374, &lit_3937); -#pragma pop - -/* 80C2437C-80C24384 000088 0008+00 0/1 0/0 0/0 .rodata @3938 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3938[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C2437C, &lit_3938); -#pragma pop - -/* 80C24384-80C2438C 000090 0008+00 0/1 0/0 0/0 .rodata @3939 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3939[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + {0.0f, 0.0f, 0.0f}, // mCenter + 180.0f, // mRadius + 290.0f // mHeight + } // mCyl }; -COMPILER_STRIP_GATE(0x80C24384, &lit_3939); -#pragma pop - -/* 80C2438C-80C24390 000098 0004+00 0/1 0/0 0/0 .rodata @3940 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3940 = 5.0f; -COMPILER_STRIP_GATE(0x80C2438C, &lit_3940); -#pragma pop /* 80C21FC8-80C22200 000368 0238+00 2/2 0/0 0/0 .text saveCurrentPos__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::saveCurrentPos() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/saveCurrentPos__13daObjIceBlk_cFv.s" +int daObjIceBlk_c::saveCurrentPos() { + int current_pos = -1; + + if (mpPath == NULL) { + return current_pos; + } + + dStage_dPnt_c* point = mpPath->m_points; + f32 nearest_dist = 1000000.0f; + int nearest_point_no = 0; + + for (int i = 0; i < mpPath->m_num; i++) { +#ifdef DEBUG + f32 dist = current.pos.absXZ(point->m_position); + if (dist < nearest_dist) { + nearest_point_no = i; + nearest_dist = dist; + } +#endif + + if (current.pos.absXZ(point->m_position) < 5.0f) { + current_pos = i + 1; + break; + } + + point++; + } + + if (current_pos < 0) { + // "Ice Block: No Path Point found nearby!\n" + OS_REPORT_ERROR("氷ブロック:近くにパスポイントが見つかりませんでした!\n"); + + // "Ice Block: Nearest Path Point No:<%d>:<%f>cm\n" + OS_REPORT_ERROR("氷ブロック:一番近いパスポイントNo<%d>:<%f>cm\n", nearest_point_no, + nearest_dist); + + // "Ice Block: Save Switch not activated\n" + OS_REPORT_ERROR("氷ブロック:スイッチによるセーブは実行されませんでした\n"); + return current_pos; + } + + for (int i = 0; i < mMaxSwNum; i++) { + if (current_pos & (1 << i)) { + fopAcM_onSwitch(this, mSwbit + i); + } else { + fopAcM_offSwitch(this, mSwbit + i); + } + } + + // "Ice Block: Saved at point<%d>!\n" + OS_REPORT("氷ブロック:ポイント<%d>にセーブしました!\n", current_pos - 1); + return current_pos; } -#pragma pop /* 80C22200-80C2224C 0005A0 004C+00 1/1 0/0 0/0 .text enablePushPull__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::enablePushPull() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/enablePushPull__13daObjIceBlk_cFv.s" +void daObjIceBlk_c::enablePushPull() { + if (mpBgW != NULL && mpBgW->ChkUsed()) { + mpBgW->OnPushPullOk(); + } } -#pragma pop /* 80C2224C-80C22298 0005EC 004C+00 2/2 0/0 0/0 .text disablePushPull__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::disablePushPull() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/disablePushPull__13daObjIceBlk_cFv.s" -} -#pragma pop - -/* ############################################################################################## */ -/* 80C24390-80C24394 00009C 0004+00 0/1 0/0 0/0 .rodata l_eff_id$4008 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_eff_id[4] = { - 0x8A, - 0xE1, - 0x8A, - 0xE2, -}; -COMPILER_STRIP_GATE(0x80C24390, &l_eff_id); -#pragma pop - -/* 80C24394-80C24398 0000A0 0004+00 0/1 0/0 0/0 .rodata @4078 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4078 = 30.0f; -COMPILER_STRIP_GATE(0x80C24394, &lit_4078); -#pragma pop - -/* 80C24398-80C2439C 0000A4 0004+00 2/3 0/0 0/0 .rodata @4079 */ -SECTION_RODATA static f32 const lit_4079 = -6.0f; -COMPILER_STRIP_GATE(0x80C24398, &lit_4079); - -/* 80C2439C-80C243A0 0000A8 0004+00 0/5 0/0 0/0 .rodata @4080 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4080 = 1.0f; -COMPILER_STRIP_GATE(0x80C2439C, &lit_4080); -#pragma pop - -/* 80C2449C-80C2449C 0001A8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80C2449C = "Y_icecube"; -SECTION_DEAD static char const* const stringBase_80C244A6 = - "氷ブロック:パスポイント数が多すぎます!\n"; -#pragma pop - -/* 80C22298-80C22618 000638 0380+00 1/0 0/0 0/0 .text Create__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::Create() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/Create__13daObjIceBlk_cFv.s" +void daObjIceBlk_c::disablePushPull() { + if (mpBgW != NULL && mpBgW->ChkUsed()) { + mpBgW->OffPushPullOk(); + } } -#pragma pop - -/* ############################################################################################## */ -/* 80C243A0-80C243A8 0000AC 0008+00 1/1 0/0 0/0 .rodata l_bmd$4084 */ -SECTION_RODATA static u8 const l_bmd[8] = { - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x08, -}; -COMPILER_STRIP_GATE(0x80C243A0, &l_bmd); /* 80C244D0-80C244DC 000000 000C+00 2/2 0/0 0/0 .data cNullVec__6Z2Calc */ -SECTION_DATA static u8 cNullVec__6Z2Calc[12] = { +static u8 cNullVec__6Z2Calc[12] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; /* 80C244DC-80C244F0 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 */] = { +static u32 lit_1787[1 + 4 /* padding */] = { 0x02000201, /* padding */ 0x40080000, @@ -428,764 +230,696 @@ SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { #pragma pop /* 80C244F0-80C244F4 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_obj_iceblock__stringBase0; +static char* l_arcName = "Y_icecube"; + +/* 80C22298-80C22618 000638 0380+00 1/0 0/0 0/0 .text Create__13daObjIceBlk_cFv */ +int daObjIceBlk_c::Create() { + mpPath = dPath_GetRoomPath(getPathId(), fopAcM_GetRoomNo(this)); + mSwbit = getSwbit(); + + if (mpPath == NULL || mSwbit == 0xFF) { + // "Ice Block: No Path or Save spec so no save\n" + OS_REPORT("[43;30m氷ブロック:パスorセーブ指定が無いのでセーブしません\n"); + mpPath = NULL; + mSwbit = 0xFF; + mMaxSwNum = 0; + } + + if (mpPath != NULL) { + u16 point_num = mpPath->m_num; + + if (point_num == 1) { + mMaxSwNum = 1; + } else if (point_num < 4) { + mMaxSwNum = 2; + } else if (point_num < 8) { + mMaxSwNum = 3; + } else if (point_num < 16) { + mMaxSwNum = 4; + } else if (point_num < 32) { + mMaxSwNum = 5; + } else if (point_num < 64) { + mMaxSwNum = 6; + } else if (point_num < 128) { + mMaxSwNum = 7; + } else if (point_num < 255) { + mMaxSwNum = 8; + } else { + // "Ice Block: Too many path points!\n" + OSReport_Error("氷ブロック:パスポイント数が多すぎます!\n"); + return 0; + } + + // "Ice Block: Using switch<%d> of <%d>n\" + OS_REPORT("氷ブロック:スイッチ<%d>から<%d>個使用します\n", mSwbit, mMaxSwNum); + } + + loadCurrentPos(); + + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + + mAcchCir.SetWall(30.0f, 30.0f); + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, + fopAcM_GetSpeed_p(this), NULL, NULL); + mCcStts.Init(0xFF, 0xFF, this); + mCcCyl.Set(l_cyl_src); + mCcCyl.SetStts(&mCcStts); + + J3DJoint* pjoint = mpModel->getModelData()->getJointNodePointer(0); + fopAcM_setCullSizeBox(this, scale.x * pjoint->getMin()->x, scale.y * -pjoint->getMax()->y, + scale.z * pjoint->getMin()->z, scale.x * pjoint->getMax()->x, + scale.y * pjoint->getMax()->y, scale.z * pjoint->getMax()->z); + + mpBgW->SetPushPullCallback((dBgW_Base::PushPull_CallBack)PPCallBack); + mpBgW->SetRideCallback(rideCallBack); + + fopAcM_SetGravity(this, -6.0f); + + if (getSwbit2() != 0xFF) { + if (!fopAcM_isSwitch(this, getSwbit2())) { + if (mpBgW != NULL && mpBgW->ChkUsed()) { + dComIfG_Bgsp().Release(mpBgW); + } + + if (mpIceBgW != NULL && !mpIceBgW->ChkUsed()) { + dComIfG_Bgsp().Regist(mpIceBgW, this); + } + + if (mpIceBgW != NULL) { + mpIceBgW->Move(); + } + + for (int i = 0; i < 2; i++) { + static const u16 l_eff_id[] = {0x8AE1, 0x8AE2}; + mColdEffEmitters[i] = + dComIfGp_particle_set(l_eff_id[i], ¤t.pos, &home.angle, &scale, 0xFF, + NULL, -1, NULL, NULL, NULL); +#ifdef DEBUG + if (mColdEffEmitters[i] == NULL) { + // "Ice Block: Cold Effect set failed\n" + OS_REPORT("氷ブロック:冷気エフェクトセット失敗\n"); + return 0; + } +#endif + } + } + } + + init_bgCheck(); + mode_init_wait(); + setAction(ACTION_WAIT_e); + initBaseMtx(); + mHitCounter = 3; + return 1; +} /* 80C22618-80C227F4 0009B8 01DC+00 1/0 0/0 0/0 .text CreateHeap__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::CreateHeap() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/CreateHeap__13daObjIceBlk_cFv.s" +int daObjIceBlk_c::CreateHeap() { + static const int l_bmd[] = {5, 8}; + + if (getSwbit2() != 0xFF && !fopAcM_isSwitch(this, getSwbit2())) { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, l_bmd[0]); + JUT_ASSERT(modelData != 0); + + mpIceModel = mDoExt_J3DModel__create(modelData, 0, 0x11000084); + if (mpIceModel == NULL) { + return 0; + } + + mpIceBgW = new dBgW(); + if (mpIceBgW != NULL && + !mpIceBgW->Set((cBgD_t*)dComIfG_getObjectRes(l_arcName, 11), dBgW::MOVE_BG_e, &mBgMtx)) + { + mpIceBgW->SetCrrFunc(dBgS_MoveBGProc_Trans); + } else { + mpIceBgW = NULL; + return 0; + } + } else { + mpIceModel = NULL; + } + + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, l_bmd[1]); + JUT_ASSERT(modelData != 0); + + J3DModelData* shareModelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, l_bmd[0]); + JUT_ASSERT(shareModelData != 0); + + mDoExt_setupShareTexture(modelData, shareModelData); + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpModel == NULL) { + return 0; + } else if (mpModel != NULL) { + return 1; + } + + return 1; } -#pragma pop /* 80C227F4-80C228B4 000B94 00C0+00 1/1 0/0 0/0 .text create1st__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::create1st() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/create1st__13daObjIceBlk_cFv.s" +int daObjIceBlk_c::create1st() { + int phase = dComIfG_resLoad(&mPhase, l_arcName); + if (phase == cPhs_COMPLEATE_e) { + u32 heap_size = 0xC40; + if (getSwbit2() != 0xFF && !fopAcM_isSwitch(this, getSwbit2())) { + heap_size = 0x2940; + } + + phase = MoveBGCreate(l_arcName, 12, dBgS_MoveBGProc_Trans, heap_size, NULL); + if (phase == cPhs_ERROR_e) { + return phase; + } + } + + return phase; } -#pragma pop /* 80C228B4-80C2294C 000C54 0098+00 1/0 0/0 0/0 .text Execute__13daObjIceBlk_cFPPA3_A4_f */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::Execute(f32 (**param_0)[3][4]) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/Execute__13daObjIceBlk_cFPPA3_A4_f.s" +int daObjIceBlk_c::Execute(Mtx** param_0) { + mode_proc_call(); + event_proc_call(); + + *param_0 = &mBgMtx; + setBaseMtx(); + + eyePos = current.pos; + attention_info.position = current.pos; + + mPPLabel = dBgW::PPLABEL_NONE; + mIsPlayerRide = false; + mCcStts.Move(); + return 1; } -#pragma pop /* 80C2294C-80C22B04 000CEC 01B8+00 1/1 0/0 0/0 .text checkWalk__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::checkWalk() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/checkWalk__13daObjIceBlk_cFv.s" +int daObjIceBlk_c::checkWalk() { + int push_dir = -1; + + if (getSwbit2() != 0xFF && !fopAcM_isSwitch(this, getSwbit2())) { + return -1; + } + + for (int i = 0; i < 4; i++) { + if (mCounter[i] != 0) { + push_dir = i; + mWalkType = WALK_PUSH; + } + } + + if (mCcCyl.ChkTgHit()) { + dCcD_GObjInf* hit_gobj = mCcCyl.GetTgHitGObj(); + if (!mIsPlayerRide && hit_gobj != NULL && hit_gobj->ChkAtType(AT_TYPE_IRON_BALL) && + hit_gobj->GetAtAtp() == 3) + { + cXyz sp38 = current.pos - daPy_getPlayerActorClass()->current.pos; + s16 hit_angle = cM_atan2s(sp38.x, sp38.z); + + if (hit_angle >= -0x2000 && hit_angle < 0x2000) { + push_dir = DIR_SOUTH; + } else if (hit_angle >= 0x2000 && hit_angle < 0x6000) { + push_dir = DIR_EAST; + } else if (hit_angle < -0x2000 && hit_angle >= -0x6000) { + push_dir = DIR_WEST; + } else if (hit_angle < -0x6000 || hit_angle >= 0x6000) { + push_dir = DIR_NORTH; + } + + mWalkType = WALK_IRON_BALL_HIT; + } + } + + if (push_dir != -1 && checkWallPre(l_dir_angle[push_dir]) >= 0) { + push_dir = -1; + } + + return push_dir; } -#pragma pop /* 80C22B04-80C22B28 000EA4 0024+00 3/3 0/0 0/0 .text clrCounter__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::clrCounter() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/clrCounter__13daObjIceBlk_cFv.s" +void daObjIceBlk_c::clrCounter() { + for (int i = 0; i < 4; i++) { + mCounter[i] = 0; + } } -#pragma pop - -/* ############################################################################################## */ -/* 80C243A8-80C243AC 0000B4 0004+00 0/3 0/0 0/0 .rodata @4361 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4361 = -1.0f; -COMPILER_STRIP_GATE(0x80C243A8, &lit_4361); -#pragma pop - -/* 80C244F4-80C24500 -00001 000C+00 0/1 0/0 0/0 .data @4231 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4231[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)mode_proc_wait__13daObjIceBlk_cFv, -}; -#pragma pop - -/* 80C24500-80C2450C -00001 000C+00 0/1 0/0 0/0 .data @4232 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4232[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)mode_proc_walk__13daObjIceBlk_cFv, -}; -#pragma pop - -/* 80C2450C-80C24524 00003C 0018+00 0/1 0/0 0/0 .data l_func$4230 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_func_4230[24] = { - 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 /* 80C22B28-80C22EF8 000EC8 03D0+00 1/1 0/0 0/0 .text mode_proc_call__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::mode_proc_call() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/mode_proc_call__13daObjIceBlk_cFv.s" +void daObjIceBlk_c::mode_proc_call() { + typedef void (daObjIceBlk_c::*modeProc)(void); + static modeProc l_func[] = {&mode_proc_wait, &mode_proc_walk}; + + if (getSwbit2() != 0xFF && !fopAcM_isSwitch(this, getSwbit2())) { + mCcCyl.OnAtSPrmBit(1); + disablePushPull(); + + if (mCcCyl.ChkTgHit()) { + dCcD_GObjInf* hit_gobj = mCcCyl.GetTgHitGObj(); + + if (hit_gobj->GetAtType() & AT_TYPE_IRON_BALL) { + BOOL break_ice = false; + if (hit_gobj->GetAtAtp() == 100 || hit_gobj->GetAtAtp() == 3) { + break_ice = true; + } else if (hit_gobj->GetAtAtp() == 2) { + mKezuruEmtrID = dComIfGp_particle_set(mKezuruEmtrID, 0x8678, ¤t.pos, + &shape_angle, NULL); + fopAcM_seStart(this, Z2SE_OBJ_ICE_KEZURU, 0); + + mHitCounter--; + if (mHitCounter == 0) { + break_ice = true; + } + } + + if (break_ice) { + if (mpIceBgW != NULL && mpIceBgW->ChkUsed()) { + dComIfG_Bgsp().Release(mpIceBgW); + } + + if (mpBgW != NULL && !mpBgW->ChkUsed()) { + dComIfG_Bgsp().Regist(mpBgW, this); + } + + setEffect(); + fopAcM_onSwitch(this, getSwbit2()); + fopAcM_seStart(this, Z2SE_OBJ_ICE_BREAK, 0); + enablePushPull(); + } + } + } + + mCcCyl.SetC(current.pos); + dComIfG_Ccsp()->Set(&mCcCyl); + return; + } + + mCcCyl.OffAtSPrmBit(1); + + cXyz prev_pos(current.pos); + fopAcM_posMoveF(this, NULL); + current.pos.x = prev_pos.x; + current.pos.z = prev_pos.z; + + bgCheck(); + + (this->*l_func[mMode])(); + + if (cLib_checkBit<State_e>(mState, STATE_LAND_e)) { + dComIfGp_getVibration().StartShock(4, 31, cXyz(0.0f, 1.0f, 0.0f)); + fopAcM_seStart(this, Z2SE_OBJ_IRONBLOCK_LAND, 0); + } } -#pragma pop /* 80C22EF8-80C22F74 001298 007C+00 2/2 0/0 0/0 .text mode_init_wait__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::mode_init_wait() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/mode_init_wait__13daObjIceBlk_cFv.s" +void daObjIceBlk_c::mode_init_wait() { + int current_pos = saveCurrentPos(); + if (current_pos - 1 == getCorrectPointNo()) { + disablePushPull(); + // "Ice Block: Disable PushPull since correct position<%d>\n" + OS_REPORT("氷ブロック:正解位置なので押し引き不可になりました<%d>\n", current_pos); + } else { + // "Ice Block: Not in Correct<%d> position<%d>\n" + OS_REPORT("氷ブロック:正解位置<%d>ではありません<%d>\n", getCorrectPointNo(), current_pos); + } + + fopAcM_SetSpeedF(this, 0.0f); + fopAcM_SetGravity(this, -6.0f); + + mMoveDir = -1; + clrCounter(); + mWalkType = 0; + mMode = MODE_PROC_WAIT_e; } -#pragma pop /* 80C22F74-80C23058 001314 00E4+00 1/0 0/0 0/0 .text mode_proc_wait__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::mode_proc_wait() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/mode_proc_wait__13daObjIceBlk_cFv.s" +void daObjIceBlk_c::mode_proc_wait() { + int push_dir = checkWalk(); + if (push_dir != -1) { + fopAcM_seStart(this, Z2SE_OBJ_IRONBLOCK_MOVE, 0); + mMoveDir = push_dir; + current.angle.y = l_dir_angle[push_dir]; + mode_init_walk(); + } + + if (!cLib_checkBit<u8>(mPPLabel, dBgW::PPLABEL_PUSH)) { + clrCounter(); + } + + mCcCyl.SetC(current.pos); + dComIfG_Ccsp()->Set(&mCcCyl); } -#pragma pop /* 80C23058-80C23088 0013F8 0030+00 1/1 0/0 0/0 .text mode_init_walk__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::mode_init_walk() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/mode_init_walk__13daObjIceBlk_cFv.s" +void daObjIceBlk_c::mode_init_walk() { + fopAcM_SetGravity(this, -6.0f); + mWalkInitPos = current.pos; + mMode = MODE_PROC_WALK_e; } -#pragma pop - -/* ############################################################################################## */ -/* 80C243AC-80C243B0 0000B8 0004+00 0/1 0/0 0/0 .rodata @4451 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4451 = 21.0f; -COMPILER_STRIP_GATE(0x80C243AC, &lit_4451); -#pragma pop - -/* 80C243B0-80C243B4 0000BC 0004+00 0/1 0/0 0/0 .rodata @4452 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4452 = 1.0f / 20.0f; -COMPILER_STRIP_GATE(0x80C243B0, &lit_4452); -#pragma pop - -/* 80C243B4-80C243B8 0000C0 0004+00 0/1 0/0 0/0 .rodata @4453 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4453 = 1.0f / 100.0f; -COMPILER_STRIP_GATE(0x80C243B4, &lit_4453); -#pragma pop - -/* 80C243B8-80C243BC 0000C4 0004+00 0/1 0/0 0/0 .rodata @4454 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4454 = 27.0f; -COMPILER_STRIP_GATE(0x80C243B8, &lit_4454); -#pragma pop - -/* 80C243BC-80C243C0 0000C8 0004+00 0/1 0/0 0/0 .rodata @4455 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4455 = 23.0f; -COMPILER_STRIP_GATE(0x80C243BC, &lit_4455); -#pragma pop - -/* 80C243C0-80C243C4 0000CC 0004+00 0/1 0/0 0/0 .rodata @4456 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4456 = 300.0f; -COMPILER_STRIP_GATE(0x80C243C0, &lit_4456); -#pragma pop - -/* 80C243C4-80C243CC 0000D0 0008+00 0/1 0/0 0/0 .rodata @4459 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4459[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C243C4, &lit_4459); -#pragma pop /* 80C23088-80C23388 001428 0300+00 1/0 0/0 0/0 .text mode_proc_walk__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::mode_proc_walk() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/mode_proc_walk__13daObjIceBlk_cFv.s" +void daObjIceBlk_c::mode_proc_walk() { + if (mWalkType == WALK_PUSH) { + cLib_addCalc(&speedF, 21.0f, 0.05f, 1.0f, 0.01f); + } else if (mWalkType == WALK_IRON_BALL_HIT) { + cLib_chaseF(&speedF, 27.0f, 23.0f); + } + + cXyz prev_pos(current.pos); + fopAcM_posMove(this, NULL); + current.pos.y = prev_pos.y; + + if (checkWallPre(l_dir_angle[mMoveDir]) >= 0) { + current.pos.x -= mWallPrePos.x; + current.pos.z -= mWallPrePos.z; + dComIfGp_getVibration().StartShock(4, 31, cXyz(0.0f, 1.0f, 0.0f)); + fopAcM_seStart(this, Z2SE_OBJ_IRONBLOCK_STOP, 0); + mode_init_wait(); + } else if (!cLib_checkBit<State_e>(mState, STATE_2_e) && checkFall()) { + cXyz sp4C(speed); + + int sp20; + if (mMoveDir == DIR_EAST) { + sp20 = (current.pos.x - mWalkInitPos.x) / 300.0f; + current.pos.x = mWalkInitPos.x + sp20 * 300.0f; + } else if (mMoveDir == DIR_WEST) { + sp20 = (mWalkInitPos.x - current.pos.x) / 300.0f; + current.pos.x = mWalkInitPos.x - sp20 * 300.0f; + } else if (mMoveDir == DIR_SOUTH) { + sp20 = (current.pos.z - mWalkInitPos.z) / 300.0f; + current.pos.z = mWalkInitPos.z + sp20 * 300.0f; + } else if (mMoveDir == DIR_NORTH) { + sp20 = (mWalkInitPos.z - current.pos.z) / 300.0f; + current.pos.z = mWalkInitPos.z - sp20 * 300.0f; + } + + mode_init_wait(); + } + + clrCounter(); } -#pragma pop -/* ############################################################################################## */ -/* 80C243CC-80C243D0 0000D8 0004+00 0/1 0/0 0/0 .rodata l_eff_break_b$4463 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_eff_break_b[4] = { - 0x86, - 0x79, - 0x86, - 0x7A, -}; -COMPILER_STRIP_GATE(0x80C243CC, &l_eff_break_b); -#pragma pop +/* 80C23388-80C2350C 001728 0184+00 1/1 0/0 0/0 .text setEffect__13daObjIceBlk_cFv */ +void daObjIceBlk_c::setEffect() { + static const u16 l_eff_break_b[] = {0x8679, 0x867A}; + static const u16 l_eff_break_id[] = {0x8ADF, 0x8AE0}; -/* 80C243D0-80C243D4 0000DC 0004+00 0/1 0/0 0/0 .rodata l_eff_break_id$4464 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_eff_break_id[4] = { - 0x8A, - 0xDF, - 0x8A, - 0xE0, -}; -COMPILER_STRIP_GATE(0x80C243D0, &l_eff_break_id); -#pragma pop + field_0x9d4 = dComIfGp_particle_set(field_0x9d4, 0x867B, ¤t.pos, &shape_angle, NULL, 0xFF, + NULL, -1, NULL, NULL, NULL); + field_0x9d8 = dComIfGp_particle_set(field_0x9d8, l_eff_break_b[0], ¤t.pos, &shape_angle, + NULL, 0xFF, NULL, -1, NULL, NULL, NULL); -/* 80C23388-80C2350C 001728 0184+00 1/1 0/0 0/0 .text setEffect__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::setEffect() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/setEffect__13daObjIceBlk_cFv.s" + for (int i = 0; i < 2; i++) { + dComIfGp_particle_set(l_eff_break_id[i], ¤t.pos, &home.angle, &scale, 0xFF, NULL, -1, + NULL, NULL, NULL); + } + + for (int i = 0; i < 2; i++) { + if (mColdEffEmitters[i] != NULL) { + mColdEffEmitters[i]->becomeInvalidEmitter(); + mColdEffEmitters[i] = NULL; + } + } } -#pragma pop -/* ############################################################################################## */ -/* 80C243D4-80C24410 0000E0 003C+00 0/1 0/0 0/0 .rodata l_check_offsetXY$4509 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_check_offsetXY[60] = { - 0xC3, 0x11, 0x00, 0x00, 0x40, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x11, 0x00, - 0x00, 0x43, 0x93, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x11, 0x00, 0x00, 0x43, 0x93, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x11, 0x00, 0x00, 0x40, 0xA0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C243D4, &l_check_offsetXY); -#pragma pop +/* 80C2350C-80C236C8 0018AC 01BC+00 2/2 0/0 0/0 .text checkWallPre__13daObjIceBlk_cFs */ +int daObjIceBlk_c::checkWallPre(s16 i_angle) { + dBgS_ObjLinChk linchk; + cXyz start; + cXyz end; + cXyz spBC; + cXyz spC8; -/* 80C24410-80C24414 00011C 0004+00 0/1 0/0 0/0 .rodata @4571 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4571 = 150.0f; -COMPILER_STRIP_GATE(0x80C24410, &lit_4571); -#pragma pop + int var_r29 = -1; -/* 80C24414-80C24418 000120 0004+00 0/1 0/0 0/0 .rodata @4572 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4572 = 155.0f; -COMPILER_STRIP_GATE(0x80C24414, &lit_4572); -#pragma pop + linchk.SetActorPid(mBase.mBsPcId); -/* 80C2350C-80C236C8 0018AC 01BC+00 2/2 0/0 0/0 .text checkWallPre__13daObjIceBlk_cFs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::checkWallPre(s16 param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/checkWallPre__13daObjIceBlk_cFs.s" -} -#pragma pop + mDoMtx_stack_c::YrotS(i_angle); + mDoMtx_stack_c::multVec(&cXyz::BaseZ, &spBC); + spC8 = spBC * 150.0f; + spBC *= 155.0f; -/* ############################################################################################## */ -/* 80C24418-80C24454 000124 003C+00 0/1 0/0 0/0 .rodata l_check_offsetXZ$4577 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_check_offsetXZ_4577[60] = { - 0xC3, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x11, 0x00, 0x00, 0xC3, 0x11, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x11, 0x00, 0x00, 0x43, 0x11, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x43, 0x11, 0x00, 0x00, 0x43, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, - 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C24418, &l_check_offsetXZ_4577); -#pragma pop + for (int i = 0; i < 5; i++) { + static const Vec l_check_offsetXY[] = { + {-145.0f, 5.0f, 0.0f}, {-145.0f, 295.0f, 0.0f}, {145.0f, 295.0f, 0.0f}, + {145.0f, 5.0f, 0.0f}, {0.0f, 150.0f, 0.0f}, + }; -/* 80C24454-80C24458 000160 0004+00 0/1 0/0 0/0 .rodata @4603 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4603 = -1000000000.0f; -COMPILER_STRIP_GATE(0x80C24454, &lit_4603); -#pragma pop + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(i_angle); + mDoMtx_stack_c::multVec(&l_check_offsetXY[i], &start); + end = start + spBC; -/* 80C24458-80C2445C 000164 0004+00 0/1 0/0 0/0 .rodata @4604 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4604 = 100.0f; -COMPILER_STRIP_GATE(0x80C24458, &lit_4604); -#pragma pop + linchk.Set(&start, &end, this); + if (dComIfG_Bgsp().LineCross(&linchk)) { + end = start + spC8; + mWallPrePos = end - linchk.i_GetCross(); + var_r29 = i; + } + } -/* 80C236C8-80C237B0 001A68 00E8+00 2/2 0/0 0/0 .text checkBgHit__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::checkBgHit() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/checkBgHit__13daObjIceBlk_cFv.s" + return var_r29; } -#pragma pop -/* 80C237B0-80C23860 001B50 00B0+00 1/1 0/0 0/0 .text bgCheck__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::bgCheck() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/bgCheck__13daObjIceBlk_cFv.s" -} -#pragma pop +/* 80C236C8-80C237B0 001A68 00E8+00 2/2 0/0 0/0 .text checkBgHit__13daObjIceBlk_cFv */ +int daObjIceBlk_c::checkBgHit() { + cXyz check_pos; + mGroundY = -1000000000.0f; -/* 80C23860-80C238B0 001C00 0050+00 1/1 0/0 0/0 .text init_bgCheck__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::init_bgCheck() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/init_bgCheck__13daObjIceBlk_cFv.s" -} -#pragma pop + int var_r29 = -1; -/* ############################################################################################## */ -/* 80C2445C-80C24498 000168 003C+00 1/1 0/0 0/0 .rodata l_check_offsetXZ$4641 */ -SECTION_RODATA static u8 const l_check_offsetXZ_4641[60] = { - 0xC3, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x11, 0x00, 0x00, 0xC3, 0x11, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x11, 0x00, 0x00, 0x43, 0x11, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x43, 0x11, 0x00, 0x00, 0x43, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, - 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C2445C, &l_check_offsetXZ_4641); + mGndChk.SetActorPid(mBase.mBsPcId); -/* 80C24498-80C2449C 0001A4 0004+00 1/1 0/0 0/0 .rodata @4696 */ -SECTION_RODATA static f32 const lit_4696 = 50.0f; -COMPILER_STRIP_GATE(0x80C24498, &lit_4696); + for (int i = 0; i < 5; i++) { + static const Vec l_check_offsetXZ[] = { + {-145.0f, 0.0f, -145.0f}, {-145.0f, 0.0f, 145.0f}, {145.0f, 0.0f, 145.0f}, + {145.0f, 0.0f, -145.0f}, {0.0f, 0.0f, 0.0f}, + }; -/* 80C24524-80C24530 -00001 000C+00 0/1 0/0 0/0 .data @4705 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4705[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionWait__13daObjIceBlk_cFv, -}; -#pragma pop + check_pos = current.pos + l_check_offsetXZ[i]; + check_pos.y += 100.0f; -/* 80C24530-80C2453C -00001 000C+00 0/1 0/0 0/0 .data @4706 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4706[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionOrderEvent__13daObjIceBlk_cFv, -}; -#pragma pop + mGndChk.SetPos(&check_pos); + f32 gnd_y = dComIfG_Bgsp().GroundCross(&mGndChk); + if (gnd_y > mGroundY) { + mGroundY = gnd_y; + var_r29 = i; + } + } -/* 80C2453C-80C24548 -00001 000C+00 0/1 0/0 0/0 .data @4707 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4707[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionEvent__13daObjIceBlk_cFv, -}; -#pragma pop + return var_r29; +} -/* 80C24548-80C24554 -00001 000C+00 0/1 0/0 0/0 .data @4708 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4708[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionDead__13daObjIceBlk_cFv, -}; -#pragma pop +/* 80C237B0-80C23860 001B50 00B0+00 1/1 0/0 0/0 .text bgCheck__13daObjIceBlk_cFv */ +void daObjIceBlk_c::bgCheck() { + State_e prev_state = mState; + mState = STATE_0_e; -/* 80C24554-80C24584 000084 0030+00 0/1 0/0 0/0 .data l_func$4704 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_func_4704[48] = { - 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, -}; -#pragma pop + if (checkBgHit() < 0) { + // "Ice Block: No Floor!\n" + OS_REPORT("[43;30m氷ブロック:床がありません!\n"); + } -/* 80C24584-80C245A4 -00001 0020+00 1/0 0/0 0/0 .data daObjIceBlk_METHODS */ -static actor_method_class daObjIceBlk_METHODS = { - (process_method_func)daObjIceBlk_create1st__FP13daObjIceBlk_c, - (process_method_func)daObjIceBlk_MoveBGDelete__FP13daObjIceBlk_c, - (process_method_func)daObjIceBlk_MoveBGExecute__FP13daObjIceBlk_c, - 0, - (process_method_func)daObjIceBlk_MoveBGDraw__FP13daObjIceBlk_c, -}; + if (mGroundY > current.pos.y) { + current.pos.y = mGroundY; + speed.y = 0.0f; -/* 80C245A4-80C245D4 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_IceBlock */ -extern actor_process_profile_definition g_profile_Obj_IceBlock = { - fpcLy_CURRENT_e, // mLayerID - 3, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Obj_IceBlock, // mProcName - &g_fpcLf_Method.mBase, // sub_method - sizeof(daObjIceBlk_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 535, // mPriority - &daObjIceBlk_METHODS, // sub_method - 0x00040500, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; + if (!cLib_checkBit<State_e>(prev_state, STATE_2_e)) { + cLib_onBit<State_e>(mState, STATE_LAND_e); + } -/* 80C245D4-80C245E0 000104 000C+00 1/1 0/0 0/0 .data __vt__12dBgS_AcchCir */ -SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_AcchCirFv, -}; + cLib_onBit<State_e>(mState, STATE_2_e); + dComIfG_Bgsp().RideCallBack(mGndChk, this); + } else { + if (cLib_checkBit<State_e>(prev_state, STATE_2_e)) { + cLib_onBit<State_e>(mState, STATE_4_e); + } + } +} -/* 80C245E0-80C245EC 000110 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, -}; +/* 80C23860-80C238B0 001C00 0050+00 1/1 0/0 0/0 .text init_bgCheck__13daObjIceBlk_cFv */ +void daObjIceBlk_c::init_bgCheck() { + if (checkBgHit() >= 0) { + current.pos.y = mGroundY; + mState = STATE_0_e; + cLib_onBit<State_e>(mState, STATE_2_e); + } else { + // "Ice Block: No Floor!\n" + OS_REPORT("氷ブロック:床がありません!\n"); + } +} -/* 80C245EC-80C245F8 00011C 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, -}; +/* 80C238B0-80C23A08 001C50 0158+00 1/1 0/0 0/0 .text checkFall__13daObjIceBlk_cFv */ +BOOL daObjIceBlk_c::checkFall() { + cXyz start; + cXyz end; -/* 80C245F8-80C24628 000128 0030+00 2/2 0/0 0/0 .data __vt__14dBgS_ObjGndChk */ -SECTION_DATA extern void* __vt__14dBgS_ObjGndChk[12] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14dBgS_ObjGndChkFv, - (void*)NULL, - (void*)NULL, - (void*)func_80C242D4, - (void*)NULL, - (void*)NULL, - (void*)func_80C242E4, - (void*)NULL, - (void*)NULL, - (void*)func_80C242DC, -}; + dBgS_ObjLinChk linchk; + linchk.SetActorPid(mBase.mBsPcId); -/* 80C24628-80C24634 000158 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, -}; + for (int i = 0; i < 5; i++) { + static const Vec l_check_offsetXZ[] = { + {-145.0f, 0.0f, -145.0f}, {-145.0f, 0.0f, 145.0f}, {145.0f, 0.0f, 145.0f}, + {145.0f, 0.0f, -145.0f}, {0.0f, 0.0f, 0.0f}, + }; -/* 80C24634-80C24640 000164 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, -}; + start = current.pos + l_check_offsetXZ[i]; + end = start; + end.y -= 50.0f; -/* 80C24640-80C24664 000170 0024+00 2/2 0/0 0/0 .data __vt__12dBgS_ObjAcch */ -SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_ObjAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_80C242CC, - (void*)NULL, - (void*)NULL, - (void*)func_80C242C4, -}; + linchk.Set(&start, &end, this); -/* 80C24664-80C24670 000194 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGPla */ -SECTION_DATA extern void* __vt__8cM3dGPla[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGPlaFv, -}; + if (dComIfG_Bgsp().LineCross(&linchk)) { + cM3dGPla plane; + dComIfG_Bgsp().GetTriPla(linchk, &plane); -/* 80C238B0-80C23A08 001C50 0158+00 1/1 0/0 0/0 .text checkFall__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::checkFall() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/checkFall__13daObjIceBlk_cFv.s" -} -#pragma pop + if (cBgW_CheckBGround(plane.mNormal.y)) { + return false; + } + } + } -/* 80C23A08-80C23A50 001DA8 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -// asm cM3dGPla::~cM3dGPla() { -extern "C" asm void __dt__8cM3dGPlaFv() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/__dt__8cM3dGPlaFv.s" + return true; } -#pragma pop /* 80C23A50-80C23B0C 001DF0 00BC+00 1/1 0/0 0/0 .text event_proc_call__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::event_proc_call() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/event_proc_call__13daObjIceBlk_cFv.s" +void daObjIceBlk_c::event_proc_call() { + typedef void (daObjIceBlk_c::*actionFunc)(void); + static actionFunc l_func[] = {&actionWait, &actionOrderEvent, &actionEvent, &actionDead}; + + (this->*l_func[mAction])(); } -#pragma pop /* 80C23B0C-80C23B70 001EAC 0064+00 1/0 0/0 0/0 .text actionWait__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::actionWait() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/actionWait__13daObjIceBlk_cFv.s" +void daObjIceBlk_c::actionWait() { + if (mMode == MODE_PROC_WALK_e && mWalkType == WALK_PUSH) { + setAction(ACTION_ORDER_EVENT_e); + fopAcM_orderPotentialEvent(this, 2, 0, 0); + eventInfo.i_onCondition(fopAcCnd_NOEXEC_e); + } } -#pragma pop /* 80C23B70-80C23C1C 001F10 00AC+00 1/0 0/0 0/0 .text actionOrderEvent__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::actionOrderEvent() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/actionOrderEvent__13daObjIceBlk_cFv.s" +void daObjIceBlk_c::actionOrderEvent() { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + + if (eventInfo.i_checkCommandDemoAccrpt()) { + setAction(ACTION_EVENT_e); + camera->mCamera.Stop(); + camera->mCamera.SetTrimSize(1); + } else if (mMode == MODE_PROC_WALK_e) { + fopAcM_orderPotentialEvent(this, 2, 0, 0); + eventInfo.i_onCondition(fopAcCnd_NOEXEC_e); + } else { + setAction(ACTION_WAIT_e); + } } -#pragma pop /* 80C23C1C-80C23CA0 001FBC 0084+00 1/0 0/0 0/0 .text actionEvent__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::actionEvent() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/actionEvent__13daObjIceBlk_cFv.s" +void daObjIceBlk_c::actionEvent() { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + + if (mMode != MODE_PROC_WALK_e) { + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + setAction(ACTION_WAIT_e); + dComIfGp_event_reset(); + } } -#pragma pop /* 80C23CA0-80C23CA4 002040 0004+00 1/0 0/0 0/0 .text actionDead__13daObjIceBlk_cFv */ -void daObjIceBlk_c::actionDead() { - /* empty function */ -} +void daObjIceBlk_c::actionDead() {} /* 80C23CA4-80C23DA8 002044 0104+00 1/0 0/0 0/0 .text Draw__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::Draw() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/Draw__13daObjIceBlk_cFv.s" -} -#pragma pop - -/* 80C23DA8-80C23E68 002148 00C0+00 1/0 0/0 0/0 .text Delete__13daObjIceBlk_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjIceBlk_c::Delete() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/Delete__13daObjIceBlk_cFv.s" -} -#pragma pop +int daObjIceBlk_c::Draw() { + g_env_light.settingTevStruct(0x10, ¤t.pos, &tevStr); -/* ############################################################################################## */ -/* 80C24670-80C24698 0001A0 0028+00 1/1 0/0 0/0 .data __vt__13daObjIceBlk_c */ -SECTION_DATA extern void* __vt__13daObjIceBlk_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__13daObjIceBlk_cFv, - (void*)Create__13daObjIceBlk_cFv, - (void*)Execute__13daObjIceBlk_cFPPA3_A4_f, - (void*)Draw__13daObjIceBlk_cFv, - (void*)Delete__13daObjIceBlk_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; + dComIfGd_setListBG(); -/* 80C23E68-80C23FCC 002208 0164+00 1/0 0/0 0/0 .text daObjIceBlk_create1st__FP13daObjIceBlk_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjIceBlk_create1st(daObjIceBlk_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/daObjIceBlk_create1st__FP13daObjIceBlk_c.s" -} -#pragma pop + if (getSwbit2() != 0xFF && !fopAcM_isSwitch(this, getSwbit2())) { + if (mpIceModel != NULL) { + g_env_light.setLightTevColorType_MAJI(mpIceModel, &tevStr); + mDoExt_modelUpdateDL(mpIceModel); + daMirror_c::entry(mpIceModel); + } + } else { + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + mDoExt_modelUpdateDL(mpModel); + daMirror_c::entry(mpModel); + } -/* 80C23FCC-80C24044 00236C 0078+00 4/3 0/0 0/0 .text __dt__14dBgS_ObjGndChkFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -// asm dBgS_ObjGndChk::~dBgS_ObjGndChk() { -extern "C" asm void __dt__14dBgS_ObjGndChkFv() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/__dt__14dBgS_ObjGndChkFv.s" + dComIfGd_setList(); + return 1; } -#pragma pop -/* 80C24044-80C2408C 0023E4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -// asm cM3dGCyl::~cM3dGCyl() { -extern "C" asm void __dt__8cM3dGCylFv() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/__dt__8cM3dGCylFv.s" -} -#pragma pop +/* 80C23DA8-80C23E68 002148 00C0+00 1/0 0/0 0/0 .text Delete__13daObjIceBlk_cFv */ +int daObjIceBlk_c::Delete() { + for (int i = 0; i < 2; i++) { + if (mColdEffEmitters[i] != NULL) { + mColdEffEmitters[i]->becomeInvalidEmitter(); + mColdEffEmitters[i] = NULL; + } + } -/* 80C2408C-80C240D4 00242C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -// asm cM3dGAab::~cM3dGAab() { -extern "C" asm void __dt__8cM3dGAabFv() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/__dt__8cM3dGAabFv.s" -} -#pragma pop + if (mpIceBgW != NULL && mpIceBgW->ChkUsed()) { + dComIfG_Bgsp().Release(mpIceBgW); + } -/* 80C240D4-80C24130 002474 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -// asm dCcD_GStts::~dCcD_GStts() { -extern "C" asm void __dt__10dCcD_GSttsFv() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/__dt__10dCcD_GSttsFv.s" + saveCurrentPos(); + mpBgW->SetPushPullCallback(NULL); + dComIfG_resDelete(&mPhase, l_arcName); + return 1; } -#pragma pop -/* 80C24130-80C241A0 0024D0 0070+00 1/0 0/0 0/0 .text __dt__12dBgS_AcchCirFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -// asm dBgS_AcchCir::~dBgS_AcchCir() { -extern "C" asm void __dt__12dBgS_AcchCirFv() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/__dt__12dBgS_AcchCirFv.s" -} -#pragma pop - -/* 80C241A0-80C24210 002540 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -// asm dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" asm void __dt__12dBgS_ObjAcchFv() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/__dt__12dBgS_ObjAcchFv.s" +/* 80C23E68-80C23FCC 002208 0164+00 1/0 0/0 0/0 .text daObjIceBlk_create1st__FP13daObjIceBlk_c */ +static int daObjIceBlk_create1st(daObjIceBlk_c* i_this) { + fopAcM_SetupActor(i_this, daObjIceBlk_c); + return i_this->create1st(); } -#pragma pop /* 80C24210-80C24230 0025B0 0020+00 1/0 0/0 0/0 .text daObjIceBlk_MoveBGDelete__FP13daObjIceBlk_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjIceBlk_MoveBGDelete(daObjIceBlk_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/daObjIceBlk_MoveBGDelete__FP13daObjIceBlk_c.s" +static int daObjIceBlk_MoveBGDelete(daObjIceBlk_c* i_this) { + return i_this->MoveBGDelete(); } -#pragma pop /* 80C24230-80C24250 0025D0 0020+00 1/0 0/0 0/0 .text daObjIceBlk_MoveBGExecute__FP13daObjIceBlk_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjIceBlk_MoveBGExecute(daObjIceBlk_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/daObjIceBlk_MoveBGExecute__FP13daObjIceBlk_c.s" +static int daObjIceBlk_MoveBGExecute(daObjIceBlk_c* i_this) { + return i_this->MoveBGExecute(); } -#pragma pop /* 80C24250-80C2427C 0025F0 002C+00 1/0 0/0 0/0 .text daObjIceBlk_MoveBGDraw__FP13daObjIceBlk_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjIceBlk_MoveBGDraw(daObjIceBlk_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/daObjIceBlk_MoveBGDraw__FP13daObjIceBlk_c.s" +static int daObjIceBlk_MoveBGDraw(daObjIceBlk_c* i_this) { + return i_this->MoveBGDraw(); } -#pragma pop - -/* 80C2427C-80C242C4 00261C 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -// asm cCcD_GStts::~cCcD_GStts() { -extern "C" asm void __dt__10cCcD_GSttsFv() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/__dt__10cCcD_GSttsFv.s" -} -#pragma pop -/* 80C242C4-80C242CC 002664 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void func_80C242C4() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/func_80C242C4.s" -} -#pragma pop - -/* 80C242CC-80C242D4 00266C 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void func_80C242CC() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/func_80C242CC.s" -} -#pragma pop - -/* 80C242D4-80C242DC 002674 0008+00 1/0 0/0 0/0 .text @20@__dt__14dBgS_ObjGndChkFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void func_80C242D4() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/func_80C242D4.s" -} -#pragma pop - -/* 80C242DC-80C242E4 00267C 0008+00 1/0 0/0 0/0 .text @76@__dt__14dBgS_ObjGndChkFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void func_80C242DC() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/func_80C242DC.s" -} -#pragma pop - -/* 80C242E4-80C242EC 002684 0008+00 1/0 0/0 0/0 .text @60@__dt__14dBgS_ObjGndChkFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void func_80C242E4() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock/func_80C242E4.s" -} -#pragma pop +/* 80C24584-80C245A4 -00001 0020+00 1/0 0/0 0/0 .data daObjIceBlk_METHODS */ +static actor_method_class daObjIceBlk_METHODS = { + (process_method_func)daObjIceBlk_create1st, (process_method_func)daObjIceBlk_MoveBGDelete, + (process_method_func)daObjIceBlk_MoveBGExecute, (process_method_func)NULL, + (process_method_func)daObjIceBlk_MoveBGDraw, +}; -/* 80C2449C-80C2449C 0001A8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* 80C245A4-80C245D4 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_IceBlock */ +extern actor_process_profile_definition g_profile_Obj_IceBlock = { + fpcLy_CURRENT_e, // mLayerID + 3, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Obj_IceBlock, // mProcName + &g_fpcLf_Method.mBase, // sub_method + sizeof(daObjIceBlk_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 535, // mPriority + &daObjIceBlk_METHODS, // sub_method + 0x00040500, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +}; diff --git a/rel/d/a/obj/d_a_obj_iceblock/unknown_translation_unit_bss.cpp b/rel/d/a/obj/d_a_obj_iceblock/unknown_translation_unit_bss.cpp deleted file mode 100644 index 1e188ea000..0000000000 --- a/rel/d/a/obj/d_a_obj_iceblock/unknown_translation_unit_bss.cpp +++ /dev/null @@ -1,28 +0,0 @@ -// -// Generated By: dol2asm -// Translation Unit: unknown_translation_unit_bss -// - -#include "rel/d/a/obj/d_a_obj_iceblock/unknown_translation_unit_bss.h" -#include "dolphin/types.h" - -// -// Forward References: -// - -extern "C" extern u8 struct_80C24698[4]; - -// -// External References: -// - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80C24698-80C2469C -00001 0004+00 0/0 2/2 0/0 .bss None */ -/* 80C24698 0001+00 data_80C24698 None */ -/* 80C24699 0003+00 data_80C24699 None */ -extern u8 struct_80C24698[4]; -u8 struct_80C24698[4]; |
