From cc79561051182a73c6723ff49d55dda5a3884732 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Fri, 10 Nov 2023 23:23:05 -0800 Subject: [PATCH] d_com_inf_game minor progress --- include/d/d_com_inf_game.h | 31 ++++++++++++++++++++++++++++- include/d/d_save.h | 3 ++- src/d/d_com_inf_game.cpp | 40 +++++++++++++++++++++++++++++--------- src/d/d_save.cpp | 8 ++++---- 4 files changed, 67 insertions(+), 15 deletions(-) diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 07a087c47..5b59644bb 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -366,6 +366,10 @@ public: u8 getShipId() { return mShipId; } u8 getShipRoomId() { return mShipRoomId; } + u8* getPlayerInfoBuffer() { return mPlayerInfoBuffer; } + void setPlayerInfoBufferStageNo(u8 i_stageno) { mPlayerInfoBufferStageNo = i_stageno; } + u8 getPlayerInfoBufferStageNo() { return mPlayerInfoBufferStageNo; } + void setAgb(fopAc_ac_c* i_agb) { mpAgb = (daAgb_c*)i_agb; } daAgb_c* getAgb() { return mpAgb; } @@ -618,7 +622,8 @@ public: /* 0x4980 */ int mMesgCameraTagInfo; /* 0x4984 */ int field_0x4984; /* 0x4988 */ int field_0x4988[10]; - /* 0x49B0 */ u8 field_0x49B0[0x4A24 - 0x49B0]; + /* 0x49B0 */ u8 mPlayerInfoBuffer[0x4A20 - 0x49B0]; + /* 0x4A20 */ u8 mPlayerInfoBufferStageNo; /* 0x4A24 */ daAgb_c* mpAgb; /* 0x4A28 */ u32 mPlayerStatus[2][2]; /* 0x4A38 */ u8 field_0x4A38[0x4A3A - 0x4A38]; @@ -1301,6 +1306,18 @@ inline u8 dComIfGs_getKeyNum() { return g_dComIfG_gameInfo.save.getMemory().getBit().getKeyNum(); } +inline dSv_player_status_c_c * dComIfGs_getpPlayerStatusC(u32 i_idx) { + return g_dComIfG_gameInfo.save.getPlayer().getpPlayerStatusC(i_idx); +} + +inline dSv_player_collect_c * dComIfGs_getpCollect() { + return g_dComIfG_gameInfo.save.getPlayer().getpCollect(); +} + +inline dSv_player_bag_item_record_c * dComIfGs_getpBagItemRecord() { + return g_dComIfG_gameInfo.save.getPlayer().getpBagItemRecord(); +} + u8 dComIfGs_checkGetItemNum(u8 i_itemNo); BOOL dComIfGs_checkSeaLandingEvent(s8 i_roomNo); @@ -1694,6 +1711,18 @@ inline u8 dComIfGp_getShipRoomId() { return g_dComIfG_gameInfo.play.getShipRoomId(); } +inline u8* dComIfGp_getPlayerInfoBuffer() { + return g_dComIfG_gameInfo.play.getPlayerInfoBuffer(); +} + +inline void dComIfGp_setPlayerInfoBufferStageNo(u8 i_stageno) { + g_dComIfG_gameInfo.play.setPlayerInfoBufferStageNo(i_stageno); +} + +inline u8 dComIfGp_getPlayerInfoBufferStageNo() { + return g_dComIfG_gameInfo.play.getPlayerInfoBufferStageNo(); +} + inline void dComIfGp_setAgb(fopAc_ac_c* i_agb) { g_dComIfG_gameInfo.play.setAgb(i_agb); } diff --git a/include/d/d_save.h b/include/d/d_save.h index 53ad456a1..746b4ce6a 100644 --- a/include/d/d_save.h +++ b/include/d/d_save.h @@ -224,6 +224,7 @@ public: void onCollect(int, u8); void offCollect(int, u8); BOOL isCollect(int, u8); + void setCollect(int idx, u8 byte) { mCollect[idx] = byte; } void onTact(u8); BOOL isTact(u8); void onTriforce(u8); @@ -232,7 +233,7 @@ public: BOOL isSymbol(u8); int getTriforceNum(); - /* 0x0 */ u8 field_0x0[8]; + /* 0x0 */ u8 mCollect[8]; /* 0x8 */ u8 field_0x8; /* 0x9 */ u8 mTact; /* 0xA */ u8 mTriforce; diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index 7a57871ed..afab328fa 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -1211,7 +1211,7 @@ void dComIfGs_gameStart() { void dComIfGs_copyPlayerRecollectionData() { /* Nonmatching */ s32 tbl; - u8 buf[0x70]; + dSv_player_status_c_c stts; if (dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == 3) { if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 3) @@ -1228,19 +1228,41 @@ void dComIfGs_copyPlayerRecollectionData() { return; } - memcpy(&buf[0x00], &g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusA(), 0x18); - memcpy(&buf[0x18], &g_dComIfG_gameInfo.save.getPlayer().getItem(), 0x15); - memcpy(&buf[0x2D], &g_dComIfG_gameInfo.save.getPlayer().getItemRecord().field_0x2, 0x03); - memcpy(&buf[0x30], &g_dComIfG_gameInfo.save.getPlayer().getItemMax().field_0x0, 0x03); - memcpy(&buf[0x33], &g_dComIfG_gameInfo.save.getPlayer().getBagItem(), 0x18); - memcpy(&buf[0x4B], &g_dComIfG_gameInfo.save.getPlayer().getBagItemRecord(), 0x18); - memcpy(&buf[0x63], &g_dComIfG_gameInfo.save.getPlayer().getCollect(), 0x0D); - memcpy(g_dComIfG_gameInfo.save.getPlayer().getpPlayerStatusC(tbl), buf, sizeof(buf)); + memcpy(&stts.mRecollectStatusA, g_dComIfG_gameInfo.save.getPlayer().getpPlayerStatusA(), sizeof(stts.mRecollectStatusA)); + memcpy(&stts.mRecollectItem, g_dComIfG_gameInfo.save.getPlayer().getpItem(), sizeof(stts.mRecollectItem)); + memcpy(&stts.mRecollectItemRecord, &g_dComIfG_gameInfo.save.getPlayer().getpItemRecord()->field_0x2, sizeof(stts.mRecollectItemRecord)); + memcpy(&stts.mRecollectItemMax, &g_dComIfG_gameInfo.save.getPlayer().getpItemMax()->field_0x0, sizeof(stts.mRecollectItemMax)); + memcpy(&stts.mRecollectBagItem, g_dComIfG_gameInfo.save.getPlayer().getpBagItem(), sizeof(stts.mRecollectBagItem)); + memcpy(&stts.mRecollectBagItemRecord, dComIfGs_getpBagItemRecord(), sizeof(stts.mRecollectBagItemRecord)); + memcpy(&stts.mRecollectCollect, dComIfGs_getpCollect(), sizeof(stts.mRecollectCollect)); + memcpy(dComIfGs_getpPlayerStatusC(tbl), &stts, sizeof(stts)); } /* 80054E9C-80055318 .text dComIfGs_setPlayerRecollectionData__Fv */ void dComIfGs_setPlayerRecollectionData() { /* Nonmatching */ + daArrow_c::setKeepType(0); + u32 tbl; + if (strcmp(dComIfGp_getStartStageName(), "Xboss0") == 0 && dComIfGs_isEventBit(0x3d80) != 0) { + tbl = 0; + dComIfGp_setPlayerInfoBufferStageNo(1); + } else if (strcmp(dComIfGp_getStartStageName(), "Xboss1") == 0 && dComIfGs_isEventBit(0x3d40) != 0) { + tbl = 1; + dComIfGp_setPlayerInfoBufferStageNo(2); + } else if (strcmp(dComIfGp_getStartStageName(), "Xboss2") == 0 && dComIfGs_isEventBit(0x3d20) != 0) { + tbl = 2; + dComIfGp_setPlayerInfoBufferStageNo(3); + } else if (strcmp(dComIfGp_getStartStageName(), "Xboss3") == 0 && dComIfGs_isEventBit(0x3d10) != 0) { + tbl = 3; + dComIfGp_setPlayerInfoBufferStageNo(4); + } else { + dComIfGs_setSelectItem(0, NO_ITEM); + dComIfGs_setSelectItem(1, NO_ITEM); + dComIfGs_setSelectItem(2, NO_ITEM); + return; + } + + // TODO: The rest of the checks } /* 80055318-80055580 .text dComIfGs_revPlayerRecollectionData__Fv */ diff --git a/src/d/d_save.cpp b/src/d/d_save.cpp index 319325e33..6bc0efe51 100644 --- a/src/d/d_save.cpp +++ b/src/d/d_save.cpp @@ -587,7 +587,7 @@ void dSv_player_bag_item_record_c::init() { /* 8005ACA8-8005ACE0 .text init__20dSv_player_collect_cFv */ void dSv_player_collect_c::init() { for (int i = 0; i < 8; i++) { - field_0x0[i] = 0; + mCollect[i] = 0; } field_0x8 = 0; @@ -600,19 +600,19 @@ void dSv_player_collect_c::init() { /* 8005ACE0-8005AD78 .text onCollect__20dSv_player_collect_cFiUc */ void dSv_player_collect_c::onCollect(int i_idx, u8 i_item) { JUT_ASSERT(1412, 0 <= i_item && i_item < 8); - field_0x0[i_idx] |= (u8)(1 << i_item); + mCollect[i_idx] |= (u8)(1 << i_item); } /* 8005AD78-8005AE10 .text offCollect__20dSv_player_collect_cFiUc */ void dSv_player_collect_c::offCollect(int i_idx, u8 i_item) { JUT_ASSERT(1427, 0 <= i_item && i_item < 8); - field_0x0[i_idx] &= ~(u8)(1 << i_item); + mCollect[i_idx] &= ~(u8)(1 << i_item); } /* 8005AE10-8005AEAC .text isCollect__20dSv_player_collect_cFiUc */ BOOL dSv_player_collect_c::isCollect(int i_idx, u8 i_item) { JUT_ASSERT(1442, 0 <= i_item && i_item < 8); - return field_0x0[i_idx] & (u8)(1 << i_item) ? TRUE : FALSE; + return mCollect[i_idx] & (u8)(1 << i_item) ? TRUE : FALSE; } /* 8005AEAC-8005AF40 .text onTact__20dSv_player_collect_cFUc */