diff options
author | Christopher Schwarz <lakitu7@gmail.com> | 2009-10-18 17:32:09 +0000 |
---|---|---|
committer | Tim Angus <tim@ngus.net> | 2013-01-03 00:16:55 +0000 |
commit | 5840d24c078ea3dacc1a0556ee5e98ba4a557682 (patch) | |
tree | c75bea90d4171fd7595abda0851855d976453c35 | |
parent | 6370fd13f490cda8d10e0eb3984761dda31298b7 (diff) |
* (bug 2923) Add ability to have a "warmup" time where players cannot join a team, in order to prevent dretches with fast computers from camping the other base before the humans even load the map. Disabled by default; set g_doWarmup 1 to enable.
-rw-r--r-- | src/cgame/cg_draw.c | 36 | ||||
-rw-r--r-- | src/cgame/cg_local.h | 3 | ||||
-rw-r--r-- | src/cgame/cg_servercmds.c | 21 | ||||
-rw-r--r-- | src/game/bg_public.h | 1 | ||||
-rw-r--r-- | src/game/g_cmds.c | 7 | ||||
-rw-r--r-- | src/game/g_combat.c | 4 | ||||
-rw-r--r-- | src/game/g_main.c | 9 | ||||
-rw-r--r-- | src/game/g_spawn.c | 15 |
8 files changed, 63 insertions, 33 deletions
diff --git a/src/cgame/cg_draw.c b/src/cgame/cg_draw.c index 2cb4e305..f77e44a3 100644 --- a/src/cgame/cg_draw.c +++ b/src/cgame/cg_draw.c @@ -3156,6 +3156,41 @@ static qboolean CG_DrawQueue( void ) return qtrue; } + +/* +================= +CG_DrawWarmup +================= +*/ +static void CG_DrawWarmup( void ) +{ + int sec = 0; + int w; + int h; + float size = 0.5f; + char text[ MAX_STRING_CHARS ] = S_COLOR_RED "Warmup Time:"; + + if( !cg.warmupTime ) + return; + + sec = ( cg.warmupTime - cg.time ) / 1000; + + if( sec < 0 ) + return; + + + w = UI_Text_Width( text, size, 0 ); + h = UI_Text_Height( text, size, 0 ); + UI_Text_Paint( 320 - w / 2, 200, size, colorWhite, text, 0, 0, ITEM_TEXTSTYLE_SHADOWED ); + + Com_sprintf( text, sizeof( text ), + "----- %s" S_COLOR_WHITE " -----", + ( sec ) ? va( "^%d%d", sec % 7, sec ) : S_COLOR_GREEN "FIGHT!" ); + + w = UI_Text_Width( text, size, 0 ); + UI_Text_Paint( 320 - w / 2, 200 + 1.5f * h, size, colorWhite, text, 0, 0, ITEM_TEXTSTYLE_SHADOWED ); +} + //================================================================================== /* @@ -3206,6 +3241,7 @@ static void CG_Draw2D( void ) CG_DrawVote( TEAM_NONE ); CG_DrawVote( cg.predictedPlayerState.stats[ STAT_TEAM ] ); + CG_DrawWarmup( ); CG_DrawQueue( ); // don't draw center string if scoreboard is up diff --git a/src/cgame/cg_local.h b/src/cgame/cg_local.h index 22d312d9..90e88648 100644 --- a/src/cgame/cg_local.h +++ b/src/cgame/cg_local.h @@ -1059,8 +1059,7 @@ typedef struct int voiceChatBufferOut; // warmup countdown - int warmup; - int warmupCount; + int warmupTime; //========================== diff --git a/src/cgame/cg_servercmds.c b/src/cgame/cg_servercmds.c index cfb3ad59..920858fc 100644 --- a/src/cgame/cg_servercmds.c +++ b/src/cgame/cg_servercmds.c @@ -137,13 +137,7 @@ static void CG_ParseWarmup( void ) info = CG_ConfigString( CS_WARMUP ); warmup = atoi( info ); - cg.warmupCount = -1; - - if( warmup == 0 && cg.warmup ) - { - } - - cg.warmup = warmup; + cg.warmupTime = warmup; } /* @@ -176,7 +170,7 @@ void CG_SetConfigValues( void ) cgs.humanStage = cgs.humanCredits = cgs.humanNextStageThreshold = 0; cgs.levelStartTime = atoi( CG_ConfigString( CS_LEVEL_START_TIME ) ); - cg.warmup = atoi( CG_ConfigString( CS_WARMUP ) ); + cg.warmupTime = atoi( CG_ConfigString( CS_WARMUP ) ); } @@ -414,10 +408,6 @@ static void CG_MapRestart( void ) // we really should clear more parts of cg here and stop sounds - // play the "fight" sound if this is a restart without warmup - if( cg.warmup == 0 ) - CG_CenterPrint( "FIGHT!", 120, GIANTCHAR_WIDTH * 2 ); - trap_Cvar_Set( "cg_thirdPerson", "0" ); } @@ -519,6 +509,13 @@ void CG_Menu( int menu, int arg ) type = DT_COMMAND; break; + case MN_WARMUP: + longMsg = "You must wait until the warmup time is finished " + "before joining a team. "; + shortMsg = "You cannot join a team during warmup."; + type = DT_COMMAND; + break; + case MN_A_TEAMCHANGEBUILDTIMER: longMsg = "You cannot leave the Alien team until your build timer " "has expired."; diff --git a/src/game/bg_public.h b/src/game/bg_public.h index 8d74c18c..30ac860d 100644 --- a/src/game/bg_public.h +++ b/src/game/bg_public.h @@ -547,6 +547,7 @@ typedef enum MN_A_TEAMLOCKED, MN_H_TEAMLOCKED, MN_PLAYERLIMIT, + MN_WARMUP, // cmd stuff MN_CMD_CHEAT, diff --git a/src/game/g_cmds.c b/src/game/g_cmds.c index 8fc9a424..ac88b825 100644 --- a/src/game/g_cmds.c +++ b/src/game/g_cmds.c @@ -560,6 +560,13 @@ void Cmd_Team_f( gentity_t *ent ) else if( oldteam == TEAM_HUMANS ) humans--; + // disallow joining teams during warmup + if( g_doWarmup.integer && ( ( level.warmupTime - level.time ) / 1000 ) > 0 ) + { + G_TriggerMenu( ent - g_entities, MN_WARMUP ); + return; + } + trap_Argv( 1, s, sizeof( s ) ); if( !s[ 0 ] ) diff --git a/src/game/g_combat.c b/src/game/g_combat.c index 2dca0736..7f71066c 100644 --- a/src/game/g_combat.c +++ b/src/game/g_combat.c @@ -41,10 +41,6 @@ void AddScore( gentity_t *ent, int score ) if( !ent->client ) return; - // no scoring during pre-match warmup - if( level.warmupTime ) - return; - // make alien and human scores equivalent if ( ent->client->pers.teamSelection == TEAM_ALIENS ) { diff --git a/src/game/g_main.c b/src/game/g_main.c index 5503b4c4..df13a957 100644 --- a/src/game/g_main.c +++ b/src/game/g_main.c @@ -173,8 +173,8 @@ static cvarTable_t gameCvarTable[ ] = { &g_teamForceBalance, "g_teamForceBalance", "0", CVAR_ARCHIVE }, - { &g_warmup, "g_warmup", "20", CVAR_ARCHIVE, 0, qtrue }, - { &g_doWarmup, "g_doWarmup", "0", 0, 0, qtrue }, + { &g_warmup, "g_warmup", "10", CVAR_ARCHIVE, 0, qtrue }, + { &g_doWarmup, "g_doWarmup", "0", CVAR_ARCHIVE, 0, qtrue }, { &g_logFile, "g_logFile", "games.log", CVAR_ARCHIVE, 0, qfalse }, { &g_logFileSync, "g_logFileSync", "0", CVAR_ARCHIVE, 0, qfalse }, @@ -448,9 +448,6 @@ void G_RegisterCvars( void ) if( cv->vmCvar ) cv->modificationCount = cv->vmCvar->modificationCount; } - - // check some things - level.warmupModificationCount = g_warmup.modificationCount; } /* @@ -1972,7 +1969,7 @@ void CheckExitRules( void ) return; } - if( g_timelimit.integer && !level.warmupTime ) + if( g_timelimit.integer ) { if( level.time - level.startTime >= g_timelimit.integer * 60000 ) { diff --git a/src/game/g_spawn.c b/src/game/g_spawn.c index e505a21b..35c29b4e 100644 --- a/src/game/g_spawn.c +++ b/src/game/g_spawn.c @@ -662,19 +662,16 @@ void SP_worldspawn( void ) g_entities[ ENTITYNUM_WORLD ].s.number = ENTITYNUM_WORLD; g_entities[ ENTITYNUM_WORLD ].classname = "worldspawn"; - // see if we want a warmup time - trap_SetConfigstring( CS_WARMUP, "" ); if( g_restarted.integer ) - { trap_Cvar_Set( "g_restarted", "0" ); - level.warmupTime = 0; - } - else if( g_doWarmup.integer ) + + // see if we want a warmup time + trap_SetConfigstring( CS_WARMUP, "-1" ); + if( g_doWarmup.integer ) { - // Turn it on - level.warmupTime = -1; + level.warmupTime = level.time - level.startTime + ( g_warmup.integer * 1000 ); trap_SetConfigstring( CS_WARMUP, va( "%i", level.warmupTime ) ); - G_LogPrintf( "Warmup:\n" ); + G_LogPrintf( "Warmup: %i\n", g_warmup.integer ); } } |