void soldier_duck (edict_t *self, float eta) { float r; // has to be done immediately otherwise he can get stuck monster_duck_down(self); if (skill->value == 0) { // PMM - stupid dodge self->monsterinfo.nextframe = FRAME_duck01; self->monsterinfo.currentmove = &soldier_move_duck; self->monsterinfo.duck_wait_time = level.time + eta + 1; return; } r = random(); if (r > (skill->value * 0.3)) { self->monsterinfo.nextframe = FRAME_duck01; self->monsterinfo.currentmove = &soldier_move_duck; self->monsterinfo.duck_wait_time = level.time + eta + (0.1 * (3 - skill->value)); } else { self->monsterinfo.nextframe = FRAME_attak301; self->monsterinfo.currentmove = &soldier_move_attack3; self->monsterinfo.duck_wait_time = level.time + eta + 1; } return; }
void medic_duck (edict_t *self, float eta) { // don't dodge if you're healing if (self->monsterinfo.aiflags & AI_MEDIC) return; if ((self->monsterinfo.currentmove == &medic_move_attackHyperBlaster) || (self->monsterinfo.currentmove == &medic_move_attackCable) || (self->monsterinfo.currentmove == &medic_move_attackBlaster) || (self->monsterinfo.currentmove == &medic_move_callReinforcements)) { // he ignores skill self->monsterinfo.aiflags &= ~AI_DUCKED; return; } if (skill->value == 0) // PMM - stupid dodge self->monsterinfo.duck_wait_time = level.time + eta + 1; else self->monsterinfo.duck_wait_time = level.time + eta + (0.1 * (3 - skill->value)); // has to be done immediately otherwise he can get stuck monster_duck_down(self); self->monsterinfo.nextframe = FRAME_duck1; self->monsterinfo.currentmove = &medic_move_duck; return; }
void infantry_duck (edict_t *self, float eta) { // if we're jumping, don't dodge if ((self->monsterinfo.currentmove == &infantry_move_jump) || (self->monsterinfo.currentmove == &infantry_move_jump2)) { return; } if ((self->monsterinfo.currentmove == &infantry_move_attack1) || (self->monsterinfo.currentmove == &infantry_move_attack2)) { // if we're shooting, and not on easy, don't dodge if (skill->value) { self->monsterinfo.aiflags &= ~AI_DUCKED; return; } } if (skill->value == 0) // PMM - stupid dodge self->monsterinfo.duck_wait_time = level.time + eta + 1; else self->monsterinfo.duck_wait_time = level.time + eta + (0.1 * (3 - skill->value)); // has to be done immediately otherwise he can get stuck monster_duck_down(self); self->monsterinfo.nextframe = FRAME_duck01; self->monsterinfo.currentmove = &infantry_move_duck; return; }
void brain_duck (edict_t *self, float eta) { // has to be done immediately otherwise he can get stuck monster_duck_down(self); if (skill->value == 0) // PMM - stupid dodge self->monsterinfo.duck_wait_time = level.time + eta + 1; else self->monsterinfo.duck_wait_time = level.time + eta + (0.1 * (3 - skill->value)); self->monsterinfo.currentmove = &brain_move_duck; self->monsterinfo.nextframe = FRAME_duck01; return; }
/* void soldier_duck_down (edict_t *self) { if ((g_showlogic) && (g_showlogic->value)) gi.dprintf ("duck down - %d!\n", self->s.frame); self->monsterinfo.aiflags |= AI_DUCKED; // self->maxs[2] -= 32; self->maxs[2] = self->monsterinfo.base_height - 32; self->takedamage = DAMAGE_YES; if (self->monsterinfo.duck_wait_time < level.time) { if ((g_showlogic) && (g_showlogic->value)) gi.dprintf ("soldier duck with no time!\n"); self->monsterinfo.duck_wait_time = level.time + 1; } gi.linkentity (self); } void soldier_duck_up (edict_t *self) { if ((g_showlogic) && (g_showlogic->value)) gi.dprintf ("duck up - %d!\n", self->s.frame); self->monsterinfo.aiflags &= ~AI_DUCKED; // self->maxs[2] += 32; self->maxs[2] = self->monsterinfo.base_height; self->takedamage = DAMAGE_AIM; gi.linkentity (self); } */ void soldier_fire3 (edict_t *self) { monster_duck_down (self); soldier_fire (self, 2); }