Skip to content
Permalink
Browse files

Add handling for drawfullheight flag

Parse drawfullheight flag in UDMF
Draw full height for walls if the linedef has this flag
  • Loading branch information
Talon1024 authored and coelckers committed Jan 10, 2020
1 parent b443d07 commit 7ca6e7e5c1d2a6181970548cea1ce7b5ff5a15d3
Showing with 19 additions and 7 deletions.
  1. +1 −0 specs/udmf_zdoom.txt
  2. +4 −0 src/maploader/udmf.cpp
  3. +13 −7 src/rendering/hwrenderer/scene/hw_walls.cpp
  4. +1 −0 src/utility/namedef.h
@@ -141,6 +141,7 @@ Note: All <bool> fields default to false unless mentioned otherwise.
// 13: Portal line.
revealed = <bool>; // true = line is initially visible on automap.
noskywalls = <bool>; // true = skies are not drawn above or below this line
drawfullheight = <bool>; // true = draw the maximum height instead of the minimum height

health = <int>; // Amount of hitpoints for this line.
healthgroup = <int>; // ID of destructible object to synchronize hitpoints (optional, default is 0)
@@ -1078,6 +1078,10 @@ class UDMFParser : public UDMFParserBase
Flag(ld->flags, ML_NOSKYWALLS, key);
continue;

case NAME_DrawFullHeight:
Flag(ld->flags, ML_DRAWFULLHEIGHT, key);
continue;

case NAME_MoreIds:
// delay parsing of the tag string until parsing of the sector is complete
// This ensures that the ID is always the first tag in the list.
@@ -2023,11 +2023,14 @@ void HWWall::Process(HWDrawInfo *di, seg_t *seg, sector_t * frontsector, sector_
float bch1a = bch1, bch2a = bch2;
if (frontsector->GetTexture(sector_t::floor) != skyflatnum || backsector->GetTexture(sector_t::floor) != skyflatnum)
{
// the back sector's floor obstructs part of this wall
if (ffh1 > bch1 && ffh2 > bch2)
// the back sector's floor obstructs part of this wall
if (!seg->linedef->flags & ML_DRAWFULLHEIGHT)
{
bch2a = ffh2;
bch1a = ffh1;
if (ffh1 > bch1 && ffh2 > bch2)
{
bch2a = ffh2;
bch1a = ffh1;
}
}
}

@@ -2105,10 +2108,13 @@ void HWWall::Process(HWDrawInfo *di, seg_t *seg, sector_t * frontsector, sector_

/* bottom texture */
// the back sector's ceiling obstructs part of this wall (specially important for sky sectors)
if (fch1 < bfh1 && fch2 < bfh2)
if (!seg->linedef->flags & ML_DRAWFULLHEIGHT)
{
bfh1 = fch1;
bfh2 = fch2;
if (fch1 < bfh1 && fch2 < bfh2)
{
bfh1 = fch1;
bfh2 = fch2;
}
}

if (bfh1 > ffh1 || bfh2 > ffh2)
@@ -551,6 +551,7 @@ xx(Locknumber)
xx(Midtex3dimpassible)
xx(Revealed)
xx(AutomapStyle)
xx(DrawFullHeight)

xx(Playercross)
xx(Playeruse)

0 comments on commit 7ca6e7e

Please sign in to comment.
You can’t perform that action at this time.