Add compression function and Place compressor to SDK #61

Closed
IDeletedSystem64 wants to merge 2 commits from rblxcompressor into master
8 changed files with 396 additions and 8 deletions

View File

@ -830,6 +830,33 @@ namespace Novetus.Core
return outFname;
}
public static void Compress(string currFile) // taken from https://github.com/IDeletedSystem64/rblx-compressor
{
var newFile = currFile + ".bz2";
var input = File.OpenRead(currFile);
var output = File.Create(newFile);
{
try
{
{
using (var compressor = new Ionic.BZip2.ParallelBZip2OutputStream(output))
{
byte[] buffer = new byte[2048];
int n;
while ((n = input.Read(buffer, 0, buffer.Length)) > 0)
{
compressor.Write(buffer, 0, n);
}
}
}
}
catch (Exception ex)
{
throw;
}
}
}
private static void Pump(Stream src, Stream dest)
{

View File

@ -46,12 +46,14 @@
System.Windows.Forms.ListViewItem listViewItem9 = new System.Windows.Forms.ListViewItem(new string[] {
"Roblox Script Generator"}, "ROBLOXScriptGenerator.png", System.Drawing.Color.Empty, System.Drawing.Color.Empty, new System.Drawing.Font("Microsoft Sans Serif", 9.75F));
System.Windows.Forms.ListViewItem listViewItem10 = new System.Windows.Forms.ListViewItem(new string[] {
"Roblox Legacy Place Converter"}, "ROBLOXLegacyPlaceConverter.png", System.Drawing.Color.Empty, System.Drawing.Color.Empty, new System.Drawing.Font("Microsoft Sans Serif", 9.75F));
"Place Compressor"}, "ModCreator.png", System.Drawing.Color.Empty, System.Drawing.Color.Empty, new System.Drawing.Font("Microsoft Sans Serif", 9.75F));
System.Windows.Forms.ListViewItem listViewItem11 = new System.Windows.Forms.ListViewItem(new string[] {
"Diogenes Editor"}, "Diogenes.png", System.Drawing.Color.Empty, System.Drawing.Color.Empty, new System.Drawing.Font("Microsoft Sans Serif", 9.75F));
"Roblox Legacy Place Converter"}, "ROBLOXLegacyPlaceConverter.png", System.Drawing.Color.Empty, System.Drawing.Color.Empty, new System.Drawing.Font("Microsoft Sans Serif", 9.75F));
System.Windows.Forms.ListViewItem listViewItem12 = new System.Windows.Forms.ListViewItem(new string[] {
"ClientScript Tester"}, "ClientScriptTester.png", System.Drawing.Color.Empty, System.Drawing.Color.Empty, new System.Drawing.Font("Microsoft Sans Serif", 9.75F));
"Diogenes Editor"}, "Diogenes.png", System.Drawing.Color.Empty, System.Drawing.Color.Empty, new System.Drawing.Font("Microsoft Sans Serif", 9.75F));
System.Windows.Forms.ListViewItem listViewItem13 = new System.Windows.Forms.ListViewItem(new string[] {
"ClientScript Tester"}, "ClientScriptTester.png", System.Drawing.Color.Empty, System.Drawing.Color.Empty, new System.Drawing.Font("Microsoft Sans Serif", 9.75F));
System.Windows.Forms.ListViewItem listViewItem14 = new System.Windows.Forms.ListViewItem(new string[] {
"XML Content Editor"}, 9, System.Drawing.Color.Empty, System.Drawing.Color.Empty, new System.Drawing.Font("Microsoft Sans Serif", 9.75F));
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NovetusSDK));
this.label1 = new System.Windows.Forms.Label();
@ -106,7 +108,8 @@
listViewItem10,
listViewItem11,
listViewItem12,
listViewItem13});
listViewItem13,
listViewItem14});
this.listView1.Location = new System.Drawing.Point(12, 102);
this.listView1.Name = "listView1";
this.listView1.Size = new System.Drawing.Size(414, 260);

View File

