diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-13 13:45:46 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-13 13:45:46 -0400 |
commit | e30052e271c649ae2ca08cbbbdf2dc2052e6ae38 (patch) | |
tree | 623a7faf2c7bd09070def94a594f841e1d767acd | |
parent | 2ffcf13f6bd243cac85dff4e2c29ba4b3ae44aa4 (diff) |
help_system: through sub_813C3AC
-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 |