summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2024-11-30 02:08:38 -0800
committerGitHub <noreply@github.com>2024-11-30 12:08:38 +0200
commit7cc32c05fa4c6da8715ae07a4e190a5085bb859c (patch)
tree3a98e66aaf3e92962e4863173512a259efd5ba85
parent24b72a5302ed7a5a1300dd19b81c64c632e0d9de (diff)
d_a_obj_pillar done (#2255)
-rw-r--r--config/GZ2E01/rels/d_a_obj_pillar/symbols.txt30
-rw-r--r--configure.py2
-rw-r--r--include/d/actor/d_a_obj_carry.h4
-rw-r--r--include/d/actor/d_a_obj_pillar.h92
-rw-r--r--src/d/actor/d_a_b_zant.cpp4
-rw-r--r--src/d/actor/d_a_obj_pillar.cpp951
6 files changed, 511 insertions, 572 deletions
diff --git a/config/GZ2E01/rels/d_a_obj_pillar/symbols.txt b/config/GZ2E01/rels/d_a_obj_pillar/symbols.txt
index cc8cb7455d..5b42fd4bab 100644
--- a/config/GZ2E01/rels/d_a_obj_pillar/symbols.txt
+++ b/config/GZ2E01/rels/d_a_obj_pillar/symbols.txt
@@ -5,7 +5,7 @@ __register_global_object = .text:0x00000078; // type:function size:0x1C scope:gl
__destroy_global_chain = .text:0x00000094; // type:function size:0x58 scope:global
__ct__14daPillar_HIO_cFv = .text:0x000000EC; // type:function size:0x84 scope:global
__dt__14mDoHIO_entry_cFv = .text:0x00000170; // type:function size:0x48 scope:global
-rideCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c = .text:0x000001B8; // type:function size:0xBC scope:global
+rideCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c = .text:0x000001B8; // type:function size:0xBC scope:local
setBaseMtx__10daPillar_cFv = .text:0x00000274; // type:function size:0x138 scope:global
Create__10daPillar_cFv = .text:0x000003AC; // type:function size:0x1BC scope:global
CreateHeap__10daPillar_cFv = .text:0x00000568; // type:function size:0xFC scope:global
@@ -26,10 +26,10 @@ actionEnd__10daPillar_cFv = .text:0x0000118C; // type:function size:0x4 scope:gl
Execute__10daPillar_cFPPA3_A4_f = .text:0x00001190; // type:function size:0x288 scope:global
Draw__10daPillar_cFv = .text:0x00001418; // type:function size:0xE8 scope:global
Delete__10daPillar_cFv = .text:0x00001500; // type:function size:0x40 scope:global
-daPillar_create1st__FP10daPillar_c = .text:0x00001540; // type:function size:0xF4 scope:global
-daPillar_MoveBGDelete__FP10daPillar_c = .text:0x00001634; // type:function size:0x20 scope:global
-daPillar_MoveBGExecute__FP10daPillar_c = .text:0x00001654; // type:function size:0x20 scope:global
-daPillar_MoveBGDraw__FP10daPillar_c = .text:0x00001674; // type:function size:0x2C scope:global
+daPillar_create1st__FP10daPillar_c = .text:0x00001540; // type:function size:0xF4 scope:local
+daPillar_MoveBGDelete__FP10daPillar_c = .text:0x00001634; // type:function size:0x20 scope:local
+daPillar_MoveBGExecute__FP10daPillar_c = .text:0x00001654; // type:function size:0x20 scope:local
+daPillar_MoveBGDraw__FP10daPillar_c = .text:0x00001674; // type:function size:0x2C scope:local
__dt__10cCcD_GSttsFv = .text:0x000016A0; // type:function size:0x48 scope:global
__dt__14daPillar_HIO_cFv = .text:0x000016E8; // type:function size:0x5C scope:global
__sinit_d_a_obj_pillar_cpp = .text:0x00001744; // type:function size:0x3C scope:local
@@ -37,12 +37,12 @@ _ctors = .ctors:0x00000000; // type:label scope:global
__destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
...rodata.0 = .rodata:0x00000000; // type:label scope:local
-l_bmd = .rodata:0x00000000; // type:object size:0x8 scope:global
-l_dzb = .rodata:0x00000008; // type:object size:0x8 scope:global
-l_shadowBmd = .rodata:0x00000010; // type:object size:0x8 scope:global
-l_heap_size = .rodata:0x00000018; // type:object size:0x8 scope:global
-l_cyl_src = .rodata:0x00000020; // type:object size:0x44 scope:global
-l_shake_data = .rodata:0x00000064; // type:object size:0x30 scope:global data:2byte
+l_bmd = .rodata:0x00000000; // type:object size:0x8 scope:local
+l_dzb = .rodata:0x00000008; // type:object size:0x8 scope:local
+l_shadowBmd = .rodata:0x00000010; // type:object size:0x8 scope:local
+l_heap_size = .rodata:0x00000018; // type:object size:0x8 scope:local
+l_cyl_src = .rodata:0x00000020; // type:object size:0x44 scope:local
+l_shake_data = .rodata:0x00000064; // type:object size:0x30 scope:local data:2byte
@3664 = .rodata:0x00000094; // type:object size:0x4 scope:local
@3665 = .rodata:0x00000098; // type:object size:0x4 scope:local
@3681 = .rodata:0x0000009C; // type:object size:0x4 scope:local
@@ -64,14 +64,14 @@ l_shake_data = .rodata:0x00000064; // type:object size:0x30 scope:global data:2b
@4267 = .rodata:0x000000F4; // type:object size:0x4 scope:local
@stringBase0 = .rodata:0x000000F8; // type:object size:0x1B scope:local data:string_table
...data.0 = .data:0x00000000; // type:label scope:local
-cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global
+cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:local
@1787 = .data:0x0000000C; // type:object size:0x4 scope:local
-l_arcName = .data:0x00000020; // type:object size:0x8 scope:global
+l_arcName = .data:0x00000020; // type:object size:0x8 scope:local
@4193 = .data:0x00000028; // type:object size:0xC scope:local
@4194 = .data:0x00000034; // type:object size:0xC scope:local
@4195 = .data:0x00000040; // type:object size:0xC scope:local
l_func$4192 = .data:0x0000004C; // type:object size:0x24 scope:local
-daPillar_METHODS = .data:0x00000070; // type:object size:0x20 scope:global
+daPillar_METHODS = .data:0x00000070; // type:object size:0x20 scope:local
g_profile_Obj_Pillar = .data:0x00000090; // type:object size:0x30 scope:global
__vt__10cCcD_GStts = .data:0x000000C0; // type:object size:0xC scope:global
__vt__10dCcD_GStts = .data:0x000000CC; // type:object size:0xC scope:global
@@ -82,5 +82,5 @@ __vt__14daPillar_HIO_c = .data:0x00000118; // type:object size:0xC scope:global
__vt__14mDoHIO_entry_c = .data:0x00000124; // type:object size:0xC scope:global
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
@3657 = .bss:0x00000008; // type:object size:0xC scope:local
-l_HIO = .bss:0x00000014; // type:object size:0x28 scope:global data:float
+l_HIO = .bss:0x00000014; // type:object size:0x28 scope:local data:float
lbl_593_bss_3C = .bss:0x0000003C; // type:object size:0x1 data:byte
diff --git a/configure.py b/configure.py
index 5df3bbb9f0..9d753cb903 100644
--- a/configure.py
+++ b/configure.py
@@ -1958,7 +1958,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_obj_pdtile"),
ActorRel(NonMatching, "d_a_obj_pdwall"),
ActorRel(NonMatching, "d_a_obj_picture"),
- ActorRel(NonMatching, "d_a_obj_pillar"),
+ ActorRel(Matching, "d_a_obj_pillar"),
ActorRel(Matching, "d_a_obj_pleaf"),
ActorRel(NonMatching, "d_a_obj_poCandle"),
ActorRel(NonMatching, "d_a_obj_poFire"),
diff --git a/include/d/actor/d_a_obj_carry.h b/include/d/actor/d_a_obj_carry.h
index cd003078d6..40a7f828be 100644
--- a/include/d/actor/d_a_obj_carry.h
+++ b/include/d/actor/d_a_obj_carry.h
@@ -201,6 +201,7 @@ public:
s8 prm_chk_type_lightball() { return (getType() == TYPE_BALL_S || getType() == TYPE_BALL_S_2); }
void startCtrl() { mCtrl = 1; }
void endCtrl() { mCtrl = 0; }
+ void setDrop() { field_0xcf2 = 3; }
static void make_prm(csXyz* param_1, u8 param_2, u8 param_3, u8 param_4, u8 param_5, u8 param_6=0) {
param_1->x = (param_4 << 8) | param_3;
@@ -227,7 +228,8 @@ public:
/* 0xCEC */ float field_0xcec;
/* 0xCF0 */ u8 mType;
/* 0xCF1 */ u8 field_0xcf1;
- /* 0xCF2 */ u8 field_0xCF2[0xCF4 - 0xCF2];
+ /* 0xCF2 */ u8 field_0xcf2;
+ /* 0xCF3 */ u8 field_0xCF3[0xCF4 - 0xCF3];
/* 0xCF4 */ cXyz field_0xcf4;
/* 0xD00 */ s16 field_0xd00;
/* 0xD02 */ u8 field_0xD02[0xD04 - 0xD02];
diff --git a/include/d/actor/d_a_obj_pillar.h b/include/d/actor/d_a_obj_pillar.h
index e186a34474..e393353d94 100644
--- a/include/d/actor/d_a_obj_pillar.h
+++ b/include/d/actor/d_a_obj_pillar.h
@@ -2,6 +2,8 @@
#define D_A_OBJ_PILLAR_H
#include "f_op/f_op_actor_mng.h"
+#include "d/d_bg_s_movebg_actor.h"
+#include "d/d_cc_d.h"
/**
* @ingroup actors-objects
@@ -11,15 +13,32 @@
* @details
*
*/
-class daPillar_c : public fopAc_ac_c {
+class daPillar_c : public dBgS_MoveBgActor {
public:
+ enum shake_e {
+ SHAKE_CRASH,
+ SHAKE_STRONG,
+ SHAKE_WEAK,
+ SHAKE_CRASH_LV1,
+ SHAKE_IRONBALL,
+ SHAKE_NONE = 0xFF,
+ };
+
+ struct sdata_t {
+ /* 0x0 */ u8 mPower;
+ /* 0x1 */ u8 field_0x1;
+ /* 0x2 */ s16 mInitAngleX;
+ /* 0x4 */ s16 mTime;
+ /* 0x6 */ s16 mSpeedY;
+ /* 0x8 */ s16 mMaxChangeX;
+ /* 0xA */ s16 mMinChangeX;
+ };
+
/* 80CAF4B4 */ void setBaseMtx();
- /* 80CAF5EC */ void Create();
- /* 80CAF7A8 */ void CreateHeap();
- /* 80CAF8A4 */ void create1st();
- /* 80CAFB44 */ void checkAttacked();
+ /* 80CAF8A4 */ int create1st();
+ /* 80CAFB44 */ bool checkAttacked();
/* 80CAFC08 */ void on_switch();
- /* 80CAFD64 */ void checkShake();
+ /* 80CAFD64 */ int checkShake();
/* 80CAFF60 */ void setShake_rcrash();
/* 80CB01E0 */ void setShake_strong();
/* 80CB022C */ void setShake_weak();
@@ -27,30 +46,61 @@ public:
/* 80CB031C */ void actionSwOnWait();
/* 80CB0378 */ void actionSwOn();
/* 80CB03CC */ void actionEnd();
- /* 80CB03D0 */ void Execute(f32 (**)[3][4]);
- /* 80CB0658 */ void Draw();
- /* 80CB0740 */ void Delete();
+
+ /* 80CAF7A8 */ virtual int CreateHeap();
+ /* 80CAF5EC */ virtual int Create();
+ /* 80CB03D0 */ virtual int Execute(Mtx**);
+ /* 80CB0658 */ virtual int Draw();
+ /* 80CB0740 */ virtual int Delete();
+
+ u16 getTimer() { return fopAcM_GetParamBit(this, 0x18, 8); }
+ u8 checkShadow() { return fopAcM_GetParamBit(this, 8, 8); }
+ u8 getSwbit() { return fopAcM_GetParamBit(this, 0, 8); }
+ u8 getType() { return fopAcM_GetParamBit(this, 0x10, 8); }
+
u8 getMdlType() { return field_0x73e & 0xF; }
- bool checkRollAttack() { return field_0x732 == true; }
- void setShake(int i_shake) { field_0x738 = i_shake; }
-
-private:
- /* 0x568 */ u8 field_0x568[0x732 - 0x568];
- /* 0x732 */ u8 field_0x732;
- /* 0x733 */ u8 field_0x733[0x738 - 0x733];
- /* 0x738 */ int field_0x738;
- /* 0x73C */ u8 field_0x73c[0x73E - 0x73C];
+ bool checkRollAttack() { return mIsRollAttack == true; }
+ void setShake(int i_shake) { mShake = i_shake; }
+ void setAction(u8 i_action) { mAction = i_action; }
+
+ /* 0x5A0 */ request_of_phase_process_class mPhase;
+ /* 0x5A8 */ J3DModel* mpModel;
+ /* 0x5AC */ dCcD_Stts mColliderStts;
+ /* 0x5E8 */ dCcD_Cyl mCylCollider;
+ /* 0x724 */ J3DModel* mpShadowModel;
+ /* 0x728 */ u8 field_0x728[0x72D - 0x728];
+ /* 0x72D */ u8 mIsPrmInit;
+ /* 0x72E */ s16 mRotY;
+ /* 0x730 */ u8 field_0x730[0x732 - 0x730];
+ /* 0x732 */ u8 mIsRollAttack;
+ /* 0x733 */ u8 mAction;
+ /* 0x734 */ s16 field_0x734;
+ /* 0x736 */ s16 mTimer;
+ /* 0x738 */ int mShake;
+ /* 0x73C */ s16 field_0x73c;
/* 0x73E */ u16 field_0x73e;
- /* 0x740 */ u8 field_0x740[0x750 - 0x740];
+ /* 0x740 */ u8 mMdlType;
+ /* 0x741 */ u8 mShakeMode;
+ /* 0x742 */ sdata_t mShakeData;
+ /* 0x74E */ s16 mQuakeTimer;
};
STATIC_ASSERT(sizeof(daPillar_c) == 0x750);
-class daPillar_HIO_c {
+class daPillar_HIO_c : public mDoHIO_entry_c {
public:
/* 80CAF32C */ daPillar_HIO_c();
- /* 80CB0928 */ ~daPillar_HIO_c();
+ /* 80CB0928 */ virtual ~daPillar_HIO_c() {}
+
+ /* 0x04 */ daPillar_c::sdata_t mShakeData;
+ /* 0x10 */ u8 field_0x10[0x1C - 0x10];
+ /* 0x1C */ f32 field_0x1c;
+ /* 0x20 */ f32 field_0x20;
+ /* 0x24 */ u8 field_0x24;
+ /* 0x25 */ u8 field_0x25;
+ /* 0x26 */ u8 field_0x26;
+ /* 0x27 */ u8 mIsAdjust;
};
diff --git a/src/d/actor/d_a_b_zant.cpp b/src/d/actor/d_a_b_zant.cpp
index 280e35d581..47a7afc816 100644
--- a/src/d/actor/d_a_b_zant.cpp
+++ b/src/d/actor/d_a_b_zant.cpp
@@ -3474,7 +3474,7 @@ void daB_ZANT_c::executeMonkey() {
fopAcM_SearchByID(mPillarIDs[field_0x70a], &ppillar);
if (ppillar != NULL) {
- ((daPillar_c*)ppillar)->setShake(2);
+ ((daPillar_c*)ppillar)->setShake(daPillar_c::SHAKE_WEAK);
}
}
break;
@@ -3495,7 +3495,7 @@ void daB_ZANT_c::executeMonkey() {
fopAcM_SearchByID(mPillarIDs[field_0x70a], &ppillar);
if (ppillar != NULL) {
- ((daPillar_c*)ppillar)->setShake(2);
+ ((daPillar_c*)ppillar)->setShake(daPillar_c::SHAKE_WEAK);
}
mMode = 1;
diff --git a/src/d/actor/d_a_obj_pillar.cpp b/src/d/actor/d_a_obj_pillar.cpp
index 8edb619e11..5256261dec 100644
--- a/src/d/actor/d_a_obj_pillar.cpp
+++ b/src/d/actor/d_a_obj_pillar.cpp
@@ -4,139 +4,33 @@
*/
#include "d/actor/d_a_obj_pillar.h"
-#include "d/d_cc_d.h"
-#include "dol2asm.h"
-
-
-
-//
-// Forward References:
-//
-
-extern "C" void __ct__14daPillar_HIO_cFv();
-extern "C" void __dt__14mDoHIO_entry_cFv();
-extern "C" static void rideCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c();
-extern "C" void setBaseMtx__10daPillar_cFv();
-extern "C" void Create__10daPillar_cFv();
-extern "C" void CreateHeap__10daPillar_cFv();
-extern "C" void create1st__10daPillar_cFv();
-extern "C" void __dt__8cM3dGCylFv();
-extern "C" void __dt__8cM3dGAabFv();
-extern "C" void __dt__10dCcD_GSttsFv();
-extern "C" void checkAttacked__10daPillar_cFv();
-extern "C" void on_switch__10daPillar_cFv();
-extern "C" void checkShake__10daPillar_cFv();
-extern "C" void setShake_rcrash__10daPillar_cFv();
-extern "C" void setShake_strong__10daPillar_cFv();
-extern "C" void setShake_weak__10daPillar_cFv();
-extern "C" void switch_proc_call__10daPillar_cFv();
-extern "C" void actionSwOnWait__10daPillar_cFv();
-extern "C" void actionSwOn__10daPillar_cFv();
-extern "C" void actionEnd__10daPillar_cFv();
-extern "C" void Execute__10daPillar_cFPPA3_A4_f();
-extern "C" void Draw__10daPillar_cFv();
-extern "C" void Delete__10daPillar_cFv();
-extern "C" static void daPillar_create1st__FP10daPillar_c();
-extern "C" static void daPillar_MoveBGDelete__FP10daPillar_c();
-extern "C" static void daPillar_MoveBGExecute__FP10daPillar_c();
-extern "C" static void daPillar_MoveBGDraw__FP10daPillar_c();
-extern "C" void __dt__10cCcD_GSttsFv();
-extern "C" void __dt__14daPillar_HIO_cFv();
-extern "C" void __sinit_d_a_obj_pillar_cpp();
-extern "C" extern char const* const d_a_obj_pillar__stringBase0;
-
-//
-// External References:
-//
-
-extern "C" void mDoMtx_ZXYrotM__FPA4_fsss();
-extern "C" void mDoMtx_YrotM__FPA4_fs();
-extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
-extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
-extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
-extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff();
-extern "C" void fopAcM_rollPlayerCrash__FPC10fopAc_ac_cfUlffif();
-extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfGp_getReverb__Fi();
-extern "C" void onSwitch__10dSv_info_cFii();
-extern "C" void isSwitch__10dSv_info_cCFii();
-extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
-extern "C" void StartShock__12dVibration_cFii4cXyz();
-extern "C" void StartQuake__12dVibration_cFii4cXyz();
-extern "C" void StopQuake__12dVibration_cFi();
-extern "C" void dBgS_MoveBGProc_Typical__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz();
-extern "C" void __ct__16dBgS_MoveBgActorFv();
-extern "C" bool IsDelete__16dBgS_MoveBgActorFv();
-extern "C" bool ToFore__16dBgS_MoveBgActorFv();
-extern "C" bool ToBack__16dBgS_MoveBgActorFv();
-extern "C" void
-MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f();
-extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv();
-extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv();
-extern "C" void __ct__10dCcD_GSttsFv();
-extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
-extern "C" void __ct__12dCcD_GObjInfFv();
-extern "C" void ChkTgHit__12dCcD_GObjInfFv();
-extern "C" void GetTgHitObj__12dCcD_GObjInfFv();
-extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl();
-extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
-extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
-extern "C" void Set__4cCcSFP8cCcD_Obj();
-extern "C" void cM_rndF__Ff();
-extern "C" void cM_rndFX__Ff();
-extern "C" void SetC__8cM3dGCylFRC4cXyz();
-extern "C" void cLib_addCalcAngleS__FPsssss();
-extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void __dl__FPv();
-extern "C" void __ptmf_scall();
-extern "C" void _savegpr_26();
-extern "C" void _savegpr_27();
-extern "C" void _savegpr_28();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_26();
-extern "C" void _restgpr_27();
-extern "C" void _restgpr_28();
-extern "C" void _restgpr_29();
-extern "C" extern void* __vt__8dCcD_Cyl[36];
-extern "C" extern void* __vt__9dCcD_Stts[11];
-extern "C" extern void* __vt__12cCcD_CylAttr[25];
-extern "C" extern void* __vt__14cCcD_ShapeAttr[22];
-extern "C" extern void* __vt__9cCcD_Stts[8];
-extern "C" u8 now__14mDoMtx_stack_c[48];
-extern "C" extern u8 g_dComIfG_gameInfo[122384];
-extern "C" u8 sincosTable___5JMath[65536];
-extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
-extern "C" void __register_global_object();
-
-//
-// Declarations:
-//
-
-/* ############################################################################################## */
+#include "d/actor/d_a_player.h"
+#include "d/d_com_inf_game.h"
+#include "d/actor/d_a_obj_carry.h"
+#include "SSystem/SComponent/c_math.h"
+#include "d/d_bg_w.h"
+
+#define ACTION_WAIT 0
+#define ACTION_SWON 1
+#define ACTION_END 2
+
+#define SHAKE_MODE_WAIT 0
+#define SHAKE_MODE_START 100
+#define SHAKE_MODE_RESET_ANGLE 101
+#define SHAKE_MODE_QUAKE 102
+#define SHAKE_MODE_END 103
+
/* 80CB09D4-80CB09DC 000000 0008+00 7/7 0/0 0/0 .rodata l_bmd */
-SECTION_RODATA static u8 const l_bmd[8] = {
- 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05,
-};
-COMPILER_STRIP_GATE(0x80CB09D4, &l_bmd);
+static const int l_bmd[] = {5, 5};
/* 80CB09DC-80CB09E4 000008 0008+00 1/1 0/0 0/0 .rodata l_dzb */
-SECTION_RODATA static u8 const l_dzb[8] = {
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08,
-};
-COMPILER_STRIP_GATE(0x80CB09DC, &l_dzb);
+static const int l_dzb[] = {8, 8};
/* 80CB09E4-80CB09EC 000010 0008+00 1/1 0/0 0/0 .rodata l_shadowBmd */
-SECTION_RODATA static u8 const l_shadowBmd[8] = {
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04,
-};
-COMPILER_STRIP_GATE(0x80CB09E4, &l_shadowBmd);
+static const int l_shadowBmd[] = {4, 4};
/* 80CB09EC-80CB09F4 000018 0008+00 1/1 0/0 0/0 .rodata l_heap_size */
-SECTION_RODATA static u8 const l_heap_size[8] = {
- 0x00, 0x00, 0x18, 0x30, 0x00, 0x00, 0x0C, 0x00,
-};
-COMPILER_STRIP_GATE(0x80CB09EC, &l_heap_size);
+static const u32 l_heap_size[] = {0x1830, 0xC00};
/* 80CB09F4-80CB0A38 000020 0044+00 1/1 0/0 0/0 .rodata l_cyl_src */
const static dCcD_SrcCyl l_cyl_src = {
@@ -153,499 +47,492 @@ const static dCcD_SrcCyl l_cyl_src = {
} // mCyl
};
+#define SHAKE_DATA_CRASH_FIRST 0
+#define SHAKE_DATA_STRONG 1
+#define SHAKE_DATA_WEAK 2
+#define SHAKE_DATA_CRASH 3
+
/* 80CB0A38-80CB0A68 000064 0030+00 2/4 0/0 0/0 .rodata l_shake_data */
-SECTION_RODATA static u8 const l_shake_data[48] = {
- 0x05, 0x00, 0x03, 0x20, 0x00, 0x14, 0x1B, 0x58, 0x01, 0x90, 0x00, 0x41, 0xFF, 0x00, 0x02, 0x58,
- 0x00, 0x14, 0x17, 0x70, 0x01, 0x2C, 0x00, 0x28, 0xFF, 0x00, 0x01, 0x90, 0x00, 0x14, 0x13, 0x88,
- 0x00, 0xC8, 0x00, 0x1E, 0x05, 0x00, 0x03, 0x20, 0x00, 0x78, 0x1B, 0x58, 0x00, 0x1E, 0x00, 0x0F,
-};
-COMPILER_STRIP_GATE(0x80CB0A38, &l_shake_data);
-
-/* 80CB0A68-80CB0A6C 000094 0004+00 0/6 0/0 0/0 .rodata @3664 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_3664[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-COMPILER_STRIP_GATE(0x80CB0A68, &lit_3664);
-#pragma pop
-
-/* 80CB0A6C-80CB0A70 000098 0004+00 0/1 0/0 0/0 .rodata @3665 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3665 = -7.0f / 10.0f;
-COMPILER_STRIP_GATE(0x80CB0A6C, &lit_3665);
-#pragma pop
-
-/* 80CB0ACC-80CB0ACC 0000F8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80CB0ACC = "K_mbhasi0";
-SECTION_DEAD static char const* const stringBase_80CB0AD6 = "K_mbhasi1";
-#pragma pop
-
-/* 80CB0AE8-80CB0AF4 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */
-SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+static const daPillar_c::sdata_t l_shake_data[] = {
+ /* CRASH FIRST */ {5, 0, 800, 20, 7000, 400, 65},
+ /* STRONG */ {255, 0, 600, 20, 6000, 300, 40},
+ /* WEAK */ {255, 0, 400, 20, 5000, 200, 30},
+ /* CRASH */ {5, 0, 800, 120, 7000, 30, 15},
};
-/* 80CB0AF4-80CB0B08 00000C 0004+10 0/0 0/0 0/0 .data @1787 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
- 0x02000201,
- /* padding */
- 0x40080000,
- 0x00000000,
- 0x3FE00000,
- 0x00000000,
-};
-#pragma pop
+UNK_REL_DATA
/* 80CB0B08-80CB0B10 -00001 0008+00 3/3 0/0 0/0 .data l_arcName */
-SECTION_DATA static void* l_arcName[2] = {
- (void*)&d_a_obj_pillar__stringBase0,
- (void*)(((char*)&d_a_obj_pillar__stringBase0) + 0xA),
-};
-
-/* 80CB0B10-80CB0B1C -00001 000C+00 0/1 0/0 0/0 .data @4193 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4193[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionSwOnWait__10daPillar_cFv,
-};
-#pragma pop
-
-/* 80CB0B1C-80CB0B28 -00001 000C+00 0/1 0/0 0/0 .data @4194 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4194[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionSwOn__10daPillar_cFv,
-};
-#pragma pop
-
-/* 80CB0B28-80CB0B34 -00001 000C+00 0/1 0/0 0/0 .data @4195 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4195[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionEnd__10daPillar_cFv,
-};
-#pragma pop
-
-/* 80CB0B34-80CB0B58 00004C 0024+00 0/1 0/0 0/0 .data l_func$4192 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_func[36] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-#pragma pop
-
-/* 80CB0B58-80CB0B78 -00001 0020+00 1/0 0/0 0/0 .data daPillar_METHODS */
-static actor_method_class daPillar_METHODS = {
- (process_method_func)daPillar_create1st__FP10daPillar_c,
- (process_method_func)daPillar_MoveBGDelete__FP10daPillar_c,
- (process_method_func)daPillar_MoveBGExecute__FP10daPillar_c,
- 0,
- (process_method_func)daPillar_MoveBGDraw__FP10daPillar_c,
-};
-
-/* 80CB0B78-80CB0BA8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Pillar */
-extern actor_process_profile_definition g_profile_Obj_Pillar = {
- fpcLy_CURRENT_e, // mLayerID
- 3, // mListID
- fpcPi_CURRENT_e, // mListPrio
- PROC_Obj_Pillar, // mProcName
- &g_fpcLf_Method.base, // sub_method
- sizeof(daPillar_c), // mSize
- 0, // mSizeOther
- 0, // mParameters
- &g_fopAc_Method.base, // sub_method
- 432, // mPriority
- &daPillar_METHODS, // sub_method
- 0x00044100, // mStatus
- fopAc_ACTOR_e, // mActorType
- fopAc_CULLBOX_CUSTOM_e, // cullType
-};
-
-/* 80CB0BA8-80CB0BB4 0000C0 000C+00 2/2 0/0 0/0 .data __vt__10cCcD_GStts */
-SECTION_DATA extern void* __vt__10cCcD_GStts[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10cCcD_GSttsFv,
-};
-
-/* 80CB0BB4-80CB0BC0 0000CC 000C+00 1/1 0/0 0/0 .data __vt__10dCcD_GStts */
-SECTION_DATA extern void* __vt__10dCcD_GStts[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10dCcD_GSttsFv,
-};
-
-/* 80CB0BC0-80CB0BCC 0000D8 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGCyl */
-SECTION_DATA extern void* __vt__8cM3dGCyl[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGCylFv,
-};
-
-/* 80CB0BCC-80CB0BD8 0000E4 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGAab */
-SECTION_DATA extern void* __vt__8cM3dGAab[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGAabFv,
-};
-
-/* 80CB0BD8-80CB0C00 0000F0 0028+00 2/2 0/0 0/0 .data __vt__10daPillar_c */
-SECTION_DATA extern void* __vt__10daPillar_c[10] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)CreateHeap__10daPillar_cFv,
- (void*)Create__10daPillar_cFv,
- (void*)Execute__10daPillar_cFPPA3_A4_f,
- (void*)Draw__10daPillar_cFv,
- (void*)Delete__10daPillar_cFv,
- (void*)IsDelete__16dBgS_MoveBgActorFv,
- (void*)ToFore__16dBgS_MoveBgActorFv,
- (void*)ToBack__16dBgS_MoveBgActorFv,
-};
-
-/* 80CB0C00-80CB0C0C 000118 000C+00 2/2 0/0 0/0 .data __vt__14daPillar_HIO_c */
-SECTION_DATA extern void* __vt__14daPillar_HIO_c[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__14daPillar_HIO_cFv,
-};
-
-/* 80CB0C0C-80CB0C18 000124 000C+00 3/3 0/0 0/0 .data __vt__14mDoHIO_entry_c */
-SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__14mDoHIO_entry_cFv,
+static char* l_arcName[] = {
+ "K_mbhasi0",
+ "K_mbhasi1",
};
/* 80CAF32C-80CAF3B0 0000EC 0084+00 1/1 0/0 0/0 .text __ct__14daPillar_HIO_cFv */
daPillar_HIO_c::daPillar_HIO_c() {
- // NONMATCHING
+ mShakeData = l_shake_data[SHAKE_DATA_CRASH_FIRST];
+ field_0x1c = 0.0f;
+ field_0x20 = -0.7f;
+ field_0x24 = 0;
+ field_0x25 = 0;
+ field_0x26 = 0;
+ mIsAdjust = false;
}
-/* 80CAF3B0-80CAF3F8 000170 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */
-// mDoHIO_entry_c::~mDoHIO_entry_c() {
-extern "C" void __dt__14mDoHIO_entry_cFv() {
- // NONMATCHING
-}
-
-/* ############################################################################################## */
-/* 80CB0A70-80CB0A74 00009C 0004+00 0/1 0/0 0/0 .rodata @3681 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3681 = 8192.0f;
-COMPILER_STRIP_GATE(0x80CB0A70, &lit_3681);
-#pragma pop
-
-/* 80CB0A74-80CB0A78 0000A0 0004+00 0/1 0/0 0/0 .rodata @3682 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3682 = 1300.0f;
-COMPILER_STRIP_GATE(0x80CB0A74, &lit_3682);
-#pragma pop
-
-/* 80CB0A78-80CB0A7C 0000A4 0004+00 1/5 0/0 0/0 .rodata @3683 */
-SECTION_RODATA static f32 const lit_3683 = 1.0f;
-COMPILER_STRIP_GATE(0x80CB0A78, &lit_3683);
-
-/* 80CB0A7C-80CB0A84 0000A8 0004+04 0/1 0/0 0/0 .rodata @3684 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3684[1 + 1 /* padding */] = {
- 30.0f,
- /* padding */
- 0.0f,
-};
-COMPILER_STRIP_GATE(0x80CB0A7C, &lit_3684);
-#pragma pop
-
/* 80CAF3F8-80CAF4B4 0001B8 00BC+00 1/1 0/0 0/0 .text
* rideCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c */
-static void rideCallBack(dBgW* param_0, fopAc_ac_c* param_1, fopAc_ac_c* param_2) {
- // NONMATCHING
+static void rideCallBack(dBgW* i_bgw, fopAc_ac_c* i_this, fopAc_ac_c* i_rideActor) {
+ daPy_py_c* player = dComIfGp_getLinkPlayer();
+ if (((daPillar_c*)i_this)->mIsRollAttack && fopAcM_GetName(i_rideActor) == PROC_Obj_Carry) {
+ s16 var_r28 = cM_rndF(1300.0f) + 8192.0f;
+ if (cM_rndFX(1.0f) < 0.0f) {
+ var_r28 = -var_r28;
+ }
+
+ i_rideActor->current.angle.y = player->current.angle.y + 0x7FFF + var_r28;
+ i_rideActor->speedF = 30.0f;
+ i_rideActor->speed.y = 1.0f;
+ ((daObjCarry_c*)i_rideActor)->setDrop();
+ }
}
-/* ############################################################################################## */
-/* 80CB0A84-80CB0A8C 0000B0 0008+00 1/2 0/0 0/0 .rodata @3716 */
-SECTION_RODATA static u8 const lit_3716[8] = {
- 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80CB0A84, &lit_3716);
-
/* 80CAF4B4-80CAF5EC 000274 0138+00 2/2 0/0 0/0 .text setBaseMtx__10daPillar_cFv */
void daPillar_c::setBaseMtx() {
- // NONMATCHING
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::ZXYrotM(shape_angle.x, mRotY, shape_angle.z);
+ mDoMtx_stack_c::YrotM(-mRotY);
+ mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ MTXCopy(mDoMtx_stack_c::get(), mBgMtx);
+
+ if (mpShadowModel != NULL) {
+ mDoMtx_stack_c::transS(current.pos.x, current.pos.y + 1.0f, current.pos.z);
+ mDoMtx_stack_c::YrotM(shape_angle.y + shape_angle.x * cM_ssin(mRotY));
+ mpShadowModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ }
}
/* 80CAF5EC-80CAF7A8 0003AC 01BC+00 1/0 0/0 0/0 .text Create__10daPillar_cFv */
-void daPillar_c::Create() {
- // NONMATCHING
+int daPillar_c::Create() {
+ setBaseMtx();
+
+ if (mpShadowModel != NULL) {
+ fopAcM_SetMtx(this, mpShadowModel->getBaseTRMtx());
+ } else {
+ fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
+ }
+
+ mColliderStts.Init(0xFF, 0xFF, this);
+ mCylCollider.Set(l_cyl_src);
+ mCylCollider.SetStts(&mColliderStts);
+
+ J3DJoint* pjoint = mpModel->getModelData()->getJointNodePointer(0);
+ cXyz cull_min(*pjoint->getMin());
+ cXyz cull_max(*pjoint->getMax());
+
+ if (mpShadowModel != NULL) {
+ J3DJoint* pshadow_joint = mpShadowModel->getModelData()->getJointNodePointer(0);
+
+ if (cull_min.x > pshadow_joint->getMin()->x) {
+ cull_min.x = pshadow_joint->getMin()->x;
+ }
+
+ if (cull_min.y > pshadow_joint->getMin()->y) {
+ cull_min.y = pshadow_joint->getMin()->y;
+ }
+
+ if (cull_min.z > pshadow_joint->getMin()->z) {
+ cull_min.z = pshadow_joint->getMin()->z;
+ }
+
+ if (cull_max.x < pshadow_joint->getMax()->x) {
+ cull_max.x = pshadow_joint->getMax()->x;
+ }
+
+ if (cull_max.y < pshadow_joint->getMax()->y) {
+ cull_max.y = pshadow_joint->getMax()->y;
+ }
+
+ if (cull_max.z < pshadow_joint->getMax()->z) {
+ cull_max.z = pshadow_joint->getMax()->z;
+ }
+ }
+
+ J3DTransformInfo* pjoint_transform = &pjoint->getTransformInfo();
+ cull_min.y += pjoint_transform->mTranslate.y;
+ cull_max.y += pjoint_transform->mTranslate.y;
+ fopAcM_setCullSizeBox(this, cull_min.x, cull_min.y, cull_min.z, cull_max.x, cull_max.y, cull_max.z);
+
+ u16 timer = getTimer();
+ if (timer == 0 || timer == 255) {
+ mTimer = 4;
+ } else {
+ mTimer = timer;
+ }
+
+ mShake = SHAKE_NONE;
+ mpBgW->SetRideCallback(rideCallBack);
+ return 1;
}
/* 80CAF7A8-80CAF8A4 000568 00FC+00 1/0 0/0 0/0 .text CreateHeap__10daPillar_cFv */
-void daPillar_c::CreateHeap() {
- // NONMATCHING
+int daPillar_c::CreateHeap() {
+ J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName[mMdlType], l_bmd[mMdlType]);
+ JUT_ASSERT(modelData != 0);
+ mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
+ if (mpModel == NULL) {
+ return 0;
+ }
+
+ if (checkShadow() == 0xFF) {
+ J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName[mMdlType], l_shadowBmd[mMdlType]);
+ JUT_ASSERT(modelData != 0);
+ mpShadowModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
+ if (mpShadowModel == NULL) {
+ return 0;
+ }
+ }
+
+ return 1;
}
/* 80CAF8A4-80CAFA58 000664 01B4+00 1/1 0/0 0/0 .text create1st__10daPillar_cFv */
-void daPillar_c::create1st() {
- // NONMATCHING
-}
-
-/* 80CAFA58-80CAFAA0 000818 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */
-// cM3dGCyl::~cM3dGCyl() {
-extern "C" void __dt__8cM3dGCylFv() {
- // NONMATCHING
-}
-
-/* 80CAFAA0-80CAFAE8 000860 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */
-// cM3dGAab::~cM3dGAab() {
-extern "C" void __dt__8cM3dGAabFv() {
- // NONMATCHING
-}
-
-/* 80CAFAE8-80CAFB44 0008A8 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */
-// dCcD_GStts::~dCcD_GStts() {
-extern "C" void __dt__10dCcD_GSttsFv() {
- // NONMATCHING
+int daPillar_c::create1st() {
+ fopAcM_SetupActor(this, daPillar_c);
+
+ if (!mIsPrmInit) {
+ mIsPrmInit = true;
+ field_0x73c = home.angle.x;
+ field_0x73e = home.angle.z;
+ mMdlType = field_0x73e & 0xF;
+
+ home.angle.z = 0;
+ home.angle.x = 0;
+ current.angle.z = 0;
+ current.angle.x = 0;
+ shape_angle.z = 0;
+ shape_angle.x = 0;
+ }
+
+ int phase_state = dComIfG_resLoad(&mPhase, l_arcName[mMdlType]);
+ if (phase_state == cPhs_COMPLEATE_e) {
+ phase_state = MoveBGCreate(l_arcName[mMdlType], l_dzb[mMdlType], dBgS_MoveBGProc_Typical, l_heap_size[mMdlType], NULL);
+ if (phase_state == cPhs_ERROR_e) {
+ return phase_state;
+ }
+ }
+
+ return phase_state;
}
/* 80CAFB44-80CAFC08 000904 00C4+00 2/2 0/0 0/0 .text checkAttacked__10daPillar_cFv */
-void daPillar_c::checkAttacked() {
- // NONMATCHING
+bool daPillar_c::checkAttacked() {
+ u8 swbit = getSwbit();
+ if (swbit != 0xFF) {
+ if (getType() == 0xFF) {
+ return fopAcM_isSwitch(this, swbit);
+ }
+
+ if (getType() == 0) {
+ bool var_r27 = false;
+ for (int i = 0; i < 4; i++) {
+ if (fopAcM_isSwitch(this, swbit + i)) {
+ var_r27 = true;
+ }
+ }
+
+ return var_r27;
+ }
+ }
+
+ return false;
}
-/* ############################################################################################## */
-/* 80CB0A8C-80CB0A90 0000B8 0004+00 0/1 0/0 0/0 .rodata @4060 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u32 const lit_4060 = 0x3BB40000;
-COMPILER_STRIP_GATE(0x80CB0A8C, &lit_4060);
-#pragma pop
-
-/* 80CB0A90-80CB0A94 0000BC 0004+00 0/1 0/0 0/0 .rodata @4061 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u32 const lit_4061 = 0x43B3F333;
-COMPILER_STRIP_GATE(0x80CB0A90, &lit_4061);
-#pragma pop
-
-/* 80CB0A94-80CB0A9C 0000C0 0004+04 0/1 0/0 0/0 .rodata @4062 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4062[1 + 1 /* padding */] = {
- 24.0f,
- /* padding */
- 0.0f,
-};
-COMPILER_STRIP_GATE(0x80CB0A94, &lit_4062);
-#pragma pop
-
/* 80CAFC08-80CAFD64 0009C8 015C+00 1/1 0/0 0/0 .text on_switch__10daPillar_cFv */
void daPillar_c::on_switch() {
- // NONMATCHING
+ u8 swbit = getSwbit();
+ if (swbit != 0xFF) {
+ if (getType() == 0xFF) {
+ fopAcM_onSwitch(this, swbit);
+ } else if (getType() == 0) {
+ bool var_r27 = false;
+ for (int i = 0; i < 4; i++) {
+ if (fopAcM_isSwitch(this, swbit + i)) {
+ var_r27 = true;
+ }
+ }
+
+ if (!var_r27) {
+ f32 var_f31 = cM_sht2d(field_0x734);
+ if (var_f31 < 0.0f) {
+ var_f31 = 359.9f + var_f31;
+ }
+
+ u16 var_r23 = (u16)(var_f31 / 24.0f + 1.0f);
+ u16 var_r26 = 1;
+ for (int i = 0; i < 4; i++) {
+ if (var_r23 & var_r26) {
+ fopAcM_onSwitch(this, swbit + i);
+ }
+
+ var_r26 = (var_r26 << 1);
+ }
+ }
+ }
+ }
}
-/* ############################################################################################## */
-/* 80CB0A9C-80CB0AA4 0000C8 0008+00 0/1 0/0 0/0 .rodata @4116 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4116[8] = {
- 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80CB0A9C, &lit_4116);
-#pragma pop
-
-/* 80CB0AA4-80CB0AAC 0000D0 0008+00 0/1 0/0 0/0 .rodata @4117 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4117[8] = {
- 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80CB0AA4, &lit_4117);
-#pragma pop
-
-/* 80CB0AAC-80CB0AB4 0000D8 0008+00 0/1 0/0 0/0 .rodata @4118 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4118[8] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80CB0AAC, &lit_4118);
-#pragma pop
-
-/* 80CB0AB4-80CB0AB8 0000E0 0004+00 0/1 0/0 0/0 .rodata @4119 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4119 = 150.0f;
-COMPILER_STRIP_GATE(0x80CB0AB4, &lit_4119);
-#pragma pop
-
-/* 80CB0AB8-80CB0ABC 0000E4 0004+00 0/1 0/0 0/0 .rodata @4120 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4120 = 220.0f;
-COMPILER_STRIP_GATE(0x80CB0AB8, &lit_4120);
-#pragma pop
-
-/* 80CB0ACC-80CB0ACC 0000F8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80CB0AE0 = "D_MN05";
-#pragma pop
-
/* 80CAFD64-80CAFF60 000B24 01FC+00 1/1 0/0 0/0 .text checkShake__10daPillar_cFv */
-void daPillar_c::checkShake() {
- // NONMATCHING
+int daPillar_c::checkShake() {
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ f32 player_dist = player->current.pos.abs(current.pos);
+ f32 attack_range = 150.0f;
+
+ if (daPy_py_c::i_checkNowWolf()) {
+ attack_range = 220.0f;
+ }
+
+ if (player_dist < attack_range && (player->checkFrontRollCrash() || player->checkWolfAttackReverse())) {
+ if (strcmp(dComIfGp_getStartStageName(), "D_MN05") == 0 && fopAcM_GetRoomNo(this) == 2) {
+ return SHAKE_CRASH_LV1;
+ } else {
+ return SHAKE_CRASH;
+ }
+ } else {
+ if (mShake != SHAKE_NONE) {
+ return mShake;
+ }
+
+ if (mCylCollider.ChkTgHit()) {
+ cCcD_Obj* hitobj = mCylCollider.GetTgHitObj();
+ if (hitobj != NULL && hitobj->ChkAtType(AT_TYPE_IRON_BALL)) {
+ return SHAKE_IRONBALL;
+ }
+ }
+ }
+
+ return SHAKE_NONE;
}
-/* ############################################################################################## */
-/* 80CB0ABC-80CB0AC0 0000E8 0004+00 0/1 0/0 0/0 .rodata @4178 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4178 = -1.0f;
-COMPILER_STRIP_GATE(0x80CB0ABC, &lit_4178);
-#pragma pop
-
/* 80CAFF60-80CB01E0 000D20 0280+00 1/1 0/0 0/0 .text setShake_rcrash__10daPillar_cFv */
void daPillar_c::setShake_rcrash() {
- // NONMATCHING
+ daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer();
+ u8 swbit = getSwbit();
+
+ if (strcmp(dComIfGp_getStartStageName(), "D_MN05") == 0 && fopAcM_GetRoomNo(this) == 2 && fopAcM_isSwitch(this, swbit)) {
+ mShakeData = l_shake_data[SHAKE_DATA_CRASH];
+ mQuakeTimer = 0;
+ mShakeMode = SHAKE_MODE_START;
+ fopAcM_seStart(this, Z2SE_OBJ_COLUMN_SHAKE_HARD, 0);
+ } else {
+ mShakeData = l_shake_data[SHAKE_DATA_CRASH_FIRST];
+
+ if (strcmp(dComIfGp_getStartStageName(), "D_MN05") == 0 && fopAcM_GetRoomNo(this) == 2) {
+ fopAcM_seStart(this, Z2SE_OBJ_COLUMN_SHAKE_FIRST, 0);
+ } else {
+ fopAcM_seStart(this, Z2SE_OBJ_MK_COLUMN_SHAKE, 0);
+ }
+ }
+
+ shape_angle.x = mShakeData.mInitAngleX;
+ dComIfGp_getVibration().StartShock(mShakeData.mPower, 15, cXyz(0.0f, 1.0f, 0.0f));
+ mIsRollAttack = true;
+
+ if (!checkAttacked()) {
+ field_0x734 = player->shape_angle.y;
+ }
}
/* 80CB01E0-80CB022C 000FA0 004C+00 1/1 0/0 0/0 .text setShake_strong__10daPillar_cFv */
void daPillar_c::setShake_strong() {
- // NONMATCHING
+ mShakeData = l_shake_data[SHAKE_DATA_STRONG];
+ shape_angle.x = mShakeData.mInitAngleX;
}
/* 80CB022C-80CB0278 000FEC 004C+00 1/1 0/0 0/0 .text setShake_weak__10daPillar_cFv */
void daPillar_c::setShake_weak() {
- // NONMATCHING
+ mShakeData = l_shake_data[SHAKE_DATA_WEAK];
+ shape_angle.x = mShakeData.mInitAngleX;
}
-/* ############################################################################################## */
-/* 80CB0C20-80CB0C2C 000008 000C+00 1/1 0/0 0/0 .bss @3657 */
-static u8 lit_3657[12];
-
/* 80CB0C2C-80CB0C54 000014 0028+00 2/2 0/0 0/0 .bss l_HIO */
-static u8 l_HIO[40];
-
-/* 80CB0C54-80CB0C58 00003C 0004+00 1/1 0/0 0/0 .bss None */
-static u8 data_80CB0C54[4];
+static daPillar_HIO_c l_HIO;
/* 80CB0278-80CB031C 001038 00A4+00 1/1 0/0 0/0 .text switch_proc_call__10daPillar_cFv */
void daPillar_c::switch_proc_call() {
- // NONMATCHING
+ typedef void (daPillar_c::*actionFunc)();
+ static actionFunc l_func[] = {
+ &daPillar_c::actionSwOnWait,
+ &daPillar_c::actionSwOn,
+ &daPillar_c::actionEnd,
+ };
+
+ (this->*l_func[mAction])();
}
/* 80CB031C-80CB0378 0010DC 005C+00 1/0 0/0 0/0 .text actionSwOnWait__10daPillar_cFv */
void daPillar_c::actionSwOnWait() {
- // NONMATCHING
+ if (mIsRollAttack) {
+ if (checkAttacked()) {
+ OS_REPORT("toACTION_END\n");
+ setAction(ACTION_END);
+ } else {
+ OS_REPORT("toSWON\n");
+ setAction(ACTION_SWON);
+ actionSwOn();
+ }
+ }
}
/* 80CB0378-80CB03CC 001138 0054+00 2/1 0/0 0/0 .text actionSwOn__10daPillar_cFv */
void daPillar_c::actionSwOn() {
- // NONMATCHING
+ OS_REPORT("swon:mTimer<%d>\n", mTimer);
+ if (mTimer > 0) {
+ mTimer--;
+ } else if (mTimer == 0) {
+ on_switch();
+ setAction(ACTION_END);
+ }
}
/* 80CB03CC-80CB03D0 00118C 0004+00 1/0 0/0 0/0 .text actionEnd__10daPillar_cFv */
-void daPillar_c::actionEnd() {
- /* empty function */
-}
-
-/* ############################################################################################## */
-/* 80CB0AC0-80CB0AC4 0000EC 0004+00 0/1 0/0 0/0 .rodata @4265 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4265 = 85.0f;
-COMPILER_STRIP_GATE(0x80CB0AC0, &lit_4265);
-#pragma pop
-
-/* 80CB0AC4-80CB0AC8 0000F0 0004+00 0/1 0/0 0/0 .rodata @4266 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4266 = 200.0f;
-COMPILER_STRIP_GATE(0x80CB0AC4, &lit_4266);
-#pragma pop
-
-/* 80CB0AC8-80CB0ACC 0000F4 0004+00 0/1 0/0 0/0 .rodata @4267 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4267 = -100.0f;
-COMPILER_STRIP_GATE(0x80CB0AC8, &lit_4267);
-#pragma pop
+void daPillar_c::actionEnd() {}
/* 80CB03D0-80CB0658 001190 0288+00 1/0 0/0 0/0 .text Execute__10daPillar_cFPPA3_A4_f */
-void daPillar_c::Execute(f32 (**param_0)[3][4]) {
- // NONMATCHING
+int daPillar_c::Execute(Mtx** param_0) {
+ fopAcM_rollPlayerCrash(this, l_HIO.field_0x1c + 85.0f, 0xD, 200.0f, -100.0f, TRUE, l_HIO.field_0x20);
+ mIsRollAttack = false;
+
+ switch (checkShake()) {
+ case SHAKE_CRASH:
+ case SHAKE_CRASH_LV1:
+ case SHAKE_IRONBALL:
+ setShake_rcrash();
+ break;
+ case SHAKE_STRONG:
+ setShake_strong();
+ break;
+ case SHAKE_WEAK:
+ setShake_weak();
+ break;
+ }
+
+ mShake = SHAKE_NONE;
+
+ switch (mShakeMode) {
+ case SHAKE_MODE_WAIT:
+ cLib_addCalcAngleS(&shape_angle.x, 0, mShakeData.mTime, mShakeData.mMaxChangeX, mShakeData.mMinChangeX);
+ break;
+ case SHAKE_MODE_START:
+ // "Shake!!!!\n"
+ OS_REPORT("揺れ!!!!\n");
+ dComIfGp_getVibration().StartQuake(4, 1, cXyz(0.0f, 1.0f, 0.0f));
+ mShakeMode = SHAKE_MODE_RESET_ANGLE;
+ break;
+ case SHAKE_MODE_RESET_ANGLE:
+ cLib_addCalcAngleS(&shape_angle.x, 0, 40, 20, 5);
+ if (shape_angle.x < 260) {
+ dComIfGp_getVibration().StopQuake(31);
+ dComIfGp_getVibration().StartQuake(2, 1, cXyz(0.0f, 1.0f, 0.0f));
+ mShakeMode = SHAKE_MODE_QUAKE;
+ }
+ case SHAKE_MODE_QUAKE:
+ mQuakeTimer++;
+ if (mQuakeTimer > 110) {
+ dComIfGp_getVibration().StopQuake(31);
+ mShakeMode = SHAKE_MODE_END;
+ }
+ break;
+ case SHAKE_MODE_END:
+ if(cLib_addCalcAngleS(&shape_angle.x, 0, 60, 10, 3) == 0) {
+ mShakeMode = SHAKE_MODE_WAIT;
+ }
+ break;
+ default:
+ JUT_ASSERT(0);
+ }
+
+ if (shape_angle.x != 0) {
+ mRotY += (s16)(mShakeData.mSpeedY + (0x300 / shape_angle.x));
+ }
+
+ *param_0 = &mBgMtx;
+ setBaseMtx();
+ switch_proc_call();
+
+ mCylCollider.SetC(current.pos);
+ dComIfG_Ccsp()->Set(&mCylCollider);
+ return 1;
}
/* 80CB0658-80CB0740 001418 00E8+00 1/0 0/0 0/0 .text Draw__10daPillar_cFv */
-void daPillar_c::Draw() {
- // NONMATCHING
+int daPillar_c::Draw() {
+ g_env_light.settingTevStruct(0x10, &current.pos, &tevStr);
+ g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr);
+ dComIfGd_setListBG();
+ mDoExt_modelUpdateDL(mpModel);
+ dComIfGd_setList();
+
+ if (mpShadowModel != NULL) {
+ g_env_light.settingTevStruct(0, &current.pos, &tevStr);
+ g_env_light.setLightTevColorType_MAJI(mpShadowModel, &tevStr);
+ mDoExt_modelUpdateDL(mpShadowModel);
+ }
+
+ return 1;
}
/* 80CB0740-80CB0780 001500 0040+00 1/0 0/0 0/0 .text Delete__10daPillar_cFv */
-void daPillar_c::Delete() {
- // NONMATCHING
+int daPillar_c::Delete() {
+ dComIfG_resDelete(&mPhase, l_arcName[mMdlType]);
+ return 1;
}
/* 80CB0780-80CB0874 001540 00F4+00 1/0 0/0 0/0 .text daPillar_create1st__FP10daPillar_c
*/
-static void daPillar_create1st(daPillar_c* param_0) {
- // NONMATCHING
+static int daPillar_create1st(daPillar_c* i_this) {
+ fopAcM_SetupActor(i_this, daPillar_c);
+ return i_this->create1st();
}
/* 80CB0874-80CB0894 001634 0020+00 1/0 0/0 0/0 .text daPillar_MoveBGDelete__FP10daPillar_c */
-static void daPillar_MoveBGDelete(daPillar_c* param_0) {
- // NONMATCHING
+static int daPillar_MoveBGDelete(daPillar_c* i_this) {
+ return i_this->MoveBGDelete();
}
/* 80CB0894-80CB08B4 001654 0020+00 1/0 0/0 0/0 .text daPillar_MoveBGExecute__FP10daPillar_c */
-static void daPillar_MoveBGExecute(daPillar_c* param_0) {
- // NONMATCHING
+static int daPillar_MoveBGExecute(daPillar_c* i_this) {
+ return i_this->MoveBGExecute();
}
/* 80CB08B4-80CB08E0 001674 002C+00 1/0 0/0 0/0 .text daPillar_MoveBGDraw__FP10daPillar_c
*/
-static void daPillar_MoveBGDraw(daPillar_c* param_0) {
- // NONMATCHING
-}
-
-/* 80CB08E0-80CB0928 0016A0 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */
-// cCcD_GStts::~cCcD_GStts() {
-extern "C" void __dt__10cCcD_GSttsFv() {
- // NONMATCHING
+static int daPillar_MoveBGDraw(daPillar_c* i_this) {
+ return i_this->MoveBGDraw();
}
-/* 80CB0928-80CB0984 0016E8 005C+00 2/1 0/0 0/0 .text __dt__14daPillar_HIO_cFv */
-daPillar_HIO_c::~daPillar_HIO_c() {
- // NONMATCHING
-}
-
-/* 80CB0984-80CB09C0 001744 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_pillar_cpp */
-void __sinit_d_a_obj_pillar_cpp() {
- // NONMATCHING
-}
-
-#pragma push
-#pragma force_active on
-REGISTER_CTORS(0x80CB0984, __sinit_d_a_obj_pillar_cpp);
-#pragma pop
+/* 80CB0B58-80CB0B78 -00001 0020+00 1/0 0/0 0/0 .data daPillar_METHODS */
+static actor_method_class daPillar_METHODS = {
+ (process_method_func)daPillar_create1st,
+ (process_method_func)daPillar_MoveBGDelete,
+ (process_method_func)daPillar_MoveBGExecute,
+ NULL,
+ (process_method_func)daPillar_MoveBGDraw,
+};
-/* 80CB0ACC-80CB0ACC 0000F8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+/* 80CB0B78-80CB0BA8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Pillar */
+extern actor_process_profile_definition g_profile_Obj_Pillar = {
+ fpcLy_CURRENT_e, // mLayerID
+ 3, // mListID
+ fpcPi_CURRENT_e, // mListPrio
+ PROC_Obj_Pillar, // mProcName
+ &g_fpcLf_Method.base, // sub_method
+ sizeof(daPillar_c), // mSize
+ 0, // mSizeOther
+ 0, // mParameters
+ &g_fopAc_Method.base, // sub_method
+ 432, // mPriority
+ &daPillar_METHODS, // sub_method
+ 0x00044100, // mStatus
+ fopAc_ACTOR_e, // mActorType
+ fopAc_CULLBOX_CUSTOM_e, // cullType
+};