#include <u.h>#include <libc.h>#include <stdio.h>#include "../dat.h"#include "../fns.h"#include "m_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; void brain_sight (edict_t *self, edict_t */*other*/){ 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_run (edict_t *self);void brain_dead (edict_t *self); //// 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};mmove_t brain_move_stand = {FRAME_stand01, FRAME_stand30, brain_frames_stand, NULL}; void brain_stand (edict_t *self){ self->monsterinfo.currentmove = &brain_move_stand;} //// IDLE// 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};mmove_t brain_move_idle = {FRAME_stand31, FRAME_stand60, brain_frames_idle, brain_stand}; void brain_idle (edict_t *self){ 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};mmove_t brain_move_walk1 = {FRAME_walk101, FRAME_walk111, brain_frames_walk1, NULL}; // walk2 is FUBAR, do not use/*void brain_walk2_cycle (edict_t *self){ if (qrandom() > 0.1) self->monsterinfo.nextframe = FRAME_walk220;} mframe_t brain_frames_walk2 [] ={ ai_walk, 3, NULL, ai_walk, -2, NULL, ai_walk, -4, NULL, ai_walk, -3, NULL, ai_walk, 0, NULL, ai_walk, 1, NULL, ai_walk, 12, NULL, ai_walk, 0, NULL, ai_walk, -3, NULL, ai_walk, 0, NULL, ai_walk, -2, NULL, ai_walk, 0, NULL, ai_walk, 0, NULL, ai_walk, 1, NULL, ai_walk, 0, NULL, ai_walk, 0, NULL, ai_walk, 0, NULL, ai_walk, 0, NULL, ai_walk, 0, NULL, ai_walk, 10, NULL, // Cycle Start ai_walk, -1, NULL, ai_walk, 7, NULL, ai_walk, 0, NULL, ai_walk, 3, NULL, ai_walk, -3, NULL, ai_walk, 2, NULL, ai_walk, 4, NULL, ai_walk, -3, NULL, ai_walk, 2, NULL, ai_walk, 0, NULL, ai_walk, 4, brain_walk2_cycle, ai_walk, -1, NULL, ai_walk, -1, NULL, ai_walk, -8, NULL, ai_walk, 0, NULL, ai_walk, 1, NULL, ai_walk, 5, NULL, ai_walk, 2, NULL, ai_walk, -1, NULL, ai_walk, -5, NULL};mmove_t brain_move_walk2 = {FRAME_walk201, FRAME_walk240, brain_frames_walk2, NULL};*/ void brain_walk (edict_t *self){// if (qrandom() <= 0.5) self->monsterinfo.currentmove = &brain_move_walk1;// else// self->monsterinfo.currentmove = &brain_move_walk2;} 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 [] ={ 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_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};mmove_t brain_move_pain2 = {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}; //// DUCK// void brain_duck_down (edict_t *self){ if (self->monsterinfo.aiflags & AI_DUCKED) return; self->monsterinfo.aiflags |= AI_DUCKED; self->maxs[2] -= 32; self->takedamage = DAMAGE_YES; gi.linkentity (self);} void brain_duck_hold (edict_t *self){ 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){ self->monsterinfo.aiflags &= ~AI_DUCKED; self->maxs[2] += 32; self->takedamage = DAMAGE_AIM; 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};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){ if (qrandom() > 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};mmove_t brain_move_death2 = {FRAME_death201, FRAME_death205, brain_frames_death2, brain_dead}; 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_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};mmove_t brain_move_attack1 = {FRAME_attak101, FRAME_attak118, brain_frames_attack1, brain_run}; void brain_chest_open (edict_t *self){ self->spawnflags &= ~65536; self->monsterinfo.power_armor_type = POWER_ARMOR_NONE; gi.sound (self, CHAN_BODY, sound_chest_open, 1, ATTN_NORM, 0);} void brain_tentacle_attack (edict_t *self){ vec3_t aim; VectorSet (aim, MELEE_DISTANCE, 0, 8); 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);} void brain_chest_closed (edict_t *self){ self->monsterinfo.power_armor_type = POWER_ARMOR_SCREEN; if (self->spawnflags & 65536) { self->spawnflags &= ~65536; self->monsterinfo.currentmove = &brain_move_attack1; }} 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){ if (qrandom() <= 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,Lines 1–500 of 653. Load more
#include <u.h> #include <libc.h> #include <stdio.h> #include "../dat.h" #include "../fns.h" #include "m_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; void brain_sight (edict_t *self, edict_t */*other*/) { 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_run (edict_t *self); void brain_dead (edict_t *self); // // 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 }; mmove_t brain_move_stand = {FRAME_stand01, FRAME_stand30, brain_frames_stand, NULL}; void brain_stand (edict_t *self) { self->monsterinfo.currentmove = &brain_move_stand; } // // IDLE // 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 }; mmove_t brain_move_idle = {FRAME_stand31, FRAME_stand60, brain_frames_idle, brain_stand}; void brain_idle (edict_t *self) { 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 }; mmove_t brain_move_walk1 = {FRAME_walk101, FRAME_walk111, brain_frames_walk1, NULL}; // walk2 is FUBAR, do not use /* void brain_walk2_cycle (edict_t *self) { if (qrandom() > 0.1) self->monsterinfo.nextframe = FRAME_walk220; } mframe_t brain_frames_walk2 [] = { ai_walk, 3, NULL, ai_walk, -2, NULL, ai_walk, -4, NULL, ai_walk, -3, NULL, ai_walk, 0, NULL, ai_walk, 1, NULL, ai_walk, 12, NULL, ai_walk, 0, NULL, ai_walk, -3, NULL, ai_walk, 0, NULL, ai_walk, -2, NULL, ai_walk, 0, NULL, ai_walk, 0, NULL, ai_walk, 1, NULL, ai_walk, 0, NULL, ai_walk, 0, NULL, ai_walk, 0, NULL, ai_walk, 0, NULL, ai_walk, 0, NULL, ai_walk, 10, NULL, // Cycle Start ai_walk, -1, NULL, ai_walk, 7, NULL, ai_walk, 0, NULL, ai_walk, 3, NULL, ai_walk, -3, NULL, ai_walk, 2, NULL, ai_walk, 4, NULL, ai_walk, -3, NULL, ai_walk, 2, NULL, ai_walk, 0, NULL, ai_walk, 4, brain_walk2_cycle, ai_walk, -1, NULL, ai_walk, -1, NULL, ai_walk, -8, NULL, ai_walk, 0, NULL, ai_walk, 1, NULL, ai_walk, 5, NULL, ai_walk, 2, NULL, ai_walk, -1, NULL, ai_walk, -5, NULL }; mmove_t brain_move_walk2 = {FRAME_walk201, FRAME_walk240, brain_frames_walk2, NULL}; */ void brain_walk (edict_t *self) { // if (qrandom() <= 0.5) self->monsterinfo.currentmove = &brain_move_walk1; // else // self->monsterinfo.currentmove = &brain_move_walk2; } 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 [] = { 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_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 }; mmove_t brain_move_pain2 = {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}; // // DUCK // void brain_duck_down (edict_t *self) { if (self->monsterinfo.aiflags & AI_DUCKED) return; self->monsterinfo.aiflags |= AI_DUCKED; self->maxs[2] -= 32; self->takedamage = DAMAGE_YES; gi.linkentity (self); } void brain_duck_hold (edict_t *self) { 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) { self->monsterinfo.aiflags &= ~AI_DUCKED; self->maxs[2] += 32; self->takedamage = DAMAGE_AIM; 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 }; 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) { if (qrandom() > 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 }; mmove_t brain_move_death2 = {FRAME_death201, FRAME_death205, brain_frames_death2, brain_dead}; 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_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 }; mmove_t brain_move_attack1 = {FRAME_attak101, FRAME_attak118, brain_frames_attack1, brain_run}; void brain_chest_open (edict_t *self) { self->spawnflags &= ~65536; self->monsterinfo.power_armor_type = POWER_ARMOR_NONE; gi.sound (self, CHAN_BODY, sound_chest_open, 1, ATTN_NORM, 0); } void brain_tentacle_attack (edict_t *self) { vec3_t aim; VectorSet (aim, MELEE_DISTANCE, 0, 8); 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); } void brain_chest_closed (edict_t *self) { self->monsterinfo.power_armor_type = POWER_ARMOR_SCREEN; if (self->spawnflags & 65536) { self->spawnflags &= ~65536; self->monsterinfo.currentmove = &brain_move_attack1; } } 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) { if (qrandom() <= 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,