Add Shift-JIS support for some voice and message files (#1500)

* z_message iconv

* voicecheckword iconv

* format

* TODO

* voice_external iconv

* Missed a few in message

* Use shiftjis_conv instead

* space comment in message_nes

* Use chars for cases

* Add ending single quote check as well

* table comments

* No look up table

* align makefile tools
This commit is contained in:
Derek Hensley 2024-03-31 20:24:06 -07:00 committed by GitHub
parent 997c45c2d2
commit 250be53cde
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 271 additions and 236 deletions

View File

@ -125,7 +125,8 @@ ZAPD := tools/ZAPD/ZAPD.out
FADO := tools/fado/fado.elf FADO := tools/fado/fado.elf
MAKEYAR := $(PYTHON) tools/buildtools/makeyar.py MAKEYAR := $(PYTHON) tools/buildtools/makeyar.py
CHECKSUMMER := $(PYTHON) tools/buildtools/checksummer.py CHECKSUMMER := $(PYTHON) tools/buildtools/checksummer.py
SCHC := tools/buildtools/schc.py SHIFTJIS_CONV := $(PYTHON) tools/shiftjis_conv.py
SCHC := $(PYTHON) tools/buildtools/schc.py
SCHC_FLAGS := SCHC_FLAGS :=
@ -200,6 +201,9 @@ O_FILES := $(foreach f,$(S_FILES:.s=.o),build/$f) \
$(foreach f,$(BASEROM_FILES),build/$f.o) \ $(foreach f,$(BASEROM_FILES),build/$f.o) \
$(ARCHIVES_O) $(ARCHIVES_O)
SHIFTJIS_C_FILES := src/libultra/voice/voicecheckword.c src/audio/voice_external.c src/code/z_message.c src/code/z_message_nes.c
SHIFTJIS_O_FILES := $(foreach f,$(SHIFTJIS_C_FILES:.c=.o),build/$f)
OVL_RELOC_FILES := $(shell $(CPP) $(CPPFLAGS) $(SPEC) | grep -o '[^"]*_reloc.o' ) OVL_RELOC_FILES := $(shell $(CPP) $(CPPFLAGS) $(SPEC) | grep -o '[^"]*_reloc.o' )
SCHEDULE_INC_FILES := $(foreach f,$(SCHEDULE_FILES:.schl=.schl.inc),build/$f) SCHEDULE_INC_FILES := $(foreach f,$(SCHEDULE_FILES:.schl=.schl.inc),build/$f)
@ -253,8 +257,6 @@ build/src/boot/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS
build/src/boot/O2/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) -- build/src/boot/O2/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) --
build/src/libultra/%.o: CC := $(CC_OLD) build/src/libultra/%.o: CC := $(CC_OLD)
# Needed at least until voice is decompiled
build/src/libultra/voice/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC_OLD) -- $(AS) $(ASFLAGS) --
build/src/code/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) -- build/src/code/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) --
build/src/audio/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) -- build/src/audio/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) --
@ -263,6 +265,8 @@ build/src/overlays/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASF
build/assets/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) -- build/assets/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) --
$(SHIFTJIS_O_FILES): CC_CHECK += -Wno-multichar -Wno-type-limits -Wno-overflow
#### Main Targets ### #### Main Targets ###
uncompressed: $(ROM) uncompressed: $(ROM)
@ -412,6 +416,13 @@ build/src/%.o: src/%.c
$(OBJDUMP_CMD) $(OBJDUMP_CMD)
$(RM_MDEBUG) $(RM_MDEBUG)
$(SHIFTJIS_O_FILES): build/src/%.o: src/%.c
$(SHIFTJIS_CONV) -o $(@:.o=.enc.c) $<
$(CC_CHECK) $(@:.o=.enc.c)
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $(@:.o=.enc.c)
$(OBJDUMP_CMD)
$(RM_MDEBUG)
build/src/libultra/libc/ll.o: src/libultra/libc/ll.c build/src/libultra/libc/ll.o: src/libultra/libc/ll.c
$(CC_CHECK) $< $(CC_CHECK) $<
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $< $(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<

View File

@ -3,23 +3,23 @@
OSVoiceDictionary sVoiceDictionary = { OSVoiceDictionary sVoiceDictionary = {
{ {
// "アトナンジカン" - "atonanjikan" - "How many hours" // "atonanjikan" - "How many hours"
{ 0x8341, 0x8367, 0x8369, 0x8393, 0x8357, 0x834A, 0x8393 }, { '', '', '', '', '', '', '' },
// "ハイチーズ" - "haichīzu" - "say cheese" // "haichīzu" - "say cheese"
{ 0x836E, 0x8343, 0x8360, 0x815B, 0x8359 }, { '', '', '', '', '' },
// "オキロー" - "okirō" - "wake up" // "okirō" - "wake up"
{ 0x8349, 0x834C, 0x838D, 0x815B }, { '', '', '', '' },
// "オスワリ" - "osuwari" - "sit" // "osuwari" - "sit"
{ 0x8349, 0x8358, 0x838F, 0x838A }, { '', '', '', '' },
// "ミルク" - "miruku" - "milk" // "miruku" - "milk"
{ 0x837E, 0x838B, 0x834E }, { '', '', '' },
// "ハイヤー" - "haiyā" - "hiya!" // "haiyā" - "hiya!"
{ 0x836E, 0x8343, 0x8384, 0x815B }, { '', '', '', '' },
}, },
VOICE_WORD_ID_MAX, // number of words VOICE_WORD_ID_MAX, // number of words

View File

@ -697,7 +697,7 @@ void func_801496C8(PlayState* play) {
if (msgCtx->unk12054[msgCtx->unk120C2] < 0) { if (msgCtx->unk12054[msgCtx->unk120C2] < 0) {
msgCtx->unk12054[msgCtx->unk120C2] = 3; msgCtx->unk12054[msgCtx->unk120C2] = 3;
} }
msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + 0x824F; msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + '';
Font_LoadChar(play, msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2], Font_LoadChar(play, msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2],
msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); msgCtx->unk120C4 + (msgCtx->unk120C2 << 7));
Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); Audio_PlaySfx(NA_SE_SY_RUPY_COUNT);
@ -706,7 +706,7 @@ void func_801496C8(PlayState* play) {
if (msgCtx->unk12054[msgCtx->unk120C2] >= 4) { if (msgCtx->unk12054[msgCtx->unk120C2] >= 4) {
msgCtx->unk12054[msgCtx->unk120C2] = 0; msgCtx->unk12054[msgCtx->unk120C2] = 0;
} }
msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + 0x824F; msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + '';
Font_LoadChar(play, msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2], Font_LoadChar(play, msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2],
msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); msgCtx->unk120C4 + (msgCtx->unk120C2 << 7));
Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); Audio_PlaySfx(NA_SE_SY_RUPY_COUNT);
@ -1178,7 +1178,7 @@ void Message_DrawTextDefault(PlayState* play, Gfx** gfxP) {
} }
break; break;
case 0x20: // ` ` case ' ':
msgCtx->textPosX += 6; msgCtx->textPosX += 6;
break; break;
@ -1476,17 +1476,17 @@ void Message_DrawTextDefault(PlayState* play, Gfx** gfxP) {
default: default:
switch (character) { switch (character) {
case 0x8169: case '':
case 0x8175: case '':
msgCtx->textPosX -= TRUNCF_BINANG(6.0f * msgCtx->textCharScale); msgCtx->textPosX -= TRUNCF_BINANG(6.0f * msgCtx->textCharScale);
break; break;
case 0x8145: case '':
msgCtx->textPosX -= TRUNCF_BINANG(3.0f * msgCtx->textCharScale); msgCtx->textPosX -= TRUNCF_BINANG(3.0f * msgCtx->textCharScale);
break; break;
case 0x8148: case '':
case 0x8149: case '':
msgCtx->textPosX -= TRUNCF_BINANG(2.0f * msgCtx->textCharScale); msgCtx->textPosX -= TRUNCF_BINANG(2.0f * msgCtx->textCharScale);
break; break;
@ -1514,26 +1514,26 @@ void Message_DrawTextDefault(PlayState* play, Gfx** gfxP) {
} }
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
switch (character) { switch (character) {
case 0x8144: case '':
msgCtx->textPosX += TRUNCF_BINANG(8.0f * msgCtx->textCharScale); msgCtx->textPosX += TRUNCF_BINANG(8.0f * msgCtx->textCharScale);
break; break;
case 0x816A: case '':
case 0x8176: case '':
msgCtx->textPosX += TRUNCF_BINANG(10.0f * msgCtx->textCharScale); msgCtx->textPosX += TRUNCF_BINANG(10.0f * msgCtx->textCharScale);
break; break;
case 0x8141: case '':
case 0x8142: case '':
case 0x8168: case '':
msgCtx->textPosX += TRUNCF_BINANG(12.0f * msgCtx->textCharScale); msgCtx->textPosX += TRUNCF_BINANG(12.0f * msgCtx->textCharScale);
break; break;
case 0x8194: case '':
msgCtx->textPosX += TRUNCF_BINANG(14.0f * msgCtx->textCharScale); msgCtx->textPosX += TRUNCF_BINANG(14.0f * msgCtx->textCharScale);
break; break;
case 0x8145: case '':
msgCtx->textPosX += TRUNCF_BINANG(15.0f * msgCtx->textCharScale); msgCtx->textPosX += TRUNCF_BINANG(15.0f * msgCtx->textCharScale);
break; break;
@ -1911,25 +1911,23 @@ void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg
*arg3 = temp2; *arg3 = temp2;
} }
// TODO: SJIS support void Message_LoadRupeesJPN(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) {
// Message_LoadRupees JPN ?
void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) {
MessageContext* msgCtx = &play->msgCtx; MessageContext* msgCtx = &play->msgCtx;
s16 t = *decodedBufPos; s16 t = *decodedBufPos;
s32 k = *offset; s32 k = *offset;
f32 f = *arg3; f32 f = *arg3;
Font_LoadChar(play, 0x838B, k); // 0x838B = ル in JISX0213 Font_LoadChar(play, '', k);
k += FONT_CHAR_TEX_SIZE; k += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[t] = 0x838B; msgCtx->decodedBuffer.wchar[t] = '';
t++; t++;
Font_LoadChar(play, 0x8373, k); // 0x8373 = ピ in JISX0213 Font_LoadChar(play, '', k);
k += FONT_CHAR_TEX_SIZE; k += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[t] = 0x8373; msgCtx->decodedBuffer.wchar[t] = '';
t++; t++;
Font_LoadChar(play, 0x815C, k); // 0x815C = ― in JISX0213 Font_LoadChar(play, '', k);
k += FONT_CHAR_TEX_SIZE; k += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[t] = 0x815C; msgCtx->decodedBuffer.wchar[t] = '';
f += 16.0f * msgCtx->textCharScale * 3.0f; f += 16.0f * msgCtx->textCharScale * 3.0f;
*decodedBufPos = t; *decodedBufPos = t;
@ -1939,7 +1937,7 @@ void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3)
/* /*
* offsetting to actual codepoints is done outside this function * offsetting to actual codepoints is done outside this function
* every digit will be added 0x824F to get an actual S-JIS * every digit will be added 0x824F ('') to get an actual S-JIS
* printable character. * printable character.
*/ */
void Message_GetTimerDigits(OSTime time, s16 digits[8]) { void Message_GetTimerDigits(OSTime time, s16 digits[8]) {
@ -1953,7 +1951,7 @@ void Message_GetTimerDigits(OSTime time, s16 digits[8]) {
digits[1] = t / SECONDS_TO_TIMER(60); digits[1] = t / SECONDS_TO_TIMER(60);
t -= digits[1] * SECONDS_TO_TIMER(60); t -= digits[1] * SECONDS_TO_TIMER(60);
digits[2] = 0x135B; // 0x135B + 0x824F = 分 (minutes) in S-JIS digits[2] = '' - '';
// 10 seconds // 10 seconds
digits[3] = t / SECONDS_TO_TIMER(10); digits[3] = t / SECONDS_TO_TIMER(10);
@ -1963,7 +1961,7 @@ void Message_GetTimerDigits(OSTime time, s16 digits[8]) {
digits[4] = t / SECONDS_TO_TIMER(1); digits[4] = t / SECONDS_TO_TIMER(1);
t -= digits[4] * SECONDS_TO_TIMER(1); t -= digits[4] * SECONDS_TO_TIMER(1);
digits[5] = 0x1313; // 0x1313 + 0x824F = 秒 (seconds) in S-JIS digits[5] = '' - '';
// 100 milliseconds // 100 milliseconds
digits[6] = t / SECONDS_TO_TIMER_PRECISE(0, 10); digits[6] = t / SECONDS_TO_TIMER_PRECISE(0, 10);
@ -2048,25 +2046,25 @@ void Message_LoadTime(PlayState* play, u16 curChar, s32* offset, f32* arg3, s16*
} }
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
Font_LoadChar(play, digits[i] + 0x824F, o); // 0x824F = '0' in S-JIS Font_LoadChar(play, digits[i] + '', o);
o += FONT_CHAR_TEX_SIZE; o += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[p] = digits[i] + 0x824F; msgCtx->decodedBuffer.wchar[p] = digits[i] + '';
p++; p++;
if (i == 1) { if (i == 1) {
// Hours (時間) // Hours (時間)
Font_LoadChar(play, 0x8E9E, o); Font_LoadChar(play, '', o);
o += FONT_CHAR_TEX_SIZE; o += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[p] = 0x8E9E; msgCtx->decodedBuffer.wchar[p] = '';
p++; p++;
Font_LoadChar(play, 0x8AD4, o); Font_LoadChar(play, '', o);
o += FONT_CHAR_TEX_SIZE; o += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[p] = 0x8E9E; msgCtx->decodedBuffer.wchar[p] = '';
p++; p++;
} else if (i == 3) { } else if (i == 3) {
// Minutes (分) // Minutes (分)
Font_LoadChar(play, 0x95AA, o); Font_LoadChar(play, '', o);
o += FONT_CHAR_TEX_SIZE; o += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[p] = 0x95AA; msgCtx->decodedBuffer.wchar[p] = '';
} }
} }
@ -2077,29 +2075,28 @@ void Message_LoadTime(PlayState* play, u16 curChar, s32* offset, f32* arg3, s16*
} }
#define GREAT_BAY_COAST_STR \ #define GREAT_BAY_COAST_STR \
{ 0x834F, 0x838C, 0x815B, 0x8367, 0x8378, 0x8343, 0x82CC, 0x8A43, 0x8ADD } { '', '', '', '', '', '', '', '', '' }
#define ZORA_CAPE_STR \ #define ZORA_CAPE_STR \
{ 0x835D, 0x815B, 0x8389, 0x82CC, 0x82DD, 0x82B3, 0x82AB } { '', '', '', '', '', '', '' }
#define SNOWHEAD_STR \ #define SNOWHEAD_STR \
{ 0x8358, 0x836D, 0x815B, 0x8377, 0x8362, 0x8368 } { '', '', '', '', '', '' }
#define MOUNTAIN_VILLAGE_STR \ #define MOUNTAIN_VILLAGE_STR \
{ 0x8E52, 0x97A2 } { '', '' }
#define CLOCK_TOWN_STR \ #define CLOCK_TOWN_STR \
{ 0x834E, 0x838D, 0x8362, 0x834E, 0x835E, 0x8345, 0x8393 } { '', '', '', '', '', '', '' }
#define MILK_ROAD_STR \ #define MILK_ROAD_STR \
{ 0x837E, 0x838B, 0x834E, 0x838D, 0x815B, 0x8368 } { '', '', '', '', '', '' }
#define WOODFALL_STR \ #define WOODFALL_STR \
{ 0x8345, 0x8362, 0x8368, 0x8374, 0x8348, 0x815B, 0x838B } { '', '', '', '', '', '', '' }
#define SOUTHERN_SWAMP_STR \ #define SOUTHERN_SWAMP_STR \
{ 0x8FC0, 0x926E } { '', '' }
#define IKANA_CANYON_STR \ #define IKANA_CANYON_STR \
{ 0x8343, 0x834A, 0x815B, 0x8369, 0x8C6B, 0x924A } { '', '', '', '', '', '' }
#define STONE_TOWER_STR \ #define STONE_TOWER_STR \
{ 0x838D, 0x8362, 0x834E, 0x8372, 0x838B } { '', '', '', '', '' }
#define ENTRANCE_STR \ #define ENTRANCE_STR \
{ 0x93FC, 0x82E8, 0x8CFB } { '', '', '' }
// Shift JIS
u16 sOwlWarpTextJPN[OWL_WARP_MAX][9] = { u16 sOwlWarpTextJPN[OWL_WARP_MAX][9] = {
GREAT_BAY_COAST_STR, // OWL_WARP_GREAT_BAY_COAST GREAT_BAY_COAST_STR, // OWL_WARP_GREAT_BAY_COAST
ZORA_CAPE_STR, // OWL_WARP_ZORA_CAPE ZORA_CAPE_STR, // OWL_WARP_ZORA_CAPE
@ -2114,7 +2111,6 @@ u16 sOwlWarpTextJPN[OWL_WARP_MAX][9] = {
ENTRANCE_STR, // OWL_WARP_ENTRANCE ENTRANCE_STR, // OWL_WARP_ENTRANCE
}; };
//! TODO: use sizeof when we have strings
s16 sOwlWarpTextLengthJPN[OWL_WARP_MAX] = { s16 sOwlWarpTextLengthJPN[OWL_WARP_MAX] = {
9, // OWL_WARP_GREAT_BAY_COAST 9, // OWL_WARP_GREAT_BAY_COAST
7, // OWL_WARP_ZORA_CAPE 7, // OWL_WARP_ZORA_CAPE
@ -2160,15 +2156,15 @@ void Message_LoadOwlWarpText(PlayState* play, s32* offset, f32* arg2, s16* decod
} }
u16 sTimeSpeedTextJPN[][3] = { u16 sTimeSpeedTextJPN[][3] = {
{ 0x82CD, 0x82E2, 0x82A2 }, { '', '', '' },
{ 0x82D3, 0x82C2, 0x82A4 }, { '', '', '' },
{ 0x82A8, 0x82BB, 0x82A2 }, { '', '', '' },
}; };
u16 sMaskCodeColorCmdJPN[] = { 0x2001, 0x2003, 0x2004, 0x2002 }; u16 sMaskCodeColorCmdJPN[] = { 0x2001, 0x2003, 0x2004, 0x2002 };
// Counterpart to NES sMaskCodeTextENG // Counterpart to NES sMaskCodeTextENG
u16 D_801D0284[] = { 0x90D4, 0x90C2, 0x89A9, 0x97CE }; u16 sMaskCodeTextJPN[] = { '', '', '', '' };
void Message_Decode(PlayState* play) { void Message_Decode(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx; MessageContext* msgCtx = &play->msgCtx;
@ -2313,7 +2309,7 @@ void Message_Decode(PlayState* play) {
loadChar = true; loadChar = true;
} }
if (loadChar) { if (loadChar) {
Message_LoadChar(play, spAC[i + 3] + 0x824F, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, spAC[i + 3] + '', &charTexIndex, &spC0, decodedBufPos);
decodedBufPos++; decodedBufPos++;
} }
} }
@ -2328,7 +2324,7 @@ void Message_Decode(PlayState* play) {
loadChar = true; loadChar = true;
} }
if (loadChar) { if (loadChar) {
Message_LoadChar(play, spAC[i] + 0x824F, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, spAC[i] + '', &charTexIndex, &spC0, decodedBufPos);
decodedBufPos++; decodedBufPos++;
} }
} }
@ -2350,19 +2346,19 @@ void Message_Decode(PlayState* play) {
} }
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
Font_LoadChar(play, digits[i] + 0x824F, charTexIndex); Font_LoadChar(play, digits[i] + '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + '';
decodedBufPos++; decodedBufPos++;
if (i == 1) { if (i == 1) {
Font_LoadChar(play, 0x8E9E, charTexIndex); Font_LoadChar(play, '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x8E9E; msgCtx->decodedBuffer.wchar[decodedBufPos] = '';
decodedBufPos++; decodedBufPos++;
} else if (i == 3) { } else if (i == 3) {
Font_LoadChar(play, 0x95AA, charTexIndex); Font_LoadChar(play, '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x95AA; msgCtx->decodedBuffer.wchar[decodedBufPos] = '';
} }
} }
spC0 += 6 * (16.0f * msgCtx->textCharScale); spC0 += 6 * (16.0f * msgCtx->textCharScale);
@ -2389,9 +2385,9 @@ void Message_Decode(PlayState* play) {
loadChar = true; loadChar = true;
} }
if (loadChar) { if (loadChar) {
Font_LoadChar(play, digits[i] + 0x824F, charTexIndex); Font_LoadChar(play, digits[i] + '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + '';
decodedBufPos++; decodedBufPos++;
spC0 += 16.0f * msgCtx->textCharScale; spC0 += 16.0f * msgCtx->textCharScale;
} }
@ -2407,10 +2403,10 @@ void Message_Decode(PlayState* play) {
digits[0] = digits[1] = digits[2] = 0; digits[0] = digits[1] = digits[2] = 0;
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
Message_LoadChar(play, digits[i] + 0x824F, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, digits[i] + '', &charTexIndex, &spC0, decodedBufPos);
decodedBufPos++; decodedBufPos++;
} }
func_8014CCB4(play, &decodedBufPos, &charTexIndex, &spC0); Message_LoadRupeesJPN(play, &decodedBufPos, &charTexIndex, &spC0);
} else if (curChar == 0x20D) { } else if (curChar == 0x20D) {
digits[0] = digits[1] = 0; digits[0] = digits[1] = 0;
digits[2] = msgCtx->rupeesSelected; digits[2] = msgCtx->rupeesSelected;
@ -2431,11 +2427,11 @@ void Message_Decode(PlayState* play) {
loadChar = true; loadChar = true;
} }
if (loadChar) { if (loadChar) {
Message_LoadChar(play, digits[i] + 0x824F, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, digits[i] + '', &charTexIndex, &spC0, decodedBufPos);
decodedBufPos++; decodedBufPos++;
} }
} }
func_8014CCB4(play, &decodedBufPos, &charTexIndex, &spC0); Message_LoadRupeesJPN(play, &decodedBufPos, &charTexIndex, &spC0);
} else if (curChar == 0x20E) { } else if (curChar == 0x20E) {
digits[0] = digits[1] = digits[2] = 0; digits[0] = digits[1] = digits[2] = 0;
digits[3] = msgCtx->rupeesTotal; digits[3] = msgCtx->rupeesTotal;
@ -2459,11 +2455,11 @@ void Message_Decode(PlayState* play) {
loadChar = true; loadChar = true;
} }
if (loadChar) { if (loadChar) {
Message_LoadChar(play, digits[i] + 0x824F, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, digits[i] + '', &charTexIndex, &spC0, decodedBufPos);
decodedBufPos++; decodedBufPos++;
} }
} }
func_8014CCB4(play, &decodedBufPos, &charTexIndex, &spC0); Message_LoadRupeesJPN(play, &decodedBufPos, &charTexIndex, &spC0);
} else if (curChar == 0x20F) { } else if (curChar == 0x20F) {
Message_LoadTime(play, curChar, &charTexIndex, &spC0, &decodedBufPos); Message_LoadTime(play, curChar, &charTexIndex, &spC0, &decodedBufPos);
} else if (curChar == 0x21C) { } else if (curChar == 0x21C) {
@ -2485,13 +2481,13 @@ void Message_Decode(PlayState* play) {
loadChar = true; loadChar = true;
} }
if (loadChar) { if (loadChar) {
Message_LoadChar(play, digits[i] + 0x824F, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, digits[i] + '', &charTexIndex, &spC0, decodedBufPos);
decodedBufPos++; decodedBufPos++;
} }
} }
Message_LoadChar(play, 0x906C, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, '', &charTexIndex, &spC0, decodedBufPos);
decodedBufPos++; decodedBufPos++;
Message_LoadChar(play, 0x96DA, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, '', &charTexIndex, &spC0, decodedBufPos);
} else if (curChar == 0x21D) { } else if (curChar == 0x21D) {
digits[0] = digits[1] = 0; digits[0] = digits[1] = 0;
digits[2] = Inventory_GetSkullTokenCount(play->sceneId); digits[2] = Inventory_GetSkullTokenCount(play->sceneId);
@ -2511,11 +2507,11 @@ void Message_Decode(PlayState* play) {
loadChar = true; loadChar = true;
} }
if (loadChar) { if (loadChar) {
Message_LoadChar(play, digits[i] + 0x824F, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, digits[i] + '', &charTexIndex, &spC0, decodedBufPos);
decodedBufPos++; decodedBufPos++;
} }
} }
Message_LoadChar(play, 0x9543, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, '', &charTexIndex, &spC0, decodedBufPos);
} else if (curChar == 0x21E) { } else if (curChar == 0x21E) {
digits[0] = 0; digits[0] = 0;
digits[1] = gSaveContext.minigameScore; digits[1] = gSaveContext.minigameScore;
@ -2527,7 +2523,7 @@ void Message_Decode(PlayState* play) {
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
if ((i == 1) || (digits[i] != 0)) { if ((i == 1) || (digits[i] != 0)) {
Message_LoadChar(play, digits[i] + 0x824F, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, digits[i] + '', &charTexIndex, &spC0, decodedBufPos);
decodedBufPos++; decodedBufPos++;
} }
} }
@ -2555,7 +2551,7 @@ void Message_Decode(PlayState* play) {
loadChar = true; loadChar = true;
} }
if (loadChar) { if (loadChar) {
Message_LoadChar(play, digits[i] + 0x824F, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, digits[i] + '', &charTexIndex, &spC0, decodedBufPos);
decodedBufPos++; decodedBufPos++;
} }
} }
@ -2569,10 +2565,10 @@ void Message_Decode(PlayState* play) {
msgCtx->unk120C4 = charTexIndex; msgCtx->unk120C4 = charTexIndex;
digits[0] = digits[1] = digits[2] = 0; digits[0] = digits[1] = digits[2] = 0;
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
Message_LoadChar(play, digits[i] + 0x824F, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, digits[i] + '', &charTexIndex, &spC0, decodedBufPos);
decodedBufPos++; decodedBufPos++;
} }
func_8014CCB4(play, &decodedBufPos, &charTexIndex, &spC0); Message_LoadRupeesJPN(play, &decodedBufPos, &charTexIndex, &spC0);
} else if (curChar == 0x221) { } else if (curChar == 0x221) {
decodedBufPos++; decodedBufPos++;
msgCtx->unk120BE = spD2; msgCtx->unk120BE = spD2;
@ -2583,7 +2579,7 @@ void Message_Decode(PlayState* play) {
for (i = 0; i < 5; i++) { for (i = 0; i < 5; i++) {
msgCtx->unk12054[i] = 1; msgCtx->unk12054[i] = 1;
Message_LoadChar(play, 0x8250, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, '', &charTexIndex, &spC0, decodedBufPos);
decodedBufPos++; decodedBufPos++;
} }
decodedBufPos--; decodedBufPos--;
@ -2616,9 +2612,9 @@ void Message_Decode(PlayState* play) {
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
msgCtx->unk12054[i] = 1; msgCtx->unk12054[i] = 1;
Font_LoadChar(play, 0x8250, charTexIndex); Font_LoadChar(play, '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x8250; msgCtx->decodedBuffer.wchar[decodedBufPos] = '';
spC0 += 16.0f * msgCtx->textCharScale; spC0 += 16.0f * msgCtx->textCharScale;
decodedBufPos++; decodedBufPos++;
} }
@ -2628,7 +2624,7 @@ void Message_Decode(PlayState* play) {
msgCtx->decodedBuffer.wchar[decodedBufPos] = msgCtx->decodedBuffer.wchar[decodedBufPos] =
sMaskCodeColorCmdJPN[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[i])]; sMaskCodeColorCmdJPN[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[i])];
decodedBufPos++; decodedBufPos++;
Message_LoadChar(play, i + 0x8250, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, i + '', &charTexIndex, &spC0, decodedBufPos);
decodedBufPos++; decodedBufPos++;
} }
msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x2000; msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x2000;
@ -2652,14 +2648,14 @@ void Message_Decode(PlayState* play) {
loadChar = true; loadChar = true;
} }
if (loadChar) { if (loadChar) {
Font_LoadChar(play, digits[i] + 0x824F, charTexIndex); Font_LoadChar(play, digits[i] + '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + '';
decodedBufPos++; decodedBufPos++;
spC0 += 16.0f * msgCtx->textCharScale; spC0 += 16.0f * msgCtx->textCharScale;
} }
} }
Message_LoadChar(play, 0x906C, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, '', &charTexIndex, &spC0, decodedBufPos);
} else if (curChar == 0x22B) { } else if (curChar == 0x22B) {
digits[0] = digits[1] = digits[2] = 0; digits[0] = digits[1] = digits[2] = 0;
digits[3] = gSaveContext.minigameScore; digits[3] = gSaveContext.minigameScore;
@ -2683,14 +2679,14 @@ void Message_Decode(PlayState* play) {
loadChar = true; loadChar = true;
} }
if (loadChar) { if (loadChar) {
Font_LoadChar(play, digits[i] + 0x824F, charTexIndex); Font_LoadChar(play, digits[i] + '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + '';
decodedBufPos++; decodedBufPos++;
spC0 += 16.0f * msgCtx->textCharScale; spC0 += 16.0f * msgCtx->textCharScale;
} }
} }
Message_LoadChar(play, 0x94AD, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, '', &charTexIndex, &spC0, decodedBufPos);
} else if ((curChar == 0x22C) || (curChar == 0x22D)) { } else if ((curChar == 0x22C) || (curChar == 0x22D)) {
if (curChar == 0x22C) { if (curChar == 0x22C) {
digits[0] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][0]; digits[0] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][0];
@ -2702,9 +2698,9 @@ void Message_Decode(PlayState* play) {
digits[2] = HS_GET_LOTTERY_CODE_GUESS() & 0xF; digits[2] = HS_GET_LOTTERY_CODE_GUESS() & 0xF;
} }
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
Font_LoadChar(play, digits[i] + 0x824F, charTexIndex); Font_LoadChar(play, digits[i] + '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + '';
decodedBufPos++; decodedBufPos++;
spC0 += 16.0f * msgCtx->textCharScale; spC0 += 16.0f * msgCtx->textCharScale;
} }
@ -2732,20 +2728,20 @@ void Message_Decode(PlayState* play) {
loadChar = true; loadChar = true;
} }
if (loadChar) { if (loadChar) {
Font_LoadChar(play, digits[i] + 0x824F, charTexIndex); Font_LoadChar(play, digits[i] + '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + '';
decodedBufPos++; decodedBufPos++;
spC0 += 16.0f * msgCtx->textCharScale; spC0 += 16.0f * msgCtx->textCharScale;
} }
} }
func_8014CCB4(play, &decodedBufPos, &charTexIndex, &spC0); Message_LoadRupeesJPN(play, &decodedBufPos, &charTexIndex, &spC0);
} else if (curChar == 0x22F) { } else if (curChar == 0x22F) {
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.bomberCode); i++) { for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.bomberCode); i++) {
digits[i] = gSaveContext.save.saveInfo.bomberCode[i]; digits[i] = gSaveContext.save.saveInfo.bomberCode[i];
Font_LoadChar(play, digits[i] + 0x824F, charTexIndex); Font_LoadChar(play, digits[i] + '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + '';
decodedBufPos++; decodedBufPos++;
spC0 += 16.0f * msgCtx->textCharScale; spC0 += 16.0f * msgCtx->textCharScale;
} }
@ -2754,9 +2750,9 @@ void Message_Decode(PlayState* play) {
msgCtx->decodedBuffer.wchar[decodedBufPos] = sMaskCodeColorCmdJPN[( msgCtx->decodedBuffer.wchar[decodedBufPos] = sMaskCodeColorCmdJPN[(
(void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0x231)])]; (void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0x231)])];
decodedBufPos++; decodedBufPos++;
Message_LoadChar( Message_LoadChar(play,
play, sMaskCodeTextJPN[(
D_801D0284[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0x231)])], (void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0x231)])],
&charTexIndex, &spC0, decodedBufPos); &charTexIndex, &spC0, decodedBufPos);
decodedBufPos++; decodedBufPos++;
msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x2000; msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x2000;
@ -2776,17 +2772,17 @@ void Message_Decode(PlayState* play) {
loadChar = true; loadChar = true;
} }
if (loadChar) { if (loadChar) {
Message_LoadChar(play, digits[i] + 0x824F, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, digits[i] + '', &charTexIndex, &spC0, decodedBufPos);
decodedBufPos++; decodedBufPos++;
} }
} }
Font_LoadChar(play, 0x8E9E, charTexIndex); Font_LoadChar(play, '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x8E9E; msgCtx->decodedBuffer.wchar[decodedBufPos] = '';
decodedBufPos++; decodedBufPos++;
Font_LoadChar(play, 0x8AD4, charTexIndex); Font_LoadChar(play, '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x8E9E; msgCtx->decodedBuffer.wchar[decodedBufPos] = '';
spC0 += 2.0f * (16.0f * msgCtx->textCharScale); spC0 += 2.0f * (16.0f * msgCtx->textCharScale);
} else if (curChar == 0x238) { } else if (curChar == 0x238) {
Message_LoadTime(play, curChar, &charTexIndex, &spC0, &decodedBufPos); Message_LoadTime(play, curChar, &charTexIndex, &spC0, &decodedBufPos);
@ -2825,9 +2821,9 @@ void Message_Decode(PlayState* play) {
loadChar = true; loadChar = true;
} }
if (loadChar) { if (loadChar) {
Font_LoadChar(play, digits[i] + 0x824F, charTexIndex); Font_LoadChar(play, digits[i] + '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + '';
decodedBufPos++; decodedBufPos++;
spC0 += 16.0f * msgCtx->textCharScale; spC0 += 16.0f * msgCtx->textCharScale;
} }
@ -2851,9 +2847,9 @@ void Message_Decode(PlayState* play) {
loadChar = true; loadChar = true;
} }
if (loadChar) { if (loadChar) {
Font_LoadChar(play, spAC[i] + 0x824F, charTexIndex); Font_LoadChar(play, spAC[i] + '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = spAC[i] + 0x824F; msgCtx->decodedBuffer.wchar[decodedBufPos] = spAC[i] + '';
decodedBufPos++; decodedBufPos++;
} else { } else {
var_fs0 -= 1.0f; var_fs0 -= 1.0f;
@ -2880,19 +2876,19 @@ void Message_Decode(PlayState* play) {
} }
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
Font_LoadChar(play, digits[i] + 0x824F, charTexIndex); Font_LoadChar(play, digits[i] + '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + '';
decodedBufPos++; decodedBufPos++;
if (i == 1) { if (i == 1) {
Font_LoadChar(play, 0x95AA, charTexIndex); Font_LoadChar(play, '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x95AA; msgCtx->decodedBuffer.wchar[decodedBufPos] = '';
decodedBufPos++; decodedBufPos++;
} else if (i == 3) { } else if (i == 3) {
Font_LoadChar(play, 0x9562, charTexIndex); Font_LoadChar(play, '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x9562; msgCtx->decodedBuffer.wchar[decodedBufPos] = '';
} }
} }
spC0 += 4.0f * (16.0f * msgCtx->textCharScale); spC0 += 4.0f * (16.0f * msgCtx->textCharScale);
@ -2919,14 +2915,14 @@ void Message_Decode(PlayState* play) {
loadChar = true; loadChar = true;
} }
if (loadChar) { if (loadChar) {
Font_LoadChar(play, digits[i] + 0x824F, charTexIndex); Font_LoadChar(play, digits[i] + '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + '';
decodedBufPos++; decodedBufPos++;
spC0 += 16.0f * msgCtx->textCharScale; spC0 += 16.0f * msgCtx->textCharScale;
} }
} }
Message_LoadChar(play, 0x9543, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, '', &charTexIndex, &spC0, decodedBufPos);
} else if ((curChar == 0x30D) || (curChar == 0x30E) || (curChar == 0x30F)) { } else if ((curChar == 0x30D) || (curChar == 0x30E) || (curChar == 0x30F)) {
index = curChar - 0x30D; index = curChar - 0x30D;
@ -2976,14 +2972,14 @@ void Message_Decode(PlayState* play) {
loadChar = true; loadChar = true;
} }
if (loadChar) { if (loadChar) {
Font_LoadChar(play, digits[i] + 0x824F, charTexIndex); Font_LoadChar(play, digits[i] + '', charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + '';
decodedBufPos++; decodedBufPos++;
spC0 += 16.0f * msgCtx->textCharScale; spC0 += 16.0f * msgCtx->textCharScale;
} }
} }
Message_LoadChar(play, 0x94AD, &charTexIndex, &spC0, decodedBufPos); Message_LoadChar(play, '', &charTexIndex, &spC0, decodedBufPos);
} else if (curChar == 0x1F) { } else if (curChar == 0x1F) {
decodedBufPos--; decodedBufPos--;
for (i = 0; i < font->msgBuf.wchar[msgCtx->msgBufPos + 1]; i++) { for (i = 0; i < font->msgBuf.wchar[msgCtx->msgBufPos + 1]; i++) {
@ -3020,19 +3016,19 @@ void Message_Decode(PlayState* play) {
} else if ((curChar != 0x20) && ((curChar < 0x2000) || (curChar >= 0x2009))) { } else if ((curChar != 0x20) && ((curChar < 0x2000) || (curChar >= 0x2009))) {
Font_LoadChar(play, curChar, charTexIndex); Font_LoadChar(play, curChar, charTexIndex);
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
if ((curChar == 0x8169) || (curChar == 0x8175)) { if ((curChar == '') || (curChar == '')) {
spC0 += 10.0f * msgCtx->textCharScale; spC0 += 10.0f * msgCtx->textCharScale;
} else if (curChar == 0x8145) { } else if (curChar == '') {
spC0 += (12.0f * msgCtx->textCharScale); spC0 += (12.0f * msgCtx->textCharScale);
} else if ((curChar == 0x8148) || (curChar == 0x8149)) { } else if ((curChar == '') || (curChar == '')) {
spC0 += 14.0f * msgCtx->textCharScale; spC0 += 14.0f * msgCtx->textCharScale;
} else if (curChar == 0x8144) { } else if (curChar == '') {
spC0 += 8.0f * msgCtx->textCharScale; spC0 += 8.0f * msgCtx->textCharScale;
} else if ((curChar == 0x816A) || (curChar == 0x8176)) { } else if ((curChar == '') || (curChar == '')) {
spC0 += 10.0f * msgCtx->textCharScale; spC0 += 10.0f * msgCtx->textCharScale;
} else if ((curChar == 0x8141) || (curChar == 0x8142) || (curChar == 0x8168)) { } else if ((curChar == '') || (curChar == '') || (curChar == '')) {
spC0 += 12.0f * msgCtx->textCharScale; spC0 += 12.0f * msgCtx->textCharScale;
} else if (curChar == 0x8194) { } else if (curChar == '') {
spC0 += 14.0f * msgCtx->textCharScale; spC0 += 14.0f * msgCtx->textCharScale;
} else { } else {
spC0 += 16.0f * msgCtx->textCharScale; spC0 += 16.0f * msgCtx->textCharScale;
@ -3603,7 +3599,7 @@ void Message_DisplayOcarinaStaffImpl(PlayState* play, u16 ocarinaAction) {
} }
for (j = 0, k = 0; j < 48; j++, k += FONT_CHAR_TEX_SIZE) { for (j = 0, k = 0; j < 48; j++, k += FONT_CHAR_TEX_SIZE) {
Font_LoadChar(play, 0x8140, k); Font_LoadChar(play, ' ', k);
}; };
msgCtx->stateTimer = 3; msgCtx->stateTimer = 3;
@ -4218,7 +4214,7 @@ void Message_DrawMain(PlayState* play, Gfx** gfxP) {
case MSGMODE_TEXT_CONTINUING: case MSGMODE_TEXT_CONTINUING:
if (msgCtx->stateTimer == 1) { if (msgCtx->stateTimer == 1) {
for (i = 0, j = 0; i < 48; i++, j += FONT_CHAR_TEX_SIZE) { for (i = 0, j = 0; i < 48; i++, j += FONT_CHAR_TEX_SIZE) {
Font_LoadChar(play, 0x8140, j); Font_LoadChar(play, ' ', j);
} }
Message_DrawText(play, &gfx); Message_DrawText(play, &gfx);
} else { } else {

View File

@ -867,23 +867,24 @@ void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) {
default: default:
switch (character) { switch (character) {
case 0x8169: case '':
case 0x8175: case '':
msgCtx->textPosX -= TRUNCF_BINANG(6.0f * msgCtx->textCharScale); msgCtx->textPosX -= TRUNCF_BINANG(6.0f * msgCtx->textCharScale);
break; break;
case 0x8145: case '':
msgCtx->textPosX -= TRUNCF_BINANG(3.0f * msgCtx->textCharScale); msgCtx->textPosX -= TRUNCF_BINANG(3.0f * msgCtx->textCharScale);
break; break;
case 0x8148: case '':
case 0x8149: case '':
msgCtx->textPosX -= TRUNCF_BINANG(2.0f * msgCtx->textCharScale); msgCtx->textPosX -= TRUNCF_BINANG(2.0f * msgCtx->textCharScale);
break; break;
default: default:
break; break;
} }
if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && ((i + 1) == msgCtx->textDrawPos)) { if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && ((i + 1) == msgCtx->textDrawPos)) {
Audio_PlaySfx(NA_SE_NONE); Audio_PlaySfx(NA_SE_NONE);
} }
@ -907,28 +908,27 @@ void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) {
} }
charTexIndex += FONT_CHAR_TEX_SIZE; charTexIndex += FONT_CHAR_TEX_SIZE;
//! @TODO: u8 character but > 0x255 cases
switch (character) { switch (character) {
case 0x8144: case '':
msgCtx->textPosX += TRUNCF_BINANG(8.0f * msgCtx->textCharScale); msgCtx->textPosX += TRUNCF_BINANG(8.0f * msgCtx->textCharScale);
break; break;
case 0x816A: case '':
case 0x8176: case '':
msgCtx->textPosX += TRUNCF_BINANG(10.0f * msgCtx->textCharScale); msgCtx->textPosX += TRUNCF_BINANG(10.0f * msgCtx->textCharScale);
break; break;
case 0x8141: case '':
case 0x8142: case '':
case 0x8168: case '':
msgCtx->textPosX += TRUNCF_BINANG(12.0f * msgCtx->textCharScale); msgCtx->textPosX += TRUNCF_BINANG(12.0f * msgCtx->textCharScale);
break; break;
case 0x8194: case '':
msgCtx->textPosX += TRUNCF_BINANG(14.0f * msgCtx->textCharScale); msgCtx->textPosX += TRUNCF_BINANG(14.0f * msgCtx->textCharScale);
break; break;
case 0x8145: case '':
msgCtx->textPosX += TRUNCF_BINANG(15.0f * msgCtx->textCharScale); msgCtx->textPosX += TRUNCF_BINANG(15.0f * msgCtx->textCharScale);
break; break;

View File

@ -5,90 +5,83 @@
*/ */
#include "PR/controller.h" #include "PR/controller.h"
// TODO: SJIS support
s32 osVoiceCheckWord(u8* word) { s32 osVoiceCheckWord(u8* word) {
s32 i; s32 i;
s32 errorCode = 0; s32 errorCode = 0;
u16 curSyllable; u16 curSyllable;
u16 prevSyllable = 0; u16 prevSyllable = '\0';
for (i = 0; word[i] != 0; i += 2) { for (i = 0; word[i] != 0; i += 2) {
curSyllable = (word[i] << 8) + word[i + 1]; curSyllable = (word[i] << 8) + word[i + 1];
if (((curSyllable != 0x815B) && (curSyllable < 0x829F)) || if (((curSyllable != '') && (curSyllable < '')) || ((curSyllable > '') && (curSyllable < '')) ||
((curSyllable >= 0x82F2) && (curSyllable < 0x8340)) || (curSyllable == 0x837F) || (curSyllable >= 0x8397)) { (curSyllable == 0x837F) || (curSyllable > '')) {
errorCode = CONT_ERR_VOICE_WORD; errorCode = CONT_ERR_VOICE_WORD;
} else if ((i == 0) && ((curSyllable == 0x815B) || (curSyllable == 0x82F1) || (curSyllable == 0x82C1) || } else if ((i == 0) && ((curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x82EC) || (curSyllable == 0x8393) || (curSyllable == 0x8362) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x838E) || (curSyllable == 0x8395) || (curSyllable == 0x8396))) { (curSyllable == '') || (curSyllable == '') || (curSyllable == ''))) {
errorCode = CONT_ERR_VOICE_WORD; errorCode = CONT_ERR_VOICE_WORD;
} else if (((curSyllable == 0x829F) || (curSyllable == 0x8340)) && (prevSyllable != 0x82D3) && } else if (((curSyllable == '') || (curSyllable == '')) && (prevSyllable != '') &&
(prevSyllable != 0x8374) && (prevSyllable != 0x8394)) { (prevSyllable != '') && (prevSyllable != '')) {
errorCode = CONT_ERR_VOICE_WORD; errorCode = CONT_ERR_VOICE_WORD;
} else if (((curSyllable == 0x82A1) || (curSyllable == 0x8342)) && (prevSyllable != 0x82A4) && } else if (((curSyllable == '') || (curSyllable == '')) && (prevSyllable != '') &&
(prevSyllable != 0x82C4) && (prevSyllable != 0x82C5) && (prevSyllable != 0x82D3) && (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '') &&
(prevSyllable != 0x8345) && (prevSyllable != 0x8365) && (prevSyllable != 0x8366) && (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '') &&
(prevSyllable != 0x8374) && (prevSyllable != 0x8394)) { (prevSyllable != '') && (prevSyllable != '')) {
errorCode = CONT_ERR_VOICE_WORD; errorCode = CONT_ERR_VOICE_WORD;
} else if (((curSyllable == 0x82A3) || (curSyllable == 0x8344)) && (prevSyllable != 0x82C6) && } else if (((curSyllable == '') || (curSyllable == '')) && (prevSyllable != '') &&
(prevSyllable != 0x82C7) && (prevSyllable != 0x82D3) && (prevSyllable != 0x8367) && (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '') &&
(prevSyllable != 0x8368) && (prevSyllable != 0x8374) && (prevSyllable != 0x8394)) { (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '')) {
errorCode = CONT_ERR_VOICE_WORD; errorCode = CONT_ERR_VOICE_WORD;
} else if (((curSyllable == 0x82A5) || (curSyllable == 0x8346)) && (prevSyllable != 0x82A4) && } else if (((curSyllable == '') || (curSyllable == '')) && (prevSyllable != '') &&
(prevSyllable != 0x82B5) && (prevSyllable != 0x82B6) && (prevSyllable != 0x82BF) && (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '') &&
(prevSyllable != 0x82C0) && (prevSyllable != 0x82C2) && (prevSyllable != 0x82D3) && (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '') &&
(prevSyllable != 0x8345) && (prevSyllable != 0x8356) && (prevSyllable != 0x8357) && (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '') &&
(prevSyllable != 0x8360) && (prevSyllable != 0x8361) && (prevSyllable != 0x8363) && (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '') &&
(prevSyllable != 0x8374) && (prevSyllable != 0x8394)) { (prevSyllable != '') && (prevSyllable != '')) {
errorCode = CONT_ERR_VOICE_WORD; errorCode = CONT_ERR_VOICE_WORD;
} else if (((curSyllable == 0x82A7) || (curSyllable == 0x8348)) && (prevSyllable != 0x82A4) && } else if (((curSyllable == '') || (curSyllable == '')) && (prevSyllable != '') &&
(prevSyllable != 0x82D3) && (prevSyllable != 0x8345) && (prevSyllable != 0x8374) && (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '') &&
(prevSyllable != 0x8394)) { (prevSyllable != '')) {
errorCode = CONT_ERR_VOICE_WORD; errorCode = CONT_ERR_VOICE_WORD;
} else if (((curSyllable == 0x82E1) || (curSyllable == 0x82E3) || (curSyllable == 0x82E5) || } else if (((curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x8383) || (curSyllable == 0x8385) || (curSyllable == 0x8387)) && (curSyllable == '') || (curSyllable == '')) &&
(prevSyllable != 0x82AB) && (prevSyllable != 0x82B5) && (prevSyllable != 0x82BF) && (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '') &&
(prevSyllable != 0x82C9) && (prevSyllable != 0x82D0) && (prevSyllable != 0x82DD) && (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '') &&
(prevSyllable != 0x82E8) && (prevSyllable != 0x82AC) && (prevSyllable != 0x82B6) && (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '') &&
(prevSyllable != 0x82C0) && (prevSyllable != 0x82D1) && (prevSyllable != 0x82D2) && (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '') &&
(prevSyllable != 0x834C) && (prevSyllable != 0x8356) && (prevSyllable != 0x8360) && (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '') &&
(prevSyllable != 0x836A) && (prevSyllable != 0x8371) && (prevSyllable != 0x837E) && (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '') &&
(prevSyllable != 0x838A) && (prevSyllable != 0x834D) && (prevSyllable != 0x8357) && (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '') &&
(prevSyllable != 0x8361) && (prevSyllable != 0x8372) && (prevSyllable != 0x8373) && (prevSyllable != '') && (prevSyllable != '') && (prevSyllable != '') &&
(prevSyllable != 0x8394)) { (prevSyllable != '')) {
errorCode = CONT_ERR_VOICE_WORD; errorCode = CONT_ERR_VOICE_WORD;
} else if ((curSyllable == 0x815B) && ((prevSyllable == 0x82F1) || (prevSyllable == 0x82C1) || } else if ((curSyllable == '') && ((prevSyllable == '') || (prevSyllable == '') ||
(prevSyllable == 0x8393) || (prevSyllable == 0x8362))) { (prevSyllable == '') || (prevSyllable == ''))) {
errorCode = CONT_ERR_VOICE_WORD; errorCode = CONT_ERR_VOICE_WORD;
} else if (((curSyllable == 0x82F1) || (curSyllable == 0x8393)) && } else if (((curSyllable == '') || (curSyllable == '')) &&
((prevSyllable == 0x82F1) || (prevSyllable == 0x8393))) { ((prevSyllable == '') || (prevSyllable == ''))) {
errorCode = CONT_ERR_VOICE_WORD; errorCode = CONT_ERR_VOICE_WORD;
} else if (((prevSyllable == 0x82C1) || (prevSyllable == 0x8362)) && } else if (((prevSyllable == '') || (prevSyllable == '')) &&
((curSyllable == 0x815B) || (curSyllable == 0x82A0) || (curSyllable == 0x82A2) || ((curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x82A4) || (curSyllable == 0x82A6) || (curSyllable == 0x82A8) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x82C8) || (curSyllable == 0x82C9) || (curSyllable == 0x82CA) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x82CB) || (curSyllable == 0x82CC) || (curSyllable == 0x82DC) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x82DD) || (curSyllable == 0x82DE) || (curSyllable == 0x82DF) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x82E0) || (curSyllable == 0x82E2) || (curSyllable == 0x82E4) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x82E6) || (curSyllable == 0x82E7) || (curSyllable == 0x82E8) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x82E9) || (curSyllable == 0x82EA) || (curSyllable == 0x82EB) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x82ED) || (curSyllable == 0x82EE) || (curSyllable == 0x82EF) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x82F0) || (curSyllable == 0x82F1) || (curSyllable == 0x829F) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x82A1) || (curSyllable == 0x82A3) || (curSyllable == 0x82A5) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x82A7) || (curSyllable == 0x82E1) || (curSyllable == 0x82E3) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x82E5) || (curSyllable == 0x82C1) || (curSyllable == 0x82EC) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x8341) || (curSyllable == 0x8343) || (curSyllable == 0x8345) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x8347) || (curSyllable == 0x8349) || (curSyllable == 0x8369) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x836A) || (curSyllable == 0x836B) || (curSyllable == 0x836C) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x836D) || (curSyllable == 0x837D) || (curSyllable == 0x837E) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x8380) || (curSyllable == 0x8381) || (curSyllable == 0x8382) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x8384) || (curSyllable == 0x8386) || (curSyllable == 0x8388) || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') || (curSyllable == '') ||
(curSyllable == 0x8389) || (curSyllable == 0x838A) || (curSyllable == 0x838B) || (curSyllable == ''))) {
(curSyllable == 0x838C) || (curSyllable == 0x838D) || (curSyllable == 0x838F) ||
(curSyllable == 0x8390) || (curSyllable == 0x8391) || (curSyllable == 0x8392) ||
(curSyllable == 0x8393) || (curSyllable == 0x8340) || (curSyllable == 0x8342) ||
(curSyllable == 0x8344) || (curSyllable == 0x8346) || (curSyllable == 0x8348) ||
(curSyllable == 0x8383) || (curSyllable == 0x8385) || (curSyllable == 0x8387) ||
(curSyllable == 0x8362) || (curSyllable == 0x838E))) {
errorCode = CONT_ERR_VOICE_WORD; errorCode = CONT_ERR_VOICE_WORD;
} }
@ -99,7 +92,7 @@ s32 osVoiceCheckWord(u8* word) {
prevSyllable = curSyllable; prevSyllable = curSyllable;
} }
if ((curSyllable == 0x82C1) || (curSyllable == 0x8362)) { if ((curSyllable == '') || (curSyllable == '')) {
errorCode = CONT_ERR_VOICE_WORD; errorCode = CONT_ERR_VOICE_WORD;
} }

