summaryrefslogtreecommitdiff
path: root/rel
diff options
context:
space:
mode:
Diffstat (limited to 'rel')
-rw-r--r--rel/d/a/door/d_a_door_push/d_a_door_push.cpp4
-rw-r--r--rel/d/a/obj/d_a_obj_Lv5Key/d_a_obj_Lv5Key.cpp883
-rw-r--r--rel/d/a/obj/d_a_obj_iceblock/Makefile2
-rw-r--r--rel/d/a/obj/d_a_obj_iceblock/d_a_obj_iceblock.cpp1754
-rw-r--r--rel/d/a/obj/d_a_obj_iceblock/unknown_translation_unit_bss.cpp28
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(&center, &center);
+
+ 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, &current.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], &current.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, &current.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, &current.pos, &shape_angle, NULL, 0xFF,
+ NULL, -1, NULL, NULL, NULL);
+ field_0x9d8 = dComIfGp_particle_set(field_0x9d8, l_eff_break_b[0], &current.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], &current.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, &current.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];