Merged in GZDB r2483.

This commit is contained in:
MascaraSnake 2016-01-25 16:50:03 +01:00
parent ac82d01def
commit a45b2124d0
23 changed files with 224 additions and 229 deletions

View File

@ -1146,6 +1146,7 @@ constants
TF_USEACTORFOG;
TF_NOJUMP;
TF_OVERRIDE;
TF_SENSITIVEZ;
TIF_NOTAKEINFINITE;
VAF_DMGTYPEAPPLYTODIRECT;
WARPF_ABSOLUTEOFFSET;

View File

@ -62,6 +62,8 @@ namespace CodeImp.DoomBuilder.GZBuilder.Data
{
vertwallshade = 16;
horizwallshade = -16;
fogdensity = 255;
outsidefogdensity = 255;
}
#endregion

View File

@ -147,7 +147,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom
// Find classname
SkipWhitespace(true);
string lightname = StripTokenQuotes(ReadToken()).ToLowerInvariant();
string lightname = StripTokenQuotes(ReadToken());
if (string.IsNullOrEmpty(lightname))
{
@ -442,7 +442,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom
SkipWhitespace(true);
// Read object class
string objectclass = StripTokenQuotes(ReadToken()).ToLowerInvariant();
string objectclass = StripTokenQuotes(ReadToken());
if (string.IsNullOrEmpty(objectclass))
{
@ -479,7 +479,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom
else if (!foundlight && foundframe && token == "light") // Just use first light and be done with it
{
SkipWhitespace(true);
token = ReadToken().ToLowerInvariant(); // Should be light name
token = ReadToken(); // Should be light name
if (!string.IsNullOrEmpty(token))
{

View File

@ -81,8 +81,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom
while (SkipWhitespace(true))
{
string token = ReadToken().ToLowerInvariant();
if (string.IsNullOrEmpty(token)) break;
bool stopparsing = false;
if (string.IsNullOrEmpty(token) || token == "$gzdb_skip") break;
switch (token)
{
@ -158,20 +157,14 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom
case "spawnnums":
if (!ParseSpawnNums()) return false;
break;
case "$gzdb_skip":
stopparsing = true; // Finished with this file
break;
}
if (stopparsing) break;
}
// Check values
if (mapinfo.FadeColor.Red > 0 || mapinfo.FadeColor.Green > 0 || mapinfo.FadeColor.Blue > 0)
if (mapinfo.FogDensity > 0 && (mapinfo.FadeColor.Red > 0 || mapinfo.FadeColor.Green > 0 || mapinfo.FadeColor.Blue > 0))
mapinfo.HasFadeColor = true;
if (mapinfo.OutsideFogColor.Red > 0 || mapinfo.OutsideFogColor.Green > 0 || mapinfo.OutsideFogColor.Blue > 0)
if (mapinfo.OutsideFogDensity > 0 && (mapinfo.OutsideFogColor.Red > 0 || mapinfo.OutsideFogColor.Green > 0 || mapinfo.OutsideFogColor.Blue > 0))
mapinfo.HasOutsideFogColor = true;
// All done
@ -649,10 +642,9 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom
return false;
}
if (densitytype == "fogdensity")
mapinfo.FogDensity = (int)(1024 * (256.0f / val));
else
mapinfo.OutsideFogDensity = (int)(1024 * (256.0f / val));
val = Math.Max(0, val);
if (densitytype == "fogdensity") mapinfo.FogDensity = val;
else mapinfo.OutsideFogDensity = val;
// All done here
return true;

View File

@ -29,6 +29,15 @@ using SlimDX;
namespace CodeImp.DoomBuilder.Map
{
public enum SectorFogMode //mxd
{
NONE, // no fog
CLASSIC, // black fog when sector brightness < 243
FOGDENSITY, // sector uses "fogdensity" MAPINFO property
OUTSIDEFOGDENSITY, // sector uses "outsidefogdensity" MAPINFO property
FADE // sector uses UDMF "fade" sector property
}
public sealed class Sector : SelectableElement
{
#region ================== Constants
@ -77,9 +86,8 @@ namespace CodeImp.DoomBuilder.Map
private readonly SurfaceEntryCollection surfaceentries;
//mxd. Rendering
private Color4 fogColor;
private bool hasFogColor;
private bool useOutsideFog;
private Color4 fogcolor;
private SectorFogMode fogmode;
//mxd. Slopes
private Vector3D floorslope;
@ -118,9 +126,8 @@ namespace CodeImp.DoomBuilder.Map
public ReadOnlyCollection<LabelPositionInfo> Labels { get { return labels; } }
//mxd. Rednering
public Color4 FogColor { get { return fogColor; } }
public bool HasFogColor { get { return hasFogColor; } }
public bool UsesOutsideFog { get { return useOutsideFog; } }
public Color4 FogColor { get { return fogcolor; } }
public SectorFogMode FogMode { get { return fogmode; } }
//mxd. Slopes
public Vector3D FloorSlope { get { return floorslope; } set { BeforePropsChange(); floorslope = value; updateneeded = true; } }
@ -473,8 +480,7 @@ namespace CodeImp.DoomBuilder.Map
this.Fields.Clear();
if(isvirtual) this.Fields.Add(MapSet.VirtualSectorField, MapSet.VirtualSectorValue);
this.Flags.Clear();
hasFogColor = false;
useOutsideFog = false;
this.fogmode = SectorFogMode.NONE;
// Reset Slopes
floorslope = new Vector3D();
@ -881,19 +887,28 @@ namespace CodeImp.DoomBuilder.Map
//mxd
public void UpdateFogColor()
{
// Sector uses outisde fog when it's ceiling is sky or Sector_Outside effect (87) is set
useOutsideFog = (General.Map.Data.MapInfo.HasOutsideFogColor && (ceiltexname == General.Map.Config.SkyFlatName || (effect == 87 && General.Map.Config.SectorEffects.ContainsKey(effect))));
if (General.Map.UDMF && Fields.ContainsKey("fadecolor"))
fogColor = new Color4((int)Fields["fadecolor"].Value);
else if(useOutsideFog)
fogColor = General.Map.Data.MapInfo.OutsideFogColor;
{
fogcolor = new Color4((int)Fields["fadecolor"].Value);
fogmode = SectorFogMode.FADE;
}
// Sector uses outisde fog when it's ceiling is sky or Sector_Outside effect (87) is set
else if (General.Map.Data.MapInfo.HasOutsideFogColor &&
(ceiltexname == General.Map.Config.SkyFlatName || (effect == 87 && General.Map.Config.SectorEffects.ContainsKey(effect))))
{
fogcolor = General.Map.Data.MapInfo.OutsideFogColor;
fogmode = SectorFogMode.OUTSIDEFOGDENSITY;
}
else if (General.Map.Data.MapInfo.HasFadeColor)
fogColor = General.Map.Data.MapInfo.FadeColor;
{
fogcolor = General.Map.Data.MapInfo.FadeColor;
fogmode = SectorFogMode.FOGDENSITY;
}
else
fogColor = new Color4();
hasFogColor = fogColor.Red > 0 || fogColor.Green > 0 || fogColor.Blue > 0;
{
fogcolor = new Color4();
fogmode = (brightness < 248 ? SectorFogMode.CLASSIC : SectorFogMode.NONE);
}
}
#endregion

View File

@ -769,7 +769,7 @@ namespace CodeImp.DoomBuilder.Rendering
int wantedshaderpass = (((g == highlighted) && showhighlight) || (g.Selected && showselection)) ? highshaderpass : shaderpass;
//mxd. Render fog?
if(General.Settings.GZDrawFog && !fullbrightness && sector.Sector.Brightness < 248)
if (General.Settings.GZDrawFog && !fullbrightness && sector.Sector.FogMode != SectorFogMode.NONE)
wantedshaderpass += 8;
// Switch shader pass?
@ -847,7 +847,7 @@ namespace CodeImp.DoomBuilder.Rendering
int wantedshaderpass = (((t == highlighted) && showhighlight) || (t.Selected && showselection)) ? highshaderpass : shaderpass;
//mxd. If fog is enagled, switch to shader, which calculates it
if(General.Settings.GZDrawFog && !fullbrightness && t.Thing.Sector != null && (t.Thing.Sector.HasFogColor || t.Thing.Sector.Brightness < 248))
if (General.Settings.GZDrawFog && !fullbrightness && t.Thing.Sector != null && t.Thing.Sector.FogMode != SectorFogMode.NONE)
wantedshaderpass += 8;
//mxd. Create the matrix for positioning
@ -1047,7 +1047,7 @@ namespace CodeImp.DoomBuilder.Rendering
int wantedshaderpass = (((g == highlighted) && showhighlight) || (g.Selected && showselection)) ? highshaderpass : shaderpass;
//mxd. Render fog?
if(General.Settings.GZDrawFog && !fullbrightness && sector.Sector.Brightness < 248)
if (General.Settings.GZDrawFog && !fullbrightness && sector.Sector.FogMode != SectorFogMode.NONE)
wantedshaderpass += 8;
// Switch shader pass?
@ -1156,7 +1156,7 @@ namespace CodeImp.DoomBuilder.Rendering
int wantedshaderpass = (((t == highlighted) && showhighlight) || (t.Selected && showselection)) ? highshaderpass : shaderpass;
//mxd. if fog is enagled, switch to shader, which calculates it
if(General.Settings.GZDrawFog && !fullbrightness && t.Thing.Sector != null && (t.Thing.Sector.HasFogColor || t.Thing.Sector.Brightness < 248))
if (General.Settings.GZDrawFog && !fullbrightness && t.Thing.Sector != null && t.Thing.Sector.FogMode != SectorFogMode.NONE)
wantedshaderpass += 8;
//mxd. Create the matrix for positioning
@ -1409,7 +1409,7 @@ namespace CodeImp.DoomBuilder.Rendering
int wantedshaderpass = ((((t == highlighted) && showhighlight) || (t.Selected && showselection)) ? highshaderpass : shaderpass);
//mxd. if fog is enagled, switch to shader, which calculates it
if(General.Settings.GZDrawFog && !fullbrightness && t.Thing.Sector != null && (t.Thing.Sector.HasFogColor || t.Thing.Sector.Brightness < 248))
if (General.Settings.GZDrawFog && !fullbrightness && t.Thing.Sector != null && t.Thing.Sector.FogMode != SectorFogMode.NONE)
wantedshaderpass += 8;
// Switch shader pass?
@ -1510,7 +1510,7 @@ namespace CodeImp.DoomBuilder.Rendering
int wantedshaderpass = ((((t == highlighted) && showhighlight) || (t.Selected && showselection)) ? highshaderpass : shaderpass);
//mxd. if fog is enagled, switch to shader, which calculates it
if(General.Settings.GZDrawFog && !fullbrightness && t.Thing.Sector != null && (t.Thing.Sector.HasFogColor || t.Thing.Sector.Brightness < 248))
if (General.Settings.GZDrawFog && !fullbrightness && t.Thing.Sector != null && t.Thing.Sector.FogMode != SectorFogMode.NONE)
wantedshaderpass += 8;
// Switch shader pass?

View File

@ -202,29 +202,33 @@ namespace CodeImp.DoomBuilder.VisualModes
//TODO: this doesn't match any GZDoom light mode...
//GZDoom: gl_renderstate.h, SetFog();
//GZDoom: gl_lightlevel.cpp gl_SetFog();
protected float CalculateFogDensity(int brightness)
protected float CalculateFogFactor(int brightness) { return CalculateFogFactor(Sector.Sector.FogMode, brightness); }
public static float CalculateFogFactor(SectorFogMode mode, int brightness)
{
float density;
if(Sector.Sector.UsesOutsideFog && General.Map.Data.MapInfo.OutsideFogDensity > 0)
switch (mode)
{
case SectorFogMode.OUTSIDEFOGDENSITY:
density = General.Map.Data.MapInfo.OutsideFogDensity;
}
else if(!Sector.Sector.UsesOutsideFog && General.Map.Data.MapInfo.FogDensity > 0)
{
density = General.Map.Data.MapInfo.FogDensity;
}
else if(brightness < 248)
{
density = General.Clamp(255 - brightness, 30, 255);
}
else
{
density = 0f;
}
break;
if(Sector.Sector.HasFogColor)
{
density *= 4;
case SectorFogMode.FOGDENSITY:
density = General.Map.Data.MapInfo.FogDensity;
break;
case SectorFogMode.FADE:
density = General.Clamp(255 - brightness, 30, 255) * 4;
break;
case SectorFogMode.CLASSIC:
density = General.Clamp(255 - brightness, 30, 255);
break;
case SectorFogMode.NONE:
density = 0f;
break;
default: throw new NotImplementedException("Unknown SectorFogMode!");
}
return density * FOG_DENSITY_SCALER;

View File

@ -73,7 +73,7 @@ namespace CodeImp.DoomBuilder.VisualModes
protected Dictionary<Thing, VisualThing> allthings;
protected Dictionary<Sector, VisualSector> allsectors;
protected List<VisualBlockEntry> visibleblocks;
protected List<VisualThing> visiblethings;
protected Dictionary<Thing, VisualThing> visiblethings;
protected Dictionary<Sector, VisualSector> visiblesectors;
protected List<VisualGeometry> visiblegeometry;
@ -106,7 +106,7 @@ namespace CodeImp.DoomBuilder.VisualModes
this.visibleblocks = new List<VisualBlockEntry>();
this.visiblesectors = new Dictionary<Sector, VisualSector>(50);
this.visiblegeometry = new List<VisualGeometry>(200);
this.visiblethings = new List<VisualThing>(100);
this.visiblethings = new Dictionary<Thing, VisualThing>(100);
this.processgeometry = true;
this.processthings = true;
this.vertices = new Dictionary<Vertex, VisualVertexPair>(); //mxd
@ -515,7 +515,7 @@ namespace CodeImp.DoomBuilder.VisualModes
// Make collections
visiblesectors = new Dictionary<Sector, VisualSector>(visiblesectors.Count);
visiblegeometry = new List<VisualGeometry>(visiblegeometry.Capacity);
visiblethings = new List<VisualThing>(visiblethings.Capacity);
visiblethings = new Dictionary<Thing, VisualThing>(visiblethings.Count);
// Get the blocks within view range
visibleblocks = blockmap.GetFrustumRange(renderer.Frustum2D);
@ -569,9 +569,9 @@ namespace CodeImp.DoomBuilder.VisualModes
allthings.Add(t, vt);
}
if(vt != null)
if (vt != null && !visiblethings.ContainsKey(vt.Thing))
{
visiblethings.Add(vt);
visiblethings.Add(vt.Thing, vt);
}
}
}
@ -799,7 +799,7 @@ namespace CodeImp.DoomBuilder.VisualModes
}
// Add all the visible things
foreach(VisualThing vt in visiblethings) pickables.Add(vt);
foreach (VisualThing vt in visiblethings.Values) pickables.Add(vt);
//mxd. And all visual vertices
if (General.Map.UDMF && General.Settings.GZShowVisualVertices)

View File

@ -20,6 +20,7 @@ using System;
using System.Collections.Generic;
using System.Globalization;
using CodeImp.DoomBuilder.Config;
using CodeImp.DoomBuilder.Data;
#endregion
@ -590,6 +591,8 @@ namespace CodeImp.DoomBuilder.ZDoom
if(HasPropertyWithValue("$sprite"))
{
string sprite = GetPropertyValueString("$sprite", 0); //mxd
if ((sprite.Length > DataManager.INTERNAL_PREFIX.Length) &&
sprite.ToLowerInvariant().StartsWith(DataManager.INTERNAL_PREFIX)) return sprite; //mxd
if (General.Map.Data.GetSpriteExists(sprite)) return sprite; //mxd. Added availability check
//mxd. Bitch and moan

View File

@ -86,8 +86,8 @@ namespace CodeImp.DoomBuilder.ZDoom
specialtokens = ":{}+-\n;,";
// Initialize
actors = new Dictionary<string, ActorStructure>(StringComparer.Ordinal);
archivedactors = new Dictionary<string, ActorStructure>(StringComparer.Ordinal);
actors = new Dictionary<string, ActorStructure>(StringComparer.OrdinalIgnoreCase);
archivedactors = new Dictionary<string, ActorStructure>(StringComparer.OrdinalIgnoreCase);
parsedlumps = new HashSet<string>(StringComparer.OrdinalIgnoreCase); //mxd
}
@ -124,6 +124,7 @@ namespace CodeImp.DoomBuilder.ZDoom
if(!string.IsNullOrEmpty(objdeclaration))
{
objdeclaration = objdeclaration.ToLowerInvariant();
if (objdeclaration == "$gzdb_skip") break;
switch (objdeclaration)
{
case "actor":
@ -226,8 +227,6 @@ namespace CodeImp.DoomBuilder.ZDoom
}
break;
case "$gzdb_skip": break;
default:
{
// Unknown structure!

View File

@ -78,8 +78,19 @@ namespace CodeImp.DoomBuilder.ZDoom
if(!base.Parse(stream, sourcefilename, clearerrors)) return false;
//mxd. Make vitrual path from filename
string virtualpath = sourcefilename.Substring(8).TrimStart(pathtrimchars);
if(virtualpath.ToLowerInvariant() == "txt") virtualpath = string.Empty;
string virtualpath;
if (sourcefilename.Contains("#")) // It's TEXTURES lump
{
virtualpath = Path.GetFileName(sourcefilename);
if (!string.IsNullOrEmpty(virtualpath)) virtualpath = virtualpath.Substring(0, virtualpath.LastIndexOf("#", StringComparison.Ordinal));
}
else // If it's actual filename, try to use extension(s) as virtualpath
{
virtualpath = Path.GetFileName(sourcefilename);
if (!string.IsNullOrEmpty(virtualpath)) virtualpath = virtualpath.Substring(8).TrimStart(pathtrimchars);
if (!string.IsNullOrEmpty(virtualpath) && virtualpath.ToLowerInvariant() == "txt") virtualpath = string.Empty;
if (string.IsNullOrEmpty(virtualpath)) virtualpath = "[TEXTURES]";
}
// Continue until at the end of the stream
while (SkipWhitespace(true))
@ -194,7 +205,7 @@ namespace CodeImp.DoomBuilder.ZDoom
}
break;
case "$gzdb_skip": break;
case "$gzdb_skip": return !this.HasError;
default:
{

View File

@ -215,18 +215,26 @@ namespace CodeImp.DoomBuilder.BuilderModes
WallPolygon np = SplitPoly(ref p, plane, false);
if(np.Count > 0)
{
if (l.type == SectorLevelType.Glow)
{
//mxd. Glow levels should not affect light level
np.color = p.color;
}
else
{
//mxd. Determine color
int lightlevel;
// Sidedef part is not affected by 3d floor brightness
if(l.disablelighting || !l.extrafloor)
if (l.type != SectorLevelType.Light && (l.disablelighting || !l.extrafloor))
lightlevel = (lightabsolute ? lightvalue : l.brightnessbelow + lightvalue);
// 3d floor transfers brightness below it ignoring sidedef's brightness
// 3d floors and light transfer effects transfers brightness below them ignoring sidedef's brightness
else
lightlevel = l.brightnessbelow;
PixelColor wallbrightness = PixelColor.FromInt(mode.CalculateBrightness(lightlevel, Sidedef)); //mxd
np.color = PixelColor.Modulate(l.colorbelow, wallbrightness).WithAlpha(255).ToInt();
}
if (p.Count == 0)
{

View File

@ -1377,7 +1377,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
renderer.DrawThingCages = ((BuilderPlug.Me.ShowVisualThings & 2) != 0);
// Render all visible things
foreach(VisualThing t in visiblethings)
foreach(VisualThing t in visiblethings.Values)
renderer.AddThingGeometry(t);
}

View File

@ -226,11 +226,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Level is glowing
if(level.affectedbyglow && level.type == SectorLevelType.Floor)
{
// Get glow brightness
SectorData glowdata = (level.sector != Thing.Sector ? mode.GetSectorData(level.sector) : sd);
// Extrafloor glow doesn't affect thing brightness
if (level.sector == Thing.Sector)
{
float planez = level.plane.GetZ(thingpos);
int glowbrightness = glowdata.FloorGlow.Brightness / 2;
// Get glow brightness
int glowbrightness = sd.FloorGlow.Brightness / 2;
SectorLevel nexthigher = sd.GetLevelAbove(new Vector3D(thingpos, planez));
// Interpolate thing brightness between glow and regular ones
@ -240,6 +242,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
float delta = General.Clamp(1.0f - (thingpos.z - planez) / (higherz - planez), 0f, 1f);
brightness = (int)((glowbrightness + level.sector.Brightness / 2) * delta + nexthigher.sector.Brightness * (1.0f - delta));
}
}
}
// Level below this one is glowing. Only possible for floor glow(?)
else if(level.type == SectorLevelType.Glow)
@ -261,30 +264,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
sectorcolor = areacolor.WithAlpha(alpha).ToInt();
//mxd. Calculate fogfactor
float density;
if(Thing.Sector.UsesOutsideFog && General.Map.Data.MapInfo.OutsideFogDensity > 0)
{
density = General.Map.Data.MapInfo.OutsideFogDensity;
}
else if(!Thing.Sector.UsesOutsideFog && General.Map.Data.MapInfo.FogDensity > 0)
{
density = General.Map.Data.MapInfo.FogDensity;
}
else if(brightness < 248)
{
density = General.Clamp(255 - brightness, 30, 255);
}
else
{
density = 0f;
}
if(level.sector.HasFogColor)
{
density *= 4;
}
fogfactor = density * VisualGeometry.FOG_DENSITY_SCALER;
fogfactor = VisualGeometry.CalculateFogFactor(level.sector.FogMode, brightness);
}
}
//TECH: even Bright Thing frames are affected by custom fade...
@ -293,28 +273,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
Vector3D thingpos = new Vector3D(Thing.Position.x, Thing.Position.y, Thing.Position.z + sd.Floor.plane.GetZ(Thing.Position));
SectorLevel level = sd.GetLevelAboveOrAt(thingpos);
if(level != null && level.sector.HasFogColor)
if (level != null && level.sector.FogMode > SectorFogMode.CLASSIC)
{
//mxd. Calculate fogfactor
float density;
if(Thing.Sector.UsesOutsideFog && General.Map.Data.MapInfo.OutsideFogDensity > 0)
{
density = General.Map.Data.MapInfo.OutsideFogDensity;
}
else if(!Thing.Sector.UsesOutsideFog && General.Map.Data.MapInfo.FogDensity > 0)
{
density = General.Map.Data.MapInfo.FogDensity;
}
else if(level.brightnessbelow < 248)
{
density = General.Clamp(255 - level.brightnessbelow, 30, 255);
}
else
{
density = 0f;
}
fogfactor = density * VisualGeometry.FOG_DENSITY_SCALER * 4;
fogfactor = VisualGeometry.CalculateFogFactor(level.sector.FogMode, level.brightnessbelow);
}
}
}

