Added PCK Endianness Conversion

commit 95bd1957d8
Author: MattN-L <MattNL.XBLD@gmail.com>
Date:   Sun Mar 31 19:26:17 2024 -0400

    Added endianness conversion feature

    Redone because it originally included a bunch of sub pck support, which is no longer planned.

commit 03ebbd3d58
Author: MattN-L <MattNL.XBLD@gmail.com>
Date:   Sun Mar 31 18:53:46 2024 -0400

    Revert "Added PCK Endianness conversion features"

    This reverts commit 565dabf38a.

commit 565dabf38a
Author: MattN-L <MattNL.XBLD@gmail.com>
Date:   Mon Dec 11 21:02:14 2023 -0500

    Added PCK Endianness conversion features
This commit is contained in:
MattN-L
2024-03-31 20:12:40 -04:00
parent 71728d3bd7
commit 8293cd5b61
3 changed files with 2625 additions and 2144 deletions

View File

@@ -150,6 +150,9 @@
toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
this.setSubPCKEndiannessToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.bigEndianXbox360PS3WiiUToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.littleEndianPS4PSVitaSwitchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
((System.ComponentModel.ISupportInitialize)(logoPictureBox)).BeginInit();
this.contextMenuPCKEntries.SuspendLayout();
this.menuStrip.SuspendLayout();
@@ -406,7 +409,8 @@
this.miscFunctionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.generateMipMapTextureToolStripMenuItem1,
this.viewFileInfoToolStripMenuItem,
this.correctSkinDecimalsToolStripMenuItem});
this.correctSkinDecimalsToolStripMenuItem,
this.setSubPCKEndiannessToolStripMenuItem});
this.miscFunctionsToolStripMenuItem.Name = "miscFunctionsToolStripMenuItem";
resources.ApplyResources(this.miscFunctionsToolStripMenuItem, "miscFunctionsToolStripMenuItem");
//
@@ -1095,6 +1099,26 @@
this.LittleEndianCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark;
this.LittleEndianCheckBox.UseSelectable = true;
//
// setSubPCKEndiannessToolStripMenuItem
//
this.setSubPCKEndiannessToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.bigEndianXbox360PS3WiiUToolStripMenuItem,
this.littleEndianPS4PSVitaSwitchToolStripMenuItem});
this.setSubPCKEndiannessToolStripMenuItem.Name = "setSubPCKEndiannessToolStripMenuItem";
resources.ApplyResources(this.setSubPCKEndiannessToolStripMenuItem, "setSubPCKEndiannessToolStripMenuItem");
//
// bigEndianXbox360PS3WiiUToolStripMenuItem
//
this.bigEndianXbox360PS3WiiUToolStripMenuItem.Name = "bigEndianXbox360PS3WiiUToolStripMenuItem";
resources.ApplyResources(this.bigEndianXbox360PS3WiiUToolStripMenuItem, "bigEndianXbox360PS3WiiUToolStripMenuItem");
this.bigEndianXbox360PS3WiiUToolStripMenuItem.Click += new System.EventHandler(this.bigEndianToolStripMenuItem_Click);
//
// littleEndianPS4PSVitaSwitchToolStripMenuItem
//
this.littleEndianPS4PSVitaSwitchToolStripMenuItem.Name = "littleEndianPS4PSVitaSwitchToolStripMenuItem";
resources.ApplyResources(this.littleEndianPS4PSVitaSwitchToolStripMenuItem, "littleEndianPS4PSVitaSwitchToolStripMenuItem");
this.littleEndianPS4PSVitaSwitchToolStripMenuItem.Click += new System.EventHandler(this.littleEndianToolStripMenuItem_Click);
//
// MainForm
//
this.ApplyImageInvert = true;
@@ -1245,6 +1269,9 @@
private System.Windows.Forms.ToolStripMenuItem trelloBoardToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem recentlyOpenToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem setSubPCKEndiannessToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem bigEndianXbox360PS3WiiUToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem littleEndianPS4PSVitaSwitchToolStripMenuItem;
}
}

View File

@@ -571,8 +571,22 @@ namespace PckStudio
private void HandleAudioFile(PckFileData file)
{
using AudioEditor audioEditor = new AudioEditor(file, LittleEndianCheckBox.Checked);
wasModified = audioEditor.ShowDialog(this) == DialogResult.OK;
try
{
using AudioEditor audioEditor = new AudioEditor(file, LittleEndianCheckBox.Checked);
wasModified = audioEditor.ShowDialog(this) == DialogResult.OK;
}
catch (OverflowException)
{
MessageBox.Show(this, $"Failed to open {file.Filename}\n" +
"Try converting the file by using the \"Misc. Functions/Set PCK Endianness\" tool and try again.",
"Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
catch (Exception ex)
{
MessageBox.Show($"Failed to open {file.Filename}\n" + ex.Message,
"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void HandleLocalisationFile(PckFileData file)
@@ -2382,5 +2396,42 @@ namespace PckStudio
{
Application.Exit();
}
private void setPCKEndiannessStripMenuItem_Click(OMI.Endianness endianness)
{
try
{
if (treeViewMain.SelectedNode.Tag is PckFileData file && (file.Filetype is PckFileType.AudioFile || file.Filetype is PckFileType.SkinDataFile || file.Filetype is PckFileType.TexturePackInfoFile))
{
using (var stream = new MemoryStream())
{
dynamic reader = file.Filetype is PckFileType.AudioFile
? new PckAudioFileReader(endianness == OMI.Endianness.BigEndian ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian)
: new PckFileReader(endianness == OMI.Endianness.BigEndian ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian);
var pck = reader.FromStream(new MemoryStream(file.Data));
dynamic writer = file.Filetype is PckFileType.AudioFile
? new PckAudioFileWriter(pck, endianness)
: new PckFileWriter(pck, endianness);
writer.WriteToStream(stream);
file.SetData(stream.ToArray());
}
wasModified = true;
MessageBox.Show($"\"{file.Filename}\" successfully converted to {(endianness == OMI.Endianness.LittleEndian ? "little" : "big")} endian.", "Converted PCK file");
}
}
catch (OverflowException)
{
MessageBox.Show(this, $"File was not a valid {(endianness != OMI.Endianness.LittleEndian ? "little" : "big")} endian PCK File.", "Not a valid PCK file");
return;
}
catch (Exception ex)
{
MessageBox.Show(this, ex.Message, "Not a valid PCK file");
return;
}
}
private void littleEndianToolStripMenuItem_Click(object sender, EventArgs e) => setPCKEndiannessStripMenuItem_Click(OMI.Endianness.LittleEndian);
private void bigEndianToolStripMenuItem_Click(object sender, EventArgs e) => setPCKEndiannessStripMenuItem_Click(OMI.Endianness.BigEndian);
}
}

File diff suppressed because it is too large Load Diff