diff options
author | huderlem <huderlem@gmail.com> | 2019-08-13 17:23:23 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-13 17:23:23 -0500 |
commit | 5cbb66a6e5dd18d133e692a04e116aa3909d22ed (patch) | |
tree | c1ca88b5138d19eb5106f171c8ae77d4516e8b22 | |
parent | 4c8669a3aad601f1381ca9c67c78040ce80157df (diff) | |
parent | 0648ededb9161e9f5fc4e0a38ae91c7bf14e6c0b (diff) |
Merge pull request #8 from camthesaxman/decompile-options
decompile field_select.s and start decompiling options.s
-rwxr-xr-x | .gitignore | 2 | ||||
-rwxr-xr-x | asm/bonus_field_select.s | 4 | ||||
-rwxr-xr-x | asm/ereader.s | 4 | ||||
-rwxr-xr-x | asm/field_select.s | 970 | ||||
-rwxr-xr-x | asm/high_scores.s | 40 | ||||
-rwxr-xr-x | asm/intro.s | 16 | ||||
-rwxr-xr-x | asm/options.s | 1312 | ||||
-rwxr-xr-x | asm/pokedex.s | 6 | ||||
-rwxr-xr-x | asm/rom_11B9C.s | 12 | ||||
-rwxr-xr-x | asm/rom_3219C.s | 4 | ||||
-rwxr-xr-x | asm/rom_9BC.s | 8 | ||||
-rwxr-xr-x | data/rom.s | 4 | ||||
-rw-r--r-- | include/agb_sram.h | 4 | ||||
-rw-r--r-- | include/functions.h | 52 | ||||
-rwxr-xr-x | include/global.h | 16 | ||||
-rwxr-xr-x | include/main.h | 34 | ||||
-rw-r--r-- | include/variables.h | 40 | ||||
-rwxr-xr-x | ld_script.txt | 3 | ||||
-rw-r--r-- | src/field_select.c | 374 | ||||
-rwxr-xr-x | src/gbplayer.c | 3 | ||||
-rwxr-xr-x | src/main.c | 50 | ||||
-rw-r--r-- | src/options.c | 500 | ||||
-rw-r--r-- | src/rom_1068C.c | 10 | ||||
-rw-r--r-- | src/rom_528AC.c | 137 | ||||
-rwxr-xr-x | src/rom_850.c | 52 | ||||
-rwxr-xr-x | src/titlescreen.c | 6 | ||||
-rwxr-xr-x | src/util.c | 14 | ||||
-rw-r--r-- | sym_ewram.txt | 12 |
28 files changed, 1162 insertions, 2527 deletions
@@ -29,4 +29,4 @@ build/ *.ddump baserom.* *.swp - +*.swo diff --git a/asm/bonus_field_select.s b/asm/bonus_field_select.s index 331e00b..f1b177d 100755 --- a/asm/bonus_field_select.s +++ b/asm/bonus_field_select.s @@ -23,7 +23,7 @@ _080025C0: .4byte gMain thumb_func_start sub_25C4 sub_25C4: @ 0x080025C4 push {r4, lr} - bl sub_438 + bl ResetSomeGraphicsRelatedStuff movs r2, #0x80 lsls r2, r2, #0x13 movs r1, #0x84 @@ -368,7 +368,7 @@ _080028A0: lsls r2, r2, #1 adds r1, r5, r2 strb r0, [r1] - bl sub_52B30 + bl SaveFile_WriteToSram movs r0, #2 strb r0, [r6] _080028CC: diff --git a/asm/ereader.s b/asm/ereader.s index b5a612c..6ae020e 100755 --- a/asm/ereader.s +++ b/asm/ereader.s @@ -26,7 +26,7 @@ sub_2C78: @ 0x08002C78 mov r6, sb mov r5, r8 push {r5, r6} - bl sub_438 + bl ResetSomeGraphicsRelatedStuff movs r2, #0x80 lsls r2, r2, #0x13 movs r1, #0x86 @@ -922,7 +922,7 @@ sub_343C: @ 0x0800343C mov r6, sb mov r5, r8 push {r5, r6} - bl sub_438 + bl ResetSomeGraphicsRelatedStuff movs r2, #0x80 lsls r2, r2, #0x13 movs r1, #0x86 diff --git a/asm/field_select.s b/asm/field_select.s deleted file mode 100755 index f789dbf..0000000 --- a/asm/field_select.s +++ /dev/null @@ -1,970 +0,0 @@ - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start FieldSelectMain -FieldSelectMain: @ 0x08008AD4 - push {lr} - ldr r1, _08008AEC @ =gUnknown_080792C0 - ldr r0, _08008AF0 @ =gMain - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {r0} - bx r0 - .align 2, 0 -_08008AEC: .4byte gUnknown_080792C0 -_08008AF0: .4byte gMain - - thumb_func_start LoadFieldSelectGraphics -LoadFieldSelectGraphics: @ 0x08008AF4 - push {r4, lr} - bl sub_438 - movs r2, #0x80 - lsls r2, r2, #0x13 - movs r1, #0x84 - lsls r1, r1, #5 - adds r0, r1, #0 - strh r0, [r2] - ldr r1, _08008BD4 @ =0x04000008 - movs r0, #4 - strh r0, [r1] - ldrh r0, [r2] - movs r3, #0x80 - lsls r3, r3, #1 - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r1, _08008BD8 @ =0x0400000A - adds r3, #5 - adds r0, r3, #0 - strh r0, [r1] - ldrh r0, [r2] - adds r3, #0xfb - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r1, _08008BDC @ =0x0400000C - adds r3, #0xa - adds r0, r3, #0 - strh r0, [r1] - ldrh r0, [r2] - movs r3, #0x80 - lsls r3, r3, #3 - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r4, _08008BE0 @ =gMain - ldrh r0, [r2] - strh r0, [r4, #0x16] - ldr r0, _08008BE4 @ =0x040000D4 - ldr r1, _08008BE8 @ =gFieldSelectBGPals - str r1, [r0] - movs r1, #0xa0 - lsls r1, r1, #0x13 - str r1, [r0, #4] - ldr r3, _08008BEC @ =0x80000100 - str r3, [r0, #8] - ldr r1, [r0, #8] - ldr r1, _08008BF0 @ =gFieldSelectWindow_Gfx - str r1, [r0] - ldr r1, _08008BF4 @ =0x06004000 - str r1, [r0, #4] - ldr r1, _08008BF8 @ =0x80000A00 - str r1, [r0, #8] - ldr r1, [r0, #8] - ldr r1, _08008BFC @ =gFieldSelectMiniFields_Gfx - str r1, [r0] - ldr r1, _08008C00 @ =0x06008000 - str r1, [r0, #4] - ldr r1, _08008C04 @ =0x80001C00 - str r1, [r0, #8] - ldr r1, [r0, #8] - ldr r1, _08008C08 @ =gUnknown_080A2400 - str r1, [r0] - movs r1, #0xc0 - lsls r1, r1, #0x13 - str r1, [r0, #4] - ldr r2, _08008C0C @ =0x80000400 - str r2, [r0, #8] - ldr r1, [r0, #8] - ldr r1, _08008C10 @ =gFieldSelectFrameShadowTilemap - str r1, [r0] - ldr r1, _08008C14 @ =0x06000800 - str r1, [r0, #4] - str r2, [r0, #8] - ldr r1, [r0, #8] - ldr r1, _08008C18 @ =gFieldSelectWindowTilemap - str r1, [r0] - ldr r1, _08008C1C @ =0x06001000 - str r1, [r0, #4] - str r2, [r0, #8] - ldr r1, [r0, #8] - ldr r1, _08008C20 @ =gFieldSelectSpritePals - str r1, [r0] - ldr r1, _08008C24 @ =0x05000200 - str r1, [r0, #4] - str r3, [r0, #8] - ldr r1, [r0, #8] - ldr r1, _08008C28 @ =gFieldSelectSpriteGfx - str r1, [r0] - ldr r1, _08008C2C @ =0x06010000 - str r1, [r0, #4] - ldr r1, _08008C30 @ =0x80002010 - str r1, [r0, #8] - ldr r0, [r0, #8] - bl sub_CBC - bl sub_8C38 - ldr r0, _08008C34 @ =sub_8F94 + 1 - bl sub_FD5C - ldrb r0, [r4, #3] - adds r0, #1 - strb r0, [r4, #3] - movs r0, #3 - bl m4aSongNumStart - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08008BD4: .4byte 0x04000008 -_08008BD8: .4byte 0x0400000A -_08008BDC: .4byte 0x0400000C -_08008BE0: .4byte gMain -_08008BE4: .4byte 0x040000D4 -_08008BE8: .4byte gFieldSelectBGPals -_08008BEC: .4byte 0x80000100 -_08008BF0: .4byte gFieldSelectWindow_Gfx -_08008BF4: .4byte 0x06004000 -_08008BF8: .4byte 0x80000A00 -_08008BFC: .4byte gFieldSelectMiniFields_Gfx -_08008C00: .4byte 0x06008000 -_08008C04: .4byte 0x80001C00 -_08008C08: .4byte gUnknown_080A2400 -_08008C0C: .4byte 0x80000400 -_08008C10: .4byte gFieldSelectFrameShadowTilemap -_08008C14: .4byte 0x06000800 -_08008C18: .4byte gFieldSelectWindowTilemap -_08008C1C: .4byte 0x06001000 -_08008C20: .4byte gFieldSelectSpritePals -_08008C24: .4byte 0x05000200 -_08008C28: .4byte gFieldSelectSpriteGfx -_08008C2C: .4byte 0x06010000 -_08008C30: .4byte 0x80002010 -_08008C34: .4byte sub_8F94 + 1 - - thumb_func_start sub_8C38 -sub_8C38: @ 0x08008C38 - ldr r2, _08008C70 @ =gUnknown_02002838 - movs r3, #0 - movs r1, #0 - movs r0, #2 - strh r0, [r2] - movs r0, #3 - strh r0, [r2, #2] - strh r1, [r2, #4] - movs r0, #1 - strh r0, [r2, #6] - strh r1, [r2, #8] - strh r1, [r2, #0xa] - strh r1, [r2, #0xc] - strh r1, [r2, #0xe] - strh r1, [r2, #0x16] - strh r1, [r2, #0x12] - strb r3, [r2, #0x14] - ldr r0, _08008C74 @ =gMain+0x74 - adds r1, r0, #0 - adds r1, #0xce - ldrb r1, [r1] - strb r1, [r2, #0x10] - subs r0, #0x74 - strb r3, [r0, #4] - ldr r0, _08008C78 @ =gUnknown_02002850 - strb r3, [r0] - bx lr - .align 2, 0 -_08008C70: .4byte gUnknown_02002838 -_08008C74: .4byte gMain+0x74 -_08008C78: .4byte gUnknown_02002850 - - thumb_func_start sub_8C7C -sub_8C7C: @ 0x08008C7C - push {r4, r5, r6, r7, lr} - bl sub_8F94 - ldr r7, _08008CC4 @ =gMain - ldrh r1, [r7, #0x1c] - movs r0, #0xf - ands r0, r1 - cmp r0, #0xf - bne _08008CA0 - ldr r1, _08008CC8 @ =gUnknown_02002850 - movs r0, #1 - strb r0, [r1] - ldr r1, _08008CCC @ =gUnknown_02002838 - movs r0, #0 - strh r0, [r1, #0x16] - ldrb r0, [r7, #3] - adds r0, #1 - strb r0, [r7, #3] -_08008CA0: - ldr r0, _08008CC8 @ =gUnknown_02002850 - movs r6, #0 - ldrsb r6, [r0, r6] - cmp r6, #0 - beq _08008CAC - b _08008F56 -_08008CAC: - ldr r5, _08008CCC @ =gUnknown_02002838 - ldrh r4, [r5, #0xa] - adds r3, r5, #0 - cmp r4, #1 - bne _08008CB8 - b _08008E2E -_08008CB8: - cmp r4, #1 - bgt _08008CD0 - cmp r4, #0 - beq _08008CDC - b _08008F4C - .align 2, 0 -_08008CC4: .4byte gMain -_08008CC8: .4byte gUnknown_02002850 -_08008CCC: .4byte gUnknown_02002838 -_08008CD0: - cmp r4, #2 - beq _08008DC2 - cmp r4, #3 - bne _08008CDA - b _08008F08 -_08008CDA: - b _08008F4C -_08008CDC: - ldrh r1, [r7, #0x18] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _08008CFC - ldrh r4, [r5, #8] - cmp r4, #1 - bne _08008D1A - movs r0, #0x6d - bl m4aSongNumStart - strh r6, [r5, #8] - strh r6, [r5, #4] - strh r4, [r5, #6] - strh r4, [r5, #0xa] - b _08008D1A -_08008CFC: - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _08008D1A - ldrh r0, [r5, #8] - cmp r0, #0 - bne _08008D1A - movs r0, #0x6d - bl m4aSongNumStart - movs r0, #1 - strh r0, [r5, #8] - strh r0, [r5, #4] - strh r6, [r5, #6] - strh r0, [r5, #0xa] -_08008D1A: - ldr r2, _08008D50 @ =gMain - ldrh r1, [r2, #0x18] - movs r4, #1 - adds r0, r4, #0 - ands r0, r1 - adds r5, r2, #0 - cmp r0, #0 - beq _08008D66 - movs r0, #0x65 - bl m4aSongNumStart - ldr r1, _08008D54 @ =gUnknown_02002838 - movs r2, #0 - movs r3, #2 - strh r3, [r1, #0xa] - movs r0, #1 - strb r0, [r1, #0x14] - strh r2, [r1, #0xe] - ldrh r0, [r1, #8] - cmp r0, #0 - bne _08008D58 - strh r2, [r1, #4] - strh r4, [r1, #6] - strh r3, [r1] - movs r0, #3 - b _08008D62 - .align 2, 0 -_08008D50: .4byte gMain -_08008D54: .4byte gUnknown_02002838 -_08008D58: - strh r4, [r1, #4] - strh r2, [r1, #6] - movs r0, #7 - strh r0, [r1] - movs r0, #0xb -_08008D62: - strh r0, [r1, #2] - strh r2, [r1, #0xc] -_08008D66: - ldrh r1, [r5, #0x18] - movs r4, #2 - adds r0, r4, #0 - ands r0, r1 - cmp r0, #0 - beq _08008DAA - movs r0, #0x66 - bl m4aSongNumStart - ldrb r0, [r5, #3] - adds r0, #1 - movs r3, #0 - strb r0, [r5, #3] - ldr r1, _08008D98 @ =gUnknown_02002838 - movs r2, #1 - strh r2, [r1, #0x16] - ldrh r0, [r1, #8] - cmp r0, #0 - bne _08008D9C - strh r3, [r1, #4] - strh r2, [r1, #6] - strh r4, [r1] - movs r0, #3 - b _08008DA6 - .align 2, 0 -_08008D98: .4byte gUnknown_02002838 -_08008D9C: - strh r2, [r1, #4] - strh r3, [r1, #6] - movs r0, #7 - strh r0, [r1] - movs r0, #0xb -_08008DA6: - strh r0, [r1, #2] - strh r3, [r1, #0xc] -_08008DAA: - ldr r1, _08008DB8 @ =gMain - ldrb r0, [r1, #4] - cmp r0, #1 - bhi _08008DBC - movs r0, #0 - strb r0, [r1, #6] - b _08008F4C - .align 2, 0 -_08008DB8: .4byte gMain -_08008DBC: - movs r0, #1 - strb r0, [r1, #6] - b _08008F4C -_08008DC2: - ldrh r1, [r7, #0x18] - movs r0, #0x30 - ands r0, r1 - cmp r0, #0 - beq _08008DDA - movs r0, #0x67 - bl m4aSongNumStart - ldrb r1, [r5, #0x10] - movs r0, #1 - subs r0, r0, r1 - strb r0, [r5, #0x10] -_08008DDA: - ldrh r1, [r7, #0x18] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08008E00 - movs r0, #0x65 - bl m4aSongNumStart - strh r6, [r5, #0xe] - strh r6, [r5, #0xc] - ldrb r0, [r5, #0x10] - movs r2, #0xa1 - lsls r2, r2, #1 - adds r1, r7, r2 - strb r0, [r1] - bl sub_52B30 - movs r0, #3 - strh r0, [r5, #0xa] -_08008E00: - ldrh r0, [r7, #0x18] - ands r4, r0 - cmp r4, #0 - beq _08008E12 - movs r0, #0x66 - bl m4aSongNumStart - strb r6, [r5, #0x14] - strh r6, [r5, #0xa] -_08008E12: - ldrh r0, [r5, #0xe] - adds r0, #1 - strh r0, [r5, #0xe] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #4 - bgt _08008E22 - b _08008F4C -_08008E22: - strh r6, [r5, #0xe] - ldrh r1, [r5, #0x12] - movs r0, #1 - subs r0, r0, r1 - strh r0, [r5, #0x12] - b _08008F4C -_08008E2E: - ldrh r0, [r5, #8] - cmp r0, #0 - bne _08008E5C - ldr r2, _08008E58 @ =gUnknown_086A6B14 - movs r4, #0xc - ldrsh r0, [r5, r4] - movs r1, #4 - subs r0, r1, r0 - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] - strh r0, [r5] - movs r4, #0xc - ldrsh r0, [r5, r4] - subs r1, r1, r0 - lsls r1, r1, #1 - adds r2, #0xa - adds r1, r1, r2 - ldrh r0, [r1] - b _08008E76 - .align 2, 0 -_08008E58: .4byte gUnknown_086A6B14 -_08008E5C: - ldr r1, _08008E94 @ =gUnknown_086A6B14 - movs r2, #0xc - ldrsh r0, [r5, r2] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r5] - movs r4, #0xc - ldrsh r0, [r5, r4] - lsls r0, r0, #1 - adds r1, #0xa - adds r0, r0, r1 - ldrh r0, [r0] -_08008E76: - strh r0, [r5, #2] - ldr r0, _08008E98 @ =gMain - ldr r1, [r0, #0x4c] - movs r0, #1 - ands r1, r0 - cmp r1, #0 - bne _08008EA0 - ldrh r2, [r3, #0xc] - movs r4, #0xc - ldrsh r0, [r3, r4] - cmp r0, #3 - bgt _08008E9C - adds r0, r2, #1 - strh r0, [r3, #0xc] - b _08008EA0 - .align 2, 0 -_08008E94: .4byte gUnknown_086A6B14 -_08008E98: .4byte gMain -_08008E9C: - strh r1, [r3, #0xc] - strh r1, [r3, #0xa] -_08008EA0: - ldr r0, _08008ED0 @ =gMain - ldrh r1, [r0, #0x18] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _08008ED8 - ldr r4, _08008ED4 @ =gUnknown_02002838 - ldrh r5, [r4, #8] - cmp r5, #1 - bne _08008F4C - movs r0, #0x6d - bl m4aSongNumStart - movs r0, #0 - strh r0, [r4, #8] - strh r0, [r4, #4] - strh r5, [r4, #6] - movs r1, #2 - strh r1, [r4] - movs r1, #3 - strh r1, [r4, #2] - strh r0, [r4, #0xc] - strh r0, [r4, #0xa] - b _08008F4C - .align 2, 0 -_08008ED0: .4byte gMain -_08008ED4: .4byte gUnknown_02002838 -_08008ED8: - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _08008F4C - ldr r4, _08008F04 @ =gUnknown_02002838 - ldrh r5, [r4, #8] - cmp r5, #0 - bne _08008F4C - movs r0, #0x6d - bl m4aSongNumStart - movs r0, #1 - strh r0, [r4, #8] - strh r0, [r4, #4] - strh r5, [r4, #6] - movs r0, #7 - strh r0, [r4] - movs r0, #0xb - strh r0, [r4, #2] - strh r5, [r4, #0xc] - strh r5, [r4, #0xa] - b _08008F4C - .align 2, 0 -_08008F04: .4byte gUnknown_02002838 -_08008F08: - ldrh r0, [r5, #0xe] - adds r0, #1 - strh r0, [r5, #0xe] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #3 - ble _08008F4C - strh r6, [r5, #0xe] - ldrh r0, [r5, #8] - cmp r0, #0 - bne _08008F28 - ldrh r1, [r5, #4] - movs r0, #1 - subs r0, r0, r1 - strh r0, [r5, #4] - b _08008F30 -_08008F28: - ldrh r1, [r5, #6] - movs r0, #1 - subs r0, r0, r1 - strh r0, [r5, #6] -_08008F30: - ldr r1, _08008F5C @ =gUnknown_02002838 - ldrh r0, [r1, #0xc] - adds r0, #1 - strh r0, [r1, #0xc] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #5 - ble _08008F4C - movs r0, #2 - strh r0, [r1, #0x16] - ldr r1, _08008F60 @ =gMain - ldrb r0, [r1, #3] - adds r0, #1 - strb r0, [r1, #3] -_08008F4C: - ldr r0, _08008F60 @ =gMain - ldr r1, _08008F5C @ =gUnknown_02002838 - ldrh r1, [r1, #8] - strb r1, [r0, #4] - strb r1, [r0, #5] -_08008F56: - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_08008F5C: .4byte gUnknown_02002838 -_08008F60: .4byte gMain - - thumb_func_start sub_8F64 -sub_8F64: @ 0x08008F64 - push {lr} - ldr r0, _08008F88 @ =sub_8F94 + 1 - bl sub_FE04 - bl m4aMPlayAllStop - bl sub_D10 - ldr r1, _08008F8C @ =gAutoDisplayTitlescreenMenu - movs r0, #1 - strb r0, [r1] - ldr r0, _08008F90 @ =gUnknown_02002838 - ldrh r0, [r0, #0x16] - bl SetMainGameState - pop {r0} - bx r0 - .align 2, 0 -_08008F88: .4byte sub_8F94 + 1 -_08008F8C: .4byte gAutoDisplayTitlescreenMenu -_08008F90: .4byte gUnknown_02002838 - - thumb_func_start sub_8F94 -sub_8F94: @ 0x08008F94 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #4 - ldr r5, _08009254 @ =gMain - ldrh r0, [r5, #0x38] - ldr r0, _08009258 @ =0x00000642 - strh r0, [r5, #0x38] - ldrh r0, [r5, #0x3a] - ldr r0, _0800925C @ =0x00000808 - strh r0, [r5, #0x3a] - ldr r1, _08009260 @ =0x04000050 - ldrh r0, [r5, #0x38] - strh r0, [r1] - adds r1, #2 - ldrh r0, [r5, #0x3a] - strh r0, [r1] - movs r0, #0xbe - lsls r0, r0, #2 - adds r6, r5, r0 - movs r1, #0xec - lsls r1, r1, #2 - adds r1, r1, r5 - mov sb, r1 - ldr r4, _08009264 @ =gUnknown_02002838 - ldrh r0, [r4] - movs r2, #0xb8 - muls r0, r2, r0 - adds r0, r0, r6 - str r0, [sp] - ldrh r0, [r4, #2] - muls r0, r2, r0 - adds r0, r0, r6 - mov sl, r0 - ldrb r1, [r4, #0x10] - lsls r1, r1, #1 - movs r3, #0x12 - ldrsh r0, [r4, r3] - adds r0, #0xc - adds r1, r1, r0 - adds r0, r1, #0 - muls r0, r2, r0 - adds r0, r0, r6 - mov r8, r0 - ldrh r0, [r4, #4] - strh r0, [r6] - ldrh r0, [r4, #6] - mov r7, sb - strh r0, [r7] - movs r0, #1 - ldr r1, [sp] - strh r0, [r1] - mov r2, sl - strh r0, [r2] - movs r0, #0x14 - ldrsb r0, [r4, r0] - mov r3, r8 - strh r0, [r3] - ldr r0, _08009268 @ =gUnknown_086A6AD4 - movs r1, #0x10 - adds r2, r6, #0 - bl LoadSpriteSets - ldrh r0, [r4, #4] - cmp r0, #1 - bne _08009066 - movs r0, #0x25 - strh r0, [r6, #2] - movs r0, #0x18 - strh r0, [r6, #4] - ldr r7, _0800926C @ =gOamBuffer - movs r0, #0xc0 - lsls r0, r0, #2 - adds r4, r5, r0 - ldr r1, _08009270 @ =0x000001FF - mov ip, r1 - movs r5, #1 -_08009032: - ldrh r3, [r4] - lsls r3, r3, #3 - adds r3, r3, r7 - movs r2, #2 - ldrsh r1, [r4, r2] - movs r2, #2 - ldrsh r0, [r6, r2] - adds r1, r1, r0 - mov r0, ip - ands r1, r0 - ldrh r2, [r3, #2] - ldr r0, _08009274 @ =0xFFFFFE00 - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r4] - lsls r1, r1, #3 - adds r1, r1, r7 - ldrb r0, [r6, #4] - ldrb r2, [r4, #4] - adds r0, r0, r2 - strb r0, [r1] - adds r4, #8 - subs r5, #1 - cmp r5, #0 - bge _08009032 -_08009066: - ldr r0, _08009264 @ =gUnknown_02002838 - ldrh r1, [r0, #6] - cmp r1, #1 - bne _080090BC - movs r0, #0x8d - mov r3, sb - strh r0, [r3, #2] - movs r0, #0x18 - strh r0, [r3, #4] - ldr r6, _0800926C @ =gOamBuffer - ldr r7, _08009274 @ =0xFFFFFE00 - mov ip, r7 - mov r4, sb - adds r4, #8 - movs r5, #1 -_08009084: - ldrh r3, [r4] - lsls r3, r3, #3 - adds r3, r3, r6 - movs r0, #2 - ldrsh r1, [r4, r0] - mov r2, sb - movs r7, #2 - ldrsh r0, [r2, r7] - adds r1, r1, r0 - ldr r0, _08009270 @ =0x000001FF - ands r1, r0 - ldrh r2, [r3, #2] - mov r0, ip - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r4] - lsls r1, r1, #3 - adds r1, r1, r6 - mov r2, sb - ldrb r0, [r2, #4] - ldrb r3, [r4, #4] - adds r0, r0, r3 - strb r0, [r1] - adds r4, #8 - subs r5, #1 - cmp r5, #0 - bge _08009084 -_080090BC: - movs r0, #0x20 - ldr r7, [sp] - strh r0, [r7, #2] - strh r0, [r7, #4] - ldr r1, _08009264 @ =gUnknown_02002838 - ldrh r0, [r1] - lsls r0, r0, #2 - ldr r2, _08009268 @ =gUnknown_086A6AD4 - adds r0, r0, r2 - ldr r6, [r0] - movs r5, #0 - ldrh r3, [r6] - cmp r5, r3 - bge _0800913A - movs r7, #0xd - rsbs r7, r7, #0 - mov ip, r7 - ldr r0, _08009274 @ =0xFFFFFE00 - mov sb, r0 - ldr r4, [sp] - adds r4, #8 -_080090E6: - ldrh r2, [r4] - lsls r2, r2, #3 - ldr r1, _0800926C @ =gOamBuffer - adds r2, r2, r1 - ldrb r1, [r2, #1] - mov r0, ip - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2, #1] - ldrh r3, [r4] - lsls r3, r3, #3 - ldr r2, _0800926C @ =gOamBuffer - adds r3, r3, r2 - movs r7, #2 - ldrsh r1, [r4, r7] - ldr r2, [sp] - movs r7, #2 - ldrsh r0, [r2, r7] - adds r1, r1, r0 - ldr r2, _08009270 @ =0x000001FF - adds r0, r2, #0 - ands r1, r0 - ldrh r2, [r3, #2] - mov r0, sb - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r4] - lsls r1, r1, #3 - ldr r3, _0800926C @ =gOamBuffer - adds r1, r1, r3 - ldr r7, [sp] - ldrb r0, [r7, #4] - ldrb r2, [r4, #4] - adds r0, r0, r2 - strb r0, [r1] - adds r4, #8 - adds r5, #1 - ldrh r3, [r6] - cmp r5, r3 - blt _080090E6 -_0800913A: - movs r0, #0x88 - mov r7, sl - strh r0, [r7, #2] - movs r0, #0x20 - strh r0, [r7, #4] - ldr r1, _08009264 @ =gUnknown_02002838 - ldrh r0, [r1, #2] - lsls r0, r0, #2 - ldr r2, _08009268 @ =gUnknown_086A6AD4 - adds r0, r0, r2 - ldr r6, [r0] - movs r5, #0 - ldrh r3, [r6] - cmp r5, r3 - bge _080091BA - movs r7, #0xd - rsbs r7, r7, #0 - mov ip, r7 - ldr r0, _08009274 @ =0xFFFFFE00 - mov sb, r0 - mov r4, sl - adds r4, #8 -_08009166: - ldrh r2, [r4] - lsls r2, r2, #3 - ldr r1, _0800926C @ =gOamBuffer - adds r2, r2, r1 - ldrb r1, [r2, #1] - mov r0, ip - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2, #1] - ldrh r3, [r4] - lsls r3, r3, #3 - ldr r2, _0800926C @ =gOamBuffer - adds r3, r3, r2 - movs r7, #2 - ldrsh r1, [r4, r7] - mov r2, sl - movs r7, #2 - ldrsh r0, [r2, r7] - adds r1, r1, r0 - ldr r2, _08009270 @ =0x000001FF - adds r0, r2, #0 - ands r1, r0 - ldrh r2, [r3, #2] - mov r0, sb - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r4] - lsls r1, r1, #3 - ldr r3, _0800926C @ =gOamBuffer - adds r1, r1, r3 - mov r7, sl - ldrb r0, [r7, #4] - ldrb r2, [r4, #4] - adds r0, r0, r2 - strb r0, [r1] - adds r4, #8 - adds r5, #1 - ldrh r3, [r6] - cmp r5, r3 - blt _08009166 -_080091BA: - mov r7, r8 - ldrh r0, [r7] - cmp r0, #1 - bne _08009234 - ldr r1, _08009278 @ =gUnknown_086A6B28 - ldr r2, _08009264 @ =gUnknown_02002838 - ldrh r0, [r2, #8] - lsls r0, r0, #2 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r7, #2] - ldrh r0, [r2, #8] - lsls r0, r0, #2 - adds r0, r0, r1 - ldrh r0, [r0, #2] - strh r0, [r7, #4] - ldr r6, _0800926C @ =gOamBuffer - movs r3, #0xd - rsbs r3, r3, #0 - mov sb, r3 - ldr r7, _08009274 @ =0xFFFFFE00 - mov ip, r7 - mov r4, r8 - adds r4, #8 - movs r5, #4 -_080091EC: - ldrh r1, [r4] - lsls r1, r1, #3 - adds r1, r1, r6 - ldrb r2, [r1, #1] - mov r0, sb - ands r0, r2 - strb r0, [r1, #1] - ldrh r3, [r4] - lsls r3, r3, #3 - adds r3, r3, r6 - movs r0, #2 - ldrsh r1, [r4, r0] - mov r2, r8 - movs r7, #2 - ldrsh r0, [r2, r7] - adds r1, r1, r0 - ldr r2, _08009270 @ =0x000001FF - adds r0, r2, #0 - ands r1, r0 - ldrh r2, [r3, #2] - mov r0, ip - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r4] - lsls r1, r1, #3 - adds r1, r1, r6 - mov r3, r8 - ldrb r0, [r3, #4] - ldrb r7, [r4, #4] - adds r0, r0, r7 - strb r0, [r1] - adds r4, #8 - subs r5, #1 - cmp r5, #0 - bge _080091EC -_08009234: - movs r0, #0 - ldr r1, [sp] - strh r0, [r1] - mov r2, sl - strh r0, [r2] - mov r3, r8 - strh r0, [r3] - add sp, #4 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_08009254: .4byte gMain -_08009258: .4byte 0x00000642 -_0800925C: .4byte 0x00000808 -_08009260: .4byte 0x04000050 -_08009264: .4byte gUnknown_02002838 -_08009268: .4byte gUnknown_086A6AD4 -_0800926C: .4byte gOamBuffer -_08009270: .4byte 0x000001FF -_08009274: .4byte 0xFFFFFE00 -_08009278: .4byte gUnknown_086A6B28 diff --git a/asm/high_scores.s b/asm/high_scores.s index 2c93e68..ce16d73 100755 --- a/asm/high_scores.s +++ b/asm/high_scores.s @@ -40,7 +40,7 @@ _0800CE84: .4byte gMain thumb_func_start sub_CE88 sub_CE88: @ 0x0800CE88 push {r4, r5, r6, r7, lr} - bl sub_438 + bl ResetSomeGraphicsRelatedStuff movs r2, #0x80 lsls r2, r2, #0x13 movs r1, #0x84 @@ -1320,7 +1320,7 @@ _0800D8CE: mov r3, sb cmp r3, #1 ble _0800D8AC - bl sub_52B30 + bl SaveFile_WriteToSram ldr r1, _0800D8FC @ =gMain movs r0, #3 strb r0, [r1, #3] @@ -1772,7 +1772,7 @@ _0800DC88: mov r2, sb cmp r2, #1 ble _0800DC68 - bl sub_52B30 + bl SaveFile_WriteToSram bl sub_2B4 bl m4aMPlayAllStop bl sub_D10 @@ -1813,7 +1813,7 @@ sub_DCF0: @ 0x0800DCF0 movs r0, #0x65 bl m4aSongNumStart bl sub_F6E0 - bl sub_52B30 + bl SaveFile_WriteToSram bl sub_2B4 bl m4aMPlayAllStop bl sub_D10 @@ -1864,7 +1864,7 @@ sub_DD70: @ 0x0800DD70 push {r4, r5, r6, lr} mov r6, r8 push {r6} - bl sub_438 + bl ResetSomeGraphicsRelatedStuff movs r2, #0x80 lsls r2, r2, #0x13 movs r1, #0x84 @@ -2283,7 +2283,7 @@ sub_E0EC: @ 0x0800E0EC push {r4, r5, r6, lr} mov r6, r8 push {r6} - bl sub_438 + bl ResetSomeGraphicsRelatedStuff movs r2, #0x80 lsls r2, r2, #0x13 movs r1, #0x84 @@ -5917,7 +5917,7 @@ _0800FDAA: _0800FDB4: adds r0, r7, #0 bl sub_1001C - bl sub_D74 + bl MainLoopIter cmp r7, #0x1f bne _0800FDE0 ldr r0, _0800FDCC @ =gUnknown_0201A920 @@ -5995,7 +5995,7 @@ _0800FE4C: _0800FE54: adds r0, r7, #0 bl sub_1001C - bl sub_D74 + bl MainLoopIter cmp r7, #0x1f bne _0800FE84 ldr r0, _0800FE80 @ =gUnknown_0201A920 @@ -6024,8 +6024,8 @@ _0800FE8C: cmp r7, #0x1f bls _0800FE4C bl sub_10528 - bl sub_D74 - bl sub_490 + bl MainLoopIter + bl ClearGraphicsMemory add sp, #4 pop {r3} mov r8, r3 @@ -6092,7 +6092,7 @@ _0800FF18: _0800FF22: adds r0, r7, #0 bl sub_1001C - bl sub_D74 + bl MainLoopIter cmp r7, #0x1f bne _0800FF50 ldr r0, _0800FF38 @ =gUnknown_0201A920 @@ -6170,7 +6170,7 @@ _0800FFBA: _0800FFC2: adds r0, r7, #0 bl sub_1001C - bl sub_D74 + bl MainLoopIter cmp r7, #0x1f bne _0800FFF0 ldr r0, _0800FFEC @ =gUnknown_0201A920 @@ -6197,7 +6197,7 @@ _0800FFF8: lsrs r7, r0, #0x10 cmp r7, #0x1f bls _0800FFBA - bl sub_D74 + bl MainLoopIter add sp, #4 pop {r3} mov r8, r3 @@ -6770,12 +6770,12 @@ sub_10424: @ 0x08010424 movs r5, #0 strh r0, [r1, #0x16] strh r3, [r4] - bl sub_D74 + bl MainLoopIter movs r0, #8 strh r0, [r4] - bl sub_D74 + bl MainLoopIter strh r5, [r4] - bl sub_D74 + bl MainLoopIter strh r5, [r6] pop {r4, r5, r6} pop {r0} @@ -6805,13 +6805,13 @@ sub_10480: @ 0x08010480 orrs r0, r1 strh r0, [r2] strh r4, [r5] - bl sub_D74 + bl MainLoopIter movs r0, #8 strh r0, [r5] - bl sub_D74 + bl MainLoopIter movs r0, #0x10 strh r0, [r5] - bl sub_D74 + bl MainLoopIter mov r0, sp strh r4, [r0] ldr r1, _08010500 @ =0x040000D4 @@ -6838,7 +6838,7 @@ sub_10480: @ 0x08010480 strh r4, [r0] adds r0, #2 strh r4, [r0] - bl sub_D74 + bl MainLoopIter add sp, #4 pop {r4, r5} pop {r0} diff --git a/asm/intro.s b/asm/intro.s index 1953b80..0783af7 100755 --- a/asm/intro.s +++ b/asm/intro.s @@ -23,7 +23,7 @@ _08009298: .4byte gMain thumb_func_start sub_929C sub_929C: @ 0x0800929C push {r4, lr} - bl sub_438 + bl ResetSomeGraphicsRelatedStuff movs r3, #0x80 lsls r3, r3, #0x13 movs r0, #0x80 @@ -70,7 +70,7 @@ sub_929C: @ 0x0800929C ldr r0, _08009340 @ =gUnknown_0202C790 strb r2, [r0] ldr r0, _08009344 @ =sub_93F8 + 1 - bl sub_898 + bl SetMainCallback bl sub_CBC bl sub_24C ldrb r0, [r4, #3] @@ -169,7 +169,7 @@ sub_93D0: @ 0x080093D0 bl sub_2B4 bl m4aMPlayAllStop bl sub_D10 - bl sub_8BC + bl ResetMainCallback ldr r1, _080093F4 @ =gAutoDisplayTitlescreenMenu movs r0, #0 strb r0, [r1] @@ -264,9 +264,9 @@ sub_9498: @ 0x08009498 mov r6, sb mov r5, r8 push {r5, r6, r7} - bl sub_490 + bl ClearGraphicsMemory bl sub_518 - bl sub_578 + bl ClearSprites movs r2, #0x80 lsls r2, r2, #0x13 movs r1, #0x80 @@ -3630,7 +3630,7 @@ sub_B090: @ 0x0800B090 push {lr} sub sp, #8 bl sub_10480 - bl sub_578 + bl ClearSprites movs r2, #0 str r2, [sp] ldr r1, _0800B0D4 @ =0x040000D4 @@ -4488,7 +4488,7 @@ _0800B79C: .4byte gUnknown_0202C790 sub_B7A0: @ 0x0800B7A0 push {lr} sub sp, #8 - bl sub_578 + bl ClearSprites movs r2, #0 str r2, [sp] ldr r1, _0800B7E4 @ =0x040000D4 @@ -6093,7 +6093,7 @@ sub_C498: @ 0x0800C498 push {lr} sub sp, #8 bl sub_10480 - bl sub_578 + bl ClearSprites movs r2, #0 str r2, [sp] ldr r1, _0800C4DC @ =0x040000D4 diff --git a/asm/options.s b/asm/options.s index 438dee1..c31ae6d 100755 --- a/asm/options.s +++ b/asm/options.s @@ -4,1288 +4,6 @@ .text - thumb_func_start OptionsMain -OptionsMain: @ 0x08051220 - push {lr} - ldr r1, _08051238 @ =gUnknown_08527F08 - ldr r0, _0805123C @ =gMain - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {r0} - bx r0 - .align 2, 0 -_08051238: .4byte gUnknown_08527F08 -_0805123C: .4byte gMain - - thumb_func_start sub_51240 -sub_51240: @ 0x08051240 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - sub sp, #4 - bl sub_438 - movs r2, #0x80 - lsls r2, r2, #0x13 - movs r1, #0x84 - lsls r1, r1, #5 - adds r0, r1, #0 - strh r0, [r2] - ldr r1, _08051358 @ =0x04000008 - movs r0, #4 - strh r0, [r1] - ldrh r0, [r2] - movs r3, #0x80 - lsls r3, r3, #1 - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r1, _0805135C @ =0x0400000A - adds r3, #9 - adds r0, r3, #0 - strh r0, [r1] - ldrh r0, [r2] - adds r3, #0xf7 - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r0, _08051360 @ =gMain - mov sb, r0 - ldrh r0, [r2] - mov r1, sb - strh r0, [r1, #0x16] - ldr r5, _08051364 @ =0x040000D4 - ldr r0, _08051368 @ =gUnknown_0852B468 - str r0, [r5] - movs r0, #0xa0 - lsls r0, r0, #0x13 - str r0, [r5, #4] - ldr r0, _0805136C @ =0x80000100 - str r0, [r5, #8] - ldr r0, [r5, #8] - ldr r0, _08051370 @ =gUnknown_08528828 - str r0, [r5] - ldr r0, _08051374 @ =0x06004000 - str r0, [r5, #4] - ldr r0, _08051378 @ =0x80000C00 - str r0, [r5, #8] - ldr r0, [r5, #8] - ldr r0, _0805137C @ =gUnknown_0852A848 - str r0, [r5] - ldr r0, _08051380 @ =0x06008000 - str r0, [r5, #4] - ldr r0, _08051384 @ =0x80000600 - str r0, [r5, #8] - ldr r0, [r5, #8] - ldr r0, _08051388 @ =gUnknown_08528028 - str r0, [r5] - ldr r7, _0805138C @ =gUnknown_03005C00 - str r7, [r5, #4] - ldr r6, _08051390 @ =0x80000400 - str r6, [r5, #8] - ldr r0, [r5, #8] - str r7, [r5] - movs r3, #0xc0 - lsls r3, r3, #0x13 - mov r8, r3 - str r3, [r5, #4] - str r6, [r5, #8] - ldr r0, [r5, #8] - ldr r0, _08051394 @ =gGameBoyPlayerEnabled - ldr r0, [r0] - cmp r0, #1 - beq _080512F8 - movs r4, #2 - str r4, [sp] - movs r0, #0x12 - movs r1, #4 - movs r2, #2 - movs r3, #1 - bl sub_1068C - str r4, [sp] - movs r0, #0x12 - movs r1, #5 - movs r2, #3 - movs r3, #2 - bl sub_1068C -_080512F8: - str r7, [r5] - mov r0, r8 - str r0, [r5, #4] - str r6, [r5, #8] - ldr r0, [r5, #8] - ldr r0, _08051398 @ =gUnknown_0852A048 - str r0, [r5] - ldr r0, _0805139C @ =0x06000800 - str r0, [r5, #4] - str r6, [r5, #8] - ldr r0, [r5, #8] - ldr r0, _080513A0 @ =gGBAButtonIcons_Pals - str r0, [r5] - ldr r0, _080513A4 @ =0x05000200 - str r0, [r5, #4] - ldr r0, _080513A8 @ =0x80000030 - str r0, [r5, #8] - ldr r0, [r5, #8] - ldr r0, _080513AC @ =gOptionsSprites_Gfx - str r0, [r5] - ldr r0, _080513B0 @ =0x06010000 - str r0, [r5, #4] - ldr r0, _080513B4 @ =0x80001010 - str r0, [r5, #8] - ldr r0, [r5, #8] - bl sub_513B8 - bl sub_51C9C - bl m4aMPlayAllStop - bl sub_CBC - bl sub_24C - bl sub_10C0 - mov r1, sb - ldrb r0, [r1, #3] - adds r0, #1 - strb r0, [r1, #3] - add sp, #4 - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_08051358: .4byte 0x04000008 -_0805135C: .4byte 0x0400000A -_08051360: .4byte gMain -_08051364: .4byte 0x040000D4 -_08051368: .4byte gUnknown_0852B468 -_0805136C: .4byte 0x80000100 -_08051370: .4byte gUnknown_08528828 -_08051374: .4byte 0x06004000 -_08051378: .4byte 0x80000C00 -_0805137C: .4byte gUnknown_0852A848 -_08051380: .4byte 0x06008000 -_08051384: .4byte 0x80000600 -_08051388: .4byte gUnknown_08528028 -_0805138C: .4byte gUnknown_03005C00 -_08051390: .4byte 0x80000400 -_08051394: .4byte gGameBoyPlayerEnabled -_08051398: .4byte gUnknown_0852A048 -_0805139C: .4byte 0x06000800 -_080513A0: .4byte gGBAButtonIcons_Pals -_080513A4: .4byte 0x05000200 -_080513A8: .4byte 0x80000030 -_080513AC: .4byte gOptionsSprites_Gfx -_080513B0: .4byte 0x06010000 -_080513B4: .4byte 0x80001010 - - thumb_func_start sub_513B8 -sub_513B8: @ 0x080513B8 - push {r4, r5, r6, lr} - ldr r0, _08051468 @ =gUnknown_02002920 - mov ip, r0 - movs r2, #0 - movs r1, #0 - strh r1, [r0] - strh r1, [r0, #2] - strh r1, [r0, #4] - movs r3, #1 - movs r0, #1 - mov r4, ip - strh r0, [r4, #6] - strh r1, [r4, #8] - strh r1, [r4, #0xa] - ldr r0, _0805146C @ =gMain+0x74 - adds r0, #0xcf - ldrb r0, [r0] - strh r0, [r4, #0xc] - strh r1, [r4, #0xe] - strh r1, [r4, #0x10] - strb r2, [r4, #0x12] - strb r2, [r4, #0x13] - strb r3, [r4, #0x14] - strb r2, [r4, #0x15] - strb r2, [r4, #0x16] - strb r3, [r4, #0x17] - strh r1, [r4, #0x18] - mov r2, ip - movs r3, #0 - movs r1, #5 - adds r0, r2, #0 - adds r0, #0x1f -_080513F8: - strb r3, [r0] - subs r0, #1 - subs r1, #1 - cmp r1, #0 - bge _080513F8 - movs r0, #0 - strh r0, [r2, #0x20] - strh r0, [r2, #0x22] - movs r3, #0xa - movs r1, #1 - adds r0, r2, #0 - adds r0, #0x26 -_08051410: - strh r3, [r0] - subs r0, #2 - subs r1, #1 - cmp r1, #0 - bge _08051410 - movs r0, #0 - strh r0, [r2, #0x28] - movs r1, #0 - ldr r6, _08051470 @ =gUnknown_02031AF0 - ldr r5, _08051474 @ =gUnknown_08527ED6 -_08051424: - adds r4, r1, #1 - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #1 - adds r2, r0, r5 - adds r1, r0, r6 - movs r3, #9 -_08051432: - ldrb r0, [r2] - strb r0, [r1] - adds r2, #1 - adds r1, #1 - subs r3, #1 - cmp r3, #0 - bge _08051432 - adds r1, r4, #0 - cmp r1, #3 - ble _08051424 - bl sub_52528 - ldr r0, _08051478 @ =gGameBoyPlayerEnabled - ldr r4, [r0] - cmp r4, #1 - bne _0805147C - ldr r3, _08051468 @ =gUnknown_02002920 - ldr r0, _0805146C @ =gMain+0x74 - adds r0, #0xcd - ldrb r1, [r0] - adds r2, r3, #0 - adds r2, #0x2a - strb r1, [r2] - strb r4, [r0] - adds r2, r3, #0 - b _0805148C - .align 2, 0 -_08051468: .4byte gUnknown_02002920 -_0805146C: .4byte gMain+0x74 -_08051470: .4byte gUnknown_02031AF0 -_08051474: .4byte gUnknown_08527ED6 -_08051478: .4byte gGameBoyPlayerEnabled -_0805147C: - ldr r2, _080514B0 @ =gUnknown_02002920 - adds r0, r2, #0 - adds r0, #0x2a - movs r1, #0 - strb r1, [r0] - ldr r0, _080514B4 @ =gMain+0x74 - adds r0, #0xcd - strb r1, [r0] -_0805148C: - adds r1, r2, #0 - adds r1, #0x2e - movs r0, #0 - strb r0, [r1] - subs r1, #3 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r1, #2 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - pop {r4, r5, r6} - pop {r0} - bx r0 - .align 2, 0 -_080514B0: .4byte gUnknown_02002920 -_080514B4: .4byte gMain+0x74 - - thumb_func_start sub_514B8 -sub_514B8: @ 0x080514B8 - push {r4, r5, r6, r7, lr} - bl sub_51C9C - ldr r0, _080514D4 @ =gUnknown_02002920 - movs r1, #0 - ldrsh r0, [r0, r1] - cmp r0, #4 - bls _080514CA - b _08051B98 -_080514CA: - lsls r0, r0, #2 - ldr r1, _080514D8 @ =_080514DC - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080514D4: .4byte gUnknown_02002920 -_080514D8: .4byte _080514DC -_080514DC: @ jump table - .4byte _080514F0 @ case 0 - .4byte _080517A8 @ case 1 - .4byte _080518D4 @ case 2 - .4byte _08051A08 @ case 3 - .4byte _08051AB8 @ case 4 -_080514F0: - ldr r0, _08051514 @ =gMain - ldrh r1, [r0, #0x18] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _0805152C - ldr r4, _08051518 @ =gUnknown_02002920 - movs r2, #0xa - ldrsh r0, [r4, r2] - cmp r0, #0xd - beq _0805156C - cmp r0, #0xe - bne _0805151C - movs r0, #0x67 - bl m4aSongNumStart - movs r0, #0xd - b _0805156A - .align 2, 0 -_08051514: .4byte gMain -_08051518: .4byte gUnknown_02002920 -_0805151C: - cmp r0, #0 - ble _0805156C - movs r0, #0x67 - bl m4aSongNumStart - ldrh r0, [r4, #0xa] - subs r0, #1 - b _0805156A -_0805152C: - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0805156C - ldr r4, _0805154C @ =gUnknown_02002920 - movs r3, #0xa - ldrsh r0, [r4, r3] - cmp r0, #5 - bgt _08051550 - movs r0, #0x67 - bl m4aSongNumStart - ldrh r0, [r4, #0xa] - adds r0, #1 - b _0805156A - .align 2, 0 -_0805154C: .4byte gUnknown_02002920 -_08051550: - cmp r0, #0xd - bne _0805155E - movs r0, #0x67 - bl m4aSongNumStart - movs r0, #0xe - b _0805156A -_0805155E: - cmp r0, #0xe - bne _0805156C - movs r0, #0x67 - bl m4aSongNumStart - movs r0, #2 -_0805156A: - strh r0, [r4, #0xa] -_0805156C: - ldr r0, _080515E8 @ =gMain - ldrh r1, [r0, #0x18] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _08051594 - ldr r0, _080515EC @ =gGameBoyPlayerEnabled - ldr r0, [r0] - cmp r0, #1 - bne _08051594 - ldr r4, _080515F0 @ =gUnknown_02002920 - ldrh r0, [r4, #0xa] - cmp r0, #1 - bhi _08051594 - movs r0, #0x67 - bl m4aSongNumStart - ldrh r0, [r4, #0xa] - adds r0, #0xd - strh r0, [r4, #0xa] -_08051594: - ldr r0, _080515E8 @ =gMain - ldrh r1, [r0, #0x18] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _080515C2 - ldr r0, _080515EC @ =gGameBoyPlayerEnabled - ldr r0, [r0] - cmp r0, #1 - bne _080515C2 - ldr r4, _080515F0 @ =gUnknown_02002920 - ldrh r0, [r4, #0xa] - subs r0, #0xd - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #1 - bhi _080515C2 - movs r0, #0x67 - bl m4aSongNumStart - ldrh r0, [r4, #0xa] - subs r0, #0xd - strh r0, [r4, #0xa] -_080515C2: - ldr r4, _080515E8 @ =gMain - ldrh r1, [r4, #0x18] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _080515D0 - b _0805177C -_080515D0: - ldr r0, _080515F0 @ =gUnknown_02002920 - movs r6, #0xa - ldrsh r0, [r0, r6] - cmp r0, #0xe - bls _080515DC - b _08051A96 -_080515DC: - lsls r0, r0, #2 - ldr r1, _080515F4 @ =_080515F8 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080515E8: .4byte gMain -_080515EC: .4byte gGameBoyPlayerEnabled -_080515F0: .4byte gUnknown_02002920 -_080515F4: .4byte _080515F8 -_080515F8: @ jump table - .4byte _08051634 @ case 0 - .4byte _08051674 @ case 1 - .4byte _080516B0 @ case 2 - .4byte _080516B0 @ case 3 - .4byte _080516B0 @ case 4 - .4byte _080516B0 @ case 5 - .4byte _080516D0 @ case 6 - .4byte _08051A96 @ case 7 - .4byte _08051A96 @ case 8 - .4byte _08051A96 @ case 9 - .4byte _08051A96 @ case 10 - .4byte _08051A96 @ case 11 - .4byte _08051A96 @ case 12 - .4byte _08051738 @ case 13 - .4byte _080516F8 @ case 14 -_08051634: - movs r0, #0x65 - bl m4aSongNumStart - ldr r3, _08051670 @ =gUnknown_02002920 - movs r4, #0 - movs r1, #0 - movs r2, #1 - movs r0, #1 - strh r0, [r3] - strh r1, [r3, #0x18] - adds r0, r3, #0 - adds r0, #0x30 - strb r2, [r0] - adds r1, r3, #0 - adds r1, #0x2e - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #1 - beq _0805165C - b _08051A96 -_0805165C: - adds r0, r3, #0 - adds r0, #0x2b - strb r4, [r0] - adds r0, #2 - strb r4, [r0] - subs r0, #1 - strb r4, [r0] - strb r4, [r1] - b _08051A96 - .align 2, 0 -_08051670: .4byte gUnknown_02002920 -_08051674: - movs r0, #0x65 - bl m4aSongNumStart - ldr r2, _080516AC @ =gUnknown_02002920 - movs r3, #0 - movs r1, #0 - movs r0, #2 - strh r0, [r2] - strh r1, [r2, #0x18] - adds r1, r2, #0 - adds r1, #0x30 - movs r0, #1 - strb r0, [r1] - subs r1, #2 - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #1 - beq _0805169A - b _08051A96 -_0805169A: - adds r0, r2, #0 - adds r0, #0x2b - strb r3, [r0] - adds r0, #2 - strb r3, [r0] - subs r0, #1 - strb r3, [r0] - strb r3, [r1] - b _08051A96 - .align 2, 0 -_080516AC: .4byte gUnknown_02002920 -_080516B0: - movs r0, #0x65 - bl m4aSongNumStart - ldr r0, _080516C8 @ =gUnknown_02002920 - ldrh r1, [r0, #0xa] - subs r1, #2 - strh r1, [r0, #0xc] - ldr r0, _080516CC @ =gMain+0x74 - adds r0, #0xcf - strb r1, [r0] - b _08051A96 - .align 2, 0 -_080516C8: .4byte gUnknown_02002920 -_080516CC: .4byte gMain+0x74 -_080516D0: - movs r0, #0x65 - bl m4aSongNumStart - ldr r2, _080516F0 @ =gUnknown_02002920 - ldrh r1, [r2, #0xa] - subs r1, #2 - strh r1, [r2, #0xc] - ldr r0, _080516F4 @ =gMain+0x74 - adds r0, #0xcf - strb r1, [r0] - movs r0, #7 - strh r0, [r2, #0xa] - movs r0, #3 - strh r0, [r2] - b _08051A96 - .align 2, 0 -_080516F0: .4byte gUnknown_02002920 -_080516F4: .4byte gMain+0x74 -_080516F8: - ldr r0, _08051730 @ =gGameBoyPlayerEnabled - ldr r0, [r0] - cmp r0, #1 - beq _08051702 - b _08051A96 -_08051702: - movs r0, #0x65 - bl m4aSongNumStart - ldr r1, _08051734 @ =gUnknown_02002920 - adds r0, r1, #0 - adds r0, #0x2d - movs r2, #0 - strb r2, [r0] - adds r3, r1, #0 - adds r3, #0x2e - movs r0, #0 - ldrsb r0, [r3, r0] - cmp r0, #1 - bne _08051720 - strb r2, [r3] -_08051720: - adds r0, r1, #0 - adds r0, #0x2b - strb r2, [r0] - adds r0, #1 - strb r2, [r0] - subs r0, #2 - strb r2, [r0] - b _08051A96 - .align 2, 0 -_08051730: .4byte gGameBoyPlayerEnabled -_08051734: .4byte gUnknown_02002920 -_08051738: - ldr r0, _08051774 @ =gGameBoyPlayerEnabled - ldr r4, [r0] - cmp r4, #1 - beq _08051742 - b _08051A96 -_08051742: - movs r0, #0x65 - bl m4aSongNumStart - movs r0, #0xb - bl sub_11B0 - ldr r2, _08051778 @ =gUnknown_02002920 - adds r1, r2, #0 - adds r1, #0x2e - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - bne _0805175E - strb r4, [r1] -_0805175E: - adds r1, r2, #0 - adds r1, #0x2b - movs r0, #0 - strb r0, [r1] - adds r1, #1 - strb r0, [r1] - adds r0, r2, #0 - adds r0, #0x2a - strb r4, [r0] - b _08051A96 - .align 2, 0 -_08051774: .4byte gGameBoyPlayerEnabled -_08051778: .4byte gUnknown_02002920 -_0805177C: - movs r0, #2 - ands r0, r1 - cmp r0, #0 - bne _08051786 - b _08051A96 -_08051786: - movs r0, #0x66 - bl m4aSongNumStart - ldrb r0, [r4, #3] - adds r0, #1 - strb r0, [r4, #3] - ldr r7, _080517A4 @ =0x00000143 - adds r0, r4, r7 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - bl sub_525CC - b _08051A96 - .align 2, 0 -_080517A4: .4byte 0x00000143 -_080517A8: - ldr r1, _080517C8 @ =gMain - ldrh r2, [r1, #0x1c] - movs r0, #0x20 - ands r0, r2 - adds r3, r1, #0 - cmp r0, #0 - beq _080517D0 - ldr r0, _080517CC @ =gUnknown_02002920 - movs r2, #0x18 - ldrsh r1, [r0, r2] - adds r4, r0, #0 - cmp r1, #0 - bne _080517EC - ldrh r0, [r4, #0xe] - subs r0, #1 - b _080517E6 - .align 2, 0 -_080517C8: .4byte gMain -_080517CC: .4byte gUnknown_02002920 -_080517D0: - movs r0, #0x10 - ands r0, r2 - ldr r4, _080517FC @ =gUnknown_02002920 - cmp r0, #0 - beq _080517EC - movs r6, #0x18 - ldrsh r0, [r4, r6] - cmp r0, #0 - bne _080517EC - ldrh r0, [r4, #0xe] - adds r0, #1 -_080517E6: - strh r0, [r4, #0xe] - movs r0, #0xa - strh r0, [r4, #0x18] -_080517EC: - ldrh r1, [r3, #0x18] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _08051800 - ldrh r0, [r4, #0xe] - adds r0, #0xa - b _0805180C - .align 2, 0 -_080517FC: .4byte gUnknown_02002920 -_08051800: - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0805180E - ldrh r0, [r4, #0xe] - subs r0, #0xa -_0805180C: - strh r0, [r4, #0xe] -_0805180E: - ldr r5, _08051880 @ =gUnknown_02002920 - movs r7, #0xe - ldrsh r0, [r5, r7] - cmp r0, #0 - bge _0805181C - movs r0, #0x21 - strh r0, [r5, #0xe] -_0805181C: - movs r1, #0xe - ldrsh r0, [r5, r1] - cmp r0, #0x21 - ble _08051828 - movs r0, #0 - strh r0, [r5, #0xe] -_08051828: - ldrh r4, [r5, #0xe] - adds r4, #1 - lsls r4, r4, #0x10 - asrs r4, r4, #0x10 - adds r0, r4, #0 - movs r1, #0x64 - bl __divsi3 - strb r0, [r5, #0x12] - adds r0, r4, #0 - movs r1, #0x64 - bl __modsi3 - adds r4, r0, #0 - lsls r4, r4, #0x10 - asrs r4, r4, #0x10 - adds r0, r4, #0 - movs r1, #0xa - bl __divsi3 - strb r0, [r5, #0x13] - adds r0, r4, #0 - movs r1, #0xa - bl __modsi3 - strb r0, [r5, #0x14] - ldr r0, _08051884 @ =gMain - ldrh r1, [r0, #0x18] - movs r4, #1 - ands r4, r1 - cmp r4, #0 - beq _0805188C - bl m4aMPlayAllStop - ldr r0, _08051888 @ =gUnknown_08527D22 - movs r2, #0xe - ldrsh r1, [r5, r2] - lsls r1, r1, #1 - adds r1, r1, r0 - ldrh r0, [r1] - bl m4aSongNumStart - b _080518AA - .align 2, 0 -_08051880: .4byte gUnknown_02002920 -_08051884: .4byte gMain -_08051888: .4byte gUnknown_08527D22 -_0805188C: - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _080518AA - bl m4aMPlayAllStop - movs r0, #0x66 - bl m4aSongNumStart - movs r1, #0 - strh r4, [r5, #4] - adds r0, r5, #0 - adds r0, #0x30 - strb r1, [r0] - strh r4, [r5] -_080518AA: - ldr r0, _080518CC @ =gMain - ldr r0, [r0, #0x4c] - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _080518C0 - ldr r2, _080518D0 @ =gUnknown_02002920 - ldrh r1, [r2, #4] - movs r0, #1 - subs r0, r0, r1 - strh r0, [r2, #4] -_080518C0: - ldr r1, _080518D0 @ =gUnknown_02002920 - ldrh r2, [r1, #0x18] - movs r3, #0x18 - ldrsh r0, [r1, r3] - b _080519F4 - .align 2, 0 -_080518CC: .4byte gMain -_080518D0: .4byte gUnknown_02002920 -_080518D4: - ldr r1, _080518F4 @ =gMain - ldrh r2, [r1, #0x1c] - movs r0, #0x20 - ands r0, r2 - adds r3, r1, #0 - cmp r0, #0 - beq _080518FC - ldr r0, _080518F8 @ =gUnknown_02002920 - movs r6, #0x18 - ldrsh r1, [r0, r6] - adds r4, r0, #0 - cmp r1, #0 - bne _08051918 - ldrh r0, [r4, #0x10] - subs r0, #1 - b _08051912 - .align 2, 0 -_080518F4: .4byte gMain -_080518F8: .4byte gUnknown_02002920 -_080518FC: - movs r0, #0x10 - ands r0, r2 - ldr r4, _08051928 @ =gUnknown_02002920 - cmp r0, #0 - beq _08051918 - movs r7, #0x18 - ldrsh r0, [r4, r7] - cmp r0, #0 - bne _08051918 - ldrh r0, [r4, #0x10] - adds r0, #1 -_08051912: - strh r0, [r4, #0x10] - movs r0, #0xa - strh r0, [r4, #0x18] -_08051918: - ldrh r1, [r3, #0x18] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _0805192C - ldrh r0, [r4, #0x10] - adds r0, #0xa - b _08051938 - .align 2, 0 -_08051928: .4byte gUnknown_02002920 -_0805192C: - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0805193A - ldrh r0, [r4, #0x10] - subs r0, #0xa -_08051938: - strh r0, [r4, #0x10] -_0805193A: - ldr r5, _080519AC @ =gUnknown_02002920 - movs r1, #0x10 - ldrsh r0, [r5, r1] - cmp r0, #0 - bge _08051948 - movs r0, #0xb7 - strh r0, [r5, #0x10] -_08051948: - movs r2, #0x10 - ldrsh r0, [r5, r2] - cmp r0, #0xb7 - ble _08051954 - movs r0, #0 - strh r0, [r5, #0x10] -_08051954: - ldrh r4, [r5, #0x10] - adds r4, #1 - lsls r4, r4, #0x10 - asrs r4, r4, #0x10 - adds r0, r4, #0 - movs r1, #0x64 - bl __divsi3 - strb r0, [r5, #0x15] - adds r0, r4, #0 - movs r1, #0x64 - bl __modsi3 - adds r4, r0, #0 - lsls r4, r4, #0x10 - asrs r4, r4, #0x10 - adds r0, r4, #0 - movs r1, #0xa - bl __divsi3 - strb r0, [r5, #0x16] - adds r0, r4, #0 - movs r1, #0xa - bl __modsi3 - strb r0, [r5, #0x17] - ldr r0, _080519B0 @ =gMain - ldrh r1, [r0, #0x18] - movs r4, #1 - ands r4, r1 - cmp r4, #0 - beq _080519B8 - bl m4aMPlayAllStop - ldr r0, _080519B4 @ =gUnknown_08527D66 - movs r3, #0x10 - ldrsh r1, [r5, r3] - lsls r1, r1, #1 - adds r1, r1, r0 - ldrh r0, [r1] - bl m4aSongNumStart - b _080519D6 - .align 2, 0 -_080519AC: .4byte gUnknown_02002920 -_080519B0: .4byte gMain -_080519B4: .4byte gUnknown_08527D66 -_080519B8: - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _080519D6 - bl m4aMPlayAllStop - movs r0, #0x66 - bl m4aSongNumStart - movs r1, #0 - strh r4, [r5, #4] - adds r0, r5, #0 - adds r0, #0x30 - strb r1, [r0] - strh r4, [r5] -_080519D6: - ldr r0, _08051A00 @ =gMain - ldr r0, [r0, #0x4c] - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _080519EC - ldr r2, _08051A04 @ =gUnknown_02002920 - ldrh r1, [r2, #4] - movs r0, #1 - subs r0, r0, r1 - strh r0, [r2, #4] -_080519EC: - ldr r1, _08051A04 @ =gUnknown_02002920 - ldrh r2, [r1, #0x18] - movs r6, #0x18 - ldrsh r0, [r1, r6] -_080519F4: - cmp r0, #0 - bgt _080519FA - b _08051B98 -_080519FA: - subs r0, r2, #1 - strh r0, [r1, #0x18] - b _08051B98 - .align 2, 0 -_08051A00: .4byte gMain -_08051A04: .4byte gUnknown_02002920 -_08051A08: - ldr r0, _08051A2C @ =gMain - ldrh r1, [r0, #0x18] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _08051A34 - ldr r4, _08051A30 @ =gUnknown_02002920 - movs r7, #0xa - ldrsh r0, [r4, r7] - cmp r0, #7 - ble _08051A52 - movs r0, #0x67 - bl m4aSongNumStart - ldrh r0, [r4, #0xa] - subs r0, #1 - b _08051A50 - .align 2, 0 -_08051A2C: .4byte gMain -_08051A30: .4byte gUnknown_02002920 -_08051A34: - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08051A52 - ldr r4, _08051A78 @ =gUnknown_02002920 - movs r1, #0xa - ldrsh r0, [r4, r1] - cmp r0, #0xa - bgt _08051A52 - movs r0, #0x67 - bl m4aSongNumStart - ldrh r0, [r4, #0xa] - adds r0, #1 -_08051A50: - strh r0, [r4, #0xa] -_08051A52: - ldr r0, _08051A7C @ =gMain - ldrh r1, [r0, #0x18] - movs r4, #1 - ands r4, r1 - cmp r4, #0 - beq _08051A80 - movs r0, #0x65 - bl m4aSongNumStart - ldr r0, _08051A78 @ =gUnknown_02002920 - movs r1, #4 - strh r1, [r0] - movs r2, #0xa - ldrsh r1, [r0, r2] - adds r0, r0, r1 - movs r1, #1 - strb r1, [r0, #0x13] - b _08051A96 - .align 2, 0 -_08051A78: .4byte gUnknown_02002920 -_08051A7C: .4byte gMain -_08051A80: - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08051A96 - movs r0, #0x66 - bl m4aSongNumStart - ldr r1, _08051AB0 @ =gUnknown_02002920 - movs r0, #6 - strh r0, [r1, #0xa] - strh r4, [r1] -_08051A96: - ldr r0, _08051AB4 @ =gMain - ldr r0, [r0, #0x4c] - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _08051B98 - ldr r2, _08051AB0 @ =gUnknown_02002920 - ldrh r1, [r2, #2] - movs r0, #1 - subs r0, r0, r1 - strh r0, [r2, #2] - b _08051B98 - .align 2, 0 -_08051AB0: .4byte gUnknown_02002920 -_08051AB4: .4byte gMain -_08051AB8: - ldr r4, _08051BF4 @ =gUnknown_02002920 - ldrh r0, [r4, #8] - adds r0, #1 - movs r5, #0 - strh r0, [r4, #8] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x18 - ble _08051AD4 - strh r5, [r4, #8] - ldrh r1, [r4, #6] - movs r0, #1 - subs r0, r0, r1 - strh r0, [r4, #6] -_08051AD4: - ldr r0, _08051BF8 @ =gMain - ldrh r1, [r0, #0x18] - ldr r0, _08051BFC @ =0x000003F7 - ands r0, r1 - cmp r0, #0 - beq _08051B0E - movs r0, #0x65 - bl m4aSongNumStart - movs r0, #0xa - strh r0, [r4, #0x20] - strh r5, [r4, #0x22] - movs r0, #0 - adds r3, r4, #0 - adds r3, #0x24 - movs r2, #0xa -_08051AF4: - lsls r1, r0, #0x10 - asrs r1, r1, #0x10 - lsls r0, r1, #1 - adds r0, r0, r3 - strh r2, [r0] - adds r1, #1 - lsls r1, r1, #0x10 - lsrs r0, r1, #0x10 - asrs r1, r1, #0x10 - cmp r1, #1 - ble _08051AF4 - movs r0, #0 - strh r0, [r4, #0x28] -_08051B0E: - ldr r4, _08051BF4 @ =gUnknown_02002920 - movs r3, #0x20 - ldrsh r0, [r4, r3] - cmp r0, #0 - ble _08051B98 - bl sub_524BC - ldrh r0, [r4, #0x20] - subs r0, #1 - strh r0, [r4, #0x20] - lsls r0, r0, #0x10 - asrs r5, r0, #0x10 - cmp r5, #0 - bne _08051B98 - ldr r2, _08051C00 @ =gUnknown_02031AF0 - movs r6, #0xa - ldrsh r0, [r4, r6] - subs r0, #7 - lsls r0, r0, #1 - adds r2, #0x28 - adds r0, r0, r2 - ldrh r1, [r4, #0x24] - strb r1, [r0] - movs r7, #0xa - ldrsh r0, [r4, r7] - subs r0, #7 - lsls r0, r0, #1 - adds r0, #1 - adds r0, r0, r2 - ldrh r1, [r4, #0x26] - strb r1, [r0] - ldr r2, _08051C04 @ =gMain+0x74 - movs r0, #0xa - ldrsh r1, [r4, r0] - subs r1, #7 - lsls r1, r1, #2 - adds r0, r2, #0 - adds r0, #0xd0 - adds r1, r1, r0 - ldr r3, _08051C08 @ =gUnknown_086BB910 - movs r6, #0x24 - ldrsh r0, [r4, r6] - lsls r0, r0, #3 - adds r0, r0, r3 - ldrh r0, [r0] - strh r0, [r1] - movs r7, #0xa - ldrsh r1, [r4, r7] - subs r1, #7 - lsls r1, r1, #2 - adds r2, #0xd2 - adds r1, r1, r2 - movs r2, #0x26 - ldrsh r0, [r4, r2] - lsls r0, r0, #3 - adds r0, r0, r3 - ldrh r0, [r0] - strh r0, [r1] - movs r0, #3 - strh r0, [r4] - movs r3, #0xa - ldrsh r0, [r4, r3] - adds r0, r4, r0 - adds r0, #0x13 - movs r1, #0 - strb r1, [r0] - strh r5, [r4, #8] - movs r0, #1 - strh r0, [r4, #6] -_08051B98: - ldr r2, _08051BF4 @ =gUnknown_02002920 - movs r6, #0x2e - adds r6, r6, r2 - mov ip, r6 - movs r0, #0 - ldrsb r0, [r6, r0] - cmp r0, #1 - bne _08051C10 - adds r4, r2, #0 - adds r4, #0x2b - ldrb r0, [r4] - adds r0, #1 - movs r5, #0 - strb r0, [r4] - lsls r0, r0, #0x18 - ldr r6, _08051C0C @ =gUnknown_086BB9B4 - adds r3, r2, #0 - adds r3, #0x2c - movs r1, #0 - ldrsb r1, [r3, r1] - lsls r1, r1, #2 - adds r1, r1, r6 - asrs r0, r0, #0x18 - movs r7, #2 - ldrsh r1, [r1, r7] - cmp r0, r1 - ble _08051C30 - strb r5, [r4] - ldrb r0, [r3] - adds r0, #1 - strb r0, [r3] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r2, #0x2d - cmp r0, #0xc - ble _08051BE8 - strb r5, [r3] - strb r5, [r2] - mov r0, ip - strb r5, [r0] -_08051BE8: - movs r0, #0 - ldrsb r0, [r3, r0] - lsls r0, r0, #2 - adds r0, r0, r6 - ldrb r0, [r0] - b _08051C2E - .align 2, 0 -_08051BF4: .4byte gUnknown_02002920 -_08051BF8: .4byte gMain -_08051BFC: .4byte 0x000003F7 -_08051C00: .4byte gUnknown_02031AF0 -_08051C04: .4byte gMain+0x74 -_08051C08: .4byte gUnknown_086BB910 -_08051C0C: .4byte gUnknown_086BB9B4 -_08051C10: - adds r1, r2, #0 - adds r1, #0x2b - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0x12 - ble _08051C30 - movs r0, #0 - strb r0, [r1] - adds r2, #0x2d - ldrb r1, [r2] - movs r0, #1 - subs r0, r0, r1 -_08051C2E: - strb r0, [r2] -_08051C30: - bl sub_11FC - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - - thumb_func_start sub_51C3C -sub_51C3C: @ 0x08051C3C - push {lr} - bl sub_111C - bl sub_1170 - cmp r0, #0 - beq _08051C56 - bl sub_1198 - ldr r1, _08051C5C @ =gMain - ldrb r0, [r1, #3] - adds r0, #1 - strb r0, [r1, #3] -_08051C56: - pop {r0} - bx r0 - .align 2, 0 -_08051C5C: .4byte gMain - - thumb_func_start sub_51C60 -sub_51C60: @ 0x08051C60 - push {lr} - ldr r1, _08051C90 @ =gMain+0x74 - ldr r0, _08051C94 @ =gUnknown_02002920 - adds r0, #0x2a - ldrb r0, [r0] - adds r1, #0xcd - strb r0, [r1] - bl sub_52B30 - bl sub_2B4 - bl m4aMPlayAllStop - bl sub_D10 - ldr r1, _08051C98 @ =gAutoDisplayTitlescreenMenu - movs r0, #1 - strb r0, [r1] - movs r0, #1 - bl SetMainGameState - pop {r0} - bx r0 - .align 2, 0 -_08051C90: .4byte gMain+0x74 -_08051C94: .4byte gUnknown_02002920 -_08051C98: .4byte gAutoDisplayTitlescreenMenu - thumb_func_start sub_51C9C sub_51C9C: @ 0x08051C9C push {r4, r5, r6, r7, lr} @@ -1296,7 +14,7 @@ sub_51C9C: @ 0x08051C9C sub sp, #0x8c ldr r0, _08051D38 @ =gUnknown_0200B3B8 mov r8, r0 - ldr r2, _08051D3C @ =gUnknown_02002920 + ldr r2, _08051D3C @ =gOptionsData movs r3, #4 ldrsh r1, [r2, r3] movs r0, #0xe6 @@ -1360,7 +78,7 @@ _08051D1E: ldrb r0, [r0] cmp r0, #1 bne _08051D50 - ldr r6, _08051D3C @ =gUnknown_02002920 + ldr r6, _08051D3C @ =gOptionsData movs r7, #6 ldrsh r0, [r6, r7] cmp r0, #1 @@ -1370,7 +88,7 @@ _08051D1E: b _08051D52 .align 2, 0 _08051D38: .4byte gUnknown_0200B3B8 -_08051D3C: .4byte gUnknown_02002920 +_08051D3C: .4byte gOptionsData _08051D40: .4byte gUnknown_0200B978 _08051D44: .4byte gUnknown_0200BAE8 _08051D48: .4byte gUnknown_0200293A @@ -1460,7 +178,7 @@ _08051DCE: strh r0, [r6] ldr r7, _08051F6C @ =gUnknown_0200C948 strh r0, [r7] - ldr r5, _08051F70 @ =gUnknown_02002920 + ldr r5, _08051F70 @ =gOptionsData adds r0, r5, #0 adds r0, #0x30 ldrb r0, [r0] @@ -1639,7 +357,7 @@ _08051EE2: movs r0, #0x48 ldr r6, [sp, #0x60] strh r0, [r6, #2] - ldr r7, _08051F70 @ =gUnknown_02002920 + ldr r7, _08051F70 @ =gOptionsData movs r1, #0xa ldrsh r0, [r7, r1] cmp r0, #0 @@ -1651,7 +369,7 @@ _08051EE2: _08051F64: .4byte gUnknown_0200C890 _08051F68: .4byte gUnknown_0200B978 _08051F6C: .4byte gUnknown_0200C948 -_08051F70: .4byte gUnknown_02002920 +_08051F70: .4byte gOptionsData _08051F74: .4byte gUnknown_0200CA00 _08051F78: .4byte gUnknown_086BB9EC _08051F7C: .4byte gUnknown_0200B3B8 @@ -1711,7 +429,7 @@ _08051FB2: movs r0, #0x48 ldr r2, _080520DC @ =gUnknown_0200B978 strh r0, [r2, #2] - ldr r3, _080520E0 @ =gUnknown_02002920 + ldr r3, _080520E0 @ =gOptionsData movs r4, #0xc ldrsh r0, [r3, r4] lsls r0, r0, #1 @@ -1744,7 +462,7 @@ _08051FB2: strb r0, [r1] movs r7, #0 mov ip, r7 - ldr r0, _080520E0 @ =gUnknown_02002920 + ldr r0, _080520E0 @ =gOptionsData str r0, [sp, #0x68] movs r1, #0x54 str r1, [sp, #0x80] @@ -1827,7 +545,7 @@ _080520D0: .4byte gOamBuffer _080520D4: .4byte 0xFFFFFE00 _080520D8: .4byte 0x000001FF _080520DC: .4byte gUnknown_0200B978 -_080520E0: .4byte gUnknown_02002920 +_080520E0: .4byte gOptionsData _080520E4: .4byte gUnknown_086BB9A8 _080520E8: mov r2, r8 @@ -2107,7 +825,7 @@ _08052304: movs r0, #0xaa ldr r2, [sp, #0x64] strh r0, [r2, #2] - ldr r0, _080524AC @ =gUnknown_02002920 + ldr r0, _080524AC @ =gOptionsData adds r0, #0x2a ldrb r0, [r0] lsls r1, r0, #1 @@ -2146,7 +864,7 @@ _08052304: ldr r3, _080524B0 @ =gUnknown_0200C948 strh r0, [r3, #2] strh r5, [r3, #4] - ldr r6, _080524AC @ =gUnknown_02002920 + ldr r6, _080524AC @ =gOptionsData adds r6, #0x2d mov sl, r6 adds r5, r3, #0 @@ -2223,7 +941,7 @@ _0805236C: lsls r2, r2, #3 ldr r3, _08052494 @ =gOamBuffer adds r2, r2, r3 - ldr r5, _080524AC @ =gUnknown_02002920 + ldr r5, _080524AC @ =gOptionsData adds r5, #0x2f movs r1, #0 ldrsb r1, [r5, r1] @@ -2312,7 +1030,7 @@ _0805249C: .4byte 0x000003FF _080524A0: .4byte 0xFFFFFC00 _080524A4: .4byte 0x000001FF _080524A8: .4byte 0xFFFFFE00 -_080524AC: .4byte gUnknown_02002920 +_080524AC: .4byte gOptionsData _080524B0: .4byte gUnknown_0200C948 _080524B4: .4byte gUnknown_0200CA00 _080524B8: .4byte gMain @@ -2320,7 +1038,7 @@ _080524B8: .4byte gMain thumb_func_start sub_524BC sub_524BC: @ 0x080524BC push {r4, r5, lr} - ldr r1, _0805251C @ =gUnknown_02002920 + ldr r1, _0805251C @ =gOptionsData movs r2, #0x28 ldrsh r0, [r1, r2] adds r2, r1, #0 @@ -2370,7 +1088,7 @@ _08052514: pop {r0} bx r0 .align 2, 0 -_0805251C: .4byte gUnknown_02002920 +_0805251C: .4byte gOptionsData _08052520: .4byte gMain _08052524: .4byte 0x000003F7 diff --git a/asm/pokedex.s b/asm/pokedex.s index 9980236..8aaa2c7 100755 --- a/asm/pokedex.s +++ b/asm/pokedex.s @@ -27,7 +27,7 @@ sub_3DCC: @ 0x08003DCC mov r6, sb mov r5, r8 push {r5, r6, r7} - bl sub_438 + bl ResetSomeGraphicsRelatedStuff movs r2, #0x80 lsls r2, r2, #0x13 movs r1, #0x86 @@ -1684,7 +1684,7 @@ _08004C2A: adds r2, #1 cmp r2, #0xcc ble _08004C2A - bl sub_52B30 + bl SaveFile_WriteToSram bl sub_2B4 bl m4aMPlayAllStop bl sub_D10 @@ -1760,7 +1760,7 @@ _08004CC2: movs r0, #1 mov r1, ip strh r0, [r1] - bl sub_52B30 + bl SaveFile_WriteToSram bl sub_2B4 bl m4aMPlayAllStop bl sub_D10 diff --git a/asm/rom_11B9C.s b/asm/rom_11B9C.s index ca2c4c6..d5b362d 100755 --- a/asm/rom_11B9C.s +++ b/asm/rom_11B9C.s @@ -35770,7 +35770,7 @@ _08023B36: movs r4, #0 ldrsh r0, [r0, r4] movs r1, #1 - bl sub_52BB0 + bl SaveFile_SetPokedexFlags _08023B66: ldr r5, _08023C94 @ =gUnknown_020314E0 ldr r0, [r5] @@ -44250,7 +44250,7 @@ _08028040: movs r2, #0 ldrsh r0, [r0, r2] movs r1, #1 - bl sub_52BB0 + bl SaveFile_SetPokedexFlags _08028060: ldr r0, _08028070 @ =gUnknown_020314E0 ldr r1, [r0] @@ -60704,7 +60704,7 @@ _0803062E: movs r2, #0 ldrsh r0, [r0, r2] movs r1, #1 - bl sub_52BB0 + bl SaveFile_SetPokedexFlags _0803065E: ldr r5, _08030784 @ =gUnknown_020314E0 ldr r0, [r5] @@ -63561,7 +63561,7 @@ sub_31CF8: @ 0x08031CF8 movs r2, #0 ldrsh r0, [r0, r2] movs r1, #4 - bl sub_52BB0 + bl SaveFile_SetPokedexFlags _08031D20: ldr r2, _08031D88 @ =gUnknown_086A3700 ldr r1, _08031D84 @ =gUnknown_020314E0 @@ -63757,7 +63757,7 @@ _08031E7C: beq _08031E94 movs r0, #0x2b movs r1, #4 - bl sub_52BB0 + bl SaveFile_SetPokedexFlags _08031E94: mov r2, r8 ldr r0, [r2] @@ -63789,7 +63789,7 @@ _08031EB4: movs r1, #0 ldrsh r0, [r0, r1] movs r1, #4 - bl sub_52BB0 + bl SaveFile_SetPokedexFlags _08031ECE: ldr r2, _08031F1C @ =gUnknown_086A3700 ldr r1, _08031F20 @ =gUnknown_020314E0 diff --git a/asm/rom_3219C.s b/asm/rom_3219C.s index 78f972d..e88ef82 100755 --- a/asm/rom_3219C.s +++ b/asm/rom_3219C.s @@ -5595,7 +5595,7 @@ _08035170: .align 2, 0 _08035194: .4byte gMain _08035198: - bl sub_438 + bl ResetSomeGraphicsRelatedStuff ldr r0, [r5] strb r4, [r0, #0x1d] _080351A0: @@ -46258,7 +46258,7 @@ _08049EFA: ldr r1, _08049F1C @ =gUnknown_020314E0 ldr r0, _08049F20 @ =gUnknown_02000000 str r0, [r1] - bl sub_438 + bl ResetSomeGraphicsRelatedStuff ldr r1, _08049F18 @ =gMain movs r0, #0 strb r0, [r1, #0xe] diff --git a/asm/rom_9BC.s b/asm/rom_9BC.s index 12970f6..fc9c5bc 100755 --- a/asm/rom_9BC.s +++ b/asm/rom_9BC.s @@ -620,9 +620,9 @@ sub_1884: @ 0x08001884 mov r1, r8 strh r0, [r1] ldr r0, _08001960 @ =sub_19CC + 1 - bl sub_898 + bl SetMainCallback ldr r0, _08001964 @ =sub_1A78 + 1 - bl sub_8D4 + bl SetVBlankIntrFunc strh r4, [r5] ldrh r0, [r6] movs r1, #0x80 @@ -2250,8 +2250,8 @@ sub_2568: @ 0x08002568 ldr r4, _08002594 @ =0x04000208 movs r0, #0 strh r0, [r4] - bl sub_8BC - bl sub_8FC + bl ResetMainCallback + bl ResetVBlankIntrFunc ldr r1, _08002598 @ =0x04000200 ldr r2, _0800259C @ =0x00002005 adds r0, r2, #0 @@ -699,7 +699,7 @@ gUnknown_0805C8E0:: @ 0x0805C8E0 gUnknown_0805C8F6:: @ 0x0805C8F6 .incbin "baserom.gba", 0x5C8F6, 0x1C9CA -gUnknown_080792C0:: @ 0x080792C0 +gFieldSelectStateFuncs:: @ 0x080792C0 .incbin "baserom.gba", 0x792C0, 0xC gUnknown_080792CC:: @ 0x080792CC @@ -2008,7 +2008,7 @@ gUnknown_086A4A38:: @ 0x086A4A38 gIntrTableTemplate:: @ 0x086A4AA0 .4byte SerialIntr .4byte Timer3Intr - .4byte HBlankIntr + .4byte VBlankIntr .4byte IntrDummy .4byte VCountIntr .4byte IntrDummy diff --git a/include/agb_sram.h b/include/agb_sram.h index c609417..fe1ea85 100644 --- a/include/agb_sram.h +++ b/include/agb_sram.h @@ -1,10 +1,12 @@ #ifndef GUARD_AGB_SRAM_H #define GUARD_AGB_SRAM_H +#define SRAM 0x0E000000 + void SetSramFastFunc(void); void WriteSramFast(const u8 *src, u8 *dest, u32 size); extern void (*ReadSramFast)(const u8 *src, u8 *dest, u32 size); extern u32 (*VerifySramFast)(const u8 *src, u8 *dest, u32 size); u32 WriteAndVerifySramFast(const u8 *src, u8 *dest, u32 size); -#endif // GUARD_AGB_SRAM_H
\ No newline at end of file +#endif // GUARD_AGB_SRAM_H diff --git a/include/functions.h b/include/functions.h index 0606057..9179ff2 100644 --- a/include/functions.h +++ b/include/functions.h @@ -20,7 +20,7 @@ void sub_1340(void); void AgbMain(void); void sub_9BC_Main(void); -void HBlankIntr(void); +void VBlankIntr(void); void VCountIntr(void); void SerialIntr(void); void Timer3Intr(void); @@ -31,8 +31,8 @@ s16 sub_C24(u16 arg0); s16 sub_C74(u16 arg0); void sub_CBC(void); void sub_D10(void); -void sub_D74(void); -void sub_DC4(void); +void MainLoopIter(void); +void DefaultMainCallback(void); // src/rom_3219C.c @@ -41,13 +41,13 @@ void sub_3219C(void); // src/rom_850.c -u16 sub_850(void); -void sub_898(void (*func)(void)); -void sub_8BC(void); -void sub_8D4(void (*func)(void)); -void sub_8FC(void); -void sub_918(void (*func)(void)); -void sub_940(void); +u16 IsInVblank(void); +void SetMainCallback(void (*func)(void)); +void ResetMainCallback(void); +void SetVBlankIntrFunc(void (*func)(void)); +void ResetVBlankIntrFunc(void); +void SetVCountIntrFunc(void (*func)(void)); +void ResetVCountIntrFunc(void); // src/titlescreen.c @@ -72,10 +72,10 @@ void SetMainGameState(u16 mainState); void sub_24C(void); void sub_2B4(void); s16 LoadSpriteSets(const struct SpriteSet *const *spriteSets, u16 numSpriteSets, struct SpriteGroup *spriteGroups); -void sub_438(void); -void sub_490(void); +void ResetSomeGraphicsRelatedStuff(void); +void ClearGraphicsMemory(void); void sub_518(void); -void sub_578(void); +void ClearSprites(void); void sub_678(u8 *arg0, s16 arg1, s16 arg2); void SetMatrixScale(s16 xScale, s16 yScale, s16 matrixNum); @@ -330,14 +330,14 @@ extern void sub_1050C(void); //extern ? OptionsMain(); //extern ? sub_51240(); -//extern ? sub_513B8(); +extern void sub_513B8(void); //extern ? sub_514B8(); //extern ? sub_51C3C(); //extern ? sub_51C60(); -//extern ? sub_51C9C(); -//extern ? sub_524BC(); -//extern ? sub_52528(); -//extern ? sub_525CC(); +extern void sub_51C9C(void); +extern void sub_524BC(void); +extern void sub_52528(void); +extern void sub_525CC(s8); // asm/pokedex.s @@ -388,12 +388,12 @@ extern void sub_8ABC(void); // asm/rom_1068C.s -//extern ? sub_1068C(); +void sub_1068C(int, int, int, int, u16); extern void sub_10708(void *volatile, void *volatile, s16, s16); //extern ? sub_10750(); //extern ? sub_10798(); //extern ? sub_10860(); -extern void sub_1090C(void); +extern void ClearSomeArray(void); // asm/rom_11B9C.s @@ -775,11 +775,11 @@ extern void sub_1090C(void); //extern ? sub_528DC(); //extern ? sub_5291C(); //extern ? sub_52940(); -extern void sub_52A18(void); -//extern ? sub_52A68(); -extern void sub_52B30(void); -//extern ? sub_52BB0(); -extern void sub_52C44(void); +extern void SaveFile_LoadGameData(void); +//extern ? LoadSaveDataFromSram(); +extern void SaveFile_WriteToSram(void); +//extern ? SaveFile_SetPokedexFlags(); +extern void SaveFile_ReadSavedGamePresent(void); extern void sub_52C64(void); // asm/rom_9BC.s @@ -830,4 +830,4 @@ extern void sub_1175C(void); extern void sub_11968(void); extern void sub_11B74(void); -#endif // GUARD_FUNCTIONS_H
\ No newline at end of file +#endif // GUARD_FUNCTIONS_H diff --git a/include/global.h b/include/global.h index 2a9b072..a42f1aa 100755 --- a/include/global.h +++ b/include/global.h @@ -63,6 +63,22 @@ #define min(a, b) ((a) < (b) ? (a) : (b)) #define max(a, b) ((a) >= (b) ? (a) : (b)) +enum +{ + STATE_INTRO, + STATE_TITLE, + STATE_GAME_MAIN, + STATE_GAME_IDLE, + STATE_OPTIONS, + STATE_POKEDEX, + STATE_UNKNOWN6, + STATE_EREADER, + STATE_SCORES_MAIN, + STATE_SCORES_IDLE, + STATE_FIELD_SELECT, + STATE_BONUS_FIELD_SELECT, +}; + struct PinballGame { /*0x000*/ u8 filler0[0x35]; diff --git a/include/main.h b/include/main.h index 3e0c744..f37dd24 100755 --- a/include/main.h +++ b/include/main.h @@ -9,11 +9,11 @@ struct SaveData /*0x74*/ u8 pokedexFlags[204]; /*0x140*/ u8 filler140[1]; /*0x141*/ u8 unk141; - /*0x142*/ u8 unk142; + /*0x142*/ u8 ballSpeed; /*0x143*/ u8 unk143; - /*0x144*/ u8 filler144[0x2D8-0x144]; - s8 signature[10]; - u16 unk2E2; + /*0x144*/ u16 unk144[0x65][2]; + /*0x2D8*/ s8 signature[10]; + u16 checksum; u32 unk2E4; }; @@ -23,7 +23,8 @@ struct Main /*0x02*/ u8 mainState; /*0x03*/ u8 subState; /*0x04*/ u8 unk4; - /*0x05*/ u8 filler5[0x2]; + /*0x05*/ u8 unk5; + /*0x06*/ u8 unk6; /*0x07*/ s8 unk7; /*0x08*/ s8 unk8; /*0x09*/ u8 filler9[0x3]; @@ -57,22 +58,25 @@ struct Main /*0x40*/ int hasSavedGame; /*0x44*/ u8 filler44[0x4]; /*0x48*/ int rngValue; - /*0x4C*/ int unk4C; + /*0x4C*/ int frameCount; /*0x50*/ int unk50; /*0x54*/ u8 filler54[0x20]; + + // This field must be accessed using the following macro to produce matching code. +#define gMain_saveData (*(struct SaveData *)(&gMain.saveData)) /*0x74*/ struct SaveData saveData; + /*0x2E8*/ struct MainUnk2E8 unk2E8[4]; /*0x2F8*/ struct SpriteGroup spriteGroups[NUM_SPRITE_GROUPS]; }; extern struct Main gMain; -extern u8 gUnknown_0200B134[]; extern struct SpriteGroup gUnknown_0200B3B8[]; extern u32 IntrMain_Buffer[0x200]; extern u32 IntrMain[]; -extern IntrFunc *gUnknown_0200FB98; -extern IntrFunc *gUnknown_02019BE0; +extern IntrFunc *gVBlankIntrFuncPtr; +extern IntrFunc *gVCountIntrFuncPtr; extern int gUnknown_02019BE4; extern int gUnknown_02019BE8; extern int gUnknown_02019BEC; @@ -88,7 +92,7 @@ extern u8 gUnknown_02019C10; extern u8 gUnknown_02002008[]; #define INTR_COUNT 14 extern IntrFunc gIntrTable[14]; -extern void (*gUnknown_0200FB9C)(void); +extern void (*gMainCallback)(void); extern void (*gUnknown_0200FBA0)(void); extern void (*gUnknown_02017BD0)(void); extern void (*gUnknown_02017BD4)(void); @@ -97,18 +101,18 @@ extern struct OamData gOamBuffer[128]; void sub_24C(void); void sub_2B4(void); -void sub_490(void); +void ClearGraphicsMemory(void); void sub_518(void); -void sub_578(void); +void ClearSprites(void); u32 Random(void); -void HBlankIntr(void); +void VBlankIntr(void); void VCountIntr(void); void SerialIntr(void); void Timer3Intr(void); void sub_CBC(void); void sub_D10(void); -void sub_D74(void); -void sub_DC4(void); +void MainLoopIter(void); +void DefaultMainCallback(void); #endif // GUARD_MAIN_H diff --git a/include/variables.h b/include/variables.h index 590ae00..3cc1efd 100644 --- a/include/variables.h +++ b/include/variables.h @@ -3,6 +3,19 @@ // Place all external variable declarations in this file +extern struct {u16 unk0[5]; u16 unkA[5];} gUnknown_086A6B14; +extern s8 gUnknown_02002850; +extern struct ToneData gUnknown_08532D6C[]; +extern struct ToneData gUnknown_08533360[]; +extern struct ToneData gUnknown_08533960[]; +extern struct ToneData gUnknown_08533F60[]; +extern u16 gUnknown_08527D22[]; +extern u16 gUnknown_086BB910[][4]; +extern struct {u8 unk0; s16 unk2;} gUnknown_086BB9B4[]; +extern u16 gUnknown_08527D66[]; +extern u8 gUnknown_02031AF0[][10]; +extern u8 gUnknown_08527ED6[][10]; +extern void (*const gUnknown_08527F08[])(void); extern u16 gUnknown_0201A520[]; extern u16 gUnknown_0201AD20[]; extern u32 gUnknown_0201A500[]; @@ -26,15 +39,14 @@ extern u8 gUnknown_02002808[]; //extern ? gUnknown_02002958; //extern ? gIntrTable; //extern ? gMain; -//extern ? gMain+0x74; //extern ? gUnknown_0200B3B8; -//extern ? gUnknown_0200FB98; -//extern ? gUnknown_0200FB9C; +//extern ? gVBlankIntrFuncPtr; +//extern ? gMainCallback; //extern ? gUnknown_0200FBA0; //extern ? gUnknown_02017BD0; //extern ? gUnknown_02017BD4; //extern ? gUnknown_02017BE0; -//extern ? gUnknown_02019BE0; +//extern ? gVCountIntrFuncPtr; //extern ? gUnknown_02019BE4; //extern ? gUnknown_02019BE8; //extern ? gUnknown_02019BEC; @@ -116,15 +128,19 @@ extern const s16 gEReaderAccessButtonSequence[]; //extern ? gMonHatchSpriteGroup3_Gfx; //extern ? gMonHatchSpriteGroup4_Gfx; //extern ? gMonHatchSpriteGroup5_Gfx; -//extern ? gFieldSelectWindow_Gfx; +extern struct Coord16 gUnknown_086A6B28[]; +extern const struct SpriteSet *const gUnknown_086A6AD4[]; +extern void (*gFieldSelectStateFuncs[])(void); +extern u8 gUnknown_080A2400[]; +extern u8 gFieldSelectWindow_Gfx[]; //extern ? gUnknown_080A4000; -//extern ? gFieldSelectFrameShadowTilemap; -//extern ? gFieldSelectMiniFields_Gfx; +extern u8 gFieldSelectFrameShadowTilemap[]; +extern u8 gFieldSelectMiniFields_Gfx[]; //extern ? gUnknown_080A8020; -//extern ? gFieldSelectWindowTilemap; -//extern ? gFieldSelectBGPals; -//extern ? gFieldSelectSpritePals; -//extern ? gFieldSelectSpriteGfx; +extern u8 gFieldSelectWindowTilemap[]; +extern u16 gFieldSelectBGPals[]; +extern u16 gFieldSelectSpritePals[]; +extern u8 gFieldSelectSpriteGfx[]; extern const u8 gTitlescreenBgTilemap[]; extern const u16 gTitlescreenBg_Pals[]; extern const u8 gTitlescreenBg_Gfx[]; @@ -172,4 +188,4 @@ extern struct Coord16 gUnknown_086A9694[]; extern struct Coord16 gUnknown_086A96AC[]; extern struct Coord16 gUnknown_086A96C0[]; -#endif // GUARD_VARIABLES_H
\ No newline at end of file +#endif // GUARD_VARIABLES_H diff --git a/ld_script.txt b/ld_script.txt index 56aef78..63a834d 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -37,7 +37,7 @@ SECTIONS asm/bonus_field_select.o(.text); asm/ereader.o(.text); asm/pokedex.o(.text); - asm/field_select.o(.text); + src/field_select.o(.text); asm/intro.o(.text); asm/high_scores.o(.text); src/rom_1068C.o(.text); @@ -45,6 +45,7 @@ SECTIONS asm/rom_11B9C.o(.text); src/rom_3219C.o(.text); asm/rom_3219C.o(.text); + src/options.o(.text); asm/options.o(.text); src/rom_528AC.o(.text); asm/m4a_1.o(.text); diff --git a/src/field_select.c b/src/field_select.c new file mode 100644 index 0000000..ea6acba --- /dev/null +++ b/src/field_select.c @@ -0,0 +1,374 @@ +#include "global.h" +#include "main.h" +#include "m4a.h" +#include "titlescreen.h" + +enum +{ + FIELD_RUBY, + FIELD_SAPPHIRE, +}; + +static void sub_8F94(void); +static void sub_8C38(void); + +struct FieldSelectData +{ + u16 unk0; + u16 unk2; + u16 unk4; + u16 unk6; + u16 selectedField; + u16 state; + s16 unkC; + s16 unkE; + u8 ballSpeed; + s16 unk12; + s8 unk14; + u16 nextMainState; +}; + +extern struct FieldSelectData gFieldSelectData; + +void FieldSelectMain(void) +{ + gFieldSelectStateFuncs[gMain.subState](); +} + +void LoadFieldSelectGraphics(void) +{ + ResetSomeGraphicsRelatedStuff(); + + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_FORCED_BLANK | DISPCNT_OBJ_ON; + + REG_BG0CNT = BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(0) | BGCNT_PRIORITY(0) | BGCNT_TXT256x256; + REG_DISPCNT |= DISPCNT_BG0_ON; + + REG_BG1CNT = BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(1) | BGCNT_PRIORITY(1) | BGCNT_TXT256x256; + REG_DISPCNT |= DISPCNT_BG1_ON; + + REG_BG2CNT = BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(2) | BGCNT_PRIORITY(2) | BGCNT_TXT256x256; + REG_DISPCNT |= DISPCNT_BG2_ON; + + gMain.unk16 = REG_DISPCNT; + + DmaCopy16(3, gFieldSelectBGPals, (void *)(PLTT), 0x200); + DmaCopy16(3, gFieldSelectWindow_Gfx, (void *)(VRAM + 0x4000), 0x1400); + DmaCopy16(3, gFieldSelectMiniFields_Gfx, (void *)(VRAM + 0x8000), 0x3800); + DmaCopy16(3, gUnknown_080A2400, (void *)(VRAM), 0x800); + DmaCopy16(3, gFieldSelectFrameShadowTilemap, (void *)(VRAM + 0x800), 0x800); + DmaCopy16(3, gFieldSelectWindowTilemap, (void *)(VRAM + 0x1000), 0x800); + DmaCopy16(3, gFieldSelectSpritePals, (void *)(PLTT + 0x200), 0x200); + DmaCopy16(3, gFieldSelectSpriteGfx, (void *)(VRAM + 0x10000), 0x4020); + + sub_CBC(); + sub_8C38(); + sub_FD5C(sub_8F94); + gMain.subState++; + m4aSongNumStart(3); +} + +static void sub_8C38(void) +{ + gFieldSelectData.unk0 = 2; + gFieldSelectData.unk2 = 3; + gFieldSelectData.unk4 = 0; + gFieldSelectData.unk6 = 1; + gFieldSelectData.selectedField = FIELD_RUBY; + gFieldSelectData.state = 0; + gFieldSelectData.unkC = 0; + gFieldSelectData.unkE = 0; + gFieldSelectData.nextMainState = STATE_INTRO; + gFieldSelectData.unk12 = 0; + gFieldSelectData.unk14 = 0; + + gFieldSelectData.ballSpeed = gMain_saveData.ballSpeed; + gMain.unk4 = 0; + gUnknown_02002850 = 0; +} + +void sub_8C7C(void) +{ + sub_8F94(); + if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) == (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) + { + gUnknown_02002850 = 1; + gFieldSelectData.nextMainState = STATE_INTRO; + gMain.subState++; + } + if (gUnknown_02002850 == 0) + { + switch (gFieldSelectData.state) + { + case 0: + if (gMain.newKeys & DPAD_LEFT) + { + if (gFieldSelectData.selectedField == FIELD_SAPPHIRE) + { + m4aSongNumStart(0x6D); + gFieldSelectData.selectedField = FIELD_RUBY; + gFieldSelectData.unk4 = 0; + gFieldSelectData.unk6 = 1; + gFieldSelectData.state = 1; + } + } + else if (gMain.newKeys & DPAD_RIGHT) + { + if (gFieldSelectData.selectedField == FIELD_RUBY) + { + m4aSongNumStart(0x6D); + gFieldSelectData.selectedField = FIELD_SAPPHIRE; + gFieldSelectData.unk4 = 1; + gFieldSelectData.unk6 = 0; + gFieldSelectData.state = 1; + } + } + if (gMain.newKeys & A_BUTTON) + { + m4aSongNumStart(0x65); + gFieldSelectData.state = 2; + gFieldSelectData.unk14 = 1; + gFieldSelectData.unkE = 0; + if (gFieldSelectData.selectedField == FIELD_RUBY) + { + gFieldSelectData.unk4 = 0; + gFieldSelectData.unk6 = 1; + gFieldSelectData.unk0 = 2; + gFieldSelectData.unk2 = 3; + gFieldSelectData.unkC = 0; + } + else + { + gFieldSelectData.unk4 = 1; + gFieldSelectData.unk6 = 0; + gFieldSelectData.unk0 = 7; + gFieldSelectData.unk2 = 11; + gFieldSelectData.unkC = 0; + } + } + if (gMain.newKeys & B_BUTTON) + { + m4aSongNumStart(0x66); + gMain.subState++; + gFieldSelectData.nextMainState = STATE_TITLE; + if (gFieldSelectData.selectedField == FIELD_RUBY) + { + gFieldSelectData.unk4 = 0; + gFieldSelectData.unk6 = 1; + gFieldSelectData.unk0 = 2; + gFieldSelectData.unk2 = 3; + gFieldSelectData.unkC = 0; + } + else + { + gFieldSelectData.unk4 = 1; + gFieldSelectData.unk6 = 0; + gFieldSelectData.unk0 = 7; + gFieldSelectData.unk2 = 11; + gFieldSelectData.unkC = 0; + } + } + if (gMain.unk4 < 2) + gMain.unk6 = 0; + else + gMain.unk6 = 1; + break; + case 2: // Choose ball speed + if (gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) + { + m4aSongNumStart(0x67); + gFieldSelectData.ballSpeed = 1 - gFieldSelectData.ballSpeed; + } + if (gMain.newKeys & A_BUTTON) + { + m4aSongNumStart(0x65); + gFieldSelectData.unkE = 0; + gFieldSelectData.unkC = 0; + gMain_saveData.ballSpeed = gFieldSelectData.ballSpeed; + SaveFile_WriteToSram(); + gFieldSelectData.state = 3; + } + if (gMain.newKeys & B_BUTTON) + { + m4aSongNumStart(0x66); + gFieldSelectData.unk14 = 0; + gFieldSelectData.state = 0; + } + gFieldSelectData.unkE++; + if (gFieldSelectData.unkE > 4) + { + gFieldSelectData.unkE = 0; + gFieldSelectData.unk12 = 1 - gFieldSelectData.unk12; + } + break; + case 1: + if (gFieldSelectData.selectedField == FIELD_RUBY) + { + gFieldSelectData.unk0 = gUnknown_086A6B14.unk0[4 - gFieldSelectData.unkC]; + gFieldSelectData.unk2 = gUnknown_086A6B14.unkA[4 - gFieldSelectData.unkC]; + } + else + { + gFieldSelectData.unk0 = gUnknown_086A6B14.unk0[gFieldSelectData.unkC]; + gFieldSelectData.unk2 = gUnknown_086A6B14.unkA[gFieldSelectData.unkC]; + } + if (!(gMain.frameCount & 1)) + { + if (gFieldSelectData.unkC < 4) + { + gFieldSelectData.unkC++; + } + else + { + gFieldSelectData.unkC = 0; + gFieldSelectData.state = 0; + } + } + if (gMain.newKeys & DPAD_LEFT) + { + if (gFieldSelectData.selectedField == FIELD_SAPPHIRE) + { + m4aSongNumStart(0x6D); + gFieldSelectData.selectedField = FIELD_RUBY; + gFieldSelectData.unk4 = 0; + gFieldSelectData.unk6 = 1; + gFieldSelectData.unk0 = 2; + gFieldSelectData.unk2 = 3; + gFieldSelectData.unkC = 0; + gFieldSelectData.state = 0; + } + } + else if (gMain.newKeys & DPAD_RIGHT) + { + if (gFieldSelectData.selectedField == FIELD_RUBY) + { + m4aSongNumStart(0x6D); + gFieldSelectData.selectedField = FIELD_SAPPHIRE; + gFieldSelectData.unk4 = 1; + gFieldSelectData.unk6 = 0; + gFieldSelectData.unk0 = 7; + gFieldSelectData.unk2 = 11; + gFieldSelectData.unkC = 0; + gFieldSelectData.state = 0; + } + } + break; + case 3: + gFieldSelectData.unkE++; + if (gFieldSelectData.unkE > 3) + { + gFieldSelectData.unkE = 0; + if (gFieldSelectData.selectedField == FIELD_RUBY) + gFieldSelectData.unk4 = 1 - gFieldSelectData.unk4; + else + gFieldSelectData.unk6 = 1 - gFieldSelectData.unk6; + gFieldSelectData.unkC++; + if (gFieldSelectData.unkC > 5) + { + gFieldSelectData.nextMainState = STATE_GAME_MAIN; + gMain.subState++; + } + } + break; + } + gMain.unk4 = gFieldSelectData.selectedField; + gMain.unk5 = gFieldSelectData.selectedField; + } +} + +void sub_8F64(void) +{ + sub_FE04(sub_8F94); + m4aMPlayAllStop(); + sub_D10(); + gAutoDisplayTitlescreenMenu = TRUE; + SetMainGameState(gFieldSelectData.nextMainState); +} + +static void sub_8F94(void) +{ + struct SpriteGroup *r6; + struct SpriteGroup *r9; + struct SpriteGroup *sp0; + struct SpriteGroup *r10; + struct SpriteGroup *r8; + const struct SpriteSet *spriteSet; + int i; + + gMain.blendControl = BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2; + gMain.blendAlpha = BLDALPHA_BLEND(8, 8); + REG_BLDCNT = gMain.blendControl; + REG_BLDALPHA = gMain.blendAlpha; + + r6 = &gMain.spriteGroups[0]; + r9 = &gMain.spriteGroups[1]; + sp0 = &gMain.spriteGroups[gFieldSelectData.unk0]; + r10 = &gMain.spriteGroups[gFieldSelectData.unk2]; + r8 = &gMain.spriteGroups[12 + gFieldSelectData.ballSpeed * 2 + gFieldSelectData.unk12]; + + r6->available = gFieldSelectData.unk4; + r9->available = gFieldSelectData.unk6; + sp0->available = 1; + r10->available = 1; + r8->available = gFieldSelectData.unk14; + + LoadSpriteSets(gUnknown_086A6AD4, 16, r6); + + if (gFieldSelectData.unk4 == 1) + { + r6->baseX = 0x25; + r6->baseY = 0x18; + for (i = 0; i < 2; i++) + { + gOamBuffer[r6->oam[i].oamId].x = r6->oam[i].xOffset + r6->baseX; + gOamBuffer[r6->oam[i].oamId].y = r6->oam[i].yOffset + r6->baseY; + } + } + + if (gFieldSelectData.unk6 == 1) + { + r9->baseX = 0x8D; + r9->baseY = 0x18; + for (i = 0; i < 2; i++) + { + gOamBuffer[r9->oam[i].oamId].x = r9->oam[i].xOffset + r9->baseX; + gOamBuffer[r9->oam[i].oamId].y = r9->oam[i].yOffset + r9->baseY; + } + } + + sp0->baseX = 32; + sp0->baseY = 32; + spriteSet = gUnknown_086A6AD4[gFieldSelectData.unk0]; + for (i = 0; i < spriteSet->count; i++) + { + gOamBuffer[sp0->oam[i].oamId].objMode = 1; + gOamBuffer[sp0->oam[i].oamId].x = sp0->oam[i].xOffset + sp0->baseX; + gOamBuffer[sp0->oam[i].oamId].y = sp0->oam[i].yOffset + sp0->baseY; + } + + r10->baseX = 0x88; + r10->baseY = 32; + spriteSet = gUnknown_086A6AD4[gFieldSelectData.unk2]; + for (i = 0; i < spriteSet->count; i++) + { + gOamBuffer[r10->oam[i].oamId].objMode = 1; + gOamBuffer[r10->oam[i].oamId].x = r10->oam[i].xOffset + r10->baseX; + gOamBuffer[r10->oam[i].oamId].y = r10->oam[i].yOffset + r10->baseY; + } + + if (r8->available == 1) + { + r8->baseX = gUnknown_086A6B28[gFieldSelectData.selectedField].x; + r8->baseY = gUnknown_086A6B28[gFieldSelectData.selectedField].y; + for (i = 0; i < 5; i++) + { + gOamBuffer[r8->oam[i].oamId].objMode = 0; + gOamBuffer[r8->oam[i].oamId].x = r8->oam[i].xOffset + r8->baseX; + gOamBuffer[r8->oam[i].oamId].y = r8->oam[i].yOffset + r8->baseY; + } + } + + sp0->available = 0; + r10->available = 0; + r8->available = 0; +} diff --git a/src/gbplayer.c b/src/gbplayer.c index c0d9655..412be7d 100755 --- a/src/gbplayer.c +++ b/src/gbplayer.c @@ -291,8 +291,7 @@ void sub_1198(void) void sub_11B0(int arg0) { - if (gUnknown_0200B134[0xCD]) - //if (gMain.saveData.unk141) + if (gMain_saveData.unk141) { gUnknown_02019BF8 = arg0; gUnknown_02019BFC = 0; @@ -3,7 +3,7 @@ #include "gbplayer.h" #include "m4a.h" -static void sub_B54(void); +static void InitGame(void); static void sub_B8C(void); static void InitIntrHandlers(void); static void ReadKeys(void); @@ -14,13 +14,13 @@ void AgbMain(void) InitIntrHandlers(); DmaCopy32(3, IntrMain, IntrMain_Buffer, sizeof(IntrMain_Buffer)); INTR_VECTOR = IntrMain_Buffer; - sub_B54(); + InitGame(); InitGameBoyPlayer(); while (1) { ReadKeys(); gMainFuncs[gMain.mainState](); - sub_D74(); + MainLoopIter(); } } @@ -40,12 +40,12 @@ void sub_9BC_Main(void) default: sub_2B4(); sub_D10(); - SetMainGameState(1); + SetMainGameState(STATE_TITLE); break; } } -void HBlankIntr(void) +void VBlankIntr(void) { m4aSoundVSync(); INTR_CHECK |= INTR_FLAG_VBLANK; @@ -55,7 +55,7 @@ void VCountIntr(void) { INTR_CHECK |= INTR_FLAG_VCOUNT; while (!(REG_DISPSTAT & DISPSTAT_HBLANK)); - if (gMain.mainState == 2) + if (gMain.mainState == STATE_GAME_MAIN) { REG_BG0HOFS = 0; if (gMain.unk28) @@ -122,7 +122,7 @@ void IntrDummy(void) { } -static void sub_B54(void) +static void InitGame(void) { REG_WAITCNT = WAITCNT_AGB | WAITCNT_PREFETCH_ENABLE @@ -139,24 +139,24 @@ static void sub_B54(void) sub_B8C(); m4aSoundInit(); m4aSoundVSyncOff(); - sub_52A18(); + SaveFile_LoadGameData(); } static void sub_B8C(void) { - gMain.mainState = 0; + gMain.mainState = STATE_INTRO; gMain.subState = 0; gMain.unk16 = 0; gMain.heldKeys = 0; gMain.newKeys = 0; gMain.unk20 = 0; gMain.rngValue = 0; - gMain.unk4C = 0; + gMain.frameCount = 0; gMain.unk30 = 0; gMain.vCount = 144; gMain.unk2C = 0; - sub_1090C(); - sub_438(); + ClearSomeArray(); + ResetSomeGraphicsRelatedStuff(); } static void InitIntrHandlers(void) @@ -166,11 +166,11 @@ static void InitIntrHandlers(void) for (i = 0; i < INTR_COUNT; i++) gIntrTable[i] = gIntrTableTemplate[i]; - gUnknown_0200FB98 = &gIntrTable[2]; - gUnknown_02019BE0 = &gIntrTable[4]; - sub_8BC(); - sub_8FC(); - sub_940(); + gVBlankIntrFuncPtr = &gIntrTable[2]; + gVCountIntrFuncPtr = &gIntrTable[4]; + ResetMainCallback(); + ResetVBlankIntrFunc(); + ResetVCountIntrFunc(); } // The number 1103515245 comes from the example implementation of rand and srand @@ -320,18 +320,18 @@ void sub_D10(void) m4aSoundVSyncOff(); } -void sub_D74(void) +void MainLoopIter(void) { - gUnknown_0200FB9C = gUnknown_02017BD4; - *gUnknown_0200FB98 = gUnknown_02017BD0; - *gUnknown_02019BE0 = gUnknown_0200FBA0; - if (gUnknown_0200FB9C) - gUnknown_0200FB9C(); + gMainCallback = gUnknown_02017BD4; + *gVBlankIntrFuncPtr = gUnknown_02017BD0; + *gVCountIntrFuncPtr = gUnknown_0200FBA0; + if (gMainCallback) + gMainCallback(); - gMain.unk4C++; + gMain.frameCount++; } -void sub_DC4(void) +void DefaultMainCallback(void) { if (REG_DISPSTAT & DISPSTAT_VBLANK_INTR) { diff --git a/src/options.c b/src/options.c new file mode 100644 index 0000000..cd02b94 --- /dev/null +++ b/src/options.c @@ -0,0 +1,500 @@ +#include "global.h" +#include "m4a.h" +#include "main.h" +#include "titlescreen.h" + +struct OptionsData +{ + s16 unk0; + u16 unk2; + u16 unk4; + u16 unk6; + s16 unk8; + s16 unkA; + u16 unkC; + s16 unkE; + s16 unk10; + u8 unk12; + u8 unk13; + u8 unk14; + u8 unk15; + u8 unk16; + u8 unk17; + s16 unk18; + u8 unk1A[6]; + s16 unk20; + u16 unk22; + s16 unk24[2]; + u16 unk28; + u8 unk2A; + s8 unk2B; + s8 unk2C; + u8 unk2D; + s8 unk2E; + u8 unk2F; + u8 unk30; +}; + +extern struct OptionsData gOptionsData; + +void OptionsMain(void) +{ + gUnknown_08527F08[gMain.subState](); +} + +extern const u16 gUnknown_0852B468[]; +extern const u8 gUnknown_08528828[]; +extern const u8 gUnknown_0852A848[]; +extern const u8 gUnknown_08528028[]; +extern const u8 gUnknown_0852A048[]; + +void sub_51240(void) +{ + ResetSomeGraphicsRelatedStuff(); + + REG_DISPCNT = 0x1080; + REG_BG0CNT = 4; + REG_DISPCNT |= 0x100; + REG_BG1CNT = 0x109; + REG_DISPCNT |= 0x200; + + gMain.unk16 = REG_DISPCNT; + + DmaCopy16(3, gUnknown_0852B468, (void *)PLTT, 0x200); + DmaCopy16(3, gUnknown_08528828, (void *)(VRAM + 0x4000), 0x1800); + DmaCopy16(3, gUnknown_0852A848, (void *)(VRAM + 0x8000), 0xC00); + DmaCopy16(3, gUnknown_08528028, gUnknown_03005C00, 0x800); + DmaCopy16(3, gUnknown_03005C00, (void *)VRAM, 0x800); + + if (gGameBoyPlayerEnabled != 1) + { + sub_1068C(0x12, 4, 2, 1, 2); + sub_1068C(0x12, 5, 3, 2, 2); + } + + DmaCopy16(3, gUnknown_03005C00, (void *)VRAM, 0x800); + DmaCopy16(3, gUnknown_0852A048, (void *)(VRAM + 0x800), 0x800); + DmaCopy16(3, gGBAButtonIcons_Pals, (void *)(PLTT + 0x200), 0x60); + DmaCopy16(3, gOptionsSprites_Gfx, (void *)(VRAM + 0x10000), 0x2020); + sub_513B8(); + sub_51C9C(); + m4aMPlayAllStop(); + sub_CBC(); + sub_24C(); + sub_10C0(); + + gMain.subState++; +} + +void sub_513B8(void) +{ + int i; + int j; + + gOptionsData.unk0 = 0; + gOptionsData.unk2 = 0; + gOptionsData.unk4 = 0; + gOptionsData.unk6 = 1; + gOptionsData.unk8 = 0; + gOptionsData.unkA = 0; + gOptionsData.unkC = gMain_saveData.unk143; + gOptionsData.unkE = 0; + gOptionsData.unk10 = 0; + gOptionsData.unk12 = 0; + gOptionsData.unk13 = 0; + gOptionsData.unk14 = 1; + gOptionsData.unk15 = 0; + gOptionsData.unk16 = 0; + gOptionsData.unk17 = 1; + gOptionsData.unk18 = 0; + for (i = 0; i < 6; i++) + gOptionsData.unk1A[i] = 0; + gOptionsData.unk20 = 0; + gOptionsData.unk22 = 0; + for (i = 0; i < 2; i++) + gOptionsData.unk24[i] = 10; + gOptionsData.unk28 = 0; + for (i = 0; i < 4; i++) + { + for (j = 0; j < 10; j++) + gUnknown_02031AF0[i][j] = gUnknown_08527ED6[i][j]; + } + sub_52528(); + if (gGameBoyPlayerEnabled == 1) + { + gOptionsData.unk2A = gMain_saveData.unk141; + gMain_saveData.unk141 = 1; + } + else + { + gOptionsData.unk2A = 0; + gMain_saveData.unk141 = 0; + } + gOptionsData.unk2E = 0; + gOptionsData.unk2B = 0; + gOptionsData.unk2C = 0; + gOptionsData.unk2D = 0; + gOptionsData.unk2F = 0; + gOptionsData.unk30 = 0; +} + +void sub_514B8(void) +{ + s16 r4; + + sub_51C9C(); + switch (gOptionsData.unk0) + { + case 0: + if (gMain.newKeys & 0x40) + { + if (gOptionsData.unkA != 0xD) + { + if (gOptionsData.unkA == 0xE) + { + m4aSongNumStart(0x67); + gOptionsData.unkA = 0xD; + } + else if (gOptionsData.unkA > 0) + { + m4aSongNumStart(0x67); + gOptionsData.unkA--; + } + } + } + else if (gMain.newKeys & 0x80) + { + if (gOptionsData.unkA < 6) + { + m4aSongNumStart(0x67); + gOptionsData.unkA++; + } + else if (gOptionsData.unkA == 0xD) + { + m4aSongNumStart(0x67); + gOptionsData.unkA = 0xE; + } + else if (gOptionsData.unkA == 0xE) + { + m4aSongNumStart(0x67); + gOptionsData.unkA = 2; + } + } + if ((gMain.newKeys & 0x10) && gGameBoyPlayerEnabled == 1 && (u16)gOptionsData.unkA < 2) + { + m4aSongNumStart(0x67); + gOptionsData.unkA += 0xD; + } + if ((gMain.newKeys & 0x20) && gGameBoyPlayerEnabled == 1 && (u16)(gOptionsData.unkA - 13) < 2) + { + m4aSongNumStart(0x67); + gOptionsData.unkA -= 0xD; + } + if (gMain.newKeys & 1) + { + switch (gOptionsData.unkA) + { + case 0: + m4aSongNumStart(0x65); + gOptionsData.unk0 = 1; + gOptionsData.unk18 = 0; + gOptionsData.unk30 = 1; + if (gOptionsData.unk2E == 1) + { + gOptionsData.unk2B = 0; + gOptionsData.unk2D = 0; + gOptionsData.unk2C = 0; + gOptionsData.unk2E = 0; + } + break; + case 1: + m4aSongNumStart(0x65); + gOptionsData.unk0 = 2; + gOptionsData.unk18 = 0; + gOptionsData.unk30 = 1; + if (gOptionsData.unk2E == 1) + { + gOptionsData.unk2B = 0; + gOptionsData.unk2D = 0; + gOptionsData.unk2C = 0; + gOptionsData.unk2E = 0; + } + break; + case 2: + case 3: + case 4: + case 5: + m4aSongNumStart(0x65); + gOptionsData.unkC = gOptionsData.unkA - 2; + gMain_saveData.unk143 = gOptionsData.unkC; + break; + case 6: + m4aSongNumStart(0x65); + gOptionsData.unkC = gOptionsData.unkA - 2; + gMain_saveData.unk143 = gOptionsData.unkC; + gOptionsData.unkA = 7; + gOptionsData.unk0 = 3; + break; + case 14: + if (gGameBoyPlayerEnabled == 1) + { + m4aSongNumStart(0x65); + gOptionsData.unk2D = 0; + if (gOptionsData.unk2E == 1) + gOptionsData.unk2E = 0; + gOptionsData.unk2B = 0; + gOptionsData.unk2C = 0; + gOptionsData.unk2A = 0; + } + break; + case 13: + if (gGameBoyPlayerEnabled == 1) + { + m4aSongNumStart(0x65); + sub_11B0(11); + if (gOptionsData.unk2E == 0) + gOptionsData.unk2E = 1; + + gOptionsData.unk2B = 0; + gOptionsData.unk2C = 0; + gOptionsData.unk2A = 1; + } + break; + } + } + else if (gMain.newKeys & 2) + { + m4aSongNumStart(0x66); + gMain.subState++; + sub_525CC(gMain_saveData.unk143); + + } + if (!(gMain.frameCount & 7)) + gOptionsData.unk2 = 1 - gOptionsData.unk2; + break; + case 1: + if (gMain.heldKeys & 0x20) + { + if (gOptionsData.unk18 == 0) + { + gOptionsData.unkE--; + gOptionsData.unk18 = 10; + } + } + else if (gMain.heldKeys & 0x10) + { + if (gOptionsData.unk18 == 0) + { + gOptionsData.unkE++; + gOptionsData.unk18 = 10; + } + } + if (gMain.newKeys & 0x40) + gOptionsData.unkE += 10; + else if (gMain.newKeys & 0x80) + gOptionsData.unkE -= 10; + if (gOptionsData.unkE < 0) + gOptionsData.unkE = 33; + if (gOptionsData.unkE > 33) + gOptionsData.unkE = 0; + + r4 = gOptionsData.unkE + 1; + gOptionsData.unk12 = r4 / 100; + r4 %= 100; + gOptionsData.unk13 = r4 / 10; + gOptionsData.unk14 = r4 % 10; + if (gMain.newKeys & 1) + { + m4aMPlayAllStop(); + m4aSongNumStart(gUnknown_08527D22[gOptionsData.unkE]); + } + else if (gMain.newKeys & 2) + { + m4aMPlayAllStop(); + m4aSongNumStart(0x66); + gOptionsData.unk4 = 0; + gOptionsData.unk30 = 0; + gOptionsData.unk0 = 0; + } + if (!(gMain.frameCount & 7)) + gOptionsData.unk4 = 1 - gOptionsData.unk4; + if (gOptionsData.unk18 > 0) + gOptionsData.unk18--; + break; + case 2: + if (gMain.heldKeys & 0x20) + { + if (gOptionsData.unk18 == 0) + { + gOptionsData.unk10--; + gOptionsData.unk18 = 10; + } + } + else if (gMain.heldKeys & 0x10) + { + if (gOptionsData.unk18 == 0) + { + gOptionsData.unk10++; + gOptionsData.unk18 = 10; + } + } + if (gMain.newKeys & 0x40) + gOptionsData.unk10 += 10; + else if (gMain.newKeys & 0x80) + gOptionsData.unk10 -= 10; + if (gOptionsData.unk10 < 0) + gOptionsData.unk10 = 0xB7; + if (gOptionsData.unk10 > 0xB7) + gOptionsData.unk10 = 0; + + r4 = gOptionsData.unk10 + 1; + gOptionsData.unk15 = r4 / 100; + r4 %= 100; + gOptionsData.unk16 = r4 / 10; + gOptionsData.unk17 = r4 % 10; + if (gMain.newKeys & 0x1) + { + m4aMPlayAllStop(); + m4aSongNumStart(gUnknown_08527D66[gOptionsData.unk10]); + } + else if (gMain.newKeys & 0x2) + { + m4aMPlayAllStop(); + m4aSongNumStart(0x66); + gOptionsData.unk4 = 0; + gOptionsData.unk30 = 0; + gOptionsData.unk0 = 0; + } + if (!(gMain.frameCount & 7)) + gOptionsData.unk4 = 1 - gOptionsData.unk4; + if (gOptionsData.unk18 > 0) + gOptionsData.unk18--; + break; + case 3: + if (gMain.newKeys & 0x40) + { + if (gOptionsData.unkA > 7) + { + m4aSongNumStart(0x67); + gOptionsData.unkA--; + } + } + else if (gMain.newKeys & 0x80) + { + if (gOptionsData.unkA <= 10) + { + m4aSongNumStart(0x67); + gOptionsData.unkA++; + } + } + if (gMain.newKeys & 1) + { + m4aSongNumStart(0x65); + gOptionsData.unk0 = 4; + gOptionsData.unk1A[gOptionsData.unkA - 7] = 1; + } + else if (gMain.newKeys & 2) + { + m4aSongNumStart(0x66); + gOptionsData.unkA = 6; + gOptionsData.unk0 = 0; + } + if (!(gMain.frameCount & 7)) + gOptionsData.unk2 = 1 - gOptionsData.unk2; + break; + case 4: + gOptionsData.unk8++; + if (gOptionsData.unk8 > 24) + { + gOptionsData.unk8 = 0; + gOptionsData.unk6 = 1 - gOptionsData.unk6; + } + if (gMain.newKeys & 0x3F7) + { + s16 i; + + m4aSongNumStart(0x65); + gOptionsData.unk20 = 10; + gOptionsData.unk22 = 0; + for (i = 0; i < 2; i++) + gOptionsData.unk24[i] = 10; + gOptionsData.unk28 = 0; + } + //_08051B0E + if (gOptionsData.unk20 > 0) + { + sub_524BC(); + gOptionsData.unk20--; + if (gOptionsData.unk20 == 0) + { + gUnknown_02031AF0[4][(gOptionsData.unkA - 7) * 2 + 0] = gOptionsData.unk24[0]; + gUnknown_02031AF0[4][(gOptionsData.unkA - 7) * 2 + 1] = gOptionsData.unk24[1]; + gMain_saveData.unk144[(gOptionsData.unkA - 7)][0] = gUnknown_086BB910[gOptionsData.unk24[0]][0]; + gMain_saveData.unk144[(gOptionsData.unkA - 7)][1] = gUnknown_086BB910[gOptionsData.unk24[1]][0]; + gOptionsData.unk0 = 3; + gOptionsData.unk1A[gOptionsData.unkA - 7] = 0; + gOptionsData.unk8 = 0; + gOptionsData.unk6 = 1; + } + } + break; + } + //_08051B98 + if (gOptionsData.unk2E == 1) + { + //gOptionsData.unk2B++; + if (++gOptionsData.unk2B > gUnknown_086BB9B4[gOptionsData.unk2C].unk2) + { + gOptionsData.unk2B = 0; + gOptionsData.unk2C++; + if (gOptionsData.unk2C > 12) + { + gOptionsData.unk2C = 0; + gOptionsData.unk2D = 0; + gOptionsData.unk2E = 0; + } + //_08051BE8 + gOptionsData.unk2D = gUnknown_086BB9B4[gOptionsData.unk2C].unk0; + } + // _08051C30 + } + else + //_08051C10 + { + gOptionsData.unk2B++; + if (gOptionsData.unk2B > 18) + { + gOptionsData.unk2B = 0; + gOptionsData.unk2D = 1 - gOptionsData.unk2D; + } + } + sub_11FC(); +} + +void sub_51C3C(void) +{ + sub_111C(); + if (sub_1170() != 0) + { + sub_1198(); + gMain.subState++; + } +} + +void sub_51C60(void) +{ + gMain_saveData.unk141 = gOptionsData.unk2A; + SaveFile_WriteToSram(); + sub_2B4(); + m4aMPlayAllStop(); + sub_D10(); + gAutoDisplayTitlescreenMenu = 1; + SetMainGameState(STATE_TITLE); +} + +/* +void sub_51C9C(void) +{ + +} +*/ diff --git a/src/rom_1068C.c b/src/rom_1068C.c index 4a5e619..297f982 100644 --- a/src/rom_1068C.c +++ b/src/rom_1068C.c @@ -56,7 +56,7 @@ void sub_10798(void *a, void *b, void (*func)(void)) if (func != NULL) func(); sub_1001C(i); - sub_D74(); + MainLoopIter(); if (i == 32) { DmaCopy16(3, gUnknown_0201A920, (void *)PLTT, 0x400); @@ -81,7 +81,7 @@ void sub_10860(void (*func)(void)) if (func != NULL) func(); sub_1001C(i); - sub_D74(); + MainLoopIter(); if (i == 32) { DmaCopy16(3, gUnknown_0201A920, (void *)PLTT, 0x400); @@ -91,12 +91,12 @@ void sub_10860(void (*func)(void)) DmaCopy16(3, gUnknown_0201AD20, (void *)PLTT, 0x400); } } - sub_D74(); + MainLoopIter(); } #ifdef NONMATCHING // Like sub_C24, it matches except for that damn 'push {lr}/pop {lr}' -void sub_1090C(void) +void ClearSomeArray(void) { int i; @@ -105,7 +105,7 @@ void sub_1090C(void) } #else NAKED -void sub_1090C(void) +void ClearSomeArray(void) { asm_unified("\n\ ldr r1, _08010920 @ =gUnknown_0201A500\n\ diff --git a/src/rom_528AC.c b/src/rom_528AC.c index f1c7d5f..7abf1d9 100644 --- a/src/rom_528AC.c +++ b/src/rom_528AC.c @@ -5,6 +5,9 @@ extern const u16 gUnknown_08527F18[]; +static void sub_52940(u16, s8, s8, u8, int); +static u16 LoadSaveDataFromSram(void); + #ifdef NONMATCHING // Like sub_C24, it matches except for that damn 'push {lr}/pop {lr}' int sub_528AC(u16 a) @@ -46,8 +49,6 @@ _080528DA:\n\ } #endif -void sub_52940(u16, s8, s8, u8, int); - void sub_528DC(u16 a, s8 b) { m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x99); @@ -59,12 +60,7 @@ void sub_5291C(u16 a, s8 b, s8 c, u8 d) sub_52940(a, b, c, d, 0); } -extern struct ToneData gUnknown_08532D6C[]; -extern struct ToneData gUnknown_08533360[]; -extern struct ToneData gUnknown_08533960[]; -extern struct ToneData gUnknown_08533F60[]; - -void sub_52940(u16 a, s8 b, s8 c, u8 d, int unused) +static void sub_52940(u16 a, s8 b, s8 c, u8 d, int unused) { u16 r5 = a - 1; u32 pitch = 0x3C00; @@ -100,18 +96,15 @@ void sub_52940(u16 a, s8 b, s8 c, u8 d, int unused) } } -extern u16 sub_52A68(void); -extern void sub_525CC(s8); - -void sub_52A18(void) +void SaveFile_LoadGameData(void) { SetSramFastFunc(); gMain.unkC = 0; - if (sub_52A68() == 0) + if (LoadSaveDataFromSram() == 0) { sub_52C64(); - sub_52B30(); - if (sub_52A68() == 0) + SaveFile_WriteToSram(); + if (LoadSaveDataFromSram() == 0) { gMain.unkC = 1; sub_52C64(); @@ -119,16 +112,15 @@ void sub_52A18(void) } else { - sub_525CC(gMain.saveData.unk143); + sub_525CC(gMain_saveData.unk143); } } -extern struct Main2 gMain_; extern u8 gSaveFileSignature[]; -u16 sub_52A68(void) +static u16 LoadSaveDataFromSram(void) { - u16 r8 = 0; + u16 isOk = FALSE; u16 fileNum; u16 i; u32 checksum; @@ -136,15 +128,15 @@ u16 sub_52A68(void) // Looks like there are two copies of the save data, one used as a backup? for (fileNum = 0; fileNum < 2; fileNum++) { - u16 *saveData = (u16 *)&gMain.saveData; - u32 size = 0x274; + u16 *saveData = (u16 *)&gMain_saveData; + size_t size = sizeof(gMain_saveData); - ReadSramFast((u8 *)0x0E000004 + fileNum * 672, (u8 *)saveData, size); + ReadSramFast((void *)(SRAM + 0x4 + fileNum * 672), (u8 *)saveData, size); // Verify signature for (i = 0; i < 10; i++) { - if (gMain.saveData.signature[i] != gSaveFileSignature[i]) + if (gMain_saveData.signature[i] != gSaveFileSignature[i]) break; } if (i != 10) @@ -162,93 +154,82 @@ u16 sub_52A68(void) checksum = (checksum & 0xFFFF) + (checksum >> 16); if (checksum == 0xFFFF) { - r8 = 1; + isOk = TRUE; break; } } - return r8; + return isOk; } -// I really think gUnknown_0200B134_ is part of gMain, but the code doesn't -// match if I do that. -#ifdef NONMATCHING -#define gUnknown_0200B134_ gMain.saveData -#else -extern struct SaveData gUnknown_0200B134_; // gMain.saveData -asm(".set gUnknown_0200B134_, gMain+0x74"); -#endif - -void sub_52B30(void) +void SaveFile_WriteToSram(void) { u32 checksum; - u16 *saveData = (u16 *)&gUnknown_0200B134_; - u32 size = 0x274; + u16 *saveData = (u16 *)&gMain_saveData; + size_t size = sizeof(gMain_saveData); - gUnknown_0200B134_.unk2E4++; - gUnknown_0200B134_.unk2E2 = 0; + gMain_saveData.unk2E4++; + gMain_saveData.checksum = 0; checksum = 0; while (size > 1) { - checksum += *saveData++; - size -= 2; + checksum += *saveData++; + size -= 2; } if (size != 0) // never happens (size is even) - checksum += *saveData & 0xFF00; + checksum += *saveData & 0xFF00; checksum = (checksum & 0xFFFF) + (checksum >> 16); - gUnknown_0200B134_.unk2E2 = ~((checksum >> 16) + checksum); + gMain_saveData.checksum = ~((checksum >> 16) + checksum); - WriteAndVerifySramFast((u8 *)&gUnknown_0200B134_, (u8 *)0x0E000004, 0x274); - WriteAndVerifySramFast((u8 *)&gUnknown_0200B134_, (u8 *)0x0E0002A4, 0x274); + WriteAndVerifySramFast((u8 *)&gMain_saveData, (void *)(SRAM + 0x4), sizeof(gMain_saveData)); + WriteAndVerifySramFast((u8 *)&gMain_saveData, (void *)(SRAM + 0x2A4), sizeof(gMain_saveData)); } -void sub_52BB0(s16 a, u8 b) +void SaveFile_SetPokedexFlags(s16 a, u8 b) { - u16 *saveData = (u16 *)&gUnknown_0200B134_; - u32 size = 0x274; + u16 *saveData = (u16 *)&gMain_saveData; + size_t size = sizeof(gMain_saveData); u32 checksum; - if (gUnknown_0200B134_.pokedexFlags[a] < b) + if (gMain_saveData.pokedexFlags[a] < b) { - u16 r1; - - gUnknown_0200B134_.unk2E4++; - r1 = 0; - gUnknown_0200B134_.pokedexFlags[a] = b; - gUnknown_0200B134_.unk2E2 = r1; - - checksum = 0; - while (size > 1) - { - checksum += *saveData++; - size -= 2; - } - if (size != 0) // never happens (size is even) - checksum += *saveData & 0xFF00; - checksum = (checksum & 0xFFFF) + (checksum >> 16); - gUnknown_0200B134_.unk2E2 = ~((checksum >> 16) + checksum); - - WriteAndVerifySramFast((u8 *)&gUnknown_0200B134_, (u8 *)0x0E000004, 0x274); - WriteAndVerifySramFast((u8 *)&gUnknown_0200B134_, (u8 *)0x0E0002A4, 0x274); + gMain_saveData.unk2E4++; + gMain_saveData.pokedexFlags[a] = b; + gMain_saveData.checksum = 0; + + checksum = 0; + while (size > 1) + { + checksum += *saveData++; + size -= 2; + } + if (size != 0) // never happens (size is even) + checksum += *saveData & 0xFF00; + checksum = (checksum & 0xFFFF) + (checksum >> 16); + gMain_saveData.checksum = ~((checksum >> 16) + checksum); + + WriteAndVerifySramFast((u8 *)&gMain_saveData, (void *)(SRAM + 0x4), sizeof(gMain_saveData)); + WriteAndVerifySramFast((u8 *)&gMain_saveData, (void *)(SRAM + 0x2A4), sizeof(gMain_saveData)); } } -void sub_52C44(void) +void SaveFile_ReadSavedGamePresent(void) { - ReadSramFast((u8 *)0x0E000544, (u8 *)&gMain.hasSavedGame, sizeof(gMain.hasSavedGame)); + ReadSramFast((void *)(SRAM + 0x544), (u8 *)&gMain.hasSavedGame, sizeof(gMain.hasSavedGame)); } void sub_52C64(void) { - s16 r1; + s16 i; + + for (i = 0; i < 10; i++) + gMain_saveData.signature[i] = gSaveFileSignature[i]; - for (r1 = 0; r1 < 10; r1++) - gUnknown_0200B134_.signature[r1] = gSaveFileSignature[r1]; - gUnknown_0200B134_.unk2E4 = 0; - gUnknown_0200B134_.unk141 = 0; - gUnknown_0200B134_.unk142 = 0; + gMain_saveData.unk2E4 = 0; + gMain_saveData.unk141 = 0; + gMain_saveData.ballSpeed = 0; sub_525CC(-1); sub_F6E0(); sub_8ABC(); - gUnknown_0200B134_.unk143 = 0; + gMain_saveData.unk143 = 0; } diff --git a/src/rom_850.c b/src/rom_850.c index 56a4914..cd820e9 100755 --- a/src/rom_850.c +++ b/src/rom_850.c @@ -1,57 +1,53 @@ #include "global.h" #include "main.h" -u16 sub_850(void) +u16 IsInVblank(void) { - if (REG_IME & INTR_FLAG_VBLANK - && REG_DISPSTAT & DISPSTAT_VBLANK_INTR - && REG_IE & INTR_FLAG_VBLANK - && !(REG_DISPCNT & DISPCNT_FORCED_BLANK)) - { - return 1; - } + if ((REG_IME & 1) // Interrupts enabled + && (REG_DISPSTAT & DISPSTAT_VBLANK_INTR) // In VBLANK + && (REG_IE & INTR_FLAG_VBLANK) // VBlank interrupt enabled + && !(REG_DISPCNT & DISPCNT_FORCED_BLANK)) // Ignore VBlank interrupts during forced blank + return TRUE; else - { - return 0; - } + return FALSE; } -void sub_898(void (*func)(void)) +void SetMainCallback(void (*func)(void)) { gUnknown_02017BD4 = func; - if (!sub_850()) - gUnknown_0200FB9C = func; + if (!IsInVblank()) + gMainCallback = func; } -void sub_8BC(void) +void ResetMainCallback(void) { - gUnknown_0200FB9C = sub_DC4; - gUnknown_02017BD4 = sub_DC4; + gMainCallback = DefaultMainCallback; + gUnknown_02017BD4 = DefaultMainCallback; } -void sub_8D4(void (*func)(void)) +void SetVBlankIntrFunc(void (*func)(void)) { gUnknown_02017BD0 = func; - if (!sub_850()) - *gUnknown_0200FB98 = func; + if (!IsInVblank()) + *gVBlankIntrFuncPtr = func; } -void sub_8FC(void) +void ResetVBlankIntrFunc(void) { - *gUnknown_0200FB98 = HBlankIntr; - gUnknown_02017BD0 = HBlankIntr; + *gVBlankIntrFuncPtr = VBlankIntr; + gUnknown_02017BD0 = VBlankIntr; } -void sub_918(void (*func)(void)) +void SetVCountIntrFunc(void (*func)(void)) { gUnknown_0200FBA0 = func; - if (!sub_850()) - *gUnknown_02019BE0 = func; + if (!IsInVblank()) + *gVCountIntrFuncPtr = func; } -void sub_940(void) +void ResetVCountIntrFunc(void) { - *gUnknown_02019BE0 = VCountIntr; + *gVCountIntrFuncPtr = VCountIntr; gUnknown_0200FBA0 = VCountIntr; } diff --git a/src/titlescreen.c b/src/titlescreen.c index 22bc699..583ca5f 100755 --- a/src/titlescreen.c +++ b/src/titlescreen.c @@ -31,7 +31,7 @@ void LoadTitlescreenGraphics(void) { int autoDisplayMenu; - sub_438(); + ResetSomeGraphicsRelatedStuff(); REG_DISPCNT = DISPCNT_OBJ_ON| DISPCNT_FORCED_BLANK; REG_BG1CNT = BGCNT_256COLOR | BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(0); REG_DISPCNT |= DISPCNT_BG1_ON; @@ -41,7 +41,7 @@ void LoadTitlescreenGraphics(void) DmaCopy16(3, gTitlescreenBg_Pals, (void *)BG_PLTT, BG_PLTT_SIZE); DmaCopy16(3, gTitlescreenBgTilemap, (void *)BG_SCREEN_ADDR(0), BG_SCREEN_SIZE); - sub_52C44(); + SaveFile_ReadSavedGamePresent(); if (gMain.hasSavedGame == TRUE) { DmaCopy16(3, gTitlescreenSprites_Pals, (void *)OBJ_PLTT, 0xA0); @@ -862,7 +862,7 @@ void sub_11968(void) void sub_11B74(void) { sub_52C64(); - sub_52B30(); + SaveFile_WriteToSram(); gMain.hasSavedGame = FALSE; WriteAndVerifySramFast((const u8 *)&gMain.hasSavedGame, (void *)0x0E000544, sizeof(gMain.hasSavedGame)); } @@ -25,7 +25,7 @@ void sub_24C(void) for (i = 0; i < 32; i++) { REG_BLDY = 15 - i / 2; - sub_D74(); + MainLoopIter(); } REG_BLDCNT = 0; @@ -44,7 +44,7 @@ void sub_2B4(void) for (i = 0; i < 16; i++) { REG_BLDY = i + 1; - sub_D74(); + MainLoopIter(); } gMain.unk16 |= DISPCNT_FORCED_BLANK; @@ -92,13 +92,13 @@ s16 LoadSpriteSets(const struct SpriteSet *const *spriteSets, u16 numSpriteSets, return loadedCount; } -void sub_438(void) +void ResetSomeGraphicsRelatedStuff(void) { gMain.unk16 |= DISPCNT_FORCED_BLANK; REG_DISPCNT |= DISPCNT_FORCED_BLANK; - sub_490(); + ClearGraphicsMemory(); sub_518(); - sub_578(); + ClearSprites(); gMain.unkF = 0; gMain.unk10 = 0; gMain.unk50 = 0; @@ -115,7 +115,7 @@ void sub_438(void) gMain.unk2C = 0; } -void sub_490(void) +void ClearGraphicsMemory(void) { DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); DmaFill32(3, 0, (void *)OAM, OAM_SIZE); @@ -146,7 +146,7 @@ void sub_518(void) } } -void sub_578(void) +void ClearSprites(void) { u16 i, j; diff --git a/sym_ewram.txt b/sym_ewram.txt index 22057c0..1b20db2 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -38,7 +38,7 @@ gUnknown_02002830: @ 0x02002830 .space 0x1 gUnknown_02002831: @ 0x02002831 .space 0x7 -gUnknown_02002838: @ 0x02002838 +gFieldSelectData: @ 0x02002838 .space 0x18 gUnknown_02002850: @ 0x02002850 .space 0x8 @@ -74,7 +74,7 @@ gUnknown_020028AA: @ 0x020028AA .space 0x2E gUnknown_020028D8: @ 0x020028D8 .space 0x48 -gUnknown_02002920: @ 0x02002920 +gOptionsData: @ 0x02002920 .space 0x12 gUnknown_02002932: @ 0x02002932 .space 0x3 @@ -94,9 +94,7 @@ gUnknown_020030A0: @ 0x020030A0 .space 0x8020 gMain: @ 0x200B0C0 .space 0x40 -gUnknown_0200B100: @ 0x0200B100 .space 0x34 -gUnknown_0200B134: @ 0x0200B134 .space 0x5A gUnknown_0200B18E: @ 0x0200B18E .space 0x76 @@ -230,9 +228,9 @@ gUnknown_0200EBC8: @ 0x0200EBC8 .space 0x2E0 gUnknown_0200EEA8: @ 0x0200EEA8 .space 0xCF0 -gUnknown_0200FB98: @ 0x200FB98 +gVBlankIntrFuncPtr: @ 0x200FB98 .space 0x4 -gUnknown_0200FB9C: @ 0x200FB9C +gMainCallback: @ 0x200FB9C .space 0x4 gUnknown_0200FBA0: @ 0x200FBA0 .space 0x10 @@ -244,7 +242,7 @@ gUnknown_02017BD4: @ 0x2017BD4 .space 0xC gUnknown_02017BE0: @ 0x2017BE0 .space 0x2000 -gUnknown_02019BE0: @ 0x2019BE0 +gVCountIntrFuncPtr: @ 0x2019BE0 .space 0x4 gUnknown_02019BE4: @ 0x2019BE4 .space 0x4 |