re3/src/core/Frontend_PS2.cpp

3034 lines
92 KiB
C++

#include "common.h"
#ifdef PS2_MENU
#include "platform.h"
#include "main.h"
#include "Timer.h"
#include "Pad.h"
#include "Sprite2d.h"
#include "Text.h"
#include "Font.h"
#include "Hud.h"
#include "MBlur.h"
#include "DMAudio.h"
#include "Streaming.h"
#include "Camera.h"
#include "Credits.h"
#include "General.h"
#include "TxdStore.h"
#include "FileMgr.h"
#include "Messages.h"
#include "Frontend_PS2.h"
#include "Stats.h"
#include "Game.h"
#include "World.h"
#include "PlayerInfo.h"
#include "FrontendControls.h"
#include "MemoryCard.h"
#define CRect_SZ(x, y, w, h) CRect(x, y, x+w, y+h)
wchar MemoryCard_FileNames[8][100+1];
CMenuManager FrontEndMenuManager;
// TEMP: put into header
bool DoRWStuffStartOfFrame_Horizon(int16 TopRed, int16 TopGreen, int16 TopBlue, int16 BottomRed, int16 BottomGreen, int16 BottomBlue, int16 Alpha);
bool DoRWStuffStartOfFrame(int16 TopRed, int16 TopGreen, int16 TopBlue, int16 BottomRed, int16 BottomGreen, int16 BottomBlue, int16 Alpha);
void DoRWStuffEndOfFrame(void);
#define SCRW SCREEN_WIDTH
#define SCRH SCREEN_HEIGHT
//#define X SCREEN_STRETCH_X
//#define Y SCREEN_STRETCH_Y
#define X SCREEN_SCALE_X
#define Y SCREEN_SCALE_Y
#define YF(x) Y(float(x)*(float(DEFAULT_SCREEN_HEIGHT)/float(DEFAULT_SCREEN_HEIGHT_PAL)))
//#define X(x) ((x)/640.0f*SCRW)
//#define Y(y) ((y)/448.0f*SCRH)
static float MENU_TEXT_SIZE_X = 0.644f;
static float MENU_TEXT_SIZE_Y = 0.84f; //0.96f;
float BUTTONTAB_TEXT_SIZE_X = 0.35f;
float BUTTONTAB_TEXT_SIZE_Y = 0.7f; //0.8f;
float PANEL_TEXT_SIZE_X = 0.8f;
float PANEL_TEXT_SIZE_Y = 1.2f; //0.96f/0.7f; //??
float MEMCARD_ACCESS_MSG_SIZE_X = 0.84f;
float MEMCARD_ACCESS_MSG_SIZE_Y = 1.12f; //1.28f;
CRGBA SELECTED_TEXT_COLOR(255, 182, 48, 255);
CRGBA BACKGROUND_SPLASH_COLOR(48, 48, 48, 255);
CVector2D CONTR_DESCR_NEW_TEXTSCALE(0.4564f, 0.63f); // 0.72
CVector2D CONFIGS_NEW_TEXTSCALE(0.49f, 0.7f); // 0.8
CVector2D AUDIO_OUTPUT_POS(0.0f, 0.0f);
CVector2D AUDIO_RSTATION_POS(154.0f, 0.0f);
CVector2D DISPLAY_BRIGHTNESS_POS(0.0f, 0.0f);
CRGBA TEXT_COLOR(150, 110, 30, 255);
CRGBA PAD_TEXT_COLOR(200, 200, 200, 255);
CRGBA CRIM_RATING_TEXT_COLOR(255, 182, 48, 255);
CRGBA SCROLL_TEXT_COLOR(150, 110, 30, 255);
CRGBA TITLE_TEXT_COLOR(170, 130, 50, 255);
CRGBA TEXT_SHADOW_COLOR(0, 0, 0, 255);
CVector2D SHADOW_VECTOR(1.0f, 1.0f);
CRGBA SLIDER_RIGHT_COLOR(20, 94, 136, 255);
CRGBA SLIDER_LEFT_COLOR(86, 196, 255, 255);
CRGBA MENU_SELECTED_COLOR(255, 212, 88, 255);
CRGBA rgbaATC(96, 96, 96, 255); // active text color. not constant
float BUTTONTAB_TEXT_X_SCALES[NUM_PAGES] = { 1.0f };
float PANEL_TEXT_X_SCALES[NUM_PAGES] = { 1.0f };
int32 MemoryCardSlotSelected;
uint32 TimeToStopPadShaking;
bool bFrontEnd_ReloadObrTxtGxt;
bool bMemoryCardStartUpMenus_ExitNow;
extern CMenuPage MenuPage_SaveBasic;
CMenuPage *pActiveMenuPage;
CMenuPage *pMenuSave = &MenuPage_SaveBasic;
bool bMemoryCardSpecialZone;
bool bIgnoreTriangleButton;
bool gErrorSampleTriggered;
bool gMusicPlaying;
CMenuPage MenuPage_Stats;
CMenuLineLister MenuStats_1;
CMenuPictureAndText MenuStats_2; // criminal rating
CMenuPage MenuPage_Briefs;
CMenuPictureAndText MenuBriefs_1;
CMenuDummy MenuBriefs_2;
CMenuPage MenuPage_SaveBasic;
CMenuMultiChoiceTriggered MenuSaveB_1; // "Load Game", "Delete Game", "New Game"
CMenuPage MenuPage_SaveNewGame;
CMenuPictureAndText MenuSaveNG_1; // "Load Game", "Delete Game", "New Game"
CMenuMultiChoiceTriggered MenuSaveNG_2; // "No", "Yes"
CMenuPage MenuPage_SaveLoadGame;
CMenuPictureAndText MenuSaveLG_1; // "Load Game", "Delete Game", "New Game"
CMenuMultiChoiceTwoLinesTriggered MenuSaveLG_2; // save games
CMenuPage MenuPage_SaveDeleteGame;
CMenuPictureAndText MenuSaveDG_1; // "Load Game", "Delete Game", "New Game"
CMenuMultiChoiceTwoLinesTriggered MenuSaveDG_2; // save games
CMenuPage MenuPage_Controls;
CMenuPictureAndText MenuControls_3; // controller images
CMenuPictureAndText MenuControls_6;
CMenuPictureAndText MenuControls_4;
CMenuPictureAndText MenuControls_7;
CMenuMultiChoiceTriggeredAlways MenuControls_1; // "Configuration:" "Setup1", "Setup2", "Setup3", "Setup4"
CMenuMultiChoiceTriggered MenuControls_2; // "Controller Display:" "On Foot", "In Car"
CMenuOnOffTriggered MenuControls_5; // "Vibration:"
CMenuPageAnyMove MenuPage_Audio;
CMenuSliderTriggered MenuAudio_1; // "Music Volume"
CMenuMultiChoiceTriggered MenuAudio_4; // "Output:" "Stereo", "Mono"
CMenuSliderTriggered MenuAudio_2; // "SFX Volume"
CMenuMultiChoicePicturedTriggeredAnyMove MenuAudio_3; // "Radio station select:"
CMenuPage MenuPage_Display;
CMenuSlider MenuDisplay_1; // "Brightness"
#ifdef GTA_PC
CMenuOnOffTriggered MenuDisplay_2; // "Trails:"
#else
CMenuOnOff MenuDisplay_2; // "Trails:"
#endif
CMenuOnOff MenuDisplay_3; // "Subtitles:"
CMenuOnOff MenuDisplay_4; // "Wide Screen:"
CMenuPage MenuPage_Language;
CMenuMultiChoiceTriggered MenuLanguage_1; // "English", "French", "German", "Italian", "Spanish"
CMenuPage MenuPageSaveZone_SaveGame;
CMenuMultiChoiceTriggered MenuSaveZoneSG_1; // "Save game", "Cancel"
CMenuPage MenuPageSaveZone_SaveSlots;
CMenuMultiChoiceTwoLinesTriggered MenuSaveZoneSSL_1; // "Cancel"
CMenuPage MenuPageSaveZone_SavedSuccessfully;
CMenuPictureAndText MenuSaveZoneSS_1; // "Game saved successfully!" "Your saved filename is:"
CMenuMultiChoiceTriggered MenuSaveZoneSS_2; // "Quit"
CMenuPage MenuPageSaveZone_Message;
CMenuPictureAndText MenuSaveZoneMSG_1; // "Save Failed! Check memory card (PS2) in MEMORY CARD slot 1 and please try again."
CMenuMultiChoiceTriggered MenuSaveZoneMSG_2; // "OK"
CMenuPage MenuPageSaveZone_QuestionYesNo;
CMenuPictureAndText MenuSaveZoneQYN_1; // "Save Failed! Check memory card (PS2) in MEMORY CARD slot 1 and please try again."
CMenuMultiChoiceTriggered MenuSaveZoneQYN_2; // "Yes", "No"
CMenuPage MenuPageSaveZone_FormatCard;
CMenuMultiChoiceTriggered MenuSaveZoneFC_1; // "Memory card (PS2) in MEMORY CARD slot 1 is unformatted. Would you like to format memory card (PS2) in MEMORY CARD slot 1?" "No" "Yes"
CMenuPage MenuPageSaveZone_ErrorFormat;
CMenuMultiChoiceTriggered MenuSaveZoneEF_1; // "Format Failed! Check memory card (PS2) in MEMORY CARD slot 1 and please try again." "OK"
VALIDATE_SIZE(CPlaceableText, 0x10);
VALIDATE_SIZE(CPlaceableShText, 0x20);
VALIDATE_SIZE(CPlaceableShTextTwoLines, 0x30);
VALIDATE_SIZE(CPlaceableShOption, 0x28);
VALIDATE_SIZE(CPlaceableShOptionTwoLines, 0x38);
VALIDATE_SIZE(CPlaceableSprite, 0x18);
VALIDATE_SIZE(CPlaceableShSprite, 0x34);
VALIDATE_SIZE(CMenuMultiChoice, 0x2CC);
VALIDATE_SIZE(CMenuMultiChoiceTriggered, 0x310);
VALIDATE_SIZE(CMenuMultiChoiceTwoLines, 0x3CC);
VALIDATE_SIZE(CMenuOnOff, 0x90);
#include "FrontendTriggers.h"
static const char* FrontendFilenames[][2] =
{
{"fe2_mainpanel_ul", "" },
{"fe2_mainpanel_ur", "" },
{"fe2_mainpanel_dl", "" },
{"fe2_mainpanel_dr", "" },
{"fe2_mainpanel_dr2", "" },
{"fe2_tabactive", "" },
{"fe_iconbrief", "" },
{"fe_iconstats", "" },
{"fe_iconcontrols", "" },
{"fe_iconsave", "" },
{"fe_iconaudio", "" },
{"fe_icondisplay", "" },
{"fe_iconlanguage", "" },
{"fe_controller", "" },
{"fe_controllersh", "" },
{"fe_arrows1", "" },
{"fe_arrows2", "" },
{"fe_arrows3", "" },
{"fe_arrows4", "" },
{"fe_radio1", "" },
{"fe_radio2", "" },
{"fe_radio3", "" },
{"fe_radio4", "" },
{"fe_radio5", "" },
{"fe_radio6", "" },
{"fe_radio7", "" },
{"fe_radio8", "" },
{"fe_radio9", "" },
};
int32 CMenuManager::m_PrefsSfxVolume = 102;
int32 CMenuManager::m_PrefsMusicVolume = 102;
int32 CMenuManager::m_PrefsBrightness = 256;
bool CMenuManager::m_PrefsShowTrails = true;
bool CMenuManager::m_PrefsShowSubtitles = true;
bool CMenuManager::m_PrefsAllowNastyGame = true;
int32 CMenuManager::m_PrefsRadioStation = 0;
int32 CMenuManager::m_PrefsStereoMono = 0;
int8 CMenuManager::m_PrefsUseWideScreen = 0;
int32 CMenuManager::m_PrefsLanguage = 0;
CMenuManager::CONTRCONFIG CMenuManager::m_PrefsControllerConfig = CONFIG_1;
bool CMenuManager::m_PrefsUseVibration = false;
#ifdef GTA_PC
#include "PlayerSkin.h"
int32 CMenuManager::OS_Language = 0;
int8 CMenuManager::m_PrefsVsync = 1;
int8 CMenuManager::m_PrefsVsyncDisp = 1;
int8 CMenuManager::m_PrefsFrameLimiter = 1;
int8 CMenuManager::m_PrefsSpeakers;
int32 CMenuManager::m_ControlMethod = CONTROL_CLASSIC;
int8 CMenuManager::m_PrefsDMA = 1;
float CMenuManager::m_PrefsLOD = 1.0f;
char CMenuManager::m_PrefsSkinFile[256] = DEFAULT_SKIN_NAME;
#ifndef MASTER
bool CMenuManager::m_PrefsMarketing;
bool CMenuManager::m_PrefsDisableTutorials;
#endif // !MASTER
#ifdef MENU_MAP
bool CMenuManager::bMenuMapActive;
float CMenuManager::fMapSize;
float CMenuManager::fMapCenterY;
float CMenuManager::fMapCenterX;
#endif
#endif
CMenuManager::CMenuManager(void)
{
int32 i;
SetSoundLevelsForMusicMenu();
m_pageState = PAGESTATE_NORMAL;
m_currentPage = PAGE_FIRST;
m_newPage = PAGE_FIRST;
m_bMenuActive = false;
m_bSaveMenuActive = false;
m_bRenderGameInMenu = false;
m_bTexturesLoaded = false;
m_nPageLeftTimer = 0;
m_nPageRightTimer = 0;
m_nChangePageTimer = 0;
field_18 = 0;
m_fade = 255;
m_someAlpha = 255;
m_position.x = 0.0f;
m_position.y = 0.0f;
m_nSlidingDir = SLIDE_TO_BOTTOM;
m_nStartPauseTimer = 0;
m_nEndPauseTimer = 0;
m_bInitialised = false;
m_bWantToUpdateContent = false;
field_3C = 0;
m_bInSaveZone = false;
for(i = 0; i < NUM_PAGES; i++){
BUTTONTAB_TEXT_X_SCALES[i] = 1.0f;
PANEL_TEXT_X_SCALES[i] = 1.0f;
}
#ifdef GTA_PC
TheCamera.m_bUseMouse3rdPerson = m_ControlMethod == CONTROL_STANDARD;
CMBlur::BlurOn = m_PrefsShowTrails;
#endif
}
void
CMenuManager::LoadAllTextures(void)
{
int32 i;
if(m_bTexturesLoaded)
return;
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_STARTING, 0);
DMAudio.Service();
DoRWStuffStartOfFrame(0, 0, 0, 0, 0, 0, 255);
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERLINEAR);
CSprite2d *splash = LoadSplash(nil);
if(splash)
splash->Draw(CRect(0.0f, 0.0f, SCRW, SCRH), BACKGROUND_SPLASH_COLOR);
else // doesn't exist!!
CHud::Sprites[19].Draw(CRect(0.0f, 0.0f, SCRW, SCRH), BACKGROUND_SPLASH_COLOR);
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERMIPNEAREST);
DoRWStuffEndOfFrame();
CFileMgr::SetDir("");
CFileMgr::SetDir("");
CTimer::Stop();
CStreaming::MakeSpaceFor(60*1024);
CStreaming::ImGonnaUseStreamingMemory();
CGame::TidyUpMemory(false, true);
int32 slot = CTxdStore::FindTxdSlot("frontend");
if(slot == -1)
slot = CTxdStore::AddTxdSlot("frontend");
printf("LOAD frontend\n");
CTxdStore::LoadTxd(slot, "MODELS/FRONTEND.TXD");
CTxdStore::SetCurrentTxd(slot);
CStreaming::IHaveUsedStreamingMemory();
CTimer::Update();
for(i = 0; i < NUM_SPRIRES; i++)
{
m_sprites[i].SetTexture(FrontendFilenames[i][0], FrontendFilenames[i][1]);
m_sprites[i].SetAddressing(rwTEXTUREADDRESSBORDER);
}
m_bTexturesLoaded = true;
}
void
CMenuManager::UnloadTextures(void)
{
int32 slot;
int32 i;
if ( !m_bTexturesLoaded )
return;
slot = CTxdStore::FindTxdSlot("frontend");
#ifdef FIX_BUGS
for(i = 0; i < NUM_SPRIRES; i++)
m_sprites[i].Delete();
#endif
printf("REMOVE frontend\n");
CTxdStore::RemoveTxd(slot);
m_bTexturesLoaded = false;
}
void
CMenuManager::InitialiseMenusOnce(void)
{
if(m_bInitialised)
return;
m_bInitialised = true;
InitialiseChangedLanguageSettings();
// Normal menu
MenuPage_Stats.Initialise();
MenuPage_Briefs.Initialise();
MenuPage_SaveBasic.Initialise();
MenuPage_SaveNewGame.Initialise();
MenuPage_SaveLoadGame.Initialise();
MenuPage_SaveDeleteGame.Initialise();
MenuPage_Controls.Initialise();
MenuPage_Audio.Initialise();
MenuPage_Display.Initialise();
MenuPage_Language.Initialise();
// Save menu
MenuPageSaveZone_SaveGame.Initialise();
MenuPageSaveZone_SaveSlots.Initialise();
MenuPageSaveZone_SavedSuccessfully.Initialise();
MenuPageSaveZone_Message.Initialise();
MenuPageSaveZone_QuestionYesNo.Initialise();
MenuPageSaveZone_FormatCard.Initialise();
MenuPageSaveZone_ErrorFormat.Initialise();
/* Stats */
MenuStats_1.ResetNumberOfTextLines();
MenuStats_1.SetPosition(X(75.0f), Y(70.0f));
MenuStats_1.m_width = X(480.0f);
MenuStats_1.m_height = Y(274.0f);
MenuStats_1.field_10E8 = 0; // unknown
MenuStats_1.m_lineSpacing = Y(20.0f);
MenuStats_1.m_scrollSpeed = 1.0f;
MenuStats_1.SetLinesColor(SCROLL_TEXT_COLOR);
MenuStats_1.ResetNumberOfTextLines();
MenuPage_Stats.AddMenu(&MenuStats_1);
MenuStats_2.SetPosition(X(75.0f), Y(50.0f));
MenuStats_2.SetTextsColor(CRIM_RATING_TEXT_COLOR);
MenuPage_Stats.AddMenu(&MenuStats_2);
MenuPage_Stats.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPage_Stats.ActivatePage();
CVector2D saveGameTextScale(X(0.49f), Y(0.7f));
CVector2D defaultTextScale(X(MENU_TEXT_SIZE_X), Y(MENU_TEXT_SIZE_Y));
/* Basic Load/Delete/New Game */
MenuSaveB_1.m_numOptions = 0;
MenuSaveB_1.SetPosition(X(220.0f), Y(110.0f));
MenuSaveB_1.AddOption(TheText.Get("FES_LGA"), 0.0f, Y(20.0f), TriggerSave_LoadGameSelect, false, true);
MenuSaveB_1.AddOption(TheText.Get("FES_DGA"), 0.0f, Y(40.0f), TriggerSave_DeleteGameSelect, false, true);
MenuSaveB_1.AddOption(TheText.Get("FES_NGA"), 0.0f, Y(60.0f), TriggerSave_NewGameSelectYes, false, true);
MenuSaveB_1.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR, TEXT_COLOR);
MenuPage_SaveBasic.AddMenu(&MenuSaveB_1);
MenuPage_SaveBasic.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPage_SaveBasic.ActivatePage();
/* New Game - but unused */
MenuSaveNG_1.m_numTexts = 0;
MenuSaveNG_1.SetPosition(X(220.0f), Y(110.0f));
MenuSaveNG_1.AddText(TheText.Get("FES_LGA"), 0.0f, Y(20.0f), TEXT_COLOR, true);
MenuSaveNG_1.AddText(TheText.Get("FES_DGA"), 0.0f, Y(40.0f), TEXT_COLOR, true);
MenuSaveNG_1.AddText(TheText.Get("FES_NGA"), 0.0f, Y(60.0f), SELECTED_TEXT_COLOR, true);
MenuPage_SaveNewGame.AddMenu(&MenuSaveNG_1);
MenuSaveNG_2.m_numOptions = 0;
MenuSaveNG_2.SetPosition(X(250.0f), Y(170.0f));
MenuSaveNG_2.AddOption(TheText.Get("FEM_NO"), 0.0f, 0.0f, TriggerSave_BackToMainMenu, false, false);
MenuSaveNG_2.AddOption(TheText.Get("FEM_YES"), 0.0f, Y(20.0f), TriggerSave_NewGameSelectYes, false, false);
MenuSaveNG_2.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR, TEXT_COLOR);
MenuSaveNG_2.m_defaultCancel = TriggerSave_BackToMainMenu;
MenuPage_SaveNewGame.AddMenu(&MenuSaveNG_2);
MenuPage_SaveNewGame.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPage_SaveNewGame.ActivatePage();
/* Load Game */
MenuSaveLG_1.m_numTexts = 0;
MenuSaveLG_1.SetPosition(X(220.0f), Y(110.0f));
MenuSaveLG_1.AddText(TheText.Get("FES_LGA"), 0.0f, Y(20.0f), SELECTED_TEXT_COLOR, true);
MenuSaveLG_1.AddText(TheText.Get("FES_DGA"), 0.0f, Y(40.0f), TEXT_COLOR, true);
MenuSaveLG_1.AddText(TheText.Get("FES_NGA"), 0.0f, Y(60.0f), TEXT_COLOR, true);
MenuPage_SaveLoadGame.AddMenu(&MenuSaveLG_1);
MenuSaveLG_2.m_numOptions = 0;
MenuSaveLG_2.SetPosition(X(250.0f), Y(60.0f));
MenuSaveLG_2.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR, TEXT_COLOR);
MenuSaveLG_2.m_defaultCancel = TriggerSave_BackToMainMenuTwoLines;
MenuSaveLG_2.SetNewOldTextScale(true, saveGameTextScale, defaultTextScale, false);
MenuPage_SaveLoadGame.AddMenu(&MenuSaveLG_2);
MenuPage_SaveLoadGame.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPage_SaveLoadGame.ActivatePage();
/* Delete Game */
MenuSaveDG_1.m_numTexts = 0;
MenuSaveDG_1.SetPosition(X(220.0f), Y(110.0f));
MenuSaveDG_1.AddText(TheText.Get("FES_LGA"), 0.0f, Y(20.0f), TEXT_COLOR, true);
MenuSaveDG_1.AddText(TheText.Get("FES_DGA"), 0.0f, Y(40.0f), SELECTED_TEXT_COLOR, true);
MenuSaveDG_1.AddText(TheText.Get("FES_NGA"), 0.0f, Y(60.0f), TEXT_COLOR, true);
MenuPage_SaveDeleteGame.AddMenu(&MenuSaveDG_1);
MenuSaveDG_2.m_numOptions = 0;
MenuSaveDG_2.SetPosition(X(250.0f), Y(60.0f));
MenuSaveDG_2.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR, TEXT_COLOR);
MenuSaveDG_2.m_defaultCancel = TriggerSave_BackToMainMenuTwoLines;
MenuSaveDG_2.SetNewOldTextScale(true, saveGameTextScale, defaultTextScale, false);
MenuPage_SaveDeleteGame.AddMenu(&MenuSaveDG_2);
MenuPage_SaveDeleteGame.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPage_SaveDeleteGame.ActivatePage();
CVector2D briefsTextScale(X(0.525f), Y(0.7f));
CVector2D defaultTextScale1(X(MENU_TEXT_SIZE_X), Y(MENU_TEXT_SIZE_Y));
/* Briefs */
MenuBriefs_1.m_numTexts = 0;
MenuBriefs_1.SetPosition(X(60.0f), Y(60.0f));
MenuBriefs_1.SetTextsColor(TEXT_COLOR);
MenuBriefs_1.SetNewOldTextScale(true, briefsTextScale, defaultTextScale1);
MenuBriefs_1.SetNewOldShadowWrapX(true, X(600.0f+SHADOW_VECTOR.x), X(600.0f));
MenuPage_Briefs.AddMenu(&MenuBriefs_1);
MenuPage_Briefs.AddMenu(&MenuBriefs_2);
MenuPage_Briefs.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPage_Briefs.ActivatePage();
CVector2D defaultTextScale2(X(MENU_TEXT_SIZE_X), Y(MENU_TEXT_SIZE_Y));
CVector2D defaultTextScale3(X(MENU_TEXT_SIZE_X), Y(MENU_TEXT_SIZE_Y));
CVector2D CONTR_DESCR_NEW_TEXTSCALE_scaled(X(CONTR_DESCR_NEW_TEXTSCALE.x), Y(CONTR_DESCR_NEW_TEXTSCALE.y));
CVector2D CONFIGS_NEW_TEXTSCALE_scaled(X(CONFIGS_NEW_TEXTSCALE.x), Y(CONFIGS_NEW_TEXTSCALE.y));
/* Controls */
MenuControls_3.m_numTexts = 0;
MenuControls_3.m_numSprites = 0;
MenuControls_3.SetPosition(X(170.0f), Y(88.0f));
MenuControls_3.AddPicture(&m_sprites[FE_CONTROLLER],
&m_sprites[FE_CONTROLLERSH],
0.0f, 0.0f, X(235.2f), Y(175.2), CRGBA(255, 255, 255, 255));
MenuControls_3.AddPicture(&m_sprites[FE_ARROWS1],
0.0f, 0.0f, X(235.2f), Y(175.2), CRGBA(255, 255, 255, 255));
MenuControls_3.SetNewOldTextScale(true, CONTR_DESCR_NEW_TEXTSCALE_scaled, defaultTextScale2);
InitialiseTextsInMenuControllerOnFoot(&MenuControls_3, CMenuManager::m_PrefsControllerConfig);
MenuControls_3.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuControls_3.SetNewOldShadowWrapX(true, X(600.0f+SHADOW_VECTOR.x), X(600.0f));
MenuPage_Controls.AddMenu(&MenuControls_3);
MenuControls_6.m_numTexts = 0;
MenuControls_6.m_numSprites = 0;
MenuControls_6.SetPosition(X(170.0f), Y(88.0f));
MenuControls_6.AddPicture(&m_sprites[FE_CONTROLLER],
&m_sprites[FE_CONTROLLERSH],
0.0f, 0.0f, X(235.2f), Y(175.2), CRGBA(255, 255, 255, 255));
MenuControls_6.AddPicture(&m_sprites[FE_ARROWS3],
0.0f, 0.0f, X(235.2f), Y(175.2), CRGBA(255, 255, 255, 255));
MenuControls_6.SetNewOldTextScale(true, CONTR_DESCR_NEW_TEXTSCALE_scaled, defaultTextScale2);
InitialiseTextsInMenuControllerOnFoot(&MenuControls_6, CMenuManager::CONFIG_2);
MenuControls_6.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuControls_6.SetNewOldShadowWrapX(true, X(600.0f+SHADOW_VECTOR.x), X(600.0f));
MenuControls_4.m_numTexts = 0;
MenuControls_4.m_numSprites = 0;
MenuControls_4.SetPosition(X(170.0f), Y(88.0f));
MenuControls_4.AddPicture(&m_sprites[FE_CONTROLLER],
&m_sprites[FE_CONTROLLERSH],
0.0f, 0.0f, X(235.2f), Y(175.2), CRGBA(255, 255, 255, 255));
MenuControls_4.AddPicture(&m_sprites[FE_ARROWS2],
0.0f, 0.0f, X(235.2f), Y(175.2), CRGBA(255, 255, 255, 255));
MenuControls_4.SetNewOldTextScale(true, CONTR_DESCR_NEW_TEXTSCALE_scaled, defaultTextScale2);
InitialiseTextsInMenuControllerInCar(&MenuControls_4, CMenuManager::m_PrefsControllerConfig);
MenuControls_4.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuControls_4.SetNewOldShadowWrapX(true, X(600.0f+SHADOW_VECTOR.x), X(600.0f));
MenuControls_7.m_numTexts = 0;
MenuControls_7.m_numSprites = 0;
MenuControls_7.SetPosition(X(170.0f), Y(88.0f));
MenuControls_7.AddPicture(&m_sprites[FE_CONTROLLER],
&m_sprites[FE_CONTROLLERSH],
0.0f, 0.0f, X(235.2f), Y(175.2), CRGBA(255, 255, 255, 255));
MenuControls_7.AddPicture(&m_sprites[FE_ARROWS4],
0.0f, 0.0f, X(235.2f), Y(175.2), CRGBA(255, 255, 255, 255));
MenuControls_7.SetNewOldTextScale(true, CONTR_DESCR_NEW_TEXTSCALE_scaled, defaultTextScale2);
InitialiseTextsInMenuControllerInCar(&MenuControls_7, CMenuManager::CONFIG_2);
MenuControls_7.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuControls_7.SetNewOldShadowWrapX(true, X(600.0f+SHADOW_VECTOR.x), X(600.0f));
MenuControls_1.m_numOptions = 0;
MenuControls_1.SetPosition(X(284.0f), Y(290.0f));
MenuControls_1.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR, SELECTED_TEXT_COLOR);
MenuControls_1.SetNewOldTextScale(true, CONFIGS_NEW_TEXTSCALE_scaled, defaultTextScale3, false);
MenuControls_1.AddTitle(TheText.Get("FEC_CCF"), 0.0f, 0.0f, true);
MenuControls_1.AddOption(TheText.Get("FEC_CF1"), X(15.0f), Y(2.0f), TriggerControls_ContrConfig, false, false);
MenuControls_1.AddOption(TheText.Get("FEC_CF2"), X(85.0f), Y(2.0f), TriggerControls_ContrConfig, false, false);
MenuControls_1.AddOption(TheText.Get("FEC_CF3"), X(155.0f), Y(2.0f), TriggerControls_ContrConfig, false, false);
MenuControls_1.AddOption(TheText.Get("FEC_CF4"), X(225.0f), Y(2.0f), TriggerControls_ContrConfig, false, false);
MenuPage_Controls.AddMenu(&MenuControls_1);
MenuControls_1.m_alwaysTrigger = (CMenuMultiChoiceTriggered::Trigger)TriggerControls_DrawContrConfig;
MenuControls_1.m_alwaysHighlightTrigger = (CMenuMultiChoiceTriggered::Trigger)TriggerControls_DrawHNContrConfig;
MenuControls_1.m_alwaysNormalTrigger = (CMenuMultiChoiceTriggered::Trigger)TriggerControls_DrawHNContrConfig;
MenuControls_2.m_numOptions = 0;
MenuControls_2.SetPosition(X(284.0f), Y(310.0f));
MenuControls_2.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR, SELECTED_TEXT_COLOR);
MenuControls_2.SetNewOldTextScale(true, CONFIGS_NEW_TEXTSCALE_scaled, defaultTextScale3, false);
MenuControls_2.AddTitle(TheText.Get("FEC_CDP"), 0.0f, 0.0f, true);
MenuControls_2.AddOption(TheText.Get("FEC_ONF"), X(15.0f), Y(2.0f), (CMenuMultiChoiceTriggered::Trigger)TriggerControls_ContrDisplay, false, false);
MenuControls_2.AddOption(TheText.Get("FEC_INC"), X(105.0f), Y(2.0f), (CMenuMultiChoiceTriggered::Trigger)TriggerControls_ContrDisplay, false, false);
MenuPage_Controls.AddMenu(&MenuControls_2);
MenuControls_2.m_bTwoState = true;
MenuControls_2.SetMenuSelection(0);
MenuControls_5.SetPosition(X(284.0f), Y(330.0f));
MenuControls_5.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR);
MenuControls_5.SetNewOldTextScale(true, CONFIGS_NEW_TEXTSCALE_scaled, defaultTextScale3, false);
MenuControls_5.AddTitle(TheText.Get("FEC_VIB"), false, 0.0f, 0.0f, true);
MenuControls_5.SetOptionPosition(X(15.0f), Y(2.0f), TriggerControls_Vibrations, false);
MenuPage_Controls.AddMenu(&MenuControls_5);
MenuPage_Controls.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPage_Controls.ActivatePage();
/* Audio */
CVector2D audioOutputScale(X(0.49f), Y(0.63f));
CVector2D defaultTextScale4(X(MENU_TEXT_SIZE_X), Y(MENU_TEXT_SIZE_Y));
FEC_MOVETAB movetab;
MenuAudio_1.SetPosition(X(70.0f), Y(80.0f));
MenuAudio_1.SetColors(TEXT_COLOR, TEXT_COLOR, SLIDER_LEFT_COLOR, SLIDER_RIGHT_COLOR);
MenuAudio_1.AddTitle(TheText.Get("FEA_MUS"), 0.0f, 0.0f);
MenuAudio_1.AddTickBox(X(15.0f), Y(20.0f), X(150.0f), Y(5.0f), Y(45.0f), TriggerAudio_MusicVolume, TriggerAudio_MusicVolumeAlways);
movetab.right = 1;
movetab.left = 2;
movetab.down = 3;
movetab.up = 3;
MenuPage_Audio.AddMenu(&MenuAudio_1, &movetab);
MenuAudio_4.m_numOptions = 0;
MenuAudio_4.SetPosition(X(280.0f), Y(80.0f));
MenuAudio_4.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR, SELECTED_TEXT_COLOR);
MenuAudio_4.SetNewOldTextScale(true, audioOutputScale, defaultTextScale4, false);
MenuAudio_4.AddTitle(TheText.Get("FEA_OUT"), X(AUDIO_OUTPUT_POS.x), Y(AUDIO_OUTPUT_POS.y), false);
MenuAudio_4.AddOption(TheText.Get("FEA_ST"), X(-15.0f), Y(30.0f), TriggerAudio_StereoMono, false, false);
MenuAudio_4.AddOption(TheText.Get("FEA_MNO"), X(55.0f), Y(30.0f), TriggerAudio_StereoMono, false, false);
movetab.right = 2;
movetab.left = 0;
movetab.down = 3;
movetab.up = 3;
MenuPage_Audio.AddMenu(&MenuAudio_4, &movetab);
MenuAudio_4.m_bTwoState = true;
MenuAudio_2.SetPosition(X(410.0f), Y(80.0f));
MenuAudio_2.SetColors(TEXT_COLOR, TEXT_COLOR, SLIDER_LEFT_COLOR, SLIDER_RIGHT_COLOR);
MenuAudio_2.AddTitle(TheText.Get("FEA_SFX"), 0.0f, 0.0f);
MenuAudio_2.AddTickBox(X(5.0f), Y(20.0f), X(150.0f), Y(5.0f), Y(45.0f), TriggerAudio_SfxVolume, TriggerAudio_SfxVolumeAlways);
movetab.right = 0;
movetab.left = 1;
movetab.down = 3;
movetab.up = 3;
MenuPage_Audio.AddMenu(&MenuAudio_2, &movetab);
MenuAudio_3.m_numOptions = 0;
MenuAudio_3.SetPosition(X(50.0f), Y(170.0f));
MenuAudio_3.SetColors(TITLE_TEXT_COLOR, CRGBA(64, 64, 64, 255), CRGBA(250, 250, 250, 255));
MenuAudio_3.AddTitle(TheText.Get("FEA_RSS"), X(AUDIO_RSTATION_POS.x), Y(AUDIO_RSTATION_POS.y), false);
// first row
movetab.right = 1;
movetab.left = 4;
movetab.down = 5;
movetab.up = 5;
MenuAudio_3.AddOption(&m_sprites[FE_RADIO1], &movetab, 0.0f, Y(18.0f),
CVector2D(X(96.0f), YF(72.0f)), TriggerAudio_RadioStation, false);
movetab.right = 2;
movetab.left = 0;
movetab.down = 6;
movetab.up = 6;
MenuAudio_3.AddOption(&m_sprites[FE_RADIO2], &movetab, X(106.0f), Y(20.0f),
CVector2D(X(79.2f), YF(81.0f)), TriggerAudio_RadioStation, false);
movetab.right = 3;
movetab.left = 1;
movetab.down = 7;
movetab.up = 7;
MenuAudio_3.AddOption(&m_sprites[FE_RADIO5], &movetab, X(210.0f), Y(20.0f),
CVector2D(X(86.4f), YF(72.0f)), TriggerAudio_RadioStation, false);
movetab.right = 4;
movetab.left = 2;
movetab.down = 8;
movetab.up = 8;
MenuAudio_3.AddOption(&m_sprites[FE_RADIO7], &movetab, X(324.0f), Y(5.0f),
CVector2D(X(115.2f), YF(102.0f)), TriggerAudio_RadioStation, false);
movetab.right = 0;
movetab.left = 3;
movetab.down = 8;
movetab.up = 8;
MenuAudio_3.AddOption(&m_sprites[FE_RADIO8], &movetab, X(446.0f), Y(5.0f),
CVector2D(X(102.96f), YF(101.4f)), TriggerAudio_RadioStation, false);
// second row
movetab.right = 6;
movetab.left = 8;
movetab.down = 0;
movetab.up = 0;
MenuAudio_3.AddOption(&m_sprites[FE_RADIO3], &movetab, X(60.0f), Y(96.0f),
CVector2D(X(87.36f), YF(85.8f)), TriggerAudio_RadioStation, false);
movetab.right = 7;
movetab.left = 5;
movetab.down = 1;
movetab.up = 1;
MenuAudio_3.AddOption(&m_sprites[FE_RADIO4], &movetab, X(130.0f), Y(72.0f),
CVector2D(X(129.6f), YF(129.0f)), TriggerAudio_RadioStation, false);
movetab.right = 8;
movetab.left = 6;
movetab.down = 2;
movetab.up = 2;
MenuAudio_3.AddOption(&m_sprites[FE_RADIO6], &movetab, X(284.0f), Y(108.0f),
CVector2D(X(60.0f), YF(60.0f)), TriggerAudio_RadioStation, false);
movetab.right = 5;
movetab.left = 7;
movetab.down = 3;
movetab.up = 3;
MenuAudio_3.AddOption(&m_sprites[FE_RADIO9], &movetab, X(404.0f), Y(85.0f),
CVector2D(X(81.12f), YF(101.4f)), TriggerAudio_RadioStation, false);
movetab.right = 2;
movetab.left = 0;
movetab.down = 1;
movetab.up = 1;
MenuPage_Audio.AddMenu(&MenuAudio_3, &movetab);
MenuPage_Audio.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPage_Audio.ActivatePage();
/* Display */
MenuDisplay_1.SetPosition(X(240.0f), Y(140.0f));
MenuDisplay_1.SetColors(TEXT_COLOR, TEXT_COLOR, SLIDER_LEFT_COLOR, SLIDER_RIGHT_COLOR);
MenuDisplay_1.m_style = 0; // ticks
MenuDisplay_1.AddTitle(TheText.Get("FED_BRI"), X(DISPLAY_BRIGHTNESS_POS.x), Y(DISPLAY_BRIGHTNESS_POS.y));
MenuDisplay_1.AddTickBox(X(-30.0f), Y(20.0f), X(200.0f), Y(40.0f), Y(40.0f));
MenuPage_Display.AddMenu(&MenuDisplay_1);
MenuDisplay_2.SetPosition(X(290.0f), Y(240.0f));
MenuDisplay_2.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR);
MenuDisplay_2.AddTitle(TheText.Get("FED_TRA"), false, 0.0f, 0.0f, true);
#ifdef GTA_PC
MenuDisplay_2.SetOptionPosition(X(40.0f), 0.0f, TriggerDisplay_Trails, false);
#else
MenuDisplay_2.SetOptionPosition(X(40.0f), 0.0f, false);
#endif
MenuDisplay_2.m_bTwoState = true;
MenuPage_Display.AddMenu(&MenuDisplay_2);
MenuDisplay_3.SetPosition(X(290.0f), Y(260.0f));
MenuDisplay_3.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR);
MenuDisplay_3.AddTitle(TheText.Get("FED_SUB"), false, 0.0f, 0.0f, true);
MenuDisplay_3.SetOptionPosition(X(40.0f), 0.0f, false);
MenuDisplay_3.m_bTwoState = true;
MenuPage_Display.AddMenu(&MenuDisplay_3);
MenuDisplay_4.SetPosition(X(290.0f), Y(280.0f));
MenuDisplay_4.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR);
MenuDisplay_4.AddTitle(TheText.Get("FED_WIS"), false, 0.0f, 0.0f, true);
MenuDisplay_4.SetOptionPosition(X(40.0f), 0.0f, false);
MenuDisplay_4.m_bTwoState = true;
MenuPage_Display.AddMenu(&MenuDisplay_4);
MenuPage_Display.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPage_Display.ActivatePage();
/* Language */
MenuLanguage_1.m_numOptions = 0;
MenuLanguage_1.SetPosition(X(288.0f), Y(160.0f));
MenuLanguage_1.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR, SELECTED_TEXT_COLOR);
MenuLanguage_1.AddOption(TheText.Get("FEL_ENG"), 0.0f, 0.0f, TriggerLanguage_Language, false, false);
MenuLanguage_1.AddOption(TheText.Get("FEL_FRE"), 0.0f, Y(20.0f), TriggerLanguage_Language, false, false);
MenuLanguage_1.AddOption(TheText.Get("FEL_GER"), 0.0f, Y(40.0f), TriggerLanguage_Language, false, false);
MenuLanguage_1.AddOption(TheText.Get("FEL_ITA"), 0.0f, Y(60.0f), TriggerLanguage_Language, false, false);
MenuLanguage_1.AddOption(TheText.Get("FEL_SPA"), 0.0f, Y(80.0f), TriggerLanguage_Language, false, false);
MenuPage_Language.AddMenu(&MenuLanguage_1);
MenuPage_Language.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPage_Language.ActivatePage();
/*
* Save zone menu
*/
CVector2D saveGameTextScale2(X(0.49f), Y(0.7f));
CVector2D defaultTextScale5(X(MENU_TEXT_SIZE_X), Y(MENU_TEXT_SIZE_Y));
/* Save game */
MenuSaveZoneSG_1.m_numOptions = 0;
MenuSaveZoneSG_1.SetPosition(X(200.0f), Y(100.0f));
MenuSaveZoneSG_1.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR, TEXT_COLOR);
MenuSaveZoneSG_1.AddOption(TheText.Get("FESZ_SA"), 0.0f, Y(20.0f), TriggerSaveZone_SaveGameSelect, false, false);
MenuSaveZoneSG_1.AddOption(TheText.Get("FESZ_CA"), 0.0f, Y(40.0f), TriggerSaveZone_QuitMenu, false, false);
MenuSaveZoneSG_1.m_defaultCancel = TriggerSaveZone_QuitMenu;
MenuPageSaveZone_SaveGame.AddMenu(&MenuSaveZoneSG_1);
MenuSaveZoneSG_1.SetMenuSelection(1);
MenuPageSaveZone_SaveGame.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPageSaveZone_SaveGame.ActivatePage();
/* Select slot */
MenuSaveZoneSSL_1.m_numOptions = 0;
MenuSaveZoneSSL_1.SetPosition(X(160.0f), Y(100.0f));
MenuSaveZoneSSL_1.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR, TEXT_COLOR);
MenuSaveZoneSSL_1.AddOption(TheText.Get("FESZ_CA"), 0.0f, 0.0f, TriggerSaveZone_BackToMainMenuTwoLines, false, false);
MenuSaveZoneSSL_1.SetNewOldTextScale(true, saveGameTextScale2, defaultTextScale5, true);
MenuPageSaveZone_SaveSlots.AddMenu(&MenuSaveZoneSSL_1);
MenuSaveZoneSSL_1.SetMenuSelection(0);
MenuPageSaveZone_SaveSlots.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPageSaveZone_SaveSlots.ActivatePage();
/* Save successful */
MenuSaveZoneSS_1.m_numTexts = 0;
MenuSaveZoneSS_1.SetPosition(X(200.0f), Y(100.0f));
MenuSaveZoneSS_1.AddText(TheText.Get("FESZ_L1"), X(-40.0f), 0.0f, TITLE_TEXT_COLOR, false);
MenuSaveZoneSS_1.AddText(TheText.Get("FESZ_L2"), X(-40.0f), Y(20.0f), TITLE_TEXT_COLOR, false);
// twice this line?
MenuSaveZoneSS_1.AddText(TheText.Get("FESZ_L2"), X(-40.0f), Y(40.0f), TEXT_COLOR, false);
MenuPageSaveZone_SavedSuccessfully.AddMenu(&MenuSaveZoneSS_1);
MenuSaveZoneSS_2.m_numOptions = 0;
MenuSaveZoneSS_2.SetPosition(X(200.0f), Y(170.0f));
MenuSaveZoneSS_2.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR, TEXT_COLOR);
MenuSaveZoneSS_2.AddOption(TheText.Get("FESZ_QU"), X(60.0f), 0.0f, TriggerSaveZone_QuitMenu, false, false);
MenuPageSaveZone_SavedSuccessfully.AddMenu(&MenuSaveZoneSS_2);
MenuPageSaveZone_SavedSuccessfully.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPageSaveZone_SavedSuccessfully.ActivatePage();
MenuSaveZoneMSG_1.m_numTexts = 0;
MenuSaveZoneMSG_1.SetPosition(X(170.0f), Y(130.0f));
MenuSaveZoneMSG_1.AddText(TheText.Get("FESZ_SR"), X(-40.0f), 0.0f, TEXT_COLOR, false);
MenuSaveZoneMSG_1.SetTextsColor(TEXT_COLOR);
MenuSaveZoneMSG_1.SetNewOldShadowWrapX(true, X(600.0f+SHADOW_VECTOR.x-20.0f), X(580.0f));
MenuPageSaveZone_Message.AddMenu(&MenuSaveZoneMSG_1);
MenuSaveZoneMSG_2.m_numOptions = 0;
MenuSaveZoneMSG_2.SetPosition(X(170.0f), Y(180.0f));
MenuSaveZoneMSG_2.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR, TEXT_COLOR);
MenuSaveZoneMSG_2.AddOption(TheText.Get("FESZ_OK"), X(40.0f), 0.0f, TriggerSaveZone_QuitMenu, false, false);
MenuPageSaveZone_Message.AddMenu(&MenuSaveZoneMSG_2);
MenuPageSaveZone_Message.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPageSaveZone_Message.ActivatePage();
MenuSaveZoneQYN_1.m_numTexts = 0;
MenuSaveZoneQYN_1.SetPosition(X(170.0f), Y(130.0f));
MenuSaveZoneQYN_1.AddText(TheText.Get("FESZ_SR"), X(-40.0f), 0.0f, TEXT_COLOR, false);
MenuSaveZoneQYN_1.SetTextsColor(TEXT_COLOR);
MenuSaveZoneQYN_1.SetNewOldShadowWrapX(true, X(600.0f+SHADOW_VECTOR.x-20.0f), X(580.0f));
MenuPageSaveZone_QuestionYesNo.AddMenu(&MenuSaveZoneQYN_1);
MenuSaveZoneQYN_2.m_numOptions = 0;
MenuSaveZoneQYN_2.SetPosition(X(170.0f), Y(180.0f));
MenuSaveZoneQYN_2.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR, TEXT_COLOR);
MenuSaveZoneQYN_2.AddOption(TheText.Get("FEM_YES"), X(80.0f), 0.0f, TriggerSaveZone_QuitMenu, false, false);
MenuSaveZoneQYN_2.AddOption(TheText.Get("FEM_NO"), X(80.0f), Y(20.0f), TriggerSaveZone_QuitMenu, false, false);
MenuPageSaveZone_QuestionYesNo.AddMenu(&MenuSaveZoneQYN_2);
MenuPageSaveZone_QuestionYesNo.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPageSaveZone_QuestionYesNo.ActivatePage();
/* Format card */
MenuSaveZoneFC_1.m_numOptions = 0;
MenuSaveZoneFC_1.SetPosition(X(200.0f), Y(100.0f));
MenuSaveZoneFC_1.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR, TEXT_COLOR);
MenuSaveZoneFC_1.AddTitle(TheText.Get("FESZ_FM"), X(-100.0f), 0.0f, false);
MenuSaveZoneFC_1.AddOption(TheText.Get("FEM_NO"), X(40.0f), Y(95.0f), TriggerSaveZone_BackToMainMenu, false, false);
MenuSaveZoneFC_1.AddOption(TheText.Get("FEM_YES"), X(40.0f), Y(75.0f), TriggerSaveZone_FormatCardSelect, false, false);
MenuSaveZoneFC_1.m_defaultCancel = TriggerSaveZone_FormatCardSelect;
MenuPageSaveZone_FormatCard.AddMenu(&MenuSaveZoneFC_1);
MenuPageSaveZone_FormatCard.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPageSaveZone_FormatCard.ActivatePage();
/* Format error */
MenuSaveZoneEF_1.m_numOptions = 0;
MenuSaveZoneEF_1.SetPosition(X(200.0f), Y(100.0f));
MenuSaveZoneEF_1.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR, TEXT_COLOR);
MenuSaveZoneEF_1.AddTitle(TheText.Get("FESZ_FF"), X(-40.0f), 0.0f, false);
MenuSaveZoneEF_1.AddOption(TheText.Get("FESZ_OK"), X(70.0f), Y(20.0f), TriggerSaveZone_FormatFailedOK, false, false);
MenuPageSaveZone_ErrorFormat.AddMenu(&MenuSaveZoneEF_1);
MenuPageSaveZone_ErrorFormat.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
MenuPageSaveZone_ErrorFormat.ActivatePage();
pActiveMenuPage = &MenuPage_Stats;
pActiveMenuPage->ActivatePage();
InitialiseMenuContents();
m_bWantToUpdateContent = false;
}
void
CMenuManager::InitialiseChangedLanguageSettings(void)
{
if ( bFrontEnd_ReloadObrTxtGxt )
{
bFrontEnd_ReloadObrTxtGxt = false;
CTimer::Stop();
TheText.Unload();
TheText.Load();
CTimer::Update();
FrontEndMenuManager.AnaliseMenuContents();
CGame::frenchGame = false;
CGame::germanGame = false;
if ( m_PrefsAllowNastyGame )
CGame::nastyGame = true;
for ( int32 i = 0; i < NUM_PAGES; i++ )
{
BUTTONTAB_TEXT_X_SCALES[i] = 1.0f;
PANEL_TEXT_X_SCALES[i] = 1.0f;
}
switch ( m_PrefsLanguage )
{
case LANGUAGE_AMERICAN:
{
MENU_TEXT_SIZE_X = 0.644f;
MENU_TEXT_SIZE_Y = 0.84f;//0.96f;
BUTTONTAB_TEXT_SIZE_X = 0.35f;
BUTTONTAB_TEXT_SIZE_Y = 0.7f;//0.8f;
BUTTONTAB_TEXT_X_SCALES[6] = 0.94f;
CONTR_DESCR_NEW_TEXTSCALE.x = 0.4564f;
CONTR_DESCR_NEW_TEXTSCALE.y = 0.63f;//0.72f;
CONFIGS_NEW_TEXTSCALE.x = 0.49f;
CONFIGS_NEW_TEXTSCALE.y = 0.7f;//0.8f;
AUDIO_OUTPUT_POS.x = 0.0f;
AUDIO_OUTPUT_POS.y = 0.0f;
AUDIO_RSTATION_POS.x = 154.0f;
AUDIO_RSTATION_POS.y = 0.0f;
DISPLAY_BRIGHTNESS_POS.x = 0.0f;
DISPLAY_BRIGHTNESS_POS.y = 0.0f;
MEMCARD_ACCESS_MSG_SIZE_X = 0.84f;
MEMCARD_ACCESS_MSG_SIZE_Y = 1.12f;//1.28f;
break;
}
case LANGUAGE_FRENCH:
{
CGame::frenchGame = true;
if ( m_PrefsAllowNastyGame )
CGame::nastyGame = false;
MENU_TEXT_SIZE_X = 0.504f;
MENU_TEXT_SIZE_Y = 0.84f;//0.96f;
BUTTONTAB_TEXT_SIZE_X = 0.32f;
BUTTONTAB_TEXT_SIZE_Y = 0.7f;//0.8f;
BUTTONTAB_TEXT_X_SCALES[0] = 0.84f;
BUTTONTAB_TEXT_X_SCALES[3] = 0.84f;
PANEL_TEXT_X_SCALES[1] = 0.8f;
CONTR_DESCR_NEW_TEXTSCALE.x = 0.385f;
CONTR_DESCR_NEW_TEXTSCALE.y = 0.63f;//0.72f;
CONFIGS_NEW_TEXTSCALE.x = 0.455f;
CONFIGS_NEW_TEXTSCALE.y = 0.7f;//0.8f;
AUDIO_OUTPUT_POS.x = -15.0f;
AUDIO_OUTPUT_POS.y = 0.0f;
AUDIO_RSTATION_POS.x = 184.0f;
AUDIO_RSTATION_POS.y = 0.0f;
DISPLAY_BRIGHTNESS_POS.x = 20.0f;
DISPLAY_BRIGHTNESS_POS.y = 0.0f;
MEMCARD_ACCESS_MSG_SIZE_X = 0.84f;
MEMCARD_ACCESS_MSG_SIZE_Y = 1.12f;//1.28f;
break;
}
case LANGUAGE_GERMAN:
{
CGame::germanGame = true;
if ( m_PrefsAllowNastyGame )
CGame::nastyGame = false;
MENU_TEXT_SIZE_X = 0.546f;
MENU_TEXT_SIZE_Y = 0.84f;//0.96f;
BUTTONTAB_TEXT_SIZE_X = 0.32f;
BUTTONTAB_TEXT_SIZE_Y = 0.7f;//0.8f;
CONTR_DESCR_NEW_TEXTSCALE.x = 0.35f;
CONTR_DESCR_NEW_TEXTSCALE.y = 0.63f;//0.72f;
CONFIGS_NEW_TEXTSCALE.x = 0.434f;
CONFIGS_NEW_TEXTSCALE.y = 0.7f;//0.8f;
AUDIO_OUTPUT_POS.x = -15.0f;
AUDIO_OUTPUT_POS.y = 0.0f;
AUDIO_RSTATION_POS.x = 154.0f;
AUDIO_RSTATION_POS.y = 0.0f;
DISPLAY_BRIGHTNESS_POS.x = 20.0f;
DISPLAY_BRIGHTNESS_POS.y = 0.0f;
MEMCARD_ACCESS_MSG_SIZE_X = 0.7f;
MEMCARD_ACCESS_MSG_SIZE_Y = 1.12f;//1.28f;
break;
}
case LANGUAGE_ITALIAN:
{
MENU_TEXT_SIZE_X = 0.574f;
MENU_TEXT_SIZE_Y = 0.84f;//0.96f;
BUTTONTAB_TEXT_SIZE_X = 0.32f;
BUTTONTAB_TEXT_SIZE_Y = 0.7f;//0.8f;
BUTTONTAB_TEXT_X_SCALES[0] = 0.86f;
PANEL_TEXT_X_SCALES[1] = 0.9f;
CONTR_DESCR_NEW_TEXTSCALE.x = 0.385f;
CONTR_DESCR_NEW_TEXTSCALE.y = 0.63f;//0.72f;
CONFIGS_NEW_TEXTSCALE.x = 0.42f;
CONFIGS_NEW_TEXTSCALE.y = 0.7f;//0.8f;
AUDIO_OUTPUT_POS.x = 10.0f;
AUDIO_OUTPUT_POS.y = 0.0f;
AUDIO_RSTATION_POS.x = 194.0f;
AUDIO_RSTATION_POS.y = 0.0f;
DISPLAY_BRIGHTNESS_POS.x = 10.0f;
DISPLAY_BRIGHTNESS_POS.y = 0.0f;
MEMCARD_ACCESS_MSG_SIZE_X = 0.84f;
MEMCARD_ACCESS_MSG_SIZE_Y = 1.12f;//1.28f;
break;
}
case LANGUAGE_SPANISH:
{
MENU_TEXT_SIZE_X = 0.546f;
MENU_TEXT_SIZE_Y = 0.84f;//0.96f;
BUTTONTAB_TEXT_SIZE_X = 0.35f;
BUTTONTAB_TEXT_SIZE_Y = 0.7f;//0.8f;
BUTTONTAB_TEXT_X_SCALES[0] = 0.78f;
PANEL_TEXT_X_SCALES[1] = 0.95f;
CONTR_DESCR_NEW_TEXTSCALE.x = 0.364f;
CONTR_DESCR_NEW_TEXTSCALE.y = 0.63f;//0.72f;
CONFIGS_NEW_TEXTSCALE.x = 0.455f;
CONFIGS_NEW_TEXTSCALE.y = 0.7f;//0.8f;
AUDIO_OUTPUT_POS.x = 10.0f;
AUDIO_OUTPUT_POS.y = 0.0f;
AUDIO_RSTATION_POS.x = 124.0f;
AUDIO_RSTATION_POS.y = 0.0f;
DISPLAY_BRIGHTNESS_POS.x = 30.0f;
DISPLAY_BRIGHTNESS_POS.y = 0.0f;
MEMCARD_ACCESS_MSG_SIZE_X = 0.84f;
MEMCARD_ACCESS_MSG_SIZE_Y = 1.12f;//1.28f;
break;
}
}
}
}
void
CMenuManager::InitialiseMenuContents(void)
{
if ( m_bWantToUpdateContent == false )
{
m_bWantToUpdateContent = true;
m_pageState = PAGESTATE_NORMAL;
switch ( CPad::GetPad(0)->GetMode() )
{
case 3: m_PrefsControllerConfig = CONFIG_4; break;
case 2: m_PrefsControllerConfig = CONFIG_3; break;
case 1: m_PrefsControllerConfig = CONFIG_2; break;
case 0: m_PrefsControllerConfig = CONFIG_1; break;
}
MenuControls_1.SetMenuSelection(m_PrefsControllerConfig);
MenuControls_5.SetMenuSelection(m_PrefsUseVibration);
MenuAudio_1.SetMenuSelection(m_PrefsMusicVolume / 127.0f * 100.0f + 0.5f);
MenuAudio_2.SetMenuSelection(m_PrefsSfxVolume / 127.0f * 100.0f + 0.5f);
MenuAudio_3.SetMenuSelection(m_PrefsRadioStation);
MenuAudio_4.SetMenuSelection(m_PrefsStereoMono);
MenuDisplay_1.SetMenuSelection(m_PrefsBrightness / 512.0f * 100.0f + 0.5f);
#ifdef PS2
m_PrefsShowTrails = BlurOn;
#else
m_PrefsShowTrails = CMBlur::BlurOn;
#endif
MenuDisplay_2.SetMenuSelection(m_PrefsShowTrails);
MenuDisplay_3.SetMenuSelection(m_PrefsShowSubtitles);
MenuDisplay_4.SetMenuSelection(m_PrefsUseWideScreen);
MenuLanguage_1.SetMenuSelection(m_PrefsLanguage);
FillMenuWithMemCardFileListing(&MenuSaveLG_2, TriggerSave_BackToMainMenuTwoLines, TriggerSave_LoadGameLoadGameSelect, nil, 0, 34, 22);
FillMenuWithMemCardFileListing(&MenuSaveDG_2, TriggerSave_BackToMainMenuTwoLines, TriggerSave_DeleteGameDeleteGameSelect, nil, 0, 34, 22);
MenuBriefs_1.m_numTexts = 0;
MenuBriefs_1.AddText(TheText.Get("FEB_PMB"), 0.0f, 0.0f, TITLE_TEXT_COLOR, 0); // Previous Mission Briefs:
static wchar StringsToDisplay[NUMPREVIOUSBRIEFS][256];
CRGBA newColor;
int32 brierY = 36;
for ( int32 i = NUMPREVIOUSBRIEFS-1; i >= 0; i-- )
{
tPreviousBrief &brief = CMessages::PreviousBriefs[i];
if (brief.m_pText)
{
CMessages::InsertNumberInString(brief.m_pText,
brief.m_nNumber[0], brief.m_nNumber[1],
brief.m_nNumber[2], brief.m_nNumber[3],
brief.m_nNumber[4], brief.m_nNumber[5], StringsToDisplay[i]);
CMessages::InsertStringInString(StringsToDisplay[i], brief.m_pString);
newColor = TEXT_COLOR;
FilterOutColorMarkersFromString(StringsToDisplay[i], newColor);
if (newColor != TEXT_COLOR)
{
newColor.r /= 2;
newColor.g /= 2;
newColor.b /= 2;
}
MenuBriefs_1.AddText(StringsToDisplay[i], 0.0f, YF((float)brierY), newColor, 0);
brierY += 54;
}
}
MenuStats_1.m_scrollPosition = 0.0f;
MenuStats_1.ResetNumberOfTextLines();
nStatLinesIndex = 0;
#define STAT_HEADER(str) do { MenuStats_1.AddTextLine(TheText.Get(str), nil); } while(0)
#define STAT_PARAM(str) do { MenuStats_1.AddTextLine(nil, TheText.Get(str)); } while(0)
#define STAT_LINE(str, left, isFloat, right) do { MenuStats_1.AddTextLine(TheText.Get(str), PrintStatLine(str, left, isFloat, right)); } while(0)
int32 nTemp;
STAT_HEADER("PL_STAT");
int32 percentCompleted = (CStats::TotalProgressInGame == 0 ? 0 : CStats::ProgressMade * 100.0f / (CGame::nastyGame ? CStats::TotalProgressInGame : CStats::TotalProgressInGame - 1));
percentCompleted = Min(percentCompleted, 100);
STAT_LINE("PER_COM", &percentCompleted, 0, nil);
STAT_LINE("NMISON", &CStats::MissionsGiven, 0, nil);
STAT_LINE("FEST_MP", &CStats::MissionsPassed, 0, &CStats::TotalNumberMissions);
if ( CGame::nastyGame )
STAT_LINE("FEST_RP", &CStats::NumberKillFrenziesPassed, 0, &CStats::TotalNumberKillFrenzies);
CPlayerInfo &player = CWorld::Players[CWorld::PlayerInFocus];
float packagesPercent = 0.0f;
if (player.m_nTotalPackages != 0)
packagesPercent = player.m_nCollectedPackages * 100.0f / player.m_nTotalPackages;
int32 nPackagesPercent = packagesPercent;
nTemp = 100;
STAT_LINE("PERPIC", &nPackagesPercent, 0, &nTemp);
STAT_LINE("NOUNIF", &CStats::NumberOfUniqueJumpsFound, 0, &CStats::TotalNumberOfUniqueJumps);
STAT_LINE("DAYSPS", &CStats::DaysPassed, 0, nil);
if ( CGame::nastyGame )
{
STAT_LINE("PE_WAST", &CStats::PeopleKilledByPlayer, 0, nil);
STAT_LINE("PE_WSOT", &CStats::PeopleKilledByOthers, 0, nil);
}
STAT_LINE("CAR_EXP", &CStats::CarsExploded, 0, nil);
STAT_LINE("TM_BUST", &CStats::TimesArrested, 0, nil);
STAT_LINE("TM_DED", &CStats::TimesDied, 0, nil);
nTemp = CStats::PedsKilledOfThisType[PEDTYPE_GANG9] + CStats::PedsKilledOfThisType[PEDTYPE_GANG8]
+ CStats::PedsKilledOfThisType[PEDTYPE_GANG7] + CStats::PedsKilledOfThisType[PEDTYPE_GANG6]
+ CStats::PedsKilledOfThisType[PEDTYPE_GANG5] + CStats::PedsKilledOfThisType[PEDTYPE_GANG4]
+ CStats::PedsKilledOfThisType[PEDTYPE_GANG3] + CStats::PedsKilledOfThisType[PEDTYPE_GANG2]
+ CStats::PedsKilledOfThisType[PEDTYPE_GANG1];
STAT_LINE("GNG_WST", &nTemp, 0, nil);
nTemp = CStats::PedsKilledOfThisType[PEDTYPE_CRIMINAL];
STAT_LINE("DED_CRI", &nTemp, 0, nil);
STAT_LINE("HEL_DST", &CStats::HelisDestroyed, 0, nil);
STAT_LINE("KGS_EXP", &CStats::KgsOfExplosivesUsed, 0, nil);
nTemp = (CStats::InstantHitsFiredByPlayer == 0 ? 0 : CStats::InstantHitsHitByPlayer * 100.0f / CStats::InstantHitsFiredByPlayer);
STAT_LINE("ACCURA", &nTemp, 0, nil);
if (CStats::ElBurroTime > 0)
STAT_LINE("ELBURRO", &CStats::ElBurroTime, 0, nil);
if (CStats::Record4x4One > 0)
STAT_LINE("FEST_R1", &CStats::Record4x4One, 0, nil);
if (CStats::Record4x4Two > 0)
STAT_LINE("FEST_R2", &CStats::Record4x4Two, 0, nil);
if (CStats::Record4x4Three > 0)
STAT_LINE("FEST_R3", &CStats::Record4x4Three, 0, nil);
if (CStats::Record4x4Mayhem > 0)
STAT_LINE("FEST_RM", &CStats::Record4x4Mayhem, 0, nil);
if (CStats::LongestFlightInDodo > 0)
STAT_LINE("FEST_LF", &CStats::LongestFlightInDodo, 0, nil);
if (CStats::TimeTakenDefuseMission > 0)
STAT_LINE("FEST_BD", &CStats::TimeTakenDefuseMission, 0, nil);
STAT_LINE("CAR_CRU", &CStats::CarsCrushed, 0, nil);
if (CStats::HighestScores[0] > 0)
{
STAT_HEADER("FEST_BB");
STAT_LINE("FEST_H0", &CStats::HighestScores[0], 0, nil);
}
int32 hs = 0;
for ( int32 i = 1; i < 5; i++ )
hs += CStats::HighestScores[i];
if (hs > 0)
STAT_HEADER("FEST_GC");
if (CStats::HighestScores[1] > 0)
STAT_LINE("FEST_H1", &CStats::HighestScores[1], 0, nil);
if (CStats::HighestScores[2] > 0)
STAT_LINE("FEST_H2", &CStats::HighestScores[2], 0, nil);
if (CStats::HighestScores[3] > 0)
STAT_LINE("FEST_H3", &CStats::HighestScores[3], 0, nil);
if (CStats::HighestScores[4] > 0)
STAT_LINE("FEST_H4", &CStats::HighestScores[4], 0, nil);
STAT_LINE("FESTDFM", &CStats::DistanceTravelledOnFoot, 0, nil);
STAT_LINE("FESTDCM", &CStats::DistanceTravelledInVehicle, 0, nil);
STAT_LINE("MMRAIN", &CStats::mmRain, 0, nil);
nTemp = (int32)CStats::MaximumJumpDistance;
STAT_LINE("MXCARDM", &nTemp, 0, nil);
nTemp = (int32)CStats::MaximumJumpHeight;
STAT_LINE("MXCARJM", &nTemp, 0, nil);
STAT_LINE("MXFLIP", &CStats::MaximumJumpFlips, 0, nil);
STAT_LINE("MXJUMP", &CStats::MaximumJumpSpins, 0, nil);
STAT_HEADER("BSTSTU");
switch (CStats::BestStuntJump)
{
case 1: STAT_PARAM("INSTUN"); break;
case 2: STAT_PARAM("PRINST"); break;
case 3: STAT_PARAM("DBINST"); break;
case 4: STAT_PARAM("DBPINS"); break;
case 5: STAT_PARAM("TRINST"); break;
case 6: STAT_PARAM("PRTRST"); break;
case 7: STAT_PARAM("QUINST"); break;
case 8: STAT_PARAM("PQUINS"); break;
default: STAT_PARAM("NOSTUC"); break;
}
STAT_LINE("PASDRO", &CStats::PassengersDroppedOffWithTaxi, 0, nil);
STAT_LINE("MONTAX", &CStats::MoneyMadeWithTaxi, 0, nil);
STAT_LINE("FEST_LS", &CStats::LivesSavedWithAmbulance, 0, nil);
STAT_LINE("FEST_HA", &CStats::HighestLevelAmbulanceMission, 0, nil);
STAT_LINE("FEST_CC", &CStats::CriminalsCaught, 0, nil);
STAT_LINE("FEST_FE", &CStats::FiresExtinguished, 0, nil);
int32 rnd = ((CGeneral::GetRandomNumber() & 255) + 100) * 2384;
STAT_LINE("DAYPLC", &rnd, 0, nil);
#undef STAT_LINE
MenuStats_2.m_numTexts = 0;
MenuStats_2.AddText(TheText.Get("CRIMRA"), 0.0f, 0.0f, CRIM_RATING_TEXT_COLOR, 0);
char rating[16];
wchar urating[16];
sprintf(rating, " %d", CStats::FindCriminalRatingNumber());
AsciiToUnicode(rating, urating);
wchar *pStatLine = aStatLines[nStatLinesIndex++];
UnicodeStrcpy(pStatLine, CStats::FindCriminalRatingString());
UnicodeStrcat(pStatLine, urating);
MenuStats_2.AddText(pStatLine, X(MenuStats_1.m_width), 0.0f, CRIM_RATING_TEXT_COLOR, 1);
MenuSaveZoneSG_1.SetMenuSelection(1);
MenuSaveZoneFC_1.SetMenuSelection(1);
}
}
void
CMenuManager::AnaliseMenuContents(void)
{
if ( m_bWantToUpdateContent )
{
m_bWantToUpdateContent = false;
m_PrefsControllerConfig = (CONTRCONFIG)MenuControls_1.GetMenuSelection();
switch ( m_PrefsControllerConfig )
{
case CONFIG_4: CPad::GetPad(0)->SetMode(3); break;
case CONFIG_3: CPad::GetPad(0)->SetMode(2); break;
case CONFIG_2: CPad::GetPad(0)->SetMode(1); break;
case CONFIG_1: CPad::GetPad(0)->SetMode(0); break;
}
m_PrefsUseVibration = MenuControls_5.m_title.m_bSelected;
m_PrefsMusicVolume = float(MenuAudio_1.GetMenuSelection())/100.0f*127.0f+0.5f;
m_PrefsSfxVolume = float(MenuAudio_2.GetMenuSelection())/100.0f*127.0f+0.5f;
m_PrefsRadioStation = MenuAudio_3.GetMenuSelection();
m_PrefsStereoMono = MenuAudio_4.GetMenuSelection();
m_PrefsBrightness = float(MenuDisplay_1.GetMenuSelection()) / 100.0f*512.0f + 0.5f;
m_PrefsShowTrails = MenuDisplay_2.GetMenuSelection();
m_PrefsShowSubtitles = MenuDisplay_3.GetMenuSelection();
m_PrefsUseWideScreen = MenuDisplay_4.GetMenuSelection();
#ifdef PS2
BlurOn = m_PrefsShowTrails;
#else
CMBlur::BlurOn = m_PrefsShowTrails;
#endif
if ( m_PrefsLanguage != MenuLanguage_1.GetMenuSelection() )
{
m_PrefsLanguage = MenuLanguage_1.GetMenuSelection();
m_bInitialised = false;
bFrontEnd_ReloadObrTxtGxt = true;
}
}
}
void
CMenuManager::InitialiseMenuContentsAfterLoadingGame(void)
{
if ( MenuLanguage_1.GetMenuSelection() != m_PrefsLanguage )
{
m_bInitialised = false;
bFrontEnd_ReloadObrTxtGxt = true;
}
}
void
CMenuManager::DrawFrontEnd(void)
{
CFont::SetAlphaFade(255.0f);
if(m_bInSaveZone)
DrawFrontEndSaveZone();
else
DrawFrontEndNormal();
if ( MemCardAccessTriggerCaller.CanCall() )
MemCardAccessTriggerCaller.CallTrigger();
DisplayWarningControllerMsg();
}
void
CMenuManager::DrawFrontEndNormal(void)
{
CSprite2d::InitPerFrame();
CFont::InitPerFrame();
if ( bMemoryCardSpecialZone )
{
static uint8 counter = 0;
counter++;
if ( (counter & 63 ) == 0 )
{
FillMenuWithMemCardFileListing(&MenuSaveLG_2, TriggerSave_BackToMainMenuTwoLines, TriggerSave_LoadGameLoadGameSelect, nil, 0, 34, 22);
FillMenuWithMemCardFileListing(&MenuSaveDG_2, TriggerSave_BackToMainMenuTwoLines, TriggerSave_DeleteGameDeleteGameSelect, nil, 0, 34, 22);
}
}
m_fade = 255;
if ( m_nChangePageTimer != 0 && m_nChangePageTimer >= CTimer::GetTimeInMillisecondsPauseMode() )
m_fade = uint32(float(m_nChangePageTimer - CTimer::GetTimeInMillisecondsPauseMode()) / 250.0f * 255.0f);
m_someAlpha = 255;
m_position.x = 0.0f;
m_position.y = 0.0f;
if ( m_nStartPauseTimer != 0 && m_nStartPauseTimer >= CTimer::GetTimeInMillisecondsPauseMode() )
{
float slide = float(m_nStartPauseTimer - CTimer::GetTimeInMillisecondsPauseMode()) / 800.0f;
float alpha = 1.0f;
if ((m_nStartPauseTimer - CTimer::GetTimeInMillisecondsPauseMode()) <= 1600)
alpha = float(m_nStartPauseTimer - CTimer::GetTimeInMillisecondsPauseMode()) / 400.0f;
m_someAlpha = 255 - clamp(alpha, 0.0f, 1.0f) * 255.0f;
switch ( m_nSlidingDir )
{
case SLIDE_TO_RIGHT: m_position.x = slide * X(700.0f); break;
case SLIDE_TO_TOP: m_position.y = -(slide * Y(500.0f)); break;
case SLIDE_TO_LEFT: m_position.x = -(slide * X(700.0f)); break;
case SLIDE_TO_BOTTOM: m_position.y = slide * Y(500.0f); break;
default: m_position.y = slide * Y(500.0f); break;
}
}
if ( m_nEndPauseTimer != 0 && m_nEndPauseTimer >= CTimer::GetTimeInMillisecondsPauseMode() )
{
float slide = float(m_nEndPauseTimer - CTimer::GetTimeInMillisecondsPauseMode()) / 800.0f;
float alpha = float((int32)(m_nEndPauseTimer - CTimer::GetTimeInMillisecondsPauseMode()) + -266) / 533.0f;
m_someAlpha = clamp(alpha, 0.0f, 1.0f) * 255.0f;
switch ( m_nSlidingDir )
{
case SLIDE_TO_TOP: m_position.y = (1.0f - slide) * Y(500.0f); break;
case SLIDE_TO_RIGHT: m_position.x = (1.0f - slide) * X(700.0f); break;
case SLIDE_TO_LEFT: m_position.x = (1.0f - slide) * X(700.0f); break;
case SLIDE_TO_BOTTOM: m_position.y = -((1.0f - slide) * Y(500.0f)); break;
default: m_position.y = -((1.0f - slide) * Y(500.0f)); break;
}
}
if ( m_someAlpha < 255 )
m_fade = m_someAlpha;
float posX, posY;
/* Draw splash */
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERLINEAR);
CSprite2d *splash = LoadSplash(nil);
if(splash)
splash->Draw(CRect(0.0f, 0.0f, SCRW, SCRH), BACKGROUND_SPLASH_COLOR);
else
// doesn't exist!!
CHud::Sprites[19].Draw(CRect(0.0f, 0.0f, SCRW, SCRH), BACKGROUND_SPLASH_COLOR);
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERMIPNEAREST);
/* Draw main panel */
RwRenderStateSet(rwRENDERSTATETEXTUREADDRESS, (void*)rwTEXTUREADDRESSCLAMP);
CRGBA panelColor(255, 255, 255, m_someAlpha);
m_sprites[FE2_MAINPANEL_UL].Draw(
CRect(m_position.x, m_position.y, m_position.x+SCRW/2.0f, m_position.y+SCRH/2.0f),
panelColor);
m_sprites[FE2_MAINPANEL_UR].Draw(
CRect(m_position.x+SCRW/2.0f, m_position.y, m_position.x+SCRW, m_position.y+SCRH/2.0f),
panelColor);
m_sprites[FE2_MAINPANEL_DL].Draw(
CRect(m_position.x, m_position.y+SCRH/2.0f, m_position.x+SCRW/2.0f, m_position.y+SCRH),
panelColor);
m_sprites[FE2_MAINPANEL_DR].Draw(
CRect(m_position.x+SCRW/2.0f, m_position.y+SCRH/2.0f, m_position.x+SCRW, m_position.y+SCRH),
panelColor);
/* Draw icon backdrop */
CRGBA iconColor(255, 255, 255, m_fade*0.75f);
float iconX = 48.0f;
float iconY = 54.0f;
float iconWidth = 540.0f;
float iconHeight = 296.0f;
int32 sprite = FE_ICONBRIEF;
#ifdef PS2_MENU_USEALLPAGEICONS
switch(m_currentPage)
{
case PAGE_STATS:
sprite = FE_ICONSTATS;
break;
case PAGE_LOAD:
sprite = FE_ICONSAVE;
break;
case PAGE_CONTROLS:
sprite = FE_ICONCONTROLS;
break;
case PAGE_BRIEFS:
sprite = FE_ICONBRIEF;
break;
case PAGE_AUDIO:
sprite = FE_ICONAUDIO;
break;
case PAGE_DISPLAY:
sprite = FE_ICONDISPLAY;
break;
case PAGE_LANGUAGE:
sprite = FE_ICONLANGUAGE;
break;
}
#else
switch(m_currentPage)
{
case PAGE_STATS:
case PAGE_LOAD:
case PAGE_CONTROLS:
sprite = FE_ICONSTATS; // PS2 has the same texture for stats and brief
//sprite = FE_ICONBRIEF;
break;
case PAGE_BRIEFS:
sprite = FE_ICONBRIEF;
break;
case PAGE_AUDIO:
sprite = FE_ICONAUDIO;
break;
case PAGE_DISPLAY:
sprite = FE_ICONDISPLAY;
break;
case PAGE_LANGUAGE:
sprite = FE_ICONLANGUAGE;
break;
}
#endif
m_sprites[sprite].Draw(
CRect_SZ(m_position.x+X(iconX), m_position.y+Y(iconY), X(iconWidth), Y(iconHeight)),
iconColor);
/* Overwrite tab buttons if entered page */
bool bOverwriteTab = false;
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
case PAGESTATE_HIGHLIGHTED:
break;
case PAGESTATE_SELECTED:
bOverwriteTab = true;
break;
}
if( bOverwriteTab )
{
CRGBA shadow(41, 101, 102, m_someAlpha);
CRGBA green(40, 48, 57, m_someAlpha);
CSprite2d::DrawRect(
CRect_SZ(m_position.x+X(82.0f), m_position.y+Y(408.0f), X(476.0f), Y(18.0f)),
shadow);
CSprite2d::DrawRect(
CRect_SZ(m_position.x+X(82.0f), m_position.y+Y(408.0f), X(476.0f), Y(5.0f)),
green);
}
// stats, load, briefs, controls, audio, display, language
/* Shadow of panel on top of tab buttons */
CRGBA panelShadow(96, 96, 96, m_someAlpha*0.375f);
CSprite2d::DrawRect(CRect_SZ(m_position.x+X(87.0f), m_position.y+Y(408.0f), X(464.0f), Y(3.0f)), panelShadow);
/* Draw second shadow - seems unused */
if ( m_nChangePageTimer != 0 && CTimer::GetTimeInMillisecondsPauseMode() < m_nChangePageTimer )
{
posX = 0.0f;
switch(field_18)
{
case PAGE_STATS: posX = 88.0f; break;
case PAGE_LOAD: posX = 286.0f; break; // actually controls
case PAGE_BRIEFS: posX = 154.0f; break; // actually load
case PAGE_CONTROLS: posX = 220.0f; break; // actually briefs
case PAGE_AUDIO: posX = 352.0f; break;
case PAGE_DISPLAY: posX = 418.0f; break;
case PAGE_LANGUAGE: posX = 484.0f; break;
}
CSprite2d::DrawRect(CRect_SZ(m_position.x+X(posX), m_position.y+Y(411.0f), X(65.0f), Y(3.0f)), panelShadow);
}
/* Active tab */
posX = 0.0f;
switch(m_currentPage)
{
case PAGE_STATS: posX = 88.0f; break;
case PAGE_LOAD: posX = 154.0f; break;
case PAGE_BRIEFS: posX = 220.0f; break;
case PAGE_CONTROLS: posX = 286.0f; break;
case PAGE_AUDIO: posX = 352.0f; break;
case PAGE_DISPLAY: posX = 418.0f; break;
case PAGE_LANGUAGE: posX = 484.0f; break;
}
// PAL has 465 for 407 here - and actually 406 seems right
m_sprites[FE2_TABACTIVE].Draw(CRect_SZ(m_position.x+X(posX), m_position.y+YF(465.0f), X(128.0f), Y(32.0f)), CRGBA(255, 255, 255, m_someAlpha));
/* Draw page title */
posX = m_position.x + X(592.0f);
posY = m_position.y + Y(376.0f);
CRGBA fontCol1(255, 193, 71, m_someAlpha);
CRGBA fontCol2(0, 0, 0, m_someAlpha);
CFont::SetFontStyle(FONT_HEADING);
CFont::SetBackgroundOff();
CFont::SetScale(X(PANEL_TEXT_SIZE_X), Y(PANEL_TEXT_SIZE_Y));
CFont::SetPropOn();
CFont::SetCentreOff();
CFont::SetJustifyOn();
CFont::SetRightJustifyWrap(0.0f);
CFont::SetRightJustifyOn();
CFont::SetBackGroundOnlyTextOn();
CFont::SetWrapx(SCRW-X(40.0f)); // 600.0f
const char *key = nil;
switch(m_currentPage)
{
case PAGE_STATS: key = "FEP_STA"; break;
case PAGE_LOAD: key = "FEP_SAV"; break;
case PAGE_BRIEFS: key = "FEP_BRI"; break;
case PAGE_CONTROLS: key = "FEP_CON"; break;
case PAGE_AUDIO: key = "FEP_AUD"; break;
case PAGE_DISPLAY: key = "FEP_DIS"; break;
case PAGE_LANGUAGE: key = "FEP_LAN"; break;
}
CFont::SetScale(X(PANEL_TEXT_SIZE_X*PANEL_TEXT_X_SCALES[m_currentPage]), Y(PANEL_TEXT_SIZE_Y));
CFont::SetColor(fontCol1);
CFont::PrintString(posX, posY, TheText.Get(key));
CFont::SetColor(fontCol2);
CFont::PrintString(posX-X(1.0f), posY-Y(1.0f), TheText.Get(key));
CFont::DrawFonts();
/* Draw controller buttons */
CFont::SetFontStyle(FONT_BANK);
CFont::SetBackgroundOff();
CFont::SetScale(X(0.35f), Y(0.64f));
CFont::SetPropOn();
CFont::SetCentreOff();
CFont::SetJustifyOn();
CFont::SetRightJustifyOff();
CFont::SetBackGroundOnlyTextOn();
CFont::SetWrapx(SCRW-X(40.0f)); // 600.0f
CFont::SetColor(CRGBA(16, 16, 16, m_someAlpha));
switch(m_currentPage)
{
case PAGE_STATS:
CFont::PrintString(m_position.x+X(52.0f), m_position.y+Y(360.0f), TheText.Get("FEDS_ST"));
CFont::PrintString(m_position.x+X(52.0f), m_position.y+Y(372.0f), TheText.Get("FEDS_AM"));
CFont::PrintString(m_position.x+X(242.0f), m_position.y+Y(360.0f), TheText.Get("FEDSSC1"));
CFont::PrintString(m_position.x+X(242.0f), m_position.y+Y(372.0f), TheText.Get("FEDSSC2"));
break;
case PAGE_BRIEFS:
CFont::PrintString(m_position.x+X(52.0f), m_position.y+Y(360.0f), TheText.Get("FEDS_ST"));
CFont::PrintString(m_position.x+X(52.0f), m_position.y+Y(372.0f), TheText.Get("FEDS_AM"));
break;
case PAGE_LOAD:
case PAGE_CONTROLS:
case PAGE_AUDIO:
case PAGE_DISPLAY:
case PAGE_LANGUAGE:
{
CFont::PrintString(m_position.x+X(52.0f), m_position.y+Y(360.0f), TheText.Get("FEDS_SE"));
CFont::PrintString(m_position.x+X(52.0f), m_position.y+Y(372.0f), TheText.Get("FEDS_BA"));
CFont::PrintString(m_position.x+X(52.0f), m_position.y+Y(384.0f), TheText.Get("FEDS_ST"));
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
CFont::PrintString(m_position.x+X(242.0f), m_position.y+Y(372.0f), TheText.Get("FEDS_AM")); // <>-CHANGE MENU
break;
case PAGESTATE_HIGHLIGHTED:
case PAGESTATE_SELECTED:
{
CFont::PrintString(m_position.x+X(242.0f), m_position.y+Y(360.0f+3.5f), TheText.Get("FEA_UP")); // ;
CFont::PrintString(m_position.x+X(242.0f), m_position.y+Y(384.0f-3.5f), TheText.Get("FEA_DO")); // =
CFont::PrintString(m_position.x+X(242.0f-10.0f), m_position.y+Y(372.0f), TheText.Get("FEA_LE")); // <
CFont::PrintString(m_position.x+X(242.0f+11.0f), m_position.y+Y(372.0f), TheText.Get("FEA_RI")); // >
CFont::PrintString(m_position.x+X(242.0f+20.0f), m_position.y+Y(372.0f), TheText.Get("FEDSAS3")); // - CHANGE SELECTION
break;
}
}
break;
}
}
CFont::DrawFonts();
/* Draw tab button texts */
CFont::SetFontStyle(FONT_BANK);
CFont::SetBackgroundOff();
CFont::SetScale(X(BUTTONTAB_TEXT_SIZE_X), Y(BUTTONTAB_TEXT_SIZE_Y));
CFont::SetPropOn();
CFont::SetCentreOn();
CFont::SetRightJustifyOff();
CFont::SetBackGroundOnlyTextOn();
CFont::SetWrapx(SCRW-X(40.0f)); // 600.0f
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
{
CFont::SetColor(CRGBA(16, 16, 16, m_someAlpha));
CFont::SetScale(X(BUTTONTAB_TEXT_SIZE_X*BUTTONTAB_TEXT_X_SCALES[PAGE_STATS]), Y(BUTTONTAB_TEXT_SIZE_Y));
CFont::PrintString(m_position.x+X(92.0f), m_position.y+Y(408.0f), TheText.Get("FEB_STA"));
CFont::SetScale(X(BUTTONTAB_TEXT_SIZE_X*BUTTONTAB_TEXT_X_SCALES[PAGE_LOAD]), Y(BUTTONTAB_TEXT_SIZE_Y));
CFont::PrintString(m_position.x+X(158.0f), m_position.y+Y(408.0f), TheText.Get("FEB_SAV"));
CFont::SetScale(X(BUTTONTAB_TEXT_SIZE_X*BUTTONTAB_TEXT_X_SCALES[PAGE_BRIEFS]), Y(BUTTONTAB_TEXT_SIZE_Y));
CFont::PrintString(m_position.x+X(224.0f), m_position.y+Y(408.0f), TheText.Get("FEB_BRI"));
CFont::SetScale(X(BUTTONTAB_TEXT_SIZE_X*BUTTONTAB_TEXT_X_SCALES[PAGE_CONTROLS]), Y(BUTTONTAB_TEXT_SIZE_Y));
CFont::PrintString(m_position.x+X(290.0f), m_position.y+Y(408.0f), TheText.Get("FEB_CON"));
CFont::SetScale(X(BUTTONTAB_TEXT_SIZE_X*BUTTONTAB_TEXT_X_SCALES[PAGE_AUDIO]), Y(BUTTONTAB_TEXT_SIZE_Y));
CFont::PrintString(m_position.x+X(356.0f), m_position.y+Y(408.0f), TheText.Get("FEB_AUD"));
CFont::SetScale(X(BUTTONTAB_TEXT_SIZE_X*BUTTONTAB_TEXT_X_SCALES[PAGE_DISPLAY]), Y(BUTTONTAB_TEXT_SIZE_Y));
CFont::PrintString(m_position.x+X(422.0f), m_position.y+Y(408.0f), TheText.Get("FEB_DIS"));
CFont::SetScale(X(BUTTONTAB_TEXT_SIZE_X*BUTTONTAB_TEXT_X_SCALES[PAGE_LANGUAGE]), Y(BUTTONTAB_TEXT_SIZE_Y));
CFont::PrintString(m_position.x+X(488.0f), m_position.y+Y(408.0f), TheText.Get("FEB_LAN"));
break;
}
case PAGESTATE_HIGHLIGHTED:
case PAGESTATE_SELECTED:
{
CFont::SetColor(CRGBA(16, 16, 16, m_someAlpha));
switch(m_currentPage)
{
// PAL has 466 for 408...probably rounded?
case PAGE_STATS:
CFont::SetScale(X(BUTTONTAB_TEXT_SIZE_X*BUTTONTAB_TEXT_X_SCALES[PAGE_STATS]), Y(BUTTONTAB_TEXT_SIZE_Y));
CFont::PrintString(m_position.x+X(92.0f), m_position.y+Y(408.0f), TheText.Get("FEB_STA"));
break;
case PAGE_LOAD:
CFont::SetScale(X(BUTTONTAB_TEXT_SIZE_X*BUTTONTAB_TEXT_X_SCALES[PAGE_LOAD]), Y(BUTTONTAB_TEXT_SIZE_Y));
CFont::PrintString(m_position.x+X(158.0f), m_position.y+Y(408.0f), TheText.Get("FEB_SAV"));
break;
case PAGE_BRIEFS:
CFont::SetScale(X(BUTTONTAB_TEXT_SIZE_X*BUTTONTAB_TEXT_X_SCALES[PAGE_BRIEFS]), Y(BUTTONTAB_TEXT_SIZE_Y));
CFont::PrintString(m_position.x+X(224.0f), m_position.y+Y(408.0f), TheText.Get("FEB_BRI"));
break;
case PAGE_CONTROLS:
CFont::SetScale(X(BUTTONTAB_TEXT_SIZE_X*BUTTONTAB_TEXT_X_SCALES[PAGE_CONTROLS]), Y(BUTTONTAB_TEXT_SIZE_Y));
CFont::PrintString(m_position.x+X(290.0f), m_position.y+Y(408.0f), TheText.Get("FEB_CON"));
break;
case PAGE_AUDIO:
CFont::SetScale(X(BUTTONTAB_TEXT_SIZE_X*BUTTONTAB_TEXT_X_SCALES[PAGE_AUDIO]), Y(BUTTONTAB_TEXT_SIZE_Y));
CFont::PrintString(m_position.x+X(356.0f), m_position.y+Y(408.0f), TheText.Get("FEB_AUD"));
break;
case PAGE_DISPLAY:
CFont::SetScale(X(BUTTONTAB_TEXT_SIZE_X*BUTTONTAB_TEXT_X_SCALES[PAGE_DISPLAY]), Y(BUTTONTAB_TEXT_SIZE_Y));
CFont::PrintString(m_position.x+X(422.0f), m_position.y+Y(408.0f), TheText.Get("FEB_DIS"));
break;
case PAGE_LANGUAGE:
CFont::SetScale(X(BUTTONTAB_TEXT_SIZE_X*BUTTONTAB_TEXT_X_SCALES[PAGE_LANGUAGE]), Y(BUTTONTAB_TEXT_SIZE_Y));
CFont::PrintString(m_position.x+X(488.0f), m_position.y+Y(408.0f), TheText.Get("FEB_LAN"));
break;
}
break;
}
}
CFont::DrawFonts();
pActiveMenuPage = nil;
switch(m_currentPage)
{
case PAGE_STATS: pActiveMenuPage = &MenuPage_Stats; break;
case PAGE_LOAD: pActiveMenuPage = pMenuSave; break;
case PAGE_BRIEFS: pActiveMenuPage = &MenuPage_Briefs; break;
case PAGE_CONTROLS: pActiveMenuPage = &MenuPage_Controls; break;
case PAGE_AUDIO: pActiveMenuPage = &MenuPage_Audio; break;
case PAGE_DISPLAY: pActiveMenuPage = &MenuPage_Display; break;
case PAGE_LANGUAGE: pActiveMenuPage = &MenuPage_Language; break;
}
CFont::SetFontStyle(FONT_BANK);
CFont::SetBackgroundOff();
CFont::SetScale(X(MENU_TEXT_SIZE_X), Y(MENU_TEXT_SIZE_Y));
CFont::SetPropOn();
CFont::SetCentreOff();
CFont::SetJustifyOn();
CFont::SetRightJustifyOff();
CFont::SetBackGroundOnlyTextOn();
CFont::SetWrapx(SCRW-X(40.0f)); // 600.0f
CFont::SetRightJustifyWrap(X(38.0f));
if(m_currentPage == PAGE_LANGUAGE)
{
CFont::SetCentreOn();
CFont::SetCentreSize(SCRW-X(40.0f)); // 600.0f
}
if ( m_nEndPauseTimer != 0 )
{
switch ( m_currentPage )
{
case PAGE_LOAD:
case PAGE_BRIEFS:
case PAGE_CONTROLS:
break;
default:
CFont::SetWrapx(X(1200.0f));
break;
}
}
if(pActiveMenuPage)
{
pActiveMenuPage->SetAlpha(m_fade);
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
pActiveMenuPage->DrawNormal(m_position.x, m_position.y);
break;
case PAGESTATE_HIGHLIGHTED:
pActiveMenuPage->DrawHighlighted(CRGBA(rgbaATC.r, rgbaATC.g, rgbaATC.b, m_fade), m_position.x, m_position.y);
break;
case PAGESTATE_SELECTED:
pActiveMenuPage->Draw(CRGBA(rgbaATC.r, rgbaATC.g, rgbaATC.b, m_fade), CRGBA(MENU_SELECTED_COLOR.r, MENU_SELECTED_COLOR.g, MENU_SELECTED_COLOR.b, m_fade), m_position.x, m_position.y);
break;
}
}
CFont::DrawFonts();
CFont::DrawFonts();
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERLINEAR);
RwRenderStateSet(rwRENDERSTATETEXTUREADDRESS, (void*)rwTEXTUREADDRESSWRAP);
}
void
CMenuManager::DrawFrontEndSaveZone(void)
{
if ( bMemoryCardSpecialZone )
{
static uint8 counter = 0;
counter++;
if ( counter & 63 )
{
FillMenuWithMemCardFileListing(&MenuSaveZoneSSL_1, TriggerSaveZone_BackToMainMenuTwoLines, TriggerSaveZone_SaveSlots, nil, 0, 34, 22);
if ( TheMemoryCard.GetError() == CMemoryCard::ERR_NOFORMAT )
{
pActiveMenuPage = &MenuPageSaveZone_FormatCard;
pActiveMenuPage->ActivatePage();
bMemoryCardSpecialZone = false;
}
}
}
CSprite2d::InitPerFrame();
CFont::InitPerFrame();
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERNEAREST);
m_fade = 255;
CSprite2d::DrawRect(CRect(X(50.0f), Y(50.0f), X(590.0f), Y(398.0f)), CRGBA(0, 0, 0, 175)); //CRect(50.0f, 57.142f, 590.0f, 454.857147f)
CFont::SetFontStyle(FONT_BANK);
CFont::SetBackgroundOff();
CFont::SetScale(X(MENU_TEXT_SIZE_X), Y(MENU_TEXT_SIZE_Y));
CFont::SetPropOn();
CFont::SetCentreOff();
CFont::SetJustifyOn();
CFont::SetRightJustifyOff();
CFont::SetBackGroundOnlyTextOn();
CFont::SetRightJustifyWrap(X(70.0f));
CFont::SetWrapx(SCRW-X(70.0f)); // 570.0f
if ( pActiveMenuPage )
{
pActiveMenuPage->SetAlpha(m_fade);
pActiveMenuPage->Draw(CRGBA(rgbaATC.r, rgbaATC.g, rgbaATC.b, m_fade), TITLE_TEXT_COLOR, 0.0f, 0.0f);
}
CFont::DrawFonts();
CFont::SetFontStyle(FONT_BANK);
CFont::SetBackgroundOff();
CFont::SetScale(X(0.44f), Y(0.68f)); // 0.44f, 0.777143f
CFont::SetPropOn();
CFont::SetCentreOff();
CFont::SetJustifyOn();
CFont::SetRightJustifyOff();
CFont::SetBackGroundOnlyTextOn();
CFont::SetWrapx(SCRW-X(40.0f)); //600.0f
CFont::SetColor(TEXT_COLOR);
wchar *text;
if ( pActiveMenuPage == &MenuPageSaveZone_FormatCard
|| pActiveMenuPage == &MenuPageSaveZone_SaveSlots
|| pActiveMenuPage == &MenuPageSaveZone_SaveGame )
{
text = TheText.Get("FEDS_SB"); // / button - SELECT " button - BACK
}
else
{
text = TheText.Get("FEDS_SE"); // / button - SELECT
}
CFont::PrintString(X(180.0f), Y(376.0f), text); // 180.0f, 429.714294f
CFont::DrawFonts();
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERLINEAR);
}
void
CMenuManager::DrawMemoryCardStartUpMenus()
{
CFont::SetAlphaFade(255.0f);
bMemoryCardStartUpMenus_ExitNow = false;
CMenuPage page; // + 0x40 data
CMenuMultiChoiceTriggered MCMenu;
MCMenu.SetPosition(X(320.0f), Y(150.0f)); //171.428574f
switch ( TheMemoryCard.CheckCardStateAtGameStartUp(CARD_ONE) )
{
case CMemoryCard::MCSTATE_NEED_200KB: // 200KB
{
// There is insufficient space on the Memory Card (PS2) in MEMORY CARD slot 1. At least 200KB is needed to save this application data. Do you wish to start? (YES or NO)
MCMenu.AddTitle(TheText.Get("MCGNSP"), 0.0f, 0.0f, 0);
break;
}
case CMemoryCard::MCSTATE_NEED_500KB: // 500KB
{
// There is insufficient space on the Memory Card (PS2) in MEMORY CARD slot 1. At least 500KB is needed to save this application data. Do you wish to start? (YES or NO)
MCMenu.AddTitle(TheText.Get("MCDNSP"), 0.0f, 0.0f, 0);
break;
}
case CMemoryCard::MCSTATE_OK:
case CMemoryCard::MCSTATE_NOCARD:
{
return;
break;
}
}
MCMenu.AddOption(TheText.Get("FEM_NO"), X(30.0f), Y(110.0f), nil, 0, 0);// 125.714294f
MCMenu.AddOption(TheText.Get("FEM_YES"), X(-30.0f), Y(110.0f), TriggerMCSUM_Yes, 0, 0);// 125.714294f
MCMenu.SetColors(TITLE_TEXT_COLOR, TEXT_COLOR, TEXT_COLOR);
page.AddMenu(&MCMenu);
MCMenu.GoFirst();
page.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
CTimer::Initialise();
CTimer::StartUserPause();
while ( !bMemoryCardStartUpMenus_ExitNow )
{
#ifdef GTA_PC
HandleExit();
if(RsGlobal.quit)
return;
#endif
#ifdef GTA_PC
if ( CPad::GetPad(0)->GetDPadLeftJustDown() )
page.GoLeft();
if ( CPad::GetPad(0)->GetDPadRightJustDown() )
page.GoRight();
if ( CPad::GetPad(0)->GetDPadUpJustDown() )
page.GoDown();
if ( CPad::GetPad(0)->GetDPadDownJustDown() )
page.GoUp();
if ( CPad::GetPad(0)->GetCrossJustDown() || CPad::GetPad(0)->GetEnterJustDown() || CPad::GetPad(0)->GetRightMouseJustDown() )
page.SelectCurrentOptionUnderCursor();
if ( CPad::GetPad(0)->GetCircleJustDown() || CPad::GetPad(0)->GetEscapeJustDown() )
;
#else
if ( CPad::GetPad(0)->GetDPadLeftJustDown() )
page.GoLeft();
if ( CPad::GetPad(0)->GetDPadRightJustDown() )
page.GoRight();
if ( CPad::GetPad(0)->GetDPadUpJustDown() )
page.GoDown();
if ( CPad::GetPad(0)->GetDPadDownJustDown() )
page.GoUp();
if ( CPad::GetPad(0)->GetCrossJustDown() )
page.SelectCurrentOptionUnderCursor();
if ( CPad::GetPad(0)->GetCircleJustDown() )
;
#endif
static int32 MemCardStatusWaiter = 0;
MemCardStatusWaiter++;
if ( MemCardStatusWaiter > 120 )
{
MemCardStatusWaiter = 0;
switch ( TheMemoryCard.CheckCardStateAtGameStartUp(CARD_ONE) )
{
case CMemoryCard::MCSTATE_NEED_200KB:
{
// There is insufficient space on the Memory Card (PS2) in MEMORY CARD slot 1. At least 200KB is needed to save this application data. Do you wish to start? (YES or NO)
MCMenu.AddTitle(TheText.Get("MCGNSP"), 0.0f, 0.0f, 0);
break;
}
case CMemoryCard::MCSTATE_NEED_500KB:
{
// There is insufficient space on the Memory Card (PS2) in MEMORY CARD slot 1. At least 500KB is needed to save this application data. Do you wish to start? (YES or NO)
MCMenu.AddTitle(TheText.Get("MCDNSP"), 0.0f, 0.0f, 0);
break;
}
case CMemoryCard::MCSTATE_NOCARD:
{
// There is no Memory Card (PS2) in MEMORY CARD slot 1. Do you wish to start? (YES or NO)
MCMenu.AddTitle(TheText.Get("MCSTNS"), 0.0f, 0.0f, 0);
break;
}
case CMemoryCard::MCSTATE_OK:
{
bMemoryCardStartUpMenus_ExitNow = true;
break;
}
}
}
DoRWStuffStartOfFrame(0, 0, 0, 0, 0, 0, 255);
CFont::InitPerFrame();
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERLINEAR);
CSprite2d *splash = LoadSplash("splash1");
splash->Draw(CRect(0.0f, 0.0f, SCRW, SCRH), BACKGROUND_SPLASH_COLOR);
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERNEAREST);
SetRandomActiveTextlineColor(1);
CRGBA col(rgbaATC.r, rgbaATC.g, rgbaATC.b, 255);
CFont::SetFontStyle(FONT_BANK);
CFont::SetBackgroundOff();
CFont::SetScale(X(MENU_TEXT_SIZE_X), Y(MENU_TEXT_SIZE_Y));
CFont::SetPropOn();
CFont::SetJustifyOn();
CFont::SetRightJustifyOff();
CFont::SetBackGroundOnlyTextOn();
CFont::SetWrapx(SCRW-X(60.0f)); // 580.0f
CFont::SetCentreOn();
CFont::SetCentreSize(SCRW-X(120.0f)); // 520.0f
MCMenu.Draw(col, TITLE_TEXT_COLOR, 0.0f, 0.0f);
CFont::DrawFonts();
CFont::SetFontStyle(FONT_BANK);
CFont::SetScale(X(0.4f), Y(0.64f)); // 0.731429
CFont::SetPropOn();
CFont::SetCentreOff();
CFont::SetJustifyOn();
CFont::SetRightJustifyOff();
CFont::SetBackGroundOnlyTextOn();
CFont::SetWrapx(SCRW-X(60.0f)); // 580.0f
CFont::SetColor(TEXT_COLOR);
CPlaceableShText text;
text.SetPosition(X(240.0f), Y(378.0f), false); // 432.000000
text.SetColor(TEXT_COLOR);
text.m_text = TheText.Get("FEDS_SE"); // / button - SELECT
text.SetShadows(true, TEXT_SHADOW_COLOR, SHADOW_VECTOR);
text.Draw(0.0f, 0.0f);
CFont::DrawFonts();
DisplayWarningControllerMsg();
DoRWStuffEndOfFrame();
CPad::UpdatePads();
CTimer::Update();
}
CTimer::EndUserPause();
CTimer::Stop();
for ( int32 i = 0; i < 100; i++ )
{
#ifdef GTA_PC
HandleExit();
#endif
DoRWStuffStartOfFrame(0, 0, 0, 0, 0, 0, 255);
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERLINEAR);
CSprite2d *splash = LoadSplash("splash1");
splash->Draw(CRect(0.0f, 0.0f, SCRW, SCRH), BACKGROUND_SPLASH_COLOR);
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERNEAREST);
DoRWStuffEndOfFrame();
}
}
void
CMenuManager::Process(void)
{
if ( m_bSaveMenuActive || m_bInSaveZone || TheCamera.GetScreenFadeStatus() == FADE_0 )
{
InitialiseMenusOnce();
m_bWantToRestart = false;
WorkOutMenuState(false);
if ( m_bMenuActive )
{
if ( !m_bInSaveZone )
LoadAllTextures();
InitialiseMenuContents();
SetRandomActiveTextlineColor(0);
ProcessControllerInput();
}
else
{
AnaliseMenuContents();
pMenuSave = &MenuPage_SaveBasic;
m_pageState = PAGESTATE_NORMAL;
bMemoryCardSpecialZone = false;
bIgnoreTriangleButton = false;
UnloadTextures();
m_bInSaveZone = false;
m_bRenderGameInMenu = false;
gErrorSampleTriggered = true;
}
}
}
void
CMenuManager::WorkOutMenuState(uint8 bExit)
{
#ifdef GTA_PC
bool bIsStartPressed = CPad::GetPad(0)->GetStartJustDown() || (m_pageState == PAGESTATE_NORMAL && CPad::GetPad(0)->GetEscapeJustDown());
#else
bool bIsStartPressed = CPad::GetPad(0)->GetStartJustDown();
#endif
bool bIsCreditsOrDraw = CCredits::AreCreditsDone() || m_bMenuActive;
bool bIsDemoOrDraw = m_bMenuActive || CGame::bDemoMode;
if ( (bIsStartPressed && bIsCreditsOrDraw) || bExit || (!bIsDemoOrDraw && CPad::IsNoOrObsolete()) )
{
if ( m_nStartPauseTimer == 0 && m_nEndPauseTimer == 0 )
{
m_bMenuActive = !m_bMenuActive;
if ( !m_bMenuActive )
{
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_STARTING, 0);
DMAudio.ChangeMusicMode(MUSICMODE_GAME);
gMusicPlaying = false;
bMemoryCardSpecialZone = false;
bIgnoreTriangleButton = false;
m_bMenuActive = true;
m_nEndPauseTimer = CTimer::GetTimeInMillisecondsPauseMode() + 800;
if ( m_currentPage == PAGE_CONTROLS || m_currentPage == PAGE_BRIEFS || m_currentPage == PAGE_LOAD )
{
m_nSlidingDir = CGeneral::GetRandomNumber() & (SLIDE_MAX-1);
switch ( m_nSlidingDir ) //m_nSlidingDir &= ~1;
{
case SLIDE_TO_LEFT: m_nSlidingDir = SLIDE_TO_TOP; break;
case SLIDE_TO_RIGHT: m_nSlidingDir = SLIDE_TO_BOTTOM; break;
}
m_position.y = Y(500.0f); // 571.428589f;
}
}
else
{
DMAudio.ChangeMusicMode(MUSICMODE_FRONTEND);
if ( DMAudio.GetRadioInCar() < 9 )
m_PrefsRadioStation = DMAudio.GetRadioInCar();
else
m_PrefsRadioStation = CGeneral::GetRandomNumber() % 9;
CTimer::StartUserPause();
CPad::StopPadsShaking();
m_nStartPauseTimer = CTimer::GetTimeInMillisecondsPauseMode() + 800;
m_nSlidingDir = CGeneral::GetRandomNumber() & (SLIDE_MAX-1);
switch ( m_nSlidingDir )
{
case SLIDE_TO_RIGHT: m_position.y = Y(612.5f); break;
case SLIDE_TO_LEFT: m_position.y = Y(612.5f); break;
case SLIDE_TO_BOTTOM: m_position.y = Y(500.0f); break;
case SLIDE_TO_TOP: m_position.y = Y(500.0f); break;
default: m_position.y = Y(500.0f); break;
}
if ( m_currentPage == PAGE_CONTROLS || m_currentPage == PAGE_BRIEFS )
{
m_nSlidingDir = CGeneral::GetRandomNumber() & (SLIDE_MAX-1);
switch ( m_nSlidingDir ) //m_nSlidingDir &= ~1;
{
case SLIDE_TO_LEFT: m_nSlidingDir = SLIDE_TO_TOP; break;
case SLIDE_TO_RIGHT: m_nSlidingDir = SLIDE_TO_BOTTOM; break;
}
m_position.y = Y(500.0f); //571.428589f
}
}
}
}
if ( m_bSaveMenuActive && !m_bInSaveZone && !TheMemoryCard._bunk2)
{
m_bSaveMenuActive = false;
m_bInSaveZone = true;
m_bRenderGameInMenu = true;
m_bMenuActive = true;
CTimer::StartUserPause();
pActiveMenuPage = &MenuPageSaveZone_SaveGame;
}
if ( m_pageState == PAGESTATE_NORMAL && gMusicPlaying )
{
DMAudio.StopFrontEndTrack();
gMusicPlaying = false;
}
if ( m_nChangePageTimer != 0 && CTimer::GetTimeInMillisecondsPauseMode() >= m_nChangePageTimer )
{
m_nChangePageTimer = 0;
pMenuSave = &MenuPage_SaveBasic;
m_currentPage = m_newPage;
}
if ( m_nPageLeftTimer != 0 && CTimer::GetTimeInMillisecondsPauseMode() >= m_nPageLeftTimer )
m_nPageLeftTimer = 0;
if ( m_nPageRightTimer != 0 && CTimer::GetTimeInMillisecondsPauseMode() >= m_nPageRightTimer )
m_nPageRightTimer = 0;
if ( m_nStartPauseTimer != 0 && CTimer::GetTimeInMillisecondsPauseMode() >= m_nStartPauseTimer )
m_nStartPauseTimer = 0;
if ( m_nEndPauseTimer != 0 && CTimer::GetTimeInMillisecondsPauseMode() >= m_nEndPauseTimer )
{
m_nEndPauseTimer = 0;
m_bMenuActive = false;
m_bMenuActive = false;
m_bInSaveZone = false;
CTimer::EndUserPause();
}
}
void
CMenuManager::ProcessControllerInput(void)
{
if ( TimeToStopPadShaking != 0 && TimeToStopPadShaking < CTimer::GetTimeInMillisecondsPauseMode() )
{
CPad::StopPadsShaking();
TimeToStopPadShaking = 0;
}
#ifdef GTA_PC
if ( CPad::GetPad(0)->GetDPadLeft() || CPad::GetPad(0)->GetLeft() )
#else
if ( CPad::GetPad(0)->GetDPadLeft() )
#endif
{
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
case PAGESTATE_HIGHLIGHTED:
break;
case PAGESTATE_SELECTED:
{
if ( pActiveMenuPage )
pActiveMenuPage->GoLeftStill();
break;
}
}
}
#ifdef GTA_PC
if ( CPad::GetPad(0)->GetDPadRight() || CPad::GetPad(0)->GetRight() )
#else
if ( CPad::GetPad(0)->GetDPadRight() )
#endif
{
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
case PAGESTATE_HIGHLIGHTED:
break;
case PAGESTATE_SELECTED:
{
if ( pActiveMenuPage )
pActiveMenuPage->GoRightStill();
break;
}
}
}
#ifdef GTA_PC
if ( CPad::GetPad(0)->GetDPadLeftJustDown() || CPad::GetPad(0)->GetLeftJustDown() )
#else
if ( CPad::GetPad(0)->GetDPadLeftJustDown() )
#endif
ProcessDPadLeftJustDown();
#ifdef GTA_PC
if ( CPad::GetPad(0)->GetDPadRightJustDown() || CPad::GetPad(0)->GetRightJustDown() )
#else
if ( CPad::GetPad(0)->GetDPadRightJustDown() )
#endif
ProcessDPadRightJustDown();
#ifdef GTA_PC
if ( CPad::GetPad(0)->GetDPadUp() || CPad::GetPad(0)->GetUp() )
#else
if ( CPad::GetPad(0)->GetDPadUp() )
#endif
{
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
{
if ( m_currentPage == PAGE_STATS )
{
if ( pActiveMenuPage )
pActiveMenuPage->GoUpStill();
}
break;
}
case PAGESTATE_HIGHLIGHTED:
break;
case PAGESTATE_SELECTED:
{
if ( pActiveMenuPage )
pActiveMenuPage->GoUpStill();
break;
}
}
}
#ifdef GTA_PC
if ( CPad::GetPad(0)->GetDPadDown() || CPad::GetPad(0)->GetDown() )
#else
if ( CPad::GetPad(0)->GetDPadDown() )
#endif
{
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
{
if ( m_currentPage == PAGE_STATS )
{
if ( pActiveMenuPage )
pActiveMenuPage->GoDownStill();
}
break;
}
case PAGESTATE_HIGHLIGHTED:
break;
case PAGESTATE_SELECTED:
{
if ( pActiveMenuPage )
pActiveMenuPage->GoDownStill();
break;
}
}
}
#ifdef GTA_PC
if ( CPad::GetPad(0)->GetDPadUpJustDown() || CPad::GetPad(0)->GetUpJustDown() )
#else
if ( CPad::GetPad(0)->GetDPadUpJustDown() )
#endif
ProcessDPadUpJustDown();
#ifdef GTA_PC
if ( CPad::GetPad(0)->GetDPadDownJustDown() || CPad::GetPad(0)->GetDownJustDown() )
#else
if ( CPad::GetPad(0)->GetDPadDownJustDown() )
#endif
ProcessDPadDownJustDown();
if ( CPad::GetPad(0)->GetLeftShoulder1JustDown() )
{
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
ProcessDPadLeftJustDown();
break;
case PAGESTATE_HIGHLIGHTED:
case PAGESTATE_SELECTED:
break;
}
}
if ( CPad::GetPad(0)->GetRightShoulder1JustDown() )
{
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
ProcessDPadRightJustDown();
break;
case PAGESTATE_HIGHLIGHTED:
case PAGESTATE_SELECTED:
break;
}
}
#ifdef GTA_PC
if ( CPad::GetPad(0)->GetCrossJustDown() || CPad::GetPad(0)->GetEnterJustDown() || CPad::GetPad(0)->GetRightMouseJustDown() )
#else
if ( CPad::GetPad(0)->GetCrossJustDown() )
#endif
ProcessDPadCrossJustDown();
#ifdef GTA_PC
if ( CPad::GetPad(0)->GetTriangleJustDown() || CPad::GetPad(0)->GetBackspaceJustDown() || (m_pageState != PAGESTATE_NORMAL && CPad::GetPad(0)->GetEscapeJustDown()) )
#else
if ( CPad::GetPad(0)->GetTriangleJustDown() )
#endif
ProcessDPadTriangleJustDown();
}
void
CMenuManager::ProcessDPadLeftJustDown(void)
{
if ( m_bInSaveZone )
{
if ( pActiveMenuPage )
{
pActiveMenuPage->GoLeft();
if ( pActiveMenuPage->m_pCurrentControl == &MenuSaveZoneSSL_1 )
{
if ( MenuSaveZoneSSL_1.m_numOptions < 2 )
;
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
}
else
{
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
{
if ( !bMemoryCardSpecialZone && !m_bInSaveZone )
{
if ( m_nChangePageTimer == 0 )
{
if ( --m_newPage < PAGE_FIRST ) m_newPage = PAGE_LAST;
m_nPageLeftTimer = CTimer::GetTimeInMillisecondsPauseMode() + 300;
m_nPageRightTimer = 0;
m_nChangePageTimer = CTimer::GetTimeInMillisecondsPauseMode() + 250;
field_18 = m_newPage;
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
}
}
break;
}
case PAGESTATE_HIGHLIGHTED:
{
if ( pActiveMenuPage )
pActiveMenuPage->GoLeftMenuOnPage();
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
break;
}
case PAGESTATE_SELECTED:
{
if ( pActiveMenuPage )
{
pActiveMenuPage->GoLeft();
if ( m_currentPage == PAGE_AUDIO)
{
if ( pActiveMenuPage->m_pCurrentControl == &MenuAudio_1 )
;
else if ( pActiveMenuPage->m_pCurrentControl == &MenuAudio_2 )
;
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
else if ( m_currentPage == PAGE_DISPLAY)
{
if ( pActiveMenuPage->m_pCurrentControl == &MenuDisplay_1 )
;
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
else
{
if ( pActiveMenuPage->m_pCurrentControl == &MenuSaveDG_2 )
{
if ( MenuSaveDG_2.m_numOptions < 2 )
;
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
else if ( pActiveMenuPage->m_pCurrentControl == &MenuSaveLG_2 )
{
if ( MenuSaveLG_2.m_numOptions < 2 )
;
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
}
break;
}
}
}
}
void
CMenuManager::ProcessDPadRightJustDown(void)
{
if ( m_bInSaveZone )
{
if ( pActiveMenuPage )
{
pActiveMenuPage->GoRight();
if ( pActiveMenuPage->m_pCurrentControl == &MenuSaveZoneSSL_1 )
{
if ( MenuSaveZoneSSL_1.m_numOptions < 2 )
;
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
}
else
{
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
{
if ( !bMemoryCardSpecialZone && !m_bInSaveZone )
{
if ( m_nChangePageTimer == 0 )
{
if ( ++m_newPage > PAGE_LAST ) m_newPage = PAGE_FIRST;
m_nPageLeftTimer = 0;
m_nPageRightTimer = CTimer::GetTimeInMillisecondsPauseMode() + 300;
m_nChangePageTimer = CTimer::GetTimeInMillisecondsPauseMode() + 250;
field_18 = m_newPage;
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
}
}
break;
}
case PAGESTATE_HIGHLIGHTED:
{
if ( pActiveMenuPage )
pActiveMenuPage->GoRightMenuOnPage();
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
break;
}
case PAGESTATE_SELECTED:
{
if ( pActiveMenuPage )
{
pActiveMenuPage->GoRight();
if ( m_currentPage == PAGE_AUDIO)
{
if ( pActiveMenuPage->m_pCurrentControl == &MenuAudio_1 )
;
else if ( pActiveMenuPage->m_pCurrentControl == &MenuAudio_2 )
;
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
else if ( m_currentPage == PAGE_DISPLAY)
{
if ( pActiveMenuPage->m_pCurrentControl == &MenuDisplay_1 )
;
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
else
{
if ( pActiveMenuPage->m_pCurrentControl == &MenuSaveDG_2 )
{
if ( MenuSaveDG_2.m_numOptions < 2 )
;
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
else if ( pActiveMenuPage->m_pCurrentControl == &MenuSaveLG_2 )
{
if ( MenuSaveLG_2.m_numOptions < 2 )
;
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
}
break;
}
}
}
}
void
CMenuManager::ProcessDPadUpJustDown(void)
{
if ( m_bInSaveZone )
{
if ( pActiveMenuPage )
{
pActiveMenuPage->GoUp();
if ( pActiveMenuPage->m_pCurrentControl == &MenuSaveZoneSSL_1 )
{
if ( MenuSaveZoneSSL_1.m_numOptions < 2 )
;
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
}
else
{
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
break;
case PAGESTATE_HIGHLIGHTED:
{
if ( pActiveMenuPage )
pActiveMenuPage->GoUpMenuOnPage();
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
break;
}
case PAGESTATE_SELECTED:
{
if ( pActiveMenuPage )
{
pActiveMenuPage->GoUp();
if ( pActiveMenuPage->m_pCurrentControl == &MenuSaveDG_2 )
{
if ( MenuSaveDG_2.m_numOptions < 2 )
;
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
else if ( pActiveMenuPage->m_pCurrentControl == &MenuSaveLG_2 )
{
if ( MenuSaveLG_2.m_numOptions < 2 )
;
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
break;
}
}
}
}
void
CMenuManager::ProcessDPadDownJustDown(void)
{
if ( m_bInSaveZone )
{
if ( pActiveMenuPage )
{
pActiveMenuPage->GoDown();
if ( pActiveMenuPage->m_pCurrentControl == &MenuSaveZoneSSL_1 )
{
if ( MenuSaveZoneSSL_1.m_numOptions < 2 )
;
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
}
else
{
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
break;
case PAGESTATE_HIGHLIGHTED:
{
if ( pActiveMenuPage )
pActiveMenuPage->GoDownMenuOnPage();
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
break;
}
case PAGESTATE_SELECTED:
{
if ( pActiveMenuPage )
{
pActiveMenuPage->GoDown();
if ( pActiveMenuPage->m_pCurrentControl == &MenuSaveDG_2 )
{
if ( MenuSaveDG_2.m_numOptions < 2 )
;
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
else if ( pActiveMenuPage->m_pCurrentControl == &MenuSaveLG_2 )
{
if ( MenuSaveLG_2.m_numOptions < 2 )
;
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
}
break;
}
}
}
}
void
CMenuManager::ProcessDPadTriangleJustDown(void)
{
if ( pActiveMenuPage )
{
pActiveMenuPage->SelectDefaultCancelAction();
if ( m_bMenuActive || m_bInSaveZone )
{
if ( bIgnoreTriangleButton )
{
if ( m_bInSaveZone )
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_BACK, 0);
else if ( pActiveMenuPage->m_pCurrentControl == &MenuSaveDG_2 || pActiveMenuPage->m_pCurrentControl == &MenuSaveLG_2 )
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_BACK, 0);
}
else if ( !bIgnoreTriangleButton )
{
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
WorkOutMenuState(true);
break;
case PAGESTATE_HIGHLIGHTED:
m_pageState = PAGESTATE_NORMAL;
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
break;
case PAGESTATE_SELECTED:
{
m_pageState = PAGESTATE_HIGHLIGHTED;
if ( pActiveMenuPage )
{
if ( pActiveMenuPage->m_numControls == 1 )
{
m_pageState = PAGESTATE_NORMAL;
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
}
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_BACK, 0);
}
break;
}
}
}
}
}
else
{
if ( !bIgnoreTriangleButton )
{
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
WorkOutMenuState(false);
break;
case PAGESTATE_HIGHLIGHTED:
m_pageState = PAGESTATE_NORMAL;
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
break;
case PAGESTATE_SELECTED:
{
m_pageState = PAGESTATE_HIGHLIGHTED;
if ( pActiveMenuPage )
{
if ( pActiveMenuPage->m_numControls == 1 )
{
m_pageState = PAGESTATE_NORMAL;
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
}
else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_BACK, 0);
}
break;
}
}
}
}
}
void
CMenuManager::ProcessDPadCrossJustDown(void)
{
if ( m_bInSaveZone )
{
if ( pActiveMenuPage )
pActiveMenuPage->SelectCurrentOptionUnderCursor();
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
}
else
{
if ( m_currentPage != PAGE_STATS && m_currentPage != PAGE_BRIEFS)
{
switch ( m_pageState )
{
case PAGESTATE_NORMAL:
{
m_pageState = PAGESTATE_HIGHLIGHTED;
if ( pActiveMenuPage )
{
if ( pActiveMenuPage->m_numControls == 1 )
m_pageState = PAGESTATE_SELECTED;
}
switch ( m_currentPage )
{
case PAGE_AUDIO:
{
if ( pActiveMenuPage->m_pCurrentControl == &MenuAudio_1
|| pActiveMenuPage->m_pCurrentControl == &MenuAudio_2
|| pActiveMenuPage->m_pCurrentControl == &MenuAudio_3
|| pActiveMenuPage->m_pCurrentControl == &MenuAudio_4 )
{
if ( !gMusicPlaying )
{
DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
gMusicPlaying = true;
}
}
else
{
DMAudio.StopFrontEndTrack();
gMusicPlaying = false;
}
break;
}
}
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
break;
}
case PAGESTATE_HIGHLIGHTED:
{
m_pageState = PAGESTATE_SELECTED;
DoHackingMenusAtPageBrowse();
if ( pActiveMenuPage )
{
if ( pActiveMenuPage->IsActiveMenuTwoState())
{
m_pageState = PAGESTATE_HIGHLIGHTED;
pActiveMenuPage->ActiveMenuTwoState_SelectNextPosition();
}
}
switch ( m_currentPage )
{
case PAGE_AUDIO:
{
if ( pActiveMenuPage->m_pCurrentControl != &MenuAudio_4 )
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
break;
}
default:
{
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
DMAudio.StopFrontEndTrack();
gMusicPlaying = false;
break;
}
}
break;
}
case PAGESTATE_SELECTED:
{
if ( pActiveMenuPage )
{
pActiveMenuPage->SelectCurrentOptionUnderCursor();
switch ( m_currentPage )
{
case PAGE_AUDIO:
{
if ( pActiveMenuPage->m_pCurrentControl != &MenuAudio_3 )
m_pageState = PAGESTATE_HIGHLIGHTED;
break;
}
case PAGE_LOAD:
case PAGE_LANGUAGE:
break;
default:
m_pageState = PAGESTATE_HIGHLIGHTED;
break;
}
}
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
break;
}
}
}
}
}
void
CMenuManager::DoHackingMenusAtPageBrowse(void)
{
if ( pActiveMenuPage )
{
switch ( m_currentPage )
{
case PAGE_CONTROLS:
{
if ( pActiveMenuPage->m_pCurrentControl == &MenuControls_1 )
{
int32 sel = MenuControls_1.GetMenuSelection();
MenuControls_1.GoFirst();
for ( int32 i = 0; i < sel; i++ )
MenuControls_1.GoNext();
}
break;
}
case PAGE_AUDIO:
{
if ( pActiveMenuPage->m_pCurrentControl == &MenuAudio_3 )
{
int32 sel = MenuAudio_3.GetMenuSelection();
MenuAudio_3.GoFirst();
for ( int32 i = 0; i < sel; i++ )
MenuAudio_3.GoNext();
}
break;
}
}
}
}
void
CMenuManager::SetSoundLevelsForMusicMenu(void)
{
DMAudio.SetMusicMasterVolume(m_PrefsMusicVolume);
DMAudio.SetEffectsMasterVolume(m_PrefsSfxVolume);
}
void
CMenuManager::FilterOutColorMarkersFromString(wchar *string, CRGBA &color)
{
wchar buf[300];
UnicodeStrcpy(buf, string);
wchar *src = buf;
wchar *dst = string;
while ( *src != '\0' )
{
if ( *src == '~' )
{
src++;
if ( *src == 'l' ) color = CRGBA(0, 0, 0, 255);
else if ( *src == 'p' ) color = CRGBA(255, 0, 255, 255);
else if ( *src == 'y' ) color = CRGBA(255, 255, 0, 255);
else if ( *src == 'w' ) color = CRGBA(255, 255, 255, 255);
else if ( *src == 'b' ) color = CRGBA(40, 40, 255, 255);
else if ( *src == 'g' ) color = CRGBA(40, 235, 40, 255);
else if ( *src == 'r' ) color = CRGBA(255, 0, 0, 255);
while ( *src++ != '~' )
;
}
else
*dst++ = *src++;
}
*dst = '\0';
}
#endif