From 47397297d34aa9d1e9a7706c1f072c4753bd2b31 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Mon, 27 Sep 2021 01:24:47 +0200 Subject: [PATCH 1/2] sub_0807CA18.c: ok --- asm/sub_0807CA18.s | 174 --------------------------------------------- include/save.h | 27 +++++-- linker.ld | 2 +- src/save.c | 8 +-- src/sub_0807CA18.c | 41 +++++++++++ 5 files changed, 69 insertions(+), 183 deletions(-) delete mode 100644 asm/sub_0807CA18.s create mode 100644 src/sub_0807CA18.c 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 65258dee..7d99851a 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,13 +36,23 @@ 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*/ u8 filler498[0x1C]; + /*0x498*/ u8 filler498[0x10]; + /*0x4a8*/ u32 unk_4a8; + /*0x4ac*/ u8 filler4ac[0x8]; } SaveFile; extern SaveFile gSave; @@ -53,4 +64,12 @@ 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 037c3a5a..6dd224cd 100644 --- a/linker.ld +++ b/linker.ld @@ -695,7 +695,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; +} From ec5017e59627e6acd9ba05da92346e5f74c0e7fe Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Mon, 27 Sep 2021 01:29:28 +0200 Subject: [PATCH 2/2] clang-format --- include/save.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/save.h b/include/save.h index 7d99851a..0d570979 100644 --- a/include/save.h +++ b/include/save.h @@ -66,7 +66,6 @@ void SetFileStatusDeleted(u32 index); extern const char gUnk_0811E470[]; - #ifdef DEMO extern const u8* const demoPointers[]; extern const u8 demoUnknown1[];