From 5a27390eaf0bf130df9ff94ff82835c3bbbdaea1 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 2 Oct 2022 09:52:13 +0200 Subject: [PATCH] - Blood: don't crash when trying to render from outside a sector. --- source/games/blood/src/hudsprites.cpp | 2 +- source/games/blood/src/view.cpp | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/source/games/blood/src/hudsprites.cpp b/source/games/blood/src/hudsprites.cpp index 33ba21b13..dd1d0fb75 100644 --- a/source/games/blood/src/hudsprites.cpp +++ b/source/games/blood/src/hudsprites.cpp @@ -131,7 +131,7 @@ void hudDraw(PLAYER* gView, sectortype* pSector, double bobx, double boby, doubl { cY += (-2048. / 128.); } - int nShade = pSector->floorshade; + int nShade = pSector? pSector->floorshade : 0; int nPalette = 0; if (gView->actor->sector()->hasX()) { sectortype* pViewSect = gView->actor->sector(); diff --git a/source/games/blood/src/view.cpp b/source/games/blood/src/view.cpp index 372a1598d..cc81d12d1 100644 --- a/source/games/blood/src/view.cpp +++ b/source/games/blood/src/view.cpp @@ -565,7 +565,8 @@ void SetupView(int& cX, int& cY, int& cZ, binangle& cA, fixedhoriz& cH, sectorty { calcChaseCamPos((int*)&cX, (int*)&cY, (int*)&cZ, gView->actor, &pSector, cA, cH, gInterpolate); } - CheckLink((int*)&cX, (int*)&cY, (int*)&cZ, &pSector); + if (pSector != nullptr) + CheckLink((int*)&cX, (int*)&cY, (int*)&cZ, &pSector); } //--------------------------------------------------------------------------- @@ -739,16 +740,20 @@ void viewDrawScreen(bool sceneonly) g_relvisibility = (int32_t)(ClipLow(gVisibility - 32 * gView->visibility - brightness, 0)) - g_visibility; cA += interpolatedangle(buildang(deliriumTurnO), buildang(deliriumTurn), gInterpolate); - int ceilingZ, floorZ; - getzsofslopeptr(pSector, cX, cY, &ceilingZ, &floorZ); - if ((cZ > floorZ - (1 << 8)) && (pSector->upperLink == nullptr)) // clamp to floor + if (pSector != nullptr) { - cZ = floorZ - (1 << 8); - } - if ((cZ < ceilingZ + (1 << 8)) && (pSector->lowerLink == nullptr)) // clamp to ceiling - { - cZ = ceilingZ + (1 << 8); + int ceilingZ, floorZ; + getzsofslopeptr(pSector, cX, cY, &ceilingZ, &floorZ); + if ((cZ > floorZ - (1 << 8)) && (pSector->upperLink == nullptr)) // clamp to floor + { + cZ = floorZ - (1 << 8); + } + if ((cZ < ceilingZ + (1 << 8)) && (pSector->lowerLink == nullptr)) // clamp to ceiling + { + cZ = ceilingZ + (1 << 8); + } } + cH = q16horiz(ClipRange(cH.asq16(), gi->playerHorizMin(), gi->playerHorizMax())); if ((tilt.asbam() || bDelirium) && !sceneonly)