summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotyourav <65437533+notyourav@users.noreply.github.com>2021-10-28 16:12:19 -0700
committerGitHub <noreply@github.com>2021-10-28 16:12:19 -0700
commit218719cad89fbf17a7feefca7360c9cf5be253be (patch)
treef7191b4ecf2a5e991b252b06d0240e4e30bec00e
parent3f5449c1a1aed612e5b2c1190699bafef2603241 (diff)
parenta46fe06de0e213c94c0e5b56c81b70fe63439d85 (diff)
Merge pull request #173 from Ibot02/sub_0807CA18
-rw-r--r--asm/sub_0807CA18.s174
-rw-r--r--include/save.h26
-rw-r--r--linker.ld2
-rw-r--r--src/save.c8
-rw-r--r--src/sub_0807CA18.c41
5 files changed, 68 insertions, 183 deletions
diff --git a/asm/sub_0807CA18.s b/asm/sub_0807CA18.s
deleted file mode 100644
index 8db5f175..00000000
--- a/asm/sub_0807CA18.s
+++ /dev/null
@@ -1,174 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-.ifdef DEMO
-thumb_func_start sub_0807CA18
-sub_0807CA18:
- push {r4, r5, r6, lr}
- ldr r4, _0807CA38 @ =0x02002A40
- ldrh r1, [r4, #0x00]
- movs r0, #0x80
- lsls r0, r0, #0x01
- cmp r1, r0
- beq _0807C9BA
- movs r2, #0x00
- strb r2, [r4, #0x00]
- movs r3, #0x01
- strb r3, [r4, #0x01]
- strb r3, [r4, #0x08]
- adds r1, r4, #0x0
- adds r1, #0xAA
- movs r0, #0x18
- strb r0, [r1, #0x00]
- adds r1, #0x01
- strb r0, [r1, #0x00]
- subs r1, #0x23
- movs r0, #0x22
- strb r0, [r1, #0x00]
- adds r1, #0x01
- movs r0, #0x15
- strb r0, [r1, #0x00]
- adds r0, r4, #0x0
- adds r0, #0x8A
- strb r2, [r0, #0x00]
- adds r0, #0x01
- strb r2, [r0, #0x00]
- adds r0, #0x05
- strb r3, [r0, #0x00]
- adds r1, #0x03
- movs r0, #0x90
- strh r0, [r1, #0x00]
- adds r1, #0x02
- movs r0, #0x38
- strh r0, [r1, #0x00]
-_0807C9BA:
- adds r5, r4, #0x0
- adds r5, #0x80
- ldrb r0, [r5, #0x00]
- cmp r0, #0x00
- bne _0807C9CE
- ldr r0, _0807CA3C @ =0x0811DFF4
- adds r1, r5, #0x0
- movs r2, #0x05
- bl MemCopy
-_0807C9CE:
- ldr r1, _0807CA40 @ =0x0811EF10
- movs r6, #0x80
- lsls r6, r6, #0x12
- ldrb r0, [r6, #0x04]
- lsls r0, r0, #0x02
- adds r0, r0, r1
- ldr r0, [r0, #0x00]
- ldr r2, _0807CA44 @ =0x000004B4
- adds r1, r4, #0x0
- bl MemCopy
- ldrb r0, [r6, #0x07]
- adds r2, r0, #0x0
- cmp r2, #0x00
- bne _0807CA04
- movs r0, #0x97
- strb r0, [r5, #0x00]
- adds r1, r4, #0x0
- adds r1, #0x81
- movs r0, #0x7F
- strb r0, [r1, #0x00]
- adds r1, #0x01
- movs r0, #0xDD
- strb r0, [r1, #0x00]
- adds r0, r4, #0x0
- adds r0, #0x83
- strb r2, [r0, #0x00]
-_0807CA04:
- movs r0, #0xA0
- bl ModHealth
- ldr r0, _0807CA48 @ =0xFFFFD8F1
- bl ModRupees
- ldr r0, _0807CA4C @ =0x02000010
- ldrb r1, [r0, #0x07]
- lsls r0, r1, #0x01
- adds r0, r0, r1
- ldr r1, _0807CA50 @ =0x0811DFF9
- adds r0, r0, r1
- movs r1, #0x95
- lsls r1, r1, #0x03
- adds r2, r4, r1
- ldrb r1, [r6, #0x04]
- adds r0, r0, r1
- ldrb r1, [r0, #0x00]
- lsls r0, r1, #0x03
- subs r0, r0, r1
- lsls r0, r0, #0x05
- adds r0, r0, r1
- lsls r0, r0, #0x04
- str r0, [r2, #0x00]
- movs r0, #0x01
- pop {r4, r5, r6, pc}
-_0807CA38: .4byte gSave
-_0807CA3C: .4byte gUnk_0811E470
-_0807CA40: .4byte demoPointers
-_0807CA44: .4byte 0x000004B4
-_0807CA48: .4byte 0xFFFFD8F1
-_0807CA4C: .4byte gUnk_02000010
-_0807CA50: .4byte demoUnknown1
-.else
- thumb_func_start sub_0807CA18
-sub_0807CA18: @ 0x0807CA18
- push {lr}
- ldr r0, _0807CA7C @ =gSave
- mov ip, r0
- ldrh r1, [r0]
- movs r0, #0x80
- lsls r0, r0, #1
- cmp r1, r0
- beq _0807CA66
- movs r2, #0
- mov r0, ip
- strb r2, [r0]
- movs r3, #1
- strb r3, [r0, #1]
- strb r3, [r0, #8]
- mov r1, ip
- adds r1, #0xaa
- movs r0, #0x18
- strb r0, [r1]
- adds r1, #1
- strb r0, [r1]
- subs r1, #0x23
- movs r0, #0x22
- strb r0, [r1]
- adds r1, #1
- movs r0, #0x15
- strb r0, [r1]
- mov r0, ip
- adds r0, #0x8a
- strb r2, [r0]
- adds r0, #1
- strb r2, [r0]
- adds r0, #5
- strb r3, [r0]
- adds r1, #3
- movs r0, #0x90
- strh r0, [r1]
- adds r1, #2
- movs r0, #0x38
- strh r0, [r1]
-_0807CA66:
- mov r1, ip
- adds r1, #0x80
- ldrb r0, [r1]
- cmp r0, #0
- bne _0807CA78
- ldr r0, _0807CA80 @ =gUnk_0811E470
- movs r2, #5
- bl MemCopy
-_0807CA78:
- movs r0, #1
- pop {pc}
- .align 2, 0
-_0807CA7C: .4byte gSave
-_0807CA80: .4byte gUnk_0811E470
-.endif
diff --git a/include/save.h b/include/save.h
index dbb2b6b3..7db9909a 100644
--- a/include/save.h
+++ b/include/save.h
@@ -22,7 +22,8 @@ typedef enum {
extern SaveResult HandleSave(u32 arg0);
typedef struct {
- /*0x000*/ u8 filler0[0x2];
+ /*0x000*/ u8 unk_00;
+ /*0x000*/ u8 unk_01;
/*0x002*/ u8 messageSpeed;
/*0x003*/ u8 brightnessPref;
/*0x004*/ u8 filler4[0x2];
@@ -35,14 +36,24 @@ typedef struct {
/*0x050*/ u32 unk50;
/*0x054*/ u8 filler54[0x2C];
/*0x080*/ u8 playerName[FILENAME_LENGTH];
- /*0x086*/ u8 filler86[0x22];
+ /*0x086*/ u8 filler86[0x2];
+ /*0x088*/ u8 unk_88;
+ /*0x089*/ u8 unk_89;
+ /*0x08A*/ u8 unk_8A;
+ /*0x08B*/ u8 unk_8B;
+ /*0x08C*/ u16 unk_8C;
+ /*0x08E*/ u16 unk_8E;
+ /*0x08F*/ u8 unk_8F;
+ /*0x090*/ u8 filler91[0x15];
/*0x0A8*/ Stats stats;
/*0x0D0*/ u8 fillerD0[0x71];
/*0x141*/ u8 unk141[0x34f];
/*0x490*/ u32 unk490;
/*0x494*/ u32 unk494;
/*0x498*/ u32 unk498;
- /*0x49C*/ u8 filler49C[0x18];
+ /*0x49C*/ u8 filler49C[0xC];
+ /*0x4a8*/ u32 unk_4a8;
+ /*0x4ac*/ u8 filler4ac[0x8];
} SaveFile;
extern SaveFile gSave;
@@ -54,4 +65,11 @@ s32 ReadSaveFile(u32, SaveFile*);
u32 Read_02000000(struct_02000000*);
void SetFileStatusDeleted(u32 index);
-#endif \ No newline at end of file
+extern const char gUnk_0811E470[];
+
+#ifdef DEMO
+extern const u8* const demoPointers[];
+extern const u8 demoUnknown1[];
+#endif
+
+#endif
diff --git a/linker.ld b/linker.ld
index b1030355..f464f5a7 100644
--- a/linker.ld
+++ b/linker.ld
@@ -692,7 +692,7 @@ SECTIONS {
src/sub_0807B820.o(.text);
asm/code_0807B9B8.o(.text);
src/sub_0807C998.o(.text);
- asm/sub_0807CA18.o(.text);
+ src/sub_0807CA18.o(.text);
asm/getInventoryValue.o(.text);
asm/code_0807CAA0.o(.text);
src/flags.o(.text);
diff --git a/src/save.c b/src/save.c
index 7039ca5a..9dd07459 100644
--- a/src/save.c
+++ b/src/save.c
@@ -57,11 +57,11 @@ asm("demoPointer1: .incbin \"baserom_demo.gba\", 0x11e010, 0x500");
asm("demoPointer2: .incbin \"baserom_demo.gba\", 0x11e510, 0x500");
asm("demoPointer3: .incbin \"baserom_demo.gba\", 0x11ea10, 0x500");
-extern const u32 demoPointer1;
-extern const u32 demoPointer2;
-extern const u32 demoPointer3;
+extern const u8 demoPointer1[];
+extern const u8 demoPointer2[];
+extern const u8 demoPointer3[];
-const u32 demoPointers[] = { (u32)&demoPointer1, (u32)&demoPointer2, (u32)&demoPointer3 };
+const u8* const demoPointers[] = { demoPointer1, demoPointer2, demoPointer3 };
#else
diff --git a/src/sub_0807CA18.c b/src/sub_0807CA18.c
new file mode 100644
index 00000000..9a359467
--- /dev/null
+++ b/src/sub_0807CA18.c
@@ -0,0 +1,41 @@
+#include "global.h"
+#include "structures.h"
+#include "save.h"
+#include "utils.h"
+
+u8 sub_0807CA18() {
+ if (gSave.unk_00 != 0x00 || gSave.unk_01 != 1) {
+ gSave.unk_00 = 0;
+ gSave.unk_01 = 1;
+ gSave.unk8 = 1;
+ gSave.stats.health = 0x18;
+ gSave.stats.maxHealth = 0x18;
+ gSave.unk_88 = 0x22;
+ gSave.unk_89 = 0x15;
+ gSave.unk_8A = 0;
+ gSave.unk_8B = 0;
+ gSave.unk_8F = 1;
+ gSave.unk_8C = 0x90;
+ gSave.unk_8E = 0x38;
+ }
+ if (gSave.playerName[0] == 0) {
+ MemCopy(gUnk_0811E470, &gSave.playerName, 5);
+ }
+#ifdef DEMO
+ {
+ const u8* tmp;
+ MemCopy(demoPointers[gUnk_02000000->saveFileId], &gSave, 0x4B4);
+ if (gUnk_02000000->gameLanguage == 0) {
+ gSave.playerName[0] = 0x97;
+ gSave.playerName[1] = 0x7F;
+ gSave.playerName[2] = 0xDD;
+ gSave.playerName[3] = 0;
+ }
+ ModHealth(0xA0);
+ ModRupees(-9999);
+ tmp = demoUnknown1 + gUnk_02000010.field_0x7 * 3;
+ gSave.unk_4a8 = tmp[gUnk_02000000->saveFileId] * 3600;
+ }
+#endif
+ return 1;
+}