- handle bsin / bcos.

This commit is contained in:
Christoph Oelckers 2022-09-08 20:00:06 +02:00
parent 3dbf7740c0
commit 82ac3c50e8
2 changed files with 17 additions and 31 deletions

View file

@ -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;
}
//---------------------------------------------------------------------------

View file

@ -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);