View File

@ -2843,7 +2843,7 @@
0x8014ADBC:("Message_DrawTextDefault",), 0x8014ADBC:("Message_DrawTextDefault",),
0x8014C70C:("Message_LoadItemIcon",), 0x8014C70C:("Message_LoadItemIcon",),
0x8014CC14:("Message_LoadChar",), 0x8014CC14:("Message_LoadChar",),
0x8014CCB4:("func_8014CCB4",), 0x8014CCB4:("Message_LoadRupeesJPN",),
0x8014CDF0:("Message_GetTimerDigits",), 0x8014CDF0:("Message_GetTimerDigits",),
0x8014CFDC:("Message_DecodeHeader",), 0x8014CFDC:("Message_DecodeHeader",),
0x8014D304:("Message_LoadTime",), 0x8014D304:("Message_LoadTime",),

View File

@ -2011,7 +2011,7 @@
0x801D0250:("sOwlWarpTextLengthJPN","UNK_TYPE1","",0x1), 0x801D0250:("sOwlWarpTextLengthJPN","UNK_TYPE1","",0x1),
0x801D0268:("sTimeSpeedTextJPN","UNK_TYPE2","",0x2), 0x801D0268:("sTimeSpeedTextJPN","UNK_TYPE2","",0x2),
0x801D027C:("sMaskCodeColorCmdJPN","UNK_TYPE1","",0x1), 0x801D027C:("sMaskCodeColorCmdJPN","UNK_TYPE1","",0x1),
0x801D0284:("D_801D0284","UNK_TYPE1","",0x1), 0x801D0284:("sMaskCodeTextJPN","UNK_TYPE1","",0x1),
0x801D028C:("D_801D028C","UNK_TYPE1","",0x1), 0x801D028C:("D_801D028C","UNK_TYPE1","",0x1),
0x801D02C0:("sOcarinaSongFlagsMap","UNK_TYPE1","",0x1), 0x801D02C0:("sOcarinaSongFlagsMap","UNK_TYPE1","",0x1),
0x801D02D8:("sOcarinaEffectActorIds","UNK_TYPE1","",0x1), 0x801D02D8:("sOcarinaEffectActorIds","UNK_TYPE1","",0x1),