@ -21,6 +21,7 @@ enum SDKApps
ClientScriptDoc,
SplashTester,
ScriptGenerator,
PlaceCompressor,
LegacyPlaceConverter,
DiogenesEditor,
ClientScriptTester,
@ -142,6 +143,10 @@ public partial class NovetusSDK : Form
proc.StartInfo.UseShellExecute = false;
proc.Start();
break;
case SDKApps.PlaceCompressor:
PlaceCompressor pc = new PlaceCompressor();
pc.Show();
break;
case SDKApps.LegacyPlaceConverter:
Process proc2 = new Process();
proc2.StartInfo.FileName = GlobalPaths.DataDir + "\\Roblox_Legacy_Place_Converter.exe";
@ -149,6 +154,7 @@ public partial class NovetusSDK : Form
proc2.StartInfo.UseShellExecute = false;
proc2.Start();
break;
case SDKApps.DiogenesEditor:
DiogenesEditor dio = new DiogenesEditor();
dio.Show();

View File

@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACw
FgAAAk1TRnQBSQFMAgEBDQEAAVABAAFQAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
FgAAAk1TRnQBSQFMAgEBDQEAAVgBAAFYAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAAUADAAEBAQABCAYAARAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@ -154,9 +154,9 @@
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wYAAd0BtAHdBf8B3QG0
Ad01AAG0AdYBtAHuAQcB+ALrAbQB1gG0NAAB/wHxAbQB8AH0AfMB6wJtAfABtAHxNAAB/wHvAvgC6wHt
AfcB6wH0MgABGwdSARwBkgHtAfcB6wH0MgABUgblAVkBUgH0AfgB7wHrAfQyAAFSAeUCWAM3AeUBUgH0
AfgB7wHrAfQyAAFSAeUBWAOgATcB5QFSAf8B7AHvAfgB9DIAAVIB5QVeAeUBUgH/AewB7wH4AfQyAAFS
Ad01AAG0AdYBtAG8AQcB7ALrAbQB1gG0NAAB/wHxAbQB8AH0AfMB6wJtAfABtAHxNAAB/wHvAuwC6wHt
AfcB6wH0MgABGwdSARwBkgHtAfcB6wH0MgABUgblAVkBUgH0AewB7wHrAfQyAAFSAeUCWAM3AeUBUgH0
AewB7wHrAfQyAAFSAeUBWAOgATcB5QFSAf8B7AHvAewB9DIAAVIB5QVeAeUBUgH/AewB7wHsAfQyAAFS
AeUFWAHlAVIB/wHtAe8B7AH0MgABUgHlAVgDoAFYAeUBUgH/Ae0B7wHsAfQyAAFSBOUCXgHlAVIB/wGS
Ae8B7AH0MgABeQdYAXkB8gHtAe8B7AH0MgABGwFSAVgBHAH3BZIC7wHsAfQzAAHzAZkBHAH3Ae8FBwHv
Ae0B/zQAAv8B9AHvAvcEkgG8Af9aAAH/AZgaAASzAa0BxwEABa0BvAS1CrQBvAUAA20CSQFtDAACcgsA

View File

