diff options
| -rw-r--r-- | asm/help_system.s | 540 | ||||
| -rw-r--r-- | data/maps/Route25_SeaCottage/scripts.inc | 2 | ||||
| -rw-r--r-- | include/constants/flags.h | 2 | ||||
| -rw-r--r-- | include/strings.h | 2 | ||||
| -rw-r--r-- | include/text.h | 6 | ||||
| -rw-r--r-- | src/help_system.c | 578 | ||||
| -rw-r--r-- | src/vs_seeker.c | 2 | 
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 | 
