diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs index 2c5b8c1b82f8d2fa63e5a91e87b46fc6f87628ce..639fe55414f1b9f8aa87dbe5fc0772293a0d26ab 100755 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs @@ -278,13 +278,10 @@ namespace CodeImp.DoomBuilder.BuilderModes } //mxd. Interpolate vertex colors? - if(sd.CeilingGlow != null || sd.FloorGlow != null) + for(int i = 0; i < verts.Count; i++) { - for(int i = 0; i < verts.Count; i++) - { - if(verts[i].c == PixelColor.INT_WHITE) continue; // Fullbright verts are not affected by glows. - verts[i] = InterpolateVertexColor(verts[i], sd); - } + //if(verts[i].c == PixelColor.INT_WHITE) continue; // Fullbright verts are not affected by glows. + verts[i] = InterpolateVertexColor(verts[i], sd); } return verts; @@ -293,6 +290,22 @@ namespace CodeImp.DoomBuilder.BuilderModes //mxd private static WorldVertex InterpolateVertexColor(WorldVertex v, SectorData data) { + // [ZZ] process sector top and bottom colors. + // block + { + float cz = data.Ceiling.plane.GetZ(v.x, v.y); + float cgz = data.Floor.plane.GetZ(v.x, v.y); + float delta = 1.0f - (((v.z - cgz) / (cz - cgz)) * 0.9f); + PixelColor vertexcolor = PixelColor.FromInt(v.c); + PixelColor topcolor = PixelColor.Modulate(vertexcolor, data.ColorWallTop); + PixelColor bottomcolor = PixelColor.Modulate(vertexcolor, data.ColorWallBottom); + v.c = InterpolationTools.InterpolateColor(topcolor, bottomcolor, delta).WithAlpha(255).ToInt(); + } + + // don't process glows if fullbright. + if (v.c == PixelColor.INT_WHITE) + return v; + // Apply ceiling glow? if(data.CeilingGlow != null) { diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs index f1df6479bfeb945722c2db8d822f45f3ddacb58b..cb6929e1c118eb41f9f1464565572ac5253311d9 100755 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs @@ -262,7 +262,9 @@ namespace CodeImp.DoomBuilder.BuilderModes PixelColor areabrightness = PixelColor.FromInt(mode.CalculateBrightness(brightness)); PixelColor areacolor = PixelColor.Modulate(level.colorbelow, areabrightness); - sectorcolor = areacolor.WithAlpha(alpha).ToInt(); + + // [ZZ] if sector is using Doom64 lighting, apply thing color here. + sectorcolor = PixelColor.Modulate(sd.ColorSprites, areacolor).WithAlpha(alpha).ToInt(); //mxd. Calculate fogfactor fogfactor = VisualGeometry.CalculateFogFactor(level.sector, brightness); @@ -280,10 +282,10 @@ namespace CodeImp.DoomBuilder.BuilderModes fogfactor = VisualGeometry.CalculateFogFactor(level.sector, level.brightnessbelow); } } - } + } - //mxd. Create verts for all sprite angles - WorldVertex[][] allverts = new WorldVertex[info.SpriteFrame.Length][]; + //mxd. Create verts for all sprite angles + WorldVertex[][] allverts = new WorldVertex[info.SpriteFrame.Length][]; Vector2D[] alloffsets = new Vector2D[info.SpriteFrame.Length]; base.textures = new ImageData[info.SpriteFrame.Length]; isloaded = true; diff --git a/Source/Plugins/BuilderModes/VisualModes/SectorData.cs b/Source/Plugins/BuilderModes/VisualModes/SectorData.cs index 9c381f45c608259dad30f93e9be68ed028b22cf5..1fb75eb5515673bc42dcc4462fa029a9b79b66c9 100755 --- a/Source/Plugins/BuilderModes/VisualModes/SectorData.cs +++ b/Source/Plugins/BuilderModes/VisualModes/SectorData.cs @@ -39,6 +39,14 @@ namespace CodeImp.DoomBuilder.BuilderModes internal GlowingFlatData FloorGlow; //mxd internal Plane FloorGlowPlane; //mxd internal Plane CeilingGlowPlane; //mxd + + // [ZZ] Doom64 lighting system + internal PixelColor ColorCeiling; + internal PixelColor ColorFloor; + internal PixelColor ColorWallBottom; + internal PixelColor ColorWallTop; + internal PixelColor ColorSprites; + internal bool Doom64Absolute; // Sectors that must be updated when this sector is changed // The boolean value is the 'includeneighbours' of the UpdateSectorGeometry function which @@ -105,7 +113,7 @@ namespace CodeImp.DoomBuilder.BuilderModes lightlevels.Add(floor); lightlevels.Add(ceiling); - BasicSetup(); + BasicSetup(); } #endregion @@ -298,24 +306,34 @@ namespace CodeImp.DoomBuilder.BuilderModes lightfloorabsolute = sector.Fields.GetValue("lightfloorabsolute", false); lightceiling = sector.Fields.GetValue("lightceiling", 0); lightceilingabsolute = sector.Fields.GetValue("lightceilingabsolute", false); - - // Determine colors & light levels - PixelColor lightcolor = PixelColor.FromInt(color); - if(!lightfloorabsolute) lightfloor = sector.Brightness + lightfloor; - if(!lightceilingabsolute) lightceiling = sector.Brightness + lightceiling; - PixelColor floorbrightness = PixelColor.FromInt(mode.CalculateBrightness(lightfloor)); - PixelColor ceilingbrightness = PixelColor.FromInt(mode.CalculateBrightness(lightceiling)); - PixelColor floorcolor = PixelColor.Modulate(lightcolor, floorbrightness); - PixelColor ceilingcolor = PixelColor.Modulate(lightcolor, ceilingbrightness); - floor.color = floorcolor.WithAlpha(255).ToInt(); - floor.brightnessbelow = sector.Brightness; - floor.colorbelow = lightcolor.WithAlpha(255); - ceiling.color = ceilingcolor.WithAlpha(255).ToInt(); - ceiling.brightnessbelow = sector.Brightness; - ceiling.colorbelow = lightcolor.WithAlpha(255); - - //mxd. Store a copy of initial settings - floor.CopyProperties(floorbase); + if (!lightfloorabsolute) lightfloor = sector.Brightness + lightfloor; + if (!lightceilingabsolute) lightceiling = sector.Brightness + lightceiling; + + // Determine colors & light levels + // [ZZ] Doom64 lighting + // + // ceiling/floor + ColorCeiling = PixelColor.FromInt(sector.Fields.GetValue("color_ceiling", PixelColor.INT_WHITE)); + ColorFloor = PixelColor.FromInt(sector.Fields.GetValue("color_floor", PixelColor.INT_WHITE)); + ColorSprites = PixelColor.FromInt(sector.Fields.GetValue("color_sprites", PixelColor.INT_WHITE)); + ColorWallTop = PixelColor.FromInt(sector.Fields.GetValue("color_walltop", PixelColor.INT_WHITE)); + ColorWallBottom = PixelColor.FromInt(sector.Fields.GetValue("color_wallbottom", PixelColor.INT_WHITE)); + Doom64Absolute = sector.Fields.GetValue("color_absolute", false); + + PixelColor floorbrightness = PixelColor.FromInt(mode.CalculateBrightness(lightfloor)); + PixelColor ceilingbrightness = PixelColor.FromInt(mode.CalculateBrightness(lightceiling)); + PixelColor lightcolor = PixelColor.FromInt(color); + PixelColor floorcolor = PixelColor.Modulate(ColorFloor, PixelColor.Modulate(lightcolor, floorbrightness)); + PixelColor ceilingcolor = PixelColor.Modulate(ColorCeiling, PixelColor.Modulate(lightcolor, ceilingbrightness)); + floor.color = floorcolor.WithAlpha(255).ToInt(); + floor.brightnessbelow = sector.Brightness; + floor.colorbelow = lightcolor.WithAlpha(255); + ceiling.color = ceilingcolor.WithAlpha(255).ToInt(); + ceiling.brightnessbelow = sector.Brightness; + ceiling.colorbelow = lightcolor.WithAlpha(255); + + //mxd. Store a copy of initial settings + floor.CopyProperties(floorbase); ceiling.CopyProperties(ceilingbase); //mxd. We need sector brightness here, unaffected by custom ceiling brightness... @@ -324,7 +342,7 @@ namespace CodeImp.DoomBuilder.BuilderModes //mxd glowingflateffect.Update(); - } + } //mxd public void UpdateForced()