diff --git a/code/game/g_team.c b/code/game/g_team.c index 12d9f6a2..7e0e90b9 100644 --- a/code/game/g_team.c +++ b/code/game/g_team.c @@ -1313,9 +1313,8 @@ static void ObeliskPain( gentity_t *self, gentity_t *attacker, int damage ) { AddScore(attacker, self->r.currentOrigin, actualDamage); } -gentity_t *SpawnObelisk( vec3_t origin, int team, int spawnflags) { - trace_t tr; - vec3_t dest; +// spawn invisible damagable obelisk entity / harvester base trigger. +gentity_t *SpawnObelisk( vec3_t origin, vec3_t mins, vec3_t maxs, int team ) { gentity_t *ent; ent = G_Spawn(); @@ -1324,8 +1323,8 @@ gentity_t *SpawnObelisk( vec3_t origin, int team, int spawnflags) { VectorCopy( origin, ent->s.pos.trBase ); VectorCopy( origin, ent->r.currentOrigin ); - VectorSet( ent->r.mins, -15, -15, 0 ); - VectorSet( ent->r.maxs, 15, 15, 87 ); + VectorCopy( mins, ent->r.mins ); + VectorCopy( maxs, ent->r.maxs ); ent->s.eType = ET_GENERAL; ent->flags = FL_NO_KNOCKBACK; @@ -1344,7 +1343,26 @@ gentity_t *SpawnObelisk( vec3_t origin, int team, int spawnflags) { ent->touch = ObeliskTouch; } - if ( spawnflags & 1 ) { + G_SetOrigin( ent, ent->s.origin ); + + ent->spawnflags = team; + + trap_LinkEntity( ent ); + + return ent; +} + +// setup entity for team base model / obelisk model. +void ObeliskInit( gentity_t *ent ) { + trace_t tr; + vec3_t dest; + + ent->s.eType = ET_TEAM; + + VectorSet( ent->r.mins, -15, -15, 0 ); + VectorSet( ent->r.maxs, 15, 15, 87 ); + + if ( ent->spawnflags & 1 ) { // suspended G_SetOrigin( ent, ent->s.origin ); } else { @@ -1368,12 +1386,6 @@ gentity_t *SpawnObelisk( vec3_t origin, int team, int spawnflags) { G_SetOrigin( ent, tr.endpos ); } } - - ent->spawnflags = team; - - trap_LinkEntity( ent ); - - return ent; } /*QUAKED team_redobelisk (1 0 0) (-16 -16 0) (16 16 8) @@ -1385,16 +1397,16 @@ void SP_team_redobelisk( gentity_t *ent ) { G_FreeEntity(ent); return; } - ent->s.eType = ET_TEAM; + ObeliskInit( ent ); if ( g_gametype.integer == GT_OBELISK ) { - obelisk = SpawnObelisk( ent->s.origin, TEAM_RED, ent->spawnflags ); + obelisk = SpawnObelisk( ent->s.origin, ent->r.mins, ent->r.maxs, TEAM_RED ); obelisk->activator = ent; // initial obelisk health value ent->s.modelindex2 = 0xff; ent->s.frame = 0; } if ( g_gametype.integer == GT_HARVESTER ) { - obelisk = SpawnObelisk( ent->s.origin, TEAM_RED, ent->spawnflags ); + obelisk = SpawnObelisk( ent->s.origin, ent->r.mins, ent->r.maxs, TEAM_RED ); obelisk->activator = ent; } ent->s.modelindex = TEAM_RED; @@ -1410,16 +1422,16 @@ void SP_team_blueobelisk( gentity_t *ent ) { G_FreeEntity(ent); return; } - ent->s.eType = ET_TEAM; + ObeliskInit( ent ); if ( g_gametype.integer == GT_OBELISK ) { - obelisk = SpawnObelisk( ent->s.origin, TEAM_BLUE, ent->spawnflags ); + obelisk = SpawnObelisk( ent->s.origin, ent->r.mins, ent->r.maxs, TEAM_BLUE ); obelisk->activator = ent; // initial obelisk health value ent->s.modelindex2 = 0xff; ent->s.frame = 0; } if ( g_gametype.integer == GT_HARVESTER ) { - obelisk = SpawnObelisk( ent->s.origin, TEAM_BLUE, ent->spawnflags ); + obelisk = SpawnObelisk( ent->s.origin, ent->r.mins, ent->r.maxs, TEAM_BLUE ); obelisk->activator = ent; } ent->s.modelindex = TEAM_BLUE; @@ -1433,10 +1445,10 @@ void SP_team_neutralobelisk( gentity_t *ent ) { G_FreeEntity(ent); return; } - ent->s.eType = ET_TEAM; + ObeliskInit( ent ); if ( g_gametype.integer == GT_HARVESTER) { - neutralObelisk = SpawnObelisk( ent->s.origin, TEAM_FREE, ent->spawnflags); - neutralObelisk->spawnflags = TEAM_FREE; + neutralObelisk = SpawnObelisk( ent->s.origin, ent->r.mins, ent->r.maxs, TEAM_FREE ); + neutralObelisk->activator = ent; } ent->s.modelindex = TEAM_FREE; trap_LinkEntity(ent);