Replace the skill level option with skin and gametype options for SRB2

This commit is contained in:
MascaraSnake 2016-01-30 16:55:15 +01:00
parent 52ee6c41d0
commit fda0ec6e52
8 changed files with 1067 additions and 898 deletions

View file

@ -67,7 +67,7 @@ defaultskytextures
defaultlumpname = "MAP01";
// Default testing parameters
testparameters = "-file \"%AP\" -warp %L";
testparameters = "-file \"%AP\" -warp %L +skin %C";
testshortpaths = true;
// Default nodebuilder configurations
@ -80,6 +80,28 @@ skills
1 = "Normal";
}
// Skins
skins
{
Sonic;
Tails;
Knuckles;
}
// Gametypes
gametypes
{
-1 = "Single Player";
0 = "Co-op";
1 = "Competition";
2 = "Race";
3 = "Match";
4 = "Team Match";
5 = "Tag";
6 = "Hide and Seek";
7 = "CTF";
}
// When this is set to true, sectors with the same tag will light up when a line is highlighted
linetagindicatesectors = true;

View file

@ -91,7 +91,9 @@ namespace CodeImp.DoomBuilder.Config
public string TestParameters { get { return testEngines[currentEngineIndex].TestParameters; } internal set { testEngines[currentEngineIndex].TestParameters = value; } }
public bool TestShortPaths { get { return testEngines[currentEngineIndex].TestShortPaths; } internal set { testEngines[currentEngineIndex].TestShortPaths = value; } }
public int TestSkill { get { return testEngines[currentEngineIndex].TestSkill; } internal set { testEngines[currentEngineIndex].TestSkill = value; } }
public bool CustomParameters { get { return testEngines[currentEngineIndex].CustomParameters; } internal set { testEngines[currentEngineIndex].CustomParameters = value; } }
public string TestSkin { get { return testEngines[currentEngineIndex].TestSkin; } internal set { testEngines[currentEngineIndex].TestSkin = value; } }
public int TestGametype { get { return testEngines[currentEngineIndex].TestGametype; } internal set { testEngines[currentEngineIndex].TestGametype = value; } }
public bool CustomParameters { get { return testEngines[currentEngineIndex].CustomParameters; } internal set { testEngines[currentEngineIndex].CustomParameters = value; } }
public List<EngineInfo> TestEngines { get { return testEngines; } internal set { testEngines = value; } }
public int CurrentEngineIndex { get { return currentEngineIndex; } internal set { currentEngineIndex = value; } }
public LinedefColorPreset[] LinedefColorPresets { get { return linedefColorPresets; } internal set { linedefColorPresets = value; } }
@ -141,7 +143,9 @@ namespace CodeImp.DoomBuilder.Config
info.TestShortPaths = General.Settings.ReadSetting("configurations." + settingskey + ".testshortpaths", false);
info.CustomParameters = General.Settings.ReadSetting("configurations." + settingskey + ".customparameters", false);
info.TestSkill = General.Settings.ReadSetting("configurations." + settingskey + ".testskill", 3);
testEngines.Add(info);
info.TestSkin = General.Settings.ReadSetting("configurations." + settingskey + ".testskin", "Sonic");
info.TestGametype = General.Settings.ReadSetting("configurations." + settingskey + ".testgametype", -1);
testEngines.Add(info);
currentEngineIndex = 0;
}
else
@ -157,7 +161,9 @@ namespace CodeImp.DoomBuilder.Config
info.TestShortPaths = General.Settings.ReadSetting(path + ".testshortpaths", false);
info.CustomParameters = General.Settings.ReadSetting(path + ".customparameters", false);
info.TestSkill = General.Settings.ReadSetting(path + ".testskill", 3);
testEngines.Add(info);
info.TestSkin = General.Settings.ReadSetting(path + ".testskin", "Sonic");
info.TestGametype = General.Settings.ReadSetting(path + ".testgametype", -1);
testEngines.Add(info);
}
if(currentEngineIndex >= testEngines.Count) currentEngineIndex = 0;
@ -318,9 +324,11 @@ namespace CodeImp.DoomBuilder.Config
rlinfo.Add("testshortpaths", testEngines[i].TestShortPaths);
rlinfo.Add("customparameters", testEngines[i].CustomParameters);
rlinfo.Add("testskill", testEngines[i].TestSkill);
rlinfo.Add("testskin", testEngines[i].TestSkin);
rlinfo.Add("testgametype", testEngines[i].TestGametype);
// Add structure
resinfo.Add("engine" + i.ToString(CultureInfo.InvariantCulture), rlinfo);
// Add structure
resinfo.Add("engine" + i.ToString(CultureInfo.InvariantCulture), rlinfo);
}
// Write to config

