game: restore rerelease target_actor used in biggun

This commit is contained in:
Denis Pauk 2023-11-09 00:56:03 +02:00
parent 081d0fffa4
commit 6aece83adb
4 changed files with 1179 additions and 0 deletions

View file

@ -891,6 +891,7 @@ GAME_OBJS_ = \
src/game/dm/ball.o \
src/game/dm/tag.o \
src/game/menu/menu.o \
src/game/monster/actor/actor.o \
src/game/monster/arachnid/arachnid.o \
src/game/monster/berserker/berserker.o \
src/game/monster/boss2/boss2.o \

View file

@ -275,6 +275,7 @@ static spawn_t spawns[] = {
{"target_crosslevel_target", SP_target_crosslevel_target},
{"target_laser", SP_target_laser},
{"target_help", SP_target_help},
{"target_actor", SP_target_actor},
{"target_lightramp", SP_target_lightramp},
{"target_earthquake", SP_target_earthquake},
{"target_music", SP_target_music},
@ -299,6 +300,7 @@ static spawn_t spawns[] = {
{"misc_banner", SP_misc_banner},
{"misc_ctf_banner", SP_misc_ctf_banner},
{"misc_ctf_small_banner", SP_misc_ctf_small_banner},
{"misc_actor", SP_misc_actor},
{"misc_satellite_dish", SP_misc_satellite_dish},
{"misc_gib_arm", SP_misc_gib_arm},
{"misc_gib_leg", SP_misc_gib_leg},

View file

@ -0,0 +1,671 @@
/*
* 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.
*
*/
#include "../../header/local.h"
#include "actor.h"
#define MAX_ACTOR_NAMES 8
char *actor_names[MAX_ACTOR_NAMES] =
{
"Hellrot",
"Tokay",
"Killme",
"Disruptor",
"Adrianator",
"Rambear",
"Titus",
"Bitterman"
};
static mframe_t actor_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 actor_move_stand = {
FRAME_stand101,
FRAME_stand140,
actor_frames_stand,
NULL
};
void actor_stand (edict_t *self)
{
self->monsterinfo.currentmove = &actor_move_stand;
// randomize on startup
if (level.time < 1.0)
{
self->s.frame = self->monsterinfo.currentmove->firstframe + (rand() % (self->monsterinfo.currentmove->lastframe - self->monsterinfo.currentmove->firstframe + 1));
}
}
static mframe_t actor_frames_walk [] =
{
{ai_walk, 0, NULL},
{ai_walk, 6, NULL},
{ai_walk, 10, NULL},
{ai_walk, 3, NULL},
{ai_walk, 2, NULL},
{ai_walk, 7, NULL},
{ai_walk, 10, NULL},
{ai_walk, 1, NULL},
{ai_walk, 4, NULL},
{ai_walk, 0, NULL},
{ai_walk, 0, NULL}
};
mmove_t actor_move_walk = {
FRAME_walk01,
FRAME_walk08,
actor_frames_walk,
NULL
};
void actor_walk (edict_t *self)
{
self->monsterinfo.currentmove = &actor_move_walk;
}
static mframe_t actor_frames_run [] =
{
{ai_run, 4, NULL},
{ai_run, 15, NULL},
{ai_run, 15, NULL},
{ai_run, 8, NULL},
{ai_run, 20, NULL},
{ai_run, 15, NULL},
{ai_run, 8, NULL},
{ai_run, 17, NULL},
{ai_run, 12, NULL},
{ai_run, -2, NULL},
{ai_run, -2, NULL},
{ai_run, -1, NULL}
};
mmove_t actor_move_run = {FRAME_run02, FRAME_run07, actor_frames_run, NULL};
void actor_run (edict_t *self)
{
if ((level.time < self->pain_debounce_time) && (!self->enemy))
{
if (self->movetarget)
{
actor_walk(self);
}
else
{
actor_stand(self);
}
return;
}
if (self->monsterinfo.aiflags & AI_STAND_GROUND)
{
actor_stand(self);
return;
}
self->monsterinfo.currentmove = &actor_move_run;
}
static mframe_t actor_frames_pain1 [] =
{
{ai_move, -5, NULL},
{ai_move, 4, NULL},
{ai_move, 1, NULL}
};
mmove_t actor_move_pain1 = {
FRAME_pain101,
FRAME_pain103,
actor_frames_pain1,
actor_run
};
static mframe_t actor_frames_pain2 [] =
{
{ai_move, -4, NULL},
{ai_move, 4, NULL},
{ai_move, 0, NULL}
};
mmove_t actor_move_pain2 = {
FRAME_pain201,
FRAME_pain203,
actor_frames_pain2,
actor_run
};
static mframe_t actor_frames_pain3 [] =
{
{ai_move, -1, NULL},
{ai_move, 1, NULL},
{ai_move, 0, NULL}
};
mmove_t actor_move_pain3 = {
FRAME_pain301,
FRAME_pain303,
actor_frames_pain3,
actor_run
};
static mframe_t actor_frames_flipoff [] =
{
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL}
};
mmove_t actor_move_flipoff = {
FRAME_flip01,
FRAME_flip14,
actor_frames_flipoff,
actor_run
};
static mframe_t actor_frames_taunt [] =
{
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL},
{ai_turn, 0, NULL}
};
mmove_t actor_move_taunt = {
FRAME_taunt01,
FRAME_taunt17,
actor_frames_taunt,
actor_run
};
char *messages[] =
{
"Watch it",
"#$@*&",
"Idiot",
"Check your targets"
};
void actor_pain (edict_t *self, edict_t *other, float kick, int damage)
{
int n;
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;
// gi.sound (self, CHAN_VOICE, actor.sound_pain, 1, ATTN_NORM, 0);
if ((other->client) && (random() < 0.4))
{
vec3_t v;
char *name;
VectorSubtract (other->s.origin, self->s.origin, v);
self->ideal_yaw = vectoyaw (v);
if (random() < 0.5)
self->monsterinfo.currentmove = &actor_move_flipoff;
else
self->monsterinfo.currentmove = &actor_move_taunt;
name = actor_names[(self - g_edicts)%MAX_ACTOR_NAMES];
gi.cprintf (other, PRINT_CHAT, "%s: %s!\n", name, messages[rand()%3]);
return;
}
n = rand() % 3;
if (n == 0)
self->monsterinfo.currentmove = &actor_move_pain1;
else if (n == 1)
self->monsterinfo.currentmove = &actor_move_pain2;
else
self->monsterinfo.currentmove = &actor_move_pain3;
}
void actorMachineGun (edict_t *self)
{
vec3_t start, target;
vec3_t forward, right;
AngleVectors (self->s.angles, forward, right, NULL);
G_ProjectSource (self->s.origin, monster_flash_offset[MZ2_ACTOR_MACHINEGUN_1], forward, right, start);
if (self->enemy)
{
if (self->enemy->health > 0)
{
VectorMA (self->enemy->s.origin, -0.2, self->enemy->velocity, target);
target[2] += self->enemy->viewheight;
}
else
{
VectorCopy (self->enemy->absmin, target);
target[2] += (self->enemy->size[2] / 2);
}
VectorSubtract (target, start, forward);
VectorNormalize (forward);
}
else
{
AngleVectors (self->s.angles, forward, NULL, NULL);
}
monster_fire_bullet (self, start, forward, 3, 4, DEFAULT_BULLET_HSPREAD, DEFAULT_BULLET_VSPREAD, MZ2_ACTOR_MACHINEGUN_1);
}
void actor_dead (edict_t *self)
{
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);
}
static mframe_t actor_frames_death1 [] =
{
{ai_move, 0, NULL},
{ai_move, 0, NULL},
{ai_move, -13, NULL},
{ai_move, 14, NULL},
{ai_move, 3, NULL},
{ai_move, -2, NULL},
{ai_move, 1, NULL}
};
mmove_t actor_move_death1 = {
FRAME_death101,
FRAME_death107,
actor_frames_death1,
actor_dead
};
static mframe_t actor_frames_death2 [] =
{
{ai_move, 0, NULL},
{ai_move, 7, NULL},
{ai_move, -6, NULL},
{ai_move, -5, NULL},
{ai_move, 1, NULL},
{ai_move, 0, NULL},
{ai_move, -1, NULL},
{ai_move, -2, NULL},
{ai_move, -1, NULL},
{ai_move, -9, NULL},
{ai_move, -13, NULL},
{ai_move, -13, NULL},
{ai_move, 0, NULL}
};
mmove_t actor_move_death2 = {
FRAME_death201,
FRAME_death213,
actor_frames_death2,
actor_dead
};
void actor_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
{
int n;
// check for gib
if (self->health <= -80)
{
// gi.sound (self, CHAN_VOICE, actor.sound_gib, 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, actor.sound_die, 1, ATTN_NORM, 0);
self->deadflag = DEAD_DEAD;
self->takedamage = DAMAGE_YES;
n = rand() % 2;
if (n == 0)
self->monsterinfo.currentmove = &actor_move_death1;
else
self->monsterinfo.currentmove = &actor_move_death2;
}
void actor_fire (edict_t *self)
{
actorMachineGun (self);
if (level.time >= self->monsterinfo.pausetime)
self->monsterinfo.aiflags &= ~AI_HOLD_FRAME;
else
self->monsterinfo.aiflags |= AI_HOLD_FRAME;
}
static mframe_t actor_frames_attack [] =
{
{ai_charge, -2, actor_fire},
{ai_charge, -2, NULL},
{ai_charge, 3, NULL},
{ai_charge, 2, NULL}
};
mmove_t actor_move_attack = {
FRAME_attak01,
FRAME_attak04,
actor_frames_attack,
actor_run
};
void actor_attack(edict_t *self)
{
int n;
self->monsterinfo.currentmove = &actor_move_attack;
n = (rand() & 15) + 3 + 7;
self->monsterinfo.pausetime = level.time + n * FRAMETIME;
}
void actor_use (edict_t *self, edict_t *other, edict_t *activator)
{
vec3_t v;
self->goalentity = self->movetarget = G_PickTarget(self->target);
if ((!self->movetarget) || (strcmp(self->movetarget->classname, "target_actor") != 0))
{
gi.dprintf ("%s has bad target %s at %s\n", self->classname, self->target, vtos(self->s.origin));
self->target = NULL;
self->monsterinfo.pausetime = 100000000;
self->monsterinfo.stand (self);
return;
}
VectorSubtract (self->goalentity->s.origin, self->s.origin, v);
self->ideal_yaw = self->s.angles[YAW] = vectoyaw(v);
self->monsterinfo.walk (self);
self->target = NULL;
}
/*QUAKED misc_actor (1 .5 0) (-16 -16 -24) (16 16 32)
*/
void SP_misc_actor (edict_t *self)
{
if (deathmatch->value)
{
G_FreeEdict (self);
return;
}
if (!self->targetname)
{
gi.dprintf("untargeted %s at %s\n", self->classname, vtos(self->s.origin));
G_FreeEdict (self);
return;
}
if (!self->target)
{
gi.dprintf("%s with no target at %s\n", self->classname, vtos(self->s.origin));
G_FreeEdict (self);
return;
}
self->movetype = MOVETYPE_STEP;
self->solid = SOLID_BBOX;
self->s.modelindex = gi.modelindex("players/male/tris.md2");
VectorSet (self->mins, -16, -16, -24);
VectorSet (self->maxs, 16, 16, 32);
if (!self->health)
self->health = 100;
self->mass = 200;
self->pain = actor_pain;
self->die = actor_die;
self->monsterinfo.stand = actor_stand;
self->monsterinfo.walk = actor_walk;
self->monsterinfo.run = actor_run;
self->monsterinfo.attack = actor_attack;
self->monsterinfo.melee = NULL;
self->monsterinfo.sight = NULL;
self->monsterinfo.aiflags |= AI_GOOD_GUY;
gi.linkentity (self);
self->monsterinfo.currentmove = &actor_move_stand;
self->monsterinfo.scale = MODEL_SCALE;
walkmonster_start (self);
// actors always start in a dormant state, they *must* be used to get going
self->use = actor_use;
}
/*QUAKED target_actor (.5 .3 0) (-8 -8 -8) (8 8 8) JUMP SHOOT ATTACK x HOLD BRUTAL
JUMP jump in set direction upon reaching this target
SHOOT take a single shot at the pathtarget
ATTACK attack pathtarget until it or actor is dead
"target" next target_actor
"pathtarget" target of any action to be taken at this point
"wait" amount of time actor should pause at this point
"message" actor will "say" this to the player
for JUMP only:
"speed" speed thrown forward (default 200)
"height" speed thrown upwards (default 200)
*/
void target_actor_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf)
{
vec3_t v;
if (other->movetarget != self)
return;
if (other->enemy)
return;
other->goalentity = other->movetarget = NULL;
if (self->message)
{
int n;
edict_t *ent;
for (n = 1; n <= game.maxclients; n++)
{
ent = &g_edicts[n];
if (!ent->inuse)
continue;
gi.cprintf (ent, PRINT_CHAT, "%s: %s\n", actor_names[(other - g_edicts)%MAX_ACTOR_NAMES], self->message);
}
}
if (self->spawnflags & 1) //jump
{
other->velocity[0] = self->movedir[0] * self->speed;
other->velocity[1] = self->movedir[1] * self->speed;
if (other->groundentity)
{
other->groundentity = NULL;
other->velocity[2] = self->movedir[2];
gi.sound(other, CHAN_VOICE, gi.soundindex("player/male/jump1.wav"), 1, ATTN_NORM, 0);
}
}
if (self->spawnflags & 2) //shoot
{
}
else if (self->spawnflags & 4) //attack
{
other->enemy = G_PickTarget(self->pathtarget);
if (other->enemy)
{
other->goalentity = other->enemy;
if (self->spawnflags & 32)
other->monsterinfo.aiflags |= AI_BRUTAL;
if (self->spawnflags & 16)
{
other->monsterinfo.aiflags |= AI_STAND_GROUND;
actor_stand (other);
}
else
{
actor_run (other);
}
}
}
if (!(self->spawnflags & 6) && (self->pathtarget))
{
char *savetarget;
savetarget = self->target;
self->target = self->pathtarget;
G_UseTargets (self, other);
self->target = savetarget;
}
other->movetarget = G_PickTarget(self->target);
if (!other->goalentity)
other->goalentity = other->movetarget;
if (!other->movetarget && !other->enemy)
{
other->monsterinfo.pausetime = level.time + 100000000;
other->monsterinfo.stand (other);
}
else if (other->movetarget == other->goalentity)
{
VectorSubtract (other->movetarget->s.origin, other->s.origin, v);
other->ideal_yaw = vectoyaw (v);
}
}
void SP_target_actor (edict_t *self)
{
if (!self->targetname)
{
gi.dprintf ("%s with no targetname at %s\n",
self->classname, vtos(self->s.origin));
}
self->solid = SOLID_TRIGGER;
self->touch = target_actor_touch;
VectorSet (self->mins, -8, -8, -8);
VectorSet (self->maxs, 8, 8, 8);
self->svflags = SVF_NOCLIENT;
if (self->spawnflags & 1)
{
if (!self->speed)
self->speed = 200;
if (!st.height)
st.height = 200;
if (self->s.angles[YAW] == 0)
self->s.angles[YAW] = 360;
G_SetMovedir (self->s.angles, self->movedir);
self->movedir[2] = st.height;
}
gi.linkentity (self);
}

