Optimise lang functions

This commit is contained in:
Ryan Dwyer
2023-05-19 23:53:56 +10:00
parent a45acb282b
commit bf3245076d
8 changed files with 175 additions and 341 deletions
+1 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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);
}
}
-5
View File
@@ -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
View File
@@ -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
View File
@@ -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;
-1
View File
@@ -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);