summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/bg_pmove.c7
-rw-r--r--src/game/g_active.c15
-rw-r--r--src/game/g_buildable.c15
-rw-r--r--src/game/g_client.c1
-rw-r--r--src/game/g_cmds.c2
-rw-r--r--src/game/g_combat.c4
-rw-r--r--src/game/tremulous.h4
7 files changed, 41 insertions, 7 deletions
diff --git a/src/game/bg_pmove.c b/src/game/bg_pmove.c
index 7e7f7456..c1afd750 100644
--- a/src/game/bg_pmove.c
+++ b/src/game/bg_pmove.c
@@ -2280,7 +2280,9 @@ static void PM_CheckDuck (void)
}
//TA: If the standing and crouching viewheights are the same the class can't crouch
- if( ( pm->cmd.upmove < 0 ) && ( PCvh != PCcvh ) && pm->ps->pm_type != PM_JETPACK )
+ if( ( pm->cmd.upmove < 0 ) && ( PCvh != PCcvh ) &&
+ pm->ps->pm_type != PM_JETPACK &&
+ !BG_InventoryContainsUpgrade( UP_BATTLESUIT, pm->ps->stats ) )
{
// duck
pm->ps->pm_flags |= PMF_DUCKED;
@@ -3006,7 +3008,8 @@ static void PM_Weapon( void )
//FIXME: predicted angles miss a problem??
if( pm->ps->weapon == WP_CHAINGUN )
{
- if( pm->ps->pm_flags & PMF_DUCKED )
+ if( pm->ps->pm_flags & PMF_DUCKED ||
+ BG_InventoryContainsUpgrade( UP_BATTLESUIT, pm->ps->stats ) )
{
pm->ps->delta_angles[ PITCH ] -= ANGLE2SHORT( ( ( random() * 0.5 ) - 0.125 ) * ( 30 / (float)addTime ) );
pm->ps->delta_angles[ YAW ] -= ANGLE2SHORT( ( ( random() * 0.5 ) - 0.25 ) * ( 30.0 / (float)addTime ) );
diff --git a/src/game/g_active.c b/src/game/g_active.c
index d8229500..49289ba8 100644
--- a/src/game/g_active.c
+++ b/src/game/g_active.c
@@ -1304,6 +1304,21 @@ void ClientThink_real( gentity_t *ent )
ent->suicideTime = 0;
}
+ // Give clients some credit periodically
+ if( ent->client->lastKillTime + FREEKILL_PERIOD < level.time )
+ {
+ if( ent->client->ps.stats[ STAT_PTEAM ] == PTE_ALIENS )
+ {
+ G_AddCreditToClient( ent->client, FREEKILL_ALIEN );
+ }
+ else if( ent->client->ps.stats[ STAT_PTEAM ] == PTE_HUMANS )
+ {
+ G_AddCreditToClient( ent->client, FREEKILL_HUMAN );
+ }
+
+ ent->client->lastKillTime = level.time;
+ }
+
// perform once-a-second actions
ClientTimerActions( ent, msec );
}
diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c
index 38c493c8..a959e087 100644
--- a/src/game/g_buildable.c
+++ b/src/game/g_buildable.c
@@ -1277,6 +1277,21 @@ void ADef_FireOnEnemy( gentity_t *self, int firespeed )
{
float time = (float)i / 1000.0f;
+ if( i > 250 )
+ {
+ G_Printf( "ADef_FireOnEnemy failed.\n"
+ " enemy location: %v\n"
+ " enemy accleration: %v\n"
+ " enemy jerk: %v\n"
+ " base location: %v\n",
+ self->enemy->s.pos.trBase,
+ self->enemy->acceleration,
+ self->enemy->jerk,
+ self->s.pos.trBase );
+
+ return;
+ }
+
VectorMA( self->enemy->s.pos.trBase, time, self->enemy->s.pos.trDelta,
dirToTarget );
VectorMA( dirToTarget, time * time, halfAcceleration, dirToTarget );
diff --git a/src/game/g_client.c b/src/game/g_client.c
index cbeafcb6..83d3e8e6 100644
--- a/src/game/g_client.c
+++ b/src/game/g_client.c
@@ -1448,6 +1448,7 @@ void ClientSpawn( gentity_t *ent, gentity_t *spawn, vec3_t origin, vec3_t angles
client->ps.pm_time = 100;
client->respawnTime = level.time;
+ client->lastKillTime = level.time;
client->inactivityTime = level.time + g_inactivity.integer * 1000;
client->latched_buttons = 0;
diff --git a/src/game/g_cmds.c b/src/game/g_cmds.c
index ac6e37e5..0aae2c70 100644
--- a/src/game/g_cmds.c
+++ b/src/game/g_cmds.c
@@ -1246,7 +1246,7 @@ void Cmd_Class_f( gentity_t *ent )
else if( ent->client->pers.teamSelection == PTE_HUMANS )
{
//humans cannot use this command whilst alive
- if( ent->client->ps.stats[ STAT_PCLASS ] != PCL_NONE )
+ if( ent->client->pers.classSelection != PCL_NONE )
{
trap_SendServerCommand( ent-g_entities, va( "print \"You must be dead to use the class command\n\"" ) );
return;
diff --git a/src/game/g_combat.c b/src/game/g_combat.c
index 3b42fd86..93b8c21c 100644
--- a/src/game/g_combat.c
+++ b/src/game/g_combat.c
@@ -357,9 +357,6 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int
}
}
- // Add team bonuses
- //Team_FragBonuses(self, inflictor, attacker);
-
Cmd_Score_f( self ); // show scores
// send updated scores to any clients that are following this one,
@@ -384,7 +381,6 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int
self->takedamage = qtrue; // can still be gibbed
self->s.weapon = WP_NONE;
- /*self->s.powerups = 0;*/ //TA: class is encoded into powerups in trem
self->r.contents = CONTENTS_CORPSE;
self->s.angles[ PITCH ] = 0;
diff --git a/src/game/tremulous.h b/src/game/tremulous.h
index a053de4f..3265bded 100644
--- a/src/game/tremulous.h
+++ b/src/game/tremulous.h
@@ -545,3 +545,7 @@
#define HUMAN_MAX_CREDITS 2000
#define ALIEN_MAX_KILLS 9
#define ALIEN_MAX_SINGLE_KILLS 3
+
+#define FREEKILL_PERIOD 180000 //msec
+#define FREEKILL_ALIEN 1
+#define FREEKILL_HUMAN SOLDIER_VALUE