View File

@ -136,7 +136,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
}
//mxd. Determine fog density
fogfactor = CalculateFogDensity(targetbrightness);
fogfactor = CalculateFogFactor(targetbrightness);
// Make vertices
ReadOnlyCollection<Vector2D> triverts = Sector.Sector.Triangles.Vertices;

View File

@ -137,7 +137,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
}
//mxd. Determine fog density
fogfactor = CalculateFogDensity(targetbrightness);
fogfactor = CalculateFogFactor(targetbrightness);
// Make vertices
ReadOnlyCollection<Vector2D> triverts = Sector.Sector.Triangles.Vertices;

View File

@ -96,7 +96,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
int lightlevel = sd.Ceiling.brightnessbelow + lightvalue;
// Calculate fog density
fogfactor = CalculateFogDensity(lightlevel);
fogfactor = CalculateFogFactor(lightlevel);
poly.color = PixelColor.INT_WHITE;
// Cut off the part below the other floor and above the other ceiling
@ -138,10 +138,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
private bool IsFogBoundary()
{
if(Sidedef.Sector.Index == Sidedef.Other.Sector.Index) return false; // There can't be a boundary if both sides are in the same sector.
if(Sidedef.Sector.HasFogColor == Sidedef.Other.Sector.HasFogColor) return false;
if(!Sidedef.Sector.HasFogColor && !Sidedef.Other.Sector.HasFogColor) return false;
if(Sidedef.Sector.CeilTexture == General.Map.Config.SkyFlatName && Sidedef.Other.Sector.CeilTexture == General.Map.Config.SkyFlatName) return false;
return true;
return (Sidedef.Sector.FogMode > SectorFogMode.CLASSIC && Sidedef.Other.Sector.FogMode <= SectorFogMode.CLASSIC);
}
// This performs a fast test in object picking

