summaryrefslogtreecommitdiff
path: root/src/game
diff options
context:
space:
mode:
Diffstat (limited to 'src/game')
-rw-r--r--src/game/bg_public.h2
-rw-r--r--src/game/g_buildable.c44
-rw-r--r--src/game/g_cmds.c39
-rw-r--r--src/game/g_main.c4
-rw-r--r--src/game/g_spawn.c4
-rw-r--r--src/game/g_weapon.c40
-rw-r--r--src/game/tremulous.h42
7 files changed, 125 insertions, 50 deletions
diff --git a/src/game/bg_public.h b/src/game/bg_public.h
index 85360d22..02b494db 100644
--- a/src/game/bg_public.h
+++ b/src/game/bg_public.h
@@ -32,7 +32,7 @@
#define MINS_Z -24
#define DEFAULT_VIEWHEIGHT 26
#define CROUCH_VIEWHEIGHT 12
-#define DEAD_VIEWHEIGHT -16
+#define DEAD_VIEWHEIGHT -14 //TA: watch for mins[ 2 ] less than this causing
//
// config strings are a general means of communicating variable length strings
diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c
index 29245882..fec593f2 100644
--- a/src/game/g_buildable.c
+++ b/src/game/g_buildable.c
@@ -1560,8 +1560,7 @@ void HMedistat_Think( gentity_t *self )
vec3_t mins, maxs;
int i, num;
gentity_t *player;
- int healCount = 0;
- int maxclients;
+ qboolean occupied = qfalse;
self->nextthink = level.time + BG_FindNextThinkForBuildable( self->s.modelindex );
@@ -1574,8 +1573,6 @@ void HMedistat_Think( gentity_t *self )
if( self->spawned )
{
- maxclients = MAX_MEDISTAT_CLIENTS;
-
VectorAdd( self->s.origin, self->r.maxs, maxs );
VectorAdd( self->s.origin, self->r.mins, mins );
@@ -1586,7 +1583,7 @@ void HMedistat_Think( gentity_t *self )
if( self->active )
G_setIdleBuildableAnim( self, BANIM_IDLE2 );
- //do some healage
+ //check if a previous occupier is still here
num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES );
for( i = 0; i < num; i++ )
{
@@ -1596,29 +1593,48 @@ void HMedistat_Think( gentity_t *self )
{
if( player->health < player->client->ps.stats[ STAT_MAX_HEALTH ] &&
player->client->ps.pm_type != PM_DEAD &&
- healCount < maxclients )
+ self->enemy == player )
+ occupied = qtrue;
+ }
+ }
+
+ if( !occupied )
+ {
+ self->enemy = NULL;
+
+ //look for something to heal
+ for( i = 0; i < num; i++ )
+ {
+ player = &g_entities[ entityList[ i ] ];
+
+ if( player->client && player->client->ps.stats[ STAT_PTEAM ] == PTE_HUMANS )
{
- healCount++;
- player->health++;
-
- //start the heal anim
- if( !self->active )
+ if( player->health < player->client->ps.stats[ STAT_MAX_HEALTH ] &&
+ player->client->ps.pm_type != PM_DEAD )
{
- G_setBuildableAnim( self, BANIM_ATTACK1, qfalse );
- self->active = qtrue;
+ self->enemy = player;
+
+ //start the heal anim
+ if( !self->active )
+ {
+ G_setBuildableAnim( self, BANIM_ATTACK1, qfalse );
+ self->active = qtrue;
+ }
}
}
}
}
//nothing left to heal so go back to idling
- if( healCount == 0 && self->active )
+ if( !self->enemy && self->active )
{
G_setBuildableAnim( self, BANIM_CONSTRUCT2, qtrue );
G_setIdleBuildableAnim( self, BANIM_IDLE1 );
self->active = qfalse;
}
+ else //heal!
+ self->enemy->health++;
}
}
diff --git a/src/game/g_cmds.c b/src/game/g_cmds.c
index af2b5f13..00ba30d2 100644
--- a/src/game/g_cmds.c
+++ b/src/game/g_cmds.c
@@ -1517,6 +1517,45 @@ void Cmd_Sell_f( gentity_t *ent )
if( upgrade == ent->client->pers.cmd.weapon - 32 )
G_AddEvent( ent, EV_NEXT_WEAPON, ent->client->ps.clientNum );
}
+ else if( !Q_stricmp( s, "weapons" ) )
+ {
+ for( i = WP_NONE + 1; i < WP_NUM_WEAPONS; i++ )
+ {
+ if( BG_gotWeapon( i, ent->client->ps.stats ) && i != WP_BLASTER )
+ {
+ BG_removeWeapon( i, ent->client->ps.stats );
+
+ //add to funds
+ ent->client->ps.persistant[ PERS_CREDIT ] += (short)BG_FindPriceForWeapon( i );
+ }
+
+ //if we have this weapon selected, force a new selection
+ if( i == ent->client->ps.weapon )
+ {
+ //force a weapon change
+ ent->client->ps.pm_flags |= PMF_WEAPON_SWITCH;
+ trap_SendServerCommand( ent-g_entities, va( "weaponswitch %d", WP_BLASTER ) );
+ }
+ }
+ }
+ else if( !Q_stricmp( s, "upgrades" ) )
+ {
+ for( i = UP_NONE + 1; i < UP_NUM_UPGRADES; i++ )
+ {
+ //remove upgrade if carried
+ if( BG_gotItem( i, ent->client->ps.stats ) )
+ {
+ BG_removeItem( i, ent->client->ps.stats );
+
+ //add to funds
+ ent->client->ps.persistant[ PERS_CREDIT ] += (short)BG_FindPriceForUpgrade( i );
+ }
+
+ //if we have this upgrade selected, force a new selection
+ if( i == ent->client->pers.cmd.weapon - 32 )
+ G_AddEvent( ent, EV_NEXT_WEAPON, ent->client->ps.clientNum );
+ }
+ }
else
trap_SendServerCommand( ent-g_entities, va( "print \"Unknown item\n\"" ) );
diff --git a/src/game/g_main.c b/src/game/g_main.c
index ed129c6c..f57b385f 100644
--- a/src/game/g_main.c
+++ b/src/game/g_main.c
@@ -157,8 +157,8 @@ static cvarTable_t gameCvarTable[ ] =
{ &pmove_fixed, "pmove_fixed", "0", CVAR_SYSTEMINFO, 0, qfalse},
{ &pmove_msec, "pmove_msec", "8", CVAR_SYSTEMINFO, 0, qfalse},
- { &g_humanBuildPoints, "g_humanBuildPoints", "1000", 0, 0, qfalse },
- { &g_alienBuildPoints, "g_alienBuildPoints", "1000", 0, 0, qfalse },
+ { &g_humanBuildPoints, "g_humanBuildPoints", "100", 0, 0, qfalse },
+ { &g_alienBuildPoints, "g_alienBuildPoints", "100", 0, 0, qfalse },
{ &g_humanStage, "g_humanStage", "0", 0, 0, qfalse },
{ &g_humanKills, "g_humanKills", "0", 0, 0, qfalse },
{ &g_humanMaxStage, "g_humanMaxStage", "2", 0, 0, qfalse },
diff --git a/src/game/g_spawn.c b/src/game/g_spawn.c
index 1684be88..185823a8 100644
--- a/src/game/g_spawn.c
+++ b/src/game/g_spawn.c
@@ -599,7 +599,7 @@ void SP_worldspawn( void )
G_SpawnString( "gravity", "800", &s );
trap_Cvar_Set( "g_gravity", s );
- G_SpawnString( "humanBuildPoints", "1000", &s );
+ G_SpawnString( "humanBuildPoints", g_humanBuildPoints.string, &s );
trap_Cvar_Set( "g_humanBuildPoints", s );
G_SpawnString( "humanMaxStage", "2", &s );
@@ -611,7 +611,7 @@ void SP_worldspawn( void )
G_SpawnString( "humanStage3Threshold", g_humanStage3Threshold.string, &s );
trap_Cvar_Set( "g_humanStage3Threshold", s );
- G_SpawnString( "alienBuildPoints", "1000", &s );
+ G_SpawnString( "alienBuildPoints", g_alienBuildPoints.string, &s );
trap_Cvar_Set( "g_alienBuildPoints", s );
G_SpawnString( "alienMaxStage", "2", &s );
diff --git a/src/game/g_weapon.c b/src/game/g_weapon.c
index 78109c00..2c24c58c 100644
--- a/src/game/g_weapon.c
+++ b/src/game/g_weapon.c
@@ -69,21 +69,25 @@ void SnapVectorTowards( vec3_t v, vec3_t to )
meleeAttack
===============
*/
-void meleeAttack( gentity_t *ent, float range, int damage, meansOfDeath_t mod )
+void meleeAttack( gentity_t *ent, float range, float width, int damage, meansOfDeath_t mod )
{
trace_t tr;
vec3_t end;
gentity_t *tent;
gentity_t *traceEnt;
+ vec3_t mins, maxs;
+
+ VectorSet( mins, -width, -width, -width );
+ VectorSet( maxs, width, width, width );
// set aiming directions
- AngleVectors (ent->client->ps.viewangles, forward, right, up);
+ AngleVectors( ent->client->ps.viewangles, forward, right, up );
CalcMuzzlePoint( ent, forward, right, up, muzzle );
VectorMA( muzzle, range, forward, end );
- trap_Trace( &tr, muzzle, NULL, NULL, end, ent->s.number, MASK_SHOT );
+ trap_Trace( &tr, muzzle, mins, maxs, end, ent->s.number, MASK_SHOT );
if( tr.surfaceFlags & SURF_NOIMPACT )
return;
@@ -570,7 +574,8 @@ void cancelBuildFire( gentity_t *ent )
( traceEnt->s.eType == ET_BUILDABLE ) &&
( traceEnt->biteam == ent->client->ps.stats[ STAT_PTEAM ] ) &&
( ( ent->client->ps.weapon >= WP_HBUILD2 ) &&
- ( ent->client->ps.weapon <= WP_HBUILD ) ) )
+ ( ent->client->ps.weapon <= WP_HBUILD ) ) &&
+ traceEnt->spawned )
{
if( ent->client->ps.stats[ STAT_MISC ] > 0 )
{
@@ -592,7 +597,8 @@ void cancelBuildFire( gentity_t *ent )
}
}
else if( ent->client->ps.weapon == WP_ABUILD2 )
- meleeAttack( ent, ABUILDER_CLAW_RANGE, ABUILDER_CLAW_DMG, MOD_ABUILDER_CLAW ); //melee attack for alien builder
+ meleeAttack( ent, ABUILDER_CLAW_RANGE, ABUILDER_CLAW_WIDTH,
+ ABUILDER_CLAW_DMG, MOD_ABUILDER_CLAW ); //melee attack for alien builder
}
/*
@@ -651,7 +657,11 @@ qboolean CheckVenomAttack( gentity_t *ent )
vec3_t end;
gentity_t *tent;
gentity_t *traceEnt;
- int damage;
+ int damage;
+ vec3_t mins, maxs;
+
+ VectorSet( mins, -SOLDIER_BITE_WIDTH, -SOLDIER_BITE_WIDTH, -SOLDIER_BITE_WIDTH );
+ VectorSet( maxs, SOLDIER_BITE_WIDTH, SOLDIER_BITE_WIDTH, SOLDIER_BITE_WIDTH );
// set aiming directions
AngleVectors( ent->client->ps.viewangles, forward, right, up );
@@ -660,7 +670,7 @@ qboolean CheckVenomAttack( gentity_t *ent )
VectorMA( muzzle, SOLDIER_BITE_RANGE, forward, end );
- trap_Trace( &tr, muzzle, NULL, NULL, end, ent->s.number, MASK_SHOT );
+ trap_Trace( &tr, muzzle, mins, maxs, end, ent->s.number, MASK_SHOT );
if ( tr.surfaceFlags & SURF_NOIMPACT )
return qfalse;
@@ -810,7 +820,11 @@ qboolean CheckPounceAttack( gentity_t *ent )
vec3_t end;
gentity_t *tent;
gentity_t *traceEnt;
- int damage;
+ int damage;
+ vec3_t mins, maxs;
+
+ VectorSet( mins, -DRAGOON_POUNCE_WIDTH, -DRAGOON_POUNCE_WIDTH, -DRAGOON_POUNCE_WIDTH );
+ VectorSet( maxs, DRAGOON_POUNCE_WIDTH, DRAGOON_POUNCE_WIDTH, DRAGOON_POUNCE_WIDTH );
if( !ent->client->allowedToPounce )
return qfalse;
@@ -1110,20 +1124,20 @@ void FireWeapon( gentity_t *ent )
{
case WP_HYDRA:
case WP_HYDRA_UPG:
- meleeAttack( ent, HYDRA_CLAW_RANGE, HYDRA_CLAW_DMG, MOD_HYDRA_CLAW );
+ meleeAttack( ent, HYDRA_CLAW_RANGE, HYDRA_CLAW_WIDTH, HYDRA_CLAW_DMG, MOD_HYDRA_CLAW );
break;
case WP_DRAGOON:
case WP_DRAGOON_UPG:
- meleeAttack( ent, DRAGOON_CLAW_RANGE, DRAGOON_CLAW_DMG, MOD_DRAGOON_CLAW );
+ meleeAttack( ent, DRAGOON_CLAW_RANGE, DRAGOON_CLAW_WIDTH, DRAGOON_CLAW_DMG, MOD_DRAGOON_CLAW );
break;
case WP_CHIMERA:
- meleeAttack( ent, CHIMERA_CLAW_RANGE, CHIMERA_CLAW_DMG, MOD_CHIMERA_CLAW );
+ meleeAttack( ent, CHIMERA_CLAW_RANGE, CHIMERA_CLAW_WIDTH, CHIMERA_CLAW_DMG, MOD_CHIMERA_CLAW );
break;
case WP_CHIMERA_UPG:
- meleeAttack( ent, CHIMERA_CLAW_RANGE, CHIMERA_CLAW_DMG, MOD_CHIMERA_CLAW );
+ meleeAttack( ent, CHIMERA_CLAW_RANGE, CHIMERA_CLAW_WIDTH, CHIMERA_CLAW_DMG, MOD_CHIMERA_CLAW );
break;
case WP_BIGMOFO:
- meleeAttack( ent, BMOFO_CLAW_RANGE, BMOFO_CLAW_DMG, MOD_BMOFO_CLAW );
+ meleeAttack( ent, BMOFO_CLAW_RANGE, BMOFO_CLAW_WIDTH, BMOFO_CLAW_DMG, MOD_BMOFO_CLAW );
break;
case WP_BLASTER:
diff --git a/src/game/tremulous.h b/src/game/tremulous.h
index cf349276..1c001c7a 100644
--- a/src/game/tremulous.h
+++ b/src/game/tremulous.h
@@ -28,6 +28,7 @@
#define ABUILDER_BUILD_REPEAT 500
#define ABUILDER_CLAW_DMG ADM(25)
#define ABUILDER_CLAW_RANGE 64.0f
+#define ABUILDER_CLAW_WIDTH 4.0f
#define ABUILDER_CLAW_REPEAT 1000
#define ABUILDER_BASE_DELAY 9000
#define ABUILDER_ADV_DELAY 4000
@@ -39,10 +40,12 @@
#define SOLDIER_BITE_DMG ADM(60)
#define SOLDIER_BITE_RANGE 64.0f
+#define SOLDIER_BITE_WIDTH 6.0f
#define SOLDIER_BITE_REPEAT 500
#define HYDRA_CLAW_DMG ADM(40)
#define HYDRA_CLAW_RANGE 96.0f
+#define HYDRA_CLAW_WIDTH 10.0f
#define HYDRA_CLAW_REPEAT 600
#define HYDRA_CLAW_U_REPEAT 500
#define HYDRA_GRAB_RANGE 64.0f
@@ -54,6 +57,7 @@
#define CHIMERA_CLAW_DMG ADM(50)
#define CHIMERA_CLAW_RANGE 96.0f
+#define CHIMERA_CLAW_WIDTH 12.0f
#define CHIMERA_CLAW_REPEAT 500
#define CHIMERA_CLAW_U_REPEAT 400
#define CHIMERA_AREAZAP_DMG ADM(75)
@@ -63,10 +67,12 @@
#define DRAGOON_CLAW_DMG ADM(100)
#define DRAGOON_CLAW_RANGE 96.0f
+#define DRAGOON_CLAW_WIDTH 16.0f
#define DRAGOON_CLAW_REPEAT 700
#define DRAGOON_CLAW_U_REPEAT 600
#define DRAGOON_POUNCE_DMG ADM(200)
#define DRAGOON_POUNCE_RANGE 96.0f
+#define DRAGOON_POUNCE_WIDTH 16.0f
#define DRAGOON_POUNCE_SPEED 700
#define DRAGOON_POUNCE_UPG_SPEED 800
#define DRAGOON_POUNCE_SPEED_MOD 0.75f
@@ -77,6 +83,7 @@
#define BMOFO_CLAW_DMG ADM(150)
#define BMOFO_CLAW_RANGE 128.0f
+#define BMOFO_CLAW_WIDTH 20.0f
#define BMOFO_CLAW_REPEAT 750
#define BMOFO_REGEN_RANGE 200.0f
#define BMOFO_REGEN_MOD 2.0f
@@ -191,7 +198,7 @@
#define CREEP_ARMOUR_MODIFIER 0.75f
#define CREEP_SCALEDOWN_TIME 3000
-#define ASPAWN_BP 100
+#define ASPAWN_BP 10
#define ASPAWN_BT 15000
#define ASPAWN_HEALTH ABHM(500)
#define ASPAWN_REGEN 8
@@ -200,7 +207,7 @@
#define ASPAWN_CREEPSIZE 120
#define ASPAWN_VALUE 150
-#define BARRICADE_BP 80
+#define BARRICADE_BP 8
#define BARRICADE_BT 20000
#define BARRICADE_HEALTH ABHM(350)
#define BARRICADE_REGEN 12
@@ -208,7 +215,7 @@
#define BARRICADE_SPLASHRADIUS 50
#define BARRICADE_CREEPSIZE 120
-#define BOOSTER_BP 120
+#define BOOSTER_BP 12
#define BOOSTER_BT 15000
#define BOOSTER_HEALTH ABHM(300)
#define BOOSTER_REGEN 8
@@ -217,7 +224,7 @@
#define BOOSTER_CREEPSIZE 120
#define BOOSTER_INTERVAL 30000 //time in msec between uses (per player)
-#define ACIDTUBE_BP 50
+#define ACIDTUBE_BP 5
#define ACIDTUBE_BT 15000
#define ACIDTUBE_HEALTH ABHM(200)
#define ACIDTUBE_REGEN 8
@@ -227,7 +234,7 @@
#define ACIDTUBE_RANGE 300.0f
#define ACIDTUBE_REPEAT 3000
-#define HIVE_BP 50
+#define HIVE_BP 12
#define HIVE_BT 20000
#define HIVE_HEALTH ABHM(200)
#define HIVE_REGEN 8
@@ -240,7 +247,7 @@
#define HIVE_SPEED 230.0f
#define HIVE_DIR_CHANGE_PERIOD 500
-#define TRAPPER_BP 150
+#define TRAPPER_BP 10
#define TRAPPER_BT 12000
#define TRAPPER_HEALTH ABHM(80)
#define TRAPPER_REGEN 6
@@ -263,7 +270,7 @@
#define OVERMIND_ATTACK_REPEAT 1000
#define OVERMIND_VALUE 300
-#define HOVEL_BP 80
+#define HOVEL_BP 8
#define HOVEL_BT 15000
#define HOVEL_HEALTH ABHM(750)
#define HOVEL_REGEN 20
@@ -317,7 +324,7 @@
#define PAINSAW_PRICE 100
#define PAINSAW_REPEAT 75
-#define PAINSAW_DAMAGE HDM(25)
+#define PAINSAW_DAMAGE HDM(20)
#define PAINSAW_RANGE 48.0f
#define SHOTGUN_PRICE 150
@@ -331,7 +338,7 @@
#define SHOTGUN_DMG HDM(12)
#define LASGUN_PRICE 250
-#define LASGUN_AMMO 80
+#define LASGUN_AMMO 100
#define LASGUN_REPEAT 150
#define LASGUN_RELOAD 2000
#define LASGUN_DAMAGE HDM(10)
@@ -356,7 +363,7 @@
#define PRIFLE_MAXCLIPS 3
#define PRIFLE_REPEAT 100
#define PRIFLE_RELOAD 2000
-#define PRIFLE_DMG HDM(13)
+#define PRIFLE_DMG HDM(10)
#define PRIFLE_SPEED 1500
#define FLAMER_PRICE 450
@@ -442,21 +449,20 @@
#define REPEATER_BASESIZE 500
#define HUMAN_DETONATION_DELAY 5000
-#define HSPAWN_BP 100
+#define HSPAWN_BP 10
#define HSPAWN_BT 10000
#define HSPAWN_HEALTH HBHM(500)
#define HSPAWN_SPLASHDAMAGE 50
#define HSPAWN_SPLASHRADIUS 100
#define HSPAWN_VALUE 1
-#define MEDISTAT_BP 80
+#define MEDISTAT_BP 8
#define MEDISTAT_BT 10000
#define MEDISTAT_HEALTH HBHM(300)
#define MEDISTAT_SPLASHDAMAGE 50
#define MEDISTAT_SPLASHRADIUS 100
-#define MAX_MEDISTAT_CLIENTS 1
-#define MGTURRET_BP 80
+#define MGTURRET_BP 8
#define MGTURRET_BT 10000
#define MGTURRET_HEALTH HBHM(500)
#define MGTURRET_SPLASHDAMAGE 50
@@ -471,7 +477,7 @@
#define MGTURRET_DCC_ANGULARSPEED 7
#define MGTURRET_DCC_ACCURACYTOLERANCE MGTURRET_DCC_ANGULARSPEED / 1.5f
-#define TESLAGEN_BP 100
+#define TESLAGEN_BP 10
#define TESLAGEN_BT 15000
#define TESLAGEN_HEALTH HBHM(350)
#define TESLAGEN_SPLASHDAMAGE 50
@@ -480,13 +486,13 @@
#define TESLAGEN_RANGE 300
#define TESLAGEN_DMG HDM(20)
-#define DC_BP 80
+#define DC_BP 8
#define DC_BT 10000
#define DC_HEALTH HBHM(150)
#define DC_SPLASHDAMAGE 50
#define DC_SPLASHRADIUS 100
-#define ARMOURY_BP 100
+#define ARMOURY_BP 10
#define ARMOURY_BT 10000
#define ARMOURY_HEALTH HBHM(200)
#define ARMOURY_SPLASHDAMAGE 50
@@ -499,7 +505,7 @@
#define REACTOR_SPLASHRADIUS 300
#define REACTOR_VALUE 2
-#define REPEATER_BP 100
+#define REPEATER_BP 10
#define REPEATER_BT 10000
#define REPEATER_HEALTH HBHM(200)
#define REPEATER_SPLASHDAMAGE 50