- made AActor::radius a double.

This means that all files in g_doom are now fully converted.
This commit is contained in:
Christoph Oelckers 2016-03-20 15:04:13 +01:00
parent ec58e70078
commit 0bdb65c477
41 changed files with 200 additions and 187 deletions

View file

@ -1115,7 +1115,14 @@ public:
int floorterrain; int floorterrain;
struct sector_t *ceilingsector; struct sector_t *ceilingsector;
FTextureID ceilingpic; // contacted sec ceilingpic FTextureID ceilingpic; // contacted sec ceilingpic
fixed_t radius, height; // for movement checking double radius;
inline fixed_t _f_radius() const
{
return FLOAT2FIXED(radius);
}
fixed_t height; // for movement checking
fixed_t projectilepassheight; // height for clipping projectile movement against this actor fixed_t projectilepassheight; // height for clipping projectile movement against this actor
SDWORD tics; // state tic counter SDWORD tics; // state tic counter
FState *state; FState *state;
@ -1414,7 +1421,7 @@ public:
} }
double _Radius() const double _Radius() const
{ {
return FIXED2DBL(radius); return FIXED2DBL(_f_radius());
} }
double _pushfactor() const double _pushfactor() const
{ {

View file

@ -648,7 +648,7 @@ CUSTOM_CVAR (Int, am_cheat, 0, 0)
#define AM_NUMMARKPOINTS 10 #define AM_NUMMARKPOINTS 10
// player radius for automap checking // player _f_radius() for automap checking
#define PLAYERRADIUS 16*MAPUNIT #define PLAYERRADIUS 16*MAPUNIT
// how much the automap moves window per tic in frame-buffer coordinates // how much the automap moves window per tic in frame-buffer coordinates
@ -2920,7 +2920,7 @@ void AM_drawThings ()
{ { -MAPUNIT, MAPUNIT }, { -MAPUNIT, -MAPUNIT } }, { { -MAPUNIT, MAPUNIT }, { -MAPUNIT, -MAPUNIT } },
}; };
AM_drawLineCharacter (box, 4, t->radius >> FRACTOMAPBITS, angle - t->_f_angle(), color, p.x, p.y); AM_drawLineCharacter (box, 4, t->_f_radius() >> FRACTOMAPBITS, angle - t->_f_angle(), color, p.x, p.y);
} }
} }
} }

View file

@ -903,7 +903,7 @@ CCMD(info)
PrintMiscActorInfo(t.linetarget); PrintMiscActorInfo(t.linetarget);
} }
else Printf("No target found. Info cannot find actors that have " else Printf("No target found. Info cannot find actors that have "
"the NOBLOCKMAP flag or have height/radius of 0.\n"); "the NOBLOCKMAP flag or have height/_f_radius() of 0.\n");
} }
typedef bool (*ActorTypeChecker) (AActor *); typedef bool (*ActorTypeChecker) (AActor *);

View file

@ -919,7 +919,7 @@ static int PatchThing (int thingy)
} }
else if (stricmp (Line1, "Width") == 0) else if (stricmp (Line1, "Width") == 0)
{ {
info->radius = val; info->radius = FIXED2FLOAT(val);
} }
else if (stricmp (Line1, "Alpha") == 0) else if (stricmp (Line1, "Alpha") == 0)
{ {

View file

@ -2321,7 +2321,7 @@ void Net_DoCommand (int type, BYTE **stream, int player)
else else
{ {
const AActor *def = GetDefaultByType (typeinfo); const AActor *def = GetDefaultByType (typeinfo);
fixedvec3 spawnpos = source->_f_Vec3Angle(def->radius * 2 + source->radius, source->_f_angle(), 8 * FRACUNIT); fixedvec3 spawnpos = source->_f_Vec3Angle(def->_f_radius() * 2 + source->_f_radius(), source->_f_angle(), 8 * FRACUNIT);
AActor *spawned = Spawn (typeinfo, spawnpos, ALLOW_REPLACE); AActor *spawned = Spawn (typeinfo, spawnpos, ALLOW_REPLACE);
if (spawned != NULL) if (spawned != NULL)

View file

@ -350,7 +350,7 @@ enum
{ {
BCOMPATF_SETSLOPEOVERFLOW = 1 << 0, // SetSlope things can overflow BCOMPATF_SETSLOPEOVERFLOW = 1 << 0, // SetSlope things can overflow
BCOMPATF_RESETPLAYERSPEED = 1 << 1, // Set player speed to 1.0 when changing maps BCOMPATF_RESETPLAYERSPEED = 1 << 1, // Set player speed to 1.0 when changing maps
BCOMPATF_VILEGHOSTS = 1 << 2, // Monsters' radius and height aren't restored properly when resurrected. BCOMPATF_VILEGHOSTS = 1 << 2, // Monsters' _f_radius() and height aren't restored properly when resurrected.
BCOMPATF_BADTELEPORTERS = 1 << 3, // Ignore tags on Teleport specials BCOMPATF_BADTELEPORTERS = 1 << 3, // Ignore tags on Teleport specials
BCOMPATF_BADPORTALS = 1 << 4, // Restores the old unstable portal behavior BCOMPATF_BADPORTALS = 1 << 4, // Restores the old unstable portal behavior
BCOMPATF_REBUILDNODES = 1 << 5, // Force node rebuild BCOMPATF_REBUILDNODES = 1 << 5, // Force node rebuild

View file

@ -3206,7 +3206,7 @@ void FParser::SF_MoveCamera(void)
} }
} }
cam->radius=8; cam->radius = 1 / 8192.;
cam->height=8; cam->height=8;
if ((x != cam->_f_X() || y != cam->_f_Y()) && !P_TryMove(cam, x, y, true)) if ((x != cam->_f_X() || y != cam->_f_Y()) && !P_TryMove(cam, x, y, true))
{ {
@ -4100,11 +4100,9 @@ void FParser::SF_MobjRadius(void)
if(t_argc > 1) if(t_argc > 1)
{ {
if(mo) if(mo)
mo->radius = fixedvalue(t_argv[1]); mo->radius = floatvalue(t_argv[1]);
} }
t_return.setDouble(mo ? mo->radius : 0.);
t_return.type = svt_fixed;
t_return.value.f = mo ? mo->radius : 0;
} }
} }

View file

@ -62,7 +62,7 @@ void A_PainShootSkull (AActor *self, DAngle Angle, PClassActor *spawntype, int f
} }
// okay, there's room for another one // okay, there's room for another one
prestep = 4 + FIXED2FLOAT(self->radius + GetDefaultByType(spawntype)->radius) * 1.5; prestep = 4 + (self->radius + GetDefaultByType(spawntype)->radius) * 1.5;
// NOTE: The following code contains some advance work for line-to-line portals which is currenty inactive. // NOTE: The following code contains some advance work for line-to-line portals which is currenty inactive.

View file

@ -41,8 +41,8 @@ void BlastActor (AActor *victim, fixed_t strength, double speed, AActor *Owner,
// Spawn blast puff // Spawn blast puff
angle -= 180.; angle -= 180.;
pos = victim->Vec3Offset( pos = victim->Vec3Offset(
fixed_t((victim->radius + FRACUNIT) * angle.Cos()), fixed_t((victim->_f_radius() + FRACUNIT) * angle.Cos()),
fixed_t((victim->radius + FRACUNIT) * angle.Sin()), fixed_t((victim->_f_radius() + FRACUNIT) * angle.Sin()),
-victim->floorclip + (victim->height>>1)); -victim->floorclip + (victim->height>>1));
mo = Spawn (blasteffect, pos, ALLOW_REPLACE); mo = Spawn (blasteffect, pos, ALLOW_REPLACE);
if (mo) if (mo)
@ -98,14 +98,13 @@ DEFINE_ACTION_FUNCTION_PARAMS (AActor, A_Blast)
PARAM_ACTION_PROLOGUE; PARAM_ACTION_PROLOGUE;
PARAM_INT_OPT (blastflags) { blastflags = 0; } PARAM_INT_OPT (blastflags) { blastflags = 0; }
PARAM_FIXED_OPT (strength) { strength = 255*FRACUNIT; } PARAM_FIXED_OPT (strength) { strength = 255*FRACUNIT; }
PARAM_FIXED_OPT (radius) { radius = 255*FRACUNIT; } PARAM_FLOAT_OPT (radius) { radius = 255; }
PARAM_FLOAT_OPT (speed) { speed = 20; } PARAM_FLOAT_OPT (speed) { speed = 20; }
PARAM_CLASS_OPT (blasteffect, AActor) { blasteffect = PClass::FindActor("BlastEffect"); } PARAM_CLASS_OPT (blasteffect, AActor) { blasteffect = PClass::FindActor("BlastEffect"); }
PARAM_SOUND_OPT (blastsound) { blastsound = "BlastRadius"; } PARAM_SOUND_OPT (blastsound) { blastsound = "BlastRadius"; }
AActor *mo; AActor *mo;
TThinkerIterator<AActor> iterator; TThinkerIterator<AActor> iterator;
fixed_t dist;
if (self->player && (blastflags & BF_USEAMMO) && ACTION_CALL_FROM_WEAPON()) if (self->player && (blastflags & BF_USEAMMO) && ACTION_CALL_FROM_WEAPON())
{ {
@ -144,8 +143,7 @@ DEFINE_ACTION_FUNCTION_PARAMS (AActor, A_Blast)
{ // Must be monster, player, missile, touchy or vulnerable { // Must be monster, player, missile, touchy or vulnerable
continue; continue;
} }
dist = self->AproxDistance (mo); if (self->Distance2D(mo) > radius)
if (dist > radius)
{ // Out of range { // Out of range
continue; continue;
} }

View file

@ -124,7 +124,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_CFlameMissile)
AActor *BlockingMobj = self->BlockingMobj; AActor *BlockingMobj = self->BlockingMobj;
if (BlockingMobj && BlockingMobj->flags&MF_SHOOTABLE) if (BlockingMobj && BlockingMobj->flags&MF_SHOOTABLE)
{ // Hit something, so spawn the flame circle around the thing { // Hit something, so spawn the flame circle around the thing
dist = BlockingMobj->radius+18*FRACUNIT; dist = BlockingMobj->_f_radius()+18*FRACUNIT;
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
an = i*45.; an = i*45.;

View file

@ -279,7 +279,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_SorcBallOrbit)
angle_t angle, baseangle; angle_t angle, baseangle;
int mode = self->target->args[3]; int mode = self->target->args[3];
AHeresiarch *parent = barrier_cast<AHeresiarch *>(self->target); AHeresiarch *parent = barrier_cast<AHeresiarch *>(self->target);
int dist = parent->radius - (self->radius<<1); int dist = parent->_f_radius() - (self->_f_radius()<<1);
angle_t prevangle = self->special1; angle_t prevangle = self->special1;
if (!self->IsKindOf (RUNTIME_CLASS(ASorcBall))) if (!self->IsKindOf (RUNTIME_CLASS(ASorcBall)))
@ -813,7 +813,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_SorcFX2Orbit)
return 0; return 0;
} }
fixed_t dist = parent->radius; fixed_t dist = parent->_f_radius();
if ((parent->health <= 0) || // Sorcerer is dead if ((parent->health <= 0) || // Sorcerer is dead
(!parent->args[0])) // Time expired (!parent->args[0])) // Time expired

