mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-28 15:02:01 +00:00
Merge branch 'master' into scripting
Conflicts: src/actor.h src/p_user.cpp src/thingdef/thingdef_expression.cpp
This commit is contained in:
commit
c78344c19d
11 changed files with 303 additions and 324 deletions
87
src/actor.h
87
src/actor.h
|
@ -814,12 +814,6 @@ public:
|
||||||
return (flags & MF_COUNTKILL) && !(flags & MF_FRIENDLY);
|
return (flags & MF_COUNTKILL) && !(flags & MF_FRIENDLY);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool intersects(AActor *other) const
|
|
||||||
{
|
|
||||||
fixed_t blockdist = radius + other->radius;
|
|
||||||
return ( abs(x - other->x) < blockdist && abs(y - other->y) < blockdist);
|
|
||||||
}
|
|
||||||
|
|
||||||
PalEntry GetBloodColor() const
|
PalEntry GetBloodColor() const
|
||||||
{
|
{
|
||||||
return GetClass()->BloodColor;
|
return GetClass()->BloodColor;
|
||||||
|
@ -857,103 +851,109 @@ public:
|
||||||
return bloodcls;
|
return bloodcls;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool intersects(AActor *other) const
|
||||||
|
{
|
||||||
|
fixed_t blockdist = radius + other->radius;
|
||||||
|
return ( abs(X() - other->Y()) < blockdist && abs(Y() - other->Y()) < blockdist);
|
||||||
|
}
|
||||||
|
|
||||||
// 'absolute' is reserved for a linked portal implementation which needs
|
// 'absolute' is reserved for a linked portal implementation which needs
|
||||||
// to distinguish between portal-aware and portal-unaware distance calculation.
|
// to distinguish between portal-aware and portal-unaware distance calculation.
|
||||||
fixed_t AproxDistance(AActor *other, bool absolute = false)
|
fixed_t AproxDistance(AActor *other, bool absolute = false)
|
||||||
{
|
{
|
||||||
return P_AproxDistance(x - other->x, y - other->y);
|
return P_AproxDistance(X() - other->X(), Y() - other->Y());
|
||||||
}
|
}
|
||||||
|
|
||||||
// same with 'ref' here.
|
// same with 'ref' here.
|
||||||
fixed_t AproxDistance(fixed_t otherx, fixed_t othery, AActor *ref = NULL)
|
fixed_t AproxDistance(fixed_t otherx, fixed_t othery, AActor *ref = NULL)
|
||||||
{
|
{
|
||||||
return P_AproxDistance(x - otherx, y - othery);
|
return P_AproxDistance(X() - otherx, Y() - othery);
|
||||||
}
|
}
|
||||||
|
|
||||||
fixed_t AproxDistance(AActor *other, fixed_t xadd, fixed_t yadd, bool absolute = false)
|
fixed_t AproxDistance(AActor *other, fixed_t xadd, fixed_t yadd, bool absolute = false)
|
||||||
{
|
{
|
||||||
return P_AproxDistance(x - other->x + xadd, y - other->y + yadd);
|
return P_AproxDistance(X() - other->X() + xadd, Y() - other->Y() + yadd);
|
||||||
}
|
}
|
||||||
|
|
||||||
fixed_t AproxDistance3D(AActor *other, bool absolute = false)
|
fixed_t AproxDistance3D(AActor *other, bool absolute = false)
|
||||||
{
|
{
|
||||||
return P_AproxDistance(AproxDistance(other), z - other->z);
|
return P_AproxDistance(AproxDistance(other), Z() - other->Z());
|
||||||
}
|
}
|
||||||
|
|
||||||
// more precise, but slower version, being used in a few places
|
// more precise, but slower version, being used in a few places
|
||||||
fixed_t Distance2D(AActor *other, bool absolute = false)
|
fixed_t Distance2D(AActor *other, bool absolute = false)
|
||||||
{
|
{
|
||||||
return xs_RoundToInt(FVector2(x - other->x, y - other->y).Length());
|
return xs_RoundToInt(FVector2(X() - other->X(), Y() - other->Y()).Length());
|
||||||
}
|
}
|
||||||
|
|
||||||
// a full 3D version of the above
|
// a full 3D version of the above
|
||||||
fixed_t Distance3D(AActor *other, bool absolute = false)
|
fixed_t Distance3D(AActor *other, bool absolute = false)
|
||||||
{
|
{
|
||||||
return xs_RoundToInt(FVector3(x - other->x, y - other->y, z - other->z).Length());
|
return xs_RoundToInt(FVector3(X() - other->X(), Y() - other->Y(), Z() - other->Z()).Length());
|
||||||
}
|
}
|
||||||
|
|
||||||
angle_t AngleTo(AActor *other, bool absolute = false) const
|
angle_t AngleTo(AActor *other, bool absolute = false) const
|
||||||
{
|
{
|
||||||
return R_PointToAngle2(x, y, other->x, other->y);
|
return R_PointToAngle2(X(), Y(), other->X(), other->Y());
|
||||||
}
|
}
|
||||||
|
|
||||||
angle_t AngleTo(AActor *other, fixed_t oxofs, fixed_t oyofs, bool absolute = false) const
|
angle_t AngleTo(AActor *other, fixed_t oxofs, fixed_t oyofs, bool absolute = false) const
|
||||||
{
|
{
|
||||||
return R_PointToAngle2(x, y, other->x + oxofs, other->y + oyofs);
|
return R_PointToAngle2(X(), Y(), other->X() + oxofs, other->Y() + oyofs);
|
||||||
}
|
}
|
||||||
|
|
||||||
fixed_t AngleTo(fixed_t otherx, fixed_t othery, AActor *ref = NULL)
|
fixed_t AngleTo(fixed_t otherx, fixed_t othery, AActor *ref = NULL)
|
||||||
{
|
{
|
||||||
return R_PointToAngle2(x, y, otherx, othery);
|
return R_PointToAngle2(X(), Y(), otherx, othery);
|
||||||
}
|
}
|
||||||
|
|
||||||
fixed_t AngleXYTo(fixed_t myx, fixed_t myy, AActor *other, bool absolute = false)
|
fixed_t AngleXYTo(fixed_t myx, fixed_t myy, AActor *other, bool absolute = false)
|
||||||
{
|
{
|
||||||
return R_PointToAngle2(myx, myy, other->x, other->y);
|
return R_PointToAngle2(myx, myy, other->X(), other->Y());
|
||||||
}
|
}
|
||||||
|
|
||||||
fixedvec2 Vec2To(AActor *other) const
|
fixedvec2 Vec2To(AActor *other) const
|
||||||
{
|
{
|
||||||
fixedvec2 ret = { other->x - x, other->y - y };
|
fixedvec2 ret = { other->X() - X(), other->Y() - Y() };
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
fixedvec3 Vec3To(AActor *other) const
|
fixedvec3 Vec3To(AActor *other) const
|
||||||
{
|
{
|
||||||
fixedvec3 ret = { other->x - x, other->y - y, other->z - z };
|
fixedvec3 ret = { other->X() - X(), other->Y() - Y(), other->Z() - Z() };
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
fixedvec2 Vec2Offset(fixed_t dx, fixed_t dy, bool absolute = false) const
|
fixedvec2 Vec2Offset(fixed_t dx, fixed_t dy, bool absolute = false) const
|
||||||
{
|
{
|
||||||
fixedvec2 ret = { x + dx, y + dy };
|
fixedvec2 ret = { X() + dx, Y() + dy };
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fixedvec2 Vec2Angle(fixed_t length, angle_t angle, bool absolute = false) const
|
fixedvec2 Vec2Angle(fixed_t length, angle_t angle, bool absolute = false) const
|
||||||
{
|
{
|
||||||
fixedvec2 ret = { x + FixedMul(length, finecosine[angle >> ANGLETOFINESHIFT]),
|
fixedvec2 ret = { X() + FixedMul(length, finecosine[angle >> ANGLETOFINESHIFT]),
|
||||||
y + FixedMul(length, finesine[angle >> ANGLETOFINESHIFT]) };
|
Y() + FixedMul(length, finesine[angle >> ANGLETOFINESHIFT]) };
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
fixedvec3 Vec3Offset(fixed_t dx, fixed_t dy, fixed_t dz, bool absolute = false) const
|
fixedvec3 Vec3Offset(fixed_t dx, fixed_t dy, fixed_t dz, bool absolute = false) const
|
||||||
{
|
{
|
||||||
fixedvec3 ret = { x + dx, y + dy, z + dz };
|
fixedvec3 ret = { X() + dx, Y() + dy, Z() + dz };
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
fixedvec3 Vec3Angle(fixed_t length, angle_t angle, fixed_t dz, bool absolute = false) const
|
fixedvec3 Vec3Angle(fixed_t length, angle_t angle, fixed_t dz, bool absolute = false) const
|
||||||
{
|
{
|
||||||
fixedvec3 ret = { x + FixedMul(length, finecosine[angle >> ANGLETOFINESHIFT]),
|
fixedvec3 ret = { X() + FixedMul(length, finecosine[angle >> ANGLETOFINESHIFT]),
|
||||||
y + FixedMul(length, finesine[angle >> ANGLETOFINESHIFT]), z + dz };
|
Y() + FixedMul(length, finesine[angle >> ANGLETOFINESHIFT]), Z() + dz };
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Move(fixed_t dx, fixed_t dy, fixed_t dz)
|
void Move(fixed_t dx, fixed_t dy, fixed_t dz)
|
||||||
{
|
{
|
||||||
SetOrigin(x + dx, y + dy, z + dz, true);
|
SetOrigin(X() + dx, Y() + dy, Z() + dz, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetOrigin(const fixedvec3 & npos, bool moving)
|
void SetOrigin(const fixedvec3 & npos, bool moving)
|
||||||
|
@ -979,9 +979,10 @@ public:
|
||||||
void CheckSectorTransition(sector_t *oldsec);
|
void CheckSectorTransition(sector_t *oldsec);
|
||||||
|
|
||||||
// info for drawing
|
// info for drawing
|
||||||
// NOTE: The first member variable *must* be x.
|
// NOTE: The first member variable *must* be snext.
|
||||||
fixed_t x,y,z;
|
|
||||||
AActor *snext, **sprev; // links in sector (if needed)
|
AActor *snext, **sprev; // links in sector (if needed)
|
||||||
|
fixedvec3 __pos; // double underscores so that it won't get used by accident. Access to this should be exclusively through the designated access functions.
|
||||||
|
|
||||||
angle_t angle;
|
angle_t angle;
|
||||||
WORD sprite; // used to find patch_t and flip value
|
WORD sprite; // used to find patch_t and flip value
|
||||||
BYTE frame; // sprite frame to draw
|
BYTE frame; // sprite frame to draw
|
||||||
|
@ -1210,15 +1211,15 @@ public:
|
||||||
|
|
||||||
fixed_t X() const
|
fixed_t X() const
|
||||||
{
|
{
|
||||||
return x;
|
return __pos.x;
|
||||||
}
|
}
|
||||||
fixed_t Y() const
|
fixed_t Y() const
|
||||||
{
|
{
|
||||||
return y;
|
return __pos.y;
|
||||||
}
|
}
|
||||||
fixed_t Z() const
|
fixed_t Z() const
|
||||||
{
|
{
|
||||||
return z;
|
return __pos.z;
|
||||||
}
|
}
|
||||||
fixedvec3 Pos() const
|
fixedvec3 Pos() const
|
||||||
{
|
{
|
||||||
|
@ -1268,39 +1269,39 @@ public:
|
||||||
}
|
}
|
||||||
fixed_t Top() const
|
fixed_t Top() const
|
||||||
{
|
{
|
||||||
return z + height;
|
return Z() + height;
|
||||||
}
|
}
|
||||||
void SetZ(fixed_t newz, bool moving = true)
|
void SetZ(fixed_t newz, bool moving = true)
|
||||||
{
|
{
|
||||||
z = newz;
|
__pos.z = newz;
|
||||||
}
|
}
|
||||||
void AddZ(fixed_t newz, bool moving = true)
|
void AddZ(fixed_t newz, bool moving = true)
|
||||||
{
|
{
|
||||||
z += newz;
|
__pos.z += newz;
|
||||||
}
|
}
|
||||||
|
|
||||||
// These are not for general use as they do not link the actor into the world!
|
// These are not for general use as they do not link the actor into the world!
|
||||||
void SetXY(fixed_t xx, fixed_t yy)
|
void SetXY(fixed_t xx, fixed_t yy)
|
||||||
{
|
{
|
||||||
x = xx;
|
__pos.x = xx;
|
||||||
y = yy;
|
__pos.y = yy;
|
||||||
}
|
}
|
||||||
void SetXYZ(fixed_t xx, fixed_t yy, fixed_t zz)
|
void SetXYZ(fixed_t xx, fixed_t yy, fixed_t zz)
|
||||||
{
|
{
|
||||||
x = xx;
|
__pos.x = xx;
|
||||||
y = yy;
|
__pos.y = yy;
|
||||||
z = zz;
|
__pos.z = zz;
|
||||||
}
|
}
|
||||||
void SetXY(const fixedvec2 &npos)
|
void SetXY(const fixedvec2 &npos)
|
||||||
{
|
{
|
||||||
x = npos.x;
|
__pos.x = npos.x;
|
||||||
y = npos.y;
|
__pos.y = npos.y;
|
||||||
}
|
}
|
||||||
void SetXYZ(const fixedvec3 &npos)
|
void SetXYZ(const fixedvec3 &npos)
|
||||||
{
|
{
|
||||||
x = npos.x;
|
__pos.x = npos.x;
|
||||||
y = npos.y;
|
__pos.y = npos.y;
|
||||||
z = npos.z;
|
__pos.z = npos.z;
|
||||||
}
|
}
|
||||||
void SetMovement(fixed_t x, fixed_t y, fixed_t z)
|
void SetMovement(fixed_t x, fixed_t y, fixed_t z)
|
||||||
{
|
{
|
||||||
|
|
208
src/p_map.cpp
208
src/p_map.cpp
|
@ -3801,8 +3801,8 @@ AActor *P_LineAttack(AActor *t1, angle_t angle, fixed_t distance,
|
||||||
fixed_t dist = trace.Distance;
|
fixed_t dist = trace.Distance;
|
||||||
// position a bit closer for puffs/blood if using compatibility mode.
|
// position a bit closer for puffs/blood if using compatibility mode.
|
||||||
if (i_compatflags & COMPATF_HITSCAN) dist -= 10 * FRACUNIT;
|
if (i_compatflags & COMPATF_HITSCAN) dist -= 10 * FRACUNIT;
|
||||||
hitx = t1->x + FixedMul(vx, dist);
|
hitx = t1->X() + FixedMul(vx, dist);
|
||||||
hity = t1->y + FixedMul(vy, dist);
|
hity = t1->Y() + FixedMul(vy, dist);
|
||||||
hitz = shootz + FixedMul(vz, dist);
|
hitz = shootz + FixedMul(vz, dist);
|
||||||
|
|
||||||
|
|
||||||
|
@ -3943,7 +3943,7 @@ AActor *P_LinePickActor(AActor *t1, angle_t angle, fixed_t distance, int pitch,
|
||||||
vy = FixedMul(finecosine[pitch], finesine[angle]);
|
vy = FixedMul(finecosine[pitch], finesine[angle]);
|
||||||
vz = -finesine[pitch];
|
vz = -finesine[pitch];
|
||||||
|
|
||||||
shootz = t1->z - t1->floorclip + (t1->height >> 1);
|
shootz = t1->Z() - t1->floorclip + (t1->height >> 1);
|
||||||
if (t1->player != NULL)
|
if (t1->player != NULL)
|
||||||
{
|
{
|
||||||
shootz += FixedMul(t1->player->mo->AttackZOffset, t1->player->crouchfactor);
|
shootz += FixedMul(t1->player->mo->AttackZOffset, t1->player->crouchfactor);
|
||||||
|
@ -3959,7 +3959,7 @@ AActor *P_LinePickActor(AActor *t1, angle_t angle, fixed_t distance, int pitch,
|
||||||
TData.Caller = t1;
|
TData.Caller = t1;
|
||||||
TData.hitGhosts = true;
|
TData.hitGhosts = true;
|
||||||
|
|
||||||
if (Trace(t1->x, t1->y, shootz, t1->Sector, vx, vy, vz, distance,
|
if (Trace(t1->X(), t1->Y(), shootz, t1->Sector, vx, vy, vz, distance,
|
||||||
actorMask, wallMask, t1, trace, TRACE_NoSky, CheckForActor, &TData))
|
actorMask, wallMask, t1, trace, TRACE_NoSky, CheckForActor, &TData))
|
||||||
{
|
{
|
||||||
if (trace.HitType == TRACE_HitActor)
|
if (trace.HitType == TRACE_HitActor)
|
||||||
|
@ -4063,7 +4063,7 @@ void P_TraceBleed(int damage, fixed_t x, fixed_t y, fixed_t z, AActor *actor, an
|
||||||
|
|
||||||
void P_TraceBleed(int damage, AActor *target, angle_t angle, int pitch)
|
void P_TraceBleed(int damage, AActor *target, angle_t angle, int pitch)
|
||||||
{
|
{
|
||||||
P_TraceBleed(damage, target->x, target->y, target->z + target->height / 2,
|
P_TraceBleed(damage, target->X(), target->Y(), target->Z() + target->height / 2,
|
||||||
target, angle, pitch);
|
target, angle, pitch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4086,14 +4086,14 @@ void P_TraceBleed(int damage, AActor *target, AActor *missile)
|
||||||
{
|
{
|
||||||
double aim;
|
double aim;
|
||||||
|
|
||||||
aim = atan((double)missile->velz / (double)P_AproxDistance(missile->x - target->x, missile->y - target->y));
|
aim = atan((double)missile->velz / (double)target->AproxDistance(missile));
|
||||||
pitch = -(int)(aim * ANGLE_180 / PI);
|
pitch = -(int)(aim * ANGLE_180 / PI);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pitch = 0;
|
pitch = 0;
|
||||||
}
|
}
|
||||||
P_TraceBleed(damage, target->x, target->y, target->z + target->height / 2,
|
P_TraceBleed(damage, target->X(), target->Y(), target->Z() + target->height / 2,
|
||||||
target, missile->AngleTo(target),
|
target, missile->AngleTo(target),
|
||||||
pitch);
|
pitch);
|
||||||
}
|
}
|
||||||
|
@ -4111,7 +4111,7 @@ void P_TraceBleed(int damage, AActor *target)
|
||||||
fixed_t one = pr_tracebleed() << 24;
|
fixed_t one = pr_tracebleed() << 24;
|
||||||
fixed_t two = (pr_tracebleed() - 128) << 16;
|
fixed_t two = (pr_tracebleed() - 128) << 16;
|
||||||
|
|
||||||
P_TraceBleed(damage, target->x, target->y, target->z + target->height / 2,
|
P_TraceBleed(damage, target->X(), target->Y(), target->Z() + target->height / 2,
|
||||||
target, one, two);
|
target, one, two);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4174,7 +4174,6 @@ void P_RailAttack(AActor *source, int damage, int offset_xy, fixed_t offset_z, i
|
||||||
{
|
{
|
||||||
fixed_t vx, vy, vz;
|
fixed_t vx, vy, vz;
|
||||||
angle_t angle, pitch;
|
angle_t angle, pitch;
|
||||||
fixed_t x1, y1;
|
|
||||||
TVector3<double> start, end;
|
TVector3<double> start, end;
|
||||||
FTraceResults trace;
|
FTraceResults trace;
|
||||||
fixed_t shootz;
|
fixed_t shootz;
|
||||||
|
@ -4191,10 +4190,7 @@ void P_RailAttack(AActor *source, int damage, int offset_xy, fixed_t offset_z, i
|
||||||
vy = FixedMul(finecosine[pitch], finesine[angle]);
|
vy = FixedMul(finecosine[pitch], finesine[angle]);
|
||||||
vz = finesine[pitch];
|
vz = finesine[pitch];
|
||||||
|
|
||||||
x1 = source->x;
|
shootz = source->Z() - source->floorclip + (source->height >> 1) + offset_z;
|
||||||
y1 = source->y;
|
|
||||||
|
|
||||||
shootz = source->z - source->floorclip + (source->height >> 1) + offset_z;
|
|
||||||
|
|
||||||
if (!(railflags & RAF_CENTERZ))
|
if (!(railflags & RAF_CENTERZ))
|
||||||
{
|
{
|
||||||
|
@ -4209,15 +4205,15 @@ void P_RailAttack(AActor *source, int damage, int offset_xy, fixed_t offset_z, i
|
||||||
}
|
}
|
||||||
|
|
||||||
angle = ((source->angle + angleoffset) - ANG90) >> ANGLETOFINESHIFT;
|
angle = ((source->angle + angleoffset) - ANG90) >> ANGLETOFINESHIFT;
|
||||||
x1 += offset_xy * finecosine[angle];
|
|
||||||
y1 += offset_xy * finesine[angle];
|
fixedvec2 xy = source->Vec2Offset(offset_xy * finecosine[angle], offset_xy * finesine[angle]);
|
||||||
|
|
||||||
RailData rail_data;
|
RailData rail_data;
|
||||||
rail_data.Caller = source;
|
rail_data.Caller = source;
|
||||||
|
|
||||||
rail_data.StopAtOne = !!(railflags & RAF_NOPIERCE);
|
rail_data.StopAtOne = !!(railflags & RAF_NOPIERCE);
|
||||||
start.X = FIXED2FLOAT(x1);
|
start.X = FIXED2FLOAT(xy.x);
|
||||||
start.Y = FIXED2FLOAT(y1);
|
start.Y = FIXED2FLOAT(xy.y);
|
||||||
start.Z = FIXED2FLOAT(shootz);
|
start.Z = FIXED2FLOAT(shootz);
|
||||||
|
|
||||||
int flags;
|
int flags;
|
||||||
|
@ -4228,7 +4224,7 @@ void P_RailAttack(AActor *source, int damage, int offset_xy, fixed_t offset_z, i
|
||||||
flags = (puffDefaults->flags6 & MF6_NOTRIGGER) ? 0 : TRACE_PCross | TRACE_Impact;
|
flags = (puffDefaults->flags6 & MF6_NOTRIGGER) ? 0 : TRACE_PCross | TRACE_Impact;
|
||||||
rail_data.StopAtInvul = (puffDefaults->flags3 & MF3_FOILINVUL) ? false : true;
|
rail_data.StopAtInvul = (puffDefaults->flags3 & MF3_FOILINVUL) ? false : true;
|
||||||
rail_data.ThruSpecies = (puffDefaults->flags6 & MF6_MTHRUSPECIES) ? true : false;
|
rail_data.ThruSpecies = (puffDefaults->flags6 & MF6_MTHRUSPECIES) ? true : false;
|
||||||
Trace(x1, y1, shootz, source->Sector, vx, vy, vz,
|
Trace(xy.x, xy.y, shootz, source->Sector, vx, vy, vz,
|
||||||
distance, MF_SHOOTABLE, ML_BLOCKEVERYTHING, source, trace,
|
distance, MF_SHOOTABLE, ML_BLOCKEVERYTHING, source, trace,
|
||||||
flags, ProcessRailHit, &rail_data);
|
flags, ProcessRailHit, &rail_data);
|
||||||
|
|
||||||
|
@ -4239,7 +4235,7 @@ void P_RailAttack(AActor *source, int damage, int offset_xy, fixed_t offset_z, i
|
||||||
// used as damage inflictor
|
// used as damage inflictor
|
||||||
AActor *thepuff = NULL;
|
AActor *thepuff = NULL;
|
||||||
|
|
||||||
if (puffclass != NULL) thepuff = Spawn(puffclass, source->x, source->y, source->z, ALLOW_REPLACE);
|
if (puffclass != NULL) thepuff = Spawn(puffclass, source->Pos(), ALLOW_REPLACE);
|
||||||
|
|
||||||
for (i = 0; i < rail_data.RailHits.Size(); i++)
|
for (i = 0; i < rail_data.RailHits.Size(); i++)
|
||||||
{
|
{
|
||||||
|
@ -4253,8 +4249,8 @@ void P_RailAttack(AActor *source, int damage, int offset_xy, fixed_t offset_z, i
|
||||||
AActor *hitactor = rail_data.RailHits[i].HitActor;
|
AActor *hitactor = rail_data.RailHits[i].HitActor;
|
||||||
fixed_t hitdist = rail_data.RailHits[i].Distance;
|
fixed_t hitdist = rail_data.RailHits[i].Distance;
|
||||||
|
|
||||||
x = x1 + FixedMul(hitdist, vx);
|
x = xy.x + FixedMul(hitdist, vx);
|
||||||
y = y1 + FixedMul(hitdist, vy);
|
y = xy.y + FixedMul(hitdist, vy);
|
||||||
z = shootz + FixedMul(hitdist, vz);
|
z = shootz + FixedMul(hitdist, vz);
|
||||||
|
|
||||||
if ((hitactor->flags & MF_NOBLOOD) ||
|
if ((hitactor->flags & MF_NOBLOOD) ||
|
||||||
|
@ -4332,7 +4328,7 @@ void P_RailAttack(AActor *source, int damage, int offset_xy, fixed_t offset_z, i
|
||||||
trace.CrossedWater == NULL &&
|
trace.CrossedWater == NULL &&
|
||||||
trace.Sector->heightsec == NULL)
|
trace.Sector->heightsec == NULL)
|
||||||
{
|
{
|
||||||
thepuff->SetOrigin(trace.X, trace.Y, trace.Z);
|
thepuff->SetOrigin(trace.X, trace.Y, trace.Z, false);
|
||||||
P_HitWater(thepuff, trace.Sector);
|
P_HitWater(thepuff, trace.Sector);
|
||||||
}
|
}
|
||||||
if (trace.Crossed3DWater || trace.CrossedWater)
|
if (trace.Crossed3DWater || trace.CrossedWater)
|
||||||
|
@ -4370,16 +4366,16 @@ void P_AimCamera(AActor *t1, fixed_t &CameraX, fixed_t &CameraY, fixed_t &Camera
|
||||||
vy = FixedMul(finecosine[pitch], finesine[angle]);
|
vy = FixedMul(finecosine[pitch], finesine[angle]);
|
||||||
vz = finesine[pitch];
|
vz = finesine[pitch];
|
||||||
|
|
||||||
sz = t1->z - t1->floorclip + t1->height + (fixed_t)(clamp<double>(chase_height, -1000, 1000) * FRACUNIT);
|
sz = t1->Z() - t1->floorclip + t1->height + (fixed_t)(clamp<double>(chase_height, -1000, 1000) * FRACUNIT);
|
||||||
|
|
||||||
if (Trace(t1->x, t1->y, sz, t1->Sector,
|
if (Trace(t1->X(), t1->Y(), sz, t1->Sector,
|
||||||
vx, vy, vz, distance, 0, 0, NULL, trace) &&
|
vx, vy, vz, distance, 0, 0, NULL, trace) &&
|
||||||
trace.Distance > 10 * FRACUNIT)
|
trace.Distance > 10 * FRACUNIT)
|
||||||
{
|
{
|
||||||
// Position camera slightly in front of hit thing
|
// Position camera slightly in front of hit thing
|
||||||
fixed_t dist = trace.Distance - 5 * FRACUNIT;
|
fixed_t dist = trace.Distance - 5 * FRACUNIT;
|
||||||
CameraX = t1->x + FixedMul(vx, dist);
|
CameraX = t1->X() + FixedMul(vx, dist);
|
||||||
CameraY = t1->y + FixedMul(vy, dist);
|
CameraY = t1->Y() + FixedMul(vy, dist);
|
||||||
CameraZ = sz + FixedMul(vz, dist);
|
CameraZ = sz + FixedMul(vz, dist);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -4446,7 +4442,7 @@ bool P_TalkFacing(AActor *player)
|
||||||
|
|
||||||
bool P_UseTraverse(AActor *usething, fixed_t endx, fixed_t endy, bool &foundline)
|
bool P_UseTraverse(AActor *usething, fixed_t endx, fixed_t endy, bool &foundline)
|
||||||
{
|
{
|
||||||
FPathTraverse it(usething->x, usething->y, endx, endy, PT_ADDLINES | PT_ADDTHINGS);
|
FPathTraverse it(usething->X(), usething->Y(), endx, endy, PT_ADDLINES | PT_ADDTHINGS);
|
||||||
intercept_t *in;
|
intercept_t *in;
|
||||||
|
|
||||||
while ((in = it.Next()))
|
while ((in = it.Next()))
|
||||||
|
@ -4495,7 +4491,7 @@ bool P_UseTraverse(AActor *usething, fixed_t endx, fixed_t endy, bool &foundline
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
sec = P_PointOnLineSide(usething->x, usething->y, in->d.line) == 0 ?
|
sec = P_PointOnLineSide(usething->X(), usething->Y(), in->d.line) == 0 ?
|
||||||
in->d.line->frontsector : in->d.line->backsector;
|
in->d.line->frontsector : in->d.line->backsector;
|
||||||
|
|
||||||
if (sec != NULL && sec->SecActTarget &&
|
if (sec != NULL && sec->SecActTarget &&
|
||||||
|
@ -4514,7 +4510,7 @@ bool P_UseTraverse(AActor *usething, fixed_t endx, fixed_t endy, bool &foundline
|
||||||
continue; // not a special line, but keep checking
|
continue; // not a special line, but keep checking
|
||||||
}
|
}
|
||||||
|
|
||||||
if (P_PointOnLineSide(usething->x, usething->y, in->d.line) == 1)
|
if (P_PointOnLineSide(usething->X(), usething->Y(), in->d.line) == 1)
|
||||||
{
|
{
|
||||||
if (!(in->d.line->activation & SPAC_UseBack))
|
if (!(in->d.line->activation & SPAC_UseBack))
|
||||||
{
|
{
|
||||||
|
@ -4574,7 +4570,7 @@ bool P_UseTraverse(AActor *usething, fixed_t endx, fixed_t endy, bool &foundline
|
||||||
|
|
||||||
bool P_NoWayTraverse(AActor *usething, fixed_t endx, fixed_t endy)
|
bool P_NoWayTraverse(AActor *usething, fixed_t endx, fixed_t endy)
|
||||||
{
|
{
|
||||||
FPathTraverse it(usething->x, usething->y, endx, endy, PT_ADDLINES);
|
FPathTraverse it(usething->X(), usething->Y(), endx, endy, PT_ADDLINES);
|
||||||
intercept_t *in;
|
intercept_t *in;
|
||||||
|
|
||||||
while ((in = it.Next()))
|
while ((in = it.Next()))
|
||||||
|
@ -4589,8 +4585,8 @@ bool P_NoWayTraverse(AActor *usething, fixed_t endx, fixed_t endy)
|
||||||
P_LineOpening(open, NULL, ld, it.Trace().x + FixedMul(it.Trace().dx, in->frac),
|
P_LineOpening(open, NULL, ld, it.Trace().x + FixedMul(it.Trace().dx, in->frac),
|
||||||
it.Trace().y + FixedMul(it.Trace().dy, in->frac));
|
it.Trace().y + FixedMul(it.Trace().dy, in->frac));
|
||||||
if (open.range <= 0 ||
|
if (open.range <= 0 ||
|
||||||
open.bottom > usething->z + usething->MaxStepHeight ||
|
open.bottom > usething->Z() + usething->MaxStepHeight ||
|
||||||
open.top < usething->z + usething->height) return true;
|
open.top < usething->Top()) return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -4605,18 +4601,10 @@ bool P_NoWayTraverse(AActor *usething, fixed_t endx, fixed_t endy)
|
||||||
|
|
||||||
void P_UseLines(player_t *player)
|
void P_UseLines(player_t *player)
|
||||||
{
|
{
|
||||||
angle_t angle;
|
bool foundline = false;
|
||||||
fixed_t x1, y1, usedist;
|
|
||||||
bool foundline;
|
|
||||||
|
|
||||||
foundline = false;
|
|
||||||
|
|
||||||
angle = player->mo->angle >> ANGLETOFINESHIFT;
|
|
||||||
usedist = player->mo->UseRange;
|
|
||||||
|
|
||||||
// [NS] Now queries the Player's UseRange.
|
// [NS] Now queries the Player's UseRange.
|
||||||
x1 = player->mo->x + FixedMul(usedist, finecosine[angle]);
|
fixedvec2 end = player->mo->Vec2Angle(player->mo->UseRange, player->mo->angle, true);
|
||||||
y1 = player->mo->y + FixedMul(usedist, finesine[angle]);
|
|
||||||
|
|
||||||
// old code:
|
// old code:
|
||||||
//
|
//
|
||||||
|
@ -4624,13 +4612,13 @@ void P_UseLines(player_t *player)
|
||||||
//
|
//
|
||||||
// This added test makes the "oof" sound work on 2s lines -- killough:
|
// This added test makes the "oof" sound work on 2s lines -- killough:
|
||||||
|
|
||||||
if (!P_UseTraverse(player->mo, x1, y1, foundline))
|
if (!P_UseTraverse(player->mo, end.x, end.y, foundline))
|
||||||
{ // [RH] Give sector a chance to eat the use
|
{ // [RH] Give sector a chance to eat the use
|
||||||
sector_t *sec = player->mo->Sector;
|
sector_t *sec = player->mo->Sector;
|
||||||
int spac = SECSPAC_Use;
|
int spac = SECSPAC_Use;
|
||||||
if (foundline) spac |= SECSPAC_UseWall;
|
if (foundline) spac |= SECSPAC_UseWall;
|
||||||
if ((!sec->SecActTarget || !sec->SecActTarget->TriggerAction(player->mo, spac)) &&
|
if ((!sec->SecActTarget || !sec->SecActTarget->TriggerAction(player->mo, spac)) &&
|
||||||
P_NoWayTraverse(player->mo, x1, y1))
|
P_NoWayTraverse(player->mo, end.x, end.y))
|
||||||
{
|
{
|
||||||
S_Sound(player->mo, CHAN_VOICE, "*usefail", 1, ATTN_IDLE);
|
S_Sound(player->mo, CHAN_VOICE, "*usefail", 1, ATTN_IDLE);
|
||||||
}
|
}
|
||||||
|
@ -4651,8 +4639,8 @@ bool P_UsePuzzleItem(AActor *PuzzleItemUser, int PuzzleItemType)
|
||||||
fixed_t x1, y1, x2, y2, usedist;
|
fixed_t x1, y1, x2, y2, usedist;
|
||||||
|
|
||||||
angle = PuzzleItemUser->angle >> ANGLETOFINESHIFT;
|
angle = PuzzleItemUser->angle >> ANGLETOFINESHIFT;
|
||||||
x1 = PuzzleItemUser->x;
|
x1 = PuzzleItemUser->X();
|
||||||
y1 = PuzzleItemUser->y;
|
y1 = PuzzleItemUser->Y();
|
||||||
|
|
||||||
// [NS] If it's a Player, get their UseRange.
|
// [NS] If it's a Player, get their UseRange.
|
||||||
if (PuzzleItemUser->player)
|
if (PuzzleItemUser->player)
|
||||||
|
@ -4683,7 +4671,7 @@ bool P_UsePuzzleItem(AActor *PuzzleItemUser, int PuzzleItemType)
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (P_PointOnLineSide(PuzzleItemUser->x, PuzzleItemUser->y, in->d.line) == 1)
|
if (P_PointOnLineSide(PuzzleItemUser->X(), PuzzleItemUser->Y(), in->d.line) == 1)
|
||||||
{ // Don't use back sides
|
{ // Don't use back sides
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -4750,7 +4738,7 @@ void P_RadiusAttack(AActor *bombspot, AActor *bombsource, int bombdamage, int bo
|
||||||
double bombdistancefloat = 1.f / (double)(bombdistance - fulldamagedistance);
|
double bombdistancefloat = 1.f / (double)(bombdistance - fulldamagedistance);
|
||||||
double bombdamagefloat = (double)bombdamage;
|
double bombdamagefloat = (double)bombdamage;
|
||||||
|
|
||||||
FBlockThingsIterator it(FBoundingBox(bombspot->x, bombspot->y, bombdistance << FRACBITS));
|
FBlockThingsIterator it(FBoundingBox(bombspot->X(), bombspot->Y(), bombdistance << FRACBITS));
|
||||||
AActor *thing;
|
AActor *thing;
|
||||||
|
|
||||||
if (flags & RADF_SOURCEISSPOT)
|
if (flags & RADF_SOURCEISSPOT)
|
||||||
|
@ -4799,24 +4787,25 @@ void P_RadiusAttack(AActor *bombspot, AActor *bombsource, int bombdamage, int bo
|
||||||
fixed_t dx, dy;
|
fixed_t dx, dy;
|
||||||
double boxradius;
|
double boxradius;
|
||||||
|
|
||||||
dx = abs(thing->x - bombspot->x);
|
fixedvec2 vec = bombspot->Vec2To(thing);
|
||||||
dy = abs(thing->y - bombspot->y);
|
dx = abs(vec.x);
|
||||||
|
dy = abs(vec.y);
|
||||||
boxradius = double(thing->radius);
|
boxradius = double(thing->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);
|
||||||
|
|
||||||
if (bombspot->z < thing->z || bombspot->z >= thing->z + thing->height)
|
if (bombspot->Z() < thing->Z() || bombspot->Z() >= thing->Top())
|
||||||
{
|
{
|
||||||
double dz;
|
double dz;
|
||||||
|
|
||||||
if (bombspot->z > thing->z)
|
if (bombspot->Z() > thing->Z())
|
||||||
{
|
{
|
||||||
dz = double(bombspot->z - thing->z - thing->height);
|
dz = double(bombspot->Z() - thing->Top());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
dz = double(thing->z - bombspot->z);
|
dz = double(thing->Z() - bombspot->Z());
|
||||||
}
|
}
|
||||||
if (len <= boxradius)
|
if (len <= boxradius)
|
||||||
{
|
{
|
||||||
|
@ -4873,7 +4862,7 @@ void P_RadiusAttack(AActor *bombspot, AActor *bombsource, int bombdamage, int bo
|
||||||
{
|
{
|
||||||
thrust *= selfthrustscale;
|
thrust *= selfthrustscale;
|
||||||
}
|
}
|
||||||
velz = (double)(thing->z + (thing->height >> 1) - bombspot->z) * thrust;
|
velz = (double)(thing->Z() + (thing->height >> 1) - bombspot->Z()) * thrust;
|
||||||
if (bombsource != thing)
|
if (bombsource != thing)
|
||||||
{
|
{
|
||||||
velz *= 0.5f;
|
velz *= 0.5f;
|
||||||
|
@ -4898,8 +4887,9 @@ void P_RadiusAttack(AActor *bombspot, AActor *bombsource, int bombdamage, int bo
|
||||||
// [RH] Old code just for barrels
|
// [RH] Old code just for barrels
|
||||||
fixed_t dx, dy, dist;
|
fixed_t dx, dy, dist;
|
||||||
|
|
||||||
dx = abs(thing->x - bombspot->x);
|
fixedvec2 vec = bombspot->Vec2To(thing);
|
||||||
dy = abs(thing->y - bombspot->y);
|
dx = abs(vec.x);
|
||||||
|
dy = abs(vec.y);
|
||||||
|
|
||||||
dist = dx>dy ? dx : dy;
|
dist = dx>dy ? dx : dy;
|
||||||
dist = (dist - thing->radius) >> FRACBITS;
|
dist = (dist - thing->radius) >> FRACBITS;
|
||||||
|
@ -4986,7 +4976,7 @@ bool P_AdjustFloorCeil(AActor *thing, FChangePosition *cpos)
|
||||||
thing->flags2 |= MF2_PASSMOBJ;
|
thing->flags2 |= MF2_PASSMOBJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isgood = P_CheckPosition(thing, thing->x, thing->y, tm);
|
bool isgood = P_CheckPosition(thing, thing->X(), thing->Y(), tm);
|
||||||
thing->floorz = tm.floorz;
|
thing->floorz = tm.floorz;
|
||||||
thing->ceilingz = tm.ceilingz;
|
thing->ceilingz = tm.ceilingz;
|
||||||
thing->dropoffz = tm.dropoffz; // killough 11/98: remember dropoffs
|
thing->dropoffz = tm.dropoffz; // killough 11/98: remember dropoffs
|
||||||
|
@ -5017,7 +5007,7 @@ void P_FindAboveIntersectors(AActor *actor)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
AActor *thing;
|
AActor *thing;
|
||||||
FBlockThingsIterator it(FBoundingBox(actor->x, actor->y, actor->radius));
|
FBlockThingsIterator it(FBoundingBox(actor->X(), actor->Y(), actor->radius));
|
||||||
while ((thing = it.Next()))
|
while ((thing = it.Next()))
|
||||||
{
|
{
|
||||||
if (!thing->intersects(actor))
|
if (!thing->intersects(actor))
|
||||||
|
@ -5048,8 +5038,8 @@ void P_FindAboveIntersectors(AActor *actor)
|
||||||
// not what is wanted here.
|
// not what is wanted here.
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (thing->z >= actor->z &&
|
if (thing->Z() >= actor->Z() &&
|
||||||
thing->z <= actor->z + actor->height)
|
thing->Z() <= actor->Top())
|
||||||
{ // Thing intersects above the base
|
{ // Thing intersects above the base
|
||||||
intersectors.Push(thing);
|
intersectors.Push(thing);
|
||||||
}
|
}
|
||||||
|
@ -5071,7 +5061,7 @@ void P_FindBelowIntersectors(AActor *actor)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
AActor *thing;
|
AActor *thing;
|
||||||
FBlockThingsIterator it(FBoundingBox(actor->x, actor->y, actor->radius));
|
FBlockThingsIterator it(FBoundingBox(actor->X(), actor->Y(), actor->radius));
|
||||||
while ((thing = it.Next()))
|
while ((thing = it.Next()))
|
||||||
{
|
{
|
||||||
if (!thing->intersects(actor))
|
if (!thing->intersects(actor))
|
||||||
|
@ -5102,8 +5092,8 @@ void P_FindBelowIntersectors(AActor *actor)
|
||||||
// not what is wanted here.
|
// not what is wanted here.
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (thing->z + thing->height <= actor->z + actor->height &&
|
if (thing->Top() <= actor->Top() &&
|
||||||
thing->z + thing->height > actor->z)
|
thing->Top() > actor->Z())
|
||||||
{ // Thing intersects below the base
|
{ // Thing intersects below the base
|
||||||
intersectors.Push(thing);
|
intersectors.Push(thing);
|
||||||
}
|
}
|
||||||
|
@ -5138,8 +5128,7 @@ void P_DoCrunch(AActor *thing, FChangePosition *cpos)
|
||||||
{
|
{
|
||||||
AActor *mo;
|
AActor *mo;
|
||||||
|
|
||||||
mo = Spawn(bloodcls, thing->x, thing->y,
|
mo = Spawn(bloodcls, thing->PosPlusZ(thing->height / 2), ALLOW_REPLACE);
|
||||||
thing->z + thing->height / 2, ALLOW_REPLACE);
|
|
||||||
|
|
||||||
mo->velx = pr_crunch.Random2() << 12;
|
mo->velx = pr_crunch.Random2() << 12;
|
||||||
mo->vely = pr_crunch.Random2() << 12;
|
mo->vely = pr_crunch.Random2() << 12;
|
||||||
|
@ -5155,7 +5144,7 @@ void P_DoCrunch(AActor *thing, FChangePosition *cpos)
|
||||||
an = (M_Random() - 128) << 24;
|
an = (M_Random() - 128) << 24;
|
||||||
if (cl_bloodtype >= 1)
|
if (cl_bloodtype >= 1)
|
||||||
{
|
{
|
||||||
P_DrawSplash2(32, thing->x, thing->y, thing->z + thing->height / 2, an, 2, bloodcolor);
|
P_DrawSplash2(32, thing->X(), thing->Y(), thing->Z() + thing->height / 2, an, 2, bloodcolor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (thing->CrushPainSound != 0 && !S_GetSoundPlayingInfo(thing, thing->CrushPainSound))
|
if (thing->CrushPainSound != 0 && !S_GetSoundPlayingInfo(thing, thing->CrushPainSound))
|
||||||
|
@ -5183,7 +5172,7 @@ int P_PushUp(AActor *thing, FChangePosition *cpos)
|
||||||
unsigned int lastintersect;
|
unsigned int lastintersect;
|
||||||
int mymass = thing->Mass;
|
int mymass = thing->Mass;
|
||||||
|
|
||||||
if (thing->z + thing->height > thing->ceilingz)
|
if (thing->Top() > thing->ceilingz)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -5212,13 +5201,13 @@ int P_PushUp(AActor *thing, FChangePosition *cpos)
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
fixed_t oldz;
|
fixed_t oldz;
|
||||||
oldz = intersect->z;
|
oldz = intersect->Z();
|
||||||
P_AdjustFloorCeil(intersect, cpos);
|
P_AdjustFloorCeil(intersect, cpos);
|
||||||
intersect->z = thing->z + thing->height + 1;
|
intersect->SetZ(thing->Top() + 1);
|
||||||
if (P_PushUp(intersect, cpos))
|
if (P_PushUp(intersect, cpos))
|
||||||
{ // Move blocked
|
{ // Move blocked
|
||||||
P_DoCrunch(intersect, cpos);
|
P_DoCrunch(intersect, cpos);
|
||||||
intersect->z = oldz;
|
intersect->SetZ(oldz);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5239,7 +5228,7 @@ int P_PushDown(AActor *thing, FChangePosition *cpos)
|
||||||
unsigned int lastintersect;
|
unsigned int lastintersect;
|
||||||
int mymass = thing->Mass;
|
int mymass = thing->Mass;
|
||||||
|
|
||||||
if (thing->z <= thing->floorz)
|
if (thing->Z() <= thing->floorz)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -5256,15 +5245,15 @@ int P_PushDown(AActor *thing, FChangePosition *cpos)
|
||||||
// Can't push bridges or things more massive than ourself
|
// Can't push bridges or things more massive than ourself
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
fixed_t oldz = intersect->z;
|
fixed_t oldz = intersect->Z();
|
||||||
P_AdjustFloorCeil(intersect, cpos);
|
P_AdjustFloorCeil(intersect, cpos);
|
||||||
if (oldz > thing->z - intersect->height)
|
if (oldz > thing->Z() - intersect->height)
|
||||||
{ // Only push things down, not up.
|
{ // Only push things down, not up.
|
||||||
intersect->z = thing->z - intersect->height;
|
intersect->SetZ(thing->Z() - intersect->height);
|
||||||
if (P_PushDown(intersect, cpos))
|
if (P_PushDown(intersect, cpos))
|
||||||
{ // Move blocked
|
{ // Move blocked
|
||||||
P_DoCrunch(intersect, cpos);
|
P_DoCrunch(intersect, cpos);
|
||||||
intersect->z = oldz;
|
intersect->SetZ(oldz);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5289,24 +5278,24 @@ void PIT_FloorDrop(AActor *thing, FChangePosition *cpos)
|
||||||
|
|
||||||
if (thing->velz == 0 &&
|
if (thing->velz == 0 &&
|
||||||
(!(thing->flags & MF_NOGRAVITY) ||
|
(!(thing->flags & MF_NOGRAVITY) ||
|
||||||
(thing->z == oldfloorz && !(thing->flags & MF_NOLIFTDROP))))
|
(thing->Z() == oldfloorz && !(thing->flags & MF_NOLIFTDROP))))
|
||||||
{
|
{
|
||||||
fixed_t oldz = thing->z;
|
fixed_t oldz = thing->Z();
|
||||||
|
|
||||||
if ((thing->flags & MF_NOGRAVITY) || (thing->flags5 & MF5_MOVEWITHSECTOR) ||
|
if ((thing->flags & MF_NOGRAVITY) || (thing->flags5 & MF5_MOVEWITHSECTOR) ||
|
||||||
(((cpos->sector->Flags & SECF_FLOORDROP) || cpos->moveamt < 9 * FRACUNIT)
|
(((cpos->sector->Flags & SECF_FLOORDROP) || cpos->moveamt < 9 * FRACUNIT)
|
||||||
&& thing->z - thing->floorz <= cpos->moveamt))
|
&& thing->Z() - thing->floorz <= cpos->moveamt))
|
||||||
{
|
{
|
||||||
thing->z = thing->floorz;
|
thing->SetZ(thing->floorz);
|
||||||
P_CheckFakeFloorTriggers(thing, oldz);
|
P_CheckFakeFloorTriggers(thing, oldz);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((thing->z != oldfloorz && !(thing->flags & MF_NOLIFTDROP)))
|
else if ((thing->Z() != oldfloorz && !(thing->flags & MF_NOLIFTDROP)))
|
||||||
{
|
{
|
||||||
fixed_t oldz = thing->z;
|
fixed_t oldz = thing->Z();
|
||||||
if ((thing->flags & MF_NOGRAVITY) && (thing->flags6 & MF6_RELATIVETOFLOOR))
|
if ((thing->flags & MF_NOGRAVITY) && (thing->flags6 & MF6_RELATIVETOFLOOR))
|
||||||
{
|
{
|
||||||
thing->z = thing->z - oldfloorz + thing->floorz;
|
thing->AddZ(-oldfloorz + thing->floorz);
|
||||||
P_CheckFakeFloorTriggers(thing, oldz);
|
P_CheckFakeFloorTriggers(thing, oldz);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5321,14 +5310,14 @@ void PIT_FloorDrop(AActor *thing, FChangePosition *cpos)
|
||||||
void PIT_FloorRaise(AActor *thing, FChangePosition *cpos)
|
void PIT_FloorRaise(AActor *thing, FChangePosition *cpos)
|
||||||
{
|
{
|
||||||
fixed_t oldfloorz = thing->floorz;
|
fixed_t oldfloorz = thing->floorz;
|
||||||
fixed_t oldz = thing->z;
|
fixed_t oldz = thing->Z();
|
||||||
|
|
||||||
P_AdjustFloorCeil(thing, cpos);
|
P_AdjustFloorCeil(thing, cpos);
|
||||||
|
|
||||||
if (oldfloorz == thing->floorz) return;
|
if (oldfloorz == thing->floorz) return;
|
||||||
|
|
||||||
// Move things intersecting the floor up
|
// Move things intersecting the floor up
|
||||||
if (thing->z <= thing->floorz)
|
if (thing->Z() <= thing->floorz)
|
||||||
{
|
{
|
||||||
if (thing->flags4 & MF4_ACTLIKEBRIDGE)
|
if (thing->flags4 & MF4_ACTLIKEBRIDGE)
|
||||||
{
|
{
|
||||||
|
@ -5336,14 +5325,14 @@ void PIT_FloorRaise(AActor *thing, FChangePosition *cpos)
|
||||||
return; // do not move bridge things
|
return; // do not move bridge things
|
||||||
}
|
}
|
||||||
intersectors.Clear();
|
intersectors.Clear();
|
||||||
thing->z = thing->floorz;
|
thing->SetZ(thing->floorz);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((thing->flags & MF_NOGRAVITY) && (thing->flags6 & MF6_RELATIVETOFLOOR))
|
if ((thing->flags & MF_NOGRAVITY) && (thing->flags6 & MF6_RELATIVETOFLOOR))
|
||||||
{
|
{
|
||||||
intersectors.Clear();
|
intersectors.Clear();
|
||||||
thing->z = thing->z - oldfloorz + thing->floorz;
|
thing->AddZ(-oldfloorz + thing->floorz);
|
||||||
}
|
}
|
||||||
else return;
|
else return;
|
||||||
}
|
}
|
||||||
|
@ -5358,7 +5347,7 @@ void PIT_FloorRaise(AActor *thing, FChangePosition *cpos)
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
P_DoCrunch(thing, cpos);
|
P_DoCrunch(thing, cpos);
|
||||||
thing->z = oldz;
|
thing->SetZ(oldz);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5373,10 +5362,10 @@ void PIT_CeilingLower(AActor *thing, FChangePosition *cpos)
|
||||||
{
|
{
|
||||||
bool onfloor;
|
bool onfloor;
|
||||||
|
|
||||||
onfloor = thing->z <= thing->floorz;
|
onfloor = thing->Z() <= thing->floorz;
|
||||||
P_AdjustFloorCeil(thing, cpos);
|
P_AdjustFloorCeil(thing, cpos);
|
||||||
|
|
||||||
if (thing->z + thing->height > thing->ceilingz)
|
if (thing->Top() > thing->ceilingz)
|
||||||
{
|
{
|
||||||
if (thing->flags4 & MF4_ACTLIKEBRIDGE)
|
if (thing->flags4 & MF4_ACTLIKEBRIDGE)
|
||||||
{
|
{
|
||||||
|
@ -5384,14 +5373,14 @@ void PIT_CeilingLower(AActor *thing, FChangePosition *cpos)
|
||||||
return; // do not move bridge things
|
return; // do not move bridge things
|
||||||
}
|
}
|
||||||
intersectors.Clear();
|
intersectors.Clear();
|
||||||
fixed_t oldz = thing->z;
|
fixed_t oldz = thing->Z();
|
||||||
if (thing->ceilingz - thing->height >= thing->floorz)
|
if (thing->ceilingz - thing->height >= thing->floorz)
|
||||||
{
|
{
|
||||||
thing->z = thing->ceilingz - thing->height;
|
thing->SetZ(thing->ceilingz - thing->height);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
thing->z = thing->floorz;
|
thing->SetZ(thing->floorz);
|
||||||
}
|
}
|
||||||
switch (P_PushDown(thing, cpos))
|
switch (P_PushDown(thing, cpos))
|
||||||
{
|
{
|
||||||
|
@ -5399,7 +5388,7 @@ void PIT_CeilingLower(AActor *thing, FChangePosition *cpos)
|
||||||
// intentional fall-through
|
// intentional fall-through
|
||||||
case 1:
|
case 1:
|
||||||
if (onfloor)
|
if (onfloor)
|
||||||
thing->z = thing->floorz;
|
thing->SetZ(thing->floorz);
|
||||||
P_DoCrunch(thing, cpos);
|
P_DoCrunch(thing, cpos);
|
||||||
P_CheckFakeFloorTriggers(thing, oldz);
|
P_CheckFakeFloorTriggers(thing, oldz);
|
||||||
break;
|
break;
|
||||||
|
@ -5425,25 +5414,24 @@ void PIT_CeilingRaise(AActor *thing, FChangePosition *cpos)
|
||||||
// For DOOM compatibility, only move things that are inside the floor.
|
// For DOOM compatibility, only move things that are inside the floor.
|
||||||
// (or something else?) Things marked as hanging from the ceiling will
|
// (or something else?) Things marked as hanging from the ceiling will
|
||||||
// stay where they are.
|
// stay where they are.
|
||||||
if (thing->z < thing->floorz &&
|
if (thing->Z() < thing->floorz &&
|
||||||
thing->z + thing->height >= thing->ceilingz - cpos->moveamt &&
|
thing->Top() >= thing->ceilingz - cpos->moveamt &&
|
||||||
!(thing->flags & MF_NOLIFTDROP))
|
!(thing->flags & MF_NOLIFTDROP))
|
||||||
{
|
{
|
||||||
fixed_t oldz = thing->z;
|
fixed_t oldz = thing->Z();
|
||||||
thing->z = thing->floorz;
|
thing->SetZ(thing->floorz);
|
||||||
if (thing->z + thing->height > thing->ceilingz)
|
if (thing->Top() > thing->ceilingz)
|
||||||
{
|
{
|
||||||
thing->z = thing->ceilingz - thing->height;
|
thing->SetZ(thing->ceilingz - thing->height);
|
||||||
}
|
}
|
||||||
P_CheckFakeFloorTriggers(thing, oldz);
|
P_CheckFakeFloorTriggers(thing, oldz);
|
||||||
}
|
}
|
||||||
else if ((thing->flags2 & MF2_PASSMOBJ) && !isgood && thing->z + thing->height < thing->ceilingz)
|
else if ((thing->flags2 & MF2_PASSMOBJ) && !isgood && thing->Top() < thing->ceilingz)
|
||||||
{
|
{
|
||||||
AActor *onmobj;
|
AActor *onmobj;
|
||||||
if (!P_TestMobjZ(thing, true, &onmobj) && onmobj->z <= thing->z)
|
if (!P_TestMobjZ(thing, true, &onmobj) && onmobj->Z() <= thing->Z())
|
||||||
{
|
{
|
||||||
thing->z = MIN(thing->ceilingz - thing->height,
|
thing->SetZ( MIN(thing->ceilingz - thing->height, onmobj->Top()));
|
||||||
onmobj->z + onmobj->height);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5600,8 +5588,8 @@ bool P_ChangeSector(sector_t *sector, int crunch, int amt, int floorOrCeil, bool
|
||||||
{
|
{
|
||||||
n->visited = true; // mark thing as processed
|
n->visited = true; // mark thing as processed
|
||||||
|
|
||||||
n->m_thing->UpdateWaterLevel(n->m_thing->z, false);
|
n->m_thing->UpdateWaterLevel(n->m_thing->Z(), false);
|
||||||
P_CheckFakeFloorTriggers(n->m_thing, n->m_thing->z - amt);
|
P_CheckFakeFloorTriggers(n->m_thing, n->m_thing->Z() - amt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (n); // repeat from scratch until all things left are marked valid
|
} while (n); // repeat from scratch until all things left are marked valid
|
||||||
|
@ -5821,7 +5809,7 @@ void P_CreateSecNodeList(AActor *thing, fixed_t x, fixed_t y)
|
||||||
node = node->m_tnext;
|
node = node->m_tnext;
|
||||||
}
|
}
|
||||||
|
|
||||||
FBoundingBox box(thing->x, thing->y, thing->radius);
|
FBoundingBox box(thing->X(), thing->Y(), thing->radius);
|
||||||
FBlockLinesIterator it(box);
|
FBlockLinesIterator it(box);
|
||||||
line_t *ld;
|
line_t *ld;
|
||||||
|
|
||||||
|
@ -5924,13 +5912,13 @@ static void SpawnDeepSplash(AActor *t1, const FTraceResults &trace, AActor *puff
|
||||||
den = TMulScale16(plane->a, vx, plane->b, vy, plane->c, vz);
|
den = TMulScale16(plane->a, vx, plane->b, vy, plane->c, vz);
|
||||||
if (den != 0)
|
if (den != 0)
|
||||||
{
|
{
|
||||||
num = TMulScale16(plane->a, t1->x, plane->b, t1->y, plane->c, shootz) + plane->d;
|
num = TMulScale16(plane->a, t1->X(), plane->b, t1->Y(), plane->c, shootz) + plane->d;
|
||||||
hitdist = FixedDiv(-num, den);
|
hitdist = FixedDiv(-num, den);
|
||||||
|
|
||||||
if (hitdist >= 0 && hitdist <= trace.Distance)
|
if (hitdist >= 0 && hitdist <= trace.Distance)
|
||||||
{
|
{
|
||||||
fixed_t hitx = t1->x + FixedMul(vx, hitdist);
|
fixed_t hitx = t1->X() + FixedMul(vx, hitdist);
|
||||||
fixed_t hity = t1->y + FixedMul(vy, hitdist);
|
fixed_t hity = t1->Y() + FixedMul(vy, hitdist);
|
||||||
fixed_t hitz = shootz + FixedMul(vz, hitdist);
|
fixed_t hitz = shootz + FixedMul(vz, hitdist);
|
||||||
|
|
||||||
P_HitWater(puff != NULL ? puff : t1, P_PointInSector(hitx, hity), hitx, hity, hitz);
|
P_HitWater(puff != NULL ? puff : t1, P_PointInSector(hitx, hity), hitx, hity, hitz);
|
||||||
|
|
|
@ -326,7 +326,7 @@ void AActor::LinkToWorld (bool buggy)
|
||||||
|
|
||||||
if (!buggy || numgamenodes == 0)
|
if (!buggy || numgamenodes == 0)
|
||||||
{
|
{
|
||||||
sec = P_PointInSector (x, y);
|
sec = P_PointInSector (X(), Y());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -344,7 +344,7 @@ void AActor::LinkToWorld (sector_t *sec)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Sector = sec;
|
Sector = sec;
|
||||||
subsector = R_PointInSubsector(x, y); // this is from the rendering nodes, not the gameplay nodes!
|
subsector = R_PointInSubsector(X(), Y()); // this is from the rendering nodes, not the gameplay nodes!
|
||||||
|
|
||||||
if ( !(flags & MF_NOSECTOR) )
|
if ( !(flags & MF_NOSECTOR) )
|
||||||
{
|
{
|
||||||
|
@ -371,7 +371,7 @@ void AActor::LinkToWorld (sector_t *sec)
|
||||||
// When a node is deleted, its sector links (the links starting
|
// When a node is deleted, its sector links (the links starting
|
||||||
// at sector_t->touching_thinglist) are broken. When a node is
|
// at sector_t->touching_thinglist) are broken. When a node is
|
||||||
// added, new sector links are created.
|
// added, new sector links are created.
|
||||||
P_CreateSecNodeList (this, x, y);
|
P_CreateSecNodeList (this, X(), Y());
|
||||||
touching_sectorlist = sector_list; // Attach to thing
|
touching_sectorlist = sector_list; // Attach to thing
|
||||||
sector_list = NULL; // clear for next time
|
sector_list = NULL; // clear for next time
|
||||||
}
|
}
|
||||||
|
@ -380,10 +380,10 @@ void AActor::LinkToWorld (sector_t *sec)
|
||||||
// link into blockmap (inert things don't need to be in the blockmap)
|
// link into blockmap (inert things don't need to be in the blockmap)
|
||||||
if ( !(flags & MF_NOBLOCKMAP) )
|
if ( !(flags & MF_NOBLOCKMAP) )
|
||||||
{
|
{
|
||||||
int x1 = GetSafeBlockX(x - radius - bmaporgx);
|
int x1 = GetSafeBlockX(X() - radius - bmaporgx);
|
||||||
int x2 = GetSafeBlockX(x + radius - bmaporgx);
|
int x2 = GetSafeBlockX(X() + radius - bmaporgx);
|
||||||
int y1 = GetSafeBlockY(y - radius - bmaporgy);
|
int y1 = GetSafeBlockY(Y() - radius - bmaporgy);
|
||||||
int y2 = GetSafeBlockY(y + radius - bmaporgy);
|
int y2 = GetSafeBlockY(Y() + 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
|
||||||
|
@ -496,7 +496,7 @@ sector_t *AActor::LinkToWorldForMapThing ()
|
||||||
// that lies directly on a line should always be
|
// that lies directly on a line should always be
|
||||||
// considered as "in front" of the line. The orientation
|
// considered as "in front" of the line. The orientation
|
||||||
// of the line should be irrelevant.
|
// of the line should be irrelevant.
|
||||||
node = (node_t *)node->children[R_PointOnSideSlow (x, y, node)];
|
node = (node_t *)node->children[R_PointOnSideSlow (X(), Y(), node)];
|
||||||
}
|
}
|
||||||
while (!((size_t)node & 1));
|
while (!((size_t)node & 1));
|
||||||
|
|
||||||
|
@ -510,8 +510,8 @@ sector_t *AActor::LinkToWorldForMapThing ()
|
||||||
// one-sided line might go into a subsector behind the line, so
|
// one-sided line might go into a subsector behind the line, so
|
||||||
// the line would not be included as one of its subsector's segs.
|
// the line would not be included as one of its subsector's segs.
|
||||||
|
|
||||||
int blockx = GetSafeBlockX(x - bmaporgx);
|
int blockx = GetSafeBlockX(X() - bmaporgx);
|
||||||
int blocky = GetSafeBlockY(y - bmaporgy);
|
int blocky = GetSafeBlockY(Y() - bmaporgy);
|
||||||
|
|
||||||
if ((unsigned int)blockx < (unsigned int)bmapwidth &&
|
if ((unsigned int)blockx < (unsigned int)bmapwidth &&
|
||||||
(unsigned int)blocky < (unsigned int)bmapheight)
|
(unsigned int)blocky < (unsigned int)bmapheight)
|
||||||
|
@ -536,10 +536,10 @@ sector_t *AActor::LinkToWorldForMapThing ()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not inside the line's bounding box
|
// Not inside the line's bounding box
|
||||||
if (x + radius <= ldef->bbox[BOXLEFT]
|
if (X() + radius <= ldef->bbox[BOXLEFT]
|
||||||
|| x - radius >= ldef->bbox[BOXRIGHT]
|
|| X() - radius >= ldef->bbox[BOXRIGHT]
|
||||||
|| y + radius <= ldef->bbox[BOXBOTTOM]
|
|| Y() + radius <= ldef->bbox[BOXBOTTOM]
|
||||||
|| y - radius >= ldef->bbox[BOXTOP] )
|
|| Y() - radius >= ldef->bbox[BOXTOP] )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Get the exact distance to the line
|
// Get the exact distance to the line
|
||||||
|
@ -548,8 +548,8 @@ sector_t *AActor::LinkToWorldForMapThing ()
|
||||||
|
|
||||||
P_MakeDivline (ldef, &dll);
|
P_MakeDivline (ldef, &dll);
|
||||||
|
|
||||||
dlv.x = x;
|
dlv.x = X();
|
||||||
dlv.y = y;
|
dlv.y = Y();
|
||||||
dlv.dx = FixedDiv(dll.dy, linelen);
|
dlv.dx = FixedDiv(dll.dy, linelen);
|
||||||
dlv.dy = -FixedDiv(dll.dx, linelen);
|
dlv.dy = -FixedDiv(dll.dx, linelen);
|
||||||
|
|
||||||
|
@ -558,7 +558,7 @@ sector_t *AActor::LinkToWorldForMapThing ()
|
||||||
if (distance < radius)
|
if (distance < 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(), x>>FRACBITS, y>>FRACBITS,
|
this->GetClass()->TypeName.GetChars(), X()>>FRACBITS, Y()>>FRACBITS,
|
||||||
ldef->dx == 0? "vertical" : ldef->dy == 0? "horizontal" : "diagonal",
|
ldef->dx == 0? "vertical" : ldef->dy == 0? "horizontal" : "diagonal",
|
||||||
ldef-lines, FIXED2FLOAT(distance));
|
ldef-lines, FIXED2FLOAT(distance));
|
||||||
angle_t finean = R_PointToAngle2 (0, 0, ldef->dx, ldef->dy);
|
angle_t finean = R_PointToAngle2 (0, 0, ldef->dx, ldef->dy);
|
||||||
|
@ -574,9 +574,8 @@ sector_t *AActor::LinkToWorldForMapThing ()
|
||||||
|
|
||||||
// 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 = radius - distance;
|
||||||
x += FixedMul(distance, finecosine[finean]);
|
SetXY(X() + FixedMul(distance, finecosine[finean]), Y() + FixedMul(distance, finesine[finean]));
|
||||||
y += FixedMul(distance, finesine[finean]);
|
return P_PointInSector (X(), Y());
|
||||||
return P_PointInSector (x, y);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -588,9 +587,8 @@ sector_t *AActor::LinkToWorldForMapThing ()
|
||||||
void AActor::SetOrigin (fixed_t ix, fixed_t iy, fixed_t iz, bool moving)
|
void AActor::SetOrigin (fixed_t ix, fixed_t iy, fixed_t iz, bool moving)
|
||||||
{
|
{
|
||||||
UnlinkFromWorld ();
|
UnlinkFromWorld ();
|
||||||
x = ix;
|
SetXYZ(ix, iy, iz);
|
||||||
y = iy;
|
if (moving) SetMovement(ix - X(), iy - Y(), iz - Z());
|
||||||
z = iz;
|
|
||||||
LinkToWorld ();
|
LinkToWorld ();
|
||||||
floorz = Sector->floorplane.ZatPoint (ix, iy);
|
floorz = Sector->floorplane.ZatPoint (ix, iy);
|
||||||
ceilingz = Sector->ceilingplane.ZatPoint (ix, iy);
|
ceilingz = Sector->ceilingplane.ZatPoint (ix, iy);
|
||||||
|
@ -878,8 +876,8 @@ AActor *FBlockThingsIterator::Next(bool centeronly)
|
||||||
fixed_t blocktop = blockbottom + MAPBLOCKSIZE;
|
fixed_t blocktop = blockbottom + MAPBLOCKSIZE;
|
||||||
|
|
||||||
// only return actors with the center in this block
|
// only return actors with the center in this block
|
||||||
if (me->x >= blockleft && me->x < blockright &&
|
if (me->X() >= blockleft && me->X() < blockright &&
|
||||||
me->y >= blockbottom && me->y < blocktop)
|
me->Y() >= blockbottom && me->Y() < blocktop)
|
||||||
{
|
{
|
||||||
return me;
|
return me;
|
||||||
}
|
}
|
||||||
|
@ -1028,29 +1026,29 @@ void FPathTraverse::AddThingIntercepts (int bx, int by, FBlockThingsIterator &it
|
||||||
switch (i)
|
switch (i)
|
||||||
{
|
{
|
||||||
case 0: // Top edge
|
case 0: // Top edge
|
||||||
line.x = thing->x + thing->radius;
|
line.x = thing->X() + thing->radius;
|
||||||
line.y = thing->y + thing->radius;
|
line.y = thing->Y() + thing->radius;
|
||||||
line.dx = -thing->radius * 2;
|
line.dx = -thing->radius * 2;
|
||||||
line.dy = 0;
|
line.dy = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: // Right edge
|
case 1: // Right edge
|
||||||
line.x = thing->x + thing->radius;
|
line.x = thing->X() + thing->radius;
|
||||||
line.y = thing->y - thing->radius;
|
line.y = thing->Y() - thing->radius;
|
||||||
line.dx = 0;
|
line.dx = 0;
|
||||||
line.dy = thing->radius * 2;
|
line.dy = thing->radius * 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: // Bottom edge
|
case 2: // Bottom edge
|
||||||
line.x = thing->x - thing->radius;
|
line.x = thing->X() - thing->radius;
|
||||||
line.y = thing->y - thing->radius;
|
line.y = thing->Y() - thing->radius;
|
||||||
line.dx = thing->radius * 2;
|
line.dx = thing->radius * 2;
|
||||||
line.dy = 0;
|
line.dy = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: // Left edge
|
case 3: // Left edge
|
||||||
line.x = thing->x - thing->radius;
|
line.x = thing->X() - thing->radius;
|
||||||
line.y = thing->y + thing->radius;
|
line.y = thing->Y() + thing->radius;
|
||||||
line.dx = 0;
|
line.dx = 0;
|
||||||
line.dy = thing->radius * -2;
|
line.dy = thing->radius * -2;
|
||||||
break;
|
break;
|
||||||
|
@ -1107,19 +1105,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->x - thing->radius;
|
x1 = thing->X() - thing->radius;
|
||||||
y1 = thing->y + thing->radius;
|
y1 = thing->Y() + thing->radius;
|
||||||
|
|
||||||
x2 = thing->x + thing->radius;
|
x2 = thing->X() + thing->radius;
|
||||||
y2 = thing->y - thing->radius;
|
y2 = thing->Y() - thing->radius;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
x1 = thing->x - thing->radius;
|
x1 = thing->X() - thing->radius;
|
||||||
y1 = thing->y - thing->radius;
|
y1 = thing->Y() - thing->radius;
|
||||||
|
|
||||||
x2 = thing->x + thing->radius;
|
x2 = thing->X() + thing->radius;
|
||||||
y2 = thing->y + thing->radius;
|
y2 = thing->Y() + thing->radius;
|
||||||
}
|
}
|
||||||
|
|
||||||
s1 = P_PointOnDivlineSide (x1, y1, &trace);
|
s1 = P_PointOnDivlineSide (x1, y1, &trace);
|
||||||
|
@ -1422,8 +1420,8 @@ AActor *P_BlockmapSearch (AActor *mo, int distance, AActor *(*check)(AActor*, in
|
||||||
int count;
|
int count;
|
||||||
AActor *target;
|
AActor *target;
|
||||||
|
|
||||||
startX = GetSafeBlockX(mo->x-bmaporgx);
|
startX = GetSafeBlockX(mo->X()-bmaporgx);
|
||||||
startY = GetSafeBlockY(mo->y-bmaporgy);
|
startY = GetSafeBlockY(mo->Y()-bmaporgy);
|
||||||
validcount++;
|
validcount++;
|
||||||
|
|
||||||
if (startX >= 0 && startX < bmapwidth && startY >= 0 && startY < bmapheight)
|
if (startX >= 0 && startX < bmapwidth && startY >= 0 && startY < bmapheight)
|
||||||
|
|
|
@ -230,9 +230,9 @@ void AActor::Serialize (FArchive &arc)
|
||||||
sprite = arc.ReadSprite ();
|
sprite = arc.ReadSprite ();
|
||||||
}
|
}
|
||||||
|
|
||||||
arc << x
|
arc << __pos.x
|
||||||
<< y
|
<< __pos.y
|
||||||
<< z
|
<< __pos.z
|
||||||
<< angle
|
<< angle
|
||||||
<< frame
|
<< frame
|
||||||
<< scaleX
|
<< scaleX
|
||||||
|
|
|
@ -68,11 +68,11 @@ public:
|
||||||
|
|
||||||
SightCheck(const AActor * t1, const AActor * t2, int flags)
|
SightCheck(const AActor * t1, const AActor * t2, int flags)
|
||||||
{
|
{
|
||||||
lastztop = lastzbottom = sightzstart = t1->z + t1->height - (t1->height>>2);
|
lastztop = lastzbottom = sightzstart = t1->Z() + t1->height - (t1->height>>2);
|
||||||
lastsector = t1->Sector;
|
lastsector = t1->Sector;
|
||||||
sightthing=t1;
|
sightthing=t1;
|
||||||
seeingthing=t2;
|
seeingthing=t2;
|
||||||
bottomslope = t2->z - sightzstart;
|
bottomslope = t2->Z() - sightzstart;
|
||||||
topslope = bottomslope + t2->height;
|
topslope = bottomslope + t2->height;
|
||||||
Flags = flags;
|
Flags = flags;
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ bool SightCheck::PTR_SightTraverse (intercept_t *in)
|
||||||
{
|
{
|
||||||
int frontflag;
|
int frontflag;
|
||||||
|
|
||||||
frontflag = P_PointOnLineSidePrecise(sightthing->x, sightthing->y, li);
|
frontflag = P_PointOnLineSidePrecise(sightthing->X(), sightthing->Y(), li);
|
||||||
|
|
||||||
//Check 3D FLOORS!
|
//Check 3D FLOORS!
|
||||||
for(int i=1;i<=2;i++)
|
for(int i=1;i<=2;i++)
|
||||||
|
@ -413,8 +413,8 @@ bool SightCheck::P_SightTraverseIntercepts ()
|
||||||
if((rover->flags & FF_SOLID) == myseethrough || !(rover->flags & FF_EXISTS)) continue;
|
if((rover->flags & FF_SOLID) == myseethrough || !(rover->flags & FF_EXISTS)) continue;
|
||||||
if ((Flags & SF_IGNOREWATERBOUNDARY) && (rover->flags & FF_SOLID) == 0) continue;
|
if ((Flags & SF_IGNOREWATERBOUNDARY) && (rover->flags & FF_SOLID) == 0) continue;
|
||||||
|
|
||||||
fixed_t ff_bottom=rover->bottom.plane->ZatPoint(seeingthing->x, seeingthing->y);
|
fixed_t ff_bottom=rover->bottom.plane->ZatPoint(seeingthing);
|
||||||
fixed_t ff_top=rover->top.plane->ZatPoint(seeingthing->x, seeingthing->y);
|
fixed_t ff_top=rover->top.plane->ZatPoint(seeingthing);
|
||||||
|
|
||||||
if (lastztop<=ff_bottom && topz>ff_bottom && lastzbottom<=ff_bottom && bottomz>ff_bottom) return false;
|
if (lastztop<=ff_bottom && topz>ff_bottom && lastzbottom<=ff_bottom && bottomz>ff_bottom) return false;
|
||||||
if (lastzbottom>=ff_top && bottomz<ff_top && lastztop>=ff_top && topz<ff_top) return false;
|
if (lastzbottom>=ff_top && bottomz<ff_top && lastztop>=ff_top && topz<ff_top) return false;
|
||||||
|
@ -458,8 +458,8 @@ bool SightCheck::P_SightPathTraverse (fixed_t x1, fixed_t y1, fixed_t x2, fixed_
|
||||||
|
|
||||||
if(!(rover->flags & FF_EXISTS)) continue;
|
if(!(rover->flags & FF_EXISTS)) continue;
|
||||||
|
|
||||||
fixed_t ff_bottom=rover->bottom.plane->ZatPoint(sightthing->x, sightthing->y);
|
fixed_t ff_bottom=rover->bottom.plane->ZatPoint(sightthing);
|
||||||
fixed_t ff_top=rover->top.plane->ZatPoint(sightthing->x, sightthing->y);
|
fixed_t ff_top=rover->top.plane->ZatPoint(sightthing);
|
||||||
|
|
||||||
if (sightzstart < ff_top && sightzstart >= ff_bottom)
|
if (sightzstart < ff_top && sightzstart >= ff_bottom)
|
||||||
{
|
{
|
||||||
|
@ -691,16 +691,16 @@ sightcounts[0]++;
|
||||||
if (!(flags & SF_IGNOREWATERBOUNDARY))
|
if (!(flags & SF_IGNOREWATERBOUNDARY))
|
||||||
{
|
{
|
||||||
if ((s1->GetHeightSec() &&
|
if ((s1->GetHeightSec() &&
|
||||||
((t1->z + t1->height <= s1->heightsec->floorplane.ZatPoint (t1->x, t1->y) &&
|
((t1->Z() + t1->height <= s1->heightsec->floorplane.ZatPoint(t1) &&
|
||||||
t2->z >= s1->heightsec->floorplane.ZatPoint (t2->x, t2->y)) ||
|
t2->Z() >= s1->heightsec->floorplane.ZatPoint(t2)) ||
|
||||||
(t1->z >= s1->heightsec->ceilingplane.ZatPoint (t1->x, t1->y) &&
|
(t1->Z() >= s1->heightsec->ceilingplane.ZatPoint(t1) &&
|
||||||
t2->z + t1->height <= s1->heightsec->ceilingplane.ZatPoint (t2->x, t2->y))))
|
t2->Z() + t1->height <= s1->heightsec->ceilingplane.ZatPoint(t2))))
|
||||||
||
|
||
|
||||||
(s2->GetHeightSec() &&
|
(s2->GetHeightSec() &&
|
||||||
((t2->z + t2->height <= s2->heightsec->floorplane.ZatPoint (t2->x, t2->y) &&
|
((t2->Z() + t2->height <= s2->heightsec->floorplane.ZatPoint(t2) &&
|
||||||
t1->z >= s2->heightsec->floorplane.ZatPoint (t1->x, t1->y)) ||
|
t1->Z() >= s2->heightsec->floorplane.ZatPoint(t1)) ||
|
||||||
(t2->z >= s2->heightsec->ceilingplane.ZatPoint (t2->x, t2->y) &&
|
(t2->Z() >= s2->heightsec->ceilingplane.ZatPoint(t2) &&
|
||||||
t1->z + t2->height <= s2->heightsec->ceilingplane.ZatPoint (t1->x, t1->y)))))
|
t1->Z() + t2->height <= s2->heightsec->ceilingplane.ZatPoint(t1)))))
|
||||||
{
|
{
|
||||||
res = false;
|
res = false;
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -713,7 +713,7 @@ sightcounts[0]++;
|
||||||
validcount++;
|
validcount++;
|
||||||
{
|
{
|
||||||
SightCheck s(t1, t2, flags);
|
SightCheck s(t1, t2, flags);
|
||||||
res = s.P_SightPathTraverse (t1->x, t1->y, t2->x, t2->y);
|
res = s.P_SightPathTraverse (t1->X(), t1->Y(), t2->X(), t2->Y());
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
|
|
@ -430,7 +430,7 @@ void P_PlayerInSpecialSector (player_t *player, sector_t * sector)
|
||||||
{
|
{
|
||||||
// Falling, not all the way down yet?
|
// Falling, not all the way down yet?
|
||||||
sector = player->mo->Sector;
|
sector = player->mo->Sector;
|
||||||
if (player->mo->z != sector->floorplane.ZatPoint(player->mo)
|
if (player->mo->Z() != sector->floorplane.ZatPoint(player->mo)
|
||||||
&& !player->mo->waterlevel)
|
&& !player->mo->waterlevel)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
@ -507,7 +507,7 @@ static void DoSectorDamage(AActor *actor, sector_t *sec, int amount, FName type,
|
||||||
if (!(flags & DAMAGE_PLAYERS) && actor->player != NULL)
|
if (!(flags & DAMAGE_PLAYERS) && actor->player != NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!(flags & DAMAGE_IN_AIR) && actor->z != sec->floorplane.ZatPoint(actor) && !actor->waterlevel)
|
if (!(flags & DAMAGE_IN_AIR) && actor->Z() != sec->floorplane.ZatPoint(actor) && !actor->waterlevel)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (protectClass != NULL)
|
if (protectClass != NULL)
|
||||||
|
@ -553,12 +553,12 @@ void P_SectorDamage(int tag, int amount, FName type, PClassActor *protectClass,
|
||||||
z1 = z2;
|
z1 = z2;
|
||||||
z2 = zz;
|
z2 = zz;
|
||||||
}
|
}
|
||||||
if (actor->z + actor->height > z1)
|
if (actor->Z() + actor->height > z1)
|
||||||
{
|
{
|
||||||
// If DAMAGE_IN_AIR is used, anything not beneath the 3D floor will be
|
// If DAMAGE_IN_AIR is used, anything not beneath the 3D floor will be
|
||||||
// damaged (so, anything touching it or above it). Other 3D floors between
|
// damaged (so, anything touching it or above it). Other 3D floors between
|
||||||
// the actor and this one will not stop this effect.
|
// the actor and this one will not stop this effect.
|
||||||
if ((flags & DAMAGE_IN_AIR) || actor->z <= z2)
|
if ((flags & DAMAGE_IN_AIR) || actor->Z() <= z2)
|
||||||
{
|
{
|
||||||
// Here we pass the DAMAGE_IN_AIR flag to disable the floor check, since it
|
// Here we pass the DAMAGE_IN_AIR flag to disable the floor check, since it
|
||||||
// only works with the real sector's floor. We did the appropriate height checks
|
// only works with the real sector's floor. We did the appropriate height checks
|
||||||
|
@ -1058,7 +1058,7 @@ void P_SpawnSkybox(ASkyViewpoint *origin)
|
||||||
if (Sector == NULL)
|
if (Sector == NULL)
|
||||||
{
|
{
|
||||||
Printf("Sector not initialized for SkyCamCompat\n");
|
Printf("Sector not initialized for SkyCamCompat\n");
|
||||||
origin->Sector = Sector = P_PointInSector(origin->x, origin->y);
|
origin->Sector = Sector = P_PointInSector(origin->X(), origin->Y());
|
||||||
}
|
}
|
||||||
if (Sector)
|
if (Sector)
|
||||||
{
|
{
|
||||||
|
@ -2152,8 +2152,8 @@ DPusher::DPusher (DPusher::EPusher type, line_t *l, int magnitude, int angle,
|
||||||
if (source) // point source exist?
|
if (source) // point source exist?
|
||||||
{
|
{
|
||||||
m_Radius = (m_Magnitude) << (FRACBITS+1); // where force goes to zero
|
m_Radius = (m_Magnitude) << (FRACBITS+1); // where force goes to zero
|
||||||
m_X = m_Source->x;
|
m_X = m_Source->X();
|
||||||
m_Y = m_Source->y;
|
m_Y = m_Source->Y();
|
||||||
}
|
}
|
||||||
m_Affectee = affectee;
|
m_Affectee = affectee;
|
||||||
}
|
}
|
||||||
|
@ -2268,7 +2268,7 @@ void DPusher::Tick ()
|
||||||
{
|
{
|
||||||
if (hsec == NULL)
|
if (hsec == NULL)
|
||||||
{ // NOT special water sector
|
{ // NOT special water sector
|
||||||
if (thing->z > thing->floorz) // above ground
|
if (thing->Z() > thing->floorz) // above ground
|
||||||
{
|
{
|
||||||
xspeed = m_Xmag; // full force
|
xspeed = m_Xmag; // full force
|
||||||
yspeed = m_Ymag;
|
yspeed = m_Ymag;
|
||||||
|
@ -2282,7 +2282,7 @@ void DPusher::Tick ()
|
||||||
else // special water sector
|
else // special water sector
|
||||||
{
|
{
|
||||||
ht = hsec->floorplane.ZatPoint(thing);
|
ht = hsec->floorplane.ZatPoint(thing);
|
||||||
if (thing->z > ht) // above ground
|
if (thing->Z() > ht) // above ground
|
||||||
{
|
{
|
||||||
xspeed = m_Xmag; // full force
|
xspeed = m_Xmag; // full force
|
||||||
yspeed = m_Ymag;
|
yspeed = m_Ymag;
|
||||||
|
@ -2310,7 +2310,7 @@ void DPusher::Tick ()
|
||||||
{ // special water sector
|
{ // special water sector
|
||||||
floor = &hsec->floorplane;
|
floor = &hsec->floorplane;
|
||||||
}
|
}
|
||||||
if (thing->z > floor->ZatPoint(thing))
|
if (thing->Z() > floor->ZatPoint(thing))
|
||||||
{ // above ground
|
{ // above ground
|
||||||
xspeed = yspeed = 0; // no force
|
xspeed = yspeed = 0; // no force
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,8 +138,9 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno)
|
||||||
|
|
||||||
P_MakeDivline (line, &dll);
|
P_MakeDivline (line, &dll);
|
||||||
|
|
||||||
dlu.x = user->x;
|
fixedvec3 pos = user->PosRelative(line);
|
||||||
dlu.y = user->y;
|
dlu.x = pos.x;
|
||||||
|
dlu.y = pos.y;
|
||||||
dlu.dx = finecosine[user->angle >> ANGLETOFINESHIFT];
|
dlu.dx = finecosine[user->angle >> ANGLETOFINESHIFT];
|
||||||
dlu.dy = finesine[user->angle >> ANGLETOFINESHIFT];
|
dlu.dy = finesine[user->angle >> ANGLETOFINESHIFT];
|
||||||
inter = P_InterceptVector(&dll, &dlu);
|
inter = P_InterceptVector(&dll, &dlu);
|
||||||
|
@ -167,11 +168,11 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno)
|
||||||
onesided:
|
onesided:
|
||||||
fixed_t sectorc = front->ceilingplane.ZatPoint(checkx, checky);
|
fixed_t sectorc = front->ceilingplane.ZatPoint(checkx, checky);
|
||||||
fixed_t sectorf = front->floorplane.ZatPoint(checkx, checky);
|
fixed_t sectorf = front->floorplane.ZatPoint(checkx, checky);
|
||||||
return (user->z + user->height >= sectorf && user->z <= sectorc);
|
return (user->Top() >= sectorf && user->Z() <= sectorc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now get the information from the line.
|
// Now get the information from the line.
|
||||||
P_LineOpening(open, NULL, line, checkx, checky, user->x, user->y);
|
P_LineOpening(open, NULL, line, checkx, checky, pos.x, pos.y);
|
||||||
if (open.range <= 0)
|
if (open.range <= 0)
|
||||||
goto onesided;
|
goto onesided;
|
||||||
|
|
||||||
|
@ -187,8 +188,8 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno)
|
||||||
if (!(rover->flags & FF_EXISTS)) continue;
|
if (!(rover->flags & FF_EXISTS)) continue;
|
||||||
if (!(rover->flags & FF_UPPERTEXTURE)) continue;
|
if (!(rover->flags & FF_UPPERTEXTURE)) continue;
|
||||||
|
|
||||||
if (user->z > rover->top.plane->ZatPoint(checkx, checky) ||
|
if (user->Z() > rover->top.plane->ZatPoint(checkx, checky) ||
|
||||||
user->z + user->height < rover->bottom.plane->ZatPoint(checkx, checky))
|
user->Top() < rover->bottom.plane->ZatPoint(checkx, checky))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// This 3D floor depicts a switch texture in front of the player's eyes
|
// This 3D floor depicts a switch texture in front of the player's eyes
|
||||||
|
@ -196,7 +197,7 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (user->z + user->height > open.top);
|
return (user->Top() > open.top);
|
||||||
}
|
}
|
||||||
else if ((TexMan.FindSwitch(side->GetTexture(side_t::bottom))) != NULL)
|
else if ((TexMan.FindSwitch(side->GetTexture(side_t::bottom))) != NULL)
|
||||||
{
|
{
|
||||||
|
@ -209,8 +210,8 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno)
|
||||||
if (!(rover->flags & FF_EXISTS)) continue;
|
if (!(rover->flags & FF_EXISTS)) continue;
|
||||||
if (!(rover->flags & FF_LOWERTEXTURE)) continue;
|
if (!(rover->flags & FF_LOWERTEXTURE)) continue;
|
||||||
|
|
||||||
if (user->z > rover->top.plane->ZatPoint(checkx, checky) ||
|
if (user->Z() > rover->top.plane->ZatPoint(checkx, checky) ||
|
||||||
user->z + user->height < rover->bottom.plane->ZatPoint(checkx, checky))
|
user->Top() < rover->bottom.plane->ZatPoint(checkx, checky))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// This 3D floor depicts a switch texture in front of the player's eyes
|
// This 3D floor depicts a switch texture in front of the player's eyes
|
||||||
|
@ -218,7 +219,7 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (user->z < open.bottom);
|
return (user->Z() < open.bottom);
|
||||||
}
|
}
|
||||||
else if ((flags & ML_3DMIDTEX) || (TexMan.FindSwitch(side->GetTexture(side_t::mid))) != NULL)
|
else if ((flags & ML_3DMIDTEX) || (TexMan.FindSwitch(side->GetTexture(side_t::mid))) != NULL)
|
||||||
{
|
{
|
||||||
|
@ -226,12 +227,12 @@ bool P_CheckSwitchRange(AActor *user, line_t *line, int sideno)
|
||||||
// to keep compatibility with Eternity's implementation.
|
// to keep compatibility with Eternity's implementation.
|
||||||
if (!P_GetMidTexturePosition(line, sideno, &checktop, &checkbot))
|
if (!P_GetMidTexturePosition(line, sideno, &checktop, &checkbot))
|
||||||
return false;
|
return false;
|
||||||
return user->z < checktop && user->z + user->height > checkbot;
|
return user->Z() < checktop && user->Top() > checkbot;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// no switch found. Check whether the player can touch either top or bottom texture
|
// no switch found. Check whether the player can touch either top or bottom texture
|
||||||
return (user->z + user->height > open.top) || (user->z < open.bottom);
|
return (user->Top() > open.top) || (user->Z() < open.bottom);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -100,9 +100,7 @@ bool P_Teleport (AActor *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle,
|
||||||
{
|
{
|
||||||
bool predicting = (thing->player && (thing->player->cheats & CF_PREDICTING));
|
bool predicting = (thing->player && (thing->player->cheats & CF_PREDICTING));
|
||||||
|
|
||||||
fixed_t oldx;
|
fixedvec3 old;
|
||||||
fixed_t oldy;
|
|
||||||
fixed_t oldz;
|
|
||||||
fixed_t aboveFloor;
|
fixed_t aboveFloor;
|
||||||
player_t *player;
|
player_t *player;
|
||||||
angle_t an;
|
angle_t an;
|
||||||
|
@ -111,10 +109,8 @@ bool P_Teleport (AActor *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle,
|
||||||
fixed_t floorheight, ceilingheight;
|
fixed_t floorheight, ceilingheight;
|
||||||
fixed_t missilespeed;
|
fixed_t missilespeed;
|
||||||
|
|
||||||
oldx = thing->x;
|
old = thing->Pos();
|
||||||
oldy = thing->y;
|
aboveFloor = thing->Z() - thing->floorz;
|
||||||
oldz = thing->z;
|
|
||||||
aboveFloor = thing->z - thing->floorz;
|
|
||||||
destsect = P_PointInSector (x, y);
|
destsect = P_PointInSector (x, y);
|
||||||
// killough 5/12/98: exclude voodoo dolls:
|
// killough 5/12/98: exclude voodoo dolls:
|
||||||
player = thing->player;
|
player = thing->player;
|
||||||
|
@ -170,7 +166,7 @@ bool P_Teleport (AActor *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle,
|
||||||
}
|
}
|
||||||
if (player)
|
if (player)
|
||||||
{
|
{
|
||||||
player->viewz = thing->z + player->viewheight;
|
player->viewz = thing->Z() + player->viewheight;
|
||||||
if (resetpitch)
|
if (resetpitch)
|
||||||
{
|
{
|
||||||
player->mo->pitch = 0;
|
player->mo->pitch = 0;
|
||||||
|
@ -187,7 +183,7 @@ bool P_Teleport (AActor *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle,
|
||||||
// Spawn teleport fog at source and destination
|
// Spawn teleport fog at source and destination
|
||||||
if (sourceFog && !predicting)
|
if (sourceFog && !predicting)
|
||||||
{
|
{
|
||||||
P_SpawnTeleportFog(thing, oldx, oldy, oldz, true, true); //Passes the actor through which then pulls the TeleFog metadata types based on properties.
|
P_SpawnTeleportFog(thing, old, true, true); //Passes the actor through which then pulls the TeleFog metadata types based on properties.
|
||||||
}
|
}
|
||||||
if (useFog)
|
if (useFog)
|
||||||
{
|
{
|
||||||
|
@ -195,7 +191,7 @@ bool P_Teleport (AActor *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle,
|
||||||
{
|
{
|
||||||
fixed_t fogDelta = thing->flags & MF_MISSILE ? 0 : TELEFOGHEIGHT;
|
fixed_t fogDelta = thing->flags & MF_MISSILE ? 0 : TELEFOGHEIGHT;
|
||||||
an = angle >> ANGLETOFINESHIFT;
|
an = angle >> ANGLETOFINESHIFT;
|
||||||
P_SpawnTeleportFog(thing, x + 20 * finecosine[an], y + 20 * finesine[an], thing->z + fogDelta, false, true);
|
P_SpawnTeleportFog(thing, x + 20 * finecosine[an], y + 20 * finesine[an], thing->Z() + fogDelta, false, true);
|
||||||
|
|
||||||
}
|
}
|
||||||
if (thing->player)
|
if (thing->player)
|
||||||
|
@ -371,11 +367,11 @@ bool EV_Teleport (int tid, int tag, line_t *line, int side, AActor *thing, bool
|
||||||
velx = thing->velx;
|
velx = thing->velx;
|
||||||
vely = thing->vely;
|
vely = thing->vely;
|
||||||
|
|
||||||
z = searcher->z;
|
z = searcher->Z();
|
||||||
}
|
}
|
||||||
else if (searcher->IsKindOf (PClass::FindClass(NAME_TeleportDest2)))
|
else if (searcher->IsKindOf (PClass::FindClass(NAME_TeleportDest2)))
|
||||||
{
|
{
|
||||||
z = searcher->z;
|
z = searcher->Z();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -385,7 +381,7 @@ bool EV_Teleport (int tid, int tag, line_t *line, int side, AActor *thing, bool
|
||||||
{
|
{
|
||||||
badangle = 1 << ANGLETOFINESHIFT;
|
badangle = 1 << ANGLETOFINESHIFT;
|
||||||
}
|
}
|
||||||
if (P_Teleport (thing, searcher->x, searcher->y, z, searcher->angle + badangle, fog, sourceFog, keepOrientation, haltVelocity, keepHeight))
|
if (P_Teleport (thing, searcher->X(), searcher->Y(), z, searcher->angle + badangle, fog, sourceFog, keepOrientation, haltVelocity, keepHeight))
|
||||||
{
|
{
|
||||||
// [RH] Lee Killough's changes for silent teleporters from BOOM
|
// [RH] Lee Killough's changes for silent teleporters from BOOM
|
||||||
if (!fog && line && keepOrientation)
|
if (!fog && line && keepOrientation)
|
||||||
|
@ -446,8 +442,8 @@ bool EV_SilentLineTeleport (line_t *line, int side, AActor *thing, int id, INTBO
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SQWORD num = (SQWORD)(thing->x-line->v1->x)*line->dx +
|
SQWORD num = (SQWORD)(thing->X()-line->v1->x)*line->dx +
|
||||||
(SQWORD)(thing->y-line->v1->y)*line->dy;
|
(SQWORD)(thing->Y()-line->v1->y)*line->dy;
|
||||||
if (num <= 0)
|
if (num <= 0)
|
||||||
{
|
{
|
||||||
pos = 0;
|
pos = 0;
|
||||||
|
@ -460,8 +456,8 @@ bool EV_SilentLineTeleport (line_t *line, int side, AActor *thing, int id, INTBO
|
||||||
{
|
{
|
||||||
pos = (SDWORD)(num / (den>>30));
|
pos = (SDWORD)(num / (den>>30));
|
||||||
}
|
}
|
||||||
nposx = thing->x - line->v1->x - MulScale30 (line->dx, pos);
|
nposx = thing->X() - line->v1->x - MulScale30 (line->dx, pos);
|
||||||
nposy = thing->y - line->v1->y - MulScale30 (line->dy, pos);
|
nposy = thing->Y() - line->v1->y - MulScale30 (line->dy, pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -501,7 +497,7 @@ bool EV_SilentLineTeleport (line_t *line, int side, AActor *thing, int id, INTBO
|
||||||
bool stepdown = l->frontsector->floorplane.ZatPoint(x, y) < l->backsector->floorplane.ZatPoint(x, y);
|
bool stepdown = l->frontsector->floorplane.ZatPoint(x, y) < l->backsector->floorplane.ZatPoint(x, y);
|
||||||
|
|
||||||
// Height of thing above ground
|
// Height of thing above ground
|
||||||
fixed_t z = thing->z - thing->floorz;
|
fixed_t z = thing->Z() - thing->floorz;
|
||||||
|
|
||||||
// Side to exit the linedef on positionally.
|
// Side to exit the linedef on positionally.
|
||||||
//
|
//
|
||||||
|
@ -614,16 +610,16 @@ bool EV_TeleportOther (int other_tid, int dest_tid, bool fog)
|
||||||
static bool DoGroupForOne (AActor *victim, AActor *source, AActor *dest, bool floorz, bool fog)
|
static bool DoGroupForOne (AActor *victim, AActor *source, AActor *dest, bool floorz, bool fog)
|
||||||
{
|
{
|
||||||
int an = (dest->angle - source->angle) >> ANGLETOFINESHIFT;
|
int an = (dest->angle - source->angle) >> ANGLETOFINESHIFT;
|
||||||
fixed_t offX = victim->x - source->x;
|
fixed_t offX = victim->X() - source->X();
|
||||||
fixed_t offY = victim->y - source->y;
|
fixed_t offY = victim->Y() - source->Y();
|
||||||
angle_t offAngle = victim->angle - source->angle;
|
angle_t offAngle = victim->angle - source->angle;
|
||||||
fixed_t newX = DMulScale16 (offX, finecosine[an], -offY, finesine[an]);
|
fixed_t newX = DMulScale16 (offX, finecosine[an], -offY, finesine[an]);
|
||||||
fixed_t newY = DMulScale16 (offX, finesine[an], offY, finecosine[an]);
|
fixed_t newY = DMulScale16 (offX, finesine[an], offY, finecosine[an]);
|
||||||
|
|
||||||
bool res =
|
bool res =
|
||||||
P_Teleport (victim, dest->x + newX,
|
P_Teleport (victim, dest->X() + newX,
|
||||||
dest->y + newY,
|
dest->Y() + newY,
|
||||||
floorz ? ONFLOORZ : dest->z + victim->z - source->z,
|
floorz ? ONFLOORZ : dest->Z() + victim->Z() - source->Z(),
|
||||||
0, fog, fog, !fog);
|
0, fog, fog, !fog);
|
||||||
// P_Teleport only changes angle if fog is true
|
// P_Teleport only changes angle if fog is true
|
||||||
victim->angle = dest->angle + offAngle;
|
victim->angle = dest->angle + offAngle;
|
||||||
|
@ -691,8 +687,8 @@ bool EV_TeleportGroup (int group_tid, AActor *victim, int source_tid, int dest_t
|
||||||
if (moveSource && didSomething)
|
if (moveSource && didSomething)
|
||||||
{
|
{
|
||||||
didSomething |=
|
didSomething |=
|
||||||
P_Teleport (sourceOrigin, destOrigin->x, destOrigin->y,
|
P_Teleport (sourceOrigin, destOrigin->X(), destOrigin->Y(),
|
||||||
floorz ? ONFLOORZ : destOrigin->z, 0, false, false, true);
|
floorz ? ONFLOORZ : destOrigin->Z(), 0, false, false, true);
|
||||||
sourceOrigin->angle = destOrigin->angle;
|
sourceOrigin->angle = destOrigin->angle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -691,9 +691,7 @@ int P_Thing_Warp(AActor *caller, AActor *reference, fixed_t xofs, fixed_t yofs,
|
||||||
caller = temp;
|
caller = temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
fixed_t oldx = caller->X();
|
fixedvec3 old = caller->Pos();
|
||||||
fixed_t oldy = caller->Y();
|
|
||||||
fixed_t oldz = caller->z;
|
|
||||||
zofs += FixedMul(reference->height, heightoffset);
|
zofs += FixedMul(reference->height, heightoffset);
|
||||||
|
|
||||||
|
|
||||||
|
@ -725,18 +723,18 @@ int P_Thing_Warp(AActor *caller, AActor *reference, fixed_t xofs, fixed_t yofs,
|
||||||
// now the caller's floorz should be appropriate for the assigned xy-position
|
// now the caller's floorz should be appropriate for the assigned xy-position
|
||||||
// assigning position again with.
|
// assigning position again with.
|
||||||
// extra unlink, link and environment calculation
|
// extra unlink, link and environment calculation
|
||||||
caller->SetOrigin(
|
caller->SetOrigin(reference->Vec3Offset(
|
||||||
reference->x + xofs + FixedMul(rad, finecosine[fineangle]),
|
xofs + FixedMul(rad, finecosine[fineangle]),
|
||||||
reference->y + yofs + FixedMul(rad, finesine[fineangle]),
|
yofs + FixedMul(rad, finesine[fineangle]),
|
||||||
reference->z);
|
0), true);
|
||||||
caller->z = caller->floorz + zofs;
|
caller->SetZ(caller->floorz + zofs);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
caller->SetOrigin(
|
caller->SetOrigin(reference->Vec3Offset(
|
||||||
reference->x + xofs + FixedMul(rad, finecosine[fineangle]),
|
xofs + FixedMul(rad, finecosine[fineangle]),
|
||||||
reference->y + yofs + FixedMul(rad, finesine[fineangle]),
|
yofs + FixedMul(rad, finesine[fineangle]),
|
||||||
reference->z + zofs);
|
zofs), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // [MC] The idea behind "absolute" is meant to be "absolute". Override everything, just like A_SpawnItemEx's.
|
else // [MC] The idea behind "absolute" is meant to be "absolute". Override everything, just like A_SpawnItemEx's.
|
||||||
|
@ -744,7 +742,7 @@ int P_Thing_Warp(AActor *caller, AActor *reference, fixed_t xofs, fixed_t yofs,
|
||||||
if (flags & WARPF_TOFLOOR)
|
if (flags & WARPF_TOFLOOR)
|
||||||
{
|
{
|
||||||
caller->SetOrigin(xofs + FixedMul(rad, finecosine[fineangle]), yofs + FixedMul(rad, finesine[fineangle]), zofs);
|
caller->SetOrigin(xofs + FixedMul(rad, finecosine[fineangle]), yofs + FixedMul(rad, finesine[fineangle]), zofs);
|
||||||
caller->z = caller->floorz + zofs;
|
caller->SetZ(caller->floorz + zofs);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -756,7 +754,7 @@ int P_Thing_Warp(AActor *caller, AActor *reference, fixed_t xofs, fixed_t yofs,
|
||||||
{
|
{
|
||||||
if (flags & WARPF_TESTONLY)
|
if (flags & WARPF_TESTONLY)
|
||||||
{
|
{
|
||||||
caller->SetOrigin(oldx, oldy, oldz);
|
caller->SetOrigin(old, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -783,29 +781,29 @@ int P_Thing_Warp(AActor *caller, AActor *reference, fixed_t xofs, fixed_t yofs,
|
||||||
|
|
||||||
if (flags & WARPF_WARPINTERPOLATION)
|
if (flags & WARPF_WARPINTERPOLATION)
|
||||||
{
|
{
|
||||||
caller->PrevX += caller->x - oldx;
|
caller->PrevX += caller->X() - old.x;
|
||||||
caller->PrevY += caller->y - oldy;
|
caller->PrevY += caller->Y() - old.y;
|
||||||
caller->PrevZ += caller->z - oldz;
|
caller->PrevZ += caller->Z() - old.z;
|
||||||
}
|
}
|
||||||
else if (flags & WARPF_COPYINTERPOLATION)
|
else if (flags & WARPF_COPYINTERPOLATION)
|
||||||
{
|
{
|
||||||
caller->PrevX = caller->x + reference->PrevX - reference->x;
|
caller->PrevX = caller->X() + reference->PrevX - reference->X();
|
||||||
caller->PrevY = caller->y + reference->PrevY - reference->y;
|
caller->PrevY = caller->Y() + reference->PrevY - reference->Y();
|
||||||
caller->PrevZ = caller->z + reference->PrevZ - reference->z;
|
caller->PrevZ = caller->Z() + reference->PrevZ - reference->Z();
|
||||||
}
|
}
|
||||||
else if (!(flags & WARPF_INTERPOLATE))
|
else if (!(flags & WARPF_INTERPOLATE))
|
||||||
{
|
{
|
||||||
caller->PrevX = caller->x;
|
caller->PrevX = caller->X();
|
||||||
caller->PrevY = caller->y;
|
caller->PrevY = caller->Y();
|
||||||
caller->PrevZ = caller->z;
|
caller->PrevZ = caller->Z();
|
||||||
}
|
}
|
||||||
if ((flags & WARPF_BOB) && (reference->flags2 & MF2_FLOATBOB))
|
if ((flags & WARPF_BOB) && (reference->flags2 & MF2_FLOATBOB))
|
||||||
{
|
{
|
||||||
caller->z += reference->GetBobOffset();
|
caller->AddZ(reference->GetBobOffset());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
caller->SetOrigin(oldx, oldy, oldz);
|
caller->SetOrigin(old, true);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -524,12 +524,12 @@ cont:
|
||||||
hity = StartY + FixedMul (Vy, dist);
|
hity = StartY + FixedMul (Vy, dist);
|
||||||
hitz = StartZ + FixedMul (Vz, dist);
|
hitz = StartZ + FixedMul (Vz, dist);
|
||||||
|
|
||||||
if (hitz > in->d.thing->z + in->d.thing->height)
|
if (hitz > in->d.thing->Top())
|
||||||
{ // trace enters above actor
|
{ // trace enters above actor
|
||||||
if (Vz >= 0) continue; // Going up: can't hit
|
if (Vz >= 0) continue; // Going up: can't hit
|
||||||
|
|
||||||
// Does it hit the top of the actor?
|
// Does it hit the top of the actor?
|
||||||
dist = FixedDiv(in->d.thing->z + in->d.thing->height - StartZ, Vz);
|
dist = FixedDiv(in->d.thing->Top() - StartZ, Vz);
|
||||||
|
|
||||||
if (dist > MaxDist) continue;
|
if (dist > MaxDist) continue;
|
||||||
in->frac = FixedDiv(dist, MaxDist);
|
in->frac = FixedDiv(dist, MaxDist);
|
||||||
|
@ -539,15 +539,15 @@ cont:
|
||||||
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->x) > in->d.thing->radius ||
|
if (abs(hitx - in->d.thing->X()) > in->d.thing->radius ||
|
||||||
abs(hity - in->d.thing->y) > in->d.thing->radius) continue;
|
abs(hity - in->d.thing->Y()) > in->d.thing->radius) continue;
|
||||||
}
|
}
|
||||||
else if (hitz < in->d.thing->z)
|
else if (hitz < in->d.thing->Z())
|
||||||
{ // trace enters below actor
|
{ // trace enters below actor
|
||||||
if (Vz <= 0) continue; // Going down: can't hit
|
if (Vz <= 0) continue; // Going down: can't hit
|
||||||
|
|
||||||
// Does it hit the bottom of the actor?
|
// Does it hit the bottom of the actor?
|
||||||
dist = FixedDiv(in->d.thing->z - StartZ, Vz);
|
dist = FixedDiv(in->d.thing->Z() - StartZ, Vz);
|
||||||
if (dist > MaxDist) continue;
|
if (dist > MaxDist) continue;
|
||||||
in->frac = FixedDiv(dist, MaxDist);
|
in->frac = FixedDiv(dist, MaxDist);
|
||||||
|
|
||||||
|
@ -556,8 +556,8 @@ cont:
|
||||||
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->x) > in->d.thing->radius ||
|
if (abs(hitx - in->d.thing->X()) > in->d.thing->radius ||
|
||||||
abs(hity - in->d.thing->y) > in->d.thing->radius) continue;
|
abs(hity - in->d.thing->Y()) > in->d.thing->radius) continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for extrafloors first
|
// check for extrafloors first
|
||||||
|
|
|
@ -754,10 +754,10 @@ void APlayerPawn::PostBeginPlay()
|
||||||
// Voodoo dolls: restore original floorz/ceilingz logic
|
// Voodoo dolls: restore original floorz/ceilingz logic
|
||||||
if (player == NULL || player->mo != this)
|
if (player == NULL || player->mo != this)
|
||||||
{
|
{
|
||||||
dropoffz = floorz = Sector->floorplane.ZatPoint(x, y);
|
dropoffz = floorz = Sector->floorplane.ZatPoint(this);
|
||||||
ceilingz = Sector->ceilingplane.ZatPoint(x, y);
|
ceilingz = Sector->ceilingplane.ZatPoint(this);
|
||||||
P_FindFloorCeiling(this, FFCF_ONLYSPAWNPOS);
|
P_FindFloorCeiling(this, FFCF_ONLYSPAWNPOS);
|
||||||
z = floorz;
|
SetZ(floorz);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1636,7 +1636,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SkullPop)
|
||||||
}
|
}
|
||||||
|
|
||||||
self->flags &= ~MF_SOLID;
|
self->flags &= ~MF_SOLID;
|
||||||
mo = (APlayerPawn *)Spawn (spawntype, self->x, self->y, self->z + 48*FRACUNIT, NO_REPLACE);
|
mo = (APlayerPawn *)Spawn (spawntype, self->PosPlusZ(48*FRACUNIT), NO_REPLACE);
|
||||||
//mo->target = self;
|
//mo->target = self;
|
||||||
mo->velx = pr_skullpop.Random2() << 9;
|
mo->velx = pr_skullpop.Random2() << 9;
|
||||||
mo->vely = pr_skullpop.Random2() << 9;
|
mo->vely = pr_skullpop.Random2() << 9;
|
||||||
|
@ -1849,7 +1849,7 @@ void P_CalcHeight (player_t *player)
|
||||||
|
|
||||||
if (player->cheats & CF_NOVELOCITY)
|
if (player->cheats & CF_NOVELOCITY)
|
||||||
{
|
{
|
||||||
player->viewz = player->mo->z + defaultviewheight;
|
player->viewz = player->mo->Z() + defaultviewheight;
|
||||||
|
|
||||||
if (player->viewz > player->mo->ceilingz-4*FRACUNIT)
|
if (player->viewz > player->mo->ceilingz-4*FRACUNIT)
|
||||||
player->viewz = player->mo->ceilingz-4*FRACUNIT;
|
player->viewz = player->mo->ceilingz-4*FRACUNIT;
|
||||||
|
@ -1905,9 +1905,9 @@ void P_CalcHeight (player_t *player)
|
||||||
{
|
{
|
||||||
bob = 0;
|
bob = 0;
|
||||||
}
|
}
|
||||||
player->viewz = player->mo->z + player->viewheight + bob;
|
player->viewz = player->mo->Z() + player->viewheight + bob;
|
||||||
if (player->mo->floorclip && player->playerstate != PST_DEAD
|
if (player->mo->floorclip && player->playerstate != PST_DEAD
|
||||||
&& player->mo->z <= player->mo->floorz)
|
&& player->mo->Z() <= player->mo->floorz)
|
||||||
{
|
{
|
||||||
player->viewz -= player->mo->floorclip;
|
player->viewz -= player->mo->floorclip;
|
||||||
}
|
}
|
||||||
|
@ -1950,7 +1950,7 @@ void P_MovePlayer (player_t *player)
|
||||||
mo->angle += cmd->ucmd.yaw << 16;
|
mo->angle += cmd->ucmd.yaw << 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
player->onground = (mo->z <= mo->floorz) || (mo->flags2 & MF2_ONMOBJ) || (mo->BounceFlags & BOUNCE_MBF) || (player->cheats & CF_NOCLIP2);
|
player->onground = (mo->Z() <= mo->floorz) || (mo->flags2 & MF2_ONMOBJ) || (mo->BounceFlags & BOUNCE_MBF) || (player->cheats & CF_NOCLIP2);
|
||||||
|
|
||||||
// killough 10/98:
|
// killough 10/98:
|
||||||
//
|
//
|
||||||
|
@ -2007,7 +2007,7 @@ void P_MovePlayer (player_t *player)
|
||||||
{
|
{
|
||||||
fprintf (debugfile, "move player for pl %d%c: (%d,%d,%d) (%d,%d) %d %d w%d [", int(player-players),
|
fprintf (debugfile, "move player for pl %d%c: (%d,%d,%d) (%d,%d) %d %d w%d [", int(player-players),
|
||||||
player->cheats&CF_PREDICTING?'p':' ',
|
player->cheats&CF_PREDICTING?'p':' ',
|
||||||
player->mo->x, player->mo->y, player->mo->z,forwardmove, sidemove, movefactor, friction, player->mo->waterlevel);
|
player->mo->X(), player->mo->Y(), player->mo->Z(),forwardmove, sidemove, movefactor, friction, player->mo->waterlevel);
|
||||||
msecnode_t *n = player->mo->touching_sectorlist;
|
msecnode_t *n = player->mo->touching_sectorlist;
|
||||||
while (n != NULL)
|
while (n != NULL)
|
||||||
{
|
{
|
||||||
|
@ -2139,7 +2139,7 @@ void P_DeathThink (player_t *player)
|
||||||
|
|
||||||
P_MovePsprites (player);
|
P_MovePsprites (player);
|
||||||
|
|
||||||
player->onground = (player->mo->z <= player->mo->floorz);
|
player->onground = (player->mo->Z() <= player->mo->floorz);
|
||||||
if (player->mo->IsKindOf (RUNTIME_CLASS(APlayerChunk)))
|
if (player->mo->IsKindOf (RUNTIME_CLASS(APlayerChunk)))
|
||||||
{ // Flying bloody skull or flying ice chunk
|
{ // Flying bloody skull or flying ice chunk
|
||||||
player->viewheight = 6 * FRACUNIT;
|
player->viewheight = 6 * FRACUNIT;
|
||||||
|
@ -2252,7 +2252,7 @@ void P_CrouchMove(player_t * player, int direction)
|
||||||
|
|
||||||
// check whether the move is ok
|
// check whether the move is ok
|
||||||
player->mo->height = FixedMul(defaultheight, player->crouchfactor);
|
player->mo->height = FixedMul(defaultheight, player->crouchfactor);
|
||||||
if (!P_TryMove(player->mo, player->mo->x, player->mo->y, false, NULL))
|
if (!P_TryMove(player->mo, player->mo->X(), player->mo->Y(), false, NULL))
|
||||||
{
|
{
|
||||||
player->mo->height = savedheight;
|
player->mo->height = savedheight;
|
||||||
if (direction > 0)
|
if (direction > 0)
|
||||||
|
@ -2269,7 +2269,7 @@ void P_CrouchMove(player_t * player, int direction)
|
||||||
player->crouchviewdelta = player->viewheight - player->mo->ViewHeight;
|
player->crouchviewdelta = player->viewheight - player->mo->ViewHeight;
|
||||||
|
|
||||||
// Check for eyes going above/below fake floor due to crouching motion.
|
// Check for eyes going above/below fake floor due to crouching motion.
|
||||||
P_CheckFakeFloorTriggers(player->mo, player->mo->z + oldheight, true);
|
P_CheckFakeFloorTriggers(player->mo, player->mo->Z() + oldheight, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -2290,7 +2290,7 @@ void P_PlayerThink (player_t *player)
|
||||||
if (debugfile && !(player->cheats & CF_PREDICTING))
|
if (debugfile && !(player->cheats & CF_PREDICTING))
|
||||||
{
|
{
|
||||||
fprintf (debugfile, "tic %d for pl %d: (%d, %d, %d, %u) b:%02x p:%d y:%d f:%d s:%d u:%d\n",
|
fprintf (debugfile, "tic %d for pl %d: (%d, %d, %d, %u) b:%02x p:%d y:%d f:%d s:%d u:%d\n",
|
||||||
gametic, (int)(player-players), player->mo->x, player->mo->y, player->mo->z,
|
gametic, (int)(player-players), player->mo->X(), player->mo->Y(), player->mo->Z(),
|
||||||
player->mo->angle>>ANGLETOFINESHIFT, player->cmd.ucmd.buttons,
|
player->mo->angle>>ANGLETOFINESHIFT, player->cmd.ucmd.buttons,
|
||||||
player->cmd.ucmd.pitch, player->cmd.ucmd.yaw, player->cmd.ucmd.forwardmove,
|
player->cmd.ucmd.pitch, player->cmd.ucmd.yaw, player->cmd.ucmd.forwardmove,
|
||||||
player->cmd.ucmd.sidemove, player->cmd.ucmd.upmove);
|
player->cmd.ucmd.sidemove, player->cmd.ucmd.upmove);
|
||||||
|
@ -2416,7 +2416,7 @@ void P_PlayerThink (player_t *player)
|
||||||
player->crouching = 0;
|
player->crouching = 0;
|
||||||
}
|
}
|
||||||
if (crouchdir == 1 && player->crouchfactor < FRACUNIT &&
|
if (crouchdir == 1 && player->crouchfactor < FRACUNIT &&
|
||||||
player->mo->z + player->mo->height < player->mo->ceilingz)
|
player->mo->Top() < player->mo->ceilingz)
|
||||||
{
|
{
|
||||||
P_CrouchMove(player, 1);
|
P_CrouchMove(player, 1);
|
||||||
}
|
}
|
||||||
|
@ -2629,8 +2629,7 @@ void P_PlayerThink (player_t *player)
|
||||||
P_PlayerOnSpecial3DFloor (player);
|
P_PlayerOnSpecial3DFloor (player);
|
||||||
P_PlayerInSpecialSector (player);
|
P_PlayerInSpecialSector (player);
|
||||||
|
|
||||||
if (player->mo->z <= player->mo->Sector->floorplane.ZatPoint(
|
if (player->mo->Z() <= player->mo->Sector->floorplane.ZatPoint(player->mo) ||
|
||||||
player->mo->x, player->mo->y) ||
|
|
||||||
player->mo->waterlevel)
|
player->mo->waterlevel)
|
||||||
{
|
{
|
||||||
// Player must be touching the floor
|
// Player must be touching the floor
|
||||||
|
@ -2784,7 +2783,7 @@ void P_PredictPlayer (player_t *player)
|
||||||
PredictionPlayerBackup = *player;
|
PredictionPlayerBackup = *player;
|
||||||
|
|
||||||
APlayerPawn *act = player->mo;
|
APlayerPawn *act = player->mo;
|
||||||
memcpy(PredictionActorBackup, &act->x, sizeof(APlayerPawn) - ((BYTE *)&act->x - (BYTE *)act));
|
memcpy(PredictionActorBackup, &act->snext, sizeof(APlayerPawn) - ((BYTE *)&act->snext - (BYTE *)act));
|
||||||
|
|
||||||
act->flags &= ~MF_PICKUP;
|
act->flags &= ~MF_PICKUP;
|
||||||
act->flags2 &= ~MF2_PUSHWALL;
|
act->flags2 &= ~MF2_PUSHWALL;
|
||||||
|
@ -2856,16 +2855,16 @@ void P_PredictPlayer (player_t *player)
|
||||||
{
|
{
|
||||||
// Z is not compared as lifts will alter this with no apparent change
|
// Z is not compared as lifts will alter this with no apparent change
|
||||||
// Make lerping less picky by only testing whole units
|
// Make lerping less picky by only testing whole units
|
||||||
DoLerp = ((PredictionLast.x >> 16) != (player->mo->x >> 16) ||
|
DoLerp = ((PredictionLast.x >> 16) != (player->mo->X() >> 16) ||
|
||||||
(PredictionLast.y >> 16) != (player->mo->y >> 16));
|
(PredictionLast.y >> 16) != (player->mo->Y() >> 16));
|
||||||
|
|
||||||
// Aditional Debug information
|
// Aditional Debug information
|
||||||
if (developer && DoLerp)
|
if (developer && DoLerp)
|
||||||
{
|
{
|
||||||
DPrintf("Lerp! Ltic (%d) && Ptic (%d) | Lx (%d) && Px (%d) | Ly (%d) && Py (%d)\n",
|
DPrintf("Lerp! Ltic (%d) && Ptic (%d) | Lx (%d) && Px (%d) | Ly (%d) && Py (%d)\n",
|
||||||
PredictionLast.gametic, i,
|
PredictionLast.gametic, i,
|
||||||
(PredictionLast.x >> 16), (player->mo->x >> 16),
|
(PredictionLast.x >> 16), (player->mo->X() >> 16),
|
||||||
(PredictionLast.y >> 16), (player->mo->y >> 16));
|
(PredictionLast.y >> 16), (player->mo->Y() >> 16));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2883,9 +2882,9 @@ void P_PredictPlayer (player_t *player)
|
||||||
}
|
}
|
||||||
|
|
||||||
PredictionLast.gametic = maxtic - 1;
|
PredictionLast.gametic = maxtic - 1;
|
||||||
PredictionLast.x = player->mo->x;
|
PredictionLast.x = player->mo->X();
|
||||||
PredictionLast.y = player->mo->y;
|
PredictionLast.y = player->mo->Y();
|
||||||
PredictionLast.z = player->mo->z;
|
PredictionLast.z = player->mo->Z();
|
||||||
|
|
||||||
if (PredictionLerptics > 0)
|
if (PredictionLerptics > 0)
|
||||||
{
|
{
|
||||||
|
@ -2893,9 +2892,7 @@ void P_PredictPlayer (player_t *player)
|
||||||
P_LerpCalculate(PredictionLerpFrom, PredictionLast, PredictionLerpResult, (float)PredictionLerptics * cl_predict_lerpscale))
|
P_LerpCalculate(PredictionLerpFrom, PredictionLast, PredictionLerpResult, (float)PredictionLerptics * cl_predict_lerpscale))
|
||||||
{
|
{
|
||||||
PredictionLerptics++;
|
PredictionLerptics++;
|
||||||
player->mo->x = PredictionLerpResult.x;
|
player->mo->SetXYZ(PredictionLerpResult.x, PredictionLerpResult.y, PredictionLerpResult.z);
|
||||||
player->mo->y = PredictionLerpResult.y;
|
|
||||||
player->mo->z = PredictionLerpResult.z;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2927,7 +2924,7 @@ void P_UnPredictPlayer ()
|
||||||
player->camera = savedcamera;
|
player->camera = savedcamera;
|
||||||
|
|
||||||
act->UnlinkFromWorld();
|
act->UnlinkFromWorld();
|
||||||
memcpy(&act->x, PredictionActorBackup, sizeof(APlayerPawn) - ((BYTE *)&act->x - (BYTE *)act));
|
memcpy(&act->snext, PredictionActorBackup, sizeof(APlayerPawn) - ((BYTE *)&act->snext - (BYTE *)act));
|
||||||
|
|
||||||
// The blockmap ordering needs to remain unchanged, too.
|
// The blockmap ordering needs to remain unchanged, too.
|
||||||
// Restore sector links and refrences.
|
// Restore sector links and refrences.
|
||||||
|
@ -3201,7 +3198,7 @@ void player_t::Serialize (FArchive &arc)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
onground = (mo->z <= mo->floorz) || (mo->flags2 & MF2_ONMOBJ) || (mo->BounceFlags & BOUNCE_MBF) || (cheats & CF_NOCLIP2);
|
onground = (mo->Z() <= mo->floorz) || (mo->flags2 & MF2_ONMOBJ) || (mo->BounceFlags & BOUNCE_MBF) || (cheats & CF_NOCLIP2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SaveVersion < 4514 && IsBot)
|
if (SaveVersion < 4514 && IsBot)
|
||||||
|
|
Loading…
Reference in a new issue