From d090ed8331aadfb122b79168d15193fb81906ea2 Mon Sep 17 00:00:00 2001 From: Victor Chow Date: Wed, 14 Nov 2001 05:04:59 +0000 Subject: [PATCH] Elder: VM 0-20-00 UI --- reaction/ui/ui_controls2.c | 372 +++++++++++++++++++++++---------- reaction/ui/ui_ingame.c | 10 +- reaction/ui/ui_preferences.c | 2 +- reaction/ui/ui_servers2.c | 88 ++++++-- reaction/ui/ui_specifyserver.c | 90 ++++++-- reaction/ui/ui_startserver.c | 10 +- 6 files changed, 419 insertions(+), 153 deletions(-) diff --git a/reaction/ui/ui_controls2.c b/reaction/ui/ui_controls2.c index e0c246e9..3f27f482 100644 --- a/reaction/ui/ui_controls2.c +++ b/reaction/ui/ui_controls2.c @@ -21,6 +21,12 @@ CONTROLS MENU //Elder: RQ3 Setup assets #define RQ3_SETUP_ICON "menu/art/rq3-setup-controls.jpg" #define RQ3_SETUP_TITLE "menu/art/rq3-title-setup.jpg" +#define RQ3_FOCUS_BUTTON "menu/art/rq3-menu-focus.tga" +#define RQ3_LOOKING_BUTTON "menu/art/rq3-controls-looking.jpg" +#define RQ3_MOVEMENT_BUTTON "menu/art/rq3-controls-movement.jpg" +#define RQ3_WEAPONS_BUTTON "menu/art/rq3-controls-weapons.jpg" +#define RQ3_MISC_BUTTON "menu/art/rq3-controls-misc.jpg" +#define RQ3_REACTION_BUTTON "menu/art/rq3-controls-reaction.jpg" typedef struct { @@ -172,15 +178,23 @@ typedef struct //Elder: RQ3 Stuff menubitmap_s rq3_setupicon; menubitmap_s rq3_setuptitle; + menutext_s rq3_statustext; menubitmap_s player; - + + /* menutext_s movement; menutext_s looking; menutext_s weapons; menutext_s misc; + */ + menubitmap_s movement; + menubitmap_s looking; + menubitmap_s weapons; + menubitmap_s misc; + //Blaze: Reaction Menu - menutext_s reaction; + menubitmap_s reaction; menuaction_s walkforward; menuaction_s backpedal; @@ -278,15 +292,15 @@ static bind_t g_bindings[] = {"+zoom", "zoom view", ID_ZOOMVIEW, ANIM_IDLE, -1, -1, -1, -1}, //Blaze: Reaction Weapon binds //Jbravo: order is important. - {"weapon 1", "MK23 Pistol", ID_WEAPON1, ANIM_WEAPON1, '1', -1, -1, -1}, - {"weapon 2", "M3 Super 90 Assault Shotgun", ID_WEAPON2, ANIM_WEAPON2, '2', -1, -1, -1}, - {"weapon 3", "MP5/10 Submachinegun", ID_WEAPON3, ANIM_WEAPON3, '3', -1, -1, -1}, - {"weapon 4", "Handcannon", ID_WEAPON4, ANIM_WEAPON4, '4', -1, -1, -1}, - {"weapon 5", "Sniper Rifle", ID_WEAPON5, ANIM_WEAPON5, '5', -1, -1, -1}, - {"weapon 6", "M4 Assault Rifle", ID_WEAPON6, ANIM_WEAPON6, '6', -1, -1, -1}, - {"weapon 7", "Dual MK23 Pistols", ID_WEAPON7, ANIM_WEAPON7, '7', -1, -1, -1}, - {"weapon 8", "Combat Knife", ID_WEAPON8, ANIM_WEAPON8, '8', -1, -1, -1}, - {"weapon 9", "M26 Fragmentation Grenade", ID_WEAPON9, ANIM_WEAPON9, '9', -1, -1, -1}, + {"weapon 1", "MK23 Pistol", ID_WEAPON1, ANIM_WEAPON1, '1', -1, -1, -1}, + {"weapon 2", "M3 Assault Shotgun", ID_WEAPON2, ANIM_WEAPON2, '2', -1, -1, -1}, + {"weapon 3", "MP5/10 Submachinegun", ID_WEAPON3, ANIM_WEAPON3, '3', -1, -1, -1}, + {"weapon 4", "Handcannon", ID_WEAPON4, ANIM_WEAPON4, '4', -1, -1, -1}, + {"weapon 5", "Sniper Rifle", ID_WEAPON5, ANIM_WEAPON5, '5', -1, -1, -1}, + {"weapon 6", "M4 Assault Rifle", ID_WEAPON6, ANIM_WEAPON6, '6', -1, -1, -1}, + {"weapon 7", "Dual MK23 Pistols", ID_WEAPON7, ANIM_WEAPON7, '7', -1, -1, -1}, + {"weapon 8", "Combat Knife", ID_WEAPON8, ANIM_WEAPON8, '8', -1, -1, -1}, + {"weapon 9", "M26 Frag Grenade", ID_WEAPON9, ANIM_WEAPON9, '9', -1, -1, -1}, {"+attack", "attack", ID_ATTACK, ANIM_ATTACK, K_CTRL, -1, -1, -1}, {"weapprev", "prev weapon", ID_WEAPPREV, ANIM_IDLE, '[', -1, -1, -1}, {"weapnext", "next weapon", ID_WEAPNEXT, ANIM_IDLE, ']', -1, -1, -1}, @@ -551,43 +565,56 @@ static void Controls_UpdateModel( int anim ) { */ //Blaze: Reaction weapons case ANIM_WEAPON1: + s_controls.playerTorso = TORSO_STAND; s_controls.playerWeapon = WP_PISTOL; break; case ANIM_WEAPON2: + s_controls.playerTorso = TORSO_STAND; s_controls.playerWeapon = WP_M3; break; case ANIM_WEAPON3: + s_controls.playerTorso = TORSO_STAND; s_controls.playerWeapon = WP_MP5; break; case ANIM_WEAPON4: + s_controls.playerTorso = TORSO_STAND; s_controls.playerWeapon = WP_HANDCANNON; break; case ANIM_WEAPON5: + s_controls.playerTorso = TORSO_STAND; s_controls.playerWeapon = WP_SSG3000; break; case ANIM_WEAPON6: + s_controls.playerTorso = TORSO_STAND; s_controls.playerWeapon = WP_M4; break; case ANIM_WEAPON7: + s_controls.playerTorso = TORSO_STAND; s_controls.playerWeapon = WP_AKIMBO; break; case ANIM_WEAPON8: + s_controls.playerTorso = TORSO_STAND2; s_controls.playerWeapon = WP_KNIFE; break; case ANIM_WEAPON9: + s_controls.playerTorso = TORSO_STAND2; s_controls.playerWeapon = WP_GRENADE; break; case ANIM_ATTACK: - s_controls.playerTorso = TORSO_ATTACK; + if ( s_controls.playerWeapon == WP_GRENADE || + s_controls.playerWeapon == WP_KNIFE ) + s_controls.playerTorso = TORSO_ATTACK2; + else + s_controls.playerTorso = TORSO_ATTACK; break; case ANIM_GESTURE: @@ -650,10 +677,10 @@ static void Controls_Update( void ) { // bk001204 - parentheses for( j = 0; (control = controls[j]) ; j++, y += SMALLCHAR_HEIGHT ) { //Elder: changed from 320 - control->x = 320; + control->x = 200; control->y = y; - control->left = 320 - 19*SMALLCHAR_WIDTH; - control->right = 320 + 21*SMALLCHAR_WIDTH; + control->left = 200 - 19*SMALLCHAR_WIDTH; + control->right = 200 + 21*SMALLCHAR_WIDTH; control->top = y; control->bottom = y + SMALLCHAR_HEIGHT; } @@ -668,7 +695,7 @@ static void Controls_Update( void ) { ((menucommon_s*)(s_controls.menu.items[s_controls.menu.cursor]))->flags &= ~QMF_GRAYED; // don't gray out player's name - s_controls.name.generic.flags &= ~QMF_GRAYED; + //s_controls.name.generic.flags &= ~QMF_GRAYED; return; } @@ -679,19 +706,17 @@ static void Controls_Update( void ) { } // makes sure flags are right on the group selection controls - s_controls.looking.generic.flags &= ~(QMF_GRAYED|QMF_HIGHLIGHT|QMF_HIGHLIGHT_IF_FOCUS); - s_controls.movement.generic.flags &= ~(QMF_GRAYED|QMF_HIGHLIGHT|QMF_HIGHLIGHT_IF_FOCUS); - s_controls.weapons.generic.flags &= ~(QMF_GRAYED|QMF_HIGHLIGHT|QMF_HIGHLIGHT_IF_FOCUS); - s_controls.misc.generic.flags &= ~(QMF_GRAYED|QMF_HIGHLIGHT|QMF_HIGHLIGHT_IF_FOCUS); - //Blaze: Reaction stuff - s_controls.reaction.generic.flags &= ~(QMF_GRAYED|QMF_HIGHLIGHT|QMF_HIGHLIGHT_IF_FOCUS); + s_controls.looking.generic.flags &= ~(QMF_GRAYED|QMF_HIGHLIGHT|QMF_PULSEIFFOCUS); + s_controls.movement.generic.flags &= ~(QMF_GRAYED|QMF_HIGHLIGHT|QMF_PULSEIFFOCUS); + s_controls.weapons.generic.flags &= ~(QMF_GRAYED|QMF_HIGHLIGHT|QMF_PULSEIFFOCUS); + s_controls.misc.generic.flags &= ~(QMF_GRAYED|QMF_HIGHLIGHT|QMF_PULSEIFFOCUS); + s_controls.reaction.generic.flags &= ~(QMF_GRAYED|QMF_HIGHLIGHT|QMF_PULSEIFFOCUS); - s_controls.looking.generic.flags |= QMF_PULSEIFFOCUS; - s_controls.movement.generic.flags |= QMF_PULSEIFFOCUS; - s_controls.weapons.generic.flags |= QMF_PULSEIFFOCUS; - s_controls.misc.generic.flags |= QMF_PULSEIFFOCUS; - //Blaze: Reaction menu - s_controls.reaction.generic.flags |= QMF_PULSEIFFOCUS; + s_controls.looking.generic.flags |= QMF_HIGHLIGHT_IF_FOCUS; + s_controls.movement.generic.flags |= QMF_HIGHLIGHT_IF_FOCUS; + s_controls.weapons.generic.flags |= QMF_HIGHLIGHT_IF_FOCUS; + s_controls.misc.generic.flags |= QMF_HIGHLIGHT_IF_FOCUS; + s_controls.reaction.generic.flags |= QMF_HIGHLIGHT_IF_FOCUS; // set buttons switch( s_controls.section ) { @@ -1127,91 +1152,126 @@ Controls_MenuEvent */ static void Controls_MenuEvent( void* ptr, int event ) { - switch (((menucommon_s*)ptr)->id) + //Elder: for status bar + if( event == QM_LOSTFOCUS ) { + s_controls.rq3_statustext.string = ""; + return; + } + else if ( event == QM_GOTFOCUS ) { - case ID_MOVEMENT: - if (event == QM_ACTIVATED) - { - s_controls.section = C_MOVEMENT; - Controls_Update(); - } - break; + switch( ((menucommon_s*)ptr)->id ) + { + case ID_MOVEMENT: + s_controls.rq3_statustext.string = "Change movement keys"; + break; + case ID_LOOKING: + s_controls.rq3_statustext.string = "Change view keys"; + break; + case ID_WEAPONS: + s_controls.rq3_statustext.string = "Change weapon keys"; + break; + case ID_MISC: + s_controls.rq3_statustext.string = "Change miscellaneous keys"; + break; + case ID_REACTION: + s_controls.rq3_statustext.string = "Change Reaction-specific keys"; + break; + case ID_BACK: + s_controls.rq3_statustext.string = "Return to setup menu"; + break; + default: + s_controls.rq3_statustext.string = ""; + break; + } + } + else if ( event == QM_ACTIVATED ) + { + switch (((menucommon_s*)ptr)->id) + { + case ID_MOVEMENT: + //if (event == QM_ACTIVATED) + //{ + s_controls.section = C_MOVEMENT; + Controls_Update(); + //} + break; - case ID_LOOKING: - if (event == QM_ACTIVATED) - { - s_controls.section = C_LOOKING; - Controls_Update(); - } - break; + case ID_LOOKING: + //if (event == QM_ACTIVATED) + //{ + s_controls.section = C_LOOKING; + Controls_Update(); + //} + break; - case ID_WEAPONS: - if (event == QM_ACTIVATED) - { - s_controls.section = C_WEAPONS; - Controls_Update(); - } - break; + case ID_WEAPONS: + //if (event == QM_ACTIVATED) + //{ + s_controls.section = C_WEAPONS; + Controls_Update(); + //} + break; - case ID_MISC: - if (event == QM_ACTIVATED) - { - s_controls.section = C_MISC; - Controls_Update(); - } - break; -//Blaze: Reaction Menu - case ID_REACTION: - if (event == QM_ACTIVATED) - { - s_controls.section = C_REACTION; - Controls_Update(); - } - break; - case ID_DEFAULTS: - if (event == QM_ACTIVATED) - { - UI_ConfirmMenu( "SET TO DEFAULTS?", Controls_ResetDefaults_Draw, Controls_ResetDefaults_Action ); - } - break; + case ID_MISC: + //if (event == QM_ACTIVATED) + //{ + s_controls.section = C_MISC; + Controls_Update(); + //} + break; + //Blaze: Reaction Menu + case ID_REACTION: + //if (event == QM_ACTIVATED) + //{ + s_controls.section = C_REACTION; + Controls_Update(); + //} + break; + case ID_DEFAULTS: + //if (event == QM_ACTIVATED) + //{ + UI_ConfirmMenu( "SET TO DEFAULTS?", Controls_ResetDefaults_Draw, Controls_ResetDefaults_Action ); + //} + break; - case ID_BACK: - if (event == QM_ACTIVATED) - { - if (s_controls.changesmade) + case ID_BACK: + //if (event == QM_ACTIVATED) + //{ + if (s_controls.changesmade) + Controls_SetConfig(); + UI_PopMenu(); + //} + break; + + case ID_SAVEANDEXIT: + //if (event == QM_ACTIVATED) + //{ Controls_SetConfig(); - UI_PopMenu(); - } - break; + UI_PopMenu(); + //} + break; - case ID_SAVEANDEXIT: - if (event == QM_ACTIVATED) - { - Controls_SetConfig(); - UI_PopMenu(); - } - break; + case ID_EXIT: + //if (event == QM_ACTIVATED) + //{ + UI_PopMenu(); + //} + break; - case ID_EXIT: - if (event == QM_ACTIVATED) - { - UI_PopMenu(); - } - break; - - case ID_FREELOOK: - case ID_MOUSESPEED: - case ID_INVERTMOUSE: - case ID_SMOOTHMOUSE: - case ID_ALWAYSRUN: - case ID_AUTOSWITCH: - case ID_JOYENABLE: - case ID_JOYTHRESHOLD: - if (event == QM_ACTIVATED) - { - s_controls.changesmade = qtrue; - } - break; + case ID_FREELOOK: + case ID_MOUSESPEED: + case ID_INVERTMOUSE: + case ID_SMOOTHMOUSE: + case ID_ALWAYSRUN: + case ID_AUTOSWITCH: + case ID_JOYENABLE: + case ID_JOYTHRESHOLD: + //if (event == QM_ACTIVATED) + //{ + s_controls.changesmade = qtrue; + //} + break; + } } } @@ -1293,6 +1353,9 @@ Controls_MenuInit static void Controls_MenuInit( void ) { static char playername[32]; + // Elder: added + int buttonCount = 0; + int y = 12; // zero set all our globals memset( &s_controls, 0 ,sizeof(controls_t) ); @@ -1389,6 +1452,17 @@ static void Controls_MenuInit( void ) s_controls.rq3_setuptitle.width = 256; s_controls.rq3_setuptitle.height = 32; + //Elder: RQ3 Status Text + s_controls.rq3_statustext.generic.type = MTYPE_TEXT; + s_controls.rq3_statustext.generic.flags = QMF_CENTER_JUSTIFY; + s_controls.rq3_statustext.generic.x = RQ3_STATUSBAR_X; + s_controls.rq3_statustext.generic.y = RQ3_STATUSBAR_Y; + s_controls.rq3_statustext.string = ""; + s_controls.rq3_statustext.style = UI_CENTER|UI_SMALLFONT; + s_controls.rq3_statustext.color = color_orange; + + + /* s_controls.looking.generic.type = MTYPE_PTEXT; s_controls.looking.generic.flags = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS; s_controls.looking.generic.id = ID_LOOKING; @@ -1398,7 +1472,21 @@ static void Controls_MenuInit( void ) s_controls.looking.string = "LOOK"; s_controls.looking.style = UI_RIGHT; s_controls.looking.color = color_red; + */ + //Elder: RQ3 Looking Button + s_controls.looking.generic.type = MTYPE_BITMAP; + s_controls.looking.generic.name = RQ3_LOOKING_BUTTON; + s_controls.looking.generic.flags = QMF_LEFT_JUSTIFY|QMF_HIGHLIGHT_IF_FOCUS; + s_controls.looking.generic.x = 320 + (RQ3_BUTTON_PADDING + RQ3_BUTTON_WIDTH) * buttonCount++; + s_controls.looking.generic.y = y; + s_controls.looking.generic.id = ID_LOOKING; + s_controls.looking.generic.callback = Controls_MenuEvent; + s_controls.looking.width = RQ3_BUTTON_WIDTH; + s_controls.looking.height = RQ3_BUTTON_HEIGHT; + s_controls.looking.focuspic = RQ3_FOCUS_BUTTON; + + /* s_controls.movement.generic.type = MTYPE_PTEXT; s_controls.movement.generic.flags = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS; s_controls.movement.generic.id = ID_MOVEMENT; @@ -1408,7 +1496,21 @@ static void Controls_MenuInit( void ) s_controls.movement.string = "MOVE"; s_controls.movement.style = UI_RIGHT; s_controls.movement.color = color_red; + */ + //Elder: RQ3 Movement Button + s_controls.movement.generic.type = MTYPE_BITMAP; + s_controls.movement.generic.name = RQ3_MOVEMENT_BUTTON; + s_controls.movement.generic.flags = QMF_LEFT_JUSTIFY|QMF_HIGHLIGHT_IF_FOCUS; + s_controls.movement.generic.x = 320 + (RQ3_BUTTON_PADDING + RQ3_BUTTON_WIDTH) * buttonCount++; + s_controls.movement.generic.y = y; + s_controls.movement.generic.id = ID_MOVEMENT; + s_controls.movement.generic.callback = Controls_MenuEvent; + s_controls.movement.width = RQ3_BUTTON_WIDTH; + s_controls.movement.height = RQ3_BUTTON_HEIGHT; + s_controls.movement.focuspic = RQ3_FOCUS_BUTTON; + + /* s_controls.weapons.generic.type = MTYPE_PTEXT; s_controls.weapons.generic.flags = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS; s_controls.weapons.generic.id = ID_WEAPONS; @@ -1418,7 +1520,21 @@ static void Controls_MenuInit( void ) s_controls.weapons.string = "SHOOT"; s_controls.weapons.style = UI_RIGHT; s_controls.weapons.color = color_red; + */ + //Elder: RQ3 Weapons Button + s_controls.weapons.generic.type = MTYPE_BITMAP; + s_controls.weapons.generic.name = RQ3_WEAPONS_BUTTON; + s_controls.weapons.generic.flags = QMF_LEFT_JUSTIFY|QMF_HIGHLIGHT_IF_FOCUS; + s_controls.weapons.generic.x = 320 + (RQ3_BUTTON_PADDING + RQ3_BUTTON_WIDTH) * buttonCount++; + s_controls.weapons.generic.y = y; + s_controls.weapons.generic.id = ID_WEAPONS; + s_controls.weapons.generic.callback = Controls_MenuEvent; + s_controls.weapons.width = RQ3_BUTTON_WIDTH; + s_controls.weapons.height = RQ3_BUTTON_HEIGHT; + s_controls.weapons.focuspic = RQ3_FOCUS_BUTTON; + + /* s_controls.misc.generic.type = MTYPE_PTEXT; s_controls.misc.generic.flags = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS; s_controls.misc.generic.id = ID_MISC; @@ -1428,18 +1544,44 @@ static void Controls_MenuInit( void ) s_controls.misc.string = "MISC"; s_controls.misc.style = UI_RIGHT; s_controls.misc.color = color_red; + */ + + //Elder: RQ3 Misc Button + s_controls.misc.generic.type = MTYPE_BITMAP; + s_controls.misc.generic.name = RQ3_MISC_BUTTON; + s_controls.misc.generic.flags = QMF_LEFT_JUSTIFY|QMF_HIGHLIGHT_IF_FOCUS; + s_controls.misc.generic.x = 320 + (RQ3_BUTTON_PADDING + RQ3_BUTTON_WIDTH) * buttonCount++; + s_controls.misc.generic.y = y; + s_controls.misc.generic.id = ID_MISC; + s_controls.misc.generic.callback = Controls_MenuEvent; + s_controls.misc.width = RQ3_BUTTON_WIDTH; + s_controls.misc.height = RQ3_BUTTON_HEIGHT; + s_controls.misc.focuspic = RQ3_FOCUS_BUTTON; //Blaze: Reaction section + /* s_controls.reaction.generic.type = MTYPE_PTEXT; s_controls.reaction.generic.flags = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS; s_controls.reaction.generic.id = ID_REACTION; s_controls.reaction.generic.callback = Controls_MenuEvent; s_controls.reaction.generic.x = 152; s_controls.reaction.generic.y = 240 + 2 * PROP_HEIGHT; - s_controls.reaction.string = "RXN"; + s_controls.reaction.string = "REACTION"; s_controls.reaction.style = UI_RIGHT; s_controls.reaction.color = color_red; + */ + //Elder: RQ3 Reaction Button + s_controls.reaction.generic.type = MTYPE_BITMAP; + s_controls.reaction.generic.name = RQ3_REACTION_BUTTON; + s_controls.reaction.generic.flags = QMF_LEFT_JUSTIFY|QMF_HIGHLIGHT_IF_FOCUS; + s_controls.reaction.generic.x = 320 + (RQ3_BUTTON_PADDING + RQ3_BUTTON_WIDTH) * buttonCount++; + s_controls.reaction.generic.y = y; + s_controls.reaction.generic.id = ID_REACTION; + s_controls.reaction.generic.callback = Controls_MenuEvent; + s_controls.reaction.width = RQ3_BUTTON_WIDTH; + s_controls.reaction.height = RQ3_BUTTON_HEIGHT; + s_controls.reaction.focuspic = RQ3_FOCUS_BUTTON; s_controls.back.generic.type = MTYPE_BITMAP; s_controls.back.generic.name = ART_BACK0; @@ -1745,7 +1887,7 @@ static void Controls_MenuInit( void ) s_controls.reload.generic.id = ID_RELOAD; s_controls.weapon.generic.type = MTYPE_ACTION; - s_controls.weapon.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_GRAYED|QMF_HIDDEN; + s_controls.weapon.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_GRAYED|QMF_HIDDEN; s_controls.weapon.generic.callback = Controls_ActionEvent; s_controls.weapon.generic.ownerdraw = Controls_DrawKeyBinding; s_controls.weapon.generic.id = ID_WEAPON; @@ -1786,6 +1928,7 @@ static void Controls_MenuInit( void ) s_controls.joythreshold.maxvalue = 0.75f; s_controls.joythreshold.generic.statusbar = Controls_StatusBar; + /* s_controls.name.generic.type = MTYPE_PTEXT; s_controls.name.generic.flags = QMF_CENTER_JUSTIFY|QMF_INACTIVE; s_controls.name.generic.x = 320; @@ -1793,7 +1936,7 @@ static void Controls_MenuInit( void ) s_controls.name.string = playername; s_controls.name.style = UI_CENTER; s_controls.name.color = text_color_normal; - + */ // Menu_AddItem( &s_controls.menu, &s_controls.banner ); // Menu_AddItem( &s_controls.menu, &s_controls.framel ); // Menu_AddItem( &s_controls.menu, &s_controls.framer ); @@ -1806,9 +1949,10 @@ static void Controls_MenuInit( void ) */ Menu_AddItem( &s_controls.menu, &s_controls.rq3_setupicon ); Menu_AddItem( &s_controls.menu, &s_controls.rq3_setuptitle ); + Menu_AddItem( &s_controls.menu, &s_controls.rq3_statustext); Menu_AddItem( &s_controls.menu, &s_controls.player ); - Menu_AddItem( &s_controls.menu, &s_controls.name ); + //Menu_AddItem( &s_controls.menu, &s_controls.name ); Menu_AddItem( &s_controls.menu, &s_controls.looking ); Menu_AddItem( &s_controls.menu, &s_controls.movement ); @@ -1878,8 +2022,8 @@ static void Controls_MenuInit( void ) Menu_AddItem( &s_controls.menu, &s_controls.back ); - trap_Cvar_VariableStringBuffer( "name", s_controls.name.string, 16 ); - Q_CleanStr( s_controls.name.string ); + //trap_Cvar_VariableStringBuffer( "name", s_controls.name.string, 16 ); + //Q_CleanStr( s_controls.name.string ); // initialize the configurable cvars Controls_InitCvars(); @@ -1911,6 +2055,12 @@ void Controls_Cache( void ) { trap_R_RegisterShaderNoMip( ART_BACK1 ); trap_R_RegisterShaderNoMip( RQ3_SETUP_ICON ); trap_R_RegisterShaderNoMip( RQ3_SETUP_TITLE ); + trap_R_RegisterShaderNoMip( RQ3_LOOKING_BUTTON ); + trap_R_RegisterShaderNoMip( RQ3_MOVEMENT_BUTTON ); + trap_R_RegisterShaderNoMip( RQ3_WEAPONS_BUTTON ); + trap_R_RegisterShaderNoMip( RQ3_MISC_BUTTON ); + trap_R_RegisterShaderNoMip( RQ3_REACTION_BUTTON ); + trap_R_RegisterShaderNoMip( RQ3_FOCUS_BUTTON ); //trap_R_RegisterShaderNoMip( ART_FRAMEL ); //trap_R_RegisterShaderNoMip( ART_FRAMER ); } diff --git a/reaction/ui/ui_ingame.c b/reaction/ui/ui_ingame.c index f7d0f53e..b00fece2 100644 --- a/reaction/ui/ui_ingame.c +++ b/reaction/ui/ui_ingame.c @@ -12,7 +12,7 @@ INGAME MENU #include "ui_local.h" -#define INGAME_FRAME "menu/art/addbotframe" +//#define INGAME_FRAME "menu/art/addbotframe" //#define INGAME_FRAME "menu/art/cut_frame" #define INGAME_MENU_VERTICAL_SPACING 28 @@ -31,7 +31,7 @@ INGAME MENU typedef struct { menuframework_s menu; - menubitmap_s frame; + //menubitmap_s frame; menutext_s team; menutext_s setup; menutext_s server; @@ -151,6 +151,7 @@ void InGame_MenuInit( void ) { s_ingame.menu.wrapAround = qtrue; s_ingame.menu.fullscreen = qfalse;//Blaze: Test + /* s_ingame.frame.generic.type = MTYPE_BITMAP; s_ingame.frame.generic.flags = QMF_INACTIVE; s_ingame.frame.generic.name = INGAME_FRAME; @@ -158,6 +159,7 @@ void InGame_MenuInit( void ) { s_ingame.frame.generic.y = 240-166;//118; s_ingame.frame.width = 466;//359; s_ingame.frame.height = 332;//256; + */ //y = 96; y = 88; @@ -290,7 +292,7 @@ void InGame_MenuInit( void ) { s_ingame.quit.color = color_red; s_ingame.quit.style = UI_CENTER|UI_SMALLFONT; - Menu_AddItem( &s_ingame.menu, &s_ingame.frame ); + //Menu_AddItem( &s_ingame.menu, &s_ingame.frame ); Menu_AddItem( &s_ingame.menu, &s_ingame.team ); Menu_AddItem( &s_ingame.menu, &s_ingame.addbots ); Menu_AddItem( &s_ingame.menu, &s_ingame.removebots ); @@ -310,7 +312,7 @@ InGame_Cache ================= */ void InGame_Cache( void ) { - trap_R_RegisterShaderNoMip( INGAME_FRAME ); + //trap_R_RegisterShaderNoMip( INGAME_FRAME ); } diff --git a/reaction/ui/ui_preferences.c b/reaction/ui/ui_preferences.c index 082d5dae..a3b5cf32 100644 --- a/reaction/ui/ui_preferences.c +++ b/reaction/ui/ui_preferences.c @@ -204,7 +204,7 @@ static void Preferences_Event( void* ptr, int event ) { break; case ID_BACK: - s_preferences.rq3_statustext.string = "Return to main menu"; + s_preferences.rq3_statustext.string = "Return to setup menu"; break; default: diff --git a/reaction/ui/ui_servers2.c b/reaction/ui/ui_servers2.c index 432c76fc..d2a48e1d 100644 --- a/reaction/ui/ui_servers2.c +++ b/reaction/ui/ui_servers2.c @@ -23,8 +23,11 @@ MULTIPLAYER MENU (SERVER BROWSER) #define MAX_LEAGUELENGTH 28 #define MAX_LISTBOXWIDTH 61 -#define ART_BACK0 "menu/art/back_0" -#define ART_BACK1 "menu/art/back_1" +//#define ART_BACK0 "menu/art/back_0" +//#define ART_BACK1 "menu/art/back_1" +#define ART_BACK0 "menu/art/rq3-menu-back.tga" +#define ART_BACK1 "menu/art/rq3-menu-back-focus.tga" + #define ART_CREATE0 "menu/art/create_0" #define ART_CREATE1 "menu/art/create_1" #define ART_SPECIFY0 "menu/art/specify_0" @@ -40,6 +43,10 @@ MULTIPLAYER MENU (SERVER BROWSER) #define ART_REMOVE0 "menu/art/delete_0" #define ART_REMOVE1 "menu/art/delete_1" +//Elder: RQ3 Setup assets +#define RQ3_START_ICON "menu/art/rq3-menu-start.jpg" +#define RQ3_START_TITLE "menu/art/rq3-title-start.jpg" + #define ID_MASTER 10 #define ID_GAMETYPE 11 #define ID_SORTKEY 12 @@ -157,11 +164,17 @@ typedef struct { //Blaze: No need for this banner //menutext_s banner; + /* menutext_s multim; menutext_s setupm; menutext_s demom; menutext_s modsm; menutext_s exitm; + */ + + //Elder: RQ3 Stuff + menubitmap_s rq3_starticon; + menubitmap_s rq3_starttitle; menulist_s master; menulist_s gametype; @@ -1216,9 +1229,17 @@ ArenaServers_MenuDraw */ static void ArenaServers_MenuDraw( void ) { + //Elder: "Dim" and "Letterbox" mask + UI_FillRect( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, color_deepdim ); + UI_FillRect( 0, 0, SCREEN_WIDTH, 54, color_black); + UI_FillRect( 0, 426, SCREEN_WIDTH, 54, color_black); + UI_FillRect( 0, 54, SCREEN_WIDTH, 2, color_red); + UI_FillRect( 0, 426, SCREEN_WIDTH, 2, color_red); + if (g_arenaservers.refreshservers) ArenaServers_DoRefresh(); + Menu_Draw( &g_arenaservers.menu ); } @@ -1283,6 +1304,7 @@ static void ArenaServers_MenuInit( void ) { g_arenaservers.banner.style = UI_CENTER; g_arenaservers.banner.color = color_white; */ + /* g_arenaservers.multim.generic.type = MTYPE_PTEXT; g_arenaservers.multim.generic.flags = QMF_CENTER_JUSTIFY|QMF_INACTIVE|QMF_HIGHLIGHT; g_arenaservers.multim.generic.x = 120; @@ -1322,7 +1344,26 @@ static void ArenaServers_MenuInit( void ) { g_arenaservers.exitm.string = "EXIT"; g_arenaservers.exitm.color = color_red; g_arenaservers.exitm.style = UI_CENTER | UI_DROPSHADOW; - + */ + + //Elder: Info for setup icon + g_arenaservers.rq3_starticon.generic.type = MTYPE_BITMAP; + g_arenaservers.rq3_starticon.generic.name = RQ3_START_ICON; + g_arenaservers.rq3_starticon.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE; + g_arenaservers.rq3_starticon.generic.x = 0; + g_arenaservers.rq3_starticon.generic.y = 4; + g_arenaservers.rq3_starticon.width = RQ3_ICON_WIDTH; + g_arenaservers.rq3_starticon.height = RQ3_ICON_HEIGHT; + + //Elder: Info for setup title + g_arenaservers.rq3_starttitle.generic.type = MTYPE_BITMAP; + g_arenaservers.rq3_starttitle.generic.name = RQ3_START_TITLE; + g_arenaservers.rq3_starttitle.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE; + g_arenaservers.rq3_starttitle.generic.x = 64; + g_arenaservers.rq3_starttitle.generic.y = 12; + g_arenaservers.rq3_starttitle.width = 256; + g_arenaservers.rq3_starttitle.height = 32; + y = 80; g_arenaservers.master.generic.type = MTYPE_SPINCONTROL; g_arenaservers.master.generic.name = "Servers:"; @@ -1454,10 +1495,10 @@ static void ArenaServers_MenuInit( void ) { g_arenaservers.back.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; g_arenaservers.back.generic.callback = ArenaServers_Event; g_arenaservers.back.generic.id = ID_BACK; - g_arenaservers.back.generic.x = 0; - g_arenaservers.back.generic.y = 480-64; - g_arenaservers.back.width = 128; - g_arenaservers.back.height = 64; + g_arenaservers.back.generic.x = 8; + g_arenaservers.back.generic.y = 480-44; + g_arenaservers.back.width = 32; + g_arenaservers.back.height = 32; g_arenaservers.back.focuspic = ART_BACK1; g_arenaservers.specify.generic.type = MTYPE_BITMAP; @@ -1466,9 +1507,9 @@ static void ArenaServers_MenuInit( void ) { g_arenaservers.specify.generic.callback = ArenaServers_Event; g_arenaservers.specify.generic.id = ID_SPECIFY; g_arenaservers.specify.generic.x = 128; - g_arenaservers.specify.generic.y = 480-64; - g_arenaservers.specify.width = 128; - g_arenaservers.specify.height = 64; + g_arenaservers.specify.generic.y = 480-44; + g_arenaservers.specify.width = 64; + g_arenaservers.specify.height = 32; g_arenaservers.specify.focuspic = ART_SPECIFY1; g_arenaservers.refresh.generic.type = MTYPE_BITMAP; @@ -1477,9 +1518,9 @@ static void ArenaServers_MenuInit( void ) { g_arenaservers.refresh.generic.callback = ArenaServers_Event; g_arenaservers.refresh.generic.id = ID_REFRESH; g_arenaservers.refresh.generic.x = 256; - g_arenaservers.refresh.generic.y = 480-64; - g_arenaservers.refresh.width = 128; - g_arenaservers.refresh.height = 64; + g_arenaservers.refresh.generic.y = 480-44; + g_arenaservers.refresh.width = 64; + g_arenaservers.refresh.height = 32; g_arenaservers.refresh.focuspic = ART_REFRESH1; g_arenaservers.create.generic.type = MTYPE_BITMAP; @@ -1488,9 +1529,9 @@ static void ArenaServers_MenuInit( void ) { g_arenaservers.create.generic.callback = ArenaServers_Event; g_arenaservers.create.generic.id = ID_CREATE; g_arenaservers.create.generic.x = 384; - g_arenaservers.create.generic.y = 480-64; - g_arenaservers.create.width = 128; - g_arenaservers.create.height = 64; + g_arenaservers.create.generic.y = 480-44; + g_arenaservers.create.width = 64; + g_arenaservers.create.height = 32; g_arenaservers.create.focuspic = ART_CREATE1; g_arenaservers.go.generic.type = MTYPE_BITMAP; @@ -1498,19 +1539,24 @@ static void ArenaServers_MenuInit( void ) { g_arenaservers.go.generic.flags = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS; g_arenaservers.go.generic.callback = ArenaServers_Event; g_arenaservers.go.generic.id = ID_CONNECT; - g_arenaservers.go.generic.x = 640; - g_arenaservers.go.generic.y = 480-64; - g_arenaservers.go.width = 128; - g_arenaservers.go.height = 64; + g_arenaservers.go.generic.x = 640 - 8; + g_arenaservers.go.generic.y = 480-44; + g_arenaservers.go.width = 64; + g_arenaservers.go.height = 32; g_arenaservers.go.focuspic = ART_CONNECT1; //Blaze: This banner is not needed // Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.banner ); + /* Menu_AddItem( &g_arenaservers.menu, &g_arenaservers.multim ); Menu_AddItem( &g_arenaservers.menu, &g_arenaservers.setupm ); Menu_AddItem( &g_arenaservers.menu, &g_arenaservers.demom ); Menu_AddItem( &g_arenaservers.menu, &g_arenaservers.modsm ); Menu_AddItem( &g_arenaservers.menu, &g_arenaservers.exitm ); + */ + + Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.rq3_starticon ); + Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.rq3_starttitle ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.master ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.gametype ); @@ -1579,6 +1625,8 @@ void ArenaServers_Cache( void ) { trap_R_RegisterShaderNoMip( ART_ARROWS_UP ); trap_R_RegisterShaderNoMip( ART_ARROWS_DOWN ); trap_R_RegisterShaderNoMip( ART_UNKNOWNMAP ); + trap_R_RegisterShaderNoMip( RQ3_START_ICON ); + trap_R_RegisterShaderNoMip( RQ3_START_TITLE ); } diff --git a/reaction/ui/ui_specifyserver.c b/reaction/ui/ui_specifyserver.c index 640df9bc..058c8624 100644 --- a/reaction/ui/ui_specifyserver.c +++ b/reaction/ui/ui_specifyserver.c @@ -6,20 +6,27 @@ SPECIFY SERVER *********************************************************************************/ -#define SPECIFYSERVER_FRAMEL "menu/art/frame2_l" -#define SPECIFYSERVER_FRAMER "menu/art/frame1_r" -#define SPECIFYSERVER_BACK0 "menu/art/back_0" -#define SPECIFYSERVER_BACK1 "menu/art/back_1" +//#define SPECIFYSERVER_FRAMEL "menu/art/frame2_l" +//#define SPECIFYSERVER_FRAMER "menu/art/frame1_r" + +//#define SPECIFYSERVER_BACK0 "menu/art/back_0" +//#define SPECIFYSERVER_BACK1 "menu/art/back_1" +#define SPECIFYSERVER_BACK0 "menu/art/rq3-menu-back.tga" +#define SPECIFYSERVER_BACK1 "menu/art/rq3-menu-back-focus.tga" #define SPECIFYSERVER_FIGHT0 "menu/art/fight_0" #define SPECIFYSERVER_FIGHT1 "menu/art/fight_1" +//Elder: RQ3 Setup assets +#define RQ3_START_ICON "menu/art/rq3-menu-start.jpg" +#define RQ3_START_TITLE "menu/art/rq3-title-start.jpg" + #define ID_SPECIFYSERVERBACK 102 #define ID_SPECIFYSERVERGO 103 static char* specifyserver_artlist[] = { - SPECIFYSERVER_FRAMEL, - SPECIFYSERVER_FRAMER, + //SPECIFYSERVER_FRAMEL, + //SPECIFYSERVER_FRAMER, SPECIFYSERVER_BACK0, SPECIFYSERVER_BACK1, SPECIFYSERVER_FIGHT0, @@ -34,11 +41,18 @@ typedef struct // menutext_s banner; // menubitmap_s framel; // menubitmap_s framer; + /* menutext_s multim; menutext_s setupm; menutext_s demom; menutext_s modsm; menutext_s exitm; + */ + + + //Elder: RQ3 Stuff + menubitmap_s rq3_starticon; + menubitmap_s rq3_starttitle; menufield_s domain; menufield_s port; @@ -48,6 +62,26 @@ typedef struct static specifyserver_t s_specifyserver; + +/* +=============== +Added by Elder +Preferences_MenuDraw +=============== +*/ +static void SpecifyServer_MenuDraw( void ) { + //Elder: "Dim" and "Letterbox" mask + UI_FillRect( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, color_deepdim ); + UI_FillRect( 0, 0, SCREEN_WIDTH, 54, color_black); + UI_FillRect( 0, 426, SCREEN_WIDTH, 54, color_black); + UI_FillRect( 0, 54, SCREEN_WIDTH, 2, color_red); + UI_FillRect( 0, 426, SCREEN_WIDTH, 2, color_red); + + // standard menu drawing + Menu_Draw( &s_specifyserver.menu ); +} + + /* ================= SpecifyServer_Event @@ -94,6 +128,7 @@ void SpecifyServer_MenuInit( void ) SpecifyServer_Cache(); + s_specifyserver.menu.draw = SpecifyServer_MenuDraw; s_specifyserver.menu.wrapAround = qtrue; s_specifyserver.menu.fullscreen = qtrue; s_specifyserver.menu.showlogo = qtrue; @@ -124,6 +159,7 @@ void SpecifyServer_MenuInit( void ) s_specifyserver.framer.width = 256; s_specifyserver.framer.height = 334; */ + /* s_specifyserver.multim.generic.type = MTYPE_PTEXT; s_specifyserver.multim.generic.flags = QMF_CENTER_JUSTIFY|QMF_INACTIVE|QMF_HIGHLIGHT; s_specifyserver.multim.generic.x = 120; @@ -164,8 +200,28 @@ void SpecifyServer_MenuInit( void ) s_specifyserver.exitm.string = "EXIT"; s_specifyserver.exitm.color = color_red; s_specifyserver.exitm.style = UI_CENTER | UI_DROPSHADOW; + */ -s_specifyserver.domain.generic.type = MTYPE_FIELD; + //Elder: Info for setup icon + s_specifyserver.rq3_starticon.generic.type = MTYPE_BITMAP; + s_specifyserver.rq3_starticon.generic.name = RQ3_START_ICON; + s_specifyserver.rq3_starticon.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE; + s_specifyserver.rq3_starticon.generic.x = 0; + s_specifyserver.rq3_starticon.generic.y = 4; + s_specifyserver.rq3_starticon.width = RQ3_ICON_WIDTH; + s_specifyserver.rq3_starticon.height = RQ3_ICON_HEIGHT; + + //Elder: Info for setup title + s_specifyserver.rq3_starttitle.generic.type = MTYPE_BITMAP; + s_specifyserver.rq3_starttitle.generic.name = RQ3_START_TITLE; + s_specifyserver.rq3_starttitle.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE; + s_specifyserver.rq3_starttitle.generic.x = 64; + s_specifyserver.rq3_starttitle.generic.y = 12; + s_specifyserver.rq3_starttitle.width = 256; + s_specifyserver.rq3_starttitle.height = 32; + + + s_specifyserver.domain.generic.type = MTYPE_FIELD; s_specifyserver.domain.generic.name = "Address:"; s_specifyserver.domain.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; s_specifyserver.domain.generic.x = 206; @@ -186,10 +242,10 @@ s_specifyserver.domain.generic.type = MTYPE_FIELD; s_specifyserver.go.generic.flags = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS; s_specifyserver.go.generic.callback = SpecifyServer_Event; s_specifyserver.go.generic.id = ID_SPECIFYSERVERGO; - s_specifyserver.go.generic.x = 640; - s_specifyserver.go.generic.y = 480-64; - s_specifyserver.go.width = 128; - s_specifyserver.go.height = 64; + s_specifyserver.go.generic.x = 640-8; + s_specifyserver.go.generic.y = 480-44; + s_specifyserver.go.width = 64; + s_specifyserver.go.height = 32; s_specifyserver.go.focuspic = SPECIFYSERVER_FIGHT1; s_specifyserver.back.generic.type = MTYPE_BITMAP; @@ -197,22 +253,26 @@ s_specifyserver.domain.generic.type = MTYPE_FIELD; s_specifyserver.back.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; s_specifyserver.back.generic.callback = SpecifyServer_Event; s_specifyserver.back.generic.id = ID_SPECIFYSERVERBACK; - s_specifyserver.back.generic.x = 0; - s_specifyserver.back.generic.y = 480-64; - s_specifyserver.back.width = 128; - s_specifyserver.back.height = 64; + s_specifyserver.back.generic.x = 8; + s_specifyserver.back.generic.y = 480-44; + s_specifyserver.back.width = 32; + s_specifyserver.back.height = 32; s_specifyserver.back.focuspic = SPECIFYSERVER_BACK1; //Blaze: This banner is not needed //Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.banner ); //Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.framel ); //Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.framer ); + /* Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.multim ); Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.setupm ); Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.demom ); Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.modsm ); Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.exitm ); + */ + Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.rq3_starticon ); + Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.rq3_starttitle ); Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.domain ); Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.port ); Menu_AddItem( &s_specifyserver.menu, &s_specifyserver.go ); diff --git a/reaction/ui/ui_startserver.c b/reaction/ui/ui_startserver.c index 4c0dfc06..4705f0a4 100644 --- a/reaction/ui/ui_startserver.c +++ b/reaction/ui/ui_startserver.c @@ -50,11 +50,13 @@ typedef struct { // menutext_s banner; // menubitmap_s framel; // menubitmap_s framer; + /* menutext_s multim; menutext_s setupm; menutext_s demom; menutext_s modsm; menutext_s exitm; + */ menulist_s gametype; menubitmap_s mappics[MAX_MAPSPERPAGE]; @@ -404,6 +406,7 @@ static void StartServer_MenuInit( void ) { s_startserver.framer.width = 256; s_startserver.framer.height = 334; */ + /* s_startserver.multim.generic.type = MTYPE_PTEXT; s_startserver.multim.generic.flags = QMF_CENTER_JUSTIFY|QMF_INACTIVE|QMF_HIGHLIGHT; s_startserver.multim.generic.x = 120; @@ -443,6 +446,7 @@ static void StartServer_MenuInit( void ) { s_startserver.exitm.string = "EXIT"; s_startserver.exitm.color = color_red; s_startserver.exitm.style = UI_CENTER | UI_DROPSHADOW; + */ s_startserver.gametype.generic.type = MTYPE_SPINCONTROL; s_startserver.gametype.generic.name = "Game Type:"; @@ -553,11 +557,13 @@ static void StartServer_MenuInit( void ) { // Menu_AddItem( &s_startserver.menu, &s_startserver.banner ); // Menu_AddItem( &s_startserver.menu, &s_startserver.framel ); // Menu_AddItem( &s_startserver.menu, &s_startserver.framer ); + /* Menu_AddItem( &s_startserver.menu, &s_startserver.multim ); Menu_AddItem( &s_startserver.menu, &s_startserver.setupm ); Menu_AddItem( &s_startserver.menu, &s_startserver.demom ); Menu_AddItem( &s_startserver.menu, &s_startserver.modsm ); Menu_AddItem( &s_startserver.menu, &s_startserver.exitm ); + */ Menu_AddItem( &s_startserver.menu, &s_startserver.gametype ); for (i=0; i