mirror of
https://github.com/zeldaret/mm.git
synced 2026-05-24 07:10:44 -04:00
f92c4e6b02
* import time docs * cleanup * fix display list * missed one * three-day events * PR Suggestions and cleanup * adjust comment * more macros * PR Suggestions * move InterfaceContext
296 lines
8.3 KiB
C
296 lines
8.3 KiB
C
#include "global.h"
|
|
#include "message_data_static.h"
|
|
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
|
|
|
|
#if 0
|
|
|
|
//fontWidth
|
|
extern f32 D_801D0470[159];
|
|
|
|
//rupeesTextLocalization
|
|
u8 D_801D06F0[4][8] = { { "rupee(s)" }, //EN
|
|
{ "rubin(e)" }, //DE
|
|
{ "rubis" }, //FR
|
|
{ "rupia(s)" } //SPA
|
|
};
|
|
|
|
// rupeesTextLength
|
|
u8 D_801D0710[4] = {8,8,5,8};
|
|
|
|
// sOwlWarpText
|
|
char D_801D0714[OWL_WARP_MAX][16] = {
|
|
"Great Bay Coast", // OWL_WARP_GREAT_BAY_COAST
|
|
"Zora Cape", // OWL_WARP_ZORA_CAPE
|
|
"Snowhead", // OWL_WARP_SNOWHEAD
|
|
"Mountain Village", // OWL_WARP_MOUNTAIN_VILLAGE
|
|
"Clock Town", // OWL_WARP_CLOCK_TOWN
|
|
"Milk Road", // OWL_WARP_MILK_ROAD
|
|
"Woodfall", // OWL_WARP_WOODFALL
|
|
"Southern Swamp", // OWL_WARP_SOUTHERN_SWAMP
|
|
"Ikana Canyon", // OWL_WARP_IKANA_CANYON
|
|
"Stone Tower", // OWL_WARP_STONE_TOWER
|
|
"Entrance", // OWL_WARP_ENTRANCE
|
|
};
|
|
|
|
// sOwlWarpTextLength
|
|
s16 D_801D07C4[OWL_WARP_MAX] = {
|
|
15, // OWL_WARP_GREAT_BAY_COAST
|
|
9, // OWL_WARP_ZORA_CAPE
|
|
8, // OWL_WARP_SNOWHEAD
|
|
16, // OWL_WARP_MOUNTAIN_VILLAGE
|
|
10, // OWL_WARP_CLOCK_TOWN
|
|
9, // OWL_WARP_MILK_ROAD
|
|
8, // OWL_WARP_WOODFALL
|
|
14, // OWL_WARP_SOUTHERN_SWAMP
|
|
12, // OWL_WARP_IKANA_CANYON
|
|
11, // OWL_WARP_STONE_TOWER
|
|
8, // OWL_WARP_ENTRANCE
|
|
};
|
|
|
|
#endif
|
|
|
|
extern f32 D_801D0470[159];
|
|
extern u8 D_801D06F0[4][8];
|
|
extern u8 D_801D0710[4];
|
|
extern u8 D_801D0714[OWL_WARP_MAX][16];
|
|
extern s16 D_801D07C4[OWL_WARP_MAX];
|
|
|
|
void Message_FindMessageNES(PlayState* play, u16 textId) {
|
|
MessageContext* msgCtx = &play->msgCtx;
|
|
Font* font = &msgCtx->font;
|
|
MessageTableEntry* msgEntry = msgCtx->messageEntryTableNes;
|
|
const char* segment = msgEntry->segment;
|
|
const char* foundSegment;
|
|
const char* nextSegment;
|
|
|
|
while (msgEntry->textId != 0xFFFF) {
|
|
if (msgEntry->textId == textId) {
|
|
foundSegment = msgEntry->segment;
|
|
msgEntry++;
|
|
nextSegment = msgEntry->segment;
|
|
font->messageStart = foundSegment - segment;
|
|
font->messageEnd = nextSegment - foundSegment;
|
|
return;
|
|
}
|
|
msgEntry++;
|
|
}
|
|
|
|
msgEntry = msgCtx->messageEntryTableNes;
|
|
foundSegment = msgEntry->segment;
|
|
msgEntry++;
|
|
nextSegment = msgEntry->segment;
|
|
font->messageStart = foundSegment - segment;
|
|
font->messageEnd = nextSegment - foundSegment;
|
|
}
|
|
|
|
void Message_LoadCharNES(PlayState* play, u8 codePointIndex, s32* offset, f32* arg3, s16 decodedBufPos) {
|
|
MessageContext* msgCtx = &play->msgCtx;
|
|
s32 temp1 = *offset;
|
|
f32 temp2 = *arg3;
|
|
|
|
Font_LoadCharNES(play, codePointIndex, temp1);
|
|
msgCtx->decodedBuffer.schar[decodedBufPos] = codePointIndex;
|
|
temp1 += FONT_CHAR_TEX_SIZE;
|
|
temp2 += (16.0f * msgCtx->unk12098);
|
|
*offset = temp1;
|
|
*arg3 = temp2;
|
|
}
|
|
|
|
void Message_LoadPluralRupeesNES(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) {
|
|
MessageContext* msgCtx = &play->msgCtx;
|
|
s16 p = *decodedBufPos;
|
|
s32 o = *offset;
|
|
f32 f = *arg3;
|
|
|
|
msgCtx->decodedBuffer.schar[p] = 0x20;
|
|
p++;
|
|
Font_LoadCharNES(play, 'R', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'R';
|
|
p++;
|
|
Font_LoadCharNES(play, 'u', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'u';
|
|
p++;
|
|
Font_LoadCharNES(play, 'p', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'p';
|
|
p++;
|
|
Font_LoadCharNES(play, 'e', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'e';
|
|
p++;
|
|
Font_LoadCharNES(play, 'e', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'e';
|
|
p++;
|
|
Font_LoadCharNES(play, 's', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 's';
|
|
|
|
f += 16.0f * msgCtx->unk12098 * 6.0f;
|
|
*decodedBufPos = p;
|
|
*offset = o;
|
|
*arg3 = f;
|
|
}
|
|
|
|
void Message_LoadLocalizedRupeesNES(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) {
|
|
MessageContext* msgCtx = &play->msgCtx;
|
|
s16 p = *decodedBufPos;
|
|
s32 o = *offset;
|
|
f32 f = *arg3;
|
|
u8 j;
|
|
|
|
msgCtx->decodedBuffer.schar[p] = ' ';
|
|
p++;
|
|
|
|
for (j = 0; j < D_801D0710[gSaveContext.options.language - 1]; j++) {
|
|
Font_LoadCharNES(play, D_801D06F0[gSaveContext.options.language - 1][j], o);
|
|
msgCtx->decodedBuffer.schar[p] = D_801D06F0[gSaveContext.options.language - 1][j];
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
p++;
|
|
}
|
|
|
|
p--;
|
|
f += 16.0f * msgCtx->unk12098 * (D_801D0710[gSaveContext.options.language - 1] + 1);
|
|
*decodedBufPos = p;
|
|
*offset = o;
|
|
*arg3 = f;
|
|
}
|
|
|
|
void Message_LoadRupeesNES(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3, s16 singular) {
|
|
MessageContext* msgCtx = &play->msgCtx;
|
|
s16 p = *decodedBufPos;
|
|
s32 o = *offset;
|
|
f32 f = *arg3;
|
|
|
|
msgCtx->decodedBuffer.schar[p] = ' ';
|
|
p++;
|
|
Font_LoadCharNES(play, 'R', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'R';
|
|
p++;
|
|
Font_LoadCharNES(play, 'u', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'u';
|
|
p++;
|
|
Font_LoadCharNES(play, 'p', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'p';
|
|
p++;
|
|
Font_LoadCharNES(play, 'e', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'e';
|
|
p++;
|
|
Font_LoadCharNES(play, 'e', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'e';
|
|
|
|
if (singular != 1) {
|
|
p++;
|
|
Font_LoadCharNES(play, 's', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 's';
|
|
f += 16.0f * msgCtx->unk12098 * 6.0f;
|
|
} else {
|
|
f += 16.0f * msgCtx->unk12098 * 5.0f;
|
|
}
|
|
|
|
*decodedBufPos = p;
|
|
*offset = o;
|
|
*arg3 = f;
|
|
}
|
|
|
|
void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16* decodedBufPos) {
|
|
MessageContext* msgCtx = &play->msgCtx;
|
|
s16 p = *decodedBufPos;
|
|
s32 o = *offset;
|
|
f32 f = *arg3;
|
|
u32 timeLeft;
|
|
s16 digits[4];
|
|
f32 timeLeftInMinutes;
|
|
s16 i;
|
|
|
|
if (arg1 == 0xCF) {
|
|
timeLeft = TIME_UNTIL_MOON_CRASH;
|
|
} else {
|
|
timeLeft = TIME_UNTIL_NEW_DAY;
|
|
}
|
|
|
|
timeLeftInMinutes = TIME_TO_MINUTES_F(timeLeft);
|
|
|
|
digits[0] = 0;
|
|
digits[1] = (timeLeftInMinutes / 60.0f);
|
|
while (digits[1] >= 10) {
|
|
digits[0]++;
|
|
digits[1] -= 10;
|
|
}
|
|
|
|
digits[2] = 0;
|
|
digits[3] = (s32)timeLeftInMinutes % 60;
|
|
while (digits[3] >= 10) {
|
|
digits[2]++;
|
|
digits[3] -= 10;
|
|
}
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
Font_LoadCharNES(play, digits[i] + '0', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = digits[i] + '0';
|
|
p++;
|
|
if (i == 1) {
|
|
Font_LoadCharNES(play, ':', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = ':';
|
|
p++;
|
|
}
|
|
}
|
|
|
|
f += 5.0f * (16.0f * msgCtx->unk12098);
|
|
*decodedBufPos = p - 1;
|
|
*offset = o;
|
|
*arg3 = f;
|
|
}
|
|
|
|
void Message_LoadOwlWarpTextNES(PlayState* play, s32* offset, f32* arg2, s16* decodedBufPos) {
|
|
MessageContext* msgCtx = &play->msgCtx;
|
|
s16 p = *decodedBufPos;
|
|
s32 o = *offset;
|
|
f32 f = *arg2;
|
|
s16 i;
|
|
u8 currentChar;
|
|
s16 owlWarpId;
|
|
s16 stringLimit;
|
|
|
|
if (func_8010A0A4(play) || (play->sceneId == SCENE_SECOM)) {
|
|
owlWarpId = OWL_WARP_ENTRANCE;
|
|
} else {
|
|
owlWarpId = play->pauseCtx.cursorPoint[PAUSE_WORLD_MAP];
|
|
}
|
|
stringLimit = D_801D07C4[owlWarpId];
|
|
|
|
for (i = 0; i < stringLimit; i++) {
|
|
msgCtx->decodedBuffer.schar[p] = D_801D0714[owlWarpId][i];
|
|
currentChar = msgCtx->decodedBuffer.schar[p];
|
|
if (currentChar != ' ') {
|
|
Font_LoadCharNES(play, D_801D0714[owlWarpId][i], o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
}
|
|
currentChar = msgCtx->decodedBuffer.schar[p];
|
|
p++;
|
|
f += (D_801D0470[currentChar - ' '] * msgCtx->unk12098);
|
|
}
|
|
|
|
p--;
|
|
f += (stringLimit - 1) * (16.0f * msgCtx->unk12098);
|
|
*decodedBufPos = p;
|
|
*offset = o;
|
|
*arg2 = f;
|
|
}
|
|
|
|
#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_nes/func_80159438.s")
|
|
|
|
#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_nes/func_8015966C.s")
|
|
|
|
#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_nes/func_8015B198.s")
|