View file

@ -34,7 +34,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_IceGuyLook)
CALL_ACTION(A_Look, self); CALL_ACTION(A_Look, self);
if (pr_iceguylook() < 64) if (pr_iceguylook() < 64)
{ {
dist = ((pr_iceguylook()-128)*self->radius)>>7; dist = ((pr_iceguylook()-128)*self->_f_radius())>>7;
an = (self->_f_angle()+ANG90)>>ANGLETOFINESHIFT; an = (self->_f_angle()+ANG90)>>ANGLETOFINESHIFT;
Spawn(WispTypes[pr_iceguylook() & 1], self->Vec3Offset( Spawn(WispTypes[pr_iceguylook() & 1], self->Vec3Offset(
@ -62,7 +62,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_IceGuyChase)
A_Chase (stack, self); A_Chase (stack, self);
if (pr_iceguychase() < 128) if (pr_iceguychase() < 128)
{ {
dist = ((pr_iceguychase()-128)*self->radius)>>7; dist = ((pr_iceguychase()-128)*self->_f_radius())>>7;
an = (self->_f_angle()+ANG90)>>ANGLETOFINESHIFT; an = (self->_f_angle()+ANG90)>>ANGLETOFINESHIFT;
mo = Spawn(WispTypes[pr_iceguychase() & 1], self->Vec3Offset( mo = Spawn(WispTypes[pr_iceguychase() & 1], self->Vec3Offset(
@ -92,8 +92,8 @@ DEFINE_ACTION_FUNCTION(AActor, A_IceGuyAttack)
{ {
return 0; return 0;
} }
P_SpawnMissileXYZ(self->_f_Vec3Angle(self->radius>>1, self->_f_angle()+ANG90, 40*FRACUNIT), self, self->target, PClass::FindActor ("IceGuyFX")); P_SpawnMissileXYZ(self->_f_Vec3Angle(self->_f_radius()>>1, self->_f_angle()+ANG90, 40*FRACUNIT), self, self->target, PClass::FindActor ("IceGuyFX"));
P_SpawnMissileXYZ(self->_f_Vec3Angle(self->radius>>1, self->_f_angle()-ANG90, 40*FRACUNIT), self, self->target, PClass::FindActor ("IceGuyFX")); P_SpawnMissileXYZ(self->_f_Vec3Angle(self->_f_radius()>>1, self->_f_angle()-ANG90, 40*FRACUNIT), self, self->target, PClass::FindActor ("IceGuyFX"));
S_Sound (self, CHAN_WEAPON, self->AttackSound, 1, ATTN_NORM); S_Sound (self, CHAN_WEAPON, self->AttackSound, 1, ATTN_NORM);
return 0; return 0;
} }

View file

@ -238,8 +238,8 @@ DEFINE_ACTION_FUNCTION(AActor, A_LightningZap)
{ {
deltaZ = -10*FRACUNIT; deltaZ = -10*FRACUNIT;
} }
fixed_t xo = ((pr_zap() - 128)*self->radius / 256); fixed_t xo = ((pr_zap() - 128)*self->_f_radius() / 256);
fixed_t yo = ((pr_zap() - 128)*self->radius / 256); fixed_t yo = ((pr_zap() - 128)*self->_f_radius() / 256);
mo = Spawn(lightning, self->Vec3Offset(xo, yo, deltaZ), ALLOW_REPLACE); mo = Spawn(lightning, self->Vec3Offset(xo, yo, deltaZ), ALLOW_REPLACE);
if (mo) if (mo)

View file

@ -160,7 +160,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_ThrustImpale)
FMultiBlockThingsIterator::CheckResult cres; FMultiBlockThingsIterator::CheckResult cres;
while (it.Next(&cres)) while (it.Next(&cres))
{ {
fixed_t blockdist = self->radius + cres.thing->radius; fixed_t blockdist = self->_f_radius() + cres.thing->_f_radius();
if (abs(cres.thing->_f_X() - cres.position.x) >= blockdist || abs(cres.thing->_f_Y() - cres.position.y) >= blockdist) if (abs(cres.thing->_f_X() - cres.position.x) >= blockdist || abs(cres.thing->_f_Y() - cres.position.y) >= blockdist)
continue; continue;

View file

@ -286,13 +286,13 @@ DEFINE_ACTION_FUNCTION(AActor, A_FreezeDeathChunks)
// with no relation to the size of the self shattering. I think it should // with no relation to the size of the self shattering. I think it should
// base the number of shards on the size of the dead thing, so bigger // base the number of shards on the size of the dead thing, so bigger
// things break up into more shards than smaller things. // things break up into more shards than smaller things.
// An actor with radius 20 and height 64 creates ~40 chunks. // An actor with _f_radius() 20 and height 64 creates ~40 chunks.
numChunks = MAX<int> (4, (self->radius>>FRACBITS)*(self->height>>FRACBITS)/32); numChunks = MAX<int> (4, (self->_f_radius()>>FRACBITS)*(self->height>>FRACBITS)/32);
i = (pr_freeze.Random2()) % (numChunks/4); i = (pr_freeze.Random2()) % (numChunks/4);
for (i = MAX (24, numChunks + i); i >= 0; i--) for (i = MAX (24, numChunks + i); i >= 0; i--)
{ {
fixed_t xo = (((pr_freeze() - 128)*self->radius) >> 7); fixed_t xo = (((pr_freeze() - 128)*self->_f_radius()) >> 7);
fixed_t yo = (((pr_freeze() - 128)*self->radius) >> 7); fixed_t yo = (((pr_freeze() - 128)*self->_f_radius()) >> 7);
fixed_t zo = (pr_freeze()*self->height / 255); fixed_t zo = (pr_freeze()*self->height / 255);
mo = Spawn("IceChunk", self->Vec3Offset(xo, yo, zo), ALLOW_REPLACE); mo = Spawn("IceChunk", self->Vec3Offset(xo, yo, zo), ALLOW_REPLACE);
if (mo) if (mo)

View file

@ -9,7 +9,7 @@ static FRandom pr_orbit ("Orbit");
// Custom bridge -------------------------------------------------------- // Custom bridge --------------------------------------------------------
/* /*
args[0]: Bridge radius, in mapunits args[0]: Bridge _f_radius(), in mapunits
args[1]: Bridge height, in mapunits args[1]: Bridge height, in mapunits
args[2]: Amount of bridge balls (if 0: Doom bridge) args[2]: Amount of bridge balls (if 0: Doom bridge)
args[3]: Rotation speed of bridge balls, in byte angle per seconds, sorta: args[3]: Rotation speed of bridge balls, in byte angle per seconds, sorta:
@ -28,8 +28,8 @@ static FRandom pr_orbit ("Orbit");
233: -30° / seconds 233: -30° / seconds
244: -15° / seconds 244: -15° / seconds
This value only matters if args[2] is not zero. This value only matters if args[2] is not zero.
args[4]: Rotation radius of bridge balls, in bridge radius %. args[4]: Rotation _f_radius() of bridge balls, in bridge _f_radius() %.
If 0, use Hexen default: ORBIT_RADIUS, regardless of bridge radius. If 0, use Hexen default: ORBIT_RADIUS, regardless of bridge _f_radius().
This value only matters if args[2] is not zero. This value only matters if args[2] is not zero.
*/ */
@ -48,12 +48,12 @@ void ACustomBridge::BeginPlay ()
if (args[2]) // Hexen bridge if there are balls if (args[2]) // Hexen bridge if there are balls
{ {
SetState(SeeState); SetState(SeeState);
radius = args[0] ? args[0] << FRACBITS : 32 * FRACUNIT; radius = args[0] ? args[0] : 32;
height = args[1] ? args[1] << FRACBITS : 2 * FRACUNIT; height = args[1] ? args[1] << FRACBITS : 2 * FRACUNIT;
} }
else // No balls? Then a Doom bridge. else // No balls? Then a Doom bridge.
{ {
radius = args[0] ? args[0] << FRACBITS : 36 * FRACUNIT; radius = args[0] ? args[0] : 36;
height = args[1] ? args[1] << FRACBITS : 4 * FRACUNIT; height = args[1] ? args[1] << FRACBITS : 4 * FRACUNIT;
RenderStyle = STYLE_Normal; RenderStyle = STYLE_Normal;
} }
@ -108,8 +108,8 @@ DEFINE_ACTION_FUNCTION(AActor, A_BridgeOrbit)
// Set angular speed; 1--128: counterclockwise rotation ~=1--180°; 129--255: clockwise rotation ~= 180--1° // Set angular speed; 1--128: counterclockwise rotation ~=1--180°; 129--255: clockwise rotation ~= 180--1°
if (self->target->args[3] > 128) rotationspeed = 45./32 * (self->target->args[3]-256) / TICRATE; if (self->target->args[3] > 128) rotationspeed = 45./32 * (self->target->args[3]-256) / TICRATE;
else if (self->target->args[3] > 0) rotationspeed = 45./32 * (self->target->args[3]) / TICRATE; else if (self->target->args[3] > 0) rotationspeed = 45./32 * (self->target->args[3]) / TICRATE;
// Set rotation radius // Set rotation _f_radius()
if (self->target->args[4]) rotationradius = ((self->target->args[4] * self->target->radius) / 100); if (self->target->args[4]) rotationradius = ((self->target->args[4] * self->target->_f_radius()) / 100);
self->Angles.Yaw += rotationspeed; self->Angles.Yaw += rotationspeed;
self->SetOrigin(self->target->Vec3Angle(rotationradius*FRACUNIT, self->Angles.Yaw, 0), true); self->SetOrigin(self->target->Vec3Angle(rotationradius*FRACUNIT, self->Angles.Yaw, 0), true);
@ -162,7 +162,7 @@ void AInvisibleBridge::BeginPlay ()
{ {
Super::BeginPlay (); Super::BeginPlay ();
if (args[0]) if (args[0])
radius = args[0] << FRACBITS; radius = args[0];
if (args[1]) if (args[1])
height = args[1] << FRACBITS; height = args[1] << FRACBITS;
} }

View file

@ -29,13 +29,13 @@ IMPLEMENT_CLASS(AGlassShard)
// Dirt stuff // Dirt stuff
void P_SpawnDirt (AActor *actor, fixed_t radius) void P_SpawnDirt (AActor *actor, double radius)
{ {
PClassActor *dtype = NULL; PClassActor *dtype = NULL;
AActor *mo; AActor *mo;
fixed_t zo = (pr_dirt() << 9) + FRACUNIT; double zo = pr_dirt() / 128. + 1;
fixedvec3 pos = actor->_f_Vec3Angle(radius, pr_dirt() << 24, zo); DVector3 pos = actor->Vec3Angle(radius, pr_dirt() * (360./256), zo);
char fmt[8]; char fmt[8];
mysnprintf(fmt, countof(fmt), "Dirt%d", 1 + pr_dirt()%6); mysnprintf(fmt, countof(fmt), "Dirt%d", 1 + pr_dirt()%6);

View file

@ -45,9 +45,9 @@ void AFastProjectile::Tick ()
int shift = 3; int shift = 3;
int count = 8; int count = 8;
if (radius > 0) if (_f_radius() > 0)
{ {
while ( ((abs(_f_velx()) >> shift) > radius) || ((abs(_f_vely()) >> shift) > radius)) while ( ((abs(_f_velx()) >> shift) > _f_radius()) || ((abs(_f_vely()) >> shift) > _f_radius()))
{ {
// we need to take smaller steps. // we need to take smaller steps.
shift++; shift++;

View file

@ -132,7 +132,7 @@ void DEarthquake::Tick ()
fixed_t dist; fixed_t dist;
dist = m_Spot->AproxDistance (victim, true); dist = m_Spot->AproxDistance (victim, true);
// Check if in damage radius // Check if in damage _f_radius()
if (dist < m_DamageRadius && victim->_f_Z() <= victim->floorz) if (dist < m_DamageRadius && victim->_f_Z() <= victim->floorz)
{ {
if (pr_quake() < 50) if (pr_quake() < 50)

View file

@ -9,7 +9,7 @@ struct vertex_t;
struct side_t; struct side_t;
struct F3DFloor; struct F3DFloor;
void P_SpawnDirt (AActor *actor, fixed_t radius); void P_SpawnDirt (AActor *actor, double radius);
class DBaseDecal *ShootDecal(const FDecalTemplate *tpl, AActor *basisactor, sector_t *sec, fixed_t x, fixed_t y, fixed_t z, angle_t angle, fixed_t tracedist, bool permanent); class DBaseDecal *ShootDecal(const FDecalTemplate *tpl, AActor *basisactor, sector_t *sec, fixed_t x, fixed_t y, fixed_t z, angle_t angle, fixed_t tracedist, bool permanent);
class DBaseDecal : public DThinker class DBaseDecal : public DThinker

View file

@ -94,7 +94,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_EntityDeath)
PARAM_ACTION_PROLOGUE; PARAM_ACTION_PROLOGUE;
AActor *second; AActor *second;
double secondRadius = FIXED2DBL(GetDefaultByName("EntitySecond")->radius * 2); double secondRadius = FIXED2DBL(GetDefaultByName("EntitySecond")->_f_radius() * 2);
static const double turns[3] = { 0, 90, -90 }; static const double turns[3] = { 0, 90, -90 };
const double velmul[3] = { 4.8828125f, secondRadius*4, secondRadius*4 }; const double velmul[3] = { 4.8828125f, secondRadius*4, secondRadius*4 };

View file

@ -60,7 +60,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_SentinelAttack)
for (int i = 8; i > 1; --i) for (int i = 8; i > 1; --i)
{ {
trail = Spawn("SentinelFX1", trail = Spawn("SentinelFX1",
self->_f_Vec3Angle(missile->radius*i, missile->_f_angle(), (missile->_f_velz() / 4 * i)), ALLOW_REPLACE); self->_f_Vec3Angle(missile->_f_radius()*i, missile->_f_angle(), (missile->_f_velz() / 4 * i)), ALLOW_REPLACE);
if (trail != NULL) if (trail != NULL)
{ {
trail->target = self; trail->target = self;

View file

@ -731,7 +731,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_FireGrenade)
fixedvec2 offset; fixedvec2 offset;
an = self->_f_angle() >> ANGLETOFINESHIFT; an = self->_f_angle() >> ANGLETOFINESHIFT;
tworadii = self->radius + grenade->radius; tworadii = self->_f_radius() + grenade->_f_radius();
offset.x = FixedMul (finecosine[an], tworadii); offset.x = FixedMul (finecosine[an], tworadii);
offset.y = FixedMul (finesine[an], tworadii); offset.y = FixedMul (finesine[an], tworadii);

View file

@ -57,8 +57,18 @@ public:
setBox(x, y, radius); setBox(x, y, radius);
} }
FBoundingBox(double x, double y, double radius)
{
setBox(x, y, radius);
}
void setBox(fixed_t x, fixed_t y, fixed_t radius); void setBox(fixed_t x, fixed_t y, fixed_t radius);
void setBox(double x, double y, double radius)
{
setBox(FLOAT2FIXED(x), FLOAT2FIXED(y), FLOAT2FIXED(radius));
}
void ClearBox () void ClearBox ()
{ {
m_Box[BOXTOP] = m_Box[BOXRIGHT] = FIXED_MIN; m_Box[BOXTOP] = m_Box[BOXRIGHT] = FIXED_MIN;

View file

@ -4088,7 +4088,7 @@ int DLevelScript::GetActorProperty (int tid, int property)
case APROP_Accuracy: return actor->accuracy; case APROP_Accuracy: return actor->accuracy;
case APROP_Stamina: return actor->stamina; case APROP_Stamina: return actor->stamina;
case APROP_Height: return actor->height; case APROP_Height: return actor->height;
case APROP_Radius: return actor->radius; case APROP_Radius: return actor->_f_radius();
case APROP_ReactionTime:return actor->reactiontime; case APROP_ReactionTime:return actor->reactiontime;
case APROP_MeleeRange: return actor->meleerange; case APROP_MeleeRange: return actor->meleerange;
case APROP_ViewHeight: if (actor->IsKindOf (RUNTIME_CLASS (APlayerPawn))) case APROP_ViewHeight: if (actor->IsKindOf (RUNTIME_CLASS (APlayerPawn)))

View file

@ -408,13 +408,13 @@ static void MakeFountain (AActor *actor, int color1, int color2)
if (particle) if (particle)
{ {
angle_t an = M_Random()<<(24-ANGLETOFINESHIFT); angle_t an = M_Random()<<(24-ANGLETOFINESHIFT);
fixed_t out = FixedMul (actor->radius, M_Random()<<8); fixed_t out = FixedMul (actor->_f_radius(), M_Random()<<8);
fixedvec3 pos = actor->Vec3Offset(FixedMul(out, finecosine[an]), FixedMul(out, finesine[an]), actor->height + FRACUNIT); fixedvec3 pos = actor->Vec3Offset(FixedMul(out, finecosine[an]), FixedMul(out, finesine[an]), actor->height + FRACUNIT);
particle->x = pos.x; particle->x = pos.x;
particle->y = pos.y; particle->y = pos.y;
particle->z = pos.z; particle->z = pos.z;
if (out < actor->radius/8) if (out < actor->_f_radius()/8)
particle->vel.z += FRACUNIT*10/3; particle->vel.z += FRACUNIT*10/3;
else else
particle->vel.z += FRACUNIT*3; particle->vel.z += FRACUNIT*3;
@ -493,7 +493,7 @@ void P_RunEffect (AActor *actor, int effects)
{ {
// Grenade trail // Grenade trail
fixedvec3 pos = actor->_f_Vec3Angle(-actor->radius * 2, moveangle.BAMs(), fixedvec3 pos = actor->_f_Vec3Angle(-actor->_f_radius() * 2, moveangle.BAMs(),
fixed_t(-(actor->height >> 3) * (actor->Vel.Z) + (2 * actor->height) / 3)); fixed_t(-(actor->height >> 3) * (actor->Vel.Z) + (2 * actor->height) / 3));
P_DrawSplash2 (6, pos.x, pos.y, pos.z, P_DrawSplash2 (6, pos.x, pos.y, pos.z,
@ -528,7 +528,7 @@ void P_RunEffect (AActor *actor, int effects)
if (particle != NULL) if (particle != NULL)
{ {
angle_t ang = M_Random () << (32-ANGLETOFINESHIFT-8); angle_t ang = M_Random () << (32-ANGLETOFINESHIFT-8);
fixedvec3 pos = actor->Vec3Offset(FixedMul (actor->radius, finecosine[ang]), FixedMul (actor->radius, finesine[ang]), 0); fixedvec3 pos = actor->Vec3Offset(FixedMul (actor->_f_radius(), finecosine[ang]), FixedMul (actor->_f_radius(), finesine[ang]), 0);
particle->x = pos.x; particle->x = pos.x;
particle->y = pos.y; particle->y = pos.y;
particle->z = pos.z; particle->z = pos.z;
@ -887,8 +887,8 @@ void P_DisconnectEffect (AActor *actor)
break; break;
fixed_t xo = ((M_Random() - 128) << 9) * (actor->radius >> FRACBITS); fixed_t xo = ((M_Random() - 128) << 9) * (actor->_f_radius() >> FRACBITS);
fixed_t yo = ((M_Random() - 128) << 9) * (actor->radius >> FRACBITS); fixed_t yo = ((M_Random() - 128) << 9) * (actor->_f_radius() >> FRACBITS);
fixed_t zo = (M_Random() << 8) * (actor->height >> FRACBITS); fixed_t zo = (M_Random() << 8) * (actor->height >> FRACBITS);
fixedvec3 pos = actor->Vec3Offset(xo, yo, zo); fixedvec3 pos = actor->Vec3Offset(xo, yo, zo);
p->x = pos.x; p->x = pos.x;

View file

@ -271,7 +271,7 @@ bool AActor::CheckMeleeRange ()
dist = AproxDistance (pl); dist = AproxDistance (pl);
if (dist >= meleerange + pl->radius) if (dist >= meleerange + pl->_f_radius())
return false; return false;
// [RH] If moving toward goal, then we've reached it. // [RH] If moving toward goal, then we've reached it.
@ -315,7 +315,7 @@ bool P_CheckMeleeRange2 (AActor *actor)
} }
mo = actor->target; mo = actor->target;
dist = mo->AproxDistance (actor); dist = mo->AproxDistance (actor);
if (dist >= (128 << FRACBITS) || dist < actor->meleerange + mo->radius) if (dist >= (128 << FRACBITS) || dist < actor->meleerange + mo->_f_radius())
{ {
return false; return false;
} }
@ -517,7 +517,7 @@ bool P_Move (AActor *actor)
// Like P_XYMovement this should do multiple moves if the step size is too large // Like P_XYMovement this should do multiple moves if the step size is too large
fixed_t maxmove = actor->radius - FRACUNIT; fixed_t maxmove = actor->_f_radius() - FRACUNIT;
int steps = 1; int steps = 1;
if (maxmove > 0) if (maxmove > 0)
@ -884,7 +884,7 @@ void P_NewChaseDir(AActor * actor)
!(actor->flags2 & MF2_ONMOBJ) && !(actor->flags2 & MF2_ONMOBJ) &&
!(actor->flags & MF_FLOAT) && !(i_compatflags & COMPATF_DROPOFF)) !(actor->flags & MF_FLOAT) && !(i_compatflags & COMPATF_DROPOFF))
{ {
FBoundingBox box(actor->_f_X(), actor->_f_Y(), actor->radius); FBoundingBox box(actor->_f_X(), actor->_f_Y(), actor->_f_radius());
FBlockLinesIterator it(box); FBlockLinesIterator it(box);
line_t *line; line_t *line;
@ -968,7 +968,7 @@ void P_NewChaseDir(AActor * actor)
fixed_t dist = actor->AproxDistance(target); fixed_t dist = actor->AproxDistance(target);
if (target->player == NULL) if (target->player == NULL)
{ {
ismeleeattacker = (target->MissileState == NULL && dist < (target->meleerange + target->radius)*2); ismeleeattacker = (target->MissileState == NULL && dist < (target->meleerange + target->_f_radius())*2);
} }
else if (target->player->ReadyWeapon != NULL) else if (target->player->ReadyWeapon != NULL)
{ {
@ -1198,7 +1198,7 @@ bool P_IsVisible(AActor *lookee, AActor *other, INTBOOL allaround, FLookExParams
{ {
// if real close, react anyway // if real close, react anyway
// [KS] but respect minimum distance rules // [KS] but respect minimum distance rules
if (mindist || dist > lookee->meleerange + lookee->radius) if (mindist || dist > lookee->meleerange + lookee->_f_radius())
return false; // outside of fov return false; // outside of fov
} }
} }
@ -2614,8 +2614,8 @@ static bool P_CheckForResurrection(AActor *self, bool usevilestates)
FState *raisestate = corpsehit->GetRaiseState(); FState *raisestate = corpsehit->GetRaiseState();
if (raisestate != NULL) if (raisestate != NULL)
{ {
// use the current actor's radius instead of the Arch Vile's default. // use the current actor's _f_radius() instead of the Arch Vile's default.
fixed_t maxdist = corpsehit->GetDefault()->radius + self->radius; fixed_t maxdist = corpsehit->GetDefault()->_f_radius() + self->_f_radius();
if (abs(corpsehit->_f_Pos().x - cres.position.x) > maxdist || if (abs(corpsehit->_f_Pos().x - cres.position.x) > maxdist ||
abs(corpsehit->_f_Pos().y - cres.position.y) > maxdist) abs(corpsehit->_f_Pos().y - cres.position.y) > maxdist)
@ -2649,15 +2649,15 @@ static bool P_CheckForResurrection(AActor *self, bool usevilestates)
} }
corpsehit->Vel.X = corpsehit->Vel.Y = 0; corpsehit->Vel.X = corpsehit->Vel.Y = 0;
// [RH] Check against real height and radius // [RH] Check against real height and _f_radius()
fixed_t oldheight = corpsehit->height; fixed_t oldheight = corpsehit->height;
fixed_t oldradius = corpsehit->radius; double oldradius = corpsehit->radius;
ActorFlags oldflags = corpsehit->flags; ActorFlags oldflags = corpsehit->flags;
corpsehit->flags |= MF_SOLID; corpsehit->flags |= MF_SOLID;
corpsehit->height = corpsehit->GetDefault()->height; corpsehit->height = corpsehit->GetDefault()->height;
bool check = P_CheckPosition(corpsehit, corpsehit->_f_Pos()); bool check = P_CheckPosition(corpsehit, corpsehit->Pos());
corpsehit->flags = oldflags; corpsehit->flags = oldflags;
corpsehit->radius = oldradius; corpsehit->radius = oldradius;
corpsehit->height = oldheight; corpsehit->height = oldheight;

View file

@ -370,7 +370,8 @@ enum // P_RailAttack / A_RailAttack / A_CustomRailgun / P_DrawRailTrail flags
}; };
bool P_CheckMissileSpawn (AActor *missile, fixed_t maxdist); bool P_CheckMissileSpawn(AActor *missile, double maxdist);
void P_PlaySpawnSound(AActor *missile, AActor *spawner); void P_PlaySpawnSound(AActor *missile, AActor *spawner);
// [RH] Position the chasecam // [RH] Position the chasecam

View file

@ -435,7 +435,7 @@ bool P_TeleportMove(AActor *thing, fixed_t x, fixed_t y, fixed_t z, bool telefra
sector_t *sector = P_PointInSector(x, y); sector_t *sector = P_PointInSector(x, y);
FPortalGroupArray grouplist; FPortalGroupArray grouplist;
FMultiBlockLinesIterator mit(grouplist, x, y, z, thing->height, thing->radius, sector); FMultiBlockLinesIterator mit(grouplist, x, y, z, thing->height, thing->_f_radius(), sector);
FMultiBlockLinesIterator::CheckResult cres; FMultiBlockLinesIterator::CheckResult cres;
while (mit.Next(&cres)) while (mit.Next(&cres))
@ -446,7 +446,7 @@ bool P_TeleportMove(AActor *thing, fixed_t x, fixed_t y, fixed_t z, bool telefra
if (tmf.touchmidtex) tmf.dropoffz = tmf.floorz; if (tmf.touchmidtex) tmf.dropoffz = tmf.floorz;
FMultiBlockThingsIterator mit2(grouplist, x, y, z, thing->height, thing->radius, false, sector); FMultiBlockThingsIterator mit2(grouplist, x, y, z, thing->height, thing->_f_radius(), false, sector);
FMultiBlockThingsIterator::CheckResult cres2; FMultiBlockThingsIterator::CheckResult cres2;
while (mit2.Next(&cres2)) while (mit2.Next(&cres2))
@ -460,7 +460,7 @@ bool P_TeleportMove(AActor *thing, fixed_t x, fixed_t y, fixed_t z, bool telefra
if (th == thing) if (th == thing)
continue; continue;
fixed_t blockdist = th->radius + tmf.thing->radius; fixed_t blockdist = th->_f_radius() + tmf.thing->_f_radius();
if (abs(th->_f_X() - cres2.position.x) >= blockdist || abs(th->_f_Y() - cres2.position.y) >= blockdist) if (abs(th->_f_X() - cres2.position.x) >= blockdist || abs(th->_f_Y() - cres2.position.y) >= blockdist)
continue; continue;
@ -557,7 +557,7 @@ void P_PlayerStartStomp(AActor *actor, bool mononly)
if (th == actor || (th->player == actor->player && th->player != NULL)) if (th == actor || (th->player == actor->player && th->player != NULL))
continue; continue;
fixed_t blockdist = th->radius + actor->radius; fixed_t blockdist = th->_f_radius() + actor->_f_radius();
if (abs(th->_f_X() - cres.position.x) >= blockdist || abs(th->_f_Y() - cres.position.y) >= blockdist) if (abs(th->_f_X() - cres.position.x) >= blockdist || abs(th->_f_Y() - cres.position.y) >= blockdist)
continue; continue;
@ -1031,7 +1031,7 @@ static bool PIT_CheckPortal(FMultiBlockLinesIterator &mit, FMultiBlockLinesItera
if (lp->backsector == NULL) lp->backsector = lp->frontsector; if (lp->backsector == NULL) lp->backsector = lp->frontsector;
tm.thing->_f_AddZ(zofs); tm.thing->_f_AddZ(zofs);
FBoundingBox pbox(cres.position.x, cres.position.y, tm.thing->radius); FBoundingBox pbox(cres.position.x, cres.position.y, tm.thing->_f_radius());
FBlockLinesIterator it(pbox); FBlockLinesIterator it(pbox);
bool ret = false; bool ret = false;
line_t *ld; line_t *ld;
@ -1199,7 +1199,7 @@ bool PIT_CheckThing(FMultiBlockThingsIterator &it, FMultiBlockThingsIterator::Ch
if (!((thing->flags & (MF_SOLID | MF_SPECIAL | MF_SHOOTABLE)) || thing->flags6 & MF6_TOUCHY)) if (!((thing->flags & (MF_SOLID | MF_SPECIAL | MF_SHOOTABLE)) || thing->flags6 & MF6_TOUCHY))
return true; // can't hit thing return true; // can't hit thing
fixed_t blockdist = thing->radius + tm.thing->radius; fixed_t blockdist = thing->_f_radius() + tm.thing->_f_radius();
if (abs(thing->_f_X() - cres.position.x) >= blockdist || abs(thing->_f_Y() - cres.position.y) >= blockdist) if (abs(thing->_f_X() - cres.position.x) >= blockdist || abs(thing->_f_Y() - cres.position.y) >= blockdist)
return true; return true;
@ -1230,8 +1230,8 @@ bool PIT_CheckThing(FMultiBlockThingsIterator &it, FMultiBlockThingsIterator::Ch
// way to do this, so I restrict them to only walking on bridges instead. // way to do this, so I restrict them to only walking on bridges instead.
// Uncommenting the if here makes it almost impossible for them to walk on // Uncommenting the if here makes it almost impossible for them to walk on
// anything, bridge or otherwise. // anything, bridge or otherwise.
// if (abs(thing->x - tmx) <= thing->radius && // if (abs(thing->x - tmx) <= thing->_f_radius() &&
// abs(thing->y - tmy) <= thing->radius) // abs(thing->y - tmy) <= thing->_f_radius())
{ {
tm.stepthing = thing; tm.stepthing = thing;
tm.floorz = topz; tm.floorz = topz;
@ -1248,8 +1248,8 @@ bool PIT_CheckThing(FMultiBlockThingsIterator &it, FMultiBlockThingsIterator::Ch
{ {
unblocking = true; unblocking = true;
} }
else if (abs(thing->_f_X() - oldpos.x) < (thing->radius + tm.thing->radius) && else if (abs(thing->_f_X() - oldpos.x) < (thing->_f_radius() + tm.thing->_f_radius()) &&
abs(thing->_f_Y() - oldpos.y) < (thing->radius + tm.thing->radius)) abs(thing->_f_Y() - oldpos.y) < (thing->_f_radius() + tm.thing->_f_radius()))
{ {
fixed_t newdist = thing->AproxDistance(cres.position.x, cres.position.y); fixed_t newdist = thing->AproxDistance(cres.position.x, cres.position.y);
@ -1647,10 +1647,10 @@ bool P_CheckPosition(AActor *thing, fixed_t x, fixed_t y, FCheckPosition &tm, bo
} }
tm.stepthing = NULL; tm.stepthing = NULL;
FBoundingBox box(x, y, thing->radius); FBoundingBox box(x, y, thing->_f_radius());
FPortalGroupArray pcheck; FPortalGroupArray pcheck;
FMultiBlockThingsIterator it2(pcheck, x, y, thing->_f_Z(), thing->height, thing->radius, false, newsec); FMultiBlockThingsIterator it2(pcheck, x, y, thing->_f_Z(), thing->height, thing->_f_radius(), false, newsec);
FMultiBlockThingsIterator::CheckResult tcres; FMultiBlockThingsIterator::CheckResult tcres;
while ((it2.Next(&tcres))) while ((it2.Next(&tcres)))
@ -1720,7 +1720,7 @@ bool P_CheckPosition(AActor *thing, fixed_t x, fixed_t y, FCheckPosition &tm, bo
spechit.Clear(); spechit.Clear();
portalhit.Clear(); portalhit.Clear();
FMultiBlockLinesIterator it(pcheck, x, y, thing->_f_Z(), thing->height, thing->radius, newsec); FMultiBlockLinesIterator it(pcheck, x, y, thing->_f_Z(), thing->height, thing->_f_radius(), newsec);
FMultiBlockLinesIterator::CheckResult lcres; FMultiBlockLinesIterator::CheckResult lcres;
fixed_t thingdropoffz = tm.floorz; fixed_t thingdropoffz = tm.floorz;
@ -1847,7 +1847,7 @@ bool P_TestMobjZ(AActor *actor, bool quick, AActor **pOnmobj)
{ {
AActor *thing = cres.thing; AActor *thing = cres.thing;
fixed_t blockdist = thing->radius + actor->radius; fixed_t blockdist = thing->_f_radius() + actor->_f_radius();
if (abs(thing->_f_X() - cres.position.x) >= blockdist || abs(thing->_f_Y() - cres.position.y) >= blockdist) if (abs(thing->_f_X() - cres.position.x) >= blockdist || abs(thing->_f_Y() - cres.position.y) >= blockdist)
{ {
continue; continue;
@ -2906,24 +2906,24 @@ retry:
// trace along the three leading corners // trace along the three leading corners
if (tryx > 0) if (tryx > 0)
{ {
leadx = mo->_f_X() + mo->radius; leadx = mo->_f_X() + mo->_f_radius();
trailx = mo->_f_X() - mo->radius; trailx = mo->_f_X() - mo->_f_radius();
} }
else else
{ {
leadx = mo->_f_X() - mo->radius; leadx = mo->_f_X() - mo->_f_radius();
trailx = mo->_f_X() + mo->radius; trailx = mo->_f_X() + mo->_f_radius();
} }
if (tryy > 0) if (tryy > 0)
{ {
leady = mo->_f_Y() + mo->radius; leady = mo->_f_Y() + mo->_f_radius();
traily = mo->_f_Y() - mo->radius; traily = mo->_f_Y() - mo->_f_radius();
} }
else else
{ {
leady = mo->_f_Y() - mo->radius; leady = mo->_f_Y() - mo->_f_radius();
traily = mo->_f_Y() + mo->radius; traily = mo->_f_Y() + mo->_f_radius();
} }
bestslidefrac = FRACUNIT + 1; bestslidefrac = FRACUNIT + 1;
@ -3235,19 +3235,19 @@ bool FSlide::BounceWall(AActor *mo)
// //
if (mo->Vel.X > 0) if (mo->Vel.X > 0)
{ {
leadx = mo->_f_X() + mo->radius; leadx = mo->_f_X() + mo->_f_radius();
} }
else else
{ {
leadx = mo->_f_X() - mo->radius; leadx = mo->_f_X() - mo->_f_radius();
} }
if (mo->Vel.Y > 0) if (mo->Vel.Y > 0)
{ {
leady = mo->_f_Y() + mo->radius; leady = mo->_f_Y() + mo->_f_radius();
} }
else else
{ {
leady = mo->_f_Y() - mo->radius; leady = mo->_f_Y() - mo->_f_radius();
} }
bestslidefrac = FRACUNIT + 1; bestslidefrac = FRACUNIT + 1;
bestslideline = mo->BlockingLine; bestslideline = mo->BlockingLine;
@ -3300,12 +3300,12 @@ bool FSlide::BounceWall(AActor *mo)
movelen = fixed_t(g_sqrt(double(mo->_f_velx())*mo->_f_velx() + double(mo->_f_vely())*mo->_f_vely())); movelen = fixed_t(g_sqrt(double(mo->_f_velx())*mo->_f_velx() + double(mo->_f_vely())*mo->_f_vely()));
movelen = FixedMul(movelen, mo->wallbouncefactor); movelen = FixedMul(movelen, mo->wallbouncefactor);
FBoundingBox box(mo->_f_X(), mo->_f_Y(), mo->radius); FBoundingBox box(mo->_f_X(), mo->_f_Y(), mo->_f_radius());
if (box.BoxOnLineSide(line) == -1) if (box.BoxOnLineSide(line) == -1)
{ {
fixedvec3 pos = mo->Vec3Offset( fixedvec3 pos = mo->Vec3Offset(
FixedMul(mo->radius, finecosine[deltaangle]), FixedMul(mo->_f_radius(), finecosine[deltaangle]),
FixedMul(mo->radius, finesine[deltaangle]), 0); FixedMul(mo->_f_radius(), finesine[deltaangle]), 0);
mo->SetOrigin(pos, true); mo->SetOrigin(pos, true);
} }
@ -4238,7 +4238,7 @@ AActor *P_LineAttack(AActor *t1, DAngle angle, double distance,
fixedvec2 pos = P_GetOffsetPosition(trace.HitPos.x, trace.HitPos.y, -trace.HitVector.x * 4, -trace.HitVector.y * 4); fixedvec2 pos = P_GetOffsetPosition(trace.HitPos.x, trace.HitPos.y, -trace.HitVector.x * 4, -trace.HitVector.y * 4);
puff = P_SpawnPuff(t1, pufftype, pos.x, pos.y, trace.HitPos.z - trace.HitVector.z * 4, trace.SrcAngleToTarget, puff = P_SpawnPuff(t1, pufftype, pos.x, pos.y, trace.HitPos.z - trace.HitVector.z * 4, trace.SrcAngleToTarget,
trace.SrcAngleToTarget - ANGLE_90, 0, puffFlags); trace.SrcAngleToTarget - ANGLE_90, 0, puffFlags);
puff->radius = 1; puff->radius = 1/65536.;
} }
// [RH] Spawn a decal // [RH] Spawn a decal
@ -5253,7 +5253,7 @@ void P_RadiusAttack(AActor *bombspot, AActor *bombsource, int bombdamage, int bo
while ((it.Next(&cres))) while ((it.Next(&cres)))
{ {
AActor *thing = cres.thing; AActor *thing = cres.thing;
// Vulnerable actors can be damaged by radius attacks even if not shootable // Vulnerable actors can be damaged by _f_radius() attacks even if not shootable
// Used to emulate MBF's vulnerability of non-missile bouncers to explosions. // Used to emulate MBF's vulnerability of non-missile bouncers to explosions.
if (!((thing->flags & MF_SHOOTABLE) || (thing->flags6 & MF6_VULNERABLE))) if (!((thing->flags & MF_SHOOTABLE) || (thing->flags6 & MF6_VULNERABLE)))
continue; continue;
@ -5295,7 +5295,7 @@ void P_RadiusAttack(AActor *bombspot, AActor *bombsource, int bombdamage, int bo
fixedvec2 vec = bombspot->_f_Vec2To(thing); fixedvec2 vec = bombspot->_f_Vec2To(thing);
dx = abs(vec.x); dx = abs(vec.x);
dy = abs(vec.y); dy = abs(vec.y);
boxradius = double(thing->radius); boxradius = double(thing->_f_radius());
// The damage pattern is square, not circular. // The damage pattern is square, not circular.
len = double(dx > dy ? dx : dy); len = double(dx > dy ? dx : dy);
@ -5395,7 +5395,7 @@ void P_RadiusAttack(AActor *bombspot, AActor *bombsource, int bombdamage, int bo
dy = abs(vec.y); dy = abs(vec.y);
dist = dx>dy ? dx : dy; dist = dx>dy ? dx : dy;
dist = (dist - thing->radius) >> FRACBITS; dist = (dist - thing->_f_radius()) >> FRACBITS;
if (dist < 0) if (dist < 0)
dist = 0; dist = 0;
@ -5515,7 +5515,7 @@ void P_FindAboveIntersectors(AActor *actor)
while (it.Next(&cres)) while (it.Next(&cres))
{ {
AActor *thing = cres.thing; AActor *thing = cres.thing;
fixed_t blockdist = actor->radius + thing->radius; fixed_t blockdist = actor->_f_radius() + thing->_f_radius();
if (abs(thing->_f_X() - cres.position.x) >= blockdist || abs(thing->_f_Y() - cres.position.y) >= blockdist) if (abs(thing->_f_X() - cres.position.x) >= blockdist || abs(thing->_f_Y() - cres.position.y) >= blockdist)
continue; continue;
@ -5571,7 +5571,7 @@ void P_FindBelowIntersectors(AActor *actor)
while (it.Next(&cres)) while (it.Next(&cres))
{ {
AActor *thing = cres.thing; AActor *thing = cres.thing;
fixed_t blockdist = actor->radius + thing->radius; fixed_t blockdist = actor->_f_radius() + thing->_f_radius();
if (abs(thing->_f_X() - cres.position.x) >= blockdist || abs(thing->_f_Y() - cres.position.y) >= blockdist) if (abs(thing->_f_X() - cres.position.x) >= blockdist || abs(thing->_f_Y() - cres.position.y) >= blockdist)
continue; continue;
@ -6340,7 +6340,7 @@ void P_CreateSecNodeList(AActor *thing, fixed_t x, fixed_t y)
node = node->m_tnext; node = node->m_tnext;
} }
FBoundingBox box(thing->_f_X(), thing->_f_Y(), thing->radius); FBoundingBox box(thing->_f_X(), thing->_f_Y(), thing->_f_radius());
FBlockLinesIterator it(box); FBlockLinesIterator it(box);
line_t *ld; line_t *ld;
@ -6365,7 +6365,7 @@ void P_CreateSecNodeList(AActor *thing, fixed_t x, fixed_t y)
sector_list = P_AddSecnode(ld->frontsector, thing, sector_list); sector_list = P_AddSecnode(ld->frontsector, thing, sector_list);
// Don't assume all lines are 2-sided, since some Things // Don't assume all lines are 2-sided, since some Things
// like MT_TFOG are allowed regardless of whether their radius takes // like MT_TFOG are allowed regardless of whether their _f_radius() takes
// them beyond an impassable linedef. // them beyond an impassable linedef.
// killough 3/27/98, 4/4/98: // killough 3/27/98, 4/4/98:

View file

@ -380,10 +380,10 @@ bool AActor::FixMapthingPos()
} }
// Not inside the line's bounding box // Not inside the line's bounding box
if (_f_X() + radius <= ldef->bbox[BOXLEFT] if (_f_X() + _f_radius() <= ldef->bbox[BOXLEFT]
|| _f_X() - radius >= ldef->bbox[BOXRIGHT] || _f_X() - _f_radius() >= ldef->bbox[BOXRIGHT]
|| _f_Y() + radius <= ldef->bbox[BOXBOTTOM] || _f_Y() + _f_radius() <= ldef->bbox[BOXBOTTOM]
|| _f_Y() - radius >= ldef->bbox[BOXTOP]) || _f_Y() - _f_radius() >= ldef->bbox[BOXTOP])
continue; continue;
// Get the exact distance to the line // Get the exact distance to the line
@ -399,7 +399,7 @@ bool AActor::FixMapthingPos()
fixed_t distance = abs(P_InterceptVector(&dlv, &dll)); fixed_t distance = abs(P_InterceptVector(&dlv, &dll));
if (distance < radius) if (distance < _f_radius())
{ {
DPrintf("%s at (%d,%d) lies on %s line %td, distance = %f\n", DPrintf("%s at (%d,%d) lies on %s line %td, distance = %f\n",
this->GetClass()->TypeName.GetChars(), _f_X() >> FRACBITS, _f_Y() >> FRACBITS, this->GetClass()->TypeName.GetChars(), _f_X() >> FRACBITS, _f_Y() >> FRACBITS,
@ -417,7 +417,7 @@ bool AActor::FixMapthingPos()
finean >>= ANGLETOFINESHIFT; finean >>= ANGLETOFINESHIFT;
// Get the distance we have to move the object away from the wall // Get the distance we have to move the object away from the wall
distance = radius - distance; distance = _f_radius() - distance;
SetXY(_f_X() + FixedMul(distance, finecosine[finean]), _f_Y() + FixedMul(distance, finesine[finean])); SetXY(_f_X() + FixedMul(distance, finecosine[finean]), _f_Y() + FixedMul(distance, finesine[finean]));
ClearInterpolation(); ClearInterpolation();
success = true; success = true;
@ -493,16 +493,16 @@ void AActor::LinkToWorld(bool spawningmapthing, sector_t *sector)
{ {
FPortalGroupArray check(FPortalGroupArray::PGA_NoSectorPortals); FPortalGroupArray check(FPortalGroupArray::PGA_NoSectorPortals);
P_CollectConnectedGroups(Sector->PortalGroup, _f_Pos(), _f_Top(), radius, check); P_CollectConnectedGroups(Sector->PortalGroup, _f_Pos(), _f_Top(), _f_radius(), check);
for (int i = -1; i < (int)check.Size(); i++) for (int i = -1; i < (int)check.Size(); i++)
{ {
fixedvec3 pos = i==-1? _f_Pos() : PosRelative(check[i]); fixedvec3 pos = i==-1? _f_Pos() : PosRelative(check[i]);
int x1 = GetSafeBlockX(pos.x - radius - bmaporgx); int x1 = GetSafeBlockX(pos.x - _f_radius() - bmaporgx);
int x2 = GetSafeBlockX(pos.x + radius - bmaporgx); int x2 = GetSafeBlockX(pos.x + _f_radius() - bmaporgx);
int y1 = GetSafeBlockY(pos.y - radius - bmaporgy); int y1 = GetSafeBlockY(pos.y - _f_radius() - bmaporgy);
int y2 = GetSafeBlockY(pos.y + radius - bmaporgy); int y2 = GetSafeBlockY(pos.y + _f_radius() - bmaporgy);
if (x1 >= bmapwidth || x2 < 0 || y1 >= bmapheight || y2 < 0) if (x1 >= bmapwidth || x2 < 0 || y1 >= bmapheight || y2 < 0)
{ // thing is off the map { // thing is off the map
@ -739,7 +739,7 @@ FMultiBlockLinesIterator::FMultiBlockLinesIterator(FPortalGroupArray &check, AAc
{ {
checkpoint = origin->_f_Pos(); checkpoint = origin->_f_Pos();
if (!check.inited) P_CollectConnectedGroups(origin->Sector->PortalGroup, checkpoint, origin->_f_Top(), checkradius, checklist); if (!check.inited) P_CollectConnectedGroups(origin->Sector->PortalGroup, checkpoint, origin->_f_Top(), checkradius, checklist);
checkpoint.z = checkradius == -1? origin->radius : checkradius; checkpoint.z = checkradius == -1? origin->_f_radius() : checkradius;
basegroup = origin->Sector->PortalGroup; basegroup = origin->Sector->PortalGroup;
startsector = origin->Sector; startsector = origin->Sector;
Reset(); Reset();
@ -1074,7 +1074,7 @@ FMultiBlockThingsIterator::FMultiBlockThingsIterator(FPortalGroupArray &check, A
{ {
checkpoint = origin->_f_Pos(); checkpoint = origin->_f_Pos();
if (!check.inited) P_CollectConnectedGroups(origin->Sector->PortalGroup, checkpoint, origin->_f_Top(), checkradius, checklist); if (!check.inited) P_CollectConnectedGroups(origin->Sector->PortalGroup, checkpoint, origin->_f_Top(), checkradius, checklist);
checkpoint.z = checkradius == -1? origin->radius : checkradius; checkpoint.z = checkradius == -1? origin->_f_radius() : checkradius;
basegroup = origin->Sector->PortalGroup; basegroup = origin->Sector->PortalGroup;
Reset(); Reset();
} }
@ -1260,31 +1260,31 @@ void FPathTraverse::AddThingIntercepts (int bx, int by, FBlockThingsIterator &it
switch (i) switch (i)
{ {
case 0: // Top edge case 0: // Top edge
line.x = thing->_f_X() + thing->radius; line.x = thing->_f_X() + thing->_f_radius();
line.y = thing->_f_Y() + thing->radius; line.y = thing->_f_Y() + thing->_f_radius();
line.dx = -thing->radius * 2; line.dx = -thing->_f_radius() * 2;
line.dy = 0; line.dy = 0;
break; break;
case 1: // Right edge case 1: // Right edge
line.x = thing->_f_X() + thing->radius; line.x = thing->_f_X() + thing->_f_radius();
line.y = thing->_f_Y() - thing->radius; line.y = thing->_f_Y() - thing->_f_radius();
line.dx = 0; line.dx = 0;
line.dy = thing->radius * 2; line.dy = thing->_f_radius() * 2;
break; break;
case 2: // Bottom edge case 2: // Bottom edge
line.x = thing->_f_X() - thing->radius; line.x = thing->_f_X() - thing->_f_radius();
line.y = thing->_f_Y() - thing->radius; line.y = thing->_f_Y() - thing->_f_radius();
line.dx = thing->radius * 2; line.dx = thing->_f_radius() * 2;
line.dy = 0; line.dy = 0;
break; break;
case 3: // Left edge case 3: // Left edge
line.x = thing->_f_X() - thing->radius; line.x = thing->_f_X() - thing->_f_radius();
line.y = thing->_f_Y() + thing->radius; line.y = thing->_f_Y() + thing->_f_radius();
line.dx = 0; line.dx = 0;
line.dy = thing->radius * -2; line.dy = thing->_f_radius() * -2;
break; break;
} }
// Check if this side is facing the trace origin // Check if this side is facing the trace origin
@ -1306,19 +1306,19 @@ void FPathTraverse::AddThingIntercepts (int bx, int by, FBlockThingsIterator &it
switch (i) switch (i)
{ {
case 0: case 0:
line.y -= 2 * thing->radius; line.y -= 2 * thing->_f_radius();
break; break;
case 1: case 1:
line.x -= 2 * thing->radius; line.x -= 2 * thing->_f_radius();
break; break;
case 2: case 2:
line.y += 2 * thing->radius; line.y += 2 * thing->_f_radius();
break; break;
case 3: case 3:
line.x += 2 * thing->radius; line.x += 2 * thing->_f_radius();
break; break;
} }
fixed_t frac2 = P_InterceptVector(&trace, &line); fixed_t frac2 = P_InterceptVector(&trace, &line);
@ -1363,19 +1363,19 @@ void FPathTraverse::AddThingIntercepts (int bx, int by, FBlockThingsIterator &it
// check a corner to corner crossection for hit // check a corner to corner crossection for hit
if (tracepositive) if (tracepositive)
{ {
x1 = thing->_f_X() - thing->radius; x1 = thing->_f_X() - thing->_f_radius();
y1 = thing->_f_Y() + thing->radius; y1 = thing->_f_Y() + thing->_f_radius();
x2 = thing->_f_X() + thing->radius; x2 = thing->_f_X() + thing->_f_radius();
y2 = thing->_f_Y() - thing->radius; y2 = thing->_f_Y() - thing->_f_radius();
} }
else else
{ {
x1 = thing->_f_X() - thing->radius; x1 = thing->_f_X() - thing->_f_radius();
y1 = thing->_f_Y() - thing->radius; y1 = thing->_f_Y() - thing->_f_radius();
x2 = thing->_f_X() + thing->radius; x2 = thing->_f_X() + thing->_f_radius();
y2 = thing->_f_Y() + thing->radius; y2 = thing->_f_Y() + thing->_f_radius();
} }
s1 = P_PointOnDivlineSide (x1, y1, &trace); s1 = P_PointOnDivlineSide (x1, y1, &trace);

View file

@ -1198,7 +1198,8 @@ bool AActor::Grind(bool items)
{ {
flags &= ~MF_SOLID; flags &= ~MF_SOLID;
flags3 |= MF3_DONTGIB; flags3 |= MF3_DONTGIB;
height = radius = 0; height = 0;
radius = 0;
return false; return false;
} }
@ -1224,7 +1225,8 @@ bool AActor::Grind(bool items)
} }
flags &= ~MF_SOLID; flags &= ~MF_SOLID;
flags3 |= MF3_DONTGIB; flags3 |= MF3_DONTGIB;
height = radius = 0; height = 0;
radius = 0;
SetState (state); SetState (state);
if (isgeneric) // Not a custom crush state, so colorize it appropriately. if (isgeneric) // Not a custom crush state, so colorize it appropriately.
{ {
@ -1259,7 +1261,8 @@ bool AActor::Grind(bool items)
// if there's no gib sprite don't crunch it. // if there's no gib sprite don't crunch it.
flags &= ~MF_SOLID; flags &= ~MF_SOLID;
flags3 |= MF3_DONTGIB; flags3 |= MF3_DONTGIB;
height = radius = 0; height = 0;
radius = 0;
return false; return false;
} }
@ -1871,10 +1874,10 @@ fixed_t P_XYMovement (AActor *mo, fixed_t scrollx, fixed_t scrolly)
// through the actor. // through the actor.
{ {
fixed_t maxmove = mo->radius - FRACUNIT; fixed_t maxmove = mo->_f_radius() - FRACUNIT;
if (maxmove <= 0) if (maxmove <= 0)
{ // gibs can have radius 0, so don't divide by zero below! { // gibs can have _f_radius() 0, so don't divide by zero below!
maxmove = _f_MAXMOVE; maxmove = _f_MAXMOVE;
} }
@ -3456,8 +3459,8 @@ void AActor::Tick ()
{ {
smokecounter = 0; smokecounter = 0;
angle_t moveangle = R_PointToAngle2(0,0,_f_velx(),_f_vely()); angle_t moveangle = R_PointToAngle2(0,0,_f_velx(),_f_vely());
fixed_t xo = -FixedMul(finecosine[(moveangle) >> ANGLETOFINESHIFT], radius * 2) + (pr_rockettrail() << 10); fixed_t xo = -FixedMul(finecosine[(moveangle) >> ANGLETOFINESHIFT], _f_radius() * 2) + (pr_rockettrail() << 10);
fixed_t yo = -FixedMul(finesine[(moveangle) >> ANGLETOFINESHIFT], radius * 2) + (pr_rockettrail() << 10); fixed_t yo = -FixedMul(finesine[(moveangle) >> ANGLETOFINESHIFT], _f_radius() * 2) + (pr_rockettrail() << 10);
AActor * th = Spawn("GrenadeSmokeTrail", Vec3Offset(xo, yo, - (height>>3) * (_f_velz()>>16) + (2*height)/3), ALLOW_REPLACE); AActor * th = Spawn("GrenadeSmokeTrail", Vec3Offset(xo, yo, - (height>>3) * (_f_velz()>>16) + (2*height)/3), ALLOW_REPLACE);
if (th) if (th)
{ {
@ -5762,7 +5765,7 @@ void P_CheckSplash(AActor *self, fixed_t distance)
// //
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
bool P_CheckMissileSpawn (AActor* th, fixed_t maxdist) bool P_CheckMissileSpawn (AActor* th, double maxdist)
{ {
// [RH] Don't decrement tics if they are already less than 1 // [RH] Don't decrement tics if they are already less than 1
if ((th->flags4 & MF4_RANDOMIZE) && th->tics > 0) if ((th->flags4 & MF4_RANDOMIZE) && th->tics > 0)
@ -5775,9 +5778,8 @@ bool P_CheckMissileSpawn (AActor* th, fixed_t maxdist)
if (maxdist > 0) if (maxdist > 0)
{ {
// move a little forward so an angle can be computed if it immediately explodes // move a little forward so an angle can be computed if it immediately explodes
DVector3 advance(FIXED2DBL(th->_f_velx()), FIXED2DBL(th->_f_vely()), FIXED2DBL(th->_f_velz())); DVector3 advance = th->Vel;
double maxsquared = FIXED2DBL(maxdist); double maxsquared = maxdist*maxdist;
maxsquared *= maxsquared;
// Keep halving the advance vector until we get something less than maxdist // Keep halving the advance vector until we get something less than maxdist
// units away, since we still want to spawn the missile inside the shooter. // units away, since we still want to spawn the missile inside the shooter.
@ -5785,11 +5787,8 @@ bool P_CheckMissileSpawn (AActor* th, fixed_t maxdist)
{ {
advance *= 0.5f; advance *= 0.5f;
} }
while (DVector2(advance).LengthSquared() >= maxsquared); while (advance.XY().LengthSquared() >= maxsquared);
th->SetXYZ( th->SetXYZ(th->Pos() + advance);
th->_f_X() + FLOAT2FIXED(advance.X),
th->_f_Y() + FLOAT2FIXED(advance.Y),
th->_f_Z() + FLOAT2FIXED(advance.Z));
} }
FCheckPosition tm(!!(th->flags2 & MF2_RIP)); FCheckPosition tm(!!(th->flags2 & MF2_RIP));

View file

@ -2197,7 +2197,7 @@ int DPusher::CheckForSectorMatch (EPusher type, int tag)
///////////////////////////// /////////////////////////////
// //
// T_Pusher looks for all objects that are inside the radius of // T_Pusher looks for all objects that are inside the _f_radius() of
// the effect. // the effect.
// //
void DPusher::Tick () void DPusher::Tick ()
@ -2239,7 +2239,7 @@ void DPusher::Tick ()
if (m_Type == p_push) if (m_Type == p_push)
{ {
// Seek out all pushable things within the force radius of this // Seek out all pushable things within the force _f_radius() of this
// point pusher. Crosses sectors, so use blockmap. // point pusher. Crosses sectors, so use blockmap.
FPortalGroupArray check(FPortalGroupArray::PGA_NoSectorPortals); // no sector portals because this thing is utterly z-unaware. FPortalGroupArray check(FPortalGroupArray::PGA_NoSectorPortals); // no sector portals because this thing is utterly z-unaware.
@ -2266,7 +2266,7 @@ void DPusher::Tick ()
double dist = pos.Length(); double dist = pos.Length();
double speed = (m_Magnitude - (dist/2)) / (PUSH_FACTOR * 2); double speed = (m_Magnitude - (dist/2)) / (PUSH_FACTOR * 2);
// If speed <= 0, you're outside the effective radius. You also have // If speed <= 0, you're outside the effective _f_radius(). You also have
// to be able to see the push/pull source point. // to be able to see the push/pull source point.
if ((speed > 0) && (P_CheckSight (thing, m_Source, SF_IGNOREVISIBILITY))) if ((speed > 0) && (P_CheckSight (thing, m_Source, SF_IGNOREVISIBILITY)))

View file

@ -131,7 +131,7 @@ protected:
TObjPtr<AActor> m_Source;// Point source if point pusher TObjPtr<AActor> m_Source;// Point source if point pusher
DVector2 m_PushVec; DVector2 m_PushVec;
double m_Magnitude; // Vector strength for point pusher double m_Magnitude; // Vector strength for point pusher
double m_Radius; // Effective radius for point pusher double m_Radius; // Effective _f_radius() for point pusher
int m_Affectee; // Number of affected sector int m_Affectee; // Number of affected sector
friend bool PIT_PushThing (AActor *thing); friend bool PIT_PushThing (AActor *thing);

View file

@ -425,7 +425,7 @@ bool P_Thing_Raise(AActor *thing, AActor *raiser)
// [RH] Check against real height and radius // [RH] Check against real height and radius
fixed_t oldheight = thing->height; fixed_t oldheight = thing->height;
fixed_t oldradius = thing->radius; double oldradius = thing->radius;
ActorFlags oldflags = thing->flags; ActorFlags oldflags = thing->flags;
thing->flags |= MF_SOLID; thing->flags |= MF_SOLID;
@ -467,13 +467,13 @@ bool P_Thing_CanRaise(AActor *thing)
// Check against real height and radius // Check against real height and radius
ActorFlags oldflags = thing->flags; ActorFlags oldflags = thing->flags;
fixed_t oldheight = thing->height; fixed_t oldheight = thing->height;
fixed_t oldradius = thing->radius; double oldradius = thing->radius;
thing->flags |= MF_SOLID; thing->flags |= MF_SOLID;
thing->height = info->height; thing->height = info->height;
thing->radius = info->radius; thing->radius = info->radius;
bool check = P_CheckPosition (thing, thing->_f_Pos()); bool check = P_CheckPosition (thing, thing->Pos());
// Restore checked properties // Restore checked properties
thing->flags = oldflags; thing->flags = oldflags;
@ -694,7 +694,7 @@ int P_Thing_Warp(AActor *caller, AActor *reference, fixed_t xofs, fixed_t yofs,
angle += (flags & WARPF_USECALLERANGLE) ? caller->_f_angle() : reference->_f_angle(); angle += (flags & WARPF_USECALLERANGLE) ? caller->_f_angle() : reference->_f_angle();
} }
const fixed_t rad = FixedMul(radiusoffset, reference->radius); const fixed_t rad = FixedMul(radiusoffset, reference->_f_radius());
const angle_t fineangle = angle >> ANGLETOFINESHIFT; const angle_t fineangle = angle >> ANGLETOFINESHIFT;
if (!(flags & WARPF_ABSOLUTEPOSITION)) if (!(flags & WARPF_ABSOLUTEPOSITION))

View file

@ -714,8 +714,8 @@ bool FTraceInfo::ThingCheck(intercept_t *in)
hitz = StartZ + FixedMul(Vz, dist); hitz = StartZ + FixedMul(Vz, dist);
// calculated coordinate is outside the actor's bounding box // calculated coordinate is outside the actor's bounding box
if (abs(hitx - in->d.thing->_f_X()) > in->d.thing->radius || if (abs(hitx - in->d.thing->_f_X()) > in->d.thing->_f_radius() ||
abs(hity - in->d.thing->_f_Y()) > in->d.thing->radius) return true; abs(hity - in->d.thing->_f_Y()) > in->d.thing->_f_radius()) return true;
} }
else if (hitz < in->d.thing->_f_Z()) else if (hitz < in->d.thing->_f_Z())
{ // trace enters below actor { // trace enters below actor
@ -731,8 +731,8 @@ bool FTraceInfo::ThingCheck(intercept_t *in)
hitz = StartZ + FixedMul(Vz, dist); hitz = StartZ + FixedMul(Vz, dist);
// calculated coordinate is outside the actor's bounding box // calculated coordinate is outside the actor's bounding box
if (abs(hitx - in->d.thing->_f_X()) > in->d.thing->radius || if (abs(hitx - in->d.thing->_f_X()) > in->d.thing->_f_radius() ||
abs(hity - in->d.thing->_f_Y()) > in->d.thing->radius) return true; abs(hity - in->d.thing->_f_Y()) > in->d.thing->_f_radius()) return true;
} }
if (CurSector->e->XFloor.ffloors.Size()) if (CurSector->e->XFloor.ffloors.Size())

View file

@ -1215,7 +1215,7 @@ bool FPolyObj::CheckMobjBlocking (side_t *sd)
performBlockingThrust = true; performBlockingThrust = true;
} }
FBoundingBox box(mobj->_f_X(), mobj->_f_Y(), mobj->radius); FBoundingBox box(mobj->_f_X(), mobj->_f_Y(), mobj->_f_radius());
if (box.Right() <= ld->bbox[BOXLEFT] if (box.Right() <= ld->bbox[BOXLEFT]
|| box.Left() >= ld->bbox[BOXRIGHT] || box.Left() >= ld->bbox[BOXRIGHT]

View file

@ -1118,7 +1118,7 @@ void P_CreateLinkedPortals()
if (!(actor->flags & MF_NOBLOCKMAP)) if (!(actor->flags & MF_NOBLOCKMAP))
{ {
FPortalGroupArray check(FPortalGroupArray::PGA_NoSectorPortals); FPortalGroupArray check(FPortalGroupArray::PGA_NoSectorPortals);
P_CollectConnectedGroups(actor->Sector->PortalGroup, actor->_f_Pos(), actor->_f_Top(), actor->radius, check); P_CollectConnectedGroups(actor->Sector->PortalGroup, actor->_f_Pos(), actor->_f_Top(), actor->_f_radius(), check);
if (check.Size() > 0) if (check.Size() > 0)
{ {
actor->UnlinkFromWorld(); actor->UnlinkFromWorld();

View file

@ -455,7 +455,7 @@ static void ParseInsideDecoration (Baggage &bag, AActor *defaults,
else if (sc.Compare ("Radius")) else if (sc.Compare ("Radius"))
{ {
sc.MustGetFloat (); sc.MustGetFloat ();
defaults->radius = int(sc.Float * FRACUNIT); defaults->radius = sc.Float;
} }
else if (sc.Compare ("Height")) else if (sc.Compare ("Height"))
{ {

View file

@ -2401,7 +2401,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SpawnItem)
if (distance == 0) if (distance == 0)
{ {
// use the minimum distance that does not result in an overlap // use the minimum distance that does not result in an overlap
distance = (self->radius + GetDefaultByType(missile)->radius) >> FRACBITS; distance = (self->_f_radius() + GetDefaultByType(missile)->_f_radius()) >> FRACBITS;
} }
if (ACTION_CALL_FROM_WEAPON()) if (ACTION_CALL_FROM_WEAPON())
@ -3321,13 +3321,13 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Burst)
// with no relation to the size of the self shattering. I think it should // with no relation to the size of the self shattering. I think it should
// base the number of shards on the size of the dead thing, so bigger // base the number of shards on the size of the dead thing, so bigger
// things break up into more shards than smaller things. // things break up into more shards than smaller things.
// An self with radius 20 and height 64 creates ~40 chunks. // An self with _f_radius() 20 and height 64 creates ~40 chunks.
numChunks = MAX<int> (4, (self->radius>>FRACBITS)*(self->height>>FRACBITS)/32); numChunks = MAX<int> (4, (self->_f_radius()>>FRACBITS)*(self->height>>FRACBITS)/32);
i = (pr_burst.Random2()) % (numChunks/4); i = (pr_burst.Random2()) % (numChunks/4);
for (i = MAX (24, numChunks + i); i >= 0; i--) for (i = MAX (24, numChunks + i); i >= 0; i--)
{ {
fixed_t xo = (((pr_burst() - 128)*self->radius) >> 7); fixed_t xo = (((pr_burst() - 128)*self->_f_radius()) >> 7);
fixed_t yo = (((pr_burst() - 128)*self->radius) >> 7); fixed_t yo = (((pr_burst() - 128)*self->_f_radius()) >> 7);
fixed_t zo = (pr_burst()*self->height / 255 + self->GetBobOffset()); fixed_t zo = (pr_burst()*self->height / 255 + self->GetBobOffset());
mo = Spawn(chunk, self->Vec3Offset(xo, yo, zo), ALLOW_REPLACE); mo = Spawn(chunk, self->Vec3Offset(xo, yo, zo), ALLOW_REPLACE);
@ -3727,8 +3727,8 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_CheckLOF)
} }
if (flags & CLOFF_MUL_WIDTH) if (flags & CLOFF_MUL_WIDTH)
{ {
offsetforward = FixedMul(self->radius, offsetforward); offsetforward = FixedMul(self->_f_radius(), offsetforward);
offsetwidth = FixedMul(self->radius, offsetwidth); offsetwidth = FixedMul(self->_f_radius(), offsetwidth);
} }
pos = self->PosPlusZ(offsetheight - self->floorclip); pos = self->PosPlusZ(offsetheight - self->floorclip);
@ -5100,7 +5100,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_WolfAttack)
// Compute position for spawning blood/puff // Compute position for spawning blood/puff
angle = self->target->__f_AngleTo(self); angle = self->target->__f_AngleTo(self);
fixedvec3 bloodpos = self->target->_f_Vec3Angle(self->target->radius, angle, self->target->height >> 1); fixedvec3 bloodpos = self->target->_f_Vec3Angle(self->target->_f_radius(), angle, self->target->height >> 1);
int damage = flags & WAF_NORANDOM ? maxdamage : (1 + (pr_cabullet() % maxdamage)); int damage = flags & WAF_NORANDOM ? maxdamage : (1 + (pr_cabullet() % maxdamage));

View file

@ -647,7 +647,7 @@ void InitThingdef()
symt.AddSymbol(new PField(NAME_Accuracy, TypeSInt32, VARF_Native, myoffsetof(AActor,accuracy))); symt.AddSymbol(new PField(NAME_Accuracy, TypeSInt32, VARF_Native, myoffsetof(AActor,accuracy)));
symt.AddSymbol(new PField(NAME_Stamina, TypeSInt32, VARF_Native, myoffsetof(AActor,stamina))); symt.AddSymbol(new PField(NAME_Stamina, TypeSInt32, VARF_Native, myoffsetof(AActor,stamina)));
symt.AddSymbol(new PField(NAME_Height, TypeFixed, VARF_Native, myoffsetof(AActor,height))); symt.AddSymbol(new PField(NAME_Height, TypeFixed, VARF_Native, myoffsetof(AActor,height)));
symt.AddSymbol(new PField(NAME_Radius, TypeFixed, VARF_Native, myoffsetof(AActor,radius))); symt.AddSymbol(new PField(NAME_Radius, TypeFloat64, VARF_Native, myoffsetof(AActor,radius)));
symt.AddSymbol(new PField(NAME_ReactionTime,TypeSInt32, VARF_Native, myoffsetof(AActor,reactiontime))); symt.AddSymbol(new PField(NAME_ReactionTime,TypeSInt32, VARF_Native, myoffsetof(AActor,reactiontime)));
symt.AddSymbol(new PField(NAME_MeleeRange, TypeFixed, VARF_Native, myoffsetof(AActor,meleerange))); symt.AddSymbol(new PField(NAME_MeleeRange, TypeFixed, VARF_Native, myoffsetof(AActor,meleerange)));
symt.AddSymbol(new PField(NAME_Speed, TypeFloat64, VARF_Native, myoffsetof(AActor,Speed))); symt.AddSymbol(new PField(NAME_Speed, TypeFloat64, VARF_Native, myoffsetof(AActor,Speed)));

View file

@ -624,7 +624,7 @@ DEFINE_PROPERTY(floatspeed, F, Actor)
//========================================================================== //==========================================================================
DEFINE_PROPERTY(radius, F, Actor) DEFINE_PROPERTY(radius, F, Actor)
{ {
PROP_FIXED_PARM(id, 0); PROP_DOUBLE_PARM(id, 0);
defaults->radius = id; defaults->radius = id;
} }