/*
==============================================================================

SOLDIER / PLAYER

==============================================================================
*/


$cd /raid/quake/id1/models/soldier3
$origin 0 -6 24
$base base		
$skin skin

$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8

$frame death1 death2 death3 death4 death5 death6 death7 death8
$frame death9 death10

$frame deathc1 deathc2 deathc3 deathc4 deathc5 deathc6 deathc7 deathc8
$frame deathc9 deathc10 deathc11

$frame load1 load2 load3 load4 load5 load6 load7 load8 load9 load10 load11

$frame pain1 pain2 pain3 pain4 pain5 pain6

$frame painb1 painb2 painb3 painb4 painb5 painb6 painb7 painb8 painb9 painb10
$frame painb11 painb12 painb13 painb14

$frame painc1 painc2 painc3 painc4 painc5 painc6 painc7 painc8 painc9 painc10
$frame painc11 painc12 painc13

$frame run1 run2 run3 run4 run5 run6 run7 run8

$frame shoot1 shoot2 shoot3 shoot4 shoot5 shoot6 shoot7 shoot8 shoot9

$frame prowl_1 prowl_2 prowl_3 prowl_4 prowl_5 prowl_6 prowl_7 prowl_8
$frame prowl_9 prowl_10 prowl_11 prowl_12 prowl_13 prowl_14 prowl_15 prowl_16
$frame prowl_17 prowl_18 prowl_19 prowl_20 prowl_21 prowl_22 prowl_23 prowl_24

/*
==============================================================================
SOLDIER CODE
==============================================================================
*/


void() army_fire;

void() army_stand1=[	$stand1,	army_stand2	] {ai_stand();};
void() army_stand2=[	$stand2,	army_stand3	] {ai_stand();};
void() army_stand3=[	$stand3,	army_stand4	] {ai_stand();};
void() army_stand4=[	$stand4,	army_stand5	] {ai_stand();};
void() army_stand5=[	$stand5,	army_stand6	] {ai_stand();};
void() army_stand6=[	$stand6,	army_stand7	] {ai_stand();};
void() army_stand7=[	$stand7,	army_stand8	] {ai_stand();};
void() army_stand8=[	$stand8,	army_stand1	] {ai_stand();};

void() army_walk1=[	$prowl_1,	army_walk2	] {
if (random() < 0.2)
	sound (self, CHAN_VOICE, "soldier/idle.wav", 1, ATTN_IDLE);
ai_walk(1);};
void() army_walk2=[	$prowl_2,	army_walk3	] {ai_walk(1);};
void() army_walk3=[	$prowl_3,	army_walk4	] {ai_walk(1);};
void() army_walk4=[	$prowl_4,	army_walk5	] {ai_walk(1);};
void() army_walk5=[	$prowl_5,	army_walk6	] {ai_walk(2);};
void() army_walk6=[	$prowl_6,	army_walk7	] {ai_walk(3);};
void() army_walk7=[	$prowl_7,	army_walk8	] {ai_walk(4);};
void() army_walk8=[	$prowl_8,	army_walk9	] {ai_walk(4);};
void() army_walk9=[	$prowl_9,	army_walk10	] {ai_walk(2);};
void() army_walk10=[	$prowl_10,	army_walk11	] {ai_walk(2);};
void() army_walk11=[	$prowl_11,	army_walk12	] {ai_walk(2);};
void() army_walk12=[	$prowl_12,	army_walk13	] {ai_walk(1);};
void() army_walk13=[	$prowl_13,	army_walk14	] {ai_walk(0);};
void() army_walk14=[	$prowl_14,	army_walk15	] {ai_walk(1);};
void() army_walk15=[	$prowl_15,	army_walk16	] {ai_walk(1);};
void() army_walk16=[	$prowl_16,	army_walk17	] {ai_walk(1);};
void() army_walk17=[	$prowl_17,	army_walk18	] {ai_walk(3);};
void() army_walk18=[	$prowl_18,	army_walk19	] {ai_walk(3);};
void() army_walk19=[	$prowl_19,	army_walk20	] {ai_walk(3);};
void() army_walk20=[	$prowl_20,	army_walk21	] {ai_walk(3);};
void() army_walk21=[	$prowl_21,	army_walk22	] {ai_walk(2);};
void() army_walk22=[	$prowl_22,	army_walk23	] {ai_walk(1);};
void() army_walk23=[	$prowl_23,	army_walk24	] {ai_walk(1);};
void() army_walk24=[	$prowl_24,	army_walk1	] {ai_walk(1);};

