void actor_run(edict_t * self) { if ((level.time < self->pain_debounce_time) && (!self->enemy)) { if (self->movetarget) actor_walk(self); else actor_stand(self); return; } if (self->monsterinfo.aiflags & AI_STAND_GROUND) { actor_stand(self); return; } self->monsterinfo.currentmove = &actor_move_run; }
void target_actor_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf) { vec3_t v; if (other->movetarget != self) return; if (other->enemy) return; other->goalentity = other->movetarget = NULL; if (self->message) { int n; edict_t *ent; for (n = 1; n <= game.maxclients; n++) { ent = &g_edicts[n]; if (!ent->inuse) continue; gi.cprintf (ent, PRINT_CHAT, "%s: %s\n", actor_names[(other - g_edicts)%MAX_ACTOR_NAMES], self->message); } } if (self->spawnflags & 1) //jump { other->velocity[0] = self->movedir[0] * self->speed; other->velocity[1] = self->movedir[1] * self->speed; if (other->groundentity) { other->groundentity = NULL; other->velocity[2] = self->movedir[2]; gi.sound(other, CHAN_VOICE, gi.soundindex("player/male/jump1.wav"), 1, ATTN_NORM, 0); } } if (self->spawnflags & 2) //shoot { } else if (self->spawnflags & 4) //attack { other->enemy = G_PickTargetIgnore(self->pathtarget,self->owner); if (other->enemy) { other->goalentity = other->enemy; if (self->spawnflags & 32) other->monsterinfo.aiflags |= AI_BRUTAL; if (self->spawnflags & 16) { other->monsterinfo.aiflags |= AI_STAND_GROUND; actor_stand (other); } else { actor_run (other); } } } if (!(self->spawnflags & 6) && (self->pathtarget)) { char *savetarget; savetarget = self->target; self->target = self->pathtarget; G_UseTargets (self, other); self->target = savetarget; } other->movetarget = G_PickTargetIgnore(self->target,self->owner); if (!other->goalentity) other->goalentity = other->movetarget; if (!other->movetarget && !other->enemy) { other->monsterinfo.pausetime = level.time + 100000000; other->monsterinfo.stand (other); } else if (other->movetarget == other->goalentity) { VectorSubtract (other->movetarget->s.origin, other->s.origin, v); other->ideal_yaw = vectoyaw (v); } }