help_system: through sub_813C3AC

This commit is contained in:
PikalaxALT 2019-06-13 13:45:46 -04:00
parent 2ffcf13f6b
commit e30052e271
7 changed files with 588 additions and 544 deletions

View File

@ -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}

View File

@ -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

View File

@ -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

View File

@ -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[];

View File

@ -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);

View File

@ -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);
}

View File

@ -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