mirror of
https://github.com/zeldaret/st
synced 2026-06-17 23:21:10 -04:00
Fix SaveFile struct (#74)
* fix SaveFile struct * change remaining classes to structs for consistency
This commit is contained in:
@@ -2230,7 +2230,7 @@ func_ov000_02096b1c kind:function(arm,size=0x78) addr:0x02096b1c
|
||||
func_ov000_02096b94 kind:function(arm,size=0x14) addr:0x02096b94
|
||||
_ZN9Passenger5ResetEv kind:function(arm,size=0x24) addr:0x02096ba8
|
||||
func_ov000_02096bcc kind:function(arm,size=0x48) addr:0x02096bcc
|
||||
_ZN12SaveInfoSub5C1Ev kind:function(arm,size=0x14) addr:0x02096c14
|
||||
_ZN27SaveFile_00000_0000_Data_D8C1Ev kind:function(arm,size=0x14) addr:0x02096c14
|
||||
func_ov000_02096c28 kind:function(arm,size=0x20) addr:0x02096c28
|
||||
func_ov000_02096c48 kind:function(arm,size=0x48) addr:0x02096c48
|
||||
func_ov000_02096c90 kind:function(arm,size=0xc) addr:0x02096c90
|
||||
@@ -2717,11 +2717,11 @@ func_ov000_020a0f84 kind:function(thumb,size=0x30) addr:0x020a0f84
|
||||
func_ov000_020a0fb4 kind:function(thumb,size=0x10) addr:0x020a0fb4
|
||||
func_ov000_020a0fc4 kind:function(thumb,size=0x3c) addr:0x020a0fc4
|
||||
_ZN15SaveManager_21C19func_ov000_020a1000Ev kind:function(thumb,size=0x28) addr:0x020a1000
|
||||
_ZN8SaveInfo19func_ov000_020a1028Ev kind:function(thumb,size=0xcc) addr:0x020a1028
|
||||
_ZN8SaveSub719func_ov000_020a10f4Ev kind:function(arm,size=0x30) addr:0x020a10f4
|
||||
_ZN8SaveSlot19func_ov000_020a1028EP12SaveInfoData kind:function(thumb,size=0xcc) addr:0x020a1028
|
||||
_ZN8SaveSlot19func_ov000_020a10f4EP24SaveFile_00000_2600_Data kind:function(arm,size=0x30) addr:0x020a10f4
|
||||
_ZN8SaveSlot19func_ov000_020a1124Ev kind:function(arm,size=0x13c) addr:0x020a1124
|
||||
func_ov000_020a1260 kind:function(arm,size=0x40) addr:0x020a1260
|
||||
_ZN8SaveSub519func_ov000_020a12a0Ev kind:function(arm,size=0x3c) addr:0x020a12a0
|
||||
_ZN8SaveSlot19func_ov000_020a12a0EP24SaveFile_00000_1D00_Data kind:function(arm,size=0x3c) addr:0x020a12a0
|
||||
func_ov000_020a12dc kind:function(arm,size=0x18) addr:0x020a12dc
|
||||
func_ov000_020a12f4 kind:function(arm,size=0x8) addr:0x020a12f4
|
||||
func_ov000_020a12fc kind:function(arm,size=0x8) addr:0x020a12fc
|
||||
|
||||
@@ -259,13 +259,13 @@ _ZN8SaveFile19func_ov019_020d0ea8Ev kind:function(arm,size=0x260) addr:0x020d0ea
|
||||
_ZN8SaveFile19func_ov019_020d1108Ev kind:function(arm,size=0x174) addr:0x020d1108
|
||||
_ZN8SaveFile19func_ov019_020d127cEv kind:function(arm,size=0x13c) addr:0x020d127c
|
||||
_ZN8SaveFile19func_ov019_020d13b8Ev kind:function(arm,size=0x48) addr:0x020d13b8
|
||||
_ZN8SaveSub719func_ov019_020d1400Ev kind:function(arm,size=0x34) addr:0x020d1400
|
||||
_ZN8SaveSlot19func_ov019_020d1400EP24SaveFile_00000_2600_Data kind:function(arm,size=0x34) addr:0x020d1400
|
||||
_ZN8SaveFile19func_ov019_020d1434Ev kind:function(arm,size=0x8c) addr:0x020d1434
|
||||
_ZN8SaveSub519func_ov019_020d14c0Ev kind:function(arm,size=0x3c) addr:0x020d14c0
|
||||
_ZN8SaveInfo19func_ov019_020d14fcEv kind:function(arm,size=0x3c) addr:0x020d14fc
|
||||
_ZN8SaveSlot19func_ov019_020d14c0EP24SaveFile_00000_1D00_Data kind:function(arm,size=0x3c) addr:0x020d14c0
|
||||
_ZN8SaveSlot19func_ov019_020d14fcEP12SaveInfoData kind:function(arm,size=0x3c) addr:0x020d14fc
|
||||
_ZN8SaveFile19func_ov019_020d1538Ev kind:function(arm,size=0x94) addr:0x020d1538
|
||||
_ZN8SaveSub619func_ov019_020d15ccEv kind:function(arm,size=0x34) addr:0x020d15cc
|
||||
_ZN13SaveTreasures19func_ov019_020d1600Ev kind:function(arm,size=0x34) addr:0x020d1600
|
||||
_ZN8SaveSlot19func_ov019_020d15ccEP24SaveFile_00000_2500_Data kind:function(arm,size=0x34) addr:0x020d15cc
|
||||
_ZN8SaveSlot19func_ov019_020d1600EP16SaveTreasureData kind:function(arm,size=0x34) addr:0x020d1600
|
||||
_ZN8SaveFile19func_ov019_020d1634Ev kind:function(arm,size=0x9c) addr:0x020d1634
|
||||
_ZN8SaveFile19func_ov019_020d16d0Ev kind:function(arm,size=0x110) addr:0x020d16d0
|
||||
_ZN8SaveFile19func_ov019_020d17e0Ev kind:function(arm,size=0x28) addr:0x020d17e0
|
||||
|
||||
@@ -2228,7 +2228,7 @@ func_ov000_020982d0 kind:function(arm,size=0x78) addr:0x020982d0
|
||||
func_ov000_02098348 kind:function(arm,size=0x14) addr:0x02098348
|
||||
_ZN9Passenger5ResetEv kind:function(arm,size=0x24) addr:0x0209835c
|
||||
func_ov000_02098380 kind:function(arm,size=0x48) addr:0x02098380
|
||||
_ZN12SaveInfoSub5C1Ev kind:function(arm,size=0x14) addr:0x020983c8
|
||||
_ZN27SaveFile_00000_0000_Data_D8C1Ev kind:function(arm,size=0x14) addr:0x020983c8
|
||||
func_ov000_020983dc kind:function(arm,size=0x20) addr:0x020983dc
|
||||
func_ov000_020983fc kind:function(arm,size=0x48) addr:0x020983fc
|
||||
func_ov000_02098444 kind:function(arm,size=0xc) addr:0x02098444
|
||||
@@ -2715,11 +2715,11 @@ func_ov000_020a275c kind:function(thumb,size=0x30) addr:0x020a275c
|
||||
func_ov000_020a278c kind:function(thumb,size=0x10) addr:0x020a278c
|
||||
func_ov000_020a279c kind:function(thumb,size=0x3c) addr:0x020a279c
|
||||
_ZN15SaveManager_21C19func_ov000_020a1000Ev kind:function(thumb,size=0x28) addr:0x020a27d8
|
||||
_ZN8SaveInfo19func_ov000_020a1028Ev kind:function(thumb,size=0xcc) addr:0x020a2800
|
||||
_ZN8SaveSub719func_ov000_020a10f4Ev kind:function(arm,size=0x30) addr:0x020a28cc
|
||||
_ZN8SaveSlot19func_ov000_020a1028EP12SaveInfoData kind:function(thumb,size=0xcc) addr:0x020a2800
|
||||
_ZN8SaveSlot19func_ov000_020a10f4EP24SaveFile_00000_2600_Data kind:function(arm,size=0x30) addr:0x020a28cc
|
||||
_ZN8SaveSlot19func_ov000_020a1124Ev kind:function(arm,size=0x13c) addr:0x020a28fc
|
||||
func_ov000_020a2a38 kind:function(arm,size=0x40) addr:0x020a2a38
|
||||
_ZN8SaveSub519func_ov000_020a12a0Ev kind:function(arm,size=0x3c) addr:0x020a2a78
|
||||
_ZN8SaveSlot19func_ov000_020a12a0EP24SaveFile_00000_1D00_Data kind:function(arm,size=0x3c) addr:0x020a2a78
|
||||
func_ov000_020a2ab4 kind:function(arm,size=0x18) addr:0x020a2ab4
|
||||
func_ov000_020a2acc kind:function(arm,size=0x8) addr:0x020a2acc
|
||||
func_ov000_020a2ad4 kind:function(arm,size=0x8) addr:0x020a2ad4
|
||||
|
||||
@@ -259,13 +259,13 @@ _ZN8SaveFile19func_ov019_020d0ea8Ev kind:function(arm,size=0x260) addr:0x020d26c
|
||||
_ZN8SaveFile19func_ov019_020d1108Ev kind:function(arm,size=0x174) addr:0x020d2928
|
||||
_ZN8SaveFile19func_ov019_020d127cEv kind:function(arm,size=0x13c) addr:0x020d2a9c
|
||||
_ZN8SaveFile19func_ov019_020d13b8Ev kind:function(arm,size=0x48) addr:0x020d2bd8
|
||||
_ZN8SaveSub719func_ov019_020d1400Ev kind:function(arm,size=0x34) addr:0x020d2c20
|
||||
_ZN8SaveSlot19func_ov019_020d1400EP24SaveFile_00000_2600_Data kind:function(arm,size=0x34) addr:0x020d2c20
|
||||
_ZN8SaveFile19func_ov019_020d1434Ev kind:function(arm,size=0x8c) addr:0x020d2c54
|
||||
_ZN8SaveSub519func_ov019_020d14c0Ev kind:function(arm,size=0x3c) addr:0x020d2ce0
|
||||
_ZN8SaveInfo19func_ov019_020d14fcEv kind:function(arm,size=0x3c) addr:0x020d2d1c
|
||||
_ZN8SaveSlot19func_ov019_020d14c0EP24SaveFile_00000_1D00_Data kind:function(arm,size=0x3c) addr:0x020d2ce0
|
||||
_ZN8SaveSlot19func_ov019_020d14fcEP12SaveInfoData kind:function(arm,size=0x3c) addr:0x020d2d1c
|
||||
_ZN8SaveFile19func_ov019_020d1538Ev kind:function(arm,size=0x94) addr:0x020d2d58
|
||||
_ZN8SaveSub619func_ov019_020d15ccEv kind:function(arm,size=0x34) addr:0x020d2dec
|
||||
_ZN13SaveTreasures19func_ov019_020d1600Ev kind:function(arm,size=0x34) addr:0x020d2e20
|
||||
_ZN8SaveSlot19func_ov019_020d15ccEP24SaveFile_00000_2500_Data kind:function(arm,size=0x34) addr:0x020d2dec
|
||||
_ZN8SaveSlot19func_ov019_020d1600EP16SaveTreasureData kind:function(arm,size=0x34) addr:0x020d2e20
|
||||
_ZN8SaveFile19func_ov019_020d1634Ev kind:function(arm,size=0x9c) addr:0x020d2e54
|
||||
_ZN8SaveFile19func_ov019_020d16d0Ev kind:function(arm,size=0x110) addr:0x020d2ef0
|
||||
_ZN8SaveFile19func_ov019_020d17e0Ev kind:function(arm,size=0x28) addr:0x020d3000
|
||||
|
||||
@@ -0,0 +1,328 @@
|
||||
#pragma once
|
||||
|
||||
#include "Item/ItemManager.hpp"
|
||||
#include "MainGame/MiscAdvManager.hpp"
|
||||
#include "math.hpp"
|
||||
#include "types.h"
|
||||
|
||||
#include <nitro/mi.h>
|
||||
|
||||
// probably related to the map data?
|
||||
#define NUM_UNK_BLOCKS 120
|
||||
#define SIZE_UNK_BLOCK 0x1000
|
||||
|
||||
#define MAX_SAVE_SLOTS 2
|
||||
#define COUNT_DATA 2 // main data + backup (?)
|
||||
#define LENGTH_PLAYER_NAME 8
|
||||
|
||||
struct SaveFile_00000_0000_Data_D8 {
|
||||
/* 00 */ unk32 unk_00;
|
||||
/* 04 */ STRUCT_PAD(0x04, 0x6C);
|
||||
/* 6C */ u32 trackFlags[2];
|
||||
/* 74 */ unk32 spiritTrackFlags[1];
|
||||
/* 78 */ unk32 unk_74;
|
||||
/* 7C */ unk32 unk_78;
|
||||
/* 80 */
|
||||
|
||||
SaveFile_00000_0000_Data_D8();
|
||||
};
|
||||
|
||||
struct SaveFile_00000_0000_Data_184 {
|
||||
/* 00 */ unk32 unk_00;
|
||||
/* 04 */ unk16 unk_04;
|
||||
/* 06 */ unk16 unk_06;
|
||||
/* 08 */
|
||||
|
||||
SaveFile_00000_0000_Data_184() :
|
||||
unk_00(0),
|
||||
unk_04(0) {}
|
||||
};
|
||||
|
||||
struct SaveFile_00000_0000_Data_484 {
|
||||
/* 00 */ unk32 unk_00;
|
||||
/* 04 */ unk32 unk_04;
|
||||
/* 08 */
|
||||
|
||||
SaveFile_00000_0000_Data_484() :
|
||||
unk_00(0),
|
||||
unk_04(0) {}
|
||||
};
|
||||
|
||||
// same layout as `MiscAdvManager`
|
||||
struct SaveMiscAdvManager {
|
||||
/* 00 */ u16 stampDates[StampType_Max];
|
||||
/* 28 */ u16 unk_28;
|
||||
/* 2A */ u16 postDate;
|
||||
/* 2C */ union {
|
||||
Vec2b stampPositions[StampType_Max];
|
||||
u16 stampPos[StampType_Max];
|
||||
};
|
||||
/* 54 */ s8 obtainedLetters[LetterType_Max];
|
||||
/* 68 */ s8 obtainedStamps[StampType_Max];
|
||||
/* 7C */ u8 lastRandomNum;
|
||||
/* 7D */ u8 randomNum;
|
||||
/* 7E */ s8 numPriceCards; // current amount of price cards
|
||||
/* 7F */ s8 numPostedPriceCards; // current amount of posted price cards
|
||||
/* 80 */ unk8 unk_80;
|
||||
/* 81 */ unk8 unk_81; // pad?
|
||||
/* 82 */ unk8 unk_82; // pad?
|
||||
/* 83 */ unk8 unk_83; // pad?
|
||||
/* 84 */ unk32 lettersRead; // bitfield
|
||||
/* 88 */ unk32 stampsFlag; // bitfield, related to the checkmarks from the stampbook
|
||||
/* 8C */ unk16 songs; // bitfield
|
||||
/* 8E */ unk16 unk_8E; // pad?
|
||||
/* 90 */
|
||||
|
||||
SaveMiscAdvManager() :
|
||||
lettersRead(0),
|
||||
stampsFlag(0),
|
||||
songs(0) {}
|
||||
};
|
||||
|
||||
struct SaveInventory {
|
||||
/* 00 */ u32 adventureFlags[32];
|
||||
/* 80 */ unk32 unk_80;
|
||||
/* 84 */ u32 unk_84[2];
|
||||
/* 8C */ u16 numRupees;
|
||||
/* 8E */ u16 unk_8E;
|
||||
/* 90 */ ItemFlag equippedItem;
|
||||
/* 94 */ unk32 unk_94;
|
||||
/* 98 */
|
||||
|
||||
SaveInventory() {
|
||||
MI_CpuFill32(0, this->adventureFlags, sizeof(this->adventureFlags));
|
||||
MI_CpuFill32(0, this->unk_84, sizeof(this->unk_84));
|
||||
this->unk_8E = 0;
|
||||
}
|
||||
};
|
||||
|
||||
struct SaveFile_00000_0000_Data_158 {
|
||||
/* 00 */ unk8 unk_00[0x0C];
|
||||
/* 0C */ unk8 unk_0C[0x20];
|
||||
/* 2C */
|
||||
|
||||
SaveFile_00000_0000_Data_158() {
|
||||
MI_CpuFill32(0, this->unk_00, sizeof(this->unk_00));
|
||||
MI_CpuFill32(0, this->unk_0C, sizeof(this->unk_0C));
|
||||
}
|
||||
};
|
||||
|
||||
struct SaveFile_00000_0000_Data_C84 {
|
||||
/* 00 */ u32 unk_00[4];
|
||||
/* 10 */
|
||||
|
||||
SaveFile_00000_0000_Data_C84() {
|
||||
MI_CpuFill32(0, this->unk_00, sizeof(this->unk_00));
|
||||
}
|
||||
};
|
||||
|
||||
struct SaveFile_00000_0000_Data_TEST4 {
|
||||
/* D24 */ unk32 unk_D4C;
|
||||
/* D24 */ unk32 unk_D50;
|
||||
/* D24 */ unk32 unk_D54;
|
||||
/* D24 */ unk32 unk_D58;
|
||||
/* D24 */ unk32 unk_D5C;
|
||||
/* D24 */ unk32 unk_D60;
|
||||
/* D24 */ unk32 unk_D64;
|
||||
/* D24 */ unk32 unk_D68;
|
||||
/* D6C */ unk8 unk_D6C[0x08];
|
||||
/* D74 */ unk16 unk_D74;
|
||||
|
||||
SaveFile_00000_0000_Data_TEST4() {
|
||||
MI_CpuFill32(0, this->unk_D6C, sizeof(this->unk_D6C));
|
||||
this->unk_D74 = 0;
|
||||
}
|
||||
};
|
||||
|
||||
struct SaveInfoData {
|
||||
/* 000 */ unk32 unk_000;
|
||||
/* 004 */ unk32 unk_004;
|
||||
/* 008 */ unk32 unk_008;
|
||||
/* 00C */ unk32 unk_00C;
|
||||
/* 010 */ unk32 unk_010;
|
||||
/* 014 */ unk16 unk_014;
|
||||
/* 016 */ u16 sceneIndex;
|
||||
/* 018 */ u8 roomIndex;
|
||||
/* 019 */ u8 spawnIndex;
|
||||
/* 01A */ unk16 unk_01A;
|
||||
/* 01C */ unk32 unk_01C;
|
||||
/* 020 */ unk32 unk_020;
|
||||
/* 024 */ unk32 unk_024;
|
||||
/* 028 */ STRUCT_PAD(0x28, 0x40);
|
||||
/* 040 */ SaveInventory inventory;
|
||||
/* 0D8 */ SaveFile_00000_0000_Data_D8 unk_0D8;
|
||||
/* 158 */ SaveFile_00000_0000_Data_158 unk_158;
|
||||
/* 184 */ SaveFile_00000_0000_Data_184 unk_184[96];
|
||||
/* 484 */ SaveFile_00000_0000_Data_484 unk_484[256];
|
||||
/* C84 */ SaveFile_00000_0000_Data_C84 unk_C84;
|
||||
/* C94 */ SaveMiscAdvManager miscAdvManager;
|
||||
/* D24 */ unk32 unk_D24;
|
||||
/* D24 */ unk32 unk_D28;
|
||||
/* D24 */ unk32 unk_D2C;
|
||||
/* D24 */ unk32 unk_D30;
|
||||
/* D24 */ unk32 unk_D34;
|
||||
/* D24 */ unk32 unk_D38;
|
||||
/* D24 */ unk32 unk_D3C;
|
||||
/* D24 */ unk32 unk_D40;
|
||||
/* D24 */ unk32 unk_D44;
|
||||
/* D24 */ unk32 unk_D48;
|
||||
/* D4C */ SaveFile_00000_0000_Data_TEST4 unk_D4C;
|
||||
/* D78 */ unk32 unk_D78;
|
||||
/* D7C */ unk32 unk_D7C;
|
||||
/* D80 */ unk32 unk_D80;
|
||||
/* D84 */ unk32 unk_D84;
|
||||
/* D88 */ unk32 unk_D88;
|
||||
/* D8C */ unk32 unk_D8C;
|
||||
/* D90 */ unk32 unk_D90;
|
||||
/* D94 */ unk32 unk_D94;
|
||||
/* D98 */ unk32 unk_D98;
|
||||
/* D9C */ unk32 unk_D9C;
|
||||
/* DA0 */ unk16 unk_DA0;
|
||||
/* DA2 */ wchar_t mPlayerName[LENGTH_PLAYER_NAME + 1];
|
||||
/* DB4 */ unk32 unk_DB4;
|
||||
/* DB8 */ unk32 unk_DB8;
|
||||
/* DBC */ unk32 unk_DBC;
|
||||
/* DC0 */ unk32 unk_DC0;
|
||||
/* DC4 */ unk32 unk_DC4;
|
||||
/* DC8 */ unk32 unk_DC8;
|
||||
/* DCC */ unk32 unk_DCC;
|
||||
/* DD0 */ unk32 unk_DD0;
|
||||
/* DD4 */ unk32 unk_DD4;
|
||||
/* DD8 */ unk32 unk_DD8;
|
||||
/* DDC */ unk32 unk_DDC;
|
||||
/* DE0 */ unk32 unk_DE0;
|
||||
/* DE4 */ unk32 unk_DE4;
|
||||
/* DE8 */ unk32 unk_DE8;
|
||||
/* DEC */ unk32 unk_DEC;
|
||||
/* DF0 */ unk32 unk_DF0;
|
||||
/* DF4 */ unk32 unk_DF4;
|
||||
/* DF8 */ unk32 unk_DF8;
|
||||
/* DFC */ unk16 unk_DFC;
|
||||
/* DFE */ u16 unk_DFE;
|
||||
/* E00 */
|
||||
|
||||
SaveInfoData() :
|
||||
unk_014(0) {}
|
||||
};
|
||||
|
||||
struct SaveTreasureData {
|
||||
/* 00 */ STRUCT_PAD(0x00, 0x3C);
|
||||
/* 3C */ s16 unk_3C[TreasureType_Max];
|
||||
/* 5C */ unk16 unk_5C;
|
||||
/* 5E */ unk16 unk_5E;
|
||||
/* 60 */ STRUCT_PAD(0x60, 0x7E);
|
||||
/* 7E */ u16 unk_7E;
|
||||
/* 80 */
|
||||
|
||||
SaveTreasureData() :
|
||||
unk_5C(0) {}
|
||||
};
|
||||
|
||||
struct SaveFile_00000_1D00_Data {
|
||||
/* 000 */ STRUCT_PAD(0x00, 0x3C4);
|
||||
/* 3C4 */ wchar_t unk_3C4[LENGTH_PLAYER_NAME + 1];
|
||||
/* 3D6 */ STRUCT_PAD(0x3D6, 0x3FE);
|
||||
/* 3FE */ u16 unk_3FE;
|
||||
/* 400 */
|
||||
};
|
||||
|
||||
struct SaveFile_00000_2500_Data {
|
||||
/* 00 */ unk8 unk_00[0x7E];
|
||||
/* 7E */ u16 unk_7E;
|
||||
/* 80 */
|
||||
};
|
||||
|
||||
struct SaveFile_00000_2600_Data {
|
||||
/* 00 */ u8 unk_00;
|
||||
/* 01 */ u8 unk_01;
|
||||
/* 02 */ u8 unk_02;
|
||||
/* 03 */ Vec2b unk_03[61];
|
||||
/* 7E */ u16 unk_7E;
|
||||
/* 80 */
|
||||
};
|
||||
|
||||
class SaveSlot {
|
||||
public:
|
||||
/* 0000 */ SaveInfoData mInfoData[COUNT_DATA];
|
||||
/* 1C00 */ SaveTreasureData mTreasureData[COUNT_DATA];
|
||||
/* 1D00 */ SaveFile_00000_1D00_Data mUnk_1D00[COUNT_DATA];
|
||||
/* 2500 */ SaveFile_00000_2500_Data mUnk_2500[COUNT_DATA];
|
||||
/* 2600 */ SaveFile_00000_2600_Data mUnk_2600[COUNT_DATA];
|
||||
/* 2700 */
|
||||
|
||||
void func_ov000_020a1124(void);
|
||||
|
||||
bool GetAdventureFlag(AdventureFlag flag) {
|
||||
return GET_FLAG(this->mInfoData[0].inventory.adventureFlags, flag);
|
||||
}
|
||||
|
||||
wchar_t *GetPlayerName() {
|
||||
return this->mInfoData[0].mPlayerName;
|
||||
}
|
||||
|
||||
bool IsPlayerNameSet() {
|
||||
return this->mInfoData[0].mPlayerName[0] != L'\0';
|
||||
}
|
||||
|
||||
SaveFile_00000_2600_Data *Get2600Ptr() {
|
||||
return this->mUnk_2600;
|
||||
}
|
||||
|
||||
u8 Get2600_00() {
|
||||
return this->mUnk_2600[0].unk_00;
|
||||
}
|
||||
|
||||
u8 Get2600_01() {
|
||||
return this->mUnk_2600[0].unk_01;
|
||||
}
|
||||
|
||||
u8 Get2600_02() {
|
||||
return this->mUnk_2600[0].unk_02;
|
||||
}
|
||||
|
||||
static void func_ov000_020a1028(SaveInfoData *param1);
|
||||
static void func_ov000_020a10f4(SaveFile_00000_2600_Data *param1);
|
||||
static void func_ov000_020a12a0(SaveFile_00000_1D00_Data *param1);
|
||||
|
||||
static void func_ov019_020d14c0(SaveFile_00000_1D00_Data *param1);
|
||||
static void func_ov019_020d14fc(SaveInfoData *param1);
|
||||
static void func_ov019_020d15cc(SaveFile_00000_2500_Data *param1);
|
||||
static void func_ov019_020d1400(SaveFile_00000_2600_Data *param1);
|
||||
static void func_ov019_020d1600(SaveTreasureData *param1);
|
||||
};
|
||||
|
||||
struct SaveFile_04E00 {
|
||||
u16 unk_00;
|
||||
|
||||
SaveFile_04E00() :
|
||||
unk_00(0) {}
|
||||
};
|
||||
|
||||
class SaveFile {
|
||||
public:
|
||||
/* 00000 */ SaveSlot mSlots[MAX_SAVE_SLOTS];
|
||||
/* 04E00 */ SaveFile_04E00 mUnk_04E00[2][2];
|
||||
/* 04E08 */ unk16 mUnk_04E08;
|
||||
/* 04E0A */ u16 mSaveSlotIndex;
|
||||
/* 04E0C */ u8 mUnk_04E0C[NUM_UNK_BLOCKS * SIZE_UNK_BLOCK];
|
||||
/* 7CE0C */
|
||||
|
||||
SaveFile();
|
||||
|
||||
unk16 func_ov019_020d0c4c(unk32 param1, unk32 param2);
|
||||
unk16 func_ov019_020d0c90(unk32 param1);
|
||||
void func_ov019_020d0d50();
|
||||
void func_ov019_020d0e18(unk32 param1);
|
||||
void func_ov019_020d0ea8();
|
||||
void func_ov019_020d1108();
|
||||
void func_ov019_020d127c();
|
||||
void func_ov019_020d13b8();
|
||||
void func_ov019_020d1434();
|
||||
void func_ov019_020d1538();
|
||||
void func_ov019_020d1634();
|
||||
void func_ov019_020d16d0();
|
||||
void func_ov019_020d17e0();
|
||||
void func_ov019_020d1808(unk32 param1);
|
||||
void func_ov019_020d1aac(unk32 param1, const wchar_t *param2);
|
||||
void func_ov019_020d1b14(unk32 param1);
|
||||
};
|
||||
@@ -3,23 +3,15 @@
|
||||
#include "Item/ItemManager.hpp"
|
||||
#include "MainGame/MiscAdvManager.hpp"
|
||||
#include "Save/AdventureFlags.hpp"
|
||||
#include "Save/SaveFile.hpp"
|
||||
#include "System/SysNew.hpp"
|
||||
#include "Unknown/UnkStruct_ov000_02067bc4.hpp"
|
||||
#include "global.h"
|
||||
#include "types.h"
|
||||
#include <nitro/mi.h>
|
||||
|
||||
//! TODO: kinda draft state for now
|
||||
|
||||
// probably related to the map data?
|
||||
#define NUM_UNK_BLOCKS 120
|
||||
#define SIZE_UNK_BLOCK 0x1000
|
||||
|
||||
#define LENGTH_PLAYER_NAME 8
|
||||
#define COUNT_DATA 2 // main data + backup (?)
|
||||
|
||||
#define SAVE_DATA_SIZE (sizeof(SaveSlot) + sizeof(u8) * NUM_UNK_BLOCKS * SIZE_UNK_BLOCK)
|
||||
#define MAX_SAVE_SLOTS 2
|
||||
|
||||
enum {
|
||||
SaveDataIndex_SaveInfo,
|
||||
@@ -29,335 +21,6 @@ enum {
|
||||
SaveDataIndex_04,
|
||||
};
|
||||
|
||||
class SaveAdventureFlags {
|
||||
public:
|
||||
/* 00 */ u32 data[32];
|
||||
/* 80 */
|
||||
|
||||
SaveAdventureFlags() {
|
||||
MI_CpuFill32(0, this, sizeof(SaveAdventureFlags));
|
||||
};
|
||||
};
|
||||
|
||||
class SaveInventory {
|
||||
public:
|
||||
/* 00 */ unk32 mUnk_00;
|
||||
/* 04 */ u32 mUnk_04[2];
|
||||
/* 0C */ u16 mNumRupees;
|
||||
/* 0E */ u16 mUnk_12;
|
||||
/* 10 */ ItemFlag mEquippedItem;
|
||||
/* 14 */ unk32 mUnk_14;
|
||||
/* 18 */
|
||||
|
||||
SaveInventory() {
|
||||
MI_CpuFill32(0, this->mUnk_04, sizeof(mUnk_04));
|
||||
this->mUnk_12 = 0;
|
||||
};
|
||||
};
|
||||
|
||||
class TreasureData {
|
||||
public:
|
||||
/* 00 */ unk8 mUnk_00[0x3C];
|
||||
/* 3C */ s16 mUnk_3C[TreasureType_Max];
|
||||
/* 5C */ unk16 mUnk_5C;
|
||||
/* 5E */ unk16 mUnk_5E;
|
||||
/* 60 */ unsigned char _pad_0x60[(0x7E) - (0x60)];
|
||||
/* 7E */ u16 mUnk_7E;
|
||||
/* 80 */
|
||||
|
||||
TreasureData() :
|
||||
mUnk_5C(0) {}
|
||||
};
|
||||
|
||||
class SaveTreasures {
|
||||
public:
|
||||
/* 000 */ TreasureData mTreasureData[2];
|
||||
/* 100 */
|
||||
|
||||
SaveTreasures() {}
|
||||
void func_ov019_020d1600();
|
||||
};
|
||||
|
||||
class SaveInfoSub5 {
|
||||
public:
|
||||
/* 00 */ unk32 mUnk_00;
|
||||
SaveInfoSub5();
|
||||
};
|
||||
|
||||
class SaveUnknown158 {
|
||||
public:
|
||||
/* 00 */ unk8 mUnk_00[0x0C];
|
||||
SaveUnknown158() {
|
||||
MI_CpuFill32(0, this, sizeof(SaveUnknown158));
|
||||
};
|
||||
};
|
||||
|
||||
class SaveUnknown164 {
|
||||
public:
|
||||
/* 00 */ unk8 mUnk_00[0x20];
|
||||
SaveUnknown164() {
|
||||
MI_CpuFill32(0, this, sizeof(SaveUnknown164));
|
||||
};
|
||||
};
|
||||
|
||||
class Sub1Test {
|
||||
public:
|
||||
int a;
|
||||
short b;
|
||||
short p;
|
||||
Sub1Test() {
|
||||
a = 0;
|
||||
b = 0;
|
||||
}
|
||||
};
|
||||
|
||||
class Sub2Test {
|
||||
public:
|
||||
int a;
|
||||
int b;
|
||||
Sub2Test() {
|
||||
a = 0;
|
||||
b = 0;
|
||||
}
|
||||
};
|
||||
class Sub2Test2 {
|
||||
public:
|
||||
Sub2Test tab2[0xE0];
|
||||
/* C84 */ unk32 mUnk_00_SaveInfoSub10[4];
|
||||
|
||||
Sub2Test2() {
|
||||
MI_CpuFill32(0, this->mUnk_00_SaveInfoSub10, 16);
|
||||
}
|
||||
};
|
||||
|
||||
class SaveUnknown184_Sub {
|
||||
public:
|
||||
/* */ u8 pad1[390];
|
||||
/* */ Sub1Test tab1[0x4F];
|
||||
/* */ Sub2Test2 tab2;
|
||||
|
||||
SaveUnknown184_Sub() {}
|
||||
};
|
||||
|
||||
class SaveUnknown184 {
|
||||
public:
|
||||
/* 184 */ SaveUnknown184_Sub mUnk_184;
|
||||
|
||||
SaveUnknown184() {}
|
||||
};
|
||||
|
||||
class SaveUnknown14C {
|
||||
public:
|
||||
/* 14C */ unk32 mSpiritTrackFlags[1];
|
||||
/* 150 */ unk32 mUnk_150;
|
||||
/* 154 */ unk32 mUnk_154;
|
||||
/* 158 */ SaveUnknown158 mUnk_158;
|
||||
/* 164 */ SaveUnknown164 mUnk_164;
|
||||
|
||||
/* 184 */ SaveUnknown184 mUnk_184;
|
||||
|
||||
/* C94 */ MiscAdvManager mMiscAdvManager;
|
||||
/* D24 */ unk8 mUnk_00_SaveUnknownD24[0x48];
|
||||
/* D6C */ unk8 mUnk_48_SaveUnknownD24[8];
|
||||
/* D74 */ unk16 mUnk_50_SaveUnknownD24;
|
||||
/* D76 */ unk16 mUnk_52_SaveUnknownD24;
|
||||
/* D78 */ STRUCT_PAD(0xD78, 0xD8C);
|
||||
/* D8C */
|
||||
|
||||
SaveUnknown14C() {
|
||||
this->mMiscAdvManager.mLettersRead = 0;
|
||||
this->mMiscAdvManager.mStampsFlag = 0;
|
||||
this->mMiscAdvManager.mSongs = 0;
|
||||
MI_CpuFill32(0, this->mUnk_48_SaveUnknownD24, sizeof(this->mUnk_48_SaveUnknownD24));
|
||||
this->mUnk_50_SaveUnknownD24 = 0;
|
||||
}
|
||||
};
|
||||
|
||||
class SaveInfoData {
|
||||
public:
|
||||
/* 000 */ unk32 mUnk_000;
|
||||
/* 004 */ unk32 mUnk_004;
|
||||
/* 008 */ unk32 mUnk_008;
|
||||
/* 00C */ unk32 mUnk_00C;
|
||||
/* 010 */ unk32 mUnk_010;
|
||||
/* 014 */ unk16 mUnk_014;
|
||||
/* 016 */ u16 mSceneIndex;
|
||||
/* 018 */ u8 mRoomIndex; // "house" index but could be more?
|
||||
/* 019 */ u8 mSpawnIndex;
|
||||
/* 01A */ unk16 mUnk_01A;
|
||||
/* 01C */ unk32 mUnk_01C;
|
||||
/* 020 */ unk32 mUnk_020;
|
||||
/* 024 */ unk32 mUnk_024;
|
||||
/* 028 */ STRUCT_PAD(0x28, 0x40);
|
||||
/* 040 */ SaveAdventureFlags mAdventureFlags;
|
||||
/* 0C0 */ SaveInventory mInventory;
|
||||
/* 0D8 */ SaveInfoSub5 mUnk_0D8;
|
||||
/* 0DC */ STRUCT_PAD(0xDC, 0x144);
|
||||
/* 144 */ u32 mTrackFlags[2];
|
||||
/* 14C */ SaveUnknown14C mUnk_14C;
|
||||
/* D8C */ STRUCT_PAD(0xD8C, 0xDA2);
|
||||
/* DA2 */ wchar_t mPlayerName[LENGTH_PLAYER_NAME + 1];
|
||||
/* DB4 */ STRUCT_PAD(0xDB4, 0xDFE);
|
||||
/* DFE */ u16 mUnk_DFE;
|
||||
/* E00 */
|
||||
|
||||
SaveInfoData() :
|
||||
mUnk_014(0) {}
|
||||
};
|
||||
|
||||
class SaveInfo {
|
||||
public:
|
||||
/* 0000 */ SaveInfoData mSaveInfoData[COUNT_DATA];
|
||||
/* 1C00 */
|
||||
|
||||
SaveInfo() {}
|
||||
|
||||
void func_ov000_020a1028(void);
|
||||
void func_ov019_020d14fc(void);
|
||||
};
|
||||
|
||||
class SaveSub15 {
|
||||
public:
|
||||
/* 000 */ unk8 mUnk_000[(0x3C4) - (0x000)];
|
||||
/* 3C4 */ wchar_t mUnk_3C4[LENGTH_PLAYER_NAME + 1];
|
||||
/* 3D6 */ STRUCT_PAD(0x3D6, 0x3FE);
|
||||
/* 3FE */ u16 mUnk_3FE;
|
||||
/* 400 */
|
||||
|
||||
// SaveSub15() {}
|
||||
};
|
||||
|
||||
class SaveSub5 {
|
||||
public:
|
||||
/* 000 */ SaveSub15 mUnk_000[COUNT_DATA];
|
||||
/* 800 */
|
||||
|
||||
void func_ov000_020a12a0();
|
||||
void func_ov019_020d14c0();
|
||||
};
|
||||
|
||||
class SaveSub16 {
|
||||
public:
|
||||
/* 00 */ unk8 mUnk_00[0x7E];
|
||||
/* 7E */ u16 mUnk_7E;
|
||||
/* 80 */
|
||||
};
|
||||
|
||||
class SaveSub6 {
|
||||
public:
|
||||
/* 000 */ SaveSub16 mUnk_00[COUNT_DATA];
|
||||
/* 100 */
|
||||
|
||||
void func_ov019_020d15cc();
|
||||
};
|
||||
|
||||
struct SaveSub17_03 {
|
||||
/* 00 */ u8 mUnk_00;
|
||||
/* 01 */ u8 mUnk_01;
|
||||
/* 02 */
|
||||
};
|
||||
|
||||
class SaveSub17 {
|
||||
public:
|
||||
// /* 00 */ unk8 mUnk_00[0x7E];
|
||||
/* 00 */ u8 mUnk_00;
|
||||
/* 01 */ u8 mUnk_01;
|
||||
/* 02 */ u8 mUnk_02;
|
||||
/* 03 */ SaveSub17_03 mUnk_03[61];
|
||||
/* 7E */ u16 mUnk_7E;
|
||||
};
|
||||
|
||||
class SaveSub7 {
|
||||
public:
|
||||
/* 000 */ SaveSub17 mUnk_00[COUNT_DATA];
|
||||
/* 100 */
|
||||
|
||||
void func_ov000_020a10f4();
|
||||
void func_ov019_020d1400();
|
||||
};
|
||||
|
||||
class SaveSlot {
|
||||
public:
|
||||
/* 0000 */ SaveInfo mSaveInfo;
|
||||
/* 1C00 */ SaveTreasures mTreasures;
|
||||
// /* 1D00 */ u8 mUnk_1D00[0x2500 - 0x1D00];
|
||||
// /* 2500 */ u8 mUnk_2500[0x100];
|
||||
// /* 2600 */ u8 mUnk_2600[0x100];
|
||||
/* 1D00 */ SaveSub5 mUnk_1D00;
|
||||
/* 2500 */ SaveSub6 mUnk_2500;
|
||||
/* 2600 */ SaveSub7 mUnk_2600;
|
||||
/* 2700 */
|
||||
|
||||
SaveSlot() {}
|
||||
void func_ov000_020a1124(void);
|
||||
|
||||
bool GetAdventureFlag(AdventureFlag flag) {
|
||||
return GET_FLAG(this->mSaveInfo.mSaveInfoData[0].mAdventureFlags.data, flag);
|
||||
}
|
||||
|
||||
wchar_t *GetPlayerName() {
|
||||
return this->mSaveInfo.mSaveInfoData[0].mPlayerName;
|
||||
}
|
||||
|
||||
bool IsPlayerNameSet() {
|
||||
return this->mSaveInfo.mSaveInfoData[0].mPlayerName[0] != L'\0';
|
||||
}
|
||||
|
||||
SaveSub17 *Get2600Ptr() {
|
||||
return this->mUnk_2600.mUnk_00;
|
||||
}
|
||||
|
||||
u8 Get2600_00() {
|
||||
return this->mUnk_2600.mUnk_00[0].mUnk_00;
|
||||
}
|
||||
|
||||
u8 Get2600_01() {
|
||||
return this->mUnk_2600.mUnk_00[0].mUnk_01;
|
||||
}
|
||||
|
||||
u8 Get2600_02() {
|
||||
return this->mUnk_2600.mUnk_00[0].mUnk_02;
|
||||
}
|
||||
};
|
||||
|
||||
class SaveFileSub1 {
|
||||
public:
|
||||
u16 mUnk_00;
|
||||
|
||||
SaveFileSub1() :
|
||||
mUnk_00(0) {}
|
||||
};
|
||||
|
||||
// save data
|
||||
class SaveFile : public SysObject {
|
||||
public:
|
||||
/* 00000 */ SaveSlot mSlots[MAX_SAVE_SLOTS];
|
||||
/* 04E00 */ SaveFileSub1 mUnk_04E00[2][2];
|
||||
/* 04E08 */ unk16 mUnk_04E08;
|
||||
/* 04E0A */ u16 mSaveSlotIndex;
|
||||
/* 04E0C */ u8 mUnk_04E0C[NUM_UNK_BLOCKS * SIZE_UNK_BLOCK];
|
||||
/* 7CE0C */
|
||||
|
||||
SaveFile();
|
||||
|
||||
unk16 func_ov019_020d0c4c(unk32 param1, unk32 param2);
|
||||
unk16 func_ov019_020d0c90(unk32 param1);
|
||||
void func_ov019_020d0d50();
|
||||
void func_ov019_020d0e18(unk32 param1);
|
||||
void func_ov019_020d0ea8();
|
||||
void func_ov019_020d1108();
|
||||
void func_ov019_020d127c();
|
||||
void func_ov019_020d13b8();
|
||||
void func_ov019_020d1434();
|
||||
void func_ov019_020d1538();
|
||||
void func_ov019_020d1634();
|
||||
void func_ov019_020d16d0();
|
||||
void func_ov019_020d17e0();
|
||||
void func_ov019_020d1808(unk32 param1);
|
||||
void func_ov019_020d1aac(unk32 param1, const wchar_t *param2);
|
||||
void func_ov019_020d1b14(unk32 param1);
|
||||
};
|
||||
|
||||
class SaveManager_21C {
|
||||
public:
|
||||
/* 00 */ unk32 mUnk_00;
|
||||
|
||||
@@ -13,11 +13,15 @@ void func_ov000_020a0b58();
|
||||
};
|
||||
|
||||
const size_t data_ov019_020d1bd4[] = {
|
||||
sizeof(SaveInfoData), sizeof(TreasureData), sizeof(SaveSub15), sizeof(SaveSub16), sizeof(SaveSub17),
|
||||
sizeof(SaveInfoData),
|
||||
sizeof(SaveTreasureData),
|
||||
sizeof(SaveFile_00000_1D00_Data),
|
||||
sizeof(SaveFile_00000_2500_Data),
|
||||
sizeof(SaveFile_00000_2600_Data),
|
||||
};
|
||||
|
||||
const unk32 data_ov019_020d1be8[] = {
|
||||
offsetof(SaveSlot, mSaveInfo), offsetof(SaveSlot, mTreasures), offsetof(SaveSlot, mUnk_1D00),
|
||||
offsetof(SaveSlot, mInfoData), offsetof(SaveSlot, mTreasureData), offsetof(SaveSlot, mUnk_1D00),
|
||||
offsetof(SaveSlot, mUnk_2500), offsetof(SaveSlot, mUnk_2600),
|
||||
};
|
||||
|
||||
@@ -102,19 +106,17 @@ ARM void SaveManager::func_ov019_020d0ae0(unk32 param1) {
|
||||
data_02049b80.func_02013ecc(0, SaveManager::func_ov019_020d0a2c, param1);
|
||||
}
|
||||
|
||||
#pragma optimization_level 2
|
||||
|
||||
ARM SaveFile::SaveFile() :
|
||||
SaveFile::SaveFile() :
|
||||
mUnk_04E08(0),
|
||||
mSaveSlotIndex(0) {}
|
||||
|
||||
#pragma optimization_level reset
|
||||
#pragma optimization_level 2
|
||||
|
||||
ARM unk16 SaveFile::func_ov019_020d0c4c(unk32 param1, unk32 param2) {
|
||||
s16 i = 0;
|
||||
|
||||
do {
|
||||
if ((this->mUnk_04E00[param1][i].mUnk_00 & (1 << param1)) != 0) {
|
||||
if ((this->mUnk_04E00[i][param2].unk_00 & (1 << param1)) != 0) {
|
||||
return i;
|
||||
}
|
||||
|
||||
@@ -124,6 +126,8 @@ ARM unk16 SaveFile::func_ov019_020d0c4c(unk32 param1, unk32 param2) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
#pragma optimization_level reset
|
||||
|
||||
ARM unk16 SaveFile::func_ov019_020d0c90(unk32 param1) {
|
||||
unk16 var_r7;
|
||||
unk16 var_r8;
|
||||
@@ -202,11 +206,12 @@ ARM void SaveFile::func_ov019_020d0e18(unk32 param1) {
|
||||
size_t offset = param1 * SAVE_DATA_SIZE;
|
||||
SaveSlot *puVar3 = &this->mSlots[param1];
|
||||
|
||||
if (!func_ov000_020a0a90(offset, &puVar3->mSaveInfo, sizeof(puVar3->mSaveInfo))) {
|
||||
if (!func_ov000_020a0a90(offset + offsetof(SaveSlot, mInfoData), &puVar3->mInfoData, sizeof(puVar3->mInfoData))) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!func_ov000_020a0a90(offset + offsetof(SaveSlot, mTreasures), &puVar3->mTreasures, sizeof(puVar3->mTreasures))) {
|
||||
if (!func_ov000_020a0a90(offset + offsetof(SaveSlot, mTreasureData), &puVar3->mTreasureData,
|
||||
sizeof(puVar3->mTreasureData))) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -218,39 +223,43 @@ ARM void SaveFile::func_ov019_020d0e18(unk32 param1) {
|
||||
return;
|
||||
}
|
||||
|
||||
func_ov000_020a0a90(offset + offsetof(SaveSlot, mUnk_2600), &puVar3->mUnk_2600, sizeof(puVar3->mUnk_2600));
|
||||
if (!func_ov000_020a0a90(offset + offsetof(SaveSlot, mUnk_2600), &puVar3->mUnk_2600, sizeof(puVar3->mUnk_2600))) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
ARM void SaveFile::func_ov019_020d0ea8() {}
|
||||
|
||||
ARM void SaveFile::func_ov019_020d1108() {}
|
||||
|
||||
ARM void SaveFile::func_ov019_020d127c() {}
|
||||
|
||||
// https://decomp.me/scratch/lmC67
|
||||
ARM void SaveFile::func_ov019_020d13b8() {
|
||||
u16 saveSlotIndex = this->mSaveSlotIndex;
|
||||
|
||||
this->mSlots[this->mSaveSlotIndex].mUnk_2600.func_ov019_020d1400();
|
||||
SaveSlot::func_ov019_020d1400(this->mSlots[this->mSaveSlotIndex].mUnk_2600);
|
||||
|
||||
func_ov000_020a0a90(saveSlotIndex * SAVE_DATA_SIZE + offsetof(SaveSlot, mUnk_2600),
|
||||
&this->mSlots[this->mSaveSlotIndex].mUnk_2600, sizeof(this->mSlots->mUnk_2600));
|
||||
this->mSlots[this->mSaveSlotIndex].mUnk_2600, sizeof(this->mSlots->mUnk_2600));
|
||||
}
|
||||
|
||||
ARM void SaveSub7::func_ov019_020d1400() {
|
||||
this->mUnk_00[0].mUnk_7E = func_020328c8(&gSaveManager.mUnk_004, &this->mUnk_00, sizeof(SaveSub17) - sizeof(u16));
|
||||
MI_CpuCopyFast(&this->mUnk_00[0], &this->mUnk_00[1], sizeof(SaveSub17));
|
||||
ARM void SaveSlot::func_ov019_020d1400(SaveFile_00000_2600_Data *param1) {
|
||||
param1->unk_7E = func_020328c8(&gSaveManager.mUnk_004, param1, sizeof(SaveFile_00000_2600_Data) - sizeof(u16));
|
||||
MI_CpuCopyFast(param1, (u8 *) param1 + sizeof(SaveFile_00000_2600_Data), sizeof(SaveFile_00000_2600_Data));
|
||||
}
|
||||
|
||||
// non-matching
|
||||
ARM void SaveFile::func_ov019_020d1434() {
|
||||
size_t offset = this->mSaveSlotIndex * SAVE_DATA_SIZE;
|
||||
|
||||
this->mSlots[this->mSaveSlotIndex].mSaveInfo.func_ov019_020d14fc();
|
||||
if (!func_ov000_020a0a90(offset, &this->mSlots[this->mSaveSlotIndex].mSaveInfo,
|
||||
sizeof(this->mSlots[this->mSaveSlotIndex].mSaveInfo))) {
|
||||
SaveSlot::func_ov019_020d14fc(this->mSlots[this->mSaveSlotIndex].mInfoData);
|
||||
if (!func_ov000_020a0a90(offset, &this->mSlots[this->mSaveSlotIndex].mInfoData,
|
||||
sizeof(this->mSlots[this->mSaveSlotIndex].mInfoData))) {
|
||||
return;
|
||||
}
|
||||
|
||||
this->mSlots[this->mSaveSlotIndex].mUnk_1D00.func_ov019_020d14c0();
|
||||
SaveSlot::func_ov019_020d14c0(this->mSlots[this->mSaveSlotIndex].mUnk_1D00);
|
||||
if (!func_ov000_020a0a90(offset + offsetof(SaveSlot, mUnk_1D00), &this->mSlots[this->mSaveSlotIndex].mUnk_1D00,
|
||||
sizeof(this->mSlots[this->mSaveSlotIndex].mUnk_1D00))) {
|
||||
return;
|
||||
@@ -258,15 +267,15 @@ ARM void SaveFile::func_ov019_020d1434() {
|
||||
|
||||
this->func_ov019_020d13b8();
|
||||
}
|
||||
ARM void SaveSub5::func_ov019_020d14c0() {
|
||||
this->mUnk_000[0].mUnk_3FE = func_020328c8(&gSaveManager.mUnk_004, &this->mUnk_000, offsetof(SaveSub15, mUnk_3FE));
|
||||
MI_CpuCopyFast(&this->mUnk_000[0], &this->mUnk_000[1], sizeof(SaveSub15));
|
||||
|
||||
ARM void SaveSlot::func_ov019_020d14c0(SaveFile_00000_1D00_Data *param1) {
|
||||
param1->unk_3FE = func_020328c8(&gSaveManager.mUnk_004, param1, offsetof(SaveFile_00000_1D00_Data, unk_3FE));
|
||||
MI_CpuCopyFast(param1, (u8 *) param1 + sizeof(SaveFile_00000_1D00_Data), sizeof(SaveFile_00000_1D00_Data));
|
||||
}
|
||||
|
||||
ARM void SaveInfo::func_ov019_020d14fc() {
|
||||
this->mSaveInfoData[0].mUnk_DFE =
|
||||
func_020328c8(&gSaveManager.mUnk_004, &this->mSaveInfoData[0].mUnk_000, offsetof(SaveInfoData, mUnk_DFE));
|
||||
MI_CpuCopyFast(&this->mSaveInfoData[0], &this->mSaveInfoData[1], sizeof(SaveInfoData));
|
||||
ARM void SaveSlot::func_ov019_020d14fc(SaveInfoData *param1) {
|
||||
param1->unk_DFE = func_020328c8(&gSaveManager.mUnk_004, param1, offsetof(SaveInfoData, unk_DFE));
|
||||
MI_CpuCopyFast(param1, (u8 *) param1 + sizeof(SaveInfoData), sizeof(SaveInfoData));
|
||||
}
|
||||
|
||||
//! TODO: weird sizeof
|
||||
@@ -275,13 +284,13 @@ ARM void SaveFile::func_ov019_020d1538() {
|
||||
|
||||
offset = this->mSaveSlotIndex * SAVE_DATA_SIZE;
|
||||
|
||||
this->mSlots[this->mSaveSlotIndex].mTreasures.func_ov019_020d1600();
|
||||
if (!func_ov000_020a0a90(offset + offsetof(SaveSlot, mTreasures), &this->mSlots[this->mSaveSlotIndex].mTreasures,
|
||||
SaveSlot::func_ov019_020d1600(this->mSlots[this->mSaveSlotIndex].mTreasureData);
|
||||
if (!func_ov000_020a0a90(offset + offsetof(SaveSlot, mTreasureData), &this->mSlots[this->mSaveSlotIndex].mTreasureData,
|
||||
0x1C00)) {
|
||||
return;
|
||||
}
|
||||
|
||||
this->mSlots[this->mSaveSlotIndex].mUnk_2500.func_ov019_020d15cc();
|
||||
SaveSlot::func_ov019_020d15cc(this->mSlots[this->mSaveSlotIndex].mUnk_2500);
|
||||
if (!func_ov000_020a0a90(offset + offsetof(SaveSlot, mUnk_2500), &this->mSlots[this->mSaveSlotIndex].mUnk_2500, 0x800)) {
|
||||
return;
|
||||
}
|
||||
@@ -289,15 +298,14 @@ ARM void SaveFile::func_ov019_020d1538() {
|
||||
this->func_ov019_020d1434();
|
||||
}
|
||||
|
||||
ARM void SaveSub6::func_ov019_020d15cc() {
|
||||
this->mUnk_00[0].mUnk_7E = func_020328c8(&gSaveManager.mUnk_004, &this->mUnk_00, offsetof(SaveSub16, mUnk_7E));
|
||||
MI_CpuCopyFast(&this->mUnk_00[0], &this->mUnk_00[1], sizeof(SaveSub16));
|
||||
ARM void SaveSlot::func_ov019_020d15cc(SaveFile_00000_2500_Data *param1) {
|
||||
param1->unk_7E = func_020328c8(&gSaveManager.mUnk_004, param1, offsetof(SaveFile_00000_2500_Data, unk_7E));
|
||||
MI_CpuCopyFast(param1, (u8 *) param1 + sizeof(SaveFile_00000_2500_Data), sizeof(SaveFile_00000_2500_Data));
|
||||
}
|
||||
|
||||
ARM void SaveTreasures::func_ov019_020d1600() {
|
||||
this->mTreasureData[0].mUnk_7E =
|
||||
func_020328c8(&gSaveManager.mUnk_004, &this->mTreasureData, offsetof(TreasureData, mUnk_7E));
|
||||
MI_CpuCopyFast(&this->mTreasureData[0], &this->mTreasureData[1], sizeof(TreasureData));
|
||||
ARM void SaveSlot::func_ov019_020d1600(SaveTreasureData *param1) {
|
||||
param1->unk_7E = func_020328c8(&gSaveManager.mUnk_004, param1, offsetof(SaveTreasureData, unk_7E));
|
||||
MI_CpuCopyFast(param1, (u8 *) param1 + sizeof(SaveTreasureData), sizeof(SaveTreasureData));
|
||||
}
|
||||
|
||||
// https://decomp.me/scratch/ibnQS
|
||||
@@ -305,12 +313,11 @@ ARM void SaveFile::func_ov019_020d1634() {
|
||||
SaveSlot *pSlot = &this->mSlots[this->mSaveSlotIndex];
|
||||
size_t offset = this->mSaveSlotIndex * SAVE_DATA_SIZE;
|
||||
|
||||
for (int i = 0; i < 120; i++) {
|
||||
// if (pSlot->mSaveInfo.mSaveInfoData[0].mUnk_C84.mUnk_00[(u32) i >> 5] & (1 << (i & 0x1F))) {
|
||||
// u32 dest = (i << 12) + sizeof(SaveSlot);
|
||||
// u8 *src = &this->mUnk_04E0C[i << 12];
|
||||
// CARD_ReadWriteBackupAsync(src, offset + dest, 0x1000, 0, 0, 0, 6, 1, 0);
|
||||
// }
|
||||
for (int i = 0; i < NUM_UNK_BLOCKS; i++) {
|
||||
if (GET_FLAG(pSlot->mInfoData[0].unk_C84.unk_00, i)) {
|
||||
u32 dest = (i * SIZE_UNK_BLOCK) + sizeof(SaveSlot);
|
||||
CARD_ReadFlashAsync(offset + dest, &this->mUnk_04E0C[i * SIZE_UNK_BLOCK], 0x1000, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -320,26 +327,27 @@ ARM void SaveFile::func_ov019_020d16d0() {
|
||||
SaveSlot *pSub2 = &this->mSlots[this->mSaveSlotIndex];
|
||||
SaveSlot *pSub3 = &this->mSlots[saveSlotIndex];
|
||||
|
||||
MI_CpuCopyFast(&pSub2->mSaveInfo, &pSub3->mSaveInfo, sizeof(SaveInfo));
|
||||
MI_CpuCopyFast(&pSub2->mTreasures, &pSub3->mTreasures, sizeof(SaveTreasures));
|
||||
MI_CpuCopyFast(&pSub2->mUnk_2600, &pSub3->mUnk_2600, sizeof(SaveSub7));
|
||||
MI_CpuCopyFast(&pSub2->mInfoData, &pSub3->mInfoData, sizeof(SaveInfoData));
|
||||
MI_CpuCopyFast(&pSub2->mTreasureData, &pSub3->mTreasureData, sizeof(SaveTreasureData));
|
||||
MI_CpuCopyFast(&pSub2->mUnk_2600, &pSub3->mUnk_2600, sizeof(SaveFile_00000_2600_Data));
|
||||
|
||||
pSub3->mUnk_1D00.func_ov000_020a12a0();
|
||||
MI_CpuCopyFast(&pSub2->mUnk_1D00, &pSub3->mUnk_1D00, sizeof(SaveSub5));
|
||||
SaveSlot::func_ov000_020a12a0(pSub3->mUnk_1D00);
|
||||
MI_CpuCopyFast(&pSub2->mUnk_1D00, &pSub3->mUnk_1D00, sizeof(SaveFile_00000_1D00_Data));
|
||||
|
||||
MI_CpuClearFast(&pSub3->mUnk_2500, sizeof(SaveSub6));
|
||||
MI_CpuCopyFast(&pSub2->mUnk_2500, &pSub3->mUnk_2500, sizeof(SaveSub6));
|
||||
MI_CpuClearFast(&pSub3->mUnk_2500, sizeof(SaveFile_00000_2500_Data));
|
||||
MI_CpuCopyFast(&pSub2->mUnk_2500, &pSub3->mUnk_2500, sizeof(SaveFile_00000_2500_Data));
|
||||
|
||||
this->mSaveSlotIndex = saveSlotIndex;
|
||||
this->func_ov019_020d1538();
|
||||
|
||||
for (int i = 0; i < NUM_UNK_BLOCKS; i++) {
|
||||
// if (pSub2->mSaveInfo.mSaveInfoData[i >> 5].mUnk_C84.mUnk_00[0] & (1 << (i & 0x1F))) {
|
||||
// func_ov000_020a0a90(slot * SAVE_DATA_SIZE + i * SIZE_UNK_BLOCK + sizeof(SaveSlot),
|
||||
// &this->mUnk_04E0C[i * SIZE_UNK_BLOCK], SIZE_UNK_BLOCK);
|
||||
// }
|
||||
if (pSub2->mInfoData[i >> 5].unk_C84.unk_00[0] & (1 << (i & 0x1F))) {
|
||||
func_ov000_020a0a90(saveSlotIndex * SAVE_DATA_SIZE + i * SIZE_UNK_BLOCK + sizeof(SaveSlot),
|
||||
&this->mUnk_04E0C[i * SIZE_UNK_BLOCK], SIZE_UNK_BLOCK);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ARM void SaveFile::func_ov019_020d17e0() {
|
||||
for (int i = 0; i < MAX_SAVE_SLOTS; i++) {
|
||||
this->func_ov019_020d1808(i);
|
||||
@@ -363,29 +371,25 @@ ARM void SaveFile::func_ov019_020d1808(unk32 param1) {
|
||||
|
||||
for (int i = 0; i < COUNT_DATA; i++) {
|
||||
stack1[SaveDataIndex_SaveInfo].mUnk_00 =
|
||||
func_020328c8(&gSaveManager.mUnk_004, &pSub2->mSaveInfo.mSaveInfoData[i], sizeof(SaveInfoData) - sizeof(u16));
|
||||
stack1[SaveDataIndex_SaveInfo].mUnk_04 =
|
||||
pSub2->mSaveInfo.mSaveInfoData[i].mUnk_DFE == stack1[SaveDataIndex_SaveInfo].mUnk_00;
|
||||
func_020328c8(&gSaveManager.mUnk_004, &pSub2->mInfoData[i], sizeof(SaveInfoData) - sizeof(u16));
|
||||
stack1[SaveDataIndex_SaveInfo].mUnk_04 = pSub2->mInfoData[i].unk_DFE == stack1[SaveDataIndex_SaveInfo].mUnk_00;
|
||||
|
||||
stack1[SaveDataIndex_Treasures].mUnk_00 =
|
||||
func_020328c8(&gSaveManager.mUnk_004, &pSub2->mTreasures.mTreasureData[i], sizeof(TreasureData) - sizeof(u16));
|
||||
func_020328c8(&gSaveManager.mUnk_004, &pSub2->mTreasureData[i], sizeof(SaveTreasureData) - sizeof(u16));
|
||||
stack1[SaveDataIndex_Treasures].mUnk_04 =
|
||||
pSub2->mTreasures.mTreasureData[i].mUnk_7E == stack1[SaveDataIndex_Treasures].mUnk_00 ? true : false;
|
||||
pSub2->mTreasureData[i].unk_7E == stack1[SaveDataIndex_Treasures].mUnk_00 ? true : false;
|
||||
|
||||
stack1[SaveDataIndex_02].mUnk_00 =
|
||||
func_020328c8(&gSaveManager.mUnk_004, &pSub2->mUnk_1D00.mUnk_000[i], sizeof(SaveSub15) - sizeof(u16));
|
||||
stack1[SaveDataIndex_02].mUnk_04 =
|
||||
pSub2->mUnk_1D00.mUnk_000[i].mUnk_3FE == stack1[SaveDataIndex_02].mUnk_00 ? true : false;
|
||||
func_020328c8(&gSaveManager.mUnk_004, &pSub2->mUnk_1D00[i], sizeof(SaveFile_00000_1D00_Data) - sizeof(u16));
|
||||
stack1[SaveDataIndex_02].mUnk_04 = pSub2->mUnk_1D00[i].unk_3FE == stack1[SaveDataIndex_02].mUnk_00 ? true : false;
|
||||
|
||||
stack1[SaveDataIndex_03].mUnk_00 =
|
||||
func_020328c8(&gSaveManager.mUnk_004, &pSub2->mUnk_2500.mUnk_00[i], sizeof(SaveSub16) - sizeof(u16));
|
||||
stack1[SaveDataIndex_03].mUnk_04 =
|
||||
pSub2->mUnk_2500.mUnk_00[i].mUnk_7E == stack1[SaveDataIndex_03].mUnk_00 ? true : false;
|
||||
func_020328c8(&gSaveManager.mUnk_004, &pSub2->mUnk_2500[i], sizeof(SaveFile_00000_2500_Data) - sizeof(u16));
|
||||
stack1[SaveDataIndex_03].mUnk_04 = pSub2->mUnk_2500[i].unk_7E == stack1[SaveDataIndex_03].mUnk_00 ? true : false;
|
||||
|
||||
stack1[SaveDataIndex_04].mUnk_00 =
|
||||
func_020328c8(&gSaveManager.mUnk_004, &pSub2->mUnk_2600.mUnk_00[i], sizeof(SaveSub17) - sizeof(u16));
|
||||
stack1[SaveDataIndex_04].mUnk_04 =
|
||||
pSub2->mUnk_2600.mUnk_00[i].mUnk_7E == stack1[SaveDataIndex_04].mUnk_00 ? true : false;
|
||||
func_020328c8(&gSaveManager.mUnk_004, &pSub2->mUnk_2600[i], sizeof(SaveFile_00000_2600_Data) - sizeof(u16));
|
||||
stack1[SaveDataIndex_04].mUnk_04 = pSub2->mUnk_2600[i].unk_7E == stack1[SaveDataIndex_04].mUnk_00 ? true : false;
|
||||
}
|
||||
|
||||
for (u32 i = 0; i < 5; i++) {
|
||||
@@ -394,13 +398,13 @@ ARM void SaveFile::func_ov019_020d1808(unk32 param1) {
|
||||
if (stack1[i].mUnk_00 != 0) {
|
||||
if (stack1[i].mUnk_04 == 0 || stack1[i].mUnk_00 != stack1[i * 2].mUnk_04) {
|
||||
MI_CpuCopyFast(puVar5, puVar5 + data_ov019_020d1bd4[i], data_ov019_020d1bd4[i]);
|
||||
this->mUnk_04E00[param1][1].mUnk_00 |= 1 << (i & 0xFF);
|
||||
this->mUnk_04E00[param1][1].unk_00 |= 1 << (i & 0xFF);
|
||||
}
|
||||
} else {
|
||||
this->mUnk_04E00[param1][0].mUnk_00 |= 1 << (i & 0xFF);
|
||||
this->mUnk_04E00[param1][0].unk_00 |= 1 << (i & 0xFF);
|
||||
|
||||
if (stack1[i * 2].mUnk_04 == 0) {
|
||||
this->mUnk_04E00[param1][1].mUnk_00 |= 1 << (i & 0xFF);
|
||||
this->mUnk_04E00[param1][1].unk_00 |= 1 << (i & 0xFF);
|
||||
} else {
|
||||
MI_CpuCopyFast(puVar5 + data_ov019_020d1bd4[i], puVar5, data_ov019_020d1bd4[i]);
|
||||
}
|
||||
@@ -413,9 +417,9 @@ ARM void SaveFile::func_ov019_020d1aac(unk32 param1, const wchar_t *param2) {
|
||||
|
||||
awStack_28[8] = L'\0';
|
||||
wcsncpy(awStack_28, param2, LENGTH_PLAYER_NAME);
|
||||
MI_CpuCopy16((u16 *) awStack_28, (u16 *) this->mSlots[param1].mSaveInfo.mSaveInfoData[0].mPlayerName,
|
||||
MI_CpuCopy16((u16 *) awStack_28, (u16 *) this->mSlots[param1].mInfoData[0].mPlayerName,
|
||||
sizeof(wchar_t) * (LENGTH_PLAYER_NAME + 1));
|
||||
MI_CpuCopy16((u16 *) awStack_28, (u16 *) this->mSlots[param1].mUnk_1D00.mUnk_000[0].mUnk_3C4,
|
||||
MI_CpuCopy16((u16 *) awStack_28, (u16 *) this->mSlots[param1].mUnk_1D00[0].unk_3C4,
|
||||
sizeof(wchar_t) * (LENGTH_PLAYER_NAME + 1));
|
||||
}
|
||||
|
||||
@@ -423,22 +427,22 @@ ARM void SaveFile::func_ov019_020d1aac(unk32 param1, const wchar_t *param2) {
|
||||
ARM void SaveFile::func_ov019_020d1b14(unk32 param1) {
|
||||
SaveSlot *pSVar3;
|
||||
|
||||
pSVar3 = this->mSlots + param1;
|
||||
pSVar3->mSaveInfo.func_ov000_020a1028();
|
||||
pSVar3->mSaveInfo.func_ov019_020d14fc();
|
||||
pSVar3 = &this->mSlots[param1];
|
||||
SaveSlot::func_ov000_020a1028(pSVar3->mInfoData);
|
||||
SaveSlot::func_ov019_020d14fc(pSVar3->mInfoData);
|
||||
|
||||
MI_CpuClearFast(&pSVar3->mTreasures, sizeof(SaveTreasures));
|
||||
MI_CpuClearFast(pSVar3->mTreasureData, sizeof(SaveTreasureData));
|
||||
for (int i = 0; i < TreasureType_Max; i++) {
|
||||
pSVar3->mTreasures.mTreasureData[0].mUnk_3C[i] = TreasureType_None;
|
||||
pSVar3->mTreasureData[0].unk_3C[i] = TreasureType_None;
|
||||
}
|
||||
pSVar3->mTreasures.func_ov019_020d1600();
|
||||
SaveSlot::func_ov019_020d1600(pSVar3->mTreasureData);
|
||||
|
||||
this->mSlots[param1].mUnk_1D00.func_ov000_020a12a0();
|
||||
this->mSlots[param1].mUnk_1D00.func_ov019_020d14c0();
|
||||
SaveSlot::func_ov000_020a12a0(this->mSlots[param1].mUnk_1D00);
|
||||
SaveSlot::func_ov019_020d14c0(this->mSlots[param1].mUnk_1D00);
|
||||
|
||||
MI_CpuClearFast(&this->mSlots[param1].mUnk_2500, 0x80);
|
||||
this->mSlots[param1].mUnk_2500.func_ov019_020d15cc();
|
||||
MI_CpuClearFast(this->mSlots[param1].mUnk_2500, sizeof(SaveFile_00000_2500_Data));
|
||||
SaveSlot::func_ov019_020d15cc(this->mSlots[param1].mUnk_2500);
|
||||
|
||||
this->mSlots[param1].mUnk_2600.func_ov000_020a10f4();
|
||||
this->mSlots[param1].mUnk_2600.func_ov019_020d1400();
|
||||
SaveSlot::func_ov000_020a10f4(this->mSlots[param1].mUnk_2600);
|
||||
SaveSlot::func_ov019_020d1400(this->mSlots[param1].mUnk_2600);
|
||||
}
|
||||
|
||||
@@ -157,13 +157,13 @@ ARM void UnkSubStruct9::func_ov019_020cbc0c() {
|
||||
}
|
||||
|
||||
unk32 uVar10 = 0;
|
||||
unk32 uVar6 = (pSlot->mSaveInfo.mSaveInfoData[0].mInventory.mUnk_00 << 4) >> 26;
|
||||
unk32 uVar6 = (pSlot->mInfoData[0].inventory.unk_80 << 4) >> 26;
|
||||
|
||||
if (uVar6 == 0) {
|
||||
uVar6 = 0x40;
|
||||
}
|
||||
|
||||
unk32 uVar13 = (pSlot->mSaveInfo.mSaveInfoData[0].mInventory.mUnk_00 << 10) >> 26;
|
||||
unk32 uVar13 = (pSlot->mInfoData[0].inventory.unk_80 << 10) >> 26;
|
||||
if (uVar13 == 0) {
|
||||
uVar13 = uVar6;
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ ARM unk32 UnkSystem1_ov019_Derived2::vfunc_1C(u32 param1, unk32 param2, unk32 pa
|
||||
if (this->mUnk_04 == 0x0F) {
|
||||
SaveFile *pSaveFile = gSaveManager.mpSaveFile;
|
||||
pSaveFile->func_ov019_020d1aac(this->mUnk_12, data_ov003_020ba740->mUnk_9D0);
|
||||
pSaveFile->mSlots[this->mUnk_12].mUnk_2600.mUnk_00[0].mUnk_02 = param1;
|
||||
pSaveFile->mSlots[this->mUnk_12].mUnk_2600[0].unk_02 = param1;
|
||||
gSaveManager.func_ov019_020d09dc(this->mUnk_12);
|
||||
} else if (this->mUnk_04 > 0x1E) {
|
||||
if (gSaveManager.mUnk_210 != 0 ? 0 : 1) {
|
||||
|
||||
@@ -482,10 +482,10 @@ ARM void FileSelectOptions::func_ov019_020cd788() {
|
||||
ARM void FileSelectOptions::func_ov019_020cd7f8() {
|
||||
switch (data_0204a110.func_01ff9b50()) {
|
||||
case BTN_ID_RETURN:
|
||||
SaveSub17 *pSaveSub17 = gSaveManager.GetSaveSlot(this->mUnk_0024.mSaveSlotIndex)->Get2600Ptr();
|
||||
data_0204a110.mUnk_000 = pSaveSub17->mUnk_02;
|
||||
data_ov000_020b504c.mUnk_030 = pSaveSub17->mUnk_00;
|
||||
data_ov000_020b50c0.func_ov000_0206a6a4(pSaveSub17->mUnk_01);
|
||||
SaveFile_00000_2600_Data *pSaveSub17 = gSaveManager.GetSaveSlot(this->mUnk_0024.mSaveSlotIndex)->Get2600Ptr();
|
||||
data_0204a110.mUnk_000 = pSaveSub17->unk_02;
|
||||
data_ov000_020b504c.mUnk_030 = pSaveSub17->unk_00;
|
||||
data_ov000_020b50c0.func_ov000_0206a6a4(pSaveSub17->unk_01);
|
||||
data_0204a088->func_ov000_020611fc(0);
|
||||
data_ov000_020b5214.func_ov000_0206db44(0x2E);
|
||||
break;
|
||||
@@ -566,10 +566,10 @@ ARM void FileSelectOptions::func_ov019_020cdcb8() {
|
||||
|
||||
if (ptr->vfunc_08() == 0 ? true : false) {
|
||||
if (data_ov000_020b504c.func_ov000_020682c0(0) == 0) {
|
||||
SaveSub17 *pSaveSub17 = gSaveManager.GetSaveSlot(this->mUnk_0024.mSaveSlotIndex)->Get2600Ptr();
|
||||
pSaveSub17->mUnk_00 = this->mUnk_0024.mUnk_FC0;
|
||||
pSaveSub17->mUnk_01 = this->mUnk_0024.mUnk_FC1;
|
||||
pSaveSub17->mUnk_02 = this->mUnk_0024.mUnk_FC2;
|
||||
SaveFile_00000_2600_Data *pSaveSub17 = gSaveManager.GetSaveSlot(this->mUnk_0024.mSaveSlotIndex)->Get2600Ptr();
|
||||
pSaveSub17->unk_00 = this->mUnk_0024.mUnk_FC0;
|
||||
pSaveSub17->unk_01 = this->mUnk_0024.mUnk_FC1;
|
||||
pSaveSub17->unk_02 = this->mUnk_0024.mUnk_FC2;
|
||||
gSaveManager.mpSaveFile->mSaveSlotIndex = this->mUnk_0024.mSaveSlotIndex;
|
||||
gSaveManager.func_ov019_020d08fc(2, SaveFile::func_ov019_020d13b8);
|
||||
|
||||
@@ -580,7 +580,7 @@ ARM void FileSelectOptions::func_ov019_020cdcb8() {
|
||||
data_0204a110.mUnk_000 = this->mUnk_0024.mUnk_FC2;
|
||||
this->mUnk_1CF5 = true;
|
||||
} else {
|
||||
data_ov000_020b504c.mUnk_030 = gSaveManager.GetSaveSlot(this->mUnk_0024.mSaveSlotIndex)->Get2600Ptr()->mUnk_00;
|
||||
data_ov000_020b504c.mUnk_030 = gSaveManager.GetSaveSlot(this->mUnk_0024.mSaveSlotIndex)->Get2600Ptr()->unk_00;
|
||||
this->func_ov019_020cde8c(FSOptionsState_Idle);
|
||||
}
|
||||
}
|
||||
@@ -617,13 +617,13 @@ ARM UnkStruct_ov019_020d24c8_2C_24::UnkStruct_ov019_020d24c8_2C_24(GameModeManag
|
||||
mUnk_FB8(NULL),
|
||||
mUnk_FBC(NULL) {
|
||||
|
||||
SaveSlot *pSlot = gSaveManager.GetSaveSlot(this->mSaveSlotIndex);
|
||||
SaveSub17 *pSaveSub17 = pSlot->Get2600Ptr();
|
||||
this->mUnk_FC0 = pSaveSub17->mUnk_00;
|
||||
this->mUnk_FC1 = pSaveSub17->mUnk_01;
|
||||
this->mUnk_FC2 = pSaveSub17->mUnk_02;
|
||||
SaveSlot *pSlot = gSaveManager.GetSaveSlot(this->mSaveSlotIndex);
|
||||
SaveFile_00000_2600_Data *pSaveSub17 = pSlot->Get2600Ptr();
|
||||
this->mUnk_FC0 = pSaveSub17->unk_00;
|
||||
this->mUnk_FC1 = pSaveSub17->unk_01;
|
||||
this->mUnk_FC2 = pSaveSub17->unk_02;
|
||||
|
||||
u8 *src = (u8 *) pSaveSub17->mUnk_03;
|
||||
u8 *src = (u8 *) pSaveSub17->unk_03;
|
||||
u8 *dst = (u8 *) &this->mUnk_FC3[0];
|
||||
for (u32 i = ARRAY_LEN(this->mUnk_FC3); i != 0; i--) {
|
||||
u8 b1 = *src++;
|
||||
@@ -632,7 +632,7 @@ ARM UnkStruct_ov019_020d24c8_2C_24::UnkStruct_ov019_020d24c8_2C_24(GameModeManag
|
||||
this->mUnk_FC3[i].mUnk_01 = b2;
|
||||
}
|
||||
this->mUnk_FC3[0].mUnk_00 = *src;
|
||||
this->mUnk_103E = pSaveSub17->mUnk_7E;
|
||||
this->mUnk_103E = pSaveSub17->unk_7E;
|
||||
|
||||
param1->Append(&this->mUnk_490);
|
||||
param1->Append(&this->mUnk_4F0);
|
||||
|
||||
@@ -36,13 +36,13 @@ void GameModeAdventure::vfunc_08() {
|
||||
SaveFile *pSaveFile = data_ov000_020b4eec.func_ov001_020be12c();
|
||||
|
||||
#if IS_JP
|
||||
SaveInfoData *pSaveInfoData = &pSaveFile->mSlots[0].mSaveInfo.mSaveInfoData[0];
|
||||
SaveInfoData *pSaveInfoData = &pSaveFile->mSlots[0].mInfoData[0];
|
||||
|
||||
if (pSaveInfoData->mSceneIndex == SceneIndex_f_ajito2) {
|
||||
pSaveInfoData->mSceneIndex = SceneIndex_f_ajito;
|
||||
pSaveInfoData->mRoomIndex = 0;
|
||||
pSaveInfoData->mSpawnIndex = 0;
|
||||
UNSET_FLAG(pSaveInfoData->mAdventureFlags.data, AdventureFlag_WadatsumiMinigameSequence);
|
||||
if (pSaveInfoData->sceneIndex == SceneIndex_f_ajito2) {
|
||||
pSaveInfoData->sceneIndex = SceneIndex_f_ajito;
|
||||
pSaveInfoData->roomIndex = 0;
|
||||
pSaveInfoData->spawnIndex = 0;
|
||||
UNSET_FLAG(pSaveInfoData->inventory.adventureFlags, AdventureFlag_WadatsumiMinigameSequence);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user