summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaroline Madsen <69010899+randomsalience@users.noreply.github.com>2023-11-02 13:35:31 -0400
committerGitHub <noreply@github.com>2023-11-02 19:35:31 +0200
commit30d9eaa052de1eda76bebfc88f679d6620b46160 (patch)
tree22cb25b22a7cf015b706ae4fad79509a29a88008
parentcfa5f44bb7884ed2842017329fa154453c2fd5ee (diff)
work on d_a_tbox (#1971)
* d_a_tag_evtarea mostly done, work on d_a_npc * work on d_a_npc_ash * work on Z2SoundHandles * Z2SoundObject, JAUSoundAnimator OK * Update Progress.md * work on d_a_tbox
-rw-r--r--include/SSystem/SComponent/c_bg_s_chk.h2
-rw-r--r--include/d/a/d_a_alink.h254
-rw-r--r--include/d/bg/d_bg_s.h3
-rw-r--r--include/d/com/d_com_inf_game.h16
-rw-r--r--include/d/d_stage.h5
-rw-r--r--include/d/d_tresure.h4
-rw-r--r--include/d/kankyo/d_kankyo.h3
-rw-r--r--include/f_op/f_op_actor_mng.h24
-rw-r--r--include/m_Do/m_Do_ext.h1
-rw-r--r--include/rel/d/a/d_a_midna/d_a_midna.h262
-rw-r--r--include/rel/d/a/d_a_tbox/d_a_tbox.h207
-rw-r--r--libs/SSystem/SComponent/c_bg_s_gnd_chk.cpp2
-rw-r--r--libs/SSystem/SComponent/c_bg_s_lin_chk.cpp4
-rw-r--r--rel/d/a/d_a_midna/d_a_midna.cpp334
-rw-r--r--rel/d/a/d_a_tbox/d_a_tbox.cpp1
-rw-r--r--rel/d/a/d_a_tbox/d_a_tbox_NONMATCHING.cpp1727
-rw-r--r--rel/d/a/tag/d_a_tag_mhint/d_a_tag_mhint.cpp4
-rw-r--r--rel/d/a/tag/d_a_tag_mmsg/d_a_tag_mmsg.cpp2
-rw-r--r--rel/d/a/tag/d_a_tag_mstop/d_a_tag_mstop.cpp1
-rw-r--r--rel/d/a/tag/d_a_tag_mwait/d_a_tag_mwait.cpp2
-rw-r--r--rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.cpp3
-rw-r--r--src/d/a/d_a_alink.cpp1
-rw-r--r--src/d/a/d_a_player.cpp1
-rw-r--r--src/d/bg/d_bg_s_acch.cpp6
-rw-r--r--src/d/bg/d_bg_s_roof_chk.cpp2
-rw-r--r--src/d/bg/d_bg_s_sph_chk.cpp2
-rw-r--r--src/d/d_stage.cpp2
-rw-r--r--src/d/event/d_event.cpp1
-rw-r--r--src/d/msg/d_msg_flow.cpp1
29 files changed, 2270 insertions, 607 deletions
diff --git a/include/SSystem/SComponent/c_bg_s_chk.h b/include/SSystem/SComponent/c_bg_s_chk.h
index 8367b50e25..eacef20b80 100644
--- a/include/SSystem/SComponent/c_bg_s_chk.h
+++ b/include/SSystem/SComponent/c_bg_s_chk.h
@@ -25,7 +25,7 @@ public:
void SetExtChk(cBgS_Chk&);
bool ChkSameActorPid(unsigned int) const;
- void setActorPid(u32 pid) { mActorPid = pid; }
+ void SetActorPid(u32 pid) { mActorPid = pid; }
u32 GetActorPid() const { return mActorPid; }
void SetPolyPassChk(cBgS_PolyPassChk* p_chk) { mPolyPassChk = p_chk; }
void SetGrpPassChk(cBgS_GrpPassChk* p_chk) { mGrpPassChk = p_chk; }
diff --git a/include/d/a/d_a_alink.h b/include/d/a/d_a_alink.h
index f1a5ecfe43..3a73feb858 100644
--- a/include/d/a/d_a_alink.h
+++ b/include/d/a/d_a_alink.h
@@ -6237,263 +6237,9 @@ public:
static daAlinkHIO_hookshot_c1 const m;
};
-class mDoExt_morf_c;
-
inline BOOL dComIfGs_isTransformLV(int i_no);
inline BOOL i_dComIfGs_isEventBit(const u16);
-typedef int (daMidna_c::*daMidna_func)();
-class daMidna_c : public fopAc_ac_c {
-public:
- enum daMidna_ERFLG0 {
- ERFLG0_NO_SERVICE_WAIT = 0x80,
- ERFLG0_FORCE_PANIC = 8,
- ERFLG0_UNK_2 = 2,
- };
-
- enum daMidna_FLG0 {
- FLG0_UNK_80000000 = 0x80000000,
- FLG0_UNK_8000000 = 0x8000000,
- FLG0_NPC_NEAR = 0x100000,
- FLG0_NPC_FAR = 0x40000,
- FLG0_NO_INPUT = 0x4000,
- FLG0_NO_DRAW = 0x2000,
- FLG0_UNK_400 = 0x400,
- FLG0_UNK_800 = 0x800,
- FLG0_UNK_200 = 0x200,
- };
-
- enum daMidna_FLG1 {
- FLG1_FORCE_NORMAL_COL = 8,
- FLG1_FORCE_TIRED_COL = 4,
- FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE = 2,
- };
-
- enum daMidna_ANM {};
-
- void onForcePanic();
- u32 checkForceNormalColor() const;
- u32 checkForceTiredColor() const;
- bool checkMidnaTired();
- void onNoServiceWait();
-
- /* 804BC3E0 */ void modelCallBack(int);
- /* 804BC5C4 */ void changeUpperBck();
- /* 804BC614 */ void changeFaceBck();
- /* 804BC670 */ void baseModelCallBack(int);
- /* 804BC740 */ void initInvModel(u16, J3DModel**, mDoExt_invisibleModel*, u32);
- /* 804BC7D4 */ void initDemoModel(J3DModel**, char const*, u32);
- /* 804BC868 */ void createHeap();
- /* 804BD274 */ void create();
- /* 804BD93C */ void allAnimePlay();
- /* 804BDE04 */ void setMatrix();
- /* 804BE470 */ void setBodyPartMatrix();
- /* 804BED1C */ void setRoomInfo();
- /* 804BEDB8 */ void setBodyPartPos();
- /* 804BEFA0 */ void checkAppear();
- /* 804BF070 */ void checkMidnaPosState();
- /* 804BFF80 */ void setUpperAnime(u16, u16);
- /* 804C0020 */ void setUpperAnimeAndSe(daMidna_c::daMidna_ANM);
- /* 804C0094 */ void setFaceAnime(u16, u16);
- /* 804C0134 */ void endHighModel();
- /* 804C0238 */ void setDemoAnm();
- /* 804C0BAC */ void setFaceBtp(u16, int);
- /* 804C0C6C */ void setFaceBtk(u16, int);
- /* 804C0D2C */ void setLeftHandShape(u16);
- /* 804C0E18 */ void setRightHandShape(u16);
- /* 804C0F04 */ void checkHairOnlyAnime(int) const;
- /* 804C0F24 */ void setBckAnime(J3DAnmTransform*, int, f32);
- /* 804C103C */ void setAnm();
- /* 804C287C */ void getNeckAimAngle(cXyz const*, s16*, s16*, s16*, s16*);
- /* 804C2A68 */ void clearEyeMove();
- /* 804C2AB8 */ void setEyeMove(cXyz const*, s16, s16);
- /* 804C2EBC */ void setNeckAngle();
- /* 804C3168 */ void initHairAngle();
- /* 804C3298 */ void setHairAngle();
- /* 804C3F04 */ void setDemoData();
- /* 804C4394 */ void setSimpleBrk(J3DModelData*, u16);
- /* 804C4444 */ void setSimpleBtk(J3DModelData*, u16);
- /* 804C44CC */ void initMidnaModel();
- /* 804C49B8 */ void setMidnaNoDrawFlg();
- /* 804C4AE8 */ void checkMetamorphoseEnableBase();
- /* 804C4B68 */ void checkNoDrawState();
- /* 804C4BC0 */ void setSound();
- /* 804C4FDC */ void execute();
- /* 804C5A08 */ void draw();
- /* 804C61A4 */ ~daMidna_c();
-
- void onEndResetStateFlg0(daMidna_ERFLG0 pFlg) { mEndResetStateFlg0 |= pFlg; }
- void onStateFlg0(daMidna_FLG0 i_flag) { mStateFlg0 |= i_flag; }
- void offStateFlg0(daMidna_FLG0 i_flag) { mStateFlg0 &= ~i_flag; }
- u32 checkStateFlg0(daMidna_FLG0 flag) const { return mStateFlg0 & flag; }
- u32 checkStateFlg1(daMidna_FLG1 flag) const { return mStateFlg1 & flag; }
- void setFaceNum(int num) { mFaceNum = num; }
- void setMotionNum(int num) { mMotionNum = num; }
- bool checkDemoTypeNone() const { return mDemoType == 0; }
- void changeOriginalDemo() { mDemoType = 3; }
- void changeDemoMode(u32 mode) { mDemoMode = mode; }
- BOOL checkNpcNear() { return checkStateFlg0(FLG0_NPC_NEAR); }
- BOOL checkNpcFar() { return checkStateFlg0(FLG0_NPC_FAR); }
- BOOL checkNoDraw() const { return checkStateFlg0(FLG0_NO_DRAW); }
- BOOL checkNoInput() const { return checkStateFlg0(FLG0_NO_INPUT); }
- BOOL checkWolfNoPos() const { return checkStateFlg0(FLG0_UNK_800); }
- int checkMetamorphoseEnable() { return (this->*mpFunc)(); }
- int checkShadowModelDrawDemoForce() const { return checkStateFlg1(FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE); }
-
- void onTagWaitPosWarp(const cXyz* param_0) {
- field_0x9ac = *param_0;
- onStateFlg0(FLG0_UNK_400);
- onEndResetStateFlg0(ERFLG0_UNK_2);
- }
-
- void onTagWaitPos(const cXyz* param_0) {
- field_0x9ac = *param_0;
- onStateFlg0(FLG0_UNK_400);
- }
-
- void offTagWaitPos() {
- offStateFlg0((daMidna_FLG0)(FLG0_UNK_80000000 | FLG0_UNK_8000000 | FLG0_UNK_400));
- }
-
- void onTagNoHairLead() {
- onStateFlg0(FLG0_UNK_80000000);
- }
-
- bool checkReturnAnime() const {
- return field_0x5e4[0].getIdx() == 0x1CA;
- }
-
- bool checkShadowModelDrawSmode() const {
- return field_0x84e == 3 || field_0x84e == 4 || field_0x84e == 2;
- }
-
- bool checkShadowModelDraw() const {
- return checkShadowModelDrawDemoForce() || checkShadowModelDrawSmode();
- }
-
- bool checkShadowReturnEnd() const {
- return field_0x5e4[0].getIdx() == 0x21C && field_0x578->isStop();
- }
-
- bool checkShadowModeTalkWait() const {
- return (field_0x84e == 2 || field_0x84e == 1) ;
- }
-
- void setShadowReturn() { field_0x84e = 4; }
-
-
- bool checkPortalObjRide() const {
- return checkStateFlg0(FLG0_UNK_8000000) && checkStateFlg0(FLG0_UNK_200);
- }
-
- inline static BOOL checkMidnaRealBody();
-
- bool i_checkMidnaTired() {
- return dComIfGs_isTransformLV(3) && !i_dComIfGs_isEventBit(0x1E08);
- }
-
- static u8 const m_texDataTable[84];
- static u8 const m_anmDataTable[636];
-
-private:
- /* 0x0568 */ request_of_phase_process_class mPhase;
- /* 0x0570 */ J3DModel* field_0x570;
- /* 0x0574 */ J3DModel* field_0x574;
- /* 0x0578 */ mDoExt_McaMorfSO* field_0x578;
- /* 0x057C */ mDoExt_McaMorfCallBack1_c* field_0x57c; // this is really daMidna_McaMorfCB1_c. fix later
- /* 0x0580 */ cXyz* field_0x580;
- /* 0x0584 */ mDoExt_bckAnm field_0x584;
- /* 0x05A0 */ mDoExt_bckAnm field_0x5a0;
- /* 0x05BC */ J3DAnmTexPattern* field_0x5bc;
- /* 0x05C0 */ J3DAnmTextureSRTKey* field_0x5c0;
- /* 0x05C4 */ mDoExt_invisibleModel field_0x5c4;
- /* 0x05CC */ mDoExt_invisibleModel mInvMaskBmd;
- /* 0x05D4 */ mDoExt_invisibleModel mInvHandsBmd;
- /* 0x05DC */ mDoExt_invisibleModel mInvHairhandBmd;
- /* 0x05E4 */ daPy_anmHeap_c field_0x5e4[3];
- /* 0x0620 */ daPy_anmHeap_c field_0x620;
- /* 0x0634 */ daPy_anmHeap_c field_0x634;
- /* 0x0648 */ J3DAnmTextureSRTKey* field_0x648;
- /* 0x064C */ J3DAnmTextureSRTKey* field_0x64c;
- /* 0x0650 */ J3DAnmTextureSRTKey* field_0x650;
- /* 0x0654 */ J3DAnmTextureSRTKey* field_0x654;
- /* 0x0658 */ J3DAnmTevRegKey* field_0x658;
- /* 0x065C */ J3DAnmTevRegKey* field_0x65c;
- /* 0x0660 */ J3DAnmTevRegKey* field_0x660;
- /* 0x0664 */ J3DAnmTevRegKey* field_0x664;
- /* 0x0668 */ J3DAnmTevRegKey* field_0x668;
- /* 0x066C */ J3DAnmTevRegKey* field_0x66c;
- /* 0x0670 */ J3DModel* field_0x670;
- /* 0x0674 */ J3DModel* mpMaskBmd;
- /* 0x0678 */ J3DModel* field_0x678;
- /* 0x067C */ J3DModel* mpHandsBmd;
- /* 0x0680 */ J3DModel* field_0x680;
- /* 0x0684 */ J3DModel* mpHairhandBmd;
- /* 0x0688 */ J3DModel* mpDemoBDTmpBmd;
- /* 0x068C */ J3DModel* mpDemoBDMaskBmd;
- /* 0x0690 */ J3DModel* mpDemoBDHandsBmd;
- /* 0x0694 */ J3DModel* mpDemoBDHairhandBmd;
- /* 0x0698 */ J3DModel* mpGokouBmd;
- /* 0x069C */ J3DShape* field_0x69c;
- /* 0x06A0 */ J3DShape* field_0x6a0;
- /* 0x06A4 */ J3DShape* field_0x6a4;
- /* 0x06A8 */ J3DShape* field_0x6a8;
- /* 0x06AC */ J3DModel* mpDemoFCBlendBmd;
- /* 0x06B0 */ J3DModel* mpDemoFCTongueBmd;
- /* 0x06B4 */ J3DAnmTextureSRTKey* field_0x6b4;
- /* 0x06B8 */ mDoExt_bckAnm* mpDemoFCTmpBck;
- /* 0x06BC */ J3DDeformData* mpDemoFCTmpBls;
- /* 0x06C0 */ J3DAnmCluster* field_0x6c0;
- /* 0x06C4 */ mDoExt_blkAnm* field_0x6c4;
- /* 0x06C8 */ J3DModel* mpDemoHLTmpBmd;
- /* 0x06CC */ mDoExt_bckAnm* mpDemoHLTmpBck;
- /* 0x06D0 */ J3DModel* mpDemoHRTmpBmd;
- /* 0x06D4 */ mDoExt_bckAnm* mpDemoHRTmpBck;
- /* 0x06D8 */ J3DModel* mpDemoHDTmpBmd;
- /* 0x06DC */ mDoExt_bckAnm* mpDemoHDTmpBck;
- /* 0x06E0 */ J3DGXColorS10 field_0x6e0;
- /* 0x06E8 */ J3DGXColor field_0x6e8;
- /* 0x06EC */ u8 field_0x6ec; // this is probably J3DGXColor. fix later
- /* 0x06ED */ u8 field_0x6ed;
- /* 0x06EE */ u8 field_0x6ee;
- /* 0x06EF */ u8 field_0x6ef;
- /* 0x06F0 */ void* field_0x6f0;
- /* 0x06F4 */ void* field_0x6f4;
- /* 0x06F8 */ void* field_0x6f8;
- /* 0x06FC */ Z2Creature field_0x6fc;
- /* 0x078C */ dMsgFlow_c mMsgFlow;
- /* 0x07D8 */ dBgS_LinkLinChk mLinChk;
- /* 0x0848 */ u8 mMotionNum;
- /* 0x0849 */ u8 mFaceNum;
- /* 0x084A */ u8 field_0x84a[4];
- /* 0x084E */ u8 field_0x84e;
- /* 0x084F */ u8 mDemoType;
- /* 0x0850 */ u8 field_0x850[0xA];
- /* 0x085A */ s16 field_0x85a;
- /* 0x085C */ u8 field_0x85c[0x22];
- /* 0x087E */ s16 field_0x87e;
- /* 0x0880 */ u8 field_0x880[0xC]; // csXyz in here, fix later
- /* 0x088C */ int mStaffID;
- /* 0x0890 */ u32 mStateFlg0;
- /* 0x0894 */ u32 mStateFlg1;
- /* 0x0898 */ u32 mEndResetStateFlg0;
- /* 0x089C */ u8 field_0x89c[0x24];
- /* 0x08C0 */ u32 mDemoMode;
- /* 0x08C4 */ u8 field_0x8c4[4];
- /* 0x08C8 */ f32 field_0x8c8;
- /* 0x08CC */ u8 field_0x8cc[0x14];
- /* 0x08E0 */ cXyz field_0x8e0[5];
- /* 0x091C */ cXyz field_0x91c[5];
- /* 0x0958 */ u8 field_0x958[0xC]; // cXyz here, fix later
- /* 0x0964 */ cXyz field_0x964[5];
- /* 0x09A0 */ u8 field_0x9a0[0xC];
- /* 0x09AC */ cXyz field_0x9ac;
- /* 0x09B8 */ u8 field_0x9b8[0x9C4 - 0x9B8];
- /* 0x09C4 */ cXyz field_0x9c4;
- /* 0x09D0 */ u8 field_0x9d0[4];
- /* 0x09D4 */ daMidna_func mpFunc;
-};
-
static fopAc_ac_c* daAlink_searchPortal(fopAc_ac_c* param_0, void* param_1);
static fopAc_ac_c* daAlink_searchCanoe(fopAc_ac_c* param_0, void* param_1);
static void* daAlink_searchBoar(fopAc_ac_c* param_0, void* param_1);
diff --git a/include/d/bg/d_bg_s.h b/include/d/bg/d_bg_s.h
index 011ff553b9..2d9e1ccbb9 100644
--- a/include/d/bg/d_bg_s.h
+++ b/include/d/bg/d_bg_s.h
@@ -61,6 +61,8 @@ public:
class dBgS_Acch;
+u8 dKy_pol_sound_get(cBgS_PolyInfo const* param_0);
+
class dBgS : public cBgS {
public:
dBgS() {}
@@ -107,6 +109,7 @@ public:
bool PushPullCallBack(cBgS_PolyInfo const&, fopAc_ac_c*, s16, dBgW_Base::PushPullLabel);
bool WaterChk(dBgS_SplGrpChk* chk) { return SplGrpChk(chk); }
+ u32 GetMtrlSndId(cBgS_PolyInfo* param_0) { return dKy_pol_sound_get(param_0); }
}; // Size: 0x1404
bool dBgS_CheckBGroundPoly(cBgS_PolyInfo const&);
diff --git a/include/d/com/d_com_inf_game.h b/include/d/com/d_com_inf_game.h
index 06d32de25b..36050fe6f7 100644
--- a/include/d/com/d_com_inf_game.h
+++ b/include/d/com/d_com_inf_game.h
@@ -1248,6 +1248,10 @@ inline BOOL dComIfGs_isTbox(int i_no) {
return g_dComIfG_gameInfo.info.getMemory().getBit().isTbox(i_no);
}
+inline void dComIfGs_onTbox(int i_no) {
+ g_dComIfG_gameInfo.info.getMemory().getBit().onTbox(i_no);
+}
+
inline BOOL dComIfGs_isSaveItem(int i_no) {
return g_dComIfG_gameInfo.info.getMemory().getBit().isItem(i_no);
}
@@ -1638,6 +1642,10 @@ inline u8 i_dComIfGs_getEventReg(u16 reg) {
return g_dComIfG_gameInfo.info.getEvent().getEventReg(reg);
}
+inline void dComIfGs_setEventReg(u16 reg, u8 value) {
+ g_dComIfG_gameInfo.info.getEvent().setEventReg(reg, value);
+}
+
inline void dComIfGs_setWarashibeItem(u8 i_itemNo) {
g_dComIfG_gameInfo.info.getPlayer().getItem().setWarashibeItem(i_itemNo);
}
@@ -2982,6 +2990,10 @@ inline void i_dComIfGp_event_reset() {
g_dComIfG_gameInfo.play.getEvent().reset();
}
+inline void dComIfGp_event_onEventFlag(u16 i_flag) {
+ g_dComIfG_gameInfo.play.getEvent().onEventFlag(i_flag);
+}
+
inline void dComIfGp_evmng_cutEnd(int param_0) {
dComIfGp_getPEvtManager()->cutEnd(param_0);
}
@@ -2998,6 +3010,10 @@ inline u8 dComIfGp_event_getPreItemNo() {
return g_dComIfG_gameInfo.play.getEvent().getPreItemNo();
}
+inline void dComIfGp_event_setItemPartner(void* param_0) {
+ g_dComIfG_gameInfo.play.getEvent().setPtI(param_0);
+}
+
inline void dComIfGp_event_setItemPartnerId(unsigned int id) {
g_dComIfG_gameInfo.play.getEvent().setPtI_Id(id);
}
diff --git a/include/d/d_stage.h b/include/d/d_stage.h
index 0955bdf316..b1943fc7fb 100644
--- a/include/d/d_stage.h
+++ b/include/d/d_stage.h
@@ -160,7 +160,7 @@ struct stage_camera2_data_class {
struct stage_camera_class {
/* 0x0 */ int field_0x0;
- /* 0x4 */ stage_camera2_data_class* field_0x4;
+ /* 0x4 */ stage_camera2_data_class* mEntries;
};
struct stage_arrow_data_class {
@@ -335,7 +335,8 @@ struct dStage_DMap_c {
struct dStage_MapEvent_dt_c {
/* 0x00 */ u8 mType;
- /* 0x01 */ u8 field_0x1[3 - 1];
+ /* 0x01 */ u8 field_0x1;
+ /* 0x02 */ u8 field_0x2;
/* 0x03 */ u8 field_0x3;
/* 0x04 */ u8 field_0x4;
/* 0x05 */ u8 field_0x5;
diff --git a/include/d/d_tresure.h b/include/d/d_tresure.h
index 78ac174efe..04650bc038 100644
--- a/include/d/d_tresure.h
+++ b/include/d/d_tresure.h
@@ -70,6 +70,10 @@ public:
return mTypeGroupListAll[index].mNumber;
}
+ static void setPosition(int i_tboxNo, Vec const* i_pos) {
+ setPosition(i_tboxNo, 0, i_pos, -1);
+ }
+
static u8 const typeToTypeGroup[17][2];
static type_group_list mTypeGroupListAll[17];
static typeGroupData_c* mTypeGroupData;
diff --git a/include/d/kankyo/d_kankyo.h b/include/d/kankyo/d_kankyo.h
index add7ddb20a..b4c0ab2947 100644
--- a/include/d/kankyo/d_kankyo.h
+++ b/include/d/kankyo/d_kankyo.h
@@ -560,12 +560,15 @@ void dKy_setLight_again();
void dKy_GxFog_tevstr_set(dKy_tevstr_c*);
void dKy_plight_set(LIGHT_INFLUENCE* param_0);
void dKy_plight_priority_set(LIGHT_INFLUENCE* param_0);
+void dKy_efplight_set(LIGHT_INFLUENCE* param_0);
+void dKy_efplight_cut(LIGHT_INFLUENCE* param_0);
void dKy_tevstr_init(dKy_tevstr_c* param_0, s8 param_1, u8 param_2);
SND_INFLUENCE* dKy_Sound_get();
void dKy_plight_cut(LIGHT_INFLUENCE* param_0);
void dKy_dalkmist_inf_set(DALKMIST_INFLUENCE*);
void dKy_dalkmist_inf_cut(DALKMIST_INFLUENCE*);
int dKy_rain_check();
+void dKy_set_allcol_ratio(f32 ratio);
void dKy_set_actcol_ratio(f32 ratio);
void dKy_set_bgcol_ratio(f32 ratio);
void dKy_set_fogcol_ratio(f32 ratio);
diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h
index 2b36b5feff..4835731cbf 100644
--- a/include/f_op/f_op_actor_mng.h
+++ b/include/f_op/f_op_actor_mng.h
@@ -5,6 +5,9 @@
#include "f_op/f_op_actor_iter.h"
#include "f_pc/f_pc_manager.h"
#include "f_pc/f_pc_searcher.h"
+#include "d/bg/d_bg_s.h"
+#include "d/bg/d_bg_s_lin_chk.h"
+#include "d/bg/d_bg_s_wtr_chk.h"
#define fopAcM_SetupActor(ptr,ClassName) \
if (!fopAcM_CheckCondition(ptr, fopAcCnd_INIT_e)) { \
@@ -57,10 +60,13 @@ struct fopAcM_search_prm {
/* 0x0A */ s8 mSubType;
};
-class dBgS_LinChk;
+dBgS& dComIfG_Bgsp();
+
class fopAcM_lc_c {
public:
static dBgS_LinChk* getLineCheck() { return (dBgS_LinChk*)&mLineCheck; }
+ static bool checkMoveBG() { return dComIfG_Bgsp().ChkMoveBG(*(dBgS_LinChk*)&mLineCheck); }
+ static cXyz* getCrossP() { return ((dBgS_LinChk*)&mLineCheck)->GetCrossP(); }
static bool lineCheck(const cXyz*, const cXyz*, const fopAc_ac_c*);
static u8 mLineCheck[112];
};
@@ -90,11 +96,11 @@ public:
static f32 getGroundY() { return mGroundY; }
};
-class dBgS_WtrChk;
class fopAcM_wt_c {
public:
static dBgS_WtrChk* getWaterCheck() { return (dBgS_WtrChk*)&mWaterCheck; }
static f32 getWaterY() { return mWaterY[0]; }
+ static int getPolyAtt0() { return dComIfG_Bgsp().GetPolyAtt0(*(dBgS_WtrChk*)&mWaterCheck); }
static bool waterCheck(const cXyz*);
static u8 mWaterCheck[84 + 4 /* padding */];
@@ -588,23 +594,27 @@ inline void make_prm_bokkuri(u32* pActorParams, csXyz* p_angle, u8 param_2, u8 p
inline fopAc_ac_c* dComIfGp_getPlayer(int);
inline s16 fopAcM_searchPlayerAngleY(const fopAc_ac_c* actor) {
- return fopAcM_searchActorAngleY(actor, (fopAc_ac_c*)dComIfGp_getPlayer(0));
+ return fopAcM_searchActorAngleY(actor, dComIfGp_getPlayer(0));
}
inline f32 fopAcM_searchPlayerDistanceY(const fopAc_ac_c* actor) {
- return fopAcM_searchActorDistanceY(actor, (fopAc_ac_c*)dComIfGp_getPlayer(0));
+ return fopAcM_searchActorDistanceY(actor, dComIfGp_getPlayer(0));
}
inline f32 fopAcM_searchPlayerDistanceXZ2(const fopAc_ac_c* actor) {
- return fopAcM_searchActorDistanceXZ2(actor, (fopAc_ac_c*)dComIfGp_getPlayer(0));
+ return fopAcM_searchActorDistanceXZ2(actor, dComIfGp_getPlayer(0));
}
inline f32 fopAcM_searchPlayerDistanceXZ(const fopAc_ac_c* actor) {
- return fopAcM_searchActorDistanceXZ(actor, (fopAc_ac_c*)dComIfGp_getPlayer(0));
+ return fopAcM_searchActorDistanceXZ(actor, dComIfGp_getPlayer(0));
}
inline f32 fopAcM_searchPlayerDistance(const fopAc_ac_c* actor) {
- return fopAcM_searchActorDistance(actor, (fopAc_ac_c*)dComIfGp_getPlayer(0));
+ return fopAcM_searchActorDistance(actor, dComIfGp_getPlayer(0));
+}
+
+inline s32 fopAcM_seenPlayerAngleY(const fopAc_ac_c* i_actor) {
+ return fopAcM_seenActorAngleY(i_actor, dComIfGp_getPlayer(0));
}
s8 dComIfGp_getReverb(int roomNo);
diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h
index 6c8215cabd..05926d090e 100644
--- a/include/m_Do/m_Do_ext.h
+++ b/include/m_Do/m_Do_ext.h
@@ -604,6 +604,7 @@ J3DModel* mDoExt_J3DModel__create(J3DModelData* i_modelData, u32 i_modelFlag, u3
void mDoExt_setAraCacheSize(u32 size);
int mDoExt_resIDToIndex(JKRArchive* p_archive, u16 id);
void mDoExt_modelEntryDL(J3DModel* i_model);
+void mDoExt_brkAnmRemove(J3DModelData* i_modelData);
void mDoExt_setupStageTexture(J3DModelData* i_modelData);
OSThread* mDoExt_GetCurrentRunningThread();
void mDoExt_setupShareTexture(J3DModelData* i_modelData, J3DModelData* i_shareModelData);
diff --git a/include/rel/d/a/d_a_midna/d_a_midna.h b/include/rel/d/a/d_a_midna/d_a_midna.h
index f9d2191565..9d65fc9600 100644
--- a/include/rel/d/a/d_a_midna/d_a_midna.h
+++ b/include/rel/d/a/d_a_midna/d_a_midna.h
@@ -1,6 +1,268 @@
#ifndef D_A_MIDNA_H
#define D_A_MIDNA_H
+#include "SSystem/SComponent/c_phase.h"
+#include "JSystem/J3DGraphBase/J3DMatBlock.h"
+#include "Z2AudioLib/Z2Creature.h"
+#include "f_op/f_op_actor.h"
+#include "d/bg/d_bg_s_lin_chk.h"
+#include "d/com/d_com_inf_game.h"
+#include "d/a/d_a_player.h"
+#include "d/msg/d_msg_flow.h"
#include "dolphin/types.h"
+class daMidna_c;
+typedef int (daMidna_c::*daMidna_func)();
+
+class daMidna_c : public fopAc_ac_c {
+public:
+ enum daMidna_ERFLG0 {
+ ERFLG0_NO_SERVICE_WAIT = 0x80,
+ ERFLG0_FORCE_PANIC = 8,
+ ERFLG0_UNK_2 = 2,
+ };
+
+ enum daMidna_FLG0 {
+ FLG0_UNK_80000000 = 0x80000000,
+ FLG0_UNK_8000000 = 0x8000000,
+ FLG0_NPC_NEAR = 0x100000,
+ FLG0_NPC_FAR = 0x40000,
+ FLG0_NO_INPUT = 0x4000,
+ FLG0_NO_DRAW = 0x2000,
+ FLG0_UNK_400 = 0x400,
+ FLG0_UNK_800 = 0x800,
+ FLG0_UNK_200 = 0x200,
+ };
+
+ enum daMidna_FLG1 {
+ FLG1_FORCE_NORMAL_COL = 8,
+ FLG1_FORCE_TIRED_COL = 4,
+ FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE = 2,
+ };
+
+ enum daMidna_ANM {};
+
+ void onForcePanic();
+ u32 checkForceNormalColor() const;
+ u32 checkForceTiredColor() const;
+ bool checkMidnaTired();
+ void onNoServiceWait();
+
+ /* 804BC3E0 */ void modelCallBack(int);
+ /* 804BC5C4 */ void changeUpperBck();
+ /* 804BC614 */ void changeFaceBck();
+ /* 804BC670 */ void baseModelCallBack(int);
+ /* 804BC740 */ void initInvModel(u16, J3DModel**, mDoExt_invisibleModel*, u32);
+ /* 804BC7D4 */ void initDemoModel(J3DModel**, char const*, u32);
+ /* 804BC868 */ void createHeap();
+ /* 804BD274 */ void create();
+ /* 804BD93C */ void allAnimePlay();
+ /* 804BDE04 */ void setMatrix();
+ /* 804BE470 */ void setBodyPartMatrix();
+ /* 804BED1C */ void setRoomInfo();
+ /* 804BEDB8 */ void setBodyPartPos();
+ /* 804BEFA0 */ void checkAppear();
+ /* 804BF070 */ void checkMidnaPosState();
+ /* 804BFF80 */ void setUpperAnime(u16, u16);
+ /* 804C0020 */ void setUpperAnimeAndSe(daMidna_c::daMidna_ANM);
+ /* 804C0094 */ void setFaceAnime(u16, u16);
+ /* 804C0134 */ void endHighModel();
+ /* 804C0238 */ void setDemoAnm();
+ /* 804C0BAC */ void setFaceBtp(u16, int);
+ /* 804C0C6C */ void setFaceBtk(u16, int);
+ /* 804C0D2C */ void setLeftHandShape(u16);
+ /* 804C0E18 */ void setRightHandShape(u16);
+ /* 804C0F04 */ void checkHairOnlyAnime(int) const;
+ /* 804C0F24 */ void setBckAnime(J3DAnmTransform*, int, f32);
+ /* 804C103C */ void setAnm();
+ /* 804C287C */ void getNeckAimAngle(cXyz const*, s16*, s16*, s16*, s16*);
+ /* 804C2A68 */ void clearEyeMove();
+ /* 804C2AB8 */ void setEyeMove(cXyz const*, s16, s16);
+ /* 804C2EBC */ void setNeckAngle();
+ /* 804C3168 */ void initHairAngle();
+ /* 804C3298 */ void setHairAngle();
+ /* 804C3F04 */ void setDemoData();
+ /* 804C4394 */ void setSimpleBrk(J3DModelData*, u16);
+ /* 804C4444 */ void setSimpleBtk(J3DModelData*, u16);
+ /* 804C44CC */ void initMidnaModel();
+ /* 804C49B8 */ void setMidnaNoDrawFlg();
+ /* 804C4AE8 */ void checkMetamorphoseEnableBase();
+ /* 804C4B68 */ void checkNoDrawState();
+ /* 804C4BC0 */ void setSound();
+ /* 804C4FDC */ void execute();
+ /* 804C5A08 */ void draw();
+ /* 804C61A4 */ ~daMidna_c();
+
+ void onEndResetStateFlg0(daMidna_ERFLG0 pFlg) { mEndResetStateFlg0 |= pFlg; }
+ void onStateFlg0(daMidna_FLG0 i_flag) { mStateFlg0 |= i_flag; }
+ void offStateFlg0(daMidna_FLG0 i_flag) { mStateFlg0 &= ~i_flag; }
+ u32 checkStateFlg0(daMidna_FLG0 flag) const { return mStateFlg0 & flag; }
+ u32 checkStateFlg1(daMidna_FLG1 flag) const { return mStateFlg1 & flag; }
+ void setFaceNum(int num) { mFaceNum = num; }
+ void setMotionNum(int num) { mMotionNum = num; }
+ bool checkDemoTypeNone() const { return mDemoType == 0; }
+ void changeOriginalDemo() { mDemoType = 3; }
+ void changeDemoMode(u32 mode) { mDemoMode = mode; }
+ BOOL checkNpcNear() { return checkStateFlg0(FLG0_NPC_NEAR); }
+ BOOL checkNpcFar() { return checkStateFlg0(FLG0_NPC_FAR); }
+ BOOL checkNoDraw() const { return checkStateFlg0(FLG0_NO_DRAW); }
+ BOOL checkNoInput() const { return checkStateFlg0(FLG0_NO_INPUT); }
+ BOOL checkWolfNoPos() const { return checkStateFlg0(FLG0_UNK_800); }
+ int checkMetamorphoseEnable() { return (this->*mpFunc)(); }
+ int checkShadowModelDrawDemoForce() const { return checkStateFlg1(FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE); }
+
+ void onTagWaitPosWarp(const cXyz* param_0) {
+ field_0x9ac = *param_0;
+ onStateFlg0(FLG0_UNK_400);
+ onEndResetStateFlg0(ERFLG0_UNK_2);
+ }
+
+ void onTagWaitPos(const cXyz* param_0) {
+ field_0x9ac = *param_0;
+ onStateFlg0(FLG0_UNK_400);
+ }
+
+ void offTagWaitPos() {
+ offStateFlg0((daMidna_FLG0)(FLG0_UNK_80000000 | FLG0_UNK_8000000 | FLG0_UNK_400));
+ }
+
+ void onTagNoHairLead() {
+ onStateFlg0(FLG0_UNK_80000000);
+ }
+
+ bool checkReturnAnime() const {
+ return field_0x5e4[0].getIdx() == 0x1CA;
+ }
+
+ bool checkShadowModelDrawSmode() const {
+ return field_0x84e == 3 || field_0x84e == 4 || field_0x84e == 2;
+ }
+
+ bool checkShadowModelDraw() const {
+ return checkShadowModelDrawDemoForce() || checkShadowModelDrawSmode();
+ }
+
+ bool checkShadowReturnEnd() const {
+ return field_0x5e4[0].getIdx() == 0x21C && field_0x578->isStop();
+ }
+
+ bool checkShadowModeTalkWait() const {
+ return (field_0x84e == 2 || field_0x84e == 1) ;
+ }
+
+ void setShadowReturn() { field_0x84e = 4; }
+
+
+ bool checkPortalObjRide() const {
+ return checkStateFlg0(FLG0_UNK_8000000) && checkStateFlg0(FLG0_UNK_200);
+ }
+
+ inline static BOOL checkMidnaRealBody();
+
+ bool i_checkMidnaTired() {
+ return dComIfGs_isTransformLV(3) && !i_dComIfGs_isEventBit(0x1E08);
+ }
+
+ static u8 const m_texDataTable[84];
+ static u8 const m_anmDataTable[636];
+
+private:
+ /* 0x0568 */ request_of_phase_process_class mPhase;
+ /* 0x0570 */ J3DModel* field_0x570;
+ /* 0x0574 */ J3DModel* field_0x574;
+ /* 0x0578 */ mDoExt_McaMorfSO* field_0x578;
+ /* 0x057C */ mDoExt_McaMorfCallBack1_c* field_0x57c; // this is really daMidna_McaMorfCB1_c. fix later
+ /* 0x0580 */ cXyz* field_0x580;
+ /* 0x0584 */ mDoExt_bckAnm field_0x584;
+ /* 0x05A0 */ mDoExt_bckAnm field_0x5a0;
+ /* 0x05BC */ J3DAnmTexPattern* field_0x5bc;
+ /* 0x05C0 */ J3DAnmTextureSRTKey* field_0x5c0;
+ /* 0x05C4 */ mDoExt_invisibleModel field_0x5c4;
+ /* 0x05CC */ mDoExt_invisibleModel mInvMaskBmd;
+ /* 0x05D4 */ mDoExt_invisibleModel mInvHandsBmd;
+ /* 0x05DC */ mDoExt_invisibleModel mInvHairhandBmd;
+ /* 0x05E4 */ daPy_anmHeap_c field_0x5e4[3];
+ /* 0x0620 */ daPy_anmHeap_c field_0x620;
+ /* 0x0634 */ daPy_anmHeap_c field_0x634;
+ /* 0x0648 */ J3DAnmTextureSRTKey* field_0x648;
+ /* 0x064C */ J3DAnmTextureSRTKey* field_0x64c;
+ /* 0x0650 */ J3DAnmTextureSRTKey* field_0x650;
+ /* 0x0654 */ J3DAnmTextureSRTKey* field_0x654;
+ /* 0x0658 */ J3DAnmTevRegKey* field_0x658;
+ /* 0x065C */ J3DAnmTevRegKey* field_0x65c;
+ /* 0x0660 */ J3DAnmTevRegKey* field_0x660;
+ /* 0x0664 */ J3DAnmTevRegKey* field_0x664;
+ /* 0x0668 */ J3DAnmTevRegKey* field_0x668;
+ /* 0x066C */ J3DAnmTevRegKey* field_0x66c;
+ /* 0x0670 */ J3DModel* field_0x670;
+ /* 0x0674 */ J3DModel* mpMaskBmd;
+ /* 0x0678 */ J3DModel* field_0x678;
+ /* 0x067C */ J3DModel* mpHandsBmd;
+ /* 0x0680 */ J3DModel* field_0x680;
+ /* 0x0684 */ J3DModel* mpHairhandBmd;
+ /* 0x0688 */ J3DModel* mpDemoBDTmpBmd;
+ /* 0x068C */ J3DModel* mpDemoBDMaskBmd;
+ /* 0x0690 */ J3DModel* mpDemoBDHandsBmd;
+ /* 0x0694 */ J3DModel* mpDemoBDHairhandBmd;
+ /* 0x0698 */ J3DModel* mpGokouBmd;
+ /* 0x069C */ J3DShape* field_0x69c;
+ /* 0x06A0 */ J3DShape* field_0x6a0;
+ /* 0x06A4 */ J3DShape* field_0x6a4;
+ /* 0x06A8 */ J3DShape* field_0x6a8;
+ /* 0x06AC */ J3DModel* mpDemoFCBlendBmd;
+ /* 0x06B0 */ J3DModel* mpDemoFCTongueBmd;
+ /* 0x06B4 */ J3DAnmTextureSRTKey* field_0x6b4;
+ /* 0x06B8 */ mDoExt_bckAnm* mpDemoFCTmpBck;
+ /* 0x06BC */ J3DDeformData* mpDemoFCTmpBls;
+ /* 0x06C0 */ J3DAnmCluster* field_0x6c0;
+ /* 0x06C4 */ mDoExt_blkAnm* field_0x6c4;
+ /* 0x06C8 */ J3DModel* mpDemoHLTmpBmd;
+ /* 0x06CC */ mDoExt_bckAnm* mpDemoHLTmpBck;
+ /* 0x06D0 */ J3DModel* mpDemoHRTmpBmd;
+ /* 0x06D4 */ mDoExt_bckAnm* mpDemoHRTmpBck;
+ /* 0x06D8 */ J3DModel* mpDemoHDTmpBmd;
+ /* 0x06DC */ mDoExt_bckAnm* mpDemoHDTmpBck;
+ /* 0x06E0 */ J3DGXColorS10 field_0x6e0;
+ /* 0x06E8 */ J3DGXColor field_0x6e8;
+ /* 0x06EC */ u8 field_0x6ec; // this is probably J3DGXColor. fix later
+ /* 0x06ED */ u8 field_0x6ed;
+ /* 0x06EE */ u8 field_0x6ee;
+ /* 0x06EF */ u8 field_0x6ef;
+ /* 0x06F0 */ void* field_0x6f0;
+ /* 0x06F4 */ void* field_0x6f4;
+ /* 0x06F8 */ void* field_0x6f8;
+ /* 0x06FC */ Z2Creature field_0x6fc;
+ /* 0x078C */ dMsgFlow_c mMsgFlow;
+ /* 0x07D8 */ dBgS_LinkLinChk mLinChk;
+ /* 0x0848 */ u8 mMotionNum;
+ /* 0x0849 */ u8 mFaceNum;
+ /* 0x084A */ u8 field_0x84a[4];
+ /* 0x084E */ u8 field_0x84e;
+ /* 0x084F */ u8 mDemoType;
+ /* 0x0850 */ u8 field_0x850[0xA];
+ /* 0x085A */ s16 field_0x85a;
+ /* 0x085C */ u8 field_0x85c[0x22];
+ /* 0x087E */ s16 field_0x87e;
+ /* 0x0880 */ u8 field_0x880[0xC]; // csXyz in here, fix later
+ /* 0x088C */ int mStaffID;
+ /* 0x0890 */ u32 mStateFlg0;
+ /* 0x0894 */ u32 mStateFlg1;
+ /* 0x0898 */ u32 mEndResetStateFlg0;
+ /* 0x089C */ u8 field_0x89c[0x24];
+ /* 0x08C0 */ u32 mDemoMode;
+ /* 0x08C4 */ u8 field_0x8c4[4];
+ /* 0x08C8 */ f32 field_0x8c8;
+ /* 0x08CC */ u8 field_0x8cc[0x14];
+ /* 0x08E0 */ cXyz field_0x8e0[5];
+ /* 0x091C */ cXyz field_0x91c[5];
+ /* 0x0958 */ u8 field_0x958[0xC]; // cXyz here, fix later
+ /* 0x0964 */ cXyz field_0x964[5];
+ /* 0x09A0 */ u8 field_0x9a0[0xC];
+ /* 0x09AC */ cXyz field_0x9ac;
+ /* 0x09B8 */ u8 field_0x9b8[0x9C4 - 0x9B8];
+ /* 0x09C4 */ cXyz field_0x9c4;
+ /* 0x09D0 */ u8 field_0x9d0[4];
+ /* 0x09D4 */ daMidna_func mpFunc;
+};
+
#endif /* D_A_MIDNA_H */
diff --git a/include/rel/d/a/d_a_tbox/d_a_tbox.h b/include/rel/d/a/d_a_tbox/d_a_tbox.h
index 70a00cfbef..e58d779d21 100644
--- a/include/rel/d/a/d_a_tbox/d_a_tbox.h
+++ b/include/rel/d/a/d_a_tbox/d_a_tbox.h
@@ -1,6 +1,213 @@
#ifndef D_A_TBOX_H
#define D_A_TBOX_H
+#include "SSystem/SComponent/c_phase.h"
+#include "d/cc/d_cc_d.h"
+#include "d/bg/d_bg_s_acch.h"
+#include "d/bg/d_bg_s_movebg_actor.h"
+#include "f_op/f_op_actor_mng.h"
+#include "m_Do/m_Do_hostIO.h"
#include "dolphin/types.h"
+class dBgW;
+
+class daTboxBase_c : public dBgS_MoveBgActor {
+protected:
+ /* 0x5A0 */ dCcD_Stts mStts;
+ /* 0x5DC */ dCcD_Cyl mCyl;
+};
+
+STATIC_ASSERT(sizeof(daTboxBase_c) == 0x718);
+
+struct daTbox_ModelInfo {
+ /* 0x00 */ char* mArcName;
+ /* 0x04 */ int mModelResNo;
+ /* 0x08 */ int mBckResNo;
+ /* 0x0C */ int mClosedDzbResNo;
+ /* 0x10 */ int mOpenDzbResNo;
+ /* 0x14 */ int mEffectResNo;
+ /* 0x18 */ int mBrkResNo;
+};
+
+STATIC_ASSERT(sizeof(daTbox_ModelInfo) == 0x1C);
+
+class daTbox_c;
+typedef int (daTbox_c::*daTbox_actionFn)();
+typedef void (daTbox_c::*daTbox_modeFn)();
+
+class daTbox_c : public daTboxBase_c {
+public:
+ enum Shape {
+ SHAPE_SMALL = 0,
+ SHAPE_LARGE = 1,
+ SHAPE_BOSSKEY = 2,
+ };
+
+ enum Mode {
+ MODE_EXEC_WAIT = 0,
+ MODE_EXEC = 1,
+ };
+
+ /* 80490E50 */ daTbox_ModelInfo* getModelInfo();
+ /* 80490E6C */ cPhs__Step commonShapeSet();
+ /* 804911B8 */ cPhs__Step effectShapeSet();
+ /* 804911C0 */ cPhs__Step envShapeSet();
+ /* 804911C8 */ cPhs__Step bgCheckSet();
+ /* 8049129C */ void lightReady();
+ /* 804912EC */ void setLightPos();
+ /* 8049135C */ int checkEnv();
+ /* 80491364 */ int checkAppear();
+ /* 8049139C */ int checkOpen();
+ /* 804913D0 */ void clrDzb();
+ /* 8049141C */ void setDzb();
+ /* 80491484 */ void surfaceProc();
+ /* 80491544 */ int checkNormal();
+ /* 804915BC */ int checkEnvEffectTbox();
+ /* 80491624 */ u32 calcHeapSize();
+ /* 804916A4 */ int CreateHeap();
+ /* 80491744 */ void CreateInit();
+ /* 804919B0 */ void initPos();
+ /* 80491BB0 */ void initAnm();
+ /* 80491F68 */ int boxCheck();
+ /* 804920A8 */ void demoProcOpen();
+ /* 8049216C */ void lightColorProc();
+ /* 8049233C */ void environmentProc();
+ /* 80492398 */ void lightUpProc();
+ /* 804923D4 */ void lightDownProc();
+ /* 80492408 */ void dropProcInitCall();
+ /* 80492450 */ void dropProcInit();
+ /* 804928DC */ int calcJumpGoalAndAngle(cXyz*, s16*);
+ /* 80492B10 */ bool getDropSAngle(s16*);
+ /* 80492BC8 */ int getDir();
+ /* 80492C84 */ void setRotAxis(cXyz const*, cXyz const*);
+ /* 80492D08 */ void dropProcInit2();
+ /* 80492F50 */ void dropProc();
+ /* 80493338 */ void demoInitAppear();
+ /* 80493484 */ void demoProcAppear();
+ /* 80493518 */ int demoProc();
+ /* 80493838 */ void OpenInit_com();
+ /* 804939A4 */ void OpenInit();
+ /* 804939F4 */ int actionWait();
+ /* 804939FC */ int actionDemo();
+ /* 80493CC8 */ int actionDemo2();
+ /* 80493D90 */ int actionDropDemo();
+ /* 80493ED8 */ u8 getBombItemNo(u8, u8);
+ /* 80493FE8 */ u8 getBombItemNo2(u8, u8, u8);
+ /* 80494144 */ u8 getBombItemNo3(u8, u8, u8, u8);
+ /* 804942CC */ u8 getBombItemNoMain(u8);
+ /* 804945C8 */ int setGetDemoItem();
+ /* 804946A4 */ int actionOpenWait();
+ /* 804948CC */ int actionNotOpenDemo();
+ /* 80494950 */ int checkDrop();
+ /* 80494A0C */ void settingDropDemoCamera();
+ /* 80494D88 */ int actionSwOnWait();
+ /* 80494E98 */ int actionSwOnWait2();
+ /* 80494F44 */ int actionDropWait();
+ /* 80495058 */ int actionGenocide();
+ /* 8049518C */ int actionDropWaitForWeb();
+ /* 80495250 */ int actionDropForWeb();
+ /* 804953D4 */ void initBaseMtx();
+ /* 80495490 */ void setBaseMtx();
+ /* 80495660 */ void mode_proc_call();
+ /* 804956EC */ void mode_exec_wait();
+ /* 80495818 */ void mode_exec();
+ /* 80495910 */ cPhs__Step create1st();
+ /* 804959EC */ int Execute(f32 (**)[3][4]);
+ /* 80495AF0 */ int Draw();
+ /* 80495C9C */ int Delete();
+ /* 804961B0 */ int Create();
+ /* 804961B8 */ bool checkSmallTbox();
+
+ u32 getEvent() { return fopAcM_GetParam(this) >> 24; }
+ int getShapeType() { return (fopAcM_GetParam(this) >> 20) & 0xf; }
+ int getSwNo() { return (fopAcM_GetParam(this) >> 12) & 0xff; }
+ int getTboxNo() { return (fopAcM_GetParam(this) >> 6) & 0x3f; }
+ int getFuncType() { return fopAcM_GetParam(this) & 0x3f; }
+ u32 getSwType() { return field_0x980 & 0xf; }
+ int getItemNo() { return (field_0x982 >> 8) & 0xff; }
+ int getPathId() { return field_0x982 & 0xff; }
+ void flagClr() { mFlags = 0; }
+ void flagOn(u16 i_flag) { mFlags |= i_flag; }
+ void flagOff(u16 i_flag) { mFlags &= ~i_flag; }
+ u16 flagCheck(u16 i_flag) { return mFlags & i_flag; }
+ void setAction(daTbox_actionFn i_actionFn) { mpActionFn = i_actionFn; }
+ void action() { (this->*mpActionFn)(); }
+
+private:
+ /* 0x718 */ bool field_0x718;
+ /* 0x71C */ request_of_phase_process_class mPhase;
+ /* 0x724 */ J3DModel* mpModel;
+ /* 0x728 */ J3DModel* mpSlimeModel;
+ /* 0x72C */ mDoExt_bckAnm* mpAnm;
+ /* 0x730 */ J3DModel* mpEffectModel;
+ /* 0x734 */ mDoExt_brkAnm* mpEffectAnm;
+ /* 0x738 */ dBgW* mpOpenBgW;
+ /* 0x73C */ dBgW* mpBgCollider;
+ /* 0x740 */ daTbox_actionFn mpActionFn;
+ /* 0x74C */ int mStaffId;
+ /* 0x750 */ f32 field_0x750;
+ /* 0x754 */ u16 mFlags;
+ /* 0x756 */ u16 mDemoFrame;
+ /* 0x758 */ bool field_0x758;
+ /* 0x759 */ u8 field_0x759;
+ /* 0x75A */ u16 field_0x75a;
+ /* 0x75C */ u8 mTimer;
+ /* 0x760 */ dBgS_ObjAcch mAcch;
+ /* 0x938 */ dBgS_AcchCir mAcchCir;
+ /* 0x978 */ u8 mTboxNo;
+ /* 0x97A */ s16 mEventId;
+ /* 0x97C */ bool field_0x97c;
+ /* 0x97D */ bool field_0x97d;
+ /* 0x97E */ u8 field_0x97e;
+ /* 0x97F */ bool mParamsInit;
+ /* 0x980 */ u16 field_0x980;
+ /* 0x982 */ u16 field_0x982;
+ /* 0x984 */ s16 field_0x984;
+ /* 0x988 */ Mtx field_0x988;
+ /* 0x9B8 */ cXyz mRotAxis;
+ /* 0x9C4 */ s16 field_0x9c4;
+ /* 0x9C6 */ s16 field_0x9c6;
+ /* 0x9C8 */ u8 field_0x9c8;
+ /* 0x9C9 */ u8 field_0x9c9;
+ /* 0x9CA */ s16 field_0x9ca;
+ /* 0x9CC */ u8 field_0x9cc;
+ /* 0x9CD */ u8 mMode;
+ /* 0x9D0 */ LIGHT_INFLUENCE mLight;
+ /* 0x9F0 */ f32 mAllcolRatio;
+ /* 0x9F4 */ int field_0x9f4;
+ /* 0x9F8 */ u32 mOpenSeId;
+ /* 0x9FC */ u8 field_0x9fc;
+ /* 0x9FD */ u8 field_0x9fd;
+ /* 0xA00 */ Mtx field_0xa00;
+};
+
+STATIC_ASSERT(sizeof(daTbox_c) == 0xA30);
+
+class daTbox_HIO_c : mDoHIO_entry_c {
+public:
+ /* 80490D2C */ daTbox_HIO_c();
+ /* 804960B8 */ virtual ~daTbox_HIO_c() {}
+
+ /* 0x04 */ u8 mItemNo;
+ /* 0x05 */ u8 mUseDebugItemNo;
+ /* 0x06 */ u8 mClearSwitch;
+ /* 0x07 */ u8 mDemoType;
+ /* 0x08 */ u8 mDebugLightColorEnabled;
+ /* 0x09 */ u8 mTimerDisplay;
+ /* 0x0A */ u8 mCheckDisplay;
+ /* 0x0B */ u8 mSaveOff;
+ /* 0x0C */ f32 mGravity;
+ /* 0x10 */ cXyz mLightOffset;
+ /* 0x1C */ s16 mLightColorR;
+ /* 0x1E */ s16 mLightColorG;
+ /* 0x20 */ s16 mLightColorB;
+ /* 0x24 */ f32 mLightPower;
+ /* 0x28 */ f32 mFluctuationRate;
+ /* 0x2C */ f32 mEnvColorInfluence;
+ /* 0x30 */ s16 mFluctuationSpeed;
+ /* 0x32 */ u8 mForPlacementCheck;
+};
+
+STATIC_ASSERT(sizeof(daTbox_HIO_c) == 0x34);
+
#endif /* D_A_TBOX_H */
diff --git a/libs/SSystem/SComponent/c_bg_s_gnd_chk.cpp b/libs/SSystem/SComponent/c_bg_s_gnd_chk.cpp
index a9574b522e..b70e43b0b1 100644
--- a/libs/SSystem/SComponent/c_bg_s_gnd_chk.cpp
+++ b/libs/SSystem/SComponent/c_bg_s_gnd_chk.cpp
@@ -17,7 +17,7 @@
/* 80267C1C-80267C94 26255C 0078+00 0/0 2/2 123/123 .text __ct__11cBgS_GndChkFv */
cBgS_GndChk::cBgS_GndChk() {
m_pos = cXyz::Zero;
- setActorPid(0xFFFFFFFF);
+ SetActorPid(0xFFFFFFFF);
mFlags = 2;
}
diff --git a/libs/SSystem/SComponent/c_bg_s_lin_chk.cpp b/libs/SSystem/SComponent/c_bg_s_lin_chk.cpp
index 104e060e00..3ce90aae62 100644
--- a/libs/SSystem/SComponent/c_bg_s_lin_chk.cpp
+++ b/libs/SSystem/SComponent/c_bg_s_lin_chk.cpp
@@ -24,7 +24,7 @@ void cBgS_LinChk::ct() {
cXyz xyz(cXyz::Zero);
mLin.SetStartEnd(xyz, xyz);
field_0x40 = xyz;
- setActorPid(0xFFFFFFFF);
+ SetActorPid(0xFFFFFFFF);
field_0x4c = 0;
mFrontFlag = 1;
mBackFlag = 0;
@@ -34,7 +34,7 @@ void cBgS_LinChk::ct() {
void cBgS_LinChk::Set2(cXyz const* pStart, cXyz const* pEnd, unsigned int actorPid) {
mLin.SetStartEnd(*pStart, *pEnd);
field_0x40 = *pEnd;
- setActorPid(actorPid);
+ SetActorPid(actorPid);
field_0x4c &= ~0x10;
ClearPi();
}
diff --git a/rel/d/a/d_a_midna/d_a_midna.cpp b/rel/d/a/d_a_midna/d_a_midna.cpp
index ae156ced4e..fc5a14569c 100644
--- a/rel/d/a/d_a_midna/d_a_midna.cpp
+++ b/rel/d/a/d_a_midna/d_a_midna.cpp
@@ -10,100 +10,6 @@
// Types:
//
-struct request_of_phase_process_class {};
-
-struct csXyz {};
-
-struct Vec {};
-
-struct cXyz {
- /* 80266AE4 */ void operator+(Vec const&) const;
- /* 80266B34 */ void operator-(Vec const&) const;
- /* 80266B84 */ void operator*(f32) const;
- /* 80267128 */ void atan2sX_Z() const;
- /* 80267150 */ void atan2sY_XZ() const;
- /* 804BD8B8 */ ~cXyz();
- /* 804BD8F4 */ cXyz();
-
- static f32 Zero[3];
- static u8 BaseX[12];
-};
-
-struct mDoMtx_stack_c {
- /* 8000CD64 */ void transS(cXyz const&);
- /* 8000CD9C */ void transM(f32, f32, f32);
- /* 8000CE70 */ void scaleM(cXyz const&);
- /* 8000CE38 */ void scaleM(f32, f32, f32);
- /* 8000CF44 */ void ZXYrotM(csXyz const&);
-
- static u8 now[48];
-};
-
-struct mDoExt_morf_c {
- /* 8000FB7C */ void setMorf(f32);
-};
-
-struct J3DDeformData {};
-
-struct J3DModel {
- /* 80327A2C */ void setDeformData(J3DDeformData*, u32);
- /* 80327C58 */ void calcWeightEnvelopeMtx();
-};
-
-struct mDoExt_invisibleModel {
- /* 8000E53C */ void create(J3DModel*, u8);
- /* 8000E7C0 */ void entryDL(cXyz*);
-};
-
-struct J3DAnmCluster {};
-
-struct mDoExt_blkAnm {
- /* 8000DA08 */ void init(J3DDeformData*, J3DAnmCluster*, int, int, f32, s16, s16);
-};
-
-struct J3DModelData {};
-
-struct J3DAnmTransform {};
-
-struct mDoExt_bckAnm {
- /* 8000D7DC */ void init(J3DAnmTransform*, int, int, f32, s16, s16, bool);
- /* 8000D990 */ void changeBckOnly(J3DAnmTransform*);
- /* 8000D9CC */ void entry(J3DModelData*, f32);
-};
-
-struct mDoExt_baseAnm {
- /* 8000D428 */ void play();
-};
-
-struct J3DTransformInfo {};
-
-struct mDoExt_McaMorfCallBack2_c {};
-
-struct mDoExt_McaMorfCallBack1_c {};
-
-struct Z2Creature {
- /* 802C03C8 */ Z2Creature();
- /* 802C0420 */ ~Z2Creature();
- /* 802C0530 */ void init(Vec*, Vec*, u8, u8);
- /* 802C0628 */ void initAnime(void*, bool, f32, f32);
- /* 802C06D0 */ void updateAnime(f32, f32);
-};
-
-struct mDoExt_McaMorfSO {
- /* 800107D0 */ mDoExt_McaMorfSO(J3DModelData*, mDoExt_McaMorfCallBack1_c*,
- mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, int, f32, int,
- int, Z2Creature*, u32, u32);
- /* 80010E70 */ void setAnm(J3DAnmTransform*, int, f32, f32, f32, f32);
- /* 800110B0 */ void play(u32, s8);
- /* 800111EC */ void modelCalc();
- /* 80011250 */ void getTransform(u16, J3DTransformInfo*);
-};
-
-struct fopAc_ac_c {
- /* 80018B64 */ fopAc_ac_c();
- /* 80018C8C */ ~fopAc_ac_c();
-};
-
struct fopAcM_lc_c {
/* 8001DC68 */ void lineCheck(cXyz const*, cXyz const*, fopAc_ac_c const*);
};
@@ -115,23 +21,6 @@ struct fopAcM_gc_c {
static f32 mGroundY;
};
-struct daPy_py_c {
- static u8 m_midnaActor[4];
-};
-
-struct daPy_anmHeap_c {
- struct daAlinkHEAP_TYPE {};
-
- /* 8015ED10 */ daPy_anmHeap_c(u32);
- /* 8015ED50 */ ~daPy_anmHeap_c();
- /* 8015EDAC */ void initData();
- /* 8015EDC4 */ void mallocBuffer();
- /* 8015EE00 */ void createHeap(daPy_anmHeap_c::daAlinkHEAP_TYPE);
- /* 8015F068 */ void loadDataIdx(u16);
- /* 8015F118 */ void loadDataDemoRID(u16, u16);
- /* 804BD8F8 */ void __defctor();
-};
-
struct J3DMaterial {};
struct daMidna_matAnm_c {
@@ -144,65 +33,11 @@ struct daMidna_hio_c0 {
static u8 const m[32];
};
-struct daMidna_c {
- struct daMidna_ANM {};
-
- /* 804BC3E0 */ void modelCallBack(int);
- /* 804BC5C4 */ void changeUpperBck();
- /* 804BC614 */ void changeFaceBck();
- /* 804BC670 */ void baseModelCallBack(int);
- /* 804BC740 */ void initInvModel(u16, J3DModel**, mDoExt_invisibleModel*, u32);
- /* 804BC7D4 */ void initDemoModel(J3DModel**, char const*, u32);
- /* 804BC868 */ void createHeap();
- /* 804BD274 */ void create();
- /* 804BD93C */ void allAnimePlay();
- /* 804BDE04 */ void setMatrix();
- /* 804BE470 */ void setBodyPartMatrix();
- /* 804BED1C */ void setRoomInfo();
- /* 804BEDB8 */ void setBodyPartPos();
- /* 804BEFA0 */ void checkAppear();
- /* 804BF070 */ void checkMidnaPosState();
- /* 804BFF80 */ void setUpperAnime(u16, u16);
- /* 804C0020 */ void setUpperAnimeAndSe(daMidna_c::daMidna_ANM);
- /* 804C0094 */ void setFaceAnime(u16, u16);
- /* 804C0134 */ void endHighModel();
- /* 804C0238 */ void setDemoAnm();
- /* 804C0BAC */ void setFaceBtp(u16, int);
- /* 804C0C6C */ void setFaceBtk(u16, int);
- /* 804C0D2C */ void setLeftHandShape(u16);
- /* 804C0E18 */ void setRightHandShape(u16);
- /* 804C0F04 */ void checkHairOnlyAnime(int) const;
- /* 804C0F24 */ void setBckAnime(J3DAnmTransform*, int, f32);
- /* 804C103C */ void setAnm();
- /* 804C287C */ void getNeckAimAngle(cXyz const*, s16*, s16*, s16*, s16*);
- /* 804C2A68 */ void clearEyeMove();
- /* 804C2AB8 */ void setEyeMove(cXyz const*, s16, s16);
- /* 804C2EBC */ void setNeckAngle();
- /* 804C3168 */ void initHairAngle();
- /* 804C3298 */ void setHairAngle();
- /* 804C3F04 */ void setDemoData();
- /* 804C4394 */ void setSimpleBrk(J3DModelData*, u16);
- /* 804C4444 */ void setSimpleBtk(J3DModelData*, u16);
- /* 804C44CC */ void initMidnaModel();
- /* 804C49B8 */ void setMidnaNoDrawFlg();
- /* 804C4AE8 */ void checkMetamorphoseEnableBase();
- /* 804C4B68 */ void checkNoDrawState();
- /* 804C4BC0 */ void setSound();
- /* 804C4FDC */ void execute();
- /* 804C5A08 */ void draw();
- /* 804C61A4 */ ~daMidna_c();
-
- static u8 const m_texDataTable[84];
- static u8 const m_anmDataTable[636];
-};
-
struct daMidna_McaMorfCB1_c {
/* 804BC36C */ void execute(u16, J3DTransformInfo*);
/* 804C6398 */ ~daMidna_McaMorfCB1_c();
};
-struct J3DAnmBase {};
-
struct daAlink_c {
/* 800A3F98 */ void initDemoBck(mDoExt_bckAnm**, char const*);
/* 800A9248 */ void simpleAnmPlay(J3DAnmBase*);
@@ -219,83 +54,10 @@ struct daAlink_c {
/* 801391DC */ void getWolfLockActorEnd();
};
-struct dVibration_c {
- /* 8006FA24 */ void StartShock(int, int, cXyz);
-};
-
-struct dSv_player_status_b_c {
- /* 80032BEC */ void isTransformLV(int) const;
-};
-
-struct dSv_event_c {
- /* 800349BC */ void isEventBit(u16) const;
-};
-
-struct dStage_roomControl_c {
- static u8 mDemoArcName[10 + 2 /* padding */];
-};
-
-struct dKy_tevstr_c {};
-
-struct dScnKy_env_light_c {
- /* 801A37C4 */ void settingTevStruct(int, cXyz*, dKy_tevstr_c*);
- /* 801A4DA0 */ void setLightTevColorType_MAJI(J3DModelData*, dKy_tevstr_c*);
-};
-
-struct dRes_info_c {};
-
-struct dRes_control_c {
- /* 8003C160 */ void syncRes(char const*, dRes_info_c*, int);
- /* 8003C37C */ void getRes(char const*, char const*, dRes_info_c*, int);
- /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int);
- /* 8003C400 */ void getIDRes(char const*, u16, dRes_info_c*, int);
-};
-
-struct dPa_levelEcallBack {};
-
-struct _GXColor {};
-
-struct dPa_control_c {
- struct level_c {
- /* 8004B918 */ void getEmitter(u32);
- };
-
- /* 8004D4CC */ void set(u32, u8, u16, cXyz const*, dKy_tevstr_c const*, csXyz const*,
- cXyz const*, u8, dPa_levelEcallBack*, s8, _GXColor const*,
- _GXColor const*, cXyz const*, f32);
-};
-
struct dMsgObject_c {
/* 802383A4 */ void isMouthCheck();
};
-struct dMsgFlow_c {
- /* 80249F00 */ dMsgFlow_c();
- /* 80249F48 */ ~dMsgFlow_c();
- /* 80249F90 */ void init(fopAc_ac_c*, int, int, fopAc_ac_c**);
- /* 8024A2D8 */ void doFlow(fopAc_ac_c*, fopAc_ac_c**, int);
- /* 8024A528 */ void getEventId(int*);
-};
-
-struct dEvt_control_c {
- /* 80042518 */ void reset(void*);
- /* 800432EC */ void convPId(unsigned int);
-};
-
-struct dEvent_manager_c {
- /* 80047B1C */ void getMyStaffId(char const*, fopAc_ac_c*, int);
- /* 80047F5C */ void getMyNowCutName(int);
- /* 800480EC */ void getMySubstanceP(int, char const*, int);
- /* 8004817C */ void cutEnd(int);
- /* 8004882C */ void checkStartDemo();
-};
-
-struct dDlst_shadowControl_c {
- /* 80055F1C */ void addReal(u32, J3DModel*);
-
- static u8 mSimpleTexObj[32];
-};
-
struct dDemo_object_c {
/* 80039088 */ void getActor(u8);
};
@@ -309,42 +71,6 @@ struct dDemo_actor_c {
/* 80038338 */ void getDemoIDData(int*, int*, int*, u16*, u8*);
};
-struct dBgS_LinkLinChk {
- /* 80078030 */ dBgS_LinkLinChk();
- /* 8007808C */ ~dBgS_LinkLinChk();
-};
-
-struct dBgS_LinChk {
- /* 80077D64 */ void Set(cXyz const*, cXyz const*, fopAc_ac_c const*);
-};
-
-struct cBgS_PolyInfo {};
-
-struct dBgS {
- /* 80074BE8 */ void GetPolyColor(cBgS_PolyInfo const&);
- /* 80075100 */ void GetRoomId(cBgS_PolyInfo const&);
-};
-
-struct cBgS_LinChk {};
-
-struct cBgS {
- /* 800743B4 */ void LineCross(cBgS_LinChk*);
-};
-
-struct _GXTexObj {};
-
-struct _GXColorS10 {};
-
-struct Quaternion {};
-
-struct JMath {
- static u8 sincosTable_[65536];
-};
-
-struct JKRArchive {
- /* 802D5ECC */ void readIdxResource(void*, u32, u32);
-};
-
struct J3DTexNoAnm {
/* 804BD140 */ ~J3DTexNoAnm();
/* 804BD188 */ J3DTexNoAnm();
@@ -366,33 +92,6 @@ struct J3DTevColorAnm {
/* 804BD128 */ J3DTevColorAnm();
};
-struct J3DSys {
- static u8 mCurrentMtx[48];
-};
-
-struct J3DAnmTextureSRTKey {
- /* 8032B1D4 */ void searchUpdateMaterialID(J3DModelData*);
-};
-
-struct J3DAnmTevRegKey {
- /* 8032B1F8 */ void getTevColorReg(u16, _GXColorS10*) const;
- /* 8032B4BC */ void getTevKonstReg(u16, _GXColor*) const;
- /* 8032B87C */ void searchUpdateMaterialID(J3DModelData*);
-};
-
-struct J3DAnmTexPattern {
- /* 8032AF50 */ void getTexNo(u16, u16*) const;
- /* 8032B09C */ void searchUpdateMaterialID(J3DModelData*);
-};
-
-struct J3DMaterialTable {
- /* 8032F7B4 */ void removeTexMtxAnimator(J3DAnmTextureSRTKey*);
- /* 8032F880 */ void removeTevRegAnimator(J3DAnmTevRegKey*);
- /* 8032FBC8 */ void entryTexNoAnimator(J3DAnmTexPattern*);
- /* 8032FCC4 */ void entryTexMtxAnimator(J3DAnmTextureSRTKey*);
- /* 8032FE70 */ void entryTevRegAnimator(J3DAnmTevRegKey*);
-};
-
struct J3DMaterialAnm {
/* 8032C320 */ void initialize();
/* 8032C3C4 */ void calc(J3DMaterial*) const;
@@ -403,14 +102,6 @@ struct J3DMatColorAnm {
/* 804BD23C */ J3DMatColorAnm();
};
-struct J3DJoint {};
-
-struct J3DFrameCtrl {
- /* 803283FC */ void init(s16);
- /* 8032842C */ void checkPass(f32);
- /* 804BD050 */ ~J3DFrameCtrl();
-};
-
struct J3DAnmLoaderDataBaseFlag {};
struct J3DAnmLoaderDataBase {
@@ -646,15 +337,6 @@ extern "C" void entryTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey()
extern "C" void entryTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey();
extern "C" void load__20J3DAnmLoaderDataBaseFPCv24J3DAnmLoaderDataBaseFlag();
extern "C" void JMAEulerToQuat__FsssP10Quaternion();
-extern "C" void PSMTXCopy();
-extern "C" void PSMTXTrans();
-extern "C" void PSMTXMultVec();
-extern "C" void PSMTXMultVecSR();
-extern "C" void PSVECAdd();
-extern "C" void PSVECSubtract();
-extern "C" void PSVECScale();
-extern "C" void PSVECSquareMag();
-extern "C" void PSVECSquareDistance();
extern "C" void __destroy_arr();
extern "C" void __construct_array();
extern "C" void _savegpr_14();
@@ -673,24 +355,17 @@ extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
-extern "C" extern void* g_fopAc_Method[8];
-extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */];
extern "C" extern void* __vt__14J3DMaterialAnm[4];
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" u8 mGndCheck__11fopAcM_gc_c[84];
extern "C" u8 mDemoArcName__20dStage_roomControl_c[10 + 2 /* padding */];
-extern "C" extern u8 g_dComIfG_gameInfo[122384];
extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32];
-extern "C" extern u8 g_env_light[4880];
extern "C" extern u8 g_meter2_info[248];
extern "C" f32 Zero__4cXyz[3];
extern "C" u8 BaseX__4cXyz[12];
-extern "C" extern u8 j3dSys[284];
extern "C" u8 mCurrentMtx__6J3DSys[48];
extern "C" u8 sincosTable___5JMath[65536];
-extern "C" extern u32 __float_nan;
extern "C" f32 mGroundY__11fopAcM_gc_c;
-extern "C" extern u8 mStayNo__20dStage_roomControl_c[4];
extern "C" u8 m_object__7dDemo_c[4];
extern "C" u8 m_midnaActor__9daPy_py_c[4];
extern "C" extern u8 struct_804C6CD8[4];
@@ -1052,7 +727,8 @@ asm void daMidna_c::createHeap() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm J3DFrameCtrl::~J3DFrameCtrl() {
+// asm J3DFrameCtrl::~J3DFrameCtrl() {
+extern "C" asm void __dt__12J3DFrameCtrlFv() {
nofralloc
#include "asm/rel/d/a/d_a_midna/d_a_midna/__dt__12J3DFrameCtrlFv.s"
}
@@ -1247,14 +923,16 @@ asm void daMidna_c::create() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm cXyz::~cXyz() {
+// asm cXyz::~cXyz() {
+extern "C" asm void __dt__4cXyzFv() {
nofralloc
#include "asm/rel/d/a/d_a_midna/d_a_midna/__dt__4cXyzFv.s"
}
#pragma pop
/* 804BD8F4-804BD8F8 001754 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */
-cXyz::cXyz() {
+// cXyz::cXyz() {
+extern "C" asm void __ct__4cXyzFv() {
/* empty function */
}
diff --git a/rel/d/a/d_a_tbox/d_a_tbox.cpp b/rel/d/a/d_a_tbox/d_a_tbox.cpp
index 020b381764..5621b02f0b 100644
--- a/rel/d/a/d_a_tbox/d_a_tbox.cpp
+++ b/rel/d/a/d_a_tbox/d_a_tbox.cpp
@@ -3,7 +3,6 @@
// Translation Unit: d_a_tbox
//
-#include "rel/d/a/d_a_tbox/d_a_tbox.h"
#include "d/cc/d_cc_d.h"
#include "dol2asm.h"
diff --git a/rel/d/a/d_a_tbox/d_a_tbox_NONMATCHING.cpp b/rel/d/a/d_a_tbox/d_a_tbox_NONMATCHING.cpp
new file mode 100644
index 0000000000..7375d34e2e
--- /dev/null
+++ b/rel/d/a/d_a_tbox/d_a_tbox_NONMATCHING.cpp
@@ -0,0 +1,1727 @@
+//
+// Generated By: dol2asm
+// Translation Unit: d_a_tbox
+//
+
+#include "rel/d/a/d_a_tbox/d_a_tbox.h"
+#include "SSystem/SComponent/c_math.h"
+#include "JSystem/JKernel/JKRHeap.h"
+#include "d/com/d_com_inf_game.h"
+#include "d/bg/d_bg_w.h"
+#include "d/a/d_a_player.h"
+#include "d/d_path.h"
+#include "d/d_stage.h"
+#include "d/d_tresure.h"
+#include "d/d_item_data.h"
+#include "f_op/f_op_actor.h"
+#include "f_pc/f_pc_base.h"
+#include "rel/d/a/d_a_midna/d_a_midna.h"
+#include "d/d_procname.h"
+
+/* 804961D4-804961EC 000000 0018+00 16/16 0/0 0/0 .rodata l_cull_size_box */
+static f32 const l_cull_size_box[6] = { -150.0f, -10.0f, -150.0f, 150.0f, 300.0f, 100.0f };
+
+/* 804961EC-80496228 000018 003C+00 1/2 0/0 0/0 .rodata l_cyl_info */
+static cM3dGCylS const l_cyl_info[3] = {
+ { 0.0f, 0.0f, -40.0f, 40.0f, 60.0f },
+ { 0.0f, 0.0f, -60.0f, 50.0f, 70.0f },
+ { 0.0f, 0.0f, -60.0f, 70.0f, 80.0f },
+};
+
+/* 80496494-804964A0 000000 000C+00 4/4 0/0 0/0 .data cNullVec__6Z2Calc */
+static u8 cNullVec__6Z2Calc[12] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+/* 804964A0-804964B4 00000C 0004+10 0/0 0/0 0/0 .data @1787 */
+static u32 lit_1787[1 + 4 /* padding */] = {
+ 0x02000201,
+ /* padding */
+ 0x40080000,
+ 0x00000000,
+ 0x3FE00000,
+ 0x00000000,
+};
+
+/* 804964B4-804964B8 -00001 0004+00 2/4 0/0 0/0 .data l_staff_name */
+static char* l_staff_name = "TREASURE";
+
+/* 804964B8-804964FC 000024 0044+00 1/1 0/0 0/0 .data l_cyl_src */
+static dCcD_SrcCyl l_cyl_src = {
+ {
+ {0x0, {{0x0, 0x0, 0x1e}, {0x0, 0x0}, 0x79}}, // mObj
+ {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
+ {dCcD_SE_METAL, 0x2, 0x0, 0x0, 0x3}, // mGObjTg
+ {0x0}, // mGObjCo
+ }, // mObjInf
+ {
+ {0.0f, 0.0f, 0.0f}, // mCenter
+ 0.0f, // mRadius
+ 0.0f // mHeight
+ } // mCyl
+};
+
+/* 804964FC-80496550 -00001 0054+00 1/1 0/0 0/0 .data l_modelInfo */
+static daTbox_ModelInfo l_modelInfo[3] = {
+ { "Dalways", 12, 7, 25, 26, 14, 19 },
+ { "Dalways", 13, 8, 27, 28, 14, 19 },
+ { "BoxC", 14, 8, 20, 21, 11, 17 },
+};
+
+/* 804968E4-804968F0 000054 000C+00 2/3 0/0 0/0 .bss l_light_offset */
+static cXyz l_light_offset(0.0f, 35.0f, 0.0f);
+
+/* 80490D2C-80490DCC 0000EC 00A0+00 1/1 0/0 0/0 .text __ct__12daTbox_HIO_cFv */
+daTbox_HIO_c::daTbox_HIO_c() {
+ mItemNo = 1;
+ mUseDebugItemNo = 0;
+ mGravity = -2.0f;
+ mDemoType = 0;
+ mTimerDisplay = 0;
+ mCheckDisplay = 0;
+ mClearSwitch = 0;
+ mSaveOff = 0;
+ mDebugLightColorEnabled = 0;
+ mLightColorR = 0;
+ mLightColorG = 0;
+ mLightColorB = 0;
+ mLightOffset = l_light_offset;
+ mLightPower = 70.0f;
+ mFluctuationRate = 0.3f;
+ mFluctuationSpeed = 7500;
+ mEnvColorInfluence = 0.55f;
+ mForPlacementCheck = 0;
+}
+
+/* 80490E50-80490E6C 000210 001C+00 6/6 0/0 0/0 .text getModelInfo__8daTbox_cFv */
+daTbox_ModelInfo* daTbox_c::getModelInfo() {
+ return &l_modelInfo[getShapeType()];
+}
+
+/* ############################################################################################## */
+/* 80496238-80496244 000064 000C+00 0/1 0/0 0/0 .rodata l_open_se_id */
+static u32 const l_open_se_id[3] = { 0x8001f, 0x80020, 0x80022 };
+
+/* 80490E6C-80491170 00022C 0304+00 1/1 0/0 0/0 .text commonShapeSet__8daTbox_cFv */
+cPhs__Step daTbox_c::commonShapeSet() {
+ daTbox_ModelInfo* model_info = getModelInfo();
+ J3DModelData* model_data =
+ (J3DModelData*)dComIfG_getObjectRes(model_info->mArcName, model_info->mModelResNo);
+ mpAnm = new mDoExt_bckAnm();
+ if (mpAnm == NULL) {
+ return cPhs_ERROR_e;
+ }
+ J3DAnmTransform* bck_anm_transform =
+ (J3DAnmTransform*)dComIfG_getObjectRes(model_info->mArcName, model_info->mBckResNo);
+ if (!mpAnm->init(bck_anm_transform, 1, 0, 1.0f, 0, -1, false)) {
+ return cPhs_ERROR_e;
+ }
+ mOpenSeId = l_open_se_id[getShapeType()];
+ u32 model_flag = 0x80000;
+ if (getShapeType() == SHAPE_BOSSKEY) {
+ model_flag = 0;
+ }
+ mpModel = mDoExt_J3DModel__create(model_data, model_flag, 0x11000084);
+ if (mpModel == NULL) {
+ return cPhs_ERROR_e;
+ }
+ if (!strcmp(dComIfGp_getStartStageName(), "D_MN01B")) { // Deku Toad chest
+ J3DModelData* model_data2 =
+ (J3DModelData*)dComIfG_getObjectRes("Dalways", 15);
+ mpSlimeModel = mDoExt_J3DModel__create(model_data2, 0x80000, 0x11000084);
+ if (mpSlimeModel == NULL) {
+ return cPhs_ERROR_e;
+ }
+ }
+ if (checkAppear()) {
+ J3DModelData* eff_model_data =
+ (J3DModelData*)dComIfG_getObjectRes(model_info->mArcName, model_info->mEffectResNo);
+ mpEffectModel = mDoExt_J3DModel__create(eff_model_data, 0x80000, 0x11000084);
+ if (mpEffectModel == NULL) {
+ return cPhs_ERROR_e;
+ }
+ mpEffectAnm = new mDoExt_brkAnm();
+ if (mpEffectAnm == NULL) {
+ return cPhs_ERROR_e;
+ }
+ J3DAnmTevRegKey* brk_data =
+ (J3DAnmTevRegKey*)dComIfG_getObjectRes(model_info->mArcName, model_info->mBrkResNo);
+ if (!mpEffectAnm->init(eff_model_data, brk_data, 1, 0, 0.0f, 0, -1)) {
+ return cPhs_ERROR_e;
+ }
+ }
+ mpModel->setBaseScale(mScale);
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(orig.angle.y);
+ mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get());
+ if (mpEffectModel != NULL) {
+ mpEffectModel->i_setBaseTRMtx(mDoMtx_stack_c::get());
+ }
+ mDoMtx_copy(mDoMtx_stack_c::get(), mBgMtx);
+ return cPhs_COMPLEATE_e;
+}
+
+/* 804911B8-804911C0 000578 0008+00 1/1 0/0 0/0 .text effectShapeSet__8daTbox_cFv */
+cPhs__Step daTbox_c::effectShapeSet() {
+ return cPhs_COMPLEATE_e;
+}
+
+/* 804911C0-804911C8 000580 0008+00 1/1 0/0 0/0 .text envShapeSet__8daTbox_cFv */
+cPhs__Step daTbox_c::envShapeSet() {
+ return cPhs_COMPLEATE_e;
+}
+
+/* 804911C8-8049129C 000588 00D4+00 1/1 0/0 0/0 .text bgCheckSet__8daTbox_cFv */
+cPhs__Step daTbox_c::bgCheckSet() {
+ daTbox_ModelInfo* model_info = getModelInfo();
+ cBgD_t* cbgd = (cBgD_t*)dComIfG_getObjectRes(model_info->mArcName, model_info->mOpenDzbResNo);
+ mpOpenBgW = new dBgW();
+ if (mpOpenBgW == NULL) {
+ return cPhs_ERROR_e;
+ }
+ if (mpOpenBgW->Set(cbgd, 1, &mBgMtx) == 1) {
+ return cPhs_ERROR_e;
+ }
+ mpOpenBgW->SetCrrFunc(dBgS_MoveBGProc_TypicalRotY);
+ mpOpenBgW->Move();
+ mpBgCollider = NULL;
+ return cPhs_COMPLEATE_e;
+}
+
+/* 8049129C-804912EC 00065C 0050+00 1/1 0/0 0/0 .text lightReady__8daTbox_cFv */
+void daTbox_c::lightReady() {
+ setLightPos();
+ mLight.mColor.r = 0;
+ mLight.mColor.g = 0;
+ mLight.mColor.b = 0;
+ mLight.mPow = 0.0f;
+ mLight.mFluctuation = 0.0f;
+ mAllcolRatio = 0.0f;
+}
+
+/* 804912EC-8049135C 0006AC 0070+00 2/2 0/0 0/0 .text setLightPos__8daTbox_cFv */
+void daTbox_c::setLightPos() {
+ cXyz offset = *(cXyz*)&l_light_offset; // temp workaround
+ cXyz pos;
+ cLib_offsetPos(&pos, &current.pos, current.angle.y, &offset);
+ mLight.mPosition.set(pos.x, pos.y, pos.z);
+}
+
+/* 8049135C-80491364 00071C 0008+00 2/2 0/0 0/0 .text checkEnv__8daTbox_cFv */
+int daTbox_c::checkEnv() {
+ return true;
+}
+
+/* 80491364-8049139C 000724 0038+00 2/2 0/0 0/0 .text checkAppear__8daTbox_cFv */
+int daTbox_c::checkAppear() {
+ if (getFuncType() == 2 || (getSwType() == 15 && getFuncType() == 1)) {
+ return true;
+ }
+ return false;
+}
+
+/* 8049139C-804913D0 00075C 0034+00 4/4 0/0 0/0 .text checkOpen__8daTbox_cFv */
+int daTbox_c::checkOpen() {
+ return dComIfGs_isTbox(getTboxNo());
+}
+
+/* 804913D0-8049141C 000790 004C+00 3/3 0/0 0/0 .text clrDzb__8daTbox_cFv */
+void daTbox_c::clrDzb() {
+ if (mpBgCollider != NULL) {
+ dComIfG_Bgsp().Release(mpBgCollider);
+ mpBgCollider = NULL;
+ }
+}
+
+/* 8049141C-80491484 0007DC 0068+00 6/6 0/0 0/0 .text setDzb__8daTbox_cFv */
+void daTbox_c::setDzb() {
+ clrDzb();
+ if (checkOpen()) {
+ mpBgCollider = mpOpenBgW;
+ } else {
+ mpBgCollider = mpBgW;
+ }
+ dComIfG_Bgsp().Regist(mpBgCollider, this);
+}
+
+/* 80491484-80491544 000844 00C0+00 1/1 0/0 0/0 .text surfaceProc__8daTbox_cFv */
+void daTbox_c::surfaceProc() {
+ if (mpBgCollider != NULL && flagCheck(0x20)) {
+ if (field_0x750 < -1.0f) {
+ field_0x750 += 1.0f;
+ } else {
+ flagOff(0x20);
+ field_0x750 = 0.0f;
+ }
+ mDoMtx_stack_c::transS(current.pos.x, current.pos.y + field_0x750, current.pos.z);
+ mDoMtx_stack_c::YrotM(orig.angle.y);
+ mDoMtx_copy(mDoMtx_stack_c::get(), mBgMtx);
+ mpBgCollider->Move();
+ }
+}
+
+/* 80491544-804915BC 000904 0078+00 1/1 0/0 0/0 .text checkNormal__8daTbox_cFv */
+int daTbox_c::checkNormal() {
+ int func_type = getFuncType();
+ if (func_type == 0 || func_type == 6 || func_type == 5 || func_type == 3) {
+ return true;
+ }
+ if (getSwNo() >= 0xc0) {
+ return false;
+ }
+ if (dComIfGs_isSwitch(getSwNo(), fopAcM_GetRoomNo(this))) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/* 804915BC-80491624 00097C 0068+00 2/2 0/0 0/0 .text checkEnvEffectTbox__8daTbox_cFv */
+int daTbox_c::checkEnvEffectTbox() {
+ if (getShapeType() == SHAPE_SMALL) {
+ return false;
+ }
+ if (getItemNo() == 0x40 || getItemNo() == 0x23 || getItemNo() == 0x24) {
+ return true;
+ }
+ if (getShapeType() == SHAPE_BOSSKEY) {
+ return true;
+ }
+ return dItem_data::chkFlag(getItemNo(), 0x40);
+}
+
+/* 80491624-804916A4 0009E4 0080+00 1/1 0/0 0/0 .text calcHeapSize__8daTbox_cFv */
+u32 daTbox_c::calcHeapSize() {
+ int shape_type = getShapeType();
+ checkOpen();
+ checkAppear();
+ u32 heap_size = 0;
+ switch (shape_type) {
+ case SHAPE_SMALL:
+ heap_size = 0x1840;
+ break;
+ case SHAPE_LARGE:
+ heap_size = 0x2040;
+ break;
+ case SHAPE_BOSSKEY:
+ heap_size = 0x3060;
+ break;
+ }
+ return heap_size;
+}
+
+/* 804916A4-80491744 000A64 00A0+00 1/0 0/0 0/0 .text CreateHeap__8daTbox_cFv */
+int daTbox_c::CreateHeap() {
+ cPhs__Step step = commonShapeSet();
+ if (step != cPhs_COMPLEATE_e) {
+ return false;
+ }
+ if (checkEnv()) {
+ step = envShapeSet();
+ if (step != cPhs_COMPLEATE_e) {
+ return false;
+ }
+ }
+ if (!checkOpen()) {
+ step = effectShapeSet();
+ if (step != cPhs_COMPLEATE_e) {
+ return false;
+ }
+ }
+ step = bgCheckSet();
+ if (step != cPhs_COMPLEATE_e) {
+ return false;
+ }
+ return true;
+}
+
+/* 80491744-804919B0 000B04 026C+00 1/1 0/0 0/0 .text CreateInit__8daTbox_cFv */
+void daTbox_c::CreateInit() {
+ int func_type = getFuncType();
+ flagClr();
+ mpAnm->setPlaySpeed(0.0f);
+ initPos();
+ initAnm();
+ shape_angle.z = 0;
+ shape_angle.x = 0;
+ current.angle.z = 0;
+ current.angle.x = 0;
+
+ mStts.Init(0xff, 0xff, this);
+ mCyl.Set(l_cyl_src);
+ mCyl.SetStts(&mStts);
+ ((cM3dGCyl*)&mCyl)->Set(l_cyl_info[getShapeType()]);
+
+ if (mpBgW != NULL) {
+ dComIfG_Bgsp().Release(mpBgW);
+ }
+ if (flagCheck(2)) {
+ clrDzb();
+ } else if (mpBgCollider == NULL) {
+ setDzb();
+ }
+
+ if (func_type == 5 || func_type == 6 || field_0x9cc == 1) {
+ mAcchCir.SetWall(500.0f, 0.0f);
+ mAcch.Set(&current.pos, &next.pos, this, 1, &mAcchCir,
+ &speed, &current.angle, &shape_angle);
+ mGravity = -2.0f;
+ field_0x97d = true;
+ field_0x97c = true;
+ } else if (func_type == 3) {
+ mAcchCir.SetWall(500.0f, 0.0f);
+ mAcch.Set(&current.pos, &next.pos, this, 1, &mAcchCir, &speed, NULL, NULL);
+ }
+
+ mTboxNo = getTboxNo();
+ mEventId = i_dComIfGp_getEventManager().getEventIdx(this, getEvent());
+
+ if (getShapeType() == SHAPE_BOSSKEY) {
+ mEvtInfo.setArchiveName(getModelInfo()->mArcName);
+ field_0x984 = i_dComIfGp_getEventManager().getEventIdx(this, "DEFAULT_TREASURE_BOSS", 0xff);
+ }
+
+ initBaseMtx();
+ lightReady();
+ mAllcolRatio = 1.0f;
+ fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
+ fopAcM_setCullSizeBox(this, l_cull_size_box[0], l_cull_size_box[1], l_cull_size_box[2],
+ l_cull_size_box[3], l_cull_size_box[4], l_cull_size_box[5]);
+}
+
+/* 804919B0-80491BB0 000D70 0200+00 1/1 0/0 0/0 .text initPos__8daTbox_cFv */
+void daTbox_c::initPos() {
+ int func_type = getFuncType();
+ if ((func_type == 6 && getSwType() == 15) || func_type == 7) {
+ dPath* path = dPath_GetRoomPath(getPathId(), -1);
+ if (dComIfGs_isSwitch(getSwNo(), fopAcM_GetRoomNo(this))) {
+ dStage_dPnt_c* pnt = &path->m_points[path->m_num - 1];
+ current.pos = pnt->m_position;
+ orig.pos = pnt->m_position;
+ }
+ } else if (func_type == 6 && getSwType() == 0 && checkDrop()) {
+ cXyz pos;
+ calcJumpGoalAndAngle(&pos, &current.angle.y);
+ current.pos = pos;
+ orig.pos = pos;
+ getDropSAngle(&orig.angle.y);
+ }
+ cXyz vec1 = orig.pos;
+ cXyz vec2 = orig.pos;
+ vec1.y += 5.0f;
+ vec2.y -= 30.0f;
+ bool line_check = fopAcM_lc_c::lineCheck(&vec1, &vec2, this);
+ if ((line_check && fopAcM_lc_c::checkMoveBG()) || (!line_check && func_type != 3)) {
+ field_0x9cc = 1;
+ mMode = MODE_EXEC_WAIT;
+ } else {
+ field_0x9cc = 0;
+ mMode = MODE_EXEC;
+ }
+}
+
+/* 80491BB0-80491F68 000F70 03B8+00 1/1 0/0 0/0 .text initAnm__8daTbox_cFv */
+void daTbox_c::initAnm() {
+ int func_type = getFuncType();
+ if (checkOpen()) {
+ mpAnm->setFrame(mpAnm->getEndFrame());
+ if (func_type == 3) {
+ cXyz pos = current.pos;
+ if (fopAcM_gc_c::gndCheck(&pos)) {
+ current.pos.y = fopAcM_gc_c::getGroundY();
+ shape_angle.z = 0;
+ shape_angle.x = 0;
+ }
+ orig.pos = current.pos;
+ mAttentionInfo.mPosition = current.pos;
+ mEyePos = current.pos;
+ }
+ setAction(&actionWait);
+ int tbox_no = getTboxNo();
+ dTres_c::offStatus(0, tbox_no, 1);
+ } else if (!checkEnv()) {
+ setAction(&actionOpenWait);
+ } else if (checkNormal()) {
+ if (func_type == 6 && !checkDrop()) {
+ setAction(&actionDropWait);
+ } else if (func_type == 3) {
+ if (i_fopAcM_isSwitch(this, getSwNo())) {
+ cXyz pos = current.pos;
+ if (fopAcM_gc_c::gndCheck(&pos)) {
+ current.pos.y = fopAcM_gc_c::getGroundY();
+ shape_angle.z = 0;
+ shape_angle.x = 0;
+ }
+ orig.pos = current.pos;
+ mAttentionInfo.mPosition = current.pos;
+ mEyePos = current.pos;
+ setAction(&actionOpenWait);
+ } else {
+ setAction(&actionDropWaitForWeb);
+ flagOn(2);
+ field_0x9fd = 1;
+ }
+ } else if (func_type == 0) {
+ setAction(&actionOpenWait);
+ } else {
+ setAction(&actionOpenWait);
+ }
+ int tbox_no = getTboxNo();
+ dTres_c::onStatus(0, tbox_no, 1);
+ } else {
+ int tbox_no = getTboxNo();
+ dTres_c::offStatus(0, tbox_no, 1);
+ switch (func_type) {
+ case 2:
+ setAction(&actionGenocide);
+ mTimer = 65;
+ flagOn(3);
+ field_0x75a = 120;
+ break;
+ case 1:
+ if (getSwType() == 15) {
+ setAction(&actionSwOnWait);
+ } else {
+ setAction(&actionSwOnWait2);
+ }
+ field_0x75a = 120;
+ flagOn(3);
+ break;
+ }
+ }
+}
+
+/* 80491F68-804920A8 001328 0140+00 1/1 0/0 0/0 .text boxCheck__8daTbox_cFv */
+int daTbox_c::boxCheck() {
+ daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
+ if (!strcmp(dComIfGp_getStartStageName(), "R_SP01") && fopAcM_GetRoomNo(this) == 7 &&
+ player->getKandelaarFlamePos() == NULL) {
+ return false;
+ }
+ cXyz vec = player->mAttentionInfo.mPosition - current.pos;
+ f32 dist2_xz = vec.abs2XZ();
+ f32 dist_y = fabsf(player->current.pos.y - current.pos.y);
+ if (dist2_xz < 22500.0f && fopAcM_seenPlayerAngleY(this) < 0x2000 &&
+ fopAcM_seenActorAngleY(player, this) < 0x2000 && dist_y < 20.0f) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/* 804920A8-8049216C 001468 00C4+00 1/1 0/0 0/0 .text demoProcOpen__8daTbox_cFv */
+void daTbox_c::demoProcOpen() {
+ if (mDemoFrame < 1000) {
+ mDemoFrame++;
+ }
+ if (mDemoFrame == 0x98) {
+ dKy_efplight_cut(&mLight);
+ } else if (mDemoFrame > 0x70) {
+ lightDownProc();
+ } else if (mDemoFrame > 2) {
+ lightUpProc();
+ }
+ if (mDemoFrame > 0x16) {
+ mLight.mPow = cM_ssin(mDemoFrame * 7500) * 21.0f + 70.0f;
+ }
+ lightColorProc();
+ environmentProc();
+}
+
+/* 8049216C-8049233C 00152C 01D0+00 1/1 0/0 0/0 .text lightColorProc__8daTbox_cFv */
+// very badly nonmatching
+void daTbox_c::lightColorProc() {
+ static s32 const key_frame[7] = {0x00, 0x07, 0x1e, 0x25, 0x2c, 0x5c, 0x8c};
+ static GXColorS10 const key_color[7] = {
+ {0x00, 0x00, 0x00, 0xff},
+ {0xff, 0xc3, 0x8a, 0xff},
+ {0xff, 0xc3, 0x8a, 0xff},
+ {0x37, 0x34, 0x24, 0xff},
+ {0xff, 0xc3, 0x8a, 0xff},
+ {0xff, 0xc3, 0x8a, 0xff},
+ {0x00, 0x00, 0x00, 0xff},
+ };
+ s32 next_key_frame, prev_key_frame, next_key_index, prev_key_index;
+ if (mDemoFrame < 0x8c) {
+ for (prev_key_index = 0; prev_key_index < 7; prev_key_index++) {
+ if (key_frame[prev_key_index] <= mDemoFrame && key_frame[prev_key_index + 1] > mDemoFrame) {
+ next_key_frame = key_frame[prev_key_index + 1];
+ prev_key_frame = key_frame[prev_key_index];
+ next_key_index = prev_key_index + 1;
+ break;
+ }
+ }
+ u32 num_frames = next_key_frame - prev_key_frame;
+ s16 step_r = fabs(key_color[prev_key_index + 1].r - key_color[prev_key_index].r) / num_frames;
+ s16 step_g = fabs(key_color[prev_key_index + 1].g - key_color[prev_key_index].g) / num_frames;
+ s16 step_b = fabs(key_color[prev_key_index + 1].b - key_color[prev_key_index].b) / num_frames;
+ cLib_chaseS(&mLight.mColor.r, key_color[next_key_index].r, step_r + 1);
+ cLib_chaseS(&mLight.mColor.g, key_color[next_key_index].g, step_g + 1);
+ cLib_chaseS(&mLight.mColor.b, key_color[next_key_index].b, step_b + 1);
+ }
+}
+
+/* 8049233C-80492398 0016FC 005C+00 1/1 0/0 0/0 .text environmentProc__8daTbox_cFv */
+void daTbox_c::environmentProc() {
+ if (mDemoFrame > 0x8b) {
+ cLib_addCalc(&mAllcolRatio, 1.0f, 0.05f, 0.1f, 0.05f);
+ } else if (mDemoFrame > 0xa9) {
+ mAllcolRatio = 1.0f;
+ }
+}
+
+/* 80492398-804923D4 001758 003C+00 1/1 0/0 0/0 .text lightUpProc__8daTbox_cFv */
+void daTbox_c::lightUpProc() {
+ cLib_addCalc(&mLight.mPow, 70.0f, 0.05f, 5.0f, 1.0f);
+}
+
+/* 804923D4-80492408 001794 0034+00 1/1 0/0 0/0 .text lightDownProc__8daTbox_cFv */
+void daTbox_c::lightDownProc() {
+ cLib_addCalc0(&mLight.mPow, 0.05f, 5.0f);
+}
+
+/* 80492408-80492450 0017C8 0048+00 2/2 0/0 0/0 .text dropProcInitCall__8daTbox_cFv */
+void daTbox_c::dropProcInitCall() {
+ switch (getSwType()) {
+ case 0:
+ dropProcInit2();
+ break;
+ case 15:
+ dropProcInit();
+ break;
+ }
+}
+
+/* 80492450-804928DC 001810 048C+00 1/1 0/0 0/0 .text dropProcInit__8daTbox_cFv */
+void daTbox_c::dropProcInit() {
+ dPath* path = dPath_GetRoomPath(getPathId(), -1);
+ cXyz pos = current.pos;
+ cXyz pnt1 = path->m_points[1].m_position;
+ cXyz pnt2;
+ f32 temp;
+ if (path->m_num == 2) {
+ field_0x97c = false;
+ f32 delta_y = pos.y - pnt1.y;
+ f32 abs_gravity = fabsf(fopAcM_GetGravity(this));
+ temp = JMAFastSqrt(2.0f * delta_y / abs_gravity);
+ speedF = pos.absXZ(pnt1) / temp;
+ setRotAxis(&pos, &pnt1);
+ } else if (path->m_num == 3) {
+ pnt2 = path->m_points[2].m_position;
+ f32 delta_y1 = pos.y - pnt2.y;
+ f32 delta_y2 = pnt1.y - pos.y;
+ f32 abs_gravity = fabsf(fopAcM_GetGravity(this));
+ f32 dist_xz = pos.absXZ(pnt2);
+ speedF = dist_xz * JMAFastSqrt(abs_gravity) /
+ (JMAFastSqrt(2.0f * delta_y2) + JMAFastSqrt(2.0f * (delta_y1 + delta_y2)));
+ speed.y = JMAFastSqrt(2.0f * abs_gravity * delta_y2);
+ setRotAxis(&pos, &pnt1);
+ temp = JMAFastSqrt(2.0f / abs_gravity) *
+ (JMAFastSqrt(delta_y1) + JMAFastSqrt(delta_y1 + delta_y2));
+ }
+ field_0x9c8 = temp / 19.0f;
+}
+
+/* 804928DC-80492B10 001C9C 0234+00 2/2 0/0 0/0 .text calcJumpGoalAndAngle__8daTbox_cFP4cXyzPs */
+int daTbox_c::calcJumpGoalAndAngle(cXyz* i_pos, s16* i_angle) {
+ dPath* path = dPath_GetRoomPath(getPathId(), -1);
+ if (path != NULL) {
+ cXyz vec1 = current.pos;
+ cXyz vec2 = path->m_points[1].m_position;
+ f32 dist_xz = vec1.absXZ(vec2);
+ s16 angle;
+ getDropSAngle(&angle);
+ cXyz vec3(0.0f, 0.0f, dist_xz);
+ mDoMtx_stack_c::YrotS(angle);
+ mDoMtx_stack_c::multVec(&vec3, &vec3);
+ vec3 += vec1;
+ vec3.y = vec2.y;
+ *i_pos = vec3;
+ *i_angle = angle;
+ return true;
+ }
+ return false;
+}
+
+/* 80492B10-80492BC8 001ED0 00B8+00 4/4 0/0 0/0 .text getDropSAngle__8daTbox_cFPs */
+bool daTbox_c::getDropSAngle(s16* i_angle) {
+ if (getFuncType() == 6 && getSwType() == 0 && getDir() != 0) {
+ *i_angle = cM_deg2s((getDir() - 1) * 24 + 12);
+ return true;
+ }
+ return false;
+}
+
+/* 80492BC8-80492C84 001F88 00BC+00 1/1 0/0 0/0 .text getDir__8daTbox_cFv */
+int daTbox_c::getDir() {
+ if (getSwType() == 15) {
+ if (dComIfGs_isSwitch(getSwNo(), fopAcM_GetRoomNo(this))) {
+ return 1;
+ } else {
+ return 0;
+ }
+ } else {
+ u16 bit = 1;
+ u16 dir = 0;
+ for (int i = 0; i < 4; i++) {
+ if (i_fopAcM_isSwitch(this, getSwNo() + i)) {
+ dir += bit;
+ }
+ bit = bit << 1;
+ }
+ return dir;
+ }
+}
+
+/* 80492C84-80492D08 002044 0084+00 2/2 0/0 0/0 .text setRotAxis__8daTbox_cFPC4cXyzPC4cXyz */
+void daTbox_c::setRotAxis(cXyz const* i_pos, cXyz const* i_goalPos) {
+ mRotAxis = *i_goalPos - *i_pos;
+ mRotAxis.y = 0.0f;
+ mDoMtx_stack_c::YrotS(0x4000);
+ mDoMtx_stack_c::multVec(&mRotAxis, &mRotAxis);
+}
+
+/* 80492D08-80492F50 0020C8 0248+00 1/1 0/0 0/0 .text dropProcInit2__8daTbox_cFv */
+void daTbox_c::dropProcInit2() {
+ cXyz goal_pos;
+ if (!calcJumpGoalAndAngle(&goal_pos, &current.angle.y)) {
+ OSReport_Error("ジャンプ宝箱:ジャンプ先の取得に失敗しました!\n");
+ }
+ dPath* path = dPath_GetRoomPath(getPathId(), -1);
+ f32 temp;
+ if (path->m_num == 2) {
+ cXyz vec1 = current.pos;
+ cXyz vec2 = path->m_points[1].m_position;
+ field_0x97c = false;
+ f32 delta_y = vec1.y - vec2.y;
+ f32 abs_gravity = fabsf(fopAcM_GetGravity(this));
+ temp = JMAFastSqrt(2.0f * delta_y / abs_gravity);
+ speedF = vec1.absXZ(vec2) / temp;
+ setRotAxis(&vec1, &goal_pos);
+ }
+ field_0x9c8 = temp / 19.0f;
+}
+
+/* 80492F50-804932C0 002310 0370+00 2/2 0/0 0/0 .text dropProc__8daTbox_cFv */
+// needs ~dBgS_ObjGngChk to be inlined
+void daTbox_c::dropProc() {
+ if (field_0x9c8 != 0) {
+ s16 temp = field_0x9c6;
+ field_0x9c4 = 3400;
+ field_0x9c6 += field_0x9c4;
+ if (temp < 0 && field_0x9c6 > 0) {
+ field_0x9c8--;
+ }
+ } else if (field_0x9c8 == 0) {
+ field_0x9c4 = 0;
+ mDoMtx_identity(field_0x988);
+ }
+
+ if (mAcch.ChkGroundLanding() && field_0x97d) {
+ field_0x9c8 = 0;
+ field_0x9c4 = 0;
+ mDoMtx_identity(field_0x988);
+ speedF = 0.0f;
+ cXyz vec1(2.0f, 2.0f, 2.0f);
+ s32 room_no = fopAcM_GetRoomNo(this);
+ dComIfGp_particle_setPolyColor(0xe7, mAcch.m_gnd, &current.pos, &mTevStr, &orig.angle,
+ &vec1, 0, NULL, room_no, NULL);
+ dComIfGp_getVibration().StartShock(4, 0x1f, cXyz(0.0f, 1.0f, 0.0f));
+ u32 sound_id = 0;
+ cXyz vec2 = current.pos;
+ vec2.y += 10.0f;
+ dBgS_ObjGndChk gnd_chk;
+ gnd_chk.SetPos(&vec2);
+ gnd_chk.SetActorPid(mBase.mBsPcId);
+ dComIfG_Bgsp().GroundCross(&gnd_chk);
+ int bg_index = gnd_chk.GetBgIndex();
+ if (bg_index >= 0 && bg_index < 0x100) {
+ sound_id = dComIfG_Bgsp().GetMtrlSndId(&gnd_chk);
+ }
+ mDoAud_seStart(0x8002f, &mEyePos, sound_id, dComIfGp_getReverb(orig.roomNo));
+ }
+ if (orig.pos.abs(current.pos) > 400.0f) {
+ field_0x97c = true;
+ field_0x97d = true;
+ }
+}
+
+/* 80493338-80493484 0026F8 014C+00 1/1 0/0 0/0 .text demoInitAppear__8daTbox_cFv */
+void daTbox_c::demoInitAppear() {
+ mpEffectAnm->setFrame(0.0f);
+ mpEffectAnm->setPlaySpeed(1.0f);
+ cXyz vec1(current.pos.x, current.pos.y + 55.0f, current.pos.z);
+ csXyz vec2 = orig.angle;
+ static u16 const eff_id[6] = {0x8840, 0x8841, 0x8842, 0x8843, 0x8844, 0x8845};
+ for (u32 i = 0; i < 6; i++) {
+ dComIfGp_particle_set(eff_id[i], &vec1, &vec2, &mScale, 0xff, NULL, -1, NULL, NULL, NULL);
+ }
+ flagOff(0x40);
+ flagOn(1);
+ fopAcM_seStart(this, 0x801fd, 0);
+}
+
+/* 80493484-80493518 002844 0094+00 1/1 0/0 0/0 .text demoProcAppear__8daTbox_cFv */
+void daTbox_c::demoProcAppear() {
+ if (field_0x75a != 0) {
+ field_0x75a--;
+ }
+ if (mpEffectAnm->getFrame() == 110.0f) {
+ flagOff(1);
+ }
+ if (mpEffectAnm->play()) {
+ mpEffectAnm->setPlaySpeed(0.0f);
+ dComIfGp_evmng_cutEnd(mStaffId);
+ }
+}
+
+/* 80493518-80493838 0028D8 0320+00 7/7 0/0 0/0 .text demoProc__8daTbox_cFv */
+int daTbox_c::demoProc() {
+ static char* action_table[] = {"WAIT", "OPEN", "APPEAR", "OPEN_SHORT", "DROP"};
+ int act_idx = dComIfGp_evmng_getMyActIdx(mStaffId, action_table, 5, 0, 0);
+ int tbox_no;
+ if (dComIfGp_evmng_getIsAddvance(mStaffId)) {
+ field_0x758 = false;
+ switch (act_idx) {
+ case 1:
+ OpenInit();
+ tbox_no = getTboxNo();
+ dTres_c::offStatus(0, tbox_no, 1);
+ break;
+ case 2:
+ flagOn(0x20);
+ field_0x750 = -130.0f;
+ setDzb();
+ flagOff(2);
+ tbox_no = getTboxNo();
+ dTres_c::onStatus(0, tbox_no, 1);
+ demoInitAppear();
+ break;
+ case 3:
+ OpenInit_com();
+ tbox_no = getTboxNo();
+ dTres_c::offStatus(0, tbox_no, 1);
+ break;
+ case 4:
+ field_0x9ca = 7;
+ }
+ }
+ switch (act_idx) {
+ case 2:
+ demoProcAppear();
+ surfaceProc();
+ break;
+ case 1:
+ if (field_0x758) {
+ dComIfGp_evmng_cutEnd(mStaffId);
+ } else {
+ if (field_0x97e != 0) {
+ mpAnm->setFrame(daPy_getPlayerActorClass()->getBaseAnimeFrame());
+ }
+ mpAnm->play();
+ if (mpAnm->getFrameCtrl()->checkState(1)) {
+ field_0x758 = true;
+ dComIfGp_evmng_cutEnd(mStaffId);
+ }
+ }
+ field_0x97e++;
+ break;
+ case 3:
+ if (field_0x758) {
+ dComIfGp_evmng_cutEnd(mStaffId);
+ } else {
+ if (field_0x97e != 0) {
+ mpAnm->setFrame(daPy_getPlayerActorClass()->getBaseAnimeFrame());
+ }
+ mpAnm->play();
+ if (mpAnm->getFrameCtrl()->checkState(1)) {
+ field_0x758 = true;
+ dComIfGp_evmng_cutEnd(mStaffId);
+ }
+ }
+ field_0x97e++;
+ break;
+ case 4:
+ if (field_0x9ca > -2) {
+ field_0x9ca--;
+ }
+ if (field_0x9ca == 0) {
+ dropProcInitCall();
+ } else if (field_0x9ca < 0) {
+ dropProc();
+ if (mAcch.ChkGroundHit() && field_0x97d) {
+ dComIfGp_evmng_cutEnd(mStaffId);
+ }
+ }
+ break;
+ default:
+ dComIfGp_evmng_cutEnd(mStaffId);
+ break;
+ }
+ if (flagCheck(0x10)) {
+ demoProcOpen();
+ }
+ if (flagCheck(8)) {
+ dKy_set_allcol_ratio(mAllcolRatio);
+ }
+ return false;
+}
+
+/* 80493838-804939A4 002BF8 016C+00 2/2 0/0 0/0 .text OpenInit_com__8daTbox_cFv */
+void daTbox_c::OpenInit_com() {
+ field_0x97e = 0;
+ if (!field_0x718) {
+ dComIfGs_onTbox(getTboxNo());
+ setDzb();
+ if (mpBgCollider != NULL) {
+ mpBgCollider->Move();
+ }
+ }
+ if (checkEnvEffectTbox()) {
+ mAllcolRatio = 0.55f;
+ dKy_set_allcol_ratio(mAllcolRatio);
+ flagOn(8);
+ dKy_efplight_set(&mLight);
+ if (getShapeType() == SHAPE_LARGE) {
+ J3DAnmTransform* bck =
+ (J3DAnmTransform*)dComIfG_getObjectRes(getModelInfo()->mArcName, 9);
+ mpAnm->init(bck, 1, 0, 1.0f, 0, bck->getFrameMax(), true);
+ mOpenSeId = 0x80021;
+ }
+ }
+ mpAnm->setPlaySpeed(0.0f);
+ fopAcM_seStart(this, mOpenSeId, 0);
+}
+
+/* 804939A4-804939F4 002D64 0050+00 1/1 0/0 0/0 .text OpenInit__8daTbox_cFv */
+void daTbox_c::OpenInit() {
+ OpenInit_com();
+ field_0x759 = 1;
+ mDemoFrame = 0;
+ flagOn(0x10);
+ setLightPos();
+}
+
+/* 804939F4-804939FC 002DB4 0008+00 2/0 0/0 0/0 .text actionWait__8daTbox_cFv */
+int daTbox_c::actionWait() {
+ return true;
+}
+
+/* 804939FC-80493CC8 002DBC 02CC+00 1/0 0/0 0/0 .text actionDemo__8daTbox_cFv */
+int daTbox_c::actionDemo() {
+ if (dComIfGp_evmng_endCheck(mEvtInfo.getEventId())) {
+ if (field_0x718) {
+ mpAnm->setPlaySpeed(0.0f);
+ mpAnm->setFrame(0.0f);
+ setAction(&actionOpenWait);
+ } else {
+ setAction(&actionWait);
+ }
+ i_dComIfGp_event_reset();
+ dKy_set_allcol_ratio(1.0f);
+ flagOff(0x18);
+ dComIfGp_event_setItemPartner(NULL);
+ int item_no = getItemNo();
+ if (item_no == 0x21) {
+ if (!strcmp(dComIfGp_getStartStageName(), "F_SP121")) {
+ if (fopAcM_GetRoomNo(this) == 0) {
+ switch (getTboxNo()) {
+ case 3:
+ dComIfGs_setEventReg(0xedff, i_dComIfGs_getEventReg(0xedff) | 0x40);
+ break;
+ case 2:
+ dComIfGs_setEventReg(0xebff, i_dComIfGs_getEventReg(0xebff) | 0x10);
+ break;
+ default:
+ OSReport_Error("ハートの欠片:想定外の配置です。イベントビットセットできませんでした!\n");
+ break;
+ }
+ } else if (fopAcM_GetRoomNo(this) == 3) {
+ switch (getTboxNo()) {
+ case 5:
+ dComIfGs_setEventReg(0xf0ff, i_dComIfGs_getEventReg(0xf0ff) | 0x80);
+ break;
+ default:
+ OSReport_Error("ハートの欠片:想定外の配置です。イベントビットセットできませんでした!\n");
+ break;
+ }
+ }
+ } else if (!strcmp(dComIfGp_getStartStageName(), "F_SP109")) {
+ if (fopAcM_GetRoomNo(this) == 0 && getTboxNo() == 0x15) {
+ dComIfGs_setEventReg(0xefff, i_dComIfGs_getEventReg(0xefff) | 0x10);
+ }
+ }
+ }
+ } else {
+ demoProc();
+ }
+ field_0x9f4++;
+ return true;
+}
+
+/* 80493CC8-80493D90 003088 00C8+00 2/0 0/0 0/0 .text actionDemo2__8daTbox_cFv */
+int daTbox_c::actionDemo2() {
+ if ((getEvent() == 0xff && dComIfGp_evmng_endCheck("DEFAULT_TREASURE_APPEAR")) ||
+ (getEvent() != 0xff && dComIfGp_evmng_endCheck(mEventId))) {
+ setAction(&actionOpenWait);
+ i_dComIfGp_event_reset();
+ } else {
+ demoProc();
+ }
+ return true;
+}
+
+/* 80493D90-80493ED8 003150 0148+00 2/0 0/0 0/0 .text actionDropDemo__8daTbox_cFv */
+int daTbox_c::actionDropDemo() {
+ if (mEventId != -1) {
+ if (dComIfGp_evmng_endCheck(mEventId)) {
+ setAction(&actionOpenWait);
+ i_dComIfGp_event_reset();
+ setDzb();
+ orig.pos = current.pos;
+ if (field_0x9c9 != 0) {
+ camera_class* camera = dComIfGp_getCamera(i_dComIfGp_getPlayerCameraID(0));
+ camera->mCamera.Start();
+ camera->mCamera.SetTrimSize(0);
+ field_0x9c9 = 0;
+ }
+ } else {
+ demoProc();
+ }
+ } else {
+ dropProc();
+ if (mAcch.ChkGroundLanding() && field_0x97d) {
+ setAction(&actionOpenWait);
+ orig.pos = current.pos;
+ }
+ }
+ return true;
+}
+
+/* 80493ED8-80493FE8 003298 0110+00 5/3 0/0 0/0 .text getBombItemNo__8daTbox_cFUcUc */
+u8 daTbox_c::getBombItemNo(u8 i_bombType, u8 i_slot) {
+ u8 item_no = i_slot;
+ switch (i_bombType) {
+ case 0x70:
+ switch (i_slot) {
+ case 0x16:
+ case 0x19:
+ case 0x1a:
+ case 0x1c:
+ item_no = 0xa;
+ break;
+ case 0x17:
+ case 0x1b:
+ item_no = 0xb;
+ break;
+ case 0x18:
+ item_no = 0xc;
+ break;
+ case 0x1d:
+ item_no = 0xd;
+ break;
+ }
+ break;
+ case 0x71:
+ switch (i_slot) {
+ case 0x1c:
+ case 0x1d:
+ item_no = 0x19;
+ break;
+ case 0xa:
+ case 0x1a:
+ item_no = 0x16;
+ break;
+ case 0xb:
+ case 0x1b:
+ item_no = 0x17;
+ break;
+ case 0xc:
+ case 0xd:
+ item_no = 0x18;
+ break;
+ }
+ break;
+ case 0x72:
+ switch (i_slot) {
+ case 0x19:
+ item_no = 0x1c;
+ break;
+ case 0xa:
+ case 0x16:
+ item_no = 0x1a;
+ break;
+ case 0xb:
+ case 0xc:
+ case 0xd:
+ case 0x17:
+ case 0x18:
+ item_no = 0x1b;
+ break;
+ }
+ break;
+ case 0x50:
+ break;
+ }
+ return item_no;
+}
+
+/* 80493FE8-80494144 0033A8 015C+00 1/1 0/0 0/0 .text getBombItemNo2__8daTbox_cFUcUcUc */
+u8 daTbox_c::getBombItemNo2(u8 i_bombType1, u8 i_bombType2, u8 i_slot) {
+ u8 temp, item_no = i_slot;
+ switch (i_slot) {
+ case 0xa:
+ case 0xb:
+ case 0xc:
+ case 0xd:
+ temp = 0x70;
+ break;
+ case 0x16:
+ case 0x17:
+ case 0x18:
+ case 0x19:
+ temp = 0x71;
+ break;
+ case 0x1a:
+ case 0x1b:
+ case 0x1c:
+ case 0x1d:
+ temp = 0x72;
+ break;
+ }
+
+ if (i_bombType1 != temp && i_bombType2 != temp && i_bombType1 != 0x50 && i_bombType2 != 0x50) {
+ switch (temp) {
+ case 0x70:
+ if (i_bombType1 == 0x71 || i_bombType2 == 0x71) {
+ item_no = getBombItemNo(0x71, i_slot);
+ } else {
+ item_no = getBombItemNo(0x72, i_slot);
+ }
+ break;
+ case 0x71:
+ if (i_bombType1 == 0x70 || i_bombType2 == 0x70) {
+ item_no = getBombItemNo(0x70, i_slot);
+ } else {
+ item_no = getBombItemNo(0x72, i_slot);
+ }
+ break;
+ case 0x72:
+ if (i_bombType1 == 0x70 || i_bombType2 == 0x70) {
+ item_no = getBombItemNo(0x70, i_slot);
+ } else {
+ item_no = getBombItemNo(0x71, i_slot);
+ }
+ break;
+ }
+ }
+ return item_no;
+}
+
+/* 80494144-804942CC 003504 0188+00 1/1 0/0 0/0 .text getBombItemNo3__8daTbox_cFUcUcUcUc
+ */
+u8 daTbox_c::getBombItemNo3(u8 i_bombType1, u8 i_bombType2, u8 i_bombType3, u8 i_slot) {
+ u8 temp, item_no = i_slot;
+ switch (i_slot) {
+ case 0xa:
+ case 0xb:
+ case 0xc:
+ case 0xd:
+ temp = 0x70;
+ break;
+ case 0x16:
+ case 0x17:
+ case 0x18:
+ case 0x19:
+ temp = 0x71;
+ break;
+ case 0x1a:
+ case 0x1b:
+ case 0x1c:
+ case 0x1d:
+ temp = 0x72;
+ break;
+ }
+
+ if (i_bombType1 != temp && i_bombType2 != temp && i_bombType3 != temp &&
+ i_bombType1 != 0x50 && i_bombType2 != 0x50 && i_bombType3 != 0x50) {
+ switch (temp) {
+ case 0x70:
+ if (i_bombType1 == 0x71 || i_bombType2 == 0x71 || i_bombType3 == 0x71) {
+ item_no = getBombItemNo(0x71, i_slot);
+ } else {
+ item_no = getBombItemNo(0x72, i_slot);
+ }
+ break;
+ case 0x71:
+ if (i_bombType1 == 0x70 || i_bombType2 == 0x70 || i_bombType3 == 0x70) {
+ item_no = getBombItemNo(0x70, i_slot);
+ } else {
+ item_no = getBombItemNo(0x72, i_slot);
+ }
+ break;
+ case 0x72:
+ if (i_bombType1 == 0x70 || i_bombType2 == 0x70 || i_bombType3 == 0x70) {
+ item_no = getBombItemNo(0x70, i_slot);
+ } else {
+ item_no = getBombItemNo(0x71, i_slot);
+ }
+ break;
+ }
+ }
+ return item_no;
+}
+
+/* 804942CC-804945C8 00368C 02FC+00 1/1 0/0 0/0 .text getBombItemNoMain__8daTbox_cFUc */
+// nonmatching
+u8 daTbox_c::getBombItemNoMain(u8 i_slot) {
+ u8 bomb_type[3], bomb_max[3], bomb_num[3], bomb_count;
+ for (int i = 0; i < 3; i++) {
+ bomb_type[i] = dComIfGs_getItem(0xf + i, false);
+ bomb_max[i] = dComIfGs_getBombMax(bomb_type[i]);
+ bomb_num[i] = dComIfGs_getBombNum(i);
+ if (bomb_type[i] != 0xff) {
+ bomb_count++;
+ }
+ }
+
+ u8 item_no = i_slot;
+ switch (bomb_count) {
+ case 0:
+ break;
+ case 1:
+ item_no = getBombItemNo(bomb_type[0], i_slot);
+ break;
+ case 2:
+ if (bomb_num[0] == bomb_max[0] && bomb_max[0] != 0) {
+ if (bomb_num[1] != bomb_max[1] || bomb_max[1] == 0) {
+ item_no = getBombItemNo(bomb_type[1], i_slot);
+ }
+ } else if (bomb_num[1] == bomb_max[1] && bomb_max[1] != 0) {
+ item_no = getBombItemNo(bomb_type[0], i_slot);
+ } else {
+ item_no = getBombItemNo2(bomb_type[0], bomb_type[1], i_slot);
+ }
+ break;
+ case 3:
+ if (bomb_num[0] == bomb_max[0] && bomb_max[0] != 0) {
+ if (bomb_num[1] == bomb_max[1] && bomb_max[1] != 0) {
+ if (bomb_num[2] != bomb_max[2] || bomb_max[2] == 0) {
+ item_no = getBombItemNo(bomb_type[2], i_slot);
+ }
+ } else if (bomb_num[2] == bomb_max[2] && bomb_max[2] != 0) {
+ item_no = getBombItemNo(bomb_type[1], i_slot);
+ } else {
+ item_no = getBombItemNo2(bomb_type[1], bomb_type[2], i_slot);
+ }
+ } else if (bomb_num[1] == bomb_max[1] && bomb_max[1] != 0) {
+ if (bomb_num[2] == bomb_max[2] && bomb_max[2] != 0) {
+ item_no = getBombItemNo(bomb_type[0], i_slot);
+ } else {
+ item_no = getBombItemNo2(bomb_type[0], bomb_type[2], i_slot);
+ }
+ } else if (bomb_num[2] == bomb_max[2] && bomb_max[2] != 0) {
+ item_no = getBombItemNo2(bomb_type[0], bomb_type[1], i_slot);
+ } else {
+ item_no = getBombItemNo3(bomb_type[0], bomb_type[1], bomb_type[2], i_slot);
+ }
+ break;
+ }
+ return item_no;
+}
+
+/* 804945C8-804946A4 003988 00DC+00 1/1 0/0 0/0 .text setGetDemoItem__8daTbox_cFv */
+int daTbox_c::setGetDemoItem() {
+ u8 item_no = getItemNo();
+ if ((u8)(item_no - 0xa) <= 3 || (u8)(item_no - 0x16) <= 0x6 || item_no == 0x1d) {
+ item_no = getBombItemNoMain(item_no);
+ }
+
+ u32 item_id;
+ if (field_0x718) {
+ item_id = fopAcM_createItemForPresentDemo(&current.pos, item_no, 1, -1, -1, NULL, NULL);
+ } else {
+ item_id = fopAcM_createItemForTrBoxDemo(&current.pos, item_no, -1, -1, NULL, NULL);
+ }
+
+ if (item_id != -1) {
+ dComIfGp_event_setItemPartnerId(item_id);
+ }
+ return true;
+}
+
+/* 804946A4-804948CC 003A64 0228+00 11/0 0/0 0/0 .text actionOpenWait__8daTbox_cFv */
+// nonmatching (regalloc)
+int daTbox_c::actionOpenWait() {
+ daMidna_c* midna = daPy_py_c::getMidnaActor();
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ if (mEvtInfo.i_checkCommandDoor()) {
+ dComIfGp_event_onEventFlag(4);
+ if (getShapeType() != SHAPE_SMALL && player->i_checkNowWolf() &&
+ !midna->checkMetamorphoseEnable()) {
+ setAction(&actionNotOpenDemo);
+ mStaffId = i_dComIfGp_evmng_getMyStaffId(l_staff_name, 0, 0);
+ demoProc();
+ field_0x9f4 = 0;
+ } else {
+ field_0x718 = player->checkTreasureRupeeReturn(getItemNo());
+ setGetDemoItem();
+ setAction(&actionDemo);
+ mStaffId = i_dComIfGp_evmng_getMyStaffId(l_staff_name, 0, 0);
+ demoProc();
+ field_0x9f4 = 0;
+ }
+ } else if (boxCheck()) {
+ mEvtInfo.i_onCondition(4);
+ if (getShapeType() == SHAPE_SMALL) {
+ mEvtInfo.setEventName("DEFAULT_TREASURE_SIMPLE");
+ } else if (player->i_checkNowWolf() && !midna->checkMetamorphoseEnable()) {
+ mEvtInfo.setEventName("DEFAULT_TREASURE_NOTOPEN");
+ } else if (getShapeType() == SHAPE_BOSSKEY) {
+ mEvtInfo.setEventId(field_0x984);
+ } else if (checkEnvEffectTbox()) {
+ mEvtInfo.setEventName("DEFAULT_TREASURE_EFFECT");
+ } else {
+ mEvtInfo.setEventName("DEFAULT_TREASURE_NORMAL");
+ }
+ }
+ return true;
+}
+
+/* 804948CC-80494950 003C8C 0084+00 1/0 0/0 0/0 .text actionNotOpenDemo__8daTbox_cFv */
+int daTbox_c::actionNotOpenDemo() {
+ if (dComIfGp_evmng_endCheck(mEventId)) {
+ setAction(&actionOpenWait);
+ i_dComIfGp_event_reset();
+ } else {
+ demoProc();
+ }
+ return true;
+}
+
+/* 80494950-80494A0C 003D10 00BC+00 3/3 0/0 0/0 .text checkDrop__8daTbox_cFv */
+int daTbox_c::checkDrop() {
+ if (getSwType() == 15) {
+ if (dComIfGs_isSwitch(getSwNo(), fopAcM_GetRoomNo(this))) {
+ return true;
+ }
+ } else if (getSwType() == 0) {
+ for (int i = 0; i < 4; i++) {
+ if (i_fopAcM_isSwitch(this, getSwNo() + i)) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+/* 80494A0C-80494D88 003DCC 037C+00 1/1 0/0 0/0 .text settingDropDemoCamera__8daTbox_cFv
+ */
+// nonmatching (regalloc)
+void daTbox_c::settingDropDemoCamera() {
+ camera_class* player_camera = dComIfGp_getCamera(i_dComIfGp_getPlayerCameraID(0));
+ player_camera->mCamera.Stop();
+ dStage_MapEvent_dt_c* event_data =
+ dEvt_control_c::searchMapEventData(getEvent(), fopAcM_GetRoomNo(this));
+ player_camera->mCamera.SetTrimSize(event_data->field_0x1);
+ dStage_roomStatus_c* room_status = dComIfGp_roomControl_getStatusRoomDt(fopAcM_GetRoomNo(this));
+ stage_camera_class* stage_camera = room_status->mRoomDt.getCamera();
+ stage_camera2_data_class* stage_camera_data = &stage_camera->mEntries[event_data->field_0x16];
+ stage_arrow_class* stage_arrow = room_status->mRoomDt.getArrow();
+ stage_arrow_data_class* stage_arrow_data =
+ &stage_arrow->mEntries[stage_camera_data->field_0x10];
+ cXyz vec1, vec2, vec4, vec3, vec5, vec6;
+ vec1.x = stage_arrow_data->mPosition.x;
+ vec1.z = stage_arrow_data->mPosition.z;
+ vec2.x = orig.pos.x;
+ vec2.z = orig.pos.z;
+ f32 dist_xz = vec1.abs(vec2);
+ vec3 = cXyz::BaseY;
+ s16 angle;
+ getDropSAngle(&angle);
+ vec4.x = stage_arrow_data->mPosition.x;
+ vec4.y = 0.0f;
+ vec4.z = stage_arrow_data->mPosition.z;
+ vec4 -= orig.pos;
+ Mtx mtx;
+ PSMTXRotAxisRad(mtx, &vec3, cM_s2rad(angle));
+ mDoMtx_multVec(mtx, &vec4, &vec4);
+ vec4 += orig.pos;
+ vec4.y = stage_arrow_data->mPosition.y;
+ vec5 = vec4;
+ vec6 = orig.pos;
+ s16 arrow_angle = stage_arrow_data->mAngle.x;
+ f32 dist = dist_xz * (cM_ssin(arrow_angle) / cM_scos(arrow_angle));
+ if (arrow_angle > 0) {
+ dist = -dist;
+ }
+ vec6.y = vec5.y + dist;
+ player_camera->mCamera.Set(vec6, vec5, 0, (f32)stage_camera_data->field_0x11);
+ field_0x9c9 = 1;
+}
+
+/* 80494D88-80494E98 004148 0110+00 1/0 0/0 0/0 .text actionSwOnWait__8daTbox_cFv */
+int daTbox_c::actionSwOnWait() {
+ if (mEvtInfo.i_checkCommandDemoAccrpt()) {
+ setAction(&actionDemo2);
+ mStaffId = i_dComIfGp_evmng_getMyStaffId(l_staff_name, NULL, 0);
+ demoProc();
+ } else if (dComIfGs_isSwitch(getSwNo(), fopAcM_GetRoomNo(this))) {
+ if (getEvent() == 0xff) {
+ fopAcM_orderOtherEvent(this, "DEFAULT_TREASURE_APPEAR", 0xffff, 1, 0);
+ } else {
+ fopAcM_orderOtherEventId(this, mEventId, getEvent(), 0xffff, 0, 1);
+ }
+ mEvtInfo.i_onCondition(2);
+ }
+ return true;
+}
+
+/* 80494E98-80494F44 004258 00AC+00 1/0 0/0 0/0 .text actionSwOnWait2__8daTbox_cFv */
+int daTbox_c::actionSwOnWait2() {
+ if (dComIfGs_isSwitch(getSwNo(), fopAcM_GetRoomNo(this))) {
+ setAction(&actionOpenWait);
+ setDzb();
+ flagOff(0x43);
+ int tbox_no = getTboxNo();
+ dTres_c::onStatus(0, tbox_no, 1);
+ } else {
+ flagOn(0x40);
+ }
+ return true;
+}
+
+/* 80494F44-80495058 004304 0114+00 1/0 0/0 0/0 .text actionDropWait__8daTbox_cFv */
+int daTbox_c::actionDropWait() {
+ if (mEvtInfo.i_checkCommandDemoAccrpt()) {
+ setAction(&actionDropDemo);
+ clrDzb();
+ field_0x97d = false;
+ mStaffId = i_dComIfGp_evmng_getMyStaffId(l_staff_name, NULL, 0);
+ if (getSwType() == 0) {
+ settingDropDemoCamera();
+ }
+ } else if (checkDrop()) {
+ if (mEventId != -1) {
+ fopAcM_orderOtherEventId(this, mEventId, getEvent(), 0xffff, 0, 1);
+ mEvtInfo.i_onCondition(2);
+ } else {
+ dropProcInitCall();
+ setAction(&actionDropDemo);
+ field_0x97d = false;
+ }
+ }
+ return true;
+}
+
+/* 80495058-8049518C 004418 0134+00 1/0 0/0 0/0 .text actionGenocide__8daTbox_cFv */
+int daTbox_c::actionGenocide() {
+ if (mEvtInfo.i_checkCommandDemoAccrpt()) {
+ setAction(&actionDemo2);
+ mStaffId = i_dComIfGp_evmng_getMyStaffId(l_staff_name, NULL, 0);
+ demoProc();
+ } else if (!fopAcM_myRoomSearchEnemy(fopAcM_GetRoomNo(this))) {
+ if (mTimer != 0) {
+ mTimer--;
+ } else {
+ if (getEvent() == 0xff) {
+ fopAcM_orderOtherEvent(this, "DEFAULT_TREASURE_APPEAR", 0xffff, 1, 0);
+ } else {
+ fopAcM_orderOtherEventId(this, mEventId, getEvent(), 0xffff, 0, 1);
+ }
+ mEvtInfo.i_onCondition(2);
+ dComIfGs_onSwitch(getSwNo(), fopAcM_GetRoomNo(this));
+ }
+ }
+ return true;
+}
+
+/* 8049518C-80495250 00454C 00C4+00 1/0 0/0 0/0 .text actionDropWaitForWeb__8daTbox_cFv
+ */
+int daTbox_c::actionDropWaitForWeb() {
+ if (field_0x9fd != 0) {
+ if (field_0x9fc != 0) {
+ field_0x9fd = 0;
+ return true;
+ }
+ } else {
+ if (field_0x9fc == 0) {
+ setAction(&actionDropForWeb);
+ shape_angle.z = 0;
+ shape_angle.x = 0;
+ fopAcM_SetGravity(this, -2.0f);
+ i_fopAcM_onSwitch(this, getSwNo());
+ }
+ }
+ setBaseMtx();
+ field_0x9fc = 0;
+ return true;
+}
+
+/* 80495250-804953D4 004610 0184+00 1/0 0/0 0/0 .text actionDropForWeb__8daTbox_cFv */
+int daTbox_c::actionDropForWeb() {
+ fopAcM_posMoveF(this, NULL);
+ mAcch.CrrPos(dComIfG_Bgsp());
+ orig.pos = current.pos;
+ mAttentionInfo.mPosition = current.pos;
+ mEyePos = current.pos;
+ setBaseMtx();
+ if (mAcch.ChkGroundLanding()) {
+ cXyz vec(2.0f, 2.0f, 2.0f);
+ s32 room_no = fopAcM_GetRoomNo(this);
+ dComIfGp_particle_setPolyColor(0xe7, mAcch.m_gnd, &current.pos, &mTevStr, &orig.angle,
+ &vec, 0, NULL, room_no, NULL);
+ dComIfGp_getVibration().StartShock(4, 0x1f, cXyz(0.0f, 1.0f, 0.0f));
+ setDzb();
+ if (mpBgCollider != NULL) {
+ mpBgCollider->Move();
+ }
+ setAction(&actionOpenWait);
+ }
+ dTres_c::setPosition(getTboxNo(), &current.pos);
+ return true;
+}
+
+/* 804953D4-80495490 004794 00BC+00 1/1 0/0 0/0 .text initBaseMtx__8daTbox_cFv */
+void daTbox_c::initBaseMtx() {
+ field_0x9c4 = 0;
+ mRotAxis = cXyz::BaseX;
+ mDoMtx_identity(field_0x988);
+ mpModel->setBaseScale(mScale);
+ if (mpSlimeModel != NULL) {
+ mpSlimeModel->setBaseScale(mScale);
+ }
+ setBaseMtx();
+ if (mpBgW != NULL) {
+ mpBgW->Move();
+ }
+ if (mpOpenBgW != NULL) {
+ mpOpenBgW->Move();
+ }
+}
+
+/* 80495490-80495660 004850 01D0+00 4/4 0/0 0/0 .text setBaseMtx__8daTbox_cFv */
+void daTbox_c::setBaseMtx() {
+ Mtx mtx;
+ if (field_0x9c4 == 0) {
+ mDoMtx_identity(mtx);
+ } else {
+ PSMTXRotAxisRad(mtx, &mRotAxis, cM_s2rad(field_0x9c4));
+ }
+ s16 angle;
+ if (getDropSAngle(&angle) && fabsf(speed.y) > 2.0f) {
+ cLib_addCalcAngleS(&orig.angle.y, angle, 10, 0xc00, 0x400);
+ shape_angle = orig.angle;
+ }
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::transM(0.0f, 50.0f, 0.0f);
+ mDoMtx_stack_c::concat(mtx);
+ mDoMtx_stack_c::concat(field_0x988);
+ mDoMtx_stack_c::ZXYrotM(shape_angle);
+ mDoMtx_stack_c::transM(0.0f, -50.0f, 0.0f);
+ if (field_0x9fc != 0) {
+ mpModel->i_setBaseTRMtx(field_0xa00);
+ } else {
+ mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get());
+ }
+ mDoMtx_concat(mtx, field_0x988, field_0x988);
+ mDoMtx_copy(mpModel->getBaseTRMtx(), mBgMtx);
+ if (mpSlimeModel != NULL) {
+ mDoMtx_stack_c::transS(current.pos.x, current.pos.y + 15.0f, current.pos.z);
+ mDoMtx_stack_c::ZXYrotM(shape_angle);
+ mpSlimeModel->i_setBaseTRMtx(mDoMtx_stack_c::get());
+ }
+}
+
+/* 804968FC-80496930 00006C 0034+00 0/1 0/0 0/0 .bss l_HIO */
+static daTbox_HIO_c l_HIO;
+
+/* 80495660-804956EC 004A20 008C+00 1/1 0/0 0/0 .text mode_proc_call__8daTbox_cFv */
+void daTbox_c::mode_proc_call() {
+ static daTbox_modeFn l_func[2] = {
+ &daTbox_c::mode_exec_wait,
+ &daTbox_c::mode_exec,
+ };
+ (this->*l_func[mMode])();
+}
+
+/* 804956EC-80495818 004AAC 012C+00 1/0 0/0 0/0 .text mode_exec_wait__8daTbox_cFv */
+void daTbox_c::mode_exec_wait() {
+ bool bvar1 = false;
+ if (field_0x9cc != 0) {
+ flagOn(0x40);
+ cXyz vec1(orig.pos);
+ cXyz vec2(orig.pos);
+ vec1.y += 5.0f;
+ vec2.y -= 30.0f;
+ if (fopAcM_lc_c::lineCheck(&vec1, &vec2, this) && fopAcM_lc_c::checkMoveBG()) {
+ bvar1 = true;
+ orig.pos = *fopAcM_lc_c::getCrossP();
+ current.pos = orig.pos;
+ }
+ }
+ if (bvar1) {
+ flagOff(0x40);
+ mMode = MODE_EXEC;
+ mode_exec();
+ }
+}
+
+/* 80495818-80495910 004BD8 00F8+00 2/1 0/0 0/0 .text mode_exec__8daTbox_cFv */
+void daTbox_c::mode_exec() {
+ action();
+ if (getFuncType() == 5 || getFuncType() == 6 || field_0x9cc == 1) {
+ fopAcM_posMoveF(this, NULL);
+ if (field_0x97c) {
+ mAcch.CrrPos(dComIfG_Bgsp());
+ } else {
+ mAcch.i_ClrGroundHit();
+ }
+ mAttentionInfo.mPosition = current.pos;
+ mEyePos = current.pos;
+ setBaseMtx();
+ if (mpBgCollider == mpOpenBgW) {
+ mpBgCollider->Move();
+ }
+ dTres_c::setPosition(getTboxNo(), &current.pos);
+ }
+}
+
+/* 80495910-804959EC 004CD0 00DC+00 1/1 0/0 0/0 .text create1st__8daTbox_cFv */
+cPhs__Step daTbox_c::create1st() {
+ if (!mParamsInit) {
+ field_0x980 = orig.angle.x;
+ field_0x982 = orig.angle.z;
+ orig.angle.z = 0;
+ orig.angle.x = 0;
+ mParamsInit = true;
+ }
+ daTbox_ModelInfo* model_info = getModelInfo();
+ cPhs__Step step = (cPhs__Step)dComIfG_resLoad(&mPhase, model_info->mArcName);
+ if (step != cPhs_COMPLEATE_e) {
+ return step;
+ }
+ step = (cPhs__Step)MoveBGCreate(model_info->mArcName, model_info->mClosedDzbResNo,
+ dBgS_MoveBGProc_TypicalRotY, calcHeapSize(), NULL);
+ if (step == cPhs_ERROR_e) {
+ return step;
+ }
+ CreateInit();
+ mAttentionInfo.mFlags = 0x40;
+ mAttentionInfo.mFlags |= 0x400000;
+ return step;
+}
+
+/* 804959EC-80495AF0 004DAC 0104+00 1/0 0/0 0/0 .text Execute__8daTbox_cFPPA3_A4_f */
+int daTbox_c::Execute(f32 (**param_0)[3][4]) {
+ mode_proc_call();
+ *param_0 = &mBgMtx;
+ cXyz center(l_cyl_info[getShapeType()].mCenter);
+ mDoMtx_stack_c::YrotS(shape_angle.y);
+ mDoMtx_stack_c::multVec(&center, &center);
+ center += current.pos;
+ if ((getSwNo() != 0xff && i_fopAcM_isSwitch(this, getSwNo())) || getSwNo() == 0xff) {
+ mCyl.SetC(center);
+ dComIfG_Ccsp()->Set(&mCyl);
+ }
+ return true;
+}
+
+/* 80495AF0-80495C9C 004EB0 01AC+00 1/0 0/0 0/0 .text Draw__8daTbox_cFv */
+int daTbox_c::Draw() {
+ if (flagCheck(0x40)) {
+ return true;
+ }
+ g_env_light.settingTevStruct(0x10, &current.pos, &mTevStr);
+ if (mpEffectModel != NULL && mpEffectAnm->getPlaySpeed() != 0.0f) {
+ g_env_light.setLightTevColorType_MAJI(mpEffectModel, &mTevStr);
+ mpEffectAnm->entry(mpEffectModel->getModelData());
+ mDoExt_modelUpdateDL(mpEffectModel);
+ mDoExt_brkAnmRemove(mpEffectModel->getModelData());
+ }
+ if (flagCheck(1)) {
+ return true;
+ }
+ g_env_light.setLightTevColorType_MAJI(mpModel, &mTevStr);
+ if (mpSlimeModel != NULL) {
+ dComIfGd_setXluListBG();
+ mDoExt_modelUpdateDL(mpSlimeModel);
+ dComIfGd_setList();
+ }
+ mpAnm->entry(mpModel->getModelData());
+ if (getShapeType() == SHAPE_BOSSKEY) {
+ fopAcM_setEffectMtx(this, mpModel->getModelData());
+ }
+ dComIfGd_setListBG();
+ mDoExt_modelUpdateDL(mpModel);
+ dComIfGd_setList();
+ return true;
+}
+
+/* 80495C9C-80495CFC 00505C 0060+00 1/0 0/0 0/0 .text Delete__8daTbox_cFv */
+int daTbox_c::Delete() {
+ if (mpBgCollider != NULL) {
+ dComIfG_Bgsp().Release(mpBgCollider);
+ }
+ dComIfG_resDelete(&mPhase, getModelInfo()->mArcName);
+ return true;
+}
+
+/* 80495CFC-80495E38 0050BC 013C+00 1/0 0/0 0/0 .text daTbox_create1st__FP8daTbox_c */
+cPhs__Step daTbox_create1st(daTbox_c* i_this) {
+ fopAcM_SetupActor(i_this, daTbox_c);
+ return i_this->create1st();
+}
+
+/* 80496004-80496024 0053C4 0020+00 1/0 0/0 0/0 .text daTbox_MoveBGDelete__FP8daTbox_c */
+static void daTbox_MoveBGDelete(daTbox_c* i_this) {
+ i_this->MoveBGDelete();
+}
+
+/* 80496024-80496044 0053E4 0020+00 1/0 0/0 0/0 .text daTbox_MoveBGExecute__FP8daTbox_c
+ */
+static void daTbox_MoveBGExecute(daTbox_c* i_this) {
+ i_this->MoveBGExecute();
+}
+
+/* 80496044-80496070 005404 002C+00 1/0 0/0 0/0 .text daTbox_MoveBGDraw__FP8daTbox_c */
+static void daTbox_MoveBGDraw(daTbox_c* i_this) {
+ i_this->MoveBGDraw();
+}
+
+/* 804961B0-804961B8 005570 0008+00 1/0 0/0 0/0 .text Create__8daTbox_cFv */
+int daTbox_c::Create() {
+ return true;
+}
+
+/* 804961B8-804961C0 005578 0008+00 1/0 0/0 0/0 .text checkSmallTbox__8daTbox_cFv */
+bool daTbox_c::checkSmallTbox() {
+ return true;
+}
+
+/* 80496730-80496750 -00001 0020+00 1/0 0/0 0/0 .data daTbox_METHODS */
+static actor_method_class daTbox_METHODS = {
+ (process_method_func)daTbox_create1st,
+ (process_method_func)daTbox_MoveBGDelete,
+ (process_method_func)daTbox_MoveBGExecute,
+ NULL,
+ (process_method_func)daTbox_MoveBGDraw,
+};
+
+/* 80496750-80496780 -00001 0030+00 0/0 0/0 1/0 .data g_profile_TBOX */
+extern actor_process_profile_definition g_profile_TBOX = {
+ fpcLy_CURRENT_e,
+ 4,
+ fpcPi_CURRENT_e,
+ PROC_TBOX,
+ &g_fpcLf_Method.mBase,
+ sizeof(daTbox_c),
+ 0,
+ 0,
+ &g_fopAc_Method.base,
+ 0x10c,
+ &daTbox_METHODS,
+ 0x44100,
+ fopAc_ACTOR_e,
+ fopAc_CULLBOX_CUSTOM_e,
+};
diff --git a/rel/d/a/tag/d_a_tag_mhint/d_a_tag_mhint.cpp b/rel/d/a/tag/d_a_tag_mhint/d_a_tag_mhint.cpp
index 9a6c0356b2..3246285c1e 100644
--- a/rel/d/a/tag/d_a_tag_mhint/d_a_tag_mhint.cpp
+++ b/rel/d/a/tag/d_a_tag_mhint/d_a_tag_mhint.cpp
@@ -4,8 +4,8 @@
//
#include "rel/d/a/tag/d_a_tag_mhint/d_a_tag_mhint.h"
+#include "rel/d/a/d_a_midna/d_a_midna.h"
#include "JSystem/JKernel/JKRHeap.h"
-#include "d/a/d_a_alink.h"
#include "d/a/d_a_npc.h"
#include "d/a/d_a_player.h"
#include "d/com/d_com_inf_game.h"
@@ -111,7 +111,7 @@ int daTagMhint_c::create() {
stage_arrow_data_class* arrow_data_p =
&dComIfGp_getRoomArrow(fopAcM_GetRoomNo(this))
->mEntries[dComIfGp_getRoomCamera(fopAcM_GetRoomNo(this))
- ->field_0x4[field_0x56d]
+ ->mEntries[field_0x56d]
.field_0x10];
mEyePos.set(arrow_data_p->mPosition.x, arrow_data_p->mPosition.y,
diff --git a/rel/d/a/tag/d_a_tag_mmsg/d_a_tag_mmsg.cpp b/rel/d/a/tag/d_a_tag_mmsg/d_a_tag_mmsg.cpp
index f5592ffea9..a116315aa3 100644
--- a/rel/d/a/tag/d_a_tag_mmsg/d_a_tag_mmsg.cpp
+++ b/rel/d/a/tag/d_a_tag_mmsg/d_a_tag_mmsg.cpp
@@ -34,7 +34,7 @@ int daTagMmsg_c::create() {
s32 roomNo = fopAcM_GetRoomNo(this);
cXyz* tmp =
&dComIfGp_getRoomArrow(roomNo)
- ->mEntries[dComIfGp_getRoomCamera(roomNo)->field_0x4[mAttention].field_0x10]
+ ->mEntries[dComIfGp_getRoomCamera(roomNo)->mEntries[mAttention].field_0x10]
.mPosition;
mEyePos.set(tmp->x, tmp->y, tmp->z);
mAttentionInfo.mPosition = mEyePos;
diff --git a/rel/d/a/tag/d_a_tag_mstop/d_a_tag_mstop.cpp b/rel/d/a/tag/d_a_tag_mstop/d_a_tag_mstop.cpp
index b2ebef0dce..9d8085993e 100644
--- a/rel/d/a/tag/d_a_tag_mstop/d_a_tag_mstop.cpp
+++ b/rel/d/a/tag/d_a_tag_mstop/d_a_tag_mstop.cpp
@@ -4,6 +4,7 @@
*/
#include "rel/d/a/tag/d_a_tag_mstop/d_a_tag_mstop.h"
+#include "rel/d/a/d_a_midna/d_a_midna.h"
#include "d/d_procname.h"
#include "dol2asm.h"
#include "dolphin/types.h"
diff --git a/rel/d/a/tag/d_a_tag_mwait/d_a_tag_mwait.cpp b/rel/d/a/tag/d_a_tag_mwait/d_a_tag_mwait.cpp
index 8b06eb0ebb..9c075030e5 100644
--- a/rel/d/a/tag/d_a_tag_mwait/d_a_tag_mwait.cpp
+++ b/rel/d/a/tag/d_a_tag_mwait/d_a_tag_mwait.cpp
@@ -4,8 +4,8 @@
*/
#include "rel/d/a/tag/d_a_tag_mwait/d_a_tag_mwait.h"
+#include "rel/d/a/d_a_midna/d_a_midna.h"
#include "JSystem/JKernel/JKRHeap.h"
-#include "d/a/d_a_alink.h"
#include "d/com/d_com_inf_game.h"
#include "d/d_procname.h"
diff --git a/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.cpp b/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.cpp
index 4f257ba63f..8be41d128a 100644
--- a/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.cpp
+++ b/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.cpp
@@ -4,9 +4,10 @@
//
#include "rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.h"
+#include "rel/d/a/d_a_midna/d_a_midna.h"
+#include "f_op/f_op_actor_mng.h"
#include "dol2asm.h"
#include "d/d_path.h"
-#include "d/a/d_a_alink.h"
#include "d/d_procname.h"
#include "JSystem/JKernel/JKRHeap.h"
diff --git a/src/d/a/d_a_alink.cpp b/src/d/a/d_a_alink.cpp
index 9cec30fce6..0885adcd19 100644
--- a/src/d/a/d_a_alink.cpp
+++ b/src/d/a/d_a_alink.cpp
@@ -27,6 +27,7 @@
#include "rel/d/a/tag/d_a_tag_magne/d_a_tag_magne.h"
#include "rel/d/a/tag/d_a_tag_mist/d_a_tag_mist.h"
#include "rel/d/a/d_a_mirror/d_a_mirror.h"
+#include "rel/d/a/d_a_midna/d_a_midna.h"
//
// Types:
diff --git a/src/d/a/d_a_player.cpp b/src/d/a/d_a_player.cpp
index eb848ea391..d7b2d6dbcc 100644
--- a/src/d/a/d_a_player.cpp
+++ b/src/d/a/d_a_player.cpp
@@ -10,6 +10,7 @@
#include "d/a/d_a_alink.h"
#include "f_op/f_op_actor_mng.h"
#include "m_Do/m_Do_lib.h"
+#include "rel/d/a/d_a_midna/d_a_midna.h"
#include "rel/d/a/d_a_boomerang/d_a_boomerang.h"
#include "rel/d/a/d_a_spinner/d_a_spinner.h"
diff --git a/src/d/bg/d_bg_s_acch.cpp b/src/d/bg/d_bg_s_acch.cpp
index 476f7f0e2b..f70c5cda3e 100644
--- a/src/d/bg/d_bg_s_acch.cpp
+++ b/src/d/bg/d_bg_s_acch.cpp
@@ -277,7 +277,7 @@ void dBgS_Acch::Set(cXyz* p_pos, cXyz* p_old_pos, fopAc_ac_c* p_actor, int table
pm_pos = p_pos;
pm_old_pos = p_old_pos;
m_my_ac = p_actor;
- setActorPid(fopAcM_GetID(p_actor));
+ SetActorPid(fopAcM_GetID(p_actor));
pm_speed = p_speed;
m_tbl_size = table_size;
field_0x8c = param_4;
@@ -292,7 +292,7 @@ void dBgS_Acch::Set(fopAc_ac_c* p_actor, int table_size, dBgS_AcchCir* param_2)
field_0x8c = param_2;
m_my_ac = p_actor;
- setActorPid(fopAcM_GetID(p_actor));
+ SetActorPid(fopAcM_GetID(p_actor));
pm_pos = &fopAcM_GetPosition_p(p_actor);
pm_old_pos = &fopAcM_GetOldPosition_p(p_actor);
pm_speed = &fopAcM_GetSpeed_p(p_actor);
@@ -335,7 +335,7 @@ void dBgS_Acch::GroundCheck(dBgS& param_0) {
dBgS_RoofChk tmpRoofChk;
data_80450F68 = 1;
}
- tmpRoofChk.setActorPid(m_gnd.GetActorPid());
+ tmpRoofChk.SetActorPid(m_gnd.GetActorPid());
tmpRoofChk.i_SetPos(*pm_pos);
f32 tmp = param_0.RoofChk(&tmpRoofChk);
if (grnd_pos.y > tmp) {
diff --git a/src/d/bg/d_bg_s_roof_chk.cpp b/src/d/bg/d_bg_s_roof_chk.cpp
index 2a0387ec65..db13db1670 100644
--- a/src/d/bg/d_bg_s_roof_chk.cpp
+++ b/src/d/bg/d_bg_s_roof_chk.cpp
@@ -12,7 +12,7 @@ dBgS_RoofChk::dBgS_RoofChk() {
m_pos.x = 0.0f;
m_pos.y = 0.0f;
m_pos.z = 0.0f;
- setActorPid(0xFFFFFFFF);
+ SetActorPid(0xFFFFFFFF);
field_0x48 = 0;
}
diff --git a/src/d/bg/d_bg_s_sph_chk.cpp b/src/d/bg/d_bg_s_sph_chk.cpp
index e92a7e70d0..7c9671a17c 100644
--- a/src/d/bg/d_bg_s_sph_chk.cpp
+++ b/src/d/bg/d_bg_s_sph_chk.cpp
@@ -9,7 +9,7 @@
dBgS_SphChk::dBgS_SphChk() {
SetPolyPassChk(GetPolyPassChkInfo());
SetGrpPassChk(GetGrpPassChkInfo());
- setActorPid(0xFFFFFFFF);
+ SetActorPid(0xFFFFFFFF);
ClearPi();
mCallback = NULL;
}
diff --git a/src/d/d_stage.cpp b/src/d/d_stage.cpp
index c3d6f0d846..d74a80721d 100644
--- a/src/d/d_stage.cpp
+++ b/src/d/d_stage.cpp
@@ -1998,7 +1998,7 @@ static int dStage_playerInit(dStage_dt_c* stageDt, void* i_data, int num, void*
static int dStage_cameraInit(dStage_dt_c* stageDt, void* i_data, int param_2, void* param_3) {
stage_camera_class* camera = (stage_camera_class*)((char*)i_data + 4);
stageDt->setCamera(camera);
- dStage_cameraCreate(camera->field_0x4, 0, 0);
+ dStage_cameraCreate(camera->mEntries, 0, 0);
return 1;
}
diff --git a/src/d/event/d_event.cpp b/src/d/event/d_event.cpp
index c163254836..792e350df2 100644
--- a/src/d/event/d_event.cpp
+++ b/src/d/event/d_event.cpp
@@ -12,6 +12,7 @@
#include "f_op/f_op_actor_mng.h"
#include "m_Do/m_Do_controller_pad.h"
#include "m_Do/m_Do_graphic.h"
+#include "rel/d/a/d_a_midna/d_a_midna.h"
#include "rel/d/a/tag/d_a_tag_mhint/d_a_tag_mhint.h"
#include "rel/d/a/tag/d_a_tag_mstop/d_a_tag_mstop.h"
diff --git a/src/d/msg/d_msg_flow.cpp b/src/d/msg/d_msg_flow.cpp
index 9fe27ed364..411417285d 100644
--- a/src/d/msg/d_msg_flow.cpp
+++ b/src/d/msg/d_msg_flow.cpp
@@ -14,6 +14,7 @@
#include "f_op/f_op_msg_mng.h"
#include "m_Do/m_Do_audio.h"
#include "m_Do/m_Do_graphic.h"
+#include "rel/d/a/d_a_midna/d_a_midna.h"
//
// Forward References: