diff --git a/Build/Configurations/Srb2-21slopeszb.cfg b/Build/Configurations/Srb2-21slopeszb.cfg index 0e2f2b3..d8b1b8f 100644 --- a/Build/Configurations/Srb2-21slopeszb.cfg +++ b/Build/Configurations/Srb2-21slopeszb.cfg @@ -2108,7 +2108,7 @@ thingtypes title = "Player Starts"; width = 16; height = 56; - deaftext = "[8] Spawn on ceiling"; + flags8text = "[8] Spawn on ceiling"; sprite = "SUPTD0"; 1 @@ -2320,7 +2320,7 @@ thingtypes sprite = "BUZZA1"; width = 20; height = 24; - deaftext = "[8] Cannot move"; + flags8text = "[8] Cannot move"; } 104 { @@ -2328,7 +2328,7 @@ thingtypes sprite = "RBUZA1"; width = 20; height = 24; - deaftext = "[8] Cannot move"; + flags8text = "[8] Cannot move"; } 124 { @@ -2343,7 +2343,7 @@ thingtypes sprite = "JETBB1"; width = 20; height = 48; - deaftext = "[8] Cannot move"; + flags8text = "[8] Cannot move"; } 106 { @@ -2351,7 +2351,7 @@ thingtypes sprite = "JETGB1"; width = 20; height = 48; - deaftext = "[8] Cannot move"; + flags8text = "[8] Cannot move"; } 107 { @@ -2424,7 +2424,7 @@ thingtypes { title = "Robo-Hood"; sprite = "ARCHA1"; - deaftext = "[8] Cannot jump"; + flags8text = "[8] Cannot jump"; } 118 { @@ -2439,7 +2439,7 @@ thingtypes sprite = "ESHIA1"; width = 16; height = 48; - deaftext = "[8] Double speed"; + flags8text = "[8] Double speed"; } 120 { @@ -2486,14 +2486,16 @@ thingtypes { title = "Boss 1 - Egg Mobile"; sprite = "EGGMA1"; - deaftext = "[8] Alternate laser attack"; + flags4text = "[4] End level on death"; + flags8text = "[8] Alternate laser attack"; } 201 { title = "Boss 2 - Egg Slimer"; sprite = "EGGNA1"; height = 48; - deaftext = "[8] Speed up when hit"; + flags4text = "[4] End level on death"; + flags8text = "[8] Speed up when hit"; } 202 { @@ -2501,11 +2503,13 @@ thingtypes sprite = "EGGOA1"; width = 32; height = 80; + flags4text = "[4] End level on death"; } 203 { title = "Boss 4 - Eggscalibur"; sprite = "EGGPA1"; + flags4text = "[4] End level on death"; } 207 { @@ -2520,6 +2524,7 @@ thingtypes sprite = "METLC1"; width = 16; height = 48; + flags4text = "[4] End level on death"; } 209 { @@ -2527,7 +2532,8 @@ thingtypes sprite = "BRAK[1"; width = 48; height = 160; - deaftext = "[8] Electric barrier"; + flags4text = "[4] End level on death"; + flags8text = "[8] Electric barrier"; } 206 { @@ -2535,6 +2541,7 @@ thingtypes sprite = "BRAKB1"; width = 48; height = 160; + flags4text = "[4] End level on death"; } 290 { @@ -2558,7 +2565,7 @@ thingtypes title = "Boss Waypoint"; width = 8; height = 16; - deaftext = "[8] Sea Egg shooting point"; + flags8text = "[8] Sea Egg shooting point"; sprite = "internal:eggmanway"; } 293 @@ -2575,7 +2582,7 @@ thingtypes width = 24; height = 24; deafheight = 32; - deaftext = "[8] Float"; + flags8text = "[8] Float"; sprite = "RINGA0"; 300 @@ -2693,7 +2700,8 @@ thingtypes width = 8; height = 16; deafheight = 32; - deaftext = "[8] Float"; + flags4text = "[4] Mario Block version"; + flags8text = "[8] Float"; } 313 { @@ -2742,7 +2750,7 @@ thingtypes width = 8; height = 16; deafheight = 32; - deaftext = "[8] Float"; + flags8text = "[8] Float"; } } @@ -2753,7 +2761,8 @@ thingtypes title = "Item Boxes"; width = 16; height = 32; - deaftext = "[8] Random (Weak)"; + flags4text = "[4] Random (Strong)"; + flags8text = "[8] Random (Weak)"; sprite = "SRBXA0"; 400 @@ -2805,12 +2814,15 @@ thingtypes { title = "Extra Life"; sprite = "PRUPA0"; - deaftext = "[8] Random (Weak) / 10k points"; + flags4text = "[4] Random (Strong) / 10k points"; + flags8text = "[8] Random (Weak) / 10k points"; } 410 { title = "Eggman"; sprite = "EGGBA0"; + flags4text = "[4] Special"; + flags8text = "[8] Ambush"; } 411 { @@ -2821,23 +2833,29 @@ thingtypes { title = "Random"; sprite = "QUESA0"; + flags4text = "[4] Special"; + flags8text = "[8] Ambush"; } 413 { title = "Gravity Boots"; sprite = "GBTVA0"; + flags4text = "[4] Special"; + flags8text = "[8] Ambush"; } 414 { title = "CTF Team Ring Monitor (Red)"; sprite = "RRBXA0"; - deaftext = "[8] Ambush"; + flags4text = "[4] Special"; + flags8text = "[8] Ambush"; } 415 { title = "CTF Team Ring Monitor (Blue)"; sprite = "BRBXA0"; - deaftext = "[8] Ambush"; + flags4text = "[4] Special"; + flags8text = "[8] Ambush"; } 416 { @@ -2848,11 +2866,15 @@ thingtypes { title = "Score (1,000 Points)"; sprite = "PTTVA0"; + flags4text = "[4] Special"; + flags8text = "[8] Ambush"; } 419 { title = "Score (10,000 Points)"; sprite = "PTTVF0"; + flags4text = "[4] Special"; + flags8text = "[8] Ambush"; } } @@ -2870,7 +2892,7 @@ thingtypes sprite = "BUBLA0"; width = 8; height = 16; - deaftext = "[8] No distance check"; + flags8text = "[8] No distance check"; } 501 { @@ -2893,7 +2915,8 @@ thingtypes title = "Cannonball"; sprite = "CBLLA0"; width = 20; - deaftext = "[8] Not pushable"; + flags4text = "[4] Slides when pushed"; + flags8text = "[8] Not pushable"; } 1000 { @@ -2901,7 +2924,8 @@ thingtypes blocking = 2; title = "Gargoyle"; sprite = "GARGA1"; - deaftext = "[8] Not pushable"; + flags4text = "[4] Slides when pushed"; + flags8text = "[8] Not pushable"; } 1102 { @@ -2911,7 +2935,8 @@ thingtypes sprite = "ESTAA1"; width = 32; height = 240; - deaftext = "[8] Not pushable"; + flags4text = "[4] Slides when pushed"; + flags8text = "[8] Not pushable"; } 1106 { @@ -2919,7 +2944,7 @@ thingtypes title = "Chain (Swinging)"; sprite = "internal:chain1"; height = 32; - deaftext = "[8] Double size"; + flags8text = "[8] Double size"; } 1107 { @@ -2927,7 +2952,7 @@ thingtypes title = "Chain (Spinning)"; sprite = "internal:chain2"; height = 32; - deaftext = "[8] Double size"; + flags8text = "[8] Double size"; } 1108 { @@ -2935,7 +2960,7 @@ thingtypes title = "Chain (Hidden)"; sprite = "internal:chain3"; height = 32; - deaftext = "[8] Double size"; + flags8text = "[8] Double size"; } 1200 { @@ -2943,7 +2968,7 @@ thingtypes sprite = "BTBLA0"; width = 24; height = 48; - deaftext = "[8] Moves perpetually"; + flags8text = "[8] Moves perpetually"; } 1201 { @@ -2951,7 +2976,7 @@ thingtypes sprite = "STBLA0"; width = 12; height = 24; - deaftext = "[8] Moves perpetually"; + flags8text = "[8] Moves perpetually"; } 1504 { @@ -2965,7 +2990,8 @@ thingtypes blocking = 2; title = "Snowman"; sprite = "XMS3A0"; - deaftext = "[8] Not pushable"; + flags4text = "[4] Slides when pushed"; + flags8text = "[8] Not pushable"; } 1876 { @@ -2975,7 +3001,8 @@ thingtypes sprite = "ESTAB1"; width = 20; height = 96; - deaftext = "[8] Not pushable"; + flags4text = "[4] Slides when pushed"; + flags8text = "[8] Not pushable"; } } @@ -2992,7 +3019,8 @@ thingtypes title = "Fan"; sprite = "FANSA0D0"; width = 16; - deaftext = "[8] No distance check"; + flags4text = "[4] Invisible"; + flags8text = "[8] No distance check"; } 541 { @@ -3021,7 +3049,7 @@ thingtypes title = "Diagonal Yellow Spring"; sprite = "YSPRD2"; width = 16; - deaftext = "[8] Rotate 22.5° CCW"; + flags8text = "[8] Rotate 22.5° CCW"; } 556 { @@ -3029,7 +3057,7 @@ thingtypes title = "Diagonal Red Spring"; sprite = "RSPRD2"; width = 16; - deaftext = "[8] Rotate 22.5° CCW"; + flags8text = "[8] Rotate 22.5° CCW"; } } @@ -3205,13 +3233,15 @@ thingtypes 754 { title = "Push Point"; - deaftext = "[8] Push using XYZ"; + flags4text = "[4] Fades using XY"; + flags8text = "[8] Push using XYZ"; sprite = "GWLGA0"; } 755 { title = "Pull Point"; - deaftext = "[8] Pull using XYZ"; + flags4text = "[4] Fades using XY"; + flags8text = "[8] Pull using XYZ"; sprite = "GWLRA0"; } @@ -3236,6 +3266,7 @@ thingtypes { title = "Skybox View Point"; sprite = "internal:skyb"; + flags4text = "[4] In-map reference point"; } } @@ -3254,7 +3285,7 @@ thingtypes width = 12; height = 24; deafheight = 32; - deaftext = "[8] Float"; + flags8text = "[8] Float"; } 523 { @@ -3262,7 +3293,8 @@ thingtypes sprite = "USPKA0"; width = 8; height = 42; - deaftext = "[8] Solid"; + flags4text = "[4] Retractable"; + flags8text = "[8] Solid"; } 524 { @@ -3296,13 +3328,15 @@ thingtypes { title = "Mace (Swinging)"; sprite = "internal:mace1"; - deaftext = "[8] Double size"; + flags4text = "[4] No sounds"; + flags8text = "[8] Double size"; } 1104 { title = "Mace (Spinning)"; sprite = "internal:mace2"; - deaftext = "[8] Double size"; + flags4text = "[4] No sounds"; + flags8text = "[8] Double size"; } 1202 { @@ -3316,14 +3350,14 @@ thingtypes title = "Flame Jet (Horizontal)"; sprite = "internal:flameh"; width = 16; - deaftext = "[8] Waves vertically"; + flags8text = "[8] Waves vertically"; } 1301 { title = "Flame Jet (Vertical)"; sprite = "internal:flamev"; width = 16; - deaftext = "[8] Shoot downwards"; + flags8text = "[8] Shoot downwards"; } 1500 { @@ -3333,7 +3367,8 @@ thingtypes sprite = "GARGA1"; width = 16; height = 40; - deaftext = "[8] Not pushable"; + flags4text = "[4] Slides when pushed"; + flags8text = "[8] Not pushable"; } 1501 { @@ -3343,7 +3378,8 @@ thingtypes sprite = "GARGA1"; width = 16; height = 40; - deaftext = "[8] Not pushable"; + flags4text = "[4] Slides when pushed"; + flags8text = "[8] Not pushable"; } 1502 { @@ -3353,7 +3389,8 @@ thingtypes sprite = "GARGA1"; width = 16; height = 40; - deaftext = "[8] Not pushable"; + flags4text = "[4] Slides when pushed"; + flags8text = "[8] Not pushable"; } 1503 { @@ -3363,7 +3400,8 @@ thingtypes sprite = "GARGA1"; width = 16; height = 40; - deaftext = "[8] Not pushable"; + flags4text = "[4] Slides when pushed"; + flags8text = "[8] Not pushable"; } 3576 { @@ -3604,7 +3642,7 @@ thingtypes sprite = "NDRNA1"; width = 16; height = 56; - deaftext = "[8] Die upon time up"; + flags8text = "[8] Die upon time up"; } 1704 { @@ -3632,36 +3670,45 @@ thingtypes { title = "Super Paraloop"; sprite = "NPRUA0"; - deaftext = "[8] Spawn immediately"; + flags4text = "[4] Bonus time only"; + flags8text = "[8] Spawn immediately"; } 1708 { title = "Drill Refill"; sprite = "NPRUB0"; - deaftext = "[8] Spawn immediately"; + flags4text = "[4] Bonus time only"; + flags8text = "[8] Spawn immediately"; } 1709 { title = "Nightopian Helper"; sprite = "NPRUC0"; - deaftext = "[8] Spawn immediately"; + flags4text = "[4] Bonus time only"; + flags8text = "[8] Spawn immediately"; } 1711 { title = "Extra Time"; sprite = "NPRUD0"; - deaftext = "[8] Spawn immediately"; + flags4text = "[4] Bonus time only"; + flags8text = "[8] Spawn immediately"; } 1712 { title = "Link Freeze"; sprite = "NPRUE0"; - deaftext = "[8] Spawn immediately"; + flags4text = "[4] Bonus time only"; + flags8text = "[8] Spawn immediately"; } 1713 { arrow = 1; title = "Hoop (Customizable)"; + flags1text = "[1] Radius +16"; + flags2text = "[2] Radius +32"; + flags4text = "[4] Radius +64"; + flags8text = "[8] Radius +128"; sprite = "HOOPA0"; width = 80; height = 160; @@ -3946,7 +3993,7 @@ thingtypes sprite = "COINA0"; height = 24; deafheight = 32; - deaftext = "[8] Float"; + flags8text = "[8] Float"; } 1801 { @@ -4113,7 +4160,8 @@ thingtypes sprite = "SRBMC0"; width = 16; height = 40; - deaftext = "[8] Not pushable"; + flags4text = "[4] Slides when pushed"; + flags8text = "[8] Not pushable"; } 4014 { diff --git a/Source/Core/Config/GameConfiguration.cs b/Source/Core/Config/GameConfiguration.cs index ccb18d5..e69d776 100644 --- a/Source/Core/Config/GameConfiguration.cs +++ b/Source/Core/Config/GameConfiguration.cs @@ -504,7 +504,7 @@ namespace CodeImp.DoomBuilder.Config if(de.Value is IDictionary) { // Make a category - ThingCategory thingcat = new ThingCategory(cfg, null, de.Key.ToString(), enums); + ThingCategory thingcat = new ThingCategory(cfg, null, de.Key.ToString(), enums, thingflags); //mxd. Otherwise nesting problems might occure if(thingcat.IsValid) diff --git a/Source/Core/Config/ThingCategory.cs b/Source/Core/Config/ThingCategory.cs index 5063e2f..7424b43 100644 --- a/Source/Core/Config/ThingCategory.cs +++ b/Source/Core/Config/ThingCategory.cs @@ -42,6 +42,7 @@ namespace CodeImp.DoomBuilder.Config private readonly string title; private readonly bool sorted; private readonly List children; //mxd + private IDictionary flags; // Thing properties for inheritance private readonly string sprite; @@ -74,7 +75,8 @@ namespace CodeImp.DoomBuilder.Config public string Sprite { get { return sprite; } } public bool Sorted { get { return sorted; } } public List Children { get { return children; } } //mxd - public int Color { get { return color; } } + public IDictionary Flags { get { return flags; } } + public int Color { get { return color; } } public float Alpha { get { return alpha; } } //mxd public string RenderStyle { get { return renderstyle; } } //mxd public int Arrow { get { return arrow; } } @@ -148,12 +150,14 @@ namespace CodeImp.DoomBuilder.Config } // Constructor - internal ThingCategory(Configuration cfg, ThingCategory parent, string name, IDictionary enums) + internal ThingCategory(Configuration cfg, ThingCategory parent, string name, IDictionary enums, IDictionary flags) { // Initialize this.name = name; this.things = new List(); this.children = new List(); + this.flags = new Dictionary(flags); + ReadCategorySpecificFlags(cfg); // Read properties this.title = cfg.ReadSetting("thingtypes." + name + ".title", name); @@ -236,13 +240,13 @@ namespace CodeImp.DoomBuilder.Config else if(de.Value is string) { // Interpret this as the title - things.Add(new ThingTypeInfo(this, index, de.Value.ToString())); + things.Add(new ThingTypeInfo(this, index, de.Value.ToString(),cfg)); } } //mxd. This should be a child category else if(de.Value is IDictionary) { - ThingCategory child = new ThingCategory(cfg, this, name + "." + de.Key, enums); + ThingCategory child = new ThingCategory(cfg, this, name + "." + de.Key, enums,flags); if(child.IsValid && child.things.Count > 0) { if(cats.ContainsKey(child.title.ToLowerInvariant())) @@ -267,6 +271,7 @@ namespace CodeImp.DoomBuilder.Config { // Clean up things = null; + flags = null; //mxd. Dispose children (oh so cruel!!11) foreach(ThingCategory tc in children) tc.Dispose(); @@ -308,8 +313,18 @@ namespace CodeImp.DoomBuilder.Config { return title; } - - #endregion - } + + private void ReadCategorySpecificFlags(Configuration cfg) + { + Dictionary newflags = new Dictionary(flags); + foreach (KeyValuePair p in flags) + { + newflags[p.Key] = cfg.ReadSetting("thingtypes." + name + ".flags" + p.Key + "text", p.Value); + } + flags = newflags; + } + + #endregion + } } diff --git a/Source/Core/Config/ThingTypeInfo.cs b/Source/Core/Config/ThingTypeInfo.cs index d9aa17b..726e5b5 100644 --- a/Source/Core/Config/ThingTypeInfo.cs +++ b/Source/Core/Config/ThingTypeInfo.cs @@ -74,6 +74,7 @@ namespace CodeImp.DoomBuilder.Config private readonly bool locksprite; //mxd private bool obsolete; //mxd private string obsoletemessage; //mxd + private IDictionary flags; //mxd. GLOOME rendering settings private Thing.SpriteRenderMode rendermode; @@ -108,7 +109,8 @@ namespace CodeImp.DoomBuilder.Config public bool IsNull { get { return (index == 0); } } public bool IsObsolete { get { return obsolete; } } //mxd public string ObsoleteMessage { get { return obsoletemessage; } } //mxd - public bool AbsoluteZ { get { return absolutez; } } + public IDictionary Flags { get { return flags; } } + public bool AbsoluteZ { get { return absolutez; } } public bool XYBillboard { get { return xybillboard; } } //mxd public SizeF SpriteScale { get { return spritescale; } } public string ClassName { get { return classname; } } //mxd. Need this to add model overrides for things defined in configs @@ -152,6 +154,7 @@ namespace CodeImp.DoomBuilder.Config this.absolutez = false; this.xybillboard = false; this.locksprite = false; //mxd + this.flags = new Dictionary(); // We have no destructor GC.SuppressFinalize(this); @@ -190,6 +193,8 @@ namespace CodeImp.DoomBuilder.Config this.spritescale = new SizeF(sscale, sscale); this.locksprite = cfg.ReadSetting("thingtypes." + cat.Name + "." + key + ".locksprite", false); //mxd this.classname = cfg.ReadSetting("thingtypes." + cat.Name + "." + key + ".class", String.Empty); //mxd + this.flags = new Dictionary(cat.Flags); + ReadThingSpecificFlags(cfg); // Read the args for(int i = 0; i < Linedef.NUM_ARGS; i++) @@ -210,7 +215,7 @@ namespace CodeImp.DoomBuilder.Config } // Constructor - public ThingTypeInfo(ThingCategory cat, int index, string title) + public ThingTypeInfo(ThingCategory cat, int index, string title, Configuration cfg) { // Initialize this.index = index; @@ -240,9 +245,11 @@ namespace CodeImp.DoomBuilder.Config this.absolutez = cat.AbsoluteZ; this.spritescale = new SizeF(cat.SpriteScale, cat.SpriteScale); this.locksprite = false; + this.flags = new Dictionary(cat.Flags); + ReadThingSpecificFlags(cfg); - // Safety - if(this.radius < 4f) this.radius = 8f; + // Safety + if (this.radius < 4f) this.radius = 8f; if(this.hangs && this.absolutez) this.hangs = false; //mxd // Make long name for sprite lookup @@ -285,9 +292,10 @@ namespace CodeImp.DoomBuilder.Config this.fixedrotation = cat.FixedRotation; //mxd this.absolutez = cat.AbsoluteZ; this.spritescale = new SizeF(cat.SpriteScale, cat.SpriteScale); + this.flags = new Dictionary(cat.Flags); - // Safety - if(this.radius < 4f) this.radius = 8f; + // Safety + if (this.radius < 4f) this.radius = 8f; if(this.hangs && this.absolutez) this.hangs = false; //mxd // Apply settings from actor @@ -327,9 +335,10 @@ namespace CodeImp.DoomBuilder.Config this.fixedrotation = cat.FixedRotation; //mxd this.absolutez = cat.AbsoluteZ; this.spritescale = new SizeF(cat.SpriteScale, cat.SpriteScale); + this.flags = new Dictionary(cat.Flags); - // Safety - if(this.radius < 4f) this.radius = 8f; + // Safety + if (this.radius < 4f) this.radius = 8f; if(this.hangs && this.absolutez) this.hangs = false; //mxd // Apply settings from actor @@ -371,9 +380,10 @@ namespace CodeImp.DoomBuilder.Config this.absolutez = other.absolutez; this.xybillboard = other.xybillboard; //mxd this.spritescale = new SizeF(other.spritescale.Width, other.spritescale.Height); + this.flags = new Dictionary(other.flags); - //mxd. Copy GLOOME properties - this.rendermode = other.rendermode; + //mxd. Copy GLOOME properties + this.rendermode = other.rendermode; this.sticktoplane = other.sticktoplane; this.rollsprite = other.rollsprite; @@ -512,7 +522,17 @@ namespace CodeImp.DoomBuilder.Config { return title + " (" + index + ")"; } - + + private void ReadThingSpecificFlags(Configuration cfg) + { + Dictionary newflags = new Dictionary(flags); + string key = index.ToString(CultureInfo.InvariantCulture); + foreach (KeyValuePair p in flags) + { + newflags[p.Key] = cfg.ReadSetting("thingtypes." + category.Name + "." + key + ".flags" + p.Key + "text", p.Value); + } + flags = newflags; + } #endregion } } diff --git a/Source/Core/Controls/CheckboxArrayControl.cs b/Source/Core/Controls/CheckboxArrayControl.cs index de451de..e9682cc 100644 --- a/Source/Core/Controls/CheckboxArrayControl.cs +++ b/Source/Core/Controls/CheckboxArrayControl.cs @@ -71,6 +71,16 @@ namespace CodeImp.DoomBuilder.Controls return c; } + public void UpdateCheckboxes(IDictionary newflags) + { + int i = 0; + foreach (KeyValuePair p in newflags) + { + checkboxes[i].Text = p.Value; + i++; + } + } + //mxd public int GetWidth() { diff --git a/Source/Core/Controls/ThingInfoPanel.cs b/Source/Core/Controls/ThingInfoPanel.cs index 440bb1f..92a4b2d 100644 --- a/Source/Core/Controls/ThingInfoPanel.cs +++ b/Source/Core/Controls/ThingInfoPanel.cs @@ -194,7 +194,8 @@ namespace CodeImp.DoomBuilder.Controls //mxd. Flags flags.Items.Clear(); - foreach(KeyValuePair group in General.Map.Config.ThingFlags) + IDictionary flagList = (ti == null || ti.Flags.Count == 0) ? General.Map.Config.ThingFlags : ti.Flags; + foreach (KeyValuePair group in flagList) { if(t.Flags.ContainsKey(group.Key) && t.Flags[group.Key]) flags.Items.Add(new ListViewItem(group.Value) { Checked = true }); diff --git a/Source/Core/Windows/ThingEditForm.cs b/Source/Core/Windows/ThingEditForm.cs index 4b4e278..d983dc6 100644 --- a/Source/Core/Windows/ThingEditForm.cs +++ b/Source/Core/Windows/ThingEditForm.cs @@ -188,9 +188,12 @@ namespace CodeImp.DoomBuilder.Windows // Set type thingtype.SelectType(ft.Type); - - // Flags - foreach(CheckBox c in flags.Checkboxes) + + // Flags + ThingTypeInfo ti = General.Map.Data.GetThingInfoEx(ft.Type); + if (ti != null) flags.UpdateCheckboxes(ti.Flags); + + foreach (CheckBox c in flags.Checkboxes) if(ft.Flags.ContainsKey(c.Tag.ToString())) c.Checked = ft.Flags[c.Tag.ToString()]; // Coordination @@ -618,7 +621,9 @@ namespace CodeImp.DoomBuilder.Windows t.UpdateConfiguration(); } - General.Map.IsChanged = true; + if (thinginfo != null) flags.UpdateCheckboxes(thinginfo.Flags); + + General.Map.IsChanged = true; if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty); }