diff options
Diffstat (limited to 'src/baseq2/g_turret.c')
-rw-r--r-- | src/baseq2/g_turret.c | 152 |
1 files changed, 68 insertions, 84 deletions
diff --git a/src/baseq2/g_turret.c b/src/baseq2/g_turret.c index cd3c3a9..66f9a22 100644 --- a/src/baseq2/g_turret.c +++ b/src/baseq2/g_turret.c @@ -8,7 +8,7 @@ of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -24,13 +24,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. void AnglesNormalize(vec3_t vec) { - while(vec[0] > 360) + while (vec[0] > 360) vec[0] -= 360; - while(vec[0] < 0) + while (vec[0] < 0) vec[0] += 360; - while(vec[1] > 360) + while (vec[1] > 360) vec[1] -= 360; - while(vec[1] < 0) + while (vec[1] < 0) vec[1] += 360; } @@ -49,13 +49,12 @@ void turret_blocked(edict_t *self, edict_t *other) { edict_t *attacker; - if (other->takedamage) - { + if (other->takedamage) { if (self->teammaster->owner) attacker = self->teammaster->owner; else attacker = self->teammaster; - T_Damage (other, self, attacker, vec3_origin, other->s.origin, vec3_origin, self->teammaster->dmg, 10, 0, MOD_CRUSH); + T_Damage(other, self, attacker, vec3_origin, other->s.origin, vec3_origin, self->teammaster->dmg, 10, 0, MOD_CRUSH); } } @@ -75,31 +74,31 @@ Use "angle" to set the starting angle. "maxyaw" max acceptable yaw angle : default 360 */ -void turret_breach_fire (edict_t *self) +void turret_breach_fire(edict_t *self) { vec3_t f, r, u; vec3_t start; int damage; int speed; - AngleVectors (self->s.angles, f, r, u); - VectorMA (self->s.origin, self->move_origin[0], f, start); - VectorMA (start, self->move_origin[1], r, start); - VectorMA (start, self->move_origin[2], u, start); + AngleVectors(self->s.angles, f, r, u); + VectorMA(self->s.origin, self->move_origin[0], f, start); + VectorMA(start, self->move_origin[1], r, start); + VectorMA(start, self->move_origin[2], u, start); damage = 100 + random() * 50; speed = 550 + 50 * skill->value; - fire_rocket (self->teammaster->owner, start, f, damage, speed, 150, damage); - gi.positioned_sound (start, self, CHAN_WEAPON, gi.soundindex("weapons/rocklf1a.wav"), 1, ATTN_NORM, 0); + fire_rocket(self->teammaster->owner, start, f, damage, speed, 150, damage); + gi.positioned_sound(start, self, CHAN_WEAPON, gi.soundindex("weapons/rocklf1a.wav"), 1, ATTN_NORM, 0); } -void turret_breach_think (edict_t *self) +void turret_breach_think(edict_t *self) { edict_t *ent; vec3_t current_angles; vec3_t delta; - VectorCopy (self->s.angles, current_angles); + VectorCopy(self->s.angles, current_angles); AnglesNormalize(current_angles); AnglesNormalize(self->move_angles); @@ -112,8 +111,7 @@ void turret_breach_think (edict_t *self) else if (self->move_angles[PITCH] < self->pos2[PITCH]) self->move_angles[PITCH] = self->pos2[PITCH]; - if ((self->move_angles[YAW] < self->pos1[YAW]) || (self->move_angles[YAW] > self->pos2[YAW])) - { + if ((self->move_angles[YAW] < self->pos1[YAW]) || (self->move_angles[YAW] > self->pos2[YAW])) { float dmin, dmax; dmin = fabs(self->pos1[YAW] - self->move_angles[YAW]); @@ -132,7 +130,7 @@ void turret_breach_think (edict_t *self) self->move_angles[YAW] = self->pos2[YAW]; } - VectorSubtract (self->move_angles, current_angles, delta); + VectorSubtract(self->move_angles, current_angles, delta); if (delta[0] < -180) delta[0] += 360; else if (delta[0] > 180) @@ -152,7 +150,7 @@ void turret_breach_think (edict_t *self) if (delta[1] < -1 * self->speed * FRAMETIME) delta[1] = -1 * self->speed * FRAMETIME; - VectorScale (delta, 1.0/FRAMETIME, self->avelocity); + VectorScale(delta, 1.0 / FRAMETIME, self->avelocity); self->nextthink = level.time + FRAMETIME; @@ -160,8 +158,7 @@ void turret_breach_think (edict_t *self) ent->avelocity[1] = self->avelocity[1]; // if we have adriver, adjust his velocities - if (self->owner) - { + if (self->owner) { float angle; float target_z; float diff; @@ -174,54 +171,50 @@ void turret_breach_think (edict_t *self) // x & y angle = self->s.angles[1] + self->owner->move_origin[1]; - angle *= (M_PI*2 / 360); + angle *= (M_PI * 2 / 360); target[0] = SnapToEights(self->s.origin[0] + cos(angle) * self->owner->move_origin[0]); target[1] = SnapToEights(self->s.origin[1] + sin(angle) * self->owner->move_origin[0]); target[2] = self->owner->s.origin[2]; - VectorSubtract (target, self->owner->s.origin, dir); + VectorSubtract(target, self->owner->s.origin, dir); self->owner->velocity[0] = dir[0] * 1.0 / FRAMETIME; self->owner->velocity[1] = dir[1] * 1.0 / FRAMETIME; // z - angle = self->s.angles[PITCH] * (M_PI*2 / 360); + angle = self->s.angles[PITCH] * (M_PI * 2 / 360); target_z = SnapToEights(self->s.origin[2] + self->owner->move_origin[0] * tan(angle) + self->owner->move_origin[2]); diff = target_z - self->owner->s.origin[2]; self->owner->velocity[2] = diff * 1.0 / FRAMETIME; - if (self->spawnflags & 65536) - { - turret_breach_fire (self); + if (self->spawnflags & 65536) { + turret_breach_fire(self); self->spawnflags &= ~65536; } } } -void turret_breach_finish_init (edict_t *self) +void turret_breach_finish_init(edict_t *self) { // get and save info for muzzle location - if (!self->target) - { + if (!self->target) { gi.dprintf("%s at %s needs a target\n", self->classname, vtos(self->s.origin)); - } - else - { - self->target_ent = G_PickTarget (self->target); - VectorSubtract (self->target_ent->s.origin, self->s.origin, self->move_origin); + } else { + self->target_ent = G_PickTarget(self->target); + VectorSubtract(self->target_ent->s.origin, self->s.origin, self->move_origin); G_FreeEdict(self->target_ent); } self->teammaster->dmg = self->dmg; self->think = turret_breach_think; - self->think (self); + self->think(self); } -void SP_turret_breach (edict_t *self) +void SP_turret_breach(edict_t *self) { self->solid = SOLID_BSP; self->movetype = MOVETYPE_PUSH; - gi.setmodel (self, self->model); + gi.setmodel(self, self->model); if (!self->speed) self->speed = 50; @@ -247,7 +240,7 @@ void SP_turret_breach (edict_t *self) self->think = turret_breach_finish_init; self->nextthink = level.time + FRAMETIME; - gi.linkentity (self); + gi.linkentity(self); } @@ -256,13 +249,13 @@ This portion of the turret changes yaw only. MUST be teamed with a turret_breach. */ -void SP_turret_base (edict_t *self) +void SP_turret_base(edict_t *self) { self->solid = SOLID_BSP; self->movetype = MOVETYPE_PUSH; - gi.setmodel (self, self->model); + gi.setmodel(self, self->model); self->blocked = turret_blocked; - gi.linkentity (self); + gi.linkentity(self); } @@ -271,11 +264,11 @@ Must NOT be on the team with the rest of the turret parts. Instead it must target the turret_breach. */ -void infantry_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage); -void infantry_stand (edict_t *self); -void monster_use (edict_t *self, edict_t *other, edict_t *activator); +void infantry_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage); +void infantry_stand(edict_t *self); +void monster_use(edict_t *self, edict_t *other, edict_t *activator); -void turret_driver_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) +void turret_driver_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) { edict_t *ent; @@ -292,12 +285,12 @@ void turret_driver_die (edict_t *self, edict_t *inflictor, edict_t *attacker, in self->target_ent->owner = NULL; self->target_ent->teammaster->owner = NULL; - infantry_die (self, inflictor, attacker, damage); + infantry_die(self, inflictor, attacker, damage); } -qboolean FindTarget (edict_t *self); +qboolean FindTarget(edict_t *self); -void turret_driver_think (edict_t *self) +void turret_driver_think(edict_t *self) { vec3_t target; vec3_t dir; @@ -308,35 +301,28 @@ void turret_driver_think (edict_t *self) if (self->enemy && (!self->enemy->inuse || self->enemy->health <= 0)) self->enemy = NULL; - if (!self->enemy) - { - if (!FindTarget (self)) + if (!self->enemy) { + if (!FindTarget(self)) return; self->monsterinfo.trail_time = level.time; self->monsterinfo.aiflags &= ~AI_LOST_SIGHT; - } - else - { - if (visible (self, self->enemy)) - { - if (self->monsterinfo.aiflags & AI_LOST_SIGHT) - { + } else { + if (visible(self, self->enemy)) { + if (self->monsterinfo.aiflags & AI_LOST_SIGHT) { self->monsterinfo.trail_time = level.time; self->monsterinfo.aiflags &= ~AI_LOST_SIGHT; } - } - else - { + } else { self->monsterinfo.aiflags |= AI_LOST_SIGHT; return; } } // let the turret know where we want it to aim - VectorCopy (self->enemy->s.origin, target); + VectorCopy(self->enemy->s.origin, target); target[2] += self->enemy->viewheight; - VectorSubtract (target, self->target_ent->s.origin, dir); - vectoangles (dir, self->target_ent->move_angles); + VectorSubtract(target, self->target_ent->s.origin, dir); + vectoangles(dir, self->target_ent->move_angles); // decide if we should shoot if (level.time < self->monsterinfo.attack_finished) @@ -351,7 +337,7 @@ void turret_driver_think (edict_t *self) self->target_ent->spawnflags |= 65536; } -void turret_driver_link (edict_t *self) +void turret_driver_link(edict_t *self) { vec3_t vec; edict_t *ent; @@ -359,18 +345,18 @@ void turret_driver_link (edict_t *self) self->think = turret_driver_think; self->nextthink = level.time + FRAMETIME; - self->target_ent = G_PickTarget (self->target); + self->target_ent = G_PickTarget(self->target); self->target_ent->owner = self; self->target_ent->teammaster->owner = self; - VectorCopy (self->target_ent->s.angles, self->s.angles); + VectorCopy(self->target_ent->s.angles, self->s.angles); vec[0] = self->target_ent->s.origin[0] - self->s.origin[0]; vec[1] = self->target_ent->s.origin[1] - self->s.origin[1]; vec[2] = 0; self->move_origin[0] = VectorLength(vec); - VectorSubtract (self->s.origin, self->target_ent->s.origin, vec); - vectoangles (vec, vec); + VectorSubtract(self->s.origin, self->target_ent->s.origin, vec); + vectoangles(vec, vec); AnglesNormalize(vec); self->move_origin[1] = vec[1]; @@ -384,19 +370,18 @@ void turret_driver_link (edict_t *self) self->flags |= FL_TEAMSLAVE; } -void SP_turret_driver (edict_t *self) +void SP_turret_driver(edict_t *self) { - if (deathmatch->value) - { - G_FreeEdict (self); + if (deathmatch->value) { + G_FreeEdict(self); return; } self->movetype = MOVETYPE_PUSH; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex("models/monsters/infantry/tris.md2"); - VectorSet (self->mins, -16, -16, -24); - VectorSet (self->maxs, 16, 16, 32); + VectorSet(self->mins, -16, -16, -24); + VectorSet(self->maxs, 16, 16, 32); self->health = 100; self->gib_health = 0; @@ -415,12 +400,11 @@ void SP_turret_driver (edict_t *self) self->takedamage = DAMAGE_AIM; self->use = monster_use; self->clipmask = MASK_MONSTERSOLID; - VectorCopy (self->s.origin, self->s.old_origin); - self->monsterinfo.aiflags |= AI_STAND_GROUND|AI_DUCKED; + VectorCopy(self->s.origin, self->s.old_origin); + self->monsterinfo.aiflags |= AI_STAND_GROUND | AI_DUCKED; - if (st.item) - { - self->item = FindItemByClassname (st.item); + if (st.item) { + self->item = FindItemByClassname(st.item); if (!self->item) gi.dprintf("%s at %s has bad item: %s\n", self->classname, vtos(self->s.origin), st.item); } @@ -428,5 +412,5 @@ void SP_turret_driver (edict_t *self) self->think = turret_driver_link; self->nextthink = level.time + FRAMETIME; - gi.linkentity (self); + gi.linkentity(self); } |