From abdfeda868817c4cf9d3ee64a16aa82311432914 Mon Sep 17 00:00:00 2001 From: Ilya Shurumov Date: Fri, 1 Jan 2021 18:01:30 +0600 Subject: [PATCH] - re-organize FEmain, use current draw buffer polygons instead of static --- src_rebuild/Game/Frontend/FEmain.c | 593 ++++++++++++++++------------- src_rebuild/Game/Frontend/FEmain.h | 85 +---- 2 files changed, 326 insertions(+), 352 deletions(-) diff --git a/src_rebuild/Game/Frontend/FEmain.c b/src_rebuild/Game/Frontend/FEmain.c index 9893470c..a05721f3 100644 --- a/src_rebuild/Game/Frontend/FEmain.c +++ b/src_rebuild/Game/Frontend/FEmain.c @@ -55,11 +55,35 @@ struct BOTCH char** name; }; +char* NullStr = "\0"; + typedef int(*screenFunc)(int bSetup); extern ACTIVE_CHEATS AvailableCheats; extern ACTIVE_CHEATS ActiveCheats; +extern int CentreScreen(int bSetup); // 0x001C31FC +extern int CarSelectScreen(int bSetup); // 0x001C3430 +extern int CopDiffLevelScreen(int bSetup); // 0x001C6404 +extern int VibroOnOffScreen(int bSetup); // 0x001C3A60 +extern int MissionSelectScreen(int bSetup); // 0x001C3B1C +extern int MissionCityScreen(int bSetup); // 0x001C4338 +extern int CutSceneSelectScreen(int bSetup); // 0x001C4600 +extern int CutSceneCitySelectScreen(int bSetup); // 0x001C4B30 +extern int SetVolumeScreen(int bSetup); // 0x001C50B0 +extern int ScoreScreen(int bSetup); // 0x001C59A0 +extern int SubtitlesOnOffScreen(int bSetup); // 0x001C64B0 +extern int CityCutOffScreen(int bSetup); // 0x001C64FC +extern int ControllerScreen(int bSetup); // 0x001C6548 +extern int MainScreen(int bSetup); // 0x001C6614 +extern int CheatScreen(int bSetup); // 0x001C5B4C +extern int ImmunityOnOffScreen(int bSetup); // 0x001C6654 +extern int InvincibleOnOffScreen(int bSetup); // 0x001C66A0 +extern int GamePlayScreen(int bSetup); // 0x001C66EC +extern int GameNameScreen(int bSetup); // 0x001C60A0 +extern int CheatNumlayerSelect(int bSetup); // 0x001C6724 +extern int BonusGalleryScreen(int bSetup); + screenFunc fpUserFunctions[] = { CentreScreen, CarSelectScreen, @@ -239,6 +263,18 @@ static char gameAreas[64] = { #define GAMEMODE_AREA(level, offset, index) gameAreas[offset + level * 2 + index] #define GAMEMODE_AREA_NAME(level, offset, index) AREA_NAME(level, GAMEMODE_AREA(level, offset, index)) +char cutUnlock[] = { + 2, 2, 2, 4, 5, + 6, 7, 7, 7, 9, + 11, 11, 11, 11, 12, + 12, 13, 13, 14, 15, + 17, 17, 17, 17, 18, + 18, 19, 19, 19, 19, + 21, 21, 21, 21, 22, + 22, 22, 23, 23, 23, + 28 +}; + int CarAvailability[4][10] = { {1,1,1,1,0,0,0,0,0,0}, {1,1,1,1,0,0,0,0,0,0}, @@ -364,6 +400,13 @@ POLY_FT4 cd_sprite; SPRT extraSprt; POLY_FT3 extraDummy; +int FEPrintStringSized(char* string, int x, int y, int scale, int transparent, int r, int g, int b); +int FEPrintString(char* string, int x, int y, int justification, int r, int g, int b); + +void LoadFrontendScreens(void); +void NewSelection(short dir); +void EndFrame(void); + // [D] [T] void SetVariable(int var) { @@ -486,118 +529,6 @@ void SetVariable(int var) } } -// [D] [T] -void LoadFrontendScreens(void) -{ - int iNumScreens; - char *ptr; - RECT16 rect; - - ShowLoadingScreen("GFX\\FELOAD.TIM", 1, 12); - ShowLoading(); - - Loadfile("DATA\\SCRS.BIN", _frontend_buffer); - - ptr = _frontend_buffer + 20; // skip header and number of screens - iNumScreens = (int)_frontend_buffer[16]; - - for (int i = 0; i < iNumScreens; i++) - { - PsxScreens[i].numButtons = *ptr++; - PsxScreens[i].userFunctionNum = *ptr++; - - for (int j = 0; j < PsxScreens[i].numButtons; j++) - { - memcpy((u_char*)&PsxScreens[i].buttons[j], (u_char*)ptr, sizeof(PSXBUTTON)); - ptr += sizeof(PSXBUTTON); - } - } - - rect.w = 64; - rect.h = 256; - - ShowLoading(); - LoadBackgroundFile("DATA\\GFX.RAW"); - - for (int i = 0; i < 2; i++) - { - ShowLoading(); - LoadfileSeg("DATA\\GFX.RAW", _frontend_buffer, 0x30000 + (i * 0x8000), 0x8000); - - rect.x = 640 + (i * 64); - rect.y = 256; - - LoadImage(&rect, (u_long *)_frontend_buffer); - DrawSync(0); - } - - ShowLoading(); - LoadfileSeg("DATA\\GFX.RAW", _frontend_buffer, 0x58000, 0x8000); - - rect.x = 960; - rect.y = 256; - - // load font - LoadImage(&rect, (u_long *)_frontend_buffer); - DrawSync(0); - - Loadfile("DATA\\FEFONT.BNK", (char*)&feFont); -} - -// [D] [T] -void LoadBackgroundFile(char *name) -{ - int iTpage; - int p; - RECT16 rect; - int pages[6]; - int i; - - iTpage = 11; - - pages[0] = 0; - pages[1] = 1; - pages[2] = 2; - pages[3] = 3; - pages[4] = 4; - pages[5] = 5; - - mainScreenLoaded = (strcmp(name, "DATA\\GFX.RAW") == 0); - - rect.w = 64; - rect.h = 256; - - for (i = 0; i < 6; i++) - { - FEDrawCDicon(); - - p = pages[i]; - - LoadfileSeg(name, _overlay_buffer, p * 0x8000, 0x8000); - FEDrawCDicon(); - - rect.y = (short)(p / 6); - rect.x = ((short)p + rect.y * -6) * 64 + 640; - rect.y *= 256; - - LoadImage(&rect, (u_long *)_overlay_buffer); - FEDrawCDicon(); - } - - LoadfileSeg(name, _overlay_buffer, iTpage * 0x8000, 0x800); - FEDrawCDicon(); - - rect.h = 1; - rect.y = (short)(iTpage / 6); - rect.x = ((short)iTpage + rect.y * -6) * 64 + 640; - rect.y *= 256; - - LoadImage(&rect, (u_long *)_overlay_buffer); - DrawSync(0); - - SetupBackgroundPolys(); -} - // [D] [T] void SetupBackgroundPolys(void) { @@ -698,6 +629,54 @@ DR_MOVE In; DR_MOVE Out; RECT16 storeRect = { 768, 475, 255, 36 }; + + +// [D] [T] +void DisplayOnScreenText(void) +{ + char* text; + + sprintf(ScreenTitle, NullStr); + + if (padsConnected[0] == 0) { + int transparent = 0; + + if (Pads[0].type == 0) { + text = "Please insert controller into Port 1"; + transparent = 1; + } + else { + if (Pads[0].type != 1) + return; + + text = "Incompatible controller in Port 1"; + } + + FEPrintStringSized(text, 40, 400, 0xc00, transparent, 64, 64, 64); + } + else + { + if (!bDoingScores && !bDoingCarSelect) + { + for (int i = 0; i < ScreenDepth; i++) + { + if (i > 0) + strcat(ScreenTitle, " - "); + + strcat(ScreenTitle, ScreenNames[i]); + } + + FEPrintStringSized(ScreenTitle, 40, 400, 0xc00, 1, 64, 64, 64); + } + + if (bInCutSelect) { + text = GET_MISSION_TXT(CutSceneNames[cutSelection + CutAmountsTotal[currCity]]); + + FEPrintStringSized(text, 100, 226, 0xc00, 1, 64, 64, 64); + } + } +} + // [D] [T] void DrawScreen(PSXSCREEN *pScr) { @@ -786,20 +765,25 @@ void DrawScreen(PSXSCREEN *pScr) if (button == pCurrButton) { + SPRT* hghltSprt; + POLY_FT4* hghltDummy; RECT16 rect; rect.x = pCurrButton->s_x; rect.y = pCurrButton->s_y; - rect.w = 255; - rect.h = 36; - SetDrawMove(&Out, &rect, storeRect.x, storeRect.y); - addPrim(current->ot + 8, &Out); + hghltSprt = (SPRT*)current->primptr; + current->primptr += sizeof(SPRT); + *hghltSprt = HighlightSprt; - setXY0(&HighlightSprt, rect.x, rect.y); + hghltDummy = (POLY_FT4*)current->primptr; + current->primptr += sizeof(POLY_FT4); + *hghltDummy = HighlightDummy; + + setXY0(hghltSprt, rect.x, rect.y); - addPrim(current->ot + 6, &HighlightSprt); - addPrim(current->ot + 6, &HighlightDummy); + addPrim(current->ot + 6, hghltSprt); + addPrim(current->ot + 6, hghltDummy); draw = 1; } @@ -848,8 +832,24 @@ void DrawScreen(PSXSCREEN *pScr) if (bDrawExtra) { +#ifdef PSX addPrim(current->ot + 2, &extraSprt); addPrim(current->ot + 2, &extraDummy); +#else + SPRT* extrSprt; + POLY_FT3* extrDummy; + + extrSprt = (SPRT*)current->primptr; + current->primptr += sizeof(SPRT); + *extrSprt = extraSprt; + + extrDummy = (POLY_FT3*)current->primptr; + current->primptr += sizeof(POLY_FT3); + *extrDummy = extraDummy; + + addPrim(current->ot + 2, extrSprt); + addPrim(current->ot + 2, extrDummy); +#endif } } #ifdef PSX @@ -862,63 +862,68 @@ void DrawScreen(PSXSCREEN *pScr) #endif } -char cutUnlock[] = { - 2, 2, 2, 4, 5, - 6, 7, 7, 7, 9, - 11, 11, 11, 11, 12, - 12, 13, 13, 14, 15, - 17, 17, 17, 17, 18, - 18, 19, 19, 19, 19, - 21, 21, 21, 21, 22, - 22, 22, 23, 23, 23, - 28 }; +// [D] [T] +void FEInitCdIcon(void) +{ + ushort* palette; + RECT16 rect; + + palette = cd_icon + 10; + + for (int i = 0; i < 14; i++) + { + *palette &= 0x7fff; + palette++; + } + + cd_icon[10] = 0; + + rect.x = 960; + rect.y = 434; + rect.w = 8; + rect.h = 32; + + cd_icon[24] |= 0x8000; + cd_icon[25] |= 0x8000; + + LoadImage(&rect, (u_long*)(cd_icon + 0x18)); + + setPolyFT4(&cd_sprite); + setRGB0(&cd_sprite, 128, 128, 128); + setUVWH(&cd_sprite, 0, 178, 32, 32); + setXYWH(&cd_sprite, 80, 38, 38, 21); + setClut(&cd_sprite, 960, 433); + setTPage(&cd_sprite, 0, 0, 960, 256); + + bCdIconSetup = 1; +} -char* NullStr = "\0"; // [D] [T] -void DisplayOnScreenText(void) +void FEDrawCDicon(void) { - char *text; + ushort* palette; + int i; + RECT16 dest; - sprintf(ScreenTitle, NullStr); + cd_icon[23] = cd_icon[11]; - if (padsConnected[0] == 0) { - int transparent = 0; + palette = cd_icon + 10; - if (Pads[0].type == 0) { - text = "Please insert controller into Port 1"; - transparent = 1; - } - else { - if (Pads[0].type != 1) - return; - - text = "Incompatible controller in Port 1"; - } - - FEPrintStringSized(text, 40, 400, 0xc00, transparent, 64, 64, 64); - } - else + for (i = 0; i < 12; i++) { - if (!bDoingScores && !bDoingCarSelect) - { - for (int i = 0; i < ScreenDepth; i++) - { - if (i > 0) - strcat(ScreenTitle, " - "); - - strcat(ScreenTitle, ScreenNames[i]); - } - - FEPrintStringSized(ScreenTitle, 40, 400, 0xc00, 1, 64, 64, 64); - } - - if (bInCutSelect) { - text = GET_MISSION_TXT(CutSceneNames[cutSelection + CutAmountsTotal[currCity]]); - - FEPrintStringSized(text, 100, 226, 0xc00, 1, 64, 64, 64); - } + palette[1] = palette[2]; + palette++; } + + dest.x = 960; + dest.y = 433; + dest.w = 16; + dest.h = 1; + + LoadImage(&dest, (u_long*)(cd_icon + 10)); + DrawPrim(&cd_sprite); + DrawSync(0); } // [D] [T] @@ -983,6 +988,117 @@ void SetupExtraPoly(char *fileName, int offset, int offset2) } } +// [D] [T] +void LoadBackgroundFile(char* name) +{ + int iTpage; + int p; + RECT16 rect; + int pages[6]; + int i; + + iTpage = 11; + + pages[0] = 0; + pages[1] = 1; + pages[2] = 2; + pages[3] = 3; + pages[4] = 4; + pages[5] = 5; + + mainScreenLoaded = (strcmp(name, "DATA\\GFX.RAW") == 0); + + rect.w = 64; + rect.h = 256; + + for (i = 0; i < 6; i++) + { + FEDrawCDicon(); + + p = pages[i]; + + LoadfileSeg(name, _overlay_buffer, p * 0x8000, 0x8000); + FEDrawCDicon(); + + rect.y = (short)(p / 6); + rect.x = ((short)p + rect.y * -6) * 64 + 640; + rect.y *= 256; + + LoadImage(&rect, (u_long*)_overlay_buffer); + FEDrawCDicon(); + } + + LoadfileSeg(name, _overlay_buffer, iTpage * 0x8000, 0x800); + FEDrawCDicon(); + + rect.h = 1; + rect.y = (short)(iTpage / 6); + rect.x = ((short)iTpage + rect.y * -6) * 64 + 640; + rect.y *= 256; + + LoadImage(&rect, (u_long*)_overlay_buffer); + DrawSync(0); + + SetupBackgroundPolys(); +} + +// [D] [T] +void LoadFrontendScreens(void) +{ + int iNumScreens; + char* ptr; + RECT16 rect; + + ShowLoadingScreen("GFX\\FELOAD.TIM", 1, 12); + ShowLoading(); + + Loadfile("DATA\\SCRS.BIN", _frontend_buffer); + + ptr = _frontend_buffer + 20; // skip header and number of screens + iNumScreens = (int)_frontend_buffer[16]; + + for (int i = 0; i < iNumScreens; i++) + { + PsxScreens[i].numButtons = *ptr++; + PsxScreens[i].userFunctionNum = *ptr++; + + for (int j = 0; j < PsxScreens[i].numButtons; j++) + { + memcpy((u_char*)&PsxScreens[i].buttons[j], (u_char*)ptr, sizeof(PSXBUTTON)); + ptr += sizeof(PSXBUTTON); + } + } + + rect.w = 64; + rect.h = 256; + + ShowLoading(); + LoadBackgroundFile("DATA\\GFX.RAW"); + + for (int i = 0; i < 2; i++) + { + ShowLoading(); + LoadfileSeg("DATA\\GFX.RAW", _frontend_buffer, 0x30000 + (i * 0x8000), 0x8000); + + rect.x = 640 + (i * 64); + rect.y = 256; + + LoadImage(&rect, (u_long*)_frontend_buffer); + DrawSync(0); + } + + ShowLoading(); + LoadfileSeg("DATA\\GFX.RAW", _frontend_buffer, 0x58000, 0x8000); + + rect.x = 960; + rect.y = 256; + + // load font + LoadImage(&rect, (u_long*)_frontend_buffer); + DrawSync(0); + + Loadfile("DATA\\FEFONT.BNK", (char*)&feFont); +} // [D] [T] void ReInitScreens(void) @@ -1076,8 +1192,10 @@ void NewSelection(short dir) // any buttons pressed? if (dir != 0) { +#ifdef PSX SetDrawMove(&In, &storeRect, pCurrButton->s_x, pCurrButton->s_y); addPrim(current->ot + 9, &In); +#endif if ((dir & 0x1000) != 0) { @@ -1372,6 +1490,44 @@ void PadChecks(void) } } +// [D] [T] +void SetFEDrawMode(void) +{ + SetVideoMode(video_mode); + + SetDefDrawEnv(&MPBuff[0][0].draw, draw_mode.x1, draw_mode.y1, 640, 512); + SetDefDispEnv(&MPBuff[0][0].disp, draw_mode.x1, draw_mode.y1, 640, 512); + SetDefDrawEnv(&MPBuff[0][1].draw, draw_mode.x1, draw_mode.y1, 640, 512); + SetDefDispEnv(&MPBuff[0][1].disp, draw_mode.x1, draw_mode.y1, 640, 512); + + MPBuff[0][0].draw.isbg = 0; + MPBuff[0][0].disp.isinter = 1; + MPBuff[0][0].draw.dfe = 1; + MPBuff[0][0].disp.screen.h = 256; + MPBuff[0][0].primtab = _primTab1; + MPBuff[0][0].primptr = _primTab1; + MPBuff[0][0].ot = _OT1; + + MPBuff[0][1].draw.isbg = 0; + MPBuff[0][1].disp.isinter = 1; + MPBuff[0][1].draw.dfe = 1; + MPBuff[0][1].disp.screen.h = 256; + MPBuff[0][1].primtab = _primTab2; + MPBuff[0][1].primptr = _primTab2; + MPBuff[0][1].ot = _OT2; + + last = &MPBuff[0][1]; + current = &MPBuff[0][0]; + + MPBuff[0][0].disp.screen.x = draw_mode.framex * 2; + MPBuff[0][0].disp.screen.y = draw_mode.framey; + MPBuff[0][1].disp.screen.y = draw_mode.framey; + MPBuff[0][1].disp.screen.x = MPBuff[0][0].disp.screen.x; + + PutDispEnv(&MPBuff[0][0].disp); + PutDrawEnv(¤t->draw); +} + // [A] - was inlined in DoFrontEnd void InitFrontend(void) { @@ -1489,44 +1645,6 @@ void DoFrontEnd(void) } while (bQuitToSystem != 2); } -// [D] [T] -void SetFEDrawMode(void) -{ - SetVideoMode(video_mode); - - SetDefDrawEnv(&MPBuff[0][0].draw, draw_mode.x1, draw_mode.y1, 640, 512); - SetDefDispEnv(&MPBuff[0][0].disp, draw_mode.x1, draw_mode.y1, 640, 512); - SetDefDrawEnv(&MPBuff[0][1].draw, draw_mode.x1, draw_mode.y1, 640, 512); - SetDefDispEnv(&MPBuff[0][1].disp, draw_mode.x1, draw_mode.y1, 640, 512); - - MPBuff[0][0].draw.isbg = 0; - MPBuff[0][0].disp.isinter = 1; - MPBuff[0][0].draw.dfe = 1; - MPBuff[0][0].disp.screen.h = 256; - MPBuff[0][0].primtab = _primTab1; - MPBuff[0][0].primptr = _primTab1; - MPBuff[0][0].ot = _OT1; - - MPBuff[0][1].draw.isbg = 0; - MPBuff[0][1].disp.isinter = 1; - MPBuff[0][1].draw.dfe = 1; - MPBuff[0][1].disp.screen.h = 256; - MPBuff[0][1].primtab = _primTab2; - MPBuff[0][1].primptr = _primTab2; - MPBuff[0][1].ot = _OT2; - - last = &MPBuff[0][1]; - current = &MPBuff[0][0]; - - MPBuff[0][0].disp.screen.x = draw_mode.framex * 2; - MPBuff[0][0].disp.screen.y = draw_mode.framey; - MPBuff[0][1].disp.screen.y = draw_mode.framey; - MPBuff[0][1].disp.screen.x = MPBuff[0][0].disp.screen.x; - - PutDispEnv(&MPBuff[0][0].disp); - PutDrawEnv(¤t->draw); -} - // [D] [T] void EndFrame(void) { @@ -3391,71 +3509,6 @@ int GameNameScreen(int bSetup) return 0; } - -// [D] [T] -void FEInitCdIcon(void) -{ - ushort *palette; - RECT16 rect; - - palette = cd_icon + 10; - - for (int i = 0; i < 14; i++) - { - *palette &= 0x7fff; - palette++; - } - - cd_icon[10] = 0; - - rect.x = 960; - rect.y = 434; - rect.w = 8; - rect.h = 32; - - cd_icon[24] |= 0x8000; - cd_icon[25] |= 0x8000; - - LoadImage(&rect, (u_long *)(cd_icon + 0x18)); - - setPolyFT4(&cd_sprite); - setRGB0(&cd_sprite, 128, 128, 128); - setUVWH(&cd_sprite, 0, 178, 32, 32); - setXYWH(&cd_sprite, 80, 38, 38, 21); - setClut(&cd_sprite, 960, 433); - setTPage(&cd_sprite, 0, 0, 960, 256); - - bCdIconSetup = 1; -} - - -// [D] [T] -void FEDrawCDicon(void) -{ - ushort *palette; - int i; - RECT16 dest; - - cd_icon[23] = cd_icon[11]; - - palette = cd_icon + 10; - - for (i = 0; i < 12; i++) - { - palette[1] = palette[2]; - palette++; - } - - dest.x = 960; - dest.y = 433; - dest.w = 16; - dest.h = 1; - - LoadImage(&dest, (u_long *)(cd_icon + 10)); - DrawPrim(&cd_sprite); - DrawSync(0); -} - // [D] [T] int CheatNumlayerSelect(int bSetup) { diff --git a/src_rebuild/Game/Frontend/FEmain.h b/src_rebuild/Game/Frontend/FEmain.h index e6f0737d..767c89b2 100644 --- a/src_rebuild/Game/Frontend/FEmain.h +++ b/src_rebuild/Game/Frontend/FEmain.h @@ -30,88 +30,9 @@ struct PSXSCREEN extern int gInFrontend; extern int bRedrawFrontend; -extern void SetVariable(int var); // 0x001C0974 - -extern void LoadFrontendScreens(); // 0x001C0C1C - -extern void LoadBackgroundFile(char *name); // 0x001C0F24 - -extern void SetupBackgroundPolys(); // 0x001C10F4 - -extern void SetupScreenSprts(PSXSCREEN *pScr); // 0x001C132C - -extern void DrawScreen(PSXSCREEN *pScr); // 0x001C147C - -extern void DisplayOnScreenText(); // 0x001C18E4 - -extern void SetupExtraPoly(char *fileName, int offset, int offset2); // 0x001C1AD0 - -extern void ReInitScreens(); // 0x001C1CF4 - -extern void NewSelection(short dir); // 0x001C1E18 - -extern int HandleKeyPress(); // 0x001C22A8 - -extern void PadChecks(); // 0x001C2668 - extern void DoFrontEnd(); // 0x001C296C - -extern void SetFEDrawMode(); // 0x001C2C2C - -extern void EndFrame(); // 0x001C6378 - -extern void carSelectPlayerText() ; // 0x001C676C - -extern int FEPrintString(char *string, int x, int y, int justification, int r, int g, int b); // 0x001C2D90 - -extern int FEPrintStringSized(char *string, int x, int y, int scale, int transparent, int r, int g, int b); // 0x001C2FD8 - -extern int CentreScreen(int bSetup); // 0x001C31FC - -extern int CarSelectScreen(int bSetup); // 0x001C3430 - -extern int CopDiffLevelScreen(int bSetup); // 0x001C6404 - -extern int VibroOnOffScreen(int bSetup); // 0x001C3A60 - -extern int MissionSelectScreen(int bSetup); // 0x001C3B1C - -extern int MissionCityScreen(int bSetup); // 0x001C4338 - -extern int CutSceneSelectScreen(int bSetup); // 0x001C4600 - -extern int CutSceneCitySelectScreen(int bSetup); // 0x001C4B30 - -extern int SetVolumeScreen(int bSetup); // 0x001C50B0 - -extern void DisplayScoreTable(); // 0x001C55F8 - -extern int ScoreScreen(int bSetup); // 0x001C59A0 - -extern int SubtitlesOnOffScreen(int bSetup); // 0x001C64B0 - -extern int CityCutOffScreen(int bSetup); // 0x001C64FC - -extern int ControllerScreen(int bSetup); // 0x001C6548 - -extern int MainScreen(int bSetup); // 0x001C6614 - -extern int CheatScreen(int bSetup); // 0x001C5B4C - -extern int ImmunityOnOffScreen(int bSetup); // 0x001C6654 - -extern int InvincibleOnOffScreen(int bSetup); // 0x001C66A0 - -extern int GamePlayScreen(int bSetup); // 0x001C66EC - -extern int GameNameScreen(int bSetup); // 0x001C60A0 - -extern void FEInitCdIcon(); // 0x001C61AC - -extern void FEDrawCDicon(); // 0x001C62F8 - -extern int CheatNumlayerSelect(int bSetup); // 0x001C6724 - -extern int BonusGalleryScreen(int bSetup); +extern void SetFEDrawMode(); +extern void LoadFrontendScreens(); +extern void ReInitScreens(); #endif