diff --git a/source/games/sw/src/player.cpp b/source/games/sw/src/player.cpp index fed5fd7a3..fd19e3132 100644 --- a/source/games/sw/src/player.cpp +++ b/source/games/sw/src/player.cpp @@ -1753,7 +1753,7 @@ void DoPlayerRecoil(PLAYER* pp) // controls how fast you move through the sin table pp->recoil_ndx += pp->recoil_speed; - if (bsin(pp->recoil_ndx) < 0) + if (BobVal(pp->recoil_ndx) < 0) { pp->Flags &= ~(PF_RECOIL); pp->recoil_ohorizoff = pp->recoil_horizoff = 0; @@ -1762,7 +1762,7 @@ void DoPlayerRecoil(PLAYER* pp) // move pp->q16horiz up and down pp->recoil_ohorizoff = pp->recoil_horizoff; - pp->recoil_horizoff = pp->recoil_amt * bsin(pp->recoil_ndx, 2); + pp->recoil_horizoff = pp->recoil_amt * BobVal(pp->recoil_ndx) * 4; } //--------------------------------------------------------------------------- diff --git a/source/games/sw/src/weapon.cpp b/source/games/sw/src/weapon.cpp index ce3330773..ae8a0e375 100644 --- a/source/games/sw/src/weapon.cpp +++ b/source/games/sw/src/weapon.cpp @@ -15587,10 +15587,7 @@ bool HitscanSpriteAdjust(DSWActor* actor, walltype* hit_wall) int InitUzi(PLAYER* pp) { DSWActor* actor = pp->actor; - short daang; HitInfo hit{}; - int daz, nz; - int xvect,yvect,zvect; ESpriteFlags cstat = 0; uint8_t pal = 0; static int uziclock=0; @@ -15625,33 +15622,23 @@ int InitUzi(PLAYER* pp) if (RANDOM_P2(1024) < 400) InitTracerUzi(pp); - nz = (pp->pos.Z + pp->bob_z) * zworldtoint; - daz = nz; - daang = 32; - double _daz = daz * inttoworld; - DAngle _daang = DAngle::fromBuild(daang); - if (WeaponAutoAimHitscan(pp->actor, &_daz, &_daang, false) != nullptr) + double nz = (pp->pos.Z + pp->bob_z); + double daz = nz; + DAngle daang = DAngle22_5 / 4; + if (WeaponAutoAimHitscan(pp->actor, &daz, &daang, false) != nullptr) { - daz = _daz * zworldtoint; - daang = _daang.Buildang(); - - daang += RandomRange(24) - 12; - daz += RandomRange(10000) - 5000; + daang += DAngle::fromBuild(RandomRange(24) - 12); + daz += RandomRangeF(10000/256.) - 5000/256.; } else { - //daang = NORM_ANGLE(pp->angle.ang.Buildang() + (RandomRange(50) - 25)); - daang = NORM_ANGLE(pp->angle.ang.Buildang() + (RandomRange(24) - 12)); - daz = -MulScale(pp->horizon.horiz.asq16(), 2000, 16) + (RandomRange(24000) - 12000); + daang = pp->angle.ang + DAngle::fromBuild(RandomRange(24) - 12); + daz = -pp->horizon.horiz.asbuildf() * (2000/256.) + (RandomRangeF(24000/256.) - 12000/256.); } + DVector3 vect(daang.ToVector() * 1024, daz); - xvect = bcos(daang); - yvect = bsin(daang); - zvect = daz; - DVector3 vect(xvect * inttoworld, yvect * inttoworld, zvect * zmaptoworld); - - FAFhitscan(DVector3(pp->pos, nz * zinttoworld), pp->cursector, vect, hit, CLIPMASK_MISSILE); + FAFhitscan(DVector3(pp->pos.XY(), nz), pp->cursector, vect, hit, CLIPMASK_MISSILE); if (hit.hitSector == nullptr) { @@ -15674,7 +15661,7 @@ int InitUzi(PLAYER* pp) if (SectorIsUnderwaterArea(hit.hitSector)) { WarpToSurface(hit.hitpos, &hit.hitSector); - ContinueHitscan(pp, hit.hitSector, hit.hitpos, DAngle::fromBuild(daang), vect); + ContinueHitscan(pp, hit.hitSector, hit.hitpos, daang, vect); return 0; } } @@ -15687,7 +15674,7 @@ int InitUzi(PLAYER* pp) if (SectorIsDiveArea(hit.hitSector)) { WarpToUnderwater(hit.hitpos, &hit.hitSector); - ContinueHitscan(pp, hit.hitSector, hit.hitpos, DAngle::fromBuild(daang), vect); + ContinueHitscan(pp, hit.hitSector, hit.hitpos, daang, vect); return 0; } @@ -18247,15 +18234,14 @@ DSWActor* QueueWallBlood(DSWActor* actor, DAngle bang) short w,nw,dang; DSWActor* spawnedActor; short rndnum; - int daz; + double daz; HitInfo hit{}; if (actor->user.Flags & (SPR_UNDERWATER) || SpriteInUnderwaterArea(actor) || SpriteInDiveArea(actor)) return nullptr; // No blood underwater! - daz = Z(RANDOM_P2(128))<<3; - daz -= (Z(128)<<2); - dang = (bang.Buildang() + (RANDOM_P2(128 << 5) >> 5)) - (64); + daz = RandomRange(128) * 8 - 512; + dang = (bang. + RandomAngle(22.5) - DAngle22_5 / 2; DVector3 vect(bcos(dang) * inttoworld, bsin(dang) * inttoworld, daz * zmaptoworld);