void() army_run1=[	$run1,		army_run2	] {
if (random() < 0.2)
	sound (self, CHAN_VOICE, "soldier/idle.wav", 1, ATTN_IDLE);
ai_run(11);};
void() army_run2=[	$run2,		army_run3	] {ai_run(15);};
void() army_run3=[	$run3,		army_run4	] {ai_run(10);};
void() army_run4=[	$run4,		army_run5	] {ai_run(10);};
void() army_run5=[	$run5,		army_run6	] {ai_run(8);};
void() army_run6=[	$run6,		army_run7	] {ai_run(15);};
void() army_run7=[	$run7,		army_run8	] {ai_run(10);};
void() army_run8=[	$run8,		army_run1	] {ai_run(8);};

void() army_atk1=[	$shoot1,	army_atk2	] {ai_face();};
void() army_atk2=[	$shoot2,	army_atk3	] {ai_face();};
void() army_atk3=[	$shoot3,	army_atk4	] {ai_face();};
void() army_atk4=[	$shoot4,	army_atk5	] {ai_face();};
void() army_atk5=[	$shoot5,	army_atk6	] {ai_face();army_fire();
self.effects = self.effects | EF_MUZZLEFLASH;};
void() army_atk6=[	$shoot6,	army_atk7	] {ai_face();};
void() army_atk7=[	$shoot7,	army_atk8	] {ai_face();SUB_CheckRefire (army_atk1);};
void() army_atk8=[	$shoot8,	army_atk9	] {ai_face();};
void() army_atk9=[	$shoot9,	army_run1	] {ai_face();};


void() army_pain1=[	$pain1,		army_pain2	] {};
void() army_pain2=[	$pain2,		army_pain3	] {};
void() army_pain3=[	$pain3,		army_pain4	] {};
void() army_pain4=[	$pain4,		army_pain5	] {};
void() army_pain5=[	$pain5,		army_pain6	] {};
void() army_pain6=[	$pain6,		army_run1	] {ai_pain(1);};

void() army_painb1=[	$painb1,	army_painb2	] {};
void() army_painb2=[	$painb2,	army_painb3	] {ai_painforward(13);};
void() army_painb3=[	$painb3,	army_painb4	] {ai_painforward(9);};
void() army_painb4=[	$painb4,	army_painb5	] {};
void() army_painb5=[	$painb5,	army_painb6	] {};
void() army_painb6=[	$painb6,	army_painb7	] {};
void() army_painb7=[	$painb7,	army_painb8	] {};
void() army_painb8=[	$painb8,	army_painb9	] {};
void() army_painb9=[	$painb9,	army_painb10] {};
void() army_painb10=[	$painb10,	army_painb11] {};
void() army_painb11=[	$painb11,	army_painb12] {};
void() army_painb12=[	$painb12,	army_painb13] {ai_pain(2);};
void() army_painb13=[	$painb13,	army_painb14] {};
void() army_painb14=[	$painb14,	army_run1	] {};

void() army_painc1=[	$painc1,	army_painc2	] {};
void() army_painc2=[	$painc2,	army_painc3	] {ai_pain(1);};
void() army_painc3=[	$painc3,	army_painc4	] {};
void() army_painc4=[	$painc4,	army_painc5	] {};
void() army_painc5=[	$painc5,	army_painc6	] {ai_painforward(1);};
void() army_painc6=[	$painc6,	army_painc7	] {ai_painforward(1);};
void() army_painc7=[	$painc7,	army_painc8	] {};
void() army_painc8=[	$painc8,	army_painc9	] {ai_pain(1);};
void() army_painc9=[	$painc9,	army_painc10] {ai_painforward(4);};
void() army_painc10=[	$painc10,	army_painc11] {ai_painforward(3);};
void() army_painc11=[	$painc11,	army_painc12] {ai_painforward(6);};
void() army_painc12=[	$painc12,	army_painc13] {ai_painforward(8);};
void() army_painc13=[	$painc13,	army_run1] {};

