Allow Thing flags text to be changed per type

This commit is contained in:
MascaraSnake 2016-01-14 19:31:21 +01:00
parent 841f4087b6
commit f3a756c7d4
7 changed files with 175 additions and 76 deletions

View file

@ -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
{

View file

@ -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)

View file

@ -42,6 +42,7 @@ namespace CodeImp.DoomBuilder.Config
private readonly string title;
private readonly bool sorted;
private readonly List<ThingCategory> children; //mxd
private IDictionary<string, string> 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<ThingCategory> Children { get { return children; } } //mxd
public int Color { get { return color; } }
public IDictionary<string,string> 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<string, EnumList> enums)
internal ThingCategory(Configuration cfg, ThingCategory parent, string name, IDictionary<string, EnumList> enums, IDictionary<string,string> flags)
{
// Initialize
this.name = name;
this.things = new List<ThingTypeInfo>();
this.children = new List<ThingCategory>();
this.flags = new Dictionary<string,string>(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<string, string> newflags = new Dictionary<string, string>(flags);
foreach (KeyValuePair<string,string> p in flags)
{
newflags[p.Key] = cfg.ReadSetting("thingtypes." + name + ".flags" + p.Key + "text", p.Value);
}
flags = newflags;
}
#endregion
}
}

View file

@ -74,6 +74,7 @@ namespace CodeImp.DoomBuilder.Config
private readonly bool locksprite; //mxd
private bool obsolete; //mxd
private string obsoletemessage; //mxd
private IDictionary<string, string> 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<string, string> 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<string, string>();
// 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<string,string>(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<string, string>(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<string, string>(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<string, string>(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<string, string>(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<string, string> newflags = new Dictionary<string, string>(flags);
string key = index.ToString(CultureInfo.InvariantCulture);
foreach (KeyValuePair<string,string> p in flags)
{
newflags[p.Key] = cfg.ReadSetting("thingtypes." + category.Name + "." + key + ".flags" + p.Key + "text", p.Value);
}
flags = newflags;
}
#endregion
}
}

View file

@ -71,6 +71,16 @@ namespace CodeImp.DoomBuilder.Controls
return c;
}
public void UpdateCheckboxes(IDictionary<string,string> newflags)
{
int i = 0;
foreach (KeyValuePair<string,string> p in newflags)
{
checkboxes[i].Text = p.Value;
i++;
}
}
//mxd
public int GetWidth()
{

View file

@ -194,7 +194,8 @@ namespace CodeImp.DoomBuilder.Controls
//mxd. Flags
flags.Items.Clear();
foreach(KeyValuePair<string, string> group in General.Map.Config.ThingFlags)
IDictionary<string, string> flagList = (ti == null || ti.Flags.Count == 0) ? General.Map.Config.ThingFlags : ti.Flags;
foreach (KeyValuePair<string, string> group in flagList)
{
if(t.Flags.ContainsKey(group.Key) && t.Flags[group.Key])
flags.Items.Add(new ListViewItem(group.Value) { Checked = true });

View file

@ -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);
}