View file

@ -0,0 +1,505 @@
/*
* 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.
*
*/
#define FRAME_attak01 0
#define FRAME_attak02 1
#define FRAME_attak03 2
#define FRAME_attak04 3
#define FRAME_death101 4
#define FRAME_death102 5
#define FRAME_death103 6
#define FRAME_death104 7
#define FRAME_death105 8
#define FRAME_death106 9
#define FRAME_death107 10
#define FRAME_death201 11
#define FRAME_death202 12
#define FRAME_death203 13
#define FRAME_death204 14
#define FRAME_death205 15
#define FRAME_death206 16
#define FRAME_death207 17
#define FRAME_death208 18
#define FRAME_death209 19
#define FRAME_death210 20
#define FRAME_death211 21
#define FRAME_death212 22
#define FRAME_death213 23
#define FRAME_death301 24
#define FRAME_death302 25
#define FRAME_death303 26
#define FRAME_death304 27
#define FRAME_death305 28
#define FRAME_death306 29
#define FRAME_death307 30
#define FRAME_death308 31
#define FRAME_death309 32
#define FRAME_death310 33
#define FRAME_death311 34
#define FRAME_death312 35
#define FRAME_death313 36
#define FRAME_death314 37
#define FRAME_death315 38
#define FRAME_flip01 39
#define FRAME_flip02 40
#define FRAME_flip03 41
#define FRAME_flip04 42
#define FRAME_flip05 43
#define FRAME_flip06 44
#define FRAME_flip07 45
#define FRAME_flip08 46
#define FRAME_flip09 47
#define FRAME_flip10 48
#define FRAME_flip11 49
#define FRAME_flip12 50
#define FRAME_flip13 51
#define FRAME_flip14 52
#define FRAME_grenad01 53
#define FRAME_grenad02 54
#define FRAME_grenad03 55
#define FRAME_grenad04 56
#define FRAME_grenad05 57
#define FRAME_grenad06 58
#define FRAME_grenad07 59
#define FRAME_grenad08 60
#define FRAME_grenad09 61
#define FRAME_grenad10 62
#define FRAME_grenad11 63
#define FRAME_grenad12 64
#define FRAME_grenad13 65
#define FRAME_grenad14 66
#define FRAME_grenad15 67
#define FRAME_jump01 68
#define FRAME_jump02 69
#define FRAME_jump03 70
#define FRAME_jump04 71
#define FRAME_jump05 72
#define FRAME_jump06 73
#define FRAME_pain101 74
#define FRAME_pain102 75
#define FRAME_pain103 76
#define FRAME_pain201 77
#define FRAME_pain202 78
#define FRAME_pain203 79
#define FRAME_pain301 80
#define FRAME_pain302 81
#define FRAME_pain303 82
#define FRAME_push01 83
#define FRAME_push02 84
#define FRAME_push03 85
#define FRAME_push04 86
#define FRAME_push05 87
#define FRAME_push06 88
#define FRAME_push07 89
#define FRAME_push08 90
#define FRAME_push09 91
#define FRAME_run01 92
#define FRAME_run02 93
#define FRAME_run03 94
#define FRAME_run04 95
#define FRAME_run05 96
#define FRAME_run06 97
#define FRAME_run07 98
#define FRAME_run08 99
#define FRAME_run09 100
#define FRAME_run10 101
#define FRAME_run11 102
#define FRAME_run12 103
#define FRAME_runs01 104
#define FRAME_runs02 105
#define FRAME_runs03 106
#define FRAME_runs04 107
#define FRAME_runs05 108
#define FRAME_runs06 109
#define FRAME_runs07 110
#define FRAME_runs08 111
#define FRAME_runs09 112
#define FRAME_runs10 113
#define FRAME_runs11 114
#define FRAME_runs12 115
#define FRAME_salute01 116
#define FRAME_salute02 117
#define FRAME_salute03 118
#define FRAME_salute04 119
#define FRAME_salute05 120
#define FRAME_salute06 121
#define FRAME_salute07 122
#define FRAME_salute08 123
#define FRAME_salute09 124
#define FRAME_salute10 125
#define FRAME_salute11 126
#define FRAME_salute12 127
#define FRAME_stand101 128
#define FRAME_stand102 129
#define FRAME_stand103 130
#define FRAME_stand104 131
#define FRAME_stand105 132
#define FRAME_stand106 133
#define FRAME_stand107 134
#define FRAME_stand108 135
#define FRAME_stand109 136
#define FRAME_stand110 137
#define FRAME_stand111 138
#define FRAME_stand112 139
#define FRAME_stand113 140
#define FRAME_stand114 141
#define FRAME_stand115 142
#define FRAME_stand116 143
#define FRAME_stand117 144
#define FRAME_stand118 145
#define FRAME_stand119 146
#define FRAME_stand120 147
#define FRAME_stand121 148
#define FRAME_stand122 149
#define FRAME_stand123 150
#define FRAME_stand124 151
#define FRAME_stand125 152
#define FRAME_stand126 153
#define FRAME_stand127 154
#define FRAME_stand128 155
#define FRAME_stand129 156
#define FRAME_stand130 157
#define FRAME_stand131 158
#define FRAME_stand132 159
#define FRAME_stand133 160
#define FRAME_stand134 161
#define FRAME_stand135 162
#define FRAME_stand136 163
#define FRAME_stand137 164
#define FRAME_stand138 165
#define FRAME_stand139 166
#define FRAME_stand140 167
#define FRAME_stand201 168
#define FRAME_stand202 169
#define FRAME_stand203 170
#define FRAME_stand204 171
#define FRAME_stand205 172
#define FRAME_stand206 173
#define FRAME_stand207 174
#define FRAME_stand208 175
#define FRAME_stand209 176
#define FRAME_stand210 177
#define FRAME_stand211 178
#define FRAME_stand212 179
#define FRAME_stand213 180
#define FRAME_stand214 181
#define FRAME_stand215 182
#define FRAME_stand216 183
#define FRAME_stand217 184
#define FRAME_stand218 185
#define FRAME_stand219 186
#define FRAME_stand220 187
#define FRAME_stand221 188
#define FRAME_stand222 189
#define FRAME_stand223 190
#define FRAME_swim01 191
#define FRAME_swim02 192
#define FRAME_swim03 193
#define FRAME_swim04 194
#define FRAME_swim05 195
#define FRAME_swim06 196
#define FRAME_swim07 197
#define FRAME_swim08 198
#define FRAME_swim09 199
#define FRAME_swim10 200
#define FRAME_swim11 201
#define FRAME_swim12 202
#define FRAME_sw_atk01 203
#define FRAME_sw_atk02 204
#define FRAME_sw_atk03 205
#define FRAME_sw_atk04 206
#define FRAME_sw_atk05 207
#define FRAME_sw_atk06 208
#define FRAME_sw_pan01 209
#define FRAME_sw_pan02 210
#define FRAME_sw_pan03 211
#define FRAME_sw_pan04 212
#define FRAME_sw_pan05 213
#define FRAME_sw_std01 214
#define FRAME_sw_std02 215
#define FRAME_sw_std03 216
#define FRAME_sw_std04 217
#define FRAME_sw_std05 218
#define FRAME_sw_std06 219
#define FRAME_sw_std07 220
#define FRAME_sw_std08 221
#define FRAME_sw_std09 222
#define FRAME_sw_std10 223
#define FRAME_sw_std11 224
#define FRAME_sw_std12 225
#define FRAME_sw_std13 226
#define FRAME_sw_std14 227
#define FRAME_sw_std15 228
#define FRAME_sw_std16 229
#define FRAME_sw_std17 230
#define FRAME_sw_std18 231
#define FRAME_sw_std19 232
#define FRAME_sw_std20 233
#define FRAME_taunt01 234
#define FRAME_taunt02 235
#define FRAME_taunt03 236
#define FRAME_taunt04 237
#define FRAME_taunt05 238
#define FRAME_taunt06 239
#define FRAME_taunt07 240
#define FRAME_taunt08 241
#define FRAME_taunt09 242
#define FRAME_taunt10 243
#define FRAME_taunt11 244
#define FRAME_taunt12 245
#define FRAME_taunt13 246
#define FRAME_taunt14 247
#define FRAME_taunt15 248
#define FRAME_taunt16 249
#define FRAME_taunt17 250
#define FRAME_walk01 251
#define FRAME_walk02 252
#define FRAME_walk03 253
#define FRAME_walk04 254
#define FRAME_walk05 255
#define FRAME_walk06 256
#define FRAME_walk07 257
#define FRAME_walk08 258
#define FRAME_walk09 259
#define FRAME_walk10 260
#define FRAME_walk11 261
#define FRAME_wave01 262
#define FRAME_wave02 263
#define FRAME_wave03 264
#define FRAME_wave04 265
#define FRAME_wave05 266
#define FRAME_wave06 267
#define FRAME_wave07 268
#define FRAME_wave08 269
#define FRAME_wave09 270
#define FRAME_wave10 271
#define FRAME_wave11 272
#define FRAME_wave12 273
#define FRAME_wave13 274
#define FRAME_wave14 275
#define FRAME_wave15 276
#define FRAME_wave16 277
#define FRAME_wave17 278
#define FRAME_wave18 279
#define FRAME_wave19 280
#define FRAME_wave20 281
#define FRAME_wave21 282
#define FRAME_bl_atk01 283
#define FRAME_bl_atk02 284
#define FRAME_bl_atk03 285
#define FRAME_bl_atk04 286
#define FRAME_bl_atk05 287
#define FRAME_bl_atk06 288
#define FRAME_bl_flp01 289
#define FRAME_bl_flp02 290
#define FRAME_bl_flp13 291
#define FRAME_bl_flp14 292
#define FRAME_bl_flp15 293
#define FRAME_bl_jmp01 294
#define FRAME_bl_jmp02 295
#define FRAME_bl_jmp03 296
#define FRAME_bl_jmp04 297
#define FRAME_bl_jmp05 298
#define FRAME_bl_jmp06 299
#define FRAME_bl_pn101 300
#define FRAME_bl_pn102 301
#define FRAME_bl_pn103 302
#define FRAME_bl_pn201 303
#define FRAME_bl_pn202 304
#define FRAME_bl_pn203 305
#define FRAME_bl_pn301 306
#define FRAME_bl_pn302 307
#define FRAME_bl_pn303 308
#define FRAME_bl_psh08 309
#define FRAME_bl_psh09 310
#define FRAME_bl_run01 311
#define FRAME_bl_run02 312
#define FRAME_bl_run03 313
#define FRAME_bl_run04 314
#define FRAME_bl_run05 315
#define FRAME_bl_run06 316
#define FRAME_bl_run07 317
#define FRAME_bl_run08 318
#define FRAME_bl_run09 319
#define FRAME_bl_run10 320
#define FRAME_bl_run11 321
#define FRAME_bl_run12 322
#define FRAME_bl_rns03 323
#define FRAME_bl_rns04 324
#define FRAME_bl_rns05 325
#define FRAME_bl_rns06 326
#define FRAME_bl_rns07 327
#define FRAME_bl_rns08 328
#define FRAME_bl_rns09 329
#define FRAME_bl_sal10 330
#define FRAME_bl_sal11 331
#define FRAME_bl_sal12 332
#define FRAME_bl_std01 333
#define FRAME_bl_std02 334
#define FRAME_bl_std03 335
#define FRAME_bl_std04 336
#define FRAME_bl_std05 337
#define FRAME_bl_std06 338
#define FRAME_bl_std07 339
#define FRAME_bl_std08 340
#define FRAME_bl_std09 341
#define FRAME_bl_std10 342
#define FRAME_bl_std11 343
#define FRAME_bl_std12 344
#define FRAME_bl_std13 345
#define FRAME_bl_std14 346
#define FRAME_bl_std15 347
#define FRAME_bl_std16 348
#define FRAME_bl_std17 349
#define FRAME_bl_std18 350
#define FRAME_bl_std19 351
#define FRAME_bl_std20 352
#define FRAME_bl_std21 353
#define FRAME_bl_std22 354
#define FRAME_bl_std23 355
#define FRAME_bl_std24 356
#define FRAME_bl_std25 357
#define FRAME_bl_std26 358
#define FRAME_bl_std27 359
#define FRAME_bl_std28 360
#define FRAME_bl_std29 361
#define FRAME_bl_std30 362
#define FRAME_bl_std31 363
#define FRAME_bl_std32 364
#define FRAME_bl_std33 365
#define FRAME_bl_std34 366
#define FRAME_bl_std35 367
#define FRAME_bl_std36 368
#define FRAME_bl_std37 369
#define FRAME_bl_std38 370
#define FRAME_bl_std39 371
#define FRAME_bl_std40 372
#define FRAME_bl_swm01 373
#define FRAME_bl_swm02 374
#define FRAME_bl_swm03 375
#define FRAME_bl_swm04 376
#define FRAME_bl_swm05 377
#define FRAME_bl_swm06 378
#define FRAME_bl_swm07 379
#define FRAME_bl_swm08 380
#define FRAME_bl_swm09 381
#define FRAME_bl_swm10 382
#define FRAME_bl_swm11 383
#define FRAME_bl_swm12 384
#define FRAME_bl_swk01 385
#define FRAME_bl_swk02 386
#define FRAME_bl_swk03 387
#define FRAME_bl_swk04 388
#define FRAME_bl_swk05 389
#define FRAME_bl_swk06 390
#define FRAME_bl_swp01 391
#define FRAME_bl_swp02 392
#define FRAME_bl_swp03 393
#define FRAME_bl_swp04 394
#define FRAME_bl_swp05 395
#define FRAME_bl_sws01 396
#define FRAME_bl_sws02 397
#define FRAME_bl_sws03 398
#define FRAME_bl_sws04 399
#define FRAME_bl_sws05 400
#define FRAME_bl_sws06 401
#define FRAME_bl_sws07 402
#define FRAME_bl_sws08 403
#define FRAME_bl_sws09 404
#define FRAME_bl_sws10 405
#define FRAME_bl_sws11 406
#define FRAME_bl_sws12 407
#define FRAME_bl_sws13 408
#define FRAME_bl_sws14 409
#define FRAME_bl_tau14 410
#define FRAME_bl_tau15 411
#define FRAME_bl_tau16 412
#define FRAME_bl_tau17 413
#define FRAME_bl_wlk01 414
#define FRAME_bl_wlk02 415
#define FRAME_bl_wlk03 416
#define FRAME_bl_wlk04 417
#define FRAME_bl_wlk05 418
#define FRAME_bl_wlk06 419
#define FRAME_bl_wlk07 420
#define FRAME_bl_wlk08 421
#define FRAME_bl_wlk09 422
#define FRAME_bl_wlk10 423
#define FRAME_bl_wlk11 424
#define FRAME_bl_wav19 425
#define FRAME_bl_wav20 426
#define FRAME_bl_wav21 427
#define FRAME_cr_atk01 428
#define FRAME_cr_atk02 429
#define FRAME_cr_atk03 430
#define FRAME_cr_atk04 431
#define FRAME_cr_atk05 432
#define FRAME_cr_atk06 433
#define FRAME_cr_atk07 434
#define FRAME_cr_atk08 435
#define FRAME_cr_pan01 436
#define FRAME_cr_pan02 437
#define FRAME_cr_pan03 438
#define FRAME_cr_pan04 439
#define FRAME_cr_std01 440
#define FRAME_cr_std02 441
#define FRAME_cr_std03 442
#define FRAME_cr_std04 443
#define FRAME_cr_std05 444
#define FRAME_cr_std06 445
#define FRAME_cr_std07 446
#define FRAME_cr_std08 447
#define FRAME_cr_wlk01 448
#define FRAME_cr_wlk02 449
#define FRAME_cr_wlk03 450
#define FRAME_cr_wlk04 451
#define FRAME_cr_wlk05 452
#define FRAME_cr_wlk06 453
#define FRAME_cr_wlk07 454
#define FRAME_crbl_a01 455
#define FRAME_crbl_a02 456
#define FRAME_crbl_a03 457
#define FRAME_crbl_a04 458
#define FRAME_crbl_a05 459
#define FRAME_crbl_a06 460
#define FRAME_crbl_a07 461
#define FRAME_crbl_p01 462
#define FRAME_crbl_p02 463
#define FRAME_crbl_p03 464
#define FRAME_crbl_p04 465
#define FRAME_crbl_s01 466
#define FRAME_crbl_s02 467
#define FRAME_crbl_s03 468
#define FRAME_crbl_s04 469
#define FRAME_crbl_s05 470
#define FRAME_crbl_s06 471
#define FRAME_crbl_s07 472
#define FRAME_crbl_s08 473
#define FRAME_crbl_w01 474
#define FRAME_crbl_w02 475
#define FRAME_crbl_w03 476
#define FRAME_crbl_w04 477
#define FRAME_crbl_w05 478
#define FRAME_crbl_w06 479
#define FRAME_crbl_w07 480
#define MODEL_SCALE 1.000000