stvoy-sp-sdk/ui/ui_game.cpp

4441 lines
152 KiB
C++

#include "ui_local.h"
#include "gameinfo.h"
static qhandle_t cornerPic;
static void LeaveGame_Action( void );
void UI_LCARSOut_Menu(void);
// Precache stuff for New Game Screen
static struct
{
qhandle_t currentGameTopLeft; // Upper left corner of current game box
qhandle_t swooshTop;
qhandle_t warpCore;
qhandle_t cornerUpper;
qhandle_t cornerLower;
qhandle_t swooshBottom;
qhandle_t gridbar;
sfxHandle_t warpconstant;
sfxHandle_t warpthrumslow;
sfxHandle_t warpthrummed;
sfxHandle_t warpthrumfast;
} newgame_cache;
menuframework_s s_leavegame_menu;
menubitmap_s s_leavegame_yes;
menubitmap_s s_leavegame_no;
#define ID_LEAVE_YES 8
#define ID_LEAVE_NO 9
#define LISTBUFSIZE 10240
static struct
{
menuframework_s menu;
menubitmap_s deletegame;
menubitmap_s arrowdwn;
menubitmap_s arrowup;
menubitmap_s yes;
menubitmap_s no;
qhandle_t currentGameTopLeft; // Upper left corner of current game box
qhandle_t currentGameBotLeft; // Bottom left corner of current game box
qhandle_t currentGameTopRight; // Upper right corner of current game box
qhandle_t currentGameBotRight; // Bottom right corner of current game box
qhandle_t corner_ur_16_18; // Upper corner of directory box
qhandle_t corner_lr_8_16; // Lower corner of directory box
char listBuf[LISTBUFSIZE]; // The list of file names read in
// For scrolling through file names
int currentLine; // Index to currentSaveFileComments[] currently highlighted
int currentId; //currently selected item id
int startISaveFile; // Index to first line in currentSaveFileComments[] displayed in window
int saveFileCnt; // Number of save files read in
int awaitingSave; // Flag to see if user wants to overwrite a game.
char *mapName;
char autoSaveComment[iSG_COMMENT_SIZE]; // Comment for autoesave game
int savegameFromFlag;
} s_savegame;
#define AUTOSAVENAME "auto"
#define CURRENTLINE_NONE -1
#define HARD_INC 8
#define MEDIUM_INC 4
#define EASY_INC 2
#define SUPEREASY_INC 1
menubitmap_s s_savegame_mainmenu;
menubitmap_s s_savegame_start;
static int gameWindow;
static float gameWindowTime;
byte screenShotBuf[SG_SCR_WIDTH * SG_SCR_HEIGHT * 4];
static menufield_s s_file_desc_field;
menubitmap_s s_savegamedata;
menufield_s s_savedline1;
menufield_s s_savedline2;
menufield_s s_savedline3;
menufield_s s_savedline4;
menufield_s s_savedline5;
menufield_s s_savedline6;
menufield_s s_savedline7;
menufield_s s_savedline8;
menufield_s s_savedline9;
menufield_s s_savedline10;
menufield_s s_savedline11;
menufield_s s_savedline12;
menufield_s s_savedate1;
menufield_s s_savedate2;
menufield_s s_savedate3;
menufield_s s_savedate4;
menufield_s s_savedate5;
menufield_s s_savedate6;
menufield_s s_savedate7;
menufield_s s_savedate8;
menufield_s s_savedate9;
menufield_s s_savedate10;
menufield_s s_savedate11;
menufield_s s_savedate12;
menufield_s s_savetime1;
menufield_s s_savetime2;
menufield_s s_savetime3;
menufield_s s_savetime4;
menufield_s s_savetime5;
menufield_s s_savetime6;
menufield_s s_savetime7;
menufield_s s_savetime8;
menufield_s s_savetime9;
menufield_s s_savetime10;
menufield_s s_savetime11;
menufield_s s_savetime12;
#define MAX_FILEDISP 12
static void* g_savedline[] =
{
&s_savedline1,
&s_savedline2,
&s_savedline3,
&s_savedline4,
&s_savedline5,
&s_savedline6,
&s_savedline7,
&s_savedline8,
&s_savedline9,
&s_savedline10,
&s_savedline11,
&s_savedline12,
NULL,
};
static void* g_savedate[] =
{
&s_savedate1,
&s_savedate2,
&s_savedate3,
&s_savedate4,
&s_savedate5,
&s_savedate6,
&s_savedate7,
&s_savedate8,
&s_savedate9,
&s_savedate10,
&s_savedate11,
&s_savedate12,
NULL,
};
static void* g_savetime[] =
{
&s_savetime1,
&s_savetime2,
&s_savetime3,
&s_savetime4,
&s_savetime5,
&s_savetime6,
&s_savetime7,
&s_savetime8,
&s_savetime9,
&s_savetime10,
&s_savetime11,
&s_savetime12,
NULL,
};
#define MAX_SAVELOADFILES 100
#define MAX_SAVELOADNAME 32
typedef struct
{
char currentSaveFileComments[iSG_COMMENT_SIZE]; // Hold file comments
char *currentSaveFileNames; // Hold file names in save directory
char *currentSaveFileDateTime; // Hold file names in save directory
} savedata_t;
static savedata_t s_savedata[MAX_SAVELOADFILES];
//static char currentSaveFileComments[MAX_SAVELOADFILES][iSG_COMMENT_SIZE]; // Hold file comments
//static char *currentSaveFileNames[MAX_SAVELOADFILES]; // Hold file names in save directory
//static char *currentSaveFileDateTime[MAX_SAVELOADFILES]; // Hold file names in save directory
//===================================================================
//
// Save Game Menu
//
//===================================================================
// menu action identifiers
#define ID_ARROWUP 10
#define ID_ARROWDWN 11
#define ID_YES 13
#define ID_NO 14
#define ID_AUTOSAVE 15
#define ID_MAINMENU 103
#define ID_RESUMETOUR 204
#define ID_TOUR_LINE1 220
#define ID_TOUR_LINE2 221
#define ID_TOUR_LINE3 222
#define ID_TOUR_LINE4 223
#define ID_TOUR_LINE5 224
#define ID_TOUR_LINE6 225
#define ID_SAVEGAMEDATA 9000
#define ID_LOADGAMEDATA 9001
#define ID_DELETEGAMEDATA 9002
#define ID_SAVEDCOMMENT1 110
#define ID_SAVEDCOMMENT2 111
#define ID_SAVEDCOMMENT3 112
#define ID_SAVEDCOMMENT4 113
#define ID_SAVEDCOMMENT5 114
#define ID_SAVEDCOMMENT6 115
#define ID_SAVEDCOMMENT7 116
#define ID_SAVEDCOMMENT8 117
#define ID_SAVEDCOMMENT9 118
#define ID_SAVEDCOMMENT10 119
#define ID_SAVEDCOMMENT11 120
#define ID_SAVEDCOMMENT12 121
// Thumbnail locations
#define SGPIC_X 430 // Beginning X of thumbnail
#define SGPIC_Y 308 // Bottom Y of thumbnail
#define SGPIC_W 171 // Width of thumbnail
#define SGPIC_H (SGPIC_W * 0.75) // Height of thumbnail
#define SGPIC_BRD 5 //border around
#define SGBLIP_W 5 // Blip width
#define SGBLIP_MIN_X (SGPIC_X + SGBLIP_W ) // Blip starting X
#define SGBLIP_MAX_X (SGPIC_X + SGPIC_W - SGBLIP_W - SGPIC_BRD) // Blip ending X
typedef enum
{
NGG_POWERBAND1_1, // LH TOP
NGG_POWERBAND1_2, // LH BOTTOM
NGG_WARPBAND1_1, // LH TOP
NGG_WARPBAND1_2, // RH TOP
NGG_WARPBAND1_3, // LH BOTTOM
NGG_WARPBAND1_4, // RH BOTTOM
NGG_TOP_NUMBERS,
NGG_TOP_SPEC_ROW1,
NGG_TOP_SPEC_ROW2,
NGG_TOP_SPEC_ROW3,
NGG_TOP_COL1_NUM1,
NGG_TOP_COL1_NUM2,
NGG_TOP_COL1_NUM3,
NGG_TOP_COL1_NUM4,
NGG_TOP_COL1_NUM5,
NGG_TOP_COL2_NUM1,
NGG_TOP_COL2_NUM2,
NGG_TOP_COL2_NUM3,
NGG_TOP_COL2_NUM4,
NGG_TOP_COL2_NUM5,
NGG_TOP_COL3_NUM1,
NGG_TOP_COL3_NUM2,
NGG_TOP_COL3_NUM3,
NGG_TOP_COL3_NUM4,
NGG_TOP_COL3_NUM5,
NGG_NUMBERS,
NGG_SPEC_ROW1,
NGG_SPEC_ROW2,
NGG_SPEC_ROW3,
NGG_COL1_NUM1,
NGG_COL1_NUM2,
NGG_COL1_NUM3,
NGG_COL1_NUM4,
NGG_COL1_NUM5,
NGG_COL1_NUM6,
NGG_COL1_NUM7,
NGG_COL2_NUM1,
NGG_COL2_NUM2,
NGG_COL2_NUM3,
NGG_COL2_NUM4,
NGG_COL2_NUM5,
NGG_COL2_NUM6,
NGG_COL2_NUM7,
NGG_COL3_NUM1,
NGG_COL3_NUM2,
NGG_COL3_NUM3,
NGG_COL3_NUM4,
NGG_COL3_NUM5,
NGG_COL3_NUM6,
NGG_COL3_NUM7,
NGG_COL4_NUM1,
NGG_COL4_NUM2,
NGG_COL4_NUM3,
NGG_COL4_NUM4,
NGG_COL4_NUM5,
NGG_COL4_NUM6,
NGG_COL4_NUM7,
NGG_COL5_NUM1,
NGG_COL5_NUM2,
NGG_COL5_NUM3,
NGG_COL5_NUM4,
NGG_COL5_NUM5,
NGG_COL5_NUM6,
NGG_COL5_NUM7,
NGG_COL6_NUM1,
NGG_COL6_NUM2,
NGG_COL6_NUM3,
NGG_COL6_NUM4,
NGG_COL6_NUM5,
NGG_COL6_NUM6,
NGG_COL6_NUM7,
NGG_MASTER_ARROW,
NGG_BAR1_LARROW,
NGG_BAR1_RARROW,
NGG_BAR2_LARROW,
NGG_BAR2_RARROW,
NGG_BAR3_LARROW,
NGG_BAR3_RARROW,
NGG_BAR4_LARROW,
NGG_BAR4_RARROW,
NGG_MAX
} newgame_graphics_t;
menugraphics_s newgamemenu_graphics[NGG_MAX] =
{
// type timer x y width height file/text graphic, min max target inc style color
MG_GRAPHIC, 0.0, 147, 281, 5, 7, "menu/common/square.tga",0,0, NULL, 147, 296, 0, 1, 0, CT_WHITE, NULL, // NGG_POWERBAND1_1
MG_GRAPHIC, 0.0, 147, 304, 5, 7, "menu/common/square.tga",0,0, NULL, 147, 296, 0, 1, 0, CT_WHITE, NULL, // NGG_POWERBAND1_2
MG_GRAPHIC, 0.0, 306, 0, 17, 7, "menu/common/square.tga",0,0, NULL, 272, 189, 0, 1, 0, CT_WHITE, NULL, // NGG_WARPBAND1_1
MG_GRAPHIC, 0.0, 339, 0, 17, 7, "menu/common/square.tga",0,0, NULL, 272, 189, 0, 1, 0, CT_WHITE, NULL, // NGG_WARPBAND1_2
MG_GRAPHIC, 0.0, 306, 0, 17, 7, "menu/common/square.tga",0,0, NULL, 319, 400, 0, 1, 0, CT_WHITE, NULL, // NGG_WARPBAND1_3
MG_GRAPHIC, 0.0, 339, 0, 17, 7, "menu/common/square.tga",0,0, NULL, 319, 400, 0, 1, 0, CT_WHITE, NULL, // NGG_WARPBAND1_4
MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0,0, NULL, 0, 0, 0, 0, 0, 0, NULL, // NGG_TOP_NUMBERS
MG_GRAPHIC, 0.0, 486, 0, 4, 4, "menu/common/circle.tga",0,0, NULL, 0, 0, 0, 0, 0, CT_LTGOLD1, NULL, // NGG_TOP_SPEC_ROW1
MG_GRAPHIC, 0.0, 486, 0, 4, 4, "menu/common/circle.tga",0,0, NULL, 0, 0, 0, 0, 0, CT_LTGOLD1, NULL, // NGG_TOP_SPEC_ROW2
MG_GRAPHIC, 0.0, 486, 0, 4, 4, "menu/common/circle.tga",0,0, NULL, 0, 0, 0, 0, 0, CT_LTGOLD1, NULL, // NGG_TOP_SPEC_ROW3
MG_NUMBER, 0.0, 490, 60, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL1_NUM1
MG_NUMBER, 0.0, 490, 74, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL1_NUM2
MG_NUMBER, 0.0, 490, 88, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL1_NUM3
MG_NUMBER, 0.0, 490, 102, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL1_NUM4
MG_NUMBER, 0.0, 490, 116, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL1_NUM5
MG_NUMBER, 0.0, 545, 60, 16, 10, NULL, 0,0, NULL, 0, 4, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL2_NUM1
MG_NUMBER, 0.0, 545, 74, 16, 10, NULL, 0,0, NULL, 0, 4, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL2_NUM2
MG_NUMBER, 0.0, 545, 88, 16, 10, NULL, 0,0, NULL, 0, 4, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL2_NUM3
MG_NUMBER, 0.0, 545, 102, 16, 10, NULL, 0,0, NULL, 0, 4, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL2_NUM4
MG_NUMBER, 0.0, 545, 116, 16, 10, NULL, 0,0, NULL, 0, 4, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL2_NUM5
MG_NUMBER, 0.0, 575, 60, 16, 10, NULL, 0,0, NULL, 0, 6, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL3_NUM1
MG_NUMBER, 0.0, 575, 74, 16, 10, NULL, 0,0, NULL, 0, 6, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL3_NUM2
MG_NUMBER, 0.0, 575, 88, 16, 10, NULL, 0,0, NULL, 0, 6, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL3_NUM3
MG_NUMBER, 0.0, 575, 102, 16, 10, NULL, 0,0, NULL, 0, 6, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL3_NUM4
MG_NUMBER, 0.0, 575, 116, 16, 10, NULL, 0,0, NULL, 0, 6, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL3_NUM5
MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0,0, NULL, 0, 0, 0, 0, 0, 0, NULL, // NGG_NUMBERS
MG_GRAPHIC, 0.0, 402, 0, 4, 4, "menu/common/circle.tga",0,0, NULL, 0, 0, 0, 0, 0, CT_LTGOLD1, NULL, // NGG_SPEC_ROW1
MG_GRAPHIC, 0.0, 402, 0, 4, 4, "menu/common/circle.tga",0,0, NULL, 0, 0, 0, 0, 0, CT_LTGOLD1, NULL, // NGG_SPEC_ROW2
MG_GRAPHIC, 0.0, 402, 0, 4, 4, "menu/common/circle.tga",0,0, NULL, 0, 0, 0, 0, 0, CT_LTGOLD1, NULL, // NGG_SPEC_ROW3
MG_NUMBER, 0.0, 410, 0, 16, 10, NULL, 0,0, NULL, 0, 2, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL1_NUM1
MG_NUMBER, 0.0, 410, 0, 16, 10, NULL, 0,0, NULL, 0, 2, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL1_NUM2
MG_NUMBER, 0.0, 410, 0, 16, 10, NULL, 0,0, NULL, 0, 2, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL1_NUM3
MG_NUMBER, 0.0, 410, 0, 16, 10, NULL, 0,0, NULL, 0, 2, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL1_NUM4
MG_NUMBER, 0.0, 410, 0, 16, 10, NULL, 0,0, NULL, 0, 2, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL1_NUM5
MG_NUMBER, 0.0, 410, 0, 16, 10, NULL, 0,0, NULL, 0, 2, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL1_NUM6
MG_NUMBER, 0.0, 410, 0, 16, 10, NULL, 0,0, NULL, 0, 2, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL1_NUM7
MG_NUMBER, 0.0, 429, 0, 16, 10, NULL, 0,0, NULL, 0, 2, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL2_NUM1
MG_NUMBER, 0.0, 429, 0, 16, 10, NULL, 0,0, NULL, 0, 2, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL2_NUM2
MG_NUMBER, 0.0, 429, 0, 16, 10, NULL, 0,0, NULL, 0, 2, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL2_NUM3
MG_NUMBER, 0.0, 429, 0, 16, 10, NULL, 0,0, NULL, 0, 2, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL2_NUM4
MG_NUMBER, 0.0, 429, 0, 16, 10, NULL, 0,0, NULL, 0, 2, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL2_NUM5
MG_NUMBER, 0.0, 429, 0, 16, 10, NULL, 0,0, NULL, 0, 2, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL2_NUM6
MG_NUMBER, 0.0, 429, 0, 16, 10, NULL, 0,0, NULL, 0, 2, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL2_NUM7
MG_NUMBER, 0.0, 448, 0, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL3_NUM1
MG_NUMBER, 0.0, 448, 0, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL,// NGG_COL3_NUM2
MG_NUMBER, 0.0, 448, 0, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL3_NUM3
MG_NUMBER, 0.0, 448, 0, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL3_NUM4
MG_NUMBER, 0.0, 448, 0, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL3_NUM5
MG_NUMBER, 0.0, 448, 0, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL3_NUM6
MG_NUMBER, 0.0, 448, 0, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL3_NUM7
MG_NUMBER, 0.0, 509, 0, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL4_NUM1
MG_NUMBER, 0.0, 509, 0, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL4_NUM2
MG_NUMBER, 0.0, 509, 0, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL4_NUM3
MG_NUMBER, 0.0, 509, 0, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL4_NUM4
MG_NUMBER, 0.0, 509, 0, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL4_NUM5
MG_NUMBER, 0.0, 509, 0, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL4_NUM6
MG_NUMBER, 0.0, 509, 0, 16, 10, NULL, 0,0, NULL, 0, 9, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL4_NUM7
MG_NUMBER, 0.0, 570, 0, 16, 10, NULL, 0,0, NULL, 0, 3, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL5_NUM1
MG_NUMBER, 0.0, 570, 0, 16, 10, NULL, 0,0, NULL, 0, 3, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL5_NUM2
MG_NUMBER, 0.0, 570, 0, 16, 10, NULL, 0,0, NULL, 0, 3, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL5_NUM3
MG_NUMBER, 0.0, 570, 0, 16, 10, NULL, 0,0, NULL, 0, 3, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL5_NUM4
MG_NUMBER, 0.0, 570, 0, 16, 10, NULL, 0,0, NULL, 0, 3, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL5_NUM5
MG_NUMBER, 0.0, 570, 0, 16, 10, NULL, 0,0, NULL, 0, 3, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL5_NUM6
MG_NUMBER, 0.0, 570, 0, 16, 10, NULL, 0,0, NULL, 0, 3, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL5_NUM7
MG_NUMBER, 0.0, 593, 0, 16, 10, NULL, 0,0, NULL, 0, 3, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL6_NUM1
MG_NUMBER, 0.0, 593, 0, 16, 10, NULL, 0,0, NULL, 0, 3, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL6_NUM2
MG_NUMBER, 0.0, 593, 0, 16, 10, NULL, 0,0, NULL, 0, 3, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL6_NUM3
MG_NUMBER, 0.0, 593, 0, 16, 10, NULL, 0,0, NULL, 0, 3, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL6_NUM4
MG_NUMBER, 0.0, 593, 0, 16, 10, NULL, 0,0, NULL, 0, 3, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL6_NUM5
MG_NUMBER, 0.0, 593, 0, 16, 10, NULL, 0,0, NULL, 0, 3, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL6_NUM6
MG_NUMBER, 0.0, 593, 0, 16, 10, NULL, 0,0, NULL, 0, 3, 0, 12, UI_TINYFONT,CT_LTGOLD1, NULL, // NGG_COL6_NUM7
MG_NONE, 0.0, 0, 0, 0, 0, NULL, 0,0, NULL, 0, 0, 0, 0, 0, CT_NONE, NULL, // NGG_MASTER_ARROW
MG_GRAPHIC, 0.0, 136, 84, 8, 8, "menu/common/right_arrow.tga", 0,0, NULL, 67, 126, 0, 1, 0, CT_LTPURPLE2, NULL, // NGG_BAR1_LARROW
MG_GRAPHIC, 0.0, 155, 89, 8, 8, "menu/common/left_arrow.tga", 0,0, NULL, 67, 126, 0, 1, 0, CT_LTPURPLE2, NULL, // NGG_BAR1_RARROW
MG_GRAPHIC, 0.0, 215, 84, 8, 8, "menu/common/right_arrow.tga", 0,0,NULL, 67, 126, 0, 1, 0, CT_LTBLUE1, NULL, // NGG_BAR2_LARROW
MG_GRAPHIC, 0.0, 234, 89, 8, 8, "menu/common/left_arrow.tga", 0,0,NULL, 67, 126, 0, 1, 0, CT_LTBLUE1, NULL, // NGG_BAR2_RARROW
MG_GRAPHIC, 0.0, 294, 84, 8, 8, "menu/common/right_arrow.tga", 0,0,NULL, 67, 126, 0, 1, 0, CT_LTGOLD1, NULL, // NGG_BAR3_LARROW
MG_GRAPHIC, 0.0, 313, 89, 8, 8, "menu/common/left_arrow.tga", 0,0,NULL, 67, 126, 0, 1, 0, CT_LTGOLD1, NULL, // NGG_BAR3_RARROW
MG_GRAPHIC, 0.0, 373, 84, 8, 8, "menu/common/right_arrow.tga", 0,0,NULL, 67, 126, 0, 5, 0, CT_LTRED1, NULL, // NGG_BAR4_LARROW
MG_GRAPHIC, 0.0, 392, 89, 8, 8, "menu/common/left_arrow.tga", 0,0,NULL, 67, 126, 0, 5, 0, CT_LTRED1, NULL, // NGG_BAR4_RARROW
};
typedef enum
{
LGG_BLIP1,
LGG_BLIP2,
LGG_COL1_NUM1,
LGG_COL1_NUM2,
LGG_COL1_NUM3,
LGG_COL2_NUM1,
LGG_COL2_NUM2,
LGG_COL2_NUM3,
LGG_COL3_NUM1,
LGG_COL3_NUM2,
LGG_COL3_NUM3,
LGG_COL4_NUM1,
LGG_COL4_NUM2,
LGG_COL4_NUM3,
LGG_MAX
} loadgamemenu_graphics_t;
menugraphics_s loadgamemenu_graphics[LGG_MAX] =
{
// type timer x y width height file/text graphic, min max target inc style color
MG_GRAPHIC, 0.0, SGBLIP_MIN_X, SGPIC_Y-4-SGPIC_H-4-4, SGBLIP_W, 8, "menu/common/square.tga",0,0, NULL, SGBLIP_MIN_X, SGBLIP_MAX_X, 0, 3, 0, CT_LTPURPLE1, NULL, // LGG_BLIP1
MG_GRAPHIC, 0.0, SGBLIP_MIN_X, SGPIC_Y+4, SGBLIP_W, 8, "menu/common/square.tga",0,0, NULL, SGBLIP_MIN_X, SGBLIP_MAX_X, 0, 3, 0, CT_LTPURPLE1, NULL, // LGG_BLIP2
// type timer x y width height file/text graphic, min max target inc style color
MG_NUMBER, 0.0, 426, 382, 16, 10, NULL, 0,0, NULL, 0, 8, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // LGG_COL1_NUM1
MG_NUMBER, 0.0, 426, 396, 16, 10, NULL, 0,0, NULL, 0, 8, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // LGG_COL1_NUM2
MG_NUMBER, 0.0, 426, 410, 16, 10, NULL, 0,0, NULL, 0, 8, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // LGG_COL1_NUM3
MG_NUMBER, 0.0, 479, 382, 16, 10, NULL, 0,0, NULL, 0, 8, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // LGG_COL2_NUM1
MG_NUMBER, 0.0, 479, 396, 16, 10, NULL, 0,0, NULL, 0, 8, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // LGG_COL2_NUM2
MG_NUMBER, 0.0, 479, 410, 16, 10, NULL, 0,0, NULL, 0, 8, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // LGG_COL2_NUM3
MG_NUMBER, 0.0, 539, 382, 16, 10, NULL, 0,0, NULL, 0, 6, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // LGG_COL3_NUM1
MG_NUMBER, 0.0, 539, 396, 16, 10, NULL, 0,0, NULL, 0, 6, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // LGG_COL3_NUM2
MG_NUMBER, 0.0, 539, 410, 16, 10, NULL, 0,0, NULL, 0, 6, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // LGG_COL3_NUM3
MG_NUMBER, 0.0, 577, 382, 16, 10, NULL, 0,0, NULL, 0, 4, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // LGG_COL4_NUM1
MG_NUMBER, 0.0, 577, 396, 16, 10, NULL, 0,0, NULL, 0, 4, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // LGG_COL4_NUM2
MG_NUMBER, 0.0, 577, 410, 16, 10, NULL, 0,0, NULL, 0, 4, 0, 0, UI_TINYFONT,CT_LTGOLD1, NULL, // LGG_COL4_NUM3
};
/*
=================
UI_WipeTourHubSaveDirectory
FIXME: pass in the "tour" part so this could potentially be used for any hub system?
=================
*/
static void UI_WipeTourHubSaveDirectory (void)
{
int i;
char *holdChar;
int len;
int fileCnt;
char commandString[32];
// Clear out save data
memset(s_savedata,0,sizeof(s_savedata));
// Get everything in saves directory
fileCnt = ui.FS_GetFileList("saves/hub/tour", ".sav", s_savegame.listBuf, LISTBUFSIZE );
holdChar = s_savegame.listBuf;
for ( i = 0; i < fileCnt; i++, holdChar += len + 1 )
{
// strip extension
len = strlen( holdChar );
holdChar[len-4] = '\0';
Com_sprintf( commandString, sizeof(commandString), "wipe hub/tour/%s\n", holdChar);
ui.Cmd_ExecuteText( EXEC_APPEND, commandString);
}
}
/*
=======================
UI_SortSaveGames
=======================
*/
static int UI_SortSaveGames( const void *a, const void *b )
{
char *ea, *eb;
char *timeA,*timeB;
char *dateA,*dateB;
int value;
ea = (char *) a;
eb = (char *) b;
timeA = (ea + iSG_COMMENT_SIZE/2);
dateA = (ea + iSG_COMMENT_SIZE/2 + 9);
timeB = (eb +iSG_COMMENT_SIZE/2);
dateB = (eb + iSG_COMMENT_SIZE/2 + 9);
value = Q_stricmp( dateB, dateA );
if (!value) // Equal date
{
value = Q_stricmp( timeB, timeA );
return value;
}
return value;
}
/*
=================
ReadSaveDirectory
=================
*/
static void ReadSaveDirectory (void)
{
int i,result;
char *holdChar;
int len;
int fileCnt;
// Clear out save data
memset(s_savedata,0,sizeof(s_savedata));
// Get everything in saves directory
fileCnt = ui.FS_GetFileList("saves", ".sav", s_savegame.listBuf, LISTBUFSIZE );
holdChar = s_savegame.listBuf;
for ( i = 0; i < fileCnt; i++ )
{
if ((Q_strncmp("virtual.sav",holdChar,11)!=0) &&
(Q_strncmp("current.sav",holdChar,11)!=0) &&
(Q_strncmp("auto.sav",holdChar,8)!=0))
{
s_savedata[i].currentSaveFileNames = holdChar;
}
// strip extension
len = strlen( holdChar );
holdChar[len-4] = '\0';
holdChar += len + 1;
}
s_savegame.saveFileCnt = 0;
// Get comments
for (i=0;i<fileCnt;i++)
{
// Is this a valid file???
result = ui.SG_ValidateForLoadSaveScreen(s_savedata[i].currentSaveFileNames);
if (result == qfalse) // Bad save game - ignore it
{
continue;
}
// Get comment of file
holdChar = (char *) ui.SG_GetSaveGameComment(s_savedata[i].currentSaveFileNames);
if (holdChar) // Was there a file?
{
if (*holdChar)
{
// Get comment
memmove(s_savedata[i].currentSaveFileComments,holdChar,iSG_COMMENT_SIZE); //not strncpy because of NULLs in name
// Get date/time at end of comment field
s_savedata[i].currentSaveFileDateTime = s_savedata[i].currentSaveFileComments + (iSG_COMMENT_SIZE/2);
// End of comment
*(s_savedata[i].currentSaveFileComments + (iSG_COMMENT_SIZE/2) - 1) = '\0';
// End of time
*(s_savedata[i].currentSaveFileComments + (iSG_COMMENT_SIZE/2) - 1 + 9) = '\0';
// End of date
*(s_savedata[i].currentSaveFileComments + (iSG_COMMENT_SIZE/2) - 1 + 20) = '\0';
// Place string end for map name
holdChar = (s_savedata[i].currentSaveFileComments + iSG_COMMENT_SIZE - 2);
// Work backwards
while (*holdChar==' ')
{
holdChar--;
// Past beginnning of string
if (holdChar < s_savedata[i].currentSaveFileComments)
{
holdChar = s_savedata[i].currentSaveFileComments;
break;
}
}
holdChar++;
*holdChar = '\0';
}
}
s_savegame.saveFileCnt++;
}
qsort( s_savedata, fileCnt,sizeof(savedata_t), UI_SortSaveGames );
// Get date/time now that sorting is done
for (i=0;i<fileCnt;i++)
{
// Get comment of file
if (s_savedata[i].currentSaveFileNames) // Was there a file?
{
// Get date/time at end of comment field
s_savedata[i].currentSaveFileDateTime = s_savedata[i].currentSaveFileComments + (iSG_COMMENT_SIZE/2);
}
}
}
/*
=================
CreateNextSaveName
=================
*/
static int CreateNextSaveName(char *fileName)
{
int i,length;
// Loop through all the save games and look for the first open name
for (i=0;i<MAX_SAVELOADFILES;i++)
{
if (i>9) // eforce10 - eforce99
{
length = 9;
}
else // eforce0 - eforce9
{
length = 8;
}
Com_sprintf( fileName, length, "eforce%d", i );
if (!ui.SG_ValidateForLoadSaveScreen(fileName))
{
return qtrue;
}
}
return qfalse;
}
/*
=================
SaveGame_UpdateWindowArrows
=================
*/
static void SaveGame_UpdateWindowArrows(void)
{
// If no more files below, turn off down arrow
if (s_savegame.saveFileCnt > (s_savegame.startISaveFile + MAX_FILEDISP))
{
s_savegame.arrowdwn.generic.flags &= ~QMF_HIDDEN;
s_savegame.arrowdwn.generic.flags |= QMF_HIGHLIGHT_IF_FOCUS;
}
else
{
s_savegame.arrowdwn.generic.flags = QMF_HIDDEN;
}
// If no more files above, turn off up arrow
if (s_savegame.startISaveFile != 0)
{
s_savegame.arrowup.generic.flags &= ~QMF_HIDDEN;
s_savegame.arrowup.generic.flags |= QMF_HIGHLIGHT_IF_FOCUS;
}
else
{
s_savegame.arrowup.generic.flags = QMF_HIDDEN;
}
}
/*
=================
SaveGame_UpdateWindow
=================
*/
static void SaveGame_UpdateWindow(void)
{
int saveFileI,i,result;
// Get comments and file names
ReadSaveDirectory();
saveFileI = s_savegame.startISaveFile;
// Set colors for the lines
for (i=0;i<MAX_FILEDISP;i++)
{
((menubitmap_s *)g_savedline[i])->textcolor = CT_DKGOLD1;
((menubitmap_s *)g_savedline[i])->textcolor2 = CT_LTGOLD1;
((menubitmap_s *)g_savedline[i])->color = CT_DKPURPLE1;
((menubitmap_s *)g_savedline[i])->color2 = CT_LTPURPLE1;
((menubitmap_s *)g_savedate[i])->textcolor = CT_DKGOLD1;
((menubitmap_s *)g_savedate[i])->textcolor2 = CT_LTGOLD1;
((menubitmap_s *)g_savetime[i])->textcolor = CT_DKGOLD1;
((menubitmap_s *)g_savetime[i])->textcolor2 = CT_LTGOLD1;
}
// Place file comments on fields
for (i=0;i<MAX_FILEDISP;i++)
{
if (g_savedline[i])
{
if (s_savedata[saveFileI].currentSaveFileComments[0])
{
result = ui.SG_ValidateForLoadSaveScreen(s_savedata[saveFileI].currentSaveFileNames);
if (result == qfalse)
{
i--; // Save this line for the next valid file
saveFileI++; // Advance to next file
continue;
}
((menubitmap_s *)g_savedline[i])->textPtr = s_savedata[saveFileI].currentSaveFileComments;
((menubitmap_s *)g_savedline[i])->generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
// Is this the chosen file?
if (i==(s_savegame.currentLine - s_savegame.startISaveFile))
{
((menubitmap_s *)g_savedline[i])->textcolor = CT_YELLOW;
((menubitmap_s *)g_savedline[i])->textcolor2 = CT_WHITE;
((menubitmap_s *)g_savedline[i])->color = CT_YELLOW;
((menubitmap_s *)g_savedline[i])->color2 = CT_WHITE;
((menubitmap_s *)g_savedate[i])->textcolor = CT_YELLOW;
((menubitmap_s *)g_savedate[i])->textcolor2 = CT_YELLOW;
((menubitmap_s *)g_savetime[i])->textcolor = CT_YELLOW;
((menubitmap_s *)g_savetime[i])->textcolor2 = CT_YELLOW;
s_savegame.mapName = s_savedata[saveFileI].currentSaveFileDateTime + 9 + 11;
}
((menubitmap_s *)g_savedate[i])->textPtr = s_savedata[saveFileI].currentSaveFileDateTime;
((menubitmap_s *)g_savetime[i])->textPtr = s_savedata[saveFileI].currentSaveFileDateTime + 9;
}
else // No file for this line so set it inactive
{
((menubitmap_s *)g_savedline[i])->generic.flags = QMF_INACTIVE;
((menubitmap_s *)g_savedline[i])->textPtr = NULL;
((menubitmap_s *)g_savedate[i])->textPtr = NULL;
((menubitmap_s *)g_savetime[i])->textPtr = NULL;
}
saveFileI++; // Advance to next file
}
}
SaveGame_UpdateWindowArrows();
}
/*
=================
UI_DrawThumbNail
=================
*/
void UI_DrawThumbNail( float x, float y, float w, float h, byte *pic ) {
UI_AdjustFrom640( &x, &y, &w, &h );
ui.DrawStretchRaw( x, y, w, h, SG_SCR_WIDTH, SG_SCR_HEIGHT, pic, 1.0 );
}
/*
=================
UI_DrawThumbNailFrame
=================
*/
void UI_DrawThumbNailFrame(void)
{
ui.R_SetColor( colorTable[CT_DKORANGE]);
// Bracket Graphic
// Left Side
UI_DrawHandlePic(SGPIC_X-SGPIC_BRD-8, SGPIC_Y-4-SGPIC_H-4-4, 16, 16, uis.graphicBracket1CornerLU); //LU
UI_DrawHandlePic(SGPIC_X-SGPIC_BRD-8, SGPIC_Y-4, 16, -16, uis.graphicBracket1CornerLU); //LD
UI_DrawHandlePic(SGPIC_X-SGPIC_BRD-8, SGPIC_Y-SGPIC_H, 8, SGPIC_H-3, uis.whiteShader); // Left Side
// Right Side
UI_DrawHandlePic(SGPIC_X+SGPIC_W+SGPIC_BRD-8, SGPIC_Y-4-SGPIC_H-4-4, -16, 16, uis.graphicBracket1CornerLU); //RU
UI_DrawHandlePic(SGPIC_X+SGPIC_W+SGPIC_BRD-8, SGPIC_Y-4, -16, -16, uis.graphicBracket1CornerLU); //RD
UI_DrawHandlePic(SGPIC_X+SGPIC_W+SGPIC_BRD, SGPIC_Y-SGPIC_H, 8, SGPIC_H-3, uis.whiteShader); // Right Side
// Drawn mapname
if (s_savegame.mapName)
{
UI_DrawProportionalString( 516, SGPIC_Y+18, s_savegame.mapName,UI_CENTER|UI_TINYFONT, colorTable[CT_LTBLUE1]);
}
}
/*
=================
UI_DrawCurrentSavesFrame
=================
*/
void UI_DrawCurrentSavesFrame(void)
{
// Current save directory box
ui.R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(90,168, 308, 18, uis.whiteShader); // Top of current save directory box
UI_DrawProportionalString( 97, 169, menu_normal_text[MNT_CURRENTSAVEGAME],UI_SMALLFONT, colorTable[CT_BLACK]);
// Right side of box
ui.R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(383, 168, 32, 32, s_savegame.corner_ur_16_18); // Upper corner of directory box
UI_DrawHandlePic(384, 421, 32, 16, s_savegame.corner_lr_8_16); // Lower corner of directory box
UI_DrawHandlePic(387,186, 16, 6, uis.whiteShader);
UI_DrawHandlePic(387,195, 16, 17, uis.whiteShader);
UI_DrawHandlePic(387,215, 16, 180, uis.whiteShader);
UI_DrawHandlePic(387,398, 16, 17, uis.whiteShader);
UI_DrawHandlePic(387,419, 16, 6, uis.whiteShader);
UI_DrawHandlePic(90, 424, 308, 8, uis.whiteShader); // Bottom of current save directory box
}
/*
=================
UI_DrawCurrentFileFrame
=================
*/
void UI_DrawCurrentFileFrame(void)
{
// Column along left side of frame
ui.R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(30,203, 47, 130, uis.whiteShader); // Top left column square on bottom 2 3rds
UI_DrawHandlePic(30,336, 47, 16, uis.whiteShader); // Middle left column square on bottom 2 3rds
UI_DrawHandlePic(30,355, 47, 34, uis.whiteShader); // Bottom left column square on bottom 2 3rds
// Current game box
UI_DrawHandlePic(130,64, 88, 24, uis.whiteShader); // Left Side of current game line box 3
UI_DrawHandlePic(218,64, 353, 3, uis.whiteShader); // Top of current game line
UI_DrawHandlePic(218,85, 353, 3, uis.whiteShader); // Bottom of current game line
UI_DrawHandlePic(549,64, 10, 24, uis.whiteShader); // Right side of current game line
UI_DrawHandlePic(113, 64, 32, 32, s_savegame.currentGameTopLeft); // Upper left corner of current game box
UI_DrawHandlePic(113, 95, 32, 32, s_savegame.currentGameBotLeft); // Bottom left corner of current game box
UI_DrawHandlePic(559, 64, 32, 32, s_savegame.currentGameTopRight); // Upper right corner of current game box
UI_DrawHandlePic(560, 95, 32, 32, s_savegame.currentGameBotRight); // Bottom right corner of current game box
UI_DrawHandlePic(566,91, 18, 6, uis.whiteShader); // Right side of current game line
UI_DrawHandlePic(113,90, 18, 6, uis.whiteShader); // Left side of current game line
UI_DrawHandlePic(273,101, 50, 18, uis.whiteShader); // Left side of line between buttons
UI_DrawHandlePic(326,101, 45, 18, uis.whiteShader); // Right side of line between buttons
UI_DrawHandlePic(374,101, 50, 18, uis.whiteShader); // Right side of line between buttons
}
/*
=================
M_SaveGame_Graphics
=================
*/
static void M_SaveGame_Graphics (void)
{
UI_MenuFrame(&s_savegame.menu);
UI_DrawCurrentFileFrame();
UI_DrawProportionalString( 580, 67, "19-214",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
// Current save directory box
UI_DrawCurrentSavesFrame();
// Game pic
UI_DrawThumbNail( SGPIC_X, SGPIC_Y, SGPIC_W, -SGPIC_H, (byte*) &screenShotBuf );
UI_DrawThumbNailFrame();
UI_DrawProportionalString( 74, 66, "990-7",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 84, "5233",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 188, "35621",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 206, "78-9099",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 395, "1121",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
// Update file window
if ((!gameWindow) && (gameWindowTime < uis.realtime))
{
gameWindow = qtrue;
SaveGame_UpdateWindow(); // Update file window
}
if (s_savegame.awaitingSave == qtrue)
{
UI_DrawProportionalString( 517, 350, menu_normal_text[MNT_SAVE_WARNING1],UI_SMALLFONT | UI_CENTER, colorTable[CT_RED]);
UI_DrawProportionalString( 517, 370, menu_normal_text[MNT_SAVE_WARNING2],UI_SMALLFONT | UI_CENTER, colorTable[CT_RED]);
UI_DrawProportionalString( 517, 390, menu_normal_text[MNT_SAVE_WARNING3],UI_SMALLFONT | UI_BLINK | UI_CENTER, colorTable[CT_RED]);
}
}
/*
=================
M_SaveGame_MenuDraw
=================
*/
static void M_SaveGame_MenuDraw (void)
{
M_SaveGame_Graphics();
Menu_Draw( &s_savegame.menu );
}
static void SaveGame_DescriptionEvent( void* ptr, int notification )
{
if (s_savegame.currentLine != CURRENTLINE_NONE)
{
// Field_Clear(&s_file_desc_field.field); // Blank out comment
s_savegame.deletegame.generic.flags = QMF_GRAYED; // Turn off delete button
// s_savegame.currentLine = CURRENTLINE_NONE; // Release chosen line.
memset(s_savedata[s_savegame.currentLine].currentSaveFileNames,0,sizeof(s_savedata[s_savegame.currentLine].currentSaveFileNames));
SaveGame_UpdateWindow(); // Update file window
}
}
/*
=================
SaveGameFile
=================
*/
void SaveGameFile(char *fileName)
{
char commandString[20];
// Save description line
ui.SG_StoreSaveGameComment(s_file_desc_field.field.buffer);
Com_sprintf( commandString, sizeof(commandString), "save %s\n", fileName);
ui.Cmd_ExecuteText( EXEC_APPEND, commandString);
s_savegame.deletegame.generic.flags = QMF_GRAYED; // Turn off delete button
s_savegame.currentLine = CURRENTLINE_NONE; // Show no line is chosen
s_savegame.currentId = 0;
Field_Clear(&s_file_desc_field.field); // Blank out comment
gameWindow = qfalse;
gameWindowTime = uis.realtime + 1;
}
/*
=================
SaveGame_MenuEvent
=================
*/
static void SaveGame_MenuEvent( void* ptr, int notification )
{
menuframework_s* m;
char fileName[MAX_SAVELOADNAME],commandString[20];
int index;
if (notification != QM_ACTIVATED)
return;
m = ((menucommon_s*)ptr)->parent;
switch (((menucommon_s*)ptr)->id)
{
case ID_MAINMENU:
UI_PopMenu(); // Can do this whether to get back to ingame menu or back to game
break;
case ID_SAVEDCOMMENT1:
case ID_SAVEDCOMMENT2:
case ID_SAVEDCOMMENT3:
case ID_SAVEDCOMMENT4:
case ID_SAVEDCOMMENT5:
case ID_SAVEDCOMMENT6:
case ID_SAVEDCOMMENT7:
case ID_SAVEDCOMMENT8:
case ID_SAVEDCOMMENT9:
case ID_SAVEDCOMMENT10:
case ID_SAVEDCOMMENT11:
case ID_SAVEDCOMMENT12:
// Copy description to screen
index = ((menucommon_s*)ptr)->id - ID_SAVEDCOMMENT1;
if (((menubitmap_s *)g_savedline[index])->textPtr)
{
s_savegame.currentLine = s_savegame.startISaveFile + index;
Field_Clear(&s_file_desc_field.field); // Blank out comment to reset cursor
strcpy(s_file_desc_field.field.buffer,((menubitmap_s *)g_savedline[index])->textPtr);
// Move file picture on screen
if (!ui.SG_GetSaveImage(s_savedata[s_savegame.currentLine].currentSaveFileNames, &screenShotBuf))
{
memset( screenShotBuf,0,(SG_SCR_WIDTH * SG_SCR_HEIGHT * 4));
}
if (!Q_stricmp(s_savedata[s_savegame.currentLine].currentSaveFileNames, AUTOSAVENAME ))
{
s_savegame.deletegame.generic.flags = QMF_GRAYED; // Turn off delete button
}
else
{
// Turn on DELETE button
s_savegame.deletegame.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
}
}
s_savegame.awaitingSave = qfalse;
s_savegame.yes.generic.flags = QMF_HIDDEN;
s_savegame.no.generic.flags = QMF_HIDDEN;
SaveGame_UpdateWindow(); // Update file window
break;
case ID_SAVEGAMEDATA:
// Create a new save game
if (s_savegame.currentLine == CURRENTLINE_NONE)
{
CreateNextSaveName(fileName); // Get a name to save to
}
else // Overwrite a current save game? Ask first.
{
s_savegame.yes.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_savegame.no.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
strcpy(fileName,s_savedata[s_savegame.currentLine].currentSaveFileNames);
s_savegame.awaitingSave = qtrue;
s_savegame.deletegame.generic.flags = QMF_GRAYED; // Turn off delete button
break;
}
SaveGameFile(fileName);
break;
case ID_LOADGAMEDATA:
if ((s_savedata[s_savegame.currentLine].currentSaveFileNames) && (*s_file_desc_field.field.buffer))
{
UI_ForceMenuOff ();
Com_sprintf( commandString, sizeof(commandString), "load %s\n", s_savedata[s_savegame.currentLine].currentSaveFileNames);
ui.Cmd_ExecuteText( EXEC_APPEND, commandString);
}
break;
case ID_DELETEGAMEDATA:
if (s_savegame.currentLine == CURRENTLINE_NONE) // No line was chosen
{
break;
}
if (!*s_file_desc_field.field.buffer) // Blank comment
{
break;
}
ui.Printf( va("%s\n",menu_normal_text[MNT_ATTEMPTINGWIPE]));
Com_sprintf( commandString, sizeof(commandString), "wipe %s\n", s_savedata[s_savegame.currentLine].currentSaveFileNames);
ui.Cmd_ExecuteText( EXEC_NOW, commandString);
Field_Clear(&s_file_desc_field.field); // Blank out comment
s_savegame.deletegame.generic.flags = QMF_GRAYED; // Turn off delete button
s_savegame.currentLine = CURRENTLINE_NONE; // Show no line is chosen
SaveGame_UpdateWindow(); // Update file window
break;
case ID_ARROWUP:
if (s_savegame.saveFileCnt < MAX_FILEDISP)
{
break;
}
s_savegame.startISaveFile--;
if (s_savegame.startISaveFile<0)
{
s_savegame.startISaveFile = 0;
}
SaveGame_UpdateWindow(); // Update file window
break;
case ID_ARROWDWN:
if (s_savegame.saveFileCnt < MAX_FILEDISP)
{
break;
}
s_savegame.startISaveFile++;
if (s_savegame.startISaveFile>= s_savegame.saveFileCnt)
{
s_savegame.startISaveFile = (s_savegame.saveFileCnt-1);
}
SaveGame_UpdateWindow(); // Update file window
break;
case ID_YES:
SaveGameFile(s_savedata[s_savegame.currentLine].currentSaveFileNames);
s_savegame.yes.generic.flags = QMF_HIDDEN;
s_savegame.no.generic.flags = QMF_HIDDEN;
s_savegame.awaitingSave = qfalse;
break;
case ID_NO:
s_savegame.yes.generic.flags = QMF_HIDDEN;
s_savegame.no.generic.flags = QMF_HIDDEN;
s_savegame.awaitingSave = qfalse;
s_savegame.deletegame.generic.flags = QMF_HIGHLIGHT_IF_FOCUS; // Turn off delete button
break;
case ID_AUTOSAVE:
UI_ForceMenuOff ();
Com_sprintf( commandString, sizeof(commandString), "load %s\n", AUTOSAVENAME);
ui.Cmd_ExecuteText( EXEC_APPEND, commandString);
break;
}
}
/*
=================
SaveGame_LineEvent
=================
*/
static void SaveGame_LineEvent (void* ptr)
{
int index;
if (s_savegame.currentLine != CURRENTLINE_NONE) // A line was chosen
{
return;
}
// Changed lines
if (s_savegame.currentId != ((menucommon_s*)ptr)->id)
{
// Get new file's screen shot
s_savegame.currentId = ((menucommon_s*)ptr)->id;
index = s_savegame.startISaveFile;
index += ((menucommon_s*)ptr)->id - ID_SAVEDCOMMENT1;
if (!ui.SG_GetSaveImage(s_savedata[index].currentSaveFileNames, &screenShotBuf))
{
memset( screenShotBuf,0,(SG_SCR_WIDTH * SG_SCR_HEIGHT * 4));
}
s_savegame.mapName = s_savedata[index].currentSaveFileDateTime + 9 + 11;
}
}
/*
=================
M_SaveGame_MenuKey
=================
*/
static sfxHandle_t M_SaveGame_MenuKey( int key )
{
return Menu_DefaultKey( &s_savegame.menu, key );
}
/*
===============
UI_SaveGameMenu_Cache
===============
*/
void UI_SaveGameMenu_Cache( void )
{
s_savegame.currentGameTopLeft = ui.R_RegisterShaderNoMip("menu/common/lg_topleft.tga");
s_savegame.currentGameBotLeft = ui.R_RegisterShaderNoMip("menu/common/lg_lowleft.tga");
s_savegame.currentGameTopRight = ui.R_RegisterShaderNoMip("menu/common/lg_topright.tga");
s_savegame.currentGameBotRight = ui.R_RegisterShaderNoMip("menu/common/lg_lowright.tga");
s_savegame.corner_ur_16_18 = ui.R_RegisterShaderNoMip("menu/common/corner_ur_16_18.tga");
s_savegame.corner_lr_8_16 = ui.R_RegisterShaderNoMip("menu/common/corner_lr_8_16.tga");
ui.R_RegisterShaderNoMip("menu/common/underline.tga");
ui.R_RegisterShaderNoMip("menu/common/arrow_up_16.tga");
ui.R_RegisterShaderNoMip("menu/common/arrow_dn_16.tga");
}
/*
===============
SaveGameMenu_Init
===============
*/
static void SaveGameMenu_Init(void)
{
int i,y,x;
UI_SaveGameMenu_Cache();
s_savegame.menu.nitems = 0;
s_savegame.menu.wrapAround = qtrue;
s_savegame.menu.draw = M_SaveGame_MenuDraw;
s_savegame.menu.key = M_SaveGame_MenuKey;
s_savegame.menu.fullscreen = qtrue;
s_savegame.menu.wrapAround = qfalse;
s_savegame.menu.titleX = MENU_TITLE_X;
s_savegame.menu.titleY = MENU_TITLE_Y;
s_savegame.menu.titleI = MNT_SAVEGAMEMENU_TITLE;
s_savegame.menu.descX = MENU_DESC_X;
s_savegame.menu.descY = MENU_DESC_Y;
s_savegame.menu.footNoteEnum = MNT_SAVEGAME;
s_savegame_mainmenu.generic.type = MTYPE_BITMAP;
s_savegame_mainmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_savegame_mainmenu.generic.x = 482;
s_savegame_mainmenu.generic.y = 136;
s_savegame_mainmenu.generic.name = GRAPHIC_BUTTONRIGHT;
s_savegame_mainmenu.generic.id = ID_MAINMENU;
s_savegame_mainmenu.generic.callback = SaveGame_MenuEvent;
s_savegame_mainmenu.width = MENU_BUTTON_MED_WIDTH;
s_savegame_mainmenu.height = MENU_BUTTON_MED_HEIGHT;
s_savegame_mainmenu.color = CT_DKPURPLE1;
s_savegame_mainmenu.color2 = CT_LTPURPLE1;
s_savegame_mainmenu.textX = MENU_BUTTON_TEXT_X;
s_savegame_mainmenu.textY = MENU_BUTTON_TEXT_Y;
if (!s_savegame.savegameFromFlag) // Did not come from a menu (Main or Ingame)
{
s_savegame_mainmenu.textEnum = MBT_RETURNTOGAME;
}
else
{
s_savegame_mainmenu.textEnum = MBT_INGAMEMENU;
}
s_savegame_mainmenu.textcolor = CT_BLACK;
s_savegame_mainmenu.textcolor2 = CT_WHITE;
s_file_desc_field.generic.type = MTYPE_FIELD;
s_file_desc_field.generic.callback = SaveGame_DescriptionEvent;
s_file_desc_field.generic.x = 210;
s_file_desc_field.generic.y = 68;
s_file_desc_field.field.widthInChars = 40;
s_file_desc_field.field.maxchars = 40;
s_file_desc_field.field.style = UI_TINYFONT;
s_file_desc_field.field.textEnum = MNT_DESCRIPTION;
s_file_desc_field.field.textcolor = CT_LTGOLD1;
s_file_desc_field.field.textcolor2 = CT_LTGOLD1;
s_savegamedata.generic.type = MTYPE_BITMAP;
s_savegamedata.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_savegamedata.generic.x = 140;
s_savegamedata.generic.y = 101;
s_savegamedata.generic.name = "menu/common/square.tga";
s_savegamedata.generic.id = ID_SAVEGAMEDATA;
s_savegamedata.generic.callback = SaveGame_MenuEvent;
s_savegamedata.width = MENU_BUTTON_MED_WIDTH;
s_savegamedata.height = MENU_BUTTON_MED_HEIGHT;
s_savegamedata.color = CT_DKPURPLE1;
s_savegamedata.color2 = CT_LTPURPLE1;
s_savegamedata.textX = MENU_BUTTON_TEXT_X;
s_savegamedata.textY = MENU_BUTTON_TEXT_Y;
s_savegamedata.textEnum = MBT_SAVEGAMEDATA;
s_savegamedata.textcolor = CT_BLACK;
s_savegamedata.textcolor2 = CT_WHITE;
s_savegame.deletegame.generic.type = MTYPE_BITMAP;
s_savegame.deletegame.generic.flags = QMF_GRAYED;
s_savegame.deletegame.generic.x = 427;
s_savegame.deletegame.generic.y = 101;
s_savegame.deletegame.generic.name = "menu/common/square.tga";
s_savegame.deletegame.generic.id = ID_DELETEGAMEDATA;
s_savegame.deletegame.generic.callback = SaveGame_MenuEvent;
s_savegame.deletegame.width = MENU_BUTTON_MED_WIDTH;
s_savegame.deletegame.height = MENU_BUTTON_MED_HEIGHT;
s_savegame.deletegame.color = CT_DKPURPLE1;
s_savegame.deletegame.color2 = CT_LTPURPLE1;
s_savegame.deletegame.textX = MENU_BUTTON_TEXT_X;
s_savegame.deletegame.textY = MENU_BUTTON_TEXT_Y;
s_savegame.deletegame.textEnum = MBT_DELETEGAMEDATA;
s_savegame.deletegame.textcolor = CT_BLACK;
s_savegame.deletegame.textcolor2 = CT_WHITE;
s_savegame.arrowup.generic.type = MTYPE_BITMAP;
s_savegame.arrowup.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_savegame.arrowup.generic.x = 387;
s_savegame.arrowup.generic.y = 197;
s_savegame.arrowup.generic.name = "menu/common/arrow_up_16.tga";
s_savegame.arrowup.generic.id = ID_ARROWUP;
s_savegame.arrowup.generic.callback = SaveGame_MenuEvent;
s_savegame.arrowup.width = 16;
s_savegame.arrowup.height = 16;
s_savegame.arrowup.color = CT_DKBLUE1;
s_savegame.arrowup.color2 = CT_LTBLUE1;
s_savegame.arrowup.textX = 0;
s_savegame.arrowup.textY = 0;
s_savegame.arrowup.textEnum = MBT_NONE;
s_savegame.arrowup.textcolor = CT_BLACK;
s_savegame.arrowup.textcolor2 = CT_WHITE;
s_savegame.arrowdwn.generic.type = MTYPE_BITMAP;
s_savegame.arrowdwn.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_savegame.arrowdwn.generic.x = 387;
s_savegame.arrowdwn.generic.y = 400;
s_savegame.arrowdwn.generic.name = "menu/common/arrow_dn_16.tga";
s_savegame.arrowdwn.generic.id = ID_ARROWDWN;
s_savegame.arrowdwn.generic.callback = SaveGame_MenuEvent;
s_savegame.arrowdwn.width = 16;
s_savegame.arrowdwn.height = 16;
s_savegame.arrowdwn.color = CT_DKBLUE1;
s_savegame.arrowdwn.color2 = CT_LTBLUE1;
s_savegame.arrowdwn.textX = 0;
s_savegame.arrowdwn.textY = 0;
s_savegame.arrowdwn.textEnum = MBT_NONE;
s_savegame.arrowdwn.textcolor = CT_BLACK;
s_savegame.arrowdwn.textcolor2 = CT_WHITE;
s_savegame.yes.generic.type = MTYPE_BITMAP;
s_savegame.yes.generic.flags = QMF_HIDDEN;
s_savegame.yes.generic.x = 427;
s_savegame.yes.generic.y = 412;
s_savegame.yes.generic.name = "menu/common/square.tga";
s_savegame.yes.generic.id = ID_YES;
s_savegame.yes.generic.callback = SaveGame_MenuEvent;
s_savegame.yes.width = 60;
s_savegame.yes.height = 18;
s_savegame.yes.color = CT_DKGOLD1;
s_savegame.yes.color2 = CT_LTGOLD1;
s_savegame.yes.textX = MENU_BUTTON_TEXT_X;
s_savegame.yes.textY = MENU_BUTTON_TEXT_Y;
s_savegame.yes.textEnum = MBT_SAVEYES;
s_savegame.yes.textcolor = CT_BLACK;
s_savegame.yes.textcolor2 = CT_WHITE;
s_savegame.no.generic.type = MTYPE_BITMAP;
s_savegame.no.generic.flags = QMF_HIDDEN;
s_savegame.no.generic.x = 548;
s_savegame.no.generic.y = 412;
s_savegame.no.generic.name = "menu/common/square.tga";
s_savegame.no.generic.id = ID_NO;
s_savegame.no.generic.callback = SaveGame_MenuEvent;
s_savegame.no.width = 60;
s_savegame.no.height = 18;
s_savegame.no.color = CT_DKGOLD1;
s_savegame.no.color2 = CT_LTGOLD1;
s_savegame.no.textX = MENU_BUTTON_TEXT_X;
s_savegame.no.textY = MENU_BUTTON_TEXT_Y;
s_savegame.no.textEnum = MBT_SAVENO;
s_savegame.no.textcolor = CT_BLACK;
s_savegame.no.textcolor2 = CT_WHITE;
Menu_AddItem( &s_savegame.menu, ( void * )&s_savegame_mainmenu );
Menu_AddItem( &s_savegame.menu, ( void * )&s_savegamedata );
Menu_AddItem( &s_savegame.menu, ( void * )&s_file_desc_field );
Menu_AddItem( &s_savegame.menu, ( void * )&s_savegamedata );
Menu_AddItem( &s_savegame.menu, ( void * )&s_savegame.deletegame );
Menu_AddItem( &s_savegame.menu, ( void * )&s_savegame.arrowup );
Menu_AddItem( &s_savegame.menu, ( void * )&s_savegame.arrowdwn );
Menu_AddItem( &s_savegame.menu, ( void * )&s_savegame.yes );
Menu_AddItem( &s_savegame.menu, ( void * )&s_savegame.no );
x = 90;
y = 200;
for (i=0;i<99;i++)
{
if (!g_savedline[i])
{
break;
}
((menubitmap_s *)g_savedline[i])->generic.type = MTYPE_BITMAP;
((menubitmap_s *)g_savedline[i])->generic.flags = QMF_INACTIVE;
((menubitmap_s *)g_savedline[i])->generic.x = x;
((menubitmap_s *)g_savedline[i])->generic.y = y;
((menubitmap_s *)g_savedline[i])->generic.name = "menu/common/underline.tga";
((menubitmap_s *)g_savedline[i])->generic.callback = SaveGame_MenuEvent;
((menubitmap_s *)g_savedline[i])->generic.statusbarfunc = SaveGame_LineEvent;
((menubitmap_s *)g_savedline[i])->generic.id = ID_SAVEDCOMMENT1+i;
((menubitmap_s *)g_savedline[i])->width = 200;
((menubitmap_s *)g_savedline[i])->height = 16;
((menubitmap_s *)g_savedline[i])->color = CT_DKPURPLE1;
((menubitmap_s *)g_savedline[i])->color2 = CT_LTPURPLE1;
((menubitmap_s *)g_savedline[i])->textPtr = NULL;
((menubitmap_s *)g_savedline[i])->textX = 4;
((menubitmap_s *)g_savedline[i])->textY = 1;
((menubitmap_s *)g_savedline[i])->textcolor = CT_DKGOLD1;
((menubitmap_s *)g_savedline[i])->textcolor2 = CT_LTGOLD1;
((menubitmap_s *)g_savedline[i])->textStyle = UI_TINYFONT;
((menubitmap_s *)g_savedline[i])->textEnum = MBT_SAVEGAMELINE;
Menu_AddItem( &s_savegame.menu, ( void * )g_savedline[i]);
y += 18;
}
x = 292;
y = 200;
for (i=0;i<99;i++)
{
if (!g_savedate[i])
{
break;
}
((menubitmap_s *)g_savedate[i])->generic.type = MTYPE_BITMAP;
((menubitmap_s *)g_savedate[i])->generic.flags = QMF_INACTIVE;
((menubitmap_s *)g_savedate[i])->generic.x = x;
((menubitmap_s *)g_savedate[i])->generic.y = y;
((menubitmap_s *)g_savedate[i])->color = CT_DKPURPLE1;
((menubitmap_s *)g_savedate[i])->color2 = CT_LTPURPLE1;
((menubitmap_s *)g_savedate[i])->textPtr = NULL;
((menubitmap_s *)g_savedate[i])->textX = 4;
((menubitmap_s *)g_savedate[i])->textY = 1;
((menubitmap_s *)g_savedate[i])->textcolor = CT_DKGOLD1;
((menubitmap_s *)g_savedate[i])->textcolor2 = CT_LTGOLD1;
((menubitmap_s *)g_savedate[i])->textStyle = UI_TINYFONT;
Menu_AddItem( &s_savegame.menu, ( void * )g_savedate[i]);
((menubitmap_s *)g_savetime[i])->generic.type = MTYPE_BITMAP;
((menubitmap_s *)g_savetime[i])->generic.flags = QMF_INACTIVE;
((menubitmap_s *)g_savetime[i])->generic.x = x + 36;
((menubitmap_s *)g_savetime[i])->generic.y = y;
((menubitmap_s *)g_savetime[i])->color = CT_DKPURPLE1;
((menubitmap_s *)g_savetime[i])->color2 = CT_LTPURPLE1;
((menubitmap_s *)g_savetime[i])->textPtr = NULL;
((menubitmap_s *)g_savetime[i])->textX = 4;
((menubitmap_s *)g_savetime[i])->textY = 1;
((menubitmap_s *)g_savetime[i])->textcolor = CT_DKGOLD1;
((menubitmap_s *)g_savetime[i])->textcolor2 = CT_LTGOLD1;
((menubitmap_s *)g_savetime[i])->textStyle = UI_TINYFONT;
Menu_AddItem( &s_savegame.menu, ( void * )g_savetime[i]);
y += 18;
}
// Get savegame file names
SaveGame_UpdateWindow();
}
/*
===============
UI_SaveGameMenu
===============
*/
void UI_SaveGameMenu(int savegameFromFlag)
{
s_savegame.savegameFromFlag = savegameFromFlag;
if (!s_savegame.menu.initialized)
{
SaveGameMenu_Init();
}
if (!s_savegame.savegameFromFlag) // Did not come from a menu (Main or Ingame)
{
Mouse_Show();
}
s_file_desc_field.generic.flags = 0;
s_savegame.currentLine = CURRENTLINE_NONE;
s_savegame.currentId = 0;
s_savegame.awaitingSave = qfalse;
s_savegame.startISaveFile = 0;
SaveGame_UpdateWindow(); // Update file window
UI_PushMenu( &s_savegame.menu);
}
//===================================================================
//
// Load Game Menu
//
//===================================================================
// menu action identifiers
#define ID_MAINMENU 103
static int loadgameFromFlag;
static struct
{
menuframework_s menu;
menubitmap_s mainmenu;
menubitmap_s arrowdwn;
menubitmap_s arrowup;
menubitmap_s load;
} s_loadgame;
/*
=================
LoadGame_Blinkies
=================
*/
static void LoadGame_Blinkies(void)
{
int i;
// Move bottom blip
if ( loadgamemenu_graphics[LGG_BLIP1].timer < uis.realtime )
{
loadgamemenu_graphics[LGG_BLIP1].x += 3;
loadgamemenu_graphics[LGG_BLIP2].x = loadgamemenu_graphics[LGG_BLIP1].x;
if (loadgamemenu_graphics[LGG_BLIP1].x > loadgamemenu_graphics[LGG_BLIP1].max)
{
loadgamemenu_graphics[LGG_BLIP1].x = loadgamemenu_graphics[LGG_BLIP1].min;
loadgamemenu_graphics[LGG_BLIP2].x = loadgamemenu_graphics[LGG_BLIP2].min;
}
loadgamemenu_graphics[LGG_BLIP1].timer = uis.realtime + 75;
}
// Make right hand numbers change
if (loadgamemenu_graphics[LGG_COL1_NUM1].timer < uis.realtime)
{
loadgamemenu_graphics[LGG_COL1_NUM1].timer = uis.realtime + 3000;
for (i=0;i<3;i++)
{
loadgamemenu_graphics[i + LGG_COL1_NUM1].target = UI_RandomNumbers(9);
loadgamemenu_graphics[i + LGG_COL1_NUM1].color = CT_DKGOLD1;
loadgamemenu_graphics[i + LGG_COL2_NUM1].target = UI_RandomNumbers(9);
loadgamemenu_graphics[i + LGG_COL2_NUM1].color = CT_DKGOLD1;
loadgamemenu_graphics[i + LGG_COL3_NUM1].target = UI_RandomNumbers(7);
loadgamemenu_graphics[i + LGG_COL3_NUM1].color = CT_DKGOLD1;
loadgamemenu_graphics[i + LGG_COL4_NUM1].target = UI_RandomNumbers(4);
loadgamemenu_graphics[i + LGG_COL4_NUM1].color = CT_DKGOLD1;
}
}
}
/*
=================
M_LoadGame_Graphics
=================
*/
static void M_LoadGame_Graphics (void)
{
// if (!loadgameFromFlag)
// {
// ui.R_SetColor( colorTable[CT_LTBROWN1]);
// UI_DrawHandlePic( 482, 136, MENU_BUTTON_MED_WIDTH - 22, MENU_BUTTON_MED_HEIGHT, uis.whiteShader);
// UI_DrawHandlePic( 460 + MENU_BUTTON_MED_WIDTH - 4, 136, -19, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd); //right end
// }
UI_DrawCurrentFileFrame();
UI_DrawProportionalString( 580, 67, "19-212",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
// Current save directory box
UI_DrawCurrentSavesFrame();
UI_MenuFrame(&s_loadgame.menu);
// Game pic
UI_DrawThumbNail( SGPIC_X, SGPIC_Y, SGPIC_W, -SGPIC_H, (byte*) &screenShotBuf );
UI_DrawThumbNailFrame();
UI_DrawProportionalString( 74, 66, "55121",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 84, "68-01",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 188, "21050",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 206, "161",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 395, "4-789",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
LoadGame_Blinkies();
UI_PrintMenuGraphics(loadgamemenu_graphics,LGG_MAX);
}
/*
=================
M_LoadGame_MenuDraw
=================
*/
static void M_LoadGame_MenuDraw (void)
{
M_LoadGame_Graphics();
Menu_Draw( &s_loadgame.menu );
}
/*
=================
LoadGame_MenuEvent
=================
*/
static void LoadGame_MenuEvent( void* ptr, int notification )
{
menuframework_s* m;
if (notification != QM_ACTIVATED)
return;
m = ((menucommon_s*)ptr)->parent;
switch (((menucommon_s*)ptr)->id)
{
case ID_MAINMENU:
UI_PopMenu();
break;
}
}
/*
=================
M_LoadGame_MenuKey
=================
*/
static sfxHandle_t M_LoadGame_MenuKey( int key )
{
return Menu_DefaultKey( &s_loadgame.menu, key );
}
/*
===============
UI_LoadGameMenu_Cache
===============
*/
void UI_LoadGameMenu_Cache( void )
{
s_savegame.currentGameTopLeft = ui.R_RegisterShaderNoMip("menu/common/lg_topleft.tga");
s_savegame.currentGameBotLeft = ui.R_RegisterShaderNoMip("menu/common/lg_lowleft.tga");
s_savegame.currentGameTopRight = ui.R_RegisterShaderNoMip("menu/common/lg_topright.tga");
s_savegame.currentGameBotRight = ui.R_RegisterShaderNoMip("menu/common/lg_lowright.tga");
s_savegame.corner_ur_16_18 = ui.R_RegisterShaderNoMip("menu/common/corner_ur_16_18.tga");
s_savegame.corner_lr_8_16 = ui.R_RegisterShaderNoMip("menu/common/corner_lr_8_16.tga");
// Precache all menu graphics in array
UI_PrecacheMenuGraphics(loadgamemenu_graphics,LGG_MAX);
ui.R_RegisterShaderNoMip("menu/common/underline.tga");
}
/*
===============
LoadGameMenu_Init
===============
*/
static void LoadGameMenu_Init(void)
{
int x,y,i;
UI_LoadGameMenu_Cache();
s_loadgame.menu.nitems = 0;
s_loadgame.menu.wrapAround = qtrue;
s_loadgame.menu.draw = M_LoadGame_MenuDraw;
s_loadgame.menu.key = M_LoadGame_MenuKey;
s_loadgame.menu.fullscreen = qtrue;
s_loadgame.menu.wrapAround = qfalse;
s_loadgame.menu.descX = MENU_DESC_X;
s_loadgame.menu.descY = MENU_DESC_Y;
s_loadgame.menu.titleX = MENU_TITLE_X;
s_loadgame.menu.titleY = MENU_TITLE_Y;
s_loadgame.menu.titleI = MNT_LOADGAMEMENU_TITLE;
s_loadgame.menu.footNoteEnum = MNT_LOADGAME;
s_loadgame.mainmenu.generic.type = MTYPE_BITMAP;
s_loadgame.mainmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_loadgame.mainmenu.generic.x = 482;
s_loadgame.mainmenu.generic.y = 136;
s_loadgame.mainmenu.generic.name = GRAPHIC_BUTTONRIGHT;
s_loadgame.mainmenu.generic.id = ID_MAINMENU;
s_loadgame.mainmenu.generic.callback = LoadGame_MenuEvent;
s_loadgame.mainmenu.width = MENU_BUTTON_MED_WIDTH;
s_loadgame.mainmenu.height = MENU_BUTTON_MED_HEIGHT;
s_loadgame.mainmenu.color = CT_DKPURPLE1;
s_loadgame.mainmenu.color2 = CT_LTPURPLE1;
s_loadgame.mainmenu.textX = MENU_BUTTON_TEXT_X;
s_loadgame.mainmenu.textY = MENU_BUTTON_TEXT_Y;
if (!loadgameFromFlag) // Quick key
{
s_loadgame.mainmenu.textEnum = MBT_RETURNTOGAME;
}
else if (!ingameFlag)
{
s_loadgame.mainmenu.textEnum = MBT_MAINMENU;
}
else // In game menu
{
s_loadgame.mainmenu.textEnum = MBT_INGAMEMENU;
}
s_loadgame.mainmenu.textcolor = CT_BLACK;
s_loadgame.mainmenu.textcolor2 = CT_WHITE;
s_loadgame.load.generic.type = MTYPE_BITMAP;
s_loadgame.load.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_loadgame.load.generic.x = 140;
s_loadgame.load.generic.y = 101;
s_loadgame.load.generic.name = "menu/common/square.tga";
s_loadgame.load.generic.id = ID_LOADGAMEDATA;
s_loadgame.load.generic.callback = SaveGame_MenuEvent;
s_loadgame.load.width = MENU_BUTTON_MED_WIDTH;
s_loadgame.load.height = MENU_BUTTON_MED_HEIGHT;
s_loadgame.load.color = CT_DKPURPLE1;
s_loadgame.load.color2 = CT_LTPURPLE1;
s_loadgame.load.textX = MENU_BUTTON_TEXT_X;
s_loadgame.load.textY = MENU_BUTTON_TEXT_Y;
s_loadgame.load.textEnum = MBT_LOADGAMEDATA;
s_loadgame.load.textcolor = CT_BLACK;
s_loadgame.load.textcolor2 = CT_WHITE;
s_savegame.deletegame.generic.type = MTYPE_BITMAP;
s_savegame.deletegame.generic.flags = QMF_GRAYED;
s_savegame.deletegame.generic.x = 427;
s_savegame.deletegame.generic.y = 101;
s_savegame.deletegame.generic.name = "menu/common/square.tga";
s_savegame.deletegame.generic.id = ID_DELETEGAMEDATA;
s_savegame.deletegame.generic.callback = SaveGame_MenuEvent;
s_savegame.deletegame.width = MENU_BUTTON_MED_WIDTH;
s_savegame.deletegame.height = MENU_BUTTON_MED_HEIGHT;
s_savegame.deletegame.color = CT_DKPURPLE1;
s_savegame.deletegame.color2 = CT_LTPURPLE1;
s_savegame.deletegame.textX = MENU_BUTTON_TEXT_X;
s_savegame.deletegame.textY = MENU_BUTTON_TEXT_Y;
s_savegame.deletegame.textEnum = MBT_DELETEGAMEDATA;
s_savegame.deletegame.textcolor = CT_BLACK;
s_savegame.deletegame.textcolor2 = CT_WHITE;
s_savegame.arrowup.generic.type = MTYPE_BITMAP;
s_savegame.arrowup.generic.flags = QMF_HIDDEN;
s_savegame.arrowup.generic.x = 387;
s_savegame.arrowup.generic.y = 197;
s_savegame.arrowup.generic.name = "menu/common/arrow_up_16.tga";
s_savegame.arrowup.generic.id = ID_ARROWUP;
s_savegame.arrowup.generic.callback = SaveGame_MenuEvent;
s_savegame.arrowup.width = 16;
s_savegame.arrowup.height = 16;
s_savegame.arrowup.color = CT_DKBLUE1;
s_savegame.arrowup.color2 = CT_LTBLUE1;
s_savegame.arrowup.textX = 0;
s_savegame.arrowup.textY = 0;
s_savegame.arrowup.textEnum = MBT_NONE;
s_savegame.arrowup.textcolor = CT_BLACK;
s_savegame.arrowup.textcolor2 = CT_WHITE;
s_savegame.arrowdwn.generic.type = MTYPE_BITMAP;
s_savegame.arrowdwn.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_savegame.arrowdwn.generic.x = 387;
s_savegame.arrowdwn.generic.y = 400;
s_savegame.arrowdwn.generic.name = "menu/common/arrow_dn_16.tga";
s_savegame.arrowdwn.generic.id = ID_ARROWDWN;
s_savegame.arrowdwn.generic.callback = SaveGame_MenuEvent;
s_savegame.arrowdwn.width = 16;
s_savegame.arrowdwn.height = 16;
s_savegame.arrowdwn.color = CT_DKBLUE1;
s_savegame.arrowdwn.color2 = CT_LTBLUE1;
s_savegame.arrowdwn.textX = 0;
s_savegame.arrowdwn.textY = 0;
s_savegame.arrowdwn.textEnum = MBT_NONE;
s_savegame.arrowdwn.textcolor = CT_BLACK;
s_savegame.arrowdwn.textcolor2 = CT_WHITE;
s_file_desc_field.generic.type = MTYPE_FIELD;
s_file_desc_field.generic.flags = QMF_INACTIVE;
s_file_desc_field.generic.callback = NULL;
s_file_desc_field.generic.x = 218;
s_file_desc_field.generic.y = 68;
s_file_desc_field.field.widthInChars = 40;
s_file_desc_field.field.maxchars = 40;
s_file_desc_field.field.style = UI_TINYFONT;
s_file_desc_field.field.textEnum = MNT_DESCRIPTION;
s_file_desc_field.field.textcolor = CT_LTGOLD1;
s_file_desc_field.field.textcolor2 = CT_LTGOLD1;
Menu_AddItem( &s_loadgame.menu, ( void * )&s_loadgame.mainmenu );
Menu_AddItem( &s_loadgame.menu, ( void * )&s_file_desc_field );
Menu_AddItem( &s_loadgame.menu, ( void * )&s_loadgame.load );
Menu_AddItem( &s_loadgame.menu, ( void * )&s_savegame.deletegame );
Menu_AddItem( &s_loadgame.menu, ( void * )&s_savegame.arrowup );
Menu_AddItem( &s_loadgame.menu, ( void * )&s_savegame.arrowdwn );
x = 90;
y = 200;
for (i=0;i<99;i++)
{
if (!g_savedline[i])
{
break;
}
((menubitmap_s *)g_savedline[i])->generic.type = MTYPE_BITMAP;
((menubitmap_s *)g_savedline[i])->generic.flags = QMF_INACTIVE;
((menubitmap_s *)g_savedline[i])->generic.x = x;
((menubitmap_s *)g_savedline[i])->generic.y = y;
((menubitmap_s *)g_savedline[i])->generic.name = "menu/common/underline.tga";
((menubitmap_s *)g_savedline[i])->generic.callback = SaveGame_MenuEvent;
((menubitmap_s *)g_savedline[i])->generic.statusbarfunc = SaveGame_LineEvent;
((menubitmap_s *)g_savedline[i])->generic.id = ID_SAVEDCOMMENT1+i;
((menubitmap_s *)g_savedline[i])->width = 200;
((menubitmap_s *)g_savedline[i])->height = 16;
((menubitmap_s *)g_savedline[i])->color = CT_DKPURPLE1;
((menubitmap_s *)g_savedline[i])->color2 = CT_LTPURPLE1;
((menubitmap_s *)g_savedline[i])->textPtr = NULL;
((menubitmap_s *)g_savedline[i])->textX = 4;
((menubitmap_s *)g_savedline[i])->textY = 1;
((menubitmap_s *)g_savedline[i])->textcolor = CT_DKGOLD1;
((menubitmap_s *)g_savedline[i])->textcolor2 = CT_LTGOLD1;
((menubitmap_s *)g_savedline[i])->textStyle = UI_TINYFONT;
Menu_AddItem( &s_loadgame.menu, ( void * )g_savedline[i]);
y += 18;
}
x = 292;
y = 200;
for (i=0;i<99;i++)
{
if (!g_savedate[i])
{
break;
}
((menubitmap_s *)g_savedate[i])->generic.type = MTYPE_BITMAP;
((menubitmap_s *)g_savedate[i])->generic.flags = QMF_INACTIVE;
((menubitmap_s *)g_savedate[i])->generic.x = x;
((menubitmap_s *)g_savedate[i])->generic.y = y;
((menubitmap_s *)g_savedate[i])->color = CT_DKPURPLE1;
((menubitmap_s *)g_savedate[i])->color2 = CT_LTPURPLE1;
((menubitmap_s *)g_savedate[i])->textPtr = NULL;
((menubitmap_s *)g_savedate[i])->textX = 4;
((menubitmap_s *)g_savedate[i])->textY = 1;
((menubitmap_s *)g_savedate[i])->textcolor = CT_DKGOLD1;
((menubitmap_s *)g_savedate[i])->textcolor2 = CT_LTGOLD1;
((menubitmap_s *)g_savedate[i])->textStyle = UI_TINYFONT;
Menu_AddItem( &s_loadgame.menu, ( void * )g_savedate[i]);
((menubitmap_s *)g_savetime[i])->generic.type = MTYPE_BITMAP;
((menubitmap_s *)g_savetime[i])->generic.flags = QMF_INACTIVE;
((menubitmap_s *)g_savetime[i])->generic.x = x + 36;
((menubitmap_s *)g_savetime[i])->generic.y = y;
((menubitmap_s *)g_savetime[i])->color = CT_DKPURPLE1;
((menubitmap_s *)g_savetime[i])->color2 = CT_LTPURPLE1;
((menubitmap_s *)g_savetime[i])->textPtr = NULL;
((menubitmap_s *)g_savetime[i])->textX = 4;
((menubitmap_s *)g_savetime[i])->textY = 1;
((menubitmap_s *)g_savetime[i])->textcolor = CT_DKGOLD1;
((menubitmap_s *)g_savetime[i])->textcolor2 = CT_LTGOLD1;
((menubitmap_s *)g_savetime[i])->textStyle = UI_TINYFONT;
Menu_AddItem( &s_loadgame.menu, ( void * )g_savetime[i]);
y += 18;
}
// Get savegame file names
SaveGame_UpdateWindow();
loadgamemenu_graphics[LGG_BLIP1].timer = uis.realtime;
loadgamemenu_graphics[LGG_BLIP1].x = loadgamemenu_graphics[LGG_BLIP1].min;
loadgamemenu_graphics[LGG_BLIP2].x = loadgamemenu_graphics[LGG_BLIP2].min;
}
/*
===============
UI_LoadGameMenu
===============
*/
void UI_LoadGameMenu(int fromFlag)
{
loadgameFromFlag = fromFlag;
// if (!s_loadgame.menu.initialized)
// {
LoadGameMenu_Init();
// }
if (!loadgameFromFlag) // Did not come from a menu (Main or Ingame)
{
Mouse_Show();
}
// s_file_desc_field.generic.flags = 0;
s_savegame.currentLine = CURRENTLINE_NONE;
s_savegame.currentId = 0;
s_savegame.awaitingSave = qfalse;
s_savegame.startISaveFile = 0;
SaveGame_UpdateWindow(); // Update file window
UI_PushMenu( &s_loadgame.menu);
}
//===================================================================
//
// New Game Menu
//
//===================================================================
// menu action identifiers
#define ID_SUPEREASY 99
#define ID_EASY 100
#define ID_MEDIUM 101
#define ID_HARD 102
#define ID_MAINMENU 103
#define ID_MALE 104
#define ID_FEMALE 105
#define ID_STARTNEWGAME 106
#define ID_STARTTUTORIAL 107
static menuframework_s s_newgame_menu;
menubitmap_s s_newgame_mainmenu;
menubitmap_s s_newgame_supereasy;
menubitmap_s s_newgame_easy;
menubitmap_s s_newgame_medium;
menubitmap_s s_newgame_hard;
menubitmap_s s_newgame_male;
menubitmap_s s_newgame_female;
menubitmap_s s_newgame_start;
menubitmap_s s_newgame_tutorial;
/*
=================
NewGame_Numbers
=================
*/
static void NewGame_Numbers(void)
{
int i;
// Generate new numbers for top right
if ((newgamemenu_graphics[NGG_NUMBERS].timer < uis.realtime) && (newgamemenu_graphics[NGG_NUMBERS].target==6))
{
for (i=0;i<7;i++)
{
// Get random number
newgamemenu_graphics[NGG_COL1_NUM1 + i].target = UI_RandomNumbers(newgamemenu_graphics[NGG_COL1_NUM1 + i].max);
newgamemenu_graphics[NGG_COL2_NUM1 + i].target = UI_RandomNumbers(newgamemenu_graphics[NGG_COL2_NUM1 + i].max);
newgamemenu_graphics[NGG_COL3_NUM1 + i].target = UI_RandomNumbers(newgamemenu_graphics[NGG_COL3_NUM1 + i].max);
newgamemenu_graphics[NGG_COL4_NUM1 + i].target = UI_RandomNumbers(newgamemenu_graphics[NGG_COL4_NUM1 + i].max);
newgamemenu_graphics[NGG_COL5_NUM1 + i].target = UI_RandomNumbers(newgamemenu_graphics[NGG_COL5_NUM1 + i].max);
newgamemenu_graphics[NGG_COL6_NUM1 + i].target = UI_RandomNumbers(newgamemenu_graphics[NGG_COL6_NUM1 + i].max);
}
newgamemenu_graphics[NGG_NUMBERS].target=1;
// Turn off all but the first row
for (i=0;i<6;i++)
{
newgamemenu_graphics[i + NGG_COL1_NUM2].type = MG_OFF;
newgamemenu_graphics[i + NGG_COL2_NUM2].type = MG_OFF;
newgamemenu_graphics[i + NGG_COL3_NUM2].type = MG_OFF;
newgamemenu_graphics[i + NGG_COL4_NUM2].type = MG_OFF;
newgamemenu_graphics[i + NGG_COL5_NUM2].type = MG_OFF;
newgamemenu_graphics[i + NGG_COL6_NUM2].type = MG_OFF;
}
// Unhigh light old col 1,2,3
i = newgamemenu_graphics[NGG_SPEC_ROW1].target;
newgamemenu_graphics[i + NGG_COL1_NUM1].color = CT_DKGOLD1;
newgamemenu_graphics[i + NGG_COL2_NUM1].color = CT_DKGOLD1;
newgamemenu_graphics[i + NGG_COL3_NUM1].color = CT_DKGOLD1;
// Choose a special row to highlight
i = newgamemenu_graphics[NGG_SPEC_ROW1].target = random() * 6;
// High light that row
newgamemenu_graphics[i + NGG_COL1_NUM1].color = CT_LTGOLD1;
newgamemenu_graphics[i + NGG_COL2_NUM1].color = CT_LTGOLD1;
newgamemenu_graphics[i + NGG_COL3_NUM1].color = CT_LTGOLD1;
newgamemenu_graphics[NGG_SPEC_ROW1].y = newgamemenu_graphics[i + NGG_COL1_NUM1].y + 6;
// Unhigh light old col 4
i = newgamemenu_graphics[NGG_SPEC_ROW2].target;
newgamemenu_graphics[i + NGG_COL4_NUM1].color = CT_DKGOLD1;
// Choose a special row to highlight
i = newgamemenu_graphics[NGG_SPEC_ROW2].target = random() * 6;
// High light that row
newgamemenu_graphics[i + NGG_COL4_NUM1].color = CT_LTGOLD1;
newgamemenu_graphics[NGG_SPEC_ROW2].y = newgamemenu_graphics[i + NGG_COL4_NUM1].y + 6;
// Unhigh light old col 5,6
i = newgamemenu_graphics[NGG_SPEC_ROW3].target;
newgamemenu_graphics[i + NGG_COL5_NUM1].color = CT_DKGOLD1;
newgamemenu_graphics[i + NGG_COL6_NUM1].color = CT_DKGOLD1;
// Choose a special row to highlight
i = newgamemenu_graphics[NGG_SPEC_ROW3].target = random() * 6;
// High light that row
newgamemenu_graphics[i + NGG_COL5_NUM1].color = CT_LTGOLD1;
newgamemenu_graphics[i + NGG_COL6_NUM1].color = CT_LTGOLD1;
newgamemenu_graphics[NGG_SPEC_ROW3].y = newgamemenu_graphics[i + NGG_COL5_NUM1].y + 6;
}
// Activate the next row of numbers. When at the last row wait and then generate new numbers
else if ((newgamemenu_graphics[NGG_NUMBERS].timer < uis.realtime) && (newgamemenu_graphics[NGG_NUMBERS].target<6))
{
ui.S_StartLocalSound( uis.menu_datadisp1_snd, CHAN_MENU1 );
newgamemenu_graphics[NGG_NUMBERS].timer = uis.realtime + 50;
i = newgamemenu_graphics[NGG_NUMBERS].target;
newgamemenu_graphics[i + NGG_COL1_NUM1].type = MG_NUMBER;
newgamemenu_graphics[i + NGG_COL2_NUM1].type = MG_NUMBER;
newgamemenu_graphics[i + NGG_COL3_NUM1].type = MG_NUMBER;
newgamemenu_graphics[i + NGG_COL4_NUM1].type = MG_NUMBER;
newgamemenu_graphics[i + NGG_COL5_NUM1].type = MG_NUMBER;
newgamemenu_graphics[i + NGG_COL6_NUM1].type = MG_NUMBER;
newgamemenu_graphics[NGG_NUMBERS].target++;
if (newgamemenu_graphics[NGG_NUMBERS].target == 6)
{
newgamemenu_graphics[NGG_NUMBERS].timer = uis.realtime + 6000;
}
}
// Upper right numbers
if (newgamemenu_graphics[NGG_TOP_NUMBERS].type == MG_VAR)
{
for (i=0;i<5;i++)
{
// Get random number
newgamemenu_graphics[NGG_TOP_COL1_NUM1 + i].target = UI_RandomNumbers(newgamemenu_graphics[NGG_TOP_COL1_NUM1 + i].max);
newgamemenu_graphics[NGG_TOP_COL2_NUM1 + i].target = UI_RandomNumbers(newgamemenu_graphics[NGG_TOP_COL2_NUM1 + i].max);
newgamemenu_graphics[NGG_TOP_COL3_NUM1 + i].target = UI_RandomNumbers(newgamemenu_graphics[NGG_TOP_COL3_NUM1 + i].max);
// And unhigh light everything
newgamemenu_graphics[NGG_TOP_COL1_NUM1 + i].color = CT_DKGOLD1;
newgamemenu_graphics[NGG_TOP_COL2_NUM1 + i].color = CT_DKGOLD1;
newgamemenu_graphics[NGG_TOP_COL3_NUM1 + i].color = CT_DKGOLD1;
}
// Turn off all but the first row
for (i=0;i<4;i++)
{
newgamemenu_graphics[NGG_TOP_COL1_NUM2 + i].type = MG_OFF;
newgamemenu_graphics[NGG_TOP_COL2_NUM2 + i].type = MG_OFF;
newgamemenu_graphics[NGG_TOP_COL3_NUM2 + i].type = MG_OFF;
}
// Highlight column 1 number
newgamemenu_graphics[NGG_TOP_SPEC_ROW1].target = random() * 4;
i = newgamemenu_graphics[NGG_TOP_SPEC_ROW1].target;
newgamemenu_graphics[i + NGG_TOP_COL1_NUM1].color = CT_LTGOLD1;
newgamemenu_graphics[NGG_TOP_SPEC_ROW1].y = newgamemenu_graphics[i + NGG_TOP_COL1_NUM1].y + 6;
// Highlight column 2 number
newgamemenu_graphics[NGG_TOP_SPEC_ROW2].target = random() * 4;
i = newgamemenu_graphics[NGG_TOP_SPEC_ROW2].target;
newgamemenu_graphics[i + NGG_TOP_COL2_NUM1].color = CT_LTGOLD1;
newgamemenu_graphics[NGG_TOP_SPEC_ROW2].y = newgamemenu_graphics[i + NGG_TOP_COL2_NUM1].y + 6;
// Highlight column 3 number
newgamemenu_graphics[NGG_TOP_SPEC_ROW3].target = random() * 4;
i = newgamemenu_graphics[NGG_TOP_SPEC_ROW3].target;
newgamemenu_graphics[i + NGG_TOP_COL3_NUM1].color = CT_LTGOLD1;
newgamemenu_graphics[NGG_TOP_SPEC_ROW3].y = newgamemenu_graphics[i + NGG_TOP_COL3_NUM1].y + 6;
newgamemenu_graphics[NGG_TOP_NUMBERS].target=1;
newgamemenu_graphics[NGG_TOP_NUMBERS].type = MG_OFF;
newgamemenu_graphics[NGG_TOP_NUMBERS].timer = uis.realtime + 50;
}
else if ((newgamemenu_graphics[NGG_TOP_NUMBERS].timer < uis.realtime) && (newgamemenu_graphics[NGG_TOP_NUMBERS].target<5))
{
newgamemenu_graphics[NGG_TOP_NUMBERS].timer = uis.realtime + 50;
i = newgamemenu_graphics[NGG_TOP_NUMBERS].target;
newgamemenu_graphics[NGG_TOP_COL1_NUM1 + i].type = MG_NUMBER;
newgamemenu_graphics[NGG_TOP_COL2_NUM1 + i].type = MG_NUMBER;
newgamemenu_graphics[NGG_TOP_COL3_NUM1 + i].type = MG_NUMBER;
newgamemenu_graphics[NGG_TOP_NUMBERS].target++;
}
}
/*
=================
NewGame_Blinkies
=================
*/
static void NewGame_Blinkies(void)
{
int i,inc_y;
// Check out numbers, generate new ones if needed
NewGame_Numbers();
ui.R_SetColor( colorTable[CT_WHITE]);
// The horizontal power bar has reached it's max
if (newgamemenu_graphics[NGG_POWERBAND1_1].x > newgamemenu_graphics[NGG_POWERBAND1_1].max)
{
newgamemenu_graphics[NGG_POWERBAND1_1].x = newgamemenu_graphics[NGG_POWERBAND1_1].min;
newgamemenu_graphics[NGG_POWERBAND1_2].x = newgamemenu_graphics[NGG_POWERBAND1_1].min;
newgamemenu_graphics[NGG_WARPBAND1_1].type = MG_GRAPHIC; // Turn on warp core power band
newgamemenu_graphics[NGG_WARPBAND1_2].type = MG_GRAPHIC; // Turn on warp core power band
newgamemenu_graphics[NGG_WARPBAND1_3].type = MG_GRAPHIC; // Turn on warp core power band
newgamemenu_graphics[NGG_WARPBAND1_4].type = MG_GRAPHIC; // Turn on warp core power band
newgamemenu_graphics[NGG_WARPBAND1_1].y = newgamemenu_graphics[NGG_WARPBAND1_1].min;
newgamemenu_graphics[NGG_WARPBAND1_2].y = newgamemenu_graphics[NGG_WARPBAND1_2].min;
newgamemenu_graphics[NGG_WARPBAND1_3].y = newgamemenu_graphics[NGG_WARPBAND1_3].min;
newgamemenu_graphics[NGG_WARPBAND1_4].y = newgamemenu_graphics[NGG_WARPBAND1_4].min;
newgamemenu_graphics[NGG_TOP_NUMBERS].type = MG_VAR; // Change upper right numbers
if (newgamemenu_graphics[NGG_POWERBAND1_1].inc == SUPEREASY_INC)
{
newgamemenu_graphics[NGG_BAR4_LARROW].inc = -6;
}
else if (newgamemenu_graphics[NGG_POWERBAND1_1].inc == EASY_INC)
{
newgamemenu_graphics[NGG_BAR4_LARROW].inc = -6;
}
else if (newgamemenu_graphics[NGG_POWERBAND1_1].inc == MEDIUM_INC)
{
newgamemenu_graphics[NGG_BAR4_LARROW].inc = -3;
}
else
{
newgamemenu_graphics[NGG_BAR4_LARROW].inc = -3;
}
newgamemenu_graphics[NGG_BAR4_LARROW].target = newgamemenu_graphics[NGG_BAR4_LARROW].min + (random() * 4);
newgamemenu_graphics[NGG_BAR4_RARROW].target = newgamemenu_graphics[NGG_BAR4_LARROW].target;
newgamemenu_graphics[NGG_BAR4_RARROW].inc = newgamemenu_graphics[NGG_BAR4_LARROW].inc;
if ((newgamemenu_graphics[NGG_POWERBAND1_1].inc == SUPEREASY_INC) ||
(newgamemenu_graphics[NGG_POWERBAND1_1].inc == EASY_INC))
{
ui.S_StartLocalSound(newgame_cache.warpthrumslow, CHAN_LOCAL_SOUND);
}
else if (newgamemenu_graphics[NGG_POWERBAND1_1].inc == MEDIUM_INC)
{
ui.S_StartLocalSound(newgame_cache.warpthrummed, CHAN_LOCAL_SOUND);
}
else if (newgamemenu_graphics[NGG_POWERBAND1_1].inc == HARD_INC)
{
ui.S_StartLocalSound(newgame_cache.warpthrumfast, CHAN_LOCAL_SOUND);
}
}
if ( newgamemenu_graphics[NGG_POWERBAND1_1].timer < uis.realtime )
{
newgamemenu_graphics[NGG_POWERBAND1_1].x += newgamemenu_graphics[NGG_POWERBAND1_1].inc;
newgamemenu_graphics[NGG_POWERBAND1_1].timer = uis.realtime + 20;
newgamemenu_graphics[NGG_POWERBAND1_2].x += newgamemenu_graphics[NGG_POWERBAND1_1].inc;
}
for (i=0;i<2;i++)
{
if (newgamemenu_graphics[NGG_WARPBAND1_1 + (i*4)].type == MG_GRAPHIC)
{
newgamemenu_graphics[NGG_WARPBAND1_1 + (i*4)].y -=newgamemenu_graphics[NGG_WARPBAND1_1 + (i*4)].inc;
newgamemenu_graphics[NGG_WARPBAND1_2 + (i*4)].y -=newgamemenu_graphics[NGG_WARPBAND1_1 + (i*4)].inc;
newgamemenu_graphics[NGG_WARPBAND1_3 + (i*4)].y +=newgamemenu_graphics[NGG_WARPBAND1_1 + (i*4)].inc;
newgamemenu_graphics[NGG_WARPBAND1_4 + (i*4)].y +=newgamemenu_graphics[NGG_WARPBAND1_1 + (i*4)].inc;
if (newgamemenu_graphics[NGG_WARPBAND1_1 + (i*4)].y < newgamemenu_graphics[NGG_WARPBAND1_1 + (i*4)].max)
{
newgamemenu_graphics[NGG_WARPBAND1_1 + (i*4)].type = MG_NONE; // Turn off warp core power band
newgamemenu_graphics[NGG_WARPBAND1_2 + (i*4)].type = MG_NONE; // Turn off warp core power band
newgamemenu_graphics[NGG_WARPBAND1_3 + (i*4)].type = MG_NONE; // Turn off warp core power band
newgamemenu_graphics[NGG_WARPBAND1_4 + (i*4)].type = MG_NONE; // Turn off warp core power band
// Set target position for arrows when there is no warp power
if (newgamemenu_graphics[NGG_POWERBAND1_1].inc == SUPEREASY_INC)
{
newgamemenu_graphics[NGG_BAR4_LARROW].inc = 6;
inc_y = ((newgamemenu_graphics[NGG_BAR4_LARROW].max - newgamemenu_graphics[NGG_BAR4_LARROW].min) * .333) * 2;
}
else if (newgamemenu_graphics[NGG_POWERBAND1_1].inc == EASY_INC)
{
newgamemenu_graphics[NGG_BAR4_LARROW].inc = 6;
inc_y = ((newgamemenu_graphics[NGG_BAR4_LARROW].max - newgamemenu_graphics[NGG_BAR4_LARROW].min) * .333) * 2;
}
else if (newgamemenu_graphics[NGG_POWERBAND1_1].inc == MEDIUM_INC)
{
newgamemenu_graphics[NGG_BAR4_LARROW].inc = 3;
inc_y = (newgamemenu_graphics[NGG_BAR4_LARROW].max - newgamemenu_graphics[NGG_BAR4_LARROW].min) * .333;
}
else
{
newgamemenu_graphics[NGG_BAR4_LARROW].inc = 3;
inc_y = 10;
}
// Make warp measuring arrows go down
newgamemenu_graphics[NGG_BAR4_LARROW].target = newgamemenu_graphics[NGG_BAR4_LARROW].min + (random() * 4) + inc_y;
newgamemenu_graphics[NGG_BAR4_RARROW].target = newgamemenu_graphics[NGG_BAR4_LARROW].target;
newgamemenu_graphics[NGG_BAR4_RARROW].inc = newgamemenu_graphics[NGG_BAR4_LARROW].inc;
}
}
}
// All arrows are keyed off the NGG_MASTER_ARROW timer
if ( newgamemenu_graphics[NGG_MASTER_ARROW].timer < uis.realtime )
{
// Move ARROW positions
for (i=NGG_BAR1_LARROW;i<=NGG_BAR4_RARROW ;i++)
{
// The bar measuring the warp power has it's own way of setting target position
if ((i != NGG_BAR4_LARROW) && (i != NGG_BAR4_RARROW))
{
// Time to change this arrows target position
if ( newgamemenu_graphics[i].timer < uis.realtime )
{
// See difficulty level we're at
if (newgamemenu_graphics[NGG_POWERBAND1_1].inc == SUPEREASY_INC)
{
inc_y = ((newgamemenu_graphics[i].max - newgamemenu_graphics[i].min) * .333) * 2;
}
else if (newgamemenu_graphics[NGG_POWERBAND1_1].inc == EASY_INC)
{
inc_y = ((newgamemenu_graphics[i].max - newgamemenu_graphics[i].min) * .333) * 2;
}
else if (newgamemenu_graphics[NGG_POWERBAND1_1].inc == MEDIUM_INC)
{
inc_y = (newgamemenu_graphics[i].max - newgamemenu_graphics[i].min) * .333;
}
else
{
inc_y = 0;
}
newgamemenu_graphics[i].target = (random() * 10) + newgamemenu_graphics[i].min + inc_y;
newgamemenu_graphics[i].timer = uis.realtime + 500;
if (newgamemenu_graphics[i].y > newgamemenu_graphics[i].target)
{
newgamemenu_graphics[i].inc = -1 * abs(newgamemenu_graphics[i].inc);
}
else
{
newgamemenu_graphics[i].inc = abs(newgamemenu_graphics[i].inc);
}
}
}
newgamemenu_graphics[i].y += newgamemenu_graphics[i].inc;
if (newgamemenu_graphics[i].inc > 0) // Moving higher
{
if (newgamemenu_graphics[i].y > newgamemenu_graphics[i].target)
{
newgamemenu_graphics[i].y = newgamemenu_graphics[i].target;
}
}
else if (newgamemenu_graphics[i].inc < 0) // Moving lower
{
if (newgamemenu_graphics[i].y < newgamemenu_graphics[i].target)
{
newgamemenu_graphics[i].y = newgamemenu_graphics[i].target;
}
}
}
newgamemenu_graphics[NGG_MASTER_ARROW].timer = uis.realtime + 100;
}
}
/*
=================
M_NewGame_Graphics
=================
*/
static void M_NewGame_Graphics (void)
{
int y;
UI_MenuFrame(&s_newgame_menu);
// Bracketing off top warp bars
ui.R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(422, 54, 64, 64, newgame_cache.swooshTop); // Top swoosh
UI_DrawHandlePic( 80, 54, 343, 8, uis.whiteShader); // Line across top
UI_DrawHandlePic(429, 67, 50, 66, uis.whiteShader); // Line of right hand column
y = 67;
ui.R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(145, y, 32, 64, newgame_cache.gridbar); // 1st upper grid bar
ui.R_SetColor( colorTable[CT_DKBLUE1]);
UI_DrawHandlePic(224, y, 32, 64, newgame_cache.gridbar); // 2nd upper grid bar
ui.R_SetColor( colorTable[CT_DKGOLD1]);
UI_DrawHandlePic(303, y, 32, 64, newgame_cache.gridbar); // 3rd upper grid bar
ui.R_SetColor( colorTable[CT_DKRED1]);
UI_DrawHandlePic(382, y, 32, 64, newgame_cache.gridbar); // 4th upper grid bar
UI_DrawProportionalString( 371, 122, "33541",UI_RIGHT|UI_TINYFONT, colorTable[CT_LTRED1]);
UI_DrawProportionalString( 292, 122, "1221",UI_RIGHT|UI_TINYFONT, colorTable[CT_LTGOLD1]);
UI_DrawProportionalString( 213, 122, "1219",UI_RIGHT|UI_TINYFONT, colorTable[CT_LTBLUE1]);
UI_DrawProportionalString( 134, 122, "1213",UI_RIGHT|UI_TINYFONT, colorTable[CT_LTPURPLE2]);
ui.R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(30,203, 47, 186, uis.whiteShader); // Long left hand column square
ui.R_SetColor( colorTable[CT_WHITE]);
UI_DrawHandlePic( 300, 167, 128, 256, newgame_cache.warpCore);
ui.R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic( 95, 268, 128, 64, newgame_cache.cornerUpper); // Corner
UI_DrawHandlePic( 174, 281, 127, 7, uis.whiteShader); // Line from game difficulty to warp core
ui.R_SetColor( colorTable[CT_DKBLUE1]);
UI_DrawHandlePic( 95, 304, 128, 64, newgame_cache.cornerLower); // Corner
UI_DrawHandlePic( 174, 304, 127, 7, uis.whiteShader); // Line from player gender to warp core
ui.R_SetColor( colorTable[CT_DKGOLD1]);
UI_DrawHandlePic(476, 290, 256, -16, newgame_cache.swooshBottom); // Bottom swoosh
UI_DrawHandlePic(359, 293, 136, 8, uis.whiteShader); // Line from engage button to warp core
UI_DrawHandlePic( 482, 303, 130, 12, uis.whiteShader);
ui.R_SetColor( colorTable[CT_DKBLUE1]);
UI_DrawHandlePic( 95, 157, 130, 24, uis.whiteShader); // Game Difficulty title
UI_DrawProportionalString( 95 + MENU_BUTTON_TEXT_X, 157 + 2, menu_normal_text[MNT_GAME_DIFFICULTY], UI_SMALLFONT, colorTable[CT_LTPURPLE1]);
ui.R_SetColor( colorTable[CT_DKBLUE1]);
UI_DrawHandlePic( 95, 382, 130, 24, uis.whiteShader); // Player Gender title
UI_DrawProportionalString( 95 + MENU_BUTTON_TEXT_X, 382 + 2, menu_normal_text[MNT_GENDER], UI_SMALLFONT, colorTable[CT_LTPURPLE1]);
ui.R_SetColor( NULL );
NewGame_Blinkies();
UI_PrintMenuGraphics(newgamemenu_graphics,NGG_MAX);
UI_DrawProportionalString( 475, 60, "56A-88",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 66, "8-45611",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 84, "9214",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 188, "45",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 206, "7689200",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 395, "9955",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
ui.R_SetColor(colorTable[s_newgame_tutorial.color]);
UI_DrawHandlePic(s_newgame_tutorial.generic.x - 14,
s_newgame_tutorial.generic.y, MENU_BUTTON_MED_HEIGHT, MENU_BUTTON_MED_HEIGHT,
uis.graphicButtonLeftEnd);
}
/*
=================
M_NewGame_MenuDraw
=================
*/
static void M_NewGame_MenuDraw (void)
{
M_NewGame_Graphics();
Menu_Draw( &s_newgame_menu );
}
/*
=================
PlayerConfig_Male
=================
*/
static void PlayerConfig_SetMale( qboolean male)
{
if (male) {
//ui.Cvar_Set( "name", "Alex");
ui.Cvar_Set( "legsmodel", "hazard/default" );
ui.Cvar_Set( "torsomodel","hazard/default" );
ui.Cvar_Set( "headmodel", "munro/default" );
ui.Cvar_Set( "sex", "male" );
} else {
//ui.Cvar_Set( "name", "Alexandria");
ui.Cvar_Set( "legsmodel", "hazardfemale/default" );
ui.Cvar_Set( "torsomodel","hazardfemale/default" );
ui.Cvar_Set( "headmodel", "alexandria/default" );
ui.Cvar_Set( "sex", "female" );
}
}
/*
=================
NewGame_MenuEvent
=================
*/
static void NewGame_MenuEvent( void* ptr, int notification )
{
menuframework_s* m;
if (notification != QM_ACTIVATED)
return;
m = ((menucommon_s*)ptr)->parent;
switch (((menucommon_s*)ptr)->id)
{
case ID_MAINMENU:
UI_PopMenu();
break;
case ID_SUPEREASY:
s_newgame_supereasy.textcolor = CT_WHITE;
s_newgame_easy.textcolor = CT_BLACK;
s_newgame_medium.textcolor = CT_BLACK;
s_newgame_hard.textcolor = CT_BLACK;
ui.Cvar_SetValue( "g_spskill", 0 );
ui.Cvar_Set( "handicap", "200" );
newgamemenu_graphics[NGG_POWERBAND1_1].inc = SUPEREASY_INC;
newgamemenu_graphics[NGG_WARPBAND1_1].inc = SUPEREASY_INC;
s_newgame_supereasy.generic.flags |= QMF_BLINK;
s_newgame_easy.generic.flags &= ~ QMF_BLINK;
s_newgame_medium.generic.flags &= ~ QMF_BLINK;
s_newgame_hard.generic.flags &= ~ QMF_BLINK;
break;
case ID_EASY:
s_newgame_supereasy.textcolor = CT_BLACK;
s_newgame_easy.textcolor = CT_WHITE;
s_newgame_medium.textcolor = CT_BLACK;
s_newgame_hard.textcolor = CT_BLACK;
ui.Cvar_SetValue( "g_spskill", 0 );
ui.Cvar_Set( "handicap", "100" );
newgamemenu_graphics[NGG_POWERBAND1_1].inc = EASY_INC;
newgamemenu_graphics[NGG_WARPBAND1_1].inc = EASY_INC;
s_newgame_supereasy.generic.flags &= ~ QMF_BLINK;
s_newgame_easy.generic.flags |= QMF_BLINK;
s_newgame_medium.generic.flags &= ~ QMF_BLINK;
s_newgame_hard.generic.flags &= ~ QMF_BLINK;
break;
case ID_MEDIUM:
s_newgame_supereasy.textcolor = CT_BLACK;
s_newgame_easy.textcolor = CT_BLACK;
s_newgame_medium.textcolor = CT_WHITE;
s_newgame_hard.textcolor = CT_BLACK;
ui.Cvar_SetValue( "g_spskill", 1 );
ui.Cvar_Set( "handicap", "100" );
s_newgame_supereasy.generic.flags &= ~ QMF_BLINK;
s_newgame_easy.generic.flags &= ~ QMF_BLINK;
s_newgame_medium.generic.flags |= QMF_BLINK;
s_newgame_hard.generic.flags &= ~ QMF_BLINK;
newgamemenu_graphics[NGG_POWERBAND1_1].inc = MEDIUM_INC;
newgamemenu_graphics[NGG_WARPBAND1_1].inc = MEDIUM_INC;
break;
case ID_HARD:
s_newgame_supereasy.textcolor = CT_BLACK;
s_newgame_easy.textcolor = CT_BLACK;
s_newgame_medium.textcolor = CT_BLACK;
s_newgame_hard.textcolor = CT_WHITE;
ui.Cvar_SetValue( "g_spskill", 2 );
ui.Cvar_Set( "handicap", "100" );
s_newgame_supereasy.generic.flags &= ~ QMF_BLINK;
s_newgame_easy.generic.flags &= ~ QMF_BLINK;
s_newgame_medium.generic.flags &= ~ QMF_BLINK;
s_newgame_hard.generic.flags |= QMF_BLINK;
newgamemenu_graphics[NGG_POWERBAND1_1].inc = HARD_INC;
newgamemenu_graphics[NGG_WARPBAND1_1].inc = HARD_INC;
break;
case ID_MALE:
s_newgame_male.textcolor = CT_WHITE;
s_newgame_female.textcolor = CT_BLACK;
s_newgame_female.generic.flags &= ~ QMF_BLINK;
s_newgame_male.generic.flags |= QMF_BLINK;
PlayerConfig_SetMale (qtrue);
break;
case ID_FEMALE:
s_newgame_male.textcolor = CT_BLACK;
s_newgame_female.textcolor = CT_WHITE;
s_newgame_male.generic.flags &= ~ QMF_BLINK;
s_newgame_female.generic.flags |= QMF_BLINK;
PlayerConfig_SetMale (qfalse);
break;
case ID_STARTNEWGAME:
UI_ForceMenuOff ();
ui.Cvar_SetValue( "cg_virtualVoyager", 0 );
ui.Cmd_ExecuteText( EXEC_APPEND, "map borg1\n");
break;
case ID_STARTTUTORIAL:
UI_ForceMenuOff ();
ui.Cvar_SetValue( "cg_virtualVoyager", 0 );
ui.Cmd_ExecuteText( EXEC_APPEND, "map tutorial\n");
break;
}
}
/*
=================
M_NewGame_MenuKey
=================
*/
static sfxHandle_t M_NewGame_MenuKey( int key )
{
return Menu_DefaultKey( &s_newgame_menu, key );
}
/*
===============
UI_NewGameMenu_Cache
===============
*/
void UI_NewGameMenu_Cache( void )
{
newgame_cache.warpCore = ui.R_RegisterShaderNoMip("menu/common/warpcore2.tga");
newgame_cache.cornerUpper = ui.R_RegisterShaderNoMip("menu/common/corner_love.tga");
newgame_cache.cornerLower = ui.R_RegisterShaderNoMip("menu/common/corner_love_2.tga");
newgame_cache.swooshBottom = ui.R_RegisterShaderNoMip("menu/common/corner_lr_8_130.tga");
newgame_cache.gridbar = ui.R_RegisterShaderNoMip( "menu/common/mon_bar.tga");
newgame_cache.swooshTop = ui.R_RegisterShaderNoMip("menu/common/swoosh_topsmall.tga");
newgame_cache.warpconstant = ui.S_RegisterSound( "sound/interface/warpcore.wav" );
newgame_cache.warpthrumslow = ui.S_RegisterSound( "sound/interface/warpthrob.wav" );
newgame_cache.warpthrummed = ui.S_RegisterSound( "sound/interface/warpthrobmed.wav" );
newgame_cache.warpthrumfast = ui.S_RegisterSound( "sound/interface/warpthrobhi.wav" );
// Precache all menu graphics in array
UI_PrecacheMenuGraphics(newgamemenu_graphics,NGG_MAX);
}
/*
===============
NewGameMenu_Init
===============
*/
static void NewGameMenu_Init(void)
{
int x,y,i,i2,i3,inc,pad;
UI_NewGameMenu_Cache();
s_newgame_menu.nitems = 0;
s_newgame_menu.wrapAround = qtrue;
s_newgame_menu.draw = M_NewGame_MenuDraw;
s_newgame_menu.key = M_NewGame_MenuKey;
s_newgame_menu.fullscreen = qtrue;
s_newgame_menu.wrapAround = qfalse;
s_newgame_menu.descX = MENU_DESC_X;
s_newgame_menu.descY = MENU_DESC_Y;
s_newgame_menu.titleX = MENU_TITLE_X;
s_newgame_menu.titleY = MENU_TITLE_Y;
s_newgame_menu.titleI = MNT_NEWGAMEMENU_TITLE;
s_newgame_menu.footNoteEnum = MNT_WARP_CORE_STARTUP;
s_newgame_mainmenu.generic.type = MTYPE_BITMAP;
s_newgame_mainmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_newgame_mainmenu.generic.x = 482;
s_newgame_mainmenu.generic.y = 136;
s_newgame_mainmenu.generic.name = GRAPHIC_BUTTONRIGHT;
s_newgame_mainmenu.generic.id = ID_MAINMENU;
s_newgame_mainmenu.generic.callback = NewGame_MenuEvent;
s_newgame_mainmenu.width = MENU_BUTTON_MED_WIDTH;
s_newgame_mainmenu.height = MENU_BUTTON_MED_HEIGHT;
s_newgame_mainmenu.color = CT_DKPURPLE1;
s_newgame_mainmenu.color2 = CT_LTPURPLE1;
s_newgame_mainmenu.textX = MENU_BUTTON_TEXT_X;
s_newgame_mainmenu.textY = MENU_BUTTON_TEXT_Y;
s_newgame_mainmenu.textEnum = MBT_MAINMENU;
s_newgame_mainmenu.textcolor = CT_BLACK;
s_newgame_mainmenu.textcolor2 = CT_WHITE;
x = 95;
y = 185;
pad = 3;
s_newgame_supereasy.generic.type = MTYPE_BITMAP;
s_newgame_supereasy.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_newgame_supereasy.generic.x = x;
s_newgame_supereasy.generic.y = y;
s_newgame_supereasy.generic.name = GRAPHIC_BUTTONRIGHT;
s_newgame_supereasy.generic.id = ID_SUPEREASY;
s_newgame_supereasy.generic.callback = NewGame_MenuEvent;
s_newgame_supereasy.width = MENU_BUTTON_MED_WIDTH;
s_newgame_supereasy.height = MENU_BUTTON_MED_HEIGHT;
s_newgame_supereasy.color = CT_DKPURPLE1;
s_newgame_supereasy.color2 = CT_LTPURPLE1;
s_newgame_supereasy.textX = MENU_BUTTON_TEXT_X;
s_newgame_supereasy.textY = MENU_BUTTON_TEXT_Y;
s_newgame_supereasy.textEnum = MBT_SUPEREASY;
s_newgame_supereasy.textcolor = CT_BLACK;
s_newgame_supereasy.textcolor2 = CT_WHITE;
y += MENU_BUTTON_MED_HEIGHT + pad;
s_newgame_easy.generic.type = MTYPE_BITMAP;
s_newgame_easy.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_newgame_easy.generic.x = x;
s_newgame_easy.generic.y = y;
s_newgame_easy.generic.name = GRAPHIC_BUTTONRIGHT;
s_newgame_easy.generic.id = ID_EASY;
s_newgame_easy.generic.callback = NewGame_MenuEvent;
s_newgame_easy.width = MENU_BUTTON_MED_WIDTH;
s_newgame_easy.height = MENU_BUTTON_MED_HEIGHT;
s_newgame_easy.color = CT_DKPURPLE1;
s_newgame_easy.color2 = CT_LTPURPLE1;
s_newgame_easy.textX = MENU_BUTTON_TEXT_X;
s_newgame_easy.textY = MENU_BUTTON_TEXT_Y;
s_newgame_easy.textEnum = MBT_EASY;
s_newgame_easy.textcolor = CT_BLACK;
s_newgame_easy.textcolor2 = CT_WHITE;
y += MENU_BUTTON_MED_HEIGHT + pad;
s_newgame_medium.generic.type = MTYPE_BITMAP;
s_newgame_medium.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_newgame_medium.generic.x = x;
s_newgame_medium.generic.y = y;
s_newgame_medium.generic.name = GRAPHIC_BUTTONRIGHT;
s_newgame_medium.generic.id = ID_MEDIUM;
s_newgame_medium.generic.callback = NewGame_MenuEvent;
s_newgame_medium.width = MENU_BUTTON_MED_WIDTH;
s_newgame_medium.height = MENU_BUTTON_MED_HEIGHT;
s_newgame_medium.color = CT_DKPURPLE1;
s_newgame_medium.color2 = CT_LTPURPLE1;
s_newgame_medium.textX = MENU_BUTTON_TEXT_X;
s_newgame_medium.textY = MENU_BUTTON_TEXT_Y;
s_newgame_medium.textEnum = MBT_MEDIUM;
s_newgame_medium.textcolor = CT_BLACK;
s_newgame_medium.textcolor2 = CT_WHITE;
y += MENU_BUTTON_MED_HEIGHT + pad;
s_newgame_hard.generic.type = MTYPE_BITMAP;
s_newgame_hard.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_newgame_hard.generic.x = x;
s_newgame_hard.generic.y = y;
s_newgame_hard.generic.name = GRAPHIC_BUTTONRIGHT;
s_newgame_hard.generic.id = ID_HARD;
s_newgame_hard.generic.callback = NewGame_MenuEvent;
s_newgame_hard.width = MENU_BUTTON_MED_WIDTH;
s_newgame_hard.height = MENU_BUTTON_MED_HEIGHT;
s_newgame_hard.color = CT_DKPURPLE1;
s_newgame_hard.color2 = CT_LTPURPLE1;
s_newgame_hard.textX = MENU_BUTTON_TEXT_X;
s_newgame_hard.textY = MENU_BUTTON_TEXT_Y;
s_newgame_hard.textEnum = MBT_HARD;
s_newgame_hard.textcolor = CT_BLACK;
s_newgame_hard.textcolor2 = CT_WHITE;
y = 335;
s_newgame_female.generic.type = MTYPE_BITMAP;
s_newgame_female.generic.flags = QMF_HIGHLIGHT_IF_FOCUS; //QMF_GRAYED;
s_newgame_female.generic.x = x;
s_newgame_female.generic.y = y;
s_newgame_female.generic.name = GRAPHIC_BUTTONRIGHT;
s_newgame_female.generic.id = ID_FEMALE;
s_newgame_female.generic.callback = NewGame_MenuEvent;
s_newgame_female.width = MENU_BUTTON_MED_WIDTH;
s_newgame_female.height = MENU_BUTTON_MED_HEIGHT;
s_newgame_female.color = CT_DKPURPLE1;
s_newgame_female.color2 = CT_LTPURPLE1;
s_newgame_female.textX = MENU_BUTTON_TEXT_X;
s_newgame_female.textY = MENU_BUTTON_TEXT_Y;
s_newgame_female.textEnum = MBT_FEMALE;
s_newgame_female.textcolor = CT_BLACK;
s_newgame_female.textcolor2 = CT_WHITE;
s_newgame_male.generic.type = MTYPE_BITMAP;
s_newgame_male.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_newgame_male.generic.x = x;
s_newgame_male.generic.y = y + MENU_BUTTON_MED_HEIGHT + 6;
s_newgame_male.generic.name = GRAPHIC_BUTTONRIGHT;
s_newgame_male.generic.id = ID_MALE;
s_newgame_male.generic.callback = NewGame_MenuEvent;
s_newgame_male.width = MENU_BUTTON_MED_WIDTH;
s_newgame_male.height = MENU_BUTTON_MED_HEIGHT;
s_newgame_male.color = CT_DKPURPLE1;
s_newgame_male.color2 = CT_LTPURPLE1;
s_newgame_male.textX = MENU_BUTTON_TEXT_X;
s_newgame_male.textY = MENU_BUTTON_TEXT_Y;
s_newgame_male.textEnum = MBT_MALE;
s_newgame_male.textcolor = CT_BLACK;
s_newgame_male.textcolor2 = CT_WHITE;
s_newgame_start.generic.type = MTYPE_BITMAP;
s_newgame_start.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_newgame_start.generic.x = 482;
s_newgame_start.generic.y = 319;
s_newgame_start.generic.name = "menu/common/square.tga";
s_newgame_start.generic.id = ID_STARTNEWGAME;
s_newgame_start.generic.callback = NewGame_MenuEvent;
s_newgame_start.width = MENU_BUTTON_MED_WIDTH;
s_newgame_start.height = 79;
s_newgame_start.color = CT_DKPURPLE1;
s_newgame_start.color2 = CT_LTPURPLE1;
s_newgame_start.textX = MENU_BUTTON_TEXT_X;
s_newgame_start.textY = 56;
s_newgame_start.textEnum = MBT_ENGAGE;
s_newgame_start.textcolor = CT_BLACK;
s_newgame_start.textcolor2 = CT_WHITE;
s_newgame_tutorial.generic.type = MTYPE_BITMAP;
s_newgame_tutorial.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_newgame_tutorial.generic.x = 482;
s_newgame_tutorial.generic.y = 168;
s_newgame_tutorial.generic.name = GRAPHIC_BUTTONRIGHT;
s_newgame_tutorial.generic.id = ID_STARTTUTORIAL;
s_newgame_tutorial.generic.callback = NewGame_MenuEvent;
s_newgame_tutorial.width = MENU_BUTTON_MED_WIDTH;
s_newgame_tutorial.height = MENU_BUTTON_MED_HEIGHT;
s_newgame_tutorial.color = CT_DKPURPLE1;
s_newgame_tutorial.color2 = CT_LTPURPLE1;
s_newgame_tutorial.textX = MENU_BUTTON_TEXT_X;
s_newgame_tutorial.textY = MENU_BUTTON_TEXT_Y;
s_newgame_tutorial.textEnum = MBT_TUTORIAL;
s_newgame_tutorial.textcolor = CT_BLACK;
s_newgame_tutorial.textcolor2 = CT_WHITE;
Menu_AddItem( &s_newgame_menu, ( void * )&s_newgame_mainmenu );
Menu_AddItem( &s_newgame_menu, ( void * )&s_newgame_supereasy );
Menu_AddItem( &s_newgame_menu, ( void * )&s_newgame_easy );
Menu_AddItem( &s_newgame_menu, ( void * )&s_newgame_medium );
Menu_AddItem( &s_newgame_menu, ( void * )&s_newgame_hard );
Menu_AddItem( &s_newgame_menu, ( void * )&s_newgame_male );
Menu_AddItem( &s_newgame_menu, ( void * )&s_newgame_female );
Menu_AddItem( &s_newgame_menu, ( void * )&s_newgame_start );
Menu_AddItem( &s_newgame_menu, ( void * )&s_newgame_tutorial );
newgamemenu_graphics[NGG_WARPBAND1_1].type = MG_NONE;
newgamemenu_graphics[NGG_WARPBAND1_2].type = MG_NONE;
newgamemenu_graphics[NGG_WARPBAND1_3].type = MG_NONE;
newgamemenu_graphics[NGG_WARPBAND1_4].type = MG_NONE;
newgamemenu_graphics[NGG_POWERBAND1_1].inc = EASY_INC;
newgamemenu_graphics[NGG_WARPBAND1_1].inc = EASY_INC;
// ui.S_StartLocalSound(newgame_cache.warpconstant, CHAN_AMBIENT);
inc = NGG_COL2_NUM1 - NGG_COL1_NUM1;
for (i=0;i<6;i++) // For each row
{
i3 = NGG_COL1_NUM1 + (i *inc);
y = 199;
// Set y values
for (i2=0;i2<7;i2++)
{
newgamemenu_graphics[i3+i2].y = y;
newgamemenu_graphics[i3+i2].color = CT_DKGOLD1;
y += 14;
}
}
// Set up arrow graphics data
for (i=NGG_BAR1_LARROW;i<=NGG_BAR4_RARROW ;i++)
{
newgamemenu_graphics[i].target = (.33 * (newgamemenu_graphics[i].max - newgamemenu_graphics[i].min))
+ newgamemenu_graphics[i].min;
if (newgamemenu_graphics[i].y > newgamemenu_graphics[i].target)
{
newgamemenu_graphics[i].inc *= -1;
}
newgamemenu_graphics[i].y = newgamemenu_graphics[i].max - 8;
}
newgamemenu_graphics[NGG_BAR4_RARROW].target = newgamemenu_graphics[NGG_BAR4_LARROW].target;
// Force numbers to change
newgamemenu_graphics[NGG_NUMBERS].timer = 0; // To get numbers right away
newgamemenu_graphics[NGG_NUMBERS].target=6;
newgamemenu_graphics[NGG_SPEC_ROW1].target = 0;
newgamemenu_graphics[NGG_SPEC_ROW2].target = 0;
newgamemenu_graphics[NGG_SPEC_ROW3].target = 0;
if (!Q_stricmp( UI_Cvar_VariableString( "sex" ), "female" )) {
PlayerConfig_SetMale(qfalse); //force model
s_newgame_male.textcolor = CT_BLACK;
s_newgame_female.textcolor = CT_WHITE;
s_newgame_male.generic.flags &= ~ QMF_BLINK;
s_newgame_female.generic.flags |= QMF_BLINK;
} else {
PlayerConfig_SetMale(qtrue);
s_newgame_female.generic.flags &= ~ QMF_BLINK;
s_newgame_male.generic.flags |= QMF_BLINK;
s_newgame_male.textcolor = CT_WHITE;
}
switch ((int)ui.Cvar_VariableValue("g_spskill")) {
case 0: //easy
s_newgame_easy.textcolor = CT_WHITE;
s_newgame_medium.textcolor = CT_BLACK;
s_newgame_hard.textcolor = CT_BLACK;
s_newgame_easy.generic.flags |= QMF_BLINK;
s_newgame_medium.generic.flags &= ~ QMF_BLINK;
s_newgame_hard.generic.flags &= ~ QMF_BLINK;
break;
case 1: //med
s_newgame_easy.textcolor = CT_BLACK;
s_newgame_medium.textcolor = CT_WHITE;
s_newgame_hard.textcolor = CT_BLACK;
newgamemenu_graphics[NGG_POWERBAND1_1].inc = MEDIUM_INC;
newgamemenu_graphics[NGG_WARPBAND1_1].inc = MEDIUM_INC;
s_newgame_easy.generic.flags &= ~ QMF_BLINK;
s_newgame_medium.generic.flags |= QMF_BLINK;
s_newgame_hard.generic.flags &= ~ QMF_BLINK;
break;
default:
case 2: //hard
s_newgame_easy.textcolor = CT_BLACK;
s_newgame_medium.textcolor = CT_BLACK;
s_newgame_hard.textcolor = CT_WHITE;
newgamemenu_graphics[NGG_POWERBAND1_1].inc = HARD_INC;
newgamemenu_graphics[NGG_WARPBAND1_1].inc = HARD_INC;
s_newgame_easy.generic.flags &= ~ QMF_BLINK;
s_newgame_medium.generic.flags &= ~ QMF_BLINK;
s_newgame_hard.generic.flags |= QMF_BLINK;
break;
}
}
/*
===============
UI_NewGameMenu
===============
*/
void UI_NewGameMenu( void)
{
if (!s_newgame_menu.initialized)
{
NewGameMenu_Init();
}
UI_PushMenu( &s_newgame_menu);
}
static struct
{
menuframework_s menu;
menubitmap_s yes;
menubitmap_s no;
} s_continue;
/*
=================
M_VirtualSave_Graphics
=================
*/
void M_VirtualSave_Graphics (void)
{
// Draw the basic screen layout
UI_MenuFrame(&s_continue.menu);
ui.R_SetColor( colorTable[CT_LTBROWN1]);
UI_DrawHandlePic( 482, 136, MENU_BUTTON_MED_WIDTH - 22, MENU_BUTTON_MED_HEIGHT, uis.whiteShader);
UI_DrawHandlePic( 460 + MENU_BUTTON_MED_WIDTH - 4, 136, -19, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd); //right
ui.R_SetColor( colorTable[CT_LTBROWN1]);
UI_DrawHandlePic(30,203, 47, 186, uis.whiteShader); // Long left column square on bottom 3rd
ui.R_SetColor( colorTable[CT_LTRED1]);
UI_DrawHandlePic( 132, 142, 128, -64, cornerPic); // Top Left corner
UI_DrawHandlePic( 132, 352, 128, 64, cornerPic); // Bottom Left corner
UI_DrawHandlePic( 429, 142, -128, -64, cornerPic); // Top Right corner
UI_DrawHandlePic( 429, 352, -128, 64, cornerPic); // Bottom Right corner
UI_DrawHandlePic(145,175, 395, 18, uis.whiteShader); // Top
UI_DrawHandlePic(132,193, 47, 175, uis.whiteShader); // Left side
UI_DrawHandlePic(510,193, 47, 175, uis.whiteShader); // Right side
UI_DrawHandlePic(147,365, 65, 18, uis.whiteShader); // Bottom Left
UI_DrawHandlePic(477,365, 65, 18, uis.whiteShader); // Bottom Right
UI_DrawProportionalString(345,249,menu_normal_text[MNT_TOURSAVEWARN1],UI_SMALLFONT | UI_CENTER,colorTable[CT_RED]);
UI_DrawProportionalString(345,274,menu_normal_text[MNT_TOURSAVEWARN2],UI_SMALLFONT | UI_CENTER,colorTable[CT_RED]);
UI_DrawProportionalString(345,310,menu_normal_text[MNT_TOURSAVEWARN3],UI_SMALLFONT | UI_CENTER,colorTable[CT_LTGOLD1]);
}
/*
=================
VirtualSave_MenuDraw
=================
*/
static void VirtualSave_MenuDraw (void)
{
M_VirtualSave_Graphics();
Menu_Draw( &s_continue.menu );
}
/*
=================
M_VirtualSave_Event
=================
*/
void M_VirtualSave_Event (void* ptr, int event)
{
menuframework_s* m;
char commandString[128];
if (event != QM_ACTIVATED)
{
return;
}
m = ((menucommon_s*)ptr)->parent;
switch (((menucommon_s*)ptr)->id)
{
// Do a new save then disconnect.
case ID_LEAVE_YES:
Com_sprintf( commandString, sizeof(commandString), "save virtual\n");
ui.Cmd_ExecuteText( EXEC_APPEND, commandString);
// No, do nothing
case ID_LEAVE_NO:
LeaveGame_Action();
break;
}
}
/*
=================
M_VirtualSave_Event1
=================
*/
void M_VirtualSave_Event1 (void* ptr, int event)
{
menuframework_s* m;
char commandString[128];
if (event != QM_ACTIVATED)
{
return;
}
m = ((menucommon_s*)ptr)->parent;
switch (((menucommon_s*)ptr)->id)
{
// Do a new save then disconnect.
case ID_LEAVE_YES:
Com_sprintf( commandString, sizeof(commandString), "save virtual\n");
ui.Cmd_ExecuteText( EXEC_APPEND, commandString);
// No, do nothing
case ID_LEAVE_NO:
UI_LCARSOut_Menu();
break;
}
}
/*
=================
M_VirtualSave_Event2
=================
*/
void M_VirtualSave_Event2 (void* ptr, int event)
{
menuframework_s* m;
char commandString[128];
if (event != QM_ACTIVATED)
{
return;
}
m = ((menucommon_s*)ptr)->parent;
switch (((menucommon_s*)ptr)->id)
{
// Do a new save
case ID_LEAVE_YES:
Com_sprintf( commandString, sizeof(commandString), "save virtual\n");
ui.Cmd_ExecuteText( EXEC_APPEND, commandString);
// No, do nothing
case ID_LEAVE_NO:
UI_ForceMenuOff ();
break;
}
}
/*
=================
VirtualSave_MenuKey
=================
*/
static sfxHandle_t VirtualSave_MenuKey( int key )
{
return Menu_DefaultKey( &s_continue.menu, key );
}
/*
=================
UI_VirtualSaveMenu_Cache
=================
*/
void UI_VirtualSaveMenu_Cache( void )
{
cornerPic = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_18.tga");
}
/*
=================
VirtualSaveMenu_Init
=================
*/
static void VirtualSaveMenu_Init(int from)
{
UI_VirtualSaveMenu_Cache();
s_continue.menu.nitems = 0;
s_continue.menu.wrapAround = qtrue;
s_continue.menu.opening = NULL;
s_continue.menu.closing = NULL;
s_continue.menu.draw = VirtualSave_MenuDraw;
s_continue.menu.key = VirtualSave_MenuKey;
s_continue.menu.fullscreen = qtrue;
s_continue.menu.descX = MENU_DESC_X;
s_continue.menu.descY = MENU_DESC_Y;
s_continue.menu.listX = 230;
s_continue.menu.listY = 188;
s_continue.menu.titleX = MENU_TITLE_X;
s_continue.menu.titleY = MENU_TITLE_Y;
s_continue.menu.titleI = MNT_CONTROLSMENU_TITLE;
s_continue.menu.footNoteEnum = MNT_DEFAULT_SETUP;
s_continue.yes.generic.type = MTYPE_BITMAP;
s_continue.yes.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_continue.yes.generic.x = 215;
s_continue.yes.generic.y = 365;
s_continue.yes.generic.name = "menu/common/square.tga";
s_continue.yes.generic.id = ID_LEAVE_YES;
if (from==1)
{
s_continue.yes.generic.callback = M_VirtualSave_Event1;
}
else if (from==2) // In Virtual Voyager
{
s_continue.yes.generic.callback = M_VirtualSave_Event2;
}
else
{
s_continue.yes.generic.callback = M_VirtualSave_Event;
}
s_continue.yes.width = 103;
s_continue.yes.height = MENU_BUTTON_MED_HEIGHT;
s_continue.yes.color = CT_DKPURPLE1;
s_continue.yes.color2 = CT_LTPURPLE1;
s_continue.yes.textX = MENU_BUTTON_TEXT_X;
s_continue.yes.textY = MENU_BUTTON_TEXT_Y;
s_continue.yes.textEnum = MBT_LEAVEGAME_YES;
s_continue.yes.textcolor = CT_BLACK;
s_continue.yes.textcolor2 = CT_WHITE;
s_continue.yes.textStyle = UI_SMALLFONT;
s_continue.no.generic.type = MTYPE_BITMAP;
s_continue.no.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_continue.no.generic.x = 371;
s_continue.no.generic.y = 365;
s_continue.no.generic.name = "menu/common/square.tga";
s_continue.no.generic.id = ID_LEAVE_NO;
s_continue.no.generic.callback = M_VirtualSave_Event;
if (from==1)
{
s_continue.no.generic.callback = M_VirtualSave_Event1;
}
else if (from==2) // In Virtual Voyager
{
s_continue.no.generic.callback = M_VirtualSave_Event2;
}
else
{
s_continue.no.generic.callback = M_VirtualSave_Event;
}
s_continue.no.width = 103;
s_continue.no.height = MENU_BUTTON_MED_HEIGHT;
s_continue.no.color = CT_DKPURPLE1;
s_continue.no.color2 = CT_LTPURPLE1;
s_continue.no.textX = MENU_BUTTON_TEXT_X;
s_continue.no.textY = MENU_BUTTON_TEXT_Y;
s_continue.no.textEnum = MBT_LEAVEGAME_NO;
s_continue.no.textcolor = CT_BLACK;
s_continue.no.textcolor2 = CT_WHITE;
s_continue.no.textStyle = UI_SMALLFONT;
Menu_AddItem( &s_continue.menu, ( void * )&s_continue.yes);
Menu_AddItem( &s_continue.menu, ( void * )&s_continue.no);
}
/*
===============
UI_VirtualSaveMenu
===============
*/
void UI_VirtualSaveMenu(int from)
{
VirtualSaveMenu_Init(from);
UI_PushMenu( &s_continue.menu);
}
/*
=================
M_VirtualLoad_Event
=================
*/
void M_VirtualLoad_Event (void* ptr, int event)
{
menuframework_s* m;
char commandString[128];
if (event != QM_ACTIVATED)
{
return;
}
m = ((menucommon_s*)ptr)->parent;
switch (((menucommon_s*)ptr)->id)
{
// Do a new save
case ID_LEAVE_YES:
Com_sprintf( commandString, sizeof(commandString), "load virtual\n");
ui.Cmd_ExecuteText( EXEC_APPEND, commandString);
break;
// No, do nothing
case ID_LEAVE_NO:
UI_ForceMenuOff ();
break;
}
}
/*
=================
M_VirtualLoad_Graphics
=================
*/
void M_VirtualLoad_Graphics (void)
{
// Draw the basic screen layout
UI_MenuFrame(&s_continue.menu);
ui.R_SetColor( colorTable[CT_LTBROWN1]);
UI_DrawHandlePic( 482, 136, MENU_BUTTON_MED_WIDTH - 22, MENU_BUTTON_MED_HEIGHT, uis.whiteShader);
UI_DrawHandlePic( 460 + MENU_BUTTON_MED_WIDTH - 4, 136, -19, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd); //right
ui.R_SetColor( colorTable[CT_LTBROWN1]);
UI_DrawHandlePic(30,203, 47, 186, uis.whiteShader); // Long left column square on bottom 3rd
ui.R_SetColor( colorTable[CT_LTRED1]);
UI_DrawHandlePic( 132, 142, 128, -64, cornerPic); // Top Left corner
UI_DrawHandlePic( 132, 352, 128, 64, cornerPic); // Bottom Left corner
UI_DrawHandlePic( 429, 142, -128, -64, cornerPic); // Top Right corner
UI_DrawHandlePic( 429, 352, -128, 64, cornerPic); // Bottom Right corner
UI_DrawHandlePic(145,175, 395, 18, uis.whiteShader); // Top
UI_DrawHandlePic(132,193, 47, 175, uis.whiteShader); // Left side
UI_DrawHandlePic(510,193, 47, 175, uis.whiteShader); // Right side
UI_DrawHandlePic(147,365, 65, 18, uis.whiteShader); // Bottom Left
UI_DrawHandlePic(477,365, 65, 18, uis.whiteShader); // Bottom Right
UI_DrawProportionalString(345,274,menu_normal_text[MNT_TOURLOADWARN1],UI_SMALLFONT | UI_CENTER,colorTable[CT_RED]);
}
/*
=================
VirtualLoad_MenuDraw
=================
*/
static void VirtualLoad_MenuDraw (void)
{
M_VirtualLoad_Graphics();
Menu_Draw( &s_continue.menu );
}
/*
=================
VirtualLoadMenu_Init
=================
*/
static void VirtualLoadMenu_Init(void)
{
UI_VirtualSaveMenu_Cache();
s_continue.menu.nitems = 0;
s_continue.menu.wrapAround = qtrue;
s_continue.menu.opening = NULL;
s_continue.menu.closing = NULL;
s_continue.menu.draw = VirtualLoad_MenuDraw;
s_continue.menu.key = VirtualSave_MenuKey;
s_continue.menu.fullscreen = qtrue;
s_continue.menu.descX = MENU_DESC_X;
s_continue.menu.descY = MENU_DESC_Y;
s_continue.menu.listX = 230;
s_continue.menu.listY = 188;
s_continue.menu.titleX = MENU_TITLE_X;
s_continue.menu.titleY = MENU_TITLE_Y;
s_continue.menu.titleI = MNT_CONTROLSMENU_TITLE;
s_continue.menu.footNoteEnum = MNT_DEFAULT_SETUP;
s_continue.yes.generic.type = MTYPE_BITMAP;
s_continue.yes.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_continue.yes.generic.x = 215;
s_continue.yes.generic.y = 365;
s_continue.yes.generic.name = "menu/common/square.tga";
s_continue.yes.generic.id = ID_LEAVE_YES;
s_continue.yes.generic.callback = M_VirtualLoad_Event;
s_continue.yes.width = 103;
s_continue.yes.height = MENU_BUTTON_MED_HEIGHT;
s_continue.yes.color = CT_DKPURPLE1;
s_continue.yes.color2 = CT_LTPURPLE1;
s_continue.yes.textX = MENU_BUTTON_TEXT_X;
s_continue.yes.textY = MENU_BUTTON_TEXT_Y;
s_continue.yes.textEnum = MBT_LEAVEGAME_YES;
s_continue.yes.textcolor = CT_BLACK;
s_continue.yes.textcolor2 = CT_WHITE;
s_continue.yes.textStyle = UI_SMALLFONT;
s_continue.no.generic.type = MTYPE_BITMAP;
s_continue.no.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_continue.no.generic.x = 371;
s_continue.no.generic.y = 365;
s_continue.no.generic.name = "menu/common/square.tga";
s_continue.no.generic.id = ID_LEAVE_NO;
s_continue.no.generic.callback = M_VirtualSave_Event;
s_continue.no.generic.callback = M_VirtualLoad_Event;
s_continue.no.width = 103;
s_continue.no.height = MENU_BUTTON_MED_HEIGHT;
s_continue.no.color = CT_DKPURPLE1;
s_continue.no.color2 = CT_LTPURPLE1;
s_continue.no.textX = MENU_BUTTON_TEXT_X;
s_continue.no.textY = MENU_BUTTON_TEXT_Y;
s_continue.no.textEnum = MBT_LEAVEGAME_NO;
s_continue.no.textcolor = CT_BLACK;
s_continue.no.textcolor2 = CT_WHITE;
s_continue.no.textStyle = UI_SMALLFONT;
Menu_AddItem( &s_continue.menu, ( void * )&s_continue.yes);
Menu_AddItem( &s_continue.menu, ( void * )&s_continue.no);
}
void UI_VirtualLoadMenu(void)
{
VirtualLoadMenu_Init();
UI_PushMenu( &s_continue.menu);
}
/*
=================
M_LeaveGameMenu_Graphics
=================
*/
void M_LeaveGameMenu_Graphics (void)
{
// Draw the basic screen layout
UI_MenuFrame(&s_leavegame_menu);
ui.R_SetColor( colorTable[CT_LTBROWN1]);
UI_DrawHandlePic(30,203, 47, 186, uis.whiteShader); // Long left column square on bottom 3rd
ui.R_SetColor( colorTable[CT_LTBLUE1]);
UI_DrawHandlePic( 132, 142, 128, -64, cornerPic); // Top Left corner
UI_DrawHandlePic( 132, 352, 128, 64, cornerPic); // Bottom Left corner
UI_DrawHandlePic( 429, 142, -128, -64, cornerPic); // Top Right corner
UI_DrawHandlePic( 429, 352, -128, 64, cornerPic); // Bottom Right corner
UI_DrawHandlePic(145,175, 395, 18, uis.whiteShader); // Top
UI_DrawHandlePic(132,193, 47, 175, uis.whiteShader); // Left side
UI_DrawHandlePic(510,193, 47, 175, uis.whiteShader); // Right side
UI_DrawHandlePic(147,365, 65, 18, uis.whiteShader); // Bottom Left
UI_DrawHandlePic(477,365, 65, 18, uis.whiteShader); // Bottom Right
UI_DrawProportionalString(345,269,menu_normal_text[MNT_LEAVEGAME_WARNING1],UI_SMALLFONT | UI_CENTER,colorTable[CT_LTBLUE1]);
}
/*
=================
LeaveGame_MenuDraw
=================
*/
static void LeaveGame_MenuDraw (void)
{
M_LeaveGameMenu_Graphics();
Menu_Draw( &s_leavegame_menu );
}
static void LeaveGame_Action( void )
{
ui.Cmd_ExecuteText( EXEC_APPEND, "disconnect\n" );
}
/*
=================
M_LeaveGame_Event
=================
*/
void M_LeaveGame_Event (void* ptr, int event)
{
menuframework_s* m;
// char commandString[128];
if (event != QM_ACTIVATED)
{
return;
}
m = ((menucommon_s*)ptr)->parent;
switch (((menucommon_s*)ptr)->id)
{
// Get default config
case ID_LEAVE_YES:
// If in virtual voyager (but not in holomatch) save the game.
if ((ui.Cvar_VariableValue( "cg_virtualVoyager" )==1) && (holoMatch == qfalse))
{
UI_VirtualSaveMenu(0);
}
else
{
LeaveGame_Action();
}
break;
// No, go to main menu
case ID_LEAVE_NO:
UI_PopMenu();
break;
}
}
/*
=================
LeaveGame_MenuKey
=================
*/
static sfxHandle_t LeaveGame_MenuKey( int key )
{
return Menu_DefaultKey( &s_leavegame_menu, key );
}
/*
=================
UI_LeaveGameMenu_Cache
=================
*/
void UI_LeaveGameMenu_Cache( void )
{
cornerPic = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_18.tga");
}
/*
=================
LeaveGameMenu_Init
=================
*/
static void LeaveGameMenu_Init( void )
{
UI_LeaveGameMenu_Cache();
s_leavegame_menu.nitems = 0;
s_leavegame_menu.wrapAround = qtrue;
s_leavegame_menu.opening = NULL;
s_leavegame_menu.closing = NULL;
s_leavegame_menu.draw = LeaveGame_MenuDraw;
s_leavegame_menu.key = LeaveGame_MenuKey;
s_leavegame_menu.fullscreen = qtrue;
s_leavegame_menu.descX = MENU_DESC_X;
s_leavegame_menu.descY = MENU_DESC_Y;
s_leavegame_menu.listX = 230;
s_leavegame_menu.listY = 188;
s_leavegame_menu.titleX = MENU_TITLE_X;
s_leavegame_menu.titleY = MENU_TITLE_Y;
s_leavegame_menu.titleI = MNT_CONTROLSMENU_TITLE;
s_leavegame_menu.footNoteEnum = MNT_DEFAULT_SETUP;
s_newgame_mainmenu.generic.type = MTYPE_BITMAP;
s_newgame_mainmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_newgame_mainmenu.generic.x = 482;
s_newgame_mainmenu.generic.y = 136;
s_newgame_mainmenu.generic.name = GRAPHIC_BUTTONRIGHT;
s_newgame_mainmenu.generic.id = ID_MAINMENU;
s_newgame_mainmenu.generic.callback = NewGame_MenuEvent;
s_newgame_mainmenu.width = MENU_BUTTON_MED_WIDTH;
s_newgame_mainmenu.height = MENU_BUTTON_MED_HEIGHT;
s_newgame_mainmenu.color = CT_DKPURPLE1;
s_newgame_mainmenu.color2 = CT_LTPURPLE1;
s_newgame_mainmenu.textX = MENU_BUTTON_TEXT_X;
s_newgame_mainmenu.textY = MENU_BUTTON_TEXT_Y;
s_newgame_mainmenu.textEnum = MBT_INGAMEMENU;
s_newgame_mainmenu.textcolor = CT_BLACK;
s_newgame_mainmenu.textcolor2 = CT_WHITE;
s_leavegame_yes.generic.type = MTYPE_BITMAP;
s_leavegame_yes.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_leavegame_yes.generic.x = 215;
s_leavegame_yes.generic.y = 365;
s_leavegame_yes.generic.name = "menu/common/square.tga";
s_leavegame_yes.generic.id = ID_LEAVE_YES;
s_leavegame_yes.generic.callback = M_LeaveGame_Event;
s_leavegame_yes.width = 103;
s_leavegame_yes.height = MENU_BUTTON_MED_HEIGHT;
s_leavegame_yes.color = CT_DKPURPLE1;
s_leavegame_yes.color2 = CT_LTPURPLE1;
s_leavegame_yes.textX = MENU_BUTTON_TEXT_X;
s_leavegame_yes.textY = MENU_BUTTON_TEXT_Y;
s_leavegame_yes.textEnum = MBT_LEAVEGAME_YES;
s_leavegame_yes.textcolor = CT_BLACK;
s_leavegame_yes.textcolor2 = CT_WHITE;
s_leavegame_yes.textStyle = UI_SMALLFONT;
s_leavegame_no.generic.type = MTYPE_BITMAP;
s_leavegame_no.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_leavegame_no.generic.x = 371;
s_leavegame_no.generic.y = 365;
s_leavegame_no.generic.name = "menu/common/square.tga";
s_leavegame_no.generic.id = ID_LEAVE_NO;
s_leavegame_no.generic.callback = M_LeaveGame_Event;
s_leavegame_no.width = 103;
s_leavegame_no.height = MENU_BUTTON_MED_HEIGHT;
s_leavegame_no.color = CT_DKPURPLE1;
s_leavegame_no.color2 = CT_LTPURPLE1;
s_leavegame_no.textX = MENU_BUTTON_TEXT_X;
s_leavegame_no.textY = MENU_BUTTON_TEXT_Y;
s_leavegame_no.textEnum = MBT_LEAVEGAME_NO;
s_leavegame_no.textcolor = CT_BLACK;
s_leavegame_no.textcolor2 = CT_WHITE;
s_leavegame_no.textStyle = UI_SMALLFONT;
Menu_AddItem( &s_leavegame_menu, ( void * )&s_newgame_mainmenu);
Menu_AddItem( &s_leavegame_menu, ( void * )&s_leavegame_yes);
Menu_AddItem( &s_leavegame_menu, ( void * )&s_leavegame_no);
}
/*
===============
UI_LeaveGameMenu
===============
*/
void UI_LeaveGameMenu( void)
{
LeaveGameMenu_Init();
UI_PushMenu( &s_leavegame_menu);
}
/*
=================
M_Continue_Graphics
=================
*/
void M_Continue_Graphics (void)
{
// Draw the basic screen layout
UI_MenuFrame(&s_continue.menu);
ui.R_SetColor( colorTable[CT_LTBROWN1]);
UI_DrawHandlePic( 482, 136, MENU_BUTTON_MED_WIDTH - 22, MENU_BUTTON_MED_HEIGHT, uis.whiteShader);
UI_DrawHandlePic( 460 + MENU_BUTTON_MED_WIDTH - 4, 136, -19, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd); //right
ui.R_SetColor( colorTable[CT_LTBROWN1]);
UI_DrawHandlePic(30,203, 47, 186, uis.whiteShader); // Long left column square on bottom 3rd
ui.R_SetColor( colorTable[CT_LTBLUE1]);
UI_DrawHandlePic( 132, 142, 128, -64, cornerPic); // Top Left corner
UI_DrawHandlePic( 132, 352, 128, 64, cornerPic); // Bottom Left corner
UI_DrawHandlePic( 429, 142, -128, -64, cornerPic); // Top Right corner
UI_DrawHandlePic( 429, 352, -128, 64, cornerPic); // Bottom Right corner
UI_DrawHandlePic(145,175, 395, 18, uis.whiteShader); // Top
UI_DrawHandlePic(132,193, 47, 175, uis.whiteShader); // Left side
UI_DrawHandlePic(510,193, 47, 175, uis.whiteShader); // Right side
UI_DrawHandlePic(147,365, 65, 18, uis.whiteShader); // Bottom Left
UI_DrawHandlePic(477,365, 65, 18, uis.whiteShader); // Bottom Right
UI_DrawProportionalString(345,239,menu_normal_text[MNT_VV_ENGAGE_WARNING1],UI_SMALLFONT | UI_CENTER,colorTable[CT_LTBLUE1]);
UI_DrawProportionalString(345,259,menu_normal_text[MNT_VV_ENGAGE_WARNING2],UI_SMALLFONT | UI_CENTER,colorTable[CT_LTBLUE1]);
UI_DrawProportionalString(345,289,menu_normal_text[MNT_SAVE_WARNING3],UI_SMALLFONT | UI_CENTER,colorTable[CT_LTBLUE1]);
}
/*
=================
Continue_MenuDraw
=================
*/
static void Continue_MenuDraw (void)
{
M_Continue_Graphics();
Menu_Draw( &s_continue.menu );
}
/*
=================
StartTour
Begin tour mode
=================
*/
static void StartTour (void)
{
UI_ForceMenuOff ();
UI_WipeTourHubSaveDirectory ();
ui.Cvar_SetValue( "cg_virtualVoyager", 0 ); // So we don't get a warning. Gives it a default value of 0.
ui.Cvar_SetValue( "cg_virtualVoyager", 1 );
ui.Cmd_ExecuteText( EXEC_APPEND, "map tour/deck02\n");
}
/*
=================
M_Continue_Event
=================
*/
void M_Continue_Event (void* ptr, int event)
{
menuframework_s* m;
if (event != QM_ACTIVATED)
{
return;
}
m = ((menucommon_s*)ptr)->parent;
switch (((menucommon_s*)ptr)->id)
{
// Get default config
case ID_LEAVE_YES:
StartTour();
break;
// No, go to main menu
case ID_LEAVE_NO:
UI_PopMenu();
break;
}
}
/*
=================
Continue_MenuKey
=================
*/
static sfxHandle_t Continue_MenuKey( int key )
{
return Menu_DefaultKey( &s_continue.menu, key );
}
/*
=================
UI_ContinueMenu_Cache
=================
*/
void UI_ContinueMenu_Cache( void )
{
cornerPic = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_18.tga");
}
/*
=================
ContinueMenu_Init
=================
*/
static void ContinueMenu_Init( void )
{
UI_ContinueMenu_Cache();
s_continue.menu.nitems = 0;
s_continue.menu.wrapAround = qtrue;
s_continue.menu.opening = NULL;
s_continue.menu.closing = NULL;
s_continue.menu.draw = Continue_MenuDraw;
s_continue.menu.key = Continue_MenuKey;
s_continue.menu.fullscreen = qtrue;
s_continue.menu.descX = MENU_DESC_X;
s_continue.menu.descY = MENU_DESC_Y;
s_continue.menu.listX = 230;
s_continue.menu.listY = 188;
s_continue.menu.titleX = MENU_TITLE_X;
s_continue.menu.titleY = MENU_TITLE_Y;
s_continue.menu.titleI = MNT_CONFIRMATION;
s_continue.menu.footNoteEnum = MNT_CONFIRMATION;
s_continue.yes.generic.type = MTYPE_BITMAP;
s_continue.yes.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_continue.yes.generic.x = 215;
s_continue.yes.generic.y = 365;
s_continue.yes.generic.name = "menu/common/square.tga";
s_continue.yes.generic.id = ID_LEAVE_YES;
s_continue.yes.generic.callback = M_Continue_Event;
s_continue.yes.width = 103;
s_continue.yes.height = MENU_BUTTON_MED_HEIGHT;
s_continue.yes.color = CT_DKPURPLE1;
s_continue.yes.color2 = CT_LTPURPLE1;
s_continue.yes.textX = MENU_BUTTON_TEXT_X;
s_continue.yes.textY = MENU_BUTTON_TEXT_Y;
s_continue.yes.textEnum = MBT_VIRTUALSAVE_YES;
s_continue.yes.textcolor = CT_BLACK;
s_continue.yes.textcolor2 = CT_WHITE;
s_continue.yes.textStyle = UI_SMALLFONT;
s_continue.no.generic.type = MTYPE_BITMAP;
s_continue.no.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_continue.no.generic.x = 371;
s_continue.no.generic.y = 365;
s_continue.no.generic.name = "menu/common/square.tga";
s_continue.no.generic.id = ID_LEAVE_NO;
s_continue.no.generic.callback = M_Continue_Event;
s_continue.no.width = 103;
s_continue.no.height = MENU_BUTTON_MED_HEIGHT;
s_continue.no.color = CT_DKPURPLE1;
s_continue.no.color2 = CT_LTPURPLE1;
s_continue.no.textX = MENU_BUTTON_TEXT_X;
s_continue.no.textY = MENU_BUTTON_TEXT_Y;
s_continue.no.textEnum = MBT_VIRTUALSAVE_NO;
s_continue.no.textcolor = CT_BLACK;
s_continue.no.textcolor2 = CT_WHITE;
s_continue.no.textStyle = UI_SMALLFONT;
Menu_AddItem( &s_continue.menu, ( void * )&s_continue.yes);
Menu_AddItem( &s_continue.menu, ( void * )&s_continue.no);
}
/*
===============
UI_ContinueMenu
===============
*/
void UI_ContinueMenu( void)
{
ContinueMenu_Init();
UI_PushMenu( &s_continue.menu);
}
// Precache stuff for New Game Screen
typedef struct
{
menuframework_s menu;
menubitmap_s team;
menubitmap_s mainmenu;
menubitmap_s start;
menubitmap_s resume;
menubitmap_s female;
menubitmap_s male;
int holdeckCnt;
qhandle_t ship;
qhandle_t corner_ll_4_8;
qhandle_t corner_ul_8_18;
qhandle_t corner_ll_18_18;
qhandle_t corner_ul_18_22;
menubitmap_s line1_label;
menubitmap_s line2_label;
menubitmap_s line3_label;
menubitmap_s line4_label;
menubitmap_s line5_label;
menubitmap_s line6_label;
menubitmap_s line7_label;
menubitmap_s line8_label;
menubitmap_s line9_label;
} tourGame_t;
static tourGame_t s_tourGame;
typedef enum
{
TMG_TIMER,
TMG_CURRENT_TEXT,
TMG_GRAPHIC1,
TMG_GRAPHIC2,
TMG_GRAPHIC3,
TMG_GRAPHIC4,
TMG_GRAPHIC5,
TMG_GRAPHIC6,
TMG_GRAPHIC7,
TMG_GRAPHIC8,
TMG_GRAPHIC9,
TMG_LOCATION_DOT1,
TMG_LOCATION_DOT2,
TMG_LOCATION_DOT3,
TMG_LOCATION_DOT4,
TMG_LOCATION_DOT5,
TMG_LINE1,
TMG_LINE2,
TMG_LINE3,
TMG_LINE4,
TMG_LINE5,
TMG_MAX
} tourmenu_graphics_t;
#define TMG_TEXT_X 99
#define TMG_TEXT_Y 236
#define TMG_TEXT_PAD 14
#define TMG_TIMER_INC 4000
#define TMG_PIC_LENGTH 128
#define TMG_PIC_X_POS 425
#define TMG_PIC_Y_POS 200
#define TMG_DOT_LENGTH 16
#define TMG_SHIP_X_POS -315
#define TMG_SHIP_Y_POS 70
menugraphics_s tourmenu_graphics[TMG_MAX] =
{
// type timer x y width height file/text normaltextEnum buttontextEnum graphic, min max target inc style color
MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, NULL, 0, 0, 0, 0, 0, 0, NULL, // TMG_TIMER
MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, NULL, 0, 0, 0, 0, 0, 0, NULL, // TMG_CURRENT_TEXT
MG_GRAPHIC, 0.0, TMG_PIC_X_POS, TMG_PIC_Y_POS, TMG_PIC_LENGTH, TMG_PIC_LENGTH, "menu/special/vv_bridge.tga", 0, 0, NULL, 0, 0, 0, 0, 0, CT_WHITE, NULL, // TMG_GRAPHIC1
MG_GRAPHIC, 0.0, TMG_PIC_X_POS, TMG_PIC_Y_POS, TMG_PIC_LENGTH, TMG_PIC_LENGTH, "menu/special/vv_explore.tga", 0, 0, NULL, 0, 0, 0, 0, 0, CT_WHITE, NULL, // TMG_GRAPHIC2
MG_GRAPHIC, 0.0, TMG_PIC_X_POS, TMG_PIC_Y_POS, TMG_PIC_LENGTH, TMG_PIC_LENGTH, "menu/special/vv_astrometric.tga", 0, 0, NULL, 0, 0, 0, 0, 0, CT_WHITE, NULL, // TMG_GRAPHIC3
MG_GRAPHIC, 0.0, TMG_PIC_X_POS, TMG_PIC_Y_POS, TMG_PIC_LENGTH, TMG_PIC_LENGTH, "menu/special/vv_shuttle.tga", 0, 0, NULL, 0, 0, 0, 0, 0, CT_WHITE, NULL, // TMG_GRAPHIC4
MG_GRAPHIC, 0.0, TMG_PIC_X_POS, TMG_PIC_Y_POS, TMG_PIC_LENGTH, TMG_PIC_LENGTH, "menu/special/vv_secrets.tga", 0, 0, NULL, 0, 0, 0, 0, 0, CT_WHITE, NULL, // TMG_GRAPHIC5
MG_GRAPHIC, 0.0, TMG_PIC_X_POS, TMG_PIC_Y_POS, TMG_PIC_LENGTH, TMG_PIC_LENGTH, "menu/special/vv_holodeck1.tga", 0, 0, NULL, 0, 0, 0, 0, 0, CT_WHITE, NULL, // TMG_GRAPHIC6
MG_GRAPHIC, 0.0, TMG_PIC_X_POS, TMG_PIC_Y_POS, TMG_PIC_LENGTH, TMG_PIC_LENGTH, "menu/special/vv_holodeck2.tga", 0, 0, NULL, 0, 0, 0, 0, 0, CT_WHITE, NULL, // TMG_GRAPHIC7
MG_GRAPHIC, 0.0, TMG_PIC_X_POS, TMG_PIC_Y_POS, TMG_PIC_LENGTH, TMG_PIC_LENGTH, "menu/special/vv_holodeck3.tga", 0, 0, NULL, 0, 0, 0, 0, 0, CT_WHITE, NULL, // TMG_GRAPHIC8
MG_GRAPHIC, 0.0, TMG_PIC_X_POS, TMG_PIC_Y_POS, TMG_PIC_LENGTH, TMG_PIC_LENGTH, "menu/special/vv_holodeck4.tga", 0, 0, NULL, 0, 0, 0, 0, 0, CT_WHITE, NULL, // TMG_GRAPHIC9
MG_NONE, 0.0, TMG_SHIP_X_POS+714, TMG_SHIP_Y_POS+5, TMG_DOT_LENGTH, TMG_DOT_LENGTH, "menu/objectives/circle_out.tga", 0, 0, NULL, 0, 0, 0, 0, 0, CT_LTGOLD1, NULL, // TMG_LOCATION_DOT1
MG_NONE, 0.0, TMG_SHIP_X_POS+350, TMG_SHIP_Y_POS, TMG_DOT_LENGTH, TMG_DOT_LENGTH, "menu/objectives/circle_out.tga", 0, 0, NULL, 0, 0, 0, 0, 0, CT_WHITE, NULL, // TMG_LOCATION_DOT2
MG_NONE, 0.0, TMG_SHIP_X_POS+350, TMG_SHIP_Y_POS, TMG_DOT_LENGTH, TMG_DOT_LENGTH, "menu/objectives/circle_out.tga", 0, 0, NULL, 0, 0, 0, 0, 0, CT_WHITE, NULL, // TMG_LOCATION_DOT3
MG_NONE, 0.0, TMG_SHIP_X_POS+350, TMG_SHIP_Y_POS, TMG_DOT_LENGTH, TMG_DOT_LENGTH, "menu/objectives/circle_out.tga", 0, 0, NULL, 0, 0, 0, 0, 0, CT_WHITE, NULL, // TMG_LOCATION_DOT4
MG_NONE, 0.0, TMG_SHIP_X_POS+350, TMG_SHIP_Y_POS, TMG_DOT_LENGTH, TMG_DOT_LENGTH, "menu/objectives/circle_out.tga", 0, 0, NULL, 0, 0, 0, 0, 0, CT_WHITE, NULL, // TMG_LOCATION_DOT5
MG_VAR, 0.0, TMG_TEXT_X, TMG_TEXT_Y, 0, 0, NULL, 0, 0, NULL, 0, 0, 0, 0, UI_TINYFONT, CT_YELLOW, (void *) &s_tourGame.line1_label, // TMG_LINE1
MG_VAR, 0.0, TMG_TEXT_X, TMG_TEXT_Y+(TMG_TEXT_PAD), 0, 0, NULL, 0, 0, NULL, 0, 0, 0, 0, UI_TINYFONT, CT_YELLOW, (void *) &s_tourGame.line2_label, // TMG_LINE2
MG_VAR, 0.0, TMG_TEXT_X, TMG_TEXT_Y+(TMG_TEXT_PAD*2),0, 0, NULL, 0, 0, NULL, 0, 0, 0, 0, UI_TINYFONT, CT_YELLOW, (void *) &s_tourGame.line3_label, // TMG_LINE3
MG_VAR, 0.0, TMG_TEXT_X, TMG_TEXT_Y+(TMG_TEXT_PAD*3),0, 0, NULL, 0, 0, NULL, 0, 0, 0, 0, UI_TINYFONT, CT_YELLOW, (void *) &s_tourGame.line4_label, // TMG_LINE4
MG_VAR, 0.0, TMG_TEXT_X, TMG_TEXT_Y+(TMG_TEXT_PAD*4),0, 0, NULL, 0, 0, NULL, 0, 0, 0, 0, UI_TINYFONT, CT_YELLOW, (void *) &s_tourGame.line5_label, // TMG_LINE5
};
/*
=================
TourGame_Blinkies
=================
*/
static void TourGame_Blinkies(void)
{
menubitmap_s *holdLabel;
// Time to go to next text????
if ( tourmenu_graphics[TMG_TIMER].timer < uis.realtime )
{
holdLabel = &s_tourGame.line1_label;
holdLabel += tourmenu_graphics[TMG_CURRENT_TEXT].target;
holdLabel->textcolor = CT_DKGOLD1;
tourmenu_graphics[TMG_GRAPHIC1 + tourmenu_graphics[TMG_CURRENT_TEXT].target + s_tourGame.holdeckCnt].type = MG_NONE;
// tourmenu_graphics[TMG_LOCATION_DOT1 + tourmenu_graphics[TMG_CURRENT_TEXT].target].type = MG_NONE; // Turn off dot
if (tourmenu_graphics[TMG_CURRENT_TEXT].target==4)
{
s_tourGame.holdeckCnt=0;
}
else if (tourmenu_graphics[TMG_CURRENT_TEXT].target==5)
{
s_tourGame.holdeckCnt++; // Count of current holodeck picture
}
tourmenu_graphics[TMG_CURRENT_TEXT].target++;
if (tourmenu_graphics[TMG_CURRENT_TEXT].target >= 5) // Past end of text
{
tourmenu_graphics[TMG_CURRENT_TEXT].target=5;
if (s_tourGame.holdeckCnt>3)
{
tourmenu_graphics[TMG_CURRENT_TEXT].target=0;
s_tourGame.holdeckCnt=0;
}
}
holdLabel = &s_tourGame.line1_label;
holdLabel += tourmenu_graphics[TMG_CURRENT_TEXT].target;
holdLabel->textcolor = CT_LTGOLD1;
// Three of the holodeck pictures don't get the beep
if (tourmenu_graphics[TMG_CURRENT_TEXT].target< 5)
{
ui.S_StartLocalSound( uis.menu_choice1_snd, CHAN_LOCAL_SOUND ); // Beep
}
// Turnon graphic
tourmenu_graphics[TMG_GRAPHIC1 + tourmenu_graphics[TMG_CURRENT_TEXT].target + s_tourGame.holdeckCnt].type = MG_GRAPHIC;
// tourmenu_graphics[TMG_LOCATION_DOT1 + tourmenu_graphics[TMG_CURRENT_TEXT].target].type = MG_GRAPHIC; // Turn on dot
// Holodeck text is special because it shows 4 pictures.
if (tourmenu_graphics[TMG_CURRENT_TEXT].target>= 5)
{
tourmenu_graphics[TMG_TIMER].timer = uis.realtime + TMG_TIMER_INC/4;
}
else
{
tourmenu_graphics[TMG_TIMER].timer = uis.realtime + TMG_TIMER_INC;
}
}
}
/*
=================
M_TourGame_Graphics
=================
*/
static void M_TourGame_Graphics (void)
{
int holdX,holdLength;
// Picture
ui.R_SetColor( colorTable[CT_DKGREY]);
UI_DrawHandlePic(TMG_PIC_X_POS-2, TMG_PIC_Y_POS-2, TMG_PIC_LENGTH+4,TMG_PIC_LENGTH+4, uis.whiteShader); // Background
// Main Frame
ui.R_SetColor( colorTable[CT_LTPURPLE1]);
UI_DrawHandlePic(TMG_SHIP_X_POS, TMG_SHIP_Y_POS, -924, 231, s_tourGame.ship); // Voyager picture
// Top
ui.R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(30, 25, 32, 32, s_tourGame.corner_ul_18_22);
UI_DrawHandlePic(58, 25, 200, 22, uis.whiteShader); // Top left hand column square
holdX = 604 - ((UI_ProportionalStringWidth(menu_normal_text[MNT_TOURMENU_TITLE],UI_BIGFONT)) + 4);
holdLength = holdX - 261;
UI_DrawHandlePic( 261, 25, holdLength, 22, uis.whiteShader); // Bottom end line
UI_DrawProportionalString( 604, MENU_TITLE_Y, menu_normal_text[MNT_TOURMENU_TITLE],UI_BIGFONT|UI_RIGHT, colorTable[CT_LTBLUE1]);
// Left side
ui.R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(30, 32, 18, 182, uis.whiteShader); // Top left hand column square
UI_DrawHandlePic(30,217, 18, 107, uis.whiteShader); // Middle left hand column square
ui.R_SetColor( colorTable[CT_VDKPURPLE2]);
UI_DrawHandlePic(30,327, 18, 115, uis.whiteShader); // Bottom left hand column square
UI_DrawHandlePic(30, 434, 32, 32, s_tourGame.corner_ll_18_18);
UI_DrawHandlePic(48, 438, 45, 18, uis.whiteShader); // Top left column
ui.R_SetColor( colorTable[CT_LTBROWN1]);
UI_DrawHandlePic( 96, 438, 268, 18, uis.whiteShader); // Bottom front Line
UI_MenuFrameBottomLineEnd_Graphics(menu_normal_text[MNT_TOURMENU_BY],CT_LTBROWN1);
UI_DrawProportionalString( MENU_TITLE_X, 440, menu_normal_text[MNT_TOURMENU_BY],UI_RIGHT | UI_SMALLFONT, colorTable[CT_LTORANGE]);
// Gender frame
ui.R_SetColor( colorTable[CT_DKBROWN1]);
UI_DrawHandlePic(313, 345, 16, 32, s_tourGame.corner_ul_8_18); //
ui.R_SetColor( colorTable[CT_DKBROWN1]);
UI_DrawHandlePic(313, 418, 16, 8, s_tourGame.corner_ll_4_8); //
ui.R_SetColor( colorTable[CT_DKBROWN1]);
UI_DrawHandlePic( 317, 345, 162, 18, uis.whiteShader); // Top
UI_DrawHandlePic( 313, 350, 8, 69, uis.whiteShader); // Side
UI_DrawHandlePic( 317, 420, 162, 4, uis.whiteShader); // Bottom
UI_DrawProportionalString( 330, 347, menu_normal_text[MNT_GENDER], UI_SMALLFONT, colorTable[CT_VLTBROWN1]);
TourGame_Blinkies();
UI_PrintMenuGraphics(tourmenu_graphics,TMG_MAX);
}
/*
=================
M_TourGame_MenuDraw
=================
*/
static void M_TourGame_MenuDraw (void)
{
M_TourGame_Graphics();
Menu_Draw( &s_tourGame.menu );
}
/*
=================
TourGame_MenuEvent
=================
*/
static void TourGame_MenuEvent( void* ptr, int notification )
{
menuframework_s* m;
char commandString[128];
menubitmap_s *holdLabel;
if (notification != QM_ACTIVATED)
return;
m = ((menucommon_s*)ptr)->parent;
switch (((menucommon_s*)ptr)->id)
{
case ID_MAINMENU:
UI_PopMenu();
break;
case ID_MALE:
s_tourGame.male.textcolor = CT_WHITE;
s_tourGame.female.textcolor = CT_BLACK;
s_tourGame.female.generic.flags &= ~ QMF_BLINK;
s_tourGame.male.generic.flags |= QMF_BLINK;
PlayerConfig_SetMale (qtrue);
break;
case ID_FEMALE:
s_tourGame.male.textcolor = CT_BLACK;
s_tourGame.female.textcolor = CT_WHITE;
s_tourGame.male.generic.flags &= ~ QMF_BLINK;
s_tourGame.female.generic.flags |= QMF_BLINK;
PlayerConfig_SetMale (qfalse);
break;
case ID_STARTNEWGAME:
// Does an old virtual save exist????
if (ui.SG_ValidateForLoadSaveScreen("virtual"))
{
UI_ContinueMenu(); // Ask to continue
}
else
{
StartTour ();
}
break;
case ID_RESUMETOUR:
ui.Cvar_SetValue( "cg_virtualVoyager", 0 ); // So we don't get a warning. Gives it a default value of 0.
ui.Cvar_SetValue( "cg_virtualVoyager", 1 );
Com_sprintf( commandString, sizeof(commandString), "load virtual\n");
ui.Cmd_ExecuteText( EXEC_APPEND, commandString);
break;
case ID_TOUR_LINE1:
case ID_TOUR_LINE2:
case ID_TOUR_LINE3:
case ID_TOUR_LINE4:
case ID_TOUR_LINE5:
case ID_TOUR_LINE6:
// Turn off old text hi-lite
holdLabel = &s_tourGame.line1_label;
holdLabel += tourmenu_graphics[TMG_CURRENT_TEXT].target;
holdLabel->textcolor = CT_DKGOLD1;
// Turn off picture
tourmenu_graphics[TMG_GRAPHIC1 + tourmenu_graphics[TMG_CURRENT_TEXT].target].type = MG_OFF;
tourmenu_graphics[TMG_LOCATION_DOT1 + tourmenu_graphics[TMG_CURRENT_TEXT].target].type = MG_OFF; // Turn off dot
tourmenu_graphics[TMG_CURRENT_TEXT].target = (((menucommon_s*)ptr)->id) - ID_TOUR_LINE1;
// Turn on new picture
tourmenu_graphics[TMG_GRAPHIC1 + tourmenu_graphics[TMG_CURRENT_TEXT].target].type = MG_GRAPHIC;
// tourmenu_graphics[TMG_LOCATION_DOT1 + tourmenu_graphics[TMG_CURRENT_TEXT].target].type = MG_GRAPHIC; // Turn on dot
tourmenu_graphics[TMG_TIMER].timer = uis.realtime + TMG_TIMER_INC;
// Turn on next text hi-lite
holdLabel = &s_tourGame.line1_label;
holdLabel += tourmenu_graphics[TMG_CURRENT_TEXT].target;
holdLabel->textcolor = CT_LTGOLD1;
// Special case for text line 5
if (tourmenu_graphics[TMG_CURRENT_TEXT].target>= 5)
{
tourmenu_graphics[TMG_TIMER].timer = uis.realtime + TMG_TIMER_INC/4;
}
s_tourGame.holdeckCnt=0;
break;
}
}
/*
=================
TourGame_MenuKey
=================
*/
static sfxHandle_t TourGame_MenuKey( int key )
{
return Menu_DefaultKey( &s_tourGame.menu, key );
}
/*
=================
UI_TourGameMenu_Cache
=================
*/
void UI_TourGameMenu_Cache( void )
{
s_tourGame.ship = ui.R_RegisterShaderNoMip("menu/special/voy_1.tga");
s_tourGame.corner_ll_4_8 = ui.R_RegisterShaderNoMip("menu/common/corner_ll_4_8.tga");
s_tourGame.corner_ul_8_18 = ui.R_RegisterShaderNoMip("menu/common/corner_ul_8_18.tga");
s_tourGame.corner_ll_18_18 = ui.R_RegisterShaderNoMip("menu/common/corner_ll_18_18.tga");
s_tourGame.corner_ul_18_22 = ui.R_RegisterShaderNoMip( "menu/common/corner_ul_18_22");
UI_PrecacheMenuGraphics(tourmenu_graphics,TMG_MAX);
}
/*
=================
LeaveGameMenu_Init
=================
*/
static void TourGameMenu_Init( void )
{
UI_TourGameMenu_Cache();
s_tourGame.menu.nitems = 0;
s_tourGame.menu.wrapAround = qtrue;
s_tourGame.menu.opening = NULL;
s_tourGame.menu.closing = NULL;
s_tourGame.menu.draw = M_TourGame_MenuDraw;
s_tourGame.menu.key = TourGame_MenuKey;
s_tourGame.menu.fullscreen = qtrue;
s_tourGame.menu.descX = MENU_DESC_X;
s_tourGame.menu.descY = MENU_DESC_Y;
s_tourGame.menu.listX = 230;
s_tourGame.menu.listY = 188;
s_tourGame.menu.titleX = MENU_TITLE_X;
s_tourGame.menu.titleY = MENU_TITLE_Y;
s_tourGame.menu.titleI = MNT_TOURVOYAGER;
s_tourGame.menu.footNoteEnum = MNT_TOURVOYAGER;
s_tourGame.mainmenu.generic.type = MTYPE_BITMAP;
s_tourGame.mainmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_tourGame.mainmenu.generic.x = 99;
s_tourGame.mainmenu.generic.y = 401;
s_tourGame.mainmenu.generic.name = GRAPHIC_BUTTONRIGHT;
s_tourGame.mainmenu.generic.id = ID_MAINMENU;
s_tourGame.mainmenu.generic.callback = NewGame_MenuEvent;
s_tourGame.mainmenu.width = MENU_BUTTON_MED_WIDTH;
s_tourGame.mainmenu.height = MENU_BUTTON_MED_HEIGHT;
s_tourGame.mainmenu.color = CT_DKPURPLE1;
s_tourGame.mainmenu.color2 = CT_LTPURPLE1;
s_tourGame.mainmenu.textX = MENU_BUTTON_TEXT_X;
s_tourGame.mainmenu.textY = MENU_BUTTON_TEXT_Y;
s_tourGame.mainmenu.textEnum = MBT_MAINMENU;
s_tourGame.mainmenu.textcolor = CT_BLACK;
s_tourGame.mainmenu.textcolor2 = CT_WHITE;
s_tourGame.resume.generic.type = MTYPE_BITMAP;
if (ui.SG_ValidateForLoadSaveScreen("virtual"))
{
s_tourGame.resume.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
}
else
{
s_tourGame.resume.generic.flags = QMF_GRAYED;
}
s_tourGame.resume.generic.x = 99;
s_tourGame.resume.generic.y = 345;
s_tourGame.resume.generic.name = "menu/common/square.tga";
s_tourGame.resume.generic.id = ID_RESUMETOUR;
s_tourGame.resume.generic.callback = TourGame_MenuEvent;
s_tourGame.resume.width = MENU_BUTTON_MED_WIDTH;
s_tourGame.resume.height = MENU_BUTTON_MED_HEIGHT + 20;
s_tourGame.resume.color = CT_DKPURPLE1;
s_tourGame.resume.color2 = CT_LTPURPLE1;
s_tourGame.resume.textX = MENU_BUTTON_TEXT_X;
s_tourGame.resume.textY = MENU_BUTTON_TEXT_Y + 5;
s_tourGame.resume.textEnum = MBT_RESUMETOUR;
s_tourGame.resume.textcolor = CT_BLACK;
s_tourGame.resume.textcolor2 = CT_WHITE;
s_tourGame.start.generic.type = MTYPE_BITMAP;
s_tourGame.start.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_tourGame.start.generic.x = 482;
s_tourGame.start.generic.y = 345;
s_tourGame.start.generic.name = "menu/common/square.tga";
s_tourGame.start.generic.id = ID_STARTNEWGAME;
s_tourGame.start.generic.callback = TourGame_MenuEvent;
s_tourGame.start.width = MENU_BUTTON_MED_WIDTH;
s_tourGame.start.height = 79;
s_tourGame.start.color = CT_DKPURPLE1;
s_tourGame.start.color2 = CT_LTPURPLE1;
s_tourGame.start.textX = MENU_BUTTON_TEXT_X;
s_tourGame.start.textY = 56;
s_tourGame.start.textEnum = MBT_ENGAGE;
s_tourGame.start.textcolor = CT_BLACK;
s_tourGame.start.textcolor2 = CT_WHITE;
s_tourGame.male.generic.type = MTYPE_BITMAP;
s_tourGame.male.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_tourGame.male.generic.x = 338;
s_tourGame.male.generic.y = 370;
s_tourGame.male.generic.name = "menu/common/square.tga";
s_tourGame.male.generic.id = ID_MALE;
s_tourGame.male.generic.callback = TourGame_MenuEvent;
s_tourGame.male.width = MENU_BUTTON_MED_WIDTH;
s_tourGame.male.height = MENU_BUTTON_MED_HEIGHT;
s_tourGame.male.color = CT_DKPURPLE1;
s_tourGame.male.color2 = CT_LTPURPLE1;
s_tourGame.male.textX = MENU_BUTTON_TEXT_X;
s_tourGame.male.textY = MENU_BUTTON_TEXT_Y;
s_tourGame.male.textEnum = MBT_MALE;
s_tourGame.male.textcolor = CT_BLACK;
s_tourGame.male.textcolor2 = CT_WHITE;
s_tourGame.female.generic.type = MTYPE_BITMAP;
s_tourGame.female.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_tourGame.female.generic.x = 338;
s_tourGame.female.generic.y = 395;
s_tourGame.female.generic.name = "menu/common/square.tga";
s_tourGame.female.generic.id = ID_FEMALE;
s_tourGame.female.generic.callback = TourGame_MenuEvent;
s_tourGame.female.width = MENU_BUTTON_MED_WIDTH;
s_tourGame.female.height = MENU_BUTTON_MED_HEIGHT;
s_tourGame.female.color = CT_DKPURPLE1;
s_tourGame.female.color2 = CT_LTPURPLE1;
s_tourGame.female.textX = MENU_BUTTON_TEXT_X;
s_tourGame.female.textY = MENU_BUTTON_TEXT_Y;
s_tourGame.female.textEnum = MBT_FEMALE;
s_tourGame.female.textcolor = CT_BLACK;
s_tourGame.female.textcolor2 = CT_WHITE;
s_tourGame.line1_label.generic.type = MTYPE_BITMAP;
s_tourGame.line1_label.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_tourGame.line1_label.generic.x = TMG_TEXT_X;
s_tourGame.line1_label.generic.y = TMG_TEXT_Y;
s_tourGame.line1_label.generic.name = "menu/common/square2.tga";
s_tourGame.line1_label.generic.id = ID_TOUR_LINE1;
s_tourGame.line1_label.generic.callback = TourGame_MenuEvent;
s_tourGame.line1_label.width = UI_ProportionalStringWidth((const char *) menu_button_text[MBT_TOURMENU_TEXT1][0],UI_TINYFONT);
s_tourGame.line1_label.height = 8;
s_tourGame.line1_label.color = CT_DKPURPLE1;
s_tourGame.line1_label.color2 = CT_LTPURPLE1;
s_tourGame.line1_label.textX = 2;
s_tourGame.line1_label.textY = 1;
s_tourGame.line1_label.textEnum = MBT_TOURMENU_TEXT1;
s_tourGame.line1_label.textcolor = CT_LTGOLD1;
s_tourGame.line1_label.textcolor2 = CT_WHITE;
s_tourGame.line1_label.textStyle = UI_TINYFONT;
s_tourGame.line2_label.generic.type = MTYPE_BITMAP;
s_tourGame.line2_label.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_tourGame.line2_label.generic.x = TMG_TEXT_X;
s_tourGame.line2_label.generic.y = TMG_TEXT_Y+(TMG_TEXT_PAD);
s_tourGame.line2_label.generic.name = "menu/common/square2.tga";
s_tourGame.line2_label.generic.id = ID_TOUR_LINE2;
s_tourGame.line2_label.generic.callback = TourGame_MenuEvent;
s_tourGame.line2_label.width = UI_ProportionalStringWidth((const char *) menu_button_text[MBT_TOURMENU_TEXT2][0],UI_TINYFONT);
s_tourGame.line2_label.height = 8;
s_tourGame.line2_label.color = CT_DKPURPLE1;
s_tourGame.line2_label.color2 = CT_LTPURPLE1;
s_tourGame.line2_label.textX = 2;
s_tourGame.line2_label.textY = 1;
s_tourGame.line2_label.textEnum = MBT_TOURMENU_TEXT2;
s_tourGame.line2_label.textcolor = CT_DKGOLD1;
s_tourGame.line2_label.textcolor2 = CT_WHITE;
s_tourGame.line2_label.textStyle = UI_TINYFONT;
s_tourGame.line3_label.generic.type = MTYPE_BITMAP;
s_tourGame.line3_label.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_tourGame.line3_label.generic.x = TMG_TEXT_X;
s_tourGame.line3_label.generic.y = TMG_TEXT_Y+(TMG_TEXT_PAD*2);
s_tourGame.line3_label.generic.name = "menu/common/square2.tga";
s_tourGame.line3_label.generic.id = ID_TOUR_LINE3;
s_tourGame.line3_label.generic.callback = TourGame_MenuEvent;
s_tourGame.line3_label.width = UI_ProportionalStringWidth((const char *) menu_button_text[MBT_TOURMENU_TEXT3][0],UI_TINYFONT);
s_tourGame.line3_label.height = 8;
s_tourGame.line3_label.color = CT_DKPURPLE1;
s_tourGame.line3_label.color2 = CT_LTPURPLE1;
s_tourGame.line3_label.textX = 2;
s_tourGame.line3_label.textY = 1;
s_tourGame.line3_label.textEnum = MBT_TOURMENU_TEXT3;
s_tourGame.line3_label.textcolor = CT_DKGOLD1;
s_tourGame.line3_label.textcolor2 = CT_WHITE;
s_tourGame.line3_label.textStyle = UI_TINYFONT;
s_tourGame.line4_label.generic.type = MTYPE_BITMAP;
s_tourGame.line4_label.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_tourGame.line4_label.generic.x = TMG_TEXT_X;
s_tourGame.line4_label.generic.y = TMG_TEXT_Y+(TMG_TEXT_PAD*3);
s_tourGame.line4_label.generic.name = "menu/common/square2.tga";
s_tourGame.line4_label.generic.id = ID_TOUR_LINE4;
s_tourGame.line4_label.generic.callback = TourGame_MenuEvent;
s_tourGame.line4_label.width = UI_ProportionalStringWidth((const char *) menu_button_text[MBT_TOURMENU_TEXT4][0],UI_TINYFONT);
s_tourGame.line4_label.height = 8;
s_tourGame.line4_label.color = CT_DKPURPLE1;
s_tourGame.line4_label.color2 = CT_LTPURPLE1;
s_tourGame.line4_label.textX = 2;
s_tourGame.line4_label.textY = 1;
s_tourGame.line4_label.textEnum = MBT_TOURMENU_TEXT4;
s_tourGame.line4_label.textcolor = CT_DKGOLD1;
s_tourGame.line4_label.textcolor2 = CT_WHITE;
s_tourGame.line4_label.textStyle = UI_TINYFONT;
s_tourGame.line5_label.generic.type = MTYPE_BITMAP;
s_tourGame.line5_label.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_tourGame.line5_label.generic.x = TMG_TEXT_X;
s_tourGame.line5_label.generic.y = TMG_TEXT_Y+(TMG_TEXT_PAD*4);
s_tourGame.line5_label.generic.name = "menu/common/square2.tga";
s_tourGame.line5_label.generic.id = ID_TOUR_LINE5;
s_tourGame.line5_label.generic.callback = TourGame_MenuEvent;
s_tourGame.line5_label.width = UI_ProportionalStringWidth((const char *) menu_button_text[MBT_TOURMENU_TEXT6][0],UI_TINYFONT);
s_tourGame.line5_label.height = 8;
s_tourGame.line5_label.color = CT_DKPURPLE1;
s_tourGame.line5_label.color2 = CT_LTPURPLE1;
s_tourGame.line5_label.textX = 2;
s_tourGame.line5_label.textY = 1;
s_tourGame.line5_label.textEnum = MBT_TOURMENU_TEXT6;
s_tourGame.line5_label.textcolor = CT_DKGOLD1;
s_tourGame.line5_label.textcolor2 = CT_WHITE;
s_tourGame.line5_label.textStyle = UI_TINYFONT;
s_tourGame.line6_label.generic.type = MTYPE_BITMAP;
s_tourGame.line6_label.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_tourGame.line6_label.generic.x = TMG_TEXT_X;
s_tourGame.line6_label.generic.y = TMG_TEXT_Y+(TMG_TEXT_PAD*5);
s_tourGame.line6_label.generic.name = "menu/common/square2.tga";
s_tourGame.line6_label.generic.id = ID_TOUR_LINE6;
s_tourGame.line6_label.generic.callback = TourGame_MenuEvent;
s_tourGame.line6_label.width = UI_ProportionalStringWidth((const char *) menu_button_text[MBT_TOURMENU_TEXT5][0],UI_TINYFONT);
s_tourGame.line6_label.height = 8;
s_tourGame.line6_label.color = CT_DKPURPLE1;
s_tourGame.line6_label.color2 = CT_LTPURPLE1;
s_tourGame.line6_label.textX = 2;
s_tourGame.line6_label.textY = 1;
s_tourGame.line6_label.textEnum = MBT_TOURMENU_TEXT5;
s_tourGame.line6_label.textcolor = CT_DKGOLD1;
s_tourGame.line6_label.textcolor2 = CT_WHITE;
s_tourGame.line6_label.textStyle = UI_TINYFONT;
Menu_AddItem( &s_tourGame.menu, ( void * )&s_tourGame.mainmenu);
Menu_AddItem( &s_tourGame.menu, ( void * )&s_tourGame.male);
Menu_AddItem( &s_tourGame.menu, ( void * )&s_tourGame.female);
Menu_AddItem( &s_tourGame.menu, ( void * )&s_tourGame.start);
Menu_AddItem( &s_tourGame.menu, ( void * )&s_tourGame.resume);
Menu_AddItem( &s_tourGame.menu, ( void * )&s_tourGame.line1_label);
Menu_AddItem( &s_tourGame.menu, ( void * )&s_tourGame.line2_label);
Menu_AddItem( &s_tourGame.menu, ( void * )&s_tourGame.line3_label);
Menu_AddItem( &s_tourGame.menu, ( void * )&s_tourGame.line4_label);
Menu_AddItem( &s_tourGame.menu, ( void * )&s_tourGame.line5_label);
Menu_AddItem( &s_tourGame.menu, ( void * )&s_tourGame.line6_label);
s_tourGame.male.textcolor = CT_WHITE;
s_tourGame.female.textcolor = CT_BLACK;
s_tourGame.male.generic.flags |= QMF_BLINK;
PlayerConfig_SetMale (qtrue);
// Precache all menu graphics in array
UI_PrecacheMenuGraphics(tourmenu_graphics,TMG_MAX);
tourmenu_graphics[TMG_TIMER].timer = uis.realtime + TMG_TIMER_INC;
tourmenu_graphics[TMG_CURRENT_TEXT].target = 0;
tourmenu_graphics[TMG_GRAPHIC1 + tourmenu_graphics[TMG_CURRENT_TEXT].target].type = MG_GRAPHIC;
tourmenu_graphics[TMG_GRAPHIC2].type = MG_NONE;
tourmenu_graphics[TMG_GRAPHIC3].type = MG_NONE;
tourmenu_graphics[TMG_GRAPHIC4].type = MG_NONE;
tourmenu_graphics[TMG_GRAPHIC5].type = MG_NONE;
tourmenu_graphics[TMG_GRAPHIC6].type = MG_NONE;
tourmenu_graphics[TMG_GRAPHIC7].type = MG_NONE;
tourmenu_graphics[TMG_GRAPHIC8].type = MG_NONE;
tourmenu_graphics[TMG_GRAPHIC9].type = MG_NONE;
tourmenu_graphics[TMG_LOCATION_DOT2].type = MG_NONE;
tourmenu_graphics[TMG_LOCATION_DOT3].type = MG_NONE;
tourmenu_graphics[TMG_LOCATION_DOT4].type = MG_NONE;
tourmenu_graphics[TMG_LOCATION_DOT5].type = MG_NONE;
}
/*
===============
UI_LeaveGameMenu
===============
*/
void UI_TourGameMenu( void)
{
TourGameMenu_Init();
UI_PushMenu( &s_tourGame.menu);
}