- the remaining angle stuff.

This commit is contained in:
Christoph Oelckers 2022-08-16 23:27:44 +02:00
parent 2d51058de8
commit 6bdfa09dd1
33 changed files with 70 additions and 63 deletions

View file

@ -122,6 +122,11 @@ public:
spr.__int_angle += int16_t(a);
}
void norm_ang()
{
spr.__int_angle &= 2047;
}
// Same as above but with invertex y and z axes to match the renderer's coordinate system.
DVector3 render_pos() const
{

View file

@ -503,6 +503,11 @@ struct spritetypebase
__int_angle = int16_t(a);
}
void add_int_ang(int a)
{
__int_angle += int16_t(a);
}
void copy_ang(const spritetypebase* other)
{
__int_angle = other->int_ang();

View file

@ -3463,7 +3463,7 @@ void useSectorWindGen(DBloodActor* sourceactor, sectortype* pSector)
}
}
else if (sourceactor->spr.cstat & CSTAT_SPRITE_MOVE_FORWARD) sourceactor->add_int_ang(sourceactor->xspr.data4);
else if (sourceactor->spr.cstat & CSTAT_SPRITE_MOVE_REVERSE) sourceactor->spr.__int_angle -= sourceactor->xspr.data4;
else if (sourceactor->spr.cstat & CSTAT_SPRITE_MOVE_REVERSE) sourceactor->add_int_ang(-sourceactor->xspr.data4);
else if (sourceactor->xspr.sysData1 == 0)
{
if ((ang += sourceactor->xspr.data4) >= kAng180) sourceactor->xspr.sysData1 = 1;
@ -8918,7 +8918,7 @@ void aiPatrolThink(DBloodActor* actor)
if (!(markeractor->spr.flags & kModernTypeFlag4))
{
actor->xspr.goalAng = ((!(markeractor->spr.flags & kModernTypeFlag8) && actor->xspr.unused2) ? markeractor->int_ang() + kAng180 : markeractor->int_ang()) & 2047;
if ((int)actor->spr.__int_angle != (int)actor->xspr.goalAng) // let the enemy play move animation while turning
if ((int)actor->int_ang() != (int)actor->xspr.goalAng) // let the enemy play move animation while turning
return;
}

View file

@ -118,7 +118,7 @@ void GameInterface::UpdateSounds()
if (gMe->actor)
{
listener.angle = -gMe->actor->spr.__int_angle * float(BAngRadian); // Build uses a period of 2048.
listener.angle = -gMe->actor->spr.int_ang() * float(BAngRadian); // Build uses a period of 2048.
listener.velocity.Zero();
listener.position = GetSoundPos(gMe->actor->int_pos());
listener.valid = true;

View file

@ -854,7 +854,7 @@ FString GameInterface::GetCoordString()
FString out;
out.Format("pos= %d, %d, %d - angle = %2.3f",
gMe->actor->int_pos().X, gMe->actor->int_pos().Y, gMe->actor->int_pos().Z, gMe->actor->spr.__int_angle * BAngToDegree);
gMe->actor->int_pos().X, gMe->actor->int_pos().Y, gMe->actor->int_pos().Z, gMe->actor->spr.int_ang() * BAngToDegree);
return out;
}

View file

