- added an override for NOTAUTOAIMED flag when using P_AimLineAttack for informative CCMDs.

The flag is explicitly blocked for script use.
This commit is contained in:
Christoph Oelckers 2022-06-16 10:07:22 +02:00
parent 74866c28ce
commit de4627a477
6 changed files with 6 additions and 2 deletions

View file

@ -53,7 +53,7 @@ void C_PrintInfo(AActor *target, bool verbose)
void C_AimLine(FTranslatedLineTarget *t, bool nonshootable) void C_AimLine(FTranslatedLineTarget *t, bool nonshootable)
{ {
P_AimLineAttack(players[consoleplayer].mo,players[consoleplayer].mo->Angles.Yaw, MISSILERANGE, t, 0., P_AimLineAttack(players[consoleplayer].mo,players[consoleplayer].mo->Angles.Yaw, MISSILERANGE, t, 0.,
(nonshootable) ? ALF_CHECKNONSHOOTABLE|ALF_FORCENOSMART : 0); (nonshootable) ? ALF_CHECKNONSHOOTABLE|ALF_FORCENOSMART|ALF_IGNORENOAUTOAIM : ALF_IGNORENOAUTOAIM);
} }
void C_PrintInv(AActor *target) void C_PrintInv(AActor *target)

View file

@ -310,6 +310,7 @@ enum // P_AimLineAttack flags
ALF_NOFRIENDS = 16, ALF_NOFRIENDS = 16,
ALF_PORTALRESTRICT = 32, // only work through portals with a global offset (to be used for stuff that cannot remember the calculated FTranslatedLineTarget info) ALF_PORTALRESTRICT = 32, // only work through portals with a global offset (to be used for stuff that cannot remember the calculated FTranslatedLineTarget info)
ALF_NOWEAPONCHECK = 64, // ignore NOAUTOAIM flag on a player's weapon. ALF_NOWEAPONCHECK = 64, // ignore NOAUTOAIM flag on a player's weapon.
ALF_IGNORENOAUTOAIM = 128, // for informative stuff like 'linetarget' CCMD.
}; };
enum // P_LineAttack flags enum // P_LineAttack flags

View file

@ -4192,7 +4192,7 @@ struct aim_t
dist = attackrange * in->frac; dist = attackrange * in->frac;
// Don't autoaim certain special actors // Don't autoaim certain special actors
if (!cl_doautoaim && th->flags6 & MF6_NOTAUTOAIMED) if (!cl_doautoaim && !(flags & ALF_IGNORENOAUTOAIM) && th->flags6 & MF6_NOTAUTOAIMED)
{ {
continue; continue;
} }

View file

@ -6846,6 +6846,7 @@ AActor *P_SpawnPlayerMissile (AActor *source, double x, double y, double z,
{ {
return nullptr; return nullptr;
} }
aimflags &= ~ALF_IGNORENOAUTOAIM; // just to be safe.
static const double angdiff[3] = { -5.625, 5.625, 0 }; static const double angdiff[3] = { -5.625, 5.625, 0 };
DAngle an = angle; DAngle an = angle;

View file

@ -1198,6 +1198,7 @@ DAngle P_BulletSlope (AActor *mo, FTranslatedLineTarget *pLineTarget, int aimfla
DAngle pitch; DAngle pitch;
FTranslatedLineTarget scratch; FTranslatedLineTarget scratch;
aimflags &= ~ALF_IGNORENOAUTOAIM; // just to be safe.
if (pLineTarget == NULL) pLineTarget = &scratch; if (pLineTarget == NULL) pLineTarget = &scratch;
// see which target is to be aimed at // see which target is to be aimed at
i = 2; i = 2;

View file

@ -1150,6 +1150,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(AActor, CheckMove, CheckMove)
static double AimLineAttack(AActor *self, double angle, double distance, FTranslatedLineTarget *pLineTarget, double vrange, int flags, AActor *target, AActor *friender) static double AimLineAttack(AActor *self, double angle, double distance, FTranslatedLineTarget *pLineTarget, double vrange, int flags, AActor *target, AActor *friender)
{ {
flags &= ~ALF_IGNORENOAUTOAIM; // just to be safe. This flag is not supposed to be accesible to scripting.
return P_AimLineAttack(self, angle, distance, pLineTarget, vrange, flags, target, friender).Degrees; return P_AimLineAttack(self, angle, distance, pLineTarget, vrange, flags, target, friender).Degrees;
} }