diff --git a/configure.py b/configure.py index fe22741cf48..26487e9bd30 100755 --- a/configure.py +++ b/configure.py @@ -1598,9 +1598,9 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_tag_spring"), ActorRel(MatchingFor("GZ2E01"), "d_a_tag_statue_evt"), ActorRel(NonMatching, "d_a_ykgr"), - ActorRel(NonMatching, "d_a_L7demo_dr"), - ActorRel(NonMatching, "d_a_L7low_dr"), - ActorRel(NonMatching, "d_a_L7op_demo_dr"), + ActorRel(MatchingFor("GZ2E01"), "d_a_L7demo_dr"), + ActorRel(MatchingFor("GZ2E01"), "d_a_L7low_dr"), + ActorRel(Equivalent, "d_a_L7op_demo_dr"), # weak func order ActorRel(MatchingFor("GZ2E01"), "d_a_b_bh"), ActorRel(NonMatching, "d_a_b_bq"), ActorRel(Equivalent, "d_a_b_dr"), # weak func order diff --git a/include/d/actor/d_a_L7demo_dr.h b/include/d/actor/d_a_L7demo_dr.h index 6477859f376..67f02b6e138 100644 --- a/include/d/actor/d_a_L7demo_dr.h +++ b/include/d/actor/d_a_L7demo_dr.h @@ -1,7 +1,6 @@ #ifndef D_A_L7DEMO_DR_H #define D_A_L7DEMO_DR_H -#include "dolphin/types.h" #include "f_op/f_op_actor_mng.h" /** @@ -14,23 +13,35 @@ */ class daDr_c : public fopAc_ac_c { public: - /* 805A9238 */ void setAction(void (daDr_c::*)()); + typedef void (daDr_c::*actionFn)(); + + /* 805A9238 */ void setAction(actionFn); /* 805A92DC */ void action(); /* 805A9304 */ void mtx_set(); - /* 805A93D4 */ void draw(); + /* 805A93D4 */ int draw(); /* 805A9478 */ void wait(); /* 805A963C */ void pl_walk(); /* 805A9914 */ void pl_turn(); /* 805A9A34 */ void bridge_destroy(); /* 805A9D10 */ void bridge_destroy2(); - /* 805A9EE4 */ void execute(); - /* 805A9FFC */ void _delete(); - /* 805AA084 */ void CreateHeap(); - /* 805AA19C */ void check_start(); - /* 805AA224 */ void create(); + /* 805A9EE4 */ int execute(); + /* 805A9FFC */ int _delete(); + /* 805AA084 */ int CreateHeap(); + /* 805AA19C */ BOOL check_start(); + /* 805AA224 */ int create(); -private: - /* 0x568 */ u8 field_0x568[0x65c - 0x568]; + /* 0x568 */ request_of_phase_process_class mPhase; + /* 0x570 */ mDoExt_McaMorfSO* mpModelMorf; + /* 0x574 */ Z2CreatureEnemy mSound; + /* 0x618 */ cXyz field_0x618; + /* 0x624 */ cXyz mDemoCamEye; + /* 0x630 */ cXyz mDemoCamCenter; + /* 0x63C */ actionFn mAction; + /* 0x648 */ actionFn mPrevAction; + /* 0x654 */ int field_0x654; + /* 0x658 */ u8 mIsHide; + /* 0x659 */ u8 mTimer; + /* 0x65A */ u8 field_0x65a; }; STATIC_ASSERT(sizeof(daDr_c) == 0x65c); diff --git a/include/d/actor/d_a_L7low_dr.h b/include/d/actor/d_a_L7low_dr.h index 34a5e2a4791..f3e636ca119 100644 --- a/include/d/actor/d_a_L7low_dr.h +++ b/include/d/actor/d_a_L7low_dr.h @@ -1,7 +1,6 @@ #ifndef D_A_L7LOW_DR_H #define D_A_L7LOW_DR_H -#include "dolphin/types.h" #include "f_op/f_op_actor_mng.h" /** @@ -14,18 +13,26 @@ */ class daL7lowDr_c : public fopAc_ac_c { public: - /* 805AA5F8 */ void setAction(void (daL7lowDr_c::*)()); + typedef void (daL7lowDr_c::*actionFn)(); + + /* 805AA5F8 */ void setAction(actionFn); /* 805AA69C */ void action(); - /* 805AA748 */ void _delete(); + /* 805AA748 */ int _delete(); /* 805AA7B8 */ void mtx_set(); /* 805AA828 */ void fly(); - /* 805AABF8 */ void execute(); - /* 805AAC5C */ void CreateHeap(); - /* 805AAD58 */ void create(); - /* 805AAEA8 */ void draw(); + /* 805AABF8 */ int execute(); + /* 805AAC5C */ int CreateHeap(); + /* 805AAD58 */ int create(); + /* 805AAEA8 */ int draw(); -private: - /* 0x568 */ u8 field_0x568[0x644 - 0x568]; + /* 0x568 */ request_of_phase_process_class mPhase; + /* 0x570 */ mDoExt_McaMorfSO* mpModelMorf; + /* 0x574 */ Z2CreatureEnemy mSound; + /* 0x618 */ u8 field_0x618[0x624 - 0x618]; + /* 0x624 */ actionFn mAction; + /* 0x630 */ actionFn field_0x630; + /* 0x63C */ int field_0x63c; + /* 0x640 */ u16 field_0x640; }; STATIC_ASSERT(sizeof(daL7lowDr_c) == 0x644); diff --git a/include/d/actor/d_a_L7op_demo_dr.h b/include/d/actor/d_a_L7op_demo_dr.h index 29ffb02a440..db004fcc511 100644 --- a/include/d/actor/d_a_L7op_demo_dr.h +++ b/include/d/actor/d_a_L7op_demo_dr.h @@ -1,8 +1,8 @@ #ifndef D_A_L7OP_DEMO_DR_H #define D_A_L7OP_DEMO_DR_H -#include "dolphin/types.h" #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_acch.h" /** * @ingroup actors-unsorted @@ -14,25 +14,51 @@ */ class daL7ODR_c : public fopAc_ac_c { public: - /* 805AB098 */ void setAction(void (daL7ODR_c::*)()); + typedef void (daL7ODR_c::*actionFn)(); + + /* 805AB098 */ void setAction(actionFn); /* 805AB13C */ void action(); - /* 805AB164 */ void setDrAction(void (daL7ODR_c::*)()); + /* 805AB164 */ void setDrAction(actionFn); /* 805AB208 */ void dr_action(); /* 805AB230 */ void mtx_set(); - /* 805AB2E8 */ void draw(); + /* 805AB2E8 */ int draw(); /* 805AB3F0 */ void wait(); /* 805AB520 */ void pl_walk(); /* 805ABC2C */ void setZoomOutCamPos(cXyz&, cXyz&, f32); /* 805ABCF8 */ void dr_wait(); /* 805ABE0C */ void dr_fly(); - /* 805AD7B4 */ void execute(); - /* 805AD87C */ void _delete(); - /* 805AD90C */ void CreateHeap(); - /* 805ADA2C */ void check_start(); - /* 805ADAC0 */ void create(); + /* 805AD7B4 */ int execute(); + /* 805AD87C */ int _delete(); + /* 805AD90C */ int CreateHeap(); + /* 805ADA2C */ BOOL check_start(); + /* 805ADAC0 */ int create(); -private: - /* 0x568 */ u8 field_0x568[0x8b8 - 0x568]; + /* 0x568 */ dBgS_AcchCir mAcchCir; + /* 0x5A8 */ dBgS_ObjAcch mAcch; + /* 0x780 */ request_of_phase_process_class mPhase; + /* 0x788 */ mDoExt_McaMorfSO* mpModelMorf; + /* 0x78C */ Z2CreatureEnemy mSound; + /* 0x830 */ cXyz field_0x830; + /* 0x83C */ cXyz mDemoCamEye; + /* 0x848 */ cXyz mDemoCamCenter; + /* 0x854 */ u8 field_0x854[0x858 - 0x854]; + /* 0x858 */ actionFn mAction; + /* 0x864 */ actionFn mPrevAction; + /* 0x870 */ actionFn mDrAction; + /* 0x87C */ actionFn mPrevDrAction; + /* 0x888 */ int field_0x888; + /* 0x88C */ int field_0x88c; + /* 0x890 */ int field_0x890; + /* 0x894 */ u32 mShadowKey; + /* 0x898 */ f32 field_0x898; + /* 0x89C */ f32 field_0x89c; + /* 0x8A0 */ f32 field_0x8a0; + /* 0x8A4 */ f32 field_0x8a4; + /* 0x8A8 */ u8 field_0x8A8[0x8B4 - 0x8A8]; + /* 0x8B4 */ u8 field_0x8b4; + /* 0x8B5 */ u8 field_0x8b5; + /* 0x8B6 */ u8 field_0x8b6; + /* 0x8B7 */ u8 field_0x8b7; }; STATIC_ASSERT(sizeof(daL7ODR_c) == 0x8b8); diff --git a/include/d/actor/d_a_arrow.h b/include/d/actor/d_a_arrow.h index d630b317641..cf98a32090b 100644 --- a/include/d/actor/d_a_arrow.h +++ b/include/d/actor/d_a_arrow.h @@ -71,6 +71,8 @@ public: void setShoot() { fopAcM_SetParam(this, 1); } void setChargeShoot() { fopAcM_SetParam(this, 2); } + void deleteArrow() { field_0x93f = 1; } + static fopAc_ac_c* makeArrow(fopAc_ac_c* i_actor, u16 param_1) { return (fopAc_ac_c*)fopAcM_fastCreate(PROC_ARROW, param_1 << 8, diff --git a/include/d/actor/d_a_b_gnd.h b/include/d/actor/d_a_b_gnd.h index 3b3ae0178b6..ebe3190a17e 100644 --- a/include/d/actor/d_a_b_gnd.h +++ b/include/d/actor/d_a_b_gnd.h @@ -26,6 +26,9 @@ public: /* 80601960 */ b_gnd_class(); bool checkAttackChance() { return field_0x2740 != 0; } + bool checkPiyo() { return field_0x1e08 != 0; } + bool checkRide() { return mDrawHorse != 0; } + BOOL checkZeldaEndDemoCut() { return FALSE; } /* 0x05AC */ request_of_phase_process_class mPhaseReq; /* 0x05B4 */ request_of_phase_process_class mHorsePhaseReq; diff --git a/include/d/actor/d_a_horse.h b/include/d/actor/d_a_horse.h index b8dea5a4b85..ab9f7eca8fc 100644 --- a/include/d/actor/d_a_horse.h +++ b/include/d/actor/d_a_horse.h @@ -255,6 +255,7 @@ public: int callHorse(const cXyz* param_0) { return (this->*m_callHorse)(param_0); } daHoZelda_c* getZeldaActor() { return (daHoZelda_c*)m_zeldaActorKeep.getActor(); } + void setZeldaActor(fopAc_ac_c* i_actor) { m_zeldaActorKeep.setData(i_actor); } bool checkTurnStandCamera() const { return checkResetStateFlg0(RFLG0_TURN_STAND_CAMERA); } bool checkTurnStand() const { return checkResetStateFlg0(RFLG0_TURN_STAND); } @@ -325,6 +326,14 @@ public: bool checkInputOnR() const { return m_padStickValue > 0.05f; } + void onBagMaterial() { + m_modelData->getMaterialNodePointer(5)->getShape()->show(); + } + + void offBagMaterial() { + m_modelData->getMaterialNodePointer(5)->getShape()->hide(); + } + static u16 const m_footJointTable[]; static f32 const m_callLimitDistance2; diff --git a/include/d/actor/d_a_hozelda.h b/include/d/actor/d_a_hozelda.h index 27bd11f4f42..456578172b0 100644 --- a/include/d/actor/d_a_hozelda.h +++ b/include/d/actor/d_a_hozelda.h @@ -2,15 +2,33 @@ #define D_A_HOZELDA_H #include "f_op/f_op_actor_mng.h" +#include "d/actor/d_a_player.h" #include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" class daHoZelda_matAnm_c : public J3DMaterialAnm { public: + daHoZelda_matAnm_c() { + init(); + } + /* 80845EAC */ void init(); - /* 80848D54 */ virtual ~daHoZelda_matAnm_c(); + void setNowOffsetX(f32 i_offsetX) { mNowOffsetX = i_offsetX; } + void setNowOffsetY(f32 i_offsetY) { mNowOffsetY = i_offsetY; } + f32* getNowOffsetXP() { return &mNowOffsetX; } + f32* getNowOffsetYP() { return &mNowOffsetY; } + + /* 80848D54 */ virtual ~daHoZelda_matAnm_c() {} /* 80845EDC */ virtual void calc(J3DMaterial*) const; + static bool getEyeMoveFlg() { return mEyeMoveFlg; } + static void offEyeMoveFlg() { mEyeMoveFlg = false; } + static void onEyeMoveFlg() { mEyeMoveFlg = true; } + + static u8 getMorfFrame() { return mMorfFrame; } + static void setMorfFrame(u8 i_frame) { mMorfFrame = i_frame; } + static void decMorfFrame() { cLib_calcTimer(&mMorfFrame); } + static bool mEyeMoveFlg; static u8 mMorfFrame; @@ -20,7 +38,9 @@ public: /* 0x100 */ f32 mNowOffsetY; }; -class daHoZelda_hio_c; +class daHoZelda_hio_c { +public: +}; /** * @ingroup actors-unsorted @@ -32,14 +52,14 @@ class daHoZelda_hio_c; */ class daHoZelda_c : public fopAc_ac_c { public: - /* 80846000 */ void createHeap(); + /* 80846000 */ int createHeap(); /* 80846718 */ void modelCallBack(u16); - /* 808469B0 */ void create(); + /* 808469B0 */ int create(); /* 80846DB0 */ ~daHoZelda_c(); - /* 80846F4C */ void setDoubleAnime(f32, f32, f32, u16, u16, f32); - /* 8084718C */ void setUpperAnime(u16); + /* 80846F4C */ int setDoubleAnime(f32, f32, f32, u16, u16, f32); + /* 8084718C */ int setUpperAnime(u16); /* 80847234 */ void resetUpperAnime(); - /* 808472C0 */ void setSingleAnime(u16, f32, f32, s16, f32); + /* 808472C0 */ int setSingleAnime(u16, f32, f32, s16, f32); /* 80847430 */ void animePlay(); /* 80847574 */ void setEyeBtp(u16); /* 808475F0 */ void setEyeBtk(u16, u8); @@ -55,15 +75,15 @@ public: /* 80848254 */ void setEyeMove(cXyz const*, s16, s16); /* 808484B8 */ void setNeckAngle(); /* 80848774 */ void searchBodyAngle(); - /* 808489CC */ void execute(); - /* 80848B64 */ void draw(); + /* 808489CC */ int execute(); + /* 80848B64 */ int draw(); MtxP getRightHandMtx() { return mpZeldaModel->getAnmMtx(22); } MtxP getRightFingerMtx() { return mpZeldaModel->getAnmMtx(23); } - u8 checkBowMode() const { return field_0x6d8; } - void setDamageInit() { field_0x6db = 1; } - u8 checkSingleRide() const { return field_0x6df; } + u8 checkBowMode() const { return mBowMode; } + void setDamageInit() { mDamageInit = 1; } + u8 checkSingleRide() const { return mIsSingleRide; } /* 0x568 */ request_of_phase_process_class mPhase; /* 0x570 */ J3DModel* mpZeldaModel; @@ -71,37 +91,32 @@ public: /* 0x578 */ mDoExt_btpAnm mEyeBtp; /* 0x590 */ mDoExt_btkAnm mEyeBtk; /* 0x5A8 */ mDoExt_MtxCalcAnmBlendTblOld* field_0x5a8; - /* 0x5AC */ mDoExt_AnmRatioPack field_0x5ac[3]; + /* 0x5AC */ mDoExt_AnmRatioPack mAnmRatioPack[3]; /* 0x5C4 */ mDoExt_MtxCalcOldFrame* field_0x5c4; - /* 0x5C8 */ daPy_frameCtrl_c field_0x5c8[3]; - /* 0x610 */ daHoZelda_matAnm_c* field_0x610[2]; + /* 0x5C8 */ daPy_frameCtrl_c mFrameCtrl[3]; + /* 0x610 */ daHoZelda_matAnm_c* mpMatAnm[2]; /* 0x618 */ Z2Creature mSound; /* 0x6A8 */ mDoExt_bckAnm mBowBck; /* 0x6C4 */ daPy_actorKeep_c mArrowAcKeep; - /* 0x6CC */ daPy_actorKeep_c field_0x6cc; + /* 0x6CC */ daPy_actorKeep_c mGndAcKeep; /* 0x6D4 */ daHoZelda_hio_c* mpHIO; - /* 0x6D8 */ u8 field_0x6d8; - /* 0x6D9 */ u8 field_0x6d9; + /* 0x6D8 */ u8 mBowMode; + /* 0x6D9 */ u8 mAnmTimer; /* 0x6DA */ u8 field_0x6da; - /* 0x6DB */ u8 field_0x6db; - /* 0x6DC */ u8 field_0x6DC[0x6DD - 0x6DC]; + /* 0x6DB */ u8 mDamageInit; + /* 0x6DC */ u8 field_0x6dc; /* 0x6DD */ u8 field_0x6dd; /* 0x6DE */ u8 field_0x6de; - /* 0x6DF */ u8 field_0x6df; + /* 0x6DF */ u8 mIsSingleRide; /* 0x6E0 */ s8 mReverb; /* 0x6E1 */ u8 field_0x6E1[0x6E4 - 0x6E1]; - /* 0x6E4 */ u16 field_0x6e4; - /* 0x6E6 */ u16 field_0x6e6; + /* 0x6E4 */ u16 field_0x6e4[2]; /* 0x6E8 */ u16 mUpperAnmID; - /* 0x6EA */ s16 mBowAnmID; - /* 0x6EC */ s16 field_0x6ec; - /* 0x6EE */ s16 field_0x6ee; - /* 0x6F0 */ u8 field_0x6F0[0x6F2 - 0x6F0]; - /* 0x6F2 */ s16 field_0x6f2; - /* 0x6F4 */ s16 field_0x6f4; - /* 0x6F6 */ u8 field_0x6F6[0x6F8 - 0x6F6]; - /* 0x6F8 */ Vec field_0x6f8; - /* 0x704 */ Vec* mpRideOffset; + /* 0x6EA */ u16 mBowAnmID; + /* 0x6EC */ csXyz mNeckAngle; + /* 0x6F2 */ csXyz mBodyAngle; + /* 0x6F8 */ cXyz field_0x6f8; + /* 0x704 */ const Vec* mpRideOffset; }; #endif /* D_A_HOZELDA_H */ diff --git a/include/d/actor/d_a_obj_lv7bridge.h b/include/d/actor/d_a_obj_lv7bridge.h index 58952b9e239..7f4cda80444 100644 --- a/include/d/actor/d_a_obj_lv7bridge.h +++ b/include/d/actor/d_a_obj_lv7bridge.h @@ -27,8 +27,13 @@ public: /* 80C87304 */ void Draw(); /* 80C87458 */ void Delete(); + void setDestroyAnmA() { field_0xa94 = 0; } + void setDestroyAnmB() { field_0xa94 = 1; } + private: - /* 0x568 */ u8 field_0x568[0xaa4 - 0x568]; + /* 0x568 */ u8 field_0x568[0xa94 - 0x568]; + /* 0xA94 */ u8 field_0xa94; + /* 0xA95 */ u8 field_0xa95[0xaa4 - 0xA95]; }; STATIC_ASSERT(sizeof(daObjLv7Brg_c) == 0xaa4); diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 7c3b03b9ff3..6e21eae098d 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -757,7 +757,7 @@ public: virtual BOOL checkGrassWhistle() const { return FALSE; } virtual BOOL checkBoarRun() const { return FALSE; } virtual bool checkFmChainPut() const { return FALSE; } - virtual bool checkHorseElecDamage() const { return FALSE; } + virtual BOOL checkHorseElecDamage() const { return FALSE; } virtual f32 getBaseAnimeFrameRate() const { return 1.0f; } virtual f32 getBaseAnimeFrame() const { return 0.0f; } virtual void setAnimeFrame(f32) {} @@ -890,6 +890,8 @@ public: mDemo.setDemoMode(1); } + u32 getDemoMode() const { return mDemo.getDemoMode(); } + u8 getCutCount() const { return mComboCutCount; } bool checkStatusWindowDraw() { return checkNoResetFlg2(FLG2_STATUS_WINDOW_DRAW); } @@ -938,6 +940,9 @@ public: void offWolfEnemyHangBite() { offNoResetFlg2(FLG2_WOLF_ENEMY_HANG_BITE); } bool onWolfEnemyHangBite(fopAc_ac_c* param_0) { return onWolfEnemyBiteAll(param_0, FLG2_WOLF_ENEMY_HANG_BITE); } + void offHorseZelda() { offNoResetFlg2(FLG2_HORSE_ZELDA); } + void onHorseZelda() { onNoResetFlg2(FLG2_HORSE_ZELDA); } + u32 checkItemSightBgHit() const { return checkResetFlg0(RFLG0_UNK_2000000); } void setCanoeSlider() { mSpecialMode = 0x2D; } diff --git a/src/d/actor/d_a_L7demo_dr.cpp b/src/d/actor/d_a_L7demo_dr.cpp index 11591d5ced5..c965fbc6455 100644 --- a/src/d/actor/d_a_L7demo_dr.cpp +++ b/src/d/actor/d_a_L7demo_dr.cpp @@ -4,456 +4,426 @@ */ #include "d/actor/d_a_L7demo_dr.h" -#include "dol2asm.h" -#include "d/d_camera.h" - -// -// Forward References: -// - -extern "C" void setAction__6daDr_cFM6daDr_cFPCvPv_v(); -extern "C" void action__6daDr_cFv(); -extern "C" void mtx_set__6daDr_cFv(); -extern "C" void draw__6daDr_cFv(); -extern "C" static void daDr_Draw__FP6daDr_c(); -extern "C" void wait__6daDr_cFv(); -extern "C" void pl_walk__6daDr_cFv(); -extern "C" void pl_turn__6daDr_cFv(); -extern "C" void bridge_destroy__6daDr_cFv(); -extern "C" void bridge_destroy2__6daDr_cFv(); -extern "C" void execute__6daDr_cFv(); -extern "C" static void daDr_Execute__FP6daDr_c(); -extern "C" static bool daDr_IsDelete__FP6daDr_c(); -extern "C" void _delete__6daDr_cFv(); -extern "C" static void daDr_Delete__FP6daDr_c(); -extern "C" void CreateHeap__6daDr_cFv(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" void check_start__6daDr_cFv(); -extern "C" void create__6daDr_cFv(); -extern "C" static void daDr_Create__FP6daDr_c(); -extern "C" extern char const* const d_a_L7demo_dr__stringBase0; - -// -// External References: -// - -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void -__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl(); -extern "C" void play__16mDoExt_McaMorfSOFUlSc(); -extern "C" void entryDL__16mDoExt_McaMorfSOFv(); -extern "C" void modelCalc__16mDoExt_McaMorfSOFv(); -extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void fopAcIt_Judge__FPFPvPv_PvPv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_orderPotentialEvent__FP10fopAc_ac_cUsUsUs(); -extern "C" void fopOvlpM_IsPeek__Fv(); -extern "C" void fpcSch_JudgeForPName__FPvPv(); -extern "C" void dStage_changeScene__FifUlScsi(); -extern "C" void getLayerNo__14dComIfG_play_cFi(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void reset__14dEvt_control_cFv(); -extern "C" void StartQuake__12dVibration_cFii4cXyz(); -extern "C" void StopQuake__12dVibration_cFi(); -extern "C" void Start__9dCamera_cFv(); -extern "C" void Stop__9dCamera_cFv(); -extern "C" void SetTrimSize__9dCamera_cFl(); -extern "C" void Set__9dCamera_cF4cXyz4cXyz(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void __ct__15Z2CreatureEnemyFv(); -extern "C" void init__15Z2CreatureEnemyFP3VecP3VecUcUc(); -extern "C" void* __nw__FUl(); -extern "C" void __ptmf_test(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; - -// -// Declarations: -// +#include "d/actor/d_a_player.h" +#include "d/actor/d_a_obj_lv7bridge.h" +#include "d/d_com_inf_game.h" +#include "d/d_s_play.h" +#include "f_op/f_op_overlap_mng.h" /* 805A9238-805A92DC 000078 00A4+00 5/5 0/0 0/0 .text setAction__6daDr_cFM6daDr_cFPCvPv_v */ -void daDr_c::setAction(void (daDr_c::*param_0)()) { - // NONMATCHING +void daDr_c::setAction(daDr_c::actionFn i_action) { + if (mAction != NULL) { + field_0x654 = -1; + (this->*mAction)(); + } + + mPrevAction = mAction; + mAction = i_action; + field_0x654 = 0; + (this->*mAction)(); } /* 805A92DC-805A9304 00011C 0028+00 1/1 0/0 0/0 .text action__6daDr_cFv */ void daDr_c::action() { - // NONMATCHING + (this->*mAction)(); } /* 805A9304-805A93D4 000144 00D0+00 1/1 0/0 0/0 .text mtx_set__6daDr_cFv */ void daDr_c::mtx_set() { - // NONMATCHING + J3DModel* model = mpModelMorf->getModel(); + + mDoMtx_stack_c::copy(model->getAnmMtx(1)); + mDoMtx_stack_c::multVecZero(&field_0x618); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(current.angle); + + model->setBaseScale(scale); + model->setBaseTRMtx(mDoMtx_stack_c::get()); + + mpModelMorf->modelCalc(); + fopAcM_SetMtx(this, model->getBaseTRMtx()); + eyePos = field_0x618; } /* 805A93D4-805A9458 000214 0084+00 1/1 0/0 0/0 .text draw__6daDr_cFv */ -void daDr_c::draw() { - // NONMATCHING +int daDr_c::draw() { + if (mIsHide) { + return 1; + } + + J3DModel* model = mpModelMorf->getModel(); + + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(model, &tevStr); + mpModelMorf->entryDL(); + return 1; } /* 805A9458-805A9478 000298 0020+00 1/0 0/0 0/0 .text daDr_Draw__FP6daDr_c */ -static void daDr_Draw(daDr_c* param_0) { - // NONMATCHING +static int daDr_Draw(daDr_c* i_this) { + return i_this->draw(); } -/* ############################################################################################## */ -/* 805AA454-805AA458 000000 0004+00 6/6 0/0 0/0 .rodata @3864 */ -SECTION_RODATA static f32 const lit_3864 = -7200.0f; -COMPILER_STRIP_GATE(0x805AA454, &lit_3864); - -/* 805AA458-805AA45C 000004 0004+00 0/2 0/0 0/0 .rodata @3865 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3865 = -200.0f; -COMPILER_STRIP_GATE(0x805AA458, &lit_3865); -#pragma pop - -/* 805AA45C-805AA460 000008 0004+00 0/3 0/0 0/0 .rodata @3866 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3866 = -12450.0f; -COMPILER_STRIP_GATE(0x805AA45C, &lit_3866); -#pragma pop - -/* 805AA4D0-805AA4DC -00001 000C+00 1/1 0/0 0/0 .data @3830 */ -SECTION_DATA static void* lit_3830[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)pl_walk__6daDr_cFv, -}; - -/* 805AA4DC-805AA4E8 -00001 000C+00 1/1 0/0 0/0 .data @3833 */ -SECTION_DATA static void* lit_3833[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)pl_turn__6daDr_cFv, -}; - /* 805A9478-805A963C 0002B8 01C4+00 2/0 0/0 0/0 .text wait__6daDr_cFv */ void daDr_c::wait() { - // NONMATCHING + if (field_0x654 == 0) { + mIsHide = TRUE; + current.pos.set(-7200.0f, -200.0f, -12450.0f); + current.angle.y = 0; + field_0x654++; + } else if (field_0x654 != -1) { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + camera_class* camera0 = dComIfGp_getCamera(0); + + if (eventInfo.checkCommandDemoAccrpt()) { + camera->mCamera.Stop(); + camera->mCamera.SetTrimSize(3); + daPy_getPlayerActorClass()->changeOriginalDemo(); + + if (dComIfG_play_c::getLayerNo(0) != 3) { + setAction(&daDr_c::pl_walk); + } else { + setAction(&daDr_c::pl_turn); + } + } else if (dComIfG_play_c::getLayerNo(0) == 3 || check_start()) { + fopAcM_orderPotentialEvent(this, 2, 0xFFFF, 0); + eventInfo.onCondition(2); + + mDemoCamEye = camera0->lookat.eye; + mDemoCamCenter = camera0->lookat.center; + } + } } -/* ############################################################################################## */ -/* 805AA460-805AA464 00000C 0004+00 0/1 0/0 0/0 .rodata @3946 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3946 = -4383.0f; -COMPILER_STRIP_GATE(0x805AA460, &lit_3946); -#pragma pop - -/* 805AA464-805AA468 000010 0004+00 0/1 0/0 0/0 .rodata @3947 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3947 = 285.0f; -COMPILER_STRIP_GATE(0x805AA464, &lit_3947); -#pragma pop - -/* 805AA468-805AA46C 000014 0004+00 0/1 0/0 0/0 .rodata @3948 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3948 = -4688.0f; -COMPILER_STRIP_GATE(0x805AA468, &lit_3948); -#pragma pop - -/* 805AA46C-805AA470 000018 0004+00 0/1 0/0 0/0 .rodata @3949 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3949 = 340.0f; -COMPILER_STRIP_GATE(0x805AA46C, &lit_3949); -#pragma pop - -/* 805AA470-805AA474 00001C 0004+00 0/2 0/0 0/0 .rodata @3950 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3950 = -4450.0f; -COMPILER_STRIP_GATE(0x805AA470, &lit_3950); -#pragma pop - -/* 805AA474-805AA478 000020 0004+00 1/4 0/0 0/0 .rodata @3951 */ -SECTION_RODATA static u8 const lit_3951[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x805AA474, &lit_3951); - -/* 805AA478-805AA47C 000024 0004+00 0/1 0/0 0/0 .rodata @3952 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3952 = -4100.0f; -COMPILER_STRIP_GATE(0x805AA478, &lit_3952); -#pragma pop - -/* 805AA4E8-805AA4F4 -00001 000C+00 1/1 0/0 0/0 .data @3886 */ -SECTION_DATA static void* lit_3886[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)pl_turn__6daDr_cFv, -}; - /* 805A963C-805A9914 00047C 02D8+00 1/0 0/0 0/0 .text pl_walk__6daDr_cFv */ void daDr_c::pl_walk() { - // NONMATCHING -} + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + camera_class* camera0 = dComIfGp_getCamera(0); + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz sp4C; -/* ############################################################################################## */ -/* 805AA4F4-805AA500 -00001 000C+00 1/1 0/0 0/0 .data @3978 */ -SECTION_DATA static void* lit_3978[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)bridge_destroy__6daDr_cFv, -}; + if (field_0x654 == 0) { + mDemoCamCenter.set(-4383.0f, 285.0f, -12450.0f); + mDemoCamEye.set(-4688.0f, 340.0f, -12450.0f); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + + sp4C.set(-4450.0f, 0.0f, -12450.0f); + player->setPlayerPosAndAngle(&sp4C, 0x4000, 0); + player->changeDemoMoveAngle(0x4000); + player->changeDemoMode(4, 0, 0, 0); + + mTimer = 5; + field_0x654++; + } else if (field_0x654 != -1) { + if (field_0x654 == 1) { + if (mTimer == 0) { + mTimer = 92.0f + hREG_F(0); + + mDemoCamCenter.set(-4383.0f, 285.0f, -12450.0f); + mDemoCamEye.set(-4688.0f, 340.0f, -12450.0f); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + + sp4C.set(-4450.0f, 0.0f, -12450.0f); + player->setPlayerPosAndAngle(&sp4C, 0x4000, 0); + player->changeDemoMoveAngle(0x4000); + + sp4C.set(-4100.0f, 0.0f, -12450.0f); + player->changeDemoPos0(&sp4C); + player->changeDemoMode(2, 0, 0, 0); + + field_0x654++; + } + } else if (mTimer == 0) { + if (dComIfG_play_c::getLayerNo(0) != 3) { + dStage_changeScene(6, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1); + fopAcM_delete(this); + } else { + setAction(&daDr_c::pl_turn); + } + } + } +} /* 805A9914-805A9A34 000754 0120+00 2/0 0/0 0/0 .text pl_turn__6daDr_cFv */ void daDr_c::pl_turn() { - // NONMATCHING + dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + dComIfGp_getCamera(0); + daPy_py_c* player = daPy_getPlayerActorClass(); + + if (field_0x654 == 0) { + field_0x654++; + } else if (field_0x654 != -1) { + if (field_0x654 == 1) { + if (!fopOvlpM_IsPeek()) { + mSound.startCreatureVoice(Z2SE_EN_DR_V_NAKU, -1); + mTimer = 22.0f + hREG_F(1); + field_0x654++; + } + } else if (field_0x654 == 2) { + if (mTimer == 0) { + mTimer = 22.0f + hREG_F(0); + player->changeDemoMode(0x19, 0, 0, 0); + field_0x654++; + } + } else if (mTimer == 0) { + setAction(&daDr_c::bridge_destroy); + } + } } -/* ############################################################################################## */ -/* 805AA47C-805AA480 000028 0004+00 0/3 0/0 0/0 .rodata @4123 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4123 = 1.0f; -COMPILER_STRIP_GATE(0x805AA47C, &lit_4123); -#pragma pop - -/* 805AA480-805AA484 00002C 0004+00 0/1 0/0 0/0 .rodata @4124 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4124 = -4600.0f; -COMPILER_STRIP_GATE(0x805AA480, &lit_4124); -#pragma pop - -/* 805AA484-805AA488 000030 0004+00 0/1 0/0 0/0 .rodata @4125 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4125 = 80.0f; -COMPILER_STRIP_GATE(0x805AA484, &lit_4125); -#pragma pop - -/* 805AA488-805AA48C 000034 0004+00 0/1 0/0 0/0 .rodata @4126 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4126 = 156.0f; -COMPILER_STRIP_GATE(0x805AA488, &lit_4126); -#pragma pop - -/* 805AA48C-805AA490 000038 0004+00 0/1 0/0 0/0 .rodata @4127 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4127 = 210.0f; -COMPILER_STRIP_GATE(0x805AA48C, &lit_4127); -#pragma pop - -/* 805AA500-805AA50C -00001 000C+00 1/1 0/0 0/0 .data @4041 */ -SECTION_DATA static void* lit_4041[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)bridge_destroy2__6daDr_cFv, -}; - /* 805A9A34-805A9D10 000874 02DC+00 1/0 0/0 0/0 .text bridge_destroy__6daDr_cFv */ void daDr_c::bridge_destroy() { - // NONMATCHING + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + camera_class* camera0 = dComIfGp_getCamera(0); + daPy_py_c* player = daPy_getPlayerActorClass(); + + if (field_0x654 == 0) { + cXyz sp68; + mIsHide = FALSE; + + current.pos.set(-7200.0f, -200.0f, -12450.0f); + current.angle.y = 0; + + mpModelMorf->setPlaySpeed(1.0f); + + mDemoCamCenter.set(field_0x618.x, field_0x618.y, field_0x618.z); + mDemoCamEye.set(-4600.0f + hREG_F(4), 80.0f + hREG_F(5), -12450.0f + hREG_F(6)); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + + field_0x654++; + } else if (field_0x654 != -1) { + if (mpModelMorf->getFrame() < 156.0f) { + mDemoCamCenter.set(field_0x618.x, field_0x618.y, field_0x618.z); + mDemoCamEye.set(-4600.0f + hREG_F(4), 80.0f + hREG_F(5), -12450.0f + hREG_F(6)); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + } else if (156.0f == mpModelMorf->getFrame()) { + cXyz sp5C; + daObjLv7Brg_c* brg = (daObjLv7Brg_c*)fopAcM_SearchByName(PROC_Obj_Lv7Bridge); + if (brg != NULL) { + brg->setDestroyAnmA(); + } + + dComIfGp_getVibration().StartQuake(8, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); + mSound.startCreatureSound(Z2SE_EN_DR_DEMO_DESTROY, 0, -1); + mTimer = 60.0f + hREG_F(10); + + sp5C.set(-4450.0f, 0.0f, -12450.0f); + player->setPlayerPosAndAngle(&sp5C, -0x4000, 0); + player->changeDemoMoveAngle(-0x4000); + player->changeDemoMode(4, 0, 0, 0); + } else if (mpModelMorf->getFrame() >= 210.0f) { + mpModelMorf->setPlaySpeed(0.0f); + + if (mTimer == 0) { + setAction(&daDr_c::bridge_destroy2); + } + } + } } -/* ############################################################################################## */ -/* 805AA490-805AA494 00003C 0004+00 0/1 0/0 0/0 .rodata @4182 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4182 = -6700.0f; -COMPILER_STRIP_GATE(0x805AA490, &lit_4182); -#pragma pop - -/* 805AA494-805AA498 000040 0004+00 0/1 0/0 0/0 .rodata @4183 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4183 = -850.0f; -COMPILER_STRIP_GATE(0x805AA494, &lit_4183); -#pragma pop - -/* 805AA498-805AA49C 000044 0004+00 0/1 0/0 0/0 .rodata @4184 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4184 = -20300.0f; -COMPILER_STRIP_GATE(0x805AA498, &lit_4184); -#pragma pop - -/* 805AA49C-805AA4A0 000048 0004+00 0/1 0/0 0/0 .rodata @4185 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4185 = -900.0f; -COMPILER_STRIP_GATE(0x805AA49C, &lit_4185); -#pragma pop - -/* 805AA4A0-805AA4A4 00004C 0004+00 0/1 0/0 0/0 .rodata @4186 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4186 = -20700.0f; -COMPILER_STRIP_GATE(0x805AA4A0, &lit_4186); -#pragma pop - /* 805A9D10-805A9EE4 000B50 01D4+00 1/0 0/0 0/0 .text bridge_destroy2__6daDr_cFv */ void daDr_c::bridge_destroy2() { - // NONMATCHING + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + dComIfGp_getCamera(0); + daPy_getPlayerActorClass(); + + if (field_0x654 == 0) { + daObjLv7Brg_c* brg = (daObjLv7Brg_c*)fopAcM_SearchByName(PROC_Obj_Lv7Bridge); + if (brg != NULL) { + brg->setDestroyAnmB(); + } + + mpModelMorf->setPlaySpeed(1.0f); + + mDemoCamCenter.set(-6700.0f, -850.0f, -20300.0f); + mDemoCamEye.set(-6700.0f, -900.0f, -20700.0f); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + + mTimer = 180; + field_0x65a = 0; + field_0x654++; + } else if (field_0x654 != -1) { + if (field_0x65a < 28) { + field_0x65a++; + } else if (field_0x65a == 28) { + field_0x65a++; + dComIfGp_getVibration().StopQuake(0x1F); + } + + if (mTimer == 0) { + u8 swbit = fopAcM_GetParam(this); + if (swbit != 0xFF) { + dComIfGs_onSwitch(swbit, fopAcM_GetRoomNo(this)); + } + + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + dStage_changeScene(7, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1); + fopAcM_delete(this); + } + } } -/* ############################################################################################## */ -/* 805AA4A4-805AA4A8 000050 0004+00 1/1 0/0 0/0 .rodata @4217 */ -SECTION_RODATA static f32 const lit_4217 = 115.0f; -COMPILER_STRIP_GATE(0x805AA4A4, &lit_4217); - -/* 805AA4A8-805AA4AC 000054 0004+00 1/1 0/0 0/0 .rodata @4218 */ -SECTION_RODATA static f32 const lit_4218 = 147.0f; -COMPILER_STRIP_GATE(0x805AA4A8, &lit_4218); - /* 805A9EE4-805A9FD4 000D24 00F0+00 1/1 0/0 0/0 .text execute__6daDr_cFv */ -void daDr_c::execute() { - // NONMATCHING +int daDr_c::execute() { + if (mTimer != 0) { + mTimer--; + } + + action(); + + if (dComIfG_play_c::getLayerNo(0) == 0) { + return 1; + } + + if (mpModelMorf->getFrame() == 115.0f || mpModelMorf->getFrame() == 147.0f) { + mSound.startCreatureSound(Z2SE_EN_DR_WING, 0, -1); + } + + shape_angle = current.angle; + mpModelMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + + mtx_set(); + return 1; } /* 805A9FD4-805A9FF4 000E14 0020+00 2/1 0/0 0/0 .text daDr_Execute__FP6daDr_c */ -static void daDr_Execute(daDr_c* param_0) { - // NONMATCHING +static int daDr_Execute(daDr_c* i_this) { + return i_this->execute(); } /* 805A9FF4-805A9FFC 000E34 0008+00 1/0 0/0 0/0 .text daDr_IsDelete__FP6daDr_c */ -static bool daDr_IsDelete(daDr_c* param_0) { - return true; +static int daDr_IsDelete(daDr_c* i_this) { + return 1; } -/* ############################################################################################## */ -/* 805AA4C8-805AA4C8 000074 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_805AA4C8 = "B_dr"; -#pragma pop - /* 805A9FFC-805AA064 000E3C 0068+00 1/1 0/0 0/0 .text _delete__6daDr_cFv */ -void daDr_c::_delete() { - // NONMATCHING +int daDr_c::_delete() { + fpc_ProcID id = fopAcM_GetID(this); + + if (heap != NULL) { + mpModelMorf->stopZelAnime(); + } + + if (dComIfG_play_c::getLayerNo(0) == 0) { + return 1; + } + + dComIfG_resDelete(&mPhase, "B_dr"); + return 1; } /* 805AA064-805AA084 000EA4 0020+00 1/0 0/0 0/0 .text daDr_Delete__FP6daDr_c */ -static void daDr_Delete(daDr_c* param_0) { - // NONMATCHING +static int daDr_Delete(daDr_c* i_this) { + return i_this->_delete(); } /* 805AA084-805AA17C 000EC4 00F8+00 1/1 0/0 0/0 .text CreateHeap__6daDr_cFv */ -void daDr_c::CreateHeap() { - // NONMATCHING +int daDr_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("B_dr", 0x49); + JUT_ASSERT(655, modelData != 0); + + mpModelMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("B_dr", 0x1E), 0, 0.0f, 0, -1, &mSound, 0, 0x11000084); + if (mpModelMorf == NULL || mpModelMorf->getModel() == NULL) { + return 0; + } + + return 1; } /* 805AA17C-805AA19C 000FBC 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING +static int useHeapInit(fopAc_ac_c* i_this) { + daDr_c* a_this = (daDr_c*)i_this; + return a_this->CreateHeap(); } -/* ############################################################################################## */ -/* 805AA4AC-805AA4B0 000058 0004+00 0/1 0/0 0/0 .rodata @4290 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4290 = -4480.0f; -COMPILER_STRIP_GATE(0x805AA4AC, &lit_4290); -#pragma pop - -/* 805AA4B0-805AA4B4 00005C 0004+00 0/1 0/0 0/0 .rodata @4291 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4291 = -3730.0f; -COMPILER_STRIP_GATE(0x805AA4B0, &lit_4291); -#pragma pop - -/* 805AA4B4-805AA4B8 000060 0004+00 0/1 0/0 0/0 .rodata @4292 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4292 = -12800.0f; -COMPILER_STRIP_GATE(0x805AA4B4, &lit_4292); -#pragma pop - -/* 805AA4B8-805AA4BC 000064 0004+00 0/1 0/0 0/0 .rodata @4293 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4293 = -12100.0f; -COMPILER_STRIP_GATE(0x805AA4B8, &lit_4293); -#pragma pop - /* 805AA19C-805AA224 000FDC 0088+00 1/1 0/0 0/0 .text check_start__6daDr_cFv */ -void daDr_c::check_start() { - // NONMATCHING +BOOL daDr_c::check_start() { + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz player_pos; + + if (dComIfGs_getKeyNum() == 0) { + return FALSE; + } + + player_pos = player->current.pos; + if (-4480.0f < player_pos.x && player_pos.x < -3730.0f && -12800.0f < player_pos.z && player_pos.z < -12100.0f) { + return TRUE; + } + + return FALSE; } -/* ############################################################################################## */ -/* 805AA4BC-805AA4C0 000068 0004+00 0/1 0/0 0/0 .rodata @4370 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4370 = -21133.0f; -COMPILER_STRIP_GATE(0x805AA4BC, &lit_4370); -#pragma pop - -/* 805AA4C0-805AA4C4 00006C 0004+00 0/1 0/0 0/0 .rodata @4371 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4371 = 4660.0f; -COMPILER_STRIP_GATE(0x805AA4C0, &lit_4371); -#pragma pop - -/* 805AA4C4-805AA4C8 000070 0004+00 0/1 0/0 0/0 .rodata @4372 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4372 = -24785.0f; -COMPILER_STRIP_GATE(0x805AA4C4, &lit_4372); -#pragma pop - -/* 805AA50C-805AA518 -00001 000C+00 1/1 0/0 0/0 .data @4306 */ -SECTION_DATA static void* lit_4306[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)wait__6daDr_cFv, -}; - -/* 805AA518-805AA524 -00001 000C+00 1/1 0/0 0/0 .data @4317 */ -SECTION_DATA static void* lit_4317[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)wait__6daDr_cFv, -}; - /* 805AA224-805AA42C 001064 0208+00 1/1 0/0 0/0 .text create__6daDr_cFv */ -void daDr_c::create() { - // NONMATCHING +int daDr_c::create() { + fopAcM_SetupActor(this, daDr_c); + + int phase_state; + if (dComIfG_play_c::getLayerNo(0) == 3) { + phase_state = dComIfG_resLoad(&mPhase, "B_dr"); + if (phase_state == cPhs_COMPLEATE_e) { + OS_REPORT("dr PARAM %x\n", fopAcM_GetParam()); + OS_REPORT("dr//////////////DR SET 1 !!\n"); + + if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x68C0)) { + OS_REPORT("//////////////DR SET NON !!\n"); + return cPhs_ERROR_e; + } + + OS_REPORT("//////////////DR SET 2 !!\n"); + + field_0x618.set(-21133.0f, 4660.0f, -24785.0f); + eyePos = field_0x618; + mSound.init(&field_0x618, &eyePos, 3, 1); + + health = 1; + field_0x560 = 1; + + scale.setall(1.0f); + + setAction(&daDr_c::wait); + + u8 swbit = fopAcM_GetParam(this ); + if (swbit != 0xFF && dComIfGs_isSwitch(swbit, fopAcM_GetRoomNo(this))) { + return cPhs_ERROR_e; + } + + daDr_Execute(this); + } + } else { + phase_state = cPhs_COMPLEATE_e; + mIsHide = TRUE; + OS_REPORT("dr PARAM %x\n", fopAcM_GetParam(this)); + + health = 1; + field_0x560 = 1; + + u8 swbit = fopAcM_GetParam(this); + if (swbit != 0xFF && dComIfGs_isSwitch(swbit, fopAcM_GetRoomNo(this))) { + return cPhs_ERROR_e; + } + + setAction(&daDr_c::wait); + daDr_Execute(this); + } + + return phase_state; } /* 805AA42C-805AA44C 00126C 0020+00 1/0 0/0 0/0 .text daDr_Create__FP6daDr_c */ -static void daDr_Create(daDr_c* param_0) { - // NONMATCHING +static int daDr_Create(daDr_c* i_this) { + return i_this->create(); } -/* ############################################################################################## */ /* 805AA524-805AA544 -00001 0020+00 1/0 0/0 0/0 .data l_daDr_Method */ static actor_method_class l_daDr_Method = { - (process_method_func)daDr_Create__FP6daDr_c, - (process_method_func)daDr_Delete__FP6daDr_c, - (process_method_func)daDr_Execute__FP6daDr_c, - (process_method_func)daDr_IsDelete__FP6daDr_c, - (process_method_func)daDr_Draw__FP6daDr_c, + (process_method_func)daDr_Create, + (process_method_func)daDr_Delete, + (process_method_func)daDr_Execute, + (process_method_func)daDr_IsDelete, + (process_method_func)daDr_Draw, }; /* 805AA544-805AA574 -00001 0030+00 0/0 0/0 1/0 .data g_profile_DR */ @@ -473,5 +443,3 @@ extern actor_process_profile_definition g_profile_DR = { fopAc_ENEMY_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 805AA4C8-805AA4C8 000074 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_L7low_dr.cpp b/src/d/actor/d_a_L7low_dr.cpp index 22960205e6a..bdc08d8ddf7 100644 --- a/src/d/actor/d_a_L7low_dr.cpp +++ b/src/d/actor/d_a_L7low_dr.cpp @@ -4,282 +4,215 @@ */ #include "d/actor/d_a_L7low_dr.h" -#include "dol2asm.h" - - -// -// Forward References: -// - -extern "C" void setAction__11daL7lowDr_cFM11daL7lowDr_cFPCvPv_v(); -extern "C" void action__11daL7lowDr_cFv(); -extern "C" void _delete__11daL7lowDr_cFv(); -extern "C" static void daL7lowDr_Delete__FP11daL7lowDr_c(); -extern "C" void mtx_set__11daL7lowDr_cFv(); -extern "C" void fly__11daL7lowDr_cFv(); -extern "C" void execute__11daL7lowDr_cFv(); -extern "C" static void daL7lowDr_Execute__FP11daL7lowDr_c(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" void CreateHeap__11daL7lowDr_cFv(); -extern "C" void create__11daL7lowDr_cFv(); -extern "C" static void daL7lowDr_Create__FP11daL7lowDr_c(); -extern "C" void draw__11daL7lowDr_cFv(); -extern "C" static void daL7lowDr_Draw__FP11daL7lowDr_c(); -extern "C" static bool daL7lowDr_IsDelete__FP11daL7lowDr_c(); -extern "C" extern char const* const d_a_L7low_dr__stringBase0; - -// -// External References: -// - -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void -__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl(); -extern "C" void setAnm__16mDoExt_McaMorfSOFP15J3DAnmTransformiffff(); -extern "C" void play__16mDoExt_McaMorfSOFUlSc(); -extern "C" void entryDL__16mDoExt_McaMorfSOFv(); -extern "C" void modelCalc__16mDoExt_McaMorfSOFv(); -extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_posMoveF__FP10fopAc_ac_cPC4cXyz(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void isDungeonItem__12dSv_memBit_cCFi(); -extern "C" void isEventBit__11dSv_event_cCFUs(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void cM_rndF__Ff(); -extern "C" void cM_rndFX__Ff(); -extern "C" void cLib_chaseAngleS__FPsss(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void __ct__15Z2CreatureEnemyFv(); -extern "C" void init__15Z2CreatureEnemyFP3VecP3VecUcUc(); -extern "C" void* __nw__FUl(); -extern "C" void __ptmf_test(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_28(); -extern "C" void _restgpr_28(); -extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 sincosTable___5JMath[65536]; - -// -// Declarations: -// +#include "d/d_com_inf_game.h" /* 805AA5F8-805AA69C 000078 00A4+00 1/1 0/0 0/0 .text * setAction__11daL7lowDr_cFM11daL7lowDr_cFPCvPv_v */ -void daL7lowDr_c::setAction(void (daL7lowDr_c::*param_0)()) { - // NONMATCHING +void daL7lowDr_c::setAction(daL7lowDr_c::actionFn i_action) { + if (mAction != NULL) { + field_0x63c = -1; + (this->*mAction)(); + } + + field_0x630 = mAction; + mAction = i_action; + field_0x63c = 0; + (this->*mAction)(); } /* 805AA69C-805AA748 00011C 00AC+00 1/1 0/0 0/0 .text action__11daL7lowDr_cFv */ void daL7lowDr_c::action() { - // NONMATCHING + if (field_0x640 != 0) { + field_0x640--; + } + + (this->*mAction)(); + + shape_angle = current.angle; + fopAcM_posMoveF(this, NULL); + mpModelMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + + mtx_set(); + eyePos = current.pos; } -/* ############################################################################################## */ -/* 805AAFB0-805AAFB0 00003C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_805AAFB0 = "L7lowDr"; -#pragma pop - /* 805AA748-805AA798 0001C8 0050+00 1/1 0/0 0/0 .text _delete__11daL7lowDr_cFv */ -void daL7lowDr_c::_delete() { - // NONMATCHING +int daL7lowDr_c::_delete() { + dComIfG_resDelete(&mPhase, "L7lowDr"); + + if (heap != NULL) { + mpModelMorf->stopZelAnime(); + } + + return 1; } /* 805AA798-805AA7B8 000218 0020+00 1/0 0/0 0/0 .text daL7lowDr_Delete__FP11daL7lowDr_c */ -static void daL7lowDr_Delete(daL7lowDr_c* param_0) { - // NONMATCHING +static int daL7lowDr_Delete(daL7lowDr_c* i_this) { + return i_this->_delete(); } /* 805AA7B8-805AA828 000238 0070+00 1/1 0/0 0/0 .text mtx_set__11daL7lowDr_cFv */ void daL7lowDr_c::mtx_set() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + + J3DModel* model = mpModelMorf->getModel(); + model->setBaseScale(scale); + model->setBaseTRMtx(mDoMtx_stack_c::get()); + + mpModelMorf->modelCalc(); } -/* ############################################################################################## */ -/* 805AAF74-805AAF78 000000 0004+00 1/1 0/0 0/0 .rodata @3769 */ -SECTION_RODATA static f32 const lit_3769 = 32768.0f; -COMPILER_STRIP_GATE(0x805AAF74, &lit_3769); - -/* 805AAF78-805AAF7C 000004 0004+00 0/1 0/0 0/0 .rodata @3770 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3770 = 2800.0f; -COMPILER_STRIP_GATE(0x805AAF78, &lit_3770); -#pragma pop - -/* 805AAF7C-805AAF80 000008 0004+00 0/1 0/0 0/0 .rodata @3771 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3771 = 8000.0f; -COMPILER_STRIP_GATE(0x805AAF7C, &lit_3771); -#pragma pop - -/* 805AAF80-805AAF84 00000C 0004+00 0/1 0/0 0/0 .rodata @3772 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3772 = 20.0f; -COMPILER_STRIP_GATE(0x805AAF80, &lit_3772); -#pragma pop - -/* 805AAF84-805AAF88 000010 0004+00 2/3 0/0 0/0 .rodata @3773 */ -SECTION_RODATA static f32 const lit_3773 = 1.0f; -COMPILER_STRIP_GATE(0x805AAF84, &lit_3773); - -/* 805AAF88-805AAF8C 000014 0004+00 0/1 0/0 0/0 .rodata @3774 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3774[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x805AAF88, &lit_3774); -#pragma pop - -/* 805AAF8C-805AAF90 000018 0004+00 0/1 0/0 0/0 .rodata @3775 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3775 = -1.0f; -COMPILER_STRIP_GATE(0x805AAF8C, &lit_3775); -#pragma pop - -/* 805AAF90-805AAF94 00001C 0004+00 0/1 0/0 0/0 .rodata @3776 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3776 = 30.0f; -COMPILER_STRIP_GATE(0x805AAF90, &lit_3776); -#pragma pop - -/* 805AAF94-805AAF98 000020 0004+00 0/1 0/0 0/0 .rodata @3777 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3777 = 210.0f; -COMPILER_STRIP_GATE(0x805AAF94, &lit_3777); -#pragma pop - -/* 805AAF98-805AAF9C 000024 0004+00 0/1 0/0 0/0 .rodata @3778 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3778 = 60.0f; -COMPILER_STRIP_GATE(0x805AAF98, &lit_3778); -#pragma pop - -/* 805AAF9C-805AAFA0 000028 0004+00 0/1 0/0 0/0 .rodata @3779 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3779 = 3.0f; -COMPILER_STRIP_GATE(0x805AAF9C, &lit_3779); -#pragma pop - -/* 805AAFA0-805AAFA4 00002C 0004+00 0/1 0/0 0/0 .rodata @3780 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3780 = 33.0f; -COMPILER_STRIP_GATE(0x805AAFA0, &lit_3780); -#pragma pop - -/* 805AAFA4-805AAFA8 000030 0004+00 0/1 0/0 0/0 .rodata @3781 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3781 = 2.0f; -COMPILER_STRIP_GATE(0x805AAFA4, &lit_3781); -#pragma pop - -/* 805AAFA8-805AAFAC 000034 0004+00 0/1 0/0 0/0 .rodata @3782 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3782 = 180.0f; -COMPILER_STRIP_GATE(0x805AAFA8, &lit_3782); -#pragma pop - -/* 805AAFAC-805AAFB0 000038 0004+00 0/1 0/0 0/0 .rodata @3783 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3783 = 67.0f; -COMPILER_STRIP_GATE(0x805AAFAC, &lit_3783); -#pragma pop - /* 805AA828-805AABF8 0002A8 03D0+00 1/0 0/0 0/0 .text fly__11daL7lowDr_cFv */ void daL7lowDr_c::fly() { - // NONMATCHING + if (field_0x63c == 0) { + s16 var_r28 = cM_rndFX(32768.0f); + current.pos.set(cM_ssin(var_r28) * 2800.0f, 8000.0f, cM_scos(var_r28) * 2800.0f); + current.pos += home.pos; + current.angle.y = cLib_targetAngleY(¤t.pos, &home.pos) + 0x4000; + + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("L7lowDr", 4), 2, 20.0f, 1.0f, 0.0f, -1.0f); + speedF = 30.0f; + field_0x640 = cM_rndFX(60.0f) + 210.0f; + field_0x63c++; + } else if (field_0x63c != -1) { + current.angle.y = cLib_targetAngleY(¤t.pos, &home.pos) + 0x4000; + fopAcM_posMoveF(this, NULL); + + if (field_0x63c == 1) { + cLib_chaseAngleS(¤t.angle.z, 0, 0x20); + + if (mpModelMorf->isStop()) { + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("L7lowDr", 4), 2, 3.0f, 1.0f, 0.0f, -1.0f); + } + + if (field_0x640 == 0 && mpModelMorf->getFrame() >= 33.0f) { + if ((int)cM_rndF(2.0f) != 0) { + field_0x640 = cM_rndFX(60.0f) + 210.0f; + } else { + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("L7lowDr", 5), 0, 3.0f, 1.0f, 0.0f, -1.0f); + field_0x640 = cM_rndFX(60.0f) + 180.0f; + field_0x63c++; + } + } + } else { + cLib_chaseAngleS(¤t.angle.z, 0x1000, 0x20); + + if (mpModelMorf->isStop()) { + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("L7lowDr", 6), 2, 3.0f, 1.0f, 0.0f, -1.0f); + } + + if (field_0x640 == 0 && mpModelMorf->getFrame() >= 67.0f) { + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("L7lowDr", 7), 0, 3.0f, 1.0f, 0.0f, -1.0f); + field_0x640 = cM_rndFX(60.0f) + 210.0f; + field_0x63c = 1; + } + } + } } /* 805AABF8-805AAC1C 000678 0024+00 1/1 0/0 0/0 .text execute__11daL7lowDr_cFv */ -void daL7lowDr_c::execute() { - // NONMATCHING +int daL7lowDr_c::execute() { + action(); + return 1; } /* 805AAC1C-805AAC3C 00069C 0020+00 2/1 0/0 0/0 .text daL7lowDr_Execute__FP11daL7lowDr_c */ -static void daL7lowDr_Execute(daL7lowDr_c* param_0) { - // NONMATCHING +static int daL7lowDr_Execute(daL7lowDr_c* i_this) { + return i_this->execute(); } /* 805AAC3C-805AAC5C 0006BC 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING +static int useHeapInit(fopAc_ac_c* i_this) { + daL7lowDr_c* a_this = (daL7lowDr_c*)i_this; + return a_this->CreateHeap(); } /* 805AAC5C-805AAD58 0006DC 00FC+00 1/1 0/0 0/0 .text CreateHeap__11daL7lowDr_cFv */ -void daL7lowDr_c::CreateHeap() { - // NONMATCHING +int daL7lowDr_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("L7lowDr", 10); + JUT_ASSERT(244, modelData != 0); + mpModelMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("L7lowDr", 4), 0, 1.0f, 0, -1, &mSound, 0x80000, 0x11000084); + if (mpModelMorf == NULL || mpModelMorf->getModel() == NULL) { + return 0; + } + + J3DModel* model = mpModelMorf->getModel(); + model->setUserArea((u32)this); + return 1; } -/* ############################################################################################## */ -/* 805AAFB8-805AAFC4 -00001 000C+00 1/1 0/0 0/0 .data @3832 */ -SECTION_DATA static void* lit_3832[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)fly__11daL7lowDr_cFv, -}; - /* 805AAD58-805AAE88 0007D8 0130+00 1/1 0/0 0/0 .text create__11daL7lowDr_cFv */ -void daL7lowDr_c::create() { - // NONMATCHING +int daL7lowDr_c::create() { + fopAcM_SetupActor(this, daL7lowDr_c); + + int phase_state = dComIfG_resLoad(&mPhase, "L7lowDr"); + if (phase_state == cPhs_COMPLEATE_e) { + OS_REPORT("////////////// L7lowDr ///////////////////\n"); + if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x1D20)) { + return cPhs_ERROR_e; + } + + OS_REPORT("//////////// L7lowDr SET OK //////////////\n"); + + if (dComIfGs_isStageBossEnemy()) { + OS_REPORT("L7俯瞰翼竜:ボス死んでるのでセットしない\n"); + return cPhs_ERROR_e; + } + + scale.setall(1.0f); + attention_info.flags = 0; + + mSound.init(¤t.pos, &eyePos, 3, 1); + + setAction(&daL7lowDr_c::fly); + daL7lowDr_Execute(this); + } + + return phase_state; } /* 805AAE88-805AAEA8 000908 0020+00 1/0 0/0 0/0 .text daL7lowDr_Create__FP11daL7lowDr_c */ -static void daL7lowDr_Create(daL7lowDr_c* param_0) { - // NONMATCHING +static int daL7lowDr_Create(daL7lowDr_c* i_this) { + return i_this->create(); } /* 805AAEA8-805AAF44 000928 009C+00 1/1 0/0 0/0 .text draw__11daL7lowDr_cFv */ -void daL7lowDr_c::draw() { - // NONMATCHING +int daL7lowDr_c::draw() { + if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[510])) { + return 1; + } + + J3DModel* model = mpModelMorf->getModel(); + + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(model, &tevStr); + mpModelMorf->entryDL(); + return 1; } /* 805AAF44-805AAF64 0009C4 0020+00 1/0 0/0 0/0 .text daL7lowDr_Draw__FP11daL7lowDr_c */ -static void daL7lowDr_Draw(daL7lowDr_c* param_0) { - // NONMATCHING +static int daL7lowDr_Draw(daL7lowDr_c* i_this) { + return i_this->draw(); } /* 805AAF64-805AAF6C 0009E4 0008+00 1/0 0/0 0/0 .text daL7lowDr_IsDelete__FP11daL7lowDr_c */ -static bool daL7lowDr_IsDelete(daL7lowDr_c* param_0) { - return true; +static int daL7lowDr_IsDelete(daL7lowDr_c* i_this) { + return 1; } -/* ############################################################################################## */ /* 805AAFC4-805AAFE4 -00001 0020+00 1/0 0/0 0/0 .data l_daL7lowDr_Method */ static actor_method_class l_daL7lowDr_Method = { - (process_method_func)daL7lowDr_Create__FP11daL7lowDr_c, - (process_method_func)daL7lowDr_Delete__FP11daL7lowDr_c, - (process_method_func)daL7lowDr_Execute__FP11daL7lowDr_c, - (process_method_func)daL7lowDr_IsDelete__FP11daL7lowDr_c, - (process_method_func)daL7lowDr_Draw__FP11daL7lowDr_c, + (process_method_func)daL7lowDr_Create, + (process_method_func)daL7lowDr_Delete, + (process_method_func)daL7lowDr_Execute, + (process_method_func)daL7lowDr_IsDelete, + (process_method_func)daL7lowDr_Draw, }; /* 805AAFE4-805AB014 -00001 0030+00 0/0 0/0 1/0 .data g_profile_L7lowDr */ @@ -299,5 +232,3 @@ extern actor_process_profile_definition g_profile_L7lowDr = { fopAc_ENEMY_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 805AAFB0-805AAFB0 00003C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_L7op_demo_dr.cpp b/src/d/actor/d_a_L7op_demo_dr.cpp index f4c5e6d83d3..ac0385a492e 100644 --- a/src/d/actor/d_a_L7op_demo_dr.cpp +++ b/src/d/actor/d_a_L7op_demo_dr.cpp @@ -4,881 +4,861 @@ */ #include "d/actor/d_a_L7op_demo_dr.h" -#include "dol2asm.h" -#include "d/d_camera.h" - - -// -// Forward References: -// - -extern "C" void setAction__9daL7ODR_cFM9daL7ODR_cFPCvPv_v(); -extern "C" void action__9daL7ODR_cFv(); -extern "C" void setDrAction__9daL7ODR_cFM9daL7ODR_cFPCvPv_v(); -extern "C" void dr_action__9daL7ODR_cFv(); -extern "C" void mtx_set__9daL7ODR_cFv(); -extern "C" void draw__9daL7ODR_cFv(); -extern "C" static void daL7ODR_Draw__FP9daL7ODR_c(); -extern "C" void wait__9daL7ODR_cFv(); -extern "C" void pl_walk__9daL7ODR_cFv(); -extern "C" void setZoomOutCamPos__9daL7ODR_cFR4cXyzR4cXyzf(); -extern "C" void dr_wait__9daL7ODR_cFv(); -extern "C" void dr_fly__9daL7ODR_cFv(); -extern "C" void execute__9daL7ODR_cFv(); -extern "C" static void daL7ODR_Execute__FP9daL7ODR_c(); -extern "C" static bool daL7ODR_IsDelete__FP9daL7ODR_c(); -extern "C" void _delete__9daL7ODR_cFv(); -extern "C" static void daL7ODR_Delete__FP9daL7ODR_c(); -extern "C" void CreateHeap__9daL7ODR_cFv(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" void check_start__9daL7ODR_cFv(); -extern "C" void create__9daL7ODR_cFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" static void daL7ODR_Create__FP9daL7ODR_c(); -extern "C" static void func_805ADD68(); -extern "C" static void func_805ADD70(); -extern "C" void changeDemoPos0__9daPy_py_cFPC4cXyz(); -extern "C" void changeDemoMode__9daPy_py_cFUliis(); -extern "C" void isStop__13mDoExt_morf_cFv(); -extern "C" void abs__4cXyzCFRC3Vec(); -extern "C" void __ct__4cXyzFRC4cXyz(); -extern "C" void multVecZero__14mDoMtx_stack_cFP3Vec(); -extern "C" void __as__4cXyzFRC4cXyz(); -extern "C" extern char const* const d_a_L7op_demo_dr__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void -__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl(); -extern "C" void setAnm__16mDoExt_McaMorfSOFP15J3DAnmTransformiffff(); -extern "C" void play__16mDoExt_McaMorfSOFUlSc(); -extern "C" void entryDL__16mDoExt_McaMorfSOFv(); -extern "C" void modelCalc__16mDoExt_McaMorfSOFv(); -extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_posMoveF__FP10fopAc_ac_cPC4cXyz(); -extern "C" void fopAcM_orderPotentialEvent__FP10fopAc_ac_cUsUsUs(); -extern "C" void fopMsgM_messageSetDemo__FUl(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void dComIfGs_onZoneSwitch__Fii(); -extern "C" void -dComIfGd_setShadow__FUlScP8J3DModelP4cXyzffffR13cBgS_PolyInfoP12dKy_tevstr_csfP9_GXTexObj(); -extern "C" void setRoom__13dSv_restart_cFRC4cXyzsSc(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void reset__14dEvt_control_cFv(); -extern "C" void StartQuake__12dVibration_cFii4cXyz(); -extern "C" void StopQuake__12dVibration_cFi(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void daNpcF_getPlayerInfoFromPlayerList__FiiR4cXyzR5csXyz(); -extern "C" void Start__9dCamera_cFv(); -extern "C" void Stop__9dCamera_cFv(); -extern "C" void SetTrimSize__9dCamera_cFl(); -extern "C" void Set__9dCamera_cF4cXyz4cXyz(); -extern "C" void Set__9dCamera_cF4cXyz4cXyzfs(); -extern "C" void Reset__9dCamera_cF4cXyz4cXyz(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" bool __eq__4cXyzCFRC3Vec(); -extern "C" void cLib_addCalcAngleS__FPsssss(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void cLib_chasePos__FP4cXyzRC4cXyzf(); -extern "C" void cLib_chaseAngleS__FPsss(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void cLib_targetAngleX__FPC4cXyzPC4cXyz(); -extern "C" void subBgmStart__8Z2SeqMgrFUl(); -extern "C" void subBgmStop__8Z2SeqMgrFv(); -extern "C" void __ct__15Z2CreatureEnemyFv(); -extern "C" void init__15Z2CreatureEnemyFP3VecP3VecUcUc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void __ptmf_test(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; - -// -// Declarations: -// +#include "d/actor/d_a_player.h" +#include "d/d_com_inf_game.h" +#include "d/d_s_play.h" +#include "d/actor/d_a_npc.h" +#include "f_op/f_op_msg_mng.h" /* 805AB098-805AB13C 000078 00A4+00 2/2 0/0 0/0 .text setAction__9daL7ODR_cFM9daL7ODR_cFPCvPv_v */ -void daL7ODR_c::setAction(void (daL7ODR_c::*param_0)()) { - // NONMATCHING +void daL7ODR_c::setAction(daL7ODR_c::actionFn i_action) { + if (mAction != NULL) { + field_0x888 = -1; + (this->*mAction)(); + } + + mPrevAction = mAction; + mAction = i_action; + field_0x888 = 0; + (this->*mAction)(); } /* 805AB13C-805AB164 00011C 0028+00 1/1 0/0 0/0 .text action__9daL7ODR_cFv */ void daL7ODR_c::action() { - // NONMATCHING + (this->*mAction)(); } /* 805AB164-805AB208 000144 00A4+00 2/2 0/0 0/0 .text setDrAction__9daL7ODR_cFM9daL7ODR_cFPCvPv_v */ -void daL7ODR_c::setDrAction(void (daL7ODR_c::*param_0)()) { - // NONMATCHING +void daL7ODR_c::setDrAction(daL7ODR_c::actionFn i_action) { + if (mDrAction != NULL) { + field_0x88c = -1; + (this->*mDrAction)(); + } + + mPrevDrAction = mDrAction; + mDrAction = i_action; + field_0x88c = 0; + (this->*mDrAction)(); } /* 805AB208-805AB230 0001E8 0028+00 1/1 0/0 0/0 .text dr_action__9daL7ODR_cFv */ void daL7ODR_c::dr_action() { - // NONMATCHING + (this->*mDrAction)(); } /* 805AB230-805AB2E8 000210 00B8+00 1/1 0/0 0/0 .text mtx_set__9daL7ODR_cFv */ void daL7ODR_c::mtx_set() { - // NONMATCHING + J3DModel* model = mpModelMorf->getModel(); + + mDoMtx_stack_c::copy(model->getAnmMtx(0x15)); + mDoMtx_stack_c::multVecZero(&field_0x830); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(current.angle); + + model->setBaseScale(scale); + model->setBaseTRMtx(mDoMtx_stack_c::get()); + + mpModelMorf->modelCalc(); + fopAcM_SetMtx(this, model->getBaseTRMtx()); } -/* ############################################################################################## */ -/* 805ADF50-805ADF54 000000 0004+00 7/7 0/0 0/0 .rodata @3850 */ -SECTION_RODATA static f32 const lit_3850 = 10.0f; -COMPILER_STRIP_GATE(0x805ADF50, &lit_3850); - -/* 805ADF54-805ADF58 000004 0004+00 0/1 0/0 0/0 .rodata @3851 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3851 = 6000.0f; -COMPILER_STRIP_GATE(0x805ADF54, &lit_3851); -#pragma pop - -/* 805ADF58-805ADF5C 000008 0004+00 2/8 0/0 0/0 .rodata @3852 */ -SECTION_RODATA static u8 const lit_3852[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x805ADF58, &lit_3852); - -/* 805ADF5C-805ADF60 00000C 0004+00 1/6 0/0 0/0 .rodata @3853 */ -SECTION_RODATA static f32 const lit_3853 = 1.0f; -COMPILER_STRIP_GATE(0x805ADF5C, &lit_3853); - /* 805AB2E8-805AB3D0 0002C8 00E8+00 1/1 0/0 0/0 .text draw__9daL7ODR_cFv */ -void daL7ODR_c::draw() { - // NONMATCHING +int daL7ODR_c::draw() { + if (field_0x8b4) { + return 1; + } + + J3DModel* model = mpModelMorf->getModel(); + + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(model, &tevStr); + mpModelMorf->entryDL(); + + cXyz sp8; + sp8.set(current.pos.x, 10.0f + current.pos.y, current.pos.z); + mShadowKey = dComIfGd_setShadow(mShadowKey, 0, model, &sp8, 6000.0f + BREG_F(19), 0.0f, current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + return 1; } /* 805AB3D0-805AB3F0 0003B0 0020+00 1/0 0/0 0/0 .text daL7ODR_Draw__FP9daL7ODR_c */ -static void daL7ODR_Draw(daL7ODR_c* param_0) { - // NONMATCHING +static int daL7ODR_Draw(daL7ODR_c* i_this) { + return i_this->draw(); } -/* ############################################################################################## */ -/* 805AE0B8-805AE0C4 -00001 000C+00 1/1 0/0 0/0 .data @3871 */ -SECTION_DATA static void* lit_3871[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)pl_walk__9daL7ODR_cFv, -}; - /* 805AB3F0-805AB520 0003D0 0130+00 1/0 0/0 0/0 .text wait__9daL7ODR_cFv */ void daL7ODR_c::wait() { - // NONMATCHING + if (field_0x888 == 0) { + field_0x888++; + } else if (field_0x888 != -1) { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + camera_class* camera0 = dComIfGp_getCamera(0); + + if (eventInfo.checkCommandDemoAccrpt()) { + dComIfGs_onZoneSwitch(Z2SE_DPD_SCREEN_OUT, fopAcM_GetRoomNo(this)); + camera->mCamera.Stop(); + camera->mCamera.SetTrimSize(3); + setAction(&daL7ODR_c::pl_walk); + return; + } + + if (check_start()) { + fopAcM_orderPotentialEvent(this, 2, 0xFFFF, 0); + eventInfo.onCondition(2); + mDemoCamEye = camera0->lookat.eye; + mDemoCamCenter = camera0->lookat.center; + } + } } -/* ############################################################################################## */ -/* 805ADF60-805ADF64 000010 0004+00 0/1 0/0 0/0 .rodata @4115 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4115 = -790.0f; -COMPILER_STRIP_GATE(0x805ADF60, &lit_4115); -#pragma pop - -/* 805ADF64-805ADF68 000014 0004+00 0/1 0/0 0/0 .rodata @4116 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4116 = 3125.0f; -COMPILER_STRIP_GATE(0x805ADF64, &lit_4116); -#pragma pop - -/* 805ADF68-805ADF6C 000018 0004+00 0/1 0/0 0/0 .rodata @4117 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4117 = -900.0f; -COMPILER_STRIP_GATE(0x805ADF68, &lit_4117); -#pragma pop - -/* 805ADF6C-805ADF70 00001C 0004+00 0/1 0/0 0/0 .rodata @4118 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4118 = 500.0f; -COMPILER_STRIP_GATE(0x805ADF6C, &lit_4118); -#pragma pop - -/* 805ADF70-805ADF74 000020 0004+00 0/1 0/0 0/0 .rodata @4119 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4119 = 4800.0f; -COMPILER_STRIP_GATE(0x805ADF70, &lit_4119); -#pragma pop - -/* 805ADF74-805ADF78 000024 0004+00 0/1 0/0 0/0 .rodata @4120 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4120 = -910.0f; -COMPILER_STRIP_GATE(0x805ADF74, &lit_4120); -#pragma pop - -/* 805ADF78-805ADF7C 000028 0004+00 0/1 0/0 0/0 .rodata @4121 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4121 = 520.0f; -COMPILER_STRIP_GATE(0x805ADF78, &lit_4121); -#pragma pop - -/* 805ADF7C-805ADF80 00002C 0004+00 0/1 0/0 0/0 .rodata @4122 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4122 = 5500.0f; -COMPILER_STRIP_GATE(0x805ADF7C, &lit_4122); -#pragma pop - -/* 805ADF80-805ADF84 000030 0004+00 0/1 0/0 0/0 .rodata @4123 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4123 = 64.0f; -COMPILER_STRIP_GATE(0x805ADF80, &lit_4123); -#pragma pop - -/* 805ADF84-805ADF88 000034 0004+00 0/2 0/0 0/0 .rodata @4124 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4124 = 2.0f; -COMPILER_STRIP_GATE(0x805ADF84, &lit_4124); -#pragma pop - -/* 805ADF88-805ADF8C 000038 0004+00 0/1 0/0 0/0 .rodata @4125 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4125 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x805ADF88, &lit_4125); -#pragma pop - -/* 805ADF8C-805ADF90 00003C 0004+00 0/1 0/0 0/0 .rodata @4126 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4126 = 120.0f; -COMPILER_STRIP_GATE(0x805ADF8C, &lit_4126); -#pragma pop - -/* 805ADF90-805ADF94 000040 0004+00 0/1 0/0 0/0 .rodata @4127 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4127 = 2300.0f; -COMPILER_STRIP_GATE(0x805ADF90, &lit_4127); -#pragma pop - -/* 805ADF94-805ADF98 000044 0004+00 0/2 0/0 0/0 .rodata @4128 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4128 = 100.0f; -COMPILER_STRIP_GATE(0x805ADF94, &lit_4128); -#pragma pop - -/* 805ADF98-805ADF9C 000048 0004+00 0/3 0/0 0/0 .rodata @4129 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4129 = 3000.0f; -COMPILER_STRIP_GATE(0x805ADF98, &lit_4129); -#pragma pop - -/* 805ADF9C-805ADFA0 00004C 0004+00 0/2 0/0 0/0 .rodata @4130 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4130 = 1400.0f; -COMPILER_STRIP_GATE(0x805ADF9C, &lit_4130); -#pragma pop - -/* 805AE0C4-805AE0D0 -00001 000C+00 1/1 0/0 0/0 .data @3940 */ -SECTION_DATA static void* lit_3940[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)dr_fly__9daL7ODR_cFv, -}; - -/* 805AE0D0-805AE0DC -00001 000C+00 1/1 0/0 0/0 .data @3947 */ -SECTION_DATA static void* lit_3947[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)dr_fly__9daL7ODR_cFv, -}; - /* 805AB520-805ABC2C 000500 070C+00 1/0 0/0 0/0 .text pl_walk__9daL7ODR_cFv */ void daL7ODR_c::pl_walk() { - // NONMATCHING + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + camera_class* camera0 = dComIfGp_getCamera(0); + daPy_py_c* player = daPy_getPlayerActorClass(); + + if (field_0x888 == 0) { + cXyz player_pos(-790.0f, 0.0f, 3125.0f); + cXyz demo_pos(0.0f, 0.0f, 0.0f); + csXyz angle; + angle.y = cLib_targetAngleY(&player_pos, &demo_pos); + + mDemoCamCenter.set(-900.0f, 500.0f, 4800.0f); + mDemoCamEye.set(-910.0f, 520.0f, 5500.0f); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, 64.0f, 0); + + player->changeOriginalDemo(); + player->setPlayerPosAndAngle(&player_pos, angle.y, 0); + player->changeDemoMoveAngle(angle.y); + player->changeDemoPos0(&demo_pos); + player->changeDemoMode(4, 0, 0, 0); + + field_0x8b5 = 5; + daNpcF_getPlayerInfoFromPlayerList(2, fopAcM_GetRoomNo(this), player_pos, angle); + dComIfGs_setRestartRoom(player_pos, angle.y, fopAcM_GetRoomNo(this)); + Z2GetAudioMgr()->subBgmStart(Z2BGM_DRAGON_D01); + + field_0x8b7 = 1; + field_0x888++; + } else if (field_0x888 != -1) { + if (field_0x888 == 1) { + if (field_0x8b5 == 0) { + cXyz player_pos(-790.0f, 0.0f, 3125.0f); + cXyz demo_pos(0.0f, 0.0f, 0.0f); + s16 angle = cLib_targetAngleY(&player_pos, &demo_pos); + + player->setPlayerPosAndAngle(&player_pos, angle, 0); + player->changeDemoMoveAngle(angle); + player->changeDemoPos0(&demo_pos); + player->changeDemoMode(2, 0, 0, 0); + + field_0x8b5 = 90; + field_0x898 = 2.0f; + + dScnKy_env_light_c* kankyo = dKy_getEnvlight(); + kankyo->field_0x12cc = 1; + field_0x888++; + } + } else if (field_0x888 == 2) { + if (field_0x8b5 != 0) { + if (field_0x8b5 <= 10) { + cLib_chaseF(&field_0x898, 0.0f, 0.2f); + } + mDemoCamCenter.y += field_0x898; + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, 64.0f, 0); + } else { + field_0x8b5 = 60; + field_0x888++; + } + } else if (field_0x888 == 3) { + if (field_0x8b5 == 0) { + mDemoCamCenter.set(0.0f, 120.0f, 2300.0f); + mDemoCamEye.set(0.0f, 100.0f, 3000.0f); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, 64.0f, 0); + field_0x8b5 = 20; + field_0x888++; + } else if (field_0x8b5 == 1) { + cXyz player_pos(100.0f, 0.0f, 3000.0f); + cXyz demo_pos(0.0f, 0.0f, 1400.0f); + s16 angle = cLib_targetAngleY(&player_pos, &demo_pos); + + player->setPlayerPosAndAngle(&player_pos, angle, 0); + player->changeDemoMoveAngle(angle); + player->changeDemoPos0(&demo_pos); + player->changeDemoMode(4, 0, 0, 0); + } + } else if (field_0x888 == 4) { + cXyz player_pos(100.0f, 0.0f, 3000.0f); + cXyz demo_pos(0.0f, 0.0f, 1400.0f); + s16 angle = cLib_targetAngleY(&player_pos, &demo_pos); + + if (field_0x8b5 == 0) { + player->setPlayerPosAndAngle(&player_pos, angle, 0); + player->changeDemoMoveAngle(angle); + player->changeDemoPos0(&demo_pos); + player->changeDemoMode(2, 0, 0, 0); + + field_0x8b5 = 70; + field_0x888++; + } + } else if (field_0x888 == 5) { + if (field_0x8b5 == 0) { + field_0x8b5 = 20; + player->changeDemoMode(0, 0, 0, 0); + field_0x888++; + } + } else if (field_0x888 == 6) { + if (field_0x8b5 == 0) { + field_0x8b5 = 92; + player->changeDemoMode(0x14, 0, 0, 0); + field_0x888++; + } + } else if (field_0x888 == 7) { + if (field_0x8b5 == 0) { + field_0x8b6 = 150; + player->changeDemoMode(2, 0, 0, 0); + setDrAction(&daL7ODR_c::dr_fly); + field_0x888 = 9; + } + } else if (field_0x888 == 8) { + if (field_0x8b5 == 0) { + setDrAction(&daL7ODR_c::dr_fly); + field_0x8b6 = 90; + field_0x888++; + } + } else if (field_0x8b6 == 0) { + cXyz player_pos(player->current.pos); + if (player_pos.x) { + cLib_chaseF(&player_pos.x, 0.0f, 1.0f); + player->setPlayerPosAndAngle(&player_pos, -0x8000, 0); + player->changeDemoMoveAngle(-0x8000); + player->changeDemoPos0(&player_pos); + } + } + } } /* 805ABC2C-805ABCF8 000C0C 00CC+00 1/1 0/0 0/0 .text setZoomOutCamPos__9daL7ODR_cFR4cXyzR4cXyzf */ void daL7ODR_c::setZoomOutCamPos(cXyz& param_0, cXyz& param_1, f32 param_2) { - // NONMATCHING + csXyz spC; + spC.x = -cLib_targetAngleX(¶m_1, ¶m_0); + spC.y = cLib_targetAngleY(¶m_1, ¶m_0); + spC.z = 0; + + mDoMtx_stack_c::transS(param_1); + mDoMtx_stack_c::YrotM(spC.y); + mDoMtx_stack_c::XrotM(spC.x); + mDoMtx_stack_c::transM(0.0f, 0.0f, param_2); + mDoMtx_stack_c::multVecZero(¶m_0); } -/* ############################################################################################## */ -/* 805ADFA0-805ADFA4 000050 0004+00 0/1 0/0 0/0 .rodata @4181 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4181 = 5000.0f; -COMPILER_STRIP_GATE(0x805ADFA0, &lit_4181); -#pragma pop - -/* 805ADFA4-805ADFA8 000054 0004+00 0/1 0/0 0/0 .rodata @4182 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4182 = 7000.0f; -COMPILER_STRIP_GATE(0x805ADFA4, &lit_4182); -#pragma pop - -/* 805ADFA8-805ADFAC 000058 0004+00 0/2 0/0 0/0 .rodata @4183 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4183 = 3.0f; -COMPILER_STRIP_GATE(0x805ADFA8, &lit_4183); -#pragma pop - -/* 805ADFAC-805ADFB0 00005C 0004+00 0/2 0/0 0/0 .rodata @4184 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4184 = -1.0f; -COMPILER_STRIP_GATE(0x805ADFAC, &lit_4184); -#pragma pop - -/* 805ADFB0-805ADFB4 000060 0004+00 0/3 0/0 0/0 .rodata @4185 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4185 = 20.0f; -COMPILER_STRIP_GATE(0x805ADFB0, &lit_4185); -#pragma pop - -/* 805AE0AC-805AE0AC 00015C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_805AE0AC = "B_dr"; -#pragma pop - /* 805ABCF8-805ABE0C 000CD8 0114+00 1/0 0/0 0/0 .text dr_wait__9daL7ODR_cFv */ void daL7ODR_c::dr_wait() { - // NONMATCHING + if (field_0x88c == 0) { + cXyz sp8(0.0f, 0.0f, 0.0f); + field_0x8b4 = 1; + + current.pos.set(5000.0f * cM_ssin(0x400), 7000.0f, 5000.0f * cM_scos(0x400)); + current.angle.y = cLib_targetAngleY(¤t.pos, &sp8) + 0x4000; + + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_dr", 0x2F), 2, 3.0f, 1.0f, 0.0f, -1.0f); + field_0x890 = 0x2F; + mpModelMorf->setFrame(20.0f); + mpModelMorf->setPlaySpeed(0.0f); + + speedF = 0.0f; + gravity = 0.0f; + field_0x88c++; + } } -/* ############################################################################################## */ -/* 805ADFB4-805ADFB8 000064 0004+00 0/1 0/0 0/0 .rodata @4635 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4635 = 600.0f; -COMPILER_STRIP_GATE(0x805ADFB4, &lit_4635); -#pragma pop - -/* 805ADFB8-805ADFBC 000068 0004+00 0/1 0/0 0/0 .rodata @4636 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4636 = 160.0f; -COMPILER_STRIP_GATE(0x805ADFB8, &lit_4636); -#pragma pop - -/* 805ADFBC-805ADFC0 00006C 0004+00 0/1 0/0 0/0 .rodata @4637 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4637 = 400.0f; -COMPILER_STRIP_GATE(0x805ADFBC, &lit_4637); -#pragma pop - -/* 805ADFC0-805ADFC4 000070 0004+00 0/1 0/0 0/0 .rodata @4638 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4638 = 60.0f; -COMPILER_STRIP_GATE(0x805ADFC0, &lit_4638); -#pragma pop - -/* 805ADFC4-805ADFC8 000074 0004+00 0/1 0/0 0/0 .rodata @4639 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4639 = 8.0f; -COMPILER_STRIP_GATE(0x805ADFC4, &lit_4639); -#pragma pop - -/* 805ADFC8-805ADFCC 000078 0004+00 0/1 0/0 0/0 .rodata @4640 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4640 = 1800.0f; -COMPILER_STRIP_GATE(0x805ADFC8, &lit_4640); -#pragma pop - -/* 805ADFCC-805ADFD0 00007C 0004+00 0/1 0/0 0/0 .rodata @4641 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4641 = 140.0f; -COMPILER_STRIP_GATE(0x805ADFCC, &lit_4641); -#pragma pop - -/* 805ADFD0-805ADFD4 000080 0004+00 0/1 0/0 0/0 .rodata @4642 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4642 = 4.0f; -COMPILER_STRIP_GATE(0x805ADFD0, &lit_4642); -#pragma pop - -/* 805ADFD4-805ADFD8 000084 0004+00 0/1 0/0 0/0 .rodata @4643 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4643 = 80.0f; -COMPILER_STRIP_GATE(0x805ADFD4, &lit_4643); -#pragma pop - -/* 805ADFD8-805ADFDC 000088 0004+00 0/1 0/0 0/0 .rodata @4644 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4644 = 0.5f; -COMPILER_STRIP_GATE(0x805ADFD8, &lit_4644); -#pragma pop - -/* 805ADFDC-805ADFE0 00008C 0004+00 0/1 0/0 0/0 .rodata @4645 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4645 = -1400.0f; -COMPILER_STRIP_GATE(0x805ADFDC, &lit_4645); -#pragma pop - -/* 805ADFE0-805ADFE4 000090 0004+00 0/1 0/0 0/0 .rodata @4646 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4646 = 33.0f; -COMPILER_STRIP_GATE(0x805ADFE0, &lit_4646); -#pragma pop - -/* 805ADFE4-805ADFE8 000094 0004+00 0/1 0/0 0/0 .rodata @4647 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4647 = 2674.0f; -COMPILER_STRIP_GATE(0x805ADFE4, &lit_4647); -#pragma pop - -/* 805ADFE8-805ADFEC 000098 0004+00 0/1 0/0 0/0 .rodata @4648 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4648 = 3038.0f; -COMPILER_STRIP_GATE(0x805ADFE8, &lit_4648); -#pragma pop - -/* 805ADFEC-805ADFF0 00009C 0004+00 0/1 0/0 0/0 .rodata @4649 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4649 = 240.0f; -COMPILER_STRIP_GATE(0x805ADFEC, &lit_4649); -#pragma pop - -/* 805ADFF0-805ADFF4 0000A0 0004+00 0/1 0/0 0/0 .rodata @4650 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4650 = 90.0f; -COMPILER_STRIP_GATE(0x805ADFF0, &lit_4650); -#pragma pop - -/* 805ADFF4-805ADFF8 0000A4 0004+00 0/1 0/0 0/0 .rodata @4651 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4651 = -140.0f; -COMPILER_STRIP_GATE(0x805ADFF4, &lit_4651); -#pragma pop - -/* 805ADFF8-805ADFFC 0000A8 0004+00 0/1 0/0 0/0 .rodata @4652 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4652 = 2045.0f; -COMPILER_STRIP_GATE(0x805ADFF8, &lit_4652); -#pragma pop - -/* 805ADFFC-805AE000 0000AC 0004+00 0/1 0/0 0/0 .rodata @4653 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4653 = 460.0f; -COMPILER_STRIP_GATE(0x805ADFFC, &lit_4653); -#pragma pop - -/* 805AE000-805AE004 0000B0 0004+00 0/1 0/0 0/0 .rodata @4654 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4654 = 2800.0f; -COMPILER_STRIP_GATE(0x805AE000, &lit_4654); -#pragma pop - -/* 805AE004-805AE008 0000B4 0004+00 0/2 0/0 0/0 .rodata @4655 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4655 = 40.0f; -COMPILER_STRIP_GATE(0x805AE004, &lit_4655); -#pragma pop - -/* 805AE008-805AE00C 0000B8 0004+00 0/1 0/0 0/0 .rodata @4656 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4656 = 220.0f; -COMPILER_STRIP_GATE(0x805AE008, &lit_4656); -#pragma pop - -/* 805AE00C-805AE010 0000BC 0004+00 0/1 0/0 0/0 .rodata @4657 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4657 = 1200.0f; -COMPILER_STRIP_GATE(0x805AE00C, &lit_4657); -#pragma pop - -/* 805AE010-805AE014 0000C0 0004+00 0/1 0/0 0/0 .rodata @4658 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4658 = 4.5f; -COMPILER_STRIP_GATE(0x805AE010, &lit_4658); -#pragma pop - -/* 805AE014-805AE018 0000C4 0004+00 0/1 0/0 0/0 .rodata @4659 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4659 = 85.0f; -COMPILER_STRIP_GATE(0x805AE014, &lit_4659); -#pragma pop - -/* 805AE018-805AE01C 0000C8 0004+00 0/1 0/0 0/0 .rodata @4660 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4660 = 800.0f; -COMPILER_STRIP_GATE(0x805AE018, &lit_4660); -#pragma pop - -/* 805AE01C-805AE020 0000CC 0004+00 0/1 0/0 0/0 .rodata @4661 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4661 = 1720.0f; -COMPILER_STRIP_GATE(0x805AE01C, &lit_4661); -#pragma pop - -/* 805AE020-805AE024 0000D0 0004+00 0/1 0/0 0/0 .rodata @4662 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4662 = 135.0f; -COMPILER_STRIP_GATE(0x805AE020, &lit_4662); -#pragma pop - -/* 805AE024-805AE028 0000D4 0004+00 0/1 0/0 0/0 .rodata @4663 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4663 = -21.0f; -COMPILER_STRIP_GATE(0x805AE024, &lit_4663); -#pragma pop - -/* 805AE028-805AE02C 0000D8 0004+00 0/1 0/0 0/0 .rodata @4664 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4664 = 128.0f; -COMPILER_STRIP_GATE(0x805AE028, &lit_4664); -#pragma pop - -/* 805AE02C-805AE030 0000DC 0004+00 0/1 0/0 0/0 .rodata @4665 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4665 = -930.0f; -COMPILER_STRIP_GATE(0x805AE02C, &lit_4665); -#pragma pop - -/* 805AE030-805AE034 0000E0 0004+00 0/1 0/0 0/0 .rodata @4666 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4666 = 1000.0f; -COMPILER_STRIP_GATE(0x805AE030, &lit_4666); -#pragma pop - -/* 805AE034-805AE038 0000E4 0004+00 0/1 0/0 0/0 .rodata @4667 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4667 = 3072.0f; -COMPILER_STRIP_GATE(0x805AE034, &lit_4667); -#pragma pop - -/* 805AE038-805AE03C 0000E8 0004+00 0/1 0/0 0/0 .rodata @4668 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4668 = 96.0f; -COMPILER_STRIP_GATE(0x805AE038, &lit_4668); -#pragma pop - -/* 805AE03C-805AE040 0000EC 0004+00 0/1 0/0 0/0 .rodata @4669 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4669 = 3.0f / 10.0f; -COMPILER_STRIP_GATE(0x805AE03C, &lit_4669); -#pragma pop - -/* 805AE040-805AE044 0000F0 0004+00 0/1 0/0 0/0 .rodata @4670 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4670 = -400.0f; -COMPILER_STRIP_GATE(0x805AE040, &lit_4670); -#pragma pop - -/* 805AE044-805AE048 0000F4 0004+00 0/1 0/0 0/0 .rodata @4671 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4671 = 5.0f; -COMPILER_STRIP_GATE(0x805AE044, &lit_4671); -#pragma pop - -/* 805AE048-805AE04C 0000F8 0004+00 0/1 0/0 0/0 .rodata @4672 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4672 = 35.0f; -COMPILER_STRIP_GATE(0x805AE048, &lit_4672); -#pragma pop - -/* 805AE04C-805AE050 0000FC 0004+00 0/1 0/0 0/0 .rodata @4673 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4673 = 1700.0f; -COMPILER_STRIP_GATE(0x805AE04C, &lit_4673); -#pragma pop - -/* 805AE050-805AE054 000100 0004+00 0/1 0/0 0/0 .rodata @4674 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4674 = -680.0f; -COMPILER_STRIP_GATE(0x805AE050, &lit_4674); -#pragma pop - -/* 805AE054-805AE058 000104 0004+00 0/1 0/0 0/0 .rodata @4675 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4675 = 22.0f; -COMPILER_STRIP_GATE(0x805AE054, &lit_4675); -#pragma pop - -/* 805AE058-805AE05C 000108 0004+00 0/1 0/0 0/0 .rodata @4676 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4676 = 59.0f; -COMPILER_STRIP_GATE(0x805AE058, &lit_4676); -#pragma pop - -/* 805AE05C-805AE060 00010C 0004+00 0/1 0/0 0/0 .rodata @4677 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4677 = 92.0f; -COMPILER_STRIP_GATE(0x805AE05C, &lit_4677); -#pragma pop - -/* 805AE060-805AE064 000110 0004+00 0/1 0/0 0/0 .rodata @4678 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4678 = 125.0f; -COMPILER_STRIP_GATE(0x805AE060, &lit_4678); -#pragma pop - -/* 805AE064-805AE068 000114 0004+00 0/1 0/0 0/0 .rodata @4679 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4679 = 29.0f; -COMPILER_STRIP_GATE(0x805AE064, &lit_4679); -#pragma pop - -/* 805AE068-805AE06C 000118 0004+00 0/1 0/0 0/0 .rodata @4680 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4680 = 132.0f; -COMPILER_STRIP_GATE(0x805AE068, &lit_4680); -#pragma pop - -/* 805AE06C-805AE070 00011C 0004+00 0/1 0/0 0/0 .rodata @4681 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4681 = 200.0f; -COMPILER_STRIP_GATE(0x805AE06C, &lit_4681); -#pragma pop - -/* 805AE070-805AE074 000120 0004+00 0/1 0/0 0/0 .rodata @4682 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4682 = 7.0f; -COMPILER_STRIP_GATE(0x805AE070, &lit_4682); -#pragma pop - -/* 805AE074-805AE078 000124 0004+00 0/1 0/0 0/0 .rodata @4683 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4683 = 37.0f; -COMPILER_STRIP_GATE(0x805AE074, &lit_4683); -#pragma pop - -/* 805AE078-805AE07C 000128 0004+00 0/1 0/0 0/0 .rodata @4684 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4684 = 62.0f; -COMPILER_STRIP_GATE(0x805AE078, &lit_4684); -#pragma pop - -/* 805AE07C-805AE080 00012C 0004+00 0/1 0/0 0/0 .rodata @4685 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4685 = 2200.0f; -COMPILER_STRIP_GATE(0x805AE07C, &lit_4685); -#pragma pop - /* 805ABE0C-805AD7B4 000DEC 19A8+00 2/0 0/0 0/0 .text dr_fly__9daL7ODR_cFv */ void daL7ODR_c::dr_fly() { - // NONMATCHING + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + camera_class* camera0 = dComIfGp_getCamera(0); + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz sp264(0.0f, 0.0f, 0.0f); + + if (field_0x88c == 0) { + field_0x8b4 = 0; + mpModelMorf->setPlaySpeed(1.0f); + + field_0x898 = 600.0f; + mDemoCamCenter = player->current.pos; + mDemoCamCenter.y += 160.0f; + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(current.angle); + mDoMtx_stack_c::transM(0.0f, 0.0f, 1400.0f); + mDoMtx_stack_c::multVecZero(&mDemoCamEye); + mDemoCamEye.y += 400.0f; + setZoomOutCamPos(mDemoCamEye, mDemoCamCenter, field_0x898); + + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + speedF = 60.0f; + field_0x8b5 = 60; + field_0x88c++; + } else if (field_0x88c != -1) { + if (field_0x88c == 1) { + cLib_chaseAngleS(¤t.angle.x, 0x800, 0x10); + current.angle.y = cLib_targetAngleY(¤t.pos, &sp264) + 0x4000; + speed.y = -speedF * cM_ssin(current.angle.x); + mAcch.CrrPos(dComIfG_Bgsp()); + fopAcM_posMoveF(this, NULL); + + mDemoCamCenter = player->current.pos; + mDemoCamCenter.y += 160.0f; + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(current.angle); + mDoMtx_stack_c::transM(0.0f, 0.0f, 1400.0f); + mDoMtx_stack_c::multVecZero(&mDemoCamEye); + mDemoCamEye.y += 400.0f; + setZoomOutCamPos(mDemoCamEye, mDemoCamCenter, field_0x898); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + + if (8.0f == mpModelMorf->getFrame()) { + mSound.startCreatureSound(Z2SE_EN_DR_WING, 0, -1); + } + + if (field_0x8b5 == 0) { + field_0x89c = 0.0f; + field_0x88c++; + } + } else if (field_0x88c == 2) { + cLib_chaseAngleS(¤t.angle.x, 0x800, 0x10); + current.angle.y = cLib_targetAngleY(¤t.pos, &sp264) + 0x4000; + speed.y = -speedF * cM_ssin(current.angle.x); + mAcch.CrrPos(dComIfG_Bgsp()); + fopAcM_posMoveF(this, NULL); + + mDemoCamCenter = player->current.pos; + mDemoCamCenter.y += 160.0f; + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(current.angle); + mDoMtx_stack_c::transM(0.0f, 0.0f, 1400.0f); + mDoMtx_stack_c::multVecZero(&mDemoCamEye); + mDemoCamEye.y += 400.0f; + + f32 temp_f30 = mDemoCamCenter.abs(mDemoCamEye) - 1800.0f; + cLib_chaseF(&field_0x89c, 140.0f, 2.0f); + cLib_chaseF(&field_0x898, temp_f30, field_0x89c); + setZoomOutCamPos(mDemoCamEye, mDemoCamCenter, field_0x898); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + + if (8.0f == mpModelMorf->getFrame()) { + mSound.startCreatureSound(Z2SE_EN_DR_WING, 0, -1); + } + + if (field_0x898 == temp_f30) { + field_0x89c = 140.0f; + field_0x88c++; + } + } else if (field_0x88c == 3) { + cXyz sp258; + cLib_chaseAngleS(¤t.angle.x, 0x800, 0x10); + current.angle.y = cLib_targetAngleY(¤t.pos, &sp264) + 0x4000; + speed.y = -speedF * cM_ssin(current.angle.x); + mAcch.CrrPos(dComIfG_Bgsp()); + fopAcM_posMoveF(this, NULL); + + sp258 = player->current.pos; + sp258.y += 160.0f; + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(current.angle); + mDoMtx_stack_c::transM(0.0f, 0.0f, 1400.0f); + mDoMtx_stack_c::multVecZero(&mDemoCamEye); + mDemoCamEye.y += 400.0f; + + cLib_chaseF(&field_0x89c, 0.0f, 4.0f); + field_0x898 += field_0x89c; + setZoomOutCamPos(mDemoCamEye, sp258, field_0x898); + cLib_chasePos(&mDemoCamCenter, field_0x830, 100.0f); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + + if (8.0f == mpModelMorf->getFrame()) { + mSound.startCreatureSound(Z2SE_EN_DR_WING, 0, -1); + } + + if (!field_0x89c && field_0x830 == mDemoCamCenter) { + field_0x898 = 0.0f; + field_0x89c = 1400.0f; + field_0x8a0 = 0.0f; + field_0x8a4 = 0.0f; + field_0x88c++; + } + } else if (field_0x88c == 4) { + cLib_chaseAngleS(¤t.angle.x, 0x800, 0x10); + current.angle.y = cLib_targetAngleY(¤t.pos, &sp264) + 0x4000; + cLib_chaseF(&speedF, 80.0f, 0.5f); + speed.y = -speedF * cM_ssin(current.angle.x); + mAcch.CrrPos(dComIfG_Bgsp()); + fopAcM_posMoveF(this, NULL); + + cLib_chasePos(&mDemoCamCenter, field_0x830, 100.0f); + cLib_chaseF(&field_0x8a0, 100.0f, 0.5f); + cLib_chaseF(&field_0x89c, -1400.0f, field_0x8a0); + + cXyz sp24C; + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(current.angle); + mDoMtx_stack_c::transM(0.0f, 0.0f, field_0x89c); + mDoMtx_stack_c::multVecZero(&sp24C); + sp24C.y += 400.0f; + + cLib_chaseF(&field_0x898, 100.0f, 1.0f); + cLib_chasePos(&mDemoCamEye, sp24C, field_0x898); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + + if (8.0f == mpModelMorf->getFrame()) { + mSound.startCreatureSound(Z2SE_EN_DR_WING, 0, -1); + } + + if (current.pos.z > 0.0f) { + field_0x88c++; + } + } else if (field_0x88c == 5) { + cLib_chaseAngleS(¤t.angle.x, 0x800, 0x10); + cLib_chaseAngleS(¤t.angle.y, 0, 0x80); + cLib_chaseF(&speedF, 80.0f, 0.5f); + mAcch.CrrPos(dComIfG_Bgsp()); + fopAcM_posMoveF(this, NULL); + + mDemoCamCenter = field_0x830; + cLib_chaseF(&field_0x8a0, 100.0f, 0.5f); + cLib_chaseF(&field_0x89c, -1400.0f, field_0x8a0); + + cXyz sp240; + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(current.angle); + mDoMtx_stack_c::transM(0.0f, 0.0f, field_0x89c); + mDoMtx_stack_c::multVecZero(&sp240); + sp240.y += 400.0f; + + cLib_chaseF(&field_0x898, 100.0f, 1.0f); + cLib_chasePos(&mDemoCamEye, sp240, field_0x898); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + + if (8.0f == mpModelMorf->getFrame()) { + mSound.startCreatureSound(Z2SE_EN_DR_WING, 0, -1); + } + + if (mpModelMorf->getFrame() >= 33.0f) { + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_dr", 0x30), 0, 3.0f, 1.0f, 0.0f, -1.0f); + field_0x890 = 0x30; + current.angle.y = 0; + field_0x88c++; + } + } else if (field_0x88c == 6) { + cLib_chaseAngleS(¤t.angle.x, 0, 0x20); + speed.y = -speedF * cM_ssin(current.angle.x); + mAcch.CrrPos(dComIfG_Bgsp()); + fopAcM_posMoveF(this, NULL); + + mDemoCamCenter = field_0x830; + cLib_chaseF(&field_0x8a0, 100.0f, 0.5f); + cLib_chaseF(&field_0x89c, -1400.0f, field_0x8a0); + + cXyz sp234; + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(current.angle); + mDoMtx_stack_c::transM(0.0f, 0.0f, field_0x89c); + mDoMtx_stack_c::multVecZero(&sp234); + sp234.y += 400.0f; + + cLib_chaseF(&field_0x898, 100.0f, 1.0f); + cLib_chasePos(&mDemoCamEye, sp234, field_0x898); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + + if (field_0x890 == 0x30) { + if (mpModelMorf->isStop()) { + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_dr", 0x31), 2, 3.0f, 1.0f, 0.0f, -1.0f); + field_0x890 = 0x31; + } else if (8.0f == mpModelMorf->getFrame()) { + mSound.startCreatureSound(Z2SE_EN_DR_WING, 0, -1); + } + } else if (field_0x890 == 0x31) { + mSound.startCreatureSoundLevel(Z2SE_EN_DR_GLIDE, 0, -1); + } + + if (current.pos.z >= 3000.0f) { + field_0x8b5 = 10; + field_0x88c++; + } + } else if (field_0x88c == 7) { + cXyz sp228(2674.0f, 0.0f, 3038.0f); + + if (field_0x890 == 0x30) { + if (mpModelMorf->isStop()) { + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_dr", 0x31), 2, 3.0f, 1.0f, 0.0f, -1.0f); + field_0x890 = 0x31; + } else if (8.0f == mpModelMorf->getFrame()) { + mSound.startCreatureSound(Z2SE_EN_DR_WING, 0, -1); + } + } else if (field_0x890 == 0x31) { + mSound.startCreatureSoundLevel(Z2SE_EN_DR_GLIDE, 0, -1); + } + + cLib_chaseAngleS(¤t.angle.x, 0x800, 0x10); + sp228 += current.pos; + sp228 /= 2.0f; + + if ((u16)current.angle.y > 0xE000) { + cLib_addCalcAngleS(¤t.angle.z, 0x2000, 30, 0x800, 0x40); + } else { + cLib_addCalcAngleS(¤t.angle.z, 0, 60, 0x800, 0x40); + cLib_chaseF(&speedF, 240.0f, 1.0f); + } + + current.angle.y = cLib_targetAngleY(¤t.pos, &sp228) + 0x4000; + speed.y = -speedF * cM_ssin(current.angle.x); + mAcch.CrrPos(dComIfG_Bgsp()); + fopAcM_posMoveF(this, NULL); + mDemoCamCenter = field_0x830; + + cXyz sp21C; + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(current.angle); + mDoMtx_stack_c::transM(0.0f, 0.0f, -1400.0f); + mDoMtx_stack_c::multVecZero(&sp21C); + sp21C.y += 400.0f; + + cLib_chasePos(&mDemoCamEye, sp21C, 90.0f); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + mSound.startCreatureSoundLevel(Z2SE_EN_DR_GLIDE, 0, -1); + + if (field_0x8b5 == 0 && (u16)current.angle.y < 0x8000) { + cXyz sp210; + current.angle.y = -0x8000; + field_0x8b4 = 1; + mpModelMorf->setPlaySpeed(0.0f); + mDemoCamCenter.set(0.0f, -140.0f, 2045.0f); + mDemoCamEye.set(0.0f, 460.0f, 2800.0f); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + + sp210.set(0.0f, 0.0f, 1400.0f); + player->changeDemoMode(0x19, 0, 0, 0); + player->setPlayerPosAndAngle(&sp210, -0x8000, 0); + player->changeDemoPos0(&sp210); + player->changeDemoMoveAngle(-0x8000); + + field_0x898 = 40.0f; + field_0x88c++; + } + } else if (field_0x88c == 8) { + cXyz sp204(0.0f, 220.0f, 1200.0f); + if (mDemoCamEye.z > 1800.0f) { + cLib_chaseF(&field_0x898, 80.0f, 2.0f); + } else { + cLib_chaseF(&field_0x898, 0.0f, 4.5f); + } + + cLib_chasePos(&mDemoCamEye, sp204, field_0x898); + mDemoCamCenter.z -= 85.0f; + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + mSound.startCreatureSoundLevel(Z2SE_EN_DR_GLIDE, 0, -1); + + if (mDemoCamEye.z <= sp204.z && !field_0x898) { + cXyz sp1F8; + field_0x8b4 = 0; + mpModelMorf->setPlaySpeed(1.0f); + field_0x8b5 = 0; + + sp1F8.set(0.0f, 0.0f, 1400.0f); + player->setPlayerPosAndAngle(&sp1F8, -0x8000, 0); + player->changeDemoPos0(&sp1F8); + player->changeDemoMoveAngle(-0x8000); + + current.pos.set(0.0f, 800.0f, 1720.0f); + current.angle.set(0x670, -0x8000, 0); + speedF = 135.0f; + speed.y = -21.0f; + field_0x88c++; + } + } else if (field_0x88c == 9) { + if (field_0x8b5 == 0) { + mpModelMorf->setPlaySpeed(1.0f); + cLib_addCalcAngleS(¤t.angle.z, 0, 0x20, 0x800, 0x40); + cLib_chaseF(&field_0x898, 128.0f, 4.0f); + cLib_chaseAngleS(¤t.angle.x, 0x200, field_0x898); + cLib_chaseF(&speedF, 240.0f, 1.0f); + speed.y = -speedF * cM_ssin(current.angle.x); + mAcch.CrrPos(dComIfG_Bgsp()); + fopAcM_posMoveF(this, NULL); + } + + mDemoCamCenter.set(0.0f, -140.0f, -930.0f); + mDemoCamEye.set(0.0f, 220.0f, 1200.0f); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + mSound.startCreatureSoundLevel(Z2SE_EN_DR_GLIDE, 0, -1); + + if (1000.0f > current.pos.z) { + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_dr", 0x45), 0, 20.0f, 1.0f, 0.0f, -1.0f); + field_0x890 = 0x45; + field_0x898 = 0.0f; + field_0x89c = 0.0f; + field_0x88c++; + } + } else if (field_0x88c == 10) { + cLib_chaseF(&field_0x898, 3072.0f, 96.0f); + cLib_chaseAngleS(¤t.angle.x, -0x4000, field_0x898); + cLib_chaseF(&field_0x89c, 8.0f, 0.3f); + cLib_chaseF(&speedF, 0.0f, field_0x89c); + speed.y = -speedF * cM_ssin(current.angle.x); + mAcch.CrrPos(dComIfG_Bgsp()); + fopAcM_posMoveF(this, NULL); + + if (field_0x830.z > -400.0f) { + mDemoCamCenter.set(0.0f, -140.0f, -930.0f); + } else { + cLib_chasePos(&mDemoCamCenter, current.pos, 100.0f); + } + + mDemoCamEye.set(0.0f, 220.0f, 1200.0f); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + mSound.startCreatureSoundLevel(Z2SE_EN_DR_GLIDE, 0, -1); + + if (current.angle.x < -0x2000) { + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_dr", 0x42), 0, 3.0f, 1.0f, 0.0f, -1.0f); + field_0x890 = 0x42; + field_0x88c++; + } + } else if (field_0x88c == 11) { + if (speedF < 40.0f) { + cLib_addCalcAngleS(¤t.angle.x, 0, 0x20, 0x800, 0x200); + } else { + cLib_chaseF(&field_0x898, 3072.0f, 96.0f); + cLib_chaseAngleS(¤t.angle.x, -0x4000, field_0x898); + } + + cLib_chaseF(&field_0x89c, 8.0f, 0.3f); + cLib_chaseF(&speedF, 0.0f, field_0x89c); + speed.y = -speedF * cM_ssin(current.angle.x); + mAcch.CrrPos(dComIfG_Bgsp()); + + s16 sp8 = current.angle.y; + current.angle.y = -0x8000; + fopAcM_posMoveF(this, NULL); + current.angle.y = sp8; + + cLib_chasePos(&mDemoCamCenter, current.pos, 100.0f); + mDemoCamEye.set(0.0f, 220.0f, 1200.0f); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + + if (5.0f == mpModelMorf->getFrame() || 35.0f == mpModelMorf->getFrame()) { + mSound.startCreatureSound(Z2SE_EN_DR_WING, 0, -1); + } + + if (mpModelMorf->isStop()) { + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_dr", 0x39), 0, 0.0f, 1.0f, 0.0f, -1.0f); + fopMsgM_messageSetDemo(0x485); + field_0x890 = 0x39; + current.angle.y = 0; + field_0x88c++; + } + } else if (field_0x88c == 12) { + cLib_chasePos(&mDemoCamCenter, field_0x830, 100.0f); + mDemoCamEye.set(0.0f, 1700.0f, -680.0f); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + + f32 temp_f1 = mpModelMorf->getFrame(); + if (22.0f == temp_f1 || 59.0f == temp_f1 || 92.0f == temp_f1 || 125.0f == temp_f1) { + mSound.startCreatureSound(Z2SE_EN_DR_WING, 0, -1); + } else if (29.0f == temp_f1) { + mSound.startCreatureVoice(Z2SE_EN_DR_V_SCREAM, -1); + } else if (33.0f == temp_f1) { + dComIfGp_getVibration().StartQuake(VIBMODE_Q_POWER4, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); + } else if (132.0f == temp_f1) { + dComIfGp_getVibration().StopQuake(0x1F); + } + + if (mpModelMorf->isStop()) { + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_dr", 0x35), 2, 3.0f, 1.0f, 0.0f, -1.0f); + field_0x890 = 0x35; + field_0x8b5 = 120; + field_0x88c++; + } + } else if (field_0x88c == 13) { + cXyz sp1EC; + cLib_chasePos(&mDemoCamCenter, field_0x830, 100.0f); + sp1EC = player->current.pos; + sp1EC.y += 200.0f; + sp1EC.z += 200.0f; + cLib_chasePos(&mDemoCamEye, sp1EC, 10.0f); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye); + + if (7.0f == mpModelMorf->getFrame()) { + mSound.startCreatureSound(Z2SE_EN_DR_WING, 0, -1); + } + + if (field_0x8b5 == 0) { + if (mpModelMorf->getFrame() >= 33.0f) { + mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("B_dr", 0x34), 0, 3.0f, 1.0f, 0.0f, -1.0f); + field_0x890 = 0x34; + field_0x88c++; + } + } + } else { + if (7.0f == mpModelMorf->getFrame() || 37.0f == mpModelMorf->getFrame()) { + mSound.startCreatureSound(Z2SE_EN_DR_WING, 0, -1); + } else if (62.0f == mpModelMorf->getFrame()) { + subtype = 1; + } + + if (mpModelMorf->isStop()) { + mDemoCamEye.x = 0.0f; + mDemoCamEye.z = 2200.0f; + camera->mCamera.Reset(mDemoCamCenter, mDemoCamEye); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + fopAcM_delete(this); + } + } + } } /* 805AD7B4-805AD854 002794 00A0+00 1/1 0/0 0/0 .text execute__9daL7ODR_cFv */ -void daL7ODR_c::execute() { - // NONMATCHING +int daL7ODR_c::execute() { + if (field_0x8b5 != 0) { + field_0x8b5--; + } + + if (field_0x8b6 != 0) { + field_0x8b6--; + } + + action(); + dr_action(); + shape_angle = current.angle; + mpModelMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + mtx_set(); + return 1; } /* 805AD854-805AD874 002834 0020+00 2/1 0/0 0/0 .text daL7ODR_Execute__FP9daL7ODR_c */ -static void daL7ODR_Execute(daL7ODR_c* param_0) { - // NONMATCHING +static int daL7ODR_Execute(daL7ODR_c* i_this) { + return i_this->execute(); } /* 805AD874-805AD87C 002854 0008+00 1/0 0/0 0/0 .text daL7ODR_IsDelete__FP9daL7ODR_c */ -static bool daL7ODR_IsDelete(daL7ODR_c* param_0) { - return true; +static int daL7ODR_IsDelete(daL7ODR_c* i_this) { + return 1; } /* 805AD87C-805AD8EC 00285C 0070+00 1/1 0/0 0/0 .text _delete__9daL7ODR_cFv */ -void daL7ODR_c::_delete() { - // NONMATCHING +int daL7ODR_c::_delete() { + fopAcM_GetID(this); + dComIfG_resDelete(&mPhase, "B_dr"); + + if (heap != NULL) { + mpModelMorf->stopZelAnime(); + } + + if (field_0x8b7 != 0) { + Z2GetAudioMgr()->subBgmStop(); + } + + return 1; } /* 805AD8EC-805AD90C 0028CC 0020+00 1/0 0/0 0/0 .text daL7ODR_Delete__FP9daL7ODR_c */ -static void daL7ODR_Delete(daL7ODR_c* param_0) { - // NONMATCHING +static int daL7ODR_Delete(daL7ODR_c* i_this) { + return i_this->_delete(); } /* 805AD90C-805ADA0C 0028EC 0100+00 1/1 0/0 0/0 .text CreateHeap__9daL7ODR_cFv */ -void daL7ODR_c::CreateHeap() { - // NONMATCHING +int daL7ODR_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("B_dr", 0x49); + JUT_ASSERT(1146, modelData != 0); + mpModelMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("B_dr", 0x2F), 2, 1.0f, 0, -1, &mSound, 0, 0x11000084); + field_0x890 = 0x2F; + if (mpModelMorf == NULL || mpModelMorf->getModel() == NULL) { + return 0; + } + + return 1; } /* 805ADA0C-805ADA2C 0029EC 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING +static int useHeapInit(fopAc_ac_c* i_this) { + daL7ODR_c* a_this = (daL7ODR_c*)i_this; + return a_this->CreateHeap(); } -/* ############################################################################################## */ -/* 805AE080-805AE088 000130 0008+00 0/1 0/0 0/0 .rodata @4727 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4727[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x805AE080, &lit_4727); -#pragma pop - -/* 805AE088-805AE090 000138 0008+00 0/1 0/0 0/0 .rodata @4728 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4728[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x805AE088, &lit_4728); -#pragma pop - -/* 805AE090-805AE098 000140 0008+00 0/1 0/0 0/0 .rodata @4729 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4729[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x805AE090, &lit_4729); -#pragma pop - -/* 805AE098-805AE09C 000148 0004+00 0/1 0/0 0/0 .rodata @4826 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4826 = -890.0f; -COMPILER_STRIP_GATE(0x805AE098, &lit_4826); -#pragma pop - -/* 805AE09C-805AE0A0 00014C 0004+00 0/1 0/0 0/0 .rodata @4827 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4827 = -690.0f; -COMPILER_STRIP_GATE(0x805AE09C, &lit_4827); -#pragma pop - -/* 805AE0A0-805AE0A4 000150 0004+00 0/1 0/0 0/0 .rodata @4828 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4828 = 3200.0f; -COMPILER_STRIP_GATE(0x805AE0A0, &lit_4828); -#pragma pop - /* 805ADA2C-805ADAC0 002A0C 0094+00 1/1 0/0 0/0 .text check_start__9daL7ODR_cFv */ -void daL7ODR_c::check_start() { - // NONMATCHING +BOOL daL7ODR_c::check_start() { + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz player_pos; + + player_pos = player->current.pos; + if (0.0f == player_pos.y && -890.0f < player_pos.x && player_pos.x < -690.0f && 3000.0f < player_pos.z && player_pos.z < 3200.0f && !dComIfGp_checkPlayerStatus0(0, 0x100) && !dComIfGp_checkPlayerStatus0(0, 0x200)) { + return TRUE; + } + + return FALSE; } -/* ############################################################################################## */ -/* 805AE0A4-805AE0A8 000154 0004+00 0/1 0/0 0/0 .rodata @4888 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4888 = -20000.0f; -COMPILER_STRIP_GATE(0x805AE0A4, &lit_4888); -#pragma pop +/* 805ADAC0-805ADCD8 002AA0 0218+00 1/1 0/0 0/0 .text create__9daL7ODR_cFv */ +int daL7ODR_c::create() { + fopAcM_SetupActor(this, daL7ODR_c); + field_0x8b7 = 0; -/* 805AE0A8-805AE0AC 000158 0004+00 0/1 0/0 0/0 .rodata @4889 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4889 = 20000.0f; -COMPILER_STRIP_GATE(0x805AE0A8, &lit_4889); -#pragma pop + int phase_state = dComIfG_resLoad(&mPhase, "B_DR"); + if (phase_state == cPhs_COMPLEATE_e) { + OS_REPORT("L7ODR PARAM %x\n", fopAcM_GetParam(this)); + OS_REPORT("L7ODR//////////////L7ODR SET 1 !!\n"); -/* 805AE0AC-805AE0AC 00015C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_805AE0B1 = "B_DR"; -#pragma pop + if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x68E0)) { + OS_REPORT("//////////////L7ODR SET NON !!\n"); + return cPhs_ERROR_e; + } -/* 805AE0DC-805AE0E8 -00001 000C+00 1/1 0/0 0/0 .data @4839 */ -SECTION_DATA static void* lit_4839[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)wait__9daL7ODR_cFv, -}; + OS_REPORT("//////////////L7ODR SET 2 !!\n"); -/* 805AE0E8-805AE0F4 -00001 000C+00 1/1 0/0 0/0 .data @4841 */ -SECTION_DATA static void* lit_4841[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)dr_wait__9daL7ODR_cFv, -}; + fopAcM_SetMtx(this, mpModelMorf->getModel()->getBaseTRMtx()); + fopAcM_SetMin(this, -20000.0f, -20000.0f, -20000.0f); + fopAcM_SetMax(this, 20000.0f, 20000.0f, 20000.0f); + + mSound.init(¤t.pos, &eyePos, 3, 1); + + health = 1; + field_0x560 = 1; + + scale.setall(1.0f); + + attention_info.distances[fopAc_attn_BATTLE_e] = 0; + attention_info.flags &= ~0x4; + + fopAcM_SetGroup(this, 0); + fopAcM_OffStatus(this, 0); + + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), NULL, NULL); + mAcchCir.SetWall(20.0f, 40.0f); + + setAction(&daL7ODR_c::wait); + setDrAction(&daL7ODR_c::dr_wait); + + daL7ODR_Execute(this); + } + + return phase_state; +} + +/* 805ADD48-805ADD68 002D28 0020+00 1/0 0/0 0/0 .text daL7ODR_Create__FP9daL7ODR_c */ +static int daL7ODR_Create(daL7ODR_c* i_this) { + return i_this->create(); +} /* 805AE0F4-805AE114 -00001 0020+00 1/0 0/0 0/0 .data l_daL7ODR_Method */ static actor_method_class l_daL7ODR_Method = { - (process_method_func)daL7ODR_Create__FP9daL7ODR_c, - (process_method_func)daL7ODR_Delete__FP9daL7ODR_c, - (process_method_func)daL7ODR_Execute__FP9daL7ODR_c, - (process_method_func)daL7ODR_IsDelete__FP9daL7ODR_c, - (process_method_func)daL7ODR_Draw__FP9daL7ODR_c, + (process_method_func)daL7ODR_Create, + (process_method_func)daL7ODR_Delete, + (process_method_func)daL7ODR_Execute, + (process_method_func)daL7ODR_IsDelete, + (process_method_func)daL7ODR_Draw, }; /* 805AE114-805AE144 -00001 0030+00 0/0 0/0 1/0 .data g_profile_L7ODR */ @@ -898,88 +878,3 @@ extern actor_process_profile_definition g_profile_L7ODR = { fopAc_ENEMY_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 805AE144-805AE168 00008C 0024+00 2/2 0/0 0/0 .data __vt__12dBgS_ObjAcch */ -SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_ObjAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_805ADD70, - (void*)NULL, - (void*)NULL, - (void*)func_805ADD68, -}; - -/* 805ADAC0-805ADCD8 002AA0 0218+00 1/1 0/0 0/0 .text create__9daL7ODR_cFv */ -void daL7ODR_c::create() { - // NONMATCHING -} - -/* 805ADCD8-805ADD48 002CB8 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* 805ADD48-805ADD68 002D28 0020+00 1/0 0/0 0/0 .text daL7ODR_Create__FP9daL7ODR_c */ -static void daL7ODR_Create(daL7ODR_c* param_0) { - // NONMATCHING -} - -/* 805ADD68-805ADD70 002D48 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_805ADD68() { - // NONMATCHING -} - -/* 805ADD70-805ADD78 002D50 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_805ADD70() { - // NONMATCHING -} - -/* 805ADD78-805ADD94 002D58 001C+00 1/1 0/0 0/0 .text changeDemoPos0__9daPy_py_cFPC4cXyz - */ -// void daPy_py_c::changeDemoPos0(cXyz const* param_0) { -extern "C" void changeDemoPos0__9daPy_py_cFPC4cXyz() { - // NONMATCHING -} - -/* 805ADD94-805ADDA8 002D74 0014+00 1/1 0/0 0/0 .text changeDemoMode__9daPy_py_cFUliis */ -// void daPy_py_c::changeDemoMode(u32 param_0, int param_1, int param_2, s16 param_3) { -extern "C" void changeDemoMode__9daPy_py_cFUliis() { - // NONMATCHING -} - -/* 805ADDA8-805ADDD8 002D88 0030+00 1/1 0/0 0/0 .text isStop__13mDoExt_morf_cFv */ -// void mDoExt_morf_c::isStop() { -extern "C" void isStop__13mDoExt_morf_cFv() { - // NONMATCHING -} - -/* 805ADDD8-805ADEEC 002DB8 0114+00 1/1 0/0 0/0 .text abs__4cXyzCFRC3Vec */ -// void cXyz::abs(Vec const& param_0) const { -extern "C" void abs__4cXyzCFRC3Vec() { - // NONMATCHING -} - -/* 805ADEEC-805ADF08 002ECC 001C+00 1/1 0/0 0/0 .text __ct__4cXyzFRC4cXyz */ -// cXyz::cXyz(cXyz const& param_0) { -extern "C" void __ct__4cXyzFRC4cXyz() { - // NONMATCHING -} - -/* 805ADF08-805ADF2C 002EE8 0024+00 1/1 0/0 0/0 .text multVecZero__14mDoMtx_stack_cFP3Vec - */ -// void mDoMtx_stack_c::multVecZero(Vec* param_0) { -extern "C" void multVecZero__14mDoMtx_stack_cFP3Vec() { - // NONMATCHING -} - -/* 805ADF2C-805ADF48 002F0C 001C+00 1/1 0/0 0/0 .text __as__4cXyzFRC4cXyz */ -// void cXyz::operator=(cXyz const& param_0) { -extern "C" void __as__4cXyzFRC4cXyz() { - // NONMATCHING -} - -/* 805AE0AC-805AE0AC 00015C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_hozelda.cpp b/src/d/actor/d_a_hozelda.cpp index 89092afcf4f..dc2728f3904 100644 --- a/src/d/actor/d_a_hozelda.cpp +++ b/src/d/actor/d_a_hozelda.cpp @@ -1,1067 +1,988 @@ // -// Generated By: dol2asm // Translation Unit: d_a_hozelda // -// #include "d/actor/d_a_hozelda.h" -#include "dolphin/types.h" -#include "dol2asm.h" +#include "d/actor/d_a_hozelda.h" +#include "d/d_com_inf_game.h" +#include "d/actor/d_a_horse.h" +#include "d/actor/d_a_b_gnd.h" +#include "d/actor/d_a_arrow.h" -// -// Types: -// - -struct request_of_phase_process_class {}; - -struct Quaternion {}; - -struct Vec {}; - -struct cXyz { - /* 80266B34 */ void operator-(Vec const&) const; - /* 80267128 */ void atan2sX_Z() const; - /* 80267150 */ void atan2sY_XZ() const; -}; - -struct mDoMtx_stack_c { - /* 8000CD64 */ void transS(cXyz const&); - /* 8000CD9C */ void transM(f32, f32, f32); - /* 8000CF7C */ void quatM(Quaternion const*); - - static u8 now[48]; -}; - -struct J3DMaterialTable {}; - -struct J3DAnmTexPattern { - /* 8032AF50 */ void getTexNo(u16, u16*) const; -}; - -struct mDoExt_btpAnm { - /* 8000D54C */ void init(J3DMaterialTable*, J3DAnmTexPattern*, int, int, f32, s16, s16); - /* 8000D5E8 */ void entry(J3DMaterialTable*, s16); -}; - -struct J3DAnmTextureSRTKey {}; - -struct mDoExt_btkAnm { - /* 8000D63C */ void init(J3DMaterialTable*, J3DAnmTextureSRTKey*, int, int, f32, s16, s16); - /* 8000D6D8 */ void entry(J3DMaterialTable*, f32); -}; - -struct J3DModelData {}; - -struct J3DAnmTransform {}; - -struct mDoExt_bckAnm { - /* 8000D7DC */ void init(J3DAnmTransform*, int, int, f32, s16, s16, bool); - /* 8000D9CC */ void entry(J3DModelData*, f32); -}; - -struct mDoExt_baseAnm { - /* 8000D428 */ void play(); -}; - -struct mDoExt_MtxCalcOldFrame { - /* 8000F848 */ void initOldFrameMorf(f32, u16, u16); -}; - -struct mDoExt_AnmRatioPack { - /* 80846CF4 */ ~mDoExt_AnmRatioPack(); - /* 80846D30 */ mDoExt_AnmRatioPack(); -}; - -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); - /* 80018C8C */ ~fopAc_ac_c(); -}; - -struct daPy_frameCtrl_c { - /* 8015E4CC */ void checkAnmEnd(); - /* 8015E510 */ void updateFrame(); - /* 8015E544 */ void setFrameCtrl(u8, s16, s16, f32, f32); - /* 80846C4C */ ~daPy_frameCtrl_c(); - /* 80846CA8 */ daPy_frameCtrl_c(); -}; - -struct daPy_actorKeep_c { - /* 8015EC48 */ void setActor(); - /* 8015ECB8 */ void setData(fopAc_ac_c*); - /* 8015ECFC */ void clearData(); -}; - -struct J3DMaterial {}; - -struct daHoZelda_matAnm_c { - /* 80845EAC */ void init(); - /* 80845EDC */ void calc(J3DMaterial*) const; - /* 80848D54 */ ~daHoZelda_matAnm_c(); +struct daHoZelda_hio_c1 { + /* 0x0 */ s16 bow_search_y_angle; + /* 0x2 */ s16 bow_start_angle; + /* 0x4 */ s16 bow_end_angle; + /* 0x8 */ f32 bow_start_distance; + /* 0xC */ f32 bow_end_distance; }; struct daHoZelda_hio_c0 { - static u8 const m[16]; + static daHoZelda_hio_c1 const m; }; -struct daHoZelda_c { - /* 80846000 */ void createHeap(); - /* 80846718 */ void modelCallBack(u16); - /* 808469B0 */ void create(); - /* 80846DB0 */ ~daHoZelda_c(); - /* 80846F4C */ void setDoubleAnime(f32, f32, f32, u16, u16, f32); - /* 8084718C */ void setUpperAnime(u16); - /* 80847234 */ void resetUpperAnime(); - /* 808472C0 */ void setSingleAnime(u16, f32, f32, s16, f32); - /* 80847430 */ void animePlay(); - /* 80847574 */ void setEyeBtp(u16); - /* 808475F0 */ void setEyeBtk(u16, u8); - /* 80847670 */ void setNormalFace(); - /* 808476B0 */ void setAnm(); - /* 80847E44 */ void setBowModel(); - /* 80847F54 */ void setMatrix(); - /* 80848058 */ void shootArrow(); - /* 80848090 */ void deleteArrow(); - /* 80848118 */ void setBowBck(u16); - /* 8084819C */ void setRideOffset(); - /* 80848204 */ void clearEyeMove(); - /* 80848254 */ void setEyeMove(cXyz const*, s16, s16); - /* 808484B8 */ void setNeckAngle(); - /* 80848774 */ void searchBodyAngle(); - /* 808489CC */ void execute(); - /* 80848B64 */ void draw(); -}; - -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 { - /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int); -}; - -struct J3DModel {}; - -struct dDlst_shadowControl_c { - /* 80055F1C */ void addReal(u32, J3DModel*); -}; - -struct dAttention_c { - /* 80070844 */ void GetLockonList(s32); - /* 800737E4 */ void LockonTruth(); -}; - -struct dAttList_c { - /* 80073864 */ void getActor(); -}; - -struct csXyz {}; - -struct Z2Creature { - /* 802C03C8 */ Z2Creature(); - /* 802C0420 */ ~Z2Creature(); - /* 802C0530 */ void init(Vec*, Vec*, u8, u8); -}; - -struct J3DTransformInfo {}; - -struct J3DTexNoAnm { - /* 808465E4 */ ~J3DTexNoAnm(); - /* 8084662C */ J3DTexNoAnm(); - /* 80848C88 */ void calc(u16*) const; -}; - -struct J3DTexMtxAnm { - /* 80846650 */ ~J3DTexMtxAnm(); - /* 8084668C */ J3DTexMtxAnm(); -}; - -struct J3DTevKColorAnm { - /* 8084653C */ ~J3DTevKColorAnm(); - /* 80846578 */ J3DTevKColorAnm(); -}; - -struct J3DTevColorAnm { - /* 80846590 */ ~J3DTevColorAnm(); - /* 808465CC */ J3DTevColorAnm(); -}; - -struct J3DSys { - static u8 mCurrentMtx[48]; -}; - -struct J3DMtxCalcNoAnmBase { - /* 80846498 */ ~J3DMtxCalcNoAnmBase(); -}; - -template -struct J3DMtxCalcNoAnm {}; -/* J3DMtxCalcNoAnm */ -struct J3DMtxCalcNoAnm__template0 { - /* 8084642C */ void func_8084642C(void* _this); - /* 80848CE0 */ void func_80848CE0(void* _this, Vec const&, f32 const (&)[3][4]); - /* 80848D08 */ void func_80848D08(void* _this); -}; - -struct J3DMtxCalcJ3DSysInitMaya { - /* 8032ECAC */ void init(Vec const&, f32 const (&)[3][4]); -}; - -struct J3DMtxCalcCalcTransformMaya { - /* 8032EFBC */ void calcTransform(J3DTransformInfo const&); -}; - -struct J3DMtxCalc { - /* 808464F4 */ ~J3DMtxCalc(); - /* 80848CB8 */ void setAnmTransform(u8, J3DAnmTransform*); - /* 80848CBC */ void setAnmTransform(J3DAnmTransform*); - /* 80848CC0 */ bool getAnmTransform(u8); - /* 80848CC8 */ bool getAnmTransform(); - /* 80848CD0 */ void setWeight(u8, f32); - /* 80848CD4 */ void getWeight(u8) const; - - static u8 mJoint[4]; -}; - -struct J3DMaterialAnm { - /* 8032C320 */ void initialize(); - /* 8032C3C4 */ void calc(J3DMaterial*) const; -}; - -struct J3DMatColorAnm { - /* 808466A4 */ ~J3DMatColorAnm(); - /* 808466E0 */ J3DMatColorAnm(); -}; - -struct J3DJoint {}; - -struct J3DFrameCtrl { - /* 803283FC */ void init(s16); - /* 80846D48 */ ~J3DFrameCtrl(); -}; - -// -// Forward References: -// - -extern "C" static void daHoZelda_searchGanon__FP10fopAc_ac_cPv(); -extern "C" void init__18daHoZelda_matAnm_cFv(); -extern "C" void calc__18daHoZelda_matAnm_cCFP11J3DMaterial(); -extern "C" void createHeap__11daHoZelda_cFv(); -extern "C" void func_8084642C(void* _this); -extern "C" void __dt__19J3DMtxCalcNoAnmBaseFv(); -extern "C" void __dt__10J3DMtxCalcFv(); -extern "C" void __dt__15J3DTevKColorAnmFv(); -extern "C" void __ct__15J3DTevKColorAnmFv(); -extern "C" void __dt__14J3DTevColorAnmFv(); -extern "C" void __ct__14J3DTevColorAnmFv(); -extern "C" void __dt__11J3DTexNoAnmFv(); -extern "C" void __ct__11J3DTexNoAnmFv(); -extern "C" void __dt__12J3DTexMtxAnmFv(); -extern "C" void __ct__12J3DTexMtxAnmFv(); -extern "C" void __dt__14J3DMatColorAnmFv(); -extern "C" void __ct__14J3DMatColorAnmFv(); -extern "C" static void daHoZelda_createHeap__FP10fopAc_ac_c(); -extern "C" void modelCallBack__11daHoZelda_cFUs(); -extern "C" static void daHoZelda_modelCallBack__FP8J3DJointi(); -extern "C" void create__11daHoZelda_cFv(); -extern "C" void __dt__16daPy_frameCtrl_cFv(); -extern "C" void __ct__16daPy_frameCtrl_cFv(); -extern "C" void __dt__19mDoExt_AnmRatioPackFv(); -extern "C" void __ct__19mDoExt_AnmRatioPackFv(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" static void daHoZelda_Create__FP10fopAc_ac_c(); -extern "C" void __dt__11daHoZelda_cFv(); -extern "C" static void daHoZelda_Delete__FP11daHoZelda_c(); -extern "C" void setDoubleAnime__11daHoZelda_cFfffUsUsf(); -extern "C" void setUpperAnime__11daHoZelda_cFUs(); -extern "C" void resetUpperAnime__11daHoZelda_cFv(); -extern "C" void setSingleAnime__11daHoZelda_cFUsffsf(); -extern "C" void animePlay__11daHoZelda_cFv(); -extern "C" void setEyeBtp__11daHoZelda_cFUs(); -extern "C" void setEyeBtk__11daHoZelda_cFUsUc(); -extern "C" void setNormalFace__11daHoZelda_cFv(); -extern "C" void setAnm__11daHoZelda_cFv(); -extern "C" void setBowModel__11daHoZelda_cFv(); -extern "C" void setMatrix__11daHoZelda_cFv(); -extern "C" void shootArrow__11daHoZelda_cFv(); -extern "C" void deleteArrow__11daHoZelda_cFv(); -extern "C" void setBowBck__11daHoZelda_cFUs(); -extern "C" void setRideOffset__11daHoZelda_cFv(); -extern "C" void clearEyeMove__11daHoZelda_cFv(); -extern "C" void setEyeMove__11daHoZelda_cFPC4cXyzss(); -extern "C" void setNeckAngle__11daHoZelda_cFv(); -extern "C" void searchBodyAngle__11daHoZelda_cFv(); -extern "C" void execute__11daHoZelda_cFv(); -extern "C" static void daHoZelda_Execute__FP11daHoZelda_c(); -extern "C" void draw__11daHoZelda_cFv(); -extern "C" static void daHoZelda_Draw__FP11daHoZelda_c(); -extern "C" void calc__11J3DTexNoAnmCFPUs(); -extern "C" void setAnmTransform__10J3DMtxCalcFUcP15J3DAnmTransform(); -extern "C" void setAnmTransform__10J3DMtxCalcFP15J3DAnmTransform(); -extern "C" bool getAnmTransform__10J3DMtxCalcFUc(); -extern "C" bool getAnmTransform__10J3DMtxCalcFv(); -extern "C" void setWeight__10J3DMtxCalcFUcf(); -extern "C" void getWeight__10J3DMtxCalcCFUc(); -extern "C" void func_80848CE0(void* _this, Vec const&, f32 const (&)[3][4]); -extern "C" void func_80848D08(void* _this); -extern "C" void func_80848D38(void* _this, u8*); -extern "C" void __dt__18daHoZelda_matAnm_cFv(); -extern "C" u8 const m__16daHoZelda_hio_c0[16]; - -// -// External References: -// - -extern "C" void mDoMtx_XYZrotM__FPA4_fsss(); -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_ZrotM__FPA4_fs(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void quatM__14mDoMtx_stack_cFPC10Quaternion(); -extern "C" void play__14mDoExt_baseAnmFv(); -extern "C" void init__13mDoExt_btpAnmFP16J3DMaterialTableP16J3DAnmTexPatterniifss(); -extern "C" void entry__13mDoExt_btpAnmFP16J3DMaterialTables(); -extern "C" void init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifss(); -extern "C" void entry__13mDoExt_btkAnmFP16J3DMaterialTablef(); -extern "C" void init__13mDoExt_bckAnmFP15J3DAnmTransformiifssb(); -extern "C" void entry__13mDoExt_bckAnmFP12J3DModelDataf(); -extern "C" void mDoExt_modelEntryDL__FP8J3DModel(); -extern "C" void initOldFrameMorf__22mDoExt_MtxCalcOldFrameFfUsUs(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcIt_Judge__FPFPvPv_PvPv(); -extern "C" void fopAcM_fastCreate__FsUlPC4cXyziPC5csXyzPC4cXyzScPFPv_iPv(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_seenActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void addReal__21dDlst_shadowControl_cFUlP8J3DModel(); -extern "C" void GetLockonList__12dAttention_cFl(); -extern "C" void LockonTruth__12dAttention_cFv(); -extern "C" void getActor__10dAttList_cFv(); -extern "C" void checkAnmEnd__16daPy_frameCtrl_cFv(); -extern "C" void updateFrame__16daPy_frameCtrl_cFv(); -extern "C" void setFrameCtrl__16daPy_frameCtrl_cFUcssff(); -extern "C" void setActor__16daPy_actorKeep_cFv(); -extern "C" void setData__16daPy_actorKeep_cFP10fopAc_ac_c(); -extern "C" void clearData__16daPy_actorKeep_cFv(); -extern "C" void daPy_addCalcShort__FPsssss(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void atan2sX_Z__4cXyzCFv(); -extern "C" void atan2sY_XZ__4cXyzCFv(); -extern "C" void cM_rnd__Fv(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void cLib_addCalcAngleS__FPsssss(); -extern "C" void cLib_distanceAngleS__Fss(); -extern "C" void __ct__10Z2CreatureFv(); -extern "C" void __dt__10Z2CreatureFv(); -extern "C" void init__10Z2CreatureFP3VecP3VecUcUc(); -extern "C" void* __nw__FUl(); -extern "C" void* __nwa__FUl(); -extern "C" void __dl__FPv(); -extern "C" void init__12J3DFrameCtrlFs(); -extern "C" void getTexNo__16J3DAnmTexPatternCFUsPUs(); -extern "C" void initialize__14J3DMaterialAnmFv(); -extern "C" void calc__14J3DMaterialAnmCFP11J3DMaterial(); -extern "C" void init__24J3DMtxCalcJ3DSysInitMayaFRC3VecRA3_A4_Cf(); -extern "C" void calcTransform__27J3DMtxCalcCalcTransformMayaFRC16J3DTransformInfo(); -extern "C" void PSMTXCopy(); -extern "C" void PSMTXConcat(); -extern "C" void PSMTXInverse(); -extern "C" void PSMTXTrans(); -extern "C" void PSMTXQuat(); -extern "C" void PSMTXMultVec(); -extern "C" void PSVECSquareMag(); -extern "C" void PSVECSquareDistance(); -extern "C" void __destroy_arr(); -extern "C" void __construct_array(); -extern "C" void __construct_new_array(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__28mDoExt_MtxCalcAnmBlendTblOld[11]; -extern "C" extern void* __vt__25mDoExt_MtxCalcAnmBlendTbl[11]; -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" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 g_env_light[4880]; -extern "C" extern u8 j3dSys[284]; -extern "C" u8 mCurrentMtx__6J3DSys[48]; -extern "C" extern u32 __float_nan; -extern "C" u8 mJoint__10J3DMtxCalc[4]; -extern "C" extern u8 struct_80849010[4]; - -// -// Declarations: -// - /* 80845E98-80845EAC 000078 0014+00 1/1 0/0 0/0 .text daHoZelda_searchGanon__FP10fopAc_ac_cPv */ -static void daHoZelda_searchGanon(fopAc_ac_c* param_0, void* param_1) { - // NONMATCHING +static void* daHoZelda_searchGanon(fopAc_ac_c* i_actor, void* i_data) { + if (fopAcM_GetName(i_actor) == PROC_B_GND) { + return i_actor; + } + + return NULL; } -/* ############################################################################################## */ /* 80848E3C-80848E44 000000 0008+00 15/15 0/0 0/0 .rodata l_arcName */ -SECTION_RODATA static u8 const l_arcName[8] = { - 0x48, 0x6F, 0x5A, 0x65, 0x6C, 0x64, 0x61, 0x00, -}; -COMPILER_STRIP_GATE(0x80848E3C, &l_arcName); +static char const l_arcName[8] = "HoZelda"; /* 80848E44-80848E54 000008 0010+00 0/5 0/0 0/0 .rodata m__16daHoZelda_hio_c0 */ -#pragma push -#pragma force_active on -SECTION_RODATA u8 const daHoZelda_hio_c0::m[16] = { - 0x03, 0x8E, 0x2A, 0xAA, 0x40, 0x00, 0x00, 0x00, 0x45, 0x5A, 0xC0, 0x00, 0x45, 0x7A, 0x00, 0x00, +const daHoZelda_hio_c1 daHoZelda_hio_c0::m = { + 0x38E, + 0x2AAA, + 0x4000, + 3500.0f, + 4000.0f, }; -COMPILER_STRIP_GATE(0x80848E44, &daHoZelda_hio_c0::m); -#pragma pop -/* 80848E54-80848E58 000018 0004+00 6/17 0/0 0/0 .rodata @3697 */ -SECTION_RODATA static u8 const lit_3697[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80848E54, &lit_3697); +bool daHoZelda_matAnm_c::mEyeMoveFlg; +u8 daHoZelda_matAnm_c::mMorfFrame; /* 80845EAC-80845EDC 00008C 0030+00 2/2 0/0 0/0 .text init__18daHoZelda_matAnm_cFv */ void daHoZelda_matAnm_c::init() { - // NONMATCHING + field_0xf4 = 0.0f; + field_0xf8 = 0.0f; + mNowOffsetX = 0.0f; + mNowOffsetY = 0.0f; + + mEyeMoveFlg = false; + mMorfFrame = 0; } -/* ############################################################################################## */ -/* 80848E58-80848E5C 00001C 0004+00 5/14 0/0 0/0 .rodata @3722 */ -SECTION_RODATA static f32 const lit_3722 = 1.0f; -COMPILER_STRIP_GATE(0x80848E58, &lit_3722); - -/* 80848E5C-80848E64 000020 0008+00 1/6 0/0 0/0 .rodata @3724 */ -SECTION_RODATA static u8 const lit_3724[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80848E5C, &lit_3724); - /* 80845EDC-80846000 0000BC 0124+00 1/0 0/0 0/0 .text calc__18daHoZelda_matAnm_cCFP11J3DMaterial */ -void daHoZelda_matAnm_c::calc(J3DMaterial* param_0) const { - // NONMATCHING +void daHoZelda_matAnm_c::calc(J3DMaterial* i_material) const { + J3DMaterialAnm::calc(i_material); + + for (u32 i = 0; i < 8; i++) { + if (getTexMtxAnm(i).getAnmFlag()) { + J3DTexMtxInfo& texmtx = i_material->getTexGenBlock()->getTexMtx(i)->getTexMtxInfo(); + + if (mMorfFrame != 0) { + f32 var_f31 = 1.0f / (mMorfFrame + 1); + texmtx.mSRT.mTranslationX = field_0xf4 * (1.0f - var_f31) + texmtx.mSRT.mTranslationX * var_f31; + texmtx.mSRT.mTranslationY = field_0xf8 * (1.0f - var_f31) + texmtx.mSRT.mTranslationY * var_f31; + } else if (mEyeMoveFlg) { + texmtx.mSRT.mTranslationX = mNowOffsetX; + texmtx.mSRT.mTranslationY = mNowOffsetY; + } + + const_cast(field_0xf4) = texmtx.mSRT.mTranslationX; + const_cast(field_0xf8) = texmtx.mSRT.mTranslationY; + } + } } -/* ############################################################################################## */ -/* 80848F04-80848F24 -00001 0020+00 1/0 0/0 0/0 .data l_daHoZelda_Method */ -SECTION_DATA static void* l_daHoZelda_Method[8] = { - (void*)daHoZelda_Create__FP10fopAc_ac_c, - (void*)daHoZelda_Delete__FP11daHoZelda_c, - (void*)daHoZelda_Execute__FP11daHoZelda_c, - (void*)NULL, - (void*)daHoZelda_Draw__FP11daHoZelda_c, - (void*)NULL, - (void*)NULL, - (void*)NULL, -}; - -/* 80848F24-80848F54 -00001 0030+00 0/0 0/0 1/0 .data g_profile_HOZELDA */ -SECTION_DATA extern void* g_profile_HOZELDA[12] = { - (void*)0xFFFFFFFD, (void*)0x0007FFFD, - (void*)0x02240000, (void*)&g_fpcLf_Method, - (void*)0x00000708, (void*)NULL, - (void*)NULL, (void*)&g_fopAc_Method, - (void*)0x01130000, (void*)&l_daHoZelda_Method, - (void*)0x00060000, (void*)0x04000000, -}; - -/* 80848F54-80848F60 000050 000C+00 2/2 0/0 0/0 .data __vt__16daPy_frameCtrl_c */ -SECTION_DATA extern void* __vt__16daPy_frameCtrl_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__16daPy_frameCtrl_cFv, -}; - -/* 80848F60-80848F6C 00005C 000C+00 5/5 0/0 0/0 .data __vt__12J3DFrameCtrl */ -SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12J3DFrameCtrlFv, -}; - -/* 80848F6C-80848F78 000068 000C+00 2/2 0/0 0/0 .data __vt__11J3DTexNoAnm */ -SECTION_DATA extern void* __vt__11J3DTexNoAnm[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)calc__11J3DTexNoAnmCFPUs, -}; - -/* 80848F78-80848FA4 000074 002C+00 2/2 0/0 0/0 .data - * __vt__73J3DMtxCalcNoAnm<27J3DMtxCalcCalcTransformMaya,24J3DMtxCalcJ3DSysInitMaya> */ -SECTION_DATA extern void* data_80848F78[11] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)func_8084642C, - (void*)setAnmTransform__10J3DMtxCalcFP15J3DAnmTransform, - (void*)getAnmTransform__10J3DMtxCalcFv, - (void*)setAnmTransform__10J3DMtxCalcFUcP15J3DAnmTransform, - (void*)getAnmTransform__10J3DMtxCalcFUc, - (void*)setWeight__10J3DMtxCalcFUcf, - (void*)getWeight__10J3DMtxCalcCFUc, - (void*)func_80848CE0, - (void*)func_80848D08, -}; - -/* 80848FA4-80848FD0 0000A0 002C+00 3/3 0/0 0/0 .data __vt__19J3DMtxCalcNoAnmBase */ -SECTION_DATA extern void* __vt__19J3DMtxCalcNoAnmBase[11] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__19J3DMtxCalcNoAnmBaseFv, - (void*)setAnmTransform__10J3DMtxCalcFP15J3DAnmTransform, - (void*)getAnmTransform__10J3DMtxCalcFv, - (void*)setAnmTransform__10J3DMtxCalcFUcP15J3DAnmTransform, - (void*)getAnmTransform__10J3DMtxCalcFUc, - (void*)setWeight__10J3DMtxCalcFUcf, - (void*)getWeight__10J3DMtxCalcCFUc, - (void*)NULL, - (void*)NULL, -}; - -/* 80848FD0-80848FFC 0000CC 002C+00 4/4 0/0 0/0 .data __vt__10J3DMtxCalc */ -SECTION_DATA extern void* __vt__10J3DMtxCalc[11] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10J3DMtxCalcFv, - (void*)setAnmTransform__10J3DMtxCalcFP15J3DAnmTransform, - (void*)getAnmTransform__10J3DMtxCalcFv, - (void*)setAnmTransform__10J3DMtxCalcFUcP15J3DAnmTransform, - (void*)getAnmTransform__10J3DMtxCalcFUc, - (void*)setWeight__10J3DMtxCalcFUcf, - (void*)getWeight__10J3DMtxCalcCFUc, - (void*)NULL, - (void*)NULL, -}; - -/* 80848FFC-8084900C 0000F8 0010+00 2/2 0/0 0/0 .data __vt__18daHoZelda_matAnm_c */ -SECTION_DATA extern void* __vt__18daHoZelda_matAnm_c[4] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__18daHoZelda_matAnm_cFv, - (void*)calc__18daHoZelda_matAnm_cCFP11J3DMaterial, -}; - /* 80846000-8084642C 0001E0 042C+00 1/1 0/0 0/0 .text createHeap__11daHoZelda_cFv */ -void daHoZelda_c::createHeap() { - // NONMATCHING -} +// NONMATCHING +int daHoZelda_c::createHeap() { + mpZeldaModel = mDoExt_J3DModel__create((J3DModelData*)dComIfG_getObjectRes(l_arcName, 0x23), 0, 0x11020284); + if (mpZeldaModel == NULL) { + return 0; + } -/* 8084642C-80846498 00060C 006C+00 1/0 0/0 0/0 .text - * __dt__73J3DMtxCalcNoAnm<27J3DMtxCalcCalcTransformMaya,24J3DMtxCalcJ3DSysInitMaya>Fv */ -extern "C" void func_8084642C(void* _this) { - // NONMATCHING -} + for (int i = 0; i < 2; i++) { + mpMatAnm[i] = new daHoZelda_matAnm_c(); + if (mpMatAnm[i] == NULL) { + return 0; + } + } -/* 80846498-808464F4 000678 005C+00 1/0 0/0 0/0 .text __dt__19J3DMtxCalcNoAnmBaseFv */ -J3DMtxCalcNoAnmBase::~J3DMtxCalcNoAnmBase() { - // NONMATCHING -} + J3DTransformInfo* transinfo_buf = new J3DTransformInfo[47]; + if (transinfo_buf == NULL) { + return 0; + } -/* 808464F4-8084653C 0006D4 0048+00 1/0 0/0 0/0 .text __dt__10J3DMtxCalcFv */ -J3DMtxCalc::~J3DMtxCalc() { - // NONMATCHING -} + Quaternion* quat_buf = new Quaternion[47]; + if (quat_buf == NULL) { + return 0; + } -/* 8084653C-80846578 00071C 003C+00 2/2 0/0 0/0 .text __dt__15J3DTevKColorAnmFv */ -J3DTevKColorAnm::~J3DTevKColorAnm() { - // NONMATCHING -} + field_0x5c4 = new mDoExt_MtxCalcOldFrame(transinfo_buf, quat_buf); + if (field_0x5c4 == NULL) { + return 0; + } -/* 80846578-80846590 000758 0018+00 1/1 0/0 0/0 .text __ct__15J3DTevKColorAnmFv */ -J3DTevKColorAnm::J3DTevKColorAnm() { - // NONMATCHING -} + field_0x5a8 = new mDoExt_MtxCalcAnmBlendTblOld(field_0x5c4, 3, mAnmRatioPack); + if (field_0x5a8 == NULL) { + return 0; + } -/* 80846590-808465CC 000770 003C+00 2/2 0/0 0/0 .text __dt__14J3DTevColorAnmFv */ -J3DTevColorAnm::~J3DTevColorAnm() { - // NONMATCHING -} + void* res = dComIfG_getObjectRes(l_arcName, 0x2F); + if (!mEyeBtp.init(mpZeldaModel->getModelData(), (J3DAnmTexPattern*)res, 1, 2, 1.0f, 0, -1)) { + return 0; + } -/* 808465CC-808465E4 0007AC 0018+00 1/1 0/0 0/0 .text __ct__14J3DTevColorAnmFv */ -J3DTevColorAnm::J3DTevColorAnm() { - // NONMATCHING -} + res = dComIfG_getObjectRes(l_arcName, 0x26); + if (!mEyeBtk.init(mpZeldaModel->getModelData(), (J3DAnmTextureSRTKey*)res, 1, 0, 1.0f, 0, -1)) { + return 0; + } -/* 808465E4-8084662C 0007C4 0048+00 2/2 0/0 0/0 .text __dt__11J3DTexNoAnmFv */ -J3DTexNoAnm::~J3DTexNoAnm() { - // NONMATCHING -} + mpBowModel = mDoExt_J3DModel__create((J3DModelData*)dComIfG_getObjectRes(l_arcName, 0x20), 0x80000, 0x11000084); + if (mpBowModel == NULL) { + return 0; + } -/* 8084662C-80846650 00080C 0024+00 1/1 0/0 0/0 .text __ct__11J3DTexNoAnmFv */ -J3DTexNoAnm::J3DTexNoAnm() { - // NONMATCHING -} + if (!mBowBck.init((J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 0xC), 1, 0, 1.0f, 0, -1, false)) { + return 0; + } -/* 80846650-8084668C 000830 003C+00 2/2 0/0 0/0 .text __dt__12J3DTexMtxAnmFv */ -J3DTexMtxAnm::~J3DTexMtxAnm() { - // NONMATCHING -} + mpHIO = new daHoZelda_hio_c(); + if (mpHIO == NULL) { + return 0; + } -/* 8084668C-808466A4 00086C 0018+00 1/1 0/0 0/0 .text __ct__12J3DTexMtxAnmFv */ -J3DTexMtxAnm::J3DTexMtxAnm() { - // NONMATCHING -} - -/* 808466A4-808466E0 000884 003C+00 2/2 0/0 0/0 .text __dt__14J3DMatColorAnmFv */ -J3DMatColorAnm::~J3DMatColorAnm() { - // NONMATCHING -} - -/* 808466E0-808466F8 0008C0 0018+00 1/1 0/0 0/0 .text __ct__14J3DMatColorAnmFv */ -J3DMatColorAnm::J3DMatColorAnm() { - // NONMATCHING + return 1; } /* 808466F8-80846718 0008D8 0020+00 1/1 0/0 0/0 .text daHoZelda_createHeap__FP10fopAc_ac_c */ -static void daHoZelda_createHeap(fopAc_ac_c* param_0) { - // NONMATCHING +static int daHoZelda_createHeap(fopAc_ac_c* i_this) { + return ((daHoZelda_c*)i_this)->createHeap(); } /* 80846718-8084696C 0008F8 0254+00 1/1 0/0 0/0 .text modelCallBack__11daHoZelda_cFUs */ -void daHoZelda_c::modelCallBack(u16 param_0) { - // NONMATCHING +void daHoZelda_c::modelCallBack(u16 i_jntNo) { + if (i_jntNo == 0) { + J3DTransformInfo sp24 = *field_0x5c4->getOldFrameTransInfo(0); + J3DTransformInfo* temp_r28 = field_0x5c4->getOldFrameTransInfo(0); + + sp24.mTranslate.x -= mpRideOffset->x; + sp24.mTranslate.y -= mpRideOffset->y; + sp24.mTranslate.z -= mpRideOffset->z; + + mDoMtx_stack_c::transS(temp_r28->mTranslate.x, temp_r28->mTranslate.y, temp_r28->mTranslate.z); + mDoMtx_stack_c::quatM(field_0x5c4->getOldFrameQuaternion(0)); + mDoMtx_stack_c::inverse(); + + MtxPtr var_r29 = mpZeldaModel->getAnmMtx(0); + cMtx_concat(var_r29, mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + + MTXQuat(var_r29, field_0x5c4->getOldFrameQuaternion(0)); + var_r29[0][3] = sp24.mTranslate.x; + var_r29[1][3] = sp24.mTranslate.y; + var_r29[2][3] = sp24.mTranslate.z; + + cMtx_concat(J3DSys::mCurrentMtx, var_r29, J3DSys::mCurrentMtx); + cMtx_copy(J3DSys::mCurrentMtx, var_r29); + + if (mBowMode != 0 || field_0x6da != 0) { + mAnmRatioPack[2].setRatio(1.0f); + } + } else if (i_jntNo == 0x17) { + if (mBowMode != 0 || field_0x6da != 0) { + mAnmRatioPack[2].setRatio(0.0f); + } + } else { + mDoMtx_stack_c::copy(mpZeldaModel->getAnmMtx(i_jntNo)); + if (i_jntNo == 1) { + mDoMtx_stack_c::XrotM(mBodyAngle.y); + mDoMtx_stack_c::ZrotM(shape_angle.x - mBodyAngle.x); + } else { + mDoMtx_stack_c::XrotM(mNeckAngle.y); + mDoMtx_stack_c::ZrotM(-mNeckAngle.x); + } + + mpZeldaModel->setAnmMtx(i_jntNo, mDoMtx_stack_c::get()); + mDoMtx_copy(mpZeldaModel->getAnmMtx(i_jntNo), J3DSys::mCurrentMtx); + } } /* 8084696C-808469B0 000B4C 0044+00 1/1 0/0 0/0 .text daHoZelda_modelCallBack__FP8J3DJointi */ -static void daHoZelda_modelCallBack(J3DJoint* param_0, int param_1) { - // NONMATCHING -} +static int daHoZelda_modelCallBack(J3DJoint* i_joint, int param_1) { + u16 jnt_no = i_joint->getJntNo(); + daHoZelda_c* hozelda = (daHoZelda_c*)j3dSys.getModel()->getUserArea(); + + if (param_1 == 0) { + hozelda->modelCallBack(jnt_no); + } -/* ############################################################################################## */ -/* 80848E64-80848E68 000028 0004+00 0/2 0/0 0/0 .rodata @4062 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4062 = -1.0f; -COMPILER_STRIP_GATE(0x80848E64, &lit_4062); -#pragma pop + return 1; +} /* 808469B0-80846C4C 000B90 029C+00 1/1 0/0 0/0 .text create__11daHoZelda_cFv */ -void daHoZelda_c::create() { - // NONMATCHING -} +int daHoZelda_c::create() { + fopAcM_SetupActor(this, daHoZelda_c); -/* 80846C4C-80846CA8 000E2C 005C+00 3/2 0/0 0/0 .text __dt__16daPy_frameCtrl_cFv */ -daPy_frameCtrl_c::~daPy_frameCtrl_c() { - // NONMATCHING -} + int phase_state = dComIfG_resLoad(&mPhase, l_arcName); + if (phase_state == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(this, daHoZelda_createHeap, 0xA240)) { + return cPhs_ERROR_e; + } -/* 80846CA8-80846CF4 000E88 004C+00 1/1 0/0 0/0 .text __ct__16daPy_frameCtrl_cFv */ -daPy_frameCtrl_c::daPy_frameCtrl_c() { - // NONMATCHING -} + mSound.init(¤t.pos, &eyePos, 3, 1); + mReverb = dComIfGp_getReverb(fopAcM_GetRoomNo(this)); -/* 80846CF4-80846D30 000ED4 003C+00 2/2 0/0 0/0 .text __dt__19mDoExt_AnmRatioPackFv */ -mDoExt_AnmRatioPack::~mDoExt_AnmRatioPack() { - // NONMATCHING -} + setRideOffset(); + model = mpZeldaModel; + + J3DModelData* modelData = mpZeldaModel->getModelData(); -/* 80846D30-80846D48 000F10 0018+00 1/1 0/0 0/0 .text __ct__19mDoExt_AnmRatioPackFv */ -mDoExt_AnmRatioPack::mDoExt_AnmRatioPack() { - // NONMATCHING -} + modelData->getJointNodePointer(0)->setMtxCalc(field_0x5a8); + mpZeldaModel->setUserArea((u32)this); -/* 80846D48-80846D90 000F28 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */ -J3DFrameCtrl::~J3DFrameCtrl() { - // NONMATCHING + modelData->getJointNodePointer(0)->setCallBack(daHoZelda_modelCallBack); + modelData->getJointNodePointer(1)->setCallBack(daHoZelda_modelCallBack); + modelData->getJointNodePointer(23)->setCallBack(daHoZelda_modelCallBack); + modelData->getJointNodePointer(4)->setCallBack(daHoZelda_modelCallBack); + modelData->getMaterialNodePointer(4)->setMaterialAnm(mpMatAnm[0]); + modelData->getMaterialNodePointer(5)->setMaterialAnm(mpMatAnm[1]); + + mpMatAnm[0]->init(); + mpMatAnm[1]->init(); + + setSingleAnime(0x1C, 1.0f, 0.0f, -1, -1.0f); + resetUpperAnime(); + mBowAnmID = 0xC; + mBowBck.setFrame(mBowBck.getEndFrame()); + setMatrix(); + mpZeldaModel->calc(); + setBowModel(); + } + + return phase_state; } /* 80846D90-80846DB0 000F70 0020+00 1/0 0/0 0/0 .text daHoZelda_Create__FP10fopAc_ac_c */ -static void daHoZelda_Create(fopAc_ac_c* param_0) { - // NONMATCHING +static int daHoZelda_Create(fopAc_ac_c* i_this) { + daHoZelda_c* a_this = (daHoZelda_c*)i_this; + fpc_ProcID id = fopAcM_GetID(i_this); + return a_this->create(); } /* 80846DB0-80846F24 000F90 0174+00 1/1 0/0 0/0 .text __dt__11daHoZelda_cFv */ daHoZelda_c::~daHoZelda_c() { - // NONMATCHING + dComIfG_resDelete(&mPhase, l_arcName); + + daHorse_c* horse = dComIfGp_getHorseActor(); + if (horse != NULL) { + horse->onBagMaterial(); + } + + daPy_py_c* player = daPy_getLinkPlayerActorClass(); + if (player != NULL) { + player->offHorseZelda(); + } + + mSound.deleteObject(); } /* 80846F24-80846F4C 001104 0028+00 1/0 0/0 0/0 .text daHoZelda_Delete__FP11daHoZelda_c */ -static void daHoZelda_Delete(daHoZelda_c* param_0) { - // NONMATCHING +static int daHoZelda_Delete(daHoZelda_c* i_this) { + fpc_ProcID id = fopAcM_GetID(i_this); + i_this->~daHoZelda_c(); + return 1; } /* 80846F4C-8084718C 00112C 0240+00 1/1 0/0 0/0 .text setDoubleAnime__11daHoZelda_cFfffUsUsf */ -void daHoZelda_c::setDoubleAnime(f32 param_0, f32 param_1, f32 param_2, u16 param_3, - u16 param_4, f32 param_5) { - // NONMATCHING +int daHoZelda_c::setDoubleAnime(f32 i_ratio, f32 i_anmSpeedA, f32 i_anmSpeedB, u16 i_anmIdxA, u16 i_anmIdxB, + f32 i_morf) { + J3DAnmTransform* var_r27 = mAnmRatioPack[0].getAnmTransform(); + + f32 var_f29; + if (var_r27 != NULL && mAnmRatioPack[1].getAnmTransform() != NULL) { + var_f29 = var_r27->getFrame() / var_r27->getFrameMax(); + } else { + var_f29 = 0.0f; + } + + J3DAnmTransform* bckA = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, i_anmIdxA); + J3DAnmTransform* bckB = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, i_anmIdxB); + field_0x6e4[0] = i_anmIdxA; + field_0x6e4[1] = i_anmIdxB; + + mAnmRatioPack[0].setRatio(1.0f - i_ratio); + mAnmRatioPack[1].setRatio(i_ratio); + + f32 frame_maxA = bckA->getFrameMax(); + f32 frame_maxB = bckB->getFrameMax(); + f32 temp_f25 = 1.0f / frame_maxA; + f32 speed = i_anmSpeedA + (i_ratio * (((i_anmSpeedB * frame_maxA) / frame_maxB) - i_anmSpeedA)); + + mFrameCtrl[0].setFrameCtrl(bckA->getAttribute(), 0, frame_maxA, speed, var_f29 * frame_maxA); + bckA->setFrame(mFrameCtrl[0].getFrame()); + + mFrameCtrl[1].setFrameCtrl(bckB->getAttribute(), 0, frame_maxB, temp_f25 * (speed * frame_maxB), var_f29 * frame_maxB); + bckB->setFrame(mFrameCtrl[1].getFrame()); + + mAnmRatioPack[0].setAnmTransform(bckA); + mAnmRatioPack[1].setAnmTransform(bckB); + + if (i_morf >= 0.0f) { + field_0x5c4->initOldFrameMorf(i_morf, 0, 47); + } + + return 1; } -/* ############################################################################################## */ -/* 80848E68-80848E6C 00002C 0004+00 1/2 0/0 0/0 .rodata @4209 */ -SECTION_RODATA static f32 const lit_4209 = 3.0f; -COMPILER_STRIP_GATE(0x80848E68, &lit_4209); - /* 8084718C-80847234 00136C 00A8+00 1/1 0/0 0/0 .text setUpperAnime__11daHoZelda_cFUs */ -void daHoZelda_c::setUpperAnime(u16 param_0) { - // NONMATCHING +int daHoZelda_c::setUpperAnime(u16 i_anmNo) { + J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, i_anmNo); + mUpperAnmID = i_anmNo; + mAnmRatioPack[2].setRatio(0.0f); + mAnmRatioPack[2].setAnmTransform(bck); + mFrameCtrl[2].setFrameCtrl(bck->getAttribute(), 0, bck->getFrameMax(), 1.0f, 0.0f); + bck->setFrame(0.0f); + field_0x5c4->initOldFrameMorf(3.0f, 1, 23); + return 1; } /* 80847234-808472C0 001414 008C+00 3/3 0/0 0/0 .text resetUpperAnime__11daHoZelda_cFv */ void daHoZelda_c::resetUpperAnime() { - // NONMATCHING + if (mUpperAnmID != 0xFFFF) { + mUpperAnmID = 0xFFFF; + mAnmRatioPack[2].setRatio(0.0f); + mAnmRatioPack[2].setAnmTransform(NULL); + + if (field_0x6da != 0) { + setNormalFace(); + field_0x6da = 0; + } + + mBowMode = 0; + field_0x5c4->initOldFrameMorf(3.0f, 1, 23); + } } /* 808472C0-80847430 0014A0 0170+00 2/2 0/0 0/0 .text setSingleAnime__11daHoZelda_cFUsffsf */ -void daHoZelda_c::setSingleAnime(u16 param_0, f32 param_1, f32 param_2, s16 param_3, - f32 param_4) { - // NONMATCHING -} +int daHoZelda_c::setSingleAnime(u16 i_anmIdx, f32 i_speed, f32 i_startF, s16 i_endF, f32 i_morf) { + J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, i_anmIdx); -/* ############################################################################################## */ -/* 80848E6C-80848E70 000030 0004+00 0/1 0/0 0/0 .rodata @4283 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4283 = 0x3C449BA6; -COMPILER_STRIP_GATE(0x80848E6C, &lit_4283); -#pragma pop + field_0x6e4[0] = i_anmIdx; + field_0x6e4[1] = 0xFFFF; + + mAnmRatioPack[0].setRatio(1.0f); + mAnmRatioPack[1].setRatio(0.0f); + mAnmRatioPack[0].setAnmTransform(bck); + mAnmRatioPack[1].setAnmTransform(NULL); + + s16 end_frame; + if (i_endF < 0) { + end_frame = bck->getFrameMax(); + } else { + end_frame = i_endF; + } + + f32 frame; + if (i_speed < 0.0f) { + frame = end_frame; + } else { + frame = i_startF; + } + + mFrameCtrl[0].setFrameCtrl(bck->getAttribute(), i_startF, end_frame, i_speed, frame); + bck->setFrame(frame); + + if (i_morf >= 0.0f) { + field_0x5c4->initOldFrameMorf(i_morf, 0, 47); + } + + return 1; +} /* 80847430-80847574 001610 0144+00 1/1 0/0 0/0 .text animePlay__11daHoZelda_cFv */ void daHoZelda_c::animePlay() { - // NONMATCHING + mFrameCtrl[0].updateFrame(); + mAnmRatioPack[0].getAnmTransform()->setFrame(mFrameCtrl[0].getFrame()); + + for (int i = 1; i < 3; i++) { + if (mAnmRatioPack[i].getAnmTransform() != NULL) { + mFrameCtrl[i].updateFrame(); + mAnmRatioPack[i].getAnmTransform()->setFrame(mFrameCtrl[i].getFrame()); + } + } + + mEyeBtk.play(); + + if (field_0x6da == 0 && field_0x6dd == 0) { + f32 btp_frame = mEyeBtp.getFrame(); + if (btp_frame > 0.0f) { + btp_frame += 1.0f; + if (btp_frame > mEyeBtp.getBtpAnm()->getFrameMax()) { + btp_frame = 0.0f; + } + } else if (cM_rnd() < 0.012f) { + btp_frame += 1.0f; + } + + mEyeBtp.setFrame(btp_frame); + } else { + mEyeBtp.play(); + } + + mBowBck.play(); } /* 80847574-808475F0 001754 007C+00 2/2 0/0 0/0 .text setEyeBtp__11daHoZelda_cFUs */ -void daHoZelda_c::setEyeBtp(u16 param_0) { - // NONMATCHING +void daHoZelda_c::setEyeBtp(u16 i_resNo) { + void* btp = dComIfG_getObjectRes(l_arcName, i_resNo); + mEyeBtp.init(mpZeldaModel->getModelData(), (J3DAnmTexPattern*)btp, 1, -1, 1.0f, 0, -1); } /* 808475F0-80847670 0017D0 0080+00 2/2 0/0 0/0 .text setEyeBtk__11daHoZelda_cFUsUc */ -void daHoZelda_c::setEyeBtk(u16 param_0, u8 param_1) { - // NONMATCHING +void daHoZelda_c::setEyeBtk(u16 i_resNo, u8 param_1) { + field_0x6de = param_1; + void* btk = dComIfG_getObjectRes(l_arcName, i_resNo); + mEyeBtk.init(mpZeldaModel->getModelData(), (J3DAnmTextureSRTKey*)btk, 1, -1, 1.0f, 0, -1); } /* 80847670-808476B0 001850 0040+00 2/2 0/0 0/0 .text setNormalFace__11daHoZelda_cFv */ void daHoZelda_c::setNormalFace() { - // NONMATCHING + setEyeBtp(0x2F); + setEyeBtk(0x26, 0); } -/* ############################################################################################## */ -/* 80848E70-80848E74 000034 0004+00 0/1 0/0 0/0 .rodata @4530 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4530 = 4.0f; -COMPILER_STRIP_GATE(0x80848E70, &lit_4530); -#pragma pop - /* 808476B0-80847E44 001890 0794+00 1/1 0/0 0/0 .text setAnm__11daHoZelda_cFv */ void daHoZelda_c::setAnm() { - // NONMATCHING + u16 anm_idx[3]; + daHorse_c* horse = (daHorse_c*)dComIfGp_getHorseActor(); + daPy_py_c* player = daPy_getLinkPlayerActorClass(); + + if (horse != NULL) { + u16* anm_p = anm_idx; + for (int i = 0; i < 3; i++, anm_p++) { + u16 horse_anm_idx = horse->getAnmIdx(i); + if (horse_anm_idx == 0x14) { + *anm_p = 0x16; + } else if (horse_anm_idx == 0x15) { + *anm_p = 0x18; + } else if (horse_anm_idx == 0x16) { + *anm_p = 0x19; + } else if (horse_anm_idx == 0xC) { + *anm_p = 0x14; + } else if (horse_anm_idx == 0xB) { + *anm_p = 0x12; + } else if (horse_anm_idx == 0xA) { + *anm_p = 0x13; + } else if (horse_anm_idx == 0x11) { + *anm_p = 0xF; + } else if (horse_anm_idx == 0x12 || horse_anm_idx == 0x13) { + *anm_p = 0xE; + } else if (horse_anm_idx == 0xFFFF) { + *anm_p = 0xFFFF; + } else { + *anm_p = 0x1C; + } + } + + b_gnd_class* ganondorf = (b_gnd_class*)mGndAcKeep.getActor(); + fopAc_ac_c* gnd_actor = mGndAcKeep.getActor(); + int gnd_seen_angleY; + + if (ganondorf != NULL) { + f32 var_f31 = current.pos.abs2XZ(gnd_actor->current.pos); + gnd_seen_angleY = fopAcM_seenActorAngleY(this, gnd_actor); + } + + BOOL gnd_lockon; + if (dComIfGp_getAttention().GetLockonList(0) != NULL && dComIfGp_getAttention().LockonTruth() && dComIfGp_getAttention().GetLockonList(0)->getActor() == gnd_actor) { + gnd_lockon = TRUE; + } else { + gnd_lockon = FALSE; + } + + if (anm_idx[0] == 0xE && field_0x6da == 0 && !mDamageInit && field_0x6dd == 0 && player->checkHorseRide() && ganondorf != NULL && ganondorf->checkPiyo() != 1 && + ((gnd_seen_angleY < daHoZelda_hio_c0::m.bow_start_angle && gnd_lockon) || (mBowMode != 0 && gnd_seen_angleY < daHoZelda_hio_c0::m.bow_end_angle && (gnd_lockon || mArrowAcKeep.getActor() != NULL)))) + { + mBowMode = 1; + } else { + mBowMode = 0; + } + + int sp28 = 1; + int sp24 = 0; + daPy_frameCtrl_c* frame_ctrl = &mFrameCtrl[1]; + mIsSingleRide = false; + + if (!player->checkHorseRide() && (ganondorf == NULL || ganondorf->checkRide() != 1)) { + if (anm_idx[0] == 0x16) { + anm_idx[0] = 0x17; + } else if (ganondorf != NULL && ganondorf->checkZeldaEndDemoCut()) { + anm_idx[0] = 0x11; + sp28 = 0; + } else { + anm_idx[0] = 0x1B; + sp28 = 0; + } + + mIsSingleRide = true; + } else if (dComIfGp_checkPlayerStatus0(0, 0x20000000)) { + anm_idx[0] = 7; + sp28 = 0; + field_0x6dd = 1; + sp24 = 1; + } else if (player->getDemoMode() == 0x5D) { + anm_idx[0] = 0x10; + sp28 = 0; + field_0x6dd = 1; + } + + if ((anm_idx[0] != 0x1C && anm_idx[0] != 0xE) || player->checkHorseElecDamage()) { + resetUpperAnime(); + if (field_0x6e4[0] != anm_idx[0]) { + setSingleAnime(anm_idx[0], 1.0f, 0.0f, -1, horse->getMorfFrame()); + if (field_0x6dd != 0) { + if (sp24 != 0) { + setEyeBtp(0x2C); + setEyeBtk(0x27, 1); + } else { + setEyeBtp(0x2E); + setEyeBtk(0x28, 1); + } + } + } + + deleteArrow(); + } else if (mBowMode != 0) { + BOOL anm_end = mFrameCtrl[2].checkAnmEnd(); + anm_idx[0] = 0x1A; + anm_idx[2] = 0xFFFF; + + if (mUpperAnmID == 9) { + if (anm_end) { + anm_idx[2] = 0x1A; + mAnmTimer = 30; + } + } else if (mUpperAnmID == 0xA) { + if (mAnmTimer == 0) { + anm_idx[2] = 9; + setBowBck(0xC); + shootArrow(); + mSound.startCreatureSound(Z2SE_ZELDA_ARROW_SHOT, 0, mReverb); + } else { + mSound.startCreatureSoundLevel(Z2SE_ZELDA_ARROW_READY, 0, mReverb); + } + } else if (mUpperAnmID == 8) { + mSound.startCreatureSoundLevel(Z2SE_ZELDA_ARROW_READY, 0, mReverb); + if (anm_end) { + anm_idx[2] = 0xA; + mAnmTimer = 30; + } + } else if (mUpperAnmID == 0x1A) { + if (mAnmTimer == 0) { + mArrowAcKeep.setData(daArrow_c::makeArrow(this, 2)); + if (mArrowAcKeep.getActor() != NULL) { + anm_idx[2] = 8; + setBowBck(0xB); + mSound.startCreatureSound(Z2SE_ZELDA_ARROW_DRAW, 0, mReverb); + } + } + } else { + anm_idx[2] = 0x1A; + mAnmTimer = 0; + } + + if (anm_idx[2] != 0xFFFF) { + setUpperAnime(anm_idx[2]); + setSingleAnime(anm_idx[0], 1.0f, 0.0f, -1, 4.0f); + } + } else { + if (field_0x6da == 0 && mDamageInit) { + field_0x6da = 1; + mBowMode = 0; + setUpperAnime(0xD); + setEyeBtp(0x2D); + setEyeBtk(0x26, 0); + } else { + if (field_0x6dd != 0) { + field_0x6dd = 0; + setNormalFace(); + } + + if (mBowMode != 0 || (field_0x6da != 0 && mFrameCtrl[2].checkAnmEnd())) { + resetUpperAnime(); + } + } + + if (anm_idx[1] == 0xFFFF) { + anm_idx[1] = anm_idx[0]; + } + + if (field_0x6e4[1] != anm_idx[1] || field_0x6e4[0] != anm_idx[0]) { + setDoubleAnime(horse->getBlendRate(), 1.0f, 1.0f, anm_idx[0], anm_idx[1], horse->getMorfFrame()); + } + + if (field_0x6e4[0] != 0xE) { + sp28 = 0; + } + + if (field_0x6e4[1] == 0xE) { + frame_ctrl->setFrame(horse->getAnmFrame(1)); + mAnmRatioPack[1].getAnmTransform()->setFrame(frame_ctrl->getFrame()); + } + + deleteArrow(); + } + + if (sp28 != 0) { + mFrameCtrl[0].setFrame(horse->getAnmFrame(0)); + mAnmRatioPack[0].getAnmTransform()->setFrame(mFrameCtrl[0].getFrame()); + + if (field_0x6e4[1] == 0x1A) { + frame_ctrl->setFrame(mFrameCtrl[0].getFrame()); + mAnmRatioPack[1].getAnmTransform()->setFrame(frame_ctrl->getFrame()); + } + } + } } -/* ############################################################################################## */ -/* 80848E74-80848E80 000038 000C+00 0/1 0/0 0/0 .rodata localEyePos$4537 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const localEyePos[12] = { - 0x41, 0x00, 0x00, 0x00, 0xC1, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80848E74, &localEyePos); -#pragma pop - -/* 80848E80-80848E8C 000044 000C+00 0/1 0/0 0/0 .rodata localHeadCenterPos$4538 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const localHeadCenterPos[12] = { - 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80848E80, &localHeadCenterPos); -#pragma pop - -/* 80848E8C-80848E90 000050 0004+00 0/1 0/0 0/0 .rodata @4580 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4580 = 80.0f; -COMPILER_STRIP_GATE(0x80848E8C, &lit_4580); -#pragma pop - -/* 80848E90-80848E94 000054 0004+00 0/1 0/0 0/0 .rodata @4581 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4581 = 10.0f; -COMPILER_STRIP_GATE(0x80848E90, &lit_4581); -#pragma pop - -/* 80848E94-80848E98 000058 0004+00 0/1 0/0 0/0 .rodata @4582 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4582 = -2.0f; -COMPILER_STRIP_GATE(0x80848E94, &lit_4582); -#pragma pop - /* 80847E44-80847F54 002024 0110+00 2/2 0/0 0/0 .text setBowModel__11daHoZelda_cFv */ void daHoZelda_c::setBowModel() { - // NONMATCHING + static const Vec localEyePos = {8.0f, -12.0f, 0.0f}; + static const Vec localHeadCenterPos = {8.0f, 0.0f, 0.0f}; + + mDoMtx_multVec(mpZeldaModel->getAnmMtx(4), &localEyePos, &eyePos); + attention_info.position.set(current.pos.x, 80.0f + current.pos.y, current.pos.z); + mDoMtx_multVec(mpZeldaModel->getAnmMtx(4), &localHeadCenterPos, &field_0x6f8); + + mDoMtx_stack_c::copy(mpZeldaModel->getAnmMtx(0x11)); + mDoMtx_stack_c::transM(10.0f, -2.0f, 0.0f); + mDoMtx_stack_c::XYZrotM(cM_deg2s(95.0f), 0, cM_deg2s(10.0f)); + mpBowModel->setBaseTRMtx(mDoMtx_stack_c::get()); + + mBowBck.entry(mpBowModel->getModelData()); + mpBowModel->calc(); } -/* ############################################################################################## */ -/* 80848E98-80848EA4 00005C 000C+00 1/1 0/0 0/0 .rodata localHorseRidePos$4586 */ -SECTION_RODATA static u8 const localHorseRidePos[12] = { - 0xC0, 0xBC, 0x9B, 0xA6, 0x42, 0x52, 0x70, 0xA4, 0x40, 0x82, 0x87, 0x2B, -}; -COMPILER_STRIP_GATE(0x80848E98, &localHorseRidePos); - -/* 80848EA4-80848EB0 000068 000C+00 1/1 0/0 0/0 .rodata localFrontHorseRidePos$4587 */ -SECTION_RODATA static u8 const localFrontHorseRidePos[12] = { - 0xC2, 0x97, 0xC9, 0xBA, 0x42, 0x66, 0x70, 0xA4, 0x40, 0x82, 0x87, 0x2B, -}; -COMPILER_STRIP_GATE(0x80848EA4, &localFrontHorseRidePos); - /* 80847F54-80848058 002134 0104+00 2/2 0/0 0/0 .text setMatrix__11daHoZelda_cFv */ void daHoZelda_c::setMatrix() { - // NONMATCHING + static const Vec localHorseRidePos = {-5.894f, 52.61f, 4.079f}; + static const Vec localFrontHorseRidePos = {-75.893997f, 57.61f, 4.079f}; + + daHorse_c* horse = dComIfGp_getHorseActor(); + if (horse != NULL) { + const Vec* local_pos; + if (daPy_getLinkPlayerActorClass()->checkHorseRide()) { + local_pos = &localHorseRidePos; + } else { + local_pos = &localFrontHorseRidePos; + } + + mDoMtx_multVec(horse->getRootMtx(), local_pos, ¤t.pos); + shape_angle = horse->shape_angle; + current.angle.y = shape_angle.y; + + horse->offBagMaterial(); + daPy_getLinkPlayerActorClass()->onHorseZelda(); + } + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + mpZeldaModel->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 80848058-80848090 002238 0038+00 1/1 0/0 0/0 .text shootArrow__11daHoZelda_cFv */ void daHoZelda_c::shootArrow() { - // NONMATCHING + daArrow_c* arrow = (daArrow_c*)mArrowAcKeep.getActor(); + if (arrow != NULL) { + arrow->setChargeShoot(); + mArrowAcKeep.clearData(); + } } /* 80848090-80848118 002270 0088+00 1/1 0/0 0/0 .text deleteArrow__11daHoZelda_cFv */ void daHoZelda_c::deleteArrow() { - // NONMATCHING + daArrow_c* arrow = (daArrow_c*)mArrowAcKeep.getActor(); + if (arrow != NULL) { + arrow->deleteArrow(); + mArrowAcKeep.clearData(); + } + + if (mBowAnmID != 0xC) { + setBowBck(0xC); + } + + if (mUpperAnmID == 9 || mUpperAnmID == 10 || mUpperAnmID == 8 || mUpperAnmID == 0x1A) { + resetUpperAnime(); + } } /* 80848118-8084819C 0022F8 0084+00 2/2 0/0 0/0 .text setBowBck__11daHoZelda_cFUs */ -void daHoZelda_c::setBowBck(u16 param_0) { - // NONMATCHING +void daHoZelda_c::setBowBck(u16 i_anmNo) { + mBowBck.init((J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, i_anmNo), 1, -1, 1.0f, 0, -1, 1); + mBowAnmID = i_anmNo; } -/* ############################################################################################## */ -/* 80848EB0-80848EBC 000074 000C+00 1/1 0/0 0/0 .rodata baseRidePos$4672 */ -SECTION_RODATA static u8 const baseRidePos[12] = { - 0x3D, 0xCC, 0xCC, 0xCD, 0x43, 0x6C, 0xB3, 0x33, 0xC2, 0x7E, 0x37, 0x4C, -}; -COMPILER_STRIP_GATE(0x80848EB0, &baseRidePos); - -/* 80848EBC-80848EC8 000080 000C+00 1/1 0/0 0/0 .rodata frontRidePos$4673 */ -SECTION_RODATA static u8 const frontRidePos[12] = { - 0x3D, 0xCC, 0xCC, 0xCD, 0x43, 0x71, 0xB3, 0x33, 0x40, 0xCE, 0x45, 0xA0, -}; -COMPILER_STRIP_GATE(0x80848EBC, &frontRidePos); - /* 8084819C-80848204 00237C 0068+00 2/2 0/0 0/0 .text setRideOffset__11daHoZelda_cFv */ void daHoZelda_c::setRideOffset() { - // NONMATCHING + static const Vec baseRidePos = {0.1f, 236.7f, -63.554f}; + static const Vec frontRidePos = {0.1f, 241.7f, 6.445999f}; + + if (daPy_getLinkPlayerActorClass()->checkHorseRide()) { + mpRideOffset = &baseRidePos; + } else { + mpRideOffset = &frontRidePos; + } } /* 80848204-80848254 0023E4 0050+00 2/2 0/0 0/0 .text clearEyeMove__11daHoZelda_cFv */ void daHoZelda_c::clearEyeMove() { - // NONMATCHING + mpMatAnm[0]->setNowOffsetX(0.0f); + mpMatAnm[1]->setNowOffsetX(0.0f); + mpMatAnm[0]->setNowOffsetY(0.0f); + mpMatAnm[1]->setNowOffsetY(0.0f); + + if (daHoZelda_matAnm_c::getEyeMoveFlg()) { + daHoZelda_matAnm_c::offEyeMoveFlg(); + daHoZelda_matAnm_c::setMorfFrame(3); + } } -/* ############################################################################################## */ -/* 80848EC8-80848ECC 00008C 0004+00 0/1 0/0 0/0 .rodata @4752 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4752 = 0x39000000; -COMPILER_STRIP_GATE(0x80848EC8, &lit_4752); -#pragma pop - -/* 80848ECC-80848ED0 000090 0004+00 0/1 0/0 0/0 .rodata @4753 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4753 = -1.0f / 5.0f; -COMPILER_STRIP_GATE(0x80848ECC, &lit_4753); -#pragma pop - -/* 80848ED0-80848ED4 000094 0004+00 0/1 0/0 0/0 .rodata @4754 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4754 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x80848ED0, &lit_4754); -#pragma pop - -/* 80848ED4-80848ED8 000098 0004+00 0/1 0/0 0/0 .rodata @4755 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4755 = 0.5f; -COMPILER_STRIP_GATE(0x80848ED4, &lit_4755); -#pragma pop - -/* 80848ED8-80848EDC 00009C 0004+00 0/1 0/0 0/0 .rodata @4756 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4756 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80848ED8, &lit_4756); -#pragma pop - -/* 80848EDC-80848EE0 0000A0 0004+00 0/1 0/0 0/0 .rodata @4757 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4757 = 3.0f / 100.0f; -COMPILER_STRIP_GATE(0x80848EDC, &lit_4757); -#pragma pop - /* 80848254-808484B8 002434 0264+00 1/1 0/0 0/0 .text setEyeMove__11daHoZelda_cFPC4cXyzss */ void daHoZelda_c::setEyeMove(cXyz const* param_0, s16 param_1, s16 param_2) { - // NONMATCHING + f32 var_f30; + f32 var_f31; + + if (param_0 != NULL) { + var_f30 = 0.00012207031f * param_1; + var_f31 = 0.00012207031f * param_2; + } else { + clearEyeMove(); + return; + } + + if (daHoZelda_matAnm_c::getMorfFrame() == 0) { + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } else if (var_f31 < -1.0f) { + var_f31 = -1.0f; + } + + if (var_f30 > 1.0f) { + var_f30 = 1.0f; + } else if (var_f30 < -1.0f) { + var_f30 = -1.0f; + } + + f32 var_f27; + f32 var_f26; + if (var_f31 > 0.0f) { + var_f27 = -0.2f * var_f31; + var_f26 = 0.2f * var_f31; + } else { + var_f27 = -0.2f * var_f31; + var_f26 = 0.2f * var_f31; + } + + f32 var_f29; + if (var_f30 > 0.0f) { + var_f29 = 0.2f * var_f30; + } else { + var_f29 = 0.2f * var_f30; + } + + f32 sp14 = var_f29; + f32 temp_f1 = JMAFastSqrt((var_f31 * var_f31) + (var_f30 * var_f30)); + + if (temp_f1 > 1.0f) { + f32 sp10 = var_f31 * var_f30; + if (sp10 < 0.0f) { + var_f26 *= fabsf(var_f31) / temp_f1; + sp14 *= fabsf(var_f30) / temp_f1; + } else { + var_f27 *= fabsf(var_f31) / temp_f1; + var_f29 *= fabsf(var_f30) / temp_f1; + } + } + + daHoZelda_matAnm_c::onEyeMoveFlg(); + cLib_addCalc(mpMatAnm[0]->getNowOffsetXP(), var_f27, 0.5f, 0.1f, 0.03f); + cLib_addCalc(mpMatAnm[1]->getNowOffsetXP(), var_f26, 0.5f, 0.1f, 0.03f); + cLib_addCalc(mpMatAnm[0]->getNowOffsetYP(), var_f29, 0.5f, 0.1f, 0.03f); + cLib_addCalc(mpMatAnm[1]->getNowOffsetYP(), sp14, 0.5f, 0.1f, 0.03f); + } } -/* ############################################################################################## */ -/* 80848EE0-80848EE4 0000A4 0004+00 0/1 0/0 0/0 .rodata @4861 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4861 = 250000.0f; -COMPILER_STRIP_GATE(0x80848EE0, &lit_4861); -#pragma pop - -/* 80848EE4-80848EE8 0000A8 0004+00 0/1 0/0 0/0 .rodata @4862 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4862 = 90000.0f; -COMPILER_STRIP_GATE(0x80848EE4, &lit_4862); -#pragma pop - /* 808484B8-80848774 002698 02BC+00 1/1 0/0 0/0 .text setNeckAngle__11daHoZelda_cFv */ void daHoZelda_c::setNeckAngle() { - // NONMATCHING + daPy_py_c* player = daPy_getLinkPlayerActorClass(); + cXyz* var_r28 = NULL; + s16 angle_x_target = 0; + s16 angle_y_target = 0; + s16 var_r27 = 0; + s16 var_r26 = 0; + + if (!player->checkHorseRide()) { + cXyz sp34 = player->current.pos - current.pos; + int sp18 = cLib_distanceAngleS(sp34.atan2sX_Z(), shape_angle.y); + + f32 var_f31; + int sp14; + if (mNeckAngle.y != 0) { + sp14 = 0x5800; + var_f31 = 250000.0f; + } else { + sp14 = 0x5000; + var_f31 = 90000.0f; + } + + if (sp18 <= 0x4000 || (sp18 <= sp14 && sp34.abs2XZ(player->current.pos) < var_f31)) { + var_r28 = &player->eyePos; + } + } else if (mBowMode == 0 && field_0x6da == 0 && player->checkMidnaAtnPos()) { + var_r28 = player->getMidnaAtnPos(); + } + + if (var_r28 != NULL) { + cXyz sp28 = eyePos - field_0x6f8; + s16 sp12 = sp28.atan2sY_XZ() - mNeckAngle.x; + s16 sp10 = (sp28.atan2sX_Z() - shape_angle.y) - mNeckAngle.y; + + cXyz sp1C = *var_r28 - field_0x6f8; + s16 spE = sp1C.atan2sY_XZ(); + s16 spC = sp1C.atan2sX_Z() - shape_angle.y; + s16 spA = spE; + s16 sp8 = spC; + + angle_x_target = cLib_minMaxLimit((s16)spE, -10000, 8000); + angle_y_target = cLib_minMaxLimit((s16)spC, -20000, 20000); + + var_r27 = angle_x_target >> 1; + var_r26 = angle_y_target >> 1; + + angle_x_target = var_r27; + angle_y_target = var_r26; + + var_r27 += (spA - spE); + var_r26 += (sp8 - spC); + } + + daPy_addCalcShort(&mNeckAngle.x, angle_x_target, 3, 0x1000, 0x100); + daPy_addCalcShort(&mNeckAngle.y, angle_y_target, 3, 0x1000, 0x100); + + if (field_0x6de != 0) { + clearEyeMove(); + } else { + setEyeMove(var_r28, var_r27, var_r26); + } } -/* ############################################################################################## */ -/* 80848EE8-80848EEC 0000AC 0004+00 0/1 0/0 0/0 .rodata @4938 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4938 = 40.0f; -COMPILER_STRIP_GATE(0x80848EE8, &lit_4938); -#pragma pop - -/* 80848EEC-80848EF4 0000B0 0008+00 0/1 0/0 0/0 .rodata @4939 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4939[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80848EEC, &lit_4939); -#pragma pop - -/* 80848EF4-80848EFC 0000B8 0008+00 0/1 0/0 0/0 .rodata @4940 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4940[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80848EF4, &lit_4940); -#pragma pop - -/* 80848EFC-80848F04 0000C0 0008+00 0/1 0/0 0/0 .rodata @4941 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4941[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80848EFC, &lit_4941); -#pragma pop - /* 80848774-808489CC 002954 0258+00 1/1 0/0 0/0 .text searchBodyAngle__11daHoZelda_cFv */ +// NONMATCHING - load order with cLib_minMaxLimit void daHoZelda_c::searchBodyAngle() { - // NONMATCHING + fopAc_ac_c* gnd_actor = mGndAcKeep.getActor(); + s16 angle_x_target = 0; + s16 angle_y_target = 0; + + if (mBowMode != 0 && gnd_actor != NULL) { + cXyz sp14; + mDoMtx_multVecZero(mpZeldaModel->getAnmMtx(1), &sp14); + + cXyz sp8 = gnd_actor->eyePos - sp14; + sp8.y -= 40.0f; + + if (sp8.abs() >= 1.0f) { + angle_x_target = cLib_minMaxLimit(sp8.atan2sY_XZ(), -0x800, 0x2000); + angle_y_target = cLib_minMaxLimit((s16)(sp8.atan2sX_Z() - shape_angle.y), -daHoZelda_hio_c0::m.bow_search_y_angle, daHoZelda_hio_c0::m.bow_search_y_angle); + } + } + + cLib_addCalcAngleS(&mBodyAngle.x, angle_x_target, 4, 0xC00, 0x180); + cLib_addCalcAngleS(&mBodyAngle.y, angle_y_target, 4, 0xC00, 0x180); } /* 808489CC-80848B44 002BAC 0178+00 1/1 0/0 0/0 .text execute__11daHoZelda_cFv */ -void daHoZelda_c::execute() { - // NONMATCHING +int daHoZelda_c::execute() { + mReverb = dComIfGp_getReverb(fopAcM_GetRoomNo(this)); + + mArrowAcKeep.setActor(); + mGndAcKeep.setActor(); + + if (mGndAcKeep.getActor() == NULL) { + mGndAcKeep.setData((fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)daHoZelda_searchGanon, NULL)); + } + + daHorse_c* horse = dComIfGp_getHorseActor(); + if (horse != NULL) { + horse->setZeldaActor(this); + } + + daHoZelda_matAnm_c::decMorfFrame(); + setRideOffset(); + + if (mAnmTimer != 0) { + mAnmTimer--; + } + + animePlay(); + setAnm(); + searchBodyAngle(); + setMatrix(); + mpZeldaModel->calc(); + setBowModel(); + setNeckAngle(); + + mDamageInit = false; + + if (horse != NULL && !daPy_getLinkPlayerActorClass()->checkHorseRide() && mIsSingleRide) { + horse->setReinPosHand(6); + } + + mSound.framework(0, mReverb); + return 1; } /* 80848B44-80848B64 002D24 0020+00 1/0 0/0 0/0 .text daHoZelda_Execute__FP11daHoZelda_c */ -static void daHoZelda_Execute(daHoZelda_c* param_0) { - // NONMATCHING +static int daHoZelda_Execute(daHoZelda_c* i_this) { + return i_this->execute(); } /* 80848B64-80848C68 002D44 0104+00 1/1 0/0 0/0 .text draw__11daHoZelda_cFv */ -void daHoZelda_c::draw() { - // NONMATCHING +int daHoZelda_c::draw() { + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpZeldaModel, &tevStr); + mEyeBtp.entry(mpZeldaModel->getModelData()); + mEyeBtk.entry(mpZeldaModel->getModelData()); + mDoExt_modelEntryDL(mpZeldaModel); + + g_env_light.setLightTevColorType_MAJI(mpBowModel, &tevStr); + mDoExt_modelEntryDL(mpBowModel); + + if (dComIfGp_getHorseActor() != NULL) { + u32 shadow_id = dComIfGp_getHorseActor()->getShadowID(); + dComIfGd_addRealShadow(shadow_id, mpZeldaModel); + dComIfGd_addRealShadow(shadow_id, mpBowModel); + } + + return 1; } /* 80848C68-80848C88 002E48 0020+00 1/0 0/0 0/0 .text daHoZelda_Draw__FP11daHoZelda_c */ -static void daHoZelda_Draw(daHoZelda_c* param_0) { - // NONMATCHING +static int daHoZelda_Draw(daHoZelda_c* i_this) { + return i_this->draw(); } -/* 80848C88-80848CB8 002E68 0030+00 1/0 0/0 0/0 .text calc__11J3DTexNoAnmCFPUs */ -void J3DTexNoAnm::calc(u16* param_0) const { - // NONMATCHING -} +/* 80848F04-80848F24 -00001 0020+00 1/0 0/0 0/0 .data l_daHoZelda_Method */ +static actor_method_class l_daHoZelda_Method = { + (process_method_func)daHoZelda_Create, + (process_method_func)daHoZelda_Delete, + (process_method_func)daHoZelda_Execute, + (process_method_func)NULL, + (process_method_func)daHoZelda_Draw, +}; -/* 80848CB8-80848CBC 002E98 0004+00 3/0 0/0 0/0 .text - * setAnmTransform__10J3DMtxCalcFUcP15J3DAnmTransform */ -void J3DMtxCalc::setAnmTransform(u8 param_0, J3DAnmTransform* param_1) { - /* empty function */ -} - -/* 80848CBC-80848CC0 002E9C 0004+00 3/0 0/0 0/0 .text - * setAnmTransform__10J3DMtxCalcFP15J3DAnmTransform */ -void J3DMtxCalc::setAnmTransform(J3DAnmTransform* param_0) { - /* empty function */ -} - -/* 80848CC0-80848CC8 002EA0 0008+00 3/0 0/0 0/0 .text getAnmTransform__10J3DMtxCalcFUc */ -bool J3DMtxCalc::getAnmTransform(u8 param_0) { - return false; -} - -/* 80848CC8-80848CD0 002EA8 0008+00 3/0 0/0 0/0 .text getAnmTransform__10J3DMtxCalcFv */ -bool J3DMtxCalc::getAnmTransform() { - return false; -} - -/* 80848CD0-80848CD4 002EB0 0004+00 3/0 0/0 0/0 .text setWeight__10J3DMtxCalcFUcf */ -void J3DMtxCalc::setWeight(u8 param_0, f32 param_1) { - /* empty function */ -} - -/* 80848CD4-80848CE0 002EB4 000C+00 3/0 0/0 0/0 .text getWeight__10J3DMtxCalcCFUc */ -void J3DMtxCalc::getWeight(u8 param_0) const { - // NONMATCHING -} - -/* 80848CE0-80848D08 002EC0 0028+00 1/0 0/0 0/0 .text - * init__73J3DMtxCalcNoAnm<27J3DMtxCalcCalcTransformMaya,24J3DMtxCalcJ3DSysInitMaya>FRC3VecRA3_A4_Cf - */ -extern "C" void func_80848CE0(void* _this, Vec const& param_0, f32 const (¶m_1)[3][4]) { - // NONMATCHING -} - -/* 80848D08-80848D38 002EE8 0030+00 1/0 0/0 0/0 .text - * calc__73J3DMtxCalcNoAnm<27J3DMtxCalcCalcTransformMaya,24J3DMtxCalcJ3DSysInitMaya>Fv */ -extern "C" void func_80848D08(void* _this) { - // NONMATCHING -} - -/* 80848D38-80848D54 002F18 001C+00 1/1 0/0 0/0 .text cLib_calcTimer__FPUc */ -extern "C" void func_80848D38(void* _this, u8* param_0) { - // NONMATCHING -} - -/* 80848D54-80848E34 002F34 00E0+00 1/0 0/0 0/0 .text __dt__18daHoZelda_matAnm_cFv */ -daHoZelda_matAnm_c::~daHoZelda_matAnm_c() { - // NONMATCHING -} \ No newline at end of file +/* 80848F24-80848F54 -00001 0030+00 0/0 0/0 1/0 .data g_profile_HOZELDA */ +extern actor_process_profile_definition g_profile_HOZELDA = { + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_HOZELDA, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daHoZelda_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 275, // mPriority + &l_daHoZelda_Method, // sub_method + 0x00060000, // mStatus + fopAc_NPC_e, // mActorType + fopAc_CULLBOX_0_e, // cullType +};