void brain_pain (edict_t *self, edict_t *other, float kick, int damage) { float r; if (self->health < (self->max_health / 2)) self->s.skinnum = 1; if (level.time < self->pain_debounce_time) return; self->pain_debounce_time = level.time + 3; if (skill->value == 3) return; // no pain anims in nightmare r = random(); if (r < 0.33) { gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0); self->monsterinfo.currentmove = &brain_move_pain1; } else if (r < 0.66) { gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0); self->monsterinfo.currentmove = &brain_move_pain2; } else { gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0); self->monsterinfo.currentmove = &brain_move_pain3; } // PMM - clear duck flag if (self->monsterinfo.aiflags & AI_DUCKED) monster_duck_up(self); }
void medic_pain (edict_t *self, edict_t *other, float kick, int damage) { monster_done_dodge (self); if ((self->health < (self->max_health / 2))) if (self->mass > 400) self->s.skinnum = 3; else self->s.skinnum = 1; if (level.time < self->pain_debounce_time) return; self->pain_debounce_time = level.time + 3; if (skill->value == 3) return; // no pain anims in nightmare // if we're healing someone, we ignore pain if (self->monsterinfo.aiflags & AI_MEDIC) return; if (self->mass > 400) { if (damage < 35) { gi.sound (self, CHAN_VOICE, commander_sound_pain1, 1, ATTN_NORM, 0); return; } self->monsterinfo.aiflags &= ~AI_MANUAL_STEERING; self->monsterinfo.aiflags &= ~AI_HOLD_FRAME; gi.sound (self, CHAN_VOICE, commander_sound_pain2, 1, ATTN_NORM, 0); if (random() < (min(((float)damage * 0.005), 0.5))) // no more than 50% chance of big pain self->monsterinfo.currentmove = &medic_move_pain2; else self->monsterinfo.currentmove = &medic_move_pain1; } else if (random() < 0.5) { self->monsterinfo.currentmove = &medic_move_pain1; gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0); } else { self->monsterinfo.currentmove = &medic_move_pain2; gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0); } // PMM - clear duck flag if (self->monsterinfo.aiflags & AI_DUCKED) monster_duck_up(self); }
void infantry_pain (edict_t *self, edict_t *other, float kick, int damage) { int n; if (self->health < (self->max_health / 2)) self->s.skinnum |= 1; if (!self->groundentity) { // if ((g_showlogic) && (g_showlogic->value)) // gi.dprintf ("infantry: pain avoided due to no ground\n"); return; } monster_done_dodge (self); if (level.time < self->pain_debounce_time) return; self->pain_debounce_time = level.time + 3; if (skill->value == 3) return; // no pain anims in nightmare n = rand() % 2; if (n == 0) { self->monsterinfo.currentmove = &infantry_move_pain1; gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0); } else { self->monsterinfo.currentmove = &infantry_move_pain2; gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0); } // PMM - clear duck flag if (self->monsterinfo.aiflags & AI_DUCKED) monster_duck_up(self); }
void gunner_pain (edict_t *self, edict_t *other, float kick, int damage) { if (self->health < (self->max_health / 2)) self->s.skinnum = 1; monster_done_dodge (self); if (!self->groundentity) { return; } if (level.time < self->pain_debounce_time) return; self->pain_debounce_time = level.time + 3; if (rand()&1) gi.sound (self, CHAN_VOICE, sound_pain, 1, ATTN_NORM, 0); else gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0); if (skill->value == 3) return; // no pain anims in nightmare if (damage <= 10) self->monsterinfo.currentmove = &gunner_move_pain3; else if (damage <= 25) self->monsterinfo.currentmove = &gunner_move_pain2; else self->monsterinfo.currentmove = &gunner_move_pain1; self->monsterinfo.aiflags &= ~AI_MANUAL_STEERING; // PMM - clear duck flag if (self->monsterinfo.aiflags & AI_DUCKED) monster_duck_up(self); }
void gunner_pain(edict_t *self, edict_t *other /* unused */, float kick, int damage) { if (!self) { return; } if (self->health < (self->max_health / 2)) { self->s.skinnum = 1; } monster_done_dodge(self); if (!self->groundentity) { return; } if (level.time < self->pain_debounce_time) { return; } self->pain_debounce_time = level.time + 3; if (rand() & 1) { gi.sound(self, CHAN_VOICE, sound_pain, 1, ATTN_NORM, 0); } else { gi.sound(self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0); } if (skill->value == 3) { return; /* no pain anims in nightmare */ } if (damage <= 10) { self->monsterinfo.currentmove = &gunner_move_pain3; } else if (damage <= 25) { self->monsterinfo.currentmove = &gunner_move_pain2; } else { self->monsterinfo.currentmove = &gunner_move_pain1; } self->monsterinfo.aiflags &= ~AI_MANUAL_STEERING; if (self->monsterinfo.aiflags & AI_DUCKED) { monster_duck_up(self); } }
void soldier_pain (edict_t *self, edict_t *other, float kick, int damage) { float r; int n; if (self->health < (self->max_health / 2)) self->s.skinnum |= 1; monster_done_dodge (self); soldier_stop_charge(self); // if we're blind firing, this needs to be turned off here self->monsterinfo.aiflags &= ~AI_MANUAL_STEERING; if (level.time < self->pain_debounce_time) { if ((self->velocity[2] > 100) && ( (self->monsterinfo.currentmove == &soldier_move_pain1) || (self->monsterinfo.currentmove == &soldier_move_pain2) || (self->monsterinfo.currentmove == &soldier_move_pain3))) { // PMM - clear duck flag if (self->monsterinfo.aiflags & AI_DUCKED) monster_duck_up(self); self->monsterinfo.currentmove = &soldier_move_pain4; } return; } self->pain_debounce_time = level.time + 3; n = self->s.skinnum | 1; if (n == 1) gi.sound (self, CHAN_VOICE, sound_pain_light, 1, ATTN_NORM, 0); else if (n == 3) gi.sound (self, CHAN_VOICE, sound_pain, 1, ATTN_NORM, 0); else gi.sound (self, CHAN_VOICE, sound_pain_ss, 1, ATTN_NORM, 0); if (self->velocity[2] > 100) { // PMM - clear duck flag if (self->monsterinfo.aiflags & AI_DUCKED) monster_duck_up(self); self->monsterinfo.currentmove = &soldier_move_pain4; // self->monsterinfo.pausetime = 0; return; } if (skill->value == 3) return; // no pain anims in nightmare r = random(); if (r < 0.33) self->monsterinfo.currentmove = &soldier_move_pain1; else if (r < 0.66) self->monsterinfo.currentmove = &soldier_move_pain2; else self->monsterinfo.currentmove = &soldier_move_pain3; // PMM - clear duck flag if (self->monsterinfo.aiflags & AI_DUCKED) monster_duck_up(self); // self->monsterinfo.pausetime = 0; }