|
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.
|
Fist
|
Actor type
|
Weapon
|
Game
|
(Doom)
|
DoomEd Number
|
None
|
Class Name
|
Fist
|
Classes: Inventory→Weapon→Fist
Your (hairy), brass-knuckled fist. Used as a melee weapon. Automatically selected as a last resort if you run out of ammo and do not have the chainsaw. Picking up the berserk pack also switches to this weapon.
|
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 Fist : Weapon
{
Default
{
Weapon.SelectionOrder 3700;
Weapon.KickBack 100;
Obituary "$OB_MPFIST";
Tag "$TAG_FIST";
+WEAPON.WIMPY_WEAPON
+WEAPON.MELEEWEAPON
+WEAPON.NOAUTOSWITCHTO
}
States
{
Ready:
PUNG A 1 A_WeaponReady;
Loop;
Deselect:
PUNG A 1 A_Lower;
Loop;
Select:
PUNG A 1 A_Raise;
Loop;
Fire:
PUNG B 4;
PUNG C 4 A_Punch;
PUNG D 5;
PUNG C 4;
PUNG B 5 A_ReFire;
Goto Ready;
}
}
//===========================================================================
//
// Code (must be attached to Actor)
//
//===========================================================================
extend class Actor
{
action void A_Punch()
{
FTranslatedLineTarget t;
if (player != null)
{
Weapon weap = player.ReadyWeapon;
if (weap != null && !weap.bDehAmmo && invoker == weap && stateinfo != null && stateinfo.mStateType == STATE_Psprite)
{
if (!weap.DepleteAmmo (weap.bAltFire))
return;
}
}
int damage = random[Punch](1, 10) << 1;
if (FindInventory("PowerStrength"))
damage *= 10;
double ang = angle + Random2[Punch]() * (5.625 / 256);
double range = MeleeRange + MELEEDELTA;
double pitch = AimLineAttack (ang, range, null, 0., ALF_CHECK3D);
LineAttack (ang, range, pitch, damage, 'Melee', "BulletPuff", LAF_ISMELEEATTACK, t);
// turn to face target
if (t.linetarget)
{
A_StartSound ("*fist", CHAN_WEAPON);
angle = t.angleFromSource;
}
}
}
|
Warning: 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 Fist : Weapon
{
Weapon.SelectionOrder 3700
Weapon.KickBack 100
Obituary "$OB_MPFIST"
Tag "$TAG_FIST"
+WEAPON.WIMPY_WEAPON
+WEAPON.MELEEWEAPON
States
{
Ready:
PUNG A 1 A_WeaponReady
Loop
Deselect:
PUNG A 1 A_Lower
Loop
Select:
PUNG A 1 A_Raise
Loop
Fire:
PUNG B 4
PUNG C 4 A_Punch
PUNG D 5
PUNG C 4
PUNG B 5 A_ReFire
Goto Ready
}
}