void carrier_ready_spawn(edict_t *self) { float current_yaw; vec3_t offset, f, r, startpoint, spawnpoint; if (!self) { return; } CarrierCoopCheck(self); CarrierMachineGun(self); current_yaw = anglemod(self->s.angles[YAW]); if (fabs(current_yaw - self->ideal_yaw) > 0.1) { self->monsterinfo.aiflags |= AI_HOLD_FRAME; self->timestamp += FRAMETIME; return; } self->monsterinfo.aiflags &= ~AI_HOLD_FRAME; VectorSet(offset, 105, 0, -58); AngleVectors(self->s.angles, f, r, NULL); G_ProjectSource(self->s.origin, offset, f, r, startpoint); if (FindSpawnPoint(startpoint, flyer_mins, flyer_maxs, spawnpoint, 32)) { SpawnGrow_Spawn(spawnpoint, 0); } }
void widow_ready_spawn(edict_t *self) { vec3_t f, r, u, offset, startpoint, spawnpoint; int i; if (!self) { return; } WidowBlaster(self); AngleVectors(self->s.angles, f, r, u); for (i = 0; i < 2; i++) { VectorCopy(spawnpoints[i], offset); G_ProjectSource2(self->s.origin, offset, f, r, u, startpoint); if (FindSpawnPoint(startpoint, stalker_mins, stalker_maxs, spawnpoint, 64)) { SpawnGrow_Spawn(spawnpoint, 1); } } }
void medic_spawngrows (edict_t *self) { vec3_t f, r, offset, startpoint, spawnpoint; int summonStr; int count; int inc; int num_summoned; // should be 1, 3, or 5 int num_success = 0; float current_yaw; qboolean behind = false; // if we've been directed to turn around if (self->monsterinfo.aiflags & AI_MANUAL_STEERING) { current_yaw = anglemod(self->s.angles[YAW]); if (fabs(current_yaw - self->ideal_yaw) > 0.1) { self->monsterinfo.aiflags |= AI_HOLD_FRAME; return; } // done turning around self->monsterinfo.aiflags &= ~AI_HOLD_FRAME; self->monsterinfo.aiflags &= ~AI_MANUAL_STEERING; } // if (self->plat2flags < 0) // { // summonStr = -1.0 * self->plat2flags; // behind = true; // } // else summonStr = self->plat2flags; AngleVectors (self->s.angles, f, r, NULL); // num_summoned = ((((summonStr-1)/2)+1)*2)-1; // this yields either 1, 3, or 5 if (summonStr) num_summoned = (summonStr - 1) + (summonStr % 2); else num_summoned = 1; for (count = 0; count < num_summoned; count++) { inc = count + (count%2); // 0, 2, 2, 4, 4 VectorCopy (reinforcement_position[count], offset); G_ProjectSource (self->s.origin, offset, f, r, startpoint); // a little off the ground startpoint[2] += 10; if (FindSpawnPoint (startpoint, reinforcement_mins[summonStr-inc], reinforcement_maxs[summonStr-inc], spawnpoint, 32)) { if (CheckGroundSpawnPoint(spawnpoint, reinforcement_mins[summonStr-inc], reinforcement_maxs[summonStr-inc], 256, -1)) { num_success++; if ((summonStr-inc) > 3) SpawnGrow_Spawn (spawnpoint, 1); // big monster else SpawnGrow_Spawn (spawnpoint, 0); // normal size } } } if (num_success == 0) { // if ((g_showlogic) && (g_showlogic->value)) // gi.dprintf ("medic_commander: spawngrows bad, aborting!\n"); self->monsterinfo.nextframe = FRAME_attack53; } }