hexen2/H2MP/hcode/gauntlet.hc
2000-11-10 00:00:00 +00:00

371 lines
8.6 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;
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);
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);
}
T_Damage (trace_ent, self, self, damg);
}
else
{ // hit wall
sound (self, CHAN_WEAPON, "weapons/gauntht2.wav", 1, ATTN_NORM);
WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
WriteByte (MSG_BROADCAST, TE_GUNSHOT);
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;
}
/*
* $Log: /H3MP/hcode/gauntlet.hc $
*
* 60 10/28/97 1:01p Mgummelt
* Massive replacement, rewrote entire code... just kidding. Added
* support for 5th class.
*
* 58 8/31/97 9:42p Rlove
*
* 57 8/26/97 7:38a Mgummelt
*
* 56 8/20/97 5:47a Rlove
*
* 55 8/19/97 7:53p Rlove
*
* 54 8/19/97 3:13p Rlove
*
* 53 8/12/97 6:10p Mgummelt
*
* 52 8/08/97 6:21p Mgummelt
*
* 51 8/05/97 11:10a Rlove
* Slowed it down a little
*
* 50 7/31/97 1:37p Mgummelt
*
* 49 7/24/97 4:06p Rlove
*
* 48 7/22/97 7:31a Rlove
*
* 47 7/15/97 2:33p Mgummelt
*
* 46 7/15/97 2:30p Mgummelt
*
* 45 7/12/97 9:09a Rlove
* Reworked Assassin Punch Dagger
*
* 44 7/10/97 6:39p Rlove
*
* 43 7/10/97 11:19a Rlove
*
* 42 6/18/97 6:33p Mgummelt
*
* 41 6/18/97 1:58p Mgummelt
*
* 40 6/12/97 12:15p Rlove
*
* 39 6/09/97 11:20a Rlove
*
* 38 6/09/97 7:22a Rlove
* ONGROUND was being turned off without being checked if it was turned
* on.
*
* 37 6/05/97 9:29a Rlove
* Weapons now have deselect animations
*
* 36 6/02/97 9:55a Rlove
* Changed where firing is done
*
* 35 6/02/97 9:45a Rlove
*
* 34 5/23/97 2:54p Mgummelt
*
* 33 5/15/97 5:05a Mgummelt
*
* 32 5/15/97 12:30a Mgummelt
*
* 31 5/13/97 3:25p Rlove
* It now aims up or down 30 degrees
*
* 30 5/12/97 11:06a Rlove
*
* 29 5/12/97 11:06a Rlove
*
* 27 5/12/97 10:31a Rlove
*
* 26 5/06/97 1:29p Mgummelt
*
* 25 5/05/97 10:29a Mgummelt
*
* 24 4/26/97 6:30a Rlove
* Added thingtype of CLAY for pots
*
* 23 4/25/97 4:19p Rlove
*
* 22 4/24/97 4:04p Rlove
*
* 21 4/24/97 4:03p Rlove
*
* 20 4/24/97 2:43p Rlove
* Now it won't push everything
*
* 19 4/21/97 9:16a Rlove
* Tried new axe animations
*
* 18 4/18/97 2:24p Rlove
* Changed vorpal sword over to new weapon code
*
* 17 4/18/97 12:06p Rlove
* Adapted gauntlets to fit new weapons code
*
* 16 4/18/97 11:44a Rlove
* changed advanceweaponframe to return frame state
*
* 15 4/18/97 11:16a Rlove
* Added smoke sprite
*
* 14 4/17/97 1:28p Rlove
* added new built advanceweaponframe
*
* 13 4/16/96 11:51p Mgummelt
*
* 12 4/16/97 10:36a Rlove
* Gauntlets now spin or move enemies depending on the gauntlet animation
*
* 11 4/14/97 5:04p Rlove
*
* 8 4/10/97 2:14p Rlove
* Some tweaking of gauntlets and vorpal sword.
*
* 7 4/09/97 2:41p Rlove
*
* 6 4/04/97 5:40p Rlove
*
* 5 4/01/97 2:44p Rlove
* New weapons, vorpal sword and purifier
*
*/