From d04117d7777bcaeb973cab7f8b2f0dcce3617a10 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 6 Feb 2022 20:02:58 +0100 Subject: [PATCH] - more floatification cleanup. --- source/games/duke/src/actors.cpp | 24 ++++++++------------ source/games/duke/src/actors_r.cpp | 34 +++++++++++++--------------- source/games/duke/src/game_misc.cpp | 6 ++--- source/games/duke/src/prediction.cpp | 6 ++--- 4 files changed, 32 insertions(+), 38 deletions(-) diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 1ba1ebef807..0ae53a1a119 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -398,7 +398,7 @@ void moveplayers(void) { if (p->newOwner != nullptr) //Looking thru the camera { - act->set_int_pos({ p->player_int_opos().X, p->player_int_opos().Y, p->player_int_opos().Z + gs.int_playerheight }); + act->spr.pos = p->opos.plusZ(gs.playerheight); act->backupz(); act->spr.ang = p->angle.oang.asbuild(); SetActor(act, act->int_pos()); @@ -5202,7 +5202,7 @@ void recordoldspritepos() void movefta(void) { - int x, px, py, sx, sy; + int x; int canseeme, p; sectortype* psect, * ssect; @@ -5229,20 +5229,16 @@ void movefta(void) { if (badguy(act)) { - px = ps[p].player_int_opos().X + 64 - (krand() & 127); - py = ps[p].player_int_opos().Y + 64 - (krand() & 127); - updatesector(px, py, &psect); + double px = ps[p].opos.X + (64 - (krand() & 127)) * maptoworld; + double py = ps[p].opos.Y + (64 - (krand() & 127)) * maptoworld; + updatesector(DVector3(px, py, 0), &psect); if (psect == nullptr) { continue; } - sx = act->int_pos().X + 64 - (krand() & 127); - sy = act->int_pos().Y + 64 - (krand() & 127); - updatesector(px, py, &ssect); - if (ssect == nullptr) - { - continue; - } + double sx = act->spr.pos.X + (64 - (krand() & 127)) * maptoworld; + double sy = act->spr.pos.Y + (64 - (krand() & 127)) * maptoworld; + // The second updatesector call here used px and py again and was redundant as coded. // SFLAG_MOVEFTA_CHECKSEE is set for all actors in Duke. if (act->spr.pal == 33 || actorflag(act, SFLAG_MOVEFTA_CHECKSEE) || @@ -5251,14 +5247,14 @@ void movefta(void) { int r1 = krand(); int r2 = krand(); - canseeme = cansee(sx, sy, act->int_pos().Z - (r2 % (52 << 8)), act->sector(), px, py, ps[p].player_int_opos().Z - (r1 % (32 << 8)), ps[p].cursector); + canseeme = cansee({ sx, sy, act->spr.pos.Z - (r2 % (52 << 8)) * maptoworld }, act->sector(), { px, py, ps[p].opos.Z - (r1 % (32 << 8)) * maptoworld }, ps[p].cursector); } } else { int r1 = krand(); int r2 = krand(); - canseeme = cansee(act->int_pos().X, act->int_pos().Y, act->int_pos().Z - ((r2 & 31) << 8), act->sector(), ps[p].player_int_opos().X, ps[p].player_int_opos().Y, ps[p].player_int_opos().Z - ((r1 & 31) << 8), ps[p].cursector); + canseeme = cansee(act->spr.pos.plusZ(-(r2 & 31)), act->sector(), ps[p].opos.plusZ(-(r1 & 31)), ps[p].cursector); } diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index 6891e74f38f..97c93ada209 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -1471,7 +1471,7 @@ void movetransports_r(void) } else break; - if (onfloorz == 0 && abs(act->int_pos().Z - ps[p].player_int_pos().Z) < 6144) + if (onfloorz == 0 && fabs(act->spr.pos.Z - ps[p].pos.Z) < 24) if ((ps[p].jetpack_on == 0) || (ps[p].jetpack_on && PlayerInput(p, SB_JUMP)) || (ps[p].jetpack_on && PlayerInput(p, SB_CROUCH))) { @@ -1494,14 +1494,14 @@ void movetransports_r(void) if (isRRRA()) { - if (onfloorz && sectlotag == 160 && ps[p].player_int_pos().Z > (sectp->int_floorz() - (48 << 8))) + if (onfloorz && sectlotag == 160 && ps[p].pos.Z > sectp->floorz - 48) { k = 2; ps[p].pos.Z = Owner->sector()->ceilingz + 7; ps[p].backupz(); } - if (onfloorz && sectlotag == 161 && ps[p].player_int_pos().Z < (sectp->int_ceilingz() + (6 << 8))) + if (onfloorz && sectlotag == 161 && ps[p].pos.Z < sectp->ceilingz + 6) { k = 2; if (ps[p].GetActor()->spr.extra <= 0) break; @@ -1510,7 +1510,7 @@ void movetransports_r(void) } } - if ((onfloorz && sectlotag == ST_1_ABOVE_WATER && ps[p].player_int_pos().Z > (sectp->int_floorz() - (6 << 8))) || + if ((onfloorz && sectlotag == ST_1_ABOVE_WATER && ps[p].pos.Z > sectp->floorz - 6) || (onfloorz && sectlotag == ST_1_ABOVE_WATER && ps[p].OnMotorcycle)) { if (ps[p].OnBoat) break; @@ -1526,7 +1526,7 @@ void movetransports_r(void) ps[p].moto_underwater = 1; } - if (onfloorz && sectlotag == ST_2_UNDERWATER && ps[p].player_int_pos().Z < (sectp->int_ceilingz() + (6 << 8))) + if (onfloorz && sectlotag == ST_2_UNDERWATER && ps[p].pos.Z > sectp->floorz + 6) { k = 1; if (ps[p].GetActor()->spr.extra <= 0) break; @@ -2498,7 +2498,7 @@ static void heavyhbomb(DDukeActor *actor) } } else if (actor->spr.picnum == HEAVYHBOMB && x < 788 && actor->temp_data[0] > 7 && actor->spr.xvel == 0) - if (cansee(actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - (8 << 8), actor->sector(), ps[p].player_int_pos().X, ps[p].player_int_pos().Y, ps[p].player_int_pos().Z, ps[p].cursector)) + if (cansee(actor->spr.pos.plusZ(-8), actor->sector(), ps[p].pos, ps[p].cursector)) if (ps[p].ammo_amount[DYNAMITE_WEAPON] < gs.max_ammo_amount[DYNAMITE_WEAPON]) if (actor->spr.pal == 0) { @@ -3492,8 +3492,8 @@ void move_r(DDukeActor *actor, int pnum, int xvel) if (a & face_player) { if (ps[pnum].newOwner != nullptr) - goalang = getangle(ps[pnum].player_int_opos().X - actor->int_pos().X, ps[pnum].player_int_opos().Y - actor->int_pos().Y); - else goalang = getangle(ps[pnum].player_int_pos().X - actor->int_pos().X, ps[pnum].player_int_pos().Y - actor->int_pos().Y); + goalang = getangle(ps[pnum].opos.XY() - actor->spr.pos.XY()); + else goalang = getangle(ps[pnum].pos.XY() - actor->spr.pos.XY()); angdif = getincangle(actor->spr.ang, goalang) >> 2; if (angdif > -8 && angdif < 0) angdif = 0; actor->spr.ang += angdif; @@ -3505,8 +3505,8 @@ void move_r(DDukeActor *actor, int pnum, int xvel) if (a & face_player_slow) { if (ps[pnum].newOwner != nullptr) - goalang = getangle(ps[pnum].player_int_opos().X - actor->int_pos().X, ps[pnum].player_int_opos().Y - actor->int_pos().Y); - else goalang = getangle(ps[pnum].player_int_pos().X - actor->int_pos().X, ps[pnum].player_int_pos().Y - actor->int_pos().Y); + goalang = getangle(ps[pnum].opos.XY() - actor->spr.pos.XY()); + else goalang = getangle(ps[pnum].pos.XY() - actor->spr.pos.XY()); angdif = Sgn(getincangle(actor->spr.ang, goalang)) << 5; if (angdif > -32 && angdif < 0) { @@ -3521,8 +3521,8 @@ void move_r(DDukeActor *actor, int pnum, int xvel) if (a & antifaceplayerslow) { if (ps[pnum].newOwner != nullptr) - goalang = (getangle(ps[pnum].player_int_opos().X - actor->int_pos().X, ps[pnum].player_int_opos().Y - actor->int_pos().Y) + 1024) & 2047; - else goalang = (getangle(ps[pnum].player_int_pos().X - actor->int_pos().X, ps[pnum].player_int_pos().Y - actor->int_pos().Y) + 1024) & 2047; + goalang = (getangle(ps[pnum].opos.XY() - actor->spr.pos.XY()) + 1024) & 2047; + else goalang = (getangle(ps[pnum].pos.XY() - actor->spr.pos.XY()) + 1024) & 2047; angdif = Sgn(getincangle(actor->spr.ang, goalang)) << 5; if (angdif > -32 && angdif < 0) { @@ -3586,11 +3586,9 @@ void move_r(DDukeActor *actor, int pnum, int xvel) if (a & face_player_smart) { - int newx, newy; - - newx = ps[pnum].player_int_pos().X + (ps[pnum].vel.X / 768); - newy = ps[pnum].player_int_pos().Y + (ps[pnum].vel.Y / 768); - goalang = getangle(newx - actor->int_pos().X, newy - actor->int_pos().Y); + double newx = ps[pnum].pos.X + (ps[pnum].vel.X / 768) * inttoworld; + double newy = ps[pnum].pos.Y + (ps[pnum].vel.Y / 768) * inttoworld; + goalang = getangle(newx - actor->spr.pos.X, newy - actor->spr.pos.Y); angdif = getincangle(actor->spr.ang, goalang) >> 2; if (angdif > -8 && angdif < 0) angdif = 0; actor->spr.ang += angdif; @@ -3689,7 +3687,7 @@ void move_r(DDukeActor *actor, int pnum, int xvel) { daxvel = -(1024 - xvel); - angdif = getangle(ps[pnum].player_int_pos().X - actor->int_pos().X, ps[pnum].player_int_pos().Y - actor->int_pos().Y); + angdif = getangle(ps[pnum].pos.XY() - actor->spr.pos.XY()); if (xvel < 512) { diff --git a/source/games/duke/src/game_misc.cpp b/source/games/duke/src/game_misc.cpp index 2ecbd017fe9..0f21a75e756 100644 --- a/source/games/duke/src/game_misc.cpp +++ b/source/games/duke/src/game_misc.cpp @@ -60,8 +60,8 @@ FString GameInterface::GetCoordString() int snum = screenpeek; FString out; - out.Format("pos= %d, %d, %d - angle = %2.3f - sector = %d, lotag = %d, hitag = %d", - ps[snum].player_int_pos().X, ps[snum].player_int_pos().Y, ps[snum].player_int_pos().Z, ps[snum].angle.ang.asdeg(), sectnum(ps[snum].cursector), + out.Format("pos= %2.3f, %2.3f, %2.3f - angle = %2.3f - sector = %d, lotag = %d, hitag = %d", + ps[snum].pos.X, ps[snum].pos.Y, ps[snum].pos.Z, ps[snum].angle.ang.asdeg(), sectnum(ps[snum].cursector), ps[snum].cursector->lotag, ps[snum].cursector->hitag); return out; @@ -577,7 +577,7 @@ bool GameInterface::DrawAutomapPlayer(int mx, int my, int cposx, int cposy, int else i = TILE_APLAYERTOP; - j = abs(int(pp.truefz * zworldtoint) - pp.player_int_pos().Z) >> 8; + j = abs(int(pp.truefz - pp.pos.Z)); j = czoom * (act->spr.yrepeat + j); if (j < 22000) j = 22000; diff --git a/source/games/duke/src/prediction.cpp b/source/games/duke/src/prediction.cpp index 2ffbedbb2fd..7b29dcce4b4 100644 --- a/source/games/duke/src/prediction.cpp +++ b/source/games/duke/src/prediction.cpp @@ -50,9 +50,9 @@ short myangbak[MOVEFIFOSIZ]; void resetmys() { - myx = omyx = ps[myconnectindex].player_int_pos().X; - myy = omyy = ps[myconnectindex].player_int_pos().Y; - myz = omyz = ps[myconnectindex].player_int_pos().Z; + myx = omyx = ps[myconnectindex].pos.X; + myy = omyy = ps[myconnectindex].pos.Y; + myz = omyz = ps[myconnectindex].pos.Z; myxvel = myyvel = myzvel = 0; myang = ps[myconnectindex].angle.ang; myhoriz = omyhoriz = ps[myconnectindex].horizon.horiz;