View File

@ -176,7 +176,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
//mxd. This calculates light with doom-style wall shading
PixelColor wallbrightness = PixelColor.FromInt(mode.CalculateBrightness(lightlevel, Sidedef));
PixelColor wallcolor = PixelColor.Modulate(sd.Ceiling.colorbelow, wallbrightness);
fogfactor = CalculateFogDensity(lightlevel);
fogfactor = CalculateFogFactor(lightlevel);
poly.color = wallcolor.WithAlpha(255).ToInt();
// Cut off the part above the other floor

View File

@ -221,7 +221,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
//mxd. This calculates light with doom-style wall shading
PixelColor wallbrightness = PixelColor.FromInt(mode.CalculateBrightness(lightlevel, Sidedef));
PixelColor wallcolor = PixelColor.Modulate(sd.Ceiling.colorbelow, wallbrightness);
fogfactor = CalculateFogDensity(lightlevel);
fogfactor = CalculateFogFactor(lightlevel);
poly.color = wallcolor.WithAlpha(255).ToInt();
// Cut off the part above the 3D floor and below the 3D ceiling

View File

@ -209,7 +209,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
byte alpha = (byte)extrafloor.Alpha;
if (extrafloor.DontRenderSides) alpha = 0;
int wallcolor = PixelColor.Modulate(levelcolor, wallbrightness).WithAlpha(alpha).ToInt();
fogfactor = CalculateFogDensity(lightlevel);
fogfactor = CalculateFogFactor(lightlevel);
// Cut off the part above the 3D floor and below the 3D ceiling
CropPoly(ref poly, bottom, false);

