From 30d9eaa052de1eda76bebfc88f679d6620b46160 Mon Sep 17 00:00:00 2001 From: Caroline Madsen <69010899+randomsalience@users.noreply.github.com> Date: Thu, 2 Nov 2023 13:35:31 -0400 Subject: [PATCH] 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 --- include/SSystem/SComponent/c_bg_s_chk.h | 2 +- include/d/a/d_a_alink.h | 254 --- include/d/bg/d_bg_s.h | 3 + include/d/com/d_com_inf_game.h | 16 + include/d/d_stage.h | 5 +- include/d/d_tresure.h | 4 + include/d/kankyo/d_kankyo.h | 3 + include/f_op/f_op_actor_mng.h | 24 +- include/m_Do/m_Do_ext.h | 1 + include/rel/d/a/d_a_midna/d_a_midna.h | 262 +++ include/rel/d/a/d_a_tbox/d_a_tbox.h | 207 ++ libs/SSystem/SComponent/c_bg_s_gnd_chk.cpp | 2 +- libs/SSystem/SComponent/c_bg_s_lin_chk.cpp | 4 +- rel/d/a/d_a_midna/d_a_midna.cpp | 334 +--- rel/d/a/d_a_tbox/d_a_tbox.cpp | 1 - rel/d/a/d_a_tbox/d_a_tbox_NONMATCHING.cpp | 1727 +++++++++++++++++ rel/d/a/tag/d_a_tag_mhint/d_a_tag_mhint.cpp | 4 +- rel/d/a/tag/d_a_tag_mmsg/d_a_tag_mmsg.cpp | 2 +- rel/d/a/tag/d_a_tag_mstop/d_a_tag_mstop.cpp | 1 + rel/d/a/tag/d_a_tag_mwait/d_a_tag_mwait.cpp | 2 +- rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.cpp | 3 +- src/d/a/d_a_alink.cpp | 1 + src/d/a/d_a_player.cpp | 1 + src/d/bg/d_bg_s_acch.cpp | 6 +- src/d/bg/d_bg_s_roof_chk.cpp | 2 +- src/d/bg/d_bg_s_sph_chk.cpp | 2 +- src/d/d_stage.cpp | 2 +- src/d/event/d_event.cpp | 1 + src/d/msg/d_msg_flow.cpp | 1 + 29 files changed, 2270 insertions(+), 607 deletions(-) create mode 100644 rel/d/a/d_a_tbox/d_a_tbox_NONMATCHING.cpp diff --git a/include/SSystem/SComponent/c_bg_s_chk.h b/include/SSystem/SComponent/c_bg_s_chk.h index 8367b50e25c..eacef20b801 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 f1a5ecfe43e..3a73feb8587 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 011ff553b98..2d9e1ccbb98 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 06d32de25b8..36050fe6f7f 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 0955bdf3164..b1943fc7fb6 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 78ac174efe3..04650bc038b 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 add7ddb20a3..b4c0ab2947b 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 2b36b5feff9..4835731cbfe 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 6c8215cabdf..05926d090e4 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 f9d21915652..9d65fc96004 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 70a00cfbefe..e58d779d21c 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 a9574b522e7..b70e43b0b12 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 104e060e00b..3ce90aae626 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 ae156ced4e2..fc5a14569ca 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 020b3817648..5621b02f0bf 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 00000000000..7375d34e2e0 --- /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, ¤t.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(¤t.pos, &next.pos, this, 1, &mAcchCir, + &speed, ¤t.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(¤t.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, ¤t.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, ¤t.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, ¤t.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(¤t.pos, item_no, 1, -1, -1, NULL, NULL); + } else { + item_id = fopAcM_createItemForTrBoxDemo(¤t.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, ¤t.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(), ¤t.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(), ¤t.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(¢er, ¢er); + 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, ¤t.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 9a6c0356b20..3246285c1e1 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 f5592ffea90..a116315aa32 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 b2ebef0dce3..9d8085993e9 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 8b06eb0ebb7..9c075030e5e 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 4f257ba63ff..8be41d128a1 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 9cec30fce64..0885adcd198 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 eb848ea3915..d7b2d6dbcc2 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 476f7f0e2bf..f70c5cda3ed 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 2a0387ec655..db13db1670e 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 e92a7e70d00..7c9671a17cd 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 c3d6f0d846d..d74a80721db 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 c1632548363..792e350df20 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 9fe27ed364c..411417285d1 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: