void door_go_up (edict_t *self, edict_t *activator) { if (self->moveinfo.state == STATE_UP) return; // already going up if (self->moveinfo.state == STATE_TOP) { // reset top wait time if (self->moveinfo.wait >= 0) self->nextthink = level.time + self->moveinfo.wait; return; } if (!(self->flags & FL_TEAMSLAVE)) { if (self->moveinfo.sound_start) gi.sound (self, CHAN_NO_PHS_ADD+CHAN_VOICE, self->moveinfo.sound_start, 1, ATTN_STATIC, 0); self->s.sound = self->moveinfo.sound_middle; } self->moveinfo.state = STATE_UP; if (strcmp(self->classname, "func_door") == 0) Move_Calc (self, self->moveinfo.end_origin, door_hit_top); else if (strcmp(self->classname, "func_door_rotating") == 0) AngleMove_Calc (self, door_hit_top); G_UseTargets (self, activator); door_use_areaportals (self, true); }
void door_secret_use (edict_t *self, edict_t *other, edict_t *activator) { // make sure we're not already moving if (!VectorCompare(self->s.origin, vec3_origin)) return; Move_Calc (self, self->pos1, door_secret_move1); door_use_areaportals (self, true); }
void train_next (edict_t *self) { edict_t *ent; vec3_t dest; qboolean first; first = true; again: if (!self->target) { // gi.dprintf ("train_next: no next target\n"); return; } ent = G_PickTarget (self->target); if (!ent) { gi.dprintf ("train_next: bad target %s\n", self->target); return; } self->target = ent->target; // check for a teleport path_corner if (ent->spawnflags & 1) { if (!first) { gi.dprintf ("connected teleport path_corners, see %s at %s\n", ent->classname, vtos(ent->s.origin)); return; } first = false; VectorSubtract (ent->s.origin, self->mins, self->s.origin); VectorCopy (self->s.origin, self->s.old_origin); self->s.event = EV_OTHER_TELEPORT; gi.linkentity (self); goto again; } self->moveinfo.wait = ent->wait; self->target_ent = ent; if (!(self->flags & FL_TEAMSLAVE)) { if (self->moveinfo.sound_start) gi.sound (self, CHAN_NO_PHS_ADD+CHAN_VOICE, self->moveinfo.sound_start, 1, ATTN_STATIC, 0); self->s.sound = self->moveinfo.sound_middle; } VectorSubtract (ent->s.origin, self->mins, dest); self->moveinfo.state = STATE_TOP; VectorCopy (self->s.origin, self->moveinfo.start_origin); VectorCopy (dest, self->moveinfo.end_origin); Move_Calc (self, dest, train_wait); self->spawnflags |= TRAIN_START_ON; }
void button_fire (edict_t *self) { if (self->moveinfo.state == STATE_UP || self->moveinfo.state == STATE_TOP) return; self->moveinfo.state = STATE_UP; if (self->moveinfo.sound_start && !(self->flags & FL_TEAMSLAVE)) gi.sound (self, CHAN_NO_PHS_ADD+CHAN_VOICE, self->moveinfo.sound_start, 1, ATTN_STATIC, 0); Move_Calc (self, self->moveinfo.end_origin, button_wait); }
void plat_go_up (edict_t *ent) { if (!(ent->flags & FL_TEAMSLAVE)) { if (ent->moveinfo.sound_start) gi.sound (ent, CHAN_NO_PHS_ADD+CHAN_VOICE, ent->moveinfo.sound_start, 1, ATTN_STATIC, 0); ent->s.sound = ent->moveinfo.sound_middle; } ent->moveinfo.state = STATE_UP; Move_Calc (ent, ent->moveinfo.start_origin, plat_hit_top); }
void button_return (edict_t *self) { self->moveinfo.state = STATE_DOWN; Move_Calc (self, self->moveinfo.start_origin, button_done); self->s.frame = 0; if (self->health) self->takedamage = DAMAGE_YES; }
void train_resume (edict_t *self) { edict_t *ent; vec3_t dest; ent = self->target_ent; VectorSubtract (ent->s.origin, self->mins, dest); self->moveinfo.state = STATE_TOP; VectorCopy (self->s.origin, self->moveinfo.start_origin); VectorCopy (dest, self->moveinfo.end_origin); Move_Calc (self, dest, train_wait); self->spawnflags |= TRAIN_START_ON; }
void door_go_down (edict_t *self) { if (!(self->flags & FL_TEAMSLAVE)) { if (self->moveinfo.sound_start) gi.sound (self, CHAN_NO_PHS_ADD+CHAN_VOICE, self->moveinfo.sound_start, 1, ATTN_STATIC, 0); self->s.sound = self->moveinfo.sound_middle; } if (self->max_health) { self->takedamage = DAMAGE_YES; self->health = self->max_health; } self->moveinfo.state = STATE_DOWN; if (strcmp(self->classname, "func_door") == 0) Move_Calc (self, self->moveinfo.start_origin, door_hit_bottom); else if (strcmp(self->classname, "func_door_rotating") == 0) AngleMove_Calc (self, door_hit_bottom); }
void train_spline_next (edict_t *self) { edict_t *ent; vec3_t dest; qboolean first; vec3_t angles,v; first = true; again: if (!self->target) { self->s.sound = 0; return; } ent = G_PickTarget (self->target); if (!ent) { gi.dprintf ("train_spline_next: bad target %s\n", self->target); return; } // spline stuff: self->from = self->to; self->to = ent; VectorSubtract(self->from->s.origin,self->to->s.origin,v); self->moveinfo.distance = VectorLength(v); self->moveinfo.ratio = 0.0; // end spline stuff self->target = ent->target; // check for a teleport path_corner if (ent->spawnflags & 1) { if (!first) { gi.dprintf ("connected teleport path_corners, see %s at %s\n", ent->classname, vtos(ent->s.origin)); return; } first = false; VectorSubtract (ent->s.origin, self->mins, self->s.origin); VectorCopy (self->s.origin, self->s.old_origin); self->s.event = EV_OTHER_TELEPORT; gi.linkentity (self); goto again; } self->moveinfo.wait = ent->wait; self->target_ent = ent; if (!(self->flags & FL_TEAMSLAVE)) { if (self->moveinfo.sound_start) gi.sound (self, CHAN_NO_PHS_ADD+CHAN_VOICE, self->moveinfo.sound_start, 1, ATTN_STATIC, 0); self->s.sound = self->moveinfo.sound_middle; } VectorSubtract (ent->s.origin, self->mins, dest); self->moveinfo.state = STATE_TOP; VectorCopy (self->s.origin, self->moveinfo.start_origin); VectorCopy (dest, self->moveinfo.end_origin); // Rroff rotating if (self->spawnflags & TRAIN_ROTATE && !(ent->spawnflags & 2)) { // Lazarus: No no no :-). This is measuring from the center // of the func_train to the path_corner. Should // be path_corner to path_corner. //VectorSubtract (ent->s.origin, self->s.origin, v); VectorAdd(self->s.origin,self->mins,v); VectorSubtract(ent->s.origin,v,v); vectoangles(v,angles); self->ideal_yaw = angles[YAW]; self->ideal_pitch = angles[PITCH]; if(self->ideal_pitch < 0) self->ideal_pitch += 360; self->ideal_roll = ent->roll; VectorClear(self->movedir); self->movedir[1] = 1.0; } Move_Calc (self, dest, train_spline_wait); self->spawnflags |= TRAIN_START_ON; }
void door_secret_move6 (edict_t *self) { Move_Calc (self, vec3_origin, door_secret_done); }
void door_secret_move4 (edict_t *self) { Move_Calc (self, self->pos1, door_secret_move5); }
void door_secret_move2 (edict_t *self) { Move_Calc (self, self->pos2, door_secret_move3); }