View file

@ -92,9 +92,13 @@ namespace CodeImp.DoomBuilder.Config
// Skills
private readonly List<SkillInfo> skills;
//Skins
private readonly List<String> skins;
//Gametypes
private readonly List<SkillInfo> gametypes;
// Map lumps
private readonly Dictionary<string, MapLumpInfo> maplumps;
// Map lumps
private readonly Dictionary<string, MapLumpInfo> maplumps;
//mxd. Map format
private readonly bool doommapformat;
@ -212,9 +216,14 @@ namespace CodeImp.DoomBuilder.Config
// Skills
public List<SkillInfo> Skills { get { return skills; } }
// Map lumps
public Dictionary<string, MapLumpInfo> MapLumps { get { return maplumps; } }
// Gametypes (hijack SkillInfo class for this)
public List<SkillInfo> Gametypes { get { return gametypes; } }
//Skins
public List<String> Skins { get { return skins; } }
// Map lumps
public Dictionary<string, MapLumpInfo> MapLumps { get { return maplumps; } }
//mxd. Map format
public bool UDMF { get { return universalmapformat; } }
@ -303,6 +312,8 @@ namespace CodeImp.DoomBuilder.Config
this.geneffectoptions = new List<GeneralizedOption>();
this.enums = new Dictionary<string, EnumList>(StringComparer.Ordinal);
this.skills = new List<SkillInfo>();
this.skins = new List<String>();
this.gametypes = new List<SkillInfo>();
this.texturesets = new List<DefinedTextureSet>();
this.makedoorargs = new int[Linedef.NUM_ARGS];
this.maplumps = new Dictionary<string, MapLumpInfo>(StringComparer.Ordinal);
@ -399,6 +410,10 @@ namespace CodeImp.DoomBuilder.Config
// Skills
LoadSkills();
//Skins
LoadSkins();
//Gametypes
LoadGametypes();
// Enums
LoadEnums();
@ -869,9 +884,39 @@ namespace CodeImp.DoomBuilder.Config
}
}
}
// Texture Sets
private void LoadTextureSets()
// Skins
private void LoadSkins()
{
// Get skins
IDictionary dic = cfg.ReadSetting("skins", new Hashtable());
foreach (DictionaryEntry de in dic)
{
skins.Add(de.Key.ToString());
}
}
// Gametypes
private void LoadGametypes()
{
// Get gametypes
IDictionary dic = cfg.ReadSetting("gametypes", new Hashtable());
foreach (DictionaryEntry de in dic)
{
int num;
if (int.TryParse(de.Key.ToString(), out num))
{
gametypes.Add(new SkillInfo(num, de.Value.ToString()));
}
else
{
General.ErrorLogger.Add(ErrorType.Warning, "Structure 'gametypes' contains invalid gametype numbers in game configuration '" + this.Name + "'");
}
}
}
// Texture Sets
private void LoadTextureSets()
{
// Get sets
IDictionary dic = cfg.ReadSetting("texturesets", new Hashtable());

View file

@ -14,6 +14,8 @@ namespace CodeImp.DoomBuilder.GZBuilder.Data
public string TestParameters;
public bool CustomParameters;
public int TestSkill;
public string TestSkin;
public int TestGametype;
public bool TestShortPaths;
private Bitmap icon;
public Bitmap TestProgramIcon { get { return icon; } }
@ -30,6 +32,8 @@ namespace CodeImp.DoomBuilder.GZBuilder.Data
TestParameters = other.TestParameters;
CustomParameters = other.CustomParameters;
TestSkill = other.TestSkill;
TestSkin = other.TestSkin;
TestGametype = other.TestGametype;
TestShortPaths = other.TestShortPaths;
icon = other.icon;
}

View file

