From 8ba7cb0ddb90d7d76d32ab73ef9cca783c417cb9 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 5 Feb 2022 10:51:45 +0100 Subject: [PATCH] - use the player position utilities in actor*.cpp --- source/games/duke/src/actors.cpp | 43 ++++++++++--------------- source/games/duke/src/actors_d.cpp | 28 +++++++++-------- source/games/duke/src/actors_r.cpp | 50 ++++++++++++++++-------------- source/games/duke/src/types.h | 2 +- 4 files changed, 60 insertions(+), 63 deletions(-) diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 79aec61c8..d292013ed 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -202,7 +202,7 @@ void checkavailweapon(struct player_struct* player) void clearcamera(player_struct* ps) { ps->newOwner = nullptr; - ps->__int_pos = ps->__int_opos; + ps->restorexyz(); ps->angle.restore(); updatesector(ps->player_int_pos().X, ps->player_int_pos().Y, &ps->cursector); @@ -761,7 +761,7 @@ void movecrane(DDukeActor *actor, int crane) actor->temp_data[0] = 0; if (cpt.poleactor) - SetActor(cpt.poleactor, vec3_t( actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - (34 << 8) )); + SetActor(cpt.poleactor, actor->spr.pos.plusZ(-34)); auto Owner = actor->GetOwner(); if (Owner != nullptr || actor->IsActiveCrane()) @@ -790,7 +790,7 @@ void movecrane(DDukeActor *actor, int crane) else if (actor->IsActiveCrane()) { auto ang = ps[p].angle.ang.asbuild(); - ps[p].__int_opos = ps[p].__int_pos; + ps[p].backupxyz(); ps[p].__int_pos.X = actor->int_pos().X - bcos(ang, -6); ps[p].__int_pos.Y = actor->int_pos().Y - bsin(ang, -6); ps[p].__int_pos.Z = actor->int_pos().Z + (2 << 8); @@ -2833,11 +2833,10 @@ void handle_se14(DDukeActor* actor, bool checkstat, int RPG, int JIBS6) updatesector(ps[p].player_int_pos().X, ps[p].player_int_pos().Y, &k); if ((k == nullptr && ud.clipping == 0) || (k == actor->sector() && ps[p].cursector != actor->sector())) { - ps[p].__int_pos.X = actor->int_pos().X; - ps[p].__int_pos.Y = actor->int_pos().Y; + ps[p].getxyfromactor(actor); ps[p].setCursector(actor->sector()); - SetActor(ps[p].GetActor(), actor->int_pos()); + SetActor(ps[p].GetActor(), actor->spr.pos); quickkill(&ps[p]); } } @@ -2872,8 +2871,7 @@ void handle_se14(DDukeActor* actor, bool checkstat, int RPG, int JIBS6) if (numplayers > 1) { - ps[p].__int_opos.X = ps[p].player_int_pos().X; - ps[p].__int_opos.Y = ps[p].player_int_pos().Y; + ps[p].backupxy(); } if (psp->spr.extra <= 0) { @@ -2920,8 +2918,8 @@ void handle_se14(DDukeActor* actor, bool checkstat, int RPG, int JIBS6) updatesector(ps[p].player_int_pos().X, ps[p].player_int_pos().Y, &k); if ((k == nullptr && ud.clipping == 0) || (k == actor->sector() && ps[p].cursector != actor->sector())) { - ps[p].__int_opos.X = ps[p].__int_pos.X = actor->int_pos().X; - ps[p].__int_opos.Y = ps[p].__int_pos.Y = actor->int_pos().Y; + ps[p].getxyfromactor(actor); + ps[p].backupxy(); ps[p].setCursector(actor->sector()); SetActor(ps[p].GetActor(), actor->int_pos()); @@ -3021,8 +3019,7 @@ void handle_se30(DDukeActor *actor, int JIBS6) updatesector(ps[p].player_int_pos().X, ps[p].player_int_pos().Y, &k); if ((k == nullptr && ud.clipping == 0) || (k == actor->sector() && ps[p].cursector != actor->sector())) { - ps[p].__int_pos.X = actor->int_pos().X; - ps[p].__int_pos.Y = actor->int_pos().Y; + ps[p].getxyfromactor(actor); ps[p].setCursector(actor->sector()); SetActor(ps[p].GetActor(), actor->int_pos()); @@ -3040,8 +3037,7 @@ void handle_se30(DDukeActor *actor, int JIBS6) if (numplayers > 1) { - ps[p].__int_opos.X = ps[p].player_int_pos().X; - ps[p].__int_opos.Y = ps[p].player_int_pos().Y; + ps[p].backupxy(); } ps[p].bobpos.X += l; @@ -3082,11 +3078,8 @@ void handle_se30(DDukeActor *actor, int JIBS6) updatesector(ps[p].player_int_pos().X, ps[p].player_int_pos().Y, &k); if ((k == nullptr && ud.clipping == 0) || (k == actor->sector() && ps[p].cursector != actor->sector())) { - ps[p].__int_pos.X = actor->int_pos().X; - ps[p].__int_pos.Y = actor->int_pos().Y; - - ps[p].__int_opos.X = ps[p].player_int_pos().X; - ps[p].__int_opos.Y = ps[p].player_int_pos().Y; + ps[p].getxyfromactor(actor); + ps[p].backupxy(); ps[p].setCursector(actor->sector()); @@ -3835,11 +3828,11 @@ void handle_se17(DDukeActor* actor) if (act1->spr.statnum == STAT_PLAYER && act1->GetOwner()) { int p = act1->spr.yvel; - if (numplayers < 2) ps[p].__int_opos.Z = ps[p].player_int_pos().Z; + if (numplayers < 2) ps[p].backupz(); ps[p].__int_pos.Z += q * zworldtoint; ps[p].truefz += q; ps[p].truecz += q; - if (numplayers > 1) ps[p].__int_opos.Z = ps[p].player_int_pos().Z; + if (numplayers > 1) ps[p].backupz(); } if (act1->spr.statnum != STAT_EFFECTOR) { @@ -3894,9 +3887,8 @@ void handle_se17(DDukeActor* actor) act3->floorz = act2->sector()->floorz; act3->ceilingz = act2->sector()->ceilingz; - ps[p].bobpos.X = ps[p].__int_opos.X = ps[p].player_int_pos().X; - ps[p].bobpos.Y = ps[p].__int_opos.Y = ps[p].player_int_pos().Y; - ps[p].__int_opos.Z = ps[p].player_int_pos().Z; + ps[p].backupxyz(); + ps[p].setbobpos(); ps[p].truefz = act3->floorz; ps[p].truecz = act3->ceilingz; @@ -4184,8 +4176,7 @@ void handle_se20(DDukeActor* actor) ps[p].__int_pos.X += x; ps[p].__int_pos.Y +=l; - ps[p].__int_opos.X = ps[p].player_int_pos().X; - ps[p].__int_opos.Y = ps[p].player_int_pos().Y; + ps[p].backupxy(); SetActor(ps[p].GetActor(), vec3_t( ps[p].player_int_pos().X, ps[p].player_int_pos().Y, ps[p].player_int_pos().Z + gs.int_playerheight )); } diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index fd561c28d..12a2e5af5 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -1806,9 +1806,9 @@ void movetransports_d(void) ps[p].transporter_hold = 13; } - ps[p].bobpos.X = ps[p].__int_opos.X = ps[p].__int_pos.X = Owner->int_pos().X; - ps[p].bobpos.Y = ps[p].__int_opos.Y = ps[p].__int_pos.Y = Owner->int_pos().Y; - ps[p].__int_opos.Z = ps[p].__int_pos.Z = Owner->int_pos().Z - gs.int_playerheight; + ps[p].getposfromactor(Owner, -gs.playerheight); + ps[p].backupxyz(); + ps[p].setbobpos(); ChangeActorSect(act2, Owner->sector()); ps[p].setCursector(act2->sector()); @@ -1828,13 +1828,14 @@ void movetransports_d(void) if ((ps[p].jetpack_on == 0) || (ps[p].jetpack_on && (PlayerInput(p, SB_JUMP))) || (ps[p].jetpack_on && PlayerInput(p, SB_CROUCH))) { - ps[p].__int_opos.X = ps[p].__int_pos.X += Owner->int_pos().X - act->int_pos().X; - ps[p].__int_opos.Y = ps[p].__int_pos.Y +=Owner->int_pos().Y - act->int_pos().Y; + ps[p].__int_pos.X += Owner->int_pos().X - act->int_pos().X; + ps[p].__int_pos.Y += Owner->int_pos().Y - act->int_pos().Y; + ps[p].backupxy(); if (ps[p].jetpack_on && (PlayerInput(p, SB_JUMP) || ps[p].jetpack_on < 11)) ps[p].__int_pos.Z = Owner->int_pos().Z - 6144; else ps[p].__int_pos.Z = Owner->int_pos().Z + 6144; - ps[p].__int_opos.Z = ps[p].player_int_pos().Z; + ps[p].backupz(); auto pa = ps[p].GetActor(); pa->opos = DVector3(ps[p].__int_pos.X * inttoworld, ps[p].__int_pos.Y * inttoworld, ps[p].__int_pos.Z * zinttoworld); @@ -1857,8 +1858,8 @@ void movetransports_d(void) } if (ps[p].GetActor()->spr.extra > 0) S_PlayActorSound(DUKE_UNDERWATER, act2); - ps[p].__int_opos.Z = ps[p].__int_pos.Z = - Owner->sector()->int_ceilingz() + (7 << 8); + ps[p].__int_pos.Z = Owner->sector()->int_ceilingz() + (7 << 8); + ps[p].backupz(); ps[p].vel.X = 4096 - (krand() & 8192); ps[p].vel.Y = 4096 - (krand() & 8192); @@ -1875,8 +1876,8 @@ void movetransports_d(void) } S_PlayActorSound(DUKE_GASP, act2); - ps[p].__int_opos.Z = ps[p].__int_pos.Z = - Owner->sector()->int_floorz() - (7 << 8); + ps[p].__int_pos.Z = Owner->sector()->int_floorz() - (7 << 8); + ps[p].backupz(); ps[p].jumping_toggle = 1; ps[p].jumping_counter = 0; @@ -1884,8 +1885,9 @@ void movetransports_d(void) if (k == 1) { - ps[p].__int_opos.X = ps[p].__int_pos.X += Owner->int_pos().X - act->int_pos().X; - ps[p].__int_opos.Y = ps[p].__int_pos.Y +=Owner->int_pos().Y - act->int_pos().Y; + ps[p].__int_pos.X += Owner->int_pos().X - act->int_pos().X; + ps[p].__int_pos.Y +=Owner->int_pos().Y - act->int_pos().Y; + ps[p].backupxy(); if (!Owner || Owner->GetOwner() != Owner) ps[p].transporter_hold = -2; @@ -2183,7 +2185,7 @@ static void greenslime(DDukeActor *actor) if (ps[p].newOwner != nullptr) { ps[p].newOwner = nullptr; - ps[p].__int_pos = ps[p].__int_opos; + ps[p].restorexyz(); ps[p].angle.restore(); updatesector(ps[p].player_int_pos().X, ps[p].player_int_pos().Y, &ps[p].cursector); diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index 0fa20128c..1a30985f2 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -1456,9 +1456,9 @@ void movetransports_r(void) ps[p].transporter_hold = 13; } - ps[p].bobpos.X = ps[p].__int_opos.X = ps[p].__int_pos.X = Owner->int_pos().X; - ps[p].bobpos.Y = ps[p].__int_opos.Y = ps[p].__int_pos.Y = Owner->int_pos().Y; - ps[p].__int_opos.Z = ps[p].__int_pos.Z = Owner->int_pos().Z - (gs.int_playerheight - (4 << 8)); + ps[p].getposfromactor(Owner, -gs.playerheight + 4); + ps[p].backupxyz(); + ps[p].setbobpos(); ChangeActorSect(act2, Owner->sector()); ps[p].setCursector(act2->sector()); @@ -1475,13 +1475,14 @@ void movetransports_r(void) if ((ps[p].jetpack_on == 0) || (ps[p].jetpack_on && PlayerInput(p, SB_JUMP)) || (ps[p].jetpack_on && PlayerInput(p, SB_CROUCH))) { - ps[p].__int_opos.X = ps[p].__int_pos.X += Owner->int_pos().X - act->int_pos().X; - ps[p].__int_opos.Y = ps[p].__int_pos.Y +=Owner->int_pos().Y - act->int_pos().Y; + ps[p].__int_pos.X += Owner->int_pos().X - act->int_pos().X; + ps[p].__int_pos.Y +=Owner->int_pos().Y - act->int_pos().Y; + ps[p].backupxy(); if (ps[p].jetpack_on && (PlayerInput(p, SB_JUMP) || ps[p].jetpack_on < 11)) ps[p].__int_pos.Z = Owner->int_pos().Z - 6144; else ps[p].__int_pos.Z = Owner->int_pos().Z + 6144; - ps[p].__int_opos.Z = ps[p].player_int_pos().Z; + ps[p].backupz(); ChangeActorSect(act2, Owner->sector()); ps[p].setCursector(Owner->sector()); @@ -1496,16 +1497,16 @@ void movetransports_r(void) if (onfloorz && sectlotag == 160 && ps[p].player_int_pos().Z > (sectp->int_floorz() - (48 << 8))) { k = 2; - ps[p].__int_opos.Z = ps[p].__int_pos.Z = - Owner->sector()->int_ceilingz() + (7 << 8); + ps[p].__int_pos.Z = Owner->sector()->int_ceilingz() + (7 << 8); + ps[p].backupz(); } if (onfloorz && sectlotag == 161 && ps[p].player_int_pos().Z < (sectp->int_ceilingz() + (6 << 8))) { k = 2; if (ps[p].GetActor()->spr.extra <= 0) break; - ps[p].__int_opos.Z = ps[p].__int_pos.Z = - Owner->sector()->int_floorz() - (49 << 8); + ps[p].__int_pos.Z = Owner->sector()->int_floorz() - (49 << 8); + ps[p].backupz(); } } @@ -1519,8 +1520,8 @@ void movetransports_r(void) FX_StopAllSounds(); } S_PlayActorSound(DUKE_UNDERWATER, ps[p].GetActor()); - ps[p].__int_opos.Z = ps[p].__int_pos.Z = - Owner->sector()->int_ceilingz() + (7 << 8); + ps[p].__int_pos.Z = Owner->sector()->int_ceilingz() + (7 << 8); + ps[p].backupz(); if (ps[p].OnMotorcycle) ps[p].moto_underwater = 1; } @@ -1535,14 +1536,15 @@ void movetransports_r(void) } S_PlayActorSound(DUKE_GASP, ps[p].GetActor()); - ps[p].__int_opos.Z = ps[p].__int_pos.Z = - Owner->sector()->int_floorz() - (7 << 8); + ps[p].__int_pos.Z = Owner->sector()->int_floorz() - (7 << 8); + ps[p].backupz(); } if (k == 1) { - ps[p].__int_opos.X = ps[p].__int_pos.X += Owner->int_pos().X - act->int_pos().X; - ps[p].__int_opos.Y = ps[p].__int_pos.Y +=Owner->int_pos().Y - act->int_pos().Y; + ps[p].__int_pos.X += Owner->int_pos().X - act->int_pos().X; + ps[p].__int_pos.Y +=Owner->int_pos().Y - act->int_pos().Y; + ps[p].backupxy(); if (Owner->GetOwner() != Owner) ps[p].transporter_hold = -2; @@ -1555,8 +1557,9 @@ void movetransports_r(void) } else if (isRRRA() && k == 2) { - ps[p].__int_opos.X = ps[p].__int_pos.X += Owner->int_pos().X - act->int_pos().X; - ps[p].__int_opos.Y = ps[p].__int_pos.Y +=Owner->int_pos().Y - act->int_pos().Y; + ps[p].__int_pos.X += Owner->int_pos().X - act->int_pos().X; + ps[p].__int_pos.Y +=Owner->int_pos().Y - act->int_pos().Y; + ps[p].backupxy(); if (Owner->GetOwner() != Owner) ps[p].transporter_hold = -2; @@ -1912,7 +1915,8 @@ static void rrra_specialstats() } else if (act->spr.extra == 200) { - SetActor(act, vec3_t( act->int_pos().X, act->int_pos().Y, act->sector()->int_floorz() - 10 )); + // This was really 10 and not (10 << 8)! + SetActor(act, DVector3(act->spr.pos.X, act->spr.pos.Y, act->sector()->floorz - 10 * zmaptoworld)); act->spr.extra = 1; act->spr.picnum = PIG + 11; spawn(act, TRANSPORTERSTAR); @@ -2289,9 +2293,9 @@ void rr_specialstats() if (act2->spr.picnum == RRTILE297) { ps[p].angle.ang = buildang(act2->spr.ang); - ps[p].bobpos.X = ps[p].__int_opos.X = ps[p].__int_pos.X = act2->int_pos().X; - ps[p].bobpos.Y = ps[p].__int_opos.Y = ps[p].__int_pos.Y = act2->int_pos().Y; - ps[p].__int_opos.Z = ps[p].__int_pos.Z = act2->int_pos().Z - (36 << 8); + ps[p].getposfromactor(act2, -36); + ps[p].backupxyz(); + ps[p].setbobpos(); auto pact = ps[p].GetActor(); ChangeActorSect(pact, act2->sector()); ps[p].setCursector(pact->sector()); @@ -2835,7 +2839,7 @@ void moveactors_r(void) getglobalz(act); if (sectp->lotag == 1) { - SetActor(act, vec3_t( act->int_pos().X,act->int_pos().Y,act->actor_int_floorz() + (16 << 8) )); + SetActor(act, DVector3(act->spr.pos.X, act->spr.pos.Y, act->floorz + 16)); } break; diff --git a/source/games/duke/src/types.h b/source/games/duke/src/types.h index bc5c17dfc..6c7825296 100644 --- a/source/games/duke/src/types.h +++ b/source/games/duke/src/types.h @@ -363,7 +363,7 @@ struct player_struct __int_opos = __int_pos; } - void restorepos() + void restorexyz() { __int_pos = __int_opos; }