works good, very as it should
is there a way to use the function A_hexenPunch without inheriting from HexenMeleeWeapon ?
edit: suggest change default puff to staffpuff (heretic) of punchpuff *hexen
pufftype = 'BulletPuff';
======================================
create ZSCRIPT.zs in your mod file:
Code: Select all
class HexenMeleeWeapon : Weapon
{
private action bool TryPunch(double angle, int damage, int power, int range, class<Actor> pufftype)
{
Class<Actor> pufftype;
FTranslatedLineTarget t;
double slope = AimLineAttack (angle, 2*range, t, 0., ALF_CHECK3D);
if (t.linetarget != null)
{
LineAttack (angle, 2*range, 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;
}
action void A_HexenPunch(int damage, int range = 0, class<Actor> pufftype = 'BulletPuff', sound hitsound = "", sound misssound = "")
{
if (player == null)
{
return;
}
if (range == 0)
{
range = DEFMELEERANGE;
}
if (pufftype == null)
{
pufftype = 'BulletPuff';
}
for (int i = 0; i < 16; i++)
{
if (TryPunch(angle + i*(45./16), damage, 2, range, pufftype) || TryPunch(angle - i*(45./16), damage, 2, range, pufftype))
{
// hit something
A_StartSound (hitsound, CHAN_WEAPON);
return;
}
}
A_StartSound (misssound, CHAN_WEAPON);
double slope = AimLineAttack (angle, range, null, 0., ALF_CHECK3D);
LineAttack (angle, range, slope, damage, 'Melee', pufftype, true);
}
}
use A_hexenPunch in decorate weapon, but it need to inherit from HexenMeleeWeapon (yes, copy paste of wiki is necessary)
DECORATE:
Code: Select all
ACTOR Mace2 :HexenMeleeWeapon
{
Weapon.SelectionOrder 1400
Weapon.AmmoUse 1
Weapon.AmmoGive1 50
Weapon.YAdjust 15
Weapon.AmmoType "MaceAmmo"
Weapon.SisterWeapon "MacePowered"
Inventory.PickupMessage "$TXT_WPNMACE"
Tag "$TAG_MACE"
States
{
Spawn:
WMCE A -1
Stop
Ready:
MACE A 1 A_WeaponReady
Loop
Deselect:
MACE A 1 A_Lower
Loop
Select:
MACE A 1 A_Raise
Loop
Fire:
TNT1 A 0 A_JumpIfInventory("Backhand", 1, "BackSWING")
MACE H 2
MACE I 2
MACE J 2 A_HEXENPUNCH(RANDOM(20,60)) //<<<<<<===================================================================HERE
MACE KL 2
TNT1 A 5 A_GiveInventory("Backhand", 1)
TNT1 A 7 A_WeaponReady
TNT1 A 1 A_TakeInventory("Backhand", 1)
MACE A 1 Offset(0, 60)
MACE A 1 Offset(0, 52)
MACE A 1 Offset(0, 44)
MACE A 1 Offset(0, 36)
MACE A 1
Goto ready
BackSWING:
MACE M 2 Offset(0,8)
MACE N 2 A_PlaySound("WHOP")
MACE O 2 A_Custompunch(random(45, 85), 1, CPF_NORANDOMPUFFZ, "STAFFPuff", 110)
MACE PQ 2
TNT1 A 9 A_TakeInventory("Backhand", 1)
TNT1 A 7 A_WeaponReady
MACE A 1 Offset(0, 60)
MACE A 1 Offset(0, 52)
MACE A 1 Offset(0, 44)
MACE A 1 Offset(0, 36)
MACE A 1
Goto Ready
}
}