diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index edef6758e..da3c91779 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -1495,8 +1495,8 @@ public: u32 getDayNightParamData(); void setTactModel(); BOOL checkNpcStatus(); - int getTactPlayRightArmAnm(s32); - int getTactPlayLeftArmAnm(s32); + u16 getTactPlayRightArmAnm(s32); + u16 getTactPlayLeftArmAnm(s32); BOOL checkEndTactMusic() const; f32 getTactMetronomeRate(); BOOL checkTactLastInput(); diff --git a/include/d/actor/d_a_ship.h b/include/d/actor/d_a_ship.h index 1022d10c3..7714633c9 100644 --- a/include/d/actor/d_a_ship.h +++ b/include/d/actor/d_a_ship.h @@ -18,6 +18,11 @@ public: bool checkStateFlg(daSHIP_SFLG flag) const { return m0358 & flag; } bool checkHeadNoDraw() const { return checkStateFlg(daSFLG_HEAD_NO_DRAW_e); } + int getTactWarpPosNum() const { return mTactWarpPosNum; } + void setTactWarpPosNum(int num) { mTactWarpPosNum = num; } + u32 getTactWarpID() { return mTactWarpID; } + void setTactWarpID(u32 warpID) { mTactWarpID = warpID; } + bool unknown_inline_TODO() const { return m041C || m0424; } void checkCraneMode() const {} @@ -51,8 +56,6 @@ public: void getSailAngle() {} void getSailOn() {} void getTactJntMtx() {} - void getTactWarpID() {} - void getTactWarpPosNum() const {} void getTillerAngleRate() {} void getTillerTopPosP() {} void getTornadoActor() {} @@ -86,8 +89,6 @@ public: void setStartModeWarp() {} void setSteerMove() {} void setTactWarp() {} - void setTactWarpID(u32 warpID) { m042C = warpID; } - void setTactWarpPosNum(int) {} void bodyJointCallBack(int); void cannonJointCallBack(int); @@ -219,7 +220,8 @@ public: /* 0x03B4 */ s16 m03B4; /* 0x03B6 */ u8 m03B6[0x03B8 - 0x03B6]; /* 0x03B8 */ s16 m03B8; - /* 0x03BA */ u8 m03BA[0x03CC - 0x03BA]; + /* 0x03BA */ u8 m03BA[0x03C8 - 0x03BA]; + /* 0x03C8 */ int mTactWarpPosNum; /* 0x03CC */ int m03CC; /* 0x03D0 */ u8 m03D0[0x03D8 - 0x03D0]; /* 0x03D8 */ f32 m03D8; @@ -241,7 +243,7 @@ public: /* 0x0420 */ u32 m0420; /* 0x0424 */ fopAc_ac_c* m0424; /* 0x0428 */ u8 m0428[0x042C - 0x0428]; - /* 0x042C */ u32 m042C; + /* 0x042C */ u32 mTactWarpID; /* 0x0430 */ u8 m0430[0x0434 - 0x0430]; /* 0x0434 */ cXyz* m0434; /* 0x0438 */ cXyz m0438; diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 7c001360d..903c66044 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -60,6 +60,7 @@ enum daPy__PlayerStatus1 { daPyStts1_DEKU_LEAF_FAN_e = 0x00000040, daPyStts1_SAIL_e = 0x00000400, daPyStts1_UNK8000_e = 0x00008000, + daPyStts1_UNK10000_e = 0x00010000, daPyStts1_UNK40000_e = 0x00040000, }; @@ -335,6 +336,7 @@ public: int getTimerLimitTimeMs() { return mTimerInfo.mTimerLimitTimeMs; } void setWaveFrame(u16 frame) { mTimerInfo.mWaveFrame = frame; } u16 getWaveFrame() { return mTimerInfo.mWaveFrame; } + void fmapOpenOn() { mFmapOpen = true; } s16 getItemMagicCount() { return mItemMagicCount; } void setItemMagicCount(s16 magic) { mItemMagicCount += magic; } @@ -496,6 +498,7 @@ public: void clearBaseAnimeID() { mMesgAnime = 0xFF; } u8 getNowAnimeID() { return mMesgAnimeTagInfo; } void clearNowAnimeID() { mMesgAnimeTagInfo = 0xFF; } + u8 getMesgStatus() { return mMesgStatus; } u8 getButtonMode() { return mButtonMode; } void setButtonMode(u8 mode) { mButtonMode = mode; } @@ -598,7 +601,7 @@ public: /* 0x4926 */ s16 mRupyCountDisplay; /* 0x4928 */ u8 field_0x4928; /* 0x4929 */ u8 field_0x4929; - /* 0x492A */ u8 field_0x492a; + /* 0x492A */ u8 mMesgStatus; /* 0x492B */ u8 mbCamOverrideFarPlane; /* 0x492C */ u8 field_0x492c; /* 0x492D */ u8 field_0x492d; @@ -626,7 +629,7 @@ public: /* 0x4949 */ u8 mMesgCancelButton; /* 0x494A */ u8 field_0x494a[6]; /* 0x4950 */ u8 mMelodyNum; - /* 0x4951 */ u8 field_0x4951; + /* 0x4951 */ bool mFmapOpen; /* 0x4952 */ u8 field_0x4952; /* 0x4953 */ u8 field_0x4953; /* 0x4954 */ u8 field_0x4954; @@ -1100,8 +1103,22 @@ inline s16 dComIfGs_getTurnRestartShipAngleY() { return g_dComIfG_gameInfo.save.getTurnRestart().getShipAngleY(); } +// The "HasShip" name is fake. These inlines don't exist in the demo, but must exist in the final release. +inline BOOL dComIfGs_getTurnRestartHasShip() { + return g_dComIfG_gameInfo.save.getTurnRestart().getHasShip(); +} + +inline void dComIfGs_setTurnRestartHasShip(BOOL hasShip) { + g_dComIfG_gameInfo.save.getTurnRestart().setHasShip(hasShip); +} + inline void dComIfGs_setTurnRestart(const cXyz& i_pos, s16 i_angle, s8 i_roomNo, u32 i_param) { - g_dComIfG_gameInfo.save.getTurnRestart().set(i_pos, i_angle, i_roomNo, i_param, i_pos, i_angle, 0); + g_dComIfG_gameInfo.save.getTurnRestart().set(i_pos, i_angle, i_roomNo, i_param, i_pos, i_angle, FALSE); +} + +// Note: The "BOOL i_hasShip" parameter doesn't exist in the demo, but was added for the final release. +inline void dComIfGs_setTurnRestart(const cXyz& i_pos, s16 i_angle, s8 i_roomNo, u32 i_param, const cXyz& i_shipPos, s16 i_shipAngle, BOOL i_hasShip) { + g_dComIfG_gameInfo.save.getTurnRestart().set(i_pos, i_angle, i_roomNo, i_param, i_shipPos, i_shipAngle, i_hasShip); } inline u8 dComIfGs_getPlayerPriestFlag() { @@ -2434,6 +2451,10 @@ inline void dComIfGp_clearMesgAnimeTagInfo() { g_dComIfG_gameInfo.play.clearNowAnimeID(); } +inline u8 dComIfGp_getMesgStatus() { + return g_dComIfG_gameInfo.play.getMesgStatus(); +} + inline void dComIfGp_setPictureBoxData(JKRAramBlock* aramHeap, int i) { g_dComIfG_gameInfo.play.setPictureBoxData(aramHeap, i); } @@ -2571,6 +2592,14 @@ inline u8 dComIfGp_event_getMode() { return g_dComIfG_gameInfo.play.getEvent().getMode(); } +inline u8 dComIfGp_event_getTactFreeMStick(int which) { + return g_dComIfG_gameInfo.play.getEvent().getTactFreeMStick(which); +} + +inline u8 dComIfGp_event_getTactFreeCStick(int which) { + return g_dComIfG_gameInfo.play.getEvent().getTactFreeCStick(which); +} + // Note: Some of the below functions call g_dComIfG_gameInfo.play.getEvtManager(), while others use // dComIfGp_getPEvtManager(), without a clear pattern for which was chosen. @@ -3216,6 +3245,8 @@ inline int dComIfG_getTimerNowTimeMs() { return g_dComIfG_gameInfo.play.getTimer inline void dComIfGp_setWaveFrame(u16 frame) { g_dComIfG_gameInfo.play.setWaveFrame(frame); } inline u16 dComIfGp_getWaveFrame() { return g_dComIfG_gameInfo.play.getWaveFrame(); } +inline void dComIfGp_fmapOpenOn() { g_dComIfG_gameInfo.play.fmapOpenOn(); } + inline int dComIfG_getTimerRestTimeMs() { int limit = g_dComIfG_gameInfo.play.getTimerLimitTimeMs(); int now = g_dComIfG_gameInfo.play.getTimerNowTimeMs(); diff --git a/include/d/d_save.h b/include/d/d_save.h index 1cb90905a..995b39cb2 100644 --- a/include/d/d_save.h +++ b/include/d/d_save.h @@ -708,6 +708,9 @@ public: s8 getRoomNo() { return mRoomNo; } cXyz& getShipPos() { return mShipPos; } s16 getShipAngleY() { return mShipAngleY; } + // The "HasShip" name is fake. These inlines don't exist in the demo, but probably do in the final release. + BOOL getHasShip() { return mHasShip; } + void setHasShip(BOOL hasShip) { mHasShip = hasShip; } /* 0x00 */ cXyz mPosition; /* 0x0C */ u32 mParam; @@ -717,7 +720,7 @@ public: /* 0x14 */ u8 field_0x14[0x24 - 0x14]; /* 0x24 */ cXyz mShipPos; /* 0x30 */ s16 mShipAngleY; - /* 0x34 */ int field_0x34; + /* 0x34 */ BOOL mHasShip; }; // Size: 0x38 class dSv_save_c { diff --git a/include/d/d_stage.h b/include/d/d_stage.h index c80cf7f7e..91167bea9 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -1080,6 +1080,7 @@ inline u32 dStage_FileList_dt_GetParticleNo(dStage_FileList_dt_c* i_fili) { bool dStage_chkPlayerId(int playerId, int room_no); int dStage_changeScene(int i_exitId, f32 speed, u32 mode, s8 room_no); void dStage_restartRoom(u32 roomParam, u32 mode); +void dStage_turnRestart(); bool dStage_setShipPos(int param_0, int i_roomNo); BOOL dStage_checkRestart(); void dStage_Create(); diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index 3559f2881..411c0dcc5 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -503,6 +503,8 @@ s32 fopAcM_orderSpeakEvent(fopAc_ac_c* i_actor); s32 fopAcM_orderDoorEvent(fopAc_ac_c*, fopAc_ac_c*); s32 fopAcM_orderCatchEvent(fopAc_ac_c*, fopAc_ac_c*); s32 fopAcM_orderOtherEvent2(fopAc_ac_c* i_this, char* pEventName, u16 flag, u16 hind = -1); +s32 fopAcM_orderChangeEvent(fopAc_ac_c* i_this, char* pEventName, u16 flag, u16 hind); +s32 fopAcM_orderChangeEvent(fopAc_ac_c* i_this, fopAc_ac_c* i_partner, char* pEventName, u16 flag, u16 hind); s32 fopAcM_orderChangeEventId(fopAc_ac_c* i_this, s16 eventIdx, u16 flag, u16 hind); s32 fopAcM_orderChangeEventId(fopAc_ac_c* i_this, fopAc_ac_c* i_partner, s16 eventIdx, u16 flag, u16 hind); s32 fopAcM_orderOtherEventId(fopAc_ac_c* actor, s16 eventIdx, u8 mapToolID = -1, u16 hind = -1, diff --git a/include/m_Do/m_Do_audio.h b/include/m_Do/m_Do_audio.h index e8d15c155..79b04eade 100644 --- a/include/m_Do/m_Do_audio.h +++ b/include/m_Do/m_Do_audio.h @@ -238,14 +238,23 @@ inline void mDoAud_tact_ambientPlay() { mDoAud_zelAudio_c::getTact().ambientPlay(); } +inline void mDoAud_tact_setStickPos(s32 mainStick, s32 cStick) { + mDoAud_zelAudio_c::getTact().setStickPos(mainStick, cStick); +} + +inline void mDoAud_tact_playArmSwing(s32 mainStick, s32 cStick) { + mDoAud_zelAudio_c::getTact().playArmSwing(mainStick, cStick); +} + +inline void mDoAud_tact_stopArmSwing() { + mDoAud_zelAudio_c::getTact().stopArmSwing(); +} + inline void mDoAud_tact_armSoundPlay(s32) {} inline void mDoAud_tact_judge(s32, s32) {} inline void mDoAud_tact_melodyPlay(s32) {} inline void mDoAud_tact_melodyStop() {} inline void mDoAud_tact_metronomePlay(s32, s32) {} -inline void mDoAud_tact_playArmSwing(s32, s32) {} -inline void mDoAud_tact_setStickPos(s32, s32) {} -inline void mDoAud_tact_stopArmSwing() {} inline BOOL mDoAud_checkCbPracticePlay() { return mDoAud_zelAudio_c::getInterface()->checkCbPracticePlay(); diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index 684fa1e9f..410dcb9ef 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -2260,7 +2260,7 @@ BOOL daPy_lk_c::procCall() { current.angle.y = shape_angle.y; } - if (mFrameCtrlUnder[0].getRate() < 0.01f) { + if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) { if (dComIfGp_getCb1Player()) { daPy_py_c* partner = (daPy_py_c*)dComIfGp_getCb1Player(); partner->onNpcCallCommand(); diff --git a/src/d/actor/d_a_player_tact.inc b/src/d/actor/d_a_player_tact.inc index 3b542a81e..1f12cae17 100644 --- a/src/d/actor/d_a_player_tact.inc +++ b/src/d/actor/d_a_player_tact.inc @@ -60,7 +60,7 @@ BOOL daPy_lk_c::checkNpcStatus() { } /* 8014D8F4-8014D938 .text getTactPlayRightArmAnm__9daPy_lk_cFl */ -int daPy_lk_c::getTactPlayRightArmAnm(s32 r4) { +u16 daPy_lk_c::getTactPlayRightArmAnm(s32 r4) { if (r4 == 1) return LKANM_BCK_ACTIONTAKTRUP; else if (r4 == 3) @@ -74,7 +74,7 @@ int daPy_lk_c::getTactPlayRightArmAnm(s32 r4) { } /* 8014D938-8014D97C .text getTactPlayLeftArmAnm__9daPy_lk_cFl */ -int daPy_lk_c::getTactPlayLeftArmAnm(s32 r4) { +u16 daPy_lk_c::getTactPlayLeftArmAnm(s32 r4) { if (r4 == 1) return LKANM_BCK_WAITTAKTLHANDU; else if (r4 == 3) @@ -363,21 +363,177 @@ BOOL daPy_lk_c::procTactPlay() { } /* 8014EFD4-8014F210 .text procTactPlayEnd_init__9daPy_lk_cFi */ -BOOL daPy_lk_c::procTactPlayEnd_init(int) { - /* Nonmatching */ +BOOL daPy_lk_c::procTactPlayEnd_init(int r30) { + int r28 = checkShipRideUseItem(0); + commonProcInit(daPyProc_TACT_PLAY_END_e); + dComIfGp_setPlayerStatus1(0, daPyStts1_WIND_WAKER_CONDUCT_e); + initShipRideUseItem(r28, 2); + m3570 = r30; + mVelocity = 0.0f; + setBlendMoveAnime(daPy_HIO_basic_c0::m.field_0xC); + + if (r30 == -1) { + dCam_getBody()->EndEventCamera(fopAcM_GetID(this)); + fopAcM_orderChangeEvent(this, fopAcM_SearchByID(mTactZevPartnerPID), m3494, 0, -1); + mDemo.setDemoType(2); + } else if (r30 == 0) { + dCam_getBody()->EndEventCamera(fopAcM_GetID(this)); + fopAcM_create(PROC_WBIRD, NULL, ¤t.pos, dComIfGp_roomControl_getStayNo()); + } else if (r30 == 2) { + dCam_getBody()->EndEventCamera(fopAcM_GetID(this)); + dComIfGp_event_setTalkPartner(dComIfGp_getCb1Player()); + fopAcM_orderChangeEvent(this, dComIfGp_getCb1Player(), l_tact_event_label, 0, -1); + mDoAud_seStart(JA_SE_CTRL_LINK_TO_NPC, 0); + } else if (r30 == 5) { + dCam_getBody()->EndEventCamera(fopAcM_GetID(this)); + fopAcM_orderChangeEvent(this, l_tact_night_event_label, 0, -1); + } + + m3574 = 0; + m34D6 = shape_angle.y + 0x4000; + + return TRUE; } /* 8014F210-8014F4DC .text procTactPlayEnd__9daPy_lk_cFv */ BOOL daPy_lk_c::procTactPlayEnd() { - /* Nonmatching */ + if (dComIfGp_checkPlayerStatus0(0, daPyStts1_UNK10000_e)) { + setShipRidePos(0); + if (m3570 == 0 && !dComIfGp_evmng_startCheck(l_tact_wind_change_event_label) && !dComIfGp_evmng_startCheck(l_tact_wind_change_event_label2)) { + cLib_addCalcAngleS(&shape_angle.y, m34D6, 5, 0x1000, 0x100); + } + } + + if (m3570 == 0) { + dComIfGp_setAStatus(0x07); + } else if (m3570 == 5) { + if (dComIfGp_evmng_endCheck(l_tact_night_event_label) && !checkNoResetFlg0(daPyFlg0_UNK4000)) { + onNoResetFlg0(daPyFlg0_UNK4000); + fopAc_ac_c* ship; + BOOL hasShip; + if (dComIfGp_getShipActor() != NULL) { + ship = dComIfGp_getShipActor(); + hasShip = TRUE; + } else { + ship = this; // Use Link's position and angle for the ship if it doesn't exist. + hasShip = FALSE; + } + dComIfGs_setTurnRestart( + current.pos, shape_angle.y, fopAcM_GetRoomNo(this), getDayNightParamData(), + ship->current.pos, ship->shape_angle.y, hasShip + ); + if (dComIfG_getTimerMode() == 3 && dComIfG_getTimerPtr() != NULL) { + dComIfG_getTimerPtr()->deleteRequest(); + } + dStage_turnRestart(); + mDoAud_taktModeMuteOff(); + } + } else if (m3570 == 2) { + if (dComIfGp_evmng_endCheck(l_tact_event_label)) { + dComIfGp_event_reset(); + changePlayer(dComIfGp_getCb1Player()); + endDemoMode(); + } + } else if (m3570 == 1) { + if (m3574 == 0) { + if (dComIfGp_getMesgStatus() == 0) { + dComIfGp_fmapOpenOn(); + m3574 = 1; + } + } else { + dCam_getBody()->EndEventCamera(fopAcM_GetID(this)); + daShip_c* ship = (daShip_c*)dComIfGp_getShipActor(); + if (ship == NULL || ship->getTactWarpPosNum() < 0) { + dComIfGp_event_reset(); + endDemoMode(); + if (ship != NULL) { + fopAcM_delete(ship->getTactWarpID()); + ship->setTactWarpID(fpcM_ERROR_PROCESS_ID_e); + } + } else { + if (dComIfG_getTimerMode() == 3 && dComIfG_getTimerPtr() != NULL) { + dComIfG_getTimerPtr()->deleteRequest(); + } + procShipPaddle_init(); + ship->m034D = 0xE; // TODO inline + } + } + } + + return TRUE; } /* 8014F4DC-8014F690 .text procTactPlayOriginal_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procTactPlayOriginal_init() { - /* Nonmatching */ + if (mCurProc == daPyProc_TACT_PLAY_ORIGINAL_e) { + return TRUE; + } + commonProcInit(daPyProc_TACT_PLAY_ORIGINAL_e); + dComIfGp_setPlayerStatus1(0, daPyStts1_WIND_WAKER_CONDUCT_e); + m34D0 = 0; + daPy_matAnm_c::offMabaFlg(); + daPy_matAnm_c::setMabaTimer(1); + setSingleMoveAnime(ANM_WAITTAKT, daPy_HIO_tact_c0::m.field_0x0, 0.0f, -1, daPy_HIO_tact_c0::m.field_0x4); + + m3570 = dComIfGp_event_getTactFreeMStick(m34D0); + setActAnimeUpper(getTactPlayRightArmAnm(m3570), UPPER_MOVE1_e, 0.0f, 0.0f, -1, -1.0f); + mAnmRatioUpper[UPPER_MOVE1_e].setRatio(0.0f); + + m3574 = dComIfGp_event_getTactFreeCStick(m34D0); + setActAnimeUpper(getTactPlayLeftArmAnm(m3574), UPPER_MOVE2_e, 0.0f, 0.0f, -1, -1.0f); + mAnmRatioUpper[UPPER_MOVE2_e].setRatio(0.0f); + + setTextureAnime(0, 0); + m3530 = 3; + mDoAud_tact_setStickPos(m3570, m3574); + mDoAud_tact_playArmSwing(m3570, m3574); + setTactModel(); + m32E4.makeEmitter(0x51, mpHeldItemModel->getBaseTRMtx(), ¤t.pos, NULL); + m34D6 = 0xF; + m34DA = 0; + mDoAud_taktModeMute(); + + return TRUE; } /* 8014F690-8014F8A0 .text procTactPlayOriginal__9daPy_lk_cFv */ BOOL daPy_lk_c::procTactPlayOriginal() { - /* Nonmatching */ + mDoAud_seStart(JA_SE_LK_WTAKT_USING, 0); + + if (m_old_fdata->getOldFrameRate() < 0.01f) { + if (m34D6 > 0) { + m34D6--; + if (m34D6 == 0) { + m34D0++; + } + } else if (m34D0 == 5) { + dComIfGp_evmng_cutEnd(mStaffIdx); + mDoAud_tact_stopArmSwing(); + } else { + m34D6 = 0xF; + + m3570 = dComIfGp_event_getTactFreeMStick(m34D0); + setActAnimeUpper(getTactPlayRightArmAnm(m3570), UPPER_MOVE1_e, daPy_HIO_tact_c0::m.field_0x8, 0.0f, -1, 5.0f); + mAnmRatioUpper[UPPER_MOVE1_e].setRatio(0.0f); + if (m3570 == 0 || m3570 == 2 || m3570 == 4) { + mFrameCtrlUpper[UPPER_MOVE1_e].setRate(daPy_HIO_tact_c0::m.field_0x0); + mFrameCtrlUpper[UPPER_MOVE1_e].setFrame(mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()); + } + + m3574 = dComIfGp_event_getTactFreeCStick(m34D0); + setActAnimeUpper(getTactPlayLeftArmAnm(m3574), UPPER_MOVE2_e, daPy_HIO_tact_c0::m.field_0x0, 0.0f, -1, 5.0f); + mAnmRatioUpper[UPPER_MOVE2_e].setRatio(0.0f); + mFrameCtrlUpper[UPPER_MOVE2_e].setFrame(mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()); + + mDoAud_tact_setStickPos(m3570, m3574); + mDoAud_tact_playArmSwing(m3570, m3574); + } + } + + if (m34D6 != 0 && m34DA != 0) { + mDoAud_tact_play(); + } + m34DA = 1; + + return TRUE; } diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index 697650ea3..94af619ff 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -100,7 +100,7 @@ void dComIfG_play_c::itemInit() { mRupyCountDisplay = 0; field_0x4928 = 0; field_0x4929 = 0; - field_0x492a = 0; + mMesgStatus = 0; mbCamOverrideFarPlane = 0; field_0x492c = 0; field_0x492d = 0; @@ -142,7 +142,7 @@ void dComIfG_play_c::itemInit() { } mMelodyNum = 0; - field_0x4951 = 0; + mFmapOpen = false; field_0x4952 = 0; field_0x4953 = 0; field_0x4954 = 0; diff --git a/src/d/d_gameover.cpp b/src/d/d_gameover.cpp index 71a120785..5aa8ac2cf 100644 --- a/src/d/d_gameover.cpp +++ b/src/d/d_gameover.cpp @@ -143,7 +143,7 @@ void dDlst_Gameover_CAPTURE_c::draw() { /* 8018E4B4-8018E77C .text _create__11dGameover_cFv */ s32 dGameover_c::_create() { s32 rt = dComIfG_resLoad(&mPhs, "Gover"); - if (dMenu_flag() || (dComIfGp_isHeapLockFlag() != 0 && dComIfGp_isHeapLockFlag() != 4) || g_dComIfG_gameInfo.play.field_0x492a != 0) + if (dMenu_flag() || (dComIfGp_isHeapLockFlag() != 0 && dComIfGp_isHeapLockFlag() != 4) || dComIfGp_getMesgStatus() != 0) return cPhs_INIT_e; if (rt == cPhs_COMPLEATE_e) { diff --git a/src/d/d_place_name.cpp b/src/d/d_place_name.cpp index 85589be5f..59afc0c40 100644 --- a/src/d/d_place_name.cpp +++ b/src/d/d_place_name.cpp @@ -135,7 +135,7 @@ void dPlace_name_c::draw() { s32 dPn_c::_create() { s32 rt = dComIfG_resLoad(&mPhs, "PName"); - if (dMenu_flag() || (dComIfGp_isHeapLockFlag() != 0 && dComIfGp_isHeapLockFlag() != 10) || g_dComIfG_gameInfo.play.field_0x492a != 0) + if (dMenu_flag() || (dComIfGp_isHeapLockFlag() != 0 && dComIfGp_isHeapLockFlag() != 10) || dComIfGp_getMesgStatus() != 0) return cPhs_INIT_e; if (mState == 0) { diff --git a/src/d/d_save.cpp b/src/d/d_save.cpp index 8dbf5210d..1cfe3efcb 100644 --- a/src/d/d_save.cpp +++ b/src/d/d_save.cpp @@ -1328,7 +1328,7 @@ void dSv_restart_c::setRestartOption(s8 param_0, cXyz* i_pos, s16 i_angle, s8 i_ /* 8005D5B4-8005D604 .text set__17dSv_turnRestart_cFRC4cXyzsScUlRC4cXyzsi */ void dSv_turnRestart_c::set(const cXyz& i_pos, s16 i_angle, s8 i_roomNo, u32 i_param, - const cXyz& i_shipPos, s16 i_shipAngle, int param_6) { + const cXyz& i_shipPos, s16 i_shipAngle, BOOL i_hasShip) { mPosition = i_pos; mAngleY = i_angle; mRoomNo = i_roomNo; @@ -1336,7 +1336,7 @@ void dSv_turnRestart_c::set(const cXyz& i_pos, s16 i_angle, s8 i_roomNo, u32 i_p field_0x13 = 0; mShipPos = i_shipPos; mShipAngleY = i_shipAngle; - field_0x34 = param_6; + mHasShip = i_hasShip; } /* 8005D604-8005D660 .text init__10dSv_info_cFv */ diff --git a/src/d/d_stage.cpp b/src/d/d_stage.cpp index f12cfda39..c7ccf9363 100644 --- a/src/d/d_stage.cpp +++ b/src/d/d_stage.cpp @@ -1842,18 +1842,13 @@ bool dStage_setShipPos(int param_0, int i_roomNo) { dComIfGp_setShipRoomId(0xFF); } - // g_dComIfG_gameInfo.save.getTurnRestart().field_0x34 probably an inline, idk which though - dComIfG_inf_c& gameinfo = g_dComIfG_gameInfo; // fakematch - if (dComIfGp_getStartStagePoint() == -3 && - g_dComIfG_gameInfo.save.getTurnRestart().field_0x34 != 0) - { + if (dComIfGp_getStartStagePoint() == -3 && dComIfGs_getTurnRestartHasShip()) { daShip_c* ship_p = (daShip_c*)fopAcM_SearchByName(PROC_SHIP); if (ship_p != NULL) { - ship_p->initStartPos(&gameinfo.save.getTurnRestart().getShipPos(), - dComIfGs_getTurnRestartShipAngleY()); + ship_p->initStartPos(&dComIfGs_getTurnRestartShipPos(), dComIfGs_getTurnRestartShipAngleY()); } - g_dComIfG_gameInfo.save.getTurnRestart().field_0x34 = 0; + dComIfGs_setTurnRestartHasShip(FALSE); } if (param_0 != 0xFF) {