summaryrefslogtreecommitdiff
path: root/src/d/save/d_save.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2023-03-14 15:27:46 -0700
committerGitHub <noreply@github.com>2023-03-14 15:27:46 -0700
commita01d65b0b99400f62d93eee28475872b641cfd50 (patch)
treeabea30ef7e6fb74a9468770371d9217fa43b4b9d /src/d/save/d_save.cpp
parent500d079c40b17e52abf40ec32ad9457d384ce921 (diff)
d_ky_thunder done / d_scope wip / m_Do_graphic wip (#308)
* d_ky_thunder OK + misc build fixes * d_scope mostly done * some m_Do_graphic wip * remove asm
Diffstat (limited to 'src/d/save/d_save.cpp')
-rw-r--r--src/d/save/d_save.cpp85
1 files changed, 43 insertions, 42 deletions
diff --git a/src/d/save/d_save.cpp b/src/d/save/d_save.cpp
index 6a778ff5eb..23daffdd8c 100644
--- a/src/d/save/d_save.cpp
+++ b/src/d/save/d_save.cpp
@@ -4,11 +4,11 @@
*/
#include "d/save/d_save.h"
+#include "d/save/d_save_init.h"
#include "Z2AudioLib/Z2AudioMgr.h"
#include "d/com/d_com_inf_game.h"
#include "d/meter/d_meter2_info.h"
#include "dol2asm.h"
-#include "dolphin/types.h"
#include "rel/d/a/obj/d_a_obj_carry/d_a_obj_carry.h"
//
@@ -28,7 +28,6 @@ extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */];
// External References:
//
-extern "C" void setInitEventBit__Fv();
extern "C" void _savegpr_22();
extern "C" void _restgpr_22();
extern "C" void __div2i();
@@ -377,26 +376,24 @@ u8 dSv_player_item_c::getItem(int i_slotNo, bool i_checkCombo) const {
return NO_ITEM;
}
-/* ############################################################################################## */
-/* 803A7270-803A7288 004390 0017+01 1/1 0/0 0/0 .data i_item_lst$4006 */
-static u8 i_item_lst[23] = {
- 0x0A, 0x08, 0x06, 0x02, 0x09, 0x04, 0x03, 0x00, 0x01, 0x17, 0x14, 0x05,
- 0x0F, 0x10, 0x11, 0x0B, 0x0C, 0x0D, 0x0E, 0x13, 0x12, 0x16, 0x15,
-};
-
/* 800332F8-80033354 02DC38 005C+00 2/2 0/0 0/0 .text setLineUpItem__17dSv_player_item_cFv */
void dSv_player_item_c::setLineUpItem() {
- int i2 = 0;
+ static u8 i_item_lst[23] = {
+ 0x0A, 0x08, 0x06, 0x02, 0x09, 0x04, 0x03, 0x00, 0x01, 0x17, 0x14, 0x05,
+ 0x0F, 0x10, 0x11, 0x0B, 0x0C, 0x0D, 0x0E, 0x13, 0x12, 0x16, 0x15,
+ };
+
+ int slot_idx = 0;
- for (int i1 = 0; i1 < 24; i1++) {
- mItemSlots[i1] = NO_ITEM;
+ for (int i = 0; i < 24; i++) {
+ mItemSlots[i] = NO_ITEM;
}
- for (int i1 = 0; i1 < 23; i1++) {
- u32 current = i_item_lst[i1];
+ for (int i = 0; i < 23; i++) {
+ u32 current = i_item_lst[i];
if (mItems[current] != NO_ITEM) {
- mItemSlots[i2] = current;
- i2++;
+ mItemSlots[slot_idx] = current;
+ slot_idx++;
}
}
}
@@ -1198,24 +1195,24 @@ void dSv_event_c::init() {
for (int i = 0; i < MAX_EVENTS; i++) {
mEvent[i] = 0;
}
- setInitEventBit__Fv();
+ setInitEventBit();
}
/* 8003498C-800349A4 02F2CC 0018+00 1/1 27/27 58/58 .text onEventBit__11dSv_event_cFUs */
void dSv_event_c::onEventBit(u16 i_no) {
- mEvent[(i_no >> 8)] |= (u8)i_no;
+ mEvent[i_no >> 8] |= (u8)i_no;
}
/* 800349A4-800349BC 02F2E4 0018+00 1/1 14/14 23/23 .text offEventBit__11dSv_event_cFUs
*/
void dSv_event_c::offEventBit(u16 i_no) {
- mEvent[(i_no >> 8)] &= ~(u8)i_no;
+ mEvent[i_no >> 8] &= ~(u8)i_no;
}
/* 800349BC-800349E0 02F2FC 0024+00 3/3 77/77 153/153 .text isEventBit__11dSv_event_cCFUs
*/
BOOL dSv_event_c::isEventBit(u16 i_no) const {
- return mEvent[(i_no >> 8)] & (i_no & 0xFF) ? TRUE : FALSE;
+ return mEvent[i_no >> 8] & (i_no & 0xFF) ? TRUE : FALSE;
}
/* 800349E0-80034A04 02F320 0024+00 0/0 12/12 17/17 .text setEventReg__11dSv_event_cFUsUc
@@ -1693,18 +1690,20 @@ SECTION_DEAD static char const* const stringBase_8037926C = "SAVE size:%d\n";
int dSv_info_c::memory_to_card(char* card_ptr, int dataNum) {
BOOL lantern_stolen;
BOOL lantern_dropped;
+
+ OSTime start;
+ OSTime time;
OSTime play_time;
bool lantern_not_recovered = false;
bool tmp_lantern_check = false;
u16 current_lantern_oil = 0;
-
// If haven't gotten then lantern back from the monkey
if (!i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[226])) {
// Store whether or not it's stolen and dropped
- lantern_stolen = i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[224]);
- lantern_dropped = i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[225]);
+ lantern_dropped = i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[224]);
+ lantern_stolen = i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[225]);
// Then turn those events off
dComIfGs_offEventBit(dSv_event_flag_c::saveBitLabels[224]);
@@ -1730,9 +1729,10 @@ int dSv_info_c::memory_to_card(char* card_ptr, int dataNum) {
card_ptr += dataNum * QUEST_LOG_SIZE;
dSv_save_c* savedata = dComIfGs_getSaveData();
- play_time = OSGetTime() - dComIfGs_getSaveStartTime();
- play_time += dComIfGs_getSaveTotalTime();
- // play_time += ();
+ start = dComIfGs_getSaveStartTime();
+ time = OSGetTime();
+
+ play_time = (time - start) + dComIfGs_getSaveTotalTime();
// 3599940 = 999:59 in seconds
if (dComIfGs_getSaveTotalTime() / OS_TIMER_CLOCK < 3599940) {
@@ -1740,15 +1740,16 @@ int dSv_info_c::memory_to_card(char* card_ptr, int dataNum) {
}
savedata->getPlayer().getPlayerStatusB().setDateIpl(OSGetTime());
+
memcpy(card_ptr, savedata, sizeof(dSv_save_c));
printf("Write size:%d\n", sizeof(dSv_save_c));
// Now that we've saved, reset events if needed
if (lantern_not_recovered == true) {
- if (lantern_stolen) {
+ if (lantern_dropped) {
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[224]);
}
- if (lantern_dropped) {
+ if (lantern_stolen) {
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[225]);
}
}
@@ -1774,9 +1775,9 @@ asm int dSv_info_c::memory_to_card(char* card_ptr, int dataNum) {
#endif
/* 80035A04-80035BD0 030344 01CC+00 0/0 2/2 0/0 .text card_to_memory__10dSv_info_cFPci */
-int dSv_info_c::card_to_memory(char* card_ptr, int dataNum) {
- card_ptr = card_ptr + dataNum * QUEST_LOG_SIZE;
- memcpy(dComIfGs_getSaveData(), card_ptr, sizeof(dSv_save_c));
+int dSv_info_c::card_to_memory(char* i_cardPtr, int i_dataNum) {
+ i_cardPtr = i_cardPtr + i_dataNum * QUEST_LOG_SIZE;
+ memcpy(dComIfGs_getSaveData(), i_cardPtr, sizeof(dSv_save_c));
if (OSGetSoundMode() == OS_SOUND_MODE_MONO) {
g_dComIfG_gameInfo.info.getPlayer().getConfig().setSound(OS_SOUND_MODE_MONO);
@@ -1795,12 +1796,12 @@ int dSv_info_c::card_to_memory(char* card_ptr, int dataNum) {
dComIfGs_setKeyNum(6, 0);
- if (dComIfGs_getItem(SLOT_9, 1) == W_HOOKSHOT) {
+ if (dComIfGs_getItem(SLOT_9, true) == W_HOOKSHOT) {
dComIfGs_setItem(SLOT_10, W_HOOKSHOT);
dComIfGs_setItem(SLOT_9, NO_ITEM);
}
- if (dComIfGs_getItem(SLOT_9, 1) == HOOKSHOT && dComIfGs_getItem(SLOT_10, true) == W_HOOKSHOT) {
+ if (dComIfGs_getItem(SLOT_9, true) == HOOKSHOT && dComIfGs_getItem(SLOT_10, true) == W_HOOKSHOT) {
dComIfGs_setItem(SLOT_9, NO_ITEM);
}
@@ -1818,15 +1819,15 @@ int dSv_info_c::card_to_memory(char* card_ptr, int dataNum) {
/* 80035BD0-80035C88 030510 00B8+00 0/0 3/3 0/0 .text initdata_to_card__10dSv_info_cFPci
*/
-int dSv_info_c::initdata_to_card(char* card_ptr, int dataNum) {
- card_ptr = card_ptr + (dataNum * QUEST_LOG_SIZE);
- dSv_save_c tmp;
-
- tmp.init();
- tmp.getPlayer().getPlayerInfo().setPlayerName("");
- tmp.getPlayer().getPlayerInfo().setHorseName("");
- memcpy(card_ptr, &tmp, 0x958);
- printf("INIT size:%d\n", 0x958);
+int dSv_info_c::initdata_to_card(char* i_cardPtr, int i_dataNum) {
+ i_cardPtr = i_cardPtr + (i_dataNum * QUEST_LOG_SIZE);
+ dSv_save_c save;
+
+ save.init();
+ save.getPlayer().getPlayerInfo().setPlayerName("");
+ save.getPlayer().getPlayerInfo().setHorseName("");
+ memcpy(i_cardPtr, &save, sizeof(dSv_save_c));
+ printf("INIT size:%d\n", sizeof(dSv_save_c));
return 0;
}