diff --git a/PCK-Studio/Classes/Misc/RenderBase.cs b/PCK-Studio/Classes/Misc/RenderBase.cs index 47ee3c7b..05b8a0d9 100644 --- a/PCK-Studio/Classes/Misc/RenderBase.cs +++ b/PCK-Studio/Classes/Misc/RenderBase.cs @@ -1525,7 +1525,7 @@ namespace Ohana3DS_Rebirth.Ohana /// public enum OTextureFormat { - rgba8 = 0, + argb8 = 0, rgb8 = 1, rgba5551 = 2, rgb565 = 3, diff --git a/PCK-Studio/Classes/Texturing/TextureCodec.cs b/PCK-Studio/Classes/Texturing/TextureCodec.cs index fdb80e8d..fd139edf 100644 --- a/PCK-Studio/Classes/Texturing/TextureCodec.cs +++ b/PCK-Studio/Classes/Texturing/TextureCodec.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Drawing; +using System.Collections.Generic; namespace Ohana3DS_Rebirth.Ohana { @@ -17,15 +18,15 @@ namespace Ohana3DS_Rebirth.Ohana /// Height of the Texture /// Pixel Format of the Texture /// - public static Bitmap decode(byte[] data, int width, int height, RenderBase.OTextureFormat format) + public static Bitmap Decode(byte[] data, int width, int height, RenderBase.OTextureFormat format) { byte[] output = new byte[width * height * 4]; - long dataOffset = 0; + int dataOffset = 0; bool toggle = false; switch (format) { - case RenderBase.OTextureFormat.rgba8: + case RenderBase.OTextureFormat.argb8: for (int tY = 0; tY < height / 8; tY++) { for (int tX = 0; tX < width / 8; tX++) @@ -34,11 +35,10 @@ namespace Ohana3DS_Rebirth.Ohana { int x = tileOrder[pixel] % 8; int y = (tileOrder[pixel] - x) / 8; - long outputOffset = ((tX * 8) + x + ((tY * 8 + y) * width)) * 4; + int outputOffset = ((tX * 8 + x) + ((tY * 8 + y) * width)) * 4; - Buffer.BlockCopy(data, (int)dataOffset + 1, output, (int)outputOffset, 3); + Buffer.BlockCopy(data, dataOffset + 1, output, outputOffset, 3); output[outputOffset + 3] = data[dataOffset]; - dataOffset += 4; } } @@ -54,9 +54,9 @@ namespace Ohana3DS_Rebirth.Ohana { int x = tileOrder[pixel] % 8; int y = (tileOrder[pixel] - x) / 8; - long outputOffset = ((tX * 8) + x + (((tY * 8 + y)) * width)) * 4; + long outputOffset = ((tX * 8) + x + ((tY * 8 + y) * width)) * 4; - Buffer.BlockCopy(data, (int)dataOffset, output, (int)outputOffset, 3); + Buffer.BlockCopy(data, dataOffset, output, (int)outputOffset, 3); output[outputOffset + 3] = 0xff; dataOffset += 3; @@ -310,7 +310,7 @@ namespace Ohana3DS_Rebirth.Ohana break; } - return TextureUtils.getBitmap(output.ToArray(), width, height); + return TextureUtils.ToBitmap(output, width, height); } /// @@ -319,15 +319,15 @@ namespace Ohana3DS_Rebirth.Ohana /// Input image to be encoded /// Pixel Format of the Texture /// - public static byte[] encode(Bitmap img, RenderBase.OTextureFormat format) + public static byte[] Encode(Bitmap img, RenderBase.OTextureFormat format) { - byte[] data = TextureUtils.getArray(img); + byte[] data = TextureUtils.ToArray(img); byte[] output = new byte[data.Length]; - uint outputOffset = 0; + int outputOffset = 0; switch (format) { - case RenderBase.OTextureFormat.rgba8: + case RenderBase.OTextureFormat.argb8: for (int tY = 0; tY < img.Height / 8; tY++) { for (int tX = 0; tX < img.Width / 8; tX++) @@ -336,18 +336,17 @@ namespace Ohana3DS_Rebirth.Ohana { int x = tileOrder[pixel] % 8; int y = (tileOrder[pixel] - x) / 8; - long dataOffset = ((tX * 8) + x + ((tY * 8 + y) * img.Width)) * 4; + int dataOffset = ((tX * 8) + x + (tY * 8 + y) * img.Width) * 4; - Buffer.BlockCopy(data, (int)dataOffset, output, (int)outputOffset + 1, 3); + Buffer.BlockCopy(data, dataOffset, output, outputOffset + 1, 3); output[outputOffset] = data[dataOffset + 3]; - outputOffset += 4; } } } break; - default: throw new NotImplementedException(); + default: throw new NotImplementedException(nameof(format)); } return output; diff --git a/PCK-Studio/Classes/Texturing/TextureUtils.cs b/PCK-Studio/Classes/Texturing/TextureUtils.cs index f98a7f62..4f8f1953 100644 --- a/PCK-Studio/Classes/Texturing/TextureUtils.cs +++ b/PCK-Studio/Classes/Texturing/TextureUtils.cs @@ -13,7 +13,7 @@ namespace Ohana3DS_Rebirth.Ohana /// Width of the Texture /// Height of the Texture /// - public static Bitmap getBitmap(byte[] array, int width, int height) + public static Bitmap ToBitmap(byte[] array, int width, int height) { Bitmap img = new Bitmap(width, height, PixelFormat.Format32bppArgb); BitmapData imgData = img.LockBits(new Rectangle(0, 0, img.Width, img.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); @@ -27,7 +27,7 @@ namespace Ohana3DS_Rebirth.Ohana /// /// The Bitmap /// - public static byte[] getArray(Bitmap img) + public static byte[] ToArray(Bitmap img) { BitmapData imgData = img.LockBits(new Rectangle(0, 0, img.Width, img.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); byte[] array = new byte[imgData.Stride * img.Height]; diff --git a/PCK-Studio/Classes/Utils/3DS/3DSUtil.cs b/PCK-Studio/Classes/Utils/3DS/3DSUtil.cs new file mode 100644 index 00000000..0cbf28b4 --- /dev/null +++ b/PCK-Studio/Classes/Utils/3DS/3DSUtil.cs @@ -0,0 +1,110 @@ +using Ohana3DS_Rebirth.Ohana; +using System; +using System.Drawing; +using System.IO; +using System.Text; + +namespace PckStudio.Classes.Utils +{ + internal class _3DSUtil + { + private static string ReadString(Stream stream, int len) + { + byte[] buffer = new byte[len]; + stream.Read(buffer, 0, len); + return Encoding.ASCII.GetString(buffer); + } + + private static int ReadInt32(Stream stream) + { + byte[] buffer = new byte[4]; + stream.Read(buffer, 0, 4); + return BitConverter.ToInt32(buffer, 0); + } + + private static void WriteString(Stream stream, string s) + { + byte[] buffer = Encoding.ASCII.GetBytes(s); + stream.Write(buffer, 0, buffer.Length); + } + + private static void WriteInt32(Stream stream, int value) + { + byte[] buffer = BitConverter.GetBytes(value); + stream.Write(buffer, 0, 4); + } + + public static int CalcBufferSize(RenderBase.OTextureFormat fmt, int w, int h) + { + switch (fmt) + { + case RenderBase.OTextureFormat.argb8: + return w * h * 4; + case RenderBase.OTextureFormat.rgb8: + return w * h * 3; + case RenderBase.OTextureFormat.rgba5551: + case RenderBase.OTextureFormat.rgb565: + case RenderBase.OTextureFormat.rgba4: + case RenderBase.OTextureFormat.la8: + case RenderBase.OTextureFormat.hilo8: + return w * h * 2; + case RenderBase.OTextureFormat.l8: + case RenderBase.OTextureFormat.a8: + case RenderBase.OTextureFormat.la4: + case RenderBase.OTextureFormat.etc1a4: + return w * h; + case RenderBase.OTextureFormat.l4: + case RenderBase.OTextureFormat.a4: + case RenderBase.OTextureFormat.etc1: + return w * h >> 1; + default: + throw new InvalidDataException("Invalid texture format on BCH!"); + } + } + + public static Image GetImageFrom3DST(Stream stream) + { + if (ReadString(stream, 4) == "3DST") + { + const int offset = 32; + stream.Seek(8L, SeekOrigin.Begin); + RenderBase.OTextureFormat format = ReadInt32(stream) switch + { + 0 => RenderBase.OTextureFormat.argb8, + 1 => RenderBase.OTextureFormat.rgb8, + 2 => RenderBase.OTextureFormat.rgba5551, + 3 => RenderBase.OTextureFormat.rgb8, + 4 => RenderBase.OTextureFormat.rgba4, + 9 => RenderBase.OTextureFormat.la4, + _ => RenderBase.OTextureFormat.dontCare, + }; + int width = ReadInt32(stream); + int height = ReadInt32(stream); + int bufferSize = CalcBufferSize(format, width, height); + stream.Seek(offset, SeekOrigin.Begin); + byte[] buffer = new byte[bufferSize]; + stream.Read(buffer, 0, bufferSize); + var img = TextureCodec.Decode(buffer, width, height, format); + img.RotateFlip(RotateFlipType.RotateNoneFlipY); + return img; + } + return null; + } + + public static void SetImageTo3DST(Stream stream, Image source, RenderBase.OTextureFormat format = RenderBase.OTextureFormat.argb8) + { + // TODO: fix Encoding + WriteString(stream, "3DST"); // 0 + WriteInt32(stream, 2); // 4 unknown + WriteInt32(stream, (int)format); // 8 + WriteInt32(stream, source.Width); // 12 + WriteInt32(stream, source.Height); // 16 + WriteInt32(stream, 0); // 20 + WriteInt32(stream, 0); // 24 + WriteInt32(stream, 0); // 28 + source.RotateFlip(RotateFlipType.RotateNoneFlipY); + byte[] buffer = TextureCodec.Encode(new Bitmap(source), format); + stream.Write(buffer, 0, buffer.Length); + } + } +} diff --git a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.Designer.cs b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.Designer.cs index 6bb08225..c88af519 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.Designer.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.Designer.cs @@ -29,8 +29,8 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(addNewSkin)); System.Windows.Forms.Label label3; + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(addNewSkin)); System.Windows.Forms.Label label2; System.Windows.Forms.Label label1; this.textTheme = new System.Windows.Forms.TextBox(); @@ -64,6 +64,24 @@ ((System.ComponentModel.ISupportInitialize)(this.skinPictureBoxTexture)).BeginInit(); this.SuspendLayout(); // + // label3 + // + resources.ApplyResources(label3, "label3"); + label3.ForeColor = System.Drawing.Color.White; + label3.Name = "label3"; + // + // label2 + // + resources.ApplyResources(label2, "label2"); + label2.ForeColor = System.Drawing.Color.White; + label2.Name = "label2"; + // + // label1 + // + resources.ApplyResources(label1, "label1"); + label1.ForeColor = System.Drawing.Color.White; + label1.Name = "label1"; + // // textTheme // resources.ApplyResources(this.textTheme, "textTheme"); @@ -132,24 +150,6 @@ this.displayBox.Name = "displayBox"; this.displayBox.TabStop = false; // - // label3 - // - resources.ApplyResources(label3, "label3"); - label3.ForeColor = System.Drawing.Color.White; - label3.Name = "label3"; - // - // label2 - // - resources.ApplyResources(label2, "label2"); - label2.ForeColor = System.Drawing.Color.White; - label2.Name = "label2"; - // - // label1 - // - resources.ApplyResources(label1, "label1"); - label1.ForeColor = System.Drawing.Color.White; - label1.Name = "label1"; - // // radioAUTO // resources.ApplyResources(this.radioAUTO, "radioAUTO"); @@ -305,7 +305,7 @@ // resources.ApplyResources(this.skinPictureBoxTexture, "skinPictureBoxTexture"); this.skinPictureBoxTexture.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.skinPictureBoxTexture.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default; + this.skinPictureBoxTexture.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.skinPictureBoxTexture.Name = "skinPictureBoxTexture"; this.skinPictureBoxTexture.TabStop = false; this.skinPictureBoxTexture.Click += new System.EventHandler(this.pictureBox1_Click); diff --git a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs index cb2e592d..2fc1348e 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs @@ -11,18 +11,17 @@ namespace PckStudio { public partial class addNewSkin : MetroFramework.Forms.MetroForm { + + public PCKFile.FileData SkinFile => skin; + public PCKFile.FileData CapeFile => cape; + public bool HasCape = false; + LOCFile currentLoc; PCKFile.FileData skin = new PCKFile.FileData("dlcskinXYXYXYXY", PCKFile.FileData.FileType.SkinFile); PCKFile.FileData cape = new PCKFile.FileData("dlccapeXYXYXYXY", PCKFile.FileData.FileType.CapeFile); SkinANIM anim = new SkinANIM(eANIM_EFFECTS.NONE); - public PCKFile.FileData Skin => skin; - public PCKFile.FileData Cape => cape; - public string ANIM => anim.ToString(); - eSkinType skinType; - public bool useCape = false; - string localID = "0"; PCKProperties generatedModel = new PCKProperties(); enum eSkinType : int @@ -38,11 +37,10 @@ namespace PckStudio public addNewSkin(LOCFile loc) { InitializeComponent(); - textSkinID.Text = localID; currentLoc = loc; } - private void checkImage(Image img) + private void CheckImage(Image img) { //Checks image dimensions and sets things accordingly switch (img.Height) // 64x64 @@ -112,24 +110,16 @@ namespace PckStudio } break; } - /* - comboBoxSkinType.Enabled = skinType == eSkinType._64x64 || skinType == eSkinType._64x64HD; - if (comboBoxSkinType.Items.Count == 3) - { - comboBoxSkinType.Items.RemoveAt(0); - } - */ - skinPictureBoxTexture.Image = img; + skinPictureBoxTexture.Image = img; buttonDone.Enabled = true; labelSelectTexture.Visible = false; - - //skin.SetData(); } - private void drawModel() + private void DrawModel() { Bitmap bmp = new Bitmap(displayBox.Width, displayBox.Height); + bool isSlim = anim.GetANIMFlag(eANIM_EFFECTS.SLIM_MODEL); using (Graphics g = Graphics.FromImage(bmp)) { if(!anim.GetANIMFlag(eANIM_EFFECTS.HEAD_DISABLED)) @@ -147,14 +137,14 @@ namespace PckStudio if (!anim.GetANIMFlag(eANIM_EFFECTS.RIGHT_ARM_DISABLED)) { //Arm0 - g.DrawRectangle(Pens.Black, anim.GetANIMFlag(eANIM_EFFECTS.SLIM_MODEL) ? 55 : 50, 55, anim.GetANIMFlag(eANIM_EFFECTS.SLIM_MODEL) ? 15 : 20, 60); - g.FillRectangle(Brushes.Gray, anim.GetANIMFlag(eANIM_EFFECTS.SLIM_MODEL) ? 56 : 51, 56, anim.GetANIMFlag(eANIM_EFFECTS.SLIM_MODEL) ? 14 : 19, 59); + g.DrawRectangle(Pens.Black , isSlim ? 55 : 50, 55, isSlim ? 15 : 20, 60); + g.FillRectangle(Brushes.Gray, isSlim ? 56 : 51, 56, isSlim ? 14 : 19, 59); } if (!anim.GetANIMFlag(eANIM_EFFECTS.LEFT_ARM_DISABLED)) { //Arm1 - g.DrawRectangle(Pens.Black, 110, 55, anim.GetANIMFlag(eANIM_EFFECTS.SLIM_MODEL) ? 15 : 20, 60); - g.FillRectangle(Brushes.Gray, 111, 56, anim.GetANIMFlag(eANIM_EFFECTS.SLIM_MODEL) ? 14 : 19, 59); + g.DrawRectangle(Pens.Black, 110, 55, isSlim ? 15 : 20, 60); + g.FillRectangle(Brushes.Gray, 111, 56, isSlim ? 14 : 19, 59); } if (!anim.GetANIMFlag(eANIM_EFFECTS.RIGHT_LEG_DISABLED)) { @@ -174,7 +164,7 @@ namespace PckStudio private void addnewskin_Load(object sender, EventArgs e) { - drawModel(); + DrawModel(); } private void buttonSkin_Click(object sender, EventArgs e) @@ -192,7 +182,7 @@ namespace PckStudio OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == DialogResult.OK) { - checkImage(Image.FromFile(ofd.FileName)); + CheckImage(Image.FromFile(ofd.FileName)); } } @@ -207,7 +197,7 @@ namespace PckStudio var img = Image.FromFile(ofd1.FileName); if (img.Width == img.Height * 2) { - useCape = true; + HasCape = true; capePictureBox.SizeMode = PictureBoxSizeMode.StretchImage; capePictureBox.InterpolationMode = InterpolationMode.NearestNeighbor; capePictureBox.Image = Image.FromFile(ofd1.FileName); @@ -231,48 +221,50 @@ namespace PckStudio return; } string skinId = _skinId.ToString("d08"); - if (useCape) + skin.filepath = $"dlcskin{skinId}.png"; + string skinDisplayNameLocKey = $"IDS_dlcskin{skinId}_DISPLAYNAME"; + currentLoc.AddLocKey(skinDisplayNameLocKey, textSkinName.Text); + skin.properties.Add(("DISPLAYNAME", textSkinName.Text)); + skin.properties.Add(("DISPLAYNAMEID", skinDisplayNameLocKey)); + if (!string.IsNullOrEmpty(textThemeName.Text)) + { + skin.properties.Add(("THEMENAME", textThemeName.Text)); + skin.properties.Add(("THEMENAMEID", $"IDS_dlcskin{skinId}_THEMENAME")); + currentLoc.AddLocKey($"IDS_dlcskin{skinId}_THEMENAME", textThemeName.Text); + } + skin.properties.Add(("ANIM", anim.ToString())); + skin.properties.Add(("GAME_FLAGS", "0x18")); + skin.properties.Add(("FREE", "1")); + + if (HasCape) { try { cape.filepath = $"dlccape{skinId}.png"; - skin.properties.Add(new ValueTuple("CAPEPATH", cape.filepath)); + skin.properties.Add(("CAPEPATH", cape.filepath)); } catch (Exception) { - MessageBox.Show("Cape Could Not be Added"); + MessageBox.Show("Cape could not be added."); } } - string skinDisplayNameLocKey = $"IDS_dlcskin{skinId}_DISPLAYNAME"; - currentLoc.AddLocKey(skinDisplayNameLocKey, textSkinName.Text); - skin.properties.Add(new ValueTuple("DISPLAYNAME", textSkinName.Text)); - skin.properties.Add(new ValueTuple("DISPLAYNAMEID", skinDisplayNameLocKey)); using (var stream = new MemoryStream()) { skinPictureBoxTexture.Image.Save(stream, ImageFormat.Png); skin.SetData(stream.ToArray()); } - skin.properties.Add(new ValueTuple("ANIM", anim.ToString())); - if (generatedModel != null) - { - foreach (var item in generatedModel) - { - skin.properties.Add(item); - } + //if (generatedModel != null) + //{ + // foreach (var item in generatedModel) + // { + // skin.properties.Add(item); + // } - generatedModel.Clear(); - } + // generatedModel.Clear(); + //} - if (!string.IsNullOrEmpty(textThemeName.Text)) - { - skin.properties.Add(new ValueTuple("THEMENAME", textThemeName.Text)); - currentLoc.AddLocKey($"IDS_dlcskin{skinId}_THEMENAME", textThemeName.Text); - } - skin.properties.Add(new ValueTuple("GAME_FLAGS", "0x18")); - skin.properties.Add(new ValueTuple("FREE", "1")); - skin.filepath = "dlcskin" + skinId + ".png"; DialogResult = DialogResult.OK; Close(); } @@ -281,8 +273,6 @@ namespace PckStudio { bool validSkinId = int.TryParse(textSkinID.Text, out _); textSkinID.ForeColor = validSkinId ? Color.Green : Color.Red; - if (radioLOCAL.Checked && validSkinId) - localID = textSkinID.Text; } private void CreateCustomModel_Click(object sender, EventArgs e) @@ -303,14 +293,8 @@ namespace PckStudio { using (FileStream stream = File.OpenRead(Application.StartupPath + "\\temp.png")) { - skinPictureBoxTexture.SizeMode = PictureBoxSizeMode.StretchImage; - skinPictureBoxTexture.InterpolationMode = InterpolationMode.NearestNeighbor; skinPictureBoxTexture.Image = Image.FromStream(stream); - stream.Close(); - stream.Dispose(); - File.Delete(Application.StartupPath + "\\temp.png"); } - skinPictureBoxTexture.Width = skinPictureBoxTexture.Height; buttonDone.Enabled = true; labelSelectTexture.Visible = false; if (skinType != eSkinType._64x64 && skinType != eSkinType._64x64HD) @@ -346,29 +330,33 @@ namespace PckStudio private void radioLOCAL_CheckedChanged(object sender, EventArgs e) { - if (radioLOCAL.Checked) - { - textSkinID.Text = localID; - textSkinID.Enabled = true; - } + textSkinID.Enabled = radioLOCAL.Checked; } private void pictureBox1_Click(object sender, EventArgs e) { using (var ofdd = new OpenFileDialog()) { - ofdd.Filter = "PNG Files | *.png"; - ofdd.Title = "Select a PNG File"; + ofdd.Filter = "PNG Files | *.png | 3DS Texture|*.3dst"; + ofdd.Title = "Select a Skin Texture File"; if (ofdd.ShowDialog() == DialogResult.OK) { - checkImage(Image.FromFile(ofdd.FileName)); + if (ofdd.FileName.EndsWith(".3dst")) + { + using (var fs = File.OpenRead(ofdd.FileName)) + { + CheckImage(_3DSUtil.GetImageFrom3DST(fs)); + textSkinName.Text = Path.GetFileNameWithoutExtension(ofdd.FileName); + } + return; + } + CheckImage(Image.FromFile(ofdd.FileName)); } } } private void radioSERVER_CheckedChanged(object sender, EventArgs e) { - if (radioSERVER.Checked) { } @@ -380,9 +368,8 @@ namespace PckStudio if (diag.ShowDialog(this) == DialogResult.OK && diag.saved) { anim = new SkinANIM(diag.outANIM); - drawModel(); + DrawModel(); } } } -} - +} \ No newline at end of file diff --git a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.resx b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.resx index b8f6fba7..3e61805d 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.resx +++ b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.resx @@ -117,14 +117,114 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + False + + + + True + + + + NoControl + + + 215, 129 + + + 71, 13 + + + 106 + + + Theme Name + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 18 + + + False + + + True + + + NoControl + + + 215, 97 + + + 59, 13 + + + 104 + + + Skin Name + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 19 + + + False + + + True + + + NoControl + + + 215, 64 + + + 42, 13 + + + 102 + + + Skin ID + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 20 + 102, 78 239, 20 - 32 @@ -191,7 +291,6 @@ False - Flat @@ -340,105 +439,6 @@ 17 - - False - - - True - - - NoControl - - - 215, 129 - - - 71, 13 - - - 106 - - - Theme Name - - - label3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 18 - - - False - - - True - - - NoControl - - - 215, 97 - - - 59, 13 - - - 104 - - - Skin Name - - - label2 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 19 - - - False - - - True - - - NoControl - - - 215, 64 - - - 42, 13 - - - 102 - - - Skin ID - - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 20 - True @@ -787,6 +787,9 @@ 82, 82 + + Zoom + 108 diff --git a/PCK-Studio/MainForm.Designer.cs b/PCK-Studio/MainForm.Designer.cs index 8f5151f8..017c8daf 100644 --- a/PCK-Studio/MainForm.Designer.cs +++ b/PCK-Studio/MainForm.Designer.cs @@ -39,6 +39,7 @@ this.colourscolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.importSkinsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.importSkinToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.importExtractedSkinsFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.addTextureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.setFileTypeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -63,6 +64,7 @@ this.moveDownToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.viewFileInfoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.generateMipMapTextureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.as3DSTextureFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.menuStrip = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -150,6 +152,7 @@ this.contextMenuPCKEntries.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.createToolStripMenuItem, this.importSkinsToolStripMenuItem, + this.exportToolStripMenuItem, this.setFileTypeToolStripMenuItem, this.extractToolStripMenuItem, this.cloneFileToolStripMenuItem, @@ -160,12 +163,12 @@ this.moveDownToolStripMenuItem, this.viewFileInfoToolStripMenuItem, this.generateMipMapTextureToolStripMenuItem}); - this.contextMenuPCKEntries.Name = "contextMenuStrip1"; - resources.ApplyResources(this.contextMenuPCKEntries, "contextMenuPCKEntries"); - // - // createToolStripMenuItem - // - this.createToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.contextMenuPCKEntries.Name = "contextMenuStrip1"; + resources.ApplyResources(this.contextMenuPCKEntries, "contextMenuPCKEntries"); + // + // createToolStripMenuItem + // + this.createToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.folderToolStripMenuItem, this.skinToolStripMenuItem, this.createAnimatedTextureToolStripMenuItem, @@ -210,30 +213,44 @@ this.importSkinToolStripMenuItem, this.importExtractedSkinsFolderToolStripMenuItem, this.addTextureToolStripMenuItem}); - resources.ApplyResources(this.importSkinsToolStripMenuItem, "importSkinsToolStripMenuItem"); - this.importSkinsToolStripMenuItem.Name = "importSkinsToolStripMenuItem"; - // - // importSkinToolStripMenuItem - // - resources.ApplyResources(this.importSkinToolStripMenuItem, "importSkinToolStripMenuItem"); - this.importSkinToolStripMenuItem.Name = "importSkinToolStripMenuItem"; - this.importSkinToolStripMenuItem.Click += new System.EventHandler(this.importSkin); - // - // importExtractedSkinsFolderToolStripMenuItem - // - resources.ApplyResources(this.importExtractedSkinsFolderToolStripMenuItem, "importExtractedSkinsFolderToolStripMenuItem"); - this.importExtractedSkinsFolderToolStripMenuItem.Name = "importExtractedSkinsFolderToolStripMenuItem"; - this.importExtractedSkinsFolderToolStripMenuItem.Click += new System.EventHandler(this.importExtractedSkinsFolder); - // - // addTextureToolStripMenuItem - // - this.addTextureToolStripMenuItem.Name = "addTextureToolStripMenuItem"; - resources.ApplyResources(this.addTextureToolStripMenuItem, "addTextureToolStripMenuItem"); - this.addTextureToolStripMenuItem.Click += new System.EventHandler(this.addTextureToolStripMenuItem_Click); - // - // setFileTypeToolStripMenuItem - // - this.setFileTypeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + resources.ApplyResources(this.importSkinsToolStripMenuItem, "importSkinsToolStripMenuItem"); + this.importSkinsToolStripMenuItem.Name = "importSkinsToolStripMenuItem"; + // + // importSkinToolStripMenuItem + // + resources.ApplyResources(this.importSkinToolStripMenuItem, "importSkinToolStripMenuItem"); + this.importSkinToolStripMenuItem.Name = "importSkinToolStripMenuItem"; + this.importSkinToolStripMenuItem.Click += new System.EventHandler(this.importSkin); + // + // importExtractedSkinsFolderToolStripMenuItem + // + resources.ApplyResources(this.importExtractedSkinsFolderToolStripMenuItem, "importExtractedSkinsFolderToolStripMenuItem"); + this.importExtractedSkinsFolderToolStripMenuItem.Name = "importExtractedSkinsFolderToolStripMenuItem"; + this.importExtractedSkinsFolderToolStripMenuItem.Click += new System.EventHandler(this.importExtractedSkinsFolder); + // + // addTextureToolStripMenuItem + // + this.addTextureToolStripMenuItem.Image = global::PckStudio.Properties.Resources.AddTexture; + this.addTextureToolStripMenuItem.Name = "addTextureToolStripMenuItem"; + resources.ApplyResources(this.addTextureToolStripMenuItem, "addTextureToolStripMenuItem"); + this.addTextureToolStripMenuItem.Click += new System.EventHandler(this.addTextureToolStripMenuItem_Click); + // + // exportToolStripMenuItem + // + this.exportToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.as3DSTextureFileToolStripMenuItem}); + this.exportToolStripMenuItem.Name = "exportToolStripMenuItem"; + resources.ApplyResources(this.exportToolStripMenuItem, "exportToolStripMenuItem"); + // + // as3DSTextureFileToolStripMenuItem + // + this.as3DSTextureFileToolStripMenuItem.Name = "as3DSTextureFileToolStripMenuItem"; + resources.ApplyResources(this.as3DSTextureFileToolStripMenuItem, "as3DSTextureFileToolStripMenuItem"); + this.as3DSTextureFileToolStripMenuItem.Click += new System.EventHandler(this.as3DSTextureFileToolStripMenuItem_Click); + // + // setFileTypeToolStripMenuItem + // + this.setFileTypeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.skinToolStripMenuItem1, this.capeToolStripMenuItem, this.textureToolStripMenuItem, @@ -372,12 +389,12 @@ this.editToolStripMenuItem, this.helpToolStripMenuItem, this.storeToolStripMenuItem}); - this.menuStrip.Name = "menuStrip"; - // - // fileToolStripMenuItem - // - this.fileToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(13)))), ((int)(((byte)(13)))), ((int)(((byte)(13))))); - this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuStrip.Name = "menuStrip"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(13)))), ((int)(((byte)(13)))), ((int)(((byte)(13))))); + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.newToolStripMenuItem, this.openToolStripMenuItem, this.extractToolStripMenuItem1, @@ -387,109 +404,109 @@ this.metaToolStripMenuItem, this.convertPCTextrurePackToolStripMenuItem, this.closeToolStripMenuItem}); - this.fileToolStripMenuItem.ForeColor = System.Drawing.Color.White; - this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; - resources.ApplyResources(this.fileToolStripMenuItem, "fileToolStripMenuItem"); - // - // newToolStripMenuItem - // - this.newToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + resources.ApplyResources(this.fileToolStripMenuItem, "fileToolStripMenuItem"); + // + // newToolStripMenuItem + // + this.newToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.skinPackToolStripMenuItem, this.texturePackToolStripMenuItem, this.mashUpPackToolStripMenuItem}); - resources.ApplyResources(this.newToolStripMenuItem, "newToolStripMenuItem"); - this.newToolStripMenuItem.Name = "newToolStripMenuItem"; - // - // skinPackToolStripMenuItem - // - this.skinPackToolStripMenuItem.Name = "skinPackToolStripMenuItem"; - resources.ApplyResources(this.skinPackToolStripMenuItem, "skinPackToolStripMenuItem"); - this.skinPackToolStripMenuItem.Click += new System.EventHandler(this.skinPackToolStripMenuItem_Click); - // - // texturePackToolStripMenuItem - // - this.texturePackToolStripMenuItem.Name = "texturePackToolStripMenuItem"; - resources.ApplyResources(this.texturePackToolStripMenuItem, "texturePackToolStripMenuItem"); - this.texturePackToolStripMenuItem.Click += new System.EventHandler(this.texturePackToolStripMenuItem_Click); - // - // mashUpPackToolStripMenuItem - // - this.mashUpPackToolStripMenuItem.Name = "mashUpPackToolStripMenuItem"; - resources.ApplyResources(this.mashUpPackToolStripMenuItem, "mashUpPackToolStripMenuItem"); - this.mashUpPackToolStripMenuItem.Click += new System.EventHandler(this.mashUpPackToolStripMenuItem_Click); - // - // openToolStripMenuItem - // - resources.ApplyResources(this.openToolStripMenuItem, "openToolStripMenuItem"); - this.openToolStripMenuItem.Name = "openToolStripMenuItem"; - this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click); - // - // extractToolStripMenuItem1 - // - resources.ApplyResources(this.extractToolStripMenuItem1, "extractToolStripMenuItem1"); - this.extractToolStripMenuItem1.Name = "extractToolStripMenuItem1"; - this.extractToolStripMenuItem1.Click += new System.EventHandler(this.extractToolStripMenuItem1_Click); - // - // saveToolStripMenuItem1 - // - resources.ApplyResources(this.saveToolStripMenuItem1, "saveToolStripMenuItem1"); - this.saveToolStripMenuItem1.Name = "saveToolStripMenuItem1"; - this.saveToolStripMenuItem1.Click += new System.EventHandler(this.savePCK); - // - // saveToolStripMenuItem - // - resources.ApplyResources(this.saveToolStripMenuItem, "saveToolStripMenuItem"); - this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; - this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveAsPCK); - // - // addPasswordToolStripMenuItem - // - resources.ApplyResources(this.addPasswordToolStripMenuItem, "addPasswordToolStripMenuItem"); - this.addPasswordToolStripMenuItem.Name = "addPasswordToolStripMenuItem"; - this.addPasswordToolStripMenuItem.Click += new System.EventHandler(this.addPasswordToolStripMenuItem_Click); - // - // metaToolStripMenuItem - // - resources.ApplyResources(this.metaToolStripMenuItem, "metaToolStripMenuItem"); - this.metaToolStripMenuItem.Name = "metaToolStripMenuItem"; - this.metaToolStripMenuItem.Click += new System.EventHandler(this.metaToolStripMenuItem_Click); - // - // convertPCTextrurePackToolStripMenuItem - // - this.convertPCTextrurePackToolStripMenuItem.Name = "convertPCTextrurePackToolStripMenuItem"; - resources.ApplyResources(this.convertPCTextrurePackToolStripMenuItem, "convertPCTextrurePackToolStripMenuItem"); - this.convertPCTextrurePackToolStripMenuItem.Click += new System.EventHandler(this.convertPCTextrurePackToolStripMenuItem_Click); - // - // closeToolStripMenuItem - // - this.closeToolStripMenuItem.Name = "closeToolStripMenuItem"; - resources.ApplyResources(this.closeToolStripMenuItem, "closeToolStripMenuItem"); - this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click); - // - // editToolStripMenuItem - // - this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + resources.ApplyResources(this.newToolStripMenuItem, "newToolStripMenuItem"); + this.newToolStripMenuItem.Name = "newToolStripMenuItem"; + // + // skinPackToolStripMenuItem + // + this.skinPackToolStripMenuItem.Name = "skinPackToolStripMenuItem"; + resources.ApplyResources(this.skinPackToolStripMenuItem, "skinPackToolStripMenuItem"); + this.skinPackToolStripMenuItem.Click += new System.EventHandler(this.skinPackToolStripMenuItem_Click); + // + // texturePackToolStripMenuItem + // + this.texturePackToolStripMenuItem.Name = "texturePackToolStripMenuItem"; + resources.ApplyResources(this.texturePackToolStripMenuItem, "texturePackToolStripMenuItem"); + this.texturePackToolStripMenuItem.Click += new System.EventHandler(this.texturePackToolStripMenuItem_Click); + // + // mashUpPackToolStripMenuItem + // + this.mashUpPackToolStripMenuItem.Name = "mashUpPackToolStripMenuItem"; + resources.ApplyResources(this.mashUpPackToolStripMenuItem, "mashUpPackToolStripMenuItem"); + this.mashUpPackToolStripMenuItem.Click += new System.EventHandler(this.mashUpPackToolStripMenuItem_Click); + // + // openToolStripMenuItem + // + resources.ApplyResources(this.openToolStripMenuItem, "openToolStripMenuItem"); + this.openToolStripMenuItem.Name = "openToolStripMenuItem"; + this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click); + // + // extractToolStripMenuItem1 + // + resources.ApplyResources(this.extractToolStripMenuItem1, "extractToolStripMenuItem1"); + this.extractToolStripMenuItem1.Name = "extractToolStripMenuItem1"; + this.extractToolStripMenuItem1.Click += new System.EventHandler(this.extractToolStripMenuItem1_Click); + // + // saveToolStripMenuItem1 + // + resources.ApplyResources(this.saveToolStripMenuItem1, "saveToolStripMenuItem1"); + this.saveToolStripMenuItem1.Name = "saveToolStripMenuItem1"; + this.saveToolStripMenuItem1.Click += new System.EventHandler(this.savePCK); + // + // saveToolStripMenuItem + // + resources.ApplyResources(this.saveToolStripMenuItem, "saveToolStripMenuItem"); + this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; + this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveAsPCK); + // + // addPasswordToolStripMenuItem + // + resources.ApplyResources(this.addPasswordToolStripMenuItem, "addPasswordToolStripMenuItem"); + this.addPasswordToolStripMenuItem.Name = "addPasswordToolStripMenuItem"; + this.addPasswordToolStripMenuItem.Click += new System.EventHandler(this.addPasswordToolStripMenuItem_Click); + // + // metaToolStripMenuItem + // + resources.ApplyResources(this.metaToolStripMenuItem, "metaToolStripMenuItem"); + this.metaToolStripMenuItem.Name = "metaToolStripMenuItem"; + this.metaToolStripMenuItem.Click += new System.EventHandler(this.metaToolStripMenuItem_Click); + // + // convertPCTextrurePackToolStripMenuItem + // + this.convertPCTextrurePackToolStripMenuItem.Name = "convertPCTextrurePackToolStripMenuItem"; + resources.ApplyResources(this.convertPCTextrurePackToolStripMenuItem, "convertPCTextrurePackToolStripMenuItem"); + this.convertPCTextrurePackToolStripMenuItem.Click += new System.EventHandler(this.convertPCTextrurePackToolStripMenuItem_Click); + // + // closeToolStripMenuItem + // + this.closeToolStripMenuItem.Name = "closeToolStripMenuItem"; + resources.ApplyResources(this.closeToolStripMenuItem, "closeToolStripMenuItem"); + this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click); + // + // editToolStripMenuItem + // + this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.advancedMetaAddingToolStripMenuItem, this.convertToBedrockToolStripMenuItem}); - this.editToolStripMenuItem.ForeColor = System.Drawing.Color.White; - this.editToolStripMenuItem.Name = "editToolStripMenuItem"; - resources.ApplyResources(this.editToolStripMenuItem, "editToolStripMenuItem"); - // - // advancedMetaAddingToolStripMenuItem - // - resources.ApplyResources(this.advancedMetaAddingToolStripMenuItem, "advancedMetaAddingToolStripMenuItem"); - this.advancedMetaAddingToolStripMenuItem.Name = "advancedMetaAddingToolStripMenuItem"; - this.advancedMetaAddingToolStripMenuItem.Click += new System.EventHandler(this.advancedMetaAddingToolStripMenuItem_Click); - // - // convertToBedrockToolStripMenuItem - // - resources.ApplyResources(this.convertToBedrockToolStripMenuItem, "convertToBedrockToolStripMenuItem"); - this.convertToBedrockToolStripMenuItem.Name = "convertToBedrockToolStripMenuItem"; - this.convertToBedrockToolStripMenuItem.Click += new System.EventHandler(this.convertToBedrockToolStripMenuItem_Click); - // - // helpToolStripMenuItem - // - this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.editToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.editToolStripMenuItem.Name = "editToolStripMenuItem"; + resources.ApplyResources(this.editToolStripMenuItem, "editToolStripMenuItem"); + // + // advancedMetaAddingToolStripMenuItem + // + resources.ApplyResources(this.advancedMetaAddingToolStripMenuItem, "advancedMetaAddingToolStripMenuItem"); + this.advancedMetaAddingToolStripMenuItem.Name = "advancedMetaAddingToolStripMenuItem"; + this.advancedMetaAddingToolStripMenuItem.Click += new System.EventHandler(this.advancedMetaAddingToolStripMenuItem_Click); + // + // convertToBedrockToolStripMenuItem + // + resources.ApplyResources(this.convertToBedrockToolStripMenuItem, "convertToBedrockToolStripMenuItem"); + this.convertToBedrockToolStripMenuItem.Name = "convertToBedrockToolStripMenuItem"; + this.convertToBedrockToolStripMenuItem.Click += new System.EventHandler(this.convertToBedrockToolStripMenuItem_Click); + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.programInfoToolStripMenuItem, this.binkaConversionToolStripMenuItem, this.videosToolStripMenuItem, @@ -498,25 +515,25 @@ this.donateToolStripMenuItem, this.settingsToolStripMenuItem, this.administrativeToolsToolStripMenuItem}); - this.helpToolStripMenuItem.ForeColor = System.Drawing.Color.White; - this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; - resources.ApplyResources(this.helpToolStripMenuItem, "helpToolStripMenuItem"); - // - // programInfoToolStripMenuItem - // - resources.ApplyResources(this.programInfoToolStripMenuItem, "programInfoToolStripMenuItem"); - this.programInfoToolStripMenuItem.Name = "programInfoToolStripMenuItem"; - this.programInfoToolStripMenuItem.Click += new System.EventHandler(this.programInfoToolStripMenuItem_Click); - // - // binkaConversionToolStripMenuItem - // - resources.ApplyResources(this.binkaConversionToolStripMenuItem, "binkaConversionToolStripMenuItem"); - this.binkaConversionToolStripMenuItem.Name = "binkaConversionToolStripMenuItem"; - this.binkaConversionToolStripMenuItem.Click += new System.EventHandler(this.binkaConversionToolStripMenuItem_Click); - // - // videosToolStripMenuItem - // - this.videosToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.helpToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + resources.ApplyResources(this.helpToolStripMenuItem, "helpToolStripMenuItem"); + // + // programInfoToolStripMenuItem + // + resources.ApplyResources(this.programInfoToolStripMenuItem, "programInfoToolStripMenuItem"); + this.programInfoToolStripMenuItem.Name = "programInfoToolStripMenuItem"; + this.programInfoToolStripMenuItem.Click += new System.EventHandler(this.programInfoToolStripMenuItem_Click); + // + // binkaConversionToolStripMenuItem + // + resources.ApplyResources(this.binkaConversionToolStripMenuItem, "binkaConversionToolStripMenuItem"); + this.binkaConversionToolStripMenuItem.Name = "binkaConversionToolStripMenuItem"; + this.binkaConversionToolStripMenuItem.Click += new System.EventHandler(this.binkaConversionToolStripMenuItem_Click); + // + // videosToolStripMenuItem + // + this.videosToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.howToMakeABasicSkinPackToolStripMenuItem, this.howToMakeACustomSkinModelToolStripMenuItem, this.howToMakeCustomSkinModelsbedrockToolStripMenuItem, @@ -524,147 +541,147 @@ this.howToInstallPcksDirectlyToWiiUToolStripMenuItem, this.pCKCenterReleaseToolStripMenuItem, this.howPCKsWorkToolStripMenuItem}); - this.videosToolStripMenuItem.ForeColor = System.Drawing.Color.Black; - resources.ApplyResources(this.videosToolStripMenuItem, "videosToolStripMenuItem"); - this.videosToolStripMenuItem.Name = "videosToolStripMenuItem"; - // - // howToMakeABasicSkinPackToolStripMenuItem - // - resources.ApplyResources(this.howToMakeABasicSkinPackToolStripMenuItem, "howToMakeABasicSkinPackToolStripMenuItem"); - this.howToMakeABasicSkinPackToolStripMenuItem.Name = "howToMakeABasicSkinPackToolStripMenuItem"; - this.howToMakeABasicSkinPackToolStripMenuItem.Click += new System.EventHandler(this.howToMakeABasicSkinPackToolStripMenuItem_Click); - // - // howToMakeACustomSkinModelToolStripMenuItem - // - resources.ApplyResources(this.howToMakeACustomSkinModelToolStripMenuItem, "howToMakeACustomSkinModelToolStripMenuItem"); - this.howToMakeACustomSkinModelToolStripMenuItem.Name = "howToMakeACustomSkinModelToolStripMenuItem"; - this.howToMakeACustomSkinModelToolStripMenuItem.Click += new System.EventHandler(this.howToMakeACustomSkinModelToolStripMenuItem_Click); - // - // howToMakeCustomSkinModelsbedrockToolStripMenuItem - // - resources.ApplyResources(this.howToMakeCustomSkinModelsbedrockToolStripMenuItem, "howToMakeCustomSkinModelsbedrockToolStripMenuItem"); - this.howToMakeCustomSkinModelsbedrockToolStripMenuItem.Name = "howToMakeCustomSkinModelsbedrockToolStripMenuItem"; - this.howToMakeCustomSkinModelsbedrockToolStripMenuItem.Click += new System.EventHandler(this.howToMakeCustomSkinModelsbedrockToolStripMenuItem_Click); - // - // howToMakeCustomMusicToolStripMenuItem - // - resources.ApplyResources(this.howToMakeCustomMusicToolStripMenuItem, "howToMakeCustomMusicToolStripMenuItem"); - this.howToMakeCustomMusicToolStripMenuItem.Name = "howToMakeCustomMusicToolStripMenuItem"; - this.howToMakeCustomMusicToolStripMenuItem.Click += new System.EventHandler(this.howToMakeCustomMusicToolStripMenuItem_Click); - // - // howToInstallPcksDirectlyToWiiUToolStripMenuItem - // - resources.ApplyResources(this.howToInstallPcksDirectlyToWiiUToolStripMenuItem, "howToInstallPcksDirectlyToWiiUToolStripMenuItem"); - this.howToInstallPcksDirectlyToWiiUToolStripMenuItem.Name = "howToInstallPcksDirectlyToWiiUToolStripMenuItem"; - this.howToInstallPcksDirectlyToWiiUToolStripMenuItem.Click += new System.EventHandler(this.howToInstallPcksDirectlyToWiiUToolStripMenuItem_Click); - // - // pCKCenterReleaseToolStripMenuItem - // - resources.ApplyResources(this.pCKCenterReleaseToolStripMenuItem, "pCKCenterReleaseToolStripMenuItem"); - this.pCKCenterReleaseToolStripMenuItem.Name = "pCKCenterReleaseToolStripMenuItem"; - this.pCKCenterReleaseToolStripMenuItem.Click += new System.EventHandler(this.pCKCenterReleaseToolStripMenuItem_Click); - // - // howPCKsWorkToolStripMenuItem - // - resources.ApplyResources(this.howPCKsWorkToolStripMenuItem, "howPCKsWorkToolStripMenuItem"); - this.howPCKsWorkToolStripMenuItem.Name = "howPCKsWorkToolStripMenuItem"; - this.howPCKsWorkToolStripMenuItem.Click += new System.EventHandler(this.howPCKsWorkToolStripMenuItem_Click); - // - // installationToolStripMenuItem - // - resources.ApplyResources(this.installationToolStripMenuItem, "installationToolStripMenuItem"); - this.installationToolStripMenuItem.Name = "installationToolStripMenuItem"; - // - // fAQToolStripMenuItem1 - // - resources.ApplyResources(this.fAQToolStripMenuItem1, "fAQToolStripMenuItem1"); - this.fAQToolStripMenuItem1.Name = "fAQToolStripMenuItem1"; - this.fAQToolStripMenuItem1.Click += new System.EventHandler(this.fAQToolStripMenuItem1_Click); - // - // donateToolStripMenuItem - // - this.donateToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.videosToolStripMenuItem.ForeColor = System.Drawing.Color.Black; + resources.ApplyResources(this.videosToolStripMenuItem, "videosToolStripMenuItem"); + this.videosToolStripMenuItem.Name = "videosToolStripMenuItem"; + // + // howToMakeABasicSkinPackToolStripMenuItem + // + resources.ApplyResources(this.howToMakeABasicSkinPackToolStripMenuItem, "howToMakeABasicSkinPackToolStripMenuItem"); + this.howToMakeABasicSkinPackToolStripMenuItem.Name = "howToMakeABasicSkinPackToolStripMenuItem"; + this.howToMakeABasicSkinPackToolStripMenuItem.Click += new System.EventHandler(this.howToMakeABasicSkinPackToolStripMenuItem_Click); + // + // howToMakeACustomSkinModelToolStripMenuItem + // + resources.ApplyResources(this.howToMakeACustomSkinModelToolStripMenuItem, "howToMakeACustomSkinModelToolStripMenuItem"); + this.howToMakeACustomSkinModelToolStripMenuItem.Name = "howToMakeACustomSkinModelToolStripMenuItem"; + this.howToMakeACustomSkinModelToolStripMenuItem.Click += new System.EventHandler(this.howToMakeACustomSkinModelToolStripMenuItem_Click); + // + // howToMakeCustomSkinModelsbedrockToolStripMenuItem + // + resources.ApplyResources(this.howToMakeCustomSkinModelsbedrockToolStripMenuItem, "howToMakeCustomSkinModelsbedrockToolStripMenuItem"); + this.howToMakeCustomSkinModelsbedrockToolStripMenuItem.Name = "howToMakeCustomSkinModelsbedrockToolStripMenuItem"; + this.howToMakeCustomSkinModelsbedrockToolStripMenuItem.Click += new System.EventHandler(this.howToMakeCustomSkinModelsbedrockToolStripMenuItem_Click); + // + // howToMakeCustomMusicToolStripMenuItem + // + resources.ApplyResources(this.howToMakeCustomMusicToolStripMenuItem, "howToMakeCustomMusicToolStripMenuItem"); + this.howToMakeCustomMusicToolStripMenuItem.Name = "howToMakeCustomMusicToolStripMenuItem"; + this.howToMakeCustomMusicToolStripMenuItem.Click += new System.EventHandler(this.howToMakeCustomMusicToolStripMenuItem_Click); + // + // howToInstallPcksDirectlyToWiiUToolStripMenuItem + // + resources.ApplyResources(this.howToInstallPcksDirectlyToWiiUToolStripMenuItem, "howToInstallPcksDirectlyToWiiUToolStripMenuItem"); + this.howToInstallPcksDirectlyToWiiUToolStripMenuItem.Name = "howToInstallPcksDirectlyToWiiUToolStripMenuItem"; + this.howToInstallPcksDirectlyToWiiUToolStripMenuItem.Click += new System.EventHandler(this.howToInstallPcksDirectlyToWiiUToolStripMenuItem_Click); + // + // pCKCenterReleaseToolStripMenuItem + // + resources.ApplyResources(this.pCKCenterReleaseToolStripMenuItem, "pCKCenterReleaseToolStripMenuItem"); + this.pCKCenterReleaseToolStripMenuItem.Name = "pCKCenterReleaseToolStripMenuItem"; + this.pCKCenterReleaseToolStripMenuItem.Click += new System.EventHandler(this.pCKCenterReleaseToolStripMenuItem_Click); + // + // howPCKsWorkToolStripMenuItem + // + resources.ApplyResources(this.howPCKsWorkToolStripMenuItem, "howPCKsWorkToolStripMenuItem"); + this.howPCKsWorkToolStripMenuItem.Name = "howPCKsWorkToolStripMenuItem"; + this.howPCKsWorkToolStripMenuItem.Click += new System.EventHandler(this.howPCKsWorkToolStripMenuItem_Click); + // + // installationToolStripMenuItem + // + resources.ApplyResources(this.installationToolStripMenuItem, "installationToolStripMenuItem"); + this.installationToolStripMenuItem.Name = "installationToolStripMenuItem"; + // + // fAQToolStripMenuItem1 + // + resources.ApplyResources(this.fAQToolStripMenuItem1, "fAQToolStripMenuItem1"); + this.fAQToolStripMenuItem1.Name = "fAQToolStripMenuItem1"; + this.fAQToolStripMenuItem1.Click += new System.EventHandler(this.fAQToolStripMenuItem1_Click); + // + // donateToolStripMenuItem + // + this.donateToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toNobledezJackToolStripMenuItem, this.toPhoenixARCDeveloperToolStripMenuItem, this.forMattNLContributorToolStripMenuItem}); - this.donateToolStripMenuItem.Name = "donateToolStripMenuItem"; - resources.ApplyResources(this.donateToolStripMenuItem, "donateToolStripMenuItem"); - // - // toNobledezJackToolStripMenuItem - // - this.toNobledezJackToolStripMenuItem.Name = "toNobledezJackToolStripMenuItem"; - resources.ApplyResources(this.toNobledezJackToolStripMenuItem, "toNobledezJackToolStripMenuItem"); - this.toNobledezJackToolStripMenuItem.Click += new System.EventHandler(this.toNobledezJackToolStripMenuItem_Click); - // - // toPhoenixARCDeveloperToolStripMenuItem - // - this.toPhoenixARCDeveloperToolStripMenuItem.Name = "toPhoenixARCDeveloperToolStripMenuItem"; - resources.ApplyResources(this.toPhoenixARCDeveloperToolStripMenuItem, "toPhoenixARCDeveloperToolStripMenuItem"); - this.toPhoenixARCDeveloperToolStripMenuItem.Click += new System.EventHandler(this.toPhoenixARCDeveloperToolStripMenuItem_Click); - // - // forMattNLContributorToolStripMenuItem - // - this.forMattNLContributorToolStripMenuItem.Name = "forMattNLContributorToolStripMenuItem"; - resources.ApplyResources(this.forMattNLContributorToolStripMenuItem, "forMattNLContributorToolStripMenuItem"); - this.forMattNLContributorToolStripMenuItem.Click += new System.EventHandler(this.forMattNLContributorToolStripMenuItem_Click); - // - // settingsToolStripMenuItem - // - this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem"; - resources.ApplyResources(this.settingsToolStripMenuItem, "settingsToolStripMenuItem"); - this.settingsToolStripMenuItem.Click += new System.EventHandler(this.settingsToolStripMenuItem_Click); - // - // administrativeToolsToolStripMenuItem - // - resources.ApplyResources(this.administrativeToolsToolStripMenuItem, "administrativeToolsToolStripMenuItem"); - this.administrativeToolsToolStripMenuItem.Name = "administrativeToolsToolStripMenuItem"; - this.administrativeToolsToolStripMenuItem.Click += new System.EventHandler(this.administrativeToolsToolStripMenuItem_Click); - // - // storeToolStripMenuItem - // - this.storeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.donateToolStripMenuItem.Name = "donateToolStripMenuItem"; + resources.ApplyResources(this.donateToolStripMenuItem, "donateToolStripMenuItem"); + // + // toNobledezJackToolStripMenuItem + // + this.toNobledezJackToolStripMenuItem.Name = "toNobledezJackToolStripMenuItem"; + resources.ApplyResources(this.toNobledezJackToolStripMenuItem, "toNobledezJackToolStripMenuItem"); + this.toNobledezJackToolStripMenuItem.Click += new System.EventHandler(this.toNobledezJackToolStripMenuItem_Click); + // + // toPhoenixARCDeveloperToolStripMenuItem + // + this.toPhoenixARCDeveloperToolStripMenuItem.Name = "toPhoenixARCDeveloperToolStripMenuItem"; + resources.ApplyResources(this.toPhoenixARCDeveloperToolStripMenuItem, "toPhoenixARCDeveloperToolStripMenuItem"); + this.toPhoenixARCDeveloperToolStripMenuItem.Click += new System.EventHandler(this.toPhoenixARCDeveloperToolStripMenuItem_Click); + // + // forMattNLContributorToolStripMenuItem + // + this.forMattNLContributorToolStripMenuItem.Name = "forMattNLContributorToolStripMenuItem"; + resources.ApplyResources(this.forMattNLContributorToolStripMenuItem, "forMattNLContributorToolStripMenuItem"); + this.forMattNLContributorToolStripMenuItem.Click += new System.EventHandler(this.forMattNLContributorToolStripMenuItem_Click); + // + // settingsToolStripMenuItem + // + this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem"; + resources.ApplyResources(this.settingsToolStripMenuItem, "settingsToolStripMenuItem"); + this.settingsToolStripMenuItem.Click += new System.EventHandler(this.settingsToolStripMenuItem_Click); + // + // administrativeToolsToolStripMenuItem + // + resources.ApplyResources(this.administrativeToolsToolStripMenuItem, "administrativeToolsToolStripMenuItem"); + this.administrativeToolsToolStripMenuItem.Name = "administrativeToolsToolStripMenuItem"; + this.administrativeToolsToolStripMenuItem.Click += new System.EventHandler(this.administrativeToolsToolStripMenuItem_Click); + // + // storeToolStripMenuItem + // + this.storeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.openToolStripMenuItem1, this.wiiUPCKInstallerToolStripMenuItem, this.PS3PCKInstallerToolStripMenuItem, this.VitaPCKInstallerToolStripMenuItem, this.joinDevelopmentDiscordToolStripMenuItem}); - this.storeToolStripMenuItem.ForeColor = System.Drawing.Color.White; - resources.ApplyResources(this.storeToolStripMenuItem, "storeToolStripMenuItem"); - this.storeToolStripMenuItem.Name = "storeToolStripMenuItem"; - // - // openToolStripMenuItem1 - // - resources.ApplyResources(this.openToolStripMenuItem1, "openToolStripMenuItem1"); - this.openToolStripMenuItem1.Name = "openToolStripMenuItem1"; - this.openToolStripMenuItem1.Click += new System.EventHandler(this.openToolStripMenuItem1_Click); - // - // wiiUPCKInstallerToolStripMenuItem - // - resources.ApplyResources(this.wiiUPCKInstallerToolStripMenuItem, "wiiUPCKInstallerToolStripMenuItem"); - this.wiiUPCKInstallerToolStripMenuItem.Name = "wiiUPCKInstallerToolStripMenuItem"; - this.wiiUPCKInstallerToolStripMenuItem.Click += new System.EventHandler(this.wiiUPCKInstallerToolStripMenuItem_Click); - // - // PS3PCKInstallerToolStripMenuItem - // - resources.ApplyResources(this.PS3PCKInstallerToolStripMenuItem, "PS3PCKInstallerToolStripMenuItem"); - this.PS3PCKInstallerToolStripMenuItem.Name = "PS3PCKInstallerToolStripMenuItem"; - this.PS3PCKInstallerToolStripMenuItem.Click += new System.EventHandler(this.PS3PCKInstallerToolStripMenuItem_Click); - // - // VitaPCKInstallerToolStripMenuItem - // - resources.ApplyResources(this.VitaPCKInstallerToolStripMenuItem, "VitaPCKInstallerToolStripMenuItem"); - this.VitaPCKInstallerToolStripMenuItem.Name = "VitaPCKInstallerToolStripMenuItem"; - this.VitaPCKInstallerToolStripMenuItem.Click += new System.EventHandler(this.VitaPCKInstallerToolStripMenuItem_Click); - // - // joinDevelopmentDiscordToolStripMenuItem - // - resources.ApplyResources(this.joinDevelopmentDiscordToolStripMenuItem, "joinDevelopmentDiscordToolStripMenuItem"); - this.joinDevelopmentDiscordToolStripMenuItem.Name = "joinDevelopmentDiscordToolStripMenuItem"; - this.joinDevelopmentDiscordToolStripMenuItem.Click += new System.EventHandler(this.joinDevelopmentDiscordToolStripMenuItem_Click); - // - // contextMenuMetaTree - // - this.contextMenuMetaTree.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.storeToolStripMenuItem.ForeColor = System.Drawing.Color.White; + resources.ApplyResources(this.storeToolStripMenuItem, "storeToolStripMenuItem"); + this.storeToolStripMenuItem.Name = "storeToolStripMenuItem"; + // + // openToolStripMenuItem1 + // + resources.ApplyResources(this.openToolStripMenuItem1, "openToolStripMenuItem1"); + this.openToolStripMenuItem1.Name = "openToolStripMenuItem1"; + this.openToolStripMenuItem1.Click += new System.EventHandler(this.openToolStripMenuItem1_Click); + // + // wiiUPCKInstallerToolStripMenuItem + // + resources.ApplyResources(this.wiiUPCKInstallerToolStripMenuItem, "wiiUPCKInstallerToolStripMenuItem"); + this.wiiUPCKInstallerToolStripMenuItem.Name = "wiiUPCKInstallerToolStripMenuItem"; + this.wiiUPCKInstallerToolStripMenuItem.Click += new System.EventHandler(this.wiiUPCKInstallerToolStripMenuItem_Click); + // + // PS3PCKInstallerToolStripMenuItem + // + resources.ApplyResources(this.PS3PCKInstallerToolStripMenuItem, "PS3PCKInstallerToolStripMenuItem"); + this.PS3PCKInstallerToolStripMenuItem.Name = "PS3PCKInstallerToolStripMenuItem"; + this.PS3PCKInstallerToolStripMenuItem.Click += new System.EventHandler(this.PS3PCKInstallerToolStripMenuItem_Click); + // + // VitaPCKInstallerToolStripMenuItem + // + resources.ApplyResources(this.VitaPCKInstallerToolStripMenuItem, "VitaPCKInstallerToolStripMenuItem"); + this.VitaPCKInstallerToolStripMenuItem.Name = "VitaPCKInstallerToolStripMenuItem"; + this.VitaPCKInstallerToolStripMenuItem.Click += new System.EventHandler(this.VitaPCKInstallerToolStripMenuItem_Click); + // + // joinDevelopmentDiscordToolStripMenuItem + // + resources.ApplyResources(this.joinDevelopmentDiscordToolStripMenuItem, "joinDevelopmentDiscordToolStripMenuItem"); + this.joinDevelopmentDiscordToolStripMenuItem.Name = "joinDevelopmentDiscordToolStripMenuItem"; + this.joinDevelopmentDiscordToolStripMenuItem.Click += new System.EventHandler(this.joinDevelopmentDiscordToolStripMenuItem_Click); + // + // contextMenuMetaTree + // + this.contextMenuMetaTree.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.addPresetToolStripMenuItem1, this.addEntryToolStripMenuItem, this.deleteEntryToolStripMenuItem}); @@ -1029,6 +1046,7 @@ private System.Windows.Forms.ToolStripMenuItem extractToolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem importSkinsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem importSkinToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exportToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem importExtractedSkinsFolderToolStripMenuItem; private System.Windows.Forms.PictureBox pictureBox2; private System.Windows.Forms.ToolStripMenuItem createToolStripMenuItem; @@ -1099,6 +1117,7 @@ private System.Windows.Forms.ToolStripMenuItem entityMaterialsFileBINToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem addTextureToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem viewFileInfoToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem as3DSTextureFileToolStripMenuItem; private MetroFramework.Controls.MetroTabPage openTab; private System.Windows.Forms.PictureBox pckOpen; private MetroFramework.Controls.MetroLabel label5; diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 29172e0f..8491d81c 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -8,7 +8,6 @@ using System.Drawing.Drawing2D; using System.Diagnostics; using System.Drawing.Imaging; using RichPresenceClient; -using Ohana3DS_Rebirth.Ohana; using PckStudio.Properties; using PckStudio.Classes.FileTypes; using PckStudio.Classes.IO; @@ -19,6 +18,7 @@ using PckStudio.Forms.Utilities; using PckStudio.Forms.Editor; using PckStudio.Forms.Additional_Popups.Animation; using PckStudio.Classes.IO.PCK; +using PckStudio.Classes.Utils; namespace PckStudio { @@ -83,7 +83,11 @@ namespace PckStudio public void LoadFromPath(string filepath) { currentPCK = openPck(filepath); - if (currentPCK == null) return; + if (currentPCK == null) + { + MessageBox.Show(string.Format("Failed to load {0}", Path.GetFileName(filepath)), "Error"); + return; + } if (addPasswordToolStripMenuItem.Enabled = checkForPassword()) { LoadEditorTab(); @@ -93,7 +97,8 @@ namespace PckStudio private void Form1_Load(object sender, EventArgs e) { RPC.Initialize(); - RPC.SetPresence("An Open Source .PCK File Editor", "Program by PhoenixARC"); + if (currentPCK == null) + RPC.SetPresence("An Open Source .PCK File Editor", "Program by PhoenixARC"); skinToolStripMenuItem1.Click += (sender, e) => setFileType_Click(sender, e, PCKFile.FileData.FileType.SkinFile); capeToolStripMenuItem.Click += (sender, e) => setFileType_Click(sender, e, PCKFile.FileData.FileType.CapeFile); @@ -134,9 +139,9 @@ namespace PckStudio if (ofd.ShowDialog() == DialogResult.OK) { LoadFromPath(ofd.FileName); - } } } + } private PCKFile openPck(string filePath) { @@ -166,7 +171,7 @@ namespace PckStudio if (currentPCK.TryGetFile("0", PCKFile.FileData.FileType.InfoFile, out PCKFile.FileData file)) { if (file.properties.Contains("LOCK")) - return new pckLocked(file.properties.GetProperty("LOCK").Item2).ShowDialog() == DialogResult.OK; + return new pckLocked(file.properties.GetPropertyValue("LOCK")).ShowDialog() == DialogResult.OK; } return true; } @@ -281,7 +286,7 @@ namespace PckStudio //throw new InvalidDataException(nameof(file.filetype)); break; } - setFileIcon(node, file.filetype); + SetPckFileIcon(node, file.filetype); }; } @@ -289,7 +294,7 @@ namespace PckStudio { treeViewMain.Nodes.Clear(); BuildPckTreeView(treeViewMain.Nodes, currentPCK); - } + } bool IsFilePathMipMapped(string filepath) { @@ -647,11 +652,11 @@ namespace PckStudio using (addNewSkin add = new addNewSkin(locFile)) if (add.ShowDialog() == DialogResult.OK) { - if (add.useCape) - currentPCK.Files.Add(add.Cape); + if (add.HasCape) + currentPCK.Files.Add(add.CapeFile); if (!(treeViewMain.SelectedNode.Tag is PCKFile.FileData)) - add.Skin.filepath = $"{treeViewMain.SelectedNode.FullPath}/{add.Skin.filepath}"; - currentPCK.Files.Add(add.Skin); + add.SkinFile.filepath = $"{treeViewMain.SelectedNode.FullPath}/{add.SkinFile.filepath}"; + currentPCK.Files.Add(add.SkinFile); TrySetLocFile(locFile); saved = false; BuildMainTreeView(); @@ -1189,24 +1194,22 @@ namespace PckStudio return; } // creates variable to indicate wether current pck skin structure is mashup or regular skin - bool mashupStructure = false; + bool hasSkinsPck = currentPCK.HasFile("Skins.pck", PCKFile.FileData.FileType.SkinDataFile); foreach (var fullfilename in Directory.GetFiles(contents.SelectedPath, "*.png")) { string filename = Path.GetFileNameWithoutExtension(fullfilename); // sets file type based on wether its a cape or skin - PCKFile.FileData.FileType pckfiletype = (PCKFile.FileData.FileType)Convert.ToInt32(filename.ToLower().StartsWith("dlccape")); - string pckfilepath = (mashupStructure ? "Skins/" : string.Empty) + filename + ".png"; + PCKFile.FileData.FileType pckfiletype = filename.StartsWith("dlccape", StringComparison.OrdinalIgnoreCase) + ? PCKFile.FileData.FileType.CapeFile + : PCKFile.FileData.FileType.SkinFile; + string pckfilepath = (hasSkinsPck ? "Skins/" : string.Empty) + filename + ".png"; PCKFile.FileData newFile = new PCKFile.FileData(pckfilepath, pckfiletype); byte[] filedata = File.ReadAllBytes(fullfilename); newFile.SetData(filedata); - string locNameId = ""; - string locName = ""; - string locThemeId = ""; - string locTheme = ""; if (File.Exists(fullfilename + ".txt")) { string[] properties = File.ReadAllText(fullfilename + ".txt").Split(new string[]{ Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); @@ -1215,25 +1218,38 @@ namespace PckStudio string[] param = property.Split(':'); if (param.Length < 2) continue; newFile.properties.Add((param[0], param[1])); - switch (param[0]) - { - case "DISPLAYNAMEID": - locNameId = param[1]; - continue; + //switch (param[0]) + //{ + // case "DISPLAYNAMEID": + // locNameId = param[1]; + // continue; - case "DISPLAYNAME": - locName = param[1]; - continue; + // case "DISPLAYNAME": + // locName = param[1]; + // continue; - case "THEMENAMEID": - locThemeId = param[1]; - continue; + // case "THEMENAMEID": + // locThemeId = param[1]; + // continue; - case "THEMENAME": - locTheme = param[1]; - continue; - } + // case "THEMENAME": + // locTheme = param[1]; + // continue; + //} } + } + if (hasSkinsPck) + { + var skinsfile = currentPCK.GetFile("Skins.pck", PCKFile.FileData.FileType.SkinDataFile); + using (var ms = new MemoryStream(skinsfile.data)) + { + var skinspck = PCKFileReader.Read(ms, LittleEndianCheckBox.Checked); + skinspck.Files.Add(newFile); + ms.Position = 0; + PCKFileWriter.Write(ms, skinspck, LittleEndianCheckBox.Checked); + skinsfile.SetData(ms.ToArray()); + } + continue; } currentPCK.Files.Add(newFile); } @@ -1262,7 +1278,7 @@ namespace PckStudio } catch (Exception ex) { - Console.WriteLine(ex.Message); + Debug.WriteLine(ex.Message); } locFile = null; return false; @@ -1357,9 +1373,20 @@ namespace PckStudio TreeNode folerNode = CreateNode(folderNamePrompt.NewText); folerNode.ImageIndex = 0; folerNode.SelectedImageIndex = 0; - TreeNodeCollection nodeCollection = treeViewMain.SelectedNode is TreeNode node - ? node.Tag is PCKFile.FileData && node.Parent is TreeNode parentNode ? parentNode.Nodes : node.Nodes - : treeViewMain.Nodes; + + TreeNodeCollection nodeCollection = treeViewMain.Nodes; + if (treeViewMain.SelectedNode is TreeNode node) + { + if (node.Tag is PCKFile.FileData) + { + if (node.Parent is TreeNode parentNode) + { + nodeCollection = parentNode.Nodes; + } + } + else + nodeCollection = node.Nodes; + } nodeCollection.Add(folerNode); } } @@ -1388,6 +1415,7 @@ namespace PckStudio { //System.Diagnostics.Process.Start(hosturl + "pckStudio#faq"); } + // BIG TODO #region converts and ports all skins in pck to mc bedrock format // items class for use in bedrock skin conversion @@ -2393,244 +2421,6 @@ namespace PckStudio } #endregion - #region 3ds feature in testing - - private struct loadedTexture - { - public bool modified; - public uint gpuCommandsOffset; - public uint gpuCommandsWordCount; - public uint offset; - public int length; - public RenderBase.OTexture texture; - } - - private struct loadedMaterial - { - public string texture0; - public string texture1; - public string texture2; - public uint gpuCommandsOffset; - public uint gpuCommandsWordCount; - } - - private class loadedBCH - { - public uint mainHeaderOffset; - public uint gpuCommandsOffset; - public uint dataOffset; - public uint relocationTableOffset; - public uint relocationTableLength; - public List textures; - public List materials; - - public loadedBCH() - { - textures = new List(); - materials = new List(); - } - } - - private byte[] align(byte[] input) - { - int length = input.Length; - while ((length & 0x7f) > 0) length++; - byte[] output = new byte[length]; - Buffer.BlockCopy(input, 0, output, 0, input.Length); - return output; - } - - private void replaceData(Stream data, uint offset, int length, byte[] newData) - { - data.Seek(offset + length, SeekOrigin.Begin); - byte[] after = new byte[data.Length - data.Position]; - data.Read(after, 0, after.Length); - data.SetLength(offset); - data.Seek(offset, SeekOrigin.Begin); - data.Write(newData, 0, newData.Length); - data.Write(after, 0, after.Length); - } - - private void updateTexture(int index, loadedTexture newTex) - { - bch.textures.RemoveAt(index); - bch.textures.Insert(index, newTex); - } - - private void replaceCommand(Stream data, BinaryWriter output, uint newVal) - { - data.Seek(-8, SeekOrigin.Current); - output.Write(newVal); - data.Seek(4, SeekOrigin.Current); - } - - private void updateAddress(Stream data, BinaryReader input, BinaryWriter output, int diff) - { - uint offset = input.ReadUInt32(); - offset = (uint)(offset + diff); - data.Seek(-4, SeekOrigin.Current); - output.Write(offset); - } - - loadedBCH bch; - - private void create3dstToolStripMenuItem_Click(object sender, EventArgs e) - { - if (treeViewMain.SelectedNode != null) - { - loadedTexture tex = new loadedTexture(); - - SaveFileDialog exportDs = new SaveFileDialog(); - exportDs.ShowDialog(); - string currentFile = exportDs.FileName; - - bch = new loadedBCH(); - - using (FileStream data = new FileStream(currentFile, FileMode.Open)) - { - BinaryReader input = new BinaryReader(data); - BinaryWriter output = new BinaryWriter(data); - - MemoryStream png = new MemoryStream(((PCKFile.FileData)(treeViewMain.SelectedNode.Tag)).data); //Gets image data from minefile data - Image skinPicture = Image.FromStream(png); //Constructs image data into image - pictureBoxImagePreview.Image = skinPicture; //Sets image preview to image - - byte[] buffer = new byte[skinPicture.Width * skinPicture.Height * 4]; - input.Read(buffer, 0, buffer.Length); - Bitmap texture = TextureCodec.decode(buffer, skinPicture.Width, skinPicture.Height, RenderBase.OTextureFormat.rgba8); - tex.texture = new RenderBase.OTexture(texture, "Texure"); - - //tex.texture = treeViewMain.SelectedNode.Tag; - - for (int i = 0; i < bch.textures.Count; i++) - { - tex = bch.textures[i]; - tex.modified = true; - - if (tex.modified) - { - byte[] bufferx = align(TextureCodec.encode(tex.texture.texture, RenderBase.OTextureFormat.rgba8)); - int diff = bufferx.Length - tex.length; - - replaceData(data, tex.offset, tex.length, bufferx); - - //Update offsets of next textures - tex.length = bufferx.Length; - tex.modified = false; - updateTexture(i, tex); - for (int j = i; j < bch.textures.Count; j++) - { - loadedTexture next = bch.textures[j]; - next.offset = (uint)(next.offset + diff); - updateTexture(j, next); - } - - //Update all addresses poiting after the replaced data - bch.relocationTableOffset = (uint)(bch.relocationTableOffset + diff); - for (int index = 0; index < bch.relocationTableLength; index += 4) - { - data.Seek(bch.relocationTableOffset + index, SeekOrigin.Begin); - uint value = input.ReadUInt32(); - uint offset = value & 0x1ffffff; - byte flags = (byte)(value >> 25); - - if ((flags & 0x20) > 0 || flags == 7 || flags == 0xc) - { - if ((flags & 0x20) > 0) - data.Seek((offset * 4) + bch.gpuCommandsOffset, SeekOrigin.Begin); - else - data.Seek((offset * 4) + bch.mainHeaderOffset, SeekOrigin.Begin); - - uint address = input.ReadUInt32(); - if (address + bch.dataOffset > tex.offset) - { - address = (uint)(address + diff); - data.Seek(-4, SeekOrigin.Current); - output.Write(address); - } - } - } - - uint newSize = (uint)((tex.texture.texture.Width << 16) | tex.texture.texture.Height); - - //Update texture format - data.Seek(tex.gpuCommandsOffset, SeekOrigin.Begin); - for (int index = 0; index < tex.gpuCommandsWordCount * 3; index++) - { - uint command = input.ReadUInt32(); - - switch (command) - { - case 0xf008e: - case 0xf0096: - case 0xf009e: - replaceCommand(data, output, 0); //Set texture format to 0 = RGBA8888 - break; - case 0xf0082: - case 0xf0092: - case 0xf009a: - replaceCommand(data, output, newSize); //Set new texture size - break; - } - } - - //Update material texture format - foreach (loadedMaterial mat in bch.materials) - { - data.Seek(mat.gpuCommandsOffset, SeekOrigin.Begin); - for (int index = 0; index < mat.gpuCommandsWordCount; index++) - { - uint command = input.ReadUInt32(); - - switch (command) - { - case 0xf008e: if (mat.texture0 == tex.texture.name || mat.texture0 == "") replaceCommand(data, output, 0); break; - case 0xf0096: if (mat.texture1 == tex.texture.name || mat.texture1 == "") replaceCommand(data, output, 0); break; - case 0xf009e: if (mat.texture2 == tex.texture.name || mat.texture2 == "") replaceCommand(data, output, 0); break; - } - } - } - - //Patch up BCH header for new offsets and lengths - data.Seek(4, SeekOrigin.Begin); - byte backwardCompatibility = input.ReadByte(); - byte forwardCompatibility = input.ReadByte(); - - //Update Data Extended and Relocation Table offsets - data.Seek(18, SeekOrigin.Current); - if (backwardCompatibility > 0x20) updateAddress(data, input, output, diff); - updateAddress(data, input, output, diff); - - //Update data length - data.Seek(12, SeekOrigin.Current); - updateAddress(data, input, output, diff); - } - } - using (Stream file = File.Create(currentFile + ".tmp")) - { - CopyStream(output.BaseStream, file); - } - - } - - MessageBox.Show("Done!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - - } - - - public static void CopyStream(Stream input, Stream output) - { - byte[] buffer = new byte[8 * 1024]; - int len; - while ((len = input.Read(buffer, 0, buffer.Length)) > 0) - { - output.Write(buffer, 0, len); - } - } - - #endregion - private void openToolStripMenuItem1_Click(object sender, EventArgs e) { DateTime Begin = DateTime.Now; @@ -2809,9 +2599,9 @@ namespace PckStudio Process.Start("https://ko-fi.com/mattnl"); } - private void setFileIcon(TreeNode node, PCKFile.FileData.FileType type) + private void SetPckFileIcon(TreeNode node, PCKFile.FileData.FileType type) { - switch (type) + switch (type) { case PCKFile.FileData.FileType.AudioFile: node.ImageIndex = 1; @@ -2878,7 +2668,7 @@ namespace PckStudio { Console.WriteLine($"Setting {file.filetype} to {type}"); file.filetype = type; - setFileIcon(t, type); + SetPckFileIcon(t, type); } } @@ -2934,7 +2724,7 @@ namespace PckStudio for (int i = 2; i < 2 + diag.Levels; i++) { string mippedPath = textureDirectory + "/" + textureName + "MipMapLevel" + i + textureExtension; - Console.WriteLine(mippedPath); + Debug.WriteLine(mippedPath); if (currentPCK.HasFile(mippedPath, PCKFile.FileData.FileType.TextureFile)) currentPCK.Files.Remove(currentPCK.GetFile(mippedPath, PCKFile.FileData.FileType.TextureFile)); PCKFile.FileData MipMappedFile = new PCKFile.FileData(mippedPath, PCKFile.FileData.FileType.TextureFile); @@ -2982,5 +2772,26 @@ namespace PckStudio { if (!isSelectingTab) e.Cancel = true; } + + private void as3DSTextureFileToolStripMenuItem_Click(object sender, EventArgs e) + { + if (treeViewMain.SelectedNode is TreeNode node && + node.Tag is PCKFile.FileData file && + file.filetype == PCKFile.FileData.FileType.SkinFile) + { + SaveFileDialog saveFileDialog = new SaveFileDialog(); + saveFileDialog.Filter = "3DS Texture | *.3dst"; + saveFileDialog.DefaultExt = ".3dst"; + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + using (var fs = saveFileDialog.OpenFile()) + { + using var ms = new MemoryStream(file.data); + Image img = Image.FromStream(ms); + _3DSUtil.SetImageTo3DST(fs, img); + } + } + } + } } } \ No newline at end of file diff --git a/PCK-Studio/MainForm.resx b/PCK-Studio/MainForm.resx index 6da6c071..ce11116c 100644 --- a/PCK-Studio/MainForm.resx +++ b/PCK-Studio/MainForm.resx @@ -274,6 +274,18 @@ Import + + 186, 22 + + + Export as 3DS Texture + + + 210, 22 + + + Export + 222, 22 @@ -460,7 +472,7 @@ Generate MipMap Texture - 211, 290 + 211, 312 contextMenuPCKEntries @@ -30486,7 +30498,7 @@ True - 213, 119 + 288, 119 0, 0 @@ -30558,7 +30570,7 @@ False - 208, 119 + 283, 119 186, 23 @@ -30603,7 +30615,7 @@ False - 208, 151 + 283, 151 186, 23 @@ -30627,7 +30639,7 @@ Bottom, Right - 208, 180 + 283, 180 186, 60 @@ -30660,7 +30672,7 @@ True - 213, 68 + 288, 68 0, 0 @@ -30687,7 +30699,7 @@ 3, 3, 3, 3 - 588, 240 + 663, 240 0 @@ -30708,10 +30720,10 @@ 0 - 413, 277 + 338, 277 - 596, 282 + 671, 282 11 @@ -30780,7 +30792,7 @@ 0 - 405, 501 + 330, 501 10 @@ -30807,7 +30819,7 @@ NoControl - 413, 50 + 345, 50 231, 218 @@ -33501,6 +33513,18 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + exportToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + as3DSTextureFileToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + setFileTypeToolStripMenuItem diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index fb5fdcd1..001f58c0 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -159,6 +159,7 @@ + @@ -629,7 +630,6 @@ - @@ -662,6 +662,7 @@ + @@ -670,7 +671,7 @@ 5.8.0-alpha0098 - runtime; build; native; contentfiles; analyzers; buildtransitive + compile; runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index 5b171c7d..f1953c7d 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -60,6 +60,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap AddTexture { + get { + object obj = ResourceManager.GetObject("AddTexture", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// @@ -100,16 +110,6 @@ namespace PckStudio.Properties { } } - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - public static System.Drawing.Bitmap bg2 { - get { - object obj = ResourceManager.GetObject("bg2", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - /// /// Looks up a localized resource of type System.Byte[]. /// diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index 8d86b2cc..9b83af55 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -220,9 +220,6 @@ ..\Resources\Splash.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\bg2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\MROE.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -280,4 +277,7 @@ ..\Resources\iconImageList\BEHAVIOURS ICON.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\AddTexture.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/PCK-Studio/Resources/AddTexture.png b/PCK-Studio/Resources/AddTexture.png new file mode 100644 index 00000000..32c7380b Binary files /dev/null and b/PCK-Studio/Resources/AddTexture.png differ diff --git a/PCK-Studio/Resources/bg2.png b/PCK-Studio/Resources/bg2.png deleted file mode 100644 index 8f9a1e5a..00000000 Binary files a/PCK-Studio/Resources/bg2.png and /dev/null differ diff --git a/SFGraphics b/SFGraphics new file mode 160000 index 00000000..ec1c5f07 --- /dev/null +++ b/SFGraphics @@ -0,0 +1 @@ +Subproject commit ec1c5f0741722cf6bea29fbe03c6f9226cc4d928