summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-06-13 13:45:46 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-06-13 13:45:46 -0400
commite30052e271c649ae2ca08cbbbdf2dc2052e6ae38 (patch)
tree623a7faf2c7bd09070def94a594f841e1d767acd
parent2ffcf13f6bd243cac85dff4e2c29ba4b3ae44aa4 (diff)
help_system: through sub_813C3AC
-rw-r--r--asm/help_system.s540
-rw-r--r--data/maps/Route25_SeaCottage/scripts.inc2
-rw-r--r--include/constants/flags.h2
-rw-r--r--include/strings.h2
-rw-r--r--include/text.h6
-rw-r--r--src/help_system.c578
-rw-r--r--src/vs_seeker.c2
7 files changed, 588 insertions, 544 deletions
diff --git a/asm/help_system.s b/asm/help_system.s
index af1800458..f7f16ad30 100644
--- a/asm/help_system.s
+++ b/asm/help_system.s
@@ -5,546 +5,6 @@
.text
- 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}
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/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/strings.h b/include/strings.h
index bc2aab3f8..d85402de8 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -143,6 +143,8 @@ extern const u8 gUnknown_841DFBE[];
extern const u8 gUnknown_841DFC9[];
// help_system
+extern const u8 gUnknown_841CB3C[];
+extern const u8 gUnknown_841CB41[];
extern const u8 gUnknown_841CB49[];
extern const u8 gUnknown_841CB4E[];
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/src/help_system.c b/src/help_system.c
index 08120952f..afa99c358 100644
--- a/src/help_system.c
+++ b/src/help_system.c
@@ -9,7 +9,12 @@
#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 DmaController
{
@@ -51,6 +56,7 @@ void sub_813BF50(u8);
void sub_813BC2C(void);
void sub_813BC48(void);
void sub_813BC5C(void);
+void sub_813C3AC(u8, u16, struct Bitmap *, struct Bitmap *, u8 *, u8, u8, u8, u8);
void sub_813C454(const u8 * str);
void sub_813C5D4(void);
@@ -379,3 +385,575 @@ void sub_813BFC0(u8 mode)
break;
}
}
+
+void sub_813C004(u8 a0, u8 mode)
+{
+ switch (mode)
+ {
+ case 0:
+ sub_813BC78(0x1FF, 28, 3, 1, 1, 0);
+ sub_813BC78(0x1FF, 28, 18, 1, 1, 0);
+ break;
+ case 1:
+ if (a0 == 0)
+ sub_813BC78(0x1FE, 28, 3, 1, 1, 0);
+ else
+ sub_813BC78(0x1FD, 28, 18, 1, 1, 0);
+ break;
+ }
+}
+
+#define HelpSystemHandleRenderGlyph(character) ({\
+ do {sub_813C3AC(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 (gUnknown_841CB3C[i] == EOS)
+ break;
+ HelpSystemHandleRenderGlyph(gUnknown_841CB3C[i]);
+ }
+ else
+ {
+ if (gUnknown_841CB41[i] == EOS)
+ break;
+ HelpSystemHandleRenderGlyph(gUnknown_841CB41[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 sub_813C3AC\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 sub_813C3AC\n"
+ "\tb _0813C1AC\n"
+ "_0813C184:\n"
+ "\tldr r0, _0813C1D8 @ =gUnknown_841CB41\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 sub_813C3AC\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 @ =gUnknown_841CB3C\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 gUnknown_841CB41\n"
+ "_0813C1DC: .4byte 0x00000834\n"
+ "_0813C1E0: .4byte gUnknown_841CB3C\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 sub_813C3AC\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 sub_813C3AC(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);
+}
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