35
tools/shiftjis_conv.py Executable file
View File

@ -0,0 +1,35 @@
#!/usr/bin/env python3
import argparse
import sys
def sjis_process(buf, outfile):
skipTimer = 0
for i in range(len(buf)):
if skipTimer > 0:
skipTimer -= 1
continue
if buf[i] == "'" and buf[i+2] == "'" and ord(buf[i + 1]) > 0xFF:
echar = buf[i+1].encode("shift-jis")
hchar = int(echar.hex(), 16)
outfile.write(f"0x{hchar:04X}")
skipTimer = 2
else:
outfile.write(buf[i])
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Takes a file and converts shift-jis character literals to their hex value')
parser.add_argument('infile', type=str, help='input file to process')
parser.add_argument('-o', '--outfile', help='output file to write to. None for stdout')
args = parser.parse_args()
with open(args.infile) as f:
fb = f.read()
if args.outfile is None:
sjis_process(fb, sys.stdout)
else:
with open(args.outfile, "w+") as outf:
sjis_process(fb, outf)

View File

@ -2357,7 +2357,7 @@ asm/non_matchings/code/z_message/Message_HandleOcarina.s,Message_HandleOcarina,0
asm/non_matchings/code/z_message/Message_DrawTextDefault.s,Message_DrawTextDefault,0x8014ADBC,0x654 asm/non_matchings/code/z_message/Message_DrawTextDefault.s,Message_DrawTextDefault,0x8014ADBC,0x654
asm/non_matchings/code/z_message/Message_LoadItemIcon.s,Message_LoadItemIcon,0x8014C70C,0x142 asm/non_matchings/code/z_message/Message_LoadItemIcon.s,Message_LoadItemIcon,0x8014C70C,0x142
asm/non_matchings/code/z_message/Message_LoadChar.s,Message_LoadChar,0x8014CC14,0x28 asm/non_matchings/code/z_message/Message_LoadChar.s,Message_LoadChar,0x8014CC14,0x28
asm/non_matchings/code/z_message/func_8014CCB4.s,func_8014CCB4,0x8014CCB4,0x4F asm/non_matchings/code/z_message/Message_LoadRupeesJPN.s,Message_LoadRupeesJPN,0x8014CCB4,0x4F
asm/non_matchings/code/z_message/Message_GetTimerDigits.s,Message_GetTimerDigits,0x8014CDF0,0x7B asm/non_matchings/code/z_message/Message_GetTimerDigits.s,Message_GetTimerDigits,0x8014CDF0,0x7B
asm/non_matchings/code/z_message/Message_DecodeHeader.s,Message_DecodeHeader,0x8014CFDC,0xCA asm/non_matchings/code/z_message/Message_DecodeHeader.s,Message_DecodeHeader,0x8014CFDC,0xCA
asm/non_matchings/code/z_message/Message_LoadTime.s,Message_LoadTime,0x8014D304,0xCA asm/non_matchings/code/z_message/Message_LoadTime.s,Message_LoadTime,0x8014D304,0xCA

1 asm/non_matchings/code/z_en_a_keep/EnAObj_Init.s EnAObj_Init 0x800A5AC0 0x2B
2357 asm/non_matchings/code/z_message/Message_DrawTextDefault.s Message_DrawTextDefault 0x8014ADBC 0x654
2358 asm/non_matchings/code/z_message/Message_LoadItemIcon.s Message_LoadItemIcon 0x8014C70C 0x142
2359 asm/non_matchings/code/z_message/Message_LoadChar.s Message_LoadChar 0x8014CC14 0x28
2360 asm/non_matchings/code/z_message/func_8014CCB4.s asm/non_matchings/code/z_message/Message_LoadRupeesJPN.s func_8014CCB4 Message_LoadRupeesJPN 0x8014CCB4 0x4F
2361 asm/non_matchings/code/z_message/Message_GetTimerDigits.s Message_GetTimerDigits 0x8014CDF0 0x7B
2362 asm/non_matchings/code/z_message/Message_DecodeHeader.s Message_DecodeHeader 0x8014CFDC 0xCA
2363 asm/non_matchings/code/z_message/Message_LoadTime.s Message_LoadTime 0x8014D304 0xCA