@ -2709,7 +2709,7 @@ void handle_se00(DDukeActor* actor)
}
act2->add_int_ang((l * q));
act2->spr.__int_angle &= 2047;
act2->norm_ang();
act2->add_int_z(zchange);
@ -3722,7 +3722,7 @@ void handle_se13(DDukeActor* actor)
}
if (actor->temp_data[2] == 4 && actor->spr.__int_angle != 512)
if (actor->temp_data[2] == 4 && actor->int_ang() != 512)
for (int x = 0; x < 7; x++) RANDOMSCRAP(actor);
}
@ -4472,7 +4472,7 @@ void handle_se32(DDukeActor *actor)
if (actor->temp_data[2] == 1) // Retract
{
if (actor->spr.__int_angle != 1536)
if (actor->int_ang() != 1536)
{
if (abs(sc->int_ceilingz() - actor->int_pos().Z) < (actor->spr.yvel << 1))
{
@ -4660,7 +4660,7 @@ void handle_se31(DDukeActor* actor, bool choosedir)
if (actor->temp_data[2] == 1) // Retract
{
if (actor->spr.__int_angle != 1536)
if (actor->int_ang() != 1536)
{
if (abs(sec->int_floorz() - actor->int_pos().Z) < actor->spr.yvel)
{
@ -4915,7 +4915,7 @@ int dodge(DDukeActor* actor)
d = bxvect * by - byvect * bx;
if (abs(d) < 65536 * 64)
{
actor->spr.__int_angle -= 512 + (krand() & 1024);
actor->add_int_ang(-(512 + (krand() & 1024)));
return 1;
}
}
@ -5041,7 +5041,7 @@ void alterang(int ang, DDukeActor* actor, int playernum)
j = 128 - (krand() & 256);
actor->add_int_ang(j);
if (hits(actor) < 844)
actor->spr.__int_angle -= j;
actor->add_int_ang(-j);
}
}
else if (ticselapsed > 18 && ticselapsed < 26) // choose

View file

@ -2382,8 +2382,8 @@ static void greenslime(DDukeActor *actor)
if (actor->spr.xvel < 32) actor->spr.xvel += 4;
actor->spr.xvel = 64 - bcos(actor->temp_data[1], -9);
actor->add_int_ang(
getincangle(actor->int_ang(), getangle(ps[p].pos.XY() - actor->spr.pos.XY())) >> 3);
actor->add_int_ang(getincangle(actor->int_ang(),
getangle(ps[p].pos.XY() - actor->spr.pos.XY())) >> 3);
// TJR
}

View file

@ -943,12 +943,12 @@ static void chickenarrow(DDukeActor* actor)
if (ang3 > 1023)
actor->add_int_ang(51);
else
actor->spr.__int_angle -= 51;
actor->add_int_ang(-51);
}
else if (ang2 > 100)
{
if (ang3 > 1023)
actor->spr.__int_angle -= 51;
actor->add_int_ang(-51);
else
actor->add_int_ang(51);
}

View file

@ -219,7 +219,7 @@ void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, int smoothrat
t->xrepeat = 0;
else
{
t->__int_angle = getangle(x - t->int_pos().X, y - t->int_pos().Y);
t->set_int_ang(getangle(x - t->int_pos().X, y - t->int_pos().Y));
t->pos.X = OwnerAc->spr.pos.X + buildang(t->int_ang()).fcos();
t->pos.Y = OwnerAc->spr.pos.Y + buildang(t->int_ang()).fsin();
}
@ -705,7 +705,7 @@ void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, int smoothrat
t->picnum = OwnerAc->dispicnum;
t->pal = OwnerAc->spr.pal;
t->shade = OwnerAc->spr.shade;
t->__int_angle = OwnerAc->int_ang();
t->set_int_ang(OwnerAc->int_ang());
t->cstat = CSTAT_SPRITE_TRANSLUCENT | OwnerAc->spr.cstat;
}
}

View file

@ -213,7 +213,7 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, int smoothrat
t->xrepeat = 0;
else
{
t->__int_angle = getangle(x - t->int_pos().X, y - t->int_pos().Y);
t->set_int_ang(getangle(x - t->int_pos().X, y - t->int_pos().Y));
t->pos.X = OwnerAc->spr.pos.X + buildang(t->int_ang()).fcos();
t->pos.Y = OwnerAc->spr.pos.Y + buildang(t->int_ang()).fsin();
}
@ -938,7 +938,7 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, int smoothrat
t->picnum = OwnerAc->dispicnum;
t->pal = OwnerAc->spr.pal;
t->shade = OwnerAc->spr.shade;
t->__int_angle = OwnerAc->int_ang();
t->set_int_ang(OwnerAc->int_ang());
t->cstat = CSTAT_SPRITE_TRANSLUCENT | OwnerAc->spr.cstat;
}
}

