From ede52f2ddefa875f4681866f68a6ababc98f07ed Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 5 Feb 2023 13:35:48 +0100 Subject: [PATCH 1/3] - Duke: make the geisha statues shootable again. This got lost in the awful spaghetti code somehow. --- wadsrc/static/zscript/games/duke/actors/destructibles.zs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/wadsrc/static/zscript/games/duke/actors/destructibles.zs b/wadsrc/static/zscript/games/duke/actors/destructibles.zs index 85e409aee..59383bfb5 100644 --- a/wadsrc/static/zscript/games/duke/actors/destructibles.zs +++ b/wadsrc/static/zscript/games/duke/actors/destructibles.zs @@ -43,6 +43,12 @@ class DukeStatueFlash : DukeActor { pic "STATUEFLASH"; } + + override void Initialize() + { + self.clipdist = 32; + self.cstat |= CSTAT_SPRITE_BLOCK_ALL; + } override void OnHit(DukeActor proj) { From f8035bb4babfa765a8c70b5c1982d15909f409c8 Mon Sep 17 00:00:00 2001 From: Mitchell Richters Date: Mon, 6 Feb 2023 19:55:19 +1100 Subject: [PATCH 2/3] - Re-calculate the sector for each eye if it has a shift factor applied. --- source/core/rendering/hw_entrypoint.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/source/core/rendering/hw_entrypoint.cpp b/source/core/rendering/hw_entrypoint.cpp index c35632856..d4ca14aec 100644 --- a/source/core/rendering/hw_entrypoint.cpp +++ b/source/core/rendering/hw_entrypoint.cpp @@ -154,10 +154,17 @@ void RenderViewpoint(FRenderViewpoint& mainvp, IntRect* bounds, float fov, float // Stereo mode specific perspective projection di->VPUniforms.mProjectionMatrix = eye.GetProjection(fov, ratio, fovratio); - // Stereo mode specific viewpoint adjustment - vp.Pos += eye.GetViewShift(vp.HWAngles.Yaw.Degrees()); - di->SetupView(RenderState, vp.Pos.X, vp.Pos.Y, vp.Pos.Z, false, false); + // Stereo mode specific viewpoint adjustment + if (eye.mShiftFactor != 0) + { + vp.Pos += eye.GetViewShift(vp.HWAngles.Yaw.Degrees()); + sectortype* sect = §or[vp.SectCount]; + updatesector(DVector2(vp.Pos.X, -vp.Pos.Y), §); + vp.SectCount = sectindex(sect); + } + + di->SetupView(RenderState, vp.Pos.X, vp.Pos.Y, vp.Pos.Z, false, false); di->ProcessScene(toscreen); if (mainview) From 17392fe400d3e5233db7f02ccf13caa4f7f0328f Mon Sep 17 00:00:00 2001 From: Mitchell Richters Date: Mon, 6 Feb 2023 19:58:08 +1100 Subject: [PATCH 3/3] - Change viewport aspect calculation from 6aa94a9b8ed2a6e0ed5c13d44d17dc926c90088b to be a reciprocal multiplication. --- source/common/statusbar/base_sbar.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/common/statusbar/base_sbar.cpp b/source/common/statusbar/base_sbar.cpp index b1fb2d79a..d7908233c 100644 --- a/source/common/statusbar/base_sbar.cpp +++ b/source/common/statusbar/base_sbar.cpp @@ -368,7 +368,7 @@ void DStatusBarCore::SetScale() double screenaspect = w / double(h); double aspectscale = 1.0; - double ViewportAspect = ViewportPixelAspect(); + const double ViewportAspect = 1. / ViewportPixelAspect(); if ((horz == 320 && vert == 200) || (horz == 640 && vert == 400)) { @@ -387,9 +387,9 @@ void DStatusBarCore::SetScale() refw = h * refaspect; } refw *= hud_scalefactor; - refh *= hud_scalefactor * aspectscale / ViewportAspect; + refh *= hud_scalefactor * aspectscale * ViewportAspect; - int sby = vert - int(RelTop * hud_scalefactor * aspectscale / ViewportAspect); + int sby = vert - int(RelTop * hud_scalefactor * aspectscale * ViewportAspect); // Use full pixels for destination size. ST_X = xs_CRoundToInt((w - refw) / 2);