- Add fixedhoriz::Tan() and replace most asbuildf() calls with it.

This commit is contained in:
Mitchell Richters 2022-09-27 13:09:20 +10:00 committed by Christoph Oelckers
parent f6f88f587d
commit d8a6471680
16 changed files with 74 additions and 75 deletions

View file

@ -84,6 +84,7 @@ public:
constexpr short asbuild() const { return FixedToInt(value); }
constexpr double asbuildf() const { return FixedToFloat(value); }
constexpr fixed_t asq16() const { return value; }
constexpr double Tan() const { return FixedToFloat<23>(value); }
double Degrees() const { return HorizToPitch(value); }
int Sgn() const { return ::Sgn(value); }

View file

@ -44,14 +44,14 @@ struct PlayerHorizon
bool movementlocked() { return targetset() || inputdisabled; }
// Draw code helpers.
double horizsumfrac(double const interpfrac) { return (!SyncInput() ? sum() : interpolatedsum(interpfrac)).asbuildf() * (1. / 16.); }
double horizsumfrac(double const interpfrac) { return (!SyncInput() ? sum() : interpolatedsum(interpfrac)).Tan() * 8.; }
// Ticrate playsim adjustment setters and processor.
void addadjustment(fixedhoriz const value)
{
if (!SyncInput())
{
adjustment += value.asbuildf();
adjustment += value.Degrees();
}
else
{
@ -79,11 +79,11 @@ struct PlayerHorizon
{
if (targetset())
{
auto delta = (target - horiz).asbuildf();
auto delta = (target - horiz).Degrees();
if (abs(delta) > 1)
if (abs(delta) > 0.45)
{
horiz += buildfhoriz(scaleAdjust * delta);
horiz += pitchhoriz(scaleAdjust * delta);
}
else
{
@ -93,7 +93,7 @@ struct PlayerHorizon
}
else if (adjustment)
{
horiz += buildfhoriz(scaleAdjust * adjustment);
horiz += pitchhoriz(scaleAdjust * adjustment);
}
}

View file

@ -139,7 +139,7 @@ struct GameInterface : public ::GameInterface
void ToggleThirdPerson() override;
void SwitchCoopView() override;
void ToggleShowWeapon() override;
DVector3 chaseCamPos(DAngle ang, fixedhoriz horiz) { return DVector3(-ang.ToVector() * 80., horiz.asbuildf() * 0.625 - 16); }
DVector3 chaseCamPos(DAngle ang, fixedhoriz horiz) { return DVector3(-ang.ToVector() * 80., horiz.Tan() * 80.); }
void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double interpfrac) override;
void EnterPortal(DCoreActor* viewer, int type) override;
void LeavePortal(DCoreActor* viewer, int type) override;

View file

@ -55,7 +55,7 @@ struct GameInterface : public ::GameInterface
void ToggleThirdPerson() override;
void SwitchCoopView() override;
void ToggleShowWeapon() override;
DVector3 chaseCamPos(DAngle ang, fixedhoriz horiz) { return DVector3(-ang.ToVector() * 64., horiz.asbuildf() * 0.5); }
DVector3 chaseCamPos(DAngle ang, fixedhoriz horiz) { return DVector3(-ang.ToVector() * 64., horiz.Tan() * 64.); }
void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double interpfrac) override;
void UpdateCameras(double smoothratio) override;
void EnterPortal(DCoreActor* viewer, int type) override;

View file

@ -241,7 +241,7 @@ DDukeActor* aim(DDukeActor* actor, int abase)
// This is a reimplementation of how it was solved in RedNukem.
if (plr->curr_weapon == PISTOL_WEAPON && !isWW2GI())
{
double zvel = -plr->horizon.sum().asbuildf() / 8;
double zvel = -plr->horizon.sum().Tan() * 16.;
HitInfo hit{};
hitscan(plr->pos.plusZ(4), actor->sector(), DVector3(actor->spr.angle.ToVector() * 1024, zvel), hit, CLIPMASK1);

View file

@ -113,7 +113,7 @@ static void shootfireball(DDukeActor *actor, int p, DVector3 pos, DAngle ang)
}
else
{
zvel = -ps[p].horizon.sum().asbuildf() * (98 / 256.);
zvel = -ps[p].horizon.sum().Tan() * 49.;
pos += (ang + DAngle1 * 61).ToVector() * (1024 / 448.);
pos.Z += 3;
}
@ -182,7 +182,7 @@ static void shootflamethrowerflame(DDukeActor* actor, int p, DVector3 spos, DAng
}
else
{
zvel = -ps[p].horizon.sum().asbuildf() * (81./256.);
zvel = -ps[p].horizon.sum().Tan() * 40.5;
// WTF???
DAngle myang = DAngle90 - (DAngle180 - abs(abs(VecToAngle(spos.XY() - ps[p].pos.XY()) - sang) - DAngle180));
@ -242,7 +242,7 @@ static void shootknee(DDukeActor* actor, int p, DVector3 pos, DAngle ang)
if (p >= 0)
{
zvel = -ps[p].horizon.sum().asbuildf() * 0.125;
zvel = -ps[p].horizon.sum().Tan() * 16.;
pos.Z += 6;
ang += DAngle1 * 2.64;
}
@ -374,14 +374,14 @@ static void shootweapon(DDukeActor *actor, int p, DVector3 pos, DAngle ang, int
if (aimed == nullptr)
{
// no target
zvel = -ps[p].horizon.sum().asbuildf() / 8;
zvel = -ps[p].horizon.sum().Tan() * 16.;
}
zvel += (zRange / 2) - krandf(zRange);
}
else if (aimed == nullptr)
{
ang += DAngle22_5 / 8 - randomAngle(22.5 / 4);
zvel = -ps[p].horizon.sum().asbuildf() / 8;
zvel = -ps[p].horizon.sum().Tan() * 16.;
zvel += 0.5 - krandf(1);
}
@ -606,7 +606,7 @@ static void shootstuff(DDukeActor* actor, int p, DVector3 pos, DAngle ang, int a
ang = VecToAngle(aimed->spr.pos.XY() - pos.XY());
}
else
zvel = -ps[p].horizon.sum().asbuildf() * (98 / 256.);
zvel = -ps[p].horizon.sum().Tan() * 49.;
}
else
{
@ -717,7 +717,7 @@ static void shootrpg(DDukeActor *actor, int p, DVector3 pos, DAngle ang, int atw
ang = VecToAngle(aimed->spr.pos.XY() - pos.XY());
}
else
zvel = -ps[p].horizon.sum().asbuildf() * (81 / 256.);
zvel = -ps[p].horizon.sum().Tan() * 40.5;
if (atwith == RPG)
S_PlayActorSound(RPG_SHOOT, actor);
@ -861,7 +861,7 @@ static void shootlaser(DDukeActor* actor, int p, DVector3 pos, DAngle ang)
HitInfo hit{};
if (p >= 0)
zvel = -ps[p].horizon.sum().asbuildf() * 0.125;
zvel = -ps[p].horizon.sum().Tan() * 16.;
else zvel = 0;
hitscan(pos, sectp, DVector3(ang.ToVector() * 1024, zvel * 64), hit, CLIPMASK1);
@ -958,7 +958,7 @@ static void shootgrowspark(DDukeActor* actor, int p, DVector3 pos, DAngle ang)
else
{
ang += DAngle22_5 / 8 - randomAngle(22.5 / 4);
zvel = -ps[p].horizon.sum().asbuildf() * 0.125;
zvel = -ps[p].horizon.sum().Tan() * 16.;
zvel += 0.5 - krandf(1);
}
@ -1051,7 +1051,7 @@ static void shootshrinker(DDukeActor* actor, int p, const DVector3& pos, DAngle
ang = VecToAngle(aimed->spr.pos.XY() - pos.XY());
}
else
zvel = -ps[p].horizon.sum().asbuildf() * (98 / 256.);
zvel = -ps[p].horizon.sum().Tan() * 49.;
}
else if (actor->spr.statnum != 3)
{
@ -2048,7 +2048,7 @@ int operateTripbomb(int snum)
auto p = &ps[snum];
HitInfo hit{};
hitscan(p->pos, p->cursector, DVector3(p->angle.ang.ToVector() * 1024, -p->horizon.sum().asbuildf() * 0.125), hit, CLIPMASK1);
hitscan(p->pos, p->cursector, DVector3(p->angle.ang.ToVector() * 1024, -p->horizon.sum().Tan() * 16.), hit, CLIPMASK1);
if (hit.hitSector == nullptr || hit.actor())
return 0;
@ -2236,12 +2236,12 @@ static void operateweapon(int snum, ESyncBits actions)
if (p->on_ground && (actions & SB_CROUCH))
{
vel = 15/16.;
zvel = p->horizon.sum().asbuildf() * (20 / 256.);
zvel = p->horizon.sum().Tan() * 10.;
}
else
{
vel = 140/16.;
zvel = -4 - p->horizon.sum().asbuildf() * (20 / 256.);
zvel = -4 - p->horizon.sum().Tan() * 10.;
}
auto spawned = CreateActor(p->cursector, p->pos + p->angle.ang.ToVector() * 16, HEAVYHBOMB, -16, 9, 9,

View file

@ -91,7 +91,7 @@ static void shootmelee(DDukeActor *actor, int p, DVector3 pos, DAngle ang, int a
if (p >= 0)
{
zvel = -ps[p].horizon.sum().asbuildf() * 0.125;
zvel = -ps[p].horizon.sum().Tan() * 16.;
pos.Z += 6;
ang += DAngle1 * 2.64;
}
@ -224,7 +224,7 @@ static void shootweapon(DDukeActor* actor, int p, DVector3 pos, DAngle ang, int
if (aimed == nullptr)
{
ang += DAngle22_5 / 8 - randomAngle(22.5 / 4);
zvel = -ps[p].horizon.sum().asbuildf() / 8;
zvel = -ps[p].horizon.sum().Tan() * 16.;
zvel += 0.5 - krandf(1);
}
}
@ -234,7 +234,7 @@ static void shootweapon(DDukeActor* actor, int p, DVector3 pos, DAngle ang, int
ang += DAngle22_5 / 2 - randomAngle(22.5);
else
ang += DAngle22_5 / 8 - randomAngle(22.5 / 4);
if (aimed == nullptr) zvel = -ps[p].horizon.sum().asbuildf() / 8;
if (aimed == nullptr) zvel = -ps[p].horizon.sum().Tan() * 16.;
zvel += 0.5 - krandf(1);
}
pos.Z -= 2;
@ -512,7 +512,7 @@ static void shootstuff(DDukeActor* actor, int p, DVector3 pos, DAngle ang, int a
}
else
{
zvel = -ps[p].horizon.sum().asbuildf() * (98 / 256.);
zvel = -ps[p].horizon.sum().Tan() * 49.;
}
}
else
@ -628,7 +628,7 @@ static void shootrpg(DDukeActor* actor, int p, DVector3 pos, DAngle ang, int atw
ang = VecToAngle(aimed->spr.pos.XY() - pos.XY());
}
else
zvel = -ps[p].horizon.sum().asbuildf() * (81 / 256.);
zvel = -ps[p].horizon.sum().Tan() * 40.5;
if (atwith == RPG)
S_PlayActorSound(RPG_SHOOT, actor);
@ -782,7 +782,7 @@ static void shootwhip(DDukeActor* actor, int p, DVector3 pos, DAngle ang, int at
ang = VecToAngle(aimed->spr.pos.XY() - pos.XY());
}
else
zvel = -ps[p].horizon.sum().asbuildf() * (98 / 256.);
zvel = -ps[p].horizon.sum().Tan() * 49.;
}
else
{
@ -2743,12 +2743,12 @@ static void operateweapon(int snum, ESyncBits actions, sectortype* psectp)
if (p->on_ground && (actions & SB_CROUCH))
{
vel = 15 / 16.;
zvel = p->horizon.sum().asbuildf() * (20 / 256.);
zvel = p->horizon.sum().Tan() * 10.;
}
else
{
vel = 140 / 16.;
zvel = -4 - p->horizon.sum().asbuildf() * (20 / 256.);
zvel = -4 - p->horizon.sum().Tan() * 10.;
}
auto spawned = CreateActor(p->cursector, p->pos + p->angle.ang.ToVector() * 16, HEAVYHBOMB, -16, 9, 9,
@ -3150,12 +3150,12 @@ static void operateweapon(int snum, ESyncBits actions, sectortype* psectp)
if (p->on_ground && (actions & SB_CROUCH) && !p->OnMotorcycle)
{
vel = 15 / 16.;
zvel = p->horizon.sum().asbuildf() * (20 / 256.);
zvel = p->horizon.sum().Tan() * 10.;
}
else
{
vel = 2.;
zvel = -4 - p->horizon.sum().asbuildf() * (20 / 256.);
zvel = -4 - p->horizon.sum().Tan() * 10.;
}
CreateActor(p->cursector, p->pos + p->angle.ang.ToVector() * 16, POWDERKEG, -16, 9, 9, p->angle.ang, vel * 2, zvel, pact, 1);

View file

@ -333,12 +333,12 @@ void operateweapon_ww(int snum, ESyncBits actions)
if (p->on_ground && (actions & SB_CROUCH))
{
vel = 15 / 16.;
zvel = p->horizon.sum().asbuildf() * (20 / 256.);
zvel = p->horizon.sum().Tan() * 10.;
}
else
{
vel = 140 / 16.;
zvel = -4 - p->horizon.sum().asbuildf() * (20 / 256.);
zvel = -4 - p->horizon.sum().Tan() * 10.;
}
auto spawned = CreateActor(p->cursector, p->pos + p->angle.ang.ToVector() * 16, HEAVYHBOMB, -16, 9, 9,

View file

@ -405,7 +405,7 @@ void initshell(DDukeActor* actj, DDukeActor* act, bool isshell)
ang = ps[snum].angle.ang - mapangle((krand() & 63) + 8); //Fine tune
act->temp_data[0] = krand() & 1;
act->spr.pos.Z = 3 + ps[snum].pos.Z + ps[snum].pyoff - (ps[snum].horizon.sum().asbuildf() * (1/16.)) + (!isshell ? 3 : 0);
act->spr.pos.Z = 3 + ps[snum].pos.Z + ps[snum].pyoff - (ps[snum].horizon.sum().Tan() * 8.) + (!isshell ? 3 : 0);
act->vel.Z = -krandf(1);
}
else

View file

@ -235,7 +235,7 @@ struct GameInterface : public ::GameInterface
fixed_t playerHorizMax() override { return IntToFixed(150); }
void WarpToCoords(double x, double y, double z, DAngle ang, int horz) override;
void ToggleThirdPerson() override;
DVector3 chaseCamPos(DAngle ang, fixedhoriz horiz) { return DVector3(-ang.ToVector() * 96., horiz.asbuildf() * 0.75); }
DVector3 chaseCamPos(DAngle ang, fixedhoriz horiz) { return DVector3(-ang.ToVector() * 96., horiz.Tan() * 96.); }
void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double interpfrac) override;
int GetCurrentSkill() override;
std::pair<DVector3, DAngle> GetCoordinates() override;

View file

@ -747,7 +747,7 @@ loc_flag:
// loc_27266:
case kWeaponSword:
{
nHeight -= PlayerList[nLocalPlayer].horizon.horiz.asbuildf() * 0.25;
nHeight -= PlayerList[nLocalPlayer].horizon.horiz.Tan() * 32.;
thePos.Z += nHeight;
@ -852,7 +852,7 @@ loc_flag:
}
case kWeaponPistol:
{
double h = PlayerList[nLocalPlayer].horizon.horiz.asbuildf() / 64.;
double h = PlayerList[nLocalPlayer].horizon.horiz.Tan() * 2.;
nHeight -= h;
DExhumedActor* target = nullptr;

View file

@ -2500,7 +2500,7 @@ sectdone:
if (cl_slopetilting && !pPlayer->bPlayerPan && !pPlayer->bLockPan)
{
double nVertPan = (pPlayer->nDestVertPan - pPlayer->horizon.horiz).asbuildf() * 0.25;
double nVertPan = (pPlayer->nDestVertPan - pPlayer->horizon.horiz).Tan() * 32.;
if (nVertPan != 0)
{
pPlayer->horizon.addadjustment(buildfhoriz(abs(nVertPan) >= 4 ? clamp(nVertPan, -4., 4.) : nVertPan * 2.));

View file

@ -1883,7 +1883,7 @@ struct GameInterface : public ::GameInterface
void WarpToCoords(double x, double y, double z, DAngle ang, int horz) override;
void ToggleThirdPerson() override;
void SwitchCoopView() override;
DVector3 chaseCamPos(DAngle ang, fixedhoriz horiz) { return DVector3(-ang.ToVector() * 128., horiz.asbuildf()); }
DVector3 chaseCamPos(DAngle ang, fixedhoriz horiz) { return DVector3(-ang.ToVector() * 128., horiz.Tan() * 128.); }
void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double smoothRatio) override;
void UpdateCameras(double smoothratio) override;
void EnterPortal(DCoreActor* viewer, int type) override;

View file

@ -1289,7 +1289,7 @@ int PlayerInitChemBomb(PLAYER* pp)
if (pp->Flags & (PF_DIVING) || SpriteInUnderwaterArea(actorNew))
actorNew->user.Flags |= (SPR_UNDERWATER);
actorNew->vel.Z -= pp->horizon.horiz.asbuildf() * HORIZ_MULTF;
actorNew->vel.Z -= pp->horizon.horiz.Tan() * HORIZ_MULTF;
oclipdist = plActor->native_clipdist();
plActor->set_const_clipdist(0);
@ -1664,7 +1664,7 @@ int PlayerInitCaltrops(PLAYER* pp)
if (pp->Flags & (PF_DIVING) || SpriteInUnderwaterArea(actorNew))
actorNew->user.Flags |= (SPR_UNDERWATER);
actorNew->vel.Z -= pp->horizon.horiz.asbuildf() * 0.5;
actorNew->vel.Z -= pp->horizon.horiz.Tan() * HORIZ_MULTF;
oclipdist = plActor->native_clipdist();
plActor->set_const_clipdist(0);
@ -1826,7 +1826,7 @@ int InitBloodSpray(DSWActor* actor, bool dogib, short velocity)
actorNew->user.floor_dist = 3;
actorNew->user.Counter = 0;
actorNew->vel.Z = (-10 - RandomRange(50)) * HORIZ_MULTF;
actorNew->vel.Z = (-10 - RandomRange(50)) * 0.5;
UpdateChange(actorNew, 0.5);
@ -2209,7 +2209,7 @@ int SpawnShell(DSWActor* actor, int ShellNum)
if (actor->user.PlayerP)
{
actorNew->vel.Z = -actor->user.PlayerP->horizon.horiz.asbuildf() * HORIZ_MULTF * (1. / 3.);
actorNew->vel.Z = -actor->user.PlayerP->horizon.horiz.Tan() * (HORIZ_MULTF / 3.);
}
switch (actorNew->user.ID)

View file

@ -12063,7 +12063,7 @@ void InitSpellNapalm(PLAYER* pp)
actor->spr.xrepeat = 32;
actor->spr.yrepeat = 32;
actor->set_const_clipdist(0);
actor->vel.Z = -pp->horizon.horiz.asbuildf() * HORIZ_MULTF;
actor->vel.Z = -pp->horizon.horiz.Tan() * HORIZ_MULTF;
actor->spr.cstat |= (CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_YCENTER);
actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN);
actor->user.Flags2 |= (SPR2_BLUR_TAPER_FAST);
@ -12195,7 +12195,7 @@ int InitSpellMirv(PLAYER* pp)
actorNew->spr.xrepeat = 72;
actorNew->spr.yrepeat = 72;
actorNew->set_const_clipdist(32 >> 2);
actorNew->vel.Z = -pp->horizon.horiz.asbuildf() * HORIZ_MULTF;
actorNew->vel.Z = -pp->horizon.horiz.Tan() * HORIZ_MULTF;
actorNew->spr.cstat |= (CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_YCENTER);
actorNew->spr.cstat &= ~(CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN);
@ -12329,7 +12329,7 @@ int InitSwordAttack(PLAYER* pp)
{
HitInfo hit{};
double daz = -pp->horizon.horiz.asbuildf() * (2000 / 256.) + (RandomRangeF(24000 / 256.) - 12000 / 256.);
double daz = -pp->horizon.horiz.Tan() * 1000. + (RandomRangeF(24000 / 256.) - 12000 / 256.);
DAngle daang = pp->angle.ang;
FAFhitscan(pp->pos, pp->cursector, DVector3(pp->angle.ang.ToVector() * 1024, daz), hit, CLIPMASK_MISSILE);
@ -12506,7 +12506,7 @@ int InitFistAttack(PLAYER* pp)
// all this is to break glass
{
HitInfo hit{};
double daz = -pp->horizon.horiz.asbuildf() * (2000 / 256.) + (RandomRangeF(24000 / 256.) - 12000 / 256.);
double daz = -pp->horizon.horiz.Tan() * 1000. + (RandomRangeF(24000 / 256.) - 12000 / 256.);
auto daang = pp->angle.ang;
FAFhitscan(pp->pos, pp->cursector, DVector3(pp->angle.ang.ToVector() * 1024, daz), hit, CLIPMASK_MISSILE);
@ -13069,7 +13069,7 @@ int InitStar(PLAYER* pp)
actorNew->spr.shade = -25;
actorNew->set_const_clipdist(32 >> 2);
// zvel was overflowing with this calculation - had to move to a local long var
double zvel = -pp->horizon.horiz.asbuildf() * ((HORIZ_MULT + STAR_HORIZ_ADJ) / 256.);
double zvel = -pp->horizon.horiz.Tan() * ((HORIZ_MULT + STAR_HORIZ_ADJ) * 0.5);
actorNew->user.ceiling_dist = (1);
actorNew->user.floor_dist = (1);
@ -13120,7 +13120,7 @@ int InitStar(PLAYER* pp)
if (pp->Flags & (PF_DIVING) || SpriteInUnderwaterArea(actorNew2))
actorNew2->user.Flags |= SPR_UNDERWATER;
zvel = -pp->horizon.horiz.asbuildf() * ((HORIZ_MULT + STAR_HORIZ_ADJ) / 256.);
zvel = -pp->horizon.horiz.Tan() * ((HORIZ_MULT + STAR_HORIZ_ADJ) * 0.5);
actorNew2->vel.Z = zvel * 0.5;
if (MissileSetPos(actorNew2, DoStar, 1000))
@ -13170,7 +13170,7 @@ void InitHeartAttack(PLAYER* pp)
actorNew->spr.xrepeat = 52;
actorNew->spr.yrepeat = 52;
actorNew->set_const_clipdist(0);
actorNew->vel.Z = -pp->horizon.horiz.asbuildf() * HORIZ_MULTF;
actorNew->vel.Z = -pp->horizon.horiz.Tan() * HORIZ_MULTF;
actorNew->spr.cstat &= ~(CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN);
actorNew->user.Flags2 |= (SPR2_DONT_TARGET_OWNER);
actorNew->spr.cstat |= (CSTAT_SPRITE_INVISIBLE);
@ -13314,7 +13314,7 @@ int InitShotgun(PLAYER* pp)
}
else
{
daz = -pp->horizon.horiz.asbuildf() * (2000 / 256.);
daz = -pp->horizon.horiz.Tan() * 1000.;
daang = pp->angle.ang;
}
@ -13477,7 +13477,7 @@ int InitLaser(PLAYER* pp)
actorNew->set_const_clipdist(64 >> 2);;
// the slower the missile travels the less of a zvel it needs
actorNew->vel.Z = -pp->horizon.horiz.asbuildf() * HORIZ_MULTF * 0.25;
actorNew->vel.Z = -pp->horizon.horiz.Tan() * 16.;
actorNew->user.WeaponNum = actor->user.WeaponNum;
actorNew->user.Radius = 200;
@ -13573,7 +13573,7 @@ int InitRail(PLAYER* pp)
actorNew->spr.yrepeat = 52;
actorNew->spr.xrepeat = 52;
actorNew->spr.shade = -15;
zvel = -pp->horizon.horiz.asbuildf() * ((HORIZ_MULT + 17) / 256.);
zvel = -pp->horizon.horiz.Tan() * ((HORIZ_MULT + 17) * 0.5);
actorNew->user.RotNum = 5;
NewStateGroup(actorNew, &sg_Rail[0]);
@ -13739,7 +13739,7 @@ int InitRocket(PLAYER* pp)
actorNew->spr.yrepeat = 90;
actorNew->spr.xrepeat = 90;
actorNew->spr.shade = -15;
zvel = -pp->horizon.horiz.asbuildf() * ((HORIZ_MULT + 35) / 256.);
zvel = -pp->horizon.horiz.Tan() * ((HORIZ_MULT + 35) * 0.5);
actorNew->set_const_clipdist(64 >> 2);
@ -13847,7 +13847,7 @@ int InitBunnyRocket(PLAYER* pp)
actorNew->spr.yrepeat = 64;
actorNew->spr.xrepeat = 64;
actorNew->spr.shade = -15;
zvel = -pp->horizon.horiz.asbuildf() * ((HORIZ_MULT + 35) / 256.);
zvel = -pp->horizon.horiz.Tan() * ((HORIZ_MULT + 35) * 0.5);
actorNew->set_const_clipdist(64 >> 2);
@ -13950,7 +13950,7 @@ int InitNuke(PLAYER* pp)
actorNew->spr.yrepeat = 128;
actorNew->spr.xrepeat = 128;
actorNew->spr.shade = -15;
zvel = -pp->horizon.horiz.asbuildf() * ((HORIZ_MULT + 36) / 256.);
zvel = -pp->horizon.horiz.Tan() * ((HORIZ_MULT + 36) * 0.5);
actorNew->set_const_clipdist(64 >> 2);
// Set to red palette
@ -14133,7 +14133,7 @@ int InitMicro(PLAYER* pp)
actorNew->spr.yrepeat = 24;
actorNew->spr.xrepeat = 24;
actorNew->spr.shade = -15;
actorNew->vel.Z = -pp->horizon.horiz.asbuildf() * HORIZ_MULTF;
actorNew->vel.Z = -pp->horizon.horiz.Tan() * HORIZ_MULTF;
actorNew->set_const_clipdist(64 >> 2);
// randomize zvelocity
@ -15361,7 +15361,7 @@ int InitTracerUzi(PLAYER* pp)
return 0;
}
actorNew->vel.Z = -pp->horizon.horiz.asbuildf() * actorNew->vel.X * (1. / 128.);
actorNew->vel.Z = -pp->horizon.horiz.Tan() * actorNew->vel.X;
plActor->set_native_clipdist(oclipdist);
@ -15390,7 +15390,7 @@ int InitTracerTurret(DSWActor* actor, DSWActor* Operator, fixedhoriz horiz)
// Inserting and setting up variables
auto actorNew = SpawnActor(STAT_MISSILE, 0, s_Tracer, actor->sector(),
actor->spr.pos.plusZ(-MulScaleF(horiz.asbuildf(), 72, 8)), actor->spr.angle, TRACER_VELOCITY);
actor->spr.pos.plusZ(-horiz.Tan() * 36.), actor->spr.angle, TRACER_VELOCITY);
actorNew->spr.hitag = LUMINOUS; //Always full brightness
if (Operator!= nullptr)
@ -15408,7 +15408,7 @@ int InitTracerTurret(DSWActor* actor, DSWActor* Operator, fixedhoriz horiz)
actorNew->spr.cstat |= (CSTAT_SPRITE_YCENTER);
actorNew->spr.cstat |= (CSTAT_SPRITE_INVISIBLE);
actorNew->vel.Z = -horiz.asbuildf() * actorNew->vel.X * (1. / 128.);
actorNew->vel.Z = -horiz.Tan() * actorNew->vel.X;
WeaponAutoAim(actor, actorNew, DAngle22_5 / 4, false);
@ -15629,7 +15629,7 @@ int InitUzi(PLAYER* pp)
else
{
daang = pp->angle.ang + mapangle(RandomRange(24) - 12);
daz = -pp->horizon.horiz.asbuildf() * (2000/256.) + (RandomRangeF(24000/256.) - 12000/256.);
daz = -pp->horizon.horiz.Tan() * 1000. + (RandomRangeF(24000/256.) - 12000/256.);
}
DVector3 vect(daang.ToVector() * 1024, daz);
@ -15804,7 +15804,7 @@ int InitTankShell(DSWActor* actor, PLAYER* pp)
actorNew->spr.cstat |= (CSTAT_SPRITE_YCENTER);
actorNew->spr.cstat |= (CSTAT_SPRITE_INVISIBLE);
actorNew->vel.Z = -pp->horizon.horiz.asbuildf() * actorNew->vel.X * (1. / 128.);
actorNew->vel.Z = -pp->horizon.horiz.Tan() * actorNew->vel.X;
WeaponAutoAim(actor, actorNew, DAngle22_5 / 2, false);
// a bit of randomness
@ -15873,7 +15873,7 @@ int InitTurretMicro(DSWActor* actor, PLAYER* pp)
actorNew->spr.yrepeat = 24;
actorNew->spr.xrepeat = 24;
actorNew->spr.shade = -15;
actorNew->vel.Z = -pp->horizon.horiz.asbuildf() * HORIZ_MULTF + RandomRangeF(8) - 5;
actorNew->vel.Z = -pp->horizon.horiz.Tan() * HORIZ_MULTF + RandomRangeF(8) - 5;
actorNew->set_const_clipdist(64 >> 2);
@ -15943,7 +15943,7 @@ int InitTurretRocket(DSWActor* actor, PLAYER* pp)
actorNew->user.Flags2 |= (SPR2_SO_MISSILE);
actorNew->spr.cstat |= (CSTAT_SPRITE_YCENTER);
actorNew->vel.Z = -pp->horizon.horiz.asbuildf() * actorNew->vel.X * (1. / 128.);
actorNew->vel.Z = -pp->horizon.horiz.Tan() * actorNew->vel.X;
WeaponAutoAim(actor, actorNew, DAngle22_5 / 2, false);
// a bit of randomness
@ -15983,7 +15983,7 @@ int InitTurretFireball(DSWActor* actor, PLAYER* pp)
actorNew->user.Flags2 |= (SPR2_SO_MISSILE);
actorNew->spr.cstat |= (CSTAT_SPRITE_YCENTER);
actorNew->vel.Z = -pp->horizon.horiz.asbuildf() * actorNew->vel.X * (1. / 128.);
actorNew->vel.Z = -pp->horizon.horiz.Tan() * actorNew->vel.X;
WeaponAutoAim(actor, actorNew, DAngle22_5 / 2, false);
// a bit of randomness
@ -16021,7 +16021,7 @@ int InitTurretRail(DSWActor* actor, PLAYER* pp)
actorNew->spr.yrepeat = 52;
actorNew->spr.xrepeat = 52;
actorNew->spr.shade = -15;
actorNew->vel.Z = -pp->horizon.horiz.asbuildf() * HORIZ_MULTF;
actorNew->vel.Z = -pp->horizon.horiz.Tan() * HORIZ_MULTF;
actorNew->user.RotNum = 5;
NewStateGroup(actorNew, &sg_Rail[0]);
@ -16069,7 +16069,7 @@ int InitTurretLaser(DSWActor* actor, PLAYER* pp)
actorNew->spr.shade = -15;
// the slower the missile travels the less of a zvel it needs
actorNew->vel.Z = -pp->horizon.horiz.asbuildf() * HORIZ_MULTF * 0.25;
actorNew->vel.Z = -pp->horizon.horiz.Tan() * 16.;
actorNew->user.Radius = 200;
actorNew->user.ceiling_dist = (1);
@ -16116,9 +16116,7 @@ int InitSobjMachineGun(DSWActor* actor, PLAYER* pp)
}
else
{
double horiz = max(pp->horizon.horiz.asbuildf(), -25.);
daz = -(2000/256) * horiz + RandomRangeF(80) - 40;
daz = -1000 * max(pp->horizon.horiz.Tan(), -0.1953125) + RandomRangeF(80) - 40;
daang = actor->spr.angle;
}
@ -16816,7 +16814,7 @@ int InitGrenade(PLAYER* pp)
if (pp->Flags & (PF_DIVING) || SpriteInUnderwaterArea(actorNew))
actorNew->user.Flags |= (SPR_UNDERWATER);
actorNew->vel.Z = -pp->horizon.horiz.asbuildf() * HORIZ_MULTF;
actorNew->vel.Z = -pp->horizon.horiz.Tan() * HORIZ_MULTF;
SAVE_CLIP;
actor->set_const_clipdist(0);
@ -16934,7 +16932,7 @@ int InitMine(PLAYER* pp)
actorNew->spr.xrepeat = 32;
actorNew->spr.shade = -15;
actorNew->set_const_clipdist(128 >> 2);
actorNew->vel.Z = -pp->horizon.horiz.asbuildf() * HORIZ_MULTF;
actorNew->vel.Z = -pp->horizon.horiz.Tan() * HORIZ_MULTF;
actorNew->user.WeaponNum = actor->user.WeaponNum;
actorNew->user.Radius = 200;
actorNew->user.ceiling_dist = (5);
@ -17069,7 +17067,7 @@ int InitFireball(PLAYER* pp)
actorNew->user.ceiling_dist = (6);
actorNew->user.floor_dist = (6);
double zvel = -pp->horizon.horiz.asbuildf() * (240. / 256.);
double zvel = -pp->horizon.horiz.Tan() * 120.;
// at certain angles the clipping box was big enough to block the
// initial positioning of the fireball.

View file

@ -31,7 +31,7 @@ BEGIN_SW_NS
#define NEW_ELECTRO 1
#define HORIZ_MULT 128
constexpr double HORIZ_MULTF = 0.5;
constexpr double HORIZ_MULTF = 64.;
inline DAngle AngToSprite(DSWActor* actor, DSWActor* other)
{