View File

@ -184,7 +184,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
//mxd. This calculates light with doom-style wall shading
PixelColor wallbrightness = PixelColor.FromInt(mode.CalculateBrightness(lightlevel, Sidedef));
PixelColor wallcolor = PixelColor.Modulate(sd.Ceiling.colorbelow, wallbrightness);
fogfactor = CalculateFogDensity(lightlevel);
fogfactor = CalculateFogFactor(lightlevel);
poly.color = wallcolor.WithAlpha(255).ToInt();
// Cut off the part below the other floor and above the other ceiling

View File

@ -182,7 +182,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
//mxd. This calculates light with doom-style wall shading
PixelColor wallbrightness = PixelColor.FromInt(mode.CalculateBrightness(lightlevel, Sidedef));
PixelColor wallcolor = PixelColor.Modulate(sd.Ceiling.colorbelow, wallbrightness);
fogfactor = CalculateFogDensity(lightlevel);
fogfactor = CalculateFogFactor(lightlevel);
poly.color = wallcolor.WithAlpha(255).ToInt();
// Cut out pieces that overlap 3D floors in this sector

View File

@ -171,7 +171,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
//mxd. This calculates light with doom-style wall shading
PixelColor wallbrightness = PixelColor.FromInt(mode.CalculateBrightness(lightlevel, Sidedef));
PixelColor wallcolor = PixelColor.Modulate(sd.Ceiling.colorbelow, wallbrightness);
fogfactor = CalculateFogDensity(lightlevel);
fogfactor = CalculateFogFactor(lightlevel);
poly.color = wallcolor.WithAlpha(255).ToInt();
// Cut off the part below the other ceiling