summaryrefslogtreecommitdiff
path: root/src/save.c
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2016-10-17 01:44:34 -0700
committerYamaArashi <shadow962@live.com>2016-10-17 01:44:34 -0700
commitf13e7b91273e457279d3f06a6c5b606dc6f26d1b (patch)
tree3925e7180875d4ccd22d332a7409c8157986f580 /src/save.c
parent94b9c6890ca6b6d59b99f43b5d06d5a0e8789a82 (diff)
decompile another save function
Diffstat (limited to 'src/save.c')
-rw-r--r--src/save.c131
1 files changed, 129 insertions, 2 deletions
diff --git a/src/save.c b/src/save.c
index decc75bcc..ba1951701 100644
--- a/src/save.c
+++ b/src/save.c
@@ -30,7 +30,8 @@ u8 sub_81252D8(u16, struct SaveSectionLocation *);
u8 sub_8125440(u8, u8 *);
u8 sub_81255B8(u16, struct SaveSectionLocation *);
u8 sub_81258BC(u16, struct SaveSectionLocation *);
-u8 sub_8125BF8(u8, u8 *);
+u8 sub_8125BF8(u8, struct SaveSection *);
+u8 sub_8125974(struct SaveSectionLocation *);
void calls_flash_erase_block(void)
{
@@ -359,7 +360,7 @@ u8 sub_81258BC(u16 a1, struct SaveSectionLocation *a2)
for (i = 0; i < 14; i++)
{
- sub_8125BF8(i + v3, gUnknown_03005EB0->data);
+ sub_8125BF8(i + v3, gUnknown_03005EB0);
id = gUnknown_03005EB0->id;
if (id == 0)
gUnknown_03005E9C = i;
@@ -375,3 +376,129 @@ u8 sub_81258BC(u16 a1, struct SaveSectionLocation *a2)
return 1;
}
+
+u8 sub_8125974(struct SaveSectionLocation *a1)
+{
+ u16 i;
+ u16 checksum;
+ u32 v2 = 0;
+ u32 v3 = 0;
+ u32 v4;
+ bool8 v5;
+ u8 v14;
+ u8 v10;
+
+ v4 = 0;
+ v5 = FALSE;
+
+ for (i = 0; i < 14; i++)
+ {
+ sub_8125BF8(i, gUnknown_03005EB0);
+ if (gUnknown_03005EB0->unknown == 0x8012025)
+ {
+ v5 = TRUE;
+ checksum = sub_8125C10(gUnknown_03005EB0->data, a1[gUnknown_03005EB0->id].size);
+ if (gUnknown_03005EB0->checksum == checksum)
+ {
+ v2 = gUnknown_03005EB0->counter;
+ v4 |= 1 << gUnknown_03005EB0->id;
+ }
+ }
+ }
+
+ if (v5)
+ {
+ if (v4 == 0x3FFF)
+ v14 = 1;
+ else
+ v14 = 255;
+ }
+ else
+ {
+ v14 = 0;
+ }
+
+ v4 = 0;
+ v5 = FALSE;
+
+ for (i = 0; i < 14; i++)
+ {
+ sub_8125BF8(i + 14, gUnknown_03005EB0);
+ if (gUnknown_03005EB0->unknown == 0x8012025)
+ {
+ v5 = TRUE;
+ checksum = sub_8125C10(gUnknown_03005EB0->data, a1[gUnknown_03005EB0->id].size);
+ if (gUnknown_03005EB0->checksum == checksum)
+ {
+ v3 = gUnknown_03005EB0->counter;
+ v4 |= 1 << gUnknown_03005EB0->id;
+ }
+ }
+ }
+
+ if (v5)
+ {
+ if (v4 == 0x3FFF)
+ v10 = 1;
+ else
+ v10 = 255;
+ }
+ else
+ {
+ v10 = 0;
+ }
+
+ if (v14 == 1 && v10 == 1)
+ {
+ if ((v2 == -1 && v3 == 0) || (v2 == 0 && v3 == -1))
+ {
+ if ((unsigned)(v2 + 1) < (unsigned)(v3 + 1))
+ {
+ gUnknown_03005EAC = v3;
+ }
+ else
+ {
+ gUnknown_03005EAC = v2;
+ }
+ }
+ else
+ {
+ if (v2 < v3)
+ {
+ gUnknown_03005EAC = v3;
+ }
+ else
+ {
+ gUnknown_03005EAC = v2;
+ }
+ }
+ return 1;
+ }
+
+ if (v14 == 1)
+ {
+ gUnknown_03005EAC = v2;
+ if (v10 == 255)
+ return 255;
+ return 1;
+ }
+
+ if (v10 == 1)
+ {
+ gUnknown_03005EAC = v3;
+ if (v14 == 255)
+ return 255;
+ return 1;
+ }
+
+ if (v14 == 0 && v10 == 0)
+ {
+ gUnknown_03005EAC = 0;
+ gUnknown_03005E9C = 0;
+ return 0;
+ }
+
+ gUnknown_03005EAC = 0;
+ gUnknown_03005E9C = 0;
+ return 2;
+}