#pragma
#include "Sprite2d.h"
#define HEADER_POS_X 35.0f
#define HEADER_POS_Y 93.0f
#define HEADER_WIDTH 0.84f
#define HEADER_HEIGHT 1.6f
#define ACTION_POS_X 20.0f
#define ACTION_POS_Y 37.5f
#define ACTION_WIDTH 0.675f
#define ACTION_HEIGHT 0.81f
#define COLUMN_POS_X HEADER_POS_X + 16.0f
#define COLUMN_MAX_Y 149.0f
#define COLUMN_MID_Y 100.0f
#define COLUMN_MIN_Y 110.0f
#define COLUMN_PAUSE_Y 25.0f
#define COLUMN_START_Y 9.0f
#define COLUMN_FEDS 139.0f
#define COLUMN_SAVE_X 121.0f
#define COLUMN_SAVE_Y 111.0f
#define COLUMN_SPACING_MAX 24.0f
#define COLUMN_SPACING_MIN 20.0f
#define SELECT_BOX_MAX 20.5f
#define SELECT_BOX_MIN 17.0f
#define FE_RADIO_ICON_X 31.5f
#define FE_RADIO_ICON_Y 29.5f
#define FE_RADIO_ICON_W 60.0f
#define FE_RADIO_ICON_H 60.0f
#define DROP_COLOR_A 150
#define DROP_COLOR_SIZE -1
#define SLIDER_X 306.0f
enum {
LANGUAGE_AMERICAN,
LANGUAGE_FRENCH,
LANGUAGE_GERMAN,
LANGUAGE_ITALIAN,
LANGUAGE_SPANISH,
};
enum eFrontendSprites {
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,
};
enum eMenuSprites {
MENU_CONNECTION,
MENU_FINDGAME,
MENU_HOSTGAME,
MENU_MAINMENU,
MENU_PLAYERSET,
MENU_SINGLEPLAYER,
MENU_MULTIPLAYER,
MENU_DMALOGO,
MENU_GTALOGO,
MENU_RSTARLOGO,
MENU_GAMESPY,
MENU_MOUSE,
MENU_MOUSET,
MENU_MP3LOGO,
MENU_DOWNOFF,
MENU_UPOFF,
MENU_DOWNON,
MENU_UPON,
MENU_GTA3LOGO,
};
enum eMenuActions {
MENU_ACTION_SAVE_1 = 1,
MENU_ACTION_SAVE_2,
MENU_ACTION_SAVE_3,
MENU_ACTION_SAVE_4,
MENU_ACTION_SAVE_5,
MENU_ACTION_SAVE_6,
MENU_ACTION_SAVE_7,
MENU_ACTION_SAVE_8,
};
enum eMenuScreen {
MENU_NONE = 0,
MENU_STATS = 1,
MENU_NEW_GAME = 2,
MENU_BRIEFS = 3,
MENU_CONTROLLER_SETTINGS = 4,
MENU_SOUND_SETTINGS = 5,
MENU_GRAPHICS_SETTINGS = 6,
MENU_LANGUAGE_SETTINGS = 7,
MENU_CHOOSE_LOAD_SLOT = 8,
MENU_CHOOSE_DELETE_SLOT = 9,
MENU_NEW_GAME_RELOAD = 10,
MENU_LOAD_SLOT_CONFIRM = 11,
MENU_DELETE_SLOT_CONFIRM = 12,
MENU_13 = 13,
MENU_LOADING_IN_PROGRESS = 14,
MENU_DELETING_IN_PROGRESS = 15,
MENU_16 = 16,
MENU_DELETE_FAILED = 17,
MENU_DEBUG_MENU = 18,
MENU_MEMORY_CARD_1 = 19,
MENU_MEMORY_CARD_2 = 20,
MENU_MULTIPLAYER_MAIN = 21,
MENU_SAVE_FAILED_1 = 22,
MENU_SAVE_FAILED_2 = 23,
MENU_SAVE = 24,
MENU_NO_MEMORY_CARD = 25,
MENU_CHOOSE_SAVE_SLOT = 26,
MENU_SAVE_OVERWRITE_CONFIRM = 27,
MENU_MULTIPLAYER_MAP = 28,
MENU_MULTIPLAYER_CONNECTION = 29,
MENU_MULTIPLAYER_FIND_GAME = 30,
MENU_MULTIPLAYER_MODE = 31,
MENU_MULTIPLAYER_CREATE = 32,
MENU_MULTIPLAYER_START = 33,
MENU_SKIN_SELECT_OLD = 34,
MENU_CONTROLLER_PC = 35,
MENU_CONTROLLER_PC_OLD1 = 36,
MENU_CONTROLLER_PC_OLD2 = 37,
MENU_CONTROLLER_PC_OLD3 = 38,
MENU_CONTROLLER_PC_OLD4 = 39,
MENU_CONTROLLER_DEBUG = 40,
MENU_OPTIONS = 41,
MENU_EXIT = 42,
MENU_SAVING_IN_PROGRESS = 43,
MENU_SAVE_SUCCESSFUL = 44,
MENU_DELETING = 45,
MENU_DELETE_SUCCESS = 46,
MENU_SAVE_FAILED = 47,
MENU_LOAD_FAILED = 48,
MENU_LOAD_FAILED_2 = 49,
MENU_FILTER_GAME = 50,
MENU_START_MENU = 51,
MENU_PAUSE_MENU = 52,
MENU_CHOOSE_MODE = 53,
MENU_SKIN_SELECT = 54,
MENU_KEYBOARD_CONTROLS = 55,
MENU_MOUSE_CONTROLS = 56,
MENU_57 = 57,
MENU_58 = 58,
};
enum eCheckHover {
ACTIVATE_OPTION = 2,
IGNORE_OPTION = 42,
};
struct tSkinInfo
{
int field_0;
char skinName[256];
char currSkinName[256];
char date[256];
int field_304;
};
struct CMenuScreen {
char m_ScreenName[8];
int32 m_PreviousPage[3]; //
int32 m_ParentEntry[2];
struct CMenuEntry
{
int32 m_Action;
char m_EntryName[8];
int32 m_ActionSlot;
int32 m_TargetMenu;
} m_aEntries[18];
};
class CMenuManager
{
public:
int32 m_nPrefsVideoMode;
int32 m_nDisplayVideoMode;
int8 m_nPrefsAudio3DProviderIndex;
bool m_bKeyChangeNotProcessed;
char m_aSkinName[256];
int32 m_nHelperTextMsgId;
bool m_bLanguageLoaded;
bool m_bMenuActive;
char field_112;
char field_113;
bool m_bStartGameLoading;
bool m_bFirstTime;
bool m_bGameNotLoaded;
int32 m_nMousePosX;
int32 m_nMousePosY;
int32 m_nMouseTempPosX;
int32 m_nMouseTempPosY;
bool m_bShowMouse;
tSkinInfo field_12C;
tSkinInfo *m_pSelectedSkin;
tSkinInfo *field_438;
float field_43C;
int field_440;
int m_nSkinsTotal;
char _unk0[4];
int field_44C;
bool m_bSkinsFound;
bool m_bQuitGameNoCD;
char field_452;
bool m_bSaveMenuActive;
bool m_bLoadingSavedGame;
char field_455;
char field_456;
bool m_bSpritesLoaded;
CSprite2d m_aFrontEndSprites[28];
CSprite2d m_aMenuSprites[20];
int field_518;
int m_nMenuFadeAlpha;
char field_520;
char field_521;
char field_522;
char field_523;
char field_524;
int m_CurrCntrlAction;
char _unk1[4];
int field_530;
char field_534;
char field_535;
int8 field_536;
int m_nHelperTextAlpha;
int m_nMouseOldPosX;
int m_nMouseOldPosY;
int m_nHoverOption;
int m_nCurrScreen;
int m_nCurrOption;
int m_nCurrentInput;
int m_nPrevScreen;
int field_558;
int m_nCurrSaveSlot;
int m_nScreenChangeDelayTimer;
static int32 &OS_Language;
static int8 &m_PrefsUseVibration;
static int8 &m_DisplayControllerOnFoot;
static int8 &m_PrefsUseWideScreen;
static int8 &m_PrefsRadioStation;
static int8 &m_PrefsVsync;
static int8 &m_PrefsVsyncDisp;
static int8 &m_PrefsFrameLimiter;
static int8 &BlurOn;
static int8 &m_PrefsShowSubtitles;
static int8 &m_PrefsSpeakers;
static int8 &m_ControlMethod;
static int8 &m_PrefsDMA;
static int8 &m_PrefsLanguage;
static int8 &m_bDisableMouseSteering;
static int32 &m_PrefsBrightness;
static float &m_PrefsLOD;
static int8 &m_bFrontEnd_ReloadObrTxtGxt;
static int32 &m_PrefsMusicVolume;
static int32 &m_PrefsSfxVolume;
static bool &m_bStartUpFrontEndRequested;
static bool &m_bShutDownFrontEndRequested;
static bool &m_PrefsAllowNastyGame;
private:
enum eColumns { L, R, COLUMNS, };
public:
void BuildStatLine(char *, void *, uint16, void *);
static void CentreMousePointer();
void CheckCodesForControls(int, int);
bool CheckHover(int x1, int x2, int y1, int y2);
int CostructStatLine(int);
void DisplayHelperText();
float DisplaySlider(float, float, float, float, float, float);
void DoSettingsBeforeStartingAGame();
void Draw();
void DrawControllerBound(int, int, int, uint8);
void DrawControllerScreenExtraText(int, int, int);
void DrawControllerSetupScreen();
void DrawFrontEnd();
void DrawFrontEndNormal();
void DrawPlayerSetupScreen();
int FadeIn(int alpha);
void FilterOutColorMarkersFromString(uint16, CRGBA &);
int GetStartOptionsCntrlConfigScreens();
static void InitialiseChangedLanguageSettings();
void LoadAllTextures();
void LoadSettings();
static void MessageScreen(char *);
static void PickNewPlayerColour();
void PrintBriefs();
static void PrintErrorMessage();
void PrintStats();
void Process();
void ProcessButtonPresses();
void ProcessOnOffMenuOptions();
static void RequestFrontEndShutdown();
static void RequestFrontEndStartUp();
void ResetHelperText();
void SaveLoadFileError_SetUpErrorScreen();
void SaveSettings();
void SetHelperText(int text);
void ShutdownJustMenu();
static float StretchX(float);
static float StretchY(float );
void SwitchMenuOnAndOff();
void UnloadTextures();
void WaitForUserCD();
};
static_assert(sizeof(CMenuManager) == 0x564, "CMenuManager: error");
extern CMenuManager &FrontEndMenuManager;