mirror of
https://github.com/ZDoom/Raze.git
synced 2025-03-13 20:42:11 +00:00
- more angles
This commit is contained in:
parent
2533841541
commit
c2f4fa8bb5
15 changed files with 34 additions and 25 deletions
|
@ -117,6 +117,10 @@ public:
|
|||
spr.__int_angle = int16_t(a);
|
||||
}
|
||||
|
||||
void add_int_ang(int a)
|
||||
{
|
||||
spr.__int_angle += int16_t(a);
|
||||
}
|
||||
|
||||
// Same as above but with invertex y and z axes to match the renderer's coordinate system.
|
||||
DVector3 render_pos() const
|
||||
|
|
|
@ -503,6 +503,11 @@ struct spritetypebase
|
|||
__int_angle = int16_t(a);
|
||||
}
|
||||
|
||||
void copy_ang(const spritetypebase* other)
|
||||
{
|
||||
__int_angle = other->int_ang();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -1102,7 +1102,7 @@ void HWWall::Process(HWDrawInfo* di, walltype* wal, sectortype* frontsector, sec
|
|||
int HWWall::CheckWallSprite(tspritetype* spr, tspritetype* last)
|
||||
{
|
||||
// If the position changed we need to recalculate everything.
|
||||
if (spr->pos.XY() != last->pos.XY() || spr->sectp != last->sectp || spr->__int_angle != last->int_ang()) return 3;
|
||||
if (spr->pos.XY() != last->pos.XY() || spr->sectp != last->sectp || spr->int_ang() != last->int_ang()) return 3;
|
||||
|
||||
// if the horizontal orientation changes we need to recalculate the walls this attaches to, but not the positioning.
|
||||
if (spr->xrepeat != last->xrepeat || spr->xoffset != last->xoffset || spr->picnum != last->picnum || ((spr->cstat ^ last->cstat) & CSTAT_SPRITE_XFLIP)) return 2;
|
||||
|
|
|
@ -101,7 +101,7 @@ tspritetype* viewInsertTSprite(tspriteArray& tsprites, sectortype* pSector, int
|
|||
{
|
||||
pos = parentTSprite->pos;
|
||||
pTSprite->ownerActor = parentTSprite->ownerActor;
|
||||
pTSprite->__int_angle = parentTSprite->int_ang();
|
||||
pTSprite->copy_ang(parentTSprite);
|
||||
}
|
||||
pos.X += gCameraAng.fcos() * 2;
|
||||
pos.Y += gCameraAng.fsin() * 2;
|
||||
|
@ -451,7 +451,7 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF
|
|||
pNSprite->pal = 2;
|
||||
pNSprite->xrepeat = pNSprite->yrepeat = 64;
|
||||
pNSprite->cstat |= CSTAT_SPRITE_ONE_SIDE | CSTAT_SPRITE_ALIGNMENT_FLOOR | CSTAT_SPRITE_YFLIP | CSTAT_SPRITE_TRANSLUCENT;
|
||||
pNSprite->__int_angle = pTSprite->int_ang();
|
||||
pNSprite->copy_ang(pTSprite);
|
||||
pNSprite->ownerActor = pTSprite->ownerActor;
|
||||
break;
|
||||
}
|
||||
|
@ -469,7 +469,7 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF
|
|||
pNSprite->pal = 2;
|
||||
pNSprite->xrepeat = pNSprite->yrepeat = nShade;
|
||||
pNSprite->cstat |= CSTAT_SPRITE_ONE_SIDE | CSTAT_SPRITE_ALIGNMENT_FLOOR | CSTAT_SPRITE_TRANSLUCENT;
|
||||
pNSprite->__int_angle = pTSprite->int_ang();
|
||||
pNSprite->copy_ang(pTSprite);
|
||||
pNSprite->ownerActor = pTSprite->ownerActor;
|
||||
break;
|
||||
}
|
||||
|
@ -507,7 +507,7 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF
|
|||
auto& nVoxel = voxelIndex[nTile];
|
||||
if (cl_showweapon == 2 && r_voxels && nVoxel != -1)
|
||||
{
|
||||
pNSprite->__int_angle = (gView->actor->int_ang() + 512) & 2047; // always face viewer
|
||||
pNSprite->set_int_ang((gView->actor->int_ang() + 512) & 2047); // always face viewer
|
||||
pNSprite->cstat |= CSTAT_SPRITE_ALIGNMENT_SLAB;
|
||||
pNSprite->cstat &= ~CSTAT_SPRITE_YFLIP;
|
||||
pNSprite->picnum = nVoxel;
|
||||
|
@ -517,7 +517,7 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF
|
|||
pNSprite->add_int_y(MulScale(128, Sin(gView->actor->int_ang()), 30));
|
||||
}
|
||||
if ((pPlayer->curWeapon == kWeapLifeLeech) || (pPlayer->curWeapon == kWeapVoodooDoll)) // make lifeleech/voodoo doll always face viewer like sprite
|
||||
pNSprite->__int_angle = (pNSprite->int_ang() + 512) & 2047; // offset angle 90 degrees
|
||||
pNSprite->set_int_ang((pNSprite->int_ang() + 512) & 2047); // offset angle 90 degrees
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -579,7 +579,7 @@ void viewProcessSprites(tspriteArray& tsprites, int32_t cX, int32_t cY, int32_t
|
|||
if (cl_interpolate && owneractor->interpolated && !(pTSprite->flags & 512))
|
||||
{
|
||||
pTSprite->pos = owneractor->interpolatedvec3(gInterpolate);
|
||||
pTSprite->__int_angle = owneractor->interpolatedang(gInterpolate);
|
||||
pTSprite->set_int_ang(owneractor->interpolatedang(gInterpolate));
|
||||
}
|
||||
int nAnim = 0;
|
||||
switch (picanm[nTile].extra & 7) {
|
||||
|
@ -669,7 +669,7 @@ void viewProcessSprites(tspriteArray& tsprites, int32_t cX, int32_t cY, int32_t
|
|||
pTSprite->picnum = voxelIndex[pTSprite->picnum];
|
||||
if ((picanm[nTile].extra & 7) == 7)
|
||||
{
|
||||
pTSprite->__int_angle = myclock & 2047;
|
||||
pTSprite->set_int_ang( myclock & 2047);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1357,7 +1357,7 @@ void nnExtProcessSuperSprites()
|
|||
if (debrisactor->vel.X || debrisactor->vel.Y)
|
||||
debrisactor->xspr.goalAng = getangle(debrisactor->vel.X, debrisactor->vel.Y) & 2047;
|
||||
|
||||
int ang = debrisactor->spr.__int_angle & 2047;
|
||||
int ang = debrisactor->int_ang() & 2047;
|
||||
if ((uwater = spriteIsUnderwater(debrisactor)) == false) evKillActor(debrisactor, kCallbackEnemeyBubble);
|
||||
else if (Chance(0x1000 - mass))
|
||||
{
|
||||
|
@ -4604,7 +4604,7 @@ bool condCheckSprite(DBloodActor* aCond, int cmpOp, bool PUSH)
|
|||
switch (cond)
|
||||
{
|
||||
default: break;
|
||||
case 0: return condCmp((arg3 == 0) ? (objActor->spr.__int_angle & 2047) : objActor->int_ang(), arg1, arg2, cmpOp);
|
||||
case 0: return condCmp((arg3 == 0) ? (objActor->int_ang() & 2047) : objActor->int_ang(), arg1, arg2, cmpOp);
|
||||
case 5: return condCmp(objActor->spr.statnum, arg1, arg2, cmpOp);
|
||||
case 6: return ((objActor->spr.flags & kHitagRespawn) || objActor->spr.statnum == kStatRespawn);
|
||||
case 7: return condCmp(spriteGetSlope(objActor), arg1, arg2, cmpOp);
|
||||
|
@ -8098,7 +8098,7 @@ void aiPatrolStop(DBloodActor* actor, DBloodActor* targetactor, bool alarm)
|
|||
|
||||
if (mytarget && mytarget->spr.type == kMarkerPath)
|
||||
{
|
||||
if (targetactor == nullptr) actor->set_int_ang(mytarget->spr.__int_angle & 2047);
|
||||
if (targetactor == nullptr) actor->set_int_ang(mytarget->int_ang() & 2047);
|
||||
actor->SetTarget(nullptr);
|
||||
}
|
||||
|
||||
|
|
|
@ -2661,7 +2661,7 @@ void handle_se00(DDukeActor* actor)
|
|||
return;
|
||||
}
|
||||
|
||||
if (Owner->spr.__int_angle > 1024)
|
||||
if (Owner->int_ang() > 1024)
|
||||
l = -1;
|
||||
else l = 1;
|
||||
if (actor->temp_data[3] == 0)
|
||||
|
@ -4497,7 +4497,7 @@ void handle_se32(DDukeActor *actor)
|
|||
return;
|
||||
}
|
||||
|
||||
if ((actor->spr.__int_angle & 2047) == 1536)
|
||||
if ((actor->int_ang() & 2047) == 1536)
|
||||
{
|
||||
if (abs(sc->int_ceilingz() - actor->int_pos().Z) < (actor->spr.yvel << 1))
|
||||
{
|
||||
|
@ -4721,7 +4721,7 @@ void handle_se31(DDukeActor* actor, bool choosedir)
|
|||
return;
|
||||
}
|
||||
|
||||
if ((actor->spr.__int_angle & 2047) == 1536)
|
||||
if ((actor->int_ang() & 2047) == 1536)
|
||||
{
|
||||
if (abs(actor->int_pos().Z - sec->int_floorz()) < actor->spr.yvel)
|
||||
{
|
||||
|
|
|
@ -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->spr.__int_angle << 1) + 1024;
|
||||
proj->spr.__int_angle -= (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);
|
||||
|
|
|
@ -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->spr.__int_angle << 1) + 1024;
|
||||
proj->spr.__int_angle -= (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->spr.__int_angle << 1) + krand()) & 64;
|
||||
proj->spr.__int_angle -= ((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->spr.__int_angle << 1) + krand()) & 16;
|
||||
proj->spr.__int_angle -= ((targ->int_ang() << 1) + krand()) & 16;
|
||||
targ->set_int_ang((targ->int_ang() + krand()) & 16);
|
||||
S_PlayActorSound(355, targ);
|
||||
}
|
||||
|
|
|
@ -899,7 +899,7 @@ void spawneffector(DDukeActor* actor, TArray<DDukeActor*>* actors)
|
|||
break;
|
||||
|
||||
case SE_11_SWINGING_DOOR://Pivitor rotater
|
||||
if (actor->spr.__int_angle > 1024) actor->temp_data[3] = 2;
|
||||
if (actor->int_ang() > 1024) actor->temp_data[3] = 2;
|
||||
else actor->temp_data[3] = -2;
|
||||
[[fallthrough]];
|
||||
case SE_0_ROTATING_SECTOR:
|
||||
|
|
|
@ -171,7 +171,7 @@ void AIAnubis::Tick(RunListEvent* ev)
|
|||
{
|
||||
PlotCourseToSprite(ap, pTarget);
|
||||
|
||||
int nAngle = ap->spr.__int_angle & 0xFFF8;
|
||||
int nAngle = ap->int_ang() & 0xFFF8;
|
||||
ap->spr.xvel = bcos(nAngle, -2);
|
||||
ap->spr.yvel = bsin(nAngle, -2);
|
||||
}
|
||||
|
|
|
@ -276,7 +276,7 @@ void AILion::Tick(RunListEvent* ev)
|
|||
{
|
||||
PlotCourseToSprite(pActor, pTarget);
|
||||
|
||||
int nAng = pActor->spr.__int_angle & 0xFFF8;
|
||||
int nAng = pActor->int_ang() & 0xFFF8;
|
||||
|
||||
if (pActor->spr.cstat & CSTAT_SPRITE_INVISIBLE)
|
||||
{
|
||||
|
|
|
@ -257,7 +257,7 @@ void AIRex::Tick(RunListEvent* ev)
|
|||
{
|
||||
if (((PlotCourseToSprite(pActor, pTarget) >> 8) >= 60) || pActor->nCount > 0)
|
||||
{
|
||||
int nAngle = pActor->spr.__int_angle & 0xFFF8;
|
||||
int nAngle = pActor->int_ang() & 0xFFF8;
|
||||
pActor->spr.xvel = bcos(nAngle, -2);
|
||||
pActor->spr.yvel = bsin(nAngle, -2);
|
||||
}
|
||||
|
|
|
@ -390,7 +390,7 @@ void AISet::Tick(RunListEvent* ev)
|
|||
}
|
||||
|
||||
// loc_338E2
|
||||
int nAngle = pActor->spr.__int_angle & 0xFFF8;
|
||||
int nAngle = pActor->int_ang() & 0xFFF8;
|
||||
pActor->spr.xvel = bcos(nAngle, -1);
|
||||
pActor->spr.yvel = bsin(nAngle, -1);
|
||||
|
||||
|
|
|
@ -4700,7 +4700,7 @@ int DoGrating(DSWActor* actor)
|
|||
const int GRATE_FACTOR = 3;
|
||||
|
||||
// reduce to 0 to 3 value
|
||||
dir = actor->spr.__int_angle >> 9;
|
||||
dir = actor->int_ang() >> 9;
|
||||
|
||||
int x = 0, y = 0;
|
||||
if ((dir & 1) == 0)
|
||||
|
|
|
@ -1457,7 +1457,7 @@ void PlaceActorsOnTracks(void)
|
|||
actor->user.track = tag - TAG_ACTOR_TRACK_BEGIN;
|
||||
|
||||
// if facing left go backward
|
||||
if (actor->spr.__int_angle >= 513 && actor->spr.__int_angle <= 1535)
|
||||
if (actor->int_ang() >= 513 && actor->int_ang() <= 1535)
|
||||
{
|
||||
actor->user.track_dir = -1;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue