UDMF: raised sector slope precision to 7 decimal places when saving a map.

Nodes Viewer mode: added more boilerplate to classic nodes reader.
Thing Filters Form: program configuration was not marked as changed when saving thing filters.
Cosmetic layout fixes in Thing/Linedef/Sector Info panels.
Cosmetic text fixes in several Map Analysis results.
Internal: debug console is now cleared when creating a new map.
Updated ZDoom_DECORATE.cfg.
This commit is contained in:
MaxED 2015-01-11 19:42:57 +00:00
parent c325d7ec14
commit 8218a5d906
13 changed files with 78 additions and 38 deletions

View file

@ -37,23 +37,23 @@ keywords
A_FaceTarget = "A_FaceTarget[(float angle = 0[, float pitch = 0])]";
A_FaceMaster = "A_FaceMaster[(float angle = 0[, float pitch = 0])]";
A_FastChase = "A_FastChase";
A_KillChildren = "A_KillChildren[(string damagetype[, int flags])]\ndamagetype: if the actor dies, the actor will enter a death state based on damagetype if present (or pain state if using NODAMAGE).\nflags: KILS flags.";
A_KillMaster = "A_KillMaster[(string damagetype[, int flags])]\ndamagetype: if the actor dies, the actor will enter a death state based on damagetype if present (or pain state if using NODAMAGE).\nflags: KILS flags.";
A_KillSiblings = "A_KillSiblings[(string damagetype[, int flags])]\ndamagetype: if the actor dies, the actor will enter a death state based on damagetype if present (or pain state if using NODAMAGE).\nflags: KILS flags.";
A_KillTarget = "A_KillTarget[(string damagetype[, int flags])]\ndamagetype: if the actor dies, the actor will enter a death state based on damagetype if present (or pain state if using NODAMAGE).\nflags: KILS flags.";
A_KillTracer = "A_KillTracer[(string damagetype[, int flags])]\ndamagetype: if the actor dies, the actor will enter a death state based on damagetype if present (or pain state if using NODAMAGE).\nflags: KILS flags.";
A_KillChildren = "A_KillChildren[(string damagetype = \"None\"[, int flags = 0[, string filter = \"None\[, string species = \"None\]]])]\ndamagetype: if the actor dies, the actor will enter a death state based on damagetype if present (or pain state if using NODAMAGE).\nflags: KILS flags.\nfilter: the actor class to damage.\nspecies: the actor species to damage.";
A_KillMaster = "A_KillMaster[(string damagetype = \"None\"[, int flags = 0[, string filter = \"None\"[, string species = \"None\"]]])]\ndamagetype: if the actor dies, the actor will enter a death state based on damagetype if present (or pain state if using NODAMAGE).\nflags: KILS flags.\nfilter: the actor class to damage.\nspecies: the actor species to damage.";
A_KillSiblings = "A_KillSiblings[(string damagetype = \"None\"[, int flags = 0[, string filter = \"None\"[, string species = \"None\"]]])]\ndamagetype: if the actor dies, the actor will enter a death state based on damagetype if present (or pain state if using NODAMAGE).\nflags: KILS flags.\nfilter: the actor class to damage.\nspecies: the actor species to damage.";
A_KillTarget = "A_KillTarget[(string damagetype = \"None\"[, int flags = 0[, string filter = \"None\"[, string species = \"None\"]]])]\ndamagetype: if the actor dies, the actor will enter a death state based on damagetype if present (or pain state if using NODAMAGE).\nflags: KILS flags.\nfilter: the actor class to damage.\nspecies: the actor species to damage.";
A_KillTracer = "A_KillTracer[(string damagetype = \"None\"[, int flags = 0[, string filter = \"None\"[, string species = \"None\"]]])]\ndamagetype: if the actor dies, the actor will enter a death state based on damagetype if present (or pain state if using NODAMAGE).\nflags: KILS flags.\nfilter: the actor class to damage.\nspecies: the actor species to damage.";
A_Look = "A_Look";
A_Look2 = "A_Look2";
A_LookEx = "A_LookEx(int flags, fixed minseedist, fixed maxseedist, fixed maxheardist, fixed fov, state seestate)";
A_RaiseChildren = "A_RaiseChildren[(bool copyaffiliation)]";
A_RaiseMaster = "A_RaiseMaster[(bool copyaffiliation)]";
A_RaiseSiblings = "A_RaiseSiblings[(bool copyaffiliation)]";
A_RemoveChildren = "A_RemoveChildren[(bool = false[, int flags = 0])]\nflags: RMVF flags.";
A_RemoveMaster = "A_RemoveMaster[(int flags = 0)]\nflags: RMVF flags.";
A_RemoveSiblings = "A_RemoveSiblings[(bool all = false[, int flags = 0])]\nflags: RMVF flags.";
A_RemoveTarget = "A_RemoveTarget[(int flags)]\nflags: RMVF flags.";
A_RemoveTracer = "A_RemoveTracer[(int flags)]\nflags: RMVF flags.";
A_Remove = "A_Remove(int pointer, int flags)\nflags: RMVF flags.";
A_RaiseChildren = "A_RaiseChildren[(bool copyaffiliation = false)]";
A_RaiseMaster = "A_RaiseMaster[(bool copyaffiliation = false)]";
A_RaiseSiblings = "A_RaiseSiblings[(bool copyaffiliation = false)]";
A_RemoveChildren = "A_RemoveChildren[(bool all = false[, int flags = 0[, string filter = \"None\"[, string species = \"None\"]]])]\nflags: RMVF flags.\nfilter: the actor class to damage.\nspecies: the actor species to damage.";
A_RemoveMaster = "A_RemoveMaster[(int flags = 0[, string filter = \"None\"[, string species = \"None\"]])]\nflags: RMVF flags.\nfilter: the actor class to damage.\nspecies: the actor species to damage.";
A_RemoveSiblings = "A_RemoveSiblings[(bool all = false[, int flags = 0[, string filter = \"None\"[, string species = \"None\"]]])]\nflags: RMVF flags.\nfilter: the actor class to damage.\nspecies: the actor species to damage.";
A_RemoveTarget = "A_RemoveTarget[(int flags = 0[, string filter = \"None\"[, string species = \"None\"]])]\nflags: RMVF flags.\nfilter: the actor class to damage.\nspecies: the actor species to damage.";
A_RemoveTracer = "A_RemoveTracer[(int flags = 0[, string filter = \"None\"[, string species = \"None\"]])]\nflags: RMVF flags.\nfilter: the actor class to damage.\nspecies: the actor species to damage.";
A_Remove = "A_Remove(int pointer[, int flags = 0[, string filter = \"None\"[, string species = \"None\"]]])\nflags: RMVF flags.\nfilter: the actor class to damage.\nspecies: the actor species to damage.";
A_SentinelBob = "A_SentinelBob";
A_SetTeleFog = "A_SetTeleFog(string telefogsourceclass, string telefogdestclass)";
A_Srcr2Decide = "A_Srcr2Decide";
@ -825,6 +825,9 @@ constants
KILS_FOILINVUL;
KILS_KILLMISSILES;
KILS_NOMONSTERS;
KILS_EXFILTER;
KILS_EXSPECIES;
KILS_EITHER;
LOF_DONTCHASEGOAL;
LOF_FULLVOLSEESOUND;
LOF_NOJUMP;
@ -855,6 +858,9 @@ constants
RMVF_MISC;
RMVF_MISSILES;
RMVF_NOMONSTERS;
RMVF_EXFILTER;
RMVF_EXSPECIES;
RMVF_EITHER;
RSF_FOG;
RSF_KEEPTARGET;
RSF_TELEFRAG;

View file

@ -1017,7 +1017,7 @@ namespace CodeImp.DoomBuilder.Controls
this.flags.Name = "flags";
this.flags.Scrollable = false;
this.flags.ShowGroups = false;
this.flags.Size = new System.Drawing.Size(443, 100);
this.flags.Size = new System.Drawing.Size(443, 73);
this.flags.TabIndex = 0;
this.flags.UseCompatibleStateImageBehavior = false;
this.flags.View = System.Windows.Forms.View.List;

View file

@ -533,7 +533,7 @@ namespace CodeImp.DoomBuilder.Controls
this.flags.Name = "flags";
this.flags.Scrollable = false;
this.flags.ShowGroups = false;
this.flags.Size = new System.Drawing.Size(443, 100);
this.flags.Size = new System.Drawing.Size(443, 73);
this.flags.TabIndex = 0;
this.flags.UseCompatibleStateImageBehavior = false;
this.flags.View = System.Windows.Forms.View.List;

View file

@ -343,7 +343,7 @@ namespace CodeImp.DoomBuilder.Controls
this.flags.Name = "flags";
this.flags.Scrollable = false;
this.flags.ShowGroups = false;
this.flags.Size = new System.Drawing.Size(556, 100);
this.flags.Size = new System.Drawing.Size(556, 73);
this.flags.TabIndex = 0;
this.flags.UseCompatibleStateImageBehavior = false;
this.flags.View = System.Windows.Forms.View.List;

View file

@ -1123,6 +1123,11 @@ namespace CodeImp.DoomBuilder
// Clear errors
errorlogger.Clear();
//mxd. Clear Console
#if DEBUG
DebugConsole.Clear();
#endif
// Show splash logo on display
mainwindow.ShowSplashDisplay();

View file

@ -273,20 +273,20 @@ namespace CodeImp.DoomBuilder.IO
//mxd. Slopes
if (s.FloorSlope.GetLengthSq() > 0)
{
coll.Add("floorplane_a", Math.Round(s.FloorSlope.x, 3));
coll.Add("floorplane_b", Math.Round(s.FloorSlope.y, 3));
coll.Add("floorplane_c", Math.Round(s.FloorSlope.z, 3));
coll.Add("floorplane_d",
(float.IsNaN(s.FloorSlopeOffset) ? 0f : Math.Round(s.FloorSlopeOffset, 3)));
coll.Add("floorplane_a", Math.Round(s.FloorSlope.x, Sector.SLOPE_DECIMALS));
coll.Add("floorplane_b", Math.Round(s.FloorSlope.y, Sector.SLOPE_DECIMALS));
coll.Add("floorplane_c", Math.Round(s.FloorSlope.z, Sector.SLOPE_DECIMALS));
coll.Add("floorplane_d",
(float.IsNaN(s.FloorSlopeOffset) ? 0f : Math.Round(s.FloorSlopeOffset, Sector.SLOPE_DECIMALS)));
}
if (s.CeilSlope.GetLengthSq() > 0)
{
coll.Add("ceilingplane_a", Math.Round(s.CeilSlope.x, 3));
coll.Add("ceilingplane_b", Math.Round(s.CeilSlope.y, 3));
coll.Add("ceilingplane_c", Math.Round(s.CeilSlope.z, 3));
coll.Add("ceilingplane_d",
(float.IsNaN(s.CeilSlopeOffset) ? 0f : Math.Round(s.CeilSlopeOffset, 3)));
coll.Add("ceilingplane_a", Math.Round(s.CeilSlope.x, Sector.SLOPE_DECIMALS));
coll.Add("ceilingplane_b", Math.Round(s.CeilSlope.y, Sector.SLOPE_DECIMALS));
coll.Add("ceilingplane_c", Math.Round(s.CeilSlope.z, Sector.SLOPE_DECIMALS));
coll.Add("ceilingplane_d",
(float.IsNaN(s.CeilSlopeOffset) ? 0f : Math.Round(s.CeilSlopeOffset, Sector.SLOPE_DECIMALS)));
}
//mxd. Flags

View file

