diff --git a/source/core/coreactor.h b/source/core/coreactor.h index 8d5780b7f..bec88ea60 100644 --- a/source/core/coreactor.h +++ b/source/core/coreactor.h @@ -442,6 +442,15 @@ inline int clipmove(DVector3& pos, sectortype** const sect, const DVector2& mvec return result.type; } +inline int clipmove(DVector2& pos, double z, sectortype** const sect, const DVector2& mvec, + double const walldist, double const ceildist, double const flordist, unsigned const cliptype, CollisionBase& result, int clipmoveboxtracenum = 3) +{ + auto vect = DVector3(pos, z); + auto res = clipmove(vect, sect, mvec, walldist, ceildist, flordist, cliptype, result); + pos = vect.XY(); + return res; +} + inline PClassActor* PClass::FindActor(FName name) { diff --git a/source/core/gamefuncs.h b/source/core/gamefuncs.h index d7de29dcd..12ba90cf4 100644 --- a/source/core/gamefuncs.h +++ b/source/core/gamefuncs.h @@ -268,6 +268,14 @@ bool checkOpening(const DVector2& inpos, double z, const sectortype* sec, const int pushmove(DVector3& pos, sectortype** pSect, double walldist, double ceildist, double flordist, unsigned cliptype); tspritetype* renderAddTsprite(tspriteArray& tsprites, DCoreActor* actor); +inline int pushmove(DVector2& pos, double z, sectortype** pSect, double walldist, double ceildist, double flordist, unsigned cliptype) +{ + auto vect = DVector3(pos, z); + auto result = pushmove(vect, pSect, walldist, ceildist, flordist, cliptype); + pos = vect.XY(); + return result; +} + diff --git a/source/games/duke/src/player.cpp b/source/games/duke/src/player.cpp index f24bfc8d8..42203bb8f 100644 --- a/source/games/duke/src/player.cpp +++ b/source/games/duke/src/player.cpp @@ -618,7 +618,7 @@ void playerisdead(int snum, int psectlotag, double floorz, double ceilingz) } Collision coll; - clipmove(p->PlayerNowPosition, &p->cursector, DVector2( 0, 0), 10.25, 4., 4., CLIPMASK0, coll); + clipmove(p->posXY(), p->posZget(), &p->cursector, DVector2( 0, 0), 10.25, 4., 4., CLIPMASK0, coll); } backupplayer(p); @@ -627,7 +627,7 @@ void playerisdead(int snum, int psectlotag, double floorz, double ceilingz) updatesector(p->PlayerNowPosition, &p->cursector); - pushmove(p->PlayerNowPosition, &p->cursector, 8, 4, 20, CLIPMASK0); + pushmove(p->posXY(), p->posZget(), &p->cursector, 8, 4, 20, CLIPMASK0); if (floorz > ceilingz + 16 && actor->spr.pal != 1) p->angle.rotscrnang = DAngle::fromBuild(p->dead_flag + ((floorz + p->posZget()) * 2)); diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp index e42a9c852..d5a8f657b 100644 --- a/source/games/duke/src/player_d.cpp +++ b/source/games/duke/src/player_d.cpp @@ -3038,7 +3038,7 @@ HORIZONLY: ChangeActorSect(pact, p->cursector); } else - clipmove(p->PlayerNowPosition, &p->cursector, p->vel, 10.25, 4., iif, CLIPMASK0, clip); + clipmove(p->posXY(), p->posZget(), &p->cursector, p->vel, 10.25, 4., iif, CLIPMASK0, clip); if (p->jetpack_on == 0 && psectlotag != 2 && psectlotag != 1 && shrunk) p->posZadd(32); @@ -3090,7 +3090,7 @@ HORIZONLY: while (ud.clipping == 0) { int blocked; - blocked = (pushmove(p->PlayerNowPosition, &p->cursector, 10.25, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90); + blocked = (pushmove(p->posXY(), p->posZget(), &p->cursector, 10.25, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90); if (fabs(pact->floorz - pact->ceilingz) < 48 || blocked) { diff --git a/source/games/duke/src/player_r.cpp b/source/games/duke/src/player_r.cpp index 63eb3be2c..79ab01c7d 100644 --- a/source/games/duke/src/player_r.cpp +++ b/source/games/duke/src/player_r.cpp @@ -3742,7 +3742,7 @@ HORIZONLY: ChangeActorSect(pact, p->cursector); } else - clipmove(p->PlayerNowPosition, &p->cursector, p->vel, 10.25, 4., iif, CLIPMASK0, clip); + clipmove(p->posXY(), p->posZget(), &p->cursector, p->vel, 10.25, 4., iif, CLIPMASK0, clip); if (p->jetpack_on == 0 && psectlotag != 2 && psectlotag != 1 && shrunk) p->posZadd(32); @@ -3771,10 +3771,10 @@ HORIZONLY: if (wal->lotag < 44) { dofurniture(clip.hitWall, p->cursector, snum); - pushmove(p->PlayerNowPosition, &p->cursector, 10.75, 4, 4, CLIPMASK0); + pushmove(p->posXY(), p->posZget(), &p->cursector, 10.75, 4, 4, CLIPMASK0); } else - pushmove(p->PlayerNowPosition, &p->cursector, 10.75, 4, 4, CLIPMASK0); + pushmove(p->posXY(), p->posZget(), &p->cursector, 10.75, 4, 4, CLIPMASK0); } } } @@ -3875,9 +3875,9 @@ HORIZONLY: { int blocked; if (pact->clipdist == 16) - blocked = (pushmove(p->PlayerNowPosition, &p->cursector, 8, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90); + blocked = (pushmove(p->posXY(), p->posZget(), &p->cursector, 8, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90); else - blocked = (pushmove(p->PlayerNowPosition, &p->cursector, 1, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90); + blocked = (pushmove(p->posXY(), p->posZget(), &p->cursector, 1, 4, 4, CLIPMASK0) < 0 && furthestangle(p->GetActor(), 8) < DAngle90); if (fabs(pact->floorz - pact->ceilingz) < 48 || blocked) {