Author Topic: Extreme Sudden Death patch  (Read 4850 times)

Adeya

  • Posts: 8
  • Turrets: +1/-3
Extreme Sudden Death patch
« on: July 16, 2009, 07:04:36 am »
Does anybody of a working ESD patch for Lakitu's 5.5 QVM? I tried Ben's but it didn't work. ESD patch

I would appreciate it if someone could link me a working ESD patch or if a dev could make one for whoever wants it.

gimhael

  • Posts: 546
  • Turrets: +70/-16
Re: Extreme Sudden Death patch
« Reply #1 on: July 18, 2009, 08:36:28 am »
Try the following (untested, but it compiles)

Code: [Select]
Index: src/game/g_local.h
===================================================================
--- src/game/g_local.h (Revision 174)
+++ src/game/g_local.h (Arbeitskopie)
@@ -730,6 +730,9 @@
   qboolean          suddenDeath;
   int               suddenDeathBeginTime;
   timeWarning_t     suddenDeathWarning;
+  qboolean          extremeSuddenDeath;
+  int               extremeSuddenDeathBeginTime;
+  timeWarning_t     extremeSuddenDeathWarning;
   timeWarning_t     timelimitWarning;
 
   spawnQueue_t      alienSpawnQueue;
@@ -1081,6 +1084,7 @@
 void CheckTeamVote( int teamnum );
 void LogExit( const char *string );
 int  G_TimeTilSuddenDeath( void );
+int  G_TimeTilExtremeSuddenDeath( void );
 void CheckMsgTimer( void );
 qboolean G_Flood_Limited( gentity_t *ent );
 
@@ -1244,6 +1248,8 @@
 extern  vmCvar_t  g_suddenDeathTime;
 extern  vmCvar_t  g_suddenDeath;
 extern  vmCvar_t  g_suddenDeathMode;
+extern  vmCvar_t  g_extremeSuddenDeathTime;
+extern  vmCvar_t  g_extremeSuddenDeath;
 extern  vmCvar_t  g_friendlyFire;
 extern  vmCvar_t  g_friendlyFireHumans;
 extern  vmCvar_t  g_friendlyFireAliens;
