summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-10-19 17:04:03 -0500
committerMarcus Huderle <huderlem@gmail.com>2018-10-19 17:04:03 -0500
commit684eb41feb95329d131b7480f0a34cc0ce7b259a (patch)
treea79f97fa5522fd4764d519d5d4140f96254fda1b
parent10c39b199b625b12b9aae21be793c82253c7ac58 (diff)
Decompile more functions in main.s
-rwxr-xr-xasm/field_select.s2
-rwxr-xr-xasm/high_scores.s10
-rwxr-xr-xasm/intro.s18
-rwxr-xr-xasm/options.s2
-rwxr-xr-xasm/pokedex.s2
-rwxr-xr-xasm/rom_11B9C.s36
-rwxr-xr-xasm/rom_24C.s580
-rwxr-xr-xasm/rom_25A4.s2
-rwxr-xr-xasm/rom_2C58.s2
-rwxr-xr-xasm/titlescreen.s6
-rwxr-xr-xinclude/gba/types.h4
-rwxr-xr-xinclude/main.h76
-rwxr-xr-xsrc/main.c241
-rwxr-xr-xsym_bss.txt7
14 files changed, 348 insertions, 640 deletions
diff --git a/asm/field_select.s b/asm/field_select.s
index ea26acb..bc46a46 100755
--- a/asm/field_select.s
+++ b/asm/field_select.s
@@ -660,7 +660,7 @@ sub_8F94: @ 0x08008F94
ldr r0, _08009268 @ =0x086A6AD4
movs r1, #0x10
adds r2, r6, #0
- bl sub_358
+ bl LoadSpriteSets
ldrh r0, [r4, #4]
cmp r0, #1
bne _08009066
diff --git a/asm/high_scores.s b/asm/high_scores.s
index 997d718..b85c26b 100755
--- a/asm/high_scores.s
+++ b/asm/high_scores.s
@@ -2612,7 +2612,7 @@ sub_E3A8: @ 0x0800E3A8
strh r0, [r5]
ldr r0, _0800E450 @ =0x086A7DA8
movs r1, #2
- bl sub_358
+ bl LoadSpriteSets
ldr r2, _0800E454 @ =0x080797F0
ldr r0, [r4, #0xc]
lsls r0, r0, #3
@@ -2747,7 +2747,7 @@ _0800E4B4:
ldr r0, _0800E5E4 @ =0x086A7DB0
movs r1, #9
adds r2, r6, #0
- bl sub_358
+ bl LoadSpriteSets
movs r0, #0xdc
strh r0, [r6, #2]
movs r0, #0x90
@@ -2969,7 +2969,7 @@ _0800E67A:
ldr r0, _0800E7A0 @ =0x086A7DB0
movs r1, #9
adds r2, r6, #0
- bl sub_358
+ bl LoadSpriteSets
movs r0, #4
mov r3, sl
strh r0, [r3, #2]
@@ -3171,7 +3171,7 @@ _0800E834:
ldr r0, _0800E85C @ =0x086A7DB0
movs r1, #9
adds r2, r6, #0
- bl sub_358
+ bl LoadSpriteSets
_0800E846:
movs r0, #0
strh r0, [r7]
@@ -3206,7 +3206,7 @@ sub_E860: @ 0x0800E860
strh r0, [r5]
ldr r0, _0800E8F4 @ =0x086A7DD4
movs r1, #5
- bl sub_358
+ bl LoadSpriteSets
ldrh r0, [r5]
cmp r0, #1
bne _0800E8DA
diff --git a/asm/intro.s b/asm/intro.s
index 51c1e07..5d3ff95 100755
--- a/asm/intro.s
+++ b/asm/intro.s
@@ -1248,7 +1248,7 @@ sub_9CB8: @ 0x08009CB8
adds r2, r2, r1
adds r0, r6, #0
movs r1, #0x31
- bl sub_358
+ bl LoadSpriteSets
ldrh r0, [r5]
cmp r0, #1
bne _08009D46
@@ -1337,7 +1337,7 @@ sub_9D70: @ 0x08009D70
ldr r2, _08009E74 @ =0xFFFFE340
add r2, r8
movs r1, #0x31
- bl sub_358
+ bl LoadSpriteSets
mov r2, r8
ldrh r0, [r2]
cmp r0, #1
@@ -1528,7 +1528,7 @@ sub_9E90: @ 0x08009E90
ldr r5, _0800A144 @ =0x086A769C
adds r0, r5, #0
movs r1, #0x31
- bl sub_358
+ bl LoadSpriteSets
mov r7, r8
ldrh r0, [r7]
cmp r0, #1
@@ -2688,7 +2688,7 @@ sub_A87C: @ 0x0800A87C
ldr r0, _0800A93C @ =0x086A795C
movs r1, #1
adds r2, r5, #0
- bl sub_358
+ bl LoadSpriteSets
ldrh r0, [r5]
cmp r0, #1
bne _0800A91C
@@ -3706,7 +3706,7 @@ sub_B0E8: @ 0x0800B0E8
ldr r0, _0800B2CC @ =0x086A79EC
movs r1, #3
mov r2, r8
- bl sub_358
+ bl LoadSpriteSets
ldrh r0, [r7]
cmp r0, #1
bne _0800B1B8
@@ -4644,7 +4644,7 @@ sub_B7F8: @ 0x0800B7F8
adds r0, r4, #0
movs r1, #0x12
adds r2, r3, #0
- bl sub_358
+ bl LoadSpriteSets
movs r5, #0
str r6, [sp, #0x18]
_0800B8EC:
@@ -5631,7 +5631,7 @@ sub_C0D8: @ 0x0800C0D8
ldr r0, _0800C1F0 @ =0x086A7B74
movs r1, #1
mov r2, r8
- bl sub_358
+ bl LoadSpriteSets
mov r2, r8
ldrh r0, [r2]
cmp r0, #1
@@ -6230,7 +6230,7 @@ sub_C4F0: @ 0x0800C4F0
strh r0, [r1]
ldr r0, _0800C658 @ =0x086A7C24
movs r1, #0x11
- bl sub_358
+ bl LoadSpriteSets
mov r1, r8
ldrh r0, [r1]
cmp r0, #1
@@ -7158,7 +7158,7 @@ sub_CD18: @ 0x0800CD18
ldr r0, _0800CE30 @ =0x086A7D20
movs r1, #0xb
mov r2, r8
- bl sub_358
+ bl LoadSpriteSets
ldrh r0, [r6]
cmp r0, #1
bne _0800CDBA
diff --git a/asm/options.s b/asm/options.s
index 497e483..09f8a5b 100755
--- a/asm/options.s
+++ b/asm/options.s
@@ -1471,7 +1471,7 @@ _08051DCE:
ldr r0, _08051F78 @ =0x086BB9EC
movs r1, #0x20
ldr r2, _08051F7C @ =0x0200B3B8
- bl sub_358
+ bl LoadSpriteSets
ldr r2, _08051F80 @ =0x086BB968
movs r3, #0xa
ldrsh r1, [r5, r3]
diff --git a/asm/pokedex.s b/asm/pokedex.s
index 5ba171f..8401b1d 100755
--- a/asm/pokedex.s
+++ b/asm/pokedex.s
@@ -2483,7 +2483,7 @@ sub_51FC: @ 0x080051FC
ldr r0, _08005388 @ =0x086A6148
movs r1, #0x1d
adds r2, r4, #0
- bl sub_358
+ bl LoadSpriteSets
ldr r0, _0800538C @ =0x0201A4F0
ldrh r0, [r0]
adds r0, #0x14
diff --git a/asm/rom_11B9C.s b/asm/rom_11B9C.s
index 76c6a28..4e0cc2b 100755
--- a/asm/rom_11B9C.s
+++ b/asm/rom_11B9C.s
@@ -70950,8 +70950,8 @@ _08035854: .4byte 0x000006C4
_08035858: .4byte 0x00000714
_0803585C: .4byte 0x000006EE
- thumb_func_start sub_35860
-sub_35860: @ 0x08035860
+ thumb_func_start LoadSpriteSets60
+LoadSpriteSets60: @ 0x08035860
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
@@ -76317,7 +76317,7 @@ _0803838E:
ldr r0, _080383DC @ =0x0202D880
movs r1, #0x21
ldr r2, _080383E0 @ =0x0200B3B8
- bl sub_358
+ bl LoadSpriteSets
add sp, #0x74
pop {r3, r4, r5}
mov r8, r3
@@ -123753,7 +123753,7 @@ _0805085A:
adds r1, r1, r7
ldr r0, [r1]
ldrh r1, [r1, #4]
- bl sub_358
+ bl LoadSpriteSets
pop {r4, r5, r6, r7}
pop {r0}
bx r0
@@ -123968,7 +123968,7 @@ _08050A90:
movs r4, #0xbe
lsls r4, r4, #2
adds r2, r5, r4
- bl sub_358
+ bl LoadSpriteSets
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7}
@@ -124051,7 +124051,7 @@ _08050AE6:
adds r1, r1, r7
ldr r0, [r1]
ldrh r1, [r1, #4]
- bl sub_358
+ bl LoadSpriteSets
pop {r4, r5, r6, r7}
pop {r0}
bx r0
@@ -124249,7 +124249,7 @@ _08050CC8:
movs r2, #0xbe
lsls r2, r2, #2
add r2, sb
- bl sub_358
+ bl LoadSpriteSets
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
@@ -124335,7 +124335,7 @@ _08050D88:
movs r3, #0xbe
lsls r3, r3, #2
adds r2, r6, r3
- bl sub_358
+ bl LoadSpriteSets
pop {r4, r5, r6, r7}
pop {r0}
bx r0
@@ -124353,7 +124353,7 @@ sub_50DB8: @ 0x08050DB8
movs r3, #0xbe
lsls r3, r3, #2
adds r2, r2, r3
- bl sub_358
+ bl LoadSpriteSets
pop {r0}
bx r0
.align 2, 0
@@ -124490,7 +124490,7 @@ _08050E20:
movs r3, #0xbe
lsls r3, r3, #2
adds r2, r2, r3
- bl sub_358
+ bl LoadSpriteSets
pop {r4, r5, r6, r7}
pop {r0}
bx r0
@@ -124586,7 +124586,7 @@ _08050F44:
movs r3, #0xbe
lsls r3, r3, #2
adds r2, r2, r3
- bl sub_358
+ bl LoadSpriteSets
pop {r4, r5, r6, r7}
pop {r0}
bx r0
@@ -124606,7 +124606,7 @@ sub_50FAC: @ 0x08050FAC
movs r3, #0xbe
lsls r3, r3, #2
adds r2, r2, r3
- bl sub_358
+ bl LoadSpriteSets
pop {r0}
bx r0
.align 2, 0
@@ -124683,7 +124683,7 @@ _08051014:
movs r3, #0xbe
lsls r3, r3, #2
adds r2, r2, r3
- bl sub_358
+ bl LoadSpriteSets
pop {r4, r5, r6, r7}
pop {r0}
bx r0
@@ -124703,7 +124703,7 @@ sub_51068: @ 0x08051068
movs r3, #0xbe
lsls r3, r3, #2
adds r2, r2, r3
- bl sub_358
+ bl LoadSpriteSets
pop {r0}
bx r0
.align 2, 0
@@ -124780,7 +124780,7 @@ _080510D0:
movs r3, #0xbe
lsls r3, r3, #2
adds r2, r2, r3
- bl sub_358
+ bl LoadSpriteSets
pop {r4, r5, r6, r7}
pop {r0}
bx r0
@@ -124801,7 +124801,7 @@ sub_51128: @ 0x08051128
movs r3, #0xbe
lsls r3, r3, #2
adds r2, r2, r3
- bl sub_358
+ bl LoadSpriteSets
pop {r0}
bx r0
.align 2, 0
@@ -124883,7 +124883,7 @@ _08051190:
movs r3, #0xbe
lsls r3, r3, #2
adds r2, r2, r3
- bl sub_358
+ bl LoadSpriteSets
pop {r4, r5, r6, r7}
pop {r0}
bx r0
@@ -124905,7 +124905,7 @@ sub_511F8: @ 0x080511F8
movs r3, #0xbe
lsls r3, r3, #2
adds r2, r2, r3
- bl sub_358
+ bl LoadSpriteSets
pop {r0}
bx r0
.align 2, 0
diff --git a/asm/rom_24C.s b/asm/rom_24C.s
index c36f81a..4e4687a 100755
--- a/asm/rom_24C.s
+++ b/asm/rom_24C.s
@@ -4,586 +4,6 @@
.text
- thumb_func_start sub_358
-sub_358: @ 0x08000358
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #0x10
- str r0, [sp]
- str r2, [sp, #8]
- lsls r1, r1, #0x10
- lsrs r1, r1, #0x10
- str r1, [sp, #4]
- ldr r4, _08000424 @ =gOamBuffer
- movs r7, #0
- ldr r2, _08000428 @ =0x040000D4
- ldr r0, _0800042C @ =gEmptyOamData
- str r0, [r2]
- str r4, [r2, #4]
- ldr r0, _08000430 @ =0x80000200
- str r0, [r2, #8]
- ldr r0, [r2, #8]
- movs r1, #0
- ldr r0, [sp, #4]
- cmp r7, r0
- bhs _0800040E
- mov ip, r2
-_0800038A:
- movs r0, #0xb8
- muls r0, r1, r0
- ldr r2, [sp, #8]
- adds r6, r2, r0
- ldrh r0, [r6]
- adds r2, r1, #1
- str r2, [sp, #0xc]
- cmp r0, #0
- beq _08000402
- lsls r0, r1, #2
- ldr r1, [sp]
- adds r0, r0, r1
- ldr r0, [r0]
- ldrh r5, [r0]
- adds r0, #2
- mov r2, ip
- str r0, [r2]
- lsls r0, r7, #3
- ldr r1, _08000424 @ =gOamBuffer
- adds r0, r0, r1
- str r0, [r2, #4]
- lsls r0, r5, #2
- movs r1, #0x80
- lsls r1, r1, #0x18
- orrs r0, r1
- str r0, [r2, #8]
- ldr r0, [r2, #8]
- movs r3, #0
- cmp r3, r5
- bhs _08000402
- ldr r2, _08000424 @ =gOamBuffer
- mov sb, r2
- ldr r0, _08000434 @ =0x000001FF
- mov sl, r0
- movs r1, #0xff
- mov r8, r1
-_080003D2:
- adds r2, r7, #0
- lsls r0, r2, #3
- mov r1, sb
- adds r4, r0, r1
- lsls r1, r3, #3
- adds r1, #8
- adds r1, r6, r1
- adds r0, r2, #1
- lsls r0, r0, #0x10
- lsrs r7, r0, #0x10
- strh r2, [r1]
- ldrh r2, [r4, #2]
- mov r0, sl
- ands r0, r2
- strh r0, [r1, #2]
- ldrh r2, [r4]
- mov r0, r8
- ands r0, r2
- strh r0, [r1, #4]
- adds r0, r3, #1
- lsls r0, r0, #0x10
- lsrs r3, r0, #0x10
- cmp r3, r5
- blo _080003D2
-_08000402:
- ldr r2, [sp, #0xc]
- lsls r0, r2, #0x10
- lsrs r1, r0, #0x10
- ldr r0, [sp, #4]
- cmp r1, r0
- blo _0800038A
-_0800040E:
- lsls r0, r7, #0x10
- asrs r0, r0, #0x10
- add sp, #0x10
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08000424: .4byte gOamBuffer
-_08000428: .4byte 0x040000D4
-_0800042C: .4byte gEmptyOamData
-_08000430: .4byte 0x80000200
-_08000434: .4byte 0x000001FF
-
- thumb_func_start sub_438
-sub_438: @ 0x08000438
- push {r4, r5, r6, lr}
- ldr r4, _0800048C @ =gMain
- ldrh r0, [r4, #0x16]
- movs r2, #0x80
- movs r6, #0
- movs r5, #0
- orrs r0, r2
- strh r0, [r4, #0x16]
- movs r1, #0x80
- lsls r1, r1, #0x13
- ldrh r0, [r1]
- orrs r0, r2
- strh r0, [r1]
- bl sub_490
- bl sub_518
- bl sub_578
- strb r6, [r4, #0xf]
- strb r6, [r4, #0x10]
- str r5, [r4, #0x50]
- strb r6, [r4, #0x11]
- strh r5, [r4, #0x12]
- strh r5, [r4, #0x14]
- movs r0, #0x90
- strh r0, [r4, #0x26]
- strh r5, [r4, #0x28]
- strh r5, [r4, #0x2a]
- adds r0, r4, #0
- adds r0, #0x36
- strb r6, [r0]
- ldrh r0, [r4, #0x38]
- strh r5, [r4, #0x38]
- ldrh r0, [r4, #0x3a]
- strh r5, [r4, #0x3a]
- ldrh r0, [r4, #0x3c]
- strh r5, [r4, #0x3c]
- strh r5, [r4, #0x2c]
- pop {r4, r5, r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800048C: .4byte gMain
-
- thumb_func_start sub_490
-sub_490: @ 0x08000490
- sub sp, #8
- mov r1, sp
- movs r0, #0
- strh r0, [r1]
- ldr r1, _08000504 @ =0x040000D4
- mov r0, sp
- str r0, [r1]
- movs r0, #0xc0
- lsls r0, r0, #0x13
- str r0, [r1, #4]
- ldr r0, _08000508 @ =0x8100C000
- str r0, [r1, #8]
- ldr r0, [r1, #8]
- movs r2, #0
- str r2, [sp, #4]
- add r0, sp, #4
- str r0, [r1]
- movs r0, #0xe0
- lsls r0, r0, #0x13
- str r0, [r1, #4]
- ldr r0, _0800050C @ =0x85000100
- str r0, [r1, #8]
- ldr r0, [r1, #8]
- mov r0, sp
- strh r2, [r0]
- str r0, [r1]
- movs r0, #0xa0
- lsls r0, r0, #0x13
- str r0, [r1, #4]
- ldr r0, _08000510 @ =0x81000200
- str r0, [r1, #8]
- ldr r0, [r1, #8]
- ldr r0, _08000514 @ =0x04000010
- strh r2, [r0]
- adds r0, #2
- strh r2, [r0]
- adds r0, #2
- strh r2, [r0]
- adds r0, #2
- strh r2, [r0]
- adds r0, #2
- strh r2, [r0]
- adds r0, #2
- strh r2, [r0]
- adds r0, #2
- strh r2, [r0]
- adds r0, #2
- strh r2, [r0]
- adds r0, #0x32
- strh r2, [r0]
- adds r0, #4
- strh r2, [r0]
- subs r0, #0x50
- strh r2, [r0]
- adds r0, #0x4e
- strh r2, [r0]
- add sp, #8
- bx lr
- .align 2, 0
-_08000504: .4byte 0x040000D4
-_08000508: .4byte 0x8100C000
-_0800050C: .4byte 0x85000100
-_08000510: .4byte 0x81000200
-_08000514: .4byte 0x04000010
-
- thumb_func_start sub_518
-sub_518: @ 0x08000518
- push {r4, r5, r6, lr}
- sub sp, #4
- mov r1, sp
- movs r0, #0
- strh r0, [r1]
- ldr r1, _08000564 @ =0x040000D4
- mov r0, sp
- str r0, [r1]
- ldr r0, _08000568 @ =0x03005C00
- str r0, [r1, #4]
- ldr r0, _0800056C @ =0x81000600
- str r0, [r1, #8]
- ldr r0, [r1, #8]
- movs r1, #0
- ldr r6, _08000570 @ =gMain
- movs r5, #0xba
- lsls r5, r5, #2
- movs r3, #0
- ldr r4, _08000574 @ =0x000002EA
-_0800053E:
- lsls r0, r1, #0x10
- asrs r0, r0, #0x10
- lsls r1, r0, #2
- adds r1, r1, r6
- adds r2, r1, r5
- strh r3, [r2]
- adds r1, r1, r4
- strh r3, [r1]
- adds r0, #1
- lsls r0, r0, #0x10
- lsrs r1, r0, #0x10
- asrs r0, r0, #0x10
- cmp r0, #3
- ble _0800053E
- add sp, #4
- pop {r4, r5, r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08000564: .4byte 0x040000D4
-_08000568: .4byte 0x03005C00
-_0800056C: .4byte 0x81000600
-_08000570: .4byte gMain
-_08000574: .4byte 0x000002EA
-
- thumb_func_start sub_578
-sub_578: @ 0x08000578
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- movs r5, #0
- ldr r6, _08000660 @ =gMain
- movs r0, #0xb8
- mov sb, r0
- movs r4, #0
- movs r1, #0xc0
- lsls r1, r1, #2
- mov r8, r1
- ldr r3, _08000664 @ =0x00000302
- mov ip, r3
- movs r7, #0xc1
- lsls r7, r7, #2
- mov sl, r7
-_0800059C:
- mov r2, sb
- muls r2, r5, r2
- adds r1, r2, r6
- movs r3, #0xbe
- lsls r3, r3, #2
- adds r0, r1, r3
- strh r4, [r0]
- ldr r7, _08000668 @ =0x000002FA
- adds r0, r1, r7
- strh r4, [r0]
- movs r0, #0xbf
- lsls r0, r0, #2
- adds r1, r1, r0
- strh r4, [r1]
- movs r3, #0
-_080005BA:
- lsls r0, r3, #3
- adds r0, r0, r2
- adds r0, r0, r6
- mov r7, r8
- adds r1, r0, r7
- strh r4, [r1]
- mov r7, ip
- adds r1, r0, r7
- strh r4, [r1]
- add r0, sl
- strh r4, [r0]
- adds r0, r3, #1
- lsls r0, r0, #0x10
- lsrs r3, r0, #0x10
- cmp r3, #0x15
- bls _080005BA
- adds r0, r5, #1
- lsls r0, r0, #0x10
- lsrs r5, r0, #0x10
- cmp r5, #0x63
- bls _0800059C
- movs r5, #0
- mov sl, r5
- movs r0, #0xd
- rsbs r0, r0, #0
- mov ip, r0
- movs r1, #0x11
- rsbs r1, r1, #0
- mov sb, r1
- movs r3, #0x21
- rsbs r3, r3, #0
- mov r8, r3
- movs r4, #0x3f
- ldr r6, _0800066C @ =0xFFFFFE00
- adds r3, #0x12
-_08000600:
- lsls r2, r5, #3
- ldr r7, _08000670 @ =gOamBuffer
- adds r2, r2, r7
- movs r0, #0xf4
- strb r0, [r2]
- movs r0, #0
- strb r0, [r2, #1]
- ldrh r1, [r2, #2]
- adds r0, r6, #0
- ands r0, r1
- movs r7, #0xfa
- lsls r7, r7, #1
- adds r1, r7, #0
- orrs r0, r1
- strh r0, [r2, #2]
- ldrb r1, [r2, #3]
- adds r0, r3, #0
- ands r0, r1
- mov r1, sb
- ands r0, r1
- mov r7, r8
- ands r0, r7
- ands r0, r4
- strb r0, [r2, #3]
- ldrh r1, [r2, #4]
- ldr r0, _08000674 @ =0xFFFFFC00
- ands r0, r1
- strh r0, [r2, #4]
- ldrb r1, [r2, #5]
- mov r0, ip
- ands r0, r1
- movs r1, #0xf
- ands r0, r1
- strb r0, [r2, #5]
- mov r0, sl
- strh r0, [r2, #6]
- adds r0, r5, #1
- lsls r0, r0, #0x10
- lsrs r5, r0, #0x10
- cmp r5, #0x7f
- bls _08000600
- 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
-_08000660: .4byte gMain
-_08000664: .4byte 0x00000302
-_08000668: .4byte 0x000002FA
-_0800066C: .4byte 0xFFFFFE00
-_08000670: .4byte gOamBuffer
-_08000674: .4byte 0xFFFFFC00
-
- thumb_func_start sub_678
-sub_678: @ 0x08000678
- push {r4, r5, r6, lr}
- adds r6, r0, #0
- adds r4, r1, #0
- adds r5, r2, #0
- lsls r4, r4, #0x10
- lsrs r4, r4, #0x10
- lsls r5, r5, #0x10
- lsrs r5, r5, #0x10
- bl sub_55A24
- subs r0, #1
- lsls r0, r0, #0x10
- lsrs r2, r0, #0x10
- lsls r4, r4, #0x10
- asrs r4, r4, #0xb
- lsls r5, r5, #0x10
- asrs r5, r5, #0x10
- adds r4, r4, r5
- lsls r4, r4, #1
- ldr r0, _080006C4 @ =0x03005C00
- adds r4, r4, r0
-_080006A2:
- ldrb r0, [r6]
- subs r0, #0x20
- strh r0, [r4]
- adds r6, #1
- adds r4, #2
- adds r1, r2, #0
- lsls r0, r1, #0x10
- ldr r2, _080006C8 @ =0xFFFF0000
- adds r0, r0, r2
- lsrs r2, r0, #0x10
- lsls r1, r1, #0x10
- cmp r1, #0
- bgt _080006A2
- pop {r4, r5, r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080006C4: .4byte 0x03005C00
-_080006C8: .4byte 0xFFFF0000
-
- thumb_func_start sub_6CC
-sub_6CC: @ 0x080006CC
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- adds r6, r0, #0
- adds r5, r1, #0
- adds r4, r2, #0
- lsls r3, r3, #0x10
- lsrs r3, r3, #0x10
- cmp r6, #0
- bge _080006E8
- movs r0, #0x2d
- strb r0, [r5]
- adds r5, #1
- rsbs r6, r6, #0
-_080006E8:
- lsls r7, r3, #0x10
- movs r0, #0x30
- mov r8, r0
-_080006EE:
- cmp r4, #1
- ble _08000708
- subs r4, #1
- movs r0, #0xa
- adds r1, r4, #0
- bl sub_780
- cmp r6, r0
- bge _08000708
- mov r0, r8
- strb r0, [r5]
- adds r5, #1
- b _080006EE
-_08000708:
- asrs r4, r7, #0x10
- cmp r4, #0
- beq _0800071A
- adds r0, r6, #0
- adds r1, r5, #0
- movs r2, #0xa
- bl sub_734
- b _08000726
-_0800071A:
- adds r0, r6, #0
- adds r1, r5, #0
- movs r2, #0xa
- bl sub_734
- strb r4, [r0]
-_08000726:
- adds r0, r5, #0
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7}
- pop {r1}
- bx r1
-
- thumb_func_start sub_734
-sub_734: @ 0x08000734
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- adds r4, r0, #0
- adds r7, r1, #0
- adds r6, r2, #0
- adds r1, r6, #0
- bl __umodsi3
- lsls r0, r0, #0x18
- lsrs r5, r0, #0x18
- mov r8, r5
- adds r0, r4, #0
- adds r1, r6, #0
- bl __udivsi3
- cmp r0, #0
- beq _08000762
- adds r1, r7, #0
- adds r2, r6, #0
- bl sub_734
- adds r7, r0, #0
-_08000762:
- cmp r5, #9
- bhi _0800076C
- adds r0, r5, #0
- adds r0, #0x30
- b _08000770
-_0800076C:
- mov r0, r8
- adds r0, #0x57
-_08000770:
- strb r0, [r7]
- adds r0, r7, #1
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7}
- pop {r1}
- bx r1
-
- thumb_func_start sub_780
-sub_780: @ 0x08000780
- push {r4, r5, lr}
- adds r3, r0, #0
- adds r2, r1, #0
- cmp r1, #0
- bge _0800078C
- rsbs r2, r1, #0
-_0800078C:
- movs r4, #1
- cmp r2, #0
- beq _080007AA
- movs r5, #1
-_08000794:
- adds r0, r2, #0
- ands r0, r5
- cmp r0, #0
- beq _0800079E
- muls r4, r3, r4
-_0800079E:
- adds r0, r3, #0
- muls r0, r3, r0
- adds r3, r0, #0
- asrs r2, r2, #1
- cmp r2, #0
- bne _08000794
-_080007AA:
- cmp r1, #0
- bge _080007B8
- movs r0, #1
- adds r1, r4, #0
- bl __divsi3
- b _080007BA
-_080007B8:
- adds r0, r4, #0
-_080007BA:
- pop {r4, r5}
- pop {r1}
- bx r1
-
thumb_func_start sub_7C0
sub_7C0: @ 0x080007C0
push {r4, r5, r6, lr}
diff --git a/asm/rom_25A4.s b/asm/rom_25A4.s
index b273117..3c41293 100755
--- a/asm/rom_25A4.s
+++ b/asm/rom_25A4.s
@@ -571,7 +571,7 @@ _08002A3C:
mov r0, ip
movs r1, #0x10
ldr r2, _08002C3C @ =0x0200B3B8
- bl sub_358
+ bl LoadSpriteSets
movs r1, #0
_08002A70:
lsls r2, r1, #2
diff --git a/asm/rom_2C58.s b/asm/rom_2C58.s
index 98f28f6..da52ca9 100755
--- a/asm/rom_2C58.s
+++ b/asm/rom_2C58.s
@@ -1550,7 +1550,7 @@ sub_394C: @ 0x0800394C
strh r0, [r1]
ldr r0, _080039B0 @ =0x086A54D8
movs r1, #0xd
- bl sub_358
+ bl LoadSpriteSets
ldrh r0, [r7]
cmp r0, #1
bne _08003A18
diff --git a/asm/titlescreen.s b/asm/titlescreen.s
index 6bb72f2..a5cb4dc 100755
--- a/asm/titlescreen.s
+++ b/asm/titlescreen.s
@@ -30,7 +30,7 @@ sub_11640: @ 0x08011640
ldr r5, _0801174C @ =0x086A96E4
adds r0, r5, #0
movs r1, #5
- bl sub_358
+ bl LoadSpriteSets
ldrh r0, [r7]
cmp r0, #1
bne _080116DC
@@ -203,7 +203,7 @@ sub_1175C: @ 0x0801175C
ldr r4, _08011820 @ =0x0201C190
adds r0, r4, #0
movs r1, #7
- bl sub_358
+ bl LoadSpriteSets
ldrh r0, [r6]
cmp r0, #1
bne _0801187C
@@ -461,7 +461,7 @@ sub_11968: @ 0x08011968
ldr r4, _08011A2C @ =0x0202BE00
adds r0, r4, #0
movs r1, #7
- bl sub_358
+ bl LoadSpriteSets
ldrh r0, [r6]
cmp r0, #1
bne _08011A88
diff --git a/include/gba/types.h b/include/gba/types.h
index a7dbf3e..31f53ce 100755
--- a/include/gba/types.h
+++ b/include/gba/types.h
@@ -57,7 +57,9 @@ struct OamData
u32 shape:2; // 0x40, 0x80 -> 0xC0
/*0x02*/ u32 x:9;
- u32 matrixNum:5; // bits 3/4 are h-flip/v-flip if not in affine mode
+ u32 matrixNum:3; // This is not using its full 5 bits?
+ u32 hFlip:1;
+ u32 vFlip:1;
u32 size:2;
/*0x04*/ u16 tileNum:10; // 0x3FF
diff --git a/include/main.h b/include/main.h
index 2eb4842..1e47a6a 100755
--- a/include/main.h
+++ b/include/main.h
@@ -3,8 +3,39 @@
#include "global.h"
+#define NUM_SPRITE_GROUPS 100
+#define MAX_SPRITES_IN_GROUP 22
+
typedef void (*StateFunc)(void);
+struct MainUnk2E8
+{
+ u16 unk0;
+ u16 unk2;
+};
+
+struct SpriteSet
+{
+ u16 count;
+ u8 oamData[0];
+};
+
+struct OamDataSimple
+{
+ u16 oamId;
+ u16 xOffset;
+ u16 yOffset;
+};
+
+struct SpriteGroup
+{
+ u16 available;
+ u16 baseX;
+ u16 baseY;
+ struct OamDataSimple oam[MAX_SPRITES_IN_GROUP];
+};
+// size: 0xB8
+
struct Main
{
/*0x00*/ u8 filler0[0x2];
@@ -12,37 +43,46 @@ struct Main
/*0x03*/ u8 subState;
/*0x04*/ u8 filler4[0x9];
/*0x0D*/ u8 unkD;
- /*0x0E*/ u8 fillerE[0x8];
+ /*0x0E*/ u8 fillerE[0x1];
+ /*0x0F*/ u8 unkF;
+ /*0x10*/ u8 unk10;
+ /*0x11*/ u8 unk11;
+ /*0x12*/ s16 unk12;
+ /*0x14*/ s16 unk14;
/*0x16*/ u16 unk16;
/*0x18*/ u16 newKeys;
/*0x1A*/ u16 releasedKeys;
/*0x1C*/ u16 heldKeys;
- /*0x1E*/ u8 filler1E[0x22];
+ /*0x1E*/ u8 filler1E[0x8];
+ /*0x26*/ u16 unk26;
+ /*0x28*/ u16 unk28;
+ /*0x2A*/ u16 unk2A;
+ /*0x2C*/ u16 unk2C;
+ /*0x2E*/ u8 filler2E[0x8];
+ /*0x36*/ u8 unk36;
+ /*0x38*/ volatile u16 unk38;
+ /*0x3A*/ volatile u16 unk3A;
+ /*0x3C*/ volatile u16 unk3C;
/*0x40*/ int unk40;
-};
-
-struct Unk0200B3B8_2
-{
-
-};
-
-struct Unk0200B3B8
-{
- u16 unk0;
- u16 unk2;
- u16 unk4;
- u8 filler6[0x2];
- u16 unk8;
- u8 fillerA[0xAE];
+ /*0x44*/ u8 filler44[0xC];
+ /*0x50*/ int unk50;
+ /*0x54*/ u8 filler54[0x294];
+ /*0x2E8*/ struct MainUnk2E8 unk2E8[4];
+ /*0x2F8*/ struct SpriteGroup spriteGroups[NUM_SPRITE_GROUPS];
};
extern struct Main gMain;
-extern struct Unk0200B3B8 gUnknown_0200B3B8[];
+extern struct SpriteGroup gUnknown_0200B3B8[];
extern StateFunc gMainFuncs[];
+extern struct OamData gOamBuffer[128];
+extern u16 gUnknown_03005C00[0x600];
void SetMainGameState(u16);
void sub_24C(void);
void sub_2B4(void);
+void sub_490(void);
+void sub_518(void);
+void sub_578(void);
void sub_D74(void);
#endif // GUARD_MAIN_H
diff --git a/src/main.c b/src/main.c
index 6d6f4f4..e3571a1 100755
--- a/src/main.c
+++ b/src/main.c
@@ -1,6 +1,12 @@
#include "global.h"
#include "main.h"
+extern const struct OamData gEmptyOamData[128];
+extern int sub_55A24(u8*); // Rumble Pak?
+
+static u8 *sub_734(u32, u8*, u32);
+static int sub_780(int, int);
+
void SetMainGameState(u16 mainState)
{
gMain.mainState = mainState;
@@ -58,3 +64,238 @@ void sub_2B4(void)
REG_BLDCNT = 0;
REG_BLDY = 0;
}
+
+s16 LoadSpriteSets(const struct SpriteSet **spriteSets, u16 numSpriteSets, struct SpriteGroup *spriteGroups)
+{
+ u16 i, j;
+ struct SpriteGroup *spriteGroup;
+ struct OamDataSimple *oamSimple;
+ u16 *oamData = (u16 *)(&gOamBuffer[0]);
+ u16 loadedCount = 0;
+
+ DmaCopy16(3, gEmptyOamData, oamData, sizeof(gEmptyOamData));
+ for (i = 0; i < numSpriteSets; i++)
+ {
+ spriteGroup = &spriteGroups[i];
+ if (spriteGroup->available)
+ {
+ u16 curSpriteSetCount = spriteSets[i]->count;
+ DmaCopy16(3, spriteSets[i]->oamData, &gOamBuffer[loadedCount], curSpriteSetCount * sizeof(struct OamData));
+ for (j = 0; j < curSpriteSetCount; j++)
+ {
+ oamData = (u16 *)(&gOamBuffer[loadedCount]);
+ oamSimple = &spriteGroup->oam[j];
+ oamSimple->oamId = loadedCount++;
+ oamSimple->xOffset = oamData[1] & 0x1FF;
+ oamSimple->yOffset = oamData[0] & 0xFF;
+ }
+ }
+ }
+
+ return loadedCount;
+}
+
+void sub_438(void)
+{
+ gMain.unk16 |= DISPCNT_FORCED_BLANK;
+ REG_DISPCNT |= DISPCNT_FORCED_BLANK;
+ sub_490();
+ sub_518();
+ sub_578();
+ gMain.unkF = 0;
+ gMain.unk10 = 0;
+ gMain.unk50 = 0;
+ gMain.unk11 = 0;
+ gMain.unk12 = 0;
+ gMain.unk14 = 0;
+ gMain.unk26 = 0x90;
+ gMain.unk28 = 0;
+ gMain.unk2A = 0;
+ gMain.unk36 = 0;
+ gMain.unk38 = 0;
+ gMain.unk3A = 0;
+ gMain.unk3C = 0;
+ gMain.unk2C = 0;
+}
+
+void sub_490(void)
+{
+ DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE);
+ DmaFill32(3, 0, (void *)OAM, OAM_SIZE);
+ DmaFill16(3, 0, (void *)PLTT, BG_PLTT_SIZE + OBJ_PLTT_SIZE);
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
+ REG_BLDCNT = 0;
+ REG_BLDY = 0;
+ REG_DISPSTAT = 0;
+ REG_BLDALPHA = 0;
+}
+
+void sub_518(void)
+{
+ s16 i;
+
+ DmaFill16(3, 0, gUnknown_03005C00, sizeof(gUnknown_03005C00));
+ for (i = 0; i < 4; i++)
+ {
+ gMain.unk2E8[i].unk0 = 0;
+ gMain.unk2E8[i].unk2 = 0;
+ }
+}
+
+void sub_578(void)
+{
+ u16 i, j;
+
+ for (i = 0; i < NUM_SPRITE_GROUPS; i++)
+ {
+ gMain.spriteGroups[i].available = 0;
+ gMain.spriteGroups[i].baseX = 0;
+ gMain.spriteGroups[i].baseY = 0;
+ for (j = 0; j < MAX_SPRITES_IN_GROUP; j++)
+ {
+ gMain.spriteGroups[i].oam[j].oamId = 0;
+ gMain.spriteGroups[i].oam[j].xOffset = 0;
+ gMain.spriteGroups[i].oam[j].yOffset = 0;
+ }
+ }
+
+ for (i = 0; i < 128; i++)
+ {
+ gOamBuffer[i].y = 244;
+ gOamBuffer[i].affineMode = 0;
+ gOamBuffer[i].objMode = 0;
+ gOamBuffer[i].mosaic = 0;
+ gOamBuffer[i].bpp = 0;
+ gOamBuffer[i].shape = 0;
+ gOamBuffer[i].x = 500;
+ gOamBuffer[i].matrixNum = 0;
+ gOamBuffer[i].hFlip = 0;
+ gOamBuffer[i].vFlip = 0;
+ gOamBuffer[i].size = 0;
+ gOamBuffer[i].tileNum = 0;
+ gOamBuffer[i].priority = 0;
+ gOamBuffer[i].paletteNum = 0;
+ gOamBuffer[i].affineParam = 0;
+ }
+}
+
+void sub_678(u8 *arg0, s16 arg1, s16 arg2)
+{
+ // Rumble Pak related?
+ s16 var0 = sub_55A24(arg0) - 1;
+ u16 *dest = &gUnknown_03005C00[arg1 * 32 + arg2];
+ do
+ {
+ *dest = (*arg0) - 32;
+ arg0++;
+ dest++;
+ } while (var0-- > 0);
+}
+
+u8 *sub_6CC(int arg0, u8 *arg1, int arg2, s16 arg3)
+{
+ if (arg0 < 0)
+ {
+ *arg1 = 0x2D;
+ arg1++;
+ arg0 = -arg0;
+ }
+
+ while (1)
+ {
+ if (arg2 < 2)
+ break;
+
+ arg2--;
+ if (arg0 < sub_780(10, arg2))
+ {
+ *arg1 = 0x30;
+ arg1++;
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ if (arg3)
+ {
+ sub_734(arg0, arg1, 10);
+ }
+ else
+ {
+ u8 *ptr = sub_734(arg0, arg1, 10);
+ *ptr = 0;
+ }
+
+ return arg1;
+}
+
+static u8 *sub_734(u32 arg0, u8 *arg1, u32 arg2)
+{
+ u8 mod = arg0 % arg2;
+ int div = arg0 / arg2;
+ if (div != 0)
+ arg1 = sub_734(div, arg1, arg2);
+
+ if (mod < 10)
+ *arg1 = mod + 48;
+ else
+ *arg1 = mod + 87;
+
+ return arg1 + 1;
+}
+
+static int sub_780(int arg0, int arg1)
+{
+ int var0;
+ int var1 = arg1;
+
+ if (arg1 < 0)
+ var1 = -var1;
+
+ var0 = 1;
+ while (var1)
+ {
+ if (var1 & 1)
+ var0 *= arg0;
+
+ arg0 *= arg0;
+ var1 >>= 1;
+ }
+
+ if (arg1 >= 0)
+ return var0;
+ else
+ return 1 / var0;
+}
+
+// struct OamMatrix
+// {
+// s16 a;
+// s16 b;
+// s16 c;
+// s16 d;
+// };
+//
+// void sub_7C0(s16 arg0, s16 arg1, s16 matrixNum)
+// {
+// u16 a = 0x10000 / arg0;
+// u16 d = 0x10000 / arg1;
+// volatile s16 a2 = a;
+// volatile s16 b2 = 0;
+// volatile s16 c2 = 0;
+// volatile s16 d2 = d;
+
+// gOamBuffer[matrixNum * 4 ].affineParam = a2;
+// gOamBuffer[matrixNum * 4 + 1].affineParam = b2;
+// gOamBuffer[matrixNum * 4 + 2].affineParam = c2;
+// gOamBuffer[matrixNum * 4 + 3].affineParam = d;
+// }
diff --git a/sym_bss.txt b/sym_bss.txt
index b1343d6..fe78a61 100755
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -3,7 +3,12 @@ gUnknown_03000000: @ 0x3000000
.space 0x5000
gOamBuffer: @ 0x3005000
- .space 0x2400
+ .space 0xC00
+
+gUnknown_03005C00: @ 0x3005C00
+ .space 0xC00
+
+ .space 0xC00
SoundMainRAM_Buffer: @ 0x3007400
.space 0x800