mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-26 22:11:43 +00:00
ebd2c27e0a
- merged the FrontBlock searcher for the Bloodscourge into RoughMonsterSearch. This also fixes the bug that the searcher was not initialized properly for the MageBoss.
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
|
|
{
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
} |