game: Implement monster footsteps.

Better tracking of enemies complementing the audio changes.

Cherrypick of 74edb966a2
This commit is contained in:
SkacikPL 2019-06-28 18:15:24 +02:00 committed by Denis Pauk
parent 5a3163a7e4
commit cfb86acc81
15 changed files with 382 additions and 107 deletions

View file

@ -205,6 +205,9 @@ Set `0` by default.
may not be generated in all circumstances, especially when the player may not be generated in all circumstances, especially when the player
is moving over stairs and slopes. is moving over stairs and slopes.
* **g_monsterfootsteps**: If set to `1` monster footstep are generated.
By default this cvar is disabled (set to 0).
* **g_fix_triggered**: This cvar, when set to `1`, forces monsters to * **g_fix_triggered**: This cvar, when set to `1`, forces monsters to
spawn in normally if they are set to a triggered spawn but do not spawn in normally if they are set to a triggered spawn but do not
have a targetname. There are a few cases of this in GroundZero and have a targetname. There are a few cases of this in GroundZero and

View file

@ -55,6 +55,7 @@ cvar_t *maxentities;
cvar_t *g_select_empty; cvar_t *g_select_empty;
cvar_t *dedicated; cvar_t *dedicated;
cvar_t *g_footsteps; cvar_t *g_footsteps;
cvar_t *g_monsterfootsteps;
cvar_t *g_fix_triggered; cvar_t *g_fix_triggered;
cvar_t *g_commanderbody_nogod; cvar_t *g_commanderbody_nogod;

View file

@ -520,6 +520,7 @@ extern cvar_t *needpass;
extern cvar_t *g_select_empty; extern cvar_t *g_select_empty;
extern cvar_t *dedicated; extern cvar_t *dedicated;
extern cvar_t *g_footsteps; extern cvar_t *g_footsteps;
extern cvar_t *g_monsterfootsteps;
extern cvar_t *g_fix_triggered; extern cvar_t *g_fix_triggered;
extern cvar_t *g_commanderbody_nogod; extern cvar_t *g_commanderbody_nogod;

View file

