diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/g_buildable.c | 62 | ||||
-rw-r--r-- | src/game/tremulous.h | 1 |
2 files changed, 58 insertions, 5 deletions
diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c index 1117aa7..d8612d6 100644 --- a/src/game/g_buildable.c +++ b/src/game/g_buildable.c @@ -1521,8 +1521,58 @@ void ABooster_Touch( gentity_t *self, gentity_t *other, trace_t *trace ) client->lastBoostedTime = level.time; } +/* +================ +ABooster_Think + +Boosts aliens that are in range and line of sight +================ +*/ +void ABooster_Think( gentity_t *self ) +{ + int i, num; + int entityList[ MAX_GENTITIES ]; + vec3_t range, mins, maxs; + gentity_t *player; + gclient_t *client; + self->powered = G_IsOvermindBuilt( ); + + //if there is no creep nearby die + if( !G_FindCreep( self ) ) + { + G_Damage( self, NULL, NULL, NULL, NULL, 10000, 0, MOD_SUICIDE ); + return; + } + + G_CreepSlow( self ); + + self->nextthink = level.time + BG_FindNextThinkForBuildable( self->s.modelindex ); + VectorSet( range, REGEN_BOOST_RANGE, REGEN_BOOST_RANGE, + REGEN_BOOST_RANGE ); + VectorAdd( self->r.currentOrigin, range, maxs ); + VectorSubtract( self->r.currentOrigin, range, mins ); + + num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES ); + for( i = 0; i < num; i++ ) + { + player = &g_entities[ entityList[ i ] ]; + client = player->client; + + if( !client ) + continue; + + if( client->ps.stats[ STAT_PTEAM ] != PTE_ALIENS ) + continue; + + if( Distance( client->ps.origin, self->r.currentOrigin ) > REGEN_BOOST_RANGE ) + continue; + + client->ps.stats[ STAT_STATE ] |= SS_BOOSTED; + client->lastBoostedTime = level.time; + } +} //================================================================================== @@ -3550,7 +3600,7 @@ static gentity_t *G_Build( gentity_t *builder, buildable_t buildable, vec3_t ori case BA_A_BOOSTER: built->die = ABarricade_Die; - built->think = ABarricade_Think; + built->think = ABooster_Think; built->pain = ABarricade_Pain; built->touch = ABooster_Touch; break; @@ -4378,12 +4428,14 @@ void G_CommitRevertedBuildable( gentity_t *ent ) switch( ent->s.modelindex ) { case BA_A_SPAWN: - ent->think = ASpawn_Think; - break; - case BA_A_BARRICADE: - case BA_A_BOOSTER: + ent->think = ASpawn_Think; + break; + case BA_A_BARRICADE: ent->think = ABarricade_Think; break; + case BA_A_BOOSTER: + ent->think = ABooster_Think; + break; case BA_A_ACIDTUBE: ent->think = AAcidTube_Think; break; diff --git a/src/game/tremulous.h b/src/game/tremulous.h index 423d465..65bd3ca 100644 --- a/src/game/tremulous.h +++ b/src/game/tremulous.h @@ -250,6 +250,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define BOOSTER_INTERVAL 30000 //time in msec between uses (per player) #define BOOSTER_REGEN_MOD 2.0f #define BOOST_TIME 30000 +#define REGEN_BOOST_RANGE 100.0f #define ACIDTUBE_BP 8 #define ACIDTUBE_BT 15000 |