Tremulous Forum
		Mods => Modding Center => Topic started by: Adeya 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 (http://http:/ae3523e76b/elarned.co.uk/trem/extremesd.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.
- 
				Try the following (untested, but it compiles)
 
 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 &&
 
- 
				Any more flaming/trolling and I banstick.
			
- 
				@gimhael: Thanks, I'll try it.
 
 @Khalsa: Thanks!
- 
				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?