diff --git a/src/am_map.cpp b/src/am_map.cpp index e112621251..5b717e2851 100644 --- a/src/am_map.cpp +++ b/src/am_map.cpp @@ -1935,10 +1935,10 @@ sector_t * AM_FakeFlat(AActor *viewer, sector_t * sec, sector_t * dest) else { in_area = pos.Z <= viewer->Sector->heightsec->floorplane.ZatPoint(pos) ? -1 : - (pos.Z > viewer->Sector->heightsec->ceilingplane.ZatPoint(pos) && !(viewer->Sector->heightsec->MoreFlags&SECF_FAKEFLOORONLY)) ? 1 : 0; + (pos.Z > viewer->Sector->heightsec->ceilingplane.ZatPoint(pos) && !(viewer->Sector->heightsec->MoreFlags&SECMF_FAKEFLOORONLY)) ? 1 : 0; } - int diffTex = (sec->heightsec->MoreFlags & SECF_CLIPFAKEPLANES); + int diffTex = (sec->heightsec->MoreFlags & SECMF_CLIPFAKEPLANES); sector_t * s = sec->heightsec; memcpy(dest, sec, sizeof(sector_t)); @@ -1950,14 +1950,14 @@ sector_t * AM_FakeFlat(AActor *viewer, sector_t * sec, sector_t * dest) if (s->floorplane.CopyPlaneIfValid(&dest->floorplane, &sec->ceilingplane)) { dest->SetTexture(sector_t::floor, s->GetTexture(sector_t::floor), false); - dest->SetPlaneTexZ(sector_t::floor, s->GetPlaneTexZ(sector_t::floor)); + dest->SetPlaneTexZQuick(sector_t::floor, s->GetPlaneTexZ(sector_t::floor)); } - else if (s->MoreFlags & SECF_FAKEFLOORONLY) + else if (s->MoreFlags & SECMF_FAKEFLOORONLY) { if (in_area == -1) { dest->Colormap = s->Colormap; - if (!(s->MoreFlags & SECF_NOFAKELIGHT)) + if (!(s->MoreFlags & SECMF_NOFAKELIGHT)) { dest->lightlevel = s->lightlevel; dest->SetPlaneLight(sector_t::floor, s->GetPlaneLight(sector_t::floor)); @@ -1970,16 +1970,16 @@ sector_t * AM_FakeFlat(AActor *viewer, sector_t * sec, sector_t * dest) } else { - dest->SetPlaneTexZ(sector_t::floor, s->GetPlaneTexZ(sector_t::floor)); + dest->SetPlaneTexZQuick(sector_t::floor, s->GetPlaneTexZ(sector_t::floor)); dest->floorplane = s->floorplane; } if (in_area == -1) { dest->Colormap = s->Colormap; - dest->SetPlaneTexZ(sector_t::floor, sec->GetPlaneTexZ(sector_t::floor)); + dest->SetPlaneTexZQuick(sector_t::floor, sec->GetPlaneTexZ(sector_t::floor)); dest->floorplane = sec->floorplane; - if (!(s->MoreFlags & SECF_NOFAKELIGHT)) + if (!(s->MoreFlags & SECMF_NOFAKELIGHT)) { dest->lightlevel = s->lightlevel; } @@ -1987,7 +1987,7 @@ sector_t * AM_FakeFlat(AActor *viewer, sector_t * sec, sector_t * dest) dest->SetTexture(sector_t::floor, diffTex ? sec->GetTexture(sector_t::floor) : s->GetTexture(sector_t::floor), false); dest->planes[sector_t::floor].xform = s->planes[sector_t::floor].xform; - if (!(s->MoreFlags & SECF_NOFAKELIGHT)) + if (!(s->MoreFlags & SECMF_NOFAKELIGHT)) { dest->SetPlaneLight(sector_t::floor, s->GetPlaneLight(sector_t::floor)); dest->ChangeFlags(sector_t::floor, -1, s->GetFlags(sector_t::floor)); @@ -1996,9 +1996,9 @@ sector_t * AM_FakeFlat(AActor *viewer, sector_t * sec, sector_t * dest) else if (in_area == 1) { dest->Colormap = s->Colormap; - dest->SetPlaneTexZ(sector_t::floor, s->GetPlaneTexZ(sector_t::ceiling)); + dest->SetPlaneTexZQuick(sector_t::floor, s->GetPlaneTexZ(sector_t::ceiling)); dest->floorplane = s->ceilingplane; - if (!(s->MoreFlags & SECF_NOFAKELIGHT)) + if (!(s->MoreFlags & SECMF_NOFAKELIGHT)) { dest->lightlevel = s->lightlevel; } @@ -2011,7 +2011,7 @@ sector_t * AM_FakeFlat(AActor *viewer, sector_t * sec, sector_t * dest) dest->planes[sector_t::floor].xform = s->planes[sector_t::floor].xform; } - if (!(s->MoreFlags & SECF_NOFAKELIGHT)) + if (!(s->MoreFlags & SECMF_NOFAKELIGHT)) { dest->lightlevel = s->lightlevel; dest->SetPlaneLight(sector_t::floor, s->GetPlaneLight(sector_t::floor)); @@ -2048,7 +2048,7 @@ void AM_drawSubsectors() continue; } - if ((!(subsectors[i].flags & SSECF_DRAWN) || (subsectors[i].render_sector->MoreFlags & SECF_HIDDEN)) && am_cheat == 0) + if ((!(subsectors[i].flags & SSECMF_DRAWN) || (subsectors[i].render_sector->MoreFlags & SECMF_HIDDEN)) && am_cheat == 0) { continue; } @@ -2169,7 +2169,7 @@ void AM_drawSubsectors() // If this subsector has not actually been seen yet (because you are cheating // to see it on the map), tint and desaturate it. - if (!(subsectors[i].flags & SSECF_DRAWN)) + if (!(subsectors[i].flags & SSECMF_DRAWN)) { colormap.LightColor = PalEntry( (colormap.LightColor.r + 255) / 2, @@ -3163,8 +3163,8 @@ void AM_drawAuthorMarkers () // Use more correct info if we have GL nodes available if (mark->args[1] == 0 || (mark->args[1] == 1 && (hasglnodes ? - marked->subsector->flags & SSECF_DRAWN : - marked->Sector->MoreFlags & SECF_DRAWN))) + marked->subsector->flags & SSECMF_DRAWN : + marked->Sector->MoreFlags & SECMF_DRAWN))) { DrawMarker (tex, marked->X(), marked->Y(), 0, flip, mark->Scale.X, mark->Scale.Y, mark->Translation, mark->Alpha, mark->fillcolor, mark->RenderStyle); diff --git a/src/gl/scene/gl_bsp.cpp b/src/gl/scene/gl_bsp.cpp index 169b7513ca..2449fce9ec 100644 --- a/src/gl/scene/gl_bsp.cpp +++ b/src/gl/scene/gl_bsp.cpp @@ -99,11 +99,11 @@ void GLSceneDrawer::AddLine (seg_t *seg, bool portalclip) if (seg->sidedef == NULL) { - if (!(currentsubsector->flags & SSECF_DRAWN)) + if (!(currentsubsector->flags & SSECMF_DRAWN)) { if (clipper.SafeCheckRange(startAngle, endAngle)) { - currentsubsector->flags |= SSECF_DRAWN; + currentsubsector->flags |= SSECMF_DRAWN; } } return; @@ -113,7 +113,7 @@ void GLSceneDrawer::AddLine (seg_t *seg, bool portalclip) { return; } - currentsubsector->flags |= SSECF_DRAWN; + currentsubsector->flags |= SSECMF_DRAWN; uint8_t ispoly = uint8_t(seg->sidedef->Flags & WALLF_POLYOBJ); @@ -137,7 +137,7 @@ void GLSceneDrawer::AddLine (seg_t *seg, bool portalclip) } backsector=currentsector; } - else + else { // clipping checks are only needed when the backsector is not the same as the front sector if (in_area == area_default) in_area = hw_CheckViewArea(seg->v1, seg->v2, seg->frontsector, seg->backsector); @@ -289,7 +289,7 @@ void GLSceneDrawer::AddLines(subsector_t * sub, sector_t * sector) { if (seg->linedef == NULL) { - if (!(sub->flags & SSECF_DRAWN)) AddLine (seg, GLRenderer->mClipPortal != NULL); + if (!(sub->flags & SSECMF_DRAWN)) AddLine (seg, GLRenderer->mClipPortal != NULL); } else if (!(seg->sidedef->Flags & WALLF_POLYOBJ)) { @@ -485,7 +485,7 @@ void GLSceneDrawer::DoSubsector(subsector_t * sub) { RenderThings(sub, fakesector); } - sector->MoreFlags |= SECF_DRAWN; + sector->MoreFlags |= SECMF_DRAWN; } if (gl_render_flats) diff --git a/src/gl/scene/gl_scene.cpp b/src/gl/scene/gl_scene.cpp index 99cb6e112c..14c5d432fb 100644 --- a/src/gl/scene/gl_scene.cpp +++ b/src/gl/scene/gl_scene.cpp @@ -107,7 +107,7 @@ void GLSceneDrawer::SetViewArea() { in_area = r_viewpoint.Pos.Z <= r_viewpoint.sector->heightsec->floorplane.ZatPoint(r_viewpoint.Pos) ? area_below : (r_viewpoint.Pos.Z > r_viewpoint.sector->heightsec->ceilingplane.ZatPoint(r_viewpoint.Pos) && - !(r_viewpoint.sector->heightsec->MoreFlags&SECF_FAKEFLOORONLY)) ? area_above : area_normal; + !(r_viewpoint.sector->heightsec->MoreFlags&SECMF_FAKEFLOORONLY)) ? area_above : area_normal; } else { diff --git a/src/hwrenderer/scene/hw_fakeflat.cpp b/src/hwrenderer/scene/hw_fakeflat.cpp index 3b0c350429..0e22e276ff 100644 --- a/src/hwrenderer/scene/hw_fakeflat.cpp +++ b/src/hwrenderer/scene/hw_fakeflat.cpp @@ -191,18 +191,15 @@ sector_t * hw_FakeFlat(sector_t * sec, sector_t * dest, area_t in_area, bool bac { // check for backsectors with the ceiling lower than the floor. These will create // visual glitches because upper amd lower textures overlap. - if (back && sec->planes[sector_t::floor].TexZ > sec->planes[sector_t::ceiling].TexZ) + if (back && (sec->MoreFlags & SECMF_OVERLAPPING)) { - if (!sec->floorplane.isSlope() && !sec->ceilingplane.isSlope()) - { - *dest = *sec; - dest->ceilingplane=sec->floorplane; - dest->ceilingplane.FlipVert(); - dest->planes[sector_t::ceiling].TexZ = dest->planes[sector_t::floor].TexZ; - dest->ClearPortal(sector_t::ceiling); - dest->ClearPortal(sector_t::floor); - return dest; - } + *dest = *sec; + dest->ceilingplane = sec->floorplane; + dest->ceilingplane.FlipVert(); + dest->planes[sector_t::ceiling].TexZ = dest->planes[sector_t::floor].TexZ; + dest->ClearPortal(sector_t::ceiling); + dest->ClearPortal(sector_t::floor); + return dest; } return sec; } @@ -216,10 +213,10 @@ sector_t * hw_FakeFlat(sector_t * sec, sector_t * dest, area_t in_area, bool bac if (in_area==area_above) { - if (sec->heightsec->MoreFlags&SECF_FAKEFLOORONLY /*|| sec->GetTexture(sector_t::ceiling)==skyflatnum*/) in_area=area_normal; + if (sec->heightsec->MoreFlags&SECMF_FAKEFLOORONLY /*|| sec->GetTexture(sector_t::ceiling)==skyflatnum*/) in_area=area_normal; } - int diffTex = (sec->heightsec->MoreFlags & SECF_CLIPFAKEPLANES); + int diffTex = (sec->heightsec->MoreFlags & SECMF_CLIPFAKEPLANES); sector_t * s = sec->heightsec; #if 0 @@ -234,16 +231,16 @@ sector_t * hw_FakeFlat(sector_t * sec, sector_t * dest, area_t in_area, bool bac if (s->floorplane.CopyPlaneIfValid (&dest->floorplane, &sec->ceilingplane)) { dest->SetTexture(sector_t::floor, s->GetTexture(sector_t::floor), false); - dest->SetPlaneTexZ(sector_t::floor, s->GetPlaneTexZ(sector_t::floor)); + dest->SetPlaneTexZQuick(sector_t::floor, s->GetPlaneTexZ(sector_t::floor)); dest->vboindex[sector_t::floor] = sec->vboindex[sector_t::vbo_fakefloor]; dest->vboheight[sector_t::floor] = s->vboheight[sector_t::floor]; } - else if (s->MoreFlags & SECF_FAKEFLOORONLY) + else if (s->MoreFlags & SECMF_FAKEFLOORONLY) { if (in_area==area_below) { dest->CopyColors(s); - if (!(s->MoreFlags & SECF_NOFAKELIGHT)) + if (!(s->MoreFlags & SECMF_NOFAKELIGHT)) { dest->lightlevel = s->lightlevel; dest->SetPlaneLight(sector_t::floor, s->GetPlaneLight(sector_t::floor)); @@ -258,21 +255,21 @@ sector_t * hw_FakeFlat(sector_t * sec, sector_t * dest, area_t in_area, bool bac } else { - dest->SetPlaneTexZ(sector_t::floor, s->GetPlaneTexZ(sector_t::floor)); + dest->SetPlaneTexZQuick(sector_t::floor, s->GetPlaneTexZ(sector_t::floor)); dest->floorplane = s->floorplane; dest->vboindex[sector_t::floor] = sec->vboindex[sector_t::vbo_fakefloor]; dest->vboheight[sector_t::floor] = s->vboheight[sector_t::floor]; } - if (!(s->MoreFlags&SECF_FAKEFLOORONLY)) + if (!(s->MoreFlags&SECMF_FAKEFLOORONLY)) { if (diffTex) { if (s->ceilingplane.CopyPlaneIfValid (&dest->ceilingplane, &sec->floorplane)) { dest->SetTexture(sector_t::ceiling, s->GetTexture(sector_t::ceiling), false); - dest->SetPlaneTexZ(sector_t::ceiling, s->GetPlaneTexZ(sector_t::ceiling)); + dest->SetPlaneTexZQuick(sector_t::ceiling, s->GetPlaneTexZ(sector_t::ceiling)); dest->vboindex[sector_t::ceiling] = sec->vboindex[sector_t::vbo_fakeceiling]; dest->vboheight[sector_t::ceiling] = s->vboheight[sector_t::ceiling]; } @@ -280,7 +277,7 @@ sector_t * hw_FakeFlat(sector_t * sec, sector_t * dest, area_t in_area, bool bac else { dest->ceilingplane = s->ceilingplane; - dest->SetPlaneTexZ(sector_t::ceiling, s->GetPlaneTexZ(sector_t::ceiling)); + dest->SetPlaneTexZQuick(sector_t::ceiling, s->GetPlaneTexZ(sector_t::ceiling)); dest->vboindex[sector_t::ceiling] = sec->vboindex[sector_t::vbo_fakeceiling]; dest->vboheight[sector_t::ceiling] = s->vboheight[sector_t::ceiling]; } @@ -289,8 +286,8 @@ sector_t * hw_FakeFlat(sector_t * sec, sector_t * dest, area_t in_area, bool bac if (in_area==area_below) { dest->CopyColors(s); - dest->SetPlaneTexZ(sector_t::floor, sec->GetPlaneTexZ(sector_t::floor)); - dest->SetPlaneTexZ(sector_t::ceiling, s->GetPlaneTexZ(sector_t::floor)); + dest->SetPlaneTexZQuick(sector_t::floor, sec->GetPlaneTexZ(sector_t::floor)); + dest->SetPlaneTexZQuick(sector_t::ceiling, s->GetPlaneTexZ(sector_t::floor)); dest->floorplane=sec->floorplane; dest->ceilingplane=s->floorplane; dest->ceilingplane.FlipVert(); @@ -303,7 +300,7 @@ sector_t * hw_FakeFlat(sector_t * sec, sector_t * dest, area_t in_area, bool bac dest->ClearPortal(sector_t::ceiling); - if (!(s->MoreFlags & SECF_NOFAKELIGHT)) + if (!(s->MoreFlags & SECMF_NOFAKELIGHT)) { dest->lightlevel = s->lightlevel; } @@ -330,7 +327,7 @@ sector_t * hw_FakeFlat(sector_t * sec, sector_t * dest, area_t in_area, bool bac dest->planes[sector_t::ceiling].xform = s->planes[sector_t::ceiling].xform; } - if (!(s->MoreFlags & SECF_NOFAKELIGHT)) + if (!(s->MoreFlags & SECMF_NOFAKELIGHT)) { dest->SetPlaneLight(sector_t::floor, s->GetPlaneLight(sector_t::floor)); dest->SetPlaneLight(sector_t::ceiling, s->GetPlaneLight(sector_t::ceiling)); @@ -342,8 +339,8 @@ sector_t * hw_FakeFlat(sector_t * sec, sector_t * dest, area_t in_area, bool bac else if (in_area == area_above) { dest->CopyColors(s); - dest->SetPlaneTexZ(sector_t::ceiling, sec->GetPlaneTexZ(sector_t::ceiling)); - dest->SetPlaneTexZ(sector_t::floor, s->GetPlaneTexZ(sector_t::ceiling)); + dest->SetPlaneTexZQuick(sector_t::ceiling, sec->GetPlaneTexZ(sector_t::ceiling)); + dest->SetPlaneTexZQuick(sector_t::floor, s->GetPlaneTexZ(sector_t::ceiling)); dest->ceilingplane = sec->ceilingplane; dest->floorplane = s->ceilingplane; dest->floorplane.FlipVert(); @@ -356,7 +353,7 @@ sector_t * hw_FakeFlat(sector_t * sec, sector_t * dest, area_t in_area, bool bac dest->ClearPortal(sector_t::floor); - if (!(s->MoreFlags & SECF_NOFAKELIGHT)) + if (!(s->MoreFlags & SECMF_NOFAKELIGHT)) { dest->lightlevel = s->lightlevel; } @@ -373,7 +370,7 @@ sector_t * hw_FakeFlat(sector_t * sec, sector_t * dest, area_t in_area, bool bac dest->planes[sector_t::floor].xform = s->planes[sector_t::floor].xform; } - if (!(s->MoreFlags & SECF_NOFAKELIGHT)) + if (!(s->MoreFlags & SECMF_NOFAKELIGHT)) { dest->lightlevel = s->lightlevel; dest->SetPlaneLight(sector_t::floor, s->GetPlaneLight(sector_t::floor)); diff --git a/src/p_glnodes.cpp b/src/p_glnodes.cpp index 576affe246..0113208a10 100644 --- a/src/p_glnodes.cpp +++ b/src/p_glnodes.cpp @@ -1329,7 +1329,7 @@ void P_SetRenderSector() } for(i = 0; i < numsectors; i++) { - if (hidesec[i]) sectors[i].MoreFlags |= SECF_HIDDEN; + if (hidesec[i]) sectors[i].MoreFlags |= SECMF_HIDDEN; } delete [] hidesec; #endif diff --git a/src/p_map.cpp b/src/p_map.cpp index f01e55dcde..7a503a62bb 100644 --- a/src/p_map.cpp +++ b/src/p_map.cpp @@ -2682,7 +2682,7 @@ bool P_TryMove(AActor *thing, const DVector2 &pos, newsec->TriggerSectorActions(thing, SECSPAC_EyesDive); } - if (!(hs->MoreFlags & SECF_FAKEFLOORONLY)) + if (!(hs->MoreFlags & SECMF_FAKEFLOORONLY)) { fakez = hs->ceilingplane.ZatPoint(pos); if (!oldAboveFakeCeiling && eyez > fakez) @@ -6872,7 +6872,7 @@ bool P_ChangeSector(sector_t *sector, int crunch, double amt, int floorOrCeil, b if (floorOrCeil != 2) sector->CheckPortalPlane(floorOrCeil); // check for portal obstructions after everything is done. - if (!cpos.nofit && !isreset /* && sector->MoreFlags & (SECF_UNDERWATERMASK)*/) + if (!cpos.nofit && !isreset /* && sector->MoreFlags & (SECMF_UNDERWATERMASK)*/) { // If this is a control sector for a deep water transfer, all actors in affected // sectors need to have their waterlevel information updated and if applicable, diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index 25d846e017..a00cb7f10b 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -3261,7 +3261,7 @@ void P_CheckFakeFloorTriggers (AActor *mo, double oldz, bool oldz_has_viewheight sec->TriggerSectorActions (mo, SECSPAC_EyesDive); } - if (!(hs->MoreFlags & SECF_FAKEFLOORONLY)) + if (!(hs->MoreFlags & SECMF_FAKEFLOORONLY)) { waterz = hs->ceilingplane.ZatPoint(mo); if (oldz <= waterz && newz > waterz) @@ -4731,7 +4731,7 @@ void AActor::SplashCheck() return; } - if (Sector->MoreFlags & SECF_UNDERWATER) // intentionally not SECF_UNDERWATERMASK + if (Sector->MoreFlags & SECMF_UNDERWATER) // intentionally not SECMF_UNDERWATERMASK { waterlevel = 3; } @@ -4741,7 +4741,7 @@ void AActor::SplashCheck() if (hsec != NULL) { fh = hsec->floorplane.ZatPoint(this); - //if (hsec->MoreFlags & SECF_UNDERWATERMASK) // also check Boom-style non-swimmable sectors + //if (hsec->MoreFlags & SECMF_UNDERWATERMASK) // also check Boom-style non-swimmable sectors { if (Z() < fh) { @@ -4756,7 +4756,7 @@ void AActor::SplashCheck() } } } - else if (!(hsec->MoreFlags & SECF_FAKEFLOORONLY) && (Top() > hsec->ceilingplane.ZatPoint(this))) + else if (!(hsec->MoreFlags & SECMF_FAKEFLOORONLY) && (Top() > hsec->ceilingplane.ZatPoint(this))) { waterlevel = 3; } @@ -4833,7 +4833,7 @@ bool AActor::UpdateWaterLevel(bool dosplash) return false; } - if (Sector->MoreFlags & SECF_UNDERWATER) // intentionally not SECF_UNDERWATERMASK + if (Sector->MoreFlags & SECMF_UNDERWATER) // intentionally not SECMF_UNDERWATERMASK { waterlevel = 3; } @@ -4843,7 +4843,7 @@ bool AActor::UpdateWaterLevel(bool dosplash) if (hsec != NULL) { fh = hsec->floorplane.ZatPoint(this); - if (hsec->MoreFlags & SECF_UNDERWATERMASK) // also check Boom-style non-swimmable sectors + if (hsec->MoreFlags & SECMF_UNDERWATERMASK) // also check Boom-style non-swimmable sectors { if (Z() < fh) { @@ -4858,7 +4858,7 @@ bool AActor::UpdateWaterLevel(bool dosplash) } } } - else if (!(hsec->MoreFlags & SECF_FAKEFLOORONLY) && (Top() > hsec->ceilingplane.ZatPoint(this))) + else if (!(hsec->MoreFlags & SECMF_FAKEFLOORONLY) && (Top() > hsec->ceilingplane.ZatPoint(this))) { waterlevel = 3; } @@ -6562,7 +6562,7 @@ bool P_HitWater (AActor * thing, sector_t * sec, const DVector3 &pos, bool check } } hsec = sec->GetHeightSec(); - if (force || hsec == NULL || !(hsec->MoreFlags & SECF_CLIPFAKEPLANES)) + if (force || hsec == NULL || !(hsec->MoreFlags & SECMF_CLIPFAKEPLANES)) { terrainnum = sec->GetTerrain(sector_t::floor); } diff --git a/src/p_saveg.cpp b/src/p_saveg.cpp index acf0ac5f25..3eb98b8083 100644 --- a/src/p_saveg.cpp +++ b/src/p_saveg.cpp @@ -327,7 +327,7 @@ void RecalculateDrawnSubsectors() if (sub.firstline[j].linedef != NULL && (sub.firstline[j].linedef->flags & ML_MAPPED)) { - sub.flags |= SSECF_DRAWN; + sub.flags |= SSECMF_DRAWN; } } } @@ -356,7 +356,7 @@ FSerializer &SerializeSubsectors(FSerializer &arc, const char *key) by = 0; for (unsigned j = 0; j < 6; j++) { - if (i + j < numsubsectors && (level.subsectors[i + j].flags & SSECF_DRAWN)) + if (i + j < numsubsectors && (level.subsectors[i + j].flags & SSECMF_DRAWN)) { by |= (1 << j); } @@ -412,7 +412,7 @@ FSerializer &SerializeSubsectors(FSerializer &arc, const char *key) { if (sub + s < (int)numsubsectors && (by & (1 << s))) { - level.subsectors[sub + s].flags |= SSECF_DRAWN; + level.subsectors[sub + s].flags |= SSECMF_DRAWN; } } sub += 6; diff --git a/src/p_sectors.cpp b/src/p_sectors.cpp index b5f10b69ee..831062fc03 100644 --- a/src/p_sectors.cpp +++ b/src/p_sectors.cpp @@ -1653,6 +1653,26 @@ DEFINE_ACTION_FUNCTION(_Sector, NextLowestFloorAt) ACTION_RETURN_BOOL(self->TriggerSectorActions(thing, activation)); } + //=========================================================================== + // + // checks if the floor is higher than the ceiling and sets a flag + // This condition needs to be tested by the hardware renderer, + // so always having its state available in a flag allows for easier optimization. + // + //=========================================================================== + + void sector_t::CheckOverlap() + { + if (planes[sector_t::floor].TexZ > planes[sector_t::ceiling].TexZ && !floorplane.isSlope() && !ceilingplane.isSlope()) + { + MoreFlags |= SECMF_OVERLAPPING; + } + else + { + MoreFlags &= ~SECMF_OVERLAPPING; + } + } + //=========================================================================== // // @@ -1857,7 +1877,7 @@ DEFINE_ACTION_FUNCTION(_Sector, NextLowestFloorAt) PARAM_INT(pos); PARAM_FLOAT(o); PARAM_BOOL_DEF(dirty); - self->SetPlaneTexZ(pos, o, dirty); + self->SetPlaneTexZ(pos, o, true); // not setting 'dirty' here is a guaranteed cause for problems. return 0; } diff --git a/src/p_setup.cpp b/src/p_setup.cpp index 50733318ab..56850f6a01 100644 --- a/src/p_setup.cpp +++ b/src/p_setup.cpp @@ -4232,7 +4232,7 @@ void P_SetupLevel (const char *lumpname, int position) { if ((ff->flags & (FF_EXISTS | FF_RENDERPLANES)) == (FF_EXISTS | FF_RENDERPLANES)) { - s.MoreFlags |= SECF_IGNOREHEIGHTSEC; // mark the heightsec inactive. + s.MoreFlags |= SECMF_IGNOREHEIGHTSEC; // mark the heightsec inactive. } } } diff --git a/src/p_spec.cpp b/src/p_spec.cpp index 3c140f5f78..5b32b410ad 100644 --- a/src/p_spec.cpp +++ b/src/p_spec.cpp @@ -698,15 +698,15 @@ CUSTOM_CVAR (Bool, forcewater, false, CVAR_ARCHIVE|CVAR_SERVERINFO) for (auto &sec : level.sectors) { sector_t *hsec = sec.GetHeightSec(); - if (hsec && !(hsec->MoreFlags & SECF_UNDERWATER)) + if (hsec && !(hsec->MoreFlags & SECMF_UNDERWATER)) { if (self) { - hsec->MoreFlags |= SECF_FORCEDUNDERWATER; + hsec->MoreFlags |= SECMF_FORCEDUNDERWATER; } else { - hsec->MoreFlags &= ~SECF_FORCEDUNDERWATER; + hsec->MoreFlags &= ~SECMF_FORCEDUNDERWATER; } } } @@ -1248,7 +1248,7 @@ void P_InitSectorSpecial(sector_t *sector, int special) break; case Sector_Hidden: - sector->MoreFlags |= SECF_HIDDEN; + sector->MoreFlags |= SECMF_HIDDEN; break; case Sector_Heal: @@ -1346,35 +1346,35 @@ void P_SpawnSpecials (void) if (line.args[1] & 2) { - sec->MoreFlags |= SECF_FAKEFLOORONLY; + sec->MoreFlags |= SECMF_FAKEFLOORONLY; } if (line.args[1] & 4) { - sec->MoreFlags |= SECF_CLIPFAKEPLANES; + sec->MoreFlags |= SECMF_CLIPFAKEPLANES; } if (line.args[1] & 8) { - sec->MoreFlags |= SECF_UNDERWATER; + sec->MoreFlags |= SECMF_UNDERWATER; } else if (forcewater) { - sec->MoreFlags |= SECF_FORCEDUNDERWATER; + sec->MoreFlags |= SECMF_FORCEDUNDERWATER; } if (line.args[1] & 16) { - sec->MoreFlags |= SECF_IGNOREHEIGHTSEC; + sec->MoreFlags |= SECMF_IGNOREHEIGHTSEC; } else level.HasHeightSecs = true; if (line.args[1] & 32) { - sec->MoreFlags |= SECF_NOFAKELIGHT; + sec->MoreFlags |= SECMF_NOFAKELIGHT; } FSectorTagIterator itr(line.args[0]); while ((s = itr.Next()) >= 0) { level.sectors[s].heightsec = sec; sec->e->FakeFloor.Sectors.Push(&level.sectors[s]); - level.sectors[s].MoreFlags |= (sec->MoreFlags & SECF_IGNOREHEIGHTSEC); // copy this to the destination sector for easier checking. + level.sectors[s].MoreFlags |= (sec->MoreFlags & SECMF_IGNOREHEIGHTSEC); // copy this to the destination sector for easier checking. level.sectors[s].AdjustFloorClip(); } break; diff --git a/src/p_udmf.cpp b/src/p_udmf.cpp index 21d541bfb5..24a7fd5fd0 100644 --- a/src/p_udmf.cpp +++ b/src/p_udmf.cpp @@ -1578,11 +1578,11 @@ public: continue; case NAME_hidden: - Flag(sec->MoreFlags, SECF_HIDDEN, key); + Flag(sec->MoreFlags, SECMF_HIDDEN, key); break; case NAME_Waterzone: - Flag(sec->MoreFlags, SECF_UNDERWATER, key); + Flag(sec->MoreFlags, SECMF_UNDERWATER, key); break; case NAME_floorplane_a: diff --git a/src/polyrenderer/scene/poly_scene.cpp b/src/polyrenderer/scene/poly_scene.cpp index 100ca13245..a446eba4cc 100644 --- a/src/polyrenderer/scene/poly_scene.cpp +++ b/src/polyrenderer/scene/poly_scene.cpp @@ -131,7 +131,7 @@ void RenderPolyScene::RenderSectors() void RenderPolyScene::RenderSubsector(PolyRenderThread *thread, subsector_t *sub, uint32_t subsectorDepth) { sector_t *frontsector = sub->sector; - frontsector->MoreFlags |= SECF_DRAWN; + frontsector->MoreFlags |= SECMF_DRAWN; bool mainBSP = sub->polys == nullptr; @@ -234,7 +234,7 @@ void RenderPolyScene::RenderPolySubsector(PolyRenderThread *thread, subsector_t if (!PolyRenderer::Instance()->DontMapLines && line->linedef) { line->linedef->flags |= ML_MAPPED; - sub->flags |= SSECF_DRAWN; + sub->flags |= SSECMF_DRAWN; } RenderPolyWall::RenderLine(thread, line, frontsector, subsectorDepth, CurrentViewpoint->StencilValue, thread->TranslucentObjects, thread->LinePortals, CurrentViewpoint->LinePortalsStart, CurrentViewpoint->PortalEnterLine); @@ -302,7 +302,7 @@ void RenderPolyScene::RenderLine(PolyRenderThread *thread, subsector_t *sub, seg if (!PolyRenderer::Instance()->DontMapLines && line->linedef) { line->linedef->flags |= ML_MAPPED; - sub->flags |= SSECF_DRAWN; + sub->flags |= SSECMF_DRAWN; } // Render 3D floor sides @@ -425,7 +425,7 @@ PolyTransferHeights::PolyTransferHeights(subsector_t *sub) : Subsector(sub) sector_t *heightsec = PolyRenderer::Instance()->Viewpoint.sector->heightsec; bool underwater = (heightsec && heightsec->floorplane.PointOnSide(PolyRenderer::Instance()->Viewpoint.Pos) <= 0); bool doorunderwater = false; - int diffTex = (s->MoreFlags & SECF_CLIPFAKEPLANES); + int diffTex = (s->MoreFlags & SECMF_CLIPFAKEPLANES); // Replace sector being drawn with a copy to be hacked tempsec = *sec; @@ -437,12 +437,12 @@ PolyTransferHeights::PolyTransferHeights(subsector_t *sub) : Subsector(sub) { tempsec.SetTexture(sector_t::floor, s->GetTexture(sector_t::floor), false); } - else if (s->MoreFlags & SECF_FAKEFLOORONLY) + else if (s->MoreFlags & SECMF_FAKEFLOORONLY) { if (underwater) { tempsec.Colormap = s->Colormap; - if (!(s->MoreFlags & SECF_NOFAKELIGHT)) + if (!(s->MoreFlags & SECMF_NOFAKELIGHT)) { tempsec.lightlevel = s->lightlevel; @@ -462,7 +462,7 @@ PolyTransferHeights::PolyTransferHeights(subsector_t *sub) : Subsector(sub) tempsec.floorplane = s->floorplane; } - if (!(s->MoreFlags & SECF_FAKEFLOORONLY)) + if (!(s->MoreFlags & SECMF_FAKEFLOORONLY)) { if (diffTex) { @@ -513,7 +513,7 @@ PolyTransferHeights::PolyTransferHeights(subsector_t *sub) : Subsector(sub) tempsec.planes[sector_t::ceiling].xform = s->planes[sector_t::ceiling].xform; } - if (!(s->MoreFlags & SECF_NOFAKELIGHT)) + if (!(s->MoreFlags & SECMF_NOFAKELIGHT)) { tempsec.lightlevel = s->lightlevel; @@ -522,7 +522,7 @@ PolyTransferHeights::PolyTransferHeights(subsector_t *sub) : Subsector(sub) } FakeSide = PolyWaterFakeSide::BelowFloor; } - else if (heightsec && heightsec->ceilingplane.PointOnSide(PolyRenderer::Instance()->Viewpoint.Pos) <= 0 && orgceilz > refceilz && !(s->MoreFlags & SECF_FAKEFLOORONLY)) + else if (heightsec && heightsec->ceilingplane.PointOnSide(PolyRenderer::Instance()->Viewpoint.Pos) <= 0 && orgceilz > refceilz && !(s->MoreFlags & SECMF_FAKEFLOORONLY)) { // Above-ceiling hack tempsec.ceilingplane = s->ceilingplane; @@ -542,7 +542,7 @@ PolyTransferHeights::PolyTransferHeights(subsector_t *sub) : Subsector(sub) tempsec.planes[sector_t::floor].xform = s->planes[sector_t::floor].xform; } - if (!(s->MoreFlags & SECF_NOFAKELIGHT)) + if (!(s->MoreFlags & SECMF_NOFAKELIGHT)) { tempsec.lightlevel = s->lightlevel; diff --git a/src/r_defs.h b/src/r_defs.h index 2ab250d1d0..49a6d244d7 100644 --- a/src/r_defs.h +++ b/src/r_defs.h @@ -469,15 +469,16 @@ enum // Internal sector flags enum { - SECF_FAKEFLOORONLY = 2, // when used as heightsec in R_FakeFlat, only copies floor - SECF_CLIPFAKEPLANES = 4, // as a heightsec, clip planes to target sector's planes - SECF_NOFAKELIGHT = 8, // heightsec does not change lighting - SECF_IGNOREHEIGHTSEC= 16, // heightsec is only for triggering sector actions - SECF_UNDERWATER = 32, // sector is underwater - SECF_FORCEDUNDERWATER= 64, // sector is forced to be underwater - SECF_UNDERWATERMASK = 32+64, - SECF_DRAWN = 128, // sector has been drawn at least once - SECF_HIDDEN = 256, // Do not draw on textured automap + SECMF_FAKEFLOORONLY = 2, // when used as heightsec in R_FakeFlat, only copies floor + SECMF_CLIPFAKEPLANES = 4, // as a heightsec, clip planes to target sector's planes + SECMF_NOFAKELIGHT = 8, // heightsec does not change lighting + SECMF_IGNOREHEIGHTSEC = 16, // heightsec is only for triggering sector actions + SECMF_UNDERWATER = 32, // sector is underwater + SECMF_FORCEDUNDERWATER = 64, // sector is forced to be underwater + SECMF_UNDERWATERMASK = 32+64, + SECMF_DRAWN = 128, // sector has been drawn at least once + SECMF_HIDDEN = 256, // Do not draw on textured automap + SECMF_OVERLAPPING = 512, // floor and ceiling overlap and require special renderer action. }; enum @@ -657,7 +658,7 @@ public: sector_t *GetHeightSec() const { - return (MoreFlags & SECF_IGNOREHEIGHTSEC)? nullptr : heightsec; + return (MoreFlags & SECMF_IGNOREHEIGHTSEC)? nullptr : heightsec; } double GetFriction(int plane = sector_t::floor, double *movefac = NULL) const; @@ -851,15 +852,23 @@ public: return planes[pos].TexZ; } + void SetPlaneTexZQuick(int pos, double val) // For the *FakeFlat functions which do not need to have the overlap checked. + { + planes[pos].TexZ = val; + } + void SetPlaneTexZ(int pos, double val, bool dirtify = false) // This mainly gets used by init code. The only place where it must set the vertex to dirty is the interpolation code. { planes[pos].TexZ = val; if (dirtify) SetAllVerticesDirty(); + CheckOverlap(); } void ChangePlaneTexZ(int pos, double val) { planes[pos].TexZ += val; + SetAllVerticesDirty(); + CheckOverlap(); } static inline short ClampLight(int level) @@ -930,6 +939,7 @@ public: DVector2 GetPortalDisplacement(int plane); int GetPortalType(int plane); int GetOppositePortalGroup(int plane); + void CheckOverlap(); void SetVerticesDirty() { @@ -1416,7 +1426,7 @@ struct seg_t enum { SSECF_DEGENERATE = 1, - SSECF_DRAWN = 2, + SSECMF_DRAWN = 2, SSECF_POLYORG = 4, }; diff --git a/src/swrenderer/line/r_line.cpp b/src/swrenderer/line/r_line.cpp index 8865199f3a..81e0280e2a 100644 --- a/src/swrenderer/line/r_line.cpp +++ b/src/swrenderer/line/r_line.cpp @@ -101,7 +101,7 @@ namespace swrenderer { if (Thread->ClipSegments->Check(WallC.sx1, WallC.sx2)) { - mSubsector->flags |= SSECF_DRAWN; + mSubsector->flags |= SSECMF_DRAWN; } return; } @@ -171,11 +171,11 @@ namespace swrenderer { // When using GL nodes, do a clipping test for these lines so we can // mark their subsectors as visible for automap texturing. - if (hasglnodes && !(mSubsector->flags & SSECF_DRAWN)) + if (hasglnodes && !(mSubsector->flags & SSECMF_DRAWN)) { if (Thread->ClipSegments->Check(WallC.sx1, WallC.sx2)) { - mSubsector->flags |= SSECF_DRAWN; + mSubsector->flags |= SSECMF_DRAWN; } } return; @@ -187,7 +187,7 @@ namespace swrenderer if (visible) { - mSubsector->flags |= SSECF_DRAWN; + mSubsector->flags |= SSECMF_DRAWN; } } diff --git a/src/swrenderer/scene/r_opaque_pass.cpp b/src/swrenderer/scene/r_opaque_pass.cpp index a7ba00c0c1..4b66e89740 100644 --- a/src/swrenderer/scene/r_opaque_pass.cpp +++ b/src/swrenderer/scene/r_opaque_pass.cpp @@ -155,7 +155,7 @@ namespace swrenderer bool underwater = r_fakingunderwater || (heightsec && heightsec->floorplane.PointOnSide(Thread->Viewport->viewpoint.Pos) <= 0); bool doorunderwater = false; - int diffTex = (s->MoreFlags & SECF_CLIPFAKEPLANES); + int diffTex = (s->MoreFlags & SECMF_CLIPFAKEPLANES); // Replace sector being drawn with a copy to be hacked *tempsec = *sec; @@ -167,12 +167,12 @@ namespace swrenderer { tempsec->SetTexture(sector_t::floor, s->GetTexture(sector_t::floor), false); } - else if (s->MoreFlags & SECF_FAKEFLOORONLY) + else if (s->MoreFlags & SECMF_FAKEFLOORONLY) { if (underwater) { tempsec->Colormap = s->Colormap; - if (!(s->MoreFlags & SECF_NOFAKELIGHT)) + if (!(s->MoreFlags & SECMF_NOFAKELIGHT)) { tempsec->lightlevel = s->lightlevel; @@ -197,7 +197,7 @@ namespace swrenderer tempsec->floorplane = s->floorplane; } - if (!(s->MoreFlags & SECF_FAKEFLOORONLY)) + if (!(s->MoreFlags & SECMF_FAKEFLOORONLY)) { if (diffTex) { @@ -271,7 +271,7 @@ namespace swrenderer tempsec->planes[sector_t::ceiling].xform = s->planes[sector_t::ceiling].xform; } - if (!(s->MoreFlags & SECF_NOFAKELIGHT)) + if (!(s->MoreFlags & SECMF_NOFAKELIGHT)) { tempsec->lightlevel = s->lightlevel; @@ -288,7 +288,7 @@ namespace swrenderer FakeSide = WaterFakeSide::BelowFloor; } else if (heightsec && heightsec->ceilingplane.PointOnSide(Thread->Viewport->viewpoint.Pos) <= 0 && - orgceilz > refceilz && !(s->MoreFlags & SECF_FAKEFLOORONLY)) + orgceilz > refceilz && !(s->MoreFlags & SECMF_FAKEFLOORONLY)) { // Above-ceiling hack tempsec->ceilingplane = s->ceilingplane; tempsec->floorplane = s->ceilingplane; @@ -307,7 +307,7 @@ namespace swrenderer tempsec->planes[sector_t::floor].xform = s->planes[sector_t::floor].xform; } - if (!(s->MoreFlags & SECF_NOFAKELIGHT)) + if (!(s->MoreFlags & SECMF_NOFAKELIGHT)) { tempsec->lightlevel = s->lightlevel; @@ -517,7 +517,7 @@ namespace swrenderer } frontsector = sub->sector; - frontsector->MoreFlags |= SECF_DRAWN; + frontsector->MoreFlags |= SECMF_DRAWN; count = sub->numlines; line = sub->firstline; diff --git a/src/swrenderer/things/r_sprite.cpp b/src/swrenderer/things/r_sprite.cpp index 8f1a060cd1..36e9ca89f3 100644 --- a/src/swrenderer/things/r_sprite.cpp +++ b/src/swrenderer/things/r_sprite.cpp @@ -128,7 +128,7 @@ namespace swrenderer { if (gzt < heightsec->floorplane.ZatPoint(pos)) return; - if (!(heightsec->MoreFlags & SECF_FAKEFLOORONLY) && gzb >= heightsec->ceilingplane.ZatPoint(pos)) + if (!(heightsec->MoreFlags & SECMF_FAKEFLOORONLY) && gzb >= heightsec->ceilingplane.ZatPoint(pos)) return; } } diff --git a/src/swrenderer/things/r_visiblesprite.cpp b/src/swrenderer/things/r_visiblesprite.cpp index cc9ce8825d..3bbd25a23b 100644 --- a/src/swrenderer/things/r_visiblesprite.cpp +++ b/src/swrenderer/things/r_visiblesprite.cpp @@ -197,7 +197,7 @@ namespace swrenderer hzb = MAX(hzb, hz); } } - if (spr->FakeFlatStat != WaterFakeSide::BelowFloor && !(spr->heightsec->MoreFlags & SECF_FAKEFLOORONLY)) + if (spr->FakeFlatStat != WaterFakeSide::BelowFloor && !(spr->heightsec->MoreFlags & SECMF_FAKEFLOORONLY)) { double hz = spr->heightsec->ceilingplane.ZatPoint(spr->gpos); int h = xs_RoundToInt(viewport->CenterY - (hz - viewport->viewpoint.Pos.Z) * scale); diff --git a/src/swrenderer/things/r_voxel.cpp b/src/swrenderer/things/r_voxel.cpp index f10840c09b..faab6e785c 100644 --- a/src/swrenderer/things/r_voxel.cpp +++ b/src/swrenderer/things/r_voxel.cpp @@ -113,7 +113,7 @@ namespace swrenderer { if (gzt < heightsec->floorplane.ZatPoint(pos)) return; - if (!(heightsec->MoreFlags & SECF_FAKEFLOORONLY) && gzb >= heightsec->ceilingplane.ZatPoint(pos)) + if (!(heightsec->MoreFlags & SECMF_FAKEFLOORONLY) && gzb >= heightsec->ceilingplane.ZatPoint(pos)) return; } }