From acd3304b7e88641109dde22dcb338dd9a454d749 Mon Sep 17 00:00:00 2001 From: Mitchell Richters Date: Thu, 8 Sep 2022 21:27:22 +1000 Subject: [PATCH] - Duke: Give `displayrooms()` a slight tidy-up. --- source/games/duke/src/render.cpp | 67 +++++++++++++------------------- 1 file changed, 27 insertions(+), 40 deletions(-) diff --git a/source/games/duke/src/render.cpp b/source/games/duke/src/render.cpp index ee484351c..8cbe412f2 100644 --- a/source/games/duke/src/render.cpp +++ b/source/games/duke/src/render.cpp @@ -59,12 +59,6 @@ BEGIN_DUKE_NS // //--------------------------------------------------------------------------- -static void renderView(DDukeActor* playersprite, sectortype* sect, const DVector3& cpos, DAngle a, fixedhoriz h, DAngle rotscrnang, double interpfrac, bool sceneonly, float fov) -{ - if (!sceneonly) drawweapon(interpfrac); - render_drawrooms(playersprite, cpos, sectnum(sect), a, h, rotscrnang, interpfrac, fov); -} - //--------------------------------------------------------------------------- // // @@ -225,9 +219,8 @@ void displayrooms(int snum, double interpfrac, bool sceneonly) DVector3 cpos; DAngle cang, rotscrnang; fixedhoriz choriz; - player_struct* p; - p = &ps[snum]; + player_struct* p = &ps[snum]; if (automapMode == am_full || !p->insector()) return; @@ -237,35 +230,34 @@ void displayrooms(int snum, double interpfrac, bool sceneonly) { p->visibility = ud.const_visibility; } - g_visibility = ud.const_visibility; g_relvisibility = p->visibility - ud.const_visibility; - - auto sect = p->cursector; - GlobalMapFog = fogactive ? 0x999999 : 0; GlobalFogDensity = fogactive ? 350.f : 0.f; + DoInterpolations(interpfrac); setgamepalette(BASEPAL); float fov = r_fov; + auto sect = p->cursector; + + DDukeActor* viewer; + bool camview = false; if (ud.cameraactor) { - auto act = ud.cameraactor; + viewer = ud.cameraactor; + camview = true; - if (act->spr.yint < 0) act->spr.yint = -100; - else if (act->spr.yint > 199) act->spr.yint = 300; - - cang = interpolatedvalue(DAngle::fromBuild(ud.cameraactor->tempang), act->spr.angle, interpfrac); - - auto bh = buildhoriz(act->spr.yint); - auto cstat = act->spr.cstat; - act->spr.cstat = CSTAT_SPRITE_INVISIBLE; - renderView(act, act->sector(), act->spr.pos.plusZ(-4), cang, bh, nullAngle, interpfrac, sceneonly, fov); - act->spr.cstat = cstat; + if (viewer->spr.yint < 0) viewer->spr.yint = -100; + else if (viewer->spr.yint > 199) viewer->spr.yint = 300; + cpos = viewer->spr.pos.plusZ(-4); + cang = viewer->interpolatedangle(interpfrac); + choriz = buildhoriz(viewer->spr.yint); + rotscrnang = nullAngle; + sect = viewer->sector(); } else { @@ -275,7 +267,6 @@ void displayrooms(int snum, double interpfrac, bool sceneonly) fov = (float)clamp(r_fov + fovdelta * 0.6, r_fov, 150.); } - // The camera texture must be rendered with the base palette, so this is the only place where the current global palette can be set. // The setting here will be carried over to the rendering of the weapon sprites, but other 2D content will always default to the main palette. setgamepalette(setpal(p)); @@ -283,7 +274,6 @@ void displayrooms(int snum, double interpfrac, bool sceneonly) // set screen rotation. rotscrnang = !SyncInput() ? p->angle.rotscrnang : p->angle.interpolatedrotscrn(interpfrac); -#if 0 if ((snum == myconnectindex) && (numplayers > 1)) { cpos = interpolatedvalue(omypos, mypos, interpfrac); @@ -298,10 +288,8 @@ void displayrooms(int snum, double interpfrac, bool sceneonly) cang = myang; choriz = myhoriz + myhorizoff; } - sect = mycursectnum; } else -#endif { cpos = interpolatedvalue(p->opos, p->pos, interpfrac); @@ -319,18 +307,15 @@ void displayrooms(int snum, double interpfrac, bool sceneonly) } } - DDukeActor* viewer; - bool camview = false; if (p->newOwner != nullptr) { - auto act = p->newOwner; - cang = act->interpolatedangle(interpfrac); - choriz = buildhoriz(act->spr.shade); - cpos = act->spr.pos; - sect = act->sector(); + viewer = p->newOwner; + cang = viewer->interpolatedangle(interpfrac); + choriz = buildhoriz(viewer->spr.shade); + cpos = viewer->spr.pos; + sect = viewer->sector(); rotscrnang = nullAngle; interpfrac = 1.; - viewer = act; camview = true; } else if (p->over_shoulder_on == 0) @@ -374,12 +359,14 @@ void displayrooms(int snum, double interpfrac, bool sceneonly) } choriz = clamp(choriz, q16horiz(gi->playerHorizMin()), q16horiz(gi->playerHorizMax())); - - auto cstat = viewer->spr.cstat; - if (camview) viewer->spr.cstat = CSTAT_SPRITE_INVISIBLE; - renderView(viewer, sect, cpos, cang, choriz, rotscrnang, interpfrac, sceneonly, fov); - viewer->spr.cstat = cstat; } + + auto cstat = viewer->spr.cstat; + if (camview) viewer->spr.cstat = CSTAT_SPRITE_INVISIBLE; + if (!sceneonly) drawweapon(interpfrac); + render_drawrooms(viewer, cpos, sectnum(sect), cang, choriz, rotscrnang, interpfrac, fov); + viewer->spr.cstat = cstat; + //GLInterface.SetMapFog(false); RestoreInterpolations();