@ -0,0 +1,125 @@
 partial class PlaceCompressor
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PlaceCompressor));
this.statusLabel = new System.Windows.Forms.Label();
this.processStatus = new System.Windows.Forms.Label();
this.selectButton = new System.Windows.Forms.Button();
this.selectedText = new System.Windows.Forms.Label();
this.currentFile = new System.Windows.Forms.Label();
this.sourceLink = new System.Windows.Forms.LinkLabel();
this.SuspendLayout();
//
// statusLabel
//
this.statusLabel.AutoSize = true;
this.statusLabel.Location = new System.Drawing.Point(12, 15);
this.statusLabel.Name = "statusLabel";
this.statusLabel.Size = new System.Drawing.Size(40, 13);
this.statusLabel.TabIndex = 0;
this.statusLabel.Text = "Status:";
//
// processStatus
//
this.processStatus.AutoSize = true;
this.processStatus.Location = new System.Drawing.Point(49, 15);
this.processStatus.Name = "processStatus";
this.processStatus.Size = new System.Drawing.Size(74, 13);
this.processStatus.TabIndex = 1;
this.processStatus.Text = "processStatus";
//
// selectButton
//
this.selectButton.Location = new System.Drawing.Point(12, 31);
this.selectButton.Name = "selectButton";
this.selectButton.Size = new System.Drawing.Size(340, 23);
this.selectButton.TabIndex = 2;
this.selectButton.Text = "Select Place";
this.selectButton.UseVisualStyleBackColor = true;
this.selectButton.Click += new System.EventHandler(this.selectButton_Click);
//
// selectedText
//
this.selectedText.AutoSize = true;
this.selectedText.Location = new System.Drawing.Point(12, 57);
this.selectedText.Name = "selectedText";
this.selectedText.Size = new System.Drawing.Size(82, 13);
this.selectedText.TabIndex = 3;
this.selectedText.Text = "Selected Place:";
//
// currentFile
//
this.currentFile.AutoSize = true;
this.currentFile.Location = new System.Drawing.Point(91, 57);
this.currentFile.Name = "currentFile";
this.currentFile.Size = new System.Drawing.Size(41, 13);
this.currentFile.TabIndex = 4;
this.currentFile.Text = "currFile";
//
// sourceLink
//
this.sourceLink.AutoSize = true;
this.sourceLink.LinkColor = System.Drawing.Color.Black;
this.sourceLink.Location = new System.Drawing.Point(12, 80);
this.sourceLink.Name = "sourceLink";
this.sourceLink.Size = new System.Drawing.Size(298, 13);
this.sourceLink.TabIndex = 5;
this.sourceLink.TabStop = true;
this.sourceLink.Text = "Checkout the fully featured compressor and source on GitHub";
this.sourceLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.sourceLink_LinkClicked);
//
// PlaceCompressor
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.ClientSize = new System.Drawing.Size(364, 105);
this.Controls.Add(this.sourceLink);
this.Controls.Add(this.currentFile);
this.Controls.Add(this.selectedText);
this.Controls.Add(this.selectButton);
this.Controls.Add(this.processStatus);
this.Controls.Add(this.statusLabel);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "PlaceCompressor";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "RBLX Compressor";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label statusLabel;
private System.Windows.Forms.Label processStatus;
private System.Windows.Forms.Button selectButton;
private System.Windows.Forms.Label selectedText;
private System.Windows.Forms.Label currentFile;
private System.Windows.Forms.LinkLabel sourceLink;
}

View File

@ -0,0 +1,73 @@
#region Usings
using Novetus.Core;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.Windows.Forms;
#endregion
public partial class PlaceCompressor : Form
{
private bool successful;
private string currFile;
public PlaceCompressor()
{
InitializeComponent();
processStatus.Text = "Idle";
currentFile.Text = "No place selected!";
}
private void selectButton_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
{
ofd.Filter = "Roblox Level (*.rbxl)|*.rbxl|Roblox Level|*.rbxlx";
ofd.FilterIndex = 1;
ofd.Title = "Load Roblox Level...";
if (ofd.ShowDialog() == DialogResult.OK)
{
currentFile.Text = ofd.SafeFileName;
currFile = Path.GetFullPath(ofd.FileName);
selectButton.Enabled = false;
processStatus.Text = "Compressing...";
Util.ConsolePrint("Beginning compression of " + ofd.SafeFileName, 3);
try
{
Util.Compress(currFile);
successful = true;
}
catch (Exception ex)
{
successful = false;
Util.ConsolePrint("Something went wrong while compressing: " + ex.Message, 2);
MessageBox.Show("Something went wrong while compressing the Place: \n" + ex.Message, "RBLX Compressor - Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
throw;
}
finally
{
selectButton.Enabled = true;
System.GC.Collect(); // I know this isn't recommended, but repeated use in a single session can cause memory leaks otherwise.
if (!successful) { processStatus.Text = "Error"; }
else
{
processStatus.Text = "Compression Finished!";
Util.ConsolePrint("Compression Finished", 3);
}
}
}
}
}
private void sourceLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start("https://github.com/IDeletedSystem64/rblx-compressor");
}
}

View File

