diff --git a/src/game/baseq2/monster/float/float.c b/src/game/baseq2/monster/float/float.c index 738ef1ab..eb9e07e2 100644 --- a/src/game/baseq2/monster/float/float.c +++ b/src/game/baseq2/monster/float/float.c @@ -1,86 +1,104 @@ /* -Copyright (C) 1997-2001 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -/* -============================================================================== - -floater - -============================================================================== -*/ + * Copyright (C) 1997-2001 Id Software, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * ======================================================================= + * + * Mechanic. + * + * ======================================================================= + */ #include "../../header/local.h" #include "float.h" +static int sound_attack2; +static int sound_attack3; +static int sound_death1; +static int sound_idle; +static int sound_pain1; +static int sound_pain2; +static int sound_sight; -static int sound_attack2; -static int sound_attack3; -static int sound_death1; -static int sound_idle; -static int sound_pain1; -static int sound_pain2; -static int sound_sight; - - -void floater_sight (edict_t *self, edict_t *other) -{ - gi.sound (self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0); +void +floater_sight(edict_t *self, edict_t *other /* unused */) +{ + if (!self) + { + return; + } + + gi.sound(self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0); } -void floater_idle (edict_t *self) -{ - gi.sound (self, CHAN_VOICE, sound_idle, 1, ATTN_IDLE, 0); +void +floater_idle(edict_t *self) +{ + if (!self) + { + return; + } + + gi.sound(self, CHAN_VOICE, sound_idle, 1, ATTN_IDLE, 0); } +void floater_dead(edict_t *self); +void floater_die(edict_t *self, edict_t *inflictor, edict_t *attacker, + int damage, vec3_t point); +void floater_run(edict_t *self); +void floater_wham(edict_t *self); +void floater_zap(edict_t *self); -void floater_dead (edict_t *self); -void floater_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point); -void floater_run (edict_t *self); -void floater_wham (edict_t *self); -void floater_zap (edict_t *self); - - -void floater_fire_blaster (edict_t *self) +void +floater_fire_blaster(edict_t *self) { - vec3_t start; - vec3_t forward, right; - vec3_t end; - vec3_t dir; - int effect; - + vec3_t start; + vec3_t forward, right; + vec3_t end; + vec3_t dir; + int effect; + + if (!self) + { + return; + } + if ((self->s.frame == FRAME_attak104) || (self->s.frame == FRAME_attak107)) + { effect = EF_HYPERBLASTER; + } else + { effect = 0; - AngleVectors (self->s.angles, forward, right, NULL); - G_ProjectSource (self->s.origin, monster_flash_offset[MZ2_FLOAT_BLASTER_1], forward, right, start); + } - VectorCopy (self->enemy->s.origin, end); + AngleVectors(self->s.angles, forward, right, NULL); + G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_FLOAT_BLASTER_1], + forward, right, start); + + VectorCopy(self->enemy->s.origin, end); end[2] += self->enemy->viewheight; - VectorSubtract (end, start, dir); + VectorSubtract(end, start, dir); - monster_fire_blaster (self, start, dir, 1, 1000, MZ2_FLOAT_BLASTER_1, effect); + monster_fire_blaster(self, start, dir, 1, 1000, MZ2_FLOAT_BLASTER_1, effect); } - -mframe_t floater_frames_stand1 [] = -{ +mframe_t floater_frames_stand1[] = { {ai_stand, 0, NULL}, {ai_stand, 0, NULL}, {ai_stand, 0, NULL}, @@ -134,10 +152,16 @@ mframe_t floater_frames_stand1 [] = {ai_stand, 0, NULL}, {ai_stand, 0, NULL} }; -mmove_t floater_move_stand1 = {FRAME_stand101, FRAME_stand152, floater_frames_stand1, NULL}; -mframe_t floater_frames_stand2 [] = +mmove_t floater_move_stand1 = { + FRAME_stand101, + FRAME_stand152, + floater_frames_stand1, + NULL +}; + +mframe_t floater_frames_stand2[] = { {ai_stand, 0, NULL}, {ai_stand, 0, NULL}, {ai_stand, 0, NULL}, @@ -191,201 +215,264 @@ mframe_t floater_frames_stand2 [] = {ai_stand, 0, NULL}, {ai_stand, 0, NULL} }; -mmove_t floater_move_stand2 = {FRAME_stand201, FRAME_stand252, floater_frames_stand2, NULL}; -void floater_stand (edict_t *self) +mmove_t floater_move_stand2 = { - if (random() <= 0.5) + FRAME_stand201, + FRAME_stand252, + floater_frames_stand2, + NULL +}; + +void +floater_stand(edict_t *self) +{ + if (!self) + { + return; + } + + if (random() <= 0.5) + { self->monsterinfo.currentmove = &floater_move_stand1; + } else + { self->monsterinfo.currentmove = &floater_move_stand2; + } } -mframe_t floater_frames_activate [] = -{ - {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} +mframe_t floater_frames_activate[] = { + {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} }; -mmove_t floater_move_activate = {FRAME_actvat01, FRAME_actvat31, floater_frames_activate, NULL}; -mframe_t floater_frames_attack1 [] = +mmove_t floater_move_activate = { - {ai_charge, 0, NULL}, // Blaster attack - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, floater_fire_blaster}, // BOOM (0, -25.8, 32.5) -- LOOP Starts - {ai_charge, 0, floater_fire_blaster}, - {ai_charge, 0, floater_fire_blaster}, - {ai_charge, 0, floater_fire_blaster}, - {ai_charge, 0, floater_fire_blaster}, - {ai_charge, 0, floater_fire_blaster}, - {ai_charge, 0, floater_fire_blaster}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL} // -- LOOP Ends + FRAME_actvat01, + FRAME_actvat31, + floater_frames_activate, + NULL }; -mmove_t floater_move_attack1 = {FRAME_attak101, FRAME_attak114, floater_frames_attack1, floater_run}; -mframe_t floater_frames_attack2 [] = -{ - {ai_charge, 0, NULL}, // Claws - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, floater_wham}, // WHAM (0, -45, 29}.6) -- LOOP Starts - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, // -- LOOP Ends - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL} +mframe_t floater_frames_attack1[] = { + {ai_charge, 0, NULL}, /* Blaster attack */ + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, floater_fire_blaster}, /* BOOM (0, -25.8, 32.5) -- LOOP Starts */ + {ai_charge, 0, floater_fire_blaster}, + {ai_charge, 0, floater_fire_blaster}, + {ai_charge, 0, floater_fire_blaster}, + {ai_charge, 0, floater_fire_blaster}, + {ai_charge, 0, floater_fire_blaster}, + {ai_charge, 0, floater_fire_blaster}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL} /* -- LOOP Ends */ }; -mmove_t floater_move_attack2 = {FRAME_attak201, FRAME_attak225, floater_frames_attack2, floater_run}; -mframe_t floater_frames_attack3 [] = +mmove_t floater_move_attack1 = { - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, floater_zap}, // -- LOOP Starts - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, // -- LOOP Ends - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, 0, NULL} + FRAME_attak101, + FRAME_attak114, + floater_frames_attack1, + floater_run }; -mmove_t floater_move_attack3 = {FRAME_attak301, FRAME_attak334, floater_frames_attack3, floater_run}; -mframe_t floater_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} +mframe_t floater_frames_attack2[] = { + {ai_charge, 0, NULL}, /* Claws */ + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, floater_wham}, /* WHAM (0, -45, 29}.6) -- LOOP Starts */ + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, /* -- LOOP Ends */ + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL} }; -mmove_t floater_move_death = {FRAME_death01, FRAME_death13, floater_frames_death, floater_dead}; -mframe_t floater_frames_pain1 [] = +mmove_t floater_move_attack2 = { - {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} + FRAME_attak201, + FRAME_attak225, + floater_frames_attack2, + floater_run }; -mmove_t floater_move_pain1 = {FRAME_pain101, FRAME_pain107, floater_frames_pain1, floater_run}; -mframe_t floater_frames_pain2 [] = -{ - {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} +mframe_t floater_frames_attack3[] = { + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, floater_zap}, /* -- LOOP Starts */ + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, /* -- LOOP Ends */ + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, 0, NULL} }; -mmove_t floater_move_pain2 = {FRAME_pain201, FRAME_pain208, floater_frames_pain2, floater_run}; -mframe_t floater_frames_pain3 [] = +mmove_t floater_move_attack3 = { - {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} + FRAME_attak301, + FRAME_attak334, + floater_frames_attack3, + floater_run}; + +mframe_t floater_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} }; -mmove_t floater_move_pain3 = {FRAME_pain301, FRAME_pain312, floater_frames_pain3, floater_run}; -mframe_t floater_frames_walk [] = +mmove_t floater_move_death = { + FRAME_death01, + FRAME_death13, + floater_frames_death, + floater_dead +}; + +mframe_t floater_frames_pain1[] = { + {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 floater_move_pain1 = +{ + FRAME_pain101, + FRAME_pain107, + floater_frames_pain1, + floater_run +}; + +mframe_t floater_frames_pain2[] = { + {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 floater_move_pain2 = +{ + FRAME_pain201, + FRAME_pain208, + floater_frames_pain2, + floater_run +}; + +mframe_t floater_frames_pain3[] = { + {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 floater_move_pain3 = +{ + FRAME_pain301, + FRAME_pain312, + floater_frames_pain3, + floater_run +}; + +mframe_t floater_frames_walk[] = { {ai_walk, 5, NULL}, {ai_walk, 5, NULL}, {ai_walk, 5, NULL}, @@ -439,10 +526,16 @@ mframe_t floater_frames_walk [] = {ai_walk, 5, NULL}, {ai_walk, 5, NULL} }; -mmove_t floater_move_walk = {FRAME_stand101, FRAME_stand152, floater_frames_walk, NULL}; -mframe_t floater_frames_run [] = +mmove_t floater_move_walk = { + FRAME_stand101, + FRAME_stand152, + floater_frames_walk, + NULL +}; + +mframe_t floater_frames_run[] = { {ai_run, 13, NULL}, {ai_run, 13, NULL}, {ai_run, 13, NULL}, @@ -496,141 +589,221 @@ mframe_t floater_frames_run [] = {ai_run, 13, NULL}, {ai_run, 13, NULL} }; -mmove_t floater_move_run = {FRAME_stand101, FRAME_stand152, floater_frames_run, NULL}; -void floater_run (edict_t *self) +mmove_t floater_move_run = { + FRAME_stand101, + FRAME_stand152, + floater_frames_run, + NULL +}; + +void +floater_run(edict_t *self) +{ + if (!self) + { + return; + } + if (self->monsterinfo.aiflags & AI_STAND_GROUND) + { self->monsterinfo.currentmove = &floater_move_stand1; + } else + { self->monsterinfo.currentmove = &floater_move_run; + } } -void floater_walk (edict_t *self) -{ +void +floater_walk(edict_t *self) +{ + if (!self) + { + return; + } + self->monsterinfo.currentmove = &floater_move_walk; } -void floater_wham (edict_t *self) +void +floater_wham(edict_t *self) { - static vec3_t aim = {MELEE_DISTANCE, 0, 0}; - gi.sound (self, CHAN_WEAPON, sound_attack3, 1, ATTN_NORM, 0); - fire_hit (self, aim, 5 + rand() % 6, -50); + static vec3_t aim = {MELEE_DISTANCE, 0, 0}; + + gi.sound(self, CHAN_WEAPON, sound_attack3, 1, ATTN_NORM, 0); + fire_hit(self, aim, 5 + rand() % 6, -50); } -void floater_zap (edict_t *self) +void +floater_zap(edict_t *self) { - vec3_t forward, right; - vec3_t origin; - vec3_t dir; - vec3_t offset; + vec3_t forward, right; + vec3_t origin; + vec3_t dir; + vec3_t offset; + + if (!self) + { + return; + } + + VectorSubtract(self->enemy->s.origin, self->s.origin, dir); - VectorSubtract (self->enemy->s.origin, self->s.origin, dir); + AngleVectors(self->s.angles, forward, right, NULL); + VectorSet(offset, 18.5, -0.9, 10); + G_ProjectSource(self->s.origin, offset, forward, right, origin); - AngleVectors (self->s.angles, forward, right, NULL); - //FIXME use a flash and replace these two lines with the commented one - VectorSet (offset, 18.5, -0.9, 10); - G_ProjectSource (self->s.origin, offset, forward, right, origin); + gi.sound(self, CHAN_WEAPON, sound_attack2, 1, ATTN_NORM, 0); - gi.sound (self, CHAN_WEAPON, sound_attack2, 1, ATTN_NORM, 0); + gi.WriteByte(svc_temp_entity); + gi.WriteByte(TE_SPLASH); + gi.WriteByte(32); + gi.WritePosition(origin); + gi.WriteDir(dir); + gi.WriteByte(1); /* sparks */ + gi.multicast(origin, MULTICAST_PVS); - //FIXME use the flash, Luke - gi.WriteByte (svc_temp_entity); - gi.WriteByte (TE_SPLASH); - gi.WriteByte (32); - gi.WritePosition (origin); - gi.WriteDir (dir); - gi.WriteByte (1); //sparks - gi.multicast (origin, MULTICAST_PVS); - - T_Damage (self->enemy, self, self, dir, self->enemy->s.origin, vec3_origin, 5 + rand() % 6, -10, DAMAGE_ENERGY, MOD_UNKNOWN); + T_Damage(self->enemy, self, self, dir, self->enemy->s.origin, + vec3_origin, 5 + rand() % 6, -10, DAMAGE_ENERGY, + MOD_UNKNOWN); } -void floater_attack(edict_t *self) -{ +void +floater_attack(edict_t *self) +{ + if (!self) + { + return; + } + self->monsterinfo.currentmove = &floater_move_attack1; } - -void floater_melee(edict_t *self) -{ - if (random() < 0.5) +void +floater_melee(edict_t *self) +{ + if (!self) + { + return; + } + + if (random() < 0.5) + { self->monsterinfo.currentmove = &floater_move_attack3; + } else + { self->monsterinfo.currentmove = &floater_move_attack2; + } } - -void floater_pain (edict_t *self, edict_t *other, float kick, int damage) +void +floater_pain(edict_t *self, edict_t *other /* unused */, + float kick /* unused */, int damage) { - int n; - + int n; + + 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; + if (skill->value == 3) - return; // no pain anims in nightmare + { + return; /* no pain anims in nightmare */ + } n = (rand() + 1) % 3; + if (n == 0) { - gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0); + gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0); self->monsterinfo.currentmove = &floater_move_pain1; } else { - gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0); + gi.sound(self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0); self->monsterinfo.currentmove = &floater_move_pain2; } } -void floater_dead (edict_t *self) -{ - VectorSet (self->mins, -16, -16, -24); - VectorSet (self->maxs, 16, 16, -8); +void +floater_dead(edict_t *self) +{ + if (!self) + { + return; + } + + VectorSet(self->mins, -16, -16, -24); + VectorSet(self->maxs, 16, 16, -8); self->movetype = MOVETYPE_TOSS; self->svflags |= SVF_DEADMONSTER; self->nextthink = 0; - gi.linkentity (self); + gi.linkentity(self); } -void floater_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) -{ - gi.sound (self, CHAN_VOICE, sound_death1, 1, ATTN_NORM, 0); +void +floater_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_death1, 1, ATTN_NORM, 0); BecomeExplosion1(self); } -/*QUAKED monster_floater (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight -*/ -void SP_monster_floater (edict_t *self) -{ +/* + * QUAKED monster_floater (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight + */ +void +SP_monster_floater(edict_t *self) +{ + if (!self) + { + return; + } + if (deathmatch->value) { - G_FreeEdict (self); + G_FreeEdict(self); return; } - sound_attack2 = gi.soundindex ("floater/fltatck2.wav"); - sound_attack3 = gi.soundindex ("floater/fltatck3.wav"); - sound_death1 = gi.soundindex ("floater/fltdeth1.wav"); - sound_idle = gi.soundindex ("floater/fltidle1.wav"); - sound_pain1 = gi.soundindex ("floater/fltpain1.wav"); - sound_pain2 = gi.soundindex ("floater/fltpain2.wav"); - sound_sight = gi.soundindex ("floater/fltsght1.wav"); + sound_attack2 = gi.soundindex("floater/fltatck2.wav"); + sound_attack3 = gi.soundindex("floater/fltatck3.wav"); + sound_death1 = gi.soundindex("floater/fltdeth1.wav"); + sound_idle = gi.soundindex("floater/fltidle1.wav"); + sound_pain1 = gi.soundindex("floater/fltpain1.wav"); + sound_pain2 = gi.soundindex("floater/fltpain2.wav"); + sound_sight = gi.soundindex("floater/fltsght1.wav"); - gi.soundindex ("floater/fltatck1.wav"); + gi.soundindex("floater/fltatck1.wav"); - self->s.sound = gi.soundindex ("floater/fltsrch1.wav"); + self->s.sound = gi.soundindex("floater/fltsrch1.wav"); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; - self->s.modelindex = gi.modelindex ("models/monsters/float/tris.md2"); - VectorSet (self->mins, -24, -24, -24); - VectorSet (self->maxs, 24, 24, 32); + self->s.modelindex = gi.modelindex("models/monsters/float/tris.md2"); + VectorSet(self->mins, -24, -24, -24); + VectorSet(self->maxs, 24, 24, 32); self->health = 200; self->gib_health = -80; @@ -647,15 +820,19 @@ void SP_monster_floater (edict_t *self) self->monsterinfo.sight = floater_sight; self->monsterinfo.idle = floater_idle; - gi.linkentity (self); + gi.linkentity(self); - if (random() <= 0.5) - self->monsterinfo.currentmove = &floater_move_stand1; + if (random() <= 0.5) + { + self->monsterinfo.currentmove = &floater_move_stand1; + } else - self->monsterinfo.currentmove = &floater_move_stand2; - + { + self->monsterinfo.currentmove = &floater_move_stand2; + } + self->monsterinfo.scale = MODEL_SCALE; - flymonster_start (self); + flymonster_start(self); } diff --git a/src/game/baseq2/monster/float/float.h b/src/game/baseq2/monster/float/float.h index 453e5dc4..8b4e7a34 100644 --- a/src/game/baseq2/monster/float/float.h +++ b/src/game/baseq2/monster/float/float.h @@ -1,273 +1,277 @@ /* -Copyright (C) 1997-2001 Id Software, Inc. + * Copyright (C) 1997-2001 Id Software, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * ======================================================================= + * + * Mechanic animations. + * + * ======================================================================= + */ -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +#define FRAME_actvat01 0 +#define FRAME_actvat02 1 +#define FRAME_actvat03 2 +#define FRAME_actvat04 3 +#define FRAME_actvat05 4 +#define FRAME_actvat06 5 +#define FRAME_actvat07 6 +#define FRAME_actvat08 7 +#define FRAME_actvat09 8 +#define FRAME_actvat10 9 +#define FRAME_actvat11 10 +#define FRAME_actvat12 11 +#define FRAME_actvat13 12 +#define FRAME_actvat14 13 +#define FRAME_actvat15 14 +#define FRAME_actvat16 15 +#define FRAME_actvat17 16 +#define FRAME_actvat18 17 +#define FRAME_actvat19 18 +#define FRAME_actvat20 19 +#define FRAME_actvat21 20 +#define FRAME_actvat22 21 +#define FRAME_actvat23 22 +#define FRAME_actvat24 23 +#define FRAME_actvat25 24 +#define FRAME_actvat26 25 +#define FRAME_actvat27 26 +#define FRAME_actvat28 27 +#define FRAME_actvat29 28 +#define FRAME_actvat30 29 +#define FRAME_actvat31 30 +#define FRAME_attak101 31 +#define FRAME_attak102 32 +#define FRAME_attak103 33 +#define FRAME_attak104 34 +#define FRAME_attak105 35 +#define FRAME_attak106 36 +#define FRAME_attak107 37 +#define FRAME_attak108 38 +#define FRAME_attak109 39 +#define FRAME_attak110 40 +#define FRAME_attak111 41 +#define FRAME_attak112 42 +#define FRAME_attak113 43 +#define FRAME_attak114 44 +#define FRAME_attak201 45 +#define FRAME_attak202 46 +#define FRAME_attak203 47 +#define FRAME_attak204 48 +#define FRAME_attak205 49 +#define FRAME_attak206 50 +#define FRAME_attak207 51 +#define FRAME_attak208 52 +#define FRAME_attak209 53 +#define FRAME_attak210 54 +#define FRAME_attak211 55 +#define FRAME_attak212 56 +#define FRAME_attak213 57 +#define FRAME_attak214 58 +#define FRAME_attak215 59 +#define FRAME_attak216 60 +#define FRAME_attak217 61 +#define FRAME_attak218 62 +#define FRAME_attak219 63 +#define FRAME_attak220 64 +#define FRAME_attak221 65 +#define FRAME_attak222 66 +#define FRAME_attak223 67 +#define FRAME_attak224 68 +#define FRAME_attak225 69 +#define FRAME_attak301 70 +#define FRAME_attak302 71 +#define FRAME_attak303 72 +#define FRAME_attak304 73 +#define FRAME_attak305 74 +#define FRAME_attak306 75 +#define FRAME_attak307 76 +#define FRAME_attak308 77 +#define FRAME_attak309 78 +#define FRAME_attak310 79 +#define FRAME_attak311 80 +#define FRAME_attak312 81 +#define FRAME_attak313 82 +#define FRAME_attak314 83 +#define FRAME_attak315 84 +#define FRAME_attak316 85 +#define FRAME_attak317 86 +#define FRAME_attak318 87 +#define FRAME_attak319 88 +#define FRAME_attak320 89 +#define FRAME_attak321 90 +#define FRAME_attak322 91 +#define FRAME_attak323 92 +#define FRAME_attak324 93 +#define FRAME_attak325 94 +#define FRAME_attak326 95 +#define FRAME_attak327 96 +#define FRAME_attak328 97 +#define FRAME_attak329 98 +#define FRAME_attak330 99 +#define FRAME_attak331 100 +#define FRAME_attak332 101 +#define FRAME_attak333 102 +#define FRAME_attak334 103 +#define FRAME_death01 104 +#define FRAME_death02 105 +#define FRAME_death03 106 +#define FRAME_death04 107 +#define FRAME_death05 108 +#define FRAME_death06 109 +#define FRAME_death07 110 +#define FRAME_death08 111 +#define FRAME_death09 112 +#define FRAME_death10 113 +#define FRAME_death11 114 +#define FRAME_death12 115 +#define FRAME_death13 116 +#define FRAME_pain101 117 +#define FRAME_pain102 118 +#define FRAME_pain103 119 +#define FRAME_pain104 120 +#define FRAME_pain105 121 +#define FRAME_pain106 122 +#define FRAME_pain107 123 +#define FRAME_pain201 124 +#define FRAME_pain202 125 +#define FRAME_pain203 126 +#define FRAME_pain204 127 +#define FRAME_pain205 128 +#define FRAME_pain206 129 +#define FRAME_pain207 130 +#define FRAME_pain208 131 +#define FRAME_pain301 132 +#define FRAME_pain302 133 +#define FRAME_pain303 134 +#define FRAME_pain304 135 +#define FRAME_pain305 136 +#define FRAME_pain306 137 +#define FRAME_pain307 138 +#define FRAME_pain308 139 +#define FRAME_pain309 140 +#define FRAME_pain310 141 +#define FRAME_pain311 142 +#define FRAME_pain312 143 +#define FRAME_stand101 144 +#define FRAME_stand102 145 +#define FRAME_stand103 146 +#define FRAME_stand104 147 +#define FRAME_stand105 148 +#define FRAME_stand106 149 +#define FRAME_stand107 150 +#define FRAME_stand108 151 +#define FRAME_stand109 152 +#define FRAME_stand110 153 +#define FRAME_stand111 154 +#define FRAME_stand112 155 +#define FRAME_stand113 156 +#define FRAME_stand114 157 +#define FRAME_stand115 158 +#define FRAME_stand116 159 +#define FRAME_stand117 160 +#define FRAME_stand118 161 +#define FRAME_stand119 162 +#define FRAME_stand120 163 +#define FRAME_stand121 164 +#define FRAME_stand122 165 +#define FRAME_stand123 166 +#define FRAME_stand124 167 +#define FRAME_stand125 168 +#define FRAME_stand126 169 +#define FRAME_stand127 170 +#define FRAME_stand128 171 +#define FRAME_stand129 172 +#define FRAME_stand130 173 +#define FRAME_stand131 174 +#define FRAME_stand132 175 +#define FRAME_stand133 176 +#define FRAME_stand134 177 +#define FRAME_stand135 178 +#define FRAME_stand136 179 +#define FRAME_stand137 180 +#define FRAME_stand138 181 +#define FRAME_stand139 182 +#define FRAME_stand140 183 +#define FRAME_stand141 184 +#define FRAME_stand142 185 +#define FRAME_stand143 186 +#define FRAME_stand144 187 +#define FRAME_stand145 188 +#define FRAME_stand146 189 +#define FRAME_stand147 190 +#define FRAME_stand148 191 +#define FRAME_stand149 192 +#define FRAME_stand150 193 +#define FRAME_stand151 194 +#define FRAME_stand152 195 +#define FRAME_stand201 196 +#define FRAME_stand202 197 +#define FRAME_stand203 198 +#define FRAME_stand204 199 +#define FRAME_stand205 200 +#define FRAME_stand206 201 +#define FRAME_stand207 202 +#define FRAME_stand208 203 +#define FRAME_stand209 204 +#define FRAME_stand210 205 +#define FRAME_stand211 206 +#define FRAME_stand212 207 +#define FRAME_stand213 208 +#define FRAME_stand214 209 +#define FRAME_stand215 210 +#define FRAME_stand216 211 +#define FRAME_stand217 212 +#define FRAME_stand218 213 +#define FRAME_stand219 214 +#define FRAME_stand220 215 +#define FRAME_stand221 216 +#define FRAME_stand222 217 +#define FRAME_stand223 218 +#define FRAME_stand224 219 +#define FRAME_stand225 220 +#define FRAME_stand226 221 +#define FRAME_stand227 222 +#define FRAME_stand228 223 +#define FRAME_stand229 224 +#define FRAME_stand230 225 +#define FRAME_stand231 226 +#define FRAME_stand232 227 +#define FRAME_stand233 228 +#define FRAME_stand234 229 +#define FRAME_stand235 230 +#define FRAME_stand236 231 +#define FRAME_stand237 232 +#define FRAME_stand238 233 +#define FRAME_stand239 234 +#define FRAME_stand240 235 +#define FRAME_stand241 236 +#define FRAME_stand242 237 +#define FRAME_stand243 238 +#define FRAME_stand244 239 +#define FRAME_stand245 240 +#define FRAME_stand246 241 +#define FRAME_stand247 242 +#define FRAME_stand248 243 +#define FRAME_stand249 244 +#define FRAME_stand250 245 +#define FRAME_stand251 246 +#define FRAME_stand252 247 -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// G:\quake2\baseq2\models/monsters/float - -// This file generated by ModelGen - Do NOT Modify - -#define FRAME_actvat01 0 -#define FRAME_actvat02 1 -#define FRAME_actvat03 2 -#define FRAME_actvat04 3 -#define FRAME_actvat05 4 -#define FRAME_actvat06 5 -#define FRAME_actvat07 6 -#define FRAME_actvat08 7 -#define FRAME_actvat09 8 -#define FRAME_actvat10 9 -#define FRAME_actvat11 10 -#define FRAME_actvat12 11 -#define FRAME_actvat13 12 -#define FRAME_actvat14 13 -#define FRAME_actvat15 14 -#define FRAME_actvat16 15 -#define FRAME_actvat17 16 -#define FRAME_actvat18 17 -#define FRAME_actvat19 18 -#define FRAME_actvat20 19 -#define FRAME_actvat21 20 -#define FRAME_actvat22 21 -#define FRAME_actvat23 22 -#define FRAME_actvat24 23 -#define FRAME_actvat25 24 -#define FRAME_actvat26 25 -#define FRAME_actvat27 26 -#define FRAME_actvat28 27 -#define FRAME_actvat29 28 -#define FRAME_actvat30 29 -#define FRAME_actvat31 30 -#define FRAME_attak101 31 -#define FRAME_attak102 32 -#define FRAME_attak103 33 -#define FRAME_attak104 34 -#define FRAME_attak105 35 -#define FRAME_attak106 36 -#define FRAME_attak107 37 -#define FRAME_attak108 38 -#define FRAME_attak109 39 -#define FRAME_attak110 40 -#define FRAME_attak111 41 -#define FRAME_attak112 42 -#define FRAME_attak113 43 -#define FRAME_attak114 44 -#define FRAME_attak201 45 -#define FRAME_attak202 46 -#define FRAME_attak203 47 -#define FRAME_attak204 48 -#define FRAME_attak205 49 -#define FRAME_attak206 50 -#define FRAME_attak207 51 -#define FRAME_attak208 52 -#define FRAME_attak209 53 -#define FRAME_attak210 54 -#define FRAME_attak211 55 -#define FRAME_attak212 56 -#define FRAME_attak213 57 -#define FRAME_attak214 58 -#define FRAME_attak215 59 -#define FRAME_attak216 60 -#define FRAME_attak217 61 -#define FRAME_attak218 62 -#define FRAME_attak219 63 -#define FRAME_attak220 64 -#define FRAME_attak221 65 -#define FRAME_attak222 66 -#define FRAME_attak223 67 -#define FRAME_attak224 68 -#define FRAME_attak225 69 -#define FRAME_attak301 70 -#define FRAME_attak302 71 -#define FRAME_attak303 72 -#define FRAME_attak304 73 -#define FRAME_attak305 74 -#define FRAME_attak306 75 -#define FRAME_attak307 76 -#define FRAME_attak308 77 -#define FRAME_attak309 78 -#define FRAME_attak310 79 -#define FRAME_attak311 80 -#define FRAME_attak312 81 -#define FRAME_attak313 82 -#define FRAME_attak314 83 -#define FRAME_attak315 84 -#define FRAME_attak316 85 -#define FRAME_attak317 86 -#define FRAME_attak318 87 -#define FRAME_attak319 88 -#define FRAME_attak320 89 -#define FRAME_attak321 90 -#define FRAME_attak322 91 -#define FRAME_attak323 92 -#define FRAME_attak324 93 -#define FRAME_attak325 94 -#define FRAME_attak326 95 -#define FRAME_attak327 96 -#define FRAME_attak328 97 -#define FRAME_attak329 98 -#define FRAME_attak330 99 -#define FRAME_attak331 100 -#define FRAME_attak332 101 -#define FRAME_attak333 102 -#define FRAME_attak334 103 -#define FRAME_death01 104 -#define FRAME_death02 105 -#define FRAME_death03 106 -#define FRAME_death04 107 -#define FRAME_death05 108 -#define FRAME_death06 109 -#define FRAME_death07 110 -#define FRAME_death08 111 -#define FRAME_death09 112 -#define FRAME_death10 113 -#define FRAME_death11 114 -#define FRAME_death12 115 -#define FRAME_death13 116 -#define FRAME_pain101 117 -#define FRAME_pain102 118 -#define FRAME_pain103 119 -#define FRAME_pain104 120 -#define FRAME_pain105 121 -#define FRAME_pain106 122 -#define FRAME_pain107 123 -#define FRAME_pain201 124 -#define FRAME_pain202 125 -#define FRAME_pain203 126 -#define FRAME_pain204 127 -#define FRAME_pain205 128 -#define FRAME_pain206 129 -#define FRAME_pain207 130 -#define FRAME_pain208 131 -#define FRAME_pain301 132 -#define FRAME_pain302 133 -#define FRAME_pain303 134 -#define FRAME_pain304 135 -#define FRAME_pain305 136 -#define FRAME_pain306 137 -#define FRAME_pain307 138 -#define FRAME_pain308 139 -#define FRAME_pain309 140 -#define FRAME_pain310 141 -#define FRAME_pain311 142 -#define FRAME_pain312 143 -#define FRAME_stand101 144 -#define FRAME_stand102 145 -#define FRAME_stand103 146 -#define FRAME_stand104 147 -#define FRAME_stand105 148 -#define FRAME_stand106 149 -#define FRAME_stand107 150 -#define FRAME_stand108 151 -#define FRAME_stand109 152 -#define FRAME_stand110 153 -#define FRAME_stand111 154 -#define FRAME_stand112 155 -#define FRAME_stand113 156 -#define FRAME_stand114 157 -#define FRAME_stand115 158 -#define FRAME_stand116 159 -#define FRAME_stand117 160 -#define FRAME_stand118 161 -#define FRAME_stand119 162 -#define FRAME_stand120 163 -#define FRAME_stand121 164 -#define FRAME_stand122 165 -#define FRAME_stand123 166 -#define FRAME_stand124 167 -#define FRAME_stand125 168 -#define FRAME_stand126 169 -#define FRAME_stand127 170 -#define FRAME_stand128 171 -#define FRAME_stand129 172 -#define FRAME_stand130 173 -#define FRAME_stand131 174 -#define FRAME_stand132 175 -#define FRAME_stand133 176 -#define FRAME_stand134 177 -#define FRAME_stand135 178 -#define FRAME_stand136 179 -#define FRAME_stand137 180 -#define FRAME_stand138 181 -#define FRAME_stand139 182 -#define FRAME_stand140 183 -#define FRAME_stand141 184 -#define FRAME_stand142 185 -#define FRAME_stand143 186 -#define FRAME_stand144 187 -#define FRAME_stand145 188 -#define FRAME_stand146 189 -#define FRAME_stand147 190 -#define FRAME_stand148 191 -#define FRAME_stand149 192 -#define FRAME_stand150 193 -#define FRAME_stand151 194 -#define FRAME_stand152 195 -#define FRAME_stand201 196 -#define FRAME_stand202 197 -#define FRAME_stand203 198 -#define FRAME_stand204 199 -#define FRAME_stand205 200 -#define FRAME_stand206 201 -#define FRAME_stand207 202 -#define FRAME_stand208 203 -#define FRAME_stand209 204 -#define FRAME_stand210 205 -#define FRAME_stand211 206 -#define FRAME_stand212 207 -#define FRAME_stand213 208 -#define FRAME_stand214 209 -#define FRAME_stand215 210 -#define FRAME_stand216 211 -#define FRAME_stand217 212 -#define FRAME_stand218 213 -#define FRAME_stand219 214 -#define FRAME_stand220 215 -#define FRAME_stand221 216 -#define FRAME_stand222 217 -#define FRAME_stand223 218 -#define FRAME_stand224 219 -#define FRAME_stand225 220 -#define FRAME_stand226 221 -#define FRAME_stand227 222 -#define FRAME_stand228 223 -#define FRAME_stand229 224 -#define FRAME_stand230 225 -#define FRAME_stand231 226 -#define FRAME_stand232 227 -#define FRAME_stand233 228 -#define FRAME_stand234 229 -#define FRAME_stand235 230 -#define FRAME_stand236 231 -#define FRAME_stand237 232 -#define FRAME_stand238 233 -#define FRAME_stand239 234 -#define FRAME_stand240 235 -#define FRAME_stand241 236 -#define FRAME_stand242 237 -#define FRAME_stand243 238 -#define FRAME_stand244 239 -#define FRAME_stand245 240 -#define FRAME_stand246 241 -#define FRAME_stand247 242 -#define FRAME_stand248 243 -#define FRAME_stand249 244 -#define FRAME_stand250 245 -#define FRAME_stand251 246 -#define FRAME_stand252 247 - -#define MODEL_SCALE 1.000000 +#define MODEL_SCALE 1.000000