Index: src/game/g_active.c
===================================================================
--- src/game/g_active.c (Revision 174)
+++ src/game/g_active.c (Arbeitskopie)
@@ -1770,7 +1770,7 @@
   // Give clients some credit periodically
   if( ent->client->lastKillTime + FREEKILL_PERIOD < level.time )
   {
-    if( !g_suddenDeath.integer ) {
+    if( !(g_suddenDeath.integer || g_extremeSuddenDeath.integer) ) {
       if( ent->client->ps.stats[ STAT_PTEAM ] == PTE_ALIENS )
         G_AddCreditToClient( ent->client, FREEKILL_ALIEN, qtrue );
       if( ent->client->ps.stats[ STAT_PTEAM ] == PTE_HUMANS )
Index: src/game/g_main.c
===================================================================
--- src/game/g_main.c (Revision 174)
+++ src/game/g_main.c (Arbeitskopie)
@@ -47,6 +47,8 @@
 vmCvar_t  g_suddenDeathTime;
 vmCvar_t  g_suddenDeath;
 vmCvar_t  g_suddenDeathMode;
+vmCvar_t  g_extremeSuddenDeathTime;
+vmCvar_t  g_extremeSuddenDeath;
 vmCvar_t  g_capturelimit;
 vmCvar_t  g_friendlyFire;
 vmCvar_t  g_friendlyFireAliens;
@@ -208,6 +210,8 @@
   { &g_suddenDeathTime, "g_suddenDeathTime", "30", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue },
   { &g_suddenDeathMode, "g_suddenDeathMode", "0", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue },
   { &g_suddenDeath, "g_suddenDeath", "0", CVAR_SERVERINFO | CVAR_NORESTART, 0, qtrue },
+  { &g_extremeSuddenDeathTime, "g_extremeSuddenDeathTime", "0", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue },
+  { &g_extremeSuddenDeath, "g_extremeSuddenDeath", "0", 0, 0, qfalse },
 
   { &g_synchronousClients, "g_synchronousClients", "0", CVAR_SYSTEMINFO, 0, qfalse  },
 
@@ -741,7 +745,9 @@
   trap_Cvar_Set( "g_alienKills", 0 );
   trap_Cvar_Set( "g_humanKills", 0 );
   trap_Cvar_Set( "g_suddenDeath", 0 );
+  trap_Cvar_Set( "g_extremeSuddenDeath", 0 );
   level.suddenDeathBeginTime = g_suddenDeathTime.integer * 60000;
+  level.extremeSuddenDeathBeginTime = g_extremeSuddenDeathTime.integer * 60000;
 
   G_Printf( "-----------------------------------\n" );
 
@@ -1179,6 +1185,19 @@
 }
 
 
+/*
+============
+G_TimeTilExtremeSuddenDeath
+============
+*/
+int G_TimeTilExtremeSuddenDeath( void )
+{
+  if( (!g_extremeSuddenDeathTime.integer && level.extremeSuddenDeathBeginTime == 0 ) || level.extremeSuddenDeathBeginTime < 0 )
+    return 999999999; // Always some time away

+  return ( ( level.extremeSuddenDeathBeginTime ) - ( level.time - level.startTime ) );
+}
+
 #define PLAYER_COUNT_MOD 5.0f
 
 /*
@@ -1262,8 +1281,44 @@
        }
     }
   }
+  if(!level.extremeSuddenDeath)
+  {
+    if(g_extremeSuddenDeath.integer || G_TimeTilExtremeSuddenDeath( ) <= 0 ) //Conditions to enter ESD
+    {
+      //begin extreme sudden death
+      if( level.extremeSuddenDeathWarning < TW_PASSED )
+      {
+        trap_SendServerCommand( -1, "cp \"Extreme Sudden Death!\"" );
+        G_LogPrintf("Beginning Extreme Sudden Death\n");
+        localHTP = 0;
+        localATP = 0;
+
+        level.extremeSuddenDeathBeginTime = level.time;
+        level.extremeSuddenDeath=qtrue;
+        trap_Cvar_Set( "g_extremeSuddenDeath", "1" );
+
+        level.extremeSuddenDeathWarning = TW_PASSED;
+      }
+    } 
+    else
+    {
+       //warn about sudden death
+       if( ( G_TimeTilExtremeSuddenDeath( ) <= 60000 ) &&
+           (  level.extremeSuddenDeathWarning < TW_IMMINENT ) )
+       {
+         trap_SendServerCommand( -1, va("cp \"Extreme Sudden Death in %d seconds!\"",
+               (int)(G_TimeTilExtremeSuddenDeath() / 1000 ) ) );
+         level.extremeSuddenDeathWarning = TW_IMMINENT;
+       }
+    }
+  }
   
   //set BP at each cycle
+  if( g_extremeSuddenDeath.integer )
+  {
+    localHTP = 0;
+    localATP = 0;
+  }
   if( g_suddenDeath.integer )
   {
     localHTP = level.suddenDeathHBuildPoints;
@@ -1942,7 +1997,7 @@
   }
 
   Com_sprintf( data, BIG_INFO_STRING,
-      "%s %s T:%c A:%f H:%f M:%s D:%d SD:%d AS:%d AS2T:%d AS3T:%d HS:%d HS2T:%d HS3T:%d CL:%d",
+      "%s %s T:%c A:%f H:%f M:%s D:%d SD:%d ESD:%d AS:%d AS2T:%d AS3T:%d HS:%d HS2T:%d HS3T:%d CL:%d",
       Q3_VERSION,
       g_tag.string,
       teamChar,
@@ -1951,6 +2006,7 @@
       map,
       level.time - level.startTime,
       G_TimeTilSuddenDeath( ),
+      G_TimeTilExtremeSuddenDeath( ),
       g_alienStage.integer,
       level.alienStage2Time - level.startTime,
       level.alienStage3Time - level.startTime,
Index: src/game/g_cmds.c
===================================================================
--- src/game/g_cmds.c (Revision 174)
+++ src/game/g_cmds.c (Arbeitskopie)
@@ -1726,7 +1726,7 @@
     else
      {
        level.votePassThreshold = g_suddenDeathVotePercent.integer;
-       Com_sprintf( level.voteString, sizeof( level.voteString ), "suddendeath" );
+       Com_sprintf( level.voteString, sizeof( level.voteString ), "set g_suddenDeath 1" );
        Com_sprintf( level.voteDisplayString,
            sizeof( level.voteDisplayString ), "Begin sudden death" );
 
@@ -1735,6 +1735,36 @@
 
      }
    }
+   else if( !Q_stricmp( arg1, "extreme_sudden_death" ) ||
+     !Q_stricmp( arg1, "extremesuddendeath" ) )
+   {
+     if(!g_suddenDeathVotePercent.integer)
+     {
+       trap_SendServerCommand( ent-g_entities, "print \"Sudden Death votes have been disabled\n\"" );
+       return;
+     }
+     else if( g_extremeSuddenDeath.integer )
+     {
+      trap_SendServerCommand( ent - g_entities, va( "print \"callvote: Extreme Sudden Death has already begun\n\"") );
+      return;
+     }
+     else if( G_TimeTilExtremeSuddenDeath() <= g_suddenDeathVoteDelay.integer * 1000 )
+     {
+      trap_SendServerCommand( ent - g_entities, va( "print \"callvote: Extreme Sudden Death is already immenent\n\"") );
+      return;
+     }
+    else
+     {
+       level.votePassThreshold = g_suddenDeathVotePercent.integer;
+       Com_sprintf( level.voteString, sizeof( level.voteString ), "set g_extremeSuddenDeath 1" );
+       Com_sprintf( level.voteDisplayString,
+           sizeof( level.voteDisplayString ), "Begin extreme sudden death" );
+
+       if( g_suddenDeathVoteDelay.integer )
+         Q_strcat( level.voteDisplayString, sizeof( level.voteDisplayString ), va( " in %d seconds", g_suddenDeathVoteDelay.integer ) );
+
+     }
+   }
   else
   {
     trap_SendServerCommand( ent-g_entities, "print \"Invalid vote string\n\"" );
@@ -2723,7 +2753,7 @@
         return;
 
       // Don't allow destruction of buildables that cannot be rebuilt
-      if(g_suddenDeath.integer && traceEnt->health > 0 &&
+      if((g_suddenDeath.integer || g_extremeSuddenDeath.integer) && traceEnt->health > 0 &&
           ( ( g_suddenDeathMode.integer == SDMODE_SELECTIVE &&
               !BG_FindReplaceableTestForBuildable( traceEnt->s.modelindex ) ) ||
             ( g_suddenDeathMode.integer == SDMODE_BP &&

khalsa

  • Administrator
  • Posts: 597
  • Turrets: +187/-132
    • http://www.mercenariesguild.net
Re: Extreme Sudden Death patch
« Reply #2 on: July 18, 2009, 08:42:09 am »
Any more flaming/trolling and I banstick.
« Last Edit: July 18, 2009, 08:44:45 am by khalsa »
}MG{ Mercenariesguild
ਮਨੁ ਜੀਤੇ ਜਗੁ ਜੀਤਿਆ

JJosh

  • Posts: 7
  • Turrets: +2/-3
Re: Extreme Sudden Death patch
« Reply #3 on: July 19, 2009, 08:52:20 pm »
@gimhael: Thanks, I'll try it.

@Khalsa: Thanks!

Adeya

  • Posts: 8
  • Turrets: +1/-3
Re: Extreme Sudden Death patch
« Reply #4 on: July 24, 2009, 09:45:58 pm »
Neither ESD patch codes work  : (

EDIT: I was looking through the source for the code Gimhael posted and the source for Lakitu's 5.5. A lot of the ints and other things aren't the same. Could that be the reason it fails when we try to patch Lakitu's 5.5 QVM?
« Last Edit: July 27, 2009, 06:04:43 am by Adeya »