summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2019-06-14 09:05:18 -0400
committerGitHub <noreply@github.com>2019-06-14 09:05:18 -0400
commit117c3fb8cc0f476cc3408afdb316f3ece41a1fe4 (patch)
treeb1504928152a96158c27959a370a058b6962ceed
parentb26196e1f874fe5ebe9fe306e7ce18c06fa23715 (diff)
parentbba7f06cd939e3e4df0f445708c8c86bd0f36906 (diff)
Merge pull request #67 from pret/help_system
Help system
-rw-r--r--asm/help_system.s2254
-rw-r--r--asm/save_failed_screen.s16
-rw-r--r--data/data_83FECCC.s70
-rw-r--r--data/help_system.s8
-rw-r--r--data/maps/Route25_SeaCottage/scripts.inc2
-rw-r--r--graphics/help_system/unk_8464008.pngbin0 -> 200 bytes
-rw-r--r--include/constants/flags.h2
-rw-r--r--include/constants/songs.h4
-rw-r--r--include/global.h1
-rw-r--r--include/help_system.h101
-rw-r--r--include/m4a.h5
-rw-r--r--include/songs.h468
-rw-r--r--include/strings.h6
-rw-r--r--include/text.h6
-rw-r--r--ld_script.txt4
-rw-r--r--src/help_system.c1202
-rw-r--r--src/help_system_812B1E0.c108
-rw-r--r--src/main.c4
-rw-r--r--src/vs_seeker.c2
-rw-r--r--sym_ewram.txt29
20 files changed, 1402 insertions, 2890 deletions
diff --git a/asm/help_system.s b/asm/help_system.s
deleted file mode 100644
index cb44523e6..000000000
--- a/asm/help_system.s
+++ /dev/null
@@ -1,2254 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_813B870
-sub_813B870: @ 813B870
- push {r4,r5,lr}
- ldr r0, _0813B888 @ =gUnknown_203F178
- ldrb r0, [r0, 0x15]
- cmp r0, 0x8
- bls _0813B87C
- b _0813BB24
-_0813B87C:
- lsls r0, 2
- ldr r1, _0813B88C @ =_0813B890
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0813B888: .4byte gUnknown_203F178
-_0813B88C: .4byte _0813B890
- .align 2, 0
-_0813B890:
- .4byte _0813B8B4
- .4byte _0813B968
- .4byte _0813B994
- .4byte _0813B9D8
- .4byte _0813BA40
- .4byte _0813BA78
- .4byte _0813BAA0
- .4byte _0813BAE0
- .4byte _0813BB14
-_0813B8B4:
- ldr r1, _0813B904 @ =gUnknown_203F177
- movs r0, 0
- strb r0, [r1]
- ldr r0, _0813B908 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- bne _0813B900
- ldr r2, _0813B90C @ =gMain
- ldrh r1, [r2, 0x2E]
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _0813B8DA
- ldr r0, _0813B910 @ =gUnknown_203F175
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0813B900
-_0813B8DA:
- ldrh r1, [r2, 0x2E]
- movs r0, 0xC0
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- bne _0813B8E8
- b _0813BB24
-_0813B8E8:
- bl sub_812B45C
- lsls r0, 24
- cmp r0, 0
- beq _0813B8FA
- ldr r0, _0813B914 @ =gUnknown_3005ECC
- ldrb r0, [r0]
- cmp r0, 0
- bne _0813B918
-_0813B8FA:
- movs r0, 0xFC
- bl PlaySE
-_0813B900:
- movs r0, 0
- b _0813BB28
- .align 2, 0
-_0813B904: .4byte gUnknown_203F177
-_0813B908: .4byte gSaveBlock2Ptr
-_0813B90C: .4byte gMain
-_0813B910: .4byte gUnknown_203F175
-_0813B914: .4byte gUnknown_3005ECC
-_0813B918:
- ldr r0, _0813B94C @ =gMPlayInfo_SE1
- bl m4aMPlayStop
- ldr r0, _0813B950 @ =gMPlayInfo_SE2
- bl m4aMPlayStop
- movs r0, 0xFA
- bl PlaySE
- ldr r0, _0813B954 @ =gUnknown_203F174
- ldrb r0, [r0]
- cmp r0, 0
- bne _0813B93C
- ldr r0, _0813B958 @ =gMPlayInfo_BGM
- ldr r1, _0813B95C @ =0x0000ffff
- movs r2, 0x80
- bl m4aMPlayVolumeControl
-_0813B93C:
- bl sub_813BB38
- ldr r1, _0813B960 @ =gUnknown_203F177
- movs r0, 0x1
- strb r0, [r1]
- ldr r1, _0813B964 @ =gUnknown_203F178
- movs r0, 0x1
- b _0813BB22
- .align 2, 0
-_0813B94C: .4byte gMPlayInfo_SE1
-_0813B950: .4byte gMPlayInfo_SE2
-_0813B954: .4byte gUnknown_203F174
-_0813B958: .4byte gMPlayInfo_BGM
-_0813B95C: .4byte 0x0000ffff
-_0813B960: .4byte gUnknown_203F177
-_0813B964: .4byte gUnknown_203F178
-_0813B968:
- bl sub_813BBAC
- bl sub_813BB74
- bl sub_813BBC8
- movs r1, 0xA0
- lsls r1, 19
- ldr r0, _0813B98C @ =gUnknown_8464128
- ldrh r0, [r0, 0x1E]
- strh r0, [r1]
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- ldr r1, _0813B990 @ =gUnknown_203F178
- movs r0, 0x2
- b _0813BB22
- .align 2, 0
-_0813B98C: .4byte gUnknown_8464128
-_0813B990: .4byte gUnknown_203F178
-_0813B994:
- ldr r1, _0813B9C4 @ =0x0600c000
- movs r2, 0x80
- lsls r2, 7
- movs r0, 0
- movs r3, 0
- bl RequestDma3Fill
- ldr r0, _0813B9C8 @ =gUnknown_8464128
- movs r1, 0xA0
- lsls r1, 19
- movs r2, 0x20
- movs r3, 0
- bl RequestDma3Copy
- ldr r0, _0813B9CC @ =gUnknown_8464008
- ldr r1, _0813B9D0 @ =gDecompressionBuffer + 0x3EE0
- movs r2, 0x90
- lsls r2, 1
- movs r3, 0
- bl RequestDma3Copy
- ldr r1, _0813B9D4 @ =gUnknown_203F178
- movs r0, 0x3
- b _0813BB22
- .align 2, 0
-_0813B9C4: .4byte 0x0600c000
-_0813B9C8: .4byte gUnknown_8464128
-_0813B9CC: .4byte gUnknown_8464008
-_0813B9D0: .4byte gDecompressionBuffer + 0x3EE0
-_0813B9D4: .4byte gUnknown_203F178
-_0813B9D8:
- bl sub_813BCF4
- bl sub_813C5D4
- bl sub_813C5FC
- ldr r0, _0813BA08 @ =gUnknown_841CB49
- bl sub_813C454
- movs r0, 0x1
- bl sub_813BD14
- bl sub_812B40C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0813BA14
- ldr r0, _0813BA0C @ =gUnknown_203F190
- ldr r1, _0813BA10 @ =gUnknown_203F1AC
- bl sub_812BC54
- b _0813BA1C
- .align 2, 0
-_0813BA08: .4byte gUnknown_841CB49
-_0813BA0C: .4byte gUnknown_203F190
-_0813BA10: .4byte gUnknown_203F1AC
-_0813BA14:
- ldr r0, _0813BA34 @ =gUnknown_203F190
- ldr r1, _0813BA38 @ =gUnknown_203F1AC
- bl sub_812BCA8
-_0813BA1C:
- movs r0, 0x1
- bl sub_813BE78
- movs r0, 0x1
- bl sub_813BF50
- bl sub_813BC5C
- ldr r1, _0813BA3C @ =gUnknown_203F178
- movs r0, 0x4
- b _0813BB22
- .align 2, 0
-_0813BA34: .4byte gUnknown_203F190
-_0813BA38: .4byte gUnknown_203F1AC
-_0813BA3C: .4byte gUnknown_203F178
-_0813BA40:
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- ldr r1, _0813BA70 @ =0x00001f0c
- movs r0, 0x8
- bl SetGpuReg
- movs r1, 0x80
- lsls r1, 1
- movs r0, 0
- bl SetGpuReg
- ldr r1, _0813BA74 @ =gUnknown_203F178
- movs r0, 0x5
- b _0813BB22
- .align 2, 0
-_0813BA70: .4byte 0x00001f0c
-_0813BA74: .4byte gUnknown_203F178
-_0813BA78:
- ldr r0, _0813BA94 @ =gUnknown_203F190
- ldr r1, _0813BA98 @ =gUnknown_203F1AC
- bl sub_812BB9C
- lsls r0, 24
- cmp r0, 0
- bne _0813BB24
- movs r0, 0xFB
- bl PlaySE
- ldr r1, _0813BA9C @ =gUnknown_203F178
- movs r0, 0x6
- b _0813BB22
- .align 2, 0
-_0813BA94: .4byte gUnknown_203F190
-_0813BA98: .4byte gUnknown_203F1AC
-_0813BA9C: .4byte gUnknown_203F178
-_0813BAA0:
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- bl sub_813BC2C
- movs r1, 0
- ldr r5, _0813BAD0 @ =0x000001ff
- movs r4, 0xA0
- lsls r4, 19
- ldr r0, _0813BAD4 @ =gUnknown_8464128
- ldrh r2, [r0, 0x1E]
- ldr r3, _0813BAD8 @ =0x05000200
-_0813BABA:
- adds r0, r1, r4
- strh r2, [r0]
- adds r0, r1, r3
- strh r2, [r0]
- adds r1, 0x2
- cmp r1, r5
- ble _0813BABA
- ldr r1, _0813BADC @ =gUnknown_203F178
- movs r0, 0x7
- b _0813BB22
- .align 2, 0
-_0813BAD0: .4byte 0x000001ff
-_0813BAD4: .4byte gUnknown_8464128
-_0813BAD8: .4byte 0x05000200
-_0813BADC: .4byte gUnknown_203F178
-_0813BAE0:
- ldr r0, _0813BB04 @ =gUnknown_203F174
- ldrb r0, [r0]
- cmp r0, 0
- bne _0813BAF4
- ldr r0, _0813BB08 @ =gMPlayInfo_BGM
- ldr r1, _0813BB0C @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
-_0813BAF4:
- bl sub_813BC48
- bl sub_813BBF4
- ldr r1, _0813BB10 @ =gUnknown_203F178
- movs r0, 0x8
- b _0813BB22
- .align 2, 0
-_0813BB04: .4byte gUnknown_203F174
-_0813BB08: .4byte gMPlayInfo_BGM
-_0813BB0C: .4byte 0x0000ffff
-_0813BB10: .4byte gUnknown_203F178
-_0813BB14:
- bl sub_813BBDC
- ldr r1, _0813BB30 @ =gUnknown_203F177
- movs r0, 0
- strb r0, [r1]
- ldr r1, _0813BB34 @ =gUnknown_203F178
- movs r0, 0
-_0813BB22:
- strb r0, [r1, 0x15]
-_0813BB24:
- ldr r0, _0813BB34 @ =gUnknown_203F178
- ldrb r0, [r0, 0x15]
-_0813BB28:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0813BB30: .4byte gUnknown_203F177
-_0813BB34: .4byte gUnknown_203F178
- thumb_func_end sub_813B870
-
- thumb_func_start sub_813BB38
-sub_813BB38: @ 813BB38
- ldr r2, _0813BB60 @ =gUnknown_203F178
- ldr r1, _0813BB64 @ =gMain
- ldr r0, [r1, 0xC]
- str r0, [r2]
- ldr r0, [r1, 0x10]
- str r0, [r2, 0x4]
- movs r0, 0
- str r0, [r1, 0xC]
- str r0, [r1, 0x10]
- ldr r1, _0813BB68 @ =0x040000b0
- ldrh r2, [r1, 0xA]
- ldr r0, _0813BB6C @ =0x0000c5ff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r2, [r1, 0xA]
- ldr r0, _0813BB70 @ =0x00007fff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r0, [r1, 0xA]
- bx lr
- .align 2, 0
-_0813BB60: .4byte gUnknown_203F178
-_0813BB64: .4byte gMain
-_0813BB68: .4byte 0x040000b0
-_0813BB6C: .4byte 0x0000c5ff
-_0813BB70: .4byte 0x00007fff
- thumb_func_end sub_813BB38
-
- thumb_func_start sub_813BB74
-sub_813BB74: @ 813BB74
- push {r4,lr}
- movs r0, 0
- bl GetGpuReg
- ldr r4, _0813BBA8 @ =gUnknown_203F178
- strh r0, [r4, 0x8]
- movs r0, 0x8
- bl GetGpuReg
- strh r0, [r4, 0xA]
- movs r0, 0x10
- bl GetGpuReg
- strh r0, [r4, 0xC]
- movs r0, 0x12
- bl GetGpuReg
- strh r0, [r4, 0xE]
- movs r0, 0x50
- bl GetGpuReg
- strh r0, [r4, 0x10]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0813BBA8: .4byte gUnknown_203F178
- thumb_func_end sub_813BB74
-
- thumb_func_start sub_813BBAC
-sub_813BBAC: @ 813BBAC
- push {lr}
- ldr r0, _0813BBC0 @ =0x0600c000
- ldr r1, _0813BBC4 @ =gUnknown_203B174
- movs r2, 0x80
- lsls r2, 7
- movs r3, 0
- bl RequestDma3Copy
- pop {r0}
- bx r0
- .align 2, 0
-_0813BBC0: .4byte 0x0600c000
-_0813BBC4: .4byte gUnknown_203B174
- thumb_func_end sub_813BBAC
-
- thumb_func_start sub_813BBC8
-sub_813BBC8: @ 813BBC8
- push {lr}
- ldr r0, _0813BBD8 @ =gUnknown_203F18A
- adds r1, r0, 0x1
- adds r2, r0, 0x2
- bl SaveTextColors
- pop {r0}
- bx r0
- .align 2, 0
-_0813BBD8: .4byte gUnknown_203F18A
- thumb_func_end sub_813BBC8
-
- thumb_func_start sub_813BBDC
-sub_813BBDC: @ 813BBDC
- ldr r2, _0813BBEC @ =gMain
- ldr r1, _0813BBF0 @ =gUnknown_203F178
- ldr r0, [r1]
- str r0, [r2, 0xC]
- ldr r0, [r1, 0x4]
- str r0, [r2, 0x10]
- bx lr
- .align 2, 0
-_0813BBEC: .4byte gMain
-_0813BBF0: .4byte gUnknown_203F178
- thumb_func_end sub_813BBDC
-
- thumb_func_start sub_813BBF4
-sub_813BBF4: @ 813BBF4
- push {r4,lr}
- ldr r4, _0813BC28 @ =gUnknown_203F178
- ldrh r1, [r4, 0x10]
- movs r0, 0x50
- bl SetGpuReg
- ldrh r1, [r4, 0xC]
- movs r0, 0x10
- bl SetGpuReg
- ldrh r1, [r4, 0xE]
- movs r0, 0x12
- bl SetGpuReg
- ldrh r1, [r4, 0xA]
- movs r0, 0x8
- bl SetGpuReg
- ldrh r1, [r4, 0x8]
- movs r0, 0
- bl SetGpuReg
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0813BC28: .4byte gUnknown_203F178
- thumb_func_end sub_813BBF4
-
- thumb_func_start sub_813BC2C
-sub_813BC2C: @ 813BC2C
- push {lr}
- ldr r0, _0813BC40 @ =gUnknown_203B174
- ldr r1, _0813BC44 @ =0x0600c000
- movs r2, 0x80
- lsls r2, 7
- movs r3, 0
- bl RequestDma3Copy
- pop {r0}
- bx r0
- .align 2, 0
-_0813BC40: .4byte gUnknown_203B174
-_0813BC44: .4byte 0x0600c000
- thumb_func_end sub_813BC2C
-
- thumb_func_start sub_813BC48
-sub_813BC48: @ 813BC48
- push {lr}
- ldr r0, _0813BC58 @ =gUnknown_203F18A
- adds r1, r0, 0x1
- adds r2, r0, 0x2
- bl RestoreTextColors
- pop {r0}
- bx r0
- .align 2, 0
-_0813BC58: .4byte gUnknown_203F18A
- thumb_func_end sub_813BC48
-
- thumb_func_start sub_813BC5C
-sub_813BC5C: @ 813BC5C
- push {lr}
- ldr r0, _0813BC70 @ =gDecompressionBuffer
- ldr r1, _0813BC74 @ =0x0600c000
- movs r2, 0x80
- lsls r2, 7
- movs r3, 0
- bl RequestDma3Copy
- pop {r0}
- bx r0
- .align 2, 0
-_0813BC70: .4byte gDecompressionBuffer
-_0813BC74: .4byte 0x0600c000
- thumb_func_end sub_813BC5C
-
- thumb_func_start sub_813BC78
-sub_813BC78: @ 813BC78
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r4, [sp, 0x20]
- ldr r5, [sp, 0x24]
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- lsls r2, 24
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 16
- lsrs r7, r5, 16
- lsrs r0, r2, 24
- adds r2, r0, r4
- cmp r0, r2
- bge _0813BCDE
- mov r12, r2
- ldr r1, _0813BCF0 @ =gDecompressionBuffer + 0x3800
- mov r10, r1
-_0813BCAE:
- mov r4, r9
- mov r2, r8
- adds r1, r4, r2
- adds r3, r0, 0x1
- cmp r4, r1
- bge _0813BCD6
- lsls r2, r0, 6
- mov r5, r10
-_0813BCBE:
- lsls r0, r4, 1
- adds r0, r2, r0
- adds r0, r5
- strh r6, [r0]
- adds r0, r6, r7
- lsls r0, 16
- lsrs r6, r0, 16
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, r1
- blt _0813BCBE
-_0813BCD6:
- lsls r0, r3, 16
- lsrs r0, 16
- cmp r0, r12
- blt _0813BCAE
-_0813BCDE:
- bl sub_813BC5C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0813BCF0: .4byte gDecompressionBuffer + 0x3800
- thumb_func_end sub_813BC78
-
- thumb_func_start sub_813BCF4
-sub_813BCF4: @ 813BCF4
- push {lr}
- sub sp, 0x8
- ldr r0, _0813BD10 @ =0x000001ff
- movs r1, 0x14
- str r1, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- movs r2, 0
- movs r3, 0x1E
- bl sub_813BC78
- add sp, 0x8
- pop {r0}
- bx r0
- .align 2, 0
-_0813BD10: .4byte 0x000001ff
- thumb_func_end sub_813BCF4
-
- thumb_func_start sub_813BD14
-sub_813BD14: @ 813BD14
- push {lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _0813BD26
- cmp r2, 0x1
- beq _0813BD40
- b _0813BD54
-_0813BD26:
- ldr r0, _0813BD3C @ =0x000001ff
- movs r1, 0x2
- str r1, [sp]
- str r2, [sp, 0x4]
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x7
- bl sub_813BC78
- b _0813BD54
- .align 2, 0
-_0813BD3C: .4byte 0x000001ff
-_0813BD40:
- movs r0, 0xF4
- lsls r0, 1
- movs r1, 0x2
- str r1, [sp]
- str r2, [sp, 0x4]
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x7
- bl sub_813BC78
-_0813BD54:
- add sp, 0x8
- pop {r0}
- bx r0
- thumb_func_end sub_813BD14
-
- thumb_func_start sub_813BD5C
-sub_813BD5C: @ 813BD5C
- push {lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _0813BD6E
- cmp r2, 0x1
- beq _0813BD88
- b _0813BD9C
-_0813BD6E:
- ldr r0, _0813BD84 @ =0x000001ff
- movs r1, 0x2
- str r1, [sp]
- str r2, [sp, 0x4]
- movs r1, 0xD
- movs r2, 0
- movs r3, 0x10
- bl sub_813BC78
- b _0813BD9C
- .align 2, 0
-_0813BD84: .4byte 0x000001ff
-_0813BD88:
- movs r0, 0xD0
- lsls r0, 1
- movs r1, 0x2
- str r1, [sp]
- str r2, [sp, 0x4]
- movs r1, 0xD
- movs r2, 0
- movs r3, 0x10
- bl sub_813BC78
-_0813BD9C:
- add sp, 0x8
- pop {r0}
- bx r0
- thumb_func_end sub_813BD5C
-
- thumb_func_start sub_813BDA4
-sub_813BDA4: @ 813BDA4
- push {lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _0813BDB6
- cmp r2, 0x1
- beq _0813BDD0
- b _0813BDE2
-_0813BDB6:
- ldr r0, _0813BDCC @ =0x000001ff
- movs r1, 0x10
- str r1, [sp]
- str r2, [sp, 0x4]
- movs r1, 0x2
- movs r2, 0x3
- movs r3, 0x1A
- bl sub_813BC78
- b _0813BDE2
- .align 2, 0
-_0813BDCC: .4byte 0x000001ff
-_0813BDD0:
- movs r0, 0x10
- str r0, [sp]
- str r2, [sp, 0x4]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0x3
- movs r3, 0x1A
- bl sub_813BC78
-_0813BDE2:
- add sp, 0x8
- pop {r0}
- bx r0
- thumb_func_end sub_813BDA4
-
- thumb_func_start sub_813BDE8
-sub_813BDE8: @ 813BDE8
- push {lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _0813BDFA
- cmp r2, 0x1
- beq _0813BE14
- b _0813BE2A
-_0813BDFA:
- ldr r0, _0813BE10 @ =0x000001ff
- movs r1, 0x10
- str r1, [sp]
- str r2, [sp, 0x4]
- movs r1, 0x1
- movs r2, 0x3
- movs r3, 0x1C
- bl sub_813BC78
- b _0813BE2A
- .align 2, 0
-_0813BE10: .4byte 0x000001ff
-_0813BE14:
- movs r0, 0xFD
- lsls r0, 1
- movs r1, 0x11
- str r1, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- movs r1, 0x1
- movs r2, 0x3
- movs r3, 0x1C
- bl sub_813BC78
-_0813BE2A:
- add sp, 0x8
- pop {r0}
- bx r0
- thumb_func_end sub_813BDE8
-
- thumb_func_start sub_813BE30
-sub_813BE30: @ 813BE30
- push {lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _0813BE42
- cmp r2, 0x1
- beq _0813BE5C
- b _0813BE70
-_0813BE42:
- ldr r0, _0813BE58 @ =0x000001ff
- movs r1, 0x5
- str r1, [sp]
- str r2, [sp, 0x4]
- movs r1, 0x2
- movs r2, 0xE
- movs r3, 0x1A
- bl sub_813BC78
- b _0813BE70
- .align 2, 0
-_0813BE58: .4byte 0x000001ff
-_0813BE5C:
- movs r0, 0x8F
- lsls r0, 1
- movs r1, 0x5
- str r1, [sp]
- str r2, [sp, 0x4]
- movs r1, 0x2
- movs r2, 0xE
- movs r3, 0x1A
- bl sub_813BC78
-_0813BE70:
- add sp, 0x8
- pop {r0}
- bx r0
- thumb_func_end sub_813BE30
-
- thumb_func_start sub_813BE78
-sub_813BE78: @ 813BE78
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- beq _0813BE8A
- cmp r6, 0x1
- beq _0813BEB4
- b _0813BED8
-_0813BE8A:
- ldr r5, _0813BEB0 @ =0x000001ff
- movs r4, 0x1
- str r4, [sp]
- str r6, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0x2
- movs r3, 0x1C
- bl sub_813BC78
- str r4, [sp]
- str r6, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0x13
- movs r3, 0x1C
- bl sub_813BC78
- b _0813BED8
- .align 2, 0
-_0813BEB0: .4byte 0x000001ff
-_0813BEB4:
- ldr r0, _0813BEE0 @ =0x000001f7
- str r6, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- movs r1, 0x1
- movs r2, 0x2
- movs r3, 0x1C
- bl sub_813BC78
- movs r0, 0xFC
- lsls r0, 1
- str r6, [sp]
- str r4, [sp, 0x4]
- movs r1, 0x1
- movs r2, 0x13
- movs r3, 0x1C
- bl sub_813BC78
-_0813BED8:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0813BEE0: .4byte 0x000001f7
- thumb_func_end sub_813BE78
-
- thumb_func_start sub_813BEE4
-sub_813BEE4: @ 813BEE4
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- beq _0813BEF6
- cmp r6, 0x1
- beq _0813BF20
- b _0813BF44
-_0813BEF6:
- ldr r5, _0813BF1C @ =0x000001ff
- movs r4, 0x1
- str r4, [sp]
- str r6, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0x2
- movs r3, 0x1C
- bl sub_813BC78
- str r4, [sp]
- str r6, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0x13
- movs r3, 0x1C
- bl sub_813BC78
- b _0813BF44
- .align 2, 0
-_0813BF1C: .4byte 0x000001ff
-_0813BF20:
- ldr r0, _0813BF4C @ =0x000001fb
- str r6, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- movs r1, 0x1
- movs r2, 0x2
- movs r3, 0x1C
- bl sub_813BC78
- movs r0, 0xFE
- lsls r0, 1
- str r6, [sp]
- str r4, [sp, 0x4]
- movs r1, 0x1
- movs r2, 0x13
- movs r3, 0x1C
- bl sub_813BC78
-_0813BF44:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0813BF4C: .4byte 0x000001fb
- thumb_func_end sub_813BEE4
-
- thumb_func_start sub_813BF50
-sub_813BF50: @ 813BF50
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- beq _0813BF62
- cmp r6, 0x1
- beq _0813BF8C
- b _0813BFB2
-_0813BF62:
- ldr r5, _0813BF88 @ =0x000001ff
- movs r4, 0x14
- str r4, [sp]
- str r6, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0x1
- bl sub_813BC78
- str r4, [sp]
- str r6, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0x1D
- movs r2, 0
- movs r3, 0x1
- bl sub_813BC78
- b _0813BFB2
- .align 2, 0
-_0813BF88: .4byte 0x000001ff
-_0813BF8C:
- ldr r6, _0813BFBC @ =0x000001f9
- movs r5, 0x14
- str r5, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- adds r0, r6, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0x1
- bl sub_813BC78
- str r5, [sp]
- str r4, [sp, 0x4]
- adds r0, r6, 0
- movs r1, 0x1D
- movs r2, 0
- movs r3, 0x1
- bl sub_813BC78
-_0813BFB2:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0813BFBC: .4byte 0x000001f9
- thumb_func_end sub_813BF50
-
- thumb_func_start sub_813BFC0
-sub_813BFC0: @ 813BFC0
- push {lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _0813BFD2
- cmp r2, 0x1
- beq _0813BFE8
- b _0813BFFC
-_0813BFD2:
- ldr r0, _0813BFE4 @ =0x000001ff
- movs r1, 0x1
- str r1, [sp]
- str r2, [sp, 0x4]
- movs r2, 0x5
- movs r3, 0x1C
- bl sub_813BC78
- b _0813BFFC
- .align 2, 0
-_0813BFE4: .4byte 0x000001ff
-_0813BFE8:
- movs r0, 0xFE
- lsls r0, 1
- str r2, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- movs r1, 0x1
- movs r2, 0x5
- movs r3, 0x1C
- bl sub_813BC78
-_0813BFFC:
- add sp, 0x8
- pop {r0}
- bx r0
- thumb_func_end sub_813BFC0
-
- thumb_func_start sub_813C004
-sub_813C004: @ 813C004
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r1, 24
- lsrs r6, r1, 24
- cmp r6, 0
- beq _0813C01A
- cmp r6, 0x1
- beq _0813C040
- b _0813C06A
-_0813C01A:
- ldr r5, _0813C03C @ =0x000001ff
- movs r4, 0x1
- str r4, [sp]
- str r6, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0x1C
- movs r2, 0x3
- movs r3, 0x1
- bl sub_813BC78
- str r4, [sp]
- str r6, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0x1C
- movs r2, 0x12
- b _0813C050
- .align 2, 0
-_0813C03C: .4byte 0x000001ff
-_0813C040:
- cmp r2, 0
- bne _0813C058
- movs r0, 0xFF
- lsls r0, 1
- str r6, [sp]
- str r2, [sp, 0x4]
- movs r1, 0x1C
- movs r2, 0x3
-_0813C050:
- movs r3, 0x1
- bl sub_813BC78
- b _0813C06A
-_0813C058:
- ldr r0, _0813C074 @ =0x000001fd
- str r6, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- movs r1, 0x1C
- movs r2, 0x12
- movs r3, 0x1
- bl sub_813BC78
-_0813C06A:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C074: .4byte 0x000001fd
- thumb_func_end sub_813C004
-
- thumb_func_start HelpSystemRenderText
-HelpSystemRenderText: @ 813C078
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x38
- str r1, [sp, 0x28]
- mov r9, r2
- ldr r1, [sp, 0x58]
- ldr r2, [sp, 0x5C]
- ldr r4, [sp, 0x60]
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x24]
- lsls r3, 24
- lsrs r7, r3, 24
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x2C]
- lsls r4, 24
- lsrs r4, 24
- str r4, [sp, 0x30]
- str r7, [sp, 0x34]
-_0813C0AC:
- mov r0, r9
- ldrb r1, [r0]
- movs r2, 0x1
- add r9, r2
- adds r0, r1, 0
- subs r0, 0xF8
- cmp r0, 0x7
- bls _0813C0BE
- b _0813C358
-_0813C0BE:
- lsls r0, 2
- ldr r1, _0813C0C8 @ =_0813C0CC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0813C0C8: .4byte _0813C0CC
- .align 2, 0
-_0813C0CC:
- .4byte _0813C2D4
- .4byte _0813C348
- .4byte _0813C1E4
- .4byte _0813C1E4
- .4byte _0813C200
- .4byte _0813C0EC
- .4byte _0813C1E4
- .4byte _0813C39C
-_0813C0EC:
- mov r0, r9
- ldrb r1, [r0]
- movs r2, 0x1
- add r9, r2
- cmp r1, 0x1
- bne _0813C154
- movs r4, 0
- ldr r0, _0813C14C @ =gSaveBlock2Ptr
- ldr r1, [r0]
- ldrb r1, [r1]
- cmp r1, 0xFF
- beq _0813C0AC
- ldr r5, _0813C150 @ =gGlyphInfo + 0x80
-_0813C106:
- ldr r0, [r0]
- adds r0, r4
- ldrb r1, [r0]
- ldr r0, [sp, 0x28]
- str r0, [sp]
- str r7, [sp, 0x4]
- mov r2, r10
- str r2, [sp, 0x8]
- ldr r0, [sp, 0x2C]
- str r0, [sp, 0xC]
- ldr r2, [sp, 0x30]
- str r2, [sp, 0x10]
- ldr r0, [sp, 0x24]
- add r2, sp, 0x14
- add r3, sp, 0x1C
- bl sub_813C3AC
- ldr r0, [sp, 0x24]
- ldrb r0, [r5]
- adds r0, r7, r0
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x9
- bhi _0813C0AC
- ldr r0, _0813C14C @ =gSaveBlock2Ptr
- ldr r1, [r0]
- adds r1, r4
- ldrb r1, [r1]
- cmp r1, 0xFF
- bne _0813C106
- b _0813C0AC
- .align 2, 0
-_0813C14C: .4byte gSaveBlock2Ptr
-_0813C150: .4byte gGlyphInfo + 0x80
-_0813C154:
- cmp r1, 0x2
- bne _0813C0AC
- movs r4, 0
- ldr r5, _0813C160 @ =gGlyphInfo + 0x80
- b _0813C1BC
- .align 2, 0
-_0813C160: .4byte gGlyphInfo + 0x80
-_0813C164:
- ldrb r1, [r1]
- ldr r2, [sp, 0x28]
- str r2, [sp]
- str r7, [sp, 0x4]
- mov r0, r10
- str r0, [sp, 0x8]
- ldr r2, [sp, 0x2C]
- str r2, [sp, 0xC]
- ldr r0, [sp, 0x30]
- str r0, [sp, 0x10]
- ldr r0, [sp, 0x24]
- add r2, sp, 0x14
- add r3, sp, 0x1C
- bl sub_813C3AC
- b _0813C1AC
-_0813C184:
- ldr r0, _0813C1D8 @ =gUnknown_841CB41
- adds r1, r4, r0
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _0813C0AC
- adds r1, r0, 0
- ldr r2, [sp, 0x28]
- str r2, [sp]
- str r7, [sp, 0x4]
- mov r0, r10
- str r0, [sp, 0x8]
- ldr r2, [sp, 0x2C]
- str r2, [sp, 0xC]
- ldr r0, [sp, 0x30]
- str r0, [sp, 0x10]
- ldr r0, [sp, 0x24]
- add r2, sp, 0x14
- add r3, sp, 0x1C
- bl sub_813C3AC
-_0813C1AC:
- ldr r1, [sp, 0x24]
- ldrb r0, [r5]
- adds r0, r7, r0
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
-_0813C1BC:
- ldr r0, _0813C1DC @ =0x00000834
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0813C184
- ldr r0, _0813C1E0 @ =gUnknown_841CB3C
- adds r1, r4, r0
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _0813C164
- b _0813C0AC
- .align 2, 0
-_0813C1D8: .4byte gUnknown_841CB41
-_0813C1DC: .4byte 0x00000834
-_0813C1E0: .4byte gUnknown_841CB3C
-_0813C1E4:
- ldr r7, [sp, 0x34]
- ldr r1, _0813C1FC @ =gGlyphInfo
- adds r1, 0x81
- mov r0, r10
- adds r0, 0x1
- ldrb r1, [r1]
- adds r0, r1
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- b _0813C0AC
- .align 2, 0
-_0813C1FC: .4byte gGlyphInfo
-_0813C200:
- mov r2, r9
- ldrb r1, [r2]
- movs r0, 0x1
- add r9, r0
- subs r0, r1, 0x1
- cmp r0, 0x15
- bls _0813C210
- b _0813C0AC
-_0813C210:
- lsls r0, 2
- ldr r1, _0813C21C @ =_0813C220
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0813C21C: .4byte _0813C220
- .align 2, 0
-_0813C220:
- .4byte _0813C2C8
- .4byte _0813C2C8
- .4byte _0813C2C8
- .4byte _0813C278
- .4byte _0813C2C8
- .4byte _0813C2C8
- .4byte _0813C0AC
- .4byte _0813C2C8
- .4byte _0813C0AC
- .4byte _0813C0AC
- .4byte _0813C27C
- .4byte _0813C2C8
- .4byte _0813C2C8
- .4byte _0813C2C8
- .4byte _0813C0AC
- .4byte _0813C27C
- .4byte _0813C2CE
- .4byte _0813C2CE
- .4byte _0813C282
- .4byte _0813C2CE
- .4byte _0813C0AC
- .4byte _0813C0AC
-_0813C278:
- movs r1, 0x1
- add r9, r1
-_0813C27C:
- movs r2, 0x1
- add r9, r2
- b _0813C2C8
-_0813C282:
- mov r2, r9
- ldrb r0, [r2]
- ldr r1, [sp, 0x34]
- adds r0, r1
- subs r6, r0, r7
- cmp r6, 0
- ble _0813C2C8
- ldr r2, [sp, 0x28]
- str r2, [sp, 0x1C]
- ldr r1, [sp, 0x2C]
- lsls r0, r1, 3
- add r4, sp, 0x1C
- movs r5, 0
- strh r0, [r4, 0x4]
- ldr r2, [sp, 0x30]
- lsls r0, r2, 3
- strh r0, [r4, 0x6]
- ldr r0, [sp, 0x24]
- movs r1, 0x1
- bl GetFontAttribute
- lsls r0, 24
- lsrs r0, 24
- lsls r3, r6, 16
- lsrs r3, 16
- str r0, [sp]
- str r5, [sp, 0x4]
- adds r0, r4, 0
- adds r1, r7, 0
- mov r2, r10
- bl FillBitmapRect4Bit
- adds r0, r7, r6
- lsls r0, 24
- lsrs r7, r0, 24
-_0813C2C8:
- movs r0, 0x1
- add r9, r0
- b _0813C0AC
-_0813C2CE:
- movs r1, 0x1
- add r9, r1
- b _0813C0AC
-_0813C2D4:
- mov r2, r9
- ldrb r1, [r2]
- movs r0, 0x1
- add r9, r0
- adds r6, r1, 0
- adds r0, r6, 0
- bl GetKeypadIconTileOffset
- lsls r0, 24
- lsrs r0, 19
- ldr r1, _0813C344 @ =gKeypadIconTiles
- adds r0, r1
- str r0, [sp, 0x14]
- add r1, sp, 0x14
- movs r2, 0
- mov r8, r2
- movs r0, 0x80
- strh r0, [r1, 0x4]
- strh r0, [r1, 0x6]
- ldr r0, [sp, 0x28]
- str r0, [sp, 0x1C]
- ldr r1, [sp, 0x2C]
- lsls r0, r1, 3
- add r5, sp, 0x1C
- strh r0, [r5, 0x4]
- ldr r2, [sp, 0x30]
- lsls r0, r2, 3
- strh r0, [r5, 0x6]
- adds r0, r6, 0
- bl GetKeypadIconWidth
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- bl GetKeypadIconHeight
- lsls r0, 24
- lsrs r0, 24
- str r7, [sp]
- mov r1, r10
- str r1, [sp, 0x4]
- str r4, [sp, 0x8]
- str r0, [sp, 0xC]
- mov r2, r8
- str r2, [sp, 0x10]
- add r0, sp, 0x14
- adds r1, r5, 0
- movs r2, 0
- movs r3, 0
- bl BlitBitmapRect4Bit
- adds r0, r6, 0
- bl GetKeypadIconWidth
- b _0813C38E
- .align 2, 0
-_0813C344: .4byte gKeypadIconTiles
-_0813C348:
- mov r0, r9
- ldrb r1, [r0]
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- orrs r1, r0
- movs r0, 0x1
- add r9, r0
-_0813C358:
- cmp r1, 0
- bne _0813C36A
- ldr r1, [sp, 0x24]
- cmp r1, 0
- bne _0813C366
- adds r0, r7, 0x5
- b _0813C390
-_0813C366:
- adds r0, r7, 0x4
- b _0813C390
-_0813C36A:
- add r3, sp, 0x1C
- ldr r2, [sp, 0x28]
- str r2, [sp]
- str r7, [sp, 0x4]
- mov r0, r10
- str r0, [sp, 0x8]
- ldr r2, [sp, 0x2C]
- str r2, [sp, 0xC]
- ldr r0, [sp, 0x30]
- str r0, [sp, 0x10]
- ldr r0, [sp, 0x24]
- add r2, sp, 0x14
- bl sub_813C3AC
- ldr r1, [sp, 0x24]
- ldr r0, _0813C398 @ =gGlyphInfo
- adds r0, 0x80
- ldrb r0, [r0]
-_0813C38E:
- adds r0, r7, r0
-_0813C390:
- lsls r0, 24
- lsrs r7, r0, 24
- b _0813C0AC
- .align 2, 0
-_0813C398: .4byte gGlyphInfo
-_0813C39C:
- add sp, 0x38
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end HelpSystemRenderText
-
- thumb_func_start sub_813C3AC
-sub_813C3AC: @ 813C3AC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- adds r7, r2, 0
- mov r8, r3
- ldr r2, [sp, 0x38]
- ldr r3, [sp, 0x3C]
- ldr r4, [sp, 0x40]
- ldr r5, [sp, 0x44]
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 16
- lsrs r0, r1, 16
- adds r1, r0, 0
- lsls r2, 24
- lsrs r2, 24
- mov r10, r2
- lsls r3, 24
- lsrs r3, 24
- mov r9, r3
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- cmp r6, 0
- bne _0813C3EE
- movs r1, 0
- bl DecompressGlyphFont0
- b _0813C402
-_0813C3EE:
- cmp r6, 0x5
- bne _0813C3FA
- movs r1, 0
- bl DecompressGlyphFont5
- b _0813C402
-_0813C3FA:
- adds r0, r1, 0
- movs r1, 0
- bl DecompressGlyphFont2
-_0813C402:
- ldr r1, _0813C450 @ =gGlyphInfo
- str r1, [r7]
- movs r2, 0
- movs r0, 0x10
- strh r0, [r7, 0x4]
- strh r0, [r7, 0x6]
- ldr r0, [sp, 0x34]
- mov r3, r8
- str r0, [r3]
- lsls r0, r4, 3
- strh r0, [r3, 0x4]
- lsls r0, r5, 3
- strh r0, [r3, 0x6]
- mov r0, r10
- str r0, [sp]
- mov r3, r9
- str r3, [sp, 0x4]
- adds r0, r1, 0
- adds r0, 0x80
- ldrb r0, [r0]
- str r0, [sp, 0x8]
- adds r1, 0x81
- ldrb r0, [r1]
- str r0, [sp, 0xC]
- str r2, [sp, 0x10]
- adds r0, r7, 0
- mov r1, r8
- movs r3, 0
- bl BlitBitmapRect4Bit
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C450: .4byte gGlyphInfo
- thumb_func_end sub_813C3AC
-
- thumb_func_start sub_813C454
-sub_813C454: @ 813C454
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- movs r0, 0x1
- movs r1, 0xF
- movs r2, 0x2
- bl GenerateFontHalfRowLookupTable
- ldr r1, _0813C484 @ =gDecompressionBuffer + 0x3D00
- movs r2, 0x2
- str r2, [sp]
- movs r0, 0x7
- str r0, [sp, 0x4]
- str r2, [sp, 0x8]
- movs r0, 0x5
- adds r2, r4, 0
- movs r3, 0x6
- bl HelpSystemRenderText
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C484: .4byte gDecompressionBuffer + 0x3D00
- thumb_func_end sub_813C454
-
- thumb_func_start sub_813C488
-sub_813C488: @ 813C488
- push {r4,r5,lr}
- sub sp, 0xC
- adds r5, r0, 0
- movs r0, 0
- adds r1, r5, 0
- movs r2, 0
- bl GetStringWidth
- movs r4, 0x7C
- subs r4, r0
- movs r0, 0x1
- movs r1, 0xF
- movs r2, 0x2
- bl GenerateFontHalfRowLookupTable
- ldr r1, _0813C4C8 @ =gDecompressionBuffer + 0x3400
- lsls r4, 24
- lsrs r4, 24
- movs r2, 0x2
- str r2, [sp]
- movs r0, 0x10
- str r0, [sp, 0x4]
- str r2, [sp, 0x8]
- movs r0, 0
- adds r2, r5, 0
- adds r3, r4, 0
- bl HelpSystemRenderText
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C4C8: .4byte gDecompressionBuffer + 0x3400
- thumb_func_end sub_813C488
-
- thumb_func_start sub_813C4CC
-sub_813C4CC: @ 813C4CC
- push {r4-r6,lr}
- sub sp, 0xC
- adds r6, r0, 0
- adds r5, r1, 0
- adds r4, r2, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- movs r1, 0xF
- movs r2, 0x2
- bl GenerateFontHalfRowLookupTable
- ldr r1, _0813C508 @ =gDecompressionBuffer
- str r4, [sp]
- movs r0, 0x1A
- str r0, [sp, 0x4]
- movs r0, 0x10
- str r0, [sp, 0x8]
- movs r0, 0x2
- adds r2, r6, 0
- adds r3, r5, 0
- bl HelpSystemRenderText
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C508: .4byte gDecompressionBuffer
- thumb_func_end sub_813C4CC
-
- thumb_func_start sub_813C50C
-sub_813C50C: @ 813C50C
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x10
- mov r8, r0
- mov r9, r1
- add r1, sp, 0xC
- ldr r2, _0813C578 @ =0x0000eeee
- adds r0, r2, 0
- strh r0, [r1]
- ldr r4, _0813C57C @ =gDecompressionBuffer
- ldr r2, _0813C580 @ =0x01001a00
- adds r0, r1, 0
- adds r1, r4, 0
- bl CpuSet
- movs r0, 0x1
- movs r1, 0xE
- movs r2, 0x2
- bl GenerateFontHalfRowLookupTable
- movs r6, 0
- str r6, [sp]
- movs r5, 0x1A
- str r5, [sp, 0x4]
- movs r0, 0x10
- str r0, [sp, 0x8]
- movs r0, 0x2
- adds r1, r4, 0
- mov r2, r8
- movs r3, 0
- bl HelpSystemRenderText
- movs r0, 0x9C
- lsls r0, 4
- adds r4, r0
- str r6, [sp]
- str r5, [sp, 0x4]
- movs r0, 0xD
- str r0, [sp, 0x8]
- movs r0, 0x2
- adds r1, r4, 0
- mov r2, r9
- movs r3, 0
- bl HelpSystemRenderText
- add sp, 0x10
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C578: .4byte 0x0000eeee
-_0813C57C: .4byte gDecompressionBuffer
-_0813C580: .4byte 0x01001a00
- thumb_func_end sub_813C50C
-
- thumb_func_start sub_813C584
-sub_813C584: @ 813C584
- push {r4,r5,lr}
- sub sp, 0x10
- adds r5, r0, 0
- add r1, sp, 0xC
- ldr r2, _0813C5C8 @ =0x00001111
- adds r0, r2, 0
- strh r0, [r1]
- ldr r4, _0813C5CC @ =gDecompressionBuffer + 0x23C0
- ldr r2, _0813C5D0 @ =0x01000820
- adds r0, r1, 0
- adds r1, r4, 0
- bl CpuSet
- movs r0, 0x2
- movs r1, 0x1
- movs r2, 0x3
- bl GenerateFontHalfRowLookupTable
- movs r0, 0x6
- str r0, [sp]
- movs r0, 0x1A
- str r0, [sp, 0x4]
- movs r0, 0x5
- str r0, [sp, 0x8]
- movs r0, 0x2
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0x2
- bl HelpSystemRenderText
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C5C8: .4byte 0x00001111
-_0813C5CC: .4byte gDecompressionBuffer + 0x23C0
-_0813C5D0: .4byte 0x01000820
- thumb_func_end sub_813C584
-
- thumb_func_start sub_813C5D4
-sub_813C5D4: @ 813C5D4
- push {lr}
- sub sp, 0x4
- mov r1, sp
- ldr r2, _0813C5F0 @ =0x0000ffff
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, _0813C5F4 @ =gDecompressionBuffer + 0x3D00
- ldr r2, _0813C5F8 @ =0x010000e0
- mov r0, sp
- bl CpuSet
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0813C5F0: .4byte 0x0000ffff
-_0813C5F4: .4byte gDecompressionBuffer + 0x3D00
-_0813C5F8: .4byte 0x010000e0
- thumb_func_end sub_813C5D4
-
- thumb_func_start sub_813C5FC
-sub_813C5FC: @ 813C5FC
- push {lr}
- sub sp, 0x4
- mov r1, sp
- ldr r2, _0813C618 @ =0x0000ffff
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, _0813C61C @ =gDecompressionBuffer + 0x3400
- ldr r2, _0813C620 @ =0x01000200
- mov r0, sp
- bl CpuSet
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0813C618: .4byte 0x0000ffff
-_0813C61C: .4byte gDecompressionBuffer + 0x3400
-_0813C620: .4byte 0x01000200
- thumb_func_end sub_813C5FC
-
- thumb_func_start sub_813C624
-sub_813C624: @ 813C624
- push {lr}
- sub sp, 0x4
- mov r1, sp
- ldr r2, _0813C640 @ =0x0000ffff
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, _0813C644 @ =gDecompressionBuffer
- ldr r2, _0813C648 @ =0x01001a00
- mov r0, sp
- bl CpuSet
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0813C640: .4byte 0x0000ffff
-_0813C644: .4byte gDecompressionBuffer
-_0813C648: .4byte 0x01001a00
- thumb_func_end sub_813C624
-
- thumb_func_start sub_813C64C
-sub_813C64C: @ 813C64C
- push {r4-r7,lr}
- ldr r4, _0813C680 @ =gUnknown_203F190
- adds r3, r4, 0
- ldm r0!, {r5-r7}
- stm r3!, {r5-r7}
- movs r0, 0
- strb r1, [r4, 0xC]
- strb r2, [r4, 0xD]
- strb r0, [r4, 0xE]
- ldrh r0, [r4, 0x4]
- ldrh r1, [r4, 0x6]
- cmp r0, r1
- bcs _0813C668
- strh r0, [r4, 0x6]
-_0813C668:
- movs r0, 0
- bl sub_813BDA4
- bl sub_813C624
- bl sub_813C7CC
- bl sub_813C828
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C680: .4byte gUnknown_203F190
- thumb_func_end sub_813C64C
-
- thumb_func_start sub_813C684
-sub_813C684: @ 813C684
- ldr r1, _0813C68C @ =gUnknown_203F176
- strb r0, [r1]
- bx lr
- .align 2, 0
-_0813C68C: .4byte gUnknown_203F176
- thumb_func_end sub_813C684
-
- thumb_func_start sub_813C690
-sub_813C690: @ 813C690
- push {lr}
- ldr r1, _0813C6A0 @ =gUnknown_203F176
- ldrb r0, [r1]
- cmp r0, 0
- beq _0813C6A4
- subs r0, 0x1
- strb r0, [r1]
- b _0813C752
- .align 2, 0
-_0813C6A0: .4byte gUnknown_203F176
-_0813C6A4:
- ldr r2, _0813C6C8 @ =gMain
- ldrh r1, [r2, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0813C6D0
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0813C6CC @ =gUnknown_203F190
- ldrb r0, [r1, 0xC]
- ldrb r2, [r1, 0xD]
- adds r0, r2
- ldr r1, [r1]
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0, 0x4]
- b _0813C756
- .align 2, 0
-_0813C6C8: .4byte gMain
-_0813C6CC: .4byte gUnknown_203F190
-_0813C6D0:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0813C6E4
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x2
- negs r0, r0
- b _0813C756
-_0813C6E4:
- movs r0, 0xC0
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- beq _0813C6F4
- movs r0, 0x6
- negs r0, r0
- b _0813C756
-_0813C6F4:
- ldrh r1, [r2, 0x30]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0813C702
- movs r0, 0x1
- b _0813C718
-_0813C702:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0813C70E
- movs r0, 0x1
- b _0813C73A
-_0813C70E:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0813C730
- movs r0, 0x7
-_0813C718:
- movs r1, 0
- bl sub_813C944
- lsls r0, 24
- cmp r0, 0
- bne _0813C72A
- movs r0, 0x5
- bl PlaySE
-_0813C72A:
- movs r0, 0x4
- negs r0, r0
- b _0813C756
-_0813C730:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0813C752
- movs r0, 0x7
-_0813C73A:
- movs r1, 0x1
- bl sub_813C944
- lsls r0, 24
- cmp r0, 0
- bne _0813C74C
- movs r0, 0x5
- bl PlaySE
-_0813C74C:
- movs r0, 0x5
- negs r0, r0
- b _0813C756
-_0813C752:
- movs r0, 0x1
- negs r0, r0
-_0813C756:
- pop {r1}
- bx r1
- thumb_func_end sub_813C690
-
- thumb_func_start sub_813C75C
-sub_813C75C: @ 813C75C
- push {r4-r6,lr}
- ldr r5, _0813C784 @ =gUnknown_203F190
- ldrh r1, [r5, 0x4]
- subs r0, r1, 0x7
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r1, 0x7
- bls _0813C7C4
- ldrb r4, [r5, 0xC]
- ldrb r0, [r5, 0xD]
- adds r4, r0
- movs r0, 0
- movs r1, 0
- bl sub_813C004
- cmp r4, 0
- bne _0813C788
- movs r0, 0x1
- b _0813C7A2
- .align 2, 0
-_0813C784: .4byte gUnknown_203F190
-_0813C788:
- ldrb r0, [r5, 0xC]
- cmp r0, 0
- bne _0813C798
- ldrb r0, [r5, 0xD]
- cmp r0, 0
- beq _0813C798
- movs r0, 0x1
- b _0813C7A2
-_0813C798:
- ldr r0, _0813C7AC @ =gUnknown_203F190
- ldrb r0, [r0, 0xC]
- cmp r0, r6
- bne _0813C7B0
- movs r0, 0
-_0813C7A2:
- movs r1, 0x1
- bl sub_813C004
- b _0813C7C4
- .align 2, 0
-_0813C7AC: .4byte gUnknown_203F190
-_0813C7B0:
- cmp r0, 0
- beq _0813C7C4
- movs r0, 0
- movs r1, 0x1
- bl sub_813C004
- movs r0, 0x1
- movs r1, 0x1
- bl sub_813C004
-_0813C7C4:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_813C75C
-
- thumb_func_start sub_813C7CC
-sub_813C7CC: @ 813C7CC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r0, 0x2
- movs r1, 0x1
- bl GetFontAttribute
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r3, _0813C824 @ =gUnknown_203F190
- ldrb r5, [r3, 0xC]
- movs r6, 0
- ldrh r0, [r3, 0x6]
- cmp r6, r0
- bge _0813C81A
- adds r4, r3, 0
- movs r7, 0
-_0813C7F2:
- ldrb r1, [r4, 0x8]
- adds r1, 0x8
- lsls r1, 24
- lsrs r1, 24
- ldrb r2, [r4, 0x9]
- adds r2, r7
- lsls r2, 24
- lsrs r2, 24
- ldr r3, [r4]
- lsls r0, r5, 3
- adds r0, r3
- ldr r0, [r0]
- bl sub_813C4CC
- adds r5, 0x1
- add r7, r8
- adds r6, 0x1
- ldrh r0, [r4, 0x6]
- cmp r6, r0
- blt _0813C7F2
-_0813C81A:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C824: .4byte gUnknown_203F190
- thumb_func_end sub_813C7CC
-
- thumb_func_start sub_813C828
-sub_813C828: @ 813C828
- push {r4,lr}
- movs r0, 0x2
- movs r1, 0x1
- bl GetFontAttribute
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _0813C858 @ =gUnknown_203F190
- ldrb r1, [r3, 0x8]
- ldrb r2, [r3, 0xD]
- adds r4, r2, 0
- muls r4, r0
- adds r2, r4, 0
- ldrb r3, [r3, 0x9]
- adds r2, r3
- lsls r2, 24
- lsrs r2, 24
- ldr r0, _0813C85C @ =gFameCheckerText_ListMenuCursor
- bl sub_813C4CC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C858: .4byte gUnknown_203F190
-_0813C85C: .4byte gFameCheckerText_ListMenuCursor
- thumb_func_end sub_813C828
-
- thumb_func_start sub_813C860
-sub_813C860: @ 813C860
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x2
- movs r1, 0x1
- bl GetFontAttribute
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _0813C894 @ =gUnknown_203F190
- ldrb r1, [r3, 0x8]
- adds r2, r4, 0
- muls r2, r0
- ldrb r3, [r3, 0x9]
- adds r2, r3
- lsls r2, 24
- lsrs r2, 24
- ldr r0, _0813C898 @ =gUnknown_841CB4E
- bl sub_813C4CC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C894: .4byte gUnknown_203F190
-_0813C898: .4byte gUnknown_841CB4E
- thumb_func_end sub_813C860
-
- thumb_func_start sub_813C89C
-sub_813C89C: @ 813C89C
- push {r4,r5,lr}
- lsls r0, 24
- cmp r0, 0
- bne _0813C8EC
- ldr r0, _0813C8B4 @ =gUnknown_203F190
- ldrh r1, [r0, 0x6]
- adds r5, r0, 0
- cmp r1, 0x1
- bne _0813C8B8
- movs r4, 0
- b _0813C8CA
- .align 2, 0
-_0813C8B4: .4byte gUnknown_203F190
-_0813C8B8:
- ldrh r0, [r5, 0x6]
- lsrs r2, r0, 1
- movs r1, 0x1
- ands r1, r0
- adds r2, r1
- subs r0, r2
- subs r0, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
-_0813C8CA:
- ldrb r1, [r5, 0xC]
- cmp r1, 0
- bne _0813C8DA
- ldrb r0, [r5, 0xD]
- cmp r0, 0
- beq _0813C926
- subs r0, 0x1
- b _0813C93A
-_0813C8DA:
- ldrb r0, [r5, 0xD]
- cmp r0, r4
- bls _0813C8E4
- subs r0, 0x1
- b _0813C93A
-_0813C8E4:
- subs r0, r1, 0x1
- strb r0, [r5, 0xC]
- movs r0, 0x2
- b _0813C93E
-_0813C8EC:
- ldr r0, _0813C8FC @ =gUnknown_203F190
- ldrh r1, [r0, 0x6]
- adds r5, r0, 0
- cmp r1, 0x1
- bne _0813C900
- movs r4, 0
- b _0813C90A
- .align 2, 0
-_0813C8FC: .4byte gUnknown_203F190
-_0813C900:
- ldrh r0, [r5, 0x6]
- lsrs r2, r0, 1
- movs r1, 0x1
- ands r0, r1
- adds r4, r2, r0
-_0813C90A:
- adds r1, r5, 0
- ldrb r2, [r1, 0xC]
- ldrh r0, [r1, 0x4]
- ldrh r3, [r1, 0x6]
- subs r0, r3
- cmp r2, r0
- bne _0813C92A
- ldrb r2, [r1, 0xD]
- subs r0, r3, 0x1
- cmp r2, r0
- bge _0813C926
- adds r0, r2, 0x1
- strb r0, [r1, 0xD]
- b _0813C93C
-_0813C926:
- movs r0, 0
- b _0813C93E
-_0813C92A:
- ldrb r0, [r1, 0xD]
- cmp r0, r4
- bcc _0813C938
- adds r0, r2, 0x1
- strb r0, [r1, 0xC]
- movs r0, 0x2
- b _0813C93E
-_0813C938:
- adds r0, 0x1
-_0813C93A:
- strb r0, [r5, 0xD]
-_0813C93C:
- movs r0, 0x1
-_0813C93E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_813C89C
-
- thumb_func_start sub_813C944
-sub_813C944: @ 813C944
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r1, 24
- lsrs r6, r1, 24
- ldr r0, _0813C97C @ =gUnknown_203F190
- ldrb r7, [r0, 0xD]
- movs r5, 0
- cmp r5, r2
- bge _0813C96C
- adds r4, r2, 0
-_0813C95A:
- adds r0, r6, 0
- bl sub_813C89C
- orrs r5, r0
- lsls r0, r5, 24
- lsrs r5, r0, 24
- subs r4, 0x1
- cmp r4, 0
- bne _0813C95A
-_0813C96C:
- cmp r5, 0x1
- beq _0813C980
- cmp r5, 0x1
- ble _0813C978
- cmp r5, 0x3
- ble _0813C990
-_0813C978:
- movs r0, 0x1
- b _0813C9D6
- .align 2, 0
-_0813C97C: .4byte gUnknown_203F190
-_0813C980:
- adds r0, r7, 0
- bl sub_813C860
- bl sub_813C828
- bl sub_813BC5C
- b _0813C9D4
-_0813C990:
- bl sub_812BF88
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0813C9B8
- movs r0, 0x2
- bl sub_813C684
- bl sub_813C624
- bl sub_813C7CC
- bl sub_813C828
- bl sub_812BDEC
- bl sub_813C75C
- b _0813C9D0
-_0813C9B8:
- movs r0, 0
- bl sub_813BDA4
- bl sub_813C624
- bl sub_813C7CC
- bl sub_813C828
- movs r0, 0x1
- bl sub_813BDA4
-_0813C9D0:
- bl sub_813BC5C
-_0813C9D4:
- movs r0, 0
-_0813C9D6:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_813C944
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/save_failed_screen.s b/asm/save_failed_screen.s
index 375138d09..09503af6a 100644
--- a/asm/save_failed_screen.s
+++ b/asm/save_failed_screen.s
@@ -73,7 +73,7 @@ _080F516C:
ldr r1, _080F5188 @ =0x0000ffff
movs r2, 0x80
bl m4aMPlayVolumeControl
- bl sub_813BB38
+ bl SaveCallbacks
ldr r1, _080F518C @ =gUnknown_203AB50
movs r0, 0x1
strb r0, [r1]
@@ -83,9 +83,9 @@ _080F5184: .4byte gMPlayInfo_BGM
_080F5188: .4byte 0x0000ffff
_080F518C: .4byte gUnknown_203AB50
_080F5190:
- bl sub_813BBAC
- bl sub_813BB74
- bl sub_813BBC8
+ bl SaveMapTiles
+ bl SaveMapGPURegs
+ bl SaveMapTextColors
bl sub_80F52EC
movs r0, 0
movs r1, 0
@@ -197,7 +197,7 @@ _080F5298:
movs r0, 0
movs r1, 0
bl SetGpuReg
- bl sub_813BC2C
+ bl RestoreMapTiles
bl sub_80F52EC
ldr r1, _080F52B0 @ =gUnknown_203AB50
movs r0, 0x8
@@ -211,9 +211,9 @@ _080F52B4:
movs r2, 0x80
lsls r2, 1
bl m4aMPlayVolumeControl
- bl sub_813BC48
- bl sub_813BBF4
- bl sub_813BBDC
+ bl RestoreMapTextColors
+ bl RestoreGPURegs
+ bl RestoreCallbacks
ldr r0, _080F52E4 @ =gUnknown_3005430
movs r1, 0
str r1, [r0]
diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s
index eb922b028..1d6d7d95f 100644
--- a/data/data_83FECCC.s
+++ b/data/data_83FECCC.s
@@ -1912,77 +1912,91 @@ gUnknown_841B779:: @ 841B779
.include "data/text/teachy_tv.inc"
-gUnknown_841CB3C:: @ 841CB3C
- .incbin "baserom.gba", 0x41CB3C, 0x5
+gString_Bill:: @ 841CB3C
+ .string "BILL$"
-gUnknown_841CB41:: @ 841CB41
- .incbin "baserom.gba", 0x41CB41, 0x8
+gString_Someone:: @ 841CB41
+ .string "SOMEONE$"
-gUnknown_841CB49:: @ 841CB49
- .incbin "baserom.gba", 0x41CB49, 0x5
+gString_Help:: @ 841CB49
+ .string "HELP$"
-gUnknown_841CB4E:: @ 841CB4E
- .incbin "baserom.gba", 0x41CB4E, 0x4
+gString_HelpSystem_ClearTo8:: @ 841CB4E
+ .string "{CLEAR_TO 8}$"
gUnknown_841CB52:: @ 841CB52
- .incbin "baserom.gba", 0x41CB52, 0x8
+ .string " points$"
gUnknown_841CB5A:: @ 841CB5A
- .incbin "baserom.gba", 0x41CB5A, 0x9
+ .string " time(s)$"
gUnknown_841CB63:: @ 841CB63
- .incbin "baserom.gba", 0x41CB63, 0x46
+ .string "POKéMON JUMP RECORDS$"
+ .string "Jumps in a row:$"
+ .string "Best score:$"
+ .string "EXCELLENTS in a row:$"
gUnknown_841CBA9:: @ 841CBA9
- .incbin "baserom.gba", 0x41CBA9, 0x21
+ .string "Awesome score! You've\n"
+ .string "won {UNKNOWN_F7 01} {UNKNOWN_F7 00}!$"
gUnknown_841CBCA:: @ 841CBCA
- .incbin "baserom.gba", 0x41CBCA, 0x1A
+ .string "There's no room left now.$"
gUnknown_841CBE4:: @ 841CBE4
- .incbin "baserom.gba", 0x41CBE4, 0x19
+ .string "You can't hold any more!$"
gUnknown_841CBFD:: @ 841CBFD
- .incbin "baserom.gba", 0x41CBFD, 0x14
+ .string "Want to play again?$"
gUnknown_841CC11:: @ 841CC11
- .incbin "baserom.gba", 0x41CC11, 0x31
+ .string "Somebody dropped out.\nThe link will be canceled.$"
gUnknown_841CC42:: @ 841CC42
- .incbin "baserom.gba", 0x41CC42, 0x22
+ .string "SAVING…\nDON'T TURN OFF THE POWER.$"
gUnknown_841CC64:: @ 841CC64
- .incbin "baserom.gba", 0x41CC64, 0x9F
+ .string "Communication standby…$"
+ .string "SAVING...\nDON'T TURN OFF THE POWER.$"
+ .string "DODRIO BERRY-PICKING RECORDS$"
+ .string "BERRIES picked:$"
+ .string "Best score:$"
+ .string "BERRIES picked in a row with\nfive players:$"
gUnknown_841CD03:: @ 841CD03
- .incbin "baserom.gba", 0x41CD03, 0x22
+ .string "Announcing BERRY-PICKING results!$"
gUnknown_841CD25:: @ 841CD25
- .incbin "baserom.gba", 0x41CD25, 0x1E
+ .string "10P 30P 50P {EXTRA 0xDD}50P$"
gUnknown_841CD43:: @ 841CD43
- .incbin "baserom.gba", 0x41CD43, 0x15
+ .string "Announcing rankings!$"
gUnknown_841CD58:: @ 841CD58
- .incbin "baserom.gba", 0x41CD58, 0x22
+ .string "Announcing prizes!$"
+ .string "1:$"
+ .string "2:$"
+ .string "3:$"
+ .string "4:$"
+ .string "5:$"
gUnknown_841CD7A:: @ 841CD7A
- .incbin "baserom.gba", 0x41CD7A, 0x25
+ .string "The first-place winner gets\nthis {UNKNOWN_F7 00}!$"
gUnknown_841CD9F:: @ 841CD9F
- .incbin "baserom.gba", 0x41CD9F, 0x1B
+ .string "You can't hold any more...$"
gUnknown_841CDBA:: @ 841CDBA
- .incbin "baserom.gba", 0x41CDBA, 0x1D
+ .string "It filled its storage space.$"
gUnknown_841CDD7:: @ 841CDD7
- .incbin "baserom.gba", 0x41CDD7, 0x14
+ .string "Want to play again?$"
gUnknown_841CDEB:: @ 841CDEB
- .incbin "baserom.gba", 0x41CDEB, 0x31
+ .string "Somebody dropped out.\nThe link will be canceled.$"
gUnknown_841CE1C:: @ 841CE1C
- .incbin "baserom.gba", 0x41CE1C, 0x8
+ .string " points$"
gUnknown_841CE24:: @ 841CE24
.incbin "baserom.gba", 0x41CE24, 0x1FC
diff --git a/data/help_system.s b/data/help_system.s
deleted file mode 100644
index 3031f4c7f..000000000
--- a/data/help_system.s
+++ /dev/null
@@ -1,8 +0,0 @@
- .section .rodata
- .align 2
-
-gUnknown_8464008:: @ 8464008
- .incbin "baserom.gba", 0x464008, 0x120
-
-gUnknown_8464128:: @ 8464128
- .incbin "baserom.gba", 0x464128, 0x20
diff --git a/data/maps/Route25_SeaCottage/scripts.inc b/data/maps/Route25_SeaCottage/scripts.inc
index 5707c9938..cbcdba4e9 100644
--- a/data/maps/Route25_SeaCottage/scripts.inc
+++ b/data/maps/Route25_SeaCottage/scripts.inc
@@ -118,7 +118,7 @@ EventScript_17064A:: @ 817064A
setflag FLAG_0x235
setflag FLAG_0x031
setflag FLAG_0x234
- setflag FLAG_0x834
+ setflag FLAG_SYS_NOT_SOMEONES_PC
goto EventScript_170640
end
diff --git a/graphics/help_system/unk_8464008.png b/graphics/help_system/unk_8464008.png
new file mode 100644
index 000000000..339a685d5
--- /dev/null
+++ b/graphics/help_system/unk_8464008.png
Binary files differ
diff --git a/include/constants/flags.h b/include/constants/flags.h
index eed83d7c6..98ec3e47e 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -67,7 +67,7 @@
#define FLAG_0x82C 0x82C
#define FLAG_0x82F 0x82F
#define FLAG_0x830 0x830
-#define FLAG_0x834 0x834
+#define FLAG_SYS_NOT_SOMEONES_PC 0x834
#define FLAG_0x83C 0x83C
#define FLAG_0x83E 0x83E
#define FLAG_0x841 0x841
diff --git a/include/constants/songs.h b/include/constants/songs.h
index b83b84f26..66d239ad8 100644
--- a/include/constants/songs.h
+++ b/include/constants/songs.h
@@ -252,6 +252,10 @@
#define SE_W063B 247
#define SE_CASHIER 248
+#define SE_HELP_OPEN 250
+#define SE_HELP_CLOSE 251
+#define SE_HELP_PAGE 252
+
#define MUS_ME_ASA 256
#define MUS_FANFA1 257
#define MUS_FANFA4 258
diff --git a/include/global.h b/include/global.h
index b10f4af49..d08a1e0df 100644
--- a/include/global.h
+++ b/include/global.h
@@ -72,6 +72,7 @@
#define TEST_BUTTON(field, button) ({(field) & (button);})
#define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button)
#define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button)
+#define JOY_REPT(button) TEST_BUTTON(gMain.newAndRepeatedKeys, button)
extern u8 gStringVar1[];
extern u8 gStringVar2[];
diff --git a/include/help_system.h b/include/help_system.h
index 1f8b7bbbb..3ba0cf475 100644
--- a/include/help_system.h
+++ b/include/help_system.h
@@ -3,62 +3,91 @@
#include "global.h"
#include "list_menu.h"
+#include "blit.h"
-struct HelpSystemStruct_203F190_sub
+struct HelpSystemListMenu_sub
{
- struct ListMenuItem * field_00;
- u16 field_04;
- u16 field_06;
- u8 field_08;
- u8 field_09;
+ struct ListMenuItem * items;
+ u16 totalItems;
+ u16 maxShowed;
+ u8 left;
+ u8 top;
};
-struct HelpSystemStruct_203F190
+struct HelpSystemListMenu
{
- struct HelpSystemStruct_203F190_sub sub;
+ struct HelpSystemListMenu_sub sub;
u8 field_0C;
u8 field_0D;
u8 field_0E;
u8 filler_10[0xC];
};
-extern struct HelpSystemStruct_203F190 gUnknown_203F190;
-extern struct ListMenuItem gUnknown_203F1AC[];
+extern struct HelpSystemListMenu gHelpSystemListMenu;
+extern struct ListMenuItem gHelpSystemListMenuItems[];
extern bool8 gUnknown_3005ECC;
extern u8 gUnknown_203F175;
+// help_system_812B1E0
void sub_812B1E0(u8);
-void sub_812B484(void);
-void sub_812B4B8(void);
void HelpSystem_SetSomeVariable2(u8);
+bool8 sub_812B40C(void);
+bool8 sub_812B45C(void);
void sub_812B478(void);
-bool8 sub_812BC54(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
-bool8 sub_812BC80(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
-bool8 sub_812BCA8(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
-bool8 sub_812BCD0(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
-bool8 sub_812BD2C(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
-bool8 sub_812BD64(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
-bool8 sub_812BD98(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
-bool8 sub_812BE10(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
-bool8 sub_812BEEC(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
-bool8 sub_812BF18(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
-void sub_813C64C(struct HelpSystemStruct_203F190 *, u8, u8);
-void sub_813C4CC(const u8 *, u8, u8);
-void sub_813BDA4(u8);
+void sub_812B484(void);
+void sub_812B4B8(void);
+bool8 sub_812BB9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+bool8 sub_812BC54(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+bool8 sub_812BC80(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+bool8 sub_812BCA8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+bool8 sub_812BCD0(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+bool8 sub_812BD2C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+bool8 sub_812BD64(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+void sub_812BDEC(void);
+bool8 sub_812BE10(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+bool8 sub_812BEEC(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+bool8 sub_812BF18(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+bool8 sub_812BF88(void);
+
+// help_system
+bool8 RunHelpSystemCallback(void);
+void SaveCallbacks(void);
+void SaveMapGPURegs(void);
+void SaveMapTiles(void);
+void SaveMapTextColors(void);
+void RestoreCallbacks(void);
+void RestoreGPURegs(void);
+void RestoreMapTiles(void);
+void RestoreMapTextColors(void);
+void CommitTilemap(void);
+void sub_813BCF4(void);
+void sub_813BD14(u8);
void sub_813BD5C(u8);
+void sub_813BDA4(u8);
void sub_813BDE8(u8);
-void sub_813BFC0(u8);
+void sub_813BE30(u8);
void sub_813BE78(u8);
-s32 sub_813C690(void);
-void sub_813C75C(void);
-void sub_813C684(u8);
-void sub_813C004(u8, u8);
-void sub_813C50C(const u8 *a0, const u8 *a1);
void sub_813BEE4(u8);
-void sub_813C624(void);
-void sub_813C5FC(void);
-void sub_813C488(const u8 *str);
-void sub_813C584(const u8 *str);
-void sub_813BE30(u8);
+void sub_813BF50(u8);
+void sub_813BFC0(u8);
+void sub_813C004(u8, u8);
+void HelpSystem_PrintTextRightAlign_Row52(const u8 *str);
+void HelpSystem_PrintTextAt(const u8 *, u8, u8);
+void HelpSystem_PrintTwoStrings(const u8 *a0, const u8 *a1);
+void HelpSystem_PrintText_813C584(const u8 *str);
+void HelpSystem_FillPanel2(void);
+void HelpSystem_FillPanel1(void);
+void HelpSystem_InitListMenuController(struct HelpSystemListMenu *, u8, u8);
+void HelpSystem_SetInputDelay(u8);
+s32 HelpSystem_GetMenuInput(void);
+void sub_813C75C(void);
+
+void DecompressAndRenderGlyph(u8 font, u16 glyph, struct Bitmap *srcBlit, struct Bitmap *destBlit, u8 *destBuffer, u8 x, u8 y, u8 width, u8 height);
+void HelpSystem_PrintText_Row61(const u8 * str);
+void HelpSystem_FillPanel3(void);
+void PrintListMenuItems(void);
+void PlaceListMenuCursor(void);
+bool8 MoveCursor(u8 by, u8 dirn);
#endif //GUARD_HELP_SYSTEM_H
diff --git a/include/m4a.h b/include/m4a.h
index 24b454104..2bb7f2124 100644
--- a/include/m4a.h
+++ b/include/m4a.h
@@ -5,6 +5,11 @@
#include "gba/m4a_internal.h"
+extern struct MusicPlayerInfo gMPlayInfo_BGM;
+extern struct MusicPlayerInfo gMPlayInfo_SE1;
+extern struct MusicPlayerInfo gMPlayInfo_SE2;
+extern struct MusicPlayerInfo gMPlayInfo_SE3;
+
void m4aSoundVSync(void);
void m4aSoundVSyncOn(void);
diff --git a/include/songs.h b/include/songs.h
deleted file mode 100644
index f8d0fbf5b..000000000
--- a/include/songs.h
+++ /dev/null
@@ -1,468 +0,0 @@
-#ifndef GUARD_SONGS_H
-#define GUARD_SONGS_H
-
-#include "global.h"
-
-enum
-{
- /*0x00*/ SE_STOP,
- /*0x01*/ SE_KAIFUKU,
- /*0x02*/ SE_PC_LOGON,
- /*0x03*/ SE_PC_OFF,
- /*0x04*/ SE_PC_ON,
- /*0x05*/ SE_SELECT,
- /*0x06*/ SE_WIN_OPEN,
- /*0x07*/ SE_WALL_HIT,
- /*0x08*/ SE_DOOR,
- /*0x09*/ SE_KAIDAN,
- /*0x0A*/ SE_DANSA,
- /*0x0B*/ SE_JITENSYA,
- /*0x0C*/ SE_KOUKA_L, // Goggle told me Kouka means 'effectiveness' which makes sense, because
- /*0x0D*/ SE_KOUKA_M, // those three sounds play whenever you use a move
- /*0x0E*/ SE_KOUKA_H,
- /*0x0F*/ SE_BOWA2,
- /*0x10*/ SE_POKE_DEAD,
- /*0x11*/ SE_NIGERU,
- /*0x12*/ SE_JIDO_DOA,
- /*0x13*/ SE_NAMINORI,
- /*0x14*/ SE_BAN,
- /*0x15*/ SE_PIN,
- /*0x16*/ SE_BOO,
- /*0x17*/ SE_BOWA,
- /*0x18*/ SE_JYUNI,
- /*0x19*/ SE_A,
- /*0x1A*/ SE_I,
- /*0x1B*/ SE_U,
- /*0x1C*/ SE_E,
- /*0x1D*/ SE_O,
- /*0x1E*/ SE_N,
- /*0x1F*/ SE_SEIKAI,
- /*0x20*/ SE_HAZURE,
- /*0x21*/ SE_EXP,
- /*0x22*/ SE_JITE_PYOKO,
- /*0x23*/ SE_MU_PACHI,
- /*0x24*/ SE_TK_KASYA,
- /*0x25*/ SE_FU_ZAKU,
- /*0x26*/ SE_FU_ZAKU2,
- /*0x27*/ SE_FU_ZUZUZU,
- /*0x28*/ SE_RU_GASHIN,
- /*0x29*/ SE_RU_GASYAN,
- /*0x2A*/ SE_RU_BARI,
- /*0x2B*/ SE_RU_HYUU,
- /*0x2C*/ SE_KI_GASYAN,
- /*0x2D*/ SE_TK_WARPIN,
- /*0x2E*/ SE_TK_WARPOUT,
- /*0x2F*/ SE_TU_SAA,
- /*0x30*/ SE_HI_TURUN,
- /*0x31*/ SE_TRACK_MOVE,
- /*0x32*/ SE_TRACK_STOP,
- /*0x33*/ SE_TRACK_HAIK,
- /*0x34*/ SE_TRACK_DOOR,
- /*0x35*/ SE_MOTER,
- /*0x36*/ SE_CARD,
- /*0x37*/ SE_SAVE,
- /*0x38*/ SE_KON,
- /*0x39*/ SE_KON2,
- /*0x3A*/ SE_KON3,
- /*0x3B*/ SE_KON4,
- /*0x3C*/ SE_SUIKOMU,
- /*0x3D*/ SE_NAGERU,
- SE_TOY_C,
- SE_TOY_D,
- SE_TOY_E,
- SE_TOY_F,
- SE_TOY_G,
- SE_TOY_A,
- SE_TOY_B,
- SE_TOY_C1,
- SE_MIZU,
- SE_HASHI,
- SE_DAUGI,
- SE_PINPON,
- SE_FUUSEN1,
- SE_FUUSEN2,
- SE_FUUSEN3,
- SE_TOY_KABE,
- SE_TOY_DANGO,
- SE_DOKU,
- SE_ESUKA,
- SE_T_AME,
- SE_T_AME_E,
- SE_T_OOAME,
- SE_T_OOAME_E,
- SE_T_KOAME,
- SE_T_KOAME_E,
- SE_T_KAMI,
- SE_T_KAMI2,
- SE_ELEBETA,
- /*0x5A*/ SE_HINSI,
- /*0x5B*/ SE_EXPMAX,
- /*0x5C*/ SE_TAMAKORO,
- /*0x5D*/ SE_TAMAKORO_E,
- /*0x5E*/ SE_BASABASA,
- /*0x5F*/ SE_REGI,
- SE_C_GAJI,
- SE_C_MAKU_U,
- SE_C_MAKU_D,
- SE_C_PASI,
- SE_C_SYU,
- SE_C_PIKON,
- /*0x66*/ SE_REAPOKE,
- /*0x67*/ SE_OP_BASYU,
- /*0x68*/ SE_BT_START,
- SE_DENDOU,
- SE_JIHANKI,
- SE_TAMA,
- SE_Z_SCROLL,
- /*0x6D*/ SE_Z_PAGE,
- /*0x6E*/ SE_PN_ON,
- /*0x6F*/ SE_PN_OFF,
- /*0x70*/ SE_Z_SEARCH,
- /*0x71*/ SE_TAMAGO,
- /*0x72*/ SE_TB_START,
- /*0x73*/ SE_TB_KON,
- /*0x74*/ SE_TB_KARA,
- /*0x75*/ SE_BIDORO,
- /*0x76*/ SE_W085,
- /*0x77*/ SE_W085B,
- /*0x78*/ SE_W231,
- /*0x79*/ SE_W171,
- /*0x7A*/ SE_W233,
- /*0x7B*/ SE_W233B,
- /*0x7C*/ SE_W145,
- /*0x7D*/ SE_W145B,
- /*0x7E*/ SE_W145C,
- /*0x7F*/ SE_W240,
- /*0x80*/ SE_W015,
- /*0x81*/ SE_W081,
- /*0x82*/ SE_W081B,
- /*0x83*/ SE_W088,
- /*0x84*/ SE_W016,
- /*0x85*/ SE_W016B,
- /*0x86*/ SE_W003,
- /*0x87*/ SE_W104,
- /*0x88*/ SE_W013,
- /*0x89*/ SE_W196,
- /*0x8A*/ SE_W086,
- /*0x8B*/ SE_W004,
- /*0x8C*/ SE_W025,
- /*0x8D*/ SE_W025B,
- SE_W152,
- SE_W026,
- SE_W172,
- SE_W172B,
- SE_W053,
- SE_W007,
- SE_W092,
- SE_W221,
- SE_W221B,
- SE_W052,
- SE_W036,
- SE_W059,
- SE_W059B,
- SE_W010,
- SE_W011,
- SE_W017,
- SE_W019,
- SE_W028,
- SE_W013B,
- SE_W044,
- SE_W029,
- SE_W057,
- SE_W056,
- SE_W250,
- SE_W030,
- SE_W039,
- SE_W054,
- SE_W077,
- SE_W020,
- SE_W082,
- SE_W047,
- SE_W195,
- SE_W006,
- SE_W091,
- SE_W146,
- SE_W120,
- SE_W153,
- SE_W071B,
- SE_W071,
- SE_W103,
- /*0xB6*/ SE_W062,
- /*0xB7*/ SE_W062B,
- /*0xB8*/ SE_W048,
- /*0xB9*/ SE_W187,
- /*0xBA*/ SE_W118,
- /*0xBB*/ SE_W155,
- /*0xBC*/ SE_W122,
- /*0xBD*/ SE_W060,
- /*0xBE*/ SE_W185,
- /*0xBF*/ SE_W014,
- /*0xC0*/ SE_W043,
- /*0xC1*/ SE_W207,
- /*0xC2*/ SE_W207B,
- /*0xC3*/ SE_W215,
- /*0xC4*/ SE_W109,
- /*0xC5*/ SE_W173,
- /*0xC6*/ SE_W280,
- /*0xC7*/ SE_W202,
- /*0xC8*/ SE_W060B,
- /*0xC9*/ SE_W076,
- /*0xCA*/ SE_W080,
- /*0xCB*/ SE_W100,
- /*0xCC*/ SE_W107,
- SE_W166,
- SE_W129,
- SE_W115,
- SE_W112,
- SE_W197,
- SE_W199,
- SE_W236,
- SE_W204,
- SE_W268,
- SE_W070,
- SE_W063,
- SE_W127,
- SE_W179,
- SE_W151,
- SE_W201,
- SE_W161,
- SE_W161B,
- SE_W227,
- SE_W227B,
- SE_W226,
- SE_W208,
- SE_W213,
- SE_W213B,
- SE_W234,
- SE_W260,
- SE_W328,
- SE_W320,
- SE_W255,
- SE_W291,
- SE_W089,
- SE_W239,
- SE_W230,
- SE_W281,
- SE_W327,
- SE_W287,
- SE_W257,
- SE_W253,
- SE_W258,
- SE_W322,
- SE_W298,
- SE_W287B,
- SE_W114,
- SE_W063B,
- BGM_STOP = 349,
- /*0x15E*/ BGM_TETSUJI,
- /*0x15F*/ BGM_FIELD13,
- /*0x160*/ BGM_KACHI22,
- /*0x161*/ BGM_KACHI2,
- /*0x162*/ BGM_KACHI3,
- /*0x163*/ BGM_KACHI5,
- /*0x164*/ BGM_PCC,
- /*0x165*/ BGM_NIBI,
- /*0x166*/ BGM_SUIKUN,
- /*0x167*/ BGM_DOORO1,
- /*0x168*/ BGM_DOORO_X1,
- /*0x169*/ BGM_DOORO_X3,
- /*0x16A*/ BGM_MACHI_S2,
- /*0x16B*/ BGM_MACHI_S4,
- /*0x16C*/ BGM_GIM,
- /*0x16D*/ BGM_NAMINORI,
- /*0x16E*/ BGM_DAN01,
- /*0x16F*/ BGM_FANFA1,
- /*0x170*/ BGM_ME_ASA,
- /*0x171*/ BGM_ME_BACHI,
- /*0x172*/ BGM_FANFA4,
- /*0x173*/ BGM_FANFA5,
- /*0x174*/ BGM_ME_WAZA,
- /*0x175*/ BGM_BIJYUTU,
- /*0x176*/ BGM_DOORO_X4,
- /*0x177*/ BGM_FUNE_KAN,
- /*0x178*/ BGM_ME_SHINKA,
- /*0x179*/ BGM_SHINKA,
- /*0x17A*/ BGM_ME_WASURE,
- /*0x17B*/ BGM_SYOUJOEYE,
- /*0x17C*/ BGM_BOYEYE,
- /*0x17D*/ BGM_DAN02,
- /*0x17E*/ BGM_MACHI_S3,
- /*0x17F*/ BGM_ODAMAKI,
- /*0x180*/ BGM_B_TOWER,
- /*0x181*/ BGM_SWIMEYE,
- /*0x182*/ BGM_DAN03,
- /*0x183*/ BGM_ME_KINOMI,
- /*0x184*/ BGM_ME_TAMA,
- /*0x185*/ BGM_ME_B_BIG,
- /*0x186*/ BGM_ME_B_SMALL,
- /*0x187*/ BGM_ME_ZANNEN,
- /*0x188*/ BGM_BD_TIME,
- /*0x189*/ BGM_TEST1,
- /*0x18A*/ BGM_TEST2,
- /*0x18B*/ BGM_TEST3,
- /*0x18C*/ BGM_TEST4,
- /*0x18D*/ BGM_TEST,
- /*0x18E*/ BGM_GOMACHI0,
- /*0x18F*/ BGM_GOTOWN,
- /*0x190*/ BGM_POKECEN,
- /*0x191*/ BGM_NEXTROAD,
- /*0x192*/ BGM_GRANROAD,
- /*0x193*/ BGM_CYCLING,
- /*0x194*/ BGM_FRIENDLY,
- /*0x195*/ BGM_MISHIRO,
- /*0x196*/ BGM_TOZAN,
- /*0x197*/ BGM_GIRLEYE,
- /*0x198*/ BGM_MINAMO,
- /*0x199*/ BGM_ASHROAD,
- /*0x19A*/ BGM_EVENT0,
- /*0x19B*/ BGM_DEEPDEEP,
- /*0x19C*/ BGM_KACHI1,
- /*0x19D*/ BGM_TITLE3,
- /*0x19E*/ BGM_DEMO1,
- /*0x19F*/ BGM_GIRL_SUP,
- /*0x1A0*/ BGM_HAGESHII,
- /*0x1A1*/ BGM_KAKKOII,
- /*0x1A2*/ BGM_KAZANBAI,
- /*0x1A3*/ BGM_AQA_0,
- /*0x1A4*/ BGM_TSURETEK,
- /*0x1A5*/ BGM_BOY_SUP,
- /*0x1A6*/ BGM_RAINBOW,
- /*0x1A7*/ BGM_AYASII,
- /*0x1A8*/ BGM_KACHI4,
- /*0x1A9*/ BGM_ROPEWAY,
- /*0x1AA*/ BGM_CASINO,
- /*0x1AB*/ BGM_HIGHTOWN,
- /*0x1AC*/ BGM_SAFARI,
- BGM_C_ROAD,
- BGM_AJITO,
- BGM_M_BOAT,
- BGM_M_DUNGON,
- BGM_FINECITY,
- BGM_MACHUPI,
- BGM_P_SCHOOL,
- BGM_DENDOU,
- BGM_TONEKUSA,
- BGM_MABOROSI,
- BGM_CON_FAN,
- BGM_CONTEST0,
- BGM_MGM0,
- BGM_T_BATTLE,
- BGM_OOAME,
- BGM_HIDERI,
- BGM_RUNECITY,
- BGM_CON_K,
- BGM_EIKOU_R,
- BGM_KARAKURI,
- BGM_HUTAGO,
- BGM_SITENNOU,
- BGM_YAMA_EYE,
- BGM_CONLOBBY,
- BGM_INTER_V,
- BGM_DAIGO,
- BGM_THANKFOR,
- BGM_END,
- /*0x1C9*/ BGM_BATTLE_FRONTIER, // human-readable names start here because we don't know the actual filenames
- BGM_BATTLE_ARENA,
- BGM_ME_BATTLE_POINTS, // ME_ as in messagebox? Used for KINOMI (berries) and stuff above
- BGM_ME_MATCH_CALL,
- BGM_BATTLE_PYRAMID,
- BGM_BATTLE_PYRAMID_SUMMIT,
- BGM_BATTLE_PALACE,
- BGM_FANFA_RAYQUAZA,
- BGM_BATTLE_TOWER,
- BGM_ME_BATTLE_SYMBOL,
- BGM_BATTLE_DOME_TOURNAMENT,
- BGM_BATTLE_PIKE,
- BGM_BATTLE_FACTORY,
- BGM_BATTLE_LEGENDARY,
- BGM_BATTLE_FRONTIER_BRAIN,
- BGM_BATTLE_MEW,
- BGM_BATTLE_DOME, // end of the human-readable names
- /*0x1DA*/ BGM_BATTLE27, // wild
- BGM_BATTLE31, // aqua/magma grunt
- BGM_BATTLE20, // trainer
- BGM_BATTLE32, // gym leader
- BGM_BATTLE33, // champion
- BGM_BATTLE36, // regi
- BGM_BATTLE34, // weather trio
- BGM_BATTLE35, // rival
- BGM_BATTLE38, // elite four
- BGM_BATTLE30, // aqua/magma leader
- /*0x1E4*/ BGM_FRLG_FOLLOW_ME, // FR/LG names not known, human-readable again!
- BGM_FRLG_GAMECORNER,
- BGM_FRLG_ROCKET_HIDEOUT,
- BGM_FRLG_GYM,
- BGM_FRLG_JIGGLYPUFF,
- BGM_FRLG_OPENING,
- BGM_FRLG_TITLE,
- BGM_FRLG_CINNABAR_ISLAND,
- BGM_FRLG_LAVENDER_TOWN,
- BGM_FRLG_HEALING_TEST,
- BGM_FRLG_BICYCLE,
- BGM_FRLG_SUSPICIOUS_EYE,
- BGM_FRLG_GIRL_EYE,
- BGM_FRLG_BOY_EYE,
- BGM_FRLG_CONGRATULATIONS_HALL_OF_FAME,
- BGM_FRLG_VIRIDIAN_FOREST,
- BGM_FRLG_MT_MOON,
- BGM_FRLG_POKEMON_MANSION,
- BGM_FRLG_CREDITS,
- BGM_FRLG_ROUTE_1,
- BGM_FRLG_ROUTE_24,
- BGM_FRLG_ROUTE_3,
- BGM_FRLG_ROUTE_11,
- BGM_FRLG_INDIGO_PLATEAU,
- BGM_FRLG_BATTLE_LEADER,
- BGM_FRLG_BATTLE_TRAINER,
- BGM_FRLG_BATTLE_WILD_POKEMON,
- BGM_FRLG_BATTLE_CHAMPION,
- BGM_FRLG_PALLET_TOWN,
- BGM_FRLG_OAK_LAB,
- BGM_FRLG_PROF_OAK,
- BGM_FRLG_POKEMON_CENTER,
- BGM_FRLG_SS_ANNE,
- BGM_FRLG_SURF,
- BGM_FRLG_POKEMON_TOWER,
- BGM_FRLG_SILPH,
- BGM_FRLG_CERULEAN_CITY,
- BGM_FRLG_CELADON_CITY,
- BGM_FRLG_KACHI_TRAINER, // KACHI used in RS test - victory
- BGM_FRLG_KACHI_WILD_POKEMON,
- BGM_FRLG_KACHI_LEADER,
- BGM_FRLG_VERMILION_CITY,
- BGM_FRLG_VIRIDIAN_CITY,
- BGM_FRLG_RIVAL,
- BGM_FRLG_RIVAL_POSTBATTLE,
- BGM_FRLG_ME_POKEDEX_EVAL,
- BGM_FRLG_ME_KEYITEM,
- BGM_FRLG_FANFA_POKEMON_CAUGHT,
- BGM_FRLG_FANFA_TRAINERCARD_PHOTO,
- BGM_FRLG_GAMEFREAK_LOGO,
- BGM_FRLG_CAUGHT_POKEMON,
- BGM_FRLG_GAME_EXPLANATION_START,
- BGM_FRLG_GAME_EXPLANATION_MIDDLE,
- BGM_FRLG_GAME_EXPLANATION_END,
- BGM_FRLG_POKEMON_JUMP,
- BGM_FRLG_UNION_ROOM,
- BGM_FRLG_POKEMON_NETWORK_CENTER,
- BGM_FRLG_MYSTERY_GIFT,
- BGM_FRLG_DODRIO_BERRY_PICK,
- BGM_FRLG_MT_EMBER,
- BGM_FRLG_TEACHY_TV_EPISODE,
- BGM_FRLG_SEVII_ISLANDS,
- BGM_FRLG_TANOBY_RUINS,
- BGM_FRLG_ISLAND_ONE,
- BGM_FRLG_ISLAND_FOUR,
- BGM_FRLG_ISLAND_SIX,
- BGM_FRLG_FLUTE,
- BGM_FRLG_BATTLE_DEOXYS,
- BGM_FRLG_BATTLE_MEWTWO,
- BGM_FRLG_BATTLE_LEGENDARY,
- BGM_FRLG_LEADER_EYE,
- BGM_FRLG_DEOXYS_EYE,
- BGM_FRLG_TRAINER_TOWER,
- BGM_FRLG_HALL_OF_FAME_PALLET_TOWN,
- /*0x22E*/BGM_FRLG_TEACHY_TV,
-};
-
-#endif // GUARD_SONGS_H
diff --git a/include/strings.h b/include/strings.h
index 6cc6b93c1..8a10f02d5 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -142,4 +142,10 @@ extern const u8 gUnknown_841DFAC[];
extern const u8 gUnknown_841DFBE[];
extern const u8 gUnknown_841DFC9[];
+// help_system
+extern const u8 gString_Bill[];
+extern const u8 gString_Someone[];
+extern const u8 gString_Help[];
+extern const u8 gString_HelpSystem_ClearTo8[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/text.h b/include/text.h
index e0533cc98..dc53b4845 100644
--- a/include/text.h
+++ b/include/text.h
@@ -68,7 +68,8 @@
#define CHAR_y 0xED
#define CHAR_z 0xEE
#define CHAR_SPECIAL_F7 0xF7
-#define CHAR_SPECIAL_F9 0xF9
+#define CHAR_KEYPAD_ICON 0xF8
+#define CHAR_EXTRA_EMOJI 0xF9
#define CHAR_COLON 0xF0
#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog
#define CHAR_PROMPT_CLEAR 0xFB // waits for button press and clears dialog
@@ -192,6 +193,8 @@ extern u8 gStringVar2[];
extern u8 gStringVar3[];
extern u8 gStringVar4[];
+extern const u8 gKeypadIconTiles[];
+
void SetFontsPointer(const struct FontInfo *fonts);
void DeactivateAllTextPrinters(void);
u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16));
@@ -248,6 +251,7 @@ s32 GetGlyphWidthFont1(u16 glyphId, bool32 isJapanese);
void DecompressGlyphFont9(u16 glyphId);
s32 GetGlyphWidthFont3(u16 glyphId, bool32 isJapanese);
s32 GetGlyphWidthFont4(u16 glyphId, bool32 isJapanese);
+void DecompressGlyphFont5(u16 glyphId, bool32 isJapanese);
s32 GetGlyphWidthFont5(u16 glyphId, bool32 isJapanese);
void sub_80062B0(struct Sprite *sprite);
u8 CreateTextCursorSpriteForOakSpeech(u8 sheetId, u16 x, u16 y, u8 priority, u8 subpriority);
diff --git a/ld_script.txt b/ld_script.txt
index 5abc25e98..bde424fc9 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -248,7 +248,7 @@ SECTIONS {
asm/menu_indicators.o(.text);
asm/pokedex_area_markers.o(.text);
asm/pokemon_summary_screen.o(.text);
- asm/help_system.o(.text);
+ src/help_system.o(.text);
asm/wild_pokemon_area.o(.text);
asm/unk_text_util.o(.text);
asm/berry_pouch.o(.text);
@@ -427,7 +427,7 @@ SECTIONS {
data/menu_indicators.o(.rodata);
data/pokedex_area_markers.o(.rodata);
data/pokemon_summary_screen.o(.rodata);
- data/help_system.o(.rodata);
+ src/help_system.o(.rodata);
data/wild_pokemon_area.o(.rodata);
data/unk_text_util.o(.rodata);
data/berry_pouch.o(.rodata);
diff --git a/src/help_system.c b/src/help_system.c
new file mode 100644
index 000000000..1fd43fffa
--- /dev/null
+++ b/src/help_system.c
@@ -0,0 +1,1202 @@
+#include "global.h"
+#include "decompress.h"
+#include "gpu_regs.h"
+#include "main.h"
+#include "m4a.h"
+#include "dma3.h"
+#include "help_system.h"
+#include "list_menu.h"
+#include "sound.h"
+#include "strings.h"
+#include "text.h"
+#include "blit.h"
+#include "event_data.h"
+#include "constants/songs.h"
+#include "constants/flags.h"
+
+extern u8 gGlyphInfo[];
+
+struct HelpSystemVideoState
+{
+ /*0x00*/ MainCallback savedVblankCb;
+ /*0x04*/ MainCallback savedHblankCb;
+ /*0x08*/ u16 savedDispCnt;
+ /*0x0a*/ u16 savedBg0Cnt;
+ /*0x0c*/ u16 savedBg0Hofs;
+ /*0x0e*/ u16 savedBg0Vofs;
+ /*0x10*/ u16 savedBldCnt;
+ /*0x12*/ struct TextColor savedTextColor;
+ /*0x15*/ u8 state;
+};
+
+static EWRAM_DATA u8 sMapTilesBackup[BG_CHAR_SIZE] = {0};
+EWRAM_DATA u8 gUnknown_203F174 = 0;
+EWRAM_DATA u8 gUnknown_203F175 = 0;
+static EWRAM_DATA u8 sDelayTimer = 0;
+static EWRAM_DATA u8 sInHelpSystem = 0;
+static EWRAM_DATA struct HelpSystemVideoState sVideoState = {0};
+EWRAM_DATA struct HelpSystemListMenu gHelpSystemListMenu = {0};
+EWRAM_DATA struct ListMenuItem gHelpSystemListMenuItems[52] = {0};
+
+static const u16 sTiles[] = INCBIN_U16("graphics/help_system/unk_8464008.4bpp");
+static const u16 sPals[] = INCBIN_U16("graphics/help_system/unk_8464008.gbapal");
+
+u8 RunHelpSystemCallback(void)
+{
+ s32 i;
+
+ switch (sVideoState.state)
+ {
+ case 0:
+ sInHelpSystem = 0;
+ if (gSaveBlock2Ptr->optionsButtonMode != OPTIONS_BUTTON_MODE_NORMAL)
+ return 0;
+ if (JOY_NEW(R_BUTTON) && gUnknown_203F175 == 1)
+ return 0;
+ if (JOY_NEW(L_BUTTON | R_BUTTON))
+ {
+ if (!sub_812B45C() || !gUnknown_3005ECC)
+ {
+ PlaySE(SE_HELP_PAGE);
+ return 0;
+ }
+ m4aMPlayStop(&gMPlayInfo_SE1);
+ m4aMPlayStop(&gMPlayInfo_SE2);
+ PlaySE(SE_HELP_OPEN);
+ if (!gUnknown_203F174)
+ m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x80);
+ SaveCallbacks();
+ sInHelpSystem = 1;
+ sVideoState.state = 1;
+ }
+ break;
+ case 1:
+ SaveMapTiles();
+ SaveMapGPURegs();
+ SaveMapTextColors();
+ (*(vu16 *)PLTT) = sPals[15];
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ sVideoState.state = 2;
+ break;
+ case 2:
+ RequestDma3Fill(0, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, 0);
+ RequestDma3Copy(sPals, (void *)PLTT, sizeof(sPals), 0);
+ RequestDma3Copy(sTiles, gDecompressionBuffer + 0x3EE0, sizeof(sTiles), 0);
+ sVideoState.state = 3;
+ break;
+ case 3:
+ sub_813BCF4();
+ HelpSystem_FillPanel3();
+ HelpSystem_FillPanel2();
+ HelpSystem_PrintText_Row61(gString_Help);
+ sub_813BD14(1);
+ if (sub_812B40C() == TRUE)
+ sub_812BC54(&gHelpSystemListMenu, gHelpSystemListMenuItems);
+ else
+ sub_812BCA8(&gHelpSystemListMenu, gHelpSystemListMenuItems);
+ sub_813BE78(1);
+ sub_813BF50(1);
+ CommitTilemap();
+ sVideoState.state = 4;
+ break;
+ case 4:
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_16COLOR | BGCNT_SCREENBASE(31));
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON);
+ sVideoState.state = 5;
+ break;
+ case 5:
+ if (!sub_812BB9C(&gHelpSystemListMenu, gHelpSystemListMenuItems))
+ {
+ PlaySE(SE_HELP_CLOSE);
+ sVideoState.state = 6;
+ }
+ break;
+ case 6:
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ RestoreMapTiles();
+ for (i = 0; i < 0x200; i += 2)
+ {
+ *((vu16 *)(PLTT + 0x000 + i)) = sPals[15];
+ *((vu16 *)(PLTT + 0x200 + i)) = sPals[15];
+ }
+ sVideoState.state = 7;
+ break;
+ case 7:
+ if (!gUnknown_203F174)
+ m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
+ RestoreMapTextColors();
+ RestoreGPURegs();
+ sVideoState.state = 8;
+ break;
+ case 8:
+ RestoreCallbacks();
+ sInHelpSystem = 0;
+ sVideoState.state = 0;
+ break;
+ }
+ return sVideoState.state;
+}
+
+void SaveCallbacks(void)
+{
+ vu16 * dma;
+ sVideoState.savedVblankCb = gMain.vblankCallback;
+ sVideoState.savedHblankCb = gMain.hblankCallback;
+ gMain.vblankCallback = NULL;
+ gMain.hblankCallback = NULL;
+
+ dma = (void *)REG_ADDR_DMA0;
+ dma[5] &= ~(DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT);
+ dma[5] &= ~DMA_ENABLE;
+ dma[5];
+}
+
+void SaveMapGPURegs(void)
+{
+ sVideoState.savedDispCnt = GetGpuReg(REG_OFFSET_DISPCNT);
+ sVideoState.savedBg0Cnt = GetGpuReg(REG_OFFSET_BG0CNT);
+ sVideoState.savedBg0Hofs = GetGpuReg(REG_OFFSET_BG0HOFS);
+ sVideoState.savedBg0Vofs = GetGpuReg(REG_OFFSET_BG0VOFS);
+ sVideoState.savedBldCnt = GetGpuReg(REG_OFFSET_BLDCNT);
+}
+
+void SaveMapTiles(void)
+{
+ RequestDma3Copy((void *)BG_CHAR_ADDR(3), sMapTilesBackup, BG_CHAR_SIZE, 0);
+}
+
+void SaveMapTextColors(void)
+{
+ SaveTextColors(
+ &sVideoState.savedTextColor.fgColor,
+ &sVideoState.savedTextColor.bgColor,
+ &sVideoState.savedTextColor.shadowColor
+ );
+}
+
+void RestoreCallbacks(void)
+{
+ gMain.vblankCallback = sVideoState.savedVblankCb;
+ gMain.hblankCallback = sVideoState.savedHblankCb;
+}
+
+void RestoreGPURegs(void)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, sVideoState.savedBldCnt);
+ SetGpuReg(REG_OFFSET_BG0HOFS, sVideoState.savedBg0Hofs);
+ SetGpuReg(REG_OFFSET_BG0VOFS, sVideoState.savedBg0Vofs);
+ SetGpuReg(REG_OFFSET_BG0CNT, sVideoState.savedBg0Cnt);
+ SetGpuReg(REG_OFFSET_DISPCNT, sVideoState.savedDispCnt);
+}
+
+void RestoreMapTiles(void)
+{
+ RequestDma3Copy(sMapTilesBackup, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, 0);
+}
+
+void RestoreMapTextColors(void)
+{
+ RestoreTextColors(
+ &sVideoState.savedTextColor.fgColor,
+ &sVideoState.savedTextColor.bgColor,
+ &sVideoState.savedTextColor.shadowColor
+ );
+}
+
+void CommitTilemap(void)
+{
+ RequestDma3Copy(gDecompressionBuffer, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, 0);
+}
+
+void HS_DrawBgTilemapRect(u16 baseTile, u8 left, u8 top, u8 width, u8 height, u16 increment)
+{
+ u16 i, j;
+
+ for (i = top; i < top + height; i++)
+ {
+ for (j = left; j < left + width; j++)
+ {
+ *((u16 *)(gDecompressionBuffer + 0x3800 + 64 * i + 2 * j)) = baseTile;
+ baseTile += increment;
+ }
+ }
+
+ CommitTilemap();
+}
+
+void sub_813BCF4(void)
+{
+ HS_DrawBgTilemapRect(0x1FF, 0, 0, 30, 20, 0);
+}
+
+void sub_813BD14(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 1, 0, 7, 2, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x1E8, 1, 0, 7, 2, 1);
+ break;
+ }
+}
+
+void sub_813BD5C(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 13, 0, 16, 2, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x1A0, 13, 0, 16, 2, 1);
+ break;
+ }
+}
+
+void sub_813BDA4(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 2, 3, 26, 16, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x000, 2, 3, 26, 16, 1);
+ break;
+ }
+}
+
+void sub_813BDE8(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 1, 3, 28, 16, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x1FA, 1, 3, 28, 17, 0);
+ break;
+ }
+}
+
+void sub_813BE30(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 2, 14, 26, 5, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x11E, 2, 14, 26, 5, 1);
+ break;
+ }
+}
+
+void sub_813BE78(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 1, 2, 28, 1, 0);
+ HS_DrawBgTilemapRect(0x1FF, 1, 19, 28, 1, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x1F7, 1, 2, 28, 1, 0);
+ HS_DrawBgTilemapRect(0x1F8, 1, 19, 28, 1, 0);
+ break;
+ }
+}
+
+void sub_813BEE4(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 1, 2, 28, 1, 0);
+ HS_DrawBgTilemapRect(0x1FF, 1, 19, 28, 1, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x1FB, 1, 2, 28, 1, 0);
+ HS_DrawBgTilemapRect(0x1FC, 1, 19, 28, 1, 0);
+ break;
+ }
+}
+
+void sub_813BF50(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 0, 0, 1, 20, 0);
+ HS_DrawBgTilemapRect(0x1FF, 29, 0, 1, 20, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x1F9, 0, 0, 1, 20, 0);
+ HS_DrawBgTilemapRect(0x1F9, 29, 0, 1, 20, 0);
+ break;
+ }
+}
+
+void sub_813BFC0(u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 1, 5, 28, 1, 0);
+ break;
+ case 1:
+ HS_DrawBgTilemapRect(0x1FC, 1, 5, 28, 1, 0);
+ break;
+ }
+}
+
+void sub_813C004(u8 a0, u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ HS_DrawBgTilemapRect(0x1FF, 28, 3, 1, 1, 0);
+ HS_DrawBgTilemapRect(0x1FF, 28, 18, 1, 1, 0);
+ break;
+ case 1:
+ if (a0 == 0)
+ HS_DrawBgTilemapRect(0x1FE, 28, 3, 1, 1, 0);
+ else
+ HS_DrawBgTilemapRect(0x1FD, 28, 18, 1, 1, 0);
+ break;
+ }
+}
+
+#define HelpSystemHandleRenderGlyph(character) ({\
+ do {DecompressAndRenderGlyph(font, character, &srcBlit, &destBlit, dest, x, y, width, height);} while (0); font;\
+})
+
+#ifdef NONMATCHING
+void HelpSystemRenderText(u8 font, u8 * dest, const u8 * src, u8 x, u8 y, u8 width, u8 height)
+{
+ // font -> sp+24
+ // dest -> sp+28
+ // src -> r9
+ // x -> sp+34
+ // y -> r10
+ // width -> sp+2C
+ // height -> sp+30
+ struct Bitmap srcBlit;
+ struct Bitmap destBlit;
+ u8 i;
+ u8 orig_x = x;
+ s32 clearPixels;
+
+ while (1)
+ {
+ u16 curChar = *src++;
+ switch (curChar)
+ {
+ case EOS:
+ return;
+ case PLACEHOLDER_BEGIN:
+ curChar = *src++;
+ if (curChar == 1) {
+ for (i = 0; i < 10; i++)
+ {
+ if (gSaveBlock2Ptr->playerName[i] == EOS)
+ break;
+ HelpSystemHandleRenderGlyph(gSaveBlock2Ptr->playerName[i]);
+ x += gGlyphInfo[0x80];
+ }
+ }
+ else if (curChar == 2)
+ {
+ for (i = 0; ; i++)
+ {
+ if (FlagGet(FLAG_SYS_NOT_SOMEONES_PC) == TRUE)
+ {
+ if (gString_Bill[i] == EOS)
+ break;
+ HelpSystemHandleRenderGlyph(gString_Bill[i]);
+ }
+ else
+ {
+ if (gString_Someone[i] == EOS)
+ break;
+ HelpSystemHandleRenderGlyph(gString_Someone[i]);
+ }
+ x += gGlyphInfo[0x80];
+ }
+ }
+ break;
+ case CHAR_PROMPT_SCROLL:
+ case CHAR_PROMPT_CLEAR:
+ case CHAR_NEWLINE:
+ x = orig_x;
+ y += gGlyphInfo[0x81] + 1;
+ break;
+ case EXT_CTRL_CODE_BEGIN:
+ curChar = *src++;
+ switch (curChar)
+ {
+ case 4:
+ src++;
+ //fallthrough
+ case 11:
+ case 16:
+ src++;
+ //fallthrough
+ case 1:
+ case 2:
+ case 3:
+ case 5:
+ case 6:
+ case 8:
+ case 12:
+ case 13:
+ case 14:
+ src++;
+ break;
+ case 19:
+ clearPixels = *src + orig_x - x;
+ if (clearPixels > 0)
+ {
+ destBlit.pixels = dest;
+ destBlit.width = width * 8;
+ destBlit.height = height * 8;
+ FillBitmapRect4Bit(&destBlit, x, y, clearPixels, GetFontAttribute(font, 1), 0);
+ x += clearPixels;
+ }
+ src++;
+ break;
+ case 17:
+ case 18:
+ case 20:
+ src++;
+ break;
+ case 7:
+ case 9:
+ case 10:
+ case 15:
+ case 21:
+ case 22:
+ break;
+ }
+ break;
+ case CHAR_KEYPAD_ICON:
+ curChar = *src++;
+ srcBlit.pixels = (u8 *)gKeypadIconTiles + 0x20 * GetKeypadIconTileOffset(curChar);
+ srcBlit.width = 0x80;
+ srcBlit.height = 0x80;
+ destBlit.pixels = dest;
+ destBlit.width = width * 8;
+ destBlit.height = height * 8;
+ BlitBitmapRect4Bit(&srcBlit, &destBlit, 0, 0, x, y, GetKeypadIconWidth(curChar), GetKeypadIconHeight(curChar), 0);
+ x += GetKeypadIconWidth(curChar);
+ break;
+ case CHAR_EXTRA_EMOJI:
+ curChar = 0x100 | *src++;
+ //fallthrough
+ default:
+ if (curChar == CHAR_SPACE)
+ {
+ if (font == 0)
+ x += 5;
+ else
+ x += 4;
+ }
+ else
+ {
+ HelpSystemHandleRenderGlyph(curChar);
+ x += gGlyphInfo[0x80];
+ }
+ break;
+ }
+ }
+}
+#else
+NAKED
+void HelpSystemRenderText(u8 font, u8 * dest, const u8 * src, u8 x, u8 y, u8 width, u8 height)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0x38\n"
+ "\tstr r1, [sp, 0x28]\n"
+ "\tmov r9, r2\n"
+ "\tldr r1, [sp, 0x58]\n"
+ "\tldr r2, [sp, 0x5C]\n"
+ "\tldr r4, [sp, 0x60]\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tstr r0, [sp, 0x24]\n"
+ "\tlsls r3, 24\n"
+ "\tlsrs r7, r3, 24\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r1, 24\n"
+ "\tmov r10, r1\n"
+ "\tlsls r2, 24\n"
+ "\tlsrs r2, 24\n"
+ "\tstr r2, [sp, 0x2C]\n"
+ "\tlsls r4, 24\n"
+ "\tlsrs r4, 24\n"
+ "\tstr r4, [sp, 0x30]\n"
+ "\tstr r7, [sp, 0x34]\n"
+ "_0813C0AC_masterLoop:\n"
+ "\tmov r0, r9\n"
+ "\tldrb r1, [r0]\n"
+ "\tmovs r2, 0x1\n"
+ "\tadd r9, r2\n"
+ "\tadds r0, r1, 0\n"
+ "\tsubs r0, 0xF8\n"
+ "\tcmp r0, 0x7\n"
+ "\tbls _0813C0BE\n"
+ "\tb _0813C358\n"
+ "_0813C0BE:\n"
+ "\tlsls r0, 2\n"
+ "\tldr r1, _0813C0C8 @ =_0813C0CC\n"
+ "\tadds r0, r1\n"
+ "\tldr r0, [r0]\n"
+ "\tmov pc, r0\n"
+ "\t.align 2, 0\n"
+ "_0813C0C8: .4byte _0813C0CC\n"
+ "\t.align 2, 0\n"
+ "_0813C0CC:\n"
+ "\t.4byte _0813C2D4\n"
+ "\t.4byte _0813C348\n"
+ "\t.4byte _0813C1E4\n"
+ "\t.4byte _0813C1E4\n"
+ "\t.4byte _0813C200\n"
+ "\t.4byte _0813C0EC\n"
+ "\t.4byte _0813C1E4\n"
+ "\t.4byte _0813C39C\n"
+ "_0813C0EC:\n"
+ "\tmov r0, r9\n"
+ "\tldrb r1, [r0]\n"
+ "\tmovs r2, 0x1\n"
+ "\tadd r9, r2\n"
+ "\tcmp r1, 0x1\n"
+ "\tbne _0813C154\n"
+ "\tmovs r4, 0\n"
+ "\tldr r0, _0813C14C @ =gSaveBlock2Ptr\n"
+ "\tldr r1, [r0]\n"
+ "\tldrb r1, [r1]\n"
+ "\tcmp r1, 0xFF\n"
+ "\tbeq _0813C0AC_masterLoop\n"
+ "\tldr r5, _0813C150 @ =gGlyphInfo + 0x80\n"
+ "_0813C106:\n"
+ "\tldr r0, [r0]\n"
+ "\tadds r0, r4\n"
+ "\tldrb r1, [r0]\n"
+ "\tldr r0, [sp, 0x28]\n"
+ "\tstr r0, [sp]\n"
+ "\tstr r7, [sp, 0x4]\n"
+ "\tmov r2, r10\n"
+ "\tstr r2, [sp, 0x8]\n"
+ "\tldr r0, [sp, 0x2C]\n"
+ "\tstr r0, [sp, 0xC]\n"
+ "\tldr r2, [sp, 0x30]\n"
+ "\tstr r2, [sp, 0x10]\n"
+ "\tldr r0, [sp, 0x24]\n"
+ "\tadd r2, sp, 0x14\n"
+ "\tadd r3, sp, 0x1C\n"
+ "\tbl DecompressAndRenderGlyph\n"
+ "\tldr r0, [sp, 0x24]\n"
+ "\tldrb r0, [r5]\n"
+ "\tadds r0, r7, r0\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r7, r0, 24\n"
+ "\tadds r0, r4, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tcmp r4, 0x9\n"
+ "\tbhi _0813C0AC_masterLoop\n"
+ "\tldr r0, _0813C14C @ =gSaveBlock2Ptr\n"
+ "\tldr r1, [r0]\n"
+ "\tadds r1, r4\n"
+ "\tldrb r1, [r1]\n"
+ "\tcmp r1, 0xFF\n"
+ "\tbne _0813C106\n"
+ "\tb _0813C0AC_masterLoop\n"
+ "\t.align 2, 0\n"
+ "_0813C14C: .4byte gSaveBlock2Ptr\n"
+ "_0813C150: .4byte gGlyphInfo + 0x80\n"
+ "_0813C154:\n"
+ "\tcmp r1, 0x2\n"
+ "\tbne _0813C0AC_masterLoop\n"
+ "\tmovs r4, 0\n"
+ "\tldr r5, _0813C160 @ =gGlyphInfo + 0x80\n"
+ "\tb _0813C1BC\n"
+ "\t.align 2, 0\n"
+ "_0813C160: .4byte gGlyphInfo + 0x80\n"
+ "_0813C164:\n"
+ "\tldrb r1, [r1]\n"
+ "\tldr r2, [sp, 0x28]\n"
+ "\tstr r2, [sp]\n"
+ "\tstr r7, [sp, 0x4]\n"
+ "\tmov r0, r10\n"
+ "\tstr r0, [sp, 0x8]\n"
+ "\tldr r2, [sp, 0x2C]\n"
+ "\tstr r2, [sp, 0xC]\n"
+ "\tldr r0, [sp, 0x30]\n"
+ "\tstr r0, [sp, 0x10]\n"
+ "\tldr r0, [sp, 0x24]\n"
+ "\tadd r2, sp, 0x14\n"
+ "\tadd r3, sp, 0x1C\n"
+ "\tbl DecompressAndRenderGlyph\n"
+ "\tb _0813C1AC\n"
+ "_0813C184:\n"
+ "\tldr r0, _0813C1D8 @ =gString_Someone\n"
+ "\tadds r1, r4, r0\n"
+ "\tldrb r0, [r1]\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbeq _0813C0AC_masterLoop\n"
+ "\tadds r1, r0, 0\n"
+ "\tldr r2, [sp, 0x28]\n"
+ "\tstr r2, [sp]\n"
+ "\tstr r7, [sp, 0x4]\n"
+ "\tmov r0, r10\n"
+ "\tstr r0, [sp, 0x8]\n"
+ "\tldr r2, [sp, 0x2C]\n"
+ "\tstr r2, [sp, 0xC]\n"
+ "\tldr r0, [sp, 0x30]\n"
+ "\tstr r0, [sp, 0x10]\n"
+ "\tldr r0, [sp, 0x24]\n"
+ "\tadd r2, sp, 0x14\n"
+ "\tadd r3, sp, 0x1C\n"
+ "\tbl DecompressAndRenderGlyph\n"
+ "_0813C1AC:\n"
+ "\tldr r1, [sp, 0x24]\n"
+ "\tldrb r0, [r5]\n"
+ "\tadds r0, r7, r0\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r7, r0, 24\n"
+ "\tadds r0, r4, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r4, r0, 24\n"
+ "_0813C1BC:\n"
+ "\tldr r0, _0813C1DC @ =0x00000834\n"
+ "\tbl FlagGet\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x1\n"
+ "\tbne _0813C184\n"
+ "\tldr r0, _0813C1E0 @ =gString_Bill\n"
+ "\tadds r1, r4, r0\n"
+ "\tldrb r0, [r1]\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbne _0813C164\n"
+ "\tb _0813C0AC_masterLoop\n"
+ "\t.align 2, 0\n"
+ "_0813C1D8: .4byte gString_Someone\n"
+ "_0813C1DC: .4byte 0x00000834\n"
+ "_0813C1E0: .4byte gString_Bill\n"
+ "_0813C1E4:\n"
+ "\tldr r7, [sp, 0x34]\n"
+ "\tldr r1, _0813C1FC @ =gGlyphInfo\n"
+ "\tadds r1, 0x81\n"
+ "\tmov r0, r10\n"
+ "\tadds r0, 0x1\n"
+ "\tldrb r1, [r1]\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tmov r10, r0\n"
+ "\tb _0813C0AC_masterLoop\n"
+ "\t.align 2, 0\n"
+ "_0813C1FC: .4byte gGlyphInfo\n"
+ "_0813C200:\n"
+ "\tmov r2, r9\n"
+ "\tldrb r1, [r2]\n"
+ "\tmovs r0, 0x1\n"
+ "\tadd r9, r0\n"
+ "\tsubs r0, r1, 0x1\n"
+ "\tcmp r0, 0x15\n"
+ "\tbls _0813C210\n"
+ "\tb _0813C0AC_masterLoop\n"
+ "_0813C210:\n"
+ "\tlsls r0, 2\n"
+ "\tldr r1, _0813C21C @ =_0813C220\n"
+ "\tadds r0, r1\n"
+ "\tldr r0, [r0]\n"
+ "\tmov pc, r0\n"
+ "\t.align 2, 0\n"
+ "_0813C21C: .4byte _0813C220\n"
+ "\t.align 2, 0\n"
+ "_0813C220:\n"
+ "\t.4byte _0813C2C8\n"
+ "\t.4byte _0813C2C8\n"
+ "\t.4byte _0813C2C8\n"
+ "\t.4byte _0813C278\n"
+ "\t.4byte _0813C2C8\n"
+ "\t.4byte _0813C2C8\n"
+ "\t.4byte _0813C0AC_masterLoop\n"
+ "\t.4byte _0813C2C8\n"
+ "\t.4byte _0813C0AC_masterLoop\n"
+ "\t.4byte _0813C0AC_masterLoop\n"
+ "\t.4byte _0813C27C\n"
+ "\t.4byte _0813C2C8\n"
+ "\t.4byte _0813C2C8\n"
+ "\t.4byte _0813C2C8\n"
+ "\t.4byte _0813C0AC_masterLoop\n"
+ "\t.4byte _0813C27C\n"
+ "\t.4byte _0813C2CE\n"
+ "\t.4byte _0813C2CE\n"
+ "\t.4byte _0813C282\n"
+ "\t.4byte _0813C2CE\n"
+ "\t.4byte _0813C0AC_masterLoop\n"
+ "\t.4byte _0813C0AC_masterLoop\n"
+ "_0813C278:\n"
+ "\tmovs r1, 0x1\n"
+ "\tadd r9, r1\n"
+ "_0813C27C:\n"
+ "\tmovs r2, 0x1\n"
+ "\tadd r9, r2\n"
+ "\tb _0813C2C8\n"
+ "_0813C282:\n"
+ "\tmov r2, r9\n"
+ "\tldrb r0, [r2]\n"
+ "\tldr r1, [sp, 0x34]\n"
+ "\tadds r0, r1\n"
+ "\tsubs r6, r0, r7\n"
+ "\tcmp r6, 0\n"
+ "\tble _0813C2C8\n"
+ "\tldr r2, [sp, 0x28]\n"
+ "\tstr r2, [sp, 0x1C]\n"
+ "\tldr r1, [sp, 0x2C]\n"
+ "\tlsls r0, r1, 3\n"
+ "\tadd r4, sp, 0x1C\n"
+ "\tmovs r5, 0\n"
+ "\tstrh r0, [r4, 0x4]\n"
+ "\tldr r2, [sp, 0x30]\n"
+ "\tlsls r0, r2, 3\n"
+ "\tstrh r0, [r4, 0x6]\n"
+ "\tldr r0, [sp, 0x24]\n"
+ "\tmovs r1, 0x1\n"
+ "\tbl GetFontAttribute\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tlsls r3, r6, 16\n"
+ "\tlsrs r3, 16\n"
+ "\tstr r0, [sp]\n"
+ "\tstr r5, [sp, 0x4]\n"
+ "\tadds r0, r4, 0\n"
+ "\tadds r1, r7, 0\n"
+ "\tmov r2, r10\n"
+ "\tbl FillBitmapRect4Bit\n"
+ "\tadds r0, r7, r6\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r7, r0, 24\n"
+ "_0813C2C8:\n"
+ "\tmovs r0, 0x1\n"
+ "\tadd r9, r0\n"
+ "\tb _0813C0AC_masterLoop\n"
+ "_0813C2CE:\n"
+ "\tmovs r1, 0x1\n"
+ "\tadd r9, r1\n"
+ "\tb _0813C0AC_masterLoop\n"
+ "_0813C2D4:\n"
+ "\tmov r2, r9\n"
+ "\tldrb r1, [r2]\n"
+ "\tmovs r0, 0x1\n"
+ "\tadd r9, r0\n"
+ "\tadds r6, r1, 0\n"
+ "\tadds r0, r6, 0\n"
+ "\tbl GetKeypadIconTileOffset\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 19\n"
+ "\tldr r1, _0813C344 @ =gKeypadIconTiles\n"
+ "\tadds r0, r1\n"
+ "\tstr r0, [sp, 0x14]\n"
+ "\tadd r1, sp, 0x14\n"
+ "\tmovs r2, 0\n"
+ "\tmov r8, r2\n"
+ "\tmovs r0, 0x80\n"
+ "\tstrh r0, [r1, 0x4]\n"
+ "\tstrh r0, [r1, 0x6]\n"
+ "\tldr r0, [sp, 0x28]\n"
+ "\tstr r0, [sp, 0x1C]\n"
+ "\tldr r1, [sp, 0x2C]\n"
+ "\tlsls r0, r1, 3\n"
+ "\tadd r5, sp, 0x1C\n"
+ "\tstrh r0, [r5, 0x4]\n"
+ "\tldr r2, [sp, 0x30]\n"
+ "\tlsls r0, r2, 3\n"
+ "\tstrh r0, [r5, 0x6]\n"
+ "\tadds r0, r6, 0\n"
+ "\tbl GetKeypadIconWidth\n"
+ "\tadds r4, r0, 0\n"
+ "\tlsls r4, 24\n"
+ "\tlsrs r4, 24\n"
+ "\tadds r0, r6, 0\n"
+ "\tbl GetKeypadIconHeight\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tstr r7, [sp]\n"
+ "\tmov r1, r10\n"
+ "\tstr r1, [sp, 0x4]\n"
+ "\tstr r4, [sp, 0x8]\n"
+ "\tstr r0, [sp, 0xC]\n"
+ "\tmov r2, r8\n"
+ "\tstr r2, [sp, 0x10]\n"
+ "\tadd r0, sp, 0x14\n"
+ "\tadds r1, r5, 0\n"
+ "\tmovs r2, 0\n"
+ "\tmovs r3, 0\n"
+ "\tbl BlitBitmapRect4Bit\n"
+ "\tadds r0, r6, 0\n"
+ "\tbl GetKeypadIconWidth\n"
+ "\tb _0813C38E\n"
+ "\t.align 2, 0\n"
+ "_0813C344: .4byte gKeypadIconTiles\n"
+ "_0813C348:\n"
+ "\tmov r0, r9\n"
+ "\tldrb r1, [r0]\n"
+ "\tmovs r2, 0x80\n"
+ "\tlsls r2, 1\n"
+ "\tadds r0, r2, 0\n"
+ "\torrs r1, r0\n"
+ "\tmovs r0, 0x1\n"
+ "\tadd r9, r0\n"
+ "_0813C358:\n"
+ "\tcmp r1, 0\n"
+ "\tbne _0813C36A\n"
+ "\tldr r1, [sp, 0x24]\n"
+ "\tcmp r1, 0\n"
+ "\tbne _0813C366\n"
+ "\tadds r0, r7, 0x5\n"
+ "\tb _0813C390\n"
+ "_0813C366:\n"
+ "\tadds r0, r7, 0x4\n"
+ "\tb _0813C390\n"
+ "_0813C36A:\n"
+ "\tadd r3, sp, 0x1C\n"
+ "\tldr r2, [sp, 0x28]\n"
+ "\tstr r2, [sp]\n"
+ "\tstr r7, [sp, 0x4]\n"
+ "\tmov r0, r10\n"
+ "\tstr r0, [sp, 0x8]\n"
+ "\tldr r2, [sp, 0x2C]\n"
+ "\tstr r2, [sp, 0xC]\n"
+ "\tldr r0, [sp, 0x30]\n"
+ "\tstr r0, [sp, 0x10]\n"
+ "\tldr r0, [sp, 0x24]\n"
+ "\tadd r2, sp, 0x14\n"
+ "\tbl DecompressAndRenderGlyph\n"
+ "\tldr r1, [sp, 0x24]\n"
+ "\tldr r0, _0813C398 @ =gGlyphInfo\n"
+ "\tadds r0, 0x80\n"
+ "\tldrb r0, [r0]\n"
+ "_0813C38E:\n"
+ "\tadds r0, r7, r0\n"
+ "_0813C390:\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r7, r0, 24\n"
+ "\tb _0813C0AC_masterLoop\n"
+ "\t.align 2, 0\n"
+ "_0813C398: .4byte gGlyphInfo\n"
+ "_0813C39C:\n"
+ "\tadd sp, 0x38\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0");
+}
+#endif //NONMATCHING
+
+void DecompressAndRenderGlyph(u8 font, u16 glyph, struct Bitmap *srcBlit, struct Bitmap *destBlit, u8 *destBuffer, u8 x, u8 y, u8 width, u8 height)
+{
+ if (font == 0)
+ DecompressGlyphFont0(glyph, FALSE);
+ else if (font == 5)
+ DecompressGlyphFont5(glyph, FALSE);
+ else
+ DecompressGlyphFont2(glyph, FALSE);
+ srcBlit->pixels = gGlyphInfo;
+ srcBlit->width = 16;
+ srcBlit->height = 16;
+ destBlit->pixels = destBuffer;
+ destBlit->width = width * 8;
+ destBlit->height = height * 8;
+ BlitBitmapRect4Bit(srcBlit, destBlit, 0, 0, x, y, gGlyphInfo[0x80], gGlyphInfo[0x81], 0);
+}
+
+void HelpSystem_PrintText_Row61(const u8 * str)
+{
+ GenerateFontHalfRowLookupTable(1, 15, 2);
+ HelpSystemRenderText(5, gDecompressionBuffer + 0x3D00, str, 6, 2, 7, 2);
+}
+
+void HelpSystem_PrintTextRightAlign_Row52(const u8 * str)
+{
+ s32 left = 0x7C - GetStringWidth(0, str, 0);
+ GenerateFontHalfRowLookupTable(1, 15, 2);
+ HelpSystemRenderText(0, gDecompressionBuffer + 0x3400, str, left, 2, 16, 2);
+}
+
+void HelpSystem_PrintTextAt(const u8 * str, u8 x, u8 y)
+{
+ GenerateFontHalfRowLookupTable(1, 15, 2);
+ HelpSystemRenderText(2, gDecompressionBuffer + 0x0000, str, x, y, 26, 16);
+}
+
+void HelpSystem_PrintTwoStrings(const u8 * str1, const u8 * str2)
+{
+ CpuFill16(0xEEEE, gDecompressionBuffer + 0x0000, 0x3400);
+ GenerateFontHalfRowLookupTable(1, 14, 2);
+ HelpSystemRenderText(2, gDecompressionBuffer + 0x0000, str1, 0, 0, 26, 16);
+ HelpSystemRenderText(2, gDecompressionBuffer + 0x09C0, str2, 0, 0, 26, 13);
+}
+
+void HelpSystem_PrintText_813C584(const u8 * str)
+{
+ CpuFill16(0x1111, gDecompressionBuffer + 0x23C0, 0x1040);
+ GenerateFontHalfRowLookupTable(2, 1, 3);
+ HelpSystemRenderText(2, gDecompressionBuffer + 0x23C0, str, 2, 6, 26, 5);
+}
+
+void HelpSystem_FillPanel3(void)
+{
+ CpuFill16(0xFFFF, gDecompressionBuffer + 0x3D00, 0x1C0);
+}
+
+void HelpSystem_FillPanel2(void)
+{
+ CpuFill16(0xFFFF, gDecompressionBuffer + 0x3400, 0x400);
+}
+
+void HelpSystem_FillPanel1(void)
+{
+ CpuFill16(0xFFFF, gDecompressionBuffer + 0x0000, 0x3400);
+}
+
+void HelpSystem_InitListMenuController(struct HelpSystemListMenu * a0, u8 a1, u8 a2)
+{
+ gHelpSystemListMenu.sub = a0->sub;
+ gHelpSystemListMenu.field_0C = a1;
+ gHelpSystemListMenu.field_0D = a2;
+ gHelpSystemListMenu.field_0E = 0;
+ if (gHelpSystemListMenu.sub.totalItems < gHelpSystemListMenu.sub.maxShowed)
+ gHelpSystemListMenu.sub.maxShowed = gHelpSystemListMenu.sub.totalItems;
+ sub_813BDA4(0);
+ HelpSystem_FillPanel1();
+ PrintListMenuItems();
+ PlaceListMenuCursor();
+}
+
+void HelpSystem_SetInputDelay(u8 a0)
+{
+ sDelayTimer = a0;
+}
+
+s32 HelpSystem_GetMenuInput(void)
+{
+ if (sDelayTimer != 0)
+ {
+ sDelayTimer--;
+ return -1;
+ }
+ else if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ return gHelpSystemListMenu.sub.items[gHelpSystemListMenu.field_0C + gHelpSystemListMenu.field_0D].index;
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ return -2;
+ }
+ else if (JOY_NEW(L_BUTTON | R_BUTTON))
+ {
+ return -6;
+ }
+ else if (JOY_REPT(DPAD_UP))
+ {
+ if (!MoveCursor(1, 0))
+ PlaySE(SE_SELECT);
+ return -4;
+ }
+ else if (JOY_REPT(DPAD_DOWN))
+ {
+ if (!MoveCursor(1, 1))
+ PlaySE(SE_SELECT);
+ return -5;
+ }
+ else if (JOY_REPT(DPAD_LEFT))
+ {
+ if (!MoveCursor(7, 0))
+ PlaySE(SE_SELECT);
+ return -4;
+ }
+ else if (JOY_REPT(DPAD_RIGHT))
+ {
+ if (!MoveCursor(7, 1))
+ PlaySE(SE_SELECT);
+ return -5;
+ }
+ else
+ return -1;
+}
+
+void sub_813C75C(void)
+{
+ u8 r6 = gHelpSystemListMenu.sub.totalItems - 7;
+ if (gHelpSystemListMenu.sub.totalItems > 7)
+ {
+ s32 r4 = gHelpSystemListMenu.field_0C + gHelpSystemListMenu.field_0D;
+ sub_813C004(0, 0);
+ if (r4 == 0)
+ sub_813C004(1, 1);
+ else if (gHelpSystemListMenu.field_0C == 0 && gHelpSystemListMenu.field_0D != 0)
+ sub_813C004(1, 1);
+ else if (gHelpSystemListMenu.field_0C == r6)
+ sub_813C004(0, 1);
+ else if (gHelpSystemListMenu.field_0C != 0)
+ {
+ sub_813C004(0, 1);
+ sub_813C004(1, 1);
+ }
+ }
+}
+
+void PrintListMenuItems(void)
+{
+ u8 glyphHeight = GetFontAttribute(2, 1) + 1;
+ s32 i;
+ s32 r5 = gHelpSystemListMenu.field_0C;
+
+ for (i = 0; i < gHelpSystemListMenu.sub.maxShowed; i++)
+ {
+ u8 x = gHelpSystemListMenu.sub.left + 8;
+ u8 y = gHelpSystemListMenu.sub.top + glyphHeight * i;
+ HelpSystem_PrintTextAt(gHelpSystemListMenu.sub.items[r5].label, x, y);
+ r5++;
+ }
+}
+
+void PlaceListMenuCursor(void)
+{
+ u8 glyphHeight = GetFontAttribute(2, 1) + 1;
+ u8 x = gHelpSystemListMenu.sub.left;
+ u8 y = gHelpSystemListMenu.sub.top + glyphHeight * gHelpSystemListMenu.field_0D;
+ HelpSystem_PrintTextAt(gFameCheckerText_ListMenuCursor, x, y);
+}
+
+void sub_813C860(u8 i)
+{
+ u8 glyphHeight = GetFontAttribute(2, 1) + 1;
+ u8 x = gHelpSystemListMenu.sub.left;
+ u8 y = gHelpSystemListMenu.sub.top + i * glyphHeight;
+ HelpSystem_PrintTextAt(gString_HelpSystem_ClearTo8, x, y);
+}
+
+u8 TryMoveCursor1(u8 dirn)
+{
+ u16 r4;
+ if (dirn == 0)
+ {
+ if (gHelpSystemListMenu.sub.maxShowed == 1)
+ r4 = 0;
+ else
+ r4 = gHelpSystemListMenu.sub.maxShowed - (gHelpSystemListMenu.sub.maxShowed / 2 + (gHelpSystemListMenu.sub.maxShowed & 1)) - 1;
+ if (gHelpSystemListMenu.field_0C == 0)
+ {
+ if (gHelpSystemListMenu.field_0D != 0)
+ {
+ gHelpSystemListMenu.field_0D--;
+ return 1;
+ }
+ else
+ return 0;
+ }
+ if (gHelpSystemListMenu.field_0D > r4)
+ {
+ gHelpSystemListMenu.field_0D--;
+ return 1;
+ }
+ else
+ {
+ gHelpSystemListMenu.field_0C--;
+ return 2;
+ }
+ }
+ else
+ {
+ if (gHelpSystemListMenu.sub.maxShowed == 1)
+ r4 = 0;
+ else
+ r4 = gHelpSystemListMenu.sub.maxShowed / 2 + (gHelpSystemListMenu.sub.maxShowed & 1);
+ if (gHelpSystemListMenu.field_0C == gHelpSystemListMenu.sub.totalItems - gHelpSystemListMenu.sub.maxShowed)
+ {
+ if (gHelpSystemListMenu.field_0D < gHelpSystemListMenu.sub.maxShowed - 1)
+ {
+ gHelpSystemListMenu.field_0D++;
+ return 1;
+ }
+ else
+ return 0;
+ }
+ else if (gHelpSystemListMenu.field_0D < r4)
+ {
+ gHelpSystemListMenu.field_0D++;
+ return 1;
+ }
+ else
+ {
+ gHelpSystemListMenu.field_0C++;
+ return 2;
+ }
+ }
+}
+
+bool8 MoveCursor(u8 by, u8 dirn)
+{
+ u8 r7 = gHelpSystemListMenu.field_0D;
+ u8 flags = 0;
+ s32 i;
+ for (i = 0; i < by; i++)
+ flags |= TryMoveCursor1(dirn);
+
+ switch (flags)
+ {
+ case 0:
+ default:
+ // neither changed
+ return TRUE;
+ case 1:
+ // changed field_0D only
+ sub_813C860(r7);
+ PlaceListMenuCursor();
+ CommitTilemap();
+ break;
+ case 2:
+ case 3:
+ // changed field_0C
+ if (sub_812BF88() == TRUE)
+ {
+ HelpSystem_SetInputDelay(2);
+ HelpSystem_FillPanel1();
+ PrintListMenuItems();
+ PlaceListMenuCursor();
+ sub_812BDEC();
+ sub_813C75C();
+ }
+ else
+ {
+ sub_813BDA4(0);
+ HelpSystem_FillPanel1();
+ PrintListMenuItems();
+ PlaceListMenuCursor();
+ sub_813BDA4(1);
+ }
+ CommitTilemap();
+ break;
+ }
+ return FALSE;
+}
diff --git a/src/help_system_812B1E0.c b/src/help_system_812B1E0.c
index 1356db7d0..98d6ce8be 100644
--- a/src/help_system_812B1E0.c
+++ b/src/help_system_812B1E0.c
@@ -23,16 +23,16 @@ u8 gUnknown_3005E9C[4];
u16 gUnknown_3005EA0;
static bool32 sub_812B27C(const u16 * mapIdxs);
-static void sub_812B520(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
-static void sub_812B614(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
+static void sub_812B520(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+static void sub_812B614(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
static bool8 sub_812B754(void);
static bool8 sub_812B780(u8);
static bool8 sub_812BB10(void);
static void sub_812BF5C(void);
static void sub_812BF74(const u8 *);
-static void sub_812BF94(struct HelpSystemStruct_203F190 * a0);
-static void sub_812BF9C(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
+static void sub_812BF94(struct HelpSystemListMenu * a0);
+static void sub_812BF9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
static const u8 *const gUnknown_845B080[] = {
gUnknown_81B2DF8,
@@ -1029,27 +1029,27 @@ void sub_812B4B8(void)
gUnknown_203F175 = 0;
}
-static void sub_812B4C4(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+static void sub_812B4C4(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
- a0->sub.field_00 = a1;
- a0->sub.field_04 = 1;
- a0->sub.field_06 = 1;
- a0->sub.field_08 = 1;
- a0->sub.field_09 = 4;
+ a0->sub.items = a1;
+ a0->sub.totalItems = 1;
+ a0->sub.maxShowed = 1;
+ a0->sub.left = 1;
+ a0->sub.top = 4;
}
-static void sub_812B4D8(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+static void sub_812B4D8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
sub_812B4C4(a0, a1);
sub_812B520(a0, a1);
sub_812BF74(gUnknown_841DFAC);
- sub_813C64C(a0, 0, gUnknown_3005E9C[2]);
+ HelpSystem_InitListMenuController(a0, 0, gUnknown_3005E9C[2]);
sub_812BF9C(a0, a1);
sub_813BDA4(1);
sub_813BD5C(1);
}
-static void sub_812B520(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+static void sub_812B520(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
u8 i;
u8 r4 = 0;
@@ -1063,12 +1063,12 @@ static void sub_812B520(struct HelpSystemStruct_203F190 * a0, struct ListMenuIte
}
}
a1[r4 - 1].index = -2;
- a0->sub.field_04 = r4;
- a0->sub.field_06 = r4;
- a0->sub.field_08 = 0;
+ a0->sub.totalItems = r4;
+ a0->sub.maxShowed = r4;
+ a0->sub.left = 0;
}
-static void sub_812B5A8(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+static void sub_812B5A8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
sub_813BDE8(0);
sub_813BFC0(0);
@@ -1076,13 +1076,13 @@ static void sub_812B5A8(struct HelpSystemStruct_203F190 * a0, struct ListMenuIte
sub_812B4C4(a0, a1);
sub_812B614(a0, a1);
sub_812BF74(gUnknown_841DFC9);
- sub_813C64C(a0, a0->field_0C, a0->field_0D);
- sub_813C4CC(gUnknown_845B080[gUnknown_3005E9C[1]], 0, 0);
+ HelpSystem_InitListMenuController(a0, a0->field_0C, a0->field_0D);
+ HelpSystem_PrintTextAt(gUnknown_845B080[gUnknown_3005E9C[1]], 0, 0);
sub_813BDA4(1);
sub_813BD5C(1);
}
-static void sub_812B614(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+static void sub_812B614(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
u8 r6 = 0;
const u8 * r3 = gUnknown_845B9E0[gUnknown_203B0EC * 5 + gUnknown_3005E9C[1]];
@@ -1117,10 +1117,10 @@ static void sub_812B614(struct HelpSystemStruct_203F190 * a0, struct ListMenuIte
a1[r6].label = gUnknown_81B2E6F;
a1[r6].index = -2;
r6++;
- a0->sub.field_04 = r6;
- a0->sub.field_06 = 7;
- a0->sub.field_08 = 0;
- a0->sub.field_09 = 21;
+ a0->sub.totalItems = r6;
+ a0->sub.maxShowed = 7;
+ a0->sub.left = 0;
+ a0->sub.top = 21;
}
static bool8 sub_812B754(void)
@@ -1358,7 +1358,7 @@ static bool8 sub_812BB10(void)
return FALSE;
}
-bool8 sub_812BB9C(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+bool8 sub_812BB9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
switch (a0->field_0E)
{
@@ -1386,7 +1386,7 @@ bool8 sub_812BB9C(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1
return FALSE;
}
-bool8 sub_812BC54(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+bool8 sub_812BC54(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
sub_812BF74(gUnknown_841DFA5);
sub_812BF5C();
@@ -1396,7 +1396,7 @@ bool8 sub_812BC54(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1
return TRUE;
}
-bool8 sub_812BC80(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+bool8 sub_812BC80(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
if (JOY_NEW(A_BUTTON))
{
@@ -1406,7 +1406,7 @@ bool8 sub_812BC80(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1
return TRUE;
}
-bool8 sub_812BCA8(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+bool8 sub_812BCA8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
gUnknown_3005E9C[2] = 0;
sub_812BF94(a0);
@@ -1415,9 +1415,9 @@ bool8 sub_812BCA8(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1
return TRUE;
}
-bool8 sub_812BCD0(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+bool8 sub_812BCD0(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
- s32 v0 = sub_813C690();
+ s32 v0 = HelpSystem_GetMenuInput();
switch (v0)
{
case -6:
@@ -1438,19 +1438,19 @@ bool8 sub_812BCD0(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1
return TRUE;
}
-bool8 sub_812BD2C(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+bool8 sub_812BD2C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
gUnknown_3005E9C[0] = 1;
gUnknown_3005E9C[2] = a0->field_0D;
sub_812BF94(a0);
sub_812B5A8(a0, a1);
sub_813C75C();
- sub_813C684(2);
+ HelpSystem_SetInputDelay(2);
a0->field_0E = 3;
return TRUE;
}
-bool8 sub_812BD64(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+bool8 sub_812BD64(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
sub_813C004(0, 0);
sub_813C004(1, 0);
@@ -1460,9 +1460,9 @@ bool8 sub_812BD64(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1
return TRUE;
}
-bool8 sub_812BD98(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
- s32 v0 = sub_813C690();
+ s32 v0 = HelpSystem_GetMenuInput();
switch (v0)
{
case -6:
@@ -1485,37 +1485,37 @@ bool8 sub_812BD98(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1
void sub_812BDEC(void)
{
- sub_813C4CC(gUnknown_845B080[gUnknown_3005E9C[1]], 0, 0);
+ HelpSystem_PrintTextAt(gUnknown_845B080[gUnknown_3005E9C[1]], 0, 0);
}
-bool8 sub_812BE10(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+bool8 sub_812BE10(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
gUnknown_3005E9C[0] = 2;
sub_813BDA4(0);
- sub_813C624();
+ HelpSystem_FillPanel1();
sub_812BF74(gUnknown_841DFBE);
sub_813BDE8(1);
sub_813BEE4(1);
if (gUnknown_3005E9C[1] == 0)
{
- sub_813C50C(gUnknown_845B0B0[gUnknown_3005E9C[3]], gUnknown_845B164[gUnknown_3005E9C[3]]);
+ HelpSystem_PrintTwoStrings(gUnknown_845B0B0[gUnknown_3005E9C[3]], gUnknown_845B164[gUnknown_3005E9C[3]]);
}
else if (gUnknown_3005E9C[1] == 1)
{
- sub_813C50C(gUnknown_845B218[gUnknown_3005E9C[3]], gUnknown_845B2DC[gUnknown_3005E9C[3]]);
+ HelpSystem_PrintTwoStrings(gUnknown_845B218[gUnknown_3005E9C[3]], gUnknown_845B2DC[gUnknown_3005E9C[3]]);
}
else if (gUnknown_3005E9C[1] == 2)
{
- sub_813C50C(gUnknown_845B3A0[gUnknown_3005E9C[3]], gUnknown_845B450[gUnknown_3005E9C[3]]);
+ HelpSystem_PrintTwoStrings(gUnknown_845B3A0[gUnknown_3005E9C[3]], gUnknown_845B450[gUnknown_3005E9C[3]]);
}
else if (gUnknown_3005E9C[1] == 3)
{
- sub_813C50C(gUnknown_845B500[gUnknown_3005E9C[3]], gUnknown_845B520[gUnknown_3005E9C[3]]);
+ HelpSystem_PrintTwoStrings(gUnknown_845B500[gUnknown_3005E9C[3]], gUnknown_845B520[gUnknown_3005E9C[3]]);
}
else
{
- sub_813C50C(gUnknown_845B540[gUnknown_3005E9C[3]], gUnknown_845B5D0[gUnknown_3005E9C[3]]);
+ HelpSystem_PrintTwoStrings(gUnknown_845B540[gUnknown_3005E9C[3]], gUnknown_845B5D0[gUnknown_3005E9C[3]]);
}
sub_813BDA4(1);
sub_813BD5C(1);
@@ -1523,17 +1523,17 @@ bool8 sub_812BE10(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1
return TRUE;
}
-bool8 sub_812BEEC(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+bool8 sub_812BEEC(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
gUnknown_3005E9C[0] = 1;
sub_812B5A8(a0, a1);
sub_813C75C();
- sub_813C684(2);
+ HelpSystem_SetInputDelay(2);
a0->field_0E = 3;
return TRUE;
}
-bool8 sub_812BF18(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+bool8 sub_812BF18(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
if (JOY_NEW(B_BUTTON) || JOY_NEW(A_BUTTON))
{
@@ -1548,14 +1548,14 @@ bool8 sub_812BF18(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1
static void sub_812BF5C(void)
{
- sub_813C624();
- sub_813C4CC(gUnknown_81B2FC9, 0, 0);
+ HelpSystem_FillPanel1();
+ HelpSystem_PrintTextAt(gUnknown_81B2FC9, 0, 0);
}
static void sub_812BF74(const u8 * str)
{
- sub_813C5FC();
- sub_813C488(str);
+ HelpSystem_FillPanel2();
+ HelpSystem_PrintTextRightAlign_Row52(str);
}
u8 sub_812BF88(void)
@@ -1563,18 +1563,18 @@ u8 sub_812BF88(void)
return gUnknown_3005E9C[0];
}
-static void sub_812BF94(struct HelpSystemStruct_203F190 * a0)
+static void sub_812BF94(struct HelpSystemListMenu * a0)
{
a0->field_0C = 0;
a0->field_0D = 0;
}
-static void sub_812BF9C(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1)
+static void sub_812BF9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
{
s32 index = a1[a0->field_0C + a0->field_0D].index;
if (index == -2)
- sub_813C584(gUnknown_845B098[5]);
+ HelpSystem_PrintText_813C584(gUnknown_845B098[5]);
else
- sub_813C584(gUnknown_845B098[index]);
+ HelpSystem_PrintText_813C584(gUnknown_845B098[index]);
sub_813BE30(1);
}
diff --git a/src/main.c b/src/main.c
index ad03860f3..ae9a33e81 100644
--- a/src/main.c
+++ b/src/main.c
@@ -5,6 +5,7 @@
#include "dma3.h"
#include "gba/flash_internal.h"
#include "battle.h"
+#include "help_system.h"
extern u16 GetGpuReg(u8);
extern void SetGpuReg(u8, u16);
@@ -32,7 +33,6 @@ extern u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void));
extern void ScanlineEffect_Stop(void);
extern void sub_80F50F4(void);
extern bool32 sub_80F5118(void);
-extern bool8 sub_813B870(void);
extern struct SoundInfo gSoundInfo;
extern u32 gFlashMemoryPresent;
@@ -206,7 +206,7 @@ static void InitMainCallbacks(void)
static void CallCallbacks(void)
{
- if (!sub_80F5118() && !sub_813B870())
+ if (!sub_80F5118() && !RunHelpSystemCallback())
{
if (gMain.callback1)
gMain.callback1();
diff --git a/src/vs_seeker.c b/src/vs_seeker.c
index bd5b9c7ea..e1cb40f3a 100644
--- a/src/vs_seeker.c
+++ b/src/vs_seeker.c
@@ -1,5 +1,4 @@
#include "global.h"
-#include "songs.h"
#include "sound.h"
#include "task.h"
#include "malloc.h"
@@ -23,6 +22,7 @@
#include "map_obj_8097404.h"
#include "unk_810c3a4.h"
#include "constants/movement_commands.h"
+#include "constants/songs.h"
#include "vs_seeker.h"
typedef enum
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 9ad13f3ef..a260f5772 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -1509,33 +1509,10 @@ gUnknown_203B16E: @ 203B16E
gUnknown_203B170: @ 203B170
.space 0x4
-gUnknown_203B174: @ 203B174
- .space 0x4000
-
-gUnknown_203F174: @ 203F174
- .space 0x1
-
-gUnknown_203F175: @ 203F175
- .space 0x1
-
-gUnknown_203F176: @ 203F176
- .space 0x1
-
-gUnknown_203F177: @ 203F177
- .space 0x1
-
-gUnknown_203F178: @ 203F178
- .space 0x12
-
-gUnknown_203F18A: @ 203F18A
- .space 0x6
-
-gUnknown_203F190: @ 203F190
- .space 0x1C
-
-gUnknown_203F1AC: @ 203F1AC
- .space 0x1A0
+ .align 2
+ .include "src/help_system.o"
+ @ src/unk_text_util.o
gUnknown_203F34C: @ 203F34C
.space 0x20