diff --git a/PCK-Studio/Classes/IO/TGA/TGADataTypeCode.cs b/PCK-Studio/Classes/IO/TGA/TGADataTypeCode.cs
new file mode 100644
index 00000000..60456312
--- /dev/null
+++ b/PCK-Studio/Classes/IO/TGA/TGADataTypeCode.cs
@@ -0,0 +1,60 @@
+/* Copyright (c) 2022-present miku-666
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1.The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+**/
+
+namespace PckStudio.IO.TGA
+{
+ internal enum TGADataTypeCode : byte
+ {
+ ///
+ /// No image data included.
+ ///
+ NO_DATA = 0,
+ ///
+ /// Uncompressed, color-mapped images.
+ ///
+ COLORMAPPED = 1,
+ ///
+ /// Uncompressed, RGB images.
+ ///
+ RGB = 2,
+ ///
+ /// Uncompressed, black and white images.
+ ///
+ BLACK_WHITE = 3,
+ ///
+ /// Runlength encoded color-mapped images.
+ ///
+ RLE_COLORMAPPED = 9,
+ ///
+ /// Runlength encoded RGB images.
+ ///
+ RLE_RGB = 10,
+ ///
+ /// Compressed, black and white images.
+ ///
+ COMPRESSED_BLACK_WHITE = 11,
+ ///
+ /// Compressed color-mapped data, using Huffman, Delta, and runlength encoding.
+ ///
+ COMPRESSED_RLE_COLORMAPPED = 32,
+ ///
+ /// Compressed color-mapped data, using Huffman, Delta, and runlength encoding. 4-pass quadtree-type process.
+ ///
+ COMPRESSED_RLE_COLORMAPPED_4 = 33,
+ }
+}
\ No newline at end of file
diff --git a/PCK-Studio/Classes/IO/TGA/TGADeserializer.cs b/PCK-Studio/Classes/IO/TGA/TGADeserializer.cs
new file mode 100644
index 00000000..0382e16e
--- /dev/null
+++ b/PCK-Studio/Classes/IO/TGA/TGADeserializer.cs
@@ -0,0 +1,33 @@
+/* Copyright (c) 2022-present miku-666
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1.The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+**/
+using System.IO;
+using System.Drawing;
+
+namespace PckStudio.IO.TGA
+{
+ internal static class TGADeserializer
+ {
+ private static TGAReader reader = new TGAReader();
+
+ public static Image DeserializeFromStream(Stream stream)
+ {
+ TGAFileData tgaImg = reader.FromStream(stream);
+ return tgaImg.Bitmap;
+ }
+ }
+}
\ No newline at end of file
diff --git a/PCK-Studio/Classes/IO/TGA/TGAException.cs b/PCK-Studio/Classes/IO/TGA/TGAException.cs
new file mode 100644
index 00000000..9f961579
--- /dev/null
+++ b/PCK-Studio/Classes/IO/TGA/TGAException.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Runtime.Serialization;
+
+namespace PckStudio.IO.TGA
+{
+ [Serializable]
+ internal class TGAException : Exception
+ {
+ public TGAException()
+ {
+ }
+
+ public TGAException(string message) : base(message)
+ {
+ }
+
+ public TGAException(string message, Exception innerException) : base(message, innerException)
+ {
+ }
+
+ protected TGAException(SerializationInfo info, StreamingContext context) : base(info, context)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/PCK-Studio/Classes/IO/TGA/TGAExtentionData.cs b/PCK-Studio/Classes/IO/TGA/TGAExtentionData.cs
new file mode 100644
index 00000000..3f5d6e45
--- /dev/null
+++ b/PCK-Studio/Classes/IO/TGA/TGAExtentionData.cs
@@ -0,0 +1,63 @@
+/* Copyright (c) 2022-present miku-666
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1.The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+**/
+using System;
+using System.Windows.Forms;
+
+namespace PckStudio.IO.TGA
+{
+ internal struct TGAExtentionData
+ {
+ public const short ExtensionSize = 0x1EF;
+ public string AuthorName;
+ public string AuthorComment;
+ public DateTime TimeStamp;
+ public string JobID;
+ public TimeSpan JobTime;
+ public string SoftwareID;
+ public byte[] SoftwareVersion;
+ public int KeyColor;
+ public int PixelAspectRatio;
+ public int GammaValue;
+ public int ColorCorrectionOffset;
+ public int PostageStampOffset;
+ public int ScanLineOffset;
+ public byte AttributesType;
+
+ public static TGAExtentionData Create()
+ {
+ var extensionData = new TGAExtentionData();
+ extensionData.AuthorName = "";
+ extensionData.AuthorComment = "";
+ extensionData.AuthorComment = "";
+ extensionData.TimeStamp = DateTime.Now;
+ extensionData.JobID = "";
+ extensionData.JobTime = new TimeSpan(extensionData.TimeStamp.Hour, extensionData.TimeStamp.Minute, extensionData.TimeStamp.Second);
+ extensionData.SoftwareID = Application.ProductName;
+ Version.TryParse(Application.ProductVersion, out Version currentVersion);
+ extensionData.SoftwareVersion = new byte[] { (byte)currentVersion.Major, (byte)currentVersion.Minor, (byte)currentVersion.Build };
+ extensionData.KeyColor = 0;
+ extensionData.PixelAspectRatio = 0;
+ extensionData.GammaValue = 0;
+ extensionData.ColorCorrectionOffset = 0;
+ extensionData.PostageStampOffset = 0;
+ extensionData.ScanLineOffset = 0;
+ extensionData.AttributesType = 3;
+ return extensionData;
+ }
+ }
+}
\ No newline at end of file
diff --git a/PCK-Studio/Classes/IO/TGA/TGAFileData.cs b/PCK-Studio/Classes/IO/TGA/TGAFileData.cs
new file mode 100644
index 00000000..f4a12859
--- /dev/null
+++ b/PCK-Studio/Classes/IO/TGA/TGAFileData.cs
@@ -0,0 +1,41 @@
+/* Copyright (c) 2022-present miku-666
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1.The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+**/
+using System.IO;
+using System.Drawing;
+using System;
+
+namespace PckStudio.IO.TGA
+{
+ internal class TGAFileData
+ {
+ public TGAFileData(TGAHeader header, Image bitmap, TGAFooter footer, TGAExtentionData extentionData)
+ {
+ if (bitmap.Width != header.Width || bitmap.Height != header.Height)
+ throw new InvalidDataException("Header resolution doesn't match Image resolution");
+ Header = header;
+ Bitmap = bitmap;
+ Footer = footer;
+ ExtentionData = extentionData;
+ }
+
+ public readonly TGAHeader Header;
+ public readonly Image Bitmap;
+ public readonly TGAFooter Footer;
+ public readonly TGAExtentionData ExtentionData;
+ }
+}
\ No newline at end of file
diff --git a/PCK-Studio/Classes/IO/TGA/TGAFooter.cs b/PCK-Studio/Classes/IO/TGA/TGAFooter.cs
new file mode 100644
index 00000000..cfae98c8
--- /dev/null
+++ b/PCK-Studio/Classes/IO/TGA/TGAFooter.cs
@@ -0,0 +1,27 @@
+/* Copyright (c) 2022-present miku-666
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1.The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+**/
+
+namespace PckStudio.IO.TGA
+{
+ internal struct TGAFooter
+ {
+ internal const string Signature = "TRUEVISION-XFILE";
+ public int ExtensionDataOffset;
+ public int DeveloperAreaDataOffset;
+ }
+}
\ No newline at end of file
diff --git a/PCK-Studio/Classes/IO/TGA/TGAHeader.cs b/PCK-Studio/Classes/IO/TGA/TGAHeader.cs
new file mode 100644
index 00000000..ce967b22
--- /dev/null
+++ b/PCK-Studio/Classes/IO/TGA/TGAHeader.cs
@@ -0,0 +1,37 @@
+/* Copyright (c) 2022-present miku-666
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1.The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+**/
+
+namespace PckStudio.IO.TGA
+{
+ ///
+ /// Resources:
+ ///
+ ///
+ ///
+ internal struct TGAHeader
+ {
+ public byte[] Id;
+ public TGADataTypeCode DataTypeCode;
+ public (byte Type, short Origin/*Offset*/, short Length, byte Depth) Colormap;
+ public (short X, short Y) Origin;
+ public short Width;
+ public short Height;
+ public byte BitsPerPixel;
+ public byte ImageDescriptor;
+ }
+}
\ No newline at end of file
diff --git a/PCK-Studio/Classes/IO/TGA/TGAReader.cs b/PCK-Studio/Classes/IO/TGA/TGAReader.cs
new file mode 100644
index 00000000..112d2fc7
--- /dev/null
+++ b/PCK-Studio/Classes/IO/TGA/TGAReader.cs
@@ -0,0 +1,241 @@
+/* Copyright (c) 2022-present miku-666
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1.The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+**/
+using System;
+using System.IO;
+using System.Text;
+using System.Drawing;
+using System.Diagnostics;
+using System.Drawing.Imaging;
+using System.Runtime.InteropServices;
+using System.Collections.Generic;
+using OMI.Workers;
+using OMI;
+
+namespace PckStudio.IO.TGA
+{
+ internal class TGAReader : IDataFormatReader, IDataFormatReader
+ {
+ object IDataFormatReader.FromStream(Stream stream) => FromStream(stream);
+
+ object IDataFormatReader.FromFile(string filename) => FromFile(filename);
+
+ public TGAFileData FromFile(string filename)
+ {
+ if (File.Exists(filename))
+ {
+ using( var fs = File.OpenRead(filename) )
+ {
+ return FromStream(fs);
+ }
+ }
+ throw new FileNotFoundException(filename);
+ }
+
+ public TGAFileData FromStream(Stream stream)
+ {
+ using var reader = new EndiannessAwareBinaryReader(stream, Encoding.ASCII, leaveOpen: true, Endianness.LittleEndian);
+ TGAHeader header = LoadHeader(reader);
+ Image image = LoadImage(reader, header);
+ TGAFooter footer = LoadFooter(reader);
+ TGAExtentionData extentionData = LoadExtentionData(reader, footer);
+ return new TGAFileData(header, image, footer, extentionData);
+ }
+
+ private static void TGA_HandleRGB(EndiannessAwareBinaryReader reader, TGAHeader header, BitmapData bitmapData)
+ {
+ int bytesPerPixel = header.BitsPerPixel / 8;
+
+ byte[] data = reader.ReadBytes(header.Height * header.Width * bytesPerPixel);
+ Marshal.Copy(data, 0, bitmapData.Scan0, data.Length);
+ }
+
+ private static void TGA_HandleNoData(EndiannessAwareBinaryReader _, TGAHeader header, BitmapData bitmapData)
+ {
+ Random r = new Random();
+ byte[] bytes = new byte[bitmapData.Width * bitmapData.Height * 4];
+ r.NextBytes(bytes);
+ Marshal.Copy(bytes, 0, bitmapData.Scan0, bytes.Length);
+ }
+
+ private static TGAHeader LoadHeader(EndiannessAwareBinaryReader reader)
+ {
+ var header = new TGAHeader();
+ byte[] bytes = reader.ReadBytes(3);
+ (var headerIdLength, header.Colormap.Type, header.DataTypeCode) = (bytes[0], bytes[1], (TGADataTypeCode)bytes[2]);
+ header.Colormap.Origin = reader.ReadInt16();
+ header.Colormap.Length = reader.ReadInt16();
+ header.Colormap.Depth = reader.ReadByte();
+ header.Origin.X = reader.ReadInt16();
+ header.Origin.Y = reader.ReadInt16();
+ header.Width = reader.ReadInt16();
+ header.Height = reader.ReadInt16();
+ header.BitsPerPixel = reader.ReadByte();
+ header.ImageDescriptor = reader.ReadByte();
+ header.Id = reader.ReadBytes(headerIdLength);
+ DebugLogHeader(header);
+ return header;
+ }
+
+ private static PixelFormat GetPixelFormat(int bytesPerPixel)
+ {
+ return bytesPerPixel switch
+ {
+ 2 => PixelFormat.Format16bppArgb1555,
+ 3 => PixelFormat.Format24bppRgb,
+ 4 => PixelFormat.Format32bppArgb,
+ _ => throw new NotSupportedException(nameof(bytesPerPixel))
+ };
+ }
+
+ private static Image LoadImage(EndiannessAwareBinaryReader reader, TGAHeader header)
+ {
+ if (header.DataTypeCode != TGADataTypeCode.RGB)
+ throw new NotSupportedException(nameof(header.DataTypeCode));
+
+ Bitmap bitmap = new Bitmap(header.Width, header.Height);
+ BitmapData bitmapData = bitmap.LockBits(
+ new Rectangle(0, 0, header.Width, header.Height),
+ ImageLockMode.WriteOnly,
+ GetPixelFormat(header.BitsPerPixel >> 3));
+
+ if (header.DataTypeCode == TGADataTypeCode.NO_DATA)
+ {
+ TGA_HandleNoData(reader, header, bitmapData);
+ bitmap.UnlockBits(bitmapData);
+ return bitmap;
+ }
+
+ TGA_HandleRGB(reader, header, bitmapData);
+ bitmap.UnlockBits(bitmapData);
+ bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY);
+ return bitmap;
+ }
+
+ private static TGAFooter LoadFooter(EndiannessAwareBinaryReader reader)
+ {
+ long origin = reader.BaseStream.Position;
+ reader.BaseStream.Seek(-26, SeekOrigin.End);
+
+ TGAFooter footer = new TGAFooter();
+
+ footer.ExtensionDataOffset = reader.ReadInt32(); // optional
+ footer.DeveloperAreaDataOffset = reader.ReadInt32(); // optional
+ string signature = reader.ReadString(16);
+ Debug.Assert(signature.Equals(TGAFooter.Signature) || reader.ReadInt16() != 0x002E,
+ "Footer signature invalid");
+ reader.BaseStream.Seek(origin, SeekOrigin.Begin);
+ DebugLogFooter(footer);
+ return footer;
+ }
+
+ private static TGAExtentionData LoadExtentionData(EndiannessAwareBinaryReader reader, TGAFooter footer)
+ {
+ if (footer.ExtensionDataOffset > 0)
+ {
+ reader.BaseStream.Seek(footer.ExtensionDataOffset, SeekOrigin.Begin);
+ if (reader.ReadInt16() == TGAExtentionData.ExtensionSize)
+ {
+ TGAExtentionData extentionData = new TGAExtentionData();
+ extentionData.AuthorName = reader.ReadString(41);
+ extentionData.AuthorComment = reader.ReadString(324);
+ short month = reader.ReadInt16();
+ short day = reader.ReadInt16();
+ short year = reader.ReadInt16();
+ short hour = reader.ReadInt16();
+ short minute = reader.ReadInt16();
+ short second = reader.ReadInt16();
+ extentionData.TimeStamp = new DateTime(year, month, day, hour, minute, second);
+ extentionData.JobID = reader.ReadString(41);
+ extentionData.JobTime = new TimeSpan(
+ hours: reader.ReadInt16(),
+ minutes: reader.ReadInt16(),
+ seconds: reader.ReadInt16()
+ );
+ extentionData.SoftwareID = reader.ReadString(41);
+ extentionData.SoftwareVersion = reader.ReadBytes(3);
+ extentionData.KeyColor = reader.ReadInt32();
+ extentionData.PixelAspectRatio = reader.ReadInt32();
+ extentionData.GammaValue = reader.ReadInt32();
+ extentionData.ColorCorrectionOffset = reader.ReadInt32();
+ extentionData.PostageStampOffset = reader.ReadInt32();
+ extentionData.ScanLineOffset = reader.ReadInt32();
+ extentionData.AttributesType = reader.ReadByte();
+ DebugLogExtentionData(extentionData);
+ return extentionData;
+ }
+ }
+ return default;
+ }
+
+ [Conditional("DEBUG")]
+ [DebuggerHidden]
+ [DebuggerStepThrough]
+ private static void DebugLogExtentionData(TGAExtentionData extentionData)
+ {
+ Debug.WriteLine("-------Extention Data-------", category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Author Name: {0}", args: extentionData.AuthorName), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Author Comment: {0}", args: extentionData.AuthorComment), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Time Stamp: {0}", args: extentionData.TimeStamp), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Job ID: {0}", args: extentionData.JobID), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Job Time: {0}", args: extentionData.JobTime), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("SoftwareID: {0}", args: extentionData.SoftwareID), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Software Version: {0}.{1}.{2}", extentionData.SoftwareVersion[0], extentionData.SoftwareVersion[1], extentionData.SoftwareVersion[2]), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Key Color: {0}", args: extentionData.KeyColor), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Pixel Aspect Ratio: {0}", args: extentionData.PixelAspectRatio), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Gamma Value: {0}", args: extentionData.GammaValue), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Color Correction Offset: {0}", args: extentionData.ColorCorrectionOffset), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Postage Stamp Offset: {0}", args: extentionData.PostageStampOffset), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Scan Line Offset: {0}", args: extentionData.ScanLineOffset), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Attributes Type: {0}", args: extentionData.AttributesType), category: nameof(TGAReader));
+ Debug.WriteLine("----------------------------", category: nameof(TGAReader));
+ }
+
+ [Conditional("DEBUG")]
+ [DebuggerHidden]
+ [DebuggerStepThrough]
+ private static void DebugLogHeader(TGAHeader header)
+ {
+ Debug.WriteLine("------Header Data------", category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("ID length: {0}", args: header.Id.Length), category: nameof(TGAReader));
+ Debug.WriteLineIf(header.Id.Length > 0, $"ID: {header.Id}", category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Colourmap type: {0}", args: header.Colormap.Type), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Image type: {0}", args: header.DataTypeCode), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Colour map offset: {0}", args: header.Colormap.Origin), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Colour map length: {0}", args: header.Colormap.Length), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Colour map depth: {0}", args: header.Colormap.Depth), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("X origin: {0}", args: header.Origin.X), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Y origin: {0}", args: header.Origin.Y), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Width: {0}", args: header.Width), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Height: {0}", args: header.Height), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Bits per pixel: {0}", args: header.BitsPerPixel), category: nameof(TGAReader));
+ Debug.WriteLine(string.Format("Descriptor: {0}", args: header.ImageDescriptor), category: nameof(TGAReader));
+ Debug.WriteLine("-----------------------", category: nameof(TGAReader));
+ }
+
+ [Conditional("DEBUG")]
+ [DebuggerHidden]
+ [DebuggerStepThrough]
+ private static void DebugLogFooter(TGAFooter footer)
+ {
+ Debug.WriteLine("-------Footer Data-------", category: nameof(TGAReader));
+ Debug.WriteLine($"Extension Data Offset: {footer.ExtensionDataOffset:x}", category: nameof(TGAReader));
+ Debug.WriteLine($"Developer Area Data Offset: {footer.DeveloperAreaDataOffset:x}", category: nameof(TGAReader));
+ Debug.WriteLine("-----------------------", category: nameof(TGAReader));
+ }
+ }
+}
\ No newline at end of file
diff --git a/PCK-Studio/Classes/IO/TGA/TGASerializer.cs b/PCK-Studio/Classes/IO/TGA/TGASerializer.cs
new file mode 100644
index 00000000..dd4254f5
--- /dev/null
+++ b/PCK-Studio/Classes/IO/TGA/TGASerializer.cs
@@ -0,0 +1,32 @@
+/* Copyright (c) 2022-present miku-666
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1.The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+**/
+using System.IO;
+using System.Drawing;
+
+namespace PckStudio.IO.TGA
+{
+ internal static class TGASerializer
+ {
+ private static TGAWriter writer = new TGAWriter();
+
+ public static void SerializeToStream(Stream stream, Image image)
+ {
+ writer.WriteToStream(stream, image);
+ }
+ }
+}
\ No newline at end of file
diff --git a/PCK-Studio/Classes/IO/TGA/TGAWriter.cs b/PCK-Studio/Classes/IO/TGA/TGAWriter.cs
new file mode 100644
index 00000000..ff0b5475
--- /dev/null
+++ b/PCK-Studio/Classes/IO/TGA/TGAWriter.cs
@@ -0,0 +1,143 @@
+/* Copyright (c) 2022-present miku-666
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1.The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+**/
+using System;
+using System.IO;
+using System.Drawing;
+using System.Diagnostics;
+using System.Drawing.Imaging;
+using System.Runtime.InteropServices;
+using System.Text;
+using OMI;
+using System.Windows.Forms;
+using DiscordRPC;
+
+namespace PckStudio.IO.TGA
+{
+ internal class TGAWriter
+ {
+ private Bitmap _bitmap;
+ private int extensionDataOffset = 0;
+
+ public TGAWriter()
+ {
+ }
+
+ private void WriteHeader(EndiannessAwareBinaryWriter writer)
+ {
+ writer.Write(new byte[]
+ {
+ 0, // header.Id.Length
+ 0, // colormap type
+ (byte)TGADataTypeCode.RGB
+ });
+ writer.Write(0); // Colormap.Origin
+ writer.Write(0); // Colormap.Length
+ writer.Write(0); // Colormap.Depth
+ writer.Write(0); // Origin.X
+ writer.Write(0); // Origin.Y
+ writer.Write(_bitmap.Width);
+ writer.Write(_bitmap.Height);
+ writer.Write(32); // BitsPerPixel
+ writer.Write(8); // ImageDescriptor
+ }
+
+ private void WriteImage(EndiannessAwareBinaryWriter writer)
+ {
+ _bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY);
+ BitmapData bitmapData = _bitmap.LockBits(
+ new Rectangle(0, 0, _bitmap.Width, _bitmap.Height),
+ ImageLockMode.ReadOnly,
+ PixelFormat.Format32bppArgb);
+
+ byte[] buffer = new byte[_bitmap.Width * _bitmap.Height * 4];
+ Marshal.Copy(bitmapData.Scan0, buffer, 0, _bitmap.Width * _bitmap.Height * 4);
+ writer.Write(buffer);
+ }
+
+ private void WriteFooter(EndiannessAwareBinaryWriter writer)
+ {
+ writer.Write(extensionDataOffset); // extensionDataOffset
+ writer.Write(0); // developerAreaDataOffset
+ writer.WriteString(TGAFooter.Signature);
+ writer.Write((byte)0x2E);
+ writer.Write((byte)0x00);
+ }
+
+ private void WriteExtensionData(EndiannessAwareBinaryWriter writer)
+ {
+ extensionDataOffset = Convert.ToInt32(writer.BaseStream.Position);
+ TGAExtentionData extentionData = TGAExtentionData.Create();
+ writer.Write(TGAExtentionData.ExtensionSize);
+ // Author Name
+ writer.WriteString(extentionData.AuthorName, 41);
+ // Author Comment
+ writer.WriteString(extentionData.AuthorComment, 324);
+ // Timestamp
+ writer.Write((short)extentionData.TimeStamp.Month);
+ writer.Write((short)extentionData.TimeStamp.Day);
+ writer.Write((short)extentionData.TimeStamp.Year);
+ writer.Write((short)extentionData.TimeStamp.Hour);
+ writer.Write((short)extentionData.TimeStamp.Minute);
+ writer.Write((short)extentionData.TimeStamp.Second);
+ // Job id
+ writer.WriteString(extentionData.JobID, 41);
+ // Job time
+ writer.Write((short)extentionData.JobTime.Hours);
+ writer.Write((short)extentionData.JobTime.Minutes);
+ writer.Write((short)extentionData.JobTime.Seconds);
+ // Software Id
+ writer.WriteString(extentionData.SoftwareID, 41);
+ // Software version
+ writer.Write(extentionData.SoftwareVersion, 0, 3);
+ // Key color
+ writer.Write(extentionData.KeyColor);
+ // Pixel aspect ratio
+ writer.Write(extentionData.PixelAspectRatio);
+ // Gamma value
+ writer.Write(extentionData.GammaValue);
+ // Color correction offset
+ writer.Write(extentionData.ColorCorrectionOffset);
+ // Postage stamp offset
+ writer.Write(extentionData.PostageStampOffset);
+ // Scan line offset
+ writer.Write(extentionData.ScanLineOffset);
+ // Attributes type
+ writer.Write(extentionData.AttributesType);
+ }
+
+ public void WriteToStream(Stream stream, Image image)
+ {
+ _bitmap = new Bitmap(image);
+ using (var writer = new EndiannessAwareBinaryWriter(stream, Encoding.ASCII, leaveOpen: true, Endianness.LittleEndian))
+ {
+ WriteHeader(writer);
+ WriteImage(writer);
+ WriteExtensionData(writer);
+ WriteFooter(writer);
+ }
+ }
+
+ public void WriteToFile(string filename, Image image)
+ {
+ using (var fs = File.OpenWrite(filename))
+ {
+ WriteToStream(fs, image);
+ }
+ }
+ }
+}
diff --git a/PCK-Studio/Classes/Utils/BinkaConverter.cs b/PCK-Studio/Classes/Utils/BinkaConverter.cs
index 5a13b544..f6f5e9e6 100644
--- a/PCK-Studio/Classes/Utils/BinkaConverter.cs
+++ b/PCK-Studio/Classes/Utils/BinkaConverter.cs
@@ -18,7 +18,7 @@ namespace PckStudio.Classes.Utils
{
int convertedCount = 0;
InProgressPrompt waitDiag = new InProgressPrompt();
- waitDiag.Show();
+ waitDiag.Show(Program.MainInstance);
foreach (string file in filenames)
{
Binka.ToWav(file, Path.Combine(destination.FullName, Path.GetFileNameWithoutExtension(file) + ".binka"));
@@ -27,16 +27,16 @@ namespace PckStudio.Classes.Utils
waitDiag.Close();
waitDiag.Dispose();
- MessageBox.Show($"Successfully converted {convertedCount}/{filenames.Length} file{(filenames.Length > 1 ? "s" : "")}", "Done!");
+ MessageBox.Show(Program.MainInstance, $"Successfully converted {convertedCount}/{filenames.Length} file{(filenames.Length > 1 ? "s" : "")}", "Done!");
}
- public static void ToBinka(string[] filenames, DirectoryInfo destination)
+ public static void ToBinka(string[] filenames, DirectoryInfo destination, int compressionLevel = 4)
{
int convertedCount = 0;
Directory.CreateDirectory(ApplicationScope.DataCacher.CacheDirectory);
InProgressPrompt waitDiag = new InProgressPrompt();
- waitDiag.Show();
+ waitDiag.Show(Program.MainInstance);
foreach (string file in filenames)
{
@@ -56,14 +56,14 @@ namespace PckStudio.Classes.Utils
}
Cursor.Current = Cursors.WaitCursor;
- int exitCode = Binka.ToBinka(cacheSongFilepath, Path.Combine(destination.FullName, Path.GetFileNameWithoutExtension(file) + ".binka"), 4);
+ int exitCode = Binka.ToBinka(cacheSongFilepath, Path.Combine(destination.FullName, Path.GetFileNameWithoutExtension(file) + ".binka"), compressionLevel);
if (exitCode == 0)
convertedCount++;
}
waitDiag.Close();
waitDiag.Dispose();
- MessageBox.Show($"Successfully converted {convertedCount}/{filenames.Length} file{(filenames.Length > 1 ? "s" : "")}", "Done!");
+ MessageBox.Show(Program.MainInstance, $"Successfully converted {convertedCount}/{filenames.Length} file{(filenames.Length > 1 ? "s" : "")}", "Done!");
}
}
}
diff --git a/PCK-Studio/Controls/PckEditor.Designer.cs b/PCK-Studio/Controls/PckEditor.Designer.cs
index de98f605..39134e06 100644
--- a/PCK-Studio/Controls/PckEditor.Designer.cs
+++ b/PCK-Studio/Controls/PckEditor.Designer.cs
@@ -1,4 +1,6 @@
-namespace PckStudio.Controls
+using System.Windows.Forms;
+
+namespace PckStudio.Controls
{
partial class PckEditor
{
@@ -89,6 +91,13 @@
this.extractToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.cloneFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.renameFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.setSubPCKEndiannessToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.bigEndianXbox360PS3WiiUToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.littleEndianPS4PSVitaSwitchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.setModelContainerFormatToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.version1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.version2ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.version3114ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.replaceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.deleteFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.imageList = new System.Windows.Forms.ImageList(this.components);
@@ -167,9 +176,6 @@
// entryTypeTextBox
//
resources.ApplyResources(this.entryTypeTextBox, "entryTypeTextBox");
- //
- //
- //
this.entryTypeTextBox.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image")));
this.entryTypeTextBox.CustomButton.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("resource.ImeMode")));
this.entryTypeTextBox.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location")));
@@ -197,9 +203,6 @@
// entryDataTextBox
//
resources.ApplyResources(this.entryDataTextBox, "entryDataTextBox");
- //
- //
- //
this.entryDataTextBox.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image1")));
this.entryDataTextBox.CustomButton.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("resource.ImeMode1")));
this.entryDataTextBox.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location1")));
@@ -325,7 +328,11 @@
this.treeViewMain.Name = "treeViewMain";
this.treeViewMain.PathSeparator = "/";
this.treeViewMain.BeforeLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.treeViewMain_BeforeLabelEdit);
+ this.treeViewMain.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeViewMain_ItemDrag);
this.treeViewMain.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViewMain_AfterSelect);
+ this.treeViewMain.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeViewMain_DragDrop);
+ this.treeViewMain.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeViewMain_DragEnter);
+ this.treeViewMain.DragOver += new System.Windows.Forms.DragEventHandler(this.treeViewMain_DragOver);
this.treeViewMain.DoubleClick += new System.EventHandler(this.treeViewMain_DoubleClick);
this.treeViewMain.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeViewMain_KeyDown);
//
@@ -556,7 +563,9 @@
this.miscFunctionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.generateMipMapTextureToolStripMenuItem1,
this.viewFileInfoToolStripMenuItem,
- this.correctSkinDecimalsToolStripMenuItem});
+ this.correctSkinDecimalsToolStripMenuItem,
+ this.setSubPCKEndiannessToolStripMenuItem,
+ this.setModelContainerFormatToolStripMenuItem});
this.miscFunctionsToolStripMenuItem.Name = "miscFunctionsToolStripMenuItem";
resources.ApplyResources(this.miscFunctionsToolStripMenuItem, "miscFunctionsToolStripMenuItem");
//
@@ -609,6 +618,56 @@
resources.ApplyResources(this.deleteFileToolStripMenuItem, "deleteFileToolStripMenuItem");
this.deleteFileToolStripMenuItem.Click += new System.EventHandler(this.deleteFileToolStripMenuItem_Click);
//
+ // 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);
+ //
+ // setModelContainerFormatToolStripMenuItem
+ //
+ this.setModelContainerFormatToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.version1ToolStripMenuItem,
+ this.version2ToolStripMenuItem,
+ this.version3114ToolStripMenuItem});
+ this.setModelContainerFormatToolStripMenuItem.Name = "setModelContainerFormatToolStripMenuItem";
+ resources.ApplyResources(this.setModelContainerFormatToolStripMenuItem, "setModelContainerFormatToolStripMenuItem");
+ //
+ // version1ToolStripMenuItem
+ //
+ this.version1ToolStripMenuItem.Name = "version1ToolStripMenuItem";
+ resources.ApplyResources(this.version1ToolStripMenuItem, "version1ToolStripMenuItem");
+ this.version1ToolStripMenuItem.Click += new System.EventHandler(this.setModelVersion1ToolStripMenuItem_Click);
+ //
+ // version2ToolStripMenuItem
+ //
+ this.version2ToolStripMenuItem.Name = "version2ToolStripMenuItem";
+ resources.ApplyResources(this.version2ToolStripMenuItem, "version2ToolStripMenuItem");
+ this.version2ToolStripMenuItem.Click += new System.EventHandler(this.setModelVersion2ToolStripMenuItem_Click);
+ //
+ // version3114ToolStripMenuItem
+ //
+ this.version3114ToolStripMenuItem.Name = "version3114ToolStripMenuItem";
+ resources.ApplyResources(this.version3114ToolStripMenuItem, "version3114ToolStripMenuItem");
+ this.version3114ToolStripMenuItem.Click += new System.EventHandler(this.setModelVersion3ToolStripMenuItem_Click);
+ //
+ // moveUpToolStripMenuItem
+ //
+ //
// imageList
//
this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
@@ -732,5 +791,12 @@
private MetroFramework.Controls.MetroButton buttonEdit;
private MetroFramework.Controls.MetroLabel metroLabel1;
private MetroFramework.Controls.MetroCheckBox LittleEndianCheckBox;
+ private System.Windows.Forms.ToolStripMenuItem setSubPCKEndiannessToolStripMenuItem;
+ private ToolStripMenuItem bigEndianXbox360PS3WiiUToolStripMenuItem;
+ private ToolStripMenuItem littleEndianPS4PSVitaSwitchToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem setModelContainerFormatToolStripMenuItem;
+ private ToolStripMenuItem version1ToolStripMenuItem;
+ private ToolStripMenuItem version2ToolStripMenuItem;
+ private ToolStripMenuItem version3114ToolStripMenuItem;
}
}
diff --git a/PCK-Studio/Controls/PckEditor.cs b/PCK-Studio/Controls/PckEditor.cs
index b27d7e84..3c25a6c2 100644
--- a/PCK-Studio/Controls/PckEditor.cs
+++ b/PCK-Studio/Controls/PckEditor.cs
@@ -29,6 +29,13 @@ using OMI.Workers.Language;
using OMI.Workers.Pck;
using PckStudio.FileFormats;
using PckStudio.Helper;
+using PckStudio.Internal.Deserializer;
+using PckStudio.Internal.Serializer;
+using OMI.Formats.GameRule;
+using OMI.Workers.GameRule;
+using OMI.Formats.Model;
+using OMI.Workers.Model;
+using OMI.Workers;
namespace PckStudio.Controls
{
@@ -117,24 +124,22 @@ namespace PckStudio.Controls
(file.Filetype == PckFileType.SkinDataFile || file.Filetype == PckFileType.TexturePackInfoFile) &&
file.Size > 0 && treeViewMain.SelectedNode.Nodes.Count == 0)
{
- using (var stream = new MemoryStream(file.Data))
+ try
{
- try
- {
- var reader = new PckFileReader(LittleEndianCheckBox.Checked ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian);
- PckFile subPCKfile = reader.FromStream(stream);
- BuildPckTreeView(treeViewMain.SelectedNode.Nodes, subPCKfile);
- treeViewMain.SelectedNode.ExpandAll();
+ var reader = new PckFileReader(LittleEndianCheckBox.Checked ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian);
+ PckFile subPCKfile = file.GetData(reader);
+ BuildPckTreeView(treeViewMain.SelectedNode.Nodes, subPCKfile);
+ treeViewMain.SelectedNode.ExpandAll();
- }
- catch (OverflowException ex)
- {
- MessageBox.Show("Failed to open pck\n" +
- "Try checking the 'Open/Save as Switch/Vita/PS4 pck' checkbox in the upper right corner.",
- "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
- Debug.WriteLine(ex.Message);
- }
}
+ catch (OverflowException ex)
+ {
+ MessageBox.Show("Failed to open pck\n" +
+ "Try checking the 'Open/Save as Switch/Vita/PS4 pck' checkbox in the upper right corner.",
+ "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ Debug.WriteLine(ex.Message);
+ }
+
return;
}
treeViewMain.SelectedNode.Nodes.Clear();
@@ -193,22 +198,19 @@ namespace PckStudio.Controls
(file.Filetype == PckFileType.SkinDataFile || file.Filetype == PckFileType.TexturePackInfoFile) &&
file.Data.Length > 0)
{
- using (var stream = new MemoryStream(file.Data))
+ try
{
- try
- {
- var reader = new PckFileReader(GetEndianess());
- PckFile subPCKfile = reader.FromStream(stream);
- // passes parent path to remove from sub pck filepaths
- BuildPckTreeView(node.Nodes, subPCKfile, file.Filename + "/");
- }
- catch (OverflowException ex)
- {
- MessageBox.Show("Failed to open pck\n" +
- "Try checking the 'Open/Save as Switch/Vita/PS4 pck' checkbox in the upper right corner.",
- "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
- Debug.WriteLine(ex.Message);
- }
+ var reader = new PckFileReader(GetEndianess());
+ PckFile subPCKfile = file.GetData(reader);
+ // passes parent path to remove from sub pck filepaths
+ BuildPckTreeView(node.Nodes, subPCKfile, file.Filename + "/");
+ }
+ catch (OverflowException ex)
+ {
+ MessageBox.Show("Failed to open pck\n" +
+ "Try checking the 'Open/Save as Switch/Vita/PS4 pck' checkbox in the upper right corner.",
+ "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ Debug.WriteLine(ex.Message);
}
}
SetPckFileIcon(node, file.Filetype);
@@ -651,11 +653,7 @@ namespace PckStudio.Controls
case PckFileType.CapeFile:
case PckFileType.TextureFile:
{
- // TODO: Add tga support
- if (Path.GetExtension(file.Filename) == ".tga") break;
- using MemoryStream stream = new MemoryStream(file.Data);
-
- var img = Image.FromStream(stream);
+ var img = file.GetTexture();
if (img.RawFormat != ImageFormat.Jpeg || img.RawFormat != ImageFormat.Png)
{
@@ -720,6 +718,159 @@ namespace PckStudio.Controls
}
}
+ #region drag and drop for main tree node
+
+ // Most of the code below is modified code from this link:
+ // https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.treeview.itemdrag?view=windowsdesktop-6.0
+ // - MattNL
+
+ private void treeViewMain_ItemDrag(object sender, ItemDragEventArgs e)
+ {
+ if (e.Button != MouseButtons.Left || e.Item is not TreeNode node)
+ return;
+
+ if ((node.TryGetTagData(out PckFileData file) && _pck.Contains(file.Filename, file.Filetype)) || node.Parent is TreeNode)
+ {
+ treeViewMain.DoDragDrop(node, DragDropEffects.Move);
+ }
+ }
+
+ private void treeViewMain_DragOver(object sender, DragEventArgs e)
+ {
+ Point dragLocation = new Point(e.X, e.Y);
+ TreeNode node = treeViewMain.GetNodeAt(treeViewMain.PointToClient(dragLocation));
+ treeViewMain.SelectedNode = node.IsTagOfType() ? null : node;
+ }
+
+ private void treeViewMain_DragEnter(object sender, DragEventArgs e)
+ {
+ e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.Copy : e.AllowedEffect;
+ }
+
+ private void treeViewMain_DragDrop(object sender, DragEventArgs e)
+ {
+ if (e.Data.GetDataPresent(DataFormats.FileDrop) && e.Data.GetData(DataFormats.FileDrop) is string[] files)
+ {
+ ImportFiles(files);
+ return;
+ }
+
+ string dataFormat = typeof(TreeNode).FullName;
+
+ if (!e.Data.GetDataPresent(dataFormat))
+ return;
+
+ // Retrieve the client coordinates of the drop location.
+ Point dragLocation = new Point(e.X, e.Y);
+ Point targetPoint = treeViewMain.PointToClient(dragLocation);
+
+ if (!treeViewMain.ClientRectangle.Contains(targetPoint))
+ return;
+
+ // Retrieve the node at the drop location.
+ TreeNode targetNode = treeViewMain.GetNodeAt(targetPoint);
+ bool isTargetPckFile = targetNode.IsTagOfType();
+
+ if (e.Data.GetData(dataFormat) is not TreeNode draggedNode)
+ {
+ Debug.WriteLine("Dragged data was not of type TreeNode.");
+ return;
+ }
+
+ if (targetNode.Equals(draggedNode.Parent))
+ {
+ Debug.WriteLine("target node is parent of dragged node... nothing done.");
+ return;
+ }
+
+ if (draggedNode.Equals(targetNode.Parent))
+ {
+ Debug.WriteLine("dragged node is parent of target node... nothing done.");
+ return;
+ }
+
+ if (targetNode.Parent == null && isTargetPckFile && draggedNode.Parent == null)
+ {
+ Debug.WriteLine("target node is file and is in the root... nothing done.");
+ return;
+ }
+
+ if ((targetNode.Parent?.Equals(draggedNode.Parent) ?? false) && isTargetPckFile)
+ {
+ Debug.WriteLine("target node and dragged node have the same parent... nothing done.");
+ return;
+ }
+
+ Debug.WriteLine($"Target drop location is {(isTargetPckFile ? "file" : "folder")}.");
+
+ // Retrieve the node that was dragged.
+ if (draggedNode.TryGetTagData(out PckFileData draggedFile) &&
+ targetNode.FullPath != draggedFile.Filename)
+ {
+ Debug.WriteLine(draggedFile.Filename + " was droped onto " + targetNode.FullPath);
+ string newFilePath = Path.Combine(isTargetPckFile
+ ? Path.GetDirectoryName(targetNode.FullPath)
+ : targetNode.FullPath, Path.GetFileName(draggedFile.Filename));
+ Debug.WriteLine("New filepath: " + newFilePath);
+ draggedFile.Filename = newFilePath;
+ _wasModified = true;
+ BuildMainTreeView();
+ return;
+ }
+ else
+ {
+ List pckFiles = GetEndingNodes(draggedNode.Nodes).Where(t => t.IsTagOfType()).Select(t => t.Tag as PckFileData).ToList();
+ string oldPath = draggedNode.FullPath;
+ string newPath = Path.Combine(isTargetPckFile ? Path.GetDirectoryName(targetNode.FullPath) : targetNode.FullPath, draggedNode.Text).Replace('\\', '/');
+ foreach (var pckFile in pckFiles)
+ {
+ pckFile.Filename = Path.Combine(newPath, pckFile.Filename.Substring(oldPath.Length + 1)).Replace('\\', '/');
+ }
+ _wasModified = true;
+ BuildMainTreeView();
+ }
+ }
+
+ private IEnumerable GetEndingNodes(TreeNodeCollection collection)
+ {
+ List trailingNodes = new List(collection.Count);
+ foreach (TreeNode node in collection)
+ {
+ if (node.Nodes.Count > 0)
+ {
+ trailingNodes.AddRange(GetEndingNodes(node.Nodes));
+ continue;
+ }
+ trailingNodes.Add(node);
+ }
+ return trailingNodes;
+ }
+
+ private void ImportFiles(string[] files)
+ {
+ int addedCount = 0;
+ foreach (var file in files)
+ {
+ using AddFilePrompt addFile = new AddFilePrompt(Path.GetFileName(file));
+ if (addFile.ShowDialog(this) != DialogResult.OK)
+ continue;
+
+ if (_pck.Contains(addFile.Filepath, addFile.Filetype))
+ {
+ MessageBox.Show(this, $"'{addFile.Filepath}' of type {addFile.Filetype} already exists.", "Import failed", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ continue;
+ }
+ _pck.CreateNewFile(addFile.Filepath, addFile.Filetype, () => File.ReadAllBytes(file));
+ addedCount++;
+
+ BuildMainTreeView();
+ _wasModified = true;
+ }
+ Trace.TraceInformation("[{0}] Imported {1} file(s).", nameof(ImportFiles), addedCount);
+ }
+
+ #endregion
+
private void createSkinToolStripMenuItem_Click(object sender, EventArgs e)
{
LOCFile locFile = null;
@@ -777,10 +928,10 @@ namespace PckStudio.Controls
return;
var file = new PckFileData(
- $"res/textures/{Animation.GetCategoryName(diag.Category)}/{diag.SelectedTile}.png",
+ $"{ResourceLocation.GetPathFromCategory(diag.Category)}/{diag.SelectedTile}.png",
PckFileType.TextureFile);
- var animation = AnimationHelper.GetAnimationFromFile(file);
+ var animation = file.GetDeserializedData(AnimationDeserializer.DefaultDeserializer);
using AnimationEditor animationEditor = new AnimationEditor(animation, Path.GetFileNameWithoutExtension(file.Filename));
if (animationEditor.ShowDialog() == DialogResult.OK)
{
@@ -964,12 +1115,9 @@ namespace PckStudio.Controls
saveFileDialog.DefaultExt = ".3dst";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
- using (var ms = new MemoryStream(file.Data))
- {
- Image img = Image.FromStream(ms);
- var writer = new _3DSTextureWriter(img);
- writer.WriteToFile(saveFileDialog.FileName);
- }
+ Image img = file.GetTexture();
+ var writer = new _3DSTextureWriter(img);
+ writer.WriteToFile(saveFileDialog.FileName);
}
}
}
@@ -1007,7 +1155,7 @@ namespace PckStudio.Controls
PckFileData MipMappedFile = new PckFileData(mippedPath, PckFileType.TextureFile);
- Image originalTexture = Image.FromStream(new MemoryStream(file.Data));
+ Image originalTexture = file.GetTexture();
int NewWidth = Math.Max(originalTexture.Width / (int)Math.Pow(2, i - 1), 1);
int NewHeight = Math.Max(originalTexture.Height / (int)Math.Pow(2, i - 1), 1);
@@ -1607,7 +1755,7 @@ namespace PckStudio.Controls
texture = _img;
}
- file.SetData(texture, ImageFormat.Png);
+ file.SetTexture(texture);
_wasModified = true;
BuildMainTreeView();
}
@@ -1616,14 +1764,13 @@ namespace PckStudio.Controls
if (!file.Filename.StartsWith("res/textures/blocks/") && !file.Filename.StartsWith("res/textures/items/"))
return;
- var animation = AnimationHelper.GetAnimationFromFile(file);
+ var animation = file.GetDeserializedData(AnimationDeserializer.DefaultDeserializer);
using (AnimationEditor animationEditor = new AnimationEditor(animation, Path.GetFileNameWithoutExtension(file.Filename)))
{
if (animationEditor.ShowDialog(this) == DialogResult.OK)
{
_wasModified = true;
- file.Filename = animationEditor.FinalPath;
- AnimationHelper.SaveAnimationToFile(file, animation);
+ file.SetSerializedData(animation, AnimationSerializer.DefaultSerializer);
BuildMainTreeView();
}
}
@@ -1631,9 +1778,33 @@ namespace PckStudio.Controls
private void HandleGameRuleFile(PckFileData file)
{
- using GameRuleFileEditor grfEditor = new GameRuleFileEditor(file);
- _wasModified = grfEditor.ShowDialog(this) == DialogResult.OK;
- UpdateRichPresence();
+ const string use_deflate = "PS3";
+ const string use_xmem = "Xbox 360";
+ const string use_zlib = "Wii U, PS Vita";
+
+ ItemSelectionPopUp dialog = new ItemSelectionPopUp(use_zlib, use_deflate, use_xmem);
+ dialog.LabelText = "Type";
+ dialog.ButtonText = "Ok";
+ if (dialog.ShowDialog() != DialogResult.OK)
+ return;
+
+ var compressiontype = dialog.SelectedItem switch
+ {
+ use_deflate => GameRuleFile.CompressionType.Deflate,
+ use_xmem => GameRuleFile.CompressionType.XMem,
+ use_zlib => GameRuleFile.CompressionType.Zlib,
+ _ => GameRuleFile.CompressionType.Unknown
+ };
+
+ GameRuleFile grf = file.GetData(new GameRuleFileReader(compressiontype));
+
+ using GameRuleFileEditor grfEditor = new GameRuleFileEditor(grf);
+ if (grfEditor.ShowDialog(this) == DialogResult.OK)
+ {
+ file.SetData(new GameRuleFileWriter(grfEditor.Result));
+ _wasModified = true;
+ UpdateRichPresence();
+ }
}
private void HandleAudioFile(PckFileData file)
@@ -1666,26 +1837,23 @@ namespace PckStudio.Controls
{
if (file.Size <= 0)
return;
- using (var ms = new MemoryStream(file.Data))
+ var texture = file.GetTexture();
+ if (file.HasProperty("BOX"))
{
- var texture = Image.FromStream(ms);
- if (file.HasProperty("BOX"))
+ using generateModel generate = new generateModel(file);
+ if (generate.ShowDialog() == DialogResult.OK)
{
- using generateModel generate = new generateModel(file);
- if (generate.ShowDialog() == DialogResult.OK)
- {
- entryDataTextBox.Text = entryTypeTextBox.Text = string.Empty;
- _wasModified = true;
- ReloadMetaTreeView();
- }
- }
- else
- {
- SkinPreview frm = new SkinPreview(texture, file.GetProperty("ANIM", SkinANIM.FromString));
- frm.ShowDialog(this);
- frm.Dispose();
+ entryDataTextBox.Text = entryTypeTextBox.Text = string.Empty;
+ _wasModified = true;
+ ReloadMetaTreeView();
}
}
+ else
+ {
+ SkinPreview frm = new SkinPreview(texture, file.GetProperty("ANIM", SkinANIM.FromString));
+ frm.ShowDialog(this);
+ frm.Dispose();
+ }
}
public void HandleModelsFile(PckFileData file)
@@ -1912,5 +2080,101 @@ namespace PckStudio.Controls
private void moveUpToolStripMenuItem_Click(object sender, EventArgs e) => moveFile(-1);
[Obsolete]
private void moveDownToolStripMenuItem_Click(object sender, EventArgs e) => moveFile(1);
+
+
+ private void SetPckEndianness(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))
+ {
+ IDataFormatReader 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);
+ object pck = reader.FromStream(new MemoryStream(file.Data));
+
+ IDataFormatWriter writer = file.Filetype is PckFileType.AudioFile
+ ? new PckAudioFileWriter((PckAudioFile)pck, endianness)
+ : new PckFileWriter((PckFile)pck, endianness);
+ file.SetData(writer);
+ _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) => SetPckEndianness(OMI.Endianness.LittleEndian);
+ private void bigEndianToolStripMenuItem_Click(object sender, EventArgs e) => SetPckEndianness(OMI.Endianness.BigEndian);
+
+ private void SetModelVersion(int version)
+ {
+ if (treeViewMain.SelectedNode.Tag is PckFileData file && file.Filetype is PckFileType.ModelsFile)
+ {
+ try
+ {
+ ModelContainer container = file.GetData(new ModelFileReader());
+
+ if (container.Version == version)
+ {
+ MessageBox.Show(
+ this,
+ $"This model container is already Version {version + 1}.",
+ "Can't convert", MessageBoxButtons.OK, MessageBoxIcon.Error
+ );
+ return;
+ }
+
+ if (version == 2 &&
+ MessageBox.Show(
+ this,
+ "Conversion to 1.14 models.bin format does not yet support parent declaration and may not be 100% accurate.\n" +
+ "Would you like to continue?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes
+ )
+ {
+ return;
+ }
+
+ if (container.Version > 1 &&
+ MessageBox.Show(
+ this,
+ "Conversion from 1.14 models.bin format does not yet support parent parts and may not be 100% accurate.\n" +
+ "Would you like to continue?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes
+ )
+ {
+ return;
+ }
+
+ file.SetData(new ModelFileWriter(container, version));
+ _wasModified = true;
+ MessageBox.Show(
+ this,
+ $"\"{file.Filename}\" successfully converted to Version {version + 1} format.",
+ "Converted model container file"
+ );
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(this, ex.Message, "Not a valid model container file.");
+ return;
+ }
+ }
+ }
+
+ private void setModelVersion1ToolStripMenuItem_Click(object sender, EventArgs e) => SetModelVersion(0);
+
+ private void setModelVersion2ToolStripMenuItem_Click(object sender, EventArgs e) => SetModelVersion(1);
+
+ private void setModelVersion3ToolStripMenuItem_Click(object sender, EventArgs e) => SetModelVersion(2);
+
}
}
\ No newline at end of file
diff --git a/PCK-Studio/Controls/PckEditor.resx b/PCK-Studio/Controls/PckEditor.resx
index e1a790c7..91b003ea 100644
--- a/PCK-Studio/Controls/PckEditor.resx
+++ b/PCK-Studio/Controls/PckEditor.resx
@@ -884,6 +884,141 @@
5
+
+ MetaTab
+
+
+ MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ PropertiesTabControl
+
+
+ 0
+
+
+ Bottom
+
+
+ 279, 270
+
+
+ 732, 281
+
+
+ 11
+
+
+ PropertiesTabControl
+
+
+ MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ $this
+
+
+ 6
+
+
+ metroLabel2
+
+
+ MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ MetaTab
+
+
+ 2
+
+
+ entryTypeTextBox
+
+
+ MetroFramework.Controls.MetroTextBox, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ MetaTab
+
+
+ 3
+
+
+ entryDataTextBox
+
+
+ MetroFramework.Controls.MetroTextBox, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ MetaTab
+
+
+ 4
+
+
+ buttonEdit
+
+
+ MetroFramework.Controls.MetroButton, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ MetaTab
+
+
+ 5
+
+
+ metroLabel1
+
+
+ MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ MetaTab
+
+
+ 6
+
+
+ treeMeta
+
+
+ System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ MetaTab
+
+
+ 7
+
+
+ 4, 38
+
+
+ 5, 5, 5, 5
+
+
+ 724, 239
+
+
+ 0
+
+
+ Properties
+
+
+ MetaTab
+
+
+ MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ PropertiesTabControl
+
+
+ 0
+
Bottom, Right
@@ -891,7 +1026,7 @@
True
- 204, 168
+ 204, 165
0, 0
@@ -936,7 +1071,7 @@
False
- 215, 138
+ 215, 135
146, 20
@@ -981,7 +1116,7 @@
False
- 215, 170
+ 215, 167
146, 20
@@ -1005,7 +1140,7 @@
Bottom, Right
- 215, 196
+ 215, 193
146, 33
@@ -1038,7 +1173,7 @@
True
- 266, 61
+ 266, 58
0, 0
@@ -1061,56 +1196,6 @@
301, 19
-
- 160, 22
-
-
- Add Entry
-
-
- 160, 22
-
-
- Add BOX Entry
-
-
- 160, 22
-
-
- Add ANIM Entry
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xMkMEa+wAAABSSURBVDhP5c0x
- DsAgDENRxt7/wmkNSpRGf0CCCZAegxNMM7MlGMp3dIU6dxhKf/QMNxRogeQC8ivw5Vn7C0heJlFA+kL5
- jWAohxRkde4wnGftBS90axNmphIGAAAAAElFTkSuQmCC
-
-
-
- 181, 22
-
-
- Add Entry
-
-
- 181, 22
-
-
- Add Multiple Entries
-
-
- 181, 22
-
-
- Delete Entry
-
-
- 181, 22
-
-
- Edit All Entries
-
182, 92
@@ -1144,56 +1229,55 @@
7
-
- 4, 38
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xMkMEa+wAAABSSURBVDhP5c0x
+ DsAgDENRxt7/wmkNSpRGf0CCCZAegxNMM7MlGMp3dIU6dxhKf/QMNxRogeQC8ivw5Vn7C0heJlFA+kL5
+ jWAohxRkde4wnGftBS90axNmphIGAAAAAElFTkSuQmCC
+
-
- 5, 5, 5, 5
+
+ 181, 22
-
- 724, 239
+
+ Add Entry
-
- 0
+
+ 160, 22
-
- Properties
+
+ Add Entry
-
- MetaTab
+
+ 160, 22
-
- MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+ Add BOX Entry
-
- PropertiesTabControl
+
+ 160, 22
-
- 0
+
+ Add ANIM Entry
-
- Bottom
+
+ 181, 22
-
- 279, 270
+
+ Add Multiple Entries
-
- 732, 281
+
+ 181, 22
-
- 11
+
+ Delete Entry
-
- PropertiesTabControl
+
+ 181, 22
-
- MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
-
-
- $this
-
-
- 6
+
+ Edit All Entries
True
@@ -1225,6 +1309,65 @@
22, 20
+
+ 158, 224
+
+
+ contextMenuPCKEntries
+
+
+ System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Left
+
+
+ 0
+
+
+ 204, 20
+
+
+ 32, 32
+
+
+ 5, 50
+
+
+ 0
+
+
+ 274, 501
+
+
+ 20
+
+
+ treeViewMain
+
+
+ System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 8
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAA3SURBVDhPY/j/
+ /z9FGKsgGIsCKWSMTQ0QYxUE45FmALpiYvFwMgAbxqIYG8YqCMajBhCJ/zMAAPGwpV/Xje8RAAAAAElF
+ TkSuQmCC
+
+
+
+ 157, 22
+
+
+ Create
+
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
@@ -1313,19 +1456,20 @@
EntityMaterials.bin
-
+
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAA3SURBVDhPY/j/
- /z9FGKsgGIsCKWSMTQ0QYxUE45FmALpiYvFwMgAbxqIYG8YqCMajBhCJ/zMAAPGwpV/Xje8RAAAAAElF
+ vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAABzSURBVDhPpYzB
+ DQAhCARp4hr3Txu254WTjYRb9cEmk/BgRjBVHTv85Twmgt77PcJEYIFrhIkAgWOEiSAGthEmgtbaD9fW
+ mBgpB4xywCgFxiMf5YDdrq3l5wjEjKtzTARMNlydY2IGot2ureVnRjkQmZbICyCi7XU5cfqKAAAAAElF
TkSuQmCC
-
+
157, 22
-
- Create
+
+ Import
@@ -1379,20 +1523,11 @@
Add File
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAABzSURBVDhPpYzB
- DQAhCARp4hr3Txu254WTjYRb9cEmk/BgRjBVHTv85Twmgt77PcJEYIFrhIkAgWOEiSAGthEmgtbaD9fW
- mBgpB4xywCgFxiMf5YDdrq3l5wjEjKtzTARMNlydY2IGot2ureVnRjkQmZbICyCi7XU5cfqKAAAAAElF
- TkSuQmCC
-
-
-
+
157, 22
-
- Import
+
+ Export
186, 22
@@ -1400,11 +1535,11 @@
Export as 3DS Texture
-
+
157, 22
-
- Export
+
+ Set File Type
222, 22
@@ -1478,11 +1613,11 @@
Entity Materials File (.BIN)
-
+
157, 22
-
- Set File Type
+
+ Misc. Functions
210, 22
@@ -1502,12 +1637,6 @@
Correct Skin Decimals
-
- 157, 22
-
-
- Misc. Functions
-
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
@@ -1564,51 +1693,6 @@
Delete
-
- 158, 224
-
-
- contextMenuPCKEntries
-
-
- System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Left
-
-
- 0
-
-
- 204, 20
-
-
- 32, 32
-
-
- 5, 50
-
-
- 0
-
-
- 274, 501
-
-
- 20
-
-
- treeViewMain
-
-
- System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 8
-
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
@@ -1678,7 +1762,7 @@
previewPictureBox
- PckStudio.PictureBoxWithInterpolationMode, PCK-Studio, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null
+ PckStudio.ToolboxItems.InterpolationPictureBox, PCK-Studio, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null
$this
diff --git a/PCK-Studio/Extensions/PckFileDataExtensions.cs b/PCK-Studio/Extensions/PckFileDataExtensions.cs
index 9488fdcb..6a691d9c 100644
--- a/PCK-Studio/Extensions/PckFileDataExtensions.cs
+++ b/PCK-Studio/Extensions/PckFileDataExtensions.cs
@@ -9,6 +9,10 @@ using System.Text;
using System.Threading.Tasks;
using OMI.Formats.Pck;
using OMI.Workers;
+using PckStudio.Interfaces;
+using PckStudio.IO.TGA;
+using PckStudio.Internal.Deserializer;
+using PckStudio.Internal.Serializer;
namespace PckStudio.Extensions
{
@@ -16,8 +20,6 @@ namespace PckStudio.Extensions
{
private const string MipMap = "MipMapLevel";
- private static Image EmptyImage = new Bitmap(1, 1, PixelFormat.Format32bppArgb);
-
internal static Image GetTexture(this PckFileData file)
{
if (file.Filetype != PckFileType.SkinFile &&
@@ -26,31 +28,35 @@ namespace PckStudio.Extensions
{
throw new Exception("File is not suitable to contain image data.");
}
- using (var stream = new MemoryStream(file.Data))
- {
- try
- {
- return Image.FromStream(stream);
- }
- catch(Exception ex)
- {
- Trace.WriteLine($"Failed to read image from pck file data({file.Filename}).", category: nameof(PckFileDataExtensions) + "." + nameof(GetTexture));
- Debug.WriteLine(ex.Message);
- return EmptyImage;
- }
- }
+ return file.GetDeserializedData(ImageDeserializer.DefaultDeserializer);
}
- internal static void SetData(this PckFileData file, IDataFormatWriter writer)
+ internal static T GetDeserializedData(this PckFileData file, IPckDeserializer deserializer)
+ {
+ return deserializer.Deserialize(file);
+ }
+
+ internal static T GetData(this PckFileData file, IDataFormatReader formatReader) where T : class
+ {
+ using var ms = new MemoryStream(file.Data);
+ return formatReader.FromStream(ms);
+ }
+
+ internal static void SetSerializedData(this PckFileData file, T obj, IPckFileSerializer serializer)
+ {
+ serializer.Serialize(obj, ref file);
+ }
+
+ internal static void SetData(this PckFileData file, IDataFormatWriter formatWriter)
{
using (var stream = new MemoryStream())
{
- writer.WriteToStream(stream);
+ formatWriter.WriteToStream(stream);
file.SetData(stream.ToArray());
}
}
- internal static void SetData(this PckFileData file, Image image, ImageFormat imageFormat)
+ internal static void SetTexture(this PckFileData file, Image image)
{
if (file.Filetype != PckFileType.SkinFile &&
file.Filetype != PckFileType.CapeFile &&
@@ -58,12 +64,7 @@ namespace PckStudio.Extensions
{
throw new Exception("File is not suitable to contain image data.");
}
-
- using (var stream = new MemoryStream())
- {
- image.Save(stream, imageFormat);
- file.SetData(stream.ToArray());
- }
+ file.SetSerializedData(image, ImageSerializer.DefaultSerializer);
}
internal static bool IsMipmappedFile(this PckFileData file)
diff --git a/PCK-Studio/Extensions/TreeNodeExtensions.cs b/PCK-Studio/Extensions/TreeNodeExtensions.cs
index 0fab1fcd..d6c70fe3 100644
--- a/PCK-Studio/Extensions/TreeNodeExtensions.cs
+++ b/PCK-Studio/Extensions/TreeNodeExtensions.cs
@@ -11,7 +11,7 @@ namespace PckStudio.Extensions
{
internal static bool IsTagOfType(this TreeNode node) where T : class
{
- return node.Tag is T;
+ return node?.Tag is T;
}
internal static bool TryGetTagData(this TreeNode node, out TOut tagData) where TOut : class
diff --git a/PCK-Studio/Features/CemuPanel.Designer.cs b/PCK-Studio/Features/CemuPanel.Designer.cs
index 95cb58fb..44f0b0c9 100644
--- a/PCK-Studio/Features/CemuPanel.Designer.cs
+++ b/PCK-Studio/Features/CemuPanel.Designer.cs
@@ -118,7 +118,7 @@
this.radioButtonEur.Size = new System.Drawing.Size(137, 30);
this.radioButtonEur.TabIndex = 1;
this.radioButtonEur.TabStop = true;
- this.radioButtonEur.Text = "EUR";
+ this.radioButtonEur.Text = "EU";
this.radioButtonEur.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.radioButtonEur.UseVisualStyleBackColor = false;
this.radioButtonEur.Click += new System.EventHandler(this.radioButton_Click);
@@ -164,7 +164,7 @@
this.radioButtonJap.Name = "radioButtonJap";
this.radioButtonJap.Size = new System.Drawing.Size(138, 30);
this.radioButtonJap.TabIndex = 2;
- this.radioButtonJap.Text = "JAP";
+ this.radioButtonJap.Text = "JP";
this.radioButtonJap.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.radioButtonJap.UseVisualStyleBackColor = false;
this.radioButtonJap.Click += new System.EventHandler(this.radioButton_Click);
diff --git a/PCK-Studio/Features/CemuPanel.cs b/PCK-Studio/Features/CemuPanel.cs
index 3dcf5117..e49018e4 100644
--- a/PCK-Studio/Features/CemuPanel.cs
+++ b/PCK-Studio/Features/CemuPanel.cs
@@ -41,7 +41,7 @@ namespace PckStudio.Features
{
InitializeComponent();
if (!TryApplyPermanentCemuConfig() &&
- MessageBox.Show("Failed to get Cemu perma settings\nDo you want to open your local settings.xml file?",
+ MessageBox.Show(this, "Failed to get Cemu perma settings\nDo you want to open your local settings.xml file?",
"Cemu mlc path not found",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning) == DialogResult.Yes
@@ -197,14 +197,14 @@ namespace PckStudio.Features
DLCTreeView.Nodes.Clear();
if (!IsValidInstallDirectory())
{
- MessageBox.Show("Please select a valid Game Directory!", "Invalid Directory Specified",
+ MessageBox.Show(this, "Please select a valid Game Directory!", "Invalid Directory Specified",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (!IsValidGameDirectory())
{
- MessageBox.Show($"Could not find '{GetGameContentPath()}'!", "Not Found",
+ MessageBox.Show(this, $"Could not find '{GetGameContentPath()}'!", "Not Found",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
@@ -214,7 +214,7 @@ namespace PckStudio.Features
if (!dlcDirectory.Exists)
{
- MessageBox.Show($"'{dirPath}' does not exist!", "Not Found",
+ MessageBox.Show(this, $"'{dirPath}' does not exist!", "Not Found",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
@@ -246,7 +246,7 @@ namespace PckStudio.Features
private void openSkinPackToolStripMenuItem_Click(object sender, EventArgs e)
{
- if (DLCTreeView.SelectedNode.Tag is DLCDirectoryInfo dlcDir)
+ if (DLCTreeView.SelectedNode?.Tag is DLCDirectoryInfo dlcDir)
{
Program.MainInstance.LoadPckFromFile(dlcDir.PackPath);
}
@@ -254,7 +254,7 @@ namespace PckStudio.Features
private void openTexturePackToolStripMenuItem_Click(object sender, EventArgs e)
{
- if (DLCTreeView.SelectedNode.Tag is DLCDirectoryInfo dlcDir && dlcDir.HasTexturePack)
+ if (DLCTreeView.SelectedNode?.Tag is DLCDirectoryInfo dlcDir && dlcDir.HasTexturePack)
{
Program.MainInstance.LoadPckFromFile(dlcDir.TexturePackPath);
}
@@ -276,7 +276,7 @@ namespace PckStudio.Features
if (prompt.NewText.ContainsAny(Path.GetInvalidPathChars()))
{
- MessageBox.Show("Invalid Folder name entered!", "Invalid Folder Name", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ MessageBox.Show(this, "Invalid Folder name entered!", "Invalid Folder Name", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
@@ -284,7 +284,7 @@ namespace PckStudio.Features
if (Directory.Exists(directoryPath))
{
- MessageBox.Show("A Folder with the same name already exists!", "Folder Name taken", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ MessageBox.Show(this, "A Folder with the same name already exists!", "Folder Name taken", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
Directory.CreateDirectory(directoryPath);
@@ -302,7 +302,7 @@ namespace PckStudio.Features
private void removePckToolStripMenuItem_Click(object sender, EventArgs e)
{
string pckName = DLCTreeView.SelectedNode.Text;
- var result = MessageBox.Show($"Are you sure you want to permanently delete '{pckName}'?", "Hold up!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
+ var result = MessageBox.Show(this, $"Are you sure you want to permanently delete '{pckName}'?", "Hold up!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
string directoryPath = GetContentSubDirectory("WiiU", "DLC", pckName);
diff --git a/PCK-Studio/Features/PckManager.cs b/PCK-Studio/Features/PckManager.cs
index 6e6cacb8..9c34b76f 100644
--- a/PCK-Studio/Features/PckManager.cs
+++ b/PCK-Studio/Features/PckManager.cs
@@ -73,7 +73,7 @@ namespace PckStudio.Features
}
catch (NotImplementedException ex)
{
- MessageBox.Show(ex.Message, "Not Implemented");
+ MessageBox.Show(this, ex.Message, "Not Implemented");
}
}
diff --git a/PCK-Studio/Features/WiiUPanel.cs b/PCK-Studio/Features/WiiUPanel.cs
index adc3baac..8117e9f4 100644
--- a/PCK-Studio/Features/WiiUPanel.cs
+++ b/PCK-Studio/Features/WiiUPanel.cs
@@ -41,7 +41,7 @@ namespace PckStudio.Features
[Obsolete("Prompt user to use Aroma instead!")]
private void buttonSelect_Click(object sender, EventArgs e)
{
- MessageBox.Show("Please use Aroma's ftp Plugin!");
+ MessageBox.Show(this, "Please use Aroma's ftp Plugin!");
return;
}
@@ -131,14 +131,14 @@ namespace PckStudio.Features
}
catch (Exception ex)
{
- MessageBox.Show(ex.ToString());
+ MessageBox.Show(this, ex.ToString());
}
return;
}
if (!Regex.IsMatch(IPv4TextBox.Text, @"^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"))
{
- MessageBox.Show("Please enter a valid Wii U IP!");
+ MessageBox.Show(this, "Please enter a valid Wii U IP!");
return;
}
@@ -169,7 +169,7 @@ namespace PckStudio.Features
catch (Exception ex)
{
SetButtonState(ButtonState.Start);
- MessageBox.Show(ex.ToString());
+ MessageBox.Show(this, ex.ToString());
}
}
@@ -184,7 +184,7 @@ namespace PckStudio.Features
ListViewHitTestInfo hitTestInfo = listViewPCKS.HitTest(e.Location);
if (e.Button == MouseButtons.Right && hitTestInfo.Location != ListViewHitTestLocations.None)
{
- contextMenuStripCaffiine.Show(Cursor.Position);
+ contextMenuStripCaffiine.Show(this, Cursor.Position);
}
}
@@ -194,7 +194,7 @@ namespace PckStudio.Features
{
SetButtonState(ButtonState.Wait);
ReplacePck(mod);
- MessageBox.Show("PCK Replaced!");
+ MessageBox.Show(this, "PCK Replaced!");
}
SetButtonState(ButtonState.Stop);
UpdateDLCPath();
@@ -208,10 +208,10 @@ namespace PckStudio.Features
OpenFileDialog openPCK = new OpenFileDialog();
openPCK.Filter = "PCK File|*.pck";
- if (openPCK.ShowDialog() == DialogResult.OK)
+ if (openPCK.ShowDialog(this) == DialogResult.OK)
{
ReplacePck(openPCK.FileName);
- MessageBox.Show("PCK Replaced!");
+ MessageBox.Show(this, "PCK Replaced!");
}
}
SetButtonState(ButtonState.Stop);
@@ -283,7 +283,7 @@ namespace PckStudio.Features
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Pack Image|*.png";
- if (ofd.ShowDialog() == DialogResult.OK)
+ if (ofd.ShowDialog(this) == DialogResult.OK)
TextBoxPackImage.Text = ofd.FileName;
}
}
diff --git a/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.Designer.cs b/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.Designer.cs
index a134f856..94cfb1f4 100644
--- a/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.Designer.cs
+++ b/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.Designer.cs
@@ -105,8 +105,7 @@
resources.GetString("FileTypeComboBox.Items10"),
resources.GetString("FileTypeComboBox.Items11"),
resources.GetString("FileTypeComboBox.Items12"),
- resources.GetString("FileTypeComboBox.Items13"),
- resources.GetString("FileTypeComboBox.Items14")});
+ resources.GetString("FileTypeComboBox.Items13")});
this.FileTypeComboBox.Name = "FileTypeComboBox";
this.FileTypeComboBox.Style = MetroFramework.MetroColorStyle.Blue;
this.FileTypeComboBox.Theme = MetroFramework.MetroThemeStyle.Dark;
diff --git a/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.cs b/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.cs
index 29d80d57..9e4bb343 100644
--- a/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.cs
+++ b/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.cs
@@ -12,7 +12,7 @@ namespace PckStudio.Popups
/// otherwise
///
public string Filepath => DialogResult == DialogResult.OK ? InputTextBox.Text : string.Empty;
- public PckFileType Filetype => (PckFileType)FileTypeComboBox.SelectedIndex;
+ public PckFileType Filetype => (PckFileType)(FileTypeComboBox.SelectedIndex + (FileTypeComboBox.SelectedIndex >= 3 ? 1 : 0));
public AddFilePrompt(string initialText) : this(initialText, -1)
{ }
diff --git a/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.resx b/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.resx
index 00b928ed..fa2571de 100644
--- a/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.resx
+++ b/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.resx
@@ -262,39 +262,36 @@
TextureFile (*.png)
- UIDataFile (UNUSED)
-
-
InfoFile (0)
-
+
TexturePackInfoFile (x<Resolution>Info.pck)
-
+
LocalisationFile (languages.loc/localisation.loc)
-
+
GameRulesFile (*.grf)
-
+
AudioFile (*.pck)
-
+
ColourTableFile (colours.col)
-
+
GameRulesHeader (*.grh)
-
+
SkinDataFile (*.pck)
-
+
ModelsFile (models.bin)
-
+
BehavioursFile (behaviours.bin)
-
+
MaterialFile (entityMaterials.bin)
diff --git a/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.cs b/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.cs
index 2fe99dca..9c73ce19 100644
--- a/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.cs
+++ b/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.cs
@@ -11,11 +11,11 @@ namespace PckStudio.Forms.Additional_Popups.Animation
{
internal partial class ChangeTile : MetroForm
{
- string selectedTile = "";
- AnimationCategory category = AnimationCategory.Blocks;
+ private JsonTileInfo selectedTile;
+ private ResourceCategory category = ResourceCategory.BlockAnimation;
- public string SelectedTile => selectedTile;
- public AnimationCategory Category => category;
+ public JsonTileInfo SelectedTile => selectedTile;
+ public ResourceCategory Category => category;
List treeViewBlockCache = new List();
List treeViewItemCache = new List();
@@ -31,8 +31,8 @@ namespace PckStudio.Forms.Additional_Popups.Animation
private void InitializeTreeviews()
{
Profiler.Start();
- GetTileDataToView(AnimationCategory.Blocks, treeViewBlocks.Nodes, treeViewBlockCache.Add);
- GetTileDataToView(AnimationCategory.Items, treeViewItems.Nodes, treeViewItemCache.Add);
+ GetTileDataToView(ResourceCategory.BlockAnimation, treeViewBlocks.Nodes, treeViewBlockCache.Add);
+ GetTileDataToView(ResourceCategory.ItemAnimation, treeViewItems.Nodes, treeViewItemCache.Add);
Profiler.Stop();
}
@@ -40,19 +40,19 @@ namespace PckStudio.Forms.Additional_Popups.Animation
{
if (e.Node.Tag is JsonTileInfo tileData)
{
- selectedTile = tileData.InternalName;
+ selectedTile = tileData;
category = e.Node.TreeView == treeViewItems
- ? AnimationCategory.Items
- : AnimationCategory.Blocks;
+ ? ResourceCategory.ItemAnimation
+ : ResourceCategory.BlockAnimation;
}
}
- private void GetTileDataToView(AnimationCategory key, TreeNodeCollection collection, Action additionalAction)
+ private void GetTileDataToView(ResourceCategory key, TreeNodeCollection collection, Action additionalAction)
{
List textureInfos = key switch
{
- AnimationCategory.Blocks => Tiles.BlockTileInfos,
- AnimationCategory.Items => Tiles.ItemTileInfos,
+ ResourceCategory.BlockAnimation => Tiles.BlockTileInfos,
+ ResourceCategory.ItemAnimation => Tiles.ItemTileInfos,
_ => throw new InvalidOperationException(nameof(key))
};
Profiler.Start();
@@ -126,7 +126,7 @@ namespace PckStudio.Forms.Additional_Popups.Animation
private void AcceptBtn_Click(object sender, EventArgs e)
{
- if (string.IsNullOrEmpty(selectedTile))
+ if (string.IsNullOrEmpty(selectedTile.InternalName))
{
DialogResult = DialogResult.Cancel;
return;
diff --git a/PCK-Studio/Forms/Additional-Popups/EntityForms/AddEntry.cs b/PCK-Studio/Forms/Additional-Popups/EntityForms/AddEntry.cs
index 85b9a19c..afc01e9e 100644
--- a/PCK-Studio/Forms/Additional-Popups/EntityForms/AddEntry.cs
+++ b/PCK-Studio/Forms/Additional-Popups/EntityForms/AddEntry.cs
@@ -3,14 +3,13 @@ using System.Collections.Generic;
using System.Windows.Forms;
using MetroFramework.Forms;
using Newtonsoft.Json.Linq;
+using PckStudio.Internal.Json;
namespace PckStudio.Forms.Additional_Popups.EntityForms
{
public partial class AddEntry : MetroForm
{
string selectedEntity = "";
-
- private static JObject EntityJSONData = JObject.Parse(Properties.Resources.entityData);
public string SelectedEntity => selectedEntity;
List treeViewEntityCache = new List();
@@ -24,37 +23,31 @@ namespace PckStudio.Forms.Additional_Popups.EntityForms
entities.Images.AddRange(entityImages);
treeViewEntity.ImageList = entities;
- try
+ var entityInfos = dataType switch
{
- int i = 0;
+ "models" => Entities.ModelInfos,
+ "materials" => Entities.MaterialInfos,
+ "behaviours" => Entities.BehaviourInfos,
+ _ => null,
+ };
- if (EntityJSONData[dataType] != null)
+ int i = 0;
+
+ foreach(var entity in entityInfos)
+ {
+ TreeNode entityNode = new TreeNode(entity.DisplayName)
{
- foreach (JObject content in EntityJSONData[dataType].Children())
- {
- foreach (JProperty prop in content.Properties())
- {
- if (!string.IsNullOrEmpty((string)prop.Value))
- {
- TreeNode entityNode = new TreeNode((string)prop.Value)
- {
- Tag = prop.Name,
- ImageIndex = i,
- SelectedImageIndex = i,
- };
- treeViewEntity.Nodes.Add(entityNode);
- treeViewEntityCache.Add(entityNode);
- }
- i++;
- }
- }
+ Tag = entity.InternalName,
+ ImageIndex = i,
+ SelectedImageIndex = i,
+ };
+ i++;
+ if (!String.IsNullOrEmpty(entity.InternalName))
+ {
+ treeViewEntity.Nodes.Add(entityNode);
+ treeViewEntityCache.Add(entityNode);
}
}
- catch (Newtonsoft.Json.JsonException j_ex)
- {
- MessageBox.Show(j_ex.Message, "Error");
- return;
- }
treeViewEntity.Sort();
}
@@ -64,7 +57,6 @@ namespace PckStudio.Forms.Additional_Popups.EntityForms
if (e.Node.Tag is string entityData)
{
selectedEntity = entityData;
- Console.WriteLine(selectedEntity);
}
}
diff --git a/PCK-Studio/Forms/Additional-Popups/Grf/AddParameter.cs b/PCK-Studio/Forms/Additional-Popups/Grf/AddParameter.cs
index 36f3884b..ee5795d6 100644
--- a/PCK-Studio/Forms/Additional-Popups/Grf/AddParameter.cs
+++ b/PCK-Studio/Forms/Additional-Popups/Grf/AddParameter.cs
@@ -44,7 +44,7 @@ namespace PckStudio.Forms.Additional_Popups.Grf
{
if (string.IsNullOrWhiteSpace(ParameterName) || string.IsNullOrWhiteSpace(ParameterValue))
{
- MessageBox.Show("Name and Value need valid values");
+ MessageBox.Show(this, "Name and Value need valid values");
return;
}
DialogResult = DialogResult.OK;
diff --git a/PCK-Studio/Forms/Additional-Popups/ItemSelectionPopUp.cs b/PCK-Studio/Forms/Additional-Popups/ItemSelectionPopUp.cs
index c5017b39..f84b95a5 100644
--- a/PCK-Studio/Forms/Additional-Popups/ItemSelectionPopUp.cs
+++ b/PCK-Studio/Forms/Additional-Popups/ItemSelectionPopUp.cs
@@ -6,6 +6,7 @@ namespace PckStudio.Forms.Additional_Popups
public partial class ItemSelectionPopUp : MetroFramework.Forms.MetroForm
{
public string SelectedItem => DialogResult == DialogResult.OK ? ComboBox.Text : string.Empty;
+ public int SelectedIndex => DialogResult == DialogResult.OK ? ComboBox.SelectedIndex : -1;
public string LabelText
{
diff --git a/PCK-Studio/Forms/Editor/ANIMEditor.cs b/PCK-Studio/Forms/Editor/ANIMEditor.cs
index 3184ae33..172af4a1 100644
--- a/PCK-Studio/Forms/Editor/ANIMEditor.cs
+++ b/PCK-Studio/Forms/Editor/ANIMEditor.cs
@@ -246,11 +246,11 @@ namespace PckStudio.Forms.Editor
string value = string.Empty;
while (!SkinANIM.IsValidANIM(value))
{
- if (!string.IsNullOrWhiteSpace(value)) MessageBox.Show($"The following value \"{value}\" is not valid. Please try again.");
+ if (!string.IsNullOrWhiteSpace(value)) MessageBox.Show(this, $"The following value \"{value}\" is not valid. Please try again.");
TextPrompt diag = new TextPrompt(value);
diag.LabelText = "ANIM";
diag.OKButtonText = "Ok";
- if (diag.ShowDialog() == DialogResult.OK)
+ if (diag.ShowDialog(this) == DialogResult.OK)
{
value = diag.NewText;
}
@@ -276,7 +276,7 @@ namespace PckStudio.Forms.Editor
FileName = animValue.Text + ".png",
Filter = "Skin textures|*.png"
};
- if (saveFileDialog.ShowDialog() != DialogResult.OK)
+ if (saveFileDialog.ShowDialog(this) != DialogResult.OK)
return;
bool isSlim = ruleset.Value.GetFlag(SkinAnimFlag.SLIM_MODEL);
bool is64x64 = ruleset.Value.GetFlag(SkinAnimFlag.RESOLUTION_64x64);
@@ -349,7 +349,7 @@ namespace PckStudio.Forms.Editor
diag.ButtonText = "Presets";
diag.ButtonText = "Load";
- if (diag.ShowDialog() != DialogResult.OK)
+ if (diag.ShowDialog(this) != DialogResult.OK)
return;
var templateANIM = new SkinANIM(Templates[diag.SelectedItem]);
diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs b/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs
index dfe5cdfa..4fed8d2a 100644
--- a/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs
+++ b/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs
@@ -48,7 +48,6 @@
this.gifToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.bulkAnimationSpeedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.changeTileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.frameTimeandTicksToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.howToInterpolation = new System.Windows.Forms.ToolStripMenuItem();
@@ -215,8 +214,7 @@
// editToolStripMenuItem
//
this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.bulkAnimationSpeedToolStripMenuItem,
- this.changeTileToolStripMenuItem});
+ this.bulkAnimationSpeedToolStripMenuItem});
this.editToolStripMenuItem.ForeColor = System.Drawing.Color.White;
this.editToolStripMenuItem.Name = "editToolStripMenuItem";
this.editToolStripMenuItem.Size = new System.Drawing.Size(46, 20);
@@ -229,13 +227,6 @@
this.bulkAnimationSpeedToolStripMenuItem.Text = "Set Bulk Animation Speed";
this.bulkAnimationSpeedToolStripMenuItem.Click += new System.EventHandler(this.bulkAnimationSpeedToolStripMenuItem_Click);
//
- // changeTileToolStripMenuItem
- //
- this.changeTileToolStripMenuItem.Name = "changeTileToolStripMenuItem";
- this.changeTileToolStripMenuItem.Size = new System.Drawing.Size(210, 22);
- this.changeTileToolStripMenuItem.Text = "Change Tile";
- this.changeTileToolStripMenuItem.Click += new System.EventHandler(this.changeTileToolStripMenuItem_Click);
- //
// helpToolStripMenuItem
//
this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
@@ -337,7 +328,6 @@
this.animationPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.animationPictureBox.TabIndex = 16;
this.animationPictureBox.TabStop = false;
- this.animationPictureBox.UseBlendColor = false;
//
// AnimationEditor
//
@@ -382,7 +372,6 @@
private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem bulkAnimationSpeedToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem changeTileToolStripMenuItem;
private MetroFramework.Controls.MetroLabel tileLabel;
private System.Windows.Forms.ToolStripMenuItem howToInterpolation;
private System.Windows.Forms.ToolStripMenuItem editorControlsToolStripMenuItem;
diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs
index 456c5b32..6df69bf8 100644
--- a/PCK-Studio/Forms/Editor/AnimationEditor.cs
+++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs
@@ -32,43 +32,34 @@ using PckStudio.Forms.Additional_Popups.Animation;
using PckStudio.Extensions;
using PckStudio.Properties;
using PckStudio.Internal;
-using PckStudio.Internal.Json;
-using PckStudio.Helper;
using AnimatedGif;
+using PckStudio.Internal.Deserializer;
namespace PckStudio.Forms.Editor
{
public partial class AnimationEditor : MetroForm
{
+ public Animation Result => _animation;
+
private Animation _animation;
-
- private string _tileName = string.Empty;
-
- public string FinalPath => $"res/textures/{_animation.CategoryString}/{_tileName}.png";
-
- private static readonly string[] specialTileNames = { "clock", "compass" };
-
- private static bool IsSpecialTile(string name)
- {
- return name.ToLower().EqualsAny(specialTileNames);
- }
-
+ private bool _isSpecialTile;
private AnimationEditor()
{
InitializeComponent();
toolStripSeparator1.Visible = saveToolStripMenuItem1.Visible = !Settings.Default.AutoSaveChanges;
}
- internal AnimationEditor(Animation animation, string name)
+ internal AnimationEditor(Animation animation, string displayName, bool isSpecialTile = false)
: this()
{
_ = animation ?? throw new ArgumentNullException(nameof(animation));
_animation = animation;
- _tileName = name;
+ tileLabel.Text = displayName;
+ _isSpecialTile = isSpecialTile;
}
- internal AnimationEditor(Animation animation, string name, Color blendColor)
- : this(animation, name)
+ internal AnimationEditor(Animation animation, string displayName, Color blendColor)
+ : this(animation, displayName)
{
animationPictureBox.UseBlendColor = true;
animationPictureBox.BlendColor = blendColor;
@@ -79,15 +70,12 @@ namespace PckStudio.Forms.Editor
bulkAnimationSpeedToolStripMenuItem.Enabled =
importToolStripMenuItem.Enabled =
exportAsToolStripMenuItem.Enabled =
- changeTileToolStripMenuItem.Enabled =
- InterpolationCheckbox.Visible = !IsSpecialTile(_tileName);
+ InterpolationCheckbox.Visible = !_isSpecialTile;
}
private void AnimationEditor_Load(object sender, EventArgs e)
{
ValidateToolStrip();
-
- SetTileLabel();
LoadAnimationTreeView();
}
@@ -170,7 +158,7 @@ namespace PckStudio.Forms.Editor
private void saveToolStripMenuItem1_Click(object sender, EventArgs e)
{
- if (!IsSpecialTile(_tileName) && _animation is not null && _animation.FrameCount > 0)
+ if (!_isSpecialTile && _animation is not null && _animation.FrameCount > 0)
{
DialogResult = DialogResult.OK;
return;
@@ -279,7 +267,7 @@ namespace PckStudio.Forms.Editor
diag.SaveBtn.Text = "Add";
if (diag.ShowDialog(this) == DialogResult.OK)
{
- _animation.AddFrame(diag.FrameTextureIndex, IsSpecialTile(_tileName) ? Animation.MinimumFrameTime : diag.FrameTime);
+ _animation.AddFrame(diag.FrameTextureIndex, _isSpecialTile ? Animation.MinimumFrameTime : diag.FrameTime);
UpdateTreeView();
}
}
@@ -308,6 +296,7 @@ namespace PckStudio.Forms.Editor
private void importJavaAnimationToolStripMenuItem_Click(object sender, EventArgs e)
{
if (MessageBox.Show(
+ this,
"This feature will replace the existing animation data. " +
"It might fail if the selected animation script is invalid. " +
"Are you sure that you want to continue?",
@@ -329,55 +318,26 @@ namespace PckStudio.Forms.Editor
string textureFile = fileDialog.FileName.Substring(0, fileDialog.FileName.Length - ".mcmeta".Length);
if (!File.Exists(textureFile))
{
- MessageBox.Show(textureFile + " was not found", "Texture not found");
+ MessageBox.Show(this, textureFile + " was not found", "Texture not found");
return;
}
try
{
var img = Image.FromFile(textureFile);
JObject mcmeta = JObject.Parse(File.ReadAllText(fileDialog.FileName));
- Animation javaAnimation = AnimationHelper.GetAnimationFromJavaAnimation(mcmeta, img);
- javaAnimation.Category = _animation.Category;
+ Animation javaAnimation = AnimationDeserializer.DefaultDeserializer.DeserializeJavaAnimation(mcmeta, img);
+ //javaAnimation.Category = _animation.Category;
_animation = javaAnimation;
LoadAnimationTreeView();
}
catch (JsonException j_ex)
{
- MessageBox.Show(j_ex.Message, "Invalid animation");
+ MessageBox.Show(this, j_ex.Message, "Invalid animation");
return;
}
}
- private void changeTileToolStripMenuItem_Click(object sender, EventArgs e)
- {
- StopAnimation();
- using (ChangeTile diag = new ChangeTile())
- {
- if (diag.ShowDialog(this) != DialogResult.OK)
- return;
-
- Debug.WriteLine($"{diag.SelectedTile}");
- _animation.Category = diag.Category;
- _tileName = diag.SelectedTile;
-
- ValidateToolStrip();
-
- SetTileLabel();
- }
- }
-
- private void SetTileLabel()
- {
- var textureInfos = _animation.Category switch
- {
- AnimationCategory.Blocks => Tiles.BlockTileInfos,
- AnimationCategory.Items => Tiles.ItemTileInfos,
- _ => throw new ArgumentOutOfRangeException(_animation.Category.ToString())
- };
- tileLabel.Text = textureInfos.FirstOrDefault(p => p.InternalName == _tileName)?.DisplayName ?? _tileName;
- }
-
- private void exportJavaAnimationToolStripMenuItem_Click(object sender, EventArgs e)
+ private void exportJavaAnimationToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog fileDialog = new SaveFileDialog();
fileDialog.Title = "Please choose where you want to save your new animation";
@@ -392,29 +352,29 @@ namespace PckStudio.Forms.Editor
// removes ".mcmeta" from filename
string texturePath = Path.Combine(Path.GetDirectoryName(filename), Path.GetFileNameWithoutExtension(filename));
finalTexture.Save(texturePath);
- MessageBox.Show("Animation was successfully exported as " + Path.GetFileName(filename), "Export successful!");
+ MessageBox.Show(this, "Animation was successfully exported as " + Path.GetFileName(filename), "Export successful!");
}
}
private void howToInterpolation_Click(object sender, EventArgs e)
{
- MessageBox.Show("The Interpolation effect is when the animtion smoothly translates between the frames instead of simply displaying the next one. This can be seen with some vanilla Minecraft textures such as Magma and Prismarine.", "Interpolation");
+ MessageBox.Show(this, "The Interpolation effect is when the animtion smoothly translates between the frames instead of simply displaying the next one. This can be seen with some vanilla Minecraft textures such as Magma and Prismarine.", "Interpolation");
}
private void editorControlsToolStripMenuItem_Click(object sender, EventArgs e)
{
- MessageBox.Show("Simply drag and drop frames in the tree to rearrange your animation.\n\n" +
+ MessageBox.Show(this, "Simply drag and drop frames in the tree to rearrange your animation.\n\n" +
"You can also preview your animation at any time by simply pressing the button under the animation display.", "Editor Controls");
}
private void setBulkSpeedToolStripMenuItem_Click(object sender, EventArgs e)
{
- MessageBox.Show("You can edit the frame and its speed by double clicking a frame in the tree. If you'd like to change the entire animation's speed, you can do so with the \"Set Bulk Animation Speed\" button in the \"Tools\" tab", "How to use Bulk Animation tool");
+ MessageBox.Show(this, "You can edit the frame and its speed by double clicking a frame in the tree. If you'd like to change the entire animation's speed, you can do so with the \"Set Bulk Animation Speed\" button in the \"Tools\" tab", "How to use Bulk Animation tool");
}
private void javaAnimationSupportToolStripMenuItem_Click(object sender, EventArgs e)
{
- MessageBox.Show("You can import any valid Java Edition tile animations into your pck by opening an mcmeta.\n\n" +
+ MessageBox.Show(this, "You can import any valid Java Edition tile animations into your pck by opening an mcmeta.\n\n" +
"You can also export your animation as an Java Edition tile animation. It will also export the actual texture in the same spot.", "Java Edition Support");
}
@@ -448,7 +408,7 @@ namespace PckStudio.Forms.Editor
var gif = Image.FromFile(fileDialog.FileName);
if (!gif.RawFormat.Equals(ImageFormat.Gif))
{
- MessageBox.Show("Selected file is not a gif", "Invalid file", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ MessageBox.Show(this, "Selected file is not a gif", "Invalid file", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
@@ -466,11 +426,11 @@ namespace PckStudio.Forms.Editor
textures.Add(new Bitmap(gif, oldResolution, oldResolution));
}
- var animCat = _animation.Category;
-
- _animation = new Animation(textures, string.Empty);
- _animation.Interpolate = InterpolationCheckbox.Checked;
- _animation.Category = animCat;
+ // TODO: Add function or a other way to initialize the frames by textures.
+ // Currently single frames only get added when an anim has an invalid format or is empty.
+ // -Miku
+ _animation = new Animation(textures, "");
+ _animation.Interpolate = InterpolationCheckbox.Checked;
LoadAnimationTreeView();
}
@@ -481,7 +441,7 @@ namespace PckStudio.Forms.Editor
Filter = "PNG Files | *.png",
Title = "Select a PNG File",
};
- if (ofd.ShowDialog() != DialogResult.OK)
+ if (ofd.ShowDialog(this) != DialogResult.OK)
return;
Image img = Image.FromFile(ofd.FileName);
var textures = img.Split(ImageLayoutDirection.Vertical);
@@ -493,7 +453,7 @@ namespace PckStudio.Forms.Editor
{
var fileDialog = new SaveFileDialog()
{
- FileName = _tileName,
+ FileName = tileLabel.Text,
Filter = "GIF file|*.gif"
};
if (fileDialog.ShowDialog(this) != DialogResult.OK)
diff --git a/PCK-Studio/Forms/Editor/AudioEditor.cs b/PCK-Studio/Forms/Editor/AudioEditor.cs
index 3ac86ddc..7658640e 100644
--- a/PCK-Studio/Forms/Editor/AudioEditor.cs
+++ b/PCK-Studio/Forms/Editor/AudioEditor.cs
@@ -124,8 +124,8 @@ namespace PckStudio.Forms.Editor
if (!parent.CreateDataFolder()) return;
string FileName = Path.Combine(parent.GetDataPath(), entry.Text + ".binka");
- if (File.Exists(FileName)) MessageBox.Show("\"" + entry.Text + ".binka\" exists in the \"Data\" folder", "File found");
- else MessageBox.Show("\"" + entry.Text + ".binka\" does not exist in the \"Data\" folder. The game will crash when attempting to load this track.", "File missing");
+ if (File.Exists(FileName)) MessageBox.Show(this, "\"" + entry.Text + ".binka\" exists in the \"Data\" folder", "File found");
+ else MessageBox.Show(this, "\"" + entry.Text + ".binka\" does not exist in the \"Data\" folder. The game will crash when attempting to load this track.", "File missing");
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
@@ -145,7 +145,7 @@ namespace PckStudio.Forms.Editor
if (available.Length > 0)
{
using ItemSelectionPopUp add = new ItemSelectionPopUp(available);
- if (add.ShowDialog() == DialogResult.OK)
+ if (add.ShowDialog(this) == DialogResult.OK)
audioFile.AddCategory(GetCategoryId(add.SelectedItem));
else return;
@@ -165,7 +165,7 @@ namespace PckStudio.Forms.Editor
}
else
{
- MessageBox.Show("There are no more categories that could be added", "All possible categories are used");
+ MessageBox.Show(this, "There are no more categories that could be added", "All possible categories are used");
}
}
@@ -179,7 +179,7 @@ namespace PckStudio.Forms.Editor
ofn.Multiselect = true;
ofn.Filter = "Supported audio files (*.binka,*.wav)|*.binka;*.wav";
ofn.Title = "Please choose WAV or BINKA files to add to your pack";
- ofn.ShowDialog();
+ ofn.ShowDialog(this);
ofn.Dispose();
if (string.IsNullOrEmpty(ofn.FileName)) return; // Return if name is null or if the user cancels
@@ -268,7 +268,7 @@ namespace PckStudio.Forms.Editor
diag_text += " Pressing yes will replace the existing file. By pressing no, the song entry will be added without affecting the file." +
"You can also cancel this operation and all files in queue.";
- DialogResult user_prompt = MessageBox.Show(diag_text, "File already exists", MessageBoxButtons.YesNoCancel);
+ DialogResult user_prompt = MessageBox.Show(this, diag_text, "File already exists", MessageBoxButtons.YesNoCancel);
while (user_prompt == DialogResult.None) ; // Stops the editor from adding or processing the file until the user has made their choice
if (user_prompt == DialogResult.Cancel)
{
@@ -364,7 +364,7 @@ namespace PckStudio.Forms.Editor
!audioFile.HasCategory(PckAudioFile.AudioCategory.EAudioType.Nether) ||
!audioFile.HasCategory(PckAudioFile.AudioCategory.EAudioType.End))
{
- MessageBox.Show("Your changes were not saved. The game will crash when loading your pack if the Overworld, Nether and End categories don't all exist with at least one valid song.", "Mandatory Categories Missing");
+ MessageBox.Show(this, "Your changes were not saved. The game will crash when loading your pack if the Overworld, Nether and End categories don't all exist with at least one valid song.", "Mandatory Categories Missing");
return;
}
@@ -375,7 +375,7 @@ namespace PckStudio.Forms.Editor
{
if (category.SongNames.Count < 1)
{
- MessageBox.Show("The game will crash upon loading your pack if any of the categories are empty. Please remove or occupy the category.", "Empty Category");
+ MessageBox.Show(this, "The game will crash upon loading your pack if any of the categories are empty. Please remove or occupy the category.", "Empty Category");
return;
}
@@ -385,7 +385,7 @@ namespace PckStudio.Forms.Editor
if (!File.Exists(FileName))
{
songs_missing = true;
- MessageBox.Show("\"" + song + ".binka\" does not exist in the \"Data\" folder. The game will crash when attempting to load this track.", "File missing");
+ MessageBox.Show(this, "\"" + song + ".binka\" does not exist in the \"Data\" folder. The game will crash when attempting to load this track.", "File missing");
}
}
@@ -406,7 +406,7 @@ namespace PckStudio.Forms.Editor
if (songs_missing)
{
- MessageBox.Show("Failed to save AudioData file because there are missing song entries", "Error");
+ MessageBox.Show(this, "Failed to save AudioData file because there are missing song entries", "Error");
return;
}
@@ -421,7 +421,7 @@ namespace PckStudio.Forms.Editor
private void helpToolStripMenuItem_Click(object sender, EventArgs e)
{
- MessageBox.Show("Simply drag and drop BINKA or WAV audio files into the right tree to add them to the category selected on the left tree.\n\n" +
+ MessageBox.Show(this, "Simply drag and drop BINKA or WAV audio files into the right tree to add them to the category selected on the left tree.\n\n" +
"The \"Menu\" category will only play once when loading the pack, and never again.\n\n" +
"The \"Creative\" category will only play songs listed in that category, and unlike other editions of Minecraft, will NOT play songs from the Overworld category. You can fix this by clicking the checkbox found at the top of the form.\n\n" +
"The mini game categories will only play if you have your pack loaded in those mini games.\n\n" +
@@ -430,7 +430,7 @@ namespace PckStudio.Forms.Editor
private void deleteUnusedBINKAsToolStripMenuItem_Click(object sender, EventArgs e)
{
- DialogResult dr = MessageBox.Show("This will delete all unused BINKA songs in the Data directory. This cannot be undone. Are you sure you want to continue?", "Warning", MessageBoxButtons.YesNo);
+ DialogResult dr = MessageBox.Show(this, "This will delete all unused BINKA songs in the Data directory. This cannot be undone. Are you sure you want to continue?", "Warning", MessageBoxButtons.YesNo);
if (dr != DialogResult.Yes) return;
var totalSongList = new List();
foreach (string song in audioFile.Categories.SelectMany(cat => cat.SongNames))
@@ -458,17 +458,17 @@ namespace PckStudio.Forms.Editor
totalDeleted++;
}
}
- MessageBox.Show("Successfully deleted " + totalDeleted + " files", "Done");
+ MessageBox.Show(this, "Successfully deleted " + totalDeleted + " files", "Done");
}
private void howToAddSongsToolStripMenuItem_Click(object sender, EventArgs e)
{
- MessageBox.Show("Right click the right window and press \"Add Entry\" or drag and drop a valid WAV file into the editor's right window. You can also drop other BINKA files, either from the main game or using a tool like BinkMan. The editor will automatically put the song in the Data folder for you.", "How to add a song");
+ MessageBox.Show(this, "Right click the right window and press \"Add Entry\" or drag and drop a valid WAV file into the editor's right window. You can also drop other BINKA files, either from the main game or using a tool like BinkMan. The editor will automatically put the song in the Data folder for you.", "How to add a song");
}
private void whatAreTheCategoriesToolStripMenuItem_Click(object sender, EventArgs e)
{
- MessageBox.Show("Categories are pretty self explanatory. The game controls when each category should play.\n" +
+ MessageBox.Show(this, "Categories are pretty self explanatory. The game controls when each category should play.\n" +
"\nGAMEPLAY - Plays in the specified dimensions and game modes.\n" +
"-Overworld: Plays in survival mode and in Creative if no songs are set\n" +
"-Nether: Plays in the Nether.\n" +
@@ -484,17 +484,17 @@ namespace PckStudio.Forms.Editor
private void howToEditCreditsToolStripMenuItem_Click(object sender, EventArgs e)
{
- MessageBox.Show("Click Tools -> Credits Editor. This will allow you to edit all the credits easily in the pack easily. Only supports English credits at the moment. ","How to edit credits?");
+ MessageBox.Show(this, "Click Tools -> Credits Editor. This will allow you to edit all the credits easily in the pack easily. Only supports English credits at the moment. ","How to edit credits?");
}
private void optimizeDataFolderToolStripMenuItem_Click(object sender, EventArgs e)
{
- MessageBox.Show("Click Tools -> Delete Unused BINKA files. This will clean your folder of any unused songs.", "How to optimize the Data folder");
+ MessageBox.Show(this, "Click Tools -> Delete Unused BINKA files. This will clean your folder of any unused songs.", "How to optimize the Data folder");
}
private void BINKACompressionToolStripMenuItem_Click(object sender, EventArgs e)
{
- MessageBox.Show("The numerical up/down control is responsible for the level of compression used when converting WAV files. The default is 4, which was commonly used by 4J for the game's files.","BINKA Compression Level");
+ MessageBox.Show(this, "The numerical up/down control is responsible for the level of compression used when converting WAV files. The default is 4, which was commonly used by 4J for the game's files.","BINKA Compression Level");
}
private void openDataFolderToolStripMenuItem_Click(object sender, EventArgs e)
@@ -520,7 +520,7 @@ namespace PckStudio.Forms.Editor
ofn.Multiselect = true;
ofn.Filter = "Supported audio files (*.binka,*.wav)|*.binka;*.wav";
ofn.Title = "Please choose WAV or BINKA files to replace existing track files";
- ofn.ShowDialog();
+ ofn.ShowDialog(this);
ofn.Dispose();
if (string.IsNullOrEmpty(ofn.FileName)) return; // Return if name is null or if the user cancels
@@ -578,7 +578,7 @@ namespace PckStudio.Forms.Editor
{
using ItemSelectionPopUp add = new ItemSelectionPopUp(available);
add.ButtonText = "Save";
- if (add.ShowDialog() != DialogResult.OK) return;
+ if (add.ShowDialog(this) != DialogResult.OK) return;
audioFile.RemoveCategory(category.audioType);
@@ -592,13 +592,13 @@ namespace PckStudio.Forms.Editor
}
else
{
- MessageBox.Show("There are no categories that aren't already used", "All possible categories are used");
+ MessageBox.Show(this, "There are no categories that aren't already used", "All possible categories are used");
}
}
private void organizeTracksToolStripMenuItem_Click(object sender, EventArgs e)
{
- if(MessageBox.Show("This function will move all binka files in the \"Data\" folder into a \"Music\" folder, to keep your data better organized. Would you like to continue?", "Move tracks?", MessageBoxButtons.YesNo) == DialogResult.Yes)
+ if(MessageBox.Show(this, "This function will move all binka files in the \"Data\" folder into a \"Music\" folder, to keep your data better organized. Would you like to continue?", "Move tracks?", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
if (treeView1.Nodes.Count < 1 || !parent.CreateDataFolder()) return;
string musicdir = Path.Combine(parent.GetDataPath(), "Music");
diff --git a/PCK-Studio/Forms/Editor/BehaviourEditor.cs b/PCK-Studio/Forms/Editor/BehaviourEditor.cs
index 5e4dddde..057de695 100644
--- a/PCK-Studio/Forms/Editor/BehaviourEditor.cs
+++ b/PCK-Studio/Forms/Editor/BehaviourEditor.cs
@@ -14,6 +14,7 @@ using OMI.Formats.Pck;
using PckStudio.Properties;
using PckStudio.Internal;
using PckStudio.Extensions;
+using PckStudio.Internal.Json;
namespace PckStudio.Forms.Editor
{
@@ -23,7 +24,7 @@ namespace PckStudio.Forms.Editor
private readonly PckFileData _file;
BehaviourFile behaviourFile;
- private readonly JObject EntityJSONData = JObject.Parse(Properties.Resources.entityData);
+ private readonly List BehaviourData = Entities.BehaviourInfos;
void SetUpTree()
{
@@ -33,18 +34,10 @@ namespace PckStudio.Forms.Editor
{
TreeNode EntryNode = new TreeNode(entry.name);
- foreach (JObject content in EntityJSONData["behaviours"].Children())
- {
- var prop = content.Properties().FirstOrDefault(prop => prop.Name == entry.name);
- if (prop is JProperty)
- {
- EntryNode.Text = (string)prop.Value;
- EntryNode.ImageIndex = EntityJSONData["behaviours"].Children().ToList().IndexOf(content);
- EntryNode.SelectedImageIndex = EntryNode.ImageIndex;
- break;
- }
- }
-
+ var behaviour = BehaviourData.Find(b => b.InternalName == entry.name);
+ EntryNode.Text = behaviour.DisplayName;
+ EntryNode.ImageIndex = BehaviourData.IndexOf(behaviour);
+ EntryNode.SelectedImageIndex = EntryNode.ImageIndex;
EntryNode.Tag = entry;
foreach (var posOverride in entry.overrides)
@@ -83,10 +76,9 @@ namespace PckStudio.Forms.Editor
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
- if (e.Node is null) return;
+ if (treeView1.SelectedNode is null) return;
- bool isValidOverride = e.Node.Tag is BehaviourFile.RiderPositionOverride.PositionOverride &&
- treeView1.SelectedNode != null;
+ bool isValidOverride = treeView1.SelectedNode.Tag is BehaviourFile.RiderPositionOverride.PositionOverride;
MobIsTamedCheckbox.Enabled = isValidOverride;
MobHasSaddleCheckbox.Enabled = isValidOverride;
xUpDown.Enabled = isValidOverride;
@@ -97,7 +89,7 @@ namespace PckStudio.Forms.Editor
if (isValidOverride)
{
- var posOverride = e.Node.Tag as BehaviourFile.RiderPositionOverride.PositionOverride;
+ var posOverride = treeView1.SelectedNode.Tag as BehaviourFile.RiderPositionOverride.PositionOverride;
MobIsTamedCheckbox.Checked = posOverride.EntityIsTamed;
MobHasSaddleCheckbox.Checked = posOverride.EntityHasSaddle;
xUpDown.Value = (decimal)posOverride.x;
@@ -160,7 +152,7 @@ namespace PckStudio.Forms.Editor
var diag = new AddEntry("behaviours", ApplicationScope.EntityImages);
diag.acceptBtn.Text = "Save";
- if (diag.ShowDialog() == DialogResult.OK)
+ if (diag.ShowDialog(this) == DialogResult.OK)
{
if (String.IsNullOrEmpty(diag.SelectedEntity)) return;
if (behaviourFile.entries.FindAll(behaviour => behaviour.name == diag.SelectedEntity).Count() > 0)
@@ -172,17 +164,11 @@ namespace PckStudio.Forms.Editor
entry.name = diag.SelectedEntity;
treeView1.SelectedNode.Tag = entry;
- foreach (JObject content in EntityJSONData["behaviours"].Children())
- {
- var prop = content.Properties().FirstOrDefault(prop => prop.Name == entry.name);
- if (prop is JProperty)
- {
- treeView1.SelectedNode.Text = (string)prop.Value;
- treeView1.SelectedNode.ImageIndex = EntityJSONData["behaviours"].Children().ToList().IndexOf(content);
- treeView1.SelectedNode.SelectedImageIndex = treeView1.SelectedNode.ImageIndex;
- break;
- }
- }
+ var behaviour = BehaviourData.Find(b => b.InternalName == entry.name);
+
+ treeView1.SelectedNode.Text = behaviour.DisplayName;
+ treeView1.SelectedNode.ImageIndex = BehaviourData.IndexOf(behaviour);
+ treeView1.SelectedNode.SelectedImageIndex = treeView1.SelectedNode.ImageIndex;
}
}
@@ -213,7 +199,7 @@ namespace PckStudio.Forms.Editor
{
var diag = new AddEntry("behaviours", ApplicationScope.EntityImages);
- if(diag.ShowDialog() == DialogResult.OK)
+ if(diag.ShowDialog(this) == DialogResult.OK)
{
if (string.IsNullOrEmpty(diag.SelectedEntity)) return;
if (behaviourFile.entries.FindAll(behaviour => behaviour.name == diag.SelectedEntity).Count() > 0)
@@ -225,17 +211,12 @@ namespace PckStudio.Forms.Editor
TreeNode NewOverrideNode = new TreeNode(NewOverride.name);
NewOverrideNode.Tag = NewOverride;
- foreach (JObject content in EntityJSONData["behaviours"].Children())
- {
- var prop = content.Properties().FirstOrDefault(prop => prop.Name == NewOverride.name);
- if (prop is JProperty)
- {
- NewOverrideNode.Text = (string)prop.Value;
- NewOverrideNode.ImageIndex = EntityJSONData["behaviours"].Children().ToList().IndexOf(content);
- NewOverrideNode.SelectedImageIndex = NewOverrideNode.ImageIndex;
- break;
- }
- }
+
+ var behaviour = BehaviourData.Find(b => b.InternalName == NewOverride.name);
+ NewOverrideNode.Text = behaviour.DisplayName;
+ NewOverrideNode.ImageIndex = BehaviourData.IndexOf(behaviour);
+ NewOverrideNode.SelectedImageIndex = NewOverrideNode.ImageIndex;
+
treeView1.Nodes.Add(NewOverrideNode);
treeView1.SelectedNode = NewOverrideNode;
diff --git a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs
index c5b4c1b6..c9d0ffcc 100644
--- a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs
+++ b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs
@@ -51,7 +51,21 @@ namespace PckStudio.Forms.Editor
this.menuStrip = new System.Windows.Forms.MenuStrip();
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
- this.targetUpdateToolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.waterTab = new System.Windows.Forms.TabPage();
+ this.waterTreeView = new System.Windows.Forms.TreeView();
+ this.ColorContextMenu = new MetroFramework.Controls.MetroContextMenu(this.components);
+ this.copyColorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.pasteColorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.restoreOriginalColorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.underwaterTreeView = new System.Windows.Forms.TreeView();
+ this.fogTreeView = new System.Windows.Forms.TreeView();
+ this.colorsTab = new System.Windows.Forms.TabPage();
+ this.colorTreeView = new System.Windows.Forms.TreeView();
+ this.tabControl = new MetroFramework.Controls.MetroTabControl();
+ this.underwaterTab = new System.Windows.Forms.TabPage();
+ this.fogTab = new System.Windows.Forms.TabPage();
+ this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.targetUpdateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.TU12ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.TU13ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.TU14ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -65,19 +79,7 @@ namespace PckStudio.Forms.Editor
this.TU54ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.TU69ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this._1_9_1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.waterTab = new System.Windows.Forms.TabPage();
- this.waterTreeView = new System.Windows.Forms.TreeView();
- this.ColorContextMenu = new MetroFramework.Controls.MetroContextMenu(this.components);
- this.restoreOriginalColorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.copyColorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.pasteColorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.underwaterTreeView = new System.Windows.Forms.TreeView();
- this.fogTreeView = new System.Windows.Forms.TreeView();
- this.colorsTab = new System.Windows.Forms.TabPage();
- this.colorTreeView = new System.Windows.Forms.TreeView();
- this.tabControl = new MetroFramework.Controls.MetroTabControl();
- this.underwaterTab = new System.Windows.Forms.TabPage();
- this.fogTab = new System.Windows.Forms.TabPage();
+ this.stripPS4BiomesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.metroPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).BeginInit();
@@ -239,6 +241,7 @@ namespace PckStudio.Forms.Editor
//
// colorTextbox
//
+ this.colorTextbox.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
//
//
//
@@ -254,7 +257,7 @@ namespace PckStudio.Forms.Editor
this.colorTextbox.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible1")));
this.colorTextbox.Lines = new string[0];
resources.ApplyResources(this.colorTextbox, "colorTextbox");
- this.colorTextbox.MaxLength = 32767;
+ this.colorTextbox.MaxLength = 6;
this.colorTextbox.Name = "colorTextbox";
this.colorTextbox.PasswordChar = '\0';
this.colorTextbox.ScrollBars = System.Windows.Forms.ScrollBars.None;
@@ -267,6 +270,7 @@ namespace PckStudio.Forms.Editor
this.colorTextbox.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109)))));
this.colorTextbox.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel);
this.colorTextbox.TextChanged += new System.EventHandler(this.colorBox_TextChanged);
+ this.colorTextbox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.colorTextbox_KeyPress);
//
// metroLabel1
//
@@ -287,7 +291,7 @@ namespace PckStudio.Forms.Editor
this.menuStrip.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fileToolStripMenuItem,
- this.targetUpdateToolToolStripMenuItem});
+ this.toolsToolStripMenuItem});
this.menuStrip.Name = "menuStrip";
//
// fileToolStripMenuItem
@@ -304,9 +308,126 @@ namespace PckStudio.Forms.Editor
this.saveToolStripMenuItem1.Name = "saveToolStripMenuItem1";
this.saveToolStripMenuItem1.Click += new System.EventHandler(this.saveToolStripMenuItem1_Click);
//
- // targetUpdateToolToolStripMenuItem
+ // waterTab
//
- this.targetUpdateToolToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.waterTab.BackColor = System.Drawing.SystemColors.WindowFrame;
+ this.waterTab.Controls.Add(this.waterTreeView);
+ resources.ApplyResources(this.waterTab, "waterTab");
+ this.waterTab.Name = "waterTab";
+ //
+ // waterTreeView
+ //
+ this.waterTreeView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.waterTreeView.ContextMenuStrip = this.ColorContextMenu;
+ resources.ApplyResources(this.waterTreeView, "waterTreeView");
+ this.waterTreeView.ForeColor = System.Drawing.Color.White;
+ this.waterTreeView.Name = "waterTreeView";
+ this.waterTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView2_AfterSelect);
+ this.waterTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView2_KeyDown);
+ //
+ // ColorContextMenu
+ //
+ this.ColorContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.copyColorToolStripMenuItem,
+ this.pasteColorToolStripMenuItem,
+ this.restoreOriginalColorToolStripMenuItem});
+ this.ColorContextMenu.Name = "ColorContextMenu";
+ resources.ApplyResources(this.ColorContextMenu, "ColorContextMenu");
+ //
+ // copyColorToolStripMenuItem
+ //
+ this.copyColorToolStripMenuItem.Name = "copyColorToolStripMenuItem";
+ resources.ApplyResources(this.copyColorToolStripMenuItem, "copyColorToolStripMenuItem");
+ this.copyColorToolStripMenuItem.Click += new System.EventHandler(this.copyColorToolStripMenuItem_Click);
+ //
+ // pasteColorToolStripMenuItem
+ //
+ this.pasteColorToolStripMenuItem.Name = "pasteColorToolStripMenuItem";
+ resources.ApplyResources(this.pasteColorToolStripMenuItem, "pasteColorToolStripMenuItem");
+ this.pasteColorToolStripMenuItem.Click += new System.EventHandler(this.pasteColorToolStripMenuItem_Click);
+ //
+ // restoreOriginalColorToolStripMenuItem
+ //
+ this.restoreOriginalColorToolStripMenuItem.Name = "restoreOriginalColorToolStripMenuItem";
+ resources.ApplyResources(this.restoreOriginalColorToolStripMenuItem, "restoreOriginalColorToolStripMenuItem");
+ this.restoreOriginalColorToolStripMenuItem.Click += new System.EventHandler(this.restoreOriginalColorToolStripMenuItem_Click);
+ //
+ // underwaterTreeView
+ //
+ this.underwaterTreeView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.underwaterTreeView.ContextMenuStrip = this.ColorContextMenu;
+ this.underwaterTreeView.ForeColor = System.Drawing.Color.White;
+ resources.ApplyResources(this.underwaterTreeView, "underwaterTreeView");
+ this.underwaterTreeView.Name = "underwaterTreeView";
+ this.underwaterTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView3_AfterSelect);
+ this.underwaterTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView3_KeyDown);
+ //
+ // fogTreeView
+ //
+ this.fogTreeView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.fogTreeView.ContextMenuStrip = this.ColorContextMenu;
+ this.fogTreeView.ForeColor = System.Drawing.Color.White;
+ resources.ApplyResources(this.fogTreeView, "fogTreeView");
+ this.fogTreeView.Name = "fogTreeView";
+ this.fogTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView4_AfterSelect);
+ this.fogTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView4_KeyDown);
+ //
+ // colorsTab
+ //
+ this.colorsTab.BackColor = System.Drawing.SystemColors.WindowFrame;
+ this.colorsTab.Controls.Add(this.colorTreeView);
+ resources.ApplyResources(this.colorsTab, "colorsTab");
+ this.colorsTab.Name = "colorsTab";
+ //
+ // colorTreeView
+ //
+ this.colorTreeView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.colorTreeView.ContextMenuStrip = this.ColorContextMenu;
+ resources.ApplyResources(this.colorTreeView, "colorTreeView");
+ this.colorTreeView.ForeColor = System.Drawing.Color.White;
+ this.colorTreeView.Name = "colorTreeView";
+ this.colorTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
+ this.colorTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView1_KeyDown);
+ //
+ // tabControl
+ //
+ resources.ApplyResources(this.tabControl, "tabControl");
+ this.tabControl.Controls.Add(this.colorsTab);
+ this.tabControl.Controls.Add(this.waterTab);
+ this.tabControl.Controls.Add(this.underwaterTab);
+ this.tabControl.Controls.Add(this.fogTab);
+ this.tabControl.Name = "tabControl";
+ this.tabControl.SelectedIndex = 0;
+ this.tabControl.Style = MetroFramework.MetroColorStyle.White;
+ this.tabControl.Theme = MetroFramework.MetroThemeStyle.Dark;
+ this.tabControl.UseSelectable = true;
+ //
+ // underwaterTab
+ //
+ this.underwaterTab.BackColor = System.Drawing.SystemColors.WindowFrame;
+ this.underwaterTab.Controls.Add(this.underwaterTreeView);
+ resources.ApplyResources(this.underwaterTab, "underwaterTab");
+ this.underwaterTab.Name = "underwaterTab";
+ //
+ // fogTab
+ //
+ this.fogTab.BackColor = System.Drawing.SystemColors.WindowFrame;
+ this.fogTab.Controls.Add(this.fogTreeView);
+ resources.ApplyResources(this.fogTab, "fogTab");
+ this.fogTab.Name = "fogTab";
+ //
+ // toolsToolStripMenuItem
+ //
+ this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.stripPS4BiomesToolStripMenuItem,
+ this.targetUpdateToolStripMenuItem});
+ this.toolsToolStripMenuItem.ForeColor = System.Drawing.Color.White;
+ this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem";
+ resources.ApplyResources(this.toolsToolStripMenuItem, "toolsToolStripMenuItem");
+ //
+ // targetUpdateToolStripMenuItem
+ //
+ this.targetUpdateToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.TU12ToolStripMenuItem,
this.TU13ToolStripMenuItem,
this.TU14ToolStripMenuItem,
@@ -320,9 +441,8 @@ namespace PckStudio.Forms.Editor
this.TU54ToolStripMenuItem,
this.TU69ToolStripMenuItem,
this._1_9_1ToolStripMenuItem});
- this.targetUpdateToolToolStripMenuItem.ForeColor = System.Drawing.Color.White;
- this.targetUpdateToolToolStripMenuItem.Name = "targetUpdateToolToolStripMenuItem";
- resources.ApplyResources(this.targetUpdateToolToolStripMenuItem, "targetUpdateToolToolStripMenuItem");
+ this.targetUpdateToolStripMenuItem.Name = "targetUpdateToolStripMenuItem";
+ resources.ApplyResources(this.targetUpdateToolStripMenuItem, "targetUpdateToolStripMenuItem");
//
// TU12ToolStripMenuItem
//
@@ -389,105 +509,11 @@ namespace PckStudio.Forms.Editor
this._1_9_1ToolStripMenuItem.Name = "_1_9_1ToolStripMenuItem";
resources.ApplyResources(this._1_9_1ToolStripMenuItem, "_1_9_1ToolStripMenuItem");
//
- // waterTab
+ // stripPS4BiomesToolStripMenuItem
//
- this.waterTab.BackColor = System.Drawing.SystemColors.WindowFrame;
- this.waterTab.Controls.Add(this.waterTreeView);
- resources.ApplyResources(this.waterTab, "waterTab");
- this.waterTab.Name = "waterTab";
- //
- // waterTreeView
- //
- this.waterTreeView.ContextMenuStrip = this.ColorContextMenu;
- resources.ApplyResources(this.waterTreeView, "waterTreeView");
- this.waterTreeView.Name = "waterTreeView";
- this.waterTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView2_AfterSelect);
- this.waterTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView2_KeyDown);
- //
- // ColorContextMenu
- //
- this.ColorContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.restoreOriginalColorToolStripMenuItem,
- this.copyColorToolStripMenuItem,
- this.pasteColorToolStripMenuItem});
- this.ColorContextMenu.Name = "ColorContextMenu";
- resources.ApplyResources(this.ColorContextMenu, "ColorContextMenu");
- //
- // restoreOriginalColorToolStripMenuItem
- //
- this.restoreOriginalColorToolStripMenuItem.Name = "restoreOriginalColorToolStripMenuItem";
- resources.ApplyResources(this.restoreOriginalColorToolStripMenuItem, "restoreOriginalColorToolStripMenuItem");
- this.restoreOriginalColorToolStripMenuItem.Click += new System.EventHandler(this.restoreOriginalColorToolStripMenuItem_Click);
- //
- // copyColorToolStripMenuItem
- //
- this.copyColorToolStripMenuItem.Name = "copyColorToolStripMenuItem";
- resources.ApplyResources(this.copyColorToolStripMenuItem, "copyColorToolStripMenuItem");
- this.copyColorToolStripMenuItem.Click += new System.EventHandler(this.copyColorToolStripMenuItem_Click);
- //
- // pasteColorToolStripMenuItem
- //
- this.pasteColorToolStripMenuItem.Name = "pasteColorToolStripMenuItem";
- resources.ApplyResources(this.pasteColorToolStripMenuItem, "pasteColorToolStripMenuItem");
- this.pasteColorToolStripMenuItem.Click += new System.EventHandler(this.pasteColorToolStripMenuItem_Click);
- //
- // underwaterTreeView
- //
- this.underwaterTreeView.ContextMenuStrip = this.ColorContextMenu;
- resources.ApplyResources(this.underwaterTreeView, "underwaterTreeView");
- this.underwaterTreeView.Name = "underwaterTreeView";
- this.underwaterTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView3_AfterSelect);
- this.underwaterTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView3_KeyDown);
- //
- // fogTreeView
- //
- this.fogTreeView.ContextMenuStrip = this.ColorContextMenu;
- resources.ApplyResources(this.fogTreeView, "fogTreeView");
- this.fogTreeView.Name = "fogTreeView";
- this.fogTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView4_AfterSelect);
- this.fogTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView4_KeyDown);
- //
- // colorsTab
- //
- this.colorsTab.BackColor = System.Drawing.SystemColors.WindowFrame;
- this.colorsTab.Controls.Add(this.colorTreeView);
- resources.ApplyResources(this.colorsTab, "colorsTab");
- this.colorsTab.Name = "colorsTab";
- //
- // colorTreeView
- //
- this.colorTreeView.ContextMenuStrip = this.ColorContextMenu;
- resources.ApplyResources(this.colorTreeView, "colorTreeView");
- this.colorTreeView.Name = "colorTreeView";
- this.colorTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
- this.colorTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView1_KeyDown);
- //
- // tabControl
- //
- resources.ApplyResources(this.tabControl, "tabControl");
- this.tabControl.Controls.Add(this.colorsTab);
- this.tabControl.Controls.Add(this.waterTab);
- this.tabControl.Controls.Add(this.underwaterTab);
- this.tabControl.Controls.Add(this.fogTab);
- this.tabControl.Name = "tabControl";
- this.tabControl.SelectedIndex = 0;
- this.tabControl.Style = MetroFramework.MetroColorStyle.White;
- this.tabControl.Theme = MetroFramework.MetroThemeStyle.Dark;
- this.tabControl.UseSelectable = true;
- //
- // underwaterTab
- //
- this.underwaterTab.BackColor = System.Drawing.SystemColors.WindowFrame;
- this.underwaterTab.Controls.Add(this.underwaterTreeView);
- resources.ApplyResources(this.underwaterTab, "underwaterTab");
- this.underwaterTab.Name = "underwaterTab";
- //
- // fogTab
- //
- this.fogTab.BackColor = System.Drawing.SystemColors.WindowFrame;
- this.fogTab.Controls.Add(this.fogTreeView);
- resources.ApplyResources(this.fogTab, "fogTab");
- this.fogTab.Name = "fogTab";
+ this.stripPS4BiomesToolStripMenuItem.Name = "stripPS4BiomesToolStripMenuItem";
+ resources.ApplyResources(this.stripPS4BiomesToolStripMenuItem, "stripPS4BiomesToolStripMenuItem");
+ this.stripPS4BiomesToolStripMenuItem.Click += new System.EventHandler(this.stripPS4BiomesToolStripMenuItem_Click);
//
// COLEditor
//
@@ -551,21 +577,23 @@ namespace PckStudio.Forms.Editor
private ToolStripMenuItem restoreOriginalColorToolStripMenuItem;
private MetroFramework.Controls.MetroTextBox metroTextBox1;
private MetroFramework.Controls.MetroLabel metroLabel2;
- private ToolStripMenuItem targetUpdateToolToolStripMenuItem;
- private ToolStripMenuItem TU12ToolStripMenuItem;
- private ToolStripMenuItem TU13ToolStripMenuItem;
- private ToolStripMenuItem TU14ToolStripMenuItem;
- private ToolStripMenuItem TU19ToolStripMenuItem;
- private ToolStripMenuItem TU31ToolStripMenuItem;
- private ToolStripMenuItem TU32ToolStripMenuItem;
- private ToolStripMenuItem TU43ToolStripMenuItem;
- private ToolStripMenuItem TU46ToolStripMenuItem;
- private ToolStripMenuItem TU51ToolStripMenuItem;
- private ToolStripMenuItem TU53ToolStripMenuItem;
- private ToolStripMenuItem TU54ToolStripMenuItem;
- private ToolStripMenuItem TU69ToolStripMenuItem;
- private ToolStripMenuItem _1_9_1ToolStripMenuItem;
- private ToolStripMenuItem copyColorToolStripMenuItem;
- private ToolStripMenuItem pasteColorToolStripMenuItem;
- }
+ private ToolStripMenuItem copyColorToolStripMenuItem;
+ private ToolStripMenuItem pasteColorToolStripMenuItem;
+ private ToolStripMenuItem toolsToolStripMenuItem;
+ private ToolStripMenuItem targetUpdateToolStripMenuItem;
+ private ToolStripMenuItem TU12ToolStripMenuItem;
+ private ToolStripMenuItem TU13ToolStripMenuItem;
+ private ToolStripMenuItem TU14ToolStripMenuItem;
+ private ToolStripMenuItem TU19ToolStripMenuItem;
+ private ToolStripMenuItem TU31ToolStripMenuItem;
+ private ToolStripMenuItem TU32ToolStripMenuItem;
+ private ToolStripMenuItem TU43ToolStripMenuItem;
+ private ToolStripMenuItem TU46ToolStripMenuItem;
+ private ToolStripMenuItem TU51ToolStripMenuItem;
+ private ToolStripMenuItem TU53ToolStripMenuItem;
+ private ToolStripMenuItem TU54ToolStripMenuItem;
+ private ToolStripMenuItem TU69ToolStripMenuItem;
+ private ToolStripMenuItem _1_9_1ToolStripMenuItem;
+ private ToolStripMenuItem stripPS4BiomesToolStripMenuItem;
+ }
}
\ No newline at end of file
diff --git a/PCK-Studio/Forms/Editor/COLEditor.cs b/PCK-Studio/Forms/Editor/COLEditor.cs
index 611eaafb..78a222c3 100644
--- a/PCK-Studio/Forms/Editor/COLEditor.cs
+++ b/PCK-Studio/Forms/Editor/COLEditor.cs
@@ -17,7 +17,7 @@ namespace PckStudio.Forms.Editor
{
ColorContainer default_colourfile;
ColorContainer colourfile;
- ColorContainer.Color clipboard_color;
+ string clipboard_color = "#FFFFFF";
private readonly PckFileData _file;
@@ -55,6 +55,9 @@ namespace PckStudio.Forms.Editor
_1_9_1ToolStripMenuItem.Click += (sender, e) => SetUpDefaultFile(sender, e, 12);
SetUpDefaultFile(null, EventArgs.Empty, 11, false);
+
+ colorTreeView.Select();
+ colorTreeView.SelectedNode = colorTreeView.Nodes[0];
}
private void SetUpDefaultFile(object sender, EventArgs e, int ID, bool targetVersion = true)
@@ -87,6 +90,14 @@ namespace PckStudio.Forms.Editor
SetUpTable(targetVersion);
}
+ void AddEntry(TreeView treeView, List cache, string name, object tag)
+ {
+ TreeNode tn = new TreeNode(name);
+ tn.Tag = tag;
+ treeView.Nodes.Add(tn);
+ cache.Add(tn);
+ }
+
void SetUpTable(bool targetVersion)
{
colorTreeView.Nodes.Clear();
@@ -98,35 +109,57 @@ namespace PckStudio.Forms.Editor
List CurrentEntries = new List();
- foreach (var obj in temp.Colors)
+ colorCache.Clear();
+ fogCache.Clear();
+ underwaterCache.Clear();
+ waterCache.Clear();
+
+ // fixes the duplicate entry bug
+ if (targetVersion)
+ {
+ foreach(var col in colourfile.Colors)
+ {
+ if (default_colourfile.Colors.Find(c => c.Name == col.Name) == null) continue;
+ CurrentEntries.Add(col.Name);
+ AddEntry(colorTreeView, colorCache, col.Name, col);
+ }
+ }
+
+ foreach (var col in temp.Colors)
{
- var entry = colourfile.Colors.Find(color => color.Name == obj.Name);
- TreeNode tn = new TreeNode(obj.Name);
- tn.Tag = entry != null ? entry : obj;
- if (CurrentEntries.Contains(obj.Name)) continue;
- CurrentEntries.Add(obj.Name);
- colorTreeView.Nodes.Add(tn);
- colorCache.Add(tn);
+ var entry = colourfile.Colors.Find(color => color.Name == col.Name);
+ if (CurrentEntries.Contains(col.Name)) continue;
+ var color = entry ?? col;
+ AddEntry(colorTreeView, colorCache, color.Name, color);
}
CurrentEntries.Clear();
- foreach (var obj in temp.WaterColors)
+
+ // fixes the duplicate entry bug
+ if (targetVersion)
{
- var entry = colourfile.WaterColors.Find(color => color.Name == obj.Name);
- TreeNode tn = new TreeNode(obj.Name);
- tn.Tag = entry != null ? entry : obj;
- if (CurrentEntries.Contains(obj.Name)) continue;
- CurrentEntries.Add(obj.Name);
- waterTreeView.Nodes.Add(tn);
- waterCache.Add(tn);
- TreeNode tnB = new TreeNode(obj.Name);
- tnB.Tag = entry != null ? entry : obj;
- underwaterTreeView.Nodes.Add(tnB);
- underwaterCache.Add(tnB);
- TreeNode tnC = new TreeNode(obj.Name);
- tnC.Tag = entry != null ? entry : obj;
- fogTreeView.Nodes.Add(tnC);
- fogCache.Add(tnC);
+ foreach (var col in colourfile.WaterColors)
+ {
+ if (default_colourfile.WaterColors.Find(c => c.Name == col.Name) == null) continue;
+ var entry = colourfile.WaterColors.Find(color => color.Name == col.Name);
+ var color = entry ?? col;
+ AddEntry(waterTreeView, waterCache, color.Name, color);
+ AddEntry(underwaterTreeView, underwaterCache, color.Name, color);
+ AddEntry(fogTreeView, fogCache, color.Name, color);
+ }
}
+
+ foreach (var col in temp.WaterColors)
+ {
+ var entry = colourfile.WaterColors.Find(color => color.Name == col.Name);
+ if (CurrentEntries.Contains(col.Name)) continue;
+ var color = entry ?? col;
+ AddEntry(waterTreeView, waterCache, color.Name, color);
+ AddEntry(underwaterTreeView, underwaterCache, color.Name, color);
+ AddEntry(fogTreeView, fogCache, color.Name, color);
+ }
+
+ // force the filter function to run to carry filter over and fix treeview size
+ metroTextBox1_TextChanged(null, null);
}
void SetUpValueChanged(bool add)
@@ -151,6 +184,11 @@ namespace PckStudio.Forms.Editor
{
if (colorTreeView.SelectedNode.Tag == null)
return;
+
+ waterTreeView.SelectedNode = null;
+ underwaterTreeView.SelectedNode = null;
+ fogTreeView.SelectedNode = null;
+
var colorEntry = (ColorContainer.Color)colorTreeView.SelectedNode.Tag;
var color = colorEntry.ColorPallette.ToArgb();
SetUpValueChanged(false);
@@ -160,6 +198,7 @@ namespace PckStudio.Forms.Editor
greenUpDown.Value = color >> 8 & 0xff;
blueUpDown.Value = color & 0xff;
pictureBox1.BackColor = Color.FromArgb(0xff << 24 | color);
+ colorTextbox.Text = ColorTranslator.ToHtml(colorEntry.ColorPallette).TrimStart('#');
SetUpValueChanged(true);
}
@@ -167,6 +206,11 @@ namespace PckStudio.Forms.Editor
{
if (waterTreeView.SelectedNode.Tag == null)
return;
+
+ colorTreeView.SelectedNode = null;
+ underwaterTreeView.SelectedNode = null;
+ fogTreeView.SelectedNode = null;
+
var colorEntry = (ColorContainer.WaterColor)waterTreeView.SelectedNode.Tag;
int color = colorEntry.SurfaceColor.ToArgb();
SetUpValueChanged(false);
@@ -178,6 +222,7 @@ namespace PckStudio.Forms.Editor
greenUpDown.Value = color >> 8 & 0xff;
blueUpDown.Value = color & 0xff;
pictureBox1.BackColor = colorEntry.SurfaceColor;
+ colorTextbox.Text = ColorTranslator.ToHtml(colorEntry.SurfaceColor).TrimStart('#');
SetUpValueChanged(true);
}
@@ -185,6 +230,11 @@ namespace PckStudio.Forms.Editor
{
if (underwaterTreeView.SelectedNode.Tag == null)
return;
+
+ colorTreeView.SelectedNode = null;
+ waterTreeView.SelectedNode = null;
+ fogTreeView.SelectedNode = null;
+
var colorEntry = (ColorContainer.WaterColor)underwaterTreeView.SelectedNode.Tag;
int color = colorEntry.UnderwaterColor.ToArgb();
SetUpValueChanged(false);
@@ -194,6 +244,7 @@ namespace PckStudio.Forms.Editor
greenUpDown.Value = color >> 8 & 0xff;
blueUpDown.Value = color & 0xff;
pictureBox1.BackColor = Color.FromArgb(255, Color.FromArgb(0xff << 24 | color));
+ colorTextbox.Text = ColorTranslator.ToHtml(colorEntry.UnderwaterColor).TrimStart('#');
SetUpValueChanged(true);
}
@@ -201,6 +252,11 @@ namespace PckStudio.Forms.Editor
{
if (fogTreeView.SelectedNode.Tag == null)
return;
+
+ colorTreeView.SelectedNode = null;
+ waterTreeView.SelectedNode = null;
+ underwaterTreeView.SelectedNode = null;
+
var colorEntry = (ColorContainer.WaterColor)fogTreeView.SelectedNode.Tag;
int color = colorEntry.FogColor.ToArgb();
SetUpValueChanged(false);
@@ -210,38 +266,12 @@ namespace PckStudio.Forms.Editor
greenUpDown.Value = color >> 8 & 0xff;
blueUpDown.Value = color & 0xff;
pictureBox1.BackColor = Color.FromArgb(255, Color.FromArgb(0xff << 24 | color));
+ colorTextbox.Text = ColorTranslator.ToHtml(colorEntry.FogColor).TrimStart('#');
SetUpValueChanged(true);
}
private void saveToolStripMenuItem1_Click(object sender, EventArgs e)
{
- List PS4Biomes = new List
- {
- "bamboo_jungle",
- "bamboo_jungle_hills",
- "mesa_mutated",
- "mega_spruce_taiga_mutated",
- "mega_taiga_mutated"
- };
-
- if (colourfile.WaterColors.Find(e => PS4Biomes.Contains(e.Name)) != null)
- {
- var result = MessageBox.Show(this, "Biomes exclusive to PS4 Edition v1.91 were found in the water section of this colour table. This will crash all other editions of the game and PS4 Edition v1.90 and below. Would you like to remove them?", "Potentially unsupported biomes found", MessageBoxButtons.YesNoCancel);
- switch (result)
- {
- case DialogResult.Yes:
- foreach (var col in colourfile.WaterColors.ToList())
- {
- if(PS4Biomes.Contains(col.Name)) colourfile.WaterColors.Remove(col);
- }
- break;
- case DialogResult.No:
- break;
- default:
- return;
- }
- }
-
_file.SetData(new COLFileWriter(colourfile));
DialogResult = DialogResult.OK;
@@ -315,49 +345,43 @@ namespace PckStudio.Forms.Editor
}
}
+ public bool IsValidHexString(string value)
+ {
+ return System.Text.RegularExpressions.Regex.IsMatch(value, @"\A\b[0-9a-fA-F]+\b\Z") && value.Length == 6;
+ }
+
private void colorBox_TextChanged(object sender, EventArgs e)
{
- //TreeView tv = (TreeView)tabControl.SelectedTab.Controls[0];
- //if (tv.SelectedNode == null || tv.SelectedNode.Tag == null)
- // return;
- //bool hasAlpha = tabControl.SelectedTab == waterTab;
- //alphaUpDown.Enabled = hasAlpha;
- //redUpDown.Value = StringToByteArrayFastest(colorTextbox.Text)[!hasAlpha ? 0 : 1];
- //greenUpDown.Value = StringToByteArrayFastest(colorTextbox.Text)[!hasAlpha ? 1 : 2];
- //blueUpDown.Value = StringToByteArrayFastest(colorTextbox.Text)[!hasAlpha ? 2 : 3];
- //int color = 0; /*colorEntry.color*/;
- // int argb = (int)((0xff000000u) | (color >> 24));
- //colorTextbox.MaxLength = hasAlpha ? 8 : 6;
- //alphaLabel.Visible = false;
- //alphaUpDown.Visible = false;
- //if (hasAlpha)
- //{
- // alphaLabel.Visible = true;
- // alphaUpDown.Visible = true;
- // alphaUpDown.Value = StringToByteArrayFastest(colorTextbox.Text)[0];
- // argb = color >> 24 | color << 8;
- //}
- //pictureBox1.BackColor = Color.FromArgb(argb);
+ if(IsValidHexString(colorTextbox.Text))
+ {
+ Color color = ColorTranslator.FromHtml("#" + colorTextbox.Text);
+
+ redUpDown.Value = color.R;
+ greenUpDown.Value = color.G;
+ blueUpDown.Value = color.B;
+ }
}
private void color_ValueChanged(object sender, EventArgs e)
{
- Color fixed_color = new Color();
+ Color color = Color.FromArgb(tabControl.SelectedTab == waterTab ? (int)alphaUpDown.Value : 255, (int)redUpDown.Value, (int)greenUpDown.Value, (int)blueUpDown.Value);
+
if (tabControl.SelectedTab == colorsTab)
- {
+ {
var colorEntry = (ColorContainer.Color)colorTreeView.SelectedNode.Tag;
- colorEntry.ColorPallette = fixed_color = Color.FromArgb(255, (int)redUpDown.Value, (int)greenUpDown.Value, (int)blueUpDown.Value);
+ colorEntry.ColorPallette = color;
}
- else if (tabControl.SelectedTab != null && waterTreeView.SelectedNode != null) // just in case
- {
- var colorEntry = (ColorContainer.WaterColor)waterTreeView.SelectedNode.Tag;
- fixed_color = Color.FromArgb(tabControl.SelectedTab == waterTab ? (int)alphaUpDown.Value : 255, (int)redUpDown.Value, (int)greenUpDown.Value, (int)blueUpDown.Value);
- if (tabControl.SelectedTab == waterTab) colorEntry.SurfaceColor = fixed_color;
- else if (tabControl.SelectedTab == underwaterTab) colorEntry.UnderwaterColor = fixed_color;
- else colorEntry.FogColor = fixed_color;
+ else
+ {
+ var waterColorEntry = (tabControl.SelectedTab.Controls[0] as TreeView).SelectedNode.Tag as ColorContainer.WaterColor;
+
+ if (tabControl.SelectedTab == waterTab) waterColorEntry.SurfaceColor = color;
+ else if (tabControl.SelectedTab == underwaterTab) waterColorEntry.UnderwaterColor = color;
+ else waterColorEntry.FogColor = color;
}
- pictureBox1.BackColor = fixed_color;
+ pictureBox1.BackColor = color;
+ colorTextbox.Text = ColorTranslator.ToHtml(color).TrimStart('#');
}
private void setColorBtn_Click(object sender, EventArgs e)
@@ -366,7 +390,7 @@ namespace PckStudio.Forms.Editor
colorPick.AllowFullOpen = true;
colorPick.AnyColor = true;
colorPick.SolidColorOnly = tabControl.SelectedTab == colorsTab;
- if (colorPick.ShowDialog() != DialogResult.OK) return;
+ if (colorPick.ShowDialog(this) != DialogResult.OK) return;
pictureBox1.BackColor = colorPick.Color;
if (tabControl.SelectedTab == waterTab && waterTreeView.SelectedNode != null &&
waterTreeView.SelectedNode.Tag != null && waterTreeView.SelectedNode.Tag is ColorContainer.WaterColor)
@@ -412,56 +436,48 @@ namespace PckStudio.Forms.Editor
private void alpha_ValueChanged(object sender, EventArgs e)
{
- if (tabControl.SelectedTab == waterTab && waterTreeView.SelectedNode != null &&
- waterTreeView.SelectedNode.Tag != null && waterTreeView.SelectedNode.Tag is ColorContainer.WaterColor)
- {
- var colorEntry = (ColorContainer.WaterColor)waterTreeView.SelectedNode.Tag;
- pictureBox1.BackColor = colorEntry.SurfaceColor = Color.FromArgb((int)alphaUpDown.Value, colorEntry.SurfaceColor);
- }
+ var colorEntry = (ColorContainer.WaterColor)waterTreeView.SelectedNode.Tag;
+ pictureBox1.BackColor = colorEntry.SurfaceColor = Color.FromArgb((int)alphaUpDown.Value, colorEntry.SurfaceColor);
}
private void restoreOriginalColorToolStripMenuItem_Click(object sender, EventArgs e)
{
- SetUpValueChanged(false);
- if (tabControl.SelectedTab == colorsTab && colorTreeView.SelectedNode != null &&
- colorTreeView.SelectedNode.Tag != null && colorTreeView.SelectedNode.Tag is ColorContainer.Color colorInfoD)
- {
- var entry = default_colourfile.Colors.Find(color => color.Name == colorTreeView.SelectedNode.Text);
- colorInfoD.ColorPallette = entry.ColorPallette;
- UpdateDisplayColor(entry.ColorPallette);
- }
- else if (tabControl.SelectedTab == waterTab && waterTreeView.SelectedNode != null &&
- waterTreeView.SelectedNode.Tag != null && waterTreeView.SelectedNode.Tag is ColorContainer.WaterColor colorInfo)
- {
- var entry = default_colourfile.WaterColors.Find(color => color.Name == waterTreeView.SelectedNode.Text);
- colorInfo.SurfaceColor = entry.SurfaceColor;
- UpdateDisplayColor(entry.SurfaceColor);
- }
- else if (tabControl.SelectedTab == underwaterTab && underwaterTreeView.SelectedNode != null &&
- underwaterTreeView.SelectedNode.Tag != null && underwaterTreeView.SelectedNode.Tag is ColorContainer.WaterColor colorInfoB)
- {
- var entry = default_colourfile.WaterColors.Find(color => color.Name == underwaterTreeView.SelectedNode.Text);
- colorInfoB.UnderwaterColor = entry.UnderwaterColor;
- UpdateDisplayColor(entry.UnderwaterColor);
- }
- else if (tabControl.SelectedTab == fogTab && fogTreeView.SelectedNode != null &&
- fogTreeView.SelectedNode.Tag != null && fogTreeView.SelectedNode.Tag is ColorContainer.WaterColor colorInfoC)
- {
- var entry = default_colourfile.WaterColors.Find(color => color.Name == fogTreeView.SelectedNode.Text);
- colorInfoC.FogColor = entry.FogColor;
- UpdateDisplayColor(entry.FogColor);
- }
- SetUpValueChanged(true);
- }
+ if(tabControl.SelectedTab is var tab && tab != null)
+ {
+ TreeNode node = (tabControl.SelectedTab.Controls[0] as TreeView).SelectedNode;
- private void UpdateDisplayColor(Color color)
- {
- alphaUpDown.Value = color.A;
- redUpDown.Value = color.R;
- greenUpDown.Value = color.G;
- blueUpDown.Value = color.B;
- pictureBox1.BackColor = Color.FromArgb(tabControl.SelectedTab == colorsTab ? 0xFF : color.A, color);
- }
+ Color color = Color.Empty;
+
+ if (tab == colorsTab)
+ {
+ color = default_colourfile.Colors.Find(color => color.Name == node.Text).ColorPallette;
+
+ if (color.IsEmpty) return;
+
+ colorTextbox.Text = ColorTranslator.ToHtml(color).TrimStart('#');
+ }
+ else
+ {
+ var WaterEntry = default_colourfile.WaterColors.Find(color => color.Name == node.Text);
+
+ if (WaterEntry == null) return;
+
+ color =
+ tab == waterTab ? WaterEntry.SurfaceColor :
+ tab == underwaterTab ? WaterEntry.UnderwaterColor : WaterEntry.FogColor;
+
+ if (tab == waterTab)
+ {
+ alphaUpDown.Value = color.A;
+ }
+
+ redUpDown.Value = color.R;
+ greenUpDown.Value = color.G;
+ blueUpDown.Value = color.B;
+ }
+ pictureBox1.BackColor = Color.FromArgb(tab == colorsTab ? 0xFF : color.A, color);
+ }
+ }
private void metroTextBox1_TextChanged(object sender, EventArgs e)
{
@@ -536,66 +552,12 @@ namespace PckStudio.Forms.Editor
private void copyColorToolStripMenuItem_Click(object sender, EventArgs e)
{
- var colorToCopy = new ColorContainer.Color()
- {
- Name = "",
- ColorPallette = new Color()
- };
- if (tabControl.SelectedTab == colorsTab && colorTreeView.SelectedNode.Tag is ColorContainer.Color colorInfoD)
- {
- colorToCopy = colorInfoD;
- }
- else if (tabControl.SelectedTab == waterTab && waterTreeView.SelectedNode.Tag is ColorContainer.WaterColor colorInfo)
- {
- colorToCopy.ColorPallette = colorInfo.SurfaceColor;
- }
- else if (tabControl.SelectedTab == underwaterTab && underwaterTreeView.SelectedNode.Tag is ColorContainer.WaterColor colorInfoB)
- {
- colorToCopy.ColorPallette = colorInfoB.UnderwaterColor;
- }
- else if (tabControl.SelectedTab == fogTab && fogTreeView.SelectedNode.Tag is ColorContainer.WaterColor colorInfoC)
- {
- colorToCopy.ColorPallette = colorInfoC.FogColor;
- }
- clipboard_color = colorToCopy;
+ clipboard_color = colorTextbox.Text;
}
private void pasteColorToolStripMenuItem_Click(object sender, EventArgs e)
{
- if (clipboard_color == null) return;
- SetUpValueChanged(false);
- Color fixed_color = Color.FromArgb(255, Color.FromArgb(0xff, clipboard_color.ColorPallette));
-
- if (tabControl.SelectedTab == waterTab && waterTreeView.SelectedNode != null &&
- waterTreeView.SelectedNode.Tag != null && waterTreeView.SelectedNode.Tag is ColorContainer.WaterColor)
- {
- var colorEntry = ((ColorContainer.WaterColor)waterTreeView.SelectedNode.Tag);
- colorEntry.SurfaceColor = fixed_color;
- }
- else if (tabControl.SelectedTab == underwaterTab && underwaterTreeView.SelectedNode != null &&
- underwaterTreeView.SelectedNode.Tag != null && underwaterTreeView.SelectedNode.Tag is ColorContainer.WaterColor)
- {
- var colorEntry = ((ColorContainer.WaterColor)underwaterTreeView.SelectedNode.Tag);
- colorEntry.UnderwaterColor = fixed_color;
- }
- else if (tabControl.SelectedTab == fogTab && fogTreeView.SelectedNode != null &&
- fogTreeView.SelectedNode.Tag != null && fogTreeView.SelectedNode.Tag is ColorContainer.WaterColor)
- {
- var colorEntry = ((ColorContainer.WaterColor)fogTreeView.SelectedNode.Tag);
- colorEntry.FogColor = fixed_color;
- }
- else if (tabControl.SelectedTab == colorsTab && colorTreeView.SelectedNode != null &&
- colorTreeView.SelectedNode.Tag != null && colorTreeView.SelectedNode.Tag is ColorContainer.Color)
- {
- var colorEntry = ((ColorContainer.Color)colorTreeView.SelectedNode.Tag);
- colorEntry.ColorPallette = fixed_color;
- }
-
- redUpDown.Value = clipboard_color.ColorPallette.R;
- greenUpDown.Value = clipboard_color.ColorPallette.G;
- blueUpDown.Value = clipboard_color.ColorPallette.B;
- pictureBox1.BackColor = fixed_color;
- SetUpValueChanged(true);
+ colorTextbox.Text = clipboard_color;
}
private void COLEditor_FormClosing(object sender, FormClosingEventArgs e)
@@ -605,5 +567,34 @@ namespace PckStudio.Forms.Editor
saveToolStripMenuItem1_Click(sender, EventArgs.Empty);
}
}
+
+ private void colorTextbox_KeyPress(object sender, KeyPressEventArgs e)
+ {
+ string hexCheck = "0123456789abcdefABCDEF\b";
+
+ e.Handled = !hexCheck.Contains(e.KeyChar);
+ }
+
+ private void stripPS4BiomesToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ if(colourfile.WaterColors.Count > 0)
+ {
+ List PS4Biomes = new List
+ {
+ "bamboo_jungle",
+ "bamboo_jungle_hills",
+ "mesa_mutated",
+ "mega_spruce_taiga_mutated",
+ "mega_taiga_mutated"
+ };
+
+ foreach (var col in colourfile.WaterColors.ToList())
+ {
+ if (PS4Biomes.Contains(col.Name)) colourfile.WaterColors.Remove(col);
+ }
+
+ SetUpTable(false);
+ }
+ }
}
}
diff --git a/PCK-Studio/Forms/Editor/COLEditor.resx b/PCK-Studio/Forms/Editor/COLEditor.resx
index 9a20d780..b2003d3c 100644
--- a/PCK-Studio/Forms/Editor/COLEditor.resx
+++ b/PCK-Studio/Forms/Editor/COLEditor.resx
@@ -117,18 +117,210 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ metroTextBox1
+
+
+ MetroFramework.Controls.MetroTextBox, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ metroPanel1
+
+
+ 2
+
+
+ metroLabel2
+
+
+ MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ metroPanel1
+
+
+ 3
+
+
+ setColorBtn
+
+
+ MetroFramework.Controls.MetroButton, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ metroPanel1
+
+
+ 4
+
+
+ blueUpDown
+
+
+ System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ metroPanel1
+
+
+ 5
+
+
+ greenUpDown
+
+
+ System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ metroPanel1
+
+
+ 6
+
+
+ redUpDown
+
+
+ System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ metroPanel1
+
+
+ 7
+
+
+ alphaUpDown
+
+
+ System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ metroPanel1
+
+
+ 8
+
+
+ alphaLabel
+
+
+ MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ metroPanel1
+
+
+ 9
+
+
+ blueLabel
+
+
+ MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ metroPanel1
+
+
+ 10
+
+
+ greenLabel
+
+
+ MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ metroPanel1
+
+
+ 11
+
+
+ redLabel
+
+
+ MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ metroPanel1
+
+
+ 12
+
+
+ colorTextbox
+
+
+ MetroFramework.Controls.MetroTextBox, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ metroPanel1
+
+
+ 13
+
+
+ metroLabel1
+
+
+ MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ metroPanel1
+
+
+ 14
+
+
+ pictureBox1
+
+
+ System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ metroPanel1
+
+
+ 15
+
+
+ Fill
+
+
+
+ 20, 60
+
+
+ 612, 523
+
+
+
+ 0
+
+
+ metroPanel1
+
+
+ MetroFramework.Controls.MetroPanel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
+
+
+ $this
+
+
+ 3
+
-
113, 1
21, 21
-
0
@@ -298,16 +490,16 @@
True
- 367, 320
+ 342, 320
- 21, 19
+ 46, 19
16
- A:
+ Alpha:
False
@@ -328,16 +520,16 @@
True
- 368, 395
+ 351, 397
- 20, 19
+ 37, 19
12
- B:
+ Blue:
blueLabel
@@ -355,16 +547,16 @@
True
- 367, 371
+ 341, 371
- 21, 19
+ 47, 19
10
- G:
+ Green:
greenLabel
@@ -382,16 +574,16 @@
True
- 368, 345
+ 353, 345
- 20, 19
+ 35, 19
8
- R:
+ Red:
redLabel
@@ -448,16 +640,16 @@
True
- 342, 423
+ 354, 423
- 46, 19
+ 34, 19
3
- Color:
+ Hex:
metroLabel1
@@ -492,142 +684,12 @@
15
-
- Fill
-
-
- 20, 60
-
-
- 612, 523
-
-
- 0
-
-
- metroPanel1
-
-
- MetroFramework.Controls.MetroPanel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
-
-
- $this
-
-
- 3
-
17, 17
False
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADfSURBVDhPYxg8
- QLt++3yTGbf/Fm599P/Nh49wfPXxq/+rTt37f+Dak/8gOSBgAGEMANIMxGBFyAasPf/0v8GE8//z1t8C
- y4HU4DIALIluwLpLL+HiMANAGKoNAWASCavv/n/57gPcgOvP3oENOXj7NViOoAFGU6791+k4ghWD5Aga
- QCyGakMAkODcU89R/I8Ng9TgNADk14dPn/8/c+kqVgySgwUqVBsCwAx49urN/zsPHmPFIDmaGvAXJInN
- 38gYasBfqDYE0K7dOn/Wvut/sfkdGYPUgJI9VNuAAwYGAGn6yvdevWgPAAAAAElFTkSuQmCC
-
-
-
- 98, 22
-
-
- Save
-
-
- 37, 20
-
-
- File
-
-
- 414, 22
-
-
- TU12 (360)
-
-
- 414, 22
-
-
- TU13/1.00 (360/PS3)
-
-
- 414, 22
-
-
- TU14/1.04 (360/PS3)
-
-
- 414, 22
-
-
- TU19/1.12/CU7 (360/PS3-4-Vita/XONE)
-
-
- 414, 22
-
-
- TU31/1.22/CU19 (360/PS3-4-Vita/XONE)
-
-
- 414, 22
-
-
- TU32/1.24/CU20/P3 (360/PS3-4-Vita/XONE/WIIU)
-
-
- 414, 22
-
-
- TU43/1.35/CU32/P12 (360/PS3-4-Vita/XONE/WIIU)
-
-
- 414, 22
-
-
- TU46/1.38/CU36/P15 (360/PS3-4-Vita/XONE/WIIU)
-
-
- 414, 22
-
-
- TU51/1.44/CU41/P20 (360/PS3-4-Vita/XONE/WIIU)
-
-
- 414, 22
-
-
- TU53/1.49/CU43/P23/1.0.3 (360/PS3-4-Vita/XONE/WIIU/SWITCH)
-
-
- 414, 22
-
-
- TU54/1.52/CU44/P24/1.0.4 (360/PS3-4-Vita/XONE/WIIU/SWITCH)
-
-
- 414, 22
-
-
- TU69/1.76/P38 (360/PS3-4-Vita/WIIU)
-
-
- 414, 22
-
-
- 1.91 (PS4)
-
-
- 117, 20
-
-
- Target Update Tool
-
20, 60
@@ -652,29 +714,33 @@
1
+
+ 37, 20
+
+
+ File
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADdSURBVDhPzZJB
+ CoJQEIa9jy0iPFAnCDpAtG3ZooUE4b6oVtIuClpJIAgqZEVlKpqEHUAm5pGPmhTbRA18G//5P5iHgvA3
+ I7ZniiQ7aVM9QZzcOKYbwVDbw8I6A2YAICBvg2VJdtjSs2Cse1Dt6tCYbliGO0UCFlLBxAj590yA0D4X
+ 1Ec7CK8JF9j+lUmWzoVlpYJaz4JKZ5ULZqWCT6F9Jhhowcv9eeBOoQBvPXoBrA0zF8yyR6V9LvCjGLYH
+ NxfMvipIMaQ3Ux6ClPYFsaUq/bmd0rspuIO/Pe3/bu5p+sr3gTvFEQAAAABJRU5ErkJggg==
+
+
+
+ 180, 22
+
+
+ Save
+
125, 17
-
- 186, 22
-
-
- Restore original color
-
-
- 186, 22
-
-
- Copy Color
-
-
- 186, 22
-
-
- Paste Color
-
- 187, 70
+ 146, 70
ColorContextMenu
@@ -733,6 +799,24 @@
1
+
+ 134, 22
+
+
+ Copy Color
+
+
+ 134, 22
+
+
+ Paste Color
+
+
+ 145, 22
+
+
+ Restore Color
+
0, 0
@@ -895,6 +979,102 @@
2
+
+ 47, 20
+
+
+ Tools
+
+
+ 180, 22
+
+
+ Target Update
+
+
+ 416, 22
+
+
+ TU12 (360)
+
+
+ 416, 22
+
+
+ TU13/1.00 (360/PS3)
+
+
+ 416, 22
+
+
+ TU14/1.04 (360/PS3)
+
+
+ 416, 22
+
+
+ TU19/1.12/CU7 (360/PS3-4-Vita/XONE)
+
+
+ 416, 22
+
+
+ TU31/1.22/CU19 (360/PS3-4-Vita/XONE)
+
+
+ 416, 22
+
+
+ TU32/1.24/CU20/P3 (360/PS3-4-Vita/XONE/WIIU)
+
+
+ 416, 22
+
+
+ TU43/1.35/CU32/P12 (360/PS3-4-Vita/XONE/WIIU)
+
+
+ 416, 22
+
+
+ TU46/1.38/CU36/P15 (360/PS3-4-Vita/XONE/WIIU)
+
+
+ 416, 22
+
+
+ TU51/1.44/CU41/P20 (360/PS3-4-Vita/XONE/WIIU)
+
+
+ 416, 22
+
+
+ TU53/1.49/CU43/P23/1.0.3 (360/PS3-4-Vita/XONE/WIIU/SWITCH)
+
+
+ 416, 22
+
+
+ TU54/1.52/CU44/P24/1.0.4 (360/PS3-4-Vita/XONE/WIIU/SWITCH)
+
+
+ 416, 22
+
+
+ TU69/1.76/P38 (360/PS3-4-Vita/WIIU)
+
+
+ 416, 22
+
+
+ 1.91 (PS4)
+
+
+ 213, 22
+
+
+ Remove PS4 Biome Colors
+
True
@@ -3431,10 +3611,34 @@
System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- targetUpdateToolToolStripMenuItem
+
+ copyColorToolStripMenuItem
-
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ pasteColorToolStripMenuItem
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ restoreOriginalColorToolStripMenuItem
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ toolsToolStripMenuItem
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ targetUpdateToolStripMenuItem
+
+
System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
@@ -3515,22 +3719,10 @@
System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- restoreOriginalColorToolStripMenuItem
+
+ stripPS4BiomesToolStripMenuItem
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- copyColorToolStripMenuItem
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- pasteColorToolStripMenuItem
-
-
+
System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
diff --git a/PCK-Studio/Forms/Editor/GameRuleFileEditor.cs b/PCK-Studio/Forms/Editor/GameRuleFileEditor.cs
index 1a820646..b398ea15 100644
--- a/PCK-Studio/Forms/Editor/GameRuleFileEditor.cs
+++ b/PCK-Studio/Forms/Editor/GameRuleFileEditor.cs
@@ -35,71 +35,19 @@ namespace PckStudio.Forms.Editor
{
public partial class GameRuleFileEditor : MetroFramework.Forms.MetroForm
{
- private PckFileData _pckfile;
private GameRuleFile _file;
- private GameRuleFile.CompressionType compressionType;
- private GameRuleFile.CompressionLevel compressionLevel;
- private const string use_zlib = "Wii U, PS Vita";
- private const string use_deflate = "PS3";
- private const string use_xmem = "Xbox 360";
+ public GameRuleFile Result => _file;
- public GameRuleFileEditor()
+ private GameRuleFileEditor()
{
InitializeComponent();
- PromptForCompressionType();
saveToolStripMenuItem.Visible = !Settings.Default.AutoSaveChanges;
}
- private void PromptForCompressionType()
+ public GameRuleFileEditor(GameRuleFile gameRuleFile) : this()
{
- ItemSelectionPopUp dialog = new ItemSelectionPopUp(use_zlib, use_deflate, use_xmem);
- dialog.LabelText = "Type";
- dialog.ButtonText = "Ok";
- if (dialog.ShowDialog() == DialogResult.OK)
- {
- switch(dialog.SelectedItem)
- {
- case use_zlib:
- wiiUPSVitaToolStripMenuItem.Checked = true;
- break;
- case use_deflate:
- pS3ToolStripMenuItem.Checked = true;
- break;
- case use_xmem:
- xbox360ToolStripMenuItem.Checked = true;
- break;
- }
- }
- }
-
- public GameRuleFileEditor(PckFileData file) : this()
- {
- _pckfile = file;
- using (var stream = new MemoryStream(file.Data))
- {
- _file = OpenGameRuleFile(stream);
- }
- }
-
- public GameRuleFileEditor(Stream stream) : this()
- {
- _file = OpenGameRuleFile(stream);
- }
-
- private GameRuleFile OpenGameRuleFile(Stream stream)
- {
- try
- {
- var reader = new GameRuleFileReader(compressionType);
- return reader.FromStream(stream);
- }
- catch (Exception ex)
- {
- Debug.WriteLine(ex.Message);
- MessageBox.Show("Faild to open .grf/.grh file");
- }
- return default!;
+ _file = gameRuleFile;
}
private void OnLoad(object sender, EventArgs e)
@@ -169,11 +117,11 @@ namespace PckStudio.Forms.Editor
if (GrfTreeView.SelectedNode == null || !(GrfTreeView.SelectedNode.Tag is GameRuleFile.GameRule)) return;
var grfTag = GrfTreeView.SelectedNode.Tag as GameRuleFile.GameRule;
AddParameter prompt = new AddParameter();
- if (prompt.ShowDialog() == DialogResult.OK)
+ if (prompt.ShowDialog(this) == DialogResult.OK)
{
if (grfTag.Parameters.ContainsKey(prompt.ParameterName))
{
- MessageBox.Show("Can't add detail that already exists.", "Error");
+ MessageBox.Show(this, "Can't add detail that already exists.", "Error");
return;
}
grfTag.Parameters.Add(prompt.ParameterName, prompt.ParameterValue);
@@ -190,7 +138,7 @@ namespace PckStudio.Forms.Editor
ReloadParameterTreeView();
return;
}
- MessageBox.Show("No Rule selected");
+ MessageBox.Show(this, "No Rule selected");
}
private void GrfDetailsTreeView_KeyDown(object sender, KeyEventArgs e)
@@ -205,7 +153,7 @@ namespace PckStudio.Forms.Editor
GrfParametersTreeView.SelectedNode is TreeNode paramNode && paramNode.Tag is KeyValuePair param)
{
AddParameter prompt = new AddParameter(param.Key, param.Value, false);
- if (prompt.ShowDialog() == DialogResult.OK)
+ if (prompt.ShowDialog(this) == DialogResult.OK)
{
rule.Parameters[prompt.ParameterName] = prompt.ParameterValue;
ReloadParameterTreeView();
@@ -227,9 +175,9 @@ namespace PckStudio.Forms.Editor
using (TextPrompt prompt = new TextPrompt())
{
prompt.OKButtonText = "Add";
- if (MessageBox.Show($"Add Game Rule to {parentRule.Name}", "Attention",
+ if (MessageBox.Show(this, $"Add Game Rule to {parentRule.Name}", "Attention",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes &&
- prompt.ShowDialog() == DialogResult.OK &&
+ prompt.ShowDialog(this) == DialogResult.OK &&
!string.IsNullOrWhiteSpace(prompt.NewText))
{
var tag = parentRule.AddRule(prompt.NewText);
@@ -264,80 +212,58 @@ namespace PckStudio.Forms.Editor
{
if (_file.Header.unknownData[3] != 0)
{
- MessageBox.Show("World grf saving is currently unsupported");
+ MessageBox.Show(this, "World grf saving is currently unsupported");
return;
}
- using (var stream = new MemoryStream())
- {
- try
- {
- _pckfile?.SetData(new GameRuleFileWriter(_file));
- DialogResult = DialogResult.OK;
- MessageBox.Show("Saved!");
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- MessageBox.Show($"Failed to save grf file\n{ex.Message}", "Save Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
- }
- }
+ DialogResult = DialogResult.OK;
+ MessageBox.Show("Saved!");
}
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
- OpenFileDialog dialog = new OpenFileDialog();
- dialog.Filter = "Game Rule File|*.grf";
- PromptForCompressionType();
- if (dialog.ShowDialog(this) == DialogResult.OK)
- {
- using (var fs = File.OpenRead(dialog.FileName))
- {
- _file = OpenGameRuleFile(fs);
- ReloadGameRuleTree();
- }
- }
+
}
private void noneToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
{
if (sender is ToolStripRadioButtonMenuItem radioButton && radioButton.Checked)
- compressionLevel = GameRuleFile.CompressionLevel.None;
+ _file.Header.CompressionLevel = GameRuleFile.CompressionLevel.None;
}
private void compressedToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
{
if (sender is ToolStripRadioButtonMenuItem radioButton && radioButton.Checked)
- compressionLevel = GameRuleFile.CompressionLevel.Compressed;
+ _file.Header.CompressionLevel = GameRuleFile.CompressionLevel.Compressed;
}
private void compressedRLEToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
{
if (sender is ToolStripRadioButtonMenuItem radioButton && radioButton.Checked)
- compressionLevel = GameRuleFile.CompressionLevel.CompressedRle;
+ _file.Header.CompressionLevel = GameRuleFile.CompressionLevel.CompressedRle;
}
private void compressedRLECRCToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
{
if (sender is ToolStripRadioButtonMenuItem radioButton && radioButton.Checked)
- compressionLevel = GameRuleFile.CompressionLevel.CompressedRleCrc;
+ _file.Header.CompressionLevel = GameRuleFile.CompressionLevel.CompressedRleCrc;
}
private void wiiUPSVitaToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
{
if (sender is ToolStripRadioButtonMenuItem radioButton && radioButton.Checked)
- compressionType = GameRuleFile.CompressionType.Zlib;
+ _file.Header.CompressionType = GameRuleFile.CompressionType.Zlib;
}
private void pS3ToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
{
if (sender is ToolStripRadioButtonMenuItem radioButton && radioButton.Checked)
- compressionType = GameRuleFile.CompressionType.Deflate;
+ _file.Header.CompressionType = GameRuleFile.CompressionType.Deflate;
}
private void xbox360ToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
{
if (sender is ToolStripRadioButtonMenuItem radioButton && radioButton.Checked)
- compressionType = GameRuleFile.CompressionType.XMem;
+ _file.Header.CompressionType = GameRuleFile.CompressionType.XMem;
}
private void GameRuleFileEditor_FormClosing(object sender, FormClosingEventArgs e)
diff --git a/PCK-Studio/Forms/Editor/LOCEditor.cs b/PCK-Studio/Forms/Editor/LOCEditor.cs
index d19c067c..56d5a607 100644
--- a/PCK-Studio/Forms/Editor/LOCEditor.cs
+++ b/PCK-Studio/Forms/Editor/LOCEditor.cs
@@ -53,7 +53,7 @@ namespace PckStudio.Forms.Editor
if (node == null ||
!currentLoc.LocKeys.ContainsKey(node.Text))
{
- MessageBox.Show("Selected Node does not seem to be in the loc file");
+ MessageBox.Show(this, "Selected Node does not seem to be in the loc file");
return;
}
ReloadTranslationTable();
@@ -65,7 +65,7 @@ namespace PckStudio.Forms.Editor
using (TextPrompt prompt = new TextPrompt())
{
prompt.OKButtonText = "Add";
- if (prompt.ShowDialog() == DialogResult.OK &&
+ if (prompt.ShowDialog(this) == DialogResult.OK &&
!currentLoc.LocKeys.ContainsKey(prompt.NewText) &&
currentLoc.AddLocKey(prompt.NewText, ""))
{
@@ -87,7 +87,7 @@ namespace PckStudio.Forms.Editor
if (e.ColumnIndex != 1 ||
treeViewLocKeys.SelectedNode == null)
{
- MessageBox.Show("something went wrong");
+ MessageBox.Show(this, "something went wrong");
return;
}
currentLoc.SetLocEntry(treeViewLocKeys.SelectedNode.Text, tbl.Rows[e.RowIndex][0].ToString(), tbl.Rows[e.RowIndex][1].ToString());
@@ -136,7 +136,7 @@ namespace PckStudio.Forms.Editor
{
string[] avalibleLang = GetAvailableLanguages().ToArray();
using (var dialog = new AddLanguage(avalibleLang))
- if (dialog.ShowDialog() == DialogResult.OK)
+ if (dialog.ShowDialog(this) == DialogResult.OK)
{
currentLoc.AddLanguage(dialog.SelectedLanguage);
ReloadTranslationTable();
diff --git a/PCK-Studio/Forms/Editor/MaterialsEditor.cs b/PCK-Studio/Forms/Editor/MaterialsEditor.cs
index 614487e1..75fbd5eb 100644
--- a/PCK-Studio/Forms/Editor/MaterialsEditor.cs
+++ b/PCK-Studio/Forms/Editor/MaterialsEditor.cs
@@ -12,6 +12,7 @@ using OMI.Formats.Material;
using OMI.Workers.Material;
using PckStudio.Internal;
using PckStudio.Extensions;
+using PckStudio.Internal.Json;
namespace PckStudio.Forms.Editor
{
@@ -21,7 +22,7 @@ namespace PckStudio.Forms.Editor
private readonly PckFileData _file;
MaterialContainer materialFile;
- private readonly JObject EntityJSONData = JObject.Parse(Properties.Resources.entityData);
+ private readonly List MaterialData = Entities.BehaviourInfos;
private bool showInvalidEntries;
@@ -36,23 +37,15 @@ namespace PckStudio.Forms.Editor
{
TreeNode EntryNode = new TreeNode(entry.Name);
- EntryNode.ImageIndex = -1;
-
- foreach (JObject content in EntityJSONData["materials"].Children())
- {
- var prop = content.Properties().FirstOrDefault(prop => prop.Name == entry.Name);
- if (prop is JProperty)
- {
- EntryNode.Text = (string)prop.Value;
- EntryNode.ImageIndex = EntityJSONData["materials"].Children().ToList().IndexOf(content);
- break;
- }
+ var material = MaterialData.Find(m => m.InternalName == entry.Name);
+ if(material != null)
+ {
+ EntryNode.Text = material.DisplayName;
+ EntryNode.ImageIndex = MaterialData.IndexOf(material);
+ EntryNode.Tag = entry;
}
-
- EntryNode.Tag = entry;
-
// check for invalid material entry
- if (EntryNode.ImageIndex == -1)
+ else
{
EntryNode.ImageIndex = 127; // icon for invalid entry
EntryNode.Text += " (Invalid)";
@@ -152,7 +145,7 @@ namespace PckStudio.Forms.Editor
{
var diag = new Additional_Popups.EntityForms.AddEntry("materials", ApplicationScope.EntityImages);
- if (diag.ShowDialog() == DialogResult.OK)
+ if (diag.ShowDialog(this) == DialogResult.OK)
{
if (string.IsNullOrEmpty(diag.SelectedEntity)) return;
if (materialFile.FindAll(mat => mat.Name == diag.SelectedEntity).Count() > 0)
@@ -164,17 +157,11 @@ namespace PckStudio.Forms.Editor
TreeNode NewEntryNode = new TreeNode(NewEntry.Name);
NewEntryNode.Tag = NewEntry;
- foreach (JObject content in EntityJSONData["materials"].Children())
- {
- var prop = content.Properties().FirstOrDefault(prop => prop.Name == NewEntry.Name);
- if (prop is JProperty)
- {
- NewEntryNode.Text = (string)prop.Value;
- NewEntryNode.ImageIndex = EntityJSONData["materials"].Children().ToList().IndexOf(content);
- NewEntryNode.SelectedImageIndex = NewEntryNode.ImageIndex;
- break;
- }
- }
+
+ var material = MaterialData.Find(m => m.InternalName == NewEntry.Name);
+ NewEntryNode.Text = material.DisplayName;
+ NewEntryNode.ImageIndex = MaterialData.IndexOf(material);
+ NewEntryNode.SelectedImageIndex = NewEntryNode.ImageIndex;
treeView1.Nodes.Add(NewEntryNode);
}
}
diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs
index 2f93d182..5c6ad3e6 100644
--- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs
+++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs
@@ -31,7 +31,10 @@ using OMI.Workers.Color;
using PckStudio.Extensions;
using PckStudio.Helper;
+using PckStudio.Internal;
+using PckStudio.Internal.Deserializer;
using PckStudio.Internal.Json;
+using PckStudio.Internal.Serializer;
namespace PckStudio.Forms.Editor
{
@@ -240,15 +243,18 @@ namespace PckStudio.Forms.Editor
if (animationButton.Enabled = _atlasType == "blocks" || _atlasType == "items")
{
+ PckFileData animationFile;
+
bool hasAnimation =
- _pckFile.TryGetValue($"res/textures/{_atlasType}/{dataTile.Tile.InternalName}.png", PckFileType.TextureFile, out var animationFile);
+ _pckFile.TryGetValue($"res/textures/{_atlasType}/{dataTile.Tile.InternalName}.png", PckFileType.TextureFile, out animationFile) ||
+ _pckFile.TryGetValue($"res/textures/{_atlasType}/{dataTile.Tile.InternalName}.tga", PckFileType.TextureFile, out animationFile);
animationButton.Text = hasAnimation ? "Edit Animation" : "Create Animation";
if (playAnimationsToolStripMenuItem.Checked &&
hasAnimation &&
animationFile.Size > 0)
{
- var animation = AnimationHelper.GetAnimationFromFile(animationFile);
+ var animation = animationFile.GetDeserializedData(AnimationDeserializer.DefaultDeserializer);
selectTilePictureBox.Start(animation);
}
}
@@ -513,7 +519,7 @@ namespace PckStudio.Forms.Editor
Title = "Select Texture"
};
- if (fileDialog.ShowDialog() == DialogResult.OK)
+ if (fileDialog.ShowDialog(this) == DialogResult.OK)
{
var img = Image.FromFile(fileDialog.FileName);
SetTile(img);
@@ -532,15 +538,15 @@ namespace PckStudio.Forms.Editor
PckFileType.TextureFile
);
- var animation = AnimationHelper.GetAnimationFromFile(file);
+ var animation = file.GetDeserializedData(AnimationDeserializer.DefaultDeserializer);
var animationEditor = new AnimationEditor(animation, _selectedTile.Tile.InternalName, GetBlendColor());
- if (animationEditor.ShowDialog() != DialogResult.OK)
+ if (animationEditor.ShowDialog(this) != DialogResult.OK)
{
return;
}
- AnimationHelper.SaveAnimationToFile(file, animation);
+ file.SetSerializedData(animationEditor.Result, AnimationSerializer.DefaultSerializer);
// so animations can automatically update upon saving
SelectedIndex = _selectedTile.Index;
}
@@ -552,7 +558,7 @@ namespace PckStudio.Forms.Editor
Filter = "Tile Texture|*.png",
FileName = _selectedTile.Tile.InternalName
};
- if (saveFileDialog.ShowDialog() == DialogResult.OK)
+ if (saveFileDialog.ShowDialog(this) == DialogResult.OK)
{
dataTile.Texture.Save(saveFileDialog.FileName, ImageFormat.Png);
}
@@ -614,7 +620,7 @@ namespace PckStudio.Forms.Editor
0x211d1d // Black
};
- if (colorPick.ShowDialog() != DialogResult.OK) return;
+ if (colorPick.ShowDialog(this) != DialogResult.OK) return;
selectTilePictureBox.BlendColor = colorPick.Color;
selectTilePictureBox.Image = dataTile.Texture;
diff --git a/PCK-Studio/Forms/Skins-And-Textures/AddNewSkin.cs b/PCK-Studio/Forms/Skins-And-Textures/AddNewSkin.cs
index bae14ad6..10dc4771 100644
--- a/PCK-Studio/Forms/Skins-And-Textures/AddNewSkin.cs
+++ b/PCK-Studio/Forms/Skins-And-Textures/AddNewSkin.cs
@@ -51,19 +51,19 @@ namespace PckStudio.Popups
{
case 64:
anim.SetFlag(SkinAnimFlag.RESOLUTION_64x64, true);
- MessageBox.Show("64x64 Skin Detected");
+ MessageBox.Show(this, "64x64 Skin Detected");
skinType = eSkinType._64x64;
break;
case 32:
anim.SetFlag(SkinAnimFlag.RESOLUTION_64x64 | SkinAnimFlag.SLIM_MODEL, false);
- MessageBox.Show("64x32 Skin Detected");
+ MessageBox.Show(this, "64x32 Skin Detected");
skinType = eSkinType._64x32;
break;
default:
if (img.Width == img.Height)
{
anim.SetFlag(SkinAnimFlag.RESOLUTION_64x64, true);
- MessageBox.Show("64x64 HD Skin Detected");
+ MessageBox.Show(this, "64x64 HD Skin Detected");
skinType = eSkinType._64x64HD;
break;
}
@@ -71,12 +71,12 @@ namespace PckStudio.Popups
if (img.Height == img.Width / 2)
{
anim.SetFlag(SkinAnimFlag.RESOLUTION_64x64 | SkinAnimFlag.SLIM_MODEL, false);
- MessageBox.Show("64x32 HD Skin Detected");
+ MessageBox.Show(this, "64x32 HD Skin Detected");
skinType = eSkinType._64x32HD;
break;
}
- MessageBox.Show("Not a Valid Skin File");
+ MessageBox.Show(this, "Not a Valid Skin File");
skinType = eSkinType.Invalid;
return;
}
@@ -145,12 +145,12 @@ namespace PckStudio.Popups
private void buttonSkin_Click(object sender, EventArgs e)
{
- contextMenuSkin.Show(Location.X + buttonSkin.Location.X + 2, Location.Y + buttonSkin.Location.Y + buttonSkin.Size.Height);
+ contextMenuSkin.Show(this, Location.X + buttonSkin.Location.X + 2, Location.Y + buttonSkin.Location.Y + buttonSkin.Size.Height);
}
private void buttonCape_Click(object sender, EventArgs e)
{
- contextMenuCape.Show(Location.X + buttonCape.Location.X + 2, Location.Y + buttonCape.Location.Y + buttonCape.Size.Height);
+ contextMenuCape.Show(this, Location.X + buttonCape.Location.X + 2, Location.Y + buttonCape.Location.Y + buttonCape.Size.Height);
}
private void replaceToolStripMenuItem_Click(object sender, EventArgs e)
@@ -170,6 +170,7 @@ namespace PckStudio.Popups
if (e.Button == MouseButtons.Right)
{
contextMenuSkin.Show(
+ this,
x: Location.X + skinPictureBox.Location.X,
y: Location.Y + skinPictureBox.Location.Y + skinPictureBox.Size.Height
);
@@ -205,6 +206,7 @@ namespace PckStudio.Popups
if (e.Button == MouseButtons.Right)
{
contextMenuCape.Show(
+ this,
x: Location.X + capePictureBox.Location.X,
y: Location.Y + capePictureBox.Location.Y + capePictureBox.Size.Height
);
@@ -220,7 +222,7 @@ namespace PckStudio.Popups
var img = Image.FromFile(ofd.FileName);
if (img.RawFormat != ImageFormat.Png && img.Width != img.Height * 2)
{
- MessageBox.Show("Not a Valid Cape File");
+ MessageBox.Show(this, "Not a Valid Cape File");
return;
}
capePictureBox.Image = Image.FromFile(ofd.FileName);
@@ -237,7 +239,7 @@ namespace PckStudio.Popups
{
if (!int.TryParse(textSkinID.Text, out int _skinId))
{
- MessageBox.Show("The Skin ID Must be a Unique 8 Digit Number Thats Not Already in Use", "Invalid Skin ID", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ MessageBox.Show(this, "The Skin ID Must be a Unique 8 Digit Number Thats Not Already in Use", "Invalid Skin ID", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
string skinId = _skinId.ToString("d08");
@@ -269,7 +271,7 @@ namespace PckStudio.Popups
cape.Filename = $"dlccape{skinId}.png";
skin.AddProperty("CAPEPATH", cape.Filename);
}
- skin.SetData(skinPictureBox.Image, ImageFormat.Png);
+ skin.SetTexture(skinPictureBox.Image);
DialogResult = DialogResult.OK;
Close();
}
@@ -283,10 +285,10 @@ namespace PckStudio.Popups
private void CreateCustomModel_Click(object sender, EventArgs e)
{
//Prompt for skin model generator
- if (MessageBox.Show("Create your own custom skin model?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) != DialogResult.Yes)
+ if (MessageBox.Show(this, "Create your own custom skin model?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) != DialogResult.Yes)
return;
- skin.SetData(Resources.classic_template, ImageFormat.Png);
+ skin.SetTexture(Resources.classic_template);
using generateModel generate = new generateModel(skin);
diff --git a/PCK-Studio/Forms/Skins-And-Textures/AdvancedOptions.cs b/PCK-Studio/Forms/Skins-And-Textures/AdvancedOptions.cs
index e536a96f..19d39a3f 100644
--- a/PCK-Studio/Forms/Skins-And-Textures/AdvancedOptions.cs
+++ b/PCK-Studio/Forms/Skins-And-Textures/AdvancedOptions.cs
@@ -41,7 +41,7 @@ namespace PckStudio.Popups
DialogResult = DialogResult.OK;
return;
}
- MessageBox.Show("Please select a filetype before applying");
+ MessageBox.Show(this, "Please select a filetype before applying");
}
private void applyBulkProperties(IReadOnlyCollection files, int index)
@@ -73,10 +73,10 @@ namespace PckStudio.Popups
if (Enum.IsDefined(typeof(PckFileType), index))
{
- MessageBox.Show($"Data added to {(PckFileType)index} entries");
+ MessageBox.Show(this, $"Data added to {(PckFileType)index} entries");
return;
}
- MessageBox.Show("Data added to all entries");
+ MessageBox.Show(this, "Data added to all entries");
}
private void treeMeta_AfterSelect(object sender, TreeViewEventArgs e)
diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs
index 9171edf1..82df00a6 100644
--- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs
+++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs
@@ -1052,7 +1052,7 @@ namespace PckStudio.Forms
Bitmap bitmap = new Bitmap(uvPictureBox.Image, 64, 64);
using SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "PNG Image Files | *.png";
- if (saveFileDialog.ShowDialog() == DialogResult.OK)
+ if (saveFileDialog.ShowDialog(this) == DialogResult.OK)
{
bitmap.Save(saveFileDialog.FileName, ImageFormat.Png);
}
@@ -1066,7 +1066,7 @@ namespace PckStudio.Forms
openFileDialog.Filter = "PNG Image Files | *.png";
openFileDialog.Title = "Select Skin Texture";
- if (openFileDialog.ShowDialog() == DialogResult.OK) // skins can only be a 1:1 ratio (base 64x64) or a 2:1 ratio (base 64x32)
+ if (openFileDialog.ShowDialog(this) == DialogResult.OK) // skins can only be a 1:1 ratio (base 64x64) or a 2:1 ratio (base 64x32)
{
using (var img = Image.FromFile(openFileDialog.FileName))
{
@@ -1117,7 +1117,7 @@ namespace PckStudio.Forms
private void listView1_DoubleClick(object sender, EventArgs e)
{
ColorDialog colorDialog = new ColorDialog();
- if (colorDialog.ShowDialog() == DialogResult.OK)
+ if (colorDialog.ShowDialog(this) == DialogResult.OK)
listViewBoxes.SelectedItems[0].ForeColor = colorDialog.Color;
Rerender();
}
@@ -1175,7 +1175,7 @@ namespace PckStudio.Forms
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Custom Skin Model File | *.CSM";
- if (saveFileDialog.ShowDialog() != DialogResult.OK)
+ if (saveFileDialog.ShowDialog(this) != DialogResult.OK)
return;
string contents = "";
foreach (ListViewItem listViewItem in listViewBoxes.Items)
@@ -1199,7 +1199,7 @@ namespace PckStudio.Forms
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Custom Skin Model File | *.CSM";
openFileDialog.Title = "Select Custom Skin Model File";
- if (MessageBox.Show("Import custom model project file? Your current work will be lost!", "", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) == DialogResult.Yes && openFileDialog.ShowDialog() == DialogResult.OK)
+ if (MessageBox.Show(this, "Import custom model project file? Your current work will be lost!", "", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) == DialogResult.Yes && openFileDialog.ShowDialog(this) == DialogResult.OK)
{
listViewBoxes.Items.Clear();
modelBoxes.Clear();
@@ -1246,7 +1246,7 @@ namespace PckStudio.Forms
catch (Exception ex)
{
Console.WriteLine(ex.Message);
- MessageBox.Show("Please Select a Part");
+ MessageBox.Show(this, "Please Select a Part");
}
}
@@ -1261,7 +1261,7 @@ namespace PckStudio.Forms
private void changeColorToolStripMenuItem_Click(object sender, EventArgs e)
{
ColorDialog colorDialog = new ColorDialog();
- if (colorDialog.ShowDialog() == DialogResult.OK)
+ if (colorDialog.ShowDialog(this) == DialogResult.OK)
listViewBoxes.SelectedItems[0].ForeColor = colorDialog.Color;
Rerender();
}
@@ -1368,7 +1368,7 @@ namespace PckStudio.Forms
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "JSON Model File | *.JSON";
openFileDialog.Title = "Select JSON Model File";
- if (MessageBox.Show("Import custom model project file? Your current work will be lost!", "", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) == DialogResult.Yes && openFileDialog.ShowDialog() == DialogResult.OK)
+ if (MessageBox.Show(this, "Import custom model project file? Your current work will be lost!", "", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) == DialogResult.Yes && openFileDialog.ShowDialog(this) == DialogResult.OK)
{
listViewBoxes.Items.Clear();
string str1 = JSONToCSM(openFileDialog.FileName);
diff --git a/PCK-Studio/Forms/Utilities/PckCenterBeta.Designer.cs b/PCK-Studio/Forms/Utilities/PckCenterBeta.Designer.cs
deleted file mode 100644
index 01183b0f..00000000
--- a/PCK-Studio/Forms/Utilities/PckCenterBeta.Designer.cs
+++ /dev/null
@@ -1,391 +0,0 @@
-namespace PckStudio.Forms.Utilities
-{
- partial class PckCenterBeta
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PckCenterBeta));
- this.metroTabControl1 = new MetroFramework.Controls.MetroTabControl();
- this.metroTabPage1 = new MetroFramework.Controls.MetroTabPage();
- this.metroPanel1 = new MetroFramework.Controls.MetroPanel();
- this.metroLabel1 = new MetroFramework.Controls.MetroLabel();
- this.VitaCheckBox = new MetroFramework.Controls.MetroCheckBox();
- this.DownloadButton = new System.Windows.Forms.Button();
- this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
- this.CategoryComboBox = new MetroFramework.Controls.MetroComboBox();
- this.OnlineTreeView = new System.Windows.Forms.TreeView();
- this.pictureBox1 = new System.Windows.Forms.PictureBox();
- this.metroTabPage2 = new MetroFramework.Controls.MetroTabPage();
- this.VitaCheckBox2 = new MetroFramework.Controls.MetroCheckBox();
- this.DeleteLocalButton = new System.Windows.Forms.Button();
- this.OpenFolderButton = new System.Windows.Forms.Button();
- this.metroLabel2 = new MetroFramework.Controls.MetroLabel();
- this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
- this.CategoryComboBoxLocal = new MetroFramework.Controls.MetroComboBox();
- this.LocalTreeView = new System.Windows.Forms.TreeView();
- this.pictureBox2 = new System.Windows.Forms.PictureBox();
- this.metroTabControl1.SuspendLayout();
- this.metroTabPage1.SuspendLayout();
- this.metroPanel1.SuspendLayout();
- this.tableLayoutPanel1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
- this.metroTabPage2.SuspendLayout();
- this.tableLayoutPanel2.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
- this.SuspendLayout();
- //
- // metroTabControl1
- //
- this.metroTabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.metroTabControl1.Controls.Add(this.metroTabPage1);
- this.metroTabControl1.Controls.Add(this.metroTabPage2);
- this.metroTabControl1.Location = new System.Drawing.Point(24, 64);
- this.metroTabControl1.Name = "metroTabControl1";
- this.metroTabControl1.SelectedIndex = 0;
- this.metroTabControl1.Size = new System.Drawing.Size(767, 620);
- this.metroTabControl1.Style = MetroFramework.MetroColorStyle.Silver;
- this.metroTabControl1.TabIndex = 0;
- this.metroTabControl1.Theme = MetroFramework.MetroThemeStyle.Dark;
- this.metroTabControl1.UseSelectable = true;
- this.metroTabControl1.SelectedIndexChanged += new System.EventHandler(this.metroTabControl1_SelectedIndexChanged);
- //
- // metroTabPage1
- //
- this.metroTabPage1.Controls.Add(this.metroPanel1);
- this.metroTabPage1.Controls.Add(this.VitaCheckBox);
- this.metroTabPage1.Controls.Add(this.DownloadButton);
- this.metroTabPage1.Controls.Add(this.tableLayoutPanel1);
- this.metroTabPage1.HorizontalScrollbarBarColor = true;
- this.metroTabPage1.HorizontalScrollbarHighlightOnWheel = false;
- this.metroTabPage1.HorizontalScrollbarSize = 10;
- this.metroTabPage1.Location = new System.Drawing.Point(4, 38);
- this.metroTabPage1.Name = "metroTabPage1";
- this.metroTabPage1.Size = new System.Drawing.Size(759, 578);
- this.metroTabPage1.TabIndex = 0;
- this.metroTabPage1.Text = "Online";
- this.metroTabPage1.Theme = MetroFramework.MetroThemeStyle.Dark;
- this.metroTabPage1.VerticalScrollbarBarColor = true;
- this.metroTabPage1.VerticalScrollbarHighlightOnWheel = false;
- this.metroTabPage1.VerticalScrollbarSize = 10;
- //
- // metroPanel1
- //
- this.metroPanel1.Controls.Add(this.metroLabel1);
- this.metroPanel1.Dock = System.Windows.Forms.DockStyle.Top;
- this.metroPanel1.HorizontalScrollbarBarColor = true;
- this.metroPanel1.HorizontalScrollbarHighlightOnWheel = false;
- this.metroPanel1.HorizontalScrollbarSize = 10;
- this.metroPanel1.Location = new System.Drawing.Point(252, 0);
- this.metroPanel1.Name = "metroPanel1";
- this.metroPanel1.Size = new System.Drawing.Size(507, 505);
- this.metroPanel1.TabIndex = 6;
- this.metroPanel1.Theme = MetroFramework.MetroThemeStyle.Dark;
- this.metroPanel1.VerticalScrollbarBarColor = true;
- this.metroPanel1.VerticalScrollbarHighlightOnWheel = false;
- this.metroPanel1.VerticalScrollbarSize = 10;
- //
- // metroLabel1
- //
- this.metroLabel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
- this.metroLabel1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.metroLabel1.FontSize = MetroFramework.MetroLabelSize.Tall;
- this.metroLabel1.FontWeight = MetroFramework.MetroLabelWeight.Bold;
- this.metroLabel1.Location = new System.Drawing.Point(0, 0);
- this.metroLabel1.Name = "metroLabel1";
- this.metroLabel1.Size = new System.Drawing.Size(507, 505);
- this.metroLabel1.TabIndex = 3;
- this.metroLabel1.Text = "Pack Name: %n\r\nAuthor: %a\r\nDescription: %d";
- this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark;
- this.metroLabel1.WrapToLine = true;
- //
- // VitaCheckBox
- //
- this.VitaCheckBox.AutoSize = true;
- this.VitaCheckBox.Location = new System.Drawing.Point(259, 511);
- this.VitaCheckBox.Name = "VitaCheckBox";
- this.VitaCheckBox.Size = new System.Drawing.Size(97, 15);
- this.VitaCheckBox.Style = MetroFramework.MetroColorStyle.Silver;
- this.VitaCheckBox.TabIndex = 5;
- this.VitaCheckBox.Text = "Vita/PS4 PCKs";
- this.VitaCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark;
- this.VitaCheckBox.UseSelectable = true;
- //
- // DownloadButton
- //
- this.DownloadButton.BackColor = System.Drawing.Color.Purple;
- this.DownloadButton.FlatAppearance.BorderSize = 0;
- this.DownloadButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.DownloadButton.ForeColor = System.Drawing.Color.White;
- this.DownloadButton.ImeMode = System.Windows.Forms.ImeMode.NoControl;
- this.DownloadButton.Location = new System.Drawing.Point(259, 532);
- this.DownloadButton.Name = "DownloadButton";
- this.DownloadButton.Size = new System.Drawing.Size(169, 43);
- this.DownloadButton.TabIndex = 4;
- this.DownloadButton.Text = "DOWNLOAD TO COLLECTION";
- this.DownloadButton.UseVisualStyleBackColor = false;
- this.DownloadButton.Visible = false;
- this.DownloadButton.Click += new System.EventHandler(this.DownloadButton_Click);
- //
- // tableLayoutPanel1
- //
- this.tableLayoutPanel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.tableLayoutPanel1.ColumnCount = 1;
- this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
- this.tableLayoutPanel1.Controls.Add(this.CategoryComboBox, 0, 1);
- this.tableLayoutPanel1.Controls.Add(this.OnlineTreeView, 0, 2);
- this.tableLayoutPanel1.Controls.Add(this.pictureBox1, 0, 0);
- this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Left;
- this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
- this.tableLayoutPanel1.Name = "tableLayoutPanel1";
- this.tableLayoutPanel1.RowCount = 3;
- this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20.24221F));
- this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.228374F));
- this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 73.52941F));
- this.tableLayoutPanel1.Size = new System.Drawing.Size(252, 578);
- this.tableLayoutPanel1.TabIndex = 2;
- //
- // CategoryComboBox
- //
- this.CategoryComboBox.Dock = System.Windows.Forms.DockStyle.Fill;
- this.CategoryComboBox.FormattingEnabled = true;
- this.CategoryComboBox.ItemHeight = 23;
- this.CategoryComboBox.Location = new System.Drawing.Point(3, 119);
- this.CategoryComboBox.Name = "CategoryComboBox";
- this.CategoryComboBox.Size = new System.Drawing.Size(246, 29);
- this.CategoryComboBox.Style = MetroFramework.MetroColorStyle.Silver;
- this.CategoryComboBox.TabIndex = 6;
- this.CategoryComboBox.Theme = MetroFramework.MetroThemeStyle.Light;
- this.CategoryComboBox.UseSelectable = true;
- this.CategoryComboBox.SelectedIndexChanged += new System.EventHandler(this.CategoryComboBox_SelectedIndexChanged);
- //
- // OnlineTreeView
- //
- this.OnlineTreeView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.OnlineTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
- this.OnlineTreeView.ForeColor = System.Drawing.Color.White;
- this.OnlineTreeView.Location = new System.Drawing.Point(3, 155);
- this.OnlineTreeView.Name = "OnlineTreeView";
- this.OnlineTreeView.Size = new System.Drawing.Size(246, 420);
- this.OnlineTreeView.TabIndex = 0;
- this.OnlineTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.OnlineTreeView_AfterSelect);
- //
- // pictureBox1
- //
- this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Right;
- this.pictureBox1.Image = global::PckStudio.Properties.Resources.pckCenterHeader;
- this.pictureBox1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
- this.pictureBox1.Location = new System.Drawing.Point(3, 3);
- this.pictureBox1.Name = "pictureBox1";
- this.pictureBox1.Size = new System.Drawing.Size(246, 110);
- this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
- this.pictureBox1.TabIndex = 4;
- this.pictureBox1.TabStop = false;
- //
- // metroTabPage2
- //
- this.metroTabPage2.Controls.Add(this.VitaCheckBox2);
- this.metroTabPage2.Controls.Add(this.DeleteLocalButton);
- this.metroTabPage2.Controls.Add(this.OpenFolderButton);
- this.metroTabPage2.Controls.Add(this.metroLabel2);
- this.metroTabPage2.Controls.Add(this.tableLayoutPanel2);
- this.metroTabPage2.HorizontalScrollbarBarColor = true;
- this.metroTabPage2.HorizontalScrollbarHighlightOnWheel = false;
- this.metroTabPage2.HorizontalScrollbarSize = 10;
- this.metroTabPage2.Location = new System.Drawing.Point(4, 38);
- this.metroTabPage2.Name = "metroTabPage2";
- this.metroTabPage2.Size = new System.Drawing.Size(759, 578);
- this.metroTabPage2.Style = MetroFramework.MetroColorStyle.Silver;
- this.metroTabPage2.TabIndex = 1;
- this.metroTabPage2.Text = "Local";
- this.metroTabPage2.Theme = MetroFramework.MetroThemeStyle.Dark;
- this.metroTabPage2.VerticalScrollbarBarColor = true;
- this.metroTabPage2.VerticalScrollbarHighlightOnWheel = false;
- this.metroTabPage2.VerticalScrollbarSize = 10;
- //
- // VitaCheckBox2
- //
- this.VitaCheckBox2.AutoSize = true;
- this.VitaCheckBox2.Location = new System.Drawing.Point(258, 511);
- this.VitaCheckBox2.Name = "VitaCheckBox2";
- this.VitaCheckBox2.Size = new System.Drawing.Size(97, 15);
- this.VitaCheckBox2.Style = MetroFramework.MetroColorStyle.Silver;
- this.VitaCheckBox2.TabIndex = 9;
- this.VitaCheckBox2.Text = "Vita/PS4 PCKs";
- this.VitaCheckBox2.Theme = MetroFramework.MetroThemeStyle.Dark;
- this.VitaCheckBox2.UseSelectable = true;
- //
- // DeleteLocalButton
- //
- this.DeleteLocalButton.BackColor = System.Drawing.Color.Crimson;
- this.DeleteLocalButton.FlatAppearance.BorderSize = 0;
- this.DeleteLocalButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.DeleteLocalButton.ForeColor = System.Drawing.Color.White;
- this.DeleteLocalButton.ImeMode = System.Windows.Forms.ImeMode.NoControl;
- this.DeleteLocalButton.Location = new System.Drawing.Point(387, 532);
- this.DeleteLocalButton.Name = "DeleteLocalButton";
- this.DeleteLocalButton.Size = new System.Drawing.Size(87, 43);
- this.DeleteLocalButton.TabIndex = 8;
- this.DeleteLocalButton.Text = "DELETE";
- this.DeleteLocalButton.UseVisualStyleBackColor = false;
- this.DeleteLocalButton.Visible = false;
- this.DeleteLocalButton.Click += new System.EventHandler(this.DeleteLocalButton_Click);
- //
- // OpenFolderButton
- //
- this.OpenFolderButton.BackColor = System.Drawing.Color.SteelBlue;
- this.OpenFolderButton.FlatAppearance.BorderSize = 0;
- this.OpenFolderButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.OpenFolderButton.ForeColor = System.Drawing.Color.White;
- this.OpenFolderButton.ImeMode = System.Windows.Forms.ImeMode.NoControl;
- this.OpenFolderButton.Location = new System.Drawing.Point(258, 532);
- this.OpenFolderButton.Name = "OpenFolderButton";
- this.OpenFolderButton.Size = new System.Drawing.Size(123, 43);
- this.OpenFolderButton.TabIndex = 7;
- this.OpenFolderButton.Text = "OPEN FOLDER";
- this.OpenFolderButton.UseVisualStyleBackColor = false;
- this.OpenFolderButton.Visible = false;
- this.OpenFolderButton.Click += new System.EventHandler(this.OpenFolderButton_Click);
- //
- // metroLabel2
- //
- this.metroLabel2.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
- this.metroLabel2.Dock = System.Windows.Forms.DockStyle.Fill;
- this.metroLabel2.FontSize = MetroFramework.MetroLabelSize.Tall;
- this.metroLabel2.FontWeight = MetroFramework.MetroLabelWeight.Bold;
- this.metroLabel2.Location = new System.Drawing.Point(252, 0);
- this.metroLabel2.Name = "metroLabel2";
- this.metroLabel2.Size = new System.Drawing.Size(507, 578);
- this.metroLabel2.TabIndex = 3;
- this.metroLabel2.Text = "Pack Name: %n\r\nAuthor: %a\r\nDescription: %d";
- this.metroLabel2.Theme = MetroFramework.MetroThemeStyle.Dark;
- this.metroLabel2.WrapToLine = true;
- //
- // tableLayoutPanel2
- //
- this.tableLayoutPanel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.tableLayoutPanel2.ColumnCount = 1;
- this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
- this.tableLayoutPanel2.Controls.Add(this.CategoryComboBoxLocal, 0, 1);
- this.tableLayoutPanel2.Controls.Add(this.LocalTreeView, 0, 2);
- this.tableLayoutPanel2.Controls.Add(this.pictureBox2, 0, 0);
- this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Left;
- this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0);
- this.tableLayoutPanel2.Name = "tableLayoutPanel2";
- this.tableLayoutPanel2.RowCount = 3;
- this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20.24F));
- this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.23F));
- this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 73.53F));
- this.tableLayoutPanel2.Size = new System.Drawing.Size(252, 578);
- this.tableLayoutPanel2.TabIndex = 5;
- //
- // CategoryComboBoxLocal
- //
- this.CategoryComboBoxLocal.Dock = System.Windows.Forms.DockStyle.Fill;
- this.CategoryComboBoxLocal.FormattingEnabled = true;
- this.CategoryComboBoxLocal.ItemHeight = 23;
- this.CategoryComboBoxLocal.Location = new System.Drawing.Point(3, 119);
- this.CategoryComboBoxLocal.Name = "CategoryComboBoxLocal";
- this.CategoryComboBoxLocal.Size = new System.Drawing.Size(246, 29);
- this.CategoryComboBoxLocal.Style = MetroFramework.MetroColorStyle.Silver;
- this.CategoryComboBoxLocal.TabIndex = 10;
- this.CategoryComboBoxLocal.Theme = MetroFramework.MetroThemeStyle.Light;
- this.CategoryComboBoxLocal.UseSelectable = true;
- this.CategoryComboBoxLocal.SelectedIndexChanged += new System.EventHandler(this.CategoryComboBoxLocal_SelectedIndexChanged);
- //
- // LocalTreeView
- //
- this.LocalTreeView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.LocalTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
- this.LocalTreeView.ForeColor = System.Drawing.Color.White;
- this.LocalTreeView.Location = new System.Drawing.Point(3, 155);
- this.LocalTreeView.Name = "LocalTreeView";
- this.LocalTreeView.Size = new System.Drawing.Size(246, 420);
- this.LocalTreeView.TabIndex = 0;
- this.LocalTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.LocalTreeView_AfterSelect);
- //
- // pictureBox2
- //
- this.pictureBox2.Dock = System.Windows.Forms.DockStyle.Fill;
- this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image")));
- this.pictureBox2.ImeMode = System.Windows.Forms.ImeMode.NoControl;
- this.pictureBox2.Location = new System.Drawing.Point(3, 3);
- this.pictureBox2.Name = "pictureBox2";
- this.pictureBox2.Size = new System.Drawing.Size(246, 110);
- this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
- this.pictureBox2.TabIndex = 4;
- this.pictureBox2.TabStop = false;
- //
- // PckCenterBeta
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(814, 707);
- this.Controls.Add(this.metroTabControl1);
- this.Name = "PckCenterBeta";
- this.Resizable = false;
- this.Style = MetroFramework.MetroColorStyle.Silver;
- this.Text = "Pck Center";
- this.Theme = MetroFramework.MetroThemeStyle.Dark;
- this.metroTabControl1.ResumeLayout(false);
- this.metroTabPage1.ResumeLayout(false);
- this.metroTabPage1.PerformLayout();
- this.metroPanel1.ResumeLayout(false);
- this.tableLayoutPanel1.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
- this.metroTabPage2.ResumeLayout(false);
- this.metroTabPage2.PerformLayout();
- this.tableLayoutPanel2.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
- this.ResumeLayout(false);
-
- }
-
- #endregion
-
- private MetroFramework.Controls.MetroTabControl metroTabControl1;
- private MetroFramework.Controls.MetroTabPage metroTabPage1;
- private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
- private System.Windows.Forms.TreeView OnlineTreeView;
- private MetroFramework.Controls.MetroLabel metroLabel1;
- private System.Windows.Forms.PictureBox pictureBox1;
- private System.Windows.Forms.Button DownloadButton;
- private MetroFramework.Controls.MetroTabPage metroTabPage2;
- private System.Windows.Forms.Button DeleteLocalButton;
- private System.Windows.Forms.Button OpenFolderButton;
- private MetroFramework.Controls.MetroLabel metroLabel2;
- private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
- private System.Windows.Forms.PictureBox pictureBox2;
- private System.Windows.Forms.TreeView LocalTreeView;
- private MetroFramework.Controls.MetroCheckBox VitaCheckBox;
- private MetroFramework.Controls.MetroCheckBox VitaCheckBox2;
- private MetroFramework.Controls.MetroComboBox CategoryComboBox;
- private MetroFramework.Controls.MetroPanel metroPanel1;
- private MetroFramework.Controls.MetroComboBox CategoryComboBoxLocal;
- }
-}
\ No newline at end of file
diff --git a/PCK-Studio/Forms/Utilities/PckCenterBeta.cs b/PCK-Studio/Forms/Utilities/PckCenterBeta.cs
deleted file mode 100644
index a5f68a1d..00000000
--- a/PCK-Studio/Forms/Utilities/PckCenterBeta.cs
+++ /dev/null
@@ -1,265 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.IO;
-using System.Linq;
-using System.Net;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using System.Windows.Media.Imaging;
-using MetroFramework.Forms;
-using PckStudio.API.PCKCenter.model;
-using PckStudio.API.PCKCenter;
-
-namespace PckStudio.Forms.Utilities
-{
- public partial class PckCenterBeta : MetroForm
- {
- public PckCenterBeta()
- {
- InitializeComponent();
- try
- {
- GetCategories();
- CategoryComboBox.SelectedIndex = 0;
- }
- catch
- {
-
- }
- }
-
- public PCKCollections Collections = new PCKCollections();
- public PCKCollectionsLocal LocalCollections = new PCKCollectionsLocal();
- LocalActions LActions = new LocalActions();
- string cache = Program.AppDataCache;
-
- #region Functions
- public void GetCategories()
- {
- CategoryComboBox.Items.Clear();
- CategoryComboBoxLocal.Items.Clear();
- switch (metroTabControl1.SelectedIndex)
- {
- case 0:
- string[] Cats = Collections.GetCategories();
- foreach (string cat in Cats)
- {
- CategoryComboBox.Items.Add(cat);
- }
- break;
- case 1:
- string[] CatsL = LocalCollections.GetLocalCategories(VitaCheckBox2.Checked);
- foreach (string cat in CatsL)
- {
- CategoryComboBoxLocal.Items.Add(cat);
- }
- break;
- }
- }
-
- public void LoadPacks()
- {
- OnlineTreeView.Nodes.Clear();
- LocalTreeView.Nodes.Clear();
-
- DownloadButton.Visible = false;
- pictureBox1.Image = pictureBox2.Image = Properties.Resources.pckCenterHeader;
-
- switch (metroTabControl1.SelectedIndex)
- {
- case 0:
-
- PCKCenterJSON packs = Collections.GetPackDescs(CategoryComboBox.Text, VitaCheckBox.Checked);
- Collections.CenterPacks = packs;
- foreach (KeyValuePair entry in packs.Data)
- {
- TreeNode tn = new TreeNode(entry.Value.Name);
- tn.Tag = entry.Key;
- OnlineTreeView.Nodes.Add(tn);
- }
-
- break;
- case 1:
-
- PCKCenterJSON Localpacks = LocalCollections.GetLocalPackDescs(CategoryComboBoxLocal.Text, VitaCheckBox2.Checked);
- LocalCollections.CenterPacks = Localpacks;
- foreach (KeyValuePair entry in Localpacks.Data)
- {
- TreeNode tn = new TreeNode(entry.Value.Name);
- tn.Tag = entry.Key;
- LocalTreeView.Nodes.Add(tn);
- }
-
- break;
- }
- }
-
- public bool IsPackLocal(int packID, bool isVita)
- {
- return File.Exists(cache + $"packs/{(isVita ? "vita" : "normal")}/pcks/" + packID + ".pck");
- }
- #endregion
-
- #region Online
- private void OnlineTreeView_AfterSelect(object sender, TreeViewEventArgs e)
- {
- try
- {
- EntryInfo EI = Collections.CenterPacks.Data[OnlineTreeView.SelectedNode.Tag.ToString()];
- string nam = string.Format("Pack Name: {0}\npack ID: {1}\nAuthor: {2}\nDescription: {3}",
- EI.Name, OnlineTreeView.SelectedNode.Tag.ToString(), EI.Author, EI.Description);
-
- metroLabel1.Text = nam;
- metroLabel1.AutoSize = false;
- metroLabel1.WrapToLine = true;
-
- pictureBox1.Image = Collections.GetPackImage(int.Parse(OnlineTreeView.SelectedNode.Tag.ToString()), VitaCheckBox.Checked);
-
- if(!IsPackLocal(int.Parse(OnlineTreeView.SelectedNode.Tag.ToString()), VitaCheckBox.Checked))
- DownloadButton.Visible = true;
- else
- DownloadButton.Visible = false;/**/
- }
- catch
- {
-
- }
- }
-
- private void CategoryComboBox_SelectedIndexChanged(object sender, EventArgs e)
- {
- try
- {
- LoadPacks();
- }
- catch
- {
-
- }
- }
-
- private void DownloadButton_Click(object sender, EventArgs e)
- {
- try
- {
- Collections.TryDownloadPack(CategoryComboBox.Text, int.Parse(OnlineTreeView.SelectedNode.Tag.ToString()), VitaCheckBox.Checked);
- MessageBox.Show("Download complete");/**/
- }
- catch
- {
-
- }
- }
-
- #endregion
-
- #region Local
-
- private void LocalTreeView_AfterSelect(object sender, TreeViewEventArgs e)
- {
-
- try
- {
- string nam = "Pack Name: %n\npack ID: %pid\nAuthor: %a\nDescription: %d";
- EntryInfo EI = LocalCollections.CenterPacks.Data[LocalTreeView.SelectedNode.Tag.ToString()];
-
- metroLabel2.Text = nam.Replace("%n", EI.Name).Replace("%a", EI.Author).Replace("%d", EI.Description).Replace("%pid", LocalTreeView.SelectedNode.Tag.ToString());
- metroLabel2.AutoSize = false;
- metroLabel2.WrapToLine = true;
-
- pictureBox2.Image = LocalCollections.GetLocalPackImage(int.Parse(LocalTreeView.SelectedNode.Tag.ToString()), VitaCheckBox2.Checked);
- OpenFolderButton.Visible = true;
- DeleteLocalButton.Visible = true;
- }
- catch
- {
-
- }
- }
-
- private void CategoryComboBoxLocal_SelectedIndexChanged(object sender, EventArgs e)
- {
-
- try
- {
- LoadPacks();
- }
- catch
- {
-
- }
- }
-
- private void metroTabControl1_SelectedIndexChanged(object sender, EventArgs e)
- {
- try
- {
- GetCategories();
- CategoryComboBoxLocal.SelectedIndex = 0;
- }
- catch
- {
-
- }
- }
-
- private void OpenFolderButton_Click(object sender, EventArgs e)
- {
- switch (VitaCheckBox2.Checked)
- {
- case true:
- System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo()
- {
- FileName = cache + "packs/vita/pcks",
- UseShellExecute = true,
- Verb = "open"
- });
- break;
- case false:
- Console.WriteLine(cache + "packs/normal/pcks/");
- System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo()
- {
- FileName = cache + "packs/normal/pcks/",
- UseShellExecute = true,
- Verb = "open"
- });
- break;
- }
- }
-
- private void DeleteLocalButton_Click(object sender, EventArgs e)
- {
- EntryInfo EI = LocalCollections.CenterPacks.Data[LocalTreeView.SelectedNode.Tag.ToString()];
- string PackID = LocalTreeView.SelectedNode.Tag.ToString();
- LActions.Removepack(LocalCollections.CenterPacks, int.Parse(PackID));
- metroLabel2.Text = "Pack Name: %n\npack ID: %pid\nAuthor: %a\nDescription: %d";
- pictureBox2.Image.Dispose();
- pictureBox2.Image = Properties.Resources.NoImageFound;
- switch (VitaCheckBox2.Checked)
- {
- case true:
- File.Delete(cache + "packs/vita/pcks/" + PackID + ".pck");
- File.Delete(cache + "packs/vita/images/" + PackID + ".png");
- break;
- case false:
- File.Delete(cache + "packs/normal/pcks/" + PackID + ".pck");
- File.Delete(cache + "packs/normal/images/" + PackID + ".png");
- break;
- }
- LocalTreeView.SelectedNode.Remove();
- switch (LActions.SaveLocalJSON(LocalCollections.CenterPacks, CategoryComboBoxLocal.Text, VitaCheckBox2.Checked))
- {
- case false:
- MessageBox.Show("Could not save JSON due to unknown error");
- break;
- }
- }
-
- #endregion
-
- }
-}
diff --git a/PCK-Studio/Forms/Utilities/PckCenterBeta.resx b/PCK-Studio/Forms/Utilities/PckCenterBeta.resx
deleted file mode 100644
index 715259ab..00000000
--- a/PCK-Studio/Forms/Utilities/PckCenterBeta.resx
+++ /dev/null
@@ -1,1956 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAYAAABNo9TkAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAP+NSURBVHhe7P0H
- mGRV2T1ufwxZgmSQoIBKEFFUUBReJCgKoiAqGAGzJEUJghjAgIjpFQMvggIiGREFDKioKGZFBXPCCCbC
- MDl0ffuuf+3+HYqaUF3dM909a13XukSYqTpnn33qnPWsJ/z/giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgmCcY7kOp3S4
- fIMrdLhigys1uPIAbH5OZfN7sH5/PZ56jPWYgyAIgiAIgiAIgmDcoym8m4K7imwieZXCVQsf0OFqhasX
- rtHhmoUP7HCtwrU7XKfDdTtcrw/Wv4P1c7B+Nvqu+r2OwbE4LnSMjtVxO36sgr9b1EfMB0EQBEEQBEEQ
- BEsETQHeFN9N4d0U3VVoV3FNMG9QuGHhRoUPKty4cJPCTTvcrPDBhQ8p3LzDLQq37PChDT5sIWz+Oax/
- 32dV+mzfg77TdzsGx+O4HJ/jdLyOe/3CKvqdUxX2VdA3xXy3iI+AD4IgCIIgCIIgCPpCFZBViHeL8CrA
- Oc1VfBOtxCshW0U3oVuFNjFcBfVWhVsXblO4beF2hY8s3L7wUYWPLtyh8DGFj+3wcYU7drhTh49fTNY/
- j/UzfB76bN/j+3wvOgbH47geUegYHatjfnihc6hC37lVUV8FvTWwFk0Rb62aAt5aVvHeFO5BEARBEARB
- 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
- J5889NGPfnToqquuan3ve99r/eUvf2kL6omGGTNmtMX+T3/609bXvva11gUXXNA69dRTh5zjHnvsMW+L
- LbaYu8IKKzSFfBXw1qgKeGtnDat4t7bVeW8K9+q4uzaukWvVFO2upWvq2rrGrrVr7trbA1WwNx32mhJv
- D9lL9lTTXbfn7L1au25P2pv2qL3aFOtx1oMgCIIgCIIgmDCoolzzLU24munr1Smvonynwpq6rm7YPGyz
- sTmeNW3dLO3XF6o/1llderPa5OqQNwW5juIcV+64mmcp1OqgdS7n0jbFuHpqKdnqrLm86rCbQlyad9MF
- b4vwBz7wgXN22mmneS960YuGiNRLLrmk9eMf/7h17733duTssgkuPoefQ98t4B/ykIfMLWtHwDfFu7W1
- xk3h7hq4Fq6Ja+MaNUW7a+hauqY6zbvGrrVr7to3BXt12O0VzeeUO9hD9pI9ZW9Vd92es/fsQXvRnrQ3
- u8V6dxp8s8FcEARBEARBEATBuAAnsY5E031dozeifKNC9b0LEuVPLzQ6S+q6umHzsHXrri55TVt/d6H6
- Y83DjDer9ePdgpxokybNedWwTL24ZmbVGW+KcanpNS29OuJtIS4N/aEPfei8Aw44YP4JJ5wwdO6557Zu
- vPHG1j//+c+OHA36xdSpU1vf+c53WmeffXbr6KOPHtp9993nr7feenPKejeFe9Nxd21co6Zor067a+ra
- usautWveS7DbI/aKPaNjvD1kL9V0+Oqu23P2nj1oL9qT9qZGc91i3V62p+1te9xet+fr6La46kEQBEEQ
- BEEQLBU0U9jXKDS+qnZf36JQEy71vTV9vTrlBJCaYILI6KzXFNZact26315YXXKpy+cU6vRtXJfRXWqT
- 1Y93C3I1zdUdr/Xi6qCrM34/MT5lypTZ2267bdsRf//739/6+te/3rr77rs7sjIYa9x+++1q4lsf+MAH
- Wi996UuHdtxxx/kPeMADCHfp8soHqmh37VxDDepc01rXXl12175bsNsj9oqUeHvHHrKX7Knqrttr9lyt
- XZcKb0++uNAerWLd3q1p8LVm3R6v3eDtffeAeyGuehAEQRAEQRAESwTdbrl031pX/pBCY6x0yH5soSZc
- taZcCnF1ygkgQoggOqFQ6ro0ZPXDunWbka0ZWHXJNXXT6VtDN53VpTmrUa4OeRXk6sab7jgnVip1W4yr
- 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
- 7b///hqg9RQr3TzqqKPGrBmc7t46wxvLVb6LGJcGTbz9p/O//j8nm2CpQr1bpLeP80EPetDAjcA6M8EJ
- JN+tKRrX2LUkimpquxpgteEHF9a6c03hzDcngPwGjxT2oJRkridhJW3e/GsjtnTxrqnuHGvil0OteR2n
- /24u7J///OfO2YwMeiCUz7IG1t2+FQDobmBmnzsGASmiXOBA4ELTPL0XrFMt8RBM6C7xsLbVTZ910EEH
- Dd15552dIxh9XHHFFYs1N19/hYMPPrj1ve99r/M3lzys/yMe8Qh7uztIUru9249+Y1yD8wvr7PRuN73W
- ptdO737L7FH9DjSQG2SfBkEQBMEyiyrCq+gmHqROerhyaaSsERPoxRC5fuglLwzDxSdRzmUijqQZq+Os
- rrluyZypQwq7XXNOFkdLWq+63O8WEnbcV24hsdmeZ667uFTuJQ1N03Rj32GHHXoKk17kOn70ox/tfMLo
- 4xe/+EVrxx13rK45McixltqL0rYJEyKOO0yoE3PdIn3YRT/jjDM6nzwyCELoNl4+SzDA90sf16H8i4Wu
- r7Ritb81tV2NuHnUjyjU4E3d+aKawi0KfvNrPboaYmnK6orNvza27w2FBDDxy6GWas7ht9es37RDDz10
- YBd9jz32cF2sQxXo9jMH1/epMzf2jTgXLHh34dsKBS64/O4N9fmO03/nsEvLVzuvwV29P7jprrVrO33T
- TTedq3naWOGHP/xhO4hTvmuxuPPOO7e7v4/1pIJecL+ecsopNXBlz/sN8VtizaydNfRbU2en+w36YGF1
- 0/1G+a3ym+W3S08DWR4CSc25/GkgFwRBEASLQFOQE+OEuIcowe3lT+RbZ1ZplJq/SIUUEef0ERWoQRF6
- CIdhuGhuVigFlMPkBZbbJL3YS+1TCmutOddc92Tio7rmHCxOFhGnNreXQ9iutzViaUmDQ33OOee0HvKQ
- h/QUIQsicX7uued2PmX0oaHZyiuvrKa8ig8OMCGo7tb/cgytoX9PLEv35WoT8v4OUe/vt110KcpTp07t
- fPrIcN555zl3n+t4amM4aeQcYAKIS0n82AdGXEltVysumEPw+L0eDbHjGSD46je+prrbh+Zfv7qQENaE
- kKPP2eeoSh+3XncaDXfLLbd0zmpk6LjodS00LSMKpbfb5806aOKcq69hmcAFYahxnv/tHjPY614RBFGb
- 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
- 3FsLa8O4pxc+vnDrwo0KVy/M2LUgCIKCCPQwDMMJxF4CdllgnPQgGN/4xje+UWej/7fwT4XNhnHnFL6n
- 8ITCVxQeWLh74aMLNy/M2LUgCIIOItDDMAwnEHuJ12WFcdKDYHzjBS94gVT3ZsO47xd+qfDiwo8Unlr4
- ukLvmvsWPrEwY9eCIAgaiEAPwzCcQOwlXJclxkkPgvGL2267rbXKKqvUhnF/LtQw7sbCzxV+svB9hScV
- vrrwuYUZuxYEQdCFCPQwDMMJxF6idVkjJ/2SSy6Jkx4E4xAnnXQSF316oYZxvyv8UeFXCi8r/FjhOwtf
- X1jHrj2p8BGFmxSuWRgXPQiCZRoR6GEYhhOIvQTrssg46UEwPjF16tTWhhtuOLe8L95T+NfCXxR+u9D7
- 5PmF3WPXnlL4uMKHFq5fyEXP2LUgCJZZRKCHYRhOIPYSq8sqB6lJHxoaan3nO99pffjDH2596EMfavPM
- M89s07+r/MhHPtLmRz/60WF+7GMfG+ZZZ501hP/3f/83zLPPPnuYH//4x9s855xzhnnuuee2+YlPfKKy
- 9clPfnKY5513Xpt/+ctfOkfbP771rW+1zj///DYvuOCCNj/1qU+1eeGFF+LQpz/96TYvuuiiYV588cVt
- XnLJJW2W9W3zsssuG+bll1/e5hVXXNHmlVde2eZnPvOZYV511VVtfvazn23z6quvbvNzn/tcm5///OeH
- ec0117R57bXXtnnddde1+YUvfGGYX/ziF9v80pe+1OaXv/zlNq+//vo2v/KVrwzzq1/9aptf+9rXWnjD
- DTe0+fWvf71Nc7sHwR133NFuiIbf/OY327zxxhuHae3x29/+dps33XTTMO05/O53v9vm9773vWF+//vf
- b/MHP/hBmz/84Q+H+aMf/ajNH//4x23+5Cc/GebNN9/c5k9/+tM2f/aznw3z5z//eZu33HJLm7feeusw
- f/GLX7RpPfBXv/pVm7fffnvnTEeOsvc1jJtZ+O/CPxT+pPBrhVcUGrv2rsJjCw8rfGbhroXbFW5W+MDC
- FQuDIAiWSUSgh2EYTiB2i9RlnYM46fPnz2+95S1vaa244orExOJS+i7OLzRWak6hztVmQGuOde9i0p/1
- d/xdn+Gz6me3v6uI/c6R9o83vvGNCztu7qY6YQJKKnI/x43+/Himc7K2zs95Ol/n3V7bLbbYoh2gGSl+
- +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
- fYFBp/4dg36aOFQEg84Z2AbdsqxCyAbdGGOMMblSjkH//vvvS5tttlkLm266aTObbLJJU0Tjxhtv3KD/
- nAL6781stNFGLfTs2bOFDTbYoJn111+/hR49erSw3nrrNdO9e/cW1l133Ra0/mbWWWedOPVrr732lLXW
- WqtBNMKaa65ZCqyxxhrNEAXPqmuvvba04oorNrPCCisEmpZffvnGiIY///nP9YE//elPLSy33HIt/PGP
- f2xh2WWXbWGZZZZpZumll27hD3/4QwtLLbVUC0suuWQLSyyxRAuLL754C4sttlgLiy66aAuLLLJIMwsv
- vHALv//971tYaKGFWlhwwQWniAbRuMACCzSJEvzud79rRq8TPZ3y9eqrrwaDztkVg85ZFoPO2RaDzlmX
- My9nX87AnIVt0C3Lqrps0I0xxhiTK+UYdMtqD7399ttxg84ZlrMsZ1rOtpxxkww6Z2IbdMuyqiobdGOM
- Mcbkig26VW199NFHGHTKEVobdOboB4O+k9hErCaCQf+VsCzLqpps0I0xxhiTKzboVrX1+eefB4NOIzrO
- sMyRv18Egz5AxA36ksIG3bKsqssG3RhjjDG5YoNuVVvffvtt3KAz0i1u0M8QNuiWZRVSNujGGGOMyRUb
- dKvaGjVqVBqDvrPAoP9VYNB/K2zQLcuqqmzQjTHGGJMrNuhWtTV+/PipGfSrRdygbyps0C3LKoxs0I0x
- xhiTKzboVrVVX19vg25ZVk3KBt0YY4wxuWKDblVbjY2NaVPcbdAtyyqUbNCNMcYYkys26Fa1NY0U96Qm
- cTbolmUVRjboxhhjjMkVG3Sr2vrhhx+mZdA548YNeujiboNuWVbVZYNujDHGmFyxQbeqrc8++yxu0DnD
- YtA50waDzlnXY9YsyyqcbNCNMcYYkys26Fa19e677waDztmVMyxnWc60nG2DQefMy9kXg85Z2Abdsqyq
- ywbdGGOMMblig25VW6+88goGfWJ0dn1fcJa9V3C2PU3EDTpn4GDQORtblmVVTTboxhhjjMkVG3Sr2nr2
- 2WeDQf9OYND/LTDoVwoM+qGir9hIcAZeXMwtbNAty6qqbNCNMcYYkyvlGPSxY8eWLrroohYuvvjiZi65
- 5JJA06WXXtrCZZdd1szll1/ewhVXXNHClVde2cw///nPFq666qoWrr766mauueaaFq699tpmrrvuuhau
- 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
- NtmgG5MCG/TqKmmdabBBrww26Nm13377JT7TWscG3bIsy7KyyQbdmBTYoFdXSetMgw16ZbBBz66bbrop
- 8ZnWOjbolmVZlpVNNujGpMAGvbpKWmcabNArgw16dn355ZelddddN/G51jI26JZlWZaVTTboxqTABr26
- SlpnGmzQK4MNenZNnjy51KdPn8TnWsvYoFuWZVlWNtmgG5MCG/TqKmmdabBBrww26Nk1ZcqU0kEHHZT4
- XGsZG3TLsizLyiYbdGNSYINeXSWtMw026JXBBj27mpqaSmeffXbic61lbNAty7IsK5ts0I1JgQ16dZW0
- zjTYoFcGG/S26Y477kh8rrWMDbplWZZlZZMNujEpsEGvrpLWmQYb9Mpgg942vfbaa4nPtZaxQbcsy7Ks
- bLJBNyYFNujVVdI602CDXhls0NumMWPGlLp37574bGsVG3TLsizLyiYbdGNSYINeXSWtMw026JXBBr1t
- og59zz33THy2tYoNumVZlmVlkw26MSmwQa+uktaZBhv0ymCD3nZdf/31ic+2VrFBtyzLsqxsskE3JgU2
- 6NVV0jrTYINeGWzQ267PP/888dnWKjbolmVZlpVNNujGpMAGvbpKWmcabNArgw1621VXV1facsstE59v
- LWKDblmWZVnZZINuTAps0KurpHWmwQa9Mtigt1319fWlAw44IPH51iI26JZlWZaVTTboxqTABr26Slpn
- GmzQK4MNetvV2NhYOuOMMxKfby1ig25ZlmVZ2WSDbkwKOpNB32WXXaJ3KI6S1pkGG/TKYIOej2677bbE
- 51uL2KBblmVZVjbZoBuTgs5k0AcNGhS9Q3GUtM402KBXBhv0fPTqq68mPt9axAbdsizLsrLJBt2YFHQW
- g77hhhuWXnvttegdiqOktabBBr0y2KDno59//jnx+dYiNuiWZVmWlU026MakoIgGna7PDz30UC48/PDD
- zabxyy+/LDU1NUXvUBwlfSdpsEGvDDbo+al///6Jz7jWsEG3LMuyrGyyQTcmBUU06J1JSd9JGmzQK4MN
- en666qqrEp9xrWGDblmWZVnZZINuTAps0KurpO8kDTbolcEGPT99+OGHic+41rBBtyzLsqxsskE3JgU2
- 6NVV0neSBhv0ylBUg87osqlRxFIONGnSpFKvXr0Sn3MtYYNuWZZlWdlkg25MCmzQq6uk7yQNNuiVoagG
- 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
- X9ou+L6llfdWKtIgafshALiDywzZuVLGlDVlTtlTBpVFZVLZVEaVVWVW2VWGlWVlWtlWxpV1ZV7ZVwaW
- hWVi2VhG7jPmJuZKqfvVNBEBrr1Nq0FGF9r0ntZunu3VMJ2pa6Xg+eXTlwYqvdv1c5e2+r1zaTDTLbat
- sHfJXCsPndVrFaL3wn7T0iDoW5e2DDYo+val1YqtwRIA3NVllpQtZUxZU+aUPWVQWVQmlU1lVFlVZpVd
- ZVhZVqaVbWVcWVfmlX1lYFlYJpaNZaTL35RST6emiQhw7W1eDTp6JcyHLm3da6Xgo5Y9Wf+UpbN3bfXr
- gpy2/fXe17YANsBpO+AXLZ3Xa3tgN902CGplonN8DYraOpgu3AGA+9q5UsaUNWVO2VMGlUVlUtlURpVV
- ZVbZ1YS8LCvTyrYyrqz7uKXsKwPLwjLRxFwp9XRrmogA19T/1F5V7z2ue7LeKkJb/D5+aRDTtr93LG0B
- bIDTysNnLU3c2x7YhToNglqZaEDUtsF8/oUGSwBwV5dZsvOlrClzyp4yqCwqk8qmMqqsKrPKrjKsLCvT
- yrYybk/Kyz6TcqXUw9U0EQGuqbH2ZL1VhM7efdjSIOYjl49eujCnFYfO6DXY+eSlgU9bBLtUp4FQqxMN
- ira2EALAfV1mS1lT5pQ9ZVBZVCaVTWVUWVVmlV1lWFn24UvZZqVcKXWupokIcE29ZTVwaRv8nrB3Jm9P
- 2hvkNNjpdtsGPq1GtE2wgVCrE2lgBABP286ZMqfsKYPKojJpT8TLqjKr7NoT8jLNpFwpdbamiQhwTd25
- GtRse+Le7bYNfNI2wTQYAoCHtnNn51CZdDkR35RS6v+upokIcE0ppZRSSimlHrSmiQhwTSmllFJKKaUe
- tKaJCHBNKaWUUkoppR60pokIcO0xdfOM9UPqMy4vrNmfuz+7s3T3cfPztum/vYt+xn7u/exT3fx9Hsr+
- jLd6lv08/Z3pdzrl8nnf7JlvW/9ffreH/r2elrs8481nuPlve+nm59zW9LPuop/xJP/ul7/X9By7/9B6
- hsc9/+7d5t//0s3PuGn6vJufleln38XjPutxddvP339+V9PPuot+xm1+n/3nl7/LQ+jn3/Z59n/b35t+
- rxNu87z7z/az5ubz3tX+7Df73KluPsv0s9/Mfv77unz2N3uem3/vIfUM+7mmeqtnvY2bn/kkbj7n03iu
- p2l6xmezpokIAAAAcNbYBAAAAM4amwAAAMBZYxMAAAA4a2wCAAAAZ41NAAAA4KyxCQAAAJw1NgEAAICz
- xiYAAABw1tgEAAAAzhqbAAAAwFljEwAAADhrbAIAAABnjU0AAADgrLEJAAAAnDU2AQAAgLPGJgAAAHDW
- 2AQAAADOGpsAAADAWWMTAAAAOGtsAgAAAGeNTQAAAOCssQkAAACcNTYBAACAs8YmAAAAcNbYBAAAAM4a
- mwAAAMBZYxMAAAA4a2wCAAAAZ41NAAAA4KyxCQAAAJw1NgEAAICzxiYAAABw1tgEAAAAzhqbAAAAwFlj
- EwAAADhrbAIAAABnjU0AAADgrLEJAAAAnDU2AQAAgLPGJgAAAHDW2AQAAADOGpsAAADAWWMTAAAAOGts
- AgAAAGeNTQAAAOCssQkAAACcNTYBAACAs8YmAAAAcNbYBAAAAM4amwAAAMBZYxMAAAA4a2wCAAAAZ41N
- AAAA4KyxCQAAAJw1NgEAAICzxiYAAABw1tgEAAAAzhqbAAAAwFljEwAAADhrbAIAAABnjU0AAADgrLEJ
- AAAAnDU2AQAAgLPGJgAAAHDW2AQAAADOGpsAAADAWWMTAAAAOGtsAgAAAGeNTQAAAOCssQkAAACcNTYB
- AACAs8YmAAAAcNbYBAAAAM4amwAAAMBZYxMAAAA4a2wCAAAAZ41NAAAA4KyxCQAAAJw1NgEAAICzxiYA
- AABw1tgEAAAAzhqbAAAAwFljEwAAADhrbAIAAABnjU0AAADgrLEJAAAAnDU2AQAAgLPGJgAAAHDW2AQA
- AADOGpsAAADAWWMTAAAAOGtsAgAAAGeNTQAAAOCssQkAAACcNTYBAACAs8YmAAAAcNbYBAAAAM4amwAA
- AMBZYxMAAAA4a2wCAAAAZ41NAAAA4KyxCQAAAJw1NgEAAICzxiYAAABw1tgEAAAAzhqbAAAAwFljEwAA
- ADhrbAIAAABnjU0AAADgrLEJAAAAnDU2AQAAgLPGJgAAAHDW2AQAAADOGpsAAADAWWMTAAAAOGtsAgAA
- AGeNTQAAAOCssQkAAACcNTYBAACAs8YmAAAAcNbYBAAAAM4amwAAAMBZYxMAAAA4a2wCAAAAZ41NAAAA
- 4KyxCQAAAJw1NgEAAICzxiYAAABw1tgEAAAAzhqbAAAAwFljEwAAADhrbAIAAABnjU0AAADgrLEJAAAA
- nDU2AQAAgLPGJgAAAHDW2AQAAABOevQh/w2VkWR8zwQAigAAAABJRU5ErkJggg==
-
-
-
\ No newline at end of file
diff --git a/PCK-Studio/Forms/Utilities/TextureConverterUtility.Designer.cs b/PCK-Studio/Forms/Utilities/TextureConverterUtility.Designer.cs
deleted file mode 100644
index e16bcfab..00000000
--- a/PCK-Studio/Forms/Utilities/TextureConverterUtility.Designer.cs
+++ /dev/null
@@ -1,141 +0,0 @@
-
-namespace PckStudio.Forms.Utilities
-{
- partial class TextureConverterUtility
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.listBox1 = new System.Windows.Forms.ListBox();
- this.metroTextBox1 = new MetroFramework.Controls.MetroTextBox();
- this.button1 = new System.Windows.Forms.Button();
- this.button2 = new System.Windows.Forms.Button();
- this.metroLabel1 = new MetroFramework.Controls.MetroLabel();
- this.SuspendLayout();
- //
- // listBox1
- //
- this.listBox1.FormattingEnabled = true;
- this.listBox1.Location = new System.Drawing.Point(29, 64);
- this.listBox1.Name = "listBox1";
- this.listBox1.Size = new System.Drawing.Size(288, 407);
- this.listBox1.TabIndex = 0;
- this.listBox1.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged);
- //
- // metroTextBox1
- //
- //
- //
- //
- this.metroTextBox1.CustomButton.Image = null;
- this.metroTextBox1.CustomButton.Location = new System.Drawing.Point(266, 1);
- this.metroTextBox1.CustomButton.Name = "";
- this.metroTextBox1.CustomButton.Size = new System.Drawing.Size(21, 21);
- this.metroTextBox1.CustomButton.Style = MetroFramework.MetroColorStyle.Blue;
- this.metroTextBox1.CustomButton.TabIndex = 1;
- this.metroTextBox1.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light;
- this.metroTextBox1.CustomButton.UseSelectable = true;
- this.metroTextBox1.CustomButton.Visible = false;
- this.metroTextBox1.Lines = new string[] {
- "//TEXT//"};
- this.metroTextBox1.Location = new System.Drawing.Point(29, 502);
- this.metroTextBox1.MaxLength = 32767;
- this.metroTextBox1.Name = "metroTextBox1";
- this.metroTextBox1.PasswordChar = '\0';
- this.metroTextBox1.ScrollBars = System.Windows.Forms.ScrollBars.None;
- this.metroTextBox1.SelectedText = "";
- this.metroTextBox1.SelectionLength = 0;
- this.metroTextBox1.SelectionStart = 0;
- this.metroTextBox1.ShortcutsEnabled = true;
- this.metroTextBox1.Size = new System.Drawing.Size(288, 23);
- this.metroTextBox1.TabIndex = 1;
- this.metroTextBox1.Text = "//TEXT//";
- this.metroTextBox1.UseSelectable = true;
- this.metroTextBox1.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109)))));
- this.metroTextBox1.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel);
- //
- // button1
- //
- this.button1.Location = new System.Drawing.Point(28, 531);
- this.button1.Name = "button1";
- this.button1.Size = new System.Drawing.Size(75, 23);
- this.button1.TabIndex = 2;
- this.button1.Text = "Browse..";
- this.button1.UseVisualStyleBackColor = true;
- this.button1.Visible = false;
- this.button1.Click += new System.EventHandler(this.button1_Click);
- //
- // button2
- //
- this.button2.Location = new System.Drawing.Point(242, 531);
- this.button2.Name = "button2";
- this.button2.Size = new System.Drawing.Size(75, 23);
- this.button2.TabIndex = 3;
- this.button2.Text = "OK";
- this.button2.UseVisualStyleBackColor = true;
- this.button2.Click += new System.EventHandler(this.button2_Click);
- //
- // metroLabel1
- //
- this.metroLabel1.AutoSize = true;
- this.metroLabel1.Location = new System.Drawing.Point(29, 477);
- this.metroLabel1.Name = "metroLabel1";
- this.metroLabel1.Size = new System.Drawing.Size(71, 19);
- this.metroLabel1.TabIndex = 4;
- this.metroLabel1.Text = "PackName";
- this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark;
- //
- // TextureConverterUtility
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(356, 577);
- this.Controls.Add(this.metroLabel1);
- this.Controls.Add(this.button2);
- this.Controls.Add(this.button1);
- this.Controls.Add(this.metroTextBox1);
- this.Controls.Add(this.listBox1);
- this.Name = "TextureConverterUtility";
- this.Resizable = false;
- this.Style = MetroFramework.MetroColorStyle.Silver;
- this.Text = "Texture Converter";
- this.Theme = MetroFramework.MetroThemeStyle.Dark;
- this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.TextureConverterUtility_FormClosing);
- this.Load += new System.EventHandler(this.TextureConverterUtility_Load);
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- private System.Windows.Forms.ListBox listBox1;
- private MetroFramework.Controls.MetroTextBox metroTextBox1;
- private System.Windows.Forms.Button button1;
- private System.Windows.Forms.Button button2;
- private MetroFramework.Controls.MetroLabel metroLabel1;
- }
-}
\ No newline at end of file
diff --git a/PCK-Studio/Forms/Utilities/TextureConverterUtility.cs b/PCK-Studio/Forms/Utilities/TextureConverterUtility.cs
deleted file mode 100644
index f5e9f12b..00000000
--- a/PCK-Studio/Forms/Utilities/TextureConverterUtility.cs
+++ /dev/null
@@ -1,545 +0,0 @@
-using System;
-using System.IO;
-using System.Drawing;
-using System.Drawing.Imaging;
-using System.Windows.Forms;
-using MetroFramework.Forms;
-using PckStudio.Properties;
-using OMI.Formats.Pck;
-
-namespace PckStudio.Forms.Utilities
-{
- [Obsolete()]
- public partial class TextureConverterUtility : MetroForm
- {
- public TextureConverterUtility(TreeView tv0, PckFile pck)
- {
- InitializeComponent();
- TView = tv0;
- Pck = pck;
- }
-
- string AppData = "";
- string Packname = "";
-
- bool ToPC = true;
-
- PckFile Pck;
-
- TreeView TView;
-
- static string[,] ItemSheetArray =
- {
- {"leather_helmet","chainmail_helmet","iron_helmet","diamond_helmet","golden_helmet","flint_and_steel","flint","coal","string","wheat_seeds","apple","golden_apple","egg","sugar","snowball","elytra" },
- {"leather_chestplate","chainmail_chestplate","iron_chestplate","diamond_chestplate","golden_chestplate","bow","brick","iron_ingot","feather","wheat","painting","sugarcane","bone","cake","slime_ball","broken_elytra" },
- {"leather_leggings","chainmail_leggings","iron_leggings","diamond_leggings","golden_leggings","arrow","end_crystal","gold_ingot","gunpowder","bread","oak_sign","oak_door","iron_door","","fire_charge","chorus_fruit" },
- {"leather_boots","chainmail_boots","iron_boots","diamond_boots","golden_boots","stick","compass_00","diamond","redstone","clay_ball","paper","book","map","pumpkin_seeds","melon_seeds","popped_chorus_fruit" },
- {"wooden_sword","stone_sword","iron_sword","diamond_sword","golden_sword","fishing_rod","clock_00","bowl","mushroom_stew","glowstone_dust","bucket","water_bucket","lava_bucket","milk_bucket","ink_sac","gray_dye" },
- {"wooden_shovel","stone_shovel","iron_shovel","diamond_shovel","golden_shovel","fishing_rod_cast","repeater","porkchop","cooked_porkchop","cod","cooked_cod","rotten_flesh","cookie","shears","red_dye","pink_dye" },
- {"wooden_pickaxe","stone_pickaxe","iron_pickaxe","diamond_pickaxe","golden_pickaxe","bow_pulling_0","carrot_on_a_stick","leather","saddle","beef","cooked_beef","ender_pearl","blaze_rod","melon_slice","green_dye","lime_dye" },
- {"wooden_axe","stone_axe","iron_axe","diamond_axe","golden_axe","bow_pulling_1","baked_potato","potato","carrot","chicken","cooked_chicken","ghast_tear","gold_nugget","nether_wart","cocoa_beans","yellow_dye" },
- {"wooden_hoe","stone_hoe","iron_hoe","diamond_hoe","golden_hoe","bow_pulling_2","poisonous_potato","minecart","oak_boat","glistering_melon_slice","fermented_spider_eye","spider_eye","potion","potion_overlay","blue_dye","light_blue_dye" },
- {"leather_helmet_overlay","spectral_arrow","iron_horse_armor","diamond_horse_armor","golden_horse_armor","comparator","golden_carrot","chest_minecart","pumpkin_pie","spawn_egg","splash_potion","ender_eye","cauldron","blaze_powder","purple_dye","magenta_dye" },
- {"","tipped_arrow_base","dragon_breath","name_tag","lead","nether_brick","tropical_fish","furnace_minecart","charcoal","spawn_egg_overlay","","experience_bottle","brewing_stand","magma_cream","cyan_dye","orange_dye" },
- {"leather_leggings_overlay","tipped_arrow_head","lingering_potion","barrier","mutton","rabbit","pufferfish","hopper_minecart","hopper","nether_star","emerald","writable_book","written_book","flower_pot","light_gray_dye","bone_meal" },
- {"leather_boots_overlay","beetroot","beetroot_seeds","beetroot_soup","cooked_mutton","cooked_rabbit","salmon","tnt_minecart","armor_stand","firework_rocket","firework_star","firework_star_overlay","quartz","map","item_frame","enchanted_book" },
- {"acacia_door","birch_door","dark_oak_door","jungle_door","spruce_door","rabbit_stew","cooked_salmon","command_block_minecart","acacia_boat","birch_boat","dark_oak_boat","jungle_boat","spruce_boat","prismarine_shard","prismarine_crystals","leather_horse_armor" },
- {"structure_void","","totem_of_undying","shulker_shell","iron_nugget","rabbit_foot","rabbit_hide","","","","","","","","","dragon_fireball" },
- {"music_disc_13","music_disc_cat","music_disc_blocks","music_disc_chirp","music_disc_far","music_disc_mall","music_disc_mellohi","music_disc_stal","music_disc_strad","music_disc_ward","music_disc_11","music_disc_wait","cod_bucket","salmon_bucket","pufferfish_bucket","tropical_fish_bucket" },
- {"leather_horse_armor","","","","","","","kelp","dried_kelp","sea_pickle","nautilus_shell","heart_of_the_sea","turtle_helmet","scute","trident","phantom_membrane" }
- };
-
- static string[,] BlockSheetArray =
- {
- {"grass_block_top","stone","dirt","grass_block_side","oak_planks","smooth_stone_slab_side","smooth_stone","bricks","tnt_side","tnt_top","tnt_bottom","cobweb","poppy","dandelion","blue_concrete","oak_sapling" },
- {"cobblestone","bedrock","sand","gravel","oak_log","oak_log_top","iron_block","gold_block","diamond_block","emerald_block","redstone_block","dropper_front","red_mushroom","brown_mushroom","jungle_sapling","red_concrete" },
- {"gold_ore","iron_ore","coal_ore","bookshelf","mossy_cobblestone","obsidian","grass_block_side_overlay","grass","dispenser_front_vertical","beacon","dropper_front_vertical","crafting_table_top","furnace_front","furnace_side","dispenser_front","red_concrete" },
- {"sponge","glass","diamond_ore","redstone_ore","oak_leaves","black_concrete","stone_bricks","dead_bush","fern","daylight_detector_top","daylight_detector_side","crafting_table_side","crafting_table_front","furnace_front_on","furnace_top","spruce_sapling" },
- {"white_wool","spawner","snow","ice","grass_block_snow","cactus_top","cactus_side","cactus_bottom","clay","sugar_cane","jukebox_side","jukebox_top","birch_leaves","mycelium_side","mycelium_top","birch_sapling" },
- {"torch","oak_door_top","iron_door_top","ladder","oak_trapdoor","iron_bars","farmland_wet","farmland","wheat_stage0","wheat_stage1","wheat_stage2","wheat_stage3","wheat_stage4","wheat_stage5","wheat_stage6","wheat_stage7" },
- {"lever","oak_door_bottom","iron_door_bottom","redstone_torch","mossy_stone_bricks","cracked_stone_bricks","pumpkin_top","netherrack","soul_sand","glowstone","piston_top_sticky","piston_top","piston_side","piston_bottom","piston_inner","pumpkin_stem" },
- {"rail_corner","black_wool","gray_wool","redstone_torch_off","spruce_log","birch_log","pumpkin_side","carved_pumpkin","jack_o_lantern","cake_top","cake_side","cake_inner","cake_bottom","red_mushroom_block","brown_mushroom_block","attached_pumpkin_stem" },
- {"rail","red_wool", "pink_wool","repeater","spruce_leaves","spruce_leaves","conduit","turtle_egg","melon_side","melon_top","cauldron_top","cauldron_inner","wet_sponge","mushroom_stem","mushroom_block_inside","vines" },
- {"lapis_block","green_wool","lime_wool","repeater_on","glass_pane_top","debug","debug","turtle_egg_slightly_cracked","turtle_egg_very_cracked","jungle_log","cauldron_side","cauldron_bottom","brewing_stand_base","brewing_stand","end_portal_frame_top","end_portal_frame_side" },
- {"lapis_ore","brown_wool","yellow_wool","powered_rail","redstone_dust_dot","redstone_dust_line0","enchanting_table_top","dragon_egg","cocoa_stage2","cocoa_stage1","cocoa_stage0","emerald_ore","tripwire_hook","tripwire","end_portal_frame_eye","end_stone" },
- {"sandstone_top","blue_wool","light_blue_wool","powered_rail_on","debug","debug","enchanting_table_side","enchanting_table_bottom","glide_blue","item_frame","flower_pot","comparator","comparator_on","activator_rail","activator_rail","nether_quartz_ore" },
- {"sandstone","purple_wool","magenta_wool","detector_rail","jungle_leaves","black_concrete","spruce_planks","jungle_planks","carrots_stage0","carrots_stage1","carrots_stage2","carrots_stage3","slime_block","debug","debug","debug" },
- {"sandstone_bottom","cyan_wool","orange_wool","redstone_lamp","redstone_lamp_on","chiseled_stone_bricks","birch_planks","anvil","chipped_anvil_top","chiseled_quartz_block_top","quartz_pillar_top","quartz_block_side","debug","detector_rail_on","debug","debug" },
- {"nether_bricks","light_gray_wool","nether_wart_stage0","nether_wart_stage1","nether_wart_stage2","chiseled_sandstone","cut_sandstone","anvil_top","damaged_anvil_top","chiseled_quartz_block","quartz_pillar","quartz_block_top","debug","debug","debug","debug" },
- {"destroy_stage_0","destroy_stage_1","destroy_stage_2","destroy_stage_3","destroy_stage_4","destroy_stage_5","destroy_stage_6","destroy_stage_7","destroy_stage_8","destroy_stage_9","hay_block_side","quartz_block_bottom","debug","hay_block_top","debug","debug" },
- {"coal_block","terracotta","note_block","andesite","polished_andesite","diorite","polished_diorite","granite","polished_granite","potatoes_stage0","potatoes_stage1","potatoes_stage2","potatoes_stage3","spruce_log_top","jungle_log_top","birch_log_top" },
- {"black_terracotta","blue_terracotta","brown_terracotta","cyan_terracotta","gray_terracotta","green_terracotta","light_blue_terracotta","lime_terracotta","magenta_terracotta","orange_terracotta","pink_terracotta","purple_terracotta","red_terracotta","light_gray_terracotta","white_terracotta","yellow_terracotta" },
- {"black_stained_glass","blue_stained_glass","brown_stained_glass","cyan_stained_glass","gray_stained_glass","green_stained_glass","light_blue_stained_glass","lime_stained_glass","magenta_stained_glass","orange_stained_glass","pink_stained_glass","purple_stained_glass","red_stained_glass","light_gray_stained_glass","white_stained_glass","yellow_stained_glass" },
- {"black_stained_glass_pane_top","blue_stained_glass_pane_top","brown_stained_glass_pane_top","cyan_stained_glass_pane_top","gray_stained_glass_pane_top","green_stained_glass_pane_top","light_blue_stained_glass_pane_top","lime_stained_glass_pane_top","magenta_stained_glass_pane_top","orange_stained_glass_pane_top","pink_stained_glass_pane_top","purple_stained_glass_pane_top","red_stained_glass_pane_top","light_gray_stained_glass_pane_top","white_stained_glass_pane_top","yellow_stained_glass_pane_top" },
- {"large_fern_top","tall_grass_top","peony_top","rose_bush_top","lilac_top","orange_tulip","sunflower_top","sunflower_front","acacia_log","acacia_log_top","acacia_planks","acacia_leaves","acacia_leaves","prismarine_bricks","red_sand","red_sandstone_top" },
- {"large_fern_bottom","tall_grass_bottom","peony_bottom","rose_bush_bottom","lilac_bottom","pink_tulip","sunflower_bottom","sunflower_back","dark_oak_log","dark_oak_log_top","dark_oak_planks","dark_oak_leaves","dark_oak_leaves","dark_prismarine","red_sandstone_bottom","red_sandstone" },
- {"allium","blue_orchid","azure_bluet","oxeye_daisy","red_tulip","white_tulip","acacia_sapling","dark_oak_sapling","coarse_dirt","podzol_side","podzol_top","spruce_leaves","spruce_leaves","debug","chiseled_red_sandstone","cut_red_sandstone" },
- {"acacia_door_top","birch_door_top","dark_oak_door_top","jungle_door_top","spruce_door_top","chorus_flower","chorus_flower_dead","chorus_plant","end_stone_bricks","grass_path_side","grass_path_top","debug","packed_ice","debug","daylight_detector_inverted_top","iron_trapdoor" },
- {"acacia_door_bottom","birch_door_bottom","dark_oak_door_bottom","jungle_door_bottom","spruce_door_bottom","purpur_block","purpur_pillar","purpur_pillar_top","end_rod","debug","nether_wart_block","red_nether_bricks","frosted_ice_0","frosted_ice_1","frosted_ice_2","frosted_ice_3" },
- {"beetroots_stage0","beetroots_stage1","beetroots_stage2","beetroots_stage3","debug","debug","debug","debug","debug","debug","debug","debug","debug","debug","debug","debug" },
- {"bone_block_side","bone_block_top","melon_stem","attached_melon_stem","observer_front","observer_side","observer_back","observer_back_on","observer_top","glide_yellow","glide_green","structure_block","structure_block_corner","structure_block_data","structure_block_load","structure_block_save" },
- {"black_concrete","blue_concrete","brown_concrete","cyan_concrete","gray_concrete","green_concrete","light_blue_concrete","lime_concrete","magenta_concrete","orange_concrete","pink_concrete","purple_concrete","red_concrete","light_gray_concrete","white_concrete","yellow_concrete" },
- {"black_concrete_powder","blue_concrete_powder","brown_concrete_powder","cyan_concrete_powder","gray_concrete_powder","green_concrete_powder","light_blue_concrete_powder","lime_concrete_powder","magenta_concrete_powder","orange_concrete_powder","pink_concrete_powder","purple_concrete_powder","red_concrete_powder","light_gray_concrete_powder","white_concrete_powder","yellow_concrete_powder" },
- {"black_glazed_terracotta","blue_glazed_terracotta","brown_glazed_terracotta","cyan_glazed_terracotta","gray_glazed_terracotta","green_glazed_terracotta","light_blue_glazed_terracotta","lime_glazed_terracotta","magenta_glazed_terracotta","orange_glazed_terracotta","pink_glazed_terracotta","purple_glazed_terracotta","red_glazed_terracotta","light_gray_glazed_terracotta","white_glazed_terracotta","yellow_glazed_terracotta" },
- {"white_shulker_box","","water_overlay","debug","tube_coral_block","bubble_coral_block","brain_coral_block","fire_coral_block","horn_coral_block","tube_coral","bubble_coral","brain_coral","fire_coral","horn_coral","sea_pickle","blue_ice" },
- {"dried_kelp_top","dried_kelp_side","debug","debug","dead_tube_coral_block","dead_bubble_coral_block","dead_brain_coral_block","dead_fire_coral_block","dead_horn_coral_block","tube_coral_fan","bubble_coral_fan","brain_coral_fan","fire_coral_fan","horn_coral_fan","","" },
- {"debug","debug","debug","debug","debug","debug","debug","debug","debug","dead_tube_coral_fan","dead_bubble_coral_fan","dead_brain_coral_fan","dead_fire_coral_fan","dead_horn_coral_fan","","spruce_trapdoor" },
- {"stripped_oak_log","stripped_oak_log_top","stripped_acacia_log","stripped_acacia_log_top","stripped_birch_log","stripped_birch_log_top","stripped_dark_oak_log","stripped_dark_oak_log_top","stripped_jungle_log","stripped_jungle_log_top","stripped_spruce_log","stripped_spruce_log_top","acacia_trapdoor","birch_trapdoor","dark_oak_trapdoor","jungle_trapdoor" }
- };
-
- static string[,] mobs =
- {
- {"\\entity\\alex","\\alex"},
- {"\\entity\\steve","\\char"},
- {"\\entity\\bat","\\bat"},
- {"\\entity\\chicken","\\chicken"},
- {"\\entity\\dolphin","\\dolphin"},
- {"\\entity\\endermite","\\endermite"},
- {"\\entity\\guardian","\\guardian"},
- {"\\entity\\guardian_beam","\\guardian_beam"},
- {"\\entity\\guardian_elder","\\guardian_elder"},
- {"\\entity\\phantom","\\phantom"},
- {"\\entity\\spider_eyes","\\spider_eyes"},
- {"\\entity\\squid","\\squid"},
- {"\\entity\\steve","\\steve"},
- {"\\entity\\witch","\\witch"},
- {"\\entity\\bear\\polarbear","\\bear\\polarbear"},
- {"\\entity\\creeper\\creeper","\\creeper"},
- {"\\entity\\ghast\\ghast","\\ghast"},
- {"\\entity\\ghast\\ghast_shooting","\\ghast_fire"},
- {"\\entity\\enderdragon\\dragon_fireball","\\enderdragon\\dragon_fireball"},
- {"\\entity\\enderdragon\\dragon","\\enderdragon\\ender"},
- {"\\entity\\end_crystal\\end_crystal_beam","\\enderdragon\\beam"},
- {"\\entity\\enderdragon\\dragon_eyes","\\enderdragon\\ender_eyes"},
- {"\\entity\\enderman\\enderman_eyes","\\enderman\\enderman_eyes"},
- {"\\entity\\enderman\\enderman","\\enderman\\enderman"},
- {"\\entity\\fish\\cod","\\fish\\cod"},
- {"\\entity\\fish\\pufferfish","\\fish\\pufferfish"},
- {"\\entity\\fish\\salmon","\\fish\\salmon"},
- {"\\entity\\fish\\tropical_a","\\fish\\tropical_a"},
- {"\\entity\\fish\\tropical_a_pattern_1","\\fish\\tropical_a_pattern_1"},
- {"\\entity\\fish\\tropical_a_pattern_2","\\fish\\tropical_a_pattern_2"},
- {"\\entity\\fish\\tropical_a_pattern_3","\\fish\\tropical_a_pattern_3"},
- {"\\entity\\fish\\tropical_a_pattern_4","\\fish\\tropical_a_pattern_4"},
- {"\\entity\\fish\\tropical_a_pattern_5","\\fish\\tropical_a_pattern_5"},
- {"\\entity\\fish\\tropical_a_pattern_6","\\fish\\tropical_a_pattern_6"},
- {"\\entity\\fish\\tropical_b","\\fish\\tropical_b"},
- {"\\entity\\fish\\tropical_b_pattern_1","\\fish\\tropical_b_pattern_1"},
- {"\\entity\\fish\\tropical_b_pattern_2","\\fish\\tropical_b_pattern_2"},
- {"\\entity\\fish\\tropical_b_pattern_3","\\fish\\tropical_b_pattern_3"},
- {"\\entity\\fish\\tropical_b_pattern_4","\\fish\\tropical_b_pattern_4"},
- {"\\entity\\fish\\tropical_b_pattern_5","\\fish\\tropical_b_pattern_5"},
- {"\\entity\\fish\\tropical_b_pattern_6","\\fish\\tropical_b_pattern_6"},
- {"\\entity\\horse\\donkey","\\horse\\donkey"},
- {"\\entity\\horse\\horse_black","\\horse\\horse_black"},
- {"\\entity\\horse\\horse_brown","\\horse\\horse_brown"},
- {"\\entity\\horse\\horse_chestnut","\\horse\\horse_chestnut"},
- {"\\entity\\horse\\horse_creamy","\\horse\\horse_creamy"},
- {"\\entity\\horse\\horse_darkbrown","\\horse\\horse_darkbrown"},
- {"\\entity\\horse\\horse_gray","\\horse\\horse_gray"},
- {"\\entity\\horse\\horse_markings_blackdots","\\horse\\horse_markings_blackdots"},
- {"\\entity\\horse\\horse_markings_white","\\horse\\horse_markings_white"},
- {"\\entity\\horse\\horse_markings_whitedots","\\horse\\horse_markings_whitedots"},
- {"\\entity\\horse\\horse_markings_whitefield","\\horse\\horse_markings_whitefield"},
- {"\\entity\\horse\\horse_skeleton","\\horse\\horse_skeleton"},
- {"\\entity\\horse\\horse_white","\\horse\\horse_white"},
- {"\\entity\\horse\\horse_zombie","\\horse\\horse_zombie"},
- {"\\entity\\horse\\mule","\\horse\\mule"},
- {"\\entity\\illager\\evoker","\\illager\\evoker"},
- {"\\entity\\illager\\vex","\\illager\\vex"},
- {"\\entity\\illager\\vex_charging","\\illager\\vex_charging"},
- {"\\entity\\illager\\vindicator","\\illager\\vindicator"},
- {"\\entity\\llama\\spit","\\llama\\spit"},
- {"\\entity\\parrot\\parrot_blue","\\parrot\\parrot_blue"},
- {"\\entity\\parrot\\parrot_green","\\parrot\\parrot_green"},
- {"\\entity\\parrot\\parrot_grey","\\parrot\\parrot_grey"},
- {"\\entity\\parrot\\parrot_red_blue","\\parrot\\parrot_red_blue"},
- {"\\entity\\parrot\\parrot_yellow_blue","\\parrot\\parrot_yellow_blue"},
- {"\\entity\\rabbit\\black","\\rabbit\\black"},
- {"\\entity\\rabbit\\brown","\\rabbit\\brown"},
- {"\\entity\\rabbit\\caerbannog","\\rabbit\\caerbannog"},
- {"\\entity\\rabbit\\gold","\\rabbit\\gold"},
- {"\\entity\\rabbit\\salt","\\rabbit\\salt"},
- {"\\entity\\rabbit\\toast","\\rabbit\\toast"},
- {"\\entity\\rabbit\\white","\\rabbit\\white"},
- {"\\entity\\rabbit\\white_splotched","\\rabbit\\white_splotched"},
- {"\\entity\\shulker\\spark","\\shulker\\spark"},
- {"\\entity\\skeleton\\stray","\\skeleton\\stray"},
- {"\\entity\\skeleton\\skeleton","\\skeleton"},
- {"\\entity\\skeleton\\wither_skeleton","\\skeleton_wither"},
- {"\\entity\\skeleton\\stray_overlay","\\skeleton\\stray_overlay"},
- {"\\entity\\slime\\slime","\\slime"},
- {"\\entity\\villager\\villager","\\villager\\villager"},
- {"\\entity\\wither\\wither","\\wither\\wither"},
- {"\\entity\\wither\\wither_armor","\\wither\\wither_armor"},
- {"\\entity\\wither\\wither_invulnerable","\\wither\\wither_invulnerable"},
- {"\\entity\\zombie\\drowned","\\zombie\\drowned"},
- {"\\entity\\zombie\\husk","\\zombie\\husk"},
- {"\\entity\\cow\\cow","\\cow"},
- {"\\entity\\cow\\red_mooshroom","\\redcow"},
- {"\\entity\\cow\\red_mooshroom","\\redcow"},
- {"\\entity\\enderman\\enderman","\\enderman"},
- {"\\entity\\enderman\\enderman_eyes","\\enderman_eyes"},
- {"\\entity\\ghast\\ghast","\\ghast"},
- {"\\entity\\ghast\\ghast_shooting","\\ghast_fire"},
- {"\\entity\\pig\\pig","\\pig"},
- {"\\entity\\sheep\\sheep_fur","\\sheep_fur"},
- {"\\entity\\zombie_villager\\zombie_villager","\\zombie_villager\\zombie_villager"}
- };
-
- static string[,] painting =
- {
- {"alban","0","2", "1", "1"},
- {"alban","1","2", "1", "1"},
- {"aztec","0","1", "1", "1"},
- {"aztec","1","1", "1", "1"},
- {"aztec2","0","3", "1", "1"},
- {"aztec2","1","3", "1", "1"},
- {"kebab","0","0", "1", "1"},
- {"kebab","1","0", "1", "1"},
- {"bomb","0","4", "1", "1"},
- {"plant","0","5", "1", "1"},
- {"wasteland","0","6", "1", "1"},
- {"courbet","2","2", "2", "1"},
- {"creebet","2","8", "2", "1"},
- {"sea","2","4", "2", "1"},
- {"sunset","2","6", "2", "1"},
- {"burning_skull","12","8", "4", "4"},
- {"bust","8","2", "2", "2"},
- {"donkey_kong","7","12", "4", "3"},
- {"fighters","6","0", "4", "2"},
- {"graham","4","1", "1", "2"},
- {"match","8","0", "2", "2"},
- {"pigscene","12","4", "4", "4"},
- {"pointer","12","0", "4", "4"},
- {"pool","2","0", "2", "1"},
- {"skeleton","4","12", "4", "3"},
- {"skull_and_roses","8","8", "2", "2"},
- {"stage","8","4", "2", "2"},
- {"void","8","6", "2", "2"},
- {"wanderer","4","0", "1", "2"},
-
- {"back","0","15", "1", "1"},
- {"back","1","15", "1", "1"},
- {"back","2","15", "1", "1"},
- {"back","3","15", "1", "1"},
- {"back","0","14", "1", "1"},
- {"back","1","14", "1", "1"},
- {"back","2","14", "1", "1"},
- {"back","3","14", "1", "1"},
- {"back","0","13", "1", "1"},
- {"back","1","13", "1", "1"},
- {"back","2","13", "1", "1"},
- {"back","3","13", "1", "1"},
- {"back","0","12", "1", "1"},
- {"back","1","12", "1", "1"},
- {"back","2","12", "1", "1"},
- {"back","3","12", "1", "1"}
- };
-
- static string[,] ExData = {
- { "\\environment\\clouds","\\environment\\clouds"},
- { "\\environment\\rain","\\environment\\rain"},
- { "\\environment\\snow","\\environment\\snow"},
- { "\\environment\\sun","\\terrain\\sun"},
- { "\\environment\\moon_phases","\\terrain\\moon_phases"},
- { "\\environment\\end_sky","\\misc\\particlefield"},
- { "\\misc\\pumpkinblur","\\misc\\pumpkinblur"}
- };
-
- static string[,] armour =
- {
- { "\\models\\armor\\chainmail_layer_1", "\\armor\\chain_1"},
- { "\\models\\armor\\chainmail_layer_2", "\\armor\\chain_2"},
- { "\\models\\armor\\leather_layer_1", "\\armor\\cloth_1"},
- { "\\models\\armor\\leather_layer_1_overlay", "\\armor\\cloth_1_boverlay"},
- { "\\models\\armor\\leather_layer_2", "\\armor\\cloth_2"},
- { "\\models\\armor\\leather_layer_2_overlay", "\\armor\\cloth_2_b"},
- { "\\models\\armor\\diamond_layer_1", "\\armor\\diamond_1"},
- { "\\models\\armor\\diamond_layer_2", "\\armor\\diamond_2"},
- { "\\models\\armor\\gold_layer_1", "\\armor\\gold_1"},
- { "\\models\\armor\\gold_layer_2", "\\armor\\gold_2"},
- { "\\models\\armor\\iron_layer_1", "\\armor\\iron_1"},
- { "\\models\\armor\\iron_layer_2", "\\armor\\iron_2"},
- { "\\models\\armor\\turtle_layer_1", "\\armor\\turtle_1"}
- };
-
- private void TextureConverterUtility_Load(object sender, EventArgs e)
- {
- AppData = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "\\.minecraft\\resourcepacks");
- if (!Directory.Exists(AppData))
- {
- MessageBox.Show($"Could not find \".minecraft folder\" in {Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)}", "Directory not found");
- DialogResult = DialogResult.Cancel;
- Close();
- return;
- }
-
- if (ToPC)
- {
- foreach (string folder in Directory.GetDirectories(AppData))
- listBox1.Items.Add(Path.GetFileName(folder));
- metroTextBox1.Text = "New Texture Pack";
- Packname = "New Texture Pack";
- }
- }
-
- private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
- {
- if(ToPC)
- metroTextBox1.Text = listBox1.SelectedItem.ToString();
- }
-
- private void button1_Click(object sender, EventArgs e)
- {
- if (ToPC)
- {
- FolderBrowserDialog fbd = new FolderBrowserDialog();
- if (fbd.ShowDialog() == DialogResult.OK)
- metroTextBox1.Text = fbd.SelectedPath;
- }
- }
-
- private void button2_Click(object sender, EventArgs e)
- {
- if (ToPC)
- {
- Packname = metroTextBox1.Text;
- Image Terrain = new Bitmap(640, 480);
- Image Items = new Bitmap(640, 480);
- Image painting = new Bitmap(640, 480);
- TreeNode EntityNode = new TreeNode();
- foreach(TreeNode tn in TView.Nodes[TView.Nodes.Count - 1].Nodes)
- {
- switch (tn.Text)
- {
- case ("terrain.png"):
- Terrain = Image.FromStream(new MemoryStream(((PckFileData)(tn.Tag)).Data));
- break;
- case ("items.png"):
- Items = Image.FromStream(new MemoryStream(((PckFileData)(tn.Tag)).Data));
- break;
- case ("art"):
- painting = Image.FromStream(new MemoryStream(((PckFileData)(tn.Nodes[0].Tag)).Data));
- break;
- case ("mob"):
- EntityNode = tn;
- break;
- }
- }
- SplitTextures("terrain.png", Terrain);
- SplitTextures("items.png", Items);
- SplitTextures2(0);
- SplitTextures2(1);
- SplitTextures2(2);
- SplitTextures3("kz.png", painting);
- File.WriteAllText(AppData + "\\" + Packname + "\\pack.mcmeta", "{\n\t\"pack\": {\n\t\t\"pack_format\": 6,\n\t\t\"description\": \"\"\n\t}\n}");
- Resources.pack.Save(AppData + "\\" + Packname + "\\pack.png");
- Close();
- }
- }
-
- public void SplitTextures(string path, Image Img)
- {
- try
- {
- // Get the inputs.
- int wid = 16;
- int hgt = 16;
- string Outpath = "";
-
- Bitmap bm = new Bitmap(Img);
-
- if (Path.GetFileNameWithoutExtension(path) == "items")
- {
- wid = bm.Width / 16;
- int NumDown = bm.Height / wid;
- hgt = bm.Height / NumDown;
- Outpath = "assets\\minecraft\\textures\\item\\";
- }
-
- else if (Path.GetFileNameWithoutExtension(path) == "terrain")
- {
- wid = bm.Width / 16;
- int NumDown = bm.Height / wid;
- hgt = bm.Height / NumDown;
- Outpath = "assets\\minecraft\\textures\\block\\";
- }
- else
- return;
-
- // Start splitting the Bitmap.
- Directory.CreateDirectory(AppData + "\\" + metroTextBox1.Text + "\\" + Outpath);
- Bitmap piece = new Bitmap(wid, hgt);
- Rectangle dest_rect = new Rectangle(0, 0, wid, hgt);
- using (Graphics gr = Graphics.FromImage(piece))
- {
- int num_rows = bm.Height / hgt;
- int num_cols = bm.Width / wid;
- Rectangle source_rect = new Rectangle(0, 0, wid, hgt);
- for (int row = 0; row < num_rows; row++)
- {
- source_rect.X = 0;
- for (int col = 0; col < num_cols; col++)
- {
- // Copy the piece of the image.
- gr.Clear(Color.Transparent);
- gr.DrawImage(bm, dest_rect, source_rect,
- GraphicsUnit.Pixel);
-
- // Save the piece.
- string filename = "placeholder";
-
- if (Path.GetFileNameWithoutExtension(path) == "items")
- {
- filename = ItemSheetArray[row, col] + ".png";
- }
-
- else if (Path.GetFileNameWithoutExtension(path) == "terrain")
- {
- filename = BlockSheetArray[row, col] + ".png";
- }
-
- piece.Save(AppData + "\\" + metroTextBox1.Text + "\\" + Outpath + "\\" + filename, ImageFormat.Png);
-
- // Move to the next column.
- source_rect.X += wid;
- }
- source_rect.Y += hgt;
- }
- gr.Dispose();
- }
- bm.Dispose();
- }
- catch (Exception err)
- {
- MessageBox.Show("Error!\n" + err.Message + "\nStacktrace:\n" + err.StackTrace);
- }
- }
-
- public void SplitTextures2(int Type)
- {
- if (Type == 0)
- {
- int i = 0;
- int ix = mobs.Length / 2;
- string Outpath = "assets\\minecraft\\textures\\";
-
-
- foreach (PckFileData mf in Pck.GetFiles())
- {
- FileInfo file = new FileInfo(Environment.CurrentDirectory + "\\Temp\\" + @"\" + mf.Filename);
- file.Directory.Create(); // If the directory already exists, this method does nothing.
- File.WriteAllBytes(Environment.CurrentDirectory + "\\Temp\\" + @"\" + mf.Filename, mf.Data); //writes minefile to file
- }
- while (i <= ix)
- {
- try
- {
- Console.WriteLine(mobs[i, 0] + " --- " + mobs[i, 1]);
- Directory.CreateDirectory(AppData + "\\" + metroTextBox1.Text + "\\" + Outpath + mobs[i, 0] + ".png");
- File.Copy(Environment.CurrentDirectory + "\\Temp\\res\\mob" + mobs[i, 1] + ".png", AppData + "\\" + metroTextBox1.Text + "\\" + Outpath + mobs[i, 0] + ".png");
- }
- catch { }
- i++;
- }
- }
- if (Type == 1)
- {
- int i = 0;
- int ix = ExData.Length / 2;
- string Outpath = "assets\\minecraft\\textures\\";
-
-
- foreach (PckFileData mf in Pck.GetFiles())
- {
- FileInfo file = new FileInfo(Environment.CurrentDirectory + "\\Temp\\" + @"\" + mf.Filename);
- file.Directory.Create(); // If the directory already exists, this method does nothing.
- File.WriteAllBytes(Environment.CurrentDirectory + "\\Temp\\" + @"\" + mf.Filename, mf.Data); //writes minefile to file
- }
- while (i <= ix)
- {
- try
- {
- Console.WriteLine(ExData[i, 0] + " --- " + ExData[i, 1]);
- Directory.CreateDirectory(Path.GetDirectoryName(AppData + "\\" + metroTextBox1.Text + "\\" + Outpath + ExData[i, 0] + ".png"));
- File.Copy(Environment.CurrentDirectory + "\\Temp\\res" + ExData[i, 1] + ".png", AppData + "\\" + metroTextBox1.Text + "\\" + Outpath + ExData[i, 0] + ".png");
- }
- catch { }
- i++;
- }
- }
- if (Type == 2)
- {
- int i = 0;
- int ix = armour.Length / 2;
- string Outpath = "assets\\minecraft\\textures\\";
-
-
- foreach (PckFileData mf in Pck.GetFiles())
- {
- FileInfo file = new FileInfo(Environment.CurrentDirectory + "\\Temp\\" + @"\" + mf.Filename);
- file.Directory.Create(); // If the directory already exists, this method does nothing.
- File.WriteAllBytes(Environment.CurrentDirectory + "\\Temp\\" + @"\" + mf.Filename, mf.Data); //writes minefile to file
- }
- while (i <= ix)
- {
- try
- {
- Console.WriteLine(armour[i, 0] + " --- " + armour[i, 1]);
- Directory.CreateDirectory(Path.GetDirectoryName(AppData + "\\" + metroTextBox1.Text + "\\" + Outpath + armour[i, 0] + ".png"));
- File.Copy(Environment.CurrentDirectory + "\\Temp\\res" + armour[i, 1] + ".png", AppData + "\\" + metroTextBox1.Text + "\\" + Outpath + armour[i, 0] + ".png");
- }
- catch { }
- i++;
- }
- }
- }
-
- public void SplitTextures3(string path, Image Img)
- {
- int i = 0;
- int ix = painting.Length / 5;
-
- string Outpath = "assets\\minecraft\\textures\\painting\\";
-
- Bitmap bm = (Bitmap)Img;
-
- // Get the inputs.
- int wid = bm.Width / 16;
- int hgt = bm.Height / 16;
- // Start splitting the Bitmap.
- string piece_name = Path.GetFileNameWithoutExtension(path);
- Directory.CreateDirectory(AppData + "\\" + metroTextBox1.Text + "\\" + Outpath);
- while (i < ix)
- {
- Rectangle dest_rect = new Rectangle(0, 0, wid * int.Parse(painting[i, 3]), hgt * int.Parse(painting[i, 4]));
- Bitmap piece = new Bitmap(wid * int.Parse(painting[i, 3]), hgt * int.Parse(painting[i, 4]));
- using (Graphics gr = Graphics.FromImage(piece))
- {
- try
- {
- Rectangle source_rect = new Rectangle(wid * int.Parse(painting[i, 2]), hgt * int.Parse(painting[i, 1]), wid * int.Parse(painting[i, 3]), hgt * int.Parse(painting[i, 4]));
-
- // Copy the piece of the image.
- gr.Clear(Color.Transparent);
- gr.DrawImage(bm, dest_rect, source_rect, GraphicsUnit.Pixel);
-
-
- piece.Save(AppData + "\\" + metroTextBox1.Text + "\\" + Outpath + "\\" + (painting[i, 0]) + ".png", ImageFormat.Png);
-
- gr.Dispose();
- }
- catch (Exception err) { Console.WriteLine(err.Message); }
- }
- i++;
- }
- bm.Dispose();
- }
-
- private void TextureConverterUtility_FormClosing(object sender, FormClosingEventArgs e)
- {
- Directory.Delete(Environment.CurrentDirectory + "\\Temp", true);
- }
- }
-}
diff --git a/PCK-Studio/Forms/Utilities/TextureConverterUtility.resx b/PCK-Studio/Forms/Utilities/TextureConverterUtility.resx
deleted file mode 100644
index 1af7de15..00000000
--- a/PCK-Studio/Forms/Utilities/TextureConverterUtility.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/PCK-Studio/Forms/Utilities/pckCenter.Designer.cs b/PCK-Studio/Forms/Utilities/pckCenter.Designer.cs
deleted file mode 100644
index fd244284..00000000
--- a/PCK-Studio/Forms/Utilities/pckCenter.Designer.cs
+++ /dev/null
@@ -1,261 +0,0 @@
-namespace PckStudio.Forms.Utilities
-{
- partial class pckCenter
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.components = new System.ComponentModel.Container();
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(pckCenter));
- this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
- this.radioButtonMine = new System.Windows.Forms.RadioButton();
- this.radioButtonDevPicks = new System.Windows.Forms.RadioButton();
- this.radioButtonNew = new System.Windows.Forms.RadioButton();
- this.radioButtonAll = new System.Windows.Forms.RadioButton();
- this.radioButtonCommunity = new System.Windows.Forms.RadioButton();
- this.pictureBox1 = new System.Windows.Forms.PictureBox();
- this.buttonSubmit = new System.Windows.Forms.Button();
- this.radioButtonTex = new System.Windows.Forms.RadioButton();
- this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
- this.panel1 = new System.Windows.Forms.Panel();
- this.pckLayout = new System.Windows.Forms.FlowLayoutPanel();
- this.contextMenuStripPCK = new System.Windows.Forms.ContextMenuStrip(this.components);
- this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.exportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
- this.PSVitaPCKCheckbox = new MetroFramework.Controls.MetroCheckBox();
- this.tableLayoutPanel1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
- this.tableLayoutPanel2.SuspendLayout();
- this.panel1.SuspendLayout();
- this.contextMenuStripPCK.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
- this.SuspendLayout();
- //
- // tableLayoutPanel1
- //
- resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1");
- this.tableLayoutPanel1.Controls.Add(this.radioButtonMine, 0, 5);
- this.tableLayoutPanel1.Controls.Add(this.radioButtonDevPicks, 0, 3);
- this.tableLayoutPanel1.Controls.Add(this.radioButtonNew, 0, 2);
- this.tableLayoutPanel1.Controls.Add(this.radioButtonAll, 0, 1);
- this.tableLayoutPanel1.Controls.Add(this.radioButtonCommunity, 0, 4);
- this.tableLayoutPanel1.Controls.Add(this.pictureBox1, 0, 0);
- this.tableLayoutPanel1.Controls.Add(this.buttonSubmit, 0, 7);
- this.tableLayoutPanel1.Controls.Add(this.radioButtonTex, 0, 6);
- this.tableLayoutPanel1.Name = "tableLayoutPanel1";
- //
- // radioButtonMine
- //
- resources.ApplyResources(this.radioButtonMine, "radioButtonMine");
- this.radioButtonMine.BackColor = System.Drawing.Color.Transparent;
- this.radioButtonMine.FlatAppearance.BorderSize = 0;
- this.radioButtonMine.FlatAppearance.CheckedBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(42)))), ((int)(((byte)(42)))), ((int)(((byte)(42)))));
- this.radioButtonMine.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radioButtonMine.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radioButtonMine.ForeColor = System.Drawing.Color.White;
- this.radioButtonMine.Name = "radioButtonMine";
- this.radioButtonMine.UseVisualStyleBackColor = false;
- this.radioButtonMine.CheckedChanged += new System.EventHandler(this.radioButtonMine_CheckedChanged);
- //
- // radioButtonDevPicks
- //
- resources.ApplyResources(this.radioButtonDevPicks, "radioButtonDevPicks");
- this.radioButtonDevPicks.BackColor = System.Drawing.Color.Transparent;
- this.radioButtonDevPicks.FlatAppearance.BorderSize = 0;
- this.radioButtonDevPicks.FlatAppearance.CheckedBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(42)))), ((int)(((byte)(42)))), ((int)(((byte)(42)))));
- this.radioButtonDevPicks.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radioButtonDevPicks.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radioButtonDevPicks.ForeColor = System.Drawing.Color.White;
- this.radioButtonDevPicks.Name = "radioButtonDevPicks";
- this.radioButtonDevPicks.UseVisualStyleBackColor = false;
- this.radioButtonDevPicks.CheckedChanged += new System.EventHandler(this.radioButtonDevPicks_CheckedChanged);
- //
- // radioButtonNew
- //
- resources.ApplyResources(this.radioButtonNew, "radioButtonNew");
- this.radioButtonNew.BackColor = System.Drawing.Color.Transparent;
- this.radioButtonNew.FlatAppearance.BorderSize = 0;
- this.radioButtonNew.FlatAppearance.CheckedBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(42)))), ((int)(((byte)(42)))), ((int)(((byte)(42)))));
- this.radioButtonNew.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radioButtonNew.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radioButtonNew.ForeColor = System.Drawing.Color.White;
- this.radioButtonNew.Name = "radioButtonNew";
- this.radioButtonNew.UseVisualStyleBackColor = false;
- this.radioButtonNew.CheckedChanged += new System.EventHandler(this.radioButtonNew_CheckedChanged);
- //
- // radioButtonAll
- //
- resources.ApplyResources(this.radioButtonAll, "radioButtonAll");
- this.radioButtonAll.BackColor = System.Drawing.Color.Transparent;
- this.radioButtonAll.Checked = true;
- this.radioButtonAll.FlatAppearance.BorderSize = 0;
- this.radioButtonAll.FlatAppearance.CheckedBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(42)))), ((int)(((byte)(42)))), ((int)(((byte)(42)))));
- this.radioButtonAll.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radioButtonAll.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radioButtonAll.ForeColor = System.Drawing.Color.White;
- this.radioButtonAll.Name = "radioButtonAll";
- this.radioButtonAll.TabStop = true;
- this.radioButtonAll.UseVisualStyleBackColor = false;
- this.radioButtonAll.CheckedChanged += new System.EventHandler(this.radioButtonAll_CheckedChanged);
- //
- // radioButtonCommunity
- //
- resources.ApplyResources(this.radioButtonCommunity, "radioButtonCommunity");
- this.radioButtonCommunity.BackColor = System.Drawing.Color.Transparent;
- this.radioButtonCommunity.FlatAppearance.BorderSize = 0;
- this.radioButtonCommunity.FlatAppearance.CheckedBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(42)))), ((int)(((byte)(42)))), ((int)(((byte)(42)))));
- this.radioButtonCommunity.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radioButtonCommunity.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radioButtonCommunity.ForeColor = System.Drawing.Color.White;
- this.radioButtonCommunity.Name = "radioButtonCommunity";
- this.radioButtonCommunity.UseVisualStyleBackColor = false;
- this.radioButtonCommunity.CheckedChanged += new System.EventHandler(this.radioButtonCommunity_CheckedChanged);
- //
- // pictureBox1
- //
- resources.ApplyResources(this.pictureBox1, "pictureBox1");
- this.pictureBox1.Image = global::PckStudio.Properties.Resources.pckCenterHeader;
- this.pictureBox1.Name = "pictureBox1";
- this.pictureBox1.TabStop = false;
- //
- // buttonSubmit
- //
- this.buttonSubmit.FlatAppearance.BorderSize = 0;
- resources.ApplyResources(this.buttonSubmit, "buttonSubmit");
- this.buttonSubmit.ForeColor = System.Drawing.Color.White;
- this.buttonSubmit.Name = "buttonSubmit";
- this.buttonSubmit.UseVisualStyleBackColor = true;
- this.buttonSubmit.Click += new System.EventHandler(this.buttonSubmit_Click);
- //
- // radioButtonTex
- //
- resources.ApplyResources(this.radioButtonTex, "radioButtonTex");
- this.radioButtonTex.BackColor = System.Drawing.Color.Transparent;
- this.radioButtonTex.FlatAppearance.BorderSize = 0;
- this.radioButtonTex.FlatAppearance.CheckedBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(42)))), ((int)(((byte)(42)))), ((int)(((byte)(42)))));
- this.radioButtonTex.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radioButtonTex.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radioButtonTex.ForeColor = System.Drawing.Color.White;
- this.radioButtonTex.Name = "radioButtonTex";
- this.radioButtonTex.UseVisualStyleBackColor = false;
- this.radioButtonTex.CheckedChanged += new System.EventHandler(this.radioButtonTex_CheckedChanged);
- //
- // tableLayoutPanel2
- //
- resources.ApplyResources(this.tableLayoutPanel2, "tableLayoutPanel2");
- this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel1, 0, 0);
- this.tableLayoutPanel2.Controls.Add(this.panel1, 1, 0);
- this.tableLayoutPanel2.Name = "tableLayoutPanel2";
- //
- // panel1
- //
- this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.panel1.Controls.Add(this.pckLayout);
- resources.ApplyResources(this.panel1, "panel1");
- this.panel1.Name = "panel1";
- //
- // pckLayout
- //
- resources.ApplyResources(this.pckLayout, "pckLayout");
- this.pckLayout.Name = "pckLayout";
- this.pckLayout.ControlRemoved += new System.Windows.Forms.ControlEventHandler(this.pckLayout_ControlRemoved);
- this.pckLayout.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pckLayout_MouseClick);
- this.pckLayout.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pckLayout_MouseDown);
- this.pckLayout.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pckLayout_MouseMove_1);
- //
- // contextMenuStripPCK
- //
- this.contextMenuStripPCK.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.deleteToolStripMenuItem,
- this.exportToolStripMenuItem});
- this.contextMenuStripPCK.Name = "contextMenuStripPCK";
- resources.ApplyResources(this.contextMenuStripPCK, "contextMenuStripPCK");
- //
- // deleteToolStripMenuItem
- //
- this.deleteToolStripMenuItem.Image = global::PckStudio.Properties.Resources.file_delete;
- this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem";
- resources.ApplyResources(this.deleteToolStripMenuItem, "deleteToolStripMenuItem");
- //
- // exportToolStripMenuItem
- //
- this.exportToolStripMenuItem.Image = global::PckStudio.Properties.Resources.file_export;
- this.exportToolStripMenuItem.Name = "exportToolStripMenuItem";
- resources.ApplyResources(this.exportToolStripMenuItem, "exportToolStripMenuItem");
- //
- // PSVitaPCKCheckbox
- //
- resources.ApplyResources(this.PSVitaPCKCheckbox, "PSVitaPCKCheckbox");
- this.PSVitaPCKCheckbox.Name = "PSVitaPCKCheckbox";
- this.PSVitaPCKCheckbox.Style = MetroFramework.MetroColorStyle.Silver;
- this.PSVitaPCKCheckbox.Theme = MetroFramework.MetroThemeStyle.Dark;
- this.PSVitaPCKCheckbox.UseSelectable = true;
- this.PSVitaPCKCheckbox.CheckedChanged += new System.EventHandler(this.PSVitaPCKCheckbox_CheckedChanged);
- //
- // pckCenter
- //
- resources.ApplyResources(this, "$this");
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.BorderStyle = MetroFramework.Forms.MetroFormBorderStyle.FixedSingle;
- this.Controls.Add(this.PSVitaPCKCheckbox);
- this.Controls.Add(this.tableLayoutPanel2);
- this.Name = "pckCenter";
- this.ShadowType = MetroFramework.Forms.MetroFormShadowType.DropShadow;
- this.Style = MetroFramework.MetroColorStyle.White;
- this.Theme = MetroFramework.MetroThemeStyle.Dark;
- this.Load += new System.EventHandler(this.pckCenter_Load);
- this.tableLayoutPanel1.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
- this.tableLayoutPanel2.ResumeLayout(false);
- this.panel1.ResumeLayout(false);
- this.contextMenuStripPCK.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
- private System.Windows.Forms.BindingSource bindingSource1;
- private System.Windows.Forms.PictureBox pictureBox1;
- private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
- private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
- private System.Windows.Forms.RadioButton radioButtonDevPicks;
- private System.Windows.Forms.RadioButton radioButtonNew;
- private System.Windows.Forms.RadioButton radioButtonAll;
- private System.Windows.Forms.RadioButton radioButtonCommunity;
- private System.Windows.Forms.Panel panel1;
- private System.Windows.Forms.FlowLayoutPanel pckLayout;
- private System.Windows.Forms.RadioButton radioButtonMine;
- private System.Windows.Forms.ContextMenuStrip contextMenuStripPCK;
- private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem exportToolStripMenuItem;
- private System.Windows.Forms.Button buttonSubmit;
- private System.Windows.Forms.RadioButton radioButtonTex;
- private MetroFramework.Controls.MetroCheckBox PSVitaPCKCheckbox;
- }
-}
\ No newline at end of file
diff --git a/PCK-Studio/Forms/Utilities/pckCenter.cs b/PCK-Studio/Forms/Utilities/pckCenter.cs
deleted file mode 100644
index ee0c4191..00000000
--- a/PCK-Studio/Forms/Utilities/pckCenter.cs
+++ /dev/null
@@ -1,395 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Drawing;
-using System.IO;
-using System.Linq;
-using System.Net;
-using System.Windows.Forms;
-using System.Diagnostics;
-using PckStudio.Classes.Misc;
-using PckStudio.API.PCKCenter.model;
-using PckStudio.API.PCKCenter;
-
-namespace PckStudio.Forms.Utilities
-{
- public partial class pckCenter : MetroFramework.Forms.MetroForm
- {
- string[] mods;
- static string hosturl = Program.BaseAPIUrl;
- static string loadDirectory = hosturl + "/pckCenterList.txt";
- static string appData = Program.AppData;
- LocalActions LAct = new LocalActions();
- string cacheDir = Program.AppDataCache + "/mods/";
-
- bool nobleLoaded = true;
- bool newLoaded = true;
- bool devPicksLoaded = true;
- bool communityLoaded = true;
- bool TexLoaded = true;
- bool isVita = false;
-
-
- public pckCenter()
- {
- InitializeComponent();
- //listViewNav.SmallImageList = imgList;
-
- if (!Directory.Exists(cacheDir))
- {
- Directory.CreateDirectory(cacheDir);
- }
- if(isVita)
- loadDirectory = File.ReadAllText(appData + "\\settings.ini").Split(new[] { "\r\n", "\n" }, StringSplitOptions.None)[1] + "/studio/PCK/api/pckCenterVitaList.txt";
- }
-
- private void reload(bool checkNeeded)
- {
- try
- {
- using (WebClient client = new WebClient())
- {
- try
- {
- if ((client.DownloadString(hosturl + "pckCenterAvailable.txt")) == "1")
- {
- }
- else if ((client.DownloadString(hosturl + "pckCenterAvailable.txt")) == "0")
- {
- MessageBox.Show("PCK Center is currently down for maintenance, sorry for any inconveniences");
- radioButtonMine.Checked = true;
- return;
- }
- else
- {
-
- }
- }
- catch (Exception connect)
- {
- MessageBox.Show(connect.ToString());
- }
- }
-
- using (WebClient client = new WebClient())
- {
- string parseContent = client.DownloadString(loadDirectory);
- mods = parseContent.Split('\n');
-
- int controlCount = pckLayout.Controls.Count;
- for (int i = controlCount - 1; i >= 0; i--)
- {
- Control control = pckLayout.Controls[i];
-
- pckLayout.Controls.Remove(control);
- control.Dispose();
- }
-
- PCKCenterJSON PJSON = new PCKCenterJSON();
- PJSON.Data = new Dictionary();
- int x = 0;
- foreach (string mod in mods)
- {
- try
- {
- if (File.Exists(cacheDir + mod + ".png") && checkNeeded == true)
- {
- //image cache
- string imgname = hosturl + "pcks/" + mod + ".png";
- if (isVita)
- imgname = hosturl + "pcks/vita" + mod + ".png";
- HttpWebRequest textureFile = (HttpWebRequest)WebRequest.Create(imgname);
- HttpWebResponse textureFileResponse = (HttpWebResponse)textureFile.GetResponse();
-
- DateTime localImageModifiedTime = File.GetLastWriteTime(cacheDir + mod + ".png");
- DateTime onlineImageModifiedTime = textureFileResponse.LastModified;
- textureFileResponse.Dispose();
- if (localImageModifiedTime >= onlineImageModifiedTime)
- {
-
- }
- else
- {
- if (isVita)
- client.DownloadFile(hosturl + "pcks/vita/" + mod + ".png", cacheDir + mod + ".png");
- else
- client.DownloadFile(hosturl + "pcks/" + mod + ".png", cacheDir + mod + ".png");
- }
- }
- else if (mod.Length == 0) { }
- else if (File.Exists(cacheDir + mod + ".png") && checkNeeded == false)
- {
-
- }
- else
- {
- // MessageBox.Show(mod + ".png");
- client.DownloadFile(hosturl + "pcks/" + mod + ".png", cacheDir + mod + ".png");
- }
-
- if (File.Exists(cacheDir + mod + ".desc") && checkNeeded == true)
- {
- //desc cache
- HttpWebRequest descFile = (HttpWebRequest)WebRequest.Create(hosturl + "pcks/" + mod + ".desc");
- HttpWebResponse descFileResponse = (HttpWebResponse)descFile.GetResponse();
-
- DateTime localDescModifiedTime = File.GetLastWriteTime(cacheDir + mod + ".desc");
- DateTime onlineDescModifiedTime = descFileResponse.LastModified;
- descFileResponse.Dispose();
-
- if (localDescModifiedTime >= onlineDescModifiedTime)
- {
-
- }
- else
- {
- client.DownloadFile(hosturl + "pcks/" + mod + ".desc", cacheDir + mod + ".desc");
- }
- }
- else if (File.Exists(cacheDir + mod + ".png") && checkNeeded == false)
- {
-
- }
- else if (mod.Length == 0) { }
- else
- {
- client.DownloadFile(hosturl + "pcks/" + mod + ".desc", cacheDir + mod + ".desc");
- }
- if (mod.Length != 0)
- {
- string[] parseDesc = File.ReadAllText(cacheDir + mod + ".desc").Split('\n');
- Bitmap bmp = new Bitmap(Image.FromFile(cacheDir + mod + ".png"));
- string pckName = parseDesc[0];
- string author = parseDesc[1];
- string desc = parseDesc[2];
- string direct = parseDesc[3];
- string ad = parseDesc[4];
- bool IsVita = (parseDesc[5] == "true" || parseDesc[5] == "True");
- string Packname = parseDesc[6];
-
- EntryInfo EInfo = new EntryInfo();
- EInfo.Name = pckName;
- EInfo.Author = author;
- EInfo.Description = desc;
- PJSON.Data.Add((++x).ToString(), EInfo);
- File.Copy(cacheDir + mod + ".png", cacheDir + "images/" + ++x + ".png");
- }
- }
- catch (Exception err) { Console.WriteLine(err.Message); }
- x++;
- }
- LAct.SaveLocalJSON(PJSON, loadDirectory.Replace(hosturl + "pckCenter", "").Replace(".txt", ""), isVita);
- }
- }
- catch (Exception err)
- {
- MessageBox.Show("Couldn't connect to PCK Center servers.. \n" + err.Message.ToString() + "\n" + err.ToString()) ;
- }
- }
-
- private void radioButtonNew_CheckedChanged(object sender, EventArgs e)
- {
- if (radioButtonNew.Checked == true)
- {
- loadDirectory = hosturl + "pckCenterNew.txt";
- if (isVita)
- loadDirectory = hosturl + "pckCenterVitaNew.txt";
- if (!string.IsNullOrWhiteSpace(new WebClient().DownloadString(loadDirectory)))
- {
- reload(newLoaded);
- newLoaded = false;
- }
- else { MessageBox.Show("No Packs Avaliable!"); }
- }
- }
-
- private void radioButtonDevPicks_CheckedChanged(object sender, EventArgs e)
- {
- if (radioButtonDevPicks.Checked == true)
- {
- loadDirectory = hosturl + "pckCenterPicks.txt";
- if (isVita)
- loadDirectory = hosturl + "pckCenterVitaPicks.txt";
- if (!string.IsNullOrWhiteSpace(new WebClient().DownloadString(loadDirectory)))
- {
- reload(devPicksLoaded);
- devPicksLoaded = false;
- }
- else { MessageBox.Show("No Packs Avaliable!"); }
- }
- }
-
- private void radioButtonCommunity_CheckedChanged(object sender, EventArgs e)
- {
- if (radioButtonCommunity.Checked == true)
- {
- loadDirectory = hosturl + "pckCenterCommunity.txt";
- if(isVita)
- loadDirectory = hosturl + "pckCenterVitaCommunity.txt";
- if (!string.IsNullOrWhiteSpace(new WebClient().DownloadString(loadDirectory)))
- {
- reload(communityLoaded);
- communityLoaded = false;
- }
- else { MessageBox.Show("No Packs Avaliable!"); }
- }
- }
-
- private void radioButtonMine_CheckedChanged(object sender, EventArgs e)
- {
- if (radioButtonMine.Checked == true)
- {
- loadCollectdion();
- }
- }
-
- private void loadCollectdion()
- {
- int controlCount = pckLayout.Controls.Count;
- for (int i = controlCount - 1; i >= 0; i--)
- {
- Control control = pckLayout.Controls[i];
-
- pckLayout.Controls.Remove(control);
- control.Dispose();
- }
-
- pckLayout.Enabled = false;
- List pckFiles = Directory.GetFiles(appData + "/PCK-Center/myPcks/", "*.*", SearchOption.AllDirectories).Where(file => new string[] { ".pck" }.Contains(Path.GetExtension(file))).ToList();
- foreach (string pck in pckFiles)
- {
- string pckName = "";
- string author = "";
- string desc = "";
- string direct = "";
- string ad = "";
-
- string mod = Path.GetFileName(pck);
- mod = Path.GetFileNameWithoutExtension(mod);
-
- string[] parseDesc = File.ReadAllText(appData + "/PCK-Center/myPcks/" + mod + ".desc").Split('\n');
- pckName += parseDesc[0];
- author += parseDesc[1];
- desc += parseDesc[2];
- direct += parseDesc[3];
- ad += parseDesc[4];
-
-
- string filename = appData + "/PCK-Center/myPcks/" + mod + ".png";
-
- Bitmap bmp = null;
- using (FileStream memStream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
- {
- bmp = (Bitmap)Image.FromStream(memStream);
- }
- }
- pckLayout.Enabled = true;
- }
-
- private void radioButtonAll_CheckedChanged(object sender, EventArgs e)
- {
- if (radioButtonAll.Checked == true)
- {
- loadDirectory = hosturl + "pckCenterList.txt";
- if (isVita)
- loadDirectory = hosturl + "pckCenterVitaList.txt";
- if (!string.IsNullOrWhiteSpace(new WebClient().DownloadString(loadDirectory)))
- {
- reload(nobleLoaded);
- nobleLoaded = false;
- }
- else { MessageBox.Show("No Packs Avaliable!"); }
- }
- }
-
- private void pckCenter_Load(object sender, EventArgs e)
- {
- Directory.CreateDirectory(appData + "/PCK-Center/myPcks/");
- reload(nobleLoaded);
- nobleLoaded = false;
-
-
- try
- {
- RPC.SetPresence("Viewing the PCK Center");
- }
- catch
- {
- Debug.WriteLine("ERROR WITH RPC");
- }
- }
-
- private void pckLayout_MouseUp(object sender, MouseEventArgs e)
- {
- }
-
- private void pckLayout_MouseMove_1(object sender, MouseEventArgs e)
- {
- }
-
- //Down to Collection //Redownload //Yea
- private void pckLayout_MouseClick(object sender, MouseEventArgs e)
- {
- }
-
- private void pckLayout_MouseDown(object sender, MouseEventArgs e)
- {
- }
-
- private void pckLayout_ControlRemoved(object sender, ControlEventArgs e)
- {
-
- }
-
- private void buttonSubmit_Click(object sender, EventArgs e)
- {
- if(!isVita)
- Process.Start("mailto:phoenixarc.canarynotifs@gmail.com?subject=PCK%20Submission&body=Pack%20name(%E3%83%91%E3%83%83%E3%82%AF%E5%90%8D)%3A%0A%0Aauthor(%E8%91%97%E8%80%85)%3A%0A%0Adescription(%E8%AA%AC%E6%98%8E)%3A%0A%0Aimage(%E7%94%BB%E5%83%8F)%3A");
- if(isVita)
- Process.Start("mailto:phoenixarc.canarynotifs@gmail.com?subject=PCK%20Submission--Vita--&body=Pack%20name(%E3%83%91%E3%83%83%E3%82%AF%E5%90%8D)%3A%0A%0Aauthor(%E8%91%97%E8%80%85)%3A%0A%0Adescription(%E8%AA%AC%E6%98%8E)%3A%0A%0Aimage(%E7%94%BB%E5%83%8F)%3A%3A%0A%0APack%20To%20Replace%3A%0A%0A");
- }
-
- private void radioButtonTex_CheckedChanged(object sender, EventArgs e)
- {
- if (radioButtonTex.Checked == true)
- {
- loadDirectory = hosturl + "pckCenterTex.txt";
- if (isVita)
- loadDirectory = hosturl + "pckCenterVitaTex.txt";
- if (!string.IsNullOrWhiteSpace(new WebClient().DownloadString(loadDirectory)))
- {
- reload(TexLoaded);
- TexLoaded = false;
- }
- else { MessageBox.Show("No Packs Avaliable!"); }
- }
- }
-
- private void PSVitaPCKCheckbox_CheckedChanged(object sender, EventArgs e)
- {
- isVita = PSVitaPCKCheckbox.Checked;
-
-
- nobleLoaded = true;
- newLoaded = true;
- devPicksLoaded = true;
- communityLoaded = true;
- TexLoaded = true;
-
- radioButtonAll.Checked = true;
- loadDirectory = hosturl + "pckCenterList.txt";
-
- if (isVita)
- {
- hosturl += "";
- loadDirectory = hosturl + "pckCenterVitaList.txt";
- }
- if (!string.IsNullOrWhiteSpace(new WebClient().DownloadString(loadDirectory)))
- {
- reload(nobleLoaded);
- nobleLoaded = false;
- }
- else { MessageBox.Show("No Packs Avaliable!"); }
- }
- }
-}
\ No newline at end of file
diff --git a/PCK-Studio/Forms/Utilities/pckCenter.ja.resx b/PCK-Studio/Forms/Utilities/pckCenter.ja.resx
deleted file mode 100644
index 99eccf2f..00000000
--- a/PCK-Studio/Forms/Utilities/pckCenter.ja.resx
+++ /dev/null
@@ -1,1995 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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
-
-
- 私のコレクション
-
-
- 開発者のおすすめ
-
-
- 新着
-
-
- ノーブルPCK
-
-
- コミュニティ
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAYAAABNo9TkAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- wQAADsEBuJFr7QAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAP+NSURBVHhe7P0H
- mGRV2T1ufwxZgmSQoIBKEFFUUBReJCgKoiAqGAGzJEUJghjAgIjpFQMvggIiGREFDKioKGZFBXPCCCbC
- MDl0ffuuf+3+HYqaUF3dM909a13XukSYqTpnn33qnPWsJ/z/giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAI
- giAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgmCcY7kOp3S4
- fIMrdLhigys1uPIAbH5OZfN7sH5/PZ56jPWYgyAIgiAIgiAIgmDcoym8m4K7imwieZXCVQsf0OFqhasX
- rtHhmoUP7HCtwrU7XKfDdTtcrw/Wv4P1c7B+Nvqu+r2OwbE4LnSMjtVxO36sgr9b1EfMB0EQBEEQBEEQ
- BEsETQHeFN9N4d0U3VVoV3FNMG9QuGHhRoUPKty4cJPCTTvcrPDBhQ8p3LzDLQq37PChDT5sIWz+Oax/
- 32dV+mzfg77TdzsGx+O4HJ/jdLyOe/3CKvqdUxX2VdA3xXy3iI+AD4IgCIIgCIIgCPpCFZBViHeL8CrA
- Oc1VfBOtxCshW0U3oVuFNjFcBfVWhVsXblO4beF2hY8s3L7wUYWPLtyh8DGFj+3wcYU7drhTh49fTNY/
- j/UzfB76bN/j+3wvOgbH47geUegYHatjfnihc6hC37lVUV8FvTWwFk0Rb62aAt5aVvHeFO5BEARBEARB
- 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
- J5889NGPfnToqquuan3ve99r/eUvf2kL6omGGTNmtMX+T3/609bXvva11gUXXNA69dRTh5zjHnvsMW+L
- LbaYu8IKKzSFfBXw1qgKeGtnDat4t7bVeW8K9+q4uzaukWvVFO2upWvq2rrGrrVr7trbA1WwNx32mhJv
- D9lL9lTTXbfn7L1au25P2pv2qL3aFOtx1oMgCIIgCIIgmDCoolzzLU24munr1Smvonynwpq6rm7YPGyz
- sTmeNW3dLO3XF6o/1llderPa5OqQNwW5juIcV+64mmcp1OqgdS7n0jbFuHpqKdnqrLm86rCbQlyad9MF
- b4vwBz7wgXN22mmneS960YuGiNRLLrmk9eMf/7h17733duTssgkuPoefQ98t4B/ykIfMLWtHwDfFu7W1
- xk3h7hq4Fq6Ja+MaNUW7a+hauqY6zbvGrrVr7to3BXt12O0VzeeUO9hD9pI9ZW9Vd92es/fsQXvRnrQ3
- u8V6dxp8s8FcEARBEARBEATBuAAnsY5E031dozeifKNC9b0LEuVPLzQ6S+q6umHzsHXrri55TVt/d6H6
- Y83DjDer9ePdgpxokybNedWwTL24ZmbVGW+KcanpNS29OuJtIS4N/aEPfei8Aw44YP4JJ5wwdO6557Zu
- vPHG1j//+c+OHA36xdSpU1vf+c53WmeffXbr6KOPHtp9993nr7feenPKejeFe9Nxd21co6Zor067a+ra
- usautWveS7DbI/aKPaNjvD1kL9V0+Oqu23P2nj1oL9qT9qZGc91i3V62p+1te9xet+fr6La46kEQBEEQ
- BEEQLBU0U9jXKDS+qnZf36JQEy71vTV9vTrlBJCaYILI6KzXFNZact26315YXXKpy+cU6vRtXJfRXWqT
- 1Y93C3I1zdUdr/Xi6qCrM34/MT5lypTZ2267bdsRf//739/6+te/3rr77rs7sjIYa9x+++1q4lsf+MAH
- Wi996UuHdtxxx/kPeMADCHfp8soHqmh37VxDDepc01rXXl12175bsNsj9oqUeHvHHrKX7Knqrttr9lyt
- XZcKb0++uNAerWLd3q1p8LVm3R6v3eDtffeAeyGuehAEQRAEQRAESwTdbrl031pX/pBCY6x0yH5soSZc
- taZcCnF1ygkgQoggOqFQ6ro0ZPXDunWbka0ZWHXJNXXT6VtDN53VpTmrUa4OeRXk6sab7jgnVip1W4yr
- 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
- 7b///hqg9RQr3TzqqKPGrBmc7t46wxvLVb6LGJcGTbz9p/O//j8nm2CpQr1bpLeP80EPetDAjcA6M8EJ
- JN+tKRrX2LUkimpquxpgteEHF9a6c03hzDcngPwGjxT2oJRkridhJW3e/GsjtnTxrqnuHGvil0OteR2n
- /24u7J///OfO2YwMeiCUz7IG1t2+FQDobmBmnzsGASmiXOBA4ELTPL0XrFMt8RBM6C7xsLbVTZ910EEH
- Dd15552dIxh9XHHFFYs1N19/hYMPPrj1ve99r/M3lzys/yMe8Qh7uztIUru9249+Y1yD8wvr7PRuN73W
- ptdO737L7FH9DjSQG2SfBkEQBMEyiyrCq+gmHqROerhyaaSsERPoxRC5fuglLwzDxSdRzmUijqQZq+Os
- rrluyZypQwq7XXNOFkdLWq+63O8WEnbcV24hsdmeZ667uFTuJQ1N03Rj32GHHXoKk17kOn70ox/tfMLo
- 4xe/+EVrxx13rK45McixltqL0rYJEyKOO0yoE3PdIn3YRT/jjDM6nzwyCELoNl4+SzDA90sf16H8i4Wu
- r7Ritb81tV2NuHnUjyjU4E3d+aKawi0KfvNrPboaYmnK6orNvza27w2FBDDxy6GWas7ht9es37RDDz10
- YBd9jz32cF2sQxXo9jMH1/epMzf2jTgXLHh34dsKBS64/O4N9fmO03/nsEvLVzuvwV29P7jprrVrO33T
- TTedq3naWOGHP/xhO4hTvmuxuPPOO7e7v4/1pIJecL+ecsopNXBlz/sN8VtizaydNfRbU2en+w36YGF1
- 0/1G+a3ym+W3S08DWR4CSc25/GkgFwRBEASLQFOQE+OEuIcowe3lT+RbZ1ZplJq/SIUUEef0ERWoQRF6
- CIdhuGhuVigFlMPkBZbbJL3YS+1TCmutOddc92Tio7rmHCxOFhGnNreXQ9iutzViaUmDQ33OOee0HvKQ
- h/QUIQsicX7uued2PmX0oaHZyiuvrKa8ig8OMCGo7tb/cgytoX9PLEv35WoT8v4OUe/vt110KcpTp07t
- fPrIcN555zl3n+t4amM4aeQcYAKIS0n82AdGXEltVysumEPw+L0eDbHjGSD46je+prrbh+Zfv7qQENaE
- kKPP2eeoSh+3XncaDXfLLbd0zmpk6LjodS00LSMKpbfb5806aOKcq69hmcAFYahxnv/tHjPY614RBFGb
- 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
- 3FsLa8O4pxc+vnDrwo0KVy/M2LUgCIKCCPQwDMMJxF4CdllgnPQgGN/4xje+UWej/7fwT4XNhnHnFL6n
- 8ITCVxQeWLh74aMLNy/M2LUgCIIOItDDMAwnEHuJ12WFcdKDYHzjBS94gVT3ZsO47xd+qfDiwo8Unlr4
- ukLvmvsWPrEwY9eCIAgaiEAPwzCcQOwlXJclxkkPgvGL2267rbXKKqvUhnF/LtQw7sbCzxV+svB9hScV
- vrrwuYUZuxYEQdCFCPQwDMMJxF6idVkjJ/2SSy6Jkx4E4xAnnXQSF316oYZxvyv8UeFXCi8r/FjhOwtf
- X1jHrj2p8BGFmxSuWRgXPQiCZRoR6GEYhhOIvQTrssg46UEwPjF16tTWhhtuOLe8L95T+NfCXxR+u9D7
- 5PmF3WPXnlL4uMKHFq5fyEXP2LUgCJZZRKCHYRhOIPYSq8sqB6lJHxoaan3nO99pffjDH2596EMfavPM
- M89s07+r/MhHPtLmRz/60WF+7GMfG+ZZZ501hP/3f/83zLPPPnuYH//4x9s855xzhnnuuee2+YlPfKKy
- 9clPfnKY5513Xpt/+ctfOkfbP771rW+1zj///DYvuOCCNj/1qU+1eeGFF+LQpz/96TYvuuiiYV588cVt
- XnLJJW2W9W3zsssuG+bll1/e5hVXXNHmlVde2eZnPvOZYV511VVtfvazn23z6quvbvNzn/tcm5///OeH
- ec0117R57bXXtnnddde1+YUvfGGYX/ziF9v80pe+1OaXv/zlNq+//vo2v/KVrwzzq1/9aptf+9rXWnjD
- DTe0+fWvf71Nc7sHwR133NFuiIbf/OY327zxxhuHae3x29/+dps33XTTMO05/O53v9vm9773vWF+//vf
- b/MHP/hBmz/84Q+H+aMf/ajNH//4x23+5Cc/GebNN9/c5k9/+tM2f/aznw3z5z//eZu33HJLm7feeusw
- f/GLX7RpPfBXv/pVm7fffnvnTEeOsvc1jJtZ+O/CPxT+pPBrhVcUGrv2rsJjCw8rfGbhroXbFW5W+MDC
- FQuDIAiWSUSgh2EYTiB2i9RlnYM46fPnz2+95S1vaa244orExOJS+i7OLzRWak6hztVmQGuOde9i0p/1
- d/xdn+Gz6me3v6uI/c6R9o83vvGNCztu7qY6YQJKKnI/x43+/Himc7K2zs95Ol/n3V7bLbbYoh2gGSl+
- +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
- fYFBp/4dg36aOFQEg84Z2AbdsqxCyAbdGGOMMblSjkH//vvvS5tttlkLm266aTObbLJJU0Tjxhtv3KD/
- nAL6781stNFGLfTs2bOFDTbYoJn111+/hR49erSw3nrrNdO9e/cW1l133Ra0/mbWWWedOPVrr732lLXW
- WqtBNMKaa65ZCqyxxhrNEAXPqmuvvba04oorNrPCCisEmpZffvnGiIY///nP9YE//elPLSy33HIt/PGP
- f2xh2WWXbWGZZZZpZumll27hD3/4QwtLLbVUC0suuWQLSyyxRAuLL754C4sttlgLiy66aAuLLLJIMwsv
- vHALv//971tYaKGFWlhwwQWniAbRuMACCzSJEvzud79rRq8TPZ3y9eqrrwaDztkVg85ZFoPO2RaDzlmX
- My9nX87AnIVt0C3Lqrps0I0xxhiTK+UYdMtqD7399ttxg84ZlrMsZ1rOtpxxkww6Z2IbdMuyqiobdGOM
- Mcbkig26VW199NFHGHTKEVobdOboB4O+k9hErCaCQf+VsCzLqpps0I0xxhiTKzboVrX1+eefB4NOIzrO
- sMyRv18Egz5AxA36ksIG3bKsqssG3RhjjDG5YoNuVVvffvtt3KAz0i1u0M8QNuiWZRVSNujGGGOMyRUb
- dKvaGjVqVBqDvrPAoP9VYNB/K2zQLcuqqmzQjTHGGJMrNuhWtTV+/PipGfSrRdygbyps0C3LKoxs0I0x
- xhiTKzboVrVVX19vg25ZVk3KBt0YY4wxuWKDblVbjY2NaVPcbdAtyyqUbNCNMcYYkys26Fa1NY0U96Qm
- cTbolmUVRjboxhhjjMkVG3Sr2vrhhx+mZdA548YNeujiboNuWVbVZYNujDHGmFyxQbeqrc8++yxu0DnD
- YtA50waDzlnXY9YsyyqcbNCNMcYYkys26Fa19e677waDztmVMyxnWc60nG2DQefMy9kXg85Z2Abdsqyq
- ywbdGGOMMblig25VW6+88goGfWJ0dn1fcJa9V3C2PU3EDTpn4GDQORtblmVVTTboxhhjjMkVG3Sr2nr2
- 2WeDQf9OYND/LTDoVwoM+qGir9hIcAZeXMwtbNAty6qqbNCNMcYYkyvlGPSxY8eWLrroohYuvvjiZi65
- 5JJA06WXXtrCZZdd1szll1/ewhVXXNHClVde2cw///nPFq666qoWrr766mauueaaFq699tpmrrvuuhau
- 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
- NtmgG5MCG/TqKmmdabBBrww26Nm13377JT7TWscG3bIsy7KyyQbdmBTYoFdXSetMgw16ZbBBz66bbrop
- 8ZnWOjbolmVZlpVNNujGpMAGvbpKWmcabNArgw16dn355ZelddddN/G51jI26JZlWZaVTTboxqTABr26
- SlpnGmzQK4MNenZNnjy51KdPn8TnWsvYoFuWZVlWNtmgG5MCG/TqKmmdabBBrww26Nk1ZcqU0kEHHZT4
- XGsZG3TLsizLyiYbdGNSYINeXSWtMw026JXBBj27mpqaSmeffXbic61lbNAty7IsK5ts0I1JgQ16dZW0
- zjTYoFcGG/S26Y477kh8rrWMDbplWZZlZZMNujEpsEGvrpLWmQYb9Mpgg942vfbaa4nPtZaxQbcsy7Ks
- bLJBNyYFNujVVdI602CDXhls0NumMWPGlLp37574bGsVG3TLsizLyiYbdGNSYINeXSWtMw026JXBBr1t
- og59zz33THy2tYoNumVZlmVlkw26MSmwQa+uktaZBhv0ymCD3nZdf/31ic+2VrFBtyzLsqxsskE3JgU2
- 6NVV0jrTYINeGWzQ267PP/888dnWKjbolmVZlpVNNujGpMAGvbpKWmcabNArgw1621VXV1facsstE59v
- LWKDblmWZVnZZINuTAps0KurpHWmwQa9Mtigt1319fWlAw44IPH51iI26JZlWZaVTTboxqTABr26Slpn
- GmzQK4MNetvV2NhYOuOMMxKfby1ig25ZlmVZ2WSDbkwKOpNB32WXXaJ3KI6S1pkGG/TKYIOej2677bbE
- 51uL2KBblmVZVjbZoBuTgs5k0AcNGhS9Q3GUtM402KBXBhv0fPTqq68mPt9axAbdsizLsrLJBt2YFHQW
- g77hhhuWXnvttegdiqOktabBBr0y2KDno59//jnx+dYiNuiWZVmWlU026MakoIgGna7PDz30UC48/PDD
- zabxyy+/LDU1NUXvUBwlfSdpsEGvDDbo+al///6Jz7jWsEG3LMuyrGyyQTcmBUU06J1JSd9JGmzQK4MN
- en666qqrEp9xrWGDblmWZVnZZINuTAps0KurpO8kDTbolcEGPT99+OGHic+41rBBtyzLsqxsskE3JgU2
- 6NVV0neSBhv0ylBUg87osqlRxFIONGnSpFKvXr0Sn3MtYYNuWZZlWdlkg25MCmzQq6uk7yQNNuiVoagG
- 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
- X9ou+L6llfdWKtIgafshALiDywzZuVLGlDVlTtlTBpVFZVLZVEaVVWVW2VWGlWVlWtlWxpV1ZV7ZVwaW
- hWVi2VhG7jPmJuZKqfvVNBEBrr1Nq0FGF9r0ntZunu3VMJ2pa6Xg+eXTlwYqvdv1c5e2+r1zaTDTLbat
- sHfJXCsPndVrFaL3wn7T0iDoW5e2DDYo+val1YqtwRIA3NVllpQtZUxZU+aUPWVQWVQmlU1lVFlVZpVd
- ZVhZVqaVbWVcWVfmlX1lYFlYJpaNZaTL35RST6emiQhw7W1eDTp6JcyHLm3da6Xgo5Y9Wf+UpbN3bfXr
- gpy2/fXe17YANsBpO+AXLZ3Xa3tgN902CGplonN8DYraOpgu3AGA+9q5UsaUNWVO2VMGlUVlUtlURpVV
- ZVbZ1YS8LCvTyrYyrqz7uKXsKwPLwjLRxFwp9XRrmogA19T/1F5V7z2ue7LeKkJb/D5+aRDTtr93LG0B
- bIDTysNnLU3c2x7YhToNglqZaEDUtsF8/oUGSwBwV5dZsvOlrClzyp4yqCwqk8qmMqqsKrPKrjKsLCvT
- yrYybk/Kyz6TcqXUw9U0EQGuqbH2ZL1VhM7efdjSIOYjl49eujCnFYfO6DXY+eSlgU9bBLtUp4FQqxMN
- ira2EALAfV1mS1lT5pQ9ZVBZVCaVTWVUWVVmlV1lWFn24UvZZqVcKXWupokIcE29ZTVwaRv8nrB3Jm9P
- 2hvkNNjpdtsGPq1GtE2wgVCrE2lgBABP286ZMqfsKYPKojJpT8TLqjKr7NoT8jLNpFwpdbamiQhwTd25
- GtRse+Le7bYNfNI2wTQYAoCHtnNn51CZdDkR35RS6v+upokIcE0ppZRSSimlHrSmiQhwTSmllFJKKaUe
- tKaJCHBNKaWUUkoppR60pokIcO0xdfOM9UPqMy4vrNmfuz+7s3T3cfPztum/vYt+xn7u/exT3fx9Hsr+
- jLd6lv08/Z3pdzrl8nnf7JlvW/9ffreH/r2elrs8481nuPlve+nm59zW9LPuop/xJP/ul7/X9By7/9B6
- hsc9/+7d5t//0s3PuGn6vJufleln38XjPutxddvP339+V9PPuot+xm1+n/3nl7/LQ+jn3/Z59n/b35t+
- rxNu87z7z/az5ubz3tX+7Df73KluPsv0s9/Mfv77unz2N3uem3/vIfUM+7mmeqtnvY2bn/kkbj7n03iu
- p2l6xmezpokIAAAAcNbYBAAAAM4amwAAAMBZYxMAAAA4a2wCAAAAZ41NAAAA4KyxCQAAAJw1NgEAAICz
- xiYAAABw1tgEAAAAzhqbAAAAwFljEwAAADhrbAIAAABnjU0AAADgrLEJAAAAnDU2AQAAgLPGJgAAAHDW
- 2AQAAADOGpsAAADAWWMTAAAAOGtsAgAAAGeNTQAAAOCssQkAAACcNTYBAACAs8YmAAAAcNbYBAAAAM4a
- mwAAAMBZYxMAAAA4a2wCAAAAZ41NAAAA4KyxCQAAAJw1NgEAAICzxiYAAABw1tgEAAAAzhqbAAAAwFlj
- EwAAADhrbAIAAABnjU0AAADgrLEJAAAAnDU2AQAAgLPGJgAAAHDW2AQAAADOGpsAAADAWWMTAAAAOGts
- AgAAAGeNTQAAAOCssQkAAACcNTYBAACAs8YmAAAAcNbYBAAAAM4amwAAAMBZYxMAAAA4a2wCAAAAZ41N
- AAAA4KyxCQAAAJw1NgEAAICzxiYAAABw1tgEAAAAzhqbAAAAwFljEwAAADhrbAIAAABnjU0AAADgrLEJ
- AAAAnDU2AQAAgLPGJgAAAHDW2AQAAADOGpsAAADAWWMTAAAAOGtsAgAAAGeNTQAAAOCssQkAAACcNTYB
- AACAs8YmAAAAcNbYBAAAAM4amwAAAMBZYxMAAAA4a2wCAAAAZ41NAAAA4KyxCQAAAJw1NgEAAICzxiYA
- AABw1tgEAAAAzhqbAAAAwFljEwAAADhrbAIAAABnjU0AAADgrLEJAAAAnDU2AQAAgLPGJgAAAHDW2AQA
- AADOGpsAAADAWWMTAAAAOGtsAgAAAGeNTQAAAOCssQkAAACcNTYBAACAs8YmAAAAcNbYBAAAAM4amwAA
- AMBZYxMAAAA4a2wCAAAAZ41NAAAA4KyxCQAAAJw1NgEAAICzxiYAAABw1tgEAAAAzhqbAAAAwFljEwAA
- ADhrbAIAAABnjU0AAADgrLEJAAAAnDU2AQAAgLPGJgAAAHDW2AQAAADOGpsAAADAWWMTAAAAOGtsAgAA
- AGeNTQAAAOCssQkAAACcNTYBAACAs8YmAAAAcNbYBAAAAM4amwAAAMBZYxMAAAA4a2wCAAAAZ41NAAAA
- 4KyxCQAAAJw1NgEAAICzxiYAAABw1tgEAAAAzhqbAAAAwFljEwAAADhrbAIAAABnjU0AAADgrLEJAAAA
- nDU2AQAAgLPGJgAAAHDW2AQAAABOevQh/w2VkWR8zwQAigAAAABJRU5ErkJggg==
-
-
-
- PCKを送信する
-
-
- テクスチャパック
-
-
- 121, 22
-
-
- 削除
-
-
- 121, 22
-
-
- 書き出す
-
-
- 122, 48
-
-
- PCKセンター
-
-
\ No newline at end of file
diff --git a/PCK-Studio/Forms/Utilities/pckCenter.resx b/PCK-Studio/Forms/Utilities/pckCenter.resx
deleted file mode 100644
index 5d509ade..00000000
--- a/PCK-Studio/Forms/Utilities/pckCenter.resx
+++ /dev/null
@@ -1,618 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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
-
-
-
- 1
-
-
-
- Button
-
-
- Flat
-
-
-
- Microsoft Sans Serif, 12pt
-
-
- 3, 398
-
-
- 15, 0, 0, 0
-
-
- 188, 45
-
-
- 13
-
-
- My Collection
-
-
- radioButtonMine
-
-
- System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tableLayoutPanel1
-
-
- 0
-
-
- Button
-
-
- Flat
-
-
- Microsoft Sans Serif, 12pt
-
-
- 3, 296
-
-
- 15, 0, 0, 0
-
-
- 188, 45
-
-
- 12
-
-
- Dev Picks
-
-
- radioButtonDevPicks
-
-
- System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tableLayoutPanel1
-
-
- 1
-
-
- Button
-
-
- Flat
-
-
- Microsoft Sans Serif, 12pt
-
-
- 3, 245
-
-
- 15, 0, 0, 0
-
-
- 188, 45
-
-
- 11
-
-
- New
-
-
- radioButtonNew
-
-
- System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tableLayoutPanel1
-
-
- 2
-
-
- Button
-
-
- Flat
-
-
- Microsoft Sans Serif, 12pt
-
-
- 3, 194
-
-
- 15, 0, 0, 0
-
-
- 188, 45
-
-
- 10
-
-
- NoblePCKs
-
-
- radioButtonAll
-
-
- System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tableLayoutPanel1
-
-
- 3
-
-
- Button
-
-
- Flat
-
-
- Microsoft Sans Serif, 12pt
-
-
- 3, 347
-
-
- 15, 0, 0, 0
-
-
- 188, 45
-
-
- 9
-
-
- Community
-
-
- radioButtonCommunity
-
-
- System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tableLayoutPanel1
-
-
- 4
-
-
- Fill
-
-
- 3, 3
-
-
- 188, 185
-
-
- Zoom
-
-
- 3
-
-
- pictureBox1
-
-
- System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tableLayoutPanel1
-
-
- 5
-
-
- Flat
-
-
- Segoe UI, 12pt
-
-
- 3, 500
-
-
- 15, 0, 0, 0
-
-
- 188, 45
-
-
- 14
-
-
- Submit PCK
-
-
- MiddleLeft
-
-
- buttonSubmit
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tableLayoutPanel1
-
-
- 6
-
-
- Button
-
-
- Flat
-
-
- Microsoft Sans Serif, 12pt
-
-
- 3, 449
-
-
- 15, 0, 0, 0
-
-
- 188, 45
-
-
- 15
-
-
- Texture Packs
-
-
- radioButtonTex
-
-
- System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tableLayoutPanel1
-
-
- 7
-
-
- Fill
-
-
- 3, 3
-
-
- 8
-
-
- 194, 549
-
-
- 4
-
-
- tableLayoutPanel1
-
-
- System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tableLayoutPanel2
-
-
- 0
-
-
- <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="radioButtonMine" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="radioButtonDevPicks" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="radioButtonNew" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="radioButtonAll" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="radioButtonCommunity" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="pictureBox1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="buttonSubmit" Row="7" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="radioButtonTex" Row="6" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,20" /></TableLayoutSettings>
-
-
- GrowAndShrink
-
-
- 2
-
-
- True
-
-
- Fill
-
-
- 0, 0
-
-
- 604, 549
-
-
- 0
-
-
- pckLayout
-
-
- System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- panel1
-
-
- 0
-
-
- Fill
-
-
- 203, 3
-
-
- 604, 549
-
-
- 5
-
-
- panel1
-
-
- System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- tableLayoutPanel2
-
-
- 1
-
-
- Fill
-
-
- 20, 60
-
-
- 1
-
-
- 810, 555
-
-
- 5
-
-
- tableLayoutPanel2
-
-
- System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 2
-
-
- <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="tableLayoutPanel1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="panel1" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Absolute,200,Absolute,610" /><Rows Styles="Percent,100" /></TableLayoutSettings>
-
-
- 154, 17
-
-
- 108, 22
-
-
- Delete
-
-
- 108, 22
-
-
- Export
-
-
- 109, 48
-
-
- contextMenuStripPCK
-
-
- System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 188, 17
-
-
- True
-
-
- BottomLeft
-
-
- 717, 42
-
-
- 110, 15
-
-
- 6
-
-
- PS4/PSVita PCKs
-
-
- PSVitaPCKCheckbox
-
-
- MetroFramework.Controls.MetroCheckBox, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
-
-
- $this
-
-
- 1
-
-
- True
-
-
- 6, 13
-
-
- 850, 635
-
-
- 850, 588
-
-
- PCK Center
-
-
- deleteToolStripMenuItem
-
-
- 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
-
-
- bindingSource1
-
-
- System.Windows.Forms.BindingSource, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- pckCenter
-
-
- MetroFramework.Forms.MetroForm, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
-
-
\ No newline at end of file
diff --git a/PCK-Studio/Forms/Utilities/pckCenterOpen.Designer.cs b/PCK-Studio/Forms/Utilities/pckCenterOpen.Designer.cs
deleted file mode 100644
index b4953791..00000000
--- a/PCK-Studio/Forms/Utilities/pckCenterOpen.Designer.cs
+++ /dev/null
@@ -1,177 +0,0 @@
-namespace PckStudio.Forms
-{
- partial class pckCenterOpen
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(pckCenterOpen));
- this.buttonDirect = new System.Windows.Forms.Button();
- this.labelName = new System.Windows.Forms.Label();
- this.labelDesc = new System.Windows.Forms.Label();
- this.buttonDelete = new System.Windows.Forms.Button();
- this.buttonExport = new System.Windows.Forms.Button();
- this.buttonInstallPs3 = new System.Windows.Forms.Button();
- this.buttonInstallXbox = new System.Windows.Forms.Button();
- this.buttonInstallWiiU = new System.Windows.Forms.Button();
- this.pictureBoxDisplay = new System.Windows.Forms.PictureBox();
- this.buttonBedrock = new System.Windows.Forms.Button();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBoxDisplay)).BeginInit();
- this.SuspendLayout();
- //
- // buttonDirect
- //
- this.buttonDirect.BackColor = System.Drawing.Color.Purple;
- this.buttonDirect.FlatAppearance.BorderSize = 0;
- resources.ApplyResources(this.buttonDirect, "buttonDirect");
- this.buttonDirect.ForeColor = System.Drawing.Color.White;
- this.buttonDirect.Name = "buttonDirect";
- this.buttonDirect.UseVisualStyleBackColor = false;
- this.buttonDirect.Click += new System.EventHandler(this.buttonDirect_Click);
- //
- // labelName
- //
- resources.ApplyResources(this.labelName, "labelName");
- this.labelName.ForeColor = System.Drawing.Color.White;
- this.labelName.Name = "labelName";
- //
- // labelDesc
- //
- resources.ApplyResources(this.labelDesc, "labelDesc");
- this.labelDesc.ForeColor = System.Drawing.Color.White;
- this.labelDesc.Name = "labelDesc";
- //
- // buttonDelete
- //
- this.buttonDelete.BackColor = System.Drawing.Color.Red;
- this.buttonDelete.FlatAppearance.BorderSize = 0;
- resources.ApplyResources(this.buttonDelete, "buttonDelete");
- this.buttonDelete.ForeColor = System.Drawing.Color.White;
- this.buttonDelete.Name = "buttonDelete";
- this.buttonDelete.UseVisualStyleBackColor = false;
- this.buttonDelete.Click += new System.EventHandler(this.buttonDelete_Click);
- //
- // buttonExport
- //
- this.buttonExport.BackColor = System.Drawing.Color.SlateGray;
- this.buttonExport.FlatAppearance.BorderSize = 0;
- resources.ApplyResources(this.buttonExport, "buttonExport");
- this.buttonExport.ForeColor = System.Drawing.Color.White;
- this.buttonExport.Name = "buttonExport";
- this.buttonExport.UseVisualStyleBackColor = false;
- this.buttonExport.Click += new System.EventHandler(this.buttonExport_Click);
- //
- // buttonInstallPs3
- //
- this.buttonInstallPs3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192)))));
- this.buttonInstallPs3.BackgroundImage = global::PckStudio.Properties.Resources.PS3;
- resources.ApplyResources(this.buttonInstallPs3, "buttonInstallPs3");
- this.buttonInstallPs3.FlatAppearance.BorderSize = 0;
- this.buttonInstallPs3.ForeColor = System.Drawing.Color.White;
- this.buttonInstallPs3.Name = "buttonInstallPs3";
- this.buttonInstallPs3.UseVisualStyleBackColor = false;
- this.buttonInstallPs3.Click += new System.EventHandler(this.buttonInstallPs3_Click);
- //
- // buttonInstallXbox
- //
- this.buttonInstallXbox.BackColor = System.Drawing.Color.Lime;
- this.buttonInstallXbox.BackgroundImage = global::PckStudio.Properties.Resources.Xbox;
- resources.ApplyResources(this.buttonInstallXbox, "buttonInstallXbox");
- this.buttonInstallXbox.FlatAppearance.BorderSize = 0;
- this.buttonInstallXbox.ForeColor = System.Drawing.Color.White;
- this.buttonInstallXbox.Name = "buttonInstallXbox";
- this.buttonInstallXbox.UseVisualStyleBackColor = false;
- this.buttonInstallXbox.Click += new System.EventHandler(this.buttonInstallXbox_Click);
- //
- // buttonInstallWiiU
- //
- this.buttonInstallWiiU.BackColor = System.Drawing.Color.DeepSkyBlue;
- this.buttonInstallWiiU.BackgroundImage = global::PckStudio.Properties.Resources.WiiU;
- resources.ApplyResources(this.buttonInstallWiiU, "buttonInstallWiiU");
- this.buttonInstallWiiU.FlatAppearance.BorderSize = 0;
- this.buttonInstallWiiU.ForeColor = System.Drawing.Color.White;
- this.buttonInstallWiiU.Name = "buttonInstallWiiU";
- this.buttonInstallWiiU.UseVisualStyleBackColor = false;
- this.buttonInstallWiiU.Click += new System.EventHandler(this.buttonInstallWiiU_Click);
- //
- // pictureBoxDisplay
- //
- resources.ApplyResources(this.pictureBoxDisplay, "pictureBoxDisplay");
- this.pictureBoxDisplay.Name = "pictureBoxDisplay";
- this.pictureBoxDisplay.TabStop = false;
- //
- // buttonBedrock
- //
- this.buttonBedrock.BackColor = System.Drawing.Color.Green;
- this.buttonBedrock.FlatAppearance.BorderSize = 0;
- resources.ApplyResources(this.buttonBedrock, "buttonBedrock");
- this.buttonBedrock.ForeColor = System.Drawing.Color.White;
- this.buttonBedrock.Name = "buttonBedrock";
- this.buttonBedrock.UseVisualStyleBackColor = false;
- this.buttonBedrock.Click += new System.EventHandler(this.convertToBedrockToolStripMenuItem_Click);
- //
- // pckCenterOpen
- //
- resources.ApplyResources(this, "$this");
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.BorderStyle = MetroFramework.Forms.MetroFormBorderStyle.FixedSingle;
- this.Controls.Add(this.buttonDirect);
- this.Controls.Add(this.buttonBedrock);
- this.Controls.Add(this.buttonInstallPs3);
- this.Controls.Add(this.buttonInstallXbox);
- this.Controls.Add(this.buttonInstallWiiU);
- this.Controls.Add(this.buttonExport);
- this.Controls.Add(this.buttonDelete);
- this.Controls.Add(this.labelDesc);
- this.Controls.Add(this.labelName);
- this.Controls.Add(this.pictureBoxDisplay);
- this.MaximizeBox = false;
- this.Name = "pckCenterOpen";
- this.Resizable = false;
- this.ShadowType = MetroFramework.Forms.MetroFormShadowType.DropShadow;
- this.Style = MetroFramework.MetroColorStyle.White;
- this.Theme = MetroFramework.MetroThemeStyle.Dark;
- this.Load += new System.EventHandler(this.pckCenterOpen_Load);
- ((System.ComponentModel.ISupportInitialize)(this.pictureBoxDisplay)).EndInit();
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- private System.Windows.Forms.PictureBox pictureBoxDisplay;
- private System.Windows.Forms.Button buttonDirect;
- private System.Windows.Forms.Label labelName;
- private System.Windows.Forms.Label labelDesc;
- private System.Windows.Forms.Button buttonDelete;
- private System.Windows.Forms.Button buttonExport;
- private System.Windows.Forms.Button buttonInstallWiiU;
- private System.Windows.Forms.Button buttonInstallXbox;
- private System.Windows.Forms.Button buttonInstallPs3;
- private System.Windows.Forms.Button buttonBedrock;
- }
-}
\ No newline at end of file
diff --git a/PCK-Studio/Forms/Utilities/pckCenterOpen.cs b/PCK-Studio/Forms/Utilities/pckCenterOpen.cs
deleted file mode 100644
index 4676107e..00000000
--- a/PCK-Studio/Forms/Utilities/pckCenterOpen.cs
+++ /dev/null
@@ -1,1137 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Drawing.Drawing2D;
-using System.Drawing.Imaging;
-using System.IO;
-using System.Linq;
-using System.Net;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using System.Windows.Media.Imaging;
-using System.IO.Packaging;
-using System.IO.Compression;
-
-using OMI.Formats.Pck;
-using OMI.Workers.Pck;
-
-using PckStudio;
-using PckStudio.Extensions;
-
-namespace PckStudio.Forms
-{
- public partial class pckCenterOpen : MetroFramework.Forms.MetroForm
- {
- string name;
- string author;
- string desc;
- string direct;
- string ad;
- int mode = 0;
- string mod;
- MethodInvoker reloader;
- bool IsVita;
- string Pack;
-
- public class Item
- {
- public string Id { get; set; }
- public string Name { get; set; }
- }
-
- public pckCenterOpen(string name, string authorIn, string descIn, string directIn, string adIn, Bitmap display, int mode, string mod, MethodInvoker reloader, bool Vita, string PackName)
- {
- InitializeComponent();
- pictureBoxDisplay.Image = display;
-
- this.reloader = reloader;
- this.mode = mode;
- this.mod = mod;
- this.reloader = reloader;
-
- this.name = name;
- author = authorIn;
- desc = descIn;
- direct = directIn;
- ad = adIn;
- IsVita = Vita;
- Pack = PackName;
- }
-
- private void pckCenterOpen_Load(object sender, EventArgs e)
- {
- if (mode == 0) // Unowned Mode
- {
- buttonDirect.Visible = true;
-
- if (File.Exists(System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/PCK Studio/PCK Center/myPcks/" + direct + ".pck"))
- {
- buttonDirect.Enabled = false;
- buttonDirect.Text = "Already in Collection";
- buttonDirect.Font = new Font("Segoe UI", 8, FontStyle.Bold);
- buttonDirect.ForeColor = Color.White;
- }
- buttonBedrock.Visible = buttonDelete.Visible = buttonExport.Visible = false;
- buttonInstallPs3.Visible = buttonInstallXbox.Visible = buttonInstallWiiU.Visible = false;
- }
- else if (mode == 1) // My Collection Mode
- {
- buttonBedrock.Visible = true;
- buttonInstallPs3.Visible = true;
- buttonInstallXbox.Visible = true;
- buttonInstallWiiU.Visible = true;
- buttonDelete.Visible = true;
- buttonExport.Visible = true;
- buttonDirect.Visible = false;
- }
- if (IsVita)
- {
- buttonBedrock.Visible = false;
- buttonDelete.Visible = false;
- buttonExport.Visible = false;
- buttonInstallPs3.Visible = false;
- buttonInstallXbox.Visible = false;
- buttonInstallWiiU.Visible = false;
- }
-
- labelName.Text = name;
- labelDesc.Text = desc;
- if(IsVita)
- labelDesc.Text += "\nPS4 / PSVita PCK";
- if(IsVita)
- labelDesc.Text += "\nPack: " + Pack;
- labelDesc.Text += Environment.NewLine + Environment.NewLine + "Creator: " + author;
- }
-
- private void buttonDirect_Click(object sender, EventArgs e)
- {
- System.Diagnostics.Process.Start(direct);
- }
- //converts and ports all skins in pck to mc bedrock format
- private void convertToBedrockToolStripMenuItem_Click(object sender, EventArgs e)
- {
- try
- {
- string packName = mod;//Determines skin packs name off of pck file name
-
- //Lets user choose were to put generated pack
- SaveFileDialog convert = new SaveFileDialog();
- convert.Filter = "PCK (Minecarft Bedrock DLC)|*.mcpack";
- convert.FileName = packName;
-
- if (convert.ShowDialog() == DialogResult.OK)
- {
- //creates directory for conversion
- string root = Path.GetDirectoryName(convert.FileName) + "\\" + packName;
- string rootFinal = Path.GetDirectoryName(convert.FileName) + "\\";
-
- //creates pack uuid off of the last skin id detected
- string uuid = "99999999";//default
-
- //creates list of skin display names
- List- skinDisplayNames = new List
- ();
-
- //MessageBox.Show(root);//debug thingy to make sure filepath is correct
-
- //add all skins to a list
- List skinsList = new List();
- List capesList = new List();
- var reader = new PckFileReader();
- PckFile currentPCK = reader.FromFile(Program.AppData + "/PCK-Center/myPcks/" + mod + ".pck");
- foreach (PckFileData skin in currentPCK.GetFiles())
- {
- if (skin.Filename.Count() == 19)
- {
- if (skin.Filename.Remove(7, skin.Filename.Count() - 7) == "dlcskin")
- {
- skinsList.Add(skin);
- uuid = skin.Filename.Remove(12, 7);
- uuid = uuid.Remove(0, 7);
- uuid = "abcdefa" + uuid;
- }
- if (skin.Filename.Remove(7, skin.Filename.Count() - 7) == "dlccape")
- {
- capesList.Add(skin);
- }
- }
- }
-
- if (skinsList.Count() == 0)
- {
- MessageBox.Show("No skins were found");
- return;
- }
-
- Directory.CreateDirectory(root);//Creates directory for skin pack
- Directory.CreateDirectory(root + "/texts");//create directory for skin pack text files
-
- //create skins json file
- using (StreamWriter writeSkins = new StreamWriter(root + "/skins.json"))
- {
- writeSkins.WriteLine("{");
- writeSkins.WriteLine(" \"skins\": [");
-
- int skinAmount = 0;
- foreach (PckFileData newSkin in skinsList)
- {
- skinAmount += 1;
- string skinName = "skinName";
- string capePath = "";
- bool hasCape = false;
-
- foreach (var entry in newSkin.GetProperties())
- {
- if (entry.Key == "DISPLAYNAME")
- {
- skinName = entry.Key;
- skinDisplayNames.Add(new Item() { Id = newSkin.Filename.Remove(15, 4), Name = entry.Value });
- }
- if (entry.Key == "CAPEPATH")
- {
- hasCape = true;
- capePath = entry.Value;
- }
- }
-
- writeSkins.WriteLine(" {");
- writeSkins.WriteLine(" \"localization_name\": " + "\"" + newSkin.Filename.Remove(15, 4) + "\",");
-
- MemoryStream png = new MemoryStream(newSkin.Data); //Gets image data from minefile data
- Image skinPicture = Image.FromStream(png); //Constructs image data into image
- if (skinPicture.Height == skinPicture.Width)
- {
- writeSkins.WriteLine(" \"geometry\": \"geometry." + packName + "." + newSkin.Filename.Remove(15, 4) + "\",");
- }
- writeSkins.WriteLine(" \"texture\": " + "\"" + newSkin.Filename + "\",");
- if (hasCape == true)
- {
- writeSkins.WriteLine(" \"cape\":" + "\"" + capePath + "\",");
- }
- writeSkins.WriteLine(" \"type\": \"free\"");
- if (skinAmount != skinsList.Count)
- {
- writeSkins.WriteLine(" },");
- }
- else
- {
- writeSkins.WriteLine(" }");
- }
- }
-
- writeSkins.WriteLine(" ],");
- writeSkins.WriteLine(" \"serialize_name\": \"" + packName + "\",");
- writeSkins.WriteLine(" \"localization_name\": \"" + packName + "\"");
- writeSkins.WriteLine("}");
- }
-
- //Create geometry file
- using (StreamWriter writeSkins = new StreamWriter(root + "/geometry.json"))
- {
- writeSkins.WriteLine("{");
- int newSkinCount = 0;
- foreach (PckFileData newSkin in skinsList)
- {
-
- newSkinCount += 1;
- string skinType = "steve";
- MemoryStream png = new MemoryStream(newSkin.Data); //Gets image data from minefile data
- Image skinPicture = Image.FromStream(png); //Constructs image data into image
-
- if (skinPicture.Height == skinPicture.Width / 2)
- {
- skinType = "64x32";
- continue;
- }
-
- double offsetHead = 0;
- double offsetBody = 0;
- double offsetArms = 0;
- double offsetLegs = 0;
-
- //creates list of skin model data
- List
- modelDataHead = new List
- ();
- List
- modelDataBody = new List
- ();
- List
- modelDataLeftArm = new List
- ();
- List
- modelDataRightArm = new List
- ();
- List
- modelDataLeftLeg = new List
- ();
- List
- modelDataRightLeg = new List
- ();
- List
- modelData = new List
- ();
-
-
- if (skinPicture.Height == skinPicture.Width)
- {
- //determines skin type based on image dimensions, existence of BOX tags, and the ANIM value
- foreach (var entry in newSkin.GetProperties())
- {
- if (entry.Key == "BOX")
- {
- string mClass = "";
- string mData = "";
- foreach (char dCheck in entry.Key)
- {
- if (dCheck.ToString() != " ")
- {
- mClass += dCheck.ToString();
- }
- else
- {
- mData = entry.Value.Remove(0, mClass.Count() + 1);
- break;
- }
- }
-
- if (mClass == "HEAD")
- {
- mClass = "head";
- modelDataHead.Add(new Item() { Id = mClass, Name = mData });
- }
- else if (mClass == "BODY")
- {
- mClass = "body";
- modelDataBody.Add(new Item() { Id = mClass, Name = mData });
- }
- else if (mClass == "ARM0")
- {
- mClass = "rightArm";
- modelDataRightArm.Add(new Item() { Id = mClass, Name = mData });
- }
- else if (mClass == "ARM1")
- {
- mClass = "leftArm";
- modelDataLeftArm.Add(new Item() { Id = mClass, Name = mData });
- }
- else if (mClass == "LEG0")
- {
- mClass = "leftLeg";
- modelDataLeftLeg.Add(new Item() { Id = mClass, Name = mData });
- }
- else if (mClass == "LEG1")
- {
- mClass = "rightLeg";
- modelDataRightLeg.Add(new Item() { Id = mClass, Name = mData });
- }
- }
-
- if (entry.Key == "OFFSET")
- {
- string oClass = "";
- string oData = "";
- foreach (char oCheck in entry.Value)
- {
- oData = entry.Value;
- if (oCheck.ToString() != " ")
- {
- oClass += oCheck.ToString();
- }
- else
- {
- break;
- }
-
- if (oClass == "HEAD")
- {
- offsetHead += Double.Parse(oData.Remove(0, 7)) * -1;
- }
- else if (oClass == "BODY")
- {
- offsetBody += Double.Parse(oData.Remove(0, 7)) * -1;
- }
- else if (oClass == "ARM0")
- {
- offsetArms += Double.Parse(oData.Remove(0, 7)) * -1;
- }
- else if (oClass == "LEG0")
- {
- offsetLegs += Double.Parse(oData.Remove(0, 7)) * -1;
- }
- }
- }
-
- if (entry.Key == "ANIM")
- {
- if (entry.Value == "0x40000")
- {
-
- }
- else if (entry.Value == "0x80000")
- {
- skinType = "alex";
- }
- }
- }
-
- if (modelDataHead.Count + modelDataBody.Count + modelDataLeftArm.Count + modelDataRightArm.Count + modelDataLeftLeg.Count + modelDataRightLeg.Count > 0)
- {
- skinType = "custom";
- }
- }
-
- writeSkins.WriteLine(" \"" + "geometry." + packName + "." + newSkin.Filename.Remove(15, 4) + "\": {");
-
- //makes skin model depending on what skin type the skin is
- if (skinType == "custom")
- {
- writeSkins.WriteLine(" \"bones\": [");
-
- //Head Data
- writeSkins.WriteLine(" {");
- writeSkins.WriteLine(" \"pivot\": [ 0, 24, 0 ],");
- writeSkins.WriteLine(" \"rotation\": [ 0, 0, 0 ],");
- writeSkins.WriteLine(" \"cubes\": [ ");
- //Creates bones for each head box
- int modelAmount = 0;
- foreach (Item model in modelDataHead)
- {
- modelAmount += 1;
-
- string xo = "";
- string yo = "";
- string zo = "";
- string xs = "";
- string ys = "";
- string zs = "";
- string xv = "";
- string yv = "";
-
- int spaceCheck = 0;
-
- foreach (char value in model.Name.ToString())
- {
- //0X1Y2Z3X4Y5Z6X7Y
- if (value.ToString() != " " && spaceCheck == 0)
- {
- xo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 1)
- {
- yo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 2)
- {
- zo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 3)
- {
- xs += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 4)
- {
- ys += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 5)
- {
- zs += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 6)
- {
- xv += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 7)
- {
- yv += value.ToString();
- }
- else if (value.ToString() == " ")
- {
- spaceCheck += 1;
- }
- }
-
- writeSkins.WriteLine(" {");
- try
- {
- writeSkins.WriteLine(" \"origin\": [ " + (Double.Parse(xo)) + ", " + ((Double.Parse(yo) + 0) * -1 + offsetHead + 24 - Double.Parse(ys)) + ", " + (Double.Parse(zo)) + " ],");
- writeSkins.WriteLine(" \"size\": [ " + Double.Parse(xs) + ", " + (Double.Parse(ys)) + ", " + Double.Parse(zs) + " ],");
- writeSkins.WriteLine(" \"uv\": [ " + Double.Parse(xv) + ", " + Double.Parse(yv) + " ],");
- writeSkins.WriteLine(" \"inflate\": 0,");
- writeSkins.WriteLine(" \"mirror\": false");
- }
- catch (Exception)
- {
- MessageBox.Show("A HEAD BOX tag in " + newSkin.Filename + " has an invalid value!");
- }
- if (modelAmount != modelDataHead.Count)
- {
- writeSkins.WriteLine(" },");
- }
- else
- {
- writeSkins.WriteLine(" }");
- }
- }
- writeSkins.WriteLine(" ],");
- writeSkins.WriteLine(" \"META_BoneType\": \"" + "clothing" + "\",");
- writeSkins.WriteLine(" \"name\": \"" + "head" + "\",");
- writeSkins.WriteLine(" \"parent\":" + " null");
- writeSkins.WriteLine(" },");
-
-
- //Body Data
- writeSkins.WriteLine(" {");
- writeSkins.WriteLine(" \"pivot\": [ 0, 12, 0 ],");
- writeSkins.WriteLine(" \"rotation\": [ 0, 0, 0 ],");
- writeSkins.WriteLine(" \"cubes\": [ ");
- //Creates bones for each body box
- modelAmount = 0;
- foreach (Item model in modelDataBody)
- {
- modelAmount += 1;
-
- string xo = "";
- string yo = "";
- string zo = "";
- string xs = "";
- string ys = "";
- string zs = "";
- string xv = "";
- string yv = "";
-
- int spaceCheck = 0;
-
- foreach (char value in model.Name.ToString())
- {
- //0X1Y2Z3X4Y5Z6X7Y
- if (value.ToString() != " " && spaceCheck == 0)
- {
- xo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 1)
- {
- yo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 2)
- {
- zo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 3)
- {
- xs += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 4)
- {
- ys += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 5)
- {
- zs += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 6)
- {
- xv += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 7)
- {
- yv += value.ToString();
- }
- else if (value.ToString() == " ")
- {
- spaceCheck += 1;
- }
- }
- writeSkins.WriteLine(" {");
- try
- {
- writeSkins.WriteLine(" \"origin\": [ " + (Double.Parse(xo)) + ", " + ((Double.Parse(yo) + 0) * -1 + offsetBody + 24 - Double.Parse(ys)) + ", " + (Double.Parse(zo)) + " ],");
- writeSkins.WriteLine(" \"size\": [ " + Double.Parse(xs) + ", " + Double.Parse(ys) + ", " + Double.Parse(zs) + " ],");
- writeSkins.WriteLine(" \"uv\": [ " + Double.Parse(xv) + ", " + Double.Parse(yv) + " ],");
- writeSkins.WriteLine(" \"inflate\": 0,");
- writeSkins.WriteLine(" \"mirror\": false");
- }
- catch (Exception)
- {
- MessageBox.Show("A BODY BOX tag in " + newSkin.Filename + " has an invalid value!");
- }
- if (modelAmount != modelDataBody.Count)
- {
- writeSkins.WriteLine(" },");
- }
- else
- {
- writeSkins.WriteLine(" }");
- }
- }
- writeSkins.WriteLine(" ],");
- writeSkins.WriteLine(" \"META_BoneType\": \"" + "base" + "\",");
- writeSkins.WriteLine(" \"name\": \"" + "body" + "\",");
- writeSkins.WriteLine(" \"parent\":" + " null");
- writeSkins.WriteLine(" },");
-
-
- //LeftArm Data
- writeSkins.WriteLine(" {");
- writeSkins.WriteLine(" \"pivot\": [ 5, 22, 0 ],");
- writeSkins.WriteLine(" \"rotation\": [ 0, 0, 0 ],");
- writeSkins.WriteLine(" \"cubes\": [ ");
- //Creates bones for each arm1 box
- modelAmount = 0;
- foreach (Item model in modelDataLeftArm)
- {
- modelAmount += 1;
-
- string xo = "";
- string yo = "";
- string zo = "";
- string xs = "";
- string ys = "";
- string zs = "";
- string xv = "";
- string yv = "";
-
- int spaceCheck = 0;
-
- foreach (char value in model.Name.ToString())
- {
- //0X1Y2Z3X4Y5Z6X7Y
- if (value.ToString() != " " && spaceCheck == 0)
- {
- xo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 1)
- {
- yo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 2)
- {
- zo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 3)
- {
- xs += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 4)
- {
- ys += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 5)
- {
- zs += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 6)
- {
- xv += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 7)
- {
- yv += value.ToString();
- }
- else if (value.ToString() == " ")
- {
- spaceCheck += 1;
- }
- }
- writeSkins.WriteLine(" {");
- try
- {
- writeSkins.WriteLine(" \"origin\": [ " + (Double.Parse(xo) + 5) + ", " + ((Double.Parse(yo)) * -1 + offsetArms + 22 - Double.Parse(ys)) + ", " + (Double.Parse(zo)) + " ],");
- writeSkins.WriteLine(" \"size\": [ " + Double.Parse(xs) + ", " + Double.Parse(ys) + ", " + Double.Parse(zs) + " ],");
- writeSkins.WriteLine(" \"uv\": [ " + Double.Parse(xv) + ", " + Double.Parse(yv) + " ],");
- writeSkins.WriteLine(" \"inflate\": 0,");
- writeSkins.WriteLine(" \"mirror\": false");
- }
- catch (Exception)
- {
- MessageBox.Show("A ARM0 BOX tag in " + newSkin.Filename + " has an invalid value!");
- }
- if (modelAmount != modelDataLeftArm.Count)
- {
- writeSkins.WriteLine(" },");
- }
- else
- {
- writeSkins.WriteLine(" }");
- }
- }
- writeSkins.WriteLine(" ],");
- writeSkins.WriteLine(" \"META_BoneType\": \"" + "base" + "\",");
- writeSkins.WriteLine(" \"name\": \"" + "leftArm" + "\",");
- writeSkins.WriteLine(" \"parent\":" + " null");
- writeSkins.WriteLine(" },");
-
- //RightArm Data
- writeSkins.WriteLine(" {");
- writeSkins.WriteLine(" \"pivot\": [ -5, 22, 0 ],");
- writeSkins.WriteLine(" \"rotation\": [ 0, 0, 0 ],");
- writeSkins.WriteLine(" \"cubes\": [ ");
- //Creates bones for each arm0 box
- modelAmount = 0;
- foreach (Item model in modelDataRightArm)
- {
- modelAmount += 1;
-
- string xo = "";
- string yo = "";
- string zo = "";
- string xs = "";
- string ys = "";
- string zs = "";
- string xv = "";
- string yv = "";
-
- int spaceCheck = 0;
-
- foreach (char value in model.Name.ToString())
- {
- //0X1Y2Z3X4Y5Z6X7Y
- if (value.ToString() != " " && spaceCheck == 0)
- {
- xo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 1)
- {
- yo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 2)
- {
- zo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 3)
- {
- xs += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 4)
- {
- ys += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 5)
- {
- zs += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 6)
- {
- xv += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 7)
- {
- yv += value.ToString();
- }
- else if (value.ToString() == " ")
- {
- spaceCheck += 1;
- }
- }
- writeSkins.WriteLine(" {");
- try
- {
- writeSkins.WriteLine(" \"origin\": [ " + (Double.Parse(xo) - 5) + ", " + ((Double.Parse(yo)) * -1 + offsetArms + 22 - Double.Parse(ys)) + ", " + (Double.Parse(zo)) + " ],");
- writeSkins.WriteLine(" \"size\": [ " + Double.Parse(xs) + ", " + Double.Parse(ys) + ", " + Double.Parse(zs) + " ],");
- writeSkins.WriteLine(" \"uv\": [ " + Double.Parse(xv) + ", " + Double.Parse(yv) + " ],");
- writeSkins.WriteLine(" \"inflate\": 0,");
- writeSkins.WriteLine(" \"mirror\": false");
- }
- catch (Exception)
- {
- MessageBox.Show("A ARM1 BOX tag in " + newSkin.Filename + " has an invalid value!");
- }
- if (modelAmount != modelDataRightArm.Count)
- {
- writeSkins.WriteLine(" },");
- }
- else
- {
- writeSkins.WriteLine(" }");
- }
- }
- writeSkins.WriteLine(" ],");
- writeSkins.WriteLine(" \"META_BoneType\": \"" + "base" + "\",");
- writeSkins.WriteLine(" \"name\": \"" + "rightArm" + "\",");
- writeSkins.WriteLine(" \"parent\":" + " null");
- writeSkins.WriteLine(" },");
-
- //LeftLeg Data
- writeSkins.WriteLine(" {");
- writeSkins.WriteLine(" \"pivot\": [ 1.9, 12, 0 ],");
- writeSkins.WriteLine(" \"rotation\": [ 0, 0, 0 ],");
- writeSkins.WriteLine(" \"cubes\": [ ");
- //Creates bones for each leg1 box
- modelAmount = 0;
- foreach (Item model in modelDataLeftLeg)
- {
- modelAmount += 1;
-
- string xo = "";
- string yo = "";
- string zo = "";
- string xs = "";
- string ys = "";
- string zs = "";
- string xv = "";
- string yv = "";
-
- int spaceCheck = 0;
-
- foreach (char value in model.Name.ToString())
- {
- //0X1Y2Z3X4Y5Z6X7Y
- if (value.ToString() != " " && spaceCheck == 0)
- {
- xo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 1)
- {
- yo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 2)
- {
- zo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 3)
- {
- xs += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 4)
- {
- ys += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 5)
- {
- zs += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 6)
- {
- xv += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 7)
- {
- yv += value.ToString();
- }
- else if (value.ToString() == " ")
- {
- spaceCheck += 1;
- }
- }
- writeSkins.WriteLine(" {");
- try
- {
- writeSkins.WriteLine(" \"origin\": [ " + (Double.Parse(xo) - 1.9) + ", " + ((Double.Parse(yo)) * -1 + offsetLegs + 12 - Double.Parse(ys)) + ", " + (Double.Parse(zo)) + " ],");
- writeSkins.WriteLine(" \"size\": [ " + Double.Parse(xs) + ", " + Double.Parse(ys) + ", " + Double.Parse(zs) + " ],");
- writeSkins.WriteLine(" \"uv\": [ " + Double.Parse(xv) + ", " + Double.Parse(yv) + " ],");
- writeSkins.WriteLine(" \"inflate\": 0,");
- writeSkins.WriteLine(" \"mirror\": false");
- }
- catch (Exception)
- {
- MessageBox.Show("A LEG1 BOX tag in " + newSkin.Filename + " has an invalid value!");
- }
- if (modelAmount != modelDataLeftLeg.Count)
- {
- writeSkins.WriteLine(" },");
- }
- else
- {
- writeSkins.WriteLine(" }");
- }
- }
- writeSkins.WriteLine(" ],");
- writeSkins.WriteLine(" \"META_BoneType\": \"" + "base" + "\",");
- writeSkins.WriteLine(" \"name\": \"" + "leftLeg" + "\",");
- writeSkins.WriteLine(" \"parent\":" + " null");
- writeSkins.WriteLine(" },");
-
- //RightLeg Data
- writeSkins.WriteLine(" {");
- writeSkins.WriteLine(" \"pivot\": [ -1.9, 12, 0 ],");
- writeSkins.WriteLine(" \"rotation\": [ 0, 0, 0 ],");
- writeSkins.WriteLine(" \"cubes\": [ ");
- //Creates bones for each leg0 box
- modelAmount = 0;
- foreach (Item model in modelDataRightLeg)
- {
- modelAmount += 1;
-
- string xo = "";
- string yo = "";
- string zo = "";
- string xs = "";
- string ys = "";
- string zs = "";
- string xv = "";
- string yv = "";
-
- int spaceCheck = 0;
-
- foreach (char value in model.Name.ToString())
- {
- //0X1Y2Z3X4Y5Z6X7Y
- if (value.ToString() != " " && spaceCheck == 0)
- {
- xo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 1)
- {
- yo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 2)
- {
- zo += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 3)
- {
- xs += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 4)
- {
- ys += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 5)
- {
- zs += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 6)
- {
- xv += value.ToString();
- }
- else if (value.ToString() != " " && spaceCheck == 7)
- {
- yv += value.ToString();
- }
- else if (value.ToString() == " ")
- {
- spaceCheck += 1;
- }
- }
- writeSkins.WriteLine(" {");
- try
- {
- writeSkins.WriteLine(" \"origin\": [ " + (Double.Parse(xo) + 1.9) + ", " + ((Double.Parse(yo)) * -1 + offsetLegs + 12 - Double.Parse(ys)) + ", " + (Double.Parse(zo)) + " ],");
- writeSkins.WriteLine(" \"size\": [ " + Double.Parse(xs) + ", " + Double.Parse(ys) + ", " + Double.Parse(zs) + " ],");
- writeSkins.WriteLine(" \"uv\": [ " + Double.Parse(xv) + ", " + Double.Parse(yv) + " ],");
- writeSkins.WriteLine(" \"inflate\": 0,");
- writeSkins.WriteLine(" \"mirror\": false");
- }
- catch (Exception)
- {
- MessageBox.Show("A LEG0 BOX tag in " + newSkin.Filename + " has an invalid value!");
- }
- if (modelAmount != modelDataRightLeg.Count)
- {
- writeSkins.WriteLine(" },");
- }
- else
- {
- writeSkins.WriteLine(" }");
- }
- }
- writeSkins.WriteLine(" ],");
- writeSkins.WriteLine(" \"META_BoneType\": \"" + "base" + "\",");
- writeSkins.WriteLine(" \"name\": \"" + "rightLeg" + "\",");
- writeSkins.WriteLine(" \"parent\":" + " null");
- writeSkins.WriteLine(" }");
- writeSkins.WriteLine(" ],");
- }
- else if (skinType == "64x32")
- {
- writeSkins.Write(" \"bones\": [ ],");
- }
- else if (skinType == "steve")
- {
- writeSkins.Write(" \"bones\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -4, 12, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 8, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 16, 16 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"body\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"bodyArmor\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"belt\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -4, 24, -4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 8, 8, 8 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"head\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -4, 24, -4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 8, 8, 8 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 32, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.5, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"hat\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"head\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"helmet\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"head\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 5, 22, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 4, 12, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 32, 48 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftArm\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -5, 22, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -8, 12, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 40, 16 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightArm\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 5, 22, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftArmArmor\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -5, 22, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightArmArmor\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 5, 22, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 4, 12, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 48, 48 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftSleeve\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -5, 22, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -8, 12, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 40, 32 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightSleeve\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -0.1, 0, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 16, 48 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftLeg\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -3.9, 0, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 16 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightLeg\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftLegging\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightLegging\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -0.1, 0, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 48 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftPants\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -3.9, 0, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 32 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightPants\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -4, 12, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 8, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 16, 32 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"jacket\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"helmetArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"head\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"bodyArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -5, 22, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightArmArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 5, 22, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftArmArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"waist\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightLegArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftLegArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightBootArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftBootArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -6, 15, 1 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"item\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightItem\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 6, 15, 1 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"item\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftItem\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftArm\" " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ],");
- }
- else if (skinType == "alex")
- {
- writeSkins.Write(" \"bones\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -4, 12, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 8, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 16, 16 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"body\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"bodyArmor\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"belt\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -4, 24, -4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 8, 8, 8 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"head\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -4, 24, -4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 8, 8, 8 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 32, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.5, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"hat\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"head\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"helmet\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"head\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 5, 21.5, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 4, 11.5, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 3, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 32, 48 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftArm\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -5, 21.5, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -7, 11.5, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 3, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 40, 16 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightArm\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 5, 21.5, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftArmArmor\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -5, 21.5, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightArmArmor\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 5, 21.5, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 4, 11.5, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 3, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 48, 48 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftSleeve\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -5, 21.5, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -7, 11.5, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 3, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 40, 32 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightSleeve\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -0.1, 0, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 16, 48 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftLeg\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -3.9, 0, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 16 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"base\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightLeg\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": null " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftLegArmor\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightLegging\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -0.1, 0, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 48 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftPants\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -3.9, 0, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 4, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 0, 32 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightPants\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [ " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"origin\": [ -4, 12, -2 ], " + Environment.NewLine + " " + Environment.NewLine + " \"size\": [ 8, 12, 4 ], " + Environment.NewLine + " " + Environment.NewLine + " \"uv\": [ 16, 32 ], " + Environment.NewLine + " " + Environment.NewLine + " \"inflate\": 0.25, " + Environment.NewLine + " " + Environment.NewLine + " \"mirror\": false " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"clothing\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"jacket\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"helmetArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"head\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 24, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"bodyArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -5, 21.5, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightArmArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 5, 21.5, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftArmArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 0, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"waist\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"body\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightLegArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftLegArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightBootArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 1.9, 12, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"armor_offset\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftBootArmorOffset\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftLeg\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ -6, 14.5, 1 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"item\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"rightItem\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"rightArm\" " + Environment.NewLine + " " + Environment.NewLine + " }, " + Environment.NewLine + " " + Environment.NewLine + " { " + Environment.NewLine + " " + Environment.NewLine + " \"pivot\": [ 6, 14.5, 1 ], " + Environment.NewLine + " " + Environment.NewLine + " \"rotation\": [ 0, 0, 0 ], " + Environment.NewLine + " " + Environment.NewLine + " \"cubes\": [], " + Environment.NewLine + " " + Environment.NewLine + " \"META_BoneType\": \"item\", " + Environment.NewLine + " " + Environment.NewLine + " \"name\": \"leftItem\", " + Environment.NewLine + " " + Environment.NewLine + " \"parent\": \"leftArm\" " + Environment.NewLine + " " + Environment.NewLine + " } " + Environment.NewLine + " " + Environment.NewLine + " ],");
- }
-
-
- writeSkins.WriteLine(" \"texturewidth\": 64 , ");
- writeSkins.WriteLine(" \"textureheight\": 64,");
- writeSkins.WriteLine(" \"META_ModelVersion\": \"1.0.6\",");
- writeSkins.WriteLine(" \"rigtype\": \"normal\",");
- writeSkins.WriteLine(" \"animationArmsDown\": false,");
- writeSkins.WriteLine(" \"animationArmsOutFront\": false,");
- writeSkins.WriteLine(" \"animationStatueOfLibertyArms\": false,");
- writeSkins.WriteLine(" \"animationSingleArmAnimation\": false,");
- writeSkins.WriteLine(" \"animationStationaryLegs\": false,");
- writeSkins.WriteLine(" \"animationSingleLegAnimation\": false,");
- writeSkins.WriteLine(" \"animationNoHeadBob\": false,");
- writeSkins.WriteLine(" \"animationDontShowArmor\": false,");
- writeSkins.WriteLine(" \"animationUpsideDown\": false,");
- writeSkins.WriteLine(" \"animationInvertedCrouch\": false");
- if (newSkinCount != skinsList.Count)
- {
- writeSkins.WriteLine(" },");
- }
- else
- {
- writeSkins.WriteLine(" }");
- }
- }
- }
- Random rnd = new Random();
- int month = rnd.Next(1, 13); // creates a number between 1 and 12
- int dice = rnd.Next(1, 7); // creates a number between 1 and 6
- int card = rnd.Next(52);
-
- string randomPlus = month.ToString() + dice.ToString() + card.ToString();
- if (randomPlus.Count() > 12)
- {
- randomPlus.Remove(0, randomPlus.Count() - 12);
- }
- else if (randomPlus.Count() < 12)
- {
- int ii = 12 - randomPlus.Count();
- for (int i = 0; i < ii; i++)
- {
- randomPlus += 0;
- }
- }
- else if (randomPlus.Count() == 12)
- {
- }
-
- //Create Manifest file
- using (StreamWriter writeSkins = new StreamWriter(root + "/manifest.json"))
- {
- writeSkins.WriteLine("{");
- writeSkins.WriteLine(" \"header\": {");
- writeSkins.WriteLine(" \"version\": [");
- writeSkins.WriteLine(" 1,");
- writeSkins.WriteLine(" 0,");
- writeSkins.WriteLine(" 0");
- writeSkins.WriteLine(" ],");
- writeSkins.WriteLine(" \"description\": \"Template by Ultmate_Mario, Conversion by Nobledez\",");
- writeSkins.WriteLine(" \"name\": \"" + packName + "\",");
- writeSkins.WriteLine(" \"uuid\": \"" + uuid.Remove(0, 4) + "-" + uuid.Remove(0, 8) + "-" + uuid.Remove(1, 8) + "-" + uuid.Remove(2, 8) + "-" + randomPlus + "\""); //8-4-4-4-12
- writeSkins.WriteLine(" },");
- writeSkins.WriteLine(" \"modules\": [");
- writeSkins.WriteLine(" {");
- writeSkins.WriteLine(" \"version\": [");
- writeSkins.WriteLine(" 1,");
- writeSkins.WriteLine(" 0,");
- writeSkins.WriteLine(" 0");
- writeSkins.WriteLine(" ],");
- writeSkins.WriteLine(" \"type\": \"skin_pack\",");
- writeSkins.WriteLine(" \"uuid\": \"8dfd1d65-b3ca-4726-b9e0-9b46a40b72a4\"");
- writeSkins.WriteLine(" }");
- writeSkins.WriteLine(" ],");
- writeSkins.WriteLine(" \"format_version\": 1");
- writeSkins.WriteLine("}");
- }
-
- //create lang file
- using (StreamWriter writeSkins = new StreamWriter(root + "/texts/en_US.lang"))
- {
- writeSkins.WriteLine("skinpack." + packName + "=" + Path.GetFileNameWithoutExtension(convert.FileName));
- foreach (Item displayName in skinDisplayNames)
- {
- writeSkins.WriteLine("skin." + packName + "." + displayName.Id + "=" + displayName.Name);
- }
- }
-
- //adds skin textures
- foreach (PckFileData skinTexture in skinsList)
- {
- var ms = new MemoryStream(skinTexture.Data);
- Bitmap saveSkin = new Bitmap(Image.FromStream(ms));
- var config = new GraphicsConfig()
- {
- CompositingMode = CompositingMode.SourceCopy,
- CompositingQuality = CompositingQuality.HighQuality,
- InterpolationMode = InterpolationMode.NearestNeighbor,
- SmoothingMode = SmoothingMode.HighQuality,
- PixelOffsetMode = PixelOffsetMode.HighQuality,
- };
-
- if (saveSkin.Width == saveSkin.Height)
- {
- saveSkin.Resize(64, 64, config);
- }
- else if (saveSkin.Height == saveSkin.Width / 2)
- {
- saveSkin.Resize(64, 32, config);
- }
- else
- {
- saveSkin.Resize(64, 64, config);
- }
- saveSkin.Save(root + "/" + skinTexture.Filename, ImageFormat.Png);
- }
-
- //adds cape textures
- foreach (PckFileData capeTexture in capesList)
- {
- File.WriteAllBytes(root + "/" + capeTexture.Filename, capeTexture.Data);
- }
-
- string startPath = root;
- string zipPath = rootFinal + "content.zipe";
-
- try
- {
- System.IO.Compression.ZipFile.CreateFromDirectory(startPath, zipPath);//Creates contents zipe
- }
- catch (Exception)
- {
- File.Delete(zipPath);
- ZipFile.CreateFromDirectory(startPath, zipPath);//Creates contents zipe
- }
-
- rootFinal = root + "temp/";
- Directory.CreateDirectory(rootFinal);
- File.Move(zipPath, rootFinal + "content.zipe");
- File.Copy(root + "/manifest.json", rootFinal + "/manifest.json");
- ZipFile.CreateFromDirectory(rootFinal, convert.FileName);//Creates mcpack
- Directory.Delete(root, true);
- Directory.Delete(rootFinal, true);
-
- MessageBox.Show("Conversion Complete");
- }
- }
- catch (Exception convertEr)
- {
- MessageBox.Show(convertEr.ToString());
- }
- }
-
- private void buttonDelete_Click(object sender, EventArgs e)
- {
- try
- {
- File.Delete(Program.AppData + "/PCK-Center/myPcks/" + mod + ".pck");
- File.Delete(Program.AppData + "/PCK-Center/myPcks/" + mod + ".pck");
- File.Delete(Program.AppData + "/PCK-Center/myPcks/" + mod + ".png");
- File.Delete(Program.AppData + "/PCK-Center/myPcks/" + mod + ".desc");
- reloader();
- }
- catch (Exception)
- {
- MessageBox.Show("Error");
- }
- this.Close();
- }
-
- private void buttonExport_Click(object sender, EventArgs e)
- {
- SaveFileDialog export = new SaveFileDialog();
- export.Title = "Get your PCK file";
- export.Filter = "PCK (Minecraft Wii U Package)|*.pck";
-
- if (export.ShowDialog() == DialogResult.OK)
- {
- try
- {
- File.Copy(Program.AppData + "/PCK-Center/myPcks/" + mod + ".pck", export.FileName);
- MessageBox.Show("PCK Received from location!");
- }catch (Exception)
- {
- MessageBox.Show("Error");
- }
- }
- }
-
- private void buttonInstallXbox_Click(object sender, EventArgs e)
- {
- System.Diagnostics.Process.Start("http://nobledez.com/pckStudio#install");
- }
-
- private void buttonInstallPs3_Click(object sender, EventArgs e)
- {
- System.Diagnostics.Process.Start("http://nobledez.com/pckStudio#install");
- }
-
- private void buttonInstallWiiU_Click(object sender, EventArgs e)
- {
- }
- }
-}
diff --git a/PCK-Studio/Forms/Utilities/pckCenterOpen.ja.resx b/PCK-Studio/Forms/Utilities/pckCenterOpen.ja.resx
deleted file mode 100644
index ddc74743..00000000
--- a/PCK-Studio/Forms/Utilities/pckCenterOpen.ja.resx
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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
-
-
- コレクションにダウンロード
-
-
-
- 134, 31
-
-
- スキンパック
-
-
- ラベルの説明
-
-
- 削除
-
-
- 取得する
-
-
- Bedrockに変換
-
-
\ No newline at end of file
diff --git a/PCK-Studio/Forms/Utilities/pckCenterOpen.resx b/PCK-Studio/Forms/Utilities/pckCenterOpen.resx
deleted file mode 100644
index c7adf940..00000000
--- a/PCK-Studio/Forms/Utilities/pckCenterOpen.resx
+++ /dev/null
@@ -1,432 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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
-
-
-
- Flat
-
-
-
- 568, 338
-
-
- 169, 67
-
-
-
- 2
-
-
- DOWNLOAD TO COLLECTION
-
-
- False
-
-
- buttonDirect
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 0
-
-
- True
-
-
- Microsoft Sans Serif, 20.25pt
-
-
- 24, 24
-
-
- 135, 31
-
-
- 5
-
-
- Skin Pack
-
-
- labelName
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 8
-
-
- Microsoft Sans Serif, 12pt
-
-
- 384, 64
-
-
- 353, 222
-
-
- 6
-
-
- labelDesc
-
-
- labelDesc
-
-
- System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 7
-
-
- Flat
-
-
- Segoe UI, 12pt
-
-
- 384, 338
-
-
- 178, 66
-
-
- 7
-
-
- Delete
-
-
- buttonDelete
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 6
-
-
- Flat
-
-
- Segoe UI, 12pt
-
-
- 495, 256
-
-
- 45, 30
-
-
- 8
-
-
- Get
-
-
- buttonExport
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 5
-
-
- Stretch
-
-
- Flat
-
-
- Segoe UI, 12pt
-
-
- 460, 256
-
-
- 30, 30
-
-
- 11
-
-
- buttonInstallPs3
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 2
-
-
- Stretch
-
-
- Flat
-
-
- Segoe UI, 12pt
-
-
- 424, 256
-
-
- 30, 30
-
-
- 10
-
-
- buttonInstallXbox
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 3
-
-
- Zoom
-
-
- Flat
-
-
- Segoe UI, 12pt
-
-
- 388, 256
-
-
- 30, 30
-
-
- 9
-
-
- buttonInstallWiiU
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 4
-
-
- 24, 64
-
-
- 341, 341
-
-
- StretchImage
-
-
- 0
-
-
- pictureBoxDisplay
-
-
- System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 9
-
-
- Flat
-
-
- Segoe UI, 12pt
-
-
- 388, 293
-
-
- 152, 30
-
-
- 12
-
-
- Convert to Bedrock
-
-
- buttonBedrock
-
-
- System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 1
-
-
- True
-
-
- 6, 13
-
-
- 760, 418
-
-
- CenterParent
-
-
- pckCenterOpen
-
-
- MetroFramework.Forms.MetroForm, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a
-
-
\ No newline at end of file
diff --git a/PCK-Studio/Interfaces/IPckDeserializer.cs b/PCK-Studio/Interfaces/IPckDeserializer.cs
new file mode 100644
index 00000000..611acb82
--- /dev/null
+++ b/PCK-Studio/Interfaces/IPckDeserializer.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using OMI.Formats.Pck;
+
+namespace PckStudio.Interfaces
+{
+ internal interface IPckDeserializer
+ {
+ public T Deserialize(PckFileData file);
+ }
+}
\ No newline at end of file
diff --git a/PCK-Studio/Interfaces/IPckFileSerializer.cs b/PCK-Studio/Interfaces/IPckFileSerializer.cs
new file mode 100644
index 00000000..1d7d2335
--- /dev/null
+++ b/PCK-Studio/Interfaces/IPckFileSerializer.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using OMI.Formats.Pck;
+
+namespace PckStudio.Interfaces
+{
+ internal interface IPckFileSerializer
+ {
+ public void Serialize(T obj, ref PckFileData file);
+ }
+}
diff --git a/PCK-Studio/Internal/Animation.cs b/PCK-Studio/Internal/Animation.cs
index 2b877380..66f8f6a5 100644
--- a/PCK-Studio/Internal/Animation.cs
+++ b/PCK-Studio/Internal/Animation.cs
@@ -25,44 +25,24 @@ using System.Linq;
namespace PckStudio.Internal
{
- internal sealed class Animation
+ public sealed class Animation
{
public const int MinimumFrameTime = 1;
public const int GameTickInMilliseconds = 50;
- public static Animation Empty(AnimationCategory category)
- {
- var animation = new Animation(Array.Empty(), string.Empty);
- animation.Category = category;
- return animation;
- }
-
public int FrameCount => frames.Count;
public int TextureCount => textures.Count;
public bool Interpolate { get; set; } = false;
-
- public AnimationCategory Category { get; set; }
-
- public string CategoryString => GetCategoryName(Category);
-
- public static string GetCategoryName(AnimationCategory category)
- {
- return category switch
- {
- AnimationCategory.Items => "items",
- AnimationCategory.Blocks => "blocks",
- _ => throw new ArgumentOutOfRangeException(category.ToString())
- };
- }
-
private readonly List textures;
private readonly IList frames = new List();
+ private object _syncLock = new object();
+
public Animation(IEnumerable textures)
{
this.textures = new List(textures);
@@ -215,7 +195,7 @@ namespace PckStudio.Internal
public void SetFrame(int frameIndex, Frame frame)
{
- lock(frames)
+ lock(_syncLock)
{
frames[frameIndex] = frame;
}
@@ -245,7 +225,7 @@ namespace PckStudio.Internal
internal void SetFrameTicks(int ticks)
{
- lock(frames)
+ lock(_syncLock)
{
foreach (var frame in frames)
{
@@ -256,10 +236,15 @@ namespace PckStudio.Internal
internal void SwapFrames(int sourceIndex, int destinationIndex)
{
- lock(frames)
+ lock(_syncLock)
{
frames.Swap(sourceIndex, destinationIndex);
}
}
+
+ internal static Animation CreateEmpty()
+ {
+ return new Animation(Array.Empty());
+ }
}
}
diff --git a/PCK-Studio/Internal/ApplicationBuildInfo.cs b/PCK-Studio/Internal/ApplicationBuildInfo.cs
index f887b0e4..cadde39e 100644
--- a/PCK-Studio/Internal/ApplicationBuildInfo.cs
+++ b/PCK-Studio/Internal/ApplicationBuildInfo.cs
@@ -25,7 +25,7 @@ namespace PckStudio.Internal
{
// this is to specify which build release this is. This is manually updated for now
// TODO: add different chars for different configurations
- private const string BuildType = "b";
+ private const string BuildType = "c";
private static System.Globalization.Calendar _buildCalendar;
private static DateTime date = new FileInfo(Assembly.GetExecutingAssembly().Location).LastWriteTime;
private static string _betaBuildVersion;
diff --git a/PCK-Studio/Helper/AnimationHelper.cs b/PCK-Studio/Internal/Deserializer/AnimationDeserializer.cs
similarity index 69%
rename from PCK-Studio/Helper/AnimationHelper.cs
rename to PCK-Studio/Internal/Deserializer/AnimationDeserializer.cs
index 0312624a..04f23dc0 100644
--- a/PCK-Studio/Helper/AnimationHelper.cs
+++ b/PCK-Studio/Internal/Deserializer/AnimationDeserializer.cs
@@ -2,28 +2,21 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
-using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using OMI.Formats.Pck;
using PckStudio.Extensions;
-using PckStudio.Internal;
+using PckStudio.Interfaces;
-namespace PckStudio.Helper
+namespace PckStudio.Internal.Deserializer
{
- internal static class AnimationHelper
+ internal sealed class AnimationDeserializer : IPckDeserializer
{
- internal static void SaveAnimationToFile(PckFileData file, Animation animation)
- {
- string anim = animation.BuildAnim();
- file.SetProperty("ANIM", anim);
- var texture = animation.BuildTexture();
- file.SetData(texture, ImageFormat.Png);
- }
-
- internal static Animation GetAnimationFromFile(PckFileData file)
+ public static readonly AnimationDeserializer DefaultDeserializer = new AnimationDeserializer();
+
+ public Animation Deserialize(PckFileData file)
{
_ = file ?? throw new ArgumentNullException(nameof(file));
if (file.Size > 0)
@@ -31,25 +24,20 @@ namespace PckStudio.Helper
var texture = file.GetTexture();
var frameTextures = texture.Split(ImageLayoutDirection.Vertical);
var _animation = new Animation(frameTextures, file.GetProperty("ANIM"));
- _animation.Category = file.Filename.Split('/').Contains("items")
- ? AnimationCategory.Items
- : AnimationCategory.Blocks;
return _animation;
}
- return Animation.Empty(file.Filename.Split('/').Contains("items")
- ? AnimationCategory.Items
- : AnimationCategory.Blocks);
+ return Animation.CreateEmpty();
}
- internal static Animation GetAnimationFromJavaAnimation(JObject jsonObject, Image texture)
+ public Animation DeserializeJavaAnimation(JObject jsonObject, Image texture)
{
var textures = texture.Split(ImageLayoutDirection.Vertical);
Animation result = new Animation(textures);
if (jsonObject["animation"] is not JToken animation)
return result;
-
+
int frameTime = Animation.MinimumFrameTime;
-
+
if (animation["frametime"] is JToken frametime_token && frametime_token.Type == JTokenType.Integer)
frameTime = (int)frametime_token;
@@ -60,12 +48,12 @@ namespace PckStudio.Helper
{
foreach (JToken frame in frames_token.Children())
{
- if (frame.Type == JTokenType.Object &&
+ if (frame.Type == JTokenType.Object &&
frame["index"] is JToken frame_index &&
frame_index.Type == JTokenType.Integer &&
frame["time"] is JToken frame_time &&
frame_time.Type == JTokenType.Integer)
- {
+ {
Debug.WriteLine("Index: {0}, Time: {1}", frame_index, frame_time);
result.AddFrame((int)frame_index, (int)frame_time);
}
diff --git a/PCK-Studio/Internal/Deserializer/ImageDeserializer.cs b/PCK-Studio/Internal/Deserializer/ImageDeserializer.cs
new file mode 100644
index 00000000..4747fb96
--- /dev/null
+++ b/PCK-Studio/Internal/Deserializer/ImageDeserializer.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using OMI.Formats.Pck;
+using PckStudio.Interfaces;
+using PckStudio.IO.TGA;
+
+namespace PckStudio.Internal.Deserializer
+{
+ internal sealed class ImageDeserializer : IPckDeserializer
+ {
+ public static readonly ImageDeserializer DefaultDeserializer = new ImageDeserializer();
+ private static Image EmptyImage = new Bitmap(1, 1, PixelFormat.Format32bppArgb);
+
+ public Image Deserialize(PckFileData file)
+ {
+ using var stream = new MemoryStream(file.Data);
+ try
+ {
+ if (Path.GetExtension(file.Filename) == ".tga")
+ return TGADeserializer.DeserializeFromStream(stream);
+ else
+ return Image.FromStream(stream);
+ }
+ catch (Exception ex)
+ {
+ Trace.TraceError($"Failed to read image from pck file data({file.Filename}).");
+ Debug.WriteLine(ex.Message);
+ return EmptyImage;
+ }
+ }
+ }
+}
diff --git a/PCK-Studio/Internal/Json/Entities.cs b/PCK-Studio/Internal/Json/Entities.cs
new file mode 100644
index 00000000..a0729112
--- /dev/null
+++ b/PCK-Studio/Internal/Json/Entities.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Newtonsoft.Json;
+using PckStudio.Extensions;
+using PckStudio.Properties;
+
+namespace PckStudio.Internal.Json
+{
+ internal class JsonEntities
+ {
+ [JsonProperty("entries")]
+ public List Entries { get; set; }
+ }
+
+ internal static class Entities
+ {
+ private static JsonEntities _jsonModelData, _jsonMaterialData, _jsonBehaviourData;
+ internal static JsonEntities JsonModelData => _jsonModelData ??= JsonConvert.DeserializeObject(Resources.entityModelsData);
+ internal static JsonEntities JsonMaterialData => _jsonMaterialData ??= JsonConvert.DeserializeObject(Resources.entityMaterialsData);
+ internal static JsonEntities JsonBehaviourData => _jsonBehaviourData ??= JsonConvert.DeserializeObject(Resources.entityBehavioursData);
+ internal static List ModelInfos => JsonModelData.Entries;
+ internal static List MaterialInfos => JsonMaterialData.Entries;
+ internal static List BehaviourInfos => JsonBehaviourData.Entries;
+ }
+}
diff --git a/PCK-Studio/Internal/Json/EntityInfo.cs b/PCK-Studio/Internal/Json/EntityInfo.cs
new file mode 100644
index 00000000..9c72c388
--- /dev/null
+++ b/PCK-Studio/Internal/Json/EntityInfo.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+
+namespace PckStudio.Internal.Json
+{
+ internal class EntityInfo
+ {
+ [JsonProperty("displayName")]
+ public string DisplayName { get; set; }
+
+ [JsonProperty("internalName")]
+ public string InternalName { get; set; }
+
+ public EntityInfo(string displayName, string internalName)
+ {
+ DisplayName = displayName;
+ InternalName = internalName;
+ }
+ }
+}
diff --git a/PCK-Studio/Internal/AnimationCategory.cs b/PCK-Studio/Internal/ResourceCategory.cs
similarity index 90%
rename from PCK-Studio/Internal/AnimationCategory.cs
rename to PCK-Studio/Internal/ResourceCategory.cs
index 8cae76b2..0233ef62 100644
--- a/PCK-Studio/Internal/AnimationCategory.cs
+++ b/PCK-Studio/Internal/ResourceCategory.cs
@@ -18,9 +18,10 @@
namespace PckStudio.Internal
{
- internal enum AnimationCategory
+ internal enum ResourceCategory
{
- Items,
- Blocks
+ Unknown = -1,
+ ItemAnimation,
+ BlockAnimation
}
}
diff --git a/PCK-Studio/Internal/ResourceLocation.cs b/PCK-Studio/Internal/ResourceLocation.cs
new file mode 100644
index 00000000..e9984d86
--- /dev/null
+++ b/PCK-Studio/Internal/ResourceLocation.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PckStudio.Internal
+{
+ internal class ResourceLocation
+ {
+ public static string GetPathFromCategory(ResourceCategory category)
+ {
+ return category switch
+ {
+ ResourceCategory.ItemAnimation => "res/textures/items",
+ ResourceCategory.BlockAnimation => "res/textures/blocks",
+ _ => string.Empty
+ };
+ }
+
+ public static ResourceCategory GetCategoryFromPath(string path)
+ {
+ if (string.IsNullOrWhiteSpace(path) || !path.StartsWith("res/"))
+ return ResourceCategory.Unknown;
+
+ if (path.StartsWith("res/textures/items"))
+ return ResourceCategory.ItemAnimation;
+
+ if (path.StartsWith("res/textures/blocks"))
+ return ResourceCategory.BlockAnimation;
+
+ return ResourceCategory.Unknown;
+ }
+ }
+}
diff --git a/PCK-Studio/Internal/Serializer/AnimationSerializer.cs b/PCK-Studio/Internal/Serializer/AnimationSerializer.cs
new file mode 100644
index 00000000..61756723
--- /dev/null
+++ b/PCK-Studio/Internal/Serializer/AnimationSerializer.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Newtonsoft.Json.Linq;
+using OMI.Formats.Pck;
+using PckStudio.Extensions;
+using PckStudio.Interfaces;
+
+namespace PckStudio.Internal.Serializer
+{
+ internal sealed class AnimationSerializer : IPckFileSerializer
+ {
+ public static readonly AnimationSerializer DefaultSerializer = new AnimationSerializer();
+
+ public void Serialize(Animation animation, ref PckFileData file)
+ {
+ string anim = animation.BuildAnim();
+ file.SetProperty("ANIM", anim);
+ var texture = animation.BuildTexture();
+ file.SetTexture(texture);
+ }
+ }
+}
diff --git a/PCK-Studio/Internal/Serializer/ImageSerializer.cs b/PCK-Studio/Internal/Serializer/ImageSerializer.cs
new file mode 100644
index 00000000..ed012ffc
--- /dev/null
+++ b/PCK-Studio/Internal/Serializer/ImageSerializer.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using OMI.Formats.Pck;
+using PckStudio.Interfaces;
+using PckStudio.IO.TGA;
+
+namespace PckStudio.Internal.Serializer
+{
+ internal sealed class ImageSerializer : IPckFileSerializer
+ {
+ public static readonly ImageSerializer DefaultSerializer = new ImageSerializer();
+
+ public void Serialize(Image obj, ref PckFileData file)
+ {
+ var stream = new MemoryStream();
+ try
+ {
+ if (Path.GetExtension(file.Filename) == ".tga")
+ TGASerializer.SerializeToStream(stream, obj);
+ else
+ obj.Save(stream, ImageFormat.Png);
+ file.SetData(stream.ToArray());
+ }
+ catch (Exception ex)
+ {
+ Trace.TraceError($"Failed to serialize image to pck file data({file.Filename}).");
+ Debug.WriteLine(ex.Message);
+ }
+ }
+ }
+}
diff --git a/PCK-Studio/MainForm.Designer.cs b/PCK-Studio/MainForm.Designer.cs
index 3680c6a1..1d8485a8 100644
--- a/PCK-Studio/MainForm.Designer.cs
+++ b/PCK-Studio/MainForm.Designer.cs
@@ -96,21 +96,6 @@
this.openPckCenterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.joinDevelopmentDiscordToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.trelloBoardToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.videosToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.howToMakeABasicSkinPackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.howToMakeACustomSkinModelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.howToMakeCustomSkinModelsbedrockToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.howToMakeCustomMusicToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.howToInstallPcksDirectlyToWiiUToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.pckCenterReleaseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.howPCKsWorkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.donateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.toNobledezJackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.toPhoenixARCDeveloperToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.forMattNLContributorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.contextMenuMetaTree = new System.Windows.Forms.ContextMenuStrip(this.components);
this.addEntryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.addEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
@@ -573,7 +558,7 @@
//
// openPckCenterToolStripMenuItem
//
- this.openPckCenterToolStripMenuItem.Image = global::PckStudio.Properties.Resources.pckCenterHeader;
+ this.openPckCenterToolStripMenuItem.Image = global::PckStudio.Properties.Resources.NoImageFound;
this.openPckCenterToolStripMenuItem.Name = "openPckCenterToolStripMenuItem";
resources.ApplyResources(this.openPckCenterToolStripMenuItem, "openPckCenterToolStripMenuItem");
this.openPckCenterToolStripMenuItem.Click += new System.EventHandler(this.openPckCenterToolStripMenuItem_Click);
diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs
index f872ddd5..768be5bb 100644
--- a/PCK-Studio/MainForm.cs
+++ b/PCK-Studio/MainForm.cs
@@ -12,10 +12,12 @@ using OMI.Formats.Archive;
using OMI.Formats.Pck;
using OMI.Formats.GameRule;
using OMI.Formats.Languages;
+using OMI.Formats.Model;
using OMI.Workers.Archive;
using OMI.Workers.Pck;
using OMI.Workers.GameRule;
using OMI.Workers.Language;
+using OMI.Workers.Model;
using PckStudio.Properties;
using PckStudio.Forms;
using PckStudio.Forms.Editor;
@@ -117,42 +119,11 @@ namespace PckStudio
return TryGetEditor(tabControl.SelectedTab, out editor);
}
- #region drag and drop for main tree node
-
- // Most of the code below is modified code from this link: https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.treeview.itemdrag?view=windowsdesktop-6.0
- // - MattNL
-
- private void treeViewMain_ItemDrag(object sender, ItemDragEventArgs e)
- {
-
- }
-
- // Set the target drop effect to the effect
- // specified in the ItemDrag event handler.
- private void treeViewMain_DragEnter(object sender, DragEventArgs e)
- {
- e.Effect = e.AllowedEffect;
- }
-
- // Select the node under the mouse pointer to indicate the
- // expected drop location.
- private void treeViewMain_DragOver(object sender, DragEventArgs e)
- {
-
- }
-
- private void treeViewMain_DragDrop(object sender, DragEventArgs e)
- {
-
- }
-
- #endregion
-
- private PckFile InitializePack(int packId, int packVersion, string packName, bool createSkinsPCK)
+ private PckFile InitializePack(int packId, int packVersion, string packName, bool createSkinsPCK)
{
var pack = new PckFile(3);
- var zeroFile = pack.CreateNewFile("0", PckFileType.InfoFile);
+ PckFileData zeroFile = pack.CreateNewFile("0", PckFileType.InfoFile);
zeroFile.AddProperty("PACKID", packId);
zeroFile.AddProperty("PACKVERSION", packVersion);
@@ -173,14 +144,13 @@ namespace PckStudio
var pack = InitializePack(packId, packVersion, packName, createSkinsPCK);
PckFile infoPCK = new PckFile(3);
- var icon = infoPCK.CreateNewFile("icon.png", PckFileType.TextureFile);
- icon.SetData(Resources.TexturePackIcon, ImageFormat.Png);
+ PckFileData icon = infoPCK.CreateNewFile("icon.png", PckFileType.TextureFile);
+ icon.SetTexture(Resources.TexturePackIcon);
- var comparison = infoPCK.CreateNewFile("comparison.png", PckFileType.TextureFile);
- comparison.SetData(Resources.Comparison, ImageFormat.Png);
-
- var texturepackInfo = pack.CreateNewFile($"{res}/{res}Info.pck", PckFileType.TexturePackInfoFile);
+ PckFileData comparison = infoPCK.CreateNewFile("comparison.png", PckFileType.TextureFile);
+ comparison.SetTexture(Resources.Comparison);
+ PckFileData texturepackInfo = pack.CreateNewFile($"{res}/{res}Info.pck", PckFileType.TexturePackInfoFile);
texturepackInfo.AddProperty("PACKID", "0");
texturepackInfo.AddProperty("DATAPATH", $"{res}Data.pck");
@@ -191,9 +161,9 @@ namespace PckStudio
private PckFile InitializeMashUpPack(int packId, int packVersion, string packName, string res)
{
- var pack = InitializeTexturePack(packId, packVersion, packName, res, true);
- var gameRuleFile = pack.CreateNewFile("GameRules.grf", PckFileType.GameRulesFile);
- var grfFile = new GameRuleFile();
+ PckFile pack = InitializeTexturePack(packId, packVersion, packName, res, true);
+ PckFileData gameRuleFile = pack.CreateNewFile("GameRules.grf", PckFileType.GameRulesFile);
+ GameRuleFile grfFile = new GameRuleFile();
grfFile.AddRule("MapOptions",
new KeyValuePair("seed", "0"),
new KeyValuePair("baseSaveName", string.Empty),
@@ -218,7 +188,7 @@ namespace PckStudio
{
TextPrompt namePrompt = new TextPrompt();
namePrompt.OKButtonText = "Ok";
- if (namePrompt.ShowDialog() == DialogResult.OK)
+ if (namePrompt.ShowDialog(this) == DialogResult.OK)
{
var currentPCK = InitializePack(new Random().Next(8000, int.MaxValue), 0, namePrompt.NewText, true);
AddEditorPage(currentPCK);
@@ -376,7 +346,7 @@ namespace PckStudio
{
if (!HasDataFolder())
{
- DialogResult result = MessageBox.Show("There is not a \"Data\" folder present in the pack folder. Would you like to create one?", "Folder missing", MessageBoxButtons.YesNo);
+ DialogResult result = MessageBox.Show(this, "There is not a \"Data\" folder present in the pack folder. Would you like to create one?", "Folder missing", MessageBoxButtons.YesNo);
if (result == DialogResult.No) return false;
else Directory.CreateDirectory(GetDataPath());
}
@@ -476,9 +446,9 @@ namespace PckStudio
{
pckOpen.Image = Resources.pckDrop;
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
- foreach (var file in files)
+ foreach (string file in files)
{
- var ext = Path.GetExtension(file);
+ string ext = Path.GetExtension(file);
if (ext.Equals(".pck", StringComparison.CurrentCultureIgnoreCase))
e.Effect = DragDropEffects.Copy;
return;
@@ -522,23 +492,6 @@ namespace PckStudio
Process.Start("https://trello.com/b/0XLNOEbe/pck-studio");
}
- private void openPckManagerToolStripMenuItem_Click(object sender, EventArgs e)
- {
- PckManager ??= new PckManager();
- PckManager.FormClosing += (s, e) =>
- {
- PckManager.Hide();
- e.Cancel = true;
- };
- if (!PckManager.Visible)
- {
- PckManager.Show();
- PckManager.BringToFront();
- }
- if (PckManager.Focus())
- PckManager.BringToFront();
- }
-
private void wavBinkaToolStripMenuItem_Click(object sender, EventArgs e)
{
using OpenFileDialog fileDialog = new OpenFileDialog
@@ -547,9 +500,24 @@ namespace PckStudio
Filter = "WAV files (*.wav)|*.wav",
Title = "Please choose WAV files to convert to BINKA"
};
- if (fileDialog.ShowDialog() == DialogResult.OK)
+ if (fileDialog.ShowDialog(this) == DialogResult.OK)
{
- BinkaConverter.ToBinka(fileDialog.FileNames, new DirectoryInfo(Path.GetDirectoryName(fileDialog.FileName)));
+ using ItemSelectionPopUp dialog = new ItemSelectionPopUp(
+ "Level 1 (Best Quality)", "Level 2", "Level 3", "Level 4", "Level 5",
+ "Level 6", "Level 7", "Level 8", "Level 9 (Worst Quality)")
+ {
+ LabelText = "Compression",
+ ButtonText = "OK"
+ };
+
+ if(dialog.ShowDialog(this) == DialogResult.OK)
+ {
+ BinkaConverter.ToBinka(
+ fileDialog.FileNames,
+ new DirectoryInfo(Path.GetDirectoryName(fileDialog.FileName)),
+ dialog.SelectedIndex + 1 // compression level
+ );
+ }
}
}
@@ -561,7 +529,7 @@ namespace PckStudio
Filter = "BINKA files (*.binka)|*.binka",
Title = "Please choose BINKA files to convert to WAV"
};
- if (fileDialog.ShowDialog() == DialogResult.OK)
+ if (fileDialog.ShowDialog(this) == DialogResult.OK)
{
BinkaConverter.ToWav(fileDialog.FileNames, new DirectoryInfo(Path.GetDirectoryName(fileDialog.FileName)));
}
@@ -613,7 +581,20 @@ namespace PckStudio
closeAllToolStripMenuItem.Visible = false;
}
- private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
+ private void openPckManagerToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ PckManager ??= new PckManager();
+ PckManager.FormClosing += (s, e) => PckManager = null;
+ if (!PckManager.Visible)
+ {
+ // Passing in a parent form will make it stay on top of every other form. -miku
+ PckManager.Show();
+ }
+ if (PckManager.Focus())
+ PckManager.BringToFront();
+ }
+
+ private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
PckManager?.Close();
closeAllToolStripMenuItem_Click(sender, e);
diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj
index 97d3659e..8526bbd2 100644
--- a/PCK-Studio/PckStudio.csproj
+++ b/PCK-Studio/PckStudio.csproj
@@ -133,11 +133,22 @@
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -256,7 +267,14 @@
WiiUPanel.cs
-
+
+
+
+
+
+
+
+
Form
@@ -431,30 +449,6 @@
AudioEditor.cs
-
- Form
-
-
- pckCenter.cs
-
-
- Form
-
-
- PckCenterBeta.cs
-
-
- Form
-
-
- pckCenterOpen.cs
-
-
- Form
-
-
- TextureConverterUtility.cs
-
@@ -600,25 +594,6 @@
AudioEditor.cs
Designer
-
- pckCenter.cs
-
-
- pckCenter.cs
-
-
- PckCenterBeta.cs
-
-
- pckCenterOpen.cs
-
-
- pckCenterOpen.cs
- Designer
-
-
- TextureConverterUtility.cs
-
CreditsForm.cs
@@ -645,7 +620,9 @@
-
+
+
+
@@ -681,7 +658,6 @@
-
@@ -711,6 +687,7 @@
+
diff --git a/PCK-Studio/Program.cs b/PCK-Studio/Program.cs
index 262456a8..198db8b4 100644
--- a/PCK-Studio/Program.cs
+++ b/PCK-Studio/Program.cs
@@ -59,6 +59,7 @@ namespace PckStudio
{
bool updateAvailable = Updater.IsUpdateAvailable(Application.ProductVersion);
if (updateAvailable && MessageBox.Show(
+ MainInstance ?? null,
"New update available.\n" +
message,
"Update Available",
diff --git a/PCK-Studio/Properties/AssemblyInfo.cs b/PCK-Studio/Properties/AssemblyInfo.cs
index 9e7ee662..acd3487d 100644
--- a/PCK-Studio/Properties/AssemblyInfo.cs
+++ b/PCK-Studio/Properties/AssemblyInfo.cs
@@ -7,10 +7,10 @@ using System.Security.Permissions;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-[assembly: AssemblyTitle("PCK Studio")]
+[assembly: AssemblyTitle("Pck Studio")]
[assembly: AssemblyDescription("A Minecraft Legacy Console .pck Editor")]
[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Nobledez & PhoenixARC")]
+[assembly: AssemblyCompany("PCK-Studio")]
[assembly: AssemblyProduct("PCK-Studio")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyCulture("")]
diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs
index f5d3c9f8..a4b2a0c7 100644
--- a/PCK-Studio/Properties/Resources.Designer.cs
+++ b/PCK-Studio/Properties/Resources.Designer.cs
@@ -103,33 +103,28 @@ namespace PckStudio.Properties {
///
/// Looks up a localized string similar to {
/// "COMMENT_1": "JSON by MattNL",
- /// "banners": [
+ /// "entries": [
/// {
/// "internalName": "base",
- /// "displayName": "Base"
- /// },
- /// {
- /// "internalName": "border",
- /// "displayName": "Bordure"
- /// },
- /// {
- /// "internalName": "bricks",
- /// "displayName": "Field Masoned"
- /// },
- /// {
- /// "internalName": "circle",
- /// "displayName": "Roundel"
- /// },
- /// {
- /// "internalName": "creeper",
- /// "displayName": "Creeper Charge"
- /// },
- /// {
- /// "internalName": "cross",
- /// "displayName": "Saltire"
- /// },
- /// {
- /// "internalName": "curly_bo [rest of string was truncated]";.
+ /// "displayName": "Base",
+ /// "hasColourEntry": true,
+ /// "colourEntry": {
+ /// "defaultName": "Banner_White",
+ /// "variants": [
+ /// "Banner_Black",
+ /// "Banner_Blue",
+ /// "Banner_Brown",
+ /// "Banner_Cyan",
+ /// "Banner_Gray",
+ /// "Banner_Green",
+ /// "Banner_Light_Blue",
+ /// "Banner_Lime",
+ /// "Banner_Magenta",
+ /// "Banner_Orange",
+ /// "Banner_Pink",
+ /// "Banner_Purple",
+ /// "Banner_Red",
+ /// "Ban [rest of string was truncated]";.
///
public static string bannerData {
get {
@@ -201,7 +196,7 @@ namespace PckStudio.Properties {
/// Looks up a localized string similar to {
/// "COMMENT_1": "Tile data research by MattNL",
/// "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)",
- /// "blocks": [
+ /// "entries": [
/// {
/// "internalName": "grass_top",
/// "displayName": "Grass Block (Top)",
@@ -221,7 +216,7 @@ namespace PckStudio.Properties {
/// "displayName": "Stone"
/// },
/// {
- /// "internalName": [rest of string was truncated]";.
+ /// "internalName": [rest of string was truncated]";.
///
public static string blockData {
get {
@@ -344,32 +339,110 @@ namespace PckStudio.Properties {
///
/// Looks up a localized string similar to {
/// "COMMENT": "Entity data research by NessieHax (Miku-666) and MattNL",
- /// "models": [
- /// { "": "" },
- /// { "": "" },
- /// { "": "" },
- /// { "bat": "Bat" },
- /// { "blaze": "Blaze" },
- /// { "boat": "Boat" },
- /// { "cat": "Cat (PS4 EXCLUSIVE)" },
- /// { "": "" },
- /// { "": "" },
- /// { "chicken": "Chicken" },
- /// { "cod": "Cod" },
- /// { "": "" },
- /// { "cow": "Cow" },
- /// { "creeper": "Creeper" },
- /// { "dolphin": "Dolphin" },
- /// { "": "" },
- /// { "": "" },
- /// { "zombie.drowned": "Drowned" },
- /// { "": "" },
- /// { "": "" },
- /// [rest of string was truncated]";.
+ /// "entries": [
+ /// {
+ /// "internalName": "area_effect_cloud",
+ /// "displayName": "Area Effect Cloud / Particle"
+ /// },
+ /// {
+ /// "internalName": "armor_stand",
+ /// "displayName": "Armor Stand"
+ /// },
+ /// {
+ /// "internalName": "arrow",
+ /// "displayName": "Arrow"
+ /// },
+ /// {
+ /// "internalName": "bat",
+ /// "displayName": "Bat"
+ /// },
+ /// {
+ /// "internalName": "blaze",
+ /// "displayName": "Blaze"
+ /// },
+ /// {
+ /// "internalName": "boat",
+ /// "display [rest of string was truncated]";.
///
- public static string entityData {
+ public static string entityBehavioursData {
get {
- return ResourceManager.GetString("entityData", resourceCulture);
+ return ResourceManager.GetString("entityBehavioursData", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to {
+ /// "COMMENT": "Entity data research by NessieHax (Miku-666) and MattNL",
+ /// "entries": [
+ /// {
+ /// "internalName": "",
+ /// "displayName": ""
+ /// },
+ /// {
+ /// "internalName": "",
+ /// "displayName": ""
+ /// },
+ /// {
+ /// "internalName": "",
+ /// "displayName": ""
+ /// },
+ /// {
+ /// "internalName": "bat",
+ /// "displayName": "Bat"
+ /// },
+ /// {
+ /// "internalName": "blaze_head",
+ /// "displayName": "Blaze"
+ /// },
+ /// {
+ /// "internalName": "",
+ /// "displayName": ""
+ /// },
+ /// {
+ /// "internalName": "cat",
+ /// "displayName": "Cat [PS4 [rest of string was truncated]";.
+ ///
+ public static string entityMaterialsData {
+ get {
+ return ResourceManager.GetString("entityMaterialsData", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to {
+ /// "COMMENT": "Entity data research by NessieHax (Miku-666) and MattNL",
+ /// "entries": [
+ /// {
+ /// "internalName": "",
+ /// "displayName": ""
+ /// },
+ /// {
+ /// "internalName": "",
+ /// "displayName": ""
+ /// },
+ /// {
+ /// "internalName": "",
+ /// "displayName": ""
+ /// },
+ /// {
+ /// "internalName": "bat",
+ /// "displayName": "Bat"
+ /// },
+ /// {
+ /// "internalName": "blaze",
+ /// "displayName": "Blaze"
+ /// },
+ /// {
+ /// "internalName": "boat",
+ /// "displayName": "Boat"
+ /// },
+ /// {
+ /// "internalName": "cat",
+ /// "displayName": "Cat [ [rest of string was truncated]";.
+ ///
+ public static string entityModelsData {
+ get {
+ return ResourceManager.GetString("entityModelsData", resourceCulture);
}
}
@@ -386,7 +459,7 @@ namespace PckStudio.Properties {
///
/// Looks up a localized string similar to {
/// "COMMENT_1": "JSON by MattNL",
- /// "experience_orbs": [
+ /// "entries": [
/// {
/// "internalName": "experience_orb_0",
/// "displayName": "Experience Orb (Size 1)",
@@ -405,7 +478,8 @@ namespace PckStudio.Properties {
/// "variants": ["experience_orb"]
/// }
/// },
- /// [rest of string was truncated]";.
+ /// {
+ /// " [rest of string was truncated]";.
///
public static string experienceOrbData {
get {
@@ -416,7 +490,7 @@ namespace PckStudio.Properties {
///
/// Looks up a localized string similar to {
/// "COMMENT_1": "JSON by MattNL",
- /// "explosions": [
+ /// "entries": [
/// {
/// "internalName": "explosion_0",
/// "displayName": "Explosion (Stage 1)",
@@ -436,7 +510,7 @@ namespace PckStudio.Properties {
/// "colourEntry": {
/// "defaultName": "Particle_Explode",
/// "variants": [
- /// [rest of string was truncated]";.
+ /// [rest of string was truncated]";.
///
public static string explosionData {
get {
@@ -558,7 +632,7 @@ namespace PckStudio.Properties {
/// Looks up a localized string similar to {
/// "COMMENT_1": "Tile data research by MattNL",
/// "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)",
- /// "items": [
+ /// "entries": [
/// {
/// "internalName": "helmetCloth",
/// "displayName": "Leather Cap",
@@ -574,7 +648,7 @@ namespace PckStudio.Properties {
/// "displayName": "Chain Helmet"
/// },
/// {
- /// "internalName": "he [rest of string was truncated]";.
+ /// "internalName": " [rest of string was truncated]";.
///
public static string itemData {
get {
@@ -615,7 +689,7 @@ namespace PckStudio.Properties {
///
/// Looks up a localized string similar to {
/// "COMMENT_1": "JSON by MattNL",
- /// "map_icons": [
+ /// "entries": [
/// {
/// "internalName": "player_1",
/// "displayName": "Player 1"
@@ -641,7 +715,7 @@ namespace PckStudio.Properties {
/// "displayName": "Target Point (Unused)"
/// },
/// {
- /// [rest of string was truncated]";.
+ /// [rest of string was truncated]";.
///
public static string mapIconData {
get {
@@ -672,7 +746,7 @@ namespace PckStudio.Properties {
///
/// Looks up a localized string similar to {
/// "COMMENT_1": "JSON by MattNL",
- /// "moon_phases": [
+ /// "entries": [
/// {
/// "internalName": "moon_phase_0",
/// "displayName": "Full Moon"
@@ -695,7 +769,7 @@ namespace PckStudio.Properties {
/// },
/// {
/// "internalName": "moon_phase_5",
- /// "displayNa [rest of string was truncated]";.
+ /// "displayName": [rest of string was truncated]";.
///
public static string moonPhaseData {
get {
@@ -746,7 +820,7 @@ namespace PckStudio.Properties {
///
/// Looks up a localized string similar to {
/// "COMMENT_1": "JSON by MattNL",
- /// "paintings": [
+ /// "entries": [
/// {
/// "internalName": "Kebab",
/// "displayName": "\"Kebab med tre pepperoni\" by Kristoffer Zetterstrand"
@@ -765,7 +839,7 @@ namespace PckStudio.Properties {
/// },
/// {
/// "internalName": "Bomb",
- /// "di [rest of string was truncated]";.
+ /// "disp [rest of string was truncated]";.
///
public static string paintingData {
get {
@@ -786,7 +860,7 @@ namespace PckStudio.Properties {
///
/// Looks up a localized string similar to {
/// "COMMENT_1": "JSON by MattNL",
- /// "particles": [
+ /// "entries": [
/// {
/// "internalName": "generic_0",
/// "displayName": "Generic (Stage 1)",
@@ -806,7 +880,8 @@ namespace PckStudio.Properties {
/// },
/// {
/// "internalName": "generic_1",
- /// "displayName": "Generic (Stage 2)", [rest of string was truncated]";.
+ /// "displayName": "Generic (Stage 2)",
+ /// [rest of string was truncated]";.
///
public static string particleData {
get {
@@ -834,16 +909,6 @@ namespace PckStudio.Properties {
}
}
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
- public static System.Drawing.Bitmap pckCenterHeader {
- get {
- object obj = ResourceManager.GetObject("pckCenterHeader", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
@@ -984,6 +1049,16 @@ namespace PckStudio.Properties {
}
}
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ public static System.Drawing.Bitmap trello {
+ get {
+ object obj = ResourceManager.GetObject("trello", 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 52fb4d8c..0f00925e 100644
--- a/PCK-Studio/Properties/Resources.resx
+++ b/PCK-Studio/Properties/Resources.resx
@@ -184,9 +184,6 @@
..\Resources\iconImageList\ENTITY MATERIALS ICON.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\pckCenterHeader.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
..\Resources\iconImageList\IMAGE ICON.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
@@ -280,9 +277,6 @@
..\Resources\atlases\entities.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\atlases\entityData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
-
..\Resources\icons\file_delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
@@ -376,4 +370,16 @@
..\Resources\atlases\paintings.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\external\trello.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\atlases\entityBehavioursData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
+
+
+ ..\Resources\atlases\entityMaterialsData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
+
+
+ ..\Resources\atlases\entityModelsData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
+
\ No newline at end of file
diff --git a/PCK-Studio/Properties/Settings.Designer.cs b/PCK-Studio/Properties/Settings.Designer.cs
index 95fa109d..8acf7cc9 100644
--- a/PCK-Studio/Properties/Settings.Designer.cs
+++ b/PCK-Studio/Properties/Settings.Designer.cs
@@ -12,7 +12,7 @@ namespace PckStudio.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.7.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.9.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@@ -115,5 +115,16 @@ namespace PckStudio.Properties {
this["UseComboBoxForGRFParameter"] = value;
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public global::System.Collections.Specialized.StringCollection RecentFiles {
+ get {
+ return ((global::System.Collections.Specialized.StringCollection)(this["RecentFiles"]));
+ }
+ set {
+ this["RecentFiles"] = value;
+ }
+ }
}
}
diff --git a/PCK-Studio/Properties/Settings.settings b/PCK-Studio/Properties/Settings.settings
index 2e32328f..1003231b 100644
--- a/PCK-Studio/Properties/Settings.settings
+++ b/PCK-Studio/Properties/Settings.settings
@@ -26,5 +26,8 @@
False
+
+
+
\ No newline at end of file
diff --git a/PCK-Studio/Resources/atlases/entities.png b/PCK-Studio/Resources/atlases/entities.png
index 46881de8..3286d23f 100644
Binary files a/PCK-Studio/Resources/atlases/entities.png and b/PCK-Studio/Resources/atlases/entities.png differ
diff --git a/PCK-Studio/Resources/atlases/entityBehavioursData.json b/PCK-Studio/Resources/atlases/entityBehavioursData.json
new file mode 100644
index 00000000..921fe41f
--- /dev/null
+++ b/PCK-Studio/Resources/atlases/entityBehavioursData.json
@@ -0,0 +1,489 @@
+{
+ "COMMENT": "Entity data research by NessieHax (Miku-666) and MattNL",
+ "entries": [
+ {
+ "internalName": "area_effect_cloud",
+ "displayName": "Area Effect Cloud / Particle"
+ },
+ {
+ "internalName": "armor_stand",
+ "displayName": "Armor Stand"
+ },
+ {
+ "internalName": "arrow",
+ "displayName": "Arrow"
+ },
+ {
+ "internalName": "bat",
+ "displayName": "Bat"
+ },
+ {
+ "internalName": "blaze",
+ "displayName": "Blaze"
+ },
+ {
+ "internalName": "boat",
+ "displayName": "Boat"
+ },
+ {
+ "internalName": "cat",
+ "displayName": "Cat [PS4 EXCLUSIVE]"
+ },
+ {
+ "internalName": "cave_spider",
+ "displayName": "Cave Spider"
+ },
+ {
+ "internalName": "chest_minecart",
+ "displayName": "Chest Minecart"
+ },
+ {
+ "internalName": "chicken",
+ "displayName": "Chicken"
+ },
+ {
+ "internalName": "cod",
+ "displayName": "Cod"
+ },
+ {
+ "internalName": "commandblock_minecart",
+ "displayName": "Command Block Minecart"
+ },
+ {
+ "internalName": "cow",
+ "displayName": "Cow"
+ },
+ {
+ "internalName": "creeper",
+ "displayName": "Creeper"
+ },
+ {
+ "internalName": "dolphin",
+ "displayName": "Dolphin"
+ },
+ {
+ "internalName": "donkey",
+ "displayName": "Donkey"
+ },
+ {
+ "internalName": "dragon_fireball",
+ "displayName": "Dragon Fireball"
+ },
+ {
+ "internalName": "drowned",
+ "displayName": "Drowned"
+ },
+ {
+ "internalName": "egg",
+ "displayName": "Thrown Egg"
+ },
+ {
+ "internalName": "elder_guardian",
+ "displayName": "Elder Guardian"
+ },
+ {
+ "internalName": "ender_crystal",
+ "displayName": "End Crystal"
+ },
+ {
+ "internalName": "ender_dragon",
+ "displayName": "Ender Dragon"
+ },
+ {
+ "internalName": "ender_pearl",
+ "displayName": "Thrown Ender Pearl"
+ },
+ {
+ "internalName": "enderman",
+ "displayName": "Enderman"
+ },
+ {
+ "internalName": "endermite",
+ "displayName": "Endermite"
+ },
+ {
+ "internalName": "evocation_illager",
+ "displayName": "Evoker"
+ },
+ {
+ "internalName": "evocation_fangs",
+ "displayName": "Evoker Fangs"
+ },
+ {
+ "internalName": "xp_bottle",
+ "displayName": "Thrown Bottle O' Enchanting"
+ },
+ {
+ "internalName": "xp_orb",
+ "displayName": "Experience Orb"
+ },
+ {
+ "internalName": "eye_of_ender_signal",
+ "displayName": "Thrown Eye of Ender"
+ },
+ {
+ "internalName": "falling_block",
+ "displayName": "Falling Block"
+ },
+ {
+ "internalName": "fireball",
+ "displayName": "Fireball"
+ },
+ {
+ "internalName": "fireworks_rocket",
+ "displayName": "Firework Rocket"
+ },
+ {
+ "internalName": "furnace_minecart",
+ "displayName": "Furnace Minecart"
+ },
+ {
+ "internalName": "ghast",
+ "displayName": "Ghast"
+ },
+ {
+ "internalName": "giant",
+ "displayName": "Giant"
+ },
+ {
+ "internalName": "guardian",
+ "displayName": "Guardian"
+ },
+ {
+ "internalName": "hopper_minecart",
+ "displayName": "Hopper Minecart"
+ },
+ {
+ "internalName": "horse",
+ "displayName": "Horse"
+ },
+ {
+ "internalName": "husk",
+ "displayName": "Husk"
+ },
+ {
+ "internalName": "villager_golem",
+ "displayName": "Iron Golem"
+ },
+ {
+ "internalName": "item",
+ "displayName": "Dropped Item"
+ },
+ {
+ "internalName": "item_frame",
+ "displayName": "Item Frame"
+ },
+ {
+ "internalName": "leash_knot",
+ "displayName": "Lead Knot"
+ },
+ {
+ "internalName": "llama",
+ "displayName": "Llama"
+ },
+ {
+ "internalName": "llama_spit",
+ "displayName": "Llama Spit"
+ },
+ {
+ "internalName": "magma_cube",
+ "displayName": "Magma Cube"
+ },
+ {
+ "internalName": "minecart",
+ "displayName": "Minecart"
+ },
+ {
+ "internalName": "mooshroom",
+ "displayName": "Mooshroom"
+ },
+ {
+ "internalName": "mule",
+ "displayName": "Mule"
+ },
+ {
+ "internalName": "ocelot",
+ "displayName": "Ocelot"
+ },
+ {
+ "internalName": "painting",
+ "displayName": "Painting"
+ },
+ {
+ "internalName": "panda",
+ "displayName": "Panda [PS4 EXCLUSIVE]"
+ },
+ {
+ "internalName": "parrot",
+ "displayName": "Parrot"
+ },
+ {
+ "internalName": "phantom",
+ "displayName": "Phantom"
+ },
+ {
+ "internalName": "pig",
+ "displayName": "Pig"
+ },
+ {
+ "internalName": "pillager",
+ "displayName": "Pillager [PS4 EXCLUSIVE]"
+ },
+ {
+ "internalName": "polar_bear",
+ "displayName": "Polar Bear"
+ },
+ {
+ "internalName": "potion",
+ "displayName": "Thrown Potion"
+ },
+ {
+ "internalName": "pufferfish",
+ "displayName": "Pufferfish"
+ },
+ {
+ "internalName": "rabbit",
+ "displayName": "Rabbit"
+ },
+ {
+ "internalName": "ravager",
+ "displayName": "Ravager [PS4 EXCLUSIVE]"
+ },
+ {
+ "internalName": "salmon",
+ "displayName": "Salmon"
+ },
+ {
+ "internalName": "sheep",
+ "displayName": "Sheep"
+ },
+ {
+ "internalName": "shulker",
+ "displayName": "Shulker"
+ },
+ {
+ "internalName": "shulker_bullet",
+ "displayName": "Shulker Bullet"
+ },
+ {
+ "internalName": "silverfish",
+ "displayName": "Silverfish"
+ },
+ {
+ "internalName": "skeleton",
+ "displayName": "Skeleton"
+ },
+ {
+ "internalName": "skeleton_horse",
+ "displayName": "Skeleton Horse"
+ },
+ {
+ "internalName": "slime",
+ "displayName": "Slime"
+ },
+ {
+ "internalName": "small_fireball",
+ "displayName": "Small Fireball"
+ },
+ {
+ "internalName": "snowman",
+ "displayName": "Snow Golem"
+ },
+ {
+ "internalName": "snowball",
+ "displayName": "Thrown Snowball"
+ },
+ {
+ "internalName": "spawner_minecart",
+ "displayName": "Spawner Minecart"
+ },
+ {
+ "internalName": "spectral_arrow",
+ "displayName": "Spectral Arrow"
+ },
+ {
+ "internalName": "spider",
+ "displayName": "Spider"
+ },
+ {
+ "internalName": "squid",
+ "displayName": "Squid"
+ },
+ {
+ "internalName": "stray",
+ "displayName": "Stray"
+ },
+ {
+ "internalName": "tnt",
+ "displayName": "Primed TNT"
+ },
+ {
+ "internalName": "tnt_minecart",
+ "displayName": "TNT Minecart"
+ },
+ {
+ "internalName": "trident",
+ "displayName": "Thrown Trident"
+ },
+ {
+ "internalName": "tropical_fish",
+ "displayName": "Tropical Fish"
+ },
+ {
+ "internalName": "turtle",
+ "displayName": "Turtle"
+ },
+ {
+ "internalName": "vex",
+ "displayName": "Vex"
+ },
+ {
+ "internalName": "villager",
+ "displayName": "Villager"
+ },
+ {
+ "internalName": "vindication_illager",
+ "displayName": "Vindicator"
+ },
+ {
+ "internalName": "wandering_trader",
+ "displayName": "Wandering Trader [PS4 EXCLUSIVE]"
+ },
+ {
+ "internalName": "witch",
+ "displayName": "Witch"
+ },
+ {
+ "internalName": "wither",
+ "displayName": "Wither"
+ },
+ {
+ "internalName": "wither_skeleton",
+ "displayName": "Wither Skeleton"
+ },
+ {
+ "internalName": "wither_skull",
+ "displayName": "Wither Skull"
+ },
+ {
+ "internalName": "wolf",
+ "displayName": "Wolf"
+ },
+ {
+ "internalName": "zombie",
+ "displayName": "Zombie"
+ },
+ {
+ "internalName": "zombie_horse",
+ "displayName": "Zombie Horse"
+ },
+ {
+ "internalName": "zombie_pigman",
+ "displayName": "Zombie Pigman"
+ },
+ {
+ "internalName": "zombie_villager",
+ "displayName": "Zombie Villager"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "illusion_illager",
+ "displayName": "Illusioner"
+ }
+ ]
+}
diff --git a/PCK-Studio/Resources/atlases/entityData.json b/PCK-Studio/Resources/atlases/entityData.json
deleted file mode 100644
index 42c39cb0..00000000
--- a/PCK-Studio/Resources/atlases/entityData.json
+++ /dev/null
@@ -1,369 +0,0 @@
-{
- "COMMENT": "Entity data research by NessieHax (Miku-666) and MattNL",
- "models": [
- { "": "" },
- { "": "" },
- { "": "" },
- { "bat": "Bat" },
- { "blaze": "Blaze" },
- { "boat": "Boat" },
- { "cat": "Cat (PS4 EXCLUSIVE)" },
- { "": "" },
- { "": "" },
- { "chicken": "Chicken" },
- { "cod": "Cod" },
- { "": "" },
- { "cow": "Cow" },
- { "creeper": "Creeper" },
- { "dolphin": "Dolphin" },
- { "": "" },
- { "": "" },
- { "zombie.drowned": "Drowned" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "dragon": "Ender Dragon" },
- { "": "" },
- { "enderman": "Enderman" },
- { "endermite": "Endermite" },
- { "evoker": "Evoker" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "ghast": "Ghast" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "zombie.husk": "Husk" },
- { "irongolem": "Iron Golem" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "llama": "Llama" },
- { "": "" },
- { "lavaslime": "Magma Cube" },
- { "minecart": "Minecart" },
- { "mooshroom": "Mooshroom" },
- { "": "" },
- { "ocelot": "Ocelot" },
- { "": "" },
- { "panda": "Panda (PS4 EXCLUSIVE)" },
- { "parrot": "Parrot" },
- { "phantom": "Phantom" },
- { "pig": "Pig" },
- { "": "" },
- { "polarbear": "Polar Bear" },
- { "": "" },
- { "pufferfish.large": "Pufferfish (Large)" },
- { "rabbit": "Rabbit" },
- { "": "" },
- { "salmon": "Salmon" },
- { "": "" },
- { "shulker": "Shulker" },
- { "": "" },
- { "silverfish": "Silverfish" },
- { "skeleton": "Skeleton" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "snowgolem": "Snow Golem" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "squid": "Squid" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "trident": "Thrown Trident" },
- { "tropicalfish_a": "Tropical Fish (Small)" },
- { "turtle": "Turtle" },
- { "vex": "Vex" },
- { "villager": "Villager" },
- { "vindicator": "Vindicator/Illusioner" },
- { "": "" },
- { "witch": "Witch" },
- { "witherboss": "Wither" },
- { "skeleton.wither": "Wither Skeleton" },
- { "witherboss.armor": "Wither (Armor)" },
- { "wolf": "Wolf" },
- { "zombie": "Zombie" },
- { "": "" },
- { "pigzombie": "Zombie Pigman" },
- { "zombie.villager": "Zombie Villager" },
- { "skeleton_head": "Skeleton Skull" },
- { "skeleton_wither_head": "Wither Skeleton Skull" },
- { "zombie_head": "Zombie Head" },
- { "creeper_head": "Creeper Head" },
- { "dragon_head": "Ender Dragon Head" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "spider": "Spiders" },
- { "bed": "Bed" },
- { "guardian": "Guardians" },
- { "horse.v2": "Horses/Donky/Mule" },
- { "pufferfish.small": "Pufferfish (Small)" },
- { "pufferfish.mid": "Pufferfish (Medium)" },
- { "sheep.sheared": "Sheep (Without Fur)" },
- { "sheep": "Sheep (Fur Only)" },
- { "slime": "Slime (Inner)" },
- { "slime.armor": "Slime (Outer)" },
- { "skeleton.stray": "Stray" },
- { "stray.armor": "Stray (Overlay)" },
- { "tropicalfish_b": "Tropical Fish (Large)" }
- ],
- "materials": [
- { "": "" },
- { "": "" },
- { "": "" },
- { "bat": "Bat" },
- { "blaze_head": "Blaze (Head Only)" },
- { "": "" },
- { "cat": "Cat (PS4 EXCLUSIVE)" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "drowned": "Drowned" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "ender_dragon": "Ender Dragon" },
- { "": "" },
- { "enderman": "Enderman" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "ghast": "Ghast" },
- { "": "" },
- { "guardian": "Guardian" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "iron_golem": "Iron Golem" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "magma_cube": "Magma Cube" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "phantom": "Phantom" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "sheep": "Sheep" },
- { "shulker": "Shulker" },
- { "": "" },
- { "": "" },
- { "skeleton": "Skeleton" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "stray": "Stray" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "wither_boss": "Wither" },
- { "wither_skeleton": "Wither Skeleton" },
- { "": "" },
- { "wolf": "Wolf" },
- { "": "" },
- { "": "" },
- { "zombie_pigman": "Zombie Pigman" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "villager": "Villager (PS4 EXCLUSIVE)" },
- { "zombie_villager": "Zombie Villager (PS4 EXCLUSIVE)" },
- { "": "" },
- { "phantom_invisible": "Phantom (Second Layer)" },
- { "enderman_invisible": "Enderman (Second Layer)" },
- { "spider_invisible": "Spiders (Second Layer)" },
- { "spider": "Spiders" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" }
- ],
- "behaviours": [
- { "area_effect_cloud": "Area Effect Cloud / Particle" },
- { "armor_stand": "Armor Stand" },
- { "arrow": "Arrow" },
- { "bat": "Bat" },
- { "blaze": "Blaze" },
- { "boat": "Boat" },
- { "cat": "Cat (PS4 EXCLUSIVE)" },
- { "cave_spider": "Cave Spider" },
- { "chest_minecart": "Chest Minecart" },
- { "chicken": "Chicken" },
- { "cod": "Cod" },
- { "commandblock_minecart": "Command Block Minecart" },
- { "cow": "Cow" },
- { "creeper": "Creeper" },
- { "dolphin": "Dolphin" },
- { "donkey": "Donkey" },
- { "dragon_fireball": "Dragon Fireball" },
- { "drowned": "Drowned" },
- { "egg": "Thrown Egg" },
- { "elder_guardian": "Elder Guardian" },
- { "ender_crystal": "End Crystal" },
- { "ender_dragon": "Ender Dragon" },
- { "ender_pearl": "Thrown Ender Pearl" },
- { "enderman": "Enderman" },
- { "endermite": "Endermite" },
- { "evocation_illager": "Evoker" },
- { "evocation_fangs": "Evoker Fangs" },
- { "xp_bottle": "Thrown Experience Bottle" },
- { "xp_orb": "Experience Orb" },
- { "eye_of_ender_signal": "Thrown Eye of Ender" },
- { "falling_block": "Falling Block" },
- { "fireball": "Fireball" },
- { "fireworks_rocket": "Firework Rocket" },
- { "furnace_minecart": "Furnace Minecart" },
- { "ghast": "Ghast" },
- { "giant": "Giant" },
- { "guardian": "Guardian" },
- { "hopper_minecart": "Hopper Minecart" },
- { "horse": "Horse" },
- { "husk": "Husk" },
- { "villager_golem": "Iron Golem" },
- { "item": "Dropped Item" },
- { "item_frame": "Item Frame" },
- { "leash_knot": "Lead Knot" },
- { "llama": "Llama" },
- { "llama_spit": "Llama Spit" },
- { "magma_cube": "Magma Cube" },
- { "minecart": "Minecart" },
- { "mooshroom": "Mooshroom" },
- { "mule": "Mule" },
- { "ocelot": "Ocelot" },
- { "painting": "Painting" },
- { "panda": "Panda (PS4 EXCLUSIVE)" },
- { "parrot": "Parrot" },
- { "phantom": "Phantom" },
- { "pig": "Pig" },
- { "pillager": "Pillager (PS4 EXCLUSIVE)" },
- { "polar_bear": "Polar Bear" },
- { "potion": "Thrown Potion" },
- { "pufferfish": "Pufferfish" },
- { "rabbit": "Rabbit" },
- { "ravager": "Ravager (PS4 EXCLUSIVE)" },
- { "salmon": "Salmon" },
- { "sheep": "Sheep" },
- { "shulker": "Shulker" },
- { "shulker_bullet": "Shulker Bullet" },
- { "silverfish": "Silverfish" },
- { "skeleton": "Skeleton" },
- { "skeleton_horse": "Skeleton Horse" },
- { "slime": "Slime" },
- { "small_fireball": "Small Fireball" },
- { "snowman": "Snow Golem" },
- { "snowball": "Thrown Snowball" },
- { "spawner_minecart": "Spawner Minecart" },
- { "spectral_arrow": "Spectral Arrow" },
- { "spider": "Spider" },
- { "squid": "Squid" },
- { "stray": "Stray" },
- { "tnt": "Primed TNT" },
- { "tnt_minecart": "TNT Minecart" },
- { "trident": "Thrown Trident" },
- { "tropical_fish": "Tropical Fish" },
- { "turtle": "Turtle" },
- { "vex": "Vex" },
- { "villager": "Villager" },
- { "vindication_illager": "Vindicator" },
- { "wandering_trader": "Wandering Trader (PS4 Exclusive)" },
- { "witch": "Witch" },
- { "wither": "Wither" },
- { "wither_skeleton": "Wither Skeleton" },
- { "wither_skull": "Wither Skull" },
- { "wolf": "Wolf" },
- { "zombie": "Zombie" },
- { "zombie_horse": "Zombie Horse" },
- { "zombie_pigman": "Zombie Pigman" },
- { "zombie_villager": "Zombie Villager" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" },
- { "": "" }
- ]
-}
diff --git a/PCK-Studio/Resources/atlases/entityMaterialsData.json b/PCK-Studio/Resources/atlases/entityMaterialsData.json
new file mode 100644
index 00000000..259a077b
--- /dev/null
+++ b/PCK-Studio/Resources/atlases/entityMaterialsData.json
@@ -0,0 +1,485 @@
+{
+ "COMMENT": "Entity data research by NessieHax (Miku-666) and MattNL",
+ "entries": [
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "bat",
+ "displayName": "Bat"
+ },
+ {
+ "internalName": "blaze_head",
+ "displayName": "Blaze"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "cat",
+ "displayName": "Cat [PS4 EXCLUSIVE]"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "drowned",
+ "displayName": "Drowned"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "ender_dragon",
+ "displayName": "Ender Dragon"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "enderman",
+ "displayName": "Enderman"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "ghast",
+ "displayName": "Ghast"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "guardian",
+ "displayName": "Guardian"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "iron_golem",
+ "displayName": "Iron Golem"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "magma_cube",
+ "displayName": "Magma Cube"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "phantom",
+ "displayName": "Phantom"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "sheep",
+ "displayName": "Sheep"
+ },
+ {
+ "internalName": "shulker",
+ "displayName": "Shulker"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "skeleton",
+ "displayName": "Skeleton"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "stray",
+ "displayName": "Stray"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "wither_boss",
+ "displayName": "Wither"
+ },
+ {
+ "internalName": "wither_skeleton",
+ "displayName": "Wither Skeleton"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "wolf",
+ "displayName": "Wolf"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "zombie_pigman",
+ "displayName": "Zombie Pigman"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "villager",
+ "displayName": "Villager [PS4 EXCLUSIVE]"
+ },
+ {
+ "internalName": "zombie_villager",
+ "displayName": "Zombie Villager [PS4 EXCLUSIVE]"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "phantom_invisible",
+ "displayName": "Phantom (Overlay)"
+ },
+ {
+ "internalName": "enderman_invisible",
+ "displayName": "Enderman (Overlay)"
+ },
+ {
+ "internalName": "spider_invisible",
+ "displayName": "Spiders (Overlay)"
+ },
+ {
+ "internalName": "spider",
+ "displayName": "Spiders"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ }
+ ]
+}
diff --git a/PCK-Studio/Resources/atlases/entityModelsData.json b/PCK-Studio/Resources/atlases/entityModelsData.json
new file mode 100644
index 00000000..647be99b
--- /dev/null
+++ b/PCK-Studio/Resources/atlases/entityModelsData.json
@@ -0,0 +1,485 @@
+{
+ "COMMENT": "Entity data research by NessieHax (Miku-666) and MattNL",
+ "entries": [
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "bat",
+ "displayName": "Bat"
+ },
+ {
+ "internalName": "blaze",
+ "displayName": "Blaze"
+ },
+ {
+ "internalName": "boat",
+ "displayName": "Boat"
+ },
+ {
+ "internalName": "cat",
+ "displayName": "Cat [PS4 EXCLUSIVE]"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "chicken",
+ "displayName": "Chicken"
+ },
+ {
+ "internalName": "cod",
+ "displayName": "Cod"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "cow",
+ "displayName": "Cow"
+ },
+ {
+ "internalName": "creeper",
+ "displayName": "Creeper"
+ },
+ {
+ "internalName": "dolphin",
+ "displayName": "Dolphin"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "zombie.drowned",
+ "displayName": "Drowned"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "dragon",
+ "displayName": "Ender Dragon"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "enderman",
+ "displayName": "Enderman"
+ },
+ {
+ "internalName": "endermite",
+ "displayName": "Endermite"
+ },
+ {
+ "internalName": "evoker",
+ "displayName": "Evoker"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "ghast",
+ "displayName": "Ghast"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "zombie.husk",
+ "displayName": "Husk"
+ },
+ {
+ "internalName": "irongolem",
+ "displayName": "Iron Golem"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "llama",
+ "displayName": "Llama"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "lavaslime",
+ "displayName": "Magma Cube"
+ },
+ {
+ "internalName": "minecart",
+ "displayName": "Minecart"
+ },
+ {
+ "internalName": "mooshroom",
+ "displayName": "Mooshroom"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "ocelot",
+ "displayName": "Ocelot"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "panda",
+ "displayName": "Panda [PS4 EXCLUSIVE]"
+ },
+ {
+ "internalName": "parrot",
+ "displayName": "Parrot"
+ },
+ {
+ "internalName": "phantom",
+ "displayName": "Phantom"
+ },
+ {
+ "internalName": "pig",
+ "displayName": "Pig"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "polarbear",
+ "displayName": "Polar Bear"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "pufferfish.large",
+ "displayName": "Pufferfish (Large)"
+ },
+ {
+ "internalName": "rabbit",
+ "displayName": "Rabbit"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "salmon",
+ "displayName": "Salmon"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "shulker",
+ "displayName": "Shulker"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "silverfish",
+ "displayName": "Silverfish"
+ },
+ {
+ "internalName": "skeleton",
+ "displayName": "Skeleton"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "snowgolem",
+ "displayName": "Snow Golem"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "squid",
+ "displayName": "Squid"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "trident",
+ "displayName": "Thrown Trident"
+ },
+ {
+ "internalName": "tropicalfish_a",
+ "displayName": "Tropical Fish (Small)"
+ },
+ {
+ "internalName": "turtle",
+ "displayName": "Turtle"
+ },
+ {
+ "internalName": "vex",
+ "displayName": "Vex"
+ },
+ {
+ "internalName": "villager",
+ "displayName": "Villager"
+ },
+ {
+ "internalName": "vindicator",
+ "displayName": "Vindicator/Illusioner"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "witch",
+ "displayName": "Witch"
+ },
+ {
+ "internalName": "witherboss",
+ "displayName": "Wither"
+ },
+ {
+ "internalName": "skeleton.wither",
+ "displayName": "Wither Skeleton"
+ },
+ {
+ "internalName": "witherboss.armor",
+ "displayName": "Wither (Armor)"
+ },
+ {
+ "internalName": "wolf",
+ "displayName": "Wolf"
+ },
+ {
+ "internalName": "zombie",
+ "displayName": "Zombie"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "pigzombie",
+ "displayName": "Zombie Pigman"
+ },
+ {
+ "internalName": "zombie.villager",
+ "displayName": "Zombie Villager"
+ },
+ {
+ "internalName": "skeleton_head",
+ "displayName": "Skeleton Skull"
+ },
+ {
+ "internalName": "skeleton_wither_head",
+ "displayName": "Wither Skeleton Skull"
+ },
+ {
+ "internalName": "zombie_head",
+ "displayName": "Zombie Head"
+ },
+ {
+ "internalName": "creeper_head",
+ "displayName": "Creeper Head"
+ },
+ {
+ "internalName": "dragon_head",
+ "displayName": "Ender Dragon Head"
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "",
+ "displayName": ""
+ },
+ {
+ "internalName": "spider",
+ "displayName": "Spider"
+ },
+ {
+ "internalName": "bed",
+ "displayName": "Bed"
+ },
+ {
+ "internalName": "guardian",
+ "displayName": "Guardian"
+ },
+ {
+ "internalName": "horse.v2",
+ "displayName": "Horse/Donkey/Mule"
+ },
+ {
+ "internalName": "pufferfish.small",
+ "displayName": "Pufferfish (Small)"
+ },
+ {
+ "internalName": "pufferfish.mid",
+ "displayName": "Pufferfish (Medium)"
+ },
+ {
+ "internalName": "sheep.sheared",
+ "displayName": "Sheep (Without Fur)"
+ },
+ {
+ "internalName": "sheep",
+ "displayName": "Sheep (Fur Only)"
+ },
+ {
+ "internalName": "slime",
+ "displayName": "Slime (Inner)"
+ },
+ {
+ "internalName": "slime.armor",
+ "displayName": "Slime (Outer)"
+ },
+ {
+ "internalName": "skeleton.stray",
+ "displayName": "Stray"
+ },
+ {
+ "internalName": "stray.armor",
+ "displayName": "Stray (Overlay)"
+ },
+ {
+ "internalName": "tropicalfish_b",
+ "displayName": "Tropical Fish (Large)"
+ }
+ ]
+}
diff --git a/PCK-Studio/Resources/external/trello.png b/PCK-Studio/Resources/external/trello.png
new file mode 100644
index 00000000..3940ec39
Binary files /dev/null and b/PCK-Studio/Resources/external/trello.png differ
diff --git a/PCK-Studio/Resources/pckCenterHeader.png b/PCK-Studio/Resources/pckCenterHeader.png
deleted file mode 100644
index a6ae59b8..00000000
Binary files a/PCK-Studio/Resources/pckCenterHeader.png and /dev/null differ
diff --git a/Vendor/OMI-Lib b/Vendor/OMI-Lib
index 40795ea8..91878fe5 160000
--- a/Vendor/OMI-Lib
+++ b/Vendor/OMI-Lib
@@ -1 +1 @@
-Subproject commit 40795ea8a58eb1bd4933f1cf50315d5aea4909ef
+Subproject commit 91878fe55cb937bd7538685646bb2f3e15f2af82