From a772c05f4dc6a724c5a4c3f646ca44110465b788 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Wed, 11 Feb 2026 00:04:54 -0800 Subject: [PATCH] d_save debug (#3087) --- include/d/d_com_inf_game.h | 2 +- include/d/d_save.h | 11 ++-- src/d/d_save.cpp | 121 ++++++++++++++++++++++--------------- 3 files changed, 78 insertions(+), 56 deletions(-) diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index d4d192e966c..91cd4521311 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -7,10 +7,10 @@ #include "d/d_event_manager.h" #include "d/d_particle.h" #include "d/d_resorce.h" -#include "d/d_save.h" #include "d/d_vibration.h" #include "d/d_drawlist.h" #include "d/d_stage.h" +#include "d/d_save.h" #include "f_op/f_op_actor.h" #include "global.h" #include "m_Do/m_Do_controller_pad.h" diff --git a/include/d/d_save.h b/include/d/d_save.h index 3f7e44517da..a0e29d9dd73 100644 --- a/include/d/d_save.h +++ b/include/d/d_save.h @@ -477,9 +477,9 @@ public: } } char* getPlayerName() const { return const_cast(mPlayerName); } - void setPlayerName(const char* i_name) { strcpy((char*)mPlayerName, i_name); } - char* getHorseName() { return mHorseName; } - void setHorseName(const char* i_name) { strcpy((char*)mHorseName, i_name); } + void setPlayerName(const char* i_name) { strcpy(mPlayerName, i_name); } + char* getHorseName() const { return const_cast(mHorseName); } + void setHorseName(const char* i_name) { strcpy(mHorseName, i_name); } u8 getClearCount() const { return mClearCount; } private: @@ -508,7 +508,7 @@ public: // Ruby inline names are from TWW debug. u8 getRuby() { return mRuby; } void setRuby(u8 i_ruby) { mRuby = i_ruby; } - u8 getAttentionType() { return mAttentionType; } + u8 getAttentionType() const { return mAttentionType; } void setAttentionType(u8 i_mAttentionType) { mAttentionType = i_mAttentionType; } u16 getCalibrateDist() { return mCalibrateDist; } void setCalibrateDist(u16 i_mCalibrateDist) { mCalibrateDist = i_mCalibrateDist; } @@ -742,7 +742,6 @@ public: private: /* 0x00 */ s8 mStageNo; /* 0x01 */ u8 unk1; - /* 0x02 */ u8 unk2[2]; /* 0x04 */ u32 mSwitch[2]; /* 0x0C */ u32 mItem[4]; /* 0x1C */ s16 unk28[16]; @@ -924,7 +923,7 @@ public: flagFile_c(); ~flagFile_c(); - BOOL check_flag(u16); + BOOL check_flag(u16 i_flag) { return (m_flags & i_flag) != 0; } virtual void listenPropertyEvent(const JORPropertyEvent*); virtual void genMessage(JORMContext*); diff --git a/src/d/d_save.cpp b/src/d/d_save.cpp index b39d0a962b7..8d54b31fa08 100644 --- a/src/d/d_save.cpp +++ b/src/d/d_save.cpp @@ -17,6 +17,7 @@ #if PLATFORM_WII || PLATFORM_SHIELD #include +#include #endif #if VERSION == VERSION_SHIELD @@ -683,7 +684,7 @@ void dSv_player_get_item_c::offFirstBit(u8 i_itemno) { int index = i_itemno / 32; int bit = i_itemno % 32; - mItemFlags[index] &= ~(1 << bit); + mItemFlags[index] &= ~u32(1 << bit); } BOOL dSv_player_get_item_c::isFirstBit(u8 i_itemno) const { @@ -1024,7 +1025,11 @@ void dSv_player_config_c::setSound(u8 i_mode) { } u8 dSv_player_config_c::getVibration() { +#if PLATFORM_WII + return WPADIsMotorEnabled() != 0; +#else return mVibration; +#endif } void dSv_player_config_c::setVibration(u8 i_status) { @@ -1103,7 +1108,7 @@ void dSv_memBit_c::onTbox(int i_no) { void dSv_memBit_c::offTbox(int i_no) { JUT_ASSERT(2740, 0 <= i_no && i_no < TBOX_MAX); - mTbox[i_no >> 5] &= ~(1 << (i_no & 0x1F)); + mTbox[i_no >> 5] &= ~u32(1 << (i_no & 0x1F)); } BOOL dSv_memBit_c::isTbox(int i_no) const { @@ -1118,7 +1123,7 @@ void dSv_memBit_c::onSwitch(int i_no) { void dSv_memBit_c::offSwitch(int i_no) { JUT_ASSERT(2800, 0 <= i_no && i_no < 128); - mSwitch[i_no >> 5] &= ~(1 << (i_no & 0x1F)); + mSwitch[i_no >> 5] &= ~u32(1 << (i_no & 0x1F)); } BOOL dSv_memBit_c::isSwitch(int i_no) const { @@ -1142,7 +1147,7 @@ void dSv_memBit_c::onItem(int i_no) { void dSv_memBit_c::offItem(int i_no) { JUT_ASSERT(2861, 0 <= i_no && i_no < 64); - mItem[i_no >> 5] |= ~(1 << (i_no & 0x1F)); + mItem[i_no >> 5] &= ~u32(1 << (i_no & 0x1F)); } BOOL dSv_memBit_c::isItem(int i_no) const { @@ -1175,11 +1180,11 @@ void dSv_event_c::init() { } void dSv_event_c::onEventBit(u16 i_no) { - mEvent[i_no >> 8] |= (u8)i_no; + mEvent[i_no >> 8] |= u8(i_no); } void dSv_event_c::offEventBit(u16 i_no) { - mEvent[i_no >> 8] &= ~(u8)i_no; + mEvent[i_no >> 8] &= ~u8(i_no); } BOOL dSv_event_c::isEventBit(const u16 i_no) const { @@ -1187,7 +1192,7 @@ BOOL dSv_event_c::isEventBit(const u16 i_no) const { } void dSv_event_c::setEventReg(u16 i_reg, u8 i_no) { - mEvent[i_reg >> 8] &= ~(u8)i_reg; + mEvent[i_reg >> 8] &= ~u8(i_reg); mEvent[i_reg >> 8] |= i_no; } @@ -1227,7 +1232,7 @@ void dSv_memory2_c::onVisitedRoom(int i_no) { void dSv_memory2_c::offVisitedRoom(int i_no) { JUT_ASSERT(3293, 0 <= i_no && i_no < 64); - mVisitedRoom[i_no >> 5] &= ~(1 << (i_no & 0x1F)); + mVisitedRoom[i_no >> 5] &= ~u32(1 << (i_no & 0x1F)); } BOOL dSv_memory2_c::isVisitedRoom(int i_no) { @@ -1269,7 +1274,7 @@ void dSv_danBit_c::onSwitch(int i_no) { void dSv_danBit_c::offSwitch(int i_no) { JUT_ASSERT(3398, 0 <= i_no && i_no < 64); - mSwitch[i_no >> 5] &= ~(1 << (i_no & 0x1F)); + mSwitch[i_no >> 5] &= ~u32(1 << (i_no & 0x1F)); } BOOL dSv_danBit_c::isSwitch(int i_no) const { @@ -1292,7 +1297,7 @@ void dSv_danBit_c::onItem(int i_no) { void dSv_danBit_c::offItem(int i_no) { JUT_ASSERT(3458, 0 <= i_no && i_no < ITEM_MAX_DAN); - mItem[i_no >> 5] &= ~(1 << (i_no & 0x1F)); + mItem[i_no >> 5] &= ~u32(1 << (i_no & 0x1F)); } BOOL dSv_danBit_c::isItem(int i_no) const { @@ -1417,7 +1422,7 @@ void dSv_zoneActor_c::on(int i_id) { void dSv_zoneActor_c::off(int i_id) { JUT_ASSERT(3870, 0 <= i_id && i_id < ACTOR_MAX); - mActorFlags[i_id >> 5] &= ~(1 << (i_id & 0x1F)); + mActorFlags[i_id >> 5] &= ~u32(1 << (i_id & 0x1F)); } BOOL dSv_zoneActor_c::is(int i_id) const { @@ -1457,6 +1462,18 @@ void dSv_info_c::init() { #endif } +static void dummy() { + dComIfGs_getEventReg(0); + dComIfGs_getClearCount(); + const char* playerName = dComIfGs_getPlayerName(); + const char* horseName = dComIfGs_getHorseName(); + dComIfGs_getOptAttentionType(); + dComIfGs_setEventReg(0, 0); + dComIfGs_setPlayerName(playerName); + dComIfGs_setHorseName(horseName); + dComIfGs_setOptAttentionType(0); +} + void dSv_save_c::init() { mPlayer.init(); for (int i = 0; i < STAGE_MAX; i++) { @@ -1494,11 +1511,12 @@ void dSv_info_c::initZone() { u32 dSv_info_c::createZone(int i_roomNo) { dSv_zone_c* zone = mZone; - for (int i = 0; i < 0x20; zone++, i++) { + for (int i = 0; i < 0x20; i++) { if (zone->getRoomNo() < 0) { zone->init(i_roomNo); return i; } + zone++; } return -1; } @@ -1552,7 +1570,19 @@ void dSv_info_c::offSwitch(int i_no, int i_roomNo) { } BOOL dSv_info_c::isSwitch(int i_no, int i_roomNo) const { - if (!((0 <= i_no && i_no < (MEMORY_SWITCH+ DAN_SWITCH+ ZONE_SWITCH+ ONEZONE_SWITCH)) || i_no == -1 || i_no == 255)) { + bool r27 = true; + bool r26 = true; + bool r25 = false; + if (0 <= i_no && i_no < (MEMORY_SWITCH|DAN_SWITCH|ZONE_SWITCH|ONEZONE_SWITCH)) { + r25 = true; + } + if (!r25 && i_no != -1) { + r26 = false; + } + if (!r26 && i_no != 255) { + r27 = false; + } + if (!r27) { OS_REPORT("i_no = %d\n", i_no); JUT_ASSERT(4302, FALSE); } @@ -1565,19 +1595,18 @@ BOOL dSv_info_c::isSwitch(int i_no, int i_roomNo) const { return mMemory.getBit().isSwitch(i_no); } else if (i_no < (MEMORY_SWITCH + DAN_SWITCH)) { return mDan.isSwitch(i_no - MEMORY_SWITCH); - } else { - JUT_ASSERT(4269, 0 <= i_roomNo && i_roomNo < 64); - int zoneId = dComIfGp_roomControl_getZoneNo(i_roomNo); + } + JUT_ASSERT(4324, 0 <= i_roomNo && i_roomNo < 64); + int zoneId = dComIfGp_roomControl_getZoneNo(i_roomNo); - if (zoneId < 0 || zoneId >= ZONE_MAX) { - return FALSE; + if (zoneId < 0 || zoneId >= ZONE_MAX) { + return FALSE; + } else { + if (i_no < (MEMORY_SWITCH + DAN_SWITCH + ZONE_SWITCH)) { + return mZone[zoneId].getBit().isSwitch(i_no - (MEMORY_SWITCH + DAN_SWITCH)); } else { - if (i_no < (MEMORY_SWITCH + DAN_SWITCH + ZONE_SWITCH)) { - return mZone[zoneId].getBit().isSwitch(i_no - (MEMORY_SWITCH + DAN_SWITCH)); - } else { - return mZone[zoneId].getBit().isOneSwitch( - i_no - (MEMORY_SWITCH + DAN_SWITCH + ZONE_SWITCH)); - } + return mZone[zoneId].getBit().isOneSwitch( + i_no - (MEMORY_SWITCH + DAN_SWITCH + ZONE_SWITCH)); } } } @@ -1593,17 +1622,16 @@ BOOL dSv_info_c::revSwitch(int i_no, int i_roomNo) { return mMemory.getBit().revSwitch(i_no); } else if (i_no < (MEMORY_SWITCH + DAN_SWITCH)) { return mDan.revSwitch(i_no - MEMORY_SWITCH); - } else { - JUT_ASSERT(4368, 0 <= i_roomNo && i_roomNo < 64); - int zoneNo = dComIfGp_roomControl_getZoneNo(i_roomNo); - JUT_ASSERT(4370, 0 <= zoneNo && zoneNo < ZONE_MAX); + } + JUT_ASSERT(4368, 0 <= i_roomNo && i_roomNo < 64); + int zoneNo = dComIfGp_roomControl_getZoneNo(i_roomNo); + JUT_ASSERT(4370, 0 <= zoneNo && zoneNo < ZONE_MAX); - if (i_no < (MEMORY_SWITCH + DAN_SWITCH + ZONE_SWITCH)) { - return mZone[zoneNo].getBit().revSwitch(i_no - (MEMORY_SWITCH + DAN_SWITCH)); - } else { - return mZone[zoneNo].getBit().revOneSwitch( - i_no - (MEMORY_SWITCH + DAN_SWITCH + ZONE_SWITCH)); - } + if (i_no < (MEMORY_SWITCH + DAN_SWITCH + ZONE_SWITCH)) { + return mZone[zoneNo].getBit().revSwitch(i_no - (MEMORY_SWITCH + DAN_SWITCH)); + } else { + return mZone[zoneNo].getBit().revOneSwitch( + i_no - (MEMORY_SWITCH + DAN_SWITCH + ZONE_SWITCH)); } } @@ -1642,16 +1670,15 @@ BOOL dSv_info_c::isItem(int i_no, int i_roomNo) const { return mDan.isItem(i_no); } else if (i_no < (MEMORY_ITEM + DAN_ITEM)) { return mMemory.getBit().isItem(i_no - MEMORY_ITEM); - } else { - JUT_ASSERT(4501, 0 <= i_roomNo && i_roomNo < 64); - int zoneNo = dComIfGp_roomControl_getZoneNo(i_roomNo); - JUT_ASSERT(4503, 0 <= zoneNo && zoneNo < ZONE_MAX); + } + JUT_ASSERT(4501, 0 <= i_roomNo && i_roomNo < 64); + int zoneNo = dComIfGp_roomControl_getZoneNo(i_roomNo); + JUT_ASSERT(4503, 0 <= zoneNo && zoneNo < ZONE_MAX); - if (i_no < (MEMORY_ITEM + DAN_ITEM + ZONE_ITEM)) { - return mZone[zoneNo].getBit().isItem(i_no - (MEMORY_ITEM + DAN_ITEM)); - } else { - return mZone[zoneNo].getBit().isOneItem(i_no - (MEMORY_ITEM + DAN_ITEM + ZONE_ITEM)); - } + if (i_no < (MEMORY_ITEM + DAN_ITEM + ZONE_ITEM)) { + return mZone[zoneNo].getBit().isItem(i_no - (MEMORY_ITEM + DAN_ITEM)); + } else { + return mZone[zoneNo].getBit().isOneItem(i_no - (MEMORY_ITEM + DAN_ITEM + ZONE_ITEM)); } } @@ -1700,7 +1727,7 @@ int dSv_info_c::memory_to_card(char* card_ptr, int dataNum) { OSTime start; OSTime time; OSTime play_time; - + bool lantern_not_recovered = false; bool tmp_lantern_check = false; u16 current_lantern_oil = 0; @@ -1966,7 +1993,7 @@ void flagFile_c::listenPropertyEvent(const JORPropertyEvent* i_event) { OS_REPORT("write to %s\n", filename); JORFile file; - if (file.open(filename, 2, "", NULL, NULL, NULL)) { + if (file.open(filename, 2, "\0", NULL, NULL, NULL)) { if (check_flag(FLAG_SCENE_e)) { head[0] = '_SCN'; head[1] = strlen(start_stage_name) + 1; @@ -2009,10 +2036,6 @@ void flagFile_c::listenPropertyEvent(const JORPropertyEvent* i_event) { } } } - -BOOL flagFile_c::check_flag(u16 i_flag) { - return (m_flags & i_flag) != 0; -} #endif #if VERSION > VERSION_GCN_JPN