@ -96,7 +96,7 @@ namespace CodeImp.DoomBuilder
// This takes the unconverted parameters (with placeholders) and converts it
// to parameters with full paths, names and numbers where placeholders were put.
// The tempfile must be the full path and filename to the PWAD file to test.
public string ConvertParameters(string parameters, int skill, bool shortpaths)
public string ConvertParameters(string parameters, int skill, string skin, int gametype, bool shortpaths)
{
string outp = parameters;
DataLocation iwadloc;
@ -211,9 +211,10 @@ namespace CodeImp.DoomBuilder
outp = outp.Replace("%nM", "%NM");
outp = outp.Replace("%Nm", "%NM");
outp = outp.Replace("%nm", "%NM");
// Replace placeholders with actual values
outp = outp.Replace("%F", f);
outp = outp.Replace("%c", "%C");
// Replace placeholders with actual values
outp = outp.Replace("%F", f);
outp = outp.Replace("%WP", p_wp);
outp = outp.Replace("%WF", p_wf);
outp = outp.Replace("%L1", p_l1);
@ -223,9 +224,12 @@ namespace CodeImp.DoomBuilder
outp = outp.Replace("%AP", p_ap);
outp = outp.Replace("%S", skill.ToString());
outp = outp.Replace("%NM", p_nm);
// Return result
return outp;
outp = outp.Replace("%C", skin.ToLowerInvariant());
if (gametype != -1)
outp = outp + " -server -gametype " + gametype.ToString();
// Return result
return outp;
}
//mxd
@ -310,7 +314,7 @@ namespace CodeImp.DoomBuilder
if(General.Map.Errors.Count == 0)
{
// Make arguments
string args = ConvertParameters(General.Map.ConfigSettings.TestParameters, skill, General.Map.ConfigSettings.TestShortPaths);
string args = ConvertParameters(General.Map.ConfigSettings.TestParameters, skill, General.Map.ConfigSettings.TestSkin, General.Map.ConfigSettings.TestGametype, General.Map.ConfigSettings.TestShortPaths);
// Setup process info
ProcessStartInfo processinfo = new ProcessStartInfo();

File diff suppressed because it is too large Load diff

View file

@ -42,8 +42,8 @@ namespace CodeImp.DoomBuilder.Windows
//mxd. "Copy/Paste" stuff
private ConfigurationInfo configinfocopy;
// Properties
public bool ReloadResources { get { return reloadresources; } }
// Properties
public bool ReloadResources { get { return reloadresources; } }
// Constructor
public ConfigForm()
@ -72,6 +72,8 @@ namespace CodeImp.DoomBuilder.Windows
// No skill
skill.Value = 0;
skin.Text = "Sonic";
gametype.Value = -1;
// Nodebuilders are allowed to be empty
nodebuildersave.Items.Add(new NodebuilderInfo());
@ -166,21 +168,37 @@ namespace CodeImp.DoomBuilder.Windows
break;
}
}
// Fill skills list
skill.ClearInfo();
label8.Visible = !gameconfig.SRB2;
skill.Visible = !gameconfig.SRB2;
label12.Visible = gameconfig.SRB2;
skin.Visible = gameconfig.SRB2;
label14.Visible = gameconfig.SRB2;
gametype.Visible = gameconfig.SRB2;
// Fill skills list
skill.ClearInfo();
skill.AddInfo(gameconfig.Skills.ToArray());
//mxd. Fill engines list
cbEngineSelector.Items.Clear();
// Fill skins list
skin.Items.Clear();
foreach (string s in gameconfig.Skins)
skin.Items.Add(s);
// Fill gametypes list
gametype.ClearInfo();
gametype.AddInfo(gameconfig.Gametypes.ToArray());
//mxd. Fill engines list
cbEngineSelector.Items.Clear();
foreach(EngineInfo info in configinfo.TestEngines)
cbEngineSelector.Items.Add(info.TestProgramName);
cbEngineSelector.SelectedIndex = configinfo.CurrentEngineIndex;
btnRemoveEngine.Enabled = configinfo.TestEngines.Count > 1;
// Fill texture sets list
listtextures.Items.Clear();
// Fill texture sets list
listtextures.Items.Clear();
foreach(DefinedTextureSet ts in configinfo.TextureSets)
{
ListViewItem item = listtextures.Items.Add(ts.Name);
@ -241,7 +259,11 @@ namespace CodeImp.DoomBuilder.Windows
shortpaths.Checked = false;
skill.Value = 0;
skill.ClearInfo();
customparameters.Checked = false;
skin.Text = "Sonic";
skin.Items.Clear();
gametype.Value = -1;
gametype.ClearInfo();
customparameters.Checked = false;
tabs.Enabled = false;
listtextures.Items.Clear();
}
@ -352,7 +374,7 @@ namespace CodeImp.DoomBuilder.Windows
if(General.Map != null)
{
// Make converted parameters
testresult.Text = General.Map.Launcher.ConvertParameters(testparameters.Text, skill.Value, shortpaths.Checked);
testresult.Text = General.Map.Launcher.ConvertParameters(testparameters.Text, skill.Value, skin.Text, gametype.Value, shortpaths.Checked);
}
}
@ -493,8 +515,34 @@ namespace CodeImp.DoomBuilder.Windows
CreateParametersExample();
}
// Make new texture set
private void addtextureset_Click(object sender, EventArgs e)
// Skin changes
private void skin_SelectedIndexChanged(object sender, EventArgs e)
{
// Leave when no configuration selected
if (configinfo == null) return;
// Apply to selected configuration
configinfo.TestSkin = skin.Text;
configinfo.Changed = true; //mxd
CreateParametersExample();
}
// Gametype changes
private void gametype_ValueChanges(object sender, EventArgs e)
{
// Leave when no configuration selected
if (configinfo == null) return;
// Apply to selected configuration
configinfo.TestGametype = gametype.Value;
configinfo.Changed = true; //mxd
CreateParametersExample();
}
// Make new texture set
private void addtextureset_Click(object sender, EventArgs e)
{
DefinedTextureSet s = new DefinedTextureSet("New Texture Set");
TextureSetForm form = new TextureSetForm();
@ -702,6 +750,8 @@ namespace CodeImp.DoomBuilder.Windows
EngineInfo newInfo = new EngineInfo();
newInfo.TestSkill = (int)Math.Ceiling(gameconfig.Skills.Count / 2f); //set Medium skill level
newInfo.TestSkin = "Sonic";
newInfo.TestGametype = -1; //Single player
configinfo.TestEngines.Add(newInfo);
configinfo.Changed = true;
@ -775,6 +825,10 @@ namespace CodeImp.DoomBuilder.Windows
int skilllevel = configinfo.TestSkill;
skill.Value = skilllevel - 1; //mxd. WHY???
skill.Value = skilllevel;
skin.Text = configinfo.TestSkin;
int gametypevalue = configinfo.TestGametype;
gametype.Value = gametypevalue - 1;
gametype.Value = gametypevalue;
customparameters.Checked = configinfo.CustomParameters;
}

View file

@ -117,60 +117,57 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="label5.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label5.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label6.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="label5.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label6.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label3.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="label6.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label3.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label3.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="label3.Text" xml:space="preserve">
<value>The nodebuilder is a compiler which builds geometry structures for your map. You need these structures to be able to play the map in the game. For each purpose you can choose the desired nodebuilder configuration here.</value>
</data>
<metadata name="label2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label2.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label7.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="label2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label7.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label7.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label9.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label1.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label8.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="label4.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label4.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label4.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="label10.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label10.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label10.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<data name="label10.Text" xml:space="preserve">
<value>Here you can select the editing modes that you wish to use in this configuration. This is useful in case there are plugins with additional editing modes that can be used as a replacement for the original editing modes.</value>
</data>
@ -186,6 +183,7 @@
%L2 - The second number found in the map lump name (as is set in the map options window).
%AP - All resource files, except the first IWAD, with full paths included.
%S - Skill number at which to test.
%C - Name of player character to use.
%NM - Either -nomonsters when testing without monsters, or nothing at all.</value>
</data>
<metadata name="tabresources.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
@ -203,45 +201,21 @@
<metadata name="tabtesting.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label14.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label12.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label8.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="tabtextures.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="listtextures.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="restoretexturesets.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="edittextureset.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="pastetexturesets.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="copytexturesets.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="removetextureset.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="addtextureset.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="tabmodes.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="listmodes.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="nodebuildertest.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="nodebuildersave.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="listtextures.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="smallimages.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>159, 17</value>
</metadata>
@ -250,7 +224,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA4
CAAAAk1TRnQBSQFMAwEBAAHUAQEB1AEBARMBAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
CAAAAk1TRnQBSQFMAwEBAAHwAQEB8AEBARMBAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
AUwDAAEQAwABAQEAAQgFAAHAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@ -306,6 +280,9 @@
<metadata name="addtextureset.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="tabmodes.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="listmodes.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
@ -315,7 +292,4 @@
<metadata name="testprogramdialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>416, 17</value>
</metadata>
</root>