- floatified MaxTargetRange and MeleeThreshold.

This commit is contained in:
Christoph Oelckers 2016-03-24 20:56:59 +01:00
parent c66ff5939d
commit e077510773
5 changed files with 19 additions and 19 deletions

View file

@ -590,7 +590,7 @@ public:
DDropItem *GetDropItems() const;
// Return true if the monster should use a missile attack, false for melee
bool SuggestMissileAttack (fixed_t dist);
bool SuggestMissileAttack (double dist);
// Adjusts the angle for deflection/reflection of incoming missiles
// Returns true if the missile should be allowed to explode anyway
@ -1236,10 +1236,10 @@ public:
ActorBounceFlags BounceFlags; // which bouncing type?
DWORD SpawnFlags; // Increased to DWORD because of Doom 64
fixed_t meleerange; // specifies how far a melee attack reaches.
fixed_t meleethreshold; // Distance below which a monster doesn't try to shoot missiles anynore
double meleethreshold; // Distance below which a monster doesn't try to shoot missiles anynore
// but instead tries to come closer for a melee attack.
// This is not the same as meleerange
fixed_t maxtargetrange; // any target farther away cannot be attacked
double maxtargetrange; // any target farther away cannot be attacked
double bouncefactor; // Strife's grenades use 50%, Hexen's Flechettes 70.
double wallbouncefactor; // The bounce factor for walls can be different.
int bouncecount; // Strife's grenades only bounce twice before exploding

View file

@ -348,7 +348,7 @@ bool P_CheckMeleeRange2 (AActor *actor)
//=============================================================================
bool P_CheckMissileRange (AActor *actor)
{
fixed_t dist;
double dist;
if (!P_CheckSight (actor, actor->target, SF_SEEPASTBLOCKEVERYTHING))
return false;
@ -387,15 +387,15 @@ bool P_CheckMissileRange (AActor *actor)
// OPTIMIZE: get this from a global checksight
// [RH] What?
dist = actor->AproxDistance (actor->target) - 64*FRACUNIT;
dist = actor->Distance2D (actor->target) - 64;
if (actor->MeleeState == NULL)
dist -= 128*FRACUNIT; // no melee attack, so fire more
dist -= 128; // no melee attack, so fire more
return actor->SuggestMissileAttack (dist);
}
bool AActor::SuggestMissileAttack (fixed_t dist)
bool AActor::SuggestMissileAttack (double dist)
{
// new version encapsulates the different behavior in flags instead of virtual functions
// The advantage is that this allows inheriting the missile attack attributes from the
@ -407,11 +407,11 @@ bool AActor::SuggestMissileAttack (fixed_t dist)
if (MeleeState != NULL && dist < meleethreshold)
return false; // From the Revenant: close enough for fist attack
if (flags4 & MF4_MISSILEMORE) dist >>= 1;
if (flags4 & MF4_MISSILEEVENMORE) dist >>= 3;
if (flags4 & MF4_MISSILEMORE) dist *= 0.5;
if (flags4 & MF4_MISSILEEVENMORE) dist *= 0.125;
int mmc = int(MinMissileChance * G_SkillProperty(SKILLP_Aggressiveness));
return pr_checkmissilerange() >= MIN<int> (dist >> FRACBITS, mmc);
return pr_checkmissilerange() >= MIN<int> (int(dist), mmc);
}
//=============================================================================

View file

@ -6144,7 +6144,7 @@ AActor *P_SpawnPlayerMissile (AActor *source, double x, double y, double z,
// [XA] If MaxTargetRange is defined in the spawned projectile, use this as the
// maximum range for the P_AimLineAttack call later; this allows MaxTargetRange
// to function as a "maximum tracer-acquisition range" for seeker missiles.
double linetargetrange = defaultobject->maxtargetrange > 0 ? FIXED2DBL(defaultobject->maxtargetrange*64) : 16*64.;
double linetargetrange = defaultobject->maxtargetrange > 0 ? defaultobject->maxtargetrange*64 : 16*64.;
int i = 2;
do

View file

@ -205,7 +205,7 @@ public:
int GetScaledWidth () { int foo = (Width << 17) / xScale; return (foo >> 1) + (foo & 1); }
int GetScaledHeight () { int foo = (Height << 17) / yScale; return (foo >> 1) + (foo & 1); }
int GetScaledHeight(double scale) { return GetScaledHeight(FLOAT2FIXED(scale)); }
int GetScaledHeight(double scale) { int foo = (Height << 17) / FLOAT2FIXED(scale); return (foo >> 1) + (foo & 1); }
double GetScaledWidthDouble () { return (Width * 65536.) / xScale; }
double GetScaledHeightDouble () { return (Height * 65536.) / yScale; }
double GetScaleY() const { return FIXED2DBL(yScale); }

View file

@ -1,7 +1,7 @@
/*
** thingdef-properties.cpp
**
** Actor definitions - properties and flags handling
** Actor denitions - properties and flags handling
**
**---------------------------------------------------------------------------
** Copyright 2002-2007 Christoph Oelckers
@ -245,10 +245,10 @@ void HandleDeprecatedFlags(AActor *defaults, PClassActor *info, bool set, int in
defaults->Gravity = set ? 1. / 8 : 1.;
break;
case DEPF_SHORTMISSILERANGE:
defaults->maxtargetrange = set? 896*FRACUNIT : 0;
defaults->maxtargetrange = set? 896. : 0.;
break;
case DEPF_LONGMELEERANGE:
defaults->meleethreshold = set? 196*FRACUNIT : 0;
defaults->meleethreshold = set? 196. : 0.;
break;
case DEPF_QUARTERGRAVITY:
defaults->Gravity = set ? 1. / 4 : 1.;
@ -314,9 +314,9 @@ bool CheckDeprecatedFlags(const AActor *actor, PClassActor *info, int index)
case DEPF_LOWGRAVITY:
return actor->Gravity == 1./8;
case DEPF_SHORTMISSILERANGE:
return actor->maxtargetrange == 896*FRACUNIT;
return actor->maxtargetrange == 896.;
case DEPF_LONGMELEERANGE:
return actor->meleethreshold == 196*FRACUNIT;
return actor->meleethreshold == 196.;
case DEPF_QUARTERGRAVITY:
return actor->Gravity == 1./4;
case DEPF_FIRERESIST:
@ -936,7 +936,7 @@ DEFINE_PROPERTY(burnheight, F, Actor)
//==========================================================================
DEFINE_PROPERTY(maxtargetrange, F, Actor)
{
PROP_FIXED_PARM(id, 0);
PROP_DOUBLE_PARM(id, 0);
defaults->maxtargetrange = id;
}
@ -945,7 +945,7 @@ DEFINE_PROPERTY(maxtargetrange, F, Actor)
//==========================================================================
DEFINE_PROPERTY(meleethreshold, F, Actor)
{
PROP_FIXED_PARM(id, 0);
PROP_DOUBLE_PARM(id, 0);
defaults->meleethreshold = id;
}