diff --git a/src/monster/boss2/boss2.c b/src/monster/boss2/boss2.c index ad6463a..e658ee0 100644 --- a/src/monster/boss2/boss2.c +++ b/src/monster/boss2/boss2.c @@ -1,528 +1,713 @@ -/* -============================================================================== - -boss2 - -============================================================================== -*/ +/* ======================================================================= + * + * Boss 2 aka Hornet. + * + * ======================================================================= + */ #include "../../header/local.h" #include "boss2.h" -void BossExplode (edict_t *self); +void BossExplode(edict_t *self); +qboolean infront(edict_t *self, edict_t *other); -qboolean infront (edict_t *self, edict_t *other); +static int sound_pain1; +static int sound_pain2; +static int sound_pain3; +static int sound_death; +static int sound_search1; -static int sound_pain1; -static int sound_pain2; -static int sound_pain3; -static int sound_death; -static int sound_search1; - -void boss2_search (edict_t *self) -{ +void +boss2_search(edict_t *self) +{ + if (!self) + { + return; + } + if (random() < 0.5) - gi.sound (self, CHAN_VOICE, sound_search1, 1, ATTN_NONE, 0); + { + gi.sound(self, CHAN_VOICE, sound_search1, 1, ATTN_NONE, 0); + } } -void boss2_run (edict_t *self); -void boss2_stand (edict_t *self); -void boss2_dead (edict_t *self); -void boss2_attack (edict_t *self); -void boss2_attack_mg (edict_t *self); -void boss2_reattack_mg (edict_t *self); -void boss2_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point); +void boss2_run(edict_t *self); +void boss2_stand(edict_t *self); +void boss2_dead(edict_t *self); +void boss2_attack(edict_t *self); +void boss2_attack_mg(edict_t *self); +void boss2_reattack_mg(edict_t *self); +void boss2_die(edict_t *self, edict_t *inflictor, edict_t *attacker, + int damage, vec3_t point); -void Boss2Rocket (edict_t *self) +void +Boss2Rocket(edict_t *self) { - vec3_t forward, right; - vec3_t start; - vec3_t dir; - vec3_t vec; + vec3_t forward, right; + vec3_t start; + vec3_t dir; + vec3_t vec; + + if (!self) + { + return; + } + + AngleVectors(self->s.angles, forward, right, NULL); - AngleVectors (self->s.angles, forward, right, NULL); - - G_ProjectSource (self->s.origin, monster_flash_offset[MZ2_BOSS2_ROCKET_1], forward, right, start); - VectorCopy (self->enemy->s.origin, vec); + G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_BOSS2_ROCKET_1], + forward, right, start); + VectorCopy(self->enemy->s.origin, vec); vec[2] += self->enemy->viewheight; - VectorSubtract (vec, start, dir); - VectorNormalize (dir); - monster_fire_rocket (self, start, dir, 50, 500, MZ2_BOSS2_ROCKET_1); + VectorSubtract(vec, start, dir); + VectorNormalize(dir); + monster_fire_rocket(self, start, dir, 50, 500, MZ2_BOSS2_ROCKET_1); - G_ProjectSource (self->s.origin, monster_flash_offset[MZ2_BOSS2_ROCKET_2], forward, right, start); - VectorCopy (self->enemy->s.origin, vec); + G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_BOSS2_ROCKET_2], + forward, right, start); + VectorCopy(self->enemy->s.origin, vec); vec[2] += self->enemy->viewheight; - VectorSubtract (vec, start, dir); - VectorNormalize (dir); - monster_fire_rocket (self, start, dir, 50, 500, MZ2_BOSS2_ROCKET_2); + VectorSubtract(vec, start, dir); + VectorNormalize(dir); + monster_fire_rocket(self, start, dir, 50, 500, MZ2_BOSS2_ROCKET_2); - G_ProjectSource (self->s.origin, monster_flash_offset[MZ2_BOSS2_ROCKET_3], forward, right, start); - VectorCopy (self->enemy->s.origin, vec); + G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_BOSS2_ROCKET_3], + forward, right, start); + VectorCopy(self->enemy->s.origin, vec); vec[2] += self->enemy->viewheight; - VectorSubtract (vec, start, dir); - VectorNormalize (dir); - monster_fire_rocket (self, start, dir, 50, 500, MZ2_BOSS2_ROCKET_3); + VectorSubtract(vec, start, dir); + VectorNormalize(dir); + monster_fire_rocket(self, start, dir, 50, 500, MZ2_BOSS2_ROCKET_3); - G_ProjectSource (self->s.origin, monster_flash_offset[MZ2_BOSS2_ROCKET_4], forward, right, start); - VectorCopy (self->enemy->s.origin, vec); + G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_BOSS2_ROCKET_4], + forward, right, start); + VectorCopy(self->enemy->s.origin, vec); vec[2] += self->enemy->viewheight; - VectorSubtract (vec, start, dir); - VectorNormalize (dir); - monster_fire_rocket (self, start, dir, 50, 500, MZ2_BOSS2_ROCKET_4); -} + VectorSubtract(vec, start, dir); + VectorNormalize(dir); + monster_fire_rocket(self, start, dir, 50, 500, MZ2_BOSS2_ROCKET_4); +} -void boss2_firebullet_right (edict_t *self) +void +boss2_firebullet_right(edict_t *self) { - vec3_t forward, right, target; - vec3_t start; + vec3_t forward, right, target; + vec3_t start; + + if (!self) + { + return; + } + + AngleVectors(self->s.angles, forward, right, NULL); + G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_BOSS2_MACHINEGUN_R1], + forward, right, start); - AngleVectors (self->s.angles, forward, right, NULL); - G_ProjectSource (self->s.origin, monster_flash_offset[MZ2_BOSS2_MACHINEGUN_R1], forward, right, start); - - VectorMA (self->enemy->s.origin, -0.2, self->enemy->velocity, target); + VectorMA(self->enemy->s.origin, -0.2, self->enemy->velocity, target); target[2] += self->enemy->viewheight; - VectorSubtract (target, start, forward); - VectorNormalize (forward); + VectorSubtract(target, start, forward); + VectorNormalize(forward); - monster_fire_bullet (self, start, forward, 6, 4, DEFAULT_BULLET_HSPREAD, DEFAULT_BULLET_VSPREAD, MZ2_BOSS2_MACHINEGUN_R1); -} + monster_fire_bullet(self, start, forward, 6, 4, DEFAULT_BULLET_HSPREAD, + DEFAULT_BULLET_VSPREAD, MZ2_BOSS2_MACHINEGUN_R1); +} -void boss2_firebullet_left (edict_t *self) +void +boss2_firebullet_left(edict_t *self) { - vec3_t forward, right, target; - vec3_t start; - - AngleVectors (self->s.angles, forward, right, NULL); - G_ProjectSource (self->s.origin, monster_flash_offset[MZ2_BOSS2_MACHINEGUN_L1], forward, right, start); + vec3_t forward, right, target; + vec3_t start; + + if (!self) + { + return; + } + + AngleVectors(self->s.angles, forward, right, NULL); + G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_BOSS2_MACHINEGUN_L1], + forward, right, start); - VectorMA (self->enemy->s.origin, -0.2, self->enemy->velocity, target); + VectorMA(self->enemy->s.origin, -0.2, self->enemy->velocity, target); target[2] += self->enemy->viewheight; - VectorSubtract (target, start, forward); - VectorNormalize (forward); + VectorSubtract(target, start, forward); + VectorNormalize(forward); - monster_fire_bullet (self, start, forward, 6, 4, DEFAULT_BULLET_HSPREAD, DEFAULT_BULLET_VSPREAD, MZ2_BOSS2_MACHINEGUN_L1); -} + monster_fire_bullet(self, start, forward, 6, 4, DEFAULT_BULLET_HSPREAD, + DEFAULT_BULLET_VSPREAD, MZ2_BOSS2_MACHINEGUN_L1); +} -void Boss2MachineGun (edict_t *self) -{ - boss2_firebullet_left(self); +void +Boss2MachineGun(edict_t *self) +{ + if (!self) + { + return; + } + + boss2_firebullet_left(self); boss2_firebullet_right(self); -} - - -mframe_t boss2_frames_stand [] = -{ - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL} -}; -mmove_t boss2_move_stand = {FRAME_stand30, FRAME_stand50, boss2_frames_stand, NULL}; - -mframe_t boss2_frames_fidget [] = -{ - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL}, - {ai_stand, 0, NULL} -}; -mmove_t boss2_move_fidget = {FRAME_stand1, FRAME_stand30, boss2_frames_fidget, NULL}; - -mframe_t boss2_frames_walk [] = -{ - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL}, - {ai_walk, 8, NULL} -}; -mmove_t boss2_move_walk = {FRAME_walk1, FRAME_walk20, boss2_frames_walk, NULL}; - - -mframe_t boss2_frames_run [] = -{ - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL}, - {ai_run, 8, NULL} -}; -mmove_t boss2_move_run = {FRAME_walk1, FRAME_walk20, boss2_frames_run, NULL}; - -mframe_t boss2_frames_attack_pre_mg [] = -{ - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, boss2_attack_mg} -}; -mmove_t boss2_move_attack_pre_mg = {FRAME_attack1, FRAME_attack9, boss2_frames_attack_pre_mg, NULL}; - - -// Loop this -mframe_t boss2_frames_attack_mg [] = -{ - {ai_charge, 1, Boss2MachineGun}, - {ai_charge, 1, Boss2MachineGun}, - {ai_charge, 1, Boss2MachineGun}, - {ai_charge, 1, Boss2MachineGun}, - {ai_charge, 1, Boss2MachineGun}, - {ai_charge, 1, boss2_reattack_mg} -}; -mmove_t boss2_move_attack_mg = {FRAME_attack10, FRAME_attack15, boss2_frames_attack_mg, NULL}; - -mframe_t boss2_frames_attack_post_mg [] = -{ - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL} -}; -mmove_t boss2_move_attack_post_mg = {FRAME_attack16, FRAME_attack19, boss2_frames_attack_post_mg, boss2_run}; - -mframe_t boss2_frames_attack_rocket [] = -{ - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_move, -20, Boss2Rocket}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL}, - {ai_charge, 1, NULL} -}; -mmove_t boss2_move_attack_rocket = {FRAME_attack20, FRAME_attack40, boss2_frames_attack_rocket, boss2_run}; - -mframe_t boss2_frames_pain_heavy [] = -{ - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL} -}; -mmove_t boss2_move_pain_heavy = {FRAME_pain2, FRAME_pain19, boss2_frames_pain_heavy, boss2_run}; - -mframe_t boss2_frames_pain_light [] = -{ - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL} -}; -mmove_t boss2_move_pain_light = {FRAME_pain20, FRAME_pain23, boss2_frames_pain_light, boss2_run}; - -mframe_t boss2_frames_death [] = -{ - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, BossExplode} -}; -mmove_t boss2_move_death = {FRAME_death2, FRAME_death50, boss2_frames_death, boss2_dead}; - -void boss2_stand (edict_t *self) -{ - self->monsterinfo.currentmove = &boss2_move_stand; } -void boss2_run (edict_t *self) -{ +mframe_t boss2_frames_stand[] = { + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL} +}; + +mmove_t boss2_move_stand = { + FRAME_stand30, + FRAME_stand50, + boss2_frames_stand, + NULL +}; + +mframe_t boss2_frames_fidget[] = { + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL}, + {ai_stand, 0, NULL} +}; + +mmove_t boss2_move_fidget = { + FRAME_stand1, + FRAME_stand30, + boss2_frames_fidget, + NULL +}; + +mframe_t boss2_frames_walk[] = { + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL}, + {ai_walk, 8, NULL} +}; + +mmove_t boss2_move_walk = { + FRAME_walk1, + FRAME_walk20, + boss2_frames_walk, + NULL +}; + +mframe_t boss2_frames_run[] = { + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL}, + {ai_run, 8, NULL} +}; + +mmove_t boss2_move_run = { + FRAME_walk1, + FRAME_walk20, + boss2_frames_run, + NULL +}; + +mframe_t boss2_frames_attack_pre_mg[] = { + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, boss2_attack_mg} +}; + +mmove_t boss2_move_attack_pre_mg = { + FRAME_attack1, + FRAME_attack9, + boss2_frames_attack_pre_mg, + NULL +}; + +mframe_t boss2_frames_attack_mg[] = { + {ai_charge, 1, Boss2MachineGun}, + {ai_charge, 1, Boss2MachineGun}, + {ai_charge, 1, Boss2MachineGun}, + {ai_charge, 1, Boss2MachineGun}, + {ai_charge, 1, Boss2MachineGun}, + {ai_charge, 1, boss2_reattack_mg} +}; + +mmove_t boss2_move_attack_mg = { + FRAME_attack10, + FRAME_attack15, + boss2_frames_attack_mg, + NULL +}; + +mframe_t boss2_frames_attack_post_mg[] = { + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL} +}; + +mmove_t boss2_move_attack_post_mg = { + FRAME_attack16, + FRAME_attack19, + boss2_frames_attack_post_mg, + boss2_run +}; + +mframe_t boss2_frames_attack_rocket[] = { + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_move, -20, Boss2Rocket}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL}, + {ai_charge, 1, NULL} +}; + +mmove_t boss2_move_attack_rocket = { + FRAME_attack20, + FRAME_attack40, + boss2_frames_attack_rocket, + boss2_run +}; + +mframe_t boss2_frames_pain_heavy[] = { + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL} +}; + +mmove_t boss2_move_pain_heavy = { + FRAME_pain2, + FRAME_pain19, + boss2_frames_pain_heavy, + boss2_run +}; + +mframe_t boss2_frames_pain_light[] = { + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL} +}; + +mmove_t boss2_move_pain_light = { + FRAME_pain20, + FRAME_pain23, + boss2_frames_pain_light, + boss2_run +}; + +mframe_t boss2_frames_death[] = { + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, BossExplode} +}; + +mmove_t boss2_move_death = { + FRAME_death2, + FRAME_death50, + boss2_frames_death, + boss2_dead +}; + +void +boss2_stand(edict_t *self) +{ + if (!self) + { + return; + } + + self->monsterinfo.currentmove = &boss2_move_stand; +} + +void +boss2_run(edict_t *self) +{ + if (!self) + { + return; + } + if (self->monsterinfo.aiflags & AI_STAND_GROUND) + { self->monsterinfo.currentmove = &boss2_move_stand; + } else + { self->monsterinfo.currentmove = &boss2_move_run; + } } -void boss2_walk (edict_t *self) -{ +void +boss2_walk(edict_t *self) +{ + if (!self) + { + return; + } + self->monsterinfo.currentmove = &boss2_move_walk; } -void boss2_attack (edict_t *self) +void +boss2_attack(edict_t *self) { - vec3_t vec; - float range; + vec3_t vec; + float range; + + if (!self) + { + return; + } + + VectorSubtract(self->enemy->s.origin, self->s.origin, vec); + range = VectorLength(vec); - VectorSubtract (self->enemy->s.origin, self->s.origin, vec); - range = VectorLength (vec); - if (range <= 125) { self->monsterinfo.currentmove = &boss2_move_attack_pre_mg; } - else + else { if (random() <= 0.6) + { self->monsterinfo.currentmove = &boss2_move_attack_pre_mg; + } else + { self->monsterinfo.currentmove = &boss2_move_attack_rocket; + } } } -void boss2_attack_mg (edict_t *self) -{ +void +boss2_attack_mg(edict_t *self) +{ + if (!self) + { + return; + } + self->monsterinfo.currentmove = &boss2_move_attack_mg; } -void boss2_reattack_mg (edict_t *self) -{ - if ( infront(self, self->enemy) ) +void +boss2_reattack_mg(edict_t *self) +{ + if (!self) + { + return; + } + + if (infront(self, self->enemy)) + { if (random() <= 0.7) + { self->monsterinfo.currentmove = &boss2_move_attack_mg; + } else + { self->monsterinfo.currentmove = &boss2_move_attack_post_mg; + } + } else + { self->monsterinfo.currentmove = &boss2_move_attack_post_mg; + } } - -void boss2_pain (edict_t *self, edict_t *other, float kick, int damage) -{ +void +boss2_pain(edict_t *self, edict_t *other /* unused */, + float kick /* unused */, int damage) +{ + if (!self) + { + return; + } + 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; -// American wanted these at no attenuation + if (damage < 10) { - gi.sound (self, CHAN_VOICE, sound_pain3, 1, ATTN_NONE, 0); + gi.sound(self, CHAN_VOICE, sound_pain3, 1, ATTN_NONE, 0); self->monsterinfo.currentmove = &boss2_move_pain_light; } else if (damage < 30) { - gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NONE, 0); + gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NONE, 0); self->monsterinfo.currentmove = &boss2_move_pain_light; } - else + else { - gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NONE, 0); + gi.sound(self, CHAN_VOICE, sound_pain2, 1, ATTN_NONE, 0); self->monsterinfo.currentmove = &boss2_move_pain_heavy; } } -void boss2_dead (edict_t *self) -{ - VectorSet (self->mins, -56, -56, 0); - VectorSet (self->maxs, 56, 56, 80); +void +boss2_dead(edict_t *self) +{ + if (!self) + { + return; + } + + VectorSet(self->mins, -56, -56, 0); + VectorSet(self->maxs, 56, 56, 80); self->movetype = MOVETYPE_TOSS; self->svflags |= SVF_DEADMONSTER; self->nextthink = 0; - gi.linkentity (self); + gi.linkentity(self); } -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); +void +boss2_die(edict_t *self, edict_t *inflictor /* unused */, edict_t *attacker /* unused */, + int damage /* unused */, vec3_t point /* unused */) +{ + if (!self) + { + return; + } + + 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; } -qboolean Boss2_CheckAttack (edict_t *self) +qboolean +Boss2_CheckAttack(edict_t *self) { - vec3_t spot1, spot2; - vec3_t temp; - float chance; - trace_t tr; - int enemy_range; - float enemy_yaw; - + vec3_t spot1, spot2; + vec3_t temp; + float chance; + trace_t tr; + int enemy_range; + float enemy_yaw; + + if (!self) + { + return false; + } + if (self->enemy->health > 0) { - // see if any entities are in the way of the shot - VectorCopy (self->s.origin, spot1); + /* see if any entities are in the way of the shot */ + VectorCopy(self->s.origin, spot1); spot1[2] += self->viewheight; - VectorCopy (self->enemy->s.origin, spot2); + VectorCopy(self->enemy->s.origin, spot2); spot2[2] += self->enemy->viewheight; - tr = gi.trace (spot1, NULL, NULL, spot2, self, CONTENTS_SOLID|CONTENTS_MONSTER|CONTENTS_SLIME|CONTENTS_LAVA); + tr = gi.trace( spot1, NULL, NULL, spot2, self, + CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_SLIME | + CONTENTS_LAVA); - // do we have a clear shot? + /* do we have a clear shot? */ if (tr.ent != self->enemy) + { return false; + } } - + enemy_range = range(self, self->enemy); - VectorSubtract (self->enemy->s.origin, self->s.origin, temp); + VectorSubtract(self->enemy->s.origin, self->s.origin, temp); enemy_yaw = vectoyaw(temp); self->ideal_yaw = enemy_yaw; - - // melee attack + /* melee attack */ if (enemy_range == RANGE_MELEE) { if (self->monsterinfo.melee) + { self->monsterinfo.attack_state = AS_MELEE; + } else + { self->monsterinfo.attack_state = AS_MISSILE; + } + return true; } - - // missile attack + + /* missile attack */ if (!self->monsterinfo.attack) + { return false; - + } + if (level.time < self->monsterinfo.attack_finished) + { return false; - + } + if (enemy_range == RANGE_FAR) + { return false; + } if (self->monsterinfo.aiflags & AI_STAND_GROUND) { @@ -545,49 +730,58 @@ qboolean Boss2_CheckAttack (edict_t *self) return false; } - if (random () < chance) + if (random() < chance) { self->monsterinfo.attack_state = AS_MISSILE; - self->monsterinfo.attack_finished = level.time + 2*random(); + self->monsterinfo.attack_finished = level.time + 2 * random(); return true; } if (self->flags & FL_FLY) { if (random() < 0.3) + { self->monsterinfo.attack_state = AS_SLIDING; + } else + { self->monsterinfo.attack_state = AS_STRAIGHT; + } } return false; } - - -/*QUAKED monster_boss2 (1 .5 0) (-56 -56 0) (56 56 80) Ambush Trigger_Spawn Sight -*/ -void SP_monster_boss2 (edict_t *self) -{ +/* + * QUAKED monster_boss2 (1 .5 0) (-56 -56 0) (56 56 80) Ambush Trigger_Spawn Sight + */ +void +SP_monster_boss2(edict_t *self) +{ + if (!self) + { + return; + } + if (deathmatch->value) { - G_FreeEdict (self); + G_FreeEdict(self); return; } - sound_pain1 = gi.soundindex ("bosshovr/bhvpain1.wav"); - sound_pain2 = gi.soundindex ("bosshovr/bhvpain2.wav"); - sound_pain3 = gi.soundindex ("bosshovr/bhvpain3.wav"); - sound_death = gi.soundindex ("bosshovr/bhvdeth1.wav"); - sound_search1 = gi.soundindex ("bosshovr/bhvunqv1.wav"); + sound_pain1 = gi.soundindex("bosshovr/bhvpain1.wav"); + sound_pain2 = gi.soundindex("bosshovr/bhvpain2.wav"); + sound_pain3 = gi.soundindex("bosshovr/bhvpain3.wav"); + sound_death = gi.soundindex("bosshovr/bhvdeth1.wav"); + sound_search1 = gi.soundindex("bosshovr/bhvunqv1.wav"); - self->s.sound = gi.soundindex ("bosshovr/bhvengn1.wav"); + self->s.sound = gi.soundindex("bosshovr/bhvengn1.wav"); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; - self->s.modelindex = gi.modelindex ("models/monsters/boss2/tris.md2"); - VectorSet (self->mins, -56, -56, 0); - VectorSet (self->maxs, 56, 56, 80); + self->s.modelindex = gi.modelindex("models/monsters/boss2/tris.md2"); + VectorSet(self->mins, -56, -56, 0); + VectorSet(self->maxs, 56, 56, 80); self->health = 2000; self->gib_health = -200; @@ -604,11 +798,10 @@ void SP_monster_boss2 (edict_t *self) self->monsterinfo.attack = boss2_attack; self->monsterinfo.search = boss2_search; self->monsterinfo.checkattack = Boss2_CheckAttack; - gi.linkentity (self); + gi.linkentity(self); - self->monsterinfo.currentmove = &boss2_move_stand; + self->monsterinfo.currentmove = &boss2_move_stand; self->monsterinfo.scale = MODEL_SCALE; - flymonster_start (self); + flymonster_start(self); } - diff --git a/src/monster/boss2/boss2.h b/src/monster/boss2/boss2.h index 3bcbc05..2e5a246 100644 --- a/src/monster/boss2/boss2.h +++ b/src/monster/boss2/boss2.h @@ -1,187 +1,190 @@ -// G:\quake2\baseq2\models/monsters/boss2 +/* ======================================================================= + * + * Animations for boss2. + * + * ======================================================================= + */ -// This file generated by ModelGen - Do NOT Modify +#define FRAME_stand30 0 +#define FRAME_stand31 1 +#define FRAME_stand32 2 +#define FRAME_stand33 3 +#define FRAME_stand34 4 +#define FRAME_stand35 5 +#define FRAME_stand36 6 +#define FRAME_stand37 7 +#define FRAME_stand38 8 +#define FRAME_stand39 9 +#define FRAME_stand40 10 +#define FRAME_stand41 11 +#define FRAME_stand42 12 +#define FRAME_stand43 13 +#define FRAME_stand44 14 +#define FRAME_stand45 15 +#define FRAME_stand46 16 +#define FRAME_stand47 17 +#define FRAME_stand48 18 +#define FRAME_stand49 19 +#define FRAME_stand50 20 +#define FRAME_stand1 21 +#define FRAME_stand2 22 +#define FRAME_stand3 23 +#define FRAME_stand4 24 +#define FRAME_stand5 25 +#define FRAME_stand6 26 +#define FRAME_stand7 27 +#define FRAME_stand8 28 +#define FRAME_stand9 29 +#define FRAME_stand10 30 +#define FRAME_stand11 31 +#define FRAME_stand12 32 +#define FRAME_stand13 33 +#define FRAME_stand14 34 +#define FRAME_stand15 35 +#define FRAME_stand16 36 +#define FRAME_stand17 37 +#define FRAME_stand18 38 +#define FRAME_stand19 39 +#define FRAME_stand20 40 +#define FRAME_stand21 41 +#define FRAME_stand22 42 +#define FRAME_stand23 43 +#define FRAME_stand24 44 +#define FRAME_stand25 45 +#define FRAME_stand26 46 +#define FRAME_stand27 47 +#define FRAME_stand28 48 +#define FRAME_stand29 49 +#define FRAME_walk1 50 +#define FRAME_walk2 51 +#define FRAME_walk3 52 +#define FRAME_walk4 53 +#define FRAME_walk5 54 +#define FRAME_walk6 55 +#define FRAME_walk7 56 +#define FRAME_walk8 57 +#define FRAME_walk9 58 +#define FRAME_walk10 59 +#define FRAME_walk11 60 +#define FRAME_walk12 61 +#define FRAME_walk13 62 +#define FRAME_walk14 63 +#define FRAME_walk15 64 +#define FRAME_walk16 65 +#define FRAME_walk17 66 +#define FRAME_walk18 67 +#define FRAME_walk19 68 +#define FRAME_walk20 69 +#define FRAME_attack1 70 +#define FRAME_attack2 71 +#define FRAME_attack3 72 +#define FRAME_attack4 73 +#define FRAME_attack5 74 +#define FRAME_attack6 75 +#define FRAME_attack7 76 +#define FRAME_attack8 77 +#define FRAME_attack9 78 +#define FRAME_attack10 79 +#define FRAME_attack11 80 +#define FRAME_attack12 81 +#define FRAME_attack13 82 +#define FRAME_attack14 83 +#define FRAME_attack15 84 +#define FRAME_attack16 85 +#define FRAME_attack17 86 +#define FRAME_attack18 87 +#define FRAME_attack19 88 +#define FRAME_attack20 89 +#define FRAME_attack21 90 +#define FRAME_attack22 91 +#define FRAME_attack23 92 +#define FRAME_attack24 93 +#define FRAME_attack25 94 +#define FRAME_attack26 95 +#define FRAME_attack27 96 +#define FRAME_attack28 97 +#define FRAME_attack29 98 +#define FRAME_attack30 99 +#define FRAME_attack31 100 +#define FRAME_attack32 101 +#define FRAME_attack33 102 +#define FRAME_attack34 103 +#define FRAME_attack35 104 +#define FRAME_attack36 105 +#define FRAME_attack37 106 +#define FRAME_attack38 107 +#define FRAME_attack39 108 +#define FRAME_attack40 109 +#define FRAME_pain2 110 +#define FRAME_pain3 111 +#define FRAME_pain4 112 +#define FRAME_pain5 113 +#define FRAME_pain6 114 +#define FRAME_pain7 115 +#define FRAME_pain8 116 +#define FRAME_pain9 117 +#define FRAME_pain10 118 +#define FRAME_pain11 119 +#define FRAME_pain12 120 +#define FRAME_pain13 121 +#define FRAME_pain14 122 +#define FRAME_pain15 123 +#define FRAME_pain16 124 +#define FRAME_pain17 125 +#define FRAME_pain18 126 +#define FRAME_pain19 127 +#define FRAME_pain20 128 +#define FRAME_pain21 129 +#define FRAME_pain22 130 +#define FRAME_pain23 131 +#define FRAME_death2 132 +#define FRAME_death3 133 +#define FRAME_death4 134 +#define FRAME_death5 135 +#define FRAME_death6 136 +#define FRAME_death7 137 +#define FRAME_death8 138 +#define FRAME_death9 139 +#define FRAME_death10 140 +#define FRAME_death11 141 +#define FRAME_death12 142 +#define FRAME_death13 143 +#define FRAME_death14 144 +#define FRAME_death15 145 +#define FRAME_death16 146 +#define FRAME_death17 147 +#define FRAME_death18 148 +#define FRAME_death19 149 +#define FRAME_death20 150 +#define FRAME_death21 151 +#define FRAME_death22 152 +#define FRAME_death23 153 +#define FRAME_death24 154 +#define FRAME_death25 155 +#define FRAME_death26 156 +#define FRAME_death27 157 +#define FRAME_death28 158 +#define FRAME_death29 159 +#define FRAME_death30 160 +#define FRAME_death31 161 +#define FRAME_death32 162 +#define FRAME_death33 163 +#define FRAME_death34 164 +#define FRAME_death35 165 +#define FRAME_death36 166 +#define FRAME_death37 167 +#define FRAME_death38 168 +#define FRAME_death39 169 +#define FRAME_death40 170 +#define FRAME_death41 171 +#define FRAME_death42 172 +#define FRAME_death43 173 +#define FRAME_death44 174 +#define FRAME_death45 175 +#define FRAME_death46 176 +#define FRAME_death47 177 +#define FRAME_death48 178 +#define FRAME_death49 179 +#define FRAME_death50 180 -#define FRAME_stand30 0 -#define FRAME_stand31 1 -#define FRAME_stand32 2 -#define FRAME_stand33 3 -#define FRAME_stand34 4 -#define FRAME_stand35 5 -#define FRAME_stand36 6 -#define FRAME_stand37 7 -#define FRAME_stand38 8 -#define FRAME_stand39 9 -#define FRAME_stand40 10 -#define FRAME_stand41 11 -#define FRAME_stand42 12 -#define FRAME_stand43 13 -#define FRAME_stand44 14 -#define FRAME_stand45 15 -#define FRAME_stand46 16 -#define FRAME_stand47 17 -#define FRAME_stand48 18 -#define FRAME_stand49 19 -#define FRAME_stand50 20 -#define FRAME_stand1 21 -#define FRAME_stand2 22 -#define FRAME_stand3 23 -#define FRAME_stand4 24 -#define FRAME_stand5 25 -#define FRAME_stand6 26 -#define FRAME_stand7 27 -#define FRAME_stand8 28 -#define FRAME_stand9 29 -#define FRAME_stand10 30 -#define FRAME_stand11 31 -#define FRAME_stand12 32 -#define FRAME_stand13 33 -#define FRAME_stand14 34 -#define FRAME_stand15 35 -#define FRAME_stand16 36 -#define FRAME_stand17 37 -#define FRAME_stand18 38 -#define FRAME_stand19 39 -#define FRAME_stand20 40 -#define FRAME_stand21 41 -#define FRAME_stand22 42 -#define FRAME_stand23 43 -#define FRAME_stand24 44 -#define FRAME_stand25 45 -#define FRAME_stand26 46 -#define FRAME_stand27 47 -#define FRAME_stand28 48 -#define FRAME_stand29 49 -#define FRAME_walk1 50 -#define FRAME_walk2 51 -#define FRAME_walk3 52 -#define FRAME_walk4 53 -#define FRAME_walk5 54 -#define FRAME_walk6 55 -#define FRAME_walk7 56 -#define FRAME_walk8 57 -#define FRAME_walk9 58 -#define FRAME_walk10 59 -#define FRAME_walk11 60 -#define FRAME_walk12 61 -#define FRAME_walk13 62 -#define FRAME_walk14 63 -#define FRAME_walk15 64 -#define FRAME_walk16 65 -#define FRAME_walk17 66 -#define FRAME_walk18 67 -#define FRAME_walk19 68 -#define FRAME_walk20 69 -#define FRAME_attack1 70 -#define FRAME_attack2 71 -#define FRAME_attack3 72 -#define FRAME_attack4 73 -#define FRAME_attack5 74 -#define FRAME_attack6 75 -#define FRAME_attack7 76 -#define FRAME_attack8 77 -#define FRAME_attack9 78 -#define FRAME_attack10 79 -#define FRAME_attack11 80 -#define FRAME_attack12 81 -#define FRAME_attack13 82 -#define FRAME_attack14 83 -#define FRAME_attack15 84 -#define FRAME_attack16 85 -#define FRAME_attack17 86 -#define FRAME_attack18 87 -#define FRAME_attack19 88 -#define FRAME_attack20 89 -#define FRAME_attack21 90 -#define FRAME_attack22 91 -#define FRAME_attack23 92 -#define FRAME_attack24 93 -#define FRAME_attack25 94 -#define FRAME_attack26 95 -#define FRAME_attack27 96 -#define FRAME_attack28 97 -#define FRAME_attack29 98 -#define FRAME_attack30 99 -#define FRAME_attack31 100 -#define FRAME_attack32 101 -#define FRAME_attack33 102 -#define FRAME_attack34 103 -#define FRAME_attack35 104 -#define FRAME_attack36 105 -#define FRAME_attack37 106 -#define FRAME_attack38 107 -#define FRAME_attack39 108 -#define FRAME_attack40 109 -#define FRAME_pain2 110 -#define FRAME_pain3 111 -#define FRAME_pain4 112 -#define FRAME_pain5 113 -#define FRAME_pain6 114 -#define FRAME_pain7 115 -#define FRAME_pain8 116 -#define FRAME_pain9 117 -#define FRAME_pain10 118 -#define FRAME_pain11 119 -#define FRAME_pain12 120 -#define FRAME_pain13 121 -#define FRAME_pain14 122 -#define FRAME_pain15 123 -#define FRAME_pain16 124 -#define FRAME_pain17 125 -#define FRAME_pain18 126 -#define FRAME_pain19 127 -#define FRAME_pain20 128 -#define FRAME_pain21 129 -#define FRAME_pain22 130 -#define FRAME_pain23 131 -#define FRAME_death2 132 -#define FRAME_death3 133 -#define FRAME_death4 134 -#define FRAME_death5 135 -#define FRAME_death6 136 -#define FRAME_death7 137 -#define FRAME_death8 138 -#define FRAME_death9 139 -#define FRAME_death10 140 -#define FRAME_death11 141 -#define FRAME_death12 142 -#define FRAME_death13 143 -#define FRAME_death14 144 -#define FRAME_death15 145 -#define FRAME_death16 146 -#define FRAME_death17 147 -#define FRAME_death18 148 -#define FRAME_death19 149 -#define FRAME_death20 150 -#define FRAME_death21 151 -#define FRAME_death22 152 -#define FRAME_death23 153 -#define FRAME_death24 154 -#define FRAME_death25 155 -#define FRAME_death26 156 -#define FRAME_death27 157 -#define FRAME_death28 158 -#define FRAME_death29 159 -#define FRAME_death30 160 -#define FRAME_death31 161 -#define FRAME_death32 162 -#define FRAME_death33 163 -#define FRAME_death34 164 -#define FRAME_death35 165 -#define FRAME_death36 166 -#define FRAME_death37 167 -#define FRAME_death38 168 -#define FRAME_death39 169 -#define FRAME_death40 170 -#define FRAME_death41 171 -#define FRAME_death42 172 -#define FRAME_death43 173 -#define FRAME_death44 174 -#define FRAME_death45 175 -#define FRAME_death46 176 -#define FRAME_death47 177 -#define FRAME_death48 178 -#define FRAME_death49 179 -#define FRAME_death50 180 - -#define MODEL_SCALE 1.000000 +#define MODEL_SCALE 1.000000