diff --git a/src/player/trail.c b/src/player/trail.c index 76be9f1..65e1a36 100644 --- a/src/player/trail.c +++ b/src/player/trail.c @@ -1,38 +1,39 @@ +/* ======================================================================= + * + * The player trail, used by monsters to locate the player. + * + * ======================================================================= + */ + #include "../header/local.h" - /* -============================================================================== + * This is a circular list containing the a list of points of where + * the player has been recently. It is used by monsters for pursuit. + * + * .origin the spot + * .owner forward link + * .aiment backward link + */ -PLAYER TRAIL +#define TRAIL_LENGTH 8 -============================================================================== +#define NEXT(n) (((n) + 1) & (TRAIL_LENGTH - 1)) +#define PREV(n) (((n) - 1) & (TRAIL_LENGTH - 1)) -This is a circular list containing the a list of points of where -the player has been recently. It is used by monsters for pursuit. +edict_t *trail[TRAIL_LENGTH]; +int trail_head; +qboolean trail_active = false; -.origin the spot -.owner forward link -.aiment backward link -*/ - - -#define TRAIL_LENGTH 8 - -edict_t *trail[TRAIL_LENGTH]; -int trail_head; -qboolean trail_active = false; - -#define NEXT(n) (((n) + 1) & (TRAIL_LENGTH - 1)) -#define PREV(n) (((n) - 1) & (TRAIL_LENGTH - 1)) - - -void PlayerTrail_Init (void) +void +PlayerTrail_Init(void) { - int n; + int n; - if (deathmatch->value /* FIXME || coop */) + if (deathmatch->value) + { return; + } for (n = 0; n < TRAIL_LENGTH; n++) { @@ -44,49 +45,64 @@ void PlayerTrail_Init (void) trail_active = true; } - -void PlayerTrail_Add (vec3_t spot) +void +PlayerTrail_Add(vec3_t spot) { - vec3_t temp; + vec3_t temp; if (!trail_active) + { return; + } - VectorCopy (spot, trail[trail_head]->s.origin); + VectorCopy(spot, trail[trail_head]->s.origin); trail[trail_head]->timestamp = level.time; - VectorSubtract (spot, trail[PREV(trail_head)]->s.origin, temp); - trail[trail_head]->s.angles[1] = vectoyaw (temp); + VectorSubtract(spot, trail[PREV(trail_head)]->s.origin, temp); + trail[trail_head]->s.angles[1] = vectoyaw(temp); trail_head = NEXT(trail_head); } - -void PlayerTrail_New (vec3_t spot) +void +PlayerTrail_New(vec3_t spot) { if (!trail_active) + { return; + } - PlayerTrail_Init (); - PlayerTrail_Add (spot); + PlayerTrail_Init(); + PlayerTrail_Add(spot); } - -edict_t *PlayerTrail_PickFirst (edict_t *self) +edict_t * +PlayerTrail_PickFirst(edict_t *self) { - int marker; - int n; - - if (!trail_active) + int marker; + int n; + + if (!self) + { return NULL; + } + + if (!trail_active) + { + return NULL; + } for (marker = trail_head, n = TRAIL_LENGTH; n; n--) { - if(trail[marker]->timestamp <= self->monsterinfo.trail_time) + if (trail[marker]->timestamp <= self->monsterinfo.trail_time) + { marker = NEXT(marker); + } else + { break; + } } if (visible(self, trail[marker])) @@ -102,27 +118,39 @@ edict_t *PlayerTrail_PickFirst (edict_t *self) return trail[marker]; } -edict_t *PlayerTrail_PickNext (edict_t *self) +edict_t * +PlayerTrail_PickNext(edict_t *self) { - int marker; - int n; - - if (!trail_active) + int marker; + int n; + + if (!self) + { return NULL; + } + + if (!trail_active) + { + return NULL; + } for (marker = trail_head, n = TRAIL_LENGTH; n; n--) { - if(trail[marker]->timestamp <= self->monsterinfo.trail_time) + if (trail[marker]->timestamp <= self->monsterinfo.trail_time) + { marker = NEXT(marker); + } else + { break; + } } return trail[marker]; } -edict_t *PlayerTrail_LastSpot (void) +edict_t * +PlayerTrail_LastSpot(void) { return trail[PREV(trail_head)]; } -