214 lines
7.7 KiB
C#
214 lines
7.7 KiB
C#
using LibW4M;
|
|
using LibW4M.Data.WeaponFactory;
|
|
using LibW4M.PS2;
|
|
using LibW4M.XBOX;
|
|
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;
|
|
using W4Gui.Dialogs;
|
|
using W4Gui.Tabs;
|
|
|
|
namespace W4Gui
|
|
{
|
|
public partial class Main : Form
|
|
{
|
|
private static int lastTabIndex = -1;
|
|
private const string defaultTitle = "Worms 4: Mayhem! (Save Editor)";
|
|
public Main()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void W4Gui_Load(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
private void openToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
#if !DEBUG
|
|
try
|
|
{
|
|
#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.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;
|
|
|
|
}
|
|
|
|
|
|
this.mainTabControl.Enabled = true;
|
|
this.saveToolStripMenuItem.Enabled = true;
|
|
this.saveAsToolStripMenuItem.Enabled = true;
|
|
|
|
this.Text = defaultTitle + " (" + DataManager.LoadedSaveType.ToString() + ") " + "[" + fd.FileName + "]";
|
|
|
|
DataManager.LoadAll();
|
|
}
|
|
#if !DEBUG
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("Failed to load save due to an error\n" + ex.Message + "\nThe file may be invalid or corrupt.", "Load failed!", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
#if !DEBUG
|
|
try
|
|
{
|
|
#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;
|
|
}
|
|
mainTabControl.Enabled = true;
|
|
MessageBox.Show("File saved to: " + DataManager.LoadedSavePath, "Save Complete!", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
#if !DEBUG
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("Failed to save: " + ex.Message, "Save failed!", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
#endif
|
|
}
|
|
private void mainTabControl_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if (lastTabIndex >= 0)
|
|
{
|
|
foreach (Control ctrl in this.mainTabControl.TabPages[lastTabIndex].Controls)
|
|
{
|
|
try
|
|
{
|
|
TabEntry? tab = ctrl as TabEntry;
|
|
if (tab is TabEntry)
|
|
tab.SaveFromControl();
|
|
}
|
|
catch { }
|
|
}
|
|
}
|
|
|
|
|
|
if (this.mainTabControl.SelectedIndex >= 0)
|
|
{
|
|
foreach (Control ctrl in this.mainTabControl.TabPages[this.mainTabControl.SelectedIndex].Controls)
|
|
{
|
|
try
|
|
{
|
|
TabEntry? tab = ctrl as TabEntry;
|
|
if (tab is TabEntry)
|
|
tab.LoadIntoControl();
|
|
}
|
|
catch { }
|
|
}
|
|
}
|
|
|
|
|
|
lastTabIndex = this.mainTabControl.SelectedIndex;
|
|
}
|
|
|
|
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
#if !DEBUG
|
|
try
|
|
{
|
|
#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.Title = "Save Worms 4 Save File";
|
|
fd.FileName = Path.GetFileName(DataManager.LoadedSavePath);
|
|
if (fd.ShowDialog() == DialogResult.OK)
|
|
{
|
|
this.mainTabControl.Enabled = false;
|
|
|
|
DataManager.SaveAll();
|
|
SaveType saveType = (SaveType)(fd.FilterIndex);
|
|
|
|
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;
|
|
|
|
MessageBox.Show("File saved to: " + fd.FileName, "Save Complete!", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
this.mainTabControl.Enabled = true;
|
|
}
|
|
#if !DEBUG
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("Failed to save: " + ex.Message, "Save failed!", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
private void aboutProgramToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
new AboutW4Gui().ShowDialog();
|
|
}
|
|
}
|
|
}
|