@ -33,6 +33,8 @@ namespace CodeImp.DoomBuilder.Map
{
#region ================== Constants
internal const int SLOPE_DECIMALS = 7;
#endregion
#region ================== Variables

View file

@ -123,6 +123,7 @@ namespace CodeImp.DoomBuilder.Windows
// Update stuff
General.Map.ChangeThingFilter(new NullThingsFilter());
General.MainWindow.UpdateThingsFilters();
General.Map.ConfigSettings.Changed = true;
// Close
this.DialogResult = DialogResult.OK;

View file

@ -23,7 +23,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
public override int Buttons { get { return 2; } }
public override string Button1Text { get { return "Add Default Flat"; } }
public override string Button2Text { get { return "Browse Flat"; } } //mxd
public override string Button2Text { get { return "Browse Flat..."; } } //mxd
#endregion

View file

@ -39,7 +39,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
public override int Buttons { get { return 2; } }
public override string Button1Text { get { return "Add Default Texture"; } }
public override string Button2Text { get { return "Browse Texture"; } } //mxd
public override string Button2Text { get { return "Browse Texture..."; } } //mxd
#endregion

View file

@ -39,7 +39,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
public override int Buttons { get { return 2; } }
public override string Button1Text { get { return "Add Default Flat"; } }
public override string Button2Text { get { return "Browse Flat"; } } //mxd
public override string Button2Text { get { return "Browse Flat..."; } } //mxd
#endregion

View file

@ -40,7 +40,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
public override int Buttons { get { return 3; } }
public override string Button1Text { get { return "Remove Texture"; } }
public override string Button2Text { get { return "Add Default Texture"; } }
public override string Button3Text { get { return "Browse Texture"; } } //mxd
public override string Button3Text { get { return "Browse Texture..."; } } //mxd
#endregion

View file

@ -108,15 +108,11 @@ namespace CodeImp.DoomBuilder.Plugins.NodesViewer
MemoryStream nodesstream = General.Map.GetLumpData("NODES");
int numnodes = (int)nodesstream.Length / 28;
//mxd. More boilerplate
if(numnodes < 1)
//mxd. Boilerplate!
if(numnodes < 1)
{
// Close readers
nodesstream.Close();
nodesstream.Dispose();
// Cancel mode
MessageBox.Show("The map has only one subsector. Please add more sectors, then try running this mode again.", "Why are you doing this, Stanley?..", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show("The map has only one subsector. Please add more sectors, then try running this mode again.", "THY NODETH ARETH BROKH!", MessageBoxButtons.OK, MessageBoxIcon.Error);
General.Editing.CancelMode();
return false;
}
@ -158,6 +154,16 @@ namespace CodeImp.DoomBuilder.Plugins.NodesViewer
MemoryStream segsstream = General.Map.GetLumpData("SEGS");
BinaryReader segsreader = new BinaryReader(segsstream);
int numsegs = (int)segsstream.Length / 12;
//mxd. Boilerplate!
if(numsegs < 1)
{
// Cancel mode
MessageBox.Show("The map has empty SEGS lump. Please rebuild the nodes, then try running this mode again.", "THY SEGS HATH SINNETH!", MessageBoxButtons.OK, MessageBoxIcon.Error);
General.Editing.CancelMode();
return false;
}
segs = new Seg[numsegs];
for(int i = 0; i < segs.Length; i++)
{
@ -176,6 +182,16 @@ namespace CodeImp.DoomBuilder.Plugins.NodesViewer
MemoryStream vertsstream = General.Map.GetLumpData("VERTEXES");
BinaryReader vertsreader = new BinaryReader(vertsstream);
int numverts = (int)vertsstream.Length / 4;
//mxd. Boilerplate!
if(numverts < 1)
{
// Cancel mode
MessageBox.Show("The map has empty VERTEXES lump. Please rebuild the nodes, then try running this mode again.", "THY VERTEXES ARETH FOUL!", MessageBoxButtons.OK, MessageBoxIcon.Error);
General.Editing.CancelMode();
return false;
}
verts = new Vector2D[numverts];
for(int i = 0; i < verts.Length; i++)
{
@ -190,6 +206,16 @@ namespace CodeImp.DoomBuilder.Plugins.NodesViewer
MemoryStream ssecstream = General.Map.GetLumpData("SSECTORS");
BinaryReader ssecreader = new BinaryReader(ssecstream);
int numssec = (int)ssecstream.Length / 4;
//mxd. Boilerplate!
if(numssec < 1)
{
// Cancel mode
MessageBox.Show("The map has empty SSECTORS lump. Please rebuild the nodes, then try running this mode again.", "THY SSECTORS ARETH HERETYSH!", MessageBoxButtons.OK, MessageBoxIcon.Error);
General.Editing.CancelMode();
return false;
}
ssectors = new Subsector[numssec];
for(int i = 0; i < ssectors.Length; i++)
{