@ -34,6 +34,29 @@ static int sound_punch;
static int sound_sight; static int sound_sight;
static int sound_search; static int sound_search;
static int sound_step;
static int sound_step2;
static void
berserk_footstep(edict_t *self)
{
if (!g_monsterfootsteps->value)
return;
int i;
i = rand() % (1 + 1 - 0) + 0;
if (i == 0)
{
gi.sound(self, CHAN_BODY, sound_step, 1, ATTN_NORM, 0);
}
else if (i == 1)
{
gi.sound(self, CHAN_BODY, sound_step2, 1, ATTN_NORM, 0);
}
}
void void
berserk_sight(edict_t *self, edict_t *other /* unused */) berserk_sight(edict_t *self, edict_t *other /* unused */)
{ {
@ -146,12 +169,12 @@ mframe_t berserk_frames_walk[] = {
{ai_walk, 9.1, NULL}, {ai_walk, 9.1, NULL},
{ai_walk, 6.3, NULL}, {ai_walk, 6.3, NULL},
{ai_walk, 4.9, NULL}, {ai_walk, 4.9, NULL},
{ai_walk, 6.7, NULL}, {ai_walk, 6.7, berserk_footstep},
{ai_walk, 6.0, NULL}, {ai_walk, 6.0, NULL},
{ai_walk, 8.2, NULL}, {ai_walk, 8.2, NULL},
{ai_walk, 7.2, NULL}, {ai_walk, 7.2, NULL},
{ai_walk, 6.1, NULL}, {ai_walk, 6.1, NULL},
{ai_walk, 4.9, NULL}, {ai_walk, 4.9, berserk_footstep},
{ai_walk, 4.7, NULL}, {ai_walk, 4.7, NULL},
{ai_walk, 4.7, NULL}, {ai_walk, 4.7, NULL},
{ai_walk, 4.8, NULL} {ai_walk, 4.8, NULL}
@ -177,10 +200,10 @@ berserk_walk(edict_t *self)
mframe_t berserk_frames_run1[] = { mframe_t berserk_frames_run1[] = {
{ai_run, 21, NULL}, {ai_run, 21, NULL},
{ai_run, 11, NULL}, {ai_run, 11, berserk_footstep},
{ai_run, 21, NULL}, {ai_run, 21, NULL},
{ai_run, 25, NULL}, {ai_run, 25, NULL},
{ai_run, 18, NULL}, {ai_run, 18, berserk_footstep},
{ai_run, 19, NULL} {ai_run, 19, NULL}
}; };
@ -270,7 +293,7 @@ berserk_attack_club(edict_t *self)
mframe_t berserk_frames_attack_club[] = { mframe_t berserk_frames_attack_club[] = {
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
{ai_charge, 0, NULL}, {ai_charge, 0, berserk_footstep},
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
{ai_charge, 0, berserk_swing}, {ai_charge, 0, berserk_swing},
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
@ -300,18 +323,18 @@ berserk_strike(edict_t *self)
mframe_t berserk_frames_attack_strike[] = { mframe_t berserk_frames_attack_strike[] = {
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 0, NULL}, {ai_move, 0, berserk_footstep},
{ai_move, 0, berserk_swing}, {ai_move, 0, berserk_swing},
{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, berserk_strike}, {ai_move, 0, berserk_strike},
{ai_move, 0, NULL}, {ai_move, 0, berserk_footstep},
{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, 9.7, NULL}, {ai_move, 9.7, NULL},
{ai_move, 13.6, NULL} {ai_move, 13.6, berserk_footstep}
}; };
mmove_t berserk_move_attack_strike = mmove_t berserk_move_attack_strike =
@ -557,6 +580,9 @@ SP_monster_berserk(edict_t *self)
sound_search = gi.soundindex("berserk/bersrch1.wav"); sound_search = gi.soundindex("berserk/bersrch1.wav");
sound_sight = gi.soundindex("berserk/sight.wav"); sound_sight = gi.soundindex("berserk/sight.wav");
sound_step = gi.soundindex("berserk/step1.wav");
sound_step2 = gi.soundindex("berserk/step2.wav");
self->s.modelindex = gi.modelindex("models/monsters/berserk/tris.md2"); self->s.modelindex = gi.modelindex("models/monsters/berserk/tris.md2");
VectorSet(self->mins, -16, -16, -24); VectorSet(self->mins, -16, -16, -24);
VectorSet(self->maxs, 16, 16, 32); VectorSet(self->maxs, 16, 16, 32);

View file

@ -42,6 +42,29 @@ static int sound_melee1;
static int sound_melee2; static int sound_melee2;
static int sound_melee3; static int sound_melee3;
static int sound_step;
static int sound_step2;
static void
brain_footstep(edict_t *self)
{
if (!g_monsterfootsteps->value)
return;
int i;
i = rand() % (1 + 1 - 0) + 0;
if (i == 0)
{
gi.sound(self, CHAN_BODY, sound_step, 1, ATTN_NORM, 0);
}
else if (i == 1)
{
gi.sound(self, CHAN_BODY, sound_step2, 1, ATTN_NORM, 0);
}
}
void void
brain_sight(edict_t *self, edict_t *other /* unused */) brain_sight(edict_t *self, edict_t *other /* unused */)
{ {
@ -180,13 +203,13 @@ mframe_t brain_frames_walk1[] = {
{ai_walk, 7, NULL}, {ai_walk, 7, NULL},
{ai_walk, 2, NULL}, {ai_walk, 2, NULL},
{ai_walk, 3, NULL}, {ai_walk, 3, NULL},
{ai_walk, 3, NULL}, {ai_walk, 3, brain_footstep},
{ai_walk, 1, NULL}, {ai_walk, 1, NULL},
{ai_walk, 0, NULL}, {ai_walk, 0, NULL},
{ai_walk, 0, NULL}, {ai_walk, 0, NULL},
{ai_walk, 9, NULL}, {ai_walk, 9, NULL},
{ai_walk, -4, NULL}, {ai_walk, -4, NULL},
{ai_walk, -1, NULL}, {ai_walk, -1, brain_footstep},
{ai_walk, 2, NULL} {ai_walk, 2, NULL}
}; };
@ -268,7 +291,7 @@ mmove_t brain_move_pain2 =
mframe_t brain_frames_pain1[] = { mframe_t brain_frames_pain1[] = {
{ai_move, -6, NULL}, {ai_move, -6, NULL},
{ai_move, -2, NULL}, {ai_move, -2, NULL},
{ai_move, -6, NULL}, {ai_move, -6, brain_footstep},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
@ -285,7 +308,7 @@ mframe_t brain_frames_pain1[] = {
{ai_move, 1, NULL}, {ai_move, 1, NULL},
{ai_move, 7, NULL}, {ai_move, 7, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 3, NULL}, {ai_move, 3, brain_footstep},
{ai_move, -1, NULL} {ai_move, -1, NULL}
}; };
@ -352,11 +375,11 @@ mframe_t brain_frames_duck[] = {
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, -2, brain_duck_down}, {ai_move, -2, brain_duck_down},
{ai_move, 17, brain_duck_hold}, {ai_move, 17, brain_duck_hold},
{ai_move, -3, NULL}, {ai_move, -3, brain_footstep},
{ai_move, -1, brain_duck_up}, {ai_move, -1, brain_duck_up},
{ai_move, -5, NULL}, {ai_move, -5, NULL},
{ai_move, -6, NULL}, {ai_move, -6, NULL},
{ai_move, -6, NULL} {ai_move, -6, brain_footstep}
}; };
mmove_t brain_move_duck = mmove_t brain_move_duck =
@ -497,7 +520,7 @@ mframe_t brain_frames_attack1[] = {
{ai_charge, 8, NULL}, {ai_charge, 8, NULL},
{ai_charge, 3, NULL}, {ai_charge, 3, NULL},
{ai_charge, 5, NULL}, {ai_charge, 5, NULL},
{ai_charge, 0, NULL}, {ai_charge, 0, brain_footstep},
{ai_charge, -3, brain_swing_right}, {ai_charge, -3, brain_swing_right},
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
{ai_charge, -5, NULL}, {ai_charge, -5, NULL},
@ -511,7 +534,7 @@ mframe_t brain_frames_attack1[] = {
{ai_charge, -1, NULL}, {ai_charge, -1, NULL},
{ai_charge, -3, NULL}, {ai_charge, -3, NULL},
{ai_charge, 2, NULL}, {ai_charge, 2, NULL},
{ai_charge, -11, NULL} {ai_charge, -11, brain_footstep}
}; };
mmove_t brain_move_attack1 = mmove_t brain_move_attack1 =
@ -622,13 +645,13 @@ mframe_t brain_frames_run[] = {
{ai_run, 9, NULL}, {ai_run, 9, NULL},
{ai_run, 2, NULL}, {ai_run, 2, NULL},
{ai_run, 3, NULL}, {ai_run, 3, NULL},
{ai_run, 3, NULL}, {ai_run, 3, brain_footstep},
{ai_run, 1, NULL}, {ai_run, 1, NULL},
{ai_run, 0, NULL}, {ai_run, 0, NULL},
{ai_run, 0, NULL}, {ai_run, 0, NULL},
{ai_run, 10, NULL}, {ai_run, 10, NULL},
{ai_run, -4, NULL}, {ai_run, -4, NULL},
{ai_run, -1, NULL}, {ai_run, -1, brain_footstep},
{ai_run, 2, NULL} {ai_run, 2, NULL}
}; };
@ -812,6 +835,9 @@ SP_monster_brain(edict_t *self)
sound_melee2 = gi.soundindex("brain/melee2.wav"); sound_melee2 = gi.soundindex("brain/melee2.wav");
sound_melee3 = gi.soundindex("brain/melee3.wav"); sound_melee3 = gi.soundindex("brain/melee3.wav");
sound_step = gi.soundindex("brain/step1.wav");
sound_step2 = gi.soundindex("brain/step2.wav");
self->movetype = MOVETYPE_STEP; self->movetype = MOVETYPE_STEP;
self->solid = SOLID_BBOX; self->solid = SOLID_BBOX;
self->s.modelindex = gi.modelindex("models/monsters/brain/tris.md2"); self->s.modelindex = gi.modelindex("models/monsters/brain/tris.md2");

View file

@ -51,6 +51,29 @@ static int sound_pain3;
static int sound_sight; static int sound_sight;
static int sound_search; static int sound_search;
static int sound_step;
static int sound_step2;
void chick_footstep(edict_t *self)
{
if (!g_monsterfootsteps->value)
return;
int i;
i = rand() % (1 + 1 - 0) + 0;
if (i == 0)
{
gi.sound(self, CHAN_BODY, sound_step, 1, ATTN_NORM, 0);
}
else if (i == 1)
{
gi.sound(self, CHAN_BODY, sound_step2, 1, ATTN_NORM, 0);
}
}
void void
ChickMoan(edict_t *self) ChickMoan(edict_t *self)
{ {
@ -204,12 +227,12 @@ mmove_t chick_move_start_run =
mframe_t chick_frames_run[] = { mframe_t chick_frames_run[] = {
{ai_run, 6, NULL}, {ai_run, 6, NULL},
{ai_run, 8, NULL}, {ai_run, 8, chick_footstep},
{ai_run, 13, NULL}, {ai_run, 13, NULL},
{ai_run, 5, NULL}, {ai_run, 5, NULL},
{ai_run, 7, NULL}, {ai_run, 7, NULL},
{ai_run, 4, NULL}, {ai_run, 4, NULL},
{ai_run, 11, NULL}, {ai_run, 11, chick_footstep},
{ai_run, 5, NULL}, {ai_run, 5, NULL},
{ai_run, 9, NULL}, {ai_run, 9, NULL},
{ai_run, 7, NULL} {ai_run, 7, NULL}
@ -225,12 +248,12 @@ mmove_t chick_move_run =
mframe_t chick_frames_walk[] = { mframe_t chick_frames_walk[] = {
{ai_walk, 6, NULL}, {ai_walk, 6, NULL},
{ai_walk, 8, NULL}, {ai_walk, 8, chick_footstep},
{ai_walk, 13, NULL}, {ai_walk, 13, NULL},
{ai_walk, 5, NULL}, {ai_walk, 5, NULL},
{ai_walk, 7, NULL}, {ai_walk, 7, NULL},
{ai_walk, 4, NULL}, {ai_walk, 4, NULL},
{ai_walk, 11, NULL}, {ai_walk, 11, chick_footstep},
{ai_walk, 5, NULL}, {ai_walk, 5, NULL},
{ai_walk, 9, NULL}, {ai_walk, 9, NULL},
{ai_walk, 7, NULL} {ai_walk, 7, NULL}
@ -421,20 +444,20 @@ mframe_t chick_frames_death2[] = {
{ai_move, -6, NULL}, {ai_move, -6, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, -1, NULL}, {ai_move, -1, NULL},
{ai_move, -5, NULL}, {ai_move, -5, chick_footstep},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, -1, NULL}, {ai_move, -1, NULL},
{ai_move, -2, NULL}, {ai_move, -2, NULL},
{ai_move, 1, NULL}, {ai_move, 1, NULL},
{ai_move, 10, NULL}, {ai_move, 10, NULL},
{ai_move, 2, NULL}, {ai_move, 2, NULL},
{ai_move, 3, NULL}, {ai_move, 3, chick_footstep},
{ai_move, 1, NULL}, {ai_move, 1, NULL},
{ai_move, 2, NULL}, {ai_move, 2, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 3, NULL}, {ai_move, 3, NULL},
{ai_move, 3, NULL}, {ai_move, 3, NULL},
{ai_move, 1, NULL}, {ai_move, 1, chick_footstep},
{ai_move, -3, NULL}, {ai_move, -3, NULL},
{ai_move, -5, NULL}, {ai_move, -5, NULL},
{ai_move, 4, NULL}, {ai_move, 4, NULL},
@ -695,7 +718,7 @@ mframe_t chick_frames_start_attack1[] = {
{ai_charge, -3, NULL}, {ai_charge, -3, NULL},
{ai_charge, 3, NULL}, {ai_charge, 3, NULL},
{ai_charge, 5, NULL}, {ai_charge, 5, NULL},
{ai_charge, 7, NULL}, {ai_charge, 7, chick_footstep},
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
@ -712,17 +735,17 @@ mmove_t chick_move_start_attack1 =
mframe_t chick_frames_attack1[] = { mframe_t chick_frames_attack1[] = {
{ai_charge, 19, ChickRocket}, {ai_charge, 19, ChickRocket},
{ai_charge, -6, NULL}, {ai_charge, -6, NULL},
{ai_charge, -5, NULL}, {ai_charge, -5, chick_footstep},
{ai_charge, -2, NULL}, {ai_charge, -2, NULL},
{ai_charge, -7, NULL}, {ai_charge, -7, chick_footstep},
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
{ai_charge, 1, NULL}, {ai_charge, 1, NULL},
{ai_charge, 10, ChickReload}, {ai_charge, 10, ChickReload},
{ai_charge, 4, NULL}, {ai_charge, 4, NULL},
{ai_charge, 5, NULL}, {ai_charge, 5, chick_footstep},
{ai_charge, 6, NULL}, {ai_charge, 6, NULL},
{ai_charge, 6, NULL}, {ai_charge, 6, NULL},
{ai_charge, 4, NULL}, {ai_charge, 4, chick_footstep},
{ai_charge, 3, chick_rerocket} {ai_charge, 3, chick_rerocket}
}; };
@ -739,7 +762,7 @@ mframe_t chick_frames_end_attack1[] = {
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
{ai_charge, -6, NULL}, {ai_charge, -6, NULL},
{ai_charge, -4, NULL}, {ai_charge, -4, NULL},
{ai_charge, -2, NULL} {ai_charge, -2, chick_footstep}
}; };
mmove_t chick_move_end_attack1 = mmove_t chick_move_end_attack1 =
@ -811,7 +834,7 @@ mframe_t chick_frames_end_slash[] = {
{ai_charge, -6, NULL}, {ai_charge, -6, NULL},
{ai_charge, -1, NULL}, {ai_charge, -1, NULL},
{ai_charge, -6, NULL}, {ai_charge, -6, NULL},
{ai_charge, 0, NULL} {ai_charge, 0, chick_footstep}
}; };
mmove_t chick_move_end_slash = mmove_t chick_move_end_slash =
@ -864,7 +887,7 @@ chick_slash(edict_t *self)
mframe_t chick_frames_start_slash[] = { mframe_t chick_frames_start_slash[] = {
{ai_charge, 1, NULL}, {ai_charge, 1, NULL},
{ai_charge, 8, NULL}, {ai_charge, 8, NULL},
{ai_charge, 3, NULL} {ai_charge, 3, chick_footstep}
}; };
mmove_t chick_move_start_slash = mmove_t chick_move_start_slash =
@ -941,6 +964,9 @@ SP_monster_chick(edict_t *self)
sound_sight = gi.soundindex("chick/chksght1.wav"); sound_sight = gi.soundindex("chick/chksght1.wav");
sound_search = gi.soundindex("chick/chksrch1.wav"); sound_search = gi.soundindex("chick/chksrch1.wav");
sound_step = gi.soundindex("bitch/step1.wav");
sound_step2 = gi.soundindex("bitch/step2.wav");
self->movetype = MOVETYPE_STEP; self->movetype = MOVETYPE_STEP;
self->solid = SOLID_BBOX; self->solid = SOLID_BBOX;
self->s.modelindex = gi.modelindex("models/monsters/bitch/tris.md2"); self->s.modelindex = gi.modelindex("models/monsters/bitch/tris.md2");

View file

@ -38,6 +38,29 @@ static int sound_idle;
static int sound_search; static int sound_search;
static int sound_sight; static int sound_sight;
static int sound_step;
static int sound_step2;
static void
gladiator_footstep(edict_t *self)
{
if (!g_monsterfootsteps->value)
return;
int i;
i = rand() % (1 + 1 - 0) + 0;
if (i == 0)
{
gi.sound(self, CHAN_BODY, sound_step, 1, ATTN_NORM, 0);
}
else if (i == 1)
{
gi.sound(self, CHAN_BODY, sound_step2, 1, ATTN_NORM, 0);
}
}
void void
gladiator_idle(edict_t *self) gladiator_idle(edict_t *self)
{ {
@ -115,7 +138,7 @@ mframe_t gladiator_frames_walk[] = {
{ai_walk, 7, NULL}, {ai_walk, 7, NULL},
{ai_walk, 6, NULL}, {ai_walk, 6, NULL},
{ai_walk, 5, NULL}, {ai_walk, 5, NULL},
{ai_walk, 2, NULL}, {ai_walk, 2, gladiator_footstep},
{ai_walk, 0, NULL}, {ai_walk, 0, NULL},
{ai_walk, 2, NULL}, {ai_walk, 2, NULL},
{ai_walk, 8, NULL}, {ai_walk, 8, NULL},
@ -123,7 +146,7 @@ mframe_t gladiator_frames_walk[] = {
{ai_walk, 8, NULL}, {ai_walk, 8, NULL},
{ai_walk, 5, NULL}, {ai_walk, 5, NULL},
{ai_walk, 5, NULL}, {ai_walk, 5, NULL},
{ai_walk, 2, NULL}, {ai_walk, 2, gladiator_footstep},
{ai_walk, 2, NULL}, {ai_walk, 2, NULL},
{ai_walk, 1, NULL}, {ai_walk, 1, NULL},
{ai_walk, 8, NULL} {ai_walk, 8, NULL}
@ -151,10 +174,10 @@ gladiator_walk(edict_t *self)
mframe_t gladiator_frames_run[] = { mframe_t gladiator_frames_run[] = {
{ai_run, 23, NULL}, {ai_run, 23, NULL},
{ai_run, 14, NULL}, {ai_run, 14, NULL},
{ai_run, 14, NULL}, {ai_run, 14, gladiator_footstep},
{ai_run, 21, NULL}, {ai_run, 21, NULL},
{ai_run, 12, NULL}, {ai_run, 12, NULL},
{ai_run, 13, NULL} {ai_run, 13, gladiator_footstep}
}; };
mmove_t gladiator_move_run = mmove_t gladiator_move_run =
@ -525,6 +548,9 @@ SP_monster_gladiator(edict_t *self)
sound_search = gi.soundindex("gladiator/gldsrch1.wav"); sound_search = gi.soundindex("gladiator/gldsrch1.wav");
sound_sight = gi.soundindex("gladiator/sight.wav"); sound_sight = gi.soundindex("gladiator/sight.wav");
sound_step = gi.soundindex("gladiator/step1.wav");
sound_step2 = gi.soundindex("gladiator/step2.wav");
self->movetype = MOVETYPE_STEP; self->movetype = MOVETYPE_STEP;
self->solid = SOLID_BBOX; self->solid = SOLID_BBOX;
self->s.modelindex = gi.modelindex("models/monsters/gladiatr/tris.md2"); self->s.modelindex = gi.modelindex("models/monsters/gladiatr/tris.md2");

View file

@ -35,6 +35,29 @@ static int sound_open;
static int sound_search; static int sound_search;
static int sound_sight; static int sound_sight;
static int sound_step;
static int sound_step2;
static void
gunner_footstep(edict_t *self)
{
if (!g_monsterfootsteps->value)
return;
int i;
i = rand() % (1 + 1 - 0) + 0;
if (i == 0)
{
gi.sound(self, CHAN_BODY, sound_step, 1, ATTN_NORM, 0);
}
else if (i == 1)
{
gi.sound(self, CHAN_BODY, sound_step2, 1, ATTN_NORM, 0);
}
}
void void
gunner_idlesound(edict_t *self) gunner_idlesound(edict_t *self)
{ {
@ -219,19 +242,19 @@ gunner_stand(edict_t *self)
} }
mframe_t gunner_frames_walk[] = { mframe_t gunner_frames_walk[] = {
{ai_walk, 0, NULL}, {ai_walk, 0, gunner_footstep},
{ai_walk, 3, NULL}, {ai_walk, 3, NULL},
{ai_walk, 4, NULL}, {ai_walk, 4, NULL},
{ai_walk, 5, NULL}, {ai_walk, 5, NULL},
{ai_walk, 7, NULL}, {ai_walk, 7, NULL},
{ai_walk, 2, NULL}, {ai_walk, 2, gunner_footstep},
{ai_walk, 6, NULL}, {ai_walk, 6, NULL},
{ai_walk, 4, NULL}, {ai_walk, 4, NULL},
{ai_walk, 2, NULL}, {ai_walk, 2, NULL},
{ai_walk, 7, NULL}, {ai_walk, 7, NULL},
{ai_walk, 5, NULL}, {ai_walk, 5, NULL},
{ai_walk, 7, NULL}, {ai_walk, 7, NULL},
{ai_walk, 4, NULL} {ai_walk, 4, gunner_footstep}
}; };
mmove_t gunner_move_walk = mmove_t gunner_move_walk =
@ -255,11 +278,11 @@ gunner_walk(edict_t *self)
mframe_t gunner_frames_run[] = { mframe_t gunner_frames_run[] = {
{ai_run, 26, NULL}, {ai_run, 26, NULL},
{ai_run, 9, NULL}, {ai_run, 9, gunner_footstep},
{ai_run, 9, NULL}, {ai_run, 9, NULL},
{ai_run, 9, NULL}, {ai_run, 9, NULL},
{ai_run, 15, NULL}, {ai_run, 15, NULL},
{ai_run, 10, NULL}, {ai_run, 10, gunner_footstep},
{ai_run, 13, NULL}, {ai_run, 13, NULL},
{ai_run, 6, NULL} {ai_run, 6, NULL}
}; };
@ -292,10 +315,10 @@ gunner_run(edict_t *self)
mframe_t gunner_frames_runandshoot[] = { mframe_t gunner_frames_runandshoot[] = {
{ai_run, 32, NULL}, {ai_run, 32, NULL},
{ai_run, 15, NULL}, {ai_run, 15, gunner_footstep},
{ai_run, 10, NULL}, {ai_run, 10, NULL},
{ai_run, 18, NULL}, {ai_run, 18, NULL},
{ai_run, 8, NULL}, {ai_run, 8, gunner_footstep},
{ai_run, 20, NULL} {ai_run, 20, NULL}
}; };
@ -337,12 +360,12 @@ mmove_t gunner_move_pain3 =
mframe_t gunner_frames_pain2[] = { mframe_t gunner_frames_pain2[] = {
{ai_move, -2, NULL}, {ai_move, -2, NULL},
{ai_move, 11, NULL}, {ai_move, 11, NULL},
{ai_move, 6, NULL}, {ai_move, 6, gunner_footstep},
{ai_move, 2, NULL}, {ai_move, 2, NULL},
{ai_move, -1, NULL}, {ai_move, -1, NULL},
{ai_move, -7, NULL}, {ai_move, -7, NULL},
{ai_move, -2, NULL}, {ai_move, -2, NULL},
{ai_move, -7, NULL} {ai_move, -7, gunner_footstep}
}; };
mmove_t gunner_move_pain2 = mmove_t gunner_move_pain2 =
@ -356,7 +379,7 @@ mmove_t gunner_move_pain2 =
mframe_t gunner_frames_pain1[] = { mframe_t gunner_frames_pain1[] = {
{ai_move, 2, NULL}, {ai_move, 2, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, -5, NULL}, {ai_move, -5, gunner_footstep},
{ai_move, 3, NULL}, {ai_move, 3, NULL},
{ai_move, -1, NULL}, {ai_move, -1, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
@ -366,11 +389,11 @@ mframe_t gunner_frames_pain1[] = {
{ai_move, 1, NULL}, {ai_move, 1, NULL},
{ai_move, 1, NULL}, {ai_move, 1, NULL},
{ai_move, 2, NULL}, {ai_move, 2, NULL},
{ai_move, 1, NULL}, {ai_move, 1, gunner_footstep},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, -2, NULL}, {ai_move, -2, NULL},
{ai_move, -2, NULL}, {ai_move, -2, NULL},
{ai_move, 0, NULL}, {ai_move, 0, gunner_footstep},
{ai_move, 0, NULL} {ai_move, 0, NULL}
}; };
@ -704,7 +727,7 @@ GunnerGrenade(edict_t *self)
mframe_t gunner_frames_attack_chain[] = { mframe_t gunner_frames_attack_chain[] = {
{ai_charge, 0, gunner_opengun}, {ai_charge, 0, gunner_opengun},
{ai_charge, 0, NULL}, {ai_charge, 0, gunner_footstep},
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
@ -746,7 +769,7 @@ mframe_t gunner_frames_endfire_chain[] = {
{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, gunner_footstep}
}; };
mmove_t gunner_move_endfire_chain = mmove_t gunner_move_endfire_chain =
@ -873,6 +896,9 @@ SP_monster_gunner(edict_t *self)
sound_search = gi.soundindex("gunner/gunsrch1.wav"); sound_search = gi.soundindex("gunner/gunsrch1.wav");
sound_sight = gi.soundindex("gunner/sight1.wav"); sound_sight = gi.soundindex("gunner/sight1.wav");
sound_step = gi.soundindex("gunner/step1.wav");
sound_step2 = gi.soundindex("gunner/step2.wav");
gi.soundindex("gunner/gunatck2.wav"); gi.soundindex("gunner/gunatck2.wav");
gi.soundindex("gunner/gunatck3.wav"); gi.soundindex("gunner/gunatck3.wav");

View file

@ -42,6 +42,29 @@ static int sound_sight;
static int sound_search; static int sound_search;
static int sound_idle; static int sound_idle;
static int sound_step;
static int sound_step2;
static void
infantry_footstep(edict_t *self)
{
if (!g_monsterfootsteps->value)
return;
int i;
i = rand() % (1 + 1 - 0) + 0;
if (i == 0)
{
gi.sound(self, CHAN_BODY, sound_step, 1, ATTN_NORM, 0);
}
else if (i == 1)
{
gi.sound(self, CHAN_BODY, sound_step2, 1, ATTN_NORM, 0);
}
}
mframe_t infantry_frames_stand[] = { mframe_t infantry_frames_stand[] = {
{ai_stand, 0, NULL}, {ai_stand, 0, NULL},
{ai_stand, 0, NULL}, {ai_stand, 0, NULL},
@ -92,7 +115,7 @@ mframe_t infantry_frames_fidget[] = {
{ai_stand, 1, NULL}, {ai_stand, 1, NULL},
{ai_stand, 3, NULL}, {ai_stand, 3, NULL},
{ai_stand, 6, NULL}, {ai_stand, 6, NULL},
{ai_stand, 3, NULL}, {ai_stand, 3, infantry_footstep},
{ai_stand, 0, NULL}, {ai_stand, 0, NULL},
{ai_stand, 0, NULL}, {ai_stand, 0, NULL},
{ai_stand, 0, NULL}, {ai_stand, 0, NULL},
@ -134,7 +157,7 @@ mframe_t infantry_frames_fidget[] = {
{ai_stand, -3, NULL}, {ai_stand, -3, NULL},
{ai_stand, -2, NULL}, {ai_stand, -2, NULL},
{ai_stand, -3, NULL}, {ai_stand, -3, NULL},
{ai_stand, -3, NULL}, {ai_stand, -3, infantry_footstep},
{ai_stand, -2, NULL} {ai_stand, -2, NULL}
}; };
@ -159,13 +182,13 @@ infantry_fidget(edict_t *self)
} }
mframe_t infantry_frames_walk[] = { mframe_t infantry_frames_walk[] = {
{ai_walk, 5, NULL}, {ai_walk, 5, infantry_footstep},
{ai_walk, 4, NULL}, {ai_walk, 4, NULL},
{ai_walk, 4, NULL}, {ai_walk, 4, NULL},
{ai_walk, 5, NULL}, {ai_walk, 5, NULL},
{ai_walk, 4, NULL}, {ai_walk, 4, NULL},
{ai_walk, 5, NULL}, {ai_walk, 5, NULL},
{ai_walk, 6, NULL}, {ai_walk, 6, infantry_footstep},
{ai_walk, 4, NULL}, {ai_walk, 4, NULL},
{ai_walk, 4, NULL}, {ai_walk, 4, NULL},
{ai_walk, 4, NULL}, {ai_walk, 4, NULL},
@ -194,11 +217,11 @@ infantry_walk(edict_t *self)
mframe_t infantry_frames_run[] = { mframe_t infantry_frames_run[] = {
{ai_run, 10, NULL}, {ai_run, 10, NULL},
{ai_run, 20, NULL}, {ai_run, 20, infantry_footstep},
{ai_run, 5, NULL}, {ai_run, 5, NULL},
{ai_run, 7, NULL}, {ai_run, 7, NULL},
{ai_run, 30, NULL}, {ai_run, 30, NULL},
{ai_run, 35, NULL}, {ai_run, 35, infantry_footstep},
{ai_run, 2, NULL}, {ai_run, 2, NULL},
{ai_run, 6, NULL} {ai_run, 6, NULL}
}; };
@ -229,12 +252,12 @@ mframe_t infantry_frames_pain1[] = {
{ai_move, -2, NULL}, {ai_move, -2, NULL},
{ai_move, -1, NULL}, {ai_move, -1, NULL},
{ai_move, -2, NULL}, {ai_move, -2, NULL},
{ai_move, -1, NULL}, {ai_move, -1, infantry_footstep},
{ai_move, 1, NULL}, {ai_move, 1, NULL},
{ai_move, -1, NULL}, {ai_move, -1, NULL},
{ai_move, 1, NULL}, {ai_move, 1, NULL},
{ai_move, 6, NULL}, {ai_move, 6, NULL},
{ai_move, 2, NULL} {ai_move, 2, infantry_footstep}
}; };
mmove_t infantry_move_pain1 = mmove_t infantry_move_pain1 =
@ -250,12 +273,12 @@ mframe_t infantry_frames_pain2[] = {
{ai_move, -3, NULL}, {ai_move, -3, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, -1, NULL}, {ai_move, -1, NULL},
{ai_move, -2, NULL}, {ai_move, -2, infantry_footstep},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 2, NULL}, {ai_move, 2, NULL},
{ai_move, 5, NULL}, {ai_move, 5, NULL},
{ai_move, 2, NULL} {ai_move, 2, infantry_footstep}
}; };
mmove_t infantry_move_pain2 = mmove_t infantry_move_pain2 =
@ -406,11 +429,11 @@ mframe_t infantry_frames_death1[] = {
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, -1, NULL}, {ai_move, -1, NULL},
{ai_move, -4, NULL}, {ai_move, -4, infantry_footstep},
{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, -1, NULL}, {ai_move, -1, infantry_footstep},
{ai_move, 3, NULL}, {ai_move, 3, NULL},
{ai_move, 1, NULL}, {ai_move, 1, NULL},
{ai_move, 1, NULL}, {ai_move, 1, NULL},
@ -439,8 +462,8 @@ mframe_t infantry_frames_death2[] = {
{ai_move, 5, NULL}, {ai_move, 5, NULL},
{ai_move, -1, NULL}, {ai_move, -1, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 1, NULL}, {ai_move, 1, infantry_footstep},
{ai_move, 1, NULL}, {ai_move, 1, infantry_footstep},
{ai_move, 4, NULL}, {ai_move, 4, NULL},
{ai_move, 3, NULL}, {ai_move, 3, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
@ -610,7 +633,7 @@ mframe_t infantry_frames_duck[] = {
{ai_move, -5, infantry_duck_hold}, {ai_move, -5, infantry_duck_hold},
{ai_move, 3, NULL}, {ai_move, 3, NULL},
{ai_move, 4, infantry_duck_up}, {ai_move, 4, infantry_duck_up},
{ai_move, 0, NULL} {ai_move, 0, infantry_footstep}
}; };
mmove_t infantry_move_duck = mmove_t infantry_move_duck =
@ -737,7 +760,7 @@ mframe_t infantry_frames_attack2[] = {
{ai_charge, 3, NULL}, {ai_charge, 3, NULL},
{ai_charge, 6, NULL}, {ai_charge, 6, NULL},
{ai_charge, 0, infantry_swing}, {ai_charge, 0, infantry_swing},
{ai_charge, 8, NULL}, {ai_charge, 8, infantry_footstep},
{ai_charge, 5, NULL}, {ai_charge, 5, NULL},
{ai_charge, 8, infantry_smack}, {ai_charge, 8, infantry_smack},
{ai_charge, 6, NULL}, {ai_charge, 6, NULL},
@ -801,6 +824,9 @@ SP_monster_infantry(edict_t *self)
sound_search = gi.soundindex("infantry/infsrch1.wav"); sound_search = gi.soundindex("infantry/infsrch1.wav");
sound_idle = gi.soundindex("infantry/infidle1.wav"); sound_idle = gi.soundindex("infantry/infidle1.wav");
sound_step = gi.soundindex("infantry/step1.wav");
sound_step2 = gi.soundindex("infantry/step2.wav");
self->movetype = MOVETYPE_STEP; self->movetype = MOVETYPE_STEP;
self->solid = SOLID_BBOX; self->solid = SOLID_BBOX;
self->s.modelindex = gi.modelindex("models/monsters/infantry/tris.md2"); self->s.modelindex = gi.modelindex("models/monsters/infantry/tris.md2");

View file

@ -34,6 +34,39 @@ static int sound_shake;
static int sound_moan; static int sound_moan;
static int sound_scream[8]; static int sound_scream[8];
static int sound_step;
static int sound_step2;
static int sound_step3;
static int sound_step4;
static void
insane_footstep(edict_t *self)
{
if (!g_monsterfootsteps->value)
return;
int i;
i = rand() % (3 + 1 - 0) + 0;
if (i == 0)
{
gi.sound(self, CHAN_BODY, sound_step, 0.7, ATTN_NORM, 0);
}
else if (i == 1)
{
gi.sound(self, CHAN_BODY, sound_step2, 0.7, ATTN_NORM, 0);
}
else if (i == 2)
{
gi.sound(self, CHAN_BODY, sound_step3, 0.7, ATTN_NORM, 0);
}
else if (i == 3)
{
gi.sound(self, CHAN_BODY, sound_step4, 0.7, ATTN_NORM, 0);
}
}
void void
insane_fist(edict_t *self) insane_fist(edict_t *self)
{ {
@ -336,13 +369,13 @@ mframe_t insane_frames_walk_normal[] = {
{ai_walk, 1.7, NULL}, {ai_walk, 1.7, NULL},
{ai_walk, 2.3, NULL}, {ai_walk, 2.3, NULL},
{ai_walk, 2.4, NULL}, {ai_walk, 2.4, NULL},
{ai_walk, 2.2, NULL}, {ai_walk, 2.2, insane_footstep},
{ai_walk, 4.2, NULL}, {ai_walk, 4.2, NULL},
{ai_walk, 5.6, NULL}, {ai_walk, 5.6, NULL},
{ai_walk, 3.3, NULL}, {ai_walk, 3.3, NULL},
{ai_walk, 2.4, NULL}, {ai_walk, 2.4, NULL},
{ai_walk, 0.9, NULL}, {ai_walk, 0.9, NULL},
{ai_walk, 0, NULL} {ai_walk, 0, insane_footstep}
}; };
mmove_t insane_move_walk_normal = mmove_t insane_move_walk_normal =
@ -367,25 +400,25 @@ mframe_t insane_frames_walk_insane[] = {
{ai_walk, 2.9, NULL}, /* 4 */ {ai_walk, 2.9, NULL}, /* 4 */
{ai_walk, 2.2, NULL}, /* 5 */ {ai_walk, 2.2, NULL}, /* 5 */
{ai_walk, 2.6, NULL}, /* 6 */ {ai_walk, 2.6, NULL}, /* 6 */
{ai_walk, 0, NULL}, /* 7 */ {ai_walk, 0, insane_footstep}, /* 7 */
{ai_walk, 0.7, NULL}, /* 8 */ {ai_walk, 0.7, NULL}, /* 8 */
{ai_walk, 4.8, NULL}, /* 9 */ {ai_walk, 4.8, NULL}, /* 9 */
{ai_walk, 5.3, NULL}, /* 10 */ {ai_walk, 5.3, NULL}, /* 10 */
{ai_walk, 1.1, NULL}, /* 11 */ {ai_walk, 1.1, NULL}, /* 11 */
{ai_walk, 2, NULL}, /* 12 */ {ai_walk, 2, insane_footstep}, /* 12 */
{ai_walk, 0.5, NULL}, /* 13 */ {ai_walk, 0.5, NULL}, /* 13 */
{ai_walk, 0, NULL}, /* 14 */ {ai_walk, 0, NULL}, /* 14 */
{ai_walk, 0, NULL}, /* 15 */ {ai_walk, 0, NULL}, /* 15 */
{ai_walk, 4.9, NULL}, /* 16 */ {ai_walk, 4.9, NULL}, /* 16 */
{ai_walk, 6.7, NULL}, /* 17 */ {ai_walk, 6.7, NULL}, /* 17 */
{ai_walk, 3.8, NULL}, /* 18 */ {ai_walk, 3.8, NULL}, /* 18 */
{ai_walk, 2, NULL}, /* 19 */ {ai_walk, 2, insane_footstep}, /* 19 */
{ai_walk, 0.2, NULL}, /* 20 */ {ai_walk, 0.2, NULL}, /* 20 */
{ai_walk, 0, NULL}, /* 21 */ {ai_walk, 0, NULL}, /* 21 */
{ai_walk, 3.4, NULL}, /* 22 */ {ai_walk, 3.4, NULL}, /* 22 */
{ai_walk, 6.4, NULL}, /* 23 */ {ai_walk, 6.4, NULL}, /* 23 */
{ai_walk, 5, NULL}, /* 24 */ {ai_walk, 5, NULL}, /* 24 */
{ai_walk, 1.8, NULL}, /* 25 */ {ai_walk, 1.8, insane_footstep}, /* 25 */
{ai_walk, 0, NULL} /* 26 */ {ai_walk, 0, NULL} /* 26 */
}; };
@ -410,7 +443,7 @@ mframe_t insane_frames_stand_pain[] = {
{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, insane_footstep},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
@ -926,6 +959,11 @@ SP_misc_insane(edict_t *self)
sound_scream[6] = gi.soundindex("insane/insane9.wav"); sound_scream[6] = gi.soundindex("insane/insane9.wav");
sound_scream[7] = gi.soundindex("insane/insane10.wav"); sound_scream[7] = gi.soundindex("insane/insane10.wav");
sound_step = gi.soundindex("player/step1.wav");
sound_step2 = gi.soundindex("player/step2.wav");
sound_step3 = gi.soundindex("player/step3.wav");
sound_step4 = gi.soundindex("player/step4.wav");
self->movetype = MOVETYPE_STEP; self->movetype = MOVETYPE_STEP;
self->solid = SOLID_BBOX; self->solid = SOLID_BBOX;
self->s.modelindex = gi.modelindex("models/monsters/insane/tris.md2"); self->s.modelindex = gi.modelindex("models/monsters/insane/tris.md2");

View file

@ -40,6 +40,29 @@ static int sound_hook_hit;
static int sound_hook_heal; static int sound_hook_heal;
static int sound_hook_retract; static int sound_hook_retract;
static int sound_step;
static int sound_step2;
static void
medic_footstep(edict_t *self)
{
if (!g_monsterfootsteps->value)
return;
int i;
i = rand() % (1 + 1 - 0) + 0;
if (i == 0)
{
gi.sound(self, CHAN_BODY, sound_step, 1, ATTN_NORM, 0);
}
else if (i == 1)
{
gi.sound(self, CHAN_BODY, sound_step2, 1, ATTN_NORM, 0);
}
}
edict_t * edict_t *
medic_FindDeadMonster(edict_t *self) medic_FindDeadMonster(edict_t *self)
{ {
@ -280,13 +303,13 @@ medic_stand(edict_t *self)
mframe_t medic_frames_walk[] = { mframe_t medic_frames_walk[] = {
{ai_walk, 6.2, NULL}, {ai_walk, 6.2, NULL},
{ai_walk, 18.1, NULL}, {ai_walk, 18.1, medic_footstep},
{ai_walk, 1, NULL}, {ai_walk, 1, NULL},
{ai_walk, 9, NULL}, {ai_walk, 9, NULL},
{ai_walk, 10, NULL}, {ai_walk, 10, NULL},
{ai_walk, 9, NULL}, {ai_walk, 9, NULL},
{ai_walk, 11, NULL}, {ai_walk, 11, NULL},
{ai_walk, 11.6, NULL}, {ai_walk, 11.6, medic_footstep},
{ai_walk, 2, NULL}, {ai_walk, 2, NULL},
{ai_walk, 9.9, NULL}, {ai_walk, 9.9, NULL},
{ai_walk, 14, NULL}, {ai_walk, 14, NULL},
@ -313,11 +336,11 @@ medic_walk(edict_t *self)
} }
mframe_t medic_frames_run[] = { mframe_t medic_frames_run[] = {
{ai_run, 18, NULL}, {ai_run, 18, medic_footstep},
{ai_run, 22.5, NULL}, {ai_run, 22.5, NULL},
{ai_run, 25.4, NULL}, {ai_run, 25.4, NULL},
{ai_run, 23.4, NULL}, {ai_run, 23.4, NULL},
{ai_run, 24, NULL}, {ai_run, 24, medic_footstep},
{ai_run, 35.6, NULL} {ai_run, 35.6, NULL}
}; };
@ -387,6 +410,7 @@ mframe_t medic_frames_pain2[] = {
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 0, medic_footstep},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
@ -397,8 +421,7 @@ mframe_t medic_frames_pain2[] = {
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
{ai_move, 0, NULL}, {ai_move, 0, medic_footstep}
{ai_move, 0, NULL}
}; };
mmove_t medic_move_pain2 = mmove_t medic_move_pain2 =
@ -914,7 +937,7 @@ mframe_t medic_frames_attackCable[] = {
{ai_charge, 4.7, NULL}, {ai_charge, 4.7, NULL},
{ai_charge, 5, NULL}, {ai_charge, 5, NULL},
{ai_charge, 6, NULL}, {ai_charge, 6, NULL},
{ai_charge, 4, NULL}, {ai_charge, 4, medic_footstep},
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
{ai_move, 0, medic_hook_launch}, {ai_move, 0, medic_hook_launch},
{ai_move, 0, medic_cable_attack}, {ai_move, 0, medic_cable_attack},
@ -928,7 +951,7 @@ mframe_t medic_frames_attackCable[] = {
{ai_move, 0, medic_cable_attack}, {ai_move, 0, medic_cable_attack},
{ai_move, -15, medic_hook_retract}, {ai_move, -15, medic_hook_retract},
{ai_move, -1.5, NULL}, {ai_move, -1.5, NULL},
{ai_move, -1.2, NULL}, {ai_move, -1.2, medic_footstep},
{ai_move, -3, NULL}, {ai_move, -3, NULL},
{ai_move, -2, NULL}, {ai_move, -2, NULL},
{ai_move, 0.3, NULL}, {ai_move, 0.3, NULL},
@ -1008,6 +1031,9 @@ SP_monster_medic(edict_t *self)
sound_hook_heal = gi.soundindex("medic/medatck4.wav"); sound_hook_heal = gi.soundindex("medic/medatck4.wav");
sound_hook_retract = gi.soundindex("medic/medatck5.wav"); sound_hook_retract = gi.soundindex("medic/medatck5.wav");
sound_step = gi.soundindex("medic/step1.wav");
sound_step2 = gi.soundindex("medic/step2.wav");
gi.soundindex("medic/medatck1.wav"); gi.soundindex("medic/medatck1.wav");
self->movetype = MOVETYPE_STEP; self->movetype = MOVETYPE_STEP;

View file

@ -225,13 +225,13 @@ mutant_idle(edict_t *self)
void mutant_walk(edict_t *self); void mutant_walk(edict_t *self);
mframe_t mutant_frames_walk[] = { mframe_t mutant_frames_walk[] = {
{ai_walk, 3, NULL}, {ai_walk, 3, mutant_step},
{ai_walk, 1, NULL}, {ai_walk, 1, NULL},
{ai_walk, 5, NULL}, {ai_walk, 5, mutant_step},
{ai_walk, 10, NULL}, {ai_walk, 10, NULL},
{ai_walk, 13, NULL}, {ai_walk, 13, NULL},
{ai_walk, 10, NULL}, {ai_walk, 10, NULL},
{ai_walk, 0, NULL}, {ai_walk, 0, mutant_step},
{ai_walk, 5, NULL}, {ai_walk, 5, NULL},
{ai_walk, 6, NULL}, {ai_walk, 6, NULL},
{ai_walk, 16, NULL}, {ai_walk, 16, NULL},
@ -261,7 +261,7 @@ mutant_walk_loop(edict_t *self)
mframe_t mutant_frames_start_walk[] = { mframe_t mutant_frames_start_walk[] = {
{ai_walk, 5, NULL}, {ai_walk, 5, NULL},
{ai_walk, 5, NULL}, {ai_walk, 5, NULL},
{ai_walk, -2, NULL}, {ai_walk, -2, mutant_step},
{ai_walk, 1, NULL} {ai_walk, 1, NULL}
}; };

View file

@ -258,10 +258,10 @@ parasite_stand(edict_t *self)
mframe_t parasite_frames_run[] = { mframe_t parasite_frames_run[] = {
{ai_run, 30, NULL}, {ai_run, 30, NULL},
{ai_run, 30, NULL}, {ai_run, 30, NULL},
{ai_run, 22, NULL}, {ai_run, 22, parasite_tap},
{ai_run, 19, NULL}, {ai_run, 19, parasite_tap},
{ai_run, 24, NULL}, {ai_run, 24, NULL},
{ai_run, 28, NULL}, {ai_run, 28, parasite_tap},
{ai_run, 25, NULL} {ai_run, 25, NULL}
}; };
@ -289,7 +289,7 @@ mmove_t parasite_move_start_run =
mframe_t parasite_frames_stop_run[] = { mframe_t parasite_frames_stop_run[] = {
{ai_run, 20, NULL}, {ai_run, 20, NULL},
{ai_run, 20, NULL}, {ai_run, 20, NULL},
{ai_run, 12, NULL}, {ai_run, 12, parasite_tap},
{ai_run, 10, NULL}, {ai_run, 10, NULL},
{ai_run, 0, NULL}, {ai_run, 0, NULL},
{ai_run, 0, NULL} {ai_run, 0, NULL}

View file

@ -39,6 +39,39 @@ static int sound_death_light;
static int sound_death; static int sound_death;
static int sound_death_ss; static int sound_death_ss;
static int sound_cock; static int sound_cock;
static int sound_step;
static int sound_step2;
static int sound_step3;
static int sound_step4;
void
soldier_footstep(edict_t *self)
{
if (!g_monsterfootsteps->value)
return;
int i;
i = rand() % (3 + 1 - 0) + 0;
if (i == 0)
{
gi.sound(self, CHAN_BODY, sound_step, 1, ATTN_NORM, 0);
}
else if (i == 1)
{
gi.sound(self, CHAN_BODY, sound_step2, 1, ATTN_NORM, 0);
}
else if (i == 2)
{
gi.sound(self, CHAN_BODY, sound_step3, 1, ATTN_NORM, 0);
}
else if (i == 3)
{
gi.sound(self, CHAN_BODY, sound_step4, 1, ATTN_NORM, 0);
}
}
void void
soldier_idle(edict_t *self) soldier_idle(edict_t *self)
@ -207,12 +240,12 @@ mframe_t soldier_frames_walk1[] = {
{ai_walk, 3, NULL}, {ai_walk, 3, NULL},
{ai_walk, 6, NULL}, {ai_walk, 6, NULL},
{ai_walk, 2, NULL}, {ai_walk, 2, NULL},
{ai_walk, 2, NULL}, {ai_walk, 2, soldier_footstep},
{ai_walk, 2, NULL}, {ai_walk, 2, NULL},
{ai_walk, 1, NULL}, {ai_walk, 1, NULL},
{ai_walk, 6, NULL}, {ai_walk, 6, NULL},
{ai_walk, 5, NULL}, {ai_walk, 5, NULL},
{ai_walk, 3, NULL}, {ai_walk, 3, soldier_footstep},
{ai_walk, -1, soldier_walk1_random}, {ai_walk, -1, soldier_walk1_random},
{ai_walk, 0, NULL}, {ai_walk, 0, NULL},
{ai_walk, 0, NULL}, {ai_walk, 0, NULL},
@ -242,17 +275,17 @@ mframe_t soldier_frames_walk1[] = {
mmove_t soldier_move_walk1 = mmove_t soldier_move_walk1 =
{ {
FRAME_walk101, FRAME_walk101,
FRAME_walk133, FRAME_walk133,
soldier_frames_walk1, soldier_frames_walk1,
NULL NULL
}; };
mframe_t soldier_frames_walk2[] = { mframe_t soldier_frames_walk2[] = {
{ai_walk, 4, NULL}, {ai_walk, 4, soldier_footstep},
{ai_walk, 4, NULL}, {ai_walk, 4, NULL},
{ai_walk, 9, NULL}, {ai_walk, 9, NULL},
{ai_walk, 8, NULL}, {ai_walk, 8, NULL},
{ai_walk, 5, NULL}, {ai_walk, 5, soldier_footstep},
{ai_walk, 1, NULL}, {ai_walk, 1, NULL},
{ai_walk, 3, NULL}, {ai_walk, 3, NULL},
{ai_walk, 7, NULL}, {ai_walk, 7, NULL},
@ -303,10 +336,10 @@ mmove_t soldier_move_start_run =
mframe_t soldier_frames_run[] = { mframe_t soldier_frames_run[] = {
{ai_run, 10, NULL}, {ai_run, 10, NULL},
{ai_run, 11, NULL}, {ai_run, 11, soldier_footstep},
{ai_run, 11, NULL}, {ai_run, 11, NULL},
{ai_run, 16, NULL}, {ai_run, 16, NULL},
{ai_run, 10, NULL}, {ai_run, 10, soldier_footstep},
{ai_run, 15, NULL} {ai_run, 15, NULL}
}; };
@ -381,7 +414,7 @@ mmove_t soldier_move_pain2 =
mframe_t soldier_frames_pain3[] = { mframe_t soldier_frames_pain3[] = {
{ai_move, -8, NULL}, {ai_move, -8, NULL},
{ai_move, 10, NULL}, {ai_move, 10, NULL},
{ai_move, -4, NULL}, {ai_move, -4, soldier_footstep},
{ai_move, -1, NULL}, {ai_move, -1, NULL},
{ai_move, -3, NULL}, {ai_move, -3, NULL},
{ai_move, 0, NULL}, {ai_move, 0, NULL},
@ -396,7 +429,7 @@ mframe_t soldier_frames_pain3[] = {
{ai_move, 2, NULL}, {ai_move, 2, NULL},
{ai_move, 4, NULL}, {ai_move, 4, NULL},
{ai_move, 3, NULL}, {ai_move, 3, NULL},
{ai_move, 2, NULL} {ai_move, 2, soldier_footstep}
}; };
mmove_t soldier_move_pain3 = mmove_t soldier_move_pain3 =
@ -911,11 +944,11 @@ soldier_fire4(edict_t *self)
mframe_t soldier_frames_attack4[] = { mframe_t soldier_frames_attack4[] = {
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
{ai_charge, 0, NULL}, {ai_charge, 0, soldier_footstep},
{ai_charge, 0, soldier_fire4}, {ai_charge, 0, soldier_fire4},
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
{ai_charge, 0, NULL}, {ai_charge, 0, NULL},
{ai_charge, 0, NULL} {ai_charge, 0, soldier_footstep}
}; };
mmove_t soldier_move_attack4 = mmove_t soldier_move_attack4 =
@ -965,17 +998,17 @@ soldier_attack6_refire(edict_t *self)
mframe_t soldier_frames_attack6[] = { mframe_t soldier_frames_attack6[] = {
{ai_charge, 10, NULL}, {ai_charge, 10, NULL},
{ai_charge, 4, NULL}, {ai_charge, 4, NULL},
{ai_charge, 12, NULL}, {ai_charge, 12, soldier_footstep},
{ai_charge, 11, soldier_fire8}, {ai_charge, 11, soldier_fire8},
{ai_charge, 13, NULL}, {ai_charge, 13, NULL},
{ai_charge, 18, NULL}, {ai_charge, 18, NULL},
{ai_charge, 15, NULL}, {ai_charge, 15, soldier_footstep},
{ai_charge, 14, NULL}, {ai_charge, 14, NULL},
{ai_charge, 11, NULL}, {ai_charge, 11, NULL},
{ai_charge, 8, NULL}, {ai_charge, 8, soldier_footstep},
{ai_charge, 11, NULL}, {ai_charge, 11, NULL},
{ai_charge, 12, NULL}, {ai_charge, 12, NULL},
{ai_charge, 12, NULL}, {ai_charge, 12, soldier_footstep},
{ai_charge, 17, soldier_attack6_refire} {ai_charge, 17, soldier_attack6_refire}
}; };
@ -1558,6 +1591,10 @@ SP_monster_soldier_x(edict_t *self)
sound_sight1 = gi.soundindex("soldier/solsght1.wav"); sound_sight1 = gi.soundindex("soldier/solsght1.wav");
sound_sight2 = gi.soundindex("soldier/solsrch1.wav"); sound_sight2 = gi.soundindex("soldier/solsrch1.wav");
sound_cock = gi.soundindex("infantry/infatck3.wav"); sound_cock = gi.soundindex("infantry/infatck3.wav");
sound_step = gi.soundindex("player/step1.wav");
sound_step2 = gi.soundindex("player/step2.wav");
sound_step3 = gi.soundindex("player/step3.wav");
sound_step4 = gi.soundindex("player/step4.wav");
self->mass = 100; self->mass = 100;
@ -1603,6 +1640,10 @@ SP_monster_soldier_light(edict_t *self)
sound_pain_light = gi.soundindex("soldier/solpain2.wav"); sound_pain_light = gi.soundindex("soldier/solpain2.wav");
sound_death_light = gi.soundindex("soldier/soldeth2.wav"); sound_death_light = gi.soundindex("soldier/soldeth2.wav");
sound_step = gi.soundindex("player/step1.wav");
sound_step2 = gi.soundindex("player/step2.wav");
sound_step3 = gi.soundindex("player/step3.wav");
sound_step4 = gi.soundindex("player/step4.wav");
gi.modelindex("models/objects/laser/tris.md2"); gi.modelindex("models/objects/laser/tris.md2");
gi.soundindex("misc/lasfly.wav"); gi.soundindex("misc/lasfly.wav");
gi.soundindex("soldier/solatck2.wav"); gi.soundindex("soldier/solatck2.wav");
@ -1634,6 +1675,10 @@ SP_monster_soldier(edict_t *self)
sound_pain = gi.soundindex("soldier/solpain1.wav"); sound_pain = gi.soundindex("soldier/solpain1.wav");
sound_death = gi.soundindex("soldier/soldeth1.wav"); sound_death = gi.soundindex("soldier/soldeth1.wav");
sound_step = gi.soundindex("player/step1.wav");
sound_step2 = gi.soundindex("player/step2.wav");
sound_step3 = gi.soundindex("player/step3.wav");
sound_step4 = gi.soundindex("player/step4.wav");
gi.soundindex("soldier/solatck1.wav"); gi.soundindex("soldier/solatck1.wav");
self->s.skinnum = 2; self->s.skinnum = 2;
@ -1663,6 +1708,10 @@ SP_monster_soldier_ss(edict_t *self)
sound_pain_ss = gi.soundindex("soldier/solpain3.wav"); sound_pain_ss = gi.soundindex("soldier/solpain3.wav");
sound_death_ss = gi.soundindex("soldier/soldeth3.wav"); sound_death_ss = gi.soundindex("soldier/soldeth3.wav");
sound_step = gi.soundindex("player/step1.wav");
sound_step2 = gi.soundindex("player/step2.wav");
sound_step3 = gi.soundindex("player/step3.wav");
sound_step4 = gi.soundindex("player/step4.wav");
gi.soundindex("soldier/solatck3.wav"); gi.soundindex("soldier/solatck3.wav");
self->s.skinnum = 4; self->s.skinnum = 4;

View file

@ -245,6 +245,7 @@ InitGame(void)
skill = gi.cvar("skill", "1", CVAR_LATCH); skill = gi.cvar("skill", "1", CVAR_LATCH);
maxentities = gi.cvar("maxentities", "1024", CVAR_LATCH); maxentities = gi.cvar("maxentities", "1024", CVAR_LATCH);
g_footsteps = gi.cvar("g_footsteps", "1", CVAR_ARCHIVE); g_footsteps = gi.cvar("g_footsteps", "1", CVAR_ARCHIVE);
g_monsterfootsteps = gi.cvar("g_monsterfootsteps", "0", CVAR_ARCHIVE);
g_fix_triggered = gi.cvar ("g_fix_triggered", "0", 0); g_fix_triggered = gi.cvar ("g_fix_triggered", "0", 0);
g_commanderbody_nogod = gi.cvar("g_commanderbody_nogod", "0", CVAR_ARCHIVE); g_commanderbody_nogod = gi.cvar("g_commanderbody_nogod", "0", CVAR_ARCHIVE);