From c9a46bd65bacd58e7d3257db72fa5eb35f8fffc4 Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Sun, 1 Mar 2026 13:19:48 -0800 Subject: [PATCH] d_s_logo / d_s_play debug work, d_a_kago cleanup, misc cleanup (#3116) * d_a_kago cleanup * d_s_logo wii/shield work * d_s_logo / d_s_play debug work * fix missing profile class sizeof's * fix phase->id values * build fixes * fix dCamera_c and camera profile --- include/JSystem/JFramework/JFWSystem.h | 1 + include/JSystem/JHostIO/JORServer.h | 1 + include/JSystem/JParticle/JPAEmitterManager.h | 1 + .../SSystem/SComponent/c_API_controller_pad.h | 38 + include/d/actor/d_a_grass.h | 2 + include/d/actor/d_a_kago.h | 110 +- include/d/d_bg_s.h | 2 + include/d/d_camera.h | 3 +- include/d/d_com_inf_game.h | 45 +- include/d/d_demo.h | 1 + include/d/d_eye_hl.h | 4 + include/d/d_jpreviewer.h | 4 +- include/d/d_particle.h | 5 + include/d/d_path.h | 7 + include/d/d_resorce.h | 9 + include/d/d_s_logo.h | 118 +- include/d/d_s_menu.h | 2 + include/d/d_s_play.h | 25 +- include/d/d_s_play_env.h | 5 + include/d/d_save_HIO.h | 3 +- include/d/d_stage.h | 14 +- include/f_op/f_op_actor.h | 3 + include/f_op/f_op_actor_mng.h | 3 + include/f_op/f_op_kankyo.h | 2 +- include/f_op/f_op_kankyo_mng.h | 1 + include/m_Do/m_Do_Reset.h | 4 + include/m_Do/m_Do_audio.h | 4 +- include/m_Do/m_Do_ext.h | 6 + include/m_Re/m_Re_controller_pad.h | 2 + include/revolution/os/OSResetSW.h | 1 + include/revolution/sc.h | 1 + .../MSL/MSL_C/MSL_Common/Include/cmath | 5 + src/SSystem/SComponent/c_phase.cpp | 4 +- src/c/c_dylink.cpp | 8 +- src/d/actor/d_a_grass.cpp | 2 +- src/d/actor/d_a_kago.cpp | 2038 ++++++++--------- src/d/actor/d_a_mg_fshop.cpp | 2 +- src/d/actor/d_a_npc_wrestler.cpp | 2 +- src/d/actor/d_a_obj_volcball.cpp | 2 +- src/d/d_camera.cpp | 4 +- src/d/d_com_inf_game.cpp | 8 +- src/d/d_path.cpp | 19 + src/d/d_s_logo.cpp | 892 +++++++- src/d/d_s_play.cpp | 1036 ++++++++- src/d/d_stage.cpp | 4 +- src/f_op/f_op_actor_mng.cpp | 4 +- src/f_op/f_op_kankyo.cpp | 4 +- src/f_op/f_op_kankyo_mng.cpp | 4 +- src/m_Do/m_Do_audio.cpp | 2 +- 49 files changed, 3113 insertions(+), 1354 deletions(-) diff --git a/include/JSystem/JFramework/JFWSystem.h b/include/JSystem/JFramework/JFWSystem.h index cf6ac86b69..0078e9aa1a 100644 --- a/include/JSystem/JFramework/JFWSystem.h +++ b/include/JSystem/JFramework/JFWSystem.h @@ -37,6 +37,7 @@ struct JFWSystem { static JUTConsole* getSystemConsole() { return systemConsole; } static JKRExpHeap* getSystemHeap() { return systemHeap; } + static JKRExpHeap* getRootHeap() { return rootHeap; } static JUTResFont* getSystemFont() { return systemFont; } static void setMaxStdHeap(int max) { diff --git a/include/JSystem/JHostIO/JORServer.h b/include/JSystem/JHostIO/JORServer.h index d92e588117..2c2ebf72d2 100644 --- a/include/JSystem/JHostIO/JORServer.h +++ b/include/JSystem/JHostIO/JORServer.h @@ -9,6 +9,7 @@ #include "JSystem/JUtility/JUTAssert.h" u32 JORMessageBox(const char* message, const char* title, u32 style); +int JORShellExecute(const char* param_0, const char* param_1, const char* param_2, const char* param_3, int param_4); struct JOREventCallbackListNode { JOREventCallbackListNode(u32, u32, bool); diff --git a/include/JSystem/JParticle/JPAEmitterManager.h b/include/JSystem/JParticle/JPAEmitterManager.h index 4508ef9cec..a36d8041c0 100644 --- a/include/JSystem/JParticle/JPAEmitterManager.h +++ b/include/JSystem/JParticle/JPAEmitterManager.h @@ -39,6 +39,7 @@ public: return pResMgrAry[res_mgr_id]; } int getEmitterNumber() const { return emtrNum - mFreeEmtrList.getNumLinks(); } + int getParticleNumber() const { return ptclNum - mPtclPool.getNum(); } public: /* 0x00 */ JSUList* pEmtrUseList; diff --git a/include/SSystem/SComponent/c_API_controller_pad.h b/include/SSystem/SComponent/c_API_controller_pad.h index 36d8fa5a1f..501e7aee72 100644 --- a/include/SSystem/SComponent/c_API_controller_pad.h +++ b/include/SSystem/SComponent/c_API_controller_pad.h @@ -35,4 +35,42 @@ struct interface_of_controller_pad { void cAPICPad_recalibrate(void); u32 cAPICPad_ANY_BUTTON(u32 param_0); +#if PLATFORM_WII +u32 cAPICPad_BUTTON(u32 i_padNo); +u32 cAPICPad_Z_BUTTON(u32 i_padNo); +u32 cAPICPad_R_BUTTON(u32 i_padNo); +u32 cAPICPad_L_BUTTON(u32 i_padNo); +u32 cAPICPad_A_BUTTON(u32 i_padNo); +u32 cAPICPad_B_BUTTON(u32 i_padNo); +u32 cAPICPad_X_BUTTON(u32 i_padNo); +u32 cAPICPad_Y_BUTTON(u32 i_padNo); + +u32 cAPICPad_TRIGGER(u32 i_padNo); +u32 cAPICPad_Z_TRIGGER(u32 i_padNo); +u32 cAPICPad_R_TRIGGER(u32 i_padNo); +u32 cAPICPad_UP_TRIGGER(u32 i_padNo); +u32 cAPICPad_DOWN_TRIGGER(u32 i_padNo); +u32 cAPICPad_LEFT_TRIGGER(u32 i_padNo); +u32 cAPICPad_RIGHT_TRIGGER(u32 i_padNo); +u32 cAPICPad_L_TRIGGER(u32 i_padNo); +u32 cAPICPad_A_TRIGGER(u32 i_padNo); +u32 cAPICPad_B_TRIGGER(u32 i_padNo); +u32 cAPICPad_X_TRIGGER(u32 i_padNo); +u32 cAPICPad_Y_TRIGGER(u32 i_padNo); +u32 cAPICPad_START_TRIGGER(u32 i_padNo); + +f32 cAPICPad_X_STICK(u32 i_padNo); +f32 cAPICPad_X_STICK_3D(u32 i_padNo); +f32 cAPICPad_Y_STICK(u32 i_padNo); +f32 cAPICPad_VALUE_STICK(u32 i_padNo); +s16 cAPICPad_ANGLE_STICK(u32 i_padNo); +s16 cAPICPad_ANGLE_STICK_3D(u32 i_padNo); +f32 cAPICPad_X_SUBSTICK(u32 i_padNo); +f32 cAPICPad_Y_SUBSTICK(u32 i_padNo); +f32 cAPICPad_VALUE_SUBSTICK(u32 i_padNo); +s16 cAPICPad_ANGLE_SUBSTICK(u32 i_padNo); +f32 cAPICPad_L_ANALOG(u32 i_padNo); +f32 cAPICPad_R_ANALOG(u32 i_padNo); +#endif + #endif diff --git a/include/d/actor/d_a_grass.h b/include/d/actor/d_a_grass.h index 549a067eba..4b07bea1d5 100644 --- a/include/d/actor/d_a_grass.h +++ b/include/d/actor/d_a_grass.h @@ -44,6 +44,8 @@ public: static daGrass_c* m_myObj; static dGrass_packet_c* m_grass; static dFlower_packet_c* m_flower; + + /* 0x568 */ u8 unk_0x568[0x570 - 0x568]; }; namespace daGrass_prm { diff --git a/include/d/actor/d_a_kago.h b/include/d/actor/d_a_kago.h index a84d049ad2..90de3b74bf 100644 --- a/include/d/actor/d_a_kago.h +++ b/include/d/actor/d_a_kago.h @@ -18,6 +18,20 @@ */ class daKago_c : public fopAc_ac_c { public: + enum daKago_Action_e { + ACTION_FLY_e, + ACTION_STAGGER_e, + ACTION_EVENT_e, + ACTION_PERCH_e, + ACTION_WAIT_e, + ACTION_ATTACK_e, + ACTION_EVENT2_e, + ACTION_PERCH2_e, + ACTION_LANDING_e, + ACTION_DEMO_FLY_e, + ACTION_DEMO_FLY2_e, + }; + int getBckName(int); void setBck(int, u8, f32, f32); bool checkBck(int); @@ -93,14 +107,14 @@ public: void setEvent() { mIsFlying = false; - mCurrentAction = 2; - field_0x744 = 0; + mAction = ACTION_EVENT_e; + mMode = 0; } void setEvent2() { mIsFlying = false; - mCurrentAction = 6; - field_0x744 = 0; + mAction = ACTION_EVENT2_e; + mMode = 0; } void setKagoPath(u8 i_pathNo) { @@ -110,36 +124,36 @@ public: } void onWaterFall() { - field_0x6ea = 1; + mIsWaterfall = TRUE; } bool isAttack() { - return field_0x6dd != 0; + return mIsAttack != 0; } MtxP getLegR3Mtx() { return mLegR3Mtx; } - MtxP getMidnaLocaterMtx() { return mpMorf->getModel()->getAnmMtx(4); } + MtxP getMidnaLocaterMtx() { return mAnm_p->getModel()->getAnmMtx(4); } s8 getPathDir() { return mPathDir; } u8 isFlying() { return mIsFlying; } fopAc_ac_c* getLockActor() { return mpLockActor; } void setLockActor(fopAc_ac_c* actor) { mpLockActor = actor; } void setEatYm() { field_0x6d8 |= (u8) 4; } - MtxP getMouthMtx() { return mpMorf->getModel()->getAnmMtx(7); } + MtxP getMouthMtx() { return mAnm_p->getModel()->getAnmMtx(7); } private: /* 0x568 */ request_of_phase_process_class mPhase; - /* 0x570 */ mDoExt_McaMorfSO* mpMorf; + /* 0x570 */ mDoExt_McaMorfSO* mAnm_p; /* 0x574 */ Z2CreatureEnemy mSound; /* 0x618 */ fopAc_ac_c* mpLockActor; /* 0x61C */ fpc_ProcID mBalloon2DId; /* 0x620 */ Mtx mLegR3Mtx; - /* 0x650 */ cXyz field_0x650[3]; + /* 0x650 */ cXyz mWallHitEffPos[3]; /* 0x674 */ cXyz field_0x674; /* 0x680 */ cXyz field_0x680; - /* 0x68C */ cXyz field_0x68c; - /* 0x698 */ cXyz field_0x698; + /* 0x68C */ cXyz mDemoCamCenter; + /* 0x698 */ cXyz mDemoCamEye; /* 0x6A4 */ cXyz field_0x6a4; - /* 0x6B0 */ cXyz field_0x6b0; + /* 0x6B0 */ cXyz mPrevCamEye; /* 0x6BC */ s16 field_0x6bc; /* 0x6BE */ csXyz field_0x6be; /* 0x6C4 */ f32 field_0x6c4; @@ -147,12 +161,12 @@ private: /* 0x6CA */ s16 field_0x6ca; /* 0x6CC */ f32 field_0x6cc; /* 0x6D0 */ f32 field_0x6d0; - /* 0x6D4 */ f32 field_0x6d4; + /* 0x6D4 */ f32 mDemoCamFovy; /* 0x6D8 */ u8 field_0x6d8; /* 0x6D9 */ u8 field_0x6d9; /* 0x6DA */ s16 field_0x6da; /* 0x6DC */ u8 field_0x6dc; - /* 0x6DD */ u8 field_0x6dd; + /* 0x6DD */ u8 mIsAttack; /* 0x6DE */ u8 field_0x6de; /* 0x6DF */ u8 field_0x6df; /* 0x6E0 */ u8 field_0x6e0; @@ -162,18 +176,18 @@ private: /* 0x6E4 */ u8 field_0x6e4; /* 0x6E5 */ u8 field_0x6e5; /* 0x6E6 */ u8 field_0x6e6; - /* 0x6E7 */ u8 field_0x6e7; + /* 0x6E7 */ u8 mType; /* 0x6E8 */ u8 field_0x6e8; /* 0x6E8 */ u8 field_0x6e9; - /* 0x6EA */ u8 field_0x6ea; - /* 0x6EB */ u8 field_0x6eb; + /* 0x6EA */ u8 mIsWaterfall; + /* 0x6EB */ u8 mBalloonMenuMode; /* 0x6EC */ u8 field_0x6ec[0x6ed - 0x6ec]; - /* 0x6ED */ u8 field_0x6ed; - /* 0x6F0 */ f32 field_0x6f0; - /* 0x6F4 */ f32 field_0x6f4; - /* 0x6F8 */ f32 field_0x6f8; + /* 0x6ED */ u8 unk_0x6ed; + /* 0x6F0 */ f32 mStickX; + /* 0x6F4 */ f32 mStickY; + /* 0x6F8 */ f32 mFlySpeed; /* 0x6FC */ f32 field_0x6fc; - /* 0x700 */ f32 field_0x700; + /* 0x700 */ f32 mGroundFlyHeight; /* 0x704 */ f32 mGroundHeight; /* 0x708 */ f32 mRoofHeight; /* 0x70C */ f32 field_0x70c; @@ -181,32 +195,32 @@ private: /* 0x712 */ s16 field_0x712; /* 0x714 */ s16 field_0x714; /* 0x716 */ s16 field_0x716; - /* 0x718 */ s16 field_0x718; - /* 0x71A */ s16 field_0x71a; - /* 0x71C */ s32 field_0x71c; - /* 0x720 */ s32 field_0x720; + /* 0x718 */ s16 mHeadRotZ; + /* 0x71A */ s16 mHeadRotY; + /* 0x71C */ int mWaterSplashTimer; + /* 0x720 */ int mWallHitInvulnTimer; /* 0x724 */ u8 field_0x724[0x728 - 0x724]; - /* 0x728 */ s32 field_0x728; - /* 0x72C */ s32 field_0x72c; - /* 0x730 */ s32 mDashCooldownTime; - /* 0x734 */ s32 mDashTime; - /* 0x738 */ s32 field_0x738; - /* 0x73C */ s32 field_0x73c; - /* 0x740 */ s32 mCurrentAction; - /* 0x744 */ s32 field_0x744; - /* 0x748 */ s32 field_0x748; - /* 0x74C */ s32 field_0x74c; - /* 0x750 */ s32 field_0x750; - /* 0x754 */ s32 field_0x754; - /* 0x758 */ s32 field_0x758; - /* 0x75C */ char* field_0x75c; - /* 0x760 */ char* field_0x760; - /* 0x764 */ s32 field_0x764; + /* 0x728 */ int field_0x728; + /* 0x72C */ int field_0x72c; + /* 0x730 */ int mDashCooldownTime; + /* 0x734 */ int mDashTime; + /* 0x738 */ int mGndSpecialCode; + /* 0x73C */ int mSceneType; + /* 0x740 */ int mAction; + /* 0x744 */ int mMode; + /* 0x748 */ int mDemoMode; + /* 0x74C */ int field_0x74c; + /* 0x750 */ int field_0x750; + /* 0x754 */ int field_0x754; + /* 0x758 */ int field_0x758; + /* 0x75C */ char* mArcName; + /* 0x760 */ char* mDemoName; + /* 0x764 */ u32 mShadowId; /* 0x768 */ dPath* mpPath1; /* 0x76C */ dPath* mpPath2; - /* 0x770 */ s8 mPathIdx; + /* 0x770 */ s8 mPathCurrentPointNo; /* 0x771 */ s8 field_0x771; - /* 0x772 */ s8 mPathIdxOffset; + /* 0x772 */ s8 mPathStep; /* 0x773 */ s8 mPathDir; /* 0x774 */ u8 field_0x774[0x778 - 0x774]; /* 0x778 */ dBgS_AcchCir mAcchCir; @@ -220,9 +234,9 @@ private: /* 0xB38 */ u32 field_0xb38; /* 0xB3C */ u32 field_0xb3c; /* 0xB40 */ u32 field_0xb40; - /* 0xB44 */ u32 field_0xb44[3]; - /* 0xB50 */ u32 field_0xb50; - /* 0xB54 */ u8 field_0xb54; + /* 0xB44 */ u32 mSibukiEmitterIDs[3]; + /* 0xB50 */ u32 mDashSibukiEmitterID; + /* 0xB54 */ u8 mIsHioSet; /* 0xB58 */ dMsgFlow_c mMsgFlow; }; diff --git a/include/d/d_bg_s.h b/include/d/d_bg_s.h index c0804bd07c..537748470c 100644 --- a/include/d/d_bg_s.h +++ b/include/d/d_bg_s.h @@ -195,6 +195,8 @@ public: void ChkDeleteActorRegist(fopAc_ac_c*); + void Draw(); + #if DEBUG /* 0x1404 */ u8 field_0x1404[0x1408 - 0x1404]; /* 0x1408 */ dBgS_HIO m_hio; diff --git a/include/d/d_camera.h b/include/d/d_camera.h index c49cce155e..f7a7132538 100644 --- a/include/d/d_camera.h +++ b/include/d/d_camera.h @@ -1367,8 +1367,7 @@ public: /* 0x970 */ dCamSetup_c mCamSetup; /* 0xAEC */ dCamParam_c mCamParam; /* 0xB0C */ u8 field_0xb0c; - /* 0xB0D */ u8 field_0xb0d[0xd58 - 0xb0d]; -}; // Size: 0xD58 +}; // Size: 0xB10 dCamera_c* dCam_getBody(); camera_class* dCam_getCamera(); diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 20101bc074..d8556e2fde 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -952,7 +952,7 @@ public: dComIfG_inf_c() { this->ct(); } ~dComIfG_inf_c() {} void ct(); - void createBaseCsr(); + static void createBaseCsr(); #if PLATFORM_WII || VERSION == VERSION_SHIELD_DEBUG class baseCsr_c : public mDoGph_gInf_c::csr_c { @@ -1022,7 +1022,9 @@ public: /* 0x1DE09 */ u8 field_0x1de09; /* 0x1DE0A */ u8 field_0x1de0a; /* 0x1DE0B */ u8 mIsDebugMode; - /* 0x1DE0C */ u8 field_0x1de0c; + #if DEBUG + /* 0x1DE0C */ OSStopwatch mStopwatch; + #endif static __d_timer_info_c dComIfG_mTimerInfo; #if PLATFORM_WII || VERSION == VERSION_SHIELD_DEBUG @@ -1174,6 +1176,7 @@ int dComIfG_TimerEnd(int i_mode, int param_1); int dComIfG_TimerDeleteCheck(int); int dComIfG_TimerDeleteRequest(int i_mode); int dComLbG_PhaseHandler(request_of_phase_process_class*, request_of_phase_process_fn*, void*); +BOOL dComIfG_isSceneResetButton(); int dComIfGd_setSimpleShadow(cXyz* i_pos, f32 param_1, f32 param_2, cBgS_PolyInfo& param_3, s16 i_angle, f32 param_5, _GXTexObj* i_tex); @@ -3262,6 +3265,22 @@ inline JPABaseEmitter* dComIfGp_particle_setColor(u16 param_0, const cXyz* i_pos NULL, NULL, NULL, -1, NULL); } +inline u32 dComIfGp_particle_getHeapSize() { + return g_dComIfG_gameInfo.play.getParticle()->getHeapSize(); +} + +inline u32 dComIfGp_particle_getSceneHeapSize() { + return g_dComIfG_gameInfo.play.getParticle()->getSceneHeapSize(); +} + +inline int dComIfGp_particle_getEmitterNum() { + return g_dComIfG_gameInfo.play.getParticle()->getEmitterNum(); +} + +inline int dComIfGp_particle_getParticleNum() { + return g_dComIfG_gameInfo.play.getParticle()->getParticleNum(); +} + inline dSmplMdl_draw_c* dComIfGp_getSimpleModel() { return g_dComIfG_gameInfo.play.getSimpleModel(); } @@ -4369,6 +4388,28 @@ inline u32 dComIfG_getTrigB(u32 i_padNo) { return mDoCPd_c::getTrig(i_padNo) & PAD_BUTTON_B; } +inline u32 dComIfG_getObjectAllSize() { + return g_dComIfG_gameInfo.mResControl.getObjectAllSize(); +} + +inline u32 dComIfG_getStageAllSize() { + return g_dComIfG_gameInfo.mResControl.getStageAllSize(); +} + +inline u32 dComIfG_getObjectSize(const char* i_arcName) { + return g_dComIfG_gameInfo.mResControl.getObjectSize(i_arcName); +} + +inline u32 dComIfG_getStageSize(const char* i_arcName) { + return g_dComIfG_gameInfo.mResControl.getStageSize(i_arcName); +} + +#if DEBUG +inline void dComIfG_initStopwatch() { + OSInitStopwatch(&g_dComIfG_gameInfo.mStopwatch, "dComIfG"); +} +#endif + inline int dComIfGd_setRealShadow(u32 param_0, s8 param_1, J3DModel* param_2, cXyz* param_3, f32 param_4, f32 param_5, dKy_tevstr_c* param_6) { return g_dComIfG_gameInfo.drawlist.setRealShadow(param_0, param_1, param_2, param_3, param_4, diff --git a/include/d/d_demo.h b/include/d/d_demo.h index 73c6f24e42..45e99a85d9 100644 --- a/include/d/d_demo.h +++ b/include/d/d_demo.h @@ -387,6 +387,7 @@ public: static s16 getBranchId() { return m_branchId; } static u16 getBranchNum() { return m_branchNum; } static jmessage_tControl* getMesgControl() { return m_mesgControl; } + static dDemo_system_c* getSystem() { return m_system; } static void setBranchNum(u16 num) { m_branchNum = num; diff --git a/include/d/d_eye_hl.h b/include/d/d_eye_hl.h index d174387806..382938c5a5 100644 --- a/include/d/d_eye_hl.h +++ b/include/d/d_eye_hl.h @@ -13,6 +13,10 @@ public: static void entry(dEyeHL_c*); static void remove(dEyeHL_c*); + static void create() { + JUT_ASSERT(51, m_obj == NULL); + } + static dEyeHL_c* m_obj; }; diff --git a/include/d/d_jpreviewer.h b/include/d/d_jpreviewer.h index 9971fa6674..b3b9776de9 100644 --- a/include/d/d_jpreviewer.h +++ b/include/d/d_jpreviewer.h @@ -26,8 +26,8 @@ public: void show3D(Mtx); void show2D(); - void create(JStudio::TControl* pControl, const JUTGamePad& pad); - void remove(); + static void create(JStudio::TControl* pControl, const JUTGamePad& pad); + static void remove(); void update(); static dJprev_c* get() { return m_myObj; } diff --git a/include/d/d_particle.h b/include/d/d_particle.h index ab8a3be574..5b5d8db634 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -7,6 +7,7 @@ #include "JSystem/JParticle/JPAParticle.h" #include "d/d_particle_name.h" #include "d/d_kankyo_tev_str.h" +#include "JSystem/JKernel/JKRSolidHeap.h" void dPa_cleanupGX(); @@ -427,6 +428,9 @@ public: JKRSolidHeap* getSceneHeap() { return mSceneHeap; } void* getSceneRes() { return m_sceneRes; } + u32 getHeapSize() { return mHeap->getTotalFreeSize(); } + u32 getSceneHeapSize() { return mSceneHeap->getTotalFreeSize(); } + void levelAllForceOnEventMove() { field_0x210.allForceOnEventMove(); } void levelExecute(u32 param_0) { @@ -453,6 +457,7 @@ public: static JPAEmitterManager* getEmitterManager() { return mEmitterMng; } int getEmitterNum() { return mEmitterMng->getEmitterNumber(); }; + int getParticleNum() { return mEmitterMng->getParticleNumber(); } static dPa_light8PcallBack* getLight8PcallBack() { return &mLight8PcallBack; diff --git a/include/d/d_path.h b/include/d/d_path.h index 7a4e6576ac..5ef65cfaef 100644 --- a/include/d/d_path.h +++ b/include/d/d_path.h @@ -25,6 +25,13 @@ struct dPath { /* 0x8 */ dPnt* m_points; }; +#if VERSION == VERSION_SHIELD_DEBUG +void dPath_Move(); +void dPath_Draw(); +void dPath_Dt(); +void dPath_Ct(); +#endif + inline BOOL dPath_ChkClose(const dPath* i_path) { return i_path->m_closed & 1; } dPath* dPath_GetRoomPath(int path_index, int room_no); diff --git a/include/d/d_resorce.h b/include/d/d_resorce.h index 000146822b..31d028a082 100644 --- a/include/d/d_resorce.h +++ b/include/d/d_resorce.h @@ -39,6 +39,7 @@ public: char* getArchiveName() { return mArchiveName; } mDoDvdThd_mountArchive_c* getDMCommand() { return mDMCommand; } JKRArchive* getArchive() { return mArchive; } + JKRSolidHeap* getDataHeap() { return mDataHeap; } u32 incCount() { return ++mCount; } u32 decCount() { return --mCount; } @@ -138,6 +139,14 @@ public: return getResInfo(i_arcName, mStageInfo, ARRAY_SIZEU(mStageInfo)); } + u32 getObjectSize(const char* i_arcName) { + return getSize(i_arcName, mObjectInfo, ARRAY_SIZEU(mObjectInfo)); + } + + u32 getStageSize(const char* i_arcName) { + return getSize(i_arcName, mStageInfo, ARRAY_SIZEU(mStageInfo)); + } + /* 0x0000 */ dRes_info_c mObjectInfo[128]; /* 0x1200 */ dRes_info_c mStageInfo[64]; }; // Size: 0x1B00 diff --git a/include/d/d_s_logo.h b/include/d/d_s_logo.h index 0a611b83c3..56d10eef82 100644 --- a/include/d/d_s_logo.h +++ b/include/d/d_s_logo.h @@ -2,6 +2,7 @@ #define D_S_D_S_LOGO_H #include "f_op/f_op_scene.h" +#include "m_Do/m_Do_dvd_thread.h" class JKRExpHeap; class JKRHeap; @@ -11,33 +12,41 @@ class mDoDvdThd_mountXArchive_c; class mDoDvdThd_mountArchive_c; class mDoDvdThd_toMainRam_c; -class dLog_HIO_c { -public: - dLog_HIO_c(); - virtual ~dLog_HIO_c(); - - u8 field_0x4[0x8 - 0x4]; -}; // Size: 0x8 - class dScnLogo_c : public scene_class { public: enum { - /* 0x0 */ EXEC_WARNING_IN, - /* 0x1 */ EXEC_WARNING_DISP, - /* 0x2 */ EXEC_WARNING_OUT, - /* 0x3 */ EXEC_NINTENDO_IN, - /* 0x4 */ EXEC_NINTENDO_OUT, - /* 0x5 */ EXEC_DOLBY_IN, - /* 0x6 */ EXEC_DOLBY_OUT, - /* 0x7 */ EXEC_DOLBY_OUT2, - /* 0x8 */ EXEC_PROG_IN, - /* 0x9 */ EXEC_PROG_SEL, - /* 0xA */ EXEC_PROG_OUT, - /* 0xB */ EXEC_PROG_SET, - /* 0xC */ EXEC_PROG_SET2, - /* 0xD */ EXEC_PROG_CHANGE, - /* 0xE */ EXEC_DVD_WAIT, - /* 0xF */ EXEC_SCENE_CHANGE, + /* 0 */ EXEC_WARNING_IN, + /* 1 */ EXEC_WARNING_DISP, + /* 2 */ EXEC_WARNING_OUT, + /* 3 */ EXEC_NINTENDO_IN, + /* 4 */ EXEC_NINTENDO_OUT, + /* 5 */ EXEC_DOLBY_IN, + /* 6 */ EXEC_DOLBY_OUT, + /* 7 */ EXEC_DOLBY_OUT2, + /* 8 */ EXEC_PROG_IN, + /* 9 */ EXEC_PROG_SEL, + /* 10 */ EXEC_PROG_OUT, + /* 11 */ EXEC_PROG_SET, + /* 12 */ EXEC_PROG_SET2, + /* 13 */ EXEC_PROG_CHANGE, + /* 14 */ EXEC_DVD_WAIT, + /* 15 */ EXEC_SCENE_CHANGE, + + #if PLATFORM_WII || PLATFORM_SHIELD + /* 16 */ EXEC_STRAP_IN, + /* 17 */ EXEC_STRAP_DISP, + /* 18 */ EXEC_STRAP_OUT, + /* 19 */ EXEC_STRAP_OUT2, + #endif + + #if VERSION == VERSION_SHIELD + /* 20 */ EXEC_MOC_IN, + /* 21 */ EXEC_MOC_DISP, + /* 22 */ EXEC_MOC_OUT, + /* 23 */ EXEC_NVLOGO_IN, + /* 24 */ EXEC_NVLOGO_DISP, + /* 25 */ EXEC_NVLOGO_OUT, + #endif }; dScnLogo_c() {} @@ -64,30 +73,66 @@ public: void nextSceneChange(); ~dScnLogo_c(); int create(); - void logoInitGC(); void dvdDataLoad(); void setProgressiveMode(u8); u8 getProgressiveMode(); bool isProgressiveMode(); void setRenderMode(); - #if VERSION == VERSION_GCN_PAL + #if VERSION == VERSION_GCN_PAL || PLATFORM_WII || PLATFORM_SHIELD u8 getPalLanguage(); #endif - #if DEBUG - static void onOpeningCut() { - mOpeningCut = true; + #if PLATFORM_WII || PLATFORM_SHIELD + void logoInitWii(); + void strapInDraw(); + void strapDispDraw(); + void strapOutDraw(); + void strapOut2Draw(); + #else + void logoInitGC(); + #endif + + #if VERSION == VERSION_SHIELD + void mocInDraw(); + void mocDispDraw(); + void mocOutDraw(); + void nvLogoInDraw(); + void nvLogoDispDraw(); + void nvLogoOutDraw(); + #endif + + mDoDvdThd_mountXArchive_c* aramMount(const char* i_arcPath, JKRHeap* i_heap) { + return mDoDvdThd_mountXArchive_c::create(i_arcPath, 0, JKRArchive::MOUNT_ARAM, i_heap); + } + + mDoDvdThd_mountXArchive_c* onMemMount(const char* i_arcPath) { + return mDoDvdThd_mountXArchive_c::create(i_arcPath, 0, JKRArchive::MOUNT_MEM, NULL); } + static void onOpeningCut() { + #if DEBUG + mOpeningCut = true; + #endif + } + + static u8 isOpeningCut() { + #if DEBUG + return mOpeningCut; + #else + return 0; + #endif + } + + #if DEBUG static u8 mOpeningCut; #endif public: /* 0x1C4 */ request_of_phase_process_class field_0x1c4; /* 0x1CC */ mDoDvdThd_toMainRam_c* sceneCommand; - /* 0x1D0 */ JKRExpHeap* field_0x1d0; - /* 0x1D4 */ JKRExpHeap* field_0x1d4; + /* 0x1D0 */ JKRExpHeap* mLogoHeap; + /* 0x1D4 */ JKRExpHeap* mLogo01Heap; /* 0x1D8 */ JKRHeap* mpHeap; /* 0x1DC */ dDlst_2D_c* mWarning; /* 0x1E0 */ dDlst_2D_c* mWarningStart; @@ -97,6 +142,13 @@ public: /* 0x1F0 */ dDlst_2D_c* mProgressiveYes; /* 0x1F4 */ dDlst_2D_c* mProgressiveNo; /* 0x1F8 */ dDlst_2D_c* mProgressiveSel; +#if PLATFORM_WII || PLATFORM_SHIELD + /* 0x1FC */ dDlst_2D_c* mStrapImg; +#endif +#if VERSION == VERSION_SHIELD + /* 0x200 */ dDlst_2D_c* mNvLogo; + /* 0x204 */ dDlst_2D_c* mMocImg; +#endif #if VERSION == VERSION_GCN_PAL /* 0x1FC */ mDoDvdThd_mountArchive_c* mpPalLogoResCommand; #endif @@ -114,6 +166,10 @@ public: /* 0x214 */ u16 field_0x214; /* 0x218 */ u32 field_0x218; /* 0x21C */ void* dummyGameAlloc; +#if PLATFORM_WII || VERSION == VERSION_SHIELD + /* 0x224 */ mDoDvdThd_toMainRam_c* mpHomeBtnCommand; + /* 0x228 */ int mHomeBtnRegion; +#endif /* 0x220 */ mDoDvdThd_mountXArchive_c* mpField0Command; /* 0x224 */ mDoDvdThd_mountXArchive_c* mpAlAnmCommand; /* 0x228 */ u8 field_0x228[4]; diff --git a/include/d/d_s_menu.h b/include/d/d_s_menu.h index a544c65576..d2e0e9bde0 100644 --- a/include/d/d_s_menu.h +++ b/include/d/d_s_menu.h @@ -83,6 +83,8 @@ public: extern int g_playerKind; extern int g_debugHpMode; extern int g_horsePosInit; + +u8 dSm_read_stageset(u8* i_data); #else class dScnMenu_c {}; #endif diff --git a/include/d/d_s_play.h b/include/d/d_s_play.h index 7181cf0b60..45b60220b0 100644 --- a/include/d/d_s_play.h +++ b/include/d/d_s_play.h @@ -9,9 +9,15 @@ class mDoDvdThd_mountXArchive_c; class mDoDvdThd_toMainRam_c; -class dScnPly_reg_childHIO_c { +class dScnPly_reg_childHIO_c : public JORReflexible { public: - /* 0x00 */ void* vtable; +#if ENABLE_REGHIO + dScnPly_reg_childHIO_c(); + virtual ~dScnPly_reg_childHIO_c() {} + + void genMessage(JORMContext*); +#endif + /* 0x04 */ f32 mFloatReg[30]; /* 0x7C */ s16 mShortReg[10]; }; @@ -37,9 +43,10 @@ public: void genMessage(JORMContext*); }; -class dScnPly_env_HIO_c { +class dScnPly_env_HIO_c : public JORReflexible { public: virtual ~dScnPly_env_HIO_c() {} + void genMessage(JORMContext*); /* 0x04 */ s8 field_0x4; /* 0x08 */ dScnPly_env_otherHIO_c mOther; @@ -79,6 +86,18 @@ public: static s8 pauseTimer; static s8 nextPauseTimer; + #if DEBUG + void onDebugPause() { + debugPause = TRUE; + } + + void offDebugPause() { + debugPause = FALSE; + } + + static u8 debugPause; + #endif + /* 0x1C4 */ request_of_phase_process_class field_0x1c4; /* 0x1CC */ mDoDvdThd_toMainRam_c* sceneCommand; /* 0x1D0 */ mDoDvdThd_mountXArchive_c* field_0x1d0; diff --git a/include/d/d_s_play_env.h b/include/d/d_s_play_env.h index 79eed8a63d..d2b23d9f8c 100644 --- a/include/d/d_s_play_env.h +++ b/include/d/d_s_play_env.h @@ -6,7 +6,9 @@ public: dScnPly_env_otherHIO_c(); virtual ~dScnPly_env_otherHIO_c() {} + void listenPropertyEvent(const JORPropertyEvent*); void genMessage(JORMContext*); + void addSetEmitterID(u16 param_0) { #if DEBUG field_0x1c[field_0x4f++] = param_0; @@ -14,6 +16,8 @@ public: #endif } + void printParticle(); + #if DEBUG /* 0x04 */ s8 field_0x04; #endif @@ -53,6 +57,7 @@ public: dScnPly_env_debugHIO_c(); virtual ~dScnPly_env_debugHIO_c() {} + void listenPropertyEvent(const JORPropertyEvent*); void genMessage(JORMContext*); /* 0x04 */ u8 field_0x4; diff --git a/include/d/d_save_HIO.h b/include/d/d_save_HIO.h index cc2f8af706..e149f7fcb9 100644 --- a/include/d/d_save_HIO.h +++ b/include/d/d_save_HIO.h @@ -209,11 +209,12 @@ private: /* 0x1A0 */ dSvBit_childItOneZoneHIO_c mOneZoneSave; }; -class dSvBit_HIO_c { +class dSvBit_HIO_c : public JORReflexible { public: void init(); virtual ~dSvBit_HIO_c() {} + void genMessage(JORMContext*); /* 0x004 */ s8 field_0x4; /* 0x008 */ dSvBit_childSwitchHIO_c mSwitch; diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 6f558f87c0..a4b72182bb 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -1062,7 +1062,7 @@ public: /* 0x3F7 */ s8 mZoneNo; /* 0x3F8 */ s8 mMemBlockID; /* 0x3F9 */ u8 mRegionNo; - /* 0x3FC */ int mProcID; + /* 0x3FC */ fpc_ProcID mProcID; /* 0x400 */ dBgW_Base* mpBgW; int getZoneNo() const { return mZoneNo; } @@ -1118,8 +1118,8 @@ public: static s8 getRoomReadId() { return mRoomReadId; } static void setRoomReadId(s8 id) { mRoomReadId = id; } - static u32 getProcID() { return mProcID; } - static void setProcID(u32 id) { mProcID = id; } + static fpc_ProcID getProcID() { return mProcID; } + static void setProcID(fpc_ProcID id) { mProcID = id; } static int getStayNo() { return mStayNo; } static int getNextStayNo() { return mNextStayNo; } static BOOL GetTimePass() { return m_time_pass; } @@ -1193,7 +1193,7 @@ public: JUT_ASSERT(2770, 0 <= i_roomNo && i_roomNo < 64); mStatus[i_roomNo].mProcID = i_id; } - static int getStatusProcID(int i_roomNo) { + static fpc_ProcID getStatusProcID(int i_roomNo) { JUT_ASSERT(2774, 0 <= i_roomNo && i_roomNo < 64); return mStatus[i_roomNo].mProcID; } @@ -1223,7 +1223,7 @@ public: static char mArcBank[32][10]; static dStage_roomStatus_c mStatus[0x40]; static char mDemoArcName[10]; - static u32 mProcID; + static fpc_ProcID mProcID; static nameData* mArcBankName; static bankData* mArcBankData; static roomDzs_c m_roomDzs; @@ -1398,6 +1398,10 @@ dStage_KeepDoorInfo* dStage_GetKeepDoorInfo(); dStage_KeepDoorInfo* dStage_GetRoomKeepDoorInfo(); void dStage_dt_c_fieldMapLoader(void* i_data, dStage_dt_c* i_stage); +#if DEBUG +void dStage_DebugDisp(); +#endif + #define dStage_NAME_LENGTH 8 const char* dStage_getName(s16 procName, s8 argument); diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index 6aa5713e1b..221fdf2ffb 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -71,6 +71,8 @@ enum fopAc_Cull_e { fopAc_CULLBOX_14_e, #endif fopAc_CULLBOX_CUSTOM_e, + fopAc_CULLBOX_MAX_e = fopAc_CULLBOX_CUSTOM_e, + fopAc_CULLSPHERE_0_e, fopAc_CULLSPHERE_1_e, fopAc_CULLSPHERE_2_e, @@ -83,6 +85,7 @@ enum fopAc_Cull_e { fopAc_CULLSPHERE_8_e, #endif fopAc_CULLSPHERE_CUSTOM_e, + fopAc_CULLSPHERE_MAX_e = fopAc_CULLSPHERE_CUSTOM_e - fopAc_CULLSPHERE_0_e, }; enum fopAc_attention_type { diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index b3a8873bcc..8cb4d1a255 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -847,6 +847,9 @@ BOOL fopAcM_getNameString(const fopAc_ac_c*, char*); inline void fopAcM_SetStatusMap(fopAc_ac_c*, u32) {} +extern cull_box l_cullSizeBox[fopAc_CULLBOX_MAX_e]; +extern cull_sphere l_cullSizeSphere[fopAc_CULLSPHERE_MAX_e]; + class fopAcM_lc_c { public: fopAcM_lc_c() { mLineCheck.ClrSttsRoofOff(); } diff --git a/include/f_op/f_op_kankyo.h b/include/f_op/f_op_kankyo.h index 9d2b3b87eb..7741d6c09d 100644 --- a/include/f_op/f_op_kankyo.h +++ b/include/f_op/f_op_kankyo.h @@ -19,7 +19,7 @@ struct kankyo_process_profile_definition { /* 0x24 */ leafdraw_method_class* sub_method; }; // Size: 0x28 -void fopKy_IsKankyo(void* i_this); +BOOL fopKy_IsKankyo(void* i_this); extern leafdraw_method_class g_fopKy_Method; diff --git a/include/f_op/f_op_kankyo_mng.h b/include/f_op/f_op_kankyo_mng.h index 975c1d2028..dcd36635ae 100644 --- a/include/f_op/f_op_kankyo_mng.h +++ b/include/f_op/f_op_kankyo_mng.h @@ -21,6 +21,7 @@ base_process_class* fopKyM_fastCreate(s16 i_procName, int i_param, cXyz* i_pos, fopKyM_CreateFunc i_createFunc); fpc_ProcID fopKyM_createWpillar(cXyz const* i_pos, f32 scale, int i_param); fpc_ProcID fopKyM_createMpillar(cXyz const* i_pos, f32 i_size); +BOOL fopKyM_IsKy(void* i_process); inline fopKyM_prm_class* fopKyM_GetAppend(void* i_process) { return (fopKyM_prm_class*)fpcM_GetAppend(i_process); diff --git a/include/m_Do/m_Do_Reset.h b/include/m_Do/m_Do_Reset.h index 5396a1510d..8a19c8fbe3 100644 --- a/include/m_Do/m_Do_Reset.h +++ b/include/m_Do/m_Do_Reset.h @@ -6,6 +6,10 @@ void mDoRst_reset(int, u32, int); void mDoRst_resetCallBack(int, void*); +#if !PLATFORM_GCN +void mDoRst_shutdownCallBack(); +#endif + struct mDoRstData { /* 0x00 */ int mReset; /* 0x04 */ int mResetPrepare; diff --git a/include/m_Do/m_Do_audio.h b/include/m_Do/m_Do_audio.h index 7c456b0cfe..57553f36fc 100644 --- a/include/m_Do/m_Do_audio.h +++ b/include/m_Do/m_Do_audio.h @@ -27,13 +27,13 @@ public: static u8 isResetFlag() { return mResetFlag; } static void onResetFlag() { mResetFlag = true; } static void offResetFlag() { mResetFlag = false; } - static bool isBgmSet() { return mBgmSet; } + static u8 isBgmSet() { return mBgmSet; } static void onBgmSet() { mBgmSet = true; } static void offBgmSet() { mBgmSet = false; } static u8 mInitFlag; static u8 mResetFlag; - static bool mBgmSet; + static u8 mBgmSet; }; extern JKRSolidHeap* g_mDoAud_audioHeap; diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 4478098064..5cb6f84a10 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -774,6 +774,12 @@ void mDoExt_restoreCurrentHeap(); JKRExpHeap* mDoExt_getGameHeap(); void mDoExt_setSafeGameHeapSize(); size_t mDoExt_getSafeGameHeapSize(); +intptr_t mDoExt_getSafeArchiveHeapSize(); +intptr_t mDoExt_getSafeJ2dHeapSize(); +intptr_t mDoExt_getSafeCommandHeapSize(); +void mDoExt_setSafeCommandHeapSize(); +void mDoExt_setSafeArchiveHeapSize(); +void mDoExt_setSafeJ2dHeapSize(); void mDoExt_destroySolidHeap(JKRSolidHeap* i_heap); JKRHeap* mDoExt_setCurrentHeap(JKRHeap* i_heap); JKRExpHeap* mDoExt_getArchiveHeap(); diff --git a/include/m_Re/m_Re_controller_pad.h b/include/m_Re/m_Re_controller_pad.h index ac77462a91..1b58bfd4af 100644 --- a/include/m_Re/m_Re_controller_pad.h +++ b/include/m_Re/m_Re_controller_pad.h @@ -187,6 +187,8 @@ public: static u32 getTrigUp(u32 i_pad) { return getTrig(i_pad) & WPAD_BUTTON_UP; } static u32 getTrigStart(u32 i_pad) { return getTrig(i_pad) & WPAD_BUTTON_PLUS; } + static f32 getStickX(u32 i_pad) { return getPad(i_pad).field_0x4[0].ex_status.fs.stick.x; } + static WPADInfo m_pad_info[WPAD_MAX_CONTROLLERS]; static Pad m_pad[WPAD_MAX_CONTROLLERS]; static motorWave_t m_motorWave[WPAD_MAX_CONTROLLERS]; diff --git a/include/revolution/os/OSResetSW.h b/include/revolution/os/OSResetSW.h index c6fc2d027f..752efaea89 100644 --- a/include/revolution/os/OSResetSW.h +++ b/include/revolution/os/OSResetSW.h @@ -11,6 +11,7 @@ typedef void (*OSResetCallback)(void); typedef void (*OSPowerCallback)(void); OSResetCallback OSSetResetCallback(OSResetCallback callback); +OSPowerCallback OSSetPowerCallback(OSPowerCallback callback); BOOL OSGetResetSwitchState(void); BOOL OSGetResetButtonState(void); diff --git a/include/revolution/sc.h b/include/revolution/sc.h index 88ecad9660..262b165607 100644 --- a/include/revolution/sc.h +++ b/include/revolution/sc.h @@ -184,6 +184,7 @@ u8 SCGetEuRgb60Mode(void); BOOL SCGetIdleMode(SCIdleModeInfo* data); u8 SCGetLanguage(void); u8 SCGetProgressiveMode(void); +void SCSetProgressiveMode(u8 mode); u8 SCGetScreenSaverMode(void); u8 SCGetSoundMode(void); u32 SCGetCounterBias(void); diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cmath b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cmath index 3040fbfe62..fa856b9b80 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cmath +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cmath @@ -2,6 +2,7 @@ #define MSL_CMATH_H_ #include +#include #define NAN (*(float*) __float_nan) #define HUGE_VALF (*(float*) __float_huge) @@ -174,6 +175,10 @@ inline float abs(float x) { return ::fabsf(x); } +inline long abs(long x) { + return ::labs(x); +} + inline float fmod(float x, float y) { return ::fmod(x, y); } diff --git a/src/SSystem/SComponent/c_phase.cpp b/src/SSystem/SComponent/c_phase.cpp index c31fd9b2d0..4784e24878 100644 --- a/src/SSystem/SComponent/c_phase.cpp +++ b/src/SSystem/SComponent/c_phase.cpp @@ -6,12 +6,12 @@ #include "SSystem/SComponent/c_phase.h" void cPhs_Reset(request_of_phase_process_class* phase) { - phase->id = cPhs_INIT_e; + phase->id = 0; } void cPhs_Set(request_of_phase_process_class* phase, cPhs__Handler* handlerTbl) { phase->mpHandlerTable = handlerTbl; - phase->id = cPhs_INIT_e; + phase->id = 0; } void cPhs_UnCompleate(request_of_phase_process_class* phase) { diff --git a/src/c/c_dylink.cpp b/src/c/c_dylink.cpp index 4b2ecd0bf8..ed8b6dece9 100644 --- a/src/c/c_dylink.cpp +++ b/src/c/c_dylink.cpp @@ -1022,7 +1022,7 @@ int cDylPhs::Link(request_of_phase_process_class* i_phase, s16 i_ProfName) { (request_of_phase_process_fn)cDylPhs::phase_03 }; - if (i_phase->id == cPhs_NEXT_e) { + if (i_phase->id == 2) { return cPhs_COMPLEATE_e; } @@ -1030,11 +1030,11 @@ int cDylPhs::Link(request_of_phase_process_class* i_phase, s16 i_ProfName) { } int cDylPhs::Unlink(request_of_phase_process_class* i_phase, s16 i_ProfName) { - JUT_ASSERT(460, i_phase->id != cPhs_LOADING_e); + JUT_ASSERT(460, i_phase->id != 1); - if (i_phase->id == cPhs_NEXT_e) { + if (i_phase->id == 2) { int ret = cDyl_Unlink(i_ProfName); - i_phase->id = cPhs_INIT_e; + i_phase->id = 0; return ret; } diff --git a/src/d/actor/d_a_grass.cpp b/src/d/actor/d_a_grass.cpp index 04992b39b5..c0cedf9e78 100644 --- a/src/d/actor/d_a_grass.cpp +++ b/src/d/actor/d_a_grass.cpp @@ -406,7 +406,7 @@ actor_process_profile_definition g_profile_GRASS = { fpcPi_CURRENT_e, // mListPrio PROC_GRASS, // mProcName &g_fpcLf_Method.base, // sub_method - 0x00000570, // mSize + sizeof(daGrass_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method diff --git a/src/d/actor/d_a_kago.cpp b/src/d/actor/d_a_kago.cpp index 9f4dd6e463..de8cd355c4 100644 --- a/src/d/actor/d_a_kago.cpp +++ b/src/d/actor/d_a_kago.cpp @@ -23,6 +23,16 @@ #include "f_op/f_op_camera_mng.h" #include "f_op/f_op_overlap_mng.h" +#include "res/Object/E_yc.h" +#include "res/Object/E_kc.h" + +#define TYPE_TWILIGHT 0 +#define TYPE_NORMAL 1 + +#define SCENE_TYPE_LAKE_HYLIA 0 +#define SCENE_TYPE_RIVER 1 +#define SCENE_TYPE_BOARD_HOUSE 2 +#define SCENE_TYPE_DEFAULT 3 namespace { static dCcD_SrcSph cc_sph_src = { { @@ -143,44 +153,34 @@ void daKago_HIO_c::genMessage(JORMContext* ctx) { } #endif -int daKago_c::getBckName(int param_0) { - if (field_0x6e7 == 0) { - return param_0; +int daKago_c::getBckName(int i_resIdx) { + if (mType == TYPE_TWILIGHT) { + return i_resIdx; } - switch (param_0) { - case 7: - return 4; - case 8: - return 5; - case 9: - return 6; - case 10: - return 7; - case 11: - return 8; - case 12: - return 9; - case 13: - return 10; - case 14: - return 11; - case 15: - return 12; - case 21: - return 13; - default: - return 6; + // convert shadow kargorok res idx to normal kargorok res idx + switch (i_resIdx) { + case dRes_ID_E_YC_BCK_YC_CRASH_e: return dRes_ID_E_KC_BCK_KC_CRASH_e; + case dRes_ID_E_YC_BCK_YC_CRASH2_e: return dRes_ID_E_KC_BCK_KC_CRASH2_e; + case dRes_ID_E_YC_BCK_YC_FLY_e: return dRes_ID_E_KC_BCK_KC_FLY_e; + case dRes_ID_E_YC_BCK_YC_FLY_BRAKE_e: return dRes_ID_E_KC_BCK_KC_FLY_BRAKE_e; + case dRes_ID_E_YC_BCK_YC_FLY_DASH_WL_e: return dRes_ID_E_KC_BCK_KC_FLY_DASH_WL_e; + case dRes_ID_E_YC_BCK_YC_FLY_GLIDE_e: return dRes_ID_E_KC_BCK_KC_FLY_GLIDE_e; + case dRes_ID_E_YC_BCK_YC_FLY_GLIDE_WL_e: return dRes_ID_E_KC_BCK_KC_FLY_GLIDE_WL_e; + case dRes_ID_E_YC_BCK_YC_FLY_LIMIT_WL_e: return dRes_ID_E_KC_BCK_KC_FLY_LIMIT_WL_e; + case dRes_ID_E_YC_BCK_YC_FLY_WL_e: return dRes_ID_E_KC_BCK_KC_FLY_WL_e; + case dRes_ID_E_YC_BCK_YC_HOVERING_e: return dRes_ID_E_KC_BCK_KC_HOVERING_e; + default: return dRes_ID_E_KC_BCK_KC_FLY_e; } } -void daKago_c::setBck(int param_0, u8 param_1, f32 param_2, f32 param_3) { - mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(field_0x75c, getBckName(param_0)), - param_1, param_2, param_3, 0.0f, -1.0f); +void daKago_c::setBck(int i_anm, u8 i_mode, f32 i_morf, f32 i_speed) { + mAnm_p->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(mArcName, getBckName(i_anm)), + i_mode, i_morf, i_speed, 0.0f, -1.0f); } -bool daKago_c::checkBck(int param_0) { - if (mpMorf->getAnm() == dComIfG_getObjectRes(field_0x75c, getBckName(param_0))) { +bool daKago_c::checkBck(int i_anm) { + if (mAnm_p->getAnm() == dComIfG_getObjectRes(mArcName, getBckName(i_anm))) { return true; } else { return false; @@ -193,16 +193,19 @@ int daKago_c::draw() { } g_env_light.settingTevStruct(2, ¤t.pos, &tevStr); - J3DModel* model = mpMorf->getModel(); + J3DModel* model = mAnm_p->getModel(); g_env_light.setLightTevColorType_MAJI(model, &tevStr); + fopAcM_setEffectMtx(this, model->getModelData()); + dComIfGd_setListDark(); - mpMorf->entryDL(); + mAnm_p->entryDL(); dComIfGd_setList(); + cXyz unkXyz1; unkXyz1.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); - field_0x764 = - dComIfGd_setShadow(field_0x764, 0, model, &unkXyz1, 3500.0f, 0.0f, current.pos.y, + mShadowId = + dComIfGd_setShadow(mShadowId, 0, model, &unkXyz1, 3500.0f, 0.0f, current.pos.y, mObjAcch.GetGroundH(), mObjAcch.m_gnd, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); @@ -216,22 +219,26 @@ static int daKago_Draw(daKago_c* i_this) { int daKago_c::executeBalloonMenu() { dCamera_c* camera = dCam_getBody(); - switch (field_0x6eb) { + switch (mBalloonMenuMode) { case 0: - if (field_0x6e7 == 1 && (mCurrentAction == 0 || mCurrentAction == 5) && - !dComIfGp_event_runCheck() && mDoCPd_c::getTrigB(0)) + if (mType == TYPE_NORMAL && (mAction == ACTION_FLY_e || mAction == ACTION_ATTACK_e) && + !dComIfGp_event_runCheck() && mDoCPd_c::getTrigB(PAD_1)) { - field_0x6eb = 1; + mBalloonMenuMode = 1; return 1; } return 0; case 1: - if (eventInfo.checkCommandDemoAccrpt() == 0) { + if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 1, 0xffff, 0); - eventInfo.onCondition(2); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); + #if VERSION == VERSION_SHIELD_DEBUG + return 0; + #else break; + #endif } mMsgFlow.init(this, 0x457, 0, NULL); @@ -239,32 +246,29 @@ int daKago_c::executeBalloonMenu() { camera->Stop(); camera->SetTrimSize(3); - field_0x6eb = 0x2; - + mBalloonMenuMode = 2; break; case 2: if (mMsgFlow.doFlow(this, NULL, 0)) { if (dMsgObject_getSelectCursorPos() == 0) { - field_0x6eb = 0; + mBalloonMenuMode = 0; camera->Start(); camera->SetTrimSize(0); dComIfGp_event_reset(); - return 1; } if (dMsgObject_getSelectCursorPos() == 1) { - field_0x6eb = 3; + mBalloonMenuMode = 3; dComIfGp_setNextStage("F_SP112", 0, dComIfGp_roomControl_getStayNo(), dComIfG_play_c::getLayerNo(0), 0.0f, 10, 1, 0, 0, 1, 0); } else { - field_0x6eb = 3; + mBalloonMenuMode = 3; dStage_changeScene(3, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1); } } - break; } @@ -275,37 +279,35 @@ static u8 hio_set; static daKago_HIO_c l_HIO; f32 daKago_c::checkGroundHeight(cXyz i_pos, f32* o_step) { - f32 retVal; - - retVal = mGroundHeight; + f32 gnd_height = mGroundHeight; if (mpPath1 != NULL) { - cXyz pointPos1; - cXyz pointPos2; + cXyz nextPntPos; + cXyz prevPntPos; cXyz cStack_140; - pointPos1 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; + nextPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; - int pointIdx2 = (int)mPathIdx - (int)mPathIdxOffset; - if (pointIdx2 >= mpPath1->m_num || pointIdx2 < 0) { - pointIdx2 = mPathIdx; + int prevPntNo = (int)mPathCurrentPointNo - (int)mPathStep; + if (prevPntNo >= mpPath1->m_num || prevPntNo < 0) { + prevPntNo = mPathCurrentPointNo; } - pointPos2 = dPath_GetPnt(mpPath1, pointIdx2)->m_position; + prevPntPos = dPath_GetPnt(mpPath1, prevPntNo)->m_position; - s16 targetAngleY = cLib_targetAngleY(&pointPos2, &pointPos1); + s16 pntAngle = cLib_targetAngleY(&prevPntPos, &nextPntPos); - mDoMtx_stack_c::YrotS(-targetAngleY); + mDoMtx_stack_c::YrotS(-pntAngle); mDoMtx_stack_c::transM(-i_pos.x, -i_pos.y, -i_pos.z); - mDoMtx_stack_c::multVec(&pointPos2, &cStack_140); + mDoMtx_stack_c::multVec(&prevPntPos, &cStack_140); f32 var_f29 = -cStack_140.z; if (var_f29 < 0.0f) { var_f29 = 0.0f; } - mDoMtx_stack_c::YrotS(-targetAngleY); + mDoMtx_stack_c::YrotS(-pntAngle); mDoMtx_stack_c::transM(-i_pos.x, -i_pos.y, -i_pos.z); - mDoMtx_stack_c::multVec(&pointPos1, &cStack_140); + mDoMtx_stack_c::multVec(&nextPntPos, &cStack_140); f32 var_f28 = cStack_140.z; if (var_f28 < 0.0f) { @@ -313,12 +315,12 @@ f32 daKago_c::checkGroundHeight(cXyz i_pos, f32* o_step) { } f32 var_f27 = var_f29 / (var_f29 + var_f28); - retVal = pointPos1.y * var_f27 + pointPos2.y * (1.0f - var_f27); + gnd_height = nextPntPos.y * var_f27 + prevPntPos.y * (1.0f - var_f27); if (o_step != NULL) { - f32 pointLatDist = pointPos1.absXZ(pointPos2); - f32 pointVertDist = std::abs(pointPos1.y - pointPos2.y); - *o_step = pointVertDist * l_HIO.mFlightSpeed / pointLatDist + 5.0f; + f32 pntDistXZ = nextPntPos.absXZ(prevPntPos); + f32 pntDistY = std::abs(nextPntPos.y - prevPntPos.y); + *o_step = pntDistY * l_HIO.mFlightSpeed / pntDistXZ + 5.0f; } } @@ -327,19 +329,20 @@ f32 daKago_c::checkGroundHeight(cXyz i_pos, f32* o_step) { dBgS_GndChk gndChk; cXyz gndChkPos(i_pos.x, i_pos.y + 500.0f, i_pos.z); gndChk.SetPos(&gndChkPos); - field_0x700 = dComIfG_Bgsp().GroundCross(&gndChk); + mGroundFlyHeight = dComIfG_Bgsp().GroundCross(&gndChk); - field_0x738 = 0; + mGndSpecialCode = 0; - if (field_0x700 != -G_CM3D_F_INF) { - field_0x738 = dComIfG_Bgsp().GetSpecialCode(gndChk); - field_0x700 += l_HIO.mFlightGroundAltitude; - if (retVal < field_0x700) { - retVal = field_0x700; - if (current.pos.y < retVal) { + if (mGroundFlyHeight != -G_CM3D_F_INF) { + mGndSpecialCode = dComIfG_Bgsp().GetSpecialCode(gndChk); + + mGroundFlyHeight += l_HIO.mFlightGroundAltitude; + if (gnd_height < mGroundFlyHeight) { + gnd_height = mGroundFlyHeight; + if (current.pos.y < gnd_height) { mGroundHeight = current.pos.y; } else { - mGroundHeight = field_0x700; + mGroundHeight = mGroundFlyHeight; } if (o_step != NULL) { @@ -360,15 +363,15 @@ f32 daKago_c::checkGroundHeight(cXyz i_pos, f32* o_step) { unkFlag1 = TRUE; } - if (retVal < gndCrossMag) { - field_0x700 = gndCrossMag; - retVal = gndCrossMag; + if (gnd_height < gndCrossMag) { + mGroundFlyHeight = gndCrossMag; + gnd_height = gndCrossMag; field_0x6e0 = 1; if (current.pos.y < gndCrossMag) { mGroundHeight = current.pos.y; } else { - mGroundHeight = field_0x700; + mGroundHeight = mGroundFlyHeight; } if (o_step != NULL) { @@ -382,37 +385,37 @@ f32 daKago_c::checkGroundHeight(cXyz i_pos, f32* o_step) { field_0x6e6 = 1; } } else { - field_0x71c = 0; + mWaterSplashTimer = 0; field_0x6e6 = 0; } - return retVal; + return gnd_height; } -f32 daKago_c::checkRoofHeight(cXyz param_0) { - f32 roofChkYVal = mRoofHeight; +f32 daKago_c::checkRoofHeight(cXyz i_pos) { + f32 roof_height = mRoofHeight; BOOL unkFlag1 = FALSE; field_0x6e5 = 0; dBgS_RoofChk roofChk; - cXyz unkXyz1(param_0.x, param_0.y - 500.0f, param_0.z); - roofChk.SetPos(unkXyz1); + cXyz chkpos(i_pos.x, i_pos.y - 500.0f, i_pos.z); + roofChk.SetPos(chkpos); - roofChkYVal = dComIfG_Bgsp().RoofChk(&roofChk); - if (roofChkYVal != G_CM3D_F_INF) { - roofChkYVal -= l_HIO.mFlightCeilingAltitude; - if (current.pos.y > roofChkYVal) { + roof_height = dComIfG_Bgsp().RoofChk(&roofChk); + if (roof_height != G_CM3D_F_INF) { + roof_height -= l_HIO.mFlightCeilingAltitude; + if (current.pos.y > roof_height) { mRoofHeight = current.pos.y; } else { - mRoofHeight = roofChkYVal; + mRoofHeight = roof_height; } if (dComIfG_Bgsp().GetSpecialCode(roofChk) == 1) { unkFlag1 = TRUE; } - if (std::abs(current.pos.y - roofChkYVal) < 310.0f) { + if (std::abs(current.pos.y - roof_height) < 310.0f) { fopAc_ac_c* actor = dComIfG_Bgsp().GetActorPointer(roofChk); if (actor != NULL && fopAcM_GetName(actor) == PROC_Obj_RIVERROCK) { if (((daObjRIVERROCK_c*)actor)->mBreakSubAction == daObjRIVERROCK_c::BREAK_MOVE) { @@ -432,7 +435,7 @@ f32 daKago_c::checkRoofHeight(cXyz param_0) { field_0x6e3 = 0; } - return roofChkYVal; + return roof_height; } void daKago_c::checkMoveHeight() { @@ -444,58 +447,61 @@ void daKago_c::checkMoveHeight() { void daKago_c::checkSizeBg() { dBgS_LinChk linChk; - cXyz unkXyz1; - cXyz unkXyz2; + cXyz line_start; + cXyz line_end; cM3dGPla plane; - J3DModel* model = mpMorf->getModel(); + J3DModel* model = mAnm_p->getModel(); field_0x6d9 = 0; - if (mCurrentAction == 4) { + if (mAction == ACTION_WAIT_e) { return; } - mDoMtx_stack_c::copy(model->getAnmMtx(10)); - mDoMtx_stack_c::multVecZero(&unkXyz1); - mDoMtx_stack_c::copy(model->getAnmMtx(14)); - mDoMtx_stack_c::multVecZero(&unkXyz2); - unkXyz2 = unkXyz1 + (unkXyz2 - unkXyz1) * 0.9f; - linChk.Set(&unkXyz1, &unkXyz2, NULL); + mDoMtx_stack_c::copy(model->getAnmMtx(YC_JNT_SHOULDERL_1_e)); + mDoMtx_stack_c::multVecZero(&line_start); + mDoMtx_stack_c::copy(model->getAnmMtx(YC_JNT_HANDL_3_e)); + mDoMtx_stack_c::multVecZero(&line_end); + line_end = line_start + (line_end - line_start) * 0.9f; + linChk.Set(&line_start, &line_end, NULL); + if (dComIfG_Bgsp().LineCross(&linChk)) { dComIfG_Bgsp().GetTriPla(linChk, &plane); if (dComIfG_Bgsp().GetSpecialCode(linChk) == 1) { field_0x6d9 |= (u8)1; - field_0x650[0] = linChk.GetCross(); + mWallHitEffPos[0] = linChk.GetCross(); } } - mDoMtx_stack_c::copy(model->getAnmMtx(15)); - mDoMtx_stack_c::multVecZero(&unkXyz1); - mDoMtx_stack_c::copy(model->getAnmMtx(19)); - mDoMtx_stack_c::multVecZero(&unkXyz2); - unkXyz2 = (unkXyz1 + (unkXyz2 - unkXyz1) * 0.9f); - linChk.Set(&unkXyz1, &unkXyz2, NULL); + mDoMtx_stack_c::copy(model->getAnmMtx(YC_JNT_SHOULDERR_1_e)); + mDoMtx_stack_c::multVecZero(&line_start); + mDoMtx_stack_c::copy(model->getAnmMtx(YC_JNT_HANDR_3_e)); + mDoMtx_stack_c::multVecZero(&line_end); + line_end = (line_start + (line_end - line_start) * 0.9f); + linChk.Set(&line_start, &line_end, NULL); + if (dComIfG_Bgsp().LineCross(&linChk)) { dComIfG_Bgsp().GetTriPla(linChk, &plane); if (dComIfG_Bgsp().GetSpecialCode(linChk) == 1) { field_0x6d9 |= (u8)0x2; - field_0x650[1] = linChk.GetCross(); + mWallHitEffPos[1] = linChk.GetCross(); } } - unkXyz1 = current.pos; - mDoMtx_stack_c::copy(model->getAnmMtx(1)); - mDoMtx_stack_c::multVecZero(&unkXyz1); + line_start = current.pos; + mDoMtx_stack_c::copy(model->getAnmMtx(YC_JNT_BACKBONE1_e)); + mDoMtx_stack_c::multVecZero(&line_start); mDoMtx_stack_c::transM(300.0f, 0.0f, 0.0f); - mDoMtx_stack_c::multVecZero(&unkXyz2); - linChk.Set(&unkXyz1, &unkXyz2, NULL); + mDoMtx_stack_c::multVecZero(&line_end); + linChk.Set(&line_start, &line_end, NULL); + if (dComIfG_Bgsp().LineCross(&linChk)) { dComIfG_Bgsp().GetTriPla(linChk, &plane); if (dComIfG_Bgsp().GetSpecialCode(linChk) == 1) { if (!checkYaguraPos(linChk.GetCross())) { field_0x6d9 |= (u8)4; - this->field_0x650[2] = linChk.GetCross(); + mWallHitEffPos[2] = linChk.GetCross(); } } } @@ -505,12 +511,12 @@ s16 daKago_c::getBeforeGroundHeight(u8 param_0) { return 0; } -void daKago_c::demo_skip(int param_0) { +void daKago_c::demo_skip(int i_parameter) { dCamera_c* camera = dCam_getBody(); - switch (param_0) { + switch (i_parameter) { case 0: - field_0x748 = 2; + mDemoMode = 2; field_0x74c = 0; break; case 1: @@ -521,10 +527,10 @@ void daKago_c::demo_skip(int param_0) { case 2: setMidnaRideOn(); setPlayerRideOn(); - field_0x718 = field_0x71a = 0; + mHeadRotZ = mHeadRotY = 0; /* dSv_event_flag_c::M_051 - Main Event - Shadow Kargorok (?) (Large) event complete (Horse grass appears in various places) */ dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[84]); - field_0x748 = 7; + mDemoMode = 7; field_0x74c = 0; break; case 4: @@ -534,10 +540,10 @@ void daKago_c::demo_skip(int param_0) { case 5: case 6: if (setSceneChange(3)) { - if (param_0 == 5) { - field_0x748 = 6; + if (i_parameter == 5) { + mDemoMode = 6; } else { - field_0x748 = 5; + mDemoMode = 5; field_0x6cc = 1.0f; } } @@ -545,14 +551,14 @@ void daKago_c::demo_skip(int param_0) { case 7: setRideOff(); case 8: { - field_0x68c.set(-77875.0f, -18287.0f, 42000.0f); - field_0x698.set(-77275.0f, -18500.0f, 41090.0f); + mDemoCamCenter.set(-77875.0f, -18287.0f, 42000.0f); + mDemoCamEye.set(-77275.0f, -18500.0f, 41090.0f); field_0x6a4.set(-77615.0f, -18640.0f, 41400.0f); daPy_getPlayerActorClass()->setPlayerPosAndAngle(&field_0x6a4, 0, 0); field_0x6de = 0; speed.y = speedF = 0.0f; - setActionMode(4, 0); - camera->Set(field_0x68c, field_0x698, 70.0f, 0); + setActionMode(ACTION_WAIT_e, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, 70.0f, 0); camera->Reset(); camera->Start(); camera->SetTrimSize(0); @@ -563,14 +569,14 @@ void daKago_c::demo_skip(int param_0) { case 9: setRideOff(); case 10: - field_0x68c.set(3703.0f, 337.0f, 863.0f); - field_0x698.set(3726.0f, 272.0f, 1196.0f); + mDemoCamCenter.set(3703.0f, 337.0f, 863.0f); + mDemoCamEye.set(3726.0f, 272.0f, 1196.0f); field_0x6a4.set(3782.0f, 222.0f, 690.0f); daPy_getPlayerActorClass()->setPlayerPosAndAngle(&field_0x6a4, 0, 0); field_0x6de = 0; speed.y = speedF = 0.0f; - setActionMode(4, 0); - camera->Set(field_0x68c, field_0x698, 70.0f, 0); + setActionMode(ACTION_WAIT_e, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, 70.0f, 0); camera->Reset(); camera->Start(); camera->SetTrimSize(0); @@ -579,27 +585,28 @@ void daKago_c::demo_skip(int param_0) { } } -int daKago_c::DemoSkipCallBack(void* param_0, int param_1) { - if (param_0 != NULL) { - ((daKago_c*)param_0)->demo_skip(param_1); - return 1; +int daKago_c::DemoSkipCallBack(void* i_this, int i_parameter) { + if (i_this != NULL) { + ((daKago_c*)i_this)->demo_skip(i_parameter); + return TRUE; } - return 0; + + return FALSE; } -void daKago_c::setActionMode(int param_0, int param_1) { +void daKago_c::setActionMode(int i_action, int i_mode) { mIsFlying = false; - mCurrentAction = param_0; - field_0x744 = param_1; + mAction = i_action; + mMode = i_mode; } void daKago_c::setMidnaTagPos() { - cXyz unkXyz1; + cXyz tagPos; daMidna_c* midna = daPy_getPlayerActorClass()->getMidnaActor(); if (midna != NULL) { mDoMtx_stack_c::copy(getMidnaLocaterMtx()); - mDoMtx_stack_c::multVecZero(&unkXyz1); - midna->onTagWaitPos(&unkXyz1); + mDoMtx_stack_c::multVecZero(&tagPos); + midna->onTagWaitPos(&tagPos); } } @@ -621,6 +628,7 @@ void daKago_c::setRideOff() { midna->offTagWaitPos(); midna->offCargoActor(); } + daPy_getPlayerActorClass()->offCargoCarry(); } @@ -628,78 +636,75 @@ s8 daKago_c::searchNearPassPoint() { cXyz pointPos; cXyz playerPos(daPy_getPlayerActorClass()->current.pos); - f32 unkFloat1; - f32 unkFloat2 = unkFloat1 = 100000.0f; - int pointIdx1; - for (int i = 0; i < mpPath1->m_num; i++) { - pointPos = dPath_GetPnt(mpPath1,i)->m_position; + f32 prev_nearest_distXZ, nearest_distXZ; + nearest_distXZ = prev_nearest_distXZ = 100000.0f; + int nearest_point_no; - f32 playerLatDist = playerPos.absXZ(pointPos); - if (playerLatDist < unkFloat2) { - unkFloat1 = unkFloat2; - unkFloat2 = playerLatDist; - pointIdx1 = i; - } else if (playerLatDist < unkFloat1) { - unkFloat1 = playerLatDist; + for (int i = 0; i < mpPath1->m_num; i++) { + pointPos = dPath_GetPnt(mpPath1, i)->m_position; + + f32 player_pnt_distXZ = playerPos.absXZ(pointPos); + if (player_pnt_distXZ < nearest_distXZ) { + prev_nearest_distXZ = nearest_distXZ; + nearest_distXZ = player_pnt_distXZ; + nearest_point_no = i; + } else if (player_pnt_distXZ < prev_nearest_distXZ) { + prev_nearest_distXZ = player_pnt_distXZ; } } - int pointIdx2 = pointIdx1 + mPathIdxOffset; - if (pointIdx2 < 0) { - pointIdx2 = 1; - } else if (pointIdx2 >= mpPath1->m_num) { - pointIdx2 = mpPath1->m_num - 1; + int next_point_no = nearest_point_no + mPathStep; + if (next_point_no < 0) { + next_point_no = 1; + } else if (next_point_no >= mpPath1->m_num) { + next_point_no = mpPath1->m_num - 1; } - return pointIdx2; + return next_point_no; } -int daKago_c::setSceneChange(int param_0) { - int unkInt1 = 0; - switch (param_0) { - case 0: - if (field_0x6e7 == 0) { - unkInt1 = 1; - } else { - unkInt1 = 6; - } +int daKago_c::setSceneChange(int i_mode) { + int exitID = 0; + switch (i_mode) { + case 0: + if (mType == TYPE_TWILIGHT) { + exitID = 1; + } else { + exitID = 6; + } break; case 1: - unkInt1 = 0; - + exitID = 0; endBalloonScore(); - break; case 2: - if (field_0x6e7 == 0) { - unkInt1 = 3; + if (mType == TYPE_TWILIGHT) { + exitID = 3; } else { - unkInt1 = 0; + exitID = 0; } endBalloonScore(); - break; case 3: - unkInt1 = 3; - + exitID = 3; break; } - return dStage_changeScene(unkInt1, 0.0f, 10, fopAcM_GetRoomNo(this), 0, -1); + return dStage_changeScene(exitID, 0.0f, 10, fopAcM_GetRoomNo(this), 0, -1); } void daKago_c::createBalloonScore() { - if (field_0x6e7 != 0 && mBalloon2DId == fpcM_ERROR_PROCESS_ID_e) { - mBalloon2DId = fopAcM_create(PROC_BALLOON2D, 0, 0, 0xffffffff, 0, 0, -1); + if (mType != TYPE_TWILIGHT && mBalloon2DId == fpcM_ERROR_PROCESS_ID_e) { + mBalloon2DId = fopAcM_create(PROC_BALLOON2D, 0, NULL, -1, NULL, NULL, -1); field_0x6e9 = 1; } } void daKago_c::startBalloonScore() { fopAc_ac_c* balloon_actor; - if (field_0x6e7 != 0 && field_0x6e9 == 1) { + if (mType != TYPE_TWILIGHT && field_0x6e9 == 1) { fopAcM_SearchByID(mBalloon2DId, &balloon_actor); if (balloon_actor != NULL) { ((daBalloon2D_c*)balloon_actor)->show(); @@ -711,9 +716,9 @@ void daKago_c::startBalloonScore() { void daKago_c::endBalloonScore() { fopAc_ac_c* balloon2D; - fopAc_ac_c *balloonObj; + fopAc_ac_c* balloonObj; - if (field_0x6e7 != 0) { + if (mType != TYPE_TWILIGHT) { fopAcM_SearchByID(mBalloon2DId, &balloon2D); if (balloon2D != NULL) { ((daBalloon2D_c*)balloon2D)->hide(); @@ -726,11 +731,11 @@ void daKago_c::endBalloonScore() { } } -f32 daKago_c::checkNextPath(cXyz param_0) { +f32 daKago_c::checkNextPath(cXyz i_pntPos) { cXyz cStack_14; mDoMtx_stack_c::YrotS(-field_0x714); mDoMtx_stack_c::transM(-current.pos.x, -current.pos.y, -current.pos.z); - mDoMtx_stack_c::multVec(¶m_0, &cStack_14); + mDoMtx_stack_c::multVec(&i_pntPos, &cStack_14); return cStack_14.z; } @@ -745,10 +750,11 @@ void daKago_c::checkHeight() { bool daKago_c::checkYaguraPos(cXyz param_0) { cXyz local_18(-22984.0f, 0.0f, 7455.0f); cXyz cStack_24; - s16 temp = -0x770; - mDoMtx_stack_c::YrotS(-temp); + s16 rot_y = -0x770; + mDoMtx_stack_c::YrotS(-rot_y); mDoMtx_stack_c::transM(-local_18.x, -local_18.y, -local_18.z); mDoMtx_stack_c::multVec(¶m_0, &cStack_24); + if (std::abs(cStack_24.z) < 700.0f) { return true; } else { @@ -758,12 +764,12 @@ bool daKago_c::checkYaguraPos(cXyz param_0) { bool daKago_c::checkWallHitFall(int param_0) { if (field_0x6e5 != 0) { - cXyz unkXyz1; - setActionMode(1, 3); - dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); - unkXyz1 = current.pos; - unkXyz1.y += 200.0f; - setWallHitEffect(unkXyz1, 0); + cXyz effpos; + setActionMode(ACTION_STAGGER_e, 3); + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + effpos = current.pos; + effpos.y += 200.0f; + setWallHitEffect(effpos, 0); return true; } @@ -773,37 +779,37 @@ bool daKago_c::checkWallHitFall(int param_0) { if (!checkYaguraPos(current.pos)) { if (abs(unkInt1) > 0x7000) { field_0x6d9 |= (u8)0x4; - field_0x650[2].set(current.pos.x + cM_ssin(shape_angle.y) * 200.0f, current.pos.y, current.pos.z + cM_scos(shape_angle.y) * 200.0f); + mWallHitEffPos[2].set(current.pos.x + cM_ssin(shape_angle.y) * 200.0f, current.pos.y, current.pos.z + cM_scos(shape_angle.y) * 200.0f); } } if (unkInt1 > 0) { field_0x6d9 |= (u8)0x1; - field_0x650[0].set(current.pos.x + cM_ssin(shape_angle.y + 0x4000) * 200.0f, current.pos.y, - current.pos.z + cM_scos(shape_angle.y + 0x4000) * 200.0f); + mWallHitEffPos[0].set(current.pos.x + cM_ssin(shape_angle.y + 0x4000) * 200.0f, current.pos.y, + current.pos.z + cM_scos(shape_angle.y + 0x4000) * 200.0f); } else { field_0x6d9 |= (u8)0x2; - field_0x650[1].set(current.pos.x + cM_ssin(shape_angle.y + -0x4000) * 200.0f, - current.pos.y, - current.pos.z + cM_scos(shape_angle.y + -0x4000) * 200.0f); + mWallHitEffPos[1].set(current.pos.x + cM_ssin(shape_angle.y + -0x4000) * 200.0f, + current.pos.y, + current.pos.z + cM_scos(shape_angle.y + -0x4000) * 200.0f); } } if ((field_0x6d9 & 0x4) != 0) { - setActionMode(1, 0); - dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); - setWallHitEffect(field_0x650[2], 0); + setActionMode(ACTION_STAGGER_e, 0); + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + setWallHitEffect(mWallHitEffPos[2], 0); return true; } - if (param_0 != 0 && field_0x720 == 0 && (field_0x6d9 & 0x3) != 0) { - dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + if (param_0 != 0 && mWallHitInvulnTimer == 0 && (field_0x6d9 & 0x3) != 0) { + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); if ((field_0x6d9 & 0x1) != 0) { - setActionMode(1, 1); - setWallHitEffect(field_0x650[0], 1); + setActionMode(ACTION_STAGGER_e, 1); + setWallHitEffect(mWallHitEffPos[0], 1); } else { - setActionMode(1, 2); - setWallHitEffect(field_0x650[1], 1); + setActionMode(ACTION_STAGGER_e, 2); + setWallHitEffect(mWallHitEffPos[1], 1); } return true; } @@ -816,8 +822,8 @@ bool daKago_c::checkAttackStart() { return false; } - if (mDoCPd_c::getTrigA(0)) { - setActionMode(5, 0); + if (mDoCPd_c::getTrigA(PAD_1)) { + setActionMode(ACTION_ATTACK_e, 0); mIsFlying = true; return true; } else { @@ -825,11 +831,9 @@ bool daKago_c::checkAttackStart() { } } -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#define MAX(a, b) ((a) > (b) ? (a) : (b)) - s16 daKago_c::getValueY(f32 param_0) { - s16 valueY = field_0x6f4 * param_0; + s16 valueY = mStickY * param_0; + f32 var_f31; if (valueY < 0) { if (current.pos.y > mRoofHeight - 200.0f) { @@ -853,11 +857,11 @@ s16 daKago_c::getValueY(f32 param_0) { } s16 daKago_c::getValueX(f32 param_0) { - return -field_0x6f0 * param_0; + return -mStickX * param_0; } s16 daKago_c::getValueAbsX(f32 param_0) { - return std::abs(-field_0x6f0 * param_0); + return std::abs(-mStickX * param_0); } void daKago_c::flySpeedCalcLockOn() { @@ -873,31 +877,31 @@ void daKago_c::flySpeedCalcLockOn() { cLib_addCalcAngleS(¤t.angle.x, angleX, 8, 0x100, 0x10); shape_angle.x = current.angle.x; - s16 angleX2 = current.angle.y; + + s16 prevAngleY = current.angle.y; cLib_addCalcAngleS(¤t.angle.y, angleY, 8, 0x100, 0x10); shape_angle.y = current.angle.y; - cLib_addCalcAngleS(&shape_angle.z, ((angleX2 - current.angle.y) * 0x20), 8, 0x400, 0x10); + cLib_addCalcAngleS(&shape_angle.z, ((prevAngleY - current.angle.y) * 0x20), 8, 0x400, 0x10); if (shape_angle.z > 0x3000) { shape_angle.z = 0x3000; } - if (shape_angle.z < -0x3000) { shape_angle.z = -0x3000; } } -void daKago_c::flySpeedCalc(s16 param_0, int param_1) { +void daKago_c::flySpeedCalc(s16 param_0, int i_calcType) { s16 var_r29; s16 var_r28; s16 var_r27; s16 sp_8; - if (param_1 == 0) { + if (i_calcType == 0) { sp_8 = 0x2000; - } else if (param_1 == 1) { + } else if (i_calcType == 1) { sp_8 = 0x1000; - } else if (param_1 == 2) { + } else if (i_calcType == 2) { sp_8 = 0x2aaa; } @@ -910,7 +914,7 @@ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { field_0x710 += getValueY(40.0f); var_r29 = 0x200; - if (param_1 == 2) { + if (i_calcType == 2) { var_r29 = 0x400; } if (field_0x710 > var_r29) { @@ -920,7 +924,7 @@ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { field_0x710 = -var_r29; } - if (field_0x6f4 > 0.0f) { + if (mStickY > 0.0f) { if (current.angle.x < var_r28) { current.angle.x += field_0x710; } else { @@ -952,6 +956,7 @@ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { } current.angle.x += field_0x710; } + if (current.angle.x > 0x2aaa) { current.angle.x = 0x2aaa; } @@ -961,28 +966,28 @@ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { shape_angle.x = current.angle.x; var_r27 = 0x2000; - if (param_1 == 1) { + if (i_calcType == 1) { var_r27 = 0x1000; - } else if (param_1 == 2) { + } else if (i_calcType == 2) { var_r27 = 0x2aaa; } f32 unkFloat1 = 20.0f; var_r29 = 0x100; - if (param_1 == 2) { + if (i_calcType == 2) { unkFloat1 = 30.0f; var_r29 = 0x200; } var_r28 = param_0 + getValueX(var_r27); if (mpLockActor != NULL) { - var_r28 = cLib_targetAngleY((Vec*)¤t, (Vec*)&mpLockActor->current); + var_r28 = cLib_targetAngleY(¤t.pos, &mpLockActor->current.pos); } int always_zero = 0; if (!always_zero) { if (abs((s16)(current.angle.y - param_0)) < var_r27) { - if (field_0x6f0) { + if (mStickX) { field_0x712 += getValueX(unkFloat1); if (field_0x712 > getValueAbsX(var_r29)) { field_0x712 = getValueAbsX(var_r29); @@ -993,18 +998,20 @@ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { } else { cLib_addCalcAngleS(&field_0x712, 0, 8, 0x20, 0x10); } + current.angle.y += field_0x712; } else { int sp_14 = 0; - if (field_0x6f0 < 0.0f) { + if (mStickX < 0.0f) { if ((s16)(current.angle.y - param_0) < var_r27) { sp_14 = 1; } } else { - if (field_0x6f0 > 0.0f && (s16)(current.angle.y - param_0) > var_r27) { + if (mStickX > 0.0f && (s16)(current.angle.y - param_0) > var_r27) { sp_14 = 1; } } + if (sp_14 != 0) { field_0x712 += getValueX(unkFloat1); if (field_0x712 > getValueAbsX(var_r29)) { @@ -1020,7 +1027,9 @@ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { } } } + shape_angle.y = current.angle.y; + cLib_addCalcAngleS(&shape_angle.z, -field_0x712 * 0x20, 8, 0x400, 0x10); if (shape_angle.z > 0x3000) { shape_angle.z = 0x3000; @@ -1031,7 +1040,7 @@ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { if (field_0x6e3 == 1) { field_0x6e3 = 2; - if (field_0x6e7 == 1) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); @@ -1040,58 +1049,60 @@ void daKago_c::flySpeedCalc(s16 param_0, int param_1) { if (field_0x6e6 == 1) { field_0x6e6 = 2; - if (mCurrentAction == 5) { - field_0x71c = l_HIO.mSplashGenTimeDuringDash; + if (mAction == ACTION_ATTACK_e) { + mWaterSplashTimer = l_HIO.mSplashGenTimeDuringDash; } else { - field_0x71c = l_HIO.mWaterSplashTime; + mWaterSplashTimer = l_HIO.mWaterSplashTime; } } } bool daKago_c::checkFlySceneChange() { - if ((mPathIdxOffset > 0 && mPathIdx >= mpPath1->m_num - 1 || - mPathIdxOffset < 0 && mPathIdx < 1) && - field_0x73c == 1 && fopOvlpM_IsPeek() == 0) + if (((mPathStep > 0 && mPathCurrentPointNo >= mpPath1->m_num - 1) || (mPathStep < 0 && mPathCurrentPointNo < 1)) + && mSceneType == SCENE_TYPE_RIVER + && !fopOvlpM_IsPeek()) { - setActionMode(0, 4); + setActionMode(ACTION_FLY_e, 4); field_0x728 = 300; - if (checkBck(9) == 0) { - setBck(9, 2, 10.0f, 1.0f); + if (!checkBck(dRes_ID_E_YC_BCK_YC_FLY_e)) { + setBck(dRes_ID_E_YC_BCK_YC_FLY_e, 2, 10.0f, 1.0f); } - if (mPathIdxOffset > 0) { + if (mPathStep > 0) { setSceneChange(1); } else { setSceneChange(2); } return true; - } else { - return false; } + + return false; } void daKago_c::setFlyAway() { current.angle.y = shape_angle.y; - setActionMode(0, 3); + setActionMode(ACTION_FLY_e, 3); field_0x728 = 90; - if (!checkBck(9)) { - setBck(9, 2, 10.0f, 1.0f); + + if (!checkBck(dRes_ID_E_YC_BCK_YC_FLY_e)) { + setBck(dRes_ID_E_YC_BCK_YC_FLY_e, 2, 10.0f, 1.0f); } + dComIfGp_getVibration().StopQuake(0x1f); } void daKago_c::setFlyAnime() { if (cM_rnd() < 0.5) { - if (checkBck(15) == 0) { - setBck(15, 2, 10.0f, 1.0f); + if (!checkBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e)) { + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 10.0f, 1.0f); } else { - setBck(13, 2, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_WL_e, 2, 10.0f, 1.0f); } } else { - if (!checkBck(13)) { - setBck(13, 2, 10.0f, 1.0f); + if (!checkBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_WL_e)) { + setBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_WL_e, 2, 10.0f, 1.0f); } } @@ -1099,23 +1110,24 @@ void daKago_c::setFlyAnime() { } void daKago_c::executeFly() { - s16 unkInt1; - s16 unkInt2; - f32 unkFloat1; - cXyz unkXyz1; - cXyz unkXyz2; + s16 pntAngleY; + s16 pntAngleX; + f32 targetFlySpeed; + cXyz nextPntPos; + cXyz prevPntPos; cXyz unkXyz3; startBalloonScore(); - if (field_0x744 < 3) { + if (mMode < 3) { if (mDashCooldownTime == 0) { - dComIfGp_setDoStatusForce(0x4b, 0); + dComIfGp_setDoStatusForce(BUTTON_STATUS_UNK_75, 0); } - if (field_0x6e7 == 1) { - dComIfGp_setAStatusForce(0x2a, 0); + + if (mType == TYPE_NORMAL) { + dComIfGp_setAStatusForce(BUTTON_STATUS_QUIT, 0); } else { - dComIfGp_setAStatusForce(0x27, 0); + dComIfGp_setAStatusForce(BUTTON_STATUS_UNK_39, 0); } } @@ -1126,7 +1138,7 @@ void daKago_c::executeFly() { checkHeight(); mIsFlying = true; - switch (field_0x744) { + switch (mMode) { case 0: shape_angle.y = current.angle.y; mGroundHeight = checkGroundHeight(current.pos, NULL); @@ -1135,27 +1147,29 @@ void daKago_c::executeFly() { case 1: setFlyAnime(); field_0x710 = field_0x712 = 0; - field_0x744 = 2; + mMode = 2; break; case 2: - unkXyz1 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; - unkXyz2 = dPath_GetPnt(mpPath1, mPathIdx - mPathIdxOffset)->m_position; - unkInt1 = cLib_targetAngleY(&unkXyz2, &unkXyz1); - field_0x714 = unkInt1; - flySpeedCalc(unkInt1, 0); - if (checkBck(11)) { - if (mpMorf->isStop()) { + nextPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; + prevPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo - mPathStep)->m_position; + pntAngleY = cLib_targetAngleY(&prevPntPos, &nextPntPos); + field_0x714 = pntAngleY; + + flySpeedCalc(pntAngleY, 0); + + if (checkBck(dRes_ID_E_YC_BCK_YC_FLY_DASH_WL_e)) { + if (mAnm_p->isStop()) { setFlyAnime(); } } else { if (field_0x710 < 0) { - if (!checkBck(15)) { - setBck(15, 2, 10.0f, 1.0f); + if (!checkBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e)) { + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 10.0f, 1.0f); } field_0x728 = 10; } else if (field_0x710 > 0) { - if (!checkBck(13)) { - setBck(13, 2, 10.0f, 1.0f); + if (!checkBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_WL_e)) { + setBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_WL_e, 2, 10.0f, 1.0f); } field_0x728 = 90; } else { @@ -1164,22 +1178,26 @@ void daKago_c::executeFly() { } } } + if (cM_ssin(current.angle.x) > 0.0f) { - unkFloat1 = l_HIO.mFlightSpeed + l_HIO.mDescentRateIncrement * cM_ssin(current.angle.x); + targetFlySpeed = l_HIO.mFlightSpeed + l_HIO.mDescentRateIncrement * cM_ssin(current.angle.x); } else { - unkFloat1 = l_HIO.mFlightSpeed + l_HIO.mAscentRateDecel * cM_ssin(current.angle.x); + targetFlySpeed = l_HIO.mFlightSpeed + l_HIO.mAscentRateDecel * cM_ssin(current.angle.x); } - if (std::abs(field_0x6f8 - unkFloat1) > 10.0f) { - cLib_chaseF(&field_0x6f8, unkFloat1, 2.0f); + + if (std::abs(mFlySpeed - targetFlySpeed) > 10.0f) { + cLib_chaseF(&mFlySpeed, targetFlySpeed, 2.0f); } else { - cLib_chaseF(&field_0x6f8, unkFloat1, 1.0f); + cLib_chaseF(&mFlySpeed, targetFlySpeed, 1.0f); } - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); - unkXyz3.z = checkNextPath(unkXyz1); + + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); + + unkXyz3.z = checkNextPath(nextPntPos); if (unkXyz3.z < 0.0f) { - if (abs((s16)(unkInt1 - cLib_targetAngleY(&unkXyz2, ¤t.pos))) < 0x4000) { - mPathIdx += mPathIdxOffset; + if (abs((s16)(pntAngleY - cLib_targetAngleY(&prevPntPos, ¤t.pos))) < 0x4000) { + mPathCurrentPointNo += mPathStep; if (checkFlySceneChange()) { return; } @@ -1188,35 +1206,40 @@ void daKago_c::executeFly() { break; case 3: case 4: - if (mPathIdx >= mpPath1->m_num) { - unkInt1 = current.angle.y; - unkInt2 = 0; + if (mPathCurrentPointNo >= mpPath1->m_num) { + pntAngleY = current.angle.y; + pntAngleX = 0; } else { - unkXyz1 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; - unkXyz2 = dPath_GetPnt(mpPath1, mPathIdx - mPathIdxOffset)->m_position; - unkInt1 = cLib_targetAngleY(&unkXyz2, &unkXyz1); - unkInt2 = -cLib_targetAngleX(&unkXyz2, &unkXyz1); + nextPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; + prevPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo - mPathStep)->m_position; + pntAngleY = cLib_targetAngleY(&prevPntPos, &nextPntPos); + pntAngleX = -cLib_targetAngleX(&prevPntPos, &nextPntPos); } - if (field_0x744 == 3) { + + if (mMode == 3) { cLib_chaseUC(&field_0x6de, 0, 4); - cLib_addCalcAngleS(¤t.angle.x, -8192, 8, 0x100, 0x10); + cLib_addCalcAngleS(¤t.angle.x, -0x2000, 8, 0x100, 0x10); } else { - cLib_addCalcAngleS(¤t.angle.x, unkInt2, 8, 0x100, 0x10); + cLib_addCalcAngleS(¤t.angle.x, pntAngleX, 8, 0x100, 0x10); } + shape_angle.x = current.angle.x; - cLib_addCalcAngleS(¤t.angle.y, unkInt1, 8, 0x400, 0x10); + cLib_addCalcAngleS(¤t.angle.y, pntAngleY, 8, 0x400, 0x10); shape_angle.y = current.angle.y; cLib_addCalcAngleS(&shape_angle.z, 0, 8, 0x400, 0x10); - unkFloat1 = l_HIO.mFlightSpeed + 20.0f; - if (std::abs(field_0x6f8 - unkFloat1) > 10.0f) { - cLib_chaseF(&field_0x6f8, unkFloat1, 2.0f); + targetFlySpeed = l_HIO.mFlightSpeed + 20.0f; + + if (std::abs(mFlySpeed - targetFlySpeed) > 10.0f) { + cLib_chaseF(&mFlySpeed, targetFlySpeed, 2.0f); } else { - cLib_chaseF(&field_0x6f8, unkFloat1, 1.0f); + cLib_chaseF(&mFlySpeed, targetFlySpeed, 1.0f); } - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); + if (field_0x728 == 0) { - setActionMode(4, 0); + setActionMode(ACTION_WAIT_e, 0); } return; } @@ -1229,31 +1252,31 @@ void daKago_c::executeFly() { void daKago_c::executeStagger() { dCamera_c* camera = dCam_getBody(); - cXyz cStack_94 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; - cXyz cStack_a0 = dPath_GetPnt(mpPath1, mPathIdx - mPathIdxOffset)->m_position; + cXyz nextPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; + cXyz prevPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo - mPathStep)->m_position; - field_0x714 = cLib_targetAngleY(&cStack_a0, &cStack_94); + field_0x714 = cLib_targetAngleY(&prevPntPos, &nextPntPos); - if (field_0x6e7 == 1) { - dComIfGp_setAStatusForce(0x2a, 0); + if (mType == TYPE_NORMAL) { + dComIfGp_setAStatusForce(BUTTON_STATUS_QUIT, 0); } else { - dComIfGp_setAStatusForce(0x27, 0); + dComIfGp_setAStatusForce(BUTTON_STATUS_UNK_39, 0); } checkHeight(); mIsFlying = true; - switch (field_0x744) { + switch (mMode) { case 0: mSph.OffAtSetBit(); - daPy_getPlayerActorClass()->setPlayerDamage(0, 1); + daPy_getPlayerActorClass()->setPlayerDamage(0, TRUE); - mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(6)); + mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(YC_JNT_HEAD_e)); mDoMtx_stack_c::multVecZero(&field_0x674); - if (field_0x6e7 == 0) { + if (mType == TYPE_TWILIGHT) { mSound.startCreatureSound(Z2SE_EN_YC_CRASH, 0, -1); mSound.startCreatureVoice(Z2SE_EN_YC_V_HANGED, -1); } else { @@ -1261,12 +1284,12 @@ void daKago_c::executeStagger() { mSound.startCreatureVoice(Z2SE_EN_KC_V_CRASH, -1); } - setBck(7, 0, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_CRASH_e, 0, 10.0f, 1.0f); field_0x728 = 60; speedF = 30.0f; - if (current.pos.y < cStack_94.y) { + if (current.pos.y < nextPntPos.y) { speed.y = 30.0f; } else { speed.y = -30.0f; @@ -1274,22 +1297,21 @@ void daKago_c::executeStagger() { current.angle.y = field_0x6da - (s16)(current.angle.y - field_0x6da) + 0x8000; - field_0x744 = 4; - + mMode = 4; break; case 1: case 2: mSph.OffAtSetBit(); - daPy_getPlayerActorClass()->setPlayerDamage(0, 1); + daPy_getPlayerActorClass()->setPlayerDamage(0, TRUE); - setBck(15, 2, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 10.0f, 1.0f); field_0x728 = 10; - field_0x720 = (int)l_HIO.mWallHitInvulnTime; + mWallHitInvulnTimer = (int)l_HIO.mWallHitInvulnTime; speedF = 40.0f; - if (field_0x744 == 1) { + if (mMode == 1) { shape_angle.z = 0x3000; ANGLE_ADD(current.angle.y, -0x2000); if (abs((s16)(current.angle.y - field_0x714)) > 0x2000) { @@ -1306,18 +1328,17 @@ void daKago_c::executeStagger() { mSound.startCreatureSound(Z2SE_EN_YC_HIT_SIDE, 0, -1); dComIfGp_getVibration().StartQuake(1, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); - field_0x744 = 5; - + mMode = 5; break; case 3: - daPy_getPlayerActorClass()->setPlayerDamage(2, 1); + daPy_getPlayerActorClass()->setPlayerDamage(2, TRUE); mSph.OffAtSetBit(); - mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(6)); + mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(YC_JNT_HEAD_e)); mDoMtx_stack_c::multVecZero(&field_0x674); - if (field_0x6e7 == 0) { + if (mType == TYPE_TWILIGHT) { mSound.startCreatureSound(Z2SE_EN_YC_CRASH, 0, -1); mSound.startCreatureVoice(Z2SE_EN_YC_V_HANGED, -1); } else { @@ -1325,14 +1346,13 @@ void daKago_c::executeStagger() { mSound.startCreatureVoice(Z2SE_EN_KC_V_CRASH, -1); } - setBck(7, 0, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_CRASH_e, 0, 10.0f, 1.0f); - field_0x728 = 0x3c; + field_0x728 = 60; speedF = 30.0f; speed.y = -50.0f; - field_0x744 = 6; - + mMode = 6; break; case 5: cLib_addCalcAngleS(&shape_angle.y, current.angle.y, 8, 0x400, 0x40); @@ -1351,28 +1371,27 @@ void daKago_c::executeStagger() { } shape_angle.y = current.angle.y; - field_0x6f8 = 40.0f; + mFlySpeed = 40.0f; - setActionMode(0, 1); + setActionMode(ACTION_FLY_e, 1); dComIfGp_getVibration().StopQuake(0x1f); - break; case 4: case 6: - if (checkBck(7)) { - cXyz cStack_ac; + if (checkBck(dRes_ID_E_YC_BCK_YC_CRASH_e)) { + cXyz line_end; mDoMtx_stack_c::copy(mLegR3Mtx); - mDoMtx_stack_c::multVecZero(&cStack_ac); - cStack_ac.y -= 20.0f; + mDoMtx_stack_c::multVecZero(&line_end); + line_end.y -= 20.0f; - cXyz cStack_b8 = current.pos; - cStack_b8.y += 50.0f; + cXyz line_start = current.pos; + line_start.y += 50.0f; - dBgS_LinChk dStack_88; - dStack_88.Set(&cStack_b8, &cStack_ac, NULL); + dBgS_LinChk linechk; + linechk.Set(&line_start, &line_end, NULL); - if (dComIfG_Bgsp().LineCross(&dStack_88)) { + if (dComIfG_Bgsp().LineCross(&linechk)) { current.pos.y += 5.0f; } @@ -1380,13 +1399,13 @@ void daKago_c::executeStagger() { field_0x728 = 60; - if (mpMorf->checkFrame(22.0f)) { + if (mAnm_p->checkFrame(22.0f)) { setRideOff(); - setBck(8, 2, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_CRASH2_e, 2, 10.0f, 1.0f); } } - if (field_0x744 == 4) { + if (mMode == 4) { cLib_addCalcAngleS(&shape_angle.y, current.angle.y + 0x8000, 8, 0x100, 0x10); } else { cLib_addCalcAngleS(&shape_angle.y, current.angle.y, 8, 0x100, 0x10); @@ -1401,40 +1420,38 @@ void daKago_c::executeStagger() { if (field_0x728 == 0) { setFlyAway(); - field_0x6f8 = -10.0f; + mFlySpeed = -10.0f; } - break; } } void daKago_c::executeWait() { - daPy_py_c* player = (daPy_py_c*)daPy_getPlayerActorClass()->getMidnaActor(); + daMidna_c* midna = daPy_getPlayerActorClass()->getMidnaActor(); if (field_0x728 == 0) { cLib_chaseUC(&field_0x6de, 0, 4); } if (field_0x6df == 0) { - if (player->checkWolfCargoCarrySceneChange()) { - if (field_0x73c == 1) { + if (daPy_py_c::checkWolfCargoCarrySceneChange()) { + if (mSceneType == SCENE_TYPE_RIVER) { createBalloonScore(); if (dComIfGp_getStartStagePoint() == 0) { - mPathIdxOffset = 1; - mPathIdx = 0; + mPathStep = 1; + mPathCurrentPointNo = 0; mPathDir = 1; } else { - mPathIdxOffset = -1; - mPathIdx = mpPath1->m_num + -1; + mPathStep = -1; + mPathCurrentPointNo = mpPath1->m_num + -1; mPathDir = -1; } - old.pos = dPath_GetPnt(mpPath1, mPathIdx)->m_position; - current.pos = old.pos; - mPathIdx += mPathIdxOffset; - field_0x6a4 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; + current.pos = old.pos = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; + mPathCurrentPointNo += mPathStep; + field_0x6a4 = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; - current.angle.y = shape_angle.y = cLib_targetAngleY((Vec*)¤t, &field_0x6a4); - if (player != NULL) { + current.angle.y = shape_angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); + if (midna != NULL) { setMidnaRideOn(); setPlayerRideOn(); @@ -1442,16 +1459,16 @@ void daKago_c::executeWait() { field_0x6de = 0xff; field_0x6df = 1; - if (mPathDir == 1 && field_0x6e7 == 0 && dComIfGs_isSaveSwitch(9) == 0) { - setActionMode(9, 0); + if (mPathDir == 1 && mType == TYPE_TWILIGHT && !dComIfGs_isSaveSwitch(9)) { + setActionMode(ACTION_DEMO_FLY_e, 0); } else { - setActionMode(10, 0); + setActionMode(ACTION_DEMO_FLY2_e, 0); } setFlyAnime(); moveDemoFly(); } - } else if (field_0x73c == 0 || field_0x73c == 2) { + } else if (mSceneType == SCENE_TYPE_LAKE_HYLIA || mSceneType == SCENE_TYPE_BOARD_HOUSE) { setMidnaRideOn(); setPlayerRideOn(); @@ -1459,30 +1476,29 @@ void daKago_c::executeWait() { field_0x6de = 0xff; field_0x6df = 1; - setActionMode(8, 0); + setActionMode(ACTION_LANDING_e, 0); executeLanding(); } - } - return; } #if DEBUG mPathDir = 1; - if (mDoCPd_c::getHoldL(0) && mDoCPd_c::getHoldR(0) && - mDoCPd_c::getTrigB(0)) + if (mDoCPd_c::getHoldL(PAD_1) && mDoCPd_c::getHoldR(PAD_1) && + mDoCPd_c::getTrigB(PAD_1)) { - setActionMode(2, 0); + setActionMode(ACTION_EVENT_e, 0); - if (field_0x73c == 2) { + if (mSceneType == SCENE_TYPE_BOARD_HOUSE) { setKagoPath(1); } else { setKagoPath(5); - if (field_0x73c == 1) { + if (mSceneType == SCENE_TYPE_RIVER) { createBalloonScore(); + return; } } } @@ -1490,48 +1506,49 @@ void daKago_c::executeWait() { } bool daKago_c::calcAttackMove(int param_0) { - cXyz acStack_20; - cXyz cStack_2c; + cXyz nextPntPos; + cXyz prevPntPos; cXyz cStack_38; - acStack_20 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; - cStack_2c = dPath_GetPnt(mpPath1, mPathIdx - mPathIdxOffset)->m_position; + nextPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; + prevPntPos = dPath_GetPnt(mpPath1, mPathCurrentPointNo - mPathStep)->m_position; - s16 targetAngleY = cLib_targetAngleY(&cStack_2c, &acStack_20); - field_0x714 = targetAngleY; + s16 pntAngleY = cLib_targetAngleY(&prevPntPos, &nextPntPos); + field_0x714 = pntAngleY; if (mpLockActor != NULL) { flySpeedCalcLockOn(); } else { if (param_0 == 0) { - flySpeedCalc(targetAngleY, 1); + flySpeedCalc(pntAngleY, 1); } else { - flySpeedCalc(targetAngleY, 2); + flySpeedCalc(pntAngleY, 2); } } - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); - cStack_38.z = checkNextPath(acStack_20); + cStack_38.z = checkNextPath(nextPntPos); if (cStack_38.z < 0.0f) { - if (abs((s16)(targetAngleY - cLib_targetAngleY(&cStack_2c, ¤t.pos))) < 0x4000) { - mPathIdx += mPathIdxOffset; + if (abs((s16)(pntAngleY - cLib_targetAngleY(&prevPntPos, ¤t.pos))) < 0x4000) { + mPathCurrentPointNo += mPathStep; if (checkFlySceneChange()) { return true; } } } + return false; } void daKago_c::executeAttack() { - field_0x6dd = 1; + mIsAttack = TRUE; - if (field_0x6e7 == 1) { - dComIfGp_setAStatusForce(0x2a, 0); + if (mType == TYPE_NORMAL) { + dComIfGp_setAStatusForce(BUTTON_STATUS_QUIT, 0); } else { - dComIfGp_setAStatusForce(0x27, 0); + dComIfGp_setAStatusForce(BUTTON_STATUS_UNK_39, 0); } checkHeight(); @@ -1543,15 +1560,15 @@ void daKago_c::executeAttack() { setDashSibukiEffect(); } - switch (field_0x744) { + switch (mMode) { case 0: mDashCooldownTime = l_HIO.mDashCooldownTime; mDashTime = l_HIO.mDashTime; - field_0x744 = 1; + mMode = 1; setDashBlurEffect(0); - setBck(11, 0, 5.0f, l_HIO.mDashTimeMultiplier); + setBck(dRes_ID_E_YC_BCK_YC_FLY_DASH_WL_e, 0, 5.0f, l_HIO.mDashTimeMultiplier); dComIfGp_getVibration().StartShock(1, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); @@ -1568,18 +1585,20 @@ void daKago_c::executeAttack() { break; case 1: setDashEffect(); + if (calcAttackMove(0) == 0) { - cLib_chaseF(&field_0x6f8, 30.0f, l_HIO.mDashTimeMultiplier * 3.0f); - if (mpMorf->checkFrame(9.0f)) { - if (field_0x6e7 == 0) { + cLib_chaseF(&mFlySpeed, 30.0f, l_HIO.mDashTimeMultiplier * 3.0f); + if (mAnm_p->checkFrame(9.0f)) { + if (mType == TYPE_TWILIGHT) { mSound.startCreatureSound(Z2SE_EN_YC_DASH, 0, -1); } else { mSound.startCreatureSound(Z2SE_EN_KC_DASH, 0, -1); } } - if (mpMorf->checkFrame(12.0f)) { - field_0x744 = 2; - field_0x728 = 0x14; + + if (mAnm_p->checkFrame(12.0f)) { + mMode = 2; + field_0x728 = 20; dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); dComIfGp_getVibration().StartQuake(1, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); @@ -1593,15 +1612,15 @@ void daKago_c::executeAttack() { case 2: setDashEffect(); - if (mpMorf->checkFrame(23.0f)) { + if (mAnm_p->checkFrame(23.0f)) { mSph.OnAtSetBit(); } if (calcAttackMove(1) == 0) { - cLib_chaseF(&field_0x6f8, 100.0f, 5.0f); + cLib_chaseF(&mFlySpeed, 100.0f, 5.0f); if (field_0x728 == 0) { - field_0x744 = 3; + mMode = 3; } if (field_0x728 < 10 && checkWallHitFall(0)) { @@ -1617,8 +1636,9 @@ void daKago_c::executeAttack() { break; case 3: setDashEffect(); + if (calcAttackMove(1) == 0) { - cLib_chaseF(&field_0x6f8, 100.0f, 3.0f); + cLib_chaseF(&mFlySpeed, 100.0f, 3.0f); if (checkWallHitFall(0)) { dComIfGp_getVibration().StopQuake(0x1f); @@ -1626,8 +1646,7 @@ void daKago_c::executeAttack() { } else { mDashTime--; if (mDashTime == 0) { - field_0x744 = 4; - + mMode = 4; dComIfGp_getVibration().StopQuake(0x1f); } } @@ -1637,13 +1656,13 @@ void daKago_c::executeAttack() { setDashEffect(); case 5: if (calcAttackMove(0) == 0) { - cLib_chaseF(&field_0x6f8, l_HIO.mFlightSpeed, 5.0f); - if (field_0x6f8 <= l_HIO.mFlightSpeed) { + cLib_chaseF(&mFlySpeed, l_HIO.mFlightSpeed, 5.0f); + if (mFlySpeed <= l_HIO.mFlightSpeed) { mpLockActor = NULL; mSph.OffAtSetBit(); - setActionMode(0, 2); + setActionMode(ACTION_FLY_e, 2); field_0x6c8 = 0; field_0x6c4 = 8000.0f; @@ -1655,56 +1674,57 @@ void daKago_c::executeAttack() { } void daKago_c::calcCircleCamera(int param_0) { - cXyz cStack_20; + cXyz targetPos; mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(shape_angle.y); mDoMtx_stack_c::XrotM(shape_angle.x); mDoMtx_stack_c::transM(0.0f, 0.0f, 1500.0f); - mDoMtx_stack_c::multVecZero(&cStack_20); + mDoMtx_stack_c::multVecZero(&targetPos); if (param_0 == 0) { - field_0x68c = cStack_20; + mDemoCamCenter = targetPos; } else if (param_0 == 1) { - cLib_addCalcPos(&field_0x68c, cStack_20, 0.1f, field_0x6f8 + 100.0f, + cLib_addCalcPos(&mDemoCamCenter, targetPos, 0.1f, mFlySpeed + 100.0f, 10.0f); } else { - cLib_addCalcPos(&field_0x68c, cStack_20, 0.5f, field_0x6f8 + 30.0f, + cLib_addCalcPos(&mDemoCamCenter, targetPos, 0.5f, mFlySpeed + 30.0f, 10.0f); } + mDoMtx_stack_c::transM(0.0f, 0.0f, -1000.0f); - mDoMtx_stack_c::multVecZero(&cStack_20); + mDoMtx_stack_c::multVecZero(&targetPos); if (param_0 == 0) { - field_0x698 = cStack_20; + mDemoCamEye = targetPos; } else if (param_0 == 1) { - cLib_addCalcPos(&field_0x698, cStack_20, 0.1f, field_0x6f8 + 100.0f, + cLib_addCalcPos(&mDemoCamEye, targetPos, 0.1f, mFlySpeed + 100.0f, 10.0f); } else { - cLib_addCalcPos(&field_0x698, cStack_20, 0.5f, field_0x6f8 + 30.0f, 10.0f); + cLib_addCalcPos(&mDemoCamEye, targetPos, 0.5f, mFlySpeed + 30.0f, 10.0f); } - field_0x6d4 = 60.0f; - dCam_getBody()->Set(field_0x68c, field_0x698, field_0x6d4, 0); + mDemoCamFovy = 60.0f; + dCam_getBody()->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); } void daKago_c::executeEvent() { dCamera_c* camera = dCam_getBody(); - daPy_py_c* unusedPlayer = daPy_getPlayerActorClass(); + daPy_py_c* player = daPy_getPlayerActorClass(); - if ((field_0x73c == 0) && dComIfG_play_c::getLayerNo(0) == 13 && dComIfGs_isSaveSwitch(0x10)) { - dComIfGs_onSaveSwitch(0x1a); - setActionMode(4, 0); + if (mSceneType == SCENE_TYPE_LAKE_HYLIA && dComIfG_play_c::getLayerNo(0) == 13 && dComIfGs_isSaveSwitch(16)) { + dComIfGs_onSaveSwitch(26); + setActionMode(ACTION_WAIT_e, 0); } else { if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 2, 0xffff, 3); - eventInfo.onCondition(2); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); } else { camera->Stop(); camera->SetTrimSize(3); - field_0x748 = 0; + mDemoMode = 0; field_0x74c = 0; - setActionMode(3, 0); + setActionMode(ACTION_PERCH_e, 0); field_0x6dc = 1; field_0x6de = 0xff; dComIfGs_onSaveSwitch(8); @@ -1718,13 +1738,13 @@ void daKago_c::initPerchDemo() { cXyz midnaPos; fopAc_ac_c* midna = daPy_getPlayerActorClass()->getMidnaActor(); - if (midna != 0) { + if (midna != NULL) { midnaPos = midna->current.pos; } - switch (field_0x748) { + switch (mDemoMode) { case 0: { - Z2GetAudioMgr()->setDemoName(field_0x760); + Z2GetAudioMgr()->setDemoName(mDemoName); field_0x771 = 0; current.pos = dPath_GetPnt(mpPath2, field_0x771)->m_position; @@ -1753,46 +1773,44 @@ void daKago_c::initPerchDemo() { speed.y = 0.0f; speedF = 20.0f; - field_0x72c = 0xb4; + field_0x72c = 180; field_0x728 = field_0x72c + 90; field_0x6e8 = 0; - if ((field_0x73c == 0) && dComIfG_play_c::getLayerNo(0) == 13 && (playerPos.x > -90000.0f)) - { + if (mSceneType == SCENE_TYPE_LAKE_HYLIA && dComIfG_play_c::getLayerNo(0) == 13 && playerPos.x > -90000.0f) { field_0x6e8 = 1; } calcCircleCamera(0); field_0x6e4 = 0; - break; } case 1: { field_0x728 = 90; - field_0x6f8 = 20.0f; + mFlySpeed = 20.0f; break; } case 2: { - if (field_0x73c != 0) { - mPathIdx = searchNearPassPoint(); + if (mSceneType != SCENE_TYPE_LAKE_HYLIA) { + mPathCurrentPointNo = searchNearPassPoint(); } field_0x758 = 1; - if (mPathIdxOffset < 0) { + if (mPathStep < 0) { angleY = angleY + 0x8000; daPy_getPlayerActorClass()->setPlayerPosAndAngle(&playerPos, angleY, 0); - field_0x758 = 0xffffffff; + field_0x758 = -1; } mDoMtx_stack_c::transS(midnaPos); mDoMtx_stack_c::YrotM(angleY); mDoMtx_stack_c::transM(0.0f, 1000.0f, -1000.0f); - mDoMtx_stack_c::multVecZero((Vec*)¤t); + mDoMtx_stack_c::multVecZero(¤t.pos); - setBck(0xc, 2, 0.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_e, 2, 0.0f, 1.0f); mDoMtx_stack_c::transS(midnaPos); mDoMtx_stack_c::YrotM(angleY); @@ -1801,10 +1819,10 @@ void daKago_c::initPerchDemo() { current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); current.angle.x = -cLib_targetAngleX(¤t.pos, &field_0x6a4); - field_0x6f8 = 20.0f; + mFlySpeed = 20.0f; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); shape_angle.x = current.angle.x; shape_angle.y = current.angle.y; @@ -1813,37 +1831,35 @@ void daKago_c::initPerchDemo() { mDoMtx_stack_c::transS(playerPos); mDoMtx_stack_c::YrotM(angleY); mDoMtx_stack_c::transM(-100.0f, 100.0f, -300.0f); - mDoMtx_stack_c::multVecZero(&field_0x68c); + mDoMtx_stack_c::multVecZero(&mDemoCamCenter); mDoMtx_stack_c::transM(100.0f, -100.0f, 300.0f); mDoMtx_stack_c::transM(100.0f, 30.0f, 300.0f); - mDoMtx_stack_c::multVecZero(&field_0x698); + mDoMtx_stack_c::multVecZero(&mDemoCamEye); - field_0x6d4 = 70.0f; + mDemoCamFovy = 70.0f; - dCam_getBody()->Set(field_0x68c, field_0x698, field_0x6d4, 0); + dCam_getBody()->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); field_0x728 = 10; - break; } case 3: { - setBck(9, 2, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_e, 2, 10.0f, 1.0f); setMidnaTagPos(); speedF = speed.y = 0.0f; field_0x728 = 30; - break; } case 4: { - setBck(0xf, 2, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 10.0f, 1.0f); - if (field_0x73c == 0) { + if (mSceneType == SCENE_TYPE_LAKE_HYLIA) { field_0x6a4.set(-90000.0f, -16000.0f, 40000.0f); } else { - field_0x6a4 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; + field_0x6a4 = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; } setMidnaRideOn(); @@ -1851,15 +1867,14 @@ void daKago_c::initPerchDemo() { dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); - field_0x744 = 1; + mMode = 1; field_0x728 = 30; - break; } } field_0x74c = 1; - field_0x744 = 0; + mMode = 0; } bool daKago_c::executePerchDemo() { @@ -1870,17 +1885,17 @@ bool daKago_c::executePerchDemo() { daMidna_c* midna = daPy_getPlayerActorClass()->getMidnaActor(); s16 midnaYaw; - if (midna != 0) { + if (midna != NULL) { midnaPos = midna->current.pos; midnaYaw = midna->shape_angle.y; } field_0x750++; - switch (field_0x748) { + switch (mDemoMode) { case 0: { calcCircleCamera(1); - if ((field_0x750 & 0x20) != 0) { + if (field_0x750 & 0x20) { cLib_chaseF(&field_0x6fc, 3.0f, 0.3f); } else { cLib_chaseF(&field_0x6fc, -3.0f, 0.3f); @@ -1900,7 +1915,7 @@ bool daKago_c::executePerchDemo() { cLib_addCalcAngleS(&shape_angle.y, current.angle.y, 0x20, 0x100, 0x40); } else { if (field_0x754 == 0) { - if (field_0x6e7 == 1) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); @@ -1914,57 +1929,55 @@ bool daKago_c::executePerchDemo() { } if (field_0x728 == 0) { - field_0x748 = 1; + mDemoMode = 1; return true; } dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 0); - break; } case 1: { calcCircleCamera(2); cLib_addCalcAngleS(&shape_angle.x, -cLib_targetAngleX(¤t.pos, &playerPos), 4, 0x400, 0x40); - cLib_addCalcAngleS(&shape_angle.y, cLib_targetAngleY((Vec*)¤t, &playerPos), 4, 0x200, 0x40); + cLib_addCalcAngleS(&shape_angle.y, cLib_targetAngleY(¤t.pos, &playerPos), 4, 0x200, 0x40); current.angle.y = shape_angle.y; current.angle.x = shape_angle.x; - cLib_chaseF(&field_0x6f8, 60.0f, 1.0f); + cLib_chaseF(&mFlySpeed, 60.0f, 1.0f); - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); if (current.pos.abs(playerPos) < 2000.0f) { - field_0x748 = 2; + mDemoMode = 2; return true; } dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 0); - break; } case 2: { if (field_0x6e4 == 0) { - if (field_0x73c == 0) { + if (mSceneType == SCENE_TYPE_LAKE_HYLIA) { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 4); - } else if (field_0x73c == 2) { + } else if (mSceneType == SCENE_TYPE_BOARD_HOUSE) { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 5); } } - if (field_0x744 == 0) { + if (mMode == 0) { current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); current.angle.x = -cLib_targetAngleX(¤t.pos, &field_0x6a4); - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); if (field_0x728 != 0) { shape_angle.x = current.angle.x; if (field_0x728 == 1) { - if (field_0x6e7 == 1) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); @@ -1976,9 +1989,9 @@ bool daKago_c::executePerchDemo() { shape_angle.y = current.angle.y; if (field_0x6a4.abs(current.pos) < 300.0f) { - field_0x744 = 1; + mMode = 1; - setBck(0x15, 2, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_HOVERING_e, 2, 10.0f, 1.0f); field_0x728 = 60; @@ -1988,16 +2001,16 @@ bool daKago_c::executePerchDemo() { mDoMtx_stack_c::multVecZero(&field_0x6a4); } } else { - cLib_chaseF(&field_0x6f8, 0.0f, 1.0f); + cLib_chaseF(&mFlySpeed, 0.0f, 1.0f); cLib_addCalcAngleS(¤t.angle.y, cLib_targetAngleY(¤t.pos, &field_0x6a4), 4, 0x400, 0x100); cLib_addCalcAngleS(¤t.angle.x, 0, 4, 0x100, 0x80); cLib_addCalcAngleS(&shape_angle.x, 0, 4, 0x100, 0x80); shape_angle.y = current.angle.y; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); - if (!field_0x6f8 && field_0x728 == 0) { - field_0x748 = 3; + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); + if (!mFlySpeed && field_0x728 == 0) { + mDemoMode = 3; return true; } } @@ -2006,23 +2019,22 @@ bool daKago_c::executePerchDemo() { mDoMtx_stack_c::YrotM(playerYaw); mDoMtx_stack_c::transM(0.0f, 400.0f, -300.0f); mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 5.0f, 5.0f); + cLib_addCalcPos(&mDemoCamCenter, unkXyz1, 0.5f, 5.0f, 5.0f); mDoMtx_stack_c::transS(playerPos); mDoMtx_stack_c::YrotM(playerYaw); mDoMtx_stack_c::transM(100.0f, 30.0f, 300.0f); mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 20.0f, 10.0f); - - dCam_getBody()->Set(field_0x68c, field_0x698, field_0x6d4, 0); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 20.0f, 10.0f); + dCam_getBody()->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); break; } case 3: { if (field_0x6e4 == 0) { - if (field_0x73c == 0) { + if (mSceneType == SCENE_TYPE_LAKE_HYLIA) { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 4); - } else if (field_0x73c == 2) { + } else if (mSceneType == SCENE_TYPE_BOARD_HOUSE) { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 5); } } @@ -2031,34 +2043,33 @@ bool daKago_c::executePerchDemo() { mDoMtx_stack_c::YrotM(playerYaw); mDoMtx_stack_c::transM(0.0f, 100.0f, 0.0f); mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 20.0f, 10.0f); + cLib_addCalcPos(&mDemoCamCenter, unkXyz1, 0.5f, 20.0f, 10.0f); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(playerYaw); mDoMtx_stack_c::transM(300.0f, 50.0f, 500.0f); mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 20.0f, 10.0f); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 20.0f, 10.0f); - cLib_chaseF(&field_0x6d4, 70.0f, 1.0f); + cLib_chaseF(&mDemoCamFovy, 70.0f, 1.0f); - dCam_getBody()->Set(field_0x68c, field_0x698, field_0x6d4, 0); + dCam_getBody()->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); cLib_addCalcAngleS(¤t.angle.x, 0, 4, 0x400, 0x100); shape_angle.x = current.angle.x; if (field_0x728 == 0) { - field_0x748 = 4; + mDemoMode = 4; return true; } - break; } case 4: { if (field_0x6e4 == 0) { - if (field_0x73c == 0) { + if (mSceneType == SCENE_TYPE_LAKE_HYLIA) { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 4); - } else if (field_0x73c == 2) { + } else if (mSceneType == SCENE_TYPE_BOARD_HOUSE) { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 6); } } @@ -2066,22 +2077,20 @@ bool daKago_c::executePerchDemo() { if (PerchDemoAwayForward()) { return true; } - break; } case 5: { f32 maxStep = field_0x6cc * 50.0f; f32 minStep = field_0x6cc * 10.0f; cLib_chaseF(&field_0x6cc, 0.0f, 0.05f); - cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, maxStep, minStep); + cLib_addCalcPos(&mDemoCamCenter, midnaPos, 0.5f, maxStep, minStep); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(playerYaw); mDoMtx_stack_c::transM(0.0f, 50.0f, -800.0f); mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, maxStep, minStep); - cLib_chaseF(&field_0x6d4, 70.0f, 1.0f); - dCam_getBody()->Set(field_0x68c, field_0x698, field_0x6d4, 0); - + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, maxStep, minStep); + cLib_chaseF(&mDemoCamFovy, 70.0f, 1.0f); + dCam_getBody()->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); break; } case 6: @@ -2092,7 +2101,6 @@ bool daKago_c::executePerchDemo() { } bool daKago_c::PerchDemoAwayForward() { - cXyz playerPos = daPy_getPlayerActorClass()->current.pos; s16 playerYaw = daPy_getPlayerActorClass()->shape_angle.y; @@ -2108,58 +2116,58 @@ bool daKago_c::PerchDemoAwayForward() { midnaYaw = midna->shape_angle.y; } - switch (field_0x744) { + switch (mMode) { case 0: case 1: { f32 unusedFloat1 = 20.0f; f32 unusedFloat2 = 10.0f; - field_0x68c += speed; - field_0x698 += speed; + mDemoCamCenter += speed; + mDemoCamEye += speed; mDoMtx_stack_c::transS(midnaPos); mDoMtx_stack_c::YrotM(playerYaw); - if (field_0x744 == 0) { + if (mMode == 0) { mDoMtx_stack_c::transM(0.0f, 100.0f, 0.0f); } else { mDoMtx_stack_c::transM(0.0f, -200.0f, 0.0f); } mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 5.0f); + cLib_addCalcPos(&mDemoCamCenter, unkXyz1, 0.5f, 10.0f, 5.0f); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(playerYaw); - if (field_0x744 == 0) { + if (mMode == 0) { mDoMtx_stack_c::transM(300.0f, 50.0f, 500.0f); } else { mDoMtx_stack_c::transM(500.0f, 50.0f, 0.0f); } mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 10.0f, 5.0f); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 10.0f, 5.0f); - cLib_chaseF(&field_0x6d4, 70.0f, 1.0f); + cLib_chaseF(&mDemoCamFovy, 70.0f, 1.0f); - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); mGroundHeight = checkGroundHeight(current.pos, NULL); mRoofHeight = checkRoofHeight(current.pos); - cLib_chaseF(&field_0x6f8, 30.0f, 1.0f); + cLib_chaseF(&mFlySpeed, 30.0f, 1.0f); cLib_addCalcAngleS(¤t.angle.x, 0, 8, 0x200, 0x80); shape_angle.x = current.angle.x; shape_angle.y = current.angle.y; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); - if (field_0x744 == 0) { + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); + if (mMode == 0) { cLib_addCalcAngleS(&shape_angle.x, 0x2000, 8, 0x200, 0x40); } else { cLib_addCalcAngleS(&shape_angle.x, 0, 8, 0x200, 0x40); } - if (field_0x728 == 0x14 && field_0x744 == 0) { - if (field_0x6e7 == 1) { + if (field_0x728 == 20 && mMode == 0) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); @@ -2167,90 +2175,89 @@ bool daKago_c::PerchDemoAwayForward() { } if (field_0x728 == 0) { - if (field_0x744 == 0) { - field_0x744 = 1; - field_0x728 = 0x1e; + if (mMode == 0) { + mMode = 1; + field_0x728 = 30; setPlayerRideOn(); dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); - } else if (field_0x73c != 0) { + } else if (mSceneType != SCENE_TYPE_LAKE_HYLIA) { field_0x728 = 60; - field_0x744 = 2; + mMode = 2; } else { field_0x728 = 90; - field_0x744 = 3; + mMode = 3; field_0x6cc = 1.0f; } } - break; } case 2: { if (field_0x728 > 10) { - field_0x68c += speed; - field_0x698 += speed; + mDemoCamCenter += speed; + mDemoCamEye += speed; - s16 targetYaw = cLib_targetAngleY(&field_0x698, &field_0x68c); + s16 targetYaw = cLib_targetAngleY(&mDemoCamEye, &mDemoCamCenter); if (abs((s16)(midnaYaw - targetYaw)) < 0x2000) { - cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, 5.0f, 10.0f); + cLib_addCalcPos(&mDemoCamCenter, midnaPos, 0.5f, 5.0f, 10.0f); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(playerYaw); mDoMtx_stack_c::transM(0.0f, 50.0f, -800.0f); mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 20.0f, 10.0f); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 20.0f, 10.0f); } else { - cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, 5.0f, 10.0f); + cLib_addCalcPos(&mDemoCamCenter, midnaPos, 0.5f, 5.0f, 10.0f); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(playerYaw); mDoMtx_stack_c::transM(300.0f, 50.0f, -500.0f); mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 20.0f, 10.0f); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 20.0f, 10.0f); } } else { - cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, 50.0f, 10.0f); + cLib_addCalcPos(&mDemoCamCenter, midnaPos, 0.5f, 50.0f, 10.0f); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(playerYaw); mDoMtx_stack_c::transM(0.0f, 50.0f, -800.0f); mDoMtx_stack_c::multVecZero(&unkXyz1); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 50.0f, 10.0f); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 50.0f, 10.0f); } - cLib_chaseF(&field_0x6d4, 70.0f, 1.0f); - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + cLib_chaseF(&mDemoCamFovy, 70.0f, 1.0f); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); mGroundHeight = checkGroundHeight(current.pos, NULL); mRoofHeight = checkRoofHeight(current.pos); - cLib_chaseF(&field_0x6f8, l_HIO.mFlightSpeed, 2.0f); + cLib_chaseF(&mFlySpeed, l_HIO.mFlightSpeed, 2.0f); if (field_0x728 < 30) { cLib_addCalcAngleS(¤t.angle.x, 0, 8, 0x100, 0x40); } else { - cLib_addCalcAngleS(¤t.angle.x, -8192, 8, 0x100, 0x40); + cLib_addCalcAngleS(¤t.angle.x, -0x2000, 8, 0x100, 0x40); } shape_angle.x = current.angle.x; shape_angle.y = current.angle.y; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); if (field_0x728 == 0) { - if (field_0x73c == 2) { + if (mSceneType == SCENE_TYPE_BOARD_HOUSE) { if (setSceneChange(3)) { - field_0x748 = 5; + mDemoMode = 5; field_0x6cc = 1.0f; } } else { field_0x6dc = 0; - setActionMode(0, 0); + setActionMode(ACTION_FLY_e, 0); - camera->Reset(field_0x68c, field_0x698); + camera->Reset(mDemoCamCenter, mDemoCamEye); camera->Start(); camera->SetTrimSize(0); @@ -2259,37 +2266,35 @@ bool daKago_c::PerchDemoAwayForward() { Z2GetAudioMgr()->setDemoName(NULL); } } - break; } case 3: { cLib_chaseF(&field_0x6cc, 0.0f, 0.1f); - field_0x68c += speed; - field_0x698 += speed * field_0x6cc; + mDemoCamCenter += speed; + mDemoCamEye += speed * field_0x6cc; unkXyz1.set(playerPos.x, playerPos.y + 100.0f, playerPos.z); - cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 3.0f); + cLib_addCalcPos(&mDemoCamCenter, unkXyz1, 0.5f, 10.0f, 3.0f); - field_0x6d4 = 70.0f; + mDemoCamFovy = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); - cLib_chaseF(&field_0x6f8, 30.0f, 1.0f); + cLib_chaseF(&mFlySpeed, 30.0f, 1.0f); - cLib_addCalcAngleS(¤t.angle.x, -8192, 8, 0x100, 0x40); + cLib_addCalcAngleS(¤t.angle.x, -0x2000, 8, 0x100, 0x40); shape_angle.x = current.angle.x; shape_angle.y = current.angle.y; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); if (field_0x728 == 0) { - setActionMode(7, 0); - field_0x748 = 8; + setActionMode(ACTION_PERCH2_e, 0); + mDemoMode = 8; return true; } - break; } } @@ -2310,14 +2315,14 @@ void daKago_c::executePerch() { void daKago_c::executeEvent2() { dCamera_c* camera = dCam_getBody(); if (!eventInfo.checkCommandDemoAccrpt()) { - fopAcM_orderPotentialEvent(this,2,0xffff,3); + fopAcM_orderPotentialEvent(this, 2, 0xffff, 3); eventInfo.onCondition(2); } else { camera->Stop(); camera->SetTrimSize(3); - field_0x748 = 0; + mDemoMode = 0; field_0x74c = 0; - setActionMode(7,0); + setActionMode(ACTION_PERCH2_e, 0); field_0x6dc = 1; field_0x6de = 0xff; } @@ -2327,47 +2332,51 @@ void daKago_c::initFirstDemo() { dCamera_c* camera = dCam_getBody(); cXyz acStack_28; cXyz cStack_34; + daPy_py_c* player = daPy_getPlayerActorClass(); s16 playerYaw = player->shape_angle.y; cXyz playerPos = player->current.pos; + daMidna_c* midna = daPy_py_c::getMidnaActor(); cXyz midnaPos; - if (midna != 0) { + if (midna != NULL) { midnaPos = midna->current.pos; } s16 targetYaw; - switch (field_0x748) { + switch (mDemoMode) { case 0: { - Z2GetAudioMgr()->setDemoName(field_0x760); - field_0x718 = -0x800; + Z2GetAudioMgr()->setDemoName(mDemoName); + mHeadRotZ = -0x800; player->changeOriginalDemo(); - player->changeDemoMode(0x17, 0, 0, 0); + player->changeDemoMode(daPy_demo_c::DEMO_UNK_23_e, 0, 0, 0); + playerPos.set(-103292.0f, -23437.0f, 39925.0f); field_0x6a4.set(-60000.0f, -11000.0f, 28000.0f); shape_angle.y = current.angle.y = cLib_targetAngleY(&playerPos, &field_0x6a4); cStack_34.set(-300.0f, 400.0f, -1000.0f); cLib_offsetPos(¤t.pos, &playerPos, shape_angle.y, &cStack_34); targetYaw = cLib_targetAngleY(&playerPos, ¤t.pos); + player->setPlayerPosAndAngle(&playerPos, targetYaw, 0); if (midna != NULL) { midna->current.pos = playerPos; midnaPos = midna->current.pos; } + field_0x680.set(0.0f, 0.0f, 0.0f); - field_0x68c = current.pos; + mDemoCamCenter = current.pos; field_0x6bc = 0x3000; field_0x6cc = 500.0f; field_0x6d0 = 400.0f; cStack_34.set(0.0f, field_0x6d0, field_0x6cc); - cLib_offsetPos(&field_0x698, ¤t.pos, shape_angle.y + field_0x6bc, - &cStack_34); - field_0x6d4 = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); - field_0x728 = 0xa0; - setBck(15, 2, 10.0f, 1.0f); - field_0x6e4 = 0; + cLib_offsetPos(&mDemoCamEye, ¤t.pos, shape_angle.y + field_0x6bc, &cStack_34); + mDemoCamFovy = 70.0f; + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); + field_0x728 = 160; + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 10.0f, 1.0f); + field_0x6e4 = 0; break; } case 1: { @@ -2375,37 +2384,33 @@ void daKago_c::initFirstDemo() { midna->current.pos = playerPos; midnaPos = midna->current.pos; } - field_0x68c = current.pos; + + mDemoCamCenter = current.pos; field_0x6bc = 0x800; field_0x6cc = 700.0f; cStack_34.set(0.0f, 0.0f, field_0x6cc); - cLib_offsetPos(&field_0x698, ¤t.pos, shape_angle.y + field_0x6bc, - &cStack_34); - field_0x6d4 = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); - field_0x728 = 0x50; - + cLib_offsetPos(&mDemoCamEye, ¤t.pos, shape_angle.y + field_0x6bc, &cStack_34); + mDemoCamFovy = 70.0f; + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); + field_0x728 = 80; break; } case 2: { field_0x728 = 60; mMsgFlow.init(this, 0x7d3, 0, NULL); - break; } case 3: { - field_0x718 = cLib_targetAngleX(¤t.pos, &playerPos) / 4; + mHeadRotZ = cLib_targetAngleX(¤t.pos, &playerPos) / 4; targetYaw = cLib_targetAngleY(¤t.pos, &playerPos) - shape_angle.y; - field_0x71a = targetYaw / 4; + mHeadRotY = targetYaw / 4; cStack_34.set(50.0f, 150.0f, -200.0f); - cLib_offsetPos(&field_0x698, &midnaPos, shape_angle.y, &cStack_34); + cLib_offsetPos(&mDemoCamEye, &midnaPos, shape_angle.y, &cStack_34); cStack_34.set(50.0f, 0.0f, 50.0f); - cLib_offsetPos(&field_0x68c, &midnaPos, shape_angle.y, &cStack_34); - field_0x6d4 = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); - targetYaw = cLib_targetAngleY(&playerPos, (Vec*)¤t); - player->setPlayerPosAndAngle(&playerPos, targetYaw, 0); - + cLib_offsetPos(&mDemoCamCenter, &midnaPos, shape_angle.y, &cStack_34); + mDemoCamFovy = 70.0f; + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); + player->setPlayerPosAndAngle(&playerPos, cLib_targetAngleY(&playerPos, ¤t.pos), 0); break; } case 4: { @@ -2416,8 +2421,7 @@ void daKago_c::initFirstDemo() { mDoMtx_stack_c::YrotM(field_0x6bc); mDoMtx_stack_c::transM(0.0f, 300.0f, field_0x6cc); mDoMtx_stack_c::multVecZero(&field_0x6a4); - field_0x6f8 = 0.0f; - + mFlySpeed = 0.0f; break; } case 5: { @@ -2426,68 +2430,66 @@ void daKago_c::initFirstDemo() { mDoMtx_stack_c::YrotM(field_0x6bc); mDoMtx_stack_c::transM(0.0f, 300.0f, 200.0f); mDoMtx_stack_c::multVecZero(&field_0x6a4); - break; } case 6: { player->cancelOriginalDemo(); setPlayerRideOn(); dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); - field_0x728 = 0x96; + field_0x728 = 150; field_0x6cc = 1.0f; - break; } case 7: { field_0x6e8 = 0; } case 8: { - setBck(15, 2, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 10.0f, 1.0f); + if (field_0x6e8 != 0) { - mpMorf->setFrame(0.0f); + mAnm_p->setFrame(0.0f); field_0x6a4.set(-67000.0f, -13000.0f, 28000.0f); current.pos.set(-76600.0f, -15500.0f, 37340.0f); shape_angle.y = current.angle.y = -0x8000; shape_angle.x = current.angle.x = -0x1000; - field_0x6f8 = 50.0f; - field_0x698.set(-75232.0f, -14685.0f, 34417.0f); - field_0x68c.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); - field_0x6d4 = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + mFlySpeed = 50.0f; + mDemoCamEye.set(-75232.0f, -14685.0f, 34417.0f); + mDemoCamCenter.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); + mDemoCamFovy = 70.0f; + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); field_0x728 = 200; } else { field_0x6a4.set(-60000.0f, -11000.0f, 28000.0f); current.pos.set(-90000.0f, -16000.0f, 40000.0f); shape_angle.y = current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); shape_angle.x = current.angle.x = -0x2000; - field_0x6f8 = 50.0f; + mFlySpeed = 50.0f; cStack_34.set(-500.0f, 1000.0f, 5000.0f); - cLib_offsetPos(&field_0x698, ¤t.pos, shape_angle.y, &cStack_34); - field_0x68c.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); - field_0x6d4 = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + cLib_offsetPos(&mDemoCamEye, ¤t.pos, shape_angle.y, &cStack_34); + mDemoCamCenter.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); + mDemoCamFovy = 70.0f; + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); field_0x728 = 200; } - break; } } field_0x74c = 1; - field_0x744 = 0; + mMode = 0; } bool daKago_c::executeFirstDemo() { dCamera_c* camera = dCam_getBody(); cXyz unkXyz1; - cXyz unkXyz2; + cXyz offset; cXyz midnaPos; daPy_py_c* player = daPy_getPlayerActorClass(); daMidna_c* midna = daPy_py_c::getMidnaActor(); - if (midna != 0) { + if (midna != NULL) { midnaPos = midna->current.pos; } @@ -2495,8 +2497,8 @@ bool daKago_c::executeFirstDemo() { cXyz playerPos = player->current.pos; int unkFlag1; - int switchVal = field_0x748; - switch (switchVal) { + int mode = mDemoMode; // fakematch + switch (mode) { case 0: dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 2); @@ -2504,21 +2506,21 @@ bool daKago_c::executeFirstDemo() { cLib_chaseF(&field_0x6cc, 1250.0f, 6.7f); cLib_chaseF(&field_0x6d0, -400.0f, 7.1f); - unkXyz2.set(0.0f, field_0x6d0, field_0x6cc); - cLib_offsetPos(&field_0x698, ¤t.pos, shape_angle.y + field_0x6bc, &unkXyz2); + offset.set(0.0f, field_0x6d0, field_0x6cc); + cLib_offsetPos(&mDemoCamEye, ¤t.pos, shape_angle.y + field_0x6bc, &offset); unkXyz1.set(0.0f, -200.0f, 400.0f); cLib_chasePos(&field_0x680, unkXyz1, 4.0f); - cLib_offsetPos(&field_0x68c, ¤t.pos, shape_angle.y, &field_0x680); + cLib_offsetPos(&mDemoCamCenter, ¤t.pos, shape_angle.y, &field_0x680); - field_0x6d4 = 70.0f; + mDemoCamFovy = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); if (field_0x728 < 10) { setMidnaTagPos(); if (field_0x728 == 0) { - field_0x748 = 1; + mDemoMode = 1; return 1; } } @@ -2529,35 +2531,35 @@ bool daKago_c::executeFirstDemo() { cLib_chaseAngleS(&field_0x6bc, 0x1000, 0x20); - unkXyz2.set(0.0f, 0.0f, field_0x6cc); - cLib_offsetPos(&field_0x698, ¤t.pos, shape_angle.y + field_0x6bc, &unkXyz2); + offset.set(0.0f, 0.0f, field_0x6cc); + cLib_offsetPos(&mDemoCamEye, ¤t.pos, shape_angle.y + field_0x6bc, &offset); - if (field_0x728 < 0x46) { - cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, 10.0f, 10.0f); + if (field_0x728 < 70) { + cLib_addCalcPos(&mDemoCamCenter, midnaPos, 0.5f, 10.0f, 10.0f); } else { - field_0x68c = current.pos; + mDemoCamCenter = current.pos; } - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); setMidnaTagPos(); if (field_0x728 == 30) { - setBck(0x14, 0x02, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_HANGED_WAIT_e, 2, 10.0f, 1.0f); } if (field_0x728 > 30) { cLib_chaseF(&field_0x6cc, 350.0f, 4.0f); - cLib_addCalcAngleS(&field_0x718, -2048, 8, 0x100, 0x10); + cLib_addCalcAngleS(&mHeadRotZ, -0x800, 8, 0x100, 0x10); } else { cLib_chaseF(&field_0x6cc, 350.0f, 6.0f); - cLib_addCalcAngleS(&field_0x718, 0x400, 8, 0x200, 0x10); + cLib_addCalcAngleS(&mHeadRotZ, 0x400, 8, 0x200, 0x10); if (field_0x728 == 30) { setMidnaRideOn(); } - if (field_0x728 == 0x14) { - if (field_0x6e7 == 1) { + if (field_0x728 == 20) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); @@ -2565,7 +2567,7 @@ bool daKago_c::executeFirstDemo() { } if (field_0x728 == 0) { - field_0x748 = 2; + mDemoMode = 2; return true; } @@ -2575,25 +2577,24 @@ bool daKago_c::executeFirstDemo() { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 3); setMidnaTagPos(); - cLib_addCalcPos(&field_0x68c, midnaPos, 0.5f, 10.0f, 10.0f); - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + cLib_addCalcPos(&mDemoCamCenter, midnaPos, 0.5f, 10.0f, 10.0f); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); mMsgFlow.doFlow(this, NULL, 0); if (field_0x728 != 0) { if (field_0x728 == 1) { - setBck(0xf, 0x02, 20.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 20.0f, 1.0f); } if (mMsgFlow.getNowMsgNo() == 0x1774) { - setBck(0xf, 0x02, 20.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 20.0f, 1.0f); field_0x728 = 0; } } if (mMsgFlow.getNowMsgNo() == 0x1775) { - field_0x748 = 3; - + mDemoMode = 3; return true; } @@ -2603,18 +2604,17 @@ bool daKago_c::executeFirstDemo() { setMidnaTagPos(); cLib_addCalcAngleS( - &field_0x718, cLib_targetAngleX(¤t.pos, &playerPos) / 4, + &mHeadRotZ, cLib_targetAngleX(¤t.pos, &playerPos) / 4, 8, 0x100, 0x10); // adding braces to the switch case for this decl regresses debug match s16 targetYaw = cLib_targetAngleY(¤t.pos, &playerPos) - shape_angle.y; cLib_addCalcAngleS( - &field_0x71a, targetYaw / 4, + &mHeadRotY, targetYaw / 4, 8, 0x100, 0x10); if (mMsgFlow.doFlow(this, NULL, 0)) { - field_0x748 = 4; - + mDemoMode = 4; return true; } @@ -2623,8 +2623,8 @@ bool daKago_c::executeFirstDemo() { case 4: dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 2); - cLib_addCalcAngleS(&field_0x718, 0, 8, 0x100, 0x10); - cLib_addCalcAngleS(&field_0x71a, 0, 8, 0x100, 0x10); + cLib_addCalcAngleS(&mHeadRotZ, 0, 8, 0x100, 0x10); + cLib_addCalcAngleS(&mHeadRotY, 0, 8, 0x100, 0x10); cLib_chaseF(&field_0x6cc, -300.0f, 10.0f); @@ -2638,27 +2638,27 @@ bool daKago_c::executeFirstDemo() { shape_angle.y = current.angle.y; shape_angle.x = current.angle.x; - cLib_chaseF(&field_0x6f8, 20.0f, 1.0f); + cLib_chaseF(&mFlySpeed, 20.0f, 1.0f); - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); - field_0x68c += speed; - field_0x698 += speed; + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); + mDemoCamCenter += speed; + mDemoCamEye += speed; - unkXyz2.set(0.0f, 200.0f, -500.0f); - cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &unkXyz2); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 10.0f, 3.0f); - unkXyz2.set(0.0f, 0.0f, 0.0f); + offset.set(0.0f, 200.0f, -500.0f); + cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &offset); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 10.0f, 3.0f); + offset.set(0.0f, 0.0f, 0.0f); - cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &unkXyz2); - cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 3.0f); + cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &offset); + cLib_addCalcPos(&mDemoCamCenter, unkXyz1, 0.5f, 10.0f, 3.0f); - field_0x6d4 = 70.0f; + mDemoCamFovy = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); if (field_0x6a4.abs(current.pos) < 100.0f) { - field_0x748 = 5; + mDemoMode = 5; return true; } @@ -2671,87 +2671,84 @@ bool daKago_c::executeFirstDemo() { shape_angle.y = current.angle.y; shape_angle.x = current.angle.x; - cLib_chaseF(&field_0x6f8, 20.0f, 1.0f); - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); + cLib_chaseF(&mFlySpeed, 20.0f, 1.0f); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); - field_0x68c += speed; - field_0x698 += speed; + speed.y = -mFlySpeed * cM_ssin(current.angle.x); + mDemoCamCenter += speed; + mDemoCamEye += speed; - unkXyz2.set(400.0f, 50.0f, -300.0f); - cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &unkXyz2); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 10.0f, 3.0f); + offset.set(400.0f, 50.0f, -300.0f); + cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &offset); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 10.0f, 3.0f); - unkXyz2.set(0.0f, 50.0f, 0.0f); - cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &unkXyz2); - cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 3.0f); + offset.set(0.0f, 50.0f, 0.0f); + cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &offset); + cLib_addCalcPos(&mDemoCamCenter, unkXyz1, 0.5f, 10.0f, 3.0f); - field_0x6d4 = 70.0f; + mDemoCamFovy = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); if (field_0x6a4.abs(current.pos) < 100.0f) { - field_0x748 = 6; - + mDemoMode = 6; return true; } break; case 6: dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 2); - cLib_addCalcAngleS(¤t.angle.x, -8192, 8, 0x100, 0x40); + cLib_addCalcAngleS(¤t.angle.x, -0x2000, 8, 0x100, 0x40); shape_angle.x = current.angle.x; shape_angle.y = current.angle.y; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); if (field_0x728 > 120) { - field_0x68c += speed; - field_0x698 += speed; + mDemoCamCenter += speed; + mDemoCamEye += speed; - unkXyz2.set(400.0f, 100.0f, -300.0f); - cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &unkXyz2); - cLib_addCalcPos(&field_0x698, unkXyz1, 0.5f, 10.0f, 3.0f); + offset.set(400.0f, 100.0f, -300.0f); + cLib_offsetPos(&unkXyz1, &midnaPos, shape_angle.y, &offset); + cLib_addCalcPos(&mDemoCamEye, unkXyz1, 0.5f, 10.0f, 3.0f); - unkXyz2.set(0.0f, 100.0f, 0.0f); - cLib_offsetPos(&unkXyz1, &playerPos, shape_angle.y, &unkXyz2); - cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 3.0f); + offset.set(0.0f, 100.0f, 0.0f); + cLib_offsetPos(&unkXyz1, &playerPos, shape_angle.y, &offset); + cLib_addCalcPos(&mDemoCamCenter, unkXyz1, 0.5f, 10.0f, 3.0f); } else { cLib_chaseF(&field_0x6cc, 0.0f, 0.1f); - field_0x68c += speed; - field_0x698 += speed * field_0x6cc; + mDemoCamCenter += speed; + mDemoCamEye += speed * field_0x6cc; - unkXyz2.set(0.0f, 100.0f, 0.0f); - cLib_offsetPos(&unkXyz1, &playerPos, shape_angle.y, &unkXyz2); - cLib_addCalcPos(&field_0x68c, unkXyz1, 0.5f, 10.0f, 3.0f); + offset.set(0.0f, 100.0f, 0.0f); + cLib_offsetPos(&unkXyz1, &playerPos, shape_angle.y, &offset); + cLib_addCalcPos(&mDemoCamCenter, unkXyz1, 0.5f, 10.0f, 3.0f); } - field_0x6d4 = 70.0f; + mDemoCamFovy = 70.0f; - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); if (field_0x728 == 0) { - field_0x748 = 7; - + mDemoMode = 7; return true; } - break; case 7: case 8: unkFlag1 = 0; - if (switchVal == 7 || field_0x6e8 == 0) { + if (mode == 7 || field_0x6e8 == 0) { if (field_0x728 == 110) { unkFlag1 = 1; } - } else if (switchVal == 8 && field_0x728 == 140) { + } else if (mode == 8 && field_0x728 == 140) { unkFlag1 = 1; } if (unkFlag1 != 0) { - if (field_0x6e7 == 1) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); @@ -2761,8 +2758,8 @@ bool daKago_c::executeFirstDemo() { if (field_0x728 != 0) { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 1); } else { - if (field_0x73c == 0 && setSceneChange(0)) { - field_0x748 = 9; + if (mSceneType == SCENE_TYPE_LAKE_HYLIA && setSceneChange(0)) { + mDemoMode = 9; } } case 9: @@ -2771,16 +2768,15 @@ bool daKago_c::executeFirstDemo() { shape_angle.y = current.angle.y; shape_angle.x = current.angle.x; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); - unkXyz2.set(0.0f, 100.0f, 0.0f); - cLib_offsetPos(&field_0x68c, ¤t.pos, shape_angle.y, &unkXyz2); + offset.set(0.0f, 100.0f, 0.0f); + cLib_offsetPos(&mDemoCamCenter, ¤t.pos, shape_angle.y, &offset); - field_0x6d4 = 70.0f; - - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + mDemoCamFovy = 70.0f; + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); break; } @@ -2802,13 +2798,13 @@ void daKago_c::executeLandingLakeHairia() { cXyz unkXyz1; cXyz unkXyz2(-700.0f, 0.0f, -300.0f); - switch (field_0x744) { + switch (mMode) { case 0: current.pos.set(-74500.0f, -12775.0f, 31400.0f); if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 2, 0xffff, 3); - eventInfo.onCondition(2); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); return; } @@ -2816,38 +2812,37 @@ void daKago_c::executeLandingLakeHairia() { camera->SetTrimSize(3); current.pos.set(-74500.0f, -12775.0f, 31400.0f); - field_0x698.set(-79460.0f, -13000.0f, 34200.0f); - field_0x68c = current.pos; + mDemoCamEye.set(-79460.0f, -13000.0f, 34200.0f); + mDemoCamCenter = current.pos; - field_0x6d4 = 70.0f; + mDemoCamFovy = 70.0f; - current.angle.x = 0; - shape_angle.x = 0; - shape_angle.y = current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x698); + shape_angle.x = current.angle.x = 0; + shape_angle.y = current.angle.y = cLib_targetAngleY(¤t.pos, &mDemoCamEye); field_0x716 = shape_angle.y + 0x2000; field_0x6a4.set(-77615.0f, -18500.0f, 41400.0f); field_0x6a4 += unkXyz2; - field_0x744 = 1; + mMode = 1; field_0x712 = 0; field_0x728 = 150; - field_0x6f8 = 50.0f; + mFlySpeed = 50.0f; break; case 1: - Z2GetAudioMgr()->setDemoName(field_0x760); - field_0x744 = 2; + Z2GetAudioMgr()->setDemoName(mDemoName); + mMode = 2; case 2: - if (field_0x728 == 0x8c) { - if (field_0x6e7 == 0x01) { + if (field_0x728 == 140) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); } } - field_0x68c = current.pos; + mDemoCamCenter = current.pos; cLib_chaseAngleS(&field_0x712, 0x80, 4); @@ -2856,17 +2851,16 @@ void daKago_c::executeLandingLakeHairia() { cLib_chaseAngleS(&shape_angle.x, 0x1000, 0x20); current.angle.x = shape_angle.x; - field_0x6f8 = 50.0f; + mFlySpeed = 50.0f; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); if (field_0x728 == 0) { - field_0x744 = 3; + mMode = 3; } dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 7); - break; case 3: current.pos.set(-76600.0f, -15500.0f, 37340.0f); @@ -2875,37 +2869,36 @@ void daKago_c::executeLandingLakeHairia() { field_0x6a4.set(-77615.0f, -18500.0f, 41400.0f); field_0x6a4 += unkXyz2; - field_0x698.set(-76900.0f, -18550.0f, 41660.0f); - field_0x698 += unkXyz2; + mDemoCamEye.set(-76900.0f, -18550.0f, 41660.0f); + mDemoCamEye += unkXyz2; - field_0x68c = current.pos; + mDemoCamCenter = current.pos; - field_0x6d4 = 70.0f; + mDemoCamFovy = 70.0f; shape_angle.x = current.angle.x = -cLib_targetAngleX(¤t.pos, &field_0x6a4); shape_angle.y = current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); - field_0x744 = 4; + mMode = 4; field_0x728 = 60; - setBck(13, 2, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_WL_e, 2, 10.0f, 1.0f); case 4: - field_0x68c = current.pos; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + mDemoCamCenter = current.pos; + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); if (field_0x728 == 0) { - field_0x744 = 5; - field_0x728 = 0x28; + mMode = 5; + field_0x728 = 40; } dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 7); - break; case 5: - field_0x68c = current.pos; + mDemoCamCenter = current.pos; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); cLib_chaseAngleS(&shape_angle.x, 0, 0x80); current.angle.x = shape_angle.x; @@ -2913,10 +2906,10 @@ void daKago_c::executeLandingLakeHairia() { if (field_0x728 == 0) { setRideOff(); - field_0x744 = 6; + mMode = 6; field_0x728 = 100; - setBck(0xf, 0x02, 10.0f, 1.0f); + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 2, 10.0f, 1.0f); } else { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 7); } @@ -2927,28 +2920,29 @@ void daKago_c::executeLandingLakeHairia() { case 6: unkXyz1.set(-77875.0f, -18287.0f, 42000.0f); unkXyz1 += unkXyz2; - cLib_chasePos(&field_0x68c, unkXyz1, field_0x6cc); - if (field_0x68c.abs(unkXyz1) < 500.0f) { + cLib_chasePos(&mDemoCamCenter, unkXyz1, field_0x6cc); + if (mDemoCamCenter.abs(unkXyz1) < 500.0f) { cLib_chaseF(&field_0x6cc, 0.0f, 3.0f); } unkXyz1.set(-77275.0f, -18500.0f, 41090.0f); unkXyz1 += unkXyz2; - cLib_chasePos(&field_0x698, unkXyz1, field_0x6d0); - if (field_0x698.abs(unkXyz1) < 200.0f) { + cLib_chasePos(&mDemoCamEye, unkXyz1, field_0x6d0); + + if (mDemoCamEye.abs(unkXyz1) < 200.0f) { cLib_chaseF(&field_0x6d0, 0.0f, 1.0f); } else { cLib_chaseF(&field_0x6d0, 20.0f, 1.0f); } - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); - cLib_chaseAngleS(&shape_angle.x, -8192, 0x100); + cLib_chaseAngleS(&shape_angle.x, -0x2000, 0x100); current.angle.x = shape_angle.x; if (field_0x728 == 90) { - if (field_0x6e7 == 0x01) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); @@ -2956,7 +2950,7 @@ void daKago_c::executeLandingLakeHairia() { } if (field_0x728 == 0) { - setActionMode(4, 0); + setActionMode(ACTION_WAIT_e, 0); camera->Reset(); camera->Start(); @@ -2965,91 +2959,87 @@ void daKago_c::executeLandingLakeHairia() { dComIfGp_event_reset(); Z2GetAudioMgr()->setDemoName(NULL); - return; } dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 8); } - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); } void daKago_c::executeLandingBoartHouse() { dCamera_c* camera = dCam_getBody(); cXyz unkXyz1; - switch (field_0x744) { + switch (mMode) { case 0: { current.pos.set(5750.0f, 1600.0f, 6100.0f); if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 2, 0xffff, 3); eventInfo.onCondition(2); - return; } camera->Stop(); camera->SetTrimSize(3); - field_0x744 = 10; - + mMode = 10; break; } case 10: { - Z2GetAudioMgr()->setDemoName(field_0x760); + Z2GetAudioMgr()->setDemoName(mDemoName); current.pos.set(5750.0f, 1600.0f, 6100.0f); - setBck(0xf, 0x02, 10.0f, 1.0f); - field_0x698.set(2900.0f, 300.0f, 500.0f); - field_0x68c = current.pos; - field_0x6d4 = 70.0f; + setBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e, 0x02, 10.0f, 1.0f); + mDemoCamEye.set(2900.0f, 300.0f, 500.0f); + mDemoCamCenter = current.pos; + mDemoCamFovy = 70.0f; field_0x6a4.set(3630.0f, 300.0f, 600.0f); shape_angle.x = current.angle.x = -cLib_targetAngleX(¤t.pos, &field_0x6a4); shape_angle.y = current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x6a4); - field_0x744 = 1; + mMode = 1; field_0x712 = 0; - field_0x728 = 0x50; - field_0x6f8 = 50.0f; + field_0x728 = 80; + mFlySpeed = 50.0f; } case 1: { - if (field_0x728 == 0x46) { - if (field_0x6e7 == 0x01) { + if (field_0x728 == 70) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); } } - field_0x68c = current.pos; + mDemoCamCenter = current.pos; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); if (field_0x728 == 0) { - field_0x744 = 2; - field_0x728 = 0x28; + mMode = 2; + field_0x728 = 40; } dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 9); - break; } case 2: { - field_0x68c = current.pos; + mDemoCamCenter = current.pos; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); cLib_chaseAngleS(&shape_angle.x, 0, 0x80); current.angle.x = shape_angle.x; if (field_0x728 == 0) { setRideOff(); - field_0x744 = 3; + mMode = 3; field_0x728 = 90; } else { dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 9); @@ -3057,32 +3047,31 @@ void daKago_c::executeLandingBoartHouse() { field_0x6cc = 40.0f; field_0x6d0 = 15.0f; - break; } case 3: { unkXyz1.set(3440.0f, 500.0f, 400.0f); - cLib_chasePos(&field_0x68c, unkXyz1, field_0x6cc); - if (field_0x68c.abs(unkXyz1) < 500.0f) { + cLib_chasePos(&mDemoCamCenter, unkXyz1, field_0x6cc); + if (mDemoCamCenter.abs(unkXyz1) < 500.0f) { cLib_chaseF(&field_0x6cc, 0.0f, 3.0f); } unkXyz1.set(3584.0f, 270.0f, 1007.0f); - cLib_chasePos(&field_0x698, unkXyz1, field_0x6d0); - if (field_0x698.abs(unkXyz1) < 200.0f) { + cLib_chasePos(&mDemoCamEye, unkXyz1, field_0x6d0); + if (mDemoCamEye.abs(unkXyz1) < 200.0f) { cLib_chaseF(&field_0x6d0, 0.0f, 1.0f); } else { cLib_chaseF(&field_0x6d0, 15.0f, 1.0f); } - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); - cLib_chaseAngleS(&shape_angle.x, -8192, 0x100); + cLib_chaseAngleS(&shape_angle.x, -0x2000, 0x100); current.angle.x = shape_angle.x; - if (field_0x728 == 0x50) { - if (field_0x6e7 == 0x01) { + if (field_0x728 == 80) { + if (mType == TYPE_NORMAL) { mSound.startCreatureVoice(Z2SE_EN_KC_V_NAKU, -1); } else { mSound.startCreatureVoice(Z2SE_EN_YC_V_NAKU, -1); @@ -3090,10 +3079,10 @@ void daKago_c::executeLandingBoartHouse() { } if (field_0x728 == 0) { - setActionMode(4, 0); + setActionMode(ACTION_WAIT_e, 0); - if (field_0x6e7 == 0x01) { - field_0x728 = 0x78; + if (mType == TYPE_NORMAL) { + field_0x728 = 120; } camera->Reset(); @@ -3103,44 +3092,42 @@ void daKago_c::executeLandingBoartHouse() { dComIfGp_event_reset(); Z2GetAudioMgr()->setDemoName(NULL); - return; } dComIfGp_getEvent()->setSkipProc(this, DemoSkipCallBack, 10); - break; } } - camera->Set(field_0x68c, field_0x698, field_0x6d4, 0); + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamFovy, 0); } void daKago_c::executeLanding() { - if (this->field_0x73c == 0) { + if (mSceneType == SCENE_TYPE_LAKE_HYLIA) { executeLandingLakeHairia(); - } else if (this->field_0x73c == 2) { + } else if (mSceneType == SCENE_TYPE_BOARD_HOUSE) { executeLandingBoartHouse(); } else { setRideOff(); - setActionMode(4, 0); + setActionMode(ACTION_WAIT_e, 0); } } void daKago_c::moveDemoFly() { - if (field_0x744 == 0) { - cLib_chaseF(&field_0x6f8, l_HIO.mFlightSpeed, 2.0f); + if (mMode == 0) { + cLib_chaseF(&mFlySpeed, l_HIO.mFlightSpeed, 2.0f); if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 2, 0xffff, 3); - eventInfo.onCondition(2); + eventInfo.onCondition(dEvtCnd_CANDEMO_e); } else { setPlayerRideOn(); mDashCooldownTime = (int)l_HIO.mDashCooldownTime; mDashTime = (int)l_HIO.mDashTime; - field_0x744 = 1; + mMode = 1; setDashBlurEffect(0); - setBck(11, 0, 5.0f, l_HIO.mDashTimeMultiplier); + setBck(dRes_ID_E_YC_BCK_YC_FLY_DASH_WL_e, 0, 5.0f, l_HIO.mDashTimeMultiplier); dComIfGp_getVibration().StartShock(1, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); mpLockActor = NULL; @@ -3148,9 +3135,8 @@ void daKago_c::moveDemoFly() { mGroundHeight = checkGroundHeight(current.pos, NULL); mRoofHeight = checkRoofHeight(current.pos); - if (mCurrentAction == 9) { + if (mAction == ACTION_DEMO_FLY_e) { dComIfGs_onSaveSwitch(9); - mMsgFlow.init(this, 0xbbf, 0, NULL); } } @@ -3159,75 +3145,72 @@ void daKago_c::moveDemoFly() { mIsFlying = true; - if (mCurrentAction == 9) { + if (mAction == ACTION_DEMO_FLY_e) { mMsgFlow.doFlow(this, NULL, 0); } - if (field_0x744 < 6) { + + if (mMode < 6) { setDashEffect(); - - field_0x6dd = 0x01; - - dComIfGp_setAStatusForce(0x27, 0); + mIsAttack = TRUE; + dComIfGp_setAStatusForce(BUTTON_STATUS_UNK_39, 0); } - switch (field_0x744) { + switch (mMode) { case 1: { - Z2GetAudioMgr()->setDemoName(field_0x760); - - field_0x744 = 2; + Z2GetAudioMgr()->setDemoName(mDemoName); + mMode = 2; } case 2: { - cLib_chaseF(&field_0x6f8, 30.0f, l_HIO.mDashTimeMultiplier * 3.0f); - if (mpMorf->checkFrame(9.0f)) { - if (field_0x6e7 == 0) { + cLib_chaseF(&mFlySpeed, 30.0f, l_HIO.mDashTimeMultiplier * 3.0f); + if (mAnm_p->checkFrame(9.0f)) { + if (mType == TYPE_TWILIGHT) { mSound.startCreatureSound(Z2SE_EN_YC_DASH, 0, -1); } else { mSound.startCreatureSound(Z2SE_EN_KC_DASH, 0, -1); } } - if (mpMorf->checkFrame(12.0f)) { - field_0x744 = 3; - field_0x728 = 0x14; + + if (mAnm_p->checkFrame(12.0f)) { + mMode = 3; + field_0x728 = 20; dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); dComIfGp_getVibration().StartQuake(1, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); field_0x6e6 = 0; } - break; } case 3: case 4: { - cLib_chaseF(&field_0x6f8, 100.0f, 5.0f); + cLib_chaseF(&mFlySpeed, 100.0f, 5.0f); if (field_0x728 == 0) { - if (field_0x744 == 3) { - field_0x744 = 4; - field_0x728 = 0xf; + if (mMode == 3) { + mMode = 4; + field_0x728 = 15; } else { - field_0x744 = 5; + mMode = 5; dComIfGp_getVibration().StopQuake(0x1f); } } - break; } case 5: { - cLib_chaseF(&field_0x6f8, l_HIO.mFlightSpeed, 5.0f); - if (field_0x6f8 <= l_HIO.mFlightSpeed) { + cLib_chaseF(&mFlySpeed, l_HIO.mFlightSpeed, 5.0f); + if (mFlySpeed <= l_HIO.mFlightSpeed) { field_0x6c8 = 0; field_0x6c4 = 8000.0f; field_0x710 = field_0x712 = 0; -#if VERSION == VERSION_WII_USA_R0 + #if VERSION == VERSION_WII_USA_R0 field_0x72c = 30; -#else + #else if (dComIfGp_getStartStagePoint() == 0) { field_0x72c = 30; } else { field_0x72c = 60 + nREG_S(1); } -#endif + #endif shape_angle.y = current.angle.y; @@ -3237,9 +3220,8 @@ void daKago_c::moveDemoFly() { setFlyAnime(); field_0x710 = field_0x712 = 0; - field_0x744 = 6; + mMode = 6; } - break; } case 6: { @@ -3249,32 +3231,30 @@ void daKago_c::moveDemoFly() { f32 fVar11 = 0.0f; if (cM_ssin(current.angle.x) > 0.0f) { - fVar11 = - l_HIO.mFlightSpeed + l_HIO.mDescentRateIncrement * cM_ssin(current.angle.x); + fVar11 = l_HIO.mFlightSpeed + l_HIO.mDescentRateIncrement * cM_ssin(current.angle.x); } else { fVar11 = l_HIO.mFlightSpeed + l_HIO.mAscentRateDecel * cM_ssin(current.angle.x); } - if (std::abs(field_0x6f8 - fVar11) > 10.0f) { - cLib_chaseF(&field_0x6f8, fVar11, 2.0f); + if (std::abs(mFlySpeed - fVar11) > 10.0f) { + cLib_chaseF(&mFlySpeed, fVar11, 2.0f); } else { - cLib_chaseF(&field_0x6f8, fVar11, 1.0f); + cLib_chaseF(&mFlySpeed, fVar11, 1.0f); } if (field_0x72c == 0) { - setActionMode(0, 0); + setActionMode(ACTION_FLY_e, 0); dComIfGp_event_reset(); Z2GetAudioMgr()->setDemoName(NULL); return; } - break; } } } - cXyz unkXyz1 = dPath_GetPnt(mpPath1, mPathIdx)->m_position; - cXyz unkXyz2 = dPath_GetPnt(mpPath1, mPathIdx - mPathIdxOffset)->m_position; + cXyz unkXyz1 = dPath_GetPnt(mpPath1, mPathCurrentPointNo)->m_position; + cXyz unkXyz2 = dPath_GetPnt(mpPath1, mPathCurrentPointNo - mPathStep)->m_position; s16 targetYaw = field_0x714 = cLib_targetAngleY(&unkXyz2, &unkXyz1); if (dComIfGp_getStartStagePoint() == 0) { @@ -3288,13 +3268,13 @@ void daKago_c::moveDemoFly() { cLib_addCalcAngleS(¤t.angle.y, cLib_targetAngleY(&unkXyz2, &unkXyz1), 8, 0x40, 0x10); shape_angle.y = current.angle.y; - speedF = field_0x6f8 * std::abs(cM_scos(current.angle.x)); - speed.y = -field_0x6f8 * cM_ssin(current.angle.x); + speedF = mFlySpeed * std::abs(cM_scos(current.angle.x)); + speed.y = -mFlySpeed * cM_ssin(current.angle.x); f32 nextPath = checkNextPath(unkXyz1); if (nextPath < 0.0f) { if (abs((s16)(targetYaw - cLib_targetAngleY(&unkXyz2, ¤t.pos))) < 0x4000) { - mPathIdx += this->mPathIdxOffset; + mPathCurrentPointNo += mPathStep; if (checkFlySceneChange()) { return; } @@ -3303,41 +3283,41 @@ void daKago_c::moveDemoFly() { } void daKago_c::setFlyEffect() { - if (field_0x6e7 == 1) { + if (mType == TYPE_NORMAL) { return; } - J3DModel* model = mpMorf->getModel(); + J3DModel* model = mAnm_p->getModel(); JPABaseEmitter* emitter; - field_0xb30 = dComIfGp_particle_set(field_0xb30, 0x8607, ¤t.pos, &tevStr); + field_0xb30 = dComIfGp_particle_set(field_0xb30, dPa_RM(ID_ZF_S_YCFLY_HANDLR2), ¤t.pos, &tevStr); emitter = dComIfGp_particle_getEmitter(field_0xb30); if (emitter != NULL) { - emitter->setGlobalSRTMatrix(model->getAnmMtx(13)); + emitter->setGlobalSRTMatrix(model->getAnmMtx(YC_JNT_HANDL_2_e)); } - field_0xb34 = dComIfGp_particle_set(field_0xb34, 0x8607, ¤t.pos, &tevStr); + field_0xb34 = dComIfGp_particle_set(field_0xb34, dPa_RM(ID_ZF_S_YCFLY_HANDLR2), ¤t.pos, &tevStr); emitter = dComIfGp_particle_getEmitter(field_0xb34); if (emitter != NULL) { - emitter->setGlobalSRTMatrix(model->getAnmMtx(18)); + emitter->setGlobalSRTMatrix(model->getAnmMtx(YC_JNT_HANDR_2_e)); } } void daKago_c::setDashEffect() { - J3DModel* model = mpMorf->getModel(); + J3DModel* model = mAnm_p->getModel(); JPABaseEmitter* emitter; - if (field_0x6e7 == 0) { - field_0xb38 = dComIfGp_particle_set(field_0xb38, 0x8609, ¤t.pos, &tevStr); - emitter = dComIfGp_particle_getEmitter(this->field_0xb38); + if (mType == TYPE_TWILIGHT) { + field_0xb38 = dComIfGp_particle_set(field_0xb38, dPa_RM(ID_ZF_S_YCDASH_HANDL2), ¤t.pos, &tevStr); + emitter = dComIfGp_particle_getEmitter(field_0xb38); if (emitter != NULL) { - emitter->setGlobalSRTMatrix(model->getAnmMtx(13)); + emitter->setGlobalSRTMatrix(model->getAnmMtx(YC_JNT_HANDL_2_e)); } - field_0xb3c = dComIfGp_particle_set(field_0xb3c, 0x860a, ¤t.pos, &tevStr); + field_0xb3c = dComIfGp_particle_set(field_0xb3c, dPa_RM(ID_ZF_S_YCDASH_HANDR2), ¤t.pos, &tevStr); emitter = dComIfGp_particle_getEmitter(field_0xb3c); if (emitter != NULL) { - emitter->setGlobalSRTMatrix(model->getAnmMtx(18)); + emitter->setGlobalSRTMatrix(model->getAnmMtx(YC_JNT_HANDR_2_e)); } } @@ -3345,25 +3325,27 @@ void daKago_c::setDashEffect() { } void daKago_c::setDamageEffect() { - J3DModel* model = mpMorf->getModel(); + J3DModel* model = mAnm_p->getModel(); JPABaseEmitter* emitter; - if (field_0x6e7 != 1) { - field_0xb38 = dComIfGp_particle_set(field_0xb38, 0x8603, ¤t.pos, &tevStr); - emitter = dComIfGp_particle_getEmitter(this->field_0xb38); + if (mType != TYPE_NORMAL) { + field_0xb38 = dComIfGp_particle_set(field_0xb38, dPa_RM(ID_ZF_S_YCDAMAGE00_HANDLR2), ¤t.pos, &tevStr); + emitter = dComIfGp_particle_getEmitter(field_0xb38); if (emitter != NULL) { - emitter->setGlobalSRTMatrix(model->getAnmMtx(13)); + emitter->setGlobalSRTMatrix(model->getAnmMtx(YC_JNT_HANDL_2_e)); } - field_0xb3c = dComIfGp_particle_set(field_0xb3c, 0x8603, ¤t.pos, &tevStr); + field_0xb3c = dComIfGp_particle_set(field_0xb3c, dPa_RM(ID_ZF_S_YCDAMAGE00_HANDLR2), ¤t.pos, &tevStr); emitter = dComIfGp_particle_getEmitter(field_0xb3c); if (emitter != NULL) { - emitter->setGlobalSRTMatrix(model->getAnmMtx(18)); + emitter->setGlobalSRTMatrix(model->getAnmMtx(YC_JNT_HANDR_2_e)); } } } void daKago_c::setDashBlurEffect(int param_0) { + UNUSED(param_0); + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); cXyz cameraEye = dCam_getBody()->Eye(); cXyz cameraEyeOffset; @@ -3381,51 +3363,53 @@ void daKago_c::setDashBlurEffect(int param_0) { cameraEyeOffset = cameraEye + local_78; - local_94.set((s16)cLib_targetAngleX(&field_0x6b0, &cameraEye), (s16)cLib_targetAngleY(&field_0x6b0, &cameraEye), 0); + local_94.set((s16)cLib_targetAngleX(&mPrevCamEye, &cameraEye), (s16)cLib_targetAngleY(&mPrevCamEye, &cameraEye), 0); if (l_HIO.mAngleTrackingMode == 0) { field_0x6be.x = -local_94.x; field_0x6be.y = local_94.y; field_0x6be.z = 0; } else { - field_0x6be.x = shape_angle.x * (0.5f + XREG_F(0x13)); + field_0x6be.x = shape_angle.x * (0.5f + XREG_F(19)); field_0x6be.y = shape_angle.y; field_0x6be.z = 0; } - field_0xb40 = dComIfGp_particle_set(field_0xb40, 0x860f, &cameraEyeOffset, &tevStr, &field_0x6be, 0, 0xff, 0, -1, 0, 0, 0); + + field_0xb40 = dComIfGp_particle_set(field_0xb40, dPa_RM(ID_ZF_S_YCSPEED), &cameraEyeOffset, &tevStr, &field_0x6be, NULL, 0xff, NULL, -1, NULL, NULL, NULL); } -void daKago_c::setWallHitEffect(cXyz param_0, int param_1) { +void daKago_c::setWallHitEffect(cXyz i_pos, int i_effType) { // might be a 2D array? static u16 kago_wall_hit_id[6] = { - 0x8658, - 0x86F9, - 0x86FA, - 0x8659, - 0x86FB, - 0x86FC, + dPa_RM(ID_ZF_S_YCHITA), + dPa_RM(ID_ZF_S_YCHITA_1), + dPa_RM(ID_ZF_S_YCHITA_2), + + dPa_RM(ID_ZF_S_YCHITB), + dPa_RM(ID_ZF_S_YCHITB_1), + dPa_RM(ID_ZF_S_YCHITB_2), }; for (int i = 0; i < 3; i++) { - dComIfGp_particle_set(kago_wall_hit_id[i + param_1 * 3], ¶m_0, &tevStr, 0, 0); + dComIfGp_particle_set(kago_wall_hit_id[i + i_effType * 3], &i_pos, &tevStr, NULL, NULL); } } void daKago_c::setSibukiEffect() { static u16 kago_wave_id[3] = { - 0x865A, - 0x865B, - 0x865C, + dPa_RM(ID_ZF_S_YCWAVE00_WAVE), + dPa_RM(ID_ZF_S_YCWAVE01_SPLASH), + dPa_RM(ID_ZF_S_YCWAVE02_DROP), }; - cXyz acStack_28(current.pos.x, field_0x70c + l_HIO.mYOffsetFromWaterSurface, current.pos.z); - csXyz cStack_30(0, shape_angle.y, 0); + cXyz effpos(current.pos.x, field_0x70c + l_HIO.mYOffsetFromWaterSurface, current.pos.z); + csXyz effrot(0, shape_angle.y, 0); for (int i = 0; i < 3; i++) { - field_0xb44[i] = - dComIfGp_particle_set(field_0xb44[i], kago_wave_id[i], &acStack_28, &tevStr, &cStack_30, - 0, 0xff, 0, -1, 0, 0, 0); + mSibukiEmitterIDs[i] = + dComIfGp_particle_set(mSibukiEmitterIDs[i], kago_wave_id[i], &effpos, &tevStr, &effrot, + NULL, 0xff, NULL, -1, NULL, NULL, NULL); } - if (field_0x6e7 == 0) { + if (mType == TYPE_TWILIGHT) { mSound.startCreatureSoundLevel(Z2SE_EN_YC_SPLASH, 0, -1); } else { mSound.startCreatureSoundLevel(Z2SE_EN_KC_SPLASH, 0, -1); @@ -3433,40 +3417,40 @@ void daKago_c::setSibukiEffect() { } void daKago_c::setDashSibukiEffect() { - cXyz acStack_20(current.pos.x, field_0x70c + l_HIO.mYOffsetFromWaterSurface, current.pos.z); - csXyz cStack_28(0, shape_angle.y, 0); - field_0xb50 = dComIfGp_particle_set(field_0xb50, 0x86fe, &acStack_20, &tevStr, &cStack_28, 0, - 0xff, 0, -1, 0, 0, 0); + cXyz effpos(current.pos.x, field_0x70c + l_HIO.mYOffsetFromWaterSurface, current.pos.z); + csXyz effrot(0, shape_angle.y, 0); + mDashSibukiEmitterID = dComIfGp_particle_set(mDashSibukiEmitterID, dPa_RM(ID_ZF_S_YCWAVE03_SPLASH), &effpos, &tevStr, &effrot, NULL, + 0xff, NULL, -1, NULL, NULL, NULL); } void daKago_c::setWaterFallEffect() { static u16 kago_wave_id[2] = { - 0x865B, - 0x865C, + dPa_RM(ID_ZF_S_YCWAVE01_SPLASH), + dPa_RM(ID_ZF_S_YCWAVE02_DROP), }; - cXyz acStack_28(current.pos.x, current.pos.y, current.pos.z); - csXyz cStack_30(0, shape_angle.y, 0); + cXyz effpos(current.pos.x, current.pos.y, current.pos.z); + csXyz effrot(0, shape_angle.y, 0); for (int i = 0; i < 2; i++) { - field_0xb44[i] = - dComIfGp_particle_set(field_0xb44[i], kago_wave_id[i], &acStack_28, &tevStr, &cStack_30, - 0, 0xff, 0, -1, 0, 0, 0); + mSibukiEmitterIDs[i] = + dComIfGp_particle_set(mSibukiEmitterIDs[i], kago_wave_id[i], &effpos, &tevStr, &effrot, + NULL, 0xFF, NULL, -1, NULL, NULL, NULL); } - if (field_0x6e7 == 0) { + + if (mType == TYPE_TWILIGHT) { mSound.startCreatureSoundLevel(Z2SE_EN_YC_SPLASH, 0, -1); } else { mSound.startCreatureSoundLevel(Z2SE_EN_KC_SPLASH, 0, -1); } } -static void* s_waterfall(void* param_0, void* param_1) { - if (fopAcM_IsActor(param_0) && fopAcM_GetName(param_0) == PROC_Tag_WaterFall) { - if (!fpcM_IsCreating(fopAcM_GetID(param_0))) { - if (((daTagWaterFall_c*)param_0) - ->checkHitWaterFall(((fopAc_ac_c*)param_1)->current.pos)) +static void* s_waterfall(void* i_actor, void* i_data) { + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_Tag_WaterFall) { + if (!fpcM_IsCreating(fopAcM_GetID(i_actor))) { + if (((daTagWaterFall_c*)i_actor)->checkHitWaterFall(((fopAc_ac_c*)i_data)->current.pos)) { - ((daKago_c*)param_1)->onWaterFall(); - return param_0; + ((daKago_c*)i_data)->onWaterFall(); + return i_actor; } } } @@ -3475,44 +3459,46 @@ static void* s_waterfall(void* param_0, void* param_1) { } void daKago_c::setFlySound() { + BOOL isPlayWingSound; + if (field_0x6de != 0) { - BOOL unkFlag1 = FALSE; - if (checkBck(9) || checkBck(15)) { - if (field_0x6e7 == 0) { - if (mpMorf->checkFrame(27.0f)) { - unkFlag1 = TRUE; + isPlayWingSound = FALSE; + if (checkBck(dRes_ID_E_YC_BCK_YC_FLY_e) || checkBck(dRes_ID_E_YC_BCK_YC_FLY_WL_e)) { + if (mType == TYPE_TWILIGHT) { + if (mAnm_p->checkFrame(27.0f)) { + isPlayWingSound = TRUE; } } else { - if (mpMorf->checkFrame(29.0f)) { - unkFlag1 = TRUE; + if (mAnm_p->checkFrame(29.0f)) { + isPlayWingSound = TRUE; } } - } else if (checkBck(21)) { - if (mpMorf->checkFrame(10.0f)) { - unkFlag1 = TRUE; + } else if (checkBck(dRes_ID_E_YC_BCK_YC_HOVERING_e)) { + if (mAnm_p->checkFrame(10.0f)) { + isPlayWingSound = TRUE; } - } else if (checkBck(6)) { - if (mpMorf->checkFrame(26.0f)) { - unkFlag1 = TRUE; + } else if (checkBck(dRes_ID_E_YC_BCK_YC_CATCH_START_e)) { + if (mAnm_p->checkFrame(26.0f)) { + isPlayWingSound = TRUE; } - } else if (checkBck(5)) { - if (mpMorf->checkFrame(10.0f)) { - unkFlag1 = TRUE; + } else if (checkBck(dRes_ID_E_YC_BCK_YC_CATCH_MIDDLE_e)) { + if (mAnm_p->checkFrame(10.0f)) { + isPlayWingSound = TRUE; } - } else if (checkBck(4)) { - if (mpMorf->checkFrame(10.0f) || mpMorf->checkFrame(35.0f)) { - unkFlag1 = TRUE; + } else if (checkBck(dRes_ID_E_YC_BCK_YC_CATCH_END_e)) { + if (mAnm_p->checkFrame(10.0f) || mAnm_p->checkFrame(35.0f)) { + isPlayWingSound = TRUE; } - } else if (checkBck(12) || checkBck(13)) { - if (field_0x6e7 == 0) { + } else if (checkBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_e) || checkBck(dRes_ID_E_YC_BCK_YC_FLY_GLIDE_WL_e)) { + if (mType == TYPE_TWILIGHT) { mSound.startCreatureSoundLevel(Z2SE_EN_YC_GLIDE, 0, -1); } else { mSound.startCreatureSoundLevel(Z2SE_EN_KC_GLIDE, 0, -1); } } - if (unkFlag1) { - if (field_0x6e7 == 0) { + if (isPlayWingSound) { + if (mType == TYPE_TWILIGHT) { mSound.startCreatureSound(Z2SE_EN_YC_WING, 0, -1); } else { mSound.startCreatureSound(Z2SE_EN_KC_WING, 0, -1); @@ -3526,78 +3512,78 @@ void daKago_c::action() { checkSizeBg(); setFlyEffect(); - field_0x6f0 = mDoCPd_c::getStickX3D(0); - field_0x6f4 = mDoCPd_c::getStickY(0); + mStickX = mDoCPd_c::getStickX3D(PAD_1); + mStickY = mDoCPd_c::getStickY(PAD_1); - u32 unkInt1 = field_0x6ea; - field_0x6ea = 0; + u8 prevIsWaterfall = mIsWaterfall; + mIsWaterfall = FALSE; fpcM_Search(s_waterfall, this); - if (field_0x6ea != 0) { - if (unkInt1 == 0) { + if (mIsWaterfall) { + if (!prevIsWaterfall) { current.angle.x = 0x1000; dComIfGp_getVibration().StartQuake(3, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); } - field_0x6f0 = field_0x6f0 * 0.5f; + mStickX = mStickX * 0.5f; - if (field_0x6f4 < 0.0f) { - field_0x6f4 = field_0x6f4 * 0.5f; + if (mStickY < 0.0f) { + mStickY = mStickY * 0.5f; } else { - field_0x6f4 = field_0x6f4 * 1.5f; + mStickY = mStickY * 1.5f; } setWaterFallEffect(); - } else if (unkInt1 != 0) { + } else if (prevIsWaterfall) { dComIfGp_getVibration().StopQuake(0x1f); } - field_0x6dd = 0; + mIsAttack = FALSE; - switch (mCurrentAction) { - case 0: + switch (mAction) { + case ACTION_FLY_e: executeFly(); break; - case 1: + case ACTION_STAGGER_e: executeStagger(); break; - case 2: + case ACTION_EVENT_e: executeEvent(); break; - case 3: + case ACTION_PERCH_e: executePerch(); break; - case 4: + case ACTION_WAIT_e: executeWait(); break; - case 5: + case ACTION_ATTACK_e: executeAttack(); break; - case 6: + case ACTION_EVENT2_e: executeEvent2(); break; - case 7: + case ACTION_PERCH2_e: executePerch2(); break; - case 8: + case ACTION_LANDING_e: executeLanding(); break; - case 9: + case ACTION_DEMO_FLY_e: moveDemoFly(); break; - case 10: + case ACTION_DEMO_FLY2_e: moveDemoFly(); break; } - if (field_0x6e7 == 1 && (mCurrentAction == 0 || mCurrentAction == 5)) { + if (mType == TYPE_NORMAL && (mAction == ACTION_FLY_e || mAction == ACTION_ATTACK_e)) { mSph.OnAtSetBit(); } setFlySound(); if (daPy_getPlayerActorClass()->checkCargoCarry()) { - if (mCurrentAction == 9 || mCurrentAction == 10) { + if (mAction == ACTION_DEMO_FLY_e || mAction == ACTION_DEMO_FLY2_e) { dCam_getBody()->SetTrimTypeForce(2); } else if (isAttack()) { dCam_getBody()->SetTrimTypeForce(0); @@ -3605,19 +3591,20 @@ void daKago_c::action() { } } - fopAcM_posMoveF(this, 0); + fopAcM_posMoveF(this, NULL); + if (field_0x6dc == 0) { mObjAcch.CrrPos(dComIfG_Bgsp()); } - if (mpMorf != NULL) { - mpMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + if (mAnm_p != NULL) { + mAnm_p->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); } field_0x674 = current.pos; if (cLib_chaseF(&field_0x6c4, 0.0f, 60.0f) == 0) { - field_0x6c8 = field_0x6c8 + 0x800; + ANGLE_ADD(field_0x6c8, 0x800); } field_0x6ca = field_0x6c4 * cM_ssin(field_0x6c8); @@ -3628,11 +3615,11 @@ void daKago_c::mtx_set() { mDoMtx_stack_c::ZXYrotM(shape_angle); mDoMtx_stack_c::scaleM(l_HIO.mBasicSize,l_HIO.mBasicSize,l_HIO.mBasicSize); - J3DModel* model = mpMorf->getModel(); + J3DModel* model = mAnm_p->getModel(); model->setBaseTRMtx(mDoMtx_stack_c::get()); - mpMorf->modelCalc(); + mAnm_p->modelCalc(); - mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(0x1c)); + mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(YC_JNT_LEGR_3_e)); mDoMtx_stack_c::ZrotM(field_0x6ca); cMtx_copy(mDoMtx_stack_c::get(), mLegR3Mtx); } @@ -3654,7 +3641,7 @@ void daKago_c::cc_set() { int daKago_c::execute() { if (executeBalloonMenu()) { #if VERSION != VERSION_SHIELD_DEBUG - dComIfGp_setAStatusForce(0x27, 0); + dComIfGp_setAStatusForce(BUTTON_STATUS_UNK_39, 0); #endif return 1; } @@ -3667,24 +3654,27 @@ int daKago_c::execute() { field_0x72c--; } - if (field_0x720 != 0) { - field_0x720--; + if (mWallHitInvulnTimer != 0) { + mWallHitInvulnTimer--; } + if (mDashCooldownTime != 0) { mDashCooldownTime--; } - if (field_0x71c != 0) { - field_0x71c--; + + if (mWaterSplashTimer != 0) { + mWaterSplashTimer--; } - if (field_0x6ed != 0) { - field_0x6ed--; + + if (unk_0x6ed != 0) { + unk_0x6ed--; } action(); mtx_set(); cc_set(); - field_0x6b0 = dCam_getBody()->Eye(); + mPrevCamEye = dCam_getBody()->Eye(); return 1; } @@ -3698,9 +3688,9 @@ static int daKago_IsDelete(daKago_c* i_this) { } int daKago_c::_delete() { - dComIfG_resDelete(&mPhase, field_0x75c); + dComIfG_resDelete(&mPhase, mArcName); - if (field_0xb54 != 0) { + if (mIsHioSet != 0) { hio_set = false; mDoHIO_DELETE_CHILD(l_HIO.mChild); } @@ -3717,65 +3707,64 @@ static int daKago_Delete(daKago_c* i_this) { return i_this->_delete(); } -int daKago_c::ctrlJoint(J3DJoint* param_0, J3DModel* param_1) { - J3DJoint* joint = param_0; +int daKago_c::ctrlJoint(J3DJoint* i_joint, J3DModel* param_1) { + J3DJoint* joint = i_joint; int jointNo = joint->getJntNo(); mDoMtx_stack_c::copy(param_1->getAnmMtx(jointNo)); - if (jointNo == 3 || jointNo == 5 || jointNo == 6) { - mDoMtx_stack_c::YrotM(field_0x71a); - mDoMtx_stack_c::ZrotM(field_0x718); + if (jointNo == YC_JNT_NECK1_e || jointNo == YC_JNT_NECK2_e || jointNo == YC_JNT_HEAD_e) { + mDoMtx_stack_c::YrotM(mHeadRotY); + mDoMtx_stack_c::ZrotM(mHeadRotZ); } param_1->setAnmMtx(jointNo,mDoMtx_stack_c::get()); cMtx_copy(mDoMtx_stack_c::get(),J3DSys::mCurrentMtx); - return 1; } -int daKago_c::JointCallBack(J3DJoint* param_0, int param_1) { +int daKago_c::JointCallBack(J3DJoint* i_joint, int param_1) { if (param_1 == 0) { J3DModel* model = j3dSys.getModel(); daKago_c* kago = (daKago_c*)model->getUserArea(); if (kago != NULL) { - kago->ctrlJoint(param_0, model); + kago->ctrlJoint(i_joint, model); } } + return 1; } int daKago_c::CreateHeap() { J3DModelData* modelData; - if (field_0x6e7 == 0) { - modelData = (J3DModelData*)dComIfG_getObjectRes(field_0x75c, 0x18); + if (mType == TYPE_TWILIGHT) { + modelData = (J3DModelData*)dComIfG_getObjectRes(mArcName, dRes_ID_E_YC_BMD_YC_e); } else { - modelData = (J3DModelData*)dComIfG_getObjectRes(field_0x75c, 0x10); + modelData = (J3DModelData*)dComIfG_getObjectRes(mArcName, dRes_ID_E_KC_BMD_KC_e); } - JUT_ASSERT(0x139f, modelData != NULL); + JUT_ASSERT(5023, modelData != NULL); - mpMorf = new mDoExt_McaMorfSO( - modelData, NULL, NULL, - (J3DAnmTransform*)dComIfG_getObjectRes(field_0x75c, getBckName(9)), 2, 1.0f, 0, -1, &this->mSound, 0x80000, 0x11000084); - - if (mpMorf == NULL || mpMorf->getModel() == NULL) { + mAnm_p = new mDoExt_McaMorfSO(modelData, NULL, NULL, + (J3DAnmTransform*)dComIfG_getObjectRes(mArcName, getBckName(dRes_ID_E_YC_BCK_YC_FLY_e)), 2, 1.0f, 0, -1, &mSound, 0x80000, 0x11000084); + if (mAnm_p == NULL || mAnm_p->getModel() == NULL) { return 0; } - J3DModel* model = mpMorf->getModel(); + J3DModel* model = mAnm_p->getModel(); model->setUserArea((uintptr_t)this); for (u16 i = 1; i < model->getModelData()->getJointNum(); i++) { - if (i == 3 || i == 5 || i == 6) { + if (i == YC_JNT_NECK1_e || i == YC_JNT_NECK2_e || i == YC_JNT_HEAD_e) { model->getModelData()->getJointNodePointer(i)->setCallBack(JointCallBack); } } + return 1; } -static int useHeapInit(fopAc_ac_c* param_0) { - daKago_c* kago = (daKago_c*)param_0; - return kago->CreateHeap(); +static int useHeapInit(fopAc_ac_c* actor) { + daKago_c* i_this = (daKago_c*)actor; + return i_this->CreateHeap(); } int daKago_c::create() { @@ -3786,39 +3775,40 @@ int daKago_c::create() { mpPath1 = dPath_GetRoomPath(param & 0xff, fopAcM_GetRoomNo(this)); if (mpPath1 == NULL) { OS_REPORT("KAGO ......NONONONONONO PATH !!!!\n"); - return 5; + return cPhs_ERROR_e; } } - field_0x6e7 = (fopAcM_GetParam(this) >> 16) & 0xff; - if (field_0x6e7 == 0xff) { - field_0x6e7 = 0; - } - if (field_0x6e7 == 0) { - field_0x75c = "E_YC"; - field_0x760 = "KAGO_YAMI"; - } else { - field_0x75c = "E_KC"; - field_0x760 = "KAGO_HIKARI"; + mType = (fopAcM_GetParam(this) >> 16) & 0xff; + if (mType == 0xFF) { + mType = TYPE_TWILIGHT; } - int phase_state = dComIfG_resLoad(&mPhase, field_0x75c); + if (mType == TYPE_TWILIGHT) { + mArcName = "E_YC"; + mDemoName = "KAGO_YAMI"; + } else { + mArcName = "E_KC"; + mDemoName = "KAGO_HIKARI"; + } + + int phase_state = dComIfG_resLoad(&mPhase, mArcName); if (phase_state == cPhs_COMPLEATE_e) { OS_REPORT("Kago PARAM %x \n", fopAcM_GetParam(this)); - if (fopAcM_entrySolidHeap(this, useHeapInit, 0x23a0) == 0) { + if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x23a0)) { return cPhs_ERROR_e; } - if (hio_set == 0) { - field_0xb54 = 1; - hio_set = 1; - l_HIO.mChild = mDoHIO_CREATE_CHILD("", &l_HIO); + if (!hio_set) { + mIsHioSet = TRUE; + hio_set = TRUE; + l_HIO.mChild = mDoHIO_CREATE_CHILD("カーゴロック(いい奴)", &l_HIO); } attention_info.flags = 0; - fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); + fopAcM_SetMtx(this, mAnm_p->getModel()->getBaseTRMtx()); fopAcM_SetMin(this, -200.0f, -200.0f, -200.0f); fopAcM_SetMax(this, 200.0f, 200.0f, 200.0f); @@ -3841,16 +3831,16 @@ int daKago_c::create() { maxFallSpeed = -100.0f; gravity = 0.0f; - mPathIdxOffset = 0x01; + mPathStep = 1; - setActionMode(4, 0); + setActionMode(ACTION_WAIT_e, 0); #if DEBUG - if (mDoCPd_c::getHoldL(0) && mDoCPd_c::getHoldR(0)) { - dComIfGs_offSwitch(0x2d, fopAcM_GetRoomNo(this)); - dComIfGs_offSwitch(0x32, fopAcM_GetRoomNo(this)); + if (mDoCPd_c::getHoldL(PAD_1) && mDoCPd_c::getHoldR(PAD_1)) { + dComIfGs_offSwitch(45, fopAcM_GetRoomNo(this)); + dComIfGs_offSwitch(50, fopAcM_GetRoomNo(this)); - setActionMode(8, 0); + setActionMode(ACTION_LANDING_e, 0); setMidnaRideOn(); setPlayerRideOn(); @@ -3860,19 +3850,19 @@ int daKago_c::create() { } #endif - field_0x73c = 3; + mSceneType = SCENE_TYPE_DEFAULT; if (strcmp("F_SP115", dComIfGp_getStartStageName()) == 0) { if (dComIfGp_getStartStageRoomNo() == 0) { - field_0x73c = 0; + mSceneType = SCENE_TYPE_LAKE_HYLIA; } } else if (strcmp("F_SP112", dComIfGp_getStartStageName()) == 0) { if (dComIfGp_getStartStageRoomNo() == 1) { - field_0x73c = 1; + mSceneType = SCENE_TYPE_RIVER; } } else if (strcmp("F_SP126", dComIfGp_getStartStageName()) == 0 && dComIfGp_getStartStageRoomNo() == 0) { - field_0x73c = 2; + mSceneType = SCENE_TYPE_BOARD_HOUSE; } mBalloon2DId = fpcM_ERROR_PROCESS_ID_e; @@ -3885,8 +3875,8 @@ int daKago_c::create() { return phase_state; } -static int daKago_Create(daKago_c* param_0) { - return param_0->create(); +static int daKago_Create(daKago_c* i_this) { + return i_this->create(); } static actor_method_class l_daKago_Method = { diff --git a/src/d/actor/d_a_mg_fshop.cpp b/src/d/actor/d_a_mg_fshop.cpp index f24db03e89..cd3ff1ef19 100644 --- a/src/d/actor/d_a_mg_fshop.cpp +++ b/src/d/actor/d_a_mg_fshop.cpp @@ -1778,7 +1778,7 @@ actor_process_profile_definition g_profile_FSHOP = { fpcPi_CURRENT_e, // mListPrio PROC_FSHOP, // mProcName &g_fpcLf_Method.base, // sub_method - 0x00006B80, // mSize + sizeof(fshop_class), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method diff --git a/src/d/actor/d_a_npc_wrestler.cpp b/src/d/actor/d_a_npc_wrestler.cpp index e385f97b43..8143b8c1af 100644 --- a/src/d/actor/d_a_npc_wrestler.cpp +++ b/src/d/actor/d_a_npc_wrestler.cpp @@ -5226,7 +5226,7 @@ actor_process_profile_definition g_profile_NPC_WRESTLER = { fpcPi_CURRENT_e, // mListPrio PROC_NPC_WRESTLER, // mProcName &g_fpcLf_Method.base, // sub_method - 0xEA0, // mSize (fix this) + sizeof(daNpcWrestler_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method diff --git a/src/d/actor/d_a_obj_volcball.cpp b/src/d/actor/d_a_obj_volcball.cpp index faad909e12..6c02a2311b 100644 --- a/src/d/actor/d_a_obj_volcball.cpp +++ b/src/d/actor/d_a_obj_volcball.cpp @@ -618,7 +618,7 @@ actor_process_profile_definition g_profile_Obj_VolcanicBall = { fpcPi_CURRENT_e, // mListPrio PROC_Obj_VolcanicBall, // mProcName &g_fpcLf_Method.base, // sub_method - 0x00002928, // mSize + sizeof(daObjVolcBall_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method diff --git a/src/d/d_camera.cpp b/src/d/d_camera.cpp index a54cc0ec55..1baf13362a 100644 --- a/src/d/d_camera.cpp +++ b/src/d/d_camera.cpp @@ -11212,7 +11212,7 @@ camera_process_profile_definition g_profile_CAMERA = { fpcPi_CURRENT_e, PROC_CAMERA, &g_fpcLf_Method.base, - sizeof(dCamera_c), + sizeof(camera_class), 0, 0, &g_fopVw_Method, @@ -11233,7 +11233,7 @@ camera_process_profile_definition g_profile_CAMERA2 = { fpcPi_CURRENT_e, PROC_CAMERA2, &g_fpcLf_Method.base, - sizeof(dCamera_c), + sizeof(camera_class), 0, 0, &g_fopVw_Method, diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index 253ef224cb..1f37fc6fe4 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -1287,7 +1287,7 @@ int dComIfG_resLoad(request_of_phase_process_class* i_phase, char const* i_arcNa static int (*l_method[3])(void*) = {(int (*)(void*))phase_1, (int (*)(void*))phase_2, (int (*)(void*))phase_3}; - if (i_phase->id == cPhs_NEXT_e) { + if (i_phase->id == 2) { return cPhs_COMPLEATE_e; } @@ -1335,7 +1335,7 @@ int dComIfG_resLoad(request_of_phase_process_class* i_phase, char const* i_resNa static int (*l_method[3])(void*) = {(int (*)(void*))phase_01, (int (*)(void*))phase_02, (int (*)(void*))phase_03}; - if (i_phase->id == cPhs_NEXT_e) { + if (i_phase->id == 2) { return cPhs_COMPLEATE_e; } @@ -1352,12 +1352,12 @@ int dComIfG_resLoad(request_of_phase_process_class* i_phase, char const* i_resNa */ int dComIfG_resDelete(request_of_phase_process_class* i_phase, char const* i_resName) { JUT_ASSERT(1889, i_phase->id != 1); - if (i_phase->id != cPhs_NEXT_e) { + if (i_phase->id != 2) { return 0; } int r30 = dComIfG_deleteObjectResMain(i_resName); - i_phase->id = cPhs_INIT_e; + i_phase->id = 0; return 1; } diff --git a/src/d/d_path.cpp b/src/d/d_path.cpp index fb15758e06..a01cfdc8a6 100644 --- a/src/d/d_path.cpp +++ b/src/d/d_path.cpp @@ -111,3 +111,22 @@ u8 dPath_GetPolyRoomPathVec(cBgS_PolyInfo const& poly, cXyz* p_pathVec, int* par return 1; } + +#if VERSION == VERSION_SHIELD_DEBUG +void dPath_Ct() { + #if DEBUG + #endif +} + +void dPath_Dt() { + #if DEBUG + #endif +} + +void dPath_Move() {} + +void dPath_Draw() { + #if DEBUG + #endif +} +#endif diff --git a/src/d/d_s_logo.cpp b/src/d/d_s_logo.cpp index 7a2e5303f7..663d98e425 100644 --- a/src/d/d_s_logo.cpp +++ b/src/d/d_s_logo.cpp @@ -18,12 +18,32 @@ #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_machine.h" #include +#include "m_Do/m_Do_main.h" +#include "JSystem/JUtility/JUTConsole.h" -#if PLATFORM_WII -#include "d/d_cursor_mng.h" +#if !PLATFORM_GCN +#include +#include +#include "m_Do/m_Do_Reset.h" + +#include "res/Object/LogoUsWii.h" #endif -#if VERSION == VERSION_GCN_JPN +#if PLATFORM_WII || VERSION == VERSION_SHIELD +#include "m_Re/m_Re_controller_pad.h" +#include "d/d_cursor_mng.h" +#include "d/d_home_button.h" + +struct homeBtnData { + /* 0x0 */ int region; + /* 0x4 */ const char* path; +}; +#endif + +#if VERSION == VERSION_SHIELD +#define LOGO_ARC "LogoUs" +#define MSG_PATH "/res/Msgcn/bmgres.arc" +#elif VERSION == VERSION_GCN_JPN #define LOGO_ARC "Logo" #define MSG_PATH "/res/Msgjp/bmgres.arc" #elif VERSION == VERSION_GCN_PAL @@ -42,22 +62,70 @@ #define PROGRESSIVE_MODE_ON OS_PROGRESSIVE_MODE_ON #endif -static dLog_HIO_c g_LogHIO; +#if PLATFORM_WII || VERSION == VERSION_SHIELD_DEBUG +#define FMAP_RES_PATH "/res/LayoutRevo/fmapresR.arc" +#define DMAP_RES_PATH "/res/LayoutRevo/dmapresR.arc" +#define COLLECT_RES_PATH "/res/LayoutRevo/clctresR.arc" -typedef void (dScnLogo_c::*execFunc)(); -static execFunc l_execFunc[16] = { - &dScnLogo_c::warningInDraw, &dScnLogo_c::warningDispDraw, &dScnLogo_c::warningOutDraw, - &dScnLogo_c::nintendoInDraw, &dScnLogo_c::nintendoOutDraw, &dScnLogo_c::dolbyInDraw, - &dScnLogo_c::dolbyOutDraw, &dScnLogo_c::dolbyOutDraw2, &dScnLogo_c::progInDraw, - &dScnLogo_c::progSelDraw, &dScnLogo_c::progOutDraw, &dScnLogo_c::progSetDraw, - &dScnLogo_c::progSet2Draw, &dScnLogo_c::progChangeDraw, &dScnLogo_c::dvdWaitDraw, - &dScnLogo_c::nextSceneChange, -}; +#define MSG_COM_PATH "/res/LayoutRevo/msgcomR.arc" +#define MSG_RES0_PATH "/res/LayoutRevo/msgres00R.arc" +#define MSG_RES1_PATH "/res/LayoutRevo/msgres01R.arc" +#define MSG_RES2_PATH "/res/LayoutRevo/msgres02R.arc" +#define MSG_RES3_PATH "/res/LayoutRevo/msgres03R.arc" +#else +#define FMAP_RES_PATH "/res/Layout/fmapres.arc" +#define DMAP_RES_PATH "/res/Layout/dmapres.arc" +#define COLLECT_RES_PATH "/res/Layout/clctres.arc" + +#define MSG_COM_PATH "/res/Layout/msgcom.arc" +#define MSG_RES0_PATH "/res/Layout/msgres00.arc" +#define MSG_RES1_PATH "/res/Layout/msgres01.arc" +#define MSG_RES2_PATH "/res/Layout/msgres02.arc" +#define MSG_RES3_PATH "/res/Layout/msgres03.arc" +#endif + +#if PLATFORM_WII || PLATFORM_SHIELD +#define ICON_RES_PATH "/res/WiiBannerIcon/bannerIcon.arc" +#define PARTICLE_COM_PATH "/res/Particle/common-r.jpc" +#else +#define ICON_RES_PATH "/res/CardIcon/cardicon.arc" +#define PARTICLE_COM_PATH "/res/Particle/common.jpc" +#endif + +#if PLATFORM_WII +#define RING_RES_PATH "/res/LayoutRevo/ringresR.arc" +#define ITEM_INF_RES_PATH "/res/LayoutRevo/itmInfResR.arc" +#define BUTTON_RES_PATH "/res/LayoutRevo/buttonR.arc" +#define MAIN2D_PATH "/res/LayoutRevo/main2DR.arc" +#else +#define RING_RES_PATH "/res/Layout/ringres.arc" +#define ITEM_INF_RES_PATH "/res/Layout/itmInfRes.arc" +#define BUTTON_RES_PATH "/res/Layout/button.arc" +#define MAIN2D_PATH "/res/Layout/main2D.arc" +#endif + +class dLog_HIO_c : public JORReflexible { +public: + dLog_HIO_c(); + virtual ~dLog_HIO_c() {} + + void genMessage(JORMContext*); + + u8 field_0x4[0x8 - 0x4]; +}; // Size: 0x8 + +static dLog_HIO_c g_LogHIO; dLog_HIO_c::dLog_HIO_c() {} +#if DEBUG +void dLog_HIO_c::genMessage(JORMContext*) {} +#endif + void dScnLogo_c::preLoad_dyl_create() { m_preLoad_dylPhase = new request_of_phase_process_class[14]; + JUT_ASSERT(194, m_preLoad_dylPhase != NULL); + memset(m_preLoad_dylPhase, 0, sizeof(request_of_phase_process_class) * 14); } @@ -65,15 +133,54 @@ void dScnLogo_c::preLoad_dyl_remove() { delete[] m_preLoad_dylPhase; } +typedef void (dScnLogo_c::*execFunc)(); +static execFunc l_execFunc[] = { + &dScnLogo_c::warningInDraw, &dScnLogo_c::warningDispDraw, &dScnLogo_c::warningOutDraw, + &dScnLogo_c::nintendoInDraw, &dScnLogo_c::nintendoOutDraw, &dScnLogo_c::dolbyInDraw, + &dScnLogo_c::dolbyOutDraw, &dScnLogo_c::dolbyOutDraw2, &dScnLogo_c::progInDraw, + &dScnLogo_c::progSelDraw, &dScnLogo_c::progOutDraw, &dScnLogo_c::progSetDraw, + &dScnLogo_c::progSet2Draw, &dScnLogo_c::progChangeDraw, &dScnLogo_c::dvdWaitDraw, + &dScnLogo_c::nextSceneChange, + + #if PLATFORM_WII || PLATFORM_SHIELD + &dScnLogo_c::strapInDraw, + &dScnLogo_c::strapDispDraw, + &dScnLogo_c::strapOutDraw, + &dScnLogo_c::strapOut2Draw, + #endif + + #if VERSION == VERSION_SHIELD + &dScnLogo_c::mocInDraw, + &dScnLogo_c::mocDispDraw, + &dScnLogo_c::mocOutDraw, + &dScnLogo_c::nvLogoInDraw, + &dScnLogo_c::nvLogoDispDraw, + &dScnLogo_c::nvLogoOutDraw, + #endif +}; + static s16 const l_preLoad_dylKeyTbl[14] = { - 0x02DC, 0x02CE, 0x0221, 0x00F2, 0x021B, 0x02F4, 0x0139, - 0x015A, 0x02E4, 0x00FE, 0x0308, 0x030F, 0x00FF, 0x013F, + PROC_BG, + PROC_DEMO00, + PROC_NBOMB, + PROC_SPINNER, + PROC_Obj_LifeContainer, + PROC_CROD, + PROC_DISAPPEAR, + PROC_Tag_Attp, + PROC_MG_ROD, + PROC_BOOMERANG, + PROC_ARROW, + PROC_SUSPEND, + PROC_MIDNA, + PROC_Obj_Yousei, }; bool dScnLogo_c::preLoad_dyl() { bool ret = true; + int var_r28 = 14; - for (int i = 0; i < 14; i++) { + for (int i = 0; i < var_r28; i++) { int phase_state = cDylPhs::Link(&m_preLoad_dylPhase[i], l_preLoad_dylKeyTbl[i]); if (phase_state != cPhs_COMPLEATE_e) { @@ -84,6 +191,10 @@ bool dScnLogo_c::preLoad_dyl() { return ret; } +#if DEBUG +u8 dScnLogo_c::mOpeningCut; +#endif + void dScnLogo_c::checkProgSelect() { #if VERSION == VERSION_GCN_PAL if (mDoRst::getProgSeqFlag() == 0) { @@ -133,16 +244,34 @@ void dScnLogo_c::progSelDraw() { if (field_0x20b == 0) { if (field_0x209 == 0) { - if (mDoCPd_c::getHoldRight(PAD_1) || mDoCPd_c::getStickX(PAD_1) > 0.5f) { + #if PLATFORM_WII + if (mReCPd::getTrigRight(PAD_1) || mReCPd::getStickX(PAD_1) > 0.5f) + #else + if (mDoCPd_c::getHoldRight(PAD_1) || mDoCPd_c::getStickX(PAD_1) > 0.5f) + #endif + { + #if PLATFORM_WII || PLATFORM_SHIELD + mDoAud_seStart(Z2SE_SY_CURSOR_OPTION, NULL, 0, 0); + #else mDoAud_seStart(Z2SE_SY_MENU_CURSOR_COMMON, NULL, 0, 0); + #endif field_0x209 = 1; field_0x20e = 30; field_0x210 = field_0x20e; field_0x212 = 0; } } else { - if (mDoCPd_c::getHoldLeft(PAD_1) || mDoCPd_c::getStickX(PAD_1) < -0.5f) { + #if PLATFORM_WII + if (mReCPd::getTrigLeft(PAD_1) || mReCPd::getStickX(PAD_1) < -0.5f) + #else + if (mDoCPd_c::getHoldLeft(PAD_1) || mDoCPd_c::getStickX(PAD_1) < -0.5f) + #endif + { + #if PLATFORM_WII || PLATFORM_SHIELD + mDoAud_seStart(Z2SE_SY_CURSOR_OPTION, NULL, 0, 0); + #else mDoAud_seStart(Z2SE_SY_MENU_CURSOR_COMMON, NULL, 0, 0); + #endif field_0x209 = 0; field_0x20e = 30; field_0x210 = field_0x20e; @@ -150,16 +279,40 @@ void dScnLogo_c::progSelDraw() { } } - if (mDoCPd_c::getTrigA(PAD_1) || mTimer == 0) { + #if PLATFORM_WII + if (cAPICPad_A_TRIGGER(PAD_1) || mTimer == 0) + #else + if (mDoCPd_c::getTrigA(PAD_1) || mTimer == 0) + #endif + { if (field_0x209 == 0) { - mProgressiveSel->getPicture()->changeTexture(mProgressivePro, 0); + J2DPicture* pic = mProgressiveSel->getPicture(); + pic->changeTexture(mProgressivePro, 0); + + #if VERSION != VERSION_SHIELD setProgressiveMode(PROGRESSIVE_MODE_ON); + #endif + mDoRst::setProgChgFlag(1); + + #if PLATFORM_WII || PLATFORM_SHIELD + mDoAud_seStart(Z2SE_SY_TALK_WIN_CLOSE, NULL, 0, 0); + #else mDoAud_seStart(Z2SE_SY_CURSOR_OK, NULL, 0, 0); + #endif } else { - mProgressiveSel->getPicture()->changeTexture(mProgressiveInter, 0); + J2DPicture* pic = mProgressiveSel->getPicture(); + pic->changeTexture(mProgressiveInter, 0); + + #if VERSION != VERSION_SHIELD setProgressiveMode(PROGRESSIVE_MODE_OFF); + #endif + + #if PLATFORM_WII || PLATFORM_SHIELD + mDoAud_seStart(Z2SE_SY_CURSOR_CANCEL, NULL, 0, 0); + #else mDoAud_seStart(Z2SE_SY_CURSOR_OK, NULL, 0, 0); + #endif } if (mTimer > 540) { @@ -173,7 +326,12 @@ void dScnLogo_c::progSelDraw() { field_0x210 = field_0x20e; field_0x212 = 0; } + + #if PLATFORM_WII || PLATFORM_SHIELD + mDoRst::setProgSeqFlag(0); + #else mDoRst::setProgSeqFlag(1); + #endif } } else { if (field_0x214 == 0) { @@ -224,13 +382,18 @@ void dScnLogo_c::progOutDraw() { if (mTimer == 0) { #if VERSION == VERSION_GCN_PAL - if (field_0x218 == 1 && field_0x209 == 0) { + if (field_0x218 == 1 && field_0x209 == 0) #else - if (field_0x218 != 0 && field_0x209 == 0) { + if (field_0x218 != 0 && field_0x209 == 0) #endif + { mExecCommand = EXEC_PROG_CHANGE; mTimer = 150; } else if (field_0x218 == 0 && field_0x209 != 0) { + #if PLATFORM_WII || PLATFORM_SHIELD + mTimer = 90; + mExecCommand = EXEC_NINTENDO_IN; + #else if (mDoRst::getWarningDispFlag() != 0) { mTimer = 90; mExecCommand = EXEC_NINTENDO_IN; @@ -238,6 +401,7 @@ void dScnLogo_c::progOutDraw() { mTimer = 120; mExecCommand = EXEC_WARNING_IN; } + #endif mDoGph_gInf_c::startFadeIn(30); } else { @@ -273,11 +437,22 @@ void dScnLogo_c::progSet2Draw() { } void dScnLogo_c::progChangeDraw() { + #if PLATFORM_SHIELD + OSReport("progChangeDraw"); + #endif + if (getProgressiveMode() != 0 && mTimer == 90 && field_0x209 == 0) { setRenderMode(); } if (mTimer == 0) { + #if VERSION == VERSION_SHIELD_DEBUG + mExecCommand = EXEC_STRAP_IN; + mTimer = 0; + #elif PLATFORM_WII || PLATFORM_SHIELD + mExecCommand = EXEC_STRAP_IN; + mTimer = 90; + #else if (mDoRst::getWarningDispFlag() != 0) { mTimer = 90; mExecCommand = EXEC_NINTENDO_IN; @@ -285,6 +460,7 @@ void dScnLogo_c::progChangeDraw() { mTimer = 120; mExecCommand = EXEC_WARNING_IN; } + #endif mDoGph_gInf_c::startFadeIn(30); } @@ -306,12 +482,14 @@ void dScnLogo_c::warningDispDraw() { dComIfGd_set2DOpa(mWarning); dComIfGd_set2DOpa(mWarningStart); - f32 alpha = (f32)field_0x210 / (f32)field_0x20e; + f32 alphaf = (f32)field_0x210 / (f32)field_0x20e; if (field_0x212 != 0) { - alpha = 1.0f - alpha; + alphaf = 1.0f - alphaf; } - mWarningStart->setAlpha(255.0f * alpha); + u8 alpha = 255.0f * alphaf; + mWarningStart->setAlpha(alpha); + if (field_0x210 == 0) { field_0x210 = field_0x20e; field_0x212 ^= 1; @@ -319,10 +497,14 @@ void dScnLogo_c::warningDispDraw() { field_0x210--; } + #if PLATFORM_WII + if (mTimer == 0 || cAPICPad_A_TRIGGER(PAD_1) || cAPICPad_B_TRIGGER(PAD_1) || cAPICPad_START_TRIGGER(PAD_1)) + #else if (mTimer == 0 || mDoCPd_c::getTrig(PAD_1) & (PAD_BUTTON_A | PAD_BUTTON_B | PAD_BUTTON_X | PAD_BUTTON_Y | PAD_BUTTON_START | PAD_TRIGGER_Z | PAD_TRIGGER_L | PAD_TRIGGER_R | PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT | PAD_BUTTON_DOWN | PAD_BUTTON_UP)) + #endif { mExecCommand = EXEC_WARNING_OUT; mTimer = 30; @@ -387,40 +569,208 @@ void dScnLogo_c::dolbyOutDraw2() { } } +#if PLATFORM_WII || PLATFORM_SHIELD +void dScnLogo_c::strapInDraw() { + dComIfGd_set2DOpa(mStrapImg); + if (mTimer == 0) { + mExecCommand = EXEC_STRAP_DISP; + + #if VERSION == VERSION_SHIELD_DEBUG + mTimer = 0; + #elif VERSION == VERSION_SHIELD + mTimer = 60; + #else + mTimer = 840; + #endif + } +} + +void dScnLogo_c::strapDispDraw() { + dComIfGd_set2DOpa(mStrapImg); + + #if VERSION == VERSION_SHIELD_DEBUG + if (mTimer == 0) + #elif VERSION == VERSION_SHIELD + if (mTimer == 0 || cAPICPad_ANY_BUTTON(PAD_1)) + #else + if (mTimer == 0 || mReCPd::getTrig(PAD_1) & ~WPAD_BUTTON_HOME) + #endif + { + mExecCommand = EXEC_DVD_WAIT; + } +} + +void dScnLogo_c::strapOutDraw() { + dComIfGd_set2DOpa(mStrapImg); + if (mTimer == 0) { + #if VERSION == VERSION_SHIELD + mExecCommand = EXEC_NVLOGO_IN; + #else + mExecCommand = EXEC_STRAP_OUT2; + #endif + + mTimer = 30; + mDoGph_gInf_c::startFadeIn(30); + } +} + +void dScnLogo_c::strapOut2Draw() { + if (mTimer == 0) { + mExecCommand = EXEC_SCENE_CHANGE; + } +} +#endif + +#if VERSION == VERSION_SHIELD +void dScnLogo_c::mocInDraw() { + dComIfGd_set2DOpa(mMocImg); + + if (mTimer == 0) { + mExecCommand = EXEC_MOC_DISP; + mTimer = 120; + } +} + +void dScnLogo_c::mocDispDraw() { + dComIfGd_set2DOpa(mMocImg); + + if (mTimer == 0 || cAPICPad_ANY_BUTTON(PAD_1)) { + mExecCommand = EXEC_MOC_OUT; + mTimer = 30; + mDoGph_gInf_c::startFadeOut(30); + } +} + +void dScnLogo_c::mocOutDraw() { + dComIfGd_set2DOpa(mMocImg); + + if (mTimer == 0) { + mExecCommand = EXEC_STRAP_IN; + mTimer = 90; + mDoGph_gInf_c::startFadeIn(30); + } +} + +void dScnLogo_c::nvLogoInDraw() { + dComIfGd_set2DOpa(mNvLogo); + + if (mTimer == 0) { + mExecCommand = EXEC_NVLOGO_DISP; + mTimer = 120; + } +} + +void dScnLogo_c::nvLogoDispDraw() { + dComIfGd_set2DOpa(mNvLogo); + + if (mTimer == 0 || cAPICPad_ANY_BUTTON(PAD_1)) { + mExecCommand = EXEC_NVLOGO_OUT; + mTimer = 30; + mDoGph_gInf_c::startFadeOut(30); + } +} + +void dScnLogo_c::nvLogoOutDraw() { + dComIfGd_set2DOpa(mNvLogo); + + if (mTimer == 0) { + mExecCommand = EXEC_STRAP_OUT2; + mTimer = 30; + mDoGph_gInf_c::startFadeIn(30); + } +} +#endif + void dScnLogo_c::dvdWaitDraw() { + #if PLATFORM_WII || PLATFORM_SHIELD + dComIfGd_set2DOpa(mStrapImg); + #endif + if (!dComIfG_syncAllObjectRes()) { - if (mpField0Command->sync() && mpAlAnmCommand->sync() && mpFmapResCommand->sync() && - mpDmapResCommand->sync() && mpCollectResCommand->sync() && mpItemIconCommand->sync() && - mpRingResCommand->sync() && mpPlayerNameCommand->sync() && - mpItemInfResCommand->sync() && mpButtonCommand->sync() && mpCardIconCommand->sync() && - mpBmgResCommand->sync() && mpMsgComCommand->sync() && mpMsgResCommand[0]->sync() && - mpMsgResCommand[1]->sync() && mpMsgResCommand[2]->sync() && - mpMsgResCommand[3]->sync() && mpMsgResCommand[4]->sync() && - mpMsgResCommand[5]->sync() && mpMsgResCommand[6]->sync() && mpFontResCommand->sync() && - mpMain2DCommand->sync() && mpRubyResCommand->sync() && mParticleCommand->sync() && - mItemTableCommand->sync() && mEnemyItemCommand->sync() && preLoad_dyl()) + if ( + #if PLATFORM_WII || VERSION == VERSION_SHIELD + mpHomeBtnCommand->sync() && + #endif + mpField0Command->sync() + && mpAlAnmCommand->sync() + && mpFmapResCommand->sync() + && mpDmapResCommand->sync() + && mpCollectResCommand->sync() + && mpItemIconCommand->sync() + && mpRingResCommand->sync() + && mpPlayerNameCommand->sync() + && mpItemInfResCommand->sync() + && mpButtonCommand->sync() + && mpCardIconCommand->sync() + && mpBmgResCommand->sync() + && mpMsgComCommand->sync() + && mpMsgResCommand[0]->sync() + && mpMsgResCommand[1]->sync() + && mpMsgResCommand[2]->sync() + && mpMsgResCommand[3]->sync() + && mpMsgResCommand[4]->sync() + && mpMsgResCommand[5]->sync() + && mpMsgResCommand[6]->sync() + && mpFontResCommand->sync() + && mpMain2DCommand->sync() + && mpRubyResCommand->sync() + && mParticleCommand->sync() + && mItemTableCommand->sync() + && mEnemyItemCommand->sync() + && preLoad_dyl()) { mDoRst::setLogoScnFlag(0); + + #if PLATFORM_WII || PLATFORM_SHIELD + mDoRst::setProgSeqFlag(0); + #endif + mDoRst::setProgChgFlag(0); + + #if PLATFORM_WII || PLATFORM_SHIELD + mExecCommand = EXEC_STRAP_OUT; + mTimer = 30; + mDoGph_gInf_c::startFadeOut(30); + #else mExecCommand = EXEC_SCENE_CHANGE; + #endif } } } void dScnLogo_c::nextSceneChange() { if (!mDoRst::isReset()) { - dComIfG_changeOpeningScene(this, PROC_OPENING_SCENE); + if (!isOpeningCut()) + { + dComIfG_changeOpeningScene(this, PROC_OPENING_SCENE); + } else { + #if DEBUG + fopScnM_ChangeReq(this, PROC_MENU_SCENE, 0, 30); + dComIfGs_init(); + dComIfG_playerStatusD(); + return; + #endif + } } } dScnLogo_c::~dScnLogo_c() { if (mDoRst::isReset()) { - if (mDoAud_zelAudio_c::isInitFlag()) { + #if !(PLATFORM_WII || PLATFORM_SHIELD) + if (mDoAud_zelAudio_c::isInitFlag()) + #endif + { Z2AudioMgr::getInterface()->resetProcess(5, true); } + mDoRst_reset(0, 0x80000000, 0); } + #if PLATFORM_WII || PLATFORM_SHIELD + delete mStrapImg; + #endif + + #if !(PLATFORM_WII || PLATFORM_SHIELD) delete mNintendoLogo; delete mWarning; delete mWarningStart; @@ -435,14 +785,41 @@ dScnLogo_c::~dScnLogo_c() { mpPalLogoResCommand->getArchive()->unmount(); mpPalLogoResCommand->destroy(); #endif + #endif + + #if VERSION == VERSION_SHIELD + delete mNvLogo; + delete mMocImg; + #endif preLoad_dyl_remove(); - dComIfG_deleteObjectResMain(LOGO_ARC); - field_0x1d4->destroy(); - field_0x1d0->destroy(); + #if PLATFORM_WII || PLATFORM_SHIELD + switch (getPalLanguage()) { + case 2: + dComIfG_deleteObjectResMain("LogoFrWii"); + break; + case 3: + dComIfG_deleteObjectResMain("LogoSpWii"); + break; + case 0: + default: + dComIfG_deleteObjectResMain("LogoUsWii"); + break; + } + #else + dComIfG_deleteObjectResMain(LOGO_ARC); + #endif + + mLogo01Heap->destroy(); + mLogoHeap->destroy(); JKRFree(dummyGameAlloc); + #if PLATFORM_WII || VERSION == VERSION_SHIELD + dHomeButton_c::create(mHomeBtnRegion, mpHomeBtnCommand->getMemAddress()); + mpHomeBtnCommand->destroy(); + #endif + dComIfGp_particle_createCommon(mParticleCommand->getMemAddress()); dComIfGp_setFieldMapArchive2(mpField0Command->getArchive()); dComIfGp_setAnmArchive(mpAlAnmCommand->getArchive()); @@ -454,7 +831,17 @@ dScnLogo_c::~dScnLogo_c() { dComIfGp_setRingResArchive(mpRingResCommand->getArchive()); dComIfGp_setNameResArchive(mpPlayerNameCommand->getArchive()); dComIfGp_setDemoMsgArchive(mpItemInfResCommand->getArchive()); + dComIfGp_setMeterButtonArchive(mpButtonCommand->getArchive()); + #if DEBUG + JKRArchive* button = mpButtonCommand->getArchive(); + if (button != NULL) { + OS_REPORT("button not nullptr\n"); + } else { + OS_REPORT("button nullptr\n"); + } + #endif + dComIfGp_setErrorResArchive(NULL); dComIfGp_setCardIconResArchive(mpCardIconCommand->getArchive()); dComIfGp_setMsgDtArchive(0, mpBmgResCommand->getArchive()); @@ -485,7 +872,12 @@ dScnLogo_c::~dScnLogo_c() { mpFontResCommand->destroy(); mpMain2DCommand->destroy(); mpRubyResCommand->destroy(); + + #if !PLATFORM_SHIELD mParticleCommand->destroy(); + #else + delete mParticleCommand; + #endif JKRAramHeap* aram_heap = JKRAram::getAramHeap(); u32 free_size = aram_heap->getTotalFreeSize(); @@ -502,15 +894,30 @@ dScnLogo_c::~dScnLogo_c() { #endif dComIfGp_setItemTable(mItemTableCommand->getMemAddress()); + #if !PLATFORM_SHIELD mItemTableCommand->destroy(); + #else + delete mItemTableCommand; + #endif dEnemyItem_c::setItemData((u8*)mEnemyItemCommand->getMemAddress()); + #if !PLATFORM_SHIELD mEnemyItemCommand->destroy(); + #else + delete mEnemyItemCommand; + #endif dDlst_shadowControl_c::setSimpleTex((ResTIMG*)dComIfG_getObjectRes("Always", 0x4A)); + + #if PLATFORM_WII || PLATFORM_SHIELD + dComIfG_inf_c::createBaseCsr(); + #endif + dTres_c::createWork(); dMpath_c::createWork(); + OS_REPORT("\x1b[31m%d gameHeap->getFreeSize %08x(%d)\n\x1b[m", 1479, mDoExt_getGameHeap()->getFreeSize(), mDoExt_getGameHeap()->getFreeSize()); + #if PLATFORM_WII data_8053a730 = 0; #endif @@ -520,10 +927,18 @@ static int phase_0(dScnLogo_c* i_this) { mDoGph_gInf_c::setFadeColor(*(JUtility::TColor*)&g_blackColor); dComIfGp_particle_create(); - i_this->dummyGameAlloc = mDoExt_getGameHeap()->alloc(0x340000, -0x10); + OS_REPORT("\x1b[31m%d gameHeap->getFreeSize %08x(%d)\n\x1b[m", 1497, mDoExt_getGameHeap()->getFreeSize(), mDoExt_getGameHeap()->getFreeSize()); + u32 var_r29 = 0x340000; + u32 var_r28 = 0x130000; + + i_this->dummyGameAlloc = mDoExt_getGameHeap()->alloc(var_r29, -0x10); JUT_ASSERT(1523, i_this->dummyGameAlloc != NULL); - i_this->field_0x1d0 = JKRExpHeap::create(i_this->dummyGameAlloc, 0x340000, NULL, false); - i_this->field_0x1d4 = JKRExpHeap::create(0x130000, i_this->field_0x1d0, false); + + i_this->mLogoHeap = JKRExpHeap::create(i_this->dummyGameAlloc, var_r29, NULL, false); + JUT_ASSERT(1525, i_this->mLogoHeap != NULL); + + i_this->mLogo01Heap = JKRCreateExpHeap(var_r28, i_this->mLogoHeap, false); + JUT_ASSERT(1528, i_this->mLogo01Heap != NULL); #if VERSION == VERSION_GCN_PAL switch (i_this->getPalLanguage()) { @@ -546,6 +961,10 @@ static int phase_0(dScnLogo_c* i_this) { } #endif + #if PLATFORM_WII || PLATFORM_SHIELD + OSSetPowerCallback(mDoRst_shutdownCallBack); + #endif + return cPhs_NEXT_e; } @@ -554,9 +973,11 @@ static int phase_1(dScnLogo_c* i_this) { return cPhs_INIT_e; } + #if !(PLATFORM_WII || PLATFORM_SHIELD) if (!mDoAud_zelAudio_c::isInitFlag() || Z2AudioMgr::getInterface()->checkFirstWaves()) { return cPhs_INIT_e; } + #endif #if VERSION == VERSION_GCN_PAL if (!mDoDvdThd::SyncWidthSound) { @@ -568,8 +989,29 @@ static int phase_1(dScnLogo_c* i_this) { } #endif - dComIfG_setObjectRes(LOGO_ARC, (u8)0, i_this->field_0x1d0); + int rt; + #if PLATFORM_WII || PLATFORM_SHIELD + switch (i_this->getPalLanguage()) { + case 0: + default: + rt = dComIfG_setObjectRes("LogoUsWii", (u8)0, i_this->mLogoHeap); + break; + case 2: + rt = dComIfG_setObjectRes("LogoFrWii", (u8)0, i_this->mLogoHeap); + break; + case 3: + rt = dComIfG_setObjectRes("LogoSpWii", (u8)0, i_this->mLogoHeap); + break; + } + #else + rt = dComIfG_setObjectRes(LOGO_ARC, (u8)0, i_this->mLogoHeap); + #endif + + JUT_ASSERT(1652, rt == 1); + mDoRst::setLogoScnFlag(1); + + OS_REPORT("\x1b[32m%d archiveHeap->getTotalFreeSize %08x\n\x1b[m", 1667, archiveHeap->getTotalFreeSize()); archiveHeap->dump_sort(); return cPhs_NEXT_e; } @@ -599,17 +1041,45 @@ int dScnLogo_c::create() { data_8053a730 = 1; #endif - mpHeap = mDoExt_setCurrentHeap(field_0x1d4); + mpHeap = mDoExt_setCurrentHeap(mLogo01Heap); + + #if PLATFORM_WII || PLATFORM_SHIELD + logoInitWii(); + #else logoInitGC(); - mpHeap->becomeCurrentHeap(); + #endif + + JKRSetCurrentHeap(mpHeap); + + OS_REPORT("\x1b[31m%d gameHeap->getFreeSize %08x(%d)\n\x1b[m", 1732, mDoExt_getGameHeap()->getFreeSize(), mDoExt_getGameHeap()->getFreeSize()); dvdDataLoad(); + + OS_REPORT("\x1b[31m%d gameHeap->getFreeSize %08x(%d)\n\x1b[m", 1738, mDoExt_getGameHeap()->getFreeSize(), mDoExt_getGameHeap()->getFreeSize()); + + #if !(PLATFORM_WII || PLATFORM_SHIELD) Z2AudioMgr::getInterface()->loadStaticWaves(); - mDoGph_gInf_c::setTickRate((OS_BUS_CLOCK / 4) / 60); + #endif + + mDoGph_gInf_c::setTickRate(OS_TIMER_CLOCK / 60); mDoGph_gInf_c::waitBlanking(0); + field_0x20a = 0; + + #if VERSION == VERSION_SHIELD_DEBUG + mExecCommand = EXEC_STRAP_IN; + mTimer = 0; + #elif VERSION == VERSION_SHIELD + mExecCommand = EXEC_MOC_IN; + mTimer = 30; + #elif PLATFORM_WII + mExecCommand = EXEC_STRAP_IN; + mTimer = 90; + #endif + mDoGph_gInf_c::startFadeIn(30); + #if !(PLATFORM_WII || PLATFORM_SHIELD) checkProgSelect(); if (field_0x20a != 0) { mExecCommand = EXEC_PROG_IN; @@ -628,12 +1098,92 @@ int dScnLogo_c::create() { JUTGamePad::clearResetOccurred(); JUTGamePad::setResetCallback(mDoRst_resetCallBack, NULL); + #endif + mDoRst::offReset(); mDoRst::offResetPrepare(); + #if PLATFORM_WII || VERSION == VERSION_SHIELD + dHomeButton_c::lbl_8053A724 = 0; + #endif + return phase_state; } +#if PLATFORM_WII || PLATFORM_SHIELD +void dScnLogo_c::logoInitWii() { + u8 language = getPalLanguage(); + if (language > 5) { + language = 0; + } + + ResTIMG* timg; + s16 width; + s16 height; + if (mDoGph_gInf_c::isWide()) { + switch (language) { + case 0: + default: + timg = (ResTIMG*)dComIfG_getObjectRes("LogoUsWii", dRes_ID_LOGOUSWII_BTI_STRAP_16_9_832X456_US_e); + break; + case 2: + timg = (ResTIMG*)dComIfG_getObjectRes("LogoFrWii", 3); + break; + case 3: + timg = (ResTIMG*)dComIfG_getObjectRes("LogoSpWii", 3); + break; + } + + width = 832; + height = 456; + } else { + switch (language) { + case 0: + default: + timg = (ResTIMG*)dComIfG_getObjectRes("LogoUsWii", dRes_ID_LOGOUSWII_BTI_STRAP_608X456_US_e); + break; + case 2: + timg = (ResTIMG*)dComIfG_getObjectRes("LogoFrWii", 4); + break; + case 3: + timg = (ResTIMG*)dComIfG_getObjectRes("LogoSpWii", 4); + break; + } + + width = 608; + height = 456; + } + + JUT_ASSERT(2309, timg != NULL); + mStrapImg = new dDlst_2D_c(timg, 304 - (width / 2), 224 - (height / 2), width, height, 255); + + #if VERSION == VERSION_SHIELD + timg = (ResTIMG*)dComIfG_getObjectRes("LogoUsWii", 5); + mNvLogo = new dDlst_2D_c(timg, 304 - (width / 2), 224 - (height / 2), width, height, 255); + + timg = (ResTIMG*)dComIfG_getObjectRes("LogoUsWii", 4); + mMocImg = new dDlst_2D_c(timg, 304 - (width / 2), 224 - (height / 2), width, height, 255); + #endif + + OS_REPORT("\x1b[32m%d archiveHeap->getTotalFreeSize %08x\n\x1b[m", 2316, archiveHeap->getTotalFreeSize()); + + JUT_ASSERT(2319, mStrapImg != NULL); + + mNintendoLogo = NULL; + mDolbyLogo = NULL; + mWarning = NULL; + mWarningStart = NULL; + mProgressiveChoice = NULL; + mProgressiveYes = NULL; + mProgressiveNo = NULL; + mProgressivePro = NULL; + mProgressiveInter = NULL; + mProgressiveSel = NULL; + + OS_REPORT("\x1b[32m%d archiveHeap->getTotalFreeSize %08x\n\x1b[m", 2341, archiveHeap->getTotalFreeSize()); + OS_REPORT("%d mLogo01Heap->getTotalFreeSize %08x\n\x1b[m", 2344, mLogo01Heap->getTotalFreeSize()); +} +#else void dScnLogo_c::logoInitGC() { ResTIMG* nintendoImg = (ResTIMG*)dComIfG_getObjectRes(LOGO_ARC, 4); mNintendoLogo = new dDlst_2D_c(nintendoImg, 117, 154, 376, 104, 255); @@ -751,103 +1301,133 @@ void dScnLogo_c::logoInitGC() { mProgressiveSel = new dDlst_2D_c(mProgressivePro, 153, 309, 336, 88, 255); #endif } +#endif void dScnLogo_c::dvdDataLoad() { - dComIfG_setObjectRes("Always", (u8)0, NULL); + int rt; + + #if PLATFORM_WII || VERSION == VERSION_SHIELD + rt = dComIfG_setObjectRes("HomeBtn", (u8)0, NULL); + JUT_ASSERT(__LINE__, rt == 1); + + static const homeBtnData l_homeBtnData[] = { + {SC_LANG_ENGLISH, "/res/HomeBtn/homeBtn_ENG.arc"}, + {SC_LANG_ENGLISH, "/res/HomeBtn/homeBtn_ENG.arc"}, + {SC_LANG_FRENCH, "/res/HomeBtn/homeBtn_FRA.arc"}, + {SC_LANG_SPANISH, "/res/HomeBtn/homeBtn_SPA.arc"}, + {SC_LANG_ENGLISH, "/res/HomeBtn/homeBtn_ENG.arc"}, + {SC_LANG_ENGLISH, "/res/HomeBtn/homeBtn_ENG.arc"}, + {SC_LANG_ENGLISH, "/res/HomeBtn/homeBtn_ENG.arc"}, + }; + + u8 language = getPalLanguage(); + const homeBtnData* data = &l_homeBtnData[language]; + mpHomeBtnCommand = mDoDvdThd_toMainRam_c::create(data->path, 0, NULL); + mHomeBtnRegion = data->region; + #endif + + rt = dComIfG_setObjectRes("Always", (u8)0, NULL); + JUT_ASSERT(2420, rt == 1); + + OS_REPORT("\x1b[32m%d archiveHeap->getTotalFreeSize %08x\n\x1b[m", 2421, archiveHeap->getTotalFreeSize()); archiveHeap->dump_sort(); - dComIfG_setObjectRes("Alink", (u8)0, NULL); + rt = dComIfG_setObjectRes("Alink", (u8)0, NULL); + JUT_ASSERT(2429, rt == 1); - mpField0Command = mDoDvdThd_mountXArchive_c::create( - "/res/FieldMap/Field0.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpAlAnmCommand = - mDoDvdThd_mountXArchive_c::create("/res/Object/AlAnm.arc", 0, JKRArchive::MOUNT_ARAM, NULL); - mpFmapResCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/fmapres.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpDmapResCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/dmapres.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpCollectResCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/clctres.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpItemIconCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/itemicon.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpRingResCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/ringres.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpPlayerNameCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/playerName.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpItemInfResCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/itmInfRes.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpButtonCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/button.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpCardIconCommand = mDoDvdThd_mountXArchive_c::create( - "/res/CardIcon/cardicon.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); + #if PLATFORM_WII || PLATFORM_SHIELD + rt = dComIfG_setObjectRes("NNGC", (u8)0, NULL); + JUT_ASSERT(2433, rt == 1); + #endif + + OS_REPORT("\x1b[32m%d archiveHeap->getTotalFreeSize %08x\n\x1b[m", 2436, archiveHeap->getTotalFreeSize()); + + mpField0Command = aramMount("/res/FieldMap/Field0.arc", mDoExt_getJ2dHeap()); + mpAlAnmCommand = aramMount("/res/Object/AlAnm.arc", NULL); + mpFmapResCommand = aramMount(FMAP_RES_PATH, mDoExt_getJ2dHeap()); + mpDmapResCommand = aramMount(DMAP_RES_PATH, mDoExt_getJ2dHeap()); + mpCollectResCommand = aramMount(COLLECT_RES_PATH, mDoExt_getJ2dHeap()); + mpItemIconCommand = aramMount("/res/Layout/itemicon.arc", mDoExt_getJ2dHeap()); + mpRingResCommand = aramMount(RING_RES_PATH, mDoExt_getJ2dHeap()); + mpPlayerNameCommand = aramMount("/res/Layout/playerName.arc", mDoExt_getJ2dHeap()); + mpItemInfResCommand = aramMount(ITEM_INF_RES_PATH, mDoExt_getJ2dHeap()); + mpButtonCommand = aramMount(BUTTON_RES_PATH, mDoExt_getJ2dHeap()); + mpCardIconCommand = aramMount(ICON_RES_PATH, mDoExt_getJ2dHeap()); #if VERSION == VERSION_GCN_PAL switch (getPalLanguage()) { case 1: - mpBmgResCommand = mDoDvdThd_mountXArchive_c::create("/res/Msgde/bmgres.arc", 0, JKRArchive::MOUNT_MEM, NULL); + mpBmgResCommand = onMemMount("/res/Msgde/bmgres.arc"); break; case 2: - mpBmgResCommand = mDoDvdThd_mountXArchive_c::create("/res/Msgfr/bmgres.arc", 0, JKRArchive::MOUNT_MEM, NULL); + mpBmgResCommand = onMemMount("/res/Msgfr/bmgres.arc"); break; case 3: - mpBmgResCommand = mDoDvdThd_mountXArchive_c::create("/res/Msgsp/bmgres.arc", 0, JKRArchive::MOUNT_MEM, NULL); + mpBmgResCommand = onMemMount("/res/Msgsp/bmgres.arc"); break; case 4: - mpBmgResCommand = mDoDvdThd_mountXArchive_c::create("/res/Msgit/bmgres.arc", 0, JKRArchive::MOUNT_MEM, NULL); + mpBmgResCommand = onMemMount("/res/Msgit/bmgres.arc"); break; case 0: default: - mpBmgResCommand = mDoDvdThd_mountXArchive_c::create("/res/Msguk/bmgres.arc", 0, JKRArchive::MOUNT_MEM, NULL); + mpBmgResCommand = onMemMount("/res/Msguk/bmgres.arc"); + break; + } + #elif VERSION == VERSION_SHIELD_DEBUG + switch (getPalLanguage()) { + case 2: + mpBmgResCommand = onMemMount("/res/Msgfr/bmgres.arc"); + break; + case 3: + mpBmgResCommand = onMemMount("/res/Msgsp/bmgres.arc"); + break; + default: + mpBmgResCommand = onMemMount("/res/Msgus/bmgres.arc"); break; } #else - mpBmgResCommand = mDoDvdThd_mountXArchive_c::create(MSG_PATH, 0, JKRArchive::MOUNT_MEM, NULL); + mpBmgResCommand = onMemMount(MSG_PATH); #endif - mpMsgComCommand = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgcom.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpMsgResCommand[0] = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgres00.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpMsgResCommand[1] = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgres01.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpMsgResCommand[2] = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgres02.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpMsgResCommand[3] = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgres03.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); + mpMsgComCommand = aramMount(MSG_COM_PATH, mDoExt_getJ2dHeap()); + mpMsgResCommand[0] = aramMount(MSG_RES0_PATH, mDoExt_getJ2dHeap()); + mpMsgResCommand[1] = aramMount(MSG_RES1_PATH, mDoExt_getJ2dHeap()); + mpMsgResCommand[2] = aramMount(MSG_RES2_PATH, mDoExt_getJ2dHeap()); + mpMsgResCommand[3] = aramMount(MSG_RES3_PATH, mDoExt_getJ2dHeap()); #if VERSION == VERSION_GCN_JPN - mpMsgResCommand[4] = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgres04.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); + mpMsgResCommand[4] = aramMount("/res/Layout/msgres04.arc", mDoExt_getJ2dHeap()); #else - mpMsgResCommand[4] = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgres04F.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); + mpMsgResCommand[4] = aramMount("/res/Layout/msgres04F.arc", mDoExt_getJ2dHeap()); #endif - mpMsgResCommand[5] = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgres05.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpMsgResCommand[6] = mDoDvdThd_mountXArchive_c::create( - "/res/Layout/msgres06.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap()); - mpMain2DCommand = - mDoDvdThd_mountXArchive_c::create("/res/Layout/main2D.arc", 0, JKRArchive::MOUNT_MEM, NULL); + mpMsgResCommand[5] = aramMount("/res/Layout/msgres05.arc", mDoExt_getJ2dHeap()); + mpMsgResCommand[6] = aramMount("/res/Layout/msgres06.arc", mDoExt_getJ2dHeap()); + + mpMain2DCommand = onMemMount(MAIN2D_PATH); #if VERSION == VERSION_GCN_JPN - mpFontResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fontjp/fontres.arc", 1, - JKRArchive::MOUNT_MEM, NULL); - mpRubyResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fontjp/rubyres.arc", 0, - JKRArchive::MOUNT_MEM, NULL); + mpFontResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fontjp/fontres.arc", 1, JKRArchive::MOUNT_MEM, NULL); + mpRubyResCommand = onMemMount("/res/Fontjp/rubyres.arc"); #elif VERSION == VERSION_GCN_PAL - mpFontResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fonteu/fontres.arc", 0, - JKRArchive::MOUNT_MEM, NULL); - mpRubyResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fonteu/rubyres.arc", 0, - JKRArchive::MOUNT_MEM, NULL); + mpFontResCommand = onMemMount("/res/Fonteu/fontres.arc"); + mpRubyResCommand = onMemMount("/res/Fonteu/rubyres.arc"); +#elif VERSION == VERSION_SHIELD_DEBUG + mpFontResCommand = onMemMount("/res/Fonteu/fontres.arc"); + mpRubyResCommand = onMemMount("/res/Fontus/rubyres.arc"); +#elif VERSION == VERSION_SHIELD + mpFontResCommand = onMemMount("/res/Fontcn/fontres.arc"); + mpRubyResCommand = onMemMount("/res/Fontcn/rubyres.arc"); #else - mpFontResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fontus/fontres.arc", 0, - JKRArchive::MOUNT_MEM, NULL); - mpRubyResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fontus/rubyres.arc", 0, - JKRArchive::MOUNT_MEM, NULL); + mpFontResCommand = onMemMount("/res/Fontus/fontres.arc"); + mpRubyResCommand = onMemMount("/res/Fontus/rubyres.arc"); #endif - mParticleCommand = mDoDvdThd_toMainRam_c::create("/res/Particle/common.jpc", 0, - dComIfGp_particle_getResHeap()); + + mParticleCommand = mDoDvdThd_toMainRam_c::create(PARTICLE_COM_PATH, 0, dComIfGp_particle_getResHeap()); + mItemTableCommand = mDoDvdThd_toMainRam_c::create("/res/ItemTable/item_table.bin", 0, NULL); + JUT_ASSERT(2620, mItemTableCommand != NULL); + mEnemyItemCommand = mDoDvdThd_toMainRam_c::create("/res/ItemTable/enemy_table.bin", 0, NULL); + JUT_ASSERT(2624, mEnemyItemCommand != NULL); preLoad_dyl_create(); preLoad_dyl(); @@ -858,13 +1438,58 @@ static int dScnLogo_Create(scene_class* i_this) { } static int dScnLogo_Execute(dScnLogo_c* i_this) { + fpc_ProcID id = fpcM_GetID(i_this); + if (mDoRst::isReset()) { fopScnM_ChangeReq(i_this, PROC_LOGO_SCENE, 0, 5); } + return 1; } +#if DEBUG +static u8 lbl_8074CA49; +#endif + static int dScnLogo_Draw(dScnLogo_c* i_this) { + #if DEBUG + int x = 36; + int y = 40; + + y += 12; + JUTReport(x, y, "COPYDATE %s", mDoMain::COPYDATE_STRING); + + y += 12; + JUTReport(x, y, "Build by %s", "Authorized User"); + + y += 12; + JUTReport(x, y, "_DEBUG/Debug version"); + + if (!lbl_8074CA49) { + lbl_8074CA49 = 1; + JUTReportConsole_f("COPYDATE %s\n", mDoMain::COPYDATE_STRING); + JUTReportConsole_f("Build by %s\n", "Authorized User"); + JUTReportConsole_f("_DEBUG/Debug version\n"); + JUTReportConsole_f("SDKVersion %s\n", "11Dec2009Patch02"); + + #if PLATFORM_WII || PLATFORM_SHIELD + JUTReportConsole_f("ConsoleSimMem %08x\n", OSGetConsoleSimulatedMem1Size()); + JUTReportConsole_f("PhysicalMemory %08x\n", OSGetPhysicalMem1Size()); + JUTReportConsole_f("ConsoleType %08x\n", OSGetConsoleType()); + JUTReportConsole_f("Language(PAL) %1x\n", SCGetLanguage()); + JUTReportConsole_f("Progressive %1x\n", SCGetProgressiveMode()); + JUTReportConsole_f("SoundMode %1x\n", SCGetSoundMode()); + #else + JUTReportConsole_f("ConsoleSimMem %08x\n", OSGetConsoleSimulatedMemSize()); + JUTReportConsole_f("PhysicalMemory %08x\n", OSGetPhysicalMemSize()); + JUTReportConsole_f("ConsoleType %08x\n", OSGetConsoleType()); + JUTReportConsole_f("Language(PAL) %1x\n", OSGetLanguage()); + JUTReportConsole_f("Progressive %1x\n", OSGetProgressiveMode()); + JUTReportConsole_f("SoundMode %1x\n", OSGetSoundMode()); + #endif + } + #endif + i_this->draw(); return 1; } @@ -878,9 +1503,35 @@ static int dScnLogo_IsDelete(dScnLogo_c* i_this) { return 1; } -#if VERSION == VERSION_GCN_PAL +#if VERSION == VERSION_GCN_PAL || PLATFORM_WII || PLATFORM_SHIELD u8 dScnLogo_c::getPalLanguage() { u8 language; + + #if PLATFORM_WII || PLATFORM_SHIELD + switch (SCGetLanguage()) { + case SC_LANG_JAPANESE: + language = 6; + break; + case SC_LANG_ENGLISH: + language = 0; + break; + case SC_LANG_GERMAN: + language = 1; + break; + case SC_LANG_FRENCH: + language = 2; + break; + case SC_LANG_SPANISH: + language = 3; + break; + case SC_LANG_ITALIAN: + language = 4; + break; + case SC_LANG_DUTCH: + language = 5; + break; + } + #else switch (OSGetLanguage()) { case OS_LANGUAGE_ENGLISH: language = 0; @@ -901,13 +1552,20 @@ u8 dScnLogo_c::getPalLanguage() { language = 5; break; } + #endif return language; } #endif void dScnLogo_c::setProgressiveMode(u8 mode) { - #if VERSION == VERSION_GCN_PAL + #if VERSION == VERSION_SHIELD_DEBUG + return; + #endif + + #if PLATFORM_WII + SCSetProgressiveMode(mode); + #elif VERSION == VERSION_GCN_PAL OSSetEuRgb60Mode(mode); #else OSSetProgressiveMode(mode); @@ -915,6 +1573,10 @@ void dScnLogo_c::setProgressiveMode(u8 mode) { } u8 dScnLogo_c::getProgressiveMode() { + #if PLATFORM_WII || PLATFORM_SHIELD + return SCGetProgressiveMode(); + #endif + #if VERSION == VERSION_GCN_PAL return OSGetEuRgb60Mode(); #else @@ -934,8 +1596,6 @@ void dScnLogo_c::setRenderMode() { mDoMch_render_c::setProgressiveMode(); } -dLog_HIO_c::~dLog_HIO_c() {} - static scene_method_class l_dScnLogo_Method = { (process_method_func)dScnLogo_Create, (process_method_func)dScnLogo_Delete, diff --git a/src/d/d_s_play.cpp b/src/d/d_s_play.cpp index 1e4636c457..4f3c6807f0 100644 --- a/src/d/d_s_play.cpp +++ b/src/d/d_s_play.cpp @@ -26,13 +26,33 @@ #include "m_Do/m_Do_graphic.h" #include "d/actor/d_a_suspend.h" #include "d/actor/d_a_ykgr.h" +#include "JSystem/JHostIO/JORFile.h" +#include "JSystem/JHostIO/JORServer.h" +#include "JSystem/JKernel/JKRExpHeap.h" +#include "JSystem/JFramework/JFWSystem.h" +#include "f_ap/f_ap_game.h" +#include "d/d_bg_parts.h" +#include "f_op/f_op_kankyo_mng.h" +#include "d/actor/d_a_alink.h" +#include "d/actor/d_a_midna.h" +#include "JSystem/JKernel/JKRAram.h" +#include "JSystem/JKernel/JKRAramArchive.h" + +#if DEBUG +#include "d/d_s_menu.h" +#include "d/d_debug_pad.h" +#include "d/d_jpreviewer.h" +#include "d/d_jcam_editor.h" +#include "d/d_a_obj.h" +#include "d/d_debug_viewer.h" +#endif #include #if PLATFORM_WII #include "d/d_cursor_mng.h" #endif -static void dScnPly_Create(scene_class*); +static int dScnPly_Create(scene_class*); static int dScnPly_Delete(dScnPly_c*); static int dScnPly_IsDelete(dScnPly_c); static int dScnPly_Execute(dScnPly_c*); @@ -54,6 +74,10 @@ static request_of_phase_process_class resPhase[1]; static request_of_phase_process_class dylPhase[1]; +#if DEBUG +static OSTime dylPreLoadTime0; +#endif + static OSTime dylPreLoadTime1; static OSTime resPreLoadTime0; @@ -66,6 +90,47 @@ s8 dScnPly_c::pauseTimer; s8 dScnPly_c::nextPauseTimer; +#if DEBUG +u8 dScnPly_c::debugPause; +#endif + +static const s16 T_JOINT_dylKeyTbl[1] = { + PROC_COW, +}; + +static const char* T_JOINT_resName[1] = {"Always"}; + +struct PreLoadInfo { + const char* stageName; + const s16* profNameTbl; + const char** resNameTbl; + u8 dylKeyTblNum; + u8 resNameNum; +}; + +static PreLoadInfo const PreLoadInfoT[1] = { + { + "T_JOINT", + T_JOINT_dylKeyTbl, + T_JOINT_resName, + ARRAY_SIZE(T_JOINT_dylKeyTbl), + ARRAY_SIZE(T_JOINT_resName), + }, +}; + +static s8 preLoadNo = -1; + +static u8 doPreLoad = 1; + +#if DEBUG +void dScnPly_preLoad_HIO_c::genMessage(JORMContext* mctx) { + mctx->startComboBox("プリロード", &doPreLoad); + mctx->genComboBoxItem("しない", 0); + mctx->genComboBoxItem("する", 1); + mctx->endComboBox(); +} +#endif + s8 dScnPly_c::calcPauseTimer() { if (nextPauseTimer != 0) { pauseTimer = nextPauseTimer; @@ -76,19 +141,282 @@ s8 dScnPly_c::calcPauseTimer() { } } -static const s16 T_JOINT_dylKeyTbl[1] = { - 0x0106, -}; +#if DEBUG +dScnPly_reg_childHIO_c::dScnPly_reg_childHIO_c() { + for (int i = 0; i < 30; i++) { + mFloatReg[i] = 0.0f; + } + + for (int i = 0; i < 10; i++) { + mShortReg[i] = 0; + } +} + +void dScnPly_reg_childHIO_c::genMessage(JORMContext* mctx) { + char textbuf[8]; + + for (int i = 0; i < 20; i++) { + sprintf(textbuf, " F(%02d)", i); + mctx->genSlider(textbuf, &mFloatReg[i], -100000.0f, 100000.0f); + } + + for (int i = 20; i < 25; i++) { + sprintf(textbuf, " F(%02d)", i); + mctx->genSlider(textbuf, &mFloatReg[i], 0.0f, 1.0f); + } + + for (int i = 25; i < 30; i++) { + sprintf(textbuf, " F(%02d)", i); + mctx->genSlider(textbuf, &mFloatReg[i], -1.0f, 1.0f); + } + + for (int i = 0; i < 10; i++) { + sprintf(textbuf, " S(%02d)", i); + mctx->genSlider(textbuf, &mShortReg[i], -0x8000, 0x7FFF); + } +} + +void dScnPly_reg_HIO_c::genMessage(JORMContext* mctx) { + static const char l_nodeName[][20] = { + "森田(T)", + "まつたに(D)", + "イワワキ(I)", + "ささ(S)", + "うめみや(U)", + "おがわ(O)", + "坂口(Y)", + "さかい(K)", + "ハラ(B)", + "すみよし(M)", + "(空)-たけした(A)", + "吉田茂樹(P)", + "(空)-のま(N)", + "(空)-にしわき(W)", + "(空)-榊原政郎(J)", + "はやかわ(H)", + "(空)-定本(V)", + "(空)-西川(X)", + "(空)-鈴木(ゆ)(Z)", + "なかにし(n)", + "くわじま(k)", + "おかじま(o)", + "山崎(y)", + "芦田(a)", + "岡田(h)", + "高橋(t)", + }; + + // "Example usage" + mctx->genLabel("使い方例", 0); + mctx->genLabel("R_HS(00-09) ... はやかわレジスタ -32768 - +32767(short)", 0); + mctx->genLabel("R_HF(00-19) ... はやかわレジスタ -100000.0 - +100000.0", 0); + mctx->genLabel("R_HF(20-24) ... はやかわレジスタ 0.0f - 1.0f", 0); + mctx->genLabel("R_HF(25-29) ... はやかわレジスタ -1.0f - 1.0f", 0); + + for (int i = 0; i < 26; i++) { + mctx->genNode(l_nodeName[i], &mChildReg[i], 0, 0); + } +} + +dScnPly_preset_HIO_c::dScnPly_preset_HIO_c() { + field_0x5 = 0; + memset(mPresetData, 0, sizeof(mPresetData)); + memset(filename_buf, 0, sizeof(filename_buf)); + field_0x2716 = 0; + field_0x2717 = 0; +} + +void dScnPly_preset_HIO_c::exePreset() { + JORFile file; + + if (g_presetHIO.filename_buf[0] != 0) { + if (file.open((char*)filename_buf, 1, "", NULL, NULL, NULL)) { + memset(mPresetData, 0, sizeof(mPresetData)); + field_0x2716 = 0; + field_0x2717 = 1; + + file.readData(mPresetData, 0); + file.close(); + + if (dSm_read_stageset(mPresetData)) { + field_0x2717 = 2; + } + } else { + // "\nLoading error loop" + OS_REPORT("\n読み込みしっぱいのまきまき"); + } + + g_presetHIO.filename_buf[0] = 0; + } +} + +void dScnPly_preset_HIO_c::genMessage(JORMContext* mctx) { + // "Load situation file" + mctx->genLabel("【状況ファイルを読みこみ】", 0x80000001); + // "Items and Status can be set in a file" + mctx->genLabel(" アイテムやステータスの状態をファイルで指定することが出来ます。", 0x80000001); + mctx->genLabel("", 0x80000001); + + // "Click here to select a file to load!" + mctx->genButton("ここを押して読込ファイルを指定して下さい!", 0x40000001); + mctx->genLabel("", 0x80000001); + + // "- Loading during gameplay will automatically return you to the debug menu." + mctx->genLabel("・ゲーム中に読み込むと自動的にデバッグメニューへ戻ります。", 0x80000001); + // "- When loading a file from the debug menu," + mctx->genLabel("・デバッグメニューでファイルを読み込んだ際", 0x80000001); + // " if a stage command exists the game will temporarily load then return to the menu." + mctx->genLabel(" stage命令がある場合は一旦ゲームに入りメニューへと戻ります。", 0x80000001); + // " (To position the cursor)" + mctx->genLabel(" (カーソルを合わせる為)", 0x80000001); + mctx->genLabel("", 0x80000001); + + // "Reset state to before loading situation file" + mctx->genButton("状況ファイルを読み込んでいない状態に戻す", 0x40000003); + mctx->genLabel("", 0x80000001); + mctx->genLabel("", 0x80000001); + + // "Click here for the situation file location!" + mctx->genButton("状況ファイルの格納場所はコチラを押下!", 0x40000005); + mctx->genLabel("\\\\10.121.2.9\\zelda$\\JMAP_FOLDER\\situation", 0x80000001); + // "For details about the situation file contents, please refer to Nakamura-san's website" + mctx->genLabel("ファイルの内容については中村さんのHPをご参照ください", 0x80000001); + // "Click here to launch browser and view webpage." + mctx->genButton("ここを押すとブラウザが起動し表示されます。", 0x40000004); + mctx->genLabel("http://www-ead/~nakamuh/gc-zelda_2/misc/spec-situation_file.html", 0x80000001); +} + +void dScnPly_preset_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + JORReflexible::listenPropertyEvent(event); + JORFile file; + + switch ((int)event->id) { + case 0x40000001: + if (file.open(1, "すべてのファイル(*.*)\0*.*", NULL, NULL, NULL)) { + memset(mPresetData, 0, sizeof(mPresetData)); + field_0x2716 = 0; + field_0x2717 = 1; + + file.readData(mPresetData, 0); + file.close(); + + if (dSm_read_stageset(mPresetData)) { + field_0x2717 = 2; + } + } + break; + case 0x40000003: + memset(mPresetData, 0, sizeof(mPresetData)); + break; + case 0x40000004: + JORShellExecute(NULL, "http://www-ead/~nakamuh/gc-zelda_2/misc/spec-situation_file.html", NULL, NULL, 1); + break; + case 0x40000005: + JORShellExecute(NULL, "\\\\10.121.2.9\\zelda$\\ZELDA2_JMAP_FOLDER\\situation", NULL, NULL, 1); + break; + } +} +#endif dScnPly_env_otherHIO_c::dScnPly_env_otherHIO_c() { mShadowDensity = 255.0f; - mAdjustLODBias = 1; - mDisplayTransparentCyl = false; + mAdjustLODBias = TRUE; + mDisplayTransparentCyl = FALSE; + + #if DEBUG + mAdjustCullFar = FALSE; + mCullFarValue = 4000.0f; + mDisplayShadows = TRUE; + mDisplayShadowImage = FALSE; + mDisplayShadowPoly = FALSE; + mDisplayCullBox = FALSE; + mLoadAllRooms = FALSE; + mDepthOfField = TRUE; + + mRailSize = 5.0f; + mRailColorR = 0x50; + mRailColorG = 0x50; + mRailColorB = 0x50; + + field_0x1a = 0xFF; + mDisplayParticleInfo = 0; + field_0x4e = 0; + field_0x4f = 0; + + for (int i = 0; i < 20; i++) { + field_0x1c[i] = -1; + } + #endif } -void dScnPly_env_otherHIO_c::genMessage(JORMContext* ctx) { +void dScnPly_env_otherHIO_c::genMessage(JORMContext* mctx) { + #if DEBUG + mctx->genCheckBox("影表示", &mDisplayShadows, 1); + mctx->genSlider("影濃さ", &mShadowDensity, 0.0f, 255.0f); + mctx->genCheckBox("被写界深度", &mDepthOfField, 1); + mctx->genCheckBox("LODバイアス変更", &mAdjustLODBias, 1); + mctx->genCheckBox("カリングFar変更", &mAdjustCullFar, 1); + mctx->genSlider("カリングFar値", &mCullFarValue, 0.0f, 50000.0f); + mctx->genCheckBox("影イメージ表示", &mDisplayShadowImage, 1); + mctx->genCheckBox("影ポリゴン表示", &mDisplayShadowPoly, 1); + mctx->genCheckBox("透明円柱表示", &mDisplayTransparentCyl, 1); + mctx->genCheckBox("カリングボックス表示", &mDisplayCullBox, 1); + mctx->genCheckBox("パーティクル情報表示", &mDisplayParticleInfo, 1); + mctx->genButton("パーティクル履歴", 0x4000003); + mctx->genCheckBox("全部屋読み込み", &mLoadAllRooms, 1); + mctx->genButton("部屋メモリ", 0x4000001); + mctx->genButton("草、花、低木本数", 0x4000002); + mctx->genSlider("レールサイズ", &mRailSize, 0.0f, 100.0f); + mctx->genSlider("レールカラー(R)", &mRailColorR, 0, 0xff); + mctx->genSlider("レールカラー(G)", &mRailColorG, 0, 0xff); + mctx->genSlider("レールカラー(B)", &mRailColorB, 0, 0xff); + #endif } +#if DEBUG +void dScnPly_env_otherHIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + JORReflexible::listenPropertyEvent(event); + JORFile file; + + switch ((int)event->id) { + case 0x4000001: + OS_REPORT("#############################################\n"); + break; + case 0x4000002: + break; + case 0x4000003: + g_envHIO.mOther.field_0x4e = 1; + break; + } +} + +void dScnPly_env_otherHIO_c::printParticle() { + dDbVw_Report(20, 100, "Emitter Num <%d> X=<%d>", dComIfGp_particle_getEmitterNum(), dComIfGp_particle_getHeapSize()); + dDbVw_Report(20, 120, "Particle Num <%d> Y=<%d>", dComIfGp_particle_getParticleNum(), dComIfGp_particle_getSceneHeapSize() - 0x180000); + + int var_r26 = 0xA0; + int var_r28 = field_0x4f; + if (field_0x4e != 0) { + OS_REPORT("Particle Error !!\n"); + + for (int i = 0; i < 20; i++) { + var_r28--; + if (var_r28 < 0) { + var_r28= 19; + } + + if (field_0x1c[var_r28] != 0xFFFF) { + OS_REPORT(" \n", field_0x1c[var_r28], dPa_name::getName(field_0x1c[var_r28])); + } + + var_r26 += 20; + } + + field_0x4e = 0; + } +} +#endif + dScnPly_env_debugHIO_c::dScnPly_env_debugHIO_c() { mBoxCullMinSize.set(-100.0f, -100.0f, -100.0f); mBoxCullMaxSize.set(100.0f, 100.0f, 100.0f); @@ -96,31 +424,152 @@ dScnPly_env_debugHIO_c::dScnPly_env_debugHIO_c() { mSphereCullRadius = 100.0f; } -void dScnPly_env_debugHIO_c::genMessage(JORMContext* ctx) { +void dScnPly_env_debugHIO_c::genMessage(JORMContext* mctx) { + #if DEBUG + mctx->genLabel("【ボックスカリング(CULLSIZE_DEBUG)サイズ】", 0x80000001); + mctx->genSlider("最小X", &mBoxCullMinSize.x, -10000.0f, 10000.0f); + mctx->genSlider("最小Y", &mBoxCullMinSize.y, -10000.0f, 10000.0f); + mctx->genSlider("最小Z", &mBoxCullMinSize.z, -10000.0f, 10000.0f); + mctx->genSlider("最大X", &mBoxCullMaxSize.x, -10000.0f, 10000.0f); + mctx->genSlider("最大Y", &mBoxCullMaxSize.y, -10000.0f, 10000.0f); + mctx->genSlider("最大Z", &mBoxCullMaxSize.z, -10000.0f, 10000.0f); + + mctx->genLabel("【球カリング(CULLSIZE_Q_DEBUG)サイズ】", 0x80000001); + mctx->genSlider("中心X", &mSphereCullCenter.x, -10000.0f, 10000.0f); + mctx->genSlider("中心Y", &mSphereCullCenter.y, -10000.0f, 10000.0f); + mctx->genSlider("中心Z", &mSphereCullCenter.z, -10000.0f, 10000.0f); + mctx->genSlider("半径", &mSphereCullRadius, -10000.0f, 10000.0f); + #endif } +#if DEBUG +void dScnPly_env_debugHIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + JORReflexible::listenPropertyEvent(event); + + l_cullSizeBox[fopAc_CULLBOX_14_e].min = mBoxCullMinSize; + l_cullSizeBox[fopAc_CULLBOX_14_e].max = mBoxCullMaxSize; + l_cullSizeSphere[fopAc_CULLSPHERE_8_e - fopAc_CULLSPHERE_0_e].center = mSphereCullCenter; + l_cullSizeSphere[fopAc_CULLSPHERE_8_e - fopAc_CULLSPHERE_0_e].radius = mSphereCullRadius; +} + +void dScnPly_env_HIO_c::genMessage(JORMContext* mctx) { + mctx->genNode("デバッグ用", &mDebug, 0, 0); + mctx->genNode("その他", &mOther, 0, 0); +} + +static u32 l_usedMemoryBlockSize = 0xFFFFFFFF; + +static int checkObjectSize(void* i_process, void* i_data) { + s16 profname = fpcM_GetProfName(i_process); + if (profname == PROC_BG) { + fopAc_ac_c* actor = (fopAc_ac_c*)i_process; + *((u32*)i_data) += ((l_usedMemoryBlockSize != 0 && actor->heap == NULL) ? 0 : actor->heap->getHeapSize()) + actor->base.base.profile->process_size; + } else if (profname == PROC_PLAY_SCENE || profname == PROC_ROOM_SCENE) { + *((u32*)i_data) += ((base_process_class*)i_process)->profile->process_size; + } else if (fopKyM_IsKy(i_process)) { + *((u32*)i_data + 1) += ((base_process_class*)i_process)->profile->process_size; + } else if (fopAcM_IsActor(i_process)) { + fopAc_ac_c* actor = (fopAc_ac_c*)i_process; + *((u32*)i_data + 1) += (actor->heap == NULL ? 0 : actor->heap->getHeapSize()) + actor->base.base.profile->process_size; + + if (profname == PROC_ALINK) { + daAlink_c* alink = (daAlink_c*)actor; + *((u32*)i_data + 1) += alink->getOtherHeapSize(); + } else if (profname == PROC_MIDNA) { + daMidna_c* midna = (daMidna_c*)actor; + *((u32*)i_data + 1) += midna->getOtherHeapSize(); + } + } + + return 1; +} + +static void initUsedHeapSize() { + l_usedMemoryBlockSize = 0; + for (int i = 0; i < 19; i++) { + JKRHeap* heap = dStage_roomControl_c::getMemoryBlockHeap(i); + if (heap != NULL) { + l_usedMemoryBlockSize += heap->getHeapSize(); + } + } +} + +static bool lbl_8074CADB; + +static void drawUsedHeapSize() { + if (mDoCPd_c::getHoldL(PAD_3) && mDoCPd_c::getHoldR(PAD_3) && mDoCPd_c::getTrigZ(PAD_3)) { + lbl_8074CADB = !lbl_8074CADB; + } + + if (lbl_8074CADB) { + int gameSize = mDoExt_getSafeGameHeapSize() - mDoExt_getGameHeap()->getTotalFreeSize(); + int zeldaSize = mDoExt_getSafeZeldaHeapSize() - mDoExt_getZeldaHeap()->getTotalFreeSize(); + int archiveSize = mDoExt_getSafeArchiveHeapSize() - mDoExt_getArchiveHeap()->getTotalFreeSize(); + int j2dSize = mDoExt_getSafeJ2dHeapSize() - mDoExt_getJ2dHeap()->getTotalFreeSize(); + + u32 sizes[2]; + sizes[0] = dComIfG_getStageAllSize(); + sizes[1] = dComIfG_getObjectAllSize() - (dComIfG_getObjectSize("CamParam") + + dComIfG_getObjectSize("Event") + + dComIfG_getObjectSize("Always") + + dComIfG_getObjectSize("Alink") + + dComIfG_getObjectSize("Midna")); + + fpcLyIt_All(checkObjectSize, sizes); + if (l_usedMemoryBlockSize != 0) { + sizes[0] = l_usedMemoryBlockSize + dComIfG_getStageSize("Stg_00") + dComIfG_getStageSize("Xtg_00"); + } + + int var_r25 = JKRGetAramFreeSize() / 1024; + JUTReport(380, 300, "Stage : %d(K)", (sizes[0] + 0x3FF) / 1024); + JUTReport(380, 316, "Obj : %d(K)", (sizes[1] + 0x3FF) / 1024); + JUTReport(380, 332, "C-ARAM : %d(K)", var_r25); + JUTReport(380, 348, ">Game : %d(K)", (gameSize + 0x3FF) / 1024); + JUTReport(380, 364, ">Zelda : %d(K)", (zeldaSize + 0x3FF) / 1024); + JUTReport(380, 380, ">Archive : %d(K)", (archiveSize + 0x3FF) / 1024); + JUTReport(380, 380, ">J2d : %d(K)", (j2dSize + 0x3FF) / 1024); + } +} +#endif + static int dScnPly_Draw(dScnPly_c* i_this) { static s16 l_wipeType[] = { - 0x0000, 0x0000, 0x0011, 0x0002, 0x0002, 0x0001, 0x0003, 0x0001, 0x0004, 0x0004, 0x0005, 0x0005, - 0x0006, 0x0007, 0x0000, 0x0000, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0008, 0x0008, + 0, 0, 17, 2, 2, 1, 3, 1, 4, 4, 5, 5, 6, 7, 0, 0, 2, 2, 2, 2, 2, 8, 8, }; + #if DEBUG + fapGm_HIO_c::startCpuTimer(); + fpc_ProcID id = fpcM_GetID(i_this); + drawUsedHeapSize(); + dStage_DebugDisp(); + #endif + dComIfG_Ccsp()->Move(); dComIfG_Bgsp().ClrMoveFlag(); - u8 useWhiteColor; if (!fopOvlpM_IsPeek() && !dComIfG_resetToOpening(i_this)) { - if (dComIfGp_isEnableNextStage()) { + if (dComIfGp_isEnableNextStage() + #if DEBUG + && !dScnMenu_c::isAutoSelect() + #endif + ) { + JUT_ASSERT(1019, dComIfGp_getNextStageWipe() < ARRAY_SIZEU(l_wipeType)); + u8 wipe = dComIfGp_getNextStageWipe(); - fopScnM_ChangeReq(i_this, PROC_PLAY_SCENE, l_wipeType[wipe], 5); + #if DEBUG + if (g_kankyoHIO.navy.wipe_test_ON != 0xFF) { + wipe = g_kankyoHIO.navy.wipe_test_ON; + } + #endif + + int rt = fopScnM_ChangeReq(i_this, PROC_PLAY_SCENE, l_wipeType[wipe], 5); int hour = dKy_getdaytime_hour(); - useWhiteColor = hour >= 6 && hour < 18 ? true : false; - BOOL tmp = useWhiteColor == 0 ? 1 : 0; + BOOL isDaytime = (hour >= 6 && hour < 18) ? FALSE : TRUE; if (wipe == 1 || wipe == 2 || wipe == 7 || wipe == 17 || wipe == 21 || - ((wipe == 8 || wipe == 10 || wipe == 18) && tmp) || - ((wipe == 9 || wipe == 11 || wipe == 19) && !tmp)) + ((wipe == 8 || wipe == 10 || wipe == 18) && isDaytime) || + ((wipe == 9 || wipe == 11 || wipe == 19) && !isDaytime)) { mDoGph_gInf_c::setFadeColor(*(JUtility::TColor*)&g_saftyWhiteColor); } else if (wipe == 14 || wipe == 20) { @@ -136,42 +585,142 @@ static int dScnPly_Draw(dScnPly_c* i_this) { } } } + dMdl_mng_c::reset(); - if (!dComIfGp_isPauseFlag() && dScnPly_c::pauseTimer == 0) { + if (!dComIfGp_isPauseFlag() && !dScnPly_c::isPause() + #if DEBUG + && !fapGm_HIO_c::isCaptureScreen() + #endif + ) { if (fpcM_GetName(i_this) == PROC_PLAY_SCENE) { dComIfGp_getVibration().Run(); } daSus_c::execute(); dComIfG_Bgsp().Move(); + #if VERSION == VERSION_SHIELD_DEBUG + dPath_Move(); + #endif dComIfGp_particle_calc3D(); dComIfGp_particle_calc2D(); cCt_execCounter(); } else { dPa_control_c::onStatus(1); - if (dScnPly_c::pauseTimer == 0) { + + if (!dScnPly_c::isPause()) { dPa_control_c::onStatus(2); } + if (dScnPly_c::pauseTimer == 0) { dComIfGp_getVibration().Pause(); } } - for (create_tag_class* i = fopDwIt_Begin(); i != NULL; i = fopDwIt_Next(i)) { - fpcM_Draw(i->mpTagData); + #if DEBUG + if (fopOvlpM_IsDoingReq() != TRUE) { + if (dScnMenu_c::isAutoSelect() || dComIfG_isSceneResetButton() || g_presetHIO.field_0x2717 != 0) { + if (g_presetHIO.field_0x2717 != 0) { + dSm_read_stageset(g_presetHIO.mPresetData); + g_presetHIO.field_0x2717 = 0; + } + + s16 spA = 0; + if (dDemo_c::getMode() == 1) { + dDemo_c::end(); + spA = 7; + } + + fopScnM_ChangeReq(i_this, PROC_MENU_SCENE, spA, 5); + mDoAud_bgmStop(30); + + if (fpcM_GetName(i_this) != PROC_PLAY_SCENE) { + dComIfG_playerStatusD(); + } + } } + dDebugPad.Update(); + + fapGm_HIO_c::printCpuTimer(""); + fapGm_HIO_c::stopCpuTimer("ゲーム管理(計算処理2)"); + fapGm_HIO_c::printCpuTimer(""); + #endif + + for (create_tag_class* i = fopDwIt_Begin(); i != NULL; i = fopDwIt_Next(i)) { + void* process = i->mpTagData; + fpcM_Draw(process); + } + + #if DEBUG + fapGm_HIO_c::startCpuTimer(); + #endif + if (!dComIfGp_isPauseFlag()) { dEyeHL_mng_c::update(); + + #if VERSION == VERSION_SHIELD_DEBUG + dBgp_c::drawShare(); + #endif + #if DEBUG + daSus_c::draw(); + #endif + dComIfG_Ccsp()->Draw(); - dComIfGp_getAttention()->Draw(); + #if DEBUG + dComIfG_Bgsp().Draw(); + dPath_Draw(); + #endif + + dAttention_c* attention = dComIfGp_getAttention(); + attention->Draw(); } + #if DEBUG + if (g_envHIO.mOther.mDisplayParticleInfo) { + g_envHIO.mOther.printParticle(); + } + + fapGm_HIO_c::printCpuTimer(""); + fapGm_HIO_c::stopCpuTimer("ゲーム管理(描画処理)"); + #endif + return 1; } +#if DEBUG +static BOOL l_pause; +static f32 l_pauseFrame; +static u8 lbl_8074CAE4; +static u32 l_sceneChangeStartTick; +#endif + static int dScnPly_Execute(dScnPly_c* i_this) { + #if DEBUG + fapGm_HIO_c::startCpuTimer(); + #endif + i_this->offReset(); + + #if DEBUG + if (lbl_8074CAE4) { + u32 var_r27 = OSGetTick() - l_sceneChangeStartTick; + OS_REPORT("\x1b[33m"); + // "Scene transition time: %f seconds\n" + OS_REPORT("シーン切り替え時間 %f秒\n\x1B[m", (f32)OSTicksToMicroseconds(var_r27) / 1000000.0f); + lbl_8074CAE4 = 0; + + initUsedHeapSize(); + OS_REPORT("Game Heap <%d,%d,%d>\n", mDoExt_getGameHeap()->getTotalUsedSize(), mDoExt_getGameHeap()->getTotalFreeSize(), mDoExt_getGameHeap()->getFreeSize()); + OS_REPORT("Zelda Heap <%d,%d,%d>\n", mDoExt_getZeldaHeap()->getTotalUsedSize(), mDoExt_getZeldaHeap()->getTotalFreeSize(), mDoExt_getZeldaHeap()->getFreeSize()); + OS_REPORT("Archive Heap <%d,%d,%d>\n", mDoExt_getArchiveHeap()->getTotalUsedSize(), mDoExt_getArchiveHeap()->getTotalFreeSize(), mDoExt_getArchiveHeap()->getFreeSize()); + OS_REPORT("最終残り %d(%fM)\n", JFWSystem::getRootHeap()->getTotalFreeSize(), (f32)JFWSystem::getRootHeap()->getTotalFreeSize() / (f32)0x100000); + OS_REPORT("拡張最終残り %d(%fM)\n", JKRGetRootHeap2()->getTotalFreeSize(), (f32)JKRGetRootHeap2()->getTotalFreeSize() / (f32)0x100000); + OS_REPORT("\x1b[m"); + } + #endif + + BOOL comboTrig = FALSE; + dStage_roomControl_c::offNoChangeRoom(); dStage_roomControl_c::setRoomReadId(0xFF); @@ -188,11 +737,63 @@ static int dScnPly_Execute(dScnPly_c* i_this) { } dKy_itudemo_se(); + + #if DEBUG + if (mDoCPd_c::isConnect(PAD_3)) { + if (mDoCPd_c::getTrigStart(PAD_1) && !fapGmHIO_get2Ddraw()) { + comboTrig = TRUE; + } else if (mDoCPd_c::getHoldR(PAD_2) && mDoCPd_c::getTrigStart(PAD_2)) { + comboTrig = TRUE; + } + + if (comboTrig == TRUE) { + if (l_pause) { + l_pause = FALSE; + } else { + l_pause = TRUE; + l_pauseFrame = 0.0f; + } + } + + if (l_pause) { + l_pauseFrame += mDoCPd_c::getAnalogR(PAD_2); + if (!mDoCPd_c::getTrigZ(PAD_2) && l_pauseFrame < 1.0f) { + i_this->onDebugPause(); + return 1; + } + + l_pauseFrame -= 1.0f; + } + + i_this->offDebugPause(); + } + #endif + if (!dComIfGp_isPauseFlag()) { + #if DEBUG + dJprev_c::get()->update(); + #endif + dDemo_c::update(); + + #if DEBUG + dJcame_c::get()->update(); + #endif + + #if VERSION == VERSION_SHIELD_DEBUG + dBgp_c::executeShare(); + #endif + dComIfGp_getEvent()->Step(); dComIfGp_getAttention()->Run(); } + + #if DEBUG + fapGm_HIO_c::printCpuTimer(""); + fapGm_HIO_c::stopCpuTimer("ゲーム管理(計算処理1)"); + fapGm_HIO_c::printCpuTimer(""); + #endif + return 1; } @@ -201,40 +802,34 @@ static int dScnPly_IsDelete(dScnPly_c i_this) { return 1; } -struct PreLoadInfo { - const char* stageName; - const s16* profNameTbl; - const char** resNameTbl; - u8 dylKeyTblNum; - u8 resNameNum; -}; - -static const char* T_JOINT_resName[1] = {"Always"}; - -static PreLoadInfo const PreLoadInfoT[1] = { - { - "T_JOINT", - T_JOINT_dylKeyTbl, - T_JOINT_resName, - 1, - 1, - }, -}; - -static s8 preLoadNo = -1; - -static u8 doPreLoad = 1; - static int dScnPly_Delete(dScnPly_c* i_this) { + UNUSED(i_this); + + #if VERSION == VERSION_SHIELD_DEBUG + for (int i = 0; i < 32; i++) { + char* bank = dStage_roomControl_c::getArcBank(i); + if (strcmp(bank, "") != 0) { + int rt = dComIfG_syncObjectRes(bank); + if (rt > 0) { + return 0; + } + } + } + #endif + daSus_c::reset(); dMpath_c::remove(); dTres_c::remove(); - dComIfGp_getAttention()->~dAttention_c(); + dAttention_c* attention = dComIfGp_getAttention(); + attention->~dAttention_c(); dComIfGp_getVibration().Remove(); dComIfG_Bgsp().Dt(); dComIfG_Ccsp()->Dt(); + #if VERSION == VERSION_SHIELD_DEBUG + dPath_Dt(); + #endif dStage_Delete(); dComIfGp_event_remove(); @@ -244,6 +839,11 @@ static int dScnPly_Delete(dScnPly_c* i_this) { dComIfGp_getMsgDtArchive(1)->removeResourceAll(); JKRUnmountArchive(dComIfGp_getMsgDtArchive(1)); + #if DEBUG + dJcame_c::remove(); + dJprev_c::remove(); + #endif + dDemo_c::remove(); fopMsgM_destroyExpHeap(dComIfGp_getExpHeap2D()); @@ -256,11 +856,25 @@ static int dScnPly_Delete(dScnPly_c* i_this) { mDoGph_gInf_c::getBloom()->remove(); + #if VERSION == VERSION_SHIELD_DEBUG + dBgp_c::removeShare(); + #endif + dComIfGs_offPlayerFieldLastStayFieldDataExistFlag(); + + #if DEBUG + daObj::HioObj_c::clean(); + mDoHIO_deleteChild(g_envHIO.field_0x4); + mDoHIO_deleteChild(g_save_bit_HIO.field_0x4); + g_preLoadHIO.removeHIO(); + #endif + dComIfGp_setWindowNum(0); dComIfGd_setView(NULL); if (preLoadNo >= 0) { + OS_REPORT("\x1b[32mプリロード解放\n\x1b[m"); + const char** resname_table = PreLoadInfoT[preLoadNo].resNameTbl; int res_num = PreLoadInfoT[preLoadNo].resNameNum; if (resname_table != NULL && (*resname_table != NULL)) { @@ -288,6 +902,113 @@ static int dScnPly_Delete(dScnPly_c* i_this) { return 1; } +#if DEBUG +static u32 getArchiveHeapSize(JKRHeap* i_heap, dRes_info_c* i_resInfo) { + if (i_resInfo == NULL) { + return 0; + } + + u32 size = 0; + int var_r29; + JKRArchive* archive = i_resInfo->getArchive(); + if (archive != NULL) { + var_r29 = i_heap->getSize(archive); + if (var_r29 > 0) { + size += var_r29 + 0x10; + } + + var_r29 = i_heap->getSize(((JKRAramArchive*)archive)->mBlock); + if (var_r29 > 0) { + size += var_r29 + 0x10; + } + } + + JKRSolidHeap* dataHeap = i_resInfo->getDataHeap(); + if (dataHeap != NULL) { + int var_r26 = i_heap->getSize(dataHeap); + if (var_r26 > 0) { + size += var_r26 + 0x10; + } + } + + return size; +} + +static u32 getArchiveBankHeapSize(JKRHeap* i_heap) { + u32 size = 0; + for (int i = 0; i < 32; i++) { + char* bank = dStage_roomControl_c::getArcBank(i); + if (strcmp(bank, "") != 0) { + size += getArchiveHeapSize(i_heap, dComIfG_getObjectResInfo(bank)); + } + } + + return size; +} + +static u32 getStageHeapSize(JKRHeap* i_heap) { + u32 size = 0; + for (int i = 0; i < 19; i++) { + JKRHeap* heap = dStage_roomControl_c::getMemoryBlockHeap(i); + if (heap != NULL) { + int var_r26 = i_heap->getSize(heap); + if (var_r26 > 0) { + size += var_r26 + 0x10; + } + } + } + + if (size == 0) { + for (int i = 0; i < 64; i++) { + size += getArchiveHeapSize(i_heap, dComIfG_getStageResInfo(dComIfG_getRoomArcName(i))); + } + } + + size += getArchiveHeapSize(i_heap, dComIfG_getStageResInfo("Stg_00")) + getArchiveHeapSize(i_heap, dComIfG_getStageResInfo("Xtg_00")); + return size; +} + +static BOOL heapSizeCheck(const char* i_label, JKRExpHeap* i_heap, s32 i_base, BOOL param_3) { + s32 free = i_heap->getFreeSize(); + s32 total = i_heap->getTotalUsedSize(); + + if (param_3) { + total -= getArchiveBankHeapSize(i_heap); + total -= getStageHeapSize(i_heap); + } + + s32 archiveHeapSize = mDoExt_getSafeArchiveHeapSize(); + f32 totalRatio = (f32)total / (f32)archiveHeapSize; + f32 freeRatio = (f32)free / (f32)total; + OS_REPORT("%s Free<%d> Total<%d> Base<%d> TotalRatio<%f> FreeRatio<%f>\n", + i_label, + free, + total, + i_base, + totalRatio, + freeRatio + ); + + int var_r30 = std::abs(total - i_base); + if (var_r30 > 64) { + // "%d (0x%x) byte difference!\n" + OS_REPORT("%d (0x%x) バイトの差があります!\n", var_r30, var_r30); + i_heap->dump(); + return FALSE; + } + + return TRUE; +} + +static BOOL heapSizeCheck() { + return heapSizeCheck("ArchiveHeap", mDoExt_getArchiveHeap(), mDoExt_getSafeArchiveHeapSize(), TRUE) + && heapSizeCheck("J2dHeap", mDoExt_getJ2dHeap(), mDoExt_getSafeJ2dHeapSize(), FALSE) + && heapSizeCheck("GameHeap", mDoExt_getGameHeap(), mDoExt_getSafeGameHeapSize(), TRUE) + && heapSizeCheck("ZeldaHeap", mDoExt_getZeldaHeap(), mDoExt_getSafeZeldaHeapSize(), FALSE) + && heapSizeCheck("CommandHeap", mDoExt_getCommandHeap(), mDoExt_getSafeCommandHeapSize(), FALSE); +} +#endif + bool dScnPly_c::resetGame() { if (fpcM_GetName(this) == PROC_OPENING_SCENE) { if (!dStage_roomControl_c::resetArchiveBank(0)) { @@ -302,6 +1023,7 @@ bool dScnPly_c::resetGame() { field_0x1d4 = 1; } } else { + #if VERSION != VERSION_SHIELD_DEBUG if (dComIfGp_getNextStagePoint() == -4 || (dComIfGs_getLastSceneMode() & 0xF) == 0xC || !strcmp(dComIfGp_getNextStageName(), "F_SP109") || (!strcmp(dComIfGp_getNextStageName(), "F_SP116") && @@ -311,6 +1033,7 @@ bool dScnPly_c::resetGame() { return false; } } + #endif } dComIfG_setBrightness(255); @@ -323,8 +1046,10 @@ void dScnPly_c::offReset() { if (field_0x1d4 != 0 && !fopOvlpM_IsPeek()) { mDoRst::offReset(); mDoRst::offResetPrepare(); + #if VERSION != VERSION_SHIELD_DEBUG JUTGamePad::C3ButtonReset::sResetOccurred = false; JUTGamePad::setResetCallback(mDoRst_resetCallBack, NULL); + #endif field_0x1d4 = 0; } } @@ -332,14 +1057,35 @@ void dScnPly_c::offReset() { static int phase_00(dScnPly_c* i_this) { if (!i_this->resetGame()) { return cPhs_INIT_e; - } else { - #if PLATFORM_WII - data_8053a730 = 1; - #endif - - mDoGph_gInf_c::offBlure(); - return cPhs_NEXT_e; } + + #if PLATFORM_WII + data_8053a730 = 1; + #endif + + #if DEBUG + l_sceneChangeStartTick = OSGetTick(); + lbl_8074CAE4 = 1; + + mDoExt_setSafeGameHeapSize(); + mDoExt_setSafeZeldaHeapSize(); + mDoExt_setSafeCommandHeapSize(); + mDoExt_setSafeArchiveHeapSize(); + mDoExt_setSafeJ2dHeapSize(); + #endif + + mDoGph_gInf_c::offBlure(); + + #if DEBUG + if (!heapSizeCheck()) { + BOOL isDispWarning = mDoCPd_c::isConnect(PAD_3); + if (isDispWarning) { + JUT_WARN(2046, "%s", "Memory Danger !!"); + } + } + #endif + + return cPhs_NEXT_e; } static int phase_01(dScnPly_c* i_this) { @@ -353,6 +1099,7 @@ static int phase_01(dScnPly_c* i_this) { mDoAud_setInDarkness(false); } + mDoAud_setSceneName(dComIfGp_getStartStageName(), dComIfGp_getStartStageRoomNo(), dComIfG_play_c::getLayerNo_common(dComIfGp_getStartStageName(), dComIfGp_getStartStageRoomNo(), @@ -370,19 +1117,17 @@ static int phase_0(dScnPly_c* i_this) { } static int phase_1(dScnPly_c* i_this) { - u32 id = fopScnM_GetID(i_this); - dStage_roomControl_c::setProcID(id); + dStage_roomControl_c::setProcID(fopScnM_GetID(i_this)); dComIfGp_setStartStage(dComIfGp_getNextStartStage()); if (dComIfGp_getStartStageLayer() < 0 && daPy_py_c::checkRoomRestartStart()) { - const char* stage = dComIfGp_getStartStageName(); - s8 room = dComIfGp_getStartStageRoomNo(); - s8 layer = dComIfGp_getStartStageLayer(); - if (dComIfG_play_c::getLayerNo_common_common(stage, room, layer) < 0) { + int layer = dComIfG_play_c::getLayerNo_common_common(dComIfGp_getStartStageName(), dComIfGp_getStartStageRoomNo(), dComIfGp_getStartStageLayer()); + if (layer < 0) { dComIfGp_setStartStageLayer(dComIfGp_getLayerOld()); } } + dComIfGp_offEnableNextStage(); // Stage: Faron Woods, Room: Faron Spring @@ -431,14 +1176,32 @@ static int phase_1(dScnPly_c* i_this) { dComIfGp_world_dark_set(0); } + #if DEBUG + if (dKy_darkworld_check()) { + if (dComIfGp_getStartStageLayer() != -1 && dComIfGp_getStartStageLayer() < 10 && dComIfG_play_c::getLayerNo(0) < 10) { + if (strcmp(dComIfGp_getStartStageName(), "D_MN08") != 0) { + // "Twilight layer spec error! sasaki" + OSReport_Error("\nトワイライトのレイヤー指定異常です! sasaki"); + // "(If loaded from the debug menu, you can directly specify layers, so I can't tell if it's invalid.)" + OSReport_Error("\n(デバグメニューからの場合はレイヤー直指定できるので危険なのかは予測つきません。)"); + + OSReport_Error("\nstage[%s]", dComIfGp_getStartStageName()); + OSReport_Error("\nroom[%d]", dComIfGp_getStartStageRoomNo()); + OSReport_Error("\nlayer[%d]", dComIfG_play_c::getLayerNo(0)); + OSReport_Error("\nTW1[%d]", dComIfGs_isDarkClearLV(0)); + OSReport_Error("\nTW2[%d]", dComIfGs_isDarkClearLV(1)); + OSReport_Error("\nTW3[%d]", dComIfGs_isDarkClearLV(2)); + OSReport_Error("\nTW4[%d]", dComIfGs_isDarkClearLV(3)); + } + } + } + #endif + // Stage: Lake Hylia, Room: Fountain if (!strcmp(dComIfGp_getStartStageName(), "F_SP115") && dComIfGp_getStartStageRoomNo() == 1 && dComIfGp_getStartStageLayer() < 0) { - const char* stage = dComIfGp_getStartStageName(); - s8 room = dComIfGp_getStartStageRoomNo(); - s8 layer = dComIfGp_getStartStageLayer(); - if (dComIfG_play_c::getLayerNo_common(stage, room, layer) == 9) { + if (dComIfG_play_c::getLayerNo_common(dComIfGp_getStartStageName(), dComIfGp_getStartStageRoomNo(), dComIfGp_getStartStageLayer()) == 9) { dComIfGp_setStartStageLayer(9); } } @@ -467,6 +1230,14 @@ static int phase_1(dScnPly_c* i_this) { dComIfGs_onSaveDunSwitch(30); } + #if DEBUG + if (!strcmp(dComIfGp_getStartStageName(), "NPC_GND") && dComIfGp_getStartStageRoomNo() == 0 && + dComIfGp_getStartStageLayer() >= 12) + { + dComIfGp_world_dark_set(1); + } + #endif + dKy_darkworld_Area_set(dComIfGp_getStartStageName(), dComIfGp_getStartStageRoomNo()); // Stage: Hyrule Castle Sewers, Room: Prison Cell @@ -507,21 +1278,36 @@ static int phase_1(dScnPly_c* i_this) { } dComIfGs_BossLife_public_Set(0xFF); + + #if DEBUG + if (g_env_light.light_mask_type & 0xF0) { + g_env_light.light_mask_type = g_env_light.light_mask_type & 0xF; + } else { + g_env_light.light_mask_type = 0; + } + #else g_env_light.light_mask_type = 0; + #endif JUTReportConsole_f("Start StageName:RoomNo [%s:%d]\n", dComIfGp_getStartStageName(), dComIfGp_getStartStageRoomNo()); dComIfGp_setStatus(0); + if (dComIfG_syncStageRes("Stg_00") < 0) { - dComIfG_setStageRes("Stg_00", NULL); + int rt = dComIfG_setStageRes("Stg_00", NULL); + JUT_ASSERT(2442, rt == 1); } + return cPhs_NEXT_e; } static int phase_1_0(dScnPly_c* i_this) { static char camparamarc[10] = "CamParam"; - if (dComIfG_syncStageRes("Stg_00")) { + int rt = dComIfG_syncStageRes("Stg_00"); + JUT_ASSERT(2469, rt >= 0); + + if (rt != 0) { return cPhs_INIT_e; } else { dStage_infoCreate(); @@ -533,8 +1319,8 @@ static int phase_1_0(dScnPly_c* i_this) { } static int phase_2(dScnPly_c* i_this) { - int tmp = dComIfG_syncAllObjectRes(); - if (tmp >= 0 && tmp != 0) { + int rt = dComIfG_syncAllObjectRes(); + if (rt >= 0 && rt != 0) { return cPhs_INIT_e; } @@ -544,6 +1330,13 @@ static int phase_2(dScnPly_c* i_this) { particle_no = dStage_stagInfo_GetParticleNo(dComIfGp_getStage()->getStagInfo()); } + #if DEBUG + if (fapGm_HIO_c::mParticle254Fix) { + particle_no = 0xFE; + } + #endif + + OS_REPORT("============== sceneParticleNo=%d\n", particle_no); dComIfGp_particle_readScene(particle_no, &i_this->sceneCommand); dMsgObject_readMessageGroup(&i_this->field_0x1d0); return cPhs_NEXT_e; @@ -558,6 +1351,10 @@ static int phase_3(dScnPly_c* i_this) { return cPhs_INIT_e; } + #if VERSION == VERSION_SHIELD_DEBUG + dBgp_c::createShare(); + #endif + return cPhs_NEXT_e; } @@ -570,9 +1367,16 @@ dScnPly_preset_HIO_c g_presetHIO; #endif static int phase_4(dScnPly_c* i_this) { + #if VERSION == VERSION_SHIELD_DEBUG + if (!dBgp_c::executeShare()) { + return cPhs_INIT_e; + } + #endif + if (i_this->sceneCommand) { + JUT_ASSERT(2610, i_this->sceneCommand->getMemAddress() != NULL); dComIfGp_particle_createScene(i_this->sceneCommand->getMemAddress()); - i_this->sceneCommand->destroy(); + delete i_this->sceneCommand; } else { dComIfGp_particle_createScene(NULL); } @@ -583,13 +1387,25 @@ static int phase_4(dScnPly_c* i_this) { } dComIfGp_calcNowRegion(); + #if DEBUG + dComIfG_initStopwatch(); + #endif dComIfG_Bgsp().Ct(); fopAcM_lc_c::getLineCheck()->ClearPi(); fopAcM_gc_c::getGroundCheck()->ClearPi(); fopAcM_rc_c::getRoofCheck()->ClearPi(); fopAcM_wt_c::getWaterCheck()->ClearPi(); dComIfG_Ccsp()->Ct(); + #if VERSION == VERSION_SHIELD_DEBUG + dPath_Ct(); + #endif dDemo_c::create(); + dEyeHL_mng_c::create(); + + #if DEBUG + dJcame_c::create(dDemo_c::getSystem(), 0.03333334f, *mDoCPd_c::getGamePad(PAD_4)); + dJprev_c::create((JStudio::TControl*)dDemo_c::getControl(), *mDoCPd_c::getGamePad(PAD_4)); + #endif dComIfGp_setPlayerInfo(0, NULL, 0); for (int i = 0; i < 2; i++) { @@ -602,11 +1418,19 @@ static int phase_4(dScnPly_c* i_this) { dComIfGd_setViewport(NULL); dComIfGd_setView(NULL); - dComIfGp_setExpHeap2D(fopMsgM_createExpHeap(0xBB800, NULL)); - dComIfGp_setMsgExpHeap(fopMsgM_createExpHeap(0xA800, NULL)); + JKRExpHeap* heap = fopMsgM_createExpHeap(0xBB800, NULL); + JUT_ASSERT(2704, heap != NULL); + dComIfGp_setExpHeap2D(heap); + + JKRExpHeap* heap2 = fopMsgM_createExpHeap(0xA800, NULL); + JUT_ASSERT(2709, heap2 != NULL); + dComIfGp_setMsgExpHeap(heap2); if (fpcM_GetName(i_this) == PROC_OPENING_SCENE) { fopAcM_create(PROC_TITLE, 0, NULL, -1, NULL, NULL, -1); + #if DEBUG + g_playerKind = 0; + #endif dComIfGs_init(); dComIfGs_setOptPointer(0); dComIfGs_setLife(12); @@ -622,10 +1446,20 @@ static int phase_4(dScnPly_c* i_this) { dComIfGp_createSimpleModel(); dMdl_mng_c::create(); - mDoGph_gInf_c::setTickRate((OS_BUS_CLOCK / 4) / 30); - g_envHIO.field_0x4 = -1; - g_save_bit_HIO.field_0x4 = -1; - new (dComIfGp_getAttention()) dAttention_c(dComIfGp_getPlayer(0), 0); + mDoGph_gInf_c::setTickRate(OS_TIMER_CLOCK / 30); + + #if DEBUG + g_preLoadHIO.entryHIO("プリロード制御"); + #endif + g_envHIO.field_0x4 = mDoHIO_CREATE_CHILD("描画設定", &g_envHIO); + g_save_bit_HIO.field_0x4 = mDoHIO_CREATE_CHILD("記録ビット", &g_save_bit_HIO); + + #if DEBUG + daObj::HioObj_c::init(); + #endif + + dAttention_c* attention = dComIfGp_getAttention(); + new (attention) dAttention_c(dComIfGp_getPlayer(0), 0); dComIfGp_getVibration().Init(); daYkgr_c::init(); @@ -650,6 +1484,7 @@ static int phase_4(dScnPly_c* i_this) { return cPhs_COMPLEATE_e; } + OS_REPORT("\x1b[32mプリロードやります\n\x1b[m"); resPreLoadTime0 = OSGetTime(); return cPhs_NEXT_e; } @@ -657,25 +1492,30 @@ static int phase_4(dScnPly_c* i_this) { static int phase_5(dScnPly_c* i_this) { if (preLoadNo >= 0) { int phase_state = cPhs_NEXT_e; + int goodLoads = 0; + int loadNum = 0; const char** resNames = PreLoadInfoT[preLoadNo].resNameTbl; s32 resNameNum = PreLoadInfoT[preLoadNo].resNameNum; if (resNames != NULL && *resNames != NULL) { JUT_ASSERT(2830, resNameNum <= ARRAY_SIZEU(resPhase)); - int goodLoads = 0; - int loadNum = 0; + for (int i = 0; i < resNameNum; i++) { - if (dComIfG_resLoad(&resPhase[i], resNames[i]) == 4) { - goodLoads++; - } else { + int load_phase = dComIfG_resLoad(&resPhase[i], resNames[i]); + if (load_phase != cPhs_COMPLEATE_e) { phase_state = cPhs_INIT_e; + } else { + goodLoads++; } loadNum++; } + + OS_REPORT("\x1b[32mリソースプリロード %d/%d\n\x1b[m", goodLoads, loadNum); } if (phase_state == cPhs_COMPLEATE_e) { resPreLoadTime1 = OSGetTime(); + OS_REPORT("\x1b[32mリソースプリロード %lld ms\n\x1b[m", OSTicksToMilliseconds(resPreLoadTime1 - resPreLoadTime0)); } return phase_state; @@ -687,25 +1527,30 @@ static int phase_5(dScnPly_c* i_this) { static int phase_6(dScnPly_c* i_this) { if (preLoadNo >= 0) { int phase_state = cPhs_NEXT_e; + int goodLoads = 0; + int loadNum = 0; const s16* dylKeyTbl = PreLoadInfoT[preLoadNo].profNameTbl; s32 dylKeyTblNum = PreLoadInfoT[preLoadNo].dylKeyTblNum; if (dylKeyTbl != NULL && *dylKeyTbl != 0) { JUT_ASSERT(2864, dylKeyTblNum <= ARRAY_SIZEU(dylPhase)); - int goodLoads = 0; - int loadNum = 0; + for (int i = 0; i < dylKeyTblNum; i++) { - if (cDylPhs::Link(&dylPhase[i], dylKeyTbl[i]) == cPhs_COMPLEATE_e) { - goodLoads++; - } else { + int load_phase = cDylPhs::Link(&dylPhase[i], dylKeyTbl[i]); + if (load_phase != cPhs_COMPLEATE_e) { phase_state = cPhs_INIT_e; + } else { + goodLoads++; } loadNum++; } + + OS_REPORT("\x1b[32mダイナミックリンクプリロード %d/%d\n\x1b[m", goodLoads, loadNum); } if (phase_state == cPhs_COMPLEATE_e) { dylPreLoadTime1 = OSGetTime(); + OS_REPORT("\x1b[32mダイナミックリンクプリロード %lld ms\n\x1b[m", OSTicksToMilliseconds(dylPreLoadTime1 - dylPreLoadTime0)); } return phase_state; @@ -718,17 +1563,24 @@ static int phase_compleate(void* i_this) { return cPhs_COMPLEATE_e; } -static void dScnPly_Create(scene_class* i_this) { +static int dScnPly_Create(scene_class* i_this) { static request_of_phase_process_fn l_method[] = { - (request_of_phase_process_fn)phase_00, (request_of_phase_process_fn)phase_1, - (request_of_phase_process_fn)phase_1_0, (request_of_phase_process_fn)phase_01, - (request_of_phase_process_fn)phase_0, (request_of_phase_process_fn)phase_2, - (request_of_phase_process_fn)phase_3, (request_of_phase_process_fn)phase_4, - (request_of_phase_process_fn)phase_5, (request_of_phase_process_fn)phase_6, + (request_of_phase_process_fn)phase_00, + (request_of_phase_process_fn)phase_1, + (request_of_phase_process_fn)phase_1_0, + (request_of_phase_process_fn)phase_01, + (request_of_phase_process_fn)phase_0, + (request_of_phase_process_fn)phase_2, + (request_of_phase_process_fn)phase_3, + (request_of_phase_process_fn)phase_4, + (request_of_phase_process_fn)phase_5, + (request_of_phase_process_fn)phase_6, (request_of_phase_process_fn)phase_compleate, }; - dComLbG_PhaseHandler(&static_cast(i_this)->field_0x1c4, l_method, i_this); + dScnPly_c* a_this = (dScnPly_c*)i_this; + int phase_state = dComLbG_PhaseHandler(&a_this->field_0x1c4, l_method, a_this); + return phase_state; } static scene_method_class l_dScnPly_Method = { diff --git a/src/d/d_stage.cpp b/src/d/d_stage.cpp index cd0fcd0958..e1bd46d431 100644 --- a/src/d/d_stage.cpp +++ b/src/d/d_stage.cpp @@ -1552,7 +1552,7 @@ u8 data_8074C56A_debug; u8 data_8074C56B_debug; u8 data_8074C56C_debug; -u32 dStage_roomControl_c::mProcID; +fpc_ProcID dStage_roomControl_c::mProcID; s8 dStage_roomControl_c::mStayNo; @@ -2485,7 +2485,7 @@ static void dStage_dt_c_stageInitLoader(void* i_data, dStage_dt_c* i_stage) { } #if DEBUG -static void dStage_DebugDisp() { +void dStage_DebugDisp() { if (data_8074C569_debug) { JUTReport(30, 270, "envLayerSet: EnvRoom None"); } diff --git a/src/f_op/f_op_actor_mng.cpp b/src/f_op/f_op_actor_mng.cpp index 2bc28c2014..8c0bb21f31 100644 --- a/src/f_op/f_op_actor_mng.cpp +++ b/src/f_op/f_op_actor_mng.cpp @@ -895,7 +895,7 @@ bool fopAcM_checkCullingBox(Mtx m, f32 x1, f32 y1, f32 z1, f32 x2, f32 y2, f32 z return false; } -static cull_box l_cullSizeBox[] = { +cull_box l_cullSizeBox[fopAc_CULLBOX_MAX_e] = { { {-40.0f, 0.0f, -40.0f}, {40.0f, 125.0f, 40.0f}, @@ -960,7 +960,7 @@ static cull_box l_cullSizeBox[] = { #endif }; -static cull_sphere l_cullSizeSphere[] = { +cull_sphere l_cullSizeSphere[fopAc_CULLSPHERE_MAX_e] = { { {0.0f, 0.0f, 0.0f}, 80.0f, diff --git a/src/f_op/f_op_kankyo.cpp b/src/f_op/f_op_kankyo.cpp index c65007622a..2e0563f2c9 100644 --- a/src/f_op/f_op_kankyo.cpp +++ b/src/f_op/f_op_kankyo.cpp @@ -12,8 +12,8 @@ static int fopKy_KANKYO_TYPE; -void fopKy_IsKankyo(void* i_this) { - fpcM_IsJustType(fopKy_KANKYO_TYPE, ((kankyo_class*)i_this)->type); +BOOL fopKy_IsKankyo(void* i_this) { + return fpcM_IsJustType(fopKy_KANKYO_TYPE, ((kankyo_class*)i_this)->type); } static int fopKy_Draw(void* i_this) { diff --git a/src/f_op/f_op_kankyo_mng.cpp b/src/f_op/f_op_kankyo_mng.cpp index 0093173817..fe71a828c2 100644 --- a/src/f_op/f_op_kankyo_mng.cpp +++ b/src/f_op/f_op_kankyo_mng.cpp @@ -11,8 +11,8 @@ void dummy(fpcLyIt_JudgeFunc i_createFunc, void* i_this) { fpcM_Search(i_createFunc, i_this); } -void fopKyM_IsKy(void* i_this) { - fopKy_IsKankyo((fopKyM_prm_class*)i_this); +BOOL fopKyM_IsKy(void* i_this) { + return fopKy_IsKankyo((fopKyM_prm_class*)i_this); } fopKyM_prm_class* fopKyM_CreateAppend() { diff --git a/src/m_Do/m_Do_audio.cpp b/src/m_Do/m_Do_audio.cpp index 231c818438..9d34eae1ee 100644 --- a/src/m_Do/m_Do_audio.cpp +++ b/src/m_Do/m_Do_audio.cpp @@ -22,7 +22,7 @@ u8 mDoAud_zelAudio_c::mInitFlag; u8 mDoAud_zelAudio_c::mResetFlag; -bool mDoAud_zelAudio_c::mBgmSet; +u8 mDoAud_zelAudio_c::mBgmSet; void mDoAud_zelAudio_c::reset() { mBgmSet = false;