View file

@ -190,7 +190,7 @@ void resetpins(sectortype* sect)
{
spawned->spr.clipdist = (1 + (krand() % 1)) * 16 + 32;
}
spawned->spr.__int_angle -= ((krand() & 32) - (krand() & 64)) & 2047;
spawned->add_int_ang(-(((krand() & 32) - (krand() & 64)) & 2047));
}
}
if (a2->spr.picnum == 280)

View file

@ -567,7 +567,7 @@ bool GameInterface::DrawAutomapPlayer(int mx, int my, int cposx, int cposy, int
int xx = twod->GetWidth() / 2. + x1 / 4096.;
int yy = twod->GetHeight() / 2. + y1 / 4096.;
daang = ((!SyncInput() ? act->spr.__int_angle : act->interpolatedang(smoothratio)) - cang) & 2047;
daang = ((!SyncInput() ? act->int_ang() : act->interpolatedang(smoothratio)) - cang) & 2047;
if (p == screenpeek || ud.coop == 1)
{

View file

@ -1416,14 +1416,14 @@ static int ifcanshoottarget(DDukeActor *actor, int g_p, int g_x)
j = 0;
else
{
actor->add_int_ang(angdif); j = hitasprite(actor, &hit); actor->spr.__int_angle -= angdif;
actor->add_int_ang(angdif); j = hitasprite(actor, &hit); actor->add_int_ang(-angdif);
if (j > sclip)
{
if (hit != nullptr && hit->spr.picnum == actor->spr.picnum)
j = 0;
else
{
actor->spr.__int_angle -= angdif; j = hitasprite(actor, &hit); actor->add_int_ang(angdif);
actor->add_int_ang(-angdif); j = hitasprite(actor, &hit); actor->add_int_ang(angdif);
if (j > 768)
{
if (hit != nullptr && hit->spr.picnum == actor->spr.picnum)

View file

@ -789,7 +789,7 @@ static void shootrpg(DDukeActor *actor, int p, int sx, int sy, int sz, int sa, i
}
spawned->add_int_pos({ -xoffs, -yoffs, 0 });
spawned->spr.__int_angle -= aoffs;
spawned->add_int_ang(-aoffs);
spawned->spr.xrepeat = 24;
spawned->spr.yrepeat = 24;
@ -2375,8 +2375,7 @@ static void operateweapon(int snum, ESyncBits actions)
auto j = spawn(pact, SHELL);
if (j)
{
j->add_int_ang(1024);
j->spr.__int_angle &= 2047;
j->set_int_ang((j->int_ang() + 1024) & 2047);
j->spr.xvel += 32;
j->spr.pos.Z += 3;
ssp(j, CLIPMASK0);

View file

@ -2977,8 +2977,7 @@ static void operateweapon(int snum, ESyncBits actions, sectortype* psectp)
if (j)
{
j->add_int_ang(1024);
j->spr.__int_angle &= 2047;
j->set_int_ang((j->int_ang() + 1024) & 2047);
j->spr.xvel += 32;
j->spr.pos.Z += 3;
ssp(j, CLIPMASK0);

View file

@ -125,8 +125,7 @@ void DoSpawn(player_struct *p, int snum)
else if((aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_SPAWNTYPE3 ) )
{
// like chaingun shells
j->add_int_ang(1024);
j->spr.__int_angle &= 2047;
j->set_int_ang((j->int_ang() + 1024) & 2047);
j->spr.xvel += 32;
j->add_int_z(3<<8);
ssp(j,CLIPMASK0);

View file

@ -927,7 +927,7 @@ static void handle_st25(sectortype* sptr, DDukeActor* actor)
if (act3->spr.lotag == 15)
{
act3->sector()->lotag ^= 0x8000; // Toggle the open or close
act3->add_int_ang(1024;
act3->add_int_ang(1024);
if (act3->temp_data[4]) callsound(act3->sector(), act3);
callsound(act3->sector(), act3);
if (act3->sector()->lotag & 0x8000) act3->temp_data[4] = 1;

View file

@ -1049,7 +1049,7 @@ void checkhitsprite_d(DDukeActor* targ, DDukeActor* proj)
if (proj->spr.picnum == QUEBALL || proj->spr.picnum == STRIPEBALL)
{
proj->spr.xvel = (targ->spr.xvel >> 1) + (targ->spr.xvel >> 2);
proj->spr.__int_angle -= (targ->int_ang() << 1) + 1024;
proj->add_int_ang(-((targ->int_ang() << 1) + 1024));
targ->set_int_ang(getangle(targ->int_pos().X - proj->int_pos().X, targ->int_pos().Y - proj->int_pos().Y) - 512);
if (S_CheckSoundPlaying(POOLBALLHIT) < 2)
S_PlayActorSound(POOLBALLHIT, targ);

View file

@ -2063,7 +2063,7 @@ void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj)
break;
case BOWLINGBALL:
proj->spr.xvel = (targ->spr.xvel >> 1) + (targ->spr.xvel >> 2);
proj->spr.__int_angle -= (krand() & 16);
proj->add_int_ang(-(krand() & 16));
S_PlayActorSound(355, targ);
break;
@ -2076,7 +2076,7 @@ void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj)
if (proj->spr.picnum == QUEBALL || proj->spr.picnum == STRIPEBALL)
{
proj->spr.xvel = (targ->spr.xvel >> 1) + (targ->spr.xvel >> 2);
proj->spr.__int_angle -= (targ->int_ang() << 1) + 1024;
proj->add_int_ang(-((targ->int_ang() << 1) + 1024));
targ->set_int_ang(getangle(targ->int_pos().X - proj->int_pos().X, targ->int_pos().Y - proj->int_pos().Y) - 512);
if (S_CheckSoundPlaying(POOLBALLHIT) < 2)
S_PlayActorSound(POOLBALLHIT, targ);
@ -2084,14 +2084,14 @@ void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj)
else if (proj->spr.picnum == BOWLINGPIN || proj->spr.picnum == BOWLINGPIN + 1)
{
proj->spr.xvel = (targ->spr.xvel >> 1) + (targ->spr.xvel >> 2);
proj->spr.__int_angle -= ((targ->int_ang() << 1) + krand()) & 64;
proj->add_int_ang(-(((targ->int_ang() << 1) + krand()) & 64));
targ->set_int_ang((targ->int_ang() + krand()) & 16);
S_PlayActorSound(355, targ);
}
else if (proj->spr.picnum == HENSTAND || proj->spr.picnum == HENSTAND + 1)
{
proj->spr.xvel = (targ->spr.xvel >> 1) + (targ->spr.xvel >> 2);
proj->spr.__int_angle -= ((targ->int_ang() << 1) + krand()) & 16;
proj->add_int_ang(-(((targ->int_ang() << 1) + krand()) & 16));
targ->set_int_ang((targ->int_ang() + krand()) & 16);
S_PlayActorSound(355, targ);
}

View file

@ -833,7 +833,7 @@ void spawneffector(DDukeActor* actor, TArray<DDukeActor*>* actors)
case SE_31_FLOOR_RISE_FALL:
actor->temp_data[1] = sectp->int_floorz();
// actor->temp_data[2] = actor->spr.hitag;
if (actor->spr.__int_angle != 1536) sectp->setfloorz(actor->spr.pos.Z);
if (actor->int_ang() != 1536) sectp->setfloorz(actor->spr.pos.Z);
for (auto& wal : wallsofsector(sectp))
if (wal.hitag == 0) wal.hitag = 9999;
@ -844,7 +844,7 @@ void spawneffector(DDukeActor* actor, TArray<DDukeActor*>* actors)
case SE_32_CEILING_RISE_FALL:
actor->temp_data[1] = sectp->int_ceilingz();
actor->temp_data[2] = actor->spr.hitag;
if (actor->spr.__int_angle != 1536) sectp->setceilingz(actor->spr.pos.Z);
if (actor->int_ang() != 1536) sectp->setceilingz(actor->spr.pos.Z);
for (auto& wal : wallsofsector(sectp))
if (wal.hitag == 0) wal.hitag = 9999;

View file

@ -188,7 +188,7 @@ void BuildFish(DExhumedActor* pActor, int x, int y, int z, sectortype* pSector,
void IdleFish(DExhumedActor* pActor, int edx)
{
pActor->add_int_ang((256 - RandomSize(9)) + 1024);
pActor->spr.__int_angle &= kAngleMask;
pActor->norm_ang();
pActor->spr.xvel = bcos(pActor->int_ang(), -8);
pActor->spr.yvel = bsin(pActor->int_ang(), -8);

View file

@ -628,7 +628,7 @@ void ProcessSpriteTag(DExhumedActor* pActor, int nLotag, int nHitag)
{
auto pSector = pActor->sector();
pSector->Speed = nSpeed;
pSector->Flag |= pActor->int_ang();
pSector->Flag |= pActor->spr.__int_angle;
DeleteActor(pActor);
return;

View file

@ -265,7 +265,7 @@ void RestartPlayer(int nPlayer)
pActor->set_int_pos(nNStartSprite->int_pos());
ChangeActorSect(pActor, nNStartSprite->sector());
plr->angle.ang = buildang(nNStartSprite->spr.__int_angle&kAngleMask);
plr->angle.ang = buildang(nNStartSprite->int_ang() & kAngleMask);
pActor->set_int_ang(plr->angle.ang.asbuild());
floorsprt = insertActor(pActor->sector(), 0);

View file

@ -624,8 +624,8 @@ void AIQueenEgg::Tick(RunListEvent* ev)
}
[[fallthrough]];
case kHitWall:
pActor->add_int_ang((RandomSize(9) + 768);
pActor->spr.__int_angle &= kAngleMask;
pActor->set_int_ang((RandomSize(9) + 768));
pActor->norm_ang();
pActor->spr.xvel = bcos(pActor->int_ang(), -3);
pActor->spr.yvel = bsin(pActor->int_ang(), -3);
pActor->spr.zvel = -RandomSize(5);
@ -907,7 +907,7 @@ void AIQueenHead::Tick(RunListEvent* ev)
D3PlayFX(StaticSound[kSoundQTail] | 0x2000, pActor);
pActor->add_int_ang(RandomSize(9) + 768);
pActor->spr.__int_angle &= kAngleMask;
pActor->norm_ang();
pActor->spr.zvel = (-20) - RandomSize(6);
@ -1304,7 +1304,7 @@ void AIQueen::Tick(RunListEvent* ev)
[[fallthrough]];
case 0x8000:
pActor->add_int_ang(256);
pActor->spr.__int_angle &= kAngleMask;
pActor->norm_ang();
SetQueenSpeed(pActor, si);
break;

View file

@ -411,7 +411,7 @@ void AIScorp::Effect(RunListEvent* ev, DExhumedActor* pTarget, int mode)
{
PlotCourseToSprite(pActor, pTarget);
pActor->add_int_ang(RandomSize(7) - 63);
pActor->spr.__int_angle &= kAngleMask;
pActor->norm_ang();
pActor->spr.xvel = bcos(pActor->int_ang());
pActor->spr.yvel = bsin(pActor->int_ang());

View file

@ -587,7 +587,7 @@ int seq_PlotSequence(int nSprite, int16_t edx, int16_t nFrame, int16_t ecx)
tsp->pal = pTSprite->pal;
tsp->xrepeat = pTSprite->xrepeat;
tsp->yrepeat = pTSprite->yrepeat;
tsp->__int_angle = pTSprite->int_ang();
tsp->copy_ang(pTSprite);
tsp->ownerActor = pTSprite->ownerActor;
tsp->sectp = pTSprite->sectp;
tsp->cstat = pTSprite->cstat |= CSTAT_SPRITE_YCENTER;

View file

@ -74,7 +74,7 @@ static void analyzesprites(tspriteArray& tsprites, int x, int y, int z, double c
{
// interpolate sprite position
pTSprite->pos = pTSprite->ownerActor->interpolatedvec3(smoothratio);
pTSprite->__int_angle = pTSprite->ownerActor->interpolatedang(smoothratio);
pTSprite->set_int_ang(pTSprite->ownerActor->interpolatedang(smoothratio));
}
}

View file

@ -157,7 +157,7 @@ void AIWasp::Damage(RunListEvent* ev)
pActor->nAction = 1;
pActor->add_int_ang(RandomSize(9) + 768);
pActor->spr.__int_angle &= kAngleMask;
pActor->norm_ang();
pActor->nVel = 3000;
@ -305,7 +305,7 @@ void AIWasp::Tick(RunListEvent* ev)
if (bVal)
{
pActor->add_int_ang(RandomSize(9) + 768);
pActor->spr.__int_angle &= kAngleMask;
pActor->norm_ang();
pActor->spr.zvel = (-20) - RandomSize(6);
pActor->nAction = 1;

View file

@ -1200,7 +1200,7 @@ DSWActor* BunnyHatch2(DSWActor* actor)
actorNew->spr.xrepeat = actorNew->spr.yrepeat = 64;
actorNew->spr.xvel = 150 + RandomRange(1000);
actorNew->user.Health = 1; // Easy to pop. Like shootn' skeet.
actorNew->spr.__int_angle -= RandomRange(128);
actorNew->add_int_ang(-RandomRange(128));
actorNew->add_int_ang(RandomRange(128));
}
else

View file

@ -669,7 +669,7 @@ void analyzesprites(tspriteArray& tsprites, int viewx, int viewy, int viewz, int
{
tsp->picnum = DART_PIC;
tsp->__int_angle = NORM_ANGLE(tsp->int_ang() - 512 - 24);
tsp->set_int_ang(NORM_ANGLE(tsp->int_ang() - 512 - 24));
tsp->xrepeat = tsp->yrepeat = DART_REPEAT;
tsp->cstat |= (CSTAT_SPRITE_ALIGNMENT_WALL);
}
@ -733,7 +733,7 @@ void analyzesprites(tspriteArray& tsprites, int viewx, int viewy, int viewz, int
if (tsp->statnum == STAT_STAR_QUEUE)
{
tsp->picnum = DART_PIC;
tsp->__int_angle = NORM_ANGLE(tsp->int_ang() - 512);
tsp->set_int_ang(NORM_ANGLE(tsp->int_ang() - 512));
tsp->xrepeat = tsp->yrepeat = DART_REPEAT;
tsp->cstat |= (CSTAT_SPRITE_ALIGNMENT_WALL);
}
@ -775,7 +775,7 @@ void analyzesprites(tspriteArray& tsprites, int viewx, int viewy, int viewz, int
pos.Z = tsp->int_pos().Z + pp->si.Z;
tsp->set_int_pos(pos);
tsp->__int_angle = pp->siang;
tsp->set_int_ang(pp->siang);
//continue;
}
else
@ -792,7 +792,7 @@ void analyzesprites(tspriteArray& tsprites, int viewx, int viewy, int viewz, int
tsp->add_int_x(-MulScale(pp->pos.X - pp->opos.X, sr, 16));
tsp->add_int_y(-MulScale(pp->pos.Y - pp->opos.Y, sr, 16));
tsp->add_int_z(-MulScale(pp->pos.Z - pp->opos.Z, sr, 16));
tsp->__int_angle -= MulScale(pp->angle.ang.asbuild() - pp->angle.oang.asbuild(), sr, 16);
tsp->add_int_ang(-MulScale(pp->angle.ang.asbuild() - pp->angle.oang.asbuild(), sr, 16));
}
}
@ -1654,7 +1654,7 @@ bool GameInterface::DrawAutomapPlayer(int mx, int my, int cposx, int cposy, int
if (czoom > 192)
{
daang = ((!SyncInput() ? actor->spr.__int_angle : actor->interpolatedang(smoothratio)) - cang) & 2047;
daang = ((!SyncInput() ? actor->int_ang() : actor->interpolatedang(smoothratio)) - cang) & 2047;
// Special case tiles
if (actor->spr.picnum == 3123) break;

View file

@ -376,7 +376,7 @@ void so_dointerpolations(int32_t smoothratio) // Stick at b
continue; // target went poof.
interp->data[i].bakipos = (interp->data[i].curelement == soi_sprang) ?
(double)actorofang->spr.__int_angle :
(double)actorofang->int_ang() :
getvalue(interp->data[i]);
}
if (interp->tic == 0) // Only if the SO has just moved

View file

@ -284,7 +284,7 @@ int DoSkullBeginDeath(DSWActor* actor)
if (num_ord > 3) num_ord = 3;
for (i=0; i<num_ord; i++)
{
actor->set_int_ang(NORM_ANGLE(actor->spr.__int_angle+(i*1024)));
actor->set_int_ang(NORM_ANGLE(actor->int_ang() + (i*1024)));
InitSpriteChemBomb(actor);
}
break;
@ -664,7 +664,7 @@ int DoBettyBeginDeath(DSWActor* actor)
if (num_ord > 3) num_ord = 3;
for (i=0; i<num_ord; i++)
{
actor->set_int_ang(NORM_ANGLE(actor->spr.__int_angle+(i*1024)));
actor->set_int_ang(NORM_ANGLE(actor->int_ang() + (i*1024)));
InitSpriteChemBomb(actor);
}
break;

View file

@ -7678,7 +7678,7 @@ int MissileSeek(DSWActor* actor, int16_t delay_tics, int16_t aware_range/*, int1
delta_ang = -32;
}
actor->spr.__int_angle -= delta_ang;
actor->add_int_ang(-delta_ang);
zh = ActorZOfTop(actor) + (ActorSizeZ(actor) >> 2);
@ -7744,7 +7744,7 @@ int ComboMissileSeek(DSWActor* actor, int16_t delay_tics, int16_t aware_range/*,
delta_ang = -32;
}
actor->spr.__int_angle -= delta_ang;
actor->add_int_ang(-delta_ang);
actor->user.change.X = MOVEx(actor->spr.xvel, actor->int_ang());
actor->user.change.Y = MOVEy(actor->spr.xvel, actor->int_ang());
@ -9670,8 +9670,8 @@ int SpawnCoolieExp(DSWActor* actor)
actor->user.Counter = RandomRange(120); // This is the wait til birth time!
zh = actor->int_pos().Z - ActorSizeZ(actor) + (ActorSizeZ(actor) >> 2);
nx = actor->int_pos().X + MOVEx(64, actor->spr.__int_angle+1024);
ny = actor->int_pos().Y + MOVEy(64, actor->spr.__int_angle+1024);
nx = actor->int_pos().X + MOVEx(64, actor->int_ang() + 1024);
ny = actor->int_pos().Y + MOVEy(64, actor->int_ang() + 1024);
PlaySound(DIGI_COOLIEEXPLODE, actor, v3df_none);
@ -15066,7 +15066,7 @@ int BulletHitSprite(DSWActor* actor, DSWActor* hitActor, int hit_x, int hit_y, i
if ((RANDOM_P2(1024<<5)>>5) < 256)
{
if (!hitActor->user.PlayerP)
SpawnBlood(hitActor, nullptr, NORM_ANGLE(actor->spr.__int_angle+1024),hit_x, hit_y, hit_z);
SpawnBlood(hitActor, nullptr, NORM_ANGLE(actor->int_ang() + 1024),hit_x, hit_y, hit_z);
if (hitActor->user.ID != TRASHCAN && hitActor->user.ID != ZILLA_RUN_R0)
QueueWallBlood(hitActor, actor->int_ang()); //QueueWallBlood needs bullet angle.
}