gzdoom/wadsrc/static/zscript/hexen/baseweapons.txt
Christoph Oelckers b2d1b0d7a6 - fixed: FTranslatedLineTarget::angleFromSource returned the attack angle, not the angle between actors when returned from P_LineAttack.
For most attack functions this is wrong, it's only the Hexen fighter attack needing this particular value, so it has been split up into two return values now.
2016-12-06 11:04:54 +01:00

80 lines
No EOL
1.6 KiB
Text

// The Doom and Heretic players are not excluded from pickup in case
// somebody wants to use these weapons with either of those games.
class FighterWeapon : Weapon
{
Default
{
Weapon.Kickback 150;
Inventory.ForbiddenTo "ClericPlayer", "MagePlayer";
}
}
class ClericWeapon : Weapon
{
Default
{
Weapon.Kickback 150;
Inventory.ForbiddenTo "FighterPlayer", "MagePlayer";
}
}
class MageWeapon : Weapon
{
Default
{
Weapon.Kickback 150;
Inventory.ForbiddenTo "FighterPlayer", "ClericPlayer";
}
}
extend class Actor
{
//============================================================================
//
// AdjustPlayerAngle
//
//============================================================================
const MAX_ANGLE_ADJUST = (5.);
void AdjustPlayerAngle(FTranslatedLineTarget t)
{
double difference = t.angleFromSource;
if (abs(difference) > MAX_ANGLE_ADJUST)
{
if (difference > 0)
{
angle += MAX_ANGLE_ADJUST;
}
else
{
angle -= MAX_ANGLE_ADJUST;
}
}
else
{
angle = t.angleFromSource;
}
}
//============================================================================
//
// A_DropQuietusPieces
//
//============================================================================
void A_DropWeaponPieces(class<Actor> p1, class<Actor> p2, class<Actor> p3)
{
for (int i = 0, j = 0; i < 3; ++i)
{
Actor piece = Spawn (j == 0 ? p1 : j == 1 ? p2 : p3, Pos, ALLOW_REPLACE);
if (piece != null)
{
piece.Vel = self.Vel + AngleToVector(i * 120., 1);
piece.bDropped = true;
j = (j == 0) ? (random[PieceDrop]() & 1) + 1 : 3-j;
}
}
}
}