diff -uwbBEdrN src/game/g_active.c src/game/g_active.c --- src/game/g_active.c 2006-11-13 11:00:48.000000000 -0500 +++ src/game/g_active.c 2006-11-13 18:04:39.000000000 -0500 @@ -1379,8 +1379,7 @@ // Give clients some credit periodically if( ent->client->lastKillTime + FREEKILL_PERIOD < level.time ) { - if( g_suddenDeathTime.integer && - ( level.time - level.startTime >= g_suddenDeathTime.integer * 60000 ) ) + if( g_suddenDeath.integer ) { //gotta love logic like this eh? } diff -uwbBEdrN --exclude=.svn src/game/g_cmds.c src/game/g_cmds.c --- src/game/g_cmds.c 2006-11-13 11:00:48.000000000 -0500 +++ src/game/g_cmds.c 2006-11-13 18:05:33.000000000 -0500 @@ -1724,8 +1724,7 @@ return; // Don't allow destruction of buildables that cannot be rebuilt - if( g_suddenDeathTime.integer && ( level.time - level.startTime >= - g_suddenDeathTime.integer * 60000 ) && + if( g_suddenDeath.integer && BG_FindBuildPointsForBuildable( traceEnt->s.modelindex ) ) { return; diff -uwbBEdrN --exclude=.svn src/game/g_local.h src/game/g_local.h --- src/game/g_local.h 2006-11-13 11:00:48.000000000 -0500 +++ src/game/g_local.h 2006-11-13 18:07:15.000000000 -0500 @@ -1050,6 +1050,7 @@ extern vmCvar_t g_timelimit; extern vmCvar_t g_suddenDeathTime; +extern vmCvar_t g_suddenDeath; extern vmCvar_t g_friendlyFire; extern vmCvar_t g_friendlyFireHumans; extern vmCvar_t g_friendlyFireAliens; diff -uwbBEdrN --exclude=.svn src/game/g_main.c src/game/g_main.c --- src/game/g_main.c 2006-11-13 11:00:48.000000000 -0500 +++ src/game/g_main.c 2006-11-13 18:11:17.000000000 -0500 @@ -42,6 +42,7 @@ vmCvar_t g_fraglimit; vmCvar_t g_timelimit; vmCvar_t g_suddenDeathTime; +vmCvar_t g_suddenDeath; vmCvar_t g_capturelimit; vmCvar_t g_friendlyFire; vmCvar_t g_friendlyFireAliens; @@ -145,6 +146,7 @@ // change anytime vars { &g_timelimit, "timelimit", "0", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue }, { &g_suddenDeathTime, "g_suddenDeathTime", "0", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue }, + { &g_suddenDeath, "g_suddenDeath", "0", 0, 0, qfalse }, { &g_synchronousClients, "g_synchronousClients", "0", CVAR_SYSTEMINFO, 0, qfalse }, @@ -605,6 +607,7 @@ trap_Cvar_Set( "g_alienKills", 0 ); trap_Cvar_Set( "g_humanKills", 0 ); + trap_Cvar_Set( "g_suddenDeath", 0 ); G_Printf( "-----------------------------------\n" ); G_RemapTeamShaders( ); @@ -987,17 +990,32 @@ int localHTP = g_humanBuildPoints.integer, localATP = g_alienBuildPoints.integer; - if( g_suddenDeathTime.integer ) + // sudden death was stopped + if( g_suddenDeathTime.integer && !g_suddenDeath.integer && + level.suddenDeathWarning == TW_PASSED && level.time - level.startTime > + g_suddenDeathTime.integer * 60000 ) { - if( !level.warmupTime && - ( level.time - level.startTime >= g_suddenDeathTime.integer * 60000 ) ) + // this is just here to prevent sudden death from starting again + } + // it was previously sudden death but now it isn't + else if( !g_suddenDeath.integer && level.suddenDeathWarning == TW_PASSED ) + { + level.suddenDeathWarning = TW_NOT; + } + // if sudden death is enabled or someone voted for it + else if( g_suddenDeathTime.integer || g_suddenDeath.integer ) + { + // sudden death has begun + if( !g_suddenDeath.integer && level.time - level.startTime >= + g_suddenDeathTime.integer * 60000 ) + trap_Cvar_Set( "g_suddenDeath", "1" ); + + if( g_suddenDeath.integer ) { localHTP = 0; localATP = 0; - - //warn about sudden death - if( level.time - level.startTime >= g_suddenDeathTime.integer * 60000 && - level.suddenDeathWarning < TW_PASSED ) + // if they weren't warned yet, warn now + if( level.suddenDeathWarning < TW_PASSED ) { trap_SendServerCommand( -1, "cp \"Sudden Death!\"" ); level.suddenDeathWarning = TW_PASSED; @@ -1005,20 +1023,17 @@ } else { - //warn about sudden death - if( level.time - level.startTime >= ( g_suddenDeathTime.integer - 1 ) * 60000 && - level.suddenDeathWarning < TW_IMMINENT ) + localHTP = g_humanBuildPoints.integer; + localATP = g_alienBuildPoints.integer; + if( level.time - level.startTime >= ( g_suddenDeathTime.integer - 1 ) * + 60000 && level.suddenDeathWarning < TW_IMMINENT ) { trap_SendServerCommand( -1, "cp \"Sudden Death in 1 minute!\"" ); level.suddenDeathWarning = TW_IMMINENT; } } } - else - { - localHTP = g_humanBuildPoints.integer; - localATP = g_alienBuildPoints.integer; - } + level.humanBuildPoints = level.humanBuildPointsPowered = localHTP; level.alienBuildPoints = localATP;