From 29ae7f7a02a8c4a7b1dbd75f060c44e55146ef6f Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 5 Feb 2022 13:58:12 +0100 Subject: [PATCH] - floatified bobpos. --- source/games/duke/src/actors.cpp | 15 +++++++-------- source/games/duke/src/gameexec.cpp | 8 ++++---- source/games/duke/src/player.cpp | 3 +-- source/games/duke/src/player_d.cpp | 2 +- source/games/duke/src/player_r.cpp | 2 +- source/games/duke/src/types.h | 5 +++-- 6 files changed, 17 insertions(+), 18 deletions(-) diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 289b6176e..85397e2c6 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -2684,8 +2684,7 @@ void handle_se00(DDukeActor* actor) auto result = rotatepoint(Owner->spr.pos, ps[p].pos.XY(), buildang(q * l)); - ps[p].bobpos.X += (result.X - ps[p].pos.X) * worldtoint; - ps[p].bobpos.Y += (result.Y - ps[p].pos.Y) * worldtoint; + ps[p].bobpos += (result - ps[p].pos.XY()); ps[p].pos.X = result.X; ps[p].pos.Y = result.Y; @@ -2864,8 +2863,8 @@ void handle_se14(DDukeActor* actor, bool checkstat, int RPG, int JIBS6) ps[p].player_set_int_xy({ result.X + m, result.Y + x }); - ps[p].bobpos.X += m; - ps[p].bobpos.Y += x; + ps[p].bobpos.X += m * inttoworld; + ps[p].bobpos.Y += x * inttoworld; ps[p].angle.addadjustment(buildang(q)); @@ -3039,8 +3038,8 @@ void handle_se30(DDukeActor *actor, int JIBS6) ps[p].backupxy(); } - ps[p].bobpos.X += l; - ps[p].bobpos.Y += x; + ps[p].bobpos.X += l * inttoworld; + ps[p].bobpos.Y += x * inttoworld; } if (po[p].os == actor->sector()) @@ -3165,8 +3164,8 @@ void handle_se02(DDukeActor* actor) { ps[p].player_add_int_xy({ m, x }); - ps[p].bobpos.X += m; - ps[p].bobpos.Y += x; + ps[p].bobpos.X += m * inttoworld; + ps[p].bobpos.Y += x * inttoworld; } DukeSectIterator it(actor->sector()); diff --git a/source/games/duke/src/gameexec.cpp b/source/games/duke/src/gameexec.cpp index d25b90742..050826042 100644 --- a/source/games/duke/src/gameexec.cpp +++ b/source/games/duke/src/gameexec.cpp @@ -368,13 +368,13 @@ void DoPlayer(bool bSet, int lVar1, int lLabelID, int lVar2, DDukeActor* sActor, break; case PLAYER_BOBPOSX: - if (bSet) ps[iPlayer].bobpos.X = lValue; - else SetGameVarID(lVar2, ps[iPlayer].bobpos.X, sActor, sPlayer); + if (bSet) ps[iPlayer].bobpos.X = lValue * maptoworld; + else SetGameVarID(lVar2, ps[iPlayer].bobpos.X * (1/maptoworld), sActor, sPlayer); break; case PLAYER_BOBPOSY: - if (bSet) ps[iPlayer].bobpos.Y = lValue; - else SetGameVarID(lVar2, ps[iPlayer].bobpos.Y, sActor, sPlayer); + if (bSet) ps[iPlayer].bobpos.Y = lValue * maptoworld; + else SetGameVarID(lVar2, ps[iPlayer].bobpos.Y * (1/maptoworld), sActor, sPlayer); break; case PLAYER_OPOSX: diff --git a/source/games/duke/src/player.cpp b/source/games/duke/src/player.cpp index ff3a94485..8f5d0e03f 100644 --- a/source/games/duke/src/player.cpp +++ b/source/games/duke/src/player.cpp @@ -779,8 +779,7 @@ void player_struct::backuppos(bool noclipping) } opos.Z = pos.Z; - bobpos.X = player_int_pos().X; - bobpos.Y = player_int_pos().Y; + bobpos = pos.XY(); opyoff = pyoff; } diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp index 0439b366b..337df1308 100644 --- a/source/games/duke/src/player_d.cpp +++ b/source/games/duke/src/player_d.cpp @@ -2855,7 +2855,7 @@ void processinput_d(int snum) p->playerweaponsway(pact->spr.xvel); - pact->spr.xvel = clamp(ksqrt((p->player_int_pos().X - p->bobpos.X) * (p->player_int_pos().X - p->bobpos.X) + (p->player_int_pos().Y - p->bobpos.Y) * (p->player_int_pos().Y - p->bobpos.Y)), 0, 512); + pact->spr.xvel = int(clamp((p->pos.XY() - p->bobpos).Length(), 0., 32.) * worldtoint); if (p->on_ground) p->bobcounter += p->GetActor()->spr.xvel >> 1; p->backuppos(ud.clipping == 0 && ((p->insector() && p->cursector->floorpicnum == MIRROR) || !p->insector())); diff --git a/source/games/duke/src/player_r.cpp b/source/games/duke/src/player_r.cpp index 075ab4b94..13a3ccb48 100644 --- a/source/games/duke/src/player_r.cpp +++ b/source/games/duke/src/player_r.cpp @@ -3580,7 +3580,7 @@ void processinput_r(int snum) p->playerweaponsway(pact->spr.xvel); - pact->spr.xvel = clamp(ksqrt((p->player_int_pos().X - p->bobpos.X) * (p->player_int_pos().X - p->bobpos.X) + (p->player_int_pos().Y - p->bobpos.Y) * (p->player_int_pos().Y - p->bobpos.Y)), 0, 512); + pact->spr.xvel = int(clamp((p->pos.XY() - p->bobpos).Length(), 0., 32.) * worldtoint); if (p->on_ground) p->bobcounter += p->GetActor()->spr.xvel >> 1; p->backuppos(ud.clipping == 0 && ((p->insector() && p->cursector->floorpicnum == MIRROR) || !p->insector())); diff --git a/source/games/duke/src/types.h b/source/games/duke/src/types.h index b5a2d12cf..ea28464d5 100644 --- a/source/games/duke/src/types.h +++ b/source/games/duke/src/types.h @@ -205,6 +205,7 @@ struct player_struct { vec3_t vel; DVector3 pos, opos; + DVector2 bobpos; // player's horizon and angle structs. PlayerHorizon horizon; @@ -218,7 +219,7 @@ struct player_struct PalEntry pals; // this was a global variable originally. - vec2_t fric, exit, loogie[64], bobpos; + vec2_t fric, exit, loogie[64]; // weapon drawer variables and their interpolation counterparts. int weapon_sway; @@ -379,7 +380,7 @@ struct player_struct void setbobpos() { - bobpos = player_int_pos().vec2; + bobpos = pos.XY(); } void getposfromactor(DCoreActor* actor, double addz = 0)