@ -0,0 +1,145 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAD///8A////AP///wD///8A////ANhsJXDYbCXg0mwpdltoaA1ZZmYPVmVlGVRhYRtSYGAZzWsqc9ds
JeLXbCVx////AP///wD///8A////AP///wDfgEHg66+I/9d/RPBcamqGXGpqkFlmZuVWZWXpVmNj5dV+
Q/Lrrob/3oBB4f///wD///8A////AP///wBrd3cD1ZFgfeCTXuTKjWGKYW9vMV5ra0tjb2/+XGpq/l5r
a/7Ii1+J4ZRe4eGUXnH///8A////AP///wD///8Ab3p6EYiSktJ8h4f/eoWF/3N/f/9lcnL9jZeX/5yk
pP9rdnb/V2VlJP///wD///8AJ5/CcCefwv8nn8L/J5/C/yifwf8unLz/MJq4/zKYtP9YfYXHa3d314qU
lP+epqb/bXl5/1toaCT///8A////ACefwv9b6O//YPT2/1309v9Z9Pb/VfT2/1H09v9J5+7/Kp2+/2h0
dDV4g4P/oKio/3B7e/9camok////AP///wAnn8L/Z/X2/yrc3f8c1NT/F9LU/xHS0/8V2dv/UvT2/yef
wv9qd3cjd4KC/6Kqqv9xfn7/YG1tJP///wD///8AJ5/C/2v19v8n1df/o/T0/6H09P+g9PT/EdLT/1b0
9v8nn8L/bXl5H4SGgfWiqan/fIN+/2NvbyT///8A////ACefwv9u9fb/TPP0/0jz9P9F8/T/QPL0/zzy
9P9a9Pb/J5/C/3B8fB5/hH70pKuq/3uDgP9lcnIk////AP///wAnn8L/cfX2/zje3/8s1tf/KNXX/yPV
1v8n3N3/XvT2/yefwv91gYEei42G9Katrf+Dh4T/aHV1JP///wD///8AJ5/C/3P19v812Nj/p/T0/6b0
9P+k9PT/JNXW/2L09v8nn8L/d4ODHoaLhPSor67/gYeG/215eST///8A////ACefwv929fb/V/P0/1Tz
9P9R8/T/TvP0/0rz9P9m9fb/J5/C/3qGhh6Qk4v0qrCw/4eOi/9wfHwk////AP///wAnn8LBRM/Z/0re
3/810tL/NM7O/zLMzf880ND/QsjO/zacuddgkZ1giY6L9620s/+GjIv/cn5+JP///wD///8AJ5/CWief
wv1Dxs//ka2u/5qiov+Xn5//lp6e/5KcnP+Rmpr/k5yc/6Cpqf+wtrb/ho6M/3eBgST///8A////AP//
/wAnn8JOM56+vpCorPmepqb/qrGx/7m/v/+4vr7/try8/7W7u/+zubn/sLe3/4WQkP95hIQh////AP//
/wD///8A////AJObmwOTm5sXkpqaM52lpd6aoqL/maGh/5aenv+Unp7/kpyc/46YmPqSmpqWfoiIDv//
/wD///8A+AAAAPgAAADwAAAA8AMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAD
AACAAwAAwAMAAA==
</value>
</data>
</root>

View File

@ -369,6 +369,12 @@
<Compile Include="Forms\NovetusConsole.Designer.cs">
<DependentUpon>NovetusConsole.cs</DependentUpon>
</Compile>
<Compile Include="Forms\SDK\PlaceCompressor.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\SDK\PlaceCompressor.Designer.cs">
<DependentUpon>PlaceCompressor.cs</DependentUpon>
</Compile>
<Compile Include="Forms\SDK\ModCreator.cs">
<SubType>Form</SubType>
</Compile>
@ -497,6 +503,9 @@
<EmbeddedResource Include="Forms\NovetusConsole.resx">
<DependentUpon>NovetusConsole.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\SDK\PlaceCompressor.resx">
<DependentUpon>PlaceCompressor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\SDK\ModCreator.resx">
<DependentUpon>ModCreator.cs</DependentUpon>
</EmbeddedResource>