mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-23 04:52:07 +00:00
game: sync boss3 with rogue
This commit is contained in:
parent
2dcad44128
commit
00fc171350
10 changed files with 210 additions and 3038 deletions
6
Makefile
6
Makefile
|
@ -1617,9 +1617,9 @@ ROGUE_OBJS_ = \
|
|||
src/game/dm/tag.o \
|
||||
src/game/monster/berserker/berserker.o \
|
||||
src/rogue/monster/boss2/boss2.o \
|
||||
src/rogue/monster/boss3/boss3.o \
|
||||
src/rogue/monster/boss3/boss31.o \
|
||||
src/rogue/monster/boss3/boss32.o \
|
||||
src/game/monster/boss3/boss3.o \
|
||||
src/game/monster/boss3/boss31.o \
|
||||
src/game/monster/boss3/boss32.o \
|
||||
src/rogue/monster/brain/brain.o \
|
||||
src/game/monster/carrier/carrier.o \
|
||||
src/rogue/monster/chick/chick.o \
|
||||
|
|
|
@ -769,7 +769,11 @@ Boss2_CheckAttack(edict_t *self)
|
|||
/* do we have a clear shot? */
|
||||
if (tr.ent != self->enemy)
|
||||
{
|
||||
return false;
|
||||
/* we want them to go ahead and shoot at info_notnulls if they can */
|
||||
if (self->enemy->solid != SOLID_NOT || tr.fraction < 1.0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -827,7 +831,7 @@ Boss2_CheckAttack(edict_t *self)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (random() < chance)
|
||||
if ((random() < chance) || (self->enemy->solid == SOLID_NOT))
|
||||
{
|
||||
self->monsterinfo.attack_state = AS_MISSILE;
|
||||
self->monsterinfo.attack_finished = level.time + 2 * random();
|
||||
|
|
|
@ -30,6 +30,19 @@
|
|||
|
||||
extern void SP_monster_makron(edict_t *self);
|
||||
qboolean visible(edict_t *self, edict_t *other);
|
||||
void BossExplode(edict_t *self);
|
||||
void MakronToss(edict_t *self);
|
||||
void MakronPrecache(void);
|
||||
void jorg_dead(edict_t *self);
|
||||
void jorgBFG(edict_t *self);
|
||||
void jorgMachineGun(edict_t *self);
|
||||
void jorg_firebullet(edict_t *self);
|
||||
void jorg_reattack1(edict_t *self);
|
||||
void jorg_attack1(edict_t *self);
|
||||
void jorg_idle(edict_t *self);
|
||||
void jorg_step_left(edict_t *self);
|
||||
void jorg_step_right(edict_t *self);
|
||||
void jorg_death_hit(edict_t *self);
|
||||
|
||||
static int sound_pain1;
|
||||
static int sound_pain2;
|
||||
|
@ -46,20 +59,6 @@ static int sound_step_left;
|
|||
static int sound_step_right;
|
||||
static int sound_death_hit;
|
||||
|
||||
void BossExplode(edict_t *self);
|
||||
void MakronToss(edict_t *self);
|
||||
void MakronPrecache(void);
|
||||
void jorg_dead(edict_t *self);
|
||||
void jorgBFG(edict_t *self);
|
||||
void jorgMachineGun(edict_t *self);
|
||||
void jorg_firebullet(edict_t *self);
|
||||
void jorg_reattack1(edict_t *self);
|
||||
void jorg_attack1(edict_t *self);
|
||||
void jorg_idle(edict_t *self);
|
||||
void jorg_step_left(edict_t *self);
|
||||
void jorg_step_right(edict_t *self);
|
||||
void jorg_death_hit(edict_t *self);
|
||||
|
||||
void
|
||||
jorg_search(edict_t *self)
|
||||
{
|
||||
|
|
|
@ -1035,6 +1035,12 @@ brain_pain(edict_t *self, edict_t *other /* unused */,
|
|||
gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
|
||||
self->monsterinfo.currentmove = &brain_move_pain3;
|
||||
}
|
||||
|
||||
/* clear duck flag */
|
||||
if (self->monsterinfo.aiflags & AI_DUCKED)
|
||||
{
|
||||
monster_duck_up(self);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1111,6 +1117,32 @@ brain_die(edict_t *self, edict_t *inflictor /* unused */, edict_t *attacker /* u
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
brain_duck(edict_t *self, float eta)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* has to be done immediately otherwise he can get stuck */
|
||||
monster_duck_down(self);
|
||||
|
||||
if (skill->value == SKILL_EASY)
|
||||
{
|
||||
/* PMM - stupid dodge */
|
||||
self->monsterinfo.duck_wait_time = level.time + eta + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
self->monsterinfo.duck_wait_time = level.time + eta + (0.1 * (3 - skill->value));
|
||||
}
|
||||
|
||||
self->monsterinfo.currentmove = &brain_move_duck;
|
||||
self->monsterinfo.nextframe = FRAME_duck01;
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* QUAKED monster_brain (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight
|
||||
*/
|
||||
|
@ -1166,6 +1198,8 @@ SP_monster_brain(edict_t *self)
|
|||
self->monsterinfo.run = brain_run;
|
||||
self->monsterinfo.attack = brain_attack;
|
||||
self->monsterinfo.dodge = brain_dodge;
|
||||
self->monsterinfo.duck = brain_duck;
|
||||
self->monsterinfo.unduck = monster_duck_up;
|
||||
self->monsterinfo.melee = brain_melee;
|
||||
self->monsterinfo.sight = brain_sight;
|
||||
self->monsterinfo.search = brain_search;
|
||||
|
|
|
@ -28,6 +28,8 @@
|
|||
#include "../../header/local.h"
|
||||
#include "chick.h"
|
||||
|
||||
#define LEAD_TARGET 1
|
||||
|
||||
qboolean visible(edict_t *self, edict_t *other);
|
||||
|
||||
void chick_stand(edict_t *self);
|
||||
|
@ -292,6 +294,8 @@ chick_run(edict_t *self)
|
|||
return;
|
||||
}
|
||||
|
||||
monster_done_dodge(self);
|
||||
|
||||
if (self->monsterinfo.aiflags & AI_STAND_GROUND)
|
||||
{
|
||||
self->monsterinfo.currentmove = &chick_move_stand;
|
||||
|
@ -384,6 +388,8 @@ chick_pain(edict_t *self, edict_t *other /* unused */,
|
|||
return;
|
||||
}
|
||||
|
||||
monster_done_dodge(self);
|
||||
|
||||
if (self->health < (self->max_health / 2))
|
||||
{
|
||||
self->s.skinnum = 1;
|
||||
|
@ -416,6 +422,9 @@ chick_pain(edict_t *self, edict_t *other /* unused */,
|
|||
return; /* no pain anims in nightmare */
|
||||
}
|
||||
|
||||
/* clear this from blindfire */
|
||||
self->monsterinfo.aiflags &= ~AI_MANUAL_STEERING;
|
||||
|
||||
if (damage <= 10)
|
||||
{
|
||||
self->monsterinfo.currentmove = &chick_move_pain1;
|
||||
|
@ -428,6 +437,12 @@ chick_pain(edict_t *self, edict_t *other /* unused */,
|
|||
{
|
||||
self->monsterinfo.currentmove = &chick_move_pain3;
|
||||
}
|
||||
|
||||
/* clear duck flag */
|
||||
if (self->monsterinfo.aiflags & AI_DUCKED)
|
||||
{
|
||||
monster_duck_up(self);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -671,16 +686,16 @@ ChickSlash(edict_t *self)
|
|||
void
|
||||
ChickRocket(edict_t *self)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
vec3_t forward, right;
|
||||
vec3_t start;
|
||||
vec3_t dir;
|
||||
vec3_t vec;
|
||||
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
AngleVectors(self->s.angles, forward, right, NULL);
|
||||
G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_CHICK_ROCKET_1],
|
||||
forward, right, start);
|
||||
|
@ -795,13 +810,20 @@ chick_rerocket(edict_t *self)
|
|||
return;
|
||||
}
|
||||
|
||||
if (self->monsterinfo.aiflags & AI_MANUAL_STEERING)
|
||||
{
|
||||
self->monsterinfo.aiflags &= ~AI_MANUAL_STEERING;
|
||||
self->monsterinfo.currentmove = &chick_move_end_attack1;
|
||||
return;
|
||||
}
|
||||
|
||||
if (self->enemy->health > 0)
|
||||
{
|
||||
if (range(self, self->enemy) > RANGE_MELEE)
|
||||
{
|
||||
if (visible(self, self->enemy))
|
||||
{
|
||||
if (random() <= 0.6)
|
||||
if (random() <= (0.6 + (0.05 * ((float)skill->value))))
|
||||
{
|
||||
self->monsterinfo.currentmove = &chick_move_attack1;
|
||||
return;
|
||||
|
@ -926,11 +948,55 @@ chick_melee(edict_t *self)
|
|||
void
|
||||
chick_attack(edict_t *self)
|
||||
{
|
||||
float r, chance;
|
||||
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
monster_done_dodge(self);
|
||||
|
||||
if (self->monsterinfo.attack_state == AS_BLIND)
|
||||
{
|
||||
/* setup shot probabilities */
|
||||
if (self->monsterinfo.blind_fire_delay < 1.0)
|
||||
{
|
||||
chance = 1.0;
|
||||
}
|
||||
else if (self->monsterinfo.blind_fire_delay < 7.5)
|
||||
{
|
||||
chance = 0.4;
|
||||
}
|
||||
else
|
||||
{
|
||||
chance = 0.1;
|
||||
}
|
||||
|
||||
r = random();
|
||||
|
||||
/* minimum of 2 seconds, plus 0-3, after the shots are done */
|
||||
self->monsterinfo.blind_fire_delay += 4.0 + 1.5 + random();
|
||||
|
||||
/* don't shoot at the origin */
|
||||
if (VectorCompare(self->monsterinfo.blind_fire_target, vec3_origin))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* don't shoot if the dice say not to */
|
||||
if (r > chance)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* turn on manual steering to signal both manual steering and blindfire */
|
||||
self->monsterinfo.aiflags |= AI_MANUAL_STEERING;
|
||||
self->monsterinfo.currentmove = &chick_move_start_attack1;
|
||||
self->monsterinfo.attack_finished = level.time + 2 * random();
|
||||
return;
|
||||
}
|
||||
|
||||
self->monsterinfo.currentmove = &chick_move_start_attack1;
|
||||
}
|
||||
|
||||
|
@ -945,6 +1011,84 @@ chick_sight(edict_t *self, edict_t *other /* unused */)
|
|||
gi.sound(self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0);
|
||||
}
|
||||
|
||||
qboolean
|
||||
chick_blocked(edict_t *self, float dist)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (blocked_checkplat(self, dist))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
chick_duck(edict_t *self, float eta)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ((self->monsterinfo.currentmove == &chick_move_start_attack1) ||
|
||||
(self->monsterinfo.currentmove == &chick_move_attack1))
|
||||
{
|
||||
/* if we're shooting, and not on easy, don't dodge */
|
||||
if (skill->value)
|
||||
{
|
||||
self->monsterinfo.aiflags &= ~AI_DUCKED;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (skill->value == SKILL_EASY)
|
||||
{
|
||||
/* stupid dodge */
|
||||
self->monsterinfo.duck_wait_time = level.time + eta + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
self->monsterinfo.duck_wait_time = level.time + eta + (0.1 * (3 - skill->value));
|
||||
}
|
||||
|
||||
/* has to be done immediately otherwise she can get stuck */
|
||||
monster_duck_down(self);
|
||||
|
||||
self->monsterinfo.nextframe = FRAME_duck01;
|
||||
self->monsterinfo.currentmove = &chick_move_duck;
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
chick_sidestep(edict_t *self)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ((self->monsterinfo.currentmove == &chick_move_start_attack1) ||
|
||||
(self->monsterinfo.currentmove == &chick_move_attack1))
|
||||
{
|
||||
/* if we're shooting, and not on easy, don't dodge */
|
||||
if (skill->value > SKILL_EASY)
|
||||
{
|
||||
self->monsterinfo.aiflags &= ~AI_DODGING;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (self->monsterinfo.currentmove != &chick_move_run)
|
||||
{
|
||||
self->monsterinfo.currentmove = &chick_move_run;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* QUAKED monster_chick (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight
|
||||
*/
|
||||
|
@ -1000,9 +1144,13 @@ SP_monster_chick(edict_t *self)
|
|||
self->monsterinfo.walk = chick_walk;
|
||||
self->monsterinfo.run = chick_run;
|
||||
self->monsterinfo.dodge = chick_dodge;
|
||||
self->monsterinfo.duck = chick_duck;
|
||||
self->monsterinfo.unduck = monster_duck_up;
|
||||
self->monsterinfo.sidestep = chick_sidestep;
|
||||
self->monsterinfo.attack = chick_attack;
|
||||
self->monsterinfo.melee = chick_melee;
|
||||
self->monsterinfo.sight = chick_sight;
|
||||
self->monsterinfo.blocked = chick_blocked;
|
||||
|
||||
gi.linkentity(self);
|
||||
|
||||
|
|
|
@ -1,78 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) ZeniMax Media Inc.
|
||||
* Licensed under the GNU General Public License 2.0.
|
||||
*/
|
||||
|
||||
#include "../../header/local.h"
|
||||
#include "boss32.h"
|
||||
|
||||
void
|
||||
Use_Boss3(edict_t *ent, edict_t *other /* unused */, edict_t *activator /* unused */)
|
||||
{
|
||||
if (!ent)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
gi.WriteByte(svc_temp_entity);
|
||||
gi.WriteByte(TE_BOSSTPORT);
|
||||
gi.WritePosition(ent->s.origin);
|
||||
gi.multicast(ent->s.origin, MULTICAST_PVS);
|
||||
G_FreeEdict(ent);
|
||||
}
|
||||
|
||||
void
|
||||
Think_Boss3Stand(edict_t *ent)
|
||||
{
|
||||
if (!ent)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (ent->s.frame == FRAME_stand260)
|
||||
{
|
||||
ent->s.frame = FRAME_stand201;
|
||||
}
|
||||
else
|
||||
{
|
||||
ent->s.frame++;
|
||||
}
|
||||
|
||||
ent->nextthink = level.time + FRAMETIME;
|
||||
}
|
||||
|
||||
/*
|
||||
* QUAKED monster_boss3_stand (1 .5 0) (-32 -32 0) (32 32 90)
|
||||
*
|
||||
* Just stands and cycles in one place until targeted, then teleports away.
|
||||
*/
|
||||
void
|
||||
SP_monster_boss3_stand(edict_t *self)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (deathmatch->value)
|
||||
{
|
||||
G_FreeEdict(self);
|
||||
return;
|
||||
}
|
||||
|
||||
self->movetype = MOVETYPE_STEP;
|
||||
self->solid = SOLID_BBOX;
|
||||
self->model = "models/monsters/boss3/rider/tris.md2";
|
||||
self->s.modelindex = gi.modelindex(self->model);
|
||||
self->s.frame = FRAME_stand201;
|
||||
|
||||
gi.soundindex("misc/bigtele.wav");
|
||||
|
||||
VectorSet(self->mins, -32, -32, 0);
|
||||
VectorSet(self->maxs, 32, 32, 90);
|
||||
|
||||
self->use = Use_Boss3;
|
||||
self->think = Think_Boss3Stand;
|
||||
self->nextthink = level.time + FRAMETIME;
|
||||
gi.linkentity(self);
|
||||
}
|
|
@ -1,924 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2001 Id Software, Inc.
|
||||
* Copyright (c) ZeniMax Media 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.
|
||||
*
|
||||
* =======================================================================
|
||||
*
|
||||
* Final boss, stage 1 (jorg).
|
||||
*
|
||||
* =======================================================================
|
||||
*/
|
||||
|
||||
#include "../../header/local.h"
|
||||
#include "boss31.h"
|
||||
|
||||
extern void SP_monster_makron(edict_t *self);
|
||||
qboolean visible(edict_t *self, edict_t *other);
|
||||
void BossExplode(edict_t *self);
|
||||
void MakronToss(edict_t *self);
|
||||
void jorg_dead(edict_t *self);
|
||||
void jorgBFG(edict_t *self);
|
||||
void jorgMachineGun(edict_t *self);
|
||||
void jorg_firebullet(edict_t *self);
|
||||
void jorg_reattack1(edict_t *self);
|
||||
void jorg_attack1(edict_t *self);
|
||||
void jorg_idle(edict_t *self);
|
||||
void jorg_step_left(edict_t *self);
|
||||
void jorg_step_right(edict_t *self);
|
||||
void jorg_death_hit(edict_t *self);
|
||||
|
||||
static int sound_pain1;
|
||||
static int sound_pain2;
|
||||
static int sound_pain3;
|
||||
static int sound_idle;
|
||||
static int sound_death;
|
||||
static int sound_search1;
|
||||
static int sound_search2;
|
||||
static int sound_search3;
|
||||
static int sound_attack1;
|
||||
static int sound_attack2;
|
||||
static int sound_firegun;
|
||||
static int sound_step_left;
|
||||
static int sound_step_right;
|
||||
static int sound_death_hit;
|
||||
|
||||
void
|
||||
jorg_search(edict_t *self)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
float r;
|
||||
|
||||
r = random();
|
||||
|
||||
if (r <= 0.3)
|
||||
{
|
||||
gi.sound(self, CHAN_VOICE, sound_search1, 1, ATTN_NORM, 0);
|
||||
}
|
||||
else if (r <= 0.6)
|
||||
{
|
||||
gi.sound(self, CHAN_VOICE, sound_search2, 1, ATTN_NORM, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
gi.sound(self, CHAN_VOICE, sound_search3, 1, ATTN_NORM, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* stand */
|
||||
static mframe_t jorg_frames_stand[] = {
|
||||
{ai_stand, 0, jorg_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}, /* 10 */
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL}, /* 20 */
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL}, /* 30 */
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 19, NULL},
|
||||
{ai_stand, 11, jorg_step_left},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 6, NULL},
|
||||
{ai_stand, 9, jorg_step_right},
|
||||
{ai_stand, 0, NULL}, /* 40 */
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, -2, NULL},
|
||||
{ai_stand, -17, jorg_step_left},
|
||||
{ai_stand, 0, NULL},
|
||||
{ai_stand, -12, NULL}, /* 50 */
|
||||
{ai_stand, -14, jorg_step_right}
|
||||
};
|
||||
|
||||
mmove_t jorg_move_stand = {
|
||||
FRAME_stand01,
|
||||
FRAME_stand51,
|
||||
jorg_frames_stand,
|
||||
NULL
|
||||
};
|
||||
|
||||
void
|
||||
jorg_idle(edict_t *self)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
gi.sound(self, CHAN_VOICE, sound_idle, 1, ATTN_NORM, 0);
|
||||
}
|
||||
|
||||
void
|
||||
jorg_death_hit(edict_t *self)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
gi.sound(self, CHAN_BODY, sound_death_hit, 1, ATTN_NORM, 0);
|
||||
}
|
||||
|
||||
void
|
||||
jorg_step_left(edict_t *self)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
gi.sound(self, CHAN_BODY, sound_step_left, 1, ATTN_NORM, 0);
|
||||
}
|
||||
|
||||
void
|
||||
jorg_step_right(edict_t *self)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
gi.sound(self, CHAN_BODY, sound_step_right, 1, ATTN_NORM, 0);
|
||||
}
|
||||
|
||||
void
|
||||
jorg_stand(edict_t *self)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
self->monsterinfo.currentmove = &jorg_move_stand;
|
||||
}
|
||||
|
||||
static mframe_t jorg_frames_run[] = {
|
||||
{ai_run, 17, jorg_step_left},
|
||||
{ai_run, 0, NULL},
|
||||
{ai_run, 0, NULL},
|
||||
{ai_run, 0, NULL},
|
||||
{ai_run, 12, NULL},
|
||||
{ai_run, 8, NULL},
|
||||
{ai_run, 10, NULL},
|
||||
{ai_run, 33, jorg_step_right},
|
||||
{ai_run, 0, NULL},
|
||||
{ai_run, 0, NULL},
|
||||
{ai_run, 0, NULL},
|
||||
{ai_run, 9, NULL},
|
||||
{ai_run, 9, NULL},
|
||||
{ai_run, 9, NULL}
|
||||
};
|
||||
|
||||
mmove_t jorg_move_run = {
|
||||
FRAME_walk06,
|
||||
FRAME_walk19,
|
||||
jorg_frames_run,
|
||||
NULL
|
||||
};
|
||||
|
||||
/* walk */
|
||||
static mframe_t jorg_frames_start_walk[] = {
|
||||
{ai_walk, 5, NULL},
|
||||
{ai_walk, 6, NULL},
|
||||
{ai_walk, 7, NULL},
|
||||
{ai_walk, 9, NULL},
|
||||
{ai_walk, 15, NULL}
|
||||
};
|
||||
|
||||
mmove_t jorg_move_start_walk = {
|
||||
FRAME_walk01,
|
||||
FRAME_walk05,
|
||||
jorg_frames_start_walk,
|
||||
NULL
|
||||
};
|
||||
|
||||
static mframe_t jorg_frames_walk[] = {
|
||||
{ai_walk, 17, NULL},
|
||||
{ai_walk, 0, NULL},
|
||||
{ai_walk, 0, NULL},
|
||||
{ai_walk, 0, NULL},
|
||||
{ai_walk, 12, NULL},
|
||||
{ai_walk, 8, NULL},
|
||||
{ai_walk, 10, NULL},
|
||||
{ai_walk, 33, NULL},
|
||||
{ai_walk, 0, NULL},
|
||||
{ai_walk, 0, NULL},
|
||||
{ai_walk, 0, NULL},
|
||||
{ai_walk, 9, NULL},
|
||||
{ai_walk, 9, NULL},
|
||||
{ai_walk, 9, NULL}
|
||||
};
|
||||
|
||||
mmove_t jorg_move_walk = {
|
||||
FRAME_walk06,
|
||||
FRAME_walk19,
|
||||
jorg_frames_walk,
|
||||
NULL
|
||||
};
|
||||
|
||||
static mframe_t jorg_frames_end_walk[] = {
|
||||
{ai_walk, 11, NULL},
|
||||
{ai_walk, 0, NULL},
|
||||
{ai_walk, 0, NULL},
|
||||
{ai_walk, 0, NULL},
|
||||
{ai_walk, 8, NULL},
|
||||
{ai_walk, -8, NULL}
|
||||
};
|
||||
|
||||
mmove_t jorg_move_end_walk = {
|
||||
FRAME_walk20,
|
||||
FRAME_walk25,
|
||||
jorg_frames_end_walk,
|
||||
NULL
|
||||
};
|
||||
|
||||
void
|
||||
jorg_walk(edict_t *self)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
self->monsterinfo.currentmove = &jorg_move_walk;
|
||||
}
|
||||
|
||||
void
|
||||
jorg_run(edict_t *self)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (self->monsterinfo.aiflags & AI_STAND_GROUND)
|
||||
{
|
||||
self->monsterinfo.currentmove = &jorg_move_stand;
|
||||
}
|
||||
else
|
||||
{
|
||||
self->monsterinfo.currentmove = &jorg_move_run;
|
||||
}
|
||||
}
|
||||
|
||||
static mframe_t jorg_frames_pain3[] = {
|
||||
{ai_move, -28, NULL},
|
||||
{ai_move, -6, NULL},
|
||||
{ai_move, -3, jorg_step_left},
|
||||
{ai_move, -9, NULL},
|
||||
{ai_move, 0, jorg_step_right},
|
||||
{ai_move, 0, NULL},
|
||||
{ai_move, 0, NULL},
|
||||
{ai_move, 0, NULL},
|
||||
{ai_move, -7, NULL},
|
||||
{ai_move, 1, NULL},
|
||||
{ai_move, -11, NULL},
|
||||
{ai_move, -4, NULL},
|
||||
{ai_move, 0, NULL},
|
||||
{ai_move, 0, NULL},
|
||||
{ai_move, 10, NULL},
|
||||
{ai_move, 11, NULL},
|
||||
{ai_move, 0, NULL},
|
||||
{ai_move, 10, NULL},
|
||||
{ai_move, 3, NULL},
|
||||
{ai_move, 10, NULL},
|
||||
{ai_move, 7, jorg_step_left},
|
||||
{ai_move, 17, NULL},
|
||||
{ai_move, 0, NULL},
|
||||
{ai_move, 0, NULL},
|
||||
{ai_move, 0, jorg_step_right}
|
||||
};
|
||||
|
||||
mmove_t jorg_move_pain3 = {
|
||||
FRAME_pain301,
|
||||
FRAME_pain325,
|
||||
jorg_frames_pain3,
|
||||
jorg_run
|
||||
};
|
||||
|
||||
static mframe_t jorg_frames_pain2[] = {
|
||||
{ai_move, 0, NULL},
|
||||
{ai_move, 0, NULL},
|
||||
{ai_move, 0, NULL}
|
||||
};
|
||||
|
||||
mmove_t jorg_move_pain2 = {
|
||||
FRAME_pain201,
|
||||
FRAME_pain203,
|
||||
jorg_frames_pain2,
|
||||
jorg_run
|
||||
};
|
||||
|
||||
static mframe_t jorg_frames_pain1[] = {
|
||||
{ai_move, 0, NULL},
|
||||
{ai_move, 0, NULL},
|
||||
{ai_move, 0, NULL}
|
||||
};
|
||||
|
||||
mmove_t jorg_move_pain1 = {
|
||||
FRAME_pain101,
|
||||
FRAME_pain103,
|
||||
jorg_frames_pain1,
|
||||
jorg_run
|
||||
};
|
||||
|
||||
static mframe_t jorg_frames_death1[] = {
|
||||
{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}, /* 10 */
|
||||
{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}, /* 20 */
|
||||
{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}, /* 30 */
|
||||
{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}, /* 40 */
|
||||
{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, MakronToss},
|
||||
{ai_move, 0, BossExplode} /* 50 */
|
||||
};
|
||||
|
||||
mmove_t jorg_move_death = {
|
||||
FRAME_death01,
|
||||
FRAME_death50,
|
||||
jorg_frames_death1,
|
||||
jorg_dead
|
||||
};
|
||||
|
||||
static mframe_t jorg_frames_attack2[] = {
|
||||
{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, jorgBFG},
|
||||
{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 jorg_move_attack2 = {
|
||||
FRAME_attak201,
|
||||
FRAME_attak213,
|
||||
jorg_frames_attack2,
|
||||
jorg_run
|
||||
};
|
||||
|
||||
static mframe_t jorg_frames_start_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}
|
||||
};
|
||||
|
||||
mmove_t jorg_move_start_attack1 = {
|
||||
FRAME_attak101,
|
||||
FRAME_attak108,
|
||||
jorg_frames_start_attack1,
|
||||
jorg_attack1
|
||||
};
|
||||
|
||||
static mframe_t jorg_frames_attack1[] = {
|
||||
{ai_charge, 0, jorg_firebullet},
|
||||
{ai_charge, 0, jorg_firebullet},
|
||||
{ai_charge, 0, jorg_firebullet},
|
||||
{ai_charge, 0, jorg_firebullet},
|
||||
{ai_charge, 0, jorg_firebullet},
|
||||
{ai_charge, 0, jorg_firebullet}
|
||||
};
|
||||
|
||||
mmove_t jorg_move_attack1 = {
|
||||
FRAME_attak109,
|
||||
FRAME_attak114,
|
||||
jorg_frames_attack1,
|
||||
jorg_reattack1
|
||||
};
|
||||
|
||||
static mframe_t jorg_frames_end_attack1[] = {
|
||||
{ai_move, 0, NULL},
|
||||
{ai_move, 0, NULL},
|
||||
{ai_move, 0, NULL},
|
||||
{ai_move, 0, NULL}
|
||||
};
|
||||
|
||||
mmove_t jorg_move_end_attack1 = {
|
||||
FRAME_attak115,
|
||||
FRAME_attak118,
|
||||
jorg_frames_end_attack1,
|
||||
jorg_run
|
||||
};
|
||||
|
||||
void
|
||||
jorg_reattack1(edict_t *self)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (visible(self, self->enemy))
|
||||
{
|
||||
if (random() < 0.9)
|
||||
{
|
||||
self->monsterinfo.currentmove = &jorg_move_attack1;
|
||||
}
|
||||
else
|
||||
{
|
||||
self->s.sound = 0;
|
||||
self->monsterinfo.currentmove = &jorg_move_end_attack1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
self->s.sound = 0;
|
||||
self->monsterinfo.currentmove = &jorg_move_end_attack1;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
jorg_attack1(edict_t *self)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
self->monsterinfo.currentmove = &jorg_move_attack1;
|
||||
}
|
||||
|
||||
void
|
||||
jorg_pain(edict_t *self, edict_t *other /* unused */, float kick, int damage)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (self->health < (self->max_health / 2))
|
||||
{
|
||||
self->s.skinnum = 1;
|
||||
}
|
||||
|
||||
self->s.sound = 0;
|
||||
|
||||
if (level.time < self->pain_debounce_time)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Lessen the chance of him going into his
|
||||
pain frames if he takes little damage */
|
||||
if (damage <= 40)
|
||||
{
|
||||
if (random() <= 0.6)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* If he's entering his attack1 or using attack1,
|
||||
lessen the chance of him going into pain */
|
||||
|
||||
if ((self->s.frame >= FRAME_attak101) && (self->s.frame <= FRAME_attak108))
|
||||
{
|
||||
if (random() <= 0.005)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ((self->s.frame >= FRAME_attak109) && (self->s.frame <= FRAME_attak114))
|
||||
{
|
||||
if (random() <= 0.00005)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ((self->s.frame >= FRAME_attak201) && (self->s.frame <= FRAME_attak208))
|
||||
{
|
||||
if (random() <= 0.005)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
self->pain_debounce_time = level.time + 3;
|
||||
|
||||
if (skill->value == SKILL_HARDPLUS)
|
||||
{
|
||||
return; /* no pain anims in nightmare */
|
||||
}
|
||||
|
||||
if (damage <= 50)
|
||||
{
|
||||
gi.sound(self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
|
||||
self->monsterinfo.currentmove = &jorg_move_pain1;
|
||||
}
|
||||
else if (damage <= 100)
|
||||
{
|
||||
gi.sound(self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0);
|
||||
self->monsterinfo.currentmove = &jorg_move_pain2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (random() <= 0.3)
|
||||
{
|
||||
gi.sound(self, CHAN_VOICE, sound_pain3, 1, ATTN_NORM, 0);
|
||||
self->monsterinfo.currentmove = &jorg_move_pain3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
jorgBFG(edict_t *self)
|
||||
{
|
||||
vec3_t forward, right;
|
||||
vec3_t start;
|
||||
vec3_t dir;
|
||||
vec3_t vec;
|
||||
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
AngleVectors(self->s.angles, forward, right, NULL);
|
||||
G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_JORG_BFG_1],
|
||||
forward, right, start);
|
||||
|
||||
VectorCopy(self->enemy->s.origin, vec);
|
||||
vec[2] += self->enemy->viewheight;
|
||||
VectorSubtract(vec, start, dir);
|
||||
VectorNormalize(dir);
|
||||
gi.sound(self, CHAN_VOICE, sound_attack2, 1, ATTN_NORM, 0);
|
||||
monster_fire_bfg(self, start, dir, 50, 300, 100, 200, MZ2_JORG_BFG_1);
|
||||
}
|
||||
|
||||
void
|
||||
jorg_firebullet_right(edict_t *self)
|
||||
{
|
||||
vec3_t forward, right, target;
|
||||
vec3_t start;
|
||||
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
AngleVectors(self->s.angles, forward, right, NULL);
|
||||
G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_JORG_MACHINEGUN_R1],
|
||||
forward, right, start);
|
||||
|
||||
VectorMA(self->enemy->s.origin, -0.2, self->enemy->velocity, target);
|
||||
target[2] += self->enemy->viewheight;
|
||||
VectorSubtract(target, start, forward);
|
||||
VectorNormalize(forward);
|
||||
|
||||
monster_fire_bullet(self, start, forward, 6, 4, DEFAULT_BULLET_HSPREAD,
|
||||
DEFAULT_BULLET_VSPREAD, MZ2_JORG_MACHINEGUN_R1);
|
||||
}
|
||||
|
||||
void
|
||||
jorg_firebullet_left(edict_t *self)
|
||||
{
|
||||
vec3_t forward, right, target;
|
||||
vec3_t start;
|
||||
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
AngleVectors(self->s.angles, forward, right, NULL);
|
||||
G_ProjectSource(self->s.origin, monster_flash_offset[MZ2_JORG_MACHINEGUN_L1],
|
||||
forward, right, start);
|
||||
|
||||
VectorMA(self->enemy->s.origin, -0.2, self->enemy->velocity, target);
|
||||
target[2] += self->enemy->viewheight;
|
||||
VectorSubtract(target, start, forward);
|
||||
VectorNormalize(forward);
|
||||
|
||||
monster_fire_bullet(self, start, forward, 6, 4, DEFAULT_BULLET_HSPREAD,
|
||||
DEFAULT_BULLET_VSPREAD, MZ2_JORG_MACHINEGUN_L1);
|
||||
}
|
||||
|
||||
void
|
||||
jorg_firebullet(edict_t *self)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
jorg_firebullet_left(self);
|
||||
jorg_firebullet_right(self);
|
||||
}
|
||||
|
||||
void
|
||||
jorg_attack(edict_t *self)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (random() <= 0.75)
|
||||
{
|
||||
gi.sound(self, CHAN_VOICE, sound_attack1, 1, ATTN_NORM, 0);
|
||||
self->s.sound = gi.soundindex("boss3/w_loop.wav");
|
||||
self->monsterinfo.currentmove = &jorg_move_start_attack1;
|
||||
}
|
||||
else
|
||||
{
|
||||
gi.sound(self, CHAN_VOICE, sound_attack2, 1, ATTN_NORM, 0);
|
||||
self->monsterinfo.currentmove = &jorg_move_attack2;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
jorg_dead(edict_t *self)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
jorg_die(edict_t *self, edict_t *inflictor /* unused */, edict_t *attacker /* unused */,
|
||||
int damage /* unused */, vec3_t point /* unused */)
|
||||
{
|
||||
if (!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
gi.sound(self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0);
|
||||
self->deadflag = DEAD_DEAD;
|
||||
self->takedamage = DAMAGE_NO;
|
||||
self->s.sound = 0;
|
||||
self->count = 0;
|
||||
self->monsterinfo.currentmove = &jorg_move_death;
|
||||
}
|
||||
|
||||
qboolean
|
||||
Jorg_CheckAttack(edict_t *self)
|
||||
{
|
||||
vec3_t spot1, spot2;
|
||||
vec3_t temp;
|
||||
float chance;
|
||||
trace_t tr;
|
||||
int enemy_range;
|
||||
float enemy_yaw;
|
||||
|
||||
if (!self)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (self->enemy->health > 0)
|
||||
{
|
||||
/* see if any entities are in the way of the shot */
|
||||
VectorCopy(self->s.origin, spot1);
|
||||
spot1[2] += self->viewheight;
|
||||
VectorCopy(self->enemy->s.origin, spot2);
|
||||
spot2[2] += self->enemy->viewheight;
|
||||
|
||||
tr = gi.trace(spot1, NULL, NULL, spot2, self,
|
||||
CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_SLIME |
|
||||
CONTENTS_LAVA);
|
||||
|
||||
/* do we have a clear shot? */
|
||||
if (tr.ent != self->enemy)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
enemy_range = range(self, self->enemy);
|
||||
VectorSubtract(self->enemy->s.origin, self->s.origin, temp);
|
||||
enemy_yaw = vectoyaw(temp);
|
||||
|
||||
self->ideal_yaw = enemy_yaw;
|
||||
|
||||
/* melee attack */
|
||||
if (enemy_range == RANGE_MELEE)
|
||||
{
|
||||
if (self->monsterinfo.melee)
|
||||
{
|
||||
self->monsterinfo.attack_state = AS_MELEE;
|
||||
}
|
||||
else
|
||||
{
|
||||
self->monsterinfo.attack_state = AS_MISSILE;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* missile attack */
|
||||
if (!self->monsterinfo.attack)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (level.time < self->monsterinfo.attack_finished)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (enemy_range == RANGE_FAR)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (self->monsterinfo.aiflags & AI_STAND_GROUND)
|
||||
{
|
||||
chance = 0.4;
|
||||
}
|
||||
else if (enemy_range == RANGE_NEAR)
|
||||
{
|
||||
chance = 0.4;
|
||||
}
|
||||
else if (enemy_range == RANGE_MID)
|
||||
{
|
||||
chance = 0.2;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (random() < chance)
|
||||
{
|
||||
self->monsterinfo.attack_state = AS_MISSILE;
|
||||
self->monsterinfo.attack_finished = level.time + 2 * random();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (self->flags & FL_FLY)
|
||||
{
|
||||
if (random() < 0.3)
|
||||
{
|
||||
self->monsterinfo.attack_state = AS_SLIDING;
|
||||
}
|
||||
else
|
||||
{
|
||||
self->monsterinfo.attack_state = AS_STRAIGHT;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void MakronPrecache(void);
|
||||
|
||||
/*
|
||||
* QUAKED monster_jorg (1 .5 0) (-80 -80 0) (90 90 140) Ambush Trigger_Spawn Sight
|
||||
*/
|
||||
void
|
||||
SP_monster_jorg(edict_t *self)
|
||||
{
|
||||
if (deathmatch->value)
|
||||
{
|
||||
G_FreeEdict(self);
|
||||
return;
|
||||
}
|
||||
|
||||
sound_pain1 = gi.soundindex("boss3/bs3pain1.wav");
|
||||
sound_pain2 = gi.soundindex("boss3/bs3pain2.wav");
|
||||
sound_pain3 = gi.soundindex("boss3/bs3pain3.wav");
|
||||
sound_death = gi.soundindex("boss3/bs3deth1.wav");
|
||||
sound_attack1 = gi.soundindex("boss3/bs3atck1.wav");
|
||||
sound_attack2 = gi.soundindex("boss3/bs3atck2.wav");
|
||||
sound_search1 = gi.soundindex("boss3/bs3srch1.wav");
|
||||
sound_search2 = gi.soundindex("boss3/bs3srch2.wav");
|
||||
sound_search3 = gi.soundindex("boss3/bs3srch3.wav");
|
||||
sound_idle = gi.soundindex("boss3/bs3idle1.wav");
|
||||
sound_step_left = gi.soundindex("boss3/step1.wav");
|
||||
sound_step_right = gi.soundindex("boss3/step2.wav");
|
||||
sound_firegun = gi.soundindex("boss3/xfire.wav");
|
||||
sound_death_hit = gi.soundindex("boss3/d_hit.wav");
|
||||
|
||||
MakronPrecache();
|
||||
|
||||
self->movetype = MOVETYPE_STEP;
|
||||
self->solid = SOLID_BBOX;
|
||||
self->s.modelindex = gi.modelindex("models/monsters/boss3/jorg/tris.md2");
|
||||
self->s.modelindex2 = gi.modelindex("models/monsters/boss3/rider/tris.md2");
|
||||
VectorSet(self->mins, -80, -80, 0);
|
||||
VectorSet(self->maxs, 80, 80, 140);
|
||||
|
||||
self->health = 3000;
|
||||
self->gib_health = -2000;
|
||||
self->mass = 1000;
|
||||
|
||||
self->pain = jorg_pain;
|
||||
self->die = jorg_die;
|
||||
self->monsterinfo.stand = jorg_stand;
|
||||
self->monsterinfo.walk = jorg_walk;
|
||||
self->monsterinfo.run = jorg_run;
|
||||
self->monsterinfo.dodge = NULL;
|
||||
self->monsterinfo.attack = jorg_attack;
|
||||
self->monsterinfo.search = jorg_search;
|
||||
self->monsterinfo.melee = NULL;
|
||||
self->monsterinfo.sight = NULL;
|
||||
self->monsterinfo.checkattack = Jorg_CheckAttack;
|
||||
gi.linkentity(self);
|
||||
|
||||
self->monsterinfo.currentmove = &jorg_move_stand;
|
||||
self->monsterinfo.scale = MODEL_SCALE;
|
||||
|
||||
walkmonster_start(self);
|
||||
}
|
|
@ -1,216 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2001 Id Software, Inc.
|
||||
* Copyright (c) ZeniMax Media 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.
|
||||
*
|
||||
* =======================================================================
|
||||
*
|
||||
* Animations for final boss stage 1.
|
||||
*
|
||||
* =======================================================================
|
||||
*/
|
||||
|
||||
#define FRAME_attak101 0
|
||||
#define FRAME_attak102 1
|
||||
#define FRAME_attak103 2
|
||||
#define FRAME_attak104 3
|
||||
#define FRAME_attak105 4
|
||||
#define FRAME_attak106 5
|
||||
#define FRAME_attak107 6
|
||||
#define FRAME_attak108 7
|
||||
#define FRAME_attak109 8
|
||||
#define FRAME_attak110 9
|
||||
#define FRAME_attak111 10
|
||||
#define FRAME_attak112 11
|
||||
#define FRAME_attak113 12
|
||||
#define FRAME_attak114 13
|
||||
#define FRAME_attak115 14
|
||||
#define FRAME_attak116 15
|
||||
#define FRAME_attak117 16
|
||||
#define FRAME_attak118 17
|
||||
#define FRAME_attak201 18
|
||||
#define FRAME_attak202 19
|
||||
#define FRAME_attak203 20
|
||||
#define FRAME_attak204 21
|
||||
#define FRAME_attak205 22
|
||||
#define FRAME_attak206 23
|
||||
#define FRAME_attak207 24
|
||||
#define FRAME_attak208 25
|
||||
#define FRAME_attak209 26
|
||||
#define FRAME_attak210 27
|
||||
#define FRAME_attak211 28
|
||||
#define FRAME_attak212 29
|
||||
#define FRAME_attak213 30
|
||||
#define FRAME_death01 31
|
||||
#define FRAME_death02 32
|
||||
#define FRAME_death03 33
|
||||
#define FRAME_death04 34
|
||||
#define FRAME_death05 35
|
||||
#define FRAME_death06 36
|
||||
#define FRAME_death07 37
|
||||
#define FRAME_death08 38
|
||||
#define FRAME_death09 39
|
||||
#define FRAME_death10 40
|
||||
#define FRAME_death11 41
|
||||
#define FRAME_death12 42
|
||||
#define FRAME_death13 43
|
||||
#define FRAME_death14 44
|
||||
#define FRAME_death15 45
|
||||
#define FRAME_death16 46
|
||||
#define FRAME_death17 47
|
||||
#define FRAME_death18 48
|
||||
#define FRAME_death19 49
|
||||
#define FRAME_death20 50
|
||||
#define FRAME_death21 51
|
||||
#define FRAME_death22 52
|
||||
#define FRAME_death23 53
|
||||
#define FRAME_death24 54
|
||||
#define FRAME_death25 55
|
||||
#define FRAME_death26 56
|
||||
#define FRAME_death27 57
|
||||
#define FRAME_death28 58
|
||||
#define FRAME_death29 59
|
||||
#define FRAME_death30 60
|
||||
#define FRAME_death31 61
|
||||
#define FRAME_death32 62
|
||||
#define FRAME_death33 63
|
||||
#define FRAME_death34 64
|
||||
#define FRAME_death35 65
|
||||
#define FRAME_death36 66
|
||||
#define FRAME_death37 67
|
||||
#define FRAME_death38 68
|
||||
#define FRAME_death39 69
|
||||
#define FRAME_death40 70
|
||||
#define FRAME_death41 71
|
||||
#define FRAME_death42 72
|
||||
#define FRAME_death43 73
|
||||
#define FRAME_death44 74
|
||||
#define FRAME_death45 75
|
||||
#define FRAME_death46 76
|
||||
#define FRAME_death47 77
|
||||
#define FRAME_death48 78
|
||||
#define FRAME_death49 79
|
||||
#define FRAME_death50 80
|
||||
#define FRAME_pain101 81
|
||||
#define FRAME_pain102 82
|
||||
#define FRAME_pain103 83
|
||||
#define FRAME_pain201 84
|
||||
#define FRAME_pain202 85
|
||||
#define FRAME_pain203 86
|
||||
#define FRAME_pain301 87
|
||||
#define FRAME_pain302 88
|
||||
#define FRAME_pain303 89
|
||||
#define FRAME_pain304 90
|
||||
#define FRAME_pain305 91
|
||||
#define FRAME_pain306 92
|
||||
#define FRAME_pain307 93
|
||||
#define FRAME_pain308 94
|
||||
#define FRAME_pain309 95
|
||||
#define FRAME_pain310 96
|
||||
#define FRAME_pain311 97
|
||||
#define FRAME_pain312 98
|
||||
#define FRAME_pain313 99
|
||||
#define FRAME_pain314 100
|
||||
#define FRAME_pain315 101
|
||||
#define FRAME_pain316 102
|
||||
#define FRAME_pain317 103
|
||||
#define FRAME_pain318 104
|
||||
#define FRAME_pain319 105
|
||||
#define FRAME_pain320 106
|
||||
#define FRAME_pain321 107
|
||||
#define FRAME_pain322 108
|
||||
#define FRAME_pain323 109
|
||||
#define FRAME_pain324 110
|
||||
#define FRAME_pain325 111
|
||||
#define FRAME_stand01 112
|
||||
#define FRAME_stand02 113
|
||||
#define FRAME_stand03 114
|
||||
#define FRAME_stand04 115
|
||||
#define FRAME_stand05 116
|
||||
#define FRAME_stand06 117
|
||||
#define FRAME_stand07 118
|
||||
#define FRAME_stand08 119
|
||||
#define FRAME_stand09 120
|
||||
#define FRAME_stand10 121
|
||||
#define FRAME_stand11 122
|
||||
#define FRAME_stand12 123
|
||||
#define FRAME_stand13 124
|
||||
#define FRAME_stand14 125
|
||||
#define FRAME_stand15 126
|
||||
#define FRAME_stand16 127
|
||||
#define FRAME_stand17 128
|
||||
#define FRAME_stand18 129
|
||||
#define FRAME_stand19 130
|
||||
#define FRAME_stand20 131
|
||||
#define FRAME_stand21 132
|
||||
#define FRAME_stand22 133
|
||||
#define FRAME_stand23 134
|
||||
#define FRAME_stand24 135
|
||||
#define FRAME_stand25 136
|
||||
#define FRAME_stand26 137
|
||||
#define FRAME_stand27 138
|
||||
#define FRAME_stand28 139
|
||||
#define FRAME_stand29 140
|
||||
#define FRAME_stand30 141
|
||||
#define FRAME_stand31 142
|
||||
#define FRAME_stand32 143
|
||||
#define FRAME_stand33 144
|
||||
#define FRAME_stand34 145
|
||||
#define FRAME_stand35 146
|
||||
#define FRAME_stand36 147
|
||||
#define FRAME_stand37 148
|
||||
#define FRAME_stand38 149
|
||||
#define FRAME_stand39 150
|
||||
#define FRAME_stand40 151
|
||||
#define FRAME_stand41 152
|
||||
#define FRAME_stand42 153
|
||||
#define FRAME_stand43 154
|
||||
#define FRAME_stand44 155
|
||||
#define FRAME_stand45 156
|
||||
#define FRAME_stand46 157
|
||||
#define FRAME_stand47 158
|
||||
#define FRAME_stand48 159
|
||||
#define FRAME_stand49 160
|
||||
#define FRAME_stand50 161
|
||||
#define FRAME_stand51 162
|
||||
#define FRAME_walk01 163
|
||||
#define FRAME_walk02 164
|
||||
#define FRAME_walk03 165
|
||||
#define FRAME_walk04 166
|
||||
#define FRAME_walk05 167
|
||||
#define FRAME_walk06 168
|
||||
#define FRAME_walk07 169
|
||||
#define FRAME_walk08 170
|
||||
#define FRAME_walk09 171
|
||||
#define FRAME_walk10 172
|
||||
#define FRAME_walk11 173
|
||||
#define FRAME_walk12 174
|
||||
#define FRAME_walk13 175
|
||||
#define FRAME_walk14 176
|
||||
#define FRAME_walk15 177
|
||||
#define FRAME_walk16 178
|
||||
#define FRAME_walk17 179
|
||||
#define FRAME_walk18 180
|
||||
#define FRAME_walk19 181
|
||||
#define FRAME_walk20 182
|
||||
#define FRAME_walk21 183
|
||||
#define FRAME_walk22 184
|
||||
#define FRAME_walk23 185
|
||||
#define FRAME_walk24 186
|
||||
#define FRAME_walk25 187
|
||||
#define MODEL_SCALE 1.000000
|
File diff suppressed because it is too large
Load diff
|
@ -1,519 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2001 Id Software, Inc.
|
||||
* Copyright (c) ZeniMax Media 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.
|
||||
*
|
||||
* =======================================================================
|
||||
*
|
||||
* Final boss, stage 2 (makron).
|
||||
*
|
||||
* =======================================================================
|
||||
*/
|
||||
|
||||
#define FRAME_attak101 0
|
||||
#define FRAME_attak102 1
|
||||
#define FRAME_attak103 2
|
||||
#define FRAME_attak104 3
|
||||
#define FRAME_attak105 4
|
||||
#define FRAME_attak106 5
|
||||
#define FRAME_attak107 6
|
||||
#define FRAME_attak108 7
|
||||
#define FRAME_attak109 8
|
||||
#define FRAME_attak110 9
|
||||
#define FRAME_attak111 10
|
||||
#define FRAME_attak112 11
|
||||
#define FRAME_attak113 12
|
||||
#define FRAME_attak114 13
|
||||
#define FRAME_attak115 14
|
||||
#define FRAME_attak116 15
|
||||
#define FRAME_attak117 16
|
||||
#define FRAME_attak118 17
|
||||
#define FRAME_attak201 18
|
||||
#define FRAME_attak202 19
|
||||
#define FRAME_attak203 20
|
||||
#define FRAME_attak204 21
|
||||
#define FRAME_attak205 22
|
||||
#define FRAME_attak206 23
|
||||
#define FRAME_attak207 24
|
||||
#define FRAME_attak208 25
|
||||
#define FRAME_attak209 26
|
||||
#define FRAME_attak210 27
|
||||
#define FRAME_attak211 28
|
||||
#define FRAME_attak212 29
|
||||
#define FRAME_attak213 30
|
||||
#define FRAME_death01 31
|
||||
#define FRAME_death02 32
|
||||
#define FRAME_death03 33
|
||||
#define FRAME_death04 34
|
||||
#define FRAME_death05 35
|
||||
#define FRAME_death06 36
|
||||
#define FRAME_death07 37
|
||||
#define FRAME_death08 38
|
||||
#define FRAME_death09 39
|
||||
#define FRAME_death10 40
|
||||
#define FRAME_death11 41
|
||||
#define FRAME_death12 42
|
||||
#define FRAME_death13 43
|
||||
#define FRAME_death14 44
|
||||
#define FRAME_death15 45
|
||||
#define FRAME_death16 46
|
||||
#define FRAME_death17 47
|
||||
#define FRAME_death18 48
|
||||
#define FRAME_death19 49
|
||||
#define FRAME_death20 50
|
||||
#define FRAME_death21 51
|
||||
#define FRAME_death22 52
|
||||
#define FRAME_death23 53
|
||||
#define FRAME_death24 54
|
||||
#define FRAME_death25 55
|
||||
#define FRAME_death26 56
|
||||
#define FRAME_death27 57
|
||||
#define FRAME_death28 58
|
||||
#define FRAME_death29 59
|
||||
#define FRAME_death30 60
|
||||
#define FRAME_death31 61
|
||||
#define FRAME_death32 62
|
||||
#define FRAME_death33 63
|
||||
#define FRAME_death34 64
|
||||
#define FRAME_death35 65
|
||||
#define FRAME_death36 66
|
||||
#define FRAME_death37 67
|
||||
#define FRAME_death38 68
|
||||
#define FRAME_death39 69
|
||||
#define FRAME_death40 70
|
||||
#define FRAME_death41 71
|
||||
#define FRAME_death42 72
|
||||
#define FRAME_death43 73
|
||||
#define FRAME_death44 74
|
||||
#define FRAME_death45 75
|
||||
#define FRAME_death46 76
|
||||
#define FRAME_death47 77
|
||||
#define FRAME_death48 78
|
||||
#define FRAME_death49 79
|
||||
#define FRAME_death50 80
|
||||
#define FRAME_pain101 81
|
||||
#define FRAME_pain102 82
|
||||
#define FRAME_pain103 83
|
||||
#define FRAME_pain201 84
|
||||
#define FRAME_pain202 85
|
||||
#define FRAME_pain203 86
|
||||
#define FRAME_pain301 87
|
||||
#define FRAME_pain302 88
|
||||
#define FRAME_pain303 89
|
||||
#define FRAME_pain304 90
|
||||
#define FRAME_pain305 91
|
||||
#define FRAME_pain306 92
|
||||
#define FRAME_pain307 93
|
||||
#define FRAME_pain308 94
|
||||
#define FRAME_pain309 95
|
||||
#define FRAME_pain310 96
|
||||
#define FRAME_pain311 97
|
||||
#define FRAME_pain312 98
|
||||
#define FRAME_pain313 99
|
||||
#define FRAME_pain314 100
|
||||
#define FRAME_pain315 101
|
||||
#define FRAME_pain316 102
|
||||
#define FRAME_pain317 103
|
||||
#define FRAME_pain318 104
|
||||
#define FRAME_pain319 105
|
||||
#define FRAME_pain320 106
|
||||
#define FRAME_pain321 107
|
||||
#define FRAME_pain322 108
|
||||
#define FRAME_pain323 109
|
||||
#define FRAME_pain324 110
|
||||
#define FRAME_pain325 111
|
||||
#define FRAME_stand01 112
|
||||
#define FRAME_stand02 113
|
||||
#define FRAME_stand03 114
|
||||
#define FRAME_stand04 115
|
||||
#define FRAME_stand05 116
|
||||
#define FRAME_stand06 117
|
||||
#define FRAME_stand07 118
|
||||
#define FRAME_stand08 119
|
||||
#define FRAME_stand09 120
|
||||
#define FRAME_stand10 121
|
||||
#define FRAME_stand11 122
|
||||
#define FRAME_stand12 123
|
||||
#define FRAME_stand13 124
|
||||
#define FRAME_stand14 125
|
||||
#define FRAME_stand15 126
|
||||
#define FRAME_stand16 127
|
||||
#define FRAME_stand17 128
|
||||
#define FRAME_stand18 129
|
||||
#define FRAME_stand19 130
|
||||
#define FRAME_stand20 131
|
||||
#define FRAME_stand21 132
|
||||
#define FRAME_stand22 133
|
||||
#define FRAME_stand23 134
|
||||
#define FRAME_stand24 135
|
||||
#define FRAME_stand25 136
|
||||
#define FRAME_stand26 137
|
||||
#define FRAME_stand27 138
|
||||
#define FRAME_stand28 139
|
||||
#define FRAME_stand29 140
|
||||
#define FRAME_stand30 141
|
||||
#define FRAME_stand31 142
|
||||
#define FRAME_stand32 143
|
||||
#define FRAME_stand33 144
|
||||
#define FRAME_stand34 145
|
||||
#define FRAME_stand35 146
|
||||
#define FRAME_stand36 147
|
||||
#define FRAME_stand37 148
|
||||
#define FRAME_stand38 149
|
||||
#define FRAME_stand39 150
|
||||
#define FRAME_stand40 151
|
||||
#define FRAME_stand41 152
|
||||
#define FRAME_stand42 153
|
||||
#define FRAME_stand43 154
|
||||
#define FRAME_stand44 155
|
||||
#define FRAME_stand45 156
|
||||
#define FRAME_stand46 157
|
||||
#define FRAME_stand47 158
|
||||
#define FRAME_stand48 159
|
||||
#define FRAME_stand49 160
|
||||
#define FRAME_stand50 161
|
||||
#define FRAME_stand51 162
|
||||
#define FRAME_walk01 163
|
||||
#define FRAME_walk02 164
|
||||
#define FRAME_walk03 165
|
||||
#define FRAME_walk04 166
|
||||
#define FRAME_walk05 167
|
||||
#define FRAME_walk06 168
|
||||
#define FRAME_walk07 169
|
||||
#define FRAME_walk08 170
|
||||
#define FRAME_walk09 171
|
||||
#define FRAME_walk10 172
|
||||
#define FRAME_walk11 173
|
||||
#define FRAME_walk12 174
|
||||
#define FRAME_walk13 175
|
||||
#define FRAME_walk14 176
|
||||
#define FRAME_walk15 177
|
||||
#define FRAME_walk16 178
|
||||
#define FRAME_walk17 179
|
||||
#define FRAME_walk18 180
|
||||
#define FRAME_walk19 181
|
||||
#define FRAME_walk20 182
|
||||
#define FRAME_walk21 183
|
||||
#define FRAME_walk22 184
|
||||
#define FRAME_walk23 185
|
||||
#define FRAME_walk24 186
|
||||
#define FRAME_walk25 187
|
||||
#define FRAME_active01 188
|
||||
#define FRAME_active02 189
|
||||
#define FRAME_active03 190
|
||||
#define FRAME_active04 191
|
||||
#define FRAME_active05 192
|
||||
#define FRAME_active06 193
|
||||
#define FRAME_active07 194
|
||||
#define FRAME_active08 195
|
||||
#define FRAME_active09 196
|
||||
#define FRAME_active10 197
|
||||
#define FRAME_active11 198
|
||||
#define FRAME_active12 199
|
||||
#define FRAME_active13 200
|
||||
#define FRAME_attak301 201
|
||||
#define FRAME_attak302 202
|
||||
#define FRAME_attak303 203
|
||||
#define FRAME_attak304 204
|
||||
#define FRAME_attak305 205
|
||||
#define FRAME_attak306 206
|
||||
#define FRAME_attak307 207
|
||||
#define FRAME_attak308 208
|
||||
#define FRAME_attak401 209
|
||||
#define FRAME_attak402 210
|
||||
#define FRAME_attak403 211
|
||||
#define FRAME_attak404 212
|
||||
#define FRAME_attak405 213
|
||||
#define FRAME_attak406 214
|
||||
#define FRAME_attak407 215
|
||||
#define FRAME_attak408 216
|
||||
#define FRAME_attak409 217
|
||||
#define FRAME_attak410 218
|
||||
#define FRAME_attak411 219
|
||||
#define FRAME_attak412 220
|
||||
#define FRAME_attak413 221
|
||||
#define FRAME_attak414 222
|
||||
#define FRAME_attak415 223
|
||||
#define FRAME_attak416 224
|
||||
#define FRAME_attak417 225
|
||||
#define FRAME_attak418 226
|
||||
#define FRAME_attak419 227
|
||||
#define FRAME_attak420 228
|
||||
#define FRAME_attak421 229
|
||||
#define FRAME_attak422 230
|
||||
#define FRAME_attak423 231
|
||||
#define FRAME_attak424 232
|
||||
#define FRAME_attak425 233
|
||||
#define FRAME_attak426 234
|
||||
#define FRAME_attak501 235
|
||||
#define FRAME_attak502 236
|
||||
#define FRAME_attak503 237
|
||||
#define FRAME_attak504 238
|
||||
#define FRAME_attak505 239
|
||||
#define FRAME_attak506 240
|
||||
#define FRAME_attak507 241
|
||||
#define FRAME_attak508 242
|
||||
#define FRAME_attak509 243
|
||||
#define FRAME_attak510 244
|
||||
#define FRAME_attak511 245
|
||||
#define FRAME_attak512 246
|
||||
#define FRAME_attak513 247
|
||||
#define FRAME_attak514 248
|
||||
#define FRAME_attak515 249
|
||||
#define FRAME_attak516 250
|
||||
#define FRAME_death201 251
|
||||
#define FRAME_death202 252
|
||||
#define FRAME_death203 253
|
||||
#define FRAME_death204 254
|
||||
#define FRAME_death205 255
|
||||
#define FRAME_death206 256
|
||||
#define FRAME_death207 257
|
||||
#define FRAME_death208 258
|
||||
#define FRAME_death209 259
|
||||
#define FRAME_death210 260
|
||||
#define FRAME_death211 261
|
||||
#define FRAME_death212 262
|
||||
#define FRAME_death213 263
|
||||
#define FRAME_death214 264
|
||||
#define FRAME_death215 265
|
||||
#define FRAME_death216 266
|
||||
#define FRAME_death217 267
|
||||
#define FRAME_death218 268
|
||||
#define FRAME_death219 269
|
||||
#define FRAME_death220 270
|
||||
#define FRAME_death221 271
|
||||
#define FRAME_death222 272
|
||||
#define FRAME_death223 273
|
||||
#define FRAME_death224 274
|
||||
#define FRAME_death225 275
|
||||
#define FRAME_death226 276
|
||||
#define FRAME_death227 277
|
||||
#define FRAME_death228 278
|
||||
#define FRAME_death229 279
|
||||
#define FRAME_death230 280
|
||||
#define FRAME_death231 281
|
||||
#define FRAME_death232 282
|
||||
#define FRAME_death233 283
|
||||
#define FRAME_death234 284
|
||||
#define FRAME_death235 285
|
||||
#define FRAME_death236 286
|
||||
#define FRAME_death237 287
|
||||
#define FRAME_death238 288
|
||||
#define FRAME_death239 289
|
||||
#define FRAME_death240 290
|
||||
#define FRAME_death241 291
|
||||
#define FRAME_death242 292
|
||||
#define FRAME_death243 293
|
||||
#define FRAME_death244 294
|
||||
#define FRAME_death245 295
|
||||
#define FRAME_death246 296
|
||||
#define FRAME_death247 297
|
||||
#define FRAME_death248 298
|
||||
#define FRAME_death249 299
|
||||
#define FRAME_death250 300
|
||||
#define FRAME_death251 301
|
||||
#define FRAME_death252 302
|
||||
#define FRAME_death253 303
|
||||
#define FRAME_death254 304
|
||||
#define FRAME_death255 305
|
||||
#define FRAME_death256 306
|
||||
#define FRAME_death257 307
|
||||
#define FRAME_death258 308
|
||||
#define FRAME_death259 309
|
||||
#define FRAME_death260 310
|
||||
#define FRAME_death261 311
|
||||
#define FRAME_death262 312
|
||||
#define FRAME_death263 313
|
||||
#define FRAME_death264 314
|
||||
#define FRAME_death265 315
|
||||
#define FRAME_death266 316
|
||||
#define FRAME_death267 317
|
||||
#define FRAME_death268 318
|
||||
#define FRAME_death269 319
|
||||
#define FRAME_death270 320
|
||||
#define FRAME_death271 321
|
||||
#define FRAME_death272 322
|
||||
#define FRAME_death273 323
|
||||
#define FRAME_death274 324
|
||||
#define FRAME_death275 325
|
||||
#define FRAME_death276 326
|
||||
#define FRAME_death277 327
|
||||
#define FRAME_death278 328
|
||||
#define FRAME_death279 329
|
||||
#define FRAME_death280 330
|
||||
#define FRAME_death281 331
|
||||
#define FRAME_death282 332
|
||||
#define FRAME_death283 333
|
||||
#define FRAME_death284 334
|
||||
#define FRAME_death285 335
|
||||
#define FRAME_death286 336
|
||||
#define FRAME_death287 337
|
||||
#define FRAME_death288 338
|
||||
#define FRAME_death289 339
|
||||
#define FRAME_death290 340
|
||||
#define FRAME_death291 341
|
||||
#define FRAME_death292 342
|
||||
#define FRAME_death293 343
|
||||
#define FRAME_death294 344
|
||||
#define FRAME_death295 345
|
||||
#define FRAME_death301 346
|
||||
#define FRAME_death302 347
|
||||
#define FRAME_death303 348
|
||||
#define FRAME_death304 349
|
||||
#define FRAME_death305 350
|
||||
#define FRAME_death306 351
|
||||
#define FRAME_death307 352
|
||||
#define FRAME_death308 353
|
||||
#define FRAME_death309 354
|
||||
#define FRAME_death310 355
|
||||
#define FRAME_death311 356
|
||||
#define FRAME_death312 357
|
||||
#define FRAME_death313 358
|
||||
#define FRAME_death314 359
|
||||
#define FRAME_death315 360
|
||||
#define FRAME_death316 361
|
||||
#define FRAME_death317 362
|
||||
#define FRAME_death318 363
|
||||
#define FRAME_death319 364
|
||||
#define FRAME_death320 365
|
||||
#define FRAME_jump01 366
|
||||
#define FRAME_jump02 367
|
||||
#define FRAME_jump03 368
|
||||
#define FRAME_jump04 369
|
||||
#define FRAME_jump05 370
|
||||
#define FRAME_jump06 371
|
||||
#define FRAME_jump07 372
|
||||
#define FRAME_jump08 373
|
||||
#define FRAME_jump09 374
|
||||
#define FRAME_jump10 375
|
||||
#define FRAME_jump11 376
|
||||
#define FRAME_jump12 377
|
||||
#define FRAME_jump13 378
|
||||
#define FRAME_pain401 379
|
||||
#define FRAME_pain402 380
|
||||
#define FRAME_pain403 381
|
||||
#define FRAME_pain404 382
|
||||
#define FRAME_pain501 383
|
||||
#define FRAME_pain502 384
|
||||
#define FRAME_pain503 385
|
||||
#define FRAME_pain504 386
|
||||
#define FRAME_pain601 387
|
||||
#define FRAME_pain602 388
|
||||
#define FRAME_pain603 389
|
||||
#define FRAME_pain604 390
|
||||
#define FRAME_pain605 391
|
||||
#define FRAME_pain606 392
|
||||
#define FRAME_pain607 393
|
||||
#define FRAME_pain608 394
|
||||
#define FRAME_pain609 395
|
||||
#define FRAME_pain610 396
|
||||
#define FRAME_pain611 397
|
||||
#define FRAME_pain612 398
|
||||
#define FRAME_pain613 399
|
||||
#define FRAME_pain614 400
|
||||
#define FRAME_pain615 401
|
||||
#define FRAME_pain616 402
|
||||
#define FRAME_pain617 403
|
||||
#define FRAME_pain618 404
|
||||
#define FRAME_pain619 405
|
||||
#define FRAME_pain620 406
|
||||
#define FRAME_pain621 407
|
||||
#define FRAME_pain622 408
|
||||
#define FRAME_pain623 409
|
||||
#define FRAME_pain624 410
|
||||
#define FRAME_pain625 411
|
||||
#define FRAME_pain626 412
|
||||
#define FRAME_pain627 413
|
||||
#define FRAME_stand201 414
|
||||
#define FRAME_stand202 415
|
||||
#define FRAME_stand203 416
|
||||
#define FRAME_stand204 417
|
||||
#define FRAME_stand205 418
|
||||
#define FRAME_stand206 419
|
||||
#define FRAME_stand207 420
|
||||
#define FRAME_stand208 421
|
||||
#define FRAME_stand209 422
|
||||
#define FRAME_stand210 423
|
||||
#define FRAME_stand211 424
|
||||
#define FRAME_stand212 425
|
||||
#define FRAME_stand213 426
|
||||
#define FRAME_stand214 427
|
||||
#define FRAME_stand215 428
|
||||
#define FRAME_stand216 429
|
||||
#define FRAME_stand217 430
|
||||
#define FRAME_stand218 431
|
||||
#define FRAME_stand219 432
|
||||
#define FRAME_stand220 433
|
||||
#define FRAME_stand221 434
|
||||
#define FRAME_stand222 435
|
||||
#define FRAME_stand223 436
|
||||
#define FRAME_stand224 437
|
||||
#define FRAME_stand225 438
|
||||
#define FRAME_stand226 439
|
||||
#define FRAME_stand227 440
|
||||
#define FRAME_stand228 441
|
||||
#define FRAME_stand229 442
|
||||
#define FRAME_stand230 443
|
||||
#define FRAME_stand231 444
|
||||
#define FRAME_stand232 445
|
||||
#define FRAME_stand233 446
|
||||
#define FRAME_stand234 447
|
||||
#define FRAME_stand235 448
|
||||
#define FRAME_stand236 449
|
||||
#define FRAME_stand237 450
|
||||
#define FRAME_stand238 451
|
||||
#define FRAME_stand239 452
|
||||
#define FRAME_stand240 453
|
||||
#define FRAME_stand241 454
|
||||
#define FRAME_stand242 455
|
||||
#define FRAME_stand243 456
|
||||
#define FRAME_stand244 457
|
||||
#define FRAME_stand245 458
|
||||
#define FRAME_stand246 459
|
||||
#define FRAME_stand247 460
|
||||
#define FRAME_stand248 461
|
||||
#define FRAME_stand249 462
|
||||
#define FRAME_stand250 463
|
||||
#define FRAME_stand251 464
|
||||
#define FRAME_stand252 465
|
||||
#define FRAME_stand253 466
|
||||
#define FRAME_stand254 467
|
||||
#define FRAME_stand255 468
|
||||
#define FRAME_stand256 469
|
||||
#define FRAME_stand257 470
|
||||
#define FRAME_stand258 471
|
||||
#define FRAME_stand259 472
|
||||
#define FRAME_stand260 473
|
||||
#define FRAME_walk201 474
|
||||
#define FRAME_walk202 475
|
||||
#define FRAME_walk203 476
|
||||
#define FRAME_walk204 477
|
||||
#define FRAME_walk205 478
|
||||
#define FRAME_walk206 479
|
||||
#define FRAME_walk207 480
|
||||
#define FRAME_walk208 481
|
||||
#define FRAME_walk209 482
|
||||
#define FRAME_walk210 483
|
||||
#define FRAME_walk211 484
|
||||
#define FRAME_walk212 485
|
||||
#define FRAME_walk213 486
|
||||
#define FRAME_walk214 487
|
||||
#define FRAME_walk215 488
|
||||
#define FRAME_walk216 489
|
||||
#define FRAME_walk217 490
|
||||
#define MODEL_SCALE 1.000000
|
Loading…
Reference in a new issue