qzdoom/wadsrc/static/zscript/hexen/clericmace.txt
Christoph Oelckers a851a5d151 - fixed: For melee attacks with a short attack range P_AimLineAttack must check for hits from above and below.
This is necessary to be in line with P_LineAttack which does check for those.
2018-06-03 17:49:00 +02:00

87 lines
1.9 KiB
Text

// The Cleric's Mace --------------------------------------------------------
class CWeapMace : ClericWeapon
{
Default
{
Weapon.SelectionOrder 3500;
Weapon.KickBack 150;
Weapon.YAdjust -8;
+BLOODSPLATTER
Obituary "$OB_MPCWEAPMACE";
Tag "$TAG_CWEAPMACE";
}
States
{
Select:
CMCE A 1 A_Raise;
Loop;
Deselect:
CMCE A 1 A_Lower;
Loop;
Ready:
CMCE A 1 A_WeaponReady;
Loop;
Fire:
CMCE B 2 Offset (60, 20);
CMCE B 1 Offset (30, 33);
CMCE B 2 Offset (8, 45);
CMCE C 1 Offset (8, 45);
CMCE D 1 Offset (8, 45);
CMCE E 1 Offset (8, 45);
CMCE E 1 Offset (-11, 58) A_CMaceAttack;
CMCE F 1 Offset (8, 45);
CMCE F 2 Offset (-8, 74);
CMCE F 1 Offset (-20, 96);
CMCE F 8 Offset (-33, 160);
CMCE A 2 Offset (8, 75) A_ReFire;
CMCE A 1 Offset (8, 65);
CMCE A 2 Offset (8, 60);
CMCE A 1 Offset (8, 55);
CMCE A 2 Offset (8, 50);
CMCE A 1 Offset (8, 45);
Goto Ready;
}
//===========================================================================
//
// A_CMaceAttack
//
//===========================================================================
action void A_CMaceAttack()
{
FTranslatedLineTarget t;
if (player == null)
{
return;
}
int damage = 25+(random[MaceAtk]()&15);
for (int i = 0; i < 16; i++)
{
for (int j = 1; j >= -1; j -= 2)
{
double ang = angle + j*i*(45. / 16);
double slope = AimLineAttack(ang, 2 * DEFMELEERANGE, t, 0., ALF_CHECK3D);
if (t.linetarget)
{
LineAttack(ang, 2 * DEFMELEERANGE, slope, damage, 'Melee', "HammerPuff", true, t);
if (t.linetarget != null)
{
AdjustPlayerAngle(t);
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', "HammerPuff");
}
}