From fcd47415f5bce26d3cf44348a0a9e9e7316c7058 Mon Sep 17 00:00:00 2001
From: Li
Date: Thu, 23 Feb 2023 22:43:15 +1300
Subject: [PATCH] upload w4editor code
---
LibW4M/Data/Stats/StatsCollective.cs | 86 ++++++
LibW4M/Data/Stats/StatsContainerData.cs | 46 +++
LibW4M/Data/Teams/TeamData.cs | 1 +
.../WXFE/UnlockableItem/UnlockableItemData.cs | 3 +
LibW4M/LibW4M.csproj.user | 6 +
.../PublishProfiles/FolderProfile.pubxml | 19 ++
.../PublishProfiles/FolderProfile.pubxml.user | 10 +
LibW4M/W4SaveFile.cs | 102 ++++++-
LibXom/XomReader.cs | 5 +
LibXom/XomWriter.cs | 29 +-
W4Gui/Components/CollectiveListBox.cs | 18 +-
.../UnlockableItemsPanel.Designer.cs | 272 ++++++++++++++++++
W4Gui/Components/UnlockableItemsPanel.cs | 47 +++
W4Gui/Components/UnlockableItemsPanel.resx | 60 ++++
W4Gui/Main.Designer.cs | 48 +++-
W4Gui/Main.cs | 17 ++
.../PublishProfiles/FolderProfile.pubxml.user | 2 +-
W4Gui/Tabs/UnlockableItemsTab.Designer.cs | 98 +++++++
W4Gui/Tabs/UnlockableItemsTab.cs | 63 ++++
W4Gui/Tabs/UnlockableItemsTab.resx | 60 ++++
.../VariablesTab/VariablesTabs.Designer.cs | 17 +-
W4Gui/W4Gui.csproj | 4 +
W4Gui/W4Gui.csproj.user | 3 +
23 files changed, 991 insertions(+), 25 deletions(-)
create mode 100644 LibW4M/Data/Stats/StatsCollective.cs
create mode 100644 LibW4M/Data/Stats/StatsContainerData.cs
create mode 100644 LibW4M/LibW4M.csproj.user
create mode 100644 LibW4M/Properties/PublishProfiles/FolderProfile.pubxml
create mode 100644 LibW4M/Properties/PublishProfiles/FolderProfile.pubxml.user
create mode 100644 W4Gui/Components/UnlockableItemsPanel.Designer.cs
create mode 100644 W4Gui/Components/UnlockableItemsPanel.cs
create mode 100644 W4Gui/Components/UnlockableItemsPanel.resx
create mode 100644 W4Gui/Tabs/UnlockableItemsTab.Designer.cs
create mode 100644 W4Gui/Tabs/UnlockableItemsTab.cs
create mode 100644 W4Gui/Tabs/UnlockableItemsTab.resx
diff --git a/LibW4M/Data/Stats/StatsCollective.cs b/LibW4M/Data/Stats/StatsCollective.cs
new file mode 100644
index 0000000..41cdbd2
--- /dev/null
+++ b/LibW4M/Data/Stats/StatsCollective.cs
@@ -0,0 +1,86 @@
+using LibW4M.Data.Teams;
+using LibXom.Data;
+using LibXom.Streams;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LibW4M.Data.Stats
+{
+ public class StatsCollective : SaveDataCollective
+ {
+ private List teamStats = new List();
+ private List teamNames = new List();
+ public StatsCollective(W4SaveFile fileBelongs, XomContainer mainContainer) : base(fileBelongs, mainContainer)
+ {
+ }
+
+ public override void Load()
+ {
+ int[] decompressedCollective = mainContainer.Decompress();
+ int numStats = decompressedCollective[0];
+ for (int i = 0; i < numStats; i++)
+ {
+ StatsContainerData stat = new StatsContainerData(this.fileBelongs, this.fileBelongs.LookupContainerById(decompressedCollective[i + 1]));
+ this.collectiveEntries.Add(stat);
+ }
+
+ int teamStatsStart = (1 + numStats) + 1;
+ int numTeamStats = decompressedCollective[(1 + numStats)];
+ for (int i = 0; i < numTeamStats; i++)
+ {
+ StatsContainerData teamStat = new StatsContainerData(this.fileBelongs, this.fileBelongs.LookupContainerById(decompressedCollective[i + (teamStatsStart)]));
+ this.teamStats.Add(teamStat);
+ }
+
+ int teamNamesStart = ((((1 + numStats) + 1) + numTeamStats) + 1);
+ int numTeamNames = decompressedCollective[(((1 + numStats) + 1) + numTeamStats)];
+ for (int i = 0; i < numTeamNames; i++)
+ {
+ this.teamNames.Add(this.fileBelongs.LookupStringFromId(decompressedCollective[i + (teamNamesStart)]));
+ }
+ }
+
+ public override void Save()
+ {
+ int numStats = this.collectiveEntries.Count;
+ int numTeamStats = this.teamStats.Count;
+ int numTeamNames = this.teamNames.Count;
+
+
+ // Save regular stats
+ int statsStart = 1;
+ int[] collective = new int[(numStats + 1) + (numTeamStats + 1) + (numTeamNames + 1)];
+ collective[statsStart - 1] = numStats;
+
+ for(int i = 0; i < numStats; i++)
+ {
+ this.collectiveEntries[i].Save();
+ collective[statsStart + i] = this.collectiveEntries[i].containerId;
+ }
+
+ // Save team stats
+ int teamStatsStart = (1 + numStats) + 1;
+ collective[teamStatsStart-1] = numTeamStats;
+
+ for (int i = 0; i < numTeamStats; i++)
+ {
+ this.teamStats[i].Save();
+
+ collective[teamStatsStart + i] = this.teamStats[i].containerId;
+ }
+
+ // Save team names
+ int teamNamesStart = ((1 + numStats) + (1 + numTeamStats) + 1);
+ collective[teamNamesStart - 1] = numTeamNames;
+ for (int i = 0; i < numTeamStats; i++)
+ {
+ collective[teamNamesStart + i] = this.teamNames[i].Id;
+ }
+
+ mainContainer.CompressAndUpdate(collective);
+ }
+ }
+}
diff --git a/LibW4M/Data/Stats/StatsContainerData.cs b/LibW4M/Data/Stats/StatsContainerData.cs
new file mode 100644
index 0000000..31befd4
--- /dev/null
+++ b/LibW4M/Data/Stats/StatsContainerData.cs
@@ -0,0 +1,46 @@
+using LibXom.Data;
+using LibXom.Streams;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LibW4M.Data.Stats
+{
+ public class StatsContainerData : SaveDataEntry
+ {
+ int[] Values;
+ public StatsContainerData(W4SaveFile fileBelongs, XomContainer mainContainer) : base(fileBelongs, mainContainer)
+ {
+ }
+
+ public override void Load()
+ {
+ using (XomStreamReader reader = new XomStreamReader(new MemoryStream(this.mainContainer.GetData())))
+ {
+ reader.Skip(3);
+
+ Values = reader.ReadInt32Array();
+ }
+ }
+
+ public override void Save()
+ {
+ using (MemoryStream ms = new MemoryStream())
+ {
+ using (XomStreamWriter writer = new XomStreamWriter(ms))
+ {
+ writer.Skip(3);
+
+ writer.WriteInt32Array(Values);
+
+ ms.Seek(0x00, SeekOrigin.Begin);
+ mainContainer.SetData(ms.ToArray());
+ }
+ }
+
+
+ }
+ }
+}
diff --git a/LibW4M/Data/Teams/TeamData.cs b/LibW4M/Data/Teams/TeamData.cs
index cc4b3b5..4e58edb 100644
--- a/LibW4M/Data/Teams/TeamData.cs
+++ b/LibW4M/Data/Teams/TeamData.cs
@@ -117,6 +117,7 @@ namespace LibW4M.Data.Teams
using (XomStreamWriter writer = new XomStreamWriter(ms))
{
writer.Skip(3);
+
writer.WriteCompressedInt(this.Name.Id);
writer.WriteCompressedIntArray(this.fileBelongs.XomStringArrayToIntArray(this.Worms));
writer.WriteInt32(this.TutorialsDone);
diff --git a/LibW4M/Data/WXFE/UnlockableItem/UnlockableItemData.cs b/LibW4M/Data/WXFE/UnlockableItem/UnlockableItemData.cs
index b414ffe..86a7e88 100644
--- a/LibW4M/Data/WXFE/UnlockableItem/UnlockableItemData.cs
+++ b/LibW4M/Data/WXFE/UnlockableItem/UnlockableItemData.cs
@@ -18,6 +18,8 @@ namespace LibW4M.Data.WXFE.UnlockableItem
public XomString[] UnlockRequirements;
public bool UnlockRequirementsMet;
+ internal string? nameOverride;
+
public UnlockableItemData(W4SaveFile fileBelongs, XomContainer mainContainer) : base(fileBelongs, mainContainer)
{
}
@@ -25,6 +27,7 @@ namespace LibW4M.Data.WXFE.UnlockableItem
{
get
{
+ if (this.nameOverride is not null) return nameOverride;
return this.DescriptionName.Value;
}
}
diff --git a/LibW4M/LibW4M.csproj.user b/LibW4M/LibW4M.csproj.user
new file mode 100644
index 0000000..6100928
--- /dev/null
+++ b/LibW4M/LibW4M.csproj.user
@@ -0,0 +1,6 @@
+
+
+
+ <_LastSelectedProfileId>C:\Users\Li\Documents\git\Worms4Editor\LibW4M\Properties\PublishProfiles\FolderProfile.pubxml
+
+
\ No newline at end of file
diff --git a/LibW4M/Properties/PublishProfiles/FolderProfile.pubxml b/LibW4M/Properties/PublishProfiles/FolderProfile.pubxml
new file mode 100644
index 0000000..5f2ccee
--- /dev/null
+++ b/LibW4M/Properties/PublishProfiles/FolderProfile.pubxml
@@ -0,0 +1,19 @@
+
+
+
+
+ Release
+ Any CPU
+ bin\Release\net7.0\publish\win-x86\
+ FileSystem
+ <_TargetId>Folder
+ net7.0
+ win-x86
+ true
+ true
+ true
+ false
+
+
\ No newline at end of file
diff --git a/LibW4M/Properties/PublishProfiles/FolderProfile.pubxml.user b/LibW4M/Properties/PublishProfiles/FolderProfile.pubxml.user
new file mode 100644
index 0000000..3896d83
--- /dev/null
+++ b/LibW4M/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -0,0 +1,10 @@
+
+
+
+
+ False|2023-02-18T17:31:12.6646298Z;
+
+
+
\ No newline at end of file
diff --git a/LibW4M/W4SaveFile.cs b/LibW4M/W4SaveFile.cs
index 656e837..ab17d9e 100644
--- a/LibW4M/W4SaveFile.cs
+++ b/LibW4M/W4SaveFile.cs
@@ -1,27 +1,47 @@
using LibW4M.Data;
using LibW4M.Data.Highscores;
using LibW4M.Data.Schemes;
+using LibW4M.Data.Stats;
using LibW4M.Data.Teams;
using LibW4M.Data.WeaponFactory;
+using LibW4M.Data.WXFE;
+using LibW4M.Data.WXFE.UnlockableItem;
using LibW4M.Data.X;
using LibXom;
using LibXom.Blocks;
using LibXom.Data;
+using LibXom.Exceptions;
+using LibXom.Streams;
using System.Runtime.InteropServices;
+using System.Xml.XPath;
namespace LibW4M
{
public class W4SaveFile
{
+ public const int PS2_MAX_SZ = 0x20000;
+
+ private List unlockableItems;
private XomFile xomFile;
+
public DataBank XDataBank;
+
public WeaponsCollective WeaponFactoryCollective;
public TeamsCollective TeamDataColective;
public SchemesCollective SchemesCollective;
public HighscoreCollective HighscoreCollective;
+ public StatsCollective StatsCollective;
+ public UnlockableItemData[] UnlockableItems
+ {
+ get
+ {
+ return unlockableItems.ToArray();
+ }
+ }
+
internal WeaponData findWeaponWithContainerId(int containerId)
{
@@ -40,6 +60,7 @@ namespace LibW4M
public void Load()
{
+ unlockableItems = new List();
XDataBank = new DataBank(this, this.xomFile.GetTypeByName("XDataBank").Containers.First());
foreach(ContainerResourceDetail containerResourceDetail in XDataBank.ContainerResourceDetails)
@@ -56,24 +77,98 @@ namespace LibW4M
case "DATA.Schemes":
SchemesCollective = new SchemesCollective(this, containerResourceDetail.Value);
break;
+ case "PersistStats":
+ StatsCollective = new StatsCollective(this, containerResourceDetail.Value);
+ break;
+
default:
- Console.Error.WriteLine("Unknown container resource: " + containerResourceDetail.Value);
+
+ // stupid hack; the only other option is manually hardcoding every unlockable item in the game
+ // but this way atleast allows for it to be more generic incase for some reason not all (or more) are present.
+
+ // Team17, why isnt there a collective for this?
+ if (containerResourceDetail.Value.Type.Name.Equals("WXFE_UnlockableItem", StringComparison.InvariantCultureIgnoreCase))
+ {
+ UnlockableItemData itemData = new UnlockableItemData(this, containerResourceDetail.Value);
+ itemData.nameOverride = containerResourceDetail.Name.Value;
+
+ unlockableItems.Add(itemData);
+ }
+ else
+ {
+ Console.Error.WriteLine("Unknown container resource: " + containerResourceDetail.Value);
+ }
+
break;
}
}
}
- public void Save(string newXom)
+ private void saveData()
{
-
XDataBank.Save();
WeaponFactoryCollective.Save();
TeamDataColective.Save();
HighscoreCollective.Save();
SchemesCollective.Save();
+ StatsCollective.Save();
+
+ foreach (UnlockableItemData unlockableItem in UnlockableItems)
+ unlockableItem.Save();
+ }
+
+
+
+ public void SavePS2(string newXom)
+ {
+ // Remove all stats ...
+ foreach(StatsContainerData stat in StatsCollective.ToArray())
+ StatsCollective.Delete(stat);
+
+ // Save changes
+ saveData();
+
+ using(FileStream fs = File.OpenWrite(newXom))
+ {
+ using (MemoryStream ms = new MemoryStream())
+ {
+ using (XomStreamReader reader = new XomStreamReader(ms))
+ {
+ using (XomStreamWriter writer = new XomStreamWriter(ms))
+ {
+ XomWriter.WriteXom(xomFile, ms);
+
+ // Set size to ps2 save size.
+
+ ms.SetLength(PS2_MAX_SZ);
+ ms.Seek(0, SeekOrigin.Begin);
+
+ // Calculate checksum
+
+ Int64 chk = 0;
+
+ for (int i = 0; i < (PS2_MAX_SZ - 4); i += 4)
+ {
+ int c = reader.ReadInt32();
+ chk = (chk + c) & UInt32.MaxValue;
+ }
+
+ writer.WriteUInt32(Convert.ToUInt32(chk));
+ ms.Seek(0, SeekOrigin.Begin);
+ ms.CopyTo(fs);
+ }
+ }
+
+ }
+ }
+
+ }
+ public void Save(string newXom)
+ {
+ saveData();
XomWriter.WriteXom(xomFile, newXom);
}
@@ -153,6 +248,7 @@ namespace LibW4M
this.xomFile = w4Save;
Load();
+
}
}
}
\ No newline at end of file
diff --git a/LibXom/XomReader.cs b/LibXom/XomReader.cs
index 6f5d23a..d41edd4 100644
--- a/LibXom/XomReader.cs
+++ b/LibXom/XomReader.cs
@@ -46,6 +46,11 @@ namespace LibXom
return new CtnrBlock(buffer.ToArray());
}
}
+
+ // remove last 2 for EOF
+ buffer.RemoveAt(buffer.Count-1);
+ buffer.RemoveAt(buffer.Count-1);
+
return new CtnrBlock(buffer.ToArray());
}
diff --git a/LibXom/XomWriter.cs b/LibXom/XomWriter.cs
index 542d72b..0987acd 100644
--- a/LibXom/XomWriter.cs
+++ b/LibXom/XomWriter.cs
@@ -75,19 +75,34 @@ namespace LibXom
if (block is CtnrBlock) writeCtnr(block as CtnrBlock);
}
+
}
+
+ public static void WriteXom(XomFile xfile, Stream output)
+ {
+ XomWriter writer = new XomWriter(output, xfile);
+ writer.writeBlocks(xfile.generateBlocks());
+
+ output.WriteByte(0);
+ output.WriteByte(0);
+ }
+ public static byte[] WriteXom(XomFile xfile)
+ {
+ using (MemoryStream ms = new MemoryStream())
+ {
+ WriteXom(xfile, ms);
+
+ ms.Seek(0, SeekOrigin.Begin);
+ return ms.ToArray();
+ }
+ }
public static void WriteXom(XomFile xfile, string filename)
{
using(FileStream fs = File.OpenWrite(filename))
{
- using (MemoryStream ms = new MemoryStream())
- {
- XomWriter writer = new XomWriter(ms, xfile);
- writer.writeBlocks(writer.xomFile.generateBlocks());
- ms.Seek(0, SeekOrigin.Begin);
- ms.CopyTo(fs);
- }
+ byte[] xData = WriteXom(xfile);
+ fs.Write(xData, 0, xData.Length);
}
}
internal XomWriter(Stream xomStream, XomFile xomFile)
diff --git a/W4Gui/Components/CollectiveListBox.cs b/W4Gui/Components/CollectiveListBox.cs
index 21b9e4d..24a2c81 100644
--- a/W4Gui/Components/CollectiveListBox.cs
+++ b/W4Gui/Components/CollectiveListBox.cs
@@ -15,6 +15,7 @@ namespace W4Gui.Components
{
this.SelectedIndexChanged += selectedIndexChanged;
}
+ private int totalUntitled = 0;
private int lastSelected = -1;
public int LastSelected
{
@@ -89,9 +90,20 @@ namespace W4Gui.Components
this.Items.RemoveAt(idx);
}
+ private string processName(string name)
+ {
+ if(name == "")
+ {
+ totalUntitled++;
+ return "Untitled " + totalUntitled.ToString();
+ }
+ return name;
+ }
+
public void UpdateName(int idx, string name)
{
- this.Items[idx] = name;
+ if(name != "")
+ this.Items[idx] = name;
}
public void LoadArray(SaveDataEntry[] arr)
@@ -101,7 +113,7 @@ namespace W4Gui.Components
for (int i = 0; i < arr.Length; i++)
{
string name = arr[i].FriendlyName;
- this.Items.Add(name);
+ this.Items.Add(processName(name));
}
}
@@ -112,7 +124,7 @@ namespace W4Gui.Components
for (int i = 0; i < collective.Length; i++)
{
string name = collective[i].FriendlyName;
- this.Items.Add(name);
+ this.Items.Add(processName(name));
}
}
diff --git a/W4Gui/Components/UnlockableItemsPanel.Designer.cs b/W4Gui/Components/UnlockableItemsPanel.Designer.cs
new file mode 100644
index 0000000..e0d8bec
--- /dev/null
+++ b/W4Gui/Components/UnlockableItemsPanel.Designer.cs
@@ -0,0 +1,272 @@
+namespace W4Gui.Components
+{
+ partial class UnlockableItemsPanel
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.schemeTabControl = new System.Windows.Forms.TabControl();
+ this.generalTab = new System.Windows.Forms.TabPage();
+ this.tblUnlockableItemDetails = new System.Windows.Forms.TableLayoutPanel();
+ this.lblType = new System.Windows.Forms.Label();
+ this.lblState = new System.Windows.Forms.Label();
+ this.lblDescriptionName = new System.Windows.Forms.Label();
+ this.lblUnlockRequirements = new System.Windows.Forms.Label();
+ this.selType = new W4Gui.Components.IntUpDown();
+ this.selState = new W4Gui.Components.IntUpDown();
+ this.selDescriptionName = new System.Windows.Forms.TextBox();
+ this.selUnlockRequirements = new W4Gui.Components.ListAddUpdateDel();
+ this.lblDescription = new System.Windows.Forms.Label();
+ this.selValue = new W4Gui.Components.IntUpDown();
+ this.tblUnlockRequirementsMet = new System.Windows.Forms.TableLayoutPanel();
+ this.selUnlockRequirementsMet = new System.Windows.Forms.CheckBox();
+ this.schemeTabControl.SuspendLayout();
+ this.generalTab.SuspendLayout();
+ this.tblUnlockableItemDetails.SuspendLayout();
+ this.tblUnlockRequirementsMet.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // schemeTabControl
+ //
+ this.schemeTabControl.Controls.Add(this.generalTab);
+ this.schemeTabControl.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.schemeTabControl.HotTrack = true;
+ this.schemeTabControl.Location = new System.Drawing.Point(0, 0);
+ this.schemeTabControl.Name = "schemeTabControl";
+ this.schemeTabControl.SelectedIndex = 0;
+ this.schemeTabControl.Size = new System.Drawing.Size(817, 469);
+ this.schemeTabControl.TabIndex = 1;
+ //
+ // generalTab
+ //
+ this.generalTab.AutoScroll = true;
+ this.generalTab.BackColor = System.Drawing.Color.Transparent;
+ this.generalTab.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+ this.generalTab.Controls.Add(this.tblUnlockRequirementsMet);
+ this.generalTab.Controls.Add(this.tblUnlockableItemDetails);
+ 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(809, 441);
+ this.generalTab.TabIndex = 0;
+ this.generalTab.Text = "General";
+ //
+ // tblUnlockableItemDetails
+ //
+ this.tblUnlockableItemDetails.AutoSize = true;
+ this.tblUnlockableItemDetails.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Inset;
+ this.tblUnlockableItemDetails.ColumnCount = 2;
+ this.tblUnlockableItemDetails.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+ this.tblUnlockableItemDetails.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tblUnlockableItemDetails.Controls.Add(this.lblDescription, 0, 2);
+ this.tblUnlockableItemDetails.Controls.Add(this.lblUnlockRequirements, 0, 4);
+ this.tblUnlockableItemDetails.Controls.Add(this.lblDescriptionName, 0, 3);
+ this.tblUnlockableItemDetails.Controls.Add(this.lblState, 0, 1);
+ this.tblUnlockableItemDetails.Controls.Add(this.lblType, 0, 0);
+ this.tblUnlockableItemDetails.Controls.Add(this.selType, 1, 0);
+ this.tblUnlockableItemDetails.Controls.Add(this.selState, 1, 1);
+ this.tblUnlockableItemDetails.Controls.Add(this.selDescriptionName, 1, 2);
+ this.tblUnlockableItemDetails.Controls.Add(this.selUnlockRequirements, 1, 4);
+ this.tblUnlockableItemDetails.Controls.Add(this.selValue, 1, 3);
+ this.tblUnlockableItemDetails.Dock = System.Windows.Forms.DockStyle.Top;
+ this.tblUnlockableItemDetails.Location = new System.Drawing.Point(3, 3);
+ this.tblUnlockableItemDetails.Name = "tblUnlockableItemDetails";
+ this.tblUnlockableItemDetails.RowCount = 5;
+ this.tblUnlockableItemDetails.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tblUnlockableItemDetails.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tblUnlockableItemDetails.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tblUnlockableItemDetails.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tblUnlockableItemDetails.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tblUnlockableItemDetails.Size = new System.Drawing.Size(782, 435);
+ this.tblUnlockableItemDetails.TabIndex = 0;
+ //
+ // lblType
+ //
+ this.lblType.AutoSize = true;
+ this.lblType.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.lblType.Location = new System.Drawing.Point(5, 2);
+ this.lblType.Name = "lblType";
+ this.lblType.Size = new System.Drawing.Size(123, 29);
+ this.lblType.TabIndex = 0;
+ this.lblType.Text = "Type:";
+ this.lblType.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // lblState
+ //
+ this.lblState.AutoSize = true;
+ this.lblState.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.lblState.Location = new System.Drawing.Point(5, 33);
+ this.lblState.Name = "lblState";
+ this.lblState.Size = new System.Drawing.Size(123, 29);
+ this.lblState.TabIndex = 1;
+ this.lblState.Text = "State:";
+ this.lblState.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // lblDescriptionName
+ //
+ this.lblDescriptionName.AutoSize = true;
+ this.lblDescriptionName.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.lblDescriptionName.Location = new System.Drawing.Point(5, 95);
+ this.lblDescriptionName.Name = "lblDescriptionName";
+ this.lblDescriptionName.Size = new System.Drawing.Size(123, 29);
+ this.lblDescriptionName.TabIndex = 2;
+ this.lblDescriptionName.Text = "Value:";
+ this.lblDescriptionName.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // lblUnlockRequirements
+ //
+ this.lblUnlockRequirements.AutoSize = true;
+ this.lblUnlockRequirements.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.lblUnlockRequirements.Location = new System.Drawing.Point(5, 126);
+ this.lblUnlockRequirements.Name = "lblUnlockRequirements";
+ this.lblUnlockRequirements.Size = new System.Drawing.Size(123, 307);
+ this.lblUnlockRequirements.TabIndex = 3;
+ this.lblUnlockRequirements.Text = "Unlock Requirements:";
+ this.lblUnlockRequirements.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // selType
+ //
+ this.selType.Dock = System.Windows.Forms.DockStyle.Top;
+ this.selType.Location = new System.Drawing.Point(136, 5);
+ this.selType.Name = "selType";
+ this.selType.Size = new System.Drawing.Size(641, 23);
+ this.selType.TabIndex = 4;
+ this.selType.Text = "0";
+ this.selType.Value = 0;
+ //
+ // selState
+ //
+ this.selState.Dock = System.Windows.Forms.DockStyle.Top;
+ this.selState.Location = new System.Drawing.Point(136, 36);
+ this.selState.Name = "selState";
+ this.selState.Size = new System.Drawing.Size(641, 23);
+ this.selState.TabIndex = 5;
+ this.selState.Text = "0";
+ this.selState.Value = 0;
+ //
+ // selDescriptionName
+ //
+ this.selDescriptionName.Dock = System.Windows.Forms.DockStyle.Top;
+ this.selDescriptionName.Location = new System.Drawing.Point(136, 67);
+ this.selDescriptionName.Name = "selDescriptionName";
+ this.selDescriptionName.PlaceholderText = "Unlock Item Description/Name";
+ this.selDescriptionName.Size = new System.Drawing.Size(641, 23);
+ this.selDescriptionName.TabIndex = 6;
+ //
+ // selUnlockRequirements
+ //
+ this.selUnlockRequirements.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.selUnlockRequirements.Location = new System.Drawing.Point(136, 129);
+ this.selUnlockRequirements.Name = "selUnlockRequirements";
+ this.selUnlockRequirements.Size = new System.Drawing.Size(641, 301);
+ this.selUnlockRequirements.TabIndex = 7;
+ //
+ // lblDescription
+ //
+ this.lblDescription.AutoSize = true;
+ this.lblDescription.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.lblDescription.Location = new System.Drawing.Point(5, 64);
+ this.lblDescription.Name = "lblDescription";
+ this.lblDescription.Size = new System.Drawing.Size(123, 29);
+ this.lblDescription.TabIndex = 8;
+ this.lblDescription.Text = "Description/Name:";
+ this.lblDescription.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // selValue
+ //
+ this.selValue.Dock = System.Windows.Forms.DockStyle.Top;
+ this.selValue.Location = new System.Drawing.Point(136, 98);
+ this.selValue.Name = "selValue";
+ this.selValue.Size = new System.Drawing.Size(641, 23);
+ this.selValue.TabIndex = 9;
+ this.selValue.Text = "0";
+ this.selValue.Value = 0;
+ //
+ // tblUnlockRequirementsMet
+ //
+ this.tblUnlockRequirementsMet.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Inset;
+ this.tblUnlockRequirementsMet.ColumnCount = 1;
+ this.tblUnlockRequirementsMet.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tblUnlockRequirementsMet.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+ this.tblUnlockRequirementsMet.Controls.Add(this.selUnlockRequirementsMet, 0, 0);
+ this.tblUnlockRequirementsMet.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.tblUnlockRequirementsMet.Location = new System.Drawing.Point(3, 435);
+ this.tblUnlockRequirementsMet.Name = "tblUnlockRequirementsMet";
+ this.tblUnlockRequirementsMet.RowCount = 1;
+ this.tblUnlockRequirementsMet.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tblUnlockRequirementsMet.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+ this.tblUnlockRequirementsMet.Size = new System.Drawing.Size(782, 26);
+ this.tblUnlockRequirementsMet.TabIndex = 1;
+ //
+ // selUnlockRequirementsMet
+ //
+ this.selUnlockRequirementsMet.AutoSize = true;
+ this.selUnlockRequirementsMet.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.selUnlockRequirementsMet.Location = new System.Drawing.Point(5, 5);
+ this.selUnlockRequirementsMet.Name = "selUnlockRequirementsMet";
+ this.selUnlockRequirementsMet.Size = new System.Drawing.Size(772, 16);
+ this.selUnlockRequirementsMet.TabIndex = 0;
+ this.selUnlockRequirementsMet.Text = "Unlock Requirements Met";
+ this.selUnlockRequirementsMet.UseVisualStyleBackColor = true;
+ //
+ // UnlockableItemsPanel
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.Color.LightGray;
+ this.Controls.Add(this.schemeTabControl);
+ this.Name = "UnlockableItemsPanel";
+ this.Size = new System.Drawing.Size(817, 469);
+ this.schemeTabControl.ResumeLayout(false);
+ this.generalTab.ResumeLayout(false);
+ this.generalTab.PerformLayout();
+ this.tblUnlockableItemDetails.ResumeLayout(false);
+ this.tblUnlockableItemDetails.PerformLayout();
+ this.tblUnlockRequirementsMet.ResumeLayout(false);
+ this.tblUnlockRequirementsMet.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private TabControl schemeTabControl;
+ private TabPage generalTab;
+ private TableLayoutPanel tblUnlockableItemDetails;
+ private Label lblType;
+ private TableLayoutPanel tblUnlockRequirementsMet;
+ private CheckBox selUnlockRequirementsMet;
+ private Label lblDescription;
+ private Label lblUnlockRequirements;
+ private Label lblDescriptionName;
+ private Label lblState;
+ private IntUpDown selType;
+ private IntUpDown selState;
+ private TextBox selDescriptionName;
+ private ListAddUpdateDel selUnlockRequirements;
+ private IntUpDown selValue;
+ }
+}
diff --git a/W4Gui/Components/UnlockableItemsPanel.cs b/W4Gui/Components/UnlockableItemsPanel.cs
new file mode 100644
index 0000000..6a6ed24
--- /dev/null
+++ b/W4Gui/Components/UnlockableItemsPanel.cs
@@ -0,0 +1,47 @@
+using LibW4M.Data.Highscores;
+using LibW4M.Data.Schemes;
+using LibW4M.Data.Teams;
+using LibW4M.Data.WeaponFactory;
+using LibW4M.Data.WXFE.UnlockableItem;
+using W4Gui.Dialogs;
+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;
+using System.Windows.Forms.VisualStyles;
+
+namespace W4Gui.Components
+{
+ public partial class UnlockableItemsPanel : UserControl
+ {
+ public UnlockableItemsPanel()
+ {
+ InitializeComponent();
+ }
+
+ public void LoadUnlockableItem(UnlockableItemData unlockableItem)
+ {
+ this.selType.Value = unlockableItem.Type;
+ this.selState.Value = unlockableItem.State;
+ this.selDescriptionName.Text = unlockableItem.DescriptionName.Value;
+ this.selValue.Value = unlockableItem.Value;
+ this.selUnlockRequirements.LoadData(DataManager.SaveFile.XomStringArrayToStringArray(unlockableItem.UnlockRequirements));
+ this.selUnlockRequirementsMet.Checked = unlockableItem.UnlockRequirementsMet;
+ }
+
+ public void SaveUnlockableItem(ref UnlockableItemData unlockableItem)
+ {
+ unlockableItem.Type = this.selType.Value;
+ unlockableItem.State = this.selState.Value;
+ unlockableItem.DescriptionName = DataManager.SaveFile.LookupString(this.selDescriptionName.Text);
+ unlockableItem.Value = this.selValue.Value;
+ unlockableItem.UnlockRequirements = DataManager.SaveFile.StringArrayToXomStringArray(this.selUnlockRequirements.Items);
+ unlockableItem.UnlockRequirementsMet = this.selUnlockRequirementsMet.Checked;
+ }
+ }
+}
diff --git a/W4Gui/Components/UnlockableItemsPanel.resx b/W4Gui/Components/UnlockableItemsPanel.resx
new file mode 100644
index 0000000..f298a7b
--- /dev/null
+++ b/W4Gui/Components/UnlockableItemsPanel.resx
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/W4Gui/Main.Designer.cs b/W4Gui/Main.Designer.cs
index bdc1332..884df3e 100644
--- a/W4Gui/Main.Designer.cs
+++ b/W4Gui/Main.Designer.cs
@@ -49,7 +49,10 @@ namespace W4Gui
this.highscoreTab = new System.Windows.Forms.TabPage();
this.highscoresPage = new W4Gui.Tabs.HighscoresTab();
this.unlockItemsTab = new System.Windows.Forms.TabPage();
+ this.unlockableItemsPanel = new W4Gui.Tabs.UnlockableItemsTab();
this.inputTab = new System.Windows.Forms.TabPage();
+ this.persistStatsTab = new System.Windows.Forms.TabPage();
+ this.awardsTab = new System.Windows.Forms.TabPage();
this.variablesTab = new System.Windows.Forms.TabPage();
this.variablesPage = new W4Gui.Tabs.VariablesTab.VariablesTabs();
this.mainMenuStrip.SuspendLayout();
@@ -58,6 +61,7 @@ namespace W4Gui
this.teamTab.SuspendLayout();
this.schemeTab.SuspendLayout();
this.highscoreTab.SuspendLayout();
+ this.unlockItemsTab.SuspendLayout();
this.variablesTab.SuspendLayout();
this.SuspendLayout();
//
@@ -114,6 +118,7 @@ namespace W4Gui
this.convertToPS2ToolStripMenuItem.Name = "convertToPS2ToolStripMenuItem";
this.convertToPS2ToolStripMenuItem.Size = new System.Drawing.Size(211, 22);
this.convertToPS2ToolStripMenuItem.Text = "Convert to PS2";
+ this.convertToPS2ToolStripMenuItem.Click += new System.EventHandler(this.convertToPS2ToolStripMenuItem_Click);
//
// convertToXboxToolStripMenuItem
//
@@ -136,6 +141,8 @@ namespace W4Gui
this.mainTabControl.Controls.Add(this.highscoreTab);
this.mainTabControl.Controls.Add(this.unlockItemsTab);
this.mainTabControl.Controls.Add(this.inputTab);
+ this.mainTabControl.Controls.Add(this.persistStatsTab);
+ this.mainTabControl.Controls.Add(this.awardsTab);
this.mainTabControl.Controls.Add(this.variablesTab);
this.mainTabControl.Dock = System.Windows.Forms.DockStyle.Fill;
this.mainTabControl.Enabled = false;
@@ -230,6 +237,7 @@ namespace W4Gui
// unlockItemsTab
//
this.unlockItemsTab.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+ this.unlockItemsTab.Controls.Add(this.unlockableItemsPanel);
this.unlockItemsTab.Location = new System.Drawing.Point(4, 24);
this.unlockItemsTab.Name = "unlockItemsTab";
this.unlockItemsTab.Padding = new System.Windows.Forms.Padding(3);
@@ -238,6 +246,14 @@ namespace W4Gui
this.unlockItemsTab.Text = "Unlockable Items";
this.unlockItemsTab.UseVisualStyleBackColor = true;
//
+ // unlockableItemsPanel
+ //
+ this.unlockableItemsPanel.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.unlockableItemsPanel.Location = new System.Drawing.Point(3, 3);
+ this.unlockableItemsPanel.Name = "unlockableItemsPanel";
+ this.unlockableItemsPanel.Size = new System.Drawing.Size(182, 62);
+ this.unlockableItemsPanel.TabIndex = 0;
+ //
// inputTab
//
this.inputTab.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
@@ -248,6 +264,28 @@ namespace W4Gui
this.inputTab.Text = "Input Settings";
this.inputTab.UseVisualStyleBackColor = true;
//
+ // persistStatsTab
+ //
+ this.persistStatsTab.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+ this.persistStatsTab.Location = new System.Drawing.Point(4, 24);
+ this.persistStatsTab.Name = "persistStatsTab";
+ this.persistStatsTab.Padding = new System.Windows.Forms.Padding(3);
+ this.persistStatsTab.Size = new System.Drawing.Size(192, 72);
+ this.persistStatsTab.TabIndex = 7;
+ this.persistStatsTab.Text = "Persistant Statistics";
+ this.persistStatsTab.UseVisualStyleBackColor = true;
+ //
+ // awardsTab
+ //
+ this.awardsTab.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+ this.awardsTab.Location = new System.Drawing.Point(4, 24);
+ this.awardsTab.Name = "awardsTab";
+ this.awardsTab.Padding = new System.Windows.Forms.Padding(3);
+ this.awardsTab.Size = new System.Drawing.Size(192, 72);
+ this.awardsTab.TabIndex = 8;
+ this.awardsTab.Text = "Awards";
+ this.awardsTab.UseVisualStyleBackColor = true;
+ //
// variablesTab
//
this.variablesTab.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
@@ -255,18 +293,18 @@ namespace W4Gui
this.variablesTab.Location = new System.Drawing.Point(4, 24);
this.variablesTab.Name = "variablesTab";
this.variablesTab.Padding = new System.Windows.Forms.Padding(3);
- this.variablesTab.Size = new System.Drawing.Size(905, 509);
+ this.variablesTab.Size = new System.Drawing.Size(192, 72);
this.variablesTab.TabIndex = 5;
this.variablesTab.Text = "Variables";
this.variablesTab.UseVisualStyleBackColor = true;
//
// variablesPage
//
- this.variablesPage.BackColor = System.Drawing.Color.LightGray;
+ this.variablesPage.BackColor = System.Drawing.SystemColors.Control;
this.variablesPage.Dock = System.Windows.Forms.DockStyle.Fill;
this.variablesPage.Location = new System.Drawing.Point(3, 3);
this.variablesPage.Name = "variablesPage";
- this.variablesPage.Size = new System.Drawing.Size(895, 499);
+ this.variablesPage.Size = new System.Drawing.Size(182, 62);
this.variablesPage.TabIndex = 0;
//
// Main
@@ -289,6 +327,7 @@ namespace W4Gui
this.teamTab.ResumeLayout(false);
this.schemeTab.ResumeLayout(false);
this.highscoreTab.ResumeLayout(false);
+ this.unlockItemsTab.ResumeLayout(false);
this.variablesTab.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
@@ -318,5 +357,8 @@ namespace W4Gui
private SchemeTab schemesPage;
private TabPage unlockItemsTab;
private VariablesTabs variablesPage;
+ private UnlockableItemsTab unlockableItemsPanel;
+ private TabPage persistStatsTab;
+ private TabPage awardsTab;
}
}
\ No newline at end of file
diff --git a/W4Gui/Main.cs b/W4Gui/Main.cs
index 4787e14..b142ae4 100644
--- a/W4Gui/Main.cs
+++ b/W4Gui/Main.cs
@@ -114,5 +114,22 @@ namespace W4Gui
lastTabIndex = this.mainTabControl.SelectedIndex;
}
+
+ private void convertToPS2ToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ SaveFileDialog fd = new SaveFileDialog();
+ fd.Filter = "Worms 4: Mayhem PlayStation 2 Save File|*";
+ fd.Title = "Save Worms 4 PlayStation 2 Save File";
+ fd.FileName = "BESLES-53096W4MA";
+ if (fd.ShowDialog() == DialogResult.OK)
+ {
+ this.mainTabControl.Enabled = false;
+
+ DataManager.SaveAll();
+ DataManager.SaveFile.SavePS2(fd.FileName);
+
+ this.mainTabControl.Enabled = true;
+ }
+ }
}
}
diff --git a/W4Gui/Properties/PublishProfiles/FolderProfile.pubxml.user b/W4Gui/Properties/PublishProfiles/FolderProfile.pubxml.user
index 77c44c5..4d662bb 100644
--- a/W4Gui/Properties/PublishProfiles/FolderProfile.pubxml.user
+++ b/W4Gui/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -4,7 +4,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
-->
- True|2023-01-19T07:41:26.7371208Z;True|2023-01-14T20:06:35.5919106-08:00;True|2023-01-13T16:57:56.0824690-08:00;True|2023-01-11T01:22:28.8737310-08:00;True|2023-01-11T01:16:55.3469226-08:00;
+ True|2023-02-20T10:18:32.2496478Z;True|2023-02-19T06:40:54.2502643+13:00;False|2023-02-16T17:57:46.9563146+13:00;True|2023-01-19T20:41:26.7371208+13:00;True|2023-01-15T17:06:35.5919106+13:00;True|2023-01-14T13:57:56.0824690+13:00;True|2023-01-11T22:22:28.8737310+13:00;True|2023-01-11T22:16:55.3469226+13:00;
\ No newline at end of file
diff --git a/W4Gui/Tabs/UnlockableItemsTab.Designer.cs b/W4Gui/Tabs/UnlockableItemsTab.Designer.cs
new file mode 100644
index 0000000..6830d2e
--- /dev/null
+++ b/W4Gui/Tabs/UnlockableItemsTab.Designer.cs
@@ -0,0 +1,98 @@
+namespace W4Gui.Tabs
+{
+ partial class UnlockableItemsTab
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.unlockableItemsSplitContainer = new System.Windows.Forms.SplitContainer();
+ this.unlockableItemsPanel = new W4Gui.Components.UnlockableItemsPanel();
+ this.unlockableItemsList = new W4Gui.Components.CollectiveListAddDelete();
+ ((System.ComponentModel.ISupportInitialize)(this.unlockableItemsSplitContainer)).BeginInit();
+ this.unlockableItemsSplitContainer.Panel1.SuspendLayout();
+ this.unlockableItemsSplitContainer.Panel2.SuspendLayout();
+ this.unlockableItemsSplitContainer.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // unlockableItemsSplitContainer
+ //
+ this.unlockableItemsSplitContainer.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+ this.unlockableItemsSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.unlockableItemsSplitContainer.Location = new System.Drawing.Point(0, 0);
+ this.unlockableItemsSplitContainer.Name = "unlockableItemsSplitContainer";
+ //
+ // unlockableItemsSplitContainer.Panel1
+ //
+ this.unlockableItemsSplitContainer.Panel1.Controls.Add(this.unlockableItemsList);
+ //
+ // unlockableItemsSplitContainer.Panel2
+ //
+ this.unlockableItemsSplitContainer.Panel2.Controls.Add(this.unlockableItemsPanel);
+ this.unlockableItemsSplitContainer.Size = new System.Drawing.Size(797, 464);
+ this.unlockableItemsSplitContainer.SplitterDistance = 265;
+ this.unlockableItemsSplitContainer.TabIndex = 0;
+ //
+ // unlockableItemsPanel
+ //
+ this.unlockableItemsPanel.BackColor = System.Drawing.Color.LightGray;
+ this.unlockableItemsPanel.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.unlockableItemsPanel.Location = new System.Drawing.Point(0, 0);
+ this.unlockableItemsPanel.Name = "unlockableItemsPanel";
+ this.unlockableItemsPanel.Size = new System.Drawing.Size(524, 460);
+ this.unlockableItemsPanel.TabIndex = 0;
+ //
+ // unlockableItemsList
+ //
+ this.unlockableItemsList.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.unlockableItemsList.Location = new System.Drawing.Point(3, 3);
+ this.unlockableItemsList.Name = "teamsList";
+ this.unlockableItemsList.Size = new System.Drawing.Size(261, 460);
+ this.unlockableItemsList.TabIndex = 0;
+ this.unlockableItemsList.NewButton += new System.EventHandler(this.unlockableItemsList_NewButton);
+ this.unlockableItemsList.DeleteButton += new System.EventHandler(this.unlockableItemsList_DeleteButton);
+ //
+ // UnlockableItemsTab
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.unlockableItemsSplitContainer);
+ this.Name = "UnlockableItemsTab";
+ this.Size = new System.Drawing.Size(797, 464);
+ this.unlockableItemsSplitContainer.Panel1.ResumeLayout(false);
+ this.unlockableItemsSplitContainer.Panel2.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.unlockableItemsSplitContainer)).EndInit();
+ this.unlockableItemsSplitContainer.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private SplitContainer unlockableItemsSplitContainer;
+ private Components.UnlockableItemsPanel unlockableItemsPanel;
+ private Components.CollectiveListAddDelete unlockableItemsList;
+ }
+}
diff --git a/W4Gui/Tabs/UnlockableItemsTab.cs b/W4Gui/Tabs/UnlockableItemsTab.cs
new file mode 100644
index 0000000..791d9c2
--- /dev/null
+++ b/W4Gui/Tabs/UnlockableItemsTab.cs
@@ -0,0 +1,63 @@
+using LibW4M.Data.Highscores;
+using LibW4M.Data.Teams;
+using LibW4M.Data.WXFE.UnlockableItem;
+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.Tabs
+{
+ public partial class UnlockableItemsTab : TabEntry
+ {
+ public UnlockableItemsTab()
+ {
+ InitializeComponent();
+ this.unlockableItemsList.List.Selected += unlockableItemsList_Selected;
+ this.unlockableItemsList.List.Unselected += unlockableItemsList_Unselected;
+
+ }
+
+ public override void SaveFromControl()
+ {
+ if (this.unlockableItemsList.List.IsItemSelected)
+ unlockableItemsList_Unselected(null, null);
+ }
+
+ public override void LoadIntoControl()
+ {
+ this.unlockableItemsList.List.LoadArray(DataManager.SaveFile.UnlockableItems);
+ unlockableItemsPanel.Enabled = false;
+ }
+
+ private void unlockableItemsList_Unselected(object? sender, EventArgs? e)
+ {
+ UnlockableItemData itemData = DataManager.SaveFile.UnlockableItems[unlockableItemsList.List.LastSelected] as UnlockableItemData;
+ unlockableItemsPanel.SaveUnlockableItem(ref itemData);
+ unlockableItemsList.List.UpdateName(unlockableItemsList.List.LastSelected, itemData.FriendlyName);
+ }
+
+ private void unlockableItemsList_Selected(object? sender, EventArgs? e)
+ {
+ UnlockableItemData itemData = DataManager.SaveFile.UnlockableItems[unlockableItemsList.List.CurrentlySelected] as UnlockableItemData;
+ unlockableItemsPanel.LoadUnlockableItem(itemData);
+ unlockableItemsPanel.Enabled = true;
+ }
+
+ private void unlockableItemsList_NewButton(object sender, EventArgs e)
+ {
+ throw new NotImplementedException("Adding new unlockableItems from here not implemented yet ;)");
+ }
+
+ private void unlockableItemsList_DeleteButton(object sender, EventArgs e)
+ {
+ throw new NotImplementedException("Removing unlockableItems from here not implemented yet ;)");
+ }
+
+ }
+}
diff --git a/W4Gui/Tabs/UnlockableItemsTab.resx b/W4Gui/Tabs/UnlockableItemsTab.resx
new file mode 100644
index 0000000..f298a7b
--- /dev/null
+++ b/W4Gui/Tabs/UnlockableItemsTab.resx
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/W4Gui/Tabs/VariablesTab/VariablesTabs.Designer.cs b/W4Gui/Tabs/VariablesTab/VariablesTabs.Designer.cs
index 34b02a2..420c24e 100644
--- a/W4Gui/Tabs/VariablesTab/VariablesTabs.Designer.cs
+++ b/W4Gui/Tabs/VariablesTab/VariablesTabs.Designer.cs
@@ -55,6 +55,7 @@
this.varTypeTabControl.Controls.Add(this.stringVariablesTab);
this.varTypeTabControl.Controls.Add(this.vectorVariablesTab);
this.varTypeTabControl.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.varTypeTabControl.HotTrack = true;
this.varTypeTabControl.Location = new System.Drawing.Point(0, 0);
this.varTypeTabControl.Name = "varTypeTabControl";
this.varTypeTabControl.SelectedIndex = 0;
@@ -88,7 +89,7 @@
this.uIntVariablesTab.Location = new System.Drawing.Point(4, 24);
this.uIntVariablesTab.Name = "uIntVariablesTab";
this.uIntVariablesTab.Padding = new System.Windows.Forms.Padding(3);
- this.uIntVariablesTab.Size = new System.Drawing.Size(192, 72);
+ this.uIntVariablesTab.Size = new System.Drawing.Size(877, 474);
this.uIntVariablesTab.TabIndex = 2;
this.uIntVariablesTab.Text = "UInt32";
this.uIntVariablesTab.UseVisualStyleBackColor = true;
@@ -98,7 +99,7 @@
this.uintVarsPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.uintVarsPanel.Location = new System.Drawing.Point(3, 3);
this.uintVarsPanel.Name = "uintVarsPanel";
- this.uintVarsPanel.Size = new System.Drawing.Size(182, 62);
+ this.uintVarsPanel.Size = new System.Drawing.Size(867, 464);
this.uintVarsPanel.TabIndex = 0;
//
// floatVariablesTab
@@ -108,7 +109,7 @@
this.floatVariablesTab.Location = new System.Drawing.Point(4, 24);
this.floatVariablesTab.Name = "floatVariablesTab";
this.floatVariablesTab.Padding = new System.Windows.Forms.Padding(3);
- this.floatVariablesTab.Size = new System.Drawing.Size(192, 72);
+ this.floatVariablesTab.Size = new System.Drawing.Size(877, 474);
this.floatVariablesTab.TabIndex = 3;
this.floatVariablesTab.Text = "Float";
this.floatVariablesTab.UseVisualStyleBackColor = true;
@@ -118,7 +119,7 @@
this.floatVarsPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.floatVarsPanel.Location = new System.Drawing.Point(3, 3);
this.floatVarsPanel.Name = "floatVarsPanel";
- this.floatVarsPanel.Size = new System.Drawing.Size(182, 62);
+ this.floatVarsPanel.Size = new System.Drawing.Size(867, 464);
this.floatVarsPanel.TabIndex = 0;
//
// stringVariablesTab
@@ -128,7 +129,7 @@
this.stringVariablesTab.Location = new System.Drawing.Point(4, 24);
this.stringVariablesTab.Name = "stringVariablesTab";
this.stringVariablesTab.Padding = new System.Windows.Forms.Padding(3);
- this.stringVariablesTab.Size = new System.Drawing.Size(192, 72);
+ this.stringVariablesTab.Size = new System.Drawing.Size(877, 474);
this.stringVariablesTab.TabIndex = 4;
this.stringVariablesTab.Text = "String";
this.stringVariablesTab.UseVisualStyleBackColor = true;
@@ -138,7 +139,7 @@
this.stringVarsPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.stringVarsPanel.Location = new System.Drawing.Point(3, 3);
this.stringVarsPanel.Name = "stringVarsPanel";
- this.stringVarsPanel.Size = new System.Drawing.Size(182, 62);
+ this.stringVarsPanel.Size = new System.Drawing.Size(867, 464);
this.stringVarsPanel.TabIndex = 0;
//
// vectorVariablesTab
@@ -148,7 +149,7 @@
this.vectorVariablesTab.Location = new System.Drawing.Point(4, 24);
this.vectorVariablesTab.Name = "vectorVariablesTab";
this.vectorVariablesTab.Padding = new System.Windows.Forms.Padding(3);
- this.vectorVariablesTab.Size = new System.Drawing.Size(192, 72);
+ this.vectorVariablesTab.Size = new System.Drawing.Size(877, 474);
this.vectorVariablesTab.TabIndex = 5;
this.vectorVariablesTab.Text = "Vector";
this.vectorVariablesTab.UseVisualStyleBackColor = true;
@@ -158,7 +159,7 @@
this.vectorVarsPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.vectorVarsPanel.Location = new System.Drawing.Point(3, 3);
this.vectorVarsPanel.Name = "vectorVarsPanel";
- this.vectorVarsPanel.Size = new System.Drawing.Size(182, 62);
+ this.vectorVarsPanel.Size = new System.Drawing.Size(867, 464);
this.vectorVarsPanel.TabIndex = 0;
//
// VariablesTabs
diff --git a/W4Gui/W4Gui.csproj b/W4Gui/W4Gui.csproj
index 1a1dd21..c74007b 100644
--- a/W4Gui/W4Gui.csproj
+++ b/W4Gui/W4Gui.csproj
@@ -9,6 +9,9 @@
+
+ UserControl
+
UserControl
@@ -32,6 +35,7 @@
True
Resources.resx
+
UserControl
diff --git a/W4Gui/W4Gui.csproj.user b/W4Gui/W4Gui.csproj.user
index ab57ceb..d8e000b 100644
--- a/W4Gui/W4Gui.csproj.user
+++ b/W4Gui/W4Gui.csproj.user
@@ -67,6 +67,9 @@
UserControl
+
+ UserControl
+
UserControl