diff --git a/code/game/g_combat.c b/code/game/g_combat.c index a618cfc..c270378 100644 --- a/code/game/g_combat.c +++ b/code/game/g_combat.c @@ -110,18 +110,18 @@ void TossClientItems( gentity_t *self ) { int i; gentity_t *drop; - // drop the weapon if not a gauntlet or machinegun + // Drop the weapon if not a gauntlet or machinegun weapon = self->s.weapon; - //Never drop in elimination or last man standing mode! - if( g_gametype.integer == GT_ELIMINATION || g_gametype.integer == GT_LMS) + // Never drop in elimination or last man standing mode! + if( g_gametype.integer == GT_ELIMINATION || g_gametype.integer == GT_LMS) { return; + } - // make a special check to see if they are changing to a new - // weapon that isn't the mg or gauntlet. Without this, a client - // can pick up a weapon, be killed, and not drop the weapon because + // Make a special check to see if they are changing to a new weapon that isn't the mg or gauntlet. + // Without this, a client can pick up a weapon, be killed, and not drop the weapon because // their weapon change hasn't completed yet and they are still holding the MG. - if ( weapon == WP_MACHINEGUN || weapon == WP_GRAPPLING_HOOK ) { + if ( weapon == WP_GRAPPLING_HOOK ) { if ( self->client->ps.weaponstate == WEAPON_DROPPING ) { weapon = self->client->pers.cmd.weapon; } @@ -130,12 +130,10 @@ void TossClientItems( gentity_t *self ) { } } - if (g_instantgib.integer || g_rockets.integer || g_danmaku.integer || g_gametype.integer == GT_CTF_ELIMINATION || g_elimination_allgametypes.integer){ - //Nothing! - } - else - if ( weapon > WP_MACHINEGUN && weapon != WP_GRAPPLING_HOOK && - self->client->ps.ammo[ weapon ] ) { + // Never drop anything with these mutators activated, either (Instagib, Rocket Arena, Bullet Hell, etc) + if (g_instantgib.integer || g_rockets.integer || g_danmaku.integer || g_gametype.integer == GT_CTF_ELIMINATION || g_elimination_allgametypes.integer) { + return; + } else if ( weapon >= WP_MACHINEGUN && weapon != WP_GRAPPLING_HOOK && self->client->ps.ammo[ weapon ] ) { // find the item type for this weapon item = BG_FindItemForWeapon( weapon ); diff --git a/code/q3_ui/ui_demo2.c b/code/q3_ui/ui_demo2.c index f874f11..e787bbc 100644 --- a/code/q3_ui/ui_demo2.c +++ b/code/q3_ui/ui_demo2.c @@ -33,23 +33,23 @@ DEMOS MENU #define ART_BACK0 "menu/art/back_0" -#define ART_BACK1 "menu/art/back_1" +#define ART_BACK1 "menu/art/back_1" #define ART_GO0 "menu/art/play_0" #define ART_GO1 "menu/art/play_1" #define ART_FRAMEL "menu/art/frame2_l" #define ART_FRAMER "menu/art/frame1_r" -#define ART_ARROWS "menu/art/arrows_vert_0" -#define ART_ARROWUP "menu/art/arrows_vert_top" -#define ART_ARROWDN "menu/art/arrows_vert_bot" +#define ART_ARROWS "menu/art/arrows_horz_0" +#define ART_ARROWLEFT "menu/art/arrows_horz_left" +#define ART_ARROWRIGHT "menu/art/arrows_horz_right" -#define MAX_DEMOS 128 -#define NAMEBUFSIZE ( MAX_DEMOS * 16 ) +#define MAX_DEMOS 1024 +#define NAMEBUFSIZE (MAX_DEMOS * 32) #define ID_BACK 10 #define ID_GO 11 #define ID_LIST 12 -#define ID_SCROLLDN 13 -#define ID_SCROLLUP 14 +#define ID_RIGHT 13 +#define ID_LEFT 14 #define ARROWS_WIDTH 128 #define ARROWS_HEIGHT 48 @@ -72,6 +72,7 @@ typedef struct { int numDemos; char names[NAMEBUFSIZE]; + char *demolist[MAX_DEMOS]; } demos_t; @@ -94,47 +95,25 @@ static void Demos_MenuEvent( void *ptr, int event ) { trap_Cmd_ExecuteText( EXEC_APPEND, va( "demo %s\n", s_demos.list.itemnames[s_demos.list.curvalue]) ); break; + case ID_BACK: UI_PopMenu(); break; - case ID_SCROLLUP: - ScrollList_Key( &s_demos.list, K_UPARROW ); + case ID_LEFT: + ScrollList_Key( &s_demos.list, K_LEFTARROW ); break; - case ID_SCROLLDN: - ScrollList_Key( &s_demos.list, K_DOWNARROW ); - break; - + case ID_RIGHT: + ScrollList_Key( &s_demos.list, K_RIGHTARROW ); + break; } } - -/* -================= -UI_DemosMenu_Key -================= -*/ -static sfxHandle_t UI_DemosMenu_Key( int key ) { - menucommon_s *item; - - item = Menu_ItemAtCursor( &s_demos.menu ); - - if( key == K_MWHEELUP ) { - ScrollList_Key( &s_demos.list, K_UPARROW ); - } - - if( key == K_MWHEELDOWN ) { - ScrollList_Key( &s_demos.list, K_DOWNARROW ); - } - - return Menu_DefaultKey( &s_demos.menu, key ); -} - - -static void meowdrawdemo( void ) { +static void UI_Demo_MenuDraw( void ) { Menu_Draw(&s_demos.menu); -} +} + /* =============== @@ -142,18 +121,18 @@ Demos_MenuInit =============== */ static void Demos_MenuInit( void ) { - int i; + int i, j; int len; char *demoname, extension[32]; + int protocol, protocolLegacy; memset( &s_demos, 0 ,sizeof(demos_t) ); - s_demos.menu.key = UI_DemosMenu_Key; Demos_Cache(); s_demos.menu.fullscreen = qtrue; - s_demos.menu.wrapAround = qtrue; - s_demos.menu.draw = meowdrawdemo; + s_demos.menu.wrapAround = qtrue; + s_demos.menu.draw = UI_Demo_MenuDraw; s_demos.banner.generic.type = MTYPE_BTEXT; s_demos.banner.generic.x = 320; @@ -165,7 +144,7 @@ static void Demos_MenuInit( void ) { s_demos.framel.generic.type = MTYPE_BITMAP; s_demos.framel.generic.name = ART_FRAMEL; s_demos.framel.generic.flags = QMF_INACTIVE; - s_demos.framel.generic.x = 0; + s_demos.framel.generic.x = 0; s_demos.framel.generic.y = 78; s_demos.framel.width = 256; s_demos.framel.height = 329; @@ -181,30 +160,30 @@ static void Demos_MenuInit( void ) { s_demos.arrows.generic.type = MTYPE_BITMAP; s_demos.arrows.generic.name = ART_ARROWS; s_demos.arrows.generic.flags = QMF_INACTIVE; - s_demos.arrows.generic.x = 512+48+12; - s_demos.arrows.generic.y = 240-64+48; - s_demos.arrows.width = 64; - s_demos.arrows.height = 128; + s_demos.arrows.generic.x = 320-ARROWS_WIDTH/2; + s_demos.arrows.generic.y = 400; + s_demos.arrows.width = ARROWS_WIDTH; + s_demos.arrows.height = ARROWS_HEIGHT; s_demos.left.generic.type = MTYPE_BITMAP; s_demos.left.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_MOUSEONLY; - s_demos.left.generic.x = 512+48+12; - s_demos.left.generic.y = 240-64+48; - s_demos.left.generic.id = ID_SCROLLUP; + s_demos.left.generic.x = 320-ARROWS_WIDTH/2; + s_demos.left.generic.y = 400; + s_demos.left.generic.id = ID_LEFT; s_demos.left.generic.callback = Demos_MenuEvent; - s_demos.left.width = 64; - s_demos.left.height = 64; - s_demos.left.focuspic = ART_ARROWUP; + s_demos.left.width = ARROWS_WIDTH/2; + s_demos.left.height = ARROWS_HEIGHT; + s_demos.left.focuspic = ART_ARROWLEFT; s_demos.right.generic.type = MTYPE_BITMAP; s_demos.right.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_MOUSEONLY; - s_demos.right.generic.x = 512+48+12; - s_demos.right.generic.y = 240+48; - s_demos.right.generic.id = ID_SCROLLDN; + s_demos.right.generic.x = 320; + s_demos.right.generic.y = 400; + s_demos.right.generic.id = ID_RIGHT; s_demos.right.generic.callback = Demos_MenuEvent; - s_demos.right.width = 64; - s_demos.right.height = 64; - s_demos.right.focuspic = ART_ARROWDN; + s_demos.right.width = ARROWS_WIDTH/2; + s_demos.right.height = ARROWS_HEIGHT; + s_demos.right.focuspic = ART_ARROWRIGHT; s_demos.back.generic.type = MTYPE_BITMAP; s_demos.back.generic.name = ART_BACK0; @@ -229,41 +208,67 @@ static void Demos_MenuInit( void ) { s_demos.go.focuspic = ART_GO1; s_demos.list.generic.type = MTYPE_SCROLLLIST; - s_demos.list.generic.flags = QMF_HIGHLIGHT_IF_FOCUS|QMF_SMALLFONT; + s_demos.list.generic.flags = QMF_PULSEIFFOCUS; s_demos.list.generic.callback = Demos_MenuEvent; s_demos.list.generic.id = ID_LIST; - s_demos.list.generic.x = 22; - s_demos.list.generic.y = 50; - s_demos.list.width = 70; - s_demos.list.height = 23; - Com_sprintf(extension, sizeof(extension), "dm_%d", (int)trap_Cvar_VariableValue( "protocol" ) ); - s_demos.list.numitems = trap_FS_GetFileList( "demos", extension, s_demos.names, NAMEBUFSIZE ); + s_demos.list.generic.x = 118; + s_demos.list.generic.y = 130; + s_demos.list.width = 16; + s_demos.list.height = 14; s_demos.list.itemnames = (const char **)s_demos.demolist; - //s_demos.list.columns = 1; + s_demos.list.columns = 3; - if (!s_demos.list.numitems) { - strcpy( s_demos.names, "No Demos Found." ); + protocolLegacy = trap_Cvar_VariableValue("com_legacyprotocol"); + protocol = trap_Cvar_VariableValue("com_protocol"); + + if(!protocol) + protocol = trap_Cvar_VariableValue("protocol"); + if(protocolLegacy == protocol) + protocolLegacy = 0; + + Com_sprintf(extension, sizeof(extension), ".%s%d", DEMOEXT, protocol); + s_demos.numDemos = trap_FS_GetFileList("demos", extension, s_demos.names, ARRAY_LEN(s_demos.names)); + + demoname = s_demos.names; + i = 0; + + for(j = 0; j < 2; j++) + { + if(s_demos.numDemos > MAX_DEMOS) + s_demos.numDemos = MAX_DEMOS; + + for(; i < s_demos.numDemos; i++) + { + s_demos.list.itemnames[i] = demoname; + + len = strlen(demoname); + + demoname += len + 1; + } + + if(!j) + { + if(protocolLegacy > 0 && s_demos.numDemos < MAX_DEMOS) + { + Com_sprintf(extension, sizeof(extension), ".%s%d", DEMOEXT, protocolLegacy); + s_demos.numDemos += trap_FS_GetFileList("demos", extension, demoname, + ARRAY_LEN(s_demos.names) - (demoname - s_demos.names)); + } + else + break; + } + } + + s_demos.list.numitems = s_demos.numDemos; + + if(!s_demos.numDemos) + { + s_demos.list.itemnames[0] = "No Demos Found."; s_demos.list.numitems = 1; //degenerate case, not selectable s_demos.go.generic.flags |= (QMF_INACTIVE|QMF_HIDDEN); } - else if (s_demos.list.numitems > MAX_DEMOS) - s_demos.list.numitems = MAX_DEMOS; - - demoname = s_demos.names; - for ( i = 0; i < s_demos.list.numitems; i++ ) { - s_demos.list.itemnames[i] = demoname; - - // strip extension - len = strlen( demoname ); - if (!Q_stricmp(demoname + len - 4,".dm3")) - demoname[len-4] = '\0'; - -// Q_strupr(demoname); - - demoname += len + 1; - } Menu_AddItem( &s_demos.menu, &s_demos.banner ); Menu_AddItem( &s_demos.menu, &s_demos.framel ); @@ -289,8 +294,8 @@ void Demos_Cache( void ) { trap_R_RegisterShaderNoMip( ART_FRAMEL ); trap_R_RegisterShaderNoMip( ART_FRAMER ); trap_R_RegisterShaderNoMip( ART_ARROWS ); - trap_R_RegisterShaderNoMip( ART_ARROWUP ); - trap_R_RegisterShaderNoMip( ART_ARROWDN ); + trap_R_RegisterShaderNoMip( ART_ARROWLEFT ); + trap_R_RegisterShaderNoMip( ART_ARROWRIGHT ); } /* diff --git a/code/q3_ui/ui_menu.c b/code/q3_ui/ui_menu.c index 0e15d20..197240c 100644 --- a/code/q3_ui/ui_menu.c +++ b/code/q3_ui/ui_menu.c @@ -219,7 +219,7 @@ and that local cinematics are killed */ void UI_MainMenu( void ) { int y; - int style = UI_LEFT | UI_DROPSHADOW; + int style = UI_CENTER | UI_DROPSHADOW; trap_Cvar_Set( "sv_killserver", "1" ); trap_Cvar_SetValue( "handicap", 100 ); //Reset handicap during server change, it must be ser per game @@ -259,7 +259,7 @@ void UI_MainMenu( void ) { s_main.singleplayer.generic.id = ID_SINGLEPLAYER; s_main.singleplayer.generic.callback = Main_MenuEvent; s_main.singleplayer.string = "SINGLE PLAYER"; - s_main.singleplayer.color = color_orange; + s_main.singleplayer.color = color_white; s_main.singleplayer.style = style; y += MAIN_MENU_VERTICAL_SPACING; @@ -270,7 +270,7 @@ void UI_MainMenu( void ) { s_main.multiplayer.generic.id = ID_MULTIPLAYER; s_main.multiplayer.generic.callback = Main_MenuEvent; s_main.multiplayer.string = "MULTIPLAYER"; - s_main.multiplayer.color = color_orange; + s_main.multiplayer.color = color_white; s_main.multiplayer.style = style; y += MAIN_MENU_VERTICAL_SPACING; @@ -281,7 +281,7 @@ void UI_MainMenu( void ) { s_main.setup.generic.id = ID_SETUP; s_main.setup.generic.callback = Main_MenuEvent; s_main.setup.string = "SETUP"; - s_main.setup.color = color_orange; + s_main.setup.color = color_white; s_main.setup.style = style; y += MAIN_MENU_VERTICAL_SPACING; @@ -292,7 +292,7 @@ void UI_MainMenu( void ) { s_main.demos.generic.id = ID_DEMOS; s_main.demos.generic.callback = Main_MenuEvent; s_main.demos.string = "DEMOS"; - s_main.demos.color = color_orange; + s_main.demos.color = color_white; s_main.demos.style = style; y += MAIN_MENU_VERTICAL_SPACING; @@ -303,7 +303,7 @@ void UI_MainMenu( void ) { s_main.challenges.generic.id = ID_CHALLENGES; s_main.challenges.generic.callback = Main_MenuEvent; s_main.challenges.string = "STATISTICS"; - s_main.challenges.color = color_orange; + s_main.challenges.color = color_white; s_main.challenges.style = style; y += MAIN_MENU_VERTICAL_SPACING; @@ -314,7 +314,7 @@ void UI_MainMenu( void ) { s_main.mods.generic.id = ID_MODS; s_main.mods.generic.callback = Main_MenuEvent; s_main.mods.string = "MODS"; - s_main.mods.color = color_orange; + s_main.mods.color = color_white; s_main.mods.style = style; y += MAIN_MENU_VERTICAL_SPACING; @@ -325,7 +325,7 @@ void UI_MainMenu( void ) { s_main.exit.generic.id = ID_EXIT; s_main.exit.generic.callback = Main_MenuEvent; s_main.exit.string = "EXIT"; - s_main.exit.color = color_orange; + s_main.exit.color = color_white; s_main.exit.style = style; Menu_AddItem( &s_main.menu, &s_main.singleplayer ); diff --git a/code/qcommon/q_shared.h b/code/qcommon/q_shared.h index b22d68b..c3c1967 100644 --- a/code/qcommon/q_shared.h +++ b/code/qcommon/q_shared.h @@ -50,6 +50,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define Q3_VERSION PRODUCT_NAME " " PRODUCT_VERSION #define MAX_TEAMNAME 32 +#define DEMOEXT "dm_" #ifdef _MSC_VER