From 2fc058e487831af3e994b45b04196516bace6c87 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 8 Sep 2020 23:00:31 +0200 Subject: [PATCH 1/4] - don't autosave just after starting a new game. --- source/core/mainloop.cpp | 5 ++++- source/exhumed/src/status.cpp | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/source/core/mainloop.cpp b/source/core/mainloop.cpp index 5f1ae9b9f..3b691bd6a 100644 --- a/source/core/mainloop.cpp +++ b/source/core/mainloop.cpp @@ -121,6 +121,7 @@ void G_BuildTiccmd(ticcmd_t* cmd) // // //========================================================================== +bool newGameStarted; static void GameTicker() { @@ -171,6 +172,7 @@ static void GameTicker() break; case ga_newgame: + newGameStarted = true; FX_StopAllSounds(); FX_SetReverb(0); gi->FreeLevelData(); @@ -210,7 +212,8 @@ static void GameTicker() break; case ga_autosave: - if (gamestate == GS_LEVEL) M_Autosave(); + if (gamestate == GS_LEVEL && !newGameStarted) M_Autosave(); + newGameStarted = false; break; case ga_level: diff --git a/source/exhumed/src/status.cpp b/source/exhumed/src/status.cpp index 5903662cf..2b151d6e0 100644 --- a/source/exhumed/src/status.cpp +++ b/source/exhumed/src/status.cpp @@ -954,7 +954,7 @@ public: { DrawStatus(); } - PrintLevelStats(hud_size == Hud_Nothing ? 0 : 40); + PrintLevelStats(hud_size == Hud_Nothing ? 0 : hud_size == Hud_full? 22 : 40); } }; From cef1f8275b33dbbf4829cf39ed45ed1df9ecc5cd Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 8 Sep 2020 23:09:40 +0200 Subject: [PATCH 2/4] - fixed backing off of monitor screens. Although this is a blocking condition, it must not neutralize movement because it is needed to move away from the screen and end the camera view. --- source/games/duke/src/input.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/games/duke/src/input.cpp b/source/games/duke/src/input.cpp index e3063d2f8..b34e775ec 100644 --- a/source/games/duke/src/input.cpp +++ b/source/games/duke/src/input.cpp @@ -928,7 +928,7 @@ static void FinalizeInput(int playerNum, InputPacket& input, bool vehicle) auto p = &ps[playerNum]; bool blocked = movementBlocked(playerNum) || sprite[p->i].extra <= 0 || (p->dead_flag && !ud.god); - if (blocked) + if (blocked && ps[playerNum].newowner < 0) { // neutralize all movement when blocked or in automap follow mode loc.fvel = loc.svel = 0; From 9615308fb3e3c5319843d373629144dde6a69e7e Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 8 Sep 2020 23:47:30 +0200 Subject: [PATCH 3/4] - Duke: fixed camera views glitching when changing their targets. A nearly typical problem of this code. Not all relevant properties of the camera target were changed at once - there was a two frame discrepancy in which the camera pointed in some undefined direction after the change. Fixes #15 --- source/games/duke/src/render.cpp | 30 +++++++++++++++++++++++++----- source/games/duke/src/types.h | 2 +- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/source/games/duke/src/render.cpp b/source/games/duke/src/render.cpp index 0b2675980..1f0e90bb7 100644 --- a/source/games/duke/src/render.cpp +++ b/source/games/duke/src/render.cpp @@ -581,17 +581,37 @@ void displayrooms(int snum, double smoothratio) if (p->newowner >= 0) { - fixed_t oang = hittype[p->newowner].oq16ang; - cang = q16ang(oang + xs_CRoundToInt(fmulscale16(((p->q16ang + dang - oang) & 0x7FFFFFF) - dang, smoothratio))); + fixed_t a = IntToFixed(sprite[p->newowner].ang); + if (p->newowner != p->oldowner) + { + p->oldowner = p->newowner; + hittype[p->newowner].oq16ang = a; + cang = q16ang(a); + p->camchangecnt = 3; + } + else if (p->camchangecnt > 0) + { + hittype[p->newowner].oq16ang = a; + cang = q16ang(a); + p->camchangecnt--; + } + else + { + fixed_t oang = hittype[p->newowner].oq16ang; + cang = q16ang(oang + xs_CRoundToInt(fmulscale16(((a + dang - oang) & 0x7FFFFFF) - dang, smoothratio))); + } + cang = q16ang(a); choriz = q16horiz(p->q16horiz + p->q16horizoff); - cposx = p->posx; - cposy = p->posy; - cposz = p->posz; + cposx = sprite[p->newowner].pos.x; + cposy = sprite[p->newowner].pos.y; + cposz = sprite[p->newowner].pos.z; sect = sprite[p->newowner].sectnum; smoothratio = MaxSmoothRatio; } else if (p->over_shoulder_on == 0) { + p->camchangecnt = 0; + p->oldowner = -1; if (cl_viewbob) cposz += p->opyoff + xs_CRoundToInt(fmulscale16(p->pyoff - p->opyoff, smoothratio)); } else view(p, &cposx, &cposy, &cposz, §, cang.asbuild(), choriz.asbuild(), smoothratio); diff --git a/source/games/duke/src/types.h b/source/games/duke/src/types.h index 5aaabaf4f..34b4bc265 100644 --- a/source/games/duke/src/types.h +++ b/source/games/duke/src/types.h @@ -137,7 +137,7 @@ struct player_struct short ammo_amount[MAX_WEAPONS], wackedbyactor, frag, fraggedself; short curr_weapon, last_weapon, tipincs, wantweaponfire; - short holoduke_amount, newowner, hurt_delay, hbomb_hold_delay; + short holoduke_amount, newowner, oldowner, camchangecnt, hurt_delay, hbomb_hold_delay; short jumping_counter, airleft, knee_incs, access_incs; short ftq, access_wallnum, access_spritenum; short got_access, weapon_ang, firstaid_amount; From d6c65613093ce46018524f14cbfb46a24b9dff0c Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Wed, 9 Sep 2020 00:01:14 +0200 Subject: [PATCH 4/4] - that was for testing only. --- source/games/duke/src/player_d.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp index 99a128743..71142a5f4 100644 --- a/source/games/duke/src/player_d.cpp +++ b/source/games/duke/src/player_d.cpp @@ -1723,7 +1723,7 @@ static void movement(int snum, ESyncBits actions, int psect, int fz, int cz, int if ((p->posz + p->poszv) >= (fz - (i << 8))) // hit the ground { - //S_StopSound(DUKE_SCREAM, pi); + S_StopSound(DUKE_SCREAM, pi); if (sector[p->cursectnum].lotag != 1) { if (p->falling_counter > 62) quickkill(p);