summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhuderlem <huderlem@gmail.com>2019-08-08 07:14:26 -0500
committerGitHub <noreply@github.com>2019-08-08 07:14:26 -0500
commit4c8669a3aad601f1381ca9c67c78040ce80157df (patch)
tree9159d3545978aa61ee210af5c66c09d3893f9e54
parent08bd3049160f9a6d05aa680a3106854015798f58 (diff)
parent254f7f6a218d68ced40fdf5f08b3e63d272981fc (diff)
Merge pull request #7 from camthesaxman/misc
decompile rom_1068C.s and rom_528AC.s
-rwxr-xr-x.gitignore2
-rwxr-xr-xMakefile8
-rwxr-xr-xasm/bonus_field_select.s4
-rwxr-xr-xasm/field_select.s4
-rwxr-xr-xasm/high_scores.s24
-rwxr-xr-xasm/options.s26
-rwxr-xr-xasm/pokedex.s16
-rwxr-xr-xasm/rom_1068C.s348
-rwxr-xr-xasm/rom_11B9C.s16
-rwxr-xr-xasm/rom_3219C.s8
-rwxr-xr-xasm/rom_528AC.s529
-rwxr-xr-xdata/rom.s32
-rw-r--r--include/functions.h32
-rwxr-xr-xinclude/main.h25
-rwxr-xr-xinclude/titlescreen.h2
-rw-r--r--include/variables.h8
-rwxr-xr-xld_script.txt4
-rwxr-xr-xsrc/gbplayer.c1
-rw-r--r--src/rom_1068C.c124
-rwxr-xr-xsrc/rom_3219C.c16
-rw-r--r--src/rom_528AC.c254
-rwxr-xr-xsrc/titlescreen.c149
22 files changed, 584 insertions, 1048 deletions
diff --git a/.gitignore b/.gitignore
index e1b1201..bf28bd3 100755
--- a/.gitignore
+++ b/.gitignore
@@ -28,3 +28,5 @@ build/
.DS_Store
*.ddump
baserom.*
+*.swp
+
diff --git a/Makefile b/Makefile
index f6b6a80..eb7b0a4 100755
--- a/Makefile
+++ b/Makefile
@@ -105,6 +105,8 @@ include graphics_rules.mk
$(C_BUILDDIR)/rom_850.o: CC1 := tools/agbcc/bin/old_agbcc
$(C_BUILDDIR)/gbplayer.o: CC1 := tools/agbcc/bin/old_agbcc
+#$(C_BUILDDIR)/rom_528AC.o: CC1 := tools/agbcc/bin/old_agbcc
+
$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc
$(C_BUILDDIR)/libc.o: CFLAGS := -O2
@@ -122,9 +124,9 @@ $(C_BUILDDIR)/%.o: c_dep :=
endif
$(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep)
- @$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i
- @$(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(C_BUILDDIR)/$*.s
- @echo -e ".text\n\t.align\t2, 0\n" >> $(C_BUILDDIR)/$*.s
+ $(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i
+ $(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(C_BUILDDIR)/$*.s
+ echo -e ".text\n\t.align\t2, 0\n" >> $(C_BUILDDIR)/$*.s
$(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s
ifeq ($(NODEP),)
diff --git a/asm/bonus_field_select.s b/asm/bonus_field_select.s
index cea2519..331e00b 100755
--- a/asm/bonus_field_select.s
+++ b/asm/bonus_field_select.s
@@ -179,7 +179,7 @@ sub_2710: @ 0x08002710
ldr r0, _0800275C @ =gUnknown_0202BEE4
strb r1, [r0]
ldr r1, _08002760 @ =gUnknown_0201A4C0
- ldr r0, _08002764 @ =gUnknown_0200B134
+ ldr r0, _08002764 @ =gMain+0x74
adds r0, #0xce
ldrb r0, [r0]
strb r0, [r1]
@@ -194,7 +194,7 @@ _08002754: .4byte gUnknown_0201A4F4
_08002758: .4byte gUnknown_0201A4B0
_0800275C: .4byte gUnknown_0202BEE4
_08002760: .4byte gUnknown_0201A4C0
-_08002764: .4byte gUnknown_0200B134
+_08002764: .4byte gMain+0x74
thumb_func_start sub_2768
sub_2768: @ 0x08002768
diff --git a/asm/field_select.s b/asm/field_select.s
index 665ab73..f789dbf 100755
--- a/asm/field_select.s
+++ b/asm/field_select.s
@@ -175,7 +175,7 @@ sub_8C38: @ 0x08008C38
strh r1, [r2, #0x16]
strh r1, [r2, #0x12]
strb r3, [r2, #0x14]
- ldr r0, _08008C74 @ =gUnknown_0200B134
+ ldr r0, _08008C74 @ =gMain+0x74
adds r1, r0, #0
adds r1, #0xce
ldrb r1, [r1]
@@ -187,7 +187,7 @@ sub_8C38: @ 0x08008C38
bx lr
.align 2, 0
_08008C70: .4byte gUnknown_02002838
-_08008C74: .4byte gUnknown_0200B134
+_08008C74: .4byte gMain+0x74
_08008C78: .4byte gUnknown_02002850
thumb_func_start sub_8C7C
diff --git a/asm/high_scores.s b/asm/high_scores.s
index 225b4bc..2c93e68 100755
--- a/asm/high_scores.s
+++ b/asm/high_scores.s
@@ -187,7 +187,7 @@ sub_CFD4: @ 0x0800CFD4
mov r8, r0
ldr r1, _0800D0B4 @ =gUnknown_0202C610
mov sl, r1
- ldr r2, _0800D0B8 @ =gUnknown_0200B134
+ ldr r2, _0800D0B8 @ =gMain+0x74
mov sb, r2
movs r3, #0
mov ip, r3
@@ -296,7 +296,7 @@ _0800D090:
.align 2, 0
_0800D0B0: .4byte gUnknown_02002858
_0800D0B4: .4byte gUnknown_0202C610
-_0800D0B8: .4byte gUnknown_0200B134
+_0800D0B8: .4byte gMain+0x74
_0800D0BC: .4byte gUnknown_0202C550
_0800D0C0: .4byte gUnknown_0201B178
_0800D0C4: .4byte gUnknown_0202BEBC
@@ -1282,7 +1282,7 @@ _0800D880:
cmp r3, #3
ble _0800D880
movs r3, #0
- ldr r0, _0800D908 @ =gUnknown_0200B134
+ ldr r0, _0800D908 @ =gMain+0x74
mov r8, r0
ldr r1, _0800D8F8 @ =gUnknown_0202C610
mov ip, r1
@@ -1330,7 +1330,7 @@ _0800D8F8: .4byte gUnknown_0202C610
_0800D8FC: .4byte gMain
_0800D900: .4byte gUnknown_02002858
_0800D904: .4byte gUnknown_0201A500
-_0800D908: .4byte gUnknown_0200B134
+_0800D908: .4byte gMain+0x74
_0800D90C:
movs r0, #0x6a
bl m4aSongNumStart
@@ -1735,7 +1735,7 @@ _0800DC3C:
ldr r1, _0800DCDC @ =gUnknown_0201B170
str r0, [r1]
movs r2, #0
- ldr r3, _0800DCE0 @ =gUnknown_0200B134
+ ldr r3, _0800DCE0 @ =gMain+0x74
mov r8, r3
ldr r7, _0800DCE4 @ =gUnknown_0202C610
mov ip, r7
@@ -1795,7 +1795,7 @@ _0800DCD0: .4byte gUnknown_0201B178
_0800DCD4: .4byte gUnknown_0202BEBC
_0800DCD8: .4byte gUnknown_0202BED8
_0800DCDC: .4byte gUnknown_0201B170
-_0800DCE0: .4byte gUnknown_0200B134
+_0800DCE0: .4byte gMain+0x74
_0800DCE4: .4byte gUnknown_0202C610
_0800DCE8: .4byte gMain
_0800DCEC: .4byte gUnknown_02002858
@@ -5054,7 +5054,7 @@ sub_F6E0: @ 0x0800F6E0
movs r0, #0
strb r0, [r1]
movs r2, #0
- ldr r0, _0800F744 @ =gUnknown_0200B134
+ ldr r0, _0800F744 @ =gMain+0x74
mov r8, r0
ldr r3, _0800F748 @ =gUnknown_08079430
mov ip, r3
@@ -5099,7 +5099,7 @@ _0800F718:
bx r0
.align 2, 0
_0800F740: .4byte gUnknown_0202BEB0
-_0800F744: .4byte gUnknown_0200B134
+_0800F744: .4byte gMain+0x74
_0800F748: .4byte gUnknown_08079430
thumb_func_start sub_F74C
@@ -5112,7 +5112,7 @@ sub_F74C: @ 0x0800F74C
sub sp, #0x14
movs r0, #0
mov r8, r0
- ldr r1, _0800F85C @ =gUnknown_0200B134
+ ldr r1, _0800F85C @ =gMain+0x74
str r1, [sp]
_0800F760:
bl Random
@@ -5229,7 +5229,7 @@ _0800F834:
bl Random
b _0800F872
.align 2, 0
-_0800F85C: .4byte gUnknown_0200B134
+_0800F85C: .4byte gMain+0x74
_0800F860: .4byte gUnknown_0200B218
_0800F864: .4byte gUnknown_0200B22C
_0800F868:
@@ -5838,7 +5838,7 @@ _0800FD1C: .4byte 0x00000914
sub_FD20: @ 0x0800FD20
sub sp, #0x19c
movs r2, #0
- ldr r3, _0800FD48 @ =gUnknown_0200B134
+ ldr r3, _0800FD48 @ =gMain+0x74
mov r1, sp
_0800FD28:
adds r0, r2, r3
@@ -5858,7 +5858,7 @@ _0800FD3A:
movs r0, #0
b _0800FD56
.align 2, 0
-_0800FD48: .4byte gUnknown_0200B134
+_0800FD48: .4byte gMain+0x74
_0800FD4C:
adds r1, #2
adds r2, #1
diff --git a/asm/options.s b/asm/options.s
index 9f4587b..438dee1 100755
--- a/asm/options.s
+++ b/asm/options.s
@@ -196,7 +196,7 @@ sub_513B8: @ 0x080513B8
strh r0, [r4, #6]
strh r1, [r4, #8]
strh r1, [r4, #0xa]
- ldr r0, _0805146C @ =gUnknown_0200B134
+ ldr r0, _0805146C @ =gMain+0x74
adds r0, #0xcf
ldrb r0, [r0]
strh r0, [r4, #0xc]
@@ -263,7 +263,7 @@ _08051432:
cmp r4, #1
bne _0805147C
ldr r3, _08051468 @ =gUnknown_02002920
- ldr r0, _0805146C @ =gUnknown_0200B134
+ ldr r0, _0805146C @ =gMain+0x74
adds r0, #0xcd
ldrb r1, [r0]
adds r2, r3, #0
@@ -274,7 +274,7 @@ _08051432:
b _0805148C
.align 2, 0
_08051468: .4byte gUnknown_02002920
-_0805146C: .4byte gUnknown_0200B134
+_0805146C: .4byte gMain+0x74
_08051470: .4byte gUnknown_02031AF0
_08051474: .4byte gUnknown_08527ED6
_08051478: .4byte gGameBoyPlayerEnabled
@@ -284,7 +284,7 @@ _0805147C:
adds r0, #0x2a
movs r1, #0
strb r1, [r0]
- ldr r0, _080514B4 @ =gUnknown_0200B134
+ ldr r0, _080514B4 @ =gMain+0x74
adds r0, #0xcd
strb r1, [r0]
_0805148C:
@@ -307,7 +307,7 @@ _0805148C:
bx r0
.align 2, 0
_080514B0: .4byte gUnknown_02002920
-_080514B4: .4byte gUnknown_0200B134
+_080514B4: .4byte gMain+0x74
thumb_func_start sub_514B8
sub_514B8: @ 0x080514B8
@@ -550,13 +550,13 @@ _080516B0:
ldrh r1, [r0, #0xa]
subs r1, #2
strh r1, [r0, #0xc]
- ldr r0, _080516CC @ =gUnknown_0200B134
+ ldr r0, _080516CC @ =gMain+0x74
adds r0, #0xcf
strb r1, [r0]
b _08051A96
.align 2, 0
_080516C8: .4byte gUnknown_02002920
-_080516CC: .4byte gUnknown_0200B134
+_080516CC: .4byte gMain+0x74
_080516D0:
movs r0, #0x65
bl m4aSongNumStart
@@ -564,7 +564,7 @@ _080516D0:
ldrh r1, [r2, #0xa]
subs r1, #2
strh r1, [r2, #0xc]
- ldr r0, _080516F4 @ =gUnknown_0200B134
+ ldr r0, _080516F4 @ =gMain+0x74
adds r0, #0xcf
strb r1, [r0]
movs r0, #7
@@ -574,7 +574,7 @@ _080516D0:
b _08051A96
.align 2, 0
_080516F0: .4byte gUnknown_02002920
-_080516F4: .4byte gUnknown_0200B134
+_080516F4: .4byte gMain+0x74
_080516F8:
ldr r0, _08051730 @ =gGameBoyPlayerEnabled
ldr r0, [r0]
@@ -1125,7 +1125,7 @@ _08051B0E:
adds r0, r0, r2
ldrh r1, [r4, #0x26]
strb r1, [r0]
- ldr r2, _08051C04 @ =gUnknown_0200B134
+ ldr r2, _08051C04 @ =gMain+0x74
movs r0, #0xa
ldrsh r1, [r4, r0]
subs r1, #7
@@ -1216,7 +1216,7 @@ _08051BF4: .4byte gUnknown_02002920
_08051BF8: .4byte gMain
_08051BFC: .4byte 0x000003F7
_08051C00: .4byte gUnknown_02031AF0
-_08051C04: .4byte gUnknown_0200B134
+_08051C04: .4byte gMain+0x74
_08051C08: .4byte gUnknown_086BB910
_08051C0C: .4byte gUnknown_086BB9B4
_08051C10:
@@ -1264,7 +1264,7 @@ _08051C5C: .4byte gMain
thumb_func_start sub_51C60
sub_51C60: @ 0x08051C60
push {lr}
- ldr r1, _08051C90 @ =gUnknown_0200B134
+ ldr r1, _08051C90 @ =gMain+0x74
ldr r0, _08051C94 @ =gUnknown_02002920
adds r0, #0x2a
ldrb r0, [r0]
@@ -1282,7 +1282,7 @@ sub_51C60: @ 0x08051C60
pop {r0}
bx r0
.align 2, 0
-_08051C90: .4byte gUnknown_0200B134
+_08051C90: .4byte gMain+0x74
_08051C94: .4byte gUnknown_02002920
_08051C98: .4byte gAutoDisplayTitlescreenMenu
diff --git a/asm/pokedex.s b/asm/pokedex.s
index f3fed51..9980236 100755
--- a/asm/pokedex.s
+++ b/asm/pokedex.s
@@ -1674,7 +1674,7 @@ _08004C16:
cmp r2, #0
bge _08004C16
movs r2, #0
- ldr r4, _08004C74 @ =gUnknown_0200B134
+ ldr r4, _08004C74 @ =gMain+0x74
ldr r3, _08004C70 @ =gUnknown_0202A1C0
_08004C2A:
adds r1, r2, r4
@@ -1706,7 +1706,7 @@ _08004C64: .4byte gUnknown_0202BF04
_08004C68: .4byte gUnknown_0202A588
_08004C6C: .4byte gUnknown_0202A390
_08004C70: .4byte gUnknown_0202A1C0
-_08004C74: .4byte gUnknown_0200B134
+_08004C74: .4byte gMain+0x74
_08004C78: .4byte gMain
_08004C7C: .4byte gUnknown_0201B120
@@ -1742,7 +1742,7 @@ _08004CA4:
ldr r7, _08004D0C @ =gUnknown_0202BF04
ldr r0, _08004D10 @ =gUnknown_0202A588
mov ip, r0
- ldr r4, _08004D14 @ =gUnknown_0200B134
+ ldr r4, _08004D14 @ =gMain+0x74
ldr r3, _08004CFC @ =gUnknown_0202A1C0
_08004CC2:
adds r1, r2, r4
@@ -1776,7 +1776,7 @@ _08004D04: .4byte gUnknown_0202BEC4
_08004D08: .4byte gUnknown_0202BEFC
_08004D0C: .4byte gUnknown_0202BF04
_08004D10: .4byte gUnknown_0202A588
-_08004D14: .4byte gUnknown_0200B134
+_08004D14: .4byte gMain+0x74
_08004D18:
movs r0, #2
ands r0, r1
@@ -9236,7 +9236,7 @@ sub_88E4: @ 0x080088E4
ldr r6, _08008934 @ =gUnknown_0202A1C0
ldr r5, _08008938 @ =gUnknown_0201A514
ldr r4, _0800893C @ =gUnknown_0202BEB8
- ldr r3, _08008940 @ =gUnknown_0200B134
+ ldr r3, _08008940 @ =gMain+0x74
adds r1, r6, #0
_080088F2:
adds r0, r2, r3
@@ -9278,7 +9278,7 @@ _0800891E:
_08008934: .4byte gUnknown_0202A1C0
_08008938: .4byte gUnknown_0201A514
_0800893C: .4byte gUnknown_0202BEB8
-_08008940: .4byte gUnknown_0200B134
+_08008940: .4byte gMain+0x74
_08008944: .4byte _08008948
_08008948: @ jump table
.4byte _08008968 @ case 0
@@ -9458,7 +9458,7 @@ _08008AB8: .4byte gUnknown_0202A588
thumb_func_start sub_8ABC
sub_8ABC: @ 0x08008ABC
- ldr r1, _08008AD0 @ =gUnknown_0200B134
+ ldr r1, _08008AD0 @ =gMain+0x74
movs r2, #0
adds r0, r1, #0
adds r0, #0xcc
@@ -9469,4 +9469,4 @@ _08008AC4:
bge _08008AC4
bx lr
.align 2, 0
-_08008AD0: .4byte gUnknown_0200B134
+_08008AD0: .4byte gMain+0x74
diff --git a/asm/rom_1068C.s b/asm/rom_1068C.s
deleted file mode 100755
index 37c7a85..0000000
--- a/asm/rom_1068C.s
+++ /dev/null
@@ -1,348 +0,0 @@
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_1068C
-sub_1068C: @ 0x0801068C
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #4
- adds r4, r0, #0
- adds r7, r2, #0
- mov sb, r3
- ldr r0, [sp, #0x24]
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- str r0, [sp]
- movs r2, #0
- cmp r2, sb
- bge _080106F0
- lsls r0, r1, #5
- adds r0, r0, r4
- mov sl, r0
-_080106B2:
- movs r3, #0
- adds r6, r2, #1
- cmp r3, r7
- bge _080106E8
- lsls r0, r2, #5
- mov r1, sl
- adds r5, r1, r0
- ldr r0, _08010700 @ =gUnknown_03005C00
- mov ip, r0
- ldr r1, _08010704 @ =0x00000FFF
- mov r8, r1
- ldr r0, [sp]
- lsls r4, r0, #0xc
-_080106CC:
- adds r1, r3, r5
- lsls r1, r1, #0x10
- lsrs r1, r1, #0xf
- add r1, ip
- ldrh r2, [r1]
- mov r0, r8
- ands r0, r2
- orrs r0, r4
- strh r0, [r1]
- adds r0, r3, #1
- lsls r0, r0, #0x10
- lsrs r3, r0, #0x10
- cmp r3, r7
- blt _080106CC
-_080106E8:
- lsls r0, r6, #0x10
- lsrs r2, r0, #0x10
- cmp r2, sb
- blt _080106B2
-_080106F0:
- 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
-_08010700: .4byte gUnknown_03005C00
-_08010704: .4byte 0x00000FFF
-
- thumb_func_start sub_10708
-sub_10708: @ 0x08010708
- push {r4, r5, lr}
- sub sp, #8
- str r0, [sp]
- str r1, [sp, #4]
- lsls r2, r2, #0x10
- lsrs r0, r2, #0x10
- movs r4, #0
- lsls r3, r3, #0x10
- asrs r1, r3, #0x10
- cmp r4, r1
- bge _08010744
- ldr r2, _0801074C @ =0x040000D4
- lsls r0, r0, #0x10
- asrs r3, r0, #0xc
- movs r0, #0x80
- lsls r0, r0, #0x18
- orrs r3, r0
- adds r5, r1, #0
-_0801072C:
- lsls r1, r4, #0xa
- ldr r0, [sp]
- adds r0, r0, r1
- str r0, [r2]
- ldr r0, [sp, #4]
- adds r0, r0, r1
- str r0, [r2, #4]
- str r3, [r2, #8]
- ldr r0, [r2, #8]
- adds r4, #1
- cmp r4, r5
- blt _0801072C
-_08010744:
- add sp, #8
- pop {r4, r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801074C: .4byte 0x040000D4
-
- thumb_func_start sub_10750
-sub_10750: @ 0x08010750
- push {r4, r5, lr}
- sub sp, #8
- str r0, [sp]
- str r1, [sp, #4]
- lsls r2, r2, #0x10
- lsrs r0, r2, #0x10
- movs r4, #0
- lsls r3, r3, #0x10
- asrs r1, r3, #0x10
- cmp r4, r1
- bge _0801078C
- ldr r2, _08010794 @ =0x040000D4
- lsls r0, r0, #0x10
- asrs r3, r0, #0x10
- movs r0, #0x80
- lsls r0, r0, #0x18
- orrs r3, r0
- adds r5, r1, #0
-_08010774:
- lsls r1, r4, #6
- ldr r0, [sp]
- adds r0, r0, r1
- str r0, [r2]
- ldr r0, [sp, #4]
- adds r0, r0, r1
- str r0, [r2, #4]
- str r3, [r2, #8]
- ldr r0, [r2, #8]
- adds r4, #1
- cmp r4, r5
- blt _08010774
-_0801078C:
- add sp, #8
- pop {r4, r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08010794: .4byte 0x040000D4
-
- thumb_func_start sub_10798
-sub_10798: @ 0x08010798
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- sub sp, #4
- mov r8, r2
- ldr r4, _08010818 @ =0x040000D4
- str r0, [r4]
- ldr r2, _0801081C @ =gUnknown_0201A920
- str r2, [r4, #4]
- ldr r0, _08010820 @ =0x80000100
- str r0, [r4, #8]
- ldr r3, [r4, #8]
- str r1, [r4]
- movs r1, #0x80
- lsls r1, r1, #3
- adds r3, r2, r1
- str r3, [r4, #4]
- str r0, [r4, #8]
- ldr r0, [r4, #8]
- mov r1, sp
- ldr r5, _08010824 @ =0x00007FFF
- adds r0, r5, #0
- strh r0, [r1]
- str r1, [r4]
- ldr r0, _08010828 @ =0xFFFFFC00
- adds r2, r2, r0
- str r2, [r4, #4]
- ldr r0, _0801082C @ =0x81000200
- str r0, [r4, #8]
- ldr r0, [r4, #8]
- str r2, [r4]
- str r3, [r4, #4]
- ldr r5, _08010830 @ =0x80000200
- str r5, [r4, #8]
- ldr r0, [r4, #8]
- str r3, [r4]
- movs r6, #0xa0
- lsls r6, r6, #0x13
- str r6, [r4, #4]
- str r5, [r4, #8]
- ldr r0, [r4, #8]
- bl sub_1050C
- ldr r1, _08010834 @ =gMain
- movs r0, #0x80
- lsls r0, r0, #0x13
- ldrh r0, [r0]
- strh r0, [r1, #0x16]
- movs r7, #0
-_080107FA:
- mov r1, r8
- cmp r1, #0
- beq _08010804
- bl _call_via_r8
-_08010804:
- adds r0, r7, #0
- bl sub_1001C
- bl sub_D74
- cmp r7, #0x20
- bne _08010838
- ldr r0, _0801081C @ =gUnknown_0201A920
- b _0801083A
- .align 2, 0
-_08010818: .4byte 0x040000D4
-_0801081C: .4byte gUnknown_0201A920
-_08010820: .4byte 0x80000100
-_08010824: .4byte 0x00007FFF
-_08010828: .4byte 0xFFFFFC00
-_0801082C: .4byte 0x81000200
-_08010830: .4byte 0x80000200
-_08010834: .4byte gMain
-_08010838:
- ldr r0, _0801085C @ =gUnknown_0201AD20
-_0801083A:
- str r0, [r4]
- str r6, [r4, #4]
- str r5, [r4, #8]
- ldr r0, [r4, #8]
- adds r0, r7, #0
- adds r0, #0x10
- lsls r0, r0, #0x10
- lsrs r7, r0, #0x10
- cmp r7, #0x20
- bls _080107FA
- add sp, #4
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801085C: .4byte gUnknown_0201AD20
-
- thumb_func_start sub_10860
-sub_10860: @ 0x08010860
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- sub sp, #4
- adds r5, r0, #0
- ldr r1, _080108C8 @ =0x040000D4
- movs r0, #0xa0
- lsls r0, r0, #0x13
- mov r8, r0
- str r0, [r1]
- ldr r3, _080108CC @ =gUnknown_0201A520
- str r3, [r1, #4]
- ldr r4, _080108D0 @ =0x80000200
- str r4, [r1, #8]
- ldr r0, [r1, #8]
- mov r2, sp
- ldr r6, _080108D4 @ =0x00007FFF
- adds r0, r6, #0
- strh r0, [r2]
- str r2, [r1]
- movs r2, #0x80
- lsls r2, r2, #3
- adds r0, r3, r2
- str r0, [r1, #4]
- ldr r0, _080108D8 @ =0x81000200
- str r0, [r1, #8]
- ldr r0, [r1, #8]
- str r3, [r1]
- movs r6, #0x80
- lsls r6, r6, #4
- adds r3, r3, r6
- str r3, [r1, #4]
- str r4, [r1, #8]
- ldr r0, [r1, #8]
- movs r7, #0
- adds r6, r1, #0
-_080108A8:
- cmp r5, #0
- beq _080108B0
- bl _call_via_r5
-_080108B0:
- adds r0, r7, #0
- bl sub_1001C
- bl sub_D74
- cmp r7, #0x20
- bne _080108E0
- ldr r0, _080108DC @ =gUnknown_0201A920
- str r0, [r6]
- mov r0, r8
- str r0, [r6, #4]
- b _080108E8
- .align 2, 0
-_080108C8: .4byte 0x040000D4
-_080108CC: .4byte gUnknown_0201A520
-_080108D0: .4byte 0x80000200
-_080108D4: .4byte 0x00007FFF
-_080108D8: .4byte 0x81000200
-_080108DC: .4byte gUnknown_0201A920
-_080108E0:
- ldr r0, _08010908 @ =gUnknown_0201AD20
- str r0, [r6]
- mov r2, r8
- str r2, [r6, #4]
-_080108E8:
- str r4, [r6, #8]
- ldr r0, [r6, #8]
- adds r0, r7, #0
- adds r0, #0x10
- lsls r0, r0, #0x10
- lsrs r7, r0, #0x10
- cmp r7, #0x20
- bls _080108A8
- bl sub_D74
- add sp, #4
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08010908: .4byte gUnknown_0201AD20
-
- thumb_func_start sub_1090C
-sub_1090C: @ 0x0801090C
- ldr r1, _08010920 @ =gUnknown_0201A500
- movs r2, #0
- adds r0, r1, #0
- adds r0, #0xc
-_08010914:
- str r2, [r0]
- subs r0, #4
- cmp r0, r1
- bge _08010914
- bx lr
- .align 2, 0
-_08010920: .4byte gUnknown_0201A500
diff --git a/asm/rom_11B9C.s b/asm/rom_11B9C.s
index c3bd4d9..ca2c4c6 100755
--- a/asm/rom_11B9C.s
+++ b/asm/rom_11B9C.s
@@ -14703,7 +14703,7 @@ _0801915E:
bl m4aSongNumStart
_08019164:
ldr r3, _08019188 @ =gUnknown_02031520
- ldr r1, _0801918C @ =gUnknown_0200B134
+ ldr r1, _0801918C @ =gMain+0x74
movs r0, #0xcd
adds r0, r0, r1
mov ip, r0
@@ -14721,7 +14721,7 @@ _08019164:
bx r0
.align 2, 0
_08019188: .4byte gUnknown_02031520
-_0801918C: .4byte gUnknown_0200B134
+_0801918C: .4byte gMain+0x74
thumb_func_start sub_19190
sub_19190: @ 0x08019190
@@ -21912,7 +21912,7 @@ _0801CB24:
mov sl, r0
cmp r1, #0
ble _0801CBEC
- ldr r0, _0801CB6C @ =gUnknown_0200B134
+ ldr r0, _0801CB6C @ =gMain+0x74
ldr r5, _0801CB70 @ =0x0000059A
adds r1, r4, r5
ldrh r3, [r1]
@@ -21936,7 +21936,7 @@ _0801CB24:
b _0801CC0C
.align 2, 0
_0801CB68: .4byte gUnknown_020314E0
-_0801CB6C: .4byte gUnknown_0200B134
+_0801CB6C: .4byte gMain+0x74
_0801CB70: .4byte 0x0000059A
_0801CB74: .4byte 0x00000749
_0801CB78: .4byte 0x040000D4
@@ -63901,7 +63901,7 @@ _08031F96:
movs r2, #0
lsls r1, r1, #4
str r1, [sp]
- ldr r5, _08031FE8 @ =gUnknown_0200B134
+ ldr r5, _08031FE8 @ =gMain+0x74
mov r8, r5
mov sl, r4
_08031FA2:
@@ -63939,7 +63939,7 @@ _08031FA2:
.align 2, 0
_08031FE0: .4byte gUnknown_020314E0
_08031FE4: .4byte 0x0000073D
-_08031FE8: .4byte gUnknown_0200B134
+_08031FE8: .4byte gMain+0x74
_08031FEC: .4byte gWildMonLocations
_08031FF0:
cmp r0, #0x86
@@ -64004,7 +64004,7 @@ _0803204C:
b _08032138
_0803205E:
ldr r4, _080320A0 @ =gUnknown_086AE5E0
- ldr r3, _080320A4 @ =gUnknown_0200B134
+ ldr r3, _080320A4 @ =gMain+0x74
adds r0, r3, #0
adds r0, #0xaf
ldrb r1, [r0]
@@ -64038,7 +64038,7 @@ _08032086:
b _0803213A
.align 2, 0
_080320A0: .4byte gUnknown_086AE5E0
-_080320A4: .4byte gUnknown_0200B134
+_080320A4: .4byte gMain+0x74
_080320A8:
ldr r0, _0803218C @ =gUnknown_086AE5E0
lsls r1, r6, #0x10
diff --git a/asm/rom_3219C.s b/asm/rom_3219C.s
index af67f74..78f972d 100755
--- a/asm/rom_3219C.s
+++ b/asm/rom_3219C.s
@@ -46551,7 +46551,7 @@ _0804A19C:
movs r0, #0
strh r0, [r1, #8]
movs r2, #0
- ldr r3, _0804A240 @ =gUnknown_0200B134
+ ldr r3, _0804A240 @ =gMain+0x74
_0804A1A6:
lsls r0, r2, #0x10
asrs r2, r0, #0x10
@@ -46624,7 +46624,7 @@ _0804A230: .4byte gUnknown_02031520
_0804A234: .4byte 0x05000200
_0804A238: .4byte 0x80000100
_0804A23C: .4byte gUnknown_020028D8
-_0804A240: .4byte gUnknown_0200B134
+_0804A240: .4byte gMain+0x74
_0804A244: .4byte gUnknown_020314E0
_0804A248: .4byte gMain
_0804A24C: .4byte 0x00000F4C
@@ -50701,7 +50701,7 @@ _0804C460:
asrs r0, r0, #0x18
cmp r0, #0
ble _0804C510
- ldr r1, _0804C498 @ =gUnknown_0200B134
+ ldr r1, _0804C498 @ =gMain+0x74
ldr r2, _0804C49C @ =0x0000059A
adds r0, r4, r2
ldrh r3, [r0]
@@ -50720,7 +50720,7 @@ _0804C460:
mov r8, r5
b _0804C528
.align 2, 0
-_0804C498: .4byte gUnknown_0200B134
+_0804C498: .4byte gMain+0x74
_0804C49C: .4byte 0x0000059A
_0804C4A0: .4byte 0x00000749
_0804C4A4: .4byte 0x040000D4
diff --git a/asm/rom_528AC.s b/asm/rom_528AC.s
deleted file mode 100755
index 171370b..0000000
--- a/asm/rom_528AC.s
+++ /dev/null
@@ -1,529 +0,0 @@
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_528AC
-sub_528AC: @ 0x080528AC
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- adds r1, r0, #0
- cmp r0, #0xfa
- bls _080528DA
- ldr r0, _080528CC @ =0x00000113
- cmp r1, r0
- bls _080528D8
- ldr r0, _080528D0 @ =gUnknown_08527F18
- ldr r2, _080528D4 @ =0xFFFFFEEC
- adds r1, r1, r2
- lsls r1, r1, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- b _080528DA
- .align 2, 0
-_080528CC: .4byte 0x00000113
-_080528D0: .4byte gUnknown_08527F18
-_080528D4: .4byte 0xFFFFFEEC
-_080528D8:
- movs r0, #0xc8
-_080528DA:
- bx lr
-
- thumb_func_start sub_528DC
-sub_528DC: @ 0x080528DC
- push {r4, r5, lr}
- sub sp, #4
- adds r5, r0, #0
- adds r4, r1, #0
- lsls r5, r5, #0x10
- lsrs r5, r5, #0x10
- lsls r4, r4, #0x18
- lsrs r4, r4, #0x18
- ldr r0, _08052914 @ =gMPlayInfo_BGM
- ldr r1, _08052918 @ =0x0000FFFF
- movs r2, #0x99
- bl m4aMPlayVolumeControl
- lsls r4, r4, #0x18
- asrs r4, r4, #0x18
- movs r0, #0
- str r0, [sp]
- adds r0, r5, #0
- adds r1, r4, #0
- movs r2, #0x7d
- movs r3, #0xa
- bl sub_52940
- add sp, #4
- pop {r4, r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08052914: .4byte gMPlayInfo_BGM
-_08052918: .4byte 0x0000FFFF
-
- thumb_func_start sub_5291C
-sub_5291C: @ 0x0805291C
- push {r4, lr}
- sub sp, #4
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- lsls r3, r3, #0x18
- lsrs r3, r3, #0x18
- lsls r1, r1, #0x18
- asrs r1, r1, #0x18
- lsls r2, r2, #0x18
- asrs r2, r2, #0x18
- movs r4, #0
- str r4, [sp]
- bl sub_52940
- add sp, #4
- pop {r4}
- pop {r0}
- bx r0
-
- thumb_func_start sub_52940
-sub_52940: @ 0x08052940
- push {r4, r5, r6, lr}
- mov r6, r8
- push {r6}
- adds r5, r0, #0
- adds r4, r1, #0
- adds r0, r2, #0
- adds r6, r3, #0
- lsls r5, r5, #0x10
- lsls r4, r4, #0x18
- lsrs r4, r4, #0x18
- lsls r6, r6, #0x18
- lsrs r6, r6, #0x18
- ldr r1, _080529BC @ =0xFFFF0000
- adds r5, r5, r1
- lsrs r5, r5, #0x10
- movs r1, #0xf0
- lsls r1, r1, #6
- mov r8, r1
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- bl SetPokemonCryVolume
- lsls r4, r4, #0x18
- asrs r4, r4, #0x18
- adds r0, r4, #0
- bl SetPokemonCryPanpot
- mov r0, r8
- bl SetPokemonCryPitch
- movs r0, #0x8c
- bl SetPokemonCryLength
- movs r0, #0
- bl SetPokemonCryProgress
- movs r0, #0
- bl SetPokemonCryRelease
- movs r0, #0
- bl SetPokemonCryChorus
- adds r0, r6, #0
- bl SetPokemonCryPriority
- adds r0, r5, #0
- bl sub_528AC
- movs r1, #0x7f
- ands r1, r0
- lsrs r0, r0, #7
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- adds r2, r0, #0
- cmp r0, #1
- beq _080529D8
- cmp r0, #1
- bgt _080529C0
- cmp r0, #0
- beq _080529CA
- b _08052A0A
- .align 2, 0
-_080529BC: .4byte 0xFFFF0000
-_080529C0:
- cmp r2, #2
- beq _080529E8
- cmp r2, #3
- beq _080529FC
- b _08052A0A
-_080529CA:
- lsls r0, r1, #1
- adds r0, r0, r1
- lsls r0, r0, #2
- ldr r1, _080529D4 @ =gUnknown_08532D6C
- b _080529F0
- .align 2, 0
-_080529D4: .4byte gUnknown_08532D6C
-_080529D8:
- lsls r0, r1, #1
- adds r0, r0, r1
- lsls r0, r0, #2
- ldr r1, _080529E4 @ =gUnknown_08533360
- b _080529F0
- .align 2, 0
-_080529E4: .4byte gUnknown_08533360
-_080529E8:
- lsls r0, r1, #1
- adds r0, r0, r1
- lsls r0, r0, #2
- ldr r1, _080529F8 @ =gUnknown_08533960
-_080529F0:
- adds r0, r0, r1
- bl SetPokemonCryTone
- b _08052A0A
- .align 2, 0
-_080529F8: .4byte gUnknown_08533960
-_080529FC:
- lsls r0, r1, #1
- adds r0, r0, r1
- lsls r0, r0, #2
- ldr r1, _08052A14 @ =gUnknown_08533F60
- adds r0, r0, r1
- bl SetPokemonCryTone
-_08052A0A:
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08052A14: .4byte gUnknown_08533F60
-
- thumb_func_start sub_52A18
-sub_52A18: @ 0x08052A18
- push {r4, lr}
- bl SetSramFastFunc
- ldr r4, _08052A4C @ =gMain
- movs r0, #0
- strb r0, [r4, #0xc]
- bl sub_52A68
- lsls r0, r0, #0x10
- cmp r0, #0
- bne _08052A50
- bl sub_52C64
- bl sub_52B30
- bl sub_52A68
- lsls r0, r0, #0x10
- cmp r0, #0
- bne _08052A5E
- movs r0, #1
- strb r0, [r4, #0xc]
- bl sub_52C64
- b _08052A5E
- .align 2, 0
-_08052A4C: .4byte gMain
-_08052A50:
- ldr r1, _08052A64 @ =0x00000143
- adds r0, r4, r1
- ldrb r0, [r0]
- lsls r0, r0, #0x18
- asrs r0, r0, #0x18
- bl sub_525CC
-_08052A5E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08052A64: .4byte 0x00000143
-
- thumb_func_start sub_52A68
-sub_52A68: @ 0x08052A68
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- movs r0, #0
- mov r8, r0
- movs r7, #0
- ldr r1, _08052B04 @ =ReadSramFast
- mov sb, r1
-_08052A7A:
- ldr r5, _08052B08 @ =gUnknown_0200B134
- movs r4, #0x9d
- lsls r4, r4, #2
- lsls r0, r7, #2
- adds r0, r0, r7
- lsls r0, r0, #2
- adds r0, r0, r7
- lsls r0, r0, #5
- ldr r3, _08052B0C @ =0x0E000004
- adds r0, r0, r3
- mov r6, sb
- ldr r3, [r6]
- adds r1, r5, #0
- adds r2, r4, #0
- bl _call_via_r3
- movs r2, #0
- movs r0, #0x99
- lsls r0, r0, #2
- adds r3, r5, r0
- movs r0, #0
- ldrsb r0, [r3, r0]
- ldr r1, _08052B10 @ =gUnknown_086BBA6C
- ldrb r6, [r1]
- cmp r0, r6
- bne _08052ACA
- adds r6, r3, #0
- adds r3, r1, #0
-_08052AB2:
- adds r0, r2, #1
- lsls r0, r0, #0x10
- lsrs r2, r0, #0x10
- cmp r2, #9
- bhi _08052ACA
- adds r0, r2, r6
- movs r1, #0
- ldrsb r1, [r0, r1]
- adds r0, r2, r3
- ldrb r0, [r0]
- cmp r1, r0
- beq _08052AB2
-_08052ACA:
- cmp r2, #0xa
- bne _08052B18
- movs r2, #0
- cmp r4, #1
- bls _08052AE0
-_08052AD4:
- ldrh r0, [r5]
- adds r2, r2, r0
- adds r5, #2
- subs r4, #2
- cmp r4, #1
- bhi _08052AD4
-_08052AE0:
- cmp r4, #0
- beq _08052AF0
- ldrh r1, [r5]
- movs r3, #0xff
- lsls r3, r3, #8
- adds r0, r3, #0
- ands r0, r1
- adds r2, r2, r0
-_08052AF0:
- ldr r0, _08052B14 @ =0x0000FFFF
- adds r1, r2, #0
- ands r1, r0
- lsrs r2, r2, #0x10
- adds r2, r1, r2
- cmp r2, r0
- bne _08052B18
- movs r6, #1
- mov r8, r6
- b _08052B22
- .align 2, 0
-_08052B04: .4byte ReadSramFast
-_08052B08: .4byte gUnknown_0200B134
-_08052B0C: .4byte 0x0E000004
-_08052B10: .4byte gUnknown_086BBA6C
-_08052B14: .4byte 0x0000FFFF
-_08052B18:
- adds r0, r7, #1
- lsls r0, r0, #0x10
- lsrs r7, r0, #0x10
- cmp r7, #1
- bls _08052A7A
-_08052B22:
- mov r0, r8
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7}
- pop {r1}
- bx r1
-
- thumb_func_start sub_52B30
-sub_52B30: @ 0x08052B30
- push {r4, r5, lr}
- ldr r3, _08052B9C @ =gUnknown_0200B134
- movs r4, #0x9d
- lsls r4, r4, #2
- movs r0, #0x9c
- lsls r0, r0, #2
- adds r1, r3, r0
- ldr r0, [r1]
- adds r0, #1
- str r0, [r1]
- ldr r2, _08052BA0 @ =0x0000026E
- adds r1, r3, r2
- movs r0, #0
- strh r0, [r1]
- movs r2, #0
- adds r5, r3, #0
-_08052B50:
- ldrh r0, [r3]
- adds r2, r2, r0
- adds r3, #2
- subs r4, #2
- cmp r4, #1
- bhi _08052B50
- cmp r4, #0
- beq _08052B6A
- ldrh r1, [r3]
- movs r0, #0xff
- lsls r0, r0, #8
- ands r0, r1
- adds r2, r2, r0
-_08052B6A:
- ldr r0, _08052BA4 @ =0x0000FFFF
- ands r0, r2
- lsrs r1, r2, #0x10
- adds r2, r0, r1
- lsrs r0, r2, #0x10
- adds r0, r0, r2
- mvns r0, r0
- ldr r2, _08052BA0 @ =0x0000026E
- adds r1, r5, r2
- strh r0, [r1]
- ldr r1, _08052BA8 @ =0x0E000004
- movs r4, #0x9d
- lsls r4, r4, #2
- adds r0, r5, #0
- adds r2, r4, #0
- bl WriteAndVerifySramFast
- ldr r1, _08052BAC @ =0x0E0002A4
- adds r0, r5, #0
- adds r2, r4, #0
- bl WriteAndVerifySramFast
- pop {r4, r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08052B9C: .4byte gUnknown_0200B134
-_08052BA0: .4byte 0x0000026E
-_08052BA4: .4byte 0x0000FFFF
-_08052BA8: .4byte 0x0E000004
-_08052BAC: .4byte 0x0E0002A4
-
- thumb_func_start sub_52BB0
-sub_52BB0: @ 0x08052BB0
- push {r4, r5, r6, lr}
- lsls r1, r1, #0x18
- lsrs r5, r1, #0x18
- ldr r3, _08052C30 @ =gUnknown_0200B134
- movs r4, #0x9d
- lsls r4, r4, #2
- lsls r0, r0, #0x10
- asrs r0, r0, #0x10
- adds r2, r0, r3
- ldrb r0, [r2]
- adds r6, r3, #0
- cmp r0, r5
- bhs _08052C28
- movs r0, #0x9c
- lsls r0, r0, #2
- adds r1, r6, r0
- ldr r0, [r1]
- adds r0, #1
- str r0, [r1]
- movs r1, #0
- strb r5, [r2]
- ldr r2, _08052C34 @ =0x0000026E
- adds r0, r6, r2
- strh r1, [r0]
- movs r2, #0
-_08052BE2:
- ldrh r0, [r3]
- adds r2, r2, r0
- adds r3, #2
- subs r4, #2
- cmp r4, #1
- bhi _08052BE2
- cmp r4, #0
- beq _08052BFC
- ldrh r1, [r3]
- movs r0, #0xff
- lsls r0, r0, #8
- ands r0, r1
- adds r2, r2, r0
-_08052BFC:
- ldr r0, _08052C38 @ =0x0000FFFF
- ands r0, r2
- lsrs r1, r2, #0x10
- adds r2, r0, r1
- lsrs r0, r2, #0x10
- adds r0, r0, r2
- mvns r0, r0
- ldr r2, _08052C34 @ =0x0000026E
- adds r1, r6, r2
- strh r0, [r1]
- ldr r1, _08052C3C @ =0x0E000004
- movs r4, #0x9d
- lsls r4, r4, #2
- adds r0, r6, #0
- adds r2, r4, #0
- bl WriteAndVerifySramFast
- ldr r1, _08052C40 @ =0x0E0002A4
- adds r0, r6, #0
- adds r2, r4, #0
- bl WriteAndVerifySramFast
-_08052C28:
- pop {r4, r5, r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08052C30: .4byte gUnknown_0200B134
-_08052C34: .4byte 0x0000026E
-_08052C38: .4byte 0x0000FFFF
-_08052C3C: .4byte 0x0E000004
-_08052C40: .4byte 0x0E0002A4
-
- thumb_func_start sub_52C44
-sub_52C44: @ 0x08052C44
- push {lr}
- ldr r2, _08052C58 @ =ReadSramFast
- ldr r0, _08052C5C @ =0x0E000544
- ldr r1, _08052C60 @ =gUnknown_0200B100
- ldr r3, [r2]
- movs r2, #4
- bl _call_via_r3
- pop {r0}
- bx r0
- .align 2, 0
-_08052C58: .4byte ReadSramFast
-_08052C5C: .4byte 0x0E000544
-_08052C60: .4byte gUnknown_0200B100
-
- thumb_func_start sub_52C64
-sub_52C64: @ 0x08052C64
- push {r4, r5, lr}
- movs r1, #0
- ldr r5, _08052CBC @ =gUnknown_0200B134
- movs r0, #0x99
- lsls r0, r0, #2
- adds r4, r5, r0
- ldr r3, _08052CC0 @ =gUnknown_086BBA6C
-_08052C72:
- lsls r0, r1, #0x10
- asrs r0, r0, #0x10
- adds r2, r0, r4
- adds r1, r0, r3
- ldrb r1, [r1]
- strb r1, [r2]
- adds r0, #1
- lsls r0, r0, #0x10
- lsrs r1, r0, #0x10
- asrs r0, r0, #0x10
- cmp r0, #9
- ble _08052C72
- movs r1, #0x9c
- lsls r1, r1, #2
- adds r0, r5, r1
- movs r4, #0
- str r4, [r0]
- adds r0, r5, #0
- adds r0, #0xcd
- strb r4, [r0]
- adds r0, #1
- strb r4, [r0]
- movs r0, #1
- rsbs r0, r0, #0
- bl sub_525CC
- bl sub_F6E0
- bl sub_8ABC
- adds r0, r5, #0
- adds r0, #0xcf
- strb r4, [r0]
- pop {r4, r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08052CBC: .4byte gUnknown_0200B134
-_08052CC0: .4byte gUnknown_086BBA6C
diff --git a/data/rom.s b/data/rom.s
index 4764ced..557f716 100755
--- a/data/rom.s
+++ b/data/rom.s
@@ -728,17 +728,17 @@ gUnknown_08079870:: @ 0x08079870
gTitlescreenStateFuncs:: @ 0x08079890
.4byte LoadTitlescreenGraphics
- .4byte sub_10BB8
- .4byte sub_10CF0
- .4byte sub_10E00
- .4byte sub_10EF4
- .4byte sub_110FC
- .4byte sub_11320
- .4byte sub_11020
- .4byte sub_11228
- .4byte sub_10D84
- .4byte sub_11428
- .4byte sub_114B4
+ .4byte TitleScreen1_WaitForStartButton
+ .4byte TitleScreen2_Unknown
+ .4byte TitleScreen3_Unknown
+ .4byte TitleScreen4_MenuInputNoSavedGame
+ .4byte TitleScreen5_MenuInputSavedGame
+ .4byte TitleScreen6_AnimCloseMenu
+ .4byte TitleScreen7_Unknown
+ .4byte TitleScreen8_Unknown
+ .4byte TitleScreen9_Unknown
+ .4byte TitleScreen10_ExecMenuSelection
+ .4byte TitleScreen11_Unknown
gUnknown_080798C0:: @ 0x080798C0
.incbin "baserom.gba", 0x798C0, 0x800
@@ -2758,10 +2758,10 @@ gUnknown_086B0010:: @ 0x086B0010
.incbin "baserom.gba", 0x6B0010, 0x118
gUnknown_086B0128:: @ 0x086B0128
- .incbin "baserom.gba", 0x6B0128, 0x28
+ .ascii "POK^MON_CAUGHT______BONUS_______________"
gUnknown_086B0150:: @ 0x086B0150
- .incbin "baserom.gba", 0x6B0150, 0x17C
+ .ascii "SUBTOTAL____________POK^MON_EVOLVED_____BONUS_______________SUBTOTAL____________TRAVELED_AREA_______BONUS_______________SUBTOTAL____________SLOT_PLAYED_________BONUS_______________SUBTOTAL____________PIKA_SAVER__________BONUS_______________SUBTOTAL____________SUBTOTAL____________SUBTOTAL____________SUBTOTAL____________SUBTOTAL____________MULTIPLIER__________TOTAL_______________"
gUnknown_086B02CC:: @ 0x086B02CC
.incbin "baserom.gba", 0x6B02CC, 0xF0
@@ -3113,7 +3113,9 @@ gUnknown_086BB9B4:: @ 0x086BB9B4
gUnknown_086BB9EC:: @ 0x086BB9EC
.incbin "baserom.gba", 0x6BB9EC, 0x80
-gUnknown_086BBA6C:: @ 0x086BBA6C
- .incbin "baserom.gba", 0x6BBA6C, 0x6BBFD0 - 0x6BBA6C
+gSaveFileSignature:: @ 0x086BBA6C
+ .ascii "POKEPINAGB"
+
+ .incbin "baserom.gba", 0x6BBA6C + 0xA, 0x6BBFD0 - 0x6BBA6C
@ rom end 0x6BBFD0
diff --git a/include/functions.h b/include/functions.h
index 5846d0e..0606057 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -54,17 +54,17 @@ void sub_940(void);
void TitlescreenMain(void);
void LoadTitlescreenGraphics(void);
void sub_10AC0(void);
-void sub_10BB8(void);
-void sub_10CF0(void);
-void sub_10D84(void);
-void sub_10E00(void);
-void sub_10EF4(void);
-void sub_11020(void);
-void sub_110FC(void);
-void sub_11228(void);
-void sub_11320(void);
-void sub_11428(void);
-void sub_114B4(void);
+void TitleScreen1_WaitForStartButton(void);
+void TitleScreen2_Unknown(void);
+void TitleScreen9_Unknown(void);
+void TitleScreen3_Unknown(void);
+void TitleScreen4_MenuInputNoSavedGame(void);
+void TitleScreen7_Unknown(void);
+void TitleScreen5_MenuInputSavedGame(void);
+void TitleScreen8_Unknown(void);
+void TitleScreen6_AnimCloseMenu(void);
+void TitleScreen10_ExecMenuSelection(void);
+void TitleScreen11_Unknown(void);
// src/util.c
@@ -162,7 +162,7 @@ void SetMatrixScale(s16 xScale, s16 yScale, s16 matrixNum);
//extern ? sub_F434();
//extern ? sub_F4FC();
//extern ? sub_F670();
-//extern ? sub_F6E0();
+extern void sub_F6E0(void);
//extern ? sub_F74C();
//extern ? sub_F8B0();
//extern ? sub_FAE8();
@@ -171,12 +171,12 @@ extern void sub_FD5C(void (*func)(void));
extern void sub_FE04(void (*func)(void));
//extern ? sub_FEB8();
//extern ? sub_FF74();
-//extern ? sub_1001C();
+extern void sub_1001C(int);
//extern ? sub_10170();
//extern ? sub_102A8();
//extern ? sub_10424();
//extern ? sub_10480();
-//extern ? sub_1050C();
+extern void sub_1050C(void);
//extern ? sub_10528();
//extern ? sub_10544();
//extern ? sub_105A0();
@@ -384,12 +384,12 @@ extern void sub_FE04(void (*func)(void));
//extern ? sub_88E4();
//extern ? sub_8974();
//extern ? sub_8A78();
-//extern ? sub_8ABC();
+extern void sub_8ABC(void);
// asm/rom_1068C.s
//extern ? sub_1068C();
-extern void sub_10708(void*, void*, u16, s16);
+extern void sub_10708(void *volatile, void *volatile, s16, s16);
//extern ? sub_10750();
//extern ? sub_10798();
//extern ? sub_10860();
diff --git a/include/main.h b/include/main.h
index 02f0a5f..3e0c744 100755
--- a/include/main.h
+++ b/include/main.h
@@ -3,6 +3,20 @@
#include "global.h"
+// This is probably permanently saved data like pokedex and high scores.
+struct SaveData
+{
+ /*0x74*/ u8 pokedexFlags[204];
+ /*0x140*/ u8 filler140[1];
+ /*0x141*/ u8 unk141;
+ /*0x142*/ u8 unk142;
+ /*0x143*/ u8 unk143;
+ /*0x144*/ u8 filler144[0x2D8-0x144];
+ s8 signature[10];
+ u16 unk2E2;
+ u32 unk2E4;
+};
+
struct Main
{
/*0x00*/ u8 filler0[0x2];
@@ -12,7 +26,8 @@ struct Main
/*0x05*/ u8 filler5[0x2];
/*0x07*/ s8 unk7;
/*0x08*/ s8 unk8;
- /*0x09*/ u8 filler9[0x4];
+ /*0x09*/ u8 filler9[0x3];
+ /*0x0C*/ u8 unkC;
/*0x0D*/ u8 unkD;
/*0x0E*/ u8 fillerE[0x1];
/*0x0F*/ u8 unkF;
@@ -38,15 +53,14 @@ struct Main
/*0x38*/ volatile u16 blendControl;
/*0x3A*/ volatile u16 blendAlpha;
/*0x3C*/ volatile u16 blendBrightness;
- // may be a sub-struct. possibly save data?
- /*0x40*/ int unk40;
+ // may be a sub-struct. possibly for saved game?
+ /*0x40*/ int hasSavedGame;
/*0x44*/ u8 filler44[0x4];
/*0x48*/ int rngValue;
/*0x4C*/ int unk4C;
/*0x50*/ int unk50;
/*0x54*/ u8 filler54[0x20];
- /*0x74*/ u8 pokedexFlags[204];
- /*0x140*/ u8 filler140[0x1A8];
+ /*0x74*/ struct SaveData saveData;
/*0x2E8*/ struct MainUnk2E8 unk2E8[4];
/*0x2F8*/ struct SpriteGroup spriteGroups[NUM_SPRITE_GROUPS];
};
@@ -80,7 +94,6 @@ extern void (*gUnknown_02017BD0)(void);
extern void (*gUnknown_02017BD4)(void);
extern StateFunc gMainFuncs[];
extern struct OamData gOamBuffer[128];
-extern u16 gUnknown_03005C00[0x600];
void sub_24C(void);
void sub_2B4(void);
diff --git a/include/titlescreen.h b/include/titlescreen.h
index 6cd6965..d66e786 100755
--- a/include/titlescreen.h
+++ b/include/titlescreen.h
@@ -5,7 +5,7 @@ struct TitlescreenStruct
{
/*0x00*/ s8 menuCursorIndex;
/*0x02*/ s16 unk2;
- /*0x04*/ s16 unk4;
+ /*0x04*/ s16 animTimer;
/*0x06*/ s8 unk6;
/*0x07*/ u8 unk7;
/*0x08*/ s8 unk8;
diff --git a/include/variables.h b/include/variables.h
index d8efc57..590ae00 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -3,10 +3,14 @@
// Place all external variable declarations in this file
+extern u16 gUnknown_0201A520[];
+extern u16 gUnknown_0201AD20[];
+extern u32 gUnknown_0201A500[];
+extern u16 gUnknown_0201A920[];
extern u8 gUnknown_03000000[];
//extern ? gOamBuffer;
//extern ? IntrMain_Buffer;
-//extern ? gUnknown_03005C00;
+extern u16 gUnknown_03005C00[0x600];
//extern ? SoundMainRAM_Buffer;
extern u16 sGbPlayerCurKeys;
extern u16 sGbPlayerPrevKeys;
@@ -22,7 +26,7 @@ extern u8 gUnknown_02002808[];
//extern ? gUnknown_02002958;
//extern ? gIntrTable;
//extern ? gMain;
-//extern ? gUnknown_0200B134;
+//extern ? gMain+0x74;
//extern ? gUnknown_0200B3B8;
//extern ? gUnknown_0200FB98;
//extern ? gUnknown_0200FB9C;
diff --git a/ld_script.txt b/ld_script.txt
index 2f53a9e..56aef78 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -40,13 +40,13 @@ SECTIONS
asm/field_select.o(.text);
asm/intro.o(.text);
asm/high_scores.o(.text);
- asm/rom_1068C.o(.text);
+ src/rom_1068C.o(.text);
src/titlescreen.o(.text);
asm/rom_11B9C.o(.text);
src/rom_3219C.o(.text);
asm/rom_3219C.o(.text);
asm/options.o(.text);
- asm/rom_528AC.o(.text);
+ src/rom_528AC.o(.text);
asm/m4a_1.o(.text);
src/m4a.o(.text);
asm/libagbsyscall.o(.text);
diff --git a/src/gbplayer.c b/src/gbplayer.c
index 00d30d5..c0d9655 100755
--- a/src/gbplayer.c
+++ b/src/gbplayer.c
@@ -292,6 +292,7 @@ void sub_1198(void)
void sub_11B0(int arg0)
{
if (gUnknown_0200B134[0xCD])
+ //if (gMain.saveData.unk141)
{
gUnknown_02019BF8 = arg0;
gUnknown_02019BFC = 0;
diff --git a/src/rom_1068C.c b/src/rom_1068C.c
new file mode 100644
index 0000000..4a5e619
--- /dev/null
+++ b/src/rom_1068C.c
@@ -0,0 +1,124 @@
+#include "global.h"
+#include "main.h"
+
+void sub_1068C(int a, int b, int c, int d, u16 e)
+{
+ u16 i;
+ u16 j;
+
+ for (i = 0; i < d; i++)
+ {
+ for (j = 0; j < c; j++)
+ {
+ u16 index = b * 32 + a + i * 32 + j;
+
+ gUnknown_03005C00[index] = (gUnknown_03005C00[index] & 0xFFF) | (e << 12);
+ }
+ }
+}
+
+// This requires volatile parameters to match. There is no reason, *ever*, to do this.
+void sub_10708(void *volatile src, void *volatile dest, s16 numTilesX, s16 numTilesY)
+{
+ int i;
+
+ for (i = 0; i < numTilesY; i++)
+ {
+ DmaCopy16(3, (u8 *)src + 0x400 * i, (u8 *)dest + 0x400 * i, numTilesX * 32);
+ }
+}
+
+void sub_10750(void *volatile src, void *volatile dest, s16 numTilesX, s16 numTilesY)
+{
+ int i;
+
+ for (i = 0; i < numTilesY; i++)
+ {
+ DmaCopy16(3, (u8 *)src + 0x40 * i, (u8 *)dest + 0x40 * i, numTilesX * 2);
+ }
+}
+
+void sub_10798(void *a, void *b, void (*func)(void))
+{
+ u16 i;
+
+ DmaCopy16(3, a, gUnknown_0201A920, 0x200);
+ DmaCopy16(3, b, gUnknown_0201A920 + 0x200, 0x200);
+ DmaFill16(3, 0x7FFF, gUnknown_0201A920 - 0x200, 0x400);
+ DmaCopy16(3, gUnknown_0201A920 - 0x200, gUnknown_0201A920 + 0x200, 0x400);
+ DmaCopy16(3, gUnknown_0201A920 + 0x200, (void *)PLTT, 0x400);
+
+ sub_1050C();
+ gMain.unk16 = REG_DISPCNT;
+
+ for (i = 0; i <= 32; i += 16)
+ {
+ if (func != NULL)
+ func();
+ sub_1001C(i);
+ sub_D74();
+ if (i == 32)
+ {
+ DmaCopy16(3, gUnknown_0201A920, (void *)PLTT, 0x400);
+ }
+ else
+ {
+ DmaCopy16(3, gUnknown_0201AD20, (void *)PLTT, 0x400);
+ }
+ }
+}
+
+void sub_10860(void (*func)(void))
+{
+ u16 i;
+
+ DmaCopy16(3, (void *)PLTT, gUnknown_0201A520, 0x400);
+ DmaFill16(3, 0x7FFF, gUnknown_0201A520 + 0x200, 0x400);
+ DmaCopy16(3, gUnknown_0201A520, gUnknown_0201A520 + 0x400, 0x400);
+
+ for (i = 0; i <= 32; i += 16)
+ {
+ if (func != NULL)
+ func();
+ sub_1001C(i);
+ sub_D74();
+ if (i == 32)
+ {
+ DmaCopy16(3, gUnknown_0201A920, (void *)PLTT, 0x400);
+ }
+ else
+ {
+ DmaCopy16(3, gUnknown_0201AD20, (void *)PLTT, 0x400);
+ }
+ }
+ sub_D74();
+}
+
+#ifdef NONMATCHING
+// Like sub_C24, it matches except for that damn 'push {lr}/pop {lr}'
+void sub_1090C(void)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ gUnknown_0201A500[i] = 0;
+}
+#else
+NAKED
+void sub_1090C(void)
+{
+ asm_unified("\n\
+ ldr r1, _08010920 @ =gUnknown_0201A500\n\
+ movs r2, #0\n\
+ adds r0, r1, #0\n\
+ adds r0, #0xc\n\
+_08010914:\n\
+ str r2, [r0]\n\
+ subs r0, #4\n\
+ cmp r0, r1\n\
+ bge _08010914\n\
+ bx lr\n\
+ .align 2, 0\n\
+_08010920: .4byte gUnknown_0201A500");
+}
+#endif
diff --git a/src/rom_3219C.c b/src/rom_3219C.c
index 6954fbe..77eb7ac 100755
--- a/src/rom_3219C.c
+++ b/src/rom_3219C.c
@@ -43,31 +43,31 @@ void sub_3219C(void)
{
s16 numSpecialMons = 0;
gUnknown_020314E0->catchModeSpecies = 0;
- if (gUnknown_0200B134[SPECIES_AERODACTYL])
+ if (gMain+0x74[SPECIES_AERODACTYL])
{
specialMons[numSpecialMons++] = SPECIES_AERODACTYL;
- if (gUnknown_0200B134[SPECIES_AERODACTYL] < 4)
+ if (gMain+0x74[SPECIES_AERODACTYL] < 4)
gUnknown_020314E0->catchModeSpecies = SPECIES_AERODACTYL;
}
- if (gUnknown_0200B134[SPECIES_CHIKORITA])
+ if (gMain+0x74[SPECIES_CHIKORITA])
{
specialMons[numSpecialMons++] = SPECIES_CHIKORITA;
- if (gUnknown_0200B134[SPECIES_CHIKORITA] < 4)
+ if (gMain+0x74[SPECIES_CHIKORITA] < 4)
gUnknown_020314E0->catchModeSpecies = SPECIES_CHIKORITA;
}
- if (gUnknown_0200B134[SPECIES_TOTODILE])
+ if (gMain+0x74[SPECIES_TOTODILE])
{
specialMons[numSpecialMons++] = SPECIES_TOTODILE;
- if (gUnknown_0200B134[SPECIES_TOTODILE] < 4)
+ if (gMain+0x74[SPECIES_TOTODILE] < 4)
gUnknown_020314E0->catchModeSpecies = SPECIES_TOTODILE;
}
- if (gUnknown_0200B134[SPECIES_CYNDAQUIL])
+ if (gMain+0x74[SPECIES_CYNDAQUIL])
{
specialMons[numSpecialMons++] = SPECIES_CYNDAQUIL;
- if (gUnknown_0200B134[SPECIES_CYNDAQUIL] < 4)
+ if (gMain+0x74[SPECIES_CYNDAQUIL] < 4)
gUnknown_020314E0->catchModeSpecies = SPECIES_CYNDAQUIL;
}
diff --git a/src/rom_528AC.c b/src/rom_528AC.c
new file mode 100644
index 0000000..f1c7d5f
--- /dev/null
+++ b/src/rom_528AC.c
@@ -0,0 +1,254 @@
+#include "global.h"
+#include "m4a.h"
+#include "agb_sram.h"
+#include "main.h"
+
+extern const u16 gUnknown_08527F18[];
+
+#ifdef NONMATCHING
+// Like sub_C24, it matches except for that damn 'push {lr}/pop {lr}'
+int sub_528AC(u16 a)
+{
+ if (a <= 0xFA)
+ return a;
+ if (a <= 0x113)
+ return 0xC8;
+ return gUnknown_08527F18[a - 0x114];
+}
+#else
+NAKED
+int sub_528AC(u16 a)
+{
+ asm_unified("\n\
+ lsls r0, r0, #0x10\n\
+ lsrs r0, r0, #0x10\n\
+ adds r1, r0, #0\n\
+ cmp r0, #0xfa\n\
+ bls _080528DA\n\
+ ldr r0, _080528CC @ =0x00000113\n\
+ cmp r1, r0\n\
+ bls _080528D8\n\
+ ldr r0, _080528D0 @ =gUnknown_08527F18\n\
+ ldr r2, _080528D4 @ =0xFFFFFEEC\n\
+ adds r1, r1, r2\n\
+ lsls r1, r1, #1\n\
+ adds r1, r1, r0\n\
+ ldrh r0, [r1]\n\
+ b _080528DA\n\
+ .align 2, 0\n\
+_080528CC: .4byte 0x00000113\n\
+_080528D0: .4byte gUnknown_08527F18\n\
+_080528D4: .4byte 0xFFFFFEEC\n\
+_080528D8:\n\
+ movs r0, #0xc8\n\
+_080528DA:\n\
+ bx lr");
+}
+#endif
+
+void sub_52940(u16, s8, s8, u8, int);
+
+void sub_528DC(u16 a, s8 b)
+{
+ m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x99);
+ sub_52940(a, b, 0x7D, 10, 0);
+}
+
+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)
+{
+ u16 r5 = a - 1;
+ u32 pitch = 0x3C00;
+ u32 var;
+ u32 r1;
+ u8 r0;
+
+ SetPokemonCryVolume(c);
+ SetPokemonCryPanpot(b);
+ SetPokemonCryPitch(pitch);
+ SetPokemonCryLength(0x8C);
+ SetPokemonCryProgress(0);
+ SetPokemonCryRelease(0);
+ SetPokemonCryChorus(0);
+ SetPokemonCryPriority(d);
+ var = sub_528AC(r5);
+ r1 = var & 0x7F;
+ r0 = var >> 7;
+ switch (r0)
+ {
+ case 0:
+ SetPokemonCryTone(&gUnknown_08532D6C[r1]);
+ break;
+ case 1:
+ SetPokemonCryTone(&gUnknown_08533360[r1]);
+ break;
+ case 2:
+ SetPokemonCryTone(&gUnknown_08533960[r1]);
+ break;
+ case 3:
+ SetPokemonCryTone(&gUnknown_08533F60[r1]);
+ break;
+ }
+}
+
+extern u16 sub_52A68(void);
+extern void sub_525CC(s8);
+
+void sub_52A18(void)
+{
+ SetSramFastFunc();
+ gMain.unkC = 0;
+ if (sub_52A68() == 0)
+ {
+ sub_52C64();
+ sub_52B30();
+ if (sub_52A68() == 0)
+ {
+ gMain.unkC = 1;
+ sub_52C64();
+ }
+ }
+ else
+ {
+ sub_525CC(gMain.saveData.unk143);
+ }
+}
+
+extern struct Main2 gMain_;
+extern u8 gSaveFileSignature[];
+
+u16 sub_52A68(void)
+{
+ u16 r8 = 0;
+ u16 fileNum;
+ u16 i;
+ u32 checksum;
+
+ // 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;
+
+ ReadSramFast((u8 *)0x0E000004 + fileNum * 672, (u8 *)saveData, size);
+
+ // Verify signature
+ for (i = 0; i < 10; i++)
+ {
+ if (gMain.saveData.signature[i] != gSaveFileSignature[i])
+ break;
+ }
+ if (i != 10)
+ continue;
+
+ // Verify checksum
+ 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);
+ if (checksum == 0xFFFF)
+ {
+ r8 = 1;
+ break;
+ }
+ }
+ return r8;
+}
+
+// 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)
+{
+ u32 checksum;
+ u16 *saveData = (u16 *)&gUnknown_0200B134_;
+ u32 size = 0x274;
+
+ gUnknown_0200B134_.unk2E4++;
+ gUnknown_0200B134_.unk2E2 = 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);
+ gUnknown_0200B134_.unk2E2 = ~((checksum >> 16) + checksum);
+
+ WriteAndVerifySramFast((u8 *)&gUnknown_0200B134_, (u8 *)0x0E000004, 0x274);
+ WriteAndVerifySramFast((u8 *)&gUnknown_0200B134_, (u8 *)0x0E0002A4, 0x274);
+}
+
+void sub_52BB0(s16 a, u8 b)
+{
+ u16 *saveData = (u16 *)&gUnknown_0200B134_;
+ u32 size = 0x274;
+ u32 checksum;
+
+ if (gUnknown_0200B134_.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);
+ }
+}
+
+void sub_52C44(void)
+{
+ ReadSramFast((u8 *)0x0E000544, (u8 *)&gMain.hasSavedGame, sizeof(gMain.hasSavedGame));
+}
+
+void sub_52C64(void)
+{
+ s16 r1;
+
+ for (r1 = 0; r1 < 10; r1++)
+ gUnknown_0200B134_.signature[r1] = gSaveFileSignature[r1];
+ gUnknown_0200B134_.unk2E4 = 0;
+ gUnknown_0200B134_.unk141 = 0;
+ gUnknown_0200B134_.unk142 = 0;
+ sub_525CC(-1);
+ sub_F6E0();
+ sub_8ABC();
+ gUnknown_0200B134_.unk143 = 0;
+}
diff --git a/src/titlescreen.c b/src/titlescreen.c
index 6a2bcac..22bc699 100755
--- a/src/titlescreen.c
+++ b/src/titlescreen.c
@@ -12,6 +12,15 @@ static void sub_11640(void);
// it will transition to a demo gameplay experience.
#define NUM_IDLE_FRAMES 1800
+enum
+{
+ SUBSTATE_LOAD_GRAPHICS = 0,
+ SUBSTATE_WAIT_FOR_START_BUTTON = 1,
+ SUBSTATE_MENU_INPUT_NO_SAVED_GAME = 4,
+ SUBSTATE_MENU_INPUT_SAVED_GAME = 5,
+ SUBSTATE_ANIM_CLOSE_MENU = 6,
+ SUBSTATE_EXEC_MENU_SELECTION = 10
+};
void TitlescreenMain(void)
{
@@ -33,7 +42,7 @@ void LoadTitlescreenGraphics(void)
DmaCopy16(3, gTitlescreenBgTilemap, (void *)BG_SCREEN_ADDR(0), BG_SCREEN_SIZE);
sub_52C44();
- if (gMain.unk40 == 1)
+ if (gMain.hasSavedGame == TRUE)
{
DmaCopy16(3, gTitlescreenSprites_Pals, (void *)OBJ_PLTT, 0xA0);
DmaCopy16(3, gTitlescreenSpritesSavedGame_Gfx, (void *)BG_CHAR_ADDR(4), 0x7000);
@@ -62,7 +71,7 @@ void LoadTitlescreenGraphics(void)
}
else
{
- gMain.subState = 1;
+ gMain.subState = SUBSTATE_WAIT_FOR_START_BUTTON;
sub_CBC();
sub_FD5C(sub_11640);
}
@@ -74,7 +83,7 @@ void sub_10AC0(void)
{
int i;
- gTitlescreen.unk4 = 0;
+ gTitlescreen.animTimer = 0;
gTitlescreen.unk2 = 0;
gTitlescreen.unk6 = 0;
gTitlescreen.unk8 = 0;
@@ -93,7 +102,7 @@ void sub_10AC0(void)
gEReaderAccessStep = 0;
gEReaderAccessCounter = 0;
- if (gMain.unk40 == 1)
+ if (gMain.hasSavedGame == TRUE)
{
for (i = 0; i < 7; i++)
gUnknown_0202BE00[i] = gUnknown_086A975C[i];
@@ -123,7 +132,7 @@ void sub_10AC0(void)
gUnknown_202BE24 = 0;
}
-void sub_10BB8(void)
+void TitleScreen1_WaitForStartButton(void)
{
if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
== (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
@@ -142,10 +151,10 @@ void sub_10BB8(void)
if (!gUnknown_020028A4)
{
- gTitlescreen.unk4++;
- if (gTitlescreen.unk4 >= gUnknown_086A9662[gTitlescreen.unk8])
+ gTitlescreen.animTimer++;
+ if (gTitlescreen.animTimer >= gUnknown_086A9662[gTitlescreen.unk8])
{
- gTitlescreen.unk4 = 0;
+ gTitlescreen.animTimer = 0;
if (++gTitlescreen.unk8 > 3)
gTitlescreen.unk8 = 0;
}
@@ -156,7 +165,7 @@ void sub_10BB8(void)
if (gMain.newKeys & (A_BUTTON | START_BUTTON))
{
m4aSongNumStart(0x65);
- gTitlescreen.unk4 = 0;
+ gTitlescreen.animTimer = 0;
gTitlescreen.unk2 = 0;
gMain.subState = 2;
}
@@ -185,7 +194,7 @@ void sub_10BB8(void)
sub_11640();
}
-void sub_10CF0(void)
+void TitleScreen2_Unknown(void)
{
if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
== (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
@@ -197,10 +206,10 @@ void sub_10CF0(void)
if (!gUnknown_020028A4)
{
- gTitlescreen.unk4++;
- if (gTitlescreen.unk4 >= gUnknown_086A9666[gTitlescreen.unk2][1])
+ gTitlescreen.animTimer++;
+ if (gTitlescreen.animTimer >= gUnknown_086A9666[gTitlescreen.unk2][1])
{
- gTitlescreen.unk4 = 0;
+ gTitlescreen.animTimer = 0;
gTitlescreen.unk8 = gUnknown_086A9666[gTitlescreen.unk2][0];
if (++gTitlescreen.unk2 > 5)
{
@@ -216,14 +225,14 @@ void sub_10CF0(void)
sub_11640();
}
-void sub_10D84(void)
+void TitleScreen9_Unknown(void)
{
if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
== (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
{
gUnknown_020028A4 = 1;
gTitlescreen.unk6 = 9;
- gMain.subState = 10;
+ gMain.subState = SUBSTATE_EXEC_MENU_SELECTION;
}
if (!gUnknown_020028A4)
@@ -235,20 +244,20 @@ void sub_10D84(void)
sub_2B4();
m4aMPlayAllStop();
sub_D10();
- gMain.subState = 0;
+ gMain.subState = SUBSTATE_LOAD_GRAPHICS;
}
else if (gMain.newKeys & B_BUTTON)
{
m4aSongNumStart(0x66);
gTitlescreen.unk11 = 0;
- gMain.subState = 1;
+ gMain.subState = SUBSTATE_WAIT_FOR_START_BUTTON;
}
}
sub_11640();
}
-void sub_10E00(void)
+void TitleScreen3_Unknown(void)
{
if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
== (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
@@ -262,17 +271,17 @@ void sub_10E00(void)
{
if (!gTitlescreen.unk7)
{
- gTitlescreen.unk4++;
- if (gTitlescreen.unk4 >= gUnknown_086A9748[gTitlescreen.unk2])
+ gTitlescreen.animTimer++;
+ if (gTitlescreen.animTimer >= gUnknown_086A9748[gTitlescreen.unk2])
{
- gTitlescreen.unk4 = 0;
+ gTitlescreen.animTimer = 0;
gUnknown_0201C190[6] = gUnknown_086A9714[gTitlescreen.unk2];
if (++gTitlescreen.unk2 > 11)
{
gTitlescreen.unk2 = 0;
gTitlescreen.unkD = 1;
gTitlescreen.unkF = 1;
- gMain.subState = 4;
+ gMain.subState = SUBSTATE_MENU_INPUT_NO_SAVED_GAME;
}
}
@@ -280,17 +289,17 @@ void sub_10E00(void)
}
else
{
- gTitlescreen.unk4++;
- if (gTitlescreen.unk4 >= gUnknown_086A9748[gTitlescreen.unk2])
+ gTitlescreen.animTimer++;
+ if (gTitlescreen.animTimer >= gUnknown_086A9748[gTitlescreen.unk2])
{
- gTitlescreen.unk4 = 0;
+ gTitlescreen.animTimer = 0;
gUnknown_0202BE00[6] = gUnknown_086A9778[gTitlescreen.unk2];
if (++gTitlescreen.unk2 > 11)
{
gTitlescreen.unk2 = 0;
gTitlescreen.unkD = 1;
gTitlescreen.unkF = 1;
- gMain.subState = 5;
+ gMain.subState = SUBSTATE_MENU_INPUT_SAVED_GAME;
}
}
@@ -299,22 +308,22 @@ void sub_10E00(void)
}
}
-void sub_10EF4(void)
+void TitleScreen4_MenuInputNoSavedGame(void)
{
if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
== (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
{
gUnknown_020028A4 = 1;
gTitlescreen.unk6 = 9;
- gMain.subState = 10;
+ gMain.subState = SUBSTATE_EXEC_MENU_SELECTION;
}
if (!gUnknown_020028A4)
{
- gTitlescreen.unk4++;
- if (gTitlescreen.unk4 >= gUnknown_086A9672[gTitlescreen.unk2][1])
+ gTitlescreen.animTimer++;
+ if (gTitlescreen.animTimer >= gUnknown_086A9672[gTitlescreen.unk2][1])
{
- gTitlescreen.unk4 = 0;
+ gTitlescreen.animTimer = 0;
if (++gTitlescreen.unk2 > 6)
gTitlescreen.unk2 = 0;
@@ -338,18 +347,18 @@ void sub_10EF4(void)
if (gMain.newKeys & (A_BUTTON | START_BUTTON))
{
m4aSongNumStart(0x65);
- gTitlescreen.unk4 = 0;
+ gTitlescreen.animTimer = 0;
gTitlescreen.unk2 = 0;
gMain.subState = 7;
}
else if (gMain.newKeys & B_BUTTON)
{
m4aSongNumStart(0x66);
- gTitlescreen.unk4 = 0;
+ gTitlescreen.animTimer = 0;
gTitlescreen.unk2 = 12;
gTitlescreen.unkD = 0;
gTitlescreen.unkF = 0;
- gMain.subState = 6;
+ gMain.subState = SUBSTATE_ANIM_CLOSE_MENU;
}
sub_1157C();
@@ -358,7 +367,7 @@ void sub_10EF4(void)
sub_1175C();
}
-void sub_11020(void)
+void TitleScreen7_Unknown(void)
{
if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
== (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
@@ -370,9 +379,9 @@ void sub_11020(void)
if (!gUnknown_020028A4)
{
- u16 unk4 = gTitlescreen.unk4;
+ u16 animTimer = gTitlescreen.animTimer;
u16 mask = 0x3;
- if (!(unk4 & mask))
+ if (!(animTimer & mask))
{
if (!gTitlescreen.unk2)
{
@@ -387,35 +396,35 @@ void sub_11020(void)
}
}
- if (gTitlescreen.unk4 > 20)
+ if (gTitlescreen.animTimer > 20)
{
gMain.unkD = 0;
gTitlescreen.unk6 = gUnknown_086A96A4[gTitlescreen.menuCursorIndex];
- gMain.subState = 10;
+ gMain.subState = SUBSTATE_EXEC_MENU_SELECTION;
}
- gTitlescreen.unk4++;
+ gTitlescreen.animTimer++;
}
sub_1175C();
}
-void sub_110FC(void)
+void TitleScreen5_MenuInputSavedGame(void)
{
if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
== (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
{
gUnknown_020028A4 = 1;
gTitlescreen.unk6 = 9;
- gMain.subState = 10;
+ gMain.subState = SUBSTATE_EXEC_MENU_SELECTION;
}
if (!gUnknown_020028A4)
{
- gTitlescreen.unk4++;
- if (gTitlescreen.unk4 >= gUnknown_086A9672[gTitlescreen.unk2][1])
+ gTitlescreen.animTimer++;
+ if (gTitlescreen.animTimer >= gUnknown_086A9672[gTitlescreen.unk2][1])
{
- gTitlescreen.unk4 = 0;
+ gTitlescreen.animTimer = 0;
if (++gTitlescreen.unk2 > 6)
gTitlescreen.unk2 = 0;
@@ -439,18 +448,18 @@ void sub_110FC(void)
if (gMain.newKeys & (A_BUTTON | START_BUTTON))
{
m4aSongNumStart(0x65);
- gTitlescreen.unk4 = 0;
+ gTitlescreen.animTimer = 0;
gTitlescreen.unk2 = 0;
gMain.subState = 8;
}
else if (gMain.newKeys & B_BUTTON)
{
m4aSongNumStart(0x66);
- gTitlescreen.unk4 = 0;
+ gTitlescreen.animTimer = 0;
gTitlescreen.unk2 = 12;
gTitlescreen.unkD = 0;
gTitlescreen.unkF = 0;
- gMain.subState = 6;
+ gMain.subState = SUBSTATE_ANIM_CLOSE_MENU;
}
sub_1157C();
@@ -459,7 +468,7 @@ void sub_110FC(void)
sub_11968();
}
-void sub_11228(void)
+void TitleScreen8_Unknown(void)
{
if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
== (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
@@ -471,9 +480,11 @@ void sub_11228(void)
if (!gUnknown_020028A4)
{
- u16 unk4 = gTitlescreen.unk4;
+ u16 animTimer = gTitlescreen.animTimer;
u16 mask = 0x3;
- if (!(unk4 & mask))
+
+ // Blink menu item
+ if (!(animTimer & mask))
{
if (!gTitlescreen.unk2)
{
@@ -488,7 +499,7 @@ void sub_11228(void)
}
}
- if (gTitlescreen.unk4 > 20)
+ if (gTitlescreen.animTimer > 20)
{
if (gTitlescreen.menuCursorIndex == 1)
gMain.unkD = 1;
@@ -496,16 +507,16 @@ void sub_11228(void)
gMain.unkD = 0;
gTitlescreen.unk6 = gUnknown_086A96D4[gTitlescreen.menuCursorIndex];
- gMain.subState = 10;
+ gMain.subState = SUBSTATE_EXEC_MENU_SELECTION;
}
- gTitlescreen.unk4++;
+ gTitlescreen.animTimer++;
}
sub_11968();
}
-void sub_11320(void)
+void TitleScreen6_AnimCloseMenu(void)
{
if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
== (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
@@ -519,10 +530,10 @@ void sub_11320(void)
{
if (!gTitlescreen.unk7)
{
- gTitlescreen.unk4++;
- if (gTitlescreen.unk4 >= gUnknown_086A9748[gTitlescreen.unk2])
+ gTitlescreen.animTimer++;
+ if (gTitlescreen.animTimer >= gUnknown_086A9748[gTitlescreen.unk2])
{
- gTitlescreen.unk4 = 0;
+ gTitlescreen.animTimer = 0;
if (--gTitlescreen.unk2 < 0)
{
gTitlescreen.unk2 = 0;
@@ -530,7 +541,7 @@ void sub_11320(void)
gUnknown_202BE24 = 1;
gTitlescreen.unk9 = 1;
gTitlescreen.unkB = 0;
- gMain.subState = 1;
+ gMain.subState = SUBSTATE_WAIT_FOR_START_BUTTON;
}
gUnknown_0201C190[6] = gUnknown_086A9714[gTitlescreen.unk2];
@@ -540,10 +551,10 @@ void sub_11320(void)
}
else
{
- gTitlescreen.unk4++;
- if (gTitlescreen.unk4 >= gUnknown_086A9748[gTitlescreen.unk2])
+ gTitlescreen.animTimer++;
+ if (gTitlescreen.animTimer >= gUnknown_086A9748[gTitlescreen.unk2])
{
- gTitlescreen.unk4 = 0;
+ gTitlescreen.animTimer = 0;
if (--gTitlescreen.unk2 < 0)
{
gTitlescreen.unk2 = 0;
@@ -551,7 +562,7 @@ void sub_11320(void)
gUnknown_202BE24 = 1;
gTitlescreen.unk9 = 1;
gTitlescreen.unkB = 0;
- gMain.subState = 1;
+ gMain.subState = SUBSTATE_WAIT_FOR_START_BUTTON;
}
gUnknown_0202BE00[6] = gUnknown_086A9778[gTitlescreen.unk2];
@@ -562,7 +573,7 @@ void sub_11320(void)
}
}
-void sub_11428(void)
+void TitleScreen10_ExecMenuSelection(void)
{
if (!gTitlescreen.unk7)
sub_FE04(sub_1175C);
@@ -581,7 +592,7 @@ void sub_11428(void)
SetMainGameState(gUnknown_086A964C[gTitlescreen.unk6]);
}
-void sub_114B4(void)
+void TitleScreen11_Unknown(void)
{
sub_FE04(sub_11640);
m4aMPlayAllStop();
@@ -634,10 +645,10 @@ static void sub_1157C(void)
gEReaderAccessCounter = 0;
m4aSongNumStart(0x65);
gTitlescreen.unk6 = 5;
- if (gMain.subState == 1)
+ if (gMain.subState == SUBSTATE_WAIT_FOR_START_BUTTON)
gMain.subState = 11;
else
- gMain.subState = 10;
+ gMain.subState = SUBSTATE_EXEC_MENU_SELECTION;
}
}
@@ -852,6 +863,6 @@ void sub_11B74(void)
{
sub_52C64();
sub_52B30();
- gMain.unk40 = 0;
- WriteAndVerifySramFast((const u8 *)&gMain.unk40, (void *)0x0E000544, 4);
+ gMain.hasSavedGame = FALSE;
+ WriteAndVerifySramFast((const u8 *)&gMain.hasSavedGame, (void *)0x0E000544, sizeof(gMain.hasSavedGame));
}