diff options
-rw-r--r-- | asm/code_800D090.s | 2 | ||||
-rw-r--r-- | asm/code_803D110.s | 4 | ||||
-rw-r--r-- | asm/code_80521D0.s | 2 | ||||
-rw-r--r-- | asm/code_8098468.s | 2 | ||||
-rw-r--r-- | asm/main_menu.s | 2 | ||||
-rw-r--r-- | asm/save.s | 191 | ||||
-rw-r--r-- | asm/save1.s | 605 | ||||
-rw-r--r-- | data/data_80B9BB8.s | 53 | ||||
-rw-r--r-- | data/data_80F4278.s | 46 | ||||
-rw-r--r-- | include/save.h | 70 | ||||
-rw-r--r-- | include/time.h | 4 | ||||
-rwxr-xr-x | ld_script.txt | 5 | ||||
-rw-r--r-- | src/code_2.c | 17 | ||||
-rw-r--r-- | src/code_800558C.c | 2 | ||||
-rw-r--r-- | src/code_80118A4.c | 4 | ||||
-rw-r--r-- | src/code_8012A18.c (renamed from src/save1.c) | 15 | ||||
-rw-r--r-- | src/code_8040094.c | 4 | ||||
-rw-r--r-- | src/code_808EAB0.c | 47 | ||||
-rw-r--r-- | src/code_8094F88.c | 28 | ||||
-rw-r--r-- | src/code_8098BDC.c | 4 | ||||
-rw-r--r-- | src/music_pre.c | 52 | ||||
-rw-r--r-- | src/save.c | 788 | ||||
-rw-r--r-- | src/save_mid.c | 310 | ||||
-rw-r--r-- | src/wonder_mail.c | 8 | ||||
-rw-r--r-- | sym_ewram2.txt | 2 |
25 files changed, 928 insertions, 1339 deletions
diff --git a/asm/code_800D090.s b/asm/code_800D090.s index 9571b63..b9463be 100644 --- a/asm/code_800D090.s +++ b/asm/code_800D090.s @@ -7466,7 +7466,7 @@ _080109EC: .4byte gUnknown_203B0E8 _080109F0: .4byte 0x000052d8 _080109F4: .4byte 0x000052da _080109F8: .4byte gUnknown_203B46C -_080109FC: .4byte gUnknown_203B47C +_080109FC: .4byte gPlayTimeRef thumb_func_end sub_8010960 thumb_func_start sub_8010A00 diff --git a/asm/code_803D110.s b/asm/code_803D110.s index 9f67a48..f66bcde 100644 --- a/asm/code_803D110.s +++ b/asm/code_803D110.s @@ -2720,7 +2720,7 @@ _0803E64C: .4byte gUnknown_203B40D _0803E650: .4byte gUnknown_202EE8C _0803E654: .4byte gUnknown_202EDC8 _0803E658: .4byte gUnknown_202EDCC -_0803E65C: .4byte gUnknown_203B47C +_0803E65C: .4byte gPlayTimeRef _0803E660: .4byte 0x00018213 _0803E664: .4byte gUnknown_202EDD4 thumb_func_end sub_803E490 @@ -2780,7 +2780,7 @@ sub_803E668: _0803E6F0: .4byte gUnknown_202EDD4 _0803E6F4: .4byte gUnknown_203B46C _0803E6F8: .4byte gUnknown_202EDCC -_0803E6FC: .4byte gUnknown_203B47C +_0803E6FC: .4byte gPlayTimeRef _0803E700: .4byte gUnknown_203B418 _0803E704: .4byte 0x00018213 thumb_func_end sub_803E668 diff --git a/asm/code_80521D0.s b/asm/code_80521D0.s index 672fffb..8e2fd1b 100644 --- a/asm/code_80521D0.s +++ b/asm/code_80521D0.s @@ -26755,7 +26755,7 @@ _0805FBAC: .4byte gFieldMenuItemsPtr _0805FBB0: .4byte gFieldMenuTeamPtr _0805FBB4: .4byte gFieldMenuOthersPtr _0805FBB8: .4byte gFieldMenuGroundPtr -_0805FBBC: .4byte gUnknown_203B47C +_0805FBBC: .4byte gPlayTimeRef _0805FBC0: .4byte gUnknown_202DE30 _0805FBC4: .4byte gUnknown_80F9174 _0805FBC8: .4byte gUnknown_203B460 diff --git a/asm/code_8098468.s b/asm/code_8098468.s index bff25f8..fa0a031 100644 --- a/asm/code_8098468.s +++ b/asm/code_8098468.s @@ -526,7 +526,7 @@ _08098968: .4byte gUnknown_20398B9 _0809896C: .4byte gUnknown_20398B8 _08098970: .4byte gRealInputs _08098974: .4byte 0x0000030f -_08098978: .4byte gUnknown_203B47C +_08098978: .4byte gPlayTimeRef _0809897C: bl sub_80A4AEC movs r7, 0x1 diff --git a/asm/main_menu.s b/asm/main_menu.s index 8d33b1b..aaa28f6 100644 --- a/asm/main_menu.s +++ b/asm/main_menu.s @@ -7364,7 +7364,7 @@ _08039696: .align 2, 0 _0803974C: .4byte gUnknown_80E780C _08039750: .4byte gUnknown_203B374 -_08039754: .4byte gUnknown_203B47C +_08039754: .4byte gPlayTimeRef _08039758: .4byte gUnknown_80E7838 _0803975C: .4byte gUnknown_80E7848 _08039760: .4byte 0x000f1207 diff --git a/asm/save.s b/asm/save.s deleted file mode 100644 index 9f47bb3..0000000 --- a/asm/save.s +++ /dev/null @@ -1,191 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_801203C -sub_801203C: - push {r4-r7,lr} - adds r7, r0, 0 - adds r4, r1, 0 - ldr r0, _08012078 - movs r1, 0x5 - bl MemoryAlloc - adds r6, r0, 0 - movs r0, 0x89 - lsls r0, 3 - adds r5, r6, r0 - ldr r0, _0801207C - ldr r2, [r0] - cmp r2, 0 - bne _08012084 - ldr r1, _08012080 - adds r0, r6, r1 - str r4, [r0] - bl sub_8011C34 - movs r2, 0x83 - lsls r2, 3 - adds r1, r6, r2 - str r0, [r1] - bl GetRngState - movs r2, 0x84 - lsls r2, 3 - adds r1, r6, r2 - b _0801209E - .align 2, 0 -_08012078: .4byte 0x000057d4 -_0801207C: .4byte gUnknown_203B184 -_08012080: .4byte 0x0000041c -_08012084: - ldr r0, _080120C8 - adds r1, r6, r0 - ldr r0, [r2, 0x54] - str r0, [r1] - movs r0, 0x83 - lsls r0, 3 - adds r1, r6, r0 - ldr r0, [r2, 0x50] - str r0, [r1] - movs r0, 0x84 - lsls r0, 3 - adds r1, r6, r0 - ldr r0, [r2, 0x58] -_0801209E: - str r0, [r1] - ldr r2, _080120CC - adds r1, r6, r2 - ldr r0, _080120D0 - str r0, [r1] - bl sub_8011C4C - adds r1, r0, 0 - ldr r2, _080120D4 - adds r0, r6, r2 - movs r2, 0x10 - bl strncpy - ldr r0, _080120D8 - ldr r1, [r0] - cmp r1, 0 - bne _080120DC - adds r0, r6, 0x4 - bl sub_8002700 - b _080120E8 - .align 2, 0 -_080120C8: .4byte 0x0000041c -_080120CC: .4byte 0x00000414 -_080120D0: .4byte 0x05071412 -_080120D4: .4byte 0x00000404 -_080120D8: .4byte gUnknown_203B184 -_080120DC: - adds r0, r6, 0x4 - ldr r1, [r1, 0x4C] - movs r2, 0x80 - lsls r2, 3 - bl MemoryCopy8 -_080120E8: - ldr r4, _080121A4 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_808ED78 - ldr r2, _080121A8 - adds r1, r6, r2 - str r0, [r1] - adds r5, r4 - movs r4, 0x96 - lsls r4, 2 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_808F154 - movs r2, 0x85 - lsls r2, 3 - adds r1, r6, r2 - str r0, [r1] - adds r5, r4 - subs r4, 0x80 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8091C68 - movs r2, 0x86 - lsls r2, 3 - adds r1, r6, r2 - str r0, [r1] - adds r5, r4 - adds r0, r5, 0 - movs r1, 0x10 - bl sub_80921C4 - ldr r2, _080121AC - adds r1, r6, r2 - str r0, [r1] - adds r5, 0x10 - adds r0, r5, 0 - movs r1, 0x8 - bl sub_80927A8 - movs r2, 0x87 - lsls r2, 3 - adds r1, r6, r2 - str r0, [r1] - adds r5, 0x8 - subs r4, 0xD8 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8097D60 - ldr r2, _080121B0 - adds r1, r6, r2 - str r0, [r1] - adds r5, r4 - ldr r4, _080121B4 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8095624 - movs r2, 0x88 - lsls r2, 3 - adds r1, r6, r2 - str r0, [r1] - adds r5, r4 - ldr r1, _080121B8 - adds r0, r5, 0 - bl sub_80970D8 - ldr r2, _080121BC - adds r1, r6, r2 - str r0, [r1] - ldr r4, _080121C0 - adds r0, r7, 0 - adds r1, r6, 0 - adds r2, r4, 0 - bl WriteSaveSector - adds r5, r0, 0 - adds r0, r7, 0 - adds r1, r6, 0 - adds r2, r4, 0 - bl WriteSaveSector - adds r4, r0, 0 - adds r0, r6, 0 - bl MemoryFree - cmp r5, 0 - beq _080121C4 - adds r0, r5, 0 - b _080121CE - .align 2, 0 -_080121A4: .4byte 0x00004650 -_080121A8: .4byte 0x00000424 -_080121AC: .4byte 0x00000434 -_080121B0: .4byte 0x0000043c -_080121B4: .4byte 0x00000594 -_080121B8: .4byte 0x00000221 -_080121BC: .4byte 0x00000444 -_080121C0: .4byte 0x000057d4 -_080121C4: - cmp r4, 0 - bne _080121CC - movs r0, 0 - b _080121CE -_080121CC: - adds r0, r4, 0 -_080121CE: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_801203C - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/save1.s b/asm/save1.s deleted file mode 100644 index 5991905..0000000 --- a/asm/save1.s +++ /dev/null @@ -1,605 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8012574 -sub_8012574: - push {r4-r6,lr} - lsls r0, 16 - asrs r4, r0, 16 - bl sub_80993D8 - ldr r5, _080125D4 - movs r0, 0x20 - movs r1, 0x5 - bl MemoryAlloc - str r0, [r5] - movs r6, 0 - movs r1, 0 - strh r4, [r0, 0x1C] - str r1, [r0, 0xC] - str r1, [r0, 0x10] - cmp r4, 0 - beq _080125BA - adds r0, r4, 0 - bl GetDialogueSpriteDataPtr - ldr r1, [r5] - str r0, [r1, 0xC] - ldr r0, [r0, 0x4] - str r0, [r1, 0x10] - strb r6, [r1, 0x18] - ldr r0, [r5] - strb r6, [r0, 0x19] - ldr r0, [r5] - strb r6, [r0, 0x1A] - ldr r1, [r5] - movs r0, 0x2 - strh r0, [r1, 0x14] - movs r0, 0x8 - strh r0, [r1, 0x16] -_080125BA: - ldr r1, [r5] - ldr r0, [r1, 0xC] - cmp r0, 0 - beq _080125DC - adds r2, r1, 0 - adds r2, 0xC - ldr r0, _080125D8 - movs r1, 0 - movs r3, 0x20 - bl sub_80141B4 - b _080125E8 - .align 2, 0 -_080125D4: .4byte gUnknown_203B18C -_080125D8: .4byte gUnknown_80D4398 -_080125DC: - ldr r0, _080125F8 - movs r1, 0 - movs r2, 0 - movs r3, 0x20 - bl sub_80141B4 -_080125E8: - ldr r0, _080125FC - ldr r1, [r0] - movs r0, 0x3 - str r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080125F8: .4byte gUnknown_80D4398 -_080125FC: .4byte gUnknown_203B18C - thumb_func_end sub_8012574 - - thumb_func_start sub_8012600 -sub_8012600: - push {r4,r5,lr} - sub sp, 0x8 - movs r5, 0 - ldr r0, _08012628 - ldr r2, [r0] - ldr r1, [r2, 0xC] - adds r4, r0, 0 - cmp r1, 0 - beq _08012616 - adds r5, r2, 0 - adds r5, 0xC -_08012616: - ldr r0, [r2] - cmp r0, 0x7 - bls _0801261E - b _08012738 -_0801261E: - lsls r0, 2 - ldr r1, _0801262C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08012628: .4byte gUnknown_203B18C -_0801262C: .4byte _08012630 - .align 2, 0 -_08012630: - .4byte _08012650 - .4byte _08012654 - .4byte _08012738 - .4byte _08012678 - .4byte _08012680 - .4byte _0801271C - .4byte _08012738 - .4byte _08012734 -_08012650: - ldr r1, [r4] - b _0801272A -_08012654: - ldr r1, [r4] - ldr r0, [r1, 0x4] - adds r0, 0x1 - str r0, [r1, 0x4] - cmp r0, 0x8 - ble _08012738 - ldr r0, _08012674 - movs r1, 0 - movs r2, 0 - movs r3, 0x20 - bl sub_80141B4 - ldr r1, [r4] - movs r0, 0x3 - str r0, [r1] - b _08012738 - .align 2, 0 -_08012674: .4byte gUnknown_80D43D8 -_08012678: - ldr r1, [r4] - movs r0, 0x4 - str r0, [r1] - b _08012738 -_08012680: - movs r0, 0 - str r0, [sp] - bl sub_80140DC - bl sub_8011C1C - adds r1, r0, 0 - mov r0, sp - bl sub_801203C - ldr r4, _080126B8 - ldr r1, [r4] - str r0, [r1, 0x8] - cmp r0, 0 - beq _080126C4 - cmp r0, 0x1 - beq _080126DC - ldr r0, [r1, 0xC] - cmp r0, 0 - beq _080126F4 - ldr r0, _080126BC -_080126AA: - ldr r3, _080126C0 - movs r1, 0 - adds r2, r5, 0 - bl sub_80141B4 - b _08012700 - .align 2, 0 -_080126B8: .4byte gUnknown_203B18C -_080126BC: .4byte gUnknown_80D44B0 -_080126C0: .4byte 0x00000101 -_080126C4: - ldr r0, [r1, 0xC] - cmp r0, 0 - beq _080126D4 - ldr r0, _080126D0 - b _080126AA - .align 2, 0 -_080126D0: .4byte gUnknown_80D4438 -_080126D4: - ldr r0, _080126D8 - b _080126F6 - .align 2, 0 -_080126D8: .4byte gUnknown_80D4438 -_080126DC: - ldr r0, _080126F0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_80141B4 - ldr r1, [r4] - movs r0, 0x6 - b _08012706 - .align 2, 0 -_080126F0: .4byte gUnknown_80D444C -_080126F4: - ldr r0, _08012710 -_080126F6: - ldr r3, _08012714 - movs r1, 0 - adds r2, r5, 0 - bl sub_80141B4 -_08012700: - ldr r0, _08012718 - ldr r1, [r0] - movs r0, 0x5 -_08012706: - str r0, [r1] - bl sub_8014114 - b _08012738 - .align 2, 0 -_08012710: .4byte gUnknown_80D44B0 -_08012714: .4byte 0x00000101 -_08012718: .4byte gUnknown_203B18C -_0801271C: - add r0, sp, 0x4 - bl sub_80144A4 - cmp r0, 0 - bne _08012738 - ldr r0, _08012730 - ldr r1, [r0] -_0801272A: - movs r0, 0x7 - str r0, [r1] - b _08012738 - .align 2, 0 -_08012730: .4byte gUnknown_203B18C -_08012734: - movs r0, 0 - b _0801273A -_08012738: - movs r0, 0x1 -_0801273A: - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8012600 - - thumb_func_start sub_8012744 -sub_8012744: - ldr r0, _0801274C - ldr r0, [r0] - ldr r0, [r0, 0x8] - bx lr - .align 2, 0 -_0801274C: .4byte gUnknown_203B18C - thumb_func_end sub_8012744 - - thumb_func_start sub_8012750 -sub_8012750: - push {r4,lr} - ldr r4, _08012778 - ldr r0, [r4] - cmp r0, 0 - beq _0801276E - ldr r0, [r0, 0xC] - cmp r0, 0 - beq _08012764 - bl CloseFile -_08012764: - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0801276E: - bl sub_80993E4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08012778: .4byte gUnknown_203B18C - thumb_func_end sub_8012750 - - thumb_func_start sub_801277C -sub_801277C: - push {r4-r6,lr} - adds r5, r0, 0 - adds r6, r1, 0 - ldr r4, _080127A4 - movs r0, 0x10 - movs r1, 0x5 - bl MemoryAlloc - str r0, [r4] - str r5, [r0, 0x4] - str r6, [r0, 0x8] - movs r1, 0 - strb r1, [r0, 0xC] - ldr r1, [r4] - movs r0, 0x1 - str r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080127A4: .4byte gUnknown_203B190 - thumb_func_end sub_801277C - - thumb_func_start sub_80127A8 -sub_80127A8: - push {r4,r5,lr} - sub sp, 0x8 - ldr r5, _080127C0 - ldr r2, [r5] - ldr r4, [r2] - cmp r4, 0x1 - beq _080127D4 - cmp r4, 0x1 - bgt _080127C4 - cmp r4, 0 - beq _080127CE - b _0801281E - .align 2, 0 -_080127C0: .4byte gUnknown_203B190 -_080127C4: - cmp r4, 0x2 - beq _08012808 - cmp r4, 0x3 - beq _0801281A - b _0801281E -_080127CE: - movs r0, 0x1 - str r0, [r2] - b _0801281E -_080127D4: - movs r0, 0x10 - str r0, [sp] - ldr r1, [r2, 0x4] - ldr r2, [r2, 0x8] - mov r0, sp - bl sub_8011F9C - cmp r0, 0 - bne _080127EC - ldr r0, [r5] - strb r4, [r0, 0xC] - b _08012812 -_080127EC: - ldr r0, _08012800 - ldr r3, _08012804 - movs r1, 0 - movs r2, 0 - bl sub_80141B4 - ldr r1, [r5] - movs r0, 0x2 - str r0, [r1] - b _0801281E - .align 2, 0 -_08012800: .4byte gUnknown_80D44C8 -_08012804: .4byte 0x00000301 -_08012808: - add r0, sp, 0x4 - bl sub_80144A4 - cmp r0, 0 - bne _0801281E -_08012812: - ldr r1, [r5] - movs r0, 0x3 - str r0, [r1] - b _0801281E -_0801281A: - movs r0, 0 - b _08012820 -_0801281E: - movs r0, 0x1 -_08012820: - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80127A8 - - thumb_func_start sub_8012828 -sub_8012828: - ldr r0, _08012830 - ldr r0, [r0] - ldrb r0, [r0, 0xC] - bx lr - .align 2, 0 -_08012830: .4byte gUnknown_203B190 - thumb_func_end sub_8012828 - - thumb_func_start sub_8012834 -sub_8012834: - push {r4,lr} - ldr r4, _0801284C - ldr r0, [r4] - cmp r0, 0 - beq _08012846 - bl MemoryFree - movs r0, 0 - str r0, [r4] -_08012846: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801284C: .4byte gUnknown_203B190 - thumb_func_end sub_8012834 - - thumb_func_start sub_8012850 -sub_8012850: - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r6, r0, 0 - mov r8, r1 - lsls r4, r2, 24 - lsrs r4, 24 - ldr r5, _0801288C - movs r0, 0x14 - movs r1, 0x5 - bl MemoryAlloc - str r0, [r5] - str r6, [r0, 0x4] - mov r1, r8 - str r1, [r0, 0x8] - movs r1, 0 - strb r4, [r0, 0xC] - ldr r0, [r5] - str r1, [r0] - ldrb r0, [r0, 0xC] - cmp r0, 0 - beq _08012894 - ldr r0, _08012890 - movs r2, 0 - movs r3, 0x20 - bl sub_80141B4 - b _080128A0 - .align 2, 0 -_0801288C: .4byte gUnknown_203B194 -_08012890: .4byte gUnknown_80D45AC -_08012894: - ldr r0, _080128AC - movs r1, 0 - movs r2, 0 - movs r3, 0x20 - bl sub_80141B4 -_080128A0: - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080128AC: .4byte gUnknown_80D45AC - thumb_func_end sub_8012850 - - thumb_func_start sub_80128B0 -sub_80128B0: - push {r4,lr} - sub sp, 0x8 - ldr r1, _080128CC - ldr r0, [r1] - ldr r0, [r0] - adds r4, r1, 0 - cmp r0, 0x5 - bls _080128C2 - b _080129F0 -_080128C2: - lsls r0, 2 - ldr r1, _080128D0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080128CC: .4byte gUnknown_203B194 -_080128D0: .4byte _080128D4 - .align 2, 0 -_080128D4: - .4byte _080128EC - .4byte _080128F4 - .4byte _0801291C - .4byte _080129C8 - .4byte _080129F0 - .4byte _080129E0 -_080128EC: - ldr r1, [r4] - movs r0, 0x1 - str r0, [r1] - b _080129F0 -_080128F4: - bl sub_80140DC - movs r0, 0x10 - str r0, [sp] - ldr r4, _08012918 - ldr r0, [r4] - ldr r1, [r0, 0x4] - ldr r2, [r0, 0x8] - mov r0, sp - bl sub_80121D4 - ldr r1, [r4] - str r0, [r1, 0x10] - movs r0, 0x2 - str r0, [r1] - movs r0, 0x1 - b _080129F2 - .align 2, 0 -_08012918: .4byte gUnknown_203B194 -_0801291C: - movs r0, 0 - str r0, [sp] - ldr r0, [r4] - ldr r0, [r0, 0x10] - cmp r0, 0 - bne _08012934 - mov r0, sp - movs r1, 0x2 - bl sub_801203C - ldr r1, [r4] - str r0, [r1, 0x10] -_08012934: - ldr r0, [r4] - ldr r0, [r0, 0x10] - cmp r0, 0 - beq _08012964 - cmp r0, 0x1 - beq _080129AC - ldr r0, _08012958 - bl sub_80121E0 - ldr r0, _0801295C - ldr r3, _08012960 - movs r1, 0 - movs r2, 0 - bl sub_80141B4 - ldr r1, [r4] - movs r0, 0x3 - b _080129BC - .align 2, 0 -_08012958: .4byte 0x000f1209 -_0801295C: .4byte gUnknown_80D47A0 -_08012960: .4byte 0x00000301 -_08012964: - ldr r0, _08012980 - bl sub_80121E0 - ldr r0, [r4] - ldrb r0, [r0, 0xC] - cmp r0, 0 - beq _0801298C - ldr r0, _08012984 - ldr r3, _08012988 - movs r1, 0 - movs r2, 0 - bl sub_80141B4 - b _08012998 - .align 2, 0 -_08012980: .4byte 0x000f1207 -_08012984: .4byte gUnknown_80D45F4 -_08012988: .4byte 0x00000301 -_0801298C: - ldr r0, _080129A0 - ldr r3, _080129A4 - movs r1, 0 - movs r2, 0 - bl sub_80141B4 -_08012998: - ldr r0, _080129A8 - ldr r1, [r0] - movs r0, 0x3 - b _080129BC - .align 2, 0 -_080129A0: .4byte gUnknown_80D4668 -_080129A4: .4byte 0x00000301 -_080129A8: .4byte gUnknown_203B194 -_080129AC: - ldr r0, _080129C4 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_80141B4 - ldr r1, [r4] - movs r0, 0x4 -_080129BC: - str r0, [r1] - bl sub_8014114 - b _080129F0 - .align 2, 0 -_080129C4: .4byte gUnknown_80D473C -_080129C8: - add r0, sp, 0x4 - bl sub_80144A4 - cmp r0, 0 - bne _080129F0 - ldr r0, _080129DC - ldr r1, [r0] - movs r0, 0x5 - str r0, [r1] - b _080129F0 - .align 2, 0 -_080129DC: .4byte gUnknown_203B194 -_080129E0: - ldr r0, [r4] - ldr r0, [r0, 0x10] - cmp r0, 0 - bne _080129EC - movs r0, 0x2 - b _080129F2 -_080129EC: - movs r0, 0x3 - b _080129F2 -_080129F0: - movs r0, 0 -_080129F2: - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80128B0 - - .align 2,0 diff --git a/data/data_80B9BB8.s b/data/data_80B9BB8.s index 8480f92..7fe5043 100644 --- a/data/data_80B9BB8.s +++ b/data/data_80B9BB8.s @@ -528,17 +528,17 @@ gUnknown_80D4120: @ 80D4120 gUnknown_80D4124: @ 80D4124 .incbin "baserom.gba", 0xD4124, 0x20 -@ Error Handling .global gUnknown_80D4144 gUnknown_80D4144: @ 80D4144 - .byte 0x2e, 0x01 - .byte 0x2f, 0x01 - .byte 0x2f, 0x01 - .byte 0x2d, 0x01 - .byte 0x30, 0x01 - .byte 0x32, 0x01 - .byte 0x33, 0x01 - .byte 0x00, 0x00 + .2byte 302 + .2byte 303 + .2byte 303 + .2byte 301 + .2byte 304 + .2byte 306 + .2byte 307 + .2byte 0 + .string "pksdir0\0" .string "pksdir0\0" .4byte noneText @@ -558,6 +558,7 @@ gUnknown_80D4144: @ 80D4144 defaultText: .string "default\0" +@ Error Handling .global gFuncFileLineString gFuncFileLineString: @ 80D418C .string "func = '%s'\n" @@ -677,40 +678,40 @@ gUnknown_80D42D4: @ 80D42D4 .string "pksdir0\0" .string "pksdir0\0" - .global gUnknown_80D4354 -gUnknown_80D4354: @ 80D4354 + .global gSaveCorrupted +gSaveCorrupted: @ 80D4354 .string "#+The game data is corrupted.\n" .string "#+Your data will be erased.\0" .align 2,0 .string "pksdir0\0" - .global gUnknown_80D4398 -gUnknown_80D4398: @ 80D4398 + .global gSavingAdventure +gSavingAdventure: @ 80D4398 .string "#+Saving your adventure...\n" .string "#+Please don~27t turn off the power.\0" .align 2,0 - .global gUnknown_80D43D8 -gUnknown_80D43D8: @ 80D43D8 + .global gWriteGamePak +gWriteGamePak: @ 80D43D8 .string "#+Writing to GBA Game Pak.\n" .string "#+Do not remove the GBA Game Pak.\n" .string "#+Please wait with the power on.\0" .align 2,0 - .global gUnknown_80D4438 -gUnknown_80D4438: @ 80D4438 + .global gSaveCompleted +gSaveCompleted: @ 80D4438 .string "#+Save completed!\0" .align 2,0 - .global gUnknown_80D444C -gUnknown_80D444C: @ 80D444C + .global gSaveNotWritten +gSaveNotWritten: @ 80D444C .string "#+The data could not be written.\n" .string "#+Please turn off the power and remove\n" .string "#+and reinsert the DS Card.\0" .align 2,0 - .global gUnknown_80D44B0 -gUnknown_80D44B0: @ 80D44B0 + .global gSaveFailed +gSaveFailed: @ 80D44B0 .string "#+Save failed.\0" .align 2,0 .string "pksdir0\0" @@ -756,8 +757,8 @@ gUnknown_80D473C: @ 80D473C .string "#+and reinsert the DS Card.\0" .align 2,0 - .global gUnknown_80D47A0 -gUnknown_80D47A0: @ 80D47A0 + .global gSaveFailed2 +gSaveFailed2: @ 80D47A0 .string "#+Save failed.\0" .align 2,0 .string "pksdir0\0" @@ -2293,6 +2294,9 @@ gUnknown_80DC4BC: @ 80DC4BC .byte 0x00, 0x00, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00 + + .global gUnknown_80DC4D4 +gUnknown_80DC4D4: @ 80DC4D4 .byte 0x01, 0x00, 0x12, 0x00 .global gUnknown_80DC4D8 @@ -2307,7 +2311,8 @@ gUnknown_80DC4D8: @ 80DC4D8 .byte 0x11, 0x00 .byte 0x11, 0x00 .byte 0x00, 0x00 - .byte 0xd4, 0xc4, 0x0d, 0x08 + + .4byte gUnknown_80DC4D4 .global gUnknown_80DC4F0 gUnknown_80DC4F0: @ 80DC4F0 diff --git a/data/data_80F4278.s b/data/data_80F4278.s index 26a95fe..3805a19 100644 --- a/data/data_80F4278.s +++ b/data/data_80F4278.s @@ -8729,25 +8729,46 @@ gAdventureLogText: @ 810B04C .global gRescueTeamRanks gRescueTeamRanks: @ 810B44C - .byte 0xBC, 0xB4, 0x10, 0x08 @ Normal - .byte 0xB0, 0xB4, 0x10, 0x08 - .byte 0xA4, 0xB4, 0x10, 0x08 - .byte 0x98, 0xB4, 0x10, 0x08 - .byte 0x88, 0xB4, 0x10, 0x08 - .byte 0x78, 0xB4, 0x10, 0x08 - .byte 0x68, 0xB4, 0x10, 0x08 @ Lucario + .4byte NormalRank + .4byte BronzeRank + .4byte SilverRank + .4byte GoldRank + .4byte PlatinumRank + .4byte DiamondRank + .4byte LucarioRank + + .global LucarioRank + LucarioRank: .string "Lucario Rank\0" .align 2,0 + + .global DiamondRank + DiamondRank: .string "Diamond Rank\0" .align 2,0 + + .global PlatinumRank + PlatinumRank: .string "Platinum Rank\0" .align 2,0 + + .global GoldRank + GoldRank: .string "Gold Rank\0" .align 2,0 + + .global SilverRank + SilverRank: .string "Silver Rank\0" .align 2,0 + + .global BronzeRank + BronzeRank: .string "Bronze Rank\0" .align 2,0 + + .global NormalRank + NormalRank: .string "Normal Rank\0" .align 2,0 @@ -9003,18 +9024,23 @@ gUnknown_8113080: @ 8113080 .global gUnknown_811383C gUnknown_811383C: @ 811383C .byte 0x2C, 0x38, 0x11, 0x08 + + .global PlaceText + PlaceText: .string "#+Place: $m0\0" .align 2,0 .global gUnknown_8113850 gUnknown_8113850: @ 8113850 - .byte 0x40, 0x38, 0x11, 0x08 - .string "$m1 was defeated by\0" + .4byte PlaceText + .global DefeatedbyText + DefeatedbyText: + .string "$m1 was defeated by\0" .global gUnknown_8113868 gUnknown_8113868: @ 8113868 - .byte 0x54, 0x38, 0x11, 0x08 + .4byte DefeatedbyText .string "$m1\0" .align 2,0 diff --git a/include/save.h b/include/save.h index 29864f1..c5c409e 100644 --- a/include/save.h +++ b/include/save.h @@ -1,11 +1,29 @@ -struct unkTimeStruct -{ - u16 unk0; - u8 unk2; - u8 unk3; - u8 unk4; +#ifndef SAVE_H +#define SAVE_H + +#include "time.h" + +struct UnkStruct_sub_8011DAC { + u8 fill000[0x4]; + u8 unk004[0x400]; + u8 unk404[0x10]; + u32 unk414; + u32 unk418; + u32 unk41C; + u32 unk420; + u32 unk424; + u32 unk428; + u8 fill42C[0x4]; + u32 unk430; + u32 unk434; + u32 unk438; + u32 unk43C; + u32 unk440; + u32 unk444; + u8 unk448[0x538C]; }; + struct UnkStruct_203B184 { /* 0x0 */ u32 *unk0; /* 0x4 */ u32 *unk4; @@ -19,7 +37,7 @@ struct UnkStruct_203B184 { /* 0x24 */ u8 *unk24; /* 0x28 */ u8 *BoughtFriendAreas; /* 0x2C */ u32 unk2C; - /* 0x30 */ struct unkTimeStruct *unk30; + /* 0x30 */ struct PlayTimeStruct *playTime; u32 unk34; u32 unk38; u32 unk3C; @@ -32,3 +50,41 @@ struct UnkStruct_203B184 { u32 unk058; }; +u32 sub_8011C1C(void); +void sub_8011C28(u32 in); +s32 sub_8011C34(void); +void sub_8011C40(s32 in); +u32 sub_8011C4C(void); +void sub_8011CA8(u32 *out, s32 size); +u32 sub_8011DAC(u32 *a); +u32 sub_8011F9C(s32 *r0, u8 *dest, s32 size); +bool8 sub_8011FF8(void); +void sub_8012284(void); +void sub_8012298(void); +void sub_80122A8(void); +void sub_8012468(void); +u8 sub_8012484(void); +void sub_8012558(void); +void sub_8012574(s16 PokemonID); +u8 sub_8012600(void); +u32 sub_8012744(void); +void sub_8012750(void); +u32 sub_80127A8(void); +u8 sub_8012828(void); +void sub_8012834(void); +void sub_8012850(u8 *r0, u32 r1, u8 r2); +u32 sub_80128B0(void); +void sub_80129FC(void); + +void sub_8012298(); +void sub_80122D0(); +void sub_80122F4(); +void sub_8012300(); +void sub_80122A8(); + +u32 ReadSaveSector(s32 *a, u8 *dest, s32 size); +u32 WriteSaveSector(s32 *a, u8 *src, s32 size); +void CalculateChecksum(u8 *out, u32 size); +bool8 ValidateChecksum(u8 *in, u32 size); + +#endif diff --git a/include/time.h b/include/time.h index 9aeb28d..936540b 100644 --- a/include/time.h +++ b/include/time.h @@ -11,9 +11,9 @@ struct PlayTimeStruct void IncrementPlayTime(struct PlayTimeStruct *Time); void ResetPlayTime(struct PlayTimeStruct *Time); -struct PlayTimeStruct *sub_8094FA0(void); +struct PlayTimeStruct *GetPlayTime(void); void DeconstructPlayTime(struct PlayTimeStruct *r0, u32 *outHours, u32 *outMinutes, u32 *outSeconds); -void sub_8094F88(void); +void InitializePlayTime(void); #endif // TIME_H diff --git a/ld_script.txt b/ld_script.txt index 08ddbf8..87332c1 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -82,10 +82,7 @@ SECTIONS { src/debug.o(.text); asm/debug.o(.text); src/save.o(.text); - asm/save.o(.text); - src/save_mid.o(.text); - asm/save1.o(.text); - src/save1.o(.text); + src/code_8012A18.o(.text); src/more_input.o(.text); asm/code_8012A18.o(.text); src/code_801D760.o(.text); diff --git a/src/code_2.c b/src/code_2.c index a9b8925..6b0b46b 100644 --- a/src/code_2.c +++ b/src/code_2.c @@ -1,19 +1,20 @@ #include "global.h" +#include "bg.h" +#include "constants/bg_music.h" #include "file_system.h" #include "friend_area.h" #include "input.h" -#include "bg.h" +#include "memory.h" #include "music.h" -#include "constants/bg_music.h" +#include "time.h" +#include "save.h" -extern void InitHeap(void); extern void NDS_DebugInit(void); extern void sub_801180C(void); extern void NDS_LoadOverlay_GroundMain(void); extern void sub_8014144(void); extern void LoadMonsterParameters(void); extern void sub_8097670(void); -extern void sub_8094F88(void); extern void sub_8094980(void); extern void sub_8094C14(void); extern void sub_8097F5C(void); @@ -23,12 +24,10 @@ extern void LoadWazaParameters(void); extern void sub_80950BC(void); extern void sub_80958E8(void); extern void sub_800CD64(u32, u32); -extern void sub_8012284(void); extern void sub_8094998(u32); extern void SetWindowTitle(char *); extern void sub_800DAAC(void); extern void SetSavingIconCoords(u32); -extern u32 sub_8011DAC(u32 *); extern void sub_800135C(void); extern void xxx_script_related_8001334(u32); extern void sub_80015C0(u32, u32); @@ -43,9 +42,6 @@ extern void LoadTitleScreen(void); extern void SetBGPaletteBufferColorRGB(s32, u8 *, s32, u8 *); extern void sub_80095CC(u32, u32); extern void InitMainMenu(void); -extern void sub_8012468(void); -extern u32 sub_8012484(void); -extern void sub_8012558(void); extern u8 sub_80363E0(void); extern void SetUpMenu(void); extern u32 UpdateMenu(void); @@ -53,7 +49,6 @@ extern void CleanUpMenu(void); extern void DeleteMainMenu(void); extern s32 sub_80953D4(u32); extern void sub_8095240(u8); -extern void sub_80122A8(void); extern void nullsub_33(void); extern u32 sub_80009D0(u32); @@ -96,7 +91,7 @@ void GameLoop(void) sub_8014144(); LoadMonsterParameters(); sub_8097670(); - sub_8094F88(); + InitializePlayTime(); sub_8094980(); sub_8094C14(); sub_8097F5C(); diff --git a/src/code_800558C.c b/src/code_800558C.c index 8de7dd3..a920070 100644 --- a/src/code_800558C.c +++ b/src/code_800558C.c @@ -1,8 +1,6 @@ #include "global.h" #include "code_800558C.h" -extern u32 gUnknown_203B47C; - extern u8 gUnknown_2026E38; extern u32 gUnknown_2026E3C; extern u16 gUnknown_2026E4E; diff --git a/src/code_80118A4.c b/src/code_80118A4.c index 03859b0..ef11fd4 100644 --- a/src/code_80118A4.c +++ b/src/code_80118A4.c @@ -21,7 +21,7 @@ extern void sub_800C074(u16 r0, u16 r1); extern void sub_800C298(u16 r0); extern u8 sub_800C5D0(u16 r0); -extern struct PlayTimeStruct *gUnknown_203B47C; +extern struct PlayTimeStruct *gPlayTimeRef; struct UnkSaveStruct1 { @@ -81,7 +81,7 @@ void sub_801169C(void) nullsub_8(gUnknown_203B46C->unkA); sub_8005180(); sub_80060EC(); - IncrementPlayTime(gUnknown_203B47C); + IncrementPlayTime(gPlayTimeRef); sub_800CB20(); LoadBufferedInputs(); CopySpritesToOam(); diff --git a/src/save1.c b/src/code_8012A18.c index e8f844c..0e0099b 100644 --- a/src/save1.c +++ b/src/code_8012A18.c @@ -2,8 +2,7 @@ #include "code_800558C.h" #include "input.h" - -struct UnkSaveStruct1 +struct UnkStruct_203B46C { /* 0x0 */ u32 unk0; /* 0x4 */ u32 unk4; @@ -12,7 +11,6 @@ struct UnkSaveStruct1 }; -extern void MemoryFree(void *); extern void sub_8011860(); extern void xxx_draw_string_80144C4(); extern void nullsub_8(u8); @@ -26,17 +24,8 @@ extern void sub_8009908(); extern void xxx_call_update_bg_sound_input(); extern void ResetSprites(u8 r0); -extern struct UnkSaveStruct1 *gUnknown_203B46C; - -extern u8 *gUnknown_203B194; +extern struct UnkStruct_203B46C *gUnknown_203B46C; -void sub_80129FC() -{ - if (gUnknown_203B194) { - MemoryFree(gUnknown_203B194); - gUnknown_203B194 = NULL; - } -} void sub_8012A18() { diff --git a/src/code_8040094.c b/src/code_8040094.c index bb4e208..a62671f 100644 --- a/src/code_8040094.c +++ b/src/code_8040094.c @@ -15,7 +15,7 @@ struct unkStruct_203B418 u8 unk18217; }; -extern struct PlayTimeStruct *gUnknown_203B47C; +extern struct PlayTimeStruct *gPlayTimeRef; extern struct unkStruct_203B418 *gUnknown_203B418; extern s32 gUnknown_80F6568[]; extern u8 gUnknown_202EE01; @@ -36,7 +36,7 @@ void sub_8040094(u8 r0) gUnknown_203B418->unk18217 = r0; sub_803F7BC(); sub_80060EC(); - IncrementPlayTime(gUnknown_203B47C); + IncrementPlayTime(gPlayTimeRef); sub_800CB20(); LoadBufferedInputs(); xxx_call_update_bg_sound_input(); diff --git a/src/code_808EAB0.c b/src/code_808EAB0.c index 44be84e..9fea853 100644 --- a/src/code_808EAB0.c +++ b/src/code_808EAB0.c @@ -61,60 +61,21 @@ void sub_808EB0C(u8 *r0, s32 r1) } } -#ifndef NONMATCHING -NAKED -#endif void sub_808EB48(u8 *r0, s32 r1) { -#ifdef NONMATCHING - // TODO array access and counter are mixed up in the regs.. so close s32 counter; - u32 index; - index = 0; - counter = 0xB; - while(counter >= 0) + for(counter = 0; counter <= 0xB; counter++) { - if(gUnknown_810A378[index] <= r1) + if(gUnknown_810A378[counter] <= r1) { - r0[index] = TRUE; + r0[counter] = TRUE; } else { - r0[index] = FALSE; + r0[counter] = FALSE; } - index++; - counter--; } -#else - asm_unified("\tpush {r4-r7,lr}\n" - "\tadds r4, r1, 0\n" - "\tmovs r6, 0x1\n" - "\tmovs r5, 0\n" - "\tadds r2, r0, 0\n" - "\tldr r1, _0808EB64\n" - "\tmovs r3, 0xB\n" -"_0808EB56:\n" - "\tmovs r7, 0\n" - "\tldrsh r0, [r1, r7]\n" - "\tcmp r0, r4\n" - "\tbgt _0808EB68\n" - "\tstrb r6, [r2]\n" - "\tb _0808EB6A\n" - "\t.align 2, 0\n" -"_0808EB64: .4byte gUnknown_810A378\n" -"_0808EB68:\n" - "\tstrb r5, [r2]\n" -"_0808EB6A:\n" - "\tadds r2, 0x1\n" - "\tadds r1, 0x2\n" - "\tsubs r3, 0x1\n" - "\tcmp r3, 0\n" - "\tbge _0808EB56\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0"); -#endif } bool8 sub_808EB7C(s32 r0, u8 r1) diff --git a/src/code_8094F88.c b/src/code_8094F88.c index 54da9b2..b9d2828 100644 --- a/src/code_8094F88.c +++ b/src/code_8094F88.c @@ -1,7 +1,7 @@ #include "global.h" #include "time.h" -extern struct PlayTimeStruct *gUnknown_203B47C; +extern struct PlayTimeStruct *gPlayTimeRef; extern struct PlayTimeStruct gPlayTime; extern u8 gUnknown_2038C88; @@ -18,17 +18,13 @@ extern void sub_809488C(u32 *r0, u32 *r1, u32); extern void sub_8094924(u32 *r0, u32 *r1, u32); -// Forward Declaration -void ResetPlayTime(struct PlayTimeStruct *Time); - - -void sub_8094F88(void) +void InitializePlayTime(void) { - gUnknown_203B47C = &gPlayTime; + gPlayTimeRef = &gPlayTime; ResetPlayTime(&gPlayTime); } -struct PlayTimeStruct *sub_8094FA0(void) +struct PlayTimeStruct *GetPlayTime(void) { return &gPlayTime; } @@ -93,18 +89,18 @@ void DeconstructPlayTime(struct PlayTimeStruct *r0, u32 *outHours, u32 *outMinut void sub_8095044(u32 *r0) { - sub_809488C(r0, (u32 *)(&(gUnknown_203B47C->frames)), 6); - sub_809488C(r0, (u32 *)(&(gUnknown_203B47C->seconds)), 6); - sub_809488C(r0, (u32 *)(&(gUnknown_203B47C->minutes)), 6); - sub_809488C(r0, (u32 *)(&(gUnknown_203B47C->hours)), 14); + sub_809488C(r0, (u32 *)(&(gPlayTimeRef->frames)), 6); + sub_809488C(r0, (u32 *)(&(gPlayTimeRef->seconds)), 6); + sub_809488C(r0, (u32 *)(&(gPlayTimeRef->minutes)), 6); + sub_809488C(r0, (u32 *)(&(gPlayTimeRef->hours)), 14); } void sub_8095080(u32 *r0) { - sub_8094924(r0, (u32 *)(&(gUnknown_203B47C->frames)), 6); - sub_8094924(r0, (u32 *)(&(gUnknown_203B47C->seconds)), 6); - sub_8094924(r0, (u32 *)(&(gUnknown_203B47C->minutes)), 6); - sub_8094924(r0, (u32 *)(&(gUnknown_203B47C->hours)), 14); + sub_8094924(r0, (u32 *)(&(gPlayTimeRef->frames)), 6); + sub_8094924(r0, (u32 *)(&(gPlayTimeRef->seconds)), 6); + sub_8094924(r0, (u32 *)(&(gPlayTimeRef->minutes)), 6); + sub_8094924(r0, (u32 *)(&(gPlayTimeRef->hours)), 14); } void sub_80950BC(void) diff --git a/src/code_8098BDC.c b/src/code_8098BDC.c index a7c8534..6469b57 100644 --- a/src/code_8098BDC.c +++ b/src/code_8098BDC.c @@ -2,7 +2,7 @@ #include "time.h" #include "input.h" -extern struct PlayTimeStruct *gUnknown_203B47C; +extern struct PlayTimeStruct *gPlayTimeRef; extern u32 gUnknown_20398A8; extern u32 gUnknown_20398AC; extern u32 gUnknown_20398B0; @@ -81,7 +81,7 @@ void sub_8098BDC(void) sub_8099BE4(); sub_8099744(); sub_8011860(); - IncrementPlayTime(gUnknown_203B47C); + IncrementPlayTime(gPlayTimeRef); sub_800CB20(); LoadBufferedInputs(); nullsub_120(); diff --git a/src/music_pre.c b/src/music_pre.c index bd87aac..edb00cd 100644 --- a/src/music_pre.c +++ b/src/music_pre.c @@ -73,10 +73,9 @@ void sub_800BA5C(void) nullsub_18(); } -#ifdef NONMATCHING void xxx_update_bg_sound_input(void) { - u8 store; + u32 store; store = gUnknown_203B09B; if(gUnknown_203B09B != 0){ gUnknown_203B09C++; @@ -93,55 +92,6 @@ void xxx_update_bg_sound_input(void) gUnknown_203B0A4 = gUnknown_203B0A0; } } -#else -NAKED -void xxx_update_bg_sound_input(void) -{ - asm_unified("\tpush {r4,r5,lr}\n" - "\tldr r1, _0800BACC\n" - "\tldrb r4, [r1]\n" - "\tcmp r4, 0\n" - "\tbeq _0800BAD4\n" - "\tldr r1, _0800BAD0\n" - "\tldr r0, [r1]\n" - "\tadds r0, 0x1\n" - "\tstr r0, [r1]\n" - "\tb _0800BAFE\n" - "\t.align 2, 0\n" -"_0800BACC: .4byte gUnknown_203B09B\n" -"_0800BAD0: .4byte gUnknown_203B09C\n" -"_0800BAD4:\n" - "\tmovs r0, 0x1\n" - "\tstrb r0, [r1]\n" - "\tldr r0, _0800BB04\n" - "\tstrb r4, [r0]\n" - "\tldr r0, _0800BB08\n" - "\tstr r4, [r0]\n" - "\tbl UpdateBGControlRegisters\n" - "\tldr r5, _0800BB0C\n" - "\tldrb r0, [r5]\n" - "\tcmp r0, 0\n" - "\tbeq _0800BAF0\n" - "\tbl UpdateSound\n" -"_0800BAF0:\n" - "\tbl UpdateInput\n" - "\tstrb r4, [r5]\n" - "\tldr r0, _0800BB10\n" - "\tldr r1, _0800BB14\n" - "\tldr r1, [r1]\n" - "\tstr r1, [r0]\n" -"_0800BAFE:\n" - "\tpop {r4,r5}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_0800BB04: .4byte gUnknown_203B09A\n" -"_0800BB08: .4byte gUnknown_203B09C\n" -"_0800BB0C: .4byte gUnknown_203B099\n" -"_0800BB10: .4byte gUnknown_203B0A4\n" -"_0800BB14: .4byte gUnknown_203B0A0"); -} -#endif void Timer3Intr(void) { @@ -1,29 +1,11 @@ #include "global.h" +#include "event_flag.h" #include "flash.h" +#include "friend_area.h" #include "memory.h" +#include "pokemon.h" +#include "random.h" #include "save.h" -#include "event_flag.h" - -struct UnkStruct_sub_8011DAC { - u8 fill000[0x4]; - u8 unk004[0x400]; - u8 fill404[0x10]; - u32 unk414; - u32 unk418; - u32 unk41C; - u32 unk420; - u32 unk424; - u32 unk428; - u8 fill42C[0x4]; - u32 unk430; - u32 unk434; - u32 unk438; - u32 unk43C; - u32 unk440; - u32 unk444; - u8 fill448[0x538C]; -}; - struct unk_struct { @@ -34,28 +16,150 @@ struct unk_struct u32 unk10; u32 unk14; u32 unk18; - u32 padding[505]; + u32 unk1C; + u32 padding[504]; +}; + +struct unk_203B188 +{ + u32 unk0; + u32 unk4; +}; + + +extern struct unk_203B188 *gUnknown_203B188; + +struct unkStruct_203B18C +{ + u32 unk0; + s32 unk4; + u32 unk8; + struct OpenedFile *faceFile; + u8 *faceData; + u16 unk14; + u16 unk16; + u8 unk18; + u8 unk19; + u8 unk1A; + u8 unk1B; + u16 pokeID; +}; + +extern struct unkStruct_203B18C *gUnknown_203B18C; + +struct unkStruct_203B190 +{ + s32 unk0; + u8 *unk4; + u32 unk8; + u8 unkC; +}; +extern struct unkStruct_203B190 *gUnknown_203B190; + +struct unkStruct_203B194 +{ + s32 unk0; + u8 *unk4; + u32 unk8; + u8 unkC; + u8 padding[0x10 - 0xD]; + u32 unk10; }; +extern struct unkStruct_203B194 *gUnknown_203B194; + extern s32 gUnknown_202DE28; extern u32 gUnknown_203B17C; extern u32 gUnknown_203B180; +extern u32 *gUnknown_203B45C; +extern u32 *gUnknown_203B460; +extern u32 gUnknown_203B464; +extern u8 *gFriendAreas; +extern u32 gUnknown_203B46C; +extern u8 *gUnknown_203B480; +extern u8 *gUnknown_203B484; +extern u32 *gUnknown_203B488; +extern u32 *gUnknown_203B48C; +extern u32 gUnknown_203B490; +extern u32 gUnknown_203B494; +extern u8 *gUnknown_203B498; + +extern const char gSaveCorrupted; +extern const char gSavingAdventure; +extern const char gWriteGamePak; +extern const char gSaveCompleted; +extern const char gSaveNotWritten; +extern const char gSaveFailed; +extern const char gUnknown_80D44C8; +extern const char gUnknown_80D45AC; + +extern const char gUnknown_80D45F4; +extern const char gUnknown_80D4668; +extern const char gUnknown_80D473C; +extern const char gSaveFailed2; + extern volatile struct UnkStruct_203B184 *gUnknown_203B184; -extern void* MemoryAlloc(u32 a, u32 b); -extern void MemoryFree(void* a); -extern void SetRngState(s32 state); extern bool8 sub_800DAB0(u16, u8*, s32); extern bool8 sub_800DAB4(u16, u8*, s32); extern bool8 sub_800DAB8(void); +extern void sub_8011830(void); +extern void sub_80140DC(); +extern void sub_8014114(); +extern void sub_80141B4(const char *r0, u32 r1, u8 *r2, u16 r3); +extern u32 sub_80144A4(u32 *a); +extern u32 sub_808ED78(u8 *, u32); extern u32 sub_808EE9C(void* a, s32 b); +extern u32 sub_808F154(u8 *, u32); extern u32 sub_808F2B0(void* a, s32 b); +extern u32 sub_8091C68(u8 *, u32); extern u32 sub_8091D14(void* a, s32 b); +extern u32 sub_80921C4(u8 *, u32); extern u32 sub_809222C(void* a, s32 b); +extern u32 sub_80927A8(u8 *, u32); extern u32 sub_80927F4(void* a, s32 b); +extern u8 *sub_8095100(void); +extern u32 *sub_8095108(void); +extern u32 *sub_8095110(void); +extern void sub_8095118(void); extern u32 sub_80954CC(void* a, s32 b); +extern u32 sub_8095624(u8 *, u32); extern u32 sub_8096FA0(void* a, s32 b); +extern u32 sub_80970D8(u8 *, u32); +extern void sub_80976A8(); +extern u32 sub_8097D60(u8 *, u32); extern u32 sub_8097D98(void* a, s32 b); +extern void sub_80993E4(); +extern void sub_800135C(void); +extern u32 *sub_808CE00(void); +extern void sub_808CE08(void); +extern u32 *sub_80909D0(void); +extern void sub_80909D8(void); +extern u32 sub_809208C(void); +extern void sub_8092094(void); +extern u32 sub_8094990(void); +extern void sub_8094998(u8 r0); +extern u8 *sub_80950F8(void); +extern void sub_80958E4(u8 *a, u32 b); +extern u32 sub_80958F8(void); +extern void sub_8095900(void); +extern void sub_80972F4(void); +extern u32 sub_8097680(void); +extern u32 *sub_809769C(void); +extern void sub_80974E8(void); +extern void sub_8097748(void); +extern u8 *sub_8097F6C(void); +extern void sub_8097F74(void); +extern void sub_80993D8(void); + +extern struct PlayTimeStruct *gPlayTimeRef; + + +extern void* MemoryAlloc(u32 a, u32 b); +extern void MemoryFree(void* a); +extern void MemoryFill8(u8 *dest, u8 value, s32 size); +extern void xxx_call_start_bg_music(void); + u32 sub_8011C1C(void) { @@ -181,6 +285,7 @@ u32 ReadSaveSector(s32 *a, u8 *dest, s32 size) return 0; } +// Unused bool8 sub_8011DA8(void) { return TRUE; @@ -189,7 +294,7 @@ bool8 sub_8011DA8(void) u32 sub_8011DAC(u32 *a) { struct UnkStruct_sub_8011DAC *r5 = MemoryAlloc(sizeof(struct UnkStruct_sub_8011DAC), 5); - u8 *r4 = (u8*)r5->fill448; + u8 *r4 = (u8*)r5->unk448; u32 r7 = ReadSaveSector(a, (u8*)r5, sizeof(struct UnkStruct_sub_8011DAC)); u32 r1; if (r7) @@ -226,7 +331,7 @@ u32 sub_8011DAC(u32 *a) r7 = 4; } } - else { + else { MemoryCopy8(gUnknown_203B184->unk04C, r5->unk004, ARRAY_COUNT(r5->unk004)); } } @@ -276,9 +381,9 @@ u32 sub_8011DAC(u32 *a) return r7; } -u32 sub_8011F9C(s32 *r0, u8 *r1, s32 r2) +u32 sub_8011F9C(s32 *r0, u8 *dest, s32 size) { - return ReadSaveSector(r0, r1, r2); + return ReadSaveSector(r0, dest, size); } u32 sub_8011FA8(void) @@ -324,3 +429,626 @@ bool8 sub_8011FF8(void) MemoryFree(r5); return r6; } + +u32 sub_801203C(s32 *param_1,u32 param_2) +{ + struct UnkStruct_sub_8011DAC *iVar1; + char *__src; + int r5; + int r4; + u8 *array_ptr; + + iVar1 = MemoryAlloc(sizeof(struct UnkStruct_sub_8011DAC),5); + array_ptr = iVar1->unk448; + if (gUnknown_203B184 == NULL) { + iVar1->unk41C = param_2; + iVar1->unk418 = sub_8011C34(); + iVar1->unk420 = GetRngState(); + } + else { + iVar1->unk41C = gUnknown_203B184->unk054; + iVar1->unk418 = gUnknown_203B184->unk050; + iVar1->unk420 = gUnknown_203B184->unk058; + } + iVar1->unk414 = 0x5071412; + __src = (char *)sub_8011C4C(); + strncpy(iVar1->unk404,__src,16); + if (gUnknown_203B184 == NULL) { + sub_8002700(&iVar1->unk004); + } + else { + MemoryCopy8(iVar1->unk004,gUnknown_203B184->unk04C,0x400); + } + + iVar1->unk424 = sub_808ED78(array_ptr,0x4650); + array_ptr += 0x4650; + iVar1->unk428 = sub_808F154(array_ptr,0x258); + array_ptr += 0x258; + iVar1->unk430 = sub_8091C68(array_ptr,0x1D8); + array_ptr += 0x1D8; + iVar1->unk434 = sub_80921C4(array_ptr,0x10); + array_ptr += 0x10; + iVar1->unk438 = sub_80927A8(array_ptr,8); + array_ptr += 8; + iVar1->unk43C = sub_8097D60(array_ptr,0x100); + array_ptr += 0x100; + iVar1->unk440 = sub_8095624(array_ptr,0x594); + array_ptr += 0x594; + iVar1->unk444 = sub_80970D8(array_ptr,0x221); + + r5 = WriteSaveSector(param_1,(u8 *)iVar1,sizeof(struct UnkStruct_sub_8011DAC)); + r4 = WriteSaveSector(param_1,(u8 *)iVar1,sizeof(struct UnkStruct_sub_8011DAC)); + MemoryFree(iVar1); + + if (r5 != 0) + return r5; + if (r4 != 0) + return r4; + return r5; +} + + +s32 sub_80121D4(s32 *a, u8 *src, s32 size) +{ + return WriteSaveSector(a, src, size); +} + +u32 sub_80121E0(u32 r0) +{ + u32 temp; + u32 *temp2; + u32 temp3; + struct unk_struct *r4 = MemoryAlloc(sizeof(struct unk_struct), 5); + temp = 0x1F; + + r4->unk18 = r0; + r4->unk1C = *sub_809769C(); + r4->unk14 = 0x5071412; + + temp2 = (u32 *)sub_8011C4C(); + strncpy((u8 *)r4 + 4, (u8*)temp2, 16); + sub_80958E4((u8 *)r4 + 32, 0); + temp3 = WriteSaveSector(&temp, (u8 *)r4, sizeof(struct unk_struct)); + MemoryFree(r4); + return temp3; +} + +u32 sub_8012240(void) +{ + s32 temp; + struct unk_struct *r5 = MemoryAlloc(sizeof(struct unk_struct), 5); + MemoryFill8((u8 *)r5, 0xFF, 0x4); + sub_8011830(); + temp = WriteFlashData(0x1F, (u8 *)r5, sizeof(struct unk_struct)); + xxx_call_start_bg_music(); + MemoryFree(r5); + if(temp != 0) + { + return 2; + } + else + { + return 0; + } +} + +void sub_8012284(void) +{ + sub_80122D0(); + sub_80122F4(); + sub_8012300(); +} + +void sub_8012298(void) +{ + sub_80976A8(); + sub_80122A8(); +} + +void sub_80122A8(void) +{ + sub_80122D0(); + sub_80122F4(); + sub_8012300(); + sub_8012240(); + +} + +void nullsub_33(void) +{ +} + +void sub_80122C4(void) +{ + sub_80122A8(); +} + +void sub_80122D0(void) +{ + sub_8011C28(0); + sub_8011C40(-1); + sub_8097748(); + ResetPlayTime(gPlayTimeRef); +} + +void sub_80122F4(void) +{ + sub_800135C(); +} + +void sub_8012300(void) +{ + InitializeFriendAreas(); + sub_808CE08(); + sub_80909D8(); + sub_8092094(); + sub_80972F4(); + sub_8095118(); + sub_8095900(); + sub_80974E8(); + sub_8094998(1); + sub_8097F74(); +} + + +// Unused +void nullsub_200(u32 r0) +{ +} + +// Unused +void sub_8012334(struct UnkStruct_203B184 *r0) +{ + gUnknown_203B184 = r0; + if(r0 != NULL) + { + gUnknown_203B460 = r0->unk0; + gUnknown_203B45C = r0->unk4; + gUnknown_203B480 = r0->unk8; + gUnknown_203B484 = r0->unkC; + gUnknown_203B488 = r0->unk10; + gUnknown_203B48C = r0->unk14; + gUnknown_203B490 = r0->unk18; + gUnknown_203B464 = r0->unk1C; + gUnknown_203B494 = r0->unk20; + gUnknown_203B498 = r0->unk24; + gFriendAreas = r0->BoughtFriendAreas; + gUnknown_203B46C = r0->unk2C; + gPlayTimeRef = r0->playTime; + return; + } + gUnknown_203B460 = sub_80909D0(); + gUnknown_203B45C = sub_808CE00(); + gUnknown_203B480 = sub_80950F8(); + gUnknown_203B484 = sub_8095100(); + gUnknown_203B488 = sub_8095108(); + gUnknown_203B48C = sub_8095110(); + gUnknown_203B490 = sub_80958F8(); + gUnknown_203B464 = sub_809208C(); + gUnknown_203B494 = sub_8097680(); + gUnknown_203B498 = sub_8097F6C(); + gFriendAreas = GetBoughtFriendAreas(); + gUnknown_203B46C = sub_8094990(); + gPlayTimeRef = GetPlayTime(); + +} + +void sub_8012468(void) +{ + gUnknown_203B188 = MemoryAlloc(sizeof(struct unk_203B188), 5); + gUnknown_203B188->unk0 = 1; + +} + +u8 sub_8012484(void) +{ + u32 temp; + u32 temp2; + switch(gUnknown_203B188->unk0) + { + case 0: + gUnknown_203B188->unk0 = 1; + break; + case 1: + temp = 0; + gUnknown_203B188->unk4 = sub_8011DAC(&temp); + gUnknown_203B188->unk0 = 2; + break; + case 2: + if(gUnknown_203B188->unk4 != 0) + { + if(sub_8011FF8()) + { + sub_80141B4(&gSaveCorrupted, 0, 0, 0x301); + gUnknown_203B188->unk0 = 3; + break; + } + else + { + gUnknown_203B188->unk0 = 4; + break; + } + } + else + { + gUnknown_203B188->unk0 = 6; + break; + } + case 3: + if(sub_80144A4(&temp2) == 0) + { + gUnknown_203B188->unk0 = 4; + break; + } + else + { + break; + } + case 4: + sub_8012298(); + gUnknown_203B188->unk0 = 6; + case 5: + break; + case 6: + return 0; + } + return 1; +} + +void sub_8012558(void) +{ + if(gUnknown_203B188 != NULL) + { + MemoryFree(gUnknown_203B188); + gUnknown_203B188 = NULL; + } +} + +#ifdef NONMATCHING +void sub_8012574(s16 PokemonID) +{ + struct OpenedFile *file; + s32 id_s32; + + id_s32 = PokemonID; // had to cast for asr shift + + sub_80993D8(); + gUnknown_203B18C = MemoryAlloc(sizeof(struct unkStruct_203B18C),5); + gUnknown_203B18C->pokeID = id_s32; + gUnknown_203B18C->faceFile = NULL; + gUnknown_203B18C->faceData = NULL; + if (PokemonID != 0) { + file = GetDialogueSpriteDataPtr(id_s32); + gUnknown_203B18C->faceFile = file; + gUnknown_203B18C->faceData = file->data; + gUnknown_203B18C->unk18 = 0; + gUnknown_203B18C->unk19 = 0; + gUnknown_203B18C->unk1A = 0; + gUnknown_203B18C->unk14 = 2; + gUnknown_203B18C->unk16 = 8; + } + if (gUnknown_203B18C->faceFile != 0) { + // LDR r0 and R2 statements get flipped... basically matches + sub_80141B4(&gSavingAdventure,0,(u8 *)&gUnknown_203B18C->faceFile,0x20); + } + else { + sub_80141B4(&gSavingAdventure,0,0,0x20); + } + gUnknown_203B18C->unk0 = 3; +} +#else +NAKED +void sub_8012574(s16 PokemonID) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tlsls r0, 16\n" + "\tasrs r4, r0, 16\n" + "\tbl sub_80993D8\n" + "\tldr r5, _080125D4\n" + "\tmovs r0, 0x20\n" + "\tmovs r1, 0x5\n" + "\tbl MemoryAlloc\n" + "\tstr r0, [r5]\n" + "\tmovs r6, 0\n" + "\tmovs r1, 0\n" + "\tstrh r4, [r0, 0x1C]\n" + "\tstr r1, [r0, 0xC]\n" + "\tstr r1, [r0, 0x10]\n" + "\tcmp r4, 0\n" + "\tbeq _080125BA\n" + "\tadds r0, r4, 0\n" + "\tbl GetDialogueSpriteDataPtr\n" + "\tldr r1, [r5]\n" + "\tstr r0, [r1, 0xC]\n" + "\tldr r0, [r0, 0x4]\n" + "\tstr r0, [r1, 0x10]\n" + "\tstrb r6, [r1, 0x18]\n" + "\tldr r0, [r5]\n" + "\tstrb r6, [r0, 0x19]\n" + "\tldr r0, [r5]\n" + "\tstrb r6, [r0, 0x1A]\n" + "\tldr r1, [r5]\n" + "\tmovs r0, 0x2\n" + "\tstrh r0, [r1, 0x14]\n" + "\tmovs r0, 0x8\n" + "\tstrh r0, [r1, 0x16]\n" +"_080125BA:\n" + "\tldr r1, [r5]\n" + "\tldr r0, [r1, 0xC]\n" + "\tcmp r0, 0\n" + "\tbeq _080125DC\n" + "\tadds r2, r1, 0\n" + "\tadds r2, 0xC\n" + "\tldr r0, _080125D8\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0x20\n" + "\tbl sub_80141B4\n" + "\tb _080125E8\n" + "\t.align 2, 0\n" +"_080125D4: .4byte gUnknown_203B18C\n" +"_080125D8: .4byte gSavingAdventure\n" +"_080125DC:\n" + "\tldr r0, _080125F8\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x20\n" + "\tbl sub_80141B4\n" +"_080125E8:\n" + "\tldr r0, _080125FC\n" + "\tldr r1, [r0]\n" + "\tmovs r0, 0x3\n" + "\tstr r0, [r1]\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_080125F8: .4byte gSavingAdventure\n" +"_080125FC: .4byte gUnknown_203B18C"); + +} +#endif + +u8 sub_8012600(void) +{ + struct OpenedFile **faceFile; + u32 local_14; + u32 other_stack; + + faceFile = NULL; + if (gUnknown_203B18C->faceFile != 0) { + faceFile = &gUnknown_203B18C->faceFile; + } + switch(gUnknown_203B18C->unk0) + { + case 0: + gUnknown_203B18C->unk0 = 7; + break; + case 1: + gUnknown_203B18C->unk4++; + if (8 < gUnknown_203B18C->unk4) { + sub_80141B4(&gWriteGamePak, 0, 0, 0x20); + gUnknown_203B18C->unk0 = 3; + } + break; + case 2: + break; + case 3: + gUnknown_203B18C->unk0 = 4; + break; + case 4: + local_14 = 0; + sub_80140DC(); + gUnknown_203B18C->unk8 = sub_801203C(&local_14, sub_8011C1C()); + switch(gUnknown_203B18C->unk8) + { + case 0: + if(gUnknown_203B18C->faceFile != NULL) + { + sub_80141B4(&gSaveCompleted, 0, (u8 *)faceFile, 0x101); + } + else + { + sub_80141B4(&gSaveCompleted, 0, (u8 *)faceFile, 0x101); + } + gUnknown_203B18C->unk0 = 5; + break; + case 1: + sub_80141B4(&gSaveNotWritten, 0, 0, 0); + gUnknown_203B18C->unk0 = 6; + break; + default: + if(gUnknown_203B18C->faceFile != NULL) + { + sub_80141B4(&gSaveFailed, 0, (u8 *)faceFile, 0x101); + } + else + { + sub_80141B4(&gSaveFailed, 0, (u8 *)faceFile, 0x101); + } + gUnknown_203B18C->unk0 = 5; + break; + } + sub_8014114(); + break; + case 5: + if (sub_80144A4(&other_stack) == 0) + gUnknown_203B18C->unk0 = 7; + break; + case 6: + break; + case 7: + return 0; + } + return 1; +} + +u32 sub_8012744(void) +{ + return gUnknown_203B18C->unk8; +} + +void sub_8012750(void) +{ + if(gUnknown_203B18C != NULL) + { + if(gUnknown_203B18C->faceFile != NULL) + { + CloseFile(gUnknown_203B18C->faceFile); + } + MemoryFree(gUnknown_203B18C); + gUnknown_203B18C = NULL; + } + sub_80993E4(); +} + +void sub_801277C(u8 *r0, u32 r1) +{ + gUnknown_203B190 = MemoryAlloc(sizeof(struct unkStruct_203B190), 5); + gUnknown_203B190->unk4 = r0; + gUnknown_203B190->unk8 = r1; + gUnknown_203B190->unkC = 0; + gUnknown_203B190->unk0 = 1; +} + +u32 sub_80127A8(void) +{ + u32 stack_1; + u32 stack_2; + + switch(gUnknown_203B190->unk0) + { + case 0: + gUnknown_203B190->unk0 = 1; + break; + case 1: + stack_1 = 16; + if(sub_8011F9C(&stack_1, gUnknown_203B190->unk4, gUnknown_203B190->unk8) == 0) + { + gUnknown_203B190->unkC = 1; + gUnknown_203B190->unk0 = 3; + } + else + { + sub_80141B4(&gUnknown_80D44C8, 0, 0, 0x301); + gUnknown_203B190->unk0 = 2; + } + break; + case 2: + if(sub_80144A4(&stack_2) == 0) + gUnknown_203B190->unk0 = 3; + break; + case 3: + return 0; + default: + break; + } + return 1; +} + +u8 sub_8012828(void) +{ + return gUnknown_203B190->unkC; +} + +void sub_8012834(void) +{ + if(gUnknown_203B190 != NULL){ + MemoryFree(gUnknown_203B190); + gUnknown_203B190 = 0; + } +} + +void sub_8012850(u8 *r0, u32 r1, u8 r2) +{ + gUnknown_203B194 = MemoryAlloc(sizeof(struct unkStruct_203B194), 5); + gUnknown_203B194->unk4 = r0; + gUnknown_203B194->unk8 = r1; + gUnknown_203B194->unkC = r2; + gUnknown_203B194->unk0 = 0; + if(gUnknown_203B194->unkC != 0) + { + sub_80141B4(&gUnknown_80D45AC, 0, 0, 0x20); + } + else + { + sub_80141B4(&gUnknown_80D45AC, 0, 0, 0x20); + } +} + +u32 sub_80128B0(void) +{ + u32 stack_1; + u32 stack_2; + switch(gUnknown_203B194->unk0) + { + case 0: + gUnknown_203B194->unk0 = 1; + break; + case 1: + sub_80140DC(); + stack_1 = 16; + gUnknown_203B194->unk10 = sub_80121D4(&stack_1, gUnknown_203B194->unk4, gUnknown_203B194->unk8); + gUnknown_203B194->unk0 = 2; + return 1; + case 2: + stack_1 = 0; + if(gUnknown_203B194->unk10 == 0) + { + gUnknown_203B194->unk10 = sub_801203C(&stack_1, 2); + } + switch(gUnknown_203B194->unk10) + { + case 0: + sub_80121E0(0xf1207); + if(gUnknown_203B194->unkC != 0) + { + sub_80141B4(&gUnknown_80D45F4, 0, 0, 0x301); + } + else + { + sub_80141B4(&gUnknown_80D4668, 0, 0, 0x301); + } + gUnknown_203B194->unk0 = 3; + break; + case 1: + sub_80141B4(&gUnknown_80D473C, 0, 0, 0); + gUnknown_203B194->unk0 = 4; + break; + default: + sub_80121E0(0xf1209); + sub_80141B4(&gSaveFailed2, 0, 0, 0x301); + gUnknown_203B194->unk0 = 3; + break; + } + sub_8014114(); + break; + case 3: + if(sub_80144A4(&stack_2) == 0) + gUnknown_203B194->unk0 = 5; + break; + case 4: + break; + case 5: + if(gUnknown_203B194->unk10 == 0) + { + return 2; + } + else + { + return 3; + } + break; + default: + break; + } + return 0; +} + +void sub_80129FC() +{ + if (gUnknown_203B194) { + MemoryFree(gUnknown_203B194); + gUnknown_203B194 = NULL; + } +} + diff --git a/src/save_mid.c b/src/save_mid.c deleted file mode 100644 index 0c4531c..0000000 --- a/src/save_mid.c +++ /dev/null @@ -1,310 +0,0 @@ -#include "global.h" -#include "save.h" -#include "friend_area.h" - -extern struct UnkStruct_203B184 *gUnknown_203B184; -extern struct unkTimeStruct *gUnknown_203B47C; - -struct unk_203B188 -{ - u32 unk0; - u32 unk4; -}; - -struct unk_struct -{ - u32 unk0; - u32 unk4; - u32 unk8; - u32 unkC; - u32 unk10; - u32 unk14; - u32 unk18; - u32 unk1C; - u32 padding[504]; -}; - -extern struct unk_203B188 *gUnknown_203B188; - -extern u32 *gUnknown_203B45C; -extern u32 *gUnknown_203B460; -extern u32 gUnknown_203B464; -extern u8 *gFriendAreas; -extern u32 gUnknown_203B46C; -extern u8 *gUnknown_203B480; -extern u8 *gUnknown_203B484; -extern u32 *gUnknown_203B488; -extern u32 *gUnknown_203B48C; -extern u32 gUnknown_203B490; -extern u32 gUnknown_203B494; -extern u8 *gUnknown_203B498; -extern u32 gUnknown_80D4354; - -extern void sub_800135C(void); -extern u32 *sub_808CE00(void); -extern void sub_808CE08(void); -extern u32 *sub_80909D0(void); -extern void sub_80909D8(void); -extern u32 sub_809208C(void); -extern void sub_8092094(void); -extern u32 sub_8094990(void); -extern void sub_8094998(u8 r0); -extern u8 *sub_80950F8(void); -extern u8 *sub_8095100(void); -extern u32 *sub_8095108(void); -extern u32 *sub_8095110(void); -extern void sub_8095118(void); -extern u32 sub_80958F8(void); -extern void sub_8095900(void); -extern u32 sub_8097680(void); -extern void sub_80972F4(void); -extern void sub_80974E8(void); -extern u8 *sub_8097F6C(void); -extern void sub_8097F74(void); - -extern void sub_8011C28(u32 r0); -extern void sub_8011C40(s32 r0); -extern void sub_8097748(void); - - -extern void ResetPlayTime(struct unkTimeStruct *Time); // defined in src/code_8094F88.c -extern struct unkTimeStruct *sub_8094FA0(void); - -extern void* MemoryAlloc(u32 a, u32 b); -extern void MemoryFree(void* a); -extern void MemoryFill8(u8 *dest, u8 value, s32 size); -extern void sub_8011830(void); -extern s32 WriteFlashData(s32 sector, u8 *src, s32 size); -extern void xxx_call_start_bg_music(void); -extern u32 *sub_809769C(void); -u32 *sub_8011C4C(void); -extern void sub_80958E4(u8 *a, u32 b); -extern s32 WriteSaveSector(s32 *a, u8 *src, s32 size); -extern u32 sub_8011DAC(u32 *a); -extern u32 sub_80144A4(u32 *a); -extern bool8 sub_8011FF8(void); -extern void sub_80141B4(u32 *r0, u32 r1, u32 r2, u16 r3); - -void sub_8012298(); -void sub_80122D0(); -void sub_80122F4(); -void sub_8012300(); -void sub_80976A8(); -void sub_80122A8(); - - -s32 sub_80121D4(s32 *a, u8 *src, s32 size) -{ - return WriteSaveSector(a, src, size); -} - -u32 sub_80121E0(u32 r0) -{ - u32 temp; - u32 *temp2; - u32 temp3; - struct unk_struct *r4 = MemoryAlloc(sizeof(struct unk_struct), 5); - temp = 0x1F; - - r4->unk18 = r0; - r4->unk1C = *sub_809769C(); - r4->unk14 = 0x5071412; - - temp2 = sub_8011C4C(); - strncpy((u8 *)r4 + 4, (u8*)temp2, 16); - sub_80958E4((u8 *)r4 + 32, 0); - temp3 = WriteSaveSector(&temp, (u8 *)r4, sizeof(struct unk_struct)); - MemoryFree(r4); - return temp3; -} - -u32 sub_8012240(void) -{ - s32 temp; - struct unk_struct *r5 = MemoryAlloc(sizeof(struct unk_struct), 5); - MemoryFill8((u8 *)r5, 0xFF, 0x4); - sub_8011830(); - temp = WriteFlashData(0x1F, (u8 *)r5, sizeof(struct unk_struct)); - xxx_call_start_bg_music(); - MemoryFree(r5); - if(temp != 0) - { - return 2; - } - else - { - return 0; - } -} - -void sub_8012284(void) -{ - sub_80122D0(); - sub_80122F4(); - sub_8012300(); -} - -void sub_8012298(void) -{ - sub_80976A8(); - sub_80122A8(); -} - -void sub_80122A8(void) -{ - sub_80122D0(); - sub_80122F4(); - sub_8012300(); - sub_8012240(); - -} - -void nullsub_33(void) -{ -} - -void sub_80122C4(void) -{ - sub_80122A8(); -} - -void sub_80122D0(void) -{ - sub_8011C28(0); - sub_8011C40(-1); - sub_8097748(); - ResetPlayTime(gUnknown_203B47C); -} - -void sub_80122F4(void) -{ - sub_800135C(); -} - -void sub_8012300(void) -{ - InitializeFriendAreas(); - sub_808CE08(); - sub_80909D8(); - sub_8092094(); - sub_80972F4(); - sub_8095118(); - sub_8095900(); - sub_80974E8(); - sub_8094998(1); - sub_8097F74(); -} - - -// Unused -void nullsub_200(u32 r0) -{ -} - -// Unused -void sub_8012334(struct UnkStruct_203B184 *r0) -{ - gUnknown_203B184 = r0; - if(r0 != NULL) - { - gUnknown_203B460 = r0->unk0; - gUnknown_203B45C = r0->unk4; - gUnknown_203B480 = r0->unk8; - gUnknown_203B484 = r0->unkC; - gUnknown_203B488 = r0->unk10; - gUnknown_203B48C = r0->unk14; - gUnknown_203B490 = r0->unk18; - gUnknown_203B464 = r0->unk1C; - gUnknown_203B494 = r0->unk20; - gUnknown_203B498 = r0->unk24; - gFriendAreas = r0->BoughtFriendAreas; - gUnknown_203B46C = r0->unk2C; - gUnknown_203B47C = r0->unk30; - return; - } - gUnknown_203B460 = sub_80909D0(); - gUnknown_203B45C = sub_808CE00(); - gUnknown_203B480 = sub_80950F8(); - gUnknown_203B484 = sub_8095100(); - gUnknown_203B488 = sub_8095108(); - gUnknown_203B48C = sub_8095110(); - gUnknown_203B490 = sub_80958F8(); - gUnknown_203B464 = sub_809208C(); - gUnknown_203B494 = sub_8097680(); - gUnknown_203B498 = sub_8097F6C(); - gFriendAreas = GetBoughtFriendAreas(); - gUnknown_203B46C = sub_8094990(); - gUnknown_203B47C = sub_8094FA0(); - -} - -void sub_8012468(void) -{ - gUnknown_203B188 = MemoryAlloc(sizeof(struct unk_203B188), 5); - gUnknown_203B188->unk0 = 1; - -} - -u8 sub_8012484(void) -{ - u32 temp; - u32 temp2; - switch(gUnknown_203B188->unk0) - { - case 0: - gUnknown_203B188->unk0 = 1; - break; - case 1: - temp = 0; - gUnknown_203B188->unk4 = sub_8011DAC(&temp); - gUnknown_203B188->unk0 = 2; - break; - case 2: - if(gUnknown_203B188->unk4 != 0) - { - if(sub_8011FF8()) - { - sub_80141B4(&gUnknown_80D4354, 0, 0, 0x301); - gUnknown_203B188->unk0 = 3; - break; - } - else - { - gUnknown_203B188->unk0 = 4; - break; - } - } - else - { - gUnknown_203B188->unk0 = 6; - break; - } - case 3: - if(sub_80144A4(&temp2) == 0) - { - gUnknown_203B188->unk0 = 4; - break; - } - else - { - break; - } - case 4: - sub_8012298(); - gUnknown_203B188->unk0 = 6; - case 5: - break; - case 6: - return 0; - } - return 1; -} - -void sub_8012558(void) -{ - if(gUnknown_203B188 != NULL) - { - MemoryFree(gUnknown_203B188); - gUnknown_203B188 = NULL; - } -} diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 07c4ff9..274625c 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -1,4 +1,5 @@ #include "global.h" +#include "save.h" // Wonder Mail Related struct WonderMailStruct_203B2C0 @@ -57,9 +58,6 @@ extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0; extern u32 sub_80144A4(s32 *r0); extern void sub_8011C28(u32); -extern void sub_8012574(u32); -extern u8 sub_8012600(); -extern void sub_8012750(); extern void sub_8095240(u8); extern void sub_809927C(u8); @@ -104,10 +102,6 @@ extern u32 sub_8030DA0(void); extern void sub_8030DE4(void); extern void sub_803092C(void); extern void sub_8011C28(u32); -extern void sub_8012574(u32); -extern u8 sub_8012600(); -extern u32 sub_8012744(); -extern void sub_8012750(); extern u32 sub_80154F0(); diff --git a/sym_ewram2.txt b/sym_ewram2.txt index 4ff84ba..73eed3b 100644 --- a/sym_ewram2.txt +++ b/sym_ewram2.txt @@ -605,7 +605,7 @@ gUnknown_203B470 = .; /* 203B470 */ gUnknown_203B474 = .; /* 203B474 */ . += 0x8; -gUnknown_203B47C = .; /* 203B47C */ +gPlayTimeRef = .; /* 203B47C */ . += 0x4; gUnknown_203B480 = .; /* 203B480 */ |