summaryrefslogtreecommitdiff
path: root/src/game/g_buildable.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/g_buildable.c')
-rw-r--r--src/game/g_buildable.c40
1 files changed, 33 insertions, 7 deletions
diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c
index 18a0fae..22e8376 100644
--- a/src/game/g_buildable.c
+++ b/src/game/g_buildable.c
@@ -322,7 +322,7 @@ buildable_t G_IsPowered( vec3_t origin )
return BA_NONE;
}
- /*
+/*
================
G_IsGathered
@@ -1505,7 +1505,9 @@ void AAcidTube_Think( gentity_t *self )
if (enemy->client && enemy->client->notrackEndTime >= level.time)
continue;
- if( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] == TEAM_HUMANS )
+ if( ( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] == TEAM_HUMANS ) ||
+ ( enemy->s.eType == ET_BUILDABLE &&
+ BG_Buildable( enemy->s.modelindex )->team == TEAM_HUMANS ) )
{
// start the attack animation
if( level.time >= self->timestamp + ACIDTUBE_REPEAT_ANIM )
@@ -2891,9 +2893,20 @@ qboolean HMGTurret_CheckTarget( gentity_t *self, gentity_t *target,
trace_t tr;
vec3_t dir, end;
- if( !target || target->health <= 0 || !target->client ||
- target->client->pers.teamSelection != TEAM_ALIENS )
- return qfalse;
+ if( !target || target->health <= 0 )
+ return qfalse;
+
+ if( target->client )
+ {
+ if( target->client->pers.teamSelection != TEAM_ALIENS )
+ return qfalse;
+ }
+ else
+ {
+ if( !( target->s.eType == ET_BUILDABLE &&
+ BG_Buildable( target->s.modelindex )->team == TEAM_ALIENS ) )
+ return qfalse;
+ }
if( target->flags & FL_NOTARGET )
return qfalse;
@@ -4177,6 +4190,7 @@ itemBuildError_t G_CanBuild( gentity_t *ent, buildable_t buildable, int distance
qboolean invert;
int contents;
playerState_t *ps = &ent->client->ps;
+ float d;
// Stop all buildables from interacting with traces
//G_SetBuildableLinkState( qfalse );
@@ -4244,7 +4258,13 @@ itemBuildError_t G_CanBuild( gentity_t *ent, buildable_t buildable, int distance
break;
case 2: // Creeps/colonies block building for enemy team
if( G_IsGathered( TEAM_HUMANS, entity_origin, qfalse, ent ) )
- reason = IBE_BLOCKEDBYENEMY;
+ {
+ tempent = G_Overmind( );
+ if( tempent != NULL ) {
+ d = Distance( tempent->s.origin, entity_origin );
+ if ( d > CREEP_BASESIZE ) reason = IBE_BLOCKEDBYENEMY;
+ } else reason = IBE_BLOCKEDBYENEMY;
+ }
break;
default:
if( G_IsPowered( entity_origin ) != BA_NONE )
@@ -4292,7 +4312,13 @@ itemBuildError_t G_CanBuild( gentity_t *ent, buildable_t buildable, int distance
reason = IBE_BLOCKEDBYENEMY;
case 2: // Creeps/colonies block building for enemy team
if( G_IsGathered( TEAM_ALIENS, entity_origin, qfalse, ent ) )
- reason = IBE_BLOCKEDBYENEMY;
+ {
+ tempent = G_Reactor( );
+ if( tempent != NULL ) {
+ d = Distance( tempent->s.origin, entity_origin );
+ if ( d > REACTOR_BASESIZE ) reason = IBE_BLOCKEDBYENEMY;
+ } else reason = IBE_BLOCKEDBYENEMY;
+ }
break;
default:
if( G_IsCreepHere( entity_origin ) )