hexen2-hw-hc/gauntlet.hc

264 lines
6.0 KiB
C++

/*
==============================================================================
GAUNTLET
==============================================================================
*/
// For building the model
$cd q:/art/models/weapons/gauntlet/final
$origin 0 5 10
$base base4 512 473
$skin skin3
// FRAME: 1
$frame GntRoot1
// FRAMES: 2 - 14
$frame 1stGnt1 1stGnt2 1stGnt3 1stGnt4 1stGnt5
$frame 1stGnt6 1stGnt7 1stGnt8 1stGnt9 1stGnt10
$frame 1stGnt11 1stGnt12 1stGnt14
// FRAMES 15 - 28
$frame 2ndGnt1 2ndGnt2 2ndGnt3 2ndGnt4 2ndGnt5
$frame 2ndGnt6 2ndGnt7 2ndGnt8 2ndGnt9 2ndGnt10
$frame 2ndGnt11 2ndGnt12 2ndGnt13 2ndGnt15
$frame 2ndGnt16 2ndGnt19
// FRAMES 29 - 40
$frame 3rdGnt1 3rdGnt3 3rdGnt5
$frame 3rdGnt10
$frame 3rdGnt11 3rdGnt12 3rdGnt13 3rdGnt14 3rdGnt15
$frame 3rdGnt17
$frame 3rdGnt21 3rdGnt22
// Frames 41 - 54
$frame GntTap1 GntTap2 GntTap3 GntTap4 GntTap5
$frame GntTap11 GntTap12 GntTap13 GntTap14 GntTap15
$frame GntTap16 GntTap17 GntTap18 GntTap19
// FRAMES: 55 - 67
$frame 7thGnt1 7thGnt2 7thGnt3
$frame 7thGnt6 7thGnt7 7thGnt8 7thGnt9 7thGnt10
$frame 7thGnt11 7thGnt12 7thGnt13 7thGnt14
$frame 7thGnt19
float GAUNT_BASE_DAMAGE = 16;
float GAUNT_ADD_DAMAGE = 12;
float GAUNT_PWR_BASE_DAMAGE = 30;
float GAUNT_PWR_ADD_DAMAGE = 20;
float GAUNT_PUSH = 4;
void W_SetCurrentWeapon(void);
void gauntlet_fire (float anim)
{
vector source;
vector org;
float damg;
entity hitGuy;
makevectors (self.v_angle);
source = self.origin + self.proj_ofs;
traceline (source, source + v_forward*64, FALSE, self); // Straight in front
if (trace_fraction == 1.0)
{
traceline (source, source + v_forward*64 - (v_up * 30), FALSE, self); // 30 down
if (trace_fraction == 1.0)
{
traceline (source, source + v_forward*64 + v_up * 30, FALSE, self); // 30 up
if (trace_fraction == 1.0)
return;
}
}
org = trace_endpos + (v_forward * 4);
if (trace_ent.takedamage)
{
SpawnPuff (org, '0 0 0', 20,trace_ent);
if (self.artifact_active & ART_TOMEOFPOWER)
{
//damg = GAUNT_PWR_BASE_DAMAGE + random(GAUNT_PWR_ADD_DAMAGE);
if(trace_ent.classname == "player")
{
damg = 30 + random(25);
}
else
{
damg = 2; // let the wall collision do the damage
}
org = trace_endpos + (v_forward * -1);
CreateWhiteFlash(org);
sound (self, CHAN_WEAPON, "weapons/gauntht1.wav", 1, ATTN_NORM);
}
else
{
damg = GAUNT_BASE_DAMAGE + random(GAUNT_ADD_DAMAGE);
sound (self, CHAN_WEAPON, "weapons/gauntht1.wav", 1, ATTN_NORM);
}
hitGuy = trace_ent;
T_Damage (trace_ent, self, self, damg);
if(self.artifact_active & ART_TOMEOFPOWER)
{
hitGuy.velocity += normalize(hitGuy.origin - self.origin)*800;
hitGuy.velocity_z += 600;
hitGuy.flags(-)FL_ONGROUND;
}
}
else
{ // hit wall
sound (self, CHAN_WEAPON, "weapons/gauntht2.wav", 1, ATTN_NORM);
WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
WriteByte (MSG_BROADCAST, TE_GUNSHOT);
WriteByte (MSG_BROADCAST, 1);
WriteCoord (MSG_BROADCAST, org_x);
WriteCoord (MSG_BROADCAST, org_y);
WriteCoord (MSG_BROADCAST, org_z);
org = trace_endpos + (v_forward * -1);
org += '0 0 10';
CreateWhiteSmoke(org,'0 0 2',HX_FRAME_TIME);
}
}
void gauntlet_ready (void)
{
self.th_weapon=gauntlet_ready;
self.weaponframe = $GntRoot1;
}
void gauntlet_twitch (void)
{
self.wfs = advanceweaponframe($GntTap1,$GntTap19);
self.th_weapon = gauntlet_twitch;
if (self.weaponframe == $GntTap3)
sound (self, CHAN_VOICE, "fx/wallbrk.wav", 1, ATTN_NORM);
if (self.wfs == WF_LAST_FRAME)
gauntlet_ready();
}
void gauntlet_select (void)
{
self.wfs = advanceweaponframe($2ndGnt6,$2ndGnt1);
self.weaponmodel = "models/gauntlet.mdl";
self.th_weapon=gauntlet_select;
self.last_attack=time;
self.attack_cnt = 0;
if (self.wfs == WF_LAST_FRAME)
{
self.attack_finished = time - 1;
gauntlet_twitch();
}
}
void gauntlet_deselect (void)
{
self.wfs = advanceweaponframe($2ndGnt1,$2ndGnt6);
self.th_weapon=gauntlet_deselect;
self.oldweapon = IT_WEAPON1;
if (self.wfs == WF_LAST_FRAME)
{
W_SetCurrentAmmo();
}
}
void gauntlet_d (void)
{
self.wfs = advanceweaponframe($7thGnt3,$7thGnt19);
self.th_weapon = gauntlet_d;
if (self.weaponframe == $7thGnt6) // Frame 57
sound (self, CHAN_WEAPON, "weapons/gaunt1.wav", 1, ATTN_NORM);
else if (self.weaponframe == $7thGnt9) // Frame 63
gauntlet_fire(4);
if (self.wfs == WF_LAST_FRAME)
gauntlet_ready();
}
void gauntlet_c (void)
{
self.wfs = advanceweaponframe($3rdGnt1,$3rdGnt22);
self.th_weapon = gauntlet_c;
if (self.weaponframe == $3rdGnt5)
sound (self, CHAN_WEAPON, "weapons/gaunt1.wav", 1, ATTN_NORM);
else if (self.weaponframe == $3rdGnt12)
gauntlet_fire(3);
if (self.wfs == WF_LAST_FRAME)
gauntlet_ready();
}
void gauntlet_b (void)
{
self.wfs = advanceweaponframe($2ndGnt1,$2ndGnt19);
self.th_weapon = gauntlet_b;
if ((self.weaponframe == $2ndGnt4) || (self.weaponframe == $2ndGnt5))
self.weaponframe == $2ndGnt6;
if (self.weaponframe == $2ndGnt6)
sound (self, CHAN_WEAPON, "weapons/gaunt1.wav", 1, ATTN_NORM);
else if (self.weaponframe == $2ndGnt9)
gauntlet_fire(2);
if (self.wfs == WF_LAST_FRAME)
gauntlet_ready();
}
void gauntlet_a (void)
{
self.wfs = advanceweaponframe($1stGnt1,$1stGnt14);
self.th_weapon = gauntlet_a;
if (self.weaponframe == $1stGnt2)
sound (self, CHAN_WEAPON, "weapons/gaunt1.wav", 1, ATTN_NORM);
else if (self.weaponframe == $1stGnt4)
gauntlet_fire(1);
if (self.wfs == WF_LAST_FRAME)
gauntlet_ready();
}
void pal_gauntlet_fire(void)
{
// r = random(); // Eventually attacks will be random in order
if (self.attack_cnt < 1)
gauntlet_a ();
else if (self.attack_cnt < 2)
gauntlet_b ();
else if (self.attack_cnt < 3)
gauntlet_c ();
else if (self.attack_cnt < 4)
{
gauntlet_d ();
self.attack_cnt=-1;
}
self.attack_cnt += 1;
self.attack_finished = time + 0.5;
}