diff options
author | PikalaxALT <PikalaxALT@users.noreply.github.com> | 2019-06-14 09:05:18 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-14 09:05:18 -0400 |
commit | 117c3fb8cc0f476cc3408afdb316f3ece41a1fe4 (patch) | |
tree | b1504928152a96158c27959a370a058b6962ceed | |
parent | b26196e1f874fe5ebe9fe306e7ce18c06fa23715 (diff) | |
parent | bba7f06cd939e3e4df0f445708c8c86bd0f36906 (diff) |
Merge pull request #67 from pret/help_system
Help system
-rw-r--r-- | asm/help_system.s | 2254 | ||||
-rw-r--r-- | asm/save_failed_screen.s | 16 | ||||
-rw-r--r-- | data/data_83FECCC.s | 70 | ||||
-rw-r--r-- | data/help_system.s | 8 | ||||
-rw-r--r-- | data/maps/Route25_SeaCottage/scripts.inc | 2 | ||||
-rw-r--r-- | graphics/help_system/unk_8464008.png | bin | 0 -> 200 bytes | |||
-rw-r--r-- | include/constants/flags.h | 2 | ||||
-rw-r--r-- | include/constants/songs.h | 4 | ||||
-rw-r--r-- | include/global.h | 1 | ||||
-rw-r--r-- | include/help_system.h | 101 | ||||
-rw-r--r-- | include/m4a.h | 5 | ||||
-rw-r--r-- | include/songs.h | 468 | ||||
-rw-r--r-- | include/strings.h | 6 | ||||
-rw-r--r-- | include/text.h | 6 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | src/help_system.c | 1202 | ||||
-rw-r--r-- | src/help_system_812B1E0.c | 108 | ||||
-rw-r--r-- | src/main.c | 4 | ||||
-rw-r--r-- | src/vs_seeker.c | 2 | ||||
-rw-r--r-- | sym_ewram.txt | 29 |
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 Binary files differnew file mode 100644 index 000000000..339a685d5 --- /dev/null +++ b/graphics/help_system/unk_8464008.png 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 |