summaryrefslogtreecommitdiff
path: root/src/d/d_save.cpp
diff options
context:
space:
mode:
authorJasper St. Pierre <jstpierre@mecheye.net>2024-12-27 01:23:55 -0800
committerJasper St. Pierre <jstpierre@mecheye.net>2024-12-27 01:23:55 -0800
commit929027bfc1850bc913ac5bace0f04476e5f1394c (patch)
tree469d2e972614b1a32780d0e48b2bb8f904720528 /src/d/d_save.cpp
parent2db35c0108f84ec4736e4d4515abe50823e8c833 (diff)
document inventory slots
Diffstat (limited to 'src/d/d_save.cpp')
-rw-r--r--src/d/d_save.cpp182
1 files changed, 90 insertions, 92 deletions
diff --git a/src/d/d_save.cpp b/src/d/d_save.cpp
index 0399f436..f4bd701e 100644
--- a/src/d/d_save.cpp
+++ b/src/d/d_save.cpp
@@ -99,7 +99,7 @@ void dSv_player_item_c::setEmptyBottleItemIn(u8 i_itemNo) {
/* 80058E44-80058F74 .text setEmptyBottle__17dSv_player_item_cFv */
void dSv_player_item_c::setEmptyBottle() {
for (int bottleIdx = 0; bottleIdx < 4; bottleIdx++) {
- int invIdx = 0xE + bottleIdx;
+ int invIdx = dInvSlot_BOTTLE0_e + bottleIdx;
if (dComIfGs_getItem((u8)invIdx) == dItem_NONE_e) {
dComIfGs_setItem((u8)invIdx, EMPTY_BOTTLE);
break;
@@ -110,15 +110,13 @@ void dSv_player_item_c::setEmptyBottle() {
/* 80058F74-8005918C .text setEquipBottleItemIn__17dSv_player_item_cFUcUc */
void dSv_player_item_c::setEquipBottleItemIn(u8 i_btnIdx, u8 i_itemNo) {
u8 invIdx = dComIfGs_getSelectItem(i_btnIdx);
- if (invIdx < 0xE) {
+ if (invIdx < dInvSlot_BOTTLE0_e)
return;
- }
- if (invIdx > 0x11) {
+ if (invIdx > dInvSlot_BOTTLE3_e)
return;
- }
-
+
mItems[invIdx] = i_itemNo;
-
+
dComIfGs_setItem(dComIfGs_getSelectItem(i_btnIdx), i_itemNo);
dComIfGp_setItem(dComIfGs_getSelectItem(i_btnIdx), i_itemNo);
dComIfGp_setSelectItem(i_btnIdx);
@@ -141,7 +139,7 @@ void dSv_player_item_c::setEquipBottleItemIn(u8 i_itemNo) {
} else {
return;
}
-
+
u8 invIdx = dComIfGs_getSelectItem(btnIdx);
if (invIdx < 0xE) {
return;
@@ -149,9 +147,9 @@ void dSv_player_item_c::setEquipBottleItemIn(u8 i_itemNo) {
if (invIdx > 0x11) {
return;
}
-
+
mItems[invIdx] = i_itemNo;
-
+
dComIfGs_setItem(dComIfGs_getSelectItem(btnIdx), i_itemNo);
dComIfGp_setItem(dComIfGs_getSelectItem(btnIdx), i_itemNo);
dComIfGp_setSelectItem(btnIdx);
@@ -429,7 +427,7 @@ void dSv_player_bag_item_c::setBaitItemChange(u8 i_itemNo) {
} else {
return;
}
-
+
u8 invIdx = dComIfGs_getSelectItem(btnIdx);
if (invIdx < 0x24) {
return;
@@ -437,7 +435,7 @@ void dSv_player_bag_item_c::setBaitItemChange(u8 i_itemNo) {
if (invIdx >= 0x2C) {
return;
}
-
+
dComIfGs_setItem(dComIfGs_getSelectItem(btnIdx), i_itemNo);
dComIfGp_setItem(dComIfGs_getSelectItem(btnIdx), i_itemNo);
dComIfGp_setSelectItem(btnIdx);
@@ -448,7 +446,7 @@ void dSv_player_bag_item_c::setBaitItemChange(u8 i_btnIdx, u8 i_itemNo) {
if (i_btnIdx > 2) {
return;
}
-
+
u8 invIdx = dComIfGs_getSelectItem(i_btnIdx);
if (invIdx < 0x24) {
return;
@@ -456,7 +454,7 @@ void dSv_player_bag_item_c::setBaitItemChange(u8 i_btnIdx, u8 i_itemNo) {
if (invIdx >= 0x2C) {
return;
}
-
+
dComIfGs_setItem(dComIfGs_getSelectItem(i_btnIdx), i_itemNo);
dComIfGp_setItem(dComIfGs_getSelectItem(i_btnIdx), i_itemNo);
dComIfGp_setSelectItem(i_btnIdx);
@@ -474,7 +472,7 @@ void dSv_player_bag_item_c::setBaitItemEmpty() {
} else {
return;
}
-
+
u8 invIdx = dComIfGs_getSelectItem(btnIdx);
if (invIdx < 0x24) {
return;
@@ -482,11 +480,11 @@ void dSv_player_bag_item_c::setBaitItemEmpty() {
if (invIdx >= 0x2C) {
return;
}
-
+
int baitSlotIdx = invIdx - 0x24;
u8 num = dComIfGs_getBaitNum(baitSlotIdx);
u8 itemNo = dComIfGp_getSelectItem(btnIdx);
-
+
if (itemNo == dItem_HYOI_PEAR_e) {
u8 num = dComIfGs_getBaitNum(baitSlotIdx);
setBaitItemChange(dItem_NONE_e);
@@ -507,7 +505,7 @@ void dSv_player_bag_item_c::setBaitItemEmpty(u8 i_btnIdx) {
if (i_btnIdx > 2) {
return;
}
-
+
u8 invIdx = dComIfGs_getSelectItem(i_btnIdx);
if (invIdx < 0x24) {
return;
@@ -515,11 +513,11 @@ void dSv_player_bag_item_c::setBaitItemEmpty(u8 i_btnIdx) {
if (invIdx >= 0x2C) {
return;
}
-
+
int baitSlotIdx = invIdx - 0x24;
u8 num = dComIfGs_getBaitNum(baitSlotIdx);
u8 itemNo = dComIfGp_getSelectItem(i_btnIdx);
-
+
if (itemNo == dItem_HYOI_PEAR_e) {
u8 num = dComIfGs_getBaitNum(baitSlotIdx);
setBaitItemChange(i_btnIdx, dItem_NONE_e);
@@ -578,7 +576,7 @@ void dSv_player_bag_item_c::setReserveItemChange(u8 i_itemNo) {
} else {
return;
}
-
+
u8 invIdx = dComIfGs_getSelectItem(btnIdx);
if (invIdx < 0x30) {
return;
@@ -586,7 +584,7 @@ void dSv_player_bag_item_c::setReserveItemChange(u8 i_itemNo) {
if (invIdx >= 0x38) {
return;
}
-
+
dComIfGs_setItem(dComIfGs_getSelectItem(btnIdx), i_itemNo);
dComIfGp_setItem(dComIfGs_getSelectItem(btnIdx), i_itemNo);
dComIfGp_setSelectItem(btnIdx);
@@ -597,7 +595,7 @@ void dSv_player_bag_item_c::setReserveItemChange(u8 i_btnIdx, u8 i_itemNo) {
if (i_btnIdx > 2) {
return;
}
-
+
u8 invIdx = dComIfGs_getSelectItem(i_btnIdx);
if (invIdx < 0x30) {
return;
@@ -605,7 +603,7 @@ void dSv_player_bag_item_c::setReserveItemChange(u8 i_btnIdx, u8 i_itemNo) {
if (invIdx >= 0x38) {
return;
}
-
+
dComIfGs_setItem(dComIfGs_getSelectItem(i_btnIdx), i_itemNo);
dComIfGp_setItem(dComIfGs_getSelectItem(i_btnIdx), i_itemNo);
dComIfGp_setSelectItem(i_btnIdx);
@@ -1355,61 +1353,61 @@ void dSv_info_c::reinit() {
0x84FF, 0x83FF, 0x82FF, 0x81FF, 0x80FF};
static u16 l_onEventBit[] = {0x2F08, 0x2F04, 0x2F02, 0x3A01, 0x3401};
-
+
u8* r29 = new u8[ARRAY_SIZE(l_holdEventReg)];
for (int i = 0; i < ARRAY_SIZE(l_holdEventReg); i++) {
r29[i] = dComIfGs_getEventReg(l_holdEventReg[i]);
}
-
+
u8 clearCount = dComIfGs_getClearCount();
-
+
char name[17];
strcpy(name, dComIfGs_getPlayerName());
-
+
u8 attnType = dComIfGs_getOptAttentionType();
u8 ruby = dComIfGs_getOptRuby();
u8 sound = dComIfGs_getOptSound();
u8 vib = dComIfGs_getOptVibration();
-
+
u8 pictureNum = dComIfGs_getPictureNum();
-
+
u8 r27 = dComIfGs_getEventReg(0x89FF);
-
+
init();
-
+
for (int i = 0; i < ARRAY_SIZE(l_holdEventReg); i++) {
dComIfGs_setEventReg(l_holdEventReg[i], r29[i]);
}
-
+
for (int i = 0; i < ARRAY_SIZE(l_onEventBit); i++) {
dComIfGs_onEventBit(l_onEventBit[i]);
}
-
+
dComIfGs_setEventReg(0xC407, 7);
-
+
dComIfGs_setClearCount(clearCount);
-
+
dComIfGs_onSaveTbox(dSv_save_c::STAGE_MISC, 0x00);
dComIfGs_onSaveSwitch(dSv_save_c::STAGE_SEA, 0x47);
dComIfGs_onSaveSwitch(dSv_save_c::STAGE_SEA, 0x5E);
-
+
dComIfGs_setPlayerName(name);
-
+
dComIfGs_setOptAttentionType(attnType);
dComIfGs_setOptRuby(ruby);
dComIfGs_setOptSound(sound);
dComIfGs_setOptVibration(vib);
-
+
dComIfGs_setRandomSalvagePoint(3);
-
- dComIfGs_setItem(0x8, CAMERA2);
- dComIfGp_setItem(0x8, CAMERA2);
-
- dComIfGs_onGetItem(0x8, 0);
- dComIfGs_onGetItem(0x8, 1);
-
+
+ dComIfGs_setItem(dInvSlot_CAMERA_e, CAMERA2);
+ dComIfGp_setItem(dInvSlot_CAMERA_e, CAMERA2);
+
+ dComIfGs_onGetItem(dInvSlot_CAMERA_e, 0);
+ dComIfGs_onGetItem(dInvSlot_CAMERA_e, 1);
+
dComIfGs_setPictureNum(pictureNum);
-
+
dComIfGs_setEventReg(0x89FF, r27);
}
@@ -1613,7 +1611,7 @@ BOOL dSv_info_c::isActor(int i_id, int i_roomNo) {
if (0 > i_id || i_id >= dSv_zoneActor_c::ACTOR_MAX) {
JUT_ASSERT(VERSION_SELECT(3717, 3744, 3744), 0 <= i_id && i_id < dSv_zoneActor_c::ACTOR_MAX);
}
-
+
JUT_ASSERT(VERSION_SELECT(3719, 3746, 3746), 0 <= i_roomNo && i_roomNo < 64);
int zoneNo = dComIfGp_roomControl_getZoneNo(i_roomNo);
@@ -1632,52 +1630,52 @@ int dSv_info_c::memory_to_card(char* i_cardPtr, int i_dataNum) {
char* buffer_start;
char* buffer = i_cardPtr + i_dataNum * ALIGN_NEXT(dSv_save_c::PACKED_STRUCT_SIZE, 0x10);
buffer_start = buffer;
-
+
memcpy(buffer, dComIfGs_getpPlayerStatusA(), sizeof(dSv_player_status_a_c));
dSv_player_status_a_c* status_a = (dSv_player_status_a_c*)buffer;
if (status_a->getLife() < 0xC) {
status_a->setLife(0xC);
}
buffer += sizeof(dSv_player_status_a_c);
-
+
memcpy(buffer, dComIfGs_getpPlayerStatusB(), sizeof(dSv_player_status_b_c));
dSv_player_status_b_c* status_b = (dSv_player_status_b_c*)buffer;
status_b->setDateIpl(OSGetTime());
buffer += sizeof(dSv_player_status_b_c);
-
+
memcpy(buffer, dComIfGs_getpPlayerReturnPlace(), sizeof(dSv_player_return_place_c));
buffer += sizeof(dSv_player_return_place_c);
-
+
memcpy(buffer, dComIfGs_getpItem(), sizeof(dSv_player_item_c));
buffer += sizeof(dSv_player_item_c);
-
+
memcpy(buffer, dComIfGs_getpGetItem(), sizeof(dSv_player_get_item_c));
buffer += sizeof(dSv_player_get_item_c);
-
+
memcpy(buffer, dComIfGs_getpItemRecord(), sizeof(dSv_player_item_record_c));
buffer += sizeof(dSv_player_item_record_c);
-
+
memcpy(buffer, dComIfGs_getpItemMax(), sizeof(dSv_player_item_max_c));
buffer += sizeof(dSv_player_item_max_c);
-
+
memcpy(buffer, dComIfGs_getpBagItem(), sizeof(dSv_player_bag_item_c));
buffer += sizeof(dSv_player_bag_item_c);
-
+
memcpy(buffer, dComIfGs_getpGetBagItem(), sizeof(dSv_player_get_bag_item_c));
buffer += sizeof(dSv_player_get_bag_item_c);
-
+
memcpy(buffer, dComIfGs_getpBagItemRecord(), sizeof(dSv_player_bag_item_record_c));
buffer += sizeof(dSv_player_bag_item_record_c);
-
+
memcpy(buffer, dComIfGs_getpCollect(), sizeof(dSv_player_collect_c));
buffer += sizeof(dSv_player_collect_c);
-
+
memcpy(buffer, dComIfGs_getpMap(), sizeof(dSv_player_map_c));
buffer += sizeof(dSv_player_map_c);
-
+
memcpy(buffer, dComIfGs_getpPlayerInfo(), sizeof(dSv_player_info_c));
buffer += sizeof(dSv_player_info_c);
-
+
memcpy(buffer, dComIfGs_getpConfig(), sizeof(dSv_player_config_c));
buffer += sizeof(dSv_player_config_c);
#if VERSION == VERSION_JPN
@@ -1687,27 +1685,27 @@ int dSv_info_c::memory_to_card(char* i_cardPtr, int i_dataNum) {
OSSetSoundMode(1);
}
#endif
-
+
memcpy(buffer, dComIfGs_getpPriest(), sizeof(dSv_player_priest_c));
buffer += sizeof(dSv_player_priest_c);
-
+
for (int i = 0; i < 4; i++) {
memcpy(buffer, dComIfGs_getpPlayerStatusC(i), sizeof(dSv_player_status_c_c));
buffer += sizeof(dSv_player_status_c_c);
}
-
+
memcpy(buffer, dComIfGs_getPCourseInfo(), sizeof(dSv_memory_c) * dSv_save_c::STAGE_MAX);
buffer += sizeof(dSv_memory_c) * dSv_save_c::STAGE_MAX;
-
+
memcpy(buffer, dComIfGs_getPOcean(), sizeof(dSv_ocean_c));
buffer += sizeof(dSv_ocean_c);
-
+
memcpy(buffer, dComIfGs_getPEvent(), sizeof(dSv_event_c));
buffer += sizeof(dSv_event_c);
-
+
memcpy(buffer, dComIfGs_getPReserve(), sizeof(dSv_reserve_c));
buffer += sizeof(dSv_reserve_c);
-
+
s32 save_size = buffer - buffer_start;
if (save_size > dSv_save_c::PACKED_STRUCT_SIZE) {
printf("SAVE size over(%d/%d)\n", dSv_save_c::PACKED_STRUCT_SIZE, save_size);
@@ -1723,46 +1721,46 @@ int dSv_info_c::card_to_memory(char* i_cardPtr, int i_dataNum) {
char* buffer_start;
char* buffer = i_cardPtr + i_dataNum * ALIGN_NEXT(dSv_save_c::PACKED_STRUCT_SIZE, 0x10);
buffer_start = buffer;
-
+
memcpy(dComIfGs_getpPlayerStatusA(), buffer, sizeof(dSv_player_status_a_c));
buffer += sizeof(dSv_player_status_a_c);
-
+
memcpy(dComIfGs_getpPlayerStatusB(), buffer, sizeof(dSv_player_status_b_c));
buffer += sizeof(dSv_player_status_b_c);
-
+
memcpy(dComIfGs_getpPlayerReturnPlace(), buffer, sizeof(dSv_player_return_place_c));
buffer += sizeof(dSv_player_return_place_c);
-
+
memcpy(dComIfGs_getpItem(), buffer, sizeof(dSv_player_item_c));
buffer += sizeof(dSv_player_item_c);
-
+
memcpy(dComIfGs_getpGetItem(), buffer, sizeof(dSv_player_get_item_c));
buffer += sizeof(dSv_player_get_item_c);
-
+
memcpy(dComIfGs_getpItemRecord(), buffer, sizeof(dSv_player_item_record_c));
buffer += sizeof(dSv_player_item_record_c);
-
+
memcpy(dComIfGs_getpItemMax(), buffer, sizeof(dSv_player_item_max_c));
buffer += sizeof(dSv_player_item_max_c);
-
+
memcpy(dComIfGs_getpBagItem(), buffer, sizeof(dSv_player_bag_item_c));
buffer += sizeof(dSv_player_bag_item_c);
-
+
memcpy(dComIfGs_getpGetBagItem(), buffer, sizeof(dSv_player_get_bag_item_c));
buffer += sizeof(dSv_player_get_bag_item_c);
-
+
memcpy(dComIfGs_getpBagItemRecord(), buffer, sizeof(dSv_player_bag_item_record_c));
buffer += sizeof(dSv_player_bag_item_record_c);
-
+
memcpy(dComIfGs_getpCollect(), buffer, sizeof(dSv_player_collect_c));
buffer += sizeof(dSv_player_collect_c);
-
+
memcpy(dComIfGs_getpMap(), buffer, sizeof(dSv_player_map_c));
buffer += sizeof(dSv_player_map_c);
-
+
memcpy(dComIfGs_getpPlayerInfo(), buffer, sizeof(dSv_player_info_c));
buffer += sizeof(dSv_player_info_c);
-
+
memcpy(dComIfGs_getpConfig(), buffer, sizeof(dSv_player_config_c));
buffer += sizeof(dSv_player_config_c);
if (OSGetSoundMode() == 0) {
@@ -1774,27 +1772,27 @@ int dSv_info_c::card_to_memory(char* i_cardPtr, int i_dataNum) {
dComIfGs_setOptSound(1);
mDoAud_setOutputMode(1);
}
-
+
memcpy(dComIfGs_getpPriest(), buffer, sizeof(dSv_player_priest_c));
buffer += sizeof(dSv_player_priest_c);
-
+
for (int i = 0; i < 4; i++) {
memcpy(dComIfGs_getpPlayerStatusC(i), buffer, sizeof(dSv_player_status_c_c));
buffer += sizeof(dSv_player_status_c_c);
}
-
+
memcpy(dComIfGs_getPCourseInfo(), buffer, sizeof(dSv_memory_c) * dSv_save_c::STAGE_MAX);
buffer += sizeof(dSv_memory_c) * dSv_save_c::STAGE_MAX;
-
+
memcpy(dComIfGs_getPOcean(), buffer, sizeof(dSv_ocean_c));
buffer += sizeof(dSv_ocean_c);
-
+
memcpy(dComIfGs_getPEvent(), buffer, sizeof(dSv_event_c));
buffer += sizeof(dSv_event_c);
-
+
memcpy(dComIfGs_getPReserve(), buffer, sizeof(dSv_reserve_c));
buffer += sizeof(dSv_reserve_c);
-
+
s32 load_size = buffer - buffer_start;
if (load_size > dSv_save_c::PACKED_STRUCT_SIZE) {
printf("LOAD size over(%d/%d)\n", dSv_save_c::PACKED_STRUCT_SIZE, load_size);
@@ -1811,7 +1809,7 @@ int dSv_info_c::initdata_to_card(char* i_cardPtr, int i_dataNum) {
char* buffer = i_cardPtr + i_dataNum * ALIGN_NEXT(dSv_save_c::PACKED_STRUCT_SIZE, 0x10);
char* buffer_start = buffer;
char* buffer_src;
-
+
dSv_player_status_a_c status_a;
status_a.init();
buffer_src = (char*)&status_a;
@@ -1908,7 +1906,7 @@ int dSv_info_c::initdata_to_card(char* i_cardPtr, int i_dataNum) {
memcpy(buffer, buffer_src, sizeof(dSv_player_status_c_c));
buffer += sizeof(dSv_player_status_c_c);
}
-
+
// Bug: It copies 16 instances of dSv_memory_c from the stack to the card, but only allocates and initializes 1.
// This means when it initializes an empty save slot in the memory card, all of the stage save tables except the
// first are filled with garbage data instead of all zeroes.