From 0f3b98fdcadcd5ed43aa9e0b0228bad096b0d119 Mon Sep 17 00:00:00 2001 From: TakaRikka Date: Sun, 10 Sep 2023 16:02:21 -0700 Subject: [PATCH] more of d_com_inf_game setup --- include/d/actor/d_a_player.h | 160 ++++++++++++++++++++++++++ include/d/d_attention.h | 180 +++++++++++++++++++++++++++++ include/d/d_com_inf_game.h | 183 ++++++++++++++++++++++------- include/d/d_detect.h | 29 +++++ include/d/d_drawlist.h | 216 +++++++++++++++++++++++++++++++++++ include/d/d_kankyo.h | 2 + include/d/d_save.h | 24 +++- include/d/d_stage.h | 2 +- include/d/d_vibration.h | 26 +++++ include/m_Do/m_Do_audio.h | 6 + include/m_Do/m_Do_ext.h | 25 ++++ src/d/d_com_inf_game.cpp | 183 +++++++++++++++++++++++++---- 12 files changed, 966 insertions(+), 70 deletions(-) create mode 100644 include/d/actor/d_a_player.h create mode 100644 include/d/d_attention.h create mode 100644 include/d/d_detect.h create mode 100644 include/d/d_drawlist.h create mode 100644 include/d/d_vibration.h create mode 100644 include/m_Do/m_Do_audio.h diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h new file mode 100644 index 000000000..b4285834f --- /dev/null +++ b/include/d/actor/d_a_player.h @@ -0,0 +1,160 @@ +#ifndef D_D_A_PLAYER_H +#define D_D_A_PLAYER_H + +#include "JSystem/J3DGraphAnimator/J3DAnimation.h" +#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" +#include "d/d_attention.h" +#include "f_op/f_op_actor_mng.h" +#include "m_Do/m_Do_ext.h" + +class mDoExt_MtxCalcOldFrame; +class daPy_matAnm_c; + +class daPy_py_c : public fopAc_ac_c { +public: + /* 0x290 */ u8 mAttackState; + /* 0x291 */ u8 field_0x291; + /* 0x292 */ u8 field_0x292[0x294 - 0x292]; + /* 0x294 */ s16 field_0x294; + /* 0x296 */ s16 mQuakeTimer; + /* 0x298 */ int field_0x298; + /* 0x29C */ u32 field_0x29c; + /* 0x2A0 */ u32 field_0x2a0; + /* 0x2A4 */ u32 field_0x2a4; + /* 0x2A8 */ f32 field_0x2a8; + /* 0x2AC */ u8 field_0x2AC[0x2B0 - 0x2AC]; + /* 0x2B0 */ f32 field_0x2b0; + /* 0x2B4 */ u8 field_0x2B4[0x2BC - 0x2B4]; + /* 0x2BC */ cXyz mHeadTopPos; + /* 0x2C8 */ cXyz mSwordTopPos; + /* 0x2D4 */ cXyz field_0x2d4; + /* 0x2E0 */ cXyz field_0x2e0; + /* 0x2EC */ cXyz mRopePos; + /* 0x2F8 */ f32 field_0x2f8; + /* 0x2FC */ u8 field_0x2FC[0x300 - 0x2FC]; + /* 0x300 */ f32 field_0x300; +}; + +class daPy_lk_c : public daPy_py_c { +public: + /* 0x0304 */ s16 field_0x0304; + /* 0x0306 */ s16 field_0x0306; + /* 0x0308 */ u8 field_0x0308[0x030C - 0x0308]; + /* 0x030C */ int field_0x030c; + /* 0x0310 */ u8 field_0x0310[0x0314 - 0x0310]; + /* 0x0314 */ int mDemoMode; + /* 0x0318 */ u8 field_0x0318[0x031C - 0x0318]; + /* 0x031C */ void* vtbl; + /* 0x0320 */ request_of_phase_process_class mPhsLoad; + + /* 0x0328 */ u8 temp0[0x3480 - 0x0328]; + + /* 0x3480 */ dAttention_c* mpAttention; + /* 0x3484 */ dAttList_c* mpAttnEntryA; + /* 0x3488 */ dAttList_c* mpAttnEntryX; + /* 0x348C */ dAttList_c* mpAttnEntryY; + /* 0x3490 */ dAttList_c* mpAttnentryZ; + /* 0x3494 */ u8 field_0x3494[0x34B9 - 0x3494]; + /* 0x34B9 */ u8 mFrontWallType; + /* 0x34BA */ u8 field_0x34BA[0x34BD - 0x34BA]; + /* 0x34BD */ u8 mLastUsedEquipItem; + /* 0x34BE */ u8 field_0x34BE[0x34C0 - 0x34BE]; + /* 0x34C0 */ u8 field_0x34c0; + /* 0x34C1 */ u8 field_0x34c1; + /* 0x34C2 */ u8 field_0x34c2; + /* 0x34C3 */ u8 field_0x34c3; + /* 0x34C4 */ u8 field_0x34c4; + /* 0x34C5 */ u8 field_0x34c5; + /* 0x34C6 */ u8 field_0x34C6[0x34C7 - 0x34C6]; + /* 0x34C7 */ u8 mActivePlayerBombs; + /* 0x34C8 */ u8 mPressedButtonsBitfield; + /* 0x34C9 */ u8 field_0x34C9[0x34D0 - 0x34C9]; + /* 0x34D0 */ s16 field_0x34d0; + /* 0x34D2 */ s16 field_0x34d2; + /* 0x34D4 */ s16 field_0x34d4; + /* 0x34D6 */ u16 field_0x34d6; + /* 0x34D8 */ s16 field_0x34d8; + /* 0x34DA */ s16 field_0x34da; + /* 0x34DC */ u8 field_0x34DC[0x34DE - 0x34DC]; + /* 0x34DE */ s16 field_0x34de; + /* 0x34E0 */ u8 field_0x34E0[0x34E2 - 0x34E0]; + /* 0x34E2 */ s16 field_0x34e2; + /* 0x34E4 */ u8 field_0x34E4[0x34E6 - 0x34E4]; + /* 0x34E6 */ s16 field_0x34e6; + /* 0x34E8 */ u8 field_0x34E8[0x3522 - 0x34E8]; + /* 0x3522 */ s16 field_0x3522; + /* 0x3524 */ u8 field_0x3524[0x352C - 0x3524]; + /* 0x352C */ s16 field_0x352c; + /* 0x352E */ s16 field_0x352e; + /* 0x3530 */ s16 field_0x3530; + /* 0x3532 */ s16 field_0x3532; + /* 0x3534 */ u8 field_0x3534[0x3544 - 0x3534]; + /* 0x3544 */ s16 field_0x3544; + /* 0x3546 */ u8 field_0x3546[0x354E - 0x3546]; + /* 0x354E */ s16 field_0x354e; + /* 0x3550 */ u8 field_0x3550[0x3554 - 0x3550]; + /* 0x3554 */ s16 field_0x3554; + /* 0x3556 */ u8 field_0x3556[0x355E - 0x3556]; + /* 0x355E */ u16 field_0x355e; + /* 0x3560 */ u16 mHeldItemType; + /* 0x3562 */ u8 field_0x3562[0x3566 - 0x3562]; + /* 0x3566 */ s16 field_0x3566; + /* 0x3568 */ s16 field_0x3568; + /* 0x356A */ u8 field_0x356A[0x356C - 0x356A]; + /* 0x356C */ int mCameraInfoIdx; + /* 0x3570 */ int field_0x3570; + /* 0x3574 */ int field_0x3574; + /* 0x3578 */ u8 field_0x3578[0x3580 - 0x3578]; + /* 0x3580 */ int field_0x3580; + /* 0x3584 */ int mCurrentGroundAttributeCode; + /* 0x3588 */ u8 field_0x3588[0x358C - 0x3588]; + /* 0x358C */ int mStaffIdx; + /* 0x3590 */ int field_0x3590; + /* 0x3594 */ int field_0x3594; + /* 0x3598 */ u8 field_0x3598[0x35A0 - 0x3598]; + /* 0x35A0 */ f32 field_0x35a0; + /* 0x35A4 */ f32 field_0x35a4; + /* 0x35A8 */ u8 field_0x35A8[0x35BC - 0x35A8]; + /* 0x35BC */ f32 mVelocity; + /* 0x35C0 */ u8 field_0x35C0[0x35C8 - 0x35C0]; + /* 0x35C8 */ f32 field_0x35c8; + /* 0x35CC */ u8 field_0x35CC[0x35D0 - 0x35CC]; + /* 0x35D0 */ f32 field_0x35d0; + /* 0x35D4 */ u8 field_0x35D4[0x35D8 - 0x35D4]; + /* 0x35D8 */ f32 field_0x35d8; + /* 0x35DC */ u8 field_0x35DC[0x35E4 - 0x35DC]; + /* 0x35E4 */ f32 field_0x35e4; + /* 0x35E8 */ f32 field_0x35e8; + /* 0x35EC */ f32 field_0x35ec; + /* 0x35F0 */ u8 field_0x35F0[0x35FC - 0x35F0]; + /* 0x35FC */ f32 field_0x35fc; + /* 0x3600 */ f32 field_0x3600; + /* 0x3604 */ u8 field_0x3604[0x3610 - 0x3604]; + /* 0x3610 */ f32 field_0x3610; + /* 0x3614 */ int field_0x3614; + /* 0x3618 */ u32 field_0x3618; + /* 0x361C */ u8 field_0x361C[0x3624 - 0x361C]; + /* 0x3624 */ int field_0x3624; + /* 0x3628 */ int field_0x3628; + /* 0x362C */ u8 field_0x362C[0x3630 - 0x362C]; + /* 0x3630 */ int field_0x3630; + /* 0x3634 */ int field_0x3634; + /* 0x3638 */ u8 field_0x3638[0x3644 - 0x3638]; + /* 0x3644 */ f32 field_0x3644; + /* 0x3648 */ u8 field_0x3648[0x3694 - 0x3648]; + /* 0x3694 */ cXyz mOldSpeed; + /* 0x36A0 */ cXyz field_0x36a0; + /* 0x36AC */ cXyz field_0x36ac; + /* 0x36B8 */ u8 field_0x36B8[0x36C4 - 0x36B8]; + /* 0x36C4 */ cXyz field_0x36c4; + /* 0x36D0 */ u8 field_0x36D0[0x3700 - 0x36D0]; + /* 0x3700 */ cXyz field_0x3700; + /* 0x370C */ cXyz field_0x370c; + /* 0x3718 */ u8 field_0x3718[0x3724 - 0x3718]; + /* 0x3724 */ cXyz field_0x3724; + /* 0x3730 */ u8 field_0x3730[0x3748 - 0x3730]; + /* 0x3748 */ cXyz field_0x3748; + /* 0x3754 */ u8 field_0x3754[0x37E4 - 0x3754]; +}; + +#endif /* D_D_A_PLAYER_H */ \ No newline at end of file diff --git a/include/d/d_attention.h b/include/d/d_attention.h new file mode 100644 index 000000000..1fa2253c8 --- /dev/null +++ b/include/d/d_attention.h @@ -0,0 +1,180 @@ +#ifndef D_D_ATTENTION_H +#define D_D_ATTENTION_H + +#include "SSystem/SComponent/c_angle.h" +#include "m_Do/m_Do_ext.h" + +class fopAc_ac_c; + +class dAttHint_c { +public: + dAttHint_c() {} + u32 getPId(void*); + fopAc_ac_c* convPId(unsigned int); + int request(fopAc_ac_c*, int); + void init(); + void proc(); + +private: + /* 0x0 */ u32 mHintActorID; + /* 0x4 */ int mPriority; + /* 0x8 */ u32 field_0x8; +}; + +class dAttCatch_c { +public: + dAttCatch_c() {} + fopAc_ac_c* convPId(unsigned int); + void init(); + void proc(); + void request(fopAc_ac_c*, u8, f32, f32, f32, s16, int); + + fopAc_ac_c* getCatghTarget() { return convPId(mCatghTargetID); } + u8 getChangeItem() { return mChangeItem; } + +private: + /* 0x00 */ u32 field_0x0; + /* 0x04 */ int field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ u8 field_0xc; + /* 0x0D */ u8 field_0xd; + /* 0x0E */ u8 field_0xe; + /* 0x0F */ u8 field_0xf; + /* 0x10 */ u32 mCatghTargetID; + /* 0x14 */ u8 mChangeItem; +}; // Size: 0x18 + +class dAttParam_c { +public: + /* 0x00 */ u16 field_0x00; + /* 0x02 */ u8 field_0x02[0x04 - 0x02]; + /* 0x04 */ f32 field_0x04; + /* 0x08 */ f32 field_0x08; + /* 0x0C */ f32 field_0x0c; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + +public: + dAttParam_c() {} + dAttParam_c(s32); + + virtual ~dAttParam_c(); + + /* 0x1C vtable */ +}; // Size: 0x20 + +class dAttLook_c { +public: + /* 80073CA4 */ fopAc_ac_c* convPId(unsigned int); + /* 80073CD4 */ void init(); + /* 80073CEC */ void proc(); + /* 80073D08 */ void request(fopAc_ac_c*, f32, f32, f32, s16, int); + +private: + u32 field_0x0; + u32 field_0x4; + f32 field_0x8; + u32 mLookTargetID; +}; // Size: 0x10 + +class dAttList_c { +public: + fopAc_ac_c* getActor(); + void setActor(fopAc_ac_c*); + + u32 getPid() { return mActorID; } + + /* 0x0 */ f32 mWeight; + /* 0x4 */ f32 mDistance; + /* 0x8 */ u32 mType; + /* 0xC */ u32 mActorID; +}; // Size: 0x10 + +class dAttDraw_CallBack_c : public mDoExt_McaMorfCallBack1_c { +public: + /* 80070178 */ virtual void execute(u16, J3DTransformInfo*); +}; + +class daPy_lk_c; + +class dAttention_c { +public: + dAttention_c() {} + + dAttention_c(fopAc_ac_c*, u32); + ~dAttention_c(); + + void GetActionList(s32); + void GetLockonList(s32); + void getActionBtnB(); + void getActionBtnXYZ_local(int); + void getActionBtnX(); + void getActionBtnY(); + void getActionBtnZ(); + void chkAttMask(u32, u32); + void calcWeight(int, fopAc_ac_c*, f32, s16, s16, u32*); + void setLList(fopAc_ac_c*, f32, f32, u32); + void setAList(fopAc_ac_c*, f32, f32, u32); + void initList(u32); + void makeList(); + void SelectAttention(fopAc_ac_c*); + void sortList(); + void stockAttention(u32); + void nextAttention(u32); + void freeAttention(); + void chaseAttention(); + void EnemyDistance(fopAc_ac_c*); + void runSoundProc(); + void runDrawProc(); + void runDebugDisp0(); + void runDebugDisp(); + void judgementButton(); + void judgementTriggerProc(); + void judgementLostCheck(); + void judgementStatusSw(u32); + void judgementStatusHd(u32); + void Run(u32); + void Draw(); + void LockonTarget(s32); + void LockonReleaseDistanse(); + void LockonTargetPId(s32); + void ActionTarget(s32); + void LockonTruth(); + void Lockon(); + +public: + /* 0x000 */ daPy_lk_c* mpPlayer; + /* 0x004 */ int mLockOnTargetBsPcID; + /* 0x008 */ dAttDraw_CallBack_c field_0x8; + /* 0x00C */ int mPlayerNo; + /* 0x010 */ u32 mFlagMask; + /* 0x014 */ u8 field_0x014[0x018 - 0x014]; + /* 0x018 */ u8 mLockOnState; + /* 0x019 */ u8 field_0x019; + /* 0x01A */ u8 field_0x01a; + /* 0x01B */ u8 field_0x01b; + /* 0x01C */ s16 field_0x01c; + /* 0x01E */ u8 field_0x01E[0x020 - 0x01E]; + /* 0x020 */ u32 mFlags; + /* 0x024 */ JKRHeap* mpHeap; + /* 0x028 */ u8 field_0x028; + /* 0x029 */ u8 field_0x029[0x054 - 0x029]; + /* 0x054 */ dAttList_c mLockOnList[8]; + /* 0x0D4 */ int mLockOnNum; + /* 0x0D8 */ int mLockOnOffs; + /* 0x0DC */ dAttList_c mActionList[4]; + /* 0x11C */ int mActionNum; + /* 0x120 */ int mActionOffs; + /* 0x124 */ dAttHint_c mHint; + /* 0x130 */ dAttCatch_c mCatch; + /* 0x148 */ dAttLook_c field_0x148; + /* 0x158 */ dAttLook_c field_0x158; + /* 0x168 */ int mEnemyBsPcId; + /* 0x16C */ f32 mEnemyDistance; + /* 0x170 */ dAttParam_c mAttParam; +}; // Size: 0x190 + +STATIC_ASSERT(sizeof(dAttention_c) == 0x190); + +#endif /* D_D_ATTENTION_H */ \ No newline at end of file diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index ad78e6a36..ca174f687 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1,13 +1,17 @@ #ifndef D_COM_D_COM_INF_GAME_H #define D_COM_D_COM_INF_GAME_H +#include "d/d_attention.h" #include "d/d_bg_s.h" #include "d/d_cc_s.h" +#include "d/d_detect.h" +#include "d/d_drawlist.h" #include "d/d_event.h" #include "d/d_event_manager.h" #include "d/d_resorce.h" #include "d/d_save.h" #include "d/d_stage.h" +#include "d/d_vibration.h" class JKRArchive; class JKRExpHeap; @@ -27,6 +31,22 @@ class dTimer_c; class camera_class; class J2DOrthoGraph; +class __d_timer_info_c { +public: + __d_timer_info_c() { + mTimerMode = -1; + mTimerLimitTimeMs = 0; + mTimerNowTimeMs = 0; + mTimerPtr = NULL; + } + + /* 0x00 */ dTimer_c* mTimerPtr; + /* 0x04 */ s32 mTimerNowTimeMs; + /* 0x08 */ s32 mTimerLimitTimeMs; + /* 0x0C */ s32 mTimerMode; + /* 0x10 */ u8 mTimerType; +}; + class dADM { public: /* 0x00 */ int mBlockCount; @@ -41,37 +61,6 @@ public: virtual ~dADM(); }; -// setup properly later -struct dAttention_c { - u8 temp[0x190]; -}; - -struct dVibration_c { - u8 temp[0x84]; -}; - -struct dDetect_c { - u8 temp[0x14]; -}; - -struct dDlst_list_c { - u8 temp[0x16234]; -}; - -class dDlst_window_c { -public: - /* 0x00 */ f32 mXOrig; - /* 0x04 */ f32 mYOrig; - /* 0x08 */ f32 mWidth; - /* 0x0C */ f32 mHeight; - /* 0x10 */ f32 mNearZ; - /* 0x14 */ f32 mFarZ; - /* 0x18 */ f32 mScissorXOrig; - /* 0x1C */ f32 mScissorYOrig; - /* 0x20 */ f32 mScissorWidth; - /* 0x24 */ f32 mScissorHeight; -}; - class dComIfG_camera_info_class { public: dComIfG_camera_info_class() {} @@ -85,8 +74,9 @@ public: /* 0x08 */ u32 mCameraAttentionStatus; /* 0x0C */ f32 mCameraZoomScale; /* 0x10 */ f32 mCameraZoomForcus; + /* 0x14 */ u8 field_0x14[0x34 - 0x14]; }; -STATIC_ASSERT(sizeof(dComIfG_camera_info_class) == 0x14); +STATIC_ASSERT(sizeof(dComIfG_camera_info_class) == 0x34); class dComIfG_play_c { public: @@ -95,7 +85,7 @@ public: void ct(); void init(); void itemInit(); - void getLayerNo(int); + int getLayerNo(int i_roomNo); void createParticle(); void createDemo(); void removeDemo(); @@ -123,6 +113,27 @@ public: ~dComIfG_play_c(); + const char* getStartStageName() { return mCurStage.getName(); } + s8 getStartStageRoomNo() { return mCurStage.getRoomNo(); } + s8 getStartStageLayer() { return mCurStage.getLayer(); } + s16 getStartStagePoint() { return mCurStage.getPoint(); } + void setStartStageLayer(s8 layer) { mCurStage.setLayer(layer); } + + const char* getNextStageName() { return mNextStage.getName(); } + dStage_startStage_c* getNextStartStage() { return &mNextStage; } + s8 getNextStageRoomNo() { return mNextStage.getRoomNo(); } + s8 getNextStageLayer() { return mNextStage.getLayer(); } + s16 getNextStagePoint() { return mNextStage.getPoint(); } + s8 getNextStageWipe() { return mNextStage.getWipe(); } + bool isEnableNextStage() { return mNextStage.isEnable(); } + void offEnableNextStage() { mNextStage.offEnable(); } + void setNextStage(const char* i_stageName, s8 i_roomNo, s16 i_point, s8 i_layer, s8 i_wipe) { + mNextStage.set(i_stageName, i_roomNo, i_point, i_layer, i_wipe); + } + + fopAc_ac_c* getPlayerPtr(int idx) { return (fopAc_ac_c*)mpPlayerPtr[idx]; } + fopAc_ac_c* getPlayer(int idx) { return (fopAc_ac_c*)mpPlayer[idx]; } + /* 0x0000 */ dBgS mBgS; /* 0x1404 */ dCcS mCcS; /* 0x3DF8 */ dADM mADM; @@ -175,10 +186,7 @@ public: /* 0x4841 */ u8 field_0x4841; /* 0x4842 */ s16 mVrboxFlags; /* 0x4844 */ dDlst_window_c mDlstWindow[1]; - /* 0x486C */ u8 mCurCameraInfo; - /* 0x486D */ u8 field_0x486D[0x4870 - 0x486D]; /* 0x4870 */ dComIfG_camera_info_class mCameraInfo[1]; - /* 0x4884 */ u8 field_0x4884[0x48A4 - 0x4884]; /* 0x48A4 */ daPy_py_c* mpPlayer[1]; /* 0x48A8 */ s8 mCurCamera[1]; /* 0x48A9 */ u8 field_0x48A9[0x48AC - 0x48A9]; @@ -277,12 +285,7 @@ public: /* 0x4A24 */ daAgb_c* mpAgb; /* 0x4A28 */ u32 mPlayerStatus[2][2]; /* 0x4A38 */ u8 field_0x4A38[0x4A40 - 0x4A38]; - /* 0x4A40 */ dTimer_c* mpRestartTimer; - /* 0x4A44 */ int field_0x4a44; - /* 0x4A48 */ int field_0x4a48; - /* 0x4A4C */ int field_0x4a4c; - /* 0x4A50 */ u16 field_0x4a50; - /* 0x4A52 */ u8 field_0x4A52[0x4A54 - 0x4A52]; + /* 0x4A40 */ __d_timer_info_c mTimerInfo; /* 0x4A54 */ dDlst_window_c* field_0x4a54; /* 0x4A58 */ camera_class* field_0x4a58; /* 0x4A5C */ dDlst_window_c* field_0x4a5c; @@ -333,18 +336,114 @@ inline BOOL dComIfGs_isEventBit(u16 id) { return g_dComIfG_gameInfo.info.getEvent().isEventBit(id); } +inline void dComIfGs_setRestartRoomParam(u32 i_param) { + g_dComIfG_gameInfo.info.getRestart().setRoomParam(i_param); +} + +inline void dComIfGs_setStartPoint(s16 i_point) { + g_dComIfG_gameInfo.info.getRestart().setStartPoint(i_point); +} + +inline int dComIfGs_getTriforceNum() { + return g_dComIfG_gameInfo.info.getPlayer().getCollect().getTriforceNum(); +} + /** * === PLAY === */ +void dComIfGp_setNextStage(const char* i_stageName, s16 i_point, s8 i_roomNo, s8 i_layer, + f32 i_lastSpeed, u32 i_lastMode, int, s8 i_wipe); + +inline const char* dComIfGp_getStartStageName() { + return g_dComIfG_gameInfo.play.getStartStageName(); +} + +inline s8 dComIfGp_getStartStageRoomNo() { + return g_dComIfG_gameInfo.play.getStartStageRoomNo(); +} + +inline s8 dComIfGp_getStartStageLayer() { + return g_dComIfG_gameInfo.play.getStartStageLayer(); +} + +inline s16 dComIfGp_getStartStagePoint() { + return g_dComIfG_gameInfo.play.getStartStagePoint(); +} + +inline void dComIfGp_offEnableNextStage() { + g_dComIfG_gameInfo.play.offEnableNextStage(); +} + +inline const char* dComIfGp_getNextStageName() { + return g_dComIfG_gameInfo.play.getNextStageName(); +} + +inline dStage_startStage_c* dComIfGp_getNextStartStage() { + return g_dComIfG_gameInfo.play.getNextStartStage(); +} + +inline s8 dComIfGp_getNextStageRoomNo() { + return g_dComIfG_gameInfo.play.getNextStageRoomNo(); +} + +inline s8 dComIfGp_getNextStageLayer() { + return g_dComIfG_gameInfo.play.getNextStageLayer(); +} + +inline s32 dComIfGp_getNextStageWipe() { + return g_dComIfG_gameInfo.play.getNextStageWipe(); +} + +inline bool dComIfGp_isEnableNextStage() { + return g_dComIfG_gameInfo.play.isEnableNextStage(); +} + +inline s16 dComIfGp_getNextStagePoint() { + return g_dComIfG_gameInfo.play.getNextStagePoint(); +} + +inline fopAc_ac_c* dComIfGp_getPlayer(int idx) { + return g_dComIfG_gameInfo.play.getPlayer(idx); +} + +inline daPy_lk_c* daPy_getPlayerLinkActorClass() { + return (daPy_lk_c*)g_dComIfG_gameInfo.play.getPlayerPtr(0); +} + /** * === RESOURCE === */ +class request_of_phase_process_class; int dComIfG_resLoad(request_of_phase_process_class* i_phase, char const* arc_name); int dComIfG_resLoad(request_of_phase_process_class* i_phase, char const* resName, JKRHeap* heap); int dComIfG_resDelete(request_of_phase_process_class* i_phase, char const* resName); +inline int dComIfG_setObjectRes(const char* name, u8 param_1, JKRHeap* heap) { + return g_dComIfG_gameInfo.mResControl.setObjectRes(name, param_1, heap); +} + +inline int dComIfG_setObjectRes(const char* name, void* param_1, u32 param_2) { + return g_dComIfG_gameInfo.mResControl.setObjectRes(name, param_1, param_2, NULL); +} + +inline int dComIfG_setStageRes(const char* name, JKRHeap* heap) { + return g_dComIfG_gameInfo.mResControl.setStageRes(name, heap); +} + +inline int dComIfG_syncObjectRes(const char* name) { + return g_dComIfG_gameInfo.mResControl.syncObjectRes(name); +} + +inline int dComIfG_syncStageRes(const char* name) { + return g_dComIfG_gameInfo.mResControl.syncStageRes(name); +} + +inline int dComIfG_deleteObjectResMain(const char* res) { + return g_dComIfG_gameInfo.mResControl.deleteObjectRes(res); +} + inline int dComIfG_deleteStageRes(const char* res) { return g_dComIfG_gameInfo.mResControl.deleteStageRes(res); } diff --git a/include/d/d_detect.h b/include/d/d_detect.h new file mode 100644 index 000000000..3395494d2 --- /dev/null +++ b/include/d/d_detect.h @@ -0,0 +1,29 @@ +#ifndef D_D_DETECT_H +#define D_D_DETECT_H + +#include "SSystem/SComponent/c_xyz.h" + +class dDetectPlace_c { +public: + /* 0x00 */ cXyz mPos; + /* 0x0C */ s16 mEnable; +}; + +class dDetect_c { +public: + dDetect_c(); + ~dDetect_c(); + + void proc(); + void chk_quake(const cXyz*) const; + void set_quake(const cXyz*); + void chk_quake_area(const cXyz*) const; + void search_tag_light(void*, void*); + void chk_light(const cXyz*) const; + void chk_attention(cXyz*) const; + + /* 0x00 */ dDetectPlace_c mPlace[1]; + /* 0x10 */ s16 mTimer; +}; // Size: 0x14 + +#endif /* D_D_DETECT_H */ \ No newline at end of file diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h new file mode 100644 index 000000000..c9187c272 --- /dev/null +++ b/include/d/d_drawlist.h @@ -0,0 +1,216 @@ +#ifndef D_D_DRAWLIST_H +#define D_D_DRAWLIST_H + +#include "f_op/f_op_view.h" +#include "global.h" +#include "m_Do/m_Do_ext.h" + +class dDlst_base_c { +public: + dDlst_base_c() {} + virtual void draw(); +}; + +class dDlst_window_c { +public: + dDlst_window_c() {} + ~dDlst_window_c() {} + void setViewPort(f32, f32, f32, f32, f32, f32); + void setScissor(f32, f32, f32, f32); + + view_port_class* getViewPort() { return &mViewport; } + +private: + /* 0x00 */ view_port_class mViewport; + /* 0x28 */ s8 mCameraID; + /* 0x29 */ s8 mMode; +}; + +STATIC_ASSERT(sizeof(dDlst_window_c) == 0x2C); + +class dDlst_peekZ_c { +public: + struct dDlst_peekZ_entry { + /* 0x0 */ s16 x; + /* 0x2 */ s16 y; + /* 0x4 */ u32* dst; + }; + + dDlst_peekZ_c() { mCount = 0; } + int newData(s16, s16, u32*); + void peekData(); + + /* 0x0 */ u8 mCount; + /* 0x4 */ dDlst_peekZ_entry mEntries[50]; +}; // Size: 0x194 + +STATIC_ASSERT(sizeof(dDlst_peekZ_c) == 0x194); + +class dDlst_shadowSimple_c { +public: + void draw(); + void set(cXyz*, f32, f32, cXyz*, s16, f32, GXTexObj*); + dDlst_shadowSimple_c(); + + /* 0x00 */ u8 mAlpha; + /* 0x04 */ GXTexObj* mpTexObj; + /* 0x08 */ Mtx mVolumeMtx; + /* 0x38 */ Mtx mMtx; +}; // Size: 0x68 + +struct cBgD_Vtx_t; + +class dDlst_shadowTri_c { +public: + ~dDlst_shadowTri_c() {} + dDlst_shadowTri_c() {} + + /* 0x0 */ cXyz mPos[3]; +}; + +class dDlst_shadowPoly_c { +public: + dDlst_shadowPoly_c() { + reset(); + } + + void reset() { mCount = 0; } + + int set(cBgD_Vtx_t*, u16, u16, u16, cM3dGPla*); + void draw(); + + virtual dDlst_shadowTri_c* getTri() = 0; + virtual s32 getTriMax() = 0; + + /* 0x4 */ u16 mCount; + /* 0x6 */ u8 field_0x6[2]; +}; + +class dDlst_shadowRealPoly_c : public dDlst_shadowPoly_c { +public: + virtual dDlst_shadowTri_c* getTri(); + virtual s32 getTriMax(); + + /* 0x8 */ dDlst_shadowTri_c mShadowTri[256]; +}; + +class J3DCallBackPacket; +class dKy_tevstr_c; +class dDlst_shadowReal_c { +public: + void reset(); + void imageDraw(f32 (*)[4]); + void draw(); + u32 set(u32, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*, f32, f32); + bool add(J3DModel*); + ~dDlst_shadowReal_c() {} + dDlst_shadowReal_c() { mState = 0; } + + bool isNoUse() { return mState == 0; } + bool isUse() { return mState == 1; } + bool checkKey(u32 i_key) { return mKey == i_key; } + +private: + /* 0x0000 */ u8 mState; + /* 0x0001 */ u8 field_0x1; + /* 0x0002 */ u8 mModelNum; + /* 0x0003 */ u8 field_0x3; + /* 0x0004 */ u32 mKey; + /* 0x0008 */ Mtx mViewMtx; + /* 0x0038 */ Mtx44 mRenderProjMtx; + /* 0x0078 */ Mtx mReceiverProjMtx; + /* 0x00A8 */ void* mpTexData; + /* 0x00AC */ dDlst_shadowRealPoly_c mShadowRealPoly; + /* 0x24B4 */ GXTexObj mTexData; + /* 0x24D4 */ J3DDrawBuffer* mpDrawBuffer; + /* 0x24D8 */ J3DCallBackPacket* mpPacket; + /* 0x24DC */ J3DModel* mpModels[26]; +}; // Size: 0x2544 + +class dDlst_shadowControl_c { +public: + void init(); + void reset(); + void imageDraw(f32 (*)[4]); + void draw(f32 (*)[4]); + int setReal(u32, s8, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*); + bool addReal(u32, J3DModel*); + int setSimple(cXyz*, f32, f32, cXyz*, s16, f32, GXTexObj*); + static void setSimpleTex(ResTIMG const*); + + static GXTexObj* getSimpleTex() { return &mSimpleTexObj; } + + static GXTexObj mSimpleTexObj; + +private: + /* 0x00000 */ u8 mRealNum; + /* 0x00001 */ u8 mSimpleNum; + /* 0x00004 */ dDlst_shadowSimple_c mSimple[128]; + /* 0x03404 */ int mNextID; + /* 0x03408 */ dDlst_shadowReal_c mReal[8]; +}; // Size: 0x15E28 + +STATIC_ASSERT(sizeof(dDlst_shadowControl_c) == 0x15E28); + +struct view_port_class; +struct view_class; +struct camera_class; +struct dDlst_alphaModel_c; + +class dDlst_list_c { +public: + dDlst_list_c(); + ~dDlst_list_c(); + + void init(); + void reset(); + void entryZSortXluDrawList(J3DDrawBuffer*, J3DPacket*, cXyz&); + void set(dDlst_base_c**&, dDlst_base_c**&, dDlst_base_c*); + void draw(dDlst_base_c**, dDlst_base_c**); + void wipeIn(f32, GXColor&); + void wipeIn(f32); + void calcWipe(); + void set2DOpa(dDlst_base_c*); + +private: + /* 0x00000 */ J3DDrawBuffer* mpBufSkyOpa; + /* 0x00004 */ J3DDrawBuffer* mpBufSkyXlu; + /* 0x00008 */ J3DDrawBuffer* mpLinkBuf; + /* 0x0000C */ J3DDrawBuffer* field_0x0000c; + /* 0x00010 */ J3DDrawBuffer* field_0x00010; + /* 0x00014 */ J3DDrawBuffer* mpBufWorldOpa; + /* 0x00018 */ J3DDrawBuffer* mpBufWorldXlu; + /* 0x0001C */ J3DDrawBuffer* mpBufInvisibleModelOpa; + /* 0x00020 */ J3DDrawBuffer* mpBufInvisibleModelXlu; + /* 0x00024 */ J3DDrawBuffer* mpWetherFxBuffer; + /* 0x00028 */ J3DDrawBuffer* mpBufInvisibleModelMaskOffOpa; + /* 0x0002C */ J3DDrawBuffer* mpBufInvisibleModelMaskOffXlu; + /* 0x00030 */ J3DDrawBuffer* field_0x00030; + /* 0x00034 */ J3DDrawBuffer* field_0x00034; + /* 0x00038 */ J3DDrawBuffer* field_0x00038; + /* 0x0003C */ u8 field_0x0003C[0x00050 - 0x0003C]; + /* 0x00050 */ void* field_0x00050; + /* 0x00054 */ u8 field_0x00054[0x00094 - 0x00054]; + /* 0x00094 */ dDlst_base_c** field_0x00094; + /* 0x00098 */ void* field_0x00098; + /* 0x0009C */ dDlst_base_c* mp2DArr[64]; + /* 0x0019C */ dDlst_base_c** mp2DOpa; + /* 0x001A0 */ dDlst_base_c*** mp2DOpaEnd; + /* 0x001A4 */ u8 field_0x001A4[0x00224 - 0x001A4]; + /* 0x00224 */ dDlst_base_c** field_0x00224; + /* 0x00228 */ dDlst_base_c*** field_0x00228; + /* 0x0022C */ dDlst_window_c* field_0x0022c; + /* 0x00230 */ dDlst_window_c* field_0x00230; + /* 0x00234 */ camera_class* mpCamera; + /* 0x00238 */ u8 field_0x00238[0x00244 - 0x00238]; + /* 0x00244 */ dDlst_alphaModel_c* mpAlphaModel0; + /* 0x00248 */ dDlst_alphaModel_c* mpAlphaModel2; + /* 0x0024C */ dDlst_alphaModel_c* mpAlphaModel1; + /* 0x00250 */ dDlst_shadowControl_c mShadowControl; + /* 0x16078 */ mDoExt_3DlineMatSortPacket m3DLineMatSortPacket[2]; + /* 0x160A0 */ dDlst_peekZ_c mPeekZ; +}; // Size: 0x16234 + +STATIC_ASSERT(sizeof(dDlst_list_c) == 0x16234); + +#endif /* D_D_DRAWLIST_H */ \ No newline at end of file diff --git a/include/d/d_kankyo.h b/include/d/d_kankyo.h index b1e23c771..9ab5f2885 100644 --- a/include/d/d_kankyo.h +++ b/include/d/d_kankyo.h @@ -64,6 +64,8 @@ public: extern dScnKy_env_light_c g_env_light; +int dKy_getdaytime_hour(); +BOOL dKy_checkEventNightStop(); #endif /* D_KANKYO_D_KANKYO_H */ diff --git a/include/d/d_save.h b/include/d/d_save.h index 08625f17e..242255468 100644 --- a/include/d/d_save.h +++ b/include/d/d_save.h @@ -302,8 +302,12 @@ STATIC_ASSERT(sizeof(dSv_player_status_b_c) == 0x18); class dSv_player_return_place_c { public: - /* 80058B84 */ void init(); - /* 80058BC8 */ void set(char const*, s8, u8); + void init(); + void set(char const*, s8, u8); + + s8 getRoomNo() const { return mRoomNo; } + u8 getPlayerStatus() const { return mPlayerStatus; } + char* getName() { return mName; } /* 0x00 */ char mName[8]; /* 0x08 */ s8 mRoomNo; @@ -743,17 +747,26 @@ public: /* 8005D4C8 */ void setRestartOption(s8); /* 8005D584 */ void setRestartOption(s8, cXyz*, s16, s8); + void setRoomParam(u32 param) { mRestartParam = param; } + void setStartPoint(s16 point) { mStartCode = point; } + void setLastSceneInfo(f32 speed, u32 mode) { + mLastSpeedF = speed; + mLastMode = mode; + } + /* 0x00 */ s8 mRestartRoom; /* 0x01 */ u8 field_0x1; /* 0x02 */ s8 mRoomNo; /* 0x04 */ s16 field_0x4; /* 0x06 */ s16 mRoomAngleY; /* 0x08 */ cXyz mRoomPos; - /* 0x14 */ u16 mStartCode; + /* 0x14 */ s16 mStartCode; /* 0x16 */ s16 mRestartAngle; /* 0x18 */ cXyz mRestartPos; /* 0x24 */ u32 mRestartParam; -}; // Size: 0x28 + /* 0x28 */ f32 mLastSpeedF; + /* 0x2C */ u32 mLastMode; +}; // Size: 0x30 class dSv_turnRestart_c { public: @@ -810,6 +823,7 @@ public: dSv_player_c& getPlayer() { return mSavedata.getPlayer(); } dSv_event_c& getEvent() { return mSavedata.getEvent(); } + dSv_restart_c& getRestart() { return mRestart; } static const int MEMORY_SWITCH = 0x80; static const int DAN_SWITCH = 0x40; @@ -826,8 +840,6 @@ public: /* 0x079C */ dSv_danBit_c mDan; /* 0x07A8 */ dSv_zone_c mZone[ZONE_MAX]; /* 0x1128 */ dSv_restart_c mRestart; - /* 0x1150 */ f32 field_0x1150; - /* 0x1154 */ int field_0x1154; /* 0x1158 */ dSv_event_c mTmp; /* 0x1258 */ dSv_turnRestart_c mTurnRestart; /* 0x1290 */ u8 field_0x1290; diff --git a/include/d/d_stage.h b/include/d/d_stage.h index c185efbfe..6376fa04b 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -463,7 +463,7 @@ public: dStage_nextStage_c() { mEnable = 0; // TODO: maybe wrong } - void set(const char*, s8, s16, s8, s8, u8); + void set(const char*, s8, s16, s8, s8); void offEnable() { mEnable = 0; } s8 isEnable() const { return mEnable; } s8 getWipe() const { return mWipe; } diff --git a/include/d/d_vibration.h b/include/d/d_vibration.h new file mode 100644 index 000000000..af7dba404 --- /dev/null +++ b/include/d/d_vibration.h @@ -0,0 +1,26 @@ +#ifndef D_D_VIBRATION_H +#define D_D_VIBRATION_H + +#include "SSystem/SComponent/c_xyz.h" + +class dVibration_c { +public: + dVibration_c(); + ~dVibration_c(); + + int Run(); + bool StartShock(int i_strength, int, cXyz); + bool StartQuake(u8 const*, int, int, cXyz); + bool StartQuake(int, int, cXyz); + int StopQuake(int); + void Kill(); + bool CheckQuake(); + void setDefault(); + void Init(); + void Pause(); + void Remove(); + + u8 temp[0x84]; +}; // Size: 0x84 + +#endif /* D_D_VIBRATION_H */ \ No newline at end of file diff --git a/include/m_Do/m_Do_audio.h b/include/m_Do/m_Do_audio.h new file mode 100644 index 000000000..ddfbc9444 --- /dev/null +++ b/include/m_Do/m_Do_audio.h @@ -0,0 +1,6 @@ +#ifndef M_DO_AUDIO_H +#define M_DO_AUDIO_H + +void mDoAud_setSceneName(const char*, s32, s32); + +#endif /* M_DO_AUDIO_H */ diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 3772bdac6..d0e9ca84d 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -97,6 +97,31 @@ private: STATIC_ASSERT(sizeof(mDoExt_bckAnm) == 0x10); +class mDoExt_McaMorfCallBack1_c { +public: + virtual void execute(u16, J3DTransformInfo*) = 0; +}; + +class mDoExt_3DlineMat_c { +public: + /* 0x0 */ void* field_0x0; + /* 0x4 */ mDoExt_3DlineMat_c* field_0x4; +}; + +class mDoExt_3DlineMatSortPacket : public J3DPacket { +public: + mDoExt_3DlineMatSortPacket() { mp3DlineMat = NULL; } + + void reset() { mp3DlineMat = NULL; } + + void setMat(mDoExt_3DlineMat_c*); + virtual void draw(); + virtual ~mDoExt_3DlineMatSortPacket(); + +private: + /* 0x10 */ mDoExt_3DlineMat_c* mp3DlineMat; +}; + J3DModel* mDoExt_J3DModel__create(J3DModelData* i_modelData, u32 i_modelFlag, u32 i_differedDlistFlag); void mDoExt_modelUpdate(J3DModel* i_model); diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index 658b5a5cc..a14eb803d 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -4,7 +4,13 @@ // #include "d/d_com_inf_game.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "MSL_C/string.h" #include "SSystem/SComponent/c_phase.h" +#include "d/actor/d_a_player.h" +#include "d/d_com_lib_game.h" +#include "f_op/f_op_scene_mng.h" +#include "m_Do/m_Do_audio.h" class J3DModel; @@ -96,8 +102,84 @@ void dComIfG_play_c::itemInit() { } /* 80052400-8005286C .text getLayerNo__14dComIfG_play_cFi */ -void dComIfG_play_c::getLayerNo(int) { - /* Nonmatching */ +// almost +int dComIfG_play_c::getLayerNo(int i_roomNo) { + int layer = dComIfGp_getStartStageLayer(); + + if (layer < 0) { + int hour = dKy_getdaytime_hour(); + if (dKy_checkEventNightStop()) { + layer = 1; + } else { + layer = (hour >= 6 && hour < 18) == 0; + } + + if (strcmp(dComIfGp_getStartStageName(), "sea") == 0) { + if (i_roomNo == 44) { + if (dComIfGs_isEventBit(0x520)) { + return layer | 4; + } else if (dComIfGs_isEventBit(0xE20)) { + return layer | 2; + } else if (dComIfGs_isEventBit(0x101)) { + return 9; + } + } else if (i_roomNo == 11) { + if (dComIfGs_isEventBit(0x2D01)) { + return layer | 4; + } else if (dKy_checkEventNightStop()) { + return layer | 2; + } + } else if (i_roomNo == 1) { + return dComIfGs_isEventBit(0x1820) ? 3 : 1; + } + } else if (strcmp(dComIfGp_getStartStageName(), "A_mori") == 0) { + if (dComIfGs_isEventBit(0xF80)) { + return layer | 2; + } + } else if (strcmp(dComIfGp_getStartStageName(), "Asoko") == 0) { + if (dComIfGs_isEventBit(0x520)) { + return layer | 2; + } + } else if (strcmp(dComIfGp_getStartStageName(), "Hyrule") == 0) { + if (dComIfGs_getTriforceNum() == 8) { + return layer | 4; + } else if (dComIfGs_isEventBit(0x3280)) { + return layer | 2; + } + } else if (strcmp(dComIfGp_getStartStageName(), "Hyroom") == 0) { + if (dComIfGs_getTriforceNum() == 8 && !dComIfGs_isEventBit(0x2C01)) { + return layer | 4; + } else if (dComIfGs_isEventBit(0x3280)) { + return layer | 2; + } else if (dComIfGs_isEventBit(0x3B40)) { + return layer | 6; + } + } else if (strcmp(dComIfGp_getStartStageName(), "kenroom") == 0) { + if (dComIfGs_isEventBit(0x2C01) || + (dComIfGs_isEventBit(0x3802) && !dComIfGs_isEventBit(0x3280))) + { + return layer | 6; + } else if (dComIfGs_getTriforceNum() == 8) { + return layer | 4; + } else if (dComIfGs_isEventBit(0x3802)) { + return layer | 2; + } + } else if (strcmp(dComIfGp_getStartStageName(), "M2tower") == 0) { + if (dComIfGs_isEventBit(0x2D01)) { + return layer | 2; + } + } else if (strcmp(dComIfGp_getStartStageName(), "GanonK") == 0) { + if (!dComIfGs_isEventBit(0x3B02)) { + return 8; + } + } else if (strcmp(dComIfGp_getStartStageName(), "GTower") == 0 && + !dComIfGs_isEventBit(0x4002)) + { + return 8; + } + } + + return layer; } /* 8005286C-800528F4 .text createParticle__14dComIfG_play_cFv */ @@ -262,8 +344,18 @@ void dComIfG_inf_c::ct() { } /* 800531A8-8005326C .text dComIfG_changeOpeningScene__FP11scene_classs */ -void dComIfG_changeOpeningScene(scene_class*, s16) { - /* Nonmatching */ +// matches with stringbase offset +int dComIfG_changeOpeningScene(scene_class* i_scene, s16 i_procName) { + dComIfGp_offEnableNextStage(); + + dComIfGp_setNextStage("sea_T", 0, 44, 0, 0.0f, 0, 1, 0); + mDoAud_setSceneName(dComIfGp_getNextStageName(), dComIfGp_getNextStageRoomNo(), + dComIfGp_getNextStageLayer()); + dComIfGs_setRestartRoomParam(0); + + fopScnM_ChangeReq(i_scene, i_procName, 0, 30); + fopScnM_ReRequest(i_procName, 0); + return 1; } /* 8005326C-800532D8 .text dComIfG_resetToOpening__FP11scene_class */ @@ -272,36 +364,59 @@ void dComIfG_resetToOpening(scene_class*) { } /* 800532D8-80053330 .text phase_1__FPc */ -void phase_1(char*) { - /* Nonmatching */ +// matches with stringbase +int phase_1(char* i_arcName) { + return !dComIfG_setObjectRes(i_arcName, (u8)0, NULL) ? cPhs_ERROR_e : cPhs_NEXT_e; } /* 80053330-80053388 .text phase_2__FPc */ -void phase_2(char*) { - /* Nonmatching */ +int phase_2(char* i_arcName) { + int syncStatus = dComIfG_syncObjectRes(i_arcName); + + if (syncStatus < 0) { + return cPhs_ERROR_e; + } else { + return syncStatus > 0 ? 0 : 2; + } } /* 80053388-80053390 .text phase_3__FPc */ -int phase_3(char*) { +int phase_3(char* i_arcName) { return cPhs_COMPLEATE_e; } /* 80053390-800533D0 .text dComIfG_resLoad__FP30request_of_phase_process_classPCc */ -void dComIfG_resLoad(request_of_phase_process_class*, const char*) { - /* Nonmatching */ +int dComIfG_resLoad(request_of_phase_process_class* i_phase, const char* i_arcName) { + 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) { + return cPhs_COMPLEATE_e; + } + + return dComLbG_PhaseHandler(i_phase, l_method, (void*)i_arcName); } /* 800533D0-8005347C .text dComIfG_resDelete__FP30request_of_phase_process_classPCc */ -void dComIfG_resDelete(request_of_phase_process_class*, const char*) { - /* Nonmatching */ +// matches with stringbase +int dComIfG_resDelete(request_of_phase_process_class* i_phase, const char* i_resName) { + JUT_ASSERT(1048, i_phase->id != 1); + + if (i_phase->id == cPhs_NEXT_e) { + dComIfG_deleteObjectResMain(i_resName); + i_phase->id = cPhs_INIT_e; + } + + return 0; } /* 8005347C-800534C4 .text dComIfGp_getReverb__Fi */ -void dComIfGp_getReverb(int) { +s8 dComIfGp_getReverb(int) { /* Nonmatching */ } -/* 800534C4-800535B8 .text dComIfGd_setSimpleShadow2__FP4cXyzffR13cBgS_PolyInfosfP9_GXTexObj */ +/* 800534C4-800535B8 .text dComIfGd_setSimpleShadow2__FP4cXyzffR13cBgS_PolyInfosfP9_GXTexObj + */ void dComIfGd_setSimpleShadow2(cXyz*, f32, f32, cBgS_PolyInfo&, s16, f32, _GXTexObj*) { /* Nonmatching */ } @@ -327,8 +442,28 @@ void dComIfGp_getRoomArrow(int) { } /* 800537C8-8005388C .text dComIfGp_setNextStage__FPCcsScScfUliSc */ -void dComIfGp_setNextStage(const char*, s16, s8, s8, f32, u32, int, s8) { - /* Nonmatching */ +void dComIfGp_setNextStage(const char* i_stageName, s16 i_point, s8 i_roomNo, s8 i_layer, + f32 i_lastSpeed, u32 i_lastMode, int i_setPoint, s8 i_wipe) { + g_dComIfG_gameInfo.play.setNextStage(i_stageName, i_roomNo, i_point, i_layer, i_wipe); + + if (daPy_getPlayerLinkActorClass() != NULL) { + u32 mode = daPy_getPlayerLinkActorClass()->field_0x2a0; + + if (mode & 1) { + i_lastMode |= 0x8000; + } + + i_lastMode |= daPy_getPlayerLinkActorClass()->field_0x354e << 0x10; + + if (mode & 0x8000) { + i_lastMode |= 0x4000; + } + } + + g_dComIfG_gameInfo.info.getRestart().setLastSceneInfo(i_lastSpeed, i_lastMode); + if (i_setPoint) { + dComIfGs_setStartPoint(i_point); + } } /* 8005388C-80053918 .text dComIfGs_onStageTbox__Fii */ @@ -366,8 +501,10 @@ void dComIfGs_checkGetItemNum(u8) { /* Nonmatching */ } -/* 80054578-8005468C .text dComIfGd_setShadow__FUlScP8J3DModelP4cXyzffffR13cBgS_PolyInfoP12dKy_tevstr_csfP9_GXTexObj */ -void dComIfGd_setShadow(u32, s8, J3DModel*, cXyz*, f32, f32, f32, f32, cBgS_PolyInfo&, dKy_tevstr_c*, s16, f32, _GXTexObj*) { +/* 80054578-8005468C .text + * dComIfGd_setShadow__FUlScP8J3DModelP4cXyzffffR13cBgS_PolyInfoP12dKy_tevstr_csfP9_GXTexObj */ +void dComIfGd_setShadow(u32, s8, J3DModel*, cXyz*, f32, f32, f32, f32, cBgS_PolyInfo&, + dKy_tevstr_c*, s16, f32, _GXTexObj*) { /* Nonmatching */ } @@ -393,7 +530,12 @@ void dComIfGs_setGameStartStage() { /* 80054C70-80054CC0 .text dComIfGs_gameStart__Fv */ void dComIfGs_gameStart() { - /* Nonmatching */ + dComIfGp_offEnableNextStage(); + + s8 roomNo = g_dComIfG_gameInfo.info.getPlayer().getPlayerReturnPlace().getRoomNo(); + s16 point = g_dComIfG_gameInfo.info.getPlayer().getPlayerReturnPlace().getPlayerStatus(); + char* name = g_dComIfG_gameInfo.info.getPlayer().getPlayerReturnPlace().getName(); + dComIfGp_setNextStage(name, point, roomNo, -1, 0.0f, 0, 1, 0); } /* 80054CC0-80054E9C .text dComIfGs_copyPlayerRecollectionData__Fv */ @@ -420,4 +562,3 @@ void dComIfGs_exchangePlayerRecollectionData() { void dComIfGs_setSelectEquip(int, u8) { /* Nonmatching */ } -