From f269ceff6491e4fcb13013dedea04d4b84c8d8e5 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 23 Aug 2022 22:24:01 +0200 Subject: [PATCH] slope functions with position vectors --- source/core/gamefuncs.h | 21 +++++++++++++++++++++ source/games/blood/src/actor.cpp | 8 ++++---- source/games/blood/src/aibat.cpp | 2 +- source/games/blood/src/aigarg.cpp | 2 +- source/games/blood/src/aighost.cpp | 2 +- source/games/blood/src/fx.cpp | 4 ++-- source/games/blood/src/nnexts.cpp | 12 ++++++------ source/games/blood/src/player.cpp | 2 +- source/games/blood/src/triggers.cpp | 2 +- source/games/blood/src/warp.cpp | 12 ++++++------ source/games/duke/src/actors.cpp | 10 +++++----- source/games/duke/src/actors_d.cpp | 2 +- source/games/duke/src/actors_r.cpp | 2 +- source/games/sw/src/jweapon.cpp | 5 ++--- source/games/sw/src/player.cpp | 4 +--- source/games/sw/src/spike.cpp | 2 +- source/games/sw/src/sprite.cpp | 9 +++------ source/games/sw/src/weapon.cpp | 6 +++--- source/games/sw/src/zilla.cpp | 4 ++-- 19 files changed, 63 insertions(+), 48 deletions(-) diff --git a/source/core/gamefuncs.h b/source/core/gamefuncs.h index 78e7ee686..11ef56cb4 100644 --- a/source/core/gamefuncs.h +++ b/source/core/gamefuncs.h @@ -290,6 +290,23 @@ int getflorzofslopeptr(const sectortype* sec, int dax, int day); void getzsofslopeptr(const sectortype* sec, int dax, int day, int* ceilz, int* florz); void getzsofslopeptr(const sectortype* sec, double dax, double day, double* ceilz, double* florz); +inline int getceilzofslopeptr(const sectortype* sec, const DVector3& pos) +{ + return getceilzofslopeptr(sec, pos.X * worldtoint, pos.Y * worldtoint); +} +inline int getflorzofslopeptr(const sectortype* sec, const DVector3& pos) +{ + return getflorzofslopeptr(sec, pos.X * worldtoint, pos.Y * worldtoint); +} +inline void getzsofslopeptr(const sectortype* sec, const DVector3& pos, int* ceilz, int* florz) +{ + getzsofslopeptr(sec, int(pos.X * worldtoint), int(pos.Y * worldtoint), ceilz, florz); +} +inline void getzsofslopeptr(const sectortype* sec, const DVector3& pos, double* ceilz, double* florz) +{ + getzsofslopeptr(sec, pos.X, pos.Y, ceilz, florz); +} + inline double getceilzofslopeptrf(const sectortype* sec, double dax, double day) { return getceilzofslopeptr(sec, dax * worldtoint, day * worldtoint) * zinttoworld; @@ -298,6 +315,10 @@ inline double getflorzofslopeptrf(const sectortype* sec, double dax, double day) { return getflorzofslopeptr(sec, dax * worldtoint, day * worldtoint) * zinttoworld; } +inline double getflorzofslopeptrf(const sectortype* sec, const DVector2& pos) +{ + return getflorzofslopeptr(sec, pos.X * worldtoint, pos.Y * worldtoint) * zinttoworld; +} enum EFindNextSector diff --git a/source/games/blood/src/actor.cpp b/source/games/blood/src/actor.cpp index b416a4243..180a7a60b 100644 --- a/source/games/blood/src/actor.cpp +++ b/source/games/blood/src/actor.cpp @@ -4882,7 +4882,7 @@ void MoveDude(DBloodActor* actor) { if (bUnderwater) { - int cz = getceilzofslopeptr(pSector, actor->int_pos().X, actor->int_pos().Y); + int cz = getceilzofslopeptr(pSector, actor->spr.pos); if (cz > top) vc += ((bottom - cz) * -80099) / (bottom - top); else @@ -4890,7 +4890,7 @@ void MoveDude(DBloodActor* actor) } else { - int fz = getflorzofslopeptr(pSector, actor->int_pos().X, actor->int_pos().Y); + int fz = getflorzofslopeptr(pSector, actor->spr.pos); if (fz < bottom) vc += ((bottom - fz) * -80099) / (bottom - top); } @@ -5665,7 +5665,7 @@ static void actCheckThings() { int top, bottom; GetActorExtents(actor, &top, &bottom); - if (getflorzofslopeptr(pSector, actor->int_pos().X, actor->int_pos().Y) <= bottom) + if (getflorzofslopeptr(pSector, actor->spr.pos) <= bottom) { int angle = pXSector->panAngle; int speed = 0; @@ -6090,7 +6090,7 @@ static void actCheckDudes() { int top, bottom; GetActorExtents(actor, &top, &bottom); - if (getflorzofslopeptr(pSector, actor->int_pos().X, actor->int_pos().Y) <= bottom) + if (getflorzofslopeptr(pSector, actor->spr.pos) <= bottom) { int angle = pXSector->panAngle; int speed = 0; diff --git a/source/games/blood/src/aibat.cpp b/source/games/blood/src/aibat.cpp index 30fa9e481..d1df96b64 100644 --- a/source/games/blood/src/aibat.cpp +++ b/source/games/blood/src/aibat.cpp @@ -287,7 +287,7 @@ static void batThinkChase(DBloodActor* actor) if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { aiSetTarget(actor, actor->GetTarget()); - int floorZ = getflorzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y); + int floorZ = getflorzofslopeptr(actor->sector(), actor->spr.pos); if (height2 - height < 0x2000 && nDist < 0x200 && abs(nDeltaAngle) < 85) aiNewState(actor, &batBite); else if ((height2 - height > 0x5000 || floorZ - bottom > 0x5000) && nDist < 0x1400 && nDist > 0x800 && abs(nDeltaAngle) < 85) diff --git a/source/games/blood/src/aigarg.cpp b/source/games/blood/src/aigarg.cpp index 75156bc58..d2efce9e2 100644 --- a/source/games/blood/src/aigarg.cpp +++ b/source/games/blood/src/aigarg.cpp @@ -370,7 +370,7 @@ static void gargThinkChase(DBloodActor* actor) if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { aiSetTarget(actor, actor->GetTarget()); - int floorZ = getflorzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y); + int floorZ = getflorzofslopeptr(actor->sector(), actor->spr.pos); switch (actor->spr.type) { case kDudeGargoyleFlesh: diff --git a/source/games/blood/src/aighost.cpp b/source/games/blood/src/aighost.cpp index 1fb49f9d8..5f0adc55c 100644 --- a/source/games/blood/src/aighost.cpp +++ b/source/games/blood/src/aighost.cpp @@ -349,7 +349,7 @@ static void ghostThinkChase(DBloodActor* actor) if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { aiSetTarget(actor, actor->GetTarget()); - int floorZ = getflorzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y); + int floorZ = getflorzofslopeptr(actor->sector(), actor->spr.pos); switch (actor->spr.type) { case kDudePhantasm: if (nDist < 0x2000 && nDist > 0x1000 && abs(nDeltaAngle) < 85) { diff --git a/source/games/blood/src/fx.cpp b/source/games/blood/src/fx.cpp index 70beac982..97800abeb 100644 --- a/source/games/blood/src/fx.cpp +++ b/source/games/blood/src/fx.cpp @@ -224,7 +224,7 @@ void CFX::fxProcess(void) remove(actor); continue; } - if (getflorzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y) <= actor->int_pos().Z) + if (getflorzofslopeptr(actor->sector(), actor->spr.pos) <= actor->int_pos().Z) { if (pFXData->funcID < 0 || pFXData->funcID >= kCallbackMax) { @@ -243,7 +243,7 @@ void CFX::fxProcess(void) if (actor->vel.X || actor->vel.Y || actor->vel.Z) { int32_t floorZ, ceilZ; - getzsofslopeptr(pSector, actor->int_pos().X, actor->int_pos().Y, &ceilZ, &floorZ); + getzsofslopeptr(pSector, actor->spr.pos, &ceilZ, &floorZ); if (ceilZ > actor->int_pos().Z && !(pSector->ceilingstat & CSTAT_SECTOR_SKY)) { remove(actor); diff --git a/source/games/blood/src/nnexts.cpp b/source/games/blood/src/nnexts.cpp index e830e88de..ea8af77c6 100644 --- a/source/games/blood/src/nnexts.cpp +++ b/source/games/blood/src/nnexts.cpp @@ -1720,8 +1720,8 @@ void debrisMove(int listIndex) if ((actor->xspr.physAttr & kPhysDebrisSwim) && uwater) { int vc = 0; - int cz = getceilzofslopeptr(pSector, actor->int_pos().X, actor->int_pos().Y); - int fz = getflorzofslopeptr(pSector, actor->int_pos().X, actor->int_pos().Y); + int cz = getceilzofslopeptr(pSector, actor->spr.pos); + int fz = getflorzofslopeptr(pSector, actor->spr.pos); int div = ClipLow(bottom - top, 1); if (pSector->lowerLink) cz += (cz < 0) ? 0x500 : -0x500; @@ -6687,12 +6687,12 @@ void sprite2sectorSlope(DBloodActor* actor, sectortype* pSector, char rel, bool int slope = 0, z = 0; switch (rel) { default: - z = getflorzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y); + z = getflorzofslopeptr(actor->sector(), actor->spr.pos); if ((actor->spr.cstat & CSTAT_SPRITE_ALIGNMENT_FLOOR) && actor->hasX() && actor->xspr.Touch) z--; slope = pSector->floorheinum; break; case 1: - z = getceilzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y); + z = getceilzofslopeptr(actor->sector(), actor->spr.pos); if ((actor->spr.cstat & CSTAT_SPRITE_ALIGNMENT_FLOOR) && actor->hasX() && actor->xspr.Touch) z++; slope = pSector->ceilingheinum; break; @@ -9271,9 +9271,9 @@ void clampSprite(DBloodActor* actor, int which) { GetActorExtents(actor, &zTop, &zBot); if (which & 0x01) - actor->add_int_z(ClipHigh(getflorzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y) - zBot, 0)); + actor->add_int_z(ClipHigh(getflorzofslopeptr(actor->sector(), actor->spr.pos) - zBot, 0)); if (which & 0x02) - actor->add_int_z(ClipLow(getceilzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y) - zTop, 0)); + actor->add_int_z(ClipLow(getceilzofslopeptr(actor->sector(), actor->spr.pos) - zTop, 0)); } diff --git a/source/games/blood/src/player.cpp b/source/games/blood/src/player.cpp index ee9b146e3..1db4edcf0 100644 --- a/source/games/blood/src/player.cpp +++ b/source/games/blood/src/player.cpp @@ -1929,7 +1929,7 @@ void playerProcess(PLAYER* pPlayer) auto link = actor->sector()->lowerLink; if (link && (link->spr.type == kMarkerLowGoo || link->spr.type == kMarkerLowWater)) { - if (getceilzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y) > pPlayer->zView) + if (getceilzofslopeptr(actor->sector(), actor->spr.pos) > pPlayer->zView) pPlayer->isUnderwater = 0; } } diff --git a/source/games/blood/src/triggers.cpp b/source/games/blood/src/triggers.cpp index a6151e009..7acc20ea4 100644 --- a/source/games/blood/src/triggers.cpp +++ b/source/games/blood/src/triggers.cpp @@ -951,7 +951,7 @@ void TranslateSector(sectortype* pSector, int a2, int a3, int a4, int a5, int a6 { int top, bottom; GetActorExtents(actor, &top, &bottom); - int floorZ = getflorzofslopeptr(pSector, actor->int_pos().X, actor->int_pos().Y); + int floorZ = getflorzofslopeptr(pSector, actor->spr.pos); if (!(actor->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK) && floorZ <= bottom) { viewBackupSpriteLoc(actor); diff --git a/source/games/blood/src/warp.cpp b/source/games/blood/src/warp.cpp index d5f0c2722..8f1c25656 100644 --- a/source/games/blood/src/warp.cpp +++ b/source/games/blood/src/warp.cpp @@ -139,7 +139,7 @@ void warpInit(TArray& actors) actor->sector()->upperLink = actor; actor->spr.cstat |= CSTAT_SPRITE_INVISIBLE; actor->spr.cstat &= ~CSTAT_SPRITE_BLOCK_ALL; - actor->set_int_z(getflorzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y)); + actor->set_int_z(getflorzofslopeptr(actor->sector(), actor->spr.pos)); break; case kMarkerLowWater: case kMarkerLowStack: @@ -147,7 +147,7 @@ void warpInit(TArray& actors) actor->sector()->lowerLink = actor; actor->spr.cstat |= CSTAT_SPRITE_INVISIBLE; actor->spr.cstat &= ~CSTAT_SPRITE_BLOCK_ALL; - actor->set_int_z(getceilzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y)); + actor->set_int_z(getceilzofslopeptr(actor->sector(), actor->spr.pos)); break; } } @@ -204,7 +204,7 @@ int CheckLink(DBloodActor* actor) if (aUpper->spr.type == kMarkerUpLink) z = aUpper->int_pos().Z; else - z = getflorzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y); + z = getflorzofslopeptr(actor->sector(), actor->spr.pos); if (z <= actor->int_pos().Z) { aLower = aUpper->GetOwner(); @@ -218,7 +218,7 @@ int CheckLink(DBloodActor* actor) if (aLower->spr.type == kMarkerLowLink) z2 = aLower->int_pos().Z; else - z2 = getceilzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y); + z2 = getceilzofslopeptr(actor->sector(), actor->spr.pos); add.Z = z2 - z; actor->add_int_pos(add); actor->interpolated = false; @@ -231,7 +231,7 @@ int CheckLink(DBloodActor* actor) if (aLower->spr.type == kMarkerLowLink) z = aLower->int_pos().Z; else - z = getceilzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y); + z = getceilzofslopeptr(actor->sector(), actor->spr.pos); if (z >= actor->int_pos().Z) { aUpper = aLower->GetOwner(); @@ -245,7 +245,7 @@ int CheckLink(DBloodActor* actor) if (aUpper->spr.type == kMarkerUpLink) z2 = aUpper->int_pos().Z; else - z2 = getflorzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y); + z2 = getflorzofslopeptr(actor->sector(), actor->spr.pos); add.Z = z2 - z; actor->add_int_pos(add); actor->interpolated = false; diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 34ec0c4a1..a033bf299 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -2139,7 +2139,7 @@ bool money(DDukeActor* actor, int BLOODPOOL) deletesprite(actor); return false; } - int l = getflorzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y); + int l = getflorzofslopeptr(actor->sector(), actor->spr.pos); if (actor->int_pos().Z > l) { @@ -2201,8 +2201,8 @@ bool jibs(DDukeActor *actor, int JIBS6, bool timeout, bool callsetsprite, bool f return false; } - int l = getflorzofslopeptr(sectp, actor->int_pos().X, actor->int_pos().Y); - int x = getceilzofslopeptr(sectp, actor->int_pos().X, actor->int_pos().Y); + int l = getflorzofslopeptr(sectp, actor->spr.pos); + int x = getceilzofslopeptr(sectp, actor->spr.pos); if (x == l) { deletesprite(actor); @@ -2269,7 +2269,7 @@ bool jibs(DDukeActor *actor, int JIBS6, bool timeout, bool callsetsprite, bool f } actor->temp_data[2]++; } - double ll = getflorzofslopeptrf(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y); + double ll = getflorzofslopeptrf(actor->sector(), actor->spr.pos); actor->spr.pos.Z = ll - 2; actor->spr.xvel = 0; @@ -2547,7 +2547,7 @@ void gutsdir(DDukeActor* actor, int gtype, int n, int p) else sx = sy = 32; int gutz = actor->int_pos().Z - (8 << 8); - int floorz = getflorzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y); + int floorz = getflorzofslopeptr(actor->sector(), actor->spr.pos); if (gutz > (floorz - (8 << 8))) gutz = floorz - (8 << 8); diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index fdaf47588..eb206f060 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -546,7 +546,7 @@ void guts_d(DDukeActor* actor, int gtype, int n, int p) else sx = sy = 32; gutz = actor->int_pos().Z - (8 << 8); - floorz = getflorzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y); + floorz = getflorzofslopeptr(actor->sector(), actor->spr.pos); if (gutz > (floorz - (8 << 8))) gutz = floorz - (8 << 8); diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index a5806f70f..9b9c35687 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -453,7 +453,7 @@ void guts_r(DDukeActor* actor, int gtype, int n, int p) else sx = sy = 32; gutz = actor->int_pos().Z - (8 << 8); - floorz = getflorzofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y); + floorz = getflorzofslopeptr(actor->sector(), actor->spr.pos); if (gutz > (floorz - (8 << 8))) gutz = floorz - (8 << 8); diff --git a/source/games/sw/src/jweapon.cpp b/source/games/sw/src/jweapon.cpp index 4824aaf94..f3020e432 100644 --- a/source/games/sw/src/jweapon.cpp +++ b/source/games/sw/src/jweapon.cpp @@ -358,7 +358,7 @@ int DoBloodSpray(DSWActor* actor) // special stuff for blood worm actor->add_int_z((actor->user.change.Z >> 1)); - getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y, &cz, &fz); + getzsofslopeptr(actor->sector(), actor->spr.pos, &cz, &fz); // pretend like we hit a sector if (actor->int_pos().Z >= fz) { @@ -715,8 +715,7 @@ int DoPhosphorus(DSWActor* actor) if (!(actor->user.Flags & (SPR_BOUNCE | SPR_UNDERWATER)) && !(actor->spr.cstat & CSTAT_SPRITE_INVISIBLE)) { - auto actorNew = SpawnActor(STAT_SKIP4, PUFF, s_PhosphorExp, actor->sector(), - actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->int_ang(), 100); + auto actorNew = SpawnActor(STAT_SKIP4, PUFF, s_PhosphorExp, actor->sector(), actor->spr.pos, actor->spr.angle, 100); actorNew->spr.hitag = LUMINOUS; // Always full brightness SetOwner(actor, actorNew); diff --git a/source/games/sw/src/player.cpp b/source/games/sw/src/player.cpp index f7695ed4a..914b6aa36 100644 --- a/source/games/sw/src/player.cpp +++ b/source/games/sw/src/player.cpp @@ -1325,9 +1325,7 @@ void DoSpawnTeleporterEffectPlace(DSWActor* actor) { extern STATE s_TeleportEffect[]; - auto effectActor = SpawnActor(STAT_MISSILE, 0, s_TeleportEffect, actor->sector(), - actor->int_pos().X, actor->int_pos().Y, int_ActorZOfTop(actor) + Z(16), - actor->int_ang(), 0); + auto effectActor = SpawnActor(STAT_MISSILE, 0, s_TeleportEffect, actor->sector(), ActorVectOfTop(actor).plusZ(16), actor->spr.angle, 0); SetActorZ(effectActor, effectActor->spr.pos); diff --git a/source/games/sw/src/spike.cpp b/source/games/sw/src/spike.cpp index 5aa58df88..e67bd5a2d 100644 --- a/source/games/sw/src/spike.cpp +++ b/source/games/sw/src/spike.cpp @@ -258,7 +258,7 @@ void MoveSpritesWithSpike(sectortype* sect) if ((actor->spr.extra & SPRX_STAY_PUT_VATOR)) continue; - getzsofslopeptr(sect, actor->int_pos().X, actor->int_pos().Y, &cz, &fz); + getzsofslopeptr(sect, actor->spr.pos, &cz, &fz); actor->set_int_z(fz); } } diff --git a/source/games/sw/src/sprite.cpp b/source/games/sw/src/sprite.cpp index 60677e6fe..d08586ce5 100644 --- a/source/games/sw/src/sprite.cpp +++ b/source/games/sw/src/sprite.cpp @@ -1558,7 +1558,7 @@ void SpriteSetup(void) while (auto actor = it.Next()) { // not used yetv - getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y, &cz, &fz); + getzsofslopeptr(actor->sector(), actor->spr.pos, &cz, &fz); if (actor->int_pos().Z > ((cz + fz) >> 1)) { // closer to a floor @@ -6590,14 +6590,11 @@ Collision move_ground_missile(DSWActor* actor, int xchange, int ychange, int cei actor->user.z_tgt = 0; if ((dasect != actor->sector()) && (dasect != nullptr)) { - int new_loz,new_hiz; - getzsofslopeptr(dasect, actor->int_pos().X, actor->int_pos().Y, &new_hiz, &new_loz); - - actor->set_int_z(new_loz); + actor->spr.pos.Z = getflorzofslopeptrf(dasect, actor->spr.pos.X, actor->spr.pos.Y); ChangeActorSect(actor, dasect); } - getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y, &actor->user.hiz, &actor->user.loz); + getzsofslopeptr(actor->sector(), actor->spr.pos, &actor->user.hiz, &actor->user.loz); actor->user.hi_sectp = actor->user.lo_sectp = actor->sector(); actor->user.highActor = nullptr; actor->user.lowActor = nullptr; diff --git a/source/games/sw/src/weapon.cpp b/source/games/sw/src/weapon.cpp index fd7526556..2013b4147 100644 --- a/source/games/sw/src/weapon.cpp +++ b/source/games/sw/src/weapon.cpp @@ -8139,7 +8139,7 @@ bool SlopeBounce(DSWActor* actor, bool *hit_wall) auto hit_sector = actor->user.coll.hitSector; - getzsofslopeptr(hit_sector, actor->int_pos().X, actor->int_pos().Y, &hiz, &loz); + getzsofslopeptr(hit_sector, actor->spr.pos, &hiz, &loz); // detect the ceiling and the hit_wall if (actor->int_pos().Z < ((hiz+loz) >> 1)) @@ -11166,7 +11166,7 @@ int DoRing(DSWActor* actor) ASSERT(actor->insector()); - getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y, &cz, &fz); + getzsofslopeptr(actor->sector(), actor->spr.pos, &cz, &fz); // bound the sprite by the sectors ceiling and floor if (actor->int_pos().Z > fz) @@ -11292,7 +11292,7 @@ int DoSerpRing(DSWActor* actor) ASSERT(actor->insector()); - getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y, &cz, &fz); + getzsofslopeptr(actor->sector(), actor->spr.pos, &cz, &fz); // bound the sprite by the sectors ceiling and floor if (actor->int_pos().Z > fz) diff --git a/source/games/sw/src/zilla.cpp b/source/games/sw/src/zilla.cpp index c38f36b77..7b7feb97b 100644 --- a/source/games/sw/src/zilla.cpp +++ b/source/games/sw/src/zilla.cpp @@ -633,7 +633,7 @@ int SetupZilla(DSWActor* actor) int NullZilla(DSWActor* actor) { - getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y, &actor->user.hiz, &actor->user.loz); + getzsofslopeptr(actor->sector(), actor->spr.pos, &actor->user.hiz, &actor->user.loz); actor->user.lo_sectp = actor->sector(); actor->user.hi_sectp = actor->sector(); actor->user.lowActor = nullptr; @@ -702,7 +702,7 @@ int DoZillaDeathMelt(DSWActor* actor) } //KeepActorOnFloor(actor); - getzsofslopeptr(actor->sector(), actor->int_pos().X, actor->int_pos().Y, &actor->user.hiz, &actor->user.loz); + getzsofslopeptr(actor->sector(), actor->spr.pos, &actor->user.hiz, &actor->user.loz); actor->user.lo_sectp = actor->sector(); actor->user.hi_sectp = actor->sector(); actor->user.lowActor = nullptr;