diff options
Diffstat (limited to 'src/game')
-rw-r--r-- | src/game/bg_public.h | 2 | ||||
-rw-r--r-- | src/game/g_buildable.c | 44 | ||||
-rw-r--r-- | src/game/g_cmds.c | 39 | ||||
-rw-r--r-- | src/game/g_main.c | 4 | ||||
-rw-r--r-- | src/game/g_spawn.c | 4 | ||||
-rw-r--r-- | src/game/g_weapon.c | 40 | ||||
-rw-r--r-- | src/game/tremulous.h | 42 |
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 |