mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-06-08 12:16:59 -04:00
Optimise lang functions
This commit is contained in:
@@ -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;
|
||||
|
||||
+3
-60
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-268
@@ -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];
|
||||
}
|
||||
|
||||
+158
-2
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
+10
-2
@@ -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);
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user