mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2024-11-16 09:11:17 +00:00
- added two floating point special variables, because the two existing ones are integers and unusable for storing doubles.
This commit is contained in:
parent
cff8e51811
commit
afa5f22b31
5 changed files with 24 additions and 14 deletions
|
@ -1136,6 +1136,7 @@ public:
|
|||
}
|
||||
|
||||
double projectilepassheight; // height for clipping projectile movement against this actor
|
||||
|
||||
SDWORD tics; // state tic counter
|
||||
FState *state;
|
||||
VMFunction *Damage; // For missiles and monster railgun
|
||||
|
@ -1153,6 +1154,9 @@ public:
|
|||
|
||||
int special1; // Special info
|
||||
int special2; // Special info
|
||||
double specialf1; // With floats we cannot use the int versions for storing position or angle data without reverting to fixed point (which we do not want.)
|
||||
double specialf2;
|
||||
|
||||
int weaponspecial; // Special info for weapons.
|
||||
int health;
|
||||
BYTE movedir; // 0-7
|
||||
|
@ -1290,6 +1294,7 @@ public:
|
|||
void AddToHash ();
|
||||
void RemoveFromHash ();
|
||||
|
||||
|
||||
private:
|
||||
static AActor *TIDHash[128];
|
||||
static inline int TIDHASH (int key) { return key & 127; }
|
||||
|
|
|
@ -1459,9 +1459,9 @@ void FParser::SF_SetCamera(void)
|
|||
|
||||
angle = t_argc < 2 ? newcamera->Angles.Yaw : floatvalue(t_argv[1]);
|
||||
|
||||
newcamera->special1 = newcamera->Angles.Yaw.BAMs();
|
||||
newcamera->special2=newcamera->_f_Z();
|
||||
newcamera->_f_SetZ(t_argc < 3 ? (newcamera->_f_Z() + (41 << FRACBITS)) : (intvalue(t_argv[2]) << FRACBITS));
|
||||
newcamera->specialf1 = newcamera->Angles.Yaw.Degrees;
|
||||
newcamera->specialf2 = newcamera->Z();
|
||||
newcamera->SetZ(t_argc < 3 ? newcamera->Z() + 41 : floatvalue(t_argv[2]));
|
||||
newcamera->Angles.Yaw = angle;
|
||||
if (t_argc < 4) newcamera->Angles.Pitch = 0.;
|
||||
else newcamera->Angles.Pitch = clamp(floatvalue(t_argv[3]), -50., 50.) * (20. / 32.);
|
||||
|
@ -1485,8 +1485,8 @@ void FParser::SF_ClearCamera(void)
|
|||
if (cam)
|
||||
{
|
||||
player->camera=player->mo;
|
||||
cam->Angles.Yaw = ANGLE2DBL(cam->special1);
|
||||
cam->_f_SetZ(cam->special2);
|
||||
cam->Angles.Yaw = cam->specialf1;
|
||||
cam->SetZ(cam->specialf2);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -134,8 +134,8 @@ DEFINE_ACTION_FUNCTION(AActor, A_CFlameMissile)
|
|||
mo->Angles.Yaw = an;
|
||||
mo->target = self->target;
|
||||
mo->VelFromAngle(FLAMESPEED);
|
||||
mo->special1 = FLOAT2FIXED(mo->Vel.X);
|
||||
mo->special2 = FLOAT2FIXED(mo->Vel.Y);
|
||||
mo->specialf1 = mo->Vel.X;
|
||||
mo->specialf2 = mo->Vel.Y;
|
||||
mo->tics -= pr_missile()&3;
|
||||
}
|
||||
mo = Spawn ("CircleFlame", BlockingMobj->Vec3Offset(
|
||||
|
@ -146,8 +146,8 @@ DEFINE_ACTION_FUNCTION(AActor, A_CFlameMissile)
|
|||
mo->Angles.Yaw = an + 180.;
|
||||
mo->target = self->target;
|
||||
mo->VelFromAngle(-FLAMESPEED);
|
||||
mo->special1 = FLOAT2FIXED(mo->Vel.X);
|
||||
mo->special2 = FLOAT2FIXED(mo->Vel.Y);
|
||||
mo->specialf1 = mo->Vel.X;
|
||||
mo->specialf2 = mo->Vel.Y;
|
||||
mo->tics -= pr_missile()&3;
|
||||
}
|
||||
}
|
||||
|
@ -168,7 +168,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_CFlameRotate)
|
|||
|
||||
DAngle an = self->Angles.Yaw + 90.;
|
||||
self->VelFromAngle(an, FLAMEROTSPEED);
|
||||
self->Vel += DVector2(FIXED2DBL(self->special1), FIXED2DBL(self->special2));
|
||||
self->Vel += DVector2(self->specialf1, self->specialf2);
|
||||
|
||||
self->Angles.Yaw += 6.;
|
||||
return 0;
|
||||
|
|
|
@ -2425,9 +2425,9 @@ void P_ZMovement (AActor *mo, fixed_t oldfloorz)
|
|||
// Hexen yanked all items to the floor, except those being spawned at map start in the air.
|
||||
// Those were kept at their original height.
|
||||
// Do this only if the item was actually spawned by the map above ground to avoid problems.
|
||||
if (mo->special1 > 0 && (mo->flags2 & MF2_FLOATBOB) && (ib_compatflags & BCOMPATF_FLOATBOB))
|
||||
if (mo->specialf1 > 0 && (mo->flags2 & MF2_FLOATBOB) && (ib_compatflags & BCOMPATF_FLOATBOB))
|
||||
{
|
||||
mo->_f_SetZ(mo->_f_floorz() + mo->special1);
|
||||
mo->SetZ(mo->floorz + mo->specialf1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -5123,7 +5123,7 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position)
|
|||
mobj->_f_AddZ(mthing->z);
|
||||
if ((mobj->flags2 & MF2_FLOATBOB) && (ib_compatflags & BCOMPATF_FLOATBOB))
|
||||
{
|
||||
mobj->special1 = mthing->z;
|
||||
mobj->specialf1 = FIXED2DBL(mthing->z);
|
||||
}
|
||||
}
|
||||
else if (z == ONCEILINGZ)
|
||||
|
@ -5140,7 +5140,7 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position)
|
|||
else mobj->flags &= ~MF_NOGRAVITY;
|
||||
|
||||
// For Hexen floatbob 'compatibility' we do not really want to alter the floorz.
|
||||
if (mobj->special1 == 0 || !(mobj->flags2 & MF2_FLOATBOB) || !(ib_compatflags & BCOMPATF_FLOATBOB))
|
||||
if (mobj->specialf1 == 0 || !(mobj->flags2 & MF2_FLOATBOB) || !(ib_compatflags & BCOMPATF_FLOATBOB))
|
||||
{
|
||||
P_FindFloorCeiling(mobj, FFCF_SAMESECTOR | FFCF_ONLY3DFLOORS | FFCF_3DRESTRICT);
|
||||
}
|
||||
|
|
|
@ -281,6 +281,11 @@ struct secplane_t
|
|||
return FixedMul (ic, -d - DMulScale16 (a, ac->_f_X(), b, ac->_f_Y()));
|
||||
}
|
||||
|
||||
double ZatPointF(const AActor *ac) const
|
||||
{
|
||||
return FIXED2DBL(ZatPoint(ac));
|
||||
}
|
||||
|
||||
// Returns the value of z at (x,y) if d is equal to dist
|
||||
fixed_t ZatPointDist (fixed_t x, fixed_t y, fixed_t dist) const
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue