diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index d740e219e..8b59c4426 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -458,7 +458,7 @@ void moveplayers(void) } else { - p->PlayerNowPosition = act->spr.pos.plusZ(-20); + p->posSet(act->spr.pos.plusZ(-20)); p->newOwner = nullptr; if (p->wackedbyactor != nullptr && p->wackedbyactor->spr.statnum < MAXSTATUS) diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index 364a5649c..99a5f94ab 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -1345,7 +1345,7 @@ void movetransports_d(void) ps[p].transporter_hold = 13; } - ps[p].PlayerNowPosition = Owner->spr.pos.plusZ(-gs.playerheight); + ps[p].posSet(Owner->spr.pos.plusZ(-gs.playerheight)); ps[p].backupxyz(); ps[p].setbobpos(); diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index ae79ac081..934728e46 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -1233,7 +1233,7 @@ void movetransports_r(void) ps[p].transporter_hold = 13; } - ps[p].PlayerNowPosition = Owner->spr.pos.plusZ(-gs.playerheight + 4); + ps[p].posSet(Owner->spr.pos.plusZ(-gs.playerheight + 4)); ps[p].backupxyz(); ps[p].setbobpos(); @@ -2049,7 +2049,7 @@ void rr_specialstats() if (act2->spr.picnum == RRTELEPORTDEST) { ps[p].angle.ang = act2->spr.angle; - ps[p].PlayerNowPosition = act2->spr.pos.plusZ(-36); + ps[p].posSet(act2->spr.pos.plusZ(-36)); ps[p].backupxyz(); ps[p].setbobpos(); auto pact = ps[p].GetActor(); diff --git a/source/games/duke/src/ccmds.cpp b/source/games/duke/src/ccmds.cpp index fae60aec1..255ecca63 100644 --- a/source/games/duke/src/ccmds.cpp +++ b/source/games/duke/src/ccmds.cpp @@ -115,7 +115,7 @@ void GameInterface::WarpToCoords(double x, double y, double z, DAngle ang) { player_struct* p = &ps[myconnectindex]; - p->PlayerNowPosition = DVector3(x, y, z); + p->posSet(DVector3(x, y, z)); p->backupxyz(); if (ang != DAngle::fromDeg(INT_MIN)) diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp index e398b4891..e42a9c852 100644 --- a/source/games/duke/src/player_d.cpp +++ b/source/games/duke/src/player_d.cpp @@ -3101,7 +3101,8 @@ HORIZONLY: { if (!retry++) { - p->PlayerNowPosition = p->PlayerOldPosition = oldpos; + p->posSet(oldpos); + p->backupxyz(); continue; } quickkill(p); diff --git a/source/games/duke/src/player_r.cpp b/source/games/duke/src/player_r.cpp index a4f079716..63eb3be2c 100644 --- a/source/games/duke/src/player_r.cpp +++ b/source/games/duke/src/player_r.cpp @@ -3888,7 +3888,8 @@ HORIZONLY: { if (!retry++) { - p->PlayerNowPosition = p->PlayerOldPosition = oldpos; + p->posSet(oldpos); + p->backupxyz(); continue; } quickkill(p); diff --git a/source/games/duke/src/premap.cpp b/source/games/duke/src/premap.cpp index 17a9a1dde..e7dcab8e8 100644 --- a/source/games/duke/src/premap.cpp +++ b/source/games/duke/src/premap.cpp @@ -69,7 +69,7 @@ void pickrandomspot(int snum) i = krand()%numplayersprites; else i = snum; - p->PlayerNowPosition = po[i].opos; + p->posSet(po[i].opos); p->backupxyz(); p->setbobpos(); p->angle.oang = p->angle.ang = po[i].oa; @@ -622,7 +622,7 @@ void resetpspritevars(int g) ps[j].frag_ps = j; act->SetOwner(act); - ps[j].PlayerNowPosition = act->spr.pos; + ps[j].posSet(act->spr.pos); ps[j].backupxyz(); ps[j].setbobpos(); act->backuppos(); @@ -976,7 +976,7 @@ static int LoadTheMap(MapRecord *mi, player_struct*p, int gamemode) SpawnSpriteDef sprites; DVector3 pos; loadMap(mi->fileName, isShareware(), &pos, &lbang, §, sprites); - p->PlayerNowPosition = pos; + p->posSet(pos); p->cursector = sect; SECRET_SetMapName(mi->DisplayName(), mi->name); diff --git a/source/games/duke/src/types.h b/source/games/duke/src/types.h index 8b8d43288..3dceeb29e 100644 --- a/source/games/duke/src/types.h +++ b/source/games/duke/src/types.h @@ -383,6 +383,11 @@ struct player_struct { return PlayerNowPosition.Z; } + + void posSet(const DVector3& val) + { + PlayerNowPosition = val; + } }; struct Cycler diff --git a/source/games/duke/src/vmexports.cpp b/source/games/duke/src/vmexports.cpp index 204d62317..5c1c75feb 100644 --- a/source/games/duke/src/vmexports.cpp +++ b/source/games/duke/src/vmexports.cpp @@ -703,7 +703,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, backupxyz, dukeplayer_backupxyz) void dukeplayer_setpos(player_struct* self, double x, double y, double z) { - self->PlayerNowPosition = { x, y, z }; + self->posSet({ x, y, z }); } DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, setpos, dukeplayer_setpos)