rpgxef/code/ui/ui_menu.c

3621 lines
109 KiB
C
Raw Normal View History

// Copyright (C) 1999-2000 Id Software, Inc.
//
/*
=======================================================================
MAIN MENU
=======================================================================
*/
#include "ui_local.h"
extern void UI_SetupWeaponsMenu( void );
void UI_QuitMenu(void);
static void QuitMenuInterrupt(int labelId);
//static void QuitMenu_ChangeAreaFocus(int newSystem);
static void UI_HolomatchIn_Menu(void);
#define ID_TEXTLANGUAGE 102
#define ID_VOICELANGUAGE 103
#define ID_KEYBOARDLANGUAGE 104
#define UI_NUM_WEAPONS 9
static const char *s_keyboardlanguage_Names[] =
{
"AMERICAN",
"DEUTSCH",
"FRANCAIS",
"ESPANOL",
"ITALIANO",
0
};
static struct
{
menuframework_s menu;
menulist_s textlanguage;
menulist_s voicelanguage;
menulist_s keyboardlanguage;
menuslider_s gamma;
qhandle_t test;
menuaction_s apply;
} s_initialsetup;
#define PIC_PHASER_STRIP "menu/voyager/phaser_strip.tga"
#define PIC_PHOTON_LAUNCHER "menu/voyager/photon_launch.tga"
#define PIC_BOTTOM_STRIP "menu/voyager/bottom_strip.tga"
#define PIC_MID_HULL "menu/voyager/mid_hull.tga"
#define PIC_WARPNAC "menu/voyager/warpnac.tga"
#define PIC_BUSSARD "menu/voyager/bussard.tga"
#define PIC_RCS "menu/voyager/rcs.tga"
#define PIC_BRIDGE "menu/voyager/bridge.tga"
#define PIC_VOYAGER "menu/special/voy_1.tga"
#define ID_MULTIPLAYER 10
#define ID_SETUP 11
#define ID_DEMOS 12
#define ID_CINEMATICS 13
#define ID_MODS 14
#define ID_CREDITS 15
#define ID_QUIT 16
#define ID_FAV0 100
#define ID_FAV1 101
#define ID_FAV2 102
#define ID_FAV3 103
#define ID_FAV4 104
#define ID_FAV5 105
#define ID_FAV6 106
#define ID_FAV7 107
#define ID_FAV8 108
#define ID_PLAYER_SETTINGS 17
#define ID_PLAYER_MODEL 18
#define ID_PLAYER_REGION 19
#define ID_LIST_UP 20
#define ID_LIST_DOWN 21
#define ID_REFRESH 22
#define ID_CONNECT 23
#define PIC_ARROW_UP "menu/common/arrow_up_16.tga"
#define PIC_ARROW_DOWN "menu/common/arrow_dn_16.tga"
/*#define ID_FAVLIST 19
#define ID_FAVREFRESH 20
#define ID_FAVSTOP 21
#define ID_FAVGO 22*/
/*#define ID_WEAPON1 215
#define ID_WEAPON2 216
#define ID_WEAPON3 217
#define ID_WEAPON4 218
#define ID_WEAPON5 219
#define ID_WEAPON6 220
#define ID_WEAPON7 221
#define ID_WEAPON8 222
#define ID_WEAPON9 223
#define ID_WEAPON10 224*/
// Quit Menu
#define ID_PHASER_LABEL 301
#define ID_TORPEDO_LABEL 302
#define ID_VENTRAL_LABEL 303
#define ID_MIDHULL_LABEL 304
#define ID_BUSSARD_LABEL 305
#define ID_NACELLES_LABEL 306
#define ID_THRUSTERS_LABEL 307
#define ID_Q_VOYAGER_LABEL 308
#define ID_BRIDGE_LABEL 309
#define WEAPON_WAIT 10000
#define MAIN_LOGO_MODEL "models/mapobjects/rpg-x/logo.MD3" //TiM : Considering how big this is on-screen here, i think we can spare the processing power to render the high-res one :D
// END RPG-X
//ui_servers2.c struct data
extern char* gamenames[];
#define MAX_PINGREQUESTS 16 //max number of servers the engine can ping in one go - hard coded I think, altho TA's is 32
#define MAX_FAVBUTTONS 8
#define MAX_ADDRESSLENGTH 64
#define MAX_HOSTNAMELENGTH 64
#define MAX_MAPNAMELENGTH 30
#define MAX_LISTBOXWIDTH 67
typedef struct {
char adrstr[MAX_ADDRESSLENGTH];
int start;
} pinglist_t;
typedef struct servernode_s {
char adrstr[MAX_ADDRESSLENGTH];
char hostname[MAX_HOSTNAMELENGTH];
char mapname[MAX_MAPNAMELENGTH];
int numclients;
int maxclients;
int pingtime;
int gametype;
char gamename[12];
int nettype;
int minPing;
int maxPing;
qboolean isPure;
qboolean isExpansion;
} servernode_t;
typedef struct {
//char buff[MAX_LISTBOXWIDTH];
servernode_t servernode;
} table_t;
typedef struct { //Struct to hold all the network relevant parameters
qboolean refreshservers;
int currentping;
int nextpingtime;
int numservers;
int maxservers;
int refreshtime;
pinglist_t pinglist[MAX_PINGREQUESTS];
table_t table[MAX_FAVORITESERVERS];
char favBuffer[MAX_FAVORITESERVERS][MAX_ADDRESSLENGTH];
qboolean showNoServersAlert;
} network_t;
//--
typedef struct
{
menuframework_s menu;
qboolean initialized;
menubitmap_s demo;
menubitmap_s multiplayer;
menubitmap_s quit;
menubitmap_s setup;
menubitmap_s mods;
menubitmap_s mission;
menubitmap_s credits;
menubitmap_s player;
menubitmap_s playerSettings;
menubitmap_s playerModel;
//server buttons
menubitmap_s upArrow;
menubitmap_s dnArrow;
menubitmap_s refresh;
menubitmap_s connect;
/* menubitmap_s favRefresh;
menubitmap_s favStop;
menubitmap_s favGo; */
/* menubitmap_s weapon1;
menubitmap_s weapon2;
menubitmap_s weapon3;
menubitmap_s weapon4;
menubitmap_s weapon5;
menubitmap_s weapon6;
menubitmap_s weapon7;
menubitmap_s weapon8;
menubitmap_s weapon9;*/
/*sfxHandle_t weaponnamesnd[UI_NUM_WEAPONS];*/
int timer;
int currentWeapon;
playerInfo_t playerinfo;
vec3_t playerViewangles;
vec3_t playerMoveangles;
int playerLegs;
int playerTorso;
int playerWeapon;
qboolean playerChat;
//qhandel_t rpgxlogo; //RPG-X HACK
//RPG-X | Phenix | 18/11/2004 | Adding RPG-X logo
qhandle_t logoModel;
int startTime;
qhandle_t graphic_12_8_LU;
qhandle_t graphic_12_8_LL;
qhandle_t graphic_12_8_RU;
qhandle_t graphic_12_8_RL;
qhandle_t graphic_16_12_LU;
qhandle_t graphic_16_18_LL;
qhandle_t soundGrid;
qhandle_t soundWaveform;
qhandle_t activateSound;
network_t networkParms; //struct to hold all the data we need when pinging for online fav servers
int favOffset; //int offset when scrolling the list
int selectedFav; //currently selected server ( as its index in the array )
menubitmap_s favMenu[MAX_FAVBUTTONS]; //buttons for slecting servers
char* favList[MAX_FAVBUTTONS]; //strings to link to the buffers
} mainmenu_t;
static mainmenu_t s_main;
static menubitmap_s s_main_playermdl; //RPG-X HACK
//QVM - HACK!
/*const char* prank_items_formal2[] =
{
"Crewman",
"Cadet 4th Class",
"Cadet 3rd Class",
"Cadet 2nd Class",
"Cadet 1st Class",
"Ensign",
"Lieutenant J.G",
"Lieutenant",
"Lt. Commander",
"Commander",
"Captain",
"Commodore",
"Rear Admiral",
"Vice Admiral",
"Admiral",
"Fleet Admiral",
0
};
const char* prank_items_actual2[] =
{
"crewman",
"cadet1",
"cadet2",
"cadet3",
"cadet4",
"ensign",
"ltjg",
"lt",
"ltcmdr",
"cmdr",
"capt",
"cmmdr",
"adm2",
"adm3",
"adm4",
"adm5",
0
};
static void* g_weapons[] =
{
&s_main.weapon1,
&s_main.weapon2,
&s_main.weapon3,
&s_main.weapon4,
&s_main.weapon5,
&s_main.weapon6,
&s_main.weapon7,
&s_main.weapon8,
&s_main.weapon9,
NULL,
};
static const char *weaponnamefiles [UI_NUM_WEAPONS] =
{
"sound/voice/computer/misc/phaser.wav",
"sound/voice/computer/misc/comprifle.wav",
"sound/voice/computer/misc/imod.wav",
"sound/voice/computer/misc/scavrifle.wav",
"sound/voice/computer/misc/stasisweap.wav",
"sound/voice/computer/misc/cgl.wav",
"sound/voice/computer/misc/tpd.wav",
"sound/voice/computer/misc/pptl.wav",
"sound/voice/computer/misc/arcwelder.wav"
};*/
// Data for LCARS out Menu
static struct
{
menuframework_s menu;
qhandle_t logo;
qhandle_t halfround;
sfxHandle_t logoutsnd;
} s_leaving_menu;
#define ID_NO 109
#define ID_YES 110
#define ID_MAINMENU 121
typedef struct
{
menuframework_s menu;
qhandle_t swoop1;
qhandle_t swoop2;
qhandle_t corner_ur;
menubitmap_s mainmenu;
menubitmap_s no;
menubitmap_s yes;
qhandle_t quitBanner;
/*menutext_s voyager_label;
menubitmap_s voyager_pic;
menutext_s thrusters_label;
menubitmap_s thrusters_pic;
menutext_s nacelles_label;
menubitmap_s nacelles_pic;
menutext_s bussard_label;
menubitmap_s bussard_pic;
menutext_s midhull_label;
menubitmap_s midhull_pic;
menutext_s ventral_label;
menubitmap_s ventral_pic;
menutext_s torpedo_label;
menubitmap_s torpedo_pic;
menutext_s phaser_label;
menubitmap_s phaser_pic;
menutext_s bridge_label;
menubitmap_s bridge_pic;*/
sfxHandle_t pingsound;
} quitmenu_t;
static quitmenu_t s_quit;
#define SYSTEM_MAXDESC 5
char systemDesc[SYSTEM_MAXDESC][512];
typedef enum
{
QMG_NUMBERS,
QMG_COL1_NUM1,
QMG_COL1_NUM2,
QMG_COL1_NUM3,
QMG_COL1_NUM4,
QMG_COL1_NUM5,
QMG_COL2_NUM1,
QMG_COL2_NUM2,
QMG_COL2_NUM3,
QMG_COL2_NUM4,
QMG_COL2_NUM5,
QMG_COL3_NUM1,
QMG_COL3_NUM2,
QMG_COL3_NUM3,
QMG_COL3_NUM4,
QMG_COL3_NUM5,
QMG_COL4_NUM1,
QMG_COL4_NUM2,
QMG_COL4_NUM3,
QMG_COL4_NUM4,
QMG_COL4_NUM5,
QMG_COL5_NUM1,
QMG_COL5_NUM2,
QMG_COL5_NUM3,
QMG_COL5_NUM4,
QMG_COL5_NUM5,
QMG_COL6_NUM1,
QMG_COL6_NUM2,
QMG_COL6_NUM3,
QMG_COL6_NUM4,
QMG_COL6_NUM5,
QMG_ACTIVE_SYSTEM,
QMG_DESC_START,
QMG_BRIDGE_DESC1,
QMG_PHASER_STRIP1_DESC1,
QMG_TORPEDOS_DESC1,
QMG_VENTRAL_DESC1,
QMG_MIDHULL_DESC1,
QMG_BUSSARD_DESC1,
QMG_NACELLES_DESC1,
QMG_THRUSTERS_DESC1,
QMG_VOYAGER_DESC1,
QMG_DESC_END,
QMG_LABEL_START,
QMG_BRIDGE_LABEL,
QMG_PHASER_LABEL,
QMG_TORPEDO_LABEL,
QMG_VENTRAL_LABEL,
QMG_MIDHULL_LABEL,
QMG_BUSSARD_LABEL,
QMG_NACELLES_LABEL,
QMG_THRUSTERS_LABEL,
QMG_VOYAGER_LABEL,
QMG_LABEL_END,
QMG_SWOOP_START,
QMG_BRIDGE_SWOOP,
QMG_PHASER_STRIP1_SWOOP,
QMG_TORPEDO_SWOOP,
QMG_VENTRAL_SWOOP,
QMG_MIDHULL_SWOOP,
QMG_BUSSARD_SWOOP,
QMG_NACELLES_SWOOP,
QMG_THRUSTERS_SWOOP,
QMG_SWOOP_END,
QMG_BOTTOM_BLIP,
QMG_BOTTOM_BLIP2,
QMG_MAX
} quitmenu_graphics_t;
menugraphics_s quitmenu_graphics[QMG_MAX] =
{
// type timer x y width height file/text graphic, min max target inc style color
{ MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, NULL }, // Q{ MG_NUMBERS
{ MG_NUMBER, 0.0, 368, 54, 16, 10, NULL, 0, 0, 0, 9, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL1_NUM1
{ MG_NUMBER, 0.0, 368, 68, 16, 10, NULL, 0, 0, 0, 9, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL1_NUM2
{ MG_NUMBER, 0.0, 368, 82, 16, 10, NULL, 0, 0, 0, 9, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL1_NUM3
{ MG_NUMBER, 0.0, 368, 96, 16, 10, NULL, 0, 0, 0, 9, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL1_NUM4
{ MG_NUMBER, 0.0, 368, 110, 16, 10, NULL, 0, 0, 0, 9, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL1_NUM5
{ MG_NUMBER, 0.0, 423, 54, 16, 10, NULL, 0, 0, 0, 6, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL2_NUM1
{ MG_NUMBER, 0.0, 423, 68, 16, 10, NULL, 0, 0, 0, 6, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL2_NUM2
{ MG_NUMBER, 0.0, 423, 82, 16, 10, NULL, 0, 0, 0, 6, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL2_NUM3
{ MG_NUMBER, 0.0, 423, 96, 16, 10, NULL, 0, 0, 0, 6, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL2_NUM4
{ MG_NUMBER, 0.0, 423, 110, 16, 10, NULL, 0, 0, 0, 6, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL2_NUM5
{ MG_NUMBER, 0.0, 463, 54, 16, 10, NULL, 0, 0, 0, 9, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL3_NUM1
{ MG_NUMBER, 0.0, 463, 68, 16, 10, NULL, 0, 0, 0, 9, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL3_NUM2
{ MG_NUMBER, 0.0, 463, 82, 16, 10, NULL, 0, 0, 0, 9, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL3_NUM3
{ MG_NUMBER, 0.0, 463, 96, 16, 10, NULL, 0, 0, 0, 9, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL3_NUM4
{ MG_NUMBER, 0.0, 463, 110, 16, 10, NULL, 0, 0, 0, 9, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL3_NUM5
{ MG_NUMBER, 0.0, 526, 54, 16, 10, NULL, 0, 0, 0, 9, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL4_NUM1
{ MG_NUMBER, 0.0, 526, 68, 16, 10, NULL, 0, 0, 0, 9, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL4_NUM2
{ MG_NUMBER, 0.0, 526, 82, 16, 10, NULL, 0, 0, 0, 9, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL4_NUM3
{ MG_NUMBER, 0.0, 526, 96, 16, 10, NULL, 0, 0, 0, 9, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL4_NUM4
{ MG_NUMBER, 0.0, 526, 110, 16, 10, NULL, 0, 0, 0, 9, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL4_NUM5
{ MG_NUMBER, 0.0, 581, 54, 16, 10, NULL, 0, 0, 0, 2, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL5_NUM1
{ MG_NUMBER, 0.0, 581, 68, 16, 10, NULL, 0, 0, 0, 2, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL5_NUM2
{ MG_NUMBER, 0.0, 581, 82, 16, 10, NULL, 0, 0, 0, 2, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL5_NUM3
{ MG_NUMBER, 0.0, 581, 96, 16, 10, NULL, 0, 0, 0, 2, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL5_NUM4
{ MG_NUMBER, 0.0, 581, 110, 16, 10, NULL, 0, 0, 0, 2, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL5_NUM5
{ MG_NUMBER, 0.0, 601, 54, 16, 10, NULL, 0, 0, 0, 2, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL6_NUM1
{ MG_NUMBER, 0.0, 601, 68, 16, 10, NULL, 0, 0, 0, 2, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL6_NUM2
{ MG_NUMBER, 0.0, 601, 82, 16, 10, NULL, 0, 0, 0, 2, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL6_NUM3
{ MG_NUMBER, 0.0, 601, 96, 16, 10, NULL, 0, 0, 0, 2, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL6_NUM4
{ MG_NUMBER, 0.0, 601, 110, 16, 10, NULL, 0, 0, 0, 2, 0, 0, UI_TINYFONT, CT_DKPURPLE2, NULL }, // Q{ MG_COL6_NUM5
// type timer x y width height file/text graphic, min max target inc style color
{ MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, NULL }, // Q{ MG_ACTIVE_SYSTEM
// type timer x y width height file/text graphic, min max target inc style color
{ MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, NULL }, // Q{ MG_DESC_START
{ MG_STRING, 0.0, 385, 378, 0, 0, NULL, MNT_BRIDGE_DESC1, 0, 0, 0, 0, 0, UI_TINYFONT, CT_LTGOLD1, NULL }, // Q{ MG_BRIDGE_DESC1
{ MG_STRING, 0.0, 385, 378, 0, 0, NULL, MNT_PHASER_STRIP1_DESC1, 0, 0, 0, 0, 0, UI_TINYFONT, CT_LTGOLD1, NULL }, // Q{ MG_PHASER_STRIP1_DESC1
{ MG_STRING, 0.0, 385, 378, 0, 0, NULL, MNT_TORPEDOS_DESC1, 0, 0, 0, 0, 0, UI_TINYFONT, CT_LTGOLD1, NULL }, // Q{ MG_TORPEDOS_DESC1
{ MG_STRING, 0.0, 385, 378, 0, 0, NULL, MNT_VENTRAL_DESC1, 0, 0, 0, 0, 0, UI_TINYFONT, CT_LTGOLD1, NULL }, // Q{ MG_VENTRAL_DESC1
{ MG_STRING, 0.0, 385, 378, 0, 0, NULL, MNT_MIDHULL_DESC1, 0, 0, 0, 0, 0, UI_TINYFONT, CT_LTGOLD1, NULL }, // Q{ MG_MIDHULL_DESC1
{ MG_STRING, 0.0, 385, 378, 0, 0, NULL, MNT_BUSSARD_DESC1, 0, 0, 0, 0, 0, UI_TINYFONT, CT_LTGOLD1, NULL }, // Q{ MG_BUSSARD_DESC1
{ MG_STRING, 0.0, 385, 378, 0, 0, NULL, MNT_NACELLES_DESC1, 0, 0, 0, 0, 0, UI_TINYFONT, CT_LTGOLD1, NULL }, // Q{ MG_NACELLES_DESC1
{ MG_STRING, 0.0, 385, 378, 0, 0, NULL, MNT_THRUSTERS_DESC1, 0, 0, 0, 0, 0, UI_TINYFONT, CT_LTGOLD1, NULL }, // Q{ MG_THRUSTERS_DESC1
{ MG_STRING, 0.0, 385, 378, 0, 0, NULL, MNT_VOYAGER_DESC1, 0, 0, 0, 0, 0, UI_TINYFONT, CT_LTGOLD1, NULL }, // Q{ MG_VOYAGER_DESC1
{ MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, NULL }, // Q{ MG_DESC_END
// type timer x y width height file/text graphic, min (desc) max target (swoop) inc style color
{ MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, NULL }, // Q{ MG_LABEL_START
// { MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, Q{ MG_BRIDGE_DESC1, 0, Q{ MG_BRIDGE_SWOOP, 0, 0, CT_DKBROWN1, (void *) &s_quit.bridge_pic }, // Q{ MG_BRIDGE_LABEL
// { MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, Q{ MG_PHASER_STRIP1_DESC1, 0, Q{ MG_PHASER_STRIP1_SWOOP, 0, 0, CT_DKBROWN1, (void *) &s_quit.phaser_pic }, // Q{ MG_PHASER_LABEL
// { MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, Q{ MG_TORPEDOS_DESC1, 0, Q{ MG_TORPEDO_SWOOP, 0, 0, CT_DKBROWN1, (void *) &s_quit.torpedo_pic }, // Q{ MG_TORPEDOS_LABEL
// { MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, Q{ MG_VENTRAL_DESC1, 0, Q{ MG_VENTRAL_SWOOP, 0, 0, CT_DKBROWN1, (void *) &s_quit.ventral_pic }, // Q{ MG_VENTRAL_LABEL
// { MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, Q{ MG_MIDHULL_DESC1, 0, Q{ MG_MIDHULL_SWOOP, 0, 0, CT_DKBROWN1, (void *) &s_quit.midhull_pic }, // Q{ MG_MIDHULL_LABEL
// { MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, Q{ MG_BUSSARD_DESC1, 0, Q{ MG_BUSSARD_SWOOP, 0, 0, CT_DKBROWN1, (void *) &s_quit.bussard_pic }, // Q{ MG_BUSSARD_LABEL
// { MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, Q{ MG_NACELLES_DESC1, 0, Q{ MG_NACELLES_SWOOP, 0, 0, CT_DKBROWN1, (void *) &s_quit.nacelles_pic }, // Q{ MG_NACELLES_LABEL
// { MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, Q{ MG_THRUSTERS_DESC1, 0, Q{ MG_THRUSTERS_SWOOP, 0, 0, CT_DKBROWN1, (void *) &s_quit.thrusters_pic }, // Q{ MG_THRUSTERS_LABEL
// { MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, Q{ MG_VOYAGER_DESC1, 0, 0, 0, 0, CT_DKBROWN1, (void *) &s_quit.voyager_pic }, // Q{ MG_VOYAGER_LABEL
{ MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, NULL }, // Q{ MG_LABEL_END
// { MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, NULL }, // Q{ MG_SWOOP_START
// { MG_GRAPHIC, 0.0, 156, 198, 93, 1, "menu/common/square.tga", 0, 0, 0, 0, Q{ MG_BRIDGE_DESC1, 1, 0, CT_WHITE, NULL }, // Q{ MG_BRIDGE_SWOOP
// { MG_GRAPHIC, 0.0, 155, 229, 16, 64, "menu/voyager/swoop1.tga", 0, 0, 0, 0, Q{ MG_PHASER_STRIP1_DESC1, 2, 0, CT_WHITE, NULL }, // Q{ MG_PHASER_STRIP1_SWOOP
// { MG_GRAPHIC, 0.0, 252, 272, 32, 32, "menu/voyager/swoop2.tga", 0, 0, 0, 0, Q{ MG_TORPEDOS_DESC1, 1, 0, CT_WHITE, NULL }, // Q{ MG_TORPEDOS_SWOOP
// { MG_GRAPHIC, 0.0, 318, 310, 32, 32, "menu/voyager/swoop3.tga", 0, 0, 0, 0, Q{ MG_VENTRAL_DESC1, 1, 0, CT_WHITE, NULL }, // Q{ MG_VENTRAL_SWOOP
// { MG_GRAPHIC, 0.0, 366, 247, 16, 128, "menu/voyager/swoop4.tga", 0, 0, 0, 0, Q{ MG_MIDHULL_DESC1, 1, 0, CT_WHITE, NULL }, // Q{ MG_MIDHULL_SWOOP
// { MG_GRAPHIC, 0.0, 457, 281, 64, 64, "menu/voyager/swoop5.tga", 0, 0, 0, 0, Q{ MG_BUSSARD_DESC1, 3, 0, CT_WHITE, NULL }, // Q{ MG_BUSSARD_SWOOP
// { MG_GRAPHIC, 0.0, 563, 181, 64, 128, "menu/voyager/swoop6.tga", 0, 0, 0, 0, Q{ MG_NACELLES_DESC1, 2, 0, CT_WHITE, NULL }, // Q{ MG_NACELLES_SWOOP
// { MG_GRAPHIC, 0.0, 288, 183, 64, 128, "menu/voyager/swoop7.tga", 0, 0, 0, 0, Q{ MG_THRUSTERS_DESC1, 1, 0, CT_WHITE, NULL }, // Q{ MG_THRUSTERS_SWOOP
// { MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, NULL }, // Q{ MG_SWOOP_END
// type timer x y width height file/text graphic, min (desc) max target (swoop) inc style color
// { MG_GRAPHIC, 0.0, 0, 353, 8, 8, "menu/common/square.tga", 0, 0, 77, 550,0, 12, UI_TINYFONT, CT_LTPURPLE1, NULL }, // Q{ MG_BOTTOM_BLIP
// { MG_GRAPHIC, 0.0, 0, 167, 8, 8, "menu/common/square.tga", 0, 0, 77, 550,0, 12, UI_TINYFONT, CT_LTPURPLE1, NULL }, // Q{ MG_BOTTOM_BLIP2
};
/*
===================
RPG-X
Phenix
1/6/2004
===================
*/
typedef enum
{
AMG_MIDLEFT,
AMG_UPPERLEFT,
AMG_LOWERLEFT,
AMG_UPPERCORNER,
AMG_LOWERCORNER,
AMG_UPPERTOP1ST,
AMG_LOWERTOP1ST,
AMG_UPPERTOP2ND,
AMG_LOWERTOP2ND,
AMG_UPPERSWOOP,
AMG_LOWERSWOOP,
AMG_TOPRIGHT,
AMG_BOTTOMRIGHT,
AMG_PLAYERBKGRND,
AMG_MAX
} attackmenu_graphics1_t;
menugraphics_s attackmenu_graphics1[AMG_MAX] =
{
//X - 58
// type timer x y width height file/text graphic, min max target inc style color
{ MG_GRAPHIC, 0.0, 100, 280, 4, 32, "menu/common/square.tga", 0, 0, 0, 0, 0, 0, 0, CT_VDKPURPLE1, NULL }, // AMG_MIDLEFT
{ MG_GRAPHIC, 0.0, 100, 180, 8, 97, "menu/common/square.tga", 0, 0, 0, 0, 0, 0, 0, CT_VDKPURPLE1, NULL }, // AMG_UPPERLEFT
{ MG_GRAPHIC, 0.0, 100, 315, 8, 100, "menu/common/square.tga", 0, 0, 0, 0, 0, 0, 0, CT_VDKPURPLE1, NULL }, // AMG_LOWERLEFT
{ MG_GRAPHIC, 0.0, 100, 164, 16, 16, "menu/common/corner_lu.tga",0, 0, 0, 0, 0, 0, 0, CT_VDKPURPLE1, NULL }, // AMG_UPPERCORNER
{ MG_GRAPHIC, 0.0, 100, 406, 32, 32, "menu/common/newswoosh.tga",0, 0, 0, 0, 0, 0, 0, CT_VDKPURPLE1, NULL }, // AMG_LOWERCORNER
{ MG_GRAPHIC, 0.0, 119, 164, 338, 8, "menu/common/square.tga", 0, 0, 0, 0, 0, 0, 0, CT_VDKPURPLE1, NULL }, // AMG_UPPERTOP1ST
{ MG_GRAPHIC, 0.0, 117, 410, 340, 18, "menu/common/square.tga", 0, 0, 0, 0, 0, 0, 0, CT_VDKPURPLE1, NULL }, // AMG_LOWERTOP1ST
{ MG_GRAPHIC, 0.0, 457, 164, 34, 8, "menu/common/square.tga", 0, 0, 0, 0, 0, 0, 0, CT_VDKPURPLE1, NULL }, // AMG_UPPERTOP2ND
{ MG_GRAPHIC, 0.0, 457, 410, 34, 18, "menu/common/square.tga", 0, 0, 0, 0, 0, 0, 0, CT_VDKPURPLE1, NULL }, // AMG_LOWERTOP2ND
{ MG_GRAPHIC, 0.0, 494, 164, 128, 128, "menu/common/swoosh_top.tga",0, 0, 0, 0, 0, 0, 0, CT_VDKPURPLE1, NULL }, // AMG_UPPERSWOOP
{ MG_GRAPHIC, 0.0, 483, 403, 128, 32, "menu/common/newswoosh_long.tga",0, 0, 0, 0, 0, 0, 0, CT_VDKPURPLE1, NULL }, // AMG_LOWERSWOOP
{ MG_GRAPHIC, 0.0, 501, 189, 110, 17, "menu/common/square.tga", 0, 0, 0, 0, 0, 0, 0, CT_VDKPURPLE1, NULL }, // AMG_TOPRIGHT
{ MG_GRAPHIC, 0.0, 501, 383, 110, 17, "menu/common/square.tga", 0, 0, 0, 0, 0, 0, 0, CT_VDKPURPLE1, NULL }, // AMG_BOTTOMRIGHT
{ MG_GRAPHIC, 0.0, 501, 206, 110, 177, "menu/common/square.tga", 0, 0, 0, 0, 0, 0, 0, CT_VDKPURPLE1, NULL }, // AMG_PLAYERBKGRND
};
/*
===================
END MOD
===================
*/
static float mm_buttons[6][2] =
{
{129,62},
{129,86},
{129,109},
{305,62},
{305,86},
{305,109}
};
static float federationTimer;
// Data for Welcome In Menu
static struct
{
menuframework_s menu;
sfxHandle_t inSound;
qhandle_t logo;
qhandle_t halfround;
} s_HolomatchInmenu;
/*
=================
InitialSetup_Event
=================
*/
static void InitialSetup_Event( void* ptr, int notification )
{
if (notification != QM_ACTIVATED)
{
return;
}
switch (((menucommon_s*)ptr)->id)
{
case ID_TEXTLANGUAGE:
trap_Cvar_Set( "g_language", menu_normal_text[s_textlanguage_Names[s_initialsetup.textlanguage.curvalue]] );
UI_LoadButtonText();
UI_LoadMenuText();
break;
case ID_VOICELANGUAGE:
trap_Cvar_Set( "s_language", menu_normal_text[s_voicelanguage_Names[s_initialsetup.voicelanguage.curvalue]] );
break;
case ID_KEYBOARDLANGUAGE:
trap_Cvar_Set( "k_language", s_keyboardlanguage_Names[s_initialsetup.keyboardlanguage.curvalue] );
break;
}
}
/*
=================
InitialSetupApplyChanges -
=================
*/
static void InitialSetupApplyChanges( void *unused, int notification )
{
if (notification != QM_ACTIVATED)
{
return;
}
if (!uis.glconfig.deviceSupportsGamma)
{
trap_Cmd_ExecuteText( EXEC_APPEND, "vid_restart\n" );
}
trap_Cvar_Set("ui_initialsetup", "1"); // so this won't come up again
UI_MainMenu();
}
/*
=================
M_InitialSetupMenu_Key
=================
*/
static sfxHandle_t M_InitialSetupMenu_Key (int key)
{
if (key == K_ESCAPE)
{
return(0);
}
return ( Menu_DefaultKey( &s_initialsetup.menu, key ) );
}
/*
=================
M_InitialSetupMenu_Graphics
=================
*/
static void M_InitialSetupMenu_Graphics (void)
{
int y;
UI_MenuFrame2(&s_initialsetup.menu);
trap_R_SetColor( colorTable[CT_LTBROWN1]);
UI_DrawHandlePic(30,203, 47, 186, uis.whiteShader); // Middle left line
y = 97;
if (uis.glconfig.deviceSupportsGamma)
{
trap_R_SetColor( colorTable[CT_DKGREY]);
UI_DrawHandlePic( 178, y, 68, 68, uis.whiteShader); //
trap_R_SetColor( colorTable[CT_WHITE]);
UI_DrawHandlePic( 180, y+2, 64, 64, s_initialsetup.test); // Starfleet graphic
UI_DrawProportionalString( 256, y + 5, menu_normal_text[MNT_GAMMA_LINE1],UI_SMALLFONT, colorTable[CT_LTGOLD1]);
UI_DrawProportionalString( 256, y + 25, menu_normal_text[MNT_GAMMA_LINE2],UI_SMALLFONT, colorTable[CT_LTGOLD1]);
UI_DrawProportionalString( 256, y + 45, menu_normal_text[MNT_GAMMA_LINE3],UI_SMALLFONT,colorTable[CT_LTGOLD1]);
}
else
{
UI_DrawProportionalString( 178, y + 5, menu_normal_text[MNT_GAMMA2_LINE1],UI_SMALLFONT, colorTable[CT_LTGOLD1]);
UI_DrawProportionalString( 178, y + 25,menu_normal_text[MNT_GAMMA2_LINE2],UI_SMALLFONT, colorTable[CT_LTGOLD1]);
}
}
/*
=================
M_InitialSetupMenu_Draw
=================
*/
static void M_InitialSetupMenu_Draw (void)
{
// Draw graphics particular to Main Menu
M_InitialSetupMenu_Graphics();
Menu_Draw( &s_initialsetup.menu );
}
/*
===============
InitialSetup_SetValues
===============
*/
static void InitialSetup_SetValues(void)
{
char buffer[32];
int *language;
trap_Cvar_VariableStringBuffer( "g_language", buffer, 32 );
language = s_textlanguage_Names;
s_initialsetup.textlanguage.curvalue=0;
if (buffer[0])
{
while (*language)
{
if (Q_stricmp(menu_normal_text[*language],buffer)==0)
{
break;
}
language++;
s_initialsetup.textlanguage.curvalue++;
}
if (!*language)
{
s_initialsetup.textlanguage.curvalue = 0;
}
}
trap_Cvar_VariableStringBuffer( "s_language", buffer, 32 );
language = s_voicelanguage_Names;
s_initialsetup.voicelanguage.curvalue=0;
if (buffer[0])
{
while (*language)
{
if (Q_stricmp(menu_normal_text[*language],buffer)==0)
{
break;
}
language++;
s_initialsetup.voicelanguage.curvalue++;
}
if (!*language)
{
s_initialsetup.voicelanguage.curvalue = 0;
}
}
trap_Cvar_VariableStringBuffer( "k_language", buffer, 32 );
s_initialsetup.keyboardlanguage.curvalue=0;
if (buffer[0])
{
while (s_keyboardlanguage_Names[s_initialsetup.keyboardlanguage.curvalue])
{
if (Q_stricmp(s_keyboardlanguage_Names[s_initialsetup.keyboardlanguage.curvalue],buffer)==0)
{
break;
}
s_initialsetup.keyboardlanguage.curvalue++;
}
if (!s_keyboardlanguage_Names[s_initialsetup.keyboardlanguage.curvalue])
{
s_initialsetup.keyboardlanguage.curvalue = 0;
}
}
s_initialsetup.gamma.curvalue = trap_Cvar_VariableValue( "r_gamma" ) * 10.0f;
}
/*
===============
InitialSetupMenu_Cache
===============
*/
static void InitialSetupMenu_Cache( void )
{
s_initialsetup.test = trap_R_RegisterShaderNoMip("menu/special/gamma_test.tga");
}
/*
===============
InitialSetupMenu_Init
===============
*/
static void InitialSetupMenu_Init( void )
{
int x = 179;
int y = 260;
InitialSetupMenu_Cache();
s_initialsetup.menu.nitems = 0;
s_initialsetup.menu.wrapAround = qtrue;
s_initialsetup.menu.draw = M_InitialSetupMenu_Draw;
s_initialsetup.menu.key = M_InitialSetupMenu_Key;
s_initialsetup.menu.fullscreen = qtrue;
s_initialsetup.menu.descX = MENU_DESC_X;
s_initialsetup.menu.descY = MENU_DESC_Y;
s_initialsetup.menu.titleX = MENU_TITLE_X;
s_initialsetup.menu.titleY = MENU_TITLE_Y;
s_initialsetup.menu.titleI = MNT_INITIALSETUP_TITLE;
s_initialsetup.menu.footNoteEnum = MNT_INITIALSETUP;
s_initialsetup.textlanguage.generic.type = MTYPE_SPINCONTROL;
s_initialsetup.textlanguage.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_initialsetup.textlanguage.generic.x = x;
s_initialsetup.textlanguage.generic.y = y;
s_initialsetup.textlanguage.generic.name = GRAPHIC_BUTTONRIGHT;
s_initialsetup.textlanguage.generic.callback = InitialSetup_Event;
s_initialsetup.textlanguage.generic.id = ID_TEXTLANGUAGE;
s_initialsetup.textlanguage.color = CT_DKPURPLE1;
s_initialsetup.textlanguage.color2 = CT_LTPURPLE1;
s_initialsetup.textlanguage.textX = MENU_BUTTON_TEXT_X;
s_initialsetup.textlanguage.textY = MENU_BUTTON_TEXT_Y;
s_initialsetup.textlanguage.width = 80;
s_initialsetup.textlanguage.textEnum = MBT_TEXTLANGUAGE;
s_initialsetup.textlanguage.textcolor = CT_BLACK;
s_initialsetup.textlanguage.textcolor2 = CT_BLACK; //CT_WHITE;
s_initialsetup.textlanguage.listnames = s_textlanguage_Names;
y += 32;
s_initialsetup.voicelanguage.generic.type = MTYPE_SPINCONTROL;
s_initialsetup.voicelanguage.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_initialsetup.voicelanguage.generic.x = x;
s_initialsetup.voicelanguage.generic.y = y;
s_initialsetup.voicelanguage.generic.name = GRAPHIC_BUTTONRIGHT;
s_initialsetup.voicelanguage.generic.callback = InitialSetup_Event;
s_initialsetup.voicelanguage.generic.id = ID_VOICELANGUAGE;
s_initialsetup.voicelanguage.color = CT_DKPURPLE1;
s_initialsetup.voicelanguage.color2 = CT_LTPURPLE1;
s_initialsetup.voicelanguage.textX = MENU_BUTTON_TEXT_X;
s_initialsetup.voicelanguage.textY = MENU_BUTTON_TEXT_Y;
s_initialsetup.voicelanguage.width = 80;
s_initialsetup.voicelanguage.textEnum = MBT_VOICELANGUAGE;
s_initialsetup.voicelanguage.textcolor = CT_BLACK;
s_initialsetup.voicelanguage.textcolor2 = CT_BLACK; //CT_WHITE;
s_initialsetup.voicelanguage.listnames = s_voicelanguage_Names;
y += 32;
s_initialsetup.keyboardlanguage.generic.type = MTYPE_SPINCONTROL;
s_initialsetup.keyboardlanguage.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_initialsetup.keyboardlanguage.generic.x = x;
s_initialsetup.keyboardlanguage.generic.y = y;
s_initialsetup.keyboardlanguage.generic.name = GRAPHIC_BUTTONRIGHT;
s_initialsetup.keyboardlanguage.generic.callback = InitialSetup_Event;
s_initialsetup.keyboardlanguage.generic.id = ID_KEYBOARDLANGUAGE;
s_initialsetup.keyboardlanguage.color = CT_DKPURPLE1;
s_initialsetup.keyboardlanguage.color2 = CT_LTPURPLE1;
s_initialsetup.keyboardlanguage.textX = MENU_BUTTON_TEXT_X;
s_initialsetup.keyboardlanguage.textY = MENU_BUTTON_TEXT_Y;
s_initialsetup.keyboardlanguage.width = 80;
s_initialsetup.keyboardlanguage.textEnum = MBT_KEYBOARDLANGUAGE;
s_initialsetup.keyboardlanguage.textcolor = CT_BLACK;
s_initialsetup.keyboardlanguage.textcolor2 = CT_BLACK; //CT_WHITE;
s_initialsetup.keyboardlanguage.itemnames = s_keyboardlanguage_Names;
x = 180;
y = 182;
s_initialsetup.gamma.generic.type = MTYPE_SLIDER;
s_initialsetup.gamma.generic.x = x + 162;
s_initialsetup.gamma.generic.y = y;
s_initialsetup.gamma.generic.flags = QMF_SMALLFONT;
s_initialsetup.gamma.generic.callback = GammaCallback;
s_initialsetup.gamma.minvalue = 5;
s_initialsetup.gamma.maxvalue = 30;
s_initialsetup.gamma.color = CT_DKPURPLE1;
s_initialsetup.gamma.color2 = CT_LTPURPLE1;
s_initialsetup.gamma.generic.name = "menu/common/monbar_2.tga";
s_initialsetup.gamma.width = 256;
s_initialsetup.gamma.height = 32;
s_initialsetup.gamma.focusWidth = 145;
s_initialsetup.gamma.focusHeight = 18;
s_initialsetup.gamma.picName = "menu/common/square.tga";
s_initialsetup.gamma.picX = x;
s_initialsetup.gamma.picY = y;
s_initialsetup.gamma.picWidth = MENU_BUTTON_MED_WIDTH + 21;
s_initialsetup.gamma.picHeight = MENU_BUTTON_MED_HEIGHT;
s_initialsetup.gamma.textX = MENU_BUTTON_TEXT_X;
s_initialsetup.gamma.textY = MENU_BUTTON_TEXT_Y;
s_initialsetup.gamma.textEnum = MBT_BRIGHTNESS;
s_initialsetup.gamma.textcolor = CT_BLACK;
s_initialsetup.gamma.textcolor2 = CT_BLACK; //CT_WHITE;
s_initialsetup.gamma.thumbName = GRAPHIC_BUTTONSLIDER;
s_initialsetup.gamma.thumbHeight = 32;
s_initialsetup.gamma.thumbWidth = 16;
s_initialsetup.gamma.thumbGraphicWidth = 9;
s_initialsetup.gamma.thumbColor = CT_DKBLUE1;
s_initialsetup.gamma.thumbColor2 = CT_LTBLUE1;
s_initialsetup.apply.generic.type = MTYPE_ACTION;
s_initialsetup.apply.generic.flags = QMF_HIGHLIGHT_IF_FOCUS|QMF_BLINK;
s_initialsetup.apply.generic.x = 501;
s_initialsetup.apply.generic.y = 357;
s_initialsetup.apply.generic.callback = InitialSetupApplyChanges;
s_initialsetup.apply.textEnum = MBT_ACCEPT;
s_initialsetup.apply.textcolor = CT_BLACK;
s_initialsetup.apply.textcolor2 = CT_WHITE;
s_initialsetup.apply.textcolor3 = CT_LTGREY;
s_initialsetup.apply.color = CT_DKPURPLE1;
s_initialsetup.apply.color2 = CT_LTPURPLE1;
s_initialsetup.apply.color3 = CT_DKGREY;
s_initialsetup.apply.textX = 5;
s_initialsetup.apply.textY = 47;
s_initialsetup.apply.width = 110;
s_initialsetup.apply.height = 65;
Menu_AddItem( &s_initialsetup.menu, &s_initialsetup.gamma );
Menu_AddItem( &s_initialsetup.menu, &s_initialsetup.textlanguage );
Menu_AddItem( &s_initialsetup.menu, &s_initialsetup.voicelanguage );
Menu_AddItem( &s_initialsetup.menu, &s_initialsetup.keyboardlanguage );
Menu_AddItem( &s_initialsetup.menu, &s_initialsetup.apply );
InitialSetup_SetValues();
}
static void UI_InitialSetupMenu(void)
{
InitialSetupMenu_Init();
UI_PushMenu ( &s_initialsetup.menu );
trap_Key_SetCatcher( KEYCATCH_UI );
uis.menusp = 0;
}
//TiM - Functions needed for the quick connect stuff
int ArenaServers_MaxPing( void );
/*
=================
MainArenaServers_Compare
=================
*/
static int QDECL MainArenaServers_Compare( const void *arg1, const void *arg2 ) {
float f1;
float f2;
table_t* t1;
table_t* t2;
//t1 = (servernode_t *)arg1;
//t2 = (servernode_t *)arg2;
t1 = (table_t *)arg1;
t2 = (table_t *)arg2;
//hard-coded for client sorting
//f1 = t1->servernode.maxclients - t1->servernode.numclients;
f1 = t1->servernode.numclients;
if( f1 < 0 ) {
f1 = 0;
}
//f2 = t2->servernode.maxclients - t2->servernode.numclients;
f2 = t2->servernode.numclients;
if( f2 < 0 ) {
f2 = 0;
}
if( f1 < f2 ) {
return 1;
}
if( f1 == f2 ) {
return 0;
}
return -1;
}
/*
=================
MainArenaServers_UpdateMenu
=================
*/
static void MainArenaServers_UpdateMenu( void ) {
int i;
//int j;
//int count;
//char* buff;
//servernode_t* servernodeptr;
//table_t* tableptr;
//char *pingColor, *pongColor;
if( s_main.networkParms.numservers > 0 ) {
// servers found
if( s_main.networkParms.refreshservers && ( s_main.networkParms.currentping <= s_main.networkParms.numservers ) ) {
qsort( s_main.networkParms.table, s_main.networkParms.numservers, sizeof( table_t ), MainArenaServers_Compare);
}
else {
// all servers pinged - enable controls
s_main.refresh.generic.flags &= ~( QMF_GRAYED | QMF_INACTIVE );
//s_main.connect.generic.flags &= ~( QMF_GRAYED | QMF_INACTIVE );
//if required, enable the arrow buttons
if ( s_main.networkParms.numservers > MAX_FAVBUTTONS ) {
s_main.upArrow.generic.flags &= ~( QMF_GRAYED | QMF_INACTIVE );
s_main.dnArrow.generic.flags &= ~( QMF_GRAYED | QMF_INACTIVE );
s_main.upArrow.generic.flags |= QMF_HIGHLIGHT_IF_FOCUS;
s_main.dnArrow.generic.flags |= QMF_HIGHLIGHT_IF_FOCUS;
}
//enable selection buttons
for ( i = 0; i < MAX_FAVBUTTONS; i++ ) {
if ( s_main.networkParms.numservers > i ) {
//TiM : Unhide the necessary menu buttons as we go along
s_main.favMenu[i].generic.flags = QMF_SILENT;
}
}
}
}
else {
// no servers found
if( s_main.networkParms.refreshservers )
{
// disable controls during refresh
s_main.refresh.generic.flags |= ( QMF_GRAYED | QMF_INACTIVE );
//s_main.connect.generic.flags |= ( QMF_GRAYED | QMF_INACTIVE );
s_main.upArrow.generic.flags |= ( QMF_GRAYED | QMF_INACTIVE );
s_main.dnArrow.generic.flags |= ( QMF_GRAYED | QMF_INACTIVE );
}
else {
s_main.refresh.generic.flags &= ~( QMF_GRAYED | QMF_INACTIVE );
//s_main.connect.generic.flags |= ( QMF_GRAYED | QMF_INACTIVE );
s_main.upArrow.generic.flags |= ( QMF_GRAYED | QMF_INACTIVE );
s_main.dnArrow.generic.flags |= ( QMF_GRAYED | QMF_INACTIVE );
}
for ( i = 0; i < MAX_FAVBUTTONS; i++ )
s_main.favMenu[i].generic.flags |= (QMF_HIDDEN | QMF_INACTIVE);
return;
}
// build list box strings - apply culling filters
/*count = s_main.networkParms.numservers;
for( i = 0, j = 0; i < count; i++ ) {
tableptr = &s_main.networkParms.table[j];
servernodeptr = &tableptr->servernode;
buff = tableptr->buff;
if( servernodeptr->pingtime < servernodeptr->minPing ) {
pingColor = S_COLOR_BLUE;
}
else if( servernodeptr->maxPing && servernodeptr->pingtime > servernodeptr->maxPing ) {
pingColor = S_COLOR_BLUE;
}
else if( servernodeptr->pingtime < 50 ) {
pingColor = S_COLOR_WHITE;
}
else if( servernodeptr->pingtime < 200 ) {
pingColor = S_COLOR_GREEN;
}
else if( servernodeptr->pingtime < 400 ) {
pingColor = S_COLOR_YELLOW;
}
else {
pingColor = S_COLOR_RED;
}
pongColor = S_COLOR_WHITE;
Com_sprintf( buff, MAX_LISTBOXWIDTH, "%s%-31.31s %s%-11.11s %2d/%2d %-8.8s %3d", //31.31
pongColor, servernodeptr->hostname, pingColor, servernodeptr->mapname, servernodeptr->numclients,
servernodeptr->maxclients, servernodeptr->gamename, servernodeptr->pingtime);
if (!servernodeptr->isPure) { //prev length is 62, we can safely add 2 more chars.
strcat(buff, "*"); //mark this unpure server!
}
j++;
}*/
// Com_sprintf( g_arenaservers.status.string, MAX_STATUSLENGTH, "%d of %d Arena Servers.", j, *g_arenaservers.numservers );
if (!s_main.networkParms.numservers )
{
s_main.connect.generic.flags |= ( QMF_GRAYED | QMF_INACTIVE );
}
}
/*
=================
MainArenaServers_Insert
=================
*/
static void MainArenaServers_Insert( char* adrstr, char* info, int pingtime )
{
servernode_t* servernodeptr;
char* s;
int i;
if (s_main.networkParms.numservers >= s_main.networkParms.maxservers ) {
// list full;
servernodeptr = &s_main.networkParms.table[s_main.networkParms.numservers-1].servernode;
} else {
// next slot
servernodeptr = &s_main.networkParms.table[s_main.networkParms.numservers].servernode;
s_main.networkParms.numservers++;
}
Q_strncpyz( servernodeptr->adrstr, adrstr, MAX_ADDRESSLENGTH );
Q_strncpyz( servernodeptr->hostname, Info_ValueForKey( info, "hostname"), MAX_HOSTNAMELENGTH );
Q_CleanStr( servernodeptr->hostname );
Q_CleanStr( servernodeptr->hostname );
Q_CleanStr( servernodeptr->hostname );
Q_CleanStr( servernodeptr->hostname );
Q_strncpyz( servernodeptr->mapname, Info_ValueForKey( info, "mapname"), MAX_MAPNAMELENGTH );
Q_CleanStr( servernodeptr->mapname );
Q_strlwr( servernodeptr->mapname );
servernodeptr->numclients = atoi( Info_ValueForKey( info, "clients") );
servernodeptr->maxclients = atoi( Info_ValueForKey( info, "sv_maxclients") );
servernodeptr->pingtime = pingtime;
servernodeptr->minPing = atoi( Info_ValueForKey( info, "minPing") );
servernodeptr->maxPing = atoi( Info_ValueForKey( info, "maxPing") );
servernodeptr->isPure = atoi( Info_ValueForKey( info, "pure") );
servernodeptr->isExpansion= atoi( Info_ValueForKey( info, "vv") );
s = Info_ValueForKey( info, "game");
i = atoi( Info_ValueForKey( info, "gametype") );
if( i < 0 ) {
i = 0;
}
else if( i > 5 ) {
i = 5;
}
if( *s ) {
servernodeptr->gametype = -1;
Q_strncpyz( servernodeptr->gamename, s, sizeof(servernodeptr->gamename) );
}
else {
servernodeptr->gametype = i;
if (servernodeptr->isExpansion) {
Com_sprintf( servernodeptr->gamename, sizeof(servernodeptr->gamename), "vv-%s",gamenames[i]);
} else {
Q_strncpyz( servernodeptr->gamename, gamenames[i], sizeof(servernodeptr->gamename) );
}
}
}
/*
=================
MainArenaServers_StopRefresh
=================
*/
static void MainArenaServers_StopRefresh( void )
{
if (!s_main.networkParms.refreshservers)
// not currently refreshing
return;
s_main.networkParms.refreshservers = qfalse;
// nonresponsive favorites must be shown
//MainArenaServers_InsertFavorites(); -TIMMARK
if ( s_main.networkParms.numservers < s_main.networkParms.maxservers )
{
char infoString[MAX_INFO_STRING];
int i;
int j;
infoString[0]='\0';
//write into the host name the IP that didn't work
Info_SetValueForKey( infoString, "hostname", "No Response" );
for ( i = 0; i < s_main.networkParms.maxservers; i++ ) {
//loop thru all the successfully pinged servers, and check that this one from the main list was found
for ( j = 0; j < s_main.networkParms.numservers; j++ ) {
if ( !Q_stricmp( s_main.networkParms.favBuffer[i], s_main.networkParms.table[j].servernode.adrstr ) )
break;
}
//whup, I guess we couldn't see it
if ( j >= s_main.networkParms.numservers ) {
//Insert into the list as a normal entry. Who knows, the server might be up and Q3 is dumb
MainArenaServers_Insert( s_main.networkParms.favBuffer[i], infoString, ArenaServers_MaxPing() );
}
}
}
// sort
qsort( s_main.networkParms.table, s_main.networkParms.numservers, sizeof( table_t ), MainArenaServers_Compare);
if ( !s_main.networkParms.numservers )
s_main.networkParms.showNoServersAlert = qtrue;
//Com_Printf( S_COLOR_RED "OUTPUT: Name: %s, Map: %s\n", s_main.networkParms.table[1].servernode.hostname, s_main.networkParms.table[1].servernode.mapname );
MainArenaServers_UpdateMenu();
}
/*
=================
MainArenaServers_DoRefresh
=================
*/
static void MainArenaServers_DoRefresh( void )
{
int i;
int j;
int time;
int maxPing;
char adrstr[MAX_ADDRESSLENGTH];
char info[MAX_INFO_STRING];
if (uis.realtime < s_main.networkParms.nextpingtime)
{
// wait for time trigger
return;
}
// trigger at 10Hz intervals
s_main.networkParms.nextpingtime = uis.realtime + 50;
// process ping results
maxPing = ArenaServers_MaxPing();
for (i=0; i<MAX_PINGREQUESTS; i++)
{
trap_LAN_GetPing( i, adrstr, MAX_ADDRESSLENGTH, &time );
if (!adrstr[0])
{
// ignore empty or pending pings
continue;
}
// find ping result in our local list
for (j=0; j<MAX_PINGREQUESTS; j++)
if (!Q_stricmp( adrstr, s_main.networkParms.pinglist[j].adrstr ))
break;
if (j < MAX_PINGREQUESTS)
{
// found it
if (!time)
{
time = uis.realtime - s_main.networkParms.pinglist[j].start;
if (time < maxPing)
{
// still waiting
continue;
}
}
if (time > maxPing)
{
// stale it out
info[0] = '\0';
time = maxPing;
}
else
{
trap_LAN_GetPingInfo( i, info, MAX_INFO_STRING ); //bookmark - TiM: This is where the info is received!
//TiM - testing the data output from this baby
//if ( !Q_stricmp( Info_ValueForKey( info, "game" ), "rpg-x" ) )
//Com_Printf( "%s", info );
}
// insert ping results
MainArenaServers_Insert( adrstr, info, time );
// clear this query from internal list
s_main.networkParms.pinglist[j].adrstr[0] = '\0';
}
// clear this query from external list
trap_LAN_ClearPing( i );
}
// send ping requests in reasonable bursts
// iterate ping through all found servers
for (i=0; i<MAX_PINGREQUESTS && s_main.networkParms.currentping < s_main.networkParms.maxservers; i++)
{
if (trap_LAN_GetPingQueueCount() >= MAX_PINGREQUESTS)
{
// ping queue is full
break;
}
// find empty slot
for (j=0; j<MAX_PINGREQUESTS; j++)
if (!s_main.networkParms.pinglist[j].adrstr[0])
break;
if (j >= MAX_PINGREQUESTS)
// no empty slots available yet - wait for timeout
break;
strcpy( s_main.networkParms.pinglist[j].adrstr, s_main.networkParms.favBuffer[s_main.networkParms.currentping] );
s_main.networkParms.pinglist[j].start = uis.realtime;
trap_Cmd_ExecuteText( EXEC_NOW, va( "ping %s\n", s_main.networkParms.pinglist[j].adrstr ) );
// advance to next server
s_main.networkParms.currentping++;
}
if (!trap_LAN_GetPingQueueCount())
{
// all pings completed
MainArenaServers_StopRefresh();
return;
}
// update the user interface with ping status
MainArenaServers_UpdateMenu();
}
/*
=================
MainArenaServers_StartRefresh
=================
*/
static void MainArenaServers_StartRefresh( void )
{
int i;
char address[MAX_ADDRESSLENGTH];
memset( &s_main.networkParms, 0, sizeof( s_main.networkParms ) );
//fill the main server list with all the faved addresses we have
for ( i=0; i < MAX_FAVORITESERVERS; i++ ) {
trap_Cvar_VariableStringBuffer( va( "server%i", i ), address, MAX_ADDRESSLENGTH );
if ( !address[0] || !strlen( address ) )
continue;
Q_strncpyz( s_main.networkParms.favBuffer[s_main.networkParms.maxservers], address, MAX_ADDRESSLENGTH );
s_main.networkParms.maxservers++;
}
for (i=0; i<MAX_PINGREQUESTS; i++)
{
s_main.networkParms.pinglist[i].adrstr[0] = '\0';
trap_LAN_ClearPing( i );
}
s_main.networkParms.refreshservers = qtrue;
s_main.networkParms.currentping = 0;
s_main.networkParms.nextpingtime = 0;
s_main.networkParms.numservers = 0;
//unselect
s_main.selectedFav = -1;
// allow max 5 seconds for responses
s_main.networkParms.refreshtime = uis.realtime + 5000;
// place menu in zeroed state
MainArenaServers_UpdateMenu();
}
/*
=================
Main_MenuEvent
=================
*/
static void Main_MenuEvent (void* ptr, int event)
{
//void** weaponptr;
if( event != QM_ACTIVATED )
{
return;
}
uis.spinView = qfalse;
switch( ((menucommon_s*)ptr)->id )
{
case ID_MULTIPLAYER:
UI_ChooseServerTypeMenu();
break;
case ID_SETUP:
UI_SetupWeaponsMenu();
break;
case ID_DEMOS:
UI_DemosMenu();
break;
// case ID_CINEMATICS:
// UI_CinematicsMenu();
// break;
case ID_MODS:
UI_ModsMenu();
break;
case ID_CREDITS:
UI_CreditsMenu();
break;
case ID_QUIT:
UI_PopMenu();
UI_QuitMenu();
// case ID_FAVREFRESH:
// Main_StartRefresh();
// UI_ConfirmMenu( "EXIT GAME?", NULL, MainMenu_ExitAction );
break;
case ID_PLAYER_SETTINGS:
UI_PlayerSettingsMenu(PS_MENU_CONTROLS);
break;
case ID_PLAYER_MODEL:
UI_PlayerModelMenu( PS_MENU_CONTROLS );
break;
case ID_LIST_UP:
s_main.favOffset--;
if ( s_main.favOffset < 0 )
s_main.favOffset = 0;
break;
case ID_LIST_DOWN:
s_main.favOffset++;
if ( s_main.networkParms.numservers > MAX_FAVBUTTONS && s_main.favOffset > ( s_main.networkParms.numservers - MAX_FAVBUTTONS ) )
s_main.favOffset = ( s_main.networkParms.numservers - MAX_FAVBUTTONS );
break;
case ID_FAV0:
case ID_FAV1:
case ID_FAV2:
case ID_FAV3:
case ID_FAV4:
case ID_FAV5:
case ID_FAV6:
case ID_FAV7:
trap_S_StartLocalSound( uis.menu_choice1_snd, CHAN_MENU1 );
s_main.selectedFav = ((menucommon_s *)ptr)->id - 100 + s_main.favOffset;
if ( s_main.connect.generic.flags & ( QMF_INACTIVE | QMF_GRAYED ) )
s_main.connect.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
break;
case ID_REFRESH:
MainArenaServers_StartRefresh();
break;
case ID_CONNECT:
if ( s_main.selectedFav >= 0 )
trap_Cmd_ExecuteText( EXEC_APPEND, va( "connect %s\n", s_main.networkParms.table[s_main.selectedFav].servernode.adrstr) );
break;
case ID_Q_VOYAGER_LABEL:
case ID_PHASER_LABEL:
case ID_TORPEDO_LABEL:
case ID_VENTRAL_LABEL:
case ID_MIDHULL_LABEL:
case ID_BUSSARD_LABEL:
case ID_NACELLES_LABEL:
case ID_THRUSTERS_LABEL:
case ID_BRIDGE_LABEL:
QuitMenuInterrupt(((menucommon_s*)ptr)->id);
break;
/*case ID_WEAPON1 :
case ID_WEAPON2 :
case ID_WEAPON3 :
case ID_WEAPON4 :
case ID_WEAPON5 :
case ID_WEAPON6 :
case ID_WEAPON7 :
case ID_WEAPON8 :
case ID_WEAPON9 :
trap_S_StartLocalSound( s_main.weaponnamesnd[((menucommon_s*)ptr)->id - ID_WEAPON1],CHAN_MENU1); // Weapon name
trap_S_StartLocalSound( uis.menu_choice1_snd, CHAN_LOCAL_SOUND );
weaponptr = g_weapons[s_main.currentWeapon];
((menubitmap_s*)weaponptr)->textcolor = CT_BLACK;
s_main.timer = uis.realtime + (WEAPON_WAIT * 2);
s_main.currentWeapon = (((menucommon_s*)ptr)->id - ID_WEAPON1);
weaponptr = g_weapons[s_main.currentWeapon];
((menubitmap_s*)weaponptr)->textcolor = CT_LTGOLD1;
break;*/
// case ID_EXIT:
// UI_ConfirmMenu( "EXIT GAME?", NULL, MainMenu_ExitAction );
// break;
}
}
/*
=================
UI_MainMenuButtons
=================
*/
static void UI_MainMenuButtons(int count)
{
int i, j;
trap_R_SetColor( colorTable[CT_DKPURPLE1]);
if (count==99) { //This how you spell hack?
j = 6;
} else {
j = count;
}
for (i=0;i<j;++i)
{
if ((count==99) && (i==5)) { //SOMEBODY SPELL RPG-X HACK!
trap_R_SetColor( colorTable[CT_VDKRED1]);
}
UI_DrawHandlePic(mm_buttons[i][0] - 14,mm_buttons[i][1], MENU_BUTTON_MED_HEIGHT, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd);
}
}
typedef struct
{
qhandle_t modelhandle; // model Handle
int pitch;
int roll;
vec3_t mid;
char* modelname;
} weapongraphics_s;
/*
==========================
RPG-X Modification
Phenix
1/6/2004
==========================
*/
/*static void UI_drawRPGXLogo ( void )
{
refdef_t refdef;
refEntity_t ent;
vec3_t origin = {0.0, 0.0, 0.0};
vec3_t angles;
float adjust;
float x, y, w, h;
//vec4_t color = {0.5, 0, 0, 1};
// setup the refdef
memset( &refdef, 0, sizeof( refdef ) );
refdef.rdflags = RDF_NOWORLDMODEL;
AxisClear( refdef.viewaxis );
x = 465; //440 // controls location of top left corner of ent
y = 309 - 146; //0
w = 139; //400; //640 //150 //TiM: I don't know exactly, but w and h seem to control the size of the region the model will be drawn in
h = 139; //480; //120 //150 //good going brainiac! ;P - TiM several months later ;)
UI_AdjustFrom640( &x, &y, &w, &h );
refdef.x = x;
refdef.y = y;
refdef.width = w;
refdef.height = h;
adjust = 0; // JDC: Kenneth asked me to stop this 1.0 * sin( (float)uis.realtime / 1000 );
refdef.fov_x = 10 + adjust; //60 //TiM: Controls width scale // yeah.... coz it's the FOV lol //17
//that being the case, we have to aim for a value of 10
//(10's what I use in MD3View... anything higher and it starts to distort)
refdef.fov_y = 10 + adjust; //19.6875 // like i said, 10 ;)
refdef.time = uis.realtime;
//TiM: Okay... several months later and I actually understand what this whacky array called
//a 'vector' actually does. ;P
origin[0] = 930; //300 //TiM: Controls Overall Size //controls Z position (and hence, the scale coz it's either moving towards, or away from the camera)
origin[1] = 0; //TiM: Controls Horizontal Position //controls X
origin[2] = -27; //-32 //TiM: Controls vertical Position //controls Y
trap_R_ClearScene();
// add the model
memset( &ent, 0, sizeof(ent) );
adjust = 20.0/300.0 * uis.realtime; //5.0 * sin( (float)uis.realtime / 5000 );
VectorSet( angles, 0, 180 + adjust, 0 );
AnglesToAxis( angles, ent.axis );
ent.hModel = s_main.logoModel;
if (trap_Cvar_VariableValue("r_dynamiclight") ) {
ent.renderfx = RF_LOWLIGHT|RF_NOSHADOW; // keep it dark, and no stencil shadows //RF_LOWBRIGHT
} else {
ent.renderfx = RF_NOSHADOW; // no stencil shadows
}
VectorCopy( origin, ent.origin );
VectorCopy( origin, ent.lightingOrigin );
VectorCopy( ent.origin, ent.oldorigin );
origin[0] -= 50; // + = behind, - = in front
origin[1] += 50; // + = left, - = right
origin[2] += 50; // + = above, - = below
trap_R_AddLightToScene( origin, 500, 1.0, 1.0, 1.0 );
trap_R_AddRefEntityToScene( &ent );
trap_R_RenderScene( &refdef );
}
void P_WeaponsMenu_Blinkies (void)
{
int i;
for (i=0;i<AMG_MAX;++i)
{
attackmenu_graphics1[i].color = CT_VDKPURPLE1;
}
if (attackmenu_graphics1[AMG_MIDLEFT].timer < uis.realtime)
{
attackmenu_graphics1[AMG_MIDLEFT].timer = uis.realtime + 500;
++attackmenu_graphics1[AMG_MIDLEFT].target;
if (attackmenu_graphics1[AMG_MIDLEFT].target > 7)
{
attackmenu_graphics1[AMG_MIDLEFT].target = 0;
}
}
switch (attackmenu_graphics1[AMG_MIDLEFT].target)
{
case 0:
attackmenu_graphics1[AMG_MIDLEFT].color = CT_LTPURPLE1;
break;
case 1:
attackmenu_graphics1[AMG_UPPERLEFT].color = CT_LTPURPLE1;
attackmenu_graphics1[AMG_LOWERLEFT].color = CT_LTPURPLE1;
break;
case 2:
attackmenu_graphics1[AMG_UPPERCORNER].color = CT_LTPURPLE1;
attackmenu_graphics1[AMG_LOWERCORNER].color = CT_LTPURPLE1;
break;
case 3:
attackmenu_graphics1[AMG_UPPERTOP1ST].color = CT_LTPURPLE1;
attackmenu_graphics1[AMG_LOWERTOP1ST].color = CT_LTPURPLE1;
break;
case 4:
attackmenu_graphics1[AMG_UPPERTOP2ND].color = CT_LTPURPLE1;
attackmenu_graphics1[AMG_LOWERTOP2ND].color = CT_LTPURPLE1;
break;
case 5:
attackmenu_graphics1[AMG_UPPERSWOOP].color = CT_LTPURPLE1;
attackmenu_graphics1[AMG_LOWERSWOOP].color = CT_LTPURPLE1;
break;
case 6:
attackmenu_graphics1[AMG_TOPRIGHT].color = CT_LTPURPLE1;
attackmenu_graphics1[AMG_BOTTOMRIGHT].color = CT_LTPURPLE1;
break;
case 7:
attackmenu_graphics1[AMG_PLAYERBKGRND].color = CT_LTPURPLE1;
break;
}
}*/
static void Player_DrawPlayer( void ) //*self )
{
menubitmap_s *b;
vec3_t viewangles;
vec3_t origin = {-3, 5, -3 };//{ 0, 3.8, 0};
char buf[MAX_QPATH];
// float yaw;
trap_Cvar_VariableStringBuffer( "model", buf, sizeof( buf ) );
if ( Q_stricmp( buf, s_main.playerinfo.modelName )
|| trap_Cvar_VariableValue( "height" ) != s_main.playerinfo.height
|| trap_Cvar_VariableValue( "weight" ) != s_main.playerinfo.weight )
{
UI_PlayerInfo_SetModel( &s_main.playerinfo, buf);
viewangles[YAW] = uis.lastYaw; //yaw
viewangles[PITCH] = 0;
viewangles[ROLL] = 0;
UI_PlayerInfo_SetInfo( &s_main.playerinfo, BOTH_STAND1, BOTH_STAND1, viewangles, vec3_origin, WP_1, trap_Cvar_VariableValue( "height" ), trap_Cvar_VariableValue( "weight" ), qfalse );
//Player_UpdateModel( ANIM_IDLE ); //ADDDED
//UI_PlayerInfo_SetInfo( &s_main.playerinfo, LEGS_IDLE, TORSO_STAND2, viewangles, vec3_origin, s_main.playerWeapon, qfalse );
}
b = &s_main_playermdl; //(menubitmap_s*) self;
UI_DrawPlayer( b->generic.x, b->generic.y, b->width, b->height, origin, &s_main.playerinfo, uis.realtime );
//UI_DrawPlayer( s_main_playermdl.generic.x, s_main_playermdl.generic.y, s_main_playermdl.width, s_main_playermdl.height, origin, &s_main.playerinfo, uis.realtime/2 );
}
/*
=================
Player_SpinPlayer
=================
*/
static void Player_SpinPlayer( void* ptr, int event)
{
if ( event == QM_ACTIVATED )
{
uis.spinView = qtrue;
uis.cursorpx = uis.cursorx;
}
}
static void Player_MenuInit( void )
{
s_main_playermdl.generic.type = MTYPE_BITMAP;
s_main_playermdl.generic.flags = QMF_SILENT; //INACTIVE
s_main_playermdl.generic.callback = Player_SpinPlayer;
// s_main_playermdl.generic.ownerdraw = Player_DrawPlayer;
s_main_playermdl.generic.x = 82; //440 //25
s_main_playermdl.generic.y = 158; //95
s_main_playermdl.width = 164; //32*6.6 //211.2 //246.2
s_main_playermdl.height = 276; //56*6.6 //369.6 //404.6
s_main_playermdl.generic.id = ID_PLAYER_REGION;
}
static void Player_InitModel( void )
{
memset( &s_main.playerinfo, 0, sizeof(playerInfo_t) );
UI_PlayerInfo_SetModel( &s_main.playerinfo, UI_Cvar_VariableString( "model" ) );
//Player_UpdateModel( ANIM_IDLE );
VectorClear( s_main.playerViewangles );
VectorClear( s_main.playerMoveangles );
s_main.playerViewangles[YAW] = 200;
s_main.playerViewangles[PITCH] = 0;
s_main.playerViewangles[ROLL] = 0;
s_main.playerMoveangles[YAW] = 0; //s_main.playerViewangles[YAW];
s_main.playerLegs = BOTH_STAND1;
s_main.playerWeapon = WP_0;
s_main.playerTorso = BOTH_STAND1; //TORSO_STAND2
s_main.playerinfo.randomEmote = qtrue; //play some random anims hehe
UI_PlayerInfo_SetInfo( &s_main.playerinfo,
s_main.playerLegs,
s_main.playerTorso,
s_main.playerViewangles,
s_main.playerMoveangles,
s_main.playerWeapon,
trap_Cvar_VariableValue( "height" ),
trap_Cvar_VariableValue( "weight" ),
qfalse );
}
/*
==========================
END MOFICIATION
==========================
*/
static weapongraphics_s weapon_graphics[UI_NUM_WEAPONS] = //was WP_NUM_WEAPONS, but we added some more for vv
{
{ 0, -15, -25 }, // WP_5
{ 0, 7, -20 }, // WP_6
{ 0, 15, -10 }, // WP_1
{ 0, 8, -15 }, // WP_4
{ 0, 25, 0 }, // WP_10
{ 0, 18, -17 }, // WP_8
{ 0, 5, -25 }, // WP_TETRYON_DISRUPTOR
{ 0, 20, -10 }, // WP_PHOTON_BURST
{ 0, 5, -19 } // WP_ARCWELDER
};
/*static void UI_Draw3DModel( float x, float y, float w, float h, qhandle_t model, vec3_t origin, vec3_t angles, vec3_t weaponMidpoint ) {
refdef_t refdef;
refEntity_t ent;
UI_AdjustFrom640( &x, &y, &w, &h );
memset( &refdef, 0, sizeof( refdef ) );
memset( &ent, 0, sizeof( ent ) );
AnglesToAxis( angles, ent.axis );
origin[0] -=
weaponMidpoint[0] * ent.axis[0][0] +
weaponMidpoint[1] * ent.axis[1][0] +
weaponMidpoint[2] * ent.axis[2][0];
origin[1] -=
weaponMidpoint[0] * ent.axis[0][1] +
weaponMidpoint[1] * ent.axis[1][1] +
weaponMidpoint[2] * ent.axis[2][1];
origin[2] -=
weaponMidpoint[0] * ent.axis[0][2] +
weaponMidpoint[1] * ent.axis[1][2] +
weaponMidpoint[2] * ent.axis[2][2];
VectorCopy( origin, ent.origin );
ent.hModel = model;
if (trap_Cvar_VariableValue("r_dynamiclight") ) {
ent.renderfx = RF_LOWLIGHT|RF_NOSHADOW; // keep it dark, and no stencil shadows
} else {
ent.renderfx = RF_NOSHADOW; // no stencil shadows
}
refdef.rdflags = RDF_NOWORLDMODEL;
AxisClear( refdef.viewaxis );
refdef.fov_x = 40;
refdef.fov_y = 30;
refdef.x = x;
refdef.y = y;
refdef.width = w;
refdef.height = h;
refdef.time = uis.realtime;
trap_R_ClearScene();
trap_R_AddRefEntityToScene( &ent );
origin[0] -= 50; // + = behind, - = in front
origin[1] += 50; // + = left, - = right
origin[2] += 50; // + = above, - = below
trap_R_AddLightToScene( origin, 500, 1.0, 1.0, 1.0 );
trap_R_RenderScene( &refdef );
}*/
/*
================
UI_DrawWeapon
================
*/
static void CacheWeaponModel(int i);
/*static void UI_DrawWeapon(void)
{
vec3_t origin = {50,0,2};
vec3_t angles;
origin[2] = 2; //+ = up, - = down
origin[1] = 0;
origin[0] = 60;
angles[PITCH] = weapon_graphics[s_main.currentWeapon].pitch;
angles[YAW] = 20.0/300.0 * uis.realtime; //Rotates object
angles[ROLL] = weapon_graphics[s_main.currentWeapon].roll;
if (!weapon_graphics[s_main.currentWeapon].modelhandle)
{
CacheWeaponModel(s_main.currentWeapon);
}
UI_Draw3DModel( 113, 178, 358, 244, weapon_graphics[s_main.currentWeapon].modelhandle, origin, angles, weapon_graphics[s_main.currentWeapon].mid );
angles[PITCH] = 0;
angles[ROLL] = 0;
UI_Draw3DModel( 113, 178, 358, 244, weapon_graphics[s_main.currentWeapon].modelhandle, origin, angles, weapon_graphics[s_main.currentWeapon].mid );
//BOOKMARK - 163
UI_DrawProportionalString( 289, 180, bg_itemlist[s_main.currentWeapon + 1].pickup_name,UI_CENTER|UI_SMALLFONT, colorTable[CT_YELLOW]);
}*/
/*
=================
M_MainMenu_Graphics
=================
*/
//BOOKMARK
//static qboolean hasSlashed = qfalse;
static void M_MainMenu_Graphics (void)
{
int y,pad; //i removed
// void** weaponptr;
char string[256];
char temp[128];
int i;
float scale;
servernode_t* node;
int style;
trap_R_ClearScene();
// Draw the basic screen layout
UI_MenuFrame(&s_main.menu);
UI_MainMenuButtons(99); //Ammount of left butty things //TiM heh heh.... butty ROFL
trap_R_SetColor( colorTable[CT_LTPURPLE1] ); // END LEFT (2112)
UI_DrawHandlePic( 460 + MENU_BUTTON_MED_WIDTH + 3 , 136, -19, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd); //right
trap_R_SetColor( colorTable[CT_DKPURPLE1]); // END LEFT (2112)
UI_DrawHandlePic( 482, 136, MENU_BUTTON_MED_WIDTH - 13, MENU_BUTTON_MED_HEIGHT, uis.whiteShader);
trap_R_SetColor( colorTable[CT_LTBROWN1]); //LEFT BAR (93433)
UI_DrawHandlePic(30,203, 47, 88, uis.whiteShader); // Long left column square on bottom 3rd //H: 168
trap_R_SetColor( colorTable[CT_LTGOLD1]); //LEFT BAR (93433)
UI_DrawHandlePic(30,295, 47, 65, uis.whiteShader); // Long left column square on bottom 3rd
trap_R_SetColor( colorTable[CT_DKRED1]); //LEFT BAR (93433)
UI_DrawHandlePic(30,363, 47, 25, uis.whiteShader); // Long left column square on bottom 3rd
UI_DrawProportionalString( 74, 66, "7617",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 84, "4396",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 188, "81453",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 206, "93433",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 298, "16594",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 366, "44205",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 395, "431108",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 584, 142, "2112",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
pad = 4;
y = 176 + pad;
//The favorite servers bar
trap_R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic( 596, 159, -16, 15, uis.graphicButtonLeftEnd); //end curve
UI_DrawHandlePic( 252, 159, 348, 15, uis.whiteShader ); //Top Bar
UI_DrawHandlePic( 252, 177, 8, 32, uis.whiteShader ); //Bit directly beneath
UI_DrawHandlePic( 252, 245, 8, 32, uis.whiteShader ); //Bit beneath the dark blue bit
UI_DrawHandlePic( 252, 269, 16, 32, s_main.graphic_12_8_LL ); //Curve
UI_DrawProportionalString( 271, 284, menu_normal_text[MNT_QUICKCONNECT], UI_SMALLFONT, colorTable[CT_LTGOLD1]);
//block next to the name
trap_R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic( 271 + UI_ProportionalStringWidth( menu_normal_text[MNT_QUICKCONNECT], UI_SMALLFONT ) + 3, 283, 157 - UI_ProportionalStringWidth( menu_normal_text[MNT_QUICKCONNECT], UI_SMALLFONT ) - 3, 18, uis.whiteShader );
//Up Arrow Box
UI_DrawHandlePic( 431, 283, 18, 18, uis.whiteShader );
//Dn Arrow Box
UI_DrawHandlePic( 452, 283, 18, 18, uis.whiteShader );
UI_DrawHandlePic( 612-19, 283, -19, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd);
trap_R_SetColor( colorTable[CT_DKBROWN1]);
//Side Box
UI_DrawHandlePic( 252, 212, 8, 30, uis.whiteShader );
//Relevant text
UI_DrawProportionalString( 265, 161, menu_normal_text[MNT_HOSTNAME],UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 400, 161, menu_normal_text[MNT_MAP],UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 485, 161, menu_normal_text[MNT_PLAYERS],UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 531, 161, menu_normal_text[MNT_TYPE],UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 573, 161, menu_normal_text[MNT_PING],UI_TINYFONT, colorTable[CT_BLACK]);
//draw the data we have for the fave servers
//done separately to guarantee proper formatting
y = 177;
pad = 13;
style = UI_TINYFONT;
for (i = 0; i < MAX_FAVBUTTONS; i++ ) {
node = &s_main.networkParms.table[i+s_main.favOffset].servernode;
if ( ( i + s_main.favOffset ) == s_main.selectedFav ) {
//selection rectangle
UI_FillRect( 263, y+( pad*i)-1, 332, 12, listbar_color );
}
if ( node->adrstr[0] ) {
//host name
//Com_sprintf( temp, sizeof( temp ), S_COLOR_WHITE "%-25.25s", node->hostname );
Com_sprintf( temp, sizeof( temp ), S_COLOR_WHITE "%s", node->hostname );
//cap the end of the string if it's too long
if ( strlen(temp) > 26 )
{
temp[26]='\0';
Q_strcat( temp, 30, "..." );
}
UI_DrawProportionalString( 265, y + (pad*i), temp, style, colorTable[CT_WHITE] );
//map name
Com_sprintf( temp, sizeof( temp ), S_COLOR_WHITE "%s", node->mapname );
//cap the end of the string if it's too long
if ( strlen(temp) > 17 )
{
temp[17]='\0';
Q_strcat( temp, 30, "..." );
}
UI_DrawProportionalString( 400, y + (pad*i), temp, style, colorTable[CT_WHITE] );
//players
Com_sprintf( temp, sizeof( temp ), S_COLOR_WHITE "%3i/%3i", node->numclients, node->maxclients );
UI_DrawProportionalString( 485, y + (pad*i), temp, style, colorTable[CT_WHITE] );
//server type
Com_sprintf( temp, sizeof( temp ), S_COLOR_WHITE "%-8.8s", node->gamename );
UI_DrawProportionalString( 531, y + (pad*i), temp, style, colorTable[CT_WHITE] );
//pingzor
Com_sprintf( temp, sizeof( temp ), S_COLOR_WHITE "%3i", node->pingtime );
if ( !node->isPure )
strcat( temp, "*" );
UI_DrawProportionalString( 573, y + (pad*i), temp, style, colorTable[CT_WHITE] );
}
}
//Text
y = 304;
pad = 23;
UI_DrawProportionalString( 271, y+1, menu_normal_text[MNT_PLAYERSTATS],UI_SMALLFONT, colorTable[CT_LTGOLD1]);
//player name
y += pad;
Com_sprintf( string, sizeof( string ), "%s: %s", menu_normal_text[MNT_NAME], UI_Cvar_VariableString("name") );
if ( strlen( string ) > 45 )
{
string[45] = '\0';
strcat( string, "..." );
}
UI_DrawProportionalString( 270, y, string, UI_LEFT|UI_SMALLFONT, colorTable[CT_LTGOLD1]);
//TiM - no way of knowing which class they're in coz of the password system
Q_strncpyz( temp, UI_Cvar_VariableString("ui_playerClass"), sizeof( temp ) );
//uppercase the first letter
if ( temp[0] >= 'a' && temp[0] <= 'z') //if the first character is lower case
temp[0] -= 32; // make it capital
y+=pad;
Com_sprintf( string, sizeof( string ), "%s: %s", menu_normal_text[MNT_CLASS], temp );
if ( strlen( string ) > 20 )
{
string[20] = '\0';
strcat( string, "..." );
}
UI_DrawProportionalString( 270, y, string, UI_LEFT|UI_SMALLFONT, colorTable[CT_LTGOLD1]);
scale = trap_Cvar_VariableValue( "height" ) * (float)BASE_HEIGHT;
Com_sprintf( string, sizeof( string ), "%s: %3.2f%s", menu_normal_text[MNT_HEIGHT], scale, HEIGHT_UNIT );
if ( strlen( string ) > 20 )
{
string[20] = '\0';
strcat( string, "..." );
}
UI_DrawProportionalString( 432, y, string, UI_LEFT|UI_SMALLFONT, colorTable[CT_LTGOLD1]);
//rank
y+=pad;
//retrieve the rank from our loaded rank data
if ( uis.rankSet.rankNames[uis.currentRank].formalName[0] )
{
Com_sprintf( string, sizeof( string ), "%s: %s", menu_normal_text[MNT_RANK], uis.rankSet.rankNames[uis.currentRank].formalName );
}
else //failing that... load the playerrank CVAR
{
char rank[36];
Q_strncpyz( rank, UI_Cvar_VariableString( "ui_playerrank" ), 36 );
//validate we got a value
if ( !rank[0] )
Q_strncpyz( rank, "Unknown", 36 );
else if ( rank[0] >= 'a' && rank[0] <= 'z' )
rank[0] -= 32; //make first char upper case if need be
Com_sprintf( string, sizeof( string ), "%s: %s", menu_normal_text[MNT_RANK], rank );
}
//TiM - Clip it to prevent overlapping
if ( strlen( string ) > 20 )
{
string[20] = '\0';
strcat( string, "..." );
}
UI_DrawProportionalString( 270, y, string, UI_LEFT|UI_SMALLFONT, colorTable[CT_LTGOLD1]);
scale = trap_Cvar_VariableValue( "height" ) * trap_Cvar_VariableValue( "weight" ) * (float)BASE_WEIGHT;
if ( s_main.playerinfo.gender == GENDER_FEMALE )
scale *= (float)FEMALE_OFFSET;
Com_sprintf( string, sizeof( string ), "%s: %3.2f%s", menu_normal_text[MNT_WEIGHT], scale, WEIGHT_UNIT );
if ( strlen( string ) > 20 )
{
string[20] = '\0';
strcat( string, "..." );
}
UI_DrawProportionalString( 432, y, string, UI_LEFT|UI_SMALLFONT, colorTable[CT_LTGOLD1]);
y+=pad;
Com_sprintf( string, sizeof(string), "%s: %s", menu_normal_text[MNT_AGE], UI_Cvar_VariableString("age") );
if ( strlen( string ) > 20 )
{
string[20] = '\0';
strcat( string, "..." );
}
UI_DrawProportionalString( 270, y, string, UI_LEFT|UI_SMALLFONT, colorTable[CT_LTGOLD1]);
Com_sprintf( string, sizeof(string), "%s: %s", menu_normal_text[MNT_RACE], UI_Cvar_VariableString("race") );
//TiM - Clip it to prevent overlapping
if ( strlen( string ) > 20 )
{
string[20] = '\0';
strcat( string, "..." );
}
UI_DrawProportionalString( 432, y, string, UI_LEFT|UI_SMALLFONT, colorTable[CT_LTGOLD1]);
// Grid over top of space map
trap_R_SetColor( colorTable[CT_LTBLUE1]);
UI_DrawHandlePic( 81, 228, 165, 1, uis.whiteShader); //296
UI_DrawHandlePic( 83, 293, 161, 1, uis.whiteShader);
UI_DrawHandlePic( 81, 365, 165, 1, uis.whiteShader);
//UI_DrawHandlePic( 83, 169, 1, 256, uis.whiteShader);
UI_DrawHandlePic( 136, 162, 1, 266, uis.whiteShader); //132
UI_DrawHandlePic( 186, 162, 1, 266, uis.whiteShader); //181
Player_DrawPlayer(); //RPG-X HACK - Draw the model now, so it's over the grid, yet under the brackets :)
// bracket around the buttons
trap_R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic( 252, 304, 16, 32, s_main.graphic_12_8_LU );
UI_DrawHandlePic( 252, 402, 16, 32, s_main.graphic_12_8_LL );
UI_DrawHandlePic( 595, 304, 16, 32, s_main.graphic_12_8_RU );
UI_DrawHandlePic( 595, 402, 16, 32, s_main.graphic_12_8_RL );
UI_DrawHandlePic( 252, 328, 8, 20, uis.whiteShader ); //25 //Left upper rect
UI_DrawHandlePic( 252, 388, 8, 22, uis.whiteShader ); //Left lower rect
UI_DrawHandlePic( 603, 328, 8, 20, uis.whiteShader ); //right up
UI_DrawHandlePic( 603, 388, 8, 22, uis.whiteShader ); //right down
UI_DrawHandlePic( (3 + 271 + (UI_ProportionalStringWidth(menu_normal_text[MNT_PLAYERSTATS],UI_SMALLFONT))), 304, ((321 - (UI_ProportionalStringWidth(menu_normal_text[MNT_PLAYERSTATS],UI_SMALLFONT))) - 3), 18, uis.whiteShader );
trap_R_SetColor( colorTable[CT_DKBROWN1]);
UI_DrawHandlePic( 406, 416, 51, 18, uis.whiteShader ); //main bars along the bottom //257
UI_DrawHandlePic( 252, 351, 8, 34, uis.whiteShader ); //dark blue blocks
UI_DrawHandlePic( 603, 351, 8, 34, uis.whiteShader );
//Left Bracket around model picture
trap_R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(81,158, 16, 16, uis.graphicBracket1CornerLU);
UI_DrawHandlePic(81,174, 8, 94, uis.whiteShader);
trap_R_SetColor( colorTable[CT_DKBROWN1]);
UI_DrawHandlePic(81,271, 8, 11, uis.whiteShader);
trap_R_SetColor( colorTable[CT_LTORANGE]);
UI_DrawHandlePic(83,285, 6, 21, uis.whiteShader);
trap_R_SetColor( colorTable[CT_DKBROWN1]);
UI_DrawHandlePic(81,310, 8, 11, uis.whiteShader);
trap_R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(81,324, 8, 94, uis.whiteShader);
UI_DrawHandlePic(81,418, 16, -16, uis.graphicBracket1CornerLU); //LD
//Right Bracket around model picture
trap_R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(230,158, -16, 16, uis.graphicBracket1CornerLU); //375 //RU -200
UI_DrawHandlePic(238,174, 8, 94, uis.whiteShader); //383
trap_R_SetColor( colorTable[CT_DKBROWN1]);
UI_DrawHandlePic(238,271, 8, 11, uis.whiteShader);
trap_R_SetColor( colorTable[CT_LTORANGE]);
UI_DrawHandlePic(238,285, 6, 21, uis.whiteShader);
trap_R_SetColor( colorTable[CT_DKBROWN1]);
UI_DrawHandlePic(238,310, 8, 11, uis.whiteShader);
trap_R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(238,324, 8, 94, uis.whiteShader);
UI_DrawHandlePic(230,418, -16, -16, uis.graphicBracket1CornerLU); //375 //RD
if ( s_main.networkParms.numservers == 0 && !s_main.networkParms.refreshservers ) {
UI_DrawProportionalString( 431, 199, menu_normal_text[MNT_QUICKMESSAGE], UI_TINYFONT|UI_CENTER, colorTable[CT_RED] );
UI_DrawProportionalString( 431, 215, menu_normal_text[MNT_QUICKMESSAGE2], UI_TINYFONT|UI_CENTER, colorTable[CT_RED] );
}
if ( s_main.networkParms.showNoServersAlert )
UI_DrawProportionalString( 431, 247, menu_normal_text[MNT_NO_SERVERS], UI_TINYFONT|UI_CENTER, colorTable[CT_RED] );
// Frame around model pictures
trap_R_SetColor( colorTable[CT_LTORANGE]);
}
/*
=================
Main_MenuDraw
=================
*/
static void Main_MenuDraw (void)
{
if ( s_main.networkParms.refreshservers == qtrue ) {
MainArenaServers_DoRefresh();
}
// Draw graphics particular to Main Menu
M_MainMenu_Graphics();
Menu_Draw( &s_main.menu );
//UI_drawRPGXLogo();
}
static void CacheWeaponModel(int i)
{
// vec3_t mins, maxs;
//weapon_graphics[i].modelhandle = trap_R_RegisterModel( weapon_graphics[i].modelname);
// offset the origin y and z to center the model
//trap_R_ModelBounds( weapon_graphics[i].modelhandle, mins, maxs );
//weapon_graphics[i].mid[0] = mins[0] + 0.5 * ( maxs[0] - mins[0]);
//weapon_graphics[i].mid[1] = mins[1] + 0.5 * ( maxs[1] - mins[1]);
//weapon_graphics[i].mid[2] = mins[2] + 0.5 * ( maxs[2] - mins[2]);
}
/*
===============
MainMenu_Cache
===============
*/
//extern vmCvar_t ui_precacheweapons;
void MainMenu_Cache( void )
{
int i;
gitem_t * item;
i = 0;
for ( item = bg_itemlist + 1 ; item->classname && (i < UI_NUM_WEAPONS) ; item++ )
{
if ( item->giType != IT_WEAPON )
{
continue;
}
weapon_graphics[i].modelname = item->world_model;
CacheWeaponModel(i);
i++;
}
/*for (i=0;i<UI_NUM_WEAPONS;i++)
{
s_main.weaponnamesnd[i] = trap_S_RegisterSound(weaponnamefiles[i]);
}*/
// Precache all menu graphics in array - Makes the graphics stay
for (i=0;i<AMG_MAX;++i)
{
if (attackmenu_graphics1[i].type == MG_GRAPHIC)
{
attackmenu_graphics1[i].graphic = trap_R_RegisterShaderNoMip(attackmenu_graphics1[i].file);
}
}
s_main.logoModel = trap_R_RegisterModel( MAIN_LOGO_MODEL );
//RPG-X - TiM: main menu additional lcars shapes cache
s_main.graphic_12_8_LU = trap_R_RegisterShaderNoMip( "menu/common/corner_ul_8_12.tga" );
s_main.graphic_12_8_LL = trap_R_RegisterShaderNoMip( "menu/common/corner_ll_8_12.tga" );
s_main.graphic_12_8_RU = trap_R_RegisterShaderNoMip( "menu/common/corner_ur_8_12.tga" );
s_main.graphic_12_8_RL = trap_R_RegisterShaderNoMip( "menu/common/corner_lr_8_12.tga" );
s_main.graphic_16_12_LU = trap_R_RegisterShaderNoMip( "menu/common/corner_ul_16_12.tga" );
s_main.graphic_16_18_LL = trap_R_RegisterShaderNoMip( "menu/common/corner_ll_16_18.tga" );
//s_main.soundGrid = trap_R_RegisterShaderNoMip("menu/special/grid.tga");
//s_main.soundWaveform = trap_R_RegisterShaderNoMip("menu/special/wave3.tga");
s_main.activateSound = trap_S_RegisterSound( "sound/interface/button2.wav" );
}
/*
===============
UI_MainMenu_Init
===============
*/
static void UI_MainMenu_Init(void)
{
int i;
memset( &s_main, 0, sizeof(mainmenu_t) );
MainMenu_Cache();
Player_MenuInit();
//Spin Model init
uis.spinView = qfalse;
uis.lastYaw = 200;
//Set selected favs to NULL by default
s_main.selectedFav = -1;
//RPG-X Phenix/J2J
// BOOKMARK s_main.rpgxlogo = trap_R_RegisterModel( //
s_main.menu.draw = Main_MenuDraw;
s_main.menu.fullscreen = qtrue;
s_main.menu.wrapAround = qtrue;
s_main.menu.descX = MENU_DESC_X;
s_main.menu.descY = MENU_DESC_Y;
s_main.menu.titleX = MENU_TITLE_X;
s_main.menu.titleY = MENU_TITLE_Y;
s_main.menu.titleI = MNT_MAINMENU_TITLE;
s_main.menu.footNoteEnum = MNT_HOLOMATCHWEAPONRY;
s_main.multiplayer.generic.type = MTYPE_BITMAP;
s_main.multiplayer.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_main.multiplayer.generic.x = mm_buttons[0][0];
s_main.multiplayer.generic.y = mm_buttons[0][1];
s_main.multiplayer.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_main.multiplayer.generic.id = ID_MULTIPLAYER;
s_main.multiplayer.generic.callback = Main_MenuEvent;
s_main.multiplayer.width = MENU_BUTTON_MED_WIDTH;
s_main.multiplayer.height = MENU_BUTTON_MED_HEIGHT;
// COLOUR
s_main.multiplayer.color = CT_DKPURPLE1;
s_main.multiplayer.color2 = CT_LTPURPLE1;
s_main.multiplayer.textX = MENU_BUTTON_TEXT_X;
s_main.multiplayer.textY = MENU_BUTTON_TEXT_Y;
s_main.multiplayer.textEnum = MBT_MULTIPLAYER;
s_main.multiplayer.textcolor = CT_BLACK;
s_main.multiplayer.textcolor2 = CT_BLACK; //CT_WHITE;
s_main.setup.generic.type = MTYPE_BITMAP;
s_main.setup.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_main.setup.generic.x = mm_buttons[1][0];
s_main.setup.generic.y = mm_buttons[1][1];
s_main.setup.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_main.setup.generic.id = ID_SETUP;
s_main.setup.generic.callback = Main_MenuEvent;
s_main.setup.width = MENU_BUTTON_MED_WIDTH;
s_main.setup.height = MENU_BUTTON_MED_HEIGHT;
// COLOUR
s_main.setup.color = CT_DKPURPLE1;
s_main.setup.color2 = CT_LTPURPLE1;
s_main.setup.textX = MENU_BUTTON_TEXT_X;
s_main.setup.textY = MENU_BUTTON_TEXT_Y;
s_main.setup.textEnum = MBT_SETUP;
s_main.setup.textcolor = CT_BLACK;
s_main.setup.textcolor2 = CT_BLACK; //CT_WHITE;
s_main.demo.generic.type = MTYPE_BITMAP;
s_main.demo.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_main.demo.generic.x = mm_buttons[2][0];
s_main.demo.generic.y = mm_buttons[2][1];
s_main.demo.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_main.demo.generic.id = ID_DEMOS;
s_main.demo.generic.callback = Main_MenuEvent;
s_main.demo.width = MENU_BUTTON_MED_WIDTH;
s_main.demo.height = MENU_BUTTON_MED_HEIGHT;
// COLOUR
s_main.demo.color = CT_DKPURPLE1;
s_main.demo.color2 = CT_LTPURPLE1;
s_main.demo.textX = MENU_BUTTON_TEXT_X;
s_main.demo.textY = MENU_BUTTON_TEXT_Y;
s_main.demo.textEnum = MBT_DEMO;
s_main.demo.textcolor = CT_BLACK;
s_main.demo.textcolor2 = CT_BLACK; //CT_WHITE;
if (uis.demoversion)
{
s_main.demo.generic.flags |= QMF_GRAYED;
}
s_main.mods.generic.type = MTYPE_BITMAP;
s_main.mods.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_main.mods.generic.x = mm_buttons[3][0];
s_main.mods.generic.y = mm_buttons[3][1];
s_main.mods.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_main.mods.generic.id = ID_MODS;
s_main.mods.generic.callback = Main_MenuEvent;
s_main.mods.width = MENU_BUTTON_MED_WIDTH;
s_main.mods.height = MENU_BUTTON_MED_HEIGHT;
// COLOUR
s_main.mods.color = CT_DKPURPLE1;
s_main.mods.color2 = CT_LTPURPLE1;
s_main.mods.textX = MENU_BUTTON_TEXT_X;
s_main.mods.textY = MENU_BUTTON_TEXT_Y;
s_main.mods.textEnum = MBT_MODS;
s_main.mods.textcolor = CT_BLACK;
s_main.mods.textcolor2 = CT_BLACK; //CT_WHITE;
if (uis.demoversion)
{
s_main.mods.generic.flags |= QMF_GRAYED;
}
s_main.credits.generic.type = MTYPE_BITMAP;
s_main.credits.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_main.credits.generic.x = mm_buttons[4][0];
s_main.credits.generic.y = mm_buttons[4][1];
s_main.credits.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_main.credits.generic.id = ID_CREDITS;
s_main.credits.generic.callback = Main_MenuEvent;
s_main.credits.width = MENU_BUTTON_MED_WIDTH;
s_main.credits.height = MENU_BUTTON_MED_HEIGHT;
// COLOUR
s_main.credits.color = CT_DKPURPLE1;
s_main.credits.color2 = CT_LTPURPLE1;
s_main.credits.textX = MENU_BUTTON_TEXT_X;
s_main.credits.textY = MENU_BUTTON_TEXT_Y;
s_main.credits.textEnum = MBT_CREDITS;
s_main.credits.textcolor = CT_BLACK;
s_main.credits.textcolor2 = CT_BLACK; //CT_WHITE;
s_main.quit.generic.type = MTYPE_BITMAP;
s_main.quit.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_main.quit.generic.x = mm_buttons[5][0];
s_main.quit.generic.y = mm_buttons[5][1];
s_main.quit.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_main.quit.generic.id = ID_QUIT;
s_main.quit.generic.callback = Main_MenuEvent;
s_main.quit.width = MENU_BUTTON_MED_WIDTH;
s_main.quit.height = MENU_BUTTON_MED_HEIGHT;
// COLOUR
s_main.quit.color = CT_VDKRED1; //CT_DKPURPLE1;
s_main.quit.color2 = CT_DKRED1; //CT_LTPURPLE1;
s_main.quit.textX = MENU_BUTTON_TEXT_X;
s_main.quit.textY = MENU_BUTTON_TEXT_Y;
s_main.quit.textEnum = MBT_GAMEQUIT;
s_main.quit.textcolor = CT_BLACK;
s_main.quit.textcolor2 = CT_BLACK; //CT_WHITE;
s_main.mission.generic.type = MTYPE_BITMAP;
s_main.mission.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_main.mission.generic.x = 30;
s_main.mission.generic.y = 161;
s_main.mission.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_main.mission.generic.id = ID_DEMOS;
s_main.mission.generic.callback = Main_MenuEvent;
s_main.mission.width = MENU_BUTTON_MED_WIDTH;
s_main.mission.height = MENU_BUTTON_MED_HEIGHT;
// COLOUR
s_main.mission.color = CT_DKPURPLE1;
s_main.mission.color2 = CT_LTPURPLE1;
s_main.mission.textX = MENU_BUTTON_TEXT_X;
s_main.mission.textY = MENU_BUTTON_TEXT_Y;
s_main.mission.textEnum = MBT_MISSION;
s_main.mission.textcolor = CT_BLACK;
s_main.mission.textcolor2 = CT_BLACK; //CT_WHITE;
s_main.playerSettings.generic.type = MTYPE_BITMAP;
s_main.playerSettings.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_main.playerSettings.generic.x = 271;
s_main.playerSettings.generic.y = 416;
s_main.playerSettings.generic.callback = Main_MenuEvent;
s_main.playerSettings.generic.id = ID_PLAYER_SETTINGS;
s_main.playerSettings.generic.name = GRAPHIC_SQUARE;
s_main.playerSettings.width = 132;
s_main.playerSettings.height = MENU_BUTTON_MED_HEIGHT;
s_main.playerSettings.color = CT_DKPURPLE1;
s_main.playerSettings.color2 = CT_LTPURPLE1;
s_main.playerSettings.textX = MENU_BUTTON_TEXT_X;
s_main.playerSettings.textY = MENU_BUTTON_TEXT_Y;
s_main.playerSettings.textEnum = MBT_PLAYERDATA;
s_main.playerSettings.textcolor = CT_BLACK;
s_main.playerSettings.textcolor2 = CT_WHITE;
s_main.playerModel.generic.type = MTYPE_BITMAP;
s_main.playerModel.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_main.playerModel.generic.x = 460;
s_main.playerModel.generic.y = 416;
s_main.playerModel.generic.callback = Main_MenuEvent;
s_main.playerModel.generic.id = ID_PLAYER_MODEL;
s_main.playerModel.generic.name = GRAPHIC_SQUARE;
s_main.playerModel.width = 132;
s_main.playerModel.height = MENU_BUTTON_MED_HEIGHT;
s_main.playerModel.color = CT_DKPURPLE1;
s_main.playerModel.color2 = CT_LTPURPLE1;
s_main.playerModel.textX = MENU_BUTTON_TEXT_X;
s_main.playerModel.textY = MENU_BUTTON_TEXT_Y;
s_main.playerModel.textEnum = MBT_CHANGEMODEL;
s_main.playerModel.textcolor = CT_BLACK;
s_main.playerModel.textcolor2 = CT_WHITE;
s_main.upArrow.generic.type = MTYPE_BITMAP;
s_main.upArrow.generic.flags = QMF_INACTIVE | QMF_GRAYED;
s_main.upArrow.generic.x = 432;
s_main.upArrow.generic.y = 286;
s_main.upArrow.generic.name = PIC_ARROW_UP;
s_main.upArrow.generic.id = ID_LIST_UP;
s_main.upArrow.generic.callback = Main_MenuEvent;
s_main.upArrow.width = 16;
s_main.upArrow.height = 16;
s_main.upArrow.color = CT_DKPURPLE1;
s_main.upArrow.color2 = CT_LTPURPLE1;
s_main.upArrow.textcolor = CT_BLACK;
s_main.upArrow.textcolor2 = CT_WHITE;
s_main.dnArrow.generic.type = MTYPE_BITMAP;
s_main.dnArrow.generic.flags = QMF_INACTIVE | QMF_GRAYED;
s_main.dnArrow.generic.x = 453;
s_main.dnArrow.generic.y = 286;
s_main.dnArrow.generic.name = PIC_ARROW_DOWN;
s_main.dnArrow.generic.id = ID_LIST_DOWN;
s_main.dnArrow.generic.callback = Main_MenuEvent;
s_main.dnArrow.width = 16;
s_main.dnArrow.height = 16;
s_main.dnArrow.color = CT_DKPURPLE1;
s_main.dnArrow.color2 = CT_LTPURPLE1;
s_main.dnArrow.textcolor = CT_BLACK;
s_main.dnArrow.textcolor2 = CT_WHITE;
s_main.refresh.generic.type = MTYPE_BITMAP;
s_main.refresh.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_main.refresh.generic.x = 473;
s_main.refresh.generic.y = 283;
s_main.refresh.generic.callback = Main_MenuEvent;
s_main.refresh.generic.id = ID_REFRESH;
s_main.refresh.generic.name = GRAPHIC_SQUARE;
s_main.refresh.width = 63;
s_main.refresh.height = MENU_BUTTON_MED_HEIGHT;
s_main.refresh.color = CT_DKPURPLE1;
s_main.refresh.color2 = CT_LTPURPLE1;
s_main.refresh.textX = MENU_BUTTON_TEXT_X;
s_main.refresh.textY = MENU_BUTTON_TEXT_Y;
s_main.refresh.textEnum = MBT_REFRESH;
s_main.refresh.textcolor = CT_BLACK;
s_main.refresh.textcolor2 = CT_WHITE;
s_main.connect.generic.type = MTYPE_BITMAP;
s_main.connect.generic.flags = QMF_GRAYED | QMF_INACTIVE;
s_main.connect.generic.x = 539;
s_main.connect.generic.y = 283;
s_main.connect.generic.callback = Main_MenuEvent;
s_main.connect.generic.id = ID_CONNECT;
s_main.connect.generic.name = GRAPHIC_SQUARE;
s_main.connect.width = 58;
s_main.connect.height = MENU_BUTTON_MED_HEIGHT;
s_main.connect.color = CT_DKPURPLE1;
s_main.connect.color2 = CT_LTPURPLE1;
s_main.connect.textX = MENU_BUTTON_TEXT_X;
s_main.connect.textY = MENU_BUTTON_TEXT_Y;
s_main.connect.textEnum = MBT_ENGAGEMULTIPLAYER;
s_main.connect.textcolor = CT_BLACK;
s_main.connect.textcolor2 = CT_WHITE;
for ( i = 0; i < MAX_FAVBUTTONS; i++ ) {
s_main.favMenu[i].generic.type = MTYPE_BITMAP;
s_main.favMenu[i].generic.flags = QMF_SILENT | QMF_HIDDEN | QMF_INACTIVE;
s_main.favMenu[i].generic.x = 263;
s_main.favMenu[i].generic.y = 176 + ( 13 * i );
s_main.favMenu[i].generic.callback = Main_MenuEvent;
s_main.favMenu[i].generic.id = ID_FAV0+i;
s_main.favMenu[i].width = 332;
s_main.favMenu[i].height = 12;
}
Menu_AddItem( &s_main.menu, &s_main.multiplayer );
Menu_AddItem( &s_main.menu, &s_main.setup );
Menu_AddItem( &s_main.menu, &s_main.demo );
Menu_AddItem( &s_main.menu, &s_main.mods );
Menu_AddItem( &s_main.menu, &s_main.credits );
Menu_AddItem( &s_main.menu, &s_main.quit );
for ( i = 0; i < MAX_FAVBUTTONS; i++ )
Menu_AddItem( &s_main.menu, &s_main.favMenu[i] );
Menu_AddItem( &s_main.menu, &s_main.upArrow );
Menu_AddItem( &s_main.menu, &s_main.dnArrow );
Menu_AddItem( &s_main.menu, &s_main.refresh );
Menu_AddItem( &s_main.menu, &s_main.connect );
Menu_AddItem( &s_main.menu, &s_main.playerSettings);
Menu_AddItem( &s_main.menu, &s_main.playerModel );
s_main.currentWeapon = 0;
Menu_AddItem( &s_main.menu, ( void * )&s_main_playermdl);
// intialize the model
Player_InitModel();
uis.menusp = 0;
UI_PushMenu ( &s_main.menu );
if ( s_HolomatchInmenu.menu.initialized )
trap_S_StartLocalSound( s_main.activateSound, CHAN_LOCAL );
}
/*
===============
UI_MainMenu
The main menu only comes up when not in a game,
so make sure that the attract loop server is down
and that local cinematics are killed
===============
*/
void UI_MainMenu( void )
{
trap_Cvar_Set( "sv_killserver", "1" );
ingameFlag = qfalse; // true when ingame menu is in use
//#ifdef NDEBUG
if (!s_HolomatchInmenu.menu.initialized) // Haven't played Holomatch In menu yet
{
UI_HolomatchIn_Menu();
return;
}
//#endif
Mouse_Show();
// Get CD Key if it's never been checked before
if (!uis.demoversion && !trap_Cvar_VariableValue( "ui_cdkeychecked" ))
{
UI_CDKeyMenu2();
return;
}
if (!trap_Cvar_VariableValue( "ui_initialsetup" ))
{
UI_InitialSetupMenu();
return;
}
UI_MainMenu_Init();
//trap_Cvar_Set ("rpg_playIntro", "1"); Didnt work
trap_Key_SetCatcher( KEYCATCH_UI );
}
/*
=======================================================================
LCARS IN MENU
=======================================================================
*/
/*
=================
M_HolomatchIn_Key
=================
*/
static sfxHandle_t M_HolomatchIn_Key (int key)
{
// Advance to Main Menu
if ((key == K_SPACE) || (key == K_ENTER) || (key == K_ESCAPE) || (key == K_MOUSE1))
{
UI_PopMenu(); // Get rid of whatever is ontop
UI_MainMenu();
}
return ( menu_out_sound );
}
/*
===============
HolomatchInMenu_Draw
===============
*/
static void HolomatchInMenu_Draw(void)
{
int len,x,y;
x = 30;
y = 15;
// Top line
UI_DrawProportionalString(x, y, menu_normal_text[MNT_HOLOMATCH], UI_BIGFONT, colorTable[CT_LTGOLD1]);
trap_R_SetColor( colorTable[CT_LTORANGE]);
len = UI_ProportionalStringWidth( menu_normal_text[MNT_HOLOMATCH],UI_BIGFONT);
UI_DrawHandlePic( x + len + 6, y, 580 - (x + len + 6), 22, uis.whiteShader);
UI_DrawHandlePic( 584 , y, 32, 32, s_HolomatchInmenu.halfround);
trap_R_SetColor( colorTable[CT_WHITE]);
UI_DrawHandlePic( 175, 63, 316, 316, s_HolomatchInmenu.logo );
//UI_DrawHandlePic( 160, 62, 420, 420, s_HolomatchInmenu.logo);
UI_DrawProportionalString(320, 380, menu_normal_text[MNT_WELCOMETOHOLMATCH], UI_BIGFONT | UI_CENTER, colorTable[CT_LTGOLD1]);
// UI_DrawProportionalString(320, 360, menu_normal_text[MNT_ACCESSINGLCARS], UI_BIGFONT | UI_CENTER, colorTable[CT_WHITE]);
UI_DrawProportionalString(320, 450, menu_normal_text[MNT_PARAMOUNT_LEGAL], UI_TINYFONT | UI_CENTER, colorTable[CT_MDGREY]);
UI_DrawProportionalString(320, 465, menu_normal_text[MNT_ID_LEGAL], UI_TINYFONT | UI_CENTER, colorTable[CT_MDGREY]);
// Bottom line
UI_DrawProportionalString(610, 422, menu_normal_text[MNT_HOLODECK1], UI_SMALLFONT | UI_RIGHT, colorTable[CT_LTGOLD1]);
trap_R_SetColor( colorTable[CT_LTORANGE]);
len = UI_ProportionalStringWidth( menu_normal_text[MNT_HOLODECK1],UI_SMALLFONT);
UI_DrawHandlePic( x, 420, (610 - (len + 4)) - x, 18, uis.whiteShader);
UI_DrawProportionalString(320, 450, menu_normal_text[MNT_PARAMOUNT_LEGAL], UI_TINYFONT | UI_CENTER, colorTable[CT_MDGREY]);
UI_DrawProportionalString(320, 465, menu_normal_text[MNT_ID_LEGAL], UI_TINYFONT | UI_CENTER, colorTable[CT_MDGREY]);
if (federationTimer < uis.realtime)
{
UI_PopMenu(); // Get rid of whatever is ontop
UI_MainMenu();
}
}
/*
===============
HolomatchInMenu_Cache
===============
*/
void UI_HolomatchInMenu_Cache (void)
{
s_HolomatchInmenu.inSound = trap_S_RegisterSound( "sound/voice/computer/rpg-x/welcome.wav" );
s_HolomatchInmenu.logo = trap_R_RegisterShaderNoMip( "menu/special/rpgx_logo.tga" ); //menu/special/holo_logo.tga
s_HolomatchInmenu.halfround = trap_R_RegisterShaderNoMip( "menu/common/halfroundr_22.tga" );
}
void UI_PlayIntroCinematic( void )
{
if ( !uis.playCinematic ) { //&& ( trap_Milliseconds() <=5000 )
uis.playCinematic = qtrue; //FIXME: Duhhh I'm a stupid function that completely ignores the value of uis.playCinematic O_o
//Com_Printf( "qtrue" );
trap_Cmd_ExecuteText( EXEC_APPEND, "wait 5; wait 5; cinematic rpgx_intro.roq \n" );
}
}
/*
===============
HolomatchInMenu_Init
===============
*/
static void HolomatchInMenu_Init(void)
{
UI_HolomatchInMenu_Cache();
s_HolomatchInmenu.menu.nitems = 0;
s_HolomatchInmenu.menu.wrapAround = qtrue;
s_HolomatchInmenu.menu.draw = HolomatchInMenu_Draw;
s_HolomatchInmenu.menu.key = M_HolomatchIn_Key;
s_HolomatchInmenu.menu.fullscreen = qtrue;
s_HolomatchInmenu.menu.descX = 0;
s_HolomatchInmenu.menu.descY = 0;
s_HolomatchInmenu.menu.titleX = 0;
s_HolomatchInmenu.menu.titleY = 0;
s_HolomatchInmenu.menu.titleI = MNT_NONE;
s_HolomatchInmenu.menu.initialized = qtrue;
//trap_S_StartLocalSound( s_HolomatchInmenu.inSound,CHAN_MENU1);
federationTimer = uis.realtime + 12000; //12000
//if (trap_Cvar_VariableValue ("rpg_playIntro") == 1) { trap_Cvar_Set ("rpg_playIntro", "0"); UI_PlayIntroCinematic(); }
}
/*
===============
UI_HolomatchIn_Menu
===============
*/
static void UI_HolomatchIn_Menu(void)
{
Mouse_Hide();
HolomatchInMenu_Init();
UI_PushMenu ( &s_HolomatchInmenu.menu );
trap_Key_SetCatcher( KEYCATCH_UI );
}
/*
=======================================================================
LCARS OUT MENU
=======================================================================
*/
/*
=================
M_LCARSOut_Key
=================
*/
static sfxHandle_t M_Leaving_Key (int key)
{
// Get out now!!
if ((key == K_SPACE) || (key == K_ENTER) || (key == K_ESCAPE) || (key == K_MOUSE1))
{
federationTimer = 0; // Get out of game now!!!
return(0);
}
return ( Menu_DefaultKey( &s_leaving_menu.menu, key ) );
}
/*
===============
LeavingMenu_Draw
===============
*/
static void LeavingMenu_Draw(void)
{
int len,x,y;
x = 30;
y = 15;
// Top line
UI_DrawProportionalString(x, y, menu_normal_text[MNT_HOLOMATCH], UI_BIGFONT, colorTable[CT_LTGOLD1]);
trap_R_SetColor( colorTable[CT_LTORANGE]);
len = UI_ProportionalStringWidth( menu_normal_text[MNT_HOLOMATCH],UI_BIGFONT);
UI_DrawHandlePic( x + len + 6, y, 580 - (x + len + 6), 22, uis.whiteShader);
UI_DrawHandlePic( 584 , y, 32, 32, s_leaving_menu.halfround);
trap_R_SetColor( colorTable[CT_WHITE]);
UI_DrawHandlePic( 170, 80, 280, 280, s_leaving_menu.logo);
UI_DrawProportionalString(320, 360, menu_normal_text[MNT_CLOSINGLCARS], UI_BIGFONT | UI_CENTER, colorTable[CT_WHITE]);
// Bottom line
UI_DrawProportionalString(610, 422, menu_normal_text[MNT_HOLODECK1], UI_SMALLFONT | UI_RIGHT, colorTable[CT_LTGOLD1]);
trap_R_SetColor( colorTable[CT_LTORANGE]);
len = UI_ProportionalStringWidth( menu_normal_text[MNT_HOLODECK1],UI_SMALLFONT);
UI_DrawHandlePic( x, 420, (610 - (len + 4)) - x, 18, uis.whiteShader);
UI_DrawProportionalString(320, 450, menu_normal_text[MNT_PARAMOUNT_LEGAL], UI_TINYFONT | UI_CENTER, colorTable[CT_MDGREY]);
UI_DrawProportionalString(320, 465, menu_normal_text[MNT_ID_LEGAL], UI_TINYFONT | UI_CENTER, colorTable[CT_MDGREY]);
// Leave game
if (federationTimer < uis.realtime)
{
//trap_Cvar_Set ("rpg_playIntro", "1");
trap_Cmd_ExecuteText( EXEC_NOW, "quit\n" );
}
}
/*
===============
LeavingMenu_Cache
===============
*/
void LeavingMenu_Cache (void)
{
s_leaving_menu.logo = trap_R_RegisterShaderNoMip("menu/special/rpgx_logo.tga");
s_leaving_menu.halfround = trap_R_RegisterShaderNoMip( "menu/common/halfroundr_22.tga" );
s_leaving_menu.logoutsnd = trap_S_RegisterSound( "sound/voice/computer/menu/logout.wav" );
}
/*
===============
LCARSOutMenu_Init
===============
*/
static void LeavingMenu_Init(void)
{
LeavingMenu_Cache();
s_leaving_menu.menu.nitems = 0;
s_leaving_menu.menu.wrapAround = qtrue;
s_leaving_menu.menu.draw = LeavingMenu_Draw;
s_leaving_menu.menu.key = M_Leaving_Key;
s_leaving_menu.menu.fullscreen = qtrue;
s_leaving_menu.menu.descX = 0;
s_leaving_menu.menu.descY = 0;
s_leaving_menu.menu.titleX = 0;
s_leaving_menu.menu.titleY = 0;
s_leaving_menu.menu.titleI = MNT_NONE;
federationTimer = uis.realtime + 3000;
//trap_Cvar_Set ("rpg_playIntro", "1");
trap_S_StartLocalSound( s_leaving_menu.logoutsnd, CHAN_MENU1 );
}
/*
===============
UI_Leaving_Menu
===============
*/
static void UI_Leaving_Menu(void)
{
LeavingMenu_Init();
UI_PushMenu ( &s_leaving_menu.menu );
trap_Key_SetCatcher( KEYCATCH_UI );
}
/*
=================
UI_Setup_MenuButtons
=================
*/
void UI_Setup_MenuButtons(void)
{
int i,max;
trap_R_SetColor( colorTable[CT_DKPURPLE1]);
max=7;
for (i=0;i<max;++i)
{
UI_DrawHandlePic(setup_menubuttons[i][0] - 14,setup_menubuttons[i][1], MENU_BUTTON_MED_HEIGHT, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd);
}
}
/*
=================
M_Quit_SplitDesc
=================
*/
/*static void M_Quit_SplitDesc(int descI)
{
int lineWidth,currentWidth,charCnt,currentLineI;
const char *s, *holds;
char holdChar[2];
// Clean out any old data
memset(systemDesc,0,sizeof(systemDesc));
// Break into individual lines
s = menu_normal_text[quitmenu_graphics[descI].normaltextEnum];
holds = s;
lineWidth = 228; // How long (in pixels) a line can be
currentWidth = 0;
holdChar[1] = '\0';
charCnt= 0;
currentLineI = 0;
while( *s )
{
charCnt++;
holdChar[0] = *s;
currentWidth += UI_ProportionalStringWidth(holdChar,UI_TINYFONT);
currentWidth +=1; // The space between characters
if ( currentWidth >= lineWidth )
{//Reached max length of this line
//step back until we find a space
while((currentWidth) && (*s != ' '))
{
holdChar[0] = *s;
currentWidth -= UI_ProportionalStringWidth(holdChar,UI_TINYFONT);
s--;
charCnt--;
}
Q_strncpyz( systemDesc[currentLineI], holds, charCnt);
systemDesc[currentLineI][charCnt] = 0;
currentLineI++;
currentWidth = 0;
charCnt = 0;
holds = s;
holds++;
if (currentLineI > SYSTEM_MAXDESC)
{
currentLineI = (SYSTEM_MAXDESC -1);
break;
}
}
++s;
}
++charCnt; // So the NULL will be properly placed at the end of the string of Q_strncpyz
Q_strncpyz( systemDesc[currentLineI], holds, charCnt);
systemDesc[currentLineI][charCnt] = 0;
}*/
/*
=================
QuitMenu_Label
=================
*/
/*menutext_s *QuitMenu_Label(int labelId)
{
menutext_s *label;
switch(labelId)
{
case QMG_PHASER_LABEL :
label = &s_quit.phaser_label;
break;
case QMG_TORPEDO_LABEL :
label = &s_quit.torpedo_label;
break;
case QMG_VENTRAL_LABEL :
label = &s_quit.ventral_label;
break;
case QMG_MIDHULL_LABEL :
label = &s_quit.midhull_label;
break;
case QMG_BUSSARD_LABEL :
label = &s_quit.bussard_label;
break;
case QMG_NACELLES_LABEL :
label = &s_quit.nacelles_label;
break;
case QMG_THRUSTERS_LABEL :
label = &s_quit.thrusters_label;
break;
case QMG_BRIDGE_LABEL :
label = &s_quit.bridge_label;
break;
case QMG_VOYAGER_LABEL :
label = &s_quit.voyager_label;
break;
default:
label = &s_quit.bridge_label;
break;
}
return(label);
}*/
/*
=================
QuitMenuInterrupt
=================
*/
static void QuitMenuInterrupt(int labelId)
{
// ten seconds from now, start the auto animation again
quitmenu_graphics[QMG_ACTIVE_SYSTEM].timer = uis.realtime + 10000;
}
/*
=================
QuitMenu_ChangeAreaFocus
=================
*/
/*static void QuitMenu_ChangeAreaFocus(int newSystem)
{
int swoopI;
int descI;
int oldSystem;
menubitmap_s *bitmap;
menutext_s *oldLabel,*newLabel;
// Turn off current system info
oldSystem = quitmenu_graphics[QMG_ACTIVE_SYSTEM].target;
// Turn old label brown
oldLabel = QuitMenu_Label(oldSystem);
oldLabel->color = colorTable[CT_DKBROWN1];
// Turn off swoop
swoopI = quitmenu_graphics[oldSystem].target;
if (swoopI)
{
quitmenu_graphics[swoopI].type = MG_OFF;
}
// Turn pic off
if (quitmenu_graphics[oldSystem].pointer)
{
bitmap = (menubitmap_s *) quitmenu_graphics[oldSystem].pointer;
if (oldSystem == QMG_VOYAGER_LABEL) //Voyager graphic can't be hidden
{
bitmap->color = CT_LTBLUE1;
}
else
{
bitmap->generic.flags |= QMF_HIDDEN;
}
}
// Turning on the new system graphics
quitmenu_graphics[QMG_ACTIVE_SYSTEM].target = newSystem;
// Turn on new label
newLabel = QuitMenu_Label(newSystem);
newLabel->color = colorTable[CT_YELLOW];
// Turn on system description
descI = quitmenu_graphics[newSystem].min;
if (descI)
{
M_Quit_SplitDesc(descI);
}
// Turn on pic
if (quitmenu_graphics[newSystem].pointer)
{
bitmap = (menubitmap_s *) quitmenu_graphics[newSystem].pointer;
bitmap->generic.flags &= ~QMF_HIDDEN;
if (newSystem == QMG_VOYAGER_LABEL) //Voyager graphic can't be hidden
{
bitmap->color = CT_LTGOLD1;
}
}
// Turn onswoop
swoopI = quitmenu_graphics[newSystem].target;
if (swoopI)
{
quitmenu_graphics[swoopI].type = MG_GRAPHIC;
}
}*/
/*
===============
M_Quit_Event
===============
*/
static void M_Quit_Event (void* ptr, int notification)
{
if (notification != QM_ACTIVATED)
return;
switch (((menucommon_s*)ptr)->id)
{
case ID_MAINMENU:
UI_PopMenu ();
break;
case ID_NO:
UI_PopMenu ();
break;
case ID_YES:
UI_Leaving_Menu();
// trap_Cmd_ExecuteText( EXEC_NOW, "quit\n" );
break;
}
}
/*
===============
Quit_MenuKey
===============
*/
static sfxHandle_t Quit_MenuKey( int key )
{
switch ( key )
{
case K_KP_LEFTARROW:
case K_LEFTARROW:
case K_KP_RIGHTARROW:
case K_RIGHTARROW:
key = K_TAB;
break;
case 'n':
case 'N':
M_Quit_Event( &s_quit.no, QM_ACTIVATED );
break;
case 'y':
case 'Y':
M_Quit_Event( &s_quit.yes, QM_ACTIVATED );
break;
}
return ( Menu_DefaultKey( &s_quit.menu, key ) );
}
/*
===============
Quit_MenuBlinkies
===============
*/
static void Quit_MenuBlinkies( void )
{
int /*activeSystem,*/i;
// Move bottom blip
if ( quitmenu_graphics[QMG_BOTTOM_BLIP].timer < uis.realtime )
{
quitmenu_graphics[QMG_BOTTOM_BLIP].x += 7;
quitmenu_graphics[QMG_BOTTOM_BLIP2].x = quitmenu_graphics[QMG_BOTTOM_BLIP].x;
/*if (quitmenu_graphics[QMG_BOTTOM_BLIP].x > quitmenu_graphics[QMG_BOTTOM_BLIP].max)
{
trap_S_StartLocalSound(s_quit.pingsound, CHAN_MENU1);
quitmenu_graphics[QMG_BOTTOM_BLIP].x = quitmenu_graphics[QMG_BOTTOM_BLIP].min;
quitmenu_graphics[QMG_BOTTOM_BLIP2].x = quitmenu_graphics[QMG_BOTTOM_BLIP].min;
}*/
// Middle ping?
/*if ((quitmenu_graphics[QMG_BOTTOM_BLIP].x > 304) &&
(quitmenu_graphics[QMG_BOTTOM_BLIP].x < 314))
{
trap_S_StartLocalSound(s_quit.pingsound, CHAN_LOCAL);
}*/
quitmenu_graphics[QMG_BOTTOM_BLIP].timer = uis.realtime + 75;
}
// Time to change systems???
/*if ( quitmenu_graphics[QMG_ACTIVE_SYSTEM].timer < uis.realtime )
{
activeSystem = quitmenu_graphics[QMG_ACTIVE_SYSTEM].target;
// Change again in five seconds
quitmenu_graphics[QMG_ACTIVE_SYSTEM].timer = uis.realtime + 5000;
// Advance to next system
++activeSystem;
if (activeSystem >= QMG_LABEL_END) // Past max strings
{
activeSystem = QMG_LABEL_START +1; // Reset
}
QuitMenu_ChangeAreaFocus(activeSystem);
trap_S_StartLocalSound( uis.menu_choice1_snd, CHAN_MENU1 ); // Ping!
}*/
// Generate new numbers
if ((quitmenu_graphics[QMG_NUMBERS].timer < uis.realtime) && (quitmenu_graphics[QMG_NUMBERS].target==5))
{
for (i=0;i<5;++i)
{
quitmenu_graphics[i + QMG_COL1_NUM1].target = (random() * (900000000)) + 99999999;
quitmenu_graphics[i + QMG_COL3_NUM1].target = (random() * (900000000)) + 99999999;
quitmenu_graphics[i + QMG_COL4_NUM1].target = (random() * (900000000)) + 99999999;
}
for (i=0;i<5;++i)
{
quitmenu_graphics[i + QMG_COL2_NUM1].target = (random() * (900000)) + 99999;
}
for (i=0;i<5;++i)
{
quitmenu_graphics[i + QMG_COL5_NUM1].target = (random() * (90)) + 9;
quitmenu_graphics[i + QMG_COL6_NUM1].target = (random() * (90)) + 9;
}
quitmenu_graphics[QMG_NUMBERS].target=1;
// Turn off all but the first row
for (i=0;i<4;++i)
{
quitmenu_graphics[i + QMG_COL1_NUM2].type = MG_OFF;
quitmenu_graphics[i + QMG_COL2_NUM2].type = MG_OFF;
quitmenu_graphics[i + QMG_COL3_NUM2].type = MG_OFF;
quitmenu_graphics[i + QMG_COL4_NUM2].type = MG_OFF;
quitmenu_graphics[i + QMG_COL5_NUM2].type = MG_OFF;
quitmenu_graphics[i + QMG_COL6_NUM2].type = MG_OFF;
}
}
// Activate the next row of numbers. When at the last row wait and then generate new numbers
else if ((quitmenu_graphics[QMG_NUMBERS].timer < uis.realtime) && (quitmenu_graphics[QMG_NUMBERS].target<5))
{
trap_S_StartLocalSound( uis.menu_datadisp1_snd, CHAN_LOCAL ); //
quitmenu_graphics[QMG_NUMBERS].timer = uis.realtime + 50;
i = quitmenu_graphics[QMG_NUMBERS].target;
quitmenu_graphics[i + QMG_COL1_NUM1].type = MG_NUMBER;
quitmenu_graphics[i + QMG_COL2_NUM1].type = MG_NUMBER;
quitmenu_graphics[i + QMG_COL3_NUM1].type = MG_NUMBER;
quitmenu_graphics[i + QMG_COL4_NUM1].type = MG_NUMBER;
quitmenu_graphics[i + QMG_COL5_NUM1].type = MG_NUMBER;
quitmenu_graphics[i + QMG_COL6_NUM1].type = MG_NUMBER;
++quitmenu_graphics[QMG_NUMBERS].target;
if (quitmenu_graphics[QMG_NUMBERS].target == 5)
{
quitmenu_graphics[QMG_NUMBERS].timer = uis.realtime + 6000;
}
}
}
/*
===============
Quit_MenuDraw
===============
*/
static void Quit_MenuDraw( void )
{
int i,y;
// Draw the basic screen layout
UI_MenuFrame(&s_quit.menu);
UI_DrawProportionalString( 74, 66, "6881",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 84, "2-099",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 395, "45677",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
trap_R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(30,364, 47, 25, uis.whiteShader); // Left hand column
UI_DrawHandlePic(80,364, 247, 7, uis.whiteShader); // Top line above CONFIDENTIAL
UI_DrawHandlePic(334,386, 30, 50, uis.whiteShader); // LH Middle column
UI_DrawHandlePic(327,364, 64, 64, s_quit.swoop1); //
UI_DrawHandlePic(334,386, 30, 50, uis.whiteShader); // LH Middle column
UI_DrawHandlePic(367,379, 15, 57, uis.whiteShader); // RH Middle column
UI_DrawHandlePic(387,364, 225, 7, uis.whiteShader); // Top line above systems description
UI_DrawHandlePic(367,364, 32, 32, s_quit.swoop2); //
UI_DrawProportionalString( 74, 368, "2166",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
// Leave Voyager box
trap_R_SetColor( colorTable[CT_DKBROWN1]);
UI_DrawHandlePic(301, 57, 64, 32, s_quit.corner_ur); // Corner
UI_DrawHandlePic( 81, 57, 224, 18, uis.whiteShader); // Top
UI_DrawHandlePic(305, 74, 60, 62, uis.whiteShader); // Right side
UI_DrawProportionalString(157,58,menu_normal_text[MNT_QUIT_ELITE_FORCE], UI_BLINK | UI_SMALLFONT, colorTable[CT_LTGOLD1] );
//block under the picture
trap_R_SetColor( colorTable[CT_DKBROWN1]);
UI_DrawHandlePic( 30, 353, 47, 8, uis.whiteShader);
// Litte squares off to the side of the LEAVE VOYAGER Yes/No buttons
trap_R_SetColor( colorTable[CT_DKPURPLE1]);
UI_DrawHandlePic(140,81, 8, MENU_BUTTON_MED_HEIGHT, uis.whiteShader); // LEAVE VOYAGER?
UI_DrawHandlePic(140,81 + MENU_BUTTON_MED_HEIGHT + 6, 8, MENU_BUTTON_MED_HEIGHT, uis.whiteShader); // LEAVE VOYAGER?
trap_R_SetColor( colorTable[CT_BLACK]);
UI_DrawHandlePic(30, 164, 47, 3, uis.whiteShader); // Upper left hand blip columns
UI_DrawHandlePic(30, 175, 47, 25, uis.whiteShader); // Upper left hand blip columns
/*trap_R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(30, 167, 47, 8, uis.whiteShader); // Blip columns
UI_DrawHandlePic(565, 167, 47, 8, uis.whiteShader); // Blip columns
trap_R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(30, 353, 47, 8, uis.whiteShader); // Blip columns
UI_DrawHandlePic(565,353, 47, 8, uis.whiteShader); // Blip columns*/
//RPG-X Fling
UI_DrawProportionalString(97, 380, menu_normal_text[MNT_STARTREK1], UI_SMALLFONT, colorTable[CT_LTBROWN1] );
UI_DrawProportionalString(97, 400, menu_normal_text[MNT_STARTREK2], UI_SMALLFONT, colorTable[CT_LTBROWN1] );
UI_DrawProportionalString(97, 426, menu_normal_text[MNT_FORMOREINFO], UI_TINYFONT, colorTable[CT_LTBROWN1] );
//UberGames Fling
UI_DrawProportionalString(610, 380, menu_normal_text[MNT_UBERGAMES], UI_SMALLFONT|UI_RIGHT, colorTable[CT_LTBROWN1] );
UI_DrawProportionalString(610, 398, menu_normal_text[MNT_UBERGAMES2], UI_TINYFONT|UI_RIGHT, colorTable[CT_LTBROWN1] );
UI_DrawProportionalString(610, 426, menu_normal_text[MNT_UBERGAMESINFO], UI_TINYFONT|UI_RIGHT, colorTable[CT_LTBROWN1] );
//draw the giant banner
UI_DrawHandleStretchPic( 30, 178, 582, 172, 0, 0, 0.97412, 1.0, s_quit.quitBanner );
trap_R_SetColor( colorTable[CT_NONE]);
Menu_Draw( &s_quit.menu );
Quit_MenuBlinkies();
UI_PrintMenuGraphics(quitmenu_graphics,QMG_MAX);
y = 374;
for (i=0;i<SYSTEM_MAXDESC;++i)
{
UI_DrawProportionalString(384, y, systemDesc[i],UI_TINYFONT,colorTable[CT_LTGOLD1]);
y += 12;
}
}
/*
===============
UI_QuitMenu_Cache
===============
*/
void UI_QuitMenu_Cache( void )
{
s_quit.corner_ur = trap_R_RegisterShaderNoMip("menu/common/corner_ur_18_60.tga");
s_quit.swoop1 = trap_R_RegisterShaderNoMip("menu/common/corner_ur_7_30.tga");
s_quit.swoop2 = trap_R_RegisterShaderNoMip("menu/common/corner_ul_7_15.tga");
s_quit.quitBanner = trap_R_RegisterShaderNoMip("gfx/2d/quit_banner.tga");
//s_quit.pingsound = trap_S_RegisterSound( "sound/interface/sensorping.wav" );
/*trap_R_RegisterShaderNoMip(PIC_PHASER_STRIP);
trap_R_RegisterShaderNoMip(PIC_PHOTON_LAUNCHER);
trap_R_RegisterShaderNoMip(PIC_BOTTOM_STRIP);
trap_R_RegisterShaderNoMip(PIC_MID_HULL);
trap_R_RegisterShaderNoMip(PIC_WARPNAC);
trap_R_RegisterShaderNoMip(PIC_BUSSARD);
trap_R_RegisterShaderNoMip(PIC_RCS);
trap_R_RegisterShaderNoMip(PIC_BRIDGE);
trap_R_RegisterShaderNoMip(PIC_VOYAGER);*/
// Precache all menu graphics in array
UI_PrecacheMenuGraphics(quitmenu_graphics,QMG_MAX);
}
/*
=================
UI_QuitMenu
=================
*/
static void Quit_MenuInit(void)
{
int y,x,i;
UI_QuitMenu_Cache();
s_quit.menu.nitems = 0;
s_quit.menu.draw = Quit_MenuDraw;
s_quit.menu.key = Quit_MenuKey;
s_quit.menu.wrapAround = qtrue;
s_quit.menu.descX = MENU_DESC_X;
s_quit.menu.descY = MENU_DESC_Y;
s_quit.menu.titleX = MENU_TITLE_X;
s_quit.menu.titleY = MENU_TITLE_Y;
s_quit.menu.titleI = MNT_QUITMENU_TITLE;
s_quit.menu.footNoteEnum = MNT_SHIP_SYSTEMS;
s_quit.menu.fullscreen = qtrue;
s_quit.mainmenu.generic.type = MTYPE_BITMAP;
s_quit.mainmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_quit.mainmenu.generic.x = 482;
s_quit.mainmenu.generic.y = 136;
s_quit.mainmenu.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_quit.mainmenu.generic.id = ID_MAINMENU;
s_quit.mainmenu.generic.callback = M_Quit_Event;
s_quit.mainmenu.width = MENU_BUTTON_MED_WIDTH;
s_quit.mainmenu.height = MENU_BUTTON_MED_HEIGHT;
s_quit.mainmenu.color = CT_DKPURPLE1;
s_quit.mainmenu.color2 = CT_LTPURPLE1;
s_quit.mainmenu.textX = MENU_BUTTON_TEXT_X;
s_quit.mainmenu.textY = MENU_BUTTON_TEXT_Y;
s_quit.mainmenu.textEnum = MBT_MAINMENU;
s_quit.mainmenu.textcolor = CT_BLACK;
s_quit.mainmenu.textcolor2 = CT_BLACK; //CT_WHITE;
y = 81;
x = 152;
s_quit.yes.generic.type = MTYPE_BITMAP;
s_quit.yes.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_quit.yes.generic.x = x;
s_quit.yes.generic.y = y;
s_quit.yes.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_quit.yes.generic.id = ID_YES;
s_quit.yes.generic.callback = M_Quit_Event;
s_quit.yes.width = MENU_BUTTON_MED_WIDTH;
s_quit.yes.height = MENU_BUTTON_MED_HEIGHT;
s_quit.yes.color = CT_DKPURPLE1;
s_quit.yes.color2 = CT_LTPURPLE1;
s_quit.yes.textX = MENU_BUTTON_TEXT_X;
s_quit.yes.textY = MENU_BUTTON_TEXT_Y;
s_quit.yes.textEnum = MBT_QUITGAME_YES;
s_quit.yes.textcolor = CT_BLACK;
s_quit.yes.textcolor2 = CT_BLACK; //CT_WHITE;
s_quit.no.generic.type = MTYPE_BITMAP;
s_quit.no.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_quit.no.generic.x = x;
s_quit.no.generic.y = y + MENU_BUTTON_MED_HEIGHT + 6;
s_quit.no.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_quit.no.generic.id = ID_NO;
s_quit.no.generic.callback = M_Quit_Event;
s_quit.no.width = MENU_BUTTON_MED_WIDTH;
s_quit.no.height = MENU_BUTTON_MED_HEIGHT;
s_quit.no.color = CT_DKPURPLE1;
s_quit.no.color2 = CT_LTPURPLE1;
s_quit.no.textX = MENU_BUTTON_TEXT_X;
s_quit.no.textY = MENU_BUTTON_TEXT_Y;
s_quit.no.textEnum = MBT_QUITGAME_NO;
s_quit.no.textcolor = CT_BLACK;
s_quit.no.textcolor2 = CT_BLACK; //CT_WHITE;
Menu_AddItem( &s_quit.menu, &s_quit.mainmenu );
Menu_AddItem( &s_quit.menu, &s_quit.no );
Menu_AddItem( &s_quit.menu, &s_quit.yes );
s_quit.menu.initialized = qtrue;
quitmenu_graphics[QMG_BOTTOM_BLIP].x = quitmenu_graphics[QMG_BOTTOM_BLIP].min;
quitmenu_graphics[QMG_BOTTOM_BLIP2].x = quitmenu_graphics[QMG_BOTTOM_BLIP].x;
quitmenu_graphics[QMG_BOTTOM_BLIP].timer = uis.realtime + 50;
// Turn off swoops
for (i=QMG_SWOOP_START+1;i<QMG_SWOOP_END;++i)
{
quitmenu_graphics[i].type = CT_LTGREY;
}
// Turn off descriptions
for (i=QMG_DESC_START+1;i<QMG_DESC_END;++i)
{
quitmenu_graphics[i].type = MG_OFF;
}
// Set labels to brown
for (i=(QMG_LABEL_START+1);i<QMG_LABEL_END;++i)
{
quitmenu_graphics[i].color = CT_DKBROWN1;
}
// Turn on active system info
quitmenu_graphics[QMG_ACTIVE_SYSTEM].timer = uis.realtime + 100; // When to change to next system
quitmenu_graphics[QMG_ACTIVE_SYSTEM].target = QMG_LABEL_END - 1; // Give it an old system to turn off
// Force numbers to change
quitmenu_graphics[QMG_NUMBERS].timer = 0; // To get numbers right away
quitmenu_graphics[QMG_NUMBERS].target=5;
}
/*
=================
UI_QuitMenu
=================
*/
void UI_QuitMenu( void )
{
//f (!s_quit.menu.initialized)
//
Quit_MenuInit();
//
UI_PushMenu( &s_quit.menu );
}