void GibPlayer() { qbool bloodfest_round_connect = ( k_bloodfest && !self->ready ); // in case of bloodfest and connecion during round. gedict_t *p; self->vw_index = 0; if ( isRACE() || bloodfest_round_connect ) ThrowHead( "", self->s.v.health ); else ThrowHead( "progs/h_player.mdl", self->s.v.health ); if ( bloodfest_round_connect ) return; // do not spawn sounds and gibs, preventing abuse. if( match_in_progress == 2 ) { ThrowGib( "progs/gib1.mdl", self->s.v.health ); ThrowGib( "progs/gib2.mdl", self->s.v.health ); ThrowGib( "progs/gib3.mdl", self->s.v.health ); } if ( isRACE() && race.status ) return; // spawn temporary entity. p = spawn(); setorigin( p, PASSVEC3( self->s.v.origin ) ); p->s.v.nextthink = g_globalvars.time + 0.1; p->s.v.think = ( func_t ) SUB_Remove; if ( TELEDEATH( self ) ) { sound( p, CHAN_VOICE, "player/teledth1.wav", 1, ATTN_NONE ); } else { sound( p, CHAN_VOICE, (g_random() < 0.5 ? "player/gib.wav" : "player/udeath.wav"), 1, ATTN_NONE ); } }
void soldier_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) { int n; self->s.skinnum |= 1; self->monsterinfo.power_armor_type = POWER_ARMOR_NONE; // check for gib if (self->health <= self->gib_health && !(self->spawnflags & SF_MONSTER_NOGIB) ) { gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0); for (n= 0; n < 3; n++) ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); ThrowGib (self, "models/objects/gibs/chest/tris.md2", damage, GIB_ORGANIC); ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) return; // regular death self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; self->s.skinnum |= 1; if ((self->s.skinnum % 6) == 1) gi.sound (self, CHAN_VOICE, sound_death_light, 1, ATTN_NORM, 0); else if ((self->s.skinnum % 6) == 3) gi.sound (self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0); else // (self->s.skinnum == 5) gi.sound (self, CHAN_VOICE, sound_death_ss, 1, ATTN_NORM, 0); if (fabs((self->s.origin[2] + self->viewheight) - point[2]) <= 4) { // head shot self->monsterinfo.currentmove = &soldier_move_death3; return; } n = rand() % 5; if (n == 0) self->monsterinfo.currentmove = &soldier_move_death1; else if (n == 1) self->monsterinfo.currentmove = &soldier_move_death2; else if (n == 2) self->monsterinfo.currentmove = &soldier_move_death4; else if (n == 3) self->monsterinfo.currentmove = &soldier_move_death5; else self->monsterinfo.currentmove = &soldier_move_death6; }
/*QUAKED misc_deadsoldier (1 .5 0) (-16 -16 0) (16 16 16) ON_BACK ON_STOMACH BACK_DECAP FETAL_POS SIT_DECAP IMPALED This is the dead player model. Comes in 6 exciting different poses! */ void misc_deadsoldier_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) { int n; // if (self->health > -80) if (self->health > -30) return; gi.sound (self, CHAN_BODY, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0); for (n= 0; n < 4; n++) ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); }
void medic_die(edict_t *self, edict_t *inflictor /* unused */, edict_t *attacker /* unused */, int damage, vec3_t point /* unused */) { int n; if (!self) { return; } /* if we had a pending patient, free him up for another medic */ if ((self->enemy) && (self->enemy->owner == self)) { self->enemy->owner = NULL; } /* check for gib */ if (self->health <= self->gib_health) { gi.sound(self, CHAN_VOICE, gi.soundindex("misc/udeath.wav"), 1, ATTN_NORM, 0); for (n = 0; n < 2; n++) { ThrowGib(self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); } for (n = 0; n < 4; n++) { ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); } ThrowHead(self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) { return; } /* regular death */ gi.sound(self, CHAN_VOICE, sound_die, 1, ATTN_NORM, 0); self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; self->monsterinfo.currentmove = &medic_move_death; }
void gunner_die(edict_t *self, edict_t *inflictor /* unused */, edict_t *attacker /* unused */, q_int32_t damage /* unused */, vec3_t point) { q_int32_t n; if (!self) { return; } self->s.skinnum |= 1; self->monsterinfo.power_armor_type = POWER_ARMOR_NONE; /* check for gib */ if (self->health <= self->gib_health) { gi.sound(self, CHAN_VOICE, gi.soundindex( "misc/udeath.wav"), 1, ATTN_NORM, 0); for (n = 0; n < 2; n++) { ThrowGib(self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); } for (n = 0; n < 4; n++) { ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); } ThrowHead(self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) { return; } /* regular death */ gi.sound(self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0); self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; self->monsterinfo.currentmove = &gunner_move_death; }
void mutant_die(edict_t *self, edict_t *inflictor /* unused */, edict_t *attacker /* unsued */, int damage, vec3_t point /* unused */) { int n; if (!self) { return; } if (self->health <= self->gib_health) { gi.sound(self, CHAN_VOICE, gi.soundindex("misc/udeath.wav"), 1, ATTN_NORM, 0); for (n = 0; n < 2; n++) { ThrowGib(self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); } for (n = 0; n < 4; n++) { ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); } ThrowHead(self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) { return; } gi.sound(self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0); self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; self->s.skinnum = 1; if (random() < 0.5) { self->monsterinfo.currentmove = &mutant_move_death1; } else { self->monsterinfo.currentmove = &mutant_move_death2; } }
void gekk_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) { float r; if (self->health <= self->gib_health && !(self->spawnflags & 32)) //Knightmare- nogib flag { gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0); ThrowGib (self, "models/objects/gekkgib/pelvis/tris.md2", damage, GIB_ORGANIC); ThrowGib (self, "models/objects/gekkgib/arm/tris.md2", damage, GIB_ORGANIC); ThrowGib (self, "models/objects/gekkgib/arm/tris.md2", damage, GIB_ORGANIC); ThrowGib (self, "models/objects/gekkgib/torso/tris.md2", damage, GIB_ORGANIC); ThrowGib (self, "models/objects/gekkgib/claw/tris.md2", damage, GIB_ORGANIC); ThrowGib (self, "models/objects/gekkgib/leg/tris.md2", damage, GIB_ORGANIC); ThrowGib (self, "models/objects/gekkgib/leg/tris.md2", damage, GIB_ORGANIC); ThrowHead (self, "models/objects/gekkgib/head/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) return; gi.sound (self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0); self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; //Knightmare- special skins if (self->style) self->s.skinnum = self->style * 3 + 2; else self->s.skinnum = 2; //end Knightmare if (self->waterlevel) self->monsterinfo.currentmove = &gekk_move_wdeath; else { r = random(); if (r > 0.66 || (self->spawnflags & 32)) //Knightmare- nogib flag self->monsterinfo.currentmove = &gekk_move_death1; else if (r > 0.33) self->monsterinfo.currentmove = &gekk_move_death3; else self->monsterinfo.currentmove = &gekk_move_death4; } }
void stalker_die(edict_t *self, edict_t *inflictor /* unused */, edict_t *attacker /* unused */, int damage, vec3_t point /* unused */) { int n; if (!self) { return; } /* dude bit it, make him fall! */ self->movetype = MOVETYPE_TOSS; self->s.angles[2] = 0; VectorSet(self->gravityVector, 0, 0, -1); /* check for gib */ if (self->health <= self->gib_health) { gi.sound(self, CHAN_VOICE, gi.soundindex("misc/udeath.wav"), 1, ATTN_NORM, 0); for (n = 0; n < 2; n++) { ThrowGib(self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); } for (n = 0; n < 4; n++) { ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); } ThrowHead(self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) { return; } /* regular death */ gi.sound(self, CHAN_VOICE, sound_die, 1, ATTN_NORM, 0); self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; self->svflags |= SVF_DEADMONSTER; // moved this here for "smaller" enemies self->monsterinfo.currentmove = &stalker_move_death; }
void makron_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) { edict_t *tempent; int n; self->s.sound = 0; self->s.skinnum |= 1; if (!(self->fogclip & 2)) //custom bloodtype flag check self->blood_type = 3; //sparks and blood self->monsterinfo.power_armor_type = POWER_ARMOR_NONE; // check for gib if (self->health <= self->gib_health && !(self->spawnflags & SF_MONSTER_NOGIB)) { gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0); for (n= 0; n < 4 /*4*/; n++) ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); for (n= 0; n < 4; n++) ThrowGib (self, "models/objects/gibs/sm_metal/tris.md2", damage, GIB_METALLIC); ThrowHead (self, "models/objects/gibs/gear/tris.md2", damage, GIB_METALLIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) return; // regular death gi.sound (self, CHAN_VOICE, sound_death, 1, ATTN_NONE, 0); self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; tempent = G_Spawn(); VectorCopy (self->s.origin, tempent->s.origin); VectorCopy (self->s.angles, tempent->s.angles); #ifdef KMQUAKE2_ENGINE_MOD // If Makron was transparent, make the torso transparent if (self->s.alpha) tempent->s.alpha = self->s.alpha; #endif tempent->s.origin[1] -= 84; makron_torso (tempent); self->monsterinfo.currentmove = &makron_move_death2; }
void widow2_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) { int n; int clipped; // check for gib if (self->health <= self->gib_health) { clipped = min (damage, 100); gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0); for (n= 0; n < 2; n++) ThrowWidowGibLoc (self, "models/objects/gibs/bone/tris.md2", clipped, GIB_ORGANIC, NULL, false); for (n= 0; n < 3; n++) ThrowWidowGibLoc (self, "models/objects/gibs/sm_meat/tris.md2", clipped, GIB_ORGANIC, NULL, false); for (n= 0; n < 3; n++) { ThrowWidowGibSized (self, "models/monsters/blackwidow2/gib1/tris.md2", clipped, GIB_METALLIC, NULL, 0, false); ThrowWidowGibSized (self, "models/monsters/blackwidow2/gib2/tris.md2", clipped, GIB_METALLIC, NULL, gi.soundindex ("misc/fhit3.wav"), false); } for (n= 0; n < 2; n++) { ThrowWidowGibSized (self, "models/monsters/blackwidow2/gib3/tris.md2", clipped, GIB_METALLIC, NULL, 0, false); ThrowWidowGibSized (self, "models/monsters/blackwidow/gib3/tris.md2", clipped, GIB_METALLIC, NULL, 0, false); } ThrowGib (self, "models/objects/gibs/chest/tris.md2", clipped, GIB_ORGANIC); ThrowHead (self, "models/objects/gibs/head2/tris.md2", clipped, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) return; gi.sound (self, CHAN_VOICE, sound_death, 1, ATTN_NONE, 0); self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_NO; self->count = 0; KillChildren (self); self->monsterinfo.quad_framenum = 0; self->monsterinfo.double_framenum = 0; self->monsterinfo.invincible_framenum = 0; self->monsterinfo.currentmove = &widow2_move_death; }
void zboss_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) { int n; if(self->laser) { G_FreeEdict(self->laser); self->laser = NULL; } // check for gib if (self->health <= self->gib_health) { self->s.modelindex2 = 0; self->s.modelindex3 = 0; gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0); for (n= 0; n < 2; n++) ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); for (n= 0; n < 4; n++) ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) return; // regular death self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; // todo if (random() < 0.5) { gi.sound (self, CHAN_VOICE, sound_die1, 1, ATTN_NORM, 0); self->monsterinfo.currentmove = &zboss_move_death1; } else { gi.sound (self, CHAN_VOICE, sound_die2, 1, ATTN_NORM, 0); self->monsterinfo.currentmove = &zboss_move_death2; } }
void flipper_die(edict_t *self, edict_t *inflictor /* unused */, edict_t *attacker /* unused */, int damage, vec3_t point /* unused */) { int n; if (!self) { return; } /* check for gib */ if (self->health <= self->gib_health) { gi.sound(self, CHAN_VOICE, gi.soundindex( "misc/udeath.wav"), 1, ATTN_NORM, 0); for (n = 0; n < 2; n++) { ThrowGib(self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); } for (n = 0; n < 2; n++) { ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); } ThrowHead(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) { return; } /* regular death */ gi.sound(self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0); self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; self->monsterinfo.currentmove = &flipper_move_death; }
void gekk_gibfest (edict_t *self) { int damage = 20; gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0); ThrowGib (self, "models/objects/gekkgib/pelvis/tris.md2", damage, GIB_ORGANIC); ThrowGib (self, "models/objects/gekkgib/arm/tris.md2", damage, GIB_ORGANIC); ThrowGib (self, "models/objects/gekkgib/arm/tris.md2", damage, GIB_ORGANIC); ThrowGib (self, "models/objects/gekkgib/torso/tris.md2", damage, GIB_ORGANIC); ThrowGib (self, "models/objects/gekkgib/claw/tris.md2", damage, GIB_ORGANIC); ThrowGib (self, "models/objects/gekkgib/leg/tris.md2", damage, GIB_ORGANIC); ThrowGib (self, "models/objects/gekkgib/leg/tris.md2", damage, GIB_ORGANIC); ThrowHead (self, "models/objects/gekkgib/head/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; }
void brain_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) { int n; self->s.effects = 0; self->monsterinfo.power_armor_type = POWER_ARMOR_NONE; self->s.skinnum |= 1; // check for gib if ((self->health <= self->gib_health) && !(self->spawnflags & SF_MONSTER_NOGIB)) { gi.sound(self, CHAN_VOICE, gi.soundindex("misc/udeath.wav"), 1, ATTN_NORM, 0); for (n = 0; n < 2; n++) { ThrowGib(self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); } for (n = 0; n < 4; n++) { ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); } ThrowHead(self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) { return; } // regular death gi.sound(self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0); self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; if (random() <= 0.5) { self->monsterinfo.currentmove = &brain_move_death1; } else { self->monsterinfo.currentmove = &brain_move_death2; } }
/* ================== Infantry_DieAnimation ================== */ void Infantry_DieAnimation (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point){ int n; // Check for gib if (self->health <= self->gib_health){ gi.sound(self, CHAN_VOICE, gi.soundindex("misc/udeath.wav"), 1.0f, ATTN_NORM, 0.0f); ThrowGib(self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); ThrowGib(self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); ThrowHead(self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) return; // Regular death self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; n = rand() % 3; if (n == 0){ self->monsterinfo.currentmove = &infantry_death1Move; Infantry_Die2Sound(self); } else if (n == 1){ self->monsterinfo.currentmove = &infantry_death2Move; Infantry_Die1Sound(self); } else { self->monsterinfo.currentmove = &infantry_death3Move; Infantry_Die2Sound(self); } }
void infantry_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) { int n; self->s.skinnum |= 1; self->monsterinfo.power_armor_type = POWER_ARMOR_NONE; // check for gib if (self->health <= self->gib_health&& !(self->spawnflags & SF_MONSTER_NOGIB)) { gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0); for (n= 0; n < 2; n++) ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); for (n= 0; n < 4; n++) ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) return; // regular death self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; n = rand() % 3; if (n == 0) { self->monsterinfo.currentmove = &infantry_move_death1; gi.sound (self, CHAN_VOICE, sound_die2, 1, ATTN_NORM, 0); } else if (n == 1) { self->monsterinfo.currentmove = &infantry_move_death2; gi.sound (self, CHAN_VOICE, sound_die1, 1, ATTN_NORM, 0); } else { self->monsterinfo.currentmove = &infantry_move_death3; gi.sound (self, CHAN_VOICE, sound_die2, 1, ATTN_NORM, 0); } }
void berserk_die(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) { self->s.skinnum |= 1; self->monsterinfo.power_armor_type = POWER_ARMOR_NONE; if (self->health <= self->gib_health && !(self->spawnflags & SF_MONSTER_NOGIB)) { gi.sound(self, CHAN_VOICE, gi.soundindex("misc/udeath.wav"), 1, ATTN_NORM, 0); for (int n = 0; n < 2; n++) ThrowGib(self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); for (int n = 0; n < 4; n++) ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); ThrowHead(self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); //mxd. Throw some MOAR custom gibs const int power = damage / 2; ThrowGib(self, "models/objects/gibs/berserk/arm_left.md2", power, GIB_METALLIC); ThrowGib(self, "models/objects/gibs/berserk/arm_left_u.md2", power, GIB_METALLIC); ThrowGib(self, "models/objects/gibs/berserk/arm_right.md2", power, GIB_METALLIC); ThrowGib(self, "models/objects/gibs/berserk/arm_right_u.md2", power, GIB_METALLIC); ThrowGib(self, "models/objects/gibs/berserk/leg_left.md2", power, GIB_METALLIC); ThrowGib(self, "models/objects/gibs/berserk/leg_right.md2", power, GIB_METALLIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) return; gi.sound(self, CHAN_VOICE, sound_die, 1, ATTN_NORM, 0); self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; if (damage >= 50) self->monsterinfo.currentmove = &berserk_move_death1; else self->monsterinfo.currentmove = &berserk_move_death2; }
void makron_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) { edict_t *tempent; int n; self->s.sound = 0; // check for gib if (self->health <= self->gib_health) { gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0); for (n= 0; n < 1 /*4*/; n++) ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); for (n= 0; n < 4; n++) ThrowGib (self, "models/objects/gibs/sm_metal/tris.md2", damage, GIB_METALLIC); ThrowHead (self, "models/objects/gibs/gear/tris.md2", damage, GIB_METALLIC); //self->deadflag = DEAD_DEAD; M_Remove(self, false, false); return; } if (self->deadflag == DEAD_DEAD) return; // regular death gi.sound (self, CHAN_VOICE, sound_death, 1, ATTN_NONE, 0); self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; tempent = G_Spawn(); VectorCopy (self->s.origin, tempent->s.origin); VectorCopy (self->s.angles, tempent->s.angles); tempent->s.origin[1] -= 84; makron_torso (tempent); self->monsterinfo.currentmove = &makron_move_death2; }
void chick_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) { int n; // check for gib if (self->health <= self->gib_health) { gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0); for (n= 0; n < 2; n++) ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); for (n= 0; n < 4; n++) ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) return; // regular death self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; n = rand() % 2; if (n == 0) { self->monsterinfo.currentmove = &chick_move_death1; gi.sound (self, CHAN_VOICE, sound_death1, 1, ATTN_NORM, 0); } else { self->monsterinfo.currentmove = &chick_move_death2; gi.sound (self, CHAN_VOICE, sound_death2, 1, ATTN_NORM, 0); } //inflictor -> client -> pers.experiencePoints += 500;//bl233[5] - adds experience upon death //gi.bprintf(PRINT_HIGH,"%i exp gained",inflictor -> client -> pers.experiencePoints);//bl233[6] - prints a messsage on kill }
//========================================== // M_default_die //========================================== void M_default_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) { //if(AIDevel.debugMode && bot_debugmonster->value) Com_Printf("AI_monster: Die\n"); //throw gibs //G_Sound (self, CHAN_BODY, trap_SoundIndex ("sound/misc/udeath.wav"), 1, ATTN_NORM); //ThrowSmallPileOfGibs ( self, 8, damage ); ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; if (self->item) { Drop_Item (self, self->item); self->item = NULL; } AI_EnemyRemoved( self ); //explode barrel_delay (self, inflictor, attacker, damage, point); }
void chick_die(edict_t * self, edict_t * inflictor, edict_t * attacker, int damage, vec3_t point) { int n; // check for gib if (self->health <= self->gib_health) { gi.sound(self, CHAN_VOICE, gi.soundindex("misc/udeath.wav"), 1, ATTN_NORM, 0); for (n = 0; n < 2; n++) ThrowGib(self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); for (n = 0; n < 4; n++) ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); ThrowHead(self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) return; // regular death self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; n = rand() % 2; if (n == 0) { self->monsterinfo.currentmove = &chick_move_death1; gi.sound(self, CHAN_VOICE, sound_death1, 1, ATTN_NORM, 0); } else { self->monsterinfo.currentmove = &chick_move_death2; gi.sound(self, CHAN_VOICE, sound_death2, 1, ATTN_NORM, 0); } }
void boss2_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) { self->s.skinnum |= 1; if (!(self->fogclip & 2)) //custom bloodtype flag check self->blood_type = 3; //sparks and blood self->monsterinfo.power_armor_type = POWER_ARMOR_NONE; gi.sound (self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0); // was ATTN_NONE self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_NO; self->count = 0; self->monsterinfo.currentmove = &boss2_move_death; #if 0 int n; self->s.sound = 0; // check for gib if (self->health <= self->gib_health && !(self->spawnflags & MONSTER_NOGIB)) { gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0); for (n= 0; n < 2; n++) ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); for (n= 0; n < 4; n++) ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) return; self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; self->monsterinfo.currentmove = &boss2_move_death; #endif }
void tank_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) { int n; self->s.skinnum |= 1; if (!(self->fogclip & 2)) //custom bloodtype flag check self->blood_type = 3; //sparks and blood self->monsterinfo.power_armor_type = POWER_ARMOR_NONE; // check for gib if (self->health <= self->gib_health && !(self->spawnflags & SF_MONSTER_NOGIB)) { // Knightmare- more gibs gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0); for (n= 0; n < 16; n++) ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); for (n= 0; n < 16; n++) ThrowGib (self, "models/objects/gibs/sm_metal/tris.md2", damage, GIB_METALLIC); for (n= 0; n < 8; n++) ThrowGib (self, "models/objects/gibs/gear/tris.md2", damage, GIB_METALLIC); ThrowGib (self, "models/objects/gibs/chest/tris.md2", damage, GIB_ORGANIC); ThrowHead (self, "models/objects/gibs/gear/tris.md2", damage, GIB_METALLIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) return; // regular death gi.sound (self, CHAN_VOICE, sound_die, 1, ATTN_NORM, 0); self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; self->monsterinfo.currentmove = &tank_move_death; }
void insane_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) { int n; if (self->health <= self->gib_health) { gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_IDLE, 0); for (n= 0; n < 2; n++) ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); for (n= 0; n < 4; n++) ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) return; gi.sound (self, CHAN_VOICE, gi.soundindex(va("player/male/death%i.wav", (rand()%4)+1)), 1, ATTN_IDLE, 0); self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; if (self->spawnflags & 8) { insane_dead (self); } else { if ( ((self->s.frame >= FRAME_crawl1) && (self->s.frame <= FRAME_crawl9)) || ((self->s.frame >= FRAME_stand99) && (self->s.frame <= FRAME_stand160)) ) self->monsterinfo.currentmove = &insane_move_crawl_death; else self->monsterinfo.currentmove = &insane_move_stand_death; } }
void boss2_die(edict_t * self, edict_t * inflictor, edict_t * attacker, int damage, vec3_t point) { gi.sound(self, CHAN_VOICE, sound_death, 1, ATTN_NONE, 0); self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_NO; self->count = 0; self->monsterinfo.currentmove = &boss2_move_death; #if 0 int n; self->s.sound = 0; // check for gib if (self->health <= self->gib_health) { gi.sound(self, CHAN_VOICE, gi.soundindex("misc/udeath.wav"), 1, ATTN_NORM, 0); for (n = 0; n < 2; n++) ThrowGib(self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); for (n = 0; n < 4; n++) ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); ThrowHead(self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) return; self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; self->monsterinfo.currentmove = &boss2_move_death; #endif }
void chick_die(edict_t *self, edict_t *inflictor /* unused */, edict_t *attacker /* unused */, int damage, vec3_t point /*unused */) { int n; if (!self) { return; } /* check for gib */ if (self->health <= self->gib_health) // if (damage >= self->gib_health) { gi.sound(self, CHAN_VOICE, gi.soundindex( "misc/udeath.wav"), 1, ATTN_NORM, 0); for (n = 0; n < 2; n++) { ThrowGib(self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); } for (n = 0; n < 4; n++) { ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); } for (n = 0; n < 2; n++) { ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage*2, GIB_ORGANIC); } for (n = 0; n < 2; n++) { ThrowGib(self, "models/objects/gibs/sm_metal/tris.md2", damage*2, GIB_METALLIC); } // ace - TEST: shouldn't be too taxing for (n = 0; n < 4; n++) { ThrowGib(self, "sprites/null.sp2", 512, GIB_ORGANIC); } // ace - TEST: shouldn't be too taxing for (n = 0; n < 4; n++) { ThrowGib(self, "sprites/null.sp2", 512, GIB_METALLIC); } ThrowHead(self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); self->deadflag = DEAD_DEAD; return; } if (self->deadflag == DEAD_DEAD) { return; } /* regular death */ self->deadflag = DEAD_DEAD; self->takedamage = DAMAGE_YES; self->svflags |= SVF_DEADMONSTER; // moved this here for "smaller" enemies n = randk() % 2; if (n == 0) { self->monsterinfo.currentmove = &chick_move_death1; gi.sound(self, CHAN_VOICE, sound_death1, 1, ATTN_NORM, 0); } else { self->monsterinfo.currentmove = &chick_move_death2; gi.sound(self, CHAN_VOICE, sound_death2, 1, ATTN_NORM, 0); } }
void BossExplode (edict_t *self) { vec3_t org; int n; self->think = BossExplode; VectorCopy (self->s.origin, org); org[2] += 24 + (rand()&15); switch (self->count++) { case 0: org[0] -= 24; org[1] -= 24; break; case 1: org[0] += 24; org[1] += 24; break; case 2: org[0] += 24; org[1] -= 24; break; case 3: org[0] -= 24; org[1] += 24; break; case 4: org[0] -= 48; org[1] -= 48; break; case 5: org[0] += 48; org[1] += 48; break; case 6: org[0] -= 48; org[1] += 48; break; case 7: org[0] += 48; org[1] -= 48; break; case 8: self->s.sound = 0; for (n= 0; n < 4; n++) ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", 500, GIB_ORGANIC); for (n= 0; n < 8; n++) ThrowGib (self, "models/objects/gibs/sm_metal/tris.md2", 500, GIB_METALLIC); ThrowGib (self, "models/objects/gibs/chest/tris.md2", 500, GIB_ORGANIC); ThrowHead (self, "models/objects/gibs/gear/tris.md2", 500, GIB_METALLIC); self->deadflag = DEAD_DEAD; return; } gi.WriteByte (svc_temp_entity); gi.WriteByte (TE_EXPLOSION1); gi.WritePosition (org); gi.multicast (self->s.origin, MULTICAST_PVS); self->nextthink = level.time + 0.1; }