mirror of https://github.com/zeldaret/mm.git
287 lines
8.4 KiB
C
287 lines
8.4 KiB
C
#include "global.h"
|
|
#include "message_data_static.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};
|
|
|
|
//TextArea
|
|
char D_801D0714[11][16] = {
|
|
"Great Bay Coast",
|
|
"Zora Cape",
|
|
"Snowhead",
|
|
"Mountain Village",
|
|
"Clock Town",
|
|
"Milk Road",
|
|
"Woodfall",
|
|
"Southern Swamp",
|
|
"Ikana Canyon",
|
|
"Stone Tower",
|
|
"Entrance"
|
|
};
|
|
|
|
//TextAreaLength
|
|
s16 D_801D07C4[11] = {15,9,8,16,10,9,8,14,12,11,8};
|
|
|
|
#endif
|
|
|
|
extern f32 D_801D0470[159];
|
|
extern u8 D_801D06F0[4][8];
|
|
extern u8 D_801D0710[4];
|
|
extern u8 D_801D0714[11][16];
|
|
extern s16 D_801D07C4[11];
|
|
|
|
void Message_FindMessageNES(GlobalContext* globalCtx, u16 textId) {
|
|
MessageContext* msgCtx = &globalCtx->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(GlobalContext* globalCtx, u8 codePointIndex, s32* offset, f32* arg3, s16 decodedBufPos) {
|
|
MessageContext* msgCtx = &globalCtx->msgCtx;
|
|
s32 temp1 = *offset;
|
|
f32 temp2 = *arg3;
|
|
|
|
Font_LoadCharNES(globalCtx, codePointIndex, temp1);
|
|
msgCtx->decodedBuffer.schar[decodedBufPos] = codePointIndex;
|
|
temp1 += FONT_CHAR_TEX_SIZE;
|
|
temp2 += (16.0f * msgCtx->unk12098);
|
|
*offset = temp1;
|
|
*arg3 = temp2;
|
|
}
|
|
|
|
void Message_LoadPluralRupeesNES(GlobalContext* globalCtx, s16* decodedBufPos, s32* offset, f32* arg3) {
|
|
MessageContext* msgCtx = &globalCtx->msgCtx;
|
|
s16 p = *decodedBufPos;
|
|
s32 o = *offset;
|
|
f32 f = *arg3;
|
|
|
|
msgCtx->decodedBuffer.schar[p] = 0x20;
|
|
p++;
|
|
Font_LoadCharNES(globalCtx, 'R', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'R';
|
|
p++;
|
|
Font_LoadCharNES(globalCtx, 'u', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'u';
|
|
p++;
|
|
Font_LoadCharNES(globalCtx, 'p', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'p';
|
|
p++;
|
|
Font_LoadCharNES(globalCtx, 'e', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'e';
|
|
p++;
|
|
Font_LoadCharNES(globalCtx, 'e', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'e';
|
|
p++;
|
|
Font_LoadCharNES(globalCtx, '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(GlobalContext* globalCtx, s16* decodedBufPos, s32* offset, f32* arg3) {
|
|
MessageContext* msgCtx = &globalCtx->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(globalCtx, 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(GlobalContext* globalCtx, s16* decodedBufPos, s32* offset, f32* arg3, s16 singular) {
|
|
MessageContext* msgCtx = &globalCtx->msgCtx;
|
|
s16 p = *decodedBufPos;
|
|
s32 o = *offset;
|
|
f32 f = *arg3;
|
|
|
|
msgCtx->decodedBuffer.schar[p] = ' ';
|
|
p++;
|
|
Font_LoadCharNES(globalCtx, 'R', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'R';
|
|
p++;
|
|
Font_LoadCharNES(globalCtx, 'u', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'u';
|
|
p++;
|
|
Font_LoadCharNES(globalCtx, 'p', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'p';
|
|
p++;
|
|
Font_LoadCharNES(globalCtx, 'e', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'e';
|
|
p++;
|
|
Font_LoadCharNES(globalCtx, 'e', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = 'e';
|
|
|
|
if (singular != 1) {
|
|
p++;
|
|
Font_LoadCharNES(globalCtx, '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(GlobalContext* globalCtx, u8 arg1, s32* offset, f32* arg3, s16* decodedBufPos) {
|
|
MessageContext* msgCtx = &globalCtx->msgCtx;
|
|
s16 p = *decodedBufPos;
|
|
s32 o = *offset;
|
|
f32 f = *arg3;
|
|
u32 timeLeft;
|
|
s16 digits[4];
|
|
f32 timeLeftInMinutes;
|
|
s16 i;
|
|
|
|
if (arg1 == 0xCF) {
|
|
// Calculates the time left before the moon crashes.
|
|
// The day begins at CLOCK_TIME(6, 0) so it must be offset.
|
|
timeLeft = (4 - CURRENT_DAY) * DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0));
|
|
} else {
|
|
// Calculates the time left before a new day.
|
|
// The day begins at CLOCK_TIME(6, 0) so it must be offset.
|
|
timeLeft = DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0));
|
|
}
|
|
|
|
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(globalCtx, digits[i] + '0', o);
|
|
o += FONT_CHAR_TEX_SIZE;
|
|
msgCtx->decodedBuffer.schar[p] = digits[i] + '0';
|
|
p++;
|
|
if (i == 1) {
|
|
Font_LoadCharNES(globalCtx, ':', 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_LoadAreaTextNES(GlobalContext* globalCtx, s32* offset, f32* arg2, s16* decodedBufPos) {
|
|
MessageContext* msgCtx = &globalCtx->msgCtx;
|
|
s16 p = *decodedBufPos;
|
|
s32 o = *offset;
|
|
f32 f = *arg2;
|
|
s16 i;
|
|
u8 currentChar;
|
|
s16 currentArea;
|
|
s16 stringLimit;
|
|
|
|
if ((func_8010A0A4(globalCtx) != 0) || (globalCtx->sceneNum == SCENE_SECOM)) {
|
|
currentArea = 10;
|
|
} else {
|
|
currentArea = globalCtx->pauseCtx.unk_238[4];
|
|
}
|
|
stringLimit = D_801D07C4[currentArea];
|
|
|
|
for (i = 0; i < stringLimit; i++) {
|
|
msgCtx->decodedBuffer.schar[p] = D_801D0714[currentArea][i];
|
|
currentChar = msgCtx->decodedBuffer.schar[p];
|
|
if (currentChar != ' ') {
|
|
Font_LoadCharNES(globalCtx, D_801D0714[currentArea][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")
|