- scriptified A_FireProjectile
This commit is contained in:
parent
e071be8371
commit
7bb3855439
2 changed files with 62 additions and 77 deletions
|
|
@ -1626,77 +1626,6 @@ DEFINE_ACTION_FUNCTION(AStateProvider, A_JumpIfNoAmmo)
|
|||
|
||||
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// A_FireProjectile
|
||||
//
|
||||
//==========================================================================
|
||||
enum FP_Flags
|
||||
{
|
||||
FPF_AIMATANGLE = 1,
|
||||
FPF_TRANSFERTRANSLATION = 2,
|
||||
FPF_NOAUTOAIM = 4,
|
||||
};
|
||||
DEFINE_ACTION_FUNCTION(AStateProvider, A_FireProjectile)
|
||||
{
|
||||
PARAM_ACTION_PROLOGUE(AStateProvider);
|
||||
PARAM_CLASS (ti, AActor);
|
||||
PARAM_ANGLE (angle);
|
||||
PARAM_BOOL (useammo);
|
||||
PARAM_FLOAT (spawnofs_xy);
|
||||
PARAM_FLOAT (spawnheight);
|
||||
PARAM_INT (flags);
|
||||
PARAM_ANGLE (pitch);
|
||||
|
||||
if (!self->player)
|
||||
ACTION_RETURN_OBJECT(nullptr);
|
||||
|
||||
player_t *player = self->player;
|
||||
AWeapon *weapon = player->ReadyWeapon;
|
||||
FTranslatedLineTarget t;
|
||||
|
||||
// Only use ammo if called from a weapon
|
||||
if (useammo && ACTION_CALL_FROM_PSPRITE() && weapon)
|
||||
{
|
||||
if (!weapon->DepleteAmmo(weapon->bAltFire, true))
|
||||
ACTION_RETURN_OBJECT(nullptr); // out of ammo
|
||||
}
|
||||
|
||||
if (ti)
|
||||
{
|
||||
DAngle ang = self->Angles.Yaw - 90;
|
||||
DVector2 ofs = ang.ToVector(spawnofs_xy);
|
||||
DAngle shootangle = self->Angles.Yaw;
|
||||
|
||||
if (flags & FPF_AIMATANGLE) shootangle += angle;
|
||||
|
||||
// Temporarily adjusts the pitch
|
||||
DAngle saved_player_pitch = self->Angles.Pitch;
|
||||
self->Angles.Pitch += pitch;
|
||||
AActor * misl=P_SpawnPlayerMissile (self, ofs.X, ofs.Y, spawnheight, ti, shootangle, &t, NULL, false, (flags & FPF_NOAUTOAIM) != 0);
|
||||
self->Angles.Pitch = saved_player_pitch;
|
||||
|
||||
// automatic handling of seeker missiles
|
||||
if (misl)
|
||||
{
|
||||
if (flags & FPF_TRANSFERTRANSLATION)
|
||||
misl->Translation = self->Translation;
|
||||
if (t.linetarget && !t.unlinked && (misl->flags2 & MF2_SEEKERMISSILE))
|
||||
misl->tracer = t.linetarget;
|
||||
if (!(flags & FPF_AIMATANGLE))
|
||||
{
|
||||
// This original implementation is to aim straight ahead and then offset
|
||||
// the angle from the resulting direction.
|
||||
misl->Angles.Yaw += angle;
|
||||
misl->VelFromAngle(misl->VelXYToSpeed());
|
||||
}
|
||||
}
|
||||
ACTION_RETURN_OBJECT(misl);
|
||||
}
|
||||
ACTION_RETURN_OBJECT(nullptr);
|
||||
}
|
||||
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// A_CustomPunch
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue