diff --git a/LibW4M/LibW4M.csproj b/LibW4M/LibW4M.csproj
index 2f15f5a..80813e1 100644
--- a/LibW4M/LibW4M.csproj
+++ b/LibW4M/LibW4M.csproj
@@ -26,6 +26,11 @@
True
SaveResources.resx
+
+ True
+ True
+ SaveResources.resx
+
@@ -37,6 +42,10 @@
ResXFileCodeGenerator
SaveResources.Designer.cs
+
+ PublicResXFileCodeGenerator
+ SaveResources.Designer.cs
+
diff --git a/LibW4M/PS2/Ps2Save.cs b/LibW4M/PS2/Ps2Save.cs
index dae311a..8c6cafd 100644
--- a/LibW4M/PS2/Ps2Save.cs
+++ b/LibW4M/PS2/Ps2Save.cs
@@ -14,7 +14,7 @@ namespace LibW4M.PS2
{
private const int PS2_MAX_SZ = 0x20000;
- public static void CreateSaveFile(W4SaveFile save, Stream output)
+ private static void createPs2SaveXOM(W4SaveFile save, Stream output)
{
// Remove all stats ...
foreach (StatsContainerData stat in save.StatsCollective.ToArray())
@@ -55,7 +55,7 @@ namespace LibW4M.PS2
return new W4SaveFile(XomReader.ReadXomFile(PsuFile.ReadPSU(filename).GetFileByName("BESLES-53096W4MA").FileData));
}
- public static void CreatePSU(W4SaveFile save, Stream output)
+ public static void CreateSaveFile(W4SaveFile save, Stream output)
{
PsuFile psuFile = new PsuFile();
psuFile.InitalizePSU("BESLES-53096W4MA");
@@ -64,7 +64,7 @@ namespace LibW4M.PS2
using(MemoryStream ms = new MemoryStream())
{
- CreateSaveFile(save, ms);
+ createPs2SaveXOM(save, ms);
ms.Seek(0, SeekOrigin.Begin);
psuFile.CreateFile("BESLES-53096W4MA", ms.ToArray());
}
diff --git a/LibW4M/PS2/PsuFile.cs b/LibW4M/PS2/PsuFile.cs
index 13427df..8105590 100644
--- a/LibW4M/PS2/PsuFile.cs
+++ b/LibW4M/PS2/PsuFile.cs
@@ -99,7 +99,7 @@ namespace LibW4M.PS2
}
}
- throw new FileNotFoundException("Cannot find the file");
+ throw new FileNotFoundException("Cannot find any file named \""+filename+"\" in the PSU.");
}
public static PsuFile ReadPSU(string psuFilePath)
diff --git a/LibW4M/W4SaveFile.cs b/LibW4M/W4SaveFile.cs
index 1b3832c..c53b709 100644
--- a/LibW4M/W4SaveFile.cs
+++ b/LibW4M/W4SaveFile.cs
@@ -151,7 +151,7 @@ namespace LibW4M
foreach (UnlockableItemData unlockableItem in UnlockableItems)
unlockableItem.Save();
}
- public void SavePC(Stream pcSaveStream)
+ public void Save(Stream pcSaveStream)
{
saveData();
using (pcSaveStream)
@@ -166,46 +166,6 @@ namespace LibW4M
}
}
- public void SavePS2PSU(Stream ps2PsuSaveStream)
- {
- using (ps2PsuSaveStream)
- {
- Ps2Save.CreatePSU(this, ps2PsuSaveStream);
- }
- }
-
- public void SaveXBOX(Stream xboxSaveStream, XboxRegion region)
- {
- using (xboxSaveStream)
- {
- XboxSave.CreateSaveFile(this, xboxSaveStream, region);
- }
- }
-
- public void SavePS2(Stream ps2SaveStream)
- {
- using (ps2SaveStream)
- {
- Ps2Save.CreateSaveFile(this, ps2SaveStream);
- }
- }
-
- public void SaveXBOX(string newXom, XboxRegion region)
- {
- SaveXBOX(File.OpenWrite(newXom), region);
- }
- public void SavePS2(string newXom)
- {
- SavePS2(File.OpenWrite(newXom));
- }
- public void SavePS2PSU(string newXom)
- {
- SavePS2PSU(File.OpenWrite(newXom));
- }
- public void SavePC(string newXom)
- {
- SavePC(File.OpenWrite(newXom));
- }
public void ExtractAllContainers(string path)
{
diff --git a/LibW4M/XBOX/Resources/SaveImage.xbx b/LibW4M/XBOX/Resources/SaveImage.xbx
new file mode 100644
index 0000000..df36b57
Binary files /dev/null and b/LibW4M/XBOX/Resources/SaveImage.xbx differ
diff --git a/LibW4M/XBOX/Resources/SaveMeta.xbx b/LibW4M/XBOX/Resources/SaveMeta.xbx
new file mode 100644
index 0000000..04c1bd2
Binary files /dev/null and b/LibW4M/XBOX/Resources/SaveMeta.xbx differ
diff --git a/LibW4M/XBOX/Resources/TitleImage.xbx b/LibW4M/XBOX/Resources/TitleImage.xbx
new file mode 100644
index 0000000..f641fff
Binary files /dev/null and b/LibW4M/XBOX/Resources/TitleImage.xbx differ
diff --git a/LibW4M/XBOX/Resources/TitleMeta.xbx b/LibW4M/XBOX/Resources/TitleMeta.xbx
new file mode 100644
index 0000000..f468090
Binary files /dev/null and b/LibW4M/XBOX/Resources/TitleMeta.xbx differ
diff --git a/LibW4M/XBOX/SaveResources.Designer.cs b/LibW4M/XBOX/SaveResources.Designer.cs
new file mode 100644
index 0000000..847e19e
--- /dev/null
+++ b/LibW4M/XBOX/SaveResources.Designer.cs
@@ -0,0 +1,103 @@
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+namespace LibW4M.XBOX {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // 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()]
+ public class SaveResources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal SaveResources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LibW4M.XBOX.SaveResources", typeof(SaveResources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Byte[].
+ ///
+ public static byte[] SaveImage {
+ get {
+ object obj = ResourceManager.GetObject("SaveImage", resourceCulture);
+ return ((byte[])(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Byte[].
+ ///
+ public static byte[] SaveMeta {
+ get {
+ object obj = ResourceManager.GetObject("SaveMeta", resourceCulture);
+ return ((byte[])(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Byte[].
+ ///
+ public static byte[] TitleImage {
+ get {
+ object obj = ResourceManager.GetObject("TitleImage", resourceCulture);
+ return ((byte[])(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Byte[].
+ ///
+ public static byte[] TitleMeta {
+ get {
+ object obj = ResourceManager.GetObject("TitleMeta", resourceCulture);
+ return ((byte[])(obj));
+ }
+ }
+ }
+}
diff --git a/LibW4M/XBOX/SaveResources.resx b/LibW4M/XBOX/SaveResources.resx
new file mode 100644
index 0000000..cd02e20
--- /dev/null
+++ b/LibW4M/XBOX/SaveResources.resx
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+ Resources\SaveImage.xbx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Resources\SaveMeta.xbx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Resources\TitleImage.xbx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Resources\TitleMeta.xbx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/LibW4M/XBOX/XboxSave.cs b/LibW4M/XBOX/XboxSave.cs
index 239037e..af17bde 100644
--- a/LibW4M/XBOX/XboxSave.cs
+++ b/LibW4M/XBOX/XboxSave.cs
@@ -4,7 +4,10 @@ using LibXom;
using LibXom.Streams;
using System;
using System.Collections.Generic;
+using System.IO;
+using System.IO.Compression;
using System.Linq;
+using System.Security.AccessControl;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
@@ -27,6 +30,8 @@ namespace LibW4M.XBOX
}
}
+
+
public static void CreateSaveFile(W4SaveFile save, Stream output, XboxRegion region)
{
using(MemoryStream ms = new MemoryStream())
@@ -48,6 +53,33 @@ namespace LibW4M.XBOX
}
}
+
+ public static void CreateSaveZipFile(W4SaveFile save, Stream outStream, XboxRegion region)
+ {
+ using(MemoryStream ms = new MemoryStream())
+ {
+ using(ZipArchive zip = new ZipArchive(ms, ZipArchiveMode.Create, true))
+ {
+ string titleId = (region == XboxRegion.USA) ? "4d4a0017" : "434d0052";
+ string userId = (region == XboxRegion.USA) ? "474BBB580245" : "474BBB580245";
+
+ zip.CreateEntry(titleId + "/", CompressionLevel.SmallestSize);
+ zip.CreateEntry(titleId + "/" + userId + "/", CompressionLevel.SmallestSize);
+
+ using (Stream stream = zip.CreateEntry(titleId + "/SaveImage.xbx", CompressionLevel.SmallestSize).Open()) { stream.Write(SaveResources.SaveImage, 0, SaveResources.SaveImage.Length); }
+ using (Stream stream = zip.CreateEntry(titleId + "/TitleImage.xbx", CompressionLevel.SmallestSize).Open()) { stream.Write(SaveResources.TitleImage, 0, SaveResources.TitleImage.Length); }
+ using (Stream stream = zip.CreateEntry(titleId + "/TitleMeta.xbx", CompressionLevel.SmallestSize).Open()) { stream.Write(SaveResources.TitleMeta, 0, SaveResources.TitleMeta.Length); }
+
+
+ using (Stream stream = zip.CreateEntry(titleId + "/" + userId + "/SaveMeta.xbx", CompressionLevel.SmallestSize).Open()) { stream.Write(SaveResources.SaveMeta, 0, SaveResources.SaveMeta.Length); }
+ using (Stream stream = zip.CreateEntry(titleId + "/" + userId + "/data", CompressionLevel.SmallestSize).Open()) { CreateSaveFile(save, stream, region); }
+
+ }
+ ms.Seek(0, SeekOrigin.Begin);
+ ms.CopyTo(outStream);
+ }
+ }
+
private static byte[] xor(byte[] data, byte key)
{
byte[] outdata = new byte[data.Length];
@@ -97,31 +129,45 @@ namespace LibW4M.XBOX
return ms;
}
- public static XboxRegion DetermineRegion(Stream stream)
+ public static W4SaveFile ReadXboxSave(string filename, ref XboxRegion outRegion)
{
- byte[] expectedSignature = new byte[SHA1_SIZE];
- stream.Read(expectedSignature, 0, SHA1_SIZE);
+ using (FileStream fs = File.OpenRead(filename))
+ {
+ using (ZipArchive zip = new ZipArchive(fs, ZipArchiveMode.Read, true))
+ {
+ ZipArchiveEntry? usaDataEntry = zip.GetEntry("4d4a0017/474BBB580245/data");
+ if (usaDataEntry is not null)
+ {
+ outRegion = XboxRegion.USA;
+ return XboxSave.readXboxMainSave(usaDataEntry.Open());
+ }
- byte[] saveData = new byte[XBOX_MAX_SZ];
- stream.Read(saveData, 0, XBOX_MAX_SZ);
-
- stream.Seek(0, SeekOrigin.Begin);
-
- byte[] usaSig = calcSignature(saveData, XboxRegion.USA);
- byte[] eurSig = calcSignature(saveData, XboxRegion.EU);
-
- if (expectedSignature.SequenceEqual(usaSig)) return XboxRegion.USA;
- else if (expectedSignature.SequenceEqual(eurSig)) return XboxRegion.EU;
- else return XboxRegion.UNKNOWN;
-
+ ZipArchiveEntry? eurDataEntry = zip.GetEntry("434d0052/474BBB580245/data");
+ if (eurDataEntry is not null)
+ {
+ outRegion = XboxRegion.EU;
+ return XboxSave.readXboxMainSave(eurDataEntry.Open());
+ }
+ }
+ }
+ throw new FileNotFoundException("Could not find '4d4a0017/474BBB580245/data' or '434d0052/474BBB580245/data' inside the zip?\nis it not an Worms 4 Mayhem XBOX save file?");
}
- public static W4SaveFile ReadXboxSave(Stream stream)
+ private static W4SaveFile readXboxMainSave(Stream stream)
{
- using (MemoryStream ms = readSaveData(stream))
+ using (stream)
{
- return new W4SaveFile(XomReader.ReadXomFile(ms));
+ using(MemoryStream streamCopy = new MemoryStream())
+ {
+ stream.CopyTo(streamCopy);
+ streamCopy.Seek(0, SeekOrigin.Begin);
+ using (MemoryStream xomStream = readSaveData(streamCopy))
+ {
+ return new W4SaveFile(XomReader.ReadXomFile(xomStream));
+ }
+ }
}
+
}
public static void CalcAndWriteSignature(Stream s, XboxRegion region)
diff --git a/W4Gui/DataManager.cs b/W4Gui/DataManager.cs
index 54486e7..18c4896 100644
--- a/W4Gui/DataManager.cs
+++ b/W4Gui/DataManager.cs
@@ -1,7 +1,11 @@
using LibW4M;
+using LibW4M.PS2;
using LibW4M.XBOX;
+using LibXom;
using System;
+using System.CodeDom;
using System.Collections.Generic;
+using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -16,7 +20,7 @@ namespace W4Gui
public static bool SaveLoaded = false;
public static W4SaveFile SaveFile;
- public static void SaveAll()
+ public static void CommitData()
{
foreach(TabEntry control in SaveComponents)
{
@@ -28,7 +32,7 @@ namespace W4Gui
}
}
- public static void LoadAll()
+ public static void ParseData()
{
foreach (TabEntry control in SaveComponents)
{
@@ -40,6 +44,128 @@ namespace W4Gui
}
}
+
+ public static void SavePS2(Stream ps2PsuSaveStream)
+ {
+ using (ps2PsuSaveStream)
+ {
+ Ps2Save.CreateSaveFile(DataManager.SaveFile, ps2PsuSaveStream);
+ }
+ }
+
+ public static void SaveXBOX(Stream xboxSaveStream, XboxRegion region)
+ {
+ using (xboxSaveStream)
+ {
+ XboxSave.CreateSaveZipFile(DataManager.SaveFile, xboxSaveStream, region);
+ }
+ }
+
+ public static void SavePC(string newXom)
+ {
+ SaveFile.Save(File.OpenWrite(newXom));
+ }
+
+ public static void SaveXBOX(string newXom, XboxRegion region)
+ {
+ SaveXBOX(File.OpenWrite(newXom), region);
+ }
+ public static void SavePS2(string newXom)
+ {
+ SavePS2(File.OpenWrite(newXom));
+ }
+
+
+ public static void LoadPC(string filename)
+ {
+ SaveFile = new W4SaveFile(XomReader.ReadXomFile(filename));
+ }
+
+ public static void LoadPS2(string filename)
+ {
+ SaveFile = Ps2Save.ReadPS2Save(filename);
+ }
+ public static SaveType LoadXBOX(string filename)
+ {
+ XboxRegion region = XboxRegion.UNKNOWN;
+ SaveFile = XboxSave.ReadXboxSave(filename, ref region);
+ if (region == XboxRegion.USA) return SaveType.XBOX_US;
+ if (region == XboxRegion.EU) return SaveType.XBOX_EU;
+ return SaveType.UNKNOWN;
+ }
+
+ public static SaveType LoadGuessType(string filename)
+ {
+ switch (Path.GetExtension(filename))
+ {
+ case ".xom":
+ LoadPC(filename);
+ return SaveType.PC;
+ case ".psu":
+ LoadPS2(filename);
+ return SaveType.PS2;
+ case ".zip":
+ return LoadXBOX(filename);
+ }
+
+
+ return SaveType.UNKNOWN;
+ }
+
+ public static void Load(string filename, SaveType saveType)
+ {
+
+ switch (saveType)
+ {
+ case SaveType.PC:
+ LoadPC(filename);
+ break;
+ case SaveType.PS2:
+ LoadPS2(filename);
+ break;
+ case SaveType.XBOX_US:
+ case SaveType.XBOX_EU:
+ saveType = LoadXBOX(filename);
+ break;
+ case SaveType.UNKNOWN:
+ default:
+ saveType = LoadGuessType(filename);
+ break;
+ }
+
+ if(saveType != SaveType.UNKNOWN)
+ {
+ DataManager.LoadedSavePath = filename;
+ DataManager.LoadedSaveType = saveType;
+ }
+ else {
+ throw new Exception("unable to determine save type.");
+ }
+
+ }
+
+ public static void Save(string filename, SaveType saveType)
+ {
+ switch (saveType)
+ {
+ case SaveType.PC:
+ DataManager.SavePC(filename);
+ break;
+ case SaveType.PS2:
+ DataManager.SavePS2(filename);
+ break;
+ case SaveType.XBOX_US:
+ DataManager.SaveXBOX(filename, XboxRegion.USA);
+ break;
+ case SaveType.XBOX_EU:
+ DataManager.SaveXBOX(filename, XboxRegion.EU);
+ break;
+ }
+
+ DataManager.LoadedSavePath = filename;
+ DataManager.LoadedSaveType = saveType;
+ }
+
public static List SaveComponents = new List();
}
}
diff --git a/W4Gui/Main.cs b/W4Gui/Main.cs
index 0d50875..5fd6aa3 100644
--- a/W4Gui/Main.cs
+++ b/W4Gui/Main.cs
@@ -10,6 +10,7 @@ using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
+using System.Security.AccessControl;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
@@ -40,37 +41,12 @@ namespace W4Gui
{
#endif
OpenFileDialog fd = new OpenFileDialog();
- fd.Filter = "Worms 4: Mayhem PC Save File|*.xom|Worms 4: Mayhem PS2 Save File|*.psu|Worms 4: Mayhem XBOX Save File|data";
+ fd.Filter = "Worms 4: Mayhem Save Files|*.xom;*.psu;*.zip|Worms 4: Mayhem PC Save File|*.xom|Worms 4: Mayhem PS2 Save File|*.psu|Worms 4: Mayhem XBOX Save File|*.zip";
fd.Title = "Open Worms 4 Save File";
if (fd.ShowDialog() == DialogResult.OK)
{
- DataManager.LoadedSavePath = fd.FileName;
- DataManager.LoadedSaveType = (SaveType)(fd.FilterIndex);
-
- switch (DataManager.LoadedSaveType)
- {
- case SaveType.PC:
- default:
- DataManager.SaveFile = new W4SaveFile(XomReader.ReadXomFile(fd.FileName));
- break;
- case SaveType.PS2:
- DataManager.SaveFile = Ps2Save.ReadPS2Save(fd.FileName);
- break;
- case SaveType.XBOX_US:
- case SaveType.XBOX_EU:
- using(FileStream fs = File.OpenRead(fd.FileName))
- {
- XboxRegion region = XboxSave.DetermineRegion(fs);
-
- if (region == XboxRegion.USA) DataManager.LoadedSaveType = SaveType.XBOX_US;
- if (region == XboxRegion.EU) DataManager.LoadedSaveType = SaveType.XBOX_EU;
-
- DataManager.SaveFile = XboxSave.ReadXboxSave(fs);
- }
- break;
-
- }
-
+
+ DataManager.Load(fd.FileName, (SaveType)(fd.FilterIndex-1));
this.mainTabControl.Enabled = true;
this.saveToolStripMenuItem.Enabled = true;
@@ -78,7 +54,7 @@ namespace W4Gui
this.Text = defaultTitle + " (" + DataManager.LoadedSaveType.ToString() + ") " + "[" + fd.FileName + "]";
- DataManager.LoadAll();
+ DataManager.ParseData();
}
#if !DEBUG
}
@@ -96,22 +72,10 @@ namespace W4Gui
{
#endif
mainTabControl.Enabled = false;
- DataManager.SaveAll();
- switch (DataManager.LoadedSaveType)
- {
- case SaveType.PC:
- DataManager.SaveFile.SavePC(DataManager.LoadedSavePath);
- break;
- case SaveType.PS2:
- DataManager.SaveFile.SavePS2PSU(DataManager.LoadedSavePath);
- break;
- case SaveType.XBOX_US:
- DataManager.SaveFile.SaveXBOX(DataManager.LoadedSavePath, XboxRegion.USA);
- break;
- case SaveType.XBOX_EU:
- DataManager.SaveFile.SaveXBOX(DataManager.LoadedSavePath, XboxRegion.EU);
- break;
- }
+ DataManager.CommitData();
+
+ DataManager.Save(DataManager.LoadedSavePath, DataManager.LoadedSaveType);
+
mainTabControl.Enabled = true;
MessageBox.Show("File saved to: " + DataManager.LoadedSavePath, "Save Complete!", MessageBoxButtons.OK, MessageBoxIcon.Information);
#if !DEBUG
@@ -164,37 +128,23 @@ namespace W4Gui
{
#endif
SaveFileDialog fd = new SaveFileDialog();
- fd.Filter = "Worms 4: Mayhem PC Save File|*.xom|Worms 4: Mayhem PS2 Single Save File|*.psu|Worms 4: Mayhem XBOX United States Save File|data|Worms 4: Mayhem XBOX Europe/Austrailia Save File|data";
+ fd.Filter = "Worms 4: Mayhem PC Save File|*.xom|Worms 4: Mayhem PS2 Save File|*.psu|Worms 4: Mayhem XBOX \"NTSC\" (United States) Save File|*.zip|Worms 4: Mayhem XBOX \"PAL\" (Europe & Austrailia) Save File|*.zip";
fd.Title = "Save Worms 4 Save File";
+ fd.FilterIndex = (int)DataManager.LoadedSaveType;
fd.FileName = Path.GetFileName(DataManager.LoadedSavePath);
if (fd.ShowDialog() == DialogResult.OK)
{
this.mainTabControl.Enabled = false;
- DataManager.SaveAll();
+ DataManager.CommitData();
+
SaveType saveType = (SaveType)(fd.FilterIndex);
+ DataManager.Save(fd.FileName, saveType);
- switch (saveType)
- {
- case SaveType.PC:
- DataManager.SaveFile.SavePC(fd.FileName);
- break;
- case SaveType.PS2:
- DataManager.SaveFile.SavePS2PSU(fd.FileName);
- break;
- case SaveType.XBOX_US:
- DataManager.SaveFile.SaveXBOX(fd.FileName, XboxRegion.USA);
- break;
- case SaveType.XBOX_EU:
- DataManager.SaveFile.SaveXBOX(fd.FileName, XboxRegion.EU);
- break;
- }
-
- DataManager.LoadedSavePath = fd.FileName;
- DataManager.LoadedSaveType = saveType;
+ this.Text = defaultTitle + " (" + DataManager.LoadedSaveType.ToString() + ") " + "[" + fd.FileName + "]";
MessageBox.Show("File saved to: " + fd.FileName, "Save Complete!", MessageBoxButtons.OK, MessageBoxIcon.Information);
- this.mainTabControl.Enabled = true;
+
}
#if !DEBUG
}
diff --git a/W4Gui/Properties/PublishProfiles/FolderProfile.pubxml.user b/W4Gui/Properties/PublishProfiles/FolderProfile.pubxml.user
index 6801b15..ebe2111 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-03-04T17:13:14.7341877Z;True|2023-03-05T05:34:42.0662279+13:00;True|2023-03-05T05:20:37.5344385+13:00;False|2023-03-05T05:11:04.5753179+13:00;True|2023-03-04T13:33:03.9184567+13:00;True|2023-03-04T05:17:31.1862857+13:00;True|2023-03-04T04:40:06.7859106+13:00;True|2023-03-01T11:45:37.3479871+13:00;True|2023-03-01T09:19:31.4651141+13:00;True|2023-02-25T21:53:35.8769435+13:00;True|2023-02-20T23:18:32.2496478+13:00;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;
+ True|2023-03-05T00:20:07.6932195Z;True|2023-03-05T13:09:52.8373633+13:00;True|2023-03-05T06:13:14.7341877+13:00;True|2023-03-05T05:34:42.0662279+13:00;True|2023-03-05T05:20:37.5344385+13:00;False|2023-03-05T05:11:04.5753179+13:00;True|2023-03-04T13:33:03.9184567+13:00;True|2023-03-04T05:17:31.1862857+13:00;True|2023-03-04T04:40:06.7859106+13:00;True|2023-03-01T11:45:37.3479871+13:00;True|2023-03-01T09:19:31.4651141+13:00;True|2023-02-25T21:53:35.8769435+13:00;True|2023-02-20T23:18:32.2496478+13:00;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/SaveType.cs b/W4Gui/SaveType.cs
index 4239e1a..f3c4347 100644
--- a/W4Gui/SaveType.cs
+++ b/W4Gui/SaveType.cs
@@ -8,6 +8,7 @@ namespace W4Gui
{
public enum SaveType : int
{
+ UNKNOWN = 0,
PC = 1,
PS2 = 2,
XBOX_US = 3,