mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-27 06:12:19 +00:00
84 lines
No EOL
1.9 KiB
Text
84 lines
No EOL
1.9 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 native
|
|
{
|
|
Default
|
|
{
|
|
Weapon.Kickback 150;
|
|
Inventory.ForbiddenTo "FighterPlayer", "ClericPlayer";
|
|
}
|
|
}
|
|
|
|
extend class Actor
|
|
{
|
|
//============================================================================
|
|
//
|
|
// AdjustPlayerAngle
|
|
//
|
|
//============================================================================
|
|
|
|
const MAX_ANGLE_ADJUST = (5.);
|
|
|
|
void AdjustPlayerAngle(FTranslatedLineTarget t)
|
|
{
|
|
// normally this will adjust relative to the actual direction to the target,
|
|
// but with arbitrary portals that cannot be calculated so using the actual
|
|
// attack angle is the only option.
|
|
double atkangle = t.unlinked ? t.angleFromSource : AngleTo(t.linetarget);
|
|
double difference = deltaangle(Angle, atkangle);
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
} |