From f19aafaf56cf3dea0e586061c0311500532c6207 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Fri, 23 Sep 2022 20:46:29 +0200 Subject: [PATCH 001/110] Add file exists check when opening file via cli --- PCK-Studio/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Program.cs b/PCK-Studio/Program.cs index aea6afa6..8f7c3a2b 100644 --- a/PCK-Studio/Program.cs +++ b/PCK-Studio/Program.cs @@ -17,7 +17,7 @@ namespace PckStudio static void Main(string[] args) { var f = new MainForm(); - if (args.Length > 0 && args[0].EndsWith(".pck")) + if (args.Length > 0 && File.Exists(args[0]) && args[0].EndsWith(".pck")) f.LoadFromPath(args[0]); Application.Run(f); } From 79b1167ea31d355cc4b2811bb69c721e14dcfc74 Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 25 Sep 2022 16:31:42 -0400 Subject: [PATCH 002/110] removed skins.pck support until SubPCK overhaul is finished --- PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs b/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs index 3dd00e26..c6ace3fd 100644 --- a/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs +++ b/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs @@ -21,7 +21,7 @@ namespace PckStudio.Classes.IO _pckfile = file; LUT = _pckfile.GatherPropertiesList(); // fix for Skins.pck - if (!file.HasFile("localisation.loc", PCKFile.FileData.FileType.LocalisationFile) && !LUT.Contains("XMLVERSION")) LUT.Insert(0, "XMLVERSION"); + //if (!file.HasFile("localisation.loc", PCKFile.FileData.FileType.LocalisationFile) && !LUT.Contains("XMLVERSION")) LUT.Insert(0, "XMLVERSION"); } private void WriteToStream(Stream stream) From d6e3e63ba8ca1e930c367ff1194da0818425dd25 Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 25 Sep 2022 16:32:49 -0400 Subject: [PATCH 003/110] added fix for paths with backslashes --- PCK-Studio/MainForm.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 7b4b6d24..045f11e5 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -245,8 +245,9 @@ namespace PckStudio { foreach (var file in pckFile.Files) { - // Replace backward slashes('\') with forward slashes('/') since some filepath use backward slashes - TreeNode node = BuildNodeTreeBySeperator(root, file.filepath.Replace('\\', '/'), '/'); + // Replace backward slashes('\') with forward slashes('/') since some filepath use backward slashes + file.filepath = file.filepath.Replace('\\', '/'); // fix any file paths that may be incorrect + TreeNode node = BuildNodeTreeBySeperator(root, file.filepath, '/'); node.Tag = file; switch (file.filetype) { From 13841bbbcad08de357933622906965be5769344f Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 25 Sep 2022 16:43:10 -0400 Subject: [PATCH 004/110] Fixed incorrect display of .col file icon --- .../Resources/iconImageList/COL ICON.png | Bin 15650 -> 15824 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/PCK-Studio/Resources/iconImageList/COL ICON.png b/PCK-Studio/Resources/iconImageList/COL ICON.png index 00fdba2a2b021d312d8a45a01af1a82a2dcd268a..9037a51c33fa913aae14634c27b0869969fb49f9 100644 GIT binary patch literal 15824 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 EABoQ|y8r+H From 7fc01ddc6ed4b5eaed3622eafcefdf7e44d7a64b Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 25 Sep 2022 16:47:03 -0400 Subject: [PATCH 005/110] Fixed rare crash when playing animations --- PCK-Studio/Forms/Editor/AnimationEditor.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index 003931ee..e8ccd8c8 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -293,6 +293,8 @@ namespace PckStudio.Forms.Editor private void StartAnimationBtn_Click(object sender, EventArgs e) { + // crash fix: when pushing the play button on occasions, the animation will play twice the intended speed and crash PCK Studio after one iteration + player.Stop(); // force the player to stop before starting AnimationPlayBtn.Enabled = !(AnimationStopBtn.Enabled = !AnimationStopBtn.Enabled); if (currentAnimation.FrameCount > 1) { From 6ba9bc1999ec96223f2a7628382a8ca9621f3260 Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 25 Sep 2022 17:12:39 -0400 Subject: [PATCH 006/110] Interpolate checkbox now updates interpolation flag --- PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs | 3 ++- PCK-Studio/Forms/Editor/AnimationEditor.cs | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs b/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs index c1adf481..ddfb948a 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs @@ -227,6 +227,7 @@ this.InterpolationCheckbox.Text = "Interpolates (not simulated above)"; this.InterpolationCheckbox.Theme = MetroFramework.MetroThemeStyle.Dark; this.InterpolationCheckbox.UseSelectable = true; + this.InterpolationCheckbox.CheckedChanged += new System.EventHandler(this.InterpolationCheckbox_CheckedChanged); // // AnimationPlayBtn // @@ -260,7 +261,7 @@ this.tileLabel.Location = new System.Drawing.Point(20, 311); this.tileLabel.MinimumSize = new System.Drawing.Size(170, 19); this.tileLabel.Name = "tileLabel"; - this.tileLabel.Size = new System.Drawing.Size(170, 19); + this.tileLabel.Size = new System.Drawing.Size(57, 19); this.tileLabel.TabIndex = 20; this.tileLabel.Text = "tileLabel"; this.tileLabel.Theme = MetroFramework.MetroThemeStyle.Dark; diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index e8ccd8c8..3aba640b 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -607,5 +607,10 @@ namespace PckStudio.Forms.Editor "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"); } + private void InterpolationCheckbox_CheckedChanged(object sender, EventArgs e) + { + // Interpolation flag wasn't being updated when the check box changed, this fixes the issue + currentAnimation.Interpolate = InterpolationCheckbox.Checked; + } } } From ab4e9be1bcc493dd6e72c43efbb8ad315065b851 Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 25 Sep 2022 17:19:07 -0400 Subject: [PATCH 007/110] fix for multiple BuildMainTreeView calls in GenerateMipMap --- PCK-Studio/MainForm.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 045f11e5..44b6b000 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -2923,8 +2923,8 @@ namespace PckStudio MipMappedFile.SetData(texStream.ToArray()); currentPCK.Files.Add(MipMappedFile); - BuildMainTreeView(); } + BuildMainTreeView(); } } } From 851f2f6015ec5a9ccb9cf42e20062ac6b711221e Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 25 Sep 2022 17:20:28 -0400 Subject: [PATCH 008/110] Improved placement of generated mipmaps --- PCK-Studio/MainForm.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 44b6b000..049c22a7 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -2922,7 +2922,7 @@ namespace PckStudio mippedTexture.Save(texStream, ImageFormat.Png); MipMappedFile.SetData(texStream.ToArray()); - currentPCK.Files.Add(MipMappedFile); + currentPCK.Files.Insert(currentPCK.Files.IndexOf(file) + i - 1, MipMappedFile); } BuildMainTreeView(); } From f3e13b1ffca50b66777c363bfca1e9afa657900a Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 25 Sep 2022 17:29:14 -0400 Subject: [PATCH 009/110] ChangeTile now starts with "Blocks" tab selected --- .../Animation/ChangeTile.Designer.cs | 349 +++++++++--------- 1 file changed, 175 insertions(+), 174 deletions(-) diff --git a/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.Designer.cs b/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.Designer.cs index 0f269246..969ddde6 100644 --- a/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.Designer.cs +++ b/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.Designer.cs @@ -28,180 +28,181 @@ /// private void InitializeComponent() { - this.acceptBtn = new System.Windows.Forms.Button(); - this.CancelBtn = new System.Windows.Forms.Button(); - this.treeViewBlocks = new System.Windows.Forms.TreeView(); - this.treeViewItems = new System.Windows.Forms.TreeView(); - this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); - this.metroLabel2 = new MetroFramework.Controls.MetroLabel(); - this.metroTextBox1 = new MetroFramework.Controls.MetroTextBox(); - this.metroTabControl1 = new MetroFramework.Controls.MetroTabControl(); - this.Blocks = new System.Windows.Forms.TabPage(); - this.Items = new System.Windows.Forms.TabPage(); - this.metroTabControl1.SuspendLayout(); - this.Blocks.SuspendLayout(); - this.Items.SuspendLayout(); - this.SuspendLayout(); - // - // acceptBtn - // - this.acceptBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.acceptBtn.ForeColor = System.Drawing.Color.White; - this.acceptBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.acceptBtn.Location = new System.Drawing.Point(55, 233); - this.acceptBtn.Name = "acceptBtn"; - this.acceptBtn.Size = new System.Drawing.Size(75, 23); - this.acceptBtn.TabIndex = 7; - this.acceptBtn.Text = "Save"; - this.acceptBtn.UseVisualStyleBackColor = true; - this.acceptBtn.Click += new System.EventHandler(this.AcceptBtn_Click); - // - // CancelBtn - // - this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.CancelBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.CancelBtn.ForeColor = System.Drawing.Color.White; - this.CancelBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.CancelBtn.Location = new System.Drawing.Point(135, 233); - this.CancelBtn.Name = "CancelBtn"; - this.CancelBtn.Size = new System.Drawing.Size(75, 23); - this.CancelBtn.TabIndex = 13; - this.CancelBtn.Text = "Cancel"; - this.CancelBtn.UseVisualStyleBackColor = true; - this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); - // - // treeView1 - // - this.treeViewBlocks.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.treeViewBlocks.Dock = System.Windows.Forms.DockStyle.Fill; - this.treeViewBlocks.ForeColor = System.Drawing.Color.White; - this.treeViewBlocks.Location = new System.Drawing.Point(0, 0); - this.treeViewBlocks.Name = "treeView1"; - this.treeViewBlocks.Size = new System.Drawing.Size(184, 125); - this.treeViewBlocks.TabIndex = 14; - this.treeViewBlocks.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViews_AfterSelect); - // - // treeView2 - // - this.treeViewItems.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.treeViewItems.Dock = System.Windows.Forms.DockStyle.Fill; - this.treeViewItems.ForeColor = System.Drawing.Color.White; - this.treeViewItems.Location = new System.Drawing.Point(0, 0); - this.treeViewItems.Name = "treeView2"; - this.treeViewItems.Size = new System.Drawing.Size(184, 125); - this.treeViewItems.TabIndex = 14; - this.treeViewItems.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViews_AfterSelect); - // - // metroLabel1 - // - this.metroLabel1.AutoSize = true; - this.metroLabel1.Location = new System.Drawing.Point(75, 13); - this.metroLabel1.Name = "metroLabel1"; - this.metroLabel1.Size = new System.Drawing.Size(114, 19); - this.metroLabel1.TabIndex = 15; - this.metroLabel1.Text = "Please select a tile"; - this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // metroLabel2 - // - this.metroLabel2.AutoSize = true; - this.metroLabel2.Location = new System.Drawing.Point(36, 35); - this.metroLabel2.Name = "metroLabel2"; - this.metroLabel2.Size = new System.Drawing.Size(46, 19); - this.metroLabel2.TabIndex = 16; - this.metroLabel2.Text = "Filter: "; - this.metroLabel2.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // metroTextBox1 - // - // - // - // - this.metroTextBox1.CustomButton.Image = null; - this.metroTextBox1.CustomButton.Location = new System.Drawing.Point(113, 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[0]; - this.metroTextBox1.Location = new System.Drawing.Point(75, 35); - 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(135, 23); - this.metroTextBox1.TabIndex = 17; - this.metroTextBox1.Theme = MetroFramework.MetroThemeStyle.Dark; - 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); - this.metroTextBox1.TextChanged += new System.EventHandler(this.filter_TextChanged); - // - // metroTabControl1 - // - this.metroTabControl1.Controls.Add(this.Blocks); - this.metroTabControl1.Controls.Add(this.Items); - this.metroTabControl1.Location = new System.Drawing.Point(36, 60); - this.metroTabControl1.Name = "metroTabControl1"; - this.metroTabControl1.SelectedIndex = 1; - this.metroTabControl1.Size = new System.Drawing.Size(192, 167); - this.metroTabControl1.TabIndex = 18; - this.metroTabControl1.Theme = MetroFramework.MetroThemeStyle.Dark; - this.metroTabControl1.UseSelectable = true; - // - // Blocks - // - this.Blocks.BackColor = System.Drawing.SystemColors.WindowFrame; - this.Blocks.Controls.Add(this.treeViewBlocks); - this.Blocks.Location = new System.Drawing.Point(4, 38); - this.Blocks.Name = "Blocks"; - this.Blocks.Size = new System.Drawing.Size(184, 125); - this.Blocks.TabIndex = 0; - this.Blocks.Text = "Blocks"; - // - // Items - // - this.Items.BackColor = System.Drawing.SystemColors.WindowFrame; - this.Items.Controls.Add(this.treeViewItems); - this.Items.Location = new System.Drawing.Point(4, 38); - this.Items.Name = "Items"; - this.Items.Size = new System.Drawing.Size(184, 125); - this.Items.TabIndex = 0; - this.Items.Text = "Items"; - // - // ChangeTile - // - this.AcceptButton = this.acceptBtn; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.CancelBtn; - this.ClientSize = new System.Drawing.Size(264, 264); - this.ControlBox = false; - this.Controls.Add(this.metroTabControl1); - this.Controls.Add(this.metroTextBox1); - this.Controls.Add(this.metroLabel2); - this.Controls.Add(this.metroLabel1); - this.Controls.Add(this.CancelBtn); - this.Controls.Add(this.acceptBtn); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "ChangeTile"; - this.Resizable = false; - this.Style = MetroFramework.MetroColorStyle.Silver; - this.Theme = MetroFramework.MetroThemeStyle.Dark; - this.metroTabControl1.ResumeLayout(false); - this.Blocks.ResumeLayout(false); - this.Items.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); + this.acceptBtn = new System.Windows.Forms.Button(); + this.CancelBtn = new System.Windows.Forms.Button(); + this.treeViewBlocks = new System.Windows.Forms.TreeView(); + this.treeViewItems = new System.Windows.Forms.TreeView(); + this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); + this.metroLabel2 = new MetroFramework.Controls.MetroLabel(); + this.metroTextBox1 = new MetroFramework.Controls.MetroTextBox(); + this.metroTabControl1 = new MetroFramework.Controls.MetroTabControl(); + this.Blocks = new System.Windows.Forms.TabPage(); + this.Items = new System.Windows.Forms.TabPage(); + this.metroTabControl1.SuspendLayout(); + this.Blocks.SuspendLayout(); + this.Items.SuspendLayout(); + this.SuspendLayout(); + // + // acceptBtn + // + this.acceptBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.acceptBtn.ForeColor = System.Drawing.Color.White; + this.acceptBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.acceptBtn.Location = new System.Drawing.Point(55, 233); + this.acceptBtn.Name = "acceptBtn"; + this.acceptBtn.Size = new System.Drawing.Size(75, 23); + this.acceptBtn.TabIndex = 7; + this.acceptBtn.Text = "Save"; + this.acceptBtn.UseVisualStyleBackColor = true; + this.acceptBtn.Click += new System.EventHandler(this.AcceptBtn_Click); + // + // CancelBtn + // + this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.CancelBtn.ForeColor = System.Drawing.Color.White; + this.CancelBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CancelBtn.Location = new System.Drawing.Point(135, 233); + this.CancelBtn.Name = "CancelBtn"; + this.CancelBtn.Size = new System.Drawing.Size(75, 23); + this.CancelBtn.TabIndex = 13; + this.CancelBtn.Text = "Cancel"; + this.CancelBtn.UseVisualStyleBackColor = true; + this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); + // + // treeViewBlocks + // + this.treeViewBlocks.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.treeViewBlocks.Dock = System.Windows.Forms.DockStyle.Fill; + this.treeViewBlocks.ForeColor = System.Drawing.Color.White; + this.treeViewBlocks.Location = new System.Drawing.Point(0, 0); + this.treeViewBlocks.Name = "treeViewBlocks"; + this.treeViewBlocks.Size = new System.Drawing.Size(184, 125); + this.treeViewBlocks.TabIndex = 14; + this.treeViewBlocks.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViews_AfterSelect); + // + // treeViewItems + // + this.treeViewItems.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.treeViewItems.Dock = System.Windows.Forms.DockStyle.Fill; + this.treeViewItems.ForeColor = System.Drawing.Color.White; + this.treeViewItems.Location = new System.Drawing.Point(0, 0); + this.treeViewItems.Name = "treeViewItems"; + this.treeViewItems.Size = new System.Drawing.Size(184, 125); + this.treeViewItems.TabIndex = 14; + this.treeViewItems.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViews_AfterSelect); + // + // metroLabel1 + // + this.metroLabel1.AutoSize = true; + this.metroLabel1.Location = new System.Drawing.Point(75, 13); + this.metroLabel1.Name = "metroLabel1"; + this.metroLabel1.Size = new System.Drawing.Size(114, 19); + this.metroLabel1.TabIndex = 15; + this.metroLabel1.Text = "Please select a tile"; + this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // metroLabel2 + // + this.metroLabel2.AutoSize = true; + this.metroLabel2.Location = new System.Drawing.Point(36, 35); + this.metroLabel2.Name = "metroLabel2"; + this.metroLabel2.Size = new System.Drawing.Size(46, 19); + this.metroLabel2.TabIndex = 16; + this.metroLabel2.Text = "Filter: "; + this.metroLabel2.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // metroTextBox1 + // + // + // + // + this.metroTextBox1.CustomButton.Image = null; + this.metroTextBox1.CustomButton.Location = new System.Drawing.Point(113, 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[0]; + this.metroTextBox1.Location = new System.Drawing.Point(75, 35); + 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(135, 23); + this.metroTextBox1.TabIndex = 17; + this.metroTextBox1.Theme = MetroFramework.MetroThemeStyle.Dark; + 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); + this.metroTextBox1.TextChanged += new System.EventHandler(this.filter_TextChanged); + // + // metroTabControl1 + // + this.metroTabControl1.Controls.Add(this.Blocks); + this.metroTabControl1.Controls.Add(this.Items); + this.metroTabControl1.Location = new System.Drawing.Point(36, 60); + this.metroTabControl1.Name = "metroTabControl1"; + this.metroTabControl1.SelectedIndex = 0; + this.metroTabControl1.Size = new System.Drawing.Size(192, 167); + this.metroTabControl1.Style = MetroFramework.MetroColorStyle.White; + this.metroTabControl1.TabIndex = 18; + this.metroTabControl1.Theme = MetroFramework.MetroThemeStyle.Dark; + this.metroTabControl1.UseSelectable = true; + // + // Blocks + // + this.Blocks.BackColor = System.Drawing.SystemColors.WindowFrame; + this.Blocks.Controls.Add(this.treeViewBlocks); + this.Blocks.Location = new System.Drawing.Point(4, 38); + this.Blocks.Name = "Blocks"; + this.Blocks.Size = new System.Drawing.Size(184, 125); + this.Blocks.TabIndex = 0; + this.Blocks.Text = "Blocks"; + // + // Items + // + this.Items.BackColor = System.Drawing.SystemColors.WindowFrame; + this.Items.Controls.Add(this.treeViewItems); + this.Items.Location = new System.Drawing.Point(4, 38); + this.Items.Name = "Items"; + this.Items.Size = new System.Drawing.Size(184, 125); + this.Items.TabIndex = 0; + this.Items.Text = "Items"; + // + // ChangeTile + // + this.AcceptButton = this.acceptBtn; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.CancelBtn; + this.ClientSize = new System.Drawing.Size(264, 264); + this.ControlBox = false; + this.Controls.Add(this.metroTabControl1); + this.Controls.Add(this.metroTextBox1); + this.Controls.Add(this.metroLabel2); + this.Controls.Add(this.metroLabel1); + this.Controls.Add(this.CancelBtn); + this.Controls.Add(this.acceptBtn); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChangeTile"; + this.Resizable = false; + this.Style = MetroFramework.MetroColorStyle.Silver; + this.Theme = MetroFramework.MetroThemeStyle.Dark; + this.metroTabControl1.ResumeLayout(false); + this.Blocks.ResumeLayout(false); + this.Items.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); } From 84349f281ac58ea8f693312d8871af85d3d6c480 Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 25 Sep 2022 17:30:04 -0400 Subject: [PATCH 010/110] Expanded UI for other water color categories in Color Editor --- PCK-Studio/Forms/Editor/COLEditor.Designer.cs | 526 +++++++++--------- PCK-Studio/Forms/Editor/COLEditor.resx | 120 ++-- 2 files changed, 349 insertions(+), 297 deletions(-) diff --git a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs index eb5110c1..b0cf8ebd 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs @@ -31,278 +31,292 @@ namespace PckStudio.Forms.Editor /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(COLEditor)); - this.metroPanel1 = new MetroFramework.Controls.MetroPanel(); - this.setColorBtn = new MetroFramework.Controls.MetroButton(); - this.blueUpDown = new System.Windows.Forms.NumericUpDown(); - this.greenUpDown = new System.Windows.Forms.NumericUpDown(); - this.redUpDown = new System.Windows.Forms.NumericUpDown(); - this.alphaUpDown = new System.Windows.Forms.NumericUpDown(); - this.alphaLabel = new MetroFramework.Controls.MetroLabel(); - this.blueLabel = new MetroFramework.Controls.MetroLabel(); - this.greenLabel = new MetroFramework.Controls.MetroLabel(); - this.redLabel = new MetroFramework.Controls.MetroLabel(); - this.colorTextbox = new MetroFramework.Controls.MetroTextBox(); - this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.menuStrip = new System.Windows.Forms.MenuStrip(); - this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.saveToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.waterTab = new System.Windows.Forms.TabPage(); - this.treeView2 = new System.Windows.Forms.TreeView(); - this.colorsTab = new System.Windows.Forms.TabPage(); - this.treeView1 = new System.Windows.Forms.TreeView(); - this.tabControl = new MetroFramework.Controls.MetroTabControl(); - this.metroPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.redUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.alphaUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - this.menuStrip.SuspendLayout(); - this.waterTab.SuspendLayout(); - this.colorsTab.SuspendLayout(); - this.tabControl.SuspendLayout(); - this.SuspendLayout(); - // - // metroPanel1 - // - this.metroPanel1.Controls.Add(this.setColorBtn); - this.metroPanel1.Controls.Add(this.blueUpDown); - this.metroPanel1.Controls.Add(this.greenUpDown); - this.metroPanel1.Controls.Add(this.redUpDown); - this.metroPanel1.Controls.Add(this.alphaUpDown); - this.metroPanel1.Controls.Add(this.alphaLabel); - this.metroPanel1.Controls.Add(this.blueLabel); - this.metroPanel1.Controls.Add(this.greenLabel); - this.metroPanel1.Controls.Add(this.redLabel); - this.metroPanel1.Controls.Add(this.colorTextbox); - this.metroPanel1.Controls.Add(this.metroLabel1); - this.metroPanel1.Controls.Add(this.pictureBox1); - resources.ApplyResources(this.metroPanel1, "metroPanel1"); - this.metroPanel1.HorizontalScrollbarBarColor = true; - this.metroPanel1.HorizontalScrollbarHighlightOnWheel = false; - this.metroPanel1.HorizontalScrollbarSize = 10; - this.metroPanel1.Name = "metroPanel1"; - this.metroPanel1.Style = MetroFramework.MetroColorStyle.Silver; - this.metroPanel1.Theme = MetroFramework.MetroThemeStyle.Dark; - this.metroPanel1.VerticalScrollbarBarColor = true; - this.metroPanel1.VerticalScrollbarHighlightOnWheel = false; - this.metroPanel1.VerticalScrollbarSize = 10; - // - // setColorBtn - // - resources.ApplyResources(this.setColorBtn, "setColorBtn"); - this.setColorBtn.Name = "setColorBtn"; - this.setColorBtn.Theme = MetroFramework.MetroThemeStyle.Dark; - this.setColorBtn.UseSelectable = true; - this.setColorBtn.Click += new System.EventHandler(this.setColorBtn_Click); - // - // blueUpDown - // - this.blueUpDown.BackColor = System.Drawing.SystemColors.Desktop; - this.blueUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); - resources.ApplyResources(this.blueUpDown, "blueUpDown"); - this.blueUpDown.Maximum = new decimal(new int[] { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(COLEditor)); + this.metroPanel1 = new MetroFramework.Controls.MetroPanel(); + this.setColorBtn = new MetroFramework.Controls.MetroButton(); + this.blueUpDown = new System.Windows.Forms.NumericUpDown(); + this.greenUpDown = new System.Windows.Forms.NumericUpDown(); + this.redUpDown = new System.Windows.Forms.NumericUpDown(); + this.alphaUpDown = new System.Windows.Forms.NumericUpDown(); + this.alphaLabel = new MetroFramework.Controls.MetroLabel(); + this.blueLabel = new MetroFramework.Controls.MetroLabel(); + this.greenLabel = new MetroFramework.Controls.MetroLabel(); + this.redLabel = new MetroFramework.Controls.MetroLabel(); + this.colorTextbox = new MetroFramework.Controls.MetroTextBox(); + this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.menuStrip = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.saveToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.waterTab = new System.Windows.Forms.TabPage(); + this.treeView2 = new System.Windows.Forms.TreeView(); + this.colorsTab = new System.Windows.Forms.TabPage(); + this.treeView1 = 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.metroPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.redUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.alphaUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.menuStrip.SuspendLayout(); + this.waterTab.SuspendLayout(); + this.colorsTab.SuspendLayout(); + this.tabControl.SuspendLayout(); + this.SuspendLayout(); + // + // metroPanel1 + // + this.metroPanel1.Controls.Add(this.setColorBtn); + this.metroPanel1.Controls.Add(this.blueUpDown); + this.metroPanel1.Controls.Add(this.greenUpDown); + this.metroPanel1.Controls.Add(this.redUpDown); + this.metroPanel1.Controls.Add(this.alphaUpDown); + this.metroPanel1.Controls.Add(this.alphaLabel); + this.metroPanel1.Controls.Add(this.blueLabel); + this.metroPanel1.Controls.Add(this.greenLabel); + this.metroPanel1.Controls.Add(this.redLabel); + this.metroPanel1.Controls.Add(this.colorTextbox); + this.metroPanel1.Controls.Add(this.metroLabel1); + this.metroPanel1.Controls.Add(this.pictureBox1); + resources.ApplyResources(this.metroPanel1, "metroPanel1"); + this.metroPanel1.HorizontalScrollbarBarColor = true; + this.metroPanel1.HorizontalScrollbarHighlightOnWheel = false; + this.metroPanel1.HorizontalScrollbarSize = 10; + this.metroPanel1.Name = "metroPanel1"; + this.metroPanel1.Style = MetroFramework.MetroColorStyle.Silver; + this.metroPanel1.Theme = MetroFramework.MetroThemeStyle.Dark; + this.metroPanel1.VerticalScrollbarBarColor = true; + this.metroPanel1.VerticalScrollbarHighlightOnWheel = false; + this.metroPanel1.VerticalScrollbarSize = 10; + // + // setColorBtn + // + resources.ApplyResources(this.setColorBtn, "setColorBtn"); + this.setColorBtn.Name = "setColorBtn"; + this.setColorBtn.Theme = MetroFramework.MetroThemeStyle.Dark; + this.setColorBtn.UseSelectable = true; + this.setColorBtn.Click += new System.EventHandler(this.setColorBtn_Click); + // + // blueUpDown + // + this.blueUpDown.BackColor = System.Drawing.SystemColors.Desktop; + this.blueUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); + resources.ApplyResources(this.blueUpDown, "blueUpDown"); + this.blueUpDown.Maximum = new decimal(new int[] { 255, 0, 0, 0}); - this.blueUpDown.Name = "blueUpDown"; - this.blueUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); - // - // greenUpDown - // - this.greenUpDown.BackColor = System.Drawing.SystemColors.Desktop; - this.greenUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); - resources.ApplyResources(this.greenUpDown, "greenUpDown"); - this.greenUpDown.Maximum = new decimal(new int[] { + this.blueUpDown.Name = "blueUpDown"; + this.blueUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); + // + // greenUpDown + // + this.greenUpDown.BackColor = System.Drawing.SystemColors.Desktop; + this.greenUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); + resources.ApplyResources(this.greenUpDown, "greenUpDown"); + this.greenUpDown.Maximum = new decimal(new int[] { 255, 0, 0, 0}); - this.greenUpDown.Name = "greenUpDown"; - this.greenUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); - // - // redUpDown - // - this.redUpDown.BackColor = System.Drawing.SystemColors.Desktop; - this.redUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); - resources.ApplyResources(this.redUpDown, "redUpDown"); - this.redUpDown.Maximum = new decimal(new int[] { + this.greenUpDown.Name = "greenUpDown"; + this.greenUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); + // + // redUpDown + // + this.redUpDown.BackColor = System.Drawing.SystemColors.Desktop; + this.redUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); + resources.ApplyResources(this.redUpDown, "redUpDown"); + this.redUpDown.Maximum = new decimal(new int[] { 255, 0, 0, 0}); - this.redUpDown.Name = "redUpDown"; - this.redUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); - // - // alphaUpDown - // - this.alphaUpDown.BackColor = System.Drawing.SystemColors.Desktop; - this.alphaUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); - resources.ApplyResources(this.alphaUpDown, "alphaUpDown"); - this.alphaUpDown.Maximum = new decimal(new int[] { + this.redUpDown.Name = "redUpDown"; + this.redUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); + // + // alphaUpDown + // + this.alphaUpDown.BackColor = System.Drawing.SystemColors.Desktop; + this.alphaUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); + resources.ApplyResources(this.alphaUpDown, "alphaUpDown"); + this.alphaUpDown.Maximum = new decimal(new int[] { 255, 0, 0, 0}); - this.alphaUpDown.Name = "alphaUpDown"; - this.alphaUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); - // - // alphaLabel - // - resources.ApplyResources(this.alphaLabel, "alphaLabel"); - this.alphaLabel.Name = "alphaLabel"; - this.alphaLabel.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // blueLabel - // - resources.ApplyResources(this.blueLabel, "blueLabel"); - this.blueLabel.Name = "blueLabel"; - this.blueLabel.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // greenLabel - // - resources.ApplyResources(this.greenLabel, "greenLabel"); - this.greenLabel.Name = "greenLabel"; - this.greenLabel.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // redLabel - // - resources.ApplyResources(this.redLabel, "redLabel"); - this.redLabel.Name = "redLabel"; - this.redLabel.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // colorTextbox - // - // - // - // - this.colorTextbox.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image"))); - this.colorTextbox.CustomButton.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("resource.ImeMode"))); - this.colorTextbox.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location"))); - this.colorTextbox.CustomButton.Name = ""; - this.colorTextbox.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size"))); - this.colorTextbox.CustomButton.Style = MetroFramework.MetroColorStyle.Blue; - this.colorTextbox.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex"))); - this.colorTextbox.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light; - this.colorTextbox.CustomButton.UseSelectable = true; - this.colorTextbox.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible"))); - this.colorTextbox.Lines = new string[0]; - resources.ApplyResources(this.colorTextbox, "colorTextbox"); - this.colorTextbox.MaxLength = 32767; - this.colorTextbox.Name = "colorTextbox"; - this.colorTextbox.PasswordChar = '\0'; - this.colorTextbox.ScrollBars = System.Windows.Forms.ScrollBars.None; - this.colorTextbox.SelectedText = ""; - this.colorTextbox.SelectionLength = 0; - this.colorTextbox.SelectionStart = 0; - this.colorTextbox.ShortcutsEnabled = true; - this.colorTextbox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.colorTextbox.UseSelectable = true; - 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); - // - // metroLabel1 - // - resources.ApplyResources(this.metroLabel1, "metroLabel1"); - this.metroLabel1.Name = "metroLabel1"; - this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // pictureBox1 - // - this.pictureBox1.BackColor = System.Drawing.Color.Gray; - resources.ApplyResources(this.pictureBox1, "pictureBox1"); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.TabStop = false; - // - // menuStrip - // - resources.ApplyResources(this.menuStrip, "menuStrip"); - 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.alphaUpDown.Name = "alphaUpDown"; + this.alphaUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); + // + // alphaLabel + // + resources.ApplyResources(this.alphaLabel, "alphaLabel"); + this.alphaLabel.Name = "alphaLabel"; + this.alphaLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // blueLabel + // + resources.ApplyResources(this.blueLabel, "blueLabel"); + this.blueLabel.Name = "blueLabel"; + this.blueLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // greenLabel + // + resources.ApplyResources(this.greenLabel, "greenLabel"); + this.greenLabel.Name = "greenLabel"; + this.greenLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // redLabel + // + resources.ApplyResources(this.redLabel, "redLabel"); + this.redLabel.Name = "redLabel"; + this.redLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // colorTextbox + // + // + // + // + this.colorTextbox.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image"))); + this.colorTextbox.CustomButton.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("resource.ImeMode"))); + this.colorTextbox.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location"))); + this.colorTextbox.CustomButton.Name = ""; + this.colorTextbox.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size"))); + this.colorTextbox.CustomButton.Style = MetroFramework.MetroColorStyle.Blue; + this.colorTextbox.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex"))); + this.colorTextbox.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light; + this.colorTextbox.CustomButton.UseSelectable = true; + this.colorTextbox.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible"))); + this.colorTextbox.Lines = new string[0]; + resources.ApplyResources(this.colorTextbox, "colorTextbox"); + this.colorTextbox.MaxLength = 32767; + this.colorTextbox.Name = "colorTextbox"; + this.colorTextbox.PasswordChar = '\0'; + this.colorTextbox.ScrollBars = System.Windows.Forms.ScrollBars.None; + this.colorTextbox.SelectedText = ""; + this.colorTextbox.SelectionLength = 0; + this.colorTextbox.SelectionStart = 0; + this.colorTextbox.ShortcutsEnabled = true; + this.colorTextbox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.colorTextbox.UseSelectable = true; + 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); + // + // metroLabel1 + // + resources.ApplyResources(this.metroLabel1, "metroLabel1"); + this.metroLabel1.Name = "metroLabel1"; + this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // pictureBox1 + // + this.pictureBox1.BackColor = System.Drawing.Color.Gray; + resources.ApplyResources(this.pictureBox1, "pictureBox1"); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.TabStop = false; + // + // menuStrip + // + resources.ApplyResources(this.menuStrip, "menuStrip"); + 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.menuStrip.Name = "menuStrip"; - // - // fileToolStripMenuItem - // - this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuStrip.Name = "menuStrip"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.saveToolStripMenuItem1}); - this.fileToolStripMenuItem.ForeColor = System.Drawing.Color.White; - this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; - resources.ApplyResources(this.fileToolStripMenuItem, "fileToolStripMenuItem"); - // - // saveToolStripMenuItem1 - // - resources.ApplyResources(this.saveToolStripMenuItem1, "saveToolStripMenuItem1"); - this.saveToolStripMenuItem1.Name = "saveToolStripMenuItem1"; - this.saveToolStripMenuItem1.Click += new System.EventHandler(this.saveToolStripMenuItem1_Click); - // - // waterTab - // - this.waterTab.BackColor = System.Drawing.SystemColors.WindowFrame; - this.waterTab.Controls.Add(this.treeView2); - resources.ApplyResources(this.waterTab, "waterTab"); - this.waterTab.Name = "waterTab"; - // - // treeView2 - // - resources.ApplyResources(this.treeView2, "treeView2"); - this.treeView2.Name = "treeView2"; - this.treeView2.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView2_AfterSelect); - this.treeView2.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView2_KeyDown); - // - // colorsTab - // - this.colorsTab.BackColor = System.Drawing.SystemColors.WindowFrame; - this.colorsTab.Controls.Add(this.treeView1); - resources.ApplyResources(this.colorsTab, "colorsTab"); - this.colorsTab.Name = "colorsTab"; - // - // treeView1 - // - resources.ApplyResources(this.treeView1, "treeView1"); - this.treeView1.Name = "treeView1"; - this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); - this.treeView1.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.Name = "tabControl"; - this.tabControl.SelectedIndex = 0; - this.tabControl.Style = MetroFramework.MetroColorStyle.White; - this.tabControl.Theme = MetroFramework.MetroThemeStyle.Dark; - this.tabControl.UseSelectable = true; - // - // COLEditor - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.menuStrip); - this.Controls.Add(this.tabControl); - this.Controls.Add(this.metroPanel1); - this.ForeColor = System.Drawing.SystemColors.ControlText; - this.Name = "COLEditor"; - this.Style = MetroFramework.MetroColorStyle.Silver; - this.Theme = MetroFramework.MetroThemeStyle.Dark; - this.metroPanel1.ResumeLayout(false); - this.metroPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.redUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.alphaUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - this.menuStrip.ResumeLayout(false); - this.menuStrip.PerformLayout(); - this.waterTab.ResumeLayout(false); - this.colorsTab.ResumeLayout(false); - this.tabControl.ResumeLayout(false); - this.ResumeLayout(false); + this.fileToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + resources.ApplyResources(this.fileToolStripMenuItem, "fileToolStripMenuItem"); + // + // saveToolStripMenuItem1 + // + resources.ApplyResources(this.saveToolStripMenuItem1, "saveToolStripMenuItem1"); + this.saveToolStripMenuItem1.Name = "saveToolStripMenuItem1"; + this.saveToolStripMenuItem1.Click += new System.EventHandler(this.saveToolStripMenuItem1_Click); + // + // waterTab + // + this.waterTab.BackColor = System.Drawing.SystemColors.WindowFrame; + this.waterTab.Controls.Add(this.treeView2); + resources.ApplyResources(this.waterTab, "waterTab"); + this.waterTab.Name = "waterTab"; + // + // treeView2 + // + resources.ApplyResources(this.treeView2, "treeView2"); + this.treeView2.Name = "treeView2"; + this.treeView2.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView2_AfterSelect); + this.treeView2.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView2_KeyDown); + // + // colorsTab + // + this.colorsTab.BackColor = System.Drawing.SystemColors.WindowFrame; + this.colorsTab.Controls.Add(this.treeView1); + resources.ApplyResources(this.colorsTab, "colorsTab"); + this.colorsTab.Name = "colorsTab"; + // + // treeView1 + // + resources.ApplyResources(this.treeView1, "treeView1"); + this.treeView1.Name = "treeView1"; + this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); + this.treeView1.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 + // + resources.ApplyResources(this.underwaterTab, "underwaterTab"); + this.underwaterTab.Name = "underwaterTab"; + // + // fogTab + // + resources.ApplyResources(this.fogTab, "fogTab"); + this.fogTab.Name = "fogTab"; + // + // COLEditor + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.menuStrip); + this.Controls.Add(this.tabControl); + this.Controls.Add(this.metroPanel1); + this.ForeColor = System.Drawing.SystemColors.ControlText; + this.Name = "COLEditor"; + this.Style = MetroFramework.MetroColorStyle.Silver; + this.Theme = MetroFramework.MetroThemeStyle.Dark; + this.metroPanel1.ResumeLayout(false); + this.metroPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.redUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.alphaUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.menuStrip.ResumeLayout(false); + this.menuStrip.PerformLayout(); + this.waterTab.ResumeLayout(false); + this.colorsTab.ResumeLayout(false); + this.tabControl.ResumeLayout(false); + this.ResumeLayout(false); } @@ -329,5 +343,7 @@ namespace PckStudio.Forms.Editor private TabPage colorsTab; private MetroFramework.Controls.MetroTabControl tabControl; private MetroFramework.Controls.MetroButton setColorBtn; - } + private TabPage underwaterTab; + private TabPage fogTab; + } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/COLEditor.resx b/PCK-Studio/Forms/Editor/COLEditor.resx index 04429f14..767462aa 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.resx +++ b/PCK-Studio/Forms/Editor/COLEditor.resx @@ -289,7 +289,7 @@ 2 - 343, 290 + 426, 290 125, 23 @@ -313,7 +313,7 @@ 2 - 343, 397 + 426, 397 125, 20 @@ -334,7 +334,7 @@ 3 - 343, 371 + 426, 371 125, 20 @@ -355,7 +355,7 @@ 4 - 343, 345 + 426, 345 125, 20 @@ -376,7 +376,7 @@ 5 - 343, 319 + 426, 319 125, 20 @@ -403,7 +403,7 @@ True - 310, 320 + 393, 320 21, 19 @@ -433,7 +433,7 @@ True - 311, 395 + 394, 395 20, 19 @@ -460,7 +460,7 @@ True - 310, 371 + 393, 371 21, 19 @@ -487,7 +487,7 @@ True - 311, 345 + 394, 345 20, 19 @@ -529,7 +529,7 @@ False - 343, 423 + 426, 423 125, 23 @@ -553,7 +553,7 @@ True - 285, 423 + 368, 423 46, 19 @@ -577,7 +577,7 @@ 12 - 295, 92 + 378, 92 173, 173 @@ -665,13 +665,13 @@ 4, 38 - 186, 458 + 426, 458 1 - Water Colors + Water waterTab @@ -695,7 +695,7 @@ No - 186, 458 + 426, 458 0 @@ -712,6 +712,18 @@ 0 + + Fill + + + 0, 0 + + + 320, 458 + + + 0 + treeView1 @@ -728,13 +740,13 @@ 4, 38 - 186, 458 + 320, 458 0 - Normal Colors + Everything colorsTab @@ -748,38 +760,62 @@ 0 - - Fill - - - 0, 0 - - - 186, 458 - - - 0 - - - treeView1 - - - System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - colorsTab - - - 0 - Top, Bottom, Left + + 4, 38 + + + 426, 458 + + + 2 + + + Underwater + + + underwaterTab + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl + + + 2 + + + 4, 38 + + + 320, 458 + + + 3 + + + Underwater Fog + + + fogTab + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl + + + 3 + 20, 83 - 194, 500 + 328, 500 22 From 08971ac69fbee0aec336a3dce7b22c9e5f2a226c Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 25 Sep 2022 17:45:34 -0400 Subject: [PATCH 011/110] Added Create->Colours.col feature --- PCK-Studio/MainForm.Designer.cs | 22 +- PCK-Studio/MainForm.cs | 14 + PCK-Studio/MainForm.resx | 1130 ++++++++++------- PCK-Studio/PckStudio.csproj | 3 +- PCK-Studio/Properties/Resources.Designer.cs | 32 +- PCK-Studio/Properties/Resources.resx | 3 + .../Resources/fileTemplates/colours.col | Bin 0 -> 12564 bytes 7 files changed, 694 insertions(+), 510 deletions(-) create mode 100644 PCK-Studio/Resources/fileTemplates/colours.col diff --git a/PCK-Studio/MainForm.Designer.cs b/PCK-Studio/MainForm.Designer.cs index 3eda3aff..9517da39 100644 --- a/PCK-Studio/MainForm.Designer.cs +++ b/PCK-Studio/MainForm.Designer.cs @@ -61,6 +61,7 @@ this.deleteFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.moveDownToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.viewFileInfoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.generateMipMapTextureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.menuStrip = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -130,7 +131,7 @@ this.imageList = new System.Windows.Forms.ImageList(this.components); this.pictureBoxImagePreview = new PckStudio.PictureBoxWithInterpolationMode(); this.LittleEndianCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.generateMipMapTextureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.colourscolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.contextMenuPCKEntries.SuspendLayout(); this.menuStrip.SuspendLayout(); this.contextMenuMetaTree.SuspendLayout(); @@ -168,7 +169,8 @@ this.folderToolStripMenuItem, this.skinToolStripMenuItem, this.createAnimatedTextureToolStripMenuItem, - this.audiopckToolStripMenuItem}); + this.audiopckToolStripMenuItem, + this.colourscolToolStripMenuItem}); resources.ApplyResources(this.createToolStripMenuItem, "createToolStripMenuItem"); this.createToolStripMenuItem.Name = "createToolStripMenuItem"; // @@ -349,6 +351,12 @@ resources.ApplyResources(this.viewFileInfoToolStripMenuItem, "viewFileInfoToolStripMenuItem"); this.viewFileInfoToolStripMenuItem.Click += new System.EventHandler(this.viewFileInfoToolStripMenuItem_Click); // + // generateMipMapTextureToolStripMenuItem + // + this.generateMipMapTextureToolStripMenuItem.Name = "generateMipMapTextureToolStripMenuItem"; + resources.ApplyResources(this.generateMipMapTextureToolStripMenuItem, "generateMipMapTextureToolStripMenuItem"); + this.generateMipMapTextureToolStripMenuItem.Click += new System.EventHandler(this.generateMipMapTextureToolStripMenuItem_Click); + // // menuStrip // resources.ApplyResources(this.menuStrip, "menuStrip"); @@ -952,11 +960,12 @@ this.LittleEndianCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; this.LittleEndianCheckBox.UseSelectable = true; // - // generateMipMapTextureToolStripMenuItem + // colourscolToolStripMenuItem // - this.generateMipMapTextureToolStripMenuItem.Name = "generateMipMapTextureToolStripMenuItem"; - resources.ApplyResources(this.generateMipMapTextureToolStripMenuItem, "generateMipMapTextureToolStripMenuItem"); - this.generateMipMapTextureToolStripMenuItem.Click += new System.EventHandler(this.generateMipMapTextureToolStripMenuItem_Click); + this.colourscolToolStripMenuItem.Image = global::PckStudio.Properties.Resources.COL_ICON; + this.colourscolToolStripMenuItem.Name = "colourscolToolStripMenuItem"; + resources.ApplyResources(this.colourscolToolStripMenuItem, "colourscolToolStripMenuItem"); + this.colourscolToolStripMenuItem.Click += new System.EventHandler(this.colourscolToolStripMenuItem_Click); // // MainForm // @@ -1098,6 +1107,7 @@ private MetroFramework.Controls.MetroLabel labelVersion; private System.Windows.Forms.RichTextBox ChangelogRichTextBox; private System.Windows.Forms.ToolStripMenuItem generateMipMapTextureToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem colourscolToolStripMenuItem; } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 049c22a7..ff68d980 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -2928,5 +2928,19 @@ namespace PckStudio } } } + + private void colourscolToolStripMenuItem_Click(object sender, EventArgs e) + { + PCKFile.FileData NewColorFile; + if (currentPCK.TryGetFile("colours.col", PCKFile.FileData.FileType.ColourTableFile, out NewColorFile)) + { + MessageBox.Show("A color table file already exists in this PCK and a new one cannot be created.", "Operation aborted"); + return; + } + NewColorFile = new PCKFile.FileData("colours.col", PCKFile.FileData.FileType.ColourTableFile); + NewColorFile.SetData(Resources.colours); + currentPCK.Files.Add(NewColorFile); + BuildMainTreeView(); + } } } \ No newline at end of file diff --git a/PCK-Studio/MainForm.resx b/PCK-Studio/MainForm.resx index c408c933..f1625313 100644 --- a/PCK-Studio/MainForm.resx +++ b/PCK-Studio/MainForm.resx @@ -130,7 +130,7 @@ - 167, 22 + 180, 22 Folder @@ -152,7 +152,7 @@ - 167, 22 + 180, 22 Skin @@ -174,7 +174,7 @@ - 167, 22 + 180, 22 Animated Texture @@ -188,11 +188,17 @@ - 167, 22 + 180, 22 Audio.pck + + 180, 22 + + + Colours.col + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -207,52 +213,6 @@ Create - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAIkSURBVDhPpdLf - T1JxGMfxc1n8qtzcyglCWhFS1PLGHAgisDmktZZtabRSEYhDZ8xpiSWVpaSxLpoXyWquLvzV+oGZq+iy - /6Stm7qsm+DT830YMJw3rbO9Djs7z/P+wob03xcAyWbUwqLXotWgha1pDzPr1axl/y52uEHFrAY1z4l5 - sVsK0IK1UVMbaKQAOXhgN2tuKLHQTKtBh6M0XwmIxe1OtexjXZa9pA6dlnomlgXx7WoCo/1eTF3pwfRQ - gM3HLmD+Wh8yIwE8CgcwFznLJs67cLPPgeMmXW1gKRXCZjqGfCbBvi6kWH6OnoXMKFsd68fa2CW0Haqr - BpYnh5G7F8PGtIyV2yG2NhXHeuo6nioD5CI+pRMsG+nFYqSHVQKrt0LYKAcmhyCeX6Vklk0MsI9phQIK - Bfy07OfPSkAs/v7xDcViEd6OZ/C2LyOXHMb75Agtlk72nF6hdy/FEgrFP3yI2OVA7r6MXz+/04siPB3P - aXgJ75JhbFIgP5PAZwr42lcp8IJnioUCBcLVQHbQizfjQTr1Kj7cTbBIpw1R54mK/GwMXwjqaYWkzrVV - A4uDPry+QYGJIN7eUVjMcQyyvWrrQRxbM/GdA4+Dbjy57MJC0AmnUQ2XUYPZXjse+qvKi9vRHZLisUJx - WyB3m0sBkwZuvYr56A8j7LQs0B2S7LMg2n0EUY8ZdpMaDgo4mlSsq1lXo7w4fuZk6Sf861U5mS9J+gsp - e+98+xbVEAAAAABJRU5ErkJggg== - - - - 228, 22 - - - Import Skin - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAEnSURBVDhPYxgc - 4P8Chv8YeKWUIFSaMPi/W+r//1MapOGTOixQ7UADkCS05Xjh2FhFEIydtIT+22uJAsX4wBimFqod04Bt - nTn/9/YV/T82rQGM93YXAfkl/1eVRYPl8RqwuTnn/5aW3P8r69L+r67P+7+mIf//rIKo/7s7i/7PyfT9 - PzvTC78BW6AGrKpN+7+2IReM5xTF/N/VWQA0wAdogA8BA4Ca//7799/VauH/TdUZ/7dVp//fA7Td3XLV - //+iwNgBYXwGbCiP+7+5Oun/9qai/5n2+v+zHAzAeG9HDnEGTIl3/D8tzuG/owLP/w5f2/9dPrYIjWgY - qh3VgAJnrf+5Lhr/HRV5/jvLcoExNs0gDNWOagBeDNMM5UO1Ew8wbB4EgIEBABiEccKRdcoAAAAAAElF - TkSuQmCC - - - - 228, 22 - - - Import Extracted Skins Folder - - - 228, 22 - - - Add Texture - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -268,78 +228,6 @@ Import - - 222, 22 - - - Skin (.PNG) - - - 222, 22 - - - Cape (.PNG) - - - 222, 22 - - - Texture (.PNG) - - - 222, 22 - - - Languages File (.LOC) - - - 222, 22 - - - Game Rules File (.GRF) - - - 222, 22 - - - Music Cues File (audio.PCK) - - - 222, 22 - - - Colour Table File (.COL) - - - 222, 22 - - - Game Rules Header (.GRH) - - - 222, 22 - - - Skins PCK (.PCK) - - - 222, 22 - - - Models File (.BIN) - - - 222, 22 - - - Behaviours File (.BIN) - - - 222, 22 - - - Entity Materials File (.BIN) - 210, 22 @@ -462,6 +350,124 @@ System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAIkSURBVDhPpdLf + T1JxGMfxc1n8qtzcyglCWhFS1PLGHAgisDmktZZtabRSEYhDZ8xpiSWVpaSxLpoXyWquLvzV+oGZq+iy + /6Stm7qsm+DT830YMJw3rbO9Djs7z/P+wob03xcAyWbUwqLXotWgha1pDzPr1axl/y52uEHFrAY1z4l5 + sVsK0IK1UVMbaKQAOXhgN2tuKLHQTKtBh6M0XwmIxe1OtexjXZa9pA6dlnomlgXx7WoCo/1eTF3pwfRQ + gM3HLmD+Wh8yIwE8CgcwFznLJs67cLPPgeMmXW1gKRXCZjqGfCbBvi6kWH6OnoXMKFsd68fa2CW0Haqr + BpYnh5G7F8PGtIyV2yG2NhXHeuo6nioD5CI+pRMsG+nFYqSHVQKrt0LYKAcmhyCeX6Vklk0MsI9phQIK + Bfy07OfPSkAs/v7xDcViEd6OZ/C2LyOXHMb75Agtlk72nF6hdy/FEgrFP3yI2OVA7r6MXz+/04siPB3P + aXgJ75JhbFIgP5PAZwr42lcp8IJnioUCBcLVQHbQizfjQTr1Kj7cTbBIpw1R54mK/GwMXwjqaYWkzrVV + A4uDPry+QYGJIN7eUVjMcQyyvWrrQRxbM/GdA4+Dbjy57MJC0AmnUQ2XUYPZXjse+qvKi9vRHZLisUJx + WyB3m0sBkwZuvYr56A8j7LQs0B2S7LMg2n0EUY8ZdpMaDgo4mlSsq1lXo7w4fuZk6Sf861U5mS9J+gsp + e+98+xbVEAAAAABJRU5ErkJggg== + + + + 228, 22 + + + Import Skin + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAEnSURBVDhPYxgc + 4P8Chv8YeKWUIFSaMPi/W+r//1MapOGTOixQ7UADkCS05Xjh2FhFEIydtIT+22uJAsX4wBimFqod04Bt + nTn/9/YV/T82rQGM93YXAfkl/1eVRYPl8RqwuTnn/5aW3P8r69L+r67P+7+mIf//rIKo/7s7i/7PyfT9 + PzvTC78BW6AGrKpN+7+2IReM5xTF/N/VWQA0wAdogA8BA4Ca//7799/VauH/TdUZ/7dVp//fA7Td3XLV + //+iwNgBYXwGbCiP+7+5Oun/9qai/5n2+v+zHAzAeG9HDnEGTIl3/D8tzuG/owLP/w5f2/9dPrYIjWgY + qh3VgAJnrf+5Lhr/HRV5/jvLcoExNs0gDNWOagBeDNMM5UO1Ew8wbB4EgIEBABiEccKRdcoAAAAAAElF + TkSuQmCC + + + + 228, 22 + + + Import Extracted Skins Folder + + + 228, 22 + + + Add Texture + + + 222, 22 + + + Skin (.PNG) + + + 222, 22 + + + Cape (.PNG) + + + 222, 22 + + + Texture (.PNG) + + + 222, 22 + + + Languages File (.LOC) + + + 222, 22 + + + Game Rules File (.GRF) + + + 222, 22 + + + Music Cues File (audio.PCK) + + + 222, 22 + + + Colour Table File (.COL) + + + 222, 22 + + + Game Rules Header (.GRH) + + + 222, 22 + + + Skins PCK (.PCK) + + + 222, 22 + + + Models File (.BIN) + + + 222, 22 + + + Behaviours File (.BIN) + + + 222, 22 + + + Entity Materials File (.BIN) + 17, 17 @@ -476,6 +482,53 @@ None + + 24, 44 + + + 1016, 24 + + + 2 + + + menuStrip1 + + + menuStrip + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + 37, 20 + + + File + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADuSURBVFhH7ZbB + CsMgEERDbv5A/v83e2jNTmCKGdegJk0heHgUn7vrKBQyxRj/iivJPM9WMTWjc45wJeAwhAghVJEG1nkl + XNkziLCvtteXphFCfQ08nOi+4kvTeFL1NfBQ/BLuefjS9NkAADOwPnpNX14UADBEaV4mNnkygN34Y/1v + AgeWZXll9So2eTLAEVm9ik2a7g1Qgn9t9bvFV/4gAOZdHgB1RPeUEeAZAeBr0d4R4JIACuqI7ikjwDMD + tDACNAfo/Sou0fQ9wGKvoQfO8i61W6SkTXi+XtLLgOwcFSna3It3c+LKO3HlfcRpBa3JBjU5E8DiAAAA + AElFTkSuQmCC + + + + 217, 22 + + + New + 151, 22 @@ -494,23 +547,6 @@ Mash-Up Pack - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADuSURBVFhH7ZbB - CsMgEERDbv5A/v83e2jNTmCKGdegJk0heHgUn7vrKBQyxRj/iivJPM9WMTWjc45wJeAwhAghVJEG1nkl - XNkziLCvtteXphFCfQ08nOi+4kvTeFL1NfBQ/BLuefjS9NkAADOwPnpNX14UADBEaV4mNnkygN34Y/1v - AgeWZXll9So2eTLAEVm9ik2a7g1Qgn9t9bvFV/4gAOZdHgB1RPeUEeAZAeBr0d4R4JIACuqI7ikjwDMD - tDACNAfo/Sou0fQ9wGKvoQfO8i61W6SkTXi+XtLLgOwcFSna3It3c+LKO3HlfcRpBa3JBjU5E8DiAAAA - AElFTkSuQmCC - - - - 217, 22 - - - New - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -629,11 +665,11 @@ False - - 37, 20 + + 39, 20 - - File + + Edit False @@ -679,11 +715,11 @@ Convert to Bedrock - - 39, 20 + + 44, 20 - - Edit + + Help @@ -1225,6 +1261,20 @@ Binka Conversion + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAKdJREFUOE+1 + jzEKwzAQBNUEXKQIBOwifcgTUvkDbt2p9qP0Ev1E31FYkVXOx2FLRRYWi7NnTnZ/z/MxZPY7aguhbZlq + myQafL+ubRINshCwnO0kFqi3HkpwWOf7DkC1RBfvx9slV4ElscqbxBiz9/4nwOBIQjCEUL7FswhwDYAp + JVMiN0oYs/ILiCXRIGHOwVQBoiXsKSgjJdzaBMpQ0g3KEOoG++PcBx9PFJGNjU4vAAAAAElFTkSuQmCC + + + + 181, 22 + + + Tutorials + iVBORw0KGgoAAAANSUhEUgAACOAAAAaoCAYAAAAgNTafAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m @@ -21910,20 +21960,6 @@ How PCKs work - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAKdJREFUOE+1 - jzEKwzAQBNUEXKQIBOwifcgTUvkDbt2p9qP0Ev1E31FYkVXOx2FLRRYWi7NnTnZ/z/MxZPY7aguhbZlq - myQafL+ubRINshCwnO0kFqi3HkpwWOf7DkC1RBfvx9slV4ElscqbxBiz9/4nwOBIQjCEUL7FswhwDYAp - JVMiN0oYs/ILiCXRIGHOwVQBoiXsKSgjJdzaBMpQ0g3KEOoG++PcBx9PFJGNjU4vAAAAAElFTkSuQmCC - - - - 181, 22 - - - Tutorials - iVBORw0KGgoAAAANSUhEUgAABkAAAAZACAYAAAAhDI6nAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -23927,6 +23963,12 @@ FAQ + + 181, 22 + + + Buy a coffee + 253, 22 @@ -23945,12 +23987,6 @@ For MattNL (Other Developer) - - 181, 22 - - - Buy a coffee - 181, 22 @@ -25798,11 +25834,18 @@ Administrative Tools - - 44, 20 + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAAAuSURBVDhPY/j/ + /z9FGMYgFwwbA8gFcANARpEJho0B5AK4ASCjyATDyQAy8X8GAKAaUNpxMP6IAAAAAElFTkSuQmCC + - - Help + + 63, 20 + + + More @@ -28501,46 +28544,18 @@ Join Development Discord - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAAAuSURBVDhPY/j/ - /z9FGMYgFwwbA8gFcANARpEJho0B5AK4ASCjyATDyQAy8X8GAKAaUNpxMP6IAAAAAElFTkSuQmCC - - - - 63, 20 - - - More - - - 24, 44 - - - 1016, 24 - - - 2 - - - menuStrip1 - - - menuStrip - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - 298, 17 + + 138, 70 + + + contextMenuMetaTree + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -28584,15 +28599,6 @@ Delete Entry - - 138, 70 - - - contextMenuMetaTree - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - iVBORw0KGgoAAAANSUhEUgAAAbYAAAB7CAYAAAAYCKWuAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -29279,6 +29285,324 @@ 7 + + pckOpen + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + openTab + + + 2 + + + label5 + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + openTab + + + 3 + + + labelVersion + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + openTab + + + 4 + + + ChangelogRichTextBox + + + System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + openTab + + + 5 + + + 4, 38 + + + 18, 30, 20, 5 + + + 1016, 558 + + + 1 + + + openTab + + + MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + tabControl + + + 0 + + + None + + + Top, Right + + + True + + + 935, 252 + + + 0, 0 + + + 19 + + + labelImageSize + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 2 + + + Top, Right + + + True + + + 913, 53 + + + 0, 0 + + + 17 + + + fileEntryCountLabel + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 3 + + + Top, Bottom, Right + + + MetaTab + + + MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + PropertiesTabControl + + + 0 + + + 413, 277 + + + 596, 282 + + + 11 + + + PropertiesTabControl + + + MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 4 + + + True + + + True + + + 433, 71 + + + 0, 0 + + + 3 + + + label11 + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 5 + + + Top, Bottom, Left, Right + + + False + + + 0 + + + 467, 14 + + + 32, 32 + + + 5, 50 + + + 0, 0, 0, 0 + + + 0 + + + 405, 501 + + + 10 + + + treeViewMain + + + System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + editorTab + + + 6 + + + Top, Right + + + None + + + NoControl + + + 413, 50 + + + 231, 218 + + + Zoom + + + 18 + + + pictureBoxImagePreview + + + PckStudio.PictureBoxWithInterpolationMode, PCK-Studio, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null + + + editorTab + + + 8 + + + 4, 38 + + + 5, 50, 5, 7 + + + 1016, 558 + + + 0 + + + editorTab + + + MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + tabControl + + + 1 + + + Fill + + + 20, 30 + + + 0, 0, 0, 0 + + + 1024, 600 + + + 0 + + + tabControl + + + MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + $this + + + 4 + None @@ -29408,89 +29732,104 @@ 5 - - 4, 38 + + metroLabel2 - - 18, 30, 20, 5 - - - 1016, 558 - - - 1 - - - openTab - - - MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - tabControl - - - 0 - - - None - - - Top, Right - - - True - - - 935, 252 - - - 0, 0 - - - 19 - - - labelImageSize - - + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - editorTab + + MetaTab - + 2 - - Top, Right + + treeMeta - - True + + System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 913, 53 + + MetaTab - - 0, 0 - - - 17 - - - fileEntryCountLabel - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - editorTab - - + 3 - - Top, Bottom, Right + + entryTypeTextBox + + + MetroFramework.Controls.MetroTextBox, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + MetaTab + + + 4 + + + entryDataTextBox + + + MetroFramework.Controls.MetroTextBox, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + MetaTab + + + 5 + + + buttonEdit + + + MetroFramework.Controls.MetroButton, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + MetaTab + + + 6 + + + metroLabel1 + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + MetaTab + + + 7 + + + 4, 38 + + + 3, 3, 3, 3 + + + 588, 240 + + + 0 + + + Properties + + + MetaTab + + + MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + PropertiesTabControl + + + 0 Top, Right @@ -29693,207 +30032,6 @@ 7 - - 4, 38 - - - 3, 3, 3, 3 - - - 588, 240 - - - 0 - - - Properties - - - MetaTab - - - MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - PropertiesTabControl - - - 0 - - - 413, 277 - - - 596, 282 - - - 11 - - - PropertiesTabControl - - - MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - editorTab - - - 4 - - - True - - - True - - - 433, 71 - - - 0, 0 - - - 3 - - - label11 - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - editorTab - - - 5 - - - Top, Bottom, Left, Right - - - False - - - 0 - - - 467, 14 - - - 32, 32 - - - 5, 50 - - - 0, 0, 0, 0 - - - 0 - - - 405, 501 - - - 10 - - - treeViewMain - - - System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - editorTab - - - 6 - - - Top, Right - - - None - - - NoControl - - - 413, 50 - - - 231, 218 - - - Zoom - - - 18 - - - pictureBoxImagePreview - - - PckStudio.PictureBoxWithInterpolationMode, PCK-Studio, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null - - - editorTab - - - 8 - - - 4, 38 - - - 5, 50, 5, 7 - - - 1016, 558 - - - 0 - - - editorTab - - - MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - tabControl - - - 1 - - - Fill - - - 20, 30 - - - 0, 0, 0, 0 - - - 1024, 600 - - - 0 - - - tabControl - - - MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - $this - - - 4 - Top, Right @@ -32634,6 +32772,12 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + generateMipMapTextureToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + fileToolStripMenuItem @@ -32904,10 +33048,10 @@ System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - generateMipMapTextureToolStripMenuItem + + colourscolToolStripMenuItem - + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 510ed62c..4a935b9d 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -17,7 +17,7 @@ 1.0.0.%2a false true - true + true Debug @@ -632,6 +632,7 @@ + diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index 1e761afb..ccf6158d 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -141,15 +141,17 @@ namespace PckStudio.Properties { } /// - /// Looks up a localized string similar to 6.5 - ///=== - ///-Audio.pck Editor is now the Music Editor with plenty of new features - ///-The Animation Editor now plays animations more accurately - ///-Added MipMap support to the Animation Editor - ///-Added some text to display the common name of the animation that you're working with - ///-Fixed several incorrect internal names for the change tile list - ///-Removed Barrier (Item) from the Change Tile list - ///-Clicking "Cancel" in the Change Tile dialog will no longer overwrite the original tile's name with noth [rest of string was truncated]";. + /// Looks up a localized string similar to 7.0 (BETA) + ///========== + ///Some features may be completely missing or incomplete at this point in time! + /// + ///-Massive codebase overhaul and optimization lead by miku-666 (aka NessieHax)!!! + ///-Some UI redesigned by yaboiFoxx + ///-Improved the changelog! + ///-New icons for each of the file types, with unique image icons for skin, texture, and cape files + ///-Added the ability to create Texture and Mash-Up packs + ///-Added a feature to see stats about any given file, including file type + ///-Added a feature set [rest of string was truncated]";. /// public static string CHANGELOG { get { @@ -197,6 +199,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] colours { + get { + object obj = ResourceManager.GetObject("colours", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -511,7 +523,7 @@ namespace PckStudio.Properties { /// Looks up a localized string similar to { /// "COMMENT_1": "Tile data research by MattNL", /// "COMMENT_2": "JSON conversion by PhoenixARC", - /// "Blocks": [ + /// "blocks": [ /// { "grass_top": "Grass Block (Top)" }, /// { "stone": "Stone" }, /// { "dirt": "Dirt" }, diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index 7c045a1b..541aac8b 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -274,4 +274,7 @@ ..\Resources\iconImageList\SKINS ICON.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\fileTemplates\colours.col;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/PCK-Studio/Resources/fileTemplates/colours.col b/PCK-Studio/Resources/fileTemplates/colours.col new file mode 100644 index 0000000000000000000000000000000000000000..bd65c21aa13c887bbc72547fb98d08b120c21ff2 GIT binary patch literal 12564 zcmai4dz2K_ng8OEL1vgIGs8n(3d9F1GBto`(BMqZFhja=nC2nM+SGJcPnT2O)mB%} z15gGfG3aI&7m1muEFit$;{=x+L)O(3OpKmnS+eN5Vmup@-5qs3SzXC-BRL*>zwh2# zw{AaR2ksyJ`yThZ-{ZdO0>D@B|F59F)3!{#--vV!8cx4s7%9-lbg1^=Hq(hFVD!j( zsP&+L5!bVp3tcZvgUKEkGBP^s-x=~1hKKZI+R{@oxI29#OkU;anM|bJPA2UXY=3zG zDmlUg_n@HQU}7y099&U=XiUpYF4JqhYkMnZPXjGKl7S1+xCs*Sp9IFZ|; zhMt0aJ`a;Q&|~RlDx)F+BV#x&LmD_w$FS=dNu$fOtO8En591W-*Xd@z&VX7j>JRp} z`5$;j^qS~X##PC=x(v%=zb6T)ff4qzp8xE0?5#%1H@yJ%m5DC9qlPjlF$4rdb~fe8 z!8UT$p=>7M*mklz!y-bCnO=?(PM}YjO=6^NhK}(keqjxFo9`pfNEQnpuH)L7qkOcP zqpG7jV*R{B5vbMKRKLX$p_(JU5}}&IQe1c?U>IrNgMu~e+9|^yiC}HFt(Xsr&RD)H z0T&i4uy2U)InPE#M$zvliU$d)F9+*<@g&l|TP)$O9ZINEa!Ha>qy^J_mT~Q|!89!DP{ngSBwWdZ7 z=2eg@A&_)za|MJWMUcc_k5%S=sv-T1&952hOrSGY&#!`z_hs4wkX`9swTv*@H^rzu8MDhdQX90T}zi; z=X3JnSgYd#>T&Yb3k$2tL(r2jI+}+m9-vm+BZq%pOyEin9KglIlkltV)IWdh538W^ zp8mmW(Ci5mRbTG9EpT~x8m~ZNkdEe6_>ZsN>072&;#+U6_6gj7Jfp5$KNA|fUX+TQ z|Mg`s&BN7Du&P|QrN4jEM86BALPNCxP4Tt9 zh=h6n9k<=$Tc`S$RrBgC-B9a!->c}C-rVA=E2`>eezMU|XI9zo#1{GkRO+}B-g&IY z_n1O~caGfdcfiXOmjoBr)fiB@%1q^%C24Pee;&;AtX0P%IjDT4G*3TCqcU#tq?xZJ ziOPApN0Q|%$yC;oEXz%jsqAE@Jntlpa&LyG+0V%Wx-32=c_ag6*IZA5!oZ>{xhTt| zXVff{9F%Qx3^J`GnX+!S*Nr3>c0$=FRme1xDkux33P~PCew}Fr}gF%czwz;T?is=Y6&f9x*;AZO}UWDOdLy#Ulmh#doA$MNL~TbPcTfBdhf6t;HDb`x;q$PtCD z)1(6qYMU&zVNn1rO1^$9>y!(yUF|buxVlxOES$23*k;(bw%yW4;PBBOD_sUmJZGM` z`+B7VHe*9NomMb5eptB@_c_wEjkX| zljOvTv+>C7=qWtPo!!w2%|)aTUNGR96pjba!t^3qkhVjSHY;mDeC%wA)=hY1Mjwyk zc4Trc0Yye27z~zl7B($9v5$?7mB_S@;C(`H$5@F> zPu5A}d3DFvkC(`>LA3^tLt~L;ZH_&Zf_SjCgu+J?M;|s6$zZv{815uXbXj_I0H#l$ zu6TBx;W&EKc3nNPF=4s}ocX(hiu)9@2-@HD&WFoohYH<`+`f$#%r3{EgfDG9RK61t z!xz6fALd+G2OoNWb}39N$Hby}Ahf1Dm4)=iYvz?VK*aUIfxhz6EVvstZ!Rw_BD}Tx z_VUs!%)whWmk$7sbx@mEp3Fxb?7bGImK!xi{V!K6Dlgl{LcgH74(fWa`pqcL>T7J* zh%8;9|4|$ic;^1{GhH_*cWRoiB-nwuI$FlbKxaN4qC{0gsGqFvd3gHbXj zUI5b++aPHH$4v9puN5`^%U%x`y0mzzk# z@*P1qnKwQ@4vii0xDlnx>Os6>PPyTq%U2+iV**c6;Z~gDSz_Wni>FR{`BgLVM*T$+0?{Ov9D=Ak+zw zb~_c%vWTspg=b@d_8PdJ<1WOdQ2x{AXXO|Itmj@MV`f}Eh1;sJj+>xKNYTzqA^qp~ zeG&^k4~d!Thef@Z9YU%*HE3qcKHP|oz>Ww0T3Xg-nW+ zXU;*W7FxRSRvB0J+Xutar5g=>fXR1-x+GtZZDvq(&E6IXZ8X`IXX&+9$zI5jZh|}b z^Lyt(z3AoEzKrdpnO7F{<|G`}-K=mHdEes>;^hw>8_Cquc>U@{DVW9eymbt>o%?jF6sjaa7qmqjFSXOo&dMJ~MoBMsi~mV_DPfv4@bGa<0C|rhX%B zdd8sLTh@W)fBqV7VC=p~J8r1b_z8vM=!YX!H59V>%tF!F=}^-PatCVlp`2W}~a zHMs95DGsknpeLpB^XJc(!Wz8v(o4AeL)&}I{vvZe+Pk+rNrT`$*Kl93sWPeiUTSV` zE=%E_ZKj^u^+BV^Q$AS!@-a zhhwIwHWazzey1EkgHP{W%>CA@_w||naK|Dm%itPhx>`i3+m`O&g|hF^bLY;LCuy*6 z-yYt5IFYpmlps9X|7baa2BGD>cpSm#bXYV|7K|s013G=`#f#82a0mCoEG9o_N7*V9 z=`KoueUCqWaTX0`&%|q9(h{_AX_v_+Bc{R{NS_7l)POM}*~1+-a$gqU8hk4o=VOp7 zh?)T{kVxEi5xRyOtFw3{L+iwJTqxbryX1mY4IcX`Zof%3l*MC{x7b~d7aPSW=56aN z?uD@H=>D+u!J$%EgMa(zBd((>n;DRrN78x;s=@oG9_2-~!5EgTTlX9;1~vHbzdyy( zGupcW_dVuCBKrR@X>iqDIv)0YuN9Sl3(&-H5eB}>veg`p=kq92$oEpE z8-~WlM&4t21`Sq)LR>T7_()gLqQH7Az;Ok|{Q;ZX);V?>y=6&>Pt2yW6twdEC*1Ar zwm;Xua^&t}5cBTUhxuCClf_-VQ?Sm`qRH0a5}F1#{OlaJHmqBC3ny)&37_wNR9u6a zT`r#-0(4=7FJ8Pf{i{#kE=S;zVe?G6W51v%?5IbZD}ZvXAz)50xWm z@NHZcXWi-~an~3TZ-F8~I!(!G4GtJ9VcL2+Nk-V#KGJUa6D3TT&vyB!xGRmZ4XUt+-Lp2UN;~a-j~0)=4^4_nm4vA?MJiMX?9GEW00lpJ7QavOi%xuE zB)e$6>@wVvr|8*{#14!ez|Z?;e=4%h7{&`@{JSiqr`a#sJU|0F1~*~+mQ3ulN8`AC z;5dCB_J(lBs%7|`3eQN9+wc++Z;{8zz*%jU9Ub8Egb&${6${|rHpR|3#4=4`p>MQ> z)Ts&;tuG`_Zo_vX6eM;_cs~CnR0~9044xmI1vLWl?gC$5^D@*6Ou7EM>4(3T(&EPN z%d!mjwE@EcayxW7<6f(0hT=~cog($nh{05G`pg(SCWaMgSR{K-j z-tzRn27{d6I>@cQGa$MI!@ zqJ_M8v}sBqvk2qZ*dv8w<4MP=P}L!FCx3DweksB^C5e-F(2ToaZG8~xJOq!lbj9Gp z!RHRbv|@Cf-DR+67B9a3D`@bj>;|QeU5n)30GLvW<09})P;P_5QGAlqi&qknpzh$u zjqZQFN4aS7sUag~W|Q#ViwnvMhj9!RL{I+`>Q-5J?v1QU;N47w&g$@orY2}mQK2h8 zj5`q(@5Cc2^^88O-0$w(%FIg#7Bb1zUMmKrNNU<~11TEwPjr@89yz6+J^t4Lb`)h<01 zm3_?~xF4vISZ#(s(<4*qQC@Dro})mGh*M&8_AR5h#`$}ucygS*7L7Rc$TT-Cya%Y^ z+6k3W{OlL$qlcTh#%K#vBo2kCTP-W^Bc;ci4!+gUf@aN>qsP&3^10P-DHQ?i9KxFL`cyy8NN@ zI#~hre*Hu;X>$NQs+LhDi(j8J5;bz&_(hZ&bvJ>hT+{Yvff{ATq>T3nJRdYR0X5tq zL6yi21KF14=h9}R`>q{P$NQ(aDbOUYI#)f*yps|_kbGld&SOuups>cOzp;nisl!J6>i1( zlkZ&ph9f|Ygc{U3i!f7iYPD5xBXW(0eh$<~W^O^&W086_Xg#qQ`G!Bhk+VN)w957 X(oPoLQYQX>UWlx@Iywy0Q274 Date: Sun, 25 Sep 2022 19:15:57 -0400 Subject: [PATCH 012/110] added support for underwater and fog colors to color editor --- PCK-Studio/Classes/FileTypes/COLFile.cs | 14 +- PCK-Studio/Classes/IO/COL/COLFileReader.cs | 8 +- PCK-Studio/Classes/IO/COL/COLFileWriter.cs | 4 +- PCK-Studio/Forms/Editor/COLEditor.Designer.cs | 60 ++- PCK-Studio/Forms/Editor/COLEditor.cs | 116 ++++-- PCK-Studio/Forms/Editor/COLEditor.resx | 372 ++++++------------ 6 files changed, 278 insertions(+), 296 deletions(-) diff --git a/PCK-Studio/Classes/FileTypes/COLFile.cs b/PCK-Studio/Classes/FileTypes/COLFile.cs index 3259da6e..c7d1e6a6 100644 --- a/PCK-Studio/Classes/FileTypes/COLFile.cs +++ b/PCK-Studio/Classes/FileTypes/COLFile.cs @@ -23,13 +23,17 @@ namespace PckStudio.Classes.FileTypes public class ExtendedColorEntry : ColorEntry { - public uint rgbcolor; - public uint unk; + public uint color_b; + public uint color_c; - public ExtendedColorEntry(string name, uint color, uint rgbcolor, uint unk) : base(name, color) + // Water entries consist of three colors + // color_a - the surface of the water + // color_b - the color displayed underwater + // color_c - the color for the distant "fog" displayed while underwater + public ExtendedColorEntry(string name, uint color_a, uint color_b, uint color_c) : base(name, color_a) { - this.rgbcolor = rgbcolor; - this.unk = unk; + this.color_b = color_b; + this.color_c = color_c; } } diff --git a/PCK-Studio/Classes/IO/COL/COLFileReader.cs b/PCK-Studio/Classes/IO/COL/COLFileReader.cs index efa4e214..41cb77c1 100644 --- a/PCK-Studio/Classes/IO/COL/COLFileReader.cs +++ b/PCK-Studio/Classes/IO/COL/COLFileReader.cs @@ -32,10 +32,10 @@ namespace PckStudio.Classes.IO.COL for (int i = 0; i < water_color_entries; i++) { string name = ReadString(stream); - uint color = ReadUInt(stream); - uint rgbcolor = ReadUInt(stream); - uint unk = ReadUInt(stream); - colourFile.waterEntries.Add(new ExtendedColorEntry(name, color, rgbcolor, unk)); + uint colorA = ReadUInt(stream); + uint colorB = ReadUInt(stream); + uint colorC = ReadUInt(stream); + colourFile.waterEntries.Add(new ExtendedColorEntry(name, colorA, colorB, colorC)); } } return colourFile; diff --git a/PCK-Studio/Classes/IO/COL/COLFileWriter.cs b/PCK-Studio/Classes/IO/COL/COLFileWriter.cs index 8b254257..93ad6300 100644 --- a/PCK-Studio/Classes/IO/COL/COLFileWriter.cs +++ b/PCK-Studio/Classes/IO/COL/COLFileWriter.cs @@ -31,8 +31,8 @@ namespace PckStudio.Classes.IO.COL { WriteString(stream, colorEntry.name); WriteUInt(stream, colorEntry.color); - WriteUInt(stream, colorEntry.rgbcolor); - WriteUInt(stream, colorEntry.unk); + WriteUInt(stream, colorEntry.color_b); + WriteUInt(stream, colorEntry.color_c); } } } diff --git a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs index b0cf8ebd..c8513916 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs @@ -49,9 +49,11 @@ namespace PckStudio.Forms.Editor this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.waterTab = new System.Windows.Forms.TabPage(); - this.treeView2 = new System.Windows.Forms.TreeView(); + this.waterTreeView = new System.Windows.Forms.TreeView(); + this.underwaterTreeView = new System.Windows.Forms.TreeView(); + this.fogTreeView = new System.Windows.Forms.TreeView(); this.colorsTab = new System.Windows.Forms.TabPage(); - this.treeView1 = new System.Windows.Forms.TreeView(); + 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(); @@ -65,6 +67,8 @@ namespace PckStudio.Forms.Editor this.waterTab.SuspendLayout(); this.colorsTab.SuspendLayout(); this.tabControl.SuspendLayout(); + this.underwaterTab.SuspendLayout(); + this.fogTab.SuspendLayout(); this.SuspendLayout(); // // metroPanel1 @@ -245,30 +249,44 @@ namespace PckStudio.Forms.Editor // waterTab // this.waterTab.BackColor = System.Drawing.SystemColors.WindowFrame; - this.waterTab.Controls.Add(this.treeView2); + this.waterTab.Controls.Add(this.waterTreeView); resources.ApplyResources(this.waterTab, "waterTab"); this.waterTab.Name = "waterTab"; // - // treeView2 + // waterTreeView // - resources.ApplyResources(this.treeView2, "treeView2"); - this.treeView2.Name = "treeView2"; - this.treeView2.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView2_AfterSelect); - this.treeView2.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView2_KeyDown); + 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); + // + // underwaterTreeView + // + 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 + // + 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.treeView1); + this.colorsTab.Controls.Add(this.colorTreeView); resources.ApplyResources(this.colorsTab, "colorsTab"); this.colorsTab.Name = "colorsTab"; // - // treeView1 + // colorTreeView // - resources.ApplyResources(this.treeView1, "treeView1"); - this.treeView1.Name = "treeView1"; - this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); - this.treeView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView1_KeyDown); + 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 // @@ -285,11 +303,15 @@ namespace PckStudio.Forms.Editor // // 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"; // @@ -316,6 +338,8 @@ namespace PckStudio.Forms.Editor this.waterTab.ResumeLayout(false); this.colorsTab.ResumeLayout(false); this.tabControl.ResumeLayout(false); + this.underwaterTab.ResumeLayout(false); + this.fogTab.ResumeLayout(false); this.ResumeLayout(false); } @@ -324,9 +348,11 @@ namespace PckStudio.Forms.Editor private MetroFramework.Controls.MetroPanel metroPanel1; private MetroFramework.Controls.MetroTextBox colorTextbox; - private TreeView treeView1; - private TreeView treeView2; - private MetroFramework.Controls.MetroLabel metroLabel1; + private TreeView colorTreeView; + private TreeView waterTreeView; + private TreeView fogTreeView; + private TreeView underwaterTreeView; + private MetroFramework.Controls.MetroLabel metroLabel1; private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.MenuStrip menuStrip; private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; diff --git a/PCK-Studio/Forms/Editor/COLEditor.cs b/PCK-Studio/Forms/Editor/COLEditor.cs index b91546a7..6329b450 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.cs @@ -16,7 +16,7 @@ namespace PckStudio.Forms.Editor { public partial class COLEditor : MetroForm { - COLFile colurfile; + COLFile colourfile; private readonly PCKFile.FileData _file; @@ -27,32 +27,37 @@ namespace PckStudio.Forms.Editor using(var stream = new MemoryStream(file.data)) { - colurfile = COLFileReader.Read(stream); + colourfile = COLFileReader.Read(stream); } - foreach (var obj in colurfile.entries) + foreach (var obj in colourfile.entries) { TreeNode tn = new TreeNode(obj.name); tn.Tag = obj; - treeView1.Nodes.Add(tn); + colorTreeView.Nodes.Add(tn); } - foreach (var obj in colurfile.waterEntries) + foreach (var obj in colourfile.waterEntries) { TreeNode tn = new TreeNode(obj.name); tn.Tag = obj; - treeView2.Nodes.Add(tn); + waterTreeView.Nodes.Add(tn); + TreeNode tnB = new TreeNode(obj.name); + tnB.Tag = obj; + underwaterTreeView.Nodes.Add(tnB); + TreeNode tnC = new TreeNode(obj.name); + tnC.Tag = obj; + fogTreeView.Nodes.Add(tnC); } } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { - if (treeView1.SelectedNode.Tag == null) + if (colorTreeView.SelectedNode.Tag == null) return; - - var colorEntry = (COLFile.ColorEntry)treeView1.SelectedNode.Tag; + var colorEntry = (COLFile.ColorEntry)colorTreeView.SelectedNode.Tag; + var color = colorEntry.color; alphaUpDown.Visible = false; alphaLabel.Visible = false; - var color = colorEntry.color; redUpDown.Value = color >> 16 & 0xff; greenUpDown.Value = color >> 8 & 0xff; blueUpDown.Value = color & 0xff; @@ -62,9 +67,9 @@ namespace PckStudio.Forms.Editor private void treeView2_AfterSelect(object sender, TreeViewEventArgs e) { - if (treeView2.SelectedNode.Tag == null) + if (waterTreeView.SelectedNode.Tag == null) return; - var colorEntry = (COLFile.ExtendedColorEntry)treeView2.SelectedNode.Tag; + var colorEntry = (COLFile.ExtendedColorEntry)waterTreeView.SelectedNode.Tag; int color = (int)colorEntry.color; alphaUpDown.Enabled = true; alphaUpDown.Visible = true; @@ -75,11 +80,40 @@ namespace PckStudio.Forms.Editor blueUpDown.Value = color & 0xff; pictureBox1.BackColor = Color.FromArgb(color); } + + private void treeView3_AfterSelect(object sender, TreeViewEventArgs e) + { + if (underwaterTreeView.SelectedNode.Tag == null) + return; + var colorEntry = (COLFile.ExtendedColorEntry)underwaterTreeView.SelectedNode.Tag; + int color = (int)colorEntry.color_b; + alphaUpDown.Visible = false; + alphaLabel.Visible = false; + redUpDown.Value = color >> 16 & 0xff; + greenUpDown.Value = color >> 8 & 0xff; + blueUpDown.Value = color & 0xff; + pictureBox1.BackColor = Color.FromArgb(255, Color.FromArgb(0xff << 24 | color)); + } + + private void treeView4_AfterSelect(object sender, TreeViewEventArgs e) + { + if (fogTreeView.SelectedNode.Tag == null) + return; + var colorEntry = (COLFile.ExtendedColorEntry)fogTreeView.SelectedNode.Tag; + int color = (int)colorEntry.color_c; + alphaUpDown.Visible = false; + alphaLabel.Visible = false; + redUpDown.Value = color >> 16 & 0xff; + greenUpDown.Value = color >> 8 & 0xff; + blueUpDown.Value = color & 0xff; + pictureBox1.BackColor = Color.FromArgb(255, Color.FromArgb(0xff << 24 | color)); + } + private void saveToolStripMenuItem1_Click(object sender, EventArgs e) { using (var stream = new MemoryStream()) { - COLFileWriter.Write(stream, colurfile); + COLFileWriter.Write(stream, colourfile); _file.SetData(stream.ToArray()); } DialogResult = DialogResult.OK; @@ -108,24 +142,44 @@ namespace PckStudio.Forms.Editor public void treeView1_KeyDown(object sender, KeyEventArgs e) { - var node = treeView1.SelectedNode; + var node = colorTreeView.SelectedNode; if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ColorEntry colorInfo) { - colurfile.entries.Remove(colorInfo); - if (treeView1.Nodes.Count > 0) treeView1.Nodes.Remove(node); + colourfile.entries.Remove(colorInfo); + if (colorTreeView.Nodes.Count > 0) colorTreeView.Nodes.Remove(node); } } private void treeView2_KeyDown(object sender, KeyEventArgs e) { - var node = treeView2.SelectedNode; + var node = waterTreeView.SelectedNode; if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ExtendedColorEntry) { - colurfile.waterEntries.Remove((COLFile.ExtendedColorEntry)node.Tag); - if (treeView2.Nodes.Count > 0) treeView2.Nodes.Remove(node); + colourfile.waterEntries.Remove((COLFile.ExtendedColorEntry)node.Tag); + if (waterTreeView.Nodes.Count > 0) waterTreeView.Nodes.Remove(node); } } + private void treeView3_KeyDown(object sender, KeyEventArgs e) + { + var node = underwaterTreeView.SelectedNode; + if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ExtendedColorEntry) + { + colourfile.waterEntries.Remove((COLFile.ExtendedColorEntry)node.Tag); + if (underwaterTreeView.Nodes.Count > 0) underwaterTreeView.Nodes.Remove(node); + } + } + + private void treeView4_KeyDown(object sender, KeyEventArgs e) + { + var node = fogTreeView.SelectedNode; + if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ExtendedColorEntry) + { + colourfile.waterEntries.Remove((COLFile.ExtendedColorEntry)node.Tag); + if (fogTreeView.Nodes.Count > 0) fogTreeView.Nodes.Remove(node); + } + } + private void colorBox_TextChanged(object sender, EventArgs e) { //TreeView tv = (TreeView)tabControl.SelectedTab.Controls[0]; @@ -206,16 +260,28 @@ namespace PckStudio.Forms.Editor colorPick.SolidColorOnly = tabControl.SelectedTab == colorsTab; if (colorPick.ShowDialog() != DialogResult.OK) return; pictureBox1.BackColor = colorPick.Color; - if (tabControl.SelectedTab == waterTab && treeView2.SelectedNode != null && - treeView2.SelectedNode.Tag != null && treeView2.SelectedNode.Tag is COLFile.ExtendedColorEntry) + if (tabControl.SelectedTab == waterTab && waterTreeView.SelectedNode != null && + waterTreeView.SelectedNode.Tag != null && waterTreeView.SelectedNode.Tag is COLFile.ExtendedColorEntry) { - var colorEntry = ((COLFile.ExtendedColorEntry)treeView2.SelectedNode.Tag); + var colorEntry = ((COLFile.ExtendedColorEntry)waterTreeView.SelectedNode.Tag); colorEntry.color = (uint)colorPick.Color.ToArgb(); } - else if (tabControl.SelectedTab == colorsTab && treeView1.SelectedNode != null && - treeView1.SelectedNode.Tag != null && treeView1.SelectedNode.Tag is COLFile.ColorEntry) + else if (tabControl.SelectedTab == underwaterTab && underwaterTreeView.SelectedNode != null && + underwaterTreeView.SelectedNode.Tag != null && underwaterTreeView.SelectedNode.Tag is COLFile.ExtendedColorEntry) { - var colorEntry = ((COLFile.ColorEntry)treeView1.SelectedNode.Tag); + var colorEntry = ((COLFile.ExtendedColorEntry)underwaterTreeView.SelectedNode.Tag); + colorEntry.color_b = (uint)colorPick.Color.ToArgb(); + } + else if (tabControl.SelectedTab == fogTab && fogTreeView.SelectedNode != null && + fogTreeView.SelectedNode.Tag != null && fogTreeView.SelectedNode.Tag is COLFile.ExtendedColorEntry) + { + var colorEntry = ((COLFile.ExtendedColorEntry)fogTreeView.SelectedNode.Tag); + colorEntry.color_c = (uint)colorPick.Color.ToArgb(); + } + else if (tabControl.SelectedTab == colorsTab && colorTreeView.SelectedNode != null && + colorTreeView.SelectedNode.Tag != null && colorTreeView.SelectedNode.Tag is COLFile.ColorEntry) + { + var colorEntry = ((COLFile.ColorEntry)colorTreeView.SelectedNode.Tag); colorEntry.color = (uint)colorPick.Color.ToArgb() & 0xffffff; } colorPick.Dispose(); diff --git a/PCK-Studio/Forms/Editor/COLEditor.resx b/PCK-Studio/Forms/Editor/COLEditor.resx index 767462aa..77fcbaa3 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.resx +++ b/PCK-Studio/Forms/Editor/COLEditor.resx @@ -117,183 +117,14 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - setColorBtn - - - MetroFramework.Controls.MetroButton, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - metroPanel1 - - - 2 - - - blueUpDown - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - metroPanel1 - - - 3 - - - greenUpDown - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - metroPanel1 - - - 4 - - - redUpDown - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - metroPanel1 - - - 5 - - - alphaUpDown - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - metroPanel1 - - - 6 - - - alphaLabel - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - metroPanel1 - - - 7 - - - blueLabel - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - metroPanel1 - - - 8 - - - greenLabel - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - metroPanel1 - - - 9 - - - redLabel - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - metroPanel1 - - - 10 - - - colorTextbox - - - MetroFramework.Controls.MetroTextBox, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - metroPanel1 - - - 11 - - - metroLabel1 - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - metroPanel1 - - - 12 - - - pictureBox1 - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - metroPanel1 - - - 13 - - - - Fill - - - 20, 60 - - - 612, 523 - - - - 0 - - - metroPanel1 - - - MetroFramework.Controls.MetroPanel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - $this - - - 2 - - 426, 290 + 400, 290 125, 23 + 22 @@ -313,7 +144,7 @@ 2 - 426, 397 + 400, 397 125, 20 @@ -334,7 +165,7 @@ 3 - 426, 371 + 400, 371 125, 20 @@ -355,7 +186,7 @@ 4 - 426, 345 + 400, 345 125, 20 @@ -376,7 +207,7 @@ 5 - 426, 319 + 400, 319 125, 20 @@ -403,7 +234,7 @@ True - 393, 320 + 367, 320 21, 19 @@ -433,7 +264,7 @@ True - 394, 395 + 368, 395 20, 19 @@ -460,7 +291,7 @@ True - 393, 371 + 367, 371 21, 19 @@ -487,7 +318,7 @@ True - 394, 345 + 368, 345 20, 19 @@ -510,6 +341,7 @@ 10 + @@ -529,7 +361,7 @@ False - 426, 423 + 400, 423 125, 23 @@ -553,7 +385,7 @@ True - 368, 423 + 342, 423 46, 19 @@ -597,12 +429,58 @@ 13 + + Fill + + + 20, 60 + + + 612, 523 + + + 0 + + + metroPanel1 + + + MetroFramework.Controls.MetroPanel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + $this + + + 2 + 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 + 20, 60 @@ -627,45 +505,38 @@ 0 - - 37, 20 + + Fill - - File + + 0, 0 - - - 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 - + + No - - 98, 22 + + 320, 458 - - Save + + 0 - - treeView2 + + waterTreeView - + System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + waterTab - + 0 4, 38 - 426, 458 + 320, 458 1 @@ -685,55 +556,70 @@ 1 - - Fill - - + 0, 0 - - No - - - 426, 458 - - - 0 - - - treeView2 - - - System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - waterTab - - - 0 - - - Fill - - - 0, 0 - - + 320, 458 - + 0 - - treeView1 + + underwaterTreeView - + System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + underwaterTab + + + 0 + + + 0, 0 + + + 320, 458 + + + 0 + + + fogTreeView + + + System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + fogTab + + + 0 + + + Fill + + + 0, 0 + + + 320, 458 + + + 0 + + + colorTreeView + + + System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + colorsTab - + 0 @@ -767,7 +653,7 @@ 4, 38 - 426, 458 + 320, 458 2 From 991a33c40c420235afe79da7045e84e9b08b261b Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 25 Sep 2022 19:54:29 -0400 Subject: [PATCH 013/110] up down values now updated in color editor --- PCK-Studio/Forms/Editor/COLEditor.cs | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/PCK-Studio/Forms/Editor/COLEditor.cs b/PCK-Studio/Forms/Editor/COLEditor.cs index 6329b450..2cae1657 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.cs @@ -264,25 +264,42 @@ namespace PckStudio.Forms.Editor waterTreeView.SelectedNode.Tag != null && waterTreeView.SelectedNode.Tag is COLFile.ExtendedColorEntry) { var colorEntry = ((COLFile.ExtendedColorEntry)waterTreeView.SelectedNode.Tag); - colorEntry.color = (uint)colorPick.Color.ToArgb(); + // preserves the alpha so the user can handle it since the color picker doesn't support alpha + Color fixed_color = Color.FromArgb(Color.FromArgb((int)colorEntry.color).A, colorPick.Color); + colorEntry.color = (uint)fixed_color.ToArgb(); + pictureBox1.BackColor = fixed_color; + redUpDown.Value = colorPick.Color.R; + greenUpDown.Value = colorPick.Color.G; + blueUpDown.Value = colorPick.Color.B; } else if (tabControl.SelectedTab == underwaterTab && underwaterTreeView.SelectedNode != null && underwaterTreeView.SelectedNode.Tag != null && underwaterTreeView.SelectedNode.Tag is COLFile.ExtendedColorEntry) { var colorEntry = ((COLFile.ExtendedColorEntry)underwaterTreeView.SelectedNode.Tag); - colorEntry.color_b = (uint)colorPick.Color.ToArgb(); + // the game doesn't care about the alpha value for underwater colors + colorEntry.color_b = (uint)Color.FromArgb(0, colorPick.Color).ToArgb(); + redUpDown.Value = colorPick.Color.R; + greenUpDown.Value = colorPick.Color.G; + blueUpDown.Value = colorPick.Color.B; } else if (tabControl.SelectedTab == fogTab && fogTreeView.SelectedNode != null && fogTreeView.SelectedNode.Tag != null && fogTreeView.SelectedNode.Tag is COLFile.ExtendedColorEntry) { var colorEntry = ((COLFile.ExtendedColorEntry)fogTreeView.SelectedNode.Tag); - colorEntry.color_c = (uint)colorPick.Color.ToArgb(); + // the game doesn't care about the alpha value for fog colors + colorEntry.color_c = (uint)Color.FromArgb(0, colorPick.Color).ToArgb(); + redUpDown.Value = colorPick.Color.R; + greenUpDown.Value = colorPick.Color.G; + blueUpDown.Value = colorPick.Color.B; } else if (tabControl.SelectedTab == colorsTab && colorTreeView.SelectedNode != null && colorTreeView.SelectedNode.Tag != null && colorTreeView.SelectedNode.Tag is COLFile.ColorEntry) { var colorEntry = ((COLFile.ColorEntry)colorTreeView.SelectedNode.Tag); colorEntry.color = (uint)colorPick.Color.ToArgb() & 0xffffff; + redUpDown.Value = colorPick.Color.R; + greenUpDown.Value = colorPick.Color.G; + blueUpDown.Value = colorPick.Color.B; } colorPick.Dispose(); } From ccb2abc9293a5470f12c2d8c508416a643eb52a6 Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 25 Sep 2022 20:54:51 -0400 Subject: [PATCH 014/110] Added alpha color up down support to color editor --- PCK-Studio/Forms/Editor/COLEditor.Designer.cs | 186 +++++++++--------- PCK-Studio/Forms/Editor/COLEditor.cs | 14 +- 2 files changed, 106 insertions(+), 94 deletions(-) diff --git a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs index c8513916..73505654 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs @@ -34,16 +34,11 @@ namespace PckStudio.Forms.Editor System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(COLEditor)); this.metroPanel1 = new MetroFramework.Controls.MetroPanel(); this.setColorBtn = new MetroFramework.Controls.MetroButton(); - this.blueUpDown = new System.Windows.Forms.NumericUpDown(); - this.greenUpDown = new System.Windows.Forms.NumericUpDown(); - this.redUpDown = new System.Windows.Forms.NumericUpDown(); this.alphaUpDown = new System.Windows.Forms.NumericUpDown(); this.alphaLabel = new MetroFramework.Controls.MetroLabel(); this.blueLabel = new MetroFramework.Controls.MetroLabel(); this.greenLabel = new MetroFramework.Controls.MetroLabel(); this.redLabel = new MetroFramework.Controls.MetroLabel(); - this.colorTextbox = new MetroFramework.Controls.MetroTextBox(); - this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.menuStrip = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -57,10 +52,12 @@ namespace PckStudio.Forms.Editor this.tabControl = new MetroFramework.Controls.MetroTabControl(); this.underwaterTab = new System.Windows.Forms.TabPage(); this.fogTab = new System.Windows.Forms.TabPage(); + this.redUpDown = new System.Windows.Forms.NumericUpDown(); + this.greenUpDown = new System.Windows.Forms.NumericUpDown(); + this.blueUpDown = new System.Windows.Forms.NumericUpDown(); + this.colorTextbox = new MetroFramework.Controls.MetroTextBox(); + this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); this.metroPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.redUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.alphaUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.menuStrip.SuspendLayout(); @@ -69,6 +66,9 @@ namespace PckStudio.Forms.Editor this.tabControl.SuspendLayout(); this.underwaterTab.SuspendLayout(); this.fogTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.redUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).BeginInit(); this.SuspendLayout(); // // metroPanel1 @@ -104,45 +104,6 @@ namespace PckStudio.Forms.Editor this.setColorBtn.UseSelectable = true; this.setColorBtn.Click += new System.EventHandler(this.setColorBtn_Click); // - // blueUpDown - // - this.blueUpDown.BackColor = System.Drawing.SystemColors.Desktop; - this.blueUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); - resources.ApplyResources(this.blueUpDown, "blueUpDown"); - this.blueUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.blueUpDown.Name = "blueUpDown"; - this.blueUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); - // - // greenUpDown - // - this.greenUpDown.BackColor = System.Drawing.SystemColors.Desktop; - this.greenUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); - resources.ApplyResources(this.greenUpDown, "greenUpDown"); - this.greenUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.greenUpDown.Name = "greenUpDown"; - this.greenUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); - // - // redUpDown - // - this.redUpDown.BackColor = System.Drawing.SystemColors.Desktop; - this.redUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); - resources.ApplyResources(this.redUpDown, "redUpDown"); - this.redUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.redUpDown.Name = "redUpDown"; - this.redUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); - // // alphaUpDown // this.alphaUpDown.BackColor = System.Drawing.SystemColors.Desktop; @@ -154,7 +115,7 @@ namespace PckStudio.Forms.Editor 0, 0}); this.alphaUpDown.Name = "alphaUpDown"; - this.alphaUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); + this.alphaUpDown.ValueChanged += new System.EventHandler(this.alpha_ValueChanged); // // alphaLabel // @@ -180,43 +141,6 @@ namespace PckStudio.Forms.Editor this.redLabel.Name = "redLabel"; this.redLabel.Theme = MetroFramework.MetroThemeStyle.Dark; // - // colorTextbox - // - // - // - // - this.colorTextbox.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image"))); - this.colorTextbox.CustomButton.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("resource.ImeMode"))); - this.colorTextbox.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location"))); - this.colorTextbox.CustomButton.Name = ""; - this.colorTextbox.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size"))); - this.colorTextbox.CustomButton.Style = MetroFramework.MetroColorStyle.Blue; - this.colorTextbox.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex"))); - this.colorTextbox.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light; - this.colorTextbox.CustomButton.UseSelectable = true; - this.colorTextbox.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible"))); - this.colorTextbox.Lines = new string[0]; - resources.ApplyResources(this.colorTextbox, "colorTextbox"); - this.colorTextbox.MaxLength = 32767; - this.colorTextbox.Name = "colorTextbox"; - this.colorTextbox.PasswordChar = '\0'; - this.colorTextbox.ScrollBars = System.Windows.Forms.ScrollBars.None; - this.colorTextbox.SelectedText = ""; - this.colorTextbox.SelectionLength = 0; - this.colorTextbox.SelectionStart = 0; - this.colorTextbox.ShortcutsEnabled = true; - this.colorTextbox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.colorTextbox.UseSelectable = true; - 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); - // - // metroLabel1 - // - resources.ApplyResources(this.metroLabel1, "metroLabel1"); - this.metroLabel1.Name = "metroLabel1"; - this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark; - // // pictureBox1 // this.pictureBox1.BackColor = System.Drawing.Color.Gray; @@ -315,6 +239,82 @@ namespace PckStudio.Forms.Editor resources.ApplyResources(this.fogTab, "fogTab"); this.fogTab.Name = "fogTab"; // + // redUpDown + // + this.redUpDown.BackColor = System.Drawing.SystemColors.Desktop; + this.redUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); + resources.ApplyResources(this.redUpDown, "redUpDown"); + this.redUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.redUpDown.Name = "redUpDown"; + this.redUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); + // + // greenUpDown + // + this.greenUpDown.BackColor = System.Drawing.SystemColors.Desktop; + this.greenUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); + resources.ApplyResources(this.greenUpDown, "greenUpDown"); + this.greenUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.greenUpDown.Name = "greenUpDown"; + this.greenUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); + // + // blueUpDown + // + this.blueUpDown.BackColor = System.Drawing.SystemColors.Desktop; + this.blueUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); + resources.ApplyResources(this.blueUpDown, "blueUpDown"); + this.blueUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.blueUpDown.Name = "blueUpDown"; + this.blueUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); + // + // colorTextbox + // + // + // + // + this.colorTextbox.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image"))); + this.colorTextbox.CustomButton.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("resource.ImeMode"))); + this.colorTextbox.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location"))); + this.colorTextbox.CustomButton.Name = ""; + this.colorTextbox.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size"))); + this.colorTextbox.CustomButton.Style = MetroFramework.MetroColorStyle.Blue; + this.colorTextbox.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex"))); + this.colorTextbox.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light; + this.colorTextbox.CustomButton.UseSelectable = true; + this.colorTextbox.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible"))); + this.colorTextbox.Lines = new string[0]; + resources.ApplyResources(this.colorTextbox, "colorTextbox"); + this.colorTextbox.MaxLength = 32767; + this.colorTextbox.Name = "colorTextbox"; + this.colorTextbox.PasswordChar = '\0'; + this.colorTextbox.ScrollBars = System.Windows.Forms.ScrollBars.None; + this.colorTextbox.SelectedText = ""; + this.colorTextbox.SelectionLength = 0; + this.colorTextbox.SelectionStart = 0; + this.colorTextbox.ShortcutsEnabled = true; + this.colorTextbox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.colorTextbox.UseSelectable = true; + 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); + // + // metroLabel1 + // + resources.ApplyResources(this.metroLabel1, "metroLabel1"); + this.metroLabel1.Name = "metroLabel1"; + this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark; + // // COLEditor // resources.ApplyResources(this, "$this"); @@ -328,9 +328,6 @@ namespace PckStudio.Forms.Editor this.Theme = MetroFramework.MetroThemeStyle.Dark; this.metroPanel1.ResumeLayout(false); this.metroPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.redUpDown)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.alphaUpDown)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.menuStrip.ResumeLayout(false); @@ -340,6 +337,9 @@ namespace PckStudio.Forms.Editor this.tabControl.ResumeLayout(false); this.underwaterTab.ResumeLayout(false); this.fogTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.redUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).EndInit(); this.ResumeLayout(false); } @@ -347,12 +347,10 @@ namespace PckStudio.Forms.Editor #endregion private MetroFramework.Controls.MetroPanel metroPanel1; - private MetroFramework.Controls.MetroTextBox colorTextbox; private TreeView colorTreeView; private TreeView waterTreeView; private TreeView fogTreeView; private TreeView underwaterTreeView; - private MetroFramework.Controls.MetroLabel metroLabel1; private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.MenuStrip menuStrip; private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; @@ -361,9 +359,6 @@ namespace PckStudio.Forms.Editor private MetroFramework.Controls.MetroLabel greenLabel; private MetroFramework.Controls.MetroLabel redLabel; private MetroFramework.Controls.MetroLabel alphaLabel; - private System.Windows.Forms.NumericUpDown blueUpDown; - private System.Windows.Forms.NumericUpDown greenUpDown; - private System.Windows.Forms.NumericUpDown redUpDown; private System.Windows.Forms.NumericUpDown alphaUpDown; private TabPage waterTab; private TabPage colorsTab; @@ -371,5 +366,10 @@ namespace PckStudio.Forms.Editor private MetroFramework.Controls.MetroButton setColorBtn; private TabPage underwaterTab; private TabPage fogTab; + private NumericUpDown blueUpDown; + private NumericUpDown greenUpDown; + private NumericUpDown redUpDown; + private MetroFramework.Controls.MetroTextBox colorTextbox; + private MetroFramework.Controls.MetroLabel metroLabel1; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/COLEditor.cs b/PCK-Studio/Forms/Editor/COLEditor.cs index 2cae1657..40a45035 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.cs @@ -303,5 +303,17 @@ namespace PckStudio.Forms.Editor } colorPick.Dispose(); } - } + + private void alpha_ValueChanged(object sender, EventArgs e) + { + if (tabControl.SelectedTab == waterTab && waterTreeView.SelectedNode != null && + waterTreeView.SelectedNode.Tag != null && waterTreeView.SelectedNode.Tag is COLFile.ExtendedColorEntry) + { + var colorEntry = ((COLFile.ExtendedColorEntry)waterTreeView.SelectedNode.Tag); + Color fixed_color = Color.FromArgb((int)alphaUpDown.Value, Color.FromArgb((int)colorEntry.color)); + colorEntry.color = (uint)fixed_color.ToArgb(); + pictureBox1.BackColor = fixed_color; + } + } + } } From 3431a2fd882615d11d3190e8bd86104d6a59e3b5 Mon Sep 17 00:00:00 2001 From: MNL Date: Mon, 26 Sep 2022 09:31:24 -0400 Subject: [PATCH 015/110] Small tweaks in README --- README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index c0c720cb..50c3fab3 100644 --- a/README.md +++ b/README.md @@ -11,13 +11,12 @@ Modify .PCK archives as you please! ## Supported File format -| Name | file extentions | +| Name | Extention | |:-:|:-:| | Localization files | **.loc** | | Game Rule files | **.grh/.grf** | -| Audio.pck |**audio.pck** | -| Colour file | **.col** | - +| Music Cues file |**audio.pck** | +| Color/Colour Table file | **.col** | ### Known Issues - `.resx been flagged by windows(when downloading source.zip)` @@ -49,14 +48,16 @@ $ cd "-PCK-Studio" * Forms will not load in viewer until the solution is build _at least_ once -## Contributers: +## Active Dev Team: * [PhoenixARC](https://github.com/PhoenixARC) -* [MNL](https://github.com/MattN-L) +* [MattNL](https://github.com/MattN-L) * [Miku-666](https://github.com/NessieHax) + +## Legacy PCK Studio Devs and contributors: * [Nobledez](https://github.com/Nobledez) * [XxModZxXWiiPlaza](https://github.com/XxModZxXWiiPlaza) * [SlothWiiPlaza](https://github.com/Kashiiera) * [jam1garner](https://github.com/jam1garner) -### Credits +### Other Credits * [yaboiFoxx]() for Improved UI concept From d7024b1b1ff21bcb05ef48fabefbb4b58d7cd8a7 Mon Sep 17 00:00:00 2001 From: MNL Date: Mon, 26 Sep 2022 09:33:41 -0400 Subject: [PATCH 016/110] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 50c3fab3..1ae87394 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Modify .PCK archives as you please! * PNG previewing * And much more!\ -## Supported File format +## Supported File formats | Name | Extention | |:-:|:-:| From c1aa51c8e68469f744b5e82164e0f5dfd4b587d9 Mon Sep 17 00:00:00 2001 From: MattNL Date: Mon, 26 Sep 2022 14:17:28 -0400 Subject: [PATCH 017/110] Col Editor now fills in missing color files --- PCK-Studio/Forms/Editor/COLEditor.cs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/PCK-Studio/Forms/Editor/COLEditor.cs b/PCK-Studio/Forms/Editor/COLEditor.cs index 40a45035..f032cbd2 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.cs @@ -16,6 +16,7 @@ namespace PckStudio.Forms.Editor { public partial class COLEditor : MetroForm { + COLFile default_colourfile; COLFile colourfile; private readonly PCKFile.FileData _file; @@ -30,22 +31,29 @@ namespace PckStudio.Forms.Editor colourfile = COLFileReader.Read(stream); } - foreach (var obj in colourfile.entries) + using (var stream = new MemoryStream(Properties.Resources.colours)) { + default_colourfile = COLFileReader.Read(stream); + } + + foreach (var obj in default_colourfile.entries) + { + COLFile.ColorEntry entry = colourfile.entries.Find(color => color.name == obj.name); TreeNode tn = new TreeNode(obj.name); - tn.Tag = obj; + tn.Tag = entry != null ? entry : obj; colorTreeView.Nodes.Add(tn); } foreach (var obj in colourfile.waterEntries) { + COLFile.ExtendedColorEntry entry = colourfile.waterEntries.Find(color => color.name == obj.name); TreeNode tn = new TreeNode(obj.name); - tn.Tag = obj; + tn.Tag = entry != null ? entry : obj; waterTreeView.Nodes.Add(tn); TreeNode tnB = new TreeNode(obj.name); - tnB.Tag = obj; + tnB.Tag = entry != null ? entry : obj; underwaterTreeView.Nodes.Add(tnB); TreeNode tnC = new TreeNode(obj.name); - tnC.Tag = obj; + tnC.Tag = entry != null ? entry : obj; fogTreeView.Nodes.Add(tnC); } } From 2cdb8840fc4217faf7deee07f9c275db8401f274 Mon Sep 17 00:00:00 2001 From: MattNL Date: Mon, 26 Sep 2022 14:18:04 -0400 Subject: [PATCH 018/110] Replaced COL Editor Delete function with one to restore original colors --- PCK-Studio/Forms/Editor/COLEditor.cs | 45 ++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/PCK-Studio/Forms/Editor/COLEditor.cs b/PCK-Studio/Forms/Editor/COLEditor.cs index f032cbd2..b9242e99 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.cs @@ -153,38 +153,57 @@ namespace PckStudio.Forms.Editor var node = colorTreeView.SelectedNode; if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ColorEntry colorInfo) { - colourfile.entries.Remove(colorInfo); - if (colorTreeView.Nodes.Count > 0) colorTreeView.Nodes.Remove(node); - } + COLFile.ColorEntry entry = default_colourfile.entries.Find(color => color.name == node.Text); + colorInfo.color = entry.color; + redUpDown.Value = entry.color >> 16 & 0xff; + greenUpDown.Value = entry.color >> 8 & 0xff; + blueUpDown.Value = entry.color & 0xff; + pictureBox1.BackColor = Color.FromArgb(0xff << 24 | (int)entry.color); + } } private void treeView2_KeyDown(object sender, KeyEventArgs e) { var node = waterTreeView.SelectedNode; - if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ExtendedColorEntry) + if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ExtendedColorEntry colorInfo) { - colourfile.waterEntries.Remove((COLFile.ExtendedColorEntry)node.Tag); - if (waterTreeView.Nodes.Count > 0) waterTreeView.Nodes.Remove(node); - } + COLFile.ExtendedColorEntry entry = default_colourfile.waterEntries.Find(color => color.name == node.Text); + colorInfo.color = entry.color; + alphaUpDown.Value = entry.color >> 24 & 0xff; + redUpDown.Value = entry.color >> 16 & 0xff; + greenUpDown.Value = entry.color >> 8 & 0xff; + blueUpDown.Value = entry.color & 0xff; + pictureBox1.BackColor = Color.FromArgb((int)entry.color); + } } private void treeView3_KeyDown(object sender, KeyEventArgs e) { var node = underwaterTreeView.SelectedNode; - if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ExtendedColorEntry) + if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ExtendedColorEntry colorInfo) { - colourfile.waterEntries.Remove((COLFile.ExtendedColorEntry)node.Tag); - if (underwaterTreeView.Nodes.Count > 0) underwaterTreeView.Nodes.Remove(node); + COLFile.ExtendedColorEntry entry = default_colourfile.waterEntries.Find(color => color.name == node.Text); + colorInfo.color_b = entry.color_b; + alphaUpDown.Value = entry.color >> 24 & 0xff; + redUpDown.Value = entry.color >> 16 & 0xff; + greenUpDown.Value = entry.color >> 8 & 0xff; + blueUpDown.Value = entry.color & 0xff; + pictureBox1.BackColor = Color.FromArgb(0xff << 24 | (int)entry.color); } } private void treeView4_KeyDown(object sender, KeyEventArgs e) { var node = fogTreeView.SelectedNode; - if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ExtendedColorEntry) + if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ExtendedColorEntry colorInfo) { - colourfile.waterEntries.Remove((COLFile.ExtendedColorEntry)node.Tag); - if (fogTreeView.Nodes.Count > 0) fogTreeView.Nodes.Remove(node); + COLFile.ExtendedColorEntry entry = default_colourfile.waterEntries.Find(color => color.name == node.Text); + colorInfo.color_c = entry.color_c; + alphaUpDown.Value = entry.color >> 24 & 0xff; + redUpDown.Value = entry.color >> 16 & 0xff; + greenUpDown.Value = entry.color >> 8 & 0xff; + blueUpDown.Value = entry.color & 0xff; + pictureBox1.BackColor = Color.FromArgb(0xff << 24 | (int)entry.color); } } From 56a78f026856d382a1155809ead3fe8426f571fa Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 27 Sep 2022 21:24:01 -0400 Subject: [PATCH 019/110] Added RestoreColor Tool to COL editor --- PCK-Studio/Forms/Editor/COLEditor.Designer.cs | 191 +++++++------ PCK-Studio/Forms/Editor/COLEditor.cs | 82 ++++-- PCK-Studio/Forms/Editor/COLEditor.resx | 268 ++++++++++++++---- 3 files changed, 381 insertions(+), 160 deletions(-) diff --git a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs index 73505654..2d7122f1 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs @@ -31,14 +31,20 @@ namespace PckStudio.Forms.Editor /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(COLEditor)); this.metroPanel1 = new MetroFramework.Controls.MetroPanel(); this.setColorBtn = new MetroFramework.Controls.MetroButton(); + this.blueUpDown = new System.Windows.Forms.NumericUpDown(); + this.greenUpDown = new System.Windows.Forms.NumericUpDown(); + this.redUpDown = new System.Windows.Forms.NumericUpDown(); this.alphaUpDown = new System.Windows.Forms.NumericUpDown(); this.alphaLabel = new MetroFramework.Controls.MetroLabel(); this.blueLabel = new MetroFramework.Controls.MetroLabel(); this.greenLabel = new MetroFramework.Controls.MetroLabel(); this.redLabel = new MetroFramework.Controls.MetroLabel(); + this.colorTextbox = new MetroFramework.Controls.MetroTextBox(); + this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.menuStrip = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -52,12 +58,12 @@ namespace PckStudio.Forms.Editor this.tabControl = new MetroFramework.Controls.MetroTabControl(); this.underwaterTab = new System.Windows.Forms.TabPage(); this.fogTab = new System.Windows.Forms.TabPage(); - this.redUpDown = new System.Windows.Forms.NumericUpDown(); - this.greenUpDown = new System.Windows.Forms.NumericUpDown(); - this.blueUpDown = new System.Windows.Forms.NumericUpDown(); - this.colorTextbox = new MetroFramework.Controls.MetroTextBox(); - this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); + this.ColorContextMenu = new MetroFramework.Controls.MetroContextMenu(this.components); + this.restoreOriginalColorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.metroPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.redUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.alphaUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.menuStrip.SuspendLayout(); @@ -66,9 +72,7 @@ namespace PckStudio.Forms.Editor this.tabControl.SuspendLayout(); this.underwaterTab.SuspendLayout(); this.fogTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.redUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).BeginInit(); + this.ColorContextMenu.SuspendLayout(); this.SuspendLayout(); // // metroPanel1 @@ -104,6 +108,45 @@ namespace PckStudio.Forms.Editor this.setColorBtn.UseSelectable = true; this.setColorBtn.Click += new System.EventHandler(this.setColorBtn_Click); // + // blueUpDown + // + this.blueUpDown.BackColor = System.Drawing.SystemColors.Desktop; + this.blueUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); + resources.ApplyResources(this.blueUpDown, "blueUpDown"); + this.blueUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.blueUpDown.Name = "blueUpDown"; + this.blueUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); + // + // greenUpDown + // + this.greenUpDown.BackColor = System.Drawing.SystemColors.Desktop; + this.greenUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); + resources.ApplyResources(this.greenUpDown, "greenUpDown"); + this.greenUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.greenUpDown.Name = "greenUpDown"; + this.greenUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); + // + // redUpDown + // + this.redUpDown.BackColor = System.Drawing.SystemColors.Desktop; + this.redUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); + resources.ApplyResources(this.redUpDown, "redUpDown"); + this.redUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.redUpDown.Name = "redUpDown"; + this.redUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); + // // alphaUpDown // this.alphaUpDown.BackColor = System.Drawing.SystemColors.Desktop; @@ -141,6 +184,43 @@ namespace PckStudio.Forms.Editor this.redLabel.Name = "redLabel"; this.redLabel.Theme = MetroFramework.MetroThemeStyle.Dark; // + // colorTextbox + // + // + // + // + this.colorTextbox.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image"))); + this.colorTextbox.CustomButton.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("resource.ImeMode"))); + this.colorTextbox.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location"))); + this.colorTextbox.CustomButton.Name = ""; + this.colorTextbox.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size"))); + this.colorTextbox.CustomButton.Style = MetroFramework.MetroColorStyle.Blue; + this.colorTextbox.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex"))); + this.colorTextbox.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light; + this.colorTextbox.CustomButton.UseSelectable = true; + this.colorTextbox.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible"))); + this.colorTextbox.Lines = new string[0]; + resources.ApplyResources(this.colorTextbox, "colorTextbox"); + this.colorTextbox.MaxLength = 32767; + this.colorTextbox.Name = "colorTextbox"; + this.colorTextbox.PasswordChar = '\0'; + this.colorTextbox.ScrollBars = System.Windows.Forms.ScrollBars.None; + this.colorTextbox.SelectedText = ""; + this.colorTextbox.SelectionLength = 0; + this.colorTextbox.SelectionStart = 0; + this.colorTextbox.ShortcutsEnabled = true; + this.colorTextbox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.colorTextbox.UseSelectable = true; + 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); + // + // metroLabel1 + // + resources.ApplyResources(this.metroLabel1, "metroLabel1"); + this.metroLabel1.Name = "metroLabel1"; + this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark; + // // pictureBox1 // this.pictureBox1.BackColor = System.Drawing.Color.Gray; @@ -179,6 +259,7 @@ namespace PckStudio.Forms.Editor // // 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); @@ -186,6 +267,7 @@ namespace PckStudio.Forms.Editor // // 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); @@ -193,6 +275,7 @@ namespace PckStudio.Forms.Editor // // 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); @@ -207,6 +290,7 @@ namespace PckStudio.Forms.Editor // // 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); @@ -239,81 +323,19 @@ namespace PckStudio.Forms.Editor resources.ApplyResources(this.fogTab, "fogTab"); this.fogTab.Name = "fogTab"; // - // redUpDown + // ColorContextMenu // - this.redUpDown.BackColor = System.Drawing.SystemColors.Desktop; - this.redUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); - resources.ApplyResources(this.redUpDown, "redUpDown"); - this.redUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.redUpDown.Name = "redUpDown"; - this.redUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); + this.ColorContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.restoreOriginalColorToolStripMenuItem}); + this.ColorContextMenu.Name = "ColorContextMenu"; + resources.ApplyResources(this.ColorContextMenu, "ColorContextMenu"); // - // greenUpDown + // restoreOriginalColorToolStripMenuItem // - this.greenUpDown.BackColor = System.Drawing.SystemColors.Desktop; - this.greenUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); - resources.ApplyResources(this.greenUpDown, "greenUpDown"); - this.greenUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.greenUpDown.Name = "greenUpDown"; - this.greenUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); - // - // blueUpDown - // - this.blueUpDown.BackColor = System.Drawing.SystemColors.Desktop; - this.blueUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); - resources.ApplyResources(this.blueUpDown, "blueUpDown"); - this.blueUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.blueUpDown.Name = "blueUpDown"; - this.blueUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); - // - // colorTextbox - // - // - // - // - this.colorTextbox.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image"))); - this.colorTextbox.CustomButton.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("resource.ImeMode"))); - this.colorTextbox.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location"))); - this.colorTextbox.CustomButton.Name = ""; - this.colorTextbox.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size"))); - this.colorTextbox.CustomButton.Style = MetroFramework.MetroColorStyle.Blue; - this.colorTextbox.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex"))); - this.colorTextbox.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light; - this.colorTextbox.CustomButton.UseSelectable = true; - this.colorTextbox.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible"))); - this.colorTextbox.Lines = new string[0]; - resources.ApplyResources(this.colorTextbox, "colorTextbox"); - this.colorTextbox.MaxLength = 32767; - this.colorTextbox.Name = "colorTextbox"; - this.colorTextbox.PasswordChar = '\0'; - this.colorTextbox.ScrollBars = System.Windows.Forms.ScrollBars.None; - this.colorTextbox.SelectedText = ""; - this.colorTextbox.SelectionLength = 0; - this.colorTextbox.SelectionStart = 0; - this.colorTextbox.ShortcutsEnabled = true; - this.colorTextbox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.colorTextbox.UseSelectable = true; - 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); - // - // metroLabel1 - // - resources.ApplyResources(this.metroLabel1, "metroLabel1"); - this.metroLabel1.Name = "metroLabel1"; - this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark; + this.restoreOriginalColorToolStripMenuItem.Image = global::PckStudio.Properties.Resources.ExportFile; + this.restoreOriginalColorToolStripMenuItem.Name = "restoreOriginalColorToolStripMenuItem"; + resources.ApplyResources(this.restoreOriginalColorToolStripMenuItem, "restoreOriginalColorToolStripMenuItem"); + this.restoreOriginalColorToolStripMenuItem.Click += new System.EventHandler(this.restoreOriginalColorToolStripMenuItem_Click); // // COLEditor // @@ -328,6 +350,9 @@ namespace PckStudio.Forms.Editor this.Theme = MetroFramework.MetroThemeStyle.Dark; this.metroPanel1.ResumeLayout(false); this.metroPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.redUpDown)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.alphaUpDown)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.menuStrip.ResumeLayout(false); @@ -337,9 +362,7 @@ namespace PckStudio.Forms.Editor this.tabControl.ResumeLayout(false); this.underwaterTab.ResumeLayout(false); this.fogTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.redUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).EndInit(); + this.ColorContextMenu.ResumeLayout(false); this.ResumeLayout(false); } @@ -371,5 +394,7 @@ namespace PckStudio.Forms.Editor private NumericUpDown redUpDown; private MetroFramework.Controls.MetroTextBox colorTextbox; private MetroFramework.Controls.MetroLabel metroLabel1; + private MetroFramework.Controls.MetroContextMenu ColorContextMenu; + private ToolStripMenuItem restoreOriginalColorToolStripMenuItem; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/COLEditor.cs b/PCK-Studio/Forms/Editor/COLEditor.cs index b9242e99..b6c943ff 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.cs @@ -153,12 +153,7 @@ namespace PckStudio.Forms.Editor var node = colorTreeView.SelectedNode; if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ColorEntry colorInfo) { - COLFile.ColorEntry entry = default_colourfile.entries.Find(color => color.name == node.Text); - colorInfo.color = entry.color; - redUpDown.Value = entry.color >> 16 & 0xff; - greenUpDown.Value = entry.color >> 8 & 0xff; - blueUpDown.Value = entry.color & 0xff; - pictureBox1.BackColor = Color.FromArgb(0xff << 24 | (int)entry.color); + restoreOriginalColorToolStripMenuItem_Click(sender, e); } } @@ -167,13 +162,7 @@ namespace PckStudio.Forms.Editor var node = waterTreeView.SelectedNode; if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ExtendedColorEntry colorInfo) { - COLFile.ExtendedColorEntry entry = default_colourfile.waterEntries.Find(color => color.name == node.Text); - colorInfo.color = entry.color; - alphaUpDown.Value = entry.color >> 24 & 0xff; - redUpDown.Value = entry.color >> 16 & 0xff; - greenUpDown.Value = entry.color >> 8 & 0xff; - blueUpDown.Value = entry.color & 0xff; - pictureBox1.BackColor = Color.FromArgb((int)entry.color); + restoreOriginalColorToolStripMenuItem_Click(sender, e); } } @@ -182,13 +171,7 @@ namespace PckStudio.Forms.Editor var node = underwaterTreeView.SelectedNode; if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ExtendedColorEntry colorInfo) { - COLFile.ExtendedColorEntry entry = default_colourfile.waterEntries.Find(color => color.name == node.Text); - colorInfo.color_b = entry.color_b; - alphaUpDown.Value = entry.color >> 24 & 0xff; - redUpDown.Value = entry.color >> 16 & 0xff; - greenUpDown.Value = entry.color >> 8 & 0xff; - blueUpDown.Value = entry.color & 0xff; - pictureBox1.BackColor = Color.FromArgb(0xff << 24 | (int)entry.color); + restoreOriginalColorToolStripMenuItem_Click(sender, e); } } @@ -197,13 +180,7 @@ namespace PckStudio.Forms.Editor var node = fogTreeView.SelectedNode; if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ExtendedColorEntry colorInfo) { - COLFile.ExtendedColorEntry entry = default_colourfile.waterEntries.Find(color => color.name == node.Text); - colorInfo.color_c = entry.color_c; - alphaUpDown.Value = entry.color >> 24 & 0xff; - redUpDown.Value = entry.color >> 16 & 0xff; - greenUpDown.Value = entry.color >> 8 & 0xff; - blueUpDown.Value = entry.color & 0xff; - pictureBox1.BackColor = Color.FromArgb(0xff << 24 | (int)entry.color); + restoreOriginalColorToolStripMenuItem_Click(sender, e); } } @@ -342,5 +319,56 @@ namespace PckStudio.Forms.Editor pictureBox1.BackColor = fixed_color; } } + + private void restoreOriginalColorToolStripMenuItem_Click(object sender, EventArgs e) + { + if (tabControl.SelectedTab == colorsTab && colorTreeView.SelectedNode != null && + colorTreeView.SelectedNode.Tag != null && colorTreeView.SelectedNode.Tag is COLFile.ColorEntry colorInfoD) + { + MessageBox.Show("Color"); + COLFile.ColorEntry entry = default_colourfile.entries.Find(color => color.name == colorTreeView.SelectedNode.Text); + colorInfoD.color = entry.color; + redUpDown.Value = colorInfoD.color >> 16 & 0xff; + greenUpDown.Value = colorInfoD.color >> 8 & 0xff; + blueUpDown.Value = colorInfoD.color & 0xff; + pictureBox1.BackColor = Color.FromArgb(0xff << 24 | (int)colorInfoD.color); + } + else if (tabControl.SelectedTab == waterTab && waterTreeView.SelectedNode != null && + waterTreeView.SelectedNode.Tag != null && waterTreeView.SelectedNode.Tag is COLFile.ExtendedColorEntry colorInfo) + { + MessageBox.Show("Water"); + COLFile.ExtendedColorEntry entry = default_colourfile.waterEntries.Find(color => color.name == waterTreeView.SelectedNode.Text); + colorInfo.color = entry.color; + alphaUpDown.Value = colorInfo.color >> 24 & 0xff; + redUpDown.Value = colorInfo.color >> 16 & 0xff; + greenUpDown.Value = colorInfo.color >> 8 & 0xff; + blueUpDown.Value = colorInfo.color & 0xff; + pictureBox1.BackColor = Color.FromArgb((int)colorInfo.color); + } + else if (tabControl.SelectedTab == underwaterTab && underwaterTreeView.SelectedNode != null && + underwaterTreeView.SelectedNode.Tag != null && underwaterTreeView.SelectedNode.Tag is COLFile.ExtendedColorEntry colorInfoB) + { + MessageBox.Show("Underwater"); + COLFile.ExtendedColorEntry entry = default_colourfile.waterEntries.Find(color => color.name == underwaterTreeView.SelectedNode.Text); + colorInfoB.color_b = entry.color_b; + alphaUpDown.Value = colorInfoB.color_b >> 24 & 0xff; + redUpDown.Value = colorInfoB.color_b >> 16 & 0xff; + greenUpDown.Value = colorInfoB.color_b >> 8 & 0xff; + blueUpDown.Value = colorInfoB.color_b & 0xff; + pictureBox1.BackColor = Color.FromArgb(0xff << 24 | (int)colorInfoB.color_b); + } + else if (tabControl.SelectedTab == fogTab && fogTreeView.SelectedNode != null && + fogTreeView.SelectedNode.Tag != null && fogTreeView.SelectedNode.Tag is COLFile.ExtendedColorEntry colorInfoC) + { + MessageBox.Show("Fog"); + COLFile.ExtendedColorEntry entry = default_colourfile.waterEntries.Find(color => color.name == fogTreeView.SelectedNode.Text); + colorInfoC.color_c = entry.color_c; + alphaUpDown.Value = colorInfoC.color_c >> 24 & 0xff; + redUpDown.Value = colorInfoC.color_c >> 16 & 0xff; + greenUpDown.Value = colorInfoC.color_c >> 8 & 0xff; + blueUpDown.Value = colorInfoC.color_c & 0xff; + pictureBox1.BackColor = Color.FromArgb(0xff << 24 | (int)colorInfoC.color_c); + } + } } } diff --git a/PCK-Studio/Forms/Editor/COLEditor.resx b/PCK-Studio/Forms/Editor/COLEditor.resx index 77fcbaa3..f3ac1ff3 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.resx +++ b/PCK-Studio/Forms/Editor/COLEditor.resx @@ -117,14 +117,183 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + setColorBtn + + + MetroFramework.Controls.MetroButton, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + metroPanel1 + + + 2 + + + blueUpDown + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + metroPanel1 + + + 3 + + + greenUpDown + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + metroPanel1 + + + 4 + + + redUpDown + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + metroPanel1 + + + 5 + + + alphaUpDown + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + metroPanel1 + + + 6 + + + alphaLabel + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + metroPanel1 + + + 7 + + + blueLabel + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + metroPanel1 + + + 8 + + + greenLabel + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + metroPanel1 + + + 9 + + + redLabel + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + metroPanel1 + + + 10 + + + colorTextbox + + + MetroFramework.Controls.MetroTextBox, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + metroPanel1 + + + 11 + + + metroLabel1 + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + metroPanel1 + + + 12 + + + pictureBox1 + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + metroPanel1 + + + 13 + + + + Fill + + + 20, 60 + + + 612, 523 + + + + 0 + + + metroPanel1 + + + MetroFramework.Controls.MetroPanel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + $this + + + 3 + 400, 290 125, 23 - 22 @@ -341,7 +510,6 @@ 10 - @@ -429,58 +597,12 @@ 13 - - Fill - - - 20, 60 - - - 612, 523 - - - 0 - - - metroPanel1 - - - MetroFramework.Controls.MetroPanel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - $this - - - 2 - 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 - 20, 60 @@ -503,7 +625,47 @@ $this - 0 + 1 + + + 37, 20 + + + File + + + + 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 + + + 125, 17 + + + 186, 22 + + + Restore original color + + + 187, 48 + + + ColorContextMenu + + + MetroFramework.Controls.MetroContextMenu, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a Fill @@ -716,7 +878,7 @@ $this - 1 + 2 True @@ -3254,6 +3416,12 @@ 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 + COLEditor From 2a7d4ad139c57ec2ae04fa387f2b02e6f80b733d Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Wed, 28 Sep 2022 16:45:42 +0200 Subject: [PATCH 020/110] Add Debug Listener and made Program variables readonly --- PCK-Studio/Program.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/PCK-Studio/Program.cs b/PCK-Studio/Program.cs index 8f7c3a2b..e09bb7a9 100644 --- a/PCK-Studio/Program.cs +++ b/PCK-Studio/Program.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.IO; using System.Windows.Forms; @@ -6,16 +7,19 @@ namespace PckStudio { static class Program { - public static string BaseAPIUrl = "http://api.pckstudio.xyz/api/pck"; - public static string BackUpAPIUrl = "https://raw.githubusercontent.com/PhoenixARC/pckstudio.tk/main/studio/PCK/api/"; - public static string AppData = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "PCK-Studio"); - public static string AppDataCache = Path.Combine(AppData, "cache"); + public static readonly string BaseAPIUrl = "http://api.pckstudio.xyz/api/pck"; + public static readonly string BackUpAPIUrl = "https://raw.githubusercontent.com/PhoenixARC/pckstudio.tk/main/studio/PCK/api/"; + public static readonly string AppData = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "PCK-Studio"); + public static readonly string AppDataCache = Path.Combine(AppData, "cache"); /// /// The main entry point for the application. /// [STAThread] static void Main(string[] args) { +#if DEBUG + Debug.Listeners.Add(new TextWriterTraceListener(Console.Out)); +#endif var f = new MainForm(); if (args.Length > 0 && File.Exists(args[0]) && args[0].EndsWith(".pck")) f.LoadFromPath(args[0]); From cebda13824600a8e2a91c3e448bbc386f2ae2e6f Mon Sep 17 00:00:00 2001 From: Miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Thu, 29 Sep 2022 15:07:52 +0200 Subject: [PATCH 021/110] Update README.md Add link to yaboiFoxxs github page! --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1ae87394..7818aaac 100644 --- a/README.md +++ b/README.md @@ -60,4 +60,4 @@ $ cd "-PCK-Studio" * [jam1garner](https://github.com/jam1garner) ### Other Credits -* [yaboiFoxx]() for Improved UI concept +* [yaboiFoxx](https://github.com/yaboiFoxx) for Improved UI concept From 49927537ebee5111338d713dfea0db9753e076e3 Mon Sep 17 00:00:00 2001 From: Felix Miller Date: Thu, 29 Sep 2022 15:13:35 -0400 Subject: [PATCH 022/110] Fix CSM Files not rendering when imported. --- .../Forms/Skins-And-Textures/addnewskin.cs | 1 + .../Forms/Skins-And-Textures/generateModel.cs | 288 ++++++++---------- .../Skins-And-Textures/generateModel.resx | 8 +- 3 files changed, 128 insertions(+), 169 deletions(-) diff --git a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs index 880655cb..cb2e592d 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs @@ -308,6 +308,7 @@ namespace PckStudio skinPictureBoxTexture.Image = Image.FromStream(stream); stream.Close(); stream.Dispose(); + File.Delete(Application.StartupPath + "\\temp.png"); } skinPictureBoxTexture.Width = skinPictureBoxTexture.Height; buttonDone.Enabled = true; diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs index 6dfb3289..8e6f2426 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs @@ -33,32 +33,32 @@ namespace PckStudio [Flags] enum eANIMFlags { - DisableArmSwinging = 1 << 0, - ZombieArms = 1 << 1, - LockFootAnimation = 1 << 2, - unk_BIT3 = 1 << 3, - unk_BIT4 = 1 << 4, - BothLegsSwingParallel = 1 << 5, - unk_BIT6 = 1 << 6, - MainArmUp = 1 << 7, - DisableArmor = 1 << 8, - unk_BIT9 = 1 << 9, - DisableHead = 1 << 10, - DisableLeftArm = 1 << 11, - DisableRightArm = 1 << 12, - DiableBody = 1 << 13, - DiableRightLeg = 1 << 14, - DiableLeftLeg = 1 << 15, - R2D2Sneak = 1 << 16, - DisableHeadOverlay = 1 << 17, - Is64x64 = 1 << 18, - HasSlimArms = 1 << 19, - DisableLeftArmOverlay = 1 << 20, - DisableRightArmOverlay = 1 << 21, - DisableLeftLegOverlay = 1 << 22, - DisableRightLegOverlay = 1 << 23, - DisableBodyOverlay = 1 << 24, - RenderUpSideDown = 1 << 31, + DisableArmSwinging = 1 << 0, + ZombieArms = 1 << 1, + LockFootAnimation = 1 << 2, + unk_BIT3 = 1 << 3, + unk_BIT4 = 1 << 4, + BothLegsSwingParallel = 1 << 5, + unk_BIT6 = 1 << 6, + MainArmUp = 1 << 7, + DisableArmor = 1 << 8, + unk_BIT9 = 1 << 9, + DisableHead = 1 << 10, + DisableLeftArm = 1 << 11, + DisableRightArm = 1 << 12, + DiableBody = 1 << 13, + DiableRightLeg = 1 << 14, + DiableLeftLeg = 1 << 15, + R2D2Sneak = 1 << 16, + DisableHeadOverlay = 1 << 17, + Is64x64 = 1 << 18, + HasSlimArms = 1 << 19, + DisableLeftArmOverlay = 1 << 20, + DisableRightArmOverlay = 1 << 21, + DisableLeftLegOverlay = 1 << 22, + DisableRightLegOverlay = 1 << 23, + DisableBodyOverlay = 1 << 24, + RenderUpSideDown = 1 << 31, } eANIMFlags ANIM = 0; @@ -74,7 +74,7 @@ namespace PckStudio ValueTuple ToProperty() { - return new ValueTuple("ANIM", "0x"+ANIM.ToString("x8")); + return new ValueTuple("ANIM", "0x" + ANIM.ToString("x8")); } @@ -182,8 +182,6 @@ namespace PckStudio InitializeComponent(); boxes = skinProperties; skinPreview = preview; - buttonIMPORT.Enabled = false; - buttonEXPORT.Enabled = false; if (texturePreview.Image == null) texturePreview.Image = new Bitmap(64, 64); loadData(); @@ -275,7 +273,7 @@ namespace PckStudio { ANIM = (eANIMFlags)int.Parse(property.Item2, System.Globalization.NumberStyles.HexNumber); } - catch(Exception ex) + catch (Exception ex) { Console.WriteLine(ex.Message); } @@ -307,8 +305,8 @@ namespace PckStudio // makes sure it reders/draws the full pixel in top left corner graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; int headbodyY = (displayBox.Height / 2) + 25; // 25 - int armY = (displayBox.Height / 2) + 35; // -60; - int legY = (displayBox.Height / 2) + 85; // -80; + int armY = (displayBox.Height / 2) + 35; // -60; + int legY = (displayBox.Height / 2) + 85; // -80; int groundLevel = (displayBox.Height / 2) + 145; graphics.DrawLine(Pens.White, 0, groundLevel, displayBox.Width, groundLevel); // Chooses Render settings based on current direction @@ -509,11 +507,11 @@ namespace PckStudio case "ARM1": y = armY + int.Parse(offsetArms.Text) * 5; break; - + case "LEG0": y = legY + int.Parse(offsetLegs.Text) * 5; break; - + case "LEG1": y = legY + int.Parse(offsetLegs.Text) * 5; break; @@ -753,76 +751,76 @@ namespace PckStudio } while (checkedItems < listViewBoxes.Items.Count); } else if (direction == eViewDirection.right) + { + int checkedItems = 0; + do { - int checkedItems = 0; - do + foreach (ListViewItem listViewItem1 in listViewBoxes.Items) { - foreach (ListViewItem listViewItem1 in listViewBoxes.Items) + if (listViewItem1.SubItems[listViewItem1.SubItems.Count - 1].Text == "unchecked") { - if (listViewItem1.SubItems[listViewItem1.SubItems.Count - 1].Text == "unchecked") + int x = 0; + if (listViewItem1.Tag.ToString() == "HEAD") + x = displayBox.Width / 2; + else if (listViewItem1.Tag.ToString() == "BODY") + x = displayBox.Width / 2; + else if (listViewItem1.Tag.ToString() == "ARM0") + x = 178; + else if (listViewItem1.Tag.ToString() == "ARM1") + x = 228; + else if (listViewItem1.Tag.ToString() == "LEG0") + x = 193; + else if (listViewItem1.Tag.ToString() == "LEG1") + x = 213; + bool flag = false; + int index = listViewItem1.Index; + foreach (ListViewItem listViewItem2 in listViewBoxes.Items) { - int x = 0; - if (listViewItem1.Tag.ToString() == "HEAD") - x = displayBox.Width / 2; - else if (listViewItem1.Tag.ToString() == "BODY") - x = displayBox.Width / 2; - else if (listViewItem1.Tag.ToString() == "ARM0") - x = 178; - else if (listViewItem1.Tag.ToString() == "ARM1") - x = 228; - else if (listViewItem1.Tag.ToString() == "LEG0") - x = 193; - else if (listViewItem1.Tag.ToString() == "LEG1") - x = 213; - bool flag = false; - int index = listViewItem1.Index; - foreach (ListViewItem listViewItem2 in listViewBoxes.Items) + if (listViewItem2.SubItems[9].Text == "unchecked") { - if (listViewItem2.SubItems[9].Text == "unchecked") + int y = 0; + if (listViewItem2.Tag.ToString() == "HEAD") + y = displayBox.Width / 2; + else if (listViewItem2.Tag.ToString() == "BODY") + y = displayBox.Width / 2; + else if (listViewItem2.Tag.ToString() == "ARM0") + y = 178; + else if (listViewItem2.Tag.ToString() == "ARM1") + y = 228; + else if (listViewItem2.Tag.ToString() == "LEG0") + y = 193; + else if (listViewItem2.Tag.ToString() == "LEG1") + y = 213; + if ((int)double.Parse(listViewItem1.SubItems[1].Text) + (int)double.Parse(listViewItem1.SubItems[4].Text) - x > (int)double.Parse(listViewItem2.SubItems[1].Text) + (int)double.Parse(listViewItem2.SubItems[4].Text) + y && listViewItem2.Index + 1 < this.listViewBoxes.Items.Count + 1) { - int y = 0; - if (listViewItem2.Tag.ToString() == "HEAD") - y = displayBox.Width / 2; - else if (listViewItem2.Tag.ToString() == "BODY") - y = displayBox.Width / 2; - else if (listViewItem2.Tag.ToString() == "ARM0") - y = 178; - else if (listViewItem2.Tag.ToString() == "ARM1") - y = 228; - else if (listViewItem2.Tag.ToString() == "LEG0") - y = 193; - else if (listViewItem2.Tag.ToString() == "LEG1") - y = 213; - if ((int)double.Parse(listViewItem1.SubItems[1].Text) + (int)double.Parse(listViewItem1.SubItems[4].Text) - x > (int)double.Parse(listViewItem2.SubItems[1].Text) + (int)double.Parse(listViewItem2.SubItems[4].Text) + y && listViewItem2.Index + 1 < this.listViewBoxes.Items.Count + 1) - { - index = listViewItem2.Index + 1; - flag = true; - } + index = listViewItem2.Index + 1; + flag = true; } } - listViewItem1.SubItems[9].Text = "checked"; - checkedItems += 1; - if (flag == true) - { - ListViewItem listViewItem2 = (ListViewItem)listViewItem1.Clone(); - listViewBoxes.Items.Insert(index, listViewItem2); - if (listViewBoxes.SelectedItems.Count != 0) - { - //if (selected.Index == listViewItem1.Index) - //{ - // selected = listViewItem2; - //} - } - listViewItem1.Remove(); - } } - else + listViewItem1.SubItems[9].Text = "checked"; + checkedItems += 1; + if (flag == true) { - checkedItems += 1; + ListViewItem listViewItem2 = (ListViewItem)listViewItem1.Clone(); + listViewBoxes.Items.Insert(index, listViewItem2); + if (listViewBoxes.SelectedItems.Count != 0) + { + //if (selected.Index == listViewItem1.Index) + //{ + // selected = listViewItem2; + //} + } + listViewItem1.Remove(); } } - } while (checkedItems < listViewBoxes.Items.Count); - } + else + { + checkedItems += 1; + } + } + } while (checkedItems < listViewBoxes.Items.Count); + } } private void DrawGuideLines(Graphics g) @@ -834,14 +832,14 @@ namespace PckStudio bool isSide = direction == eViewDirection.left || direction == eViewDirection.right; if (!isSide) { - g.DrawLine(Pens.Red, 0, headbodyY + float.Parse(offsetHead.Text) * 5, displayBox.Width, headbodyY + float.Parse(offsetHead.Text) * 5); - g.DrawLine(Pens.Green, 0, headbodyY + float.Parse(offsetBody.Text) * 5, displayBox.Width, headbodyY + float.Parse(offsetBody.Text) * 5); - g.DrawLine(Pens.Blue, 0, headbodyY + float.Parse(offsetArms.Text) * 5, displayBox.Width, headbodyY + float.Parse(offsetArms.Text) * 5); - g.DrawLine(Pens.Purple, 0, legY + float.Parse(offsetLegs.Text) * 5, displayBox.Width, legY + float.Parse(offsetLegs.Text) * 5); + g.DrawLine(Pens.Red, 0, headbodyY + float.Parse(offsetHead.Text) * 5, displayBox.Width, headbodyY + float.Parse(offsetHead.Text) * 5); + g.DrawLine(Pens.Green, 0, headbodyY + float.Parse(offsetBody.Text) * 5, displayBox.Width, headbodyY + float.Parse(offsetBody.Text) * 5); + g.DrawLine(Pens.Blue, 0, headbodyY + float.Parse(offsetArms.Text) * 5, displayBox.Width, headbodyY + float.Parse(offsetArms.Text) * 5); + g.DrawLine(Pens.Purple, 0, legY + float.Parse(offsetLegs.Text) * 5, displayBox.Width, legY + float.Parse(offsetLegs.Text) * 5); } - g.DrawLine(Pens.Red, centerWidthPoint, 0, centerWidthPoint, displayBox.Height); - g.DrawLine(Pens.Blue, centerWidthPoint + 30, 0, centerWidthPoint + 30, displayBox.Height); - g.DrawLine(Pens.Blue, centerWidthPoint - 30, 0, centerWidthPoint - 30, displayBox.Height); + g.DrawLine(Pens.Red, centerWidthPoint, 0, centerWidthPoint, displayBox.Height); + g.DrawLine(Pens.Blue, centerWidthPoint + 30, 0, centerWidthPoint + 30, displayBox.Height); + g.DrawLine(Pens.Blue, centerWidthPoint - 30, 0, centerWidthPoint - 30, displayBox.Height); g.DrawLine(Pens.Purple, centerWidthPoint - 10, 0, centerWidthPoint - 10, displayBox.Height); g.DrawLine(Pens.Purple, centerWidthPoint + 10, 0, centerWidthPoint + 10, displayBox.Height); } @@ -880,7 +878,7 @@ namespace PckStudio //Loads Columns private void generateModel_Load(object sender, EventArgs e) { - if (Screen.PrimaryScreen.Bounds.Height >= 780 && Screen.PrimaryScreen.Bounds.Width >= 1080){ + if (Screen.PrimaryScreen.Bounds.Height >= 780 && Screen.PrimaryScreen.Bounds.Width >= 1080) { return; } render(); @@ -956,7 +954,7 @@ namespace PckStudio private void SizeYUpDown_ValueChanged(object sender, EventArgs e) { - if (listViewBoxes.SelectedItems.Count != 0 && + if (listViewBoxes.SelectedItems.Count != 0 && listViewBoxes.SelectedItems[0].Tag is ModelPart) { var part = listViewBoxes.SelectedItems[0].Tag as ModelPart; @@ -980,7 +978,7 @@ namespace PckStudio private void PosXUpDown_ValueChanged(object sender, EventArgs e) { - if (listViewBoxes.SelectedItems.Count != 0 && + if (listViewBoxes.SelectedItems.Count != 0 && listViewBoxes.SelectedItems[0].Tag is ModelPart) { var part = listViewBoxes.SelectedItems[0].Tag as ModelPart; @@ -993,7 +991,7 @@ namespace PckStudio private void PosYUpDown_ValueChanged(object sender, EventArgs e) { - if (listViewBoxes.SelectedItems.Count != 0 && + if (listViewBoxes.SelectedItems.Count != 0 && listViewBoxes.SelectedItems[0].Tag is ModelPart) { var part = listViewBoxes.SelectedItems[0].Tag as ModelPart; @@ -1124,6 +1122,7 @@ namespace PckStudio graphics.InterpolationMode = InterpolationMode.NearestNeighbor; } skinPreview.Image = bitmap1; + texturePreview.Image.Save(Application.StartupPath + "\\temp.png"); Close(); } @@ -1223,71 +1222,36 @@ namespace PckStudio { listViewBoxes.Items.Clear(); string str1 = File.ReadAllText(openFileDialog.FileName); - int x = 0; - foreach (string str2 in str1.Split("\n\r".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)) - ++x; - int y = x / 11; - ListView listView = new ListView(); - int num3 = 0; - do + + modelParts.Clear(); + List lines = str1.Split(new[] { "\n\r", "\n" }, StringSplitOptions.None).ToList(); + if (string.IsNullOrEmpty(lines[lines.Count - 1])) + lines.RemoveAt(lines.Count - 1); + int currentLine = 0; + int passedlines = 0; + for (int i = 0; i < lines.Count;) { - listView.Items.Add("BOX"); - ++num3; - } - while (num3 < y); - IEnumerator enumerator = listView.Items.GetEnumerator(); - try - { - label_33: - if (enumerator.MoveNext()) - { - ListViewItem current = (ListViewItem)enumerator.Current; - ListViewItem listViewItem = new ListViewItem(); - int num4 = 0; - do - { - foreach (string text in str1.Split("\n\r".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)) - { - ++num4; - if (num4 == 1 + 11 * current.Index) - listViewItem.Text = text; - else if (num4 == 2 + 11 * current.Index) - listViewItem.Tag = text; - else if (num4 == 4 + 11 * current.Index) - listViewItem.SubItems.Add(text); - else if (num4 == 5 + 11 * current.Index) - listViewItem.SubItems.Add(text); - else if (num4 == 6 + 11 * current.Index) - listViewItem.SubItems.Add(text); - else if (num4 == 7 + 11 * current.Index) - listViewItem.SubItems.Add(text); - else if (num4 == 8 + 11 * current.Index) - listViewItem.SubItems.Add(text); - else if (num4 == 9 + 11 * current.Index) - listViewItem.SubItems.Add(text); - else if (num4 == 10 + 11 * current.Index) - listViewItem.SubItems.Add(text); - else if (num4 == 11 + 11 * current.Index) - { - listViewItem.SubItems.Add(text); - listViewBoxes.Items.Add(listViewItem); - } - } - } - while (num4 < x); - goto label_33; - } - } - finally - { - IDisposable disposable = enumerator as IDisposable; - if (disposable != null) - disposable.Dispose(); + string name = lines[0 + passedlines]; + string parent = lines[1 + passedlines]; + float PosX = float.Parse(lines[3 + passedlines]); + float PosY = float.Parse(lines[4 + passedlines]); + float PosZ = float.Parse(lines[5 + passedlines]); + float SizeX = float.Parse(lines[6 + passedlines]); + float SizeY = float.Parse(lines[7 + passedlines]); + float SizeZ = float.Parse(lines[8 + passedlines]); + int UvX = int.Parse(lines[9 + passedlines]); + int UvY = int.Parse(lines[10 + passedlines]); + passedlines += 11; + i += 11; + modelParts.Add(new ModelPart(parent, PosX, PosY, PosZ, SizeX, SizeY, SizeZ, UvX, UvY)); } } + comboParent.Enabled = true; + updateListView(); render(); } + //Clones Item private void cloneToolStripMenuItem_Click(object sender, EventArgs e) { diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.resx b/PCK-Studio/Forms/Skins-And-Textures/generateModel.resx index e07040e4..25d00a81 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.resx +++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.resx @@ -610,7 +610,7 @@ myTablePanel2 - PckStudio.Forms.MyTablePanel, PCK Studio, Version=5.3.0.0, Culture=neutral, PublicKeyToken=null + PckStudio.Forms.MyTablePanel, PCK-Studio, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null tabPage1 @@ -825,9 +825,6 @@ 30 - - False - Flat @@ -888,9 +885,6 @@ 25 - - False - Flat From e057b48d5d513406476e06e612e0fedb9ce60fe0 Mon Sep 17 00:00:00 2001 From: MattNL Date: Thu, 29 Sep 2022 15:50:13 -0400 Subject: [PATCH 023/110] Updated ANIM Flag names in GenerateModel --- PCK-Studio/Forms/Skins-And-Textures/generateModel.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs index 8e6f2426..e5033f4f 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs @@ -36,20 +36,20 @@ namespace PckStudio DisableArmSwinging = 1 << 0, ZombieArms = 1 << 1, LockFootAnimation = 1 << 2, - unk_BIT3 = 1 << 3, + SitWhileIdle = 1 << 3, unk_BIT4 = 1 << 4, BothLegsSwingParallel = 1 << 5, - unk_BIT6 = 1 << 6, + BothArmsSwingParallel = 1 << 6, MainArmUp = 1 << 7, DisableArmor = 1 << 8, - unk_BIT9 = 1 << 9, + DisableBobbing = 1 << 9, DisableHead = 1 << 10, DisableLeftArm = 1 << 11, DisableRightArm = 1 << 12, DiableBody = 1 << 13, DiableRightLeg = 1 << 14, DiableLeftLeg = 1 << 15, - R2D2Sneak = 1 << 16, + BackwardsSneak = 1 << 16, DisableHeadOverlay = 1 << 17, Is64x64 = 1 << 18, HasSlimArms = 1 << 19, From c6d037784dc97ea74b1de9c96d7e9505744f6ca8 Mon Sep 17 00:00:00 2001 From: Felix Miller Date: Fri, 30 Sep 2022 14:01:11 -0400 Subject: [PATCH 024/110] Add CSMB File Parsing/Writing --- PCK-Studio/Classes/FileTypes/CSMBFile.cs | 104 +++++++++++++++++++ PCK-Studio/Classes/IO/CSMB/CSMBFileReader.cs | 56 ++++++++++ PCK-Studio/Classes/IO/CSMB/CSMBFileWriter.cs | 50 +++++++++ PCK-Studio/PckStudio.csproj | 3 + 4 files changed, 213 insertions(+) create mode 100644 PCK-Studio/Classes/FileTypes/CSMBFile.cs create mode 100644 PCK-Studio/Classes/IO/CSMB/CSMBFileReader.cs create mode 100644 PCK-Studio/Classes/IO/CSMB/CSMBFileWriter.cs diff --git a/PCK-Studio/Classes/FileTypes/CSMBFile.cs b/PCK-Studio/Classes/FileTypes/CSMBFile.cs new file mode 100644 index 00000000..e4db7b92 --- /dev/null +++ b/PCK-Studio/Classes/FileTypes/CSMBFile.cs @@ -0,0 +1,104 @@ +using System; +using System.Drawing; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using PckStudio.Models; + +namespace PckStudio.Classes.FileTypes +{ + #region File Template + /* + Version - 4 bytes[int32] + NumberOfParts - 4 bytes[int32] + { + Part name length - 2 bytes[int16] + part name - x bytes + part parent - 4 bytes[int32] (HEAD=1, BODY=2, LEG0=3, LEG1=4, ARM0=5, ARM1=6) + Position-X - 4 bytes[float] + Position-Y - 4 bytes[float] + Position-Z - 4 bytes[float] + Size-X - 4 bytes[float] + Size-Y - 4 bytes[float] + Size-Z - 4 bytes[float] + UV-Y - 4 bytes[int32] + UV-X - 4 bytes[int32] + mirror texture - 1 byte[bool] + Hide with armour - 1 byte[bool] + inflation/scale value - 4 bytes[float] + } + NumberOfOffsets - 4 bytes[int32] + { + offset part - 4 bytes[int32] + vertical offset - 4 bytes[float] + } + */ + #endregion + class CSMBFile + { + public List Parts = new List(); + public List Offsets = new List(); + + } + + public class CSMBPart + { + public string Name = "Partname"; + public ParentPart Parent = 0; + public float posX, posY, posZ = 0.0f; + public float sizeX, sizeY, sizeZ = 0.0f; + public int uvX, uvY = 0; + public bool HideWArmour, MirrorTexture = false; + public float Inflation = 0.0f; + } + public class CSMBOffset + { + public OffsetPart offsetPart = 0; + public float VerticalOffset = 0.0f; + } + + public enum OffsetPart + { + HEAD = 0, + BODY = 1, + ARM0 = 2, + ARM1 = 3, + LEG0 = 4, + LEG1 = 5, + HEADWEAR = 6, + JACKET = 7, + SLEEVE0 = 8, + SLEEVE1 = 9, + PANTS0 = 10, + PANTS1 = 11, + WAIST = 12, + LEGGING0 = 13, + LEGGING1 = 14, + SOCK0 = 15, + SOCK1 = 16, + BOOT0 = 17, + BOOT1 = 18, + ARMARMOR1 = 19, + ARMARMOR0 = 20, + BODYARMOR = 21, + BELT = 22, + TOOL0 = 23, + TOOL1 = 24, + HELMET = 25, + SHOULDER0 = 26, + SHOULDER1 = 27, + CHEST = 28 + } + + public enum ParentPart + { + HEAD = 0, + BODY = 1, + ARM0 = 2, + ARM1 = 3, + LEG0 = 4, + LEG1 = 5, + } +} diff --git a/PCK-Studio/Classes/IO/CSMB/CSMBFileReader.cs b/PCK-Studio/Classes/IO/CSMB/CSMBFileReader.cs new file mode 100644 index 00000000..fc5a3758 --- /dev/null +++ b/PCK-Studio/Classes/IO/CSMB/CSMBFileReader.cs @@ -0,0 +1,56 @@ +using System.IO; +using System.Text; +using PckStudio.Classes.FileTypes; + +namespace PckStudio.Classes.IO.CSMB +{ + internal class CSMBFileReader : StreamDataReader + { + public CSMBFile Read(Stream stream) + { + return new CSMBFileReader().ReadFromStream(stream); + } + private CSMBFileReader() : base(false) + { } + + private CSMBFile ReadFromStream(Stream stream) + { + CSMBFile BinFile = new CSMBFile(); + ReadInt(stream); + int NumOfParts = ReadInt(stream); + for(int i = 0; i < NumOfParts; i++) + { + CSMBPart part = new CSMBPart(); + part.Name = ReadString(stream); + part.Parent = (ParentPart)ReadInt(stream); + part.posX = ReadFloat(stream); + part.posY = ReadFloat(stream); + part.posZ = ReadFloat(stream); + part.sizeX = ReadFloat(stream); + part.sizeY = ReadFloat(stream); + part.sizeZ = ReadFloat(stream); + part.uvX = ReadInt(stream); + part.uvY = ReadInt(stream); + part.MirrorTexture = ReadBool(stream); + part.HideWArmour = ReadBool(stream); + part.Inflation = ReadFloat(stream); + BinFile.Parts.Add(part); + } + int NumOfOffsets = ReadInt(stream); + for (int i = 0; i < NumOfOffsets; i++) + { + CSMBOffset offset = new CSMBOffset(); + offset.offsetPart = (OffsetPart)ReadInt(stream); + offset.VerticalOffset = ReadFloat(stream); + BinFile.Offsets.Add(offset); + } + return BinFile; + } + + private string ReadString(Stream stream) + { + short strlen = ReadShort(stream); + return ReadString(stream, strlen, Encoding.ASCII); + } + } +} diff --git a/PCK-Studio/Classes/IO/CSMB/CSMBFileWriter.cs b/PCK-Studio/Classes/IO/CSMB/CSMBFileWriter.cs new file mode 100644 index 00000000..2614c1d4 --- /dev/null +++ b/PCK-Studio/Classes/IO/CSMB/CSMBFileWriter.cs @@ -0,0 +1,50 @@ +using System.IO; +using System.Text; +using PckStudio.Classes.FileTypes; + +namespace PckStudio.Classes.IO.CSMB +{ + internal class CSMBFileWriter : StreamDataWriter + { + public static void Write(Stream stream, CSMBFile file) + { + new CSMBFileWriter().WriteToStream(stream, file); + } + private CSMBFileWriter() : base(false) + { } + + private void WriteToStream(Stream stream, CSMBFile CSMB) + { + WriteInt(stream, 0); + WriteInt(stream, CSMB.Parts.Count); + foreach(CSMBPart part in CSMB.Parts) + { + WriteString(stream, part.Name); + WriteInt(stream, (int)part.Parent); + WriteFloat(stream, part.posX); + WriteFloat(stream, part.posY); + WriteFloat(stream, part.posZ); + WriteFloat(stream, part.sizeX); + WriteFloat(stream, part.sizeY); + WriteFloat(stream, part.sizeZ); + WriteInt(stream, part.uvX); + WriteInt(stream, part.uvY); + WriteBool(stream, part.MirrorTexture); + WriteBool(stream, part.HideWArmour); + WriteFloat(stream, part.Inflation); + } + WriteInt(stream, CSMB.Offsets.Count); + foreach (CSMBOffset offset in CSMB.Offsets) + { + WriteInt(stream, (int)offset.offsetPart); + WriteFloat(stream, offset.VerticalOffset); + } + } + + private void WriteString(Stream stream, string s) + { + WriteShort(stream, (short)s.Length); + WriteString(stream, s, Encoding.ASCII); + } + } +} diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 4a935b9d..83e87835 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -138,6 +138,7 @@ + @@ -145,6 +146,8 @@ + + From d9365ace994b029c02b233c294a039ea7280486f Mon Sep 17 00:00:00 2001 From: MattNL Date: Sat, 1 Oct 2022 16:45:23 -0400 Subject: [PATCH 025/110] fixed weird designer bug --- PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs b/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs index ddfb948a..56997dfd 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs @@ -87,7 +87,6 @@ // // addFrameToolStripMenuItem // - this.addFrameToolStripMenuItem.Image = global::PckStudio.Properties.Resources.ExportFile; this.addFrameToolStripMenuItem.Name = "addFrameToolStripMenuItem"; this.addFrameToolStripMenuItem.Size = new System.Drawing.Size(153, 22); this.addFrameToolStripMenuItem.Text = "Add Frame"; @@ -95,7 +94,6 @@ // // removeFrameToolStripMenuItem // - this.removeFrameToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Del; this.removeFrameToolStripMenuItem.Name = "removeFrameToolStripMenuItem"; this.removeFrameToolStripMenuItem.Size = new System.Drawing.Size(153, 22); this.removeFrameToolStripMenuItem.Text = "Remove Frame"; @@ -146,7 +144,6 @@ // // bulkAnimationSpeedToolStripMenuItem // - this.bulkAnimationSpeedToolStripMenuItem.Image = global::PckStudio.Properties.Resources.clock; this.bulkAnimationSpeedToolStripMenuItem.Name = "bulkAnimationSpeedToolStripMenuItem"; this.bulkAnimationSpeedToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.bulkAnimationSpeedToolStripMenuItem.Text = "Set Bulk Animation Speed"; @@ -154,7 +151,6 @@ // // importJavaAnimationToolStripMenuItem // - this.importJavaAnimationToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Replace; this.importJavaAnimationToolStripMenuItem.Name = "importJavaAnimationToolStripMenuItem"; this.importJavaAnimationToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.importJavaAnimationToolStripMenuItem.Text = "Import Java Animation"; @@ -162,7 +158,6 @@ // // exportJavaAnimationToolStripMenuItem // - this.exportJavaAnimationToolStripMenuItem.Image = global::PckStudio.Properties.Resources.ExportFile; this.exportJavaAnimationToolStripMenuItem.Name = "exportJavaAnimationToolStripMenuItem"; this.exportJavaAnimationToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.exportJavaAnimationToolStripMenuItem.Text = "Export Java Animation"; @@ -170,7 +165,6 @@ // // changeTileToolStripMenuItem // - this.changeTileToolStripMenuItem.Image = global::PckStudio.Properties.Resources.changeTile; this.changeTileToolStripMenuItem.Name = "changeTileToolStripMenuItem"; this.changeTileToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.changeTileToolStripMenuItem.Text = "Change Tile"; @@ -258,10 +252,10 @@ // this.tileLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.tileLabel.AutoSize = true; - this.tileLabel.Location = new System.Drawing.Point(20, 311); + this.tileLabel.Location = new System.Drawing.Point(20, 312); this.tileLabel.MinimumSize = new System.Drawing.Size(170, 19); this.tileLabel.Name = "tileLabel"; - this.tileLabel.Size = new System.Drawing.Size(57, 19); + this.tileLabel.Size = new System.Drawing.Size(170, 19); this.tileLabel.TabIndex = 20; this.tileLabel.Text = "tileLabel"; this.tileLabel.Theme = MetroFramework.MetroThemeStyle.Dark; From 6dc7a4b410368e38096d0e5aa037e6d9a395fddf Mon Sep 17 00:00:00 2001 From: MattNL Date: Sat, 1 Oct 2022 16:45:50 -0400 Subject: [PATCH 026/110] Fixed set frame index issue in AnimationEditor --- PCK-Studio/Forms/Editor/AnimationEditor.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index 3aba640b..bc9272f9 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -423,7 +423,11 @@ namespace PckStudio.Forms.Editor using FrameEditor diag = new FrameEditor(frame.Ticks, currentAnimation.GetFrameIndex(frame.Texture), currentAnimation.FrameTextureCount-1); if (diag.ShowDialog(this) == DialogResult.OK) { - currentAnimation.SetFrame(frame, diag.FrameTextureIndex, diag.FrameTime); + /* Found a bug here. When passing the frame variable, it would replace the first instance of that frame and time + * rather than the actual frame that was clicked. I've just switched to passing the index to fix this for now. -Matt + */ + + currentAnimation.SetFrame(frameTreeView.SelectedNode.Index, diag.FrameTextureIndex, diag.FrameTime); LoadAnimationTreeView(); } } From 3d1735fc476f2475bf8c4666e0eb3634c66cf869 Mon Sep 17 00:00:00 2001 From: MattNL Date: Sat, 1 Oct 2022 18:42:26 -0400 Subject: [PATCH 027/110] Changed "Cooked Beef" to "Steak" to match the in game name --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index e183ac85..2f17c8f5 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -654,7 +654,7 @@ { "leather": "Leather" }, { "saddle": "Saddle" }, { "beefRaw": "Raw Beef" }, - { "beefCooked": "Cooked Beef" }, + { "beefCooked": "Steak" }, { "enderPearl": "Ender Pearl" }, { "blazeRod": "Blaze Rod" }, { "melon": "Melon" }, From 4695a764d2a4d5fdf46100aa74bd1d3c40dcb686 Mon Sep 17 00:00:00 2001 From: MattNL Date: Sat, 1 Oct 2022 19:39:53 -0400 Subject: [PATCH 028/110] AnimationEditor now displays frames in the tree --- PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs | 13 ++++++++++++- PCK-Studio/Forms/Editor/AnimationEditor.cs | 4 +++- PCK-Studio/Forms/Editor/AnimationEditor.resx | 3 +++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs b/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs index 56997dfd..230981c1 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs @@ -52,6 +52,7 @@ this.AnimationStopBtn = new MetroFramework.Controls.MetroButton(); this.tileLabel = new MetroFramework.Controls.MetroLabel(); this.pictureBoxWithInterpolationMode1 = new PckStudio.PictureBoxWithInterpolationMode(); + this.TextureIcons = new System.Windows.Forms.ImageList(this.components); this.contextMenuStrip1.SuspendLayout(); this.menuStrip.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxWithInterpolationMode1)).BeginInit(); @@ -65,9 +66,12 @@ this.frameTreeView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); this.frameTreeView.ContextMenuStrip = this.contextMenuStrip1; this.frameTreeView.ForeColor = System.Drawing.Color.White; + this.frameTreeView.ImageIndex = 0; + this.frameTreeView.ImageList = this.TextureIcons; this.frameTreeView.Location = new System.Drawing.Point(20, 88); this.frameTreeView.Margin = new System.Windows.Forms.Padding(0); this.frameTreeView.Name = "frameTreeView"; + this.frameTreeView.SelectedImageIndex = 0; this.frameTreeView.Size = new System.Drawing.Size(165, 223); this.frameTreeView.TabIndex = 15; this.frameTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.frameTreeView_ItemDrag); @@ -255,7 +259,7 @@ this.tileLabel.Location = new System.Drawing.Point(20, 312); this.tileLabel.MinimumSize = new System.Drawing.Size(170, 19); this.tileLabel.Name = "tileLabel"; - this.tileLabel.Size = new System.Drawing.Size(170, 19); + this.tileLabel.Size = new System.Drawing.Size(57, 19); this.tileLabel.TabIndex = 20; this.tileLabel.Text = "tileLabel"; this.tileLabel.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -273,6 +277,12 @@ this.pictureBoxWithInterpolationMode1.TabIndex = 16; this.pictureBoxWithInterpolationMode1.TabStop = false; // + // TextureIcons + // + this.TextureIcons.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; + this.TextureIcons.ImageSize = new System.Drawing.Size(32, 32); + this.TextureIcons.TransparentColor = System.Drawing.Color.Transparent; + // // AnimationEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -324,5 +334,6 @@ private System.Windows.Forms.ToolStripMenuItem editorControlsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem setBulkSpedToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem javaAnimationSupportToolStripMenuItem; + private System.Windows.Forms.ImageList TextureIcons; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index bc9272f9..bea1b251 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -275,7 +275,9 @@ namespace PckStudio.Forms.Editor InterpolationCheckbox.Checked = currentAnimation.Interpolate; frameTreeView.Nodes.Clear(); // $"Frame: {i}, Frame Time: {Animation.MinimumFrameTime}" - currentAnimation.GetFrames().ForEach(f => frameTreeView.Nodes.Add($"Frame: {currentAnimation.GetFrameIndex(f.Texture)}, Frame Time: {f.Ticks}")); + TextureIcons.Images.Clear(); + TextureIcons.Images.AddRange(currentAnimation.GetFrames().Select(f => f.Texture).ToArray()); + currentAnimation.GetFrames().ForEach(f => frameTreeView.Nodes.Add("", $"for {f.Ticks} frame" + (f.Ticks > 1 ? "s" : "" ), currentAnimation.GetFrameIndex(f.Texture), currentAnimation.GetFrameIndex(f.Texture))); player.SelectFrame(currentAnimation, 0); } diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.resx b/PCK-Studio/Forms/Editor/AnimationEditor.resx index 31e8ec68..c3546ac8 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.resx +++ b/PCK-Studio/Forms/Editor/AnimationEditor.resx @@ -120,6 +120,9 @@ 125, 17 + + 280, 17 + 17, 17 From a29ff36a0396992a1e556f1ab97c5bb795a8f90c Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 2 Oct 2022 03:46:14 -0400 Subject: [PATCH 029/110] Slightly updated design of AnimationEditor --- .../Forms/Editor/AnimationEditor.Designer.cs | 53 ++++++++++++------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs b/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs index 230981c1..4cb3f54f 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.Designer.cs @@ -34,6 +34,7 @@ this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); this.addFrameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.removeFrameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.TextureIcons = new System.Windows.Forms.ImageList(this.components); this.menuStrip = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); @@ -51,10 +52,11 @@ this.AnimationPlayBtn = new MetroFramework.Controls.MetroButton(); this.AnimationStopBtn = new MetroFramework.Controls.MetroButton(); this.tileLabel = new MetroFramework.Controls.MetroLabel(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.pictureBoxWithInterpolationMode1 = new PckStudio.PictureBoxWithInterpolationMode(); - this.TextureIcons = new System.Windows.Forms.ImageList(this.components); this.contextMenuStrip1.SuspendLayout(); this.menuStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxWithInterpolationMode1)).BeginInit(); this.SuspendLayout(); // @@ -72,7 +74,9 @@ this.frameTreeView.Margin = new System.Windows.Forms.Padding(0); this.frameTreeView.Name = "frameTreeView"; this.frameTreeView.SelectedImageIndex = 0; - this.frameTreeView.Size = new System.Drawing.Size(165, 223); + this.frameTreeView.ShowLines = false; + this.frameTreeView.ShowRootLines = false; + this.frameTreeView.Size = new System.Drawing.Size(134, 253); this.frameTreeView.TabIndex = 15; this.frameTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.frameTreeView_ItemDrag); this.frameTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.frameTreeView_AfterSelect); @@ -103,6 +107,12 @@ this.removeFrameToolStripMenuItem.Text = "Remove Frame"; this.removeFrameToolStripMenuItem.Click += new System.EventHandler(this.removeFrameToolStripMenuItem_Click); // + // TextureIcons + // + this.TextureIcons.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; + this.TextureIcons.ImageSize = new System.Drawing.Size(32, 32); + this.TextureIcons.TransparentColor = System.Drawing.Color.Transparent; + // // menuStrip // this.menuStrip.AutoSize = false; @@ -218,11 +228,11 @@ // this.InterpolationCheckbox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.InterpolationCheckbox.AutoSize = true; - this.InterpolationCheckbox.Location = new System.Drawing.Point(188, 338); + this.InterpolationCheckbox.Location = new System.Drawing.Point(161, 63); this.InterpolationCheckbox.Name = "InterpolationCheckbox"; - this.InterpolationCheckbox.Size = new System.Drawing.Size(204, 15); + this.InterpolationCheckbox.Size = new System.Drawing.Size(231, 15); this.InterpolationCheckbox.TabIndex = 17; - this.InterpolationCheckbox.Text = "Interpolates (not simulated above)"; + this.InterpolationCheckbox.Text = "Enable Interpolation (not shown below)"; this.InterpolationCheckbox.Theme = MetroFramework.MetroThemeStyle.Dark; this.InterpolationCheckbox.UseSelectable = true; this.InterpolationCheckbox.CheckedChanged += new System.EventHandler(this.InterpolationCheckbox_CheckedChanged); @@ -230,9 +240,9 @@ // AnimationPlayBtn // this.AnimationPlayBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.AnimationPlayBtn.Location = new System.Drawing.Point(188, 312); + this.AnimationPlayBtn.Location = new System.Drawing.Point(157, 317); this.AnimationPlayBtn.Name = "AnimationPlayBtn"; - this.AnimationPlayBtn.Size = new System.Drawing.Size(99, 24); + this.AnimationPlayBtn.Size = new System.Drawing.Size(116, 24); this.AnimationPlayBtn.TabIndex = 18; this.AnimationPlayBtn.Text = "Play Animation"; this.AnimationPlayBtn.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -243,9 +253,9 @@ // this.AnimationStopBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.AnimationStopBtn.Enabled = false; - this.AnimationStopBtn.Location = new System.Drawing.Point(293, 312); + this.AnimationStopBtn.Location = new System.Drawing.Point(276, 317); this.AnimationStopBtn.Name = "AnimationStopBtn"; - this.AnimationStopBtn.Size = new System.Drawing.Size(99, 24); + this.AnimationStopBtn.Size = new System.Drawing.Size(116, 24); this.AnimationStopBtn.TabIndex = 19; this.AnimationStopBtn.Text = "Stop Animation"; this.AnimationStopBtn.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -256,7 +266,7 @@ // this.tileLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.tileLabel.AutoSize = true; - this.tileLabel.Location = new System.Drawing.Point(20, 312); + this.tileLabel.Location = new System.Drawing.Point(20, 341); this.tileLabel.MinimumSize = new System.Drawing.Size(170, 19); this.tileLabel.Name = "tileLabel"; this.tileLabel.Size = new System.Drawing.Size(57, 19); @@ -264,34 +274,37 @@ this.tileLabel.Text = "tileLabel"; this.tileLabel.Theme = MetroFramework.MetroThemeStyle.Dark; // + // pictureBox1 + // + this.pictureBox1.Location = new System.Drawing.Point(154, 60); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(244, 24); + this.pictureBox1.TabIndex = 21; + this.pictureBox1.TabStop = false; + // // pictureBoxWithInterpolationMode1 // this.pictureBoxWithInterpolationMode1.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.pictureBoxWithInterpolationMode1.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; - this.pictureBoxWithInterpolationMode1.Location = new System.Drawing.Point(188, 88); + this.pictureBoxWithInterpolationMode1.Location = new System.Drawing.Point(157, 88); this.pictureBoxWithInterpolationMode1.Name = "pictureBoxWithInterpolationMode1"; - this.pictureBoxWithInterpolationMode1.Size = new System.Drawing.Size(204, 223); + this.pictureBoxWithInterpolationMode1.Size = new System.Drawing.Size(235, 223); this.pictureBoxWithInterpolationMode1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.pictureBoxWithInterpolationMode1.TabIndex = 16; this.pictureBoxWithInterpolationMode1.TabStop = false; // - // TextureIcons - // - this.TextureIcons.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; - this.TextureIcons.ImageSize = new System.Drawing.Size(32, 32); - this.TextureIcons.TransparentColor = System.Drawing.Color.Transparent; - // // AnimationEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(412, 362); + this.Controls.Add(this.InterpolationCheckbox); + this.Controls.Add(this.pictureBox1); this.Controls.Add(this.AnimationStopBtn); this.Controls.Add(this.AnimationPlayBtn); this.Controls.Add(this.tileLabel); - this.Controls.Add(this.InterpolationCheckbox); this.Controls.Add(this.pictureBoxWithInterpolationMode1); this.Controls.Add(this.frameTreeView); this.Controls.Add(this.menuStrip); @@ -304,6 +317,7 @@ this.contextMenuStrip1.ResumeLayout(false); this.menuStrip.ResumeLayout(false); this.menuStrip.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxWithInterpolationMode1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -335,5 +349,6 @@ private System.Windows.Forms.ToolStripMenuItem setBulkSpedToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem javaAnimationSupportToolStripMenuItem; private System.Windows.Forms.ImageList TextureIcons; + private System.Windows.Forms.PictureBox pictureBox1; } } \ No newline at end of file From a5385128c6b2703749cb4313cd6cd8d7eb00171b Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 2 Oct 2022 03:47:13 -0400 Subject: [PATCH 030/110] Updated the FrameEditor to have frame icons --- .../Animation/FrameEditor.Designer.cs | 263 +++++++++--------- .../Animation/FrameEditor.cs | 26 +- .../Animation/FrameEditor.resx | 3 + PCK-Studio/Forms/Editor/AnimationEditor.cs | 14 +- 4 files changed, 163 insertions(+), 143 deletions(-) diff --git a/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.Designer.cs b/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.Designer.cs index 664d19b9..3c8a510f 100644 --- a/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.Designer.cs +++ b/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.Designer.cs @@ -29,147 +29,148 @@ namespace PckStudio.Forms.Additional_Popups.Animation /// private void InitializeComponent() { - this.SaveBtn = new System.Windows.Forms.Button(); - this.label2 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.CancelBtn = new System.Windows.Forms.Button(); - this.FrameIndexUpDown = new System.Windows.Forms.NumericUpDown(); - this.FrameTimeUpDown = new System.Windows.Forms.NumericUpDown(); - ((System.ComponentModel.ISupportInitialize)(this.FrameIndexUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.FrameTimeUpDown)).BeginInit(); - this.SuspendLayout(); - // - // SaveBtn - // - this.SaveBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.SaveBtn.ForeColor = System.Drawing.Color.White; - this.SaveBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.SaveBtn.Location = new System.Drawing.Point(55, 111); - this.SaveBtn.Name = "SaveBtn"; - this.SaveBtn.Size = new System.Drawing.Size(75, 23); - this.SaveBtn.TabIndex = 7; - this.SaveBtn.Text = "Save"; - this.SaveBtn.UseVisualStyleBackColor = true; - this.SaveBtn.Click += new System.EventHandler(this.SaveBtn_Click); - // - // label2 - // - this.label2.AutoSize = true; - this.label2.ForeColor = System.Drawing.Color.White; - this.label2.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.label2.Location = new System.Drawing.Point(9, 54); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(65, 13); - this.label2.TabIndex = 6; - this.label2.Text = "Frame Index"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.ForeColor = System.Drawing.Color.White; - this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.label1.Location = new System.Drawing.Point(9, 83); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(62, 13); - this.label1.TabIndex = 10; - this.label1.Text = "Frame Time"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.ForeColor = System.Drawing.Color.White; - this.label3.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.label3.Location = new System.Drawing.Point(47, 13); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(109, 13); - this.label3.TabIndex = 12; - this.label3.Text = "may/matt was here :3"; - // - // CancelBtn - // - this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.CancelBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.CancelBtn.ForeColor = System.Drawing.Color.White; - this.CancelBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.CancelBtn.Location = new System.Drawing.Point(135, 111); - this.CancelBtn.Name = "CancelBtn"; - this.CancelBtn.Size = new System.Drawing.Size(75, 23); - this.CancelBtn.TabIndex = 13; - this.CancelBtn.Text = "Cancel"; - this.CancelBtn.UseVisualStyleBackColor = true; - this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); - // - // FrameIndexUpDown - // - this.FrameIndexUpDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17))))); - this.FrameIndexUpDown.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.FrameIndexUpDown.ForeColor = System.Drawing.SystemColors.Window; - this.FrameIndexUpDown.Location = new System.Drawing.Point(77, 54); - this.FrameIndexUpDown.Maximum = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.FrameIndexUpDown.Name = "FrameIndexUpDown"; - this.FrameIndexUpDown.Size = new System.Drawing.Size(179, 20); - this.FrameIndexUpDown.TabIndex = 14; - this.FrameIndexUpDown.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - // - // FrameTimeUpDown - // - this.FrameTimeUpDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17))))); - this.FrameTimeUpDown.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.FrameTimeUpDown.ForeColor = System.Drawing.SystemColors.Window; - this.FrameTimeUpDown.Location = new System.Drawing.Point(77, 81); - this.FrameTimeUpDown.Maximum = new decimal(new int[] { + this.components = new System.ComponentModel.Container(); + this.SaveBtn = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.CancelBtn = new System.Windows.Forms.Button(); + this.FrameTimeUpDown = new System.Windows.Forms.NumericUpDown(); + this.FrameList = new System.Windows.Forms.TreeView(); + this.TextureIcons = new System.Windows.Forms.ImageList(this.components); + ((System.ComponentModel.ISupportInitialize)(this.FrameTimeUpDown)).BeginInit(); + this.SuspendLayout(); + // + // SaveBtn + // + this.SaveBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.SaveBtn.ForeColor = System.Drawing.Color.White; + this.SaveBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.SaveBtn.Location = new System.Drawing.Point(12, 228); + this.SaveBtn.Name = "SaveBtn"; + this.SaveBtn.Size = new System.Drawing.Size(75, 23); + this.SaveBtn.TabIndex = 7; + this.SaveBtn.Text = "Save"; + this.SaveBtn.UseVisualStyleBackColor = true; + this.SaveBtn.Click += new System.EventHandler(this.SaveBtn_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.White; + this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label1.Location = new System.Drawing.Point(19, 204); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(62, 13); + this.label1.TabIndex = 10; + this.label1.Text = "Frame Time"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.ForeColor = System.Drawing.Color.White; + this.label3.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label3.Location = new System.Drawing.Point(14, 13); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(109, 13); + this.label3.TabIndex = 12; + this.label3.Text = "may/matt was here :3"; + // + // CancelBtn + // + this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.CancelBtn.ForeColor = System.Drawing.Color.White; + this.CancelBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CancelBtn.Location = new System.Drawing.Point(92, 228); + this.CancelBtn.Name = "CancelBtn"; + this.CancelBtn.Size = new System.Drawing.Size(75, 23); + this.CancelBtn.TabIndex = 13; + this.CancelBtn.Text = "Cancel"; + this.CancelBtn.UseVisualStyleBackColor = true; + this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); + // + // FrameTimeUpDown + // + this.FrameTimeUpDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17))))); + this.FrameTimeUpDown.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.FrameTimeUpDown.ForeColor = System.Drawing.SystemColors.Window; + this.FrameTimeUpDown.Location = new System.Drawing.Point(87, 202); + this.FrameTimeUpDown.Maximum = new decimal(new int[] { 10000, 0, 0, 0}); - this.FrameTimeUpDown.Name = "FrameTimeUpDown"; - this.FrameTimeUpDown.Size = new System.Drawing.Size(179, 20); - this.FrameTimeUpDown.TabIndex = 15; - this.FrameTimeUpDown.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - // - // FrameEditor - // - this.AcceptButton = this.SaveBtn; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.CancelBtn; - this.ClientSize = new System.Drawing.Size(264, 140); - this.ControlBox = false; - this.Controls.Add(this.FrameTimeUpDown); - this.Controls.Add(this.FrameIndexUpDown); - this.Controls.Add(this.CancelBtn); - this.Controls.Add(this.label3); - this.Controls.Add(this.label1); - this.Controls.Add(this.SaveBtn); - this.Controls.Add(this.label2); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.MinimumSize = new System.Drawing.Size(266, 142); - this.Name = "FrameEditor"; - this.Resizable = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Style = MetroFramework.MetroColorStyle.Silver; - this.Theme = MetroFramework.MetroThemeStyle.Dark; - ((System.ComponentModel.ISupportInitialize)(this.FrameIndexUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.FrameTimeUpDown)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); + this.FrameTimeUpDown.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.FrameTimeUpDown.Name = "FrameTimeUpDown"; + this.FrameTimeUpDown.Size = new System.Drawing.Size(73, 20); + this.FrameTimeUpDown.TabIndex = 15; + this.FrameTimeUpDown.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.FrameTimeUpDown.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // FrameList + // + this.FrameList.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.FrameList.ForeColor = System.Drawing.SystemColors.Window; + this.FrameList.HideSelection = false; + this.FrameList.ImageIndex = 0; + this.FrameList.ImageList = this.TextureIcons; + this.FrameList.Location = new System.Drawing.Point(12, 37); + this.FrameList.Name = "FrameList"; + this.FrameList.SelectedImageIndex = 0; + this.FrameList.ShowLines = false; + this.FrameList.ShowRootLines = false; + this.FrameList.Size = new System.Drawing.Size(155, 159); + this.FrameList.TabIndex = 1; + // + // TextureIcons + // + this.TextureIcons.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; + this.TextureIcons.ImageSize = new System.Drawing.Size(32, 32); + this.TextureIcons.TransparentColor = System.Drawing.Color.Transparent; + // + // FrameEditor + // + this.AcceptButton = this.SaveBtn; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.CancelBtn; + this.ClientSize = new System.Drawing.Size(178, 264); + this.ControlBox = false; + this.Controls.Add(this.FrameList); + this.Controls.Add(this.FrameTimeUpDown); + this.Controls.Add(this.CancelBtn); + this.Controls.Add(this.label3); + this.Controls.Add(this.label1); + this.Controls.Add(this.SaveBtn); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrameEditor"; + this.Resizable = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Style = MetroFramework.MetroColorStyle.Silver; + this.Theme = MetroFramework.MetroThemeStyle.Dark; + ((System.ComponentModel.ISupportInitialize)(this.FrameTimeUpDown)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); } #endregion - private System.Windows.Forms.Button SaveBtn; - private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label3; private System.Windows.Forms.Button CancelBtn; - private System.Windows.Forms.NumericUpDown FrameIndexUpDown; private System.Windows.Forms.NumericUpDown FrameTimeUpDown; - } + private System.Windows.Forms.TreeView FrameList; + public System.Windows.Forms.ImageList TextureIcons; + public System.Windows.Forms.Button SaveBtn; + } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.cs b/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.cs index c820c4c3..b994bad1 100644 --- a/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.cs +++ b/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.cs @@ -15,20 +15,30 @@ namespace PckStudio.Forms.Additional_Popups.Animation { public partial class FrameEditor : MetroForm { - public int FrameTextureIndex => (int)FrameIndexUpDown.Value; + public int FrameTextureIndex => FrameList.SelectedNode.Index; public int FrameTime => (int)FrameTimeUpDown.Value; - public FrameEditor(int indexLimit) + public FrameEditor(ImageList texList) { InitializeComponent(); - label3.Text = "Frame must be within 0 and " + indexLimit + "."; - FrameIndexUpDown.Maximum = indexLimit; - FrameTimeUpDown.Minimum = 1; + label3.Text = "Select a frame and frame time:"; + FrameList.ImageList = texList; + + int index = 0; + foreach (Image frameTex in texList.Images) + { + TreeNode frame = new TreeNode($"Frame {index}", index, index); + FrameList.Nodes.Add(frame); + Console.WriteLine(index); + index++; + } } - public FrameEditor(int frameTime, int frameTextureIndex, int indexLimit) : this(indexLimit) + + public FrameEditor(int frameTime, int frameTextureIndex, ImageList texList) : this(texList) { - FrameIndexUpDown.Value = frameTextureIndex; - FrameTimeUpDown.Value = frameTime; + FrameList.SelectedNode = FrameList.Nodes[frameTextureIndex]; + FrameList.SelectedNode.EnsureVisible(); + FrameTimeUpDown.Value = frameTime; } private void SaveBtn_Click(object sender, EventArgs e) diff --git a/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.resx b/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.resx index 1af7de15..4d46b116 100644 --- a/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.resx +++ b/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.resx @@ -117,4 +117,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index bea1b251..095947d7 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -143,6 +143,11 @@ namespace PckStudio.Forms.Editor return frames; } + public List GetFrameTextures() + { + return frameTextures; + } + public int GetFrameIndex(Image frameTexture) { _ = frameTexture ?? throw new ArgumentNullException(nameof(frameTexture)); @@ -276,7 +281,7 @@ namespace PckStudio.Forms.Editor frameTreeView.Nodes.Clear(); // $"Frame: {i}, Frame Time: {Animation.MinimumFrameTime}" TextureIcons.Images.Clear(); - TextureIcons.Images.AddRange(currentAnimation.GetFrames().Select(f => f.Texture).ToArray()); + TextureIcons.Images.AddRange(currentAnimation.GetFrameTextures().ToArray()); currentAnimation.GetFrames().ForEach(f => frameTreeView.Nodes.Add("", $"for {f.Ticks} frame" + (f.Ticks > 1 ? "s" : "" ), currentAnimation.GetFrameIndex(f.Texture), currentAnimation.GetFrameIndex(f.Texture))); player.SelectFrame(currentAnimation, 0); } @@ -422,8 +427,8 @@ namespace PckStudio.Forms.Editor private void treeView1_doubleClick(object sender, EventArgs e) { var frame = currentAnimation.GetFrame(frameTreeView.SelectedNode.Index); - using FrameEditor diag = new FrameEditor(frame.Ticks, currentAnimation.GetFrameIndex(frame.Texture), currentAnimation.FrameTextureCount-1); - if (diag.ShowDialog(this) == DialogResult.OK) + using FrameEditor diag = new FrameEditor(frame.Ticks, currentAnimation.GetFrameIndex(frame.Texture), TextureIcons); + if (diag.ShowDialog(this) == DialogResult.OK) { /* Found a bug here. When passing the frame variable, it would replace the first instance of that frame and time * rather than the actual frame that was clicked. I've just switched to passing the index to fix this for now. -Matt @@ -436,7 +441,8 @@ namespace PckStudio.Forms.Editor private void addFrameToolStripMenuItem_Click(object sender, EventArgs e) { - using FrameEditor diag = new FrameEditor(currentAnimation.FrameTextureCount-1); + using FrameEditor diag = new FrameEditor(TextureIcons); + diag.SaveBtn.Text = "Add"; if (diag.ShowDialog(this) == DialogResult.OK) { currentAnimation.AddFrame(diag.FrameTextureIndex, diag.FrameTime); From 3c69e1a32c6673cabef2cdb35b1d013f35c637aa Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 2 Oct 2022 03:58:51 -0400 Subject: [PATCH 031/110] small adjustment to bink exception string --- PCK-Studio/Classes/FileTypes/Bink.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Classes/FileTypes/Bink.cs b/PCK-Studio/Classes/FileTypes/Bink.cs index 73861182..018f0ecf 100644 --- a/PCK-Studio/Classes/FileTypes/Bink.cs +++ b/PCK-Studio/Classes/FileTypes/Bink.cs @@ -110,7 +110,7 @@ namespace PckStudio.Classes bool flag2 = !(a == ".wav"); if (flag2) { - throw new Exception("File type not valid. To use MP3 or other audio formats, convert to wav format before using tool"); + throw new Exception("File type not valid. To use MP3 or other audio formats, convert to wav format before using this tool"); } result = "WAV"; } From dde9289ae202977fad60e3c2a07deedf02716143 Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 2 Oct 2022 03:59:19 -0400 Subject: [PATCH 032/110] Fixed weird COLEditor Designer error --- PCK-Studio/Forms/Editor/COLEditor.Designer.cs | 35 +- PCK-Studio/Forms/Editor/COLEditor.resx | 376 +++++++----------- 2 files changed, 157 insertions(+), 254 deletions(-) diff --git a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs index 2d7122f1..8f38b52c 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs @@ -51,6 +51,8 @@ namespace PckStudio.Forms.Editor this.saveToolStripMenuItem1 = 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.underwaterTreeView = new System.Windows.Forms.TreeView(); this.fogTreeView = new System.Windows.Forms.TreeView(); this.colorsTab = new System.Windows.Forms.TabPage(); @@ -58,8 +60,6 @@ namespace PckStudio.Forms.Editor this.tabControl = new MetroFramework.Controls.MetroTabControl(); this.underwaterTab = new System.Windows.Forms.TabPage(); this.fogTab = new System.Windows.Forms.TabPage(); - this.ColorContextMenu = new MetroFramework.Controls.MetroContextMenu(this.components); - this.restoreOriginalColorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.metroPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).BeginInit(); @@ -68,11 +68,11 @@ namespace PckStudio.Forms.Editor ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.menuStrip.SuspendLayout(); this.waterTab.SuspendLayout(); + this.ColorContextMenu.SuspendLayout(); this.colorsTab.SuspendLayout(); this.tabControl.SuspendLayout(); this.underwaterTab.SuspendLayout(); this.fogTab.SuspendLayout(); - this.ColorContextMenu.SuspendLayout(); this.SuspendLayout(); // // metroPanel1 @@ -265,6 +265,19 @@ namespace PckStudio.Forms.Editor 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.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); + // // underwaterTreeView // this.underwaterTreeView.ContextMenuStrip = this.ColorContextMenu; @@ -323,20 +336,6 @@ namespace PckStudio.Forms.Editor resources.ApplyResources(this.fogTab, "fogTab"); this.fogTab.Name = "fogTab"; // - // ColorContextMenu - // - this.ColorContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.restoreOriginalColorToolStripMenuItem}); - this.ColorContextMenu.Name = "ColorContextMenu"; - resources.ApplyResources(this.ColorContextMenu, "ColorContextMenu"); - // - // restoreOriginalColorToolStripMenuItem - // - this.restoreOriginalColorToolStripMenuItem.Image = global::PckStudio.Properties.Resources.ExportFile; - this.restoreOriginalColorToolStripMenuItem.Name = "restoreOriginalColorToolStripMenuItem"; - resources.ApplyResources(this.restoreOriginalColorToolStripMenuItem, "restoreOriginalColorToolStripMenuItem"); - this.restoreOriginalColorToolStripMenuItem.Click += new System.EventHandler(this.restoreOriginalColorToolStripMenuItem_Click); - // // COLEditor // resources.ApplyResources(this, "$this"); @@ -358,11 +357,11 @@ namespace PckStudio.Forms.Editor this.menuStrip.ResumeLayout(false); this.menuStrip.PerformLayout(); this.waterTab.ResumeLayout(false); + this.ColorContextMenu.ResumeLayout(false); this.colorsTab.ResumeLayout(false); this.tabControl.ResumeLayout(false); this.underwaterTab.ResumeLayout(false); this.fogTab.ResumeLayout(false); - this.ColorContextMenu.ResumeLayout(false); this.ResumeLayout(false); } diff --git a/PCK-Studio/Forms/Editor/COLEditor.resx b/PCK-Studio/Forms/Editor/COLEditor.resx index f3ac1ff3..41b1eb83 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.resx +++ b/PCK-Studio/Forms/Editor/COLEditor.resx @@ -117,183 +117,14 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - setColorBtn - - - MetroFramework.Controls.MetroButton, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - metroPanel1 - - - 2 - - - blueUpDown - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - metroPanel1 - - - 3 - - - greenUpDown - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - metroPanel1 - - - 4 - - - redUpDown - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - metroPanel1 - - - 5 - - - alphaUpDown - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - metroPanel1 - - - 6 - - - alphaLabel - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - metroPanel1 - - - 7 - - - blueLabel - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - metroPanel1 - - - 8 - - - greenLabel - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - metroPanel1 - - - 9 - - - redLabel - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - metroPanel1 - - - 10 - - - colorTextbox - - - MetroFramework.Controls.MetroTextBox, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - metroPanel1 - - - 11 - - - metroLabel1 - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - metroPanel1 - - - 12 - - - pictureBox1 - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - metroPanel1 - - - 13 - - - - Fill - - - 20, 60 - - - 612, 523 - - - - 0 - - - metroPanel1 - - - MetroFramework.Controls.MetroPanel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - $this - - - 3 - 400, 290 125, 23 + 22 @@ -510,6 +341,7 @@ 10 + @@ -597,6 +429,30 @@ 13 + + Fill + + + 20, 60 + + + 612, 523 + + + 0 + + + metroPanel1 + + + MetroFramework.Controls.MetroPanel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + $this + + + 3 + 17, 17 @@ -649,39 +505,6 @@ Save - - 125, 17 - - - 186, 22 - - - Restore original color - - - 187, 48 - - - ColorContextMenu - - - MetroFramework.Controls.MetroContextMenu, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - Fill - - - 0, 0 - - - No - - - 320, 458 - - - 0 - waterTreeView @@ -718,6 +541,51 @@ 1 + + 125, 17 + + + 187, 26 + + + ColorContextMenu + + + MetroFramework.Controls.MetroContextMenu, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + Fill + + + 0, 0 + + + No + + + 320, 458 + + + 0 + + + waterTreeView + + + System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + waterTab + + + 0 + + + 186, 22 + + + Restore original color + 0, 0 @@ -760,18 +628,6 @@ 0 - - Fill - - - 0, 0 - - - 320, 458 - - - 0 - colorTreeView @@ -808,9 +664,78 @@ 0 + + Fill + + + 0, 0 + + + 320, 458 + + + 0 + + + colorTreeView + + + System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + colorsTab + + + 0 + Top, Bottom, Left + + underwaterTab + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl + + + 2 + + + fogTab + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl + + + 3 + + + 20, 83 + + + 328, 500 + + + 22 + + + tabControl + + + MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + $this + + + 2 + 4, 38 @@ -859,27 +784,6 @@ 3 - - 20, 83 - - - 328, 500 - - - 22 - - - tabControl - - - MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - $this - - - 2 - True From 886489424f1631b34564ae27e3abcd1ed0e5f3c7 Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 2 Oct 2022 04:00:55 -0400 Subject: [PATCH 033/110] Fixed weird AudioEditor Designer bug --- .../Forms/Editor/AudioEditor.Designer.cs | 19 +-- PCK-Studio/Forms/Editor/AudioEditor.resx | 124 +++++++++--------- 2 files changed, 69 insertions(+), 74 deletions(-) diff --git a/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs b/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs index e64db857..18fadace 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs @@ -43,6 +43,7 @@ namespace PckStudio.Forms.Editor this.creditsEditorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.deleteUnusedBINKAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.openDataFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.bulkReplaceExistingTracksToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.howToAddSongsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.whatIsEachCategoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -57,7 +58,6 @@ namespace PckStudio.Forms.Editor this.playOverworldInCreative = new MetroFramework.Controls.MetroCheckBox(); this.compressionUpDown = new System.Windows.Forms.NumericUpDown(); this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); - this.bulkReplaceExistingTracksToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.contextMenuStrip1.SuspendLayout(); this.menuStrip.SuspendLayout(); this.contextMenuStrip2.SuspendLayout(); @@ -92,7 +92,6 @@ namespace PckStudio.Forms.Editor // // removeCategoryStripMenuItem // - this.removeCategoryStripMenuItem.Image = global::PckStudio.Properties.Resources.Del; this.removeCategoryStripMenuItem.Name = "removeCategoryStripMenuItem"; resources.ApplyResources(this.removeCategoryStripMenuItem, "removeCategoryStripMenuItem"); this.removeCategoryStripMenuItem.Click += new System.EventHandler(this.removeCategoryStripMenuItem_Click); @@ -148,25 +147,28 @@ namespace PckStudio.Forms.Editor // // creditsEditorToolStripMenuItem // - this.creditsEditorToolStripMenuItem.Image = global::PckStudio.Properties.Resources.ExportFile; this.creditsEditorToolStripMenuItem.Name = "creditsEditorToolStripMenuItem"; resources.ApplyResources(this.creditsEditorToolStripMenuItem, "creditsEditorToolStripMenuItem"); this.creditsEditorToolStripMenuItem.Click += new System.EventHandler(this.creditsEditorToolStripMenuItem_Click); // // deleteUnusedBINKAsToolStripMenuItem // - this.deleteUnusedBINKAsToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Del; this.deleteUnusedBINKAsToolStripMenuItem.Name = "deleteUnusedBINKAsToolStripMenuItem"; resources.ApplyResources(this.deleteUnusedBINKAsToolStripMenuItem, "deleteUnusedBINKAsToolStripMenuItem"); this.deleteUnusedBINKAsToolStripMenuItem.Click += new System.EventHandler(this.deleteUnusedBINKAsToolStripMenuItem_Click); // // openDataFolderToolStripMenuItem // - this.openDataFolderToolStripMenuItem.Image = global::PckStudio.Properties.Resources.ZZFolder; this.openDataFolderToolStripMenuItem.Name = "openDataFolderToolStripMenuItem"; resources.ApplyResources(this.openDataFolderToolStripMenuItem, "openDataFolderToolStripMenuItem"); this.openDataFolderToolStripMenuItem.Click += new System.EventHandler(this.openDataFolderToolStripMenuItem_Click); // + // bulkReplaceExistingTracksToolStripMenuItem + // + this.bulkReplaceExistingTracksToolStripMenuItem.Name = "bulkReplaceExistingTracksToolStripMenuItem"; + resources.ApplyResources(this.bulkReplaceExistingTracksToolStripMenuItem, "bulkReplaceExistingTracksToolStripMenuItem"); + this.bulkReplaceExistingTracksToolStripMenuItem.Click += new System.EventHandler(this.bulkReplaceExistingFilesToolStripMenuItem_Click); + // // helpToolStripMenuItem // this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -238,7 +240,6 @@ namespace PckStudio.Forms.Editor // // removeEntryMenuItem // - this.removeEntryMenuItem.Image = global::PckStudio.Properties.Resources.Del; this.removeEntryMenuItem.Name = "removeEntryMenuItem"; resources.ApplyResources(this.removeEntryMenuItem, "removeEntryMenuItem"); this.removeEntryMenuItem.Click += new System.EventHandler(this.removeEntryMenuItem_Click); @@ -288,12 +289,6 @@ namespace PckStudio.Forms.Editor this.metroLabel1.Name = "metroLabel1"; this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark; // - // bulkReplaceExistingTracksToolStripMenuItem - // - this.bulkReplaceExistingTracksToolStripMenuItem.Name = "bulkReplaceExistingTracksToolStripMenuItem"; - resources.ApplyResources(this.bulkReplaceExistingTracksToolStripMenuItem, "bulkReplaceExistingTracksToolStripMenuItem"); - this.bulkReplaceExistingTracksToolStripMenuItem.Click += new System.EventHandler(this.bulkReplaceExistingFilesToolStripMenuItem_Click); - // // AudioEditor // resources.ApplyResources(this, "$this"); diff --git a/PCK-Studio/Forms/Editor/AudioEditor.resx b/PCK-Studio/Forms/Editor/AudioEditor.resx index 765e9368..a35db4c7 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.resx +++ b/PCK-Studio/Forms/Editor/AudioEditor.resx @@ -146,7 +146,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADk - MAAAAk1TRnQBSQFMAgEBCQEAAWABAAFgAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + MAAAAk1TRnQBSQFMAgEBCQEAAWgBAAFoAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA AwABMAMAAQEBAAEgBgABMBIAAzgB/wM1Af8DNQH/AzMB/wMwAf8DLwH/Ay0B/wMtAf8DJAH/AzsB/wM4 Af8DNQH/Ay0B/wMnAf8DNgH/AzIB/8AAAzgB/wN/Af8DeQH/A3kB/wN5Af8DcQH/A3EB/wN5Af8DeQH/ A3EB/wNxAf8DcQH/A3kB/wN5Af8DfwH/AzIB/8AAAzIB/wN2Af8DsAH/A7AB/wOvAf8DrwH/A68B/wOo @@ -410,54 +410,6 @@ False - - 37, 20 - - - File - - - 46, 20 - - - Tools - - - 245, 22 - - - How to add songs - - - 245, 22 - - - What is each category? - - - 245, 22 - - - How to edit credits - - - 243, 22 - - - How to optimize the Data folder - - - 245, 22 - - - BINKA Compression - - - 44, 20 - - - Help - 20, 60 @@ -482,6 +434,12 @@ 7 + + 37, 20 + + + File + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -493,11 +451,17 @@ - 180, 22 + 98, 22 Save + + 46, 20 + + + Tools + 220, 22 @@ -516,6 +480,48 @@ Open Data Folder + + 220, 22 + + + Bulk Replace Existing Tracks + + + 44, 20 + + + Help + + + 243, 22 + + + How to add songs + + + 243, 22 + + + What is each category? + + + 243, 22 + + + How to edit credits + + + 243, 22 + + + How to optimize the Data folder + + + 243, 22 + + + BINKA Compression + Top, Bottom, Left, Right @@ -653,12 +659,6 @@ 2 - - 220, 22 - - - Bulk Replace Existing Tracks - True @@ -731,6 +731,12 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + bulkReplaceExistingTracksToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + helpToolStripMenuItem @@ -785,12 +791,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - bulkReplaceExistingTracksToolStripMenuItem - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - AudioEditor From 9e115cfe722b7501b35e6003c573b321c86cc576 Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 2 Oct 2022 04:02:12 -0400 Subject: [PATCH 034/110] Fixed weird MainForm Designer bug --- PCK-Studio/MainForm.Designer.cs | 17 +- PCK-Studio/MainForm.resx | 967 ++++++++++++++++---------------- 2 files changed, 504 insertions(+), 480 deletions(-) diff --git a/PCK-Studio/MainForm.Designer.cs b/PCK-Studio/MainForm.Designer.cs index 9517da39..702a1610 100644 --- a/PCK-Studio/MainForm.Designer.cs +++ b/PCK-Studio/MainForm.Designer.cs @@ -36,6 +36,7 @@ this.skinToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.createAnimatedTextureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.audiopckToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.colourscolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.importSkinsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.importSkinToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.importExtractedSkinsFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -131,7 +132,6 @@ this.imageList = new System.Windows.Forms.ImageList(this.components); this.pictureBoxImagePreview = new PckStudio.PictureBoxWithInterpolationMode(); this.LittleEndianCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.colourscolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.contextMenuPCKEntries.SuspendLayout(); this.menuStrip.SuspendLayout(); this.contextMenuMetaTree.SuspendLayout(); @@ -198,6 +198,12 @@ this.audiopckToolStripMenuItem.Name = "audiopckToolStripMenuItem"; this.audiopckToolStripMenuItem.Click += new System.EventHandler(this.audiopckToolStripMenuItem_Click); // + // colourscolToolStripMenuItem + // + this.colourscolToolStripMenuItem.Name = "colourscolToolStripMenuItem"; + resources.ApplyResources(this.colourscolToolStripMenuItem, "colourscolToolStripMenuItem"); + this.colourscolToolStripMenuItem.Click += new System.EventHandler(this.colourscolToolStripMenuItem_Click); + // // importSkinsToolStripMenuItem // this.importSkinsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -724,7 +730,6 @@ // this.pckOpen.BackColor = System.Drawing.Color.Transparent; resources.ApplyResources(this.pckOpen, "pckOpen"); - this.pckOpen.Image = global::PckStudio.Properties.Resources.pckClosed; this.pckOpen.Name = "pckOpen"; this.pckOpen.TabStop = false; this.pckOpen.Click += new System.EventHandler(this.OpenPck_Click); @@ -946,7 +951,6 @@ // resources.ApplyResources(this.pictureBoxImagePreview, "pictureBoxImagePreview"); this.pictureBoxImagePreview.BackColor = System.Drawing.Color.Transparent; - this.pictureBoxImagePreview.Image = global::PckStudio.Properties.Resources.NoImageFound; this.pictureBoxImagePreview.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.pictureBoxImagePreview.Name = "pictureBoxImagePreview"; this.pictureBoxImagePreview.TabStop = false; @@ -960,13 +964,6 @@ this.LittleEndianCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; this.LittleEndianCheckBox.UseSelectable = true; // - // colourscolToolStripMenuItem - // - this.colourscolToolStripMenuItem.Image = global::PckStudio.Properties.Resources.COL_ICON; - this.colourscolToolStripMenuItem.Name = "colourscolToolStripMenuItem"; - resources.ApplyResources(this.colourscolToolStripMenuItem, "colourscolToolStripMenuItem"); - this.colourscolToolStripMenuItem.Click += new System.EventHandler(this.colourscolToolStripMenuItem_Click); - // // MainForm // this.ApplyImageInvert = true; diff --git a/PCK-Studio/MainForm.resx b/PCK-Studio/MainForm.resx index f1625313..d3d29d24 100644 --- a/PCK-Studio/MainForm.resx +++ b/PCK-Studio/MainForm.resx @@ -121,6 +121,29 @@ 116, 17 + + 211, 268 + + + contextMenuPCKEntries + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAA3SURBVDhPY/j/ + /z9FGKsgGIsCKWSMTQ0QYxUE45FmALpiYvFwMgAbxqIYG8YqCMajBhCJ/zMAAPGwpV/Xje8RAAAAAElF + TkSuQmCC + + + + 210, 22 + + + Create + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -130,7 +153,7 @@ - 180, 22 + 167, 22 Folder @@ -152,7 +175,7 @@ - 180, 22 + 167, 22 Skin @@ -174,7 +197,7 @@ - 180, 22 + 167, 22 Animated Texture @@ -188,31 +211,17 @@ - 180, 22 + 167, 22 Audio.pck - 180, 22 + 167, 22 Colours.col - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAA3SURBVDhPY/j/ - /z9FGKsgGIsCKWSMTQ0QYxUE45FmALpiYvFwMgAbxqIYG8YqCMajBhCJ/zMAAPGwpV/Xje8RAAAAAElF - TkSuQmCC - - - - 210, 22 - - - Create - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -228,12 +237,130 @@ Import + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAIkSURBVDhPpdLf + T1JxGMfxc1n8qtzcyglCWhFS1PLGHAgisDmktZZtabRSEYhDZ8xpiSWVpaSxLpoXyWquLvzV+oGZq+iy + /6Stm7qsm+DT830YMJw3rbO9Djs7z/P+wob03xcAyWbUwqLXotWgha1pDzPr1axl/y52uEHFrAY1z4l5 + sVsK0IK1UVMbaKQAOXhgN2tuKLHQTKtBh6M0XwmIxe1OtexjXZa9pA6dlnomlgXx7WoCo/1eTF3pwfRQ + gM3HLmD+Wh8yIwE8CgcwFznLJs67cLPPgeMmXW1gKRXCZjqGfCbBvi6kWH6OnoXMKFsd68fa2CW0Haqr + BpYnh5G7F8PGtIyV2yG2NhXHeuo6nioD5CI+pRMsG+nFYqSHVQKrt0LYKAcmhyCeX6Vklk0MsI9phQIK + Bfy07OfPSkAs/v7xDcViEd6OZ/C2LyOXHMb75Agtlk72nF6hdy/FEgrFP3yI2OVA7r6MXz+/04siPB3P + aXgJ75JhbFIgP5PAZwr42lcp8IJnioUCBcLVQHbQizfjQTr1Kj7cTbBIpw1R54mK/GwMXwjqaYWkzrVV + A4uDPry+QYGJIN7eUVjMcQyyvWrrQRxbM/GdA4+Dbjy57MJC0AmnUQ2XUYPZXjse+qvKi9vRHZLisUJx + WyB3m0sBkwZuvYr56A8j7LQs0B2S7LMg2n0EUY8ZdpMaDgo4mlSsq1lXo7w4fuZk6Sf861U5mS9J+gsp + e+98+xbVEAAAAABJRU5ErkJggg== + + + + 228, 22 + + + Import Skin + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAEnSURBVDhPYxgc + 4P8Chv8YeKWUIFSaMPi/W+r//1MapOGTOixQ7UADkCS05Xjh2FhFEIydtIT+22uJAsX4wBimFqod04Bt + nTn/9/YV/T82rQGM93YXAfkl/1eVRYPl8RqwuTnn/5aW3P8r69L+r67P+7+mIf//rIKo/7s7i/7PyfT9 + PzvTC78BW6AGrKpN+7+2IReM5xTF/N/VWQA0wAdogA8BA4Ca//7799/VauH/TdUZ/7dVp//fA7Td3XLV + //+iwNgBYXwGbCiP+7+5Oun/9qai/5n2+v+zHAzAeG9HDnEGTIl3/D8tzuG/owLP/w5f2/9dPrYIjWgY + qh3VgAJnrf+5Lhr/HRV5/jvLcoExNs0gDNWOagBeDNMM5UO1Ew8wbB4EgIEBABiEccKRdcoAAAAAAElF + TkSuQmCC + + + + 228, 22 + + + Import Extracted Skins Folder + + + 228, 22 + + + Add Texture + 210, 22 Set File Type + + 222, 22 + + + Skin (.PNG) + + + 222, 22 + + + Cape (.PNG) + + + 222, 22 + + + Texture (.PNG) + + + 222, 22 + + + Languages File (.LOC) + + + 222, 22 + + + Game Rules File (.GRF) + + + 222, 22 + + + Music Cues File (audio.PCK) + + + 222, 22 + + + Colour Table File (.COL) + + + 222, 22 + + + Game Rules Header (.GRH) + + + 222, 22 + + + Skins PCK (.PCK) + + + 222, 22 + + + Models File (.BIN) + + + 222, 22 + + + Behaviours File (.BIN) + + + 222, 22 + + + Entity Materials File (.BIN) + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -341,133 +468,6 @@ Generate MipMap Texture - - 211, 290 - - - contextMenuPCKEntries - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAIkSURBVDhPpdLf - T1JxGMfxc1n8qtzcyglCWhFS1PLGHAgisDmktZZtabRSEYhDZ8xpiSWVpaSxLpoXyWquLvzV+oGZq+iy - /6Stm7qsm+DT830YMJw3rbO9Djs7z/P+wob03xcAyWbUwqLXotWgha1pDzPr1axl/y52uEHFrAY1z4l5 - sVsK0IK1UVMbaKQAOXhgN2tuKLHQTKtBh6M0XwmIxe1OtexjXZa9pA6dlnomlgXx7WoCo/1eTF3pwfRQ - gM3HLmD+Wh8yIwE8CgcwFznLJs67cLPPgeMmXW1gKRXCZjqGfCbBvi6kWH6OnoXMKFsd68fa2CW0Haqr - BpYnh5G7F8PGtIyV2yG2NhXHeuo6nioD5CI+pRMsG+nFYqSHVQKrt0LYKAcmhyCeX6Vklk0MsI9phQIK - Bfy07OfPSkAs/v7xDcViEd6OZ/C2LyOXHMb75Agtlk72nF6hdy/FEgrFP3yI2OVA7r6MXz+/04siPB3P - aXgJ75JhbFIgP5PAZwr42lcp8IJnioUCBcLVQHbQizfjQTr1Kj7cTbBIpw1R54mK/GwMXwjqaYWkzrVV - A4uDPry+QYGJIN7eUVjMcQyyvWrrQRxbM/GdA4+Dbjy57MJC0AmnUQ2XUYPZXjse+qvKi9vRHZLisUJx - WyB3m0sBkwZuvYr56A8j7LQs0B2S7LMg2n0EUY8ZdpMaDgo4mlSsq1lXo7w4fuZk6Sf861U5mS9J+gsp - e+98+xbVEAAAAABJRU5ErkJggg== - - - - 228, 22 - - - Import Skin - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAEnSURBVDhPYxgc - 4P8Chv8YeKWUIFSaMPi/W+r//1MapOGTOixQ7UADkCS05Xjh2FhFEIydtIT+22uJAsX4wBimFqod04Bt - nTn/9/YV/T82rQGM93YXAfkl/1eVRYPl8RqwuTnn/5aW3P8r69L+r67P+7+mIf//rIKo/7s7i/7PyfT9 - PzvTC78BW6AGrKpN+7+2IReM5xTF/N/VWQA0wAdogA8BA4Ca//7799/VauH/TdUZ/7dVp//fA7Td3XLV - //+iwNgBYXwGbCiP+7+5Oun/9qai/5n2+v+zHAzAeG9HDnEGTIl3/D8tzuG/owLP/w5f2/9dPrYIjWgY - qh3VgAJnrf+5Lhr/HRV5/jvLcoExNs0gDNWOagBeDNMM5UO1Ew8wbB4EgIEBABiEccKRdcoAAAAAAElF - TkSuQmCC - - - - 228, 22 - - - Import Extracted Skins Folder - - - 228, 22 - - - Add Texture - - - 222, 22 - - - Skin (.PNG) - - - 222, 22 - - - Cape (.PNG) - - - 222, 22 - - - Texture (.PNG) - - - 222, 22 - - - Languages File (.LOC) - - - 222, 22 - - - Game Rules File (.GRF) - - - 222, 22 - - - Music Cues File (audio.PCK) - - - 222, 22 - - - Colour Table File (.COL) - - - 222, 22 - - - Game Rules Header (.GRH) - - - 222, 22 - - - Skins PCK (.PCK) - - - 222, 22 - - - Models File (.BIN) - - - 222, 22 - - - Behaviours File (.BIN) - - - 222, 22 - - - Entity Materials File (.BIN) - 17, 17 @@ -29285,324 +29285,6 @@ 7 - - pckOpen - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - openTab - - - 2 - - - label5 - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - openTab - - - 3 - - - labelVersion - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - openTab - - - 4 - - - ChangelogRichTextBox - - - System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - openTab - - - 5 - - - 4, 38 - - - 18, 30, 20, 5 - - - 1016, 558 - - - 1 - - - openTab - - - MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - tabControl - - - 0 - - - None - - - Top, Right - - - True - - - 935, 252 - - - 0, 0 - - - 19 - - - labelImageSize - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - editorTab - - - 2 - - - Top, Right - - - True - - - 913, 53 - - - 0, 0 - - - 17 - - - fileEntryCountLabel - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - editorTab - - - 3 - - - Top, Bottom, Right - - - MetaTab - - - MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - PropertiesTabControl - - - 0 - - - 413, 277 - - - 596, 282 - - - 11 - - - PropertiesTabControl - - - MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - editorTab - - - 4 - - - True - - - True - - - 433, 71 - - - 0, 0 - - - 3 - - - label11 - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - editorTab - - - 5 - - - Top, Bottom, Left, Right - - - False - - - 0 - - - 467, 14 - - - 32, 32 - - - 5, 50 - - - 0, 0, 0, 0 - - - 0 - - - 405, 501 - - - 10 - - - treeViewMain - - - System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - editorTab - - - 6 - - - Top, Right - - - None - - - NoControl - - - 413, 50 - - - 231, 218 - - - Zoom - - - 18 - - - pictureBoxImagePreview - - - PckStudio.PictureBoxWithInterpolationMode, PCK-Studio, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null - - - editorTab - - - 8 - - - 4, 38 - - - 5, 50, 5, 7 - - - 1016, 558 - - - 0 - - - editorTab - - - MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - tabControl - - - 1 - - - Fill - - - 20, 30 - - - 0, 0, 0, 0 - - - 1024, 600 - - - 0 - - - tabControl - - - MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - $this - - - 4 - None @@ -29732,6 +29414,249 @@ 5 + + 4, 38 + + + 18, 30, 20, 5 + + + 1016, 558 + + + 1 + + + openTab + + + MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + tabControl + + + 0 + + + True + + + None + + + labelImageSize + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 2 + + + fileEntryCountLabel + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 3 + + + PropertiesTabControl + + + MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 4 + + + label11 + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 5 + + + treeViewMain + + + System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + editorTab + + + 6 + + + pictureBoxImagePreview + + + PckStudio.PictureBoxWithInterpolationMode, PCK-Studio, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null + + + editorTab + + + 8 + + + 4, 38 + + + 5, 50, 5, 7 + + + 1016, 558 + + + 0 + + + editorTab + + + MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + tabControl + + + 1 + + + Fill + + + 20, 30 + + + 0, 0, 0, 0 + + + 1024, 600 + + + 0 + + + tabControl + + + MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + $this + + + 4 + + + Top, Right + + + True + + + 935, 252 + + + 0, 0 + + + 19 + + + labelImageSize + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 2 + + + Top, Right + + + True + + + 913, 53 + + + 0, 0 + + + 17 + + + fileEntryCountLabel + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 3 + + + Top, Bottom, Right + + + MetaTab + + + MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + PropertiesTabControl + + + 0 + + + 413, 277 + + + 596, 282 + + + 11 + + + PropertiesTabControl + + + MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 4 + metroLabel2 @@ -30032,6 +29957,108 @@ 7 + + True + + + True + + + 433, 71 + + + 0, 0 + + + 3 + + + label11 + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 5 + + + Top, Bottom, Left, Right + + + False + + + 0 + + + 467, 14 + + + 32, 32 + + + 5, 50 + + + 0, 0, 0, 0 + + + 0 + + + 405, 501 + + + 10 + + + treeViewMain + + + System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + editorTab + + + 6 + + + Top, Right + + + None + + + NoControl + + + 413, 50 + + + 231, 218 + + + Zoom + + + 18 + + + pictureBoxImagePreview + + + PckStudio.PictureBoxWithInterpolationMode, PCK-Studio, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null + + + editorTab + + + 8 + Top, Right @@ -32622,6 +32649,12 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + colourscolToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + importSkinsToolStripMenuItem @@ -33048,12 +33081,6 @@ System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - colourscolToolStripMenuItem - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - MainForm From 0dd49cf37f7b34ee2914755da2ad516f786b740f Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 2 Oct 2022 04:05:35 -0400 Subject: [PATCH 035/110] Small change to message box string --- PCK-Studio/Forms/Editor/AudioEditor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Forms/Editor/AudioEditor.cs b/PCK-Studio/Forms/Editor/AudioEditor.cs index ad3c0bda..ed22a529 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.cs +++ b/PCK-Studio/Forms/Editor/AudioEditor.cs @@ -418,7 +418,7 @@ namespace PckStudio.Forms.Editor private void whatIsEachCategoryToolStripMenuItem_Click(object sender, EventArgs e) { MessageBox.Show("Categories are pretty self explanatory. The game controls when each category should play.\n" + - "\nGAMEPLAY - Plays in the specified dimensions.\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: Nothing special to note.\n" + "-End: Prioritizes the final track when the dragon is alive.\n" + From 6381a0a0d91e93e31882e3d6a79f5d811f073a94 Mon Sep 17 00:00:00 2001 From: Felix Miller Date: Sun, 2 Oct 2022 13:00:40 -0400 Subject: [PATCH 036/110] Fill in a couple gaps in changelog --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75d48d82..a8c02f52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -176,6 +176,10 @@ Some features may be completely missing or incomplete at this point in time! -Fixed Model Generator crashing when minimized -Fixed more bugs +2.9c +==== +-Fixed some minor bugs + 2.8b ==== -Fixed a few bugs from 2.8 @@ -204,6 +208,10 @@ Some features may be completely missing or incomplete at this point in time! -Model Generator -Few UI Improvements +2.3(non-feature) +=== +-Rebranded Minekampf as PCK Studio + 2.3 === -Fully Fixed Cape Adding From d0404612b77171cb4b3c2271feb0d1fa1585d62c Mon Sep 17 00:00:00 2001 From: MattNL Date: Sun, 2 Oct 2022 15:20:54 -0400 Subject: [PATCH 037/110] Fixed PictureBox not showing initially in MainForm --- PCK-Studio/MainForm.Designer.cs | 18 +- PCK-Studio/MainForm.resx | 1597 +++++++++++++++++++++++-------- 2 files changed, 1220 insertions(+), 395 deletions(-) diff --git a/PCK-Studio/MainForm.Designer.cs b/PCK-Studio/MainForm.Designer.cs index 702a1610..71bc9a74 100644 --- a/PCK-Studio/MainForm.Designer.cs +++ b/PCK-Studio/MainForm.Designer.cs @@ -130,8 +130,8 @@ this.label11 = new MetroFramework.Controls.MetroLabel(); this.treeViewMain = new System.Windows.Forms.TreeView(); this.imageList = new System.Windows.Forms.ImageList(this.components); - this.pictureBoxImagePreview = new PckStudio.PictureBoxWithInterpolationMode(); this.LittleEndianCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.pictureBoxImagePreview = new PckStudio.PictureBoxWithInterpolationMode(); this.contextMenuPCKEntries.SuspendLayout(); this.menuStrip.SuspendLayout(); this.contextMenuMetaTree.SuspendLayout(); @@ -947,14 +947,6 @@ resources.ApplyResources(this.imageList, "imageList"); this.imageList.TransparentColor = System.Drawing.Color.Transparent; // - // pictureBoxImagePreview - // - resources.ApplyResources(this.pictureBoxImagePreview, "pictureBoxImagePreview"); - this.pictureBoxImagePreview.BackColor = System.Drawing.Color.Transparent; - this.pictureBoxImagePreview.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; - this.pictureBoxImagePreview.Name = "pictureBoxImagePreview"; - this.pictureBoxImagePreview.TabStop = false; - // // LittleEndianCheckBox // resources.ApplyResources(this.LittleEndianCheckBox, "LittleEndianCheckBox"); @@ -964,6 +956,14 @@ this.LittleEndianCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; this.LittleEndianCheckBox.UseSelectable = true; // + // pictureBoxImagePreview + // + resources.ApplyResources(this.pictureBoxImagePreview, "pictureBoxImagePreview"); + this.pictureBoxImagePreview.BackColor = System.Drawing.Color.Transparent; + this.pictureBoxImagePreview.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; + this.pictureBoxImagePreview.Name = "pictureBoxImagePreview"; + this.pictureBoxImagePreview.TabStop = false; + // // MainForm // this.ApplyImageInvert = true; diff --git a/PCK-Studio/MainForm.resx b/PCK-Studio/MainForm.resx index d3d29d24..11cd1115 100644 --- a/PCK-Studio/MainForm.resx +++ b/PCK-Studio/MainForm.resx @@ -121,29 +121,6 @@ 116, 17 - - 211, 268 - - - contextMenuPCKEntries - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAA3SURBVDhPY/j/ - /z9FGKsgGIsCKWSMTQ0QYxUE45FmALpiYvFwMgAbxqIYG8YqCMajBhCJ/zMAAPGwpV/Xje8RAAAAAElF - TkSuQmCC - - - - 210, 22 - - - Create - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -222,20 +199,19 @@ Colours.col - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAABzSURBVDhPpYzB - DQAhCARp4hr3Txu254WTjYRb9cEmk/BgRjBVHTv85Twmgt77PcJEYIFrhIkAgWOEiSAGthEmgtbaD9fW - mBgpB4xywCgFxiMf5YDdrq3l5wjEjKtzTARMNlydY2IGot2ureVnRjkQmZbICyCi7XU5cfqKAAAAAElF + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAA3SURBVDhPY/j/ + /z9FGKsgGIsCKWSMTQ0QYxUE45FmALpiYvFwMgAbxqIYG8YqCMajBhCJ/zMAAPGwpV/Xje8RAAAAAElF TkSuQmCC - + 210, 22 - - Import + + Create @@ -283,11 +259,20 @@ Add Texture - + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAABzSURBVDhPpYzB + DQAhCARp4hr3Txu254WTjYRb9cEmk/BgRjBVHTv85Twmgt77PcJEYIFrhIkAgWOEiSAGthEmgtbaD9fW + mBgpB4xywCgFxiMf5YDdrq3l5wjEjKtzTARMNlydY2IGot2ureVnRjkQmZbICyCi7XU5cfqKAAAAAElF + TkSuQmCC + + + 210, 22 - - Set File Type + + Import 222, 22 @@ -361,6 +346,12 @@ Entity Materials File (.BIN) + + 210, 22 + + + Set File Type + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -468,6 +459,15 @@ Generate MipMap Texture + + 211, 268 + + + contextMenuPCKEntries + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 17, 17 @@ -482,53 +482,6 @@ None - - 24, 44 - - - 1016, 24 - - - 2 - - - menuStrip1 - - - menuStrip - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - 37, 20 - - - File - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADuSURBVFhH7ZbB - CsMgEERDbv5A/v83e2jNTmCKGdegJk0heHgUn7vrKBQyxRj/iivJPM9WMTWjc45wJeAwhAghVJEG1nkl - XNkziLCvtteXphFCfQ08nOi+4kvTeFL1NfBQ/BLuefjS9NkAADOwPnpNX14UADBEaV4mNnkygN34Y/1v - AgeWZXll9So2eTLAEVm9ik2a7g1Qgn9t9bvFV/4gAOZdHgB1RPeUEeAZAeBr0d4R4JIACuqI7ikjwDMD - tDACNAfo/Sou0fQ9wGKvoQfO8i61W6SkTXi+XtLLgOwcFSna3It3c+LKO3HlfcRpBa3JBjU5E8DiAAAA - AElFTkSuQmCC - - - - 217, 22 - - - New - 151, 22 @@ -547,6 +500,23 @@ Mash-Up Pack + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADuSURBVFhH7ZbB + CsMgEERDbv5A/v83e2jNTmCKGdegJk0heHgUn7vrKBQyxRj/iivJPM9WMTWjc45wJeAwhAghVJEG1nkl + XNkziLCvtteXphFCfQ08nOi+4kvTeFL1NfBQ/BLuefjS9NkAADOwPnpNX14UADBEaV4mNnkygN34Y/1v + AgeWZXll9So2eTLAEVm9ik2a7g1Qgn9t9bvFV/4gAOZdHgB1RPeUEeAZAeBr0d4R4JIACuqI7ikjwDMD + tDACNAfo/Sou0fQ9wGKvoQfO8i61W6SkTXi+XtLLgOwcFSna3It3c+LKO3HlfcRpBa3JBjU5E8DiAAAA + AElFTkSuQmCC + + + + 217, 22 + + + New + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -665,11 +635,11 @@ False - - 39, 20 + + 37, 20 - - Edit + + File False @@ -715,11 +685,11 @@ Convert to Bedrock - - 44, 20 + + 39, 20 - - Help + + Edit @@ -1261,20 +1231,6 @@ Binka Conversion - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAKdJREFUOE+1 - jzEKwzAQBNUEXKQIBOwifcgTUvkDbt2p9qP0Ev1E31FYkVXOx2FLRRYWi7NnTnZ/z/MxZPY7aguhbZlq - myQafL+ubRINshCwnO0kFqi3HkpwWOf7DkC1RBfvx9slV4ElscqbxBiz9/4nwOBIQjCEUL7FswhwDYAp - JVMiN0oYs/ILiCXRIGHOwVQBoiXsKSgjJdzaBMpQ0g3KEOoG++PcBx9PFJGNjU4vAAAAAElFTkSuQmCC - - - - 181, 22 - - - Tutorials - iVBORw0KGgoAAAANSUhEUgAACOAAAAaoCAYAAAAgNTafAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m @@ -21960,6 +21916,20 @@ How PCKs work + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAKdJREFUOE+1 + jzEKwzAQBNUEXKQIBOwifcgTUvkDbt2p9qP0Ev1E31FYkVXOx2FLRRYWi7NnTnZ/z/MxZPY7aguhbZlq + myQafL+ubRINshCwnO0kFqi3HkpwWOf7DkC1RBfvx9slV4ElscqbxBiz9/4nwOBIQjCEUL7FswhwDYAp + JVMiN0oYs/ILiCXRIGHOwVQBoiXsKSgjJdzaBMpQ0g3KEOoG++PcBx9PFJGNjU4vAAAAAElFTkSuQmCC + + + + 181, 22 + + + Tutorials + iVBORw0KGgoAAAANSUhEUgAABkAAAAZACAYAAAAhDI6nAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -23963,12 +23933,6 @@ FAQ - - 181, 22 - - - Buy a coffee - 253, 22 @@ -23987,6 +23951,12 @@ For MattNL (Other Developer) + + 181, 22 + + + Buy a coffee + 181, 22 @@ -25834,18 +25804,11 @@ Administrative Tools - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAAAuSURBVDhPY/j/ - /z9FGMYgFwwbA8gFcANARpEJho0B5AK4ASCjyATDyQAy8X8GAKAaUNpxMP6IAAAAAElFTkSuQmCC - + + 44, 20 - - 63, 20 - - - More + + Help @@ -28544,18 +28507,46 @@ Join Development Discord + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAAAuSURBVDhPY/j/ + /z9FGMYgFwwbA8gFcANARpEJho0B5AK4ASCjyATDyQAy8X8GAKAaUNpxMP6IAAAAAElFTkSuQmCC + + + + 63, 20 + + + More + + + 24, 44 + + + 1016, 24 + + + 2 + + + menuStrip1 + + + menuStrip + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + 298, 17 - - 138, 70 - - - contextMenuMetaTree - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -28599,6 +28590,15 @@ Delete Entry + + 138, 70 + + + contextMenuMetaTree + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + iVBORw0KGgoAAAANSUhEUgAAAbYAAAB7CAYAAAAYCKWuAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -29291,6 +29291,987 @@ Left + + + iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAYAAABNo9TkAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wAAADsABataJCQAA5JlJREFUeF7sfQeYFFX2Pf/9re6uuusaEFHXiJIUEAQkhyGnIecsMIDDkEGCIlHJ + AiKIRAExK6hEJaOgKDkniQYUMGDcZf7nvKrXU9NTPdPdMyDgOd93prqrX913333v1dxTMZMgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg + CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIJwEeD//QG80PDzIRpGAz87qTE98LOXFv9o+PmUHkYLP1vni5HC + z0ZajBR+NtJiJPDb/nwzI+FnPzVmNPzqiJaCIAiCIAjCRQSbpP3F5f/9gbQ+kOlNIL3be+361Rst0/LV + uz7a+tOqw8L7e7R1kcH1ZTT8/IzW13AYbnuCffKzdb4Y7KPXT++69Pj2R9URzPTYzwja+oP9TA3ectH6 + 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 + dDGdfAIAAC6XV96cl96f/Vv0f96k/s24JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS + JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS + JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS + JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS + JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS + JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS + JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS + JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS + JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS + JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS + JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS + JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS + JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS + JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS + JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS + JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS + JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEkaR1dd9d+KresQDLQgcAAAAABJRU5ErkJggg== + + NoControl @@ -29438,135 +30419,9 @@ 0 - - True - None - - labelImageSize - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - editorTab - - - 2 - - - fileEntryCountLabel - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - editorTab - - - 3 - - - PropertiesTabControl - - - MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - editorTab - - - 4 - - - label11 - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - editorTab - - - 5 - - - treeViewMain - - - System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - editorTab - - - 6 - - - pictureBoxImagePreview - - - PckStudio.PictureBoxWithInterpolationMode, PCK-Studio, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null - - - editorTab - - - 8 - - - 4, 38 - - - 5, 50, 5, 7 - - - 1016, 558 - - - 0 - - - editorTab - - - MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - tabControl - - - 1 - - - Fill - - - 20, 30 - - - 0, 0, 0, 0 - - - 1024, 600 - - - 0 - - - tabControl - - - MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - $this - - - 4 - Top, Right @@ -29624,138 +30479,6 @@ Top, Bottom, Right - - MetaTab - - - MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - PropertiesTabControl - - - 0 - - - 413, 277 - - - 596, 282 - - - 11 - - - PropertiesTabControl - - - MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - editorTab - - - 4 - - - metroLabel2 - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - MetaTab - - - 2 - - - treeMeta - - - System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MetaTab - - - 3 - - - entryTypeTextBox - - - MetroFramework.Controls.MetroTextBox, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - MetaTab - - - 4 - - - entryDataTextBox - - - MetroFramework.Controls.MetroTextBox, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - MetaTab - - - 5 - - - buttonEdit - - - MetroFramework.Controls.MetroButton, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - MetaTab - - - 6 - - - metroLabel1 - - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - MetaTab - - - 7 - - - 4, 38 - - - 3, 3, 3, 3 - - - 588, 240 - - - 0 - - - Properties - - - MetaTab - - - MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - PropertiesTabControl - - - 0 - Top, Right @@ -29957,6 +30680,54 @@ 7 + + 4, 38 + + + 3, 3, 3, 3 + + + 588, 240 + + + 0 + + + Properties + + + MetaTab + + + MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + PropertiesTabControl + + + 0 + + + 413, 277 + + + 596, 282 + + + 11 + + + PropertiesTabControl + + + MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 4 + True @@ -30059,6 +30830,57 @@ 8 + + 4, 38 + + + 5, 50, 5, 7 + + + 1016, 558 + + + 0 + + + editorTab + + + MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + tabControl + + + 1 + + + Fill + + + 20, 30 + + + 0, 0, 0, 0 + + + 1024, 600 + + + 0 + + + tabControl + + + MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + $this + + + 4 + Top, Right @@ -32610,6 +33432,9 @@ AP//AAA= + + NoControl + 1064, 660 From 4e3a5ede0f0d8f19778cb5827e435feb807a339a Mon Sep 17 00:00:00 2001 From: MattNL Date: Mon, 3 Oct 2022 01:52:04 -0400 Subject: [PATCH 038/110] Split functions in bink class --- PCK-Studio/Classes/FileTypes/Bink.cs | 156 +++++++++++++-------------- 1 file changed, 75 insertions(+), 81 deletions(-) diff --git a/PCK-Studio/Classes/FileTypes/Bink.cs b/PCK-Studio/Classes/FileTypes/Bink.cs index 018f0ecf..a41c3a6b 100644 --- a/PCK-Studio/Classes/FileTypes/Bink.cs +++ b/PCK-Studio/Classes/FileTypes/Bink.cs @@ -14,86 +14,82 @@ namespace PckStudio.Classes [DllImport("kernel32.dll")] public static extern IntPtr FreeLibrary(IntPtr library); - public unsafe static string Binka(string infile, string outDir = null, bool last = true, string working = null) + public int temp_error_code; + string binka_enc_loc; + string mss32_loc; + string binkawin_loc; + public string working = null; + + public async void WavToBinka(string infile, string outDir, int compression) { - bool flag = working == null; - string text; - string text2; - string path; - if (flag) + var process = Process.Start(new ProcessStartInfo { - working = Path.GetTempPath() + DateTime.Now.Second.ToString(); - text = PckStudio.Classes.Bink.ExtractResource("Resources.binka_encode.exe", working, "binka_encode.exe"); - text2 = PckStudio.Classes.Bink.ExtractResource("Resources.mss32.dll", working, "mss32.dll"); - path = PckStudio.Classes.Bink.ExtractResource("Resources.binkawin.asi", working, "binkawin.asi"); - PckStudio.Classes.Bink.library = PckStudio.Classes.Bink.LoadLibrary(text2); + FileName = binka_enc_loc, + Arguments = $"\"{infile}\" \"{outDir}\" -s -b{compression}", + UseShellExecute = true, + CreateNoWindow = true, + WindowStyle = ProcessWindowStyle.Hidden + }); + process.WaitForExit(); + temp_error_code = process.ExitCode; + } + + public unsafe void BinkaToWav(string infile, string outDir) + { + string[] array2 = createArg(infile, outDir); + byte[] array3 = File.ReadAllBytes(array2[0]); + uint num = 0U; + AIL_set_redist_directory("."); + AIL_startup(); + IntPtr intPtr; + bool flag4 = AIL_decompress_ASI(array3, (uint)array3.Length, ".binka", &intPtr, &num, 0U) == 0; + if (flag4) + { + throw new Exception("AIL ERROR"); + } + byte[] array4 = new byte[num]; + Marshal.Copy(intPtr, array4, 0, array4.Length); + AIL_mem_free_lock(intPtr); + AIL_shutdown(); + File.WriteAllBytes(array2[1], array4); + } + + public void SetUpBinka() + { + if (working == null) + { + working = (Path.GetTempPath() + "PCKStudio").Replace("\\","/"); + Directory.CreateDirectory(working); + binka_enc_loc = ExtractResource("binka_encode.exe", working); + mss32_loc = ExtractResource("mss32.dll", working); + binkawin_loc = ExtractResource("binkawin.asi", working); + library = LoadLibrary(mss32_loc); } else { - text = working + "\\binka_encode.exe"; - text2 = working + "\\mss32.dll"; - path = working + "\\binkawin.asi"; + binka_enc_loc = working + "\\binka_encode.exe"; + mss32_loc = working + "\\mss32.dll"; + binkawin_loc = working + "\\binkawin.asi"; } - bool flag2 = PckStudio.Classes.Bink.getType(infile) == "WAV"; - if (flag2) + } + + public void CleanUpBinka() + { + FreeLibrary(library); + File.Delete(binka_enc_loc); + File.Delete(binkawin_loc); + while (File.Exists(mss32_loc)) { - string[] array = PckStudio.Classes.Bink.createArg(infile, outDir); - Process process = new Process(); - process.StartInfo.FileName = text; - process.StartInfo.Arguments = string.Concat(new string[] + try { - " \"", - array[0], - "\" \"", - array[1], - "\"" - }); - process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; - process.Start(); - process.WaitForExit(); - } - else - { - bool flag3 = PckStudio.Classes.Bink.getType(infile) == "BINKA"; - if (flag3) + File.Delete(mss32_loc); + } + catch { - string[] array2 = PckStudio.Classes.Bink.createArg(infile, outDir); - byte[] array3 = File.ReadAllBytes(array2[0]); - uint num = 0U; - PckStudio.Classes.Bink.AIL_set_redist_directory("."); - PckStudio.Classes.Bink.AIL_startup(); - IntPtr intPtr; - bool flag4 = PckStudio.Classes.Bink.AIL_decompress_ASI(array3, (uint)array3.Length, ".binka", &intPtr, &num, 0U) == 0; - if (flag4) - { - throw new Exception("AIL ERROR"); - } - byte[] array4 = new byte[num]; - Marshal.Copy(intPtr, array4, 0, array4.Length); - PckStudio.Classes.Bink.AIL_mem_free_lock(intPtr); - PckStudio.Classes.Bink.AIL_shutdown(); - File.WriteAllBytes(array2[1], array4); + FreeLibrary(library); } } - if (last) - { - PckStudio.Classes.Bink.FreeLibrary(PckStudio.Classes.Bink.library); - PckStudio.Classes.Bink.FreeLibrary(PckStudio.Classes.Bink.library); - File.Delete(text); - File.Delete(path); - while (File.Exists(text2)) - { - try - { - File.Delete(text2); - } - catch - { - PckStudio.Classes.Bink.FreeLibrary(PckStudio.Classes.Bink.library); - } - } - } - return working; + Directory.Delete(working); } private static string getType(string loc) @@ -122,7 +118,7 @@ namespace PckStudio.Classes string[] array = new string[2]; array[0] = inFile; string[] array2 = array; - string type = PckStudio.Classes.Bink.getType(inFile); + string type = getType(inFile); bool flag = type == "BINKA"; if (flag) { @@ -144,20 +140,18 @@ namespace PckStudio.Classes return array2; } - internal static string ExtractResource(string resource, string path, string filename) + internal static string ExtractResource(string resource, string working) { - Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource); - byte[] array = new byte[(int)manifestResourceStream.Length]; - manifestResourceStream.Read(array, 0, array.Length); - manifestResourceStream.Close(); - bool flag = !Directory.Exists(path); - if (flag) + object ob = Properties.Resources.ResourceManager.GetObject(Path.GetFileNameWithoutExtension(resource)); + byte[] myResBytes = (byte[])ob; + if(File.Exists(Path.Combine(working, resource))) File.Delete(Path.Combine(working, resource)); + using (FileStream fsDst = new FileStream(Path.Combine(working, resource), FileMode.CreateNew, FileAccess.Write)) { - Directory.CreateDirectory(path); + fsDst.Write(myResBytes, 0, myResBytes.Length); + fsDst.Close(); + fsDst.Dispose(); } - path = path + "\\" + filename; - File.WriteAllBytes(path, array); - return path; + return "\"" + working + "/" + resource + "\""; } [DllImport("mss32.dll", EntryPoint = "_AIL_decompress_ASI@24")] From f19ed527f2721fda0e7cef6e85335772d8e87fa5 Mon Sep 17 00:00:00 2001 From: MattNL Date: Mon, 3 Oct 2022 01:52:26 -0400 Subject: [PATCH 039/110] Updated AudioEditor to use functions from Bink class --- .../Forms/Editor/AudioEditor.Designer.cs | 11 +- PCK-Studio/Forms/Editor/AudioEditor.cs | 74 ++----- PCK-Studio/Forms/Editor/AudioEditor.resx | 186 ++++++++++-------- 3 files changed, 123 insertions(+), 148 deletions(-) diff --git a/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs b/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs index 18fadace..e5940968 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs @@ -58,6 +58,7 @@ namespace PckStudio.Forms.Editor this.playOverworldInCreative = new MetroFramework.Controls.MetroCheckBox(); this.compressionUpDown = new System.Windows.Forms.NumericUpDown(); this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); + this.convertToWAVToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.contextMenuStrip1.SuspendLayout(); this.menuStrip.SuspendLayout(); this.contextMenuStrip2.SuspendLayout(); @@ -228,7 +229,8 @@ namespace PckStudio.Forms.Editor this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.addEntryMenuItem, this.removeEntryMenuItem, - this.verifyFileLocationToolStripMenuItem}); + this.verifyFileLocationToolStripMenuItem, + this.convertToWAVToolStripMenuItem}); this.contextMenuStrip2.Name = "contextMenuStrip1"; resources.ApplyResources(this.contextMenuStrip2, "contextMenuStrip2"); // @@ -289,6 +291,12 @@ namespace PckStudio.Forms.Editor this.metroLabel1.Name = "metroLabel1"; this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark; // + // convertToWAVToolStripMenuItem + // + this.convertToWAVToolStripMenuItem.Name = "convertToWAVToolStripMenuItem"; + resources.ApplyResources(this.convertToWAVToolStripMenuItem, "convertToWAVToolStripMenuItem"); + this.convertToWAVToolStripMenuItem.Click += new System.EventHandler(this.convertToWAVToolStripMenuItem_Click); + // // AudioEditor // resources.ApplyResources(this, "$this"); @@ -343,5 +351,6 @@ namespace PckStudio.Forms.Editor private MetroFramework.Controls.MetroLabel metroLabel1; private System.Windows.Forms.ToolStripMenuItem openDataFolderToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem bulkReplaceExistingTracksToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem convertToWAVToolStripMenuItem; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/AudioEditor.cs b/PCK-Studio/Forms/Editor/AudioEditor.cs index ed22a529..428e92ac 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.cs +++ b/PCK-Studio/Forms/Editor/AudioEditor.cs @@ -21,6 +21,7 @@ namespace PckStudio.Forms.Editor { public string defaultType = "yes"; string tempDir = ""; + Classes.Bink BINK = new Classes.Bink(); PCKAudioFile audioFile = null; PCKFile.FileData audioPCK; LOCFile loc; @@ -54,21 +55,10 @@ namespace PckStudio.Forms.Editor public AudioEditor(PCKFile.FileData file, LOCFile locFile, bool isLittleEndian) { InitializeComponent(); - // so the Creative songs aren't combined until after the forms are closed. - // this will prevent potential problems with editing the categories after merging. loc = locFile; - tempDir = Path.Combine(Directory.GetCurrentDirectory(), "temp"); _isLittleEndian = isLittleEndian; - try - { - handleUtilFiles(); - //library = LoadLibrary(Path.Combine(tempDir, "mss32.dll")); - } - catch (IOException ex) - { - MessageBox.Show("Failed to get Binka conversion files", "Exception thrown"); - Close(); - } + + BINK.SetUpBinka(); audioPCK = file; using (var stream = new MemoryStream(file.data)) @@ -111,31 +101,10 @@ namespace PckStudio.Forms.Editor } } - private void handleUtilFiles(bool extractFiles = true) - { - string asiPath = Path.Combine(tempDir, "binkawin.asi"); - string mssPath = Path.Combine(tempDir, "mss32.dll"); - string encoderPath = Path.Combine(tempDir, "binka_encode.exe"); - - // Deletes files so that System.IO exceptions are avoided - if (File.Exists(asiPath)) File.Delete(asiPath); - if (File.Exists(mssPath)) File.Delete(mssPath); - if (File.Exists(encoderPath)) File.Delete(encoderPath); - if (Directory.Exists(tempDir)) Directory.Delete(tempDir); - - if (extractFiles) - { - Directory.CreateDirectory(tempDir); - ExtractResource("binka_encode", encoderPath); - ExtractResource("mss32", mssPath); - ExtractResource("binkawin", asiPath); - } - } - private void AudioEditor_FormClosed(object sender, FormClosedEventArgs e) { //FreeLibrary(library); - handleUtilFiles(false); + BINK.CleanUpBinka(); } private void verifyFileLocationToolStripMenuItem_Click(object sender, EventArgs e) @@ -253,33 +222,23 @@ namespace PckStudio.Forms.Editor else if (user_prompt == DialogResult.No) continue; } } - + if (Path.GetExtension(file) == ".wav") // Convert Wave to BINKA { Cursor.Current = Cursors.WaitCursor; pleaseWait waitDiag = new pleaseWait(); waitDiag.Show(this); - int error_code = 0; await Task.Run(() => { - var process = Process.Start(new ProcessStartInfo - { - FileName = Path.Combine(tempDir, "binka_encode.exe"), - Arguments = $"\"{file}\" \"{new_loc}\" -s -b" + compressionUpDown.Value.ToString(), - UseShellExecute = true, - CreateNoWindow = true, - WindowStyle = ProcessWindowStyle.Hidden - }); - process.Start(); - process.WaitForExit(); + BINK.WavToBinka(file, new_loc, (int)compressionUpDown.Value); }); waitDiag.Close(); waitDiag.Dispose(); Cursor.Current = Cursors.Default; - if (error_code != 0) continue; + if (BINK.temp_error_code != 0) continue; } else if (!duplicate_song) { @@ -492,29 +451,24 @@ namespace PckStudio.Forms.Editor pleaseWait waitDiag = new pleaseWait(); waitDiag.Show(this); - int error_code = 0; await Task.Run(() => { - var process = Process.Start(new ProcessStartInfo - { - FileName = Path.Combine(tempDir, "binka_encode.exe"), - Arguments = $"\"{file}\" \"{new_loc}\" -s -b" + compressionUpDown.Value.ToString(), - UseShellExecute = true, - CreateNoWindow = true, - WindowStyle = ProcessWindowStyle.Hidden - }); - process.Start(); - process.WaitForExit(); + BINK.WavToBinka(file, new_loc, (int)compressionUpDown.Value); }); waitDiag.Close(); waitDiag.Dispose(); Cursor.Current = Cursors.Default; - if (error_code != 0) continue; + if (BINK.temp_error_code != 0) continue; } else if(file_ext == ".binka") File.Copy(file, Path.Combine(parent.GetDataPath(), Path.GetFileName(file))); } } + + private void convertToWAVToolStripMenuItem_Click(object sender, EventArgs e) + { + + } } } diff --git a/PCK-Studio/Forms/Editor/AudioEditor.resx b/PCK-Studio/Forms/Editor/AudioEditor.resx index a35db4c7..6bfb3fae 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.resx +++ b/PCK-Studio/Forms/Editor/AudioEditor.resx @@ -125,6 +125,26 @@ 127, 8 + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xMkMEa+wAAABSSURBVDhP5c0x + DsAgDENRxt7/wmkNSpRGf0CCCZAegxNMM7MlGMp3dIU6dxhKf/QMNxRogeQC8ivw5Vn7C0heJlFA+kL5 + jWAohxRkde4wnGftBS90axNmphIGAAAAAElFTkSuQmCC + + + + 168, 22 + + + Add Category + + + 168, 22 + + + Remove Category + 169, 48 @@ -146,7 +166,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADk - MAAAAk1TRnQBSQFMAgEBCQEAAWgBAAFoAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + MAAAAk1TRnQBSQFMAgEBCQEAAXABAAFwAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA AwABMAMAAQEBAAEgBgABMBIAAzgB/wM1Af8DNQH/AzMB/wMwAf8DLwH/Ay0B/wMtAf8DJAH/AzsB/wM4 Af8DNQH/Ay0B/wMnAf8DNgH/AzIB/8AAAzgB/wN/Af8DeQH/A3kB/wN5Af8DcQH/A3EB/wN5Af8DeQH/ A3EB/wNxAf8DcQH/A3kB/wN5Af8DfwH/AzIB/8AAAzIB/wN2Af8DsAH/A7AB/wOvAf8DrwH/A68B/wOo @@ -384,62 +404,12 @@ 5 - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xMkMEa+wAAABSSURBVDhP5c0x - DsAgDENRxt7/wmkNSpRGf0CCCZAegxNMM7MlGMp3dIU6dxhKf/QMNxRogeQC8ivw5Vn7C0heJlFA+kL5 - jWAohxRkde4wnGftBS90axNmphIGAAAAAElFTkSuQmCC - - - - 168, 22 - - - Add Category - - - 168, 22 - - - Remove Category - 19, 8 False - - 20, 60 - - - 410, 24 - - - 11 - - - menuStrip1 - - - menuStrip - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 7 - - - 37, 20 - - - File - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -451,16 +421,16 @@ - 98, 22 + 180, 22 Save - - 46, 20 + + 37, 20 - - Tools + + File 220, 22 @@ -486,11 +456,11 @@ Bulk Replace Existing Tracks - - 44, 20 + + 46, 20 - - Help + + Tools 243, 22 @@ -522,14 +492,76 @@ BINKA Compression + + 44, 20 + + + Help + + + 20, 60 + + + 410, 24 + + + 11 + + + menuStrip1 + + + menuStrip + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 7 + Top, Bottom, Left, Right 282, 8 + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xMkMEa+wAAABSSURBVDhP5c0x + DsAgDENRxt7/wmkNSpRGf0CCCZAegxNMM7MlGMp3dIU6dxhKf/QMNxRogeQC8ivw5Vn7C0heJlFA+kL5 + jWAohxRkde4wnGftBS90axNmphIGAAAAAElFTkSuQmCC + + + + 180, 22 + + + Add Entry + + + 180, 22 + + + Remove Entry + + + 180, 22 + + + Verify File Location + + + 180, 22 + + + Convert to WAV + - 174, 70 + 181, 114 contextMenuStrip2 @@ -558,32 +590,6 @@ 6 - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xMkMEa+wAAABSSURBVDhP5c0x - DsAgDENRxt7/wmkNSpRGf0CCCZAegxNMM7MlGMp3dIU6dxhKf/QMNxRogeQC8ivw5Vn7C0heJlFA+kL5 - jWAohxRkde4wnGftBS90axNmphIGAAAAAElFTkSuQmCC - - - - 173, 22 - - - Add Entry - - - 173, 22 - - - Remove Entry - - - 173, 22 - - - Verify File Location - True @@ -791,6 +797,12 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + convertToWAVToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + AudioEditor From 003d3bfdf9e3fa087be26d9f640163b4cb3a7115 Mon Sep 17 00:00:00 2001 From: MattNL Date: Mon, 3 Oct 2022 21:19:16 -0400 Subject: [PATCH 040/110] renamed Bink conversion function parameters --- PCK-Studio/Classes/FileTypes/Bink.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PCK-Studio/Classes/FileTypes/Bink.cs b/PCK-Studio/Classes/FileTypes/Bink.cs index a41c3a6b..86c4484e 100644 --- a/PCK-Studio/Classes/FileTypes/Bink.cs +++ b/PCK-Studio/Classes/FileTypes/Bink.cs @@ -20,12 +20,12 @@ namespace PckStudio.Classes string binkawin_loc; public string working = null; - public async void WavToBinka(string infile, string outDir, int compression) + public async void WavToBinka(string infile, string outFile, int compression) { var process = Process.Start(new ProcessStartInfo { FileName = binka_enc_loc, - Arguments = $"\"{infile}\" \"{outDir}\" -s -b{compression}", + Arguments = $"\"{infile}\" \"{outFile}\" -s -b{compression}", UseShellExecute = true, CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden @@ -34,9 +34,9 @@ namespace PckStudio.Classes temp_error_code = process.ExitCode; } - public unsafe void BinkaToWav(string infile, string outDir) + public unsafe void BinkaToWav(string infile, string outFile) { - string[] array2 = createArg(infile, outDir); + string[] array2 = createArg(infile, outFile); byte[] array3 = File.ReadAllBytes(array2[0]); uint num = 0U; AIL_set_redist_directory("."); From a56cb3c73534448b2851fa3daa8e911fe0a1c751 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 13:24:52 -0400 Subject: [PATCH 041/110] Cleaned up some more Bink class code --- PCK-Studio/Classes/FileTypes/Bink.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/PCK-Studio/Classes/FileTypes/Bink.cs b/PCK-Studio/Classes/FileTypes/Bink.cs index 86c4484e..3d25075b 100644 --- a/PCK-Studio/Classes/FileTypes/Bink.cs +++ b/PCK-Studio/Classes/FileTypes/Bink.cs @@ -38,15 +38,14 @@ namespace PckStudio.Classes { string[] array2 = createArg(infile, outFile); byte[] array3 = File.ReadAllBytes(array2[0]); + Console.WriteLine(array3.Length); uint num = 0U; AIL_set_redist_directory("."); AIL_startup(); IntPtr intPtr; - bool flag4 = AIL_decompress_ASI(array3, (uint)array3.Length, ".binka", &intPtr, &num, 0U) == 0; - if (flag4) - { + // crash happens in AIL_decompress_ASI + if (AIL_decompress_ASI(array3, (uint)array3.Length, ".binka", &intPtr, &num, 0U) == 0) throw new Exception("AIL ERROR"); - } byte[] array4 = new byte[num]; Marshal.Copy(intPtr, array4, 0, array4.Length); AIL_mem_free_lock(intPtr); From 94e98478712ce59d1ffd14f880b3a7a8547dff2a Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 13:26:10 -0400 Subject: [PATCH 042/110] Added "functionality" to BinkaToWav function --- PCK-Studio/Forms/Editor/AudioEditor.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/PCK-Studio/Forms/Editor/AudioEditor.cs b/PCK-Studio/Forms/Editor/AudioEditor.cs index 428e92ac..ca958a1b 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.cs +++ b/PCK-Studio/Forms/Editor/AudioEditor.cs @@ -468,7 +468,10 @@ namespace PckStudio.Forms.Editor private void convertToWAVToolStripMenuItem_Click(object sender, EventArgs e) { - + if (treeView2.SelectedNode != null && treeView1.SelectedNode.Tag is PCKAudioFile.AudioCategory) + { + BINK.BinkaToWav(Path.Combine(parent.GetDataPath(), treeView2.SelectedNode.Text + ".binka"), Path.Combine(parent.GetDataPath())); + } } } } From 3fde9895aed874fdd7a3d7425696d6437abf02a1 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 13:26:45 -0400 Subject: [PATCH 043/110] Temporarily hidden BinkaToWav function from context menu --- .../Forms/Editor/AudioEditor.Designer.cs | 11 +---------- PCK-Studio/Forms/Editor/AudioEditor.resx | 18 +++--------------- 2 files changed, 4 insertions(+), 25 deletions(-) diff --git a/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs b/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs index e5940968..18fadace 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs @@ -58,7 +58,6 @@ namespace PckStudio.Forms.Editor this.playOverworldInCreative = new MetroFramework.Controls.MetroCheckBox(); this.compressionUpDown = new System.Windows.Forms.NumericUpDown(); this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); - this.convertToWAVToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.contextMenuStrip1.SuspendLayout(); this.menuStrip.SuspendLayout(); this.contextMenuStrip2.SuspendLayout(); @@ -229,8 +228,7 @@ namespace PckStudio.Forms.Editor this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.addEntryMenuItem, this.removeEntryMenuItem, - this.verifyFileLocationToolStripMenuItem, - this.convertToWAVToolStripMenuItem}); + this.verifyFileLocationToolStripMenuItem}); this.contextMenuStrip2.Name = "contextMenuStrip1"; resources.ApplyResources(this.contextMenuStrip2, "contextMenuStrip2"); // @@ -291,12 +289,6 @@ namespace PckStudio.Forms.Editor this.metroLabel1.Name = "metroLabel1"; this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark; // - // convertToWAVToolStripMenuItem - // - this.convertToWAVToolStripMenuItem.Name = "convertToWAVToolStripMenuItem"; - resources.ApplyResources(this.convertToWAVToolStripMenuItem, "convertToWAVToolStripMenuItem"); - this.convertToWAVToolStripMenuItem.Click += new System.EventHandler(this.convertToWAVToolStripMenuItem_Click); - // // AudioEditor // resources.ApplyResources(this, "$this"); @@ -351,6 +343,5 @@ namespace PckStudio.Forms.Editor private MetroFramework.Controls.MetroLabel metroLabel1; private System.Windows.Forms.ToolStripMenuItem openDataFolderToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem bulkReplaceExistingTracksToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem convertToWAVToolStripMenuItem; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/AudioEditor.resx b/PCK-Studio/Forms/Editor/AudioEditor.resx index 6bfb3fae..909eb320 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.resx +++ b/PCK-Studio/Forms/Editor/AudioEditor.resx @@ -166,7 +166,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADk - MAAAAk1TRnQBSQFMAgEBCQEAAXABAAFwAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + MAAAAk1TRnQBSQFMAgEBCQEAAXgBAAF4AQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA AwABMAMAAQEBAAEgBgABMBIAAzgB/wM1Af8DNQH/AzMB/wMwAf8DLwH/Ay0B/wMtAf8DJAH/AzsB/wM4 Af8DNQH/Ay0B/wMnAf8DNgH/AzIB/8AAAzgB/wN/Af8DeQH/A3kB/wN5Af8DcQH/A3EB/wN5Af8DeQH/ A3EB/wNxAf8DcQH/A3kB/wN5Af8DfwH/AzIB/8AAAzIB/wN2Af8DsAH/A7AB/wOvAf8DrwH/A68B/wOo @@ -421,7 +421,7 @@ - 180, 22 + 98, 22 Save @@ -554,14 +554,8 @@ Verify File Location - - 180, 22 - - - Convert to WAV - - 181, 114 + 181, 92 contextMenuStrip2 @@ -797,12 +791,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - convertToWAVToolStripMenuItem - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - AudioEditor From 0785ae0f0cefb77480b7f88ae06ca6d7e13281a9 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 13:38:00 -0400 Subject: [PATCH 044/110] Changed "Smooth" stone variant names to "Polished" to match in game name --- PCK-Studio/Resources/tileData.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 2f17c8f5..d82e45b3 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -262,11 +262,11 @@ { "hardened_clay": "Terracotta" }, { "noteblock": "Note Block" }, { "stone_andesite": "Andesite" }, - { "stone_andesite_smooth": "Smooth Andesite" }, + { "stone_andesite_smooth": "Polished Andesite" }, { "stone_diorite": "Diorite" }, - { "stone_diorite_smooth": "Smooth Diorite" }, + { "stone_diorite_smooth": "Polished Diorite" }, { "stone_granite": "Granite" }, - { "stone_granite_smooth": "Smooth Granite" }, + { "stone_granite_smooth": "Polished Granite" }, { "potatoes_stage_0": "Potatoes (Stage 1)" }, { "potatoes_stage_1": "Potatoes (Stage 2)" }, { "potatoes_stage_2": "Potatoes (Stage 3)" }, From fbf727adf0c903d5f5d64c052d6a9e0fb93f7ee5 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 13:41:19 -0400 Subject: [PATCH 045/110] Changed ore "Block" names to "Block of" ore names to match in game names --- PCK-Studio/Resources/tileData.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index d82e45b3..6224a9fd 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -24,10 +24,10 @@ { "gravel": "Gravel" }, { "log_oak": "Oak Log (Side)" }, { "log_oak_top": "Oak Log (Top)" }, - { "iron_block": "Iron Block" }, - { "gold_block": "Gold Block" }, - { "diamond_block": "Diamond Block" }, - { "emerald_block": "Emerald Block" }, + { "iron_block": "Block of Iron" }, + { "gold_block": "Block of Gold" }, + { "diamond_block": "Block of Diamond" }, + { "emerald_block": "Block of Emerald" }, { "redstone_block": "Redstone Block" }, { "dropper_front_horizontal": "Dropper (Front)" }, { "mushroom_red": "Red Mushroom" }, @@ -221,7 +221,7 @@ { "anvil_top_damaged_1": "Anvil (Slightly Damaged) (Top)" }, { "quartz_block_chiseled_top": "Chiseled Quartz Block (Top)" }, { "quartz_block_lines_top": "Pillar Quartz Block (Top)" }, - { "quartz_block_top": "Quartz Block (Top)" }, + { "quartz_block_top": "Block of Quartz (Top)" }, { "hopper_outside": "Hopper (Side)" }, { "detectorRail_on": "Detector Rail (On)" }, { "": "" }, @@ -237,7 +237,7 @@ { "anvil_top_damaged_2": "Anvil (Very Damaged) (Top)" }, { "quartz_block_chiseled": "Chiseled Quartz Block (Side)" }, { "quartz_block_lines": "Pillar Quartz Block (Side)" }, - { "quartz_block_side": "Quartz Block (Side)" }, + { "quartz_block_side": "Block of Quartz (Side)" }, { "hopper_inside": "Hopper (Inside)" }, { "lava": "Lava" }, { "lava_flow": "Flowing Lava" }, @@ -258,7 +258,7 @@ { "hay_block_top": "Hay Block (Top)" }, { "": "" }, { "": "" }, - { "coal_block": "Coal Block" }, + { "coal_block": "Block of Coal" }, { "hardened_clay": "Terracotta" }, { "noteblock": "Note Block" }, { "stone_andesite": "Andesite" }, From 63056665e8f88f4b142d08adba256868de927114 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 13:43:08 -0400 Subject: [PATCH 046/110] Changed "Quartz Ore" to "Nether Quartz Ore" to match in game name --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 6224a9fd..c6567fbe 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -193,7 +193,7 @@ { "comparator_on": "Redstone Comparator (On)" }, { "rail_activator": "Activator Rail" }, { "rail_activator_powered": "Activator Rail (On)" }, - { "quartz_ore": "Quartz Ore" }, + { "quartz_ore": "Nether Quartz Ore" }, { "sandstone_side": "Sandstone (Side)" }, { "wool_colored_purple": "Purple Wool" }, { "wool_colored_magenta": "Magenta Wool" }, From 2d76b41cfb3770697b4002cf4f16c546d1d2089a Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 13:50:59 -0400 Subject: [PATCH 047/110] Changed "Log" names to "Wood" to match in game names --- PCK-Studio/Resources/tileData.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index c6567fbe..93237e02 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -22,8 +22,8 @@ { "bedrock": "Bedrock" }, { "sand": "Sand" }, { "gravel": "Gravel" }, - { "log_oak": "Oak Log (Side)" }, - { "log_oak_top": "Oak Log (Top)" }, + { "log_oak": "Oak Wood (Side)" }, + { "log_oak_top": "Oak Wood (Top)" }, { "iron_block": "Block of Iron" }, { "gold_block": "Block of Gold" }, { "diamond_block": "Block of Diamond" }, @@ -118,8 +118,8 @@ { "wool_colored_black": "Black Wool" }, { "wool_colored_gray": "Gray Wool" }, { "redstone_torch_off": "Redstone Torch (Off)" }, - { "log_spruce": "Spruce Log (Side)" }, - { "log_birch": "Birch Log (Side)" }, + { "log_spruce": "Spruce Wood (Side)" }, + { "log_birch": "Birch Wood (Side)" }, { "pumpkin_side": "Pumpkin (Side)" }, { "pumpkin_face_off": "Carved Pumpkin (Front)" }, { "pumpkin_face_on": "Jack o'Lantern (Front)" }, @@ -155,7 +155,7 @@ { "ender_chest_top": "Ender Chest (Break Particles)" }, { "turtle_egg_hatch_1": "Turtle Egg (Stage 2)" }, { "turtle_egg_hatch_2": "Turtle Egg (Stage 3)" }, - { "log_jungle": "Jungle Log (Side)" }, + { "log_jungle": "Jungle Wood (Side)" }, { "cauldron_side": "Cauldron (Side)" }, { "cauldron_bottom": "Cauldron (Bottom)" }, { "brewing_stand_base": "Brewing Stand (Base)" }, @@ -271,9 +271,9 @@ { "potatoes_stage_1": "Potatoes (Stage 2)" }, { "potatoes_stage_2": "Potatoes (Stage 3)" }, { "potatoes_stage_3": "Potatoes (Stage 4)" }, - { "log_spruce_top": "Spruce Log (Top)" }, - { "log_jungle_top": "Jungle Log (Top)" }, - { "log_birch_top": "Birch Log (Top)" }, + { "log_spruce_top": "Spruce Wood (Top)" }, + { "log_jungle_top": "Jungle Wood (Top)" }, + { "log_birch_top": "Birch Wood (Top)" }, { "hardened_clay_stained_black": "Black Terracotta" }, { "hardened_clay_stained_blue": "Blue Terracotta" }, { "hardened_clay_stained_brown": "Brown Terracotta" }, @@ -330,8 +330,8 @@ { "flower_tulip_orange": "Orange Tulip" }, { "double_plant_sunflower_top": "Sunflower (Top)" }, { "double_plant_sunflower_front": "Sunflower (Front)" }, - { "log_acacia": "Acacia Log (Side)" }, - { "log_acacia_top": "Acacia Log (Top)" }, + { "log_acacia": "Acacia Wood (Side)" }, + { "log_acacia_top": "Acacia Wood (Top)" }, { "planks_acacia": "Acacia Planks" }, { "leaves_acacia": "Acacia Leaves" }, { "leaves_acacia_fast": "Acacia Leaves (Opaque)" }, @@ -346,8 +346,8 @@ { "flower_tulip_pink": "Pink Tulip" }, { "double_plant_sunflower_bottom": "Sunflower (Bottom)" }, { "double_plant_sunflower_back": "Sunflower (Back)" }, - { "log_big_oak": "Dark Oak Log (Side)" }, - { "log_big_oak_top": "Dark Oak Log (Top)" }, + { "log_big_oak": "Dark Oak Wood (Side)" }, + { "log_big_oak_top": "Dark Oak Wood (Top)" }, { "planks_big_oak": "Dark Oak Planks" }, { "leaves_big_oak": "Dark Oak Leaves" }, { "leaves_big_oak_fast": "Dark Oak Leaves (Opaque)" }, From 14d3752154dae0706ea1c7d6fabece2882ca71d1 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 13:53:33 -0400 Subject: [PATCH 048/110] Tweaked "Grass Block (Snow)" name to "(Snowy)" so it's easier to find --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 93237e02..f3e46eb8 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -70,7 +70,7 @@ { "mob_spawner": "Monster Spawner" }, { "snow": "Snow" }, { "ice": "Ice" }, - { "snow_side": "Grass Block (Snow) (Side)" }, + { "snow_side": "Grass Block (Snowy) (Side)" }, { "cactus_top": "Cactus (Top)" }, { "cactus_side": "Cactus (Side)" }, { "cactus_bottom": "Cactus (Bottom)" }, From 427bbb09bf8ca0b405a41849150fc80a7ae1d5f8 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 13:57:51 -0400 Subject: [PATCH 049/110] Changed "End Bricks" to "End Stone Bricks" to match in game name --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index f3e46eb8..c44dacd7 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -378,7 +378,7 @@ { "chorus_flower": "Chorus Flower" }, { "chorus_flower_dead": "Chorus Flower (Dead)" }, { "chorus_flower_plant": "Chorus Plant" }, - { "end_bricks": "End Bricks" }, + { "end_bricks": "End Stone Bricks" }, { "grass_path_side": "Grass Path (Side)" }, { "grass_path_top": "Grass Path (Top)" }, { "barrier": "Barrier" }, From c556dd6770c9bc335d1a85be0b61c80e30d73506 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 14:04:19 -0400 Subject: [PATCH 050/110] Corrected "Dark Door" typo to "Dark Oak Door" --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index c44dacd7..5c715594 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -388,7 +388,7 @@ { "iron_trapdoor": "Iron Trapdoor" }, { "door_acacia_lower": "Acacia Door (Lower)" }, { "door_birch_lower": "Birch Door (Lower)" }, - { "door_dark_oak_lower": "Dark Door (Lower)" }, + { "door_dark_oak_lower": "Dark Oak Door (Lower)" }, { "door_jungle_lower": "Jungle Door (Lower)" }, { "door_spruce_lower": "Spruce Door (Lower)" }, { "purpur_block": "Purpur Block" }, From 5ba3a770c070b6c1d5bb2d0d07ba9d7632f1c347 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 14:07:05 -0400 Subject: [PATCH 051/110] Changed "Sponge (Wet)" to "Wet Sponge" to match in game name --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 5c715594..aca220b8 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -142,7 +142,7 @@ { "melon_top": "Melon (Top)" }, { "cauldron_top": "Cauldron (Top)" }, { "cauldron_inner": "Cauldron (Inside)" }, - { "sponge_wet": "Sponge (Wet)" }, + { "sponge_wet": "Wet Sponge" }, { "mushroom_block_skin_stem": "Mushroom Block (Stem)" }, { "mushroom_block_inside": "Mushroom Block (Inside)" }, { "vine": "Vine" }, From 6b65f0b55a72babac70d4ce8a96dbc551433ee70 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 14:08:37 -0400 Subject: [PATCH 052/110] Removed "(Front)" from "Carved Pumpkin (Front)" to match in game name --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index aca220b8..aeac0c7f 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -121,7 +121,7 @@ { "log_spruce": "Spruce Wood (Side)" }, { "log_birch": "Birch Wood (Side)" }, { "pumpkin_side": "Pumpkin (Side)" }, - { "pumpkin_face_off": "Carved Pumpkin (Front)" }, + { "pumpkin_face_off": "Carved Pumpkin" }, { "pumpkin_face_on": "Jack o'Lantern (Front)" }, { "cake_top": "Cake (Top)" }, { "cake_side": "Cake (Side)" }, From 36b511156582a98924047a518565f4450ab73dc4 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 14:10:42 -0400 Subject: [PATCH 053/110] Changed "Jack o'Lantern" to "Jack-O-Lantern" to match in game name --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index aeac0c7f..f18a8874 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -122,7 +122,7 @@ { "log_birch": "Birch Wood (Side)" }, { "pumpkin_side": "Pumpkin (Side)" }, { "pumpkin_face_off": "Carved Pumpkin" }, - { "pumpkin_face_on": "Jack o'Lantern (Front)" }, + { "pumpkin_face_on": "Jack-O-Lantern" }, { "cake_top": "Cake (Top)" }, { "cake_side": "Cake (Side)" }, { "cake_inner": "Cake (Inside)" }, From 6dcaf93e65215dccc1f106a0777d990b15677c0e Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 14:17:44 -0400 Subject: [PATCH 054/110] Changed "Jungle Sapling" to "Jungle Tree Sapling" to match in game name --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index f18a8874..20e89184 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -32,7 +32,7 @@ { "dropper_front_horizontal": "Dropper (Front)" }, { "mushroom_red": "Red Mushroom" }, { "mushroom_brown": "Brown Mushroom" }, - { "sapling_jungle": "Jungle Sapling" }, + { "sapling_jungle": "Jungle Tree Sapling" }, { "fire_0": "Fire (Layer 1)" }, { "gold_ore": "Gold Ore" }, { "iron_ore": "Iron Ore" }, From 00f27c18c99a99411e9235aa087066f4f5dc5a71 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 14:29:23 -0400 Subject: [PATCH 055/110] Changed "Vine" to "Vines" to match in game name --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 20e89184..18eed314 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -145,7 +145,7 @@ { "sponge_wet": "Wet Sponge" }, { "mushroom_block_skin_stem": "Mushroom Block (Stem)" }, { "mushroom_block_inside": "Mushroom Block (Inside)" }, - { "vine": "Vine" }, + { "vine": "Vines" }, { "lapis_block": "Lapis Lazuli Block" }, { "wool_colored_green": "Green Wool" }, { "wool_colored_lime": "Lime Wool" }, From 1cfba9a8f90e41c4503f9e025d6b6b045519be44 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 14:46:14 -0400 Subject: [PATCH 056/110] Fixed AudioEditor crash and removed unused function --- PCK-Studio/Classes/FileTypes/Bink.cs | 1 - PCK-Studio/Forms/Editor/AudioEditor.cs | 18 ++---------------- 2 files changed, 2 insertions(+), 17 deletions(-) diff --git a/PCK-Studio/Classes/FileTypes/Bink.cs b/PCK-Studio/Classes/FileTypes/Bink.cs index 3d25075b..db79fafa 100644 --- a/PCK-Studio/Classes/FileTypes/Bink.cs +++ b/PCK-Studio/Classes/FileTypes/Bink.cs @@ -74,7 +74,6 @@ namespace PckStudio.Classes public void CleanUpBinka() { - FreeLibrary(library); File.Delete(binka_enc_loc); File.Delete(binkawin_loc); while (File.Exists(mss32_loc)) diff --git a/PCK-Studio/Forms/Editor/AudioEditor.cs b/PCK-Studio/Forms/Editor/AudioEditor.cs index ca958a1b..c8956766 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.cs +++ b/PCK-Studio/Forms/Editor/AudioEditor.cs @@ -87,24 +87,10 @@ namespace PckStudio.Forms.Editor playOverworldInCreative.Enabled = audioFile.HasCategory(PCKAudioFile.AudioCategory.EAudioType.Creative); } - // https://stackoverflow.com/a/25064568 by Alik Khilazhev -MattNL - private void ExtractResource(string resName, string fName) - { - object ob = Properties.Resources.ResourceManager.GetObject(resName); - byte[] myResBytes = (byte[])ob; - using (FileStream fsDst = new FileStream(fName, FileMode.CreateNew, FileAccess.Write)) - { - byte[] bytes = myResBytes; - fsDst.Write(bytes, 0, bytes.Length); - fsDst.Close(); - fsDst.Dispose(); - } - } - private void AudioEditor_FormClosed(object sender, FormClosedEventArgs e) { - //FreeLibrary(library); - BINK.CleanUpBinka(); + // Clean up is throwing an error of some kind? FreeLibrary maybe?? + //BINK.CleanUpBinka(); } private void verifyFileLocationToolStripMenuItem_Click(object sender, EventArgs e) From e12e79506b70cea99bda2555aabf78f92d391727 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 14:47:25 -0400 Subject: [PATCH 057/110] Added "Shrub" to "Dead Bush" name to help find it --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 18eed314..023d0ea7 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -57,7 +57,7 @@ { "leaves": "Oak Leaves" }, { "leaves_opaque": "Oak Leaves (Opaque)" }, { "stonebrick": "Stone Bricks" }, - { "deadbush": "Dead Bush" }, + { "deadbush": "Dead Bush/Shrub" }, { "fern": "Fern" }, { "daylight_detector_top": "Daylight Sensor (Top)" }, { "daylight_detector_side": "Daylight Sensor (Side)" }, From a5915a4beb6ddddaadd966b4c9a16f7fa6c843ae Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 14:53:14 -0400 Subject: [PATCH 058/110] Changed Mushroom names to match in game names --- PCK-Studio/Resources/tileData.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 023d0ea7..056d6d9c 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -30,8 +30,8 @@ { "emerald_block": "Block of Emerald" }, { "redstone_block": "Redstone Block" }, { "dropper_front_horizontal": "Dropper (Front)" }, - { "mushroom_red": "Red Mushroom" }, - { "mushroom_brown": "Brown Mushroom" }, + { "mushroom_red": "Mushroom (Red)" }, + { "mushroom_brown": "Mushroom (Brown)" }, { "sapling_jungle": "Jungle Tree Sapling" }, { "fire_0": "Fire (Layer 1)" }, { "gold_ore": "Gold Ore" }, From e94704d0c7978607af03767c6996470062000113 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 14:56:08 -0400 Subject: [PATCH 059/110] Changed "Hay Block" to "Hay Bale" to match in game name --- PCK-Studio/Resources/tileData.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 056d6d9c..2e4c3200 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -252,10 +252,10 @@ { "destroy_7": "Destroy (Stage 8)" }, { "destroy_8": "Destroy (Stage 9)" }, { "destroy_9": "Destroy (Stage 10)" }, - { "hay_block_side": "Hay Block (Side)" }, + { "hay_block_side": "Hay Bale (Side)" }, { "quartz_block_bottom": "Quartz Block (Bottom)" }, { "hopper_top": "Hopper (Top)" }, - { "hay_block_top": "Hay Block (Top)" }, + { "hay_block_top": "Hay Bale (Top)" }, { "": "" }, { "": "" }, { "coal_block": "Block of Coal" }, From 73af6318f1e3011226767ffac2845dce223f022d Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 15:00:19 -0400 Subject: [PATCH 060/110] Changed "Mushroom Block" names to "Mushroom (<> Block)" to match in game names --- PCK-Studio/Resources/tileData.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 2e4c3200..3bf10d5a 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -127,8 +127,8 @@ { "cake_side": "Cake (Side)" }, { "cake_inner": "Cake (Inside)" }, { "cake_bottom": "Cake (Bottom)" }, - { "mushroom_block_skin_red": "Mushroom Block (Red)" }, - { "mushroom_block_skin_brown": "Mushroom Block (Brown)" }, + { "mushroom_block_skin_red": "Mushroom (Red Block)" }, + { "mushroom_block_skin_brown": "Mushroom (Brown Block)" }, { "stem_bent": "Stem (Attached)" }, { "rail_normal": "Rail" }, { "wool_colored_red": "Red Wool" }, @@ -143,8 +143,8 @@ { "cauldron_top": "Cauldron (Top)" }, { "cauldron_inner": "Cauldron (Inside)" }, { "sponge_wet": "Wet Sponge" }, - { "mushroom_block_skin_stem": "Mushroom Block (Stem)" }, - { "mushroom_block_inside": "Mushroom Block (Inside)" }, + { "mushroom_block_skin_stem": "Mushroom (Stem Block)" }, + { "mushroom_block_inside": "Mushroom (Inside Block)" }, { "vine": "Vines" }, { "lapis_block": "Lapis Lazuli Block" }, { "wool_colored_green": "Green Wool" }, From 5d25cadea1a902556b6a185d383d489f5c71d656 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 15:39:14 -0400 Subject: [PATCH 061/110] Removed "Plant" from "Kelp Plant (Bottom)" to match in game name --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 3bf10d5a..45d8c1fd 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -514,7 +514,7 @@ { "coral_fan_yellow": "Horn Coral Fan" }, { "coral_layered_top_red": "Fire Coral (Overlay)" }, { "coral_layered_top_yellow": "Horn Coral (Overlay)" }, - { "kelp_a": "Kelp Plant (Bottom)" }, + { "kelp_a": "Kelp (Bottom)" }, { "": "" }, { "": "" }, { "": "" }, From 5cf3542e8b54d06d849eb65356b3cc64fabfd1e4 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 15:43:49 -0400 Subject: [PATCH 062/110] Fixed "Dead Coral Fan" names to match in game names --- PCK-Studio/Resources/tileData.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 45d8c1fd..558be9ec 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -523,11 +523,11 @@ { "": "" }, { "": "" }, { "seagrass": "Seagrass" }, - { "coral_fan_blue_dead": "Tube Coral Fan (Dead)" }, - { "coral_fan_purple_dead": "Bubble Coral Fan (Dead)" }, - { "coral_fan_pink_dead": "Brain Coral Fan (Dead)" }, - { "coral_fan_red_dead": "Red Coral Fan (Dead)" }, - { "coral_fan_yellow_dead": "Horn Coral Fan (Dead)" }, + { "coral_fan_blue_dead": "Dead Tube Coral Fan" }, + { "coral_fan_purple_dead": "Dead Bubble Coral Fan" }, + { "coral_fan_pink_dead": "Dead Brain Coral Fan" }, + { "coral_fan_red_dead": "Dead Fire Coral Fan" }, + { "coral_fan_yellow_dead": "Dead Horn Coral Fan" }, { "": "" }, { "spruce_trapdoor": "Spruce Trapdoor" }, { "stripped_log_oak": "Stripped Oak Log (Side)" }, From f99d3d6ef2ed0dcb5d148b212663d936825d044e Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 15:48:01 -0400 Subject: [PATCH 063/110] Fixed Dead Coral Blocks not saying "Dead" or "Block" --- PCK-Studio/Resources/tileData.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 558be9ec..a9cb134e 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -502,11 +502,11 @@ { "dried_kelp_side": "Dried Kelp Block (Side)" }, { "seagrass_carried": "Seagrass (Item)" }, { "seagrass_doubletall_bottom": "Double Tall Seagrass (Bottom)" }, - { "coral_blue_dead": "Tube Coral" }, - { "coral_purple_dead": "Bubble Coral" }, - { "coral_pink_dead": "Brain Coral" }, - { "coral_red_dead": "Fire Coral" }, - { "coral_yellow_dead": "Horn Coral" }, + { "coral_blue_dead": "Dead Tube Coral Block" }, + { "coral_purple_dead": "Dead Bubble Coral Block" }, + { "coral_pink_dead": "Dead Brain Coral Block" }, + { "coral_red_dead": "Dead Fire Coral Block" }, + { "coral_yellow_dead": "Dead Horn Coral Block" }, { "coral_fan_blue": "Tube Coral Fan" }, { "coral_fan_purple": "Bubble Coral Fan" }, { "coral_fan_pink": "Brain Coral Fan" }, From 596836a84f2edd8410de100a501d24d553363c57 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 15:52:07 -0400 Subject: [PATCH 064/110] Changed "Boat" to "Oak Boat" to match in game name --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index a9cb134e..e20dc8cf 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -684,7 +684,7 @@ { "bow_pull_2": "Bow (Pulling Stage 3)" }, { "potatoPoisonous": "Poisonous Potato" }, { "minecart": "Minecart" }, - { "boat": "Boat" }, + { "boat": "Oak Boat" }, { "speckledMelon": "Speckled Melon" }, { "fermentedSpiderEye": "Fermented Spider Eye" }, { "spiderEye": "Spider Eye" }, From 89e52e9c84657d5f25a561cf4a990c08cd0386c9 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 15:55:04 -0400 Subject: [PATCH 065/110] Added Dispenser/Dropper/Furnace Side and Top names to show that they share a texture --- PCK-Studio/Resources/tileData.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index e20dc8cf..9a9d609c 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -47,7 +47,7 @@ { "dropper_front_vertical": "Dropper (Vertical) (Front)" }, { "workbench_top": "Crafting Table (Top)" }, { "furnace_front": "Furnace (Front)" }, - { "furnace_side": "Furnace (Side)" }, + { "furnace_side": "Furnace/Dispenser/Dropper (Side)" }, { "dispenser_front": "Dispenser (Front)" }, { "fire_1": "Fire (Layer 2)" }, { "sponge": "Sponge" }, @@ -64,7 +64,7 @@ { "workbench_side": "Crafting Table (Side)" }, { "workbench_front": "Crafting Table (Front)" }, { "furnace_front_lit": "Furnace (Lit) (Front)" }, - { "furnace_top": "Furnace (Top)" }, + { "furnace_top": "Furnace/Dispenser/Dropper (Top)" }, { "sapling_spruce": "Spruce Sapling" }, { "wool_colored_white": "White Wool" }, { "mob_spawner": "Monster Spawner" }, From aad8bccdeaf3fab8c463db447714cdb22351dad1 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 15:59:59 -0400 Subject: [PATCH 066/110] Fix for "Stick Piston" instead of "Sticky Piston" --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 9a9d609c..165c9cf6 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -108,7 +108,7 @@ { "netherrack": "Netherrack" }, { "soul_sand": "Soul Sand" }, { "glowstone": "Glowstone" }, - { "piston_top_sticky": "Stick Piston (Top)" }, + { "piston_top_sticky": "Sticky Piston (Top)" }, { "piston_top": "Piston (Top)" }, { "piston_side": "Piston (Side)" }, { "piston_bottom": "Piston (Bottom)" }, From 7df8814ba4958fe3a1b9a002b5f64b2d70703330 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 16:16:28 -0400 Subject: [PATCH 067/110] Changed "Redstone Block" to "Block of Redstone" to match in game name --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 165c9cf6..fe6bb423 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -28,7 +28,7 @@ { "gold_block": "Block of Gold" }, { "diamond_block": "Block of Diamond" }, { "emerald_block": "Block of Emerald" }, - { "redstone_block": "Redstone Block" }, + { "redstone_block": "Block of Redstone" }, { "dropper_front_horizontal": "Dropper (Front)" }, { "mushroom_red": "Mushroom (Red)" }, { "mushroom_brown": "Mushroom (Brown)" }, From 4bd9c2806133d1b3782770cb37008bb6281a8994 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 16:35:59 -0400 Subject: [PATCH 068/110] Added "and Bottom" to "Observer (Top)" to show that they share a texture --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index fe6bb423..604c2e81 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -426,7 +426,7 @@ { "observer_side": "Observer (Side)" }, { "observer_back": "Observer (Back)" }, { "observer_back_lit": "Observer (On) (Back)" }, - { "observer_top": "Observer (Top)" }, + { "observer_top": "Observer (Top and Bottom)" }, { "goldRing": "Gold Score Ring" }, { "emeraldRing": "Emerald Score Ring" }, { "structure_block": "Structure Block" }, From 5435ea2c73430d79c47b31c77c0854abd3e4cf5a Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 17:01:18 -0400 Subject: [PATCH 069/110] Changed "Chorus Fruit (Popped)" to "Popped Chorus Fruit" to match in game name --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 604c2e81..b253758b 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -611,7 +611,7 @@ { "map": "Map" }, { "seeds_pumpkin": "Pumpkin Seeds" }, { "seeds_melon": "Melon Seeds" }, - { "chorus_fruit_popped": "Chorus Fruit (Popped)" }, + { "chorus_fruit_popped": "Popped Chorus Fruit" }, { "swordWood": "Wooden Sword" }, { "swordStone": "Stone Sword" }, { "swordIron": "Iron Sword" }, From 283f3246af9a909370aac0f4de1dbaa1efac9434 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 17:03:41 -0400 Subject: [PATCH 070/110] Fixed "Cocoa Beans" incorrectly displayed as "Brown Dye" --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index b253758b..051cabfe 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -674,7 +674,7 @@ { "ghastTear": "Ghast Tear" }, { "goldNugget": "Gold Nugget" }, { "netherStalkSeeds": "Nether Wart" }, - { "dyePowder_brown": "Brown Dye" }, + { "dyePowder_brown": "Cocoa Beans" }, { "dyePowder_yellow": "Yellow Dye" }, { "hoeWood": "Wooden Hoe" }, { "hoeStone": "Stone Hoe" }, From d3ecbdd78352bccad34bcd494e457152f07e4c53 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 17:04:27 -0400 Subject: [PATCH 071/110] Fixed "Dandelion Yellow" incorrectly displayed as "Yellow Dye" --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 051cabfe..3b12eef6 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -675,7 +675,7 @@ { "goldNugget": "Gold Nugget" }, { "netherStalkSeeds": "Nether Wart" }, { "dyePowder_brown": "Cocoa Beans" }, - { "dyePowder_yellow": "Yellow Dye" }, + { "dyePowder_yellow": "Dandelion Yellow" }, { "hoeWood": "Wooden Hoe" }, { "hoeStone": "Stone Hoe" }, { "hoeIron": "Iron Hoe" }, From 4fff37ad1b644500c57cfe85705a3bc6b5f6fd8f Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 17:05:05 -0400 Subject: [PATCH 072/110] Fixed "Bone Meal" incorrectly displayed as "White Dye" --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 3b12eef6..7dbc1a58 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -739,7 +739,7 @@ { "writtenBook": "Written Book" }, { "flowerPot": "Flower Pot" }, { "dyePowder_silver": "Light Gray Dye" }, - { "dyePowder_white": "White Dye" }, + { "dyePowder_white": "Bone Meal" }, { "bootsCloth_overlay": "Leather Boots (Overlay)" }, { "beetroot": "Beetroot" }, { "beetroot_seeds": "Beetroot Seeds" }, From aae2e2efdea280a14c6fbd501601b74262df953e Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 17:07:37 -0400 Subject: [PATCH 073/110] Changed "Melon" to "Melon Slice" to match in game name --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 7dbc1a58..803834d2 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -657,7 +657,7 @@ { "beefCooked": "Steak" }, { "enderPearl": "Ender Pearl" }, { "blazeRod": "Blaze Rod" }, - { "melon": "Melon" }, + { "melon": "Melon Slice" }, { "dyePowder_green": "Cactus Green" }, { "dyePowder_lime": "Lime Dye" }, { "hatchetWood": "Wooden Axe" }, From 8d6cc180eb18afa08f3345aa7cf3428450026a59 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 17:09:29 -0400 Subject: [PATCH 074/110] Fixed "Tropical Fish" incorrectly displaying as "Clownfish" --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 803834d2..0e9a5069 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -714,7 +714,7 @@ { "name_tag": "Name Tag" }, { "lead": "Lead" }, { "netherbrick": "Nether Brick" }, - { "fish_clownfish_raw": "Clownfish" }, + { "fish_clownfish_raw": "Tropical Fish" }, { "minecart_furnace": "Minecart with Furnace" }, { "charcoal": "Charcoal" }, { "monsterPlacer_overlay": "Spawn Egg (Overlay)" }, From 0e75b127dcd7c40aa10d12c8c8c2ed5a84d7af62 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 17:14:32 -0400 Subject: [PATCH 075/110] Fixed Incorrect Leather Armor names to match in game names --- PCK-Studio/Resources/tileData.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 0e9a5069..c6b32951 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -548,7 +548,7 @@ { "jungle_trapdoor": "Jungle Trapdoor" } ], "items": [ - { "helmetCloth": "Leather Helmet" }, + { "helmetCloth": "Leather Cap" }, { "helmetChain": "Chain Helmet" }, { "helmetIron": "Iron Helmet" }, { "helmetDiamond": "Diamond Helmet" }, @@ -564,7 +564,7 @@ { "sugar": "Sugar" }, { "snowball": "Snowball" }, { "elytra": "Elytra" }, - { "chestplateCloth": "Leather Chestplate" }, + { "chestplateCloth": "Leather Tunic" }, { "chestplateChain": "Chain Chestplate" }, { "chestplateIron": "Iron Chestplate" }, { "chestplateDiamond": "Diamond Chestplate" }, @@ -580,7 +580,7 @@ { "cake": "Cake" }, { "slimeball": "Slimeball" }, { "broken_elytra": "Elytra (Broken)" }, - { "leggingsCloth": "Leather Leggings" }, + { "leggingsCloth": "Leather Pants" }, { "leggingsChain": "Chain Leggings" }, { "leggingsIron": "Iron Leggings" }, { "leggingsDiamond": "Diamond Leggings" }, From 019def923d9eb186fdb63c68df661f8f05a15fb1 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 17:16:32 -0400 Subject: [PATCH 076/110] Fixed Incorrect Leather Armor Overlay names to match in game names --- PCK-Studio/Resources/tileData.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index c6b32951..c3257ab9 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -692,7 +692,7 @@ { "potion_contents": "Potion (Overlay)" }, { "dyePowder_blue": "Lapis Lazuli" }, { "dyePowder_light_blue": "Light Blue Dye" }, - { "helmetCloth_overlay": "Leather Helmet (Overlay)" }, + { "helmetCloth_overlay": "Leather Cap (Overlay)" }, { "spectral_arrow": "Spectral Arrow" }, { "iron_horse_armor": "Iron Horse Armor" }, { "diamond_horse_armor": "Diamond Horse Armor" }, @@ -708,7 +708,7 @@ { "blazePowder": "Blaze Powder" }, { "dyePowder_purple": "Purple Dye" }, { "dyePowder_magenta": "Magenta Dye" }, - { "chestplateCloth_overlay": "Leather Chestplate (Overlay)" }, + { "chestplateCloth_overlay": "Leather Tunic (Overlay)" }, { "tipped_arrow_base": "Tipped Arrow" }, { "dragon_breath": "Dragon's Breath" }, { "name_tag": "Name Tag" }, @@ -724,7 +724,7 @@ { "magmaCream": "Magma Cream" }, { "dyePowder_cyan": "Cyan Dye" }, { "dyePowder_orange": "Orange Dye" }, - { "leggingsCloth_overlay": "Leather Leggings (Overlay)" }, + { "leggingsCloth_overlay": "Leather Pants (Overlay)" }, { "tipped_arrow_head": "Tipped Arrow (Overlay)" }, { "potion_bottle_lingering": "Lingering Potion" }, { "": "" }, From 5b1bbc9f2c57889d4e3be48e4351f878755f5b6d Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 17:19:02 -0400 Subject: [PATCH 077/110] Fixed "Fire Charge" displaying as "Fireball" --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index c3257ab9..f15f6019 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -594,7 +594,7 @@ { "doorWood": "Oak Door" }, { "doorIron": "Iron Door" }, { "bed": "Bed" }, - { "fireball": "Fireball" }, + { "fireball": "Fire Charge" }, { "chorus_fruit": "Chorus Fruit" }, { "bootsCloth": "Leather Boots" }, { "bootsChain": "Chain Boots" }, From 14d750f6549e5e5571d7634c29784ffdc87d3cc5 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 17:21:12 -0400 Subject: [PATCH 078/110] Fixed "Tropical Helmet" incorrectly displaying as "Turtle Shell" --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index f15f6019..ae1df78b 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -816,7 +816,7 @@ { "sea_pickle": "Sea Pickle" }, { "nautilus": "Nautilus Shell" }, { "nautilus_core": "Heart of the Sea" }, - { "turtle_helmet": "Turtle Helmet" }, + { "turtle_helmet": "Turtle Shell" }, { "turtle_shell_piece": "Scute" }, { "trident": "Trident" }, { "phantom_membrane": "Phantom Membrane" } From b9727c2ac731178c7137603c80e969983a51a217 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 17:25:20 -0400 Subject: [PATCH 079/110] Fixed "Bottle o'Enchanting" incorrectly displaying as "Experience Bottle" --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index ae1df78b..a1ebcbc8 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -719,7 +719,7 @@ { "charcoal": "Charcoal" }, { "monsterPlacer_overlay": "Spawn Egg (Overlay)" }, { "bed_overlay": "Bed (Overlay)" }, - { "expBottle": "Experience Bottle" }, + { "expBottle": "Bottle o'Enchanting" }, { "brewingStand": "Brewing Stand" }, { "magmaCream": "Magma Cream" }, { "dyePowder_cyan": "Cyan Dye" }, From 4977063f8eac92295efe9750244e86d5b29855f5 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 17:25:56 -0400 Subject: [PATCH 080/110] Fixed "Glistering Melon" incorrectly displaying as "Speckled Melon" --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index a1ebcbc8..dceda712 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -685,7 +685,7 @@ { "potatoPoisonous": "Poisonous Potato" }, { "minecart": "Minecart" }, { "boat": "Oak Boat" }, - { "speckledMelon": "Speckled Melon" }, + { "speckledMelon": "Glistering Melon" }, { "fermentedSpiderEye": "Fermented Spider Eye" }, { "spiderEye": "Spider Eye" }, { "glassBottle": "Glass Bottle" }, From 82762fa65d50bcd273a6ab2ef25fcfdbe2779cd5 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 17:26:38 -0400 Subject: [PATCH 081/110] Fixed "Rabbit's Foot" incorrectly displaying as "Rabbit Foot" --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index dceda712..ba83f1b6 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -777,7 +777,7 @@ { "totem": "Totem of Undying" }, { "shulker_shell": "Shulker Shell" }, { "iron_nugget": "Iron Nugget" }, - { "rabbit_foot": "Rabbit Foot" }, + { "rabbit_foot": "Rabbit's Foot" }, { "rabbit_hide": "Rabbit Hide" }, { "compassP0": "" }, { "compassP1": "" }, From 41c2271f3632c5170bda4665254b21b1315c3d46 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 17:34:34 -0400 Subject: [PATCH 082/110] Fixed "Shulker Box" incorrectly displaying as "Shulker" --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index ba83f1b6..7029bbbb 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -482,7 +482,7 @@ { "glazed_terracotta_silver": "Light Gray Glazed Terracotta" }, { "glazed_terracotta_white": "White Glazed Terracotta" }, { "glazed_terracotta_yellow": "Yellow Glazed Terracotta" }, - { "shulker_top": "Shulker (Break Particles)" }, + { "shulker_top": "Shulker Box (Break Particles)" }, { "": "" }, { "cauldron_water": "Cauldron Water" }, { "seagrass_doubletall_top": "Double Tall Seagrass (Top)" }, From 73bad71c3ce083570b2a1c9cd72eefcfb792ce46 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 18:07:03 -0400 Subject: [PATCH 083/110] Changed "Milk" to "Milk Bucket" to match in game name --- PCK-Studio/Resources/tileData.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 7029bbbb..13902259 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -625,7 +625,7 @@ { "bucket": "Bucket" }, { "bucketWater": "Water Bucket" }, { "bucketLava": "Lava Bucket" }, - { "milk": "Milk" }, + { "milk": "Milk Bucket" }, { "dyePowder_black": "Ink Sac" }, { "dyePowder_gray": "Gray Dye" }, { "shovelWood": "Wooden Shovel" }, From 24a7215e951dc001b6075bb4e4e7484094779b32 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 18:09:51 -0400 Subject: [PATCH 084/110] Changed "Turtle Egg" variants to "Sea Turtle Egg" to match in game names --- PCK-Studio/Resources/tileData.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 13902259..b8a278e3 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -137,7 +137,7 @@ { "leaves_spruce": "Spruce Leaves" }, { "leaves_spruce_opaque": "Spruce Leaves (Opaque)" }, { "conduit_top": "Conduit (Break Particles)" }, - { "turtle_egg_hatch_0": "Turtle Egg (Stage 1)" }, + { "turtle_egg_hatch_0": "Sea Turtle Egg (Stage 1)" }, { "melon_side": "Melon (Side)" }, { "melon_top": "Melon (Top)" }, { "cauldron_top": "Cauldron (Top)" }, @@ -153,8 +153,8 @@ { "glass_pane_top": "Glass Pane (Top)" }, { "chest_top": "Chest (Break Particles)" }, { "ender_chest_top": "Ender Chest (Break Particles)" }, - { "turtle_egg_hatch_1": "Turtle Egg (Stage 2)" }, - { "turtle_egg_hatch_2": "Turtle Egg (Stage 3)" }, + { "turtle_egg_hatch_1": "Sea Turtle Egg (Stage 2)" }, + { "turtle_egg_hatch_2": "Sea Turtle Egg (Stage 3)" }, { "log_jungle": "Jungle Wood (Side)" }, { "cauldron_side": "Cauldron (Side)" }, { "cauldron_bottom": "Cauldron (Bottom)" }, From 072d9feae72cdae9e16b34a466666001d9af74a2 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 20:17:10 -0400 Subject: [PATCH 085/110] Removed debug MessageBoxes from Col Editor --- PCK-Studio/Forms/Editor/COLEditor.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/PCK-Studio/Forms/Editor/COLEditor.cs b/PCK-Studio/Forms/Editor/COLEditor.cs index b6c943ff..dd6f6892 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.cs @@ -325,7 +325,6 @@ namespace PckStudio.Forms.Editor if (tabControl.SelectedTab == colorsTab && colorTreeView.SelectedNode != null && colorTreeView.SelectedNode.Tag != null && colorTreeView.SelectedNode.Tag is COLFile.ColorEntry colorInfoD) { - MessageBox.Show("Color"); COLFile.ColorEntry entry = default_colourfile.entries.Find(color => color.name == colorTreeView.SelectedNode.Text); colorInfoD.color = entry.color; redUpDown.Value = colorInfoD.color >> 16 & 0xff; @@ -336,7 +335,6 @@ namespace PckStudio.Forms.Editor else if (tabControl.SelectedTab == waterTab && waterTreeView.SelectedNode != null && waterTreeView.SelectedNode.Tag != null && waterTreeView.SelectedNode.Tag is COLFile.ExtendedColorEntry colorInfo) { - MessageBox.Show("Water"); COLFile.ExtendedColorEntry entry = default_colourfile.waterEntries.Find(color => color.name == waterTreeView.SelectedNode.Text); colorInfo.color = entry.color; alphaUpDown.Value = colorInfo.color >> 24 & 0xff; @@ -348,7 +346,6 @@ namespace PckStudio.Forms.Editor else if (tabControl.SelectedTab == underwaterTab && underwaterTreeView.SelectedNode != null && underwaterTreeView.SelectedNode.Tag != null && underwaterTreeView.SelectedNode.Tag is COLFile.ExtendedColorEntry colorInfoB) { - MessageBox.Show("Underwater"); COLFile.ExtendedColorEntry entry = default_colourfile.waterEntries.Find(color => color.name == underwaterTreeView.SelectedNode.Text); colorInfoB.color_b = entry.color_b; alphaUpDown.Value = colorInfoB.color_b >> 24 & 0xff; @@ -360,7 +357,6 @@ namespace PckStudio.Forms.Editor else if (tabControl.SelectedTab == fogTab && fogTreeView.SelectedNode != null && fogTreeView.SelectedNode.Tag != null && fogTreeView.SelectedNode.Tag is COLFile.ExtendedColorEntry colorInfoC) { - MessageBox.Show("Fog"); COLFile.ExtendedColorEntry entry = default_colourfile.waterEntries.Find(color => color.name == fogTreeView.SelectedNode.Text); colorInfoC.color_c = entry.color_c; alphaUpDown.Value = colorInfoC.color_c >> 24 & 0xff; From a0be7ec04f7a0248d5ace84a4b4786c2ef4e93de Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 4 Oct 2022 20:17:29 -0400 Subject: [PATCH 086/110] Added search filter to ColEditor --- PCK-Studio/Forms/Editor/COLEditor.Designer.cs | 52 ++- PCK-Studio/Forms/Editor/COLEditor.cs | 80 +++++ PCK-Studio/Forms/Editor/COLEditor.resx | 323 +++++++++--------- 3 files changed, 296 insertions(+), 159 deletions(-) diff --git a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs index 8f38b52c..567a1b98 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs @@ -60,6 +60,8 @@ namespace PckStudio.Forms.Editor this.tabControl = new MetroFramework.Controls.MetroTabControl(); this.underwaterTab = new System.Windows.Forms.TabPage(); this.fogTab = new System.Windows.Forms.TabPage(); + this.metroTextBox1 = new MetroFramework.Controls.MetroTextBox(); + this.metroLabel2 = new MetroFramework.Controls.MetroLabel(); this.metroPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).BeginInit(); @@ -77,6 +79,8 @@ namespace PckStudio.Forms.Editor // // metroPanel1 // + this.metroPanel1.Controls.Add(this.metroTextBox1); + this.metroPanel1.Controls.Add(this.metroLabel2); this.metroPanel1.Controls.Add(this.setColorBtn); this.metroPanel1.Controls.Add(this.blueUpDown); this.metroPanel1.Controls.Add(this.greenUpDown); @@ -189,16 +193,16 @@ namespace PckStudio.Forms.Editor // // // - this.colorTextbox.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image"))); + this.colorTextbox.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image1"))); this.colorTextbox.CustomButton.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("resource.ImeMode"))); - this.colorTextbox.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location"))); + this.colorTextbox.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location1"))); this.colorTextbox.CustomButton.Name = ""; - this.colorTextbox.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size"))); + this.colorTextbox.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size1"))); this.colorTextbox.CustomButton.Style = MetroFramework.MetroColorStyle.Blue; - this.colorTextbox.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex"))); + this.colorTextbox.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex1"))); this.colorTextbox.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light; this.colorTextbox.CustomButton.UseSelectable = true; - this.colorTextbox.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible"))); + this.colorTextbox.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible1"))); this.colorTextbox.Lines = new string[0]; resources.ApplyResources(this.colorTextbox, "colorTextbox"); this.colorTextbox.MaxLength = 32767; @@ -336,6 +340,42 @@ namespace PckStudio.Forms.Editor resources.ApplyResources(this.fogTab, "fogTab"); this.fogTab.Name = "fogTab"; // + // metroTextBox1 + // + // + // + // + this.metroTextBox1.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image"))); + this.metroTextBox1.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location"))); + this.metroTextBox1.CustomButton.Name = ""; + this.metroTextBox1.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size"))); + this.metroTextBox1.CustomButton.Style = MetroFramework.MetroColorStyle.Blue; + this.metroTextBox1.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex"))); + this.metroTextBox1.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light; + this.metroTextBox1.CustomButton.UseSelectable = true; + this.metroTextBox1.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible"))); + this.metroTextBox1.Lines = new string[0]; + resources.ApplyResources(this.metroTextBox1, "metroTextBox1"); + 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.Theme = MetroFramework.MetroThemeStyle.Dark; + 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); + this.metroTextBox1.TextChanged += new System.EventHandler(this.metroTextBox1_TextChanged); + // + // metroLabel2 + // + resources.ApplyResources(this.metroLabel2, "metroLabel2"); + this.metroLabel2.Name = "metroLabel2"; + this.metroLabel2.Theme = MetroFramework.MetroThemeStyle.Dark; + // // COLEditor // resources.ApplyResources(this, "$this"); @@ -395,5 +435,7 @@ namespace PckStudio.Forms.Editor private MetroFramework.Controls.MetroLabel metroLabel1; private MetroFramework.Controls.MetroContextMenu ColorContextMenu; private ToolStripMenuItem restoreOriginalColorToolStripMenuItem; + private MetroFramework.Controls.MetroTextBox metroTextBox1; + private MetroFramework.Controls.MetroLabel metroLabel2; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/COLEditor.cs b/PCK-Studio/Forms/Editor/COLEditor.cs index dd6f6892..098f645b 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.cs @@ -21,6 +21,11 @@ namespace PckStudio.Forms.Editor private readonly PCKFile.FileData _file; + List colorCache = new List(); + List waterCache = new List(); + List underwaterCache = new List(); + List fogCache = new List(); + public COLEditor(PCKFile.FileData file) { InitializeComponent(); @@ -42,6 +47,7 @@ namespace PckStudio.Forms.Editor TreeNode tn = new TreeNode(obj.name); tn.Tag = entry != null ? entry : obj; colorTreeView.Nodes.Add(tn); + colorCache.Add(tn); } foreach (var obj in colourfile.waterEntries) { @@ -49,12 +55,15 @@ namespace PckStudio.Forms.Editor TreeNode tn = new TreeNode(obj.name); tn.Tag = entry != null ? entry : obj; 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); } } @@ -366,5 +375,76 @@ namespace PckStudio.Forms.Editor pictureBox1.BackColor = Color.FromArgb(0xff << 24 | (int)colorInfoC.color_c); } } + + private void metroTextBox1_TextChanged(object sender, EventArgs e) + { + // Some code in this function is modified code from this StackOverflow answer - MattNL + //https://stackoverflow.com/questions/8260322/filter-a-treeview-with-a-textbox-in-a-c-sharp-winforms-app + + //blocks repainting tree until all objects loaded + colorTreeView.BeginUpdate(); + colorTreeView.Nodes.Clear(); + waterTreeView.BeginUpdate(); + waterTreeView.Nodes.Clear(); + underwaterTreeView.BeginUpdate(); + underwaterTreeView.Nodes.Clear(); + fogTreeView.BeginUpdate(); + fogTreeView.Nodes.Clear(); + if (!string.IsNullOrEmpty(metroTextBox1.Text)) + { + foreach (TreeNode _node in colorCache) + { + if (_node.Text.ToLower().Contains(metroTextBox1.Text.ToLower())) + { + colorTreeView.Nodes.Add((TreeNode)_node.Clone()); + } + } + foreach (TreeNode _node in waterCache) + { + if (_node.Text.ToLower().Contains(metroTextBox1.Text.ToLower())) + { + waterTreeView.Nodes.Add((TreeNode)_node.Clone()); + } + } + foreach (TreeNode _node in underwaterCache) + { + if (_node.Text.ToLower().Contains(metroTextBox1.Text.ToLower())) + { + underwaterTreeView.Nodes.Add((TreeNode)_node.Clone()); + } + } + foreach (TreeNode _node in fogCache) + { + if (_node.Text.ToLower().Contains(metroTextBox1.Text.ToLower())) + { + fogTreeView.Nodes.Add((TreeNode)_node.Clone()); + } + } + } + else + { + foreach (TreeNode _node in colorCache) + { + colorTreeView.Nodes.Add((TreeNode)_node.Clone()); + } + foreach (TreeNode _node in waterCache) + { + waterTreeView.Nodes.Add((TreeNode)_node.Clone()); + } + foreach (TreeNode _node in underwaterCache) + { + underwaterTreeView.Nodes.Add((TreeNode)_node.Clone()); + } + foreach (TreeNode _node in fogCache) + { + fogTreeView.Nodes.Add((TreeNode)_node.Clone()); + } + } + //enables redrawing tree after all objects have been added + colorTreeView.EndUpdate(); + waterTreeView.EndUpdate(); + underwaterTreeView.EndUpdate(); + fogTreeView.EndUpdate(); + } } } diff --git a/PCK-Studio/Forms/Editor/COLEditor.resx b/PCK-Studio/Forms/Editor/COLEditor.resx index 41b1eb83..3ca373b8 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.resx +++ b/PCK-Studio/Forms/Editor/COLEditor.resx @@ -117,14 +117,78 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + + 113, 1 + + + 21, 21 + + + + 1 + + + False + + + 101, 27 + + + 135, 23 + + + 24 + + + metroTextBox1 + + + MetroFramework.Controls.MetroTextBox, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + metroPanel1 + + + 2 + + + True + + + 62, 27 + + + 46, 19 + + + 23 + + + Filter: + + + metroLabel2 + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + metroPanel1 + + + 3 + 400, 290 125, 23 - 22 @@ -141,7 +205,7 @@ metroPanel1 - 2 + 4 400, 397 @@ -162,7 +226,7 @@ metroPanel1 - 3 + 5 400, 371 @@ -183,7 +247,7 @@ metroPanel1 - 4 + 6 400, 345 @@ -204,7 +268,7 @@ metroPanel1 - 5 + 7 400, 319 @@ -228,7 +292,7 @@ metroPanel1 - 6 + 8 True @@ -258,7 +322,7 @@ metroPanel1 - 7 + 9 True @@ -285,7 +349,7 @@ metroPanel1 - 8 + 10 True @@ -312,7 +376,7 @@ metroPanel1 - 9 + 11 True @@ -339,25 +403,24 @@ metroPanel1 - 10 + 12 - - + NoControl - + 103, 1 - + 21, 21 - + 1 - + False @@ -379,7 +442,7 @@ metroPanel1 - 11 + 13 True @@ -406,7 +469,7 @@ metroPanel1 - 12 + 14 378, 92 @@ -427,7 +490,7 @@ metroPanel1 - 13 + 15 Fill @@ -459,6 +522,28 @@ 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 + 20, 60 @@ -483,67 +568,15 @@ 1 - - 37, 20 - - - File - - - - 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 - - - waterTreeView - - - System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - waterTab - - - 0 - - - 4, 38 - - - 320, 458 - - - 1 - - - Water - - - waterTab - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl - - - 1 - 125, 17 + + 186, 22 + + + Restore original color + 187, 26 @@ -563,7 +596,7 @@ No - 320, 458 + 320, 381 0 @@ -580,11 +613,29 @@ 0 - - 186, 22 + + 4, 38 - - Restore original color + + 320, 381 + + + 1 + + + Water + + + waterTab + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl + + + 1 0, 0 @@ -628,6 +679,18 @@ 0 + + Fill + + + 0, 0 + + + 320, 381 + + + 0 + colorTreeView @@ -644,7 +707,7 @@ 4, 38 - 320, 458 + 320, 381 0 @@ -664,83 +727,14 @@ 0 - - Fill - - - 0, 0 - - - 320, 458 - - - 0 - - - colorTreeView - - - System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - colorsTab - - - 0 - Top, Bottom, Left - - underwaterTab - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl - - - 2 - - - fogTab - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl - - - 3 - - - 20, 83 - - - 328, 500 - - - 22 - - - tabControl - - - MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - $this - - - 2 - 4, 38 - 320, 458 + 320, 381 2 @@ -764,7 +758,7 @@ 4, 38 - 320, 458 + 320, 381 3 @@ -784,6 +778,27 @@ 3 + + 23, 114 + + + 328, 423 + + + 22 + + + tabControl + + + MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + $this + + + 2 + True From 8ec8c6c01ae62620546ceda711258daba74419d3 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Wed, 5 Oct 2022 20:30:45 +0200 Subject: [PATCH 087/110] Remove Job.cs and goodbye.cs --- .../Forms/Additional-Popups/Job.Designer.cs | 103 -------- PCK-Studio/Forms/Additional-Popups/Job.cs | 38 --- PCK-Studio/Forms/Additional-Popups/Job.resx | 135 ---------- .../Additional-Popups/goodbye.Designer.cs | 83 ------ PCK-Studio/Forms/Additional-Popups/goodbye.cs | 35 --- .../Forms/Additional-Popups/goodbye.ja.resx | 158 ------------ .../Forms/Additional-Popups/goodbye.resx | 244 ------------------ PCK-Studio/PckStudio.csproj | 21 -- 8 files changed, 817 deletions(-) delete mode 100644 PCK-Studio/Forms/Additional-Popups/Job.Designer.cs delete mode 100644 PCK-Studio/Forms/Additional-Popups/Job.cs delete mode 100644 PCK-Studio/Forms/Additional-Popups/Job.resx delete mode 100644 PCK-Studio/Forms/Additional-Popups/goodbye.Designer.cs delete mode 100644 PCK-Studio/Forms/Additional-Popups/goodbye.cs delete mode 100644 PCK-Studio/Forms/Additional-Popups/goodbye.ja.resx delete mode 100644 PCK-Studio/Forms/Additional-Popups/goodbye.resx diff --git a/PCK-Studio/Forms/Additional-Popups/Job.Designer.cs b/PCK-Studio/Forms/Additional-Popups/Job.Designer.cs deleted file mode 100644 index 6bfb4818..00000000 --- a/PCK-Studio/Forms/Additional-Popups/Job.Designer.cs +++ /dev/null @@ -1,103 +0,0 @@ - -namespace PckStudio.Forms -{ - partial class Job - { - /// - /// 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(Job)); - this.buttonClose = new System.Windows.Forms.Button(); - this.buttonDonate = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.SuspendLayout(); - // - // buttonClose - // - this.buttonClose.BackColor = System.Drawing.Color.Transparent; - this.buttonClose.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.buttonClose.Font = new System.Drawing.Font("Segoe UI", 12F); - this.buttonClose.ForeColor = System.Drawing.Color.White; - this.buttonClose.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonClose.Location = new System.Drawing.Point(308, 336); - this.buttonClose.Name = "buttonClose"; - this.buttonClose.Size = new System.Drawing.Size(103, 38); - this.buttonClose.TabIndex = 6; - this.buttonClose.Text = "Close"; - this.buttonClose.UseVisualStyleBackColor = false; - this.buttonClose.Click += new System.EventHandler(this.buttonClose_Click); - // - // buttonDonate - // - this.buttonDonate.BackColor = System.Drawing.Color.DarkCyan; - this.buttonDonate.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.buttonDonate.Font = new System.Drawing.Font("Segoe UI", 12F); - this.buttonDonate.ForeColor = System.Drawing.Color.White; - this.buttonDonate.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonDonate.Location = new System.Drawing.Point(163, 336); - this.buttonDonate.Name = "buttonDonate"; - this.buttonDonate.Size = new System.Drawing.Size(134, 38); - this.buttonDonate.TabIndex = 5; - this.buttonDonate.Text = "Join Discord"; - this.buttonDonate.UseVisualStyleBackColor = false; - this.buttonDonate.Click += new System.EventHandler(this.buttonDonate_Click); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F); - this.label1.ForeColor = System.Drawing.Color.White; - this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.label1.Location = new System.Drawing.Point(19, 31); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(428, 260); - this.label1.TabIndex = 4; - this.label1.Text = resources.GetString("label1.Text"); - // - // Job - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(453, 400); - this.Controls.Add(this.buttonClose); - this.Controls.Add(this.buttonDonate); - this.Controls.Add(this.label1); - this.Name = "Job"; - this.Style = MetroFramework.MetroColorStyle.Silver; - this.Theme = MetroFramework.MetroThemeStyle.Dark; - this.Load += new System.EventHandler(this.Job_Load); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button buttonClose; - private System.Windows.Forms.Button buttonDonate; - private System.Windows.Forms.Label label1; - } -} \ No newline at end of file diff --git a/PCK-Studio/Forms/Additional-Popups/Job.cs b/PCK-Studio/Forms/Additional-Popups/Job.cs deleted file mode 100644 index 77ff666f..00000000 --- a/PCK-Studio/Forms/Additional-Popups/Job.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.IO; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using MetroFramework.Forms; - -namespace PckStudio.Forms -{ - public partial class Job : MetroForm - { - public Job() - { - InitializeComponent(); - } - - private void buttonClose_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void Job_Load(object sender, EventArgs e) - { - File.Create(Program.AppData + "\\discordmark"); - } - - private void buttonDonate_Click(object sender, EventArgs e) - { - System.Diagnostics.Process.Start("https://discord.gg/Byh4hcq25w"); - this.Close(); - } - } -} diff --git a/PCK-Studio/Forms/Additional-Popups/Job.resx b/PCK-Studio/Forms/Additional-Popups/Job.resx deleted file mode 100644 index a356ef87..00000000 --- a/PCK-Studio/Forms/Additional-Popups/Job.resx +++ /dev/null @@ -1,135 +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 - - - Hello users, - - The development of these tools has, and maintains to be, -entertaining and fun, and with the advent of the WiiU -edition growing, I hope to branch out to development for -the WiiU and Xbox360 editions as well, and am currently -researching ways of enabling Developer GUIs in-game. - - If you want to help contribute to the development -of these tools, feel free to join the team I'm creating solely -for this reason, simply open the discord server link below! - -- Felix (PhoenixARC) - - \ No newline at end of file diff --git a/PCK-Studio/Forms/Additional-Popups/goodbye.Designer.cs b/PCK-Studio/Forms/Additional-Popups/goodbye.Designer.cs deleted file mode 100644 index 39b3bc0d..00000000 --- a/PCK-Studio/Forms/Additional-Popups/goodbye.Designer.cs +++ /dev/null @@ -1,83 +0,0 @@ -namespace PckStudio.Forms -{ - partial class goodbye - { - /// - /// 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(goodbye)); - this.label1 = new System.Windows.Forms.Label(); - this.buttonDonate = new System.Windows.Forms.Button(); - this.buttonClose = new System.Windows.Forms.Button(); - this.SuspendLayout(); - // - // label1 - // - resources.ApplyResources(this.label1, "label1"); - this.label1.ForeColor = System.Drawing.Color.White; - this.label1.Name = "label1"; - // - // buttonDonate - // - this.buttonDonate.BackColor = System.Drawing.Color.DarkCyan; - resources.ApplyResources(this.buttonDonate, "buttonDonate"); - this.buttonDonate.ForeColor = System.Drawing.Color.White; - this.buttonDonate.Name = "buttonDonate"; - this.buttonDonate.UseVisualStyleBackColor = false; - this.buttonDonate.Click += new System.EventHandler(this.buttonDonate_Click); - // - // buttonClose - // - this.buttonClose.BackColor = System.Drawing.Color.Transparent; - resources.ApplyResources(this.buttonClose, "buttonClose"); - this.buttonClose.ForeColor = System.Drawing.Color.White; - this.buttonClose.Name = "buttonClose"; - this.buttonClose.UseVisualStyleBackColor = false; - this.buttonClose.Click += new System.EventHandler(this.buttonClose_Click); - // - // goodbye - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.buttonClose); - this.Controls.Add(this.buttonDonate); - this.Controls.Add(this.label1); - this.Name = "goodbye"; - this.Resizable = false; - this.Style = MetroFramework.MetroColorStyle.Silver; - this.Theme = MetroFramework.MetroThemeStyle.Dark; - this.Load += new System.EventHandler(this.goodbye_Load); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Button buttonDonate; - private System.Windows.Forms.Button buttonClose; - } -} \ No newline at end of file diff --git a/PCK-Studio/Forms/Additional-Popups/goodbye.cs b/PCK-Studio/Forms/Additional-Popups/goodbye.cs deleted file mode 100644 index b9693f75..00000000 --- a/PCK-Studio/Forms/Additional-Popups/goodbye.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace PckStudio.Forms -{ - public partial class goodbye : MetroFramework.Forms.MetroForm - { - public goodbye() - { - InitializeComponent(); - } - - private void buttonDonate_Click(object sender, EventArgs e) - { - System.Diagnostics.Process.Start("https://cash.app/$PhoenixARC"); - } - - private void buttonClose_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void goodbye_Load(object sender, EventArgs e) - { - System.IO.File.Create(Program.AppData + "\\goodbyemark"); - } - } -} diff --git a/PCK-Studio/Forms/Additional-Popups/goodbye.ja.resx b/PCK-Studio/Forms/Additional-Popups/goodbye.ja.resx deleted file mode 100644 index 6cd67c01..00000000 --- a/PCK-Studio/Forms/Additional-Popups/goodbye.ja.resx +++ /dev/null @@ -1,158 +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 - - - - 411, 280 - - - こんにちはユーザー、 - - これらのツールの開発は、現在も維持されています。 -面白くて楽しい、そしてWiiUの登場とともに -エディションが成長しているので、開発に分岐したいと思っています -WiiUとXbox360のエディションもあり、現在 -ゲーム内で開発者GUIを有効にする方法を研究しています。 - -開発に貢献したい場合 -これらのツールのうち、お気軽に寄付してください -以下のCashappへの選択(Paypalは私が偽物だと思っています -何らかの理由で人... マジ!?) - --フェリックス(PhoenixARC) - - - 200, 384 - - - 寄付 - - - 314, 384 - - - 閉じる - - - 457, 456 - - - 寄付することを忘れないでください - - \ No newline at end of file diff --git a/PCK-Studio/Forms/Additional-Popups/goodbye.resx b/PCK-Studio/Forms/Additional-Popups/goodbye.resx deleted file mode 100644 index 9c1854d9..00000000 --- a/PCK-Studio/Forms/Additional-Popups/goodbye.resx +++ /dev/null @@ -1,244 +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 - - - - True - - - - Microsoft Sans Serif, 12pt - - - 23, 72 - - - 428, 280 - - - 1 - - - Hello users, - - The development of these tools has, and maintains to be, -entertaining and fun, and with the advent of the WiiU -edition growing, I hope to branch out to development for -the WiiU and Xbox360 editions as well, and am currently -researching ways of enabling Developer GUIs in-game. - - If you want to help contribute to the development -of these tools, feel free to donate an amount of your -choice to the Cashapp below(Paypal thinks I'm a fake -person for some reason smh) - -- Felix (PhoenixARC) - - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - - Flat - - - Segoe UI, 12pt - - - 198, 377 - - - 103, 38 - - - 2 - - - Donate - - - buttonDonate - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - Flat - - - Segoe UI, 12pt - - - 312, 377 - - - 103, 38 - - - 3 - - - Close - - - buttonClose - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - True - - - 6, 13 - - - 468, 443 - - - Don't forget to donate - - - goodbye - - - MetroFramework.Forms.MetroForm, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - \ No newline at end of file diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 4a935b9d..1b992442 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -318,12 +318,6 @@ generateModel.cs - - Form - - - goodbye.cs - Form @@ -366,12 +360,6 @@ installWiiU.cs - - Form - - - Job.cs - Form @@ -525,12 +513,6 @@ generateModel.cs - - goodbye.cs - - - goodbye.cs - SkinPreview.cs @@ -556,9 +538,6 @@ installWiiU.cs - - Job.cs - meta.cs From f4e2f5cbda795c9ac609fa40d8bc72d5ada39e76 Mon Sep 17 00:00:00 2001 From: MattNL Date: Wed, 5 Oct 2022 14:44:26 -0400 Subject: [PATCH 088/110] Added functionality to RGB up down values in COL Editor --- PCK-Studio/Forms/Editor/COLEditor.Designer.cs | 3 - PCK-Studio/Forms/Editor/COLEditor.cs | 91 ++++++++++--------- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs index 567a1b98..939580e3 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs @@ -123,7 +123,6 @@ namespace PckStudio.Forms.Editor 0, 0}); this.blueUpDown.Name = "blueUpDown"; - this.blueUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); // // greenUpDown // @@ -136,7 +135,6 @@ namespace PckStudio.Forms.Editor 0, 0}); this.greenUpDown.Name = "greenUpDown"; - this.greenUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); // // redUpDown // @@ -149,7 +147,6 @@ namespace PckStudio.Forms.Editor 0, 0}); this.redUpDown.Name = "redUpDown"; - this.redUpDown.ValueChanged += new System.EventHandler(this.color_ValueChanged); // // alphaUpDown // diff --git a/PCK-Studio/Forms/Editor/COLEditor.cs b/PCK-Studio/Forms/Editor/COLEditor.cs index 098f645b..d5244f3a 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.cs @@ -67,19 +67,38 @@ namespace PckStudio.Forms.Editor } } + void SetUpValueChanged(bool add) + { + if(add) + { + //alphaUpDown.ValueChanged += color_ValueChanged; + redUpDown.ValueChanged += color_ValueChanged; + greenUpDown.ValueChanged += color_ValueChanged; + blueUpDown.ValueChanged += color_ValueChanged; + } + else + { + //alphaUpDown.ValueChanged -= color_ValueChanged; + redUpDown.ValueChanged -= color_ValueChanged; + greenUpDown.ValueChanged -= color_ValueChanged; + blueUpDown.ValueChanged -= color_ValueChanged; + } + } + private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { if (colorTreeView.SelectedNode.Tag == null) return; var colorEntry = (COLFile.ColorEntry)colorTreeView.SelectedNode.Tag; var color = colorEntry.color; + SetUpValueChanged(false); alphaUpDown.Visible = false; alphaLabel.Visible = false; redUpDown.Value = color >> 16 & 0xff; greenUpDown.Value = color >> 8 & 0xff; blueUpDown.Value = color & 0xff; pictureBox1.BackColor = Color.FromArgb(0xff << 24 | (int)color); - + SetUpValueChanged(true); } private void treeView2_AfterSelect(object sender, TreeViewEventArgs e) @@ -88,6 +107,7 @@ namespace PckStudio.Forms.Editor return; var colorEntry = (COLFile.ExtendedColorEntry)waterTreeView.SelectedNode.Tag; int color = (int)colorEntry.color; + SetUpValueChanged(false); alphaUpDown.Enabled = true; alphaUpDown.Visible = true; alphaLabel.Visible = true; @@ -96,6 +116,7 @@ namespace PckStudio.Forms.Editor greenUpDown.Value = color >> 8 & 0xff; blueUpDown.Value = color & 0xff; pictureBox1.BackColor = Color.FromArgb(color); + SetUpValueChanged(true); } private void treeView3_AfterSelect(object sender, TreeViewEventArgs e) @@ -104,12 +125,14 @@ namespace PckStudio.Forms.Editor return; var colorEntry = (COLFile.ExtendedColorEntry)underwaterTreeView.SelectedNode.Tag; int color = (int)colorEntry.color_b; + SetUpValueChanged(false); alphaUpDown.Visible = false; alphaLabel.Visible = false; redUpDown.Value = color >> 16 & 0xff; greenUpDown.Value = color >> 8 & 0xff; blueUpDown.Value = color & 0xff; pictureBox1.BackColor = Color.FromArgb(255, Color.FromArgb(0xff << 24 | color)); + SetUpValueChanged(true); } private void treeView4_AfterSelect(object sender, TreeViewEventArgs e) @@ -118,12 +141,14 @@ namespace PckStudio.Forms.Editor return; var colorEntry = (COLFile.ExtendedColorEntry)fogTreeView.SelectedNode.Tag; int color = (int)colorEntry.color_c; + SetUpValueChanged(false); alphaUpDown.Visible = false; alphaLabel.Visible = false; redUpDown.Value = color >> 16 & 0xff; greenUpDown.Value = color >> 8 & 0xff; blueUpDown.Value = color & 0xff; pictureBox1.BackColor = Color.FromArgb(255, Color.FromArgb(0xff << 24 | color)); + SetUpValueChanged(true); } private void saveToolStripMenuItem1_Click(object sender, EventArgs e) @@ -220,52 +245,28 @@ namespace PckStudio.Forms.Editor private void color_ValueChanged(object sender, EventArgs e) { - //TreeView tv = (TreeView)tabControl.SelectedTab.Controls[0]; - //if (tv.SelectedNode == null) return; - //byte[] origHex = StringToByteArrayFastest(tv.SelectedNode.Tag.ToString()); - //bool hasAlpha = tabControl.SelectedTab == waterTab; - //string hex = ""; - //if (((NumericUpDown)sender).Name == "numericUpDown2") - //{ - // hex += ((int)alphaUpDown.Value).ToString("X2"); - // hex += origHex[1].ToString("X2"); - // hex += origHex[2].ToString("X2"); - // hex += origHex[3].ToString("X2"); - //} - //else if (((NumericUpDown)sender).Name == "numericUpDown3") - //{ - // if (hasAlpha) hex += origHex[0].ToString("X2"); - // hex += ((int)redUpDown.Value).ToString("X2"); - // hex += origHex[hasAlpha ? 2 : 1].ToString("X2"); - // hex += origHex[hasAlpha ? 3 : 2].ToString("X2"); - //} - //else if (((NumericUpDown)sender).Name == "numericUpDown4") - //{ - // if (hasAlpha) hex += origHex[0].ToString("X2"); - // hex += origHex[hasAlpha ? 1 : 0].ToString("X2"); - // hex += ((int)greenUpDown.Value).ToString("X2"); - // hex += origHex[hasAlpha ? 3 : 2].ToString("X2"); - //} - //else if (((NumericUpDown)sender).Name == "numericUpDown5") - //{ - // if (hasAlpha) hex += origHex[0].ToString("X2"); - // hex += origHex[hasAlpha ? 1 : 0].ToString("X2"); - // hex += origHex[hasAlpha ? 2 : 1].ToString("X2"); - // hex += ((int)blueUpDown.Value).ToString("X2"); - //} - //else // just in case some weird thing happens i dunno - matt - //{ - // if (hasAlpha) hex += origHex[0].ToString("X2"); - // hex += origHex[hasAlpha ? 1 : 0].ToString("X2"); - // hex += origHex[hasAlpha ? 2 : 1].ToString("X2"); - // hex += origHex[hasAlpha ? 3 : 2].ToString("X2"); - //} + Color fixed_color = new Color(); + if (tabControl.SelectedTab == colorsTab) + { + var colorEntry = (COLFile.ColorEntry)colorTreeView.SelectedNode.Tag; + fixed_color = Color.FromArgb(255, (int)redUpDown.Value, (int)greenUpDown.Value, (int)blueUpDown.Value); + colorEntry.color = (uint)(((255 << 24) | (fixed_color.R << 16) | (fixed_color.G << 8) | fixed_color.B) & 0xffffffffL); + } + else if (tabControl.SelectedTab != null) // just in case + { + var colorEntry = (COLFile.ExtendedColorEntry)waterTreeView.SelectedNode.Tag; + fixed_color = Color.FromArgb(tabControl.SelectedTab == waterTab ? (int)alphaUpDown.Value : 255, (int)redUpDown.Value, (int)greenUpDown.Value, (int)blueUpDown.Value); + uint value = (uint)(((fixed_color.A << 24) | (fixed_color.R << 16) | (fixed_color.G << 8) | fixed_color.B) & 0xffffffffL); + if (tabControl.SelectedTab == waterTab) colorEntry.color = value; + else if (tabControl.SelectedTab == underwaterTab) colorEntry.color_b = value; + else colorEntry.color_c = value; + fixed_color = Color.FromArgb((int)value); + } - //Console.WriteLine(hex); - //colorTextbox.Text = hex; + pictureBox1.BackColor = fixed_color; } - private void setColorBtn_Click(object sender, EventArgs e) + private void setColorBtn_Click(object sender, EventArgs e) { ColorDialog colorPick = new ColorDialog(); colorPick.AllowFullOpen = true; @@ -331,6 +332,7 @@ namespace PckStudio.Forms.Editor 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 COLFile.ColorEntry colorInfoD) { @@ -374,6 +376,7 @@ namespace PckStudio.Forms.Editor blueUpDown.Value = colorInfoC.color_c & 0xff; pictureBox1.BackColor = Color.FromArgb(0xff << 24 | (int)colorInfoC.color_c); } + SetUpValueChanged(true); } private void metroTextBox1_TextChanged(object sender, EventArgs e) From 67a17d4d6efa3d85a838c7bab3faca24d3aefd15 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 15 Oct 2022 14:00:07 +0200 Subject: [PATCH 089/110] Update some minor stuff in Reader/Writer classes --- PCK-Studio/Classes/IO/ARC/ARCFileReader.cs | 8 ++++---- PCK-Studio/Classes/IO/ARC/ARCFileWriter.cs | 8 ++++---- PCK-Studio/Classes/IO/GRF/GRFFileReader.cs | 9 +++++---- PCK-Studio/Classes/IO/LOC/LOCFileWriter.cs | 8 ++++---- PCK-Studio/Classes/IO/PCK/PCKFileReader.cs | 8 ++++---- PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs | 8 ++++---- 6 files changed, 25 insertions(+), 24 deletions(-) diff --git a/PCK-Studio/Classes/IO/ARC/ARCFileReader.cs b/PCK-Studio/Classes/IO/ARC/ARCFileReader.cs index 201c8c4b..b4eb5c65 100644 --- a/PCK-Studio/Classes/IO/ARC/ARCFileReader.cs +++ b/PCK-Studio/Classes/IO/ARC/ARCFileReader.cs @@ -20,8 +20,8 @@ namespace PckStudio.Classes.IO.ARC private ConsoleArchive ReadFromStream(Stream stream) { ConsoleArchive _archive = new ConsoleArchive(); - int NumberOfFiles = ReadInt(stream); - for(int i = 0; i < NumberOfFiles; i++) + int numberOfFiles = ReadInt(stream); + for(int i = 0; i < numberOfFiles; i++) { string name = ReadString(stream); int pos = ReadInt(stream); @@ -41,9 +41,9 @@ namespace PckStudio.Classes.IO.ARC { long originalPOS = stream.Position; if (stream.Seek(position, SeekOrigin.Begin) != position) throw new Exception(); - byte[] bytes = ReadBytes(stream, size); + byte[] data = ReadBytes(stream, size); if (stream.Seek(originalPOS, SeekOrigin.Begin) != originalPOS) throw new Exception(); - return bytes; + return data; } } diff --git a/PCK-Studio/Classes/IO/ARC/ARCFileWriter.cs b/PCK-Studio/Classes/IO/ARC/ARCFileWriter.cs index d75ab63f..7f3604f9 100644 --- a/PCK-Studio/Classes/IO/ARC/ARCFileWriter.cs +++ b/PCK-Studio/Classes/IO/ARC/ARCFileWriter.cs @@ -25,7 +25,7 @@ namespace PckStudio.Classes.IO.ARC private void WriteToStream(Stream stream) { WriteInt(stream, _archive.Count); - int currentOffset = 4 + _archive.Keys.ToArray().Sum(key => 10 + key.Length); + int currentOffset = 4 + _archive.Keys.Sum(key => 10 + key.Length); foreach (var pair in _archive) { int size = pair.Value.Length; @@ -40,10 +40,10 @@ namespace PckStudio.Classes.IO.ARC } } - private void WriteString(Stream stream, string String) + private void WriteString(Stream stream, string s) { - WriteShort(stream, (short)String.Length); - WriteString(stream, String, Encoding.UTF8); + WriteShort(stream, (short)s.Length); + WriteString(stream, s, Encoding.UTF8); } } } diff --git a/PCK-Studio/Classes/IO/GRF/GRFFileReader.cs b/PCK-Studio/Classes/IO/GRF/GRFFileReader.cs index 18ba7adf..3a223da3 100644 --- a/PCK-Studio/Classes/IO/GRF/GRFFileReader.cs +++ b/PCK-Studio/Classes/IO/GRF/GRFFileReader.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text; using ICSharpCode.SharpZipLib.Zip.Compression.Streams; using PckStudio.Classes.Utils; +using System.Diagnostics; namespace PckStudio.Classes.IO.GRF { @@ -85,7 +86,7 @@ namespace PckStudio.Classes.IO.GRF { ReadStringLookUpTable(stream); string Name = GetString(stream); - Console.WriteLine($"[{nameof(GRFFile)}] Root Name: {Name}"); + Debug.WriteLine("[{0}] Root Name: {1}", nameof(GRFFile), Name); ReadGameRuleHierarchy(stream, _file.Root); } @@ -103,9 +104,9 @@ namespace PckStudio.Classes.IO.GRF private void ReadStringLookUpTable(Stream stream) { - int name_count = ReadInt(stream); - StringLookUpTable = new List(name_count); - for (int i = 0; i < name_count; i++) + int tableSize = ReadInt(stream); + StringLookUpTable = new List(tableSize); + for (int i = 0; i < tableSize; i++) { string s = ReadString(stream); StringLookUpTable.Add(s); diff --git a/PCK-Studio/Classes/IO/LOC/LOCFileWriter.cs b/PCK-Studio/Classes/IO/LOC/LOCFileWriter.cs index 158cf2ce..be4a019f 100644 --- a/PCK-Studio/Classes/IO/LOC/LOCFileWriter.cs +++ b/PCK-Studio/Classes/IO/LOC/LOCFileWriter.cs @@ -39,7 +39,7 @@ namespace PckStudio.Classes.IO.LOC private void WriteLanguages(Stream stream, int type) { - _locfile.Languages.ForEach(language => + foreach(var language in _locfile.Languages) { WriteString(stream, language); @@ -58,12 +58,12 @@ namespace PckStudio.Classes.IO.LOC } WriteInt(stream, size); - }); + }; } private void WriteLanguageEntries(Stream stream, int type) { - _locfile.Languages.ForEach(language => + foreach (var language in _locfile.Languages) { WriteInt(stream, 0x6D696B75); // :P stream.WriteByte(0); // <- only write when the previous written int was >0 @@ -75,7 +75,7 @@ namespace PckStudio.Classes.IO.LOC if (type == 0) WriteString(stream, locKey); WriteString(stream, _locfile.LocKeys[locKey][language]); } - }); + }; } private void WriteString(Stream stream, string s) diff --git a/PCK-Studio/Classes/IO/PCK/PCKFileReader.cs b/PCK-Studio/Classes/IO/PCK/PCKFileReader.cs index 6b779233..1c33701a 100644 --- a/PCK-Studio/Classes/IO/PCK/PCKFileReader.cs +++ b/PCK-Studio/Classes/IO/PCK/PCKFileReader.cs @@ -11,7 +11,6 @@ namespace PckStudio.Classes.IO private PCKFile _file; private List LUT; - public static PCKFile Read(Stream stream, bool isLittleEndian) { return new PCKFileReader(isLittleEndian).ReadFromStream(stream); @@ -24,7 +23,7 @@ namespace PckStudio.Classes.IO private PCKFile ReadFromStream(Stream stream) { int pck_type = ReadInt(stream); - if (pck_type > 0xf00000) // 03 00 00 00 == true + if (pck_type > 0xf0_00_00) // 03 00 00 00 == true throw new OverflowException(nameof(pck_type)); _file = new PCKFile(pck_type); ReadLookUpTable(stream); @@ -62,7 +61,8 @@ namespace PckStudio.Classes.IO private void ReadFileContents(Stream stream) { - _file.Files.ForEach( file => { + foreach (var file in _file.Files) + { int property_count = ReadInt(stream); for (; 0 < property_count; property_count--) { @@ -71,7 +71,7 @@ namespace PckStudio.Classes.IO file.properties.Add((key, value)); } stream.Read(file.data, 0, file.size); - }); + }; } private string ReadString(Stream stream) diff --git a/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs b/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs index c6ace3fd..1d655d5a 100644 --- a/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs +++ b/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs @@ -42,11 +42,11 @@ namespace PckStudio.Classes.IO private void WriteLookUpTable(Stream stream) { WriteInt(stream, LUT.Count); - LUT.ForEach(entry => + for(int i = 0; i < LUT.Count; i++) { - WriteInt(stream, LUT.IndexOf(entry)); - WriteString(stream, entry); - }); + WriteInt(stream, i); + WriteString(stream, LUT[i]); + }; if (LUT.Contains("XMLVERSION")) WriteInt(stream, 0x1337); // :^) } From f14dd4fe4ea46f06aada670a811c0c4a8a6f0dff Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 15 Oct 2022 14:03:13 +0200 Subject: [PATCH 090/110] Add ModelReader and ModelFile class --- PCK-Studio/Classes/FileTypes/ModelFile.cs | 116 +++++++++++++++++++++ PCK-Studio/Classes/IO/Model/ModelReader.cs | 77 ++++++++++++++ PCK-Studio/PckStudio.csproj | 2 + 3 files changed, 195 insertions(+) create mode 100644 PCK-Studio/Classes/FileTypes/ModelFile.cs create mode 100644 PCK-Studio/Classes/IO/Model/ModelReader.cs diff --git a/PCK-Studio/Classes/FileTypes/ModelFile.cs b/PCK-Studio/Classes/FileTypes/ModelFile.cs new file mode 100644 index 00000000..260407c5 --- /dev/null +++ b/PCK-Studio/Classes/FileTypes/ModelFile.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Documents; + +namespace PckStudio.Classes.FileTypes +{ + [Serializable] + internal class ModelNotFoundException : Exception + { + public ModelNotFoundException() + { + } + + public ModelNotFoundException(string message) : base(message) + { + } + + public ModelNotFoundException(string message, Exception innerException) : base(message, innerException) + { + } + + protected ModelNotFoundException(SerializationInfo info, StreamingContext context) : base(info, context) + { + } + } + public class ModelFile + { + public List Models { get; } = new List(); + + public void AddModel(Model model) + { + Models.Add(model); + } + + bool Contains(string name) => Models.FindIndex(m => m.name == name) > -1; + + /// + Model GetModelByName(string name) + { + return Contains(name) ? Models.First(m => m.name.Equals(name)) : throw new ModelNotFoundException(nameof(name)); + } + + public struct Model + { + public readonly string name; + public Size textureSize; + public List parts { get; } = new List(); + + public Model(string name, int textureWidth, int textureHeight) + { + this.name = name; + textureSize = new Size(textureWidth, textureHeight); + } + + public struct Part + { + string name; + (float x, float y, float z) position; + (float yaw, float pitch, float roll) rotation; + List Boxes { get; } = new List(); + + public struct Box + { + (float x, float y, float z) Position; + (int width, int height, int length) Size; + float U, V; + float Scale; + bool Mirror; + + public Box((float x, float y, float z) position, + (int width, int height, int length) size, + float u, float v, float scale, bool mirror) + { + Position = position; + Size = size; + U = u; + V = v; + Scale = scale; + Mirror = mirror; + } + } + + public Part(string name, + (float x, float y, float z) pos, + (float yaw, float pitch, float roll) rot) : this(name) + { + position = pos; + rotation = rot; + } + + public Part(string name) + { + this.name = name; + } + + public void AddBox((float x, float y, float z) position, + (int width, int height, int length) size, + float u, float v, float scale, bool mirror) + { + Boxes.Add(new Box(position, size, u, v, scale, mirror)); + } + + } + + public void AddPart(Part part) + { + parts.Add(part); + } + } + } +} diff --git a/PCK-Studio/Classes/IO/Model/ModelReader.cs b/PCK-Studio/Classes/IO/Model/ModelReader.cs new file mode 100644 index 00000000..5c00479d --- /dev/null +++ b/PCK-Studio/Classes/IO/Model/ModelReader.cs @@ -0,0 +1,77 @@ +using PckStudio.Classes.FileTypes; +using System; +using System.Diagnostics; +using System.IO; +using System.Text; + +namespace PckStudio.Classes.IO.Model +{ + public class ModelReader : StreamDataReader + { + public static ModelFile Read(Stream stream, bool useLittleEndian = false) + { + return new ModelReader(useLittleEndian).ReadFromStream(stream); + } + + private ModelReader(bool useLittleEndian) : base(useLittleEndian) + { + } + + private ModelFile ReadFromStream(Stream stream) + { + var modelFile = new ModelFile(); + int version = ReadInt(stream); + int modelCount = ReadInt(stream); + for (; 0 < modelCount; modelCount--) + { + string name = ReadString(stream); + int width = ReadInt(stream); + int height = ReadInt(stream); + var model = new ModelFile.Model(name, width, height); + + int partCount = ReadInt(stream); + for (; 0 < partCount; partCount--) + { + string partname = ReadString(stream); + float x = ReadFloat(stream); + float y = ReadFloat(stream); + float z = ReadFloat(stream); + + float yaw = ReadFloat(stream); + float pitch = ReadFloat(stream); + float roll = ReadFloat(stream); + var part = new ModelFile.Model.Part(partname, (x, y, z), (yaw, pitch, roll)); + if (version > 0) + { + float _1 = ReadFloat(stream); + float _2 = ReadFloat(stream); + float _3 = ReadFloat(stream); + Debug.WriteLine("[{0}]: {1}, {2}, {3}", nameof(ModelReader), _1, _2, _3); + } + + int boxCount = ReadInt(stream); + for (; 0 < boxCount; boxCount--) + { + var pos = (ReadFloat(stream), ReadFloat(stream), ReadFloat(stream)); + var size = (ReadInt(stream), ReadInt(stream), ReadInt(stream)); + float u = ReadFloat(stream), v = ReadFloat(stream); + float scale = ReadFloat(stream); + bool mirrored = ReadBool(stream); + part.AddBox(pos, size, u, v, scale, mirrored); + } + model.AddPart(part); + } + modelFile.AddModel(model); + + } + return modelFile; + } + + private string ReadString(Stream stream) + { + short length = ReadShort(stream); + return ReadString(stream, length, Encoding.ASCII); + } + + } +} diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index a51cd73b..07b6c1ea 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -139,6 +139,7 @@ + @@ -148,6 +149,7 @@ + From 1d11faa3b00e704465f7ebb913db1b24bb2369bb Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 15 Oct 2022 14:08:05 +0200 Subject: [PATCH 091/110] Update Utils/grf to Utils/GRF --- PCK-Studio/PckStudio.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 07b6c1ea..03b67f73 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -200,7 +200,7 @@ - + Form From 5f8e93d828472c59fe5396cad821d2a690f2271f Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 15 Oct 2022 14:14:51 +0200 Subject: [PATCH 092/110] Rename Sounds.Type to SoundInfo to avoid name clashing --- PCK-Studio/Classes/IO/Sounds/SoundIO.cs | 6 +++--- PCK-Studio/Classes/IO/Sounds/Sounds.cs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/PCK-Studio/Classes/IO/Sounds/SoundIO.cs b/PCK-Studio/Classes/IO/Sounds/SoundIO.cs index 5815d356..a66f2907 100644 --- a/PCK-Studio/Classes/IO/Sounds/SoundIO.cs +++ b/PCK-Studio/Classes/IO/Sounds/SoundIO.cs @@ -10,15 +10,15 @@ namespace PckStudio.Classes.IO.Sounds { public class SoundIO { - public Dictionary Read(string Filepath) + public Dictionary Read(string Filepath) { var jObj = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(File.ReadAllText(Filepath)); - var dict = JsonConvert.DeserializeObject>(jObj.ToString()); + var dict = JsonConvert.DeserializeObject>(jObj.ToString()); return dict; } - public string Serialize(Dictionary input) + public string Serialize(Dictionary input) { return JsonConvert.SerializeObject(input, Formatting.Indented); } diff --git a/PCK-Studio/Classes/IO/Sounds/Sounds.cs b/PCK-Studio/Classes/IO/Sounds/Sounds.cs index a040eff3..b5350b69 100644 --- a/PCK-Studio/Classes/IO/Sounds/Sounds.cs +++ b/PCK-Studio/Classes/IO/Sounds/Sounds.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace PckStudio.Classes.IO.Sounds { - public class Type + public class SoundInfo { public bool replace { get; set; } public List sounds = new List(); From c86c232102cf9e39996ee532f62f57a856a10f6e Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 15 Oct 2022 14:15:58 +0200 Subject: [PATCH 093/110] Add BehaviourReader and BehaviourFile --- PCK-Studio/Classes/FileTypes/BehaviourFile.cs | 31 +++++++++++ .../Classes/IO/Behaviour/BehavioursReader.cs | 53 +++++++++++++++++++ PCK-Studio/PckStudio.csproj | 2 + 3 files changed, 86 insertions(+) create mode 100644 PCK-Studio/Classes/FileTypes/BehaviourFile.cs create mode 100644 PCK-Studio/Classes/IO/Behaviour/BehavioursReader.cs diff --git a/PCK-Studio/Classes/FileTypes/BehaviourFile.cs b/PCK-Studio/Classes/FileTypes/BehaviourFile.cs new file mode 100644 index 00000000..243d6a89 --- /dev/null +++ b/PCK-Studio/Classes/FileTypes/BehaviourFile.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PckStudio.Classes.FileTypes +{ + public class BehaviourFile + { + public List overrides { get; } = new List(); + public struct RiderPositionOverride + { + public string name; + public List overrides { get; } + + public RiderPositionOverride(string name) : this() + { + this.name = name; + overrides = new List(); + } + + public struct PositionOverride + { + public bool _1; + public bool _2; + public float x, y, z; + } + } + } +} diff --git a/PCK-Studio/Classes/IO/Behaviour/BehavioursReader.cs b/PCK-Studio/Classes/IO/Behaviour/BehavioursReader.cs new file mode 100644 index 00000000..1501cacc --- /dev/null +++ b/PCK-Studio/Classes/IO/Behaviour/BehavioursReader.cs @@ -0,0 +1,53 @@ +using PckStudio.Classes.FileTypes; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PckStudio.Classes.IO.Behaviour +{ + public class BehavioursReader : StreamDataReader + { + public static BehaviourFile Read(Stream stream, bool useLittleEndian) + { + return new BehavioursReader(useLittleEndian).ReadFromStream(stream); + } + + protected BehavioursReader(bool useLittleEndian) : base(useLittleEndian) + { + } + + private BehaviourFile ReadFromStream(Stream stream) + { + BehaviourFile behaviourFile = new BehaviourFile(); + _ = ReadInt(stream); + int riderPosOverrideCount = ReadInt(stream); + for (int i = 0; i < riderPosOverrideCount; i++) + { + string name = ReadString(stream); + var riderPositionOverride = new BehaviourFile.RiderPositionOverride(name); + int posOverideCount = ReadInt(stream); + for (; 0 < posOverideCount; posOverideCount--) + { + var posOverride = new BehaviourFile.RiderPositionOverride.PositionOverride(); + posOverride._1 = ReadBool(stream); + posOverride._2 = ReadBool(stream); + posOverride.x = ReadFloat(stream); + posOverride.y = ReadFloat(stream); + posOverride.z = ReadFloat(stream); + riderPositionOverride.overrides.Add(posOverride); + } + behaviourFile.overrides.Add(riderPositionOverride); + } + return behaviourFile; + } + + private string ReadString(Stream stream) + { + short length = ReadShort(stream); + return ReadString(stream, length, Encoding.ASCII); + } + } +} diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 03b67f73..c71fc2ad 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -138,6 +138,7 @@ + @@ -147,6 +148,7 @@ + From 62f699da23b72ffcde28986c8f768e10c00e88f8 Mon Sep 17 00:00:00 2001 From: MattNL Date: Wed, 19 Oct 2022 18:31:09 -0400 Subject: [PATCH 094/110] Fixed compiler error --- PCK-Studio/Classes/FileTypes/ModelFile.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PCK-Studio/Classes/FileTypes/ModelFile.cs b/PCK-Studio/Classes/FileTypes/ModelFile.cs index 260407c5..9e615050 100644 --- a/PCK-Studio/Classes/FileTypes/ModelFile.cs +++ b/PCK-Studio/Classes/FileTypes/ModelFile.cs @@ -96,6 +96,8 @@ namespace PckStudio.Classes.FileTypes public Part(string name) { this.name = name; + this.position = (0, 0, 0); + this.rotation = (0, 0, 0); } public void AddBox((float x, float y, float z) position, From b3d90eafaae25dd217b7e3f3e99ba3997a074239 Mon Sep 17 00:00:00 2001 From: MattNL Date: Wed, 19 Oct 2022 18:38:50 -0400 Subject: [PATCH 095/110] Added an icon for behaviours.bin --- PCK-Studio/MainForm.cs | 5 +++++ PCK-Studio/PckStudio.csproj | 1 + PCK-Studio/Properties/Resources.Designer.cs | 10 ++++++++++ PCK-Studio/Properties/Resources.resx | 3 +++ .../Resources/iconImageList/BEHAVIOURS ICON.png | Bin 0 -> 5217 bytes 5 files changed, 19 insertions(+) create mode 100644 PCK-Studio/Resources/iconImageList/BEHAVIOURS ICON.png diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index ff68d980..240f95ef 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -50,6 +50,7 @@ namespace PckStudio imageList.Images.Add(Resources.SKIN_ICON); // Icon for Skin files (*.png) imageList.Images.Add(Resources.CAPE_ICON); // Icon for Cape files (*.png) imageList.Images.Add(Resources.TEXTURE_ICON); // Icon for Texture files (*.png;*.tga) + imageList.Images.Add(Resources.BEHAVIOURS_ICON); // Icon for Behaviour files (behaviours.bin) pckOpen.AllowDrop = true; tabControl.SelectTab(0); labelVersion.Text = "PCK Studio: " + Application.ProductVersion; @@ -2830,6 +2831,10 @@ namespace PckStudio node.ImageIndex = 14; node.SelectedImageIndex = 14; break; + case PCKFile.FileData.FileType.BehavioursFile: + node.ImageIndex = 15; + node.SelectedImageIndex = 15; + break; default: // unknown file format node.ImageIndex = 5; node.SelectedImageIndex = 5; diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index c71fc2ad..fb5fdcd1 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -662,6 +662,7 @@ + diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index ccf6158d..5b171c7d 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -80,6 +80,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap BEHAVIOURS_ICON { + get { + object obj = ResourceManager.GetObject("BEHAVIOURS_ICON", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index 541aac8b..8d86b2cc 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -277,4 +277,7 @@ ..\Resources\fileTemplates\colours.col;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\iconImageList\BEHAVIOURS ICON.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/PCK-Studio/Resources/iconImageList/BEHAVIOURS ICON.png b/PCK-Studio/Resources/iconImageList/BEHAVIOURS ICON.png new file mode 100644 index 0000000000000000000000000000000000000000..7264126b654c9f67e82687fc2c68804ca685b6fd GIT binary patch literal 5217 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 Date: Fri, 21 Oct 2022 19:34:55 -0400 Subject: [PATCH 096/110] Brought SkinsPCK support for PCK writer from the SubPCK-Support branch --- PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs b/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs index 1d655d5a..d253dd30 100644 --- a/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs +++ b/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs @@ -11,17 +11,16 @@ namespace PckStudio.Classes.IO private PCKFile _pckfile; private List LUT = new List(); - public static void Write(Stream stream, PCKFile file, bool isLittleEndian) + public static void Write(Stream stream, PCKFile file, bool isLittleEndian, bool isSkinsPCK = false) { - new PCKFileWriter(file, isLittleEndian).WriteToStream(stream); + new PCKFileWriter(file, isLittleEndian, isSkinsPCK).WriteToStream(stream); } - private PCKFileWriter(PCKFile file, bool isLittleEndian) : base(isLittleEndian) + private PCKFileWriter(PCKFile file, bool isLittleEndian, bool isSkinsPCK) : base(isLittleEndian) { _pckfile = file; LUT = _pckfile.GatherPropertiesList(); - // fix for Skins.pck - //if (!file.HasFile("localisation.loc", PCKFile.FileData.FileType.LocalisationFile) && !LUT.Contains("XMLVERSION")) LUT.Insert(0, "XMLVERSION"); + if (!LUT.Contains("XMLVERSION") && isSkinsPCK) LUT.Insert(0, "XMLVERSION"); } private void WriteToStream(Stream stream) @@ -42,11 +41,11 @@ namespace PckStudio.Classes.IO private void WriteLookUpTable(Stream stream) { WriteInt(stream, LUT.Count); - for(int i = 0; i < LUT.Count; i++) + LUT.ForEach(entry => { - WriteInt(stream, i); - WriteString(stream, LUT[i]); - }; + WriteInt(stream, LUT.IndexOf(entry)); + WriteString(stream, entry); + }); if (LUT.Contains("XMLVERSION")) WriteInt(stream, 0x1337); // :^) } @@ -78,4 +77,4 @@ namespace PckStudio.Classes.IO } } } -} +} \ No newline at end of file From 789f1fcdaeeeab99e9ddb80a3eb139c7e781d24b Mon Sep 17 00:00:00 2001 From: MattNL Date: Fri, 21 Oct 2022 20:28:41 -0400 Subject: [PATCH 097/110] Added detection and prompt to save as a Skins.pck archive --- PCK-Studio/MainForm.cs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 240f95ef..77f1a6ee 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -516,9 +516,26 @@ namespace PckStudio private void Save(string FilePath) { + bool isSkinsPCK = false; + PCKFile.FileData InfoFile; + if (!currentPCK.TryGetFile("0", PCKFile.FileData.FileType.InfoFile, out InfoFile)) + { + switch(MessageBox.Show(this, "Info file, \"0\" was not detected. Would you like to save as a Skins.pck archive?", "Save as Skins archive?", MessageBoxButtons.YesNoCancel)) + { + case DialogResult.Yes: + isSkinsPCK = true; + break; + case DialogResult.No: + isSkinsPCK = false; + break; + case DialogResult.Cancel: + default: + return; // Cancel operation + } + } using (var fs = File.OpenWrite(FilePath)) { - PCKFileWriter.Write(fs, currentPCK, LittleEndianCheckBox.Checked); + PCKFileWriter.Write(fs, currentPCK, LittleEndianCheckBox.Checked, isSkinsPCK); } saved = true; MessageBox.Show("Saved Pck file", "File Saved"); From a3f8ff03c54babb40d608e55b8fb4f005526733b Mon Sep 17 00:00:00 2001 From: MattNL Date: Fri, 21 Oct 2022 21:49:41 -0400 Subject: [PATCH 098/110] Fixed a bug where the user could accidentally change the selected tab in the main form --- PCK-Studio/MainForm.Designer.cs | 1 + PCK-Studio/MainForm.cs | 12 +++++++++++- PCK-Studio/MainForm.resx | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/PCK-Studio/MainForm.Designer.cs b/PCK-Studio/MainForm.Designer.cs index 71bc9a74..8f5151f8 100644 --- a/PCK-Studio/MainForm.Designer.cs +++ b/PCK-Studio/MainForm.Designer.cs @@ -705,6 +705,7 @@ this.tabControl.TabStop = false; this.tabControl.Theme = MetroFramework.MetroThemeStyle.Dark; this.tabControl.UseSelectable = true; + this.tabControl.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.tabControl_Selecting); // // openTab // diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 77f1a6ee..9f256830 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -29,6 +29,7 @@ namespace PckStudio bool needsUpdate = false; bool saved = true; bool isTemplateFile = false; + bool isSelectingTab = false; readonly Dictionary> pckFileTypeHandler; @@ -181,7 +182,9 @@ namespace PckStudio advancedMetaAddingToolStripMenuItem.Enabled = true; convertToBedrockToolStripMenuItem.Enabled = true; BuildMainTreeView(); + isSelectingTab = true; tabControl.SelectTab(1); + isSelectingTab = false; if (TryGetLocFile(out LOCFile locfile) && locfile.HasLocEntry("IDS_DISPLAY_NAME") && locfile.Languages.Contains("en-EN")) @@ -190,7 +193,9 @@ namespace PckStudio private void CloseEditorTab() { + isSelectingTab = true; tabControl.SelectTab(0); + isSelectingTab = false; currentPCK = null; saved = true; isTemplateFile = false; @@ -520,7 +525,7 @@ namespace PckStudio PCKFile.FileData InfoFile; if (!currentPCK.TryGetFile("0", PCKFile.FileData.FileType.InfoFile, out InfoFile)) { - switch(MessageBox.Show(this, "Info file, \"0\" was not detected. Would you like to save as a Skins.pck archive?", "Save as Skins archive?", MessageBoxButtons.YesNoCancel)) + switch(MessageBox.Show(this, "The info file, \"0\", was not detected. Would you like to save as a Skins.pck archive?", "Save as Skins archive?", MessageBoxButtons.YesNoCancel)) { case DialogResult.Yes: isSkinsPCK = true; @@ -2964,5 +2969,10 @@ namespace PckStudio currentPCK.Files.Add(NewColorFile); BuildMainTreeView(); } + + private void tabControl_Selecting(object sender, TabControlCancelEventArgs e) + { + if (!isSelectingTab) e.Cancel = true; + } } } \ No newline at end of file diff --git a/PCK-Studio/MainForm.resx b/PCK-Studio/MainForm.resx index 11cd1115..5ed62a93 100644 --- a/PCK-Studio/MainForm.resx +++ b/PCK-Studio/MainForm.resx @@ -29294,7 +29294,7 @@ iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAYAAABNo9TkAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAA5JlJREFUeF7sfQeYFFX2Pf/9re6uuusaEFHXiJIUEAQkhyGnIecsMIDDkEGCIlHJ + vAAADrwBlbxySQAA5JlJREFUeF7sfQeYFFX2Pf/9re6uuusaEFHXiJIUEAQkhyGnIecsMIDDkEGCIlHJ AiKIRAExK6hEJaOgKDkniQYUMGDcZf7nvKrXU9NTPdPdMyDgOd93prqrX913333v1dxTMZMgCIIgCIIg CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg CIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg From 6e73d857f4f89b3d6773bafe6f8f8091d952824b Mon Sep 17 00:00:00 2001 From: MattNL Date: Mon, 24 Oct 2022 22:39:48 -0400 Subject: [PATCH 099/110] Fixed a bug where .txt files would save in the wrong location upon PCK extraction --- PCK-Studio/MainForm.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 9f256830..ed7a34c8 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -1131,7 +1131,7 @@ namespace PckStudio metaData += $"{entry.Item1}: {entry.Item2}{Environment.NewLine}"; } - File.WriteAllText(sfd.SelectedPath + @"\" + Path.GetFileNameWithoutExtension(file.filepath) + ".txt", metaData); + File.WriteAllText(sfd.SelectedPath + @"\" + file.filepath + ".txt", metaData); } } } From f85b2aea250e90280a874cb17386e05bca4843bb Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Oct 2022 05:20:25 -0400 Subject: [PATCH 100/110] Fix for crash when failing to load an image. Now displays "No Image Found". --- PCK-Studio/MainForm.cs | 92 +++++++++++++++++++++++------------------- 1 file changed, 50 insertions(+), 42 deletions(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index ed7a34c8..29172e0f 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -404,32 +404,40 @@ namespace PckStudio if (node is TreeNode t && t.Tag is PCKFile.FileData file) { viewFileInfoToolStripMenuItem.Visible = true; - if (file.properties.HasProperty("BOX")) - { - buttonEdit.Text = "EDIT BOXES"; - buttonEdit.Visible = true; - } - else if (file.properties.HasProperty("ANIM") && - (file.properties.GetPropertyValue("ANIM") == "0x40000" || - file.properties.GetPropertyValue("ANIM") == "0x80000")) - { - buttonEdit.Text = "View Skin"; - buttonEdit.Visible = true; - } + if (file.properties.HasProperty("BOX")) + { + buttonEdit.Text = "EDIT BOXES"; + buttonEdit.Visible = true; + } + else if (file.properties.HasProperty("ANIM") && + (file.properties.GetPropertyValue("ANIM") == "0x40000" || + file.properties.GetPropertyValue("ANIM") == "0x80000")) + { + buttonEdit.Text = "View Skin"; + buttonEdit.Visible = true; + } - switch (file.filetype) - { - case PCKFile.FileData.FileType.SkinFile: - case PCKFile.FileData.FileType.CapeFile: - case PCKFile.FileData.FileType.TextureFile: - // TODO: Add tga support - if (Path.GetExtension(file.filepath) == ".tga") break; - using (MemoryStream png = new MemoryStream(file.data)) - { - Image skinPicture = Image.FromStream(png); - pictureBoxImagePreview.Image = skinPicture; - labelImageSize.Text = $"{skinPicture.Size.Width}x{skinPicture.Size.Height}"; - } + switch (file.filetype) + { + case PCKFile.FileData.FileType.SkinFile: + case PCKFile.FileData.FileType.CapeFile: + case PCKFile.FileData.FileType.TextureFile: + // TODO: Add tga support + if (Path.GetExtension(file.filepath) == ".tga") break; + using (MemoryStream png = new MemoryStream(file.data)) + { + try + { + pictureBoxImagePreview.Image = Image.FromStream(png); + labelImageSize.Text = $"{pictureBoxImagePreview.Image.Size.Width}x{pictureBoxImagePreview.Image.Size.Height}"; + } + catch (Exception ex) + { + labelImageSize.Text = ""; + pictureBoxImagePreview.Image = Resources.NoImageFound; + Console.WriteLine("Not a supported image format. Setting back to default"); + } + } if ((file.filepath.StartsWith("res/textures/blocks/") || file.filepath.StartsWith("res/textures/items/")) && !file.filepath.EndsWith("clock.png") && !file.filepath.EndsWith("compass.png") && @@ -439,28 +447,28 @@ namespace PckStudio buttonEdit.Text = "EDIT TEXTURE ANIMATION"; buttonEdit.Visible = true; } - break; + break; - case PCKFile.FileData.FileType.LocalisationFile: - buttonEdit.Text = "EDIT LOC"; - buttonEdit.Visible = true; - break; + case PCKFile.FileData.FileType.LocalisationFile: + buttonEdit.Text = "EDIT LOC"; + buttonEdit.Visible = true; + break; - case PCKFile.FileData.FileType.AudioFile when file.filepath == "audio.pck": - buttonEdit.Text = "EDIT MUSIC CUES"; - buttonEdit.Visible = true; - break; + case PCKFile.FileData.FileType.AudioFile when file.filepath == "audio.pck": + buttonEdit.Text = "EDIT MUSIC CUES"; + buttonEdit.Visible = true; + break; - case PCKFile.FileData.FileType.ColourTableFile when file.filepath == "colours.col": - buttonEdit.Text = "EDIT COLORS"; - buttonEdit.Visible = true; - break; - default: - buttonEdit.Visible = false; - break; + case PCKFile.FileData.FileType.ColourTableFile when file.filepath == "colours.col": + buttonEdit.Text = "EDIT COLORS"; + buttonEdit.Visible = true; + break; + default: + buttonEdit.Visible = false; + break; + } } } - } private void extractToolStripMenuItem_Click(object sender, EventArgs e) { From 54d6396bd03fc3b1401fcd295c4722ec1b26f337 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Oct 2022 05:21:00 -0400 Subject: [PATCH 101/110] Updated ChangeTile Design --- .../Animation/ChangeTile.Designer.cs | 39 +++++++------------ 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.Designer.cs b/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.Designer.cs index 969ddde6..08aae1f3 100644 --- a/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.Designer.cs +++ b/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.Designer.cs @@ -32,7 +32,6 @@ this.CancelBtn = new System.Windows.Forms.Button(); this.treeViewBlocks = new System.Windows.Forms.TreeView(); this.treeViewItems = new System.Windows.Forms.TreeView(); - this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); this.metroLabel2 = new MetroFramework.Controls.MetroLabel(); this.metroTextBox1 = new MetroFramework.Controls.MetroTextBox(); this.metroTabControl1 = new MetroFramework.Controls.MetroTabControl(); @@ -48,7 +47,7 @@ this.acceptBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.acceptBtn.ForeColor = System.Drawing.Color.White; this.acceptBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.acceptBtn.Location = new System.Drawing.Point(55, 233); + this.acceptBtn.Location = new System.Drawing.Point(92, 196); this.acceptBtn.Name = "acceptBtn"; this.acceptBtn.Size = new System.Drawing.Size(75, 23); this.acceptBtn.TabIndex = 7; @@ -62,7 +61,7 @@ this.CancelBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.CancelBtn.ForeColor = System.Drawing.Color.White; this.CancelBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.CancelBtn.Location = new System.Drawing.Point(135, 233); + this.CancelBtn.Location = new System.Drawing.Point(172, 196); this.CancelBtn.Name = "CancelBtn"; this.CancelBtn.Size = new System.Drawing.Size(75, 23); this.CancelBtn.TabIndex = 13; @@ -77,7 +76,7 @@ this.treeViewBlocks.ForeColor = System.Drawing.Color.White; this.treeViewBlocks.Location = new System.Drawing.Point(0, 0); this.treeViewBlocks.Name = "treeViewBlocks"; - this.treeViewBlocks.Size = new System.Drawing.Size(184, 125); + this.treeViewBlocks.Size = new System.Drawing.Size(318, 142); this.treeViewBlocks.TabIndex = 14; this.treeViewBlocks.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViews_AfterSelect); // @@ -88,24 +87,14 @@ this.treeViewItems.ForeColor = System.Drawing.Color.White; this.treeViewItems.Location = new System.Drawing.Point(0, 0); this.treeViewItems.Name = "treeViewItems"; - this.treeViewItems.Size = new System.Drawing.Size(184, 125); + this.treeViewItems.Size = new System.Drawing.Size(318, 142); this.treeViewItems.TabIndex = 14; this.treeViewItems.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViews_AfterSelect); // - // metroLabel1 - // - this.metroLabel1.AutoSize = true; - this.metroLabel1.Location = new System.Drawing.Point(75, 13); - this.metroLabel1.Name = "metroLabel1"; - this.metroLabel1.Size = new System.Drawing.Size(114, 19); - this.metroLabel1.TabIndex = 15; - this.metroLabel1.Text = "Please select a tile"; - this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark; - // // metroLabel2 // this.metroLabel2.AutoSize = true; - this.metroLabel2.Location = new System.Drawing.Point(36, 35); + this.metroLabel2.Location = new System.Drawing.Point(133, 19); this.metroLabel2.Name = "metroLabel2"; this.metroLabel2.Size = new System.Drawing.Size(46, 19); this.metroLabel2.TabIndex = 16; @@ -127,7 +116,7 @@ this.metroTextBox1.CustomButton.UseSelectable = true; this.metroTextBox1.CustomButton.Visible = false; this.metroTextBox1.Lines = new string[0]; - this.metroTextBox1.Location = new System.Drawing.Point(75, 35); + this.metroTextBox1.Location = new System.Drawing.Point(173, 18); this.metroTextBox1.MaxLength = 32767; this.metroTextBox1.Name = "metroTextBox1"; this.metroTextBox1.PasswordChar = '\0'; @@ -136,7 +125,7 @@ this.metroTextBox1.SelectionLength = 0; this.metroTextBox1.SelectionStart = 0; this.metroTextBox1.ShortcutsEnabled = true; - this.metroTextBox1.Size = new System.Drawing.Size(135, 23); + this.metroTextBox1.Size = new System.Drawing.Size(156, 23); this.metroTextBox1.TabIndex = 17; this.metroTextBox1.Theme = MetroFramework.MetroThemeStyle.Dark; this.metroTextBox1.UseSelectable = true; @@ -148,10 +137,10 @@ // this.metroTabControl1.Controls.Add(this.Blocks); this.metroTabControl1.Controls.Add(this.Items); - this.metroTabControl1.Location = new System.Drawing.Point(36, 60); + this.metroTabControl1.Location = new System.Drawing.Point(6, 8); this.metroTabControl1.Name = "metroTabControl1"; this.metroTabControl1.SelectedIndex = 0; - this.metroTabControl1.Size = new System.Drawing.Size(192, 167); + this.metroTabControl1.Size = new System.Drawing.Size(326, 184); this.metroTabControl1.Style = MetroFramework.MetroColorStyle.White; this.metroTabControl1.TabIndex = 18; this.metroTabControl1.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -163,7 +152,7 @@ this.Blocks.Controls.Add(this.treeViewBlocks); this.Blocks.Location = new System.Drawing.Point(4, 38); this.Blocks.Name = "Blocks"; - this.Blocks.Size = new System.Drawing.Size(184, 125); + this.Blocks.Size = new System.Drawing.Size(318, 142); this.Blocks.TabIndex = 0; this.Blocks.Text = "Blocks"; // @@ -173,7 +162,7 @@ this.Items.Controls.Add(this.treeViewItems); this.Items.Location = new System.Drawing.Point(4, 38); this.Items.Name = "Items"; - this.Items.Size = new System.Drawing.Size(184, 125); + this.Items.Size = new System.Drawing.Size(318, 142); this.Items.TabIndex = 0; this.Items.Text = "Items"; // @@ -183,12 +172,11 @@ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.CancelBtn; - this.ClientSize = new System.Drawing.Size(264, 264); + this.ClientSize = new System.Drawing.Size(338, 228); this.ControlBox = false; - this.Controls.Add(this.metroTabControl1); this.Controls.Add(this.metroTextBox1); this.Controls.Add(this.metroLabel2); - this.Controls.Add(this.metroLabel1); + this.Controls.Add(this.metroTabControl1); this.Controls.Add(this.CancelBtn); this.Controls.Add(this.acceptBtn); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; @@ -216,7 +204,6 @@ private System.Windows.Forms.Button CancelBtn; private System.Windows.Forms.TreeView treeViewBlocks; private System.Windows.Forms.TreeView treeViewItems; - private MetroFramework.Controls.MetroLabel metroLabel1; private MetroFramework.Controls.MetroLabel metroLabel2; private MetroFramework.Controls.MetroTextBox metroTextBox1; private MetroFramework.Controls.MetroTabControl metroTabControl1; From 2d7ebd257019f6f1027e4fc120f5e8cce051ccec Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Oct 2022 05:22:10 -0400 Subject: [PATCH 102/110] Added support for PS4 v1.91 blocks and items --- PCK-Studio/MainForm.resx | 15 ++-- PCK-Studio/Resources/items.png | Bin 143459 -> 158431 bytes PCK-Studio/Resources/terrain.png | Bin 193787 -> 227548 bytes PCK-Studio/Resources/tileData.json | 120 ++++++++++++++++++++++++++--- 4 files changed, 114 insertions(+), 21 deletions(-) diff --git a/PCK-Studio/MainForm.resx b/PCK-Studio/MainForm.resx index 5ed62a93..6da6c071 100644 --- a/PCK-Studio/MainForm.resx +++ b/PCK-Studio/MainForm.resx @@ -130,7 +130,7 @@ - 167, 22 + 180, 22 Folder @@ -152,7 +152,7 @@ - 167, 22 + 180, 22 Skin @@ -174,7 +174,7 @@ - 167, 22 + 180, 22 Animated Texture @@ -188,13 +188,13 @@ - 167, 22 + 180, 22 Audio.pck - 167, 22 + 180, 22 Colours.col @@ -460,7 +460,7 @@ Generate MipMap Texture - 211, 268 + 211, 290 contextMenuPCKEntries @@ -33432,9 +33432,6 @@ AP//AAA= - - NoControl - 1064, 660 diff --git a/PCK-Studio/Resources/items.png b/PCK-Studio/Resources/items.png index a39f3d3d313ca749a5b962e22c58a3ce9eb759ed..9e57f97f20a3c71e27f3a92e85817220d0664e14 100644 GIT binary patch literal 158431 zcmV*2KzF~1P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D|D{PpK~#8N?EQD3 zWm#F~kH72W9B#gqt2$>=(@kn(D@u|iDh3=JQASZzW>iKUbsPhVii0@nh>D5`f+P_M zLN@{p-3^^nb>*s?PKN-#T@x3h?*uZ{F(F=iGhv+F`BtdEe(<(FH+Z|4;s( z{6G2sPjPR2;~OoL$yhFz^Phvkz?PSnZE0!Ay4~*9X=d?w+>*(p#bPn*_xslC_59~> zIP||e=X~OLtyc4i-=p7r{#43eBRZF3X&uXEv)hS0+<>DTDG`A+2-t4i;E47+5+UST^mf zn2lK>7uO}?*6$7M%;}cRooQL8HB{c1f9Gr_VbyZd%Ego=5*a;1+G6pn^#*}$Y}BmN z=~}5&wpOd@E$aUL`(3?Ww??Dk%arHvqUYux663v+2}`BYzUdBfnwXfdv9U3$ zR;vEDd_M2%p;Ro{dtYUR;OuejWyfoZ`ew(Y74e#XKc>q^=~;? zwDrN7H3v284w^RTbu8%iEY|E>vN5#WhN@xBS!Fe5m6e#4S5^L-X4!^WvOUzf1MBD= z8>*jLOvw$bl8Xh$*8`VxNy{Zt7E>AZQ>v?^Qo>nR_1kfQb@jq+)kmW+}N;YvuSPVLQ9{6fy!6sClYb5i|7ct z;<1zD`QpN6N9XmtzNOO~lWuzu>g9`iF%$u%D3{CO%SvH5j&Vq+(0RB~;77_9*M;~! zB`|X>KBMm>4|<(L9`cfSFOn$NEzIp;vrW zk@Ck>k%>yl;#1=mpP8`4Sk)4xqQxpjGo_(^AL#x)fxD~9>~?xmih;_L`%C$<0(T{4 zQ`2dinaSA1cv{b+q+{iBTon=stX=DMRoE)nZntg05K!v@^j}v6-qCY?_OqV}e&%O> z#z=qv_kSPoZV@Os&kMlxiiKf{>HY~{MwD@3OTj2}pHv24|N7U1xw*MuLlurO;6Bs= zDFQ#@E7M<3FGR^A;fFsLgMl%sH|kz-xDNTLzholmpCPJq>dPDQ&6=&Otk~4lRPf_J z{^K@1Jsl+Uya>j*)oxm|)3A+>3_)+j=7%x_ZpjvstG1S^Sv}dYcB*g9+|X(j8Om{` zvA|k+>9QU(A>WbhJ1cc#R_(-WycM&_cHE{q2^;H4F9tFc0{>l$U8~D5bh|@~bya8b zD~X|=TV=EshlQB@0cD!W=uW!H$xE_7~j>3v2{DPPEYy&aS8p~Djs!jW_u-Nw)d zG9WmYURMrER*BS?4pKkVfq>{Sgdw8d&nzqi$4{LKPO0u!*Ea&M=K^=agIoqf?;3z7 zIlM?05~|0grR6{dJJ2y-`FhWw(`f{))@IP}cLMKdbdO9X>r;%I16C9erQ_irdg!5G zeSJNU!UXbS%G?U@0K71Y7;&Ck=PTqSv4~d8AE0G^-h1H@GeBQ15N6Lo* zdho#qgSEA_bM7w%*3ESPwRNj+*5z4L0o1MT?No8Dn72W>U;`O|)?N1p{iW3)*lbAS z>Va#tf>^5)baZ}ub<;W<4PO~USyUB(3O%lOPgtewY<4DYcip)jEH8C}+GbzC8wB-6 z5Y!sFyFA*$Qq9)Z_54x*r$fANQ5CIc5B}f}{=iP3K5cJ*``eB0lmo^tEF)F2o)u-l zDw86>^8QpzR&_u*a6OFSKY!vA!TaC;et(Q>;qgh40ga4sl(?3T1p=%L*^KSkv&a9< zd7ZWZ+r(Rl+2}ipgT&<-cn7>bbx%ILKgQ;(U;V0m;uD{+Q>RYZPrd1<+)G~a5`SNk z>QmtASw~)_)os{%Z^PzeOLii=V5bTzwv?~S0JN8`W9QW@}f;x;MZPq!1cyPdRIrK}7Cl2>UZd(sm*<)qXo(N_|F1p^r`v9p|4B`+M+$I|kq>bxENm)C!% z{ore!hcS>Iwxq{hTb2G{73edm9Mn#|Nh_KI^(QxjNf3Wo15#hm0U>m@Do4r6W;qyPEKOs?H~W~AA>*r(?1P! zjmRB$++n}+E5Cv=`bXe}0WUAX14NeT;fEg%p7WgN*!O<#_u6~k``+!(tFF4r-uAY) z;ay}eVqU3HIzV5ohE@~B{fB?}hv5JGpa0|UIV$pm_UkGP?jKiW6_qD0+ApqTiSdfL z=?Uxap0vih{ys>3_Aj<_ot33`f53Xb|JN4FXB{*tHzuIvlQt&cPmgD8*L2GE?2g-? z{PD@)GoQbDE7w`s_}HiImj9Nr@p96YN)??uDJ9c=<2h)E;id8XuYUEb?fK7tzWdB) zJ`+6cX-}hUWW3|Pi~v0XSP`BhVn29`yvl+y;n*Mj(I0v6f8YZju#bK0V|M@j_hY$L zEZEHSjP2dGmoUZl?b~O&cki~{yLNkn z!LwlCAAkIDyZi3D?dZ{?cI3#B;G-Y?s5b4S{_3 z-kja_)pcJu(|s|L#H8xYxq?Eyis~EsUy#T4EPWe23Y|#UMRPKN1g#Y~O z_kC7uFrzRC13hWEVnzB`v0`~l4x}nWR8$z3^Vj;rKYX|9?_F|c$Ap{T)_FMxb4bY8 z#Klljayq%Zys<)3JX==bYeOIh?3Y|}iN7DRw)OeIz4zMU;luW+&wpNFYud>{+WeW* za)zE22GTi?NsLi8`waV=zxf%xPg=U3(C>}l`@jF~0{_2zV*>+}exfHX#zR5#h`BEY z{z!iHSAP}dkoAapFW{-A@)IMHBJjWC9q%{?{Cxh~zx|uN3HTa+{c zKfodFlwbO#U-I|IYX!VBjlBN2KbAZX{E4T% z0Q`I7N&D;Sl3iL(+D|v8ZM>Zda_xAKQ^)`dNQ%9s^vY1{#g(p|7Wnlj(xYww`0sh( z7JEj1-RBSMEeMX!4}xs6ueu{PhCPWHDYV$EONVQ1uM-!NYp>e3_03d2Vw<|}Kn%jO zATdDJQ*tFq(^3;y7R1n)m8Seb~rplF+- zi%>=cu)pa|Z#oD3zyJHcZ_j=1bG;GZd}ufEHwK`kziD*bdH*kc=}TMRLhnB+X(_MM z%hTXDkg|5?m#ixTFe*=3zH{qa=>10}P$lW{6-EqY07OgYT6XGWbL-bome#&!>s#pk zM@5EP6@apaa`sy&l*LxVnO6wBF+ju0hlU`en!Zs;Wq|@wo*df=euZQHGZM~=Jbsjr z=#w&yz9X;!o&h7Eyt11EuRJIt9s?!@<=^ri0YImngWnGxJm{Glo>DBqJ^R_u_J%-) zD=6j5R>AwFidJ+2b5GaXOj_|&%>Mn4?zg>nC2Y@QDVv@XYdW5=@rPnIb#L4ohbsr; zLBSO34wF`HDGU(!Gc?u-`~d&jRL06Gi}$w=+3VIO?M2z5-IU7t)b0!e3_x6U7grrB z#I^N$&+3X$AAG3gflosI_$x29-~8pAm0$bndp^D1-%>2Cf{s>lP^k8|4{)ryjegTr3x6zs|^&_MgsV|&-+i? z3F?22sG(gWCz}KPqDG5|yk9kU|V(j7Eh}iZ%=Z$9rr* z1^^XP`-Z_$p$vF;(x3nNpPvVQsCXo>09C5uz_Z{d0cc$(;2tC@9^*se`T!cCU4d9J zVj3ja6h>L}-#7G$z4=f&P=SMGmHMj0I7AN@qyt+vfA zwQPA!p_Ft0HdZVsoctDrHiUY;=G#-cG90ZY4UB#Ji@*4w_xyy@A^0bKLQb7p-ev;X zbXGbi+$k@{AZl2}`$v?Ya1bM~N1r5QPN7*OJHyG)t4~Q6sQ*!C7XHpLe&d{o0Z`8| zE`S1!3ZVa&fBBc~^x%UJo?`@}^Sw91m5xXR{*B|0*~yb9{U-_-83B|HrA5dOjfwt_ zB+4J9WMl0dBj8&=^%*vzY{kFfPhJ51&itcBzyn90&_}@Q??3VgfPQEGQ6mr&eWVqc zhCsSi2EIYae9TSbU(_Ioz?Sf!ANtUTJh<<=>rPr}Jxd_ghHmry;~)R{Hw6FQy?eL5 zMdg3?fur)n5POED-?=7n;`;i!H!c{1$PjQI-y;ThMzJLE{qO$n?>d;kHP>9@jX^~F z`F#EBUmtwW_k2%4Sn+p%`*)7>+l{uhHRq`2uQw?vhREG{-AAL5B9}-=B>P} zIH&yn45LO3!na0fgW`iwu6_oU;tTV?U%4fbm-uXl!(Iz{qE0iC_T8 zW-Mc+p~8c$PrOaU0HS+_E#jd9|3~gmyd1=ohn7qd7x@q5cM08B6doFnA@$iW68~LD z;tuxH6MKOIO3gbho0*<+KmF4`?Hkl+4CK3j?`UMBZ6yLXjcT+Jkj~7_`S6Q`Tnzl9 z0tROD*~Pi zz`yHV@3LEOz12PQna_mwd#}%Nn8xDLqGtp1XBO16PNKbWxo z@qzuCfIpY+TK3kGyYdAS?#3&}?1p`1+fx$tR~#ST9N4g?a+EiZs?K}=kN!*e#}4ps zY%xsap?=ra#Qs+0K{rL=yJ2zshoq|zLUvGQRF(h#gJ47nWogKb+GHX*7yM^gz^I^a z(Z9BI2%*j+k57UHP?My4xAY;cIz+fXUC1=Pm&+9zopp4|r@{&ZRM3 zY{X(H2VM#gMsngr*y?#P3Bel<iRTTjo? z7I2$F|5;)yx#KRg|Mm8*KQ1n7GH9y;-m2pG)y=a2#PeUw`;SVgkg!}fY=@yg9*J7} zzZIcwqh1@v4j{DnkAgpvfBo06Jt|@WNK$3MARuvY-=#<|!MpzQFYRvCJ!ureNA-78 zZ1JJ{?z1m_{`26@^~Bz&OEB2qVxV~T$h#wqQyIn8=N8T4O>cImHfasy4 z&mZAsr37BjXbd7_SF|#U{rU8RY6Qyljg0^RWm75F5kT-faREG$OwpGw4>az(;UeJk ziSVGbiZ3rO`TXT{!gWP=hKjK*k+M#}s2kmX?_L+E(gp(Tki7c74FJV*b|%c9$|l@U z`2#7*kgg+(`_tmPCY>&AS^b$~z=(`NNT}%#b~bmW=kr%{L)U3S@rHinS#y~7`L8?R zTq2p#Gv#DJa()z;xulFr%2Jt}k16Np7d-8z$6^%x2(%v-pt5o(58$GVmX?_@>*ov5swZ+p-aMJzxmz`Iiycz)_762c7LgR;gTkaRD1+2xnpp51%ojRw|eHoOsM zya9P&0C;(T9(@A-7k%f8+>ibEkNL*JE3Ul4HQVd9uy({&YA0;qIbKSbCtXe5)?Oeh(181wXz7GK|CZi3xgmX7vS8@5`m`#jVe0k;b8QZM2E*J)k z8V0%o4;|R!QkkNatJ78}3-FGv;Iw`E(_adp_{h~)hjBJW0f~VBXMgs8ZE|`{N~E~G zn6gYh>{X!b7fziCXym*0h8sNKM+NXBcYoz8V9zlUupy@B+aYj7y`Jji_1>97^D)-K zlh?6YZPV8my#R!LAN}b6mBF9%IQHWJup%f3aUt}PPm~5v4rl=-)lZOrC@32Lh z#KmaQ?W(Cy!Rk_UrT$RymC``h8ngsrff5(bfT2WAg`Q4WRu(v$j>%BPEaUr=1eE$v zi9sSASr^^6rMOw~U8m=3$nu$(m2y&8#f-^RT1G9cvPp_R~w>JU^_o3bp z>Wez&eCl-HzWt7dO1u>@y*EO-#>VD`R}hZreq8b#x#gByoEV;OAIRmhvY9fDah1d%Fy;S6LzSTwCP&hiqi8$JFv9u)uuw5 zXQ%RZC>gf5M6`b=_zQ`YTTI5RR)||e^|#&&tXzuO{PG|m#vg6)Lw17yyPlbIu~b=l zRF-eat1RV>rJJJi!420Quu7@0-SxMV6<`2vyz$AdT$zwAmgL+*N6?o?+Sq8>=Rf~d z|IU#i0Qh)*#sVOPV$P-WNh^)z!~&#~QX3p14v4`)OQ%Bv{G_Ko)t?^;z(-{G9YcXh zP1R-C5ZU#NT1>!?2Y}+s*!%G|xm;fLStjJ%{%zmBLtArz#1M#8Q4S;mKHdx9M+N{e zbFm1#d`Gpoh)?}-G0TD#IIn@0^;}ZBg9U+_vu{WHXux`8dA3o9!t+k=2$0(g>QF)sxIoITyI zqkA_^Z!4zN6vdM9lu59jKt$7Vim?ToXY%CK6JmpmSL1MrQ+d;e<-Zfde@>0C+AnU(Hg z9QA}M!@2oYUywBRjS9d=p8vdOIR^fuGX=d-%K8D=Nvhsu!0H{MUFy{J3m*Sv1G?^o7i;Zk$^^z;)T)W+}mg4qiUH1U| z3`>^I!}=&;efm5p#k61uefKyMMySvE`H+E)k5BmlLSW9(V1)tjUR|YtH9-;ZAf(6u zAe`gDuZ$7+BNo6X4-$3_hBTAEVE`Bd3YdHm3y2;JBareBNI}vV7#a>j4DJo1@CCzt zlwT*BlgD=$fh^$PO3KgMF*s<>$Ge{uI((NzcVrb>6*e5{T|cbpRYH9*X67o7AzuLAD_`bJn`p>_6TR6xD z@K;N5SFPl2?`}o_%J8Ka0jPHob8AXh7^qWFIIyx>JEsn&rY77KS6pG2UVfSMCGVMD zo9<&Jj6MdO&&_(v&YWJhrG*vgO;3g*ZIx=#isgc^LtV?c#9*|lFB#DOP)?FG;Cs&k z=|QZYu=s%SkTh0HFGVnkfQkF*!fcD>wi+t?MmQnNcSGwxa0-(Hqaowt$!P~b^ZA`Q z5aIB3x@^4x__?3^IsFmF;$#e|dpKN>gfRfjC;}3Jo%8raSGlP_u44d|-_9K)5Z)NU zD)Dd;3&2~E_#QD4&gU7t#nTIKw>NMPj1R_whCf(9F5_nbGAoed{yAiT0+@*CQJ{hf znAt_2tDa3b7uZAM;0=H%J+lCr706{}f4G!_5{88B4g=+ZGBbXnCWTy;VhU)(hQQg8q3K&HCrUn%u-W}t%ZctT zob1?{BQoR-F#wex19;+kfrJQBLIxnQF|hcCt}R2*S9w3!3Jp$btmt~G=U{Hd|6S0l z)n#;hVr)Y_!$1bW1pbtaO`%Bn>RN7K@BO#1z37&!x-Oqj*eC8(Wl5&TOaTgj%-Zw> zLxJ=D{o`T)go*8@fG9m-UO-m5g>!?>RWAjU^wzRB}NCqG&rOFi;@}48)Q(Z_;j=DhX#Y0AMOM z6jKdUccM|-&RKV5%nYowt9#Hsg_9ac&-{-{5hejPWBo&%QfFKE+`=H&BvIGi0C0oQ zDunbt1Yg*i9D$f)Bv0wLZsdWk6d4F^f<(XbH#aA?>2pkpyG9BL1BjH-Dzu|$n zm%skjz1wZQG;Io87cZy^3J3w9|H|vp$am!rWB`UT0Dhp5fDwq2i+h>VXIz%np9=LC zeaw((3{=YLJ4S$*oPJvW+$e_hQMN<|ff-#=ve-~SlrhmK*ry-`TfMV9v%v4mjIc$| z-QWawc5{7KbC3bvt}Bz4T+NB;|? zumc$ZMbst-q!^qqK;=yND-WR(<;sjUKAEk?6j16IriI4~l_0Eh3_xTALMK2Uby)Yb z-M|z=BcQld9(_2(^REjqYf{Kn#rm5n>$=5)wnDs~*p+DJOwum7vLMfwvZD_-?EWv; z{@!d%BrpH^rn0OSivE0nTUE;H#$21;dv z0f31!G+gME4(M7cH;i65xo6g9cki*8**(f%@=RfMW!=`-83Ef=9ip4kZ)Hb!8aPkb zC)K5EQD@XChD8iUhJtnzv0J5fU+4Df*650DcfmE>YW`+W z3A7O5A-#fcQAOhSP^oB)2$eqqH^BEZm$vT1ajuKP@h||KdxXPfv)iEubI+-Sp_H3@ ztgWretF|mIkDn@+EKms0m$7F)0ImH@{bgMMKXp&f8_4RKth{PoL3e{bB8w@0O5|kW zD``<*0ZSgOCr>Z*h#tpvKdgIS@7uSsE>|ka+X|HHa^j1NVg$9mHzfOZh}`Jn&Hz*cD*OdCxDv z>)OJMSd`eBC|pmK*d^>Bh80j%_`b&_iutGm%9k>vtf?1(9T|I+g8Je&&LKrc8082Z z1EU7BelXM6_?Wy{LQ216%PS|WUR&@6V9?#LVYg-j#kVon_apPhr<1m8f5xtQVkLO! z!J7U1hgTF5h`!f?AffQ5?-f^1fDvdYi9`fq18r5)Vp~bEbxpdE$Y+9})^vqV+e$)d zHlcTt@g0bP1Y&V<7=VmSx-27CkOPpRYdYv%&L(&9-ZBVBHtq2Tmu-EiCKfo5QOeoa zL`eof;g6g~QXq>30;f_^e4C->Iq4W|X>w}X4j#PJ_Ut<#!%?(mqaFOwAHU0Pecr9E zwq6$tXxg&aKwV)bv^uA9J+ZKGPCZ95H96@BZ(+80{B9sG9*E@*nsNp;vBga>IqA1p z4xs}Lld4$j%TWwz8-Nk0Tn1vKed$dg$1xxTVV0qE16*O?sbla%{bRrr3F?#{AegkA zpz0SLp#I%Y{^U=3aHA+p3VGy_NBqMJjDA#DG_&k0U-^nZ&fpdl3BX2e1vGAO3`J6` z>(7&dIh2WOU{TM^&H3Xx#}75-H-v zrvSQ3i$AUZ{J49{>}wDE^M(~^o2oitYvef{*8{c#&F!H~Vj$VrJ(Vg#LfUzRqo zJ-ZWj_uXOR%XrlsYXQv8CM{n~+Q0s57!yv8D|U}}t(X?8kTTKk5{R+|su(#q4|GD1 zSfKbXDZ|MM6%igz-l$byzbO(5X(E)6a>wX$4hx#_ znahQ2fI5m&K^&XLL&eR(i4zaG)2AP{^|jLq0hVO|)|G1VO41{}cc&F{&1-MYyYh4< zIC6Mi=QgZ$rec-pgzGfq>Ge7Tzp9I(TQRFZz<2GKwYmvg>?Lezs2E=*Lc0lrpE5Fc zRi|>-QK3QXr$^hHC5tlVS5GN+4?BJoxYjAL`?k5&R`RlM`!+t#lMnyvzxvOrbi3YeioJ;i1Ok6wOro=4 zwbq7j56I+Fwz(o}I3npxN*W?Y=TasDW&@R>2$weobh~1(sUxNYbG`uYjg9K}-0P$> zs`{|Yolp1r*T3Gs=;_m^{fW#5Wb)7d{lEVgW$++8bLPzUEJ4N%FizmAtFCekcEA7t z=;h^QpP$))Odz2j86$uq$v|vR5oVY#Ez``FLlIFflup<5`I!yKH^cJS0(}JdQ9%*ZdYAhw7>nUuiKMuyu`BsB%6;rCS!GL3M*+Kq#OnH%|XH* zTTOZJU$rme9y-wuFanp2wOu9<_&Z{V@@6qSrRt|JQ?&7e<2G~EtX1|@#S>!E%Uq;pff4pwSFT|!En5M7hmSMU&e`o+fCuEPlQI|U<KSFmf*v$_^udai(1bU{@-NbEl`pb`7|k@x;qWMRE0DxY;ZdHmu`$tEwKv;$AxZ`FNcR-GyaU%Tz7 z-S@@g_S{!p=fOXh5uKtEoXu<_!gO_U~WtTHA8 zpz~Fxgg?yI>-9E+LSe7{k6#V@^Rr@7mdMyfvm0y!Us&1+`fV982&0CeAN1Ubwa0C9 zxCEmPMuCq+Q{3hsU9|e?b$jg26HLVxYf@>iNq5AW`n|CKALfU#j@APZ^%vW|_<8^` z`eL73G&2G}!gnSC;rVxhe^l@wBqRbipKpHio9$JvdKK&dD}E06`HbcSkT<&js662b zPhkAKoj7@dA+zUze^dfO5v83n`NOZWUH5*(V)Fbu!9Oa{ciIi6ih|bImmt-}@4~;JI`~7G(wKKlQ0k`9wL6f*;`+=O|88 z6i34&G|_pmL-7Is)RcfQG2x9su~;|<{9KP1Q*Up+*+Dd1PS9d0r=;(Sxzl;GtFPPZ z!T-Q1=e<8HVD5pWJ?(k{YuCEn`ikjbb)hTsE(S$Em*g2Qeap9;kW?XOX~prWVn!iQ z!VlW2t%u|4N5Ox?vkuyAAAZmx@WTkc_|Fdqwe_YRTw$r42n(gq;5V+2)3YFz1#2e~ z4gvnLv3(x=&$#)C?$QH$TvmpW_&O5r^)Cc|fR9AK>2H7Tme61u7vp1a5CZt$deiUv zgmju=mnKr!9U6u~Y~b4u=r;6An@OU1{^za-5O)6|(Ru)k>4;_nVh9*l=Kt6^=O2L; z>;(VldBl%VerP}79$gFs+P@S0oVPtEU?hJu=YMoD5c2K>e{>!)P~K>bq-f6n=wcuM ze<%1y*9M>~kC}Z)G+JzQDk;F<3I5ShWvwm^d||6U120<5+BWzfc;Er+HkJhXvJF#X z^l4clT?~Rj-=!6{2q%`5&s$Y&f9s){Zwh+kukJazo%WUUHh1b|u+i-YuXx2Pwm~0x z{GGr@n4w5wn)aoaUMd4!_tTXzB&>=W#qT3(j8qLr*Xo2FLb_o-(Ez%dsW12e18> zK9N)|F9VR50m$k8Nm2B!Ezi~LtN-@61N_TpHa+<7x&5fU=BJ-&5%@6*)v3Je%3v^p zj&=A5cUTvJu@Zzocz@PP>~=PS>cn3A#kc;Jz4(RCapE(Um-8wrGz!PBh7x)8ZNNve z(hC(i72cELenqs^?0h*PWB4LdG``-6QG6)x+ z4fx*o{-MBMa0~@Td>as6Ko#zY`M;S&;D`QScG+br^KdmA6`mtz2jn{!1Gy0Rq5sei z@{;!K+2iv^GP)SZs6^n0{!dO$x)#HIWdK@xryVhWB%_Ogj7kK4zckoH#igyQN*>sC zhuV&qKaz`0CW*ig{XaMzxV1Vh^J0SXpo}d*p#6ZqQ(tln3h4)F8^*GP2C50hoC)}P z=A;x4WkSlCq09fFFULbp7?$pOX-}hG;p)(-ZrX z7#%n>GacaZNs;$Q-ucdV+Wh<(>-AeQ0E)Kb19J%(QN14EXR*&~uAT7lKP=$a-*%7H z8(Ev(HRg@LtUNKtp5Eie#-=O=4W}`WR(BfsMup=M=tsfN5>a&fMIIb)PQw_n{l&n~=jfs!cui&l zf`QGNDognR_{G4#Q&^>yx!`_q(AtL255O-5{+;3)Edh}sl!`;wi|Kvf1tjH24wopL*!u+``;R+hFlXAwsYh+1LNYHt20g%3vf#&wTsDmW&#K zi-CTek&hRV=RNOv_Sw&d!&NT^`bd}xOhWK<^a6xE0Y#sf5CrIv2>g6vXvW72ZgX?V z2E_cajwo!;k|{9(CFWbT1waJwFt)WA~r3s3 zYwv_#yt7=WS|wk#YOyLH6}>?~r#<+`_S-N1!f)93y!yq?FF&U+k5#F=t){gF{`&Hq zedVvtF2IQq*fs=Fl0mo-@DcJZKmL%eb9Uw+-abkQrAfm3BYlR9N@8df;E~iCo4yU; zo2>@`J3M*v@t{(rXOBkSg2ezYt*y)p-zjvhaZ0UqTuHf z@Ut)|T~Xe6=pWZvTV1mQ2M(OW0xl+a|C#A&7xj4#RiORV4NEC58)X3(6TJU$yrMug z;rA72w+A-A(zoj_O`XF6E+%;Y>-Y8CL@}^(jzK~4=nT`7L|uF>RZ@$=J-)77pjgq* zfJ`S6N^#$(PrkEi9|}g`smH9P+qB;jN8X=TL`}EwO_Dz{Mlje`2jz`zvZS` zd+*1N`E=QA$sM8&hQz4S11WPP-wgbGM#5ME=593VGD4YTAW!c-KeBjg!-GGf{Qw^( zKwAJQpDEi|anh!%v$khyukD%MV-wX0&jz~fji55VOSJzt?fbs>yPRJ+sw?mVUF>V^xlC*%aie!q49@0LIGWg)b(fu|IhkzYa}f zDX>AkVf`%@a4{K;{r%`HScqtNLk3`FV`yhq!VOU_CZn-Gvj=CY3Z3#8fN-!5LRTL$ za2X3?@+6}D@+OYqpfnogbkDp1olC27MPC^ihHOA3M&x3ke`KX*AAI$xBKjaS%b z-gu+`K57hh3g90VbR*^mf0?7JZ%#lbMXmqHs{ZbZ5iA{9wqtjmkdewbCuYfdf;3{X zo&XboIQQK307z%cmNtUu_c{!wwqY?mICPxPof0vCokoCjBj86Z`FsNA3xxp@_#^sH zf%-fuRDXZDN(=}x3iL>J9`h>+VciA{y6G#?9~$N#1$rbqkI``GhiwiRhd(st3bk5c zYw9S_BiVUObtW&)_yC4sG^c$=7; z!6ui_Ot?=SnLp16M1rS}K>xtfhV7jicl&nlatAKE!ez@<+qZY0yY04c^_)i^ebj&M z^!5?p@4D+QdH6}Ud-trn?6ON7hZ0wOJW}s+fR`anPtQ2V>)x+AquVzw%Wt@uL;F2fani@1W7lkMvah-|MucGhvSd zQq84(`uCr@*&73#A)llO^tC^KgZ~_rLN;XuF~SsM{OcWCcx=%hr`s<|5%?n+$nY^_ zIf@Sm^_hTIE|2*|TOyF-D4FkpM8~2YfD&UJq(6?9dVouRJez^g{TBfq27nP571{vg zFBOwIXLw~vqM@tpa zQeId%uKo%R_p*Zkc7=imA?#r>zP+m{l$bpd}v z^|dJ$BM*W>a15f?Pw|Rx=!?95K9g`5dZtjP6!WkOZ@=%XA}27Zn4y@;$@3+>As;js zf~b4%Tagd`_5ZTe*tBcQ5p1d=+PY7x#XxE4=*ZxoawQ`(%yMW6W14L~Q?fm~_SqGe zUSU^Wezoo2cL0wX?A|*qhm^2i`lVmDTW@`?qiux6IvLpI9hBHpV{^kcmKJSg{Kep7Re&$f;hb>x_*2;UkX) zS6*?wd-#!igDWq;fwOfrvDa_^_HXx@iT@al$J+mqT+9G4h$LbSfIsTX$CJqNUDOBw ze%cDc>AhPM75wYUTFD9m7}4;H8Uesh?*mlT&n;lm5KIDNA}7K!VYa$)Q6m8O;|KRR zYf5eO?1`ab$Dr>$c``P%e4=m17GoDR0)YRSR}W?Ugm~ST*M^BOnl&;2doF*PwVNA` zmSmI&FVD!lYPoFXVqVlYMT5Bodj38m8D$9Cjk>L^EZZ0E_-arS%|xDc^UW@){6Gtx zU=<`5L&?erq>75!b47D${jO(dsXS_Ht9Im}d;RD+q*_Tz?dd0G0v9VAg?q;_Sfn81 zQ7q8MU9z-jFRK}~njQPnm&3&@_UzfK(0~k!D?BuURr(m!W8i(KP)h z6N7%~w;v7g{D6OM&DkSIH`sK=IRQJ17fOVaVY+&mK$JS4Ov?yJITdf~#r&+gM(y10 z#&1Oi>55~K7r@_!O{)5xjNFS~_mlweA2?8Te*XY5HrimsITVJKZDwk>?caZi9oT=V z^n2F+@*h4K{LC9)Yt?GP{^xJ}sXgHdH~9C5t*Q{cenb76GOU{`OSUQluyFF2&7C;r z4M42hw3O@H<167%;K&f{6hI%zwfiPqTV=7SGHS%6l6uIdp0S@v%CM&~iszIEgYE+C zo19Lpr`TVK?*3sXG*Eunc!+8_nw-mL3VtwCL2(L2x`2C_I0#8>SoSA{_`8SmJ=LP-Te?3FcICn9HND_zkxR{KO=mYDaGj+$(aVcq< zVWCXr9C&NGUc)k-FHgV9oNyweCj+4Ogt*e2Am!c;0V)%FTr$Pv8i8LGP_44x;)G53 zA+}W?0%S$YWXJuw1x$6Oaf$W$zJB*zHg{&u4jj6~uDSjOE6Q+)bNi6RC*3SarYy+h zY^Zzi27YGR(y|otxXm4tM_M>3<5ZUi=vyM$Rd$t!-)e(-;!G2kVUicjen;0!1hniU#QEO) zCu6S4hN?=mbVSO>;FN@7*K|T`NC^hDyjHh|kA_oz|0A-0|Afo>F#vHtExOj}TT=#< zfmPK~#_gLbisH+Yt8V?|BfV!@^uIbbW0O;RY+_=U<%(4~keID+*6nLwyN@BqZfa^; zMsOcYH*9FrKfmCOH?%9Zws^*tPoJ>mGbhCe=B%~3E(5CHSe-|@-QM!zJ7v6>bJ9Fr zx2Uqs`b|(bgo{mm)>Jq&s}5ucQpL2T^C`ce3N!o&l_*92&txFKRzP2hCpN|GK<|jb zUNG>p2pP&eS)CMf924VV#Utm}8)$pnC~VigWQx7>b>IEn-@R=B03$&5AeDmi2_W(E z0GLK3Xg|j|FFFVCM(6U$bx0gXIOe^*girsSo9lP169$0uY0Ti73_tbO7o{J09;O4p?+Na}Al>_i&Vh(_x20Tv9C`_VNo@u!Q zd8vY!Fe$Fzb!$K4&rkE!<(abU7m<`lrAv>2L`+{^+3d4`relezjLMTuO&MZ4HqNTB zQ+`(2*!YxHWDsa|&!jV+Metsf!KS>+gZJHU3-j}~|Ik6Z>Y8i)UUN|sqc1Xj?Fv9O zr}KyM8ZsWW)m4H2q@8;FF*|+uAzPa}sz+N>8OrdcyOv1Nwm^MRPt*&OunLw;6m?&y zYDVSB>OTY9+*DZCq%ED`pq?X-|&^a zj-aUi-Mt?8zx0DMwucLsh?Cx`@^C{;i$=Lw*rc3G*{;cgO;)m&)b$v#$&AfdB4?SL zj9YQSvW0O5X9+l>;W8d|){fBgRjcD-s?&OB)=mg#R#I0iQCHts^Im^t?v&C=TN4}D z5G&Z+Soa2iH36axKC`0V3DxsZ^@UA9Z+L#%g@8t*)s(ZT+j^rZL!i(Py;fnx6|T?& zkd$)zDcu5fT6L0)rHs88Qcln0QobjEDa;)li4v?jEp|0t9+%;pwTbco)Icl0gxEmd zms_jTQW@8!Gfj^lzt$!t$y@*`n*{K@#naP8po_o{?WSP^Bfv3!BSpX-74k>mj{ppK zIiK&;p*IqAhiw@Ey7jm>fAbj`5YCUDfkqeF3qs1T>+4*GfP!L-0DpUfpz8{m{yw-K z=(b-j4C=4^F$Dbl>~mL zYcb~^n~;#Q*C0Hs(*-yyDR_M;^0d^?fX#jS)s=?9DnpobZ;OAb9k308VaC*<{#R?LQ7 zX*n4nrdD%JmURo5O~-zY$&xCpApKE_XH`}iB_=(wW0L9+FRc)aX}QdtLumYK);Dcq zdC?nyWf_3wxzn~LgRr^2=5>^*ra3XciVS~sa@w+`szQ^L7z&fcRhNB*5(@b?#2VIR zG}aWdt*vj`S}kM{ZQ;bBmolE|te606IS3zVJzGv86COP;7L!XAr1rG`;5cQ7y=Ncz zaSV9>nXy?hjxn91`j!6I^xW&U4Q~WEH(Yc|?&Sx6@CQ8upbY>60PrHfMn-_|0H64h zG-?1i2cV96e3WO@Fz}sgkdIH!^I%uS`+fgqe0YY)07dtW^75U+Wd<9IEl`_rQDM;P zmj`22pj_65DzKrDjmL+gvwc{M=g{9Q5jI%cw4lynnF6>Jg;jtvQW{nSD&)fjLK2K- zRi@+zJAwT?gdYM^4Y?>hT>1iod7TTJWp^|4+c&q3@@21cxtEW~V+LQ-hU2WUqq8!C$-?FOTipn<& zF!h~r64YZ`p%a}QjQcJib`h~*`}#s&!^u*}ZGtURN8rP43}!T@wobjE=zL$hjI)l*TayO^5Z(X2`|kUu`8fgaDGTB~e+(K} zk|iInSnrN+^89^Pq?ZAZ!q7Oy(%=|?QYoo8J!xP5ayYH>qB3l{th{1XU|?N9Ut81w zN-ZOZ5@)4+c`0E*ab7_lAXnXMmFYvaci$m9cKn2IS-&l_(XJXW@^m#?Vk9?<-S9{^7S*U1>tIqjxYbBynRa6`>9X(=7YJ` zTXDD1PFkZUHV~6HEfA_r`Fgnd=9{<9y0{4VZt2W%f&Y}PF3#Kf>av(Y-D4pk4_vH_ z+vKi&w)@cK{xhA)1lL^`j`RP`-~3Ix>Wa(VV~;&zXHK8?Mqp)m*;ZE9WCS*>$*NT{ zXmS$gl!pwQE0;^QYih=JPwmm?9-EoirFt0i#)3guGLNdGjLlBV`^%u!=4(N#-EzxI z%eJg%tg)ThRy&&y0dxl+0svqpe=IC4e8b&==^msPfQAyhWYh(ShX%+r-bM5NFE$v6 zk$?ic?;?xnJ_7i;|HWqhA&dv0CtzZH++hG1$>%2o>9<6+Z2i;o7oGWsFdl%OfYf-^ zr9`b1YFXN=VIWVPw$rCt7oGWsFdl%OfU6EMjFIuo2)S#hV&tk~vS%krY=m5pRjoXpxM z|JMWdl}B&0C%oo5SGru(@`_2Z*OK)V%heX|x25BE*xa!PY;)y=?z?W4lJkpxX0v7c z+~@AzR-zAmNR(gl@|QPk*RG0NUS=&jv85p^KCx(KMV^l2cjNag=*W?9W!tQ%(SRNk z8NPf@U@HveeFj#{4@E~63MmYteT6OwdITXxfWNl2FvwMVL_Z`)=39OmZ=*eQeh!7a zWvQ6A$?>vXvVS`G%lCcWUiX@3`*TO-*WUSA+cy#SzeVR@00zOpEw9TXZ?Z>z%r4n8 z;SGQogGg?(9t6vN@*93wD2 zJ>}T&-gg+k1i7%bD)AuR%JhN$w zr%nf{R6c0yy6ug_)~g>C@RoG%wmoqFLU6|&j|YGs(0}MdfzsP_h5z9b$IhHt*Q<+C z%ew~xwv*=wS4&n1BM-uS0KgARA+=gFALbg#uULD?o{$uZ zj34bYl$~#sR4AHKC`xliyREQ!ebp!BabmYV|1bQ)FUZ*~1{f{$zp3z)-Yvin@Zb5{ zKWQ)d_M1HTKlU?6>{q{Y+4hZvWp_dhaA{@LR`t9!u?~8~XbhoO1-bdwn}aK!bVV?= zcgp|$$Rm#g8?}w#%<(e;`o`j?%qL();a0sxh#bb)Jjkfv?MKt7_y)WY13=!Wz#{O| zyMV`MWFVg$XFLFOKa$b>JMYiD06cz_Muk>h`jx#^=C<5l?=UL+-}dv~<40*!e3zQ8 zL6!2@+leYjy`G?pn6gv!82E|Idf)r{DHETRpKF zJpNCQ2Cc{1mS`5-`rzo$wkJ!nhj|WSOYr#VgZH|DRf&uj5yz;XW8i7t*(QtC$ zTaSse9g*{6?uO!ER!LUsv;ylY^%(~vEWm|W z#B_eG=fVG_hd1qkqYZzZNTw@En;lPCz1hc^st)O}30dGT|Ci_a6n&4_Ky;kHqu&w2 z3(9}IoU^I%g1zt=SNh|*OcIxkYK2PaiGXiU^nVl6GY>!Pt}XZ}&@71Z9pCXC{^VRP zx0QcOsi6+!_X|LV27vYv!Xq|^6@rX0`GmAINYWVBYKfVwt=RIy8C#q?X$xmg%F)!e zjR3N_zAWbndy(Ok?jRBH@4o+(z4m2KwjcZDd5eEJEW_{ljwkxhh1Df{_~@hd*zv=5 zN-Sh?b^<`aInYd|{+#mq_&wb7< z4)6bhTff5{Jannzx2im7$G-A!54lIX3qfYh1-q}_<-vdDt6yplDF52YkRd$v@>_hm z`_KM8=;!Le_?|0*;h=7Je(|B;?Qe(TN1$iXRzSZK_)yQcY^8>=@yyCH!zS>=$`=sE zB<-Gi?(?31em?%6F{s8n+yS{??o3KFd>i?zzGA-~k zD5_kk_?3`GcV8Bx_4)PHpC5f^QWt-pH2`g0o4GBFvyc`^;<_#r#|$o=;9yY6s=0AIW9Lkb_}WjtGQ1aX^NTo1nY70>s;|Ir)nu|4Zw^o9WW zsLJ`~nXY~5!Ekiw(&|!h_~a3L_{bx6SVrLJsiSs628KNz5x^fYfVpFHeh+~|*BtVH zBZnV39IT2(tSqfu*Z?2^|IndB?#3H$Ja4Ulo#&29}+V1iWJ(#e=hC5R@ z5!lhAyukUuKMVS|*!O&oyvRsG0B)xjvu;0S4?K9(ga1N8jEWKH4}zdKOe&6#>HTCj z74r)%RD`Y6&VnC_s6R#kVLyJ_0OnSbNSC-@^SGW$K$_5kAo37Re8ES`-gtg{~pxl?D@|OCqva`WENHy?D*;9VLEx-9)0*x zd+6bZ9I-!4;BWupZ?_FOGJ9Zln+?GFNWSEEzHB6nDgTeO4IrbQo<>5#i=D^6kpUT% zXdnIagzWwjVWnL7=|wFS=cKo$TAm|YdCz9N@D)z4XKijXY`_{7W??0hX-j3;SfZfB zXHLd|HQCa>+lh9OY&zk=|D2mHcd_)CV#A_uEcJ>h@0H4lf>w%_(4VyS)8KdFZdv9J z{Ih-O?eDXP{$;ZdEq;)x;N|pra|yofBXX6kv#9&XFGWCZ88GkSo({BK9b>| zjQfNnVo8BIVaJZIo&)}9X6VceLxNdIB0L`>(CH3?RyQv1r`J%~F(8W7k1t01F#-|z zky>*g#*}ucblCsS04yY;`lH_?+CO?c62BRTlz3;%uh`n-RUw8yI60ON-t*zF2Y>Ow zulc_@jN$QJd@|h~}t*a`ty{RzOs0x$yXfk|SF3UNQP?AAs9 zSCq^2>egH`H7wdL~`VTBRFP4-hhzBm(;}s z@J0Y06<@j|X;el%{m!<5Q3mj>7=er3-&c#0zcl~zw>bZLG!T+@N_6Jgci1|xLppst zV;G-~3f@1NX2f5~GWm*tUAAPVWZ6Phf0soB+1SB6_@D8lL#}5z8?aV=OyDO@R3dU@ z#h2w;!|Hm(+;YMJ?!S7+`}{os{7e7kzt|W5?1*m%_=C6nr3e3wZ+ezX4N7k1)DahS zBI6i({euUI|GzQlBj7)_6qYN4N)oK+wIvboBkDiuK}Oe%pjeq?!v-nLj6^O*`$s+h zqY7yX`K&8f!fnb@D#wlbz_;rEM-swbe9abvu)@hOk&IVz+bR0{58wJ?pAdR#7}|@2 z>U6?htkL`oc#G17{>FfK%8wC{0eJYxToCT06ejlVt8FsfRt~h$u(poLAq2I0D<~E+ z?%`u0l@Ia3S_2^?`sgR`@ZKJ;Px_O;d%NBD`I?>hLc`v1>Rg7B&t(0e9|j0JCPBzx z^u)mM@=*f(cznJik@t^;z&GSx7m=v3??N&P{^%3An5Q2-j+_PGMbIbtX7|_s!W3DA zox=SuWN7^9TX`>#EfV2W_dovxhRP;V^7aCKIx8j4%Dd+#EK{7cq&|o3B@g}^uifi9 zLEd^n#(Kk;dHq;_lnaxY8HQzf_&vYn(}iRw=wJ866`y|Nv30wAY{D_3jCuLULk~UV zfggGOof5GCMC8UYiJ?A+))FJY`y)GPKZan`^QTium&+IZ2+6UDDa#cqDxZ`AivMU@ z-C!tf%Nv3Q+rNE_BBvixb%0t6StcW0zjXk0o@ za8>89cq_@}iv<^#-sB5;R?Bvtg?I)MSRt2oboKr5AN;9p9KFka|3%aG*vD`8;Qy`p zwADI+U3T^5{_Yc%s;lHnHeOT+$sne5(K7MSu>$g)K;QXyB#Z?JxzbkJDc{ITUo79n zV*SzMQJ#xkBa(~VUpf54lcKB_yo9Lsg|Do*6&DuWpR+D-0dGGpbOnU~7L!Ge=Pb^U z%>1}zN;CHC7rj2X@@cQ};J@aYtK3>AXHCV{ZLtX2pFC9+@B=5Suha_q){qxzDfQYt zm%p@Vr6+{jdqejT7ywdz@`M#GDe9In%Sr*pW)1}zf#(G`-QeEx!O$}weot8DJH7oV z=$}x|x~ob#cS)(@2F9>p8Zi?#JC%3r0E`j9P)9-|ZX}G=;GAOCxoV!#kc_*(a0z1s zMp*!!KPlHsKY6}bwqj|_iscC_Ri|uheA=$L@=~{d&$Qb;U2*$n%I@GSDQ_esuE1Wt zfJSz>xa;+MZlm6|wau2|`wcs>)tiE>tT(sQh5lw{B%97QePiAFIsNPigVLgOp})_* zu`G#;DdumxnenVUv#=hdWDsFSgdfu1fOY8;$)q25Lc4?C9a|V+0~husq!GDP%vdoW zdiV$CLhk?S-}|`z{uhqfTaTwa_)n~Mx9LB75md!CC(Dyc6IL#i{Fsz@BIcm@H2MMh zQR>ez(x|{dyn6*`JG;RUz;Pi8?gtX+cm!PXN8c~x>5$eR6_=eS{6ve-PT`$+{;hZLeE@V0?~p;D<6+o$j<60umzHqFz+Ht29fA8fFL-f4 zE9|aayKMU4Q>@l23jA4X(ZJTDyDg-Pv>XqHT^q7PY+Cd!oASd)S<-6qni<>m^nLb} zH$20K1Aw2;r;7IPdiq|mfN?)~rnSE2A1a+^PkoMlaHB87NlHc_R=R0#fAlImUt^vK20u=vg___jxW*Jzk*wNJRS; zSG!EMU}e_augI85d5h&KtBg(C?C!m`Z~p z_jniq0RQ)&_?rJDMUv0t#M<&!kpY+}P52pqOgv*WAXs_qvB%D7`Hz4f83aN)7!QoZ zw}Eg`Xf~imM*I9ZMq?H-dK?h*8#e^}q{vXv??3A4FLaz^JFCQ zkKsOX^0fWX5B-n_Kc8dcla3i+Fa_SVhqARB)@g0(v!-`y`JtPMT*k81irxBzYlG_a zj4Mx$Tf7(xN|#rCLtoV3SH5E0VwqS_WVB|Hsj*YuRW7DpisEV*u%#uax$FkOUSpkWOMhO*x%1%a(J@aBprEJROGMQ~d z5T#-&?uv=P<>Nie#`~5OgAoPu4S4O&z|r^z=t<|%{!CW%cg!l|GseWIF{P@$^OjLCgD5>1!1D^vLO!6Br2q=6i^g(&?n{?ql!|(|lQ-0?LzPzNI%e%=^RcYK$@~Py+qOwIRWE8@sMf=m?n1(B_ywXKR05-s9 z^gRN9mikZ`V>tYD;0Vb23`W-lWNR*l2usd6F2L&akTn3(hz%$Otg8peF%onG`c`jI zq0!?k3d(VBfdqc?@~P|i^CICqCMiYNjU5ahZDzm{l zfsgH^ytIxp$}Sjmb^o3ynyhy*ZvwhaU2=uZTz3LMh9=Is%a6p;IZ9s@3rqUCuVVm+6i*5FG4)vnkDS^BAK2<i@9eRWJgACt!tz{e-2^<500RQA0h0Fl1)I`R0% zvNhM{Y?Gz32c6)|(yASuYj_6X2imB<7=F&kIU4fVX&D1BHRdN1eM@rz9zEG~>rFAU zKsu14D^_(fy^Cl4mgWLHbl;tB>C91ETRv@@YfDyRJ%C0-zNT+08{wiL^87BFS3MNM zeHwjNr=A_bfZ)7fA~ZrW60p%^#%5I-q0=P@ zfcYEYlLUaHPZD|gu^PW)NobOy0@N;dxb6?KmJHq`rm*dgzT$AzE9QWH=i}J*D z4Ho$1cm2->0-j8f1uXg@+RZMzbn~!$cvng`&~+6%D4zh&ARgws%LA|`onIS(b?$Wq z7X4^;sW6_;S;81Cr}uB`eJv@&ShC5?t)wb)(C(009V|h_v)}3pJf;QIItX1Fip#lQ6B#ADBOh>8PSh0=y zhizl-A#2t|`I;M2nwH5KE1bw%Rtl1k*N-RgrYc*79f6p~P_&mV(-{)V*3vp`?32fU zp1!;}gMwJPtD|zF&4Qw3ZJ`X{Pf3BcQYs||!>k|LGxS_xn9~n71^P(hiIhuZN>&o( zpP0b=Pus*KTaSh7BIH@!NFj}0N_3o#_kDw$Se~EJw-siF)0)A8*sTv^WXxI}0hcaB3_-`(Pl85GhDg&* zTgb3|SxJU~R2ECC$Pkod5K5{O85kLW7*nftUvSEdUBCCE>M+Dch}CG`4!GNL%;s1t z+<)OjNd)5Pdz3LsD0$@dy;5$SzcWR`cg`gb=Of$;z+(iW6oG&A8k|oeZ)805i}C|( zy)X$DK+^TLF5rg;GdP6=Xjn1{#i7kWC&+7ulXjRc${GL+L<6vRZPk$yMvGQ^LL1(n z{Dc^SzwVV&rLuVjR+Nf{ow90dPap`#hts&io&z#OgN}gK6i(!=bfY5EIrm*E@Ly|_ zhpx8V*oh3UN$;B0n+wLgd#HxnfmF-do>%h$k%Lf{)|2H(0#_#*;2XUhwC!k)i1mO;KUYMG8h<3 z7G+^*Hmfc(APaiU;v4m*fFwYLO3w^U#oqFM>}3|jGnNud$}5JZO@bMGS%EB(WE{Ud zBR*B{7GlGzm2^U-F_0dr{Cn*UJ;RE?zbf$aEG@62oR`>&`k2bGvwls0oOD=aNO_|t z((wqZz8)kT=idH4GPE9tA>2a)FzRJVXO%Cc=V5&;83*hN`I{|KHGu*OoMZ1hM*QiSNsOK6e7|ZCUeg-@ zu?+U86$8M<4!TW!vM;|F6-GnxTYhSvn7|D-zUNZiBWCN%OSW|Kq^SO)H(D?h7Rm52 zuU8As3;1S~zfK%dlSDx-Q+8L*~;UywzN zj5qG8Qj}FXK(m7CbExv6!KzaAYfA#+34xz+_mfkTHZ~?@R)|L&Jd}RWFh?lBf*JIo z19n!4V&Dqpv9h$_N7gMb&ih$-8*2&|8k@>1qo#WD3x4Q1lBzqpZ_&Hsb7!Y_@0lt& zC-D14SQOgkit?o8F{{!gIZmTw)&GWvq^^j|X`~}=$745DPTteE>b^avQ5S2gZKz(F zx>x9+&{1M~8vRnDOuSoIe|jDn)wUF@CC1onFkYac)bz%~FR-iMU=d94!J(kX{6n{r zGUU~Q;{VdLynoel3hy#9^l6N2f|Z>^HjU9j7UmbW-#ZdLn}fwursy@YZ2%&$@e&b` zqvHUQV-zSr3@uhT(l4}nXYUnVgHQ5}8iMHBkwk!wLIEVY59dbgfV@!(&tdeJo>A59 zC-tbZFa&S_7NYb^g)6@@%Mt0gvXPgqC{bwrsJL7p(=i6Iur2^C;Q*0os($@Aff&Wd z5TI1#Pq;4hPsdd*35*uhPT<$|Svkm0u_V^sG5`*`F5olkj!zUxr9zihaCE+D*FF9D zZbo51BAF5G-LS<|7=R^F!V9lySguqY{mXhuU2CW-vCyZpe7Rti33=LyaZ44-de4mg z=?6Y?&NV7y6;}}W$Mb1RiSNgxfJuc6X{A)XZ3)GnF)3ys?=+O6wnRVIrSx^mOGc9k zI|&koK)^`lbRFoe6g`$=`!gAwAfYFcQDCKCm+;1v<+flfmW`LTUCZ>YG%e}cIkO$rv2cg zGz)VkSwUIPT`l?R$Wy!8Ch_%#?zt-Cv?3;=kge6w{pGX-ytwojMwmp`2HBr3H-QiD3+dqm+@DSqVgp9$#EOB+JR!+KyT8YY9<3Jb)f^I)1=FEyXF{?EOLA^N))*FeSoa>8z^+m~KJQ6Y_ zY%eBH@8szj|L^3HNqGLiCq08Gs&5#SaR&S>Ac`!WK527D4%_m{6INFUFn{7i0QlLE zr$Le8lHsDbkT~{UGlOAZQtH2J@{*1{+f-Z_0{#DC91fv z*0ANxjx{lK3UmBee!1<03L&MCpdi#v$P4Y#g;!MvT~%d__?{`GVhA0vA!Y*hXfyDm zB-1joMT_AT%ug<>g~-M!xqUV4>)y4RA5i#syZHN3Kqmt_=X>16~0zz^_A_dR}g zECPQw+dY+G!&X^+r(T!ts@`N!u|bt`R?MU{a*;0#ww z%9ms)CM!0xZ{P&iDgUz&LMdN08o%jzq_4U5se^r~v@zYinzML60l1ypolH zwhaRk9cR%G{w8mfA69`JJ9fi1@q+bwZ z;|IRe=Vv5VB+>EK;p4$To|qbs$$)qRAnFf&eB|*BzaYp5-*P5=e&xq35}g7ku>;+J5*3zSAA(S<-p?>~B+BYrwA_vg7)c)puOGP)25I|iX#$T`Qkf}UR&0F*=o-U=h53xW9i zZxzevaVL)s_*1?cOn|4c&jTMe0PV+;%lPTJpmBcT5*O|r0QeaW>qMF9iesVErNt!= zet=K<`svd??G%i_PyN(Sg=}EyI5Cl54*S%~nmu}Y&i=>$`4bO*03XQ@WM}LbYDa9> z*wz9gV-*_+WMFR~&p(tUpjUvz zMH32)V5xmeWplw;m1WS_iahHX0P4v5cc60;yuO}K4yi|uz2TrWdMKrX0mS9?V|w8)$*kb@f7a(P3#SByMu7LgaONrv7=VHiICZCQNtqySX*!Sgd96{GFYuGi^4E>=_rKS-H{AHd8|fwtwi=m34@@O|tCEuf?F4@W_HSh_0LCNo{?YwM!-a1q ztlA3r0e8S7$a>Ofv{U>~;n#D-<#Pi6mhsR@JUR`FJ0)BP;{4)LAGANOaPLmV1Q%WnKt@IhRxnUy1)|U0X3HB8 zLMW#77Pr8N?41qA%<~z2AC={$6@`*V?C8;>D$Bf|EOQ~?^Ed56qY|ArIlU`bUq8Fk z&RWfv#`w;8%YC{dVh%zS~~+`qu_ee#%oX2z>sYmk|Ah<_ zt;zm3#c=-DOxlKpaGdw306@B5c8VJ-D_-UP#O^r6nCRH~=RuJ!^!{ui1FjYu#8uz{Ttoy$8A%2e4wXhcRs zfSm#hXdF2aG(;~M>_hqR?4R%Uw`o5TjZ6H!txskIuuKVR)uVAxp$qfad49UQ=FXh< z-aqpCkwkyfl^3yq#l`u6$u~!j9JM#R;SCs#OG)55}O-(}~71qOuS)Bw12AYhm< zD<2Oswo`izhCFyVgLA{fAo|ex&4mYjm3ZKGCBz1JA$$B27o@= zrKP3wRs_b&j{=aLg4sM&g(teEs78vXq~gAe-4_OPJ*FeBxdUp_BCVABP*{!$$O!>_Vk z_kP5R_dXg>;2l{~DrL`X+)kYtT;Tr1x#9C8w5IxQy;LpQO}=BU=nzqu*DZ@!V6&Gc}Ii>PJn$OL-5tFe${_QzrW-qFY$j5mA5Zr z!m#K_p#87CFI;zUr`+@QKeeU5{Gk8tH&@Yf^!32u&hsJdkANRh|0ond&ITFic*t~k zm#B_Df7=(&@%jM&Vl05Rk9CCt-~PhybbxtOF68+Uj&bhzSXI#KxuvCLTi;sDmBlnK zWCTV%KHz7%GvI&s@BgfQ>f`@l`OMRG|2J-(9m<6~Kf*E2-LvPQJ9zLK*KSGwEos@p zgcZkjS$^u0VCWbM9(Q#4QrE7t;RdOa3wB-YhRK|a1&hgMtz6EtD2mrFws)&-*6p%` zyMj;O_H}EBT>*OLyG%_~-QL|(Zf0uSs%3U6lA(b;GUmZE-=Uvg3hFCo3^>W>Cb62#adK<+baUii#|r+AD#4rasqN>^f4aIQwoJ*Fo-Y?9hFfQfMGx)7J!5fWFTj-X)k{9OV2X`7ZTWl^0_moPb!R9uv)zV zb9A@eyJ^4tW6wIr2}ls2feQ(2A(tz$4=TE%PU>>SKF!mi(TTJcE$sPX)OpE=~a zcFp?Va1sESt;a`q4Q9qSul;}JA(z-}FhNK(EM=|Zr_b3nm~+zEq8lqERfw?wP)EXgfX}!t>E_py*6PK@ zX3UNptDUoJFz3ux1}>WxEfWY5F}ei#3@~JT>W;fWGCQ|H^xMz&8S~unVGV&DysvP?ZY4b zuy+K=Xjl*#hhnkdR#zE*yKeQ`x;)ydz|%ICGGAR;32wQ*WWV+&x7+C4{!!o~5%6>A zxMOr@xmvVqZ`fx~dFrKh$5%d}`-hFqqhUd097?5ehqq29OL~?`8H1|A(Mg-#z0YQ+ z^)BP-0IHv!n3Ymwtd-sE>Hi>>cC;rYg0}y?=8A59rDcbYEZX76PuuBJ^WJkaI*_mw z2Lbz33W)dj?U{6}dwBThy!SGD#tyj2+#ajsW~`X5_<=x#(JHgx=}&vQA7E6fl)T5k z=Yf0dS(94`1$B(CHkWthIz-Osc@-vfUWPJWeSO}CnoD<$Zv{+K2 zbM9X(6kSS|kwHJB`IFaP?&3n8lLZ~>*$1MVBIu^lJSTrfipVabsVogP%+wXuH@DpUmW&n66*GZl69T`ZSK#a}!FYb62P`qbXUMRp`!WX6kX4KU zVMC`~^VhF!g!BA=_`m$Jzy7FT002HRdFj=zolIF%v8Q~6F%ie9Ogr^PK#UK~zmNgI z`!E0Xhir0o+?B+>^0m5UHfoj<_^sYlNYu9FRyhATG6a!C=0}R?vZAkrYRR%vvUIs( z$zsKzw@jcqvk-3cO{|XqdvSu6X3e*s@ z&^y9P;fQ{mgg&ADj7aSW6E;X#H9KWfg*{f*XHM)R?!xwmL4Ob|tt{D-pZH|yQ_Svt z=w7?w`WqM^=SOuX0fS^Hw>rx^79W`oTShx>iLPT-c zcMmoa9rs;)qLMwi-j1HXFRM9JOw2V{@rN$1q0VC-0M8OgNjRS^#Mvf1tr#tza#l?B zteEUtCNWT9QsfK?X2)389tiiLV|Z^d7tV;|xEz7b8d}oPeb(1C!UjJd^C!0&{PZl) zJU>pGB*4;#NKXJpz&8e}tcOyJq>Kpbi-k$Ba$jZ1g z39O*^C|NGceEgK7}0@<{=jm{xHaHiuWo z7*nn?!YU`;h=v!~57Vac-YN%KgpKuZFE{^+It%Z@TmcLK^9C>ilnskVK>s}h;JidQ z%Pu43$z(8&U0YpRv9+Z&-GfFZc>;YV1(caRGd4amt@n)^Bl2pnQ548FyXB&+5}vRJ1ZqF@ZHMkCw0$ za|sG*fnLT~DM6R80PRFW1HB)sBQYGkR;P~imLfe2vrQ>fg4WW2g&|~XaFYM7vI*;7 zx}&;*@d0!k1Jstb0-O+@p1A@nA=upW)z}7^w`jQ z(U%UxzF3?ir*|sJpp`4E@GO1mo={p9z{kbpXQT)0UZrcJQ$y;NjYA2&a?*>G2dFNy zr6=@=F`y`;=O@Gqb(VPmV2QY%8H(&_NMAn#ei$6(*^J)D<4rnE9?S>j5)8r zDwdI>Dp)STWFS3nLdM94k_^g2fBHU@@MA3WuILZ{c=x2dS5gKKBg-+wz4E(Wtcr*RcXTuMM(3mecuT^BaM#E6jo z;?*P1@BbEvNj#7TxsF8!A`C6U2Pb6UlSv|UyD$uxMkrPW+Ek@?R9Zcli9pxYd-Rpp zUmNeLYY$Z+Ln&WhNi*vONeSq= zVBEMUWYVdSMcX$SAFqm2#nLSZ+Y$Ts?=$NC6BtMgfIj_tf-;(zNJfxla{^YHXWo>u zZFo;X17SErj!izBzDsF(c8`ru&&u1!ZLQh0^;XX|WrUhiNY4SM>n1 z~<@ zk=0u|y|b~fyt;6%he+jR07T)u5n!Icmg4hpst79A_Xy}y*8OaL2?az!!Vp5b6H@1h z6_Ciwlu49>Zp5wZ0#wX30g9BYtrzX+-Q|o%`0AYtZXMwoY=kxlFg2}vGH+vsc~yc5tlcbwpMT3h73WY zJ+!u-0JuO$zpE=n9l$VT@M7|uaUVN6WBbdL6fh;jo|57x``!AQO1fpwwq zY}yhn$%T>8J!CNa-hMt$$OI5{6l2BO0$IHu27&v-*1!_)#V57SGw})dsdEfaSYEI> z<_gG5V*peK=mQ1-7DMRFuwBox^$zSSKnTOU6P^cr5x#l@fF9{x0Dltj%W)*)N@4*d z7IgJ2Q%;uEQgyo5Q@{R&%82Ko+;kz;4Rxe)kzV@Ihx*UI$#>rROkW7xoaL*$$A|K( zpjgF*!s0=BL6*&`HT%KKo;hV}wVvH}&l)eR(m>f1i-;1jTsD(5*muoSAXO%Go#%kg z(UAA@m%rRE!uYw*ea`2nQvC@MEEyi&&)F{Mn);h1n>mN&$(S(osZV{17H|8BpZE!W zcNv;3Yxm?_aM=gmY3;+u?c~q@jtVaB(*2HN zc*Sor00qV3d4W=_P}xOW#V8te7I6sVMdEhicsuyV4?kG|?buKMOP$|*%1fJ#9{rMNmv0A+y^)`e8v3{ui7y23&O04Oj5fG+g@;jB|W0bIlYJoD7^F?Jr- z)%9}|a9SPDRvjQovQY~Qa)d0x_re(ZP1kd1Y?$py3LPBdIb>wSM6$YHA;*FqqTI~w z*YmJ-T1(~9R?;8B25d!HDIt9_Zoj5D9)m<%2D-{8&yE42QvH4b^_n+e-k8bbhr0`H z86q81p?Jm?*F_14F#xOzZOMEmfV6dWzb7y#@GEy;W`SSSMj6<1v0 zcdq6BYwUZj=WOX2+j{6h7I&T#(Bx^AudkSh3h1w_ZG%5^>3)0cRsV&8aVgQSf(i%l zmjwP&R@tT8T!uCeXg=3jUg~axfA7Auz4B#u`Lb`;!nlo=UIJ&{HSG5no1x%+I0U=V z_3{UTA8l;LIv)Pypcf4Z1WDhc(%w8`0zykz>hZ)O8Ub;58|Hlv}^nW^z|?U831Op$#F<|bs1fR zQ~5sX`6KWv7Iy5MGxTi$w0sKuY?YN|#FEg%4Risl_^9WPz%T3Q@a|BfFqVT3r@i%z zh6eNC7=lsHAAw)jaf>S}qQP~m>m8bU*{&XbSd?bU`}MhuF=#Z;U@V-4ee&U!1|4!iVl=r^+A%jeUxgpd6{m?nFDyFbv09aW( zQwTixih3dB!81#anv=p!)OR2Q#V*mijCxgqSXu zY^+#Nu$fT!M~96^e+ra!^T341md3Y z&{c{kUmPeIg#m^PN6(FxC=6Lrd~aESHvLh?lI zcI!Ow%d0qV1@&-IS04rd%0z!K27niU3SP+btI*x1yg^6QsU`zb>ngtDg+&Xd8gaAd=dnqrx2lXwt|ukNhtu6D#QDAj?u8NBs^9Qo^nI(k^&fGo0Eh3#0LX)30N5R< zpt56Ww3ZlAqa#+P@1ym8S(CXIDTJ92a>c-?Ds4}tyq zd%t1_UV6aXw}m?f2mgA~7XEd?YTxzU-YERnU-<-1%>n)~>2ofZxBDNsKLGeVJ34wH zL4OgpUMF<*4eF{7*e?mQ4fXd+w8I4Sy^_t?B{LIt`QAOjwU-{U`wt(nFF!W#YSK;W zkQJi|_4L)ctU)11mM`SbVIfE=>1P>wXUsieww@V0^}0PC{ICG}`gw??XhKGok<@6P z5B_v2;kpCaDp@4QwAMIFbZ6vo!iGPrZzhu!NU~P1pYQn-syx4{E7nPcK#L^?fI{FQ z0Y4Ltm?LoV}j{pSB=ho1Gv+u%n=4ZwH)_`|lbbiZc- zuXx4PR?OvHm)-}_QWix?%L`;xXY}Z8WjRN3vU#vq5f;B1kSfjt1%{B563wX0rj@?( z$io-RfAzk7t}kQRbGkvYs}P`P1$qCm$$?cTFaQdn%7OjE`z`pu2h7+CpAqCsOJ;Z7 z5nn}&7`u5%DaTI4H)bM&;b!LY6Kz!5bad0=XUJR$PPp3%b>gA^S3Yk z3tdlu2+#4K2nGP@eJvaj7?-8YE6!(PS)o+0&5gFt|K6925q(EEecFBI^tKU5eSXnS zeDs9<_?irsM6}jLE2H__++%2&SPf4`VKm3`Sm@q_5}kY4X`AcSLtCJpH( zYaPN2%DJpvwrkd|pUeca`>(LKee8BSb?S&+b>K3W&zF4nrf=Do;-)f5)_?SM$7AHSs_>I;>Q;87_ws*1V5gCbF=5eBB&#+wE&35 zLQ*snFzi~@1xGwT;Ll`oE>M{vOeOC1!cmTq9J&3C_Q1zpu=UqB76#K0UZ@y#9jY!C z0RGvrxZQMR_MF7ArefP(Uw4(^qFal_KWX2oHDy3WsgEz52>|~)e&%QFkN)$I8=q0) z?*~tu2p&CkCXl))4)2SG(w{CvsP~}pFD}Cg`0@OJ9}%1P^5iG;zOv5=dAB&_Cj*k~ zSuX1o0);a<-}9dL5bB*X?<5j{PkPp~p5^~W$5^2`E2S?NL%L7?%;EoJ@rTb2`HlqO zleY8gA1&yql<0dV1ocNg@)7&q4-M>t+D(Bk;4UQ?#?w-o1ObSL6a;zKuXeAQp8!AbX}*#m9nT zEz9A%Lz~W87PFsmgZx#y#WCDp%IW$_#_WoymZ_1 zL;LgjjLXPsvz0hP{O1=9xqx5<{^S?3cJ$~UcRTs3oq*7U_X_Hlcf|ZT+;77jiNA1-w zdbzC&Gm(G+*81zykf~Vg~35)<6h|sMrEe&a`uHjBCw(a^$ zing@gJrDdc8V;rLeis_udBTS4_B%z*g>Oxa}(xSil9=AjRiFav|*LyiHBjtswL zCD){*qM1>6*Ijp>@A=bdw<6Dv$6*E(FF*m%=t0~QQ&>{F?W;ERpI>9GdmcUy{7y03 zV0}aP8~WC8y2LUnyexefQeKAde(v9v>~%l9N6Okc5BwQA;RP@(2NZtGYJ= zXAJ?K$x4@<Gzy{{`QdeM-n;l>#hqwFS*3*H-9r^0^Kg-C>ovxDB_cZjg65|=YZ&EfA(j$ z(@p_&3Po{B!p_zUYzg_tp7n|I@_+vm!@d6y!UR%6M!*l#-4cudV0q8Jz~1@JcW$TP zQzz}K-}O^lXDK95-gH9Xr&XQ891-ph*mvIlUGI9A|3uiV1+#(vFgT3?ObiTq^s$G6 z<0l>$n14i`{73A~Z}?f8REYD)BM*s@9+8s`!xOs7!5yZAAC zEgBceDEM>PoI>`xtQ?Cd&|bhE1&sgh>;8&+mEW(=HX@_o4>B3otFxJgK%wLWoP>-> zO3#p??_Um}96IG~83li3ET!l7Mq1B~_m}-ghxIND+VIPNp@jaOR8F}|&hh-yGrQfy z%mKyAGrqlqwe*m#A7a{5S%nM+U}FTL6bYb@(x_3OEZ7Vr8n*w6rx$&Sfd0WR*0vLW z?;cC|gk+__d3nDq1GZpv67u>_ft>X3_do7I|H}XVJ3b*%{$e4fdZR@-ZcHUWqL?3v zsDBg+Ah3Y5!uo##fD9(vYVF&%*F~-57n8$>5Bo_zV`Ejv#w-PfAxrJpQAq6bocw?I zqh}{~MH1zoV2Sjc@+-{5XgBNU=eOVZ8#{93$aW$eID7vwS1Dwz%y4MohYd=0=0|^b zN|e8n&%3-{J};IS7YlCq%}G~vpGSh%zy4>9bV<4BQ%3sro=<#u+xue#kaD4@^3VA9 zr>y{Cg{4vOM-nZkhhdwapZDM6GN8Uk;KnOUmSL!;3;>OON6xeYSirrHhtoIH@{C)d zxkMfVg;DIEOy?|>$@^A&w%GF9Y{{ITSnda~fN1_cv#-dH!2tM#9Nu&3lR-xeHlpFG zSYU=&+3vXaQ~(Qj$2-Cq< z0v7-5eLjD@Qc`|_Q~8;+lU6F|o@M1L%V-tT;e;Rt{S=A`z4su11^nf^!+v+^h-0mJ zSd#bHw4w?4aRHD1V;}eHJQ`0KV3HIg8Vvf|6N4tE_qlxsFSFTQ`)pH2XmM$ovEM;F zK5&i3X~))fM;c%zw*MUTnAB`7!@@lz;!Ov@2C)w5#S@ z{Y9s2d7~TP-Cz9T(Cd!^|6^hHZJ|Lhoyxm%;ehmGpVjJOM6rsks2qM1njpdW10wW@ zz3z|*Kr9GS!T{uRKK^dXdlFWyDs22#@=sPV067^D0ay;K+3i~@S752|Zz=!uMAeO> zuS`Xk5oML-SUPXZtKZuFE9}pwzXN%E8t6_eFWYjnWi`?Mr$0Sx|GDY98|?JjhMhWf z%>Nw$p9a8P)3dH1@KXjffX2lJl2X)euNOqi#~nO)(0^hSkO=rEPoA_=x$GMPeIp=_ z3-8aoc;PE}*7ai^{1^e+1ZWEgJwGvP=mm*e0R*$!IG%JJ%ei%1JM%zr?br$b(ij2S z1lsL(K#cDj8U-90AFx`4uUwb7CmHKnF;Tb0WA_BlxxDGYj}f3vV0CqcJpp{Yg6H== z70Qc2VMH=iyd3M>fmGXeojx4A?y8{&KSqEy0onorDY#+=x!j(oYgm0w`}R%P-o2Bu%9H+Yzz?v$nQ+c6-EdAfeeK+v5I7|x zTF%E@d7*bXm%jRsRP|#=Arb^lK@<-s0@=sP0&d&{CV2})c zTGz_y0S@j>JAe(?w=m%45C3rMiv$PBIr(hX71C^MAqOIdQp#to!sx4SQ5dTL_10tf zwG_x-y1BN;2I z9Jj)xi^=GE7gBmlOYyS3zUA~;RTxqhBN!`|-50<3X(PS=;~(o0-sbam83GE{xcBFJ?XL%3mFgxZhNf*(^+?NDct20 zBS6~#`i|n$Xp+igERilKkSWoyXVpy0nro-G^Iv_9|*1 z;vPK~c86dDXdBQ4l%MX+xXIR8iLgh1vzhI9rf;>CjqUtTxpA*Mwg|ll8wP0`@SPia zc14UTINeuD2&0f?@L>QJH4#6%?mys1-u>=(+b{ppFS(m;zS)+SS7g|JGI;TepX=7w zPbuDH`LBjeOl0kYAN)-4{`ddJwh`FL2BPDD|JT2CLdq{@CZj~x5mva**!$K%MnNH+ zsP#rm)^S8~$%M-auq83JVk&KgWZE+T8nJq+kIin|=0%0qTTPWQ8*ZGNU+mELo3mST zQB0|%0xXwfRw$_)3-SVquC-*KkDluIe6WF00r&`8kLQwAD`qFfV8*3SV-`zQ<;BVt zOBU?TyYJohqR6NRr7Q(@N0;S9wZygjSpRf3Z>g2$SHFJ$H_SgSx>yzZca0H(aDRmnnSzp-Qz~zFe3R!d>i!uyBuqHtP}$(2gdI)qpzrX+f zS=Snfc?>fQKw@~M|2><{$@4JoAg0K_Z*|4+t5W>hMz}}_o}c{Hy%TP!pR$!fGHj$` zLcfG|fP@r>aHFJ0E-Mvf2!>lg!Sj><+AF7APxN@8#7L{=77+B>ejCELJO*e!r zJ_P!wfBK|;dr-0R3*|}I$i6KvesR?{KWHBOa`Y-jxj!W;Gn}#^Hl^CfCNY>N-1V4> z4%v(T(laXV$8+GdmD2hfquy62Q}1_dSqiw(Y1`0mJ;q&OequFSAt0mXnD?F&02m#a zFY3GeKqe<967O3}*JwzYJH4*0tetB>_RJJzvC?{qyq=?^d$WXALFP1cBq~9Sj-5QS z7|`zXyyrd7=lkqu&#rF>fG*!X=2X^x4!)mgruRrF6b<5OPvy_dFMPxN8NF~u?^k6C za4sbp&xRl+0XQdz60@UoE8j5x&HM7M;6p}6zlwS#6}|`yU6+yZ9N4jM^89;KDVJ`x zcFGJ=`j zU`7TK8liAFCLh8}@uFqv{2w8#Ljw@S{F9ZWV^RrSJKz?I&UtLK$hZLd_USV5Q-9M% z8Gy2N`mybpznU93CT2jZ*&Nb0cFA>8Q9KaSE_o#;KKKa`db5SarR|u1-*nC~SK9AP z3&xaaWMXzzII%*7t>_x7i_6na}WGFM-DeTbm@2g>KL))^FE zUY|Aqg$JLaD$2d>>2df+pymgj>k$@q%tFmq43Dg%JW_mh7*J!42{tI@T^ z)zHu|LM@T0TA@6tShZqTUU8{CSM>jdFZwS3`^l5XMbo}$ci#CWTU{&J))&Gqg8JnUhrE9OoZX zOZ{*3eJd}C`cM`bYq5u*XHAuBN9+cJ0Lvmqlu6M&2sOlhRGsXXNVt*CC}kOZqI;$k zOC}WF#d^MHX06`x{n&&kDd`Nca#d8Jm@W(W(i=u!4AOD{NuAForfC@tXG`l%tE>JN z78XP8+#xqzwa*n;w1uaVV){C=gbf7#w(5+1^_wz4=+su0bEGUM&~4NV15nB)tdf@j z5Opt!4GhJG=4w4#X%6kg+=cVM__`@Ko$ja{*=I85_d;YWX{`4w&$hJ^bjursDFIm2e3uq?k{;zHcv( z3VN$W4+C2jdfd=0oclJS)n^nK{Bg~cc4u^5N#6Avv{ds zNoIJ79~Yzm#eUlg-Ifiv7V<#kgmwSW@Ns(zj-kL=DLRQu(QD#keFo8}vH^di-W5}z z5su1}l@%4t7b-R;1F(0`9=rU?tL@;S%dA+g_!(mlJ^Zje{K&($SzDEXr8lE1Fft1c zLN5??7VOxub9Z;WYH!M|uMDiVE(S7G{H?O|OO2_b0eVWGnXSb4w2sjr$@ipyud~Gn zxPJJL{{kuUKn4v1&~suk0)1b95A;dWi%OxSj2JzPfd2Laov`cD2^KR^^@d4|$|(OqaVb4*|{3a;+Tjs($ zfwEXkwUD-oD!m{UfY+?4{_0{;G<4(aq(pj#q2+Y{YS!6IhQ?zi4C$GCl&}pM zvNgTSvJTed5C9=`+xPJ+r39jk9viQpmd?jz00I(|hh(t)h*;@t-{Xe&BOm3h7g0S9 z^=y4%Xb8}K_?_`#INiz2x}_1&$v7|#pJ!*8at1ju3zgBR{yM5bX#Y7%C2`jt*cxsb z>VyY8&wx;n47R`k;Gvih!i*%jf6>IOltq?Y)=y_DkqO9zH$lm~g3@N72gC?4%$JA3 z05EfEW0NhG8@_Rn!6H1n7u}z0>G4&-0H4)*WC)aC z0SpA{5h8W^-Uu{h1X>LSH(>x^JnV0$7*WrQ;bI3HHoc?_SZHHmdCiuVS5@f(J_bc> zgb6g6w7$EZ)f*euU?`|!x|Av~FQb>hEDJgv1Y63pqa#P6N6m@26 zu?8zF$&&*+!bR9aR$wiqomHg!WkpqKl^0=2OBAsoBi!f&0)L?J!{kYs{G#$1Yu4F?v9DT8U3Bn^)jNANeq<0FHc~@dff(M z0pZG3Vq9B#hl9azc+vB)nJwTSNS6bJ->m$DwAV7lt)Kq{=8*8>9 z5Z9HzrR()n;eM@iT|;W@*8y<2Y%z}^mQdg0m7*mTyT#fqPs4Hwn6o-JAp=6A9#dw+ zMn0xOGdM|QATP(zS<0ZOm=`8MV_Qq{D&WOCwwo-&#H>J=hrA*lKo!P(2ojc>a=@c7 z^me_2KVW(0B^m1wI7~kBEJMo98?dSo!kqnt$|ttjvcdei4VLN_NYMi+?68`*SS7D` zSS(3Kr=obY3}aF%=>Ej{DPR6f9~ITty`$}?F#vS^wZ%YsG5|qR zo()#QwpU>nZeLzLj5WhifIPd5s({57;?g%=TWm-S3j>fA=x1gwwVBENHs-p)(%cCF zsNmQoxF*(AmqDzzRemy_evX0+Cn42 zE}vG+E?{QGP-B}l8?3EaUuhsiAV3K8=n}f4^5->`eESR6!Es9OhpN}1>RPdvZ?lL? zx8k~PY-=?xLIFnRM&2LXZ5sdy*uXiCihI&!P%>{E!UH7zj~BrE6ZdhH7W8h9Gecp0 zc0vIb0AW%Pl_pi)x-p6)>WO7S@pX)L0ER1WWv7B2!yd7GeqJ<#d!$@?Om9SJ@blo& zOXFtP{DP&$!`w7HKAVKFZMJSN3FB{Q zENjNmZsM7bLYIb{@`Hp}51>$8pHlRRBlVMBXv*}6yP ztn=uce}-N@<$B{{L=#2d7&ImYm{47eOCjjmE2+HlQWjc$;p<%~9$QPnyx2#es|Rff zpdA^2enJYKR=KOF<2gMy%YDh<@@yD>r|=-?tBzDg%*AiY^R{3?0vzwfP~3tHD-B~f z2{}7~QTI@Jrn5!cyZ<^FfrFMWPx@!S?eG5zhUS{Iq39ZIy<3$gTp(uZ+)=+HC8WY2ym+skYb=>~p z?q$1jD#4mWs#le@j6g*OU`z~vm7&LrNt-E)9i*ibxcw3N$d^~_bB{0Eo4#$I!$`Db zAeO|$Ruw(2h{=#vWdvvk=maWnu^vY0c^1+RSE6PO$LBobIWDL794swa`_yUc&d*z4 zOxDCgrDifX(i`b*5-TcUh&ycpcnFNZPA}zNVA8Mr+ErGs4}y&1$dvAr)bpmf zr&3DK&EOJW_EJa;8;ezTT8(Y+(_4Ua<)sGtP1-6?Kk$urnMB5lxr$ZGQ#MiEWn*Kz ztfKG5^0*Zz!+c*?rS`^(Hjwx7d+W;pXJXKQu_RH#ii|*2%2CZ1ZLCnTlk*F~Fcu3k z`Fz0MelQVQ>)Y}?A!`z&P@OrwcR~z+m4DJQ0`jy1V%#>DF*?H_nNA0yrw|au?@R`g zhZSh0p?VIzzl=>mMrW+3deJkF(LQudU$e&EanbpJ^LkfL{R*Cm*HrBL#v4-u*_N5>4 z#h1rzycDvcvKrE zZmAGOA&g90Km&HIZGjw7QcMa`7brIBY{)sTi*@Lk6AH0X%9kAKchy}i1V3>;)`$2t z`W{*e{?*%q?YRM`mpit5A{;akLuqKlVkssJfWFIA$cFcH99qvJAEJ08vjR__K5e_V z_Pg^FDYgs`cuz?I(_4ww_MyBE{aT~50@?cbmRoM|`5AzcSLTA0w179)v*$>7W*H#H z`^QzVqq73*U;3IAo)&KV6v$H2OQ3S{_K;YY5C8+lSOpgPz`LA0(b}FHaPK`$yZ(l7 z&`Ao0AOlKkI^+L+((`!h&oy;#Sj_+n1%4$Ac1$cl%qOn0Ok&6sm#i-w3ogI$ z+ic%eH>*tJcEzQ;?Bq%_=)eG!aQA+tUm2p5jCD>PDmCl}8Qq~$7_;VbJ2-LwqXEEw z>gP-M;qPgM-dltBXteWzrl+r4J zjINc|_l%ySFlY(Hy>0OKmsTyYif!bgd!?j6}V_~unqpTwSiTu z*z8bREsRuX!9#NyeWy&Y=p2)y%ZDogMRNnvPG(2EC_3tnKAJ$o2_ z%J@*9_ZNTbw`hy-lR$iTAD2~K%Ur3x!qsD-k;|tZ4~i4}1?s+Ca>dm)bNThQ=eis1 zW#4f#VT1^ilvfJHTmn8>uu^&uT=vZGGt%6#MNirB*a*Olz)NC+)|twO~K;ClC1J ze2?T0e)vke`O->I$_hYKy03F3=sNXIOX~%|zi0RE;J*9rvk!doqru5m-5SCU-LVD5 z_iVTd;9qc6xF=Ht{^;-M_kOP%#1%^RYU?(X{u3g09w!^9y#H9z`{Dke8Ivc#ux{}qM~{OZv<5E9{lRDx4|Dx5YoL|uhUdTH*MHsye&!erBAD9 zQ=fH#pl-Rry!+0ZrnbQ!O%TfGGOk(Qux_iSTQ+nr#qi3T6rE0sf@Sr+JZ#zJZrx42 z=sUN;zr83(F70CVx+O)ySsFZ{JQS>xL14%*n}@`O?ozDne&~gt-3EU&L8y?Axpq?& zxFgWe`cK20C?y7w<-x*bqE$XS)&n528sh0yY&n56D_zOdJCo?!XCyF}s zU00MTmP7y*TeQcK6h*>c=3U!*ok}Yx5k>YXFl(#wvZTD@6Mh*?WSkh z1FeDG_HffC3ksaX*yw41@&kMpF$LUwlI}cpb}$y-ITo=1q^K~7IGgbZ3hiY)VMW8B zq)>3Z+1>{K@e?Pu!T;qif7$0I6G z832p{v8*b`k8u0UUCZ0xmm$!ZcsHrIULs5=KV4L!cX)3BIwk-PTT4Fw``-P#+u+Y; zQf|n?i~?;>;O#5%-5UY{H}D3aDNm-~8w)=F8-CzBx4}O>H6hK#(6nX!Hf01hLn9z# zlF&8MN_kzsC?+x442KxIpLp{&_|p>==eq)xQnI3<5s(3(HC74mv$YR>#zVOX^8dsS zeRdoC)6*&E=l;uQMoVb36f=~Tbpq%@qI8CZb7uvnWHgz6OW!=R@aVEDV2K4d`o)?L zJQmP`98)qGfclv^%a4r*lb2o*c$$ZY-;x96G25Fj+qmdnUe}}lzm%bWy%*HeDGz=G zz^|V=W$TI?y*&NtwzR%(ch1jSgECLZP^AP!(dTqNrTSw&83lht``P#s$v-0H(AdX!j0p*$j59c<6vMc~ZaUxFBoIAx^knerAAOnKGk4q$FSPB-=U!`%|NA3W zS~eToov}L}d&s_~=h#n~KY|pe+#;dlzvgVDzJrCX=tgf%w z^6HAmJi6)|%xEFxfM)@GkDcA?E-QZK*98#j>28U_1kZS6`NEh8Ex==`vIS6mZs)H| z>~er#zbovmg`Qp@?{_c&Vge|m06k=N6PSQLp_5Vm>cnmb_{Bf_>&wJ$yY%q7)mU=b2;)z$;zt7LvUwrbTPLQNK9-^R+k5{L>rFYij9WT=%1%6{kYxn?FoT2X zw3`(0i!^-cvoFm!{QoibAAph_)ww9Vs&nt&olg#vlV+q*Mj)X;24S$lHp$q=@Ek4| zKPMcXpTl#wIO2=%wXrYQ2HO`9V6ZWkKx7aIB#ktZMw2u-oP18_ushcOeQTe6=8S;r zzoeS(b52+9y{p#ut+lFFty)-66Q986YR&5Uc3%FDX~#$cj~zQE=a$PxcdRbDi;wXhNSTc+O;K3U#)Y>crKMOTCe@F8@mrm(6R&Jsp5&Ds( zumB))=<=&RzghDW{Pg`@2d+buD zsf?Jr4(5H}DsIts`qXiv=1fh@$-vgFk?_AL8NpJ)C&cz4^~+AA+yg z$Mw;x+z=!@zKS!yQCvTYc2N+I=FG<+aHZ+Ht{)AV1k6>QBAZNdO&`yXd-Z4cxu=0< zzp^3j!Q$^x{CvgoNN2~iqqsgE#r*}7J~?RbY&u7G2(4POR$I2GE>&gh&^hhW0QA50 zv47OpZ+`6&nMe+ew>T$p5KbBz*9Bdrp?$OXzC9;7`DR z;@G632E;cMZZ|82`gui7Eoa!L7}e>tu0!1pTw`2YNKXXUP2t~HHNUg{IE9DLgB0_OO0_icS!S;BGY63rSOVbR|CI-2-;O=&$NEEN z@4SwwnIZTvE3*VzXp~^`mXsd)D3asrR z^8TCw2>?WZ_xvQyyYFfb|B@RX$cmZZQ-gB^yrgMbM73{~>5~3Kw_KJ@@(fU=B278U)}d0f4}G{|xAWC7?t={~zB)3nmnf zX#0b&^tbbJ2bdclKv#EliHOl{Oh!>CjLH~H<8(GFBRlrl>JuN4PkrsQ%s=K2*k<6T z;$aiVvkhuh8NzpqL3kV}4HwUrLjO20!wsIB=D%71(EI`DgR&X?qoY~F13j`MF}OA{ ziE(2O2w;5cE;)Gf3*d`qq}gi2e0@UaHn#5C4+2<{hrjR{IWpgr3@n;N7;RzAuyRIu z&>h;J`=9?V5C79IDQIc-2i5?=ziq5&80Vm;K(i02{Yd~2E+VDd>2I`WyI|#j;7`GV z0~;wpGZZ)sg%N}7xQ1ibm-|oD?O0mmP1o*`>N87HyluCXE-%V`k6o5p7Q+H%n1P#f zq-tfxF(wSqbE$IxnW1)b6VU3OPXa6?g3X070gMA6@L34{dv3kPv_ctag|gBK!!>i# zc4=wJc(n@8ZnWbqf1ZHAXURJu6NlTvab(Ou7#3#?eH-ueCE4mrqBWE%NI*Y~5={C9 za{vJeu!P-&>87F3@;M1-MXAKk~`@^yi)1wy8C*p~v{y zybuIH2(MIocKd|0u}%%J>jw!~&eIV5z?1s^v={>5vycjwtKF;HvjLZf;G1ghHELe` z3jd=$XUW%R%sFoWKrUCVZcoh*^{u4AOhb&8V|)UMhHLaZzfdPZ2H(3q104DgIL6Ft z+`L{N1cmlK0RXJ1ehzjEfIRp5WGa}r&{Q;Wsr{*~{g`q1ytp@RucYZ;2QXQ2&l{S5 zb3TB{0(4flj_W{h(Na33vKjPzA6Nv#WW;ncaTyfgdZeKOl4&T& ztRyVnx1pf=35;=CN~>4MgeC4oVf8?U;er7cz#Wtrey;?;PDsWg8^W7PF!eXs5u>G` z*Xomin*R7b8`EgxfO3Emu`9ywg0cIS`v77(L#gf2f`LOCb^`zs`2GfnpBvq+2XAU0hp*VCmk9D9_<4P1eqq!YqqRr?1U|lm z6McI9o{$_WH#!x@x9I0p;{&AJH^IFUO$b5X;|d2{9nMn# z{1IqF9>W*MJ+eZ1`~BNtI*9Ks1pc*Kr%k0^6K~Lw6bK+!gdYyuIRdQ|0uUJLePOk3 zx1~WWxF5f8_hDVNem2g7Sa{+rb10GkKp>E6E-BFsT3jyKm%q$6orAT0mfho{CNTt& zVw^(27jKXemloi+@i4}SVPlXX_#m6LK3xbLa?k0)88dge+s!NdRn2^N4!_ z*g?vitZa-yA%pl^cEM~IQ2s4w4}muRA)#?}G_)^)tE&R=P4P<2uj`O(&l`jAQHuoa zbJ?7U!bXkqJ80gLG=_{3U}ah`Xn$=F6yPh^p7#ZyYWr};HQgAPnG;~RKG%ymVU&Ot zWjb)OFNs6jqXfw_g6n58F%yA?Vuz{4LxAD$2@n#2KRP-klT%w|d}@}0C&!OHBcJ)q zziFSku4_VZ`1Yxcq!Siq8J-*0?PCx~d|WqXTz4eO!Any6%k#3ODReFGaVW8zPNHlYej%~CZJ(l10D~U$McZ@ z@SGg~ptie=$?r+U>&sk41qv=x$at_mEw_QE5U}Z2q4e25sgSf#J8;$d zxX(cX&&Ih0xWqh&Hx@}s0&WN=hZ7+XI}~q_@tC;cGvGyE`6hTK{qgn#@FR#G6iozz zLE=xUb*}=xule~koID_Q*g+i7;BSlzr;ZKBQ}Fp+Vd7BwcmzM!_POk*>;LQ|e1YE{ z!hyEDQH(JJ5jPLBCh271i>8zSxFkp|s;{Nr1>mOHVT9{c(gp76vV zCyobYkU;lImrIR&Kfpb)|5T$v^K&<256|AgJ#sf8w*~`08i?KsMa2X04B=`Sn7y=) zIN2LRKXT)j_8G3m4PO{$fS&{ag2%nEe=DtlR2k%j>#B7OJu;Fpvc165lei@}B{iFt zYTuE1H>p;DXYq|70LFm`#=v&!05A!lDR2y=AI2EM63}he_)j?|Iqtgq;1o)#2M@NB@0 zB%BNYlmbclTYw2NgO2B{zn%?%HUyt07FCXhK;t124%fyD;%4(80p=V8!>JjMiz+BU zAZ)K~ebDys9X$ZQi;n2y`h7P8Gbt?t2mlj;a9bghn|t?ExTlDcDwAq?nVpY|Gk)jw(nKolY?jg zeD05+smfIjYJa_NYA^~g?!$xTY-J%P@<}#=sJJAKfK+8eXP{0{IoTRx+2ORe?z!(sObiJ4mgs%h@_tE?2BKm`X z1E3gQ+G=#gS8#Hr!n=Z0wkpfam6 zuf=C?@%ce&+^I<5vrrLGp=kOz?F!rvzJp}Xdm}mYaLo>0H6aMza}8(+f#;t2J}i?C z+>;K*zMD)6H+pf$C@mbdXjQI#8K(un9iQYd{!AHDZU!OIDoz4;JSTD@ACj4Z5l%Gn z*m%kUhiL%9=E=m2!eduZuEKbpD8^1LPR5yV!(0r{9!Eb%Kq?rQA?LtwKO{{~L=xnE zj8PBcrR0eFfjch^)OrF0;DRjOuy{!j0et-rz~tZkmxYh~Nc12Q^3EtPuL zGD`8#7yib~ojW3Pb4#*Tfwcp|;xX&mb?CR{3ZZ+Y)LK2$89+lOvy#pfK`c4=Zm?SL zdB#ojanHSV@Kfvg#D}j)PU`pc8mlITpX1bQs3BaBi;4_%DS204>p;;p9su4#pLrwz zNV|g%Ch?qHU!#}Ej5JCP1Q@jHYSoi!9YTVBLKnd@pw)!F1ae&T73XJ2&M^1kJ2R>g zJ~XsX8enuV_VoR!)hvi(2!CF!E?lFIXQ_aQ;3Z27f=^e#z~$m0mufL$Kq!m64-x?9 z7-&K9XWm~2<459P5=<_5_Hey^6hMcvXybhapQRT+fD34Fj~0XzLH{@)K^_3>*q)>S z&=kPwaI0~2DDZ@o5Q4E{H z3+^4y$Zh2@j9r*ftpHg+W2Nc9RRIR-uny?{@(KMzWr;po&_2Gnp$Gni^gUQMO~@&J z8PCQfo{7o1xvI?-l6po5?~(Zzk`8yG!t#Q9kibLe5$>@1G$b6A`!v)ISpR-L*XCmG z+=v6f4|qcY;Kayk^=biP8Oy~CLDTL)JK!d`f1BWsaMA(bWpx1D6f|V1`rQ*LZm4XU zrAxXmfbvO~Aq0U*tOGyA$+hf=HE8>Ofd}@r3jN z_@N8XXFwcytTM#3h$1OjQbHH!>QO2!`e=L-0m-_63$&nM-XXRf3Q3(B^! zfoW9+ASc}8=nOswqJp;JMy7xIr+>0P^{N?YHDeZ5nzCABY=f1ShY?;coFqKA;4dX@ zpY(%-qRbKtt0$8!pzqQcRPNIP0c>^wX!-**5NVjTTQ$gta}}e-DZ^|t-20H|`hL3$ z)2#t^zIVrn>?`^~At%&HKP(b1e4=SOMqwPgV>~l zvF29Yi&cMJI~5HXE~O^aD)W7Gfu1J%b=P?lY{F(RI@H$e1wZ!l0;`%*|L7!s} ztIxx|R6Qmd=}EVFWeg)w_4M~ijtmh`4?KAB9ZADlNjUwgPD`3wMz@x)N#nMi0L00MN~{GioC65s@A1=bgHUSvibS-4oWFM8cI^3{L! zR|6ukkcq`X;%W3VPqTJl(ZE6=5%BkP$9#)@omgmcpy;OK&@4)=7HG5a>0Mzy{$-efruZgT3 z()QmzTGBOsg5S+R>*q$Gc?s=B=*gbl@%1v_^A^7{y`uz+{ z{&Yr$*_>3)%wM$wkcAt8F8#)z${p=<{`HSnG^#NMGe5;t*I-yy62Qr4uN()?O+YN% z2=t3T|BSeuslEB&dwz;_E12O=80Qk)%?Yf#omB~&V z?$W|5mpw@w+*iT54x0Gt7Qj*&rhM=Rs|_RhaXnyy7C-_HIzdmM|MIO{{R^xY5&+5I zFCM!f{LF`r%*) z5wK*!c#ebv65xgTJydi63XCNvYTz4WPHt6F;3r-TVWQS20dXma9nYT^OII&NFbN3D zma&8iAFKor06Gc-&KYlq8r;nSkFNUuOPgkNS(pTb#aX;h+b5kA+(?7AE`Ub@D59hD zN(K(T@6khtuWHXEAS~bc=+9{TbS4Y)8Kx8lyq8KzPYGb%3c&9wPdIC-IHN(z&^ZEg9CVK9{LN`v;K_TzjD37RVFG<`0Q>>yHy8en;J;=x17v?ksp+Yj6&Ba=Je>rX)Y zxjK`{YxA(sUb`-h>ay(JK4zwiQBzE|&19xy{`gmaM6H15zvTle{Ifd_$k@bIXyBYA z;rk^aFiC(W(P>GtUXjVI1v88GJDr}{mmQcLfB65Z74Q$Q{uP$pt&=hejh+PS_Iph| z%iZ$;8u)<>CL%z$^uHwG+1JR+ZW%St+g~)hw~k@3iV}0j75wdH)i9wW!Oux2jc)*u zIhogo=}6O`K0kV81N^i+_}#hUqz)CATA2t^564JAYEcOC=a%RGt`6q2l-=y#rR$ABbenh8;;yFCfx z8U+8Xci*AFkLGhwzrGUr+dE$%jb6`keP4Z3Eg&PxB!v?1xdce?kK|IaZ`-VNYHc}u z_!<4=&%Ed+PU>1t?sjnP8m?6b-~#Xy_;32Lx5&&dyiI!Ls@CSEd99JX+oiNnvsF)| z!sMg^5W`(z0$G9s{38%+rbfj0h9uk`_+~#eKf&+qnt=}rChSlq~fRjW*!T+IXLRt?!BDq~x0;M?FtWl7-&X5GpZU6yuKIXaLUzl6g_xqk# z+yH+f6;=yYxT?UEZLnhEE*BsMmf(N+&(6pT-kj6A@9v~@y`gPZ`!kjLv>-s#O-8!(7bdrmq95AZ}orZMV74aG?+_)p% z`hs}X%i>ioY5NcT_3vx@d+xbMB8j{u0ni2Dj4xLQI<1<5zq)cs%1h^@zIsleC1v&U z32pyFFZYj|`K!PBE2*`t9UY&Q3@i_xa^vDgQ=PV?0RB{ISu(4OQYbGdGOic_tr}uuHBMWxh0LYhLq+T+WyC0>&Icg z?|)t^)mGf*iww8`^K(51+M-r1+a0&QL8AZz63C}xur3nf!a8x8)+^^91xCw>Va1$m z!IWB#A6GI6N)iB$pq*dC@V!Iw*WW%y<&W`gTkbQMU#X(c(lR|WqWKe= z4c{eW;RIg~*KENOY{KUc%5S~@FXh8056ij#?=PjdTK4NY5d;MsuW7v-HX>b+KbO@w z2?*m4&tX-r+cj%{;EzYt=Z}5+vNU&0nr1tMK7*pr6%B41C)sr+1`N_NLyV&<)ixv4gB$U0Cio>j5b`(1Q200r zc<4lRV_tx6Lj;}0Z57$*KWxsCQ)ckDMjHaVCV;QRqiU%DKe z@ouASy|N_r@`5x$1RYosTyqNAUwgxC<`4eh4>slnxI~zO56IbP7f<7~o8r_e;#Su{ z1Z7F!=O}F3p#9*$0kiPlzuTA>7=k#MYPlDVX*%k5t1r!32OZgg6+mkQ1B`JA+Fx_s zsQJC$IleJ35QFLOaM=(QZ?(|uKYH}2yy&)_h9r;zUTGz{$%uv$n-E6K4h-W17;nhG zal(mv83=e12@6TtJ|~|*A{jAZM&HF5{(}O+Wgd90z;I2Nld>$|%lr=tv*&W&f$6Y1 z5F#$Y(aorMJq3PX@)PKr3rQfTK}i6qSzI^A^?vyLJa()P4YCUD@m#aNSN3-y4(8@G z6*ddCUj#si!Rm;iZ$9|=>F|HOeSg2{b?t7LUzu!Fc1}&n<4+%lmC};!+b7h-Wm(~} zDTSCFi2mq;FzEAB`)>ySV9l?5&q5NQ70`zT1L#U0Bf-3p8g7iQW{9;5vl`;4W`6+w z#*Q)Lb%pK#Cj%uo%U`WDkTnC1lCTC+AlKaJsO`@$3JKsZp#39L6MF5EQX zw~L8qPd&A~0e+hL0q{u#M;<$;udA0m{T*}!_yXAD5+)PVc7_Um0zUvh3*YCb;*u(W zJWEzdpmYJs58TwLQ|{K)KN$#e;L9IwirozJ%-7ryKAxY?8{S-iTO|O-xN{Fb6MOhu zb^Xv+f;VVSpPwn8Hy2);;MetOe4Z9SyHVEKVUmyagEraTbu$=%=U$(FYe*8fcTR-G z0r+^U4hC-MKL5z@%JtzZe2@01^uYi(F86WitHY(27Bl>6(9K4BCl!VN?h9W~xEFwd zFib1m^8DNdB#M=j514whBe!2ar6e$(HI~|?>cuR`63V_Mp+OVk*YydM1VA>YD}`sG zFiLv&)tWyElMk*}D9=-le751xY4_pzxuOxI65l-gAC%yC8mNO;20^I+LiiYP!}9U( z_$GExo=XBj;XD8fS0Ga8gA7Rk+IR>lrpbTnn4flyWf$wpvEa|PGTboxIpJ4_JIYgly2FrWF;)^qp96z3 znm}B7BKZaF-E`Ds06aJ2Yu+F)pdUPf0U%&ef+ap`))xH4O2?6d2lgllY{~hv>6$@# z*oL;peTu(}QHcnD<6Z%VO+PoEKrtUT>0(?$6ESIxz&B3%*9$=dG4*u61M>86ZCxt- zKNpwr4!B>R21xu61U32m8UFWu@$gmJelrOW_#Zj4rk{IW&M^)Moqj(p0T*Vxmi0|5 z(c51jGC8#Yel`6sT#%0g9CI+8SzvUj8R?$^;I|LsUUu!A5@v~Bh8xDfp?p3qx88Uy zfHIV4FZpgL{AY@oZtV^ZcHwOQe^#=iSN82Q4qzHFB+Npv6ZnDVr`Bf)$Y5kDrJrFTUUjYnV_?@;>@S{Jy9)e4IsUNk76w)TOPEpe z3~JJ!)(gjjh2Rf_kNr#q0TSTavHqQ@!B{B#K^xy>@ZZ9x-)J9=Ms;5RgIpZP*FsDU z#=;O`P8w=nz`mc*gJiO~eLNmBaVN{pm3+YmE`x4Z81<$WhgVk;!9TbUfOk`S1Jk90 z0UF|(W_=QhsloIW0AzS@95u)bK%v@v{TRs)8a@jG$mVo(VBHh{K?g8V{w?q0hEHgC&PqpeGU&z_frd%JM zJ|!PLd_<0}uE}!0FOevo6u{@f7X(44Kd>_ZdZp5kr%%rbErCI(FOAkvj-FkR%F3eb zoF0+mOC>e`xnxZR5NCgZ_@eQs;S7H;+aDdtOSpKY^5^aU-!G_(&_8)j@{Tc6k*;iy zcVt_lE0f8-^jbsT=YM)e!JoW$+?Z5EEC`q9;0yrxK58$@5N44EytxM64^wf;4XDY zPw=t?a{wH_IIhL?-UiAB%GsRwdRs{#AOcpt4}i~l>4+!k@sNRMB7mism){Jn3K>vA z!2f~f55Uih5&S$AmU;Wx=}YCV9nZ%!SAZYS?>_)POz;HlxurG~NlGeHkQ_948n20@ z17!N zQeB(Z#GpEPw#o8f`!KGrn}P~O8IF(1pjZ@>a-{m?vvzXVgmFqMlB}#slqUtzYES@f zzP`~-LD@nA*9OZM6B;w{#1jpB?cTVlt+b?F^*DF1(S}QXkp!MIJqq7a2~RsG6D}Ku zG4o^|S~xo4NB@z8#jZymGKIP^KKX3UC-Aaub+c=nR|8O~VN)F6cHai;{scV>fgh9|iMSc1 z-w!S4vcd(Ja$Pn5)dB$Mb;chWf4H(Dq0vzVf2CTJ!_d-9>=}XC9|3T9QWKX8(@tFd zes23MRl0I{Z4H3;GZLL&EJ?T9mlG>x1;3k!8cimW!q~!^tVd!}jm4!@@7U~1@6g%) z%@cks1pnLi-Y9?g&R@d241!~7b=IZ1hMNB@)bIrP zb+>NcmOGqXc*Zl!;I*tHMx5?FlwsaaD_QOWIcsya^>2YzhW1N_?(DZ;b5B>nj;kh*f z5-b%zfht@lbRheWRseke4IzhP_A90=89&#)p};w^4fwy*u$*^LRm!Oi15U_u6v zeNG!G0YF4sAb}j1MIPKAif(8|~wqF@%E= z~OLn3#?0 z$HNMKuGNwN7$VGoAx5ZaN;I%{zul8&r3n(_iiWSXl>nT)8J*du{i`WSVDd9dvZhKW z0c?PuGsp~a^-bth;z~Y-(b;{*>%z%I`MLd`8Eqa>@PFp(b8cb7w$ze?8OQ9&rDb>4l?+UL?$&$g>_t0<_auR!(BG%Y&*ETQQ)x$oenK&VA5Ijm z&2{h|`r^sCH9HEe{@g;X&%!Wdrs9SLAaRfYZeF?=Qx9^{K&_(IEG&q5|9J0!2v`Vw zmOZl>vm@M;okNfV6wrt?C9^$mcfTa9>-_zLqefDk9fYD$QiXd0ADb%xv;cT3jdnFvZLDx{|>6Dh&K#0cT>A;3A;Iq4@F4K86%VkO5|x(p{s#RHJ(Jj5E`T zg&AoGx64J}@x)?$pGN;lVyN1`8}8wrfu$%hiNEn1*ukirsN~)OU4Gnf{4w@-AIw8r z8`(YMS_&{guK4DD01^Wm@@M={A@kqkAAUDyFj=V7ch97>eH337#y~g#Z=98ZK5#bt zr7C=BR{fR}*JpFlgV7SR7sf&lhSC;j_} zkTHzXg|<(+T%L;hD+RbVXZ^L}Kj!Z5Hb`VlZQk7gFN2i&-KI%EGer$F|DcI`_P0O> z>-!qzNALq@jKSwN>}rD|fxe7HO(a>Asf;7HXKHdFbiw}6D}C?}ilgRO3EBq=zQb8u z2qRy)EDHr~mtd8!j3jYod}o8Fc%qELw{HQU&0w|<1s^dyc3UTO!*Jy=qC66uGu%z? zg$HI6E`47k7uPy+d6@^g4y^asB1d(gz1t*4zF~N87@Yf+; zdq9B)`DlXh=?c`~6IWUtjSCoT3L$pjHjKLw+2UB4mX?gQ%aW~EB*Vl;>S_Sxht=$z5V;e_*RvSKWxz^7@t)I)pG@k;e zUYQe3zOe*vj9JY0}MoSj_o<^!3n>CX7%-#3kT4Q+%wPJ zW;Vp#cm>H9$0U<2;)WCGc$iw~eQl2i=ZZlGE(9|I>->SX@6mLXHhfZU3bA>Z{h6$S zzsI!Q_zn^nm)+w1j>K{Oc&Dwq=$IUoGs#@rB}t?h7My3+9#||GfF{_!4O3f}d%(U? z?tTOl>&d+!1X?Fw|K=n1jyqmxnv4=b;cUL`HSwHv3@SJDaI38kd~U&Ie=+NlR`e~G z@wktkGxQwrnPf<=i#24zYuE^6DZQm&E_b4GxfzDm0r-J+PNw%DZ~P8?HLmFwhDcM$ zxI{`J;Lju);7+YN?#SbR)c(;J#*zepF&sqjir@3_ONw!r>&xK2rFu^mSG!Wa;7>Pa z(s45Z0pBx{g$0n&lZiMR?X@VlJ&-;6C=SBM^{LG`??HD*`wjxgEy*3YUEI&_pH0{o z9`WAjbO9*Nk8pE28wAktP|;Bh0JcLJLO=3sMNJ}u3-j7TXzecALIj|w^nr9N=uUA{&h& zS{vp(nH-i$(#@${z@`hnxj_ya!SkckBFOc7WCktAviatb1+r?2CUd(nV1 z_C4oKV4dmCUhQ1GykI}K-Qq@2@xR`*`uyl@PW}-z1SZ$eIdOnT(}p?c2B%Nw?QW2SN+t;b{KSXV;m3S^@x|ZhFDrFv=Pkn9Yw!adZMCFb-jg zOSxRpJn3Dg#X@@~1>u1r8a9je+%DTihjekTy+lF=S?&ld$S_}kP{T~DHl$yIFAG78 zK-d^NpFmr_M$wi*9GVgwLXv>?&tzk`c0x&jvD%f&KuT*&$Uy+nGV+gAN}w`B(8Tl( ze0EgY&8n1F=U~3AiHG-`oFrNC=yDPO*L~T~9BXQSJrWxd#y*7ML90{pFzY5@@JvSs zG7ifjgZmA^-)%$7R)-O(0+B5UB$I~_^pFwl|DbSGRF?P;3&$3Oqu0f&{sAA-@uwsK z;C(!I4?@$205eT>4??4}-S}G@-&VziO0~X}=b=@h-1CK`%uZ!wHl2~_SXv6v6tq)9 zk^rFt!goOmj+;{Q?4#4XRttU8g6oE{!WeeCo^(LIeAQ#!H(5q>5gAm)EKO81d^YM% zr38=x3*#La13)_gHWqx}sI)>L0E|lm?;9|)xfP25pP&&4+|ic;wB&%0tr8gkp#e1D#nyBt92YQL<>NzaL5`j%VKUnkVPl^ z;OB427@X*0oIhv&IqQFVj@=2CWU3`PMJPUt_!2~hhEu27nkK(b068_|nG65a>C@Ui zm2zPULF+^F>j^;UJq|ptPxGF+^HUJ290*`!Y*HpBXYf5)`NStaq3tK9rp@Zg5*W3P z-UNwo?*N2{+d{b?qZ@^`PdPFK0oc)^Fm1B9u9QFXC2b#`7&UgSr27RNxD9c%)i?kM zUK9Xes(UvT(dEA4NCIYD63-HqfBW>Zwx5`cn`)Wqq_`iR6M|7q54Qi{?edQQ@+pgO-}afR4hS zOXK;tyKDd;d0_}P%-aTl@AWx>L`}{i_O%VI6OKu+p^G@zIR+(NS{%FwXj}fgetnK4 zH9iHgOEVmT(}Dlkg?rtJ<2rB+oA_G|ZR$`0O=vrkATA+AXrmqRg6v9+%2+Hb`B+Md zF;`Cp2JknYktLJMn?|()D+)vaB()&}TH6eWX~Qz=;wjLtxSJ#t4?c5M`!qNHz%;f1 zxJ5s3qf#5ht!@o8Y!fY;v;a`s;e>Q(^??Y`Jqm;rz@LS0oE3n7&=Qw(Kz)GUwlRhs ziMbg69DtLD4CY~CXQC2uKmxQ@03)x9YXI=|1_+>rF~lng0AC|R2wrFa(;nlY8XkA< z+gBuByyrg{Gw?W`ljMc|MbERZnE+&{-X+G4;6r=v$Rzj~p~*-?TAD7NnI}MvIw|1+ zFdbM)b@U_iJ8};|3~mh|2duz)b!olhJ3%tcDZtaY^W)4vnU>R!pRrr^&){aL?EJpf zwBSK+Q-IWD0O;u(W&nm07h1YCn1v?;!JRM!tnOM{2fl%pW^%%4+|LQ%y8u}Lxgf`n zpU|zrEIb(q{=U%=;q}QdauIhxF`nJe2E?2I@GC(8+qdtKzyF61>DFKtJsBu8FeCun z2LJ`|<6+t$qBg+TftKt;^9 z5}lTU*_{U9(>yh1G$FHFQ}WOMG_PBOS%Q;+U{FaGfTe#nGBPFC-*S%>CU$F5kcaPo zzd3s3uv|EQ9FEuUifbVc@g?52ok< zC>}Ir3k1-LL)bw8HS|dhLfXRjF?H9_rO$0;<>ac(L=)zk@Pypp%*vMdh>XRvGRDbX z*jPJeCS~^>F9vdRBIQMS@Kc}S4M8~5rqQTNy;|0)XFI|b8^DU=tU!Y6>QJ-WC-QR5 z^*2a@c@j@PE?+zRthUdOj2bE%<}Iwl9&f^;1v!Q|58&WFleovYp8U)+B)ED- z0!W#Tq=s!@>%#&_3;=%EH?gP(uy-Yr?t=v2E@Ytq(;xv50F%-V@ZDV{fT7d?{#q68 z1zzEO3iw@22c*%9NOBO71S~YJ%ModBks0P{ZRY4&sCFPQuzzyt8} zNO0x`V4+38RRJ=H5(a)|5({d2-P4ZB{q3Cb55UhO!I>L?#kQBx19fHmV1j}ZW<2;K zlZDj)0!SoN8ZQulpGSf-H-MJTii9zUP!wnjlLpnm-{ktfNxNd<&<#NZ?1cdQjc*^; z+yE@&-I`>f{dMI7*XI3mPrTzqL0U`&#u;V+3N-*fj|69K02Uq~8ipAeHY6{Yx9ytD zUpyhp=N>cMthDm%gSH2PYPLK}@DuP{A>eB;QOLfbYwgH>K#*A znVp1NF;$d_9WyevV^-Xv3qKA-743L+;1Tt2Vo{*p|~Kpxpp%xZ$1Smj&?`)+04Hz|R8L;1zHDF}dyeFM#H(+iX6M z{!T)6{0UXMRDcBtU;xb(k>`S+<(?b&=HdJ z0e%+FG&32<-Yu>rVW7VQ1_4<>KwvI$jh{?Lt$y+1r48_Fdu{+?GLUQ)Mh$&E&PH-c z!Y2W)@AI@-5)Vz)2Ojv`2KZUH0Z7ARvo*`fs}Kg7ZUaqTrtjwLCfE4&;1H;{>X#ng z06z;i05KWJ?FG*=1+>Mr@g;hFMpY>Rf>n6^J~ZqX9$ec1KMOYiF&W7Ays=RT34?Z+ zWw+g|$c58S%i%}9EcZNbmxldLXWP0fkig#zc-DBrF-~^EaJ9g3Tp7=&WClL;uwiN+>04D7KN7V2DCjgoPK-F4Fg(U-vC6|NyP;g-MppJr2#?v5! ztW3=mQK6m30M2Y!@)>A}3`hf3h6@2n0pu=xMjo1x$M+STkc{Iyx403R#cLYZvJfT< zpLnHQvQwke_T-mOiaVN=X3et(ea1ucy3;DQG7teyBP~QAo<658i_-C{o zOV{HZOi!!!zs{~}^*^vV0ZS0~U#fLw$F!ru%tA9#eRt(v_!^wyU_Jo&_Vnw562$$l zt*y!PUiD6GA5D$mjv0ptI|S^{wQ(K_%JTxbA*fus5{eqc{d0%iZ~WQ6XnQ9+3AYM^ zseTuf3_60od;%snHw4+rl_;7u_46z%!Qd`#*oqlVACh=da&?Ot@0T8E=}_)wN|=TAY_kt@ST7cNPPDb3PJ$reV~m)3RD7T;xOcI`zMx2*%zClVw&3$o>8n}sVhlnh*s zqGN>1WZQ8c&&$T;#V`qOb7E2*^lYJDuzO#!SDrfjl*o3P>1|vu!5o-yTiJ)c{IG;4 z{gZz|^&*fx#a!Ts;y8X`m_sj49?(fPI&pd0_Y8|PxF}@}a6C4B(h2{s? zm^yw4)!7G$F|%+JKt6G@Y2Wjnl)UFX7WL2MqaQ0CcA}f|80C8c~ zowmoV)g4)!_v0?=aN8cJEK3ch{0_Ls+oLIg1V|b#Btg%7#R*`5H3I*iu@r7HX`g=f zqJ8$lf+gTr>$ngKR|G!)=y7@K>>{i=*Ko2rf${e%#uQ{tBA_L3=|l$_pTK{Eluma5 z{)*i6#+=Nb;mv|P;2Km*o>W%7bpp^|<6$rc^bNU7jKM(k`I!cc$v_GaPLjY&ZXSW@ zVRdeUpXVVRmNESd?&;K}+p6FKWjtC}PXlHeFeU>j7K=&(Z~UouOFsmsB@9!H*W~0B zdXqEe?RrV-K~EUa<*^&k&M z_r=#%1-Q`DfSCr2$v~3(b}9+jzxwa8+_Z24!rES+0ngj-a3^3_w*pt!JiR`Bex?Cq zGLUWC6G{Sq^^Y%>B@i;#%X{5E+WJ{}X^vJamG8<2P~dz5H1tT$k!;@22awHVtQ+o_ z@wAcY3`j0DgpbF(bm$OhN5_fVqmO<|X7}GBOXttY=Rf#|^2*=-GwIjY?8Wn!Y=m76PKHEN%@hKwSSh0*=^bFQqR?-a|nhpqhQWKTHwX?+nh)s@L>he z>O*CD@WUSj+ctgRGxtHTnW%L2jyM*o4z|}xFy0i(0}p;xTFY~)`8R{Ve%?PRC@3nc zN*b_QA^Dnp8a_YW&x!FX+iwe;4??N6`%;7E?f`bZP(r#euel9;5CH+e*QeI+4bUrn zbcPmgrulQ!UzNZ9>s9&c*Q_m92D$=3{YEQ#0PRn`$Fy7A09NUEve<4Y=ckDBRd%of5C%RnAZ?CEL}tdkf5EuuRS_;G+WU`t+^js`JvVU4~h8(FD8Ve)h-jRT2nF1j0`s z=ox=q46E0ac)cP{bxjJ5Rhek6%D(=J3333Mcm0x*Ku`#_7}{%!a4>I=DX{BZX@UTH zO;3g`PnWu{!F+d5e5vQA95pOlAhQjul%{+l+S1DIePHBYJ&zuf%a1R}@iQl7 z2=F(KLi&L(4^nR+$gwcZ?gWg#u6@PZep*-`{K$v(URAxbG_DBs%H{Lx?*Ltp2Ipb8 z7ogki*;l;yPBrr{EUbtJIS9&g!5*g~2TVHM~m5{Fe_Z9dUbk6RB z1Ub9U$-XA~^ycv?doQdVMn?wPpG$rdQ&al$d9N)MHlPIn0#Fh_L441;BGFGr5$ko^Pw>|G{^TNO2;f;6LyK zuhDz=-)H2jpRYq!LjFD;C_Y#K{vZ+f)c$x;aO-5>dThFy-SLnn17Xdi7)Hv-INrn1 z2Qjp`e_VG}hF)20XH~3M+Gt-Goz`R^tPW3&80Z=bI?!+10duw>C=Br(dL=PEen)wu z{mA$hO$Nd`Gm$q@(*ptY{jI;C;|MqOG#ip=)+FDp%V@tY#a?5hy*E0p$v{|(;~C?I z`jQCw1faR<8GQxQh%x?08~|MW>jK~%x> zlPsH?@&Qy%{f8l&-+kk_l0X`4!5Qv2z=liNo$0!nahfvebfuUazyyc63tlKKUbf%5 z|6irwtjOp8_C4~--}_%a_`mVAJn_^i9jE2Fqx!mbaS4W(hieZZxbPwM1f0Gd+j*l# z9e({||6M=#vbX-Sl0v(3bwbkSV%3s7Q@Af$0Nm&}1~YOz0RPnUMIQej@|xR|@?_YN zk3T(-yG_Vs80B&i0#bu}6iZ7wo(8e`+pM)fn{C_bZ%C><`5ig+sSnGk2meifKK0el z!}{|Hkc9*g;RG^guGUL)`Ldi_^!?m#eE5CxkAM8T^6C3Nri8$H{HZ7PZz{H&N5b`( zQjTr_4{7Z(Jn#Dy2Ei~!jpTQp8=8B2f zmY(rX?L`ZKpJfyuXC`S%b4{2oMd&&0Niy+}XJAenh5^$7<3S^wdth27p6?$!x(@lz|SqfoY2r5?X2r8h-ceq?z5>`? zc%Ew$dAT`1E3epfquE`Uk@3ukWHSE7A%Z_BocyD<-~Fl|mff%ZQ3XHC#fz8Zi6@?h zrj0|IplA{aangR+EX%XU{G=pw1vv5dlfUtMY8CKjf}iB@)O;N-S{Mch34mFapiOb@ z99*CRXE)c&q2tUX)qfKeF`hG9pMKE@#Ls$U=xB>fB z9`)a$wP8U-KtLhcV^+rBp@g42}+V4kH}}C$xrYHT0bBI zf}bwH+G1bdZxpm=FKiUWGhcyj3O}_Ow7mKss_pRshO+7@E-EVgN8jixCv*5eHx>o$ zBcLco36eq>_pdHO8w9`^6eWOl(g2BYIf%U(Y>8!iZV482HfQRGXy2->LQ_}pU2S{^ z$O1qHa?x&p!Qk~#H?iS89S7!rK|@N_?1#^P1_VIxzxYSqE-!xl+vV^6;&0^Ad4D-m3oH;$o_0M>p3-Nf zpn6hz=A+Q8VQE}?2>xbOzW$KEj(+LP5m`EQ#hlK-56Z)Y%)~;nJm0j}?uBqr`xE>N zk1F`jE!XAb;kq;vQ8N=u$-(rf+*aHww~p?TeT6MDkr{;vx=sMFz)pVY0U4j1+5o@W zu6$Mi_3Y&Z-)%$zZR$ZFF@QFixgwMVIG6lbnwR|pMydJvyTCHwcQ7SAgMy&e`5WkT zBiVRd@*tE~-1$QDE|~pi7Z;_{Y|3B29dJ`g!=uE*aQmPf^z#I?47qF=g+hWm(22v1 z4ME2IiMP!q0noazAX0b^ClZGX33rYm;j}_D&ihv z_>Mj-haSkL+cWa*!)FXN|Ft`&&ED;^fJ4`A20kbL90*`6Yz*IzW|Q3Pim_*iI+RWG zxmM5D_1^&eoDX2>G>2*humBRk1p46rm=6Hp=Yw&x5SPw$S0Gd)qt0l01nz_W>o-^M zZ?wk^bEgz1XmoST`Z6DVW==v8xYT0)nh*f^J=*i&kwhXX%>5UOgMWE#3?fN`S%g{n zUcn2YVlt4RJxJH|xzdn`NeDg_mkGJ<9|ajjK^WWvK#L(n@UyL6|LS}QjI!eqVU82Q zGjORB_s?ggPy_s$P8+{qgkR8ZWOTx~*%9F;CUz0Y%^M_aF?HX$y2zhnl!tDBaI z9oJ}k7Ha)o$CHnK`U(B{#m`G`fdBmI71=$VGgEF@##0dmgX@HS(;vWR3Bcc-gLZ=j zR7<3!l+R0hWK5EUNhxF}B@gfy+yZJ&ZoK_w`<)MeQubYYP{B{Y?|tPDD)=iPv`4=4 zZPolNZrU;2X~|U!#$Rxcz;y@r+mHVBUu^)LuQ$K+HPTwSbd~03e{#1e4_0Nah%o$i z17fnwZV`7R7!`Sr!NLYg*x|CcN zYXcl*>GkUH)l2rtCr4z~4M7Y5TviKT3I0DL0EZn5cNKELa|C&KY8&zl-<%%q-PxjE zo0EYog+$WmvGO2$o)>QYcxOE;&>MI_LziP9*YDY4ANb~B?hZ9e<%WI3%U&Qf{i*%w z7SK{4S)`I76NXaCWJ5AB6_%M8*U_mAH`F1=q_kdM!gCAzo|Vbk{f{-9l@|C2F+^7 zFWiMFT?M)gU~38}trI+=g8$0>GnomOSGa+NQ#7~(FfKvQqpEtnp)QwlGG#OPt;?1MN%9vNL~Kp8D!%^*|36f}dsE%*Y1#34GRKA#1{1 zYi9qTX9Dm)^UxFW*@xTmsZX|5>l6GPj6)@ykZLj|{ip-;7bZLYg*cNorh!1I?c$=nAlc}aN+$tUyo|MdmYiD9cjx5#{=(HFa40ILv z7wVFM`$@S7K?BD?01?Os&3KByfSZ5Xp0sNpF4H7bHML%}gA1x_blhT0NeD|1Etk=A}O?Y#RIWW^K%lg z0xNSgmo{7#Ao%&a%_{^g5D=Fv8(vf@jfkvOAg7sxdGNl9JpE*QWBG4tC&yUycLaYl z9)?Aa&n9CMPr-e92?Uo|-K=>v9{|Rb^F1U0kO9G=pQGj{SPA-o0B9kQJg$I%DUaAG zzSc)GoqB;Ypqk(39%@ft^U{6Y+&&3EO7|6@qy0l70B&xIVL;A?&| zB+XH7#U*jjWpFZMCh8O!(Wt!>wk>=!31%osXr6SmBYD&jX#Zlor-xF+Lw&VMc%~ct zRBboAV=KGpDy^T&IfmLJ4AVV~dt(gV<{Fi&~reGdZLhMDfc!mx~{OXqbdGnX5Y9NxP;2nGOV zT(MVc%b_nnWdEOk_zQXPul$vOK>vHX|0A>pSV#)&^09Q%@GwxG2}#+AKsFd<$laqu+#~A%gfxIlFhu3XuqFr|IvLtB zCK(6H2&m_Ng9x6Plc&)zS8(te;{FbQFM{TlfPx}{)>_=SG?WyGBMrcZKze<+3p@}M zR=V^U5Y(pj?`a*hp`buSJl30YNo`cF0Pu)>k^_WVER-R`l=T%dHdNt-Vu1_{aP2M> zTdTt;#}4G8!(;GtT#|0lv>W~$jR_|V&myF3r(nh9iy;{uH3AP(a_&GkIMr9Zjqzm3 zkD*N$q=Ru~zege0=%Vk=2SBr#GNs|Z7#KDA*TGL=C-CtvWlm>5c@;dzm3#vDAou@s zA3x1dYJY;?4B@B1)IkpcJOnV8961{bkl=ea@(JL=@kCm85;CEP-yWccugfFGRr{;; z0N;DPJ^L_d4^WscOu=C)B|}`F>(g<7F9B)4=C~&@0hE*qq2fGE6`TSAaFgSnep} zz3H0*@pz_QPvpX-3LkBwK*N}D%F#4f6dZ2f4IC$(Ov5vzD1d8Fxf;@fX^2sjGMCA?p$0_C%t{QO4Wmz!Fs~V|okdNj zTxdg#F=Rt;9m4g4|K*qLAHCH-e}M&V8@0Y9VTmzFh52weAH!2{2z=foiM-3rJzhuN z^tPX{zwp!l)o+Xvg%I*M@)$KJG$$d9#=35=mEebjaE}0I_nG%$z~6DAO&wi-Zwm>M zaTDAr$M?EpF0%f!k^sLMeSxuBUjc%3KsljX8OC)$EFc>aP>%%ATPFa|H~p0aV2uqr za7{r1v=oUCRd+-b?#F@%ES_V?N}?hG094>v+&?}G<)o)SgE)FT1=}lOOj;Q0B>oO% z23ZOLLtSRG48#4wgFsiR8&D`1DdYr1$MkSbShy`*8H5IK>DFupJcSbaJ#@>7ens*f z*Jkm?=*=?rnaddjJ(mG}(;luBOkffM1zraX|3FSb`s*MDIM|+m7uu`{Q9sGd~({kcWiwuuyI?BH6?v(B63LLAN1Y50xthFys7f znD_|V^F7b2Yx8PM1j1BcoFKwIbEzw1pm}iZSO-2H5XNJ{c>n(O`8>Qno&}#z!Zc!q zZKl`fv0rg$2?B)2Wb@!gUXS6(q#*8atF?_CpO`S&!W1kBXbT34_v;V_R1g;LQTq~o z&(mnrF)LYsKa1B4Dz~i0xxWAcz==hMo@(BHT!$txfoPzKY1MFzgj=+kRDv>!7yO3% z{~^2>0S0o_VF;|%`ci57KXcNo19OvtoCfgou%5H%UKfHNgT@&&yBaK0!Wc5CMi)XF zrTYbdGkGUXbp{({(kV&1DQNx_G%H**SQEY>0{P&~HY4I{EooJo(rtG^oajFgfCCde z7K0^)E~VCIKZ9#j4j9kg!U_S!T=z_&j?b2TR~4! zz_a!2E1puff{F^iVWAKqSG7*d_~10;gw`Sa=_TIFECDwDvjZuc=9rzi{Goq z&ttrKmH^LRAW8Q+egIitNdOiAWTW4~E0^dXE0k%D4M|$>6YYHq1+VB|5*6LJ0SJPQ z8}l@1#WQo4D+B9jiS+P%e6A3bD6>fqVTsr<2o=wkU|4vHu>eN0Y3}XliW91XA{wwN z;p*Z!BXom-MJARQ!kt5pq7we-%I6390C=-_#keToNdOdn{;&A}@iX;36N7*w^p!p^ z_b;<5kkC=o{;5n6AckuZ^Y?^v&E5hGyi!D+P@YPoF;r_2_037(56Xo;3x)a1Gz9cW{09nHX$d7sefK8NkG# z@@&M(=`CR5q7GcMvIL>1KoCHBI#=O$IkhF{e^L-c7XrvI+<*j9Ai5|tBx5VIe{k(C zg&Td?hXgZR)dR?&Y~T}exsl<>d=8EYNswS?pE3;9$YRaPDlABJk6KwAQpOu(NC4{_ zfJi)C3S|O{mDWHmHrWyQeLQLu=&(BA9s)!mNyCiJq~Nau&(NH#GJ*ISn%5UJ<6FijV;CSu!CW4bNv`l7j5e#_NIrSYZV)hQdQ-{s3BBU@hD~ zEJ5^jhy+051!xpls7$cQN}^Pa`r2(*G2z#@V$(kV+c98O09r?2ZRm4_W}L^z#kAmALLC-(N{96iy@yF zM+LnqOBvj_YYH!3+_(Q3+kSSIKY;EJRMB7-TPOfnjj=%)fOsML!)b?yT|{KL?1vSyY=IBK zv*XlC*Z__X9)gKt!yR5pH!CCKTN(HxtD8=Rog8sYgXjB~=Ahj`0Ms)49t&)EQBQkgXH~`35Q~EPB9WekT0Cp0tKgj2#zkR3l zX17T7@heA+&)mG*WG|f+=hAtYR`Bg0RC;Z;#eMMEDd^dJT(<1U%H&L19)0Y}0ikz3 z-!+RDYBGNT;BJCI@WAYYY<@znzxf5Ix6Am%w6y9KIePe;a`MQ-(gopB!>EPB4#NMm zq9Bv1fq3#PgK+XN$BPd9H@v1mb|eX!jTD+5KHmjkm?E%+@2Gbyw7N*8CQ?OhHgO*i zM2<}z8oUWYptc`?D4M-6w~lT+LzwBtpg~*^K+Xwk01}Cfn`&ART6{J9-oAauz0>md z56sEd89#^M=CXhLh+*OsO<#^@Ao!DDG@8==0sQqY1g`@*=p|uBLsK!xW*v;o1IT#` zi|1kgY48ky(gOK30iY&`)q@$`RUeoWzVP7j8FU7?nFJ73i;{{$EeL`i_snsi^+r&# zo6*bo9Dxt(1Vp8-9BPc#3K)=N#Q7Em&;$p&aF-!74)K&JW@Jio%%CiK%_dyQqzoKa zJd8=3_l;ZX4RCFeEq>ryJS~9%2#hX(5(0mRF(E!k!FS@B+1joVIEALo<-Zc)vOB>&Cn8vVchVDN@OGeClvv1p;VFsjBf|vZ-eZ+ zcusT|=flFZ08)5`1%PX-rbqD;f}qnVpsZxaEL2mecIAk07VZfk2{b*XEFxn=a8&cK z9lwcl2IxR&-ieu=((FbyjtFPro`4ajZOV&hxaS)Kh7LjJ1ZlG9Zg7B^3Fw-Gx61KT zmp6_GXW^cJ8~2Ww(?=iG^wQk{&0v^b1TZuh^()Q3VX-KK{nyCSndOZm!dbW{VE>+? zai2XVy;{T1s)M#ek`IK8{Xs3qOhCK#=jFty!Nw8cEZh@t>w%a#d%Ps2a$5zLdE2IE zcgkyD{}y@qy|0s(L_ALy_tk*~)x@ClO#D)#Co3f@E35F;*NoI^MtD>eiMa+1&ZHd#NT=(Q z_tey^UW;cj96kCpKntH5g2SDD-1-}XYtsfHlT2Ii;RyaOJ?-D}zHNSz(W%iZ>-1lF z?5te3vjAn#fz}_wQh*5xP$i;}18K=q^Ox-lx20udA!Cde2Pr`KpgnoGhJ`c^@t$V^ zQ2P_K4Ukq9?nku&7X+_u{H(kDFeZ%ah)^!*LlgAWT6j;b&dQ&e9f+yy=q`0A3m^j$ zhWfs^Rt)AZCmj=TUt)Aa(6=N6#?mM7KIJ6f(!jMrbwL6dxNmval{lBEpZJPhTwH`J z)sV@1-(ordE~EXxx2nK=>k}BD3_}*_`>XcHefTRyBv&d-JgaJUj1?6RDlNMX0YBi` zhRpKBJP#!8kT49v8%FU=ypl*^-$99?FBi{0Mg?sQT+0|NS`u*-7EDr?RQW7S;v*pB z0l?qG`1qd*fdIl$2jq)C!gU}aqa*$QU&w?Y>@)nsS8AUWcNk&77S?5Wgw($nX( zJ&y+Gu0WDNus7h_CvpAt_MG6OiOiVmOfD`{v#u1!Q}Xzeer6gT4bEMGB!OUWz_*W; z43`2YCa2{2x8E%{-TZusx?`FY%~me3^W%2EPC_-Tm^2$UDx;l@Poox^eoTJM%g-fS5V) zn0v6+>;YgMS*vuUTJK7u|Gz+-&8 zTBIa(Y9$OV(_!Ty6S;gw66jZ+M-Zb6gYR%a4Cyp?5JG0NX*{C?Et*7iB>TLV+QrBG zfEt#GTkn?B5B`f`wjNIDG8+>vrG&$KC1G)nhzf=Ne?S17t04g}^&7Ztz4F-&K+m8t zj9)K;@ikKQK%saYgd8Zzy8WRy{+v7u1-96nlQ+He#qzappOj;de-0Rh9Xa$A+;mw} z+zAS+JqkB61|sHJm7MF)rSd^ft%!t^f+d0HM}PVR;1^v5P>In3wm_%ptS&m7H_kKs z@er0Izyd2k1s9*u2tfws=n^3qnQNfjjm3l>%noEj323q;%%zYe39vYe_i201_LDg| z%g!BPY#)cIlS-u|4J#s+NTHMPw@3m)(y=4~mhXJ@XS6++8tF=~ohk_21DD7Qw;!j| z(#69z(8){>)q+|i39!8V{`YG85PHahwKbOj!H>#GDm@1Pc6kJ*A&>W>TT*QdElGgo z@%x_D_Dmg48Do~);>f6s6i0M|?12ZrY=7!iGjcKVQr#HDm4)wDc5Rz78IbK%k;jV1 zWXnVpu2K?i1qKWKU|=$Lc{&bE>q@&MtF^K$tTg5F+yJ1C$ihMtRzO%9jUn6tKNIg} z;IAw%%M4thvu92#0ni%TummuES#*`{)xR(BAN;1jg!lTF-J%3Q@UxHrlJSs9M0+xl z8%R3U#%oG;75nxjTmDpHb8Q)he?=bo_gN_8uIZtV`)NE2G;Rm|*@dgsf$VVmZG{#M zz`tDbq+IJk@ZpL8(3FYhx&{o&)?(h2+i)=e;55$_z`$_=k(MC0W|IKa0$_mv(`@Dn zLMF{*Giiy#3Wz{O#?dy3_uN3mFzn(;0ppj0?r=dYj>MB7f&I7GGr#epvb01CpeeWg z&F7_l;t9if7M*v1o55tacnrcuD@lM=eSgTdn*T}wv{GQg!%AxaYW_uu>~eT5xhq5wHJf-#_qI|I2;LM7(W zBwR0P*D>{mzcjpi&u&Ak28F*gFS_AME_3}8H6q{Ouk1^{rCY$Iu4{L=nizx|g5UxG z09@lFfYu3s{uW3e0>%!(oClrYyFzFW_OH*|dw%%cnizx|f|kxb0S(*%c~JXvW)=j1 z_B`jF>;Fvf(1lOMo6Ka=(pWub|NB2Zq=`YeA*jA|!gRcr4}NGc&4q{S7?6mK$8^?} zOw9HX0CTLoU@!jV-)LeGZU~xMyJ$iknz8sh+S4r7q#*DMx&F^&Blt7g8_8xP(kiv= zAAaBtO$@>fLBmFgXMW(B8D~IW651q_mCEXzJ-67BfCNGd_nRuT9B1Vr*D#Yg2?Sp( zIc>we5(q$Kb}S}4ra%ItRwj!O*aFwvGu*=pSC-Y*GTgFN2t`BY=8Rmv6o-2f zmDRPVEX=Rkk&$tkp7HnM6ZioEkR(|G0^slIUy}sjdYCQau6-`>SqT1MF5r6+00|@> z?Mflrm2}pV)kfF;`s=pJ{#Slk`uE);ty`Am(bs}Vd7fDk$^xM6IQld38~9_01L^Aa<0~}S_LE`k^tw&I5&d(BLTnViE#I{?d07at&0D(_J z>!%?=aTsUZ5SD@k)2LVMpZ@-@%dtyMdFJSGIrQ+C|4AvQVVtRG4 z?G*(-+kfbCQVBr6^40A>!GJ{4g~-A$_FsUB%?W+_OOf+8EE$P z*!f5b6%0WCEba);Q(#mXXKhQ%r!*!Ueugc$Y5U~qlQzOxYYaAI6wFW3<+$Pd$KY*bZT72XU5^y zj!7P_r~`#&FxH#^q?Ou$!sZ+SBVSqOS6~*Py#5F7kkJu;Uqk@@(waY3R6Gu>nG}eb z^BJ7jB=`yTPkjE+#u57bdH-xm6~L=r`=fI7=_eR}r@1V;u$qW{1w3Ebc|rAwLAA36 zxzLo&IAJPAL(70>v&QvvoiP9~!LQMJJrDo}7@$D&jrPTnG2_+d;rl}XNF3|n<3=Cw zfVS6g-=3!d5Zo}dx&7qytZ^b9On*<=pK}hJ1?7>~N&w(y?gWhE`$$+pMtcJ- zFdBsi3gOeGEtpFh=)>ngRq#UqHO8M6J%z8`Xg@KPGWis|a{P@;NX(qfOu{^1gRu%M zSMmYu*vJQv#AkS*DqW*NI1Td{jx)NO`3%F%XUISexK7awtg&v>CX$Zbdee_dYW!9i zoqWDL`S5YM<&InA?A)p~rUz{=QY?1yeE=1{gXNF^?0>3%&%Pz_S^M-?*DDKw&-!0~ z{#W#8`q3=E`V)6uMFPvErrfxHr&f{xt;EB}&M5dVT=rwzp{aytAaIh4W;fUR+b1g` zXV2;1hwseF{y(Wo=B9z@aoOI`M%!J9HsJO_+7{4|3h-}tA0v3mNxF!Yqq7! zfE~7h)($bgAeMx+1#)&t09lEq;0k23Hj^)y%-96p=Zp=7?EvnJ21PL@gO)A`l>1ZS zjE4ZZCjo4?keA}*q)dRoMqvHqU|AF<#$;@ILPjP=BwNhlvmg=>4`=r{*USeCLtJRpSTX=R_b&I-7!J>@YJENFd29T&nq5M&Z(|td`{31J^J!l00&3 zaf1*@0;i5YWhDM4u{0ch1f`>(18_4k`%<6-jAjG;Nhfg(u+nxEAt5ey)hoRM$- zR@Ez8Y5{h`fSFFa4%57izxe@2L3{kKzY8|`=(b>>F=!7r!n9j$FnAdQ2+P0@)=6mn zJJ6mMNEm_} z7`VcY?UFh8lM)`iPD1(J@`d|9DmPwpK=y`jmLGljYvuau(~=B#Z8p;Z^LN#9VYzhi zypq83^3qkHXJLxAX0tADc+*=I{3|QIFvKCeK?z8J;NM(0Kk(HjOKJ%a{BL{3l)m;r z!qmPknC#yAO5@y`f6em{=!JiY%cJ)urEw~&B)}7M#S_{yTVL3Vj0Y% zK}J+~s2XGhMWV;X#bRm|q_P>An3=KLcI~q9lw(V^irsf$pUuLxbJLElOh6!EIl&#` zVZs;;ICuzXOm#Cp-Z~-43m2i>CNG0RQUi zNALg)!_>b67!mkD5eN>HxDrRu9{=krpK)`0XnO{gp*@5Y8V5I^-=)`FZ^yDZA3(cn z#T!KB&KqZZ5=e+;YAXK>`FkEd#!?67&TB=;*kDpRX+RPlIx4 zbwx>_RP&#KudMvtum8+T)Dn2<%|$8IdrAT%JQ8IEKUW+6`u$R+FXt}7>RCSvzxG5} zrrt7?=RM%b_`PLy2g1Xsjk&Pcq9E%ieC5bMs_=cwbr1obtI_Y<1EGSfHkM@nD{hh# z|NI}aR4U6WUbIsdkDihGML)4g28`-J_*MQWN3i6$mY)O|Sw8paFKvLo0(X*yrw=ii zC|w2a@8DdOhO5Uw0O&7_EJ%Tpp+jl`O2eQtMk!J#;GR&9@ppUz@~3HmX~Bfp0?H9` zK_H(ycTPL@@ZrN!sZ?Mc`Ic6*QMCyu3tGMmR_b#z(8h9N*K&d{nE3nH1NY0nef)2A z(l0YBY5@e=p9+?8&LvV_TC*dgJQw^dbO$&Wz(UI)C^}j1q$t07uUZ1lPvH+VA1z~@ z?1RKBxNuPlul|gxAizKT9skA>THlYanis!BbN@305ZCPS0EYgx62&_B)~jBB)2=>f zIQ+(6VW63=7I} zSSkB)S%tCWzMF#w()*y+f?)7xlwhe(Pm<|HVD%=YJ#^#+*ZWC9X7gQ}iTnOt6588w z+tBv}OjP>}aeC-=2W$%mblGomKgM9taFdwj0VM+MC=rPO5y&=Yv;OB%hwK12U>D$t3 zTIR$lXMa(et(F3*gP%Fh8_E(ECX?3i%ty{u@q{ZXHlDxWF=Obaa{m046lg5|E?8JZ zYH3m_Qowu*g{D4z{=2TfT{;*1%*ui0KmVlv3S#H1C)o@YSmMeD+=qB9VK~W0kdp`k z&Cj0$mw=U%f>T>|7^d(~!Q~-=tb>pLD2T6UPS{ffum9Ktxl#l_10Y-hJ%K}jvk*K% z`+z+79SRgYIM0Rij|k&TB*_3hu}%Woe)IMD<-9(x%Zu>`f(>l~@NZ~;{++LzuFw0Y zsi%=>7+{)*KKRL=1b)!=`?c3g;BP)zsEfgCZvwyG4(jH@U3Be!M4G+0)O(JUyIHyJ zz+NSRZTY6%Hd->pLRE_SI#{?4t+yg`m5VYcbmhdVKl@u=`J|LjeoQ|3fzQcDKm83^ zYaf$CkNlflK6gRB>9wT4k~6(7BgBRrNb|{$|L?0v;JSkczYFwy<>&t4gMTYiQ&V^v z13%hIIu%zEAlQQv5CUK627LIzd5r-HNFXSK0lKIk2LOC`Vjh1xd-k_v%WwXnq+j!L ziOx>T(gS&Y?S1AG(h9#(azFS}QlDzub{uYE(m&WDonyu&V+d9P_x)e^mVD%)L-O%Q z56J^Z4@(jz^Ww$2>?)*91-?8jGHO$X@pAc=XB=vTD@eL$hB6w9nPNCKflIpdL+b+1RcZJ+0SWS{$q5sVXTdU#aJwq)1_s{rZP;$h zu9>*gl6c0GRG}wMb^sw9Kp_3-Jx=zq%=EGnEyd;WM;Bzro`#%XJ}2K?^8ItO=9=Zz zq%5x`poOFGAsG|yP;l*!zVWR}0w4M356U(BuaLke?)%@`wgF#!$IhMT`=McC(P8AO3IZh z+q+p3(YQ%4AP6oGWj1gfH4Xq)AOw0-CLVxCH|OB7sWlSowK=2j1f+_M=vk2T!P0kbY2I|bn^~f08aSn#uxm-CjjjT zUJpR*Z;;2-%yz@2J`+h^H3;soZZhGDxapQSg^su*03I|SPvHs2G03=3kF!E3FCE`1 zQc23l(@S9^&Z!;S%ZWJ0ak<3V?T2T`C#@D|ncisIm z)%a)6oRNLk>^Gc%?Q0^@kWL&KY0A-!cSFDs)&~6z7P=X89rnN{bP1nZl9kFROW+vrxm`>ut0cfe;Is65#w;#1nxpYi2a6`C}hZ~Bh!#HuL6`jrf1;8RK84EuiZ9ND-%;X`y z#LZ^R_||Ee0q{p>CZ#wrCdKhF$rX!|&Sv0>F-#V!0HD{^s!h>!LBVYR96b;~MNDg1 zhRqcjG%C_>HQ@?$K?E4PL{{R{dnC8x00?F~tk#%Zo|}_Xr_RaZLKRk9SLRm-G7km4 zR2f2U82*d%Fu@c0eqo;YqiMVc0K0)4-{7Gu2v{<1ouGg4qB>FJS`vH2Xc&HU%8uFwf-GS*r$eVy~Gc1i}L~33Hf)fSM zA`l#Io5tS&mJaTpvGkl7<}>24aeus55*MEXKcOG^47yF1RuL-&NBf4)%Lz~JR`mOc z-^mkiDovWJ02RiX(Vb~0?r)-DO(iwZDW1T+gwUV1jp5{MwNKC?>w#!HsL*62a`a6f zM91gyU3O|MY)c9Dm{m^ppA?ubcs= zj8iM<{$>84pGTzt@y2k2-2Pc>3_t?#g>{YH*LM7z3L6N3<_t|o9yGylU>-24Ip0YD z0f5nf6MA}ed+7z!b@ zr>RsWTCPZZ*cJ!Ccei73r(nhvF_2k&H=39zz|a5CKlEYy(3U+^W^?T@lo*)mKw!KM zz~75Vy9WXoK$GIyO!CO*B7snFxe27j99ruIS`(HT#|6)T57M>LQ)vL?U|&B?OCHbd z0ASpzOrcYa2m+`>xOvo7n}Ih}5Ezp<#>z=1#YypC*p%+$;LN%|spj900brmi@l16f zvMz?_LBQ?e{SNy8Zx2=r$j-y_weg%yfWKZHKvCejcy=DhNg>y>50YVgKj49%8HUSj zI)0)JSVkCgCfDFzea77L(Ye$X1+aN<`9e;{$46ysd_;1&EJ!P@zju<3f~%;sXQ-I~@9uz_l~^@c<^1%`OW_xZv_!22S) z@ty?WZwdC_>!lz#{5+4UhMd4$gTIZNrJ42c!&fFJ#>S$iQbq^k`}K@FXp|I$iKnyh zoHriy=#v0k0er}R822MB* zLx^X^7;4Hd-2V{wU;(xv#+k3^HYqhaQsahtG|*Xo$OAV7ZQU{^TW7~5m&sy$lOQ{W zl0#MiGIk)h^mZUet!4{W76<^ZBmjnI`R3dtTGaSk^tTV zNQ{61oFIe56-a=fC-^~xv`$G5T8TNxDgKNW#EGxQ`9GEAMkPkqi`h5hDtqYpTV!X0M;JYS6Er7o#PJ94C@ek2dX602u z0IWlRvD+~aQkbs|p6dnz0Lu?R03irggrU80STE?rPziowsV0MJ%RY&Iy7h*F8Jh+0 zVE)5el$e8iruK)qO@X8D+JW$U07IJuKudrdlXz|1KL+1&Ho59SlfWgY0XXb?xB%Y; z{LO_V5QBuYX_Zhrq94-97!z*Fbl#B})bTX4=TZ>)tQcF|KX=@9Nd(Xc+{)TO`xeNr z8-i%YxpOfmPC75ibPoNUf+-I39wvUPu~ zLB%t-@ht5I2nUssmm~ll)gA}2flzF_vMM1bWi+oIfXQSX0y&YS3ladBKs;;pHY}D7 z+z5X=H_O;W&TN?(m2I;VQh?9zM3XSHAy*`HJYyen1khqU+o&zo{vNDKM!u5B6Ce@> z9%T}J$tUZQih?jrZ(qy;XAZbd{Ggza}ooHFHOJ{#iK z00cOXoFe#XK`_uG0yB4fYKvVft(anA)XsNWX6V6htCz(#)?lVXu-a=9>zBd2O-aQ% z81TLlfLZ|UaJM0dTDKwpXN4pHpVn|^B3*!@n~<5DBfG{kvVSHoTZ$!;e;yW$Z+pRHaU>dbW6sasubg8Nr!6q7Ede&|M0Yt*NvO`=BQk5Ora0Qq}C~dxYKAK)B7-Z-XyHY zB*=__=NuQ4uP}Bd8m2r!p#iHHIuN2i0Uw9T=Q)o&V0YMUqkSB5>!>Dty{w;m4fLHA*7GR#08wZ3v-7Sfkg8RuZ-7@;BPDh zKVR>>>mJJl2Q;zL0EY`CYxJDQT*UVkl`B?Ob3sj=uslh~MJ-et~t2cLrlGy+XJ;^xJL`N+KWJ@jEZ7qO== z4(tGg^Vs2z6mlV8lo1TjV(2dxg8M%!Bnb$U<Xt!(| zw_~nj$K90Ov1`ii+&OKx6jHK%G$Y$a(=t;?%UC`wc}}8%uw#kz2Ke9l*0%~P%hs)1 z<<+l#wcLB}y|P+r+P=w3-{e5jIas_I`0purRE(GK=S@P;%u$Rhi9ZRYz`g(Zq-!tD zU(~Q#ZvJ83Kh3QV4c>)(bnxnhmlaUiSjox!cOrL|gXmU6Fg9z1MUt94l^S7fP4Mb7bxg#JBz#J&}-}%^$GWS^BCQ@BVWkMzq>q;iej7fb3|2uzCWbw$7%|}}x z4!9D4NeUW21(z-b8A?HXGI+KE#Y_wozWT-A2_$@wX_fuGj#UTOXPq1Renv zDQf_+m~K~~5haZG4*F((?yQ}=eAX^6Ubgkpstw`q41VG>Rc{wY&1X+A%Yh5u3CVqnlt5Fo=ziW~&12-BWrFgGoq_}sF5{p+fh7RO3JhS$$m(kHtJq?=MwkIa8 z9M|o@U5J33Eyid7;6q&T%0!hQYY<*I#w4Wp9x4`?AaLVsYtS{*qtk||m0@XCV3C}7@+k%XxKozj{qdicdv@O=MafAjU6=g_xl}wV*S`3meEkbg*z=c` z<l5&&PMy-qva+(GBoK}yY@4wQ9^Dnr9l`Q~wbCzpa_|)? z^Zr{8%XP0Un6xvL(UGB)*Q`y(fti+-nQ1Zaf1k*{8(c^>K#cp2+n7XQMQNf4Sg@S+ z_c|@RQeLz_dGF84=GyKyZLPg#6OijD2qOd#hiDQ4*dPe$Hf!Plf6Z3i&aKSZUwrc~ z$lG4|lfqZlCd|lEZOuARgo$v}cQJ^uBAA~VJ4yhf(iNaqfSI5c0LwQ{E|7T*XMvf> zkw$_p%jskUXCn!C_{gX*TJTpe3w0BIe&kryzU`IM8Z~x##gliuLsa{xQW0o>S8_Sm zpYew#PJje>$b`SP&fIt;2mUPz4YX6f@|CaX{ZOj}Whk!c3=`5d37wo`UUh#bAFdCY zjK<&_g@<1@(?SndLR_v`$<;{^G0-GKo3{QaN*tDmRwj{Rfi1v|2`KOK_WuHR`-fAg?pQy7EP zl^lSrE?gmu2@8cxniUy+;ce3HS+inOa*T_PMftH?{#<_U zkKZFLuz9cEF_iTz`dm+lg7%Dpn8yow`=u{^Nhg*4#2y1(C1BmXd$-D->zy%E@l_d* zRizMaL3TRw?4g$3eRIliB_e8ja`KR;8lRwNNo6A@nF>kVb*0*ykj45oDK%jcHw&;h zte~N^0e*s=rBQB)3uO|#XIY#t$+s@tFSFV02C5p^qrcBshng_AW2@az;ImX<;pFoE zeu7IEFG;12pJ7>k>RX?dy;Hk2rz7X{)CJ($c?%uSj3m`|SC*l%s;#ae@L6kkzuM^d z%Ru-XlR0v&m8qD)L#naWT&M4iSI#AHQ^s?_pK-+y{JC7zB;mUyc(z-ZTAv;4NH$x* z-wOCnquFa1M@_Sg;HTz)%Uj-pfxMvgjyvwq*H(8c1aB06Qc8s&?55!{CZtshqvODc zwWtvM)con+{5=5j2DyChj8xzJ6Z$%ej>%WnB;Bq`KGKjv5`uui@G40NN=iEAlo0&X z{J-;NxFGYha`b}858p2OI=VYw7S0<)z^uhnyXGC6mRDS<1U+c3_^9S#p7@RMd z8JwVE;RYZAn>!LWTLOFy2w}}j>1Tp`0Q+`L$Za=l@xc$RAAp~rXNdz~j(6pBT_px+ za9RV&sIk2FM4aKMNpaIYX%HxZe@XCgBMn1p3xz8?(HJ_*c#{s?8%~-ILEb!1q7T!S z@eFa!n!`;w_>xzceYd|*Mz?O4A-=aW92n1ajfJH+fc4XZ<-z2dv_zLL%-I*dWCkX8 zTfu+M{Iz`H?@vf|$&-J6&ljL@V)8#8{5AQJdk@Ow7FU)pui8eVCDld)njbztCy;T! z^!H!-(wFLevy!~{y9Pc-dExC- zp{u~p5`dpXz)eB3Q?p6}FFE*PIXQpIR$5glb2~77f1d2{yESDmADy#q;#RwOsba&!7g&OyfM5QNf0femBVulQtw~%sXKudj zW|MEMN!|9zvFJ}PE1O2!cVnD*MQ4ggASJzx#rFgPQ1ne zekj+J)5RbS&?jjrocSjo{2&OH*ZlYa`QUF)EBG&78W=YfGKgBS1-m6|?ZoT(4c6#3dDQwv)$y^RzUfK>}6f z%=_SjXQf?b9KjIa1F6Rh+$>KXed-uU!zWFyAaSz~wLJsC^t5IaS}P<05*RHRKF<&R z&=1M=*I%!HAHwV832g1vuCz<|0cGMh{fSO~$I{uBJ^5JOzVp!ktroyz@BI<|o12eH zb)jYlUQP?}v-ZxtyR7@IeWzfPf5GXa%se z7$pkpD@0$EK0m8JxyR)sAo@9l%OUt514Q7n(|yfP(AS$?SuHoE$z>b(H{W_{`6}?I zl3_g;-AVdMKV7aH!|&znKAm*>Skxjc^cQJD@^``O{QSHLz<<-tHyfTF#OSI@y#exZ z?YYyR6F0M0+duWZ+hzN%R|$U?ye`$UCIJ8LTdp%XZ$Z-Y$0W9TRua9TW$N)<&hMBV za95exm%j^M`wM9kfPeq(QPYk(GGEWjrIje2o6fIn`1k+umbYmw?%ZXsdEJlLJKy~> znYwj{Ozzn!qchM@`8)*Cm25f=(1qb{^+1Frn1~nT)R#YS75L@y4gTwTf!hS4;AELA z3wS242kp5&RGYT~2PQs&PeS;9`2b)6!}aUS>e8H=^@Xjw|snFlXZV+vT#omiH7`;x?> zX_>!J1Nh;-0bHYS!CJVN<)yYl4#`YJCtD58L3L2R(!Yh4;pL=fvfk-~48M zB`I(ofQ38xxI)oqv?eTKEziDJe&)|_l-hDnfv@Gz|BzeXoRnLCq^(xKlXoK})m(Sdvg8w7_Tu_LzMOg{J;y%^#E_ zM~^6W2!2`tEDn@#is|WSu5(S0L%3-i!R(yIx~iC9qE9=Yp^=mz6fVP2Xe(8JqHQzy znMp^%@Azw}4Dw0AOy|U3BodcrpFM5)UA#fg7PD~Kh-M3a$Je{=f*s6ahfE#?4Um?8 z2!jd%KmNp78&8ZWxNm#ee*M@ZUpyv-vD@@_eBFJ$-@&bD25x;_9GLnUTb4p~UKYM} z*^+z+?weol3)17Cj>zQXr2dYtQ!lurzlV zZ}!i{yMb#kC|iE~HaT>BS+2d|dGLF?675%I#BIw=u`APsflQ2flAEc>^3jmJt3Ur;px^w; z-GRULQ@5H|UYCXCk+c^+a^*+XJqlrH!aVFB=|`3e4&2&(`SAXw^<gXhHx1rw z!KxX600+`*H#HMh+iTk&z5~7p%Iua|C4`^^!2j~oUy&W-I}PJaNYy3*a4P)$|NVci zSXE#cF7f%5G10;HTn40Yf`{y%0H~Limh9jC-QVdz|BpZW9ROj^kFMX40S zMj0~7V4p1f#;ok$f32GMLD_8T2PAOqwb!cu|E+KNd*ui5ylICV=|L0jm~zy_56Wg! zKOlkWU2*mQvmg5>{Y)xWHDh4k@!=)eKYLM4{Ge<$^#c+}+}v0H|5Fe9pE1d4)0QpL zw&UlZqFWGQeN&!3Ty9&Fk0ewW~-V*bVqx@CUmCZ@OW> zx$7EN?%ItpiPf$1xS#8f;6FO*+oW&W|1ufBXPdrfA@Es_o_JQCJbGGklLw3!nUQvM zTq5ZySu2&41Za{{Hdr2v;jT*JF-LY@K85x_z&vlK= z8=an&biM#L?@4pw$wRhdtpV#x4>H)scQoNTc(6P#U#Qp}FL|+i=r`UWzxm;xhpe@w zK3|c{bY5=T^MmrzgFhfY{7b(tm1j@M$Vd_<2k4x86JY%^=*ES6kx8ZO+UlAql}pxj zU6lc9ep&={XE+guzY-%XA@=$|+CUVoS!Ug!G z$gS7m;a~W2dF1!MAeSKS%i!3~uwXnpiLsoLYIjn)Ak!+(1w*-U>_rsv1}WgRn4v;`vAL1sul+YXfu7ci3HZc zPtA|IK>%P%0-v42k2agF4e)ca=Y8*cpFH!-Gm>!~Ln|R3k3!=oVCqu)g8&>CCVP%+ z@_4|GCFno;(T^&~`O3Bd_;cx$nVsDN#`KrE_?d?epD-TJI>P`BmM&U?zW$!yRgm*_ z?sR7Z{Bbv7(pyI)-dWN1{LHooK47NpMVShpgC@IR3Hsmvm_NzKSMTvF7J!qDnBvx< ztVI2wD1PRXhqjuQotCZ{kpV0b%g|p=enMk-41Pcfh~VkZ{f&J6&^h_}-~Lk&z(XcF zgaweS$+mn$_Kmb;JlzH%_|LW(^g&6*A|@G%Nivdvi5i997Ll?ShR|TJnRKMj(`6vQ z@g#-i|L=SNOulh&HX+wfM`RWPoE!H8jGj1p2IN#U>0(w69^9wD3ktRVa;c`^kHk}^ z9~qTFa#p;^7zBQVE~I_g%U-4m;(HbL=Vw3rS=qjIn`(burY|q`D2%D@xWf$ zx+5x?q=h9gAu(8=_4<-j7K-xtm%l7CJH||;583tFGVJsu1lNOeGmOPx1YNyW*K9!D zZr2jhTj}JhGp1;!v{}Ug;>wkNV ztbF*h@)hbY@ZOrABgFJ=5p=iu7UWJpccyxfj zFYy>x+H@90S5LgArw5fLU|Cnzj};G!6AzgrCu~s}>QDUg1BL-GEP)^AzwnRjWqg23 za+|Z+xd{>5MX#SQRJOpF_@(fenxai*9S03-cU>i_cup$tgC!2sh* z82BFiv5t5UhFWP=8kLg%OtMMm3gQ+JK0KtnSr2{{FhyfeGte_GFI#%tT&tQzMd0JK{zMQh@nCGMty(@UkS~gAMy02HX0fy^S!g50|70 zjSHJDgn>=u`jSKqgK>E>D~xvW?1%=m3`|P69hd!~Y0gn8xbSDSCj%n*=GPvP@StJB zeYhTpy3AyovMtw=G)%~qMoT{Pu)lSdWgMhKS9+i`#SqMJTpZNlFe*&|zwCu%)iY9p zRZ!!}GMs=70W7ers^2dk!2bQF%@~B9ryGApGjZ8ch{~3HNX8tVP7Gfbg3M_+<|asG zWAdWgpQrb<8Tc%*griHZ{YXLj(NXC|3vfl?PevSBE&0#E$-baawm!&EP?TM}b{U47 zQ@`-!TWa}c-8cU|ZpiBOEX{3$ZLzfS`CGoJ*1W3zMTFDMBR{M)x}F%077G=lD>UtcQH zO+Jpl(I>%ZFNW%d0T^6^5+54$@gN-uciR%dD}6NH!vKudi=`CwUNq$sKo}+<9!PhA z;bAn-8U~3w`ns?j`ppK|mWL?9w}a)8AIZtsSV4+efCbTrZ* zgh2@4Q~-~={WwnzFH36=oyldVu1$csQ_@Er;5{co*=Jl7W&cF+tZ@<@T%IQU&6A{uyZb2I-$O# z4OD<>NecEn_o{_+oX{&TfI@0J}BfIT1p&b}%M;FT5vR|ptueEz~kyLEQj5cIl_ zp5O-+@l;mb;>(?5s9f`>$x23wfB+bTL^~u3(nxS(#&#tMz{LPQ-V4wCuK@%#`27uN znHEfLntYs)17+Y-xNEW;d?Cg{b8GLggI4%H=J2E7a|`GV*Iz5Ucg)J5xdL}BhuA1XfD5U=A5zJF07U`w2ccb;NZDa7`Oxo zDa4(JU1)!3Ifer)cvey4<=;VWq~R<_KIkC2_pxVJ|%HJe`DPlmyX$ zY=W@o2s{xILH z2;9HHe1+V(2+f3h;q~cL>v7|d8P2?O9-sp&twjp}E&#W5GlLC3s~f;L*Mxg!dv5vW zQe7WHPEw`}<5rXiEWH<0rq+YLlN#=uf7`w@C54fgT)Nnnb7x_nqgf&bd8M_74jX`Q zxg(LAyBL?D^IYsN{zTc=@wc2@~I)Am3SON&(={OEr|0DrCG41=oTcQo->*2Q=W~ z&Rmdm3ZPDgVU?mL3@jBqbqsicnndrzA~8*^J_(SJ*iq;lE`NduxKhWbWHEU+=?gE4 z|F2(EaMr=E2@w?hs9;5(0Q^Lo_!tHmLxRe^=u9BN?Xyt&+SxQWebd;F=a0o0^2;Sa zM*Wcl02VxG3}2K$TNw3{0h_|Zlqk;!z<0I*fLbUiB}qsbk6A~DFa(qvQ+oJ2H3ql! zDgiLE43$Y6nc$hx^4#-3Ha04E-+hnVc>Q(KuC2(W)6YnC`J#ALxC`(@xg6v#12H@o zLJaed&x@V_7#L;Mkwy!e1(ioUQL!_7Ru4@y{n>gSQoE5TNsjCs-WyFy4}#tW(eO~m zB$zu*|I`^uDgmt@p|*vfgxGgrd9-zL4=E6U3!?K00R2effyQ6MbuR<_7uy4wZx2BN zL#g9;cu~MIgAd)a%~}-C0;JF)2@uci!zmCzf<%qm#W3TRF_!pTz15YAD{W1( zvSllqe3b-fTPmliB`^C>nJ|KuT zcW2UCz&-N-m=vy)j`bv?TgH7~JVFwJ6-BJEt7*yMe~r}-w_zE;H;J}DZX6`sW)Cu~ z1OUsa1uLp>+tAkk^oZ{QPXqdO#~)G`en}F7l7#T3 z(KZj^bU^^NUiQsGe5RGi%IYvCE6{=!n3@fAViV}&(bmj;-|Mt|;KR4$sWaSt$DL#Z zvz`^VFmM0nZ~n%AMwHV0S##;s5m~x;N?JTchuVcR(fpZoNOD3Rc7%*_9T5n0Y z+LU?&rZs?}=h;I$aDxiEKm~@MSK>g&PzzJ2slgPGTyKV-&CMfD983~ub1jqn} z7>^2f0nQZq%SAssxc4LmD~e~14WaUS=pd9HB=r)s+-Y>esYYKe;(Z0Aq}l@4E|tsr zxofWR4>V;te*8H9rfvX9fQdgiHq0!;T!-`-8O}}nk4L}PAhc)auFOl^x;JYk^ARcH zM!D)kD@Qkw1G)on*GSZq zxdc~=GECZ$LHjVQgN9VgC27D_XtkK8neJyV{+l8jmT<==U; zy)@@1*8KaweA+ZSaG{uh1AcfzGZ29++g9gVDDMO=GgNU0C#_c!B7>D`wLZvy0E22^ zxG9W@R9yf+orF6DB2Qurfn~U-L+L_(^~i3FBcG9J!iH!csdOa=QcYu=fPRoQhz-h& zt62^B{B@9N6|PhnKd<0#6`1@z^koQ2GY-Oa@SYX`Xjfd@!)ph%4R?gqgR{?qfXg-728`cPs~UZlm~vqN#+|!OsCC=sCF+9RA5HG87`R zJK2M#CIt&>*YA9El7j(Ya2Y2o*qLPV5SWZR^rGl` zj1^{iArX=c1W5aXeGlg6j=%^kfUeiKx8FV^4?lcaR@yytv_6m{5Ux{|wyZ%*1rv{( zfxo$s1Tdz2LUjdn4+q9twbgnK2i_*bz2}x|c4DlcLd-Ege`!%}+?|KK#5DC+0)Bon zm6f=Y!&q`BW*U|O2>^qx<}*M5H;8=^By3^dl3ZzBaWaYop)#~CKNLwO5#b5|31G1P zJg$>8m9;g1w#vgbq}i(B`>FtE4P(^=0l@5y!xT@lUpWudmH+ZDj#w7vki2YHj3}kVo54U}2 zm_eDxqNm~@ffQ4!3oI2p1IDcdGU%ZlkLq5kc{Y0)aysJ!ZF0?;e6=I_7Dx(uhHj(> zt=u#YtlP9y2!6OyC0J2w_*;Vn;NO^J$7f9(?s5|S=R&qKaFMgNB{@8M4$ea^3=#nF z9lTG5+K{WZTt2g)ZCSR=q|x=Tg$EH-JQJ`HD19?oNb|-2Uk7d-tQZ)^_LH#*d`{$X z;QRq30Z^-xFwh(~g>S|i=F{Uc1T-8|YJm~yH&VO!S$uE}n2M3)ge2S<4D^^dP9B|| z!snT8iL=po$W&bNx4q=M&S!t-fqyY2Xx$QoeYNGuTB9lDT19Hr68!5jEP$riE__8; z0yO0lshmvB?2yX~E0)VopZNHFrVFrs{NwlO&)<6R-^`h(zAbB)PKyT<6AulImQwJ4 z>)-#`zwmmw6J4dl|+IRdo+@SkQ?0&((bo6LB*UNT^E zZh1bjynz0J!O!^)@I)Sise!$;cNCGg$aeH*vc)zUt3tc5Y=R>9L*)dL<7IOf5QZCN< z>sE7%YjW+*qRC|#%AI41ZE@2WKUDTLck*%THC!Hj?tT0A8IlK=hc8{aWN|sezTvty z=L4Ak!4I`n@lz$k%sT;*Z4L~Z93L~)N?FIcR$l`Vtimc=gC$VGxYcnFT^XGu=?vv1 zuYCCi_=6IVz>|-a%!Tt^Iq^(O7Uuiv7I<)_Xu(46Z7ga{#tlh68`esa{MO@bJ2?)o zy2*5QP;#L@l-p3!X;^VEpvm_kkVT{zk$LNb_QkK6kv*w`RB}C8o~z3o8x4E?tKT3C7tYD@GmkM!)08fpvfH=s zF}Yz&3WK^7hN#f?Bheu*e^ze& zr{bo_tH2WMd{|cQQI9ClxqRnG??EGT8PD;9d06#qG6)BgLNY6CE|ZXanl+|be$$*_ z0xLSua@y zzoZ+3n0|^o)0nP`$+rv-5cTR}I{+{0&_l(m>DSdCsxF?i0r)?4--peyXP%UY9=bv* zU1)X<0R>_7@jc$!Wt+;4D$o=8aT7~rO)6V3ES?2+(5HN9LYh8#w=9J zAZ61Sk7mPIg8zoMy+iEWi4E|xG?e*9u&Z%9sYwwl!+G`)052u$}(#qPlQfFb9R9tLK9H%07h@Zt<6m==5x){sys^Ds>=y$`WkQIbn0pFZ8UQ0WGd&Xyjf_U2)G(g@ zl88R9y28<1pQLco`iIgsIGV9o?Y|I=O=fLqm^^{PYgU`OV>&0CkDTEek8o}=3?Dn% z4WDs+CWQE(^R#>*B}9adc8q@@@@=?3Lkxl*Bg0hfL@RvFb9UOF{n&Gy_%9pVDw%Bd z{JlHvk{{V>Z`ql#(}#kvD^p~(ixZhC<%~=K+595>Wnp!lgeM~YXMg{X+QIw2Znec( z8@v2^A~HjcM~)l_t74Z`;ce5WZKdXi4GUJQ5`I$q*NDoEU}cu4n_Yd)pq)5b4X0+R z;oL$sTw19KKN~V@>Wl-#k2=_60I2sGNH}wxq!VQDIR2OkI3vi4h_h0GvLfQF^%pZn z*4F+a8y1Mmi}=}0gS65}NO97T#VPs1s0e*T%tM1HHIlGkVge}HT**?ovL#DHwtV1` zp!BovuuD3xvfaP^54Lz{zw|TNnX+>OoPOB-jTPUOC2UoseAGQ7%4)kIJ2mI?;qU)H z(Qc{0U;g1QhYK^uZGJY|<{H30hk(f$NHkpx5PDAS8ywqYLzCMqFEe8Iwa*T|{+}Q5 z-;#+=m<`l<>TI85?SZ7H6FmeU6Fm|&hA5Sp*$&-L7A5KAecFly7dS(+`659n;dMXx z3wBZNu+7)f;SJlXcGDlc)B4mWjpzQ96aPxs3HG-W0k&dQjAOC4mjJ~5?U+FPy9OQs z;8Fm2%WMnd&Nu@|x@TU0sf`Sk?V$rFY;>sKe}@S?c4R7?k`}bM%qqHQahPr>oXOG` zt^q;t+#}MCLfg4>CyXG7ovW@TsXsW+OBm?db;8F)i(w-ZIC<)H=!^!&At91g$>h*Z zBd1nHOle`hX?NawJV4qb^*{LKH>^wlyS{uhn4PW}$wt{E!*ehU4BF7(hz$*m;3y7u zY#R!$y?QWsi*bd zNn@_@EB~HV@B6sDG8si!0_E*{{TRsX2$#k8+0$V)ZS&ov%`n9)<}Xtz+;PM6ZFzCg zMz`&@YoB|wO>W=mOaNwpR`A%d6XA5dEiNnEw4 z0U>pgZlR6>IYN?sI`RL&%bylxikqZHPl(_LRXVr@mxeQXzFBk0)(7HNEJ>-(O6vvqL^VaOW+dZz$1&y37aW zopDa4)t1uaMZxUDx7m^7r|r_KpB9z|hpm5j+|^rlq{wfI797=2@3$;rC$hylo`X!1 zWdqT>R@Ec+jX-qS3?_@rlp(#d=q6-d9rP`@XFihT#mzfybZpEZexUWPAGB^|!G7)6 z{+FF-)q|t5EY5TjHYW|Bq5c>f8+YjoJRTF^I|{$Y*FuEo-_aXH&ds?^Te?>BUY(Y1HASfT`)a8 z9nd!v7zzFW7z4z_jz%%z$Nrg(z-J2a`PFJum84OsztUN0PO_tLPO}qc1!BAA`3+3`cmwmeTzkF-`1|A_86F)?YIHf^@en>dcC46F33tsN^3cI+k3 zEd(=jQ7<8Y@Lk}zCNPIk`i!*QQ>%>-wf}sW|NI%tH%j)pnTM_X*LT=eS9GmAAA|ub z6&plxrfp>{<HWfOQicb)Vg@SC1R_QNgCOpo7yuRuGj)5a%Bd~=R-@Wfoe>+$>b3$4KYpRhSQpH0y>)7T@0F{4y z%g!)g>JLl({o(lJCPx6Af&kfqqVS){zK5`5qDSh-k{{<6zr}>lwUm@3CIDI$lA((;E2y42Vwtynz)R;9zv0kHtg=c8vVEG&4QJ_^JSI1}jgVGQRJKXCf=X}kaa`;C>M z08^FRmK5R60Ma2Y>9l-3Ra%N&VaJI$&?q@t5E5&-RknT^3dsNkX!w zanv{n-$q9v_Ho<1Ws{AMPujrXnDBelzIaEJ4-m*mFm2sB5eyEF1w(`QMVQ8x&`={h zgKtOX$H~yu{)@+U*?8#(y|k}>mbFgy+2XDLVaIKs1Y^e*mNPal*_Lc4EmXa3n6@?H zdqb)P#J{{S@5GPf-*xE~HaxM}B|qo+QrSNPm~ByV9;T5c5Nj~0q0st`)Xn*blh%^A10X-(*#4lv=g2PXYAf=-_14RJqK|M(CID4;D=qQVC4rhuZ zOg@`(;(z7yo)Q$wW3tzVMd-5eGet{f3Z#2-;%DACP)X=>0vo@-5dPQ8{?4xY?9bSa zr|+=E?6CE{`;di$*)S<}F;F|0>-Bv8O#g`svX|V+GxKMO|055>uI;z~*H75ueedv> z1|a_5|M?#a7Ec_s>dYxyZHfV)#;Y^gby(D3*#4(&#vi>>T3~2{ zgVJn9ayB$vu)*Q7^@|y7+PpdJOAUmj@+IN6ZQC@C!gt;Op~uSMOzDi&_Z|}InZ#kH;gLj zR!bqBU4#q$5`MGC57|XmJ=IMBm;u^A{2KvNXazttbsPC4l6cuS0FwXSuS6@{%4C~T zIUmwYcMA7h1BeHTf)g+*J&mAu?%95Njvl07w7+;!+);Kr>6o(E@$9iSAfAL45jgQb z=epfNH;@V$Nabbs3l9`g=}Y$rU$!8ss1T?tsnaKO;h`V?Cwu-Uf5;C0)W4Zsd6`}N z)@Ry9FWg~6x3V@o@5_hrVB^H2V1g_ySJsIi`0uZemIiZV|N1xokGI>?uemOG`%k|q zNRj2HTCuR+ut11UQUoT)d-{?k?b0csKaLI7Sc8vAgpwv*{j$_fZ>_(zz+V9^EAF}b0k)Tf+ zkOlx3Xykl?jSDvB1Ay28#tMe;c=-U3#(EOEkED3lReu17@BTw4q?$)bMgTo`j^8w*+LH!>s&{|swZE0)D_N@)tuJ)tWce@Doh8NiJcP*Gb z;|5E~Tpbqip1e(rUbxswwIoO~)|OUHs4w{ifV*#r@-F}oKLigXghP+scaLiVF%0Ec zy~s2wD=(w(@c74o^pE`j2fi9D3!d0L<3aZ9$m>3yYE3|G`g1 ztF~PF3pNt}vo`e?8ng4(C#jrkH7zT#m683Ok_eLqWh@5qEy+au`GHXp|7I(XOj@oq z=o?YPRf5HUe2o+JX=|CgvDoqK^qbmiAnCbY;;C^`1GA4lWr^+oU8| z?evKdXCDQ%ACEt!zV~Kh1^`GE%j)BjG^LF1ii6rszX5R`fQ?LGqr~4x{ILdr3XVF> z5XA75i?_R^-nV3l~FAQbV! z05Y~^>!5Al8EIxX{2(V-)QO{WwsdOIjvQUFnic%JcxrIVj#V2OleU*3YO>+&K72Tm znygx6UjP6m05hQA$js);Y6rYwB0_NRZhb)J`3BJ0F`L$&d37b0AkJ zxeowFP&x9bZ5rzjhVta@j51zhMkI5&0NXxR@ne7~)O7#Y8F<^BGj_?oa=;#o17(D; z2G6$^TGs?%1`#9RH;A7B_JQ^>V!+`XR7R5LMKmJ*(wIH_Wp4>DzTtbE_%FNkl3=A% zv{ooi=~-WMQgx)_qw-7jMCvm!yrv;$H=KCG5g^#Q)xtaHZ1~1qmftcUtsrf89KO#| z*LZ~in4EWZ6T1jZd$}oYGl@f`+_9B z6Xr>wf5`fW$E>8m$cpGbb|X%my7<|y`p1AafbEa-@7k-c2r^Q?-2@`eUVVu33oE)d!D zz#ETT_rCYO8^@Q1lktq4aR9{rg|9py6+LtfU?VKA)T~x-c_bu&1C5oP2naVJd`s=N zubM;3Dzr6q2rzKfRx9oval%hZ&4~#=(X(}kWQ2jh1c2D) zkD0(m$-il!KNtuywr^C8qfk}Pj{nbQk)~ha&H!=ZWBk_|D z;2nSYC%!b8)qx$NLPYp50em*n_=4GanON#$rZ(~RQvmFKrh*X?*zg+TU~q8Aoqo*c z`|3S?A6W!s<{>(=;~IhI29(4HNc0M`VHac>0M-`qH&&$%uc?R#n_>de3IZL2hKRlq zHm$x^SE;E~#U$#g)v`7A8)T6S=pYIMsUK$$_qFFJWRG$PwMjC}Q@72<{HIn_pjePLFzr5Rt z{oZ>P-Q!Q;d|-SqSZt6LvI{v5_7AudkZ zI4Urg%mw6uuj;4eRvz1~shrcbz@{r*shV9|WOtsX z5K)CWiJabXX=(Ao`2a4tG^o|8zOcp}M<5`C>yEi-WnQP_>)=D$4U|iHo0*HGUkoCS z04G?f#9n|UX&*&T-a_FVsf5sQrXWp=h)4F_M_ZYlnhpEM27;8Bdb%Knk^{f^O+{uF zj94!s?Vzi%A;?8UEkaKwSkobf>uV>}E>U+e&s;u{rlDnoBXwzIJ9Z7Z4*)aZCuHy6 zcGqEBu(EyMD_>@(PJPXO{aGLOclhezKe11K{L4YD(q{`ZeYUjNCo?5w$Bsp7C}JR( z34sRS7XV-qFbmmU0jo%*$cwpPQmWJ&mJ&zkBgm_k3}196Z4XNLwoPqy)Wq$gfTO61@&Dy(`SPkqJh+^^(Wd^ z5QEIH_hM~c3Wkm{tuXCiwwQ<s$gqciVpgzxxZRGT z==ki2;1W#@6hY0eoI4mmF<%T87U%5biGxya9A3~pp=O1!x*m)Vrh>gY^0srkFeu+|^Q$GB>*Q><)@L&-t2VdXvV|2^CrXuWi| z*yJUW#23y708ujK2ST_)=TD1#0DRA!J&YTN9=`y>i-7A1;6dsW*_ZQ#u1p6r4ICwT z@z7o!2^nWqDC67JeefL>21-FDmvPCz7Dy4-5CiJ8ON-OC>yjuF4$eMcV>mE`4}9ovzZk5@ zRu}zRqn_}%0g@N5@9&67=V@;^q_3GN5<1UvV76WFMa8bRbj0_he)Ooz9s_XDKu2aD=e@%-dko-QEr2DT z5ffm;4&P_bzsooS@FM9?1ReYFA+hJ?=Ota#5Z!~ke`F^e62cG=GBF|PKRW8F6o|uy zlOS4M9Fs^f>~9b!gPN)5Ce$Gy5z|bLph6;Egv}Zk7G~|#$wPMR&?9#8;G?!UH)Y3X z7lZynYTd+p$)(o?c@gQBQol_~N{N^HGa1ehiMO(3Ei%w_)dorBs))ZP1Z_&vbcJw2 zQ)iOQ3?$GN*d=zUX5HncI$5%o<*<53xOqeG+fw`B+%SPeU(zN(FQR zjbp_d+?>eBq>v@ity<8LM6NH}+`@v?!zCe8Lt29Fq0&DX*d@C&Qs>K7OO4v8)`-ot z%3=U1n_ccoJy&0-Ju6a2>J4^C?)Z{rf^|^Anbu?ABNZQ2Q^dxf-Yc4}i?jg7opTrz z+5n6(+O|Eyka%Gj<5m_!FG|w0kjGbu3NMHYA;S~q0BPP~3eLp!Eb7r8Nc^ObHcTMX z^(Q85 z0U~}rGb;eMWW75{FK{A(I0On2X2~*K7yuDm9Qh7a53lgz;*#h5!$xG#h!8`Xc%+y< zdqdS|kdeXQMX+@j=Vxu|)KQx{cF^We9<`OZX{+gbHrbezq}<&9ED-Y#t(MIfKbJAuyBR1bE*}SxX`Q^6F%VuAkUy|Bi z_23+sKwCr%Bc{JDB*`Jl$joDmiRQ!b9U1*Py{EpXFm5nyh@bfU zlHM6j044wqc@U5g7KYlDw$+JjeCr0%{6N|yMGulR3pEa1Au|l1C5bk>GGhmhe8c7! zrfl>0r0v{7L5$QrE^cIM1I(h?uEQ^!uJ zFPM#y#-_2WRiyoi3CP^mQMfD4-IQj>R^&}FQnV-p5D81FRS5}ZjAZhX!;%;np+$s~ zlJta;lZ7hOG0+Xk%$w408P(6}d0DCU;CrCHT?0pi8>^E1tC-Gs@5KyO6T&%N&vtQf z@EH9D10dLrwGs&6NPQPWRi88S1>;NWzBuqj;bLTMTV589N&vtlShCMDbf#RRaCO}{ z9#@U&I)i`arCXzcMk?s$@!Ee78G?_FcpIb79=ro1P~&~yeLOL$FPYIp3UNJ~XMd%Au z_jG4fww;(jrC~=-&xT9lvO|SJ&{aFro5n4_Y0`3oWy|Cx`Fx;gw-8j!a~Q2>c*u@D z^bK!UR|vIb@5Mo@Rnb5#T0=Hlqaw{oOklOi{`t$6?Q5tHR&Ai))Ni5f-elo7ri#I= zG=QbPt+t%rVT-|Lo3AHr?$mLcK61d$oSKsQTNMI{-ZXxTtalX<3={+N+b{w88#|q3 z8xTKX*aX4Q|BRofRud8f;0R0;O#!4qaJX$R#NvoVf@$|lvm4Ub4h;|cc}{(SzX(l{ z)K`s0O$`v9>Rnq6o9=B%28<7l1}%+kT7rcnHV~dCkwdJ~#|~eOo>`IUSy$W9-lxvYgj=_52@nGD^ebboiq6;(LN3Tv-)HuoaWPR^+?e}o zus1LO3IRWa>rx*<-J|>Z$;V z0;l6;2gE4KGPP)?Apk?Bb$rkp!H4*7L*Bcl;&e z^lf2oT!hr91UP5d$g?HevL(Xr6f`Je0)g7%7&X=3a`KNa_c<&u)X)O zBbF}YgZ_(l+2+eHvC%CPk|t*n1<3ag1VaSG9M~V;`~yEEtjOBZL-*O&zIulZj|~PZ zzMOSI8p(o8fjQZ5^I`xiqKB4Y+CngU_+dN!;O%zou|qP$mPMG64`CzWZv>ct##V|-#BeEu!?KAdl3U~E_0b+4 z4{(O*I-l-?0WfYOV`DZkIcZ}mgYF|>hhO1=#uX>=+`^pAYP@RAn)_WkLEF~)L^#6V zWL8p420aeJP)s0@CIE5$??3tP;r@S_wL=y~zPAT0wSuu@=~t z{>}E(YoBLVUGr=k9GM6aF7aZb>n|O*H(jyE&w;;x;4v#@Q$bqHKCdw+6Ob!OY6`(P z6--hwfV>#qTyIJ9E4NO_=1$v+B7nkOk69WixMO({=5wMjVzBJJd1c>y8U}3J%%?g_a3a+{4YSF3~iTVD;s)nZ1LFMbctiN8)MFtSPQ6k|FRBJIC?fLk z>Z`Bz7dw9Zxc$UW`~;>!K$>u*zMBk^9x#ETUMwTV;LCQTiXr`1>vc)cs;#X^Ymnv; z=sc+xE6C;<+q`3)_>ZUz7K*;=49_V;;6($~+`BI!0%sTm1Zg*&iQ0Dalg`HeYe6U3$ayvRzlhr#<}! z8`u*??=3y{s1rI66TgE@0e<_+=l|1MY0@>;^zIcKNuRQEFeRI^CW2YBFFu$FA^d&U zMLG4mhx-g>09PK4}8gvJo>23OfP&>J^%jkL_18+3DZQAYj)k%aS5)r4Gi`>;ePQ^;wri}F)|tixw0jSgDL}- zlBt@(^woGg_|T*N>=^#$Z~nv{e)y!`=g;ivPk*X3M>MZBr_ro%mMq(t7&S32aQ%@- z4mtxMkm}xhkJ)?Q8?7JNvSl(jdGbv7o4@%>_Upg?cH6Uecfd+O*9cG#qJq~DuRKK$ zqKLpq%}wG)^0u|ao%qae(#!Qwy|kFbu(;~x*O`5}HGl4w|}un3rxPbAI6u|oJ`L&uiB!^_%5^6R-xeI{u~TgQYrWnP^= ztj-(mkM`dKAbv59pre80nXxSkcZ-StY{q>J75)ct&Q!DQ8C`R-4GR*YMIi+x4~_~+ zocJaE)4gzApvt|)B+n;)h<)I)tL)|_79toG*DQjo?B?$U# zpwO^=+qxmdkF?)N{D&6Gt_e_L;=fH&FwtdK*p89o4~Pk#<3{2K;?FPwNtqA_7g`P` z0Dwsb@gse3&>}flSVTdUspv#AhE4rz=Y~ zEzR%D)T|vpc*GvL`)l?SKmG$w{0N(${n?-OBqE&u)13$H@N(M@oQk3gUw6?KTW)qj zB!9g@&=RZZI(Ayp7UGBSDG)mafC-=hpb79>g{`18{%!m$G6Bc~K}3o#=-D)A&$)QJ zbwx`FT`vlC#`c_jTkPq(x7hUDZ0NfoV`^dE>OKfwh#!Lgqd)ppd&^sX)Q`kXK>XkJ zvYT~@OeFPx7y8r@(-=oNN(QFDM&bt`em+C=5I^5tdTG?3<#IvhiL)xSY^1+_SAl5Q zAvJmc4V1b@fXnidEy&hhSzh!6nmE#Ml5hhel5p~E-L{Rz6s}I<5V~mZ-r(Kuezz}y zrIoLH{p*9Okmufe@AXEI4F=}nE+V~DS5m%B1X-LqLK*}G2sWwj={TA+K7Pdyk$Wz zi~!4tvz7`)*K8ax$_0a)H`$EZTVe3e-s$my;GpVCQ~>qYt}PKGsiY@tHhYnsY7g7V z#YoCSk3Dlp&@Ac0EY*!kcdn;9{sOXaX<- zG=b}{yDk_R9T)Xt^uq#UzLP|u^q`&{voon(cCfikrT|K) zIiW-F5dLk4`t8hOU|;#eo%Vq@)NJ?Aiv92DAF@v$pS5Q!e=7X0;XA_2T2;2*x%mJd z4`K!pFBW1Nc0uEF^3*BDDd>gn`iu?h^D)_ojJxcz%VaK02tkk8H@@)=U)x{m?+=WJl>@5>7vcK8#6ZXR|c#Al9Mo1!}6j1><%n%O1i#Cn; zyIeM$bCn;}|Mjnby?x{(A6aJx5Pxh209Q(do~cBBo0m+U{T`{0I?WL#5ZnL2MpNKw z)t|36!@dm8)QlB{$3q1%@XNQ$jA+_@hfj;SRa|rW%45gvo}*LtimUcoKMv*|@nV}p z)W?pV2qAO;;vXCwbmBjCDiRuK1b5zfXSjd=qv64WkBL;6_Kh5d)aTttMuq~U{#)Mi zefCSg^xvHL|M-u8MZ&ot4It8cXJ>2nzW05|&#ThB(d^vM7O5cwSEM{2Tcg#LhQgX~ zsc9lMb{eTSTjA{dd{`65CWku=Kx_=pf@kin$$tFACq5xb-uCGScIm-nKw2}!gw!B^ zz|CR`Nd6+T1hVx>@s$yS2&8Q^rP@^%=8P2Di&B-!lbeI%$BqRZDL|yyn$~YKG8>ll z?55hcs&@Mb_JAoXn2iTc=)85wrR&6Bl4&5?=HFT1rNzM9bFb@hp>bdJf&YBuz`^ht z-}BvwPP7qgPo2#sv}gAYpXSTu3jy~2o||7~dtUoyn>~5dKJ&r9^TPS)mL2}vz|(GG z`I^@~d@{NZ`yF%(o5I=6uM2VXA^jor!|&bUgn#ABe#6V;VDy%syML24ss;PoO&_wy zPAuBL-&YRiDiIUfxC-!mCctM3zr!eg;wPhg0NjUfI~>mFp)#eix_>3wYy`&d!m9_%y_JgqM2{u_zzlxlA3kX{ zvf>J01eCY@<%jKsFMGXz2P}z*VuDA~#~MIO{ZbZVgZLqQemg$5Xg~Tl|7tIO<#*fG zT^C719kWC>?=dm5aO@>FUT4p}`eM89#Izk+tlM?lC+y`u z*tKno7yu5QUMq?NVykDvX79Nt%G~0<0e%C}3eW_4u-2@stMv0P|F9iC5vkVe#Qy_- z2rU|R-{%gh_235B1GM|3J{2iJ|=w1`S}1~mPjI0O5USZ zuQ`8&33$Yx#wspoc*Mu&^7#Ope{6i*hNQ*ir0NppD{{0(D-8R^2uj6I+BKIv;N_uj zyutQO{+plw!uR#r)qD0h6IedI5{BZqtEj)=pBV7@5U(Lv2jcw;5s?5mvSN7IZ@t%< zz}1ue_8Z^-GPnN$m;p>+da>$+|AJrmLnnTi+D3TgAOD>*0i->|4xvNvIHQ4>@L%$4 zf9Av=*JssUN~U5*eOVqJ4DNpLfD<@=u{XW)MfN=}zDb(YmHKVizIN|}IM6-Ph=8y{ zmi-7*(l{d=0Ak4x@pFFTjeFM_1Lp$+(OLwgKCw59;n?_D4F-s%KLii)zvx9by9vN| z5PuBJB6zZ1UkS*G;LuFOtz%$14%qm;Z#*HJW>p>36$jsW#kFB&ZqAlxrfo@OWqR7G z;!q87sFu|EX01+uPx#W8zC@-=G#AO^xHFmQJjY)*vJ0E5-SDz!-4yJ;;_7hr%$ZI9B-XTJZtUvabj z%f~-+R^^8|=p3yeW)9ivX?w=p*8-RTYCV9ohuCLs|8@K1|J>(g%Vn>yr+?2cM1((c z#2&uoFZ|lbnHKfLh4KN!gb&eQC?5chC2ETY=;*!Y-vb0>VfV)nPfuaqfiFaU;Jfkd zy$H}+S}?r*|MsOX+2_B$)9!iX3O|+ye#t)krKi{*eW>f--TT;McK023Sa~8Jtc6TZ zVM&Xady@alm52NYApJ21#)HWJ;vmKc&}QUonQ1|sIJV|B?&}X?7qb~L0V{<&{~Q}#uPCH1o1>#&6zVby~o5l@dKF9oEHjx zJ|nQS6fO517#!~TTyoYgK?GqV@v;9Qbj~pcAbyxY{2j9ZXbC_~bSdqZP|C>mA1Y*m zFYP~Ll%Ya4h^6#+Ilun>U@;#stwE@%$J7fk?)}uqg4(FJH7*e)n@E zL6~!n+7Pb-+{gr;NIrn*c(xlg27U$uz$^eD{`vWNriIm=(i-$V>(i^ti&hcgFU`-| zjF|qOi*^POH;e!n5(C+~^=d!I5AcWYc!v{zX(SgkJE;5};a+19ZA9_o6iOxd2HI=`KA}GGl5@U08IdCzmf1Edg{ODM_%j1f6IJCpeK(Vv89DsH(N=R z!qoC3k3Qyo#FTkbxXjjX5AQ#0<^Ganj)-5@C_4=0`c`GtbR`Ho)?dm8c>E!97y(kB zf$+9|@xSkV@3E&p{TTr{BS~nAR*h)}VaHzn*!j0n1Bi+Lt#AEd`|%(DHO%q= z=V9=yJrhy`pao(8#Myni0o$5PwSCSUn44zLxq7?nG0Du=ZyFo7N!dOlBFcUd6+sS! ziegH@o-rLz(eRbFC22bLAdMU%Yu>diD>Fk z-;YdeCT(>1@B{Y*2k*Zp+?nVL_LT>1OaGt^cfo?J#{pEIc7ttn_#x0x`;q(*f1u84 zT>g}B;NSnn;{ft7Gj(ulu;03=KDYN>oF5Ye9 zTQ^&2XwZp;*@&g(r4SE4S^!gn%=bTV;Fw)=%@ymOe||#)NQ&cTq|N2aBH%>Twq)l* z7yyJF6Fq>$hv?%YOaKOOo=^Po>cBmF_eoib zHZw)VCl-Tr@4QQ2Un=An?~5NZfV8wJ)W(5Fe{07 zD*TZj{6TxcQ;)dhhxiAEM)k}l(f-y68YY=(m9=G?Zcf`=d)}Ifw#}V95!w%2Yn%68 zX{Qc69I5^DViu_;Bnq5j*v6Zobylmiw`SA67#_h-d{zzBZurt8EQ((8mjAmPB;4N`LDg Bv*8#aT|8pB4y2V%k> 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�rp>2b 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

K%Dd)=5lix~&^b-3#C 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

Aa?uH~XL9m;v47LREc^HJCGPfiMlg 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

QF)(R>SgtR&nhYOGhtYW%S`zi~$%EAdC?h;S-(2 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%0A-05(?G=Cf#u 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 Date: Tue, 25 Oct 2022 05:30:17 -0400 Subject: [PATCH 103/110] Fixed a tooltip typo in the ANIM Editor --- .../Utilities/Skins/ANIMEditor.Designer.cs | 1340 ++++++++--------- 1 file changed, 670 insertions(+), 670 deletions(-) diff --git a/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.Designer.cs b/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.Designer.cs index a681590f..7d206485 100644 --- a/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.Designer.cs +++ b/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.Designer.cs @@ -28,707 +28,707 @@ /// private void InitializeComponent() { - this.closeButton = new MetroFramework.Controls.MetroButton(); - this.effectsGroup = new System.Windows.Forms.GroupBox(); - this.rightLegOCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.headOCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.leftLegOCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.leftArmOCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.bodyOCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.rightLegCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.slimCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.headCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.leftLegCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.rightArmCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.leftArmCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.bodyCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.classicCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.rightArmOCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.effectsGroup2 = new System.Windows.Forms.GroupBox(); - this.rightLeggingCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.helmetCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.leftLeggingCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.rightArmorCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.leftArmorCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.chestplateCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.unknownCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.crouchCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.dinnerboneCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.noArmorCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.bobbingCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.santaCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.syncLegsCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.staticArmsCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.syncArmsCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.statueCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.zombieCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.staticLegsCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.copyButton = new MetroFramework.Controls.MetroButton(); - this.importButton = new MetroFramework.Controls.MetroButton(); - this.exportButton = new MetroFramework.Controls.MetroButton(); - this.animValue = new MetroFramework.Controls.MetroLabel(); - this.uncheckButton = new MetroFramework.Controls.MetroButton(); - this.checkButton = new MetroFramework.Controls.MetroButton(); - this.toolTip = new MetroFramework.Components.MetroToolTip(); - this.resetButton = new MetroFramework.Controls.MetroButton(); - this.templateButton = new MetroFramework.Controls.MetroButton(); - this.effectsGroup.SuspendLayout(); - this.effectsGroup2.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.SuspendLayout(); - // - // closeButton - // - this.closeButton.Location = new System.Drawing.Point(250, 514); - this.closeButton.Name = "closeButton"; - this.closeButton.Size = new System.Drawing.Size(126, 23); - this.closeButton.TabIndex = 1; - this.closeButton.Text = "Save"; - this.closeButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.closeButton.UseSelectable = true; - this.closeButton.Click += new System.EventHandler(this.closeButton_Click); - // - // effectsGroup - // - this.effectsGroup.Controls.Add(this.rightLegOCheckBox); - this.effectsGroup.Controls.Add(this.headOCheckBox); - this.effectsGroup.Controls.Add(this.leftLegOCheckBox); - this.effectsGroup.Controls.Add(this.leftArmOCheckBox); - this.effectsGroup.Controls.Add(this.bodyOCheckBox); - this.effectsGroup.Controls.Add(this.rightLegCheckBox); - this.effectsGroup.Controls.Add(this.slimCheckBox); - this.effectsGroup.Controls.Add(this.headCheckBox); - this.effectsGroup.Controls.Add(this.leftLegCheckBox); - this.effectsGroup.Controls.Add(this.rightArmCheckBox); - this.effectsGroup.Controls.Add(this.leftArmCheckBox); - this.effectsGroup.Controls.Add(this.bodyCheckBox); - this.effectsGroup.Controls.Add(this.classicCheckBox); - this.effectsGroup.Controls.Add(this.rightArmOCheckBox); - this.effectsGroup.ForeColor = System.Drawing.SystemColors.Window; - this.effectsGroup.Location = new System.Drawing.Point(22, 148); - this.effectsGroup.Name = "effectsGroup"; - this.effectsGroup.Size = new System.Drawing.Size(393, 238); - this.effectsGroup.TabIndex = 2; - this.effectsGroup.TabStop = false; - this.effectsGroup.Text = "Skin Flags"; - // - // rightLegOCheckBox - // - this.rightLegOCheckBox.AutoSize = true; - this.rightLegOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.rightLegOCheckBox.Location = new System.Drawing.Point(180, 208); - this.rightLegOCheckBox.Name = "rightLegOCheckBox"; - this.rightLegOCheckBox.Size = new System.Drawing.Size(199, 19); - this.rightLegOCheckBox.TabIndex = 13; - this.rightLegOCheckBox.Text = "Remove Right Leg Layer Box"; - this.rightLegOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.rightLegOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.closeButton = new MetroFramework.Controls.MetroButton(); + this.effectsGroup = new System.Windows.Forms.GroupBox(); + this.rightLegOCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.headOCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.leftLegOCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.leftArmOCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.bodyOCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.rightLegCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.slimCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.headCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.leftLegCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.rightArmCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.leftArmCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.bodyCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.classicCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.rightArmOCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.effectsGroup2 = new System.Windows.Forms.GroupBox(); + this.rightLeggingCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.helmetCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.leftLeggingCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.rightArmorCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.leftArmorCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.chestplateCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.unknownCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.crouchCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.dinnerboneCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.noArmorCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.bobbingCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.santaCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.syncLegsCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.staticArmsCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.syncArmsCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.statueCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.zombieCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.staticLegsCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.copyButton = new MetroFramework.Controls.MetroButton(); + this.importButton = new MetroFramework.Controls.MetroButton(); + this.exportButton = new MetroFramework.Controls.MetroButton(); + this.animValue = new MetroFramework.Controls.MetroLabel(); + this.uncheckButton = new MetroFramework.Controls.MetroButton(); + this.checkButton = new MetroFramework.Controls.MetroButton(); + this.toolTip = new MetroFramework.Components.MetroToolTip(); + this.resetButton = new MetroFramework.Controls.MetroButton(); + this.templateButton = new MetroFramework.Controls.MetroButton(); + this.effectsGroup.SuspendLayout(); + this.effectsGroup2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // closeButton + // + this.closeButton.Location = new System.Drawing.Point(250, 514); + this.closeButton.Name = "closeButton"; + this.closeButton.Size = new System.Drawing.Size(126, 23); + this.closeButton.TabIndex = 1; + this.closeButton.Text = "Save"; + this.closeButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.closeButton.UseSelectable = true; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // effectsGroup + // + this.effectsGroup.Controls.Add(this.rightLegOCheckBox); + this.effectsGroup.Controls.Add(this.headOCheckBox); + this.effectsGroup.Controls.Add(this.leftLegOCheckBox); + this.effectsGroup.Controls.Add(this.leftArmOCheckBox); + this.effectsGroup.Controls.Add(this.bodyOCheckBox); + this.effectsGroup.Controls.Add(this.rightLegCheckBox); + this.effectsGroup.Controls.Add(this.slimCheckBox); + this.effectsGroup.Controls.Add(this.headCheckBox); + this.effectsGroup.Controls.Add(this.leftLegCheckBox); + this.effectsGroup.Controls.Add(this.rightArmCheckBox); + this.effectsGroup.Controls.Add(this.leftArmCheckBox); + this.effectsGroup.Controls.Add(this.bodyCheckBox); + this.effectsGroup.Controls.Add(this.classicCheckBox); + this.effectsGroup.Controls.Add(this.rightArmOCheckBox); + this.effectsGroup.ForeColor = System.Drawing.SystemColors.Window; + this.effectsGroup.Location = new System.Drawing.Point(22, 148); + this.effectsGroup.Name = "effectsGroup"; + this.effectsGroup.Size = new System.Drawing.Size(393, 238); + this.effectsGroup.TabIndex = 2; + this.effectsGroup.TabStop = false; + this.effectsGroup.Text = "Skin Flags"; + // + // rightLegOCheckBox + // + this.rightLegOCheckBox.AutoSize = true; + this.rightLegOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.rightLegOCheckBox.Location = new System.Drawing.Point(180, 208); + this.rightLegOCheckBox.Name = "rightLegOCheckBox"; + this.rightLegOCheckBox.Size = new System.Drawing.Size(199, 19); + this.rightLegOCheckBox.TabIndex = 13; + this.rightLegOCheckBox.Text = "Remove Right Leg Layer Box"; + this.rightLegOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.rightLegOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.rightLegOCheckBox.UseSelectable = true; - // - // headOCheckBox - // - this.headOCheckBox.AutoSize = true; - this.headOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.headOCheckBox.Location = new System.Drawing.Point(180, 50); - this.headOCheckBox.Name = "headOCheckBox"; - this.headOCheckBox.Size = new System.Drawing.Size(173, 19); - this.headOCheckBox.TabIndex = 12; - this.headOCheckBox.Text = "Remove Head Layer Box"; - this.headOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.headOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.rightLegOCheckBox.UseSelectable = true; + // + // headOCheckBox + // + this.headOCheckBox.AutoSize = true; + this.headOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.headOCheckBox.Location = new System.Drawing.Point(180, 50); + this.headOCheckBox.Name = "headOCheckBox"; + this.headOCheckBox.Size = new System.Drawing.Size(173, 19); + this.headOCheckBox.TabIndex = 12; + this.headOCheckBox.Text = "Remove Head Layer Box"; + this.headOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.headOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.headOCheckBox.UseSelectable = true; - // - // leftLegOCheckBox - // - this.leftLegOCheckBox.AutoSize = true; - this.leftLegOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.leftLegOCheckBox.Location = new System.Drawing.Point(180, 174); - this.leftLegOCheckBox.Name = "leftLegOCheckBox"; - this.leftLegOCheckBox.Size = new System.Drawing.Size(190, 19); - this.leftLegOCheckBox.TabIndex = 11; - this.leftLegOCheckBox.Text = "Remove Left Leg Layer Box"; - this.leftLegOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.leftLegOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.headOCheckBox.UseSelectable = true; + // + // leftLegOCheckBox + // + this.leftLegOCheckBox.AutoSize = true; + this.leftLegOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.leftLegOCheckBox.Location = new System.Drawing.Point(180, 174); + this.leftLegOCheckBox.Name = "leftLegOCheckBox"; + this.leftLegOCheckBox.Size = new System.Drawing.Size(190, 19); + this.leftLegOCheckBox.TabIndex = 11; + this.leftLegOCheckBox.Text = "Remove Left Leg Layer Box"; + this.leftLegOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.leftLegOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.leftLegOCheckBox.UseSelectable = true; - // - // leftArmOCheckBox - // - this.leftArmOCheckBox.AutoSize = true; - this.leftArmOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.leftArmOCheckBox.Location = new System.Drawing.Point(180, 112); - this.leftArmOCheckBox.Name = "leftArmOCheckBox"; - this.leftArmOCheckBox.Size = new System.Drawing.Size(194, 19); - this.leftArmOCheckBox.TabIndex = 9; - this.leftArmOCheckBox.Text = "Remove Left Arm Layer Box"; - this.leftArmOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.leftArmOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.leftLegOCheckBox.UseSelectable = true; + // + // leftArmOCheckBox + // + this.leftArmOCheckBox.AutoSize = true; + this.leftArmOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.leftArmOCheckBox.Location = new System.Drawing.Point(180, 112); + this.leftArmOCheckBox.Name = "leftArmOCheckBox"; + this.leftArmOCheckBox.Size = new System.Drawing.Size(194, 19); + this.leftArmOCheckBox.TabIndex = 9; + this.leftArmOCheckBox.Text = "Remove Left Arm Layer Box"; + this.leftArmOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.leftArmOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.leftArmOCheckBox.UseSelectable = true; - // - // bodyOCheckBox - // - this.bodyOCheckBox.AutoSize = true; - this.bodyOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.bodyOCheckBox.Location = new System.Drawing.Point(180, 81); - this.bodyOCheckBox.Name = "bodyOCheckBox"; - this.bodyOCheckBox.Size = new System.Drawing.Size(172, 19); - this.bodyOCheckBox.TabIndex = 8; - this.bodyOCheckBox.Text = "Remove Body Layer Box"; - this.bodyOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.bodyOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.leftArmOCheckBox.UseSelectable = true; + // + // bodyOCheckBox + // + this.bodyOCheckBox.AutoSize = true; + this.bodyOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.bodyOCheckBox.Location = new System.Drawing.Point(180, 81); + this.bodyOCheckBox.Name = "bodyOCheckBox"; + this.bodyOCheckBox.Size = new System.Drawing.Size(172, 19); + this.bodyOCheckBox.TabIndex = 8; + this.bodyOCheckBox.Text = "Remove Body Layer Box"; + this.bodyOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.bodyOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.bodyOCheckBox.UseSelectable = true; - // - // rightLegCheckBox - // - this.rightLegCheckBox.AutoSize = true; - this.rightLegCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.rightLegCheckBox.Location = new System.Drawing.Point(6, 208); - this.rightLegCheckBox.Name = "rightLegCheckBox"; - this.rightLegCheckBox.Size = new System.Drawing.Size(162, 19); - this.rightLegCheckBox.TabIndex = 7; - this.rightLegCheckBox.Text = "Remove Right Leg Box"; - this.rightLegCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.rightLegCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.bodyOCheckBox.UseSelectable = true; + // + // rightLegCheckBox + // + this.rightLegCheckBox.AutoSize = true; + this.rightLegCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.rightLegCheckBox.Location = new System.Drawing.Point(6, 208); + this.rightLegCheckBox.Name = "rightLegCheckBox"; + this.rightLegCheckBox.Size = new System.Drawing.Size(162, 19); + this.rightLegCheckBox.TabIndex = 7; + this.rightLegCheckBox.Text = "Remove Right Leg Box"; + this.rightLegCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.rightLegCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.rightLegCheckBox.UseSelectable = true; - // - // slimCheckBox - // - this.slimCheckBox.AutoSize = true; - this.slimCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.slimCheckBox.Location = new System.Drawing.Point(180, 19); - this.slimCheckBox.Name = "slimCheckBox"; - this.slimCheckBox.Size = new System.Drawing.Size(151, 19); - this.slimCheckBox.TabIndex = 6; - this.slimCheckBox.Text = "64x64 Alex/Slim Skin"; - this.slimCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.slimCheckBox, " The 1.8 style skin type with slim arms, overlays for each part, and sep" + + this.rightLegCheckBox.UseSelectable = true; + // + // slimCheckBox + // + this.slimCheckBox.AutoSize = true; + this.slimCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.slimCheckBox.Location = new System.Drawing.Point(180, 19); + this.slimCheckBox.Name = "slimCheckBox"; + this.slimCheckBox.Size = new System.Drawing.Size(151, 19); + this.slimCheckBox.TabIndex = 6; + this.slimCheckBox.Text = "64x64 Alex/Slim Skin"; + this.slimCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.slimCheckBox, " The 1.8 style skin type with slim arms, overlays for each part, and sep" + "arate textures for right and left limbs. Resolution is also set to 64x64. " + " "); - this.slimCheckBox.UseSelectable = true; - // - // headCheckBox - // - this.headCheckBox.AutoSize = true; - this.headCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.headCheckBox.Location = new System.Drawing.Point(6, 50); - this.headCheckBox.Name = "headCheckBox"; - this.headCheckBox.Size = new System.Drawing.Size(136, 19); - this.headCheckBox.TabIndex = 5; - this.headCheckBox.Text = "Remove Head Box"; - this.headCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.headCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.slimCheckBox.UseSelectable = true; + // + // headCheckBox + // + this.headCheckBox.AutoSize = true; + this.headCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.headCheckBox.Location = new System.Drawing.Point(6, 50); + this.headCheckBox.Name = "headCheckBox"; + this.headCheckBox.Size = new System.Drawing.Size(136, 19); + this.headCheckBox.TabIndex = 5; + this.headCheckBox.Text = "Remove Head Box"; + this.headCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.headCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.headCheckBox.UseSelectable = true; - // - // leftLegCheckBox - // - this.leftLegCheckBox.AutoSize = true; - this.leftLegCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.leftLegCheckBox.Location = new System.Drawing.Point(6, 174); - this.leftLegCheckBox.Name = "leftLegCheckBox"; - this.leftLegCheckBox.Size = new System.Drawing.Size(153, 19); - this.leftLegCheckBox.TabIndex = 4; - this.leftLegCheckBox.Text = "Remove Left Leg Box"; - this.leftLegCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.leftLegCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.headCheckBox.UseSelectable = true; + // + // leftLegCheckBox + // + this.leftLegCheckBox.AutoSize = true; + this.leftLegCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.leftLegCheckBox.Location = new System.Drawing.Point(6, 174); + this.leftLegCheckBox.Name = "leftLegCheckBox"; + this.leftLegCheckBox.Size = new System.Drawing.Size(153, 19); + this.leftLegCheckBox.TabIndex = 4; + this.leftLegCheckBox.Text = "Remove Left Leg Box"; + this.leftLegCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.leftLegCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.leftLegCheckBox.UseSelectable = true; - // - // rightArmCheckBox - // - this.rightArmCheckBox.AutoSize = true; - this.rightArmCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.rightArmCheckBox.Location = new System.Drawing.Point(6, 143); - this.rightArmCheckBox.Name = "rightArmCheckBox"; - this.rightArmCheckBox.Size = new System.Drawing.Size(166, 19); - this.rightArmCheckBox.TabIndex = 3; - this.rightArmCheckBox.Text = "Remove Right Arm Box"; - this.rightArmCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.rightArmCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.leftLegCheckBox.UseSelectable = true; + // + // rightArmCheckBox + // + this.rightArmCheckBox.AutoSize = true; + this.rightArmCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.rightArmCheckBox.Location = new System.Drawing.Point(6, 143); + this.rightArmCheckBox.Name = "rightArmCheckBox"; + this.rightArmCheckBox.Size = new System.Drawing.Size(166, 19); + this.rightArmCheckBox.TabIndex = 3; + this.rightArmCheckBox.Text = "Remove Right Arm Box"; + this.rightArmCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.rightArmCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.rightArmCheckBox.UseSelectable = true; - // - // leftArmCheckBox - // - this.leftArmCheckBox.AutoSize = true; - this.leftArmCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.leftArmCheckBox.Location = new System.Drawing.Point(6, 112); - this.leftArmCheckBox.Name = "leftArmCheckBox"; - this.leftArmCheckBox.Size = new System.Drawing.Size(157, 19); - this.leftArmCheckBox.TabIndex = 2; - this.leftArmCheckBox.Text = "Remove Left Arm Box"; - this.leftArmCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.leftArmCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.rightArmCheckBox.UseSelectable = true; + // + // leftArmCheckBox + // + this.leftArmCheckBox.AutoSize = true; + this.leftArmCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.leftArmCheckBox.Location = new System.Drawing.Point(6, 112); + this.leftArmCheckBox.Name = "leftArmCheckBox"; + this.leftArmCheckBox.Size = new System.Drawing.Size(157, 19); + this.leftArmCheckBox.TabIndex = 2; + this.leftArmCheckBox.Text = "Remove Left Arm Box"; + this.leftArmCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.leftArmCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.leftArmCheckBox.UseSelectable = true; - // - // bodyCheckBox - // - this.bodyCheckBox.AutoSize = true; - this.bodyCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.bodyCheckBox.Location = new System.Drawing.Point(6, 81); - this.bodyCheckBox.Name = "bodyCheckBox"; - this.bodyCheckBox.Size = new System.Drawing.Size(135, 19); - this.bodyCheckBox.TabIndex = 1; - this.bodyCheckBox.Text = "Remove Body Box"; - this.bodyCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.bodyCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.leftArmCheckBox.UseSelectable = true; + // + // bodyCheckBox + // + this.bodyCheckBox.AutoSize = true; + this.bodyCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.bodyCheckBox.Location = new System.Drawing.Point(6, 81); + this.bodyCheckBox.Name = "bodyCheckBox"; + this.bodyCheckBox.Size = new System.Drawing.Size(135, 19); + this.bodyCheckBox.TabIndex = 1; + this.bodyCheckBox.Text = "Remove Body Box"; + this.bodyCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.bodyCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.bodyCheckBox.UseSelectable = true; - // - // classicCheckBox - // - this.classicCheckBox.AutoSize = true; - this.classicCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.classicCheckBox.Location = new System.Drawing.Point(6, 19); - this.classicCheckBox.Name = "classicCheckBox"; - this.classicCheckBox.Size = new System.Drawing.Size(136, 19); - this.classicCheckBox.TabIndex = 0; - this.classicCheckBox.Text = "64x64 Classic Skin"; - this.classicCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.classicCheckBox, " The 1.8 style skin type with overlays for each part and separate textur" + + this.bodyCheckBox.UseSelectable = true; + // + // classicCheckBox + // + this.classicCheckBox.AutoSize = true; + this.classicCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.classicCheckBox.Location = new System.Drawing.Point(6, 19); + this.classicCheckBox.Name = "classicCheckBox"; + this.classicCheckBox.Size = new System.Drawing.Size(136, 19); + this.classicCheckBox.TabIndex = 0; + this.classicCheckBox.Text = "64x64 Classic Skin"; + this.classicCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.classicCheckBox, " The 1.8 style skin type with overlays for each part and separate textur" + "es for right and left limbs. Resolution is also set to 64x64. "); - this.classicCheckBox.UseSelectable = true; - // - // rightArmOCheckBox - // - this.rightArmOCheckBox.AutoSize = true; - this.rightArmOCheckBox.BackColor = System.Drawing.Color.Transparent; - this.rightArmOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.rightArmOCheckBox.Location = new System.Drawing.Point(180, 143); - this.rightArmOCheckBox.Name = "rightArmOCheckBox"; - this.rightArmOCheckBox.Size = new System.Drawing.Size(203, 19); - this.rightArmOCheckBox.TabIndex = 10; - this.rightArmOCheckBox.Text = "Remove Right Arm Layer Box"; - this.rightArmOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.rightArmOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.classicCheckBox.UseSelectable = true; + // + // rightArmOCheckBox + // + this.rightArmOCheckBox.AutoSize = true; + this.rightArmOCheckBox.BackColor = System.Drawing.Color.Transparent; + this.rightArmOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.rightArmOCheckBox.Location = new System.Drawing.Point(180, 143); + this.rightArmOCheckBox.Name = "rightArmOCheckBox"; + this.rightArmOCheckBox.Size = new System.Drawing.Size(203, 19); + this.rightArmOCheckBox.TabIndex = 10; + this.rightArmOCheckBox.Text = "Remove Right Arm Layer Box"; + this.rightArmOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.rightArmOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.rightArmOCheckBox.UseSelectable = true; - // - // effectsGroup2 - // - this.effectsGroup2.Controls.Add(this.rightLeggingCheckBox); - this.effectsGroup2.Controls.Add(this.helmetCheckBox); - this.effectsGroup2.Controls.Add(this.leftLeggingCheckBox); - this.effectsGroup2.Controls.Add(this.rightArmorCheckBox); - this.effectsGroup2.Controls.Add(this.leftArmorCheckBox); - this.effectsGroup2.Controls.Add(this.chestplateCheckBox); - this.effectsGroup2.ForeColor = System.Drawing.SystemColors.Window; - this.effectsGroup2.Location = new System.Drawing.Point(421, 183); - this.effectsGroup2.Name = "effectsGroup2"; - this.effectsGroup2.Size = new System.Drawing.Size(188, 203); - this.effectsGroup2.TabIndex = 14; - this.effectsGroup2.TabStop = false; - this.effectsGroup2.Text = "Armor Flags"; - // - // rightLeggingCheckBox - // - this.rightLeggingCheckBox.AutoSize = true; - this.rightLeggingCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.rightLeggingCheckBox.Location = new System.Drawing.Point(6, 174); - this.rightLeggingCheckBox.Name = "rightLeggingCheckBox"; - this.rightLeggingCheckBox.Size = new System.Drawing.Size(173, 19); - this.rightLeggingCheckBox.TabIndex = 7; - this.rightLeggingCheckBox.Text = "Render Right Leg Armor"; - this.rightLeggingCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.rightLeggingCheckBox, " Forcefully enables the specified armor piece."); - this.rightLeggingCheckBox.UseSelectable = true; - // - // helmetCheckBox - // - this.helmetCheckBox.AutoSize = true; - this.helmetCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.helmetCheckBox.Location = new System.Drawing.Point(6, 19); - this.helmetCheckBox.Name = "helmetCheckBox"; - this.helmetCheckBox.Size = new System.Drawing.Size(147, 19); - this.helmetCheckBox.TabIndex = 5; - this.helmetCheckBox.Text = "Render Head Armor"; - this.helmetCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.helmetCheckBox, " Forcefully enables the specified armor piece."); - this.helmetCheckBox.UseSelectable = true; - // - // leftLeggingCheckBox - // - this.leftLeggingCheckBox.AutoSize = true; - this.leftLeggingCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.leftLeggingCheckBox.Location = new System.Drawing.Point(6, 143); - this.leftLeggingCheckBox.Name = "leftLeggingCheckBox"; - this.leftLeggingCheckBox.Size = new System.Drawing.Size(164, 19); - this.leftLeggingCheckBox.TabIndex = 4; - this.leftLeggingCheckBox.Text = "Render Left Leg Armor"; - this.leftLeggingCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.leftLeggingCheckBox, " Forcefully enables the specified armor piece."); - this.leftLeggingCheckBox.UseSelectable = true; - // - // rightArmorCheckBox - // - this.rightArmorCheckBox.AutoSize = true; - this.rightArmorCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.rightArmorCheckBox.Location = new System.Drawing.Point(6, 112); - this.rightArmorCheckBox.Name = "rightArmorCheckBox"; - this.rightArmorCheckBox.Size = new System.Drawing.Size(177, 19); - this.rightArmorCheckBox.TabIndex = 3; - this.rightArmorCheckBox.Text = "Render Right Arm Armor"; - this.rightArmorCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.rightArmorCheckBox, " Forcefully enables the specified armor piece."); - this.rightArmorCheckBox.UseSelectable = true; - // - // leftArmorCheckBox - // - this.leftArmorCheckBox.AutoSize = true; - this.leftArmorCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.leftArmorCheckBox.Location = new System.Drawing.Point(6, 81); - this.leftArmorCheckBox.Name = "leftArmorCheckBox"; - this.leftArmorCheckBox.Size = new System.Drawing.Size(168, 19); - this.leftArmorCheckBox.TabIndex = 2; - this.leftArmorCheckBox.Text = "Render Left Arm Armor"; - this.leftArmorCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.leftArmorCheckBox, " Forcefully enables the specified armor piece."); - this.leftArmorCheckBox.UseSelectable = true; - // - // chestplateCheckBox - // - this.chestplateCheckBox.AutoSize = true; - this.chestplateCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.chestplateCheckBox.Location = new System.Drawing.Point(6, 50); - this.chestplateCheckBox.Name = "chestplateCheckBox"; - this.chestplateCheckBox.Size = new System.Drawing.Size(146, 19); - this.chestplateCheckBox.TabIndex = 1; - this.chestplateCheckBox.Text = "Render Body Armor"; - this.chestplateCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.chestplateCheckBox, " Forcefully enables the specified armor piece."); - this.chestplateCheckBox.UseSelectable = true; - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.unknownCheckBox); - this.groupBox1.Controls.Add(this.crouchCheckBox); - this.groupBox1.Controls.Add(this.dinnerboneCheckBox); - this.groupBox1.Controls.Add(this.noArmorCheckBox); - this.groupBox1.Controls.Add(this.bobbingCheckBox); - this.groupBox1.Controls.Add(this.santaCheckBox); - this.groupBox1.Controls.Add(this.syncLegsCheckBox); - this.groupBox1.Controls.Add(this.staticArmsCheckBox); - this.groupBox1.Controls.Add(this.syncArmsCheckBox); - this.groupBox1.Controls.Add(this.statueCheckBox); - this.groupBox1.Controls.Add(this.zombieCheckBox); - this.groupBox1.Controls.Add(this.staticLegsCheckBox); - this.groupBox1.ForeColor = System.Drawing.SystemColors.Window; - this.groupBox1.Location = new System.Drawing.Point(22, 388); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(587, 115); - this.groupBox1.TabIndex = 15; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "Special Animations"; - // - // unknownCheckBox - // - this.unknownCheckBox.AutoSize = true; - this.unknownCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.unknownCheckBox.Location = new System.Drawing.Point(126, 81); - this.unknownCheckBox.Name = "unknownCheckBox"; - this.unknownCheckBox.Size = new System.Drawing.Size(84, 19); - this.unknownCheckBox.TabIndex = 13; - this.unknownCheckBox.Text = "Unknown"; - this.unknownCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.unknownCheckBox, " If you figure out what this is. Please reach out to MNL#8935 on Discord. (: " + + this.rightArmOCheckBox.UseSelectable = true; + // + // effectsGroup2 + // + this.effectsGroup2.Controls.Add(this.rightLeggingCheckBox); + this.effectsGroup2.Controls.Add(this.helmetCheckBox); + this.effectsGroup2.Controls.Add(this.leftLeggingCheckBox); + this.effectsGroup2.Controls.Add(this.rightArmorCheckBox); + this.effectsGroup2.Controls.Add(this.leftArmorCheckBox); + this.effectsGroup2.Controls.Add(this.chestplateCheckBox); + this.effectsGroup2.ForeColor = System.Drawing.SystemColors.Window; + this.effectsGroup2.Location = new System.Drawing.Point(421, 183); + this.effectsGroup2.Name = "effectsGroup2"; + this.effectsGroup2.Size = new System.Drawing.Size(188, 203); + this.effectsGroup2.TabIndex = 14; + this.effectsGroup2.TabStop = false; + this.effectsGroup2.Text = "Armor Flags"; + // + // rightLeggingCheckBox + // + this.rightLeggingCheckBox.AutoSize = true; + this.rightLeggingCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.rightLeggingCheckBox.Location = new System.Drawing.Point(6, 174); + this.rightLeggingCheckBox.Name = "rightLeggingCheckBox"; + this.rightLeggingCheckBox.Size = new System.Drawing.Size(173, 19); + this.rightLeggingCheckBox.TabIndex = 7; + this.rightLeggingCheckBox.Text = "Render Right Leg Armor"; + this.rightLeggingCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.rightLeggingCheckBox, " Forcefully enables the specified armor piece."); + this.rightLeggingCheckBox.UseSelectable = true; + // + // helmetCheckBox + // + this.helmetCheckBox.AutoSize = true; + this.helmetCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.helmetCheckBox.Location = new System.Drawing.Point(6, 19); + this.helmetCheckBox.Name = "helmetCheckBox"; + this.helmetCheckBox.Size = new System.Drawing.Size(147, 19); + this.helmetCheckBox.TabIndex = 5; + this.helmetCheckBox.Text = "Render Head Armor"; + this.helmetCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.helmetCheckBox, " Forcefully enables the specified armor piece."); + this.helmetCheckBox.UseSelectable = true; + // + // leftLeggingCheckBox + // + this.leftLeggingCheckBox.AutoSize = true; + this.leftLeggingCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.leftLeggingCheckBox.Location = new System.Drawing.Point(6, 143); + this.leftLeggingCheckBox.Name = "leftLeggingCheckBox"; + this.leftLeggingCheckBox.Size = new System.Drawing.Size(164, 19); + this.leftLeggingCheckBox.TabIndex = 4; + this.leftLeggingCheckBox.Text = "Render Left Leg Armor"; + this.leftLeggingCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.leftLeggingCheckBox, " Forcefully enables the specified armor piece."); + this.leftLeggingCheckBox.UseSelectable = true; + // + // rightArmorCheckBox + // + this.rightArmorCheckBox.AutoSize = true; + this.rightArmorCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.rightArmorCheckBox.Location = new System.Drawing.Point(6, 112); + this.rightArmorCheckBox.Name = "rightArmorCheckBox"; + this.rightArmorCheckBox.Size = new System.Drawing.Size(177, 19); + this.rightArmorCheckBox.TabIndex = 3; + this.rightArmorCheckBox.Text = "Render Right Arm Armor"; + this.rightArmorCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.rightArmorCheckBox, " Forcefully enables the specified armor piece."); + this.rightArmorCheckBox.UseSelectable = true; + // + // leftArmorCheckBox + // + this.leftArmorCheckBox.AutoSize = true; + this.leftArmorCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.leftArmorCheckBox.Location = new System.Drawing.Point(6, 81); + this.leftArmorCheckBox.Name = "leftArmorCheckBox"; + this.leftArmorCheckBox.Size = new System.Drawing.Size(168, 19); + this.leftArmorCheckBox.TabIndex = 2; + this.leftArmorCheckBox.Text = "Render Left Arm Armor"; + this.leftArmorCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.leftArmorCheckBox, " Forcefully enables the specified armor piece."); + this.leftArmorCheckBox.UseSelectable = true; + // + // chestplateCheckBox + // + this.chestplateCheckBox.AutoSize = true; + this.chestplateCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.chestplateCheckBox.Location = new System.Drawing.Point(6, 50); + this.chestplateCheckBox.Name = "chestplateCheckBox"; + this.chestplateCheckBox.Size = new System.Drawing.Size(146, 19); + this.chestplateCheckBox.TabIndex = 1; + this.chestplateCheckBox.Text = "Render Body Armor"; + this.chestplateCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.chestplateCheckBox, " Forcefully enables the specified armor piece."); + this.chestplateCheckBox.UseSelectable = true; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.unknownCheckBox); + this.groupBox1.Controls.Add(this.crouchCheckBox); + this.groupBox1.Controls.Add(this.dinnerboneCheckBox); + this.groupBox1.Controls.Add(this.noArmorCheckBox); + this.groupBox1.Controls.Add(this.bobbingCheckBox); + this.groupBox1.Controls.Add(this.santaCheckBox); + this.groupBox1.Controls.Add(this.syncLegsCheckBox); + this.groupBox1.Controls.Add(this.staticArmsCheckBox); + this.groupBox1.Controls.Add(this.syncArmsCheckBox); + this.groupBox1.Controls.Add(this.statueCheckBox); + this.groupBox1.Controls.Add(this.zombieCheckBox); + this.groupBox1.Controls.Add(this.staticLegsCheckBox); + this.groupBox1.ForeColor = System.Drawing.SystemColors.Window; + this.groupBox1.Location = new System.Drawing.Point(22, 388); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(587, 115); + this.groupBox1.TabIndex = 15; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Special Animations"; + // + // unknownCheckBox + // + this.unknownCheckBox.AutoSize = true; + this.unknownCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.unknownCheckBox.Location = new System.Drawing.Point(126, 81); + this.unknownCheckBox.Name = "unknownCheckBox"; + this.unknownCheckBox.Size = new System.Drawing.Size(84, 19); + this.unknownCheckBox.TabIndex = 13; + this.unknownCheckBox.Text = "Unknown"; + this.unknownCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.unknownCheckBox, " If you figure out what this is. Please reach out to MNL#8935 on Discord. (: " + ""); - this.unknownCheckBox.UseSelectable = true; - // - // crouchCheckBox - // - this.crouchCheckBox.AutoSize = true; - this.crouchCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.crouchCheckBox.Location = new System.Drawing.Point(126, 50); - this.crouchCheckBox.Name = "crouchCheckBox"; - this.crouchCheckBox.Size = new System.Drawing.Size(137, 19); - this.crouchCheckBox.TabIndex = 12; - this.crouchCheckBox.Text = "Backwards Crouch"; - this.crouchCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.crouchCheckBox, " The crouch animation is reversed so that the arms and body lean back. Usefu" + + this.unknownCheckBox.UseSelectable = true; + // + // crouchCheckBox + // + this.crouchCheckBox.AutoSize = true; + this.crouchCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.crouchCheckBox.Location = new System.Drawing.Point(126, 50); + this.crouchCheckBox.Name = "crouchCheckBox"; + this.crouchCheckBox.Size = new System.Drawing.Size(137, 19); + this.crouchCheckBox.TabIndex = 12; + this.crouchCheckBox.Text = "Backwards Crouch"; + this.crouchCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.crouchCheckBox, " The crouch animation is reversed so that the arms and body lean back. Usefu" + "l for small skins. "); - this.crouchCheckBox.UseSelectable = true; - // - // dinnerboneCheckBox - // - this.dinnerboneCheckBox.AutoSize = true; - this.dinnerboneCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.dinnerboneCheckBox.Location = new System.Drawing.Point(126, 19); - this.dinnerboneCheckBox.Name = "dinnerboneCheckBox"; - this.dinnerboneCheckBox.Size = new System.Drawing.Size(97, 19); - this.dinnerboneCheckBox.TabIndex = 11; - this.dinnerboneCheckBox.Text = "Dinnerbone"; - this.dinnerboneCheckBox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.dinnerboneCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.dinnerboneCheckBox, " Flips the skin upside down like Dinnerbone\'s skin, a Minecraft developer. "); - this.dinnerboneCheckBox.UseSelectable = true; - // - // noArmorCheckBox - // - this.noArmorCheckBox.AutoSize = true; - this.noArmorCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.noArmorCheckBox.Location = new System.Drawing.Point(420, 81); - this.noArmorCheckBox.Name = "noArmorCheckBox"; - this.noArmorCheckBox.Size = new System.Drawing.Size(131, 19); - this.noArmorCheckBox.TabIndex = 10; - this.noArmorCheckBox.Text = "Disable All Armor"; - this.noArmorCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.noArmorCheckBox, " Disables all armor desptie the armor flags. "); - this.noArmorCheckBox.UseSelectable = true; - // - // bobbingCheckBox - // - this.bobbingCheckBox.AutoSize = true; - this.bobbingCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.bobbingCheckBox.Location = new System.Drawing.Point(272, 50); - this.bobbingCheckBox.Name = "bobbingCheckBox"; - this.bobbingCheckBox.Size = new System.Drawing.Size(124, 19); - this.bobbingCheckBox.TabIndex = 9; - this.bobbingCheckBox.Text = "Disable Bobbing"; - this.bobbingCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.bobbingCheckBox, " Disables the bobbing effect in first person."); - this.bobbingCheckBox.UseSelectable = true; - // - // santaCheckBox - // - this.santaCheckBox.AutoSize = true; - this.santaCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.santaCheckBox.Location = new System.Drawing.Point(420, 50); - this.santaCheckBox.Name = "santaCheckBox"; - this.santaCheckBox.Size = new System.Drawing.Size(86, 19); - this.santaCheckBox.TabIndex = 8; - this.santaCheckBox.Text = "Bad Santa"; - this.santaCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.santaCheckBox, " The skin sits down after about 10 seconds of no controller input. Made for" + + this.crouchCheckBox.UseSelectable = true; + // + // dinnerboneCheckBox + // + this.dinnerboneCheckBox.AutoSize = true; + this.dinnerboneCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.dinnerboneCheckBox.Location = new System.Drawing.Point(126, 19); + this.dinnerboneCheckBox.Name = "dinnerboneCheckBox"; + this.dinnerboneCheckBox.Size = new System.Drawing.Size(97, 19); + this.dinnerboneCheckBox.TabIndex = 11; + this.dinnerboneCheckBox.Text = "Dinnerbone"; + this.dinnerboneCheckBox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.dinnerboneCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.dinnerboneCheckBox, " Flips the skin upside down like Dinnerbone\'s skin, a Minecraft developer. "); + this.dinnerboneCheckBox.UseSelectable = true; + // + // noArmorCheckBox + // + this.noArmorCheckBox.AutoSize = true; + this.noArmorCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.noArmorCheckBox.Location = new System.Drawing.Point(420, 81); + this.noArmorCheckBox.Name = "noArmorCheckBox"; + this.noArmorCheckBox.Size = new System.Drawing.Size(131, 19); + this.noArmorCheckBox.TabIndex = 10; + this.noArmorCheckBox.Text = "Disable All Armor"; + this.noArmorCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.noArmorCheckBox, " Disables all armor desptie the armor flags. "); + this.noArmorCheckBox.UseSelectable = true; + // + // bobbingCheckBox + // + this.bobbingCheckBox.AutoSize = true; + this.bobbingCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.bobbingCheckBox.Location = new System.Drawing.Point(272, 50); + this.bobbingCheckBox.Name = "bobbingCheckBox"; + this.bobbingCheckBox.Size = new System.Drawing.Size(124, 19); + this.bobbingCheckBox.TabIndex = 9; + this.bobbingCheckBox.Text = "Disable Bobbing"; + this.bobbingCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.bobbingCheckBox, " Disables the bobbing effect in first person."); + this.bobbingCheckBox.UseSelectable = true; + // + // santaCheckBox + // + this.santaCheckBox.AutoSize = true; + this.santaCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.santaCheckBox.Location = new System.Drawing.Point(420, 50); + this.santaCheckBox.Name = "santaCheckBox"; + this.santaCheckBox.Size = new System.Drawing.Size(86, 19); + this.santaCheckBox.TabIndex = 8; + this.santaCheckBox.Text = "Bad Santa"; + this.santaCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.santaCheckBox, " The skin sits down after about 10 seconds of no controller input. Made for" + " Bad Santa in the \"Festive\" skin pack. "); - this.santaCheckBox.UseSelectable = true; - // - // syncLegsCheckBox - // - this.syncLegsCheckBox.AutoSize = true; - this.syncLegsCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.syncLegsCheckBox.Location = new System.Drawing.Point(272, 19); - this.syncLegsCheckBox.Name = "syncLegsCheckBox"; - this.syncLegsCheckBox.Size = new System.Drawing.Size(136, 19); - this.syncLegsCheckBox.TabIndex = 7; - this.syncLegsCheckBox.Text = "Synchronous Legs"; - this.syncLegsCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.syncLegsCheckBox, " These parts will move at the same time and angle as each other. "); - this.syncLegsCheckBox.UseSelectable = true; - // - // staticArmsCheckBox - // - this.staticArmsCheckBox.AutoSize = true; - this.staticArmsCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.staticArmsCheckBox.Location = new System.Drawing.Point(6, 19); - this.staticArmsCheckBox.Name = "staticArmsCheckBox"; - this.staticArmsCheckBox.Size = new System.Drawing.Size(94, 19); - this.staticArmsCheckBox.TabIndex = 5; - this.staticArmsCheckBox.Text = "Static Arms"; - this.staticArmsCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.staticArmsCheckBox, " These parts will not move in most animations. "); - this.staticArmsCheckBox.UseSelectable = true; - // - // syncArmsCheckBox - // - this.syncArmsCheckBox.AutoSize = true; - this.syncArmsCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.syncArmsCheckBox.Location = new System.Drawing.Point(420, 19); - this.syncArmsCheckBox.Name = "syncArmsCheckBox"; - this.syncArmsCheckBox.Size = new System.Drawing.Size(140, 19); - this.syncArmsCheckBox.TabIndex = 4; - this.syncArmsCheckBox.Text = "Synchronous Arms"; - this.syncArmsCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.syncArmsCheckBox, " These parts will move at the same time and angle as each other. "); - this.syncArmsCheckBox.UseSelectable = true; - // - // statueCheckBox - // - this.statueCheckBox.AutoSize = true; - this.statueCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.statueCheckBox.Location = new System.Drawing.Point(272, 81); - this.statueCheckBox.Name = "statueCheckBox"; - this.statueCheckBox.Size = new System.Drawing.Size(126, 19); - this.statueCheckBox.TabIndex = 3; - this.statueCheckBox.Text = "Statue of Liberty"; - this.statueCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.statueCheckBox, " The right arm is lifted likt the Statue of Liberty. Made for Angel of Libe" + + this.santaCheckBox.UseSelectable = true; + // + // syncLegsCheckBox + // + this.syncLegsCheckBox.AutoSize = true; + this.syncLegsCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.syncLegsCheckBox.Location = new System.Drawing.Point(272, 19); + this.syncLegsCheckBox.Name = "syncLegsCheckBox"; + this.syncLegsCheckBox.Size = new System.Drawing.Size(136, 19); + this.syncLegsCheckBox.TabIndex = 7; + this.syncLegsCheckBox.Text = "Synchronous Legs"; + this.syncLegsCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.syncLegsCheckBox, " These parts will move at the same time and angle as each other. "); + this.syncLegsCheckBox.UseSelectable = true; + // + // staticArmsCheckBox + // + this.staticArmsCheckBox.AutoSize = true; + this.staticArmsCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.staticArmsCheckBox.Location = new System.Drawing.Point(6, 19); + this.staticArmsCheckBox.Name = "staticArmsCheckBox"; + this.staticArmsCheckBox.Size = new System.Drawing.Size(94, 19); + this.staticArmsCheckBox.TabIndex = 5; + this.staticArmsCheckBox.Text = "Static Arms"; + this.staticArmsCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.staticArmsCheckBox, " These parts will not move in most animations. "); + this.staticArmsCheckBox.UseSelectable = true; + // + // syncArmsCheckBox + // + this.syncArmsCheckBox.AutoSize = true; + this.syncArmsCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.syncArmsCheckBox.Location = new System.Drawing.Point(420, 19); + this.syncArmsCheckBox.Name = "syncArmsCheckBox"; + this.syncArmsCheckBox.Size = new System.Drawing.Size(140, 19); + this.syncArmsCheckBox.TabIndex = 4; + this.syncArmsCheckBox.Text = "Synchronous Arms"; + this.syncArmsCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.syncArmsCheckBox, " These parts will move at the same time and angle as each other. "); + this.syncArmsCheckBox.UseSelectable = true; + // + // statueCheckBox + // + this.statueCheckBox.AutoSize = true; + this.statueCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.statueCheckBox.Location = new System.Drawing.Point(272, 81); + this.statueCheckBox.Name = "statueCheckBox"; + this.statueCheckBox.Size = new System.Drawing.Size(126, 19); + this.statueCheckBox.TabIndex = 3; + this.statueCheckBox.Text = "Statue of Liberty"; + this.statueCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.statueCheckBox, " The right arm is lifted like the Statue of Liberty. Made for Angel of Libe" + "rty in the \"Doctor Who Volume I\" skin pack. "); - this.statueCheckBox.UseSelectable = true; - // - // zombieCheckBox - // - this.zombieCheckBox.AutoSize = true; - this.zombieCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.zombieCheckBox.Location = new System.Drawing.Point(6, 81); - this.zombieCheckBox.Name = "zombieCheckBox"; - this.zombieCheckBox.Size = new System.Drawing.Size(107, 19); - this.zombieCheckBox.TabIndex = 2; - this.zombieCheckBox.Text = "Zombie Arms"; - this.zombieCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.zombieCheckBox, " Both arms will stick up like a Zombie. "); - this.zombieCheckBox.UseSelectable = true; - // - // staticLegsCheckBox - // - this.staticLegsCheckBox.AutoSize = true; - this.staticLegsCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.staticLegsCheckBox.Location = new System.Drawing.Point(6, 50); - this.staticLegsCheckBox.Name = "staticLegsCheckBox"; - this.staticLegsCheckBox.Size = new System.Drawing.Size(90, 19); - this.staticLegsCheckBox.TabIndex = 1; - this.staticLegsCheckBox.Text = "Static Legs"; - this.staticLegsCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.staticLegsCheckBox, " These parts will not move in most animations. "); - this.staticLegsCheckBox.UseSelectable = true; - // - // copyButton - // - this.copyButton.Location = new System.Drawing.Point(425, 119); - this.copyButton.Name = "copyButton"; - this.copyButton.Size = new System.Drawing.Size(173, 23); - this.copyButton.TabIndex = 22; - this.copyButton.Text = "Copy ANIM Value"; - this.copyButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.copyButton.UseSelectable = true; - this.copyButton.Click += new System.EventHandler(this.copyButton_Click); - // - // importButton - // - this.importButton.Location = new System.Drawing.Point(32, 119); - this.importButton.Name = "importButton"; - this.importButton.Size = new System.Drawing.Size(186, 23); - this.importButton.TabIndex = 23; - this.importButton.Text = "Import ANIM"; - this.importButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.importButton.UseSelectable = true; - this.importButton.Click += new System.EventHandler(this.importButton_Click); - // - // exportButton - // - this.exportButton.Location = new System.Drawing.Point(229, 119); - this.exportButton.Name = "exportButton"; - this.exportButton.Size = new System.Drawing.Size(186, 23); - this.exportButton.TabIndex = 24; - this.exportButton.Text = "Export Template Texture"; - this.exportButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.exportButton.UseSelectable = true; - this.exportButton.Click += new System.EventHandler(this.exportButton_Click); - // - // animValue - // - this.animValue.AutoSize = true; - this.animValue.FontSize = MetroFramework.MetroLabelSize.Tall; - this.animValue.FontWeight = MetroFramework.MetroLabelWeight.Regular; - this.animValue.Location = new System.Drawing.Point(260, 60); - this.animValue.Name = "animValue"; - this.animValue.Size = new System.Drawing.Size(110, 25); - this.animValue.TabIndex = 25; - this.animValue.Text = "0x00000000"; - this.animValue.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.animValue.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // uncheckButton - // - this.uncheckButton.Location = new System.Drawing.Point(229, 90); - this.uncheckButton.Name = "uncheckButton"; - this.uncheckButton.Size = new System.Drawing.Size(186, 23); - this.uncheckButton.TabIndex = 26; - this.uncheckButton.Text = "Uncheck All"; - this.uncheckButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.uncheckButton.UseSelectable = true; - this.uncheckButton.Click += new System.EventHandler(this.uncheckButton_Click); - // - // checkButton - // - this.checkButton.Location = new System.Drawing.Point(32, 90); - this.checkButton.Name = "checkButton"; - this.checkButton.Size = new System.Drawing.Size(186, 23); - this.checkButton.TabIndex = 27; - this.checkButton.Text = "Check All"; - this.checkButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.checkButton.UseSelectable = true; - this.checkButton.Click += new System.EventHandler(this.checkButton_Click); - // - // toolTip - // - this.toolTip.StripAmpersands = true; - this.toolTip.Style = MetroFramework.MetroColorStyle.Blue; - this.toolTip.StyleManager = null; - this.toolTip.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // resetButton - // - this.resetButton.Location = new System.Drawing.Point(425, 90); - this.resetButton.Name = "resetButton"; - this.resetButton.Size = new System.Drawing.Size(173, 23); - this.resetButton.TabIndex = 28; - this.resetButton.Text = "Restore ANIM"; - this.resetButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.resetButton.UseSelectable = true; - this.resetButton.Click += new System.EventHandler(this.resetButton_Click); - // - // templateButton - // - this.templateButton.Location = new System.Drawing.Point(425, 154); - this.templateButton.Name = "templateButton"; - this.templateButton.Size = new System.Drawing.Size(173, 23); - this.templateButton.TabIndex = 29; - this.templateButton.Text = "Skin Presets"; - this.templateButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.templateButton.UseSelectable = true; - this.templateButton.Click += new System.EventHandler(this.templateButton_Click); - // - // ANIMEditor - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(630, 554); - this.Controls.Add(this.templateButton); - this.Controls.Add(this.effectsGroup); - this.Controls.Add(this.resetButton); - this.Controls.Add(this.checkButton); - this.Controls.Add(this.uncheckButton); - this.Controls.Add(this.animValue); - this.Controls.Add(this.exportButton); - this.Controls.Add(this.importButton); - this.Controls.Add(this.copyButton); - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.effectsGroup2); - this.Controls.Add(this.closeButton); - this.MaximumSize = new System.Drawing.Size(630, 554); - this.MinimizeBox = false; - this.MinimumSize = new System.Drawing.Size(630, 554); - this.Name = "ANIMEditor"; - this.Style = MetroFramework.MetroColorStyle.Silver; - this.Text = "ANIM Editor"; - this.Theme = MetroFramework.MetroThemeStyle.Dark; - this.effectsGroup.ResumeLayout(false); - this.effectsGroup.PerformLayout(); - this.effectsGroup2.ResumeLayout(false); - this.effectsGroup2.PerformLayout(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); + this.statueCheckBox.UseSelectable = true; + // + // zombieCheckBox + // + this.zombieCheckBox.AutoSize = true; + this.zombieCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.zombieCheckBox.Location = new System.Drawing.Point(6, 81); + this.zombieCheckBox.Name = "zombieCheckBox"; + this.zombieCheckBox.Size = new System.Drawing.Size(107, 19); + this.zombieCheckBox.TabIndex = 2; + this.zombieCheckBox.Text = "Zombie Arms"; + this.zombieCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.zombieCheckBox, " Both arms will stick up like a Zombie. "); + this.zombieCheckBox.UseSelectable = true; + // + // staticLegsCheckBox + // + this.staticLegsCheckBox.AutoSize = true; + this.staticLegsCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.staticLegsCheckBox.Location = new System.Drawing.Point(6, 50); + this.staticLegsCheckBox.Name = "staticLegsCheckBox"; + this.staticLegsCheckBox.Size = new System.Drawing.Size(90, 19); + this.staticLegsCheckBox.TabIndex = 1; + this.staticLegsCheckBox.Text = "Static Legs"; + this.staticLegsCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.staticLegsCheckBox, " These parts will not move in most animations. "); + this.staticLegsCheckBox.UseSelectable = true; + // + // copyButton + // + this.copyButton.Location = new System.Drawing.Point(425, 119); + this.copyButton.Name = "copyButton"; + this.copyButton.Size = new System.Drawing.Size(173, 23); + this.copyButton.TabIndex = 22; + this.copyButton.Text = "Copy ANIM Value"; + this.copyButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.copyButton.UseSelectable = true; + this.copyButton.Click += new System.EventHandler(this.copyButton_Click); + // + // importButton + // + this.importButton.Location = new System.Drawing.Point(32, 119); + this.importButton.Name = "importButton"; + this.importButton.Size = new System.Drawing.Size(186, 23); + this.importButton.TabIndex = 23; + this.importButton.Text = "Import ANIM"; + this.importButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.importButton.UseSelectable = true; + this.importButton.Click += new System.EventHandler(this.importButton_Click); + // + // exportButton + // + this.exportButton.Location = new System.Drawing.Point(229, 119); + this.exportButton.Name = "exportButton"; + this.exportButton.Size = new System.Drawing.Size(186, 23); + this.exportButton.TabIndex = 24; + this.exportButton.Text = "Export Template Texture"; + this.exportButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.exportButton.UseSelectable = true; + this.exportButton.Click += new System.EventHandler(this.exportButton_Click); + // + // animValue + // + this.animValue.AutoSize = true; + this.animValue.FontSize = MetroFramework.MetroLabelSize.Tall; + this.animValue.FontWeight = MetroFramework.MetroLabelWeight.Regular; + this.animValue.Location = new System.Drawing.Point(260, 60); + this.animValue.Name = "animValue"; + this.animValue.Size = new System.Drawing.Size(110, 25); + this.animValue.TabIndex = 25; + this.animValue.Text = "0x00000000"; + this.animValue.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.animValue.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // uncheckButton + // + this.uncheckButton.Location = new System.Drawing.Point(229, 90); + this.uncheckButton.Name = "uncheckButton"; + this.uncheckButton.Size = new System.Drawing.Size(186, 23); + this.uncheckButton.TabIndex = 26; + this.uncheckButton.Text = "Uncheck All"; + this.uncheckButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.uncheckButton.UseSelectable = true; + this.uncheckButton.Click += new System.EventHandler(this.uncheckButton_Click); + // + // checkButton + // + this.checkButton.Location = new System.Drawing.Point(32, 90); + this.checkButton.Name = "checkButton"; + this.checkButton.Size = new System.Drawing.Size(186, 23); + this.checkButton.TabIndex = 27; + this.checkButton.Text = "Check All"; + this.checkButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.checkButton.UseSelectable = true; + this.checkButton.Click += new System.EventHandler(this.checkButton_Click); + // + // toolTip + // + this.toolTip.StripAmpersands = true; + this.toolTip.Style = MetroFramework.MetroColorStyle.Blue; + this.toolTip.StyleManager = null; + this.toolTip.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // resetButton + // + this.resetButton.Location = new System.Drawing.Point(425, 90); + this.resetButton.Name = "resetButton"; + this.resetButton.Size = new System.Drawing.Size(173, 23); + this.resetButton.TabIndex = 28; + this.resetButton.Text = "Restore ANIM"; + this.resetButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.resetButton.UseSelectable = true; + this.resetButton.Click += new System.EventHandler(this.resetButton_Click); + // + // templateButton + // + this.templateButton.Location = new System.Drawing.Point(425, 154); + this.templateButton.Name = "templateButton"; + this.templateButton.Size = new System.Drawing.Size(173, 23); + this.templateButton.TabIndex = 29; + this.templateButton.Text = "Skin Presets"; + this.templateButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.templateButton.UseSelectable = true; + this.templateButton.Click += new System.EventHandler(this.templateButton_Click); + // + // ANIMEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(630, 554); + this.Controls.Add(this.templateButton); + this.Controls.Add(this.effectsGroup); + this.Controls.Add(this.resetButton); + this.Controls.Add(this.checkButton); + this.Controls.Add(this.uncheckButton); + this.Controls.Add(this.animValue); + this.Controls.Add(this.exportButton); + this.Controls.Add(this.importButton); + this.Controls.Add(this.copyButton); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.effectsGroup2); + this.Controls.Add(this.closeButton); + this.MaximumSize = new System.Drawing.Size(630, 554); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(630, 554); + this.Name = "ANIMEditor"; + this.Style = MetroFramework.MetroColorStyle.Silver; + this.Text = "ANIM Editor"; + this.Theme = MetroFramework.MetroThemeStyle.Dark; + this.effectsGroup.ResumeLayout(false); + this.effectsGroup.PerformLayout(); + this.effectsGroup2.ResumeLayout(false); + this.effectsGroup2.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); } From 60c6e3e2b254e51c5958be949a263e8808c6e4d9 Mon Sep 17 00:00:00 2001 From: MattNL Date: Fri, 28 Oct 2022 19:20:55 -0400 Subject: [PATCH 104/110] Added feature to check and remove PS4 exclusive biomes from .col files via prompt --- PCK-Studio/Forms/Editor/COLEditor.cs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/PCK-Studio/Forms/Editor/COLEditor.cs b/PCK-Studio/Forms/Editor/COLEditor.cs index d5244f3a..86c3a357 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.cs @@ -153,6 +153,30 @@ namespace PckStudio.Forms.Editor private void saveToolStripMenuItem1_Click(object sender, EventArgs e) { + List PS4Biomes = new List(); + PS4Biomes.Add("bamboo_jungle"); + PS4Biomes.Add("bamboo_jungle_hills"); + PS4Biomes.Add("mesa_mutated"); + PS4Biomes.Add("mega_spruce_taiga_mutated"); + PS4Biomes.Add("mega_taiga_mutated"); + + if (colourfile.waterEntries.Find(e => PS4Biomes.Contains(e.name)) != null) + { + var result = MessageBox.Show(this, "Biomes exclusive to PS4 Edition v1.91 were found in the colour table and will crash your game if these biomes don't exist. Would you like to remove them?", "Potential unsupported biomes found", MessageBoxButtons.YesNoCancel); + switch (result) + { + case DialogResult.Yes: + foreach (var col in colourfile.waterEntries.ToList()) + { + if(PS4Biomes.Contains(col.name)) colourfile.waterEntries.Remove(col); + } + break; + case DialogResult.No: + break; + default: + return; + } + } using (var stream = new MemoryStream()) { COLFileWriter.Write(stream, colourfile); From 9280a0158f09c9d8d46dbbba0445f849e0146afa Mon Sep 17 00:00:00 2001 From: MattNL Date: Fri, 28 Oct 2022 19:27:10 -0400 Subject: [PATCH 105/110] Fixed the Underwater and Fog treeviews not being fully visible in Col Editor --- PCK-Studio/Forms/Editor/COLEditor.Designer.cs | 78 ++-- PCK-Studio/Forms/Editor/COLEditor.resx | 372 +++++++++++++----- 2 files changed, 321 insertions(+), 129 deletions(-) diff --git a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs index 939580e3..c59586e0 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs @@ -34,6 +34,8 @@ namespace PckStudio.Forms.Editor this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(COLEditor)); this.metroPanel1 = new MetroFramework.Controls.MetroPanel(); + this.metroTextBox1 = new MetroFramework.Controls.MetroTextBox(); + this.metroLabel2 = new MetroFramework.Controls.MetroLabel(); this.setColorBtn = new MetroFramework.Controls.MetroButton(); this.blueUpDown = new System.Windows.Forms.NumericUpDown(); this.greenUpDown = new System.Windows.Forms.NumericUpDown(); @@ -60,8 +62,6 @@ namespace PckStudio.Forms.Editor this.tabControl = new MetroFramework.Controls.MetroTabControl(); this.underwaterTab = new System.Windows.Forms.TabPage(); this.fogTab = new System.Windows.Forms.TabPage(); - this.metroTextBox1 = new MetroFramework.Controls.MetroTextBox(); - this.metroLabel2 = new MetroFramework.Controls.MetroLabel(); this.metroPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).BeginInit(); @@ -104,6 +104,42 @@ namespace PckStudio.Forms.Editor this.metroPanel1.VerticalScrollbarHighlightOnWheel = false; this.metroPanel1.VerticalScrollbarSize = 10; // + // metroTextBox1 + // + // + // + // + this.metroTextBox1.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image"))); + this.metroTextBox1.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location"))); + this.metroTextBox1.CustomButton.Name = ""; + this.metroTextBox1.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size"))); + this.metroTextBox1.CustomButton.Style = MetroFramework.MetroColorStyle.Blue; + this.metroTextBox1.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex"))); + this.metroTextBox1.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light; + this.metroTextBox1.CustomButton.UseSelectable = true; + this.metroTextBox1.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible"))); + this.metroTextBox1.Lines = new string[0]; + resources.ApplyResources(this.metroTextBox1, "metroTextBox1"); + 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.Theme = MetroFramework.MetroThemeStyle.Dark; + 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); + this.metroTextBox1.TextChanged += new System.EventHandler(this.metroTextBox1_TextChanged); + // + // metroLabel2 + // + resources.ApplyResources(this.metroLabel2, "metroLabel2"); + this.metroLabel2.Name = "metroLabel2"; + this.metroLabel2.Theme = MetroFramework.MetroThemeStyle.Dark; + // // setColorBtn // resources.ApplyResources(this.setColorBtn, "setColorBtn"); @@ -318,7 +354,7 @@ namespace PckStudio.Forms.Editor this.tabControl.Controls.Add(this.underwaterTab); this.tabControl.Controls.Add(this.fogTab); this.tabControl.Name = "tabControl"; - this.tabControl.SelectedIndex = 0; + this.tabControl.SelectedIndex = 3; this.tabControl.Style = MetroFramework.MetroColorStyle.White; this.tabControl.Theme = MetroFramework.MetroThemeStyle.Dark; this.tabControl.UseSelectable = true; @@ -337,42 +373,6 @@ namespace PckStudio.Forms.Editor resources.ApplyResources(this.fogTab, "fogTab"); this.fogTab.Name = "fogTab"; // - // metroTextBox1 - // - // - // - // - this.metroTextBox1.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image"))); - this.metroTextBox1.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location"))); - this.metroTextBox1.CustomButton.Name = ""; - this.metroTextBox1.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size"))); - this.metroTextBox1.CustomButton.Style = MetroFramework.MetroColorStyle.Blue; - this.metroTextBox1.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex"))); - this.metroTextBox1.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light; - this.metroTextBox1.CustomButton.UseSelectable = true; - this.metroTextBox1.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible"))); - this.metroTextBox1.Lines = new string[0]; - resources.ApplyResources(this.metroTextBox1, "metroTextBox1"); - 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.Theme = MetroFramework.MetroThemeStyle.Dark; - 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); - this.metroTextBox1.TextChanged += new System.EventHandler(this.metroTextBox1_TextChanged); - // - // metroLabel2 - // - resources.ApplyResources(this.metroLabel2, "metroLabel2"); - this.metroLabel2.Name = "metroLabel2"; - this.metroLabel2.Theme = MetroFramework.MetroThemeStyle.Dark; - // // COLEditor // resources.ApplyResources(this, "$this"); diff --git a/PCK-Studio/Forms/Editor/COLEditor.resx b/PCK-Studio/Forms/Editor/COLEditor.resx index 3ca373b8..3dae42c7 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 - 1 @@ -492,58 +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 - 20, 60 @@ -568,38 +714,27 @@ 1 - - 125, 17 - - - 186, 22 + + 37, 20 - - Restore original color + + File - - 187, 26 + + + 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 + - - ColorContextMenu + + 98, 22 - - MetroFramework.Controls.MetroContextMenu, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - Fill - - - 0, 0 - - - No - - - 320, 381 - - - 0 + + Save waterTreeView @@ -637,11 +772,56 @@ 1 + + 125, 17 + + + 187, 26 + + + ColorContextMenu + + + MetroFramework.Controls.MetroContextMenu, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + Fill + + + 0, 0 + + + No + + + 320, 381 + + + 0 + + + waterTreeView + + + System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + waterTab + + + 0 + + + 186, 22 + + + Restore original color + 0, 0 - 320, 458 + 320, 381 0 @@ -662,7 +842,7 @@ 0, 0 - 320, 458 + 320, 381 0 @@ -679,18 +859,6 @@ 0 - - Fill - - - 0, 0 - - - 320, 381 - - - 0 - colorTreeView @@ -727,6 +895,30 @@ 0 + + Fill + + + 0, 0 + + + 320, 381 + + + 0 + + + colorTreeView + + + System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + colorsTab + + + 0 + Top, Bottom, Left From 6230d8c437e9bff6f2ba41fb2c0f8fe90364c0e9 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 1 Nov 2022 23:10:20 -0400 Subject: [PATCH 106/110] Update COLEditor.cs --- PCK-Studio/Forms/Editor/COLEditor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Forms/Editor/COLEditor.cs b/PCK-Studio/Forms/Editor/COLEditor.cs index 86c3a357..87ed21f0 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.cs @@ -162,7 +162,7 @@ namespace PckStudio.Forms.Editor if (colourfile.waterEntries.Find(e => PS4Biomes.Contains(e.name)) != null) { - var result = MessageBox.Show(this, "Biomes exclusive to PS4 Edition v1.91 were found in the colour table and will crash your game if these biomes don't exist. Would you like to remove them?", "Potential unsupported biomes found", MessageBoxButtons.YesNoCancel); + var result = MessageBox.Show(this, "Biomes exclusive to PS4 Edition v1.91 were found in 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: From fed7a5f059a8d955f7378b4eae2e2e950888af38 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 1 Nov 2022 23:11:50 -0400 Subject: [PATCH 107/110] Adjusting wording on the biome color warning prompt --- PCK-Studio/Forms/Editor/COLEditor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Forms/Editor/COLEditor.cs b/PCK-Studio/Forms/Editor/COLEditor.cs index 87ed21f0..b3d58d91 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.cs @@ -162,7 +162,7 @@ namespace PckStudio.Forms.Editor if (colourfile.waterEntries.Find(e => PS4Biomes.Contains(e.name)) != null) { - var result = MessageBox.Show(this, "Biomes exclusive to PS4 Edition v1.91 were found in 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); + 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: From 28d454ccccd8804fc988d08b490dfafcb0275a4a Mon Sep 17 00:00:00 2001 From: MattNL Date: Wed, 2 Nov 2022 05:05:24 -0400 Subject: [PATCH 108/110] Put ColEditor setup code in a function to prepare for a new feature --- PCK-Studio/Forms/Editor/COLEditor.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/PCK-Studio/Forms/Editor/COLEditor.cs b/PCK-Studio/Forms/Editor/COLEditor.cs index b3d58d91..e6afa9a0 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.cs @@ -41,6 +41,11 @@ namespace PckStudio.Forms.Editor default_colourfile = COLFileReader.Read(stream); } + SetUpDefaultTable(); + } + + void SetUpDefaultTable() + { foreach (var obj in default_colourfile.entries) { COLFile.ColorEntry entry = colourfile.entries.Find(color => color.name == obj.name); @@ -49,7 +54,7 @@ namespace PckStudio.Forms.Editor colorTreeView.Nodes.Add(tn); colorCache.Add(tn); } - foreach (var obj in colourfile.waterEntries) + foreach (var obj in default_colourfile.waterEntries) { COLFile.ExtendedColorEntry entry = colourfile.waterEntries.Find(color => color.name == obj.name); TreeNode tn = new TreeNode(obj.name); From 85cd4e2f25c4c5f6d60dc2993c1f06030fdef6b3 Mon Sep 17 00:00:00 2001 From: MattNL Date: Wed, 2 Nov 2022 05:17:49 -0400 Subject: [PATCH 109/110] COLEditor now correctly starts with the "Everything" tab selected --- PCK-Studio/Forms/Editor/COLEditor.Designer.cs | 4 +- PCK-Studio/Forms/Editor/COLEditor.resx | 418 +++++------------- 2 files changed, 115 insertions(+), 307 deletions(-) diff --git a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs index c59586e0..e34d56f4 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs @@ -349,12 +349,12 @@ namespace PckStudio.Forms.Editor // tabControl // resources.ApplyResources(this.tabControl, "tabControl"); + this.tabControl.Controls.Add(this.fogTab); 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 = 3; + this.tabControl.SelectedIndex = 0; this.tabControl.Style = MetroFramework.MetroColorStyle.White; this.tabControl.Theme = MetroFramework.MetroThemeStyle.Dark; this.tabControl.UseSelectable = true; diff --git a/PCK-Studio/Forms/Editor/COLEditor.resx b/PCK-Studio/Forms/Editor/COLEditor.resx index 3dae42c7..2a9bbf20 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.resx +++ b/PCK-Studio/Forms/Editor/COLEditor.resx @@ -117,210 +117,18 @@ 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 + 1 @@ -684,12 +492,58 @@ 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 + 20, 60 @@ -714,67 +568,15 @@ 1 - - 37, 20 - - - File - - - - 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 - - - waterTreeView - - - System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - waterTab - - - 0 - - - 4, 38 - - - 320, 381 - - - 1 - - - Water - - - waterTab - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl - - - 1 - 125, 17 + + 186, 22 + + + Restore original color + 187, 26 @@ -811,11 +613,29 @@ 0 - - 186, 22 + + 4, 38 - - Restore original color + + 320, 381 + + + 1 + + + Water + + + waterTab + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl + + + 2 0, 0 @@ -859,6 +679,18 @@ 0 + + Fill + + + 0, 0 + + + 320, 381 + + + 0 + colorTreeView @@ -893,59 +725,11 @@ tabControl - 0 - - - Fill - - - 0, 0 - - - 320, 381 - - - 0 - - - colorTreeView - - - System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - colorsTab - - - 0 + 1 Top, Bottom, Left - - 4, 38 - - - 320, 381 - - - 2 - - - Underwater - - - underwaterTab - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl - - - 2 - 4, 38 @@ -968,6 +752,30 @@ tabControl + 0 + + + 4, 38 + + + 320, 381 + + + 2 + + + Underwater + + + underwaterTab + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl + + 3 From 378daf9b80edff46caaed97b3b35f3da610a585e Mon Sep 17 00:00:00 2001 From: MattNL Date: Wed, 2 Nov 2022 05:57:16 -0400 Subject: [PATCH 110/110] Added hasWaterTable flag to ColFile --- PCK-Studio/Classes/FileTypes/COLFile.cs | 1 + PCK-Studio/Classes/IO/COL/COLFileReader.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/PCK-Studio/Classes/FileTypes/COLFile.cs b/PCK-Studio/Classes/FileTypes/COLFile.cs index c7d1e6a6..e83e37d3 100644 --- a/PCK-Studio/Classes/FileTypes/COLFile.cs +++ b/PCK-Studio/Classes/FileTypes/COLFile.cs @@ -37,6 +37,7 @@ namespace PckStudio.Classes.FileTypes } } + public bool hasWaterTable; public List entries = new List(); public List waterEntries = new List(); } diff --git a/PCK-Studio/Classes/IO/COL/COLFileReader.cs b/PCK-Studio/Classes/IO/COL/COLFileReader.cs index 41cb77c1..beaec7be 100644 --- a/PCK-Studio/Classes/IO/COL/COLFileReader.cs +++ b/PCK-Studio/Classes/IO/COL/COLFileReader.cs @@ -19,6 +19,7 @@ namespace PckStudio.Classes.IO.COL { COLFile colourFile = new COLFile(); int has_water_colors = ReadInt(stream); + colourFile.hasWaterTable = has_water_colors > 0; int color_entries = ReadInt(stream); for (int i = 0; i < color_entries; i++) {