Document Encode/DecodeGameRecords

This commit is contained in:
Rachel
2024-06-21 11:33:33 -07:00
parent bc479b9a5d
commit 46ec3a3a13
3 changed files with 193 additions and 23 deletions

158
consts/game_records.json Normal file
View File

@@ -0,0 +1,158 @@
{
"definitions": {
"@GameRecord": {
"type": "enum",
"values": [
"RECORD_UNK_000",
"RECORD_UNK_001",
"RECORD_UNK_002",
"RECORD_UNK_003",
"RECORD_UNK_004",
"RECORD_UNK_005",
"RECORD_UNK_006",
"RECORD_UNK_007",
"RECORD_UNK_008",
"RECORD_UNK_009",
"RECORD_UNK_010",
"RECORD_UNK_011",
"RECORD_UNK_012",
"RECORD_UNK_013",
"RECORD_UNK_014",
"RECORD_UNK_015",
"RECORD_UNK_016",
"RECORD_UNK_017",
"RECORD_UNK_018",
"RECORD_UNK_019",
"RECORD_UNK_020",
"RECORD_UNK_021",
"RECORD_UNK_022",
"RECORD_UNK_023",
"RECORD_UNK_024",
"RECORD_UNK_025",
"RECORD_UNK_026",
"RECORD_UNK_027",
"RECORD_UNK_028",
"RECORD_UNK_029",
"RECORD_UNK_030",
"RECORD_UNK_031",
"RECORD_UNK_032",
"RECORD_UNK_033",
"RECORD_UNK_034",
"RECORD_UNK_035",
"RECORD_UNK_036",
"RECORD_UNK_037",
"RECORD_UNK_038",
"RECORD_UNK_039",
"RECORD_UNK_040",
"RECORD_UNK_041",
"RECORD_UNK_042",
"RECORD_UNK_043",
"RECORD_UNK_044",
"RECORD_UNK_045",
"RECORD_UNK_046",
"RECORD_UNK_047",
"RECORD_UNK_048",
"RECORD_UNK_049",
"RECORD_UNK_050",
"RECORD_UNK_051",
"RECORD_UNK_052",
"RECORD_UNK_053",
"RECORD_UNK_054",
"RECORD_UNK_055",
"RECORD_UNK_056",
"RECORD_UNK_057",
"RECORD_UNK_058",
"RECORD_UNK_059",
"RECORD_UNK_060",
"RECORD_UNK_061",
"RECORD_UNK_062",
"RECORD_UNK_063",
"RECORD_UNK_064",
"RECORD_UNK_065",
"RECORD_UNK_066",
"RECORD_UNK_067",
"RECORD_UNK_068",
"RECORD_UNK_069",
"RECORD_UNK_070",
"RECORD_UNK_071",
"RECORD_UNK_072",
"RECORD_UNK_073",
"RECORD_UNK_074",
"RECORD_UNK_075",
"RECORD_UNK_076",
"RECORD_UNK_077",
"RECORD_UNK_078",
"RECORD_UNK_079",
"RECORD_UNK_080",
"RECORD_UNK_081",
"RECORD_UNK_082",
"RECORD_UNK_083",
"RECORD_UNK_084",
"RECORD_UNK_085",
"RECORD_UNK_086",
"RECORD_UNK_087",
"RECORD_UNK_088",
"RECORD_UNK_089",
"RECORD_UNK_090",
"RECORD_UNK_091",
"RECORD_UNK_092",
"RECORD_UNK_093",
"RECORD_UNK_094",
"RECORD_UNK_095",
"RECORD_UNK_096",
"RECORD_UNK_097",
"RECORD_UNK_098",
"RECORD_UNK_099",
"RECORD_UNK_100",
"RECORD_UNK_101",
"RECORD_UNK_102",
"RECORD_UNK_103",
"RECORD_UNK_104",
"RECORD_UNK_105",
"RECORD_UNK_106",
"RECORD_UNK_107",
"RECORD_UNK_108",
"RECORD_UNK_109",
"RECORD_UNK_110",
"RECORD_UNK_111",
"RECORD_UNK_112",
"RECORD_UNK_113",
"RECORD_UNK_114",
"RECORD_UNK_115",
"RECORD_UNK_116",
"RECORD_UNK_117",
"RECORD_UNK_118",
"RECORD_UNK_119",
"RECORD_UNK_120",
"RECORD_UNK_121",
"RECORD_UNK_122",
"RECORD_UNK_123",
"RECORD_UNK_124",
"RECORD_UNK_125",
"RECORD_UNK_126",
"RECORD_UNK_127",
"RECORD_UNK_128",
"RECORD_UNK_129",
"RECORD_UNK_130",
"RECORD_UNK_131",
"RECORD_UNK_132",
"RECORD_UNK_133",
"RECORD_UNK_134",
"RECORD_UNK_135",
"RECORD_UNK_136",
"RECORD_UNK_137",
"RECORD_UNK_138",
"RECORD_UNK_139",
"RECORD_UNK_140",
"RECORD_UNK_141",
"RECORD_UNK_142",
"RECORD_UNK_143",
"RECORD_UNK_144",
"RECORD_UNK_145",
"RECORD_UNK_146",
"RECORD_UNK_147",
"RECORD_UNK_148"
]
}
}
}

View File

