diff options
Diffstat (limited to 'src/game/g_buildable.c')
-rw-r--r-- | src/game/g_buildable.c | 40 |
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 ) ) |