From c08a7e1bbe1824bc5beb16b2edc8c8f23c74bd71 Mon Sep 17 00:00:00 2001 From: Yamagi Burmeister Date: Fri, 7 Oct 2011 07:23:31 +0000 Subject: [PATCH] Rework brain and add sanity checks --- src/game/baseq2/monster/boss3/boss32.h | 23 +- src/game/baseq2/monster/brain/brain.c | 1083 ++++++++++++++---------- src/game/baseq2/monster/brain/brain.h | 491 +++++------ 3 files changed, 916 insertions(+), 681 deletions(-) diff --git a/src/game/baseq2/monster/boss3/boss32.h b/src/game/baseq2/monster/boss3/boss32.h index 3e1ccf8c..b17b5122 100644 --- a/src/game/baseq2/monster/boss3/boss32.h +++ b/src/game/baseq2/monster/boss3/boss32.h @@ -1,25 +1,28 @@ /* * 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 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 + * 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. + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. * + * ======================================================================= + * + * Final boss, stage 2 (makron). + * + * ======================================================================= */ -/* G:\quake2\baseq2\models/monsters/boss3/rider */ - -/* This file generated by ModelGen - Do NOT Modify */ #define FRAME_attak101 0 #define FRAME_attak102 1 diff --git a/src/game/baseq2/monster/brain/brain.c b/src/game/baseq2/monster/brain/brain.c index 04487ae5..2f41f7e0 100644 --- a/src/game/baseq2/monster/brain/brain.c +++ b/src/game/baseq2/monster/brain/brain.c @@ -1,417 +1,569 @@ /* -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. - -*/ -/* -============================================================================== - -brain - -============================================================================== -*/ + * 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. + * + * ======================================================================= + * + * Brain. + * + * ======================================================================= + */ #include "../../header/local.h" #include "brain.h" +static int sound_chest_open; +static int sound_tentacles_extend; +static int sound_tentacles_retract; +static int sound_death; +static int sound_idle1; +static int sound_idle2; +static int sound_idle3; +static int sound_pain1; +static int sound_pain2; +static int sound_sight; +static int sound_search; +static int sound_melee1; +static int sound_melee2; +static int sound_melee3; -static int sound_chest_open; -static int sound_tentacles_extend; -static int sound_tentacles_retract; -static int sound_death; -static int sound_idle1; -static int sound_idle2; -static int sound_idle3; -static int sound_pain1; -static int sound_pain2; -static int sound_sight; -static int sound_search; -static int sound_melee1; -static int sound_melee2; -static int sound_melee3; - - -void brain_sight (edict_t *self, edict_t *other) -{ - gi.sound (self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0); +void +brain_sight(edict_t *self, edict_t *other /* unused */) +{ + if (!self) + { + return; + } + + gi.sound(self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0); } -void brain_search (edict_t *self) -{ - gi.sound (self, CHAN_VOICE, sound_search, 1, ATTN_NORM, 0); +void +brain_search(edict_t *self) +{ + if (!self) + { + return; + } + + gi.sound(self, CHAN_VOICE, sound_search, 1, ATTN_NORM, 0); } +void brain_run(edict_t *self); +void brain_dead(edict_t *self); -void brain_run (edict_t *self); -void brain_dead (edict_t *self); +mframe_t brain_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}, -// -// STAND -// - -mframe_t brain_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}, - {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 brain_move_stand = {FRAME_stand01, FRAME_stand30, brain_frames_stand, NULL}; -void brain_stand (edict_t *self) +mmove_t brain_move_stand = { + FRAME_stand01, + FRAME_stand30, + brain_frames_stand, + NULL +}; + +void +brain_stand(edict_t *self) +{ + if (!self) + { + return; + } + self->monsterinfo.currentmove = &brain_move_stand; } +mframe_t brain_frames_idle[] = { + {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}, -// -// IDLE -// + {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}, -mframe_t brain_frames_idle [] = -{ - {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} + {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 brain_move_idle = {FRAME_stand31, FRAME_stand60, brain_frames_idle, brain_stand}; -void brain_idle (edict_t *self) +mmove_t brain_move_idle = { - gi.sound (self, CHAN_AUTO, sound_idle3, 1, ATTN_IDLE, 0); + FRAME_stand31, + FRAME_stand60, + brain_frames_idle, + brain_stand +}; + +void +brain_idle(edict_t *self) +{ + if (!self) + { + return; + } + + gi.sound(self, CHAN_AUTO, sound_idle3, 1, ATTN_IDLE, 0); self->monsterinfo.currentmove = &brain_move_idle; } - -// -// WALK -// -mframe_t brain_frames_walk1 [] = -{ - {ai_walk, 7, NULL}, - {ai_walk, 2, NULL}, - {ai_walk, 3, NULL}, - {ai_walk, 3, NULL}, - {ai_walk, 1, NULL}, - {ai_walk, 0, NULL}, - {ai_walk, 0, NULL}, - {ai_walk, 9, NULL}, - {ai_walk, -4, NULL}, - {ai_walk, -1, NULL}, - {ai_walk, 2, NULL} +mframe_t brain_frames_walk1[] = { + {ai_walk, 7, NULL}, + {ai_walk, 2, NULL}, + {ai_walk, 3, NULL}, + {ai_walk, 3, NULL}, + {ai_walk, 1, NULL}, + {ai_walk, 0, NULL}, + {ai_walk, 0, NULL}, + {ai_walk, 9, NULL}, + {ai_walk, -4, NULL}, + {ai_walk, -1, NULL}, + {ai_walk, 2, NULL} }; -mmove_t brain_move_walk1 = {FRAME_walk101, FRAME_walk111, brain_frames_walk1, NULL}; - -void brain_walk (edict_t *self) +mmove_t brain_move_walk1 = { - self->monsterinfo.currentmove = &brain_move_walk1; + FRAME_walk101, + FRAME_walk111, + brain_frames_walk1, + NULL +}; + +void +brain_walk(edict_t *self) +{ + if (!self) + { + return; + } + + self->monsterinfo.currentmove = &brain_move_walk1; } - - -mframe_t brain_frames_defense [] = -{ - {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 brain_frames_defense[] = { + {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 brain_move_defense = {FRAME_defens01, FRAME_defens08, brain_frames_defense, NULL}; -mframe_t brain_frames_pain3 [] = +mmove_t brain_move_defense = { - {ai_move, -2, NULL}, - {ai_move, 2, NULL}, - {ai_move, 1, NULL}, - {ai_move, 3, NULL}, - {ai_move, 0, NULL}, - {ai_move, -4, NULL} + FRAME_defens01, + FRAME_defens08, + brain_frames_defense, + NULL }; -mmove_t brain_move_pain3 = {FRAME_pain301, FRAME_pain306, brain_frames_pain3, brain_run}; -mframe_t brain_frames_pain2 [] = -{ - {ai_move, -2, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 3, NULL}, - {ai_move, 1, NULL}, - {ai_move, -2, NULL} +mframe_t brain_frames_pain3[] = { + {ai_move, -2, NULL}, + {ai_move, 2, NULL}, + {ai_move, 1, NULL}, + {ai_move, 3, NULL}, + {ai_move, 0, NULL}, + {ai_move, -4, NULL} }; -mmove_t brain_move_pain2 = {FRAME_pain201, FRAME_pain208, brain_frames_pain2, brain_run}; -mframe_t brain_frames_pain1 [] = +mmove_t brain_move_pain3 = { - {ai_move, -6, NULL}, - {ai_move, -2, NULL}, - {ai_move, -6, 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, 2, NULL}, - {ai_move, 0, NULL}, - {ai_move, 2, NULL}, - {ai_move, 1, NULL}, - {ai_move, 7, NULL}, - {ai_move, 0, NULL}, - {ai_move, 3, NULL}, - {ai_move, -1, NULL} + FRAME_pain301, + FRAME_pain306, + brain_frames_pain3, + brain_run }; -mmove_t brain_move_pain1 = {FRAME_pain101, FRAME_pain121, brain_frames_pain1, brain_run}; +mframe_t brain_frames_pain2[] = { + {ai_move, -2, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 3, NULL}, + {ai_move, 1, NULL}, + {ai_move, -2, NULL} +}; -// -// DUCK -// - -void brain_duck_down (edict_t *self) +mmove_t brain_move_pain2 = { - if (self->monsterinfo.aiflags & AI_DUCKED) + FRAME_pain201, + FRAME_pain208, + brain_frames_pain2, + brain_run +}; + +mframe_t brain_frames_pain1[] = { + {ai_move, -6, NULL}, + {ai_move, -2, NULL}, + {ai_move, -6, 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, 2, NULL}, + {ai_move, 0, NULL}, + {ai_move, 2, NULL}, + {ai_move, 1, NULL}, + {ai_move, 7, NULL}, + {ai_move, 0, NULL}, + {ai_move, 3, NULL}, + {ai_move, -1, NULL} +}; + +mmove_t brain_move_pain1 = +{ + FRAME_pain101, + FRAME_pain121, + brain_frames_pain1, + brain_run +}; + +void +brain_duck_down(edict_t *self) +{ + if (!self) + { return; + } + + if (self->monsterinfo.aiflags & AI_DUCKED) + { + return; + } + self->monsterinfo.aiflags |= AI_DUCKED; self->maxs[2] -= 32; self->takedamage = DAMAGE_YES; - gi.linkentity (self); + gi.linkentity(self); } -void brain_duck_hold (edict_t *self) -{ +void +brain_duck_hold(edict_t *self) +{ + if (!self) + { + return; + } + if (level.time >= self->monsterinfo.pausetime) + { self->monsterinfo.aiflags &= ~AI_HOLD_FRAME; + } else + { self->monsterinfo.aiflags |= AI_HOLD_FRAME; + } } -void brain_duck_up (edict_t *self) -{ +void +brain_duck_up(edict_t *self) +{ + if (!self) + { + return; + } + self->monsterinfo.aiflags &= ~AI_DUCKED; self->maxs[2] += 32; self->takedamage = DAMAGE_AIM; - gi.linkentity (self); + gi.linkentity(self); } -mframe_t brain_frames_duck [] = -{ - {ai_move, 0, NULL}, - {ai_move, -2, brain_duck_down}, - {ai_move, 17, brain_duck_hold}, - {ai_move, -3, NULL}, - {ai_move, -1, brain_duck_up}, - {ai_move, -5, NULL}, - {ai_move, -6, NULL}, - {ai_move, -6, NULL} +mframe_t brain_frames_duck[] = { + {ai_move, 0, NULL}, + {ai_move, -2, brain_duck_down}, + {ai_move, 17, brain_duck_hold}, + {ai_move, -3, NULL}, + {ai_move, -1, brain_duck_up}, + {ai_move, -5, NULL}, + {ai_move, -6, NULL}, + {ai_move, -6, NULL} }; -mmove_t brain_move_duck = {FRAME_duck01, FRAME_duck08, brain_frames_duck, brain_run}; -void brain_dodge (edict_t *self, edict_t *attacker, float eta) +mmove_t brain_move_duck = { - if (random() > 0.25) + FRAME_duck01, + FRAME_duck08, + brain_frames_duck, + brain_run +}; + +void +brain_dodge(edict_t *self, edict_t *attacker, float eta) +{ + if (!self || !attacker) + { return; + } + + if (random() > 0.25) + { + return; + } if (!self->enemy) + { self->enemy = attacker; + } self->monsterinfo.pausetime = level.time + eta + 0.5; self->monsterinfo.currentmove = &brain_move_duck; } - -mframe_t brain_frames_death2 [] = -{ - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, 9, NULL}, - {ai_move, 0, NULL} +mframe_t brain_frames_death2[] = { + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, 9, NULL}, + {ai_move, 0, NULL} }; -mmove_t brain_move_death2 = {FRAME_death201, FRAME_death205, brain_frames_death2, brain_dead}; -mframe_t brain_frames_death1 [] = +mmove_t brain_move_death2 = { - {ai_move, 0, NULL}, - {ai_move, 0, NULL}, - {ai_move, -2, NULL}, - {ai_move, 9, 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} + FRAME_death201, + FRAME_death205, + brain_frames_death2, + brain_dead }; -mmove_t brain_move_death1 = {FRAME_death101, FRAME_death118, brain_frames_death1, brain_dead}; - -// -// MELEE -// - -void brain_swing_right (edict_t *self) -{ - gi.sound (self, CHAN_BODY, sound_melee1, 1, ATTN_NORM, 0); -} - -void brain_hit_right (edict_t *self) -{ - vec3_t aim; - - VectorSet (aim, MELEE_DISTANCE, self->maxs[0], 8); - if (fire_hit (self, aim, (15 + (rand() %5)), 40)) - gi.sound (self, CHAN_WEAPON, sound_melee3, 1, ATTN_NORM, 0); -} - -void brain_swing_left (edict_t *self) -{ - gi.sound (self, CHAN_BODY, sound_melee2, 1, ATTN_NORM, 0); -} - -void brain_hit_left (edict_t *self) -{ - vec3_t aim; - - VectorSet (aim, MELEE_DISTANCE, self->mins[0], 8); - if (fire_hit (self, aim, (15 + (rand() %5)), 40)) - gi.sound (self, CHAN_WEAPON, sound_melee3, 1, ATTN_NORM, 0); -} - -mframe_t brain_frames_attack1 [] = -{ - {ai_charge, 8, NULL}, - {ai_charge, 3, NULL}, - {ai_charge, 5, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, -3, brain_swing_right}, - {ai_charge, 0, NULL}, - {ai_charge, -5, NULL}, - {ai_charge, -7, brain_hit_right}, - {ai_charge, 0, NULL}, - {ai_charge, 6, brain_swing_left}, - {ai_charge, 1, NULL}, - {ai_charge, 2, brain_hit_left}, - {ai_charge, -3, NULL}, - {ai_charge, 6, NULL}, - {ai_charge, -1, NULL}, - {ai_charge, -3, NULL}, - {ai_charge, 2, NULL}, - {ai_charge, -11,NULL} +mframe_t brain_frames_death1[] = { + {ai_move, 0, NULL}, + {ai_move, 0, NULL}, + {ai_move, -2, NULL}, + {ai_move, 9, 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 brain_move_attack1 = {FRAME_attak101, FRAME_attak118, brain_frames_attack1, brain_run}; -void brain_chest_open (edict_t *self) +mmove_t brain_move_death1 = { + FRAME_death101, + FRAME_death118, + brain_frames_death1, + brain_dead +}; + +void +brain_swing_right(edict_t *self) +{ + if (!self) + { + return; + } + + gi.sound(self, CHAN_BODY, sound_melee1, 1, ATTN_NORM, 0); +} + +void +brain_hit_right(edict_t *self) +{ + vec3_t aim; + + if (!self) + { + return; + } + + VectorSet(aim, MELEE_DISTANCE, self->maxs[0], 8); + + if (fire_hit(self, aim, (15 + (rand() % 5)), 40)) + { + gi.sound(self, CHAN_WEAPON, sound_melee3, 1, ATTN_NORM, 0); + } +} + +void +brain_swing_left(edict_t *self) +{ + if (!self) + { + return; + } + + gi.sound(self, CHAN_BODY, sound_melee2, 1, ATTN_NORM, 0); +} + +void +brain_hit_left(edict_t *self) +{ + vec3_t aim; + + if (!self) + { + return; + } + + VectorSet(aim, MELEE_DISTANCE, self->mins[0], 8); + + if (fire_hit(self, aim, (15 + (rand() % 5)), 40)) + { + gi.sound(self, CHAN_WEAPON, sound_melee3, 1, ATTN_NORM, 0); + } +} + +mframe_t brain_frames_attack1[] = { + {ai_charge, 8, NULL}, + {ai_charge, 3, NULL}, + {ai_charge, 5, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, -3, brain_swing_right}, + {ai_charge, 0, NULL}, + {ai_charge, -5, NULL}, + {ai_charge, -7, brain_hit_right}, + {ai_charge, 0, NULL}, + {ai_charge, 6, brain_swing_left}, + {ai_charge, 1, NULL}, + {ai_charge, 2, brain_hit_left}, + {ai_charge, -3, NULL}, + {ai_charge, 6, NULL}, + {ai_charge, -1, NULL}, + {ai_charge, -3, NULL}, + {ai_charge, 2, NULL}, + {ai_charge, -11, NULL} +}; + +mmove_t brain_move_attack1 = +{ + FRAME_attak101, + FRAME_attak118, + brain_frames_attack1, + brain_run +}; + +void +brain_chest_open(edict_t *self) +{ + if (!self) + { + return; + } + self->spawnflags &= ~65536; self->monsterinfo.power_armor_type = POWER_ARMOR_NONE; - gi.sound (self, CHAN_BODY, sound_chest_open, 1, ATTN_NORM, 0); + gi.sound(self, CHAN_BODY, sound_chest_open, 1, ATTN_NORM, 0); } -void brain_tentacle_attack (edict_t *self) +void +brain_tentacle_attack(edict_t *self) { - vec3_t aim; + vec3_t aim; + + if (!self) + { + return; + } + + VectorSet(aim, MELEE_DISTANCE, 0, 8); - VectorSet (aim, MELEE_DISTANCE, 0, 8); - if (fire_hit (self, aim, (10 + (rand() %5)), -600) && skill->value > 0) + if (fire_hit(self, aim, (10 + (rand() % 5)), -600) && (skill->value > 0)) + { self->spawnflags |= 65536; - gi.sound (self, CHAN_WEAPON, sound_tentacles_retract, 1, ATTN_NORM, 0); + } + + gi.sound(self, CHAN_WEAPON, sound_tentacles_retract, 1, ATTN_NORM, 0); } -void brain_chest_closed (edict_t *self) -{ +void +brain_chest_closed(edict_t *self) +{ + if (!self) + { + return; + } + self->monsterinfo.power_armor_type = POWER_ARMOR_SCREEN; + if (self->spawnflags & 65536) { self->spawnflags &= ~65536; @@ -419,174 +571,251 @@ void brain_chest_closed (edict_t *self) } } -mframe_t brain_frames_attack2 [] = -{ - {ai_charge, 5, NULL}, - {ai_charge, -4, NULL}, - {ai_charge, -4, NULL}, - {ai_charge, -3, NULL}, - {ai_charge, 0, brain_chest_open}, - {ai_charge, 0, NULL}, - {ai_charge, 13, brain_tentacle_attack}, - {ai_charge, 0, NULL}, - {ai_charge, 2, NULL}, - {ai_charge, 0, NULL}, - {ai_charge, -9, brain_chest_closed}, - {ai_charge, 0, NULL}, - {ai_charge, 4, NULL}, - {ai_charge, 3, NULL}, - {ai_charge, 2, NULL}, - {ai_charge, -3, NULL}, - {ai_charge, -6, NULL} +mframe_t brain_frames_attack2[] = { + {ai_charge, 5, NULL}, + {ai_charge, -4, NULL}, + {ai_charge, -4, NULL}, + {ai_charge, -3, NULL}, + {ai_charge, 0, brain_chest_open}, + {ai_charge, 0, NULL}, + {ai_charge, 13, brain_tentacle_attack}, + {ai_charge, 0, NULL}, + {ai_charge, 2, NULL}, + {ai_charge, 0, NULL}, + {ai_charge, -9, brain_chest_closed}, + {ai_charge, 0, NULL}, + {ai_charge, 4, NULL}, + {ai_charge, 3, NULL}, + {ai_charge, 2, NULL}, + {ai_charge, -3, NULL}, + {ai_charge, -6, NULL} }; -mmove_t brain_move_attack2 = {FRAME_attak201, FRAME_attak217, brain_frames_attack2, brain_run}; -void brain_melee(edict_t *self) +mmove_t brain_move_attack2 = { + FRAME_attak201, + FRAME_attak217, + brain_frames_attack2, + brain_run +}; + +void +brain_melee(edict_t *self) +{ + if (!self) + { + return; + } + if (random() <= 0.5) + { self->monsterinfo.currentmove = &brain_move_attack1; + } else + { self->monsterinfo.currentmove = &brain_move_attack2; + } } - -// -// RUN -// - -mframe_t brain_frames_run [] = -{ - {ai_run, 9, NULL}, - {ai_run, 2, NULL}, - {ai_run, 3, NULL}, - {ai_run, 3, NULL}, - {ai_run, 1, NULL}, - {ai_run, 0, NULL}, - {ai_run, 0, NULL}, - {ai_run, 10, NULL}, - {ai_run, -4, NULL}, - {ai_run, -1, NULL}, - {ai_run, 2, NULL} +mframe_t brain_frames_run[] = { + {ai_run, 9, NULL}, + {ai_run, 2, NULL}, + {ai_run, 3, NULL}, + {ai_run, 3, NULL}, + {ai_run, 1, NULL}, + {ai_run, 0, NULL}, + {ai_run, 0, NULL}, + {ai_run, 10, NULL}, + {ai_run, -4, NULL}, + {ai_run, -1, NULL}, + {ai_run, 2, NULL} }; -mmove_t brain_move_run = {FRAME_walk101, FRAME_walk111, brain_frames_run, NULL}; -void brain_run (edict_t *self) +mmove_t brain_move_run = { + FRAME_walk101, + FRAME_walk111, + brain_frames_run, + NULL +}; + +void +brain_run(edict_t *self) +{ + if (!self) + { + return; + } + self->monsterinfo.power_armor_type = POWER_ARMOR_SCREEN; + if (self->monsterinfo.aiflags & AI_STAND_GROUND) + { self->monsterinfo.currentmove = &brain_move_stand; + } else + { self->monsterinfo.currentmove = &brain_move_run; + } } - -void brain_pain (edict_t *self, edict_t *other, float kick, int damage) +void +brain_pain(edict_t *self, edict_t *other /* unused */, + float kick /* unused */, int damage /* unused */) { - float r; - + float r; + + 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 */ + } r = random(); + if (r < 0.33) { - 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 = &brain_move_pain1; } else if (r < 0.66) { - 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 = &brain_move_pain2; } else { - 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 = &brain_move_pain3; } } -void brain_dead (edict_t *self) -{ - VectorSet (self->mins, -16, -16, -24); - VectorSet (self->maxs, 16, 16, -8); +void +brain_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 brain_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) +void +brain_die(edict_t *self, edict_t *inflictor /* unused */, edict_t *attacker /* unused */, + int damage, vec3_t point /* unused */) { - int n; - + int n; + + if (!self) + { + return; + } + self->s.effects = 0; self->monsterinfo.power_armor_type = POWER_ARMOR_NONE; - // check for gib + /* 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); + 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; -} - -/*QUAKED monster_brain (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight -*/ -void SP_monster_brain (edict_t *self) -{ - if (deathmatch->value) { - G_FreeEdict (self); return; } - sound_chest_open = gi.soundindex ("brain/brnatck1.wav"); - sound_tentacles_extend = gi.soundindex ("brain/brnatck2.wav"); - sound_tentacles_retract = gi.soundindex ("brain/brnatck3.wav"); - sound_death = gi.soundindex ("brain/brndeth1.wav"); - sound_idle1 = gi.soundindex ("brain/brnidle1.wav"); - sound_idle2 = gi.soundindex ("brain/brnidle2.wav"); - sound_idle3 = gi.soundindex ("brain/brnlens1.wav"); - sound_pain1 = gi.soundindex ("brain/brnpain1.wav"); - sound_pain2 = gi.soundindex ("brain/brnpain2.wav"); - sound_sight = gi.soundindex ("brain/brnsght1.wav"); - sound_search = gi.soundindex ("brain/brnsrch1.wav"); - sound_melee1 = gi.soundindex ("brain/melee1.wav"); - sound_melee2 = gi.soundindex ("brain/melee2.wav"); - sound_melee3 = gi.soundindex ("brain/melee3.wav"); + /* 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; + } +} + +/* + * QUAKED monster_brain (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight + */ +void +SP_monster_brain(edict_t *self) +{ + if (!self) + { + return; + } + + if (deathmatch->value) + { + G_FreeEdict(self); + return; + } + + sound_chest_open = gi.soundindex("brain/brnatck1.wav"); + sound_tentacles_extend = gi.soundindex("brain/brnatck2.wav"); + sound_tentacles_retract = gi.soundindex("brain/brnatck3.wav"); + sound_death = gi.soundindex("brain/brndeth1.wav"); + sound_idle1 = gi.soundindex("brain/brnidle1.wav"); + sound_idle2 = gi.soundindex("brain/brnidle2.wav"); + sound_idle3 = gi.soundindex("brain/brnlens1.wav"); + sound_pain1 = gi.soundindex("brain/brnpain1.wav"); + sound_pain2 = gi.soundindex("brain/brnpain2.wav"); + sound_sight = gi.soundindex("brain/brnsght1.wav"); + sound_search = gi.soundindex("brain/brnsrch1.wav"); + sound_melee1 = gi.soundindex("brain/melee1.wav"); + sound_melee2 = gi.soundindex("brain/melee2.wav"); + sound_melee3 = gi.soundindex("brain/melee3.wav"); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; - self->s.modelindex = gi.modelindex ("models/monsters/brain/tris.md2"); - VectorSet (self->mins, -16, -16, -24); - VectorSet (self->maxs, 16, 16, 32); + self->s.modelindex = gi.modelindex("models/monsters/brain/tris.md2"); + VectorSet(self->mins, -16, -16, -24); + VectorSet(self->maxs, 16, 16, 32); self->health = 300; self->gib_health = -150; @@ -607,11 +836,11 @@ void SP_monster_brain (edict_t *self) self->monsterinfo.power_armor_type = POWER_ARMOR_SCREEN; self->monsterinfo.power_armor_power = 100; - gi.linkentity (self); + gi.linkentity(self); - self->monsterinfo.currentmove = &brain_move_stand; + self->monsterinfo.currentmove = &brain_move_stand; self->monsterinfo.scale = MODEL_SCALE; - walkmonster_start (self); + walkmonster_start(self); } diff --git a/src/game/baseq2/monster/brain/brain.h b/src/game/baseq2/monster/brain/brain.h index 99a9ad30..1f80e099 100644 --- a/src/game/baseq2/monster/brain/brain.h +++ b/src/game/baseq2/monster/brain/brain.h @@ -1,247 +1,250 @@ /* -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. + * + * ======================================================================= + * + * Brain 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. +#define FRAME_walk101 0 +#define FRAME_walk102 1 +#define FRAME_walk103 2 +#define FRAME_walk104 3 +#define FRAME_walk105 4 +#define FRAME_walk106 5 +#define FRAME_walk107 6 +#define FRAME_walk108 7 +#define FRAME_walk109 8 +#define FRAME_walk110 9 +#define FRAME_walk111 10 +#define FRAME_walk112 11 +#define FRAME_walk113 12 +#define FRAME_walk201 13 +#define FRAME_walk202 14 +#define FRAME_walk203 15 +#define FRAME_walk204 16 +#define FRAME_walk205 17 +#define FRAME_walk206 18 +#define FRAME_walk207 19 +#define FRAME_walk208 20 +#define FRAME_walk209 21 +#define FRAME_walk210 22 +#define FRAME_walk211 23 +#define FRAME_walk212 24 +#define FRAME_walk213 25 +#define FRAME_walk214 26 +#define FRAME_walk215 27 +#define FRAME_walk216 28 +#define FRAME_walk217 29 +#define FRAME_walk218 30 +#define FRAME_walk219 31 +#define FRAME_walk220 32 +#define FRAME_walk221 33 +#define FRAME_walk222 34 +#define FRAME_walk223 35 +#define FRAME_walk224 36 +#define FRAME_walk225 37 +#define FRAME_walk226 38 +#define FRAME_walk227 39 +#define FRAME_walk228 40 +#define FRAME_walk229 41 +#define FRAME_walk230 42 +#define FRAME_walk231 43 +#define FRAME_walk232 44 +#define FRAME_walk233 45 +#define FRAME_walk234 46 +#define FRAME_walk235 47 +#define FRAME_walk236 48 +#define FRAME_walk237 49 +#define FRAME_walk238 50 +#define FRAME_walk239 51 +#define FRAME_walk240 52 +#define FRAME_attak101 53 +#define FRAME_attak102 54 +#define FRAME_attak103 55 +#define FRAME_attak104 56 +#define FRAME_attak105 57 +#define FRAME_attak106 58 +#define FRAME_attak107 59 +#define FRAME_attak108 60 +#define FRAME_attak109 61 +#define FRAME_attak110 62 +#define FRAME_attak111 63 +#define FRAME_attak112 64 +#define FRAME_attak113 65 +#define FRAME_attak114 66 +#define FRAME_attak115 67 +#define FRAME_attak116 68 +#define FRAME_attak117 69 +#define FRAME_attak118 70 +#define FRAME_attak201 71 +#define FRAME_attak202 72 +#define FRAME_attak203 73 +#define FRAME_attak204 74 +#define FRAME_attak205 75 +#define FRAME_attak206 76 +#define FRAME_attak207 77 +#define FRAME_attak208 78 +#define FRAME_attak209 79 +#define FRAME_attak210 80 +#define FRAME_attak211 81 +#define FRAME_attak212 82 +#define FRAME_attak213 83 +#define FRAME_attak214 84 +#define FRAME_attak215 85 +#define FRAME_attak216 86 +#define FRAME_attak217 87 +#define FRAME_pain101 88 +#define FRAME_pain102 89 +#define FRAME_pain103 90 +#define FRAME_pain104 91 +#define FRAME_pain105 92 +#define FRAME_pain106 93 +#define FRAME_pain107 94 +#define FRAME_pain108 95 +#define FRAME_pain109 96 +#define FRAME_pain110 97 +#define FRAME_pain111 98 +#define FRAME_pain112 99 +#define FRAME_pain113 100 +#define FRAME_pain114 101 +#define FRAME_pain115 102 +#define FRAME_pain116 103 +#define FRAME_pain117 104 +#define FRAME_pain118 105 +#define FRAME_pain119 106 +#define FRAME_pain120 107 +#define FRAME_pain121 108 +#define FRAME_pain201 109 +#define FRAME_pain202 110 +#define FRAME_pain203 111 +#define FRAME_pain204 112 +#define FRAME_pain205 113 +#define FRAME_pain206 114 +#define FRAME_pain207 115 +#define FRAME_pain208 116 +#define FRAME_pain301 117 +#define FRAME_pain302 118 +#define FRAME_pain303 119 +#define FRAME_pain304 120 +#define FRAME_pain305 121 +#define FRAME_pain306 122 +#define FRAME_death101 123 +#define FRAME_death102 124 +#define FRAME_death103 125 +#define FRAME_death104 126 +#define FRAME_death105 127 +#define FRAME_death106 128 +#define FRAME_death107 129 +#define FRAME_death108 130 +#define FRAME_death109 131 +#define FRAME_death110 132 +#define FRAME_death111 133 +#define FRAME_death112 134 +#define FRAME_death113 135 +#define FRAME_death114 136 +#define FRAME_death115 137 +#define FRAME_death116 138 +#define FRAME_death117 139 +#define FRAME_death118 140 +#define FRAME_death201 141 +#define FRAME_death202 142 +#define FRAME_death203 143 +#define FRAME_death204 144 +#define FRAME_death205 145 +#define FRAME_duck01 146 +#define FRAME_duck02 147 +#define FRAME_duck03 148 +#define FRAME_duck04 149 +#define FRAME_duck05 150 +#define FRAME_duck06 151 +#define FRAME_duck07 152 +#define FRAME_duck08 153 +#define FRAME_defens01 154 +#define FRAME_defens02 155 +#define FRAME_defens03 156 +#define FRAME_defens04 157 +#define FRAME_defens05 158 +#define FRAME_defens06 159 +#define FRAME_defens07 160 +#define FRAME_defens08 161 +#define FRAME_stand01 162 +#define FRAME_stand02 163 +#define FRAME_stand03 164 +#define FRAME_stand04 165 +#define FRAME_stand05 166 +#define FRAME_stand06 167 +#define FRAME_stand07 168 +#define FRAME_stand08 169 +#define FRAME_stand09 170 +#define FRAME_stand10 171 +#define FRAME_stand11 172 +#define FRAME_stand12 173 +#define FRAME_stand13 174 +#define FRAME_stand14 175 +#define FRAME_stand15 176 +#define FRAME_stand16 177 +#define FRAME_stand17 178 +#define FRAME_stand18 179 +#define FRAME_stand19 180 +#define FRAME_stand20 181 +#define FRAME_stand21 182 +#define FRAME_stand22 183 +#define FRAME_stand23 184 +#define FRAME_stand24 185 +#define FRAME_stand25 186 +#define FRAME_stand26 187 +#define FRAME_stand27 188 +#define FRAME_stand28 189 +#define FRAME_stand29 190 +#define FRAME_stand30 191 +#define FRAME_stand31 192 +#define FRAME_stand32 193 +#define FRAME_stand33 194 +#define FRAME_stand34 195 +#define FRAME_stand35 196 +#define FRAME_stand36 197 +#define FRAME_stand37 198 +#define FRAME_stand38 199 +#define FRAME_stand39 200 +#define FRAME_stand40 201 +#define FRAME_stand41 202 +#define FRAME_stand42 203 +#define FRAME_stand43 204 +#define FRAME_stand44 205 +#define FRAME_stand45 206 +#define FRAME_stand46 207 +#define FRAME_stand47 208 +#define FRAME_stand48 209 +#define FRAME_stand49 210 +#define FRAME_stand50 211 +#define FRAME_stand51 212 +#define FRAME_stand52 213 +#define FRAME_stand53 214 +#define FRAME_stand54 215 +#define FRAME_stand55 216 +#define FRAME_stand56 217 +#define FRAME_stand57 218 +#define FRAME_stand58 219 +#define FRAME_stand59 220 +#define FRAME_stand60 221 -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. - -*/ -// G:\quake2\baseq2\models/monsters/brain - -// This file generated by ModelGen - Do NOT Modify - -#define FRAME_walk101 0 -#define FRAME_walk102 1 -#define FRAME_walk103 2 -#define FRAME_walk104 3 -#define FRAME_walk105 4 -#define FRAME_walk106 5 -#define FRAME_walk107 6 -#define FRAME_walk108 7 -#define FRAME_walk109 8 -#define FRAME_walk110 9 -#define FRAME_walk111 10 -#define FRAME_walk112 11 -#define FRAME_walk113 12 -#define FRAME_walk201 13 -#define FRAME_walk202 14 -#define FRAME_walk203 15 -#define FRAME_walk204 16 -#define FRAME_walk205 17 -#define FRAME_walk206 18 -#define FRAME_walk207 19 -#define FRAME_walk208 20 -#define FRAME_walk209 21 -#define FRAME_walk210 22 -#define FRAME_walk211 23 -#define FRAME_walk212 24 -#define FRAME_walk213 25 -#define FRAME_walk214 26 -#define FRAME_walk215 27 -#define FRAME_walk216 28 -#define FRAME_walk217 29 -#define FRAME_walk218 30 -#define FRAME_walk219 31 -#define FRAME_walk220 32 -#define FRAME_walk221 33 -#define FRAME_walk222 34 -#define FRAME_walk223 35 -#define FRAME_walk224 36 -#define FRAME_walk225 37 -#define FRAME_walk226 38 -#define FRAME_walk227 39 -#define FRAME_walk228 40 -#define FRAME_walk229 41 -#define FRAME_walk230 42 -#define FRAME_walk231 43 -#define FRAME_walk232 44 -#define FRAME_walk233 45 -#define FRAME_walk234 46 -#define FRAME_walk235 47 -#define FRAME_walk236 48 -#define FRAME_walk237 49 -#define FRAME_walk238 50 -#define FRAME_walk239 51 -#define FRAME_walk240 52 -#define FRAME_attak101 53 -#define FRAME_attak102 54 -#define FRAME_attak103 55 -#define FRAME_attak104 56 -#define FRAME_attak105 57 -#define FRAME_attak106 58 -#define FRAME_attak107 59 -#define FRAME_attak108 60 -#define FRAME_attak109 61 -#define FRAME_attak110 62 -#define FRAME_attak111 63 -#define FRAME_attak112 64 -#define FRAME_attak113 65 -#define FRAME_attak114 66 -#define FRAME_attak115 67 -#define FRAME_attak116 68 -#define FRAME_attak117 69 -#define FRAME_attak118 70 -#define FRAME_attak201 71 -#define FRAME_attak202 72 -#define FRAME_attak203 73 -#define FRAME_attak204 74 -#define FRAME_attak205 75 -#define FRAME_attak206 76 -#define FRAME_attak207 77 -#define FRAME_attak208 78 -#define FRAME_attak209 79 -#define FRAME_attak210 80 -#define FRAME_attak211 81 -#define FRAME_attak212 82 -#define FRAME_attak213 83 -#define FRAME_attak214 84 -#define FRAME_attak215 85 -#define FRAME_attak216 86 -#define FRAME_attak217 87 -#define FRAME_pain101 88 -#define FRAME_pain102 89 -#define FRAME_pain103 90 -#define FRAME_pain104 91 -#define FRAME_pain105 92 -#define FRAME_pain106 93 -#define FRAME_pain107 94 -#define FRAME_pain108 95 -#define FRAME_pain109 96 -#define FRAME_pain110 97 -#define FRAME_pain111 98 -#define FRAME_pain112 99 -#define FRAME_pain113 100 -#define FRAME_pain114 101 -#define FRAME_pain115 102 -#define FRAME_pain116 103 -#define FRAME_pain117 104 -#define FRAME_pain118 105 -#define FRAME_pain119 106 -#define FRAME_pain120 107 -#define FRAME_pain121 108 -#define FRAME_pain201 109 -#define FRAME_pain202 110 -#define FRAME_pain203 111 -#define FRAME_pain204 112 -#define FRAME_pain205 113 -#define FRAME_pain206 114 -#define FRAME_pain207 115 -#define FRAME_pain208 116 -#define FRAME_pain301 117 -#define FRAME_pain302 118 -#define FRAME_pain303 119 -#define FRAME_pain304 120 -#define FRAME_pain305 121 -#define FRAME_pain306 122 -#define FRAME_death101 123 -#define FRAME_death102 124 -#define FRAME_death103 125 -#define FRAME_death104 126 -#define FRAME_death105 127 -#define FRAME_death106 128 -#define FRAME_death107 129 -#define FRAME_death108 130 -#define FRAME_death109 131 -#define FRAME_death110 132 -#define FRAME_death111 133 -#define FRAME_death112 134 -#define FRAME_death113 135 -#define FRAME_death114 136 -#define FRAME_death115 137 -#define FRAME_death116 138 -#define FRAME_death117 139 -#define FRAME_death118 140 -#define FRAME_death201 141 -#define FRAME_death202 142 -#define FRAME_death203 143 -#define FRAME_death204 144 -#define FRAME_death205 145 -#define FRAME_duck01 146 -#define FRAME_duck02 147 -#define FRAME_duck03 148 -#define FRAME_duck04 149 -#define FRAME_duck05 150 -#define FRAME_duck06 151 -#define FRAME_duck07 152 -#define FRAME_duck08 153 -#define FRAME_defens01 154 -#define FRAME_defens02 155 -#define FRAME_defens03 156 -#define FRAME_defens04 157 -#define FRAME_defens05 158 -#define FRAME_defens06 159 -#define FRAME_defens07 160 -#define FRAME_defens08 161 -#define FRAME_stand01 162 -#define FRAME_stand02 163 -#define FRAME_stand03 164 -#define FRAME_stand04 165 -#define FRAME_stand05 166 -#define FRAME_stand06 167 -#define FRAME_stand07 168 -#define FRAME_stand08 169 -#define FRAME_stand09 170 -#define FRAME_stand10 171 -#define FRAME_stand11 172 -#define FRAME_stand12 173 -#define FRAME_stand13 174 -#define FRAME_stand14 175 -#define FRAME_stand15 176 -#define FRAME_stand16 177 -#define FRAME_stand17 178 -#define FRAME_stand18 179 -#define FRAME_stand19 180 -#define FRAME_stand20 181 -#define FRAME_stand21 182 -#define FRAME_stand22 183 -#define FRAME_stand23 184 -#define FRAME_stand24 185 -#define FRAME_stand25 186 -#define FRAME_stand26 187 -#define FRAME_stand27 188 -#define FRAME_stand28 189 -#define FRAME_stand29 190 -#define FRAME_stand30 191 -#define FRAME_stand31 192 -#define FRAME_stand32 193 -#define FRAME_stand33 194 -#define FRAME_stand34 195 -#define FRAME_stand35 196 -#define FRAME_stand36 197 -#define FRAME_stand37 198 -#define FRAME_stand38 199 -#define FRAME_stand39 200 -#define FRAME_stand40 201 -#define FRAME_stand41 202 -#define FRAME_stand42 203 -#define FRAME_stand43 204 -#define FRAME_stand44 205 -#define FRAME_stand45 206 -#define FRAME_stand46 207 -#define FRAME_stand47 208 -#define FRAME_stand48 209 -#define FRAME_stand49 210 -#define FRAME_stand50 211 -#define FRAME_stand51 212 -#define FRAME_stand52 213 -#define FRAME_stand53 214 -#define FRAME_stand54 215 -#define FRAME_stand55 216 -#define FRAME_stand56 217 -#define FRAME_stand57 218 -#define FRAME_stand58 219 -#define FRAME_stand59 220 -#define FRAME_stand60 221 - -#define MODEL_SCALE 1.000000 +#define MODEL_SCALE 1.000000