@@ -3,6 +3,7 @@ consts_manifest_basenames = [
'battle',
'battle_subscripts',
'btlcmd',
'game_records',
'gender',
'items',
'map',

View File

@@ -1,6 +1,8 @@
#include <nitro.h>
#include <string.h>
#include "consts/game_records.h"
#include "struct_decls/pokedexdata_decl.h"
#include "unk_0201D15C.h"
@@ -8,8 +10,11 @@
#include "unk_0202631C.h"
#include "game_records.h"
static void sub_0202CD94(GameRecords * param0, int param1);
static void sub_0202CDC0(GameRecords * param0, int param1);
#define START_ENCODED_RECORDS RECORD_UNK_001
#define SIZE_ENCODED_RECORDS (sizeof(GameRecords) - sizeof(EncodingSeed) - (START_ENCODED_RECORDS * sizeof(u32)))
static void EncodeGameRecords(GameRecords *records, int id);
static void DecodeGameRecords(GameRecords *records, int id);
int GameRecords_SaveSize(void)
{
@@ -21,7 +26,7 @@ void GameRecords_Init(GameRecords *records)
MI_CpuClear32(records, sizeof(GameRecords));
records->seed.modifier = OS_GetVBlankCount() | (OS_GetVBlankCount() << 8);
sub_0202CD94(records, 1);
EncodeGameRecords(records, START_ENCODED_RECORDS);
}
GameRecords *SaveData_GetGameRecordsPtr(SaveData *savedata)
@@ -29,23 +34,29 @@ GameRecords *SaveData_GetGameRecordsPtr(SaveData *savedata)
return SaveData_SaveTable(savedata, SAVE_TABLE_ENTRY_GAME_RECORDS);
}
static void sub_0202CD94 (GameRecords * records, int param1)
// this inline does not match when operating on the substruct
static inline u32 HashEncodingSeed(GameRecords *records)
{
if (param1 == (0 + 0)) {
return;
}
records->seed.byteSum = SumBytes(&records->recordsU32[1], sizeof(GameRecords) - sizeof(EncodingSeed) - sizeof(u32)) & 0xffff;
EncodeData(&records->recordsU32[1], sizeof(GameRecords) - sizeof(EncodingSeed) - sizeof(u32), records->seed.byteSum + (records->seed.modifier << 16));
return records->seed.byteSum + (records->seed.modifier << 16);
}
static void sub_0202CDC0 (GameRecords * records, int param1)
static void EncodeGameRecords(GameRecords *records, int id)
{
if (param1 == (0 + 0)) {
if (id == RECORD_UNK_000) {
return;
}
DecodeData(&records->recordsU32[1], sizeof(GameRecords) - sizeof(EncodingSeed) - sizeof(u32), records->seed.byteSum + (records->seed.modifier << 16));
records->seed.byteSum = SumBytes(&records->recordsU32[START_ENCODED_RECORDS], SIZE_ENCODED_RECORDS) & 0xFFFF;
EncodeData(&records->recordsU32[START_ENCODED_RECORDS], SIZE_ENCODED_RECORDS, HashEncodingSeed(records));
}
static void DecodeGameRecords(GameRecords *records, int id)
{
if (id == RECORD_UNK_000) {
return;
}
DecodeData(&records->recordsU32[START_ENCODED_RECORDS], SIZE_ENCODED_RECORDS, HashEncodingSeed(records));
}
static u32 sub_0202CDE0 (const GameRecords * records, int param1)
@@ -279,7 +290,7 @@ u32 sub_0202CE90 (GameRecords * records, int param1, u32 param2)
u32 v0 = sub_0202CE3C(param1);
u32 v1;
sub_0202CDC0(records, param1);
DecodeGameRecords(records, param1);
if (param2 < v0) {
v1 = sub_0202CE08(records, param1, param2);
@@ -287,7 +298,7 @@ u32 sub_0202CE90 (GameRecords * records, int param1, u32 param2)
v1 = sub_0202CE08(records, param1, v0);
}
sub_0202CD94(records, param1);
EncodeGameRecords(records, param1);
return v1;
}
@@ -298,7 +309,7 @@ u32 sub_0202CED0 (GameRecords * records, int param1, u32 param2)
u32 v1;
u32 v2;
sub_0202CDC0(records, param1);
DecodeGameRecords(records, param1);
v1 = sub_0202CDE0(records, param1);
v2 = v1;
@@ -315,7 +326,7 @@ u32 sub_0202CED0 (GameRecords * records, int param1, u32 param2)
}
}
sub_0202CD94(records, param1);
EncodeGameRecords(records, param1);
return v2;
}
@@ -326,7 +337,7 @@ u32 sub_0202CF28 (GameRecords * records, int param1)
u32 v1;
u32 v2;
sub_0202CDC0(records, param1);
DecodeGameRecords(records, param1);
v1 = sub_0202CDE0(records, param1);
@@ -336,7 +347,7 @@ u32 sub_0202CF28 (GameRecords * records, int param1)
v2 = sub_0202CE08(records, param1, v0);
}
sub_0202CD94(records, param1);
EncodeGameRecords(records, param1);
return v2;
}
@@ -347,7 +358,7 @@ u32 sub_0202CF70 (GameRecords * records, int param1, u32 param2)
u32 v1;
u32 v2;
sub_0202CDC0(records, param1);
DecodeGameRecords(records, param1);
v1 = sub_0202CDE0(records, param1);
@@ -357,7 +368,7 @@ u32 sub_0202CF70 (GameRecords * records, int param1, u32 param2)
v2 = sub_0202CE08(records, param1, v0);
}
sub_0202CD94(records, param1);
EncodeGameRecords(records, param1);
return v2;
}
@@ -367,9 +378,9 @@ u32 sub_0202CFB8 (GameRecords * records, int param1)
u32 v0 = sub_0202CE3C(param1);
u32 v1;
sub_0202CDC0(records, param1);
DecodeGameRecords(records, param1);
v1 = sub_0202CDE0(records, param1);
sub_0202CD94(records, param1);
EncodeGameRecords(records, param1);
if (v1 > v0) {
return v0;