mirror of https://github.com/zeldaret/mm.git
				
				
				
			
		
			
				
	
	
		
			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")
 |