void(entity attacker, float damage) army_pain=
{
	local float r;
	
	if (self.pain_finished > time)
		return;

	r = random();

	if (r < 0.2)
	{
		self.pain_finished = time + 0.6;
		army_pain1 ();
		sound (self, CHAN_VOICE, "soldier/pain1.wav", 1, ATTN_NORM);
	}
	else if (r < 0.6)
	{
		self.pain_finished = time + 1.1;
		army_painb1 ();
		sound (self, CHAN_VOICE, "soldier/pain2.wav", 1, ATTN_NORM);
	}
	else
	{
		self.pain_finished = time + 1.1;
		army_painc1 ();
		sound (self, CHAN_VOICE, "soldier/pain2.wav", 1, ATTN_NORM);
	}
};


void() army_fire=
{
	local	vector	dir;
	local	entity	en;
	
	ai_face();
	
	sound (self, CHAN_WEAPON, "soldier/sattck1.wav", 1, ATTN_NORM);	

// fire somewhat behind the player, so a dodging player is harder to hit
	en = self.enemy;
	
	dir = en.origin - en.velocity*0.2;
	dir = normalize (dir - self.origin);
	
	FireBullets (4, dir, '0.1 0.1 0');
};



void() army_die1=[	$death1,	army_die2	] {};
void() army_die2=[	$death2,	army_die3	] {};
void() army_die3=[	$death3,	army_die4	]
{self.solid = SOLID_NOT;self.ammo_shells = 5;DropBackpack();};
void() army_die4=[	$death4,	army_die5	] {};
void() army_die5=[	$death5,	army_die6	] {};
void() army_die6=[	$death6,	army_die7	] {};
void() army_die7=[	$death7,	army_die8	] {};
void() army_die8=[	$death8,	army_die9	] {};
void() army_die9=[	$death9,	army_die10	] {};
void() army_die10=[	$death10,	army_die10	] {};

void() army_cdie1=[	$deathc1,	army_cdie2	] {};
void() army_cdie2=[	$deathc2,	army_cdie3	] {ai_back(5);};
void() army_cdie3=[	$deathc3,	army_cdie4	]
{self.solid = SOLID_NOT;self.ammo_shells = 5;DropBackpack();ai_back(4);};
void() army_cdie4=[	$deathc4,	army_cdie5	] {ai_back(13);};
void() army_cdie5=[	$deathc5,	army_cdie6	] {ai_back(3);};
void() army_cdie6=[	$deathc6,	army_cdie7	] {ai_back(4);};
void() army_cdie7=[	$deathc7,	army_cdie8	] {};
void() army_cdie8=[	$deathc8,	army_cdie9	] {};
void() army_cdie9=[	$deathc9,	army_cdie10	] {};
void() army_cdie10=[	$deathc10,	army_cdie11	] {};
void() army_cdie11=[	$deathc11,	army_cdie11	] {};


void() army_die=
{
// check for gib
	if (self.health < -35)
	{
		sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
		ThrowHead ("progs/h_guard.mdl", self.health);
		ThrowGib ("progs/gib1.mdl", self.health);
		ThrowGib ("progs/gib2.mdl", self.health);
		ThrowGib ("progs/gib3.mdl", self.health);
		return;
	}

// regular death
	sound (self, CHAN_VOICE, "soldier/death1.wav", 1, ATTN_NORM);
	if (random() < 0.5)
		army_die1 ();
	else
		army_cdie1 ();
};


/*QUAKED monster_army (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/

void() monster_army=
{	
	if (deathmatch)
	{
		remove(self);
		return;
	}
	precache_model ("progs/soldier.mdl");
	precache_model ("progs/h_guard.mdl");
	precache_model ("progs/gib1.mdl");
	precache_model ("progs/gib2.mdl");
	precache_model ("progs/gib3.mdl");

	precache_sound ("soldier/death1.wav");
	precache_sound ("soldier/idle.wav");
	precache_sound ("soldier/pain1.wav");
	precache_sound ("soldier/pain2.wav");
	precache_sound ("soldier/sattck1.wav");
	precache_sound ("soldier/sight1.wav");

	precache_sound ("player/udeath.wav");		// gib death


	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_STEP;

	setmodel (self, "progs/soldier.mdl");

	setsize (self, '-16 -16 -24', '16 16 40');
	self.health = 30;

	self.th_stand = army_stand1;
	self.th_walk = army_walk1;
	self.th_run = army_run1;
	self.th_missile = army_atk1;
	self.th_pain = army_pain;
	self.th_die = army_die;

	walkmonster_start ();
};