From e732e2f9472d7e4a9aba5e30426f2962f7cdf994 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Wed, 2 Feb 2022 00:08:21 +0100 Subject: [PATCH] - SW: replaced spr.pos globally (except two functions) # Conflicts: # source/games/sw/src/_polymost.cpp --- source/games/sw/src/actor.cpp | 18 +- source/games/sw/src/ai.cpp | 78 +-- source/games/sw/src/bunny.cpp | 18 +- source/games/sw/src/coolg.cpp | 8 +- source/games/sw/src/coolie.cpp | 6 +- source/games/sw/src/copysect.cpp | 4 +- source/games/sw/src/draw.cpp | 60 +-- source/games/sw/src/eel.cpp | 10 +- source/games/sw/src/game.h | 6 +- source/games/sw/src/hornet.cpp | 10 +- source/games/sw/src/interpso.cpp | 6 +- source/games/sw/src/jsector.cpp | 26 +- source/games/sw/src/jweapon.cpp | 102 ++-- source/games/sw/src/lava.cpp | 2 +- source/games/sw/src/miscactr.cpp | 24 +- source/games/sw/src/player.cpp | 92 ++-- source/games/sw/src/quake.cpp | 12 +- source/games/sw/src/ripper.cpp | 10 +- source/games/sw/src/ripper2.cpp | 12 +- source/games/sw/src/rooms.cpp | 32 +- source/games/sw/src/rotator.cpp | 4 +- source/games/sw/src/sector.cpp | 26 +- source/games/sw/src/serp.cpp | 2 +- source/games/sw/src/skull.cpp | 28 +- source/games/sw/src/sounds.cpp | 6 +- source/games/sw/src/spike.cpp | 28 +- source/games/sw/src/sprite.cpp | 218 ++++----- source/games/sw/src/sumo.cpp | 2 +- source/games/sw/src/track.cpp | 126 ++--- source/games/sw/src/vator.cpp | 18 +- source/games/sw/src/vis.cpp | 14 +- source/games/sw/src/wallmove.cpp | 6 +- source/games/sw/src/warp.cpp | 16 +- source/games/sw/src/weapon.cpp | 806 +++++++++++++++---------------- source/games/sw/src/weapon.h | 4 +- source/games/sw/src/zilla.cpp | 6 +- source/games/sw/src/zombie.cpp | 4 +- 37 files changed, 925 insertions(+), 925 deletions(-) diff --git a/source/games/sw/src/actor.cpp b/source/games/sw/src/actor.cpp index c649d62a3..d54a49933 100644 --- a/source/games/sw/src/actor.cpp +++ b/source/games/sw/src/actor.cpp @@ -211,7 +211,7 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath) } actor->user.ActorActionFunc = nullptr; // Get angle to player - actor->spr.ang = NORM_ANGLE(getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y) + 1024); + actor->spr.ang = NORM_ANGLE(getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y) + 1024); break; case UZI_SMOKE+1: // Shotgun @@ -234,7 +234,7 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath) DoActorBeginJump(actor); actor->user.ActorActionFunc = nullptr; // Get angle to player - actor->spr.ang = NORM_ANGLE(getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y) + 1024); + actor->spr.ang = NORM_ANGLE(getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y) + 1024); break; default: @@ -397,7 +397,7 @@ int DoActorDebris(DSWActor* actor) KillActor(actor); return 0; case ZILLA_RUN_R0: - getzsofslopeptr(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, &actor->user.hiz, &actor->user.loz); + getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y, &actor->user.hiz, &actor->user.loz); actor->user.lo_sectp = actor->sector(); actor->user.hi_sectp = actor->sector(); actor->user.lowActor = nullptr; @@ -476,7 +476,7 @@ int DoGenerateSewerDebris(DSWActor* actor) { actor->user.Tics = actor->user.WaitTics; - auto spawned = SpawnActor(STAT_DEAD_ACTOR, 0, Debris[RANDOM_P2(4<<8)>>8], actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 200); + auto spawned = SpawnActor(STAT_DEAD_ACTOR, 0, Debris[RANDOM_P2(4<<8)>>8], actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 200); SetOwner(actor, spawned); } @@ -565,7 +565,7 @@ void KeepActorOnFloor(DSWActor* actor) { int ceilz, florz; Collision ctrash, ftrash; - FAFgetzrangepoint(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->sector(), + FAFgetzrangepoint(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->sector(), &ceilz, &ctrash, &florz, &ftrash); actor->set_int_z(actor->user.oz = florz); @@ -664,7 +664,7 @@ int DoActorJump(DSWActor* actor) // if player gets to close the ceiling while jumping int minh = actor->user.hiz + (tileHeight(actor->spr.picnum) << 8); - if (actor->spr.pos.Z < minh) + if (actor->int_pos().Z < minh) { // put player at the ceiling actor->set_int_z(minh); @@ -718,7 +718,7 @@ int DoActorFall(DSWActor* actor) actor->add_int_z(actor->user.jump_speed * ACTORMOVETICS); // Stick like glue when you hit the ground - if (actor->spr.pos.Z > actor->user.loz) + if (actor->int_pos().Z > actor->user.loz) { DoActorStopFall(actor); } @@ -830,7 +830,7 @@ int DoJump(DSWActor* actor) // if player gets to close the ceiling while jumping int minh = actor->user.hiz + (tileHeight(actor->spr.picnum) << 8); - if (actor->spr.pos.Z < minh) + if (actor->int_pos().Z < minh) { // put player at the ceiling actor->set_int_z(minh); @@ -867,7 +867,7 @@ int DoFall(DSWActor* actor) actor->add_int_z(actor->user.jump_speed * ACTORMOVETICS); // Stick like glue when you hit the ground - if (actor->spr.pos.Z > actor->user.loz - actor->user.floor_dist) + if (actor->int_pos().Z > actor->user.loz - actor->user.floor_dist) { actor->set_int_z(actor->user.loz - actor->user.floor_dist); actor->user.Flags &= ~(SPR_FALLING); diff --git a/source/games/sw/src/ai.cpp b/source/games/sw/src/ai.cpp index d48cfa4e3..8400b7e8d 100644 --- a/source/games/sw/src/ai.cpp +++ b/source/games/sw/src/ai.cpp @@ -219,7 +219,7 @@ bool CanSeePlayer(DSWActor* actor) // if actor can still see the player int look_height = ActorZOfTop(actor); - if (actor->user.targetActor && FAFcansee(actor->spr.pos.X, actor->spr.pos.Y, look_height, actor->sector(), actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y, ActorUpperZ(actor->user.targetActor), actor->user.targetActor->sector())) + if (actor->user.targetActor && FAFcansee(actor->int_pos().X, actor->int_pos().Y, look_height, actor->sector(), actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y, ActorUpperZ(actor->user.targetActor), actor->user.targetActor->sector())) return true; else return false; @@ -233,28 +233,28 @@ int CanHitPlayer(DSWActor* actor) // if actor can still see the player int zhs, zhh; - zhs = actor->spr.pos.Z - (ActorSizeZ(actor) >> 1); + zhs = actor->int_pos().Z - (ActorSizeZ(actor) >> 1); auto targ = actor->user.targetActor; // get angle to target - ang = getangle(targ->spr.pos.X - actor->spr.pos.X, targ->spr.pos.Y - actor->spr.pos.Y); + ang = getangle(targ->int_pos().X - actor->int_pos().X, targ->int_pos().Y - actor->int_pos().Y); // get x,yvect xvect = bcos(ang); yvect = bsin(ang); // get zvect - zhh = targ->spr.pos.Z - (ActorSizeZ(targ) >> 1); - if (targ->spr.pos.X - actor->spr.pos.X != 0) - zvect = xvect * ((zhh - zhs) / (targ->spr.pos.X - actor->spr.pos.X)); - else if (targ->spr.pos.Y - actor->spr.pos.Y != 0) - zvect = yvect * ((zhh - zhs) / (targ->spr.pos.Y - actor->spr.pos.Y)); + zhh = targ->int_pos().Z - (ActorSizeZ(targ) >> 1); + if (targ->int_pos().X - actor->int_pos().X != 0) + zvect = xvect * ((zhh - zhs) / (targ->int_pos().X - actor->int_pos().X)); + else if (targ->int_pos().Y - actor->int_pos().Y != 0) + zvect = yvect * ((zhh - zhs) / (targ->int_pos().Y - actor->int_pos().Y)); else return false; - FAFhitscan(actor->spr.pos.X, actor->spr.pos.Y, zhs, actor->sector(), + FAFhitscan(actor->int_pos().X, actor->int_pos().Y, zhs, actor->sector(), xvect, yvect, zvect, @@ -324,7 +324,7 @@ int DoActorPickClosePlayer(DSWActor* actor) // continue; } - DISTANCE(actor->spr.pos.X, actor->spr.pos.Y, pp->pos.X, pp->pos.Y, dist, a, b, c); + DISTANCE(actor->int_pos().X, actor->int_pos().Y, pp->pos.X, pp->pos.Y, dist, a, b, c); if (dist < near_dist) { @@ -350,10 +350,10 @@ int DoActorPickClosePlayer(DSWActor* actor) continue; } - DISTANCE(actor->spr.pos.X, actor->spr.pos.Y, pp->pos.X, pp->pos.Y, dist, a, b, c); + DISTANCE(actor->int_pos().X, actor->int_pos().Y, pp->pos.X, pp->pos.Y, dist, a, b, c); DSWActor* plActor = pp->actor; - if (dist < near_dist && FAFcansee(actor->spr.pos.X, actor->spr.pos.Y, look_height, actor->sector(), plActor->spr.pos.X, plActor->spr.pos.Y, ActorUpperZ(plActor), plActor->sector())) + if (dist < near_dist && FAFcansee(actor->int_pos().X, actor->int_pos().Y, look_height, actor->sector(), plActor->int_pos().X, plActor->int_pos().Y, ActorUpperZ(plActor), plActor->sector())) { near_dist = dist; actor->user.targetActor = pp->actor; @@ -377,9 +377,9 @@ TARGETACTOR: if ((itActor->user.Flags & (SPR_SUICIDE | SPR_DEAD))) continue; - DISTANCE(actor->spr.pos.X, actor->spr.pos.Y, itActor->spr.pos.X, itActor->spr.pos.Y, dist, a, b, c); + DISTANCE(actor->int_pos().X, actor->int_pos().Y, itActor->int_pos().X, itActor->int_pos().Y, dist, a, b, c); - if (dist < near_dist && FAFcansee(actor->spr.pos.X, actor->spr.pos.Y, look_height, actor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, ActorUpperZ(itActor), itActor->sector())) + if (dist < near_dist && FAFcansee(actor->int_pos().X, actor->int_pos().Y, look_height, actor->sector(), itActor->int_pos().X, itActor->int_pos().Y, ActorUpperZ(itActor), itActor->sector())) { near_dist = dist; actor->user.targetActor = itActor; @@ -433,12 +433,12 @@ int DoActorOperate(DSWActor* actor) if ((actor->user.WaitTics -= ACTORMOVETICS) > 0) return false; - z[0] = actor->spr.pos.Z - ActorSizeZ(actor) + Z(5); - z[1] = actor->spr.pos.Z - (ActorSizeZ(actor) >> 1); + z[0] = actor->int_pos().Z - ActorSizeZ(actor) + Z(5); + z[1] = actor->int_pos().Z - (ActorSizeZ(actor) >> 1); for (i = 0; i < SIZ(z); i++) { - neartag({ actor->spr.pos.X, actor->spr.pos.Y, z[i] }, actor->sector(), actor->spr.ang, near, 1024, NTAG_SEARCH_LO_HI); + neartag({ actor->int_pos().X, actor->int_pos().Y, z[i] }, actor->sector(), actor->spr.ang, near, 1024, NTAG_SEARCH_LO_HI); } if (near.hitSector != nullptr && near.hitpos.X < 1024) @@ -518,7 +518,7 @@ ANIMATOR* DoActorActionDecide(DSWActor* actor) DoActorOperate(actor); // if far enough away and cannot see the player - dist = Distance(actor->spr.pos.X, actor->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(actor->int_pos().X, actor->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist > 30000 && !ICanSee) { @@ -609,7 +609,7 @@ ANIMATOR* DoActorActionDecide(DSWActor* actor) DoActorPickClosePlayer(actor); // if close by - dist = Distance(actor->spr.pos.X, actor->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(actor->int_pos().X, actor->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist < 15000 || ICanSee) { if ((Facing(actor, actor->user.targetActor) && dist < 10000) || ICanSee) @@ -816,7 +816,7 @@ int DoActorCantMoveCloser(DSWActor* actor) if (actor->user.track >= 0) { - actor->spr.ang = getangle((Track[actor->user.track].TrackPoint + actor->user.point)->x - actor->spr.pos.X, (Track[actor->user.track].TrackPoint + actor->user.point)->y - actor->spr.pos.Y); + actor->spr.ang = getangle((Track[actor->user.track].TrackPoint + actor->user.point)->x - actor->int_pos().X, (Track[actor->user.track].TrackPoint + actor->user.point)->y - actor->int_pos().Y); DoActorSetSpeed(actor, MID_SPEED); actor->user.Flags |= (SPR_FIND_PLAYER); @@ -867,7 +867,7 @@ int DoActorMoveCloser(DSWActor* actor) else { // turn to face player - actor->spr.ang = getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y); + actor->spr.ang = getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y); } } @@ -922,7 +922,7 @@ int FindTrackToPlayer(DSWActor* actor) BIT(TT_SCAN) }; - zdiff = ActorUpperZ(actor->user.targetActor) - (actor->spr.pos.Z - ActorSizeZ(actor) + Z(8)); + zdiff = ActorUpperZ(actor->user.targetActor) - (actor->int_pos().Z - ActorSizeZ(actor) + Z(8)); if (abs(zdiff) <= Z(20)) { @@ -1048,7 +1048,7 @@ int InitActorRunAway(DSWActor* actor) if (actor->user.track >= 0) { - actor->spr.ang = NORM_ANGLE(getangle((Track[actor->user.track].TrackPoint + actor->user.point)->x - actor->spr.pos.X, (Track[actor->user.track].TrackPoint + actor->user.point)->y - actor->spr.pos.Y)); + actor->spr.ang = NORM_ANGLE(getangle((Track[actor->user.track].TrackPoint + actor->user.point)->x - actor->int_pos().X, (Track[actor->user.track].TrackPoint + actor->user.point)->y - actor->int_pos().Y)); DoActorSetSpeed(actor, FAST_SPEED); actor->user.Flags |= (SPR_RUN_AWAY); } @@ -1128,7 +1128,7 @@ int InitActorAttack(DSWActor* actor) //NewStateGroup(actor, actor->user.ActorActionSet->Stand); // face player when attacking - actor->spr.ang = NORM_ANGLE(getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y)); + actor->spr.ang = NORM_ANGLE(getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y)); // If it's your own kind, lay off! if (actor->user.ID == actor->user.targetActor->user.ID && !actor->user.targetActor->user.PlayerP) @@ -1169,7 +1169,7 @@ int DoActorAttack(DSWActor* actor) DoActorNoise(ChooseAction(actor->user.Personality->Broadcast),actor); - DISTANCE(actor->spr.pos.X, actor->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y, dist, a, b, c); + DISTANCE(actor->int_pos().X, actor->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y, dist, a, b, c); auto pActor = GetPlayerSpriteNum(actor); if ((actor->user.ActorActionSet->CloseAttack[0] && dist < CloseRangeDist(actor, actor->user.targetActor)) || @@ -1208,7 +1208,7 @@ int InitActorEvade(DSWActor* actor) if (actor->user.track >= 0) { - actor->spr.ang = NORM_ANGLE(getangle((Track[actor->user.track].TrackPoint + actor->user.point)->x - actor->spr.pos.X, (Track[actor->user.track].TrackPoint + actor->user.point)->y - actor->spr.pos.Y)); + actor->spr.ang = NORM_ANGLE(getangle((Track[actor->user.track].TrackPoint + actor->user.point)->x - actor->int_pos().X, (Track[actor->user.track].TrackPoint + actor->user.point)->y - actor->int_pos().Y)); DoActorSetSpeed(actor, FAST_SPEED); // NOT doing a RUN_AWAY actor->user.Flags &= ~(SPR_RUN_AWAY); @@ -1228,7 +1228,7 @@ int InitActorWanderAround(DSWActor* actor) if (actor->user.track >= 0) { - actor->spr.ang = getangle((Track[actor->user.track].TrackPoint + actor->user.point)->x - actor->spr.pos.X, (Track[actor->user.track].TrackPoint + actor->user.point)->y - actor->spr.pos.Y); + actor->spr.ang = getangle((Track[actor->user.track].TrackPoint + actor->user.point)->x - actor->int_pos().X, (Track[actor->user.track].TrackPoint + actor->user.point)->y - actor->int_pos().Y); DoActorSetSpeed(actor, NORM_SPEED); } @@ -1244,7 +1244,7 @@ int InitActorFindPlayer(DSWActor* actor) if (actor->user.track >= 0) { - actor->spr.ang = getangle((Track[actor->user.track].TrackPoint + actor->user.point)->x - actor->spr.pos.X, (Track[actor->user.track].TrackPoint + actor->user.point)->y - actor->spr.pos.Y); + actor->spr.ang = getangle((Track[actor->user.track].TrackPoint + actor->user.point)->x - actor->int_pos().X, (Track[actor->user.track].TrackPoint + actor->user.point)->y - actor->int_pos().Y); DoActorSetSpeed(actor, MID_SPEED); actor->user.Flags |= (SPR_FIND_PLAYER); @@ -1273,7 +1273,7 @@ int InitActorDuck(DSWActor* actor) actor->user.ActorActionFunc = DoActorDuck; NewStateGroup(actor, actor->user.ActorActionSet->Duck); - dist = Distance(actor->spr.pos.X, actor->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(actor->int_pos().X, actor->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist > 8000) { @@ -1338,9 +1338,9 @@ Collision move_scan(DSWActor* actor, int ang, int dist, int *stopx, int *stopy, // moves out a bit but keeps the sprites original postion/sector. // save off position info - x = actor->spr.pos.X; - y = actor->spr.pos.Y; - z = actor->spr.pos.Z; + x = actor->int_pos().X; + y = actor->int_pos().Y; + z = actor->int_pos().Z; sang = actor->spr.ang; loz = actor->user.loz; hiz = actor->user.hiz; @@ -1361,9 +1361,9 @@ Collision move_scan(DSWActor* actor, int ang, int dist, int *stopx, int *stopy, // should I look down with a FAFgetzrange to see where I am? // remember where it stopped - *stopx = actor->spr.pos.X; - *stopy = actor->spr.pos.Y; - *stopz = actor->spr.pos.Z; + *stopx = actor->int_pos().X; + *stopy = actor->int_pos().Y; + *stopz = actor->int_pos().Z; // reset position information actor->set_int_pos({ x, y, z }); @@ -1419,7 +1419,7 @@ int FindNewAngle(DSWActor* actor, int dir, int DistToMove) DistToMove = (DistToMove >> 2) + (DistToMove >> 3); // Find angle to from the player - oang = NORM_ANGLE(getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y)); + oang = NORM_ANGLE(getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y)); // choose a random angle array switch (dir) @@ -1468,13 +1468,13 @@ int FindNewAngle(DSWActor* actor, int dir, int DistToMove) if (ret.type == kHitNone) { // cleanly moved in new direction without hitting something - actor->user.TargetDist = Distance(actor->spr.pos.X, actor->spr.pos.Y, stopx, stopy); + actor->user.TargetDist = Distance(actor->int_pos().X, actor->int_pos().Y, stopx, stopy); return new_ang; } else { // hit something - dist = Distance(actor->spr.pos.X, actor->spr.pos.Y, stopx, stopy); + dist = Distance(actor->int_pos().X, actor->int_pos().Y, stopx, stopy); if (dist > save_dist) { @@ -1563,7 +1563,7 @@ int InitActorReposition(DSWActor* actor) actor->user.Dist = 0; rnum = RANDOM_P2(8<<8)>>8; - dist = Distance(actor->spr.pos.X, actor->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(actor->int_pos().X, actor->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist < PlayerDist[rnum] || (actor->user.Flags & SPR_RUN_AWAY)) { diff --git a/source/games/sw/src/bunny.cpp b/source/games/sw/src/bunny.cpp index 73e38ae2c..87a103e8d 100644 --- a/source/games/sw/src/bunny.cpp +++ b/source/games/sw/src/bunny.cpp @@ -832,7 +832,7 @@ int DoBunnyBeginJumpAttack(DSWActor* actor) DSWActor* target = actor->user.targetActor; int tang; - tang = getangle(target->spr.pos.X - actor->spr.pos.X, target->spr.pos.Y - actor->spr.pos.Y); + tang = getangle(target->int_pos().X - actor->int_pos().X, target->int_pos().Y - actor->int_pos().Y); Collision coll = move_sprite(actor, bcos(tang, -7), bsin(tang, -7), 0L, actor->user.ceiling_dist, actor->user.floor_dist, CLIPMASK_ACTOR, ACTORMOVETICS); @@ -904,11 +904,11 @@ void DoPickCloseBunny(DSWActor* actor) if (itActor->user.ID != BUNNY_RUN_R0) continue; - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, a, b, c); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, a, b, c); if (dist > near_dist) continue; - ICanSee = FAFcansee(actor->spr.pos.X, actor->spr.pos.Y, look_height, actor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, ActorUpperZ(itActor), itActor->sector()); + ICanSee = FAFcansee(actor->int_pos().X, actor->int_pos().Y, look_height, actor->sector(), itActor->int_pos().X, itActor->int_pos().Y, ActorUpperZ(itActor), itActor->sector()); if (ICanSee && dist < near_dist && itActor->user.ID == BUNNY_RUN_R0) { @@ -1003,7 +1003,7 @@ int DoBunnyQuickJump(DSWActor* actor) if (pp == Player+myconnectindex) { choose_snd = StdRandomRange(2<<8)>>8; - if (FAFcansee(actor->spr.pos.X,actor->spr.pos.Y,ActorZOfTop(actor),actor->sector(),pp->pos.X, pp->pos.Y, pp->pos.Z, pp->cursector) && Facing(actor, actor->user.targetActor)) + if (FAFcansee(actor->int_pos().X,actor->int_pos().Y,ActorZOfTop(actor),actor->sector(),pp->pos.X, pp->pos.Y, pp->pos.Z, pp->cursector) && Facing(actor, actor->user.targetActor)) PlayerSound(fagsnds[choose_snd], v3df_doppler|v3df_follow|v3df_dontpan,pp); } } @@ -1018,13 +1018,13 @@ int DoBunnyQuickJump(DSWActor* actor) if (pp == Player+myconnectindex) { choose_snd = StdRandomRange(3<<8)>>8; - if (FAFcansee(actor->spr.pos.X,actor->spr.pos.Y,ActorZOfTop(actor),actor->sector(),pp->pos.X, pp->pos.Y, pp->pos.Z, pp->cursector) && Facing(actor, actor->user.targetActor)) + if (FAFcansee(actor->int_pos().X,actor->int_pos().Y,ActorZOfTop(actor),actor->sector(),pp->pos.X, pp->pos.Y, pp->pos.Z, pp->cursector) && Facing(actor, actor->user.targetActor)) PlayerSound(straightsnds[choose_snd], v3df_doppler|v3df_follow|v3df_dontpan,pp); } } } - actor->set_int_xy(hitActor->spr.pos.X, hitActor->spr.pos.Y); + actor->set_int_xy(hitActor->int_pos().X, hitActor->int_pos().Y); actor->spr.ang = hitActor->spr.ang; actor->spr.ang = NORM_ANGLE(actor->spr.ang + 1024); HelpMissileLateral(actor, 2000); @@ -1084,7 +1084,7 @@ int DoBunnyRipHeart(DSWActor* actor) actor->user.WaitTics = 6 * 120; // player face bunny - target->spr.ang = getangle(actor->spr.pos.X - target->spr.pos.X, actor->spr.pos.Y - target->spr.pos.Y); + target->spr.ang = getangle(actor->int_pos().X - target->int_pos().X, actor->int_pos().Y - target->int_pos().Y); return 0; } @@ -1112,7 +1112,7 @@ void BunnyHatch(DSWActor* actor) for (int i = 0; i < MAX_BUNNYS; i++) { auto actorNew = insertActor(actor->sector(), STAT_DEFAULT); - actorNew->set_int_pos(actor->spr.pos); + actorNew->set_int_pos(actor->int_pos()); actorNew->spr.xrepeat = 30; // Baby size actorNew->spr.yrepeat = 24; actorNew->spr.ang = rip_ang[i]; @@ -1168,7 +1168,7 @@ DSWActor* BunnyHatch2(DSWActor* actor) { auto actorNew = insertActor(actor->sector(), STAT_DEFAULT); - actorNew->set_int_pos(actor->spr.pos); + actorNew->set_int_pos(actor->int_pos()); actorNew->spr.xrepeat = 30; // Baby size actorNew->spr.yrepeat = 24; actorNew->spr.ang = RANDOM_P2(2048); diff --git a/source/games/sw/src/coolg.cpp b/source/games/sw/src/coolg.cpp index 2335d991d..9d660bbe9 100644 --- a/source/games/sw/src/coolg.cpp +++ b/source/games/sw/src/coolg.cpp @@ -505,7 +505,7 @@ void CoolgCommon(DSWActor* actor) actor->user.floor_dist = Z(16); actor->user.ceiling_dist = Z(20); - actor->user.pos.Z = actor->spr.pos.Z; + actor->user.pos.Z = actor->int_pos().Z; actor->spr.xrepeat = 42; actor->spr.yrepeat = 42; @@ -541,7 +541,7 @@ int NewCoolg(DSWActor* actor) { ANIMATOR DoActorDecide; - auto actorNew = SpawnActor(STAT_ENEMY, COOLG_RUN_R0, &s_CoolgBirth[0], actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 50); + auto actorNew = SpawnActor(STAT_ENEMY, COOLG_RUN_R0, &s_CoolgBirth[0], actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 50); ChangeState(actorNew, &s_CoolgBirth[0]); actorNew->user.StateEnd = s_CoolgDie; @@ -665,7 +665,7 @@ int DoCoolgMatchPlayerZ(DSWActor* actor) actor->set_int_z(actor->user.pos.Z + MulScale(COOLG_BOB_AMT, bsin(actor->user.Counter), 14)); bound = actor->user.hiz + actor->user.ceiling_dist + COOLG_BOB_AMT; - if (actor->spr.pos.Z < bound) + if (actor->int_pos().Z < bound) { // bumped something actor->set_int_z(actor->user.pos.Z = bound + COOLG_BOB_AMT); @@ -773,7 +773,7 @@ int DoCoolgDeath(DSWActor* actor) DoFindGroundPoint(actor); // on the ground - if (actor->spr.pos.Z >= actor->user.loz) + if (actor->int_pos().Z >= actor->user.loz) { actor->user.Flags &= ~(SPR_FALLING|SPR_SLIDING); actor->spr.cstat &= ~(CSTAT_SPRITE_YFLIP); // If upside down, reset it diff --git a/source/games/sw/src/coolie.cpp b/source/games/sw/src/coolie.cpp index f4b29e8c7..07c5dba90 100644 --- a/source/games/sw/src/coolie.cpp +++ b/source/games/sw/src/coolie.cpp @@ -453,10 +453,10 @@ void EnemyDefaults(DSWActor* actor, ACTOR_ACTION_SET* action, PERSONALITY* perso } } - if (depth && labs(actor->spr.pos.Z - actor->user.loz) < Z(8)) + if (depth && labs(actor->int_pos().Z - actor->user.loz) < Z(8)) { actor->add_int_z(Z(depth)); - actor->user.loz = actor->spr.pos.Z; + actor->user.loz = actor->int_pos().Z; actor->backupz(); } @@ -569,7 +569,7 @@ int DoCoolieMove(DSWActor* actor) return 0; } - if (Distance(actor->spr.pos.X, actor->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y) < 1200) + if (Distance(actor->int_pos().X, actor->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y) < 1200) { UpdateSinglePlayKills(actor); DoActorDie(actor, actor, 0); diff --git a/source/games/sw/src/copysect.cpp b/source/games/sw/src/copysect.cpp index b33ef332e..a287807ff 100644 --- a/source/games/sw/src/copysect.cpp +++ b/source/games/sw/src/copysect.cpp @@ -169,8 +169,8 @@ void CopySectorMatch(int match) SectorMidPoint(dActor->sector(), &dx, &dy, &trash); // get offset - src_xoff = sx - itActor->spr.pos.X; - src_yoff = sy - itActor->spr.pos.Y; + src_xoff = sx - itActor->int_pos().X; + src_yoff = sy - itActor->int_pos().Y; // move sprite to dest sector itActor->set_int_xy(dx - src_xoff, dy - src_yoff); diff --git a/source/games/sw/src/draw.cpp b/source/games/sw/src/draw.cpp index e5da7a567..8f64f1784 100644 --- a/source/games/sw/src/draw.cpp +++ b/source/games/sw/src/draw.cpp @@ -456,13 +456,13 @@ void WarpCopySprite(tspriteArray& tsprites) tspritetype* newTSpr = renderAddTsprite(tsprites, itActor2); newTSpr->statnum = 0; - xoff = itActor->spr.pos.X - newTSpr->pos.X; - yoff = itActor->spr.pos.Y - newTSpr->pos.Y; - zoff = itActor->spr.pos.Z - newTSpr->pos.Z; + xoff = itActor->int_pos().X - newTSpr->pos.X; + yoff = itActor->int_pos().Y - newTSpr->pos.Y; + zoff = itActor->int_pos().Z - newTSpr->pos.Z; - newTSpr->pos.X = itActor1->spr.pos.X - xoff; - newTSpr->pos.Y = itActor1->spr.pos.Y - yoff; - newTSpr->pos.Z = itActor1->spr.pos.Z - zoff; + newTSpr->pos.X = itActor1->int_pos().X - xoff; + newTSpr->pos.Y = itActor1->int_pos().Y - yoff; + newTSpr->pos.Z = itActor1->int_pos().Z - zoff; newTSpr->sectp = itActor1->sector(); } @@ -478,8 +478,8 @@ void WarpCopySprite(tspriteArray& tsprites) tspritetype* newTSpr = renderAddTsprite(tsprites, itActor2); newTSpr->statnum = 0; - auto off = itActor1->spr.pos - newTSpr->pos; - newTSpr->pos = itActor->spr.pos - off; + auto off = itActor1->int_pos() - newTSpr->pos; + newTSpr->pos = itActor->int_pos() - off; newTSpr->sectp = itActor->sector(); } } @@ -639,8 +639,8 @@ void analyzesprites(tspriteArray& tsprites, int viewx, int viewy, int viewz, int // workaround for mines and floor decals beneath the floor if (tsp->picnum == BETTY_R0 || tsp->picnum == FLOORBLOOD1) { - int32_t const floorz = getflorzofslopeptr(tActor->sector(), tActor->spr.pos.X, tActor->spr.pos.Y); - if (tActor->spr.pos.Z > floorz) + int32_t const floorz = getflorzofslopeptr(tActor->sector(), tActor->int_pos().X, tActor->int_pos().Y); + if (tActor->int_pos().Z > floorz) tsp->pos.Z = floorz; } @@ -1066,9 +1066,9 @@ void PrintSpriteInfo(PLAYER* pp) } { - Printf("POSX:%d, ", actor->spr.pos.X); - Printf("POSY:%d, ", actor->spr.pos.Y); - Printf("POSZ:%d,", actor->spr.pos.Z); + Printf("POSX:%d, ", actor->int_pos().X); + Printf("POSY:%d, ", actor->int_pos().Y); + Printf("POSZ:%d,", actor->int_pos().Z); Printf("ANG:%d\n", actor->spr.ang); } } @@ -1096,12 +1096,12 @@ void CameraView(PLAYER* pp, int *tx, int *ty, int *tz, sectortype** tsect, binan SWStatIterator it(STAT_DEMO_CAMERA); while (auto actor = it.Next()) { - ang = bvectangbam(*tx - actor->spr.pos.X, *ty - actor->spr.pos.Y); + ang = bvectangbam(*tx - actor->int_pos().X, *ty - actor->int_pos().Y); ang_test = getincangle(ang.asbuild(), actor->spr.ang) < actor->spr.lotag; FAFcansee_test = - (FAFcansee(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->sector(), *tx, *ty, *tz, pp->cursector) || - FAFcansee(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->sector(), *tx, *ty, *tz + ActorSizeZ(pp->actor), pp->cursector)); + (FAFcansee(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->sector(), *tx, *ty, *tz, pp->cursector) || + FAFcansee(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->sector(), *tx, *ty, *tz + ActorSizeZ(pp->actor), pp->cursector)); player_in_camera = ang_test && FAFcansee_test; @@ -1134,15 +1134,15 @@ void CameraView(PLAYER* pp, int *tx, int *ty, int *tz, sectortype** tsect, binan xvect = ang.bcos(-3); yvect = ang.bsin(-3); - zdiff = actor->spr.pos.Z - *tz; - if (labs(actor->spr.pos.X - *tx) > 1000) - zvect = Scale(xvect, zdiff, actor->spr.pos.X - *tx); - else if (labs(actor->spr.pos.Y - *ty) > 1000) - zvect = Scale(yvect, zdiff, actor->spr.pos.Y - *ty); - else if (actor->spr.pos.X - *tx != 0) - zvect = Scale(xvect, zdiff, actor->spr.pos.X - *tx); - else if (actor->spr.pos.Y - *ty != 0) - zvect = Scale(yvect, zdiff, actor->spr.pos.Y - *ty); + zdiff = actor->int_pos().Z - *tz; + if (labs(actor->int_pos().X - *tx) > 1000) + zvect = Scale(xvect, zdiff, actor->int_pos().X - *tx); + else if (labs(actor->int_pos().Y - *ty) > 1000) + zvect = Scale(yvect, zdiff, actor->int_pos().Y - *ty); + else if (actor->int_pos().X - *tx != 0) + zvect = Scale(xvect, zdiff, actor->int_pos().X - *tx); + else if (actor->int_pos().Y - *ty != 0) + zvect = Scale(yvect, zdiff, actor->int_pos().Y - *ty); else zvect = 0; @@ -1150,9 +1150,9 @@ void CameraView(PLAYER* pp, int *tx, int *ty, int *tz, sectortype** tsect, binan *thoriz = q16horiz(clamp(-(zvect << 8), gi->playerHorizMin(), gi->playerHorizMax())); *tang = ang; - *tx = actor->spr.pos.X; - *ty = actor->spr.pos.Y; - *tz = actor->spr.pos.Z; + *tx = actor->int_pos().X; + *ty = actor->int_pos().Y; + *tz = actor->int_pos().Z; *tsect = actor->sector(); found_camera = true; @@ -1626,8 +1626,8 @@ bool GameInterface::DrawAutomapPlayer(int mx, int my, int cposx, int cposy, int if (actor == peekActor) col = GPalette.BaseColors[31]; - sprx = actor->spr.pos.X; - spry = actor->spr.pos.Y; + sprx = actor->int_pos().X; + spry = actor->int_pos().Y; k = actor->spr.statnum; if ((k >= 1) && (k <= 8) && (k != 2)) // Interpolate moving diff --git a/source/games/sw/src/eel.cpp b/source/games/sw/src/eel.cpp index cb0cdb3f3..70f900c1c 100644 --- a/source/games/sw/src/eel.cpp +++ b/source/games/sw/src/eel.cpp @@ -364,7 +364,7 @@ void EelCommon(DSWActor* actor) actor->user.floor_dist = Z(16); actor->user.ceiling_dist = Z(20); - actor->user.pos.Z = actor->spr.pos.Z; + actor->user.pos.Z = actor->int_pos().Z; actor->spr.xrepeat = 35; actor->spr.yrepeat = 27; @@ -462,7 +462,7 @@ int DoEelMatchPlayerZ(DSWActor* actor) // lower bound if (actor->user.lowActor && actor->user.targetActor == actor->user.highActor) // this doesn't look right... { - DISTANCE(actor->spr.pos.X, actor->spr.pos.Y, actor->user.lowActor->spr.pos.X, actor->user.lowActor->spr.pos.Y, dist, a, b, c); + DISTANCE(actor->int_pos().X, actor->int_pos().Y, actor->user.lowActor->int_pos().X, actor->user.lowActor->int_pos().Y, dist, a, b, c); if (dist <= 300) bound = actor->user.pos.Z; else @@ -479,7 +479,7 @@ int DoEelMatchPlayerZ(DSWActor* actor) // upper bound if (actor->user.highActor && actor->user.targetActor == actor->user.highActor) { - DISTANCE(actor->spr.pos.X, actor->spr.pos.Y, actor->user.highActor->spr.pos.X, actor->user.highActor->spr.pos.Y, dist, a, b, c); + DISTANCE(actor->int_pos().X, actor->int_pos().Y, actor->user.highActor->int_pos().X, actor->user.highActor->int_pos().Y, dist, a, b, c); if (dist <= 300) bound = actor->user.pos.Z; else @@ -500,7 +500,7 @@ int DoEelMatchPlayerZ(DSWActor* actor) actor->set_int_z(actor->user.pos.Z + MulScale(EEL_BOB_AMT, bsin(actor->user.Counter), 14)); bound = actor->user.hiz + actor->user.ceiling_dist + EEL_BOB_AMT; - if (actor->spr.pos.Z < bound) + if (actor->int_pos().Z < bound) { // bumped something actor->set_int_z(actor->user.pos.Z = bound + EEL_BOB_AMT); @@ -534,7 +534,7 @@ int DoEelDeath(DSWActor* actor) DoFindGroundPoint(actor); // on the ground - if (actor->spr.pos.Z >= actor->user.loz) + if (actor->int_pos().Z >= actor->user.loz) { actor->user.Flags &= ~(SPR_FALLING|SPR_SLIDING); if (RandomRange(1000) > 500) diff --git a/source/games/sw/src/game.h b/source/games/sw/src/game.h index 606a452a6..4597f49b8 100644 --- a/source/games/sw/src/game.h +++ b/source/games/sw/src/game.h @@ -1954,12 +1954,12 @@ inline bool SectorIsUnderwaterArea(sectortype* sect) inline bool PlayerFacingRange(PLAYER* pp, DSWActor* a, int range) { - return (abs(getincangle(getangle(a->spr.pos.X - (pp)->pos.X, a->spr.pos.Y - (pp)->pos.Y), (pp)->angle.ang.asbuild())) < (range)); + return (abs(getincangle(getangle(a->int_pos().X - (pp)->pos.X, a->int_pos().Y - (pp)->pos.Y), (pp)->angle.ang.asbuild())) < (range)); } inline bool FacingRange(DSWActor* a1, DSWActor* a2, int range) { - return (abs(getincangle(getangle(a1->spr.pos.X - a2->spr.pos.X, a1->spr.pos.Y - a2->spr.pos.Y), a2->spr.ang)) < (range)); + return (abs(getincangle(getangle(a1->int_pos().X - a2->int_pos().X, a1->int_pos().Y - a2->int_pos().Y), a2->spr.ang)) < (range)); } inline void SET_BOOL1(DSWActor* sp) { sp->spr.extra |= SPRX_BOOL1; } inline void SET_BOOL2(DSWActor* sp) { sp->spr.extra |= SPRX_BOOL2; } @@ -2067,7 +2067,7 @@ inline int ActorSizeY(DSWActor* sp) inline bool Facing(DSWActor* actor1, DSWActor* actor2) { - return (abs(getincangle(getangle(actor1->spr.pos.X - actor2->spr.pos.X, actor1->spr.pos.Y - actor2->spr.pos.Y), actor2->spr.ang)) < 512); + return (abs(getincangle(getangle(actor1->int_pos().X - actor2->int_pos().X, actor1->int_pos().Y - actor2->int_pos().Y), actor2->spr.ang)) < 512); } // Given a z height and sprite return the correct y repeat value diff --git a/source/games/sw/src/hornet.cpp b/source/games/sw/src/hornet.cpp index 7ba5a4b0b..c2f123ff2 100644 --- a/source/games/sw/src/hornet.cpp +++ b/source/games/sw/src/hornet.cpp @@ -312,7 +312,7 @@ int SetupHornet(DSWActor* actor) actor->user.floor_dist = Z(16); actor->user.ceiling_dist = Z(16); - actor->user.pos.Z = actor->spr.pos.Z; + actor->user.pos.Z = actor->int_pos().Z; actor->spr.xrepeat = 37; actor->spr.yrepeat = 32; @@ -396,7 +396,7 @@ int DoHornetMatchPlayerZ(DSWActor* actor) actor->set_int_z(actor->user.pos.Z + MulScale(HORNET_BOB_AMT, bsin(actor->user.Counter), 14)); bound = actor->user.hiz + actor->user.ceiling_dist + HORNET_BOB_AMT; - if (actor->spr.pos.Z < bound) + if (actor->int_pos().Z < bound) { // bumped something actor->set_int_z(actor->user.pos.Z = bound + HORNET_BOB_AMT); @@ -513,7 +513,7 @@ int DoHornetDeath(DSWActor* actor) actor->user.coll = move_sprite(actor, nx, ny, 0L, actor->user.ceiling_dist, actor->user.floor_dist, 1, ACTORMOVETICS); // on the ground - if (actor->spr.pos.Z >= actor->user.loz) + if (actor->int_pos().Z >= actor->user.loz) { actor->user.Flags &= ~(SPR_FALLING|SPR_SLIDING); actor->spr.cstat &= ~(CSTAT_SPRITE_YFLIP); // If upside down, reset it @@ -541,7 +541,7 @@ int DoCheckSwarm(DSWActor* actor) if (actor->user.targetActor->user.PlayerP) { pp = actor->user.targetActor->user.PlayerP; - DISTANCE(actor->spr.pos.X, actor->spr.pos.Y, pp->pos.X, pp->pos.Y, pdist, a, b, c); + DISTANCE(actor->int_pos().X, actor->int_pos().Y, pp->pos.X, pp->pos.Y, pdist, a, b, c); } else return 0; @@ -554,7 +554,7 @@ int DoCheckSwarm(DSWActor* actor) if (itActor->spr.hitag != TAG_SWARMSPOT || itActor->spr.lotag != 2) continue; - DISTANCE(actor->spr.pos.X, actor->spr.pos.Y, itActor->spr.pos.X, itActor->spr.pos.Y, dist, a, b, c); + DISTANCE(actor->int_pos().X, actor->int_pos().Y, itActor->int_pos().X, itActor->int_pos().Y, dist, a, b, c); if (dist < pdist && actor->user.ID == itActor->user.ID) // Only flock to your own kind { diff --git a/source/games/sw/src/interpso.cpp b/source/games/sw/src/interpso.cpp index 1f10df614..0faa88f65 100644 --- a/source/games/sw/src/interpso.cpp +++ b/source/games/sw/src/interpso.cpp @@ -110,15 +110,15 @@ static double getvalue(so_interp::interp_data& element) return SectorObject[index].pmid.Z; case soi_sprx: if (element.actorofang) - return element.actorofang->spr.pos.X; + return element.actorofang->int_pos().X; break; case soi_spry: if (element.actorofang) - return element.actorofang->spr.pos.Y; + return element.actorofang->int_pos().Y; break; case soi_sprz: if (element.actorofang) - return element.actorofang->spr.pos.Z; + return element.actorofang->int_pos().Z; break; default: break; diff --git a/source/games/sw/src/jsector.cpp b/source/games/sw/src/jsector.cpp index 7b4c19ec5..c5cab7976 100644 --- a/source/games/sw/src/jsector.cpp +++ b/source/games/sw/src/jsector.cpp @@ -429,8 +429,8 @@ JS_ProcessEchoSpot() { dist = 0x7fffffff; - j = abs(actor->spr.pos.X - pp->pos.X); - j += abs(actor->spr.pos.Y - pp->pos.Y); + j = abs(actor->int_pos().X - pp->pos.X); + j += abs(actor->int_pos().Y - pp->pos.Y); if (j < dist) dist = j; @@ -509,8 +509,8 @@ void JS_DrawCameras(PLAYER* pp, int tx, int ty, int tz, double smoothratio) { DSWActor* camactor = mirror[cnt].camspriteActor; - j = abs(camactor->spr.pos.X - tx); - j += abs(camactor->spr.pos.Y - ty); + j = abs(camactor->int_pos().X - tx); + j += abs(camactor->int_pos().Y - ty); if (j < dist) dist = j; } @@ -534,20 +534,20 @@ void JS_DrawCameras(PLAYER* pp, int tx, int ty, int tz, double smoothratio) tdy = abs(midy - ty); if (midx >= tx) - dx = camactor->spr.pos.X - tdx; + dx = camactor->int_pos().X - tdx; else - dx = camactor->spr.pos.X + tdx; + dx = camactor->int_pos().X + tdx; if (midy >= ty) - dy = camactor->spr.pos.Y - tdy; + dy = camactor->int_pos().Y - tdy; else - dy = camactor->spr.pos.Y + tdy; + dy = camactor->int_pos().Y + tdy; - tdz = abs(tz - camactor->spr.pos.Z); - if (tz >= camactor->spr.pos.Z) - dz = camactor->spr.pos.Z + tdz; + tdz = abs(tz - camactor->int_pos().Z); + if (tz >= camactor->int_pos().Z) + dz = camactor->int_pos().Z + tdz; else - dz = camactor->spr.pos.Z - tdz; + dz = camactor->int_pos().Z - tdz; // Is it a TV cam or a teleporter that shows destination? @@ -630,7 +630,7 @@ void JS_DrawCameras(PLAYER* pp, int tx, int ty, int tz, double smoothratio) } else { - drawroomstotile(camactor->spr.pos.X, camactor->spr.pos.Y, camactor->spr.pos.Z, buildang(SP_TAG5(camactor)), camhoriz, camactor->sector(), mirror[cnt].campic, smoothratio); + drawroomstotile(camactor->int_pos().X, camactor->int_pos().Y, camactor->int_pos().Z, buildang(SP_TAG5(camactor)), camhoriz, camactor->sector(), mirror[cnt].campic, smoothratio); } } } diff --git a/source/games/sw/src/jweapon.cpp b/source/games/sw/src/jweapon.cpp index ab331f94c..c9e62e76d 100644 --- a/source/games/sw/src/jweapon.cpp +++ b/source/games/sw/src/jweapon.cpp @@ -262,7 +262,7 @@ int DoWallBloodDrip(DSWActor* actor) if (actor->user.pos.Z != actor->user.pos.Y) { // if you are between the ceiling and floor fall fast - if (actor->spr.pos.Z > actor->user.pos.Y && actor->spr.pos.Z < actor->user.pos.Z) + if (actor->int_pos().Z > actor->user.pos.Y && actor->int_pos().Z < actor->user.pos.Z) { actor->spr.zvel += 300; actor->add_int_z(actor->spr.zvel); @@ -279,7 +279,7 @@ int DoWallBloodDrip(DSWActor* actor) actor->add_int_z(actor->spr.zvel); } - if (actor->spr.pos.Z >= actor->user.loz) + if (actor->int_pos().Z >= actor->user.loz) { actor->set_int_z(actor->user.loz); SpawnFloorSplash(actor); @@ -293,7 +293,7 @@ int DoWallBloodDrip(DSWActor* actor) void SpawnMidSplash(DSWActor* actor) { auto actorNew = SpawnActor(STAT_MISSILE, GOREDrip, s_GoreSplash, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, ActorZOfMiddle(actor), actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, ActorZOfMiddle(actor), actor->spr.ang, 0); actorNew->spr.shade = -12; actorNew->spr.xrepeat = 70-RandomRange(20); @@ -316,7 +316,7 @@ void SpawnMidSplash(DSWActor* actor) void SpawnFloorSplash(DSWActor* actor) { auto actorNew = SpawnActor(STAT_MISSILE, GOREDrip, s_GoreFloorSplash, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); actorNew->spr.shade = -12; actorNew->spr.xrepeat = 70-RandomRange(20); @@ -359,9 +359,9 @@ int DoBloodSpray(DSWActor* actor) // special stuff for blood worm actor->add_int_z((actor->user.change.Z >> 1)); - getzsofslopeptr(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, &cz, &fz); + getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y, &cz, &fz); // pretend like we hit a sector - if (actor->spr.pos.Z >= fz) + if (actor->int_pos().Z >= fz) { actor->set_int_z(fz); SpawnFloorSplash(actor); @@ -420,7 +420,7 @@ int DoBloodSpray(DSWActor* actor) if (wph->lotag == TAG_WALL_BREAK) { - HitBreakWall(wph, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, actor->user.ID); + HitBreakWall(wph, actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, actor->user.ID); actor->user.coll.setNone(); break; } @@ -445,7 +445,7 @@ int DoBloodSpray(DSWActor* actor) actor->spr.xvel = actor->spr.yvel = actor->user.change.X = actor->user.change.Y = 0; actor->spr.xrepeat = actor->spr.yrepeat = 70 - RandomRange(25); - actor->set_int_xy(bldActor->spr.pos.X, bldActor->spr.pos.Y); + actor->set_int_xy(bldActor->int_pos().X, bldActor->int_pos().Y); // !FRANK! bit of a hack // yvel is the hit_wall @@ -453,7 +453,7 @@ int DoBloodSpray(DSWActor* actor) { // sy & sz are the ceiling and floor of the sector you are sliding down if (bldActor->tempwall->twoSided()) - getzsofslopeptr(bldActor->tempwall->nextSector(), actor->spr.pos.X, actor->spr.pos.Y, &actor->user.pos.Y, &actor->user.pos.Z); + getzsofslopeptr(bldActor->tempwall->nextSector(), actor->int_pos().X, actor->int_pos().Y, &actor->user.pos.Y, &actor->user.pos.Z); else actor->user.pos.Y = actor->user.pos.Z; // ceiling and floor are equal - white wall } @@ -468,7 +468,7 @@ int DoBloodSpray(DSWActor* actor) case kHitSector: { // hit floor - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) { if (actor->user.Flags & (SPR_UNDERWATER)) actor->user.Flags |= (SPR_BOUNCE); // no bouncing @@ -516,7 +516,7 @@ int DoBloodSpray(DSWActor* actor) { auto actorNew = SpawnActor(STAT_MISSILE, GOREDrip, s_BloodSpray, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 100); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 100); SetOwner(actor, actorNew); actorNew->spr.shade = -12; @@ -615,7 +615,7 @@ int DoPhosphorus(DSWActor* actor) if (wph->lotag == TAG_WALL_BREAK) { - HitBreakWall(wph, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, actor->user.ID); + HitBreakWall(wph, actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, actor->user.ID); actor->user.coll.setNone(); break; } @@ -643,7 +643,7 @@ int DoPhosphorus(DSWActor* actor) else { // hit a sector - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) { // hit a floor if (!(actor->user.Flags & SPR_BOUNCE)) @@ -672,7 +672,7 @@ int DoPhosphorus(DSWActor* actor) else { // hit floor - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) { if (actor->user.Flags & (SPR_UNDERWATER)) actor->user.Flags |= (SPR_BOUNCE); // no bouncing @@ -718,7 +718,7 @@ int DoPhosphorus(DSWActor* actor) { auto actorNew = SpawnActor(STAT_SKIP4, PUFF, s_PhosphorExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 100); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 100); actorNew->spr.hitag = LUMINOUS; // Always full brightness SetOwner(actor, actorNew); @@ -818,7 +818,7 @@ int DoChemBomb(DSWActor* actor) if (wph->lotag == TAG_WALL_BREAK) { - HitBreakWall(wph, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, actor->user.ID); + HitBreakWall(wph, actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, actor->user.ID); actor->user.coll.setNone(); break; } @@ -849,7 +849,7 @@ int DoChemBomb(DSWActor* actor) else { // hit a sector - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) { // hit a floor if (!(actor->user.Flags & SPR_BOUNCE)) @@ -888,7 +888,7 @@ int DoChemBomb(DSWActor* actor) else { // hit floor - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) { if (actor->user.Flags & (SPR_UNDERWATER)) actor->user.Flags |= (SPR_BOUNCE); // no bouncing @@ -941,7 +941,7 @@ int DoChemBomb(DSWActor* actor) if (!(actor->user.Flags & (SPR_BOUNCE | SPR_UNDERWATER)) && !(actor->spr.cstat & CSTAT_SPRITE_INVISIBLE)) { auto actorNew = SpawnActor(STAT_MISSILE, PUFF, s_Puff, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 100); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 100); SetOwner(actor, actorNew); actorNew->spr.shade = -40; @@ -1034,7 +1034,7 @@ int DoCaltrops(DSWActor* actor) if (wph->lotag == TAG_WALL_BREAK) { - HitBreakWall(wph, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, actor->user.ID); + HitBreakWall(wph, actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, actor->user.ID); actor->user.coll.setNone(); break; } @@ -1064,7 +1064,7 @@ int DoCaltrops(DSWActor* actor) else { // hit a sector - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) { // hit a floor if (!(actor->user.Flags & SPR_BOUNCE)) @@ -1094,7 +1094,7 @@ int DoCaltrops(DSWActor* actor) else { // hit floor - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) { if (actor->user.Flags & (SPR_UNDERWATER)) actor->user.Flags |= (SPR_BOUNCE); // no bouncing @@ -1170,7 +1170,7 @@ int SpawnRadiationCloud(DSWActor* actor) return -1; auto actorNew = SpawnActor(STAT_MISSILE, RADIATION_CLOUD, s_RadiationCloud, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - RANDOM_P2(Z(8)), actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - RANDOM_P2(Z(8)), actor->spr.ang, 0); SetOwner(GetOwner(actor), actorNew); actorNew->user.WaitTics = 1 * 120; @@ -1306,9 +1306,9 @@ int InitSpriteChemBomb(DSWActor* actor) PlaySound(DIGI_THROW, actor, v3df_dontpan | v3df_doppler); - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z; // Spawn a shot // Inserting and setting up variables @@ -1348,9 +1348,9 @@ int InitChemBomb(DSWActor* actor) { int nx, ny, nz; - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z; // Spawn a shot // Inserting and setting up variables @@ -1425,14 +1425,14 @@ int PlayerInitFlashBomb(PLAYER* pp) if (itActor == pp->actor) break; - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, tx, ty, tmin); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, tx, ty, tmin); if (dist > 16384) // Flash radius continue; if (!(actor->spr.cstat & CSTAT_SPRITE_BLOCK)) continue; - if (!FAFcansee(itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - ActorSizeZ(actor), actor->sector())) + if (!FAFcansee(itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - ActorSizeZ(actor), actor->sector())) continue; damage = GetDamage(itActor, pp->actor, DMG_FLASHBOMB); @@ -1484,14 +1484,14 @@ int InitFlashBomb(DSWActor* actor) SWStatIterator it(StatDamageList[stat]); while (auto itActor = it.Next()) { - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, tx, ty, tmin); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, tx, ty, tmin); if (dist > 16384) // Flash radius continue; if (!(actor->spr.cstat & CSTAT_SPRITE_BLOCK)) continue; - if (!FAFcansee(itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - ActorSizeZ(actor), actor->sector())) + if (!FAFcansee(itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - ActorSizeZ(actor), actor->sector())) continue; damage = GetDamage(itActor, actor, DMG_FLASHBOMB); @@ -1569,7 +1569,7 @@ void SpawnFlashBombOnActor(DSWActor* actor) } auto actorNew = SpawnActor(STAT_MISSILE, FIREBALL_FLAMES, s_FireballFlames, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); if (actor->user.flameActor != nullptr) actor->user.flameActor = actorNew; @@ -1676,9 +1676,9 @@ int InitCaltrops(DSWActor* actor) PlaySound(DIGI_THROW, actor, v3df_dontpan | v3df_doppler); - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z; // Spawn a shot // Inserting and setting up variables @@ -1718,9 +1718,9 @@ int InitPhosphorus(DSWActor* actor) PlaySound(DIGI_FIREBALL1, actor, v3df_follow); - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z; daang = NORM_ANGLE(RandomRange(2048)); @@ -1797,8 +1797,8 @@ int InitBloodSpray(DSWActor* actor, bool dogib, short velocity) else ang = NORM_ANGLE(ang+1024+256 - RandomRange(256)); - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; nz = ActorZOfTop(actor)-20; // Spawn a shot @@ -1880,7 +1880,7 @@ DSWActor* DoFlagRangeTest(DSWActor* actor, int range) SWStatIterator it(StatDamageList[stat]); while (auto itActor = it.Next()) { - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, tx, ty, tmin); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, tx, ty, tmin); if (dist > range) continue; @@ -1893,10 +1893,10 @@ DSWActor* DoFlagRangeTest(DSWActor* actor, int range) if (!(itActor->spr.extra & SPRX_PLAYER_OR_ENEMY)) continue; - if (!FAFcansee(itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->sector())) + if (!FAFcansee(itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->sector())) continue; - dist = FindDistance3D(actor->spr.pos - itActor->spr.pos); + dist = FindDistance3D(actor->int_pos() - itActor->int_pos()); if (dist > range) continue; @@ -1918,7 +1918,7 @@ int DoCarryFlag(DSWActor* actor) // if no Owner then die if (attached != nullptr) { - vec3_t pos = { attached->spr.pos.X, attached->spr.pos.Y, ActorZOfMiddle(attached) }; + vec3_t pos = { attached->int_pos().X, attached->int_pos().Y, ActorZOfMiddle(attached) }; SetActorZ(actor, &pos); actor->spr.ang = NORM_ANGLE(attached->spr.ang + 1536); } @@ -2067,10 +2067,10 @@ int DoCarryFlagNoDet(DSWActor* actor) // if no Owner then die if (attached != nullptr) { - vec3_t pos = { attached->spr.pos.X, attached->spr.pos.Y, ActorZOfMiddle(attached) }; + vec3_t pos = { attached->int_pos().X, attached->int_pos().Y, ActorZOfMiddle(attached) }; SetActorZ(actor, &pos); actor->spr.ang = NORM_ANGLE(attached->spr.ang + 1536); - actor->set_int_z(attached->spr.pos.Z - (ActorSizeZ(attached) >> 1)); + actor->set_int_z(attached->int_pos().Z - (ActorSizeZ(attached) >> 1)); } if (!attached->hasU() || attached->user.Health <= 0) @@ -2143,7 +2143,7 @@ int DoFlag(DSWActor* actor) // attach weapon to sprite actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN); SetAttach(hitActor, actor); - actor->user.pos.Z = hitActor->spr.pos.Z - (ActorSizeZ(hitActor) >> 1); + actor->user.pos.Z = hitActor->int_pos().Z - (ActorSizeZ(hitActor) >> 1); } } @@ -2160,8 +2160,8 @@ int SpawnShell(DSWActor* actor, int ShellNum) extern STATE s_ShotgunShellShrap[]; - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; nz = ActorZOfMiddle(actor); switch (ShellNum) diff --git a/source/games/sw/src/lava.cpp b/source/games/sw/src/lava.cpp index e7196da9f..c00bec281 100644 --- a/source/games/sw/src/lava.cpp +++ b/source/games/sw/src/lava.cpp @@ -472,7 +472,7 @@ int SetupLava(DSWActor* actor) actor->spr.clipdist = (512) >> 2; actor->user.Flags |= (SPR_XFLIP_TOGGLE|SPR_ELECTRO_TOLERANT); - actor->user.loz = actor->spr.pos.Z; + actor->user.loz = actor->int_pos().Z; return 0; } diff --git a/source/games/sw/src/miscactr.cpp b/source/games/sw/src/miscactr.cpp index cefa6c5b7..7b4937ae2 100644 --- a/source/games/sw/src/miscactr.cpp +++ b/source/games/sw/src/miscactr.cpp @@ -146,7 +146,7 @@ int DoToiletGirl(DSWActor* actor) bool ICanSee = false; DoActorPickClosePlayer(actor); - ICanSee = FAFcansee(actor->spr.pos.X,actor->spr.pos.Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->spr.pos.X,actor->user.targetActor->spr.pos.Y,ActorZOfMiddle(actor->user.targetActor),actor->user.targetActor->sector()); + ICanSee = FAFcansee(actor->int_pos().X,actor->int_pos().Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->int_pos().X,actor->user.targetActor->int_pos().Y,ActorZOfMiddle(actor->user.targetActor),actor->user.targetActor->sector()); if (actor->user.FlagOwner != 1) { @@ -199,7 +199,7 @@ int NullToiletGirl(DSWActor* actor) bool ICanSee = false; DoActorPickClosePlayer(actor); - ICanSee = FAFcansee(actor->spr.pos.X,actor->spr.pos.Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->spr.pos.X,actor->user.targetActor->spr.pos.Y,actor->user.targetActor->spr.pos.Z,actor->user.targetActor->sector()); + ICanSee = FAFcansee(actor->int_pos().X,actor->int_pos().Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->int_pos().X,actor->user.targetActor->int_pos().Y,actor->user.targetActor->int_pos().Z,actor->user.targetActor->sector()); if (!(actor->user.Flags & SPR_CLIMBING)) KeepActorOnFloor(actor); @@ -366,7 +366,7 @@ int DoWashGirl(DSWActor* actor) bool ICanSee = false; DoActorPickClosePlayer(actor); - ICanSee = FAFcansee(actor->spr.pos.X,actor->spr.pos.Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->spr.pos.X,actor->user.targetActor->spr.pos.Y,ActorZOfMiddle(actor->user.targetActor),actor->user.targetActor->sector()); + ICanSee = FAFcansee(actor->int_pos().X,actor->int_pos().Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->int_pos().X,actor->user.targetActor->int_pos().Y,ActorZOfMiddle(actor->user.targetActor),actor->user.targetActor->sector()); if (RandomRange(1000) > 980 && actor->user.ShellNum <= 0) { @@ -428,7 +428,7 @@ int NullWashGirl(DSWActor* actor) bool ICanSee = false; DoActorPickClosePlayer(actor); - ICanSee = FAFcansee(actor->spr.pos.X,actor->spr.pos.Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->spr.pos.X,actor->user.targetActor->spr.pos.Y,actor->user.targetActor->spr.pos.Z,actor->user.targetActor->sector()); + ICanSee = FAFcansee(actor->int_pos().X,actor->int_pos().Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->int_pos().X,actor->user.targetActor->int_pos().Y,actor->user.targetActor->int_pos().Z,actor->user.targetActor->sector()); if (!(actor->user.Flags & SPR_CLIMBING)) KeepActorOnFloor(actor); @@ -1154,7 +1154,7 @@ int DoCarGirl(DSWActor* actor) bool ICanSee = false; DoActorPickClosePlayer(actor); - ICanSee = FAFcansee(actor->spr.pos.X,actor->spr.pos.Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->spr.pos.X,actor->user.targetActor->spr.pos.Y,ActorZOfMiddle(actor->user.targetActor),actor->user.targetActor->sector()); + ICanSee = FAFcansee(actor->int_pos().X,actor->int_pos().Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->int_pos().X,actor->user.targetActor->int_pos().Y,ActorZOfMiddle(actor->user.targetActor),actor->user.targetActor->sector()); if (actor->user.FlagOwner == 1) { @@ -1198,7 +1198,7 @@ int NullCarGirl(DSWActor* actor) bool ICanSee = false; DoActorPickClosePlayer(actor); - ICanSee = FAFcansee(actor->spr.pos.X,actor->spr.pos.Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->spr.pos.X,actor->user.targetActor->spr.pos.Y,actor->user.targetActor->spr.pos.Z,actor->user.targetActor->sector()); + ICanSee = FAFcansee(actor->int_pos().X,actor->int_pos().Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->int_pos().X,actor->user.targetActor->int_pos().Y,actor->user.targetActor->int_pos().Z,actor->user.targetActor->sector()); if (!(actor->user.Flags & SPR_CLIMBING)) KeepActorOnFloor(actor); @@ -1354,7 +1354,7 @@ int DoMechanicGirl(DSWActor* actor) bool ICanSee = false; DoActorPickClosePlayer(actor); - ICanSee = FAFcansee(actor->spr.pos.X,actor->spr.pos.Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->spr.pos.X,actor->user.targetActor->spr.pos.Y,ActorZOfMiddle(actor->user.targetActor),actor->user.targetActor->sector()); + ICanSee = FAFcansee(actor->int_pos().X,actor->int_pos().Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->int_pos().X,actor->user.targetActor->int_pos().Y,ActorZOfMiddle(actor->user.targetActor),actor->user.targetActor->sector()); if (actor->user.FlagOwner == 1) { @@ -1398,7 +1398,7 @@ int NullMechanicGirl(DSWActor* actor) bool ICanSee = false; DoActorPickClosePlayer(actor); - ICanSee = FAFcansee(actor->spr.pos.X,actor->spr.pos.Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->spr.pos.X,actor->user.targetActor->spr.pos.Y,actor->user.targetActor->spr.pos.Z,actor->user.targetActor->sector()); + ICanSee = FAFcansee(actor->int_pos().X,actor->int_pos().Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->int_pos().X,actor->user.targetActor->int_pos().Y,actor->user.targetActor->int_pos().Z,actor->user.targetActor->sector()); if (!(actor->user.Flags & SPR_CLIMBING)) KeepActorOnFloor(actor); @@ -1555,7 +1555,7 @@ int DoSailorGirl(DSWActor* actor) bool ICanSee = false; DoActorPickClosePlayer(actor); - ICanSee = FAFcansee(actor->spr.pos.X,actor->spr.pos.Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->spr.pos.X,actor->user.targetActor->spr.pos.Y,ActorZOfMiddle(actor->user.targetActor),actor->user.targetActor->sector()); + ICanSee = FAFcansee(actor->int_pos().X,actor->int_pos().Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->int_pos().X,actor->user.targetActor->int_pos().Y,ActorZOfMiddle(actor->user.targetActor),actor->user.targetActor->sector()); if (actor->user.FlagOwner == 1) { @@ -1604,7 +1604,7 @@ int NullSailorGirl(DSWActor* actor) static short alreadythrew = 0; DoActorPickClosePlayer(actor); - ICanSee = FAFcansee(actor->spr.pos.X,actor->spr.pos.Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->spr.pos.X,actor->user.targetActor->spr.pos.Y,actor->user.targetActor->spr.pos.Z,actor->user.targetActor->sector()); + ICanSee = FAFcansee(actor->int_pos().X,actor->int_pos().Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->int_pos().X,actor->user.targetActor->int_pos().Y,actor->user.targetActor->int_pos().Z,actor->user.targetActor->sector()); if (!(actor->user.Flags & SPR_CLIMBING)) KeepActorOnFloor(actor); @@ -1748,7 +1748,7 @@ int DoPruneGirl(DSWActor* actor) bool ICanSee = false; DoActorPickClosePlayer(actor); - ICanSee = FAFcansee(actor->spr.pos.X,actor->spr.pos.Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->spr.pos.X,actor->user.targetActor->spr.pos.Y,ActorZOfMiddle(actor->user.targetActor),actor->user.targetActor->sector()); + ICanSee = FAFcansee(actor->int_pos().X,actor->int_pos().Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->int_pos().X,actor->user.targetActor->int_pos().Y,ActorZOfMiddle(actor->user.targetActor),actor->user.targetActor->sector()); if (actor->user.FlagOwner == 1) { @@ -1808,7 +1808,7 @@ int NullPruneGirl(DSWActor* actor) bool ICanSee = false; DoActorPickClosePlayer(actor); - ICanSee = FAFcansee(actor->spr.pos.X,actor->spr.pos.Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->spr.pos.X,actor->user.targetActor->spr.pos.Y,actor->user.targetActor->spr.pos.Z,actor->user.targetActor->sector()); + ICanSee = FAFcansee(actor->int_pos().X,actor->int_pos().Y,ActorZOfMiddle(actor),actor->sector(),actor->user.targetActor->int_pos().X,actor->user.targetActor->int_pos().Y,actor->user.targetActor->int_pos().Z,actor->user.targetActor->sector()); if (!(actor->user.Flags & SPR_CLIMBING)) KeepActorOnFloor(actor); diff --git a/source/games/sw/src/player.cpp b/source/games/sw/src/player.cpp index 06c663045..db0ebd75c 100644 --- a/source/games/sw/src/player.cpp +++ b/source/games/sw/src/player.cpp @@ -1163,7 +1163,7 @@ DSWActor* DoPickTarget(DSWActor* actor, uint32_t max_delta_ang, int skip_targets // Only look at closest ones //if ((dist = Distance(actor->spr.x, actor->spr.y, itActor->spr.x, itActor->spr.y)) > PICK_DIST) - if ((dist = FindDistance3D(actor->spr.pos - itActor->spr.pos)) > PICK_DIST) + if ((dist = FindDistance3D(actor->int_pos() - itActor->int_pos())) > PICK_DIST) continue; if (skip_targets != 2) // Used for spriteinfo mode @@ -1174,7 +1174,7 @@ DSWActor* DoPickTarget(DSWActor* actor, uint32_t max_delta_ang, int skip_targets } // Get the angle to the player - angle2 = NORM_ANGLE(getangle(itActor->spr.pos.X - actor->spr.pos.X, itActor->spr.pos.Y - actor->spr.pos.Y)); + angle2 = NORM_ANGLE(getangle(itActor->int_pos().X - actor->int_pos().X, itActor->int_pos().Y - actor->int_pos().Y)); // Get the angle difference // delta_ang = labs(pp->angle.ang.asbuild() - angle2); @@ -1195,9 +1195,9 @@ DSWActor* DoPickTarget(DSWActor* actor, uint32_t max_delta_ang, int skip_targets ezhl = ActorZOfBottom(itActor) - (ActorSizeZ(itActor) >> 2); // If you can't see 'em you can't shoot 'em - if (!FAFcansee(actor->spr.pos.X, actor->spr.pos.Y, zh, actor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, ezh, itActor->sector()) && - !FAFcansee(actor->spr.pos.X, actor->spr.pos.Y, zh, actor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, ezhm, itActor->sector()) && - !FAFcansee(actor->spr.pos.X, actor->spr.pos.Y, zh, actor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, ezhl, itActor->sector()) + if (!FAFcansee(actor->int_pos().X, actor->int_pos().Y, zh, actor->sector(), itActor->int_pos().X, itActor->int_pos().Y, ezh, itActor->sector()) && + !FAFcansee(actor->int_pos().X, actor->int_pos().Y, zh, actor->sector(), itActor->int_pos().X, itActor->int_pos().Y, ezhm, itActor->sector()) && + !FAFcansee(actor->int_pos().X, actor->int_pos().Y, zh, actor->sector(), itActor->int_pos().X, itActor->int_pos().Y, ezhl, itActor->sector()) ) continue; @@ -1300,14 +1300,14 @@ void DoSpawnTeleporterEffect(DSWActor* actor) nx = MOVEx(512, actor->spr.ang); ny = MOVEy(512, actor->spr.ang); - nx += actor->spr.pos.X; - ny += actor->spr.pos.Y; + nx += actor->int_pos().X; + ny += actor->int_pos().Y; auto effectActor = SpawnActor(STAT_MISSILE, 0, s_TeleportEffect, actor->sector(), nx, ny, ActorZOfTop(actor) + Z(16), actor->spr.ang, 0); - SetActorZ(effectActor, effectActor->spr.pos); + SetActorZ(effectActor, effectActor->int_pos()); effectActor->spr.shade = -40; effectActor->spr.xrepeat = effectActor->spr.yrepeat = 42; @@ -1322,10 +1322,10 @@ void DoSpawnTeleporterEffectPlace(DSWActor* actor) extern STATE s_TeleportEffect[]; auto effectActor = SpawnActor(STAT_MISSILE, 0, s_TeleportEffect, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, ActorZOfTop(actor) + Z(16), + actor->int_pos().X, actor->int_pos().Y, ActorZOfTop(actor) + Z(16), actor->spr.ang, 0); - SetActorZ(effectActor, effectActor->spr.pos); + SetActorZ(effectActor, effectActor->int_pos()); effectActor->spr.shade = -40; effectActor->spr.xrepeat = effectActor->spr.yrepeat = 42; @@ -1363,7 +1363,7 @@ void DoPlayerWarpTeleporter(PLAYER* pp) break; default: { - auto pos = act_warp->spr.pos; + auto pos = act_warp->int_pos(); DoPlayerTeleportToSprite(pp, &pos, act_warp->spr.ang); act_warp->set_int_pos(pos); @@ -1716,7 +1716,7 @@ void UpdatePlayerUnderSprite(PLAYER* pp) DSWActor* act_under = pp->PlayerUnderActor; - act_under->set_int_pos(act_over->spr.pos); + act_under->set_int_pos(act_over->int_pos()); ChangeActorSect(act_under, act_over->sector()); SpriteWarpToUnderwater(act_under); @@ -1871,7 +1871,7 @@ void DoPlayerZrange(PLAYER* pp) if (fsp->spr.statnum == STAT_ENEMY && floorColl.actor()->user.ID == ZOMBIE_RUN_R0) { pp->lo_sectp = fsp->sector(); - pp->loz = fsp->spr.pos.Z; + pp->loz = fsp->int_pos().Z; pp->lowActor = nullptr; } } @@ -2376,7 +2376,7 @@ void DriveCrush(PLAYER* pp, int *x, int *y) SWSectIterator it(sop->op_main_sector); while (auto actor = it.Next()) { - if (testpointinquad(actor->spr.pos.X, actor->spr.pos.Y, x, y)) + if (testpointinquad(actor->int_pos().X, actor->int_pos().Y, x, y)) { if ((actor->spr.extra & SPRX_BREAKABLE) && HitBreakSprite(actor, 0)) continue; @@ -2399,7 +2399,7 @@ void DriveCrush(PLAYER* pp, int *x, int *y) if (actor->spr.statnum > STAT_DONT_DRAW) continue; - if (actor->spr.pos.Z < sop->crush_z) + if (actor->int_pos().Z < sop->crush_z) continue; SpriteQueueDelete(actor); @@ -2411,10 +2411,10 @@ void DriveCrush(PLAYER* pp, int *x, int *y) SWStatIterator it2(STAT_ENEMY); while (auto actor = it.Next()) { - if (testpointinquad(actor->spr.pos.X, actor->spr.pos.Y, x, y)) + if (testpointinquad(actor->int_pos().X, actor->int_pos().Y, x, y)) { //if (actor->spr.z < pp->posz) - if (actor->spr.pos.Z < sop->crush_z) + if (actor->int_pos().Z < sop->crush_z) continue; int32_t const vel = FindDistance2D(pp->vect.X>>8, pp->vect.Y>>8); @@ -2438,9 +2438,9 @@ void DriveCrush(PLAYER* pp, int *x, int *y) it2.Reset(STAT_DEAD_ACTOR); while (auto actor = it.Next()) { - if (testpointinquad(actor->spr.pos.X, actor->spr.pos.Y, x, y)) + if (testpointinquad(actor->int_pos().X, actor->int_pos().Y, x, y)) { - if (actor->spr.pos.Z < sop->crush_z) + if (actor->int_pos().Z < sop->crush_z) continue; SpriteQueueDelete(actor); @@ -2460,12 +2460,12 @@ void DriveCrush(PLAYER* pp, int *x, int *y) if (actor->user.PlayerP == pp) continue; - if (testpointinquad(actor->spr.pos.X, actor->spr.pos.Y, x, y)) + if (testpointinquad(actor->int_pos().X, actor->int_pos().Y, x, y)) { int damage; //if (actor->spr.z < pp->posz) - if (actor->spr.pos.Z < sop->crush_z) + if (actor->int_pos().Z < sop->crush_z) continue; damage = -(actor->user.Health + 100); @@ -2483,7 +2483,7 @@ void DriveCrush(PLAYER* pp, int *x, int *y) while (auto actor = it.Next()) { // give some extra buffer - if (actor->spr.pos.Z < sop->crush_z + Z(40)) + if (actor->int_pos().Z < sop->crush_z + Z(40)) continue; if ((actor->spr.extra & SPRX_PLAYER_OR_ENEMY)) @@ -3197,7 +3197,7 @@ void DoPlayerClimb(PLAYER* pp) } // sprite - auto pos = plActor->spr.pos; + auto pos = plActor->int_pos(); if (pos.X != plActor->user.pos.X) { if (pos.X < plActor->user.pos.X) @@ -3350,8 +3350,8 @@ void DoPlayerClimb(PLAYER* pp) // set players "view" distance from the ladder - needs to be farther than // the sprite - pp->LadderPosition.X = lActor->spr.pos.X + nx * 5; - pp->LadderPosition.Y = lActor->spr.pos.Y + ny * 5; + pp->LadderPosition.X = lActor->int_pos().X + nx * 5; + pp->LadderPosition.Y = lActor->int_pos().Y + ny * 5; pp->angle.settarget(buildang(lActor->spr.ang + 1024)); } @@ -3644,7 +3644,7 @@ DSWActor* FindNearSprite(DSWActor* actor, short stat) SWStatIterator it(stat); while (auto itActor = it.Next()) { - dist = Distance(actor->spr.pos.X, actor->spr.pos.Y, itActor->spr.pos.X, itActor->spr.pos.Y); + dist = Distance(actor->int_pos().X, actor->int_pos().Y, itActor->int_pos().X, itActor->int_pos().Y); if (dist < near_dist) { @@ -3732,8 +3732,8 @@ bool PlayerOnLadder(PLAYER* pp) // set players "view" distance from the ladder - needs to be farther than // the sprite - pp->LadderPosition.X = lActor->spr.pos.X + nx * 5; - pp->LadderPosition.Y = lActor->spr.pos.Y + ny * 5; + pp->LadderPosition.X = lActor->int_pos().X + nx * 5; + pp->LadderPosition.Y = lActor->int_pos().Y + ny * 5; pp->angle.settarget(buildang(lActor->spr.ang + 1024)); @@ -4037,12 +4037,12 @@ void DoPlayerWarpToUnderwater(PLAYER* pp) PRODUCTION_ASSERT(Found == true); // get the offset from the sprite - plActor->user.pos.X = over_act->spr.pos.X - pp->pos.X; - plActor->user.pos.Y = over_act->spr.pos.Y - pp->pos.Y; + plActor->user.pos.X = over_act->int_pos().X - pp->pos.X; + plActor->user.pos.Y = over_act->int_pos().Y - pp->pos.Y; // update to the new x y position - pp->pos.X = under_act->spr.pos.X - plActor->user.pos.X; - pp->pos.Y = under_act->spr.pos.Y - plActor->user.pos.Y; + pp->pos.X = under_act->int_pos().X - plActor->user.pos.X; + pp->pos.Y = under_act->int_pos().Y - plActor->user.pos.Y; auto over = over_act->sector(); auto under = under_act->sector(); @@ -4107,12 +4107,12 @@ void DoPlayerWarpToSurface(PLAYER* pp) PRODUCTION_ASSERT(Found == true); // get the offset from the under sprite - plActor->user.pos.X = under_act->spr.pos.X - pp->pos.X; - plActor->user.pos.Y = under_act->spr.pos.Y - pp->pos.Y; + plActor->user.pos.X = under_act->int_pos().X - pp->pos.X; + plActor->user.pos.Y = under_act->int_pos().Y - pp->pos.Y; // update to the new x y position - pp->pos.X = over_act->spr.pos.X - plActor->user.pos.X; - pp->pos.Y = over_act->spr.pos.Y - plActor->user.pos.Y; + pp->pos.X = over_act->int_pos().X - plActor->user.pos.X; + pp->pos.Y = over_act->int_pos().Y - plActor->user.pos.Y; auto over = over_act->sector(); auto under = under_act->sector(); @@ -5090,8 +5090,8 @@ void PlayerRemoteReset(PLAYER* pp, sectortype* sect) pp->lastcursector = pp->cursector; auto rsp = pp->remoteActor; - pp->pos.X = rsp->spr.pos.X; - pp->pos.Y = rsp->spr.pos.Y; + pp->pos.X = rsp->int_pos().X; + pp->pos.Y = rsp->int_pos().Y; pp->pos.Z = sect->floorz - PLAYER_HEIGHT; pp->vect.X = pp->vect.Y = pp->ovect.X = pp->ovect.Y = pp->slide_vect.X = pp->slide_vect.Y = 0; @@ -5718,9 +5718,9 @@ void DoPlayerDeathFollowKiller(PLAYER* pp) DSWActor* killer = pp->KillerActor; if (killer) { - if (FAFcansee(killer->spr.pos.X, killer->spr.pos.Y, ActorZOfTop(killer), killer->sector(), pp->pos.X, pp->pos.Y, pp->pos.Z, pp->cursector)) + if (FAFcansee(killer->int_pos().X, killer->int_pos().Y, ActorZOfTop(killer), killer->sector(), pp->pos.X, pp->pos.Y, pp->pos.Z, pp->cursector)) { - pp->angle.addadjustment(getincanglebam(pp->angle.ang, bvectangbam(killer->spr.pos.X - pp->pos.X, killer->spr.pos.Y - pp->pos.Y)) >> 4); + pp->angle.addadjustment(getincanglebam(pp->angle.ang, bvectangbam(killer->int_pos().X - pp->pos.X, killer->int_pos().Y - pp->pos.Y)) >> 4); } } } @@ -5837,13 +5837,13 @@ void DoPlayerDeathCheckKick(PLAYER* pp) if (!(itActor->spr.extra & SPRX_PLAYER_OR_ENEMY)) continue; - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, plActor->spr.pos.X, plActor->spr.pos.Y, dist, a, b, c); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, plActor->int_pos().X, plActor->int_pos().Y, dist, a, b, c); if (unsigned(dist) < itActor->user.Radius + 100) { pp->KillerActor = itActor; - plActor->user.slide_ang = getangle(plActor->spr.pos.X - itActor->spr.pos.X, plActor->spr.pos.Y - itActor->spr.pos.Y); + plActor->user.slide_ang = getangle(plActor->int_pos().X - itActor->int_pos().X, plActor->int_pos().Y - itActor->int_pos().Y); plActor->user.slide_ang = NORM_ANGLE(plActor->user.slide_ang + (RANDOM_P2(128<<5)>>5) - 64); plActor->user.slide_vel = itActor->spr.xvel<<1; @@ -5914,8 +5914,8 @@ void DoPlayerDeathMoveHead(PLAYER* pp) } } - pp->pos.X = plActor->spr.pos.X; - pp->pos.Y = plActor->spr.pos.Y; + pp->pos.X = plActor->int_pos().X; + pp->pos.Y = plActor->int_pos().Y; pp->setcursector(plActor->sector()); // try to stay in valid area - death sometimes throws you out of the map @@ -6786,7 +6786,7 @@ int SearchSpawnPosition(PLAYER* pp) if (opp != pp) // don't test for yourself { - if (FindDistance3D(spawn_sprite->spr.pos - opp->pos) < 1000) + if (FindDistance3D(spawn_sprite->int_pos() - opp->pos) < 1000) { blocked = true; break; @@ -6864,7 +6864,7 @@ void PlayerSpawnPosition(PLAYER* pp) ASSERT(spawn_sprite != nullptr); - pp->pos = pp->opos = spawn_sprite->spr.pos; + pp->pos = pp->opos = spawn_sprite->int_pos(); pp->angle.ang = pp->angle.oang = buildang(spawn_sprite->spr.ang); pp->setcursector(spawn_sprite->sector()); diff --git a/source/games/sw/src/quake.cpp b/source/games/sw/src/quake.cpp index 2f403d30e..586b87223 100644 --- a/source/games/sw/src/quake.cpp +++ b/source/games/sw/src/quake.cpp @@ -172,7 +172,7 @@ void QuakeViewChange(PLAYER* pp, int *z_diff, int *x_diff, int *y_diff, short *a SWStatIterator it(STAT_QUAKE_ON); while ((actor = it.Next())) { - dist = FindDistance3D(pp->pos - actor->spr.pos); + dist = FindDistance3D(pp->pos - actor->int_pos()); // shake whole level if (QUAKE_TestDontTaper(actor)) @@ -248,13 +248,13 @@ bool SetQuake(PLAYER* pp, short tics, short amt) int SetExpQuake(DSWActor* actor) { - SpawnQuake(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, 40, 4, 20000); // !JIM! was 8, 40000 + SpawnQuake(actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, 40, 4, 20000); // !JIM! was 8, 40000 return 0; } int SetGunQuake(DSWActor* actor) { - SpawnQuake(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, 40, 8, 40000); + SpawnQuake(actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, 40, 8, 40000); return 0; } @@ -266,19 +266,19 @@ int SetPlayerQuake(PLAYER* pp) int SetNuclearQuake(DSWActor* actor) { - SpawnQuake(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, 400, 8, 64000); + SpawnQuake(actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, 400, 8, 64000); return 0; } int SetSumoQuake(DSWActor* actor) { - SpawnQuake(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, 120, 4, 20000); + SpawnQuake(actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, 120, 4, 20000); return 0; } int SetSumoFartQuake(DSWActor* actor) { - SpawnQuake(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, 60, 4, 4000); + SpawnQuake(actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, 60, 4, 4000); return 0; } diff --git a/source/games/sw/src/ripper.cpp b/source/games/sw/src/ripper.cpp index 20e718483..f5f0e813a 100644 --- a/source/games/sw/src/ripper.cpp +++ b/source/games/sw/src/ripper.cpp @@ -929,7 +929,7 @@ int InitRipperHang(DSWActor* actor) { tang = NORM_ANGLE(actor->spr.ang + dang); - FAFhitscan(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - ActorSizeZ(actor), actor->sector(), // Start position + FAFhitscan(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - ActorSizeZ(actor), actor->sector(), // Start position bcos(tang), // X vector of 3D ang bsin(tang), // Y vector of 3D ang 0, // Z vector of 3D ang @@ -938,7 +938,7 @@ int InitRipperHang(DSWActor* actor) if (hit.hitSector == nullptr) continue; - dist = Distance(actor->spr.pos.X, actor->spr.pos.Y, hit.hitpos.X, hit.hitpos.Y); + dist = Distance(actor->int_pos().X, actor->int_pos().Y, hit.hitpos.X, hit.hitpos.Y); if (hit.hitWall == nullptr || dist < 2000 || dist > 7000) { @@ -1045,7 +1045,7 @@ int DoRipperBeginJumpAttack(DSWActor* actor) DSWActor* target = actor->user.targetActor; short tang; - tang = getangle(target->spr.pos.X - actor->spr.pos.X, target->spr.pos.Y - actor->spr.pos.Y); + tang = getangle(target->int_pos().X - actor->int_pos().X, target->int_pos().Y - actor->int_pos().Y); Collision coll = move_sprite(actor, bcos(tang, -7), bsin(tang, -7), 0L, actor->user.ceiling_dist, actor->user.floor_dist, CLIPMASK_ACTOR, ACTORMOVETICS); @@ -1149,7 +1149,7 @@ int DoRipperRipHeart(DSWActor* actor) actor->user.WaitTics = 6 * 120; // player face ripper - target->spr.ang = getangle(actor->spr.pos.X - target->spr.pos.X, actor->spr.pos.Y - target->spr.pos.Y); + target->spr.ang = getangle(actor->int_pos().X - target->int_pos().X, actor->int_pos().Y - target->int_pos().Y); return 0; } @@ -1174,7 +1174,7 @@ void RipperHatch(DSWActor* actor) { auto actorNew = insertActor(actor->sector(), STAT_DEFAULT); ClearOwner(actorNew); - actorNew->set_int_pos(actor->spr.pos); + actorNew->set_int_pos(actor->int_pos()); actorNew->spr.xrepeat = actorNew->spr.yrepeat = 64; actorNew->spr.ang = rip_ang[i]; actorNew->spr.pal = 0; diff --git a/source/games/sw/src/ripper2.cpp b/source/games/sw/src/ripper2.cpp index 85cfc4da2..edad2a05a 100644 --- a/source/games/sw/src/ripper2.cpp +++ b/source/games/sw/src/ripper2.cpp @@ -938,7 +938,7 @@ int InitRipper2Hang(DSWActor* actor) { tang = NORM_ANGLE(actor->spr.ang + dang); - FAFhitscan(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - ActorSizeZ(actor), actor->sector(), // Start position + FAFhitscan(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - ActorSizeZ(actor), actor->sector(), // Start position bcos(tang), // X vector of 3D ang bsin(tang), // Y vector of 3D ang 0, // Z vector of 3D ang @@ -947,7 +947,7 @@ int InitRipper2Hang(DSWActor* actor) if (hit.hitSector == nullptr) continue; - dist = Distance(actor->spr.pos.X, actor->spr.pos.Y, hit.hitpos.X, hit.hitpos.Y); + dist = Distance(actor->int_pos().X, actor->int_pos().Y, hit.hitpos.X, hit.hitpos.Y); if (hit.hitWall == nullptr || dist < 2000 || dist > 7000) { @@ -1012,7 +1012,7 @@ int DoRipper2MoveHang(DSWActor* actor) short w, nw; // Don't keep clinging and going ever higher! - if (abs(actor->spr.pos.Z - actor->user.targetActor->spr.pos.Z) > (4000<<4)) + if (abs(actor->int_pos().Z - actor->user.targetActor->int_pos().Z) > (4000<<4)) return 0; NewStateGroup(actor, actor->user.ActorActionSet->Special[1]); @@ -1065,7 +1065,7 @@ int DoRipper2BeginJumpAttack(DSWActor* actor) DSWActor* target = actor->user.targetActor; short tang; - tang = getangle(target->spr.pos.X - actor->spr.pos.X, target->spr.pos.Y - actor->spr.pos.Y); + tang = getangle(target->int_pos().X - actor->int_pos().X, target->int_pos().Y - actor->int_pos().Y); // Always jump at player if mad. @@ -1171,7 +1171,7 @@ int DoRipper2RipHeart(DSWActor* actor) actor->user.WaitTics = 6 * 120; // player face ripper2 - target->spr.ang = getangle(actor->spr.pos.X - target->spr.pos.X, actor->spr.pos.Y - target->spr.pos.Y); + target->spr.ang = getangle(actor->int_pos().X - target->int_pos().X, actor->int_pos().Y - target->int_pos().Y); return 0; } @@ -1199,7 +1199,7 @@ void Ripper2Hatch(DSWActor* actor) { auto actorNew = insertActor(actor->sector(), STAT_DEFAULT); ClearOwner(actorNew); - actorNew->set_int_pos(actor->spr.pos); + actorNew->set_int_pos(actor->int_pos()); actorNew->spr.xrepeat = actorNew->spr.yrepeat = 64; actorNew->spr.ang = rip_ang[i]; diff --git a/source/games/sw/src/rooms.cpp b/source/games/sw/src/rooms.cpp index 73690824e..20640e2dd 100644 --- a/source/games/sw/src/rooms.cpp +++ b/source/games/sw/src/rooms.cpp @@ -672,8 +672,8 @@ bool FindCeilingView(int match, int* x, int* y, int z, sectortype** sect) { if (actor->spr.hitag == VIEW_THRU_CEILING && actor->spr.lotag == match) { - xoff = *x - actor->spr.pos.X; - yoff = *y - actor->spr.pos.Y; + xoff = *x - actor->int_pos().X; + yoff = *y - actor->int_pos().Y; break; } } @@ -688,8 +688,8 @@ bool FindCeilingView(int match, int* x, int* y, int z, sectortype** sect) { sectortype* upper,* lower; - *x = actor->spr.pos.X + xoff; - *y = actor->spr.pos.Y + yoff; + *x = actor->int_pos().X + xoff; + *y = actor->int_pos().Y + yoff; // get new sector GetUpperLowerSector(match, *x, *y, &upper, &lower); @@ -729,8 +729,8 @@ bool FindFloorView(int match, int* x, int* y, int z, sectortype** sect) { if (actor->spr.hitag == VIEW_THRU_FLOOR && actor->spr.lotag == match) { - xoff = *x - actor->spr.pos.X; - yoff = *y - actor->spr.pos.Y; + xoff = *x - actor->int_pos().X; + yoff = *y - actor->int_pos().Y; break; } } @@ -746,8 +746,8 @@ bool FindFloorView(int match, int* x, int* y, int z, sectortype** sect) { sectortype* upper,* lower; - *x = actor->spr.pos.X + xoff; - *y = actor->spr.pos.Y + yoff; + *x = actor->int_pos().X + xoff; + *y = actor->int_pos().Y + yoff; // get new sector GetUpperLowerSector(match, *x, *y, &upper, &lower); @@ -867,9 +867,9 @@ void CollectPortals() SWSectIterator it(sec); while (auto actor = it.Next()) { - int tx = actor->spr.pos.X; - int ty = actor->spr.pos.Y; - int tz = actor->spr.pos.Z; + int tx = actor->int_pos().X; + int ty = actor->int_pos().Y; + int tz = actor->int_pos().Z; auto tsect = §or[sec]; int match = FindViewSectorInScene(tsect, VIEW_LEVEL1); @@ -881,7 +881,7 @@ void CollectPortals() // got something! fp.othersector = sectnum(tsect); fp.offset = { tx, ty, tz }; - fp.offset -= actor->spr.pos; + fp.offset -= actor->int_pos(); goto nextfg; } } @@ -897,9 +897,9 @@ void CollectPortals() SWSectIterator it(sec); while (auto actor = it.Next()) { - int tx = actor->spr.pos.X; - int ty = actor->spr.pos.Y; - int tz = actor->spr.pos.Z; + int tx = actor->int_pos().X; + int ty = actor->int_pos().Y; + int tz = actor->int_pos().Z; auto tsect = §or[sec]; int match = FindViewSectorInScene(tsect, VIEW_LEVEL2); @@ -911,7 +911,7 @@ void CollectPortals() // got something! fp.othersector = sectnum(tsect); fp.offset = { tx, ty, tz }; - fp.offset -= actor->spr.pos; + fp.offset -= actor->int_pos(); goto nextcg; } } diff --git a/source/games/sw/src/rotator.cpp b/source/games/sw/src/rotator.cpp index 4727a8e56..516d40c79 100644 --- a/source/games/sw/src/rotator.cpp +++ b/source/games/sw/src/rotator.cpp @@ -326,7 +326,7 @@ int DoRotator(DSWActor* actor) { if (itActor->spr.lotag == actor->spr.lotag) { - dist = Distance(actor->spr.pos.X, actor->spr.pos.Y, itActor->spr.pos.X, itActor->spr.pos.Y); + dist = Distance(actor->int_pos().X, actor->int_pos().Y, itActor->int_pos().X, itActor->int_pos().Y); if (dist < closest) { closest = dist; @@ -343,7 +343,7 @@ int DoRotator(DSWActor* actor) for(auto& wal : wallsofsector(actor->sector())) { vec2_t const orig = { r->origX[ndx], r->origY[ndx] }; - rotatepoint(pivot->spr.pos.vec2, orig, r->pos, &nxy); + rotatepoint(pivot->int_pos().vec2, orig, r->pos, &nxy); dragpoint(&wal, nxy.X, nxy.Y); ndx++; diff --git a/source/games/sw/src/sector.cpp b/source/games/sw/src/sector.cpp index 8f82d2fb7..07c2dd56a 100644 --- a/source/games/sw/src/sector.cpp +++ b/source/games/sw/src/sector.cpp @@ -124,7 +124,7 @@ void WallSetupDontMove(void) { for(auto& wal : wall) { - if (wal.wall_int_pos().X < jActor->spr.pos.X && wal.wall_int_pos().X > iActor->spr.pos.X && wal.wall_int_pos().Y < jActor->spr.pos.Y && wal.wall_int_pos().Y > iActor->spr.pos.Y) + if (wal.wall_int_pos().X < jActor->int_pos().X && wal.wall_int_pos().X > iActor->int_pos().X && wal.wall_int_pos().Y < jActor->int_pos().Y && wal.wall_int_pos().Y > iActor->int_pos().Y) { wal.extra |= WALLFX_DONT_MOVE; } @@ -841,7 +841,7 @@ void SectorExp(DSWActor* actor, sectortype* sectp, short orig_ang, int zh) // setup vars needed by SectorExp ChangeActorSect(actor, sectp); - getzsofslopeptr(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, &actor->user.hiz, &actor->user.loz); + getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y, &actor->user.hiz, &actor->user.loz); // spawn explosion auto exp = SpawnSectorExp(actor); @@ -929,7 +929,7 @@ void DoSpawnSpotsForKill(short match) change_actor_stat(actor, STAT_NO_STATE); actor->user.ActorActionFunc = DoSpawnSpot; actor->user.WaitTics = SP_TAG5(actor) * 15; - SetActorZ(actor, actor->spr.pos); + SetActorZ(actor, actor->int_pos()); // setting for Killed actor->user.LastDamage = 1; } @@ -1133,7 +1133,7 @@ void WeaponExplodeSectorInRange(DSWActor* wActor) while (auto actor = it.Next()) { // test to see if explosion is close to crack sprite - dist = FindDistance3D(wActor->spr.pos - actor->spr.pos); + dist = FindDistance3D(wActor->int_pos() - actor->int_pos()); if (actor->spr.clipdist == 0) continue; @@ -1143,7 +1143,7 @@ void WeaponExplodeSectorInRange(DSWActor* wActor) if ((unsigned int)dist > (wActor->user.Radius/2) + radius) continue; - if (!FAFcansee(wActor->spr.pos.X,wActor->spr.pos.Y,wActor->spr.pos.Z,wActor->sector(),actor->spr.pos.X,actor->spr.pos.Y,actor->spr.pos.Z,actor->sector())) + if (!FAFcansee(wActor->int_pos().X,wActor->int_pos().Y,wActor->int_pos().Z,wActor->sector(),actor->int_pos().X,actor->int_pos().Y,actor->int_pos().Z,actor->sector())) continue; @@ -1200,8 +1200,8 @@ void DoDeleteSpriteMatch(short match) if (actor->spr.lotag == match) { found = actor; - del_x = actor->spr.pos.X; - del_y = actor->spr.pos.Y; + del_x = actor->int_pos().X; + del_y = actor->int_pos().Y; break; } } @@ -1214,7 +1214,7 @@ void DoDeleteSpriteMatch(short match) it.Reset(StatList[stat]); while (auto actor = it.Next()) { - if (del_x == actor->spr.pos.X && del_y == actor->spr.pos.Y) + if (del_x == actor->int_pos().X && del_y == actor->int_pos().Y) { // special case lighting delete of Fade On/off after fades if (StatList[stat] == STAT_LIGHTING) @@ -1380,7 +1380,7 @@ int OperateSprite(DSWActor* actor, short player_is_operating) { pp = GlobPlayerP; - if (!FAFcansee(pp->pos.X, pp->pos.Y, pp->pos.Z, pp->cursector, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - (ActorSizeZ(actor) >> 1), actor->sector())) + if (!FAFcansee(pp->pos.X, pp->pos.Y, pp->pos.Z, pp->cursector, actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - (ActorSizeZ(actor) >> 1), actor->sector())) return false; } @@ -1837,7 +1837,7 @@ void OperateTripTrigger(PLAYER* pp) { if (actor->user.Flags & (SPR_WAIT_FOR_TRIGGER)) { - if (Distance(actor->spr.pos.X, actor->spr.pos.Y, pp->pos.X, pp->pos.Y) < dist) + if (Distance(actor->int_pos().X, actor->int_pos().Y, pp->pos.X, pp->pos.Y) < dist) { actor->user.targetActor = pp->actor; actor->user.Flags &= ~(SPR_WAIT_FOR_TRIGGER); @@ -2128,7 +2128,7 @@ int DoPlayerGrabStar(PLAYER* pp) auto actor = StarQueue[i]; if (actor != nullptr) { - if (FindDistance3D(actor->spr.pos.X - pp->pos.X, actor->spr.pos.Y - pp->pos.Y, actor->spr.pos.Z - pp->pos.Z + Z(12)) < 500) + if (FindDistance3D(actor->int_pos().X - pp->pos.X, actor->int_pos().Y - pp->pos.Y, actor->int_pos().Z - pp->pos.Z + Z(12)) < 500) { break; } @@ -2205,8 +2205,8 @@ void PlayerOperateEnv(PLAYER* pp) int z[3]; DSWActor* plActor = pp->actor; - z[0] = plActor->spr.pos.Z - ActorSizeZ(plActor) - Z(10); - z[1] = plActor->spr.pos.Z; + z[0] = plActor->int_pos().Z - ActorSizeZ(plActor) - Z(10); + z[1] = plActor->int_pos().Z; z[2] = (z[0] + z[1]) >> 1; for (unsigned i = 0; i < SIZ(z); i++) diff --git a/source/games/sw/src/serp.cpp b/source/games/sw/src/serp.cpp index a5c74d259..217c1b992 100644 --- a/source/games/sw/src/serp.cpp +++ b/source/games/sw/src/serp.cpp @@ -730,7 +730,7 @@ int SetupSerp(DSWActor* actor) actor->spr.clipdist = (512) >> 2; actor->user.Flags |= (SPR_XFLIP_TOGGLE|SPR_ELECTRO_TOLERANT); - actor->user.loz = actor->spr.pos.Z; + actor->user.loz = actor->int_pos().Z; // amount to move up for clipmove actor->user.zclip = Z(80); diff --git a/source/games/sw/src/skull.cpp b/source/games/sw/src/skull.cpp index db807b7c2..16e0900b1 100644 --- a/source/games/sw/src/skull.cpp +++ b/source/games/sw/src/skull.cpp @@ -236,14 +236,14 @@ int SetupSkull(DSWActor* actor) { actor->set_int_z(actor->user.loz + Z(tileTopOffset(actor->spr.picnum))); - actor->user.loz = actor->spr.pos.Z; + actor->user.loz = actor->int_pos().Z; // leave 8 pixels above the ground actor->add_int_z(ActorSizeToTop(actor) - Z(3)); } else { actor->user.Counter = RANDOM_P2(2048); - actor->user.pos.Z = actor->spr.pos.Z; + actor->user.pos.Z = actor->int_pos().Z; } @@ -363,7 +363,7 @@ int DoSkullJump(DSWActor* actor) int dist,a,b,c; - DISTANCE(actor->spr.pos.X, actor->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y, dist, a, b, c); + DISTANCE(actor->int_pos().X, actor->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y, dist, a, b, c); if (dist < 1000 && SpriteOverlapZ(actor, actor->user.targetActor, Z(32))) @@ -373,7 +373,7 @@ int DoSkullJump(DSWActor* actor) return 0; } - if ((actor->spr.pos.Z > actor->user.loz - Z(36))) + if ((actor->int_pos().Z > actor->user.loz - Z(36))) { actor->set_int_z(actor->user.loz - Z(36)); UpdateSinglePlayKills(actor); @@ -425,7 +425,7 @@ int DoSkullWait(DSWActor* actor) { int a,b,c,dist; - DISTANCE(actor->spr.pos.X, actor->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y, dist, a, b, c); + DISTANCE(actor->int_pos().X, actor->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y, dist, a, b, c); DoActorPickClosePlayer(actor); @@ -439,7 +439,7 @@ int DoSkullWait(DSWActor* actor) } // below the floor type - if (actor->spr.pos.Z > actor->user.loz) + if (actor->int_pos().Z > actor->user.loz) { // look for closest player every once in a while if (dist < 3500) @@ -459,7 +459,7 @@ int DoSkullWait(DSWActor* actor) if (dist < 8000) { - actor->spr.ang = getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y); + actor->spr.ang = getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y); actor->spr.xvel = 128 + (RANDOM_P2(256<<8)>>8); actor->user.jump_speed = -700; NewStateGroup(actor, sg_SkullJump); @@ -621,14 +621,14 @@ int SetupBetty(DSWActor* actor) { actor->set_int_z(actor->user.loz + Z(tileTopOffset(actor->spr.picnum))); - actor->user.loz = actor->spr.pos.Z; + actor->user.loz = actor->int_pos().Z; // leave 8 pixels above the ground actor->add_int_z(ActorSizeToTop(actor) - Z(3)); } else { actor->user.Counter = RANDOM_P2(2048); - actor->user.pos.Z = actor->spr.pos.Z; + actor->user.pos.Z = actor->int_pos().Z; } @@ -741,7 +741,7 @@ int DoBettyJump(DSWActor* actor) { int dist,a,b,c; - DISTANCE(actor->spr.pos.X, actor->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y, dist, a, b, c); + DISTANCE(actor->int_pos().X, actor->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y, dist, a, b, c); if (dist < 1000 && SpriteOverlapZ(actor, actor->user.targetActor, Z(32))) @@ -751,7 +751,7 @@ int DoBettyJump(DSWActor* actor) return 0; } - if ((actor->spr.pos.Z > actor->user.loz - Z(36))) + if ((actor->int_pos().Z > actor->user.loz - Z(36))) { actor->set_int_z(actor->user.loz - Z(36)); UpdateSinglePlayKills(actor); @@ -800,7 +800,7 @@ int DoBettyWait(DSWActor* actor) { int a,b,c,dist; - DISTANCE(actor->spr.pos.X, actor->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y, dist, a, b, c); + DISTANCE(actor->int_pos().X, actor->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y, dist, a, b, c); DoActorPickClosePlayer(actor); @@ -811,7 +811,7 @@ int DoBettyWait(DSWActor* actor) } // below the floor type - if (actor->spr.pos.Z > actor->user.loz) + if (actor->int_pos().Z > actor->user.loz) { // look for closest player every once in a while if (dist < 3500) @@ -831,7 +831,7 @@ int DoBettyWait(DSWActor* actor) if (dist < 8000) { - actor->spr.ang = getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y); + actor->spr.ang = getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y); actor->spr.xvel = 128 + (RANDOM_P2(256<<8)>>8); actor->user.jump_speed = -700; NewStateGroup(actor, sg_BettyJump); diff --git a/source/games/sw/src/sounds.cpp b/source/games/sw/src/sounds.cpp index 0e506e147..23fe01a2d 100644 --- a/source/games/sw/src/sounds.cpp +++ b/source/games/sw/src/sounds.cpp @@ -375,12 +375,12 @@ static void UpdateAmbients() for (auto& amb : ambients) { auto spot = amb->spot; - auto sdist = SoundDist(spot->spr.pos.X, spot->spr.pos.Y, spot->spr.pos.Z, voc[amb->vocIndex].voc_distance); + auto sdist = SoundDist(spot->int_pos().X, spot->int_pos().Y, spot->int_pos().Z, voc[amb->vocIndex].voc_distance); if (sdist < 255 && amb->vocIndex == DIGI_WHIPME) { PLAYER* pp = Player + screenpeek; - if (!FAFcansee(spot->spr.pos.X, spot->spr.pos.Y, spot->spr.pos.Z, spot->sector(), pp->pos.X, pp->pos.Y, pp->pos.Z, pp->cursector)) + if (!FAFcansee(spot->int_pos().X, spot->int_pos().Y, spot->int_pos().Z, spot->sector(), pp->pos.X, pp->pos.Y, pp->pos.Z, pp->cursector)) { sdist = 255; } @@ -644,7 +644,7 @@ int _PlaySound(int num, DSWActor* actor, PLAYER* pp, vec3_t* ppos, int flags, in { if (actor && !ppos) { - pos = actor->spr.pos; + pos = actor->int_pos(); actor = nullptr; } else if (pp && !ppos) diff --git a/source/games/sw/src/spike.cpp b/source/games/sw/src/spike.cpp index 53f7cf8d1..256d3af3d 100644 --- a/source/games/sw/src/spike.cpp +++ b/source/games/sw/src/spike.cpp @@ -51,15 +51,15 @@ void ReverseSpike(DSWActor* actor) // moving toward to OFF pos if (actor->user.z_tgt == actor->user.oz) { - if (actor->spr.pos.Z == actor->user.oz) + if (actor->int_pos().Z == actor->user.oz) actor->user.z_tgt = actor->user.pos.Z; else if (actor->user.pos.Z == actor->user.oz) - actor->user.z_tgt = actor->spr.pos.Z; + actor->user.z_tgt = actor->int_pos().Z; } else if (actor->user.z_tgt == actor->user.pos.Z) { - if (actor->spr.pos.Z == actor->user.oz) - actor->user.z_tgt = actor->spr.pos.Z; + if (actor->int_pos().Z == actor->user.oz) + actor->user.z_tgt = actor->int_pos().Z; else if (actor->user.pos.Z == actor->user.oz) actor->user.z_tgt = actor->user.pos.Z; } @@ -102,7 +102,7 @@ void SetSpikeActive(DSWActor* actor) actor->user.Tics = 0; // moving to the ON position - if (actor->user.z_tgt == actor->spr.pos.Z) + if (actor->user.z_tgt == actor->int_pos().Z) VatorSwitch(SP_TAG2(actor), true); else // moving to the OFF position @@ -232,16 +232,16 @@ void SpikeAlign(DSWActor* actor) if ((int8_t)SP_TAG7(actor) < 0) { if (actor->spr.cstat & (CSTAT_SPRITE_YFLIP)) - alignceilslope(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->user.zclip); + alignceilslope(actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->user.zclip); else - alignflorslope(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->user.zclip); + alignflorslope(actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->user.zclip); } else { if (actor->spr.cstat & (CSTAT_SPRITE_YFLIP)) - SOBJ_AlignCeilingToPoint(&SectorObject[SP_TAG7(actor)], actor->spr.pos.X, actor->spr.pos.Y, actor->user.zclip); + SOBJ_AlignCeilingToPoint(&SectorObject[SP_TAG7(actor)], actor->int_pos().X, actor->int_pos().Y, actor->user.zclip); else - SOBJ_AlignFloorToPoint(&SectorObject[SP_TAG7(actor)], actor->spr.pos.X, actor->spr.pos.Y, actor->user.zclip); + SOBJ_AlignFloorToPoint(&SectorObject[SP_TAG7(actor)], actor->int_pos().X, actor->int_pos().Y, actor->user.zclip); } } @@ -258,7 +258,7 @@ void MoveSpritesWithSpike(sectortype* sect) if ((actor->spr.extra & SPRX_STAY_PUT_VATOR)) continue; - getzsofslopeptr(sect, actor->spr.pos.X, actor->spr.pos.Y, &cz, &fz); + getzsofslopeptr(sect, actor->int_pos().X, actor->int_pos().Y, &cz, &fz); actor->set_int_z(fz); } } @@ -282,7 +282,7 @@ int DoSpike(DSWActor* actor) if (*lptr == actor->user.z_tgt) { // in the ON position - if (actor->user.z_tgt == actor->spr.pos.Z) + if (actor->user.z_tgt == actor->int_pos().Z) { // change target actor->user.z_tgt = actor->user.pos.Z; @@ -302,7 +302,7 @@ int DoSpike(DSWActor* actor) // change target actor->user.jump_speed = actor->user.vel_tgt; actor->user.vel_rate = (short)abs(actor->user.vel_rate); - actor->user.z_tgt = actor->spr.pos.Z; + actor->user.z_tgt = actor->int_pos().Z; SetSpikeInactive(actor); @@ -387,7 +387,7 @@ int DoSpikeAuto(DSWActor* actor) if (*lptr == actor->user.z_tgt) { // in the UP position - if (actor->user.z_tgt == actor->spr.pos.Z) + if (actor->user.z_tgt == actor->int_pos().Z) { // change target actor->user.z_tgt = actor->user.pos.Z; @@ -404,7 +404,7 @@ int DoSpikeAuto(DSWActor* actor) // change target actor->user.jump_speed = actor->user.vel_tgt; actor->user.vel_rate = (short)abs(actor->user.vel_rate); - actor->user.z_tgt = actor->spr.pos.Z; + actor->user.z_tgt = actor->int_pos().Z; actor->user.Tics = actor->user.WaitTics; if (SP_TAG6(actor) && TEST_BOOL5(actor)) diff --git a/source/games/sw/src/sprite.cpp b/source/games/sw/src/sprite.cpp index f9e8d8e9f..9cb5bebde 100644 --- a/source/games/sw/src/sprite.cpp +++ b/source/games/sw/src/sprite.cpp @@ -958,7 +958,7 @@ bool ActorTestSpawn(DSWActor* actor) default: c = "?"; break; } Printf("WARNING: skill-masked %s at %d,%d,%d not being killed because it " - "activates something\n", c, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z); + "activates something\n", c, actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z); return true; } //always spawn girls in addons @@ -1439,8 +1439,8 @@ void PreMapCombineFloors(void) continue; } - dx = BoundList[base_offset].offset->spr.pos.X - BoundList[i].offset->spr.pos.X; - dy = BoundList[base_offset].offset->spr.pos.Y - BoundList[i].offset->spr.pos.Y; + dx = BoundList[base_offset].offset->int_pos().X - BoundList[i].offset->int_pos().X; + dy = BoundList[base_offset].offset->int_pos().Y - BoundList[i].offset->int_pos().Y; BFSSectorSearch search(BoundList[i].offset->sector()); while (auto dasect = search.GetNext()) @@ -1511,8 +1511,8 @@ void SpriteSetupPost(void) if (jActor->hasU()) continue; - getzsofslopeptr(jActor->sector(), jActor->spr.pos.X, jActor->spr.pos.Y, &cz, &fz); - if (labs(jActor->spr.pos.Z - fz) > Z(4)) + getzsofslopeptr(jActor->sector(), jActor->int_pos().X, jActor->int_pos().Y, &cz, &fz); + if (labs(jActor->int_pos().Z - fz) > Z(4)) continue; SpawnUser(jActor, 0, nullptr); @@ -1560,8 +1560,8 @@ void SpriteSetup(void) while (auto actor = it.Next()) { // not used yetv - getzsofslopeptr(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, &cz, &fz); - if (actor->spr.pos.Z > ((cz + fz) >> 1)) + getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y, &cz, &fz); + if (actor->int_pos().Z > ((cz + fz) >> 1)) { // closer to a floor actor->spr.cstat |= (CSTAT_SPRITE_CLOSE_FLOOR); @@ -1856,7 +1856,7 @@ void SpriteSetup(void) case SECT_WALL_PAN_SPEED: { - vec3_t hit_pos = { actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - Z(8) }; + vec3_t hit_pos = { actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - Z(8) }; HitInfo hit{}; hitscan(hit_pos, actor->sector(), // Start position @@ -1885,7 +1885,7 @@ void SpriteSetup(void) case WALL_DONT_STICK: { - vec3_t hit_pos = { actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - Z(8) }; + vec3_t hit_pos = { actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - Z(8) }; HitInfo hit{}; hitscan(hit_pos, actor->sector(), // Start position @@ -2045,11 +2045,11 @@ void SpriteSetup(void) { // start off actor->user.pos.Z = sectp->floorz; - actor->user.z_tgt = actor->spr.pos.Z; + actor->user.z_tgt = actor->int_pos().Z; if (start_on) { int amt; - amt = actor->spr.pos.Z - sectp->floorz; + amt = actor->int_pos().Z - sectp->floorz; // start in the on position sectp->addfloorz(amt); @@ -2065,11 +2065,11 @@ void SpriteSetup(void) { // start off actor->user.pos.Z = sectp->ceilingz; - actor->user.z_tgt = actor->spr.pos.Z; + actor->user.z_tgt = actor->int_pos().Z; if (start_on) { int amt; - amt = actor->spr.pos.Z - sectp->ceilingz; + amt = actor->int_pos().Z - sectp->ceilingz; // starting in the on position sectp->addceilingz(amt); @@ -2243,7 +2243,7 @@ void SpriteSetup(void) break; } - getzrangepoint(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->sector(), &ceilingz, &trash, &floorz, &trash); + getzrangepoint(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->sector(), &ceilingz, &trash, &floorz, &trash); if (floor_vator) { @@ -2251,11 +2251,11 @@ void SpriteSetup(void) // start off actor->user.pos.Z = actor->user.zclip; - actor->user.z_tgt = actor->spr.pos.Z; + actor->user.z_tgt = actor->int_pos().Z; if (start_on) { // start in the on position - actor->user.zclip = actor->spr.pos.Z; + actor->user.zclip = actor->int_pos().Z; actor->user.z_tgt = actor->user.pos.Z; SpikeAlign(actor); } @@ -2269,11 +2269,11 @@ void SpriteSetup(void) // start off actor->user.pos.Z = actor->user.zclip; - actor->user.z_tgt = actor->spr.pos.Z; + actor->user.z_tgt = actor->int_pos().Z; if (start_on) { // starting in the on position - actor->user.zclip = actor->spr.pos.Z; + actor->user.zclip = actor->int_pos().Z; actor->user.z_tgt = actor->user.pos.Z; SpikeAlign(actor); } @@ -2486,7 +2486,7 @@ void SpriteSetup(void) actorNew->spr.cstat = 0; actorNew->spr.extra = 0; - actorNew->set_int_pos(actor->spr.pos); + actorNew->set_int_pos(actor->int_pos()); actorNew->spr.ang = NORM_ANGLE(actor->spr.ang + 1024); actorNew->spr.picnum = actor->spr.picnum; @@ -2576,7 +2576,7 @@ void SpriteSetup(void) { if (itActor->spr.hitag == actor->spr.hitag && itActor->spr.lotag == actor->spr.lotag) { - I_Error("Two VIEW_THRU_ tags with same match found on level\n1: x %d, y %d \n2: x %d, y %d", actor->spr.pos.X, actor->spr.pos.Y, itActor->spr.pos.X, itActor->spr.pos.Y); + I_Error("Two VIEW_THRU_ tags with same match found on level\n1: x %d, y %d \n2: x %d, y %d", actor->int_pos().X, actor->int_pos().Y, itActor->int_pos().X, itActor->int_pos().Y); } } change_actor_stat(actor, STAT_FAF); @@ -3514,7 +3514,7 @@ int ActorCoughItem(DSWActor* actor) actorNew = insertActor(actor->sector(), STAT_SPAWN_ITEMS); actorNew->spr.cstat = 0; actorNew->spr.extra = 0; - actorNew->set_int_pos({ actor->spr.pos.X, actor->spr.pos.Y, ActorZOfMiddle(actor) }); + actorNew->set_int_pos({ actor->int_pos().X, actor->int_pos().Y, ActorZOfMiddle(actor) }); actorNew->spr.ang = 0; actorNew->spr.extra = 0; @@ -3553,7 +3553,7 @@ int ActorCoughItem(DSWActor* actor) actorNew = insertActor(actor->sector(), STAT_SPAWN_ITEMS); actorNew->spr.cstat = 0; actorNew->spr.extra = 0; - actorNew->set_int_pos({ actor->spr.pos.X, actor->spr.pos.Y, ActorZOfMiddle(actor) }); + actorNew->set_int_pos({ actor->int_pos().X, actor->int_pos().Y, ActorZOfMiddle(actor) }); actorNew->spr.ang = 0; actorNew->spr.extra = 0; @@ -3579,7 +3579,7 @@ int ActorCoughItem(DSWActor* actor) actorNew = insertActor(actor->sector(), STAT_SPAWN_ITEMS); actorNew->spr.cstat = 0; actorNew->spr.extra = 0; - actorNew->set_int_pos({ actor->spr.pos.X, actor->spr.pos.Y, ActorZOfMiddle(actor) }); + actorNew->set_int_pos({ actor->int_pos().X, actor->int_pos().Y, ActorZOfMiddle(actor) }); actorNew->spr.ang = 0; actorNew->spr.extra = 0; @@ -3608,7 +3608,7 @@ int ActorCoughItem(DSWActor* actor) actorNew = insertActor(actor->sector(), STAT_SPAWN_ITEMS); actorNew->spr.cstat = 0; actorNew->spr.extra = 0; - actorNew->set_int_pos({ actor->spr.pos.X, actor->spr.pos.Y, ActorZOfMiddle(actor) }); + actorNew->set_int_pos({ actor->int_pos().X, actor->int_pos().Y, ActorZOfMiddle(actor) }); actorNew->spr.ang = 0; actorNew->spr.extra = 0; @@ -3668,7 +3668,7 @@ int ActorCoughItem(DSWActor* actor) actorNew = insertActor(actor->sector(), STAT_SPAWN_ITEMS); actorNew->spr.cstat = 0; actorNew->spr.extra = 0; - actorNew->set_int_pos({ actor->spr.pos.X, actor->spr.pos.Y, ActorZOfMiddle(actor) }); + actorNew->set_int_pos({ actor->int_pos().X, actor->int_pos().Y, ActorZOfMiddle(actor) }); actorNew->spr.ang = 0; actorNew->spr.extra = 0; @@ -3724,7 +3724,7 @@ int ActorCoughItem(DSWActor* actor) actorNew = insertActor(actor->sector(), STAT_SPAWN_ITEMS); actorNew->spr.cstat = 0; actorNew->spr.extra = 0; - actorNew->set_int_pos({ actor->spr.pos.X, actor->spr.pos.Y, ActorLowerZ(actor) + Z(10) }); + actorNew->set_int_pos({ actor->int_pos().X, actor->int_pos().Y, ActorLowerZ(actor) + Z(10) }); actorNew->spr.ang = actor->spr.ang; // vel @@ -3804,7 +3804,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_REPAIR_KIT)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_REPAIR_KIT, s_RepairKit, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_REPAIR_KIT, s_RepairKit, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3815,7 +3815,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_STAR)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_STAR, s_IconStar, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_STAR, s_IconStar, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3826,7 +3826,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_LG_MINE)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_LG_MINE, s_IconLgMine, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_LG_MINE, s_IconLgMine, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3837,7 +3837,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_MICRO_GUN)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_MICRO_GUN, s_IconMicroGun, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_MICRO_GUN, s_IconMicroGun, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3848,7 +3848,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_MICRO_BATTERY)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_MICRO_BATTERY, s_IconMicroBattery, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_MICRO_BATTERY, s_IconMicroBattery, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3859,7 +3859,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_GRENADE_LAUNCHER)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_GRENADE_LAUNCHER, s_IconGrenadeLauncher, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_GRENADE_LAUNCHER, s_IconGrenadeLauncher, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3870,7 +3870,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_LG_GRENADE)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_LG_GRENADE, s_IconLgGrenade, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_LG_GRENADE, s_IconLgGrenade, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3881,7 +3881,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_RAIL_GUN)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_RAIL_GUN, s_IconRailGun, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_RAIL_GUN, s_IconRailGun, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3892,7 +3892,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_RAIL_AMMO)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_RAIL_AMMO, s_IconRailAmmo, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_RAIL_AMMO, s_IconRailAmmo, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3903,7 +3903,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_ROCKET)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_ROCKET, s_IconRocket, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_ROCKET, s_IconRocket, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3914,7 +3914,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_SHOTGUN)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_SHOTGUN, s_IconShotgun, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_SHOTGUN, s_IconShotgun, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3925,7 +3925,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_LG_SHOTSHELL)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_LG_SHOTSHELL, s_IconLgShotshell, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_LG_SHOTSHELL, s_IconLgShotshell, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3936,7 +3936,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_GUARD_HEAD)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_GUARD_HEAD, s_IconGuardHead, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_GUARD_HEAD, s_IconGuardHead, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3947,7 +3947,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_FIREBALL_LG_AMMO)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_FIREBALL_LG_AMMO, s_IconFireballLgAmmo, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_FIREBALL_LG_AMMO, s_IconFireballLgAmmo, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3958,7 +3958,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_HEART)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_HEART, s_IconHeart, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_HEART, s_IconHeart, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3969,7 +3969,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_HEART_LG_AMMO)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_HEART_LG_AMMO, s_IconHeartLgAmmo, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_HEART_LG_AMMO, s_IconHeartLgAmmo, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3981,7 +3981,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_ARMOR)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_ARMOR, s_IconArmor, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_ARMOR, s_IconArmor, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -3998,7 +3998,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_MEDKIT)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_MEDKIT, s_IconMedkit, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_MEDKIT, s_IconMedkit, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -4009,7 +4009,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_SM_MEDKIT)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_SM_MEDKIT, s_IconSmMedkit, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_SM_MEDKIT, s_IconSmMedkit, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -4020,7 +4020,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_CHEMBOMB)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_CHEMBOMB, s_IconChemBomb, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_CHEMBOMB, s_IconChemBomb, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -4031,7 +4031,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_FLASHBOMB)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_FLASHBOMB, s_IconFlashBomb, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_FLASHBOMB, s_IconFlashBomb, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -4042,7 +4042,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_NUKE)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_NUKE, s_IconNuke, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_NUKE, s_IconNuke, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -4053,7 +4053,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_CALTROPS)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_CALTROPS, s_IconCaltrops, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_CALTROPS, s_IconCaltrops, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -4064,7 +4064,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_BOOSTER)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_BOOSTER, s_IconBooster, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_BOOSTER, s_IconBooster, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -4075,7 +4075,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_HEAT_CARD)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_HEAT_CARD, s_IconHeatCard, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_HEAT_CARD, s_IconHeatCard, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -4086,7 +4086,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_CLOAK)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_CLOAK, s_IconCloak, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_CLOAK, s_IconCloak, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -4097,7 +4097,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_NIGHT_VISION)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_NIGHT_VISION, s_IconNightVision, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_NIGHT_VISION, s_IconNightVision, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -4109,7 +4109,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_LG_UZI_AMMO)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_LG_UZI_AMMO, s_IconLgUziAmmo, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_LG_UZI_AMMO, s_IconLgUziAmmo, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -4120,7 +4120,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_GUARD_HEAD)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_GUARD_HEAD, s_IconGuardHead, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_GUARD_HEAD, s_IconGuardHead, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -4131,7 +4131,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_HEART)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_HEART, s_IconHeart, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_HEART, s_IconHeart, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -4143,7 +4143,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_UZIFLOOR)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_UZIFLOOR, s_IconUziFloor, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_UZIFLOOR, s_IconUziFloor, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -4157,7 +4157,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, ICON_UZI)) break; - spawnedActor = SpawnActor(STAT_ITEM, ICON_UZI, s_IconUzi, itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, ICON_UZI, s_IconUzi, itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->user.Flags2 |= SPR2_NEVER_RESPAWN; IconDefault(spawnedActor); @@ -4203,7 +4203,7 @@ int SpawnItemsMatch(short match) if (!ItemSpotClear(itActor, STAT_ITEM, s_Key[num]->Pic)) break; - spawnedActor = SpawnActor(STAT_ITEM, s_Key[num]->Pic, s_Key[num], itActor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, itActor->spr.pos.Z, itActor->spr.ang, 0); + spawnedActor = SpawnActor(STAT_ITEM, s_Key[num]->Pic, s_Key[num], itActor->sector(), itActor->int_pos().X, itActor->int_pos().Y, itActor->int_pos().Z, itActor->spr.ang, 0); spawnedActor->spr.picnum = spawnedActor->user.ID = s_Key[num]->Pic; @@ -4258,7 +4258,7 @@ bool SpriteOverlap(DSWActor* actor_a, DSWActor* actor_b) int spa_tos, spa_bos, spb_tos, spb_bos, overlap_z; if (!actor_a->hasU() || !actor_b->hasU()) return false; - if ((unsigned)Distance(actor_a->spr.pos.X, actor_a->spr.pos.Y, actor_b->spr.pos.X, actor_b->spr.pos.Y) > actor_a->user.Radius + actor_b->user.Radius) + if ((unsigned)Distance(actor_a->int_pos().X, actor_a->int_pos().Y, actor_b->int_pos().X, actor_b->int_pos().Y) > actor_a->user.Radius + actor_b->user.Radius) { return false; } @@ -4345,7 +4345,7 @@ void getzrangepoint(int x, int y, int z, sectortype* sect, if ((cstat & (CSTAT_SPRITE_ALIGNMENT_MASK | CSTAT_SPRITE_BLOCK)) != (CSTAT_SPRITE_ALIGNMENT_FLOOR|CSTAT_SPRITE_BLOCK)) continue; // Only check blocking floor sprites - daz = itActor->spr.pos.Z; + daz = itActor->int_pos().Z; // Only check if sprite's 2-sided or your on the 1-sided side if (((cstat & CSTAT_SPRITE_ONE_SIDE) != 0) && ((z > daz) == ((cstat & CSTAT_SPRITE_YFLIP) == 0))) @@ -4369,8 +4369,8 @@ void getzrangepoint(int x, int y, int z, sectortype* sect, dax = ((xspan >> 1) + xoff) * itActor->spr.xrepeat; yspan = tileHeight(tilenum); day = ((yspan >> 1) + yoff) * itActor->spr.yrepeat; - x1 = itActor->spr.pos.X + DMulScale(sinang, dax, cosang, day, 16) - x; - y1 = itActor->spr.pos.Y + DMulScale(sinang, day, -cosang, dax, 16) - y; + x1 = itActor->int_pos().X + DMulScale(sinang, dax, cosang, day, 16) - x; + y1 = itActor->int_pos().Y + DMulScale(sinang, day, -cosang, dax, 16) - y; l = xspan * itActor->spr.xrepeat; x2 = x1 - MulScale(sinang, l, 16); y2 = y1 + MulScale(cosang, l, 16); @@ -4444,7 +4444,7 @@ void DoActorZrange(DSWActor* actor) auto save_cstat = actor->spr.cstat & CSTAT_SPRITE_BLOCK; actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK); - vec3_t pos = actor->spr.pos; + vec3_t pos = actor->int_pos(); pos.Z -= (ActorSizeZ(actor) >> 1); FAFgetzrange(pos, actor->sector(), &actor->user.hiz, &ceilhit, &actor->user.loz, &florhit, (((int) actor->spr.clipdist) << 2) - GETZRANGE_CLIP_ADJ, CLIPMASK_ACTOR); actor->spr.cstat |= save_cstat; @@ -4573,14 +4573,14 @@ bool DropAhead(DSWActor* actor, int min_height) // dax = actor->spr.x + MOVEx(128, actor->spr.ang); // day = actor->spr.y + MOVEy(128, actor->spr.ang); - dax = actor->spr.pos.X + MOVEx(256, actor->spr.ang); - day = actor->spr.pos.Y + MOVEy(256, actor->spr.ang); + dax = actor->int_pos().X + MOVEx(256, actor->spr.ang); + day = actor->int_pos().Y + MOVEy(256, actor->spr.ang); auto newsector = actor->sector(); updatesector(dax, day, &newsector); // look straight down for a drop - if (ActorDrop(actor, dax, day, actor->spr.pos.Z, newsector, min_height)) + if (ActorDrop(actor, dax, day, actor->int_pos().Z, newsector, min_height)) return true; return false; @@ -4614,9 +4614,9 @@ int move_actor(DSWActor* actor, int xchange, int ychange, int zchange) } // save off x,y values - x = actor->spr.pos.X; - y = actor->spr.pos.Y; - z = actor->spr.pos.Z; + x = actor->int_pos().X; + y = actor->int_pos().Y; + z = actor->int_pos().Z; loz = actor->user.loz; hiz = actor->user.hiz; lowActor = actor->user.lowActor; @@ -4633,7 +4633,7 @@ int move_actor(DSWActor* actor, int xchange, int ychange, int zchange) // try and determine whether you moved > lo_step in the z direction if (!(actor->user.Flags & (SPR_NO_SCAREDZ | SPR_JUMPING | SPR_CLIMBING | SPR_FALLING | SPR_DEAD | SPR_SWIMMING))) { - if (labs(actor->spr.pos.Z - globloz) > actor->user.lo_step) + if (labs(actor->int_pos().Z - globloz) > actor->user.lo_step) { // cancel move actor->set_int_pos({ x, y, z }); @@ -4649,7 +4649,7 @@ int move_actor(DSWActor* actor, int xchange, int ychange, int zchange) return false; } - if (ActorDrop(actor, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->sector(), actor->user.lo_step)) + if (ActorDrop(actor, actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->sector(), actor->user.lo_step)) { // cancel move actor->set_int_pos({ x, y, z }); @@ -4671,7 +4671,7 @@ int move_actor(DSWActor* actor, int xchange, int ychange, int zchange) if (actor->user.coll.type == kHitNone) { // Keep track of how far sprite has moved - dist = Distance(x, y, actor->spr.pos.X, actor->spr.pos.Y); + dist = Distance(x, y, actor->int_pos().X, actor->int_pos().Y); actor->user.TargetDist -= dist; actor->user.Dist += dist; actor->user.DistCheck += dist; @@ -4723,7 +4723,7 @@ int DoGrating(DSWActor* actor) actor->clearUser(); } - SetActorZ(actor, actor->spr.pos); + SetActorZ(actor, actor->int_pos()); return 0; } @@ -4797,7 +4797,7 @@ int KillGet(DSWActor* actor) break; auto actorNew = SpawnActor(STAT_ITEM, Red_COIN, s_RedCoin, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, 0, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, 0, 0); actorNew->spr.shade = -20; actorNew->user.WaitTics = actor->user.WaitTics - 12; @@ -4840,7 +4840,7 @@ int KillGetAmmo(DSWActor* actor) break; auto actorNew = SpawnActor(STAT_ITEM, Red_COIN, s_RedCoin, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, 0, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, 0, 0); actorNew->spr.shade = -20; actorNew->user.WaitTics = actor->user.WaitTics - 12; @@ -4891,7 +4891,7 @@ int KillGetWeapon(DSWActor* actor) break; auto actorNew = SpawnActor(STAT_ITEM, Red_COIN, s_RedCoin, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, 0, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, 0, 0); actorNew->spr.shade = -20; actorNew->user.WaitTics = actor->user.WaitTics - 12; @@ -4906,7 +4906,7 @@ int DoSpawnItemTeleporterEffect(DSWActor* actor) extern STATE s_TeleportEffect[]; auto effect = SpawnActor(STAT_MISSILE, 0, s_TeleportEffect, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - Z(12), + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - Z(12), actor->spr.ang, 0); effect->spr.shade = -40; @@ -5021,7 +5021,7 @@ int DoGet(DSWActor* actor) if (pp->Flags & (PF_DEAD)) continue; - DISTANCE(pp->pos.X, pp->pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, a,b,c); + DISTANCE(pp->pos.X, pp->pos.Y, actor->int_pos().X, actor->int_pos().Y, dist, a,b,c); if ((unsigned)dist > (plActor->user.Radius + actor->user.Radius)) { continue; @@ -5034,7 +5034,7 @@ int DoGet(DSWActor* actor) auto cstat_bak = actor->spr.cstat; actor->spr.cstat |= (CSTAT_SPRITE_BLOCK|CSTAT_SPRITE_BLOCK_HITSCAN); - can_see = FAFcansee(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->sector(), + can_see = FAFcansee(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->sector(), pp->pos.X, pp->pos.Y, pp->pos.Z, pp->cursector); actor->spr.cstat = cstat_bak; @@ -5824,10 +5824,10 @@ KeyMain: DSWActor* actorNew; if (actor->spr.hitag == TAG_NORESPAWN_FLAG) actorNew = SpawnActor(STAT_ITEM, ICON_FLAG, s_CarryFlagNoDet, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, 0, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, 0, 0); else actorNew = SpawnActor(STAT_ITEM, ICON_FLAG, s_CarryFlag, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, 0, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, 0, 0); actorNew->spr.shade = -20; @@ -5901,7 +5901,7 @@ void AdjustActiveRange(PLAYER* pp, DSWActor* actor, int dist) // if actor can still see the player look_height = ActorZOfTop(actor); - if (FAFcansee(actor->spr.pos.X, actor->spr.pos.Y, look_height, actor->sector(), plActor->spr.pos.X, plActor->spr.pos.Y, ActorUpperZ(plActor), plActor->sector())) + if (FAFcansee(actor->int_pos().X, actor->int_pos().Y, look_height, actor->sector(), plActor->int_pos().X, plActor->int_pos().Y, ActorUpperZ(plActor), plActor->sector())) { // Player is visible // adjust update range of this sprite @@ -6056,7 +6056,7 @@ void SpriteControl(void) pp = &Player[pnum]; // Only update the ones closest - DISTANCE(pp->pos.X, pp->pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, tx, ty, tmin); + DISTANCE(pp->pos.X, pp->pos.Y, actor->int_pos().X, actor->int_pos().Y, dist, tx, ty, tmin); AdjustActiveRange(pp, actor, dist); @@ -6218,7 +6218,7 @@ Collision move_sprite(DSWActor* actor, int xchange, int ychange, int zchange, in ASSERT(actor->hasU()); - vec3_t clippos = actor->spr.pos; + vec3_t clippos = actor->int_pos(); // Can't modify sprite sectors // directly becuase of linked lists @@ -6263,7 +6263,7 @@ Collision move_sprite(DSWActor* actor, int xchange, int ychange, int zchange, in // I subtracted 8 from the clipdist because actors kept going up on // ledges they were not supposed to go up on. Did the same for the // player. Seems to work ok! - vec3_t pos = actor->spr.pos; + vec3_t pos = actor->int_pos(); pos.Z -= zh + 1; FAFgetzrange(pos, actor->sector(), &globhiz, &globhihit, &globloz, &globlohit, @@ -6275,7 +6275,7 @@ Collision move_sprite(DSWActor* actor, int xchange, int ychange, int zchange, in // Takes info from global variables DoActorGlobZ(actor); - clippos.Z = actor->spr.pos.Z + ((zchange * numtics) >> 3); + clippos.Z = actor->int_pos().Z + ((zchange * numtics) >> 3); // test for hitting ceiling or floor if ((clippos.Z - zh <= globhiz) || (clippos.Z - zh > globloz)) @@ -6298,12 +6298,12 @@ Collision move_sprite(DSWActor* actor, int xchange, int ychange, int zchange, in // extra processing for Stacks and warping if (FAF_ConnectArea(actor->sector())) - SetActorZ(actor, actor->spr.pos); + SetActorZ(actor, actor->int_pos()); if ((actor->sector()->extra & SECTFX_WARP_SECTOR)) { DSWActor* sp_warp; - pos = actor->spr.pos; + pos = actor->int_pos(); if ((sp_warp = WarpPlane(&pos.X, &pos.Y, &pos.Z, &dasect))) { actor->set_int_pos(pos); @@ -6313,7 +6313,7 @@ Collision move_sprite(DSWActor* actor, int xchange, int ychange, int zchange, in if (actor->sector() != lastsect) { - pos = actor->spr.pos; + pos = actor->int_pos(); if ((sp_warp = Warp(&pos.X, &pos.Y, &pos.Z, &dasect))) { actor->set_int_pos(pos); @@ -6397,7 +6397,7 @@ int MissileZrange(DSWActor* actor) auto tempshort = actor->spr.cstat; actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK); - FAFgetzrangepoint(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - 1, actor->sector(), + FAFgetzrangepoint(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - 1, actor->sector(), &globhiz, &globhihit, &globloz, &globlohit); actor->spr.cstat = tempshort; @@ -6414,7 +6414,7 @@ Collision move_missile(DSWActor* actor, int xchange, int ychange, int zchange, i ASSERT(actor->hasU()); - vec3_t clippos = actor->spr.pos; + vec3_t clippos = actor->int_pos(); // Can't modify sprite sectors // directly becuase of linked lists @@ -6452,7 +6452,7 @@ Collision move_missile(DSWActor* actor, int xchange, int ychange, int zchange, i auto tempshort = actor->spr.cstat; actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK); - FAFgetzrangepoint(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - 1, actor->sector(), + FAFgetzrangepoint(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - 1, actor->sector(), &globhiz, &globhihit, &globloz, &globlohit); actor->spr.cstat = tempshort; @@ -6463,7 +6463,7 @@ Collision move_missile(DSWActor* actor, int xchange, int ychange, int zchange, i // missiles don't need the water to be down MissileWaterAdjust(actor); - clippos.Z = actor->spr.pos.Z + ((zchange * numtics) >> 3); + clippos.Z = actor->int_pos().Z + ((zchange * numtics) >> 3); // NOTE: this does not tell you when you hit a floor sprite // this case is currently treated like it hit a sector @@ -6488,13 +6488,13 @@ Collision move_missile(DSWActor* actor, int xchange, int ychange, int zchange, i } if (FAF_ConnectArea(actor->sector())) - SetActorZ(actor, actor->spr.pos); + SetActorZ(actor, actor->int_pos()); if ((actor->sector()->extra & SECTFX_WARP_SECTOR)) { DSWActor* sp_warp; - auto pos = actor->spr.pos; + auto pos = actor->int_pos(); if ((sp_warp = WarpPlane(&pos.X, &pos.Y, &pos.Z, &dasect))) { actor->set_int_pos(pos); @@ -6504,7 +6504,7 @@ Collision move_missile(DSWActor* actor, int xchange, int ychange, int zchange, i if (actor->sector() != lastsect) { - pos = actor->spr.pos; + pos = actor->int_pos(); if ((sp_warp = Warp(&pos.X, &pos.Y, &pos.Z, &dasect))) { actor->set_int_pos(pos); @@ -6516,7 +6516,7 @@ Collision move_missile(DSWActor* actor, int xchange, int ychange, int zchange, i if (retval.type != kHitNone && (actor->sector()->ceilingstat & CSTAT_SECTOR_SKY)) { - if (actor->spr.pos.Z < actor->sector()->ceilingz) + if (actor->int_pos().Z < actor->sector()->ceilingz) { retval.setVoid(); } @@ -6524,7 +6524,7 @@ Collision move_missile(DSWActor* actor, int xchange, int ychange, int zchange, i if (retval.type != kHitNone && (actor->sector()->floorstat & CSTAT_SECTOR_SKY)) { - if (actor->spr.pos.Z > actor->sector()->floorz) + if (actor->int_pos().Z > actor->sector()->floorz) { retval.setVoid(); } @@ -6547,15 +6547,15 @@ Collision move_ground_missile(DSWActor* actor, int xchange, int ychange, int cei auto dasect = actor->sector(); auto lastsect = dasect; - vec3_t opos = actor->spr.pos; - daz = actor->spr.pos.Z; + vec3_t opos = actor->int_pos(); + daz = actor->int_pos().Z; // climbing a wall if (actor->user.z_tgt) { - if (labs(actor->user.z_tgt - actor->spr.pos.Z) > Z(40)) + if (labs(actor->user.z_tgt - actor->int_pos().Z) > Z(40)) { - if (actor->user.z_tgt > actor->spr.pos.Z) + if (actor->user.z_tgt > actor->int_pos().Z) { actor->add_int_z(Z(30)); return retval; @@ -6572,14 +6572,14 @@ Collision move_ground_missile(DSWActor* actor, int xchange, int ychange, int cei actor->add_int_pos({ xchange / 2, ychange / 2, 0 }); - updatesector(actor->spr.pos.X, actor->spr.pos.Y, &dasect); + updatesector(actor->int_pos().X, actor->int_pos().Y, &dasect); if (dasect == nullptr) { // back up and try again dasect = actor->sector(); lastsect = dasect; - opos = actor->spr.pos; + opos = actor->int_pos(); opos.Z = daz; clipmove(opos, &dasect, ((xchange * numtics) << 11), ((ychange * numtics) << 11), @@ -6605,13 +6605,13 @@ Collision move_ground_missile(DSWActor* actor, int xchange, int ychange, int cei if ((dasect != actor->sector()) && (dasect != nullptr)) { int new_loz,new_hiz; - getzsofslopeptr(dasect, actor->spr.pos.X, actor->spr.pos.Y, &new_hiz, &new_loz); + getzsofslopeptr(dasect, actor->int_pos().X, actor->int_pos().Y, &new_hiz, &new_loz); actor->set_int_z(new_loz); ChangeActorSect(actor, dasect); } - getzsofslopeptr(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, &actor->user.hiz, &actor->user.loz); + getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y, &actor->user.hiz, &actor->user.loz); actor->user.hi_sectp = actor->user.lo_sectp = actor->sector(); actor->user.highActor = nullptr; actor->user.lowActor = nullptr; @@ -6628,7 +6628,7 @@ Collision move_ground_missile(DSWActor* actor, int xchange, int ychange, int cei { DSWActor* sp_warp; - auto pos = actor->spr.pos; + auto pos = actor->int_pos(); if ((sp_warp = WarpPlane(&pos.X, &pos.Y, &pos.Z, &dasect))) { actor->set_int_pos(pos); @@ -6638,7 +6638,7 @@ Collision move_ground_missile(DSWActor* actor, int xchange, int ychange, int cei if (actor->sector() != lastsect) { - pos = actor->spr.pos; + pos = actor->int_pos(); if ((sp_warp = Warp(&pos.X, &pos.Y, &pos.Z, &dasect))) { actor->set_int_pos(pos); diff --git a/source/games/sw/src/sumo.cpp b/source/games/sw/src/sumo.cpp index 36a8b7412..61074ab84 100644 --- a/source/games/sw/src/sumo.cpp +++ b/source/games/sw/src/sumo.cpp @@ -765,7 +765,7 @@ void BossHealthMeter(void) DSWActor* actor = BossSpriteNum[i]; if (actor != nullptr && !bosswasseen[i]) { - if (cansee(actor->spr.pos.X, actor->spr.pos.Y, ActorZOfTop(actor), actor->sector(), pp->pos.X, pp->pos.Y, pp->pos.Z - Z(40), pp->cursector)) + if (cansee(actor->int_pos().X, actor->int_pos().Y, ActorZOfTop(actor), actor->sector(), pp->pos.X, pp->pos.Y, pp->pos.Z - Z(40), pp->cursector)) { if (i == 0 && !bosswasseen[0]) { diff --git a/source/games/sw/src/track.cpp b/source/games/sw/src/track.cpp index 9cbe920bd..23196aa1d 100644 --- a/source/games/sw/src/track.cpp +++ b/source/games/sw/src/track.cpp @@ -67,8 +67,8 @@ short TrackTowardPlayer(DSWActor* actor, TRACK* t, TRACK_POINT* start_point) end_point = t->TrackPoint; } - end_dist = Distance(end_point->x, end_point->y, actor->spr.pos.X, actor->spr.pos.Y); - start_dist = Distance(start_point->x, start_point->y, actor->spr.pos.X, actor->spr.pos.Y); + end_dist = Distance(end_point->x, end_point->y, actor->int_pos().X, actor->int_pos().Y); + start_dist = Distance(start_point->x, start_point->y, actor->int_pos().X, actor->int_pos().Y); if (end_dist < start_dist) { @@ -94,8 +94,8 @@ short TrackStartCloserThanEnd(DSWActor* actor, TRACK* t, TRACK_POINT* start_poin end_point = t->TrackPoint; } - end_dist = Distance(end_point->x, end_point->y, actor->spr.pos.X, actor->spr.pos.Y); - start_dist = Distance(start_point->x, start_point->y, actor->spr.pos.X, actor->spr.pos.Y); + end_dist = Distance(end_point->x, end_point->y, actor->int_pos().X, actor->int_pos().Y); + start_dist = Distance(start_point->x, start_point->y, actor->int_pos().X, actor->int_pos().Y); if (start_dist < end_dist) { @@ -196,13 +196,13 @@ short ActorFindTrack(DSWActor* actor, int8_t player_dir, int track_type, int* tr { tp = t->TrackPoint + end_point[i]; - dist = Distance(tp->x, tp->y, actor->spr.pos.X, actor->spr.pos.Y); + dist = Distance(tp->x, tp->y, actor->int_pos().X, actor->int_pos().Y); if (dist < 15000 && dist < near_dist) { // make sure track start is on approximate z level - skip if // not - if (labs(actor->spr.pos.Z - tp->z) > zdiff) + if (labs(actor->int_pos().Z - tp->z) > zdiff) { continue; } @@ -249,7 +249,7 @@ short ActorFindTrack(DSWActor* actor, int8_t player_dir, int track_type, int* tr updatesector(near_tp->x, near_tp->y, &track_sect); // if can see the point, return the track number - if (track_sect && FAFcansee(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - Z(16), actor->sector(), near_tp->x, near_tp->y, track_sect->floorz - Z(32), track_sect)) + if (track_sect && FAFcansee(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - Z(16), actor->sector(), near_tp->x, near_tp->y, track_sect->floorz - Z(32), track_sect)) { return short(near_track - &Track[0]); } @@ -285,9 +285,9 @@ void TrackAddPoint(TRACK* t, TRACK_POINT* tp, DSWActor* actor) { TRACK_POINT* tpoint = (tp + t->NumPoints); - tpoint->x = actor->spr.pos.X; - tpoint->y = actor->spr.pos.Y; - tpoint->z = actor->spr.pos.Z; + tpoint->x = actor->int_pos().X; + tpoint->y = actor->int_pos().Y; + tpoint->z = actor->int_pos().Z; tpoint->ang = actor->spr.ang; tpoint->tag_low = actor->spr.lotag; tpoint->tag_high = actor->spr.hitag; @@ -303,7 +303,7 @@ DSWActor* TrackClonePoint(DSWActor* actor) actorNew->spr.cstat = 0; actorNew->spr.extra = 0; - actorNew->set_int_pos(actor->spr.pos); + actorNew->set_int_pos(actor->int_pos()); actorNew->spr.ang = actor->spr.ang; actorNew->spr.lotag = actor->spr.lotag; actorNew->spr.hitag = actor->spr.hitag; @@ -573,7 +573,7 @@ void TrackSetup(void) int i; it.Reset(STAT_TRACK + ndx); auto itActor = it.Next(); - Printf("WARNING: Did not find first point of Track Number %d, x %d, y %d\n", ndx, itActor->spr.pos.X, itActor->spr.pos.Y); + Printf("WARNING: Did not find first point of Track Number %d, x %d, y %d\n", ndx, itActor->int_pos().X, itActor->int_pos().Y); it.Reset(STAT_TRACK + ndx); while (auto actor = it.Next()) { @@ -598,7 +598,7 @@ void TrackSetup(void) it.Reset(STAT_TRACK + ndx); while (auto actor = it.Next()) { - dist = Distance((tp + t->NumPoints - 1)->x, (tp + t->NumPoints - 1)->y, actor->spr.pos.X, actor->spr.pos.Y); + dist = Distance((tp + t->NumPoints - 1)->x, (tp + t->NumPoints - 1)->y, actor->int_pos().X, actor->int_pos().Y); if (dist < low_dist) { @@ -683,8 +683,8 @@ void SectorObjectSetupBounds(SECTOR_OBJECT* sop) I_Error("SOP bound sprite with hitag %d not found", 500 + (int(sop - SectorObject) * 5)); } - xlow = BoundActor->spr.pos.X; - ylow = BoundActor->spr.pos.Y; + xlow = BoundActor->int_pos().X; + ylow = BoundActor->int_pos().Y; KillActor(BoundActor); @@ -693,8 +693,8 @@ void SectorObjectSetupBounds(SECTOR_OBJECT* sop) { I_Error("SOP bound sprite with hitag %d not found", 501 + (int(sop - SectorObject) * 5)); } - xhigh = BoundActor->spr.pos.X; - yhigh = BoundActor->spr.pos.Y; + xhigh = BoundActor->int_pos().X; + yhigh = BoundActor->int_pos().Y; KillActor(BoundActor); @@ -707,9 +707,9 @@ void SectorObjectSetupBounds(SECTOR_OBJECT* sop) BoundActor = FindBoundSprite(SECT_SO_CENTER); if (BoundActor) { - sop->pmid.X = BoundActor->spr.pos.X; - sop->pmid.Y = BoundActor->spr.pos.Y; - sop->pmid.Z = BoundActor->spr.pos.Z; + sop->pmid.X = BoundActor->int_pos().X; + sop->pmid.Y = BoundActor->int_pos().Y; + sop->pmid.Z = BoundActor->int_pos().Z; KillActor(BoundActor); } @@ -817,7 +817,7 @@ void SectorObjectSetupBounds(SECTOR_OBJECT* sop) SWStatIterator it(StatList[i]); while (auto itActor = it.Next()) { - if (itActor->spr.pos.X > xlow && itActor->spr.pos.X < xhigh && itActor->spr.pos.Y > ylow && itActor->spr.pos.Y < yhigh) + if (itActor->int_pos().X > xlow && itActor->int_pos().X < xhigh && itActor->int_pos().Y > ylow && itActor->int_pos().Y < yhigh) { // some delete sprites ride others don't if (itActor->spr.statnum == STAT_DELETE_SPRITE) @@ -846,12 +846,12 @@ void SectorObjectSetupBounds(SECTOR_OBJECT* sop) short ang2; sop->clipdist = 0; sop->clipbox_dist[sop->clipbox_num] = itActor->spr.lotag; - sop->clipbox_xoff[sop->clipbox_num] = sop->pmid.X - itActor->spr.pos.X; - sop->clipbox_yoff[sop->clipbox_num] = sop->pmid.Y - itActor->spr.pos.Y; + sop->clipbox_xoff[sop->clipbox_num] = sop->pmid.X - itActor->int_pos().X; + sop->clipbox_yoff[sop->clipbox_num] = sop->pmid.Y - itActor->int_pos().Y; - sop->clipbox_vdist[sop->clipbox_num] = ksqrt(SQ(sop->pmid.X - itActor->spr.pos.X) + SQ(sop->pmid.Y - itActor->spr.pos.Y)); + sop->clipbox_vdist[sop->clipbox_num] = ksqrt(SQ(sop->pmid.X - itActor->int_pos().X) + SQ(sop->pmid.Y - itActor->int_pos().Y)); - ang2 = getangle(itActor->spr.pos.X - sop->pmid.X, itActor->spr.pos.Y - sop->pmid.Y); + ang2 = getangle(itActor->int_pos().X - sop->pmid.X, itActor->int_pos().Y - sop->pmid.Y); sop->clipbox_ang[sop->clipbox_num] = getincangle(ang2, sop->ang); sop->clipbox_num++; @@ -872,9 +872,9 @@ void SectorObjectSetupBounds(SECTOR_OBJECT* sop) } - itActor->user.pos.X = sop->pmid.X - itActor->spr.pos.X; - itActor->user.pos.Y = sop->pmid.Y - itActor->spr.pos.Y; - itActor->user.pos.Z = sop->mid_sector->floorz - itActor->spr.pos.Z; + itActor->user.pos.X = sop->pmid.X - itActor->int_pos().X; + itActor->user.pos.Y = sop->pmid.Y - itActor->int_pos().Y; + itActor->user.pos.Z = sop->mid_sector->floorz - itActor->int_pos().Z; itActor->user.Flags |= (SPR_SO_ATTACHED); @@ -905,7 +905,7 @@ void SectorObjectSetupBounds(SECTOR_OBJECT* sop) if (sop->sectp[j] == itActor->sector()) { itActor->user.Flags |= (SPR_ON_SO_SECTOR); - itActor->user.pos.Z = itActor->sector()->floorz - itActor->spr.pos.Z; + itActor->user.pos.Z = itActor->sector()->floorz - itActor->int_pos().Z; break; } } @@ -928,8 +928,8 @@ cont: { auto actor = sop->so_actors[i]; - if (actor->spr.pos.Z > zmid) - zmid = actor->spr.pos.Z; + if (actor->int_pos().Z > zmid) + zmid = actor->int_pos().Z; } ASSERT(zmid != -9999999); @@ -939,7 +939,7 @@ cont: for (i = 0; sop->so_actors[i] != nullptr; i++) { auto actor = sop->so_actors[i]; - actor->user.pos.Z = sop->pmid.Z - actor->spr.pos.Z; + actor->user.pos.Z = sop->pmid.Z - actor->int_pos().Z; } } } @@ -1201,7 +1201,7 @@ void SetupSectorObject(sectortype* sectp, short tag) if (TEST_BOOL4(actor)) { - sop->crush_z = actor->spr.pos.Z; + sop->crush_z = actor->int_pos().Z; sop->flags |= (SOBJ_RECT_CLIP); } @@ -1475,7 +1475,7 @@ void PlaceActorsOnTracks(void) { tpoint = Track[actor->user.track].TrackPoint; - dist = Distance((tpoint + j)->x, (tpoint + j)->y, actor->spr.pos.X, actor->spr.pos.Y); + dist = Distance((tpoint + j)->x, (tpoint + j)->y, actor->int_pos().X, actor->int_pos().Y); if (dist < low_dist) { @@ -1488,12 +1488,12 @@ void PlaceActorsOnTracks(void) if (Track[actor->user.track].NumPoints == 0) { - Printf("WARNING: Sprite %d (%d, %d) placed on track %d with no points!\n", actor->GetIndex(), actor->spr.pos.X, actor->spr.pos.Y, actor->user.track); + Printf("WARNING: Sprite %d (%d, %d) placed on track %d with no points!\n", actor->GetIndex(), actor->int_pos().X, actor->int_pos().Y, actor->user.track); continue; } // check angle in the "forward" direction - actor->spr.ang = getangle((tpoint + actor->user.point)->x - actor->spr.pos.X, (tpoint + actor->user.point)->y - actor->spr.pos.Y); + actor->spr.ang = getangle((tpoint + actor->user.point)->x - actor->int_pos().X, (tpoint + actor->user.point)->y - actor->int_pos().Y); } } @@ -1729,15 +1729,15 @@ PlayerPart: if ((actor->sector()->firstWall()->extra & WALLFX_LOOP_DONT_SPIN)) continue; - auto pos = actor->spr.pos; + auto pos = actor->int_pos(); if ((actor->sector()->firstWall()->extra & WALLFX_LOOP_REVERSE_SPIN)) { - rotatepoint(sop->pmid.vec2, actor->spr.pos.vec2, -delta_ang, &pos.vec2); + rotatepoint(sop->pmid.vec2, actor->int_pos().vec2, -delta_ang, &pos.vec2); actor->spr.ang = NORM_ANGLE(actor->spr.ang - delta_ang); } else { - rotatepoint(sop->pmid.vec2, actor->spr.pos.vec2, delta_ang, &pos.vec2); + rotatepoint(sop->pmid.vec2, actor->int_pos().vec2, delta_ang, &pos.vec2); actor->spr.ang = NORM_ANGLE(actor->spr.ang + delta_ang); } actor->set_int_pos(pos); @@ -1748,8 +1748,8 @@ PlayerPart: if (!(sop->flags & SOBJ_DONT_ROTATE)) { // NOT part of a sector - independant of any sector - auto pos = actor->spr.pos; - rotatepoint(sop->pmid.vec2, actor->spr.pos.vec2, delta_ang, &pos.vec2); + auto pos = actor->int_pos(); + rotatepoint(sop->pmid.vec2, actor->int_pos().vec2, delta_ang, &pos.vec2); actor->spr.ang = NORM_ANGLE(actor->spr.ang + delta_ang); actor->set_int_pos(pos); } @@ -1757,7 +1757,7 @@ PlayerPart: // Does not necessarily move with the sector so must accout for // moving across sectors if (sop->pmid.X < MAXSO) // special case for operating SO's - SetActorZ(sop->so_actors[i], actor->spr.pos); + SetActorZ(sop->so_actors[i], actor->int_pos()); } actor->user.oangdiff += getincangle(oldang, actor->spr.ang); @@ -1928,7 +1928,7 @@ void UpdateSectorObjectSprites(SECTOR_OBJECT* sop) DSWActor* actor = sop->so_actors[i]; if (!actor) continue; - SetActorZ(actor, actor->spr.pos); + SetActorZ(actor, actor->int_pos()); } } @@ -2758,8 +2758,8 @@ void DoAutoTurretObject(SECTOR_OBJECT* sop) if (sActor->spr.statnum == STAT_SO_SHOOT_POINT) { - if (!FAFcansee(sActor->spr.pos.X, sActor->spr.pos.Y, sActor->spr.pos.Z-Z(4), sActor->sector(), - actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y, ActorUpperZ(actor->user.targetActor), actor->user.targetActor->sector())) + if (!FAFcansee(sActor->int_pos().X, sActor->int_pos().Y, sActor->int_pos().Z-Z(4), sActor->sector(), + actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y, ActorUpperZ(actor->user.targetActor), actor->user.targetActor->sector())) { return; } @@ -2793,7 +2793,7 @@ void DoAutoTurretObject(SECTOR_OBJECT* sop) } } - sop->ang_tgt = getangle(actor->user.targetActor->spr.pos.X - sop->pmid.X, actor->user.targetActor->spr.pos.Y - sop->pmid.Y); + sop->ang_tgt = getangle(actor->user.targetActor->int_pos().X - sop->pmid.X, actor->user.targetActor->int_pos().Y - sop->pmid.Y); // get delta to target angle delta_ang = getincangle(sop->ang, sop->ang_tgt); @@ -2833,7 +2833,7 @@ void DoActorHitTrackEndPoint(DSWActor* actor) if (actor->user.track >= 0) { - actor->spr.ang = NORM_ANGLE(getangle((Track[actor->user.track].TrackPoint + actor->user.point)->x - actor->spr.pos.X, (Track[actor->user.track].TrackPoint + actor->user.point)->y - actor->spr.pos.Y)); + actor->spr.ang = NORM_ANGLE(getangle((Track[actor->user.track].TrackPoint + actor->user.point)->x - actor->int_pos().X, (Track[actor->user.track].TrackPoint + actor->user.point)->y - actor->int_pos().Y)); } else { @@ -2849,7 +2849,7 @@ void DoActorHitTrackEndPoint(DSWActor* actor) if (actor->user.track >= 0) { - actor->spr.ang = NORM_ANGLE(getangle((Track[actor->user.track].TrackPoint + actor->user.point)->x - actor->spr.pos.X, (Track[actor->user.track].TrackPoint + actor->user.point)->y - actor->spr.pos.Y)); + actor->spr.ang = NORM_ANGLE(getangle((Track[actor->user.track].TrackPoint + actor->user.point)->x - actor->int_pos().X, (Track[actor->user.track].TrackPoint + actor->user.point)->y - actor->int_pos().Y)); } else { @@ -3005,7 +3005,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) { actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK); - FAFhitscan(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - Z(24), actor->sector(), // Start position + FAFhitscan(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - Z(24), actor->sector(), // Start position bcos(actor->spr.ang), // X vector of 3D ang bsin(actor->spr.ang), // Y vector of 3D ang 0, // Z vector of 3D ang @@ -3024,7 +3024,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) if (!hit.hitWall->twoSided()) return false; - zdiff = labs(actor->spr.pos.Z - hit.hitWall->nextSector()->floorz) >> 8; + zdiff = labs(actor->int_pos().Z - hit.hitWall->nextSector()->floorz) >> 8; actor->user.jump_speed = PickJumpSpeed(actor, zdiff); } @@ -3103,12 +3103,12 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) actor->spr.ang = tpoint->ang; - z[0] = actor->spr.pos.Z - ActorSizeZ(actor) + Z(5); - z[1] = actor->spr.pos.Z - (ActorSizeZ(actor) >> 1); + z[0] = actor->int_pos().Z - ActorSizeZ(actor) + Z(5); + z[1] = actor->int_pos().Z - (ActorSizeZ(actor) >> 1); for (i = 0; i < (int)SIZ(z); i++) { - neartag({ actor->spr.pos.X, actor->spr.pos.Y, z[i] }, actor->sector(), actor->spr.ang, near, 1024, NTAG_SEARCH_LO_HI); + neartag({ actor->int_pos().X, actor->int_pos().Y, z[i] }, actor->sector(), actor->spr.ang, near, 1024, NTAG_SEARCH_LO_HI); if (near.actor() != nullptr && near.hitpos.X < 1024) { @@ -3316,7 +3316,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) nx = MOVEx(100, lActor->spr.ang); ny = MOVEy(100, lActor->spr.ang); - actor->set_int_xy(lActor->spr.pos.X + nx, lActor->spr.pos.Y + ny); + actor->set_int_xy(lActor->int_pos().X + nx, lActor->int_pos().Y + ny); actor->spr.ang = NORM_ANGLE(lActor->spr.ang + 1024); @@ -3324,7 +3324,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) // Get the z height to climb // - neartag({ actor->spr.pos.X, actor->spr.pos.Y, ActorZOfTop(actor) - (ActorSizeZ(actor) >> 1) }, actor->sector(), actor->spr.ang, near, 600, NTAG_SEARCH_LO_HI); + neartag({ actor->int_pos().X, actor->int_pos().Y, ActorZOfTop(actor) - (ActorSizeZ(actor) >> 1) }, actor->sector(), actor->spr.ang, near, 600, NTAG_SEARCH_LO_HI); if (near.hitWall == nullptr) { @@ -3356,7 +3356,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) bos_z = ActorZOfBottom(actor); if (bos_z > actor->user.loz) { - actor->user.pos.Y = (bos_z - actor->spr.pos.Z); + actor->user.pos.Y = (bos_z - actor->int_pos().Z); actor->add_int_z(-actor->user.pos.Y); } @@ -3412,7 +3412,7 @@ int ActorFollowTrack(DSWActor* actor, short locktics) { pp = &Player[pnum]; - if (Distance(actor->spr.pos.X, actor->spr.pos.Y, pp->pos.X, pp->pos.Y) < actor->user.Dist) + if (Distance(actor->int_pos().X, actor->int_pos().Y, pp->pos.X, pp->pos.Y) < actor->user.Dist) { actor->user.targetActor = pp->actor; actor->user.Flags &= ~(SPR_WAIT_FOR_PLAYER); @@ -3443,10 +3443,10 @@ int ActorFollowTrack(DSWActor* actor, short locktics) if (!(actor->user.Flags & (SPR_CLIMBING | SPR_DONT_UPDATE_ANG))) { - actor->spr.ang = getangle(tpoint->x - actor->spr.pos.X, tpoint->y - actor->spr.pos.Y); + actor->spr.ang = getangle(tpoint->x - actor->int_pos().X, tpoint->y - actor->int_pos().Y); } - if ((dist = Distance(actor->spr.pos.X, actor->spr.pos.Y, tpoint->x, tpoint->y)) < 200) // 64 + if ((dist = Distance(actor->int_pos().X, actor->int_pos().Y, tpoint->x, tpoint->y)) < 200) // 64 { if (!ActorTrackDecide(tpoint, actor)) return true; @@ -3458,7 +3458,7 @@ int ActorFollowTrack(DSWActor* actor, short locktics) if (!(actor->user.Flags & (SPR_CLIMBING | SPR_DONT_UPDATE_ANG))) { // calculate a new angle to the target - actor->spr.ang = getangle(tpoint->x - actor->spr.pos.X, tpoint->y - actor->spr.pos.Y); + actor->spr.ang = getangle(tpoint->x - actor->int_pos().X, tpoint->y - actor->int_pos().Y); } if (actor->user.Flags & (SPR_ZDIFF_MODE)) @@ -3469,11 +3469,11 @@ int ActorFollowTrack(DSWActor* actor, short locktics) dz = tpoint->z; // find the distance to the target (player) - dist = DIST(dx, dy, actor->spr.pos.X, actor->spr.pos.Y); + dist = DIST(dx, dy, actor->int_pos().X, actor->int_pos().Y); // (velocity * difference between the target and the object) / // distance - actor->spr.zvel = -((actor->spr.xvel * (actor->spr.pos.Z - dz)) / dist); + actor->spr.zvel = -((actor->spr.xvel * (actor->int_pos().Z - dz)) / dist); } } else @@ -3512,7 +3512,7 @@ int ActorFollowTrack(DSWActor* actor, short locktics) actor->spr.zvel = 0; - actor->spr.ang = getangle(tpoint->x - actor->spr.pos.X, tpoint->y - actor->spr.pos.Y); + actor->spr.ang = getangle(tpoint->x - actor->int_pos().X, tpoint->y - actor->int_pos().Y); ActorLeaveTrack(actor); actor->spr.cstat &= ~(CSTAT_SPRITE_YCENTER); diff --git a/source/games/sw/src/vator.cpp b/source/games/sw/src/vator.cpp index ea7397ffe..8b2e0eff1 100644 --- a/source/games/sw/src/vator.cpp +++ b/source/games/sw/src/vator.cpp @@ -56,15 +56,15 @@ void ReverseVator(DSWActor* actor) // moving toward to OFF pos if (actor->user.z_tgt == actor->user.oz) { - if (actor->spr.pos.Z == actor->user.oz) + if (actor->int_pos().Z == actor->user.oz) actor->user.z_tgt = actor->user.pos.Z; else if (actor->user.pos.Z == actor->user.oz) - actor->user.z_tgt = actor->spr.pos.Z; + actor->user.z_tgt = actor->int_pos().Z; } else if (actor->user.z_tgt == actor->user.pos.Z) { - if (actor->spr.pos.Z == actor->user.oz) - actor->user.z_tgt = actor->spr.pos.Z; + if (actor->int_pos().Z == actor->user.oz) + actor->user.z_tgt = actor->int_pos().Z; else if (actor->user.pos.Z == actor->user.oz) actor->user.z_tgt = actor->user.pos.Z; } @@ -107,7 +107,7 @@ void SetVatorActive(DSWActor* actor) actor->user.Tics = 0; // moving to the ON position - if (actor->user.z_tgt == actor->spr.pos.Z) + if (actor->user.z_tgt == actor->int_pos().Z) VatorSwitch(SP_TAG2(actor), true); else // moving to the OFF position @@ -390,7 +390,7 @@ int DoVator(DSWActor* actor) if (*lptr == actor->user.z_tgt) { // in the ON position - if (actor->user.z_tgt == actor->spr.pos.Z) + if (actor->user.z_tgt == actor->int_pos().Z) { // change target actor->user.z_tgt = actor->user.pos.Z; @@ -411,7 +411,7 @@ int DoVator(DSWActor* actor) // change target actor->user.jump_speed = actor->user.vel_tgt; actor->user.vel_rate = short(abs(actor->user.vel_rate)); - actor->user.z_tgt = actor->spr.pos.Z; + actor->user.z_tgt = actor->int_pos().Z; RESET_BOOL8(actor); SetVatorInactive(actor); @@ -541,7 +541,7 @@ int DoVatorAuto(DSWActor* actor) if (*lptr == actor->user.z_tgt) { // in the UP position - if (actor->user.z_tgt == actor->spr.pos.Z) + if (actor->user.z_tgt == actor->int_pos().Z) { // change target actor->user.z_tgt = actor->user.pos.Z; @@ -558,7 +558,7 @@ int DoVatorAuto(DSWActor* actor) // change target actor->user.jump_speed = actor->user.vel_tgt; actor->user.vel_rate = short(abs(actor->user.vel_rate)); - actor->user.z_tgt = actor->spr.pos.Z; + actor->user.z_tgt = actor->int_pos().Z; actor->user.Tics = actor->user.WaitTics; if (SP_TAG6(actor) && TEST_BOOL5(actor)) diff --git a/source/games/sw/src/vis.cpp b/source/games/sw/src/vis.cpp index d069c903a..49b440599 100644 --- a/source/games/sw/src/vis.cpp +++ b/source/games/sw/src/vis.cpp @@ -96,16 +96,16 @@ void VisViewChange(PLAYER* pp, int *vis) auto own = GetOwner(actor); if (own != nullptr) { - x = own->spr.pos.X; - y = own->spr.pos.Y; - z = own->spr.pos.Z; + x = own->int_pos().X; + y = own->int_pos().Y; + z = own->int_pos().Z; sectp = own->sector(); } else { - x = actor->spr.pos.X; - y = actor->spr.pos.Y; - z = actor->spr.pos.Z; + x = actor->int_pos().X; + y = actor->int_pos().Y; + z = actor->int_pos().Z; sectp = actor->sector(); } @@ -148,7 +148,7 @@ void SpawnVis(DSWActor* parentActor, sectortype* sect, int x, int y, int z, int ASSERT(parentActor->hasU()); parentActor->user.Flags2 |= (SPR2_CHILDREN); - actorNew->set_int_pos(parentActor->spr.pos); + actorNew->set_int_pos(parentActor->int_pos()); parentActor->user.Flags2 |= (SPR2_VIS_SHADING); } diff --git a/source/games/sw/src/wallmove.cpp b/source/games/sw/src/wallmove.cpp index f2fb6bb21..b4e923f70 100644 --- a/source/games/sw/src/wallmove.cpp +++ b/source/games/sw/src/wallmove.cpp @@ -100,7 +100,7 @@ int DoWallMove(DSWActor* actor) for(auto& wal : wall) { - if (wal.wall_int_pos().X == actor->spr.pos.X && wal.wall_int_pos().Y == actor->spr.pos.Y) + if (wal.wall_int_pos().X == actor->int_pos().X && wal.wall_int_pos().Y == actor->int_pos().Y) { found = true; @@ -115,7 +115,7 @@ int DoWallMove(DSWActor* actor) } else { - wal.movexy(actor->spr.pos.X + nx, actor->spr.pos.Y + ny); + wal.movexy(actor->int_pos().X + nx, actor->int_pos().Y + ny); } if (shade1) @@ -166,7 +166,7 @@ bool CanSeeWallMove(DSWActor* caller, int match) { found = true; - if (cansee(caller->spr.pos.X, caller->spr.pos.Y, caller->spr.pos.Z, caller->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->sector())) + if (cansee(caller->int_pos().X, caller->int_pos().Y, caller->int_pos().Z, caller->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->sector())) { return true; } diff --git a/source/games/sw/src/warp.cpp b/source/games/sw/src/warp.cpp index bb97ee19c..3a65dcc9d 100644 --- a/source/games/sw/src/warp.cpp +++ b/source/games/sw/src/warp.cpp @@ -87,7 +87,7 @@ DSWActor* WarpPlane(int32_t* x, int32_t* y, int32_t* z, sectortype** sect) if (sp_ceiling) { - if (*z <= sp_ceiling->spr.pos.Z) + if (*z <= sp_ceiling->int_pos().Z) { return WarpToArea(sp_ceiling, x, y, z, sect); } @@ -95,7 +95,7 @@ DSWActor* WarpPlane(int32_t* x, int32_t* y, int32_t* z, sectortype** sect) if (sp_floor) { - if (*z >= sp_floor->spr.pos.Z) + if (*z >= sp_floor->int_pos().Z) { return WarpToArea(sp_floor, x, y, z, sect); } @@ -114,9 +114,9 @@ DSWActor* WarpToArea(DSWActor* sp_from, int32_t* x, int32_t* y, int32_t* z, sect short match_rand[16]; int z_adj = 0; - xoff = *x - sp_from->spr.pos.X; - yoff = *y - sp_from->spr.pos.Y; - zoff = *z - sp_from->spr.pos.Z; + xoff = *x - sp_from->int_pos().X; + yoff = *y - sp_from->int_pos().Y; + zoff = *z - sp_from->int_pos().Z; match = sp_from->spr.lotag; #if 0 @@ -176,9 +176,9 @@ DSWActor* WarpToArea(DSWActor* sp_from, int32_t* x, int32_t* y, int32_t* z, sect return nullptr; // determine new x,y,z position - *x = actor->spr.pos.X + xoff; - *y = actor->spr.pos.Y + yoff; - *z = actor->spr.pos.Z + zoff; + *x = actor->int_pos().X + xoff; + *y = actor->int_pos().Y + yoff; + *z = actor->int_pos().Z + zoff; // make sure you warp outside of warp plane *z += z_adj; diff --git a/source/games/sw/src/weapon.cpp b/source/games/sw/src/weapon.cpp index 3d4888bad..ed35fb81d 100644 --- a/source/games/sw/src/weapon.cpp +++ b/source/games/sw/src/weapon.cpp @@ -3660,7 +3660,7 @@ AutoShrap: for (i = 0; i < p->num; i++) { auto actor = SpawnActor(STAT_SKIP4, p->id, p->state, parentActor->sector(), - parentActor->spr.pos.X, parentActor->spr.pos.Y, hz[p->zlevel], shrap_ang, 512); + parentActor->int_pos().X, parentActor->int_pos().Y, hz[p->zlevel], shrap_ang, 512); if (p->random_disperse) { @@ -4003,24 +4003,24 @@ int SpawnBlood(DSWActor* actor, DSWActor* weapActor, short hit_ang, int hit_x, i { p = HariKariBlood; hit_ang = actor->spr.ang; - hit_x = actor->spr.pos.X; - hit_y = actor->spr.pos.Y; + hit_x = actor->int_pos().X; + hit_y = actor->int_pos().Y; hit_z = ActorZOfTop(weapActor) + (ActorSizeZ(weapActor) >> 4); } else { p = ExtraBlood; hit_ang = NORM_ANGLE(weapActor->spr.ang + 1024); - hit_x = actor->spr.pos.X; - hit_y = actor->spr.pos.Y; + hit_x = actor->int_pos().X; + hit_y = actor->int_pos().Y; hit_z = ActorZOfTop(weapActor) + (ActorSizeZ(weapActor) >> 2); } break; case SERP_RUN_R0: p = ExtraBlood; hit_ang = NORM_ANGLE(weapActor->spr.ang + 1024); - hit_x = actor->spr.pos.X; - hit_y = actor->spr.pos.Y; + hit_x = actor->int_pos().X; + hit_y = actor->int_pos().Y; hit_z = ActorZOfTop(actor) + (ActorSizeZ(actor) >> 2); break; case BLADE1: @@ -4029,30 +4029,30 @@ int SpawnBlood(DSWActor* actor, DSWActor* weapActor, short hit_ang, int hit_x, i case 5011: p = SmallBlood; hit_ang = NORM_ANGLE(AngToSprite(actor, weapActor) + 1024); - hit_x = actor->spr.pos.X; - hit_y = actor->spr.pos.Y; - hit_z = weapActor->spr.pos.Z - (ActorSizeZ(weapActor) >> 1); + hit_x = actor->int_pos().X; + hit_y = actor->int_pos().Y; + hit_z = weapActor->int_pos().Z - (ActorSizeZ(weapActor) >> 1); break; case STAR1: case CROSSBOLT: p = SomeBlood; hit_ang = NORM_ANGLE(weapActor->spr.ang + 1024); - hit_x = actor->spr.pos.X; - hit_y = actor->spr.pos.Y; - hit_z = weapActor->spr.pos.Z; + hit_x = actor->int_pos().X; + hit_y = actor->int_pos().Y; + hit_z = weapActor->int_pos().Z; break; case PLASMA_FOUNTAIN: p = PlasmaFountainBlood; hit_ang = weapActor->spr.ang; - hit_x = actor->spr.pos.X; - hit_y = actor->spr.pos.Y; + hit_x = actor->int_pos().X; + hit_y = actor->int_pos().Y; hit_z = ActorZOfTop(actor) + (ActorSizeZ(actor) >> 2); break; default: p = SomeBlood; hit_ang = NORM_ANGLE(weapActor->spr.ang + 1024); - hit_x = actor->spr.pos.X; - hit_y = actor->spr.pos.Y; + hit_x = actor->int_pos().X; + hit_y = actor->int_pos().Y; hit_z = ActorZOfTop(weapActor) + (ActorSizeZ(weapActor) >> 2); break; } @@ -4251,7 +4251,7 @@ bool WeaponMoveHit(DSWActor* actor) ASSERT(sectp->extra != -1); // hit floor - closer to floor than ceiling - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) { // hit a floor sprite if (actor->user.lowActor) @@ -4299,7 +4299,7 @@ bool WeaponMoveHit(DSWActor* actor) if ((sectp->ceilingstat & CSTAT_SECTOR_SKY) && sectp->ceilingpicnum != FAF_MIRROR_PIC) { - if (labs(actor->spr.pos.Z - sectp->ceilingz) < ActorSizeZ(actor)) + if (labs(actor->int_pos().Z - sectp->ceilingz) < ActorSizeZ(actor)) { SetSuicide(actor); return true; @@ -4402,7 +4402,7 @@ bool WeaponMoveHit(DSWActor* actor) if (wph->lotag == TAG_WALL_BREAK) { - HitBreakWall(wph, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, actor->user.ID); + HitBreakWall(wph, actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, actor->user.ID); actor->user.coll.setNone(); return true; } @@ -4411,7 +4411,7 @@ bool WeaponMoveHit(DSWActor* actor) // on walls, so look with hitscan HitInfo hit{}; - hitscan(actor->spr.pos, actor->sector(), { bcos(actor->spr.ang), bsin(actor->spr.ang), actor->spr.zvel }, hit, CLIPMASK_MISSILE); + hitscan(actor->int_pos(), actor->sector(), { bcos(actor->spr.ang), bsin(actor->spr.ang), actor->spr.zvel }, hit, CLIPMASK_MISSILE); if (!hit.hitSector) { @@ -4474,7 +4474,7 @@ int DoFireballFlames(DSWActor* actor) DSWActor* attach = actor->user.attachActor; if (attach != nullptr) { - actor->set_int_pos({ attach->spr.pos.X, attach->spr.pos.Y, ActorZOfMiddle(attach) }); + actor->set_int_pos({ attach->int_pos().X, attach->int_pos().Y, ActorZOfMiddle(attach) }); if ((attach->spr.extra & SPRX_BURNABLE)) { @@ -4502,7 +4502,7 @@ int DoFireballFlames(DSWActor* actor) { if (actor->sector()->hasU() && FixedToInt(actor->sector()->depth_fixed) > 0) { - if (labs(actor->sector()->floorz - actor->spr.pos.Z) <= Z(4)) + if (labs(actor->sector()->floorz - actor->int_pos().Z) <= Z(4)) { KillActor(actor); return 0; @@ -4575,7 +4575,7 @@ int DoBreakFlames(DSWActor* actor) { if (actor->sector()->hasU() && FixedToInt(actor->sector()->depth_fixed) > 0) { - if (labs(actor->sector()->floorz - actor->spr.pos.Z) <= Z(4)) + if (labs(actor->sector()->floorz - actor->int_pos().Z) <= Z(4)) { KillActor(actor); return 0; @@ -5046,7 +5046,7 @@ int ActorHealth(DSWActor* actor, short amt) PlaySound(DIGI_NINJACHOKE, actor, v3df_follow); InitPlasmaFountain(nullptr, actor); InitBloodSpray(actor,false,105); - actor->spr.ang = NORM_ANGLE(getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y) + 1024); + actor->spr.ang = NORM_ANGLE(getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y) + 1024); actor->spr.cstat &= ~(CSTAT_SPRITE_YFLIP); if (sw_ninjahack) NewStateGroup(actor, sg_NinjaHariKari); @@ -5274,7 +5274,7 @@ int GetDamage(DSWActor* actor, DSWActor* weapActor, int DamageNdx) int damage_per_pixel, damage_force, damage_amt; - DISTANCE(weapActor->spr.pos.X,weapActor->spr.pos.Y,actor->spr.pos.X,actor->spr.pos.Y,dist,a,b,c); + DISTANCE(weapActor->int_pos().X,weapActor->int_pos().Y,actor->int_pos().X,actor->int_pos().Y,dist,a,b,c); // take off the box around the player or else you'll never get // the max_damage; @@ -5356,7 +5356,7 @@ int PlayerCheckDeath(PLAYER* pp, DSWActor* weapActor) // for death direction //actor->user.slide_ang = weapActor->spr.ang; - actor->user.slide_ang = getangle(actor->spr.pos.X - weapActor->spr.pos.X, actor->spr.pos.Y - weapActor->spr.pos.Y); + actor->user.slide_ang = getangle(actor->int_pos().X - weapActor->int_pos().X, actor->int_pos().Y - weapActor->int_pos().Y); // for death velocity actor->user.slide_vel = actor->user.LastDamage * 5; @@ -7011,7 +7011,7 @@ int DoDamageTest(DSWActor* actor) SWStatIterator it(StatDamageList[stat]); while (auto itActor = it.Next()) { - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, tx, ty, tmin); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, tx, ty, tmin); if ((unsigned)dist > actor->user.Radius + itActor->user.Radius) continue; @@ -7025,7 +7025,7 @@ int DoDamageTest(DSWActor* actor) // For speed's sake, try limiting check only to radius weapons! if (actor->user.Radius > 200) { - if (!FAFcansee(itActor->spr.pos.X,itActor->spr.pos.Y, ActorUpperZ(actor), itActor->sector(),actor->spr.pos.X,actor->spr.pos.Y,actor->spr.pos.Z,actor->sector())) + if (!FAFcansee(itActor->int_pos().X,itActor->int_pos().Y, ActorUpperZ(actor), itActor->sector(),actor->int_pos().X,actor->int_pos().Y,actor->int_pos().Z,actor->sector())) continue; } @@ -7082,7 +7082,7 @@ int DoFlamesDamageTest(DSWActor* actor) continue; } - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, tx, ty, tmin); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, tx, ty, tmin); if ((unsigned)dist > actor->user.Radius + itActor->user.Radius) continue; @@ -7098,7 +7098,7 @@ int DoFlamesDamageTest(DSWActor* actor) if (actor->user.Radius > 200) // Note: No weaps have bigger radius than 200 cept explosion stuff { - if (FAFcansee(itActor->spr.pos.X,itActor->spr.pos.Y,ActorZOfMiddle(actor),itActor->sector(),actor->spr.pos.X,actor->spr.pos.Y,ActorZOfMiddle(actor),actor->sector())) + if (FAFcansee(itActor->int_pos().X,itActor->int_pos().Y,ActorZOfMiddle(actor),itActor->sector(),actor->int_pos().X,actor->int_pos().Y,ActorZOfMiddle(actor),actor->sector())) { DoDamage(itActor, actor); } @@ -7219,7 +7219,7 @@ int DoExpDamageTest(DSWActor* actor) SWStatIterator it(StatDamageList[stat]); while (auto itActor = it.Next()) { - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, tx, ty, tmin); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, tx, ty, tmin); if ((unsigned)dist > actor->user.Radius + itActor->user.Radius) continue; @@ -7233,7 +7233,7 @@ int DoExpDamageTest(DSWActor* actor) } else { - if ((unsigned)FindDistance3D(itActor->spr.pos.X - actor->spr.pos.X, itActor->spr.pos.Y - actor->spr.pos.Y, itActor->spr.pos.Z - actor->spr.pos.Z) > actor->user.Radius + itActor->user.Radius) + if ((unsigned)FindDistance3D(itActor->int_pos().X - actor->int_pos().X, itActor->int_pos().Y - actor->int_pos().Y, itActor->int_pos().Z - actor->int_pos().Z) > actor->user.Radius + itActor->user.Radius) continue; // added hitscan block because mines no long clip against actors/players @@ -7242,8 +7242,8 @@ int DoExpDamageTest(DSWActor* actor) // Second parameter MUST have blocking bits set or cansee won't work // added second check for FAF water - hitscans were hitting ceiling - if (!FAFcansee(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, ActorUpperZ(actor), itActor->sector()) && - !FAFcansee(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->sector(), itActor->spr.pos.X, itActor->spr.pos.Y, ActorLowerZ(actor), itActor->sector())) + if (!FAFcansee(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->sector(), itActor->int_pos().X, itActor->int_pos().Y, ActorUpperZ(actor), itActor->sector()) && + !FAFcansee(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->sector(), itActor->int_pos().X, itActor->int_pos().Y, ActorLowerZ(actor), itActor->sector())) continue; DoDamage(itActor, actor); @@ -7254,7 +7254,7 @@ int DoExpDamageTest(DSWActor* actor) if (actor->user.ID == MUSHROOM_CLOUD) return 0; // Central Nuke doesn't break stuff // Only secondaries do that - TraverseBreakableWalls(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, actor->user.Radius); + TraverseBreakableWalls(actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, actor->user.Radius); break_count = 0; max_stat = SIZ(StatBreakList); @@ -7264,15 +7264,15 @@ int DoExpDamageTest(DSWActor* actor) SWStatIterator it(StatBreakList[stat]); while (auto itActor = it.Next()) { - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, tx, ty, tmin); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, tx, ty, tmin); if ((unsigned)dist > actor->user.Radius) continue; - dist = FindDistance3D(itActor->spr.pos.X - actor->spr.pos.X, itActor->spr.pos.Y - actor->spr.pos.Y, ActorZOfMiddle(itActor) - actor->spr.pos.Z); + dist = FindDistance3D(itActor->int_pos().X - actor->int_pos().X, itActor->int_pos().Y - actor->int_pos().Y, ActorZOfMiddle(itActor) - actor->int_pos().Z); if ((unsigned)dist > actor->user.Radius) continue; - if (!FAFcansee(itActor->spr.pos.X, itActor->spr.pos.Y, ActorZOfMiddle(itActor), itActor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->sector())) + if (!FAFcansee(itActor->int_pos().X, itActor->int_pos().Y, ActorZOfMiddle(itActor), itActor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->sector())) continue; if ((itActor->spr.extra & SPRX_BREAKABLE)) @@ -7292,7 +7292,7 @@ int DoExpDamageTest(DSWActor* actor) SWStatIterator it(STAT_WALL_MOVE); while (auto itActor = it.Next()) { - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, tx, ty, tmin); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, tx, ty, tmin); if ((unsigned)dist > actor->user.Radius/4) continue; @@ -7338,7 +7338,7 @@ int DoMineExpMine(DSWActor* actor) SWStatIterator it(STAT_MINE_STUCK); while (auto itActor = it.Next()) { - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, tx, ty, tmin); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, tx, ty, tmin); if ((unsigned)dist > actor->user.Radius + itActor->user.Radius) continue; @@ -7349,7 +7349,7 @@ int DoMineExpMine(DSWActor* actor) continue; // Explosions are spherical, not planes, so let's check that way, well cylindrical at least. - zdist = abs(itActor->spr.pos.Z - actor->spr.pos.Z)>>4; + zdist = abs(itActor->int_pos().Z - actor->int_pos().Z)>>4; if (SpriteOverlap(actor, itActor) || (unsigned)zdist < actor->user.Radius + itActor->user.Radius) { DoDamage(itActor, actor); @@ -7387,7 +7387,7 @@ int DoStar(DSWActor* actor) DoActorZrange(actor); MissileWaterAdjust(actor); - if (actor->spr.pos.Z > actor->user.loz) + if (actor->int_pos().Z > actor->user.loz) { KillActor(actor); return true; @@ -7425,7 +7425,7 @@ int DoStar(DSWActor* actor) if (wph->lotag == TAG_WALL_BREAK) { - HitBreakWall(wph, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, actor->user.ID); + HitBreakWall(wph, actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, actor->user.ID); actor->user.coll.setNone(); break; } @@ -7470,7 +7470,7 @@ int DoStar(DSWActor* actor) bool did_hit_wall; auto hit_sect = actor->user.coll.hitSector; - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) { if (hit_sect->hasU() && FixedToInt(hit_sect->depth_fixed) > 0) { @@ -7500,7 +7500,7 @@ int DoStar(DSWActor* actor) actor->user.change.X = MulScale(actor->user.change.X, 64000 + (RandomRange(64000) - 32000), 16); actor->user.change.Y = MulScale(actor->user.change.Y, 64000 + (RandomRange(64000) - 32000), 16); - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) actor->user.change.Z = MulScale(actor->user.change.Z, 50000, 16); // floor else actor->user.change.Z = MulScale(actor->user.change.Z, 40000, 16); // ceiling @@ -7542,7 +7542,7 @@ int DoStar(DSWActor* actor) // 32000 to 96000 actor->user.change.X = MulScale(actor->user.change.X, 64000 + (RandomRange(64000) - 32000), 16); actor->user.change.Y = MulScale(actor->user.change.Y, 64000 + (RandomRange(64000) - 32000), 16); - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) actor->user.change.Z = MulScale(actor->user.change.Z, 50000, 16); // floor else actor->user.change.Z = MulScale(actor->user.change.Z, 40000, 16); // ceiling @@ -7670,7 +7670,7 @@ int MissileSeek(DSWActor* actor, int16_t delay_tics, int16_t aware_range/*, int1 if (goal != nullptr) { // move to correct angle - ang2tgt = getangle(goal->spr.pos.X - actor->spr.pos.X, goal->spr.pos.Y - actor->spr.pos.Y); + ang2tgt = getangle(goal->int_pos().X - actor->int_pos().X, goal->int_pos().Y - actor->int_pos().Y); delta_ang = getincangle(ang2tgt, actor->spr.ang); @@ -7686,7 +7686,7 @@ int MissileSeek(DSWActor* actor, int16_t delay_tics, int16_t aware_range/*, int1 zh = ActorZOfTop(actor) + (ActorSizeZ(actor) >> 2); - delta_ang = (zh - actor->spr.pos.Z)>>1; + delta_ang = (zh - actor->int_pos().Z)>>1; if (labs(delta_ang) > Z(16)) { @@ -7736,7 +7736,7 @@ int ComboMissileSeek(DSWActor* actor, int16_t delay_tics, int16_t aware_range/*, int oz; // move to correct angle - ang2tgt = getangle(goal->spr.pos.X - actor->spr.pos.X, goal->spr.pos.Y - actor->spr.pos.Y); + ang2tgt = getangle(goal->int_pos().X - actor->int_pos().X, goal->int_pos().Y - actor->int_pos().Y); delta_ang = getincangle(ang2tgt, actor->spr.ang); @@ -7755,11 +7755,11 @@ int ComboMissileSeek(DSWActor* actor, int16_t delay_tics, int16_t aware_range/*, zh = ActorZOfTop(actor) + (ActorSizeZ(actor) >> 2); - dist = ksqrt(SQ(actor->spr.pos.X - goal->spr.pos.X) + SQ(actor->spr.pos.Y - goal->spr.pos.Y) + (SQ(actor->spr.pos.Z - zh)>>8)); + dist = ksqrt(SQ(actor->int_pos().X - goal->int_pos().X) + SQ(actor->int_pos().Y - goal->int_pos().Y) + (SQ(actor->int_pos().Z - zh)>>8)); oz = actor->user.change.Z; - actor->user.change.Z = Scale(actor->spr.xvel, zh - actor->spr.pos.Z, dist); + actor->user.change.Z = Scale(actor->spr.xvel, zh - actor->int_pos().Z, dist); actor->user.change.Z = (actor->user.change.Z + oz*15)/16; } return 0; @@ -7820,15 +7820,15 @@ int VectorMissileSeek(DSWActor* actor, int16_t delay_tics, int16_t turn_speed, i zh = ActorZOfTop(actor) + (ActorSizeZ(actor) >> 2); - dist = ksqrt(SQ(actor->spr.pos.X - goal->spr.pos.X) + SQ(actor->spr.pos.Y - goal->spr.pos.Y) + (SQ(actor->spr.pos.Z - zh)>>8)); + dist = ksqrt(SQ(actor->int_pos().X - goal->int_pos().X) + SQ(actor->int_pos().Y - goal->int_pos().Y) + (SQ(actor->int_pos().Z - zh)>>8)); ox = actor->user.change.X; oy = actor->user.change.Y; oz = actor->user.change.Z; - actor->user.change.X = Scale(actor->spr.xvel, goal->spr.pos.X - actor->spr.pos.X, dist); - actor->user.change.Y = Scale(actor->spr.xvel, goal->spr.pos.Y - actor->spr.pos.Y, dist); - actor->user.change.Z = Scale(actor->spr.xvel, zh - actor->spr.pos.Z, dist); + actor->user.change.X = Scale(actor->spr.xvel, goal->int_pos().X - actor->int_pos().X, dist); + actor->user.change.Y = Scale(actor->spr.xvel, goal->int_pos().Y - actor->int_pos().Y, dist); + actor->user.change.Z = Scale(actor->spr.xvel, zh - actor->int_pos().Z, dist); // the large turn_speed is the slower the turn @@ -7878,15 +7878,15 @@ int VectorWormSeek(DSWActor* actor, int16_t delay_tics, int16_t aware_range1, in zh = ActorZOfTop(actor) + (ActorSizeZ(actor) >> 2); - dist = ksqrt(SQ(actor->spr.pos.X - goal->spr.pos.X) + SQ(actor->spr.pos.Y - goal->spr.pos.Y) + (SQ(actor->spr.pos.Z - zh)>>8)); + dist = ksqrt(SQ(actor->int_pos().X - goal->int_pos().X) + SQ(actor->int_pos().Y - goal->int_pos().Y) + (SQ(actor->int_pos().Z - zh)>>8)); ox = actor->user.change.X; oy = actor->user.change.Y; oz = actor->user.change.Z; - actor->user.change.X = Scale(actor->spr.xvel, goal->spr.pos.X - actor->spr.pos.X, dist); - actor->user.change.Y = Scale(actor->spr.xvel, goal->spr.pos.Y - actor->spr.pos.Y, dist); - actor->user.change.Z = Scale(actor->spr.xvel, zh - actor->spr.pos.Z, dist); + actor->user.change.X = Scale(actor->spr.xvel, goal->int_pos().X - actor->int_pos().X, dist); + actor->user.change.Y = Scale(actor->spr.xvel, goal->int_pos().Y - actor->int_pos().Y, dist); + actor->user.change.Z = Scale(actor->spr.xvel, zh - actor->int_pos().Z, dist); actor->user.change.X = (actor->user.change.X + ox*7)/8; actor->user.change.Y = (actor->user.change.Y + oy*7)/8; @@ -7920,7 +7920,7 @@ int DoBlurExtend(DSWActor* actor, int16_t interval, int16_t blur_num) int InitPlasmaFountain(DSWActor* wActor, DSWActor* sActor) { auto actorNew = SpawnActor(STAT_MISSILE, PLASMA_FOUNTAIN, s_PlasmaFountain, sActor->sector(), - sActor->spr.pos.X, sActor->spr.pos.Y, ActorZOfBottom(sActor), sActor->spr.ang, 0); + sActor->int_pos().X, sActor->int_pos().Y, ActorZOfBottom(sActor), sActor->spr.ang, 0); actorNew->spr.shade = -40; if (wActor) @@ -7948,7 +7948,7 @@ int DoPlasmaFountain(DSWActor* actor) if (!attachActor) return 0; // move with sprite - SetActorZ(actor, attachActor->spr.pos); + SetActorZ(actor, attachActor->int_pos()); actor->spr.ang = attachActor->spr.ang; actor->user.Counter++; @@ -7982,9 +7982,9 @@ int DoPlasma(DSWActor* actor) int32_t dax, day, daz; int ox,oy,oz; - ox = actor->spr.pos.X; - oy = actor->spr.pos.Y; - oz = actor->spr.pos.Z; + ox = actor->int_pos().X; + oy = actor->int_pos().Y; + oz = actor->int_pos().Z; DoBlurExtend(actor, 0, 4); @@ -8126,10 +8126,10 @@ bool SlopeBounce(DSWActor* actor, bool *hit_wall) auto hit_sector = actor->user.coll.hitSector; - getzsofslopeptr(hit_sector, actor->spr.pos.X, actor->spr.pos.Y, &hiz, &loz); + getzsofslopeptr(hit_sector, actor->int_pos().X, actor->int_pos().Y, &hiz, &loz); // detect the ceiling and the hit_wall - if (actor->spr.pos.Z < ((hiz+loz) >> 1)) + if (actor->int_pos().Z < ((hiz+loz) >> 1)) { if (!(hit_sector->ceilingstat & CSTAT_SECTOR_SLOPE)) slope = 0; @@ -8265,7 +8265,7 @@ int DoGrenade(DSWActor* actor) if (wph->lotag == TAG_WALL_BREAK) { - HitBreakWall(wph, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, actor->user.ID); + HitBreakWall(wph, actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, actor->user.ID); actor->user.coll.setNone(); break; } @@ -8296,7 +8296,7 @@ int DoGrenade(DSWActor* actor) else { // hit a sector - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) { // hit a floor if (!(actor->user.Flags & SPR_BOUNCE)) @@ -8332,7 +8332,7 @@ int DoGrenade(DSWActor* actor) else { // hit floor - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) { if (actor->user.Flags & (SPR_UNDERWATER)) actor->user.Flags |= (SPR_BOUNCE); // no bouncing underwater @@ -8389,7 +8389,7 @@ int DoGrenade(DSWActor* actor) if (!(actor->user.Flags & (SPR_BOUNCE|SPR_UNDERWATER))) { auto actorNew = SpawnActor(STAT_MISSILE, PUFF, s_Puff, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 100); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 100); SetOwner(actor, actorNew); actorNew->spr.shade = -40; @@ -8467,7 +8467,7 @@ int DoVulcanBoulder(DSWActor* actor) if (wph->lotag == TAG_WALL_BREAK) { - HitBreakWall(wph, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, actor->user.ID); + HitBreakWall(wph, actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, actor->user.ID); actor->user.coll.setNone(); break; } @@ -8495,7 +8495,7 @@ int DoVulcanBoulder(DSWActor* actor) else { // hit a sloped sector - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) { // hit a floor actor->user.change.X = MulScale(actor->user.change.X, 30000, 16); @@ -8520,7 +8520,7 @@ int DoVulcanBoulder(DSWActor* actor) else { // hit unsloped floor - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) { actor->user.coll.setNone(); actor->user.Counter = 0; @@ -8572,7 +8572,7 @@ int DoMineRangeTest(DSWActor* actor, int range) SWStatIterator it(StatDamageList[stat]); while (auto itActor = it.Next()) { - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, tx, ty, tmin); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, tx, ty, tmin); if (dist > range) continue; @@ -8588,11 +8588,11 @@ int DoMineRangeTest(DSWActor* actor, int range) if (itActor->user.ID == GIRLNINJA_RUN_R0 && !ownerisplayer) continue; - dist = FindDistance3D(actor->spr.pos - itActor->spr.pos); + dist = FindDistance3D(actor->int_pos() - itActor->int_pos()); if (dist > range) continue; - if (!FAFcansee(itActor->spr.pos.X,itActor->spr.pos.Y,ActorUpperZ(actor),itActor->sector(),actor->spr.pos.X,actor->spr.pos.Y,actor->spr.pos.Z,actor->sector())) + if (!FAFcansee(itActor->int_pos().X,itActor->int_pos().Y,ActorUpperZ(actor),itActor->sector(),actor->int_pos().X,actor->int_pos().Y,actor->int_pos().Z,actor->sector())) continue; return true; @@ -8620,9 +8620,9 @@ int DoMineStuck(DSWActor* actor) actor->user.WaitTics = SEC(1)/2; } - vec3_t pos = { attachActor->spr.pos.X, attachActor->spr.pos.Y, attachActor->spr.pos.Z - actor->user.pos.Z }; + vec3_t pos = { attachActor->int_pos().X, attachActor->int_pos().Y, attachActor->int_pos().Z - actor->user.pos.Z }; SetActorZ(actor, &pos); - actor->set_int_z(attachActor->spr.pos.Z - (ActorSizeZ(attachActor) >> 1)); + actor->set_int_z(attachActor->int_pos().Z - (ActorSizeZ(attachActor) >> 1)); } // not activated yet @@ -8807,7 +8807,7 @@ int DoMine(DSWActor* actor) SetMineStuck(actor); // Set the Z position - actor->set_int_z(hitActor->spr.pos.Z - (ActorSizeZ(hitActor) >> 1)); + actor->set_int_z(hitActor->int_pos().Z - (ActorSizeZ(hitActor) >> 1)); // If it's not alive, don't stick it if (hitActor->hasU() && hitActor->user.Health <= 0) return false; // JBF: added null check @@ -8819,7 +8819,7 @@ int DoMine(DSWActor* actor) // attach weapon to sprite SetAttach(hitActor, actor); - actor->user.pos.Z = hitActor->spr.pos.Z - actor->spr.pos.Z; + actor->user.pos.Z = hitActor->int_pos().Z - actor->int_pos().Z; auto own = GetOwner(actor); if (own && own->hasU()) @@ -8848,7 +8848,7 @@ int DoMine(DSWActor* actor) else if ((hitActor->spr.cstat & CSTAT_SPRITE_ALIGNMENT_FLOOR)) { // hit floor - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) actor->user.Flags2 |= (SPR2_ATTACH_FLOOR); else actor->user.Flags2 |= (SPR2_ATTACH_CEILING); @@ -8870,7 +8870,7 @@ int DoMine(DSWActor* actor) if (hit_wall->lotag == TAG_WALL_BREAK) { - HitBreakWall(hit_wall, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, actor->user.ID); + HitBreakWall(hit_wall, actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, actor->user.ID); actor->user.coll.setNone(); break; } @@ -8900,7 +8900,7 @@ int DoMine(DSWActor* actor) SetMineStuck(actor); // hit floor - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) actor->user.Flags2 |= (SPR2_ATTACH_FLOOR); else actor->user.Flags2 |= (SPR2_ATTACH_CEILING); @@ -9033,7 +9033,7 @@ int DoEMPBurst(DSWActor* actor) DSWActor* attachActor = actor->user.attachActor; if (attachActor != nullptr) { - vec3_t pos = { attachActor->spr.pos.X, attachActor->spr.pos.Y, attachActor->spr.pos.Z - actor->user.pos.Z }; + vec3_t pos = { attachActor->int_pos().X, attachActor->int_pos().Y, attachActor->int_pos().Z - actor->user.pos.Z }; SetActorZ(actor, &pos); actor->spr.ang = NORM_ANGLE(attachActor->spr.ang+1024); } @@ -9143,7 +9143,7 @@ int DoLaser(DSWActor* actor) if (spawn_count < 256) { auto actorNew = SpawnActor(STAT_MISSILE, PUFF, s_LaserPuff, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); actorNew->spr.shade = -40; actorNew->spr.xrepeat = 16; @@ -9230,7 +9230,7 @@ int DoRail(DSWActor* actor) if (spawn_count < 128) { auto actorNew = SpawnActor(STAT_MISSILE, PUFF, &s_RailPuff[0][0], actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 20); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 20); actorNew->spr.xvel += (RandomRange(140)-RandomRange(140)); actorNew->spr.yvel += (RandomRange(140)-RandomRange(140)); @@ -9282,12 +9282,12 @@ int DoRailStart(DSWActor* actor) int DoRocket(DSWActor* actor) { int dist,a,b,c; - auto pos = actor->spr.pos; + auto pos = actor->int_pos(); if ((actor->user.FlagOwner -= ACTORMOVETICS)<=0 && actor->user.spal == 20) { - DISTANCE(actor->spr.pos.X, actor->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y, dist, a, b, c); + DISTANCE(actor->int_pos().X, actor->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y, dist, a, b, c); actor->user.FlagOwner = dist>>6; // Special warn sound attached to each seeker spawned PlaySound(DIGI_MINEBEEP, actor, v3df_follow); @@ -9378,7 +9378,7 @@ int DoMicroMini(DSWActor* actor) int SpawnExtraMicroMini(DSWActor* actor) { auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R0, &s_Micro[0][0], actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, actor->spr.xvel); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, actor->spr.xvel); SetOwner(GetOwner(actor), actorNew); actorNew->spr.yrepeat = actorNew->spr.xrepeat = actor->spr.xrepeat; @@ -9418,7 +9418,7 @@ int DoMicro(DSWActor* actor) if (!actor->user.Counter) { auto actorNew = SpawnActor(STAT_MISSILE, PUFF, s_Puff, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 100); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 100); SetOwner(GetOwner(actor), actorNew); actorNew->spr.shade = -40; @@ -9441,7 +9441,7 @@ int DoMicro(DSWActor* actor) // last smoke if ((actor->user.WaitTics -= MISSILEMOVETICS) <= 0) { - SetActorZ(actorNew, actorNew->spr.pos); + SetActorZ(actorNew, actorNew->int_pos()); NewStateGroup(actor, &sg_MicroMini[0]); actor->spr.xrepeat = actor->spr.yrepeat = 10; actor->spr.cstat &= ~(CSTAT_SPRITE_INVISIBLE); @@ -9479,10 +9479,10 @@ int DoUziBullet(DSWActor* actor) day = MOVEy((actor->spr.xvel >> 1), actor->spr.ang); daz = actor->spr.zvel >> 1; - sx = actor->spr.pos.X; - sy = actor->spr.pos.Y; + sx = actor->int_pos().X; + sy = actor->int_pos().Y; actor->user.coll = move_missile(actor, dax, day, daz, actor->user.ceiling_dist, actor->user.floor_dist, CLIPMASK_MISSILE, MISSILEMOVETICS); - actor->user.Dist += Distance(sx, sy, actor->spr.pos.X, actor->spr.pos.Y); + actor->user.Dist += Distance(sx, sy, actor->int_pos().X, actor->int_pos().Y); MissileHitDiveArea(actor); @@ -9493,7 +9493,7 @@ int DoUziBullet(DSWActor* actor) { WeaponMoveHit(actor); - auto actorNew = SpawnActor(STAT_MISSILE, UZI_SMOKE, s_UziSmoke, actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + auto actorNew = SpawnActor(STAT_MISSILE, UZI_SMOKE, s_UziSmoke, actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); actorNew->spr.shade = -40; actorNew->spr.xrepeat = UZI_SMOKE_REPEAT; actorNew->spr.yrepeat = UZI_SMOKE_REPEAT; @@ -9504,7 +9504,7 @@ int DoUziBullet(DSWActor* actor) if (!(actor->user.Flags & SPR_UNDERWATER)) { - actorNew = SpawnActor(STAT_MISSILE, UZI_SPARK, s_UziSpark, actorNew->sector(), actorNew->spr.pos.X, actorNew->spr.pos.Y, actorNew->spr.pos.Z, 0, 0); + actorNew = SpawnActor(STAT_MISSILE, UZI_SPARK, s_UziSpark, actorNew->sector(), actorNew->int_pos().X, actorNew->int_pos().Y, actorNew->int_pos().Z, 0, 0); actorNew->spr.shade = -40; actorNew->spr.xrepeat = UZI_SPARK_REPEAT; actorNew->spr.yrepeat = UZI_SPARK_REPEAT; @@ -9673,9 +9673,9 @@ int SpawnCoolieExp(DSWActor* actor) actor->user.Counter = RandomRange(120); // This is the wait til birth time! - zh = actor->spr.pos.Z - ActorSizeZ(actor) + (ActorSizeZ(actor) >> 2); - nx = actor->spr.pos.X + MOVEx(64, actor->spr.ang+1024); - ny = actor->spr.pos.Y + MOVEy(64, actor->spr.ang+1024); + zh = actor->int_pos().Z - ActorSizeZ(actor) + (ActorSizeZ(actor) >> 2); + nx = actor->int_pos().X + MOVEx(64, actor->spr.ang+1024); + ny = actor->int_pos().Y + MOVEy(64, actor->spr.ang+1024); PlaySound(DIGI_COOLIEEXPLODE, actor, v3df_none); @@ -9745,7 +9745,7 @@ void SpawnFireballFlames(DSWActor* actor, DSWActor* enemyActor) } auto actorNew = SpawnActor(STAT_MISSILE, FIREBALL_FLAMES, s_FireballFlames, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); actorNew->spr.hitag = LUMINOUS; //Always full brightness @@ -9806,7 +9806,7 @@ void SpawnFireballFlames(DSWActor* actor, DSWActor* enemyActor) int SpawnBreakFlames(DSWActor* actor) { - auto actorNew = SpawnActor(STAT_MISSILE, FIREBALL_FLAMES+1, s_BreakFlames, actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + auto actorNew = SpawnActor(STAT_MISSILE, FIREBALL_FLAMES+1, s_BreakFlames, actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); actorNew->spr.hitag = LUMINOUS; //Always full brightness @@ -9837,7 +9837,7 @@ int SpawnBreakFlames(DSWActor* actor) void SpawnBreakStaticFlames(DSWActor* actor) { auto actorNew = SpawnActor(STAT_STATIC_FIRE, FIREBALL_FLAMES, nullptr, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); if (RandomRange(1000) > 500) actorNew->spr.picnum = 3143; @@ -9855,7 +9855,7 @@ void SpawnBreakStaticFlames(DSWActor* actor) actorNew->user.Radius = 200; actorNew->user.floor_dist = actorNew->user.ceiling_dist = 0; - actorNew->set_int_z(getflorzofslopeptr(actorNew->sector(), actorNew->spr.pos.X, actorNew->spr.pos.Y)); + actorNew->set_int_z(getflorzofslopeptr(actorNew->sector(), actorNew->int_pos().X, actorNew->int_pos().Y)); PlaySound(DIGI_FIRE1,actorNew,v3df_dontpan|v3df_doppler); } @@ -9871,7 +9871,7 @@ void SpawnFireballExp(DSWActor* actor) PlaySound(DIGI_SMALLEXP, actor, v3df_none); auto actorNew = SpawnActor(STAT_MISSILE, FIREBALL_EXP, s_FireballExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); actorNew->spr.hitag = LUMINOUS; //Always full brightness actorNew->spr.xrepeat = 52; actorNew->spr.yrepeat = 52; @@ -9903,7 +9903,7 @@ void SpawnGoroFireballExp(DSWActor* actor) PlaySound(DIGI_MEDIUMEXP, actor, v3df_none); auto actorNew = SpawnActor(STAT_MISSILE, 0, s_FireballExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); actorNew->spr.hitag = LUMINOUS; //Always full brightness actorNew->spr.xrepeat = 16; @@ -9932,7 +9932,7 @@ void SpawnBoltExp(DSWActor* actor) PlaySound(DIGI_BOLTEXPLODE, actor, v3df_none); auto expActor = SpawnActor(STAT_MISSILE, BOLT_EXP, s_BoltExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); expActor->spr.hitag = LUMINOUS; //Always full brightness SetOwner(GetOwner(actor), expActor); @@ -9950,7 +9950,7 @@ void SpawnBoltExp(DSWActor* actor) DoExpDamageTest(expActor); SetExpQuake(actor); // !JIM! made rocket launcher shake things - SpawnVis(nullptr, expActor->sector(), expActor->spr.pos.X, expActor->spr.pos.Y, expActor->spr.pos.Z, 16); + SpawnVis(nullptr, expActor->sector(), expActor->int_pos().X, expActor->int_pos().Y, expActor->int_pos().Z, 16); } int SpawnBunnyExp(DSWActor* actor) @@ -9981,7 +9981,7 @@ void SpawnTankShellExp(DSWActor* actor) PlaySound(DIGI_BOLTEXPLODE, actor, v3df_none); auto expActor = SpawnActor(STAT_MISSILE, TANK_SHELL_EXP, s_TankShellExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); expActor->spr.hitag = LUMINOUS; //Always full brightness SetOwner(GetOwner(actor), expActor); @@ -9996,7 +9996,7 @@ void SpawnTankShellExp(DSWActor* actor) SpawnExpZadjust(actor, expActor, Z(40), Z(40)); DoExpDamageTest(expActor); - SpawnVis(nullptr, expActor->sector(), expActor->spr.pos.X, expActor->spr.pos.Y, expActor->spr.pos.Z, 16); + SpawnVis(nullptr, expActor->sector(), expActor->int_pos().X, expActor->int_pos().Y, expActor->int_pos().Z, 16); } @@ -10005,7 +10005,7 @@ void SpawnNuclearSecondaryExp(DSWActor* actor, short ang) ASSERT(actor->hasU()); auto expActor = SpawnActor(STAT_MISSILE, GRENADE_EXP, s_GrenadeExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 512); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 512); expActor->spr.hitag = LUMINOUS; //Always full brightness SetOwner(GetOwner(actor), expActor); @@ -10026,7 +10026,7 @@ void SpawnNuclearSecondaryExp(DSWActor* actor, short ang) expActor->user.coll = move_missile(expActor, expActor->user.change.X, expActor->user.change.Y, 0, expActor->user.ceiling_dist, expActor->user.floor_dist, CLIPMASK_MISSILE, MISSILEMOVETICS); - if (FindDistance3D(expActor->spr.pos - actor->spr.pos) < 1024) + if (FindDistance3D(expActor->int_pos() - actor->int_pos()) < 1024) { KillActor(expActor); return; @@ -10064,7 +10064,7 @@ void SpawnNuclearExp(DSWActor* actor) // Spawn big mushroom cloud auto expActor = SpawnActor(STAT_MISSILE, MUSHROOM_CLOUD, s_NukeMushroom, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); expActor->spr.hitag = LUMINOUS; //Always full brightness SetOwner(own, expActor); @@ -10081,7 +10081,7 @@ void SpawnNuclearExp(DSWActor* actor) // Do central explosion expActor = SpawnActor(STAT_MISSILE, MUSHROOM_CLOUD, s_GrenadeExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); SetOwner(own, expActor); expActor->spr.shade = -128; @@ -10124,10 +10124,10 @@ void SpawnTracerExp(DSWActor* actor) if (actor->user.ID == BOLT_THINMAN_R1) expActor = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R1, s_TracerExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); else expActor = SpawnActor(STAT_MISSILE, TRACER_EXP, s_TracerExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); expActor->spr.hitag = LUMINOUS; //Always full brightness SetOwner(GetOwner(actor), expActor); @@ -10156,7 +10156,7 @@ void SpawnMicroExp(DSWActor* actor) return ; auto expActor = SpawnActor(STAT_MISSILE, MICRO_EXP, s_MicroExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); expActor->spr.hitag = LUMINOUS; //Always full brightness SetOwner(GetOwner(actor), expActor); @@ -10177,7 +10177,7 @@ void SpawnMicroExp(DSWActor* actor) // SpawnExpZadjust(actor, expActor, Z(20), Z(20)); - SpawnVis(nullptr, expActor->sector(), expActor->spr.pos.X, expActor->spr.pos.Y, expActor->spr.pos.Z, 16); + SpawnVis(nullptr, expActor->sector(), expActor->int_pos().X, expActor->int_pos().Y, expActor->int_pos().Z, 16); } void AddSpriteToSectorObject(DSWActor* actor, SECTOR_OBJECT* sop) @@ -10203,9 +10203,9 @@ void AddSpriteToSectorObject(DSWActor* actor, SECTOR_OBJECT* sop) actor->user.Flags |= (SPR_ON_SO_SECTOR|SPR_SO_ATTACHED); - actor->user.pos.X = sop->pmid.X - actor->spr.pos.X; - actor->user.pos.Y = sop->pmid.Y - actor->spr.pos.Y; - actor->user.pos.Z = sop->mid_sector->floorz - actor->spr.pos.Z; + actor->user.pos.X = sop->pmid.X - actor->int_pos().X; + actor->user.pos.Y = sop->pmid.Y - actor->int_pos().Y; + actor->user.pos.Z = sop->mid_sector->floorz - actor->int_pos().Z; actor->user.sang = actor->spr.ang; } @@ -10215,7 +10215,7 @@ void SpawnBigGunFlames(DSWActor* actor, DSWActor* Operator, SECTOR_OBJECT* sop, unsigned sn; auto expActor = SpawnActor(STAT_MISSILE, MICRO_EXP, s_BigGunFlame, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); expActor->spr.hitag = LUMINOUS; //Always full brightness SetOwner(Operator, expActor); @@ -10276,7 +10276,7 @@ void SpawnGrenadeSecondaryExp(DSWActor* actor, int ang) ASSERT(actor->hasU()); auto expActor = SpawnActor(STAT_MISSILE, GRENADE_EXP, s_GrenadeSmallExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 1024); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 1024); expActor->spr.hitag = LUMINOUS; //Always full brightness SetOwner(GetOwner(actor), expActor); @@ -10297,7 +10297,7 @@ void SpawnGrenadeSecondaryExp(DSWActor* actor, int ang) expActor->user.coll = move_missile(expActor, expActor->user.change.X, expActor->user.change.Y, 0, expActor->user.ceiling_dist, expActor->user.floor_dist, CLIPMASK_MISSILE, MISSILEMOVETICS); - if (FindDistance3D(expActor->spr.pos - actor->spr.pos) < 1024) + if (FindDistance3D(expActor->int_pos() - actor->int_pos()) < 1024) { KillActor(expActor); return; @@ -10333,9 +10333,9 @@ void SpawnGrenadeExp(DSWActor* actor) } } - dx = actor->spr.pos.X; - dy = actor->spr.pos.Y; - dz = actor->spr.pos.Z; + dx = actor->int_pos().X; + dy = actor->int_pos().Y; + dz = actor->int_pos().Z; if (actor->user.ID == ZILLA_RUN_R0) { @@ -10368,7 +10368,7 @@ void SpawnGrenadeExp(DSWActor* actor) DoExpDamageTest(expActor); SetExpQuake(expActor); - SpawnVis(nullptr, expActor->sector(), expActor->spr.pos.X, expActor->spr.pos.Y, expActor->spr.pos.Z, 0); + SpawnVis(nullptr, expActor->sector(), expActor->int_pos().X, expActor->int_pos().Y, expActor->int_pos().Z, 0); } void SpawnExpZadjust(DSWActor* actor, DSWActor* expActor, int upper_zsize, int lower_zsize) @@ -10379,8 +10379,8 @@ void SpawnExpZadjust(DSWActor* actor, DSWActor* expActor, int upper_zsize, int l if (actor->hasU()) { - tos_z = expActor->spr.pos.Z - upper_zsize; - bos_z = expActor->spr.pos.Z + lower_zsize; + tos_z = expActor->int_pos().Z - upper_zsize; + bos_z = expActor->int_pos().Z + lower_zsize; if (tos_z <= actor->user.hiz + Z(4)) { @@ -10396,10 +10396,10 @@ void SpawnExpZadjust(DSWActor* actor, DSWActor* expActor, int upper_zsize, int l { int cz,fz; - getzsofslopeptr(expActor->sector(), expActor->spr.pos.X, expActor->spr.pos.Y, &cz, &fz); + getzsofslopeptr(expActor->sector(), expActor->int_pos().X, expActor->int_pos().Y, &cz, &fz); - tos_z = expActor->spr.pos.Z - upper_zsize; - bos_z = expActor->spr.pos.Z + lower_zsize; + tos_z = expActor->int_pos().Z - upper_zsize; + bos_z = expActor->int_pos().Z + lower_zsize; if (tos_z <= cz + Z(4)) { @@ -10426,7 +10426,7 @@ void SpawnMineExp(DSWActor* actor) PlaySound(DIGI_MINEBLOW, actor, v3df_none); auto expActor = SpawnActor(STAT_MISSILE, MINE_EXP, s_MineExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); expActor->spr.hitag = LUMINOUS; //Always full brightness SetOwner(GetOwner(actor), expActor); @@ -10443,7 +10443,7 @@ void SpawnMineExp(DSWActor* actor) // SpawnExpZadjust(actor, expActor, Z(100), Z(20)); - SpawnVis(nullptr, expActor->sector(), expActor->spr.pos.X, expActor->spr.pos.Y, expActor->spr.pos.Z, 16); + SpawnVis(nullptr, expActor->sector(), expActor->int_pos().X, expActor->int_pos().Y, expActor->int_pos().Z, 16); SetExpQuake(expActor); } @@ -10472,7 +10472,7 @@ DSWActor* SpawnSectorExp(DSWActor* actor) PlaySound(DIGI_30MMEXPLODE, actor, v3df_none); auto expActor = SpawnActor(STAT_MISSILE, GRENADE_EXP, s_SectorExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); expActor->spr.hitag = LUMINOUS; //Always full brightness expActor->spr.shade = -40; @@ -10484,7 +10484,7 @@ DSWActor* SpawnSectorExp(DSWActor* actor) DoExpDamageTest(expActor); SetExpQuake(expActor); - SpawnVis(nullptr, expActor->sector(), expActor->spr.pos.X, expActor->spr.pos.Y, expActor->spr.pos.Z, 16); + SpawnVis(nullptr, expActor->sector(), expActor->int_pos().X, expActor->int_pos().Y, expActor->int_pos().Z, 16); return expActor; } @@ -10495,7 +10495,7 @@ DSWActor* SpawnLargeExp(DSWActor* actor) PlaySound(DIGI_30MMEXPLODE, actor, v3df_none); auto expActor = SpawnActor(STAT_MISSILE, GRENADE_EXP, s_SectorExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); expActor->spr.hitag = LUMINOUS; //Always full brightness expActor->spr.shade = -40; @@ -10510,7 +10510,7 @@ DSWActor* SpawnLargeExp(DSWActor* actor) // Should not cause other sectors to explode DoExpDamageTest(expActor); SetExpQuake(expActor); - SpawnVis(nullptr, expActor->sector(), expActor->spr.pos.X, expActor->spr.pos.Y, expActor->spr.pos.Z, 16); + SpawnVis(nullptr, expActor->sector(), expActor->int_pos().X, expActor->int_pos().Y, expActor->int_pos().Z, 16); return expActor; } @@ -10526,13 +10526,13 @@ void SpawnMeteorExp(DSWActor* actor) if (actor->user.spal == 25) // Serp ball { expActor = SpawnActor(STAT_MISSILE, METEOR_EXP, s_TeleportEffect2, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); } else { PlaySound(DIGI_MEDIUMEXP, actor, v3df_none); expActor = SpawnActor(STAT_MISSILE, METEOR_EXP, s_MeteorExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); } expActor->spr.hitag = LUMINOUS; //Always full brightness @@ -10561,7 +10561,7 @@ void SpawnLittleExp(DSWActor* actor) PlaySound(DIGI_HEADSHOTHIT, actor, v3df_none); auto expActor = SpawnActor(STAT_MISSILE, BOLT_EXP, s_SectorExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); expActor->spr.hitag = LUMINOUS; //Always full brightness expActor->spr.shade = -127; @@ -10570,7 +10570,7 @@ void SpawnLittleExp(DSWActor* actor) expActor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN); expActor->user.Radius = DamageData[DMG_BASIC_EXP].radius; DoExpDamageTest(expActor); - SpawnVis(nullptr, expActor->sector(), expActor->spr.pos.X, expActor->spr.pos.Y, expActor->spr.pos.Z, 16); + SpawnVis(nullptr, expActor->sector(), expActor->int_pos().X, expActor->int_pos().Y, expActor->int_pos().Z, 16); } int DoFireball(DSWActor* actor) @@ -10638,7 +10638,7 @@ int DoFindGround(DSWActor* actor) auto save_cstat = actor->spr.cstat; actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN); - FAFgetzrange(actor->spr.pos, actor->sector(), &actor->user.hiz, &ceilhit, &actor->user.loz, &florhit, (((int) actor->spr.clipdist) << 2) - GETZRANGE_CLIP_ADJ, CLIPMASK_PLAYER); + FAFgetzrange(actor->int_pos(), actor->sector(), &actor->user.hiz, &ceilhit, &actor->user.loz, &florhit, (((int) actor->spr.clipdist) << 2) - GETZRANGE_CLIP_ADJ, CLIPMASK_PLAYER); actor->spr.cstat = save_cstat; switch (florhit.type) @@ -10690,7 +10690,7 @@ int DoFindGroundPoint(DSWActor* actor) auto save_cstat = actor->spr.cstat; actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN); - FAFgetzrangepoint(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->sector(), &actor->user.hiz, &ceilhit, &actor->user.loz, &florhit); + FAFgetzrangepoint(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->sector(), &actor->user.hiz, &ceilhit, &actor->user.loz, &florhit); actor->spr.cstat = save_cstat; switch (florhit.type) @@ -10750,9 +10750,9 @@ int DoNapalm(DSWActor* actor) } } - ox = actor->spr.pos.X; - oy = actor->spr.pos.Y; - oz = actor->spr.pos.Z; + ox = actor->int_pos().X; + oy = actor->int_pos().Y; + oz = actor->int_pos().Z; actor->user.coll = move_missile(actor, actor->user.change.X, actor->user.change.Y, actor->user.change.Z, actor->user.ceiling_dist, actor->user.floor_dist, CLIPMASK_MISSILE, MISSILEMOVETICS); @@ -10790,7 +10790,7 @@ int DoNapalm(DSWActor* actor) PlaySound(DIGI_NAPPUFF, actor, v3df_none); auto expActor = SpawnActor(STAT_MISSILE, NAP_EXP, s_NapExp, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); expActor->spr.hitag = LUMINOUS; //Always full brightness SetOwner(actor, expActor); @@ -10883,14 +10883,14 @@ int DoBloodWorm(DSWActor* actor) xvect = bcos(ang); yvect = bsin(ang); - bx = actor->spr.pos.X; - by = actor->spr.pos.Y; + bx = actor->int_pos().X; + by = actor->int_pos().Y; amt = RANDOM_P2(2048) - 1024; actor->add_int_pos({ MulScale(amt,xvect, 15), MulScale(amt,yvect, 15), 0 }); auto sect = actor->sector(); - updatesectorz(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, §); + updatesectorz(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, §); if (sect) { GlobalSkipZrange = true; @@ -10913,9 +10913,9 @@ int DoSerpMeteor(DSWActor* actor) { int ox, oy, oz; - ox = actor->spr.pos.X; - oy = actor->spr.pos.Y; - oz = actor->spr.pos.Z; + ox = actor->int_pos().X; + oy = actor->int_pos().Y; + oz = actor->int_pos().Z; actor->spr.xrepeat += MISSILEMOVETICS * 2; if (actor->spr.xrepeat > 80) @@ -11002,7 +11002,7 @@ int DoMirv(DSWActor* actor) for (i = 0; i < 2; i++) { auto actorNew = SpawnActor(STAT_MISSILE, MIRV_METEOR, &sg_MirvMeteor[0][0], actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, NORM_ANGLE(actor->spr.ang + angs[i]), 800); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, NORM_ANGLE(actor->spr.ang + angs[i]), 800); actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_MirvMeteor[0]); @@ -11155,7 +11155,7 @@ int DoRing(DSWActor* actor) else z = ActorZOfMiddle(own) + Z(30); - actor->set_int_pos({ own->spr.pos.X, own->spr.pos.Y, z }); + actor->set_int_pos({ own->int_pos().X, own->int_pos().Y, z }); // go out until its time to come back in if (actor->user.Counter2 == false) @@ -11187,19 +11187,19 @@ int DoRing(DSWActor* actor) actor->add_int_pos({ MulScale(actor->user.Dist, bcos(actor->spr.ang), 14), MulScale(actor->user.Dist, bsin(actor->spr.ang), 14), pp ? (actor->user.Dist * (-pp->horizon.horiz.asq16() >> 9)) >> 9 : 0 }); - SetActor(actor, actor->spr.pos); + SetActor(actor, actor->int_pos()); ASSERT(actor->insector()); - getzsofslopeptr(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, &cz, &fz); + getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y, &cz, &fz); // bound the sprite by the sectors ceiling and floor - if (actor->spr.pos.Z > fz) + if (actor->int_pos().Z > fz) { actor->set_int_z(fz); } - if (actor->spr.pos.Z < cz + ActorSizeZ(actor)) + if (actor->int_pos().Z < cz + ActorSizeZ(actor)) { actor->set_int_z(cz + ActorSizeZ(actor)); } @@ -11284,12 +11284,12 @@ int DoSerpRing(DSWActor* actor) return 0; } - int z = actor->spr.pos.Z + actor->spr.zvel; - if (z > own->spr.pos.Z - actor->user.pos.Z) - z = own->spr.pos.Z - actor->user.pos.Z; + int z = actor->int_pos().Z + actor->spr.zvel; + if (z > own->int_pos().Z - actor->user.pos.Z) + z = own->int_pos().Z - actor->user.pos.Z; // move the center with the player - actor->set_int_pos({ own->spr.pos.X, own->spr.pos.Y, z }); + actor->set_int_pos({ own->int_pos().X, own->int_pos().Y, z }); // go out until its time to come back in @@ -11313,19 +11313,19 @@ int DoSerpRing(DSWActor* actor) // put it out there actor->add_int_pos({ MulScale(actor->user.Dist, bcos(actor->user.slide_ang), 14), MulScale(actor->user.Dist, bsin(actor->user.slide_ang), 14), 0 }); - SetActor(actor, actor->spr.pos); + SetActor(actor, actor->int_pos()); ASSERT(actor->insector()); - getzsofslopeptr(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, &cz, &fz); + getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y, &cz, &fz); // bound the sprite by the sectors ceiling and floor - if (actor->spr.pos.Z > fz) + if (actor->int_pos().Z > fz) { actor->set_int_z(fz); } - if (actor->spr.pos.Z < cz + ActorSizeZ(actor)) + if (actor->int_pos().Z < cz + ActorSizeZ(actor)) { actor->set_int_z(cz + ActorSizeZ(actor)); } @@ -11338,20 +11338,20 @@ int DoSerpRing(DSWActor* actor) !(tActor->user.PlayerP->Flags & PF_DEAD)) { actor->user.targetActor = own->user.targetActor; - DISTANCE(actor->spr.pos.X, actor->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y, dist, a,b,c); + DISTANCE(actor->int_pos().X, actor->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y, dist, a,b,c); // if ((dist ok and random ok) OR very few skulls left) if ((dist < 18000 && (RANDOM_P2(2048<<5)>>5) < 16) || own->user.Counter < 4) { auto sect = actor->sector(); - updatesector(actor->spr.pos.X, actor->spr.pos.Y, §); + updatesector(actor->int_pos().X, actor->int_pos().Y, §); // if (valid sector and can see target) if (sect != nullptr && CanSeePlayer(actor)) { extern STATE* sg_SkullJump[]; actor->user.ID = SKULL_R0; - actor->spr.ang = getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y); + actor->spr.ang = getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y); actor->spr.xvel = dist>>5; actor->spr.xvel += (actor->spr.xvel >> 1); actor->spr.xvel += (RANDOM_P2(128<<8)>>8); @@ -11379,10 +11379,10 @@ int InitLavaThrow(DSWActor* actor) short w; // get angle to player and also face player when attacking - actor->spr.ang = nang = getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y); + actor->spr.ang = nang = getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y); - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; nz = ActorZOfTop(actor) + (ActorSizeZ(actor) >> 2); // Spawn a shot @@ -11415,10 +11415,10 @@ int InitLavaThrow(DSWActor* actor) MissileSetPos(actorNew, DoLavaBoulder, 1200); // find the distance to the target (player) - dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(actorNew->int_pos().X, actorNew->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist != 0) - actorNew->user.change.Z = actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->spr.pos.Z)) / dist; + actorNew->user.change.Z = actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->int_pos().Z)) / dist; return 0; } @@ -11431,9 +11431,9 @@ void InitVulcanBoulder(DSWActor* actor) short delta; short vel; - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z - Z(40); + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z - Z(40); if (SP_TAG7(actor)) { @@ -11512,7 +11512,7 @@ int InitSerpRing(DSWActor* actor) for (missiles = 0, ang = ang_start; missiles < max_missiles; ang += ang_diff, missiles++) { - auto actorNew = SpawnActor(STAT_SKIP4, SKULL_SERP, &s_SkullRing[0][0], actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, ang, 0); + auto actorNew = SpawnActor(STAT_SKIP4, SKULL_SERP, &s_SkullRing[0][0], actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, ang, 0); actorNew->spr.xvel = 500; SetOwner(actor, actorNew); @@ -11655,7 +11655,7 @@ int InitEnemyNapalm(DSWActor* actor) for (i = 0; i < SIZ(mp); i++) { auto actorNew = SpawnActor(STAT_MISSILE, FIREBALL1, s_Napalm, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, ActorZOfTop(actor) + (ActorSizeZ(actor) >> 2), actor->spr.ang, NAPALM_VELOCITY); + actor->int_pos().X, actor->int_pos().Y, ActorZOfTop(actor) + (ActorSizeZ(actor) >> 2), actor->spr.ang, NAPALM_VELOCITY); actorNew->spr.hitag = LUMINOUS; //Always full brightness if (i==0) // Only attach sound to first projectile @@ -11691,10 +11691,10 @@ int InitEnemyNapalm(DSWActor* actor) } // find the distance to the target (player) - dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(actorNew->int_pos().X, actorNew->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist != 0) - actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->spr.pos.Z)) / dist; + actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->int_pos().Z)) / dist; actorNew->user.change.X = MOVEx(actorNew->spr.xvel, actorNew->spr.ang); actorNew->user.change.Y = MOVEy(actorNew->spr.xvel, actorNew->spr.ang); @@ -11757,7 +11757,7 @@ int InitEnemyMirv(DSWActor* actor) PlaySound(DIGI_MIRVFIRE, actor, v3df_none); auto actorNew = SpawnActor(STAT_MISSILE, MIRV_METEOR, s_Mirv, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, ActorZOfTop(actor) + (ActorSizeZ(actor) >> 2), actor->spr.ang, MIRV_VELOCITY); + actor->int_pos().X, actor->int_pos().Y, ActorZOfTop(actor) + (ActorSizeZ(actor) >> 2), actor->spr.ang, MIRV_VELOCITY); PlaySound(DIGI_MIRVWIZ, actorNew, v3df_follow); @@ -11781,10 +11781,10 @@ int InitEnemyMirv(DSWActor* actor) MissileSetPos(actorNew, DoMirv, 600); // find the distance to the target (player) - dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(actorNew->int_pos().X, actorNew->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist != 0) - actorNew->user.change.Z = actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->spr.pos.Z)) / dist; + actorNew->user.change.Z = actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->int_pos().Z)) / dist; return 0; } @@ -11842,7 +11842,7 @@ int InitSwordAttack(PLAYER* pp) if (!(itActor->spr.extra & SPRX_PLAYER_OR_ENEMY)) continue; - dist = Distance(pp->pos.X, pp->pos.Y, itActor->spr.pos.X, itActor->spr.pos.Y); + dist = Distance(pp->pos.X, pp->pos.Y, itActor->int_pos().X, itActor->int_pos().Y); reach = 1000; // !JIM! was 800 face = 200; @@ -11851,7 +11851,7 @@ int InitSwordAttack(PLAYER* pp) { if (SpriteOverlapZ(pp->actor, itActor, Z(20))) { - if (FAFcansee(itActor->spr.pos.X, itActor->spr.pos.Y, ActorZOfMiddle(itActor), itActor->sector(), plActor->spr.pos.X, plActor->spr.pos.Y, ActorZOfMiddle(plActor), plActor->sector())) + if (FAFcansee(itActor->int_pos().X, itActor->int_pos().Y, ActorZOfMiddle(itActor), itActor->sector(), plActor->int_pos().X, plActor->int_pos().Y, ActorZOfMiddle(plActor), plActor->sector())) DoDamage(itActor, pp->actor); } } @@ -12010,7 +12010,7 @@ int InitFistAttack(PLAYER* pp) if (!(itActor->spr.extra & SPRX_PLAYER_OR_ENEMY)) continue; - dist = Distance(pp->pos.X, pp->pos.Y, itActor->spr.pos.X, itActor->spr.pos.Y); + dist = Distance(pp->pos.X, pp->pos.Y, itActor->int_pos().X, itActor->int_pos().Y); if (pp->InventoryActive[2]) // Shadow Bombs give you demon fist { @@ -12027,7 +12027,7 @@ int InitFistAttack(PLAYER* pp) { if (SpriteOverlapZ(pp->actor, itActor, Z(20)) || face == 190) { - if (FAFcansee(itActor->spr.pos.X, itActor->spr.pos.Y, ActorZOfMiddle(itActor), itActor->sector(), plActor->spr.pos.X, plActor->spr.pos.Y, ActorZOfMiddle(plActor), plActor->sector())) + if (FAFcansee(itActor->int_pos().X, itActor->int_pos().Y, ActorZOfMiddle(itActor), itActor->sector(), plActor->int_pos().X, plActor->int_pos().Y, ActorZOfMiddle(plActor), plActor->sector())) DoDamage(itActor, plActor); if (face == 190) { @@ -12179,7 +12179,7 @@ int InitSumoNapalm(DSWActor* actor) for (size_t i = 0; i < countof(mp); i++) { auto actorNew = SpawnActor(STAT_MISSILE, FIREBALL1, s_Napalm, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, ActorZOfTop(actor), ang, NAPALM_VELOCITY); + actor->int_pos().X, actor->int_pos().Y, ActorZOfTop(actor), ang, NAPALM_VELOCITY); actorNew->spr.hitag = LUMINOUS; //Always full brightness if (i == 0) // Only attach sound to first projectile @@ -12211,10 +12211,10 @@ int InitSumoNapalm(DSWActor* actor) } // find the distance to the target (player) - dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(actorNew->int_pos().X, actorNew->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist != 0) - actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->spr.pos.Z)) / dist; + actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->int_pos().Z)) / dist; actorNew->user.change.X = MOVEx(actorNew->spr.xvel, actorNew->spr.ang); actorNew->user.change.Y = MOVEy(actorNew->spr.xvel, actorNew->spr.ang); @@ -12242,7 +12242,7 @@ int InitSumoSkull(DSWActor* actor) PlaySound(DIGI_SERPSUMMONHEADS, actor, v3df_none); - auto actorNew = SpawnActor(STAT_ENEMY, SKULL_R0, &s_SkullWait[0][0], actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, ActorZOfMiddle(actor), actor->spr.ang, 0); + auto actorNew = SpawnActor(STAT_ENEMY, SKULL_R0, &s_SkullWait[0][0], actor->sector(), actor->int_pos().X, actor->int_pos().Y, ActorZOfMiddle(actor), actor->spr.ang, 0); actorNew->spr.xvel = 500; SetOwner(actor, actorNew); @@ -12264,7 +12264,7 @@ int InitSumoSkull(DSWActor* actor) actorNew->user.Attrib = &SkullAttrib; DoActorSetSpeed(actor, NORM_SPEED); actorNew->user.Counter = RANDOM_P2(2048); - actorNew->user.pos.Z = actorNew->spr.pos.Z; + actorNew->user.pos.Z = actorNew->int_pos().Z; actorNew->user.Health = 100; // defaults do change the statnum @@ -12299,13 +12299,13 @@ int InitSumoStompAttack(DSWActor* actor) if (!(itActor->spr.extra & SPRX_PLAYER_OR_ENEMY)) continue; - dist = Distance(actor->spr.pos.X, actor->spr.pos.Y, itActor->spr.pos.X, itActor->spr.pos.Y); + dist = Distance(actor->int_pos().X, actor->int_pos().Y, itActor->int_pos().X, itActor->int_pos().Y); reach = 16384; if (dist < CloseRangeDist(itActor, actor, reach)) { - if (FAFcansee(itActor->spr.pos.X, itActor->spr.pos.Y, ActorZOfMiddle(itActor), itActor->sector(), actor->spr.pos.X, actor->spr.pos.Y, ActorZOfMiddle(actor), actor->sector())) + if (FAFcansee(itActor->int_pos().X, itActor->int_pos().Y, ActorZOfMiddle(itActor), itActor->sector(), actor->int_pos().X, actor->int_pos().Y, ActorZOfMiddle(actor), actor->sector())) DoDamage(itActor, actor); } } @@ -12323,7 +12323,7 @@ int InitMiniSumoClap(DSWActor* actor) auto targetActor = actor->user.targetActor; if (!targetActor) return 0; - dist = Distance(actor->spr.pos.X, actor->spr.pos.Y, targetActor->spr.pos.X, targetActor->spr.pos.Y); + dist = Distance(actor->int_pos().X, actor->int_pos().Y, targetActor->int_pos().X, targetActor->int_pos().Y); reach = 10000; @@ -12331,7 +12331,7 @@ int InitMiniSumoClap(DSWActor* actor) { if (SpriteOverlapZ(actor, targetActor, Z(20))) { - if (FAFcansee(targetActor->spr.pos.X, targetActor->spr.pos.Y, ActorZOfMiddle(targetActor), targetActor->sector(), actor->spr.pos.X, actor->spr.pos.Y, ActorZOfMiddle(actor), actor->sector())) + if (FAFcansee(targetActor->int_pos().X, targetActor->int_pos().Y, ActorZOfMiddle(targetActor), targetActor->sector(), actor->int_pos().X, actor->int_pos().Y, ActorZOfMiddle(actor), actor->sector())) { PlaySound(DIGI_CGTHIGHBONE, actor, v3df_follow | v3df_dontpan); DoDamage(targetActor, actor); @@ -12340,7 +12340,7 @@ int InitMiniSumoClap(DSWActor* actor) } else if (dist < CloseRangeDist(targetActor, actor, reach)) { - if (FAFcansee(targetActor->spr.pos.X, targetActor->spr.pos.Y, ActorZOfMiddle(targetActor), targetActor->sector(), actor->spr.pos.X, actor->spr.pos.Y, ActorZOfMiddle(actor), actor->sector())) + if (FAFcansee(targetActor->int_pos().X, targetActor->int_pos().Y, ActorZOfMiddle(targetActor), targetActor->sector(), actor->int_pos().X, actor->int_pos().Y, ActorZOfMiddle(actor), actor->sector())) { PlaySound(DIGI_30MMEXPLODE, actor, v3df_none); SpawnFireballFlames(actor, targetActor); @@ -12370,15 +12370,15 @@ int WeaponAutoAim(DSWActor* actor, DSWActor* mislActor, short ang, bool test) hitActor->user.Flags |= (SPR_TARGETED); hitActor->user.Flags |= (SPR_ATTACKED); - mislActor->spr.ang = NORM_ANGLE(getangle(hitActor->spr.pos.X - mislActor->spr.pos.X, hitActor->spr.pos.Y - mislActor->spr.pos.Y)); - dist = FindDistance2D(mislActor->spr.pos.vec2 - hitActor->spr.pos.vec2); + mislActor->spr.ang = NORM_ANGLE(getangle(hitActor->int_pos().X - mislActor->int_pos().X, hitActor->int_pos().Y - mislActor->int_pos().Y)); + dist = FindDistance2D(mislActor->int_pos().vec2 - hitActor->int_pos().vec2); if (dist != 0) { int tos, diff, siz; tos = ActorZOfTop(hitActor); - diff = mislActor->spr.pos.Z - tos; + diff = mislActor->int_pos().Z - tos; siz = ActorSizeZ(hitActor); // hit_sprite is below @@ -12391,7 +12391,7 @@ int WeaponAutoAim(DSWActor* actor, DSWActor* mislActor, short ang, bool test) else zh = tos + (siz >> 2); - mislActor->spr.zvel = (mislActor->spr.xvel * (zh - mislActor->spr.pos.Z)) / dist; + mislActor->spr.zvel = (mislActor->spr.xvel * (zh - mislActor->int_pos().Z)) / dist; } return 0; } @@ -12406,7 +12406,7 @@ int WeaponAutoAimZvel(DSWActor* actor, DSWActor* missileActor, int *zvel, short #if 0 //formula for leading a player - dist = Distance(actor->spr.pos.X, actor->spr.pos.Y, hp->pos.X, hp->pos.Y); + dist = Distance(actor->int_pos().X, actor->int_pos().Y, hp->pos.X, hp->pos.Y); time_to_target = dist/missileActor->spr.xvel; lead_dist = time_to_target*hp->vel; #endif @@ -12426,15 +12426,15 @@ int WeaponAutoAimZvel(DSWActor* actor, DSWActor* missileActor, int *zvel, short hitActor->user.Flags |= (SPR_TARGETED); hitActor->user.Flags |= (SPR_ATTACKED); - missileActor->spr.ang = NORM_ANGLE(getangle(hitActor->spr.pos.X - missileActor->spr.pos.X, hitActor->spr.pos.Y - missileActor->spr.pos.Y)); - dist = FindDistance2D(missileActor->spr.pos.vec2 - hitActor->spr.pos.vec2); + missileActor->spr.ang = NORM_ANGLE(getangle(hitActor->int_pos().X - missileActor->int_pos().X, hitActor->int_pos().Y - missileActor->int_pos().Y)); + dist = FindDistance2D(missileActor->int_pos().vec2 - hitActor->int_pos().vec2); if (dist != 0) { int tos, diff, siz; tos = ActorZOfTop(hitActor); - diff = missileActor->spr.pos.Z - tos; + diff = missileActor->int_pos().Z - tos; siz = ActorSizeZ(hitActor); // hit_sprite is below @@ -12447,7 +12447,7 @@ int WeaponAutoAimZvel(DSWActor* actor, DSWActor* missileActor, int *zvel, short else zh = tos + (siz >> 2); - *zvel = (missileActor->spr.xvel * (zh - missileActor->spr.pos.Z)) / dist; + *zvel = (missileActor->spr.xvel * (zh - missileActor->int_pos().Z)) / dist; } return 0; } @@ -12470,10 +12470,10 @@ DSWActor* AimHitscanToTarget(DSWActor* actor, int *z, short *ang, int z_ratio) hitActor->user.Flags |= (SPR_TARGETED); hitActor->user.Flags |= (SPR_ATTACKED); - *ang = getangle(hitActor->spr.pos.X - actor->spr.pos.X, hitActor->spr.pos.Y - actor->spr.pos.Y); + *ang = getangle(hitActor->int_pos().X - actor->int_pos().X, hitActor->int_pos().Y - actor->int_pos().Y); // find the distance to the target - dist = ksqrt(SQ(actor->spr.pos.X - hitActor->spr.pos.X) + SQ(actor->spr.pos.Y - hitActor->spr.pos.Y)); + dist = ksqrt(SQ(actor->int_pos().X - hitActor->int_pos().X) + SQ(actor->int_pos().Y - hitActor->int_pos().Y)); if (dist != 0) { @@ -12482,10 +12482,10 @@ DSWActor* AimHitscanToTarget(DSWActor* actor, int *z, short *ang, int z_ratio) xvect = bcos(*ang); yvect = bsin(*ang); - if (hitActor->spr.pos.X - actor->spr.pos.X != 0) - *z = Scale(xvect,zh - *z,hitActor->spr.pos.X - actor->spr.pos.X); - else if (hitActor->spr.pos.Y - actor->spr.pos.Y != 0) - *z = Scale(yvect,zh - *z,hitActor->spr.pos.Y - actor->spr.pos.Y); + if (hitActor->int_pos().X - actor->int_pos().X != 0) + *z = Scale(xvect,zh - *z,hitActor->int_pos().X - actor->int_pos().X); + else if (hitActor->int_pos().Y - actor->int_pos().Y != 0) + *z = Scale(yvect,zh - *z,hitActor->int_pos().Y - actor->int_pos().Y); else *z = 0; @@ -12524,10 +12524,10 @@ DSWActor* WeaponAutoAimHitscan(DSWActor* actor, int *z, short *ang, bool test) picked->user.Flags |= (SPR_TARGETED); picked->user.Flags |= (SPR_ATTACKED); - *ang = NORM_ANGLE(getangle(picked->spr.pos.X - actor->spr.pos.X, picked->spr.pos.Y - actor->spr.pos.Y)); + *ang = NORM_ANGLE(getangle(picked->int_pos().X - actor->int_pos().X, picked->int_pos().Y - actor->int_pos().Y)); // find the distance to the target - dist = ksqrt(SQ(actor->spr.pos.X - picked->spr.pos.X) + SQ(actor->spr.pos.Y - picked->spr.pos.Y)); + dist = ksqrt(SQ(actor->int_pos().X - picked->int_pos().X) + SQ(actor->int_pos().Y - picked->int_pos().Y)); if (dist != 0) { @@ -12536,10 +12536,10 @@ DSWActor* WeaponAutoAimHitscan(DSWActor* actor, int *z, short *ang, bool test) xvect = bcos(*ang); yvect = bsin(*ang); - if (picked->spr.pos.X - actor->spr.pos.X != 0) - *z = Scale(xvect,zh - *z,picked->spr.pos.X - actor->spr.pos.X); - else if (picked->spr.pos.Y - actor->spr.pos.Y != 0) - *z = Scale(yvect,zh - *z,picked->spr.pos.Y - actor->spr.pos.Y); + if (picked->int_pos().X - actor->int_pos().X != 0) + *z = Scale(xvect,zh - *z,picked->int_pos().X - actor->int_pos().X); + else if (picked->int_pos().Y - actor->int_pos().Y != 0) + *z = Scale(yvect,zh - *z,picked->int_pos().Y - actor->int_pos().Y); else *z = 0; } @@ -12557,25 +12557,25 @@ void WeaponHitscanShootFeet(DSWActor* actor, DSWActor* hitActor, int *zvect) int z; short ang; - ang = NORM_ANGLE(getangle(hitActor->spr.pos.X - actor->spr.pos.X, hitActor->spr.pos.Y - actor->spr.pos.Y)); + ang = NORM_ANGLE(getangle(hitActor->int_pos().X - actor->int_pos().X, hitActor->int_pos().Y - actor->int_pos().Y)); // find the distance to the target - dist = ksqrt(SQ(actor->spr.pos.X - hitActor->spr.pos.X) + SQ(actor->spr.pos.Y - hitActor->spr.pos.Y)); + dist = ksqrt(SQ(actor->int_pos().X - hitActor->int_pos().X) + SQ(actor->int_pos().Y - hitActor->int_pos().Y)); if (dist != 0) { zh = ActorZOfBottom(hitActor) + Z(20); - z = actor->spr.pos.Z; + z = actor->int_pos().Z; xvect = bcos(ang); yvect = bsin(ang); - if (hitActor->spr.pos.X - actor->spr.pos.X != 0) - //*z = xvect * ((zh - *z)/(hitActor->spr.pos.X - actor->spr.pos.X)); - *zvect = Scale(xvect,zh - z, hitActor->spr.pos.X - actor->spr.pos.X); - else if (hitActor->spr.pos.Y - actor->spr.pos.Y != 0) - //*z = yvect * ((zh - *z)/(hitActor->spr.pos.Y - actor->spr.pos.Y)); - *zvect = Scale(yvect,zh - z, hitActor->spr.pos.Y - actor->spr.pos.Y); + if (hitActor->int_pos().X - actor->int_pos().X != 0) + //*z = xvect * ((zh - *z)/(hitActor->int_pos().X - actor->int_pos().X)); + *zvect = Scale(xvect,zh - z, hitActor->int_pos().X - actor->int_pos().X); + else if (hitActor->int_pos().Y - actor->int_pos().Y != 0) + //*z = yvect * ((zh - *z)/(hitActor->int_pos().Y - actor->int_pos().Y)); + *zvect = Scale(yvect,zh - z, hitActor->int_pos().Y - actor->int_pos().Y); else *zvect = 0; } @@ -13178,8 +13178,8 @@ int InitZillaRail(DSWActor* actor) // Make sprite shade brighter actor->user.Vis = 128; - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; nz = ActorZOfTop(actor); @@ -13562,11 +13562,11 @@ int InitEnemyNuke(DSWActor* actor) // Make sprite shade brighter actor->user.Vis = 128; - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; // Spawn a shot - nz = actor->spr.pos.Z + Z(40); + nz = actor->int_pos().Z + Z(40); auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R0, &s_Rocket[0][0], actor->sector(), nx, ny, nz, actor->spr.ang, 700); @@ -13654,7 +13654,7 @@ int InitMicro(PLAYER* pp) { picked = ts->actor; - ang = getangle(picked->spr.pos.X - nx, picked->spr.pos.Y - ny); + ang = getangle(picked->int_pos().X - nx, picked->int_pos().Y - ny); ts++; } @@ -13726,12 +13726,12 @@ int InitMicro(PLAYER* pp) if (picked) { - dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, picked->spr.pos.X, picked->spr.pos.Y); + dist = Distance(actorNew->int_pos().X, actorNew->int_pos().Y, picked->int_pos().X, picked->int_pos().Y); if (dist != 0) { int zh; zh = ActorZOfTop(picked) + (ActorSizeZ(picked) >> 2); - actorNew->spr.zvel = (actorNew->spr.xvel * (zh - actorNew->spr.pos.Z)) / dist; + actorNew->spr.zvel = (actorNew->spr.xvel * (zh - actorNew->int_pos().Z)) / dist; } actorNew->user.WpnGoalActor = ts->actor; @@ -13767,10 +13767,10 @@ int InitRipperSlash(DSWActor* actor) if (itActor == actor) break; - if ((unsigned)FindDistance3D(actor->spr.pos - itActor->spr.pos) > itActor->user.Radius + actor->user.Radius) + if ((unsigned)FindDistance3D(actor->int_pos() - itActor->int_pos()) > itActor->user.Radius + actor->user.Radius) continue; - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, a, b, c); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, a, b, c); if (dist < CloseRangeDist(actor, itActor, 600) && FacingRange(itActor, actor,150)) { @@ -13798,7 +13798,7 @@ int InitBunnySlash(DSWActor* actor) if (itActor == actor) break; - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, a, b, c); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, a, b, c); if (dist < CloseRangeDist(actor, itActor, 600) && FacingRange(itActor, actor,150)) { @@ -13827,7 +13827,7 @@ int InitSerpSlash(DSWActor* actor) if (itActor == actor) break; - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, a, b, c); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, a, b, c); if (dist < CloseRangeDist(actor, itActor, 800) && FacingRange(itActor, actor,150)) { @@ -13846,8 +13846,8 @@ bool WallSpriteInsideSprite(DSWActor* wactor, DSWActor* actor) int dax, day; int xsiz, mid_dist; - x1 = wactor->spr.pos.X; - y1 = wactor->spr.pos.Y; + x1 = wactor->int_pos().X; + y1 = wactor->int_pos().Y; xoff = (int) tileLeftOffset(wactor->spr.picnum) + (int) wactor->spr.xoffset; @@ -13870,7 +13870,7 @@ bool WallSpriteInsideSprite(DSWActor* wactor, DSWActor* actor) y1 -= MulScale(day, mid_dist, 16); y2 = y1 + MulScale(day, xsiz, 16); - return !!clipinsideboxline(actor->spr.pos.X, actor->spr.pos.Y, x1, y1, x2, y2, ((int) actor->spr.clipdist) << 2); + return !!clipinsideboxline(actor->int_pos().X, actor->int_pos().Y, x1, y1, x2, y2, ((int) actor->spr.clipdist) << 2); } @@ -13891,12 +13891,12 @@ int DoBladeDamage(DSWActor* actor) if (!(itActor->spr.extra & SPRX_PLAYER_OR_ENEMY)) continue; - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, a, b, c); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, a, b, c); if (dist > 2000) continue; - dist = FindDistance3D(actor->spr.pos - itActor->spr.pos); + dist = FindDistance3D(actor->int_pos() - itActor->int_pos()); if (dist > 2000) continue; @@ -13928,12 +13928,12 @@ int DoStaticFlamesDamage(DSWActor* actor) if (!(itActor->spr.extra & SPRX_PLAYER_OR_ENEMY)) continue; - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, a, b, c); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, a, b, c); if (dist > 2000) continue; - dist = FindDistance3D(actor->spr.pos - itActor->spr.pos); + dist = FindDistance3D(actor->int_pos() - itActor->int_pos()); if (dist > 2000) continue; @@ -13942,7 +13942,7 @@ int DoStaticFlamesDamage(DSWActor* actor) DoDamage(itActor, actor); else if (actor->user.Radius > 200) { - if (FAFcansee(actor->spr.pos.X,actor->spr.pos.Y,ActorZOfMiddle(actor),actor->sector(),itActor->spr.pos.X,itActor->spr.pos.Y,ActorZOfMiddle(itActor),itActor->sector())) + if (FAFcansee(actor->int_pos().X,actor->int_pos().Y,ActorZOfMiddle(actor),actor->sector(),itActor->int_pos().X,itActor->int_pos().Y,ActorZOfMiddle(itActor),itActor->sector())) DoDamage(itActor, actor); } } @@ -13971,7 +13971,7 @@ int InitCoolgBash(DSWActor* actor) if (!(itActor->spr.extra & SPRX_PLAYER_OR_ENEMY)) continue; - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, a, b, c); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, a, b, c); if (dist < CloseRangeDist(actor, itActor, 600) && FacingRange(itActor, actor,150)) { @@ -13999,7 +13999,7 @@ int InitSkelSlash(DSWActor* actor) if (itActor == actor) break; - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, a, b, c); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, a, b, c); if (dist < CloseRangeDist(actor, itActor, 600) && FacingRange(itActor, actor,150)) { @@ -14027,7 +14027,7 @@ int InitGoroChop(DSWActor* actor) if (itActor == actor) break; - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, a, b, c); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, a, b, c); if (dist < CloseRangeDist(actor, itActor, 700) && FacingRange(itActor, actor,150)) { @@ -14064,10 +14064,10 @@ int InitSerpSpell(DSWActor* actor) for (i = 0; i < 2; i++) { - actor->spr.ang = getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y); + actor->spr.ang = getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y); auto actorNew = SpawnActor(STAT_MISSILE, SERP_METEOR, &sg_SerpMeteor[0][0], actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 1500); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 1500); actorNew->set_int_z(ActorZOfTop(actor)); @@ -14097,9 +14097,9 @@ int InitSerpSpell(DSWActor* actor) actorNew->spr.ang = NORM_ANGLE(actorNew->spr.ang - lat_ang[i]); // find the distance to the target (player) - dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(actorNew->int_pos().X, actorNew->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist != 0) - actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->spr.pos.Z)) / dist; + actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->int_pos().Z)) / dist; actorNew->spr.ang = NORM_ANGLE(actorNew->spr.ang + delta_ang[i]); @@ -14123,7 +14123,7 @@ int SpawnDemonFist(DSWActor* actor) return -1; auto expActor = SpawnActor(STAT_MISSILE, 0, s_TeleportEffect, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, ActorZOfMiddle(actor), actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, ActorZOfMiddle(actor), actor->spr.ang, 0); expActor->spr.hitag = LUMINOUS; //Always full brightness expActor->spr.shade = -40; @@ -14162,10 +14162,10 @@ int InitSerpMonstSpell(DSWActor* actor) for (i = 0; i < 1; i++) { - actor->spr.ang = getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y); + actor->spr.ang = getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y); auto actorNew = SpawnActor(STAT_MISSILE, SERP_METEOR, &sg_SerpMeteor[0][0], actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 500); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 500); actorNew->user.spal = actorNew->spr.pal = 25; // Bright Red actorNew->set_int_z(ActorZOfTop(actor)); @@ -14195,9 +14195,9 @@ int InitSerpMonstSpell(DSWActor* actor) actorNew->spr.ang = NORM_ANGLE(actorNew->spr.ang - lat_ang[i]); // find the distance to the target (player) - dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(actorNew->int_pos().X, actorNew->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist != 0) - actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->spr.pos.Z)) / dist; + actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->int_pos().Z)) / dist; actorNew->spr.ang = NORM_ANGLE(actorNew->spr.ang + delta_ang[i]); @@ -14231,11 +14231,11 @@ int InitEnemyRocket(DSWActor* actor) PlaySound(DIGI_NINJARIOTATTACK, actor, v3df_none); // get angle to player and also face player when attacking - actor->spr.ang = nang = getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y); + actor->spr.ang = nang = getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y); - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z - (ActorSizeZ(actor) >> 1)-Z(8); + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z - (ActorSizeZ(actor) >> 1)-Z(8); // Spawn a shot auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R2, &s_Rocket[0][0], actor->sector(), @@ -14274,10 +14274,10 @@ int InitEnemyRocket(DSWActor* actor) MissileSetPos(actorNew, DoBoltThinMan, 400); // find the distance to the target (player) - dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(actorNew->int_pos().X, actorNew->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist != 0) - actorNew->user.change.Z = actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->spr.pos.Z)) / dist; + actorNew->user.change.Z = actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->int_pos().Z)) / dist; return 0; } @@ -14306,15 +14306,15 @@ int InitEnemyRail(DSWActor* actor) PlaySound(DIGI_RAILFIRE, actor, v3df_dontpan|v3df_doppler); // get angle to player and also face player when attacking - actor->spr.ang = nang = getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y); + actor->spr.ang = nang = getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y); // add a bit of randomness if (RANDOM_P2(1024) < 512) actor->spr.ang = NORM_ANGLE(actor->spr.ang + RANDOM_P2(128) - 64); - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z - (ActorSizeZ(actor) >> 1)-Z(8); + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z - (ActorSizeZ(actor) >> 1)-Z(8); // Spawn a shot // Inserting and setting up variables @@ -14355,10 +14355,10 @@ int InitEnemyRail(DSWActor* actor) } // find the distance to the target (player) - dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(actorNew->int_pos().X, actorNew->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist != 0) - actorNew->user.change.Z = actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->spr.pos.Z)) / dist; + actorNew->user.change.Z = actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->int_pos().Z)) / dist; return 0; } @@ -14382,13 +14382,13 @@ int InitZillaRocket(DSWActor* actor) PlaySound(DIGI_NINJARIOTATTACK, actor, v3df_none); // get angle to player and also face player when attacking - actor->spr.ang = nang = getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y); + actor->spr.ang = nang = getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y); for (i = 0; i < (int)SIZ(mp); i++) { - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z - (ActorSizeZ(actor) >> 1)-Z(8); + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z - (ActorSizeZ(actor) >> 1)-Z(8); // Spawn a shot auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R2, &s_Rocket[0][0], actor->sector(), @@ -14430,10 +14430,10 @@ int InitZillaRocket(DSWActor* actor) MissileSetPos(actorNew, DoBoltThinMan, mp[i].dist_out); // find the distance to the target (player) - dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(actorNew->int_pos().X, actorNew->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist != 0) - actorNew->user.change.Z = actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->spr.pos.Z)) / dist; + actorNew->user.change.Z = actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->int_pos().Z)) / dist; } return 0; @@ -14444,10 +14444,10 @@ int InitEnemyStar(DSWActor* actor) int nx, ny, nz, dist, nang; // get angle to player and also face player when attacking - actor->spr.ang = nang = NORM_ANGLE(getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y)); + actor->spr.ang = nang = NORM_ANGLE(getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y)); - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; nz = ActorZOfMiddle(actor); // Spawn a shot @@ -14469,10 +14469,10 @@ int InitEnemyStar(DSWActor* actor) MissileSetPos(actorNew, DoStar, 400); // find the distance to the target (player) - dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(actorNew->int_pos().X, actorNew->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist != 0) - actorNew->user.change.Z = actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->spr.pos.Z)) / dist; + actorNew->user.change.Z = actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->int_pos().Z)) / dist; PlaySound(DIGI_STAR, actor, v3df_none); return 0; @@ -14483,10 +14483,10 @@ int InitEnemyCrossbow(DSWActor* actor) int nx, ny, nz, dist, nang; // get angle to player and also face player when attacking - actor->spr.ang = nang = NORM_ANGLE(getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y)); + actor->spr.ang = nang = NORM_ANGLE(getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y)); - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; nz = ActorZOfMiddle(actor)-Z(14); // Spawn a shot @@ -14513,10 +14513,10 @@ int InitEnemyCrossbow(DSWActor* actor) MissileSetPos(actorNew, DoStar, 400); // find the distance to the target (player) - dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(actorNew->int_pos().X, actorNew->int_pos().Y, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist != 0) - actorNew->user.change.Z = actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->spr.pos.Z)) / dist; + actorNew->user.change.Z = actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - actorNew->int_pos().Z)) / dist; PlaySound(DIGI_STAR, actor, v3df_none); @@ -14531,11 +14531,11 @@ int InitSkelSpell(DSWActor* actor) PlaySound(DIGI_SPELEC, actor, v3df_none); // get angle to player and also face player when attacking - actor->spr.ang = nang = NORM_ANGLE(getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y)); + actor->spr.ang = nang = NORM_ANGLE(getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y)); - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z - (ActorSizeZ(actor) >> 1); + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z - (ActorSizeZ(actor) >> 1); // Spawn a shot auto actorNew = SpawnActor(STAT_MISSILE, ELECTRO_ENEMY, s_Electro, actor->sector(), @@ -14551,7 +14551,7 @@ int InitSkelSpell(DSWActor* actor) actorNew->spr.cstat |= (CSTAT_SPRITE_YCENTER); // find the distance to the target (player) - dist = Distance(nx, ny, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(nx, ny, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist != 0) actorNew->spr.zvel = (actorNew->spr.xvel * (ActorUpperZ(actor->user.targetActor) - nz)) / dist; @@ -14571,12 +14571,12 @@ int InitCoolgFire(DSWActor* actor) int nx, ny, nz, dist, nang; // get angle to player and also face player when attacking - actor->spr.ang = nang = NORM_ANGLE(getangle(actor->user.targetActor->spr.pos.X - actor->spr.pos.X, actor->user.targetActor->spr.pos.Y - actor->spr.pos.Y)); + actor->spr.ang = nang = NORM_ANGLE(getangle(actor->user.targetActor->int_pos().X - actor->int_pos().X, actor->user.targetActor->int_pos().Y - actor->int_pos().Y)); - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; - nz = actor->spr.pos.Z - Z(16); + nz = actor->int_pos().Z - Z(16); // Spawn a shot // Inserting and setting up variables @@ -14604,7 +14604,7 @@ int InitCoolgFire(DSWActor* actor) PlaySound(DIGI_MAGIC1, actorNew, v3df_follow|v3df_doppler); // find the distance to the target (player) - dist = Distance(nx, ny, actor->user.targetActor->spr.pos.X, actor->user.targetActor->spr.pos.Y); + dist = Distance(nx, ny, actor->user.targetActor->int_pos().X, actor->user.targetActor->int_pos().Y); if (dist != 0) // (velocity * difference between the target and the throwing star) / @@ -14628,7 +14628,7 @@ int DoCoolgDrip(DSWActor* actor) actor->user.Counter += 220; actor->add_int_z(actor->user.Counter); - if (actor->spr.pos.Z > actor->user.loz - actor->user.floor_dist) + if (actor->int_pos().Z > actor->user.loz - actor->user.floor_dist) { actor->set_int_z(actor->user.loz - actor->user.floor_dist); actor->spr.yrepeat = actor->spr.xrepeat = 32; @@ -14644,9 +14644,9 @@ int InitCoolgDrip(DSWActor* actor) int nx, ny, nz; short w; - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z; auto actorNew = SpawnActor(STAT_MISSILE, COOLG_DRIP, s_CoolgDrip, actor->sector(), nx, ny, nz, actor->spr.ang, 0); @@ -14683,9 +14683,9 @@ int GenerateDrips(DSWActor* actor) return 1; } - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z; auto actorNew = SpawnActor(STAT_SHRAP, COOLG_DRIP, s_CoolgDrip, actor->sector(), nx, ny, nz, actor->spr.ang, 0); @@ -14722,10 +14722,10 @@ int InitEelFire(DSWActor* actor) if (itActor != actor->user.targetActor) continue; - if ((unsigned)FindDistance3D(actor->spr.pos - itActor->spr.pos) > itActor->user.Radius + actor->user.Radius) + if ((unsigned)FindDistance3D(actor->int_pos() - itActor->int_pos()) > itActor->user.Radius + actor->user.Radius) continue; - DISTANCE(itActor->spr.pos.X, itActor->spr.pos.Y, actor->spr.pos.X, actor->spr.pos.Y, dist, a, b, c); + DISTANCE(itActor->int_pos().X, itActor->int_pos().Y, actor->int_pos().X, actor->int_pos().Y, dist, a, b, c); if (dist < CloseRangeDist(actor, itActor, 600) && FacingRange(itActor, actor,150)) { @@ -14747,9 +14747,9 @@ void InitFireballTrap(DSWActor* actor) PlaySound(DIGI_FIREBALL1, actor, v3df_none); - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z - ActorSizeZ(actor); + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z - ActorSizeZ(actor); // Spawn a shot auto actorNew = SpawnActor(STAT_MISSILE, FIREBALL, s_Fireball, actor->sector(), nx, ny, nz, @@ -14777,9 +14777,9 @@ void InitBoltTrap(DSWActor* actor) PlaySound(DIGI_RIOTFIRE, actor, v3df_none); - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z - ActorSizeZ(actor); + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z - ActorSizeZ(actor); // Spawn a shot auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R0, &s_Rocket[0][0], actor->sector(), nx, ny, nz, @@ -14806,8 +14806,8 @@ void InitSpearTrap(DSWActor* actor) { int nx, ny, nz; - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; nz = ActorZOfMiddle(actor); // Spawn a shot @@ -14923,9 +14923,9 @@ int InitTracerTurret(DSWActor* actor, DSWActor* Operator, fixed_t q16horiz) { int nx, ny, nz; - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z + -MulScale(q16horiz, 72, 16); + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z + -MulScale(q16horiz, 72, 16); // Spawn a shot // Inserting and setting up variables @@ -14970,9 +14970,9 @@ int InitTracerAutoTurret(DSWActor* actor, int xchange, int ychange, int zchange) { int nx, ny, nz; - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z; // Spawn a shot // Inserting and setting up variables @@ -15131,7 +15131,7 @@ bool HitscanSpriteAdjust(DSWActor* actor, walltype* hit_wall) auto sect = actor->sector(); Collision coll; - auto pos = actor->spr.pos; + auto pos = actor->int_pos(); clipmove(pos, §, xvect, yvect, 4, 4 << 8, 4 << 8, CLIPMASK_MISSILE, coll); actor->set_int_pos(pos); @@ -15353,7 +15353,7 @@ int InitTankShell(DSWActor* actor, PLAYER* pp) PlaySound(DIGI_CANNON, pp, v3df_dontpan|v3df_doppler); auto actorNew = SpawnActor(STAT_MISSILE, 0, s_TankShell, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, TANK_SHELL_VELOCITY); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, TANK_SHELL_VELOCITY); SetOwner(pp->actor, actorNew); actorNew->spr.yrepeat = 8; @@ -15399,8 +15399,8 @@ int InitTurretMicro(DSWActor* actor, PLAYER* pp) if (SW_SHAREWARE) return false; // JBF: verify - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; const int MAX_TURRET_MICRO = 10; @@ -15415,7 +15415,7 @@ int InitTurretMicro(DSWActor* actor, PLAYER* pp) { picked = ts->actor; - ang = getangle(picked->spr.pos.X - nx, picked->spr.pos.Y - ny); + ang = getangle(picked->int_pos().X - nx, picked->int_pos().Y - ny); ts++; } @@ -15425,7 +15425,7 @@ int InitTurretMicro(DSWActor* actor, PLAYER* pp) ang = actor->spr.ang; } - nz = actor->spr.pos.Z; + nz = actor->int_pos().Z; nz += Z(RandomRange(20)) - Z(10); // Spawn a shot @@ -15461,12 +15461,12 @@ int InitTurretMicro(DSWActor* actor, PLAYER* pp) if (picked) { - dist = Distance(actorNew->spr.pos.X, actorNew->spr.pos.Y, picked->spr.pos.X, picked->spr.pos.Y); + dist = Distance(actorNew->int_pos().X, actorNew->int_pos().Y, picked->int_pos().X, picked->int_pos().Y); if (dist != 0) { int zh; zh = ActorZOfTop(picked) + (ActorSizeZ(picked) >> 2); - actorNew->spr.zvel = (actorNew->spr.xvel * (zh - actorNew->spr.pos.Z)) / dist; + actorNew->spr.zvel = (actorNew->spr.xvel * (zh - actorNew->int_pos().Z)) / dist; } actorNew->user.WpnGoalActor = ts->actor; @@ -15492,7 +15492,7 @@ int InitTurretRocket(DSWActor* actor, PLAYER* pp) if (SW_SHAREWARE) return false; // JBF: verify auto actorNew = SpawnActor(STAT_MISSILE, BOLT_THINMAN_R0, &s_Rocket[0][0], actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, ROCKET_VELOCITY); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, ROCKET_VELOCITY); SetOwner(pp->actor, actorNew); actorNew->spr.yrepeat = 40; @@ -15529,7 +15529,7 @@ int InitTurretFireball(DSWActor* actor, PLAYER* pp) if (SW_SHAREWARE) return false; // JBF: verify auto actorNew = SpawnActor(STAT_MISSILE, FIREBALL, s_Fireball, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, FIREBALL_VELOCITY); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, FIREBALL_VELOCITY); SetOwner(pp->actor, actorNew); actorNew->spr.yrepeat = 40; @@ -15571,9 +15571,9 @@ int InitTurretRail(DSWActor* actor, PLAYER* pp) if (!pp->insector()) return 0; - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z; // Spawn a shot // Inserting and setting up variables @@ -15620,9 +15620,9 @@ int InitTurretLaser(DSWActor* actor, PLAYER* pp) if (!pp->insector()) return 0; - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z; // Spawn a shot // Inserting and setting up variables @@ -15669,9 +15669,9 @@ int InitSobjMachineGun(DSWActor* actor, PLAYER* pp) PlaySound(DIGI_BOATFIRE, pp, v3df_dontpan|v3df_doppler); - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - daz = nz = actor->spr.pos.Z; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + daz = nz = actor->int_pos().Z; if (RANDOM_P2(1024) < 200) InitTracerTurret(actor, pp->actor, pp->horizon.horiz.asq16()); @@ -16021,9 +16021,9 @@ int InitTurretMgun(SECTOR_OBJECT* sop) if (!actor) continue; if (actor->spr.statnum == STAT_SO_SHOOT_POINT) { - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - daz = nz = actor->spr.pos.Z; + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + daz = nz = actor->int_pos().Z; // if its not operated by a player if (sop->Animator) @@ -16178,7 +16178,7 @@ int InitEnemyUzi(DSWActor* actor) // Make sprite shade brighter actor->user.Vis = 128; - SetActorZ(actor, actor->spr.pos); + SetActorZ(actor, actor->int_pos()); if (actor->user.ID == ZILLA_RUN_R0) { @@ -16190,7 +16190,7 @@ int InitEnemyUzi(DSWActor* actor) zh = ActorSizeZ(actor); zh -= (zh >> 2); } - daz = actor->spr.pos.Z - zh; + daz = actor->int_pos().Z - zh; if (AimHitscanToTarget(actor, &daz, &daang, 200) != nullptr) { @@ -16212,7 +16212,7 @@ int InitEnemyUzi(DSWActor* actor) daang = NORM_ANGLE(actor->spr.ang + (RANDOM_P2(128)) - 64); } - FAFhitscan(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - zh, actor->sector(), // Start position + FAFhitscan(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - zh, actor->sector(), // Start position bcos(daang), // X vector of 3D ang bsin(daang), // Y vector of 3D ang daz, // Z vector of 3D ang @@ -16418,9 +16418,9 @@ int InitSpriteGrenade(DSWActor* actor) PlaySound(DIGI_30MMFIRE, actor, v3df_dontpan|v3df_doppler); - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z - Z(40); + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z - Z(40); // Spawn a shot // Inserting and setting up variables @@ -16534,9 +16534,9 @@ int InitEnemyMine(DSWActor* actor) PlaySound(DIGI_MINETHROW, actor, v3df_dontpan|v3df_doppler); - nx = actor->spr.pos.X; - ny = actor->spr.pos.Y; - nz = actor->spr.pos.Z - Z(40); + nx = actor->int_pos().X; + ny = actor->int_pos().Y; + nz = actor->int_pos().Z - Z(40); // Spawn a shot // Inserting and setting up variables @@ -16683,10 +16683,10 @@ int InitEnemyFireball(DSWActor* actor) PlaySound(DIGI_FIREBALL1, actor, v3df_none); // get angle to player and also face player when attacking - actor->spr.ang = NORM_ANGLE(getangle(targetActor->spr.pos.X - actor->spr.pos.X, targetActor->spr.pos.Y - actor->spr.pos.Y)); + actor->spr.ang = NORM_ANGLE(getangle(targetActor->int_pos().X - actor->int_pos().X, targetActor->int_pos().Y - actor->int_pos().Y)); size_z = Z(ActorSizeY(actor)); - nz = actor->spr.pos.Z - size_z + (size_z >> 2) + (size_z >> 3) + Z(4); + nz = actor->int_pos().Z - size_z + (size_z >> 2) + (size_z >> 3) + Z(4); xchange = MOVEx(GORO_FIREBALL_VELOCITY, actor->spr.ang); ychange = MOVEy(GORO_FIREBALL_VELOCITY, actor->spr.ang); @@ -16695,7 +16695,7 @@ int InitEnemyFireball(DSWActor* actor) for (i = 0; i < 2; i++) { auto actorNew = SpawnActor(STAT_MISSILE, GORO_FIREBALL, s_Fireball, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, nz, actor->spr.ang, GORO_FIREBALL_VELOCITY); + actor->int_pos().X, actor->int_pos().Y, nz, actor->spr.ang, GORO_FIREBALL_VELOCITY); actorNew->spr.hitag = LUMINOUS; //Always full brightness actorNew->spr.xrepeat = 20; @@ -16718,15 +16718,15 @@ int InitEnemyFireball(DSWActor* actor) if (i == 0) { // find the distance to the target (player) - dist = ksqrt(SQ(actorNew->spr.pos.X - targetActor->spr.pos.X) + SQ(actorNew->spr.pos.Y - targetActor->spr.pos.Y)); + dist = ksqrt(SQ(actorNew->int_pos().X - targetActor->int_pos().X) + SQ(actorNew->int_pos().Y - targetActor->int_pos().Y)); // Determine target Z value - targ_z = targetActor->spr.pos.Z - (Z(ActorSizeY(actor)) >> 1); + targ_z = targetActor->int_pos().Z - (Z(ActorSizeY(actor)) >> 1); // (velocity * difference between the target and the throwing star) / // distance if (dist != 0) - actorNew->user.change.Z = actorNew->spr.zvel = (GORO_FIREBALL_VELOCITY * (targ_z - actorNew->spr.pos.Z)) / dist; + actorNew->user.change.Z = actorNew->spr.zvel = (GORO_FIREBALL_VELOCITY * (targ_z - actorNew->int_pos().Z)) / dist; // back up first one lastvel = actorNew->spr.zvel; @@ -16791,12 +16791,12 @@ bool WarpToUnderwater(sectortype** psectu, int *x, int *y, int *z) ASSERT(Found); // get the offset from the sprite - sx = overActor->spr.pos.X - *x; - sy = overActor->spr.pos.Y - *y; + sx = overActor->int_pos().X - *x; + sy = overActor->int_pos().Y - *y; // update to the new x y position - *x = underActor->spr.pos.X - sx; - *y = underActor->spr.pos.Y - sy; + *x = underActor->int_pos().X - sx; + *y = underActor->int_pos().Y - sy; auto over = overActor->sector(); auto under = underActor->sector(); @@ -16860,12 +16860,12 @@ bool WarpToSurface(sectortype** psectu, int *x, int *y, int *z) ASSERT(Found); // get the offset from the under sprite - sx = underActor->spr.pos.X - *x; - sy = underActor->spr.pos.Y - *y; + sx = underActor->int_pos().X - *x; + sy = underActor->int_pos().Y - *y; // update to the new x y position - *x = overActor->spr.pos.X - sx; - *y = overActor->spr.pos.Y - sy; + *x = overActor->int_pos().X - sx; + *y = overActor->int_pos().Y - sy; auto over = overActor->sector(); auto under = underActor->sector(); @@ -16926,16 +16926,16 @@ bool SpriteWarpToUnderwater(DSWActor* actor) ASSERT(Found); // get the offset from the sprite - sx = overActor->spr.pos.X - actor->spr.pos.X; - sy = overActor->spr.pos.Y - actor->spr.pos.Y; + sx = overActor->int_pos().X - actor->int_pos().X; + sy = overActor->int_pos().Y - actor->int_pos().Y; // update to the new x y position - actor->set_int_xy(underActor->spr.pos.X - sx, underActor->spr.pos.Y - sy); + actor->set_int_xy(underActor->int_pos().X - sx, underActor->int_pos().Y - sy); auto over = overActor->sector(); auto under = underActor->sector(); - if (GetOverlapSector(actor->spr.pos.X, actor->spr.pos.Y, &over, &under) == 2) + if (GetOverlapSector(actor->int_pos().X, actor->int_pos().Y, &over, &under) == 2) { ChangeActorSect(actor, under); } @@ -16999,16 +16999,16 @@ bool SpriteWarpToSurface(DSWActor* actor) if (!Found) return false; // get the offset from the under sprite - sx = underActor->spr.pos.X - actor->spr.pos.X; - sy = underActor->spr.pos.Y - actor->spr.pos.Y; + sx = underActor->int_pos().X - actor->int_pos().X; + sy = underActor->int_pos().Y - actor->int_pos().Y; // update to the new x y position - actor->set_int_xy(overActor->spr.pos.X - sx, overActor->spr.pos.Y - sy); + actor->set_int_xy(overActor->int_pos().X - sx, overActor->int_pos().Y - sy); auto over = overActor->sector(); auto under = underActor->sector(); - if (GetOverlapSector(actor->spr.pos.X, actor->spr.pos.Y, &over, &under)) + if (GetOverlapSector(actor->int_pos().X, actor->int_pos().Y, &over, &under)) { ChangeActorSect(actor, over); } @@ -17045,7 +17045,7 @@ int SpawnSplash(DSWActor* actor) DoActorZrange(actor); MissileWaterAdjust(actor); - auto actorNew = SpawnActor(STAT_MISSILE, SPLASH, s_Splash, actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->user.loz, actor->spr.ang, 0); + auto actorNew = SpawnActor(STAT_MISSILE, SPLASH, s_Splash, actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->user.loz, actor->spr.ang, 0); if (sectu && (sectp->extra & SECTFX_LIQUID_MASK) == SECTFX_LIQUID_LAVA) actorNew->user.spal = actorNew->spr.pal = PALETTE_RED_LIGHTING; @@ -17099,11 +17099,11 @@ bool MissileHitDiveArea(DSWActor* actor) if (SpriteInDiveArea(actor)) { // make sure you are close to the floor - if (actor->spr.pos.Z < ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z < ((actor->user.hiz + actor->user.loz) >> 1)) return false; // Check added by Jim because of sprite bridge over water - if (actor->spr.pos.Z < (hit_sect->floorz-Z(20))) + if (actor->int_pos().Z < (hit_sect->floorz-Z(20))) return false; actor->user.Flags |= (SPR_UNDERWATER); @@ -17116,7 +17116,7 @@ bool MissileHitDiveArea(DSWActor* actor) else if (SpriteInUnderwaterArea(actor)) { // make sure you are close to the ceiling - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) return false; actor->user.Flags &= ~(SPR_UNDERWATER); @@ -17137,7 +17137,7 @@ DSWActor* SpawnBubble(DSWActor* actor) if (Prediction) return nullptr; - auto actorNew = SpawnActor(STAT_MISSILE, BUBBLE, s_Bubble, actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + auto actorNew = SpawnActor(STAT_MISSILE, BUBBLE, s_Bubble, actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); actorNew->spr.xrepeat = 8 + (RANDOM_P2(8 << 8) >> 8); actorNew->spr.yrepeat = actorNew->spr.xrepeat; @@ -17174,7 +17174,7 @@ int SpawnVehicleSmoke(DSWActor* actor) return false; auto actorNew = SpawnActor(STAT_MISSILE, PUFF, s_VehicleSmoke, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - RANDOM_P2(Z(8)), actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - RANDOM_P2(Z(8)), actor->spr.ang, 0); actorNew->user.WaitTics = 1*120; actorNew->spr.shade = -40; @@ -17200,7 +17200,7 @@ int SpawnVehicleSmoke(DSWActor* actor) int SpawnSmokePuff(DSWActor* actor) { auto actorNew = SpawnActor(STAT_MISSILE, PUFF, s_WaterSmoke, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - RANDOM_P2(Z(8)), actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - RANDOM_P2(Z(8)), actor->spr.ang, 0); actorNew->user.WaitTics = 1*120; actorNew->spr.shade = -40; @@ -17245,7 +17245,7 @@ int DoBubble(DSWActor* actor) actor->spr.xrepeat = actor->user.pos.X + (RANDOM_P2(8 << 8) >> 8) - 4; actor->spr.yrepeat = actor->user.pos.Y + (RANDOM_P2(8 << 8) >> 8) - 4; - if (actor->spr.pos.Z < actor->sector()->ceilingz) + if (actor->int_pos().Z < actor->sector()->ceilingz) { if (SectorIsUnderwaterArea(actor->user.hi_sectp)) { @@ -17398,7 +17398,7 @@ int QueueStar(DSWActor* actor) { // move old star to new stars place auto osp = StarQueue[StarQueueHead]; - osp->set_int_pos(actor->spr.pos); + osp->set_int_pos(actor->int_pos()); ChangeActorSect(osp, actor->sector()); KillActor(actor); actor = osp; @@ -17452,7 +17452,7 @@ void QueueHole(sectortype* hit_sect, walltype* hit_wall, int hit_x, int hit_y, i auto sect = spawnedActor->sector(); Collision coll; - auto pos = spawnedActor->spr.pos; + auto pos = spawnedActor->int_pos(); clipmove(pos, §, nx, ny, 0, 0, 0, CLIPMASK_MISSILE, coll, 1); spawnedActor->set_int_pos(pos); @@ -17494,7 +17494,7 @@ int QueueFloorBlood(DSWActor* actor) KillActor(FloorBloodQueue[FloorBloodQueueHead]); FloorBloodQueue[FloorBloodQueueHead] = spawnedActor = - SpawnActor(STAT_SKIP4, FLOORBLOOD1, s_FloorBlood1, actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + SpawnActor(STAT_SKIP4, FLOORBLOOD1, s_FloorBlood1, actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); FloorBloodQueueHead = (FloorBloodQueueHead+1) & (MAX_FLOORBLOOD_QUEUE-1); @@ -17511,7 +17511,7 @@ int QueueFloorBlood(DSWActor* actor) spawnedActor->spr.extra = 0; spawnedActor->spr.clipdist = 0; spawnedActor->spr.xoffset = spawnedActor->spr.yoffset = 0; - spawnedActor->set_int_pos(actor->spr.pos); + spawnedActor->set_int_pos(actor->int_pos()); spawnedActor->add_int_z(Z(1)); spawnedActor->spr.ang = RANDOM_P2(2048); // Just make it any old angle spawnedActor->spr.shade -= 5; // Brighten it up just a bit @@ -17588,13 +17588,13 @@ int QueueFootPrint(DSWActor* actor) if (rnd_num > 683) FloorBloodQueue[FloorBloodQueueHead] = spawnedActor = - SpawnActor(STAT_WALLBLOOD_QUEUE, FOOTPRINT1, s_FootPrint1, actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + SpawnActor(STAT_WALLBLOOD_QUEUE, FOOTPRINT1, s_FootPrint1, actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); else if (rnd_num > 342) FloorBloodQueue[FloorBloodQueueHead] = spawnedActor = - SpawnActor(STAT_WALLBLOOD_QUEUE, FOOTPRINT2, s_FootPrint2, actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + SpawnActor(STAT_WALLBLOOD_QUEUE, FOOTPRINT2, s_FootPrint2, actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); else FloorBloodQueue[FloorBloodQueueHead] = spawnedActor = - SpawnActor(STAT_WALLBLOOD_QUEUE, FOOTPRINT3, s_FootPrint3, actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + SpawnActor(STAT_WALLBLOOD_QUEUE, FOOTPRINT3, s_FootPrint3, actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); FloorBloodQueueHead = (FloorBloodQueueHead+1) & (MAX_FLOORBLOOD_QUEUE-1); @@ -17612,7 +17612,7 @@ int QueueFootPrint(DSWActor* actor) spawnedActor->spr.extra = 0; spawnedActor->spr.clipdist = 0; spawnedActor->spr.xoffset = spawnedActor->spr.yoffset = 0; - spawnedActor->set_int_pos(actor->spr.pos); + spawnedActor->set_int_pos(actor->int_pos()); spawnedActor->spr.ang = actor->spr.ang; spawnedActor->user.Flags &= ~(SPR_SHADOW); switch (FootMode) @@ -17684,7 +17684,7 @@ DSWActor* QueueWallBlood(DSWActor* actor, short ang) daz -= (Z(128)<<2); dang = (ang+(RANDOM_P2(128<<5) >> 5)) - (64); - FAFhitscan(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - Z(30), actor->sector(), // Start position + FAFhitscan(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - Z(30), actor->sector(), // Start position bcos(dang), // X vector of 3D ang bsin(dang), // Y vector of 3D ang daz, // Z vector of 3D ang @@ -17694,7 +17694,7 @@ DSWActor* QueueWallBlood(DSWActor* actor, short ang) return nullptr; const int WALLBLOOD_DIST_MAX = 2500; - if (Distance(hit.hitpos.X, hit.hitpos.Y, actor->spr.pos.X, actor->spr.pos.Y) > WALLBLOOD_DIST_MAX) + if (Distance(hit.hitpos.X, hit.hitpos.Y, actor->int_pos().X, actor->int_pos().Y) > WALLBLOOD_DIST_MAX) return nullptr; // hit a sprite? @@ -17765,7 +17765,7 @@ DSWActor* QueueWallBlood(DSWActor* actor, short ang) auto sect = spawnedActor->sector(); Collision coll; - auto pos = spawnedActor->spr.pos; + auto pos = spawnedActor->int_pos(); clipmove(pos, §, nx, ny, 0, 0, 0, CLIPMASK_MISSILE, coll, 1); spawnedActor->set_int_pos(pos); @@ -17814,7 +17814,7 @@ int DoFloorBlood(DSWActor* actor) { pp = &Player[pnum]; - DISTANCE(actor->spr.pos.X, actor->spr.pos.Y, pp->pos.X, pp->pos.Y, dist, a, b, c); + DISTANCE(actor->int_pos().X, actor->int_pos().Y, pp->pos.X, pp->pos.Y, dist, a, b, c); if (dist < near_dist) { @@ -17885,7 +17885,7 @@ void QueueGeneric(DSWActor* actor, short pic) { // move old sprite to new sprite's place auto osp = GenericQueue[GenericQueueHead]; - osp->set_int_pos(actor->spr.pos); + osp->set_int_pos(actor->int_pos()); ChangeActorSect(osp, actor->sector()); KillActor(actor); actor = GenericQueue[GenericQueueHead]; @@ -18012,7 +18012,7 @@ int DoShrapVelocity(DSWActor* actor) else { // hit a sector - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) { // hit a floor if (!(actor->user.Flags & SPR_BOUNCE)) @@ -18041,7 +18041,7 @@ int DoShrapVelocity(DSWActor* actor) else { // hit floor - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) { actor->set_int_z(actor->user.loz); if (actor->user.Flags & (SPR_UNDERWATER)) @@ -18314,7 +18314,7 @@ int DoItemFly(DSWActor* actor) case kHitSector: { // hit floor - if (actor->spr.pos.Z > ((actor->user.hiz + actor->user.loz) >> 1)) + if (actor->int_pos().Z > ((actor->user.hiz + actor->user.loz) >> 1)) { actor->set_int_z(actor->user.loz); actor->user.Counter = 0; @@ -18360,12 +18360,12 @@ void QueueLoWangs(DSWActor* actor) { LoWangsQueue[LoWangsQueueHead] = spawnedActor = SpawnActor(STAT_GENERIC_QUEUE, actor->spr.picnum, s_DeadLoWang, actor->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); } else { // move old sprite to new sprite's place - SetActorZ(LoWangsQueue[LoWangsQueueHead], actor->spr.pos); + SetActorZ(LoWangsQueue[LoWangsQueueHead], actor->int_pos()); spawnedActor = LoWangsQueue[LoWangsQueueHead]; ASSERT(spawnedActor->spr.statnum != MAXSTATUS); } diff --git a/source/games/sw/src/weapon.h b/source/games/sw/src/weapon.h index 4e27358a0..631c6592b 100644 --- a/source/games/sw/src/weapon.h +++ b/source/games/sw/src/weapon.h @@ -34,12 +34,12 @@ BEGIN_SW_NS inline int AngToSprite(DSWActor* actor, DSWActor* other) { - return (getangle(actor->spr.pos.X - other->spr.pos.X, actor->spr.pos.Y - other->spr.pos.Y)); + return (getangle(actor->int_pos().X - other->int_pos().X, actor->int_pos().Y - other->int_pos().Y)); } inline int AngToPlayer(PLAYER* player, DSWActor* other) { - return (getangle(player->pos.X - other->spr.pos.X, player->pos.Y - other->spr.pos.Y)); + return (getangle(player->pos.X - other->int_pos().X, player->pos.Y - other->int_pos().Y)); } diff --git a/source/games/sw/src/zilla.cpp b/source/games/sw/src/zilla.cpp index 04a5b9a05..bf7af445a 100644 --- a/source/games/sw/src/zilla.cpp +++ b/source/games/sw/src/zilla.cpp @@ -636,14 +636,14 @@ int NullZilla(DSWActor* actor) #if 0 if (actor->user.State == s_ZillaDie) { - getzsofslopeptr(actor->sector(), actor->spr.pos.X, actor->spr.y, &actor->user.hiz, &actor->user.loz); + getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->spr.y, &actor->user.hiz, &actor->user.loz); actor->user.lo_sectp = actor->sector(); actor->user.hi_sectp = actor->sector(); actor->spr.z = actor->user.loz; } #endif - getzsofslopeptr(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, &actor->user.hiz, &actor->user.loz); + getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y, &actor->user.hiz, &actor->user.loz); actor->user.lo_sectp = actor->sector(); actor->user.hi_sectp = actor->sector(); actor->user.lowActor = nullptr; @@ -712,7 +712,7 @@ int DoZillaDeathMelt(DSWActor* actor) } //KeepActorOnFloor(actor); - getzsofslopeptr(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, &actor->user.hiz, &actor->user.loz); + getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y, &actor->user.hiz, &actor->user.loz); actor->user.lo_sectp = actor->sector(); actor->user.hi_sectp = actor->sector(); actor->user.lowActor = nullptr; diff --git a/source/games/sw/src/zombie.cpp b/source/games/sw/src/zombie.cpp index 845585d95..1791082e1 100644 --- a/source/games/sw/src/zombie.cpp +++ b/source/games/sw/src/zombie.cpp @@ -816,13 +816,13 @@ void SpawnZombie2(DSWActor* actor) if (FAF_ConnectArea(actor->sector())) { auto newsect = actor->sector(); - updatesectorz(actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z + Z(10), &newsect); + updatesectorz(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z + Z(10), &newsect); if (SectorIsUnderwaterArea(newsect)) return; } - auto actorNew = SpawnActor(STAT_ENEMY, ZOMBIE_RUN_R0, s_ZombieRun[0], actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->spr.ang, 0); + auto actorNew = SpawnActor(STAT_ENEMY, ZOMBIE_RUN_R0, s_ZombieRun[0], actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->spr.ang, 0); actorNew->user.Counter3 = 0; SetOwner(ownerActor, actorNew); actorNew->spr.pal = actorNew->user.spal = ownerActor->user.spal;