diff --git a/doomsday/apps/client/src/render/rend_main.cpp b/doomsday/apps/client/src/render/rend_main.cpp index ac19677209..78ece71ed3 100644 --- a/doomsday/apps/client/src/render/rend_main.cpp +++ b/doomsday/apps/client/src/render/rend_main.cpp @@ -757,7 +757,7 @@ ClientMaterial *Rend_ChooseMapSurfaceMaterial(Surface const &surface) } else if (&surface == &side.top()) { - return static_cast(side.sector().ceiling().surface().materialPtr()); + static_cast(side.sector().ceiling().surface().materialPtr()); } } } @@ -3118,8 +3118,8 @@ static void writeSubspaceSkyMaskStrips(SkyFixEdge::FixType fixType) bool endStrip = false; if (hedge->hasMapElement()) { - scanMaterialOffset += hedge->mapElementAs().length() - * (direction == Anticlockwise? -1 : 1); + scanMaterialOffset += hedge->mapElementAs().length() * + (direction == Anticlockwise ? -1 : 1); // Prepare the edge geometry SkyFixEdge skyEdge(*hedge, fixType, (direction == Anticlockwise)? Line::From : Line::To, diff --git a/doomsday/apps/client/src/render/skyfixedge.cpp b/doomsday/apps/client/src/render/skyfixedge.cpp index fcbdbe147b..f0756ab28a 100644 --- a/doomsday/apps/client/src/render/skyfixedge.cpp +++ b/doomsday/apps/client/src/render/skyfixedge.cpp @@ -28,6 +28,7 @@ #include "Plane" #include "Sector" #include "Surface" +#include "MaterialAnimator" #include "render/rend_main.h" @@ -124,6 +125,9 @@ DENG2_PIMPL(SkyFixEdge) // Only edges with line segments need fixes. if (!hedge->hasMapElement()) return false; + const auto &lineSeg = hedge->mapElementAs(); + const auto &lineSide = lineSeg.lineSide(); + auto const *space = &hedge->face().mapElementAs(); auto const *backSpace = hedge->twin().hasFace() ? &hedge->twin().face().mapElementAs() : nullptr; @@ -135,6 +139,15 @@ DENG2_PIMPL(SkyFixEdge) if (backSubsec && &backSubsec->sector() == &subsec->sector()) return false; + if (lineSide.middle().hasMaterial() && + !lineSide.middle().materialAnimator()->isOpaque() && + ((!lower && !lineSide.top().hasMaterial()) || + (lower && !lineSide.bottom().hasMaterial()))) + { + // Icarus: force fields render hack + return false; + } + // Select the relative planes for the fix type. dint relPlane = lower ? Sector::Floor : Sector::Ceiling; Plane const *front = &subsec->visPlane(relPlane); @@ -143,7 +156,6 @@ DENG2_PIMPL(SkyFixEdge) if (!front->surface().hasSkyMaskedMaterial()) return false; - LineSide const &lineSide = hedge->mapElementAs().lineSide(); bool const hasClosedBack = R_SideBackClosed(lineSide); if (!devRendSkyMode) diff --git a/doomsday/apps/client/src/render/walledge.cpp b/doomsday/apps/client/src/render/walledge.cpp index fbdf30b90d..7f3c99db7b 100644 --- a/doomsday/apps/client/src/render/walledge.cpp +++ b/doomsday/apps/client/src/render/walledge.cpp @@ -29,7 +29,7 @@ #include "world/maputil.h" #include "world/surface.h" #include "client/clientsubsector.h" - +#include "MaterialAnimator" #include "render/rend_main.h" /// devRendSkyMode @todo remove me #include "Face" @@ -342,6 +342,10 @@ struct WallEdge::Impl : public IHPlane LineSide const &lineSide = seg.lineSide(); Surface const &middle = lineSide.middle(); + const bool isExtendedMasked = middle.hasMaterial() && + !middle.materialAnimator()->isOpaque() && + !lineSide.top().hasMaterial(); + if (!line.isSelfReferencing() && ffloor == &subsec.sector().floor()) { lo = de::max(bfloor->heightSmoothed(), ffloor->heightSmoothed());