|
Note: Wait! Stop! You do not need to copy this actor's code into your project! Here's why:
- This actor is already defined in GZDoom, there's no reason to define it again.
- In fact, trying to define an actor with the same name will cause an error (because it already exists).
- If you want to make your own version of this actor, use inheritance.
- Definitions for existing actors are put on the wiki for reference purpose only.
|
Spiked gauntlets
|
Actor type
|
Weapon
|
Game
|
(Hexen)
|
DoomEd Number
|
None
|
Class Name
|
FWeapFist
|
Classes: Inventory→Weapon→FighterWeapon→FWeapFist
The spiked gauntlets that the fighter uses. When hitting a monster or certain objects, it does two normal punches and then a right hook which can finish off some weak monsters.
|
Note: The ZScript definition below is for reference and may be different in the current version of GZDoom.The most up-to-date version of this code can be found on GZDoom GitHub.
|
class FWeapFist : FighterWeapon
{
Default
{
+BLOODSPLATTER
Weapon.SelectionOrder 3400;
+WEAPON.MELEEWEAPON
Weapon.KickBack 150;
Obituary "$OB_MPFWEAPFIST";
Tag "$TAG_FWEAPFIST";
}
States
{
Select:
FPCH A 1 A_Raise;
Loop;
Deselect:
FPCH A 1 A_Lower;
Loop;
Ready:
FPCH A 1 A_WeaponReady;
Loop;
Fire:
FPCH B 5 Offset (5, 40);
FPCH C 4 Offset (5, 40);
FPCH D 4 Offset (5, 40) A_FPunchAttack;
FPCH C 4 Offset (5, 40);
FPCH B 5 Offset (5, 40) A_ReFire;
Goto Ready;
Fire2:
FPCH DE 4 Offset (5, 40);
FPCH E 1 Offset (15, 50);
FPCH E 1 Offset (25, 60);
FPCH E 1 Offset (35, 70);
FPCH E 1 Offset (45, 80);
FPCH E 1 Offset (55, 90);
FPCH E 1 Offset (65, 100);
FPCH E 10 Offset (0, 150);
Goto Ready;
}
//============================================================================
//
// TryPunch
//
// Returns true if an actor was punched, false if not.
//
//============================================================================
private action bool TryPunch(double angle, int damage, int power)
{
Class<Actor> pufftype;
FTranslatedLineTarget t;
double slope = AimLineAttack (angle, 2*DEFMELEERANGE, t, 0., ALF_CHECK3D);
if (t.linetarget != null)
{
if (++weaponspecial >= 3)
{
damage <<= 1;
power *= 3;
pufftype = "HammerPuff";
}
else
{
pufftype = "PunchPuff";
}
LineAttack (angle, 2*DEFMELEERANGE, slope, damage, 'Melee', pufftype, true, t);
if (t.linetarget != null)
{
// The mass threshold has been changed to CommanderKeen's value which has been used most often for 'unmovable' stuff.
if (t.linetarget.player != null ||
(t.linetarget.Mass < 10000000 && (t.linetarget.bIsMonster)))
{
if (!t.linetarget.bDontThrust)
t.linetarget.Thrust(power, t.attackAngleFromSource);
}
AdjustPlayerAngle(t);
return true;
}
}
return false;
}
//============================================================================
//
// A_FPunchAttack
//
//============================================================================
action void A_FPunchAttack()
{
if (player == null)
{
return;
}
int damage = random[FighterAtk](40, 55);
for (int i = 0; i < 16; i++)
{
if (TryPunch(angle + i*(45./16), damage, 2) ||
TryPunch(angle - i*(45./16), damage, 2))
{ // hit something
if (weaponspecial >= 3)
{
weaponspecial = 0;
player.SetPsprite(PSP_WEAPON, player.ReadyWeapon.FindState("Fire2"));
A_StartSound ("*fistgrunt", CHAN_VOICE);
}
return;
}
}
// didn't find any creatures, so try to strike any walls
weaponspecial = 0;
double slope = AimLineAttack (angle, DEFMELEERANGE, null, 0., ALF_CHECK3D);
LineAttack (angle, DEFMELEERANGE, slope, damage, 'Melee', "PunchPuff", true);
}
}
|
Note: This is legacy code, kept for archival purposes only. DECORATE is deprecated in GZDoom and is completely superseded by ZScript. GZDoom internally uses the ZScript definition above.
|
ACTOR FWeapFist : FighterWeapon
{
+BLOODSPLATTER
Weapon.SelectionOrder 3400
+WEAPON.MELEEWEAPON
Weapon.KickBack 150
Obituary "$OB_MPFWEAPFIST"
Tag "$TAG_FWEAPFIST"
action native A_FPunchAttack();
States
{
Select:
FPCH A 1 A_Raise
Loop
Deselect:
FPCH A 1 A_Lower
Loop
Ready:
FPCH A 1 A_WeaponReady
Loop
Fire:
FPCH B 5 Offset(5, 40)
FPCH C 4 Offset(5, 40)
FPCH D 4 Offset(5, 40) A_FPunchAttack
FPCH C 4 Offset(5, 40)
FPCH B 5 Offset(5, 40) A_ReFire
Goto Ready
Fire2:
FPCH DE 4 Offset(5, 40)
FPCH E 1 Offset(15, 50)
FPCH E 1 Offset(25, 60)
FPCH E 1 Offset(35, 70)
FPCH E 1 Offset(45, 80)
FPCH E 1 Offset(55, 90)
FPCH E 1 Offset(65, 90)
FPCH E 10 Offset(0, 150)
Goto Ready
}
}