From 6177c9cca95fbade221e31b89cc405d132075277 Mon Sep 17 00:00:00 2001 From: MaxED <j.maxed@gmail.com> Date: Mon, 15 Feb 2016 14:06:46 +0000 Subject: [PATCH] Fixed, Texture Browser window: in some cases navigating the textures list using up/down arrows caused an exception. Fixed, Map Analysis window: fixed an exception on copying warnings to clipboard when the clipboard was used by other application. Fixed, TEXTURES parser: added special handling for "TNT1A0" sprite name so a texture with this sprite as a single patch is no longer treated as failed loading. Fixed, Visual mode: in some cases (like line slopes used in several adjacent sectors) sector effect updates were triggered multiple times for the same sector, resulting in noticeable slowdowns and in some cases in infinite recursion. Updated ZDoom ACC. --- Build/Compilers/ZDoom/acc.exe | Bin 66560 -> 67072 bytes Build/Compilers/ZDoom/zspecial.acs | 76 ++++++++++++------ Source/Core/Controls/ImageBrowserControl.cs | 26 +++--- Source/Core/Data/HighResImage.cs | 23 ++++-- Source/Core/Data/TexturePatch.cs | 3 + Source/Core/Windows/AboutForm.cs | 3 +- Source/Core/ZDoom/PatchStructure.cs | 32 +++++--- Source/Core/ZDoom/TextureStructure.cs | 14 +--- .../BuilderModes/Interface/ErrorCheckForm.cs | 2 +- .../VisualModes/BaseVisualSector.cs | 8 +- .../BuilderModes/VisualModes/SectorData.cs | 7 ++ 11 files changed, 123 insertions(+), 71 deletions(-) diff --git a/Build/Compilers/ZDoom/acc.exe b/Build/Compilers/ZDoom/acc.exe index fbdd29fc88b0c6d242e05354a4264c6a6ec16cdb..a295df1d5995775c500cee526358f6410a266d00 100644 GIT binary patch delta 27304 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 delta 26497 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 U$?Ino84B!Lbi36NieTjb0TWtCGynhq diff --git a/Build/Compilers/ZDoom/zspecial.acs b/Build/Compilers/ZDoom/zspecial.acs index 0030ff5c9..e9eaed559 100644 --- a/Build/Compilers/ZDoom/zspecial.acs +++ b/Build/Compilers/ZDoom/zspecial.acs @@ -24,12 +24,12 @@ special 17:Thing_Raise(1), 18:StartConversation(1,2), 19:Thing_Stop(1), - 20:Floor_LowerByValue(3), - 21:Floor_LowerToLowest(2), - 22:Floor_LowerToNearest(2), - 23:Floor_RaiseByValue(3), - 24:Floor_RaiseToHighest(2), - 25:Floor_RaiseToNearest(2), + 20:Floor_LowerByValue(3,4), + 21:Floor_LowerToLowest(2,3), + 22:Floor_LowerToNearest(2,3), + 23:Floor_RaiseByValue(3,5), + 24:Floor_RaiseToHighest(2,5), + 25:Floor_RaiseToNearest(2,4), 26:Stairs_BuildDown(5), 27:Stairs_BuildUp(5), 28:Floor_RaiseAndCrush(3,4), @@ -39,19 +39,19 @@ special 32:Stairs_BuildUpSync(4), 33:ForceField(0), 34:ClearForceField(1), - 35:Floor_RaiseByValueTimes8(3), - 36:Floor_LowerByValueTimes8(3), - 37:Floor_MoveToValue(3,4), + 35:Floor_RaiseByValueTimes8(3,5), + 36:Floor_LowerByValueTimes8(3,4), + 37:Floor_MoveToValue(3,5), 38:Ceiling_Waggle(5), 39:Teleport_ZombieChanger(2), - 40:Ceiling_LowerByValue(3), - 41:Ceiling_RaiseByValue(3), + 40:Ceiling_LowerByValue(3,4), + 41:Ceiling_RaiseByValue(3,4), 42:Ceiling_CrushAndRaise(3,4), 43:Ceiling_LowerAndCrush(3,4), 44:Ceiling_CrushStop(1), 45:Ceiling_CrushRaiseAndStay(3,4), 46:Floor_CrushStop(1), - 47:Ceiling_MoveToValue(3,4), + 47:Ceiling_MoveToValue(3,5), // 48:Sector_Attach3dMidtex 49:GlassBreak(0,1), // 50:ExtraFloor_LightOnly @@ -70,10 +70,10 @@ special 63:Plat_DownByValue(4), 64:Plat_UpWaitDownStay(3), 65:Plat_UpByValue(4), - 66:Floor_LowerInstant(3), - 67:Floor_RaiseInstant(3), - 68:Floor_MoveToValueTimes8(4), - 69:Ceiling_MoveToValueTimes8(4), + 66:Floor_LowerInstant(3,4), + 67:Floor_RaiseInstant(3,5), + 68:Floor_MoveToValueTimes8(4,5), + 69:Ceiling_MoveToValueTimes8(4,5), 70:Teleport(1,3), 71:Teleport_NoFog(1,4), 72:ThrustThing(2,4), @@ -109,6 +109,9 @@ special // 102:Scroll_Texture_Up // 103:Scroll_Texture_Down 104:Ceiling_CrushAndRaiseSilentDist(4,5), + 105:Door_WaitRaise(4,5), + 106:Door_WaitClose(3,4), + 107:Line_SetPortalTarget(2), 109:Light_ForceLightning(1), 110:Light_RaiseByValue(2), @@ -177,14 +180,14 @@ special 188:Sector_SetCeilingScale(5), 189:Sector_SetFloorScale(5), 191:SetPlayerProperty(3), - 192:Ceiling_LowerToHighestFloor(2), - 193:Ceiling_LowerInstant(3), - 194:Ceiling_RaiseInstant(3), + 192:Ceiling_LowerToHighestFloor(2,4), + 193:Ceiling_LowerInstant(3,5), + 194:Ceiling_RaiseInstant(3,4), 195:Ceiling_CrushRaiseAndStayA(4,5), 196:Ceiling_CrushAndRaiseA(4,5), 197:Ceiling_CrushAndRaiseSilentA(4,5), - 198:Ceiling_RaiseByValueTimes8(3), - 199:Ceiling_LowerByValueTimes8(3), + 198:Ceiling_RaiseByValueTimes8(3,4), + 199:Ceiling_LowerByValueTimes8(3,4), 200:Generic_Floor(5), 201:Generic_Ceiling(5), 202:Generic_Door(5), @@ -223,9 +226,9 @@ special 235:Floor_TransferTrigger(1), 236:Floor_TransferNumeric(1), 237:ChangeCamera(3), - 238:Floor_RaiseToLowestCeiling(2), + 238:Floor_RaiseToLowestCeiling(2,4), 239:Floor_RaiseByValueTxTy(3), - 240:Floor_RaiseByTexture(2), + 240:Floor_RaiseByTexture(2,4), 241:Floor_LowerToLowestTxTy(2), 242:Floor_LowerToHighest(3,4), 243:Exit_Normal(1), @@ -237,10 +240,31 @@ special 249:Door_CloseWaitOpen(3, 4), 250:Floor_Donut(3), 251:FloorAndCeiling_LowerRaise(3,4), - 252:Ceiling_RaiseToNearest(2), - 253:Ceiling_LowerToLowest(2), - 254:Ceiling_LowerToFloor(2), + 252:Ceiling_RaiseToNearest(2,3), + 253:Ceiling_LowerToLowest(2,4), + 254:Ceiling_LowerToFloor(2,4), 255:Ceiling_CrushRaiseAndStaySilA(4,5), + + // These are specialized versions of the Generic_* specials which are defined for EE Extradata. + 256:Floor_LowerToHighestEE(2, 3), + 257:Floor_RaiseToLowest(2, 3), + 258:Floor_LowerToLowestCeiling(2,3), + 259:Floor_RaiseToCeiling(2, 4), + 260:Floor_ToCeilingInstant(1, 3), + 261:Floor_LowerByTexture(2, 3), + 262:Ceiling_RaiseToHighest(2, 3), + 263:Ceiling_ToHighestInstant(1, 3), + 264:Ceiling_LowerToNearest(2, 4), + 265:Ceiling_RaiseToLowest(2, 3), + 266:Ceiling_RaiseToHighestFloor(2, 3), + 267:Ceiling_ToFloorInstant(1, 3), + 268:Ceiling_RaiseByTexture(2, 3), + 269:Ceiling_LowerByTexture(2, 4), + 270:Stairs_BuildDownDoom(5), + 271:Stairs_BuildUpDoomSync(4), + 272:Stairs_BuildDownDoomSync(4), + + // internal functions have negative values -1:GetLineUDMFInt(2), diff --git a/Source/Core/Controls/ImageBrowserControl.cs b/Source/Core/Controls/ImageBrowserControl.cs index 469ee479d..7a0e4cd92 100644 --- a/Source/Core/Controls/ImageBrowserControl.cs +++ b/Source/Core/Controls/ImageBrowserControl.cs @@ -408,7 +408,7 @@ namespace CodeImp.DoomBuilder.Controls int index = list.SelectedItems[0].Index; int targetindex = -1; ListViewGroup startgroup = list.SelectedItems[0].Group; - Rectangle startrect = list.GetItemRect(index, ItemBoundsPortion.Entire); + Rectangle startrect = list.SelectedItems[0].GetBounds(ItemBoundsPortion.Entire); switch(dir) { @@ -446,11 +446,15 @@ namespace CodeImp.DoomBuilder.Controls case SearchDirectionHint.Up: while(--index > -1) { - Rectangle rect = list.GetItemRect(index, ItemBoundsPortion.Entire); - if(list.Items[index].Group == startgroup && rect.X == startrect.X && rect.Y < startrect.Y) + ListViewItem item = list.Items[index]; + if(item != null && item.Group == startgroup) { - targetindex = index; - break; + Rectangle rect = item.GetBounds(ItemBoundsPortion.Entire); + if(rect.X == startrect.X && rect.Y < startrect.Y) + { + targetindex = index; + break; + } } } break; @@ -461,11 +465,15 @@ namespace CodeImp.DoomBuilder.Controls { while(++index < list.Items.Count) { - Rectangle rect = list.GetItemRect(index, ItemBoundsPortion.Entire); - if(list.Items[index].Group == startgroup && rect.X == startrect.X && rect.Y > startrect.Y) + ListViewItem item = list.Items[index]; + if(item != null && item.Group == startgroup) { - targetindex = index; - break; + Rectangle rect = item.GetBounds(ItemBoundsPortion.Entire); + if(rect.X == startrect.X && rect.Y > startrect.Y) + { + targetindex = index; + break; + } } } } diff --git a/Source/Core/Data/HighResImage.cs b/Source/Core/Data/HighResImage.cs index c57d80728..4d7c65fd2 100644 --- a/Source/Core/Data/HighResImage.cs +++ b/Source/Core/Data/HighResImage.cs @@ -125,17 +125,26 @@ namespace CodeImp.DoomBuilder.Data catch(Exception e) { // Unable to make bitmap - General.ErrorLogger.Add(ErrorType.Error, "Unable to load texture image '" + this.Name + "'. " + e.GetType().Name + ": " + e.Message); + General.ErrorLogger.Add(ErrorType.Error, "Unable to load texture image \"" + this.Name + "\". " + e.GetType().Name + ": " + e.Message); loadfailed = true; } int missingpatches = 0; //mxd - if(!loadfailed) + if(patches.Count == 0) //mxd + { + // No patches! + General.ErrorLogger.Add(ErrorType.Warning, "No patches are defined for texture \"" + this.Name + "\""); + loadfailed = true; + } + else if(!loadfailed) { // Go for all patches foreach(TexturePatch p in patches) { + //mxd. Some patches (like "TNT1A0") should be skipped + if(p.skip) continue; + // Get the patch data stream Stream patchdata = General.Map.Data.GetPatchData(p.lumpname, p.haslongname); @@ -161,7 +170,7 @@ namespace CodeImp.DoomBuilder.Data if(reader is UnknownImageReader) { // Data is in an unknown format! - General.ErrorLogger.Add(ErrorType.Error, "Patch lump '" + p.lumpname + "' data format could not be read, while loading texture '" + this.Name + "'"); + General.ErrorLogger.Add(ErrorType.Error, "Patch lump \"" + p.lumpname + "\" data format could not be read, while loading texture \"" + this.Name + "\""); missingpatches++; //mxd } } @@ -175,7 +184,7 @@ namespace CodeImp.DoomBuilder.Data catch(InvalidDataException) { // Data cannot be read! - General.ErrorLogger.Add(ErrorType.Error, "Patch lump '" + p.lumpname + "' data format could not be read, while loading texture '" + this.Name + "'"); + General.ErrorLogger.Add(ErrorType.Error, "Patch lump \"" + p.lumpname + "\" data format could not be read, while loading texture \"" + this.Name + "\""); missingpatches++; //mxd } @@ -217,7 +226,7 @@ namespace CodeImp.DoomBuilder.Data } // Missing a patch lump! - General.ErrorLogger.Add(ErrorType.Error, "Missing patch lump '" + p.lumpname + "' while loading texture '" + this.Name + "'"); + General.ErrorLogger.Add(ErrorType.Error, "Missing patch lump \"" + p.lumpname + "\" while loading texture \"" + this.Name + "\""); missingpatches++; //mxd } } @@ -282,7 +291,7 @@ namespace CodeImp.DoomBuilder.Data } catch(Exception e) { - General.ErrorLogger.Add(ErrorType.Error, "Cannot lock image '" + p.lumpname + "' for alpha adjustment. " + e.GetType().Name + ": " + e.Message); + General.ErrorLogger.Add(ErrorType.Error, "Cannot lock image \"" + p.lumpname + "\" for alpha adjustment. " + e.GetType().Name + ": " + e.Message); } if(bmpdata != null) @@ -347,7 +356,7 @@ namespace CodeImp.DoomBuilder.Data } catch(Exception e) { - General.ErrorLogger.Add(ErrorType.Error, "Cannot lock texture '" + this.Name + "' to apply render style. " + e.GetType().Name + ": " + e.Message); + General.ErrorLogger.Add(ErrorType.Error, "Cannot lock texture \"" + this.Name + "\" to apply render style. " + e.GetType().Name + ": " + e.Message); } if(texturebmpdata != null) diff --git a/Source/Core/Data/TexturePatch.cs b/Source/Core/Data/TexturePatch.cs index cded15865..1d71d24ad 100644 --- a/Source/Core/Data/TexturePatch.cs +++ b/Source/Core/Data/TexturePatch.cs @@ -58,6 +58,7 @@ namespace CodeImp.DoomBuilder.Data public readonly TexturePathRenderStyle style; public readonly TexturePathBlendStyle blendstyle; //mxd public readonly float tintammount;//mxd + public readonly bool skip; //mxd // Constructor for simple patches public TexturePatch(string lumpname, int x, int y) @@ -75,6 +76,7 @@ namespace CodeImp.DoomBuilder.Data this.blendstyle = TexturePathBlendStyle.None;//mxd this.tintammount = 0; //mxd this.haslongname = false; //mxd + this.skip = false; //mxd } //mxd. Constructor for hires patches @@ -93,6 +95,7 @@ namespace CodeImp.DoomBuilder.Data this.blendstyle = patch.BlendStyle; this.tintammount = patch.TintAmmount; this.haslongname = (Path.GetFileNameWithoutExtension(this.lumpname) != this.lumpname); + this.skip = patch.Skip; //mxd. Check data so we don't perform unneeded operations later on if(this.alpha == 1.0f) diff --git a/Source/Core/Windows/AboutForm.cs b/Source/Core/Windows/AboutForm.cs index bed384d7c..d8f82912c 100644 --- a/Source/Core/Windows/AboutForm.cs +++ b/Source/Core/Windows/AboutForm.cs @@ -60,8 +60,7 @@ namespace CodeImp.DoomBuilder.Windows // This copies the version number to clipboard private void copyversion_Click(object sender, EventArgs e) { - Clipboard.Clear(); - Clipboard.SetText(Application.ProductVersion); + Clipboard.SetDataObject(Application.ProductVersion, true, 5, 200); //mxd } } } \ No newline at end of file diff --git a/Source/Core/ZDoom/PatchStructure.cs b/Source/Core/ZDoom/PatchStructure.cs index ebae47a66..ecd19eae2 100644 --- a/Source/Core/ZDoom/PatchStructure.cs +++ b/Source/Core/ZDoom/PatchStructure.cs @@ -30,23 +30,27 @@ namespace CodeImp.DoomBuilder.ZDoom { #region ================== Constants + // Some odd things in ZDoom + private const string IGNORE_SPRITE = "TNT1A0"; + #endregion #region ================== Variables // Declaration - private string name; - private int offsetx; - private int offsety; - private bool flipx; - private bool flipy; - private float alpha; - private int rotation; //mxd - private TexturePathRenderStyle renderStyle; //mxd - private PixelColor blendColor; //mxd - private TexturePathBlendStyle blendStyle; //mxd - private float tintAmmount; //mxd - private static string[] renderStyles = { "copy", "translucent", "add", "subtract", "reversesubtract", "modulate", "copyalpha", "copynewalpha", "overlay" }; //mxd + private readonly string name; + private readonly int offsetx; + private readonly int offsety; + private readonly bool flipx; + private readonly bool flipy; + private readonly float alpha; + private readonly int rotation; //mxd + private readonly TexturePathRenderStyle renderStyle; //mxd + private readonly PixelColor blendColor; //mxd + private readonly TexturePathBlendStyle blendStyle; //mxd + private readonly float tintAmmount; //mxd + private static readonly string[] renderStyles = { "copy", "translucent", "add", "subtract", "reversesubtract", "modulate", "copyalpha", "copynewalpha", "overlay" }; //mxd + private readonly bool skip; //mxd #endregion @@ -63,6 +67,7 @@ namespace CodeImp.DoomBuilder.ZDoom public TexturePathBlendStyle BlendStyle { get { return blendStyle; } } public float TintAmmount { get { return tintAmmount; } } public PixelColor BlendColor { get { return blendColor; } }//mxd + public bool Skip { get { return skip; } } //mxd #endregion @@ -88,6 +93,9 @@ namespace CodeImp.DoomBuilder.ZDoom return; } + //mxd. Skip what must be skipped + skip = (name.ToUpperInvariant() == IGNORE_SPRITE); + //mxd name = name.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar); diff --git a/Source/Core/ZDoom/TextureStructure.cs b/Source/Core/ZDoom/TextureStructure.cs index 52df44dfe..88c2817cf 100644 --- a/Source/Core/ZDoom/TextureStructure.cs +++ b/Source/Core/ZDoom/TextureStructure.cs @@ -28,9 +28,6 @@ namespace CodeImp.DoomBuilder.ZDoom { #region ================== Constants - // Some odd thing in ZDoom - private const string IGNORE_SPRITE = "TNT1A0"; - #endregion #region ================== Variables @@ -169,9 +166,6 @@ namespace CodeImp.DoomBuilder.ZDoom PatchStructure pt = new PatchStructure(parser); if(parser.HasError) break; - //mxd. Let's ignore TNT1A0 - if(pt.Name == IGNORE_SPRITE) break; - // Add the patch patches.Add(pt); break; @@ -200,7 +194,7 @@ namespace CodeImp.DoomBuilder.ZDoom // Try parsing as value if(!float.TryParse(strvalue, NumberStyles.Float, CultureInfo.InvariantCulture, out value)) { - parser.ReportError("Expected numeric value for property '" + propertyname + "'"); + parser.ReportError("Expected numeric value for property \"" + propertyname + "\""); return false; } @@ -209,7 +203,7 @@ namespace CodeImp.DoomBuilder.ZDoom } // Can't find the property value! - parser.ReportError("Expected a value for property '" + propertyname + "'"); + parser.ReportError("Expected a value for property \"" + propertyname + "\""); value = 0.0f; return false; } @@ -225,7 +219,7 @@ namespace CodeImp.DoomBuilder.ZDoom // Try parsing as value if(!int.TryParse(strvalue, NumberStyles.Integer, CultureInfo.InvariantCulture, out value)) { - parser.ReportError("Expected integral value for property '" + propertyname + "'"); + parser.ReportError("Expected integral value for property \"" + propertyname + "\""); return false; } @@ -234,7 +228,7 @@ namespace CodeImp.DoomBuilder.ZDoom } // Can't find the property value! - parser.ReportError("Expected a value for property '" + propertyname + "'"); + parser.ReportError("Expected a value for property \"" + propertyname + "\""); value = 0; return false; } diff --git a/Source/Plugins/BuilderModes/Interface/ErrorCheckForm.cs b/Source/Plugins/BuilderModes/Interface/ErrorCheckForm.cs index 7061ae28d..6f1d88942 100644 --- a/Source/Plugins/BuilderModes/Interface/ErrorCheckForm.cs +++ b/Source/Plugins/BuilderModes/Interface/ErrorCheckForm.cs @@ -749,7 +749,7 @@ namespace CodeImp.DoomBuilder.BuilderModes foreach(ErrorResult result in results.SelectedItems) sb.AppendLine(result.ToString()); // Set on clipboard - Clipboard.SetText(sb.ToString()); + Clipboard.SetDataObject(sb.ToString(), true, 5, 200); //mxd // Inform the user General.Interface.DisplayStatus(StatusType.Info, "Analysis results copied to clipboard."); diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualSector.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualSector.cs index 327ff7163..7a8730a5d 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualSector.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualSector.cs @@ -35,14 +35,14 @@ namespace CodeImp.DoomBuilder.BuilderModes #region ================== Variables - private BaseVisualMode mode; + private readonly BaseVisualMode mode; private VisualFloor floor; private VisualCeiling ceiling; private List<VisualFloor> extrafloors; private List<VisualCeiling> extraceilings; - private List<VisualFloor> extrabackfloors; //mxd - private List<VisualCeiling> extrabackceilings; //mxd + private readonly List<VisualFloor> extrabackfloors; //mxd + private readonly List<VisualCeiling> extrabackceilings; //mxd private Dictionary<Sidedef, VisualSidedefParts> sides; // If this is set to true, the sector will be rebuilt after the action is performed. @@ -130,7 +130,7 @@ namespace CodeImp.DoomBuilder.BuilderModes if(mode.VisualSectorExists(s.Key)) { BaseVisualSector vs = (BaseVisualSector)mode.GetVisualSector(s.Key); - vs.UpdateSectorGeometry(s.Value); + vs.Changed = true; } } diff --git a/Source/Plugins/BuilderModes/VisualModes/SectorData.cs b/Source/Plugins/BuilderModes/VisualModes/SectorData.cs index 6ac4eef14..62ee0f7c6 100644 --- a/Source/Plugins/BuilderModes/VisualModes/SectorData.cs +++ b/Source/Plugins/BuilderModes/VisualModes/SectorData.cs @@ -109,6 +109,13 @@ namespace CodeImp.DoomBuilder.BuilderModes Effect3DFloor e = new Effect3DFloor(this, sourcelinedef); extrafloors.Add(e); alleffects.Add(e); + + //mxd. Extrafloor neighbours should be updated when extrafloor is changed + foreach(Sidedef sd in this.Sector.Sidedefs) + { + if(sd.Other != null && sd.Other.Sector != null) + AddUpdateSector(sd.Other.Sector, false); + } } // Brightness level effect -- GitLab