diff --git a/src/game/challenge.c b/src/game/challenge.c index 04124f063..ea5babd90 100644 --- a/src/game/challenge.c +++ b/src/game/challenge.c @@ -354,7 +354,6 @@ struct mpconfigfull *challengeLoadConfig(s32 confignum, u8 *buffer, s32 len) u8 buffer2[sizeof(struct mpstrings) + 40]; struct mpstrings *loadedstrings; s32 bank; - u32 language_id = langGetFileNumOffset(); extern struct mpconfig _mpconfigsSegmentRomStart[]; extern struct mpstrings _mpstringsESegmentRomStart; extern struct mpstrings _mpstringsJSegmentRomStart; @@ -385,7 +384,7 @@ struct mpconfigfull *challengeLoadConfig(s32 confignum, u8 *buffer, s32 len) mpconfig = dmaExecWithAutoAlign(buffer, (s32)&_mpconfigsSegmentRomStart[confignum], sizeof(struct mpconfig)); // Load mpstrings - bank = banks[language_id][0]; + bank = banks[0][0]; loadedstrings = dmaExecWithAutoAlign(buffer2, bank + confignum * sizeof(struct mpstrings), sizeof(struct mpstrings)); mpconfig->strings = *loadedstrings; diff --git a/src/game/game_1531a0.c b/src/game/game_1531a0.c index 2d9fb1092..3f6ce65ff 100644 --- a/src/game/game_1531a0.c +++ b/src/game/game_1531a0.c @@ -807,30 +807,11 @@ Gfx *text0f1552d4(Gfx *gdl, f32 x, f32 y, f32 widthscale, f32 heightscale, totalheight += lineheight; relx = 0; } - } else if (*text < 0x80) { + } else { gdl = text0f154f38(gdl, &relx, &chars[*text - 0x21], &chars[prevchar - 0x21], font, widthscale, heightscale, fx, fy); prevchar = *text; text += 1; - } else { - u16 codepoint = (text[0] & 0x7f) << 7 | (text[1] & 0x7f); - struct fontchar tmpchar = {0, 0, 12, 11}; - - if (1); - - if (codepoint & 0x2000) { - tmpchar.width = 15; - tmpchar.height = 16; - } - - if ((codepoint & 0x1fff) >= 0x3c8) { - codepoint = 2; - } - - tmpchar.index = codepoint + 0x80; - tmpchar.pixeldata = (void *) lang0f16e3fc(codepoint); - - text += 2; } } } @@ -1038,29 +1019,10 @@ Gfx *textRenderProjected(Gfx *gdl, s32 *x, s32 *y, char *text, struct fontchar * } *x = savedx; - } else if (*text < 0x80) { + } else { gdl = text0f15568c(gdl, x, y, &chars[*text - 0x21], &chars[prevchar - 0x21], font, savedx, savedy, width, height, arg9); prevchar = *text; text++; - } else { - u16 codepoint = ((*text & 0x7f) << 7) | (text[1] & 0x7f); - struct fontchar tmpchar = {0, 0, 12, 11}; - - if (codepoint & 0x2000) { - tmpchar.width = 15; - tmpchar.height = 16; - } - - if ((codepoint & 0x1fff) >= 0x3c8) { - codepoint = 2; - } - - tmpchar.index = codepoint + 0x80; - tmpchar.pixeldata = (void *)lang0f16e3fc(codepoint); - - gdl = text0f15568c(gdl, x, y, &tmpchar, &tmpchar, font, savedx, savedy, width, height, arg9); - - text += 2; } } } @@ -1236,30 +1198,11 @@ Gfx *textRender(Gfx *gdl, s32 *x, s32 *y, char *text, *y += lineheight; prevchar = 'H'; text++; - } else if (*text < 0x80) { + } else { gdl = textRenderChar(gdl, x, y, &chars[*text - 0x21], &chars[prevchar - 0x21], font, savedx, savedy, width * var8007fad0, height, arg10); prevchar = *text; text++; - } else { - u16 codepoint = ((*text & 0x7f) << 7) | (text[1] & 0x7f); - struct fontchar sp74 = {0, 0, 12, 11}; - - if (codepoint & 0x2000) { - sp74.width = 15; - sp74.height = 16; - } - - if ((codepoint & 0x1fff) >= 0x3c8) { - codepoint = 2; - } - - sp74.index = codepoint + 0x80; - sp74.pixeldata = (void *)lang0f16e3fc(codepoint); - - gdl = textRenderChar(gdl, x, y, &sp74, &sp74, font, savedx, savedy, width * var8007fad0, height, arg10); - - text += 2; } } diff --git a/src/game/lang.c b/src/game/lang.c index e4562c854..f0f9e6f47 100644 --- a/src/game/lang.c +++ b/src/game/lang.c @@ -47,265 +47,7 @@ * relevant offsets within that buffer. */ -u32 *g_LangBanks[69]; -struct var800aabb4 *var800aabb4; -struct var800aabb8 *var800aabb8; - -u16 g_LangFiles[] = { - /* 0*/ 0, - /* 1*/ FILE_LAMEE, - /* 2*/ FILE_LARCHE, - /* 3*/ FILE_LARKE, - /* 4*/ FILE_LASHE, - /* 5*/ FILE_LAZTE, - /* 6*/ FILE_LCATE, - /* 7*/ FILE_LCAVEE, - /* 8*/ FILE_LARECE, - /* 9*/ FILE_LCRADE, - /*10*/ FILE_LCRYPE, - /*11*/ FILE_LDAME, - /*12*/ FILE_LDEPOE, - /*13*/ FILE_LDESTE, - /*14*/ FILE_LDISHE, - /*15*/ FILE_LEARE, - /*16*/ FILE_LELDE, - /*17*/ FILE_LIMPE, - /*18*/ FILE_LJUNE, - /*19*/ FILE_LLEEE, - /*20*/ FILE_LLENE, - /*21*/ FILE_LLIPE, - /*22*/ FILE_LLUEE, - /*23*/ FILE_LOATE, - /*24*/ FILE_LPAME, - /*25*/ FILE_LPETEE, - /*26*/ FILE_LREFE, - /*27*/ FILE_LRITE, - /*28*/ FILE_LRUNE, - /*29*/ FILE_LSEVBE, - /*30*/ FILE_LSEVE, - /*31*/ FILE_LSEVXE, - /*32*/ FILE_LSEVXBE, - /*33*/ FILE_LSHOE, - /*34*/ FILE_LSILOE, - /*35*/ FILE_LSTATE, - /*36*/ FILE_LTRAE, - /*37*/ FILE_LWAXE, - /*38*/ FILE_LGUNE, - /*39*/ FILE_LTITLEE, - /*40*/ FILE_LMPMENUE, - /*41*/ FILE_LPROPOBJE, - /*42*/ FILE_LMPWEAPONSE, - /*43*/ FILE_LOPTIONSE, - /*44*/ FILE_LMISCE, - /*45*/ FILE_LUFFE, - /*46*/ FILE_LOLDE, - /*47*/ FILE_LATEE, - /*48*/ FILE_LLAME, - /*49*/ FILE_LMP1E, - /*50*/ FILE_LMP2E, - /*51*/ FILE_LMP3E, - /*52*/ FILE_LMP4E, - /*53*/ FILE_LMP5E, - /*54*/ FILE_LMP6E, - /*55*/ FILE_LMP7E, - /*56*/ FILE_LMP8E, - /*57*/ FILE_LMP9E, - /*58*/ FILE_LMP10E, - /*59*/ FILE_LMP11E, - /*60*/ FILE_LMP12E, - /*61*/ FILE_LMP13E, - /*62*/ FILE_LMP14E, - /*63*/ FILE_LMP15E, - /*64*/ FILE_LMP16E, - /*65*/ FILE_LMP17E, - /*66*/ FILE_LMP18E, - /*67*/ FILE_LMP19E, - /*68*/ FILE_LMP20E, -}; - -u32 langGetLangBankIndexFromStagenum(s32 stagenum) -{ - u32 bank; - - switch (stagenum) { - case STAGE_PELAGIC: bank = LANGBANK_DAM; break; - case STAGE_EXTRACTION: bank = LANGBANK_ARK; break; - case STAGE_TEST_RUN: bank = LANGBANK_RUN; break; - case STAGE_24: bank = LANGBANK_SEVX; break; - case STAGE_MAIANSOS: bank = LANGBANK_SEV; break; - case STAGE_TEST_DEST: bank = LANGBANK_DEST; break; - case STAGE_2B: bank = LANGBANK_SEVXB; break; - case STAGE_RETAKING: bank = LANGBANK_SEVB; break; - case STAGE_WAR: bank = LANGBANK_STAT; break; - case STAGE_CHICAGO: bank = LANGBANK_PETE; break; - case STAGE_G5BUILDING: bank = LANGBANK_DEPO; break; - case STAGE_ESCAPE: bank = LANGBANK_TRA; break; - case STAGE_MP_TEMPLE: bank = LANGBANK_JUN; break; - case STAGE_MP_PIPES: bank = LANGBANK_CRAD; break; - case STAGE_MP_G5BUILDING: bank = LANGBANK_CRYP; break; - case STAGE_CITRAINING: bank = LANGBANK_DISH; break; - case STAGE_MP_COMPLEX: bank = LANGBANK_REF; break; - case STAGE_MP_SKEDAR: bank = LANGBANK_OAT; break; - case STAGE_TEST_LEN: bank = LANGBANK_LEN; break; - case STAGE_DEFECTION: bank = LANGBANK_AME; break; - case STAGE_VILLA: bank = LANGBANK_ELD; break; - case STAGE_DEFENSE: bank = LANGBANK_IMP; break; - case STAGE_TEST_ASH: bank = LANGBANK_ASH; break; - case STAGE_INVESTIGATION: bank = LANGBANK_EAR; break; - case STAGE_ATTACKSHIP: bank = LANGBANK_LEE; break; - case STAGE_RESCUE: bank = LANGBANK_LIP; break; - case STAGE_INFILTRATION: bank = LANGBANK_LUE; break; - case STAGE_28: bank = LANGBANK_DAM; break; - case STAGE_DEEPSEA: bank = LANGBANK_PAM; break; - case STAGE_SKEDARRUINS: bank = LANGBANK_SHO; break; - case STAGE_AIRFORCEONE: bank = LANGBANK_RIT; break; - case STAGE_TEST_ARCH: bank = LANGBANK_ARCH; break; - case STAGE_MP_RAVINE: bank = LANGBANK_AREC; break; - case STAGE_CRASHSITE: bank = LANGBANK_AZT; break; - case STAGE_AIRBASE: bank = LANGBANK_CAVE; break; - case STAGE_TEST_UFF: bank = LANGBANK_UFF; break; - case STAGE_TEST_OLD: bank = LANGBANK_OLD; break; - case STAGE_DUEL: bank = LANGBANK_ATE; break; - case STAGE_TEST_LAM: bank = LANGBANK_LAM; break; - case STAGE_MP_BASE: bank = LANGBANK_MP1; break; - case STAGE_TEST_MP2: bank = LANGBANK_MP2; break; - case STAGE_MP_AREA52: bank = LANGBANK_MP3; break; - case STAGE_MP_WAREHOUSE: bank = LANGBANK_MP4; break; - case STAGE_MP_CARPARK: bank = LANGBANK_MP5; break; - case STAGE_TEST_MP6: bank = LANGBANK_MP6; break; - case STAGE_TEST_MP7: bank = LANGBANK_MP7; break; - case STAGE_TEST_MP8: bank = LANGBANK_MP8; break; - case STAGE_MP_RUINS: bank = LANGBANK_MP9; break; - case STAGE_MP_SEWERS: bank = LANGBANK_MP10; break; - case STAGE_MP_FELICITY: bank = LANGBANK_MP11; break; - case STAGE_MP_FORTRESS: bank = LANGBANK_MP12; break; - case STAGE_MP_VILLA: bank = LANGBANK_MP13; break; - case STAGE_TEST_MP14: bank = LANGBANK_MP14; break; - case STAGE_MP_GRID: bank = LANGBANK_MP15; break; - case STAGE_TEST_MP16: bank = LANGBANK_MP16; break; - case STAGE_TEST_MP17: bank = LANGBANK_MP17; break; - case STAGE_TEST_MP18: bank = LANGBANK_MP18; break; - case STAGE_TEST_MP19: bank = LANGBANK_MP19; break; - case STAGE_TEST_MP20: bank = LANGBANK_MP20; break; - case STAGE_MBR: bank = LANGBANK_WAX; break; - case STAGE_TEST_SILO: bank = LANGBANK_SILO; break; - default: - while (true) { - // empty - } - } - - return bank; -} - -extern u8 _jpndata1; -extern u8 _jpndata2; - -struct var800aabb4 *lang0f16e3fc(s32 arg0) -{ - s32 i; - s32 t2 = -1; - s32 t3 = -1; - bool t0 = false; - - if (arg0 & 0x2000) { - if (1); - t0 = true; - } - - if (arg0 && arg0); - - for (i = 0; i < 0x7c; i++) { - if ((t0 || (arg0 >> 1) != var800aabb8[i].unk00_02) - && (!t0 || i + 1 >= 0x7c - || (arg0 >> 1) != var800aabb8[i + 0].unk00_02 - || (arg0 >> 1) != var800aabb8[i + 1].unk00_02)) { - if (var800aabb8[i].unk00_00 == 0) { - if (1); - t2 = i; - } - - if (var800aabb8[i].unk00_00 == 0 && var800aabb8[i + 1].unk00_00 == 0 && i + 1 < 0x7c) { - t3 = i; - } - } else { - break; - } - } - - if (i < 0x7c) { - if (!t0) { - var800aabb8[i].unk00_00 = 2; - - return &var800aabb4[i]; - } else { - var800aabb8[i + 0].unk00_00 = 2; - var800aabb8[i + 1].unk00_00 = 2; - - return &var800aabb4[i]; - } - } - - if (!t0 && t2 >= 0) { - var800aabb8[t2].unk00_00 = 2; - var800aabb8[t2].unk00_02 = arg0 >> 1; - - dmaExec(&var800aabb4[t2], (u32)&_jpndata1 + (arg0 >> 1) * 0x60, 0x60); - - return &var800aabb4[t2]; - } - - if (t0 && t3 >= 0) { - var800aabb8[t3 + 0].unk00_00 = 2; - var800aabb8[t3 + 1].unk00_00 = 2; - var800aabb8[t3 + 0].unk00_02 = arg0 >> 1; - var800aabb8[t3 + 1].unk00_02 = arg0 >> 1; - - dmaExec(&var800aabb4[t3], (u32)&_jpndata2 + ((arg0 & 0x1fff) >> 1) * 0x80, 0x80); - - return &var800aabb4[t3]; - } - - return &var800aabb4[0]; -} - -/** - * NTSC only supports English, while PAL supports 4 languages and JPN has its - * own. Each English file is followed immediately by the other translations. - */ -s32 langGetFileNumOffset(void) -{ -#if PAL - s32 offset = g_LanguageId; - return offset + 2; -#else - s32 offset = 0; - - return offset; -#endif -} - -s32 langGetFileId(s32 bank) -{ - return g_LangFiles[bank] + langGetFileNumOffset(); -} - -void langLoad(s32 bank) -{ - s32 file_id = langGetFileId(bank); - g_LangBanks[bank] = fileLoadToNew(file_id, FILELOADMETHOD_DEFAULT); -} - -void langLoadToAddr(s32 bank, u8 *dst, s32 size) -{ - s32 file_id = langGetFileId(bank); - g_LangBanks[bank] = fileLoadToAddr(file_id, FILELOADMETHOD_DEFAULT, dst, size); -} - -void langClearBank(s32 bank) -{ - g_LangBanks[bank] = NULL; -} +char **g_LangBanks[69]; /** * Resolve a text ID to a string. @@ -321,14 +63,6 @@ char *langGet(s32 textid) { s32 bankindex = textid >> 9; s32 textindex = textid & 0x1ff; - u32 *bank = g_LangBanks[bankindex]; - u32 addr; - if (bank && bank[textindex]) { - addr = (u32)bank + bank[textindex]; - } else { - addr = 0; - } - - return (char *)addr; + return g_LangBanks[bankindex][textindex]; } diff --git a/src/game/langreset.c b/src/game/langreset.c index b5df697dd..21f3136b2 100644 --- a/src/game/langreset.c +++ b/src/game/langreset.c @@ -7,8 +7,156 @@ #include "data.h" #include "types.h" -extern u8 *g_LangBuffer; -extern s32 g_LangBufferSize; +u16 g_LangFiles[] = { + /* 0*/ 0, + /* 1*/ FILE_LAMEE, + /* 2*/ FILE_LARCHE, + /* 3*/ FILE_LARKE, + /* 4*/ FILE_LASHE, + /* 5*/ FILE_LAZTE, + /* 6*/ FILE_LCATE, + /* 7*/ FILE_LCAVEE, + /* 8*/ FILE_LARECE, + /* 9*/ FILE_LCRADE, + /*10*/ FILE_LCRYPE, + /*11*/ FILE_LDAME, + /*12*/ FILE_LDEPOE, + /*13*/ FILE_LDESTE, + /*14*/ FILE_LDISHE, + /*15*/ FILE_LEARE, + /*16*/ FILE_LELDE, + /*17*/ FILE_LIMPE, + /*18*/ FILE_LJUNE, + /*19*/ FILE_LLEEE, + /*20*/ FILE_LLENE, + /*21*/ FILE_LLIPE, + /*22*/ FILE_LLUEE, + /*23*/ FILE_LOATE, + /*24*/ FILE_LPAME, + /*25*/ FILE_LPETEE, + /*26*/ FILE_LREFE, + /*27*/ FILE_LRITE, + /*28*/ FILE_LRUNE, + /*29*/ FILE_LSEVBE, + /*30*/ FILE_LSEVE, + /*31*/ FILE_LSEVXE, + /*32*/ FILE_LSEVXBE, + /*33*/ FILE_LSHOE, + /*34*/ FILE_LSILOE, + /*35*/ FILE_LSTATE, + /*36*/ FILE_LTRAE, + /*37*/ FILE_LWAXE, + /*38*/ FILE_LGUNE, + /*39*/ FILE_LTITLEE, + /*40*/ FILE_LMPMENUE, + /*41*/ FILE_LPROPOBJE, + /*42*/ FILE_LMPWEAPONSE, + /*43*/ FILE_LOPTIONSE, + /*44*/ FILE_LMISCE, + /*45*/ FILE_LUFFE, + /*46*/ FILE_LOLDE, + /*47*/ FILE_LATEE, + /*48*/ FILE_LLAME, + /*49*/ FILE_LMP1E, + /*50*/ FILE_LMP2E, + /*51*/ FILE_LMP3E, + /*52*/ FILE_LMP4E, + /*53*/ FILE_LMP5E, + /*54*/ FILE_LMP6E, + /*55*/ FILE_LMP7E, + /*56*/ FILE_LMP8E, + /*57*/ FILE_LMP9E, + /*58*/ FILE_LMP10E, + /*59*/ FILE_LMP11E, + /*60*/ FILE_LMP12E, + /*61*/ FILE_LMP13E, + /*62*/ FILE_LMP14E, + /*63*/ FILE_LMP15E, + /*64*/ FILE_LMP16E, + /*65*/ FILE_LMP17E, + /*66*/ FILE_LMP18E, + /*67*/ FILE_LMP19E, + /*68*/ FILE_LMP20E, +}; + +u32 langGetLangBankIndexFromStagenum(s32 stagenum) +{ + u32 bank = 0; + + switch (stagenum) { + case STAGE_PELAGIC: bank = LANGBANK_DAM; break; + case STAGE_EXTRACTION: bank = LANGBANK_ARK; break; + case STAGE_MAIANSOS: bank = LANGBANK_SEV; break; + case STAGE_WAR: bank = LANGBANK_STAT; break; + case STAGE_CHICAGO: bank = LANGBANK_PETE; break; + case STAGE_G5BUILDING: bank = LANGBANK_DEPO; break; + case STAGE_ESCAPE: bank = LANGBANK_TRA; break; + case STAGE_CITRAINING: bank = LANGBANK_DISH; break; + case STAGE_DEFECTION: bank = LANGBANK_AME; break; + case STAGE_VILLA: bank = LANGBANK_ELD; break; + case STAGE_DEFENSE: bank = LANGBANK_IMP; break; + case STAGE_INVESTIGATION: bank = LANGBANK_EAR; break; + case STAGE_ATTACKSHIP: bank = LANGBANK_LEE; break; + case STAGE_RESCUE: bank = LANGBANK_LIP; break; + case STAGE_INFILTRATION: bank = LANGBANK_LUE; break; + case STAGE_DEEPSEA: bank = LANGBANK_PAM; break; + case STAGE_SKEDARRUINS: bank = LANGBANK_SHO; break; + case STAGE_AIRFORCEONE: bank = LANGBANK_RIT; break; + case STAGE_CRASHSITE: bank = LANGBANK_AZT; break; + case STAGE_AIRBASE: bank = LANGBANK_CAVE; break; + case STAGE_DUEL: bank = LANGBANK_ATE; break; + case STAGE_MBR: bank = LANGBANK_WAX; break; + } + + return bank; +} + +s32 langGetFileId(s32 bank) +{ + return g_LangFiles[bank]; +} + +void langPromoteOffsets(s32 banknum) +{ + u32 *bank = (u32 *) g_LangBanks[banknum]; + u32 endoffset; + u32 offset; + s32 i; + + for (i = 0; bank[i] == 0; i++); + + endoffset = bank[i]; + + i = 0; + offset = 0; + + while (offset < endoffset) { + if (bank[i]) { + bank[i] += (u32) bank; + } + + offset += 4; + i++; + } +} + +void langLoad(s32 bank) +{ + g_LangBanks[bank] = fileLoadToNew(g_LangFiles[bank], FILELOADMETHOD_DEFAULT); + langPromoteOffsets(bank); +} + +void langLoadToAddr(s32 bank, u8 *dst, s32 size) +{ + g_LangBanks[bank] = fileLoadToAddr(g_LangFiles[bank], FILELOADMETHOD_DEFAULT, dst, size); + langPromoteOffsets(bank); +} + +void langClearBank(s32 bank) +{ + g_LangBanks[bank] = NULL; +} + void langReset(s32 stagenum) { @@ -26,7 +174,15 @@ void langReset(s32 stagenum) g_LangBanks[LANGBANK_OPTIONS] = fileLoadToNew(langGetFileId(LANGBANK_OPTIONS), FILELOADMETHOD_DEFAULT); g_LangBanks[LANGBANK_MISC] = fileLoadToNew(langGetFileId(LANGBANK_MISC), FILELOADMETHOD_DEFAULT); + langPromoteOffsets(LANGBANK_GUN); + langPromoteOffsets(LANGBANK_MPMENU); + langPromoteOffsets(LANGBANK_PROPOBJ); + langPromoteOffsets(LANGBANK_MPWEAPONS); + langPromoteOffsets(LANGBANK_OPTIONS); + langPromoteOffsets(LANGBANK_MISC); + if (stagenum == STAGE_CREDITS) { g_LangBanks[LANGBANK_TITLE] = fileLoadToNew(langGetFileId(LANGBANK_TITLE), FILELOADMETHOD_DEFAULT); + langPromoteOffsets(LANGBANK_TITLE); } } diff --git a/src/game/lv.c b/src/game/lv.c index e7da9d4c3..9e6918c0f 100644 --- a/src/game/lv.c +++ b/src/game/lv.c @@ -2169,11 +2169,6 @@ void lvStop(void) audioStop(g_MiscAudioHandle); } - if (g_Vars.stagenum < NUM_STAGES) { - s32 bank = langGetLangBankIndexFromStagenum(g_Vars.stagenum); - langClearBank(bank); - } - chrmgrStop(); explosionsStop(); smokeStop(); diff --git a/src/game/setup.c b/src/game/setup.c index efcc79cce..224bd5dcc 100644 --- a/src/game/setup.c +++ b/src/game/setup.c @@ -1053,7 +1053,9 @@ void setupLoadBriefing(s32 stagenum, u8 *buffer, s32 bufferlen, struct briefing briefing->langbank = langGetLangBankIndexFromStagenum(stagenum); - langLoadToAddr(briefing->langbank, langbuffer, langbufferlen); + if (briefing->langbank) { + langLoadToAddr(briefing->langbank, langbuffer, langbufferlen); + } start = (struct defaultobj *)((u32)setup + (u32)setup->props); @@ -1139,6 +1141,7 @@ void setupLoadFiles(s32 stagenum) struct stagesetup *setup; u16 filenum; bool modified; + s32 langbank; g_PadEffects = NULL; g_LastPadEffectIndex = -1; @@ -1158,7 +1161,12 @@ void setupLoadFiles(s32 stagenum) g_GeCreditsData = (u8 *)fileLoadToNew(filenum, FILELOADMETHOD_DEFAULT); setup = (struct stagesetup *)g_GeCreditsData; - langLoad(langGetLangBankIndexFromStagenum(stagenum)); + + langbank = langGetLangBankIndexFromStagenum(stagenum); + + if (langbank) { + langLoad(langbank); + } g_StageSetup.intro = (s32 *)((u32)setup + (u32)setup->intro); g_StageSetup.props = (u32 *)((u32)setup + (u32)setup->props); diff --git a/src/include/bss.h b/src/include/bss.h index f2e4036f7..4d4f1ff50 100644 --- a/src/include/bss.h +++ b/src/include/bss.h @@ -236,7 +236,7 @@ extern struct var800aaa38 var800aaa38[3]; extern u32 g_AudioXReasonsActive[4]; extern s32 g_MusicXReasonMinDurations[4]; extern s32 g_MusicXReasonMaxDurations[4]; -extern u32 *g_LangBanks[69]; +extern char **g_LangBanks[69]; extern struct var800aabb4 *var800aabb4; extern struct var800aabb8 *var800aabb8; extern struct texture *g_Textures; diff --git a/src/include/game/lang.h b/src/include/game/lang.h index 84a849068..9d3e31e12 100644 --- a/src/include/game/lang.h +++ b/src/include/game/lang.h @@ -10,7 +10,6 @@ void langTick(void); u32 langGetLangBankIndexFromStagenum(s32 stagenum); struct var800aabb4 *lang0f16e3fc(s32 arg0); -s32 langGetFileNumOffset(void); s32 langGetFileId(s32 bank); void langLoad(s32 bank); void langLoadToAddr(s32 bank, u8 *dst, s32 size);