summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhuderlem <huderlem@gmail.com>2019-08-13 17:23:23 -0500
committerGitHub <noreply@github.com>2019-08-13 17:23:23 -0500
commit5cbb66a6e5dd18d133e692a04e116aa3909d22ed (patch)
treec1ca88b5138d19eb5106f171c8ae77d4516e8b22
parent4c8669a3aad601f1381ca9c67c78040ce80157df (diff)
parent0648ededb9161e9f5fc4e0a38ae91c7bf14e6c0b (diff)
Merge pull request #8 from camthesaxman/decompile-options
decompile field_select.s and start decompiling options.s
-rwxr-xr-x.gitignore2
-rwxr-xr-xasm/bonus_field_select.s4
-rwxr-xr-xasm/ereader.s4
-rwxr-xr-xasm/field_select.s970
-rwxr-xr-xasm/high_scores.s40
-rwxr-xr-xasm/intro.s16
-rwxr-xr-xasm/options.s1312
-rwxr-xr-xasm/pokedex.s6
-rwxr-xr-xasm/rom_11B9C.s12
-rwxr-xr-xasm/rom_3219C.s4
-rwxr-xr-xasm/rom_9BC.s8
-rwxr-xr-xdata/rom.s4
-rw-r--r--include/agb_sram.h4
-rw-r--r--include/functions.h52
-rwxr-xr-xinclude/global.h16
-rwxr-xr-xinclude/main.h34
-rw-r--r--include/variables.h40
-rwxr-xr-xld_script.txt3
-rw-r--r--src/field_select.c374
-rwxr-xr-xsrc/gbplayer.c3
-rwxr-xr-xsrc/main.c50
-rw-r--r--src/options.c500
-rw-r--r--src/rom_1068C.c10
-rw-r--r--src/rom_528AC.c137
-rwxr-xr-xsrc/rom_850.c52
-rwxr-xr-xsrc/titlescreen.c6
-rwxr-xr-xsrc/util.c14
-rw-r--r--sym_ewram.txt12
28 files changed, 1162 insertions, 2527 deletions
diff --git a/.gitignore b/.gitignore
index bf28bd3..725d77c 100755
--- a/.gitignore
+++ b/.gitignore
@@ -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
diff --git a/data/rom.s b/data/rom.s
index 557f716..ef2d7ea 100755
--- a/data/rom.s
+++ b/data/rom.s
@@ -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;
diff --git a/src/main.c b/src/main.c
index de8d269..af1fca1 100755
--- a/src/main.c
+++ b/src/main.c
@@ -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));
}
diff --git a/src/util.c b/src/util.c
index d0f3f42..eb2a1ab 100755
--- a/src/util.c
+++ b/src/util.c
@@ -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