Fully implement editing weapons.

This commit is contained in:
Li 2023-01-11 01:22:45 -08:00
parent 3b89a6967f
commit a107ec2a2f
38 changed files with 2914 additions and 239 deletions

4
.gitignore vendored
View File

@ -1,7 +1,7 @@
Worms4Editor/obj/*
Worms4Editor/bin/*
LibXom/obj/*
LibXom/bin/*
LibW4M/obj/*
LibW4M/bin/*
W4Gui/obj/*
W4Gui/bin/*
.vs/*

View File

@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace LibW4M.Data
{
internal abstract class SaveDataEntry
public abstract class SaveDataEntry
{
internal Guid guid = Guid.NewGuid();
internal W4SaveFile fileBelongs;

View File

@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace LibW4M.Data.WeaponFactory
{
public enum Detonation : int
public enum DetonationType : int
{
Impact = 0,
Fuse = 1,

View File

@ -8,7 +8,7 @@ namespace LibW4M.Data.WeaponFactory
{
public enum ProjectileLaunchType : int
{
AirStrike = 0
AirStrike = 0,
Launched = 1,
Thrown = 2
}

View File

@ -0,0 +1,181 @@
using LibXom.Data;
using LibXom.Streams;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace LibW4M.Data.WeaponFactory
{
public class WeaponContainer
{
private W4SaveFile saveFile;
public W4SaveFile OriginalSave
{
get
{
return this.saveFile;
}
}
public XomString Name;
public int Type;
public DetonationType DetonationType;
public bool Homing;
public bool HomingAvoidLand;
public bool EffectedByWind;
public bool FireOnGround;
public bool Poison;
public int RetreatTime;
public float WormDamageRadius;
public float WormDamageMagnitude;
public float LandDamageRadius;
public float ProjectileCollisionRadius;
public float Push;
public int FuseTime;
public XomString[] GraphicalResources;
public XomString[] GraphicalLocators;
public XomString LaunchFX;
public XomString ArielFX;
public XomString DetonationFX;
public int PayloadResourceId;
public ProjectileLaunchType ProjectileLaunchType;
public bool ProjectilePowersUp;
public int ProjectileNumClusters;
public float ProjectileMaxPower;
public float ClusterSpread;
public float ClusterMaxSpeed;
internal byte[] serialize()
{
using (MemoryStream ms = new MemoryStream())
{
using (XomStreamWriter writer = new XomStreamWriter(ms))
{
writer.Skip(3);
writer.WriteCompressedInt(this.Name.Id);
writer.WriteInt32(this.Type);
writer.WriteInt32((int)this.DetonationType);
writer.WriteBool(this.Homing);
writer.WriteBool(this.HomingAvoidLand);
writer.WriteBool(this.EffectedByWind);
writer.WriteBool(this.FireOnGround);
writer.WriteBool(this.Poison);
writer.WriteInt32(this.RetreatTime);
writer.WriteFloat(this.WormDamageRadius);
writer.WriteFloat(this.WormDamageMagnitude);
writer.WriteFloat(this.LandDamageRadius);
writer.WriteFloat(this.ProjectileCollisionRadius);
writer.WriteFloat(this.Push);
writer.WriteInt32(this.FuseTime);
// Write Graphical Resources list
int[] graphicalResourceIds = new int[this.GraphicalResources.Length];
for (int i = 0; i < graphicalResourceIds.Length; i++)
graphicalResourceIds[i] = this.GraphicalResources[i].Id;
writer.WriteCompressedIntArray(graphicalResourceIds);
// Write Graphical Locators list
int[] graphicalLocatorIds = new int[this.GraphicalLocators.Length];
for (int i = 0; i < graphicalLocatorIds.Length; i++)
graphicalLocatorIds[i] = this.GraphicalLocators[i].Id;
writer.WriteCompressedIntArray(graphicalLocatorIds);
writer.WriteCompressedInt(this.LaunchFX.Id);
writer.WriteCompressedInt(this.ArielFX.Id);
writer.WriteCompressedInt(this.DetonationFX.Id);
writer.WriteInt32(this.PayloadResourceId);
writer.WriteInt32((int)this.ProjectileLaunchType);
writer.WriteBool(this.ProjectilePowersUp);
writer.WriteInt32(this.ProjectileNumClusters);
writer.WriteFloat(this.ProjectileMaxPower);
writer.WriteFloat(this.ClusterSpread);
writer.WriteFloat(this.ClusterMaxSpeed);
ms.Seek(0x00, SeekOrigin.Begin);
return ms.ToArray();
}
}
}
internal void deserailize(byte[] data)
{
using (XomStreamReader reader = new XomStreamReader(new MemoryStream(data)))
{
reader.Skip(3);
this.Name = saveFile.xomFile.GetStringById(reader.ReadCompressedInt());
this.Type = reader.ReadInt32();
this.DetonationType = (DetonationType)reader.ReadInt32();
this.Homing = reader.ReadBool();
this.HomingAvoidLand = reader.ReadBool();
this.EffectedByWind = reader.ReadBool();
this.FireOnGround = reader.ReadBool();
this.Poison = reader.ReadBool();
this.RetreatTime = reader.ReadInt32();
this.WormDamageRadius = reader.ReadFloat();
this.WormDamageMagnitude = reader.ReadFloat();
this.LandDamageRadius = reader.ReadFloat();
this.ProjectileCollisionRadius = reader.ReadFloat();
this.Push = reader.ReadFloat();
this.FuseTime = reader.ReadInt32();
// Read graphical resources list.
int[] graphicalResourceIds = reader.ReadCompressedIntArray();
this.GraphicalResources = new XomString[graphicalResourceIds.Length];
for (int i = 0; i < graphicalResourceIds.Length; i++)
this.GraphicalResources[i] = saveFile.xomFile.GetStringById(graphicalResourceIds[i]);
// Read graphical locators list.
int[] graphicalLocatorIds = reader.ReadCompressedIntArray();
this.GraphicalLocators = new XomString[graphicalLocatorIds.Length];
for (int i = 0; i < graphicalLocatorIds.Length; i++)
this.GraphicalLocators[i] = saveFile.xomFile.GetStringById(graphicalLocatorIds[i]);
this.LaunchFX = saveFile.xomFile.GetStringById(reader.ReadCompressedInt());
this.ArielFX = saveFile.xomFile.GetStringById(reader.ReadCompressedInt());
this.DetonationFX = saveFile.xomFile.GetStringById(reader.ReadCompressedInt());
this.PayloadResourceId = reader.ReadInt32();
this.ProjectileLaunchType = (ProjectileLaunchType)reader.ReadInt32();
this.ProjectilePowersUp = reader.ReadBool();
this.ProjectileNumClusters = reader.ReadInt32();
this.ProjectileMaxPower = reader.ReadFloat();
this.ClusterSpread = reader.ReadFloat();
this.ClusterMaxSpeed = reader.ReadFloat();
}
}
internal WeaponContainer(byte[] data, W4SaveFile saveFile)
{
this.saveFile = saveFile;
this.deserailize(data);
}
}
}

View File

@ -1,153 +0,0 @@
using LibXom.Data;
using LibXom.Streams;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace LibW4M.Data.WeaponFactory
{
internal class WeaponData
{
private XomFile saveFile;
private XomString WeaponName;
public int Type;
public Detonation DetonationType;
public bool Homing;
public bool HomingAvoidLand;
public bool EffectedByWind;
public bool FireOnGround;
public bool Poison;
public int RetreatTime;
public float WormDamageRadius;
public float WormDamageMagnitude;
public float LandDamageRadius;
public float ProjectileCollisionRadius;
public float Push;
public int FuseTime;
public int[] GraphicalResourceIds;
public int[] GraphicalLocatorIds;
public XomString LaunchFX;
public XomString ArielFX;
public XomString DetonationFX;
public int PayloadResourceId;
public ProjectileLaunchType ProjectileLaunchType;
public bool ProjectilePowersUp;
public int ProjectileNumClusters;
public float ProjectileMaxPower;
public float ClusterSpread;
public float ClusterMaxSpeed;
internal byte[] serialize()
{
using (XomStreamWriter writer = new XomStreamWriter(new MemoryStream()))
{
writer.Skip(3);
writer.WriteCompressedInt(this.WeaponName.Id);
writer.WriteInt32(this.Type);
writer.WriteInt32((int)this.DetonationType);
writer.WriteBool(this.Homing);
writer.WriteBool(this.HomingAvoidLand);
writer.WriteBool(this.EffectedByWind);
writer.WriteBool(this.FireOnGround);
writer.WriteBool(this.Poison);
writer.WriteInt32(this.RetreatTime);
writer.WriteFloat(this.WormDamageRadius);
writer.WriteFloat(this.WormDamageMagnitude);
writer.WriteFloat(this.LandDamageRadius);
writer.WriteFloat(this.ProjectileCollisionRadius);
writer.WriteFloat(this.Push);
writer.WriteInt32(this.FuseTime);
writer.WriteCompressedIntArray(this.GraphicalResourceIds);
writer.WriteCompressedIntArray(this.GraphicalLocatorIds);
writer.WriteCompressedInt(this.LaunchFX.Id);
writer.WriteCompressedInt(this.ArielFX.Id);
writer.WriteCompressedInt(this.DetonationFX.Id);
writer.WriteInt32(this.PayloadResourceId);
writer.WriteInt32((int)this.ProjectileLaunchType);
writer.WriteBool(this.ProjectilePowersUp);
writer.WriteInt32(this.ProjectileNumClusters);
writer.WriteFloat(this.ProjectileMaxPower);
writer.WriteFloat(this.ClusterSpread);
writer.WriteFloat(this.ClusterMaxSpeed);
writer.Skip(1);
writer.BaseStream.Seek(0x00, SeekOrigin.Begin);
MemoryStream ms = (MemoryStream)(writer.BaseStream).ToArray();
}
}
internal void deserailize(byte[] data)
{
using (XomStreamReader reader = new XomStreamReader(new MemoryStream(data)))
{
reader.Skip(3);
this.WeaponName = saveFile.GetStringById(reader.ReadCompressedInt());
this.Type = reader.ReadInt32();
this.DetonationType = (Detonation)reader.ReadInt32();
this.Homing = reader.ReadBool();
this.HomingAvoidLand = reader.ReadBool();
this.EffectedByWind = reader.ReadBool();
this.FireOnGround = reader.ReadBool();
this.Poison = reader.ReadBool();
this.RetreatTime = reader.ReadInt32();
this.WormDamageRadius = reader.ReadFloat();
this.WormDamageMagnitude = reader.ReadFloat();
this.LandDamageRadius = reader.ReadFloat();
this.ProjectileCollisionRadius = reader.ReadFloat();
this.Push = reader.ReadFloat();
this.FuseTime = reader.ReadInt32();
this.GraphicalResourceIds = reader.ReadCompressedIntArray();
this.GraphicalLocatorIds = reader.ReadCompressedIntArray();
this.LaunchFX = saveFile.GetStringById(reader.ReadCompressedInt());
this.ArielFX = saveFile.GetStringById(reader.ReadCompressedInt());
this.DetonationFX = saveFile.GetStringById(reader.ReadCompressedInt());
this.PayloadResourceId = reader.ReadInt32();
this.ProjectileLaunchType = (ProjectileLaunchType)reader.ReadInt32();
this.ProjectilePowersUp = reader.ReadBool();
this.ProjectileNumClusters = reader.ReadInt32();
this.ProjectileMaxPower = reader.ReadFloat();
this.ClusterSpread = reader.ReadFloat();
this.ClusterMaxSpeed = reader.ReadFloat();
reader.Skip(1);
}
}
internal WeaponData(byte[] data, XomFile saveFile)
{
this.saveFile = saveFile;
this.deserailize(data);
}
}
}

View File

@ -9,33 +9,27 @@ using System.Threading.Tasks;
namespace LibW4M.Data.WeaponFactory
{
internal class WeaponEntry : SaveDataEntry
public class WeaponStore : SaveDataEntry
{
public WeaponData Weapon;
public WeaponData Cluster;
public WeaponContainer Weapon;
public WeaponContainer Cluster;
private XomContainer weaponContainer;
private XomContainer clusterContainer;
internal XomContainer weaponContainer;
internal XomContainer clusterContainer;
public WeaponEntry(W4SaveFile fileBelongs, XomContainer mainContainer) : base(fileBelongs, mainContainer)
public WeaponStore(W4SaveFile fileBelongs, XomContainer mainContainer) : base(fileBelongs, mainContainer)
{
this.Load();
}
public override void Delete()
{
throw new NotImplementedException();
}
public override void Load()
{
int[] weaponStore = this.mainContainer.Decompress();
this.weaponContainer = this.fileBelongs.xomFile.GetContainerById(weaponStore[1]);
this.clusterContainer = this.fileBelongs.xomFile.GetContainerById(weaponStore[2]);
this.Weapon = new WeaponData(this.weaponContainer.GetData(), this.fileBelongs.xomFile);
this.Cluster = new WeaponData(this.clusterContainer.GetData(), this.fileBelongs.xomFile);
this.Weapon = new WeaponContainer(this.weaponContainer.GetData(), this.fileBelongs);
this.Cluster = new WeaponContainer(this.clusterContainer.GetData(), this.fileBelongs);
}
public override void Save()

View File

@ -0,0 +1,73 @@
using LibXom.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibW4M.Data.WeaponFactory
{
public class WeaponsCollective : SaveDataEntry
{
private List<WeaponStore> weaponCollective;
public WeaponStore this[int i]
{
get
{
return weaponCollective[i];
}
set
{
weaponCollective[i] = value;
}
}
public int Length
{
get
{
return weaponCollective.Count;
}
}
public WeaponsCollective(W4SaveFile fileBelongs, XomContainer mainContainer) : base(fileBelongs, mainContainer)
{
this.weaponCollective = new List<WeaponStore>();
this.Load();
}
public void Delete(WeaponStore store)
{
for(int i = 0; i < this.Length; i++)
{
WeaponStore weaponStore = this[i];
if(weaponStore.uuid.Equals(store.uuid, StringComparison.InvariantCultureIgnoreCase))
{
weaponCollective.RemoveAt(i);
weaponStore.weaponContainer.Delete();
weaponStore.clusterContainer.Delete();
weaponStore.mainContainer.Delete();
break;
}
}
}
public override void Load()
{
int[] collective = mainContainer.Decompress();
for (int i = 0; i < collective[0]; i++) weaponCollective.Add(new WeaponStore(this.fileBelongs, this.fileBelongs.xomFile.GetContainerById(collective[i + 1])));
}
public override void Save()
{
int[] collective = mainContainer.Decompress();
collective[0] = weaponCollective.Count;
for (int i = 0; i < weaponCollective.Count; i++)
{
WeaponStore store = weaponCollective[i];
store.Save();
collective[i + 1] = store.mainContainer.Id;
}
mainContainer.CompressAndUpdate(collective);
}
}
}

View File

@ -1,14 +1,41 @@
using LibXom.Data;
using LibW4M.Data;
using LibW4M.Data.WeaponFactory;
using LibXom;
using LibXom.Data;
namespace LibW4M
{
public class W4SaveFile
{
public XomFile xomFile;
internal List<SaveDataEntry> entries = new List<SaveDataEntry>();
private WeaponsCollective weaponFactoryCollective;
public WeaponsCollective WeaponFactoryCollective
{
get
{
return weaponFactoryCollective;
}
}
internal XomFile xomFile;
public void Save(string newXom)
{
foreach(SaveDataEntry entry in entries)
{
entry.Save();
}
XomWriter.WriteXom(xomFile, newXom);
}
public XomString LookupString(string value)
{
return xomFile.AddOrGetString(value);
}
public W4SaveFile(XomFile w4Save)
{
this.xomFile = w4Save;
weaponFactoryCollective = new WeaponsCollective(this, this.xomFile.GetTypeByName("WeaponFactoryCollective").Containers.First());
entries.Add(weaponFactoryCollective);
}
}
}

View File

@ -52,7 +52,7 @@ namespace LibXom.Data
{
byte[] buffer = XomCompressor.compressBuffer(nums);
byte[] compressedData = new byte[buffer.Length + 3];
Array.ConstrainedCopy(buffer, 0, compressedData, 3, compressedData.Length);
Array.ConstrainedCopy(buffer, 0, compressedData, 3, buffer.Length);
return compressedData;
}
public void CompressAndUpdate(byte[] bytes)
@ -83,6 +83,11 @@ namespace LibXom.Data
return intArray;
}
public void Delete()
{
this.Type.DeleteContainer(this);
}
private byte[] intArrayToByteArray(int[] intArray)
{
using (MemoryStream ms = new MemoryStream())

View File

@ -42,9 +42,30 @@ namespace LibXom.Data
return xomContainers.ToArray();
}
}
public XomString GetStringById(int stringId)
internal void updateStringById(int stringId, XomString newStr)
{
return XomStrings[stringId - 1];
xomStrings[stringId] = newStr;
}
public XomString AddOrGetString(string value)
{
XomString[] strings = XomStrings;
for (int i = 0; i < strings.Length; i++)
if (strings[i].Value == value) return strings[i];
XomString str = new XomString(this, value);
xomStrings.Add(str);
return str;
}
public void DeleteString(XomString str)
{
xomStrings.RemoveAt(str.Id);
}
public XomString GetStringById(int stringId)
{
return XomStrings[stringId];
}
public XomContainer GetContainerById(int containerId)
{
@ -92,7 +113,7 @@ namespace LibXom.Data
XomString str = stringsSorted[i];
stringLst[i] = str.Value;
stringOffsets.Add(str.Value, loc);
loc += str.Value.Length + 1; // str length, + \0 for terminator.
loc += str.Length + 1; // str length, + \0 for terminator.
}
// now create the strs block
@ -139,7 +160,7 @@ namespace LibXom.Data
foreach (string str in stringBlock.StringList)
{
stringOffsets.Add(loc, str);
loc += str.Length + 1; // str length, + \0 for terminator.
loc += Encoding.UTF8.GetByteCount(str) + 1; // str length, + \0 for terminator.
}
// Now create the list of XomStrings ...

View File

@ -15,15 +15,33 @@ namespace LibXom.Data
{
get
{
return this.fileBelongs.calculateIdForXomFileComponent(this.uuid, fileBelongs.XomStrings);
return this.fileBelongs.calculateIdForXomFileComponent(this.uuid, fileBelongs.XomStrings) - 1;
}
}
public string Value
{
get
{
return value;
return this.value;
}
set
{
this.value = value;
fileBelongs.updateStringById(this.Id, this);
}
}
public int Length
{
get
{
return Encoding.UTF8.GetByteCount(this.Value);
}
}
public override string ToString()
{
return this.Value;
}
internal XomString(XomFile fromFile, string value)
{

View File

@ -6,4 +6,8 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Folder Include="Properties\" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_LastSelectedProfileId>C:\Users\Li\Documents\git\Worms4Editor\LibXom\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
</PropertyGroup>
</Project>

View File

@ -56,16 +56,16 @@ namespace LibXom.Streams
}
public string ReadCStr()
{
StringBuilder cstr = new StringBuilder();
List<byte> cstr = new List<byte>();
while (true)
{
char c = (char)ReadByte();
byte c = ReadByte();
if (c == 0) break;
cstr.Append(c);
cstr.Add(c);
}
return cstr.ToString();
return Encoding.UTF8.GetString(cstr.ToArray());
}
public void Skip(int amt)
{

View File

@ -98,7 +98,7 @@ namespace LibXom
{
strings[i] = xomStream.ReadCStr();
}
return new StrsBlock(numStrs, strsSz, offsets, strings); ;
return new StrsBlock(numStrs, strsSz, offsets, strings);
}
public XomBlock? readBlock()
{

1
SaveGame.xom Symbolic link
View File

@ -0,0 +1 @@
C:/Users/Li/AppData/Local/VirtualStore/Program Files (x86)/Codemasters/Worms 4 Mayhem/Data/SaveGame.xom

130
W4Gui/FloatNumericUpDown.cs Normal file
View File

@ -0,0 +1,130 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Media;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
namespace W4Gui
{
public class FloatNumericUpDown : UpDownBase
{
private float value = 0;
private bool updating = false;
public float Value
{
get
{
if (this.UserEdit) ValidateEditText();
return this.value;
}
set
{
this.value = value;
UpdateEditText();
}
}
public override void DownButton()
{
try
{
this.Value--;
}
catch (OverflowException) { this.Value = Single.MinValue; };
}
public override void UpButton()
{
try
{
this.Value++;
}
catch (OverflowException) { this.Value = Single.MaxValue; };
}
protected override void OnLostFocus(EventArgs e)
{
base.OnLostFocus(e);
if (UserEdit)
{
UpdateEditText();
}
}
protected override void UpdateEditText()
{
if (this.updating) return;
this.updating = true;
if (Single.IsNaN(this.Value))
{
this.Text = "NaN";
}
if (Single.IsNegativeInfinity(this.Value))
{
this.Text = "-Inf";
}
if (Single.IsPositiveInfinity(this.Value))
{
this.Text = "+Inf";
}
else
{
string floatStr = Convert.ToDouble(this.Value).ToString("G9", CultureInfo.InvariantCulture);
if (!floatStr.Contains("."))
floatStr += ".00";
this.Text = floatStr;
}
this.updating = false;
}
protected override void OnTextBoxKeyPress(object? source, KeyPressEventArgs e)
{
base.OnTextBoxKeyPress(source, e);
if (Char.IsDigit(e.KeyChar)) return;
else if ("+-.infa\b".Contains(e.KeyChar.ToString().ToLower().First())) return;
else if ((Control.ModifierKeys & (Keys.Control | Keys.Alt)) != 0) return;
e.Handled = true;
SystemSounds.Beep.Play();
}
protected override void ValidateEditText()
{
try
{
this.value = Single.Parse(this.Text);
UpdateEditText();
}
catch (FormatException ex)
{
if (this.Text.Equals("NaN", StringComparison.InvariantCultureIgnoreCase))
this.value = Single.NaN;
else if (this.Text.Equals("Inf", StringComparison.InvariantCultureIgnoreCase))
this.value = Single.PositiveInfinity;
else if (this.Text.Equals("+Inf", StringComparison.InvariantCultureIgnoreCase))
this.value = Single.PositiveInfinity;
else if (this.Text.Equals("-Inf", StringComparison.InvariantCultureIgnoreCase))
this.value = Single.NegativeInfinity;
UpdateEditText();
}
catch (OverflowException ex)
{
if (this.Text.StartsWith("-")) this.Value = Single.MinValue;
else this.value = Single.MaxValue;
UpdateEditText();
}
catch
{
// Leave value alone
}
finally
{
UserEdit = false;
}
}
}
}

100
W4Gui/IntNumericUpDown.cs Normal file
View File

@ -0,0 +1,100 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Media;
using System.Text;
using System.Threading.Tasks;
namespace W4Gui
{
public class IntNumericUpDown : UpDownBase
{
private int value = 0;
private bool updating = false;
public int Value
{
get
{
if (this.UserEdit) ValidateEditText();
return this.value;
}
set
{
this.value = value;
UpdateEditText();
}
}
public override void DownButton()
{
try
{
this.Value--;
}
catch (OverflowException) { this.Value = Int32.MinValue; };
}
public override void UpButton()
{
try
{
this.Value++;
}
catch (Exception) { this.Value = Int32.MaxValue; };
}
protected override void UpdateEditText()
{
if (this.updating) return;
this.updating = true;
this.Text = this.Value.ToString();
this.updating = false;
}
protected override void OnTextBoxKeyPress(object? source, KeyPressEventArgs e)
{
base.OnTextBoxKeyPress(source, e);
if (Char.IsDigit(e.KeyChar)) return;
else if ("-\b".Contains(e.KeyChar.ToString().ToLower().First())) return;
else if ((Control.ModifierKeys & (Keys.Control | Keys.Alt)) != 0) return;
e.Handled = true;
SystemSounds.Beep.Play();
}
protected override void OnLostFocus(EventArgs e)
{
base.OnLostFocus(e);
if (UserEdit)
{
UpdateEditText();
}
}
protected override void ValidateEditText()
{
try
{
this.value = Int32.Parse(this.Text);
UpdateEditText();
}
catch (OverflowException ex)
{
if(this.Text.StartsWith("-")) this.Value = Int32.MinValue;
else this.Value = Int32.MaxValue;
}
catch
{
UpdateEditText();
}
finally
{
UserEdit = false;
};
}
}
}

156
W4Gui/ListWithAddAndDel.Designer.cs generated Normal file
View File

@ -0,0 +1,156 @@
namespace W4Gui
{
partial class ListWithAddAndDel
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.tableWListAndButtons = new System.Windows.Forms.TableLayoutPanel();
this.lst = new System.Windows.Forms.ListBox();
this.addDelButtonDivisor = new System.Windows.Forms.TableLayoutPanel();
this.updateBtn = new System.Windows.Forms.Button();
this.delBtn = new System.Windows.Forms.Button();
this.addBtn = new System.Windows.Forms.Button();
this.newEntry = new System.Windows.Forms.TextBox();
this.tableWListAndButtons.SuspendLayout();
this.addDelButtonDivisor.SuspendLayout();
this.SuspendLayout();
//
// tableWListAndButtons
//
this.tableWListAndButtons.ColumnCount = 1;
this.tableWListAndButtons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableWListAndButtons.Controls.Add(this.lst, 0, 0);
this.tableWListAndButtons.Controls.Add(this.addDelButtonDivisor, 0, 2);
this.tableWListAndButtons.Controls.Add(this.newEntry, 0, 1);
this.tableWListAndButtons.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableWListAndButtons.Location = new System.Drawing.Point(0, 0);
this.tableWListAndButtons.Name = "tableWListAndButtons";
this.tableWListAndButtons.RowCount = 2;
this.tableWListAndButtons.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableWListAndButtons.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableWListAndButtons.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableWListAndButtons.Size = new System.Drawing.Size(517, 190);
this.tableWListAndButtons.TabIndex = 21;
//
// lst
//
this.lst.Dock = System.Windows.Forms.DockStyle.Fill;
this.lst.FormattingEnabled = true;
this.lst.ItemHeight = 15;
this.lst.Location = new System.Drawing.Point(3, 3);
this.lst.Name = "lst";
this.lst.ScrollAlwaysVisible = true;
this.lst.Size = new System.Drawing.Size(511, 106);
this.lst.TabIndex = 0;
this.lst.SelectedIndexChanged += new System.EventHandler(this.lst_SelectedIndexChanged);
this.lst.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lst_KeyDown);
//
// addDelButtonDivisor
//
this.addDelButtonDivisor.ColumnCount = 3;
this.addDelButtonDivisor.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.addDelButtonDivisor.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.addDelButtonDivisor.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.addDelButtonDivisor.Controls.Add(this.updateBtn, 0, 0);
this.addDelButtonDivisor.Controls.Add(this.delBtn, 2, 0);
this.addDelButtonDivisor.Controls.Add(this.addBtn, 0, 0);
this.addDelButtonDivisor.Dock = System.Windows.Forms.DockStyle.Fill;
this.addDelButtonDivisor.Location = new System.Drawing.Point(3, 144);
this.addDelButtonDivisor.Name = "addDelButtonDivisor";
this.addDelButtonDivisor.RowCount = 1;
this.addDelButtonDivisor.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.addDelButtonDivisor.Size = new System.Drawing.Size(511, 43);
this.addDelButtonDivisor.TabIndex = 1;
//
// updateBtn
//
this.updateBtn.Dock = System.Windows.Forms.DockStyle.Fill;
this.updateBtn.Location = new System.Drawing.Point(173, 3);
this.updateBtn.Name = "updateBtn";
this.updateBtn.Size = new System.Drawing.Size(164, 37);
this.updateBtn.TabIndex = 2;
this.updateBtn.Text = "Update";
this.updateBtn.UseVisualStyleBackColor = true;
this.updateBtn.Click += new System.EventHandler(this.updateBtn_Click);
//
// delBtn
//
this.delBtn.Dock = System.Windows.Forms.DockStyle.Fill;
this.delBtn.Location = new System.Drawing.Point(343, 3);
this.delBtn.Name = "delBtn";
this.delBtn.Size = new System.Drawing.Size(165, 37);
this.delBtn.TabIndex = 1;
this.delBtn.Text = "Delete";
this.delBtn.UseVisualStyleBackColor = true;
this.delBtn.Click += new System.EventHandler(this.delBtn_Click);
//
// addBtn
//
this.addBtn.Dock = System.Windows.Forms.DockStyle.Fill;
this.addBtn.Location = new System.Drawing.Point(3, 3);
this.addBtn.Name = "addBtn";
this.addBtn.Size = new System.Drawing.Size(164, 37);
this.addBtn.TabIndex = 0;
this.addBtn.Text = "Add";
this.addBtn.UseVisualStyleBackColor = true;
this.addBtn.Click += new System.EventHandler(this.addBtn_Click);
//
// newEntry
//
this.newEntry.Dock = System.Windows.Forms.DockStyle.Fill;
this.newEntry.Location = new System.Drawing.Point(3, 115);
this.newEntry.Name = "newEntry";
this.newEntry.PlaceholderText = "Enter Text";
this.newEntry.Size = new System.Drawing.Size(511, 23);
this.newEntry.TabIndex = 4;
this.newEntry.KeyDown += new System.Windows.Forms.KeyEventHandler(this.newEntry_KeyDown);
//
// ListWithAddAndDel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.tableWListAndButtons);
this.Name = "ListWithAddAndDel";
this.Size = new System.Drawing.Size(517, 190);
this.tableWListAndButtons.ResumeLayout(false);
this.tableWListAndButtons.PerformLayout();
this.addDelButtonDivisor.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private TableLayoutPanel tableWListAndButtons;
private ListBox lst;
private TableLayoutPanel addDelButtonDivisor;
private Button delBtn;
private Button addBtn;
private TextBox newEntry;
private Button updateBtn;
}
}

View File

@ -0,0 +1,88 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace W4Gui
{
public partial class ListWithAddAndDel : UserControl
{
public ListWithAddAndDel()
{
InitializeComponent();
}
public string[] Items
{
get
{
int itmCnt = lst.Items.Count;
string[] items = new string[itmCnt];
for (int i = 0; i < itmCnt; i++)
items[i] = lst.Items[i].ToString();
return items;
}
}
public void Clear()
{
lst.Items.Clear();
}
public void AddItem(string item)
{
if(item.Trim() != "")
lst.Items.Add(item);
}
private void addBtn_Click(object sender, EventArgs e)
{
string val = newEntry.Text.Trim();
AddItem(val);
}
private void delBtn_Click(object sender, EventArgs e)
{
int sel = lst.SelectedIndex;
if (sel >= 0)
lst.Items.RemoveAt(sel);
}
private void updateBtn_Click(object sender, EventArgs e)
{
int sel = lst.SelectedIndex;
if(sel >= 0)
lst.Items[sel] = newEntry.Text.Trim();
}
private void newEntry_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyData == Keys.Enter)
{
e.Handled = true;
updateBtn_Click(sender, e);
}
}
private void lst_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyData == Keys.Delete)
{
e.Handled = true;
delBtn_Click(sender, e);
}
}
private void lst_SelectedIndexChanged(object sender, EventArgs e)
{
if (lst.SelectedIndex >= 0)
newEntry.Text = lst.Items[lst.SelectedIndex].ToString();
}
}
}

View File

@ -0,0 +1,60 @@
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

352
W4Gui/Main.Designer.cs generated Normal file
View File

@ -0,0 +1,352 @@
namespace W4Gui
{
partial class Main
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.mainMenuStrip = new System.Windows.Forms.MenuStrip();
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.mainTabControl = new System.Windows.Forms.TabControl();
this.weaponsPage = new System.Windows.Forms.TabPage();
this.weaponSplitContainer = new System.Windows.Forms.SplitContainer();
this.weaponList = new System.Windows.Forms.ListBox();
this.weaponClusterTabControl = new System.Windows.Forms.TabControl();
this.mainWeaponPage = new System.Windows.Forms.TabPage();
this.weaponPanel = new W4Gui.WeaponsPanel();
this.clustersPage = new System.Windows.Forms.TabPage();
this.clusterPanel = new W4Gui.WeaponsPanel();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.label1 = new System.Windows.Forms.Label();
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.tableLayoutPanel11 = new System.Windows.Forms.TableLayoutPanel();
this.label21 = new System.Windows.Forms.Label();
this.label22 = new System.Windows.Forms.Label();
this.mainMenuStrip.SuspendLayout();
this.mainTabControl.SuspendLayout();
this.weaponsPage.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.weaponSplitContainer)).BeginInit();
this.weaponSplitContainer.Panel1.SuspendLayout();
this.weaponSplitContainer.Panel2.SuspendLayout();
this.weaponSplitContainer.SuspendLayout();
this.weaponClusterTabControl.SuspendLayout();
this.mainWeaponPage.SuspendLayout();
this.clustersPage.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
this.tableLayoutPanel11.SuspendLayout();
this.SuspendLayout();
//
// mainMenuStrip
//
this.mainMenuStrip.BackColor = System.Drawing.SystemColors.Control;
this.mainMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fileToolStripMenuItem});
this.mainMenuStrip.Location = new System.Drawing.Point(0, 0);
this.mainMenuStrip.Name = "mainMenuStrip";
this.mainMenuStrip.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional;
this.mainMenuStrip.Size = new System.Drawing.Size(947, 24);
this.mainMenuStrip.TabIndex = 0;
this.mainMenuStrip.Text = "Menu Strip";
//
// fileToolStripMenuItem
//
this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.openToolStripMenuItem,
this.saveToolStripMenuItem});
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
this.fileToolStripMenuItem.Text = "File";
//
// openToolStripMenuItem
//
this.openToolStripMenuItem.Name = "openToolStripMenuItem";
this.openToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.openToolStripMenuItem.Text = "Open";
this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
//
// saveToolStripMenuItem
//
this.saveToolStripMenuItem.Enabled = false;
this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
this.saveToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.saveToolStripMenuItem.Text = "Save";
this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);
//
// mainTabControl
//
this.mainTabControl.Controls.Add(this.weaponsPage);
this.mainTabControl.Dock = System.Windows.Forms.DockStyle.Fill;
this.mainTabControl.Enabled = false;
this.mainTabControl.HotTrack = true;
this.mainTabControl.Location = new System.Drawing.Point(0, 24);
this.mainTabControl.Name = "mainTabControl";
this.mainTabControl.SelectedIndex = 0;
this.mainTabControl.Size = new System.Drawing.Size(947, 735);
this.mainTabControl.TabIndex = 1;
//
// weaponsPage
//
this.weaponsPage.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.weaponsPage.Controls.Add(this.weaponSplitContainer);
this.weaponsPage.Location = new System.Drawing.Point(4, 24);
this.weaponsPage.Name = "weaponsPage";
this.weaponsPage.Padding = new System.Windows.Forms.Padding(3);
this.weaponsPage.Size = new System.Drawing.Size(939, 707);
this.weaponsPage.TabIndex = 0;
this.weaponsPage.Text = "Weapons";
this.weaponsPage.UseVisualStyleBackColor = true;
//
// weaponSplitContainer
//
this.weaponSplitContainer.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.weaponSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
this.weaponSplitContainer.Location = new System.Drawing.Point(3, 3);
this.weaponSplitContainer.Name = "weaponSplitContainer";
//
// weaponSplitContainer.Panel1
//
this.weaponSplitContainer.Panel1.Controls.Add(this.weaponList);
//
// weaponSplitContainer.Panel2
//
this.weaponSplitContainer.Panel2.Controls.Add(this.weaponClusterTabControl);
this.weaponSplitContainer.Size = new System.Drawing.Size(929, 697);
this.weaponSplitContainer.SplitterDistance = 308;
this.weaponSplitContainer.TabIndex = 0;
//
// weaponList
//
this.weaponList.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.weaponList.Dock = System.Windows.Forms.DockStyle.Fill;
this.weaponList.FormattingEnabled = true;
this.weaponList.ItemHeight = 15;
this.weaponList.Location = new System.Drawing.Point(0, 0);
this.weaponList.Name = "weaponList";
this.weaponList.Size = new System.Drawing.Size(304, 693);
this.weaponList.TabIndex = 0;
this.weaponList.SelectedIndexChanged += new System.EventHandler(this.weaponList_SelectedIndexChanged);
//
// weaponClusterTabControl
//
this.weaponClusterTabControl.Controls.Add(this.mainWeaponPage);
this.weaponClusterTabControl.Controls.Add(this.clustersPage);
this.weaponClusterTabControl.Dock = System.Windows.Forms.DockStyle.Fill;
this.weaponClusterTabControl.HotTrack = true;
this.weaponClusterTabControl.Location = new System.Drawing.Point(0, 0);
this.weaponClusterTabControl.Name = "weaponClusterTabControl";
this.weaponClusterTabControl.SelectedIndex = 0;
this.weaponClusterTabControl.Size = new System.Drawing.Size(613, 693);
this.weaponClusterTabControl.TabIndex = 0;
//
// mainWeaponPage
//
this.mainWeaponPage.BackColor = System.Drawing.Color.LightGray;
this.mainWeaponPage.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.mainWeaponPage.Controls.Add(this.weaponPanel);
this.mainWeaponPage.Location = new System.Drawing.Point(4, 24);
this.mainWeaponPage.Name = "mainWeaponPage";
this.mainWeaponPage.Padding = new System.Windows.Forms.Padding(3);
this.mainWeaponPage.Size = new System.Drawing.Size(605, 665);
this.mainWeaponPage.TabIndex = 0;
this.mainWeaponPage.Text = "Main Weapon";
//
// weaponPanel
//
this.weaponPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.weaponPanel.Location = new System.Drawing.Point(3, 3);
this.weaponPanel.Name = "weaponPanel";
this.weaponPanel.Size = new System.Drawing.Size(595, 655);
this.weaponPanel.TabIndex = 0;
//
// clustersPage
//
this.clustersPage.BackColor = System.Drawing.Color.LightGray;
this.clustersPage.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.clustersPage.Controls.Add(this.clusterPanel);
this.clustersPage.Location = new System.Drawing.Point(4, 24);
this.clustersPage.Name = "clustersPage";
this.clustersPage.Padding = new System.Windows.Forms.Padding(3);
this.clustersPage.Size = new System.Drawing.Size(192, 72);
this.clustersPage.TabIndex = 1;
this.clustersPage.Text = "Clusters";
//
// clusterPanel
//
this.clusterPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.clusterPanel.Location = new System.Drawing.Point(3, 3);
this.clusterPanel.Name = "clusterPanel";
this.clusterPanel.Size = new System.Drawing.Size(182, 62);
this.clusterPanel.TabIndex = 1;
//
// groupBox1
//
this.groupBox1.Location = new System.Drawing.Point(0, 0);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(200, 100);
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Inset;
this.tableLayoutPanel1.ColumnCount = 2;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 1);
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 2;
this.tableLayoutPanel1.Size = new System.Drawing.Size(200, 100);
this.tableLayoutPanel1.TabIndex = 0;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
this.label1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.label1.Location = new System.Drawing.Point(5, 4);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(83, 94);
this.label1.TabIndex = 7;
this.label1.Text = "Weapon Type:";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// comboBox1
//
this.comboBox1.DisplayMember = "0";
this.comboBox1.Dock = System.Windows.Forms.DockStyle.Top;
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Items.AddRange(new object[] {
"Air Strike",
"Launched",
"Thrown"});
this.comboBox1.Location = new System.Drawing.Point(96, 7);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(651, 23);
this.comboBox1.TabIndex = 6;
//
// tableLayoutPanel11
//
this.tableLayoutPanel11.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Inset;
this.tableLayoutPanel11.ColumnCount = 2;
this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel11.Controls.Add(this.label21, 0, 4);
this.tableLayoutPanel11.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel11.Name = "tableLayoutPanel11";
this.tableLayoutPanel11.RowCount = 5;
this.tableLayoutPanel11.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel11.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel11.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel11.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel11.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel11.Size = new System.Drawing.Size(200, 100);
this.tableLayoutPanel11.TabIndex = 0;
//
// label21
//
this.label21.AutoSize = true;
this.label21.Dock = System.Windows.Forms.DockStyle.Fill;
this.label21.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.label21.Location = new System.Drawing.Point(5, 90);
this.label21.Name = "label21";
this.label21.Size = new System.Drawing.Size(117, 20);
this.label21.TabIndex = 14;
this.label21.Text = "Max Throw Strength:";
this.label21.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label22
//
this.label22.AutoSize = true;
this.label22.Dock = System.Windows.Forms.DockStyle.Fill;
this.label22.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.label22.Location = new System.Drawing.Point(5, 8);
this.label22.Name = "label22";
this.label22.Size = new System.Drawing.Size(117, 15);
this.label22.TabIndex = 13;
this.label22.Text = "Blast DMG Radius:";
this.label22.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// Main
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.LightGray;
this.ClientSize = new System.Drawing.Size(947, 759);
this.Controls.Add(this.mainTabControl);
this.Controls.Add(this.mainMenuStrip);
this.MainMenuStrip = this.mainMenuStrip;
this.Name = "Main";
this.Text = "Worms 4: Mayhem! (Save Editor)";
this.Load += new System.EventHandler(this.W4Gui_Load);
this.mainMenuStrip.ResumeLayout(false);
this.mainMenuStrip.PerformLayout();
this.mainTabControl.ResumeLayout(false);
this.weaponsPage.ResumeLayout(false);
this.weaponSplitContainer.Panel1.ResumeLayout(false);
this.weaponSplitContainer.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.weaponSplitContainer)).EndInit();
this.weaponSplitContainer.ResumeLayout(false);
this.weaponClusterTabControl.ResumeLayout(false);
this.mainWeaponPage.ResumeLayout(false);
this.clustersPage.ResumeLayout(false);
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
this.tableLayoutPanel11.ResumeLayout(false);
this.tableLayoutPanel11.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private MenuStrip mainMenuStrip;
private ToolStripMenuItem fileToolStripMenuItem;
private ToolStripMenuItem openToolStripMenuItem;
private ToolStripMenuItem saveToolStripMenuItem;
private TabControl mainTabControl;
private TabPage weaponsPage;
private SplitContainer weaponSplitContainer;
private ListBox weaponList;
private TabControl weaponClusterTabControl;
private TabPage mainWeaponPage;
private TabPage clustersPage;
private GroupBox groupBox1;
private TableLayoutPanel tableLayoutPanel1;
private Label label1;
private ComboBox comboBox1;
private TableLayoutPanel tableLayoutPanel11;
private Label label21;
private Label label22;
private WeaponsPanel weaponPanel;
private WeaponsPanel clusterPanel;
}
}

114
W4Gui/Main.cs Normal file
View File

@ -0,0 +1,114 @@
using LibW4M;
using LibW4M.Data.WeaponFactory;
using LibXom;
using LibXom.Data;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace W4Gui
{
public partial class Main : Form
{
private const string defaultTitle = "Worms 4: Mayhem! (Save Editor)";
private bool loadedFile = false;
private W4SaveFile w4Save;
public Main()
{
InitializeComponent();
}
private void W4Gui_Load(object sender, EventArgs e)
{
}
private void loadWeaponsData()
{
// load weapon factory data.
this.weaponList.Items.Clear();
for (int i = 0; i < w4Save.WeaponFactoryCollective.Length; i++)
{
WeaponStore store = w4Save.WeaponFactoryCollective[i];
this.weaponList.Items.Add(store.Weapon.Name.Value);
}
}
private void loadAllData()
{
loadWeaponsData();
}
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog fd = new OpenFileDialog();
fd.Filter = "Worms 4: Mayhem Save File|*.xom";
fd.Title = "Open Worms 4 Save File";
if(fd.ShowDialog() == DialogResult.OK)
{
this.w4Save = new W4SaveFile(XomReader.ReadXomFile(fd.FileName));
this.loadedFile = true;
this.mainTabControl.Enabled = true;
this.saveToolStripMenuItem.Enabled = true;
this.Text = defaultTitle + " [" + fd.FileName + "]";
this.loadAllData();
this.weaponList.SelectedIndex = -1;
weaponList_SelectedIndexChanged(null, null);
}
}
private void saveWeapon()
{
WeaponStore lastWeapStore = w4Save.WeaponFactoryCollective[lastSelected];
weaponPanel.SaveWeaponData(ref lastWeapStore.Weapon);
clusterPanel.SaveWeaponData(ref lastWeapStore.Cluster);
weaponList.Items[lastSelected] = lastWeapStore.Weapon.Name.Value;
}
private int lastSelected = -1;
private void weaponList_SelectedIndexChanged(object sender, EventArgs e)
{
// Save last selected
if(lastSelected >= 0 && weaponList.SelectedIndex != lastSelected)
{
saveWeapon();
}
if(weaponList.SelectedIndex >= 0 && weaponList.SelectedIndex != lastSelected)
{
WeaponStore weapStore = w4Save.WeaponFactoryCollective[weaponList.SelectedIndex];
weaponPanel.LoadWeaponData(weapStore.Weapon);
clusterPanel.LoadWeaponData(weapStore.Cluster);
}
if (this.weaponList.SelectedIndex == -1)
weaponClusterTabControl.Enabled = false;
else
weaponClusterTabControl.Enabled = true;
lastSelected = weaponList.SelectedIndex;
}
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog fd = new SaveFileDialog();
fd.Filter = "Worms 4: Mayhem Save File|*.xom";
fd.Title = "Save Worms 4 Save File";
if (fd.ShowDialog() == DialogResult.OK)
{
this.mainTabControl.Enabled = false;
//weaponList.SelectedIndex = -1;
w4Save.Save(fd.FileName);
this.mainTabControl.Enabled = true;
//weaponList.SelectedIndex = 0;
}
}
}
}

63
W4Gui/Main.resx Normal file
View File

@ -0,0 +1,63 @@
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="mainMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>12, 15</value>
</metadata>
</root>

17
W4Gui/Program.cs Normal file
View File

@ -0,0 +1,17 @@
namespace W4Gui
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new Main());
}
}
}

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<Configuration>Release</Configuration>
<Platform>Any CPU</Platform>
<PublishDir>bin\Release\net7.0-windows\publish\win-x64\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<_TargetId>Folder</_TargetId>
<TargetFramework>net7.0-windows</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<SelfContained>true</SelfContained>
<PublishSingleFile>true</PublishSingleFile>
<PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<History>True|2023-01-11T09:16:55.3469226Z;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>

63
W4Gui/Properties/Resources.Designer.cs generated Normal file
View File

@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace W4Gui.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("W4Gui.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

37
W4Gui/W4Gui.csproj Normal file
View File

@ -0,0 +1,37 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net7.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<Compile Update="IntNumericUpDown.cs">
<SubType>Component</SubType>
</Compile>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Folder Include="Resources\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LibW4M\LibW4M.csproj" />
</ItemGroup>
</Project>

20
W4Gui/W4Gui.csproj.user Normal file
View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_LastSelectedProfileId>C:\Users\Li\Documents\git\Worms4Editor\W4Gui\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
</PropertyGroup>
<ItemGroup>
<Compile Update="FloatNumericUpDown.cs">
<SubType>Component</SubType>
</Compile>
<Compile Update="ListWithAddAndDel.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Update="Main.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="WeaponsPanel.cs">
<SubType>UserControl</SubType>
</Compile>
</ItemGroup>
</Project>

961
W4Gui/WeaponsPanel.Designer.cs generated Normal file
View File

@ -0,0 +1,961 @@
namespace W4Gui
{
partial class WeaponsPanel
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WeaponsPanel));
this.weaponTabsControl = new System.Windows.Forms.TabControl();
this.generalTab = new System.Windows.Forms.TabPage();
this.generalTable = new System.Windows.Forms.TableLayoutPanel();
this.selDetonation = new System.Windows.Forms.ComboBox();
this.lblDetonation = new System.Windows.Forms.Label();
this.lblFuseTime = new System.Windows.Forms.Label();
this.selRetreatTime = new IntNumericUpDown();
this.lblRetreatTime = new System.Windows.Forms.Label();
this.lblWeapType = new System.Windows.Forms.Label();
this.lblWeapName = new System.Windows.Forms.Label();
this.selFuseTime = new IntNumericUpDown();
this.selType = new System.Windows.Forms.ComboBox();
this.selName = new System.Windows.Forms.TextBox();
this.lblGeneralHint = new System.Windows.Forms.Label();
this.powerTab = new System.Windows.Forms.TabPage();
this.powerTable = new System.Windows.Forms.TableLayoutPanel();
this.lblPowerHint = new System.Windows.Forms.Label();
this.lblMaxThrowStr = new System.Windows.Forms.Label();
this.lblBlastDmgRad = new System.Windows.Forms.Label();
this.selLandDmgRad = new FloatNumericUpDown();
this.lblLandDmgRad = new System.Windows.Forms.Label();
this.selWormDmgMag = new FloatNumericUpDown();
this.lblWormDmgStr = new System.Windows.Forms.Label();
this.lblWormDmgRad = new System.Windows.Forms.Label();
this.selWormDmgRad = new FloatNumericUpDown();
this.selBlastDmgRad = new FloatNumericUpDown();
this.selMaxThrowStr = new FloatNumericUpDown();
this.clusterTab = new System.Windows.Forms.TabPage();
this.clusterTable = new System.Windows.Forms.TableLayoutPanel();
this.lblClustersHint = new System.Windows.Forms.Label();
this.selClusterMaxSpeed = new FloatNumericUpDown();
this.lblClusterSpeedMax = new System.Windows.Forms.Label();
this.selClusterSpread = new FloatNumericUpDown();
this.lblClusterSpread = new System.Windows.Forms.Label();
this.lblNumCluster = new System.Windows.Forms.Label();
this.selNumCluster = new IntNumericUpDown();
this.technicalTab = new System.Windows.Forms.TabPage();
this.technicalTable = new System.Windows.Forms.TableLayoutPanel();
this.lblTechnicalHint = new System.Windows.Forms.Label();
this.lblGraphicsResIds = new System.Windows.Forms.Label();
this.lblGraphicsLocIds = new System.Windows.Forms.Label();
this.selLaunchFx = new System.Windows.Forms.TextBox();
this.selArielFx = new System.Windows.Forms.TextBox();
this.selDetonationFx = new System.Windows.Forms.TextBox();
this.lblDetonationFx = new System.Windows.Forms.Label();
this.lblArielFx = new System.Windows.Forms.Label();
this.lblLaunchFx = new System.Windows.Forms.Label();
this.selCollisionRad = new FloatNumericUpDown();
this.lblColRad = new System.Windows.Forms.Label();
this.selPayloadId = new IntNumericUpDown();
this.lblPayloadId = new System.Windows.Forms.Label();
this.selGraphicalResoures = new W4Gui.ListWithAddAndDel();
this.selGraphicalLocators = new W4Gui.ListWithAddAndDel();
this.togglesTab = new System.Windows.Forms.TabPage();
this.togglesTable = new System.Windows.Forms.TableLayoutPanel();
this.selHoming = new System.Windows.Forms.CheckBox();
this.selPowerUpLaunch = new System.Windows.Forms.CheckBox();
this.selAdvancedHoming = new System.Windows.Forms.CheckBox();
this.selFireOnGround = new System.Windows.Forms.CheckBox();
this.selPoison = new System.Windows.Forms.CheckBox();
this.selWindEffected = new System.Windows.Forms.CheckBox();
this.weaponTabsControl.SuspendLayout();
this.generalTab.SuspendLayout();
this.generalTable.SuspendLayout();
this.powerTab.SuspendLayout();
this.powerTable.SuspendLayout();
this.clusterTab.SuspendLayout();
this.clusterTable.SuspendLayout();
this.technicalTab.SuspendLayout();
this.technicalTable.SuspendLayout();
this.togglesTab.SuspendLayout();
this.togglesTable.SuspendLayout();
this.SuspendLayout();
//
// weaponTabsControl
//
this.weaponTabsControl.Controls.Add(this.generalTab);
this.weaponTabsControl.Controls.Add(this.powerTab);
this.weaponTabsControl.Controls.Add(this.clusterTab);
this.weaponTabsControl.Controls.Add(this.technicalTab);
this.weaponTabsControl.Controls.Add(this.togglesTab);
this.weaponTabsControl.Dock = System.Windows.Forms.DockStyle.Fill;
this.weaponTabsControl.Location = new System.Drawing.Point(0, 0);
this.weaponTabsControl.Name = "weaponTabsControl";
this.weaponTabsControl.SelectedIndex = 0;
this.weaponTabsControl.Size = new System.Drawing.Size(653, 428);
this.weaponTabsControl.TabIndex = 9;
//
// generalTab
//
this.generalTab.AutoScroll = true;
this.generalTab.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.generalTab.Controls.Add(this.generalTable);
this.generalTab.Location = new System.Drawing.Point(4, 24);
this.generalTab.Name = "generalTab";
this.generalTab.Padding = new System.Windows.Forms.Padding(3);
this.generalTab.Size = new System.Drawing.Size(645, 400);
this.generalTab.TabIndex = 1;
this.generalTab.Text = "General";
this.generalTab.UseVisualStyleBackColor = true;
//
// generalTable
//
this.generalTable.AutoSize = true;
this.generalTable.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Inset;
this.generalTable.ColumnCount = 2;
this.generalTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.generalTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.generalTable.Controls.Add(this.selDetonation, 1, 1);
this.generalTable.Controls.Add(this.lblDetonation, 0, 1);
this.generalTable.Controls.Add(this.lblFuseTime, 0, 4);
this.generalTable.Controls.Add(this.selRetreatTime, 1, 3);
this.generalTable.Controls.Add(this.lblRetreatTime, 0, 3);
this.generalTable.Controls.Add(this.lblWeapType, 0, 2);
this.generalTable.Controls.Add(this.lblWeapName, 0, 0);
this.generalTable.Controls.Add(this.selFuseTime, 1, 4);
this.generalTable.Controls.Add(this.selType, 1, 2);
this.generalTable.Controls.Add(this.selName, 1, 0);
this.generalTable.Controls.Add(this.lblGeneralHint, 1, 5);
this.generalTable.Dock = System.Windows.Forms.DockStyle.Top;
this.generalTable.Location = new System.Drawing.Point(3, 3);
this.generalTable.Name = "generalTable";
this.generalTable.Padding = new System.Windows.Forms.Padding(3);
this.generalTable.RowCount = 6;
this.generalTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.generalTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.generalTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.generalTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.generalTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.generalTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.generalTable.Size = new System.Drawing.Size(635, 195);
this.generalTable.TabIndex = 6;
//
// selDetonation
//
this.selDetonation.Dock = System.Windows.Forms.DockStyle.Top;
this.selDetonation.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.selDetonation.FormattingEnabled = true;
this.selDetonation.Items.AddRange(new object[] {
"Impact",
"Fuse",
"User",
"Stops Moving"});
this.selDetonation.Location = new System.Drawing.Point(93, 39);
this.selDetonation.Name = "selDetonation";
this.selDetonation.Size = new System.Drawing.Size(534, 23);
this.selDetonation.TabIndex = 17;
//
// lblDetonation
//
this.lblDetonation.AutoSize = true;
this.lblDetonation.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblDetonation.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblDetonation.Location = new System.Drawing.Point(8, 36);
this.lblDetonation.Name = "lblDetonation";
this.lblDetonation.Size = new System.Drawing.Size(77, 29);
this.lblDetonation.TabIndex = 16;
this.lblDetonation.Text = "Detonation:";
this.lblDetonation.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblFuseTime
//
this.lblFuseTime.AutoSize = true;
this.lblFuseTime.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblFuseTime.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblFuseTime.Location = new System.Drawing.Point(8, 129);
this.lblFuseTime.Name = "lblFuseTime";
this.lblFuseTime.Size = new System.Drawing.Size(77, 29);
this.lblFuseTime.TabIndex = 13;
this.lblFuseTime.Text = "Fuse Time:";
this.lblFuseTime.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// selRetreatTime
//
this.selRetreatTime.AutoSize = true;
this.selRetreatTime.Dock = System.Windows.Forms.DockStyle.Top;
this.selRetreatTime.Location = new System.Drawing.Point(93, 101);
this.selRetreatTime.Name = "selRetreatTime";
this.selRetreatTime.Size = new System.Drawing.Size(534, 23);
this.selRetreatTime.TabIndex = 11;
//
// lblRetreatTime
//
this.lblRetreatTime.AutoSize = true;
this.lblRetreatTime.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblRetreatTime.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblRetreatTime.Location = new System.Drawing.Point(8, 98);
this.lblRetreatTime.Name = "lblRetreatTime";
this.lblRetreatTime.Size = new System.Drawing.Size(77, 29);
this.lblRetreatTime.TabIndex = 10;
this.lblRetreatTime.Text = "Retreat Time:";
this.lblRetreatTime.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblWeapType
//
this.lblWeapType.AutoSize = true;
this.lblWeapType.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblWeapType.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblWeapType.Location = new System.Drawing.Point(8, 67);
this.lblWeapType.Name = "lblWeapType";
this.lblWeapType.Size = new System.Drawing.Size(77, 29);
this.lblWeapType.TabIndex = 7;
this.lblWeapType.Text = "Type:";
this.lblWeapType.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblWeapName
//
this.lblWeapName.AutoSize = true;
this.lblWeapName.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblWeapName.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblWeapName.Location = new System.Drawing.Point(8, 5);
this.lblWeapName.Name = "lblWeapName";
this.lblWeapName.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.lblWeapName.Size = new System.Drawing.Size(77, 29);
this.lblWeapName.TabIndex = 0;
this.lblWeapName.Text = "Name:";
this.lblWeapName.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// selFuseTime
//
this.selFuseTime.AutoSize = true;
this.selFuseTime.Dock = System.Windows.Forms.DockStyle.Top;
this.selFuseTime.Location = new System.Drawing.Point(93, 132);
this.selFuseTime.Name = "selFuseTime";
this.selFuseTime.Size = new System.Drawing.Size(534, 23);
this.selFuseTime.TabIndex = 12;
//
// selType
//
this.selType.Dock = System.Windows.Forms.DockStyle.Top;
this.selType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.selType.FormattingEnabled = true;
this.selType.Items.AddRange(new object[] {
"Air Strike",
"Launched",
"Thrown"});
this.selType.Location = new System.Drawing.Point(93, 70);
this.selType.Name = "selType";
this.selType.Size = new System.Drawing.Size(534, 23);
this.selType.TabIndex = 14;
//
// selName
//
this.selName.Dock = System.Windows.Forms.DockStyle.Fill;
this.selName.Location = new System.Drawing.Point(93, 8);
this.selName.Name = "selName";
this.selName.PlaceholderText = "Weapon Name";
this.selName.Size = new System.Drawing.Size(534, 23);
this.selName.TabIndex = 1;
//
// lblGeneralHint
//
this.lblGeneralHint.AutoSize = true;
this.lblGeneralHint.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblGeneralHint.Location = new System.Drawing.Point(93, 160);
this.lblGeneralHint.Name = "lblGeneralHint";
this.lblGeneralHint.Size = new System.Drawing.Size(534, 30);
this.lblGeneralHint.TabIndex = 15;
this.lblGeneralHint.Text = "* Retreat/Fuse Time of -1 is treated as no timer\r\n\r\n";
//
// powerTab
//
this.powerTab.AutoScroll = true;
this.powerTab.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.powerTab.Controls.Add(this.powerTable);
this.powerTab.Location = new System.Drawing.Point(4, 24);
this.powerTab.Name = "powerTab";
this.powerTab.Size = new System.Drawing.Size(645, 400);
this.powerTab.TabIndex = 2;
this.powerTab.Text = "Power";
this.powerTab.UseVisualStyleBackColor = true;
//
// powerTable
//
this.powerTable.AutoSize = true;
this.powerTable.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Inset;
this.powerTable.ColumnCount = 2;
this.powerTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.powerTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.powerTable.Controls.Add(this.lblPowerHint, 2, 5);
this.powerTable.Controls.Add(this.lblMaxThrowStr, 0, 4);
this.powerTable.Controls.Add(this.lblBlastDmgRad, 0, 3);
this.powerTable.Controls.Add(this.selLandDmgRad, 1, 2);
this.powerTable.Controls.Add(this.lblLandDmgRad, 0, 2);
this.powerTable.Controls.Add(this.selWormDmgMag, 1, 1);
this.powerTable.Controls.Add(this.lblWormDmgStr, 0, 1);
this.powerTable.Controls.Add(this.lblWormDmgRad, 0, 0);
this.powerTable.Controls.Add(this.selWormDmgRad, 1, 0);
this.powerTable.Controls.Add(this.selBlastDmgRad, 1, 3);
this.powerTable.Controls.Add(this.selMaxThrowStr, 1, 4);
this.powerTable.Dock = System.Windows.Forms.DockStyle.Top;
this.powerTable.Location = new System.Drawing.Point(0, 0);
this.powerTable.Name = "powerTable";
this.powerTable.Padding = new System.Windows.Forms.Padding(3);
this.powerTable.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.powerTable.RowCount = 6;
this.powerTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.powerTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.powerTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.powerTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.powerTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.powerTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.powerTable.Size = new System.Drawing.Size(641, 255);
this.powerTable.TabIndex = 6;
//
// lblPowerHint
//
this.lblPowerHint.AutoSize = true;
this.lblPowerHint.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblPowerHint.Location = new System.Drawing.Point(137, 160);
this.lblPowerHint.Name = "lblPowerHint";
this.lblPowerHint.Size = new System.Drawing.Size(496, 90);
this.lblPowerHint.TabIndex = 16;
this.lblPowerHint.Text = resources.GetString("lblPowerHint.Text");
//
// lblMaxThrowStr
//
this.lblMaxThrowStr.AutoSize = true;
this.lblMaxThrowStr.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblMaxThrowStr.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblMaxThrowStr.Location = new System.Drawing.Point(8, 129);
this.lblMaxThrowStr.Name = "lblMaxThrowStr";
this.lblMaxThrowStr.Size = new System.Drawing.Size(121, 29);
this.lblMaxThrowStr.TabIndex = 14;
this.lblMaxThrowStr.Text = "Max Throw Strength:";
this.lblMaxThrowStr.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblBlastDmgRad
//
this.lblBlastDmgRad.AutoSize = true;
this.lblBlastDmgRad.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblBlastDmgRad.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblBlastDmgRad.Location = new System.Drawing.Point(8, 98);
this.lblBlastDmgRad.Name = "lblBlastDmgRad";
this.lblBlastDmgRad.Size = new System.Drawing.Size(121, 29);
this.lblBlastDmgRad.TabIndex = 13;
this.lblBlastDmgRad.Text = "Blast DMG Radius:";
this.lblBlastDmgRad.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// selLandDmgRad
//
this.selLandDmgRad.Dock = System.Windows.Forms.DockStyle.Top;
this.selLandDmgRad.Location = new System.Drawing.Point(137, 70);
this.selLandDmgRad.Name = "selLandDmgRad";
this.selLandDmgRad.Size = new System.Drawing.Size(496, 23);
this.selLandDmgRad.TabIndex = 11;
//
// lblLandDmgRad
//
this.lblLandDmgRad.AutoSize = true;
this.lblLandDmgRad.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblLandDmgRad.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblLandDmgRad.Location = new System.Drawing.Point(8, 67);
this.lblLandDmgRad.Name = "lblLandDmgRad";
this.lblLandDmgRad.Size = new System.Drawing.Size(121, 29);
this.lblLandDmgRad.TabIndex = 10;
this.lblLandDmgRad.Text = "Land DMG Radius:";
this.lblLandDmgRad.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// selWormDmgMag
//
this.selWormDmgMag.Dock = System.Windows.Forms.DockStyle.Top;
this.selWormDmgMag.Location = new System.Drawing.Point(137, 39);
this.selWormDmgMag.Name = "selWormDmgMag";
this.selWormDmgMag.Size = new System.Drawing.Size(496, 23);
this.selWormDmgMag.TabIndex = 9;
//
// lblWormDmgStr
//
this.lblWormDmgStr.AutoSize = true;
this.lblWormDmgStr.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblWormDmgStr.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblWormDmgStr.Location = new System.Drawing.Point(8, 36);
this.lblWormDmgStr.Name = "lblWormDmgStr";
this.lblWormDmgStr.Size = new System.Drawing.Size(121, 29);
this.lblWormDmgStr.TabIndex = 7;
this.lblWormDmgStr.Text = "Worm DMG Strength:";
this.lblWormDmgStr.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblWormDmgRad
//
this.lblWormDmgRad.AutoSize = true;
this.lblWormDmgRad.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblWormDmgRad.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblWormDmgRad.Location = new System.Drawing.Point(8, 5);
this.lblWormDmgRad.Name = "lblWormDmgRad";
this.lblWormDmgRad.Size = new System.Drawing.Size(121, 29);
this.lblWormDmgRad.TabIndex = 0;
this.lblWormDmgRad.Text = "Worm DMG Radius:";
this.lblWormDmgRad.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// selWormDmgRad
//
this.selWormDmgRad.Dock = System.Windows.Forms.DockStyle.Top;
this.selWormDmgRad.Location = new System.Drawing.Point(137, 8);
this.selWormDmgRad.Name = "selWormDmgRad";
this.selWormDmgRad.Size = new System.Drawing.Size(496, 23);
this.selWormDmgRad.TabIndex = 8;
//
// selBlastDmgRad
//
this.selBlastDmgRad.Dock = System.Windows.Forms.DockStyle.Top;
this.selBlastDmgRad.Location = new System.Drawing.Point(137, 101);
this.selBlastDmgRad.Name = "selBlastDmgRad";
this.selBlastDmgRad.Size = new System.Drawing.Size(496, 23);
this.selBlastDmgRad.TabIndex = 12;
//
// selMaxThrowStr
//
this.selMaxThrowStr.Dock = System.Windows.Forms.DockStyle.Top;
this.selMaxThrowStr.Location = new System.Drawing.Point(137, 132);
this.selMaxThrowStr.Name = "selMaxThrowStr";
this.selMaxThrowStr.Size = new System.Drawing.Size(496, 23);
this.selMaxThrowStr.TabIndex = 15;
//
// clusterTab
//
this.clusterTab.AutoScroll = true;
this.clusterTab.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.clusterTab.Controls.Add(this.clusterTable);
this.clusterTab.Location = new System.Drawing.Point(4, 24);
this.clusterTab.Name = "clusterTab";
this.clusterTab.Padding = new System.Windows.Forms.Padding(3);
this.clusterTab.Size = new System.Drawing.Size(645, 400);
this.clusterTab.TabIndex = 3;
this.clusterTab.Text = "Clusters";
this.clusterTab.UseVisualStyleBackColor = true;
//
// clusterTable
//
this.clusterTable.AutoSize = true;
this.clusterTable.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Inset;
this.clusterTable.ColumnCount = 2;
this.clusterTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.clusterTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.clusterTable.Controls.Add(this.lblClustersHint, 1, 3);
this.clusterTable.Controls.Add(this.selClusterMaxSpeed, 1, 2);
this.clusterTable.Controls.Add(this.lblClusterSpeedMax, 0, 2);
this.clusterTable.Controls.Add(this.selClusterSpread, 1, 1);
this.clusterTable.Controls.Add(this.lblClusterSpread, 0, 1);
this.clusterTable.Controls.Add(this.lblNumCluster, 0, 0);
this.clusterTable.Controls.Add(this.selNumCluster, 1, 0);
this.clusterTable.Dock = System.Windows.Forms.DockStyle.Top;
this.clusterTable.Location = new System.Drawing.Point(3, 3);
this.clusterTable.Name = "clusterTable";
this.clusterTable.RowCount = 4;
this.clusterTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.clusterTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.clusterTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.clusterTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.clusterTable.Size = new System.Drawing.Size(635, 247);
this.clusterTable.TabIndex = 6;
//
// lblClustersHint
//
this.lblClustersHint.AutoSize = true;
this.lblClustersHint.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblClustersHint.Location = new System.Drawing.Point(126, 95);
this.lblClustersHint.Name = "lblClustersHint";
this.lblClustersHint.Size = new System.Drawing.Size(504, 150);
this.lblClustersHint.TabIndex = 17;
this.lblClustersHint.Text = resources.GetString("lblClustersHint.Text");
//
// selClusterMaxSpeed
//
this.selClusterMaxSpeed.Dock = System.Windows.Forms.DockStyle.Top;
this.selClusterMaxSpeed.Location = new System.Drawing.Point(126, 67);
this.selClusterMaxSpeed.Name = "selClusterMaxSpeed";
this.selClusterMaxSpeed.Size = new System.Drawing.Size(504, 23);
this.selClusterMaxSpeed.TabIndex = 11;
//
// lblClusterSpeedMax
//
this.lblClusterSpeedMax.AutoSize = true;
this.lblClusterSpeedMax.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblClusterSpeedMax.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblClusterSpeedMax.Location = new System.Drawing.Point(5, 64);
this.lblClusterSpeedMax.Name = "lblClusterSpeedMax";
this.lblClusterSpeedMax.Size = new System.Drawing.Size(113, 29);
this.lblClusterSpeedMax.TabIndex = 10;
this.lblClusterSpeedMax.Text = "Cluster Max Speed:";
this.lblClusterSpeedMax.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// selClusterSpread
//
this.selClusterSpread.Dock = System.Windows.Forms.DockStyle.Top;
this.selClusterSpread.Location = new System.Drawing.Point(126, 36);
this.selClusterSpread.Name = "selClusterSpread";
this.selClusterSpread.Size = new System.Drawing.Size(504, 23);
this.selClusterSpread.TabIndex = 9;
//
// lblClusterSpread
//
this.lblClusterSpread.AutoSize = true;
this.lblClusterSpread.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblClusterSpread.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblClusterSpread.Location = new System.Drawing.Point(5, 33);
this.lblClusterSpread.Name = "lblClusterSpread";
this.lblClusterSpread.Size = new System.Drawing.Size(113, 29);
this.lblClusterSpread.TabIndex = 7;
this.lblClusterSpread.Text = "Cluster Spread:";
this.lblClusterSpread.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblNumCluster
//
this.lblNumCluster.AutoSize = true;
this.lblNumCluster.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblNumCluster.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblNumCluster.Location = new System.Drawing.Point(5, 2);
this.lblNumCluster.Name = "lblNumCluster";
this.lblNumCluster.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.lblNumCluster.Size = new System.Drawing.Size(113, 29);
this.lblNumCluster.TabIndex = 0;
this.lblNumCluster.Text = "Number of Clusters:";
this.lblNumCluster.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// selNumCluster
//
this.selNumCluster.Dock = System.Windows.Forms.DockStyle.Top;
this.selNumCluster.Location = new System.Drawing.Point(126, 5);
this.selNumCluster.Name = "selNumCluster";
this.selNumCluster.Size = new System.Drawing.Size(504, 23);
this.selNumCluster.TabIndex = 8;
//
// technicalTab
//
this.technicalTab.AutoScroll = true;
this.technicalTab.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.technicalTab.Controls.Add(this.technicalTable);
this.technicalTab.Location = new System.Drawing.Point(4, 24);
this.technicalTab.Name = "technicalTab";
this.technicalTab.Size = new System.Drawing.Size(645, 400);
this.technicalTab.TabIndex = 4;
this.technicalTab.Text = "Technical";
this.technicalTab.UseVisualStyleBackColor = true;
//
// technicalTable
//
this.technicalTable.AutoSize = true;
this.technicalTable.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Inset;
this.technicalTable.ColumnCount = 2;
this.technicalTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.technicalTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.technicalTable.Controls.Add(this.lblTechnicalHint, 1, 7);
this.technicalTable.Controls.Add(this.lblGraphicsResIds, 0, 5);
this.technicalTable.Controls.Add(this.lblGraphicsLocIds, 0, 6);
this.technicalTable.Controls.Add(this.selLaunchFx, 1, 2);
this.technicalTable.Controls.Add(this.selArielFx, 2, 3);
this.technicalTable.Controls.Add(this.selDetonationFx, 1, 4);
this.technicalTable.Controls.Add(this.lblDetonationFx, 0, 4);
this.technicalTable.Controls.Add(this.lblArielFx, 0, 3);
this.technicalTable.Controls.Add(this.lblLaunchFx, 0, 2);
this.technicalTable.Controls.Add(this.selCollisionRad, 1, 1);
this.technicalTable.Controls.Add(this.lblColRad, 0, 1);
this.technicalTable.Controls.Add(this.selPayloadId, 1, 0);
this.technicalTable.Controls.Add(this.lblPayloadId, 0, 0);
this.technicalTable.Controls.Add(this.selGraphicalResoures, 1, 5);
this.technicalTable.Controls.Add(this.selGraphicalLocators, 1, 6);
this.technicalTable.Dock = System.Windows.Forms.DockStyle.Top;
this.technicalTable.Location = new System.Drawing.Point(0, 0);
this.technicalTable.Name = "technicalTable";
this.technicalTable.Padding = new System.Windows.Forms.Padding(3);
this.technicalTable.RowCount = 8;
this.technicalTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.technicalTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.technicalTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.technicalTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.technicalTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.technicalTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.technicalTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.technicalTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.technicalTable.Size = new System.Drawing.Size(624, 625);
this.technicalTable.TabIndex = 6;
//
// lblTechnicalHint
//
this.lblTechnicalHint.AutoSize = true;
this.lblTechnicalHint.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblTechnicalHint.Location = new System.Drawing.Point(132, 545);
this.lblTechnicalHint.Name = "lblTechnicalHint";
this.lblTechnicalHint.Size = new System.Drawing.Size(484, 75);
this.lblTechnicalHint.TabIndex = 24;
this.lblTechnicalHint.Text = "* This is information on what graphics to load when your weapon used\r\n\r\n* EDITING" +
" THIS HAS A VERY HIGH CHANCE TO CRASH THE GAME\r\n\r\n\r\n";
//
// lblGraphicsResIds
//
this.lblGraphicsResIds.AutoSize = true;
this.lblGraphicsResIds.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblGraphicsResIds.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblGraphicsResIds.Location = new System.Drawing.Point(8, 160);
this.lblGraphicsResIds.Name = "lblGraphicsResIds";
this.lblGraphicsResIds.Size = new System.Drawing.Size(116, 185);
this.lblGraphicsResIds.TabIndex = 23;
this.lblGraphicsResIds.Text = "Graphical Resources:";
this.lblGraphicsResIds.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblGraphicsLocIds
//
this.lblGraphicsLocIds.AutoSize = true;
this.lblGraphicsLocIds.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblGraphicsLocIds.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblGraphicsLocIds.Location = new System.Drawing.Point(8, 347);
this.lblGraphicsLocIds.Name = "lblGraphicsLocIds";
this.lblGraphicsLocIds.Size = new System.Drawing.Size(116, 196);
this.lblGraphicsLocIds.TabIndex = 22;
this.lblGraphicsLocIds.Text = "Graphical Locators:";
this.lblGraphicsLocIds.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// selLaunchFx
//
this.selLaunchFx.AccessibleRole = System.Windows.Forms.AccessibleRole.None;
this.selLaunchFx.Dock = System.Windows.Forms.DockStyle.Top;
this.selLaunchFx.Location = new System.Drawing.Point(132, 70);
this.selLaunchFx.Name = "selLaunchFx";
this.selLaunchFx.PlaceholderText = "Launch FX";
this.selLaunchFx.Size = new System.Drawing.Size(484, 23);
this.selLaunchFx.TabIndex = 19;
//
// selArielFx
//
this.selArielFx.AccessibleRole = System.Windows.Forms.AccessibleRole.None;
this.selArielFx.Dock = System.Windows.Forms.DockStyle.Top;
this.selArielFx.Location = new System.Drawing.Point(132, 101);
this.selArielFx.Name = "selArielFx";
this.selArielFx.PlaceholderText = "Ariel FX";
this.selArielFx.Size = new System.Drawing.Size(484, 23);
this.selArielFx.TabIndex = 18;
//
// selDetonationFx
//
this.selDetonationFx.Dock = System.Windows.Forms.DockStyle.Top;
this.selDetonationFx.Location = new System.Drawing.Point(132, 132);
this.selDetonationFx.Name = "selDetonationFx";
this.selDetonationFx.PlaceholderText = "Detonation FX";
this.selDetonationFx.Size = new System.Drawing.Size(484, 23);
this.selDetonationFx.TabIndex = 17;
//
// lblDetonationFx
//
this.lblDetonationFx.AutoSize = true;
this.lblDetonationFx.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblDetonationFx.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblDetonationFx.Location = new System.Drawing.Point(8, 129);
this.lblDetonationFx.Name = "lblDetonationFx";
this.lblDetonationFx.Size = new System.Drawing.Size(116, 29);
this.lblDetonationFx.TabIndex = 16;
this.lblDetonationFx.Text = "Detonation Effect:";
this.lblDetonationFx.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblArielFx
//
this.lblArielFx.AutoSize = true;
this.lblArielFx.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblArielFx.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblArielFx.Location = new System.Drawing.Point(8, 98);
this.lblArielFx.Name = "lblArielFx";
this.lblArielFx.Size = new System.Drawing.Size(116, 29);
this.lblArielFx.TabIndex = 15;
this.lblArielFx.Text = "Ariel Effect:";
this.lblArielFx.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblLaunchFx
//
this.lblLaunchFx.AutoSize = true;
this.lblLaunchFx.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblLaunchFx.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblLaunchFx.Location = new System.Drawing.Point(8, 67);
this.lblLaunchFx.Name = "lblLaunchFx";
this.lblLaunchFx.Size = new System.Drawing.Size(116, 29);
this.lblLaunchFx.TabIndex = 14;
this.lblLaunchFx.Text = "Launch Effect:";
this.lblLaunchFx.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// selCollisionRad
//
this.selCollisionRad.Dock = System.Windows.Forms.DockStyle.Top;
this.selCollisionRad.Location = new System.Drawing.Point(132, 39);
this.selCollisionRad.Name = "selCollisionRad";
this.selCollisionRad.Size = new System.Drawing.Size(484, 23);
this.selCollisionRad.TabIndex = 13;
//
// lblColRad
//
this.lblColRad.AutoSize = true;
this.lblColRad.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblColRad.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblColRad.Location = new System.Drawing.Point(8, 36);
this.lblColRad.Name = "lblColRad";
this.lblColRad.Size = new System.Drawing.Size(116, 29);
this.lblColRad.TabIndex = 12;
this.lblColRad.Text = "Collison Radius:";
this.lblColRad.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// selPayloadId
//
this.selPayloadId.Dock = System.Windows.Forms.DockStyle.Top;
this.selPayloadId.Location = new System.Drawing.Point(132, 8);
this.selPayloadId.Name = "selPayloadId";
this.selPayloadId.Size = new System.Drawing.Size(484, 23);
this.selPayloadId.TabIndex = 11;
//
// lblPayloadId
//
this.lblPayloadId.AutoSize = true;
this.lblPayloadId.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblPayloadId.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.lblPayloadId.Location = new System.Drawing.Point(8, 5);
this.lblPayloadId.Name = "lblPayloadId";
this.lblPayloadId.Size = new System.Drawing.Size(116, 29);
this.lblPayloadId.TabIndex = 10;
this.lblPayloadId.Text = "Payload ID:";
this.lblPayloadId.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// selGraphicalResoures
//
this.selGraphicalResoures.Dock = System.Windows.Forms.DockStyle.Fill;
this.selGraphicalResoures.Location = new System.Drawing.Point(132, 163);
this.selGraphicalResoures.Name = "selGraphicalResoures";
this.selGraphicalResoures.Size = new System.Drawing.Size(484, 179);
this.selGraphicalResoures.TabIndex = 25;
//
// selGraphicalLocators
//
this.selGraphicalLocators.Dock = System.Windows.Forms.DockStyle.Fill;
this.selGraphicalLocators.Location = new System.Drawing.Point(132, 350);
this.selGraphicalLocators.Name = "selGraphicalLocators";
this.selGraphicalLocators.Size = new System.Drawing.Size(484, 190);
this.selGraphicalLocators.TabIndex = 26;
//
// togglesTab
//
this.togglesTab.AutoScroll = true;
this.togglesTab.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.togglesTab.Controls.Add(this.togglesTable);
this.togglesTab.Location = new System.Drawing.Point(4, 24);
this.togglesTab.Name = "togglesTab";
this.togglesTab.Size = new System.Drawing.Size(645, 400);
this.togglesTab.TabIndex = 5;
this.togglesTab.Text = "Toggles";
this.togglesTab.UseVisualStyleBackColor = true;
//
// togglesTable
//
this.togglesTable.AutoSize = true;
this.togglesTable.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Inset;
this.togglesTable.ColumnCount = 2;
this.togglesTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.togglesTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.togglesTable.Controls.Add(this.selHoming, 0, 0);
this.togglesTable.Controls.Add(this.selPowerUpLaunch, 0, 2);
this.togglesTable.Controls.Add(this.selAdvancedHoming, 1, 0);
this.togglesTable.Controls.Add(this.selFireOnGround, 1, 2);
this.togglesTable.Controls.Add(this.selPoison, 0, 1);
this.togglesTable.Controls.Add(this.selWindEffected, 1, 1);
this.togglesTable.Dock = System.Windows.Forms.DockStyle.Top;
this.togglesTable.Location = new System.Drawing.Point(0, 0);
this.togglesTable.Name = "togglesTable";
this.togglesTable.Padding = new System.Windows.Forms.Padding(3);
this.togglesTable.RowCount = 3;
this.togglesTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.togglesTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.togglesTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.togglesTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.togglesTable.Size = new System.Drawing.Size(641, 89);
this.togglesTable.TabIndex = 7;
//
// selHoming
//
this.selHoming.AutoSize = true;
this.selHoming.Dock = System.Windows.Forms.DockStyle.Fill;
this.selHoming.Location = new System.Drawing.Point(8, 8);
this.selHoming.Name = "selHoming";
this.selHoming.Size = new System.Drawing.Size(308, 19);
this.selHoming.TabIndex = 0;
this.selHoming.Text = "Homing";
this.selHoming.UseVisualStyleBackColor = true;
//
// selPowerUpLaunch
//
this.selPowerUpLaunch.AutoSize = true;
this.selPowerUpLaunch.Dock = System.Windows.Forms.DockStyle.Fill;
this.selPowerUpLaunch.Location = new System.Drawing.Point(8, 62);
this.selPowerUpLaunch.Name = "selPowerUpLaunch";
this.selPowerUpLaunch.Size = new System.Drawing.Size(308, 19);
this.selPowerUpLaunch.TabIndex = 5;
this.selPowerUpLaunch.Text = "Power Up Launch";
this.selPowerUpLaunch.UseVisualStyleBackColor = true;
//
// selHomingAvoidLand
//
this.selAdvancedHoming.AutoSize = true;
this.selAdvancedHoming.Dock = System.Windows.Forms.DockStyle.Fill;
this.selAdvancedHoming.Location = new System.Drawing.Point(324, 8);
this.selAdvancedHoming.Name = "selHomingAvoidLand";
this.selAdvancedHoming.Size = new System.Drawing.Size(309, 19);
this.selAdvancedHoming.TabIndex = 1;
this.selAdvancedHoming.Text = "Advanced Homing";
this.selAdvancedHoming.UseVisualStyleBackColor = true;
//
// selFireOnGround
//
this.selFireOnGround.AutoSize = true;
this.selFireOnGround.Dock = System.Windows.Forms.DockStyle.Fill;
this.selFireOnGround.Location = new System.Drawing.Point(324, 62);
this.selFireOnGround.Name = "selFireOnGround";
this.selFireOnGround.Size = new System.Drawing.Size(309, 19);
this.selFireOnGround.TabIndex = 3;
this.selFireOnGround.Text = "Fire On Ground";
this.selFireOnGround.UseVisualStyleBackColor = true;
//
// selPoison
//
this.selPoison.AutoSize = true;
this.selPoison.Dock = System.Windows.Forms.DockStyle.Fill;
this.selPoison.Location = new System.Drawing.Point(8, 35);
this.selPoison.Name = "selPoison";
this.selPoison.Size = new System.Drawing.Size(308, 19);
this.selPoison.TabIndex = 4;
this.selPoison.Text = "Poison";
this.selPoison.UseVisualStyleBackColor = true;
//
// selWindEffected
//
this.selWindEffected.AutoSize = true;
this.selWindEffected.Dock = System.Windows.Forms.DockStyle.Fill;
this.selWindEffected.Location = new System.Drawing.Point(324, 35);
this.selWindEffected.Name = "selWindEffected";
this.selWindEffected.Size = new System.Drawing.Size(309, 19);
this.selWindEffected.TabIndex = 2;
this.selWindEffected.Text = "Wind Effected";
this.selWindEffected.UseVisualStyleBackColor = true;
//
// WeaponsPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.weaponTabsControl);
this.Name = "WeaponsPanel";
this.Size = new System.Drawing.Size(653, 428);
this.weaponTabsControl.ResumeLayout(false);
this.generalTab.ResumeLayout(false);
this.generalTab.PerformLayout();
this.generalTable.ResumeLayout(false);
this.generalTable.PerformLayout();
this.powerTab.ResumeLayout(false);
this.powerTab.PerformLayout();
this.powerTable.ResumeLayout(false);
this.powerTable.PerformLayout();
this.clusterTab.ResumeLayout(false);
this.clusterTab.PerformLayout();
this.clusterTable.ResumeLayout(false);
this.clusterTable.PerformLayout();
this.technicalTab.ResumeLayout(false);
this.technicalTab.PerformLayout();
this.technicalTable.ResumeLayout(false);
this.technicalTable.PerformLayout();
this.togglesTab.ResumeLayout(false);
this.togglesTab.PerformLayout();
this.togglesTable.ResumeLayout(false);
this.togglesTable.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private TabControl weaponTabsControl;
private TabPage generalTab;
private TableLayoutPanel generalTable;
private ComboBox selDetonation;
private Label lblFuseTime;
private IntNumericUpDown selRetreatTime;
private Label lblRetreatTime;
private Label lblWeapType;
private Label lblWeapName;
private IntNumericUpDown selFuseTime;
private ComboBox selType;
private TextBox selName;
private Label lblGeneralHint;
private TabPage powerTab;
private TableLayoutPanel powerTable;
private Label lblPowerHint;
private Label lblMaxThrowStr;
private Label lblBlastDmgRad;
private FloatNumericUpDown selLandDmgRad;
private Label lblLandDmgRad;
private FloatNumericUpDown selWormDmgMag;
private Label lblWormDmgStr;
private Label lblWormDmgRad;
private FloatNumericUpDown selWormDmgRad;
private FloatNumericUpDown selBlastDmgRad;
private FloatNumericUpDown selMaxThrowStr;
private TabPage clusterTab;
private TableLayoutPanel clusterTable;
private Label lblClustersHint;
private FloatNumericUpDown selClusterMaxSpeed;
private Label lblClusterSpeedMax;
private FloatNumericUpDown selClusterSpread;
private Label lblClusterSpread;
private Label lblNumCluster;
private IntNumericUpDown selNumCluster;
private TabPage technicalTab;
private TabPage togglesTab;
private TableLayoutPanel togglesTable;
private CheckBox selHoming;
private CheckBox selPowerUpLaunch;
private CheckBox selAdvancedHoming;
private CheckBox selFireOnGround;
private CheckBox selPoison;
private CheckBox selWindEffected;
private TableLayoutPanel technicalTable;
private Label lblTechnicalHint;
private Label lblGraphicsResIds;
private Label lblGraphicsLocIds;
private TextBox selLaunchFx;
private TextBox selArielFx;
private TextBox selDetonationFx;
private Label lblDetonationFx;
private Label lblArielFx;
private Label lblLaunchFx;
private FloatNumericUpDown selCollisionRad;
private Label lblColRad;
private IntNumericUpDown selPayloadId;
private Label lblPayloadId;
private ListWithAddAndDel selGraphicalResoures;
private ListWithAddAndDel selGraphicalLocators;
private Label lblDetonation;
}
}

153
W4Gui/WeaponsPanel.cs Normal file
View File

@ -0,0 +1,153 @@
using LibW4M.Data.WeaponFactory;
using LibXom.Data;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace W4Gui
{
public partial class WeaponsPanel : UserControl
{
public float ConvertToFloat(decimal value)
{
try
{
if (value.Equals(Decimal.MaxValue)) return Single.NaN;
if (value.Equals(Decimal.MaxValue-1)) return Single.PositiveInfinity;
if (value.Equals(Decimal.MaxValue - 2)) return Single.NegativeInfinity;
return Convert.ToSingle(value);
}
catch (OverflowException)
{
return float.MaxValue;
}
}
public decimal ConvertToDecimal(float value)
{
try
{
return Convert.ToDecimal(value);
}
catch (OverflowException)
{
if (float.IsNaN(value)) return Decimal.MaxValue;
else if (float.IsPositiveInfinity(value)) return Decimal.MaxValue - 1;
else if (float.IsNegativeInfinity(value)) return Decimal.MaxValue - 2;
else return Decimal.MaxValue - 3;
}
}
public void SaveWeaponData(ref WeaponContainer weapon)
{
// Save general settings
weapon.Name.Value = this.selName.Text;
weapon.DetonationType = (DetonationType)this.selDetonation.SelectedIndex;
weapon.ProjectileLaunchType = (ProjectileLaunchType)this.selType.SelectedIndex;
weapon.RetreatTime = this.selRetreatTime.Value;
weapon.FuseTime = this.selFuseTime.Value;
// Save power settings
weapon.WormDamageRadius = this.selWormDmgRad.Value;
weapon.WormDamageMagnitude = this.selWormDmgMag.Value;
weapon.LandDamageRadius = this.selLandDmgRad.Value;
weapon.Push = this.selBlastDmgRad.Value;
weapon.ProjectileMaxPower = this.selMaxThrowStr.Value;
// Save clusters
weapon.ProjectileNumClusters = this.selNumCluster.Value;
weapon.ClusterSpread = this.selClusterSpread.Value;
weapon.ClusterMaxSpeed = this.selClusterMaxSpeed.Value;
// Save technical
weapon.PayloadResourceId = this.selPayloadId.Value;
weapon.ProjectileCollisionRadius = this.selCollisionRad.Value;
weapon.LaunchFX = weapon.OriginalSave.LookupString(this.selLaunchFx.Text);
weapon.ArielFX = weapon.OriginalSave.LookupString(this.selArielFx.Text);
weapon.DetonationFX = weapon.OriginalSave.LookupString(this.selDetonationFx.Text);
// Save graphical resources
string[] graphicalResources = this.selGraphicalResoures.Items;
string[] graphicalLocators = this.selGraphicalLocators.Items;
weapon.GraphicalResources = new XomString[graphicalResources.Length];
for (int i = 0; i < graphicalResources.Length; i++)
weapon.GraphicalResources[i] = weapon.OriginalSave.LookupString(graphicalResources[i]);
weapon.GraphicalLocators = new XomString[graphicalLocators.Length];
for (int i = 0; i < graphicalLocators.Length; i++)
weapon.GraphicalLocators[i] = weapon.OriginalSave.LookupString(graphicalLocators[i]);
// Save toggles
weapon.Homing = this.selHoming.Checked;
weapon.HomingAvoidLand = this.selAdvancedHoming.Checked;
weapon.Poison = this.selPoison.Checked;
weapon.EffectedByWind = this.selWindEffected.Checked;
weapon.ProjectilePowersUp = this.selPowerUpLaunch.Checked;
weapon.FireOnGround = this.selFireOnGround.Checked;
}
public void LoadWeaponData(WeaponContainer weapon)
{
// Read general settings
this.selName.Text = weapon.Name.Value;
this.selDetonation.SelectedIndex = (int)weapon.DetonationType;
this.selType.SelectedIndex = (int)weapon.ProjectileLaunchType;
this.selRetreatTime.Value = weapon.RetreatTime;
this.selFuseTime.Value = weapon.FuseTime;
// Read power settings
this.selWormDmgRad.Value = weapon.WormDamageRadius;
this.selWormDmgMag.Value = weapon.WormDamageMagnitude;
this.selLandDmgRad.Value = weapon.LandDamageRadius;
this.selBlastDmgRad.Value = weapon.Push;
this.selMaxThrowStr.Value = weapon.ProjectileMaxPower;
// Read clusters
this.selNumCluster.Value = weapon.ProjectileNumClusters;
this.selClusterSpread.Value = weapon.ClusterSpread;
this.selClusterMaxSpeed.Value = weapon.ClusterMaxSpeed;
// Read technical
this.selPayloadId.Value = weapon.PayloadResourceId;
this.selCollisionRad.Value = weapon.ProjectileCollisionRadius;
this.selLaunchFx.Text = weapon.LaunchFX.Value;
this.selArielFx.Text = weapon.ArielFX.Value;
this.selDetonationFx.Text = weapon.DetonationFX.Value;
selGraphicalLocators.Clear();
selGraphicalResoures.Clear();
foreach(XomString graphicalRes in weapon.GraphicalResources)
this.selGraphicalResoures.AddItem(graphicalRes.Value);
foreach (XomString graphicalLoc in weapon.GraphicalLocators)
this.selGraphicalLocators.AddItem(graphicalLoc.Value);
// Read toggles
this.selHoming.Checked = weapon.Homing;
this.selAdvancedHoming.Checked = weapon.HomingAvoidLand;
this.selPoison.Checked = weapon.Poison;
this.selWindEffected.Checked = weapon.EffectedByWind;
this.selPowerUpLaunch.Checked = weapon.ProjectilePowersUp;
this.selFireOnGround.Checked = weapon.FireOnGround;
}
public WeaponsPanel()
{
InitializeComponent();
}
}
}

81
W4Gui/WeaponsPanel.resx Normal file
View File

@ -0,0 +1,81 @@
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="lblPowerHint.Text" xml:space="preserve">
<value>* By default, Worm DMG, Land DMG, Blast DMG and Throw Strength will always be a number between 0.0 and 1.0. numbers higher than this will do increased damage,
however it could lag a bit.
* Worm DMG Radius normally cannot even be adjusted. and is by default a constant "0.75"
</value>
</data>
<data name="lblClustersHint.Text" xml:space="preserve">
<value>* By default, Cluster Spread, and Cluster Max Speed
are a value between 0.0 and 1.0,
higher numbers will result in much larger spread of speeds.
* Normally, number of clusters, cannot go above 10.
higher numbers will work, but if you go too high, your game will crash
* On Air Strike weapons, the "Number of Clusters" field is used
for the number of bombs in the airstrike,
</value>
</data>
</root>

View File

@ -3,11 +3,11 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.4.33205.214
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Worms4Editor", "Worms4Editor\Worms4Editor.csproj", "{FBAA43A5-824F-4C9A-97BC-7B18A42413B9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibXom", "LibXom\LibXom.csproj", "{7B60E17C-780E-44D3-BF02-9F5712DD3AE2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibW4M", "LibW4M\LibW4M.csproj", "{ABA3728B-4745-4622-B140-A82C07AF4992}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibW4M", "LibW4M\LibW4M.csproj", "{ABA3728B-4745-4622-B140-A82C07AF4992}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "W4Gui", "W4Gui\W4Gui.csproj", "{80F28B66-98AF-4A93-BD2C-05024D619C30}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -15,10 +15,6 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{FBAA43A5-824F-4C9A-97BC-7B18A42413B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FBAA43A5-824F-4C9A-97BC-7B18A42413B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FBAA43A5-824F-4C9A-97BC-7B18A42413B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FBAA43A5-824F-4C9A-97BC-7B18A42413B9}.Release|Any CPU.Build.0 = Release|Any CPU
{7B60E17C-780E-44D3-BF02-9F5712DD3AE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7B60E17C-780E-44D3-BF02-9F5712DD3AE2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7B60E17C-780E-44D3-BF02-9F5712DD3AE2}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -27,6 +23,10 @@ Global
{ABA3728B-4745-4622-B140-A82C07AF4992}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ABA3728B-4745-4622-B140-A82C07AF4992}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ABA3728B-4745-4622-B140-A82C07AF4992}.Release|Any CPU.Build.0 = Release|Any CPU
{80F28B66-98AF-4A93-BD2C-05024D619C30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{80F28B66-98AF-4A93-BD2C-05024D619C30}.Debug|Any CPU.Build.0 = Debug|Any CPU
{80F28B66-98AF-4A93-BD2C-05024D619C30}.Release|Any CPU.ActiveCfg = Release|Any CPU
{80F28B66-98AF-4A93-BD2C-05024D619C30}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -1,31 +0,0 @@
using LibXom;
using LibXom.Blocks;
using LibXom.Data;
using System.Security.Cryptography;
using System.Text;
namespace Worms4Editor
{
internal class Program
{
static void Main(string[] args)
{
XomFile xfile = XomReader.ReadXomFile(@"SaveGame.xom");
foreach(XomType type in xfile.XomTypes)
{
Console.WriteLine(type.Name);
if (Directory.Exists(type.Name)) Directory.Delete(type.Name, true);
Directory.CreateDirectory(type.Name);
foreach(XomContainer container in type.Containers)
{
string name = Path.Combine(type.Name, container.Id.ToString("X") + ".bin");
File.WriteAllBytes(name, container.GetData());
}
}
}
}
}

View File

@ -1,14 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\LibXom\LibXom.csproj" />
</ItemGroup>
</Project>