diff --git a/Nifscan.sln b/Nifscan.sln
new file mode 100644
index 0000000..2da65e8
--- /dev/null
+++ b/Nifscan.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Express 2012 for Windows Desktop
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nifscan", "Nifscan\Nifscan.csproj", "{954D1A7F-D909-43EC-A1E2-053ABF7358D6}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {954D1A7F-D909-43EC-A1E2-053ABF7358D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {954D1A7F-D909-43EC-A1E2-053ABF7358D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {954D1A7F-D909-43EC-A1E2-053ABF7358D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {954D1A7F-D909-43EC-A1E2-053ABF7358D6}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Nifscan.v11.suo b/Nifscan.v11.suo
new file mode 100644
index 0000000..a5b085b
Binary files /dev/null and b/Nifscan.v11.suo differ
diff --git a/Nifscan/App.config b/Nifscan/App.config
new file mode 100644
index 0000000..58262a1
--- /dev/null
+++ b/Nifscan/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/Nifscan/FormEC.Designer.cs b/Nifscan/FormEC.Designer.cs
new file mode 100644
index 0000000..1c31f4c
--- /dev/null
+++ b/Nifscan/FormEC.Designer.cs
@@ -0,0 +1,264 @@
+namespace Nifscan
+{
+ partial class FormEC
+ {
+ private System.ComponentModel.IContainer components = null;
+ private System.Windows.Forms.ComboBox comboBox1;
+ private System.Windows.Forms.NumericUpDown numericUpDown4;
+ private System.Windows.Forms.NumericUpDown numericUpDown3;
+ private System.Windows.Forms.NumericUpDown numericUpDown2;
+ private System.Windows.Forms.NumericUpDown numericUpDown1;
+ private System.Windows.Forms.Label label5;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.CheckBox checkBox2;
+ private System.Windows.Forms.CheckBox checkBox1;
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ private void InitializeComponent()
+ {
+ this.comboBox1 = new System.Windows.Forms.ComboBox();
+ this.numericUpDown4 = new System.Windows.Forms.NumericUpDown();
+ this.numericUpDown3 = new System.Windows.Forms.NumericUpDown();
+ this.numericUpDown2 = new System.Windows.Forms.NumericUpDown();
+ this.numericUpDown1 = new System.Windows.Forms.NumericUpDown();
+ this.label5 = new System.Windows.Forms.Label();
+ this.label4 = new System.Windows.Forms.Label();
+ this.label3 = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.checkBox2 = new System.Windows.Forms.CheckBox();
+ this.checkBox1 = new System.Windows.Forms.CheckBox();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown4)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown3)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit();
+ this.SuspendLayout();
+ //
+ // comboBox1
+ //
+ this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.comboBox1.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.comboBox1.FormattingEnabled = true;
+ this.comboBox1.Items.AddRange(new object[] {
+ "Default",
+ "Environment Map",
+ "Glow Shader",
+ "Parallax",
+ "Face Tint",
+ "Skin Tint",
+ "Hair Tint",
+ "Parallax Occ",
+ "Multitexture Landscape",
+ "LOD Landscape",
+ "Snow",
+ "MultiLayer Parallax",
+ "Tree Anim",
+ "LOD Objects",
+ "Sparkle Snow",
+ "LOD Objects HD",
+ "Eye Envmap",
+ "Cloud",
+ "LOD Landscape Noise",
+ "Multitexture Landscape LOD Blend",
+ "FO4 Dismemberment",
+ "In All Shader Types"});
+ this.comboBox1.Location = new System.Drawing.Point(12, 12);
+ this.comboBox1.Name = "comboBox1";
+ this.comboBox1.Size = new System.Drawing.Size(193, 23);
+ this.comboBox1.TabIndex = 0;
+ this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
+ //
+ // numericUpDown4
+ //
+ this.numericUpDown4.DecimalPlaces = 6;
+ this.numericUpDown4.Enabled = false;
+ this.numericUpDown4.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.numericUpDown4.Increment = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 65536});
+ this.numericUpDown4.Location = new System.Drawing.Point(128, 100);
+ this.numericUpDown4.Maximum = new decimal(new int[] {
+ 10,
+ 0,
+ 0,
+ 0});
+ this.numericUpDown4.Name = "numericUpDown4";
+ this.numericUpDown4.Size = new System.Drawing.Size(77, 21);
+ this.numericUpDown4.TabIndex = 6;
+ this.numericUpDown4.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.numericUpDown4.ValueChanged += new System.EventHandler(this.numericUpDown4_ValueChanged);
+ //
+ // numericUpDown3
+ //
+ this.numericUpDown3.DecimalPlaces = 3;
+ this.numericUpDown3.Enabled = false;
+ this.numericUpDown3.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.numericUpDown3.Increment = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 65536});
+ this.numericUpDown3.Location = new System.Drawing.Point(60, 109);
+ this.numericUpDown3.Maximum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.numericUpDown3.Name = "numericUpDown3";
+ this.numericUpDown3.Size = new System.Drawing.Size(58, 21);
+ this.numericUpDown3.TabIndex = 5;
+ this.numericUpDown3.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.numericUpDown3.ValueChanged += new System.EventHandler(this.numericUpDown3_ValueChanged);
+ //
+ // numericUpDown2
+ //
+ this.numericUpDown2.DecimalPlaces = 3;
+ this.numericUpDown2.Enabled = false;
+ this.numericUpDown2.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.numericUpDown2.Increment = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 65536});
+ this.numericUpDown2.Location = new System.Drawing.Point(60, 89);
+ this.numericUpDown2.Maximum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.numericUpDown2.Name = "numericUpDown2";
+ this.numericUpDown2.Size = new System.Drawing.Size(58, 21);
+ this.numericUpDown2.TabIndex = 4;
+ this.numericUpDown2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.numericUpDown2.ValueChanged += new System.EventHandler(this.numericUpDown2_ValueChanged);
+ //
+ // numericUpDown1
+ //
+ this.numericUpDown1.DecimalPlaces = 3;
+ this.numericUpDown1.Enabled = false;
+ this.numericUpDown1.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.numericUpDown1.Increment = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 65536});
+ this.numericUpDown1.Location = new System.Drawing.Point(60, 69);
+ this.numericUpDown1.Maximum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.numericUpDown1.Name = "numericUpDown1";
+ this.numericUpDown1.Size = new System.Drawing.Size(58, 21);
+ this.numericUpDown1.TabIndex = 3;
+ this.numericUpDown1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.numericUpDown1.ValueChanged += new System.EventHandler(this.numericUpDown1_ValueChanged);
+ //
+ // label5
+ //
+ this.label5.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.label5.Location = new System.Drawing.Point(128, 72);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(77, 25);
+ this.label5.TabIndex = 0;
+ this.label5.Text = "Miltiple:";
+ this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label4
+ //
+ this.label4.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.label4.Location = new System.Drawing.Point(14, 108);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(40, 20);
+ this.label4.TabIndex = 0;
+ this.label4.Text = "B";
+ this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label3
+ //
+ this.label3.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.label3.Location = new System.Drawing.Point(14, 88);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(40, 20);
+ this.label3.TabIndex = 0;
+ this.label3.Text = "G";
+ this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label2
+ //
+ this.label2.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.label2.Location = new System.Drawing.Point(14, 68);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(40, 20);
+ this.label2.TabIndex = 0;
+ this.label2.Text = "R";
+ this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // checkBox2
+ //
+ this.checkBox2.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.checkBox2.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox2.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox2.Location = new System.Drawing.Point(136, 41);
+ this.checkBox2.Name = "checkBox2";
+ this.checkBox2.Size = new System.Drawing.Size(70, 25);
+ this.checkBox2.TabIndex = 2;
+ this.checkBox2.Text = "Miltiple";
+ this.checkBox2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged);
+ //
+ // checkBox1
+ //
+ this.checkBox1.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox1.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox1.Location = new System.Drawing.Point(12, 41);
+ this.checkBox1.Name = "checkBox1";
+ this.checkBox1.Size = new System.Drawing.Size(70, 25);
+ this.checkBox1.TabIndex = 1;
+ this.checkBox1.Text = "Color";
+ this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
+ //
+ // FormEC
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(217, 142);
+ this.Controls.Add(this.checkBox2);
+ this.Controls.Add(this.checkBox1);
+ this.Controls.Add(this.comboBox1);
+ this.Controls.Add(this.numericUpDown4);
+ this.Controls.Add(this.numericUpDown3);
+ this.Controls.Add(this.numericUpDown2);
+ this.Controls.Add(this.numericUpDown1);
+ this.Controls.Add(this.label5);
+ this.Controls.Add(this.label4);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.label2);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "FormEC";
+ this.ShowIcon = false;
+ this.ShowInTaskbar = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "EmissiveColor";
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown4)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown3)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/Nifscan/FormEC.cs b/Nifscan/FormEC.cs
new file mode 100644
index 0000000..d9a3656
--- /dev/null
+++ b/Nifscan/FormEC.cs
@@ -0,0 +1,66 @@
+using System;
+using System.Windows.Forms;
+
+namespace Nifscan
+{
+ public partial class FormEC : Form
+ {
+ public FormEC()
+ {
+ InitializeComponent();
+ comboBox1.SelectedIndex = FormMain.ecShaderType;
+ checkBox1.Checked = FormMain.ecColor;
+ checkBox2.Checked = FormMain.ecMultiple;
+ numericUpDown1.Value = (decimal)FormMain.ecR;
+ numericUpDown2.Value = (decimal)FormMain.ecG;
+ numericUpDown3.Value = (decimal)FormMain.ecB;
+ numericUpDown4.Value = (decimal)FormMain.ecM;
+ }
+
+ private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ FormMain.ecShaderType = comboBox1.SelectedIndex;
+ }
+
+ private void checkBox1_CheckedChanged(object sender, EventArgs e)
+ {
+ FormMain.ecColor = checkBox1.Checked;
+ numericUpDown1.Enabled = checkBox1.Checked;
+ numericUpDown2.Enabled = checkBox1.Checked;
+ numericUpDown3.Enabled = checkBox1.Checked;
+ changeButton();
+ }
+
+ private void checkBox2_CheckedChanged(object sender, EventArgs e)
+ {
+ FormMain.ecMultiple = checkBox2.Checked;
+ numericUpDown4.Enabled = checkBox2.Checked;
+ changeButton();
+ }
+
+ private void numericUpDown1_ValueChanged(object sender, EventArgs e)
+ {
+ FormMain.ecR = (float)numericUpDown1.Value;
+ }
+
+ private void numericUpDown2_ValueChanged(object sender, EventArgs e)
+ {
+ FormMain.ecG = (float)numericUpDown2.Value;
+ }
+
+ private void numericUpDown3_ValueChanged(object sender, EventArgs e)
+ {
+ FormMain.ecB = (float)numericUpDown3.Value;
+ }
+
+ private void numericUpDown4_ValueChanged(object sender, EventArgs e)
+ {
+ FormMain.ecM = (float)numericUpDown4.Value;
+ }
+
+ private void changeButton()
+ {
+ FormMain.formMain.buttonColorEC(checkBox1.Checked || checkBox2.Checked);
+ }
+ }
+}
diff --git a/Nifscan/FormEC.resx b/Nifscan/FormEC.resx
new file mode 100644
index 0000000..e8ae276
--- /dev/null
+++ b/Nifscan/FormEC.resx
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Nifscan/FormMain.Designer.cs b/Nifscan/FormMain.Designer.cs
new file mode 100644
index 0000000..ddcf918
--- /dev/null
+++ b/Nifscan/FormMain.Designer.cs
@@ -0,0 +1,475 @@
+namespace Nifscan
+{
+ partial class FormMain
+ {
+ private System.ComponentModel.IContainer components = null;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.Button button4;
+ private System.Windows.Forms.Button button5;
+ private System.Windows.Forms.Button button6;
+ private System.Windows.Forms.CheckBox checkBox10;
+ private System.Windows.Forms.CheckBox checkBox1;
+ private System.Windows.Forms.CheckBox checkBox2;
+ private System.Windows.Forms.CheckBox checkBox3;
+ private System.Windows.Forms.CheckBox checkBox4;
+ private System.Windows.Forms.CheckBox checkBox5;
+ private System.Windows.Forms.CheckBox checkBox6;
+ private System.Windows.Forms.CheckBox checkBox7;
+ private System.Windows.Forms.CheckBox checkBox8;
+ private System.Windows.Forms.CheckBox checkBox9;
+ private System.Windows.Forms.ComboBox comboBox1;
+ private System.Windows.Forms.ComboBox comboBox2;
+ private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1;
+ private System.Windows.Forms.Label label11;
+ private System.Windows.Forms.Label label12;
+ private System.Windows.Forms.Label label13;
+ private System.Windows.Forms.Label label14;
+ private System.Windows.Forms.Label label15;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.TextBox textBox2;
+ private System.Windows.Forms.TextBox textBox3;
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain));
+ this.button1 = new System.Windows.Forms.Button();
+ this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog();
+ this.checkBox1 = new System.Windows.Forms.CheckBox();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.textBox2 = new System.Windows.Forms.TextBox();
+ this.checkBox3 = new System.Windows.Forms.CheckBox();
+ this.checkBox5 = new System.Windows.Forms.CheckBox();
+ this.checkBox2 = new System.Windows.Forms.CheckBox();
+ this.checkBox4 = new System.Windows.Forms.CheckBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.label11 = new System.Windows.Forms.Label();
+ this.label12 = new System.Windows.Forms.Label();
+ this.button3 = new System.Windows.Forms.Button();
+ this.label13 = new System.Windows.Forms.Label();
+ this.label14 = new System.Windows.Forms.Label();
+ this.label15 = new System.Windows.Forms.Label();
+ this.button2 = new System.Windows.Forms.Button();
+ this.textBox3 = new System.Windows.Forms.TextBox();
+ this.button4 = new System.Windows.Forms.Button();
+ this.button5 = new System.Windows.Forms.Button();
+ this.checkBox6 = new System.Windows.Forms.CheckBox();
+ this.checkBox8 = new System.Windows.Forms.CheckBox();
+ this.checkBox7 = new System.Windows.Forms.CheckBox();
+ this.checkBox9 = new System.Windows.Forms.CheckBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.label3 = new System.Windows.Forms.Label();
+ this.comboBox1 = new System.Windows.Forms.ComboBox();
+ this.comboBox2 = new System.Windows.Forms.ComboBox();
+ this.checkBox10 = new System.Windows.Forms.CheckBox();
+ this.button6 = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // button1
+ //
+ this.button1.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.button1.Location = new System.Drawing.Point(300, 279);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(53, 35);
+ this.button1.TabIndex = 17;
+ this.button1.Text = "Path";
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // checkBox1
+ //
+ this.checkBox1.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox1.Location = new System.Drawing.Point(10, 8);
+ this.checkBox1.Name = "checkBox1";
+ this.checkBox1.Size = new System.Drawing.Size(115, 25);
+ this.checkBox1.TabIndex = 0;
+ this.checkBox1.Text = "Debug Info";
+ this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
+ //
+ // textBox1
+ //
+ this.textBox1.Enabled = false;
+ this.textBox1.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.textBox1.Location = new System.Drawing.Point(195, 125);
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(216, 22);
+ this.textBox1.TabIndex = 8;
+ //
+ // textBox2
+ //
+ this.textBox2.Enabled = false;
+ this.textBox2.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.textBox2.Location = new System.Drawing.Point(195, 154);
+ this.textBox2.Name = "textBox2";
+ this.textBox2.Size = new System.Drawing.Size(216, 22);
+ this.textBox2.TabIndex = 9;
+ //
+ // checkBox3
+ //
+ this.checkBox3.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox3.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox3.Location = new System.Drawing.Point(10, 48);
+ this.checkBox3.Name = "checkBox3";
+ this.checkBox3.Size = new System.Drawing.Size(115, 25);
+ this.checkBox3.TabIndex = 1;
+ this.checkBox3.Text = "Resort Blocks";
+ //
+ // checkBox5
+ //
+ this.checkBox5.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox5.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox5.Location = new System.Drawing.Point(10, 138);
+ this.checkBox5.Name = "checkBox5";
+ this.checkBox5.Size = new System.Drawing.Size(179, 25);
+ this.checkBox5.TabIndex = 7;
+ this.checkBox5.Text = "Replace collision material:";
+ this.checkBox5.CheckedChanged += new System.EventHandler(this.checkBox5_CheckedChanged);
+ //
+ // checkBox2
+ //
+ this.checkBox2.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.checkBox2.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox2.Location = new System.Drawing.Point(267, 8);
+ this.checkBox2.Name = "checkBox2";
+ this.checkBox2.Size = new System.Drawing.Size(145, 25);
+ this.checkBox2.TabIndex = 3;
+ this.checkBox2.Text = "Show Collision";
+ this.checkBox2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // checkBox4
+ //
+ this.checkBox4.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox4.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox4.Location = new System.Drawing.Point(174, 48);
+ this.checkBox4.Name = "checkBox4";
+ this.checkBox4.Size = new System.Drawing.Size(105, 25);
+ this.checkBox4.TabIndex = 2;
+ this.checkBox4.Text = "Use Fixes";
+ this.checkBox4.CheckedChanged += new System.EventHandler(this.checkBox4_CheckedChanged);
+ //
+ // label1
+ //
+ this.label1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+ this.label1.Location = new System.Drawing.Point(0, 181);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(422, 2);
+ this.label1.TabIndex = 0;
+ //
+ // label11
+ //
+ this.label11.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+ this.label11.Location = new System.Drawing.Point(0, 78);
+ this.label11.Name = "label11";
+ this.label11.Size = new System.Drawing.Size(422, 2);
+ this.label11.TabIndex = 0;
+ //
+ // label12
+ //
+ this.label12.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+ this.label12.Location = new System.Drawing.Point(0, 38);
+ this.label12.Name = "label12";
+ this.label12.Size = new System.Drawing.Size(422, 2);
+ this.label12.TabIndex = 0;
+ //
+ // button3
+ //
+ this.button3.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.button3.Location = new System.Drawing.Point(159, 84);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(103, 30);
+ this.button3.TabIndex = 5;
+ this.button3.Text = "Parallax";
+ this.button3.Click += new System.EventHandler(this.button3_Click);
+ //
+ // label13
+ //
+ this.label13.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+ this.label13.Location = new System.Drawing.Point(0, 118);
+ this.label13.Name = "label13";
+ this.label13.Size = new System.Drawing.Size(422, 2);
+ this.label13.TabIndex = 0;
+ //
+ // label14
+ //
+ this.label14.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.label14.Location = new System.Drawing.Point(7, 183);
+ this.label14.Name = "label14";
+ this.label14.Size = new System.Drawing.Size(149, 20);
+ this.label14.TabIndex = 0;
+ this.label14.Text = "Shader Flags 1:";
+ this.label14.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // label15
+ //
+ this.label15.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+ this.label15.Location = new System.Drawing.Point(0, 273);
+ this.label15.Name = "label15";
+ this.label15.Size = new System.Drawing.Size(422, 2);
+ this.label15.TabIndex = 0;
+ //
+ // button2
+ //
+ this.button2.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.button2.Location = new System.Drawing.Point(359, 279);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(53, 35);
+ this.button2.TabIndex = 18;
+ this.button2.Text = "Run";
+ this.button2.Click += new System.EventHandler(this.button2_Click);
+ //
+ // textBox3
+ //
+ this.textBox3.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.textBox3.Location = new System.Drawing.Point(10, 285);
+ this.textBox3.Name = "textBox3";
+ this.textBox3.ReadOnly = true;
+ this.textBox3.Size = new System.Drawing.Size(282, 22);
+ this.textBox3.TabIndex = 16;
+ //
+ // button4
+ //
+ this.button4.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.button4.Location = new System.Drawing.Point(9, 84);
+ this.button4.Name = "button4";
+ this.button4.Size = new System.Drawing.Size(125, 30);
+ this.button4.TabIndex = 4;
+ this.button4.Text = "Emissive Color";
+ this.button4.Click += new System.EventHandler(this.button4_Click);
+ //
+ // button5
+ //
+ this.button5.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.button5.Location = new System.Drawing.Point(287, 84);
+ this.button5.Name = "button5";
+ this.button5.Size = new System.Drawing.Size(125, 30);
+ this.button5.TabIndex = 6;
+ this.button5.Text = "Vertex Colors";
+ this.button5.Click += new System.EventHandler(this.button5_Click);
+ //
+ // checkBox6
+ //
+ this.checkBox6.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox6.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox6.Location = new System.Drawing.Point(10, 206);
+ this.checkBox6.Name = "checkBox6";
+ this.checkBox6.Size = new System.Drawing.Size(55, 20);
+ this.checkBox6.TabIndex = 10;
+ this.checkBox6.Text = "Add";
+ this.checkBox6.CheckedChanged += new System.EventHandler(this.checkBox6_CheckedChanged);
+ //
+ // checkBox8
+ //
+ this.checkBox8.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox8.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox8.Location = new System.Drawing.Point(10, 252);
+ this.checkBox8.Name = "checkBox8";
+ this.checkBox8.Size = new System.Drawing.Size(55, 20);
+ this.checkBox8.TabIndex = 13;
+ this.checkBox8.Text = "Add";
+ this.checkBox8.CheckedChanged += new System.EventHandler(this.checkBox8_CheckedChanged);
+ //
+ // checkBox7
+ //
+ this.checkBox7.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox7.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox7.Location = new System.Drawing.Point(71, 206);
+ this.checkBox7.Name = "checkBox7";
+ this.checkBox7.Size = new System.Drawing.Size(80, 20);
+ this.checkBox7.TabIndex = 11;
+ this.checkBox7.Text = "Remove";
+ this.checkBox7.CheckedChanged += new System.EventHandler(this.checkBox7_CheckedChanged);
+ //
+ // checkBox9
+ //
+ this.checkBox9.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox9.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox9.Location = new System.Drawing.Point(71, 252);
+ this.checkBox9.Name = "checkBox9";
+ this.checkBox9.Size = new System.Drawing.Size(80, 20);
+ this.checkBox9.TabIndex = 14;
+ this.checkBox9.Text = "Remove";
+ this.checkBox9.CheckedChanged += new System.EventHandler(this.checkBox9_CheckedChanged);
+ //
+ // label2
+ //
+ this.label2.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.label2.Location = new System.Drawing.Point(7, 229);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(149, 20);
+ this.label2.TabIndex = 0;
+ this.label2.Text = "Shader Flags 2:";
+ this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // label3
+ //
+ this.label3.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+ this.label3.Location = new System.Drawing.Point(0, 227);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(422, 2);
+ this.label3.TabIndex = 0;
+ //
+ // comboBox1
+ //
+ this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.comboBox1.FormattingEnabled = true;
+ this.comboBox1.Items.AddRange(new object[] {
+ "Specular",
+ "Skinned",
+ "Temp_Refraction",
+ "Vertex_Alpha",
+ "Greyscale_To_PaletteColor",
+ "Greyscale_To_PaletteAlpha",
+ "Use_Falloff",
+ "Environment_Mapping",
+ "Recieve_Shadows",
+ "Cast_Shadows",
+ "Facegen_Detail_Map",
+ "Parallax",
+ "Model_Space_Normals",
+ "Non_Projective_Shadows",
+ "Landscape",
+ "Refraction",
+ "Fire_Refraction",
+ "Eye_Environment_Mapping",
+ "Hair_Soft_Lighting",
+ "Screendoor_Alpha_Fade",
+ "Localmap_Hide_Secret",
+ "FaceGen_RGB_Tint",
+ "Own_Emit",
+ "Projected_UV",
+ "Multiple_Textures",
+ "Remappable_Textures",
+ "Decal",
+ "Dynamic_Decal",
+ "Parallax_Occlusion",
+ "External_Emittance",
+ "Soft_Effect",
+ "ZBuffer_Test"});
+ this.comboBox1.Location = new System.Drawing.Point(157, 194);
+ this.comboBox1.Name = "comboBox1";
+ this.comboBox1.Size = new System.Drawing.Size(254, 21);
+ this.comboBox1.TabIndex = 12;
+ //
+ // comboBox2
+ //
+ this.comboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.comboBox2.FormattingEnabled = true;
+ this.comboBox2.Items.AddRange(new object[] {
+ "ZBuffer_Write",
+ "LOD_Landscape",
+ "LOD_Objects",
+ "No_Fade",
+ "Double_Sided",
+ "Vertex_Colors",
+ "Glow_Map",
+ "Assume_Shadowmask",
+ "Packed_Tangent",
+ "Multi_Index_Snow",
+ "Vertex_Lighting",
+ "Uniform_Scale",
+ "Fit_Slope",
+ "Billboard",
+ "No_LOD_Land_Blend",
+ "EnvMap_Light_Fade",
+ "Wireframe",
+ "Weapon_Blood",
+ "Hide_On_Local_Map",
+ "Premult_Alpha",
+ "Cloud_LOD",
+ "Anisotropic_Lighting",
+ "No_Transparency_Multisampling",
+ "Unused01",
+ "Multi_Layer_Parallax",
+ "Soft_Lighting",
+ "Rim_Lighting",
+ "Back_Lighting",
+ "Unused02",
+ "Tree_Anim",
+ "Effect_Lighting",
+ "HD_LOD_Objects"});
+ this.comboBox2.Location = new System.Drawing.Point(157, 240);
+ this.comboBox2.Name = "comboBox2";
+ this.comboBox2.Size = new System.Drawing.Size(254, 21);
+ this.comboBox2.TabIndex = 15;
+ //
+ // checkBox10
+ //
+ this.checkBox10.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.checkBox10.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox10.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox10.Location = new System.Drawing.Point(267, 48);
+ this.checkBox10.Name = "checkBox10";
+ this.checkBox10.Size = new System.Drawing.Size(145, 25);
+ this.checkBox10.TabIndex = 3;
+ this.checkBox10.Text = "Skin Color";
+ this.checkBox10.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // button6
+ //
+ this.button6.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.button6.Location = new System.Drawing.Point(159, 4);
+ this.button6.Name = "button6";
+ this.button6.Size = new System.Drawing.Size(103, 30);
+ this.button6.TabIndex = 5;
+ this.button6.Text = "X Y Z";
+ this.button6.Click += new System.EventHandler(this.button6_Click);
+ //
+ // FormMain
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(421, 318);
+ this.Controls.Add(this.comboBox2);
+ this.Controls.Add(this.comboBox1);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.label15);
+ this.Controls.Add(this.label13);
+ this.Controls.Add(this.button5);
+ this.Controls.Add(this.button4);
+ this.Controls.Add(this.button6);
+ this.Controls.Add(this.button3);
+ this.Controls.Add(this.label12);
+ this.Controls.Add(this.label11);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.textBox2);
+ this.Controls.Add(this.textBox3);
+ this.Controls.Add(this.textBox1);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.label14);
+ this.Controls.Add(this.checkBox4);
+ this.Controls.Add(this.checkBox3);
+ this.Controls.Add(this.checkBox5);
+ this.Controls.Add(this.checkBox10);
+ this.Controls.Add(this.checkBox2);
+ this.Controls.Add(this.checkBox8);
+ this.Controls.Add(this.checkBox9);
+ this.Controls.Add(this.checkBox7);
+ this.Controls.Add(this.checkBox6);
+ this.Controls.Add(this.checkBox1);
+ this.Controls.Add(this.button2);
+ this.Controls.Add(this.button1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.Name = "FormMain";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Nifscan";
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+ }
+}
+
diff --git a/Nifscan/FormMain.cs b/Nifscan/FormMain.cs
new file mode 100644
index 0000000..546ed48
--- /dev/null
+++ b/Nifscan/FormMain.cs
@@ -0,0 +1,2078 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Nifscan
+{
+ public partial class FormMain : Form
+ {
+ public static List texturesList = new List();
+ public static bool fixesOn = false;
+ public static bool parallaxInvert = false;
+ public static bool parallaxCompare = false;
+ public static bool parallaxRemove = false;
+ public static bool parallaxAdd = false;
+ public static int ecShaderType = 21;
+ public static bool ecColor = false;
+ public static bool ecMultiple = false;
+ public static float ecR = 0;
+ public static float ecG = 0;
+ public static float ecB = 0;
+ public static float ecM = 0;
+ public static bool vcColor = false;
+ public static bool vcAlpha = false;
+ public static bool vcRemove = false;
+ public static float vcR = 0;
+ public static float vcG = 0;
+ public static float vcB = 0;
+ public static float vcA = 0;
+ public static bool verX = false;
+ public static bool verY = false;
+ public static bool verZ = false;
+ public static bool verXHard = false;
+ public static bool verYHard = false;
+ public static bool verZHard = false;
+ public static double verXval = 0;
+ public static double verYval = 0;
+ public static double verZval = 0;
+ public static bool verTrim = false;
+ public static int verTrimNum = 3;
+ internal static FormMain formMain = null;
+ List outLog = new List();
+ List blocksSizeList = new List();
+ List blocksStartList = new List();
+ List sizeIndex = new List();
+ byte[] bytesFile = null;
+ string tempPath = null;
+ string fileName = null;
+ bool fileChanged = false;
+ bool debugMode = false;
+ int blocksCount = 0;
+ int totalFiles = 0;
+ int successFiles = 0;
+ [Flags]
+ enum ShadeFlags1 : long
+ {
+ SLSF1_Specular = 1,
+ SLSF1_Skinned = 1 << 1,
+ SLSF1_Temp_Refraction = 1 << 2,
+ SLSF1_Vertex_Alpha = 1 << 3,
+ SLSF1_Greyscale_To_PaletteColor = 1 << 4,
+ SLSF1_Greyscale_To_PaletteAlpha = 1 << 5,
+ SLSF1_Use_Falloff = 1 << 6,
+ SLSF1_Environment_Mapping = 1 << 7,
+ SLSF1_Recieve_Shadows = 1 << 8,
+ SLSF1_Cast_Shadows = 1 << 9,
+ SLSF1_Facegen_Detail_Map = 1 << 10,
+ SLSF1_Parallax = 1 << 11,
+ SLSF1_Model_Space_Normals = 1 << 12,
+ SLSF1_Non_Projective_Shadows = 1 << 13,
+ SLSF1_Landscape = 1 << 14,
+ SLSF1_Refraction = 1 << 15,
+ SLSF1_Fire_Refraction = 1 << 16,
+ SLSF1_Eye_Environment_Mapping = 1 << 17,
+ SLSF1_Hair_Soft_Lighting = 1 << 18,
+ SLSF1_Screendoor_Alpha_Fade = 1 << 19,
+ SLSF1_Localmap_Hide_Secret = 1 << 20,
+ SLSF1_FaceGen_RGB_Tint = 1 << 21,
+ SLSF1_Own_Emit = 1 << 22,
+ SLSF1_Projected_UV = 1 << 23,
+ SLSF1_Multiple_Textures = 1 << 24,
+ SLSF1_Remappable_Textures = 1 << 25,
+ SLSF1_Decal = 1 << 26,
+ SLSF1_Dynamic_Decal = 1 << 27,
+ SLSF1_Parallax_Occlusion = 1 << 28,
+ SLSF1_External_Emittance = 1 << 29,
+ SLSF1_Soft_Effect = 1 << 30,
+ SLSF1_ZBuffer_Test = (long)(1 << 31)
+ };
+ [Flags]
+ enum ShadeFlags2 : long
+ {
+ SLSF2_ZBuffer_Write = 1,
+ SLSF2_LOD_Landscape = 1 << 1,
+ SLSF2_LOD_Objects = 1 << 2,
+ SLSF2_No_Fade = 1 << 3,
+ SLSF2_Double_Sided = 1 << 4,
+ SLSF2_Vertex_Colors = 1 << 5,
+ SLSF2_Glow_Map = 1 << 6,
+ SLSF2_Assume_Shadowmask = 1 << 7,
+ SLSF2_Packed_Tangent = 1 << 8,
+ SLSF2_Multi_Index_Snow = 1 << 9,
+ SLSF2_Vertex_Lighting = 1 << 10,
+ SLSF2_Uniform_Scale = 1 << 11,
+ SLSF2_Fit_Slope = 1 << 12,
+ SLSF2_Billboard = 1 << 13,
+ SLSF2_No_LOD_Land_Blend = 1 << 14,
+ SLSF2_EnvMap_Light_Fade = 1 << 15,
+ SLSF2_Wireframe = 1 << 16,
+ SLSF2_Weapon_Blood = 1 << 17,
+ SLSF2_Hide_On_Local_Map = 1 << 18,
+ SLSF2_Premult_Alpha = 1 << 19,
+ SLSF2_Cloud_LOD = 1 << 20,
+ SLSF2_Anisotropic_Lighting = 1 << 21,
+ SLSF2_No_Transparency_Multisampling = 1 << 22,
+ SLSF2_Unused01 = 1 << 23,
+ SLSF2_Multi_Layer_Parallax = 1 << 24,
+ SLSF2_Soft_Lighting = 1 << 25,
+ SLSF2_Rim_Lighting = 1 << 26,
+ SLSF2_Back_Lighting = 1 << 27,
+ SLSF2_Unused02 = 1 << 28,
+ SLSF2_Tree_Anim = 1 << 29,
+ SLSF2_Effect_Lighting = 1 << 30,
+ SLSF2_HD_LOD_Objects = (long)(1 << 31)
+ }
+ [Flags]
+ enum VectorFlags : uint
+ {
+ Has_UV = 1,
+ Unk2 = 1 << 1,
+ Unk4 = 1 << 2,
+ Unk8 = 1 << 3,
+ Unk16 = 1 << 4,
+ Unk32 = 1 << 5,
+ Unk64 = 1 << 6,
+ Unk128 = 1 << 7,
+ Unk256 = 1 << 8,
+ Unk512 = 1 << 9,
+ Unk1024 = 1 << 10,
+ Unk2048 = 1 << 11,
+ Has_Tangents = 1 << 12,
+ Unk8192 = 1 << 13,
+ Unk16384 = 1 << 14,
+ Unk32768 = 1 << 15
+ }
+
+ public FormMain()
+ {
+ InitializeComponent();
+ formMain = this;
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ if (tempPath == null)
+ {
+ folderBrowserDialog1.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
+ }
+ else
+ {
+ folderBrowserDialog1.SelectedPath = tempPath;
+ }
+ DialogResult result = folderBrowserDialog1.ShowDialog();
+ if (result == DialogResult.OK)
+ {
+ tempPath = folderBrowserDialog1.SelectedPath;
+ textBox3.Text = tempPath;
+ }
+ }
+
+ private void button2_Click(object sender, System.EventArgs e)
+ {
+ if (Directory.Exists(tempPath))
+ {
+ button2.Enabled = false;
+ foreach (string line in Directory.EnumerateFiles(tempPath, "*.nif", SearchOption.AllDirectories))
+ {
+ currentFile(line);
+ totalFiles++;
+ blocksSizeList.Clear();
+ blocksStartList.Clear();
+ sizeIndex.Clear();
+ blocksCount = 0;
+ bytesFile = null;
+ fileName = null;
+ fileChanged = false;
+ }
+ outLog.Insert(0, "TOTAL FOUND " + totalFiles.ToString() + " FILES, " + "SUCCESS PROCESSING " + successFiles.ToString() + " FILES");
+ File.WriteAllLines(AppDomain.CurrentDomain.BaseDirectory + "NifScan.log", outLog, new UTF8Encoding(false));
+ outLog.Clear();
+ totalFiles = 0;
+ successFiles = 0;
+ button2.Enabled = true;
+ }
+ }
+
+ private void currentFile(string path)
+ {
+ if (File.Exists(path))
+ {
+ List blocksTypesList = new List();
+ List blocksNamesList = new List();
+ List stringsList = new List();
+ List groupsList = new List();
+ outLog.Add("");
+ outLog.Add("PROCESS FILE: " + path);
+ fileName = Path.GetFileName(path);
+ int fileSize = (int)new FileInfo(path).Length;
+ if (fileSize < 200)
+ {
+ outLog.Add("WARNING! FILE TO SMALL: " + fileName);
+ return;
+ }
+ bytesFile = new byte[fileSize];
+ FileStream fs = File.OpenRead(path);
+ fs.Read(bytesFile, 0, fileSize);
+ fs.Close();
+ string headerError = null;
+ bool exportInfo = false;
+ bool blocksType = false;
+ bool blocksListFull = false;
+ bool blocksCountFull = false;
+ bool blocksSizeFull = false;
+ bool stringsCount = false;
+ bool maxStringLength = false;
+ bool stringsFull = false;
+ bool groupsCount = false;
+ bool groupsFull = false;
+ int exportInfoLines = 0;
+ int blocksTypeCount = 0;
+ int maxLengthString = 0;
+ int numGroups = 0;
+ int numStrings = 0;
+ int blockStart = 0;
+ if (bytesFile[39] != 7 || bytesFile[41] != 2 || bytesFile[42] != 20 || bytesFile[44] != 12 || (bytesFile[52] != 83 && bytesFile[52] != 32))
+ {
+ outLog.Add("WARNING! FILE VERSION UNSUPPORTED: " + fileName);
+ return;
+ }
+ try
+ {
+ blocksCount = (int)BitConverter.ToUInt32(bytesFile, 48);
+ if (blocksCount < 1)
+ {
+ outLog.Add("WARNING! FILE NOT HAVE BLOCKS OR FILE ERROR");
+ return;
+ }
+ for (int i = 56; i < bytesFile.Length; i++)
+ {
+ if (!exportInfo)
+ {
+ i += bytesFile[i];
+ exportInfoLines++;
+ if (exportInfoLines == 3)
+ {
+ exportInfo = true;
+ }
+ }
+ else if (!blocksType && exportInfo)
+ {
+ blocksTypeCount = BitConverter.ToUInt16(bytesFile, i);
+ i++;
+ blocksType = true;
+ }
+ else if (!blocksListFull && blocksType)
+ {
+ int length = (int)BitConverter.ToUInt32(bytesFile, i);
+ i += 3;
+ string word = null;
+ while (length != 0)
+ {
+ i++;
+ word += Convert.ToChar(bytesFile[i]).ToString();
+ length--;
+ }
+ blocksTypesList.Add(word);
+ if (blocksTypeCount == blocksTypesList.Count)
+ {
+ blocksListFull = true;
+ }
+ }
+ else if (!blocksCountFull && blocksListFull)
+ {
+ blocksNamesList.Add(blocksTypesList[(BitConverter.ToUInt16(bytesFile, i))]);
+ i++;
+ if (blocksCount == blocksNamesList.Count)
+ {
+ blocksCountFull = true;
+ }
+ }
+ else if (!blocksSizeFull && blocksCountFull)
+ {
+ int size = (int)BitConverter.ToUInt32(bytesFile, i);
+ sizeIndex.Add(i);
+ i += 3;
+ blocksSizeList.Add(size);
+ blocksStartList.Add(blockStart);
+ blockStart += size;
+ if (blocksCount == blocksSizeList.Count)
+ {
+ blocksSizeFull = true;
+ }
+ }
+ else if (!stringsCount && blocksSizeFull)
+ {
+ numStrings = (int)BitConverter.ToUInt32(bytesFile, i);
+ i += 3;
+ stringsCount = true;
+ }
+ else if (!maxStringLength && stringsCount)
+ {
+ maxLengthString = (int)BitConverter.ToUInt32(bytesFile, i);
+ i += 3;
+ maxStringLength = true;
+ }
+ else if (!stringsFull && maxStringLength)
+ {
+ int length = (int)BitConverter.ToUInt32(bytesFile, i);
+ i += 3;
+ string word = null;
+ while (length != 0)
+ {
+ i++;
+ word += Convert.ToChar(bytesFile[i]).ToString();
+ length--;
+ }
+ stringsList.Add(word);
+ if (numStrings == stringsList.Count)
+ {
+ stringsFull = true;
+ }
+ }
+ else if (!groupsCount && stringsFull)
+ {
+ numGroups = (int)BitConverter.ToUInt32(bytesFile, i);
+ i += 3;
+ groupsCount = true;
+ if (numGroups == 0)
+ {
+ groupsFull = true;
+ }
+ }
+ else if (!groupsFull && groupsCount)
+ {
+ groupsList.Add(BitConverter.ToUInt32(bytesFile, i));
+ i += 3;
+ if (numGroups == groupsList.Count)
+ {
+ groupsFull = true;
+ }
+ }
+ else if (groupsFull)
+ {
+ for (int j = 0; j < blocksStartList.Count; j++)
+ {
+ blocksStartList[j] = blocksStartList[j] + i;
+ }
+ if (debugMode)
+ {
+ outLog.Add("blocksTypeCount " + blocksTypeCount);
+ outLog.Add("blocksCount " + blocksCount);
+ outLog.Add("maxLengthString " + maxLengthString);
+ outLog.Add("numStrings " + numStrings);
+ outLog.Add("numGroups " + numGroups);
+ outLog.Add("");
+ outLog.Add("BLOCKS TYPE:");
+ outLog.AddRange(blocksTypesList);
+ outLog.Add("");
+ outLog.Add("BLOCKS LIST:");
+ for (int l = 0; l < blocksNamesList.Count; l++)
+ {
+ outLog.Add(blocksNamesList[l] + " START: " + blocksStartList[l].ToString() + " SIZE: " + blocksSizeList[l]);
+
+ }
+ outLog.Add("");
+ outLog.Add("STRINGS LIST:");
+ outLog.AddRange(stringsList);
+ outLog.Add("");
+ outLog.Add("GROUP LIST:");
+ if (numGroups != 0)
+ {
+ for (int l = 0; l < groupsList.Count; l++)
+ {
+ outLog.Add(groupsList[l].ToString());
+ }
+ }
+ outLog.Add("");
+ }
+ break;
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ headerError = e.Message;
+ }
+ if (headerError == null)
+ {
+ if (blocksNamesList.Contains("NiTriStrips"))
+ {
+ outLog.Add("WARNING! MESH HAVE NITRISTRIPS: " + fileName);
+ }
+ for (int i = 0; i < blocksNamesList.Count; i++)
+ {
+ int realBlockStart = blocksStartList[i];
+ if (blocksNamesList[i] == "BSXFlags")
+ {
+ int flag = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ outLog.Add("Have BSXFlags: " + flag.ToString() + " " + fileName);
+ }
+ else if (blocksNamesList[i] == "NiNode" || blocksNamesList[i] == "AvoidNode" || blocksNamesList[i] == "BSFadeNode" || blocksNamesList[i] == "BSLeafAnimNode" || blocksNamesList[i] == "RootCollisionNode" || blocksNamesList[i] == "NiBSAnimationNode" || blocksNamesList[i] == "NiBSParticleNode" || blocksNamesList[i] == "NiBone")
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ extraCheck(realBlockStart + 8, extra, i, blocksNamesList[i]);
+ int jump = realBlockStart + 72 + (extra * 4);
+ int childs = (int)BitConverter.ToUInt32(bytesFile, jump);
+ int jump2 = jump + 4 + (childs * 4);
+ int jump3 = jump2 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump2) * 4);
+ sortBlocks(realBlockStart, jump, childs, realBlockStart + blocksSizeList[i], jump3, i, blocksNamesList[i]);
+ }
+ else if (blocksNamesList[i] == "BSBlastNode" || blocksNamesList[i] == "BSDamageStage" || blocksNamesList[i] == "BSDebrisNode" || blocksNamesList[i] == "BSRangeNode")
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ extraCheck(realBlockStart + 8, extra, i, blocksNamesList[i]);
+ int jump = realBlockStart + 72 + (extra * 4);
+ int childs = (int)BitConverter.ToUInt32(bytesFile, jump);
+ int jump2 = jump + 4 + (childs * 4);
+ int jump3 = jump2 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump2) * 4) + 3;
+ sortBlocks(realBlockStart, jump, childs, realBlockStart + blocksSizeList[i], jump3, i, blocksNamesList[i]);
+ }
+ else if (blocksNamesList[i] == "BSMasterParticleSystem")
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ extraCheck(realBlockStart + 8, extra, i, blocksNamesList[i]);
+ int jump = realBlockStart + 72 + (extra * 4);
+ int childs = (int)BitConverter.ToUInt32(bytesFile, jump);
+ int jump2 = jump + 4 + (childs * 4);
+ int jump3 = jump2 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump2) * 4) + 2;
+ int jump4 = jump3 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump3) * 4);
+ sortBlocks(realBlockStart, jump, childs, realBlockStart + blocksSizeList[i], jump4, i, blocksNamesList[i]);
+ }
+ else if (blocksNamesList[i] == "BSMultiBoundNode")
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ extraCheck(realBlockStart + 8, extra, i, blocksNamesList[i]);
+ int jump = realBlockStart + 72 + (extra * 4);
+ int childs = (int)BitConverter.ToUInt32(bytesFile, jump);
+ int jump2 = jump + 4 + (childs * 4);
+ int jump3 = jump2 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump2) * 4) + 8;
+ sortBlocks(realBlockStart, jump, childs, realBlockStart + blocksSizeList[i], jump3, i, blocksNamesList[i]);
+ }
+ else if (blocksNamesList[i] == "BSOrderedNode")
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ extraCheck(realBlockStart + 8, extra, i, blocksNamesList[i]);
+ int jump = realBlockStart + 72 + (extra * 4);
+ int childs = (int)BitConverter.ToUInt32(bytesFile, jump);
+ int jump2 = jump + 4 + (childs * 4);
+ int jump3 = jump2 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump2) * 4) + 17;
+ sortBlocks(realBlockStart, jump, childs, realBlockStart + blocksSizeList[i], jump3, i, blocksNamesList[i]);
+ }
+ else if (blocksNamesList[i] == "BSTreeNode")
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ extraCheck(realBlockStart + 8, extra, i, blocksNamesList[i]);
+ int jump = realBlockStart + 72 + (extra * 4);
+ int childs = (int)BitConverter.ToUInt32(bytesFile, jump);
+ int jump2 = jump + 4 + (childs * 4);
+ int jump3 = jump2 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump2) * 4);
+ int jump4 = jump3 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump3) * 4);
+ int jump5 = jump4 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump4) * 4);
+ sortBlocks(realBlockStart, jump, childs, realBlockStart + blocksSizeList[i], jump5, i, blocksNamesList[i]);
+ }
+ else if (blocksNamesList[i] == "BSValueNode")
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ extraCheck(realBlockStart + 8, extra, i, blocksNamesList[i]);
+ int jump = realBlockStart + 72 + (extra * 4);
+ int childs = (int)BitConverter.ToUInt32(bytesFile, jump);
+ int jump2 = jump + 4 + (childs * 4);
+ int jump3 = jump2 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump2) * 4) + 5;
+ sortBlocks(realBlockStart, jump, childs, realBlockStart + blocksSizeList[i], jump3, i, blocksNamesList[i]);
+ }
+ else if (blocksNamesList[i] == "FxButton" || blocksNamesList[i] == "FxWidget")
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ extraCheck(realBlockStart + 8, extra, i, blocksNamesList[i]);
+ int jump = realBlockStart + 72 + (extra * 4);
+ int childs = (int)BitConverter.ToUInt32(bytesFile, jump);
+ int jump2 = jump + 4 + (childs * 4);
+ int jump3 = jump2 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump2) * 4) + 293;
+ sortBlocks(realBlockStart, jump, childs, realBlockStart + blocksSizeList[i], jump3, i, blocksNamesList[i]);
+ }
+ else if (blocksNamesList[i] == "FxRadioButton")
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ extraCheck(realBlockStart + 8, extra, i, blocksNamesList[i]);
+ int jump = realBlockStart + 72 + (extra * 4);
+ int childs = (int)BitConverter.ToUInt32(bytesFile, jump);
+ int jump2 = jump + 4 + (childs * 4);
+ int jump3 = jump2 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump2) * 4) + 305;
+ int jump4 = jump3 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump3) * 4);
+ sortBlocks(realBlockStart, jump, childs, realBlockStart + blocksSizeList[i], jump4, i, blocksNamesList[i]);
+ }
+ else if (blocksNamesList[i] == "NiBillboardNode")
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ extraCheck(realBlockStart + 8, extra, i, blocksNamesList[i]);
+ int jump = realBlockStart + 72 + (extra * 4);
+ int childs = (int)BitConverter.ToUInt32(bytesFile, jump);
+ int jump2 = jump + 4 + (childs * 4);
+ int jump3 = jump2 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump2) * 4) + 2;
+ sortBlocks(realBlockStart, jump, childs, realBlockStart + blocksSizeList[i], jump3, i, blocksNamesList[i]);
+ }
+ else if (blocksNamesList[i] == "NiLODNode")
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ extraCheck(realBlockStart + 8, extra, i, blocksNamesList[i]);
+ int jump = realBlockStart + 72 + (extra * 4);
+ int childs = (int)BitConverter.ToUInt32(bytesFile, jump);
+ int jump2 = jump + 4 + (childs * 4);
+ int jump3 = jump2 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump2) * 4) + 10;
+ sortBlocks(realBlockStart, jump, childs, realBlockStart + blocksSizeList[i], jump3, i, blocksNamesList[i]);
+ }
+ else if (blocksNamesList[i] == "NiRoom")
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ extraCheck(realBlockStart + 8, extra, i, blocksNamesList[i]);
+ int jump = realBlockStart + 72 + (extra * 4);
+ int childs = (int)BitConverter.ToUInt32(bytesFile, jump);
+ int jump2 = jump + 4 + (childs * 4);
+ int jump3 = jump2 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump2) * 4);
+ int jump4 = jump3 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump3) * 16);
+ int jump5 = jump4 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump4) * 4);
+ int jump6 = jump5 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump5) * 4);
+ int jump7 = jump6 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump6) * 4);
+ sortBlocks(realBlockStart, jump, childs, realBlockStart + blocksSizeList[i], jump7, i, blocksNamesList[i]);
+ }
+ else if (blocksNamesList[i] == "NiRoomGroup")
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ extraCheck(realBlockStart + 8, extra, i, blocksNamesList[i]);
+ int jump = realBlockStart + 72 + (extra * 4);
+ int childs = (int)BitConverter.ToUInt32(bytesFile, jump);
+ int jump2 = jump + 4 + (childs * 4);
+ int jump3 = jump2 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump2) * 4) + 4;
+ int jump4 = jump3 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump3) * 4);
+ sortBlocks(realBlockStart, jump, childs, realBlockStart + blocksSizeList[i], jump4, i, blocksNamesList[i]);
+ }
+ else if (blocksNamesList[i] == "NiSortAdjustNode")
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ extraCheck(realBlockStart + 8, extra, i, blocksNamesList[i]);
+ int jump = realBlockStart + 72 + (extra * 4);
+ int childs = (int)BitConverter.ToUInt32(bytesFile, jump);
+ int jump2 = jump + 4 + (childs * 4);
+ int jump3 = jump2 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump2) * 4) + 4;
+ sortBlocks(realBlockStart, jump, childs, realBlockStart + blocksSizeList[i], jump3, i, blocksNamesList[i]);
+ }
+ else if (blocksNamesList[i] == "NiSwitchNode")
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ extraCheck(realBlockStart + 8, extra, i, blocksNamesList[i]);
+ int jump = realBlockStart + 72 + (extra * 4);
+ int childs = (int)BitConverter.ToUInt32(bytesFile, jump);
+ int jump2 = jump + 4 + (childs * 4);
+ int jump3 = jump2 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump2) * 4) + 6;
+ sortBlocks(realBlockStart, jump, childs, realBlockStart + blocksSizeList[i], jump3, i, blocksNamesList[i]);
+ }
+ else if (blocksNamesList[i].StartsWith("bhk"))
+ {
+ if (blocksNamesList[i] == "bhkRigidBody" || blocksNamesList[i] == "bhkRigidBodyT")
+ {
+ if (bytesFile[realBlockStart + 4] != bytesFile[realBlockStart + 36])
+ {
+ outLog.Add("WARNING! COLLISION LAYERS NOT MATCH: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ if (BitConverter.ToSingle(bytesFile, realBlockStart + 192) != 1 || BitConverter.ToSingle(bytesFile, realBlockStart + 196) != 1)
+ {
+ outLog.Add("WARNING! COLLISION FACTORS NOT EQUAL ONE: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ }
+ if (blocksNamesList[i] == "bhkConvexVerticesShape")
+ {
+ int jump = realBlockStart + 32;
+ int vertices = (int)BitConverter.ToUInt32(bytesFile, jump);
+ int jump2 = jump + 4 + (vertices * 16);
+ int normals = (int)BitConverter.ToUInt32(bytesFile, jump2);
+ bool zero = true;
+ jump2 += 4;
+ for (int j = 0; j < normals; j++)
+ {
+ float n1 = BitConverter.ToSingle(bytesFile, jump2);
+ jump2 += 4;
+ float n2 = BitConverter.ToSingle(bytesFile, jump2);
+ jump2 += 4;
+ float n3 = BitConverter.ToSingle(bytesFile, jump2);
+ jump2 += 8;
+ if (n1 != 0 || n2 != 0 || n3 != 0)
+ {
+ zero = false;
+ break;
+ }
+ }
+ if (zero)
+ {
+ outLog.Add("WARNING! ALL COLLISION NORMALS EQUAL ZERO: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ }
+ if (checkBox2.Checked || checkBox5.Checked)
+ {
+ if (blocksNamesList[i] == "bhkBoxShape" || blocksNamesList[i] == "bhkNiTriStripsShape" || blocksNamesList[i] == "bhkSphereShape" || blocksNamesList[i] == "bhkConvexVerticesShape" || blocksNamesList[i] == "bhkCapsuleShape")
+ {
+ checkCollisions(realBlockStart, BitConverter.ToUInt32(bytesFile, realBlockStart));
+ }
+ else if (blocksNamesList[i] == "bhkConvexTransformShape" || blocksNamesList[i] == "bhkConvexSweepShape" || blocksNamesList[i] == "bhkTransformShape")
+ {
+ checkCollisions(realBlockStart + 4, BitConverter.ToUInt32(bytesFile, realBlockStart + 4));
+ }
+ else if (blocksNamesList[i] == "bhkListShape" || blocksNamesList[i] == "bhkConvexListShape")
+ {
+ int jump = realBlockStart + 4 + ((int)BitConverter.ToUInt32(bytesFile, realBlockStart) * 4);
+ checkCollisions(jump, BitConverter.ToUInt32(bytesFile, jump));
+ }
+ else if (blocksNamesList[i] == "bhkCompressedMeshShapeData")
+ {
+ int jump1 = realBlockStart + 58 + ((int)BitConverter.ToUInt32(bytesFile, realBlockStart + 54) * 4);
+ int jump2 = jump1 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump1) * 4);
+ int jump3 = jump2 + 4 + ((int)BitConverter.ToUInt32(bytesFile, jump2) * 4);
+ int count = bytesFile[jump3];
+ jump3 += 4;
+ for (int j = 0; j < count; j++)
+ {
+ checkCollisions(jump3, BitConverter.ToUInt32(bytesFile, jump3));
+ jump3 += 8;
+ }
+ }
+ }
+ }
+ else if (blocksNamesList[i] == "NiTriShape" || blocksNamesList[i] == "BSLODTriShape")
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, realBlockStart + 4);
+ extraCheck(realBlockStart + 8, extra, i, blocksNamesList[i]);
+ int jump = realBlockStart + 72 + (extra * 4);
+ int dataBlock = (int)BitConverter.ToUInt32(bytesFile, jump);
+ jump += 4;
+ int skinBlock = (int)BitConverter.ToUInt32(bytesFile, jump);
+ jump += 4;
+ int jump2 = jump + 9 + ((int)BitConverter.ToUInt32(bytesFile, jump) * 8);
+ int shaderBlock = (int)BitConverter.ToUInt32(bytesFile, jump2);
+ int alphaBlock = (int)BitConverter.ToUInt32(bytesFile, jump2 + 4);
+ int lods = 0;
+ if (blocksNamesList[i] == "BSLODTriShape")
+ {
+ lods += (int)BitConverter.ToUInt32(bytesFile, jump2 + 8);
+ lods += (int)BitConverter.ToUInt32(bytesFile, jump2 + 12);
+ lods += (int)BitConverter.ToUInt32(bytesFile, jump2 + 16);
+ }
+ int numVertices = 0;
+ int vcStart = 0;
+ int vcYesNo = 0;
+ bool hasTangents = false;
+ bool hasNormals = false;
+ bool hasVColors = false;
+ bool vcEmpty = vcRemove;
+ if (((blocksNamesList[i] == "NiTriShape" && (realBlockStart + blocksSizeList[i]) == (jump2 + 8)) || (blocksNamesList[i] == "BSLODTriShape" && (realBlockStart + blocksSizeList[i]) == (jump2 + 20))) && (dataBlock >= -1 && dataBlock < blocksCount) && (skinBlock >= -1 && skinBlock < blocksCount) && (shaderBlock >= -1 && shaderBlock < blocksCount) && (alphaBlock >= -1 && alphaBlock < blocksCount))
+ {
+ if ((dataBlock != -1 && blocksNamesList[dataBlock] != "NiTriShapeData" && blocksNamesList[dataBlock] != "NiTriStripsData") || (skinBlock != -1 && blocksNamesList[skinBlock] != "NiSkinInstance" && blocksNamesList[skinBlock] != "BSDismemberSkinInstance") || (shaderBlock != -1 && blocksNamesList[shaderBlock] != "BSLightingShaderProperty" && blocksNamesList[shaderBlock] != "BSEffectShaderProperty" && blocksNamesList[shaderBlock] != "BSWaterShaderProperty" && blocksNamesList[shaderBlock] != "BSSkyShaderProperty") || (alphaBlock != -1 && blocksNamesList[alphaBlock] != "NiAlphaProperty"))
+ {
+ outLog.Add("WARNING! INCORRECT BLOCKS LINKS: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ if (dataBlock != -1)
+ {
+ if ((i + 1 + extra) != dataBlock)
+ {
+ outLog.Add("WARNING! NEED REORDER: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ if (blocksNamesList[dataBlock] == "NiTriStripsData")
+ {
+ outLog.Add("WARNING! MESH HAVE NITRISTRIPSDATA: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ if (blocksNamesList[dataBlock] == "NiTriShapeData")
+ {
+ realBlockStart = blocksStartList[dataBlock];
+ int jump3 = realBlockStart + 4;
+ numVertices = BitConverter.ToUInt16(bytesFile, jump3);
+ jump3 += 4;
+ if (bytesFile[jump3] == 1 && (verTrim || verX || verY || verZ))
+ {
+ jump3++;
+ for (int j = 0; j < numVertices; j++)
+ {
+ if (verTrim)
+ {
+ double vertice = (double)BitConverter.ToSingle(bytesFile, jump3);
+ verticesTrim(jump3, (double)Math.Round(vertice, 6));
+ }
+ if (verXHard)
+ {
+ replaceBytesInFile(jump3, BitConverter.GetBytes((float)verXval));
+ }
+ else if (verX)
+ {
+ replaceBytesInFile(jump3, BitConverter.GetBytes(BitConverter.ToSingle(bytesFile, jump3) + (float)verXval));
+ }
+ jump3 += 4;
+ if (verTrim)
+ {
+ double vertice = (double)BitConverter.ToSingle(bytesFile, jump3);
+ verticesTrim(jump3, (double)Math.Round(vertice, 6));
+ }
+ if (verYHard)
+ {
+ replaceBytesInFile(jump3, BitConverter.GetBytes((float)verYval));
+ }
+ else if (verY)
+ {
+ replaceBytesInFile(jump3, BitConverter.GetBytes(BitConverter.ToSingle(bytesFile, jump3) + (float)verYval));
+ }
+ jump3 += 4;
+ if (verTrim)
+ {
+ double vertice = (double)BitConverter.ToSingle(bytesFile, jump3);
+ verticesTrim(jump3, (double)Math.Round(vertice, 6));
+ }
+ if (verZHard)
+ {
+ replaceBytesInFile(jump3, BitConverter.GetBytes((float)verZval));
+ }
+ else if (verZ)
+ {
+ replaceBytesInFile(jump3, BitConverter.GetBytes(BitConverter.ToSingle(bytesFile, jump3) + (float)verZval));
+ }
+ jump3 += 4;
+ }
+ }
+ else
+ {
+ jump3++;
+ jump3 += numVertices * 12;
+ }
+ long convert = BitConverter.ToUInt16(bytesFile, jump3);
+ hasTangents = ((VectorFlags)convert & VectorFlags.Has_Tangents) != 0;
+ bool hasUV = ((VectorFlags)convert & VectorFlags.Has_UV) != 0;
+ jump3 += 6;
+ if (bytesFile[jump3] == 1)
+ {
+ hasNormals = true;
+ jump3 += numVertices * 12;
+ if (hasTangents)
+ {
+ jump3 += numVertices * 24;
+ }
+ }
+ if (shaderBlock != -1 && ((hasTangents && !hasNormals) || (!hasTangents && hasNormals)))
+ {
+ outLog.Add("WARNING! TANGENTS NOT WORK: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ jump3 += 17;
+ if (bytesFile[jump3] == 1)
+ {
+ vcYesNo = jump3;
+ jump3 = jump3 + (numVertices * 16);
+ hasVColors = true;
+ if (checkBox4.Checked || vcRemove || vcColor || vcAlpha)
+ {
+ int jump4 = vcYesNo + 1;
+ vcStart = jump4;
+ for (int j = 0; j < numVertices; j++)
+ {
+ if (checkBox4.Checked || vcRemove)
+ {
+ float c1 = floatRoundUp(jump4);
+ jump4 += 4;
+ float c2 = floatRoundUp(jump4);
+ jump4 += 4;
+ float c3 = floatRoundUp(jump4);
+ jump4 += 4;
+ float c4 = floatRoundUp(jump4);
+ jump4 += 4;
+ if (vcRemove && (c1 < 0.9 || c2 < 0.9 || c3 < 0.9 || c4 < 0.9))
+ {
+ vcEmpty = false;
+ if (!checkBox4.Checked)
+ {
+ break;
+ }
+ }
+ }
+ else
+ {
+ if (vcColor)
+ {
+ replaceBytesInFile(jump4, BitConverter.GetBytes(vcR));
+ jump4 += 4;
+ replaceBytesInFile(jump4, BitConverter.GetBytes(vcG));
+ jump4 += 4;
+ replaceBytesInFile(jump4, BitConverter.GetBytes(vcB));
+ jump4 += 4;
+ }
+ else
+ {
+ jump4 += 12;
+ }
+ if (vcAlpha)
+ {
+ replaceBytesInFile(jump4, BitConverter.GetBytes(vcA));
+ }
+ jump4 += 4;
+ }
+ }
+ }
+ }
+ jump3++;
+ if (hasUV)
+ {
+ jump3 += numVertices * 8;
+ }
+ int triangles = BitConverter.ToUInt16(bytesFile, jump3 + 6);
+ if (numVertices > 0 && triangles < 1)
+ {
+ outLog.Add("WARNING! NO TRIANGLES: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ if (blocksNamesList[i] == "BSLODTriShape" && triangles < lods)
+ {
+ outLog.Add("WARNING! LODS MORE TRIANGLES: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ jump3 = jump3 + 12;
+ if (bytesFile[jump3] == 1)
+ {
+ jump3 = jump3 + (triangles * 6);
+ }
+ jump3++;
+ int match = BitConverter.ToUInt16(bytesFile, jump3);
+ jump3 = jump3 + 2;
+ if (match > 0)
+ {
+ for (int j = 0; j < match; j++)
+ {
+ jump3 = jump3 + 2 + (BitConverter.ToUInt16(bytesFile, jump3) * 2);
+ }
+ }
+ if ((realBlockStart + blocksSizeList[dataBlock]) != jump3)
+ {
+ outLog.Add("WARNING! ERROR PARS: " + blocksNamesList[dataBlock] + " (" + dataBlock.ToString() + ") " + fileName);
+ }
+ }
+ }
+ if (shaderBlock != -1 && blocksNamesList[shaderBlock] == "BSLightingShaderProperty")
+ {
+ realBlockStart = blocksStartList[shaderBlock];
+ int jump3 = realBlockStart + 16 + ((int)BitConverter.ToUInt32(bytesFile, realBlockStart + 8) * 4);
+ if (jump3 > realBlockStart && (realBlockStart + blocksSizeList[shaderBlock]) > jump3)
+ {
+ long shaderFlags1 = BitConverter.ToUInt32(bytesFile, jump3);
+ bool hasParallaxFlag = ((ShadeFlags1)shaderFlags1 & ShadeFlags1.SLSF1_Parallax) != 0;
+ bool hasCastShadowFlag = ((ShadeFlags1)shaderFlags1 & ShadeFlags1.SLSF1_Cast_Shadows) != 0;
+ bool hasDecalFlag = ((ShadeFlags1)shaderFlags1 & ShadeFlags1.SLSF1_Decal) != 0;
+ bool hasRefractionFlag = ((ShadeFlags1)shaderFlags1 & ShadeFlags1.SLSF1_Refraction) != 0;
+ bool hasSkinFlag = ((ShadeFlags1)shaderFlags1 & ShadeFlags1.SLSF1_Skinned) != 0;
+ bool hasSpaceNormalsFlag = ((ShadeFlags1)shaderFlags1 & ShadeFlags1.SLSF1_Model_Space_Normals) != 0;
+ bool hasVAlphaFlag = ((ShadeFlags1)shaderFlags1 & ShadeFlags1.SLSF1_Vertex_Alpha) != 0;
+ bool hasEnvMapFlag = ((ShadeFlags1)shaderFlags1 & ShadeFlags1.SLSF1_Environment_Mapping) != 0;
+ bool hasEyeEnvMapFlag = ((ShadeFlags1)shaderFlags1 & ShadeFlags1.SLSF1_Eye_Environment_Mapping) != 0;
+ int textureSetBlock = (int)BitConverter.ToUInt32(bytesFile, jump3 + 24);
+ bool hasPTexture = false;
+ bool hasSTexture = false;
+ string normal = null;
+ if (textureSetBlock != -1)
+ {
+ int jump4 = blocksStartList[textureSetBlock];
+ int num = (int)BitConverter.ToUInt32(bytesFile, jump4);
+ if (num != 9)
+ {
+ outLog.Add("WARNING! COUNT OF TEXTURES: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ jump4 += 4;
+ if (debugMode)
+ {
+ outLog.Add("");
+ outLog.Add("TEXTURES LIST:");
+ }
+ for (int j = 0; j < num; j++)
+ {
+ int length = (int)BitConverter.ToUInt32(bytesFile, jump4);
+ jump4 += 4;
+ string word = null;
+ while (length != 0)
+ {
+ word += Convert.ToChar(bytesFile[jump4]).ToString();
+ jump4++;
+ length--;
+ }
+ if (j == 1 && !String.IsNullOrEmpty(word))
+ {
+ normal = word;
+ }
+ else if (j == 2 && !String.IsNullOrEmpty(word))
+ {
+ hasSTexture = true;
+ }
+ else if (j == 3 && !String.IsNullOrEmpty(word) && word.EndsWith("_p.dds", StringComparison.OrdinalIgnoreCase))
+ {
+ if (parallaxCompare && !word.Remove(word.Length - 6).Equals(normal.Remove(normal.Length - 6), StringComparison.OrdinalIgnoreCase))
+ {
+ outLog.Add("WARNING! _P TEXTURE NOT EQUAL _N: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ hasPTexture = true;
+ }
+ if (debugMode)
+ {
+ outLog.Add((j + 1).ToString() + " " + word);
+ }
+ }
+ }
+ if (parallaxAdd && normal != null && texturesList.Exists(s => s.Equals(normal, StringComparison.OrdinalIgnoreCase)))
+ {
+ if (!parallaxInvert && bytesFile[realBlockStart] == 0 && !hasParallaxFlag && skinBlock == -1)
+ {
+ bytesFile[realBlockStart] = 3;
+ shaderFlags1 += 2048;
+ replaceBytesInFile(jump3, BitConverter.GetBytes(shaderFlags1));
+ }
+ else if (parallaxInvert && bytesFile[realBlockStart] == 3 && hasParallaxFlag)
+ {
+ bytesFile[realBlockStart] = 0;
+ shaderFlags1 -= 2048;
+ replaceBytesInFile(jump3, BitConverter.GetBytes(shaderFlags1));
+ }
+ }
+ else if (parallaxRemove && (bytesFile[realBlockStart] == 3 || hasParallaxFlag))
+ {
+ bytesFile[realBlockStart] = 0;
+ shaderFlags1 -= 2048;
+ replaceBytesInFile(jump3, BitConverter.GetBytes(shaderFlags1));
+ }
+ else if (((bytesFile[realBlockStart] == 3 && !hasParallaxFlag) || (bytesFile[realBlockStart] != 3 && hasParallaxFlag)) || ((bytesFile[realBlockStart] == 3 && hasParallaxFlag && (!hasPTexture || !hasVColors || !hasNormals || !hasTangents || skinBlock != -1))) || (hasPTexture && (bytesFile[realBlockStart] != 3 || !hasParallaxFlag)))
+ {
+ outLog.Add("WARNING! PARALLAX NOT WORK: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ if (alphaBlock != -1 && hasCastShadowFlag && hasDecalFlag)
+ {
+ if (!checkBox4.Checked)
+ {
+ outLog.Add("WARNING! CAST SHADOW ALPHA DECAL: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ else
+ {
+ shaderFlags1 -= 512;
+ replaceBytesInFile(jump3, BitConverter.GetBytes(shaderFlags1));
+ }
+ }
+ if ((hasVAlphaFlag && (!hasVColors || (alphaBlock == -1 && !hasRefractionFlag))))
+ {
+ if (!checkBox4.Checked)
+ {
+ outLog.Add("WARNING! ALPHA IN TREE AND ALPHA SHADER FLAG CONFLICT: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ else if (hasVAlphaFlag)
+ {
+ shaderFlags1 -= 8;
+ replaceBytesInFile(jump3, BitConverter.GetBytes(shaderFlags1));
+ }
+ }
+ if ((checkBox6.Checked || checkBox7.Checked) && comboBox1.SelectedIndex != -1)
+ {
+ if (((ShadeFlags1)shaderFlags1 & (ShadeFlags1)(1 << comboBox1.SelectedIndex)) != 0)
+ {
+ if (checkBox7.Checked)
+ {
+ shaderFlags1 -= 1 << comboBox1.SelectedIndex;
+ replaceBytesInFile(jump3, BitConverter.GetBytes(shaderFlags1));
+ }
+ }
+ else
+ {
+ if (checkBox6.Checked)
+ {
+ shaderFlags1 += 1 << comboBox1.SelectedIndex;
+ replaceBytesInFile(jump3, BitConverter.GetBytes(shaderFlags1));
+ }
+ }
+ }
+ if (checkBox4.Checked && hasEyeEnvMapFlag && bytesFile[realBlockStart] == 16)
+ {
+ bytesFile[realBlockStart] = 1;
+ shaderFlags1 -= 131072;
+ replaceBytesInFile(jump3, BitConverter.GetBytes(shaderFlags1));
+ hasEyeEnvMapFlag = false;
+ if (!hasEnvMapFlag)
+ {
+ shaderFlags1 += 128;
+ replaceBytesInFile(jump3, BitConverter.GetBytes(shaderFlags1));
+ hasEnvMapFlag = true;
+ }
+ int shaderTrimStart = realBlockStart + blocksSizeList[shaderBlock] - 24;
+ resizeByteArray(shaderTrimStart, 24, shaderBlock);
+ if (realBlockStart > shaderTrimStart)
+ {
+ realBlockStart -= 24;
+ }
+ if (jump3 > shaderTrimStart)
+ {
+ jump3 -= 24;
+ }
+ }
+ if ((hasEnvMapFlag && bytesFile[realBlockStart] != 1) || (!hasEnvMapFlag && bytesFile[realBlockStart] == 1) || (hasEyeEnvMapFlag && bytesFile[realBlockStart] != 16) || (!hasEyeEnvMapFlag && bytesFile[realBlockStart] == 16))
+ {
+ outLog.Add("WARNING! ENVIRONMENT MAP SHADER TYPE AND FLAG CONFLICT: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ if ((skinBlock != -1 && !hasSkinFlag) || (skinBlock == -1 && hasSkinFlag))
+ {
+ outLog.Add("WARNING! SKIN IN TREE AND SKIN SHADER FLAG CONFLICT: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ jump3 += 4;
+ long shaderFlags2 = BitConverter.ToUInt32(bytesFile, jump3);
+ bool hasVCFlag = ((ShadeFlags2)shaderFlags2 & ShadeFlags2.SLSF2_Vertex_Colors) != 0;
+ bool hasGlowFlag = ((ShadeFlags2)shaderFlags2 & ShadeFlags2.SLSF2_Glow_Map) != 0;
+ bool hasSoftLightingFlag = ((ShadeFlags2)shaderFlags2 & ShadeFlags2.SLSF2_Soft_Lighting) != 0;
+ if (hasVColors && vcRemove && vcEmpty && (bytesFile[realBlockStart] == 0 || bytesFile[realBlockStart] == 1))
+ {
+ if (hasVCFlag)
+ {
+ shaderFlags2 -= 32;
+ replaceBytesInFile(jump3, BitConverter.GetBytes(shaderFlags2));
+ hasVCFlag = false;
+ }
+ bytesFile[vcYesNo] = 0;
+ resizeByteArray(vcStart, numVertices * 16, dataBlock);
+ hasVColors = false;
+ if (realBlockStart > vcStart)
+ {
+ realBlockStart -= numVertices * 16;
+ }
+ if (jump3 > vcStart)
+ {
+ jump3 -= numVertices * 16;
+ }
+ }
+ if ((hasVCFlag && !hasVColors) || (!hasVCFlag && hasVColors))
+ {
+ outLog.Add("WARNING! VERTEX COLORS FLAGS NOT MATCH: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ if ((bytesFile[realBlockStart] == 2 && !hasGlowFlag) || (bytesFile[realBlockStart] != 2 && hasGlowFlag))
+ {
+ outLog.Add("WARNING! GLOW TYPE SHADER NOT MATCH: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ if (!hasSTexture && hasSoftLightingFlag)
+ {
+ if (!checkBox4.Checked)
+ {
+ outLog.Add("WARNING! HAS SOFTLIGHTING FLAG BUT TEXTURE NOT: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ else
+ {
+ shaderFlags2 -= 33554432;
+ replaceBytesInFile(jump3, BitConverter.GetBytes(shaderFlags2));
+ }
+ }
+ if ((checkBox8.Checked || checkBox9.Checked) && comboBox2.SelectedIndex != -1)
+ {
+ if (((ShadeFlags2)shaderFlags2 & (ShadeFlags2)(1 << comboBox2.SelectedIndex)) != 0)
+ {
+ if (checkBox9.Checked)
+ {
+ shaderFlags2 -= 1 << comboBox2.SelectedIndex;
+ replaceBytesInFile(jump3, BitConverter.GetBytes(shaderFlags2));
+ }
+ }
+ else
+ {
+ if (checkBox8.Checked)
+ {
+ shaderFlags2 += 1 << comboBox2.SelectedIndex;
+ replaceBytesInFile(jump3, BitConverter.GetBytes(shaderFlags2));
+ }
+ }
+ }
+ jump3 += 24;
+ if ((ecColor || ecMultiple) && (bytesFile[realBlockStart] == ecShaderType || ecShaderType == 21))
+ {
+ if (ecColor)
+ {
+ replaceBytesInFile(jump3, BitConverter.GetBytes(ecR));
+ jump3 += 4;
+ replaceBytesInFile(jump3, BitConverter.GetBytes(ecG));
+ jump3 += 4;
+ replaceBytesInFile(jump3, BitConverter.GetBytes(ecB));
+ jump3 += 4;
+ }
+ else
+ {
+ jump3 += 12;
+ }
+ if (ecMultiple)
+ {
+ replaceBytesInFile(jump3, BitConverter.GetBytes(ecM));
+ }
+ jump3 += 4;
+ }
+ else if (checkBox4.Checked)
+ {
+ float c1 = floatRoundUp(jump3);
+ jump3 += 4;
+ float c2 = floatRoundUp(jump3);
+ jump3 += 4;
+ float c3 = floatRoundUp(jump3);
+ jump3 += 4;
+ float multi = BitConverter.ToSingle(bytesFile, jump3);
+ if (multi != 0 && c1 == 0 && c2 == 0 && c3 == 0 && bytesFile[realBlockStart] != 2)
+ {
+ replaceBytesInFile(jump3, BitConverter.GetBytes(0));
+ }
+ jump3 += 4;
+ }
+ else
+ {
+ jump3 += 16;
+ }
+ jump3 += 12;
+ if (bytesFile[realBlockStart] == 5 && hasSkinFlag && hasSpaceNormalsFlag)
+ {
+ if (realBlockStart + blocksSizeList[shaderBlock] == jump3 + 40)
+ {
+ if (hasTangents || hasNormals || hasVColors || hasVCFlag)
+ {
+ outLog.Add("WARNING! SKIN INCORRECT PARAMETERS: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ if (checkBox10.Checked)
+ {
+ replaceBytesInFile(jump3, BitConverter.GetBytes((float)23));
+ jump3 += 4;
+ replaceBytesInFile(jump3, BitConverter.GetBytes((float)0.663));
+ jump3 += 4;
+ replaceBytesInFile(jump3, BitConverter.GetBytes((float)0.855));
+ jump3 += 4;
+ replaceBytesInFile(jump3, BitConverter.GetBytes((float)1));
+ jump3 += 4;
+ replaceBytesInFile(jump3, BitConverter.GetBytes((float)4.5));
+ jump3 += 4;
+ replaceBytesInFile(jump3, BitConverter.GetBytes((float)0.4));
+ jump3 += 4;
+ replaceBytesInFile(jump3, BitConverter.GetBytes((float)2));
+ }
+ }
+ else
+ {
+ outLog.Add("WARNING! ERROR PARS: " + blocksNamesList[shaderBlock] + " (" + shaderBlock.ToString() + ") " + fileName);
+ }
+ }
+ }
+ else
+ {
+ outLog.Add("WARNING! ERROR PARS: " + blocksNamesList[shaderBlock] + " (" + shaderBlock.ToString() + ") " + fileName);
+ }
+ }
+ }
+ else
+ {
+ outLog.Add("WARNING! ERROR PARS: " + blocksNamesList[i] + " (" + i.ToString() + ") " + fileName);
+ }
+ }
+ }
+ if (fileChanged)
+ {
+ File.WriteAllBytes(path, bytesFile);
+ outLog.Add("ATTENTION! FILE WAS UPDATE: " + fileName);
+ }
+ successFiles++;
+ }
+ else
+ {
+ outLog.Add("WARNING! HEADER READ ERROR: " + fileName + " SOME REASON: " + headerError);
+ }
+ blocksTypesList = null;
+ blocksNamesList = null;
+ stringsList = null;
+ groupsList = null;
+ }
+ }
+
+ private void verticesTrim(int jump, double value)
+ {
+ string premath = value.ToString();
+ int index = premath.IndexOf(",");
+ double trim = 0;
+ if (index > 0)
+ {
+ if (premath.Length > (index + verTrimNum + 1))
+ {
+ premath = premath.Remove(index + verTrimNum + 1);
+ }
+ Double.TryParse(premath.Replace(',', '.'), NumberStyles.Number, CultureInfo.InvariantCulture, out trim);
+ replaceBytesInFile(jump, BitConverter.GetBytes((float)trim));
+ }
+ }
+
+ private void extraCheck(int start, int count, int blockIndex, string name)
+ {
+ for (int i = 0; i < count; i++)
+ {
+ int extra = (int)BitConverter.ToUInt32(bytesFile, start);
+ if (extra < 0 || extra > blocksCount)
+ {
+ outLog.Add("WARNING! EXTRA BLOCKS: " + name + " (" + blockIndex.ToString() + ") " + fileName);
+ }
+ start += 4;
+ }
+ }
+
+ private void sortBlocks(int blockStart, int jump, int childs, int blockSize, int blockEnd, int blockIndex, string name)
+ {
+ if (childs > 0)
+ {
+ List childsList = new List();
+ bool dubBlocks = false;
+ bool warnBlocks = false;
+ jump += 4;
+ int startList = jump;
+ if (blockSize == blockEnd)
+ {
+ for (int i = 0; i < childs; i++)
+ {
+ int child = (int)BitConverter.ToUInt32(bytesFile, jump);
+ if (child == -1)
+ {
+ childsList.Add(-1);
+ outLog.Add("WARNING! NONE CHILDREN BLOCKS: " + name + " (" + blockIndex.ToString() + ") " + fileName);
+ }
+ else if (childsList.Contains(child))
+ {
+ childsList.Add(-1);
+ outLog.Add("WARNING! DUB CHILDREN BLOCKS: " + name + " (" + blockIndex.ToString() + ") " + fileName);
+ dubBlocks = true;
+ }
+ else if (child >= 0 && child < blocksCount)
+ {
+ childsList.Add(child);
+ }
+ else
+ {
+ warnBlocks = true;
+ outLog.Add("WARNING! NOT VALID CHILDREN BLOCKS: " + name + " (" + blockIndex.ToString() + ") " + fileName);
+ }
+ jump += 4;
+ }
+ }
+ else
+ {
+ warnBlocks = true;
+ outLog.Add("WARNING! ERROR PARS: " + name + " (" + blockIndex.ToString() + "): " + fileName);
+ }
+ if (checkBox3.Checked)
+ {
+ if (!warnBlocks)
+ {
+ if (dubBlocks)
+ {
+ outLog.Add("WARNING! DUB CHILDREN BLOCKS WAS REPLACED TO NONE: " + name + " (" + blockIndex.ToString() + ") " + fileName);
+ }
+ childsList.Sort();
+ int listCount = 0;
+ for (int i = 0; listCount < childsList.Count; i++)
+ {
+ if (childsList[i] == -1)
+ {
+ childsList.RemoveAt(i);
+ childsList.Add(-1);
+ i--;
+ }
+ listCount++;
+ }
+ for (int j = 0; j < childsList.Count; j++)
+ {
+ replaceBytesInFile(startList, BitConverter.GetBytes(childsList[j]));
+ startList += 4;
+ }
+ }
+ else
+ {
+ outLog.Add("WARNING! SORTING NOT APPLICABLE: " + name + " (" + blockIndex.ToString() + ") " + fileName);
+ }
+ }
+ }
+ else if (childs < 0)
+ {
+ outLog.Add("WARNING! ERROR PARS: " + name + " (" + blockIndex.ToString() + "): " + fileName);
+ }
+ }
+
+ private float floatRoundUp(int jump)
+ {
+ float n = BitConverter.ToSingle(bytesFile, jump);
+ if (float.IsNaN(n) || n > 0.989)
+ {
+ replaceBytesInFile(jump, BitConverter.GetBytes((float)1));
+ n = (float)1;
+ }
+ else if (n < 0.011)
+ {
+ replaceBytesInFile(jump, BitConverter.GetBytes((float)0));
+ n = (float)0;
+ }
+ return n;
+ }
+
+ private void resizeByteArray(int start, int length, int block)
+ {
+ List list = new List(bytesFile);
+ list.RemoveRange(start, length);
+ bytesFile = null;
+ bytesFile = list.ToArray();
+ list = null;
+ blocksSizeList[block] = blocksSizeList[block] - length;
+ replaceBytesInFile(sizeIndex[block], BitConverter.GetBytes(blocksSizeList[block]));
+ for (int i = 0; i < blocksStartList.Count; i++)
+ {
+ if (blocksStartList[i] > start)
+ {
+ blocksStartList[i] = blocksStartList[i] - length;
+ }
+ }
+ }
+
+ private void replaceBytesInFile(int start, byte[] array)
+ {
+ bytesFile[start] = array[0];
+ bytesFile[start + 1] = array[1];
+ bytesFile[start + 2] = array[2];
+ bytesFile[start + 3] = array[3];
+ fileChanged = true;
+ }
+
+ private byte[] materialBytes(string line)
+ {
+ byte[] bytesArray = new byte[4];
+ if (line == "SKY_HAV_MAT_BROKEN_STONE")
+ {
+ bytesArray[0] = 71;
+ bytesArray[1] = 55;
+ bytesArray[2] = 209;
+ bytesArray[3] = 7;
+ }
+ else if (line == "SKY_HAV_MAT_LIGHT_WOOD")
+ {
+ bytesArray[0] = 227;
+ bytesArray[1] = 222;
+ bytesArray[2] = 199;
+ bytesArray[3] = 21;
+ }
+ else if (line == "SKY_HAV_MAT_SNOW")
+ {
+ bytesArray[0] = 175;
+ bytesArray[1] = 122;
+ bytesArray[2] = 199;
+ bytesArray[3] = 23;
+ }
+ else if (line == "SKY_HAV_MAT_GRAVEL")
+ {
+ bytesArray[0] = 88;
+ bytesArray[1] = 186;
+ bytesArray[2] = 139;
+ bytesArray[3] = 25;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_CHAIN_METAL")
+ {
+ bytesArray[0] = 228;
+ bytesArray[1] = 68;
+ bytesArray[2] = 41;
+ bytesArray[3] = 26;
+ }
+ else if (line == "SKY_HAV_MAT_BOTTLE")
+ {
+ bytesArray[0] = 246;
+ bytesArray[1] = 8;
+ bytesArray[2] = 107;
+ bytesArray[3] = 29;
+ }
+ else if (line == "SKY_HAV_MAT_WOOD")
+ {
+ bytesArray[0] = 17;
+ bytesArray[1] = 198;
+ bytesArray[2] = 217;
+ bytesArray[3] = 29;
+ }
+ else if (line == "SKY_HAV_MAT_SKIN")
+ {
+ bytesArray[0] = 2;
+ bytesArray[1] = 183;
+ bytesArray[2] = 61;
+ bytesArray[3] = 35;
+ }
+ else if (line == "SKY_HAV_MAT_BARREL")
+ {
+ bytesArray[0] = 20;
+ bytesArray[1] = 150;
+ bytesArray[2] = 163;
+ bytesArray[3] = 43;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_CERAMIC_MEDIUM")
+ {
+ bytesArray[0] = 91;
+ bytesArray[1] = 51;
+ bytesArray[2] = 151;
+ bytesArray[3] = 46;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_BASKET")
+ {
+ bytesArray[0] = 110;
+ bytesArray[1] = 105;
+ bytesArray[2] = 34;
+ bytesArray[3] = 47;
+ }
+ else if (line == "SKY_HAV_MAT_ICE")
+ {
+ bytesArray[0] = 28;
+ bytesArray[1] = 93;
+ bytesArray[2] = 14;
+ bytesArray[3] = 52;
+ }
+ else if (line == "SKY_HAV_MAT_STAIRS_STONE")
+ {
+ bytesArray[0] = 61;
+ bytesArray[1] = 115;
+ bytesArray[2] = 157;
+ bytesArray[3] = 53;
+ }
+ else if (line == "SKY_HAV_MAT_WATER")
+ {
+ bytesArray[0] = 199;
+ bytesArray[1] = 227;
+ bytesArray[2] = 17;
+ bytesArray[3] = 61;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_BLADE_1HAND")
+ {
+ bytesArray[0] = 164;
+ bytesArray[1] = 224;
+ bytesArray[2] = 48;
+ bytesArray[3] = 63;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_BOOK")
+ {
+ bytesArray[0] = 82;
+ bytesArray[1] = 96;
+ bytesArray[2] = 97;
+ bytesArray[3] = 75;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_CARPET")
+ {
+ bytesArray[0] = 63;
+ bytesArray[1] = 145;
+ bytesArray[2] = 177;
+ bytesArray[3] = 76;
+ }
+ else if (line == "SKY_HAV_MAT_SOLID_METAL")
+ {
+ bytesArray[0] = 59;
+ bytesArray[1] = 204;
+ bytesArray[2] = 202;
+ bytesArray[3] = 76;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_AXE_1HAND")
+ {
+ bytesArray[0] = 203;
+ bytesArray[1] = 2;
+ bytesArray[2] = 211;
+ bytesArray[3] = 77;
+ }
+ else if (line == "SKY_HAV_MAT_STAIRS_WOOD")
+ {
+ bytesArray[0] = 149;
+ bytesArray[1] = 245;
+ bytesArray[2] = 31;
+ bytesArray[3] = 87;
+ }
+ else if (line == "SKY_HAV_MAT_MUD")
+ {
+ bytesArray[0] = 129;
+ bytesArray[1] = 112;
+ bytesArray[2] = 152;
+ bytesArray[3] = 88;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_BOULDER_SMALL")
+ {
+ bytesArray[0] = 214;
+ bytesArray[1] = 13;
+ bytesArray[2] = 113;
+ bytesArray[3] = 92;
+ }
+ else if (line == "SKY_HAV_MAT_STAIRS_SNOW")
+ {
+ bytesArray[0] = 43;
+ bytesArray[1] = 73;
+ bytesArray[2] = 1;
+ bytesArray[3] = 93;
+ }
+ else if (line == "SKY_HAV_MAT_HEAVY_STONE")
+ {
+ bytesArray[0] = 64;
+ bytesArray[1] = 215;
+ bytesArray[2] = 160;
+ bytesArray[3] = 93;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_BOWS_STAVES")
+ {
+ bytesArray[0] = 65;
+ bytesArray[1] = 214;
+ bytesArray[2] = 202;
+ bytesArray[3] = 95;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_WOOD_AS_STAIRS")
+ {
+ bytesArray[0] = 12;
+ bytesArray[1] = 80;
+ bytesArray[2] = 128;
+ bytesArray[3] = 107;
+ }
+ else if (line == "SKY_HAV_MAT_GRASS")
+ {
+ bytesArray[0] = 238;
+ bytesArray[1] = 104;
+ bytesArray[2] = 47;
+ bytesArray[3] = 110;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_BOULDER_LARGE")
+ {
+ bytesArray[0] = 123;
+ bytesArray[1] = 206;
+ bytesArray[2] = 95;
+ bytesArray[3] = 112;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_STONE_AS_STAIRS")
+ {
+ bytesArray[0] = 127;
+ bytesArray[1] = 69;
+ bytesArray[2] = 107;
+ bytesArray[3] = 112;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_BLADE_2HAND")
+ {
+ bytesArray[0] = 116;
+ bytesArray[1] = 154;
+ bytesArray[2] = 144;
+ bytesArray[3] = 120;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_BOTTLE_SMALL")
+ {
+ bytesArray[0] = 88;
+ bytesArray[1] = 44;
+ bytesArray[2] = 191;
+ bytesArray[3] = 120;
+ }
+ else if (line == "SKY_HAV_MAT_SAND")
+ {
+ bytesArray[0] = 13;
+ bytesArray[1] = 77;
+ bytesArray[2] = 62;
+ bytesArray[3] = 129;
+ }
+ else if (line == "SKY_HAV_MAT_HEAVY_METAL")
+ {
+ bytesArray[0] = 163;
+ bytesArray[1] = 38;
+ bytesArray[2] = 226;
+ bytesArray[3] = 132;
+ }
+ else if (line == "SKY_HAV_MAT_DRAGON")
+ {
+ bytesArray[0] = 23;
+ bytesArray[1] = 136;
+ bytesArray[2] = 26;
+ bytesArray[3] = 150;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_BLADE_1HAND_SMALL")
+ {
+ bytesArray[0] = 204;
+ bytesArray[1] = 170;
+ bytesArray[2] = 10;
+ bytesArray[3] = 156;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_SKIN_SMALL")
+ {
+ bytesArray[0] = 62;
+ bytesArray[1] = 189;
+ bytesArray[2] = 230;
+ bytesArray[3] = 156;
+ }
+ else if (line == "SKY_HAV_MAT_STAIRS_BROKEN_STONE")
+ {
+ bytesArray[0] = 91;
+ bytesArray[1] = 105;
+ bytesArray[2] = 102;
+ bytesArray[3] = 172;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_SKIN_LARGE")
+ {
+ bytesArray[0] = 147;
+ bytesArray[1] = 126;
+ bytesArray[2] = 200;
+ bytesArray[3] = 176;
+ }
+ else if (line == "SKY_HAV_MAT_ORGANIC")
+ {
+ bytesArray[0] = 219;
+ bytesArray[1] = 173;
+ bytesArray[2] = 81;
+ bytesArray[3] = 177;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_BONE")
+ {
+ bytesArray[0] = 20;
+ bytesArray[1] = 124;
+ bytesArray[2] = 194;
+ bytesArray[3] = 181;
+ }
+ else if (line == "SKY_HAV_MAT_HEAVY_WOOD")
+ {
+ bytesArray[0] = 71;
+ bytesArray[1] = 112;
+ bytesArray[2] = 8;
+ bytesArray[3] = 183;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_CHAIN")
+ {
+ bytesArray[0] = 102;
+ bytesArray[1] = 67;
+ bytesArray[2] = 59;
+ bytesArray[3] = 183;
+ }
+ else if (line == "SKY_HAV_MAT_DIRT")
+ {
+ bytesArray[0] = 170;
+ bytesArray[1] = 62;
+ bytesArray[2] = 35;
+ bytesArray[3] = 185;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_ARMOR_LIGHT")
+ {
+ bytesArray[0] = 157;
+ bytesArray[1] = 22;
+ bytesArray[2] = 33;
+ bytesArray[3] = 204;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_SHIELD_LIGHT")
+ {
+ bytesArray[0] = 248;
+ bytesArray[1] = 211;
+ bytesArray[2] = 134;
+ bytesArray[3] = 205;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_COIN")
+ {
+ bytesArray[0] = 62;
+ bytesArray[1] = 84;
+ bytesArray[2] = 237;
+ bytesArray[3] = 213;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_SHIELD_HEAVY")
+ {
+ bytesArray[0] = 80;
+ bytesArray[1] = 251;
+ bytesArray[2] = 173;
+ bytesArray[3] = 220;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_ARMOR_HEAVY")
+ {
+ bytesArray[0] = 53;
+ bytesArray[1] = 48;
+ bytesArray[2] = 10;
+ bytesArray[3] = 221;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_ARROW")
+ {
+ bytesArray[0] = 146;
+ bytesArray[1] = 181;
+ bytesArray[2] = 14;
+ bytesArray[3] = 222;
+ }
+ else if (line == "SKY_HAV_MAT_GLASS")
+ {
+ bytesArray[0] = 66;
+ bytesArray[1] = 72;
+ bytesArray[2] = 233;
+ bytesArray[3] = 222;
+ }
+ else if (line == "SKY_HAV_MAT_STONE")
+ {
+ bytesArray[0] = 55;
+ bytesArray[1] = 242;
+ bytesArray[2] = 2;
+ bytesArray[3] = 223;
+ }
+ else if (line == "SKY_HAV_MAT_CLOTH")
+ {
+ bytesArray[0] = 163;
+ bytesArray[1] = 156;
+ bytesArray[2] = 211;
+ bytesArray[3] = 228;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_BLUNT_2HAND")
+ {
+ bytesArray[0] = 213;
+ bytesArray[1] = 43;
+ bytesArray[2] = 155;
+ bytesArray[3] = 236;
+ }
+ else if (line == "SKY_HAV_MAT_MATERIAL_BOULDER_MEDIUM")
+ {
+ bytesArray[0] = 226;
+ bytesArray[1] = 168;
+ bytesArray[2] = 86;
+ bytesArray[3] = 255;
+ }
+ else
+ {
+ outLog.Add("WARNING! WAS REPLACED WRONG MATERIAL COLLISION: " + fileName);
+ }
+ return bytesArray;
+ }
+
+ private void checkCollisions(int jump, long coll)
+ {
+ string mat = null;
+ if (coll == 131151687)
+ {
+ mat = "SKY_HAV_MAT_BROKEN_STONE";
+ }
+ else if (coll == 365420259)
+ {
+ mat = "SKY_HAV_MAT_LIGHT_WOOD";
+ }
+ else if (coll == 398949039)
+ {
+ mat = "SKY_HAV_MAT_SNOW";
+ }
+ else if (coll == 428587608)
+ {
+ mat = "SKY_HAV_MAT_GRAVEL";
+ }
+ else if (coll == 438912228)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_CHAIN_METAL";
+ }
+ else if (coll == 493553910)
+ {
+ mat = "SKY_HAV_MAT_BOTTLE";
+ }
+ else if (coll == 500811281)
+ {
+ mat = "SKY_HAV_MAT_WOOD";
+ }
+ else if (coll == 591247106)
+ {
+ mat = "SKY_HAV_MAT_SKIN";
+ }
+ else if (coll == 732141076)
+ {
+ mat = "SKY_HAV_MAT_BARREL";
+ }
+ else if (coll == 781661019)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_CERAMIC_MEDIUM";
+ }
+ else if (coll == 790784366)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_BASKET";
+ }
+ else if (coll == 873356572)
+ {
+ mat = "SKY_HAV_MAT_ICE";
+ }
+ else if (coll == 899511101)
+ {
+ mat = "SKY_HAV_MAT_STAIRS_STONE";
+ }
+ else if (coll == 1024582599)
+ {
+ mat = "SKY_HAV_MAT_WATER";
+ }
+ else if (coll == 1060167844)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_BLADE_1HAND";
+ }
+ else if (coll == 1264672850)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_BOOK";
+ }
+ else if (coll == 1286705471)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_CARPET";
+ }
+ else if (coll == 1288358971)
+ {
+ mat = "SKY_HAV_MAT_SOLID_METAL";
+ }
+ else if (coll == 1305674443)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_AXE_1HAND";
+ }
+ else if (coll == 1461712277)
+ {
+ mat = "SKY_HAV_MAT_STAIRS_WOOD";
+ }
+ else if (coll == 1486385281)
+ {
+ mat = "SKY_HAV_MAT_MUD";
+ }
+ else if (coll == 1550912982)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_BOULDER_SMALL";
+ }
+ else if (coll == 1560365355)
+ {
+ mat = "SKY_HAV_MAT_STAIRS_SNOW";
+ }
+ else if (coll == 1570821952)
+ {
+ mat = "SKY_HAV_MAT_HEAVY_STONE";
+ }
+ else if (coll == 1607128641)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_BOWS_STAVES";
+ }
+ else if (coll == 1803571212)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_WOOD_AS_STAIRS";
+ }
+ else if (coll == 1848600814)
+ {
+ mat = "SKY_HAV_MAT_GRASS";
+ }
+ else if (coll == 1885326971)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_BOULDER_LARGE";
+ }
+ else if (coll == 1886078335)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_STONE_AS_STAIRS";
+ }
+ else if (coll == 2022742644)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_BLADE_2HAND";
+ }
+ else if (coll == 2025794648)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_BOTTLE_SMALL";
+ }
+ else if (coll == 2168343821)
+ {
+ mat = "SKY_HAV_MAT_SAND";
+ }
+ else if (coll == 2229413539)
+ {
+ mat = "SKY_HAV_MAT_HEAVY_METAL";
+ }
+ else if (coll == 2518321175)
+ {
+ mat = "SKY_HAV_MAT_DRAGON";
+ }
+ else if (coll == 2617944780)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_BLADE_1HAND_SMALL";
+ }
+ else if (coll == 2632367422)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_SKIN_SMALL";
+ }
+ else if (coll == 2892392795)
+ {
+ mat = "SKY_HAV_MAT_STAIRS_BROKEN_STONE";
+ }
+ else if (coll == 2965929619)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_SKIN_LARGE";
+ }
+ else if (coll == 2974920155)
+ {
+ mat = "SKY_HAV_MAT_ORGANIC";
+ }
+ else if (coll == 3049421844)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_BONE";
+ }
+ else if (coll == 3070783559)
+ {
+ mat = "SKY_HAV_MAT_HEAVY_WOOD";
+ }
+ else if (coll == 3074114406)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_CHAIN";
+ }
+ else if (coll == 3106094762)
+ {
+ mat = "SKY_HAV_MAT_DIRT";
+ }
+ else if (coll == 3424720541)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_ARMOR_LIGHT";
+ }
+ else if (coll == 3448165368)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_SHIELD_LIGHT";
+ }
+ else if (coll == 3589100606)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_COIN";
+ }
+ else if (coll == 3702389584)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_SHIELD_HEAVY";
+ }
+ else if (coll == 3708432437)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_ARMOR_HEAVY";
+ }
+ else if (coll == 3725505938)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_ARROW";
+ }
+ else if (coll == 3739830338)
+ {
+ mat = "SKY_HAV_MAT_GLASS";
+ }
+ else if (coll == 3741512247)
+ {
+ mat = "SKY_HAV_MAT_STONE";
+ }
+ else if (coll == 3839073443)
+ {
+ mat = "SKY_HAV_MAT_CLOTH";
+ }
+ else if (coll == 3969592277)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_BLUNT_2HAND";
+ }
+ else if (coll == 4283869410)
+ {
+ mat = "SKY_HAV_MAT_MATERIAL_BOULDER_MEDIUM";
+ }
+ if (checkBox2.Checked)
+ {
+ if (mat != null)
+ {
+ outLog.Add("HAVE MATERIAL: " + mat);
+ }
+ else
+ {
+ outLog.Add("WARNING! WRONG MATERIAL COLLISION: " + fileName);
+ }
+ }
+ if (checkBox5.Checked && mat == textBox1.Text && textBox2.Text.Length > 12)
+ {
+ replaceBytesInFile(jump, materialBytes(textBox2.Text));
+ }
+ }
+
+ private void checkBox1_CheckedChanged(object sender, EventArgs e)
+ {
+ debugMode = !debugMode;
+ }
+
+ private void checkBox5_CheckedChanged(object sender, EventArgs e)
+ {
+ textBox1.Enabled = checkBox5.Checked;
+ textBox2.Enabled = checkBox5.Checked;
+ }
+
+ private void checkBox6_CheckedChanged(object sender, EventArgs e)
+ {
+ if (checkBox6.Checked)
+ {
+ checkBox7.Checked = false;
+ }
+ }
+
+ private void checkBox7_CheckedChanged(object sender, EventArgs e)
+ {
+ if (checkBox7.Checked)
+ {
+ checkBox6.Checked = false;
+ }
+ }
+
+ private void checkBox8_CheckedChanged(object sender, EventArgs e)
+ {
+ if (checkBox8.Checked)
+ {
+ checkBox9.Checked = false;
+ }
+ }
+
+ private void checkBox9_CheckedChanged(object sender, EventArgs e)
+ {
+ if (checkBox9.Checked)
+ {
+ checkBox8.Checked = false;
+ }
+ }
+
+ private void checkBox4_CheckedChanged(object sender, EventArgs e)
+ {
+ if (checkBox4.Checked)
+ {
+ fixesOn = true;
+ vcColor = false;
+ vcAlpha = false;
+ buttonColorVC(vcRemove);
+ }
+ else
+ {
+ fixesOn = false;
+ }
+ }
+
+ private void button3_Click(object sender, EventArgs e)
+ {
+ var form = new FormParallax();
+ form.ShowDialog();
+ form = null;
+ }
+
+ private void button4_Click(object sender, EventArgs e)
+ {
+ var form = new FormEC();
+ form.ShowDialog();
+ form = null;
+ }
+
+ private void button5_Click(object sender, EventArgs e)
+ {
+ var form = new FormVC();
+ form.ShowDialog();
+ form = null;
+ }
+
+ private void button6_Click(object sender, EventArgs e)
+ {
+ var form = new FormVer();
+ form.ShowDialog();
+ form = null;
+ }
+
+ public void buttonColorParallax(bool edit)
+ {
+ buttonColor(button3, edit);
+ }
+
+ public void buttonColorEC(bool edit)
+ {
+ buttonColor(button4, edit);
+ }
+
+ public void buttonColorVC(bool edit)
+ {
+ buttonColor(button5, edit);
+ }
+
+ public void buttonColorVer(bool edit)
+ {
+ buttonColor(button6, edit);
+ }
+
+ private void buttonColor(Button button, bool edit)
+ {
+ if (edit)
+ {
+ button.ForeColor = System.Drawing.Color.DarkRed;
+ }
+ else
+ {
+ button.ForeColor = System.Drawing.SystemColors.ControlText;
+ }
+ }
+ }
+}
diff --git a/Nifscan/FormMain.resx b/Nifscan/FormMain.resx
new file mode 100644
index 0000000..d0233c4
--- /dev/null
+++ b/Nifscan/FormMain.resx
@@ -0,0 +1,231 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ 17, 17
+
+
+
+
+ AAABAAEAMGAAAAEAIACoJQAAFgAAACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADgAAADEAAABlAAAAfAAA
+ AGwAAABIAAAAKQAAABkAAAANAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAZIBQUU2xK
+ SbKEW1nZZkZFvCIXF6MDAgKhAAAAkAAAAHMAAABPAAAAMQAAABwAAAAQAAAABgAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACQAA
+ AChAKyt6jV5e57WQj//dzMz/v6Gg/6J3df+SZWPxZ0dFvzAhIaUHBQWgAAAAlwAAAHwAAABZAAAAOAAA
+ ACEAAAATAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAIAAAASDQcHQGNCQqSba2v8zK6u/+3d3f/8+vr/+/j4//j09P/j1NT/xamo/6iAfv+XaGb5dVFQzD8r
+ K6kQCwqgAAAAmwAAAIQAAABjAAAAQQAAACYAAAAXAAAACwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAABgAAAB8qHBxiglZW0Kp/f//gysr/69nZ/+zb2//8+fn/+/f3//r29v/59PT/+PLy//fw
+ 8P/o2tr/y7Kx/6+JiP+abGr9g1pZ2083NrAaEhKhAgEBnwAAAIwAAABtAAAASgAAAC0AAAAbAAAADwAA
+ AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAIAAAAMAAAAL04zM4qTY2PxwJ6e/+zb2//s29v/69jY/+zb2//7+Pj/+vb2//n1
+ 9f/48/P/8+jo/+nU1P/mzc3/69fX//Pp6f/r3d3/0bm4/7aSkf+dcW/+jWFf6V5BQbkpHBujBQMDoQAA
+ AJMAAAB2AAAAVAAAADQAAAAfAAAAEgAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgWDw9NcktLtqBycv7YwcH/7+Dg/+3d3f/k0dH/xa6u/+za
+ 2v/79/f/+vb2//n09P/06ur/5c3N/9W4uP+BZ3P/WkV1/4t2kv/u4eH/8eXl//Dj4//o09P/1r28/7ya
+ mf+jeHb/k2Zk9G5MSsU3JiWnCwgHoQAAAJkAAAB/AAAAXgAAADwAAAAjAAAAFQAAAAoAAAACAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAITckJHKKXFzgtI2N/+na2v/w4uL/7t7e/9K9
+ vf+QdXX/o4qK/+vZ2f/69vb/+fX1//jz8//s2tr/3sXF/2VMTP86KHf/PS6Q/yMWcv94ZYr/8eTk//Di
+ 4v/RpKT/6tfX/+3d3f/r2tr/28TE/8KhoP+pf37/l2ln+3tWVNNGMTCsFQ4OoQAAAJwAAACIAAAAZwAA
+ AEUAAAApAAAAGQAAAA0AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAApFBQZbUlJm5ppafrNsbH/8ebm//Dj
+ 4//s3Nz/uqGh/4xubv+CZmb/oIeH/+vY2P/69vb/+fT0//fv7//q19f/n4eH/1o8PP9POqT/fXDO/zop
+ nP8mGGz/3MbJ//Di4v/RpKT/9ezs/+3d3f/s2tr/6tfX/+fR0f/mzs7/38fG/8enpv+vh4X/mm1r/ole
+ XeJWPDu0IRYWogMBAaEAAACQAAAAcQAAAE8AAAAwAAAAHAAAABAAAAAGAAAAAQAAAACLX16TrIaE/+PT
+ 0//z6Oj/8eXl/9/Ozv+niYn/kXFx/4hqav9/Y2P/nYWF/+rX1//59fX/+PPz//bu7v/s2dn/nYKC/3RN
+ Tf9qRpT/cV3n/2BQv/8tIH3/v6Wv/+/h4f/RpKT/9evr/+3c3P/r2Nj/5c3N/9O1tf+Td4b/jnWP/9vC
+ xf/mz8//4cjI/8urq/+0jYz/n3Jw/5JkY/FmRka+LiAfpAcFBaIAAACWAAAAewAAAFgAAAA3AAAAHgAA
+ AAmVZ2XT4tLS//Tq6v/x5eX/zbW1/6F/f/+Wdnb/jW9v/4RoaP97YWH/m4OD/+rW1v/59PT/+PLy//bv
+ 7//u3t7/yrCw/4xeXv+MXV//Xj6Y/0czqf9BL3H/2ry9/+/g4P/RpKT/9evr/+zb2//q1tb/1r29/1pC
+ Sf86LIf/KBp7/0c2cf/fxsf/4MPD/9iysv/jyMj/4MXF/9Cvrv+5kpH/pHd1/5doZvl1UVDLPispqQ8K
+ CqAAAACaAAAAeQAAADOWZWTd5tbW/+rb2/+9nZ3/pYGB/5x6ev+Tc3P/imxs/4BlZf9+ZWX/wKmp/+nW
+ 1v/48/P/9/Hx//bv7//x5eX/69jY/6qFhf91Tk7/YEBA/041Nf+skpL/5MvL/+7f3//RpKT/9evr/+za
+ 2v/q19f/jnV1/1k7S/9mVsX/XU64/ygZff+chJv/3r+//9WsrP/r2dn/4cbG/+DExP/gwsL/38DA/9Ox
+ sP++l5b/qX17/5lraf2CWljZEQsLoAAAAGOVY2Pc49LS/7eSkv+qhYX/oX5+/5h3d/+PcHD/hmlp/5Z8
+ fP/XwcH/5c3N/+nU1P/48vL/9/Dw//bu7v/17Oz/7+Hh/+nW1v+vlpb/jnV1/8Kqqv/mzs7/6tfX/+7e
+ 3v/RpKT/9Orq/+za2v/s2tr/kXNz/3tSUv9lRr7/cGDX/0M0m/+FbZH/3r6+/9ixsf/z6en/4cXF/+HF
+ xf/ky8v/17m5/6KFkv+vkJ3/27m5/9Wxsf+0ion/YEJBuAAAAHOVY2Pc49HR/7GLi/+ng4P/nnx8/5V1
+ df+Nb2//tZ2d/+XQ0P/mz8//5MzM/+nU1P/38fH/9+/v//jy8v/27+//8+np//Dh4f/t3Nz/69jY/+rX
+ 1//r2dn/7t7e/+3d3f/Ro6P/9Orq/+vY2P/u3t7/xqqq/5BfX/9/VGD/UzeN/0Ascv/Cpqz/3r6+/9ix
+ sf/z6Oj/4MTE/+fQ0P/Wvr7/XERS/zgqhP8jFm7/i3CL/9q3t//Fnp3/bUtJwQAAAHOVY2Pc49HR/66K
+ iv+jgID/mnl5/5Fycv+xmJj/xa6u/8Cpqf+/qKj/1r29/+jT0//38PD/4cTE/+bOzv/y5ub/+/j4//v4
+ +P/48fH/9Orq//Dj4//v4OD/7t7e/+3c3P/Ro6P/9Onp/+rX1//t29v/69nZ/62MjP9oRkb/Vzw8/6GI
+ iP/ky8v/3r+//9aurv/z6Oj/4MPD/+vY2P+SeXn/XD1X/2xdyv9MPKn/MiJv/9eys//Fnp3/aklIvwAA
+ AHOVY2Pc49HR/6yJif+gfX3/l3Z2/41vb/+EaGj/e2Fh/3JaWv9pU1P/tp2d/+jS0v/37+//48jI/9ex
+ sf/Pn5//zZyc/9aurv/ixcX/7dvb//jy8v/8+vr/+PPz//Tr6//SpaX/9Onp/+rW1v/p1NT/7dzc/+zb
+ 2//Tvr7/2sXF/+jS0v/mz8//3r6+/9aurv/z6Oj/4MLC/+3c3P+jhYX/hVla/2VHwv9hUMf/Nyh//9Wy
+ tP/FnZz/aklIvwAAAHSVY2Pc49DQ/7OTk/+gf3//k3R0/4psbP+BZWX/eF5e/29XV/9mUFD/tJub/+fR
+ 0f/27+//9e3t//Tr6//z6Oj/7Nvb/+PIyP/atrb/0qWl/8yamv/RpKT/3Lq6/+jR0f/RpKT/9Orq//r1
+ 9f/17Oz/8OLi/+7f3//t3Nz/7Nra/+jT0//jycn/3r6+/9atrf/z6Oj/38HB/+rX1//ZwcH/jF9f/3FL
+ Uf9LMWP/gGd7/96+vv/FnZz/a0pJwAAAAHaVY2Pc48/P/+7g4P/s3Nz/4s7O/6WLi/99Y2P/dFtb/2tU
+ VP9iTU3/s5qa/+fQ0P/07Oz/9ezs//Tq6v/z6Oj/8ubm/9G4t//cvb3/3r6+/+LGxv/ixsb/3Lq6/9Sr
+ q//NnJz/zZyc/9evr//ixsb/7t3d//nz8//8+fn/9+/v//Dj4//q1tb/4MLC/9Wrq//z5+f/38DA/+HF
+ xf/t3Nz/ybCw/4BlZf+Xf3//4cjI/96+vv/Gnp3/cExLxAAAAHeVY2Pc4s7O/+7e3v/VwMD/mX19/4Nn
+ Z/96YGD/cVlZ/2hSUv9fS0v/tZub/93Cwv+mfXv/9fT0/9nGxv/dzMz/8Obm/6N5d//MoqL/4MPD/97A
+ wP/YtLT/27m5/+DDw//kysr/4sfH/928vP/Wrq7/0KGh/8yamv/SpaX/3bu7/+jS0v/06en/9Orq/9Wr
+ q//59PT/69nZ/+TKyv/ix8f/7dvb/+za2v/r19f/5MvL/9izs//GnZ3/cExLxAAAAHeVY2Pc38rK/7uh
+ of+Sc3P/iGtr/39kZP92XV3/bVZW/3FbW/+zmpr/38LC/9zAwP+id3b/8vLy/7yenv/JtbX/6uXl/6J3
+ df/NpKT/zcnJ/9LOzv/t5ub/6dvb/+HLy//dwMD/27q6/9y7u//fwcH/4sbG/+HFxf/dvLz/17Cw/9Kl
+ pf/Nm5v/zZub/86env/jx8f/7t7e//n09P/8+vr/9+/v//Pn5//p1dX/3by8/9iysv/FnZz/cExLxAAA
+ AHeVY2Pc2MHB/5d2dv+Ob2//hWho/3xhYf91XFz/noaG/9rAwP/hxcX/38LC/9u/v/+cbmz/vqCg/6qB
+ gf+/pqb/4djY/6B0c//OpaX/HxkZ/wAAAP8YFxf/TktL/4N8fP+3q6v/18fH/9nFxf/Xvr7/17u7/9m7
+ u//dv7//4cTE/+LGxv/hxcX/3by8/9ewsP/Sp6f/zp6e/8yamv/Spqb/3by8/+jS0v/06en//Pr6//r1
+ 9f/QsbH/cExLxAAAAHeVY2Pc17+//5N0dP+KbW3/gWZm/492dv/MtLT/48rK/93Cwv+ii4v/tpub/9u/
+ v/+dcG7/u56e/6Fzc/+cbGz/oHFx/59zcf/Qp6f/HxkZ/wAAAP8AAAD/AAAA/wAAAP8AAAD/DQsL/zUw
+ MP9iWFj/inp6/7CZmf/EqKj/xaam/8ipqf/Nr6//1be3/93Cwv/kysr/48fH/96/v//XsbH/06en/8+g
+ oP/Mmpr/zp2d/9q2tv/KpaT/cExLxAAAAHeVY2Pc1r6+/5Bxcf+NcHD/u6Ki/+TNzf/jysr/s5ub/2tX
+ V/9RQED/qpCQ/9u+vv+hdnT/6Ojo/7CNjf/Jurr/3tbW/55ycP/Sq6r/Hxoa/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAEAP8AJQD/ADIA/wEPAP8QDg7/Mioq/1NERP92X1//lXZ2/6uEhP+wh4f/uZOT/8ys
+ rP/lzs7/2ra2/9m0tP/YsrL/1ays/9Srq//Fm5r/cExLxAAAAHiVY2Pc1b29/62Skv/eyMj/5tDQ/8Or
+ q/9+aGj/X0tL/1ZERP9NPT3/qY6O/9u+vv+Zamj/pHh4/55ubv+wj4//yrS0/55xcP/Traz/Hxoa/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAsAP8PdB//F4kv/wdMD/8ABQD/AAAA/wAAAP8AAAD/AAAA/wgG
+ Bv8lHBz/Szc3/4hgYP/Hpqb/2ra2/9i0tP+8nZ3/wJ+f/9aurv/Empn/cExLxAAAAHmVY2Pc3sbG/+nV
+ 1f/Qubn/knl5/25WVv9lT0//XEhI/1NBQf9KOjr/p4yM/9q9vf+ec3H/zL29/6J3d/+rh4f/uJaW/51v
+ bf/VsLD/Hxoa/wAAAP8AAAD/AAAA/wAAAP8AAAD/AA0A/wlMEP9ww3v/oeKl/zKORf8CJQX/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/0YxMP+/nZz/2bW1/7Sbm/9gX1//S0pK/6CFhf/Fm5r/c09OxwAA
+ AHqVY2Pc3cXF/6eOjv99YmL/c1tb/2pTU/9hTEz/WEVF/08+Pv9YR0f/vJ6e/9q8vP+fdXP/3dzc/6Z+
+ fv/Jv7//3dbW/51vbf/WsrL/IBsb/wAAAP8AAAD/AAAA/wAAAP8AAAD/ABsA/0uRUv+I0I3/Xrpt/223
+ c/8LShX/AAQA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0o0M//BoKD/2bS0/7Khof+VlZX/YWFh/2xf
+ X//Gm5r/c1BOyQAAAHuVY2Pc3MPD/4pvb/95X1//cFhY/2dRUf9eSkr/ZVFR/6GIiP/Yt7f/27m5/9q9
+ vP+ZaWj/nnBw/5tpaf+si4v/w6qq/5xvbf/YtbT/IBsb/wAAAP8AAAD/AAAA/wAAAP8AAQD/CzcO/3W8
+ dv8jcS3/E2ki/2u2bv8faCv/AA8A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0s0M//CoqH/2LOz/8+2
+ tv+wsLD/ZWVl/454eP/Fmpn/c1BOyQAAAHuVY2PW2sDA/4dsbP91XFz/bFVV/3JcXP+oj4//2ry8/92+
+ vv/Pr6//z66u/9m7u/+ec3H/yb29/55wcP+tjo7/uJeX/5xtbP/auLj/Hxoa/wAAAP8AAAD/AAAA/wAA
+ AP8ABgD/L2ky/0aIR/8AKwD/ACwB/zyEQf85hUH/ARwD/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/002
+ Nf/EpaT/2LKy/9awsP+8oKD/spWV/9Oqqv/FmZn/c1BOyQAAAHuVY2PU2L6+/4Npaf9/Zmb/r5aW/9zB
+ wf/gwsL/y66u/4ZwcP9ENjb/tJaW/9m7u/+edHL/0tHR/59xcf/GwcH/18/P/5xubP/burr/GhYW/wAA
+ AP8QEBD/GRkZ/w8PD/8BDgH/TZdO/xhEGP8AFwD/AB8A/xdHGv9LmE3/AyUH/wACAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/083Nv/Gp6b/17Gx/9avr//Tra3/yqSk/9Sqqv/FmZj/c1BOyQAAAHuVY2PU2L29/7yj
+ o//fxsb/4sfH/8esrP+Ebm7/Tj4+/0EzM/85LCz/s5SU/97Bwf+fc3H/nG9t/5lqaP+lgoH/v6Sj/5xt
+ bP/cvLz/NzU0/26Tbv9pa2n/YmJi/1xcXP9QZ1H/UZVR/wAOAP8AAAD/AAsA/wEYAv9IlUn/DjIQ/wAF
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/1I4N//Iqqr/17Cw/9Ovr/+Sjo7/SUdH/7OSkv/EmJj/c1BOyQAA
+ AHuVY2PU2Ly8/+TMzP/Dqqr/hW5u/1pHR/9QPz//Rzg4/z4xMf81Kir/spKS/+PHx//r3Nz/4MzM/9W8
+ vP/Kraz/zbGw/5xta//ev7//WFVU/4esh/94iXj/aWlp/2NjY/92l3b/bY5t/xwfHP8AAAD/AAAA/wAI
+ AP8sYyz/IE4g/wAFAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1Q6Of/Kraz/1q+v/9G4uP++vr7/Wlpa/3xu
+ bv/El5f/c1BOyQAAAHyVY2PU17q6/411df9nUVH/XkpK/1VDQ/9MPDz/QzU1/zouLv8yJyf/sJGR/+PI
+ yP/v4eH/7t/f/+7e3v/t3Nz/6NXV/5xta//fwcH/W1hY/4KTgv+Hq4f/b29v/2lqaf+EsoT/ZnJm/1dY
+ V/8tLS3/AQEB/wAAAP8TLxP/LnEu/wABAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1c8O//MsK//1q6u/9e0
+ tP/v7Oz/q6ur/7eamv/El5f/dlFQywAAAH6VY2PU1rm5/3ZfX/9kTk7/W0dH/1JAQP9JOTn/QDIy/0s8
+ PP+WfHz/1K2t/+LHx//v4OD/uK6u/5WNjf/Vxsb/6NTU/5xtbP/gxMP/X1xc/4KDgv+OuI7/eoN6/3V/
+ df+GtIb/ZGVk/15eXv9ZWVn/PT09/wYGBv8CBgL/MYQx/wYSBv8AAAD/AQQB/wweDP8FBQX/AAAA/1k+
+ Pf/OtLP/1q2t/9WsrP/Ura3/0ays/9Kmpv/FmJf/eVRTzgAAAH+VY2PU1be3/3NcXP9gTEz/V0VF/04+
+ Pv9GNzf/l319/9Sxsf/YsrL/1q6u/+LGxv/f0tL/b29v/1xcXP9ZVlb/5tPT/51vbf/ixsb/Yl9f/4iI
+ iP+KoIr/i7KL/4iviP9+l37/a2tr/2VlZf9fX1//WVlZ/0pKSv8gISD/KmAq/ypXKv8mJib/OVI5/z96
+ P/8rKyv/GRkZ/1s/Pv/Qtrb/1a2t/9KoqP/Cl5b/1Kur/9Klpf/Fl5f/eVRTzgAAAH+VY2PU1ba2/29Z
+ Wf9eSkr/eWNj/049Pf9DNTX/1LKy/9izs//XsLD/1a2t/+LGxv/bz8//urq6/3Z2dv9JSUn/4c3N/5xu
+ bP/iyMj/ZmNj/46Ojv+JiYn/iqCK/4afhv93eXf/cXFx/2tra/9mZmb/YGBg/1paWv9UVFT/U15T/16c
+ Xv9GU0b/SYBJ/z1aPf8xMTH/Kysr/2ZJR//Tu7r/1ays/82jo/+ieXf/3djY/9Glpf/Elpb/eVRTzgAA
+ AH+VY2PU1LW1/2xXV/94YmL/3Ly8/04+Pv8/MjL/1LCw/9iysv/Wr6//1aur/+HFxf/s3d3/vLm5/3Nz
+ c/+Nhob/59LS/5xubP/jycn/b2xs/5WVlf+Pj4//iYmJ/4ODg/99fX3/eHh4/3Jycv9sbGz/ZmZm/2Fh
+ Yf9bW1v/VVVV/1d0V/9Xmlf/TYdN/z5APv84ODj/MjIy/21QT//Vv77/1Kur/9Cmpf+cbmz/nnNy/8ue
+ nf/ElpX/eVRTzgAAAH+VY2PU07S0/2lUVP92YWH/27u7/0o7O/88Ly//06+v/9ewsP/Vra3/1Kqq/+DE
+ xP7t3d3/69ra/+HQ0P/q19f/6NTU/51wbv/gxsb/saGh/6CYmP+FgYH/cnFx/3BwcP95eXn/fX19/3h4
+ eP9zc3P/bW1t/2dnZ/9hYWH/XFxc/1ZWVv9RVVH/Sk1K/0RERP8+Pj7/OTk5/3NUUv/YxcT/1Kur/9Oo
+ qP/NoaH/w5aW/8+hof/ElZX/eVRTzgAAAH+VY2PU07Oz/2ZRUf9zXl7/2rq6/0c4OP9VRET/1K+v/9av
+ r//VrKz/06io/+DDw/7t3Nz/7Nra/+vY2P/q19f/6dXV/6+Ihv+4kpH/4MfH/+jT0//p1NT/5tPT/9XE
+ xP+4qqr/oZaW/5CJif+Aenr/bWpq/1taWv9UU1P/WVlZ/1tbW/9XV1f/UVFR/0tLS/9FRUX/Pz8//3VW
+ VP/ayMf/1a2t/8+lpf+MeHj/f2xs/8KYmP/DlJT/eVRTzgAAAH+VY2PU0rGx/2JPT/9xXFz/2rm5/6SI
+ iP/WsbH/17Gx/9Wtrf/Uqqr/0qen/9/Cwv7s29v/69nZ/+rX1//p1tb/6NTU/9/Gxv+uhoT/m2xq/6V6
+ ef+zjYz/v52c/8qtrP/VvLv/4MvL/+rZ2f/w4eH/8ePj//Dj4//l2tr/ysHB/7Grq/+dmJj/iIWF/3Nx
+ cf9cW1v/QUFB/3lZWP/ezs3/1q2t/7GUlP9wcHD/WFhY/2tbW//DlJP/eVRTzgAAAIGVY2PU0rCw/19M
+ TP9uWVn/27m5/9m1tf/YsrL/1q+v/9WsrP/Tqan/0qWl/9/Cwv7s2tr/69jY/+rX1//p1dX/6NPT/+fR
+ 0f/mz8//3sTE/82urf/AnJz/tY6N/6yCgf+jd3X/m21r/5praf+gdHL/q4OB/7aTkf/Co6L/z7a1/9zJ
+ yP/q3dz/9e3t//jy8v/59PT/9/Pz//n19f/69vb/06mp/8Cnp/+6urr/a2tr/15VVf/ElZT/fldW0wAA
+ AIKVY2PU0a+v/1xJSf9vWlr/2re3/9m0tP/XsbH/1q6u/9Opqf7Pp6f317q68eve3vrx5eX+7+Hh/u3d
+ 3f7r2dn+6dXV/ufR0f7lzs7+5c3N/+TLy//jycn/4sfH/+HFxf/gw8P/38HB/9i3t//Oq6v/xaCf/7yU
+ k/+ziYj/qn59/6Fzcf+aa2r/m21r/6d/ff+1k5L/xKin/9XBwP/bxcT/0aWl/8+mpv+nn5//bmtr/6GC
+ gv/ElJT/fVdV0wAAAIKVY2PU0a6u/56EhP/SsbH/2ba2/9iysv/Vrq7+1LOz9d7JyfPu5OT58+np//Po
+ 6P/y5ub/8eXl//Hk5P/w4uL/7+Hh/+/g4P/t3d3+69ra/unW1v7n09P+5s/P/uTLy/7ix8f+4MPD/t7A
+ wP7cvb3+3Lu7/9u6uv/buLj/2ra2/9m0tP/WsLD/zaWl/8OZmP+6jo3/sYSD/6d5eP+ecG7/zJ+f/9Gk
+ pP/QoqL/zp+f/86env/Ek5P/fVdV0wAAAIKVY2PU0a2t/9y6uv/at7f/17S0+9u+vvbm1dX28ebm/vLm
+ 5v/x5eX/8ePj//Di4v/v4eH/7uDg/+7e3v/t3d3/7Nzc/+za2v/r2dn/6tjY/+rW1v/p1dX/6NPT/+jS
+ 0v/n0dH/5s/P/+XNzf7jy8v+4sjI/uDExP7ewcH+3b29/tu5uf7Ztrb+17Ky/tWurv7VrKz/1Kqq/9Oo
+ qP/Spqb/0aWl/9Cjo//PoaH/z5+f/86dnf/Dk5L/gVlX1AAAAHGWZ2bV0Kys/tu8vPrizMz47d/f+vHl
+ 5f/w4+P/8OLi/+/h4f/u39//7t7e/+3d3f/s29v/7Nra/+vZ2f/q19f/6tbW/+nV1f/o09P/6NLS/+fR
+ 0f/mz8//5s7O/+XNzf/ky8v/48rK/+PJyf/ix8f/4sbG/+HFxf/gw8P/4MLC/9/Bwf/ev7//3r6+/9y7
+ u/7bubn+2ba2/teysv7Vr6/+1Kur/tKnp/7QpKT+zqCg/siXl/60g4L/glpYyQAAADuXaGahnnFv/ql+
+ fv6yior/uZSU/8Cenv/HqKj/zrGx/9W6uv/bw8P/4cvL/+bR0f/p1dX/6dTU/+jT0//n0tL/59DQ/+bP
+ z//lzs7/5czM/+TLy//jysr/48jI/+LHx//hxsb/4cTE/+DDw//fwsL/38DA/96/v//evr7/3by8/9y7
+ u//curr/27i4/9q3t//atrb/2bS0/9izs//XsbH/0Kio/8GVlf+xg4P/onFx/phnZv2TZWTWa0lGTAAA
+ AAp/X18IkWVlP49eXlmQX19ukF9fhJJhYZmSYGCuk2Jiw5ZkZNiWZGTql2Zm+ZpoaP6ebW3/o3V1/6p9
+ ff+whob/t46O/72Wlv/Dnp7/yaWl/86trf/Us7P/2bq6/92+vv/ewMD/3r+//92+vv/dvLz/3Lu7/9u6
+ uv/buLj/2re3/9q2tv/ZtLT/2LOz/9exsf/Pp6f/wJSU/7CCgv+hcHD/mGZm+5FiYtGMXV2Xf1ZWXGlG
+ RiMAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/f38CjVVVCZNi
+ YhqRY2MxkF9fR49fX16PXl50kF9fiZJhYZ6SYWGylGJiyJVjY9yXZGTvmGZm/JpoaP+ebGz/o3Nz/6l6
+ ev+ugYH/s4eH/7mNjf++k5P/w5qZ/8Scm/++lJP/r4GB/6Bvb/+YZmb6kWFhzotcXJOBVVVYZENDHQAA
+ AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAACi1xcC4ta
+ Wh+QXV02jF5eTZBgYGOQX194kGBgjZJiYqOTYmK3lWVlzpVnZtaTZmPHjF5ekYFWVlRjOzsYAAAAAwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gA////////8AAP///////AAAH///
+ ///4AAAD//////AAAAB/////wAAAAAf///+AAAAAAP///wAAAAAAH///AAAAAAAB//8AAAAAAAD//wAA
+ AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
+ //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA
+ AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
+ //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA
+ AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAP///+AAAAAP//////4AAP/
+ //8=
+
+
+
\ No newline at end of file
diff --git a/Nifscan/FormParallax.Designer.cs b/Nifscan/FormParallax.Designer.cs
new file mode 100644
index 0000000..c07b13e
--- /dev/null
+++ b/Nifscan/FormParallax.Designer.cs
@@ -0,0 +1,132 @@
+namespace Nifscan
+{
+ partial class FormParallax
+ {
+ private System.ComponentModel.IContainer components = null;
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.CheckBox checkBox1;
+ private System.Windows.Forms.CheckBox checkBox2;
+ private System.Windows.Forms.CheckBox checkBox3;
+ private System.Windows.Forms.CheckBox checkBox4;
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormParallax));
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.button1 = new System.Windows.Forms.Button();
+ this.checkBox1 = new System.Windows.Forms.CheckBox();
+ this.checkBox2 = new System.Windows.Forms.CheckBox();
+ this.checkBox3 = new System.Windows.Forms.CheckBox();
+ this.checkBox4 = new System.Windows.Forms.CheckBox();
+ this.SuspendLayout();
+ //
+ // textBox1
+ //
+ this.textBox1.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.textBox1.Location = new System.Drawing.Point(12, 25);
+ this.textBox1.MaxLength = 999999999;
+ this.textBox1.Multiline = true;
+ this.textBox1.Name = "textBox1";
+ this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both;
+ this.textBox1.Size = new System.Drawing.Size(540, 222);
+ this.textBox1.TabIndex = 0;
+ //
+ // label1
+ //
+ this.label1.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.label1.Location = new System.Drawing.Point(12, 2);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(540, 21);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "List of _n.dds textures for which is necessary set parallax flags:";
+ this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // button1
+ //
+ this.button1.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.button1.Location = new System.Drawing.Point(454, 258);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(99, 35);
+ this.button1.TabIndex = 5;
+ this.button1.Text = "Save";
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // checkBox1
+ //
+ this.checkBox1.Enabled = false;
+ this.checkBox1.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox1.Location = new System.Drawing.Point(12, 275);
+ this.checkBox1.Name = "checkBox1";
+ this.checkBox1.Size = new System.Drawing.Size(228, 25);
+ this.checkBox1.TabIndex = 2;
+ this.checkBox1.Text = "Invert (remove flags for listed)";
+ this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
+ //
+ // checkBox2
+ //
+ this.checkBox2.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox2.Location = new System.Drawing.Point(12, 253);
+ this.checkBox2.Name = "checkBox2";
+ this.checkBox2.Size = new System.Drawing.Size(228, 25);
+ this.checkBox2.TabIndex = 1;
+ this.checkBox2.Text = "Compare _p.dds with _n.dds";
+ this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged);
+ //
+ // checkBox3
+ //
+ this.checkBox3.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox3.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox3.Location = new System.Drawing.Point(246, 253);
+ this.checkBox3.Name = "checkBox3";
+ this.checkBox3.Size = new System.Drawing.Size(202, 25);
+ this.checkBox3.TabIndex = 3;
+ this.checkBox3.Text = "Add parallax Flags";
+ this.checkBox3.CheckedChanged += new System.EventHandler(this.checkBox3_CheckedChanged);
+ //
+ // checkBox4
+ //
+ this.checkBox4.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox4.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox4.Location = new System.Drawing.Point(246, 275);
+ this.checkBox4.Name = "checkBox4";
+ this.checkBox4.Size = new System.Drawing.Size(202, 25);
+ this.checkBox4.TabIndex = 4;
+ this.checkBox4.Text = "Complite remove Flags";
+ this.checkBox4.CheckedChanged += new System.EventHandler(this.checkBox4_CheckedChanged);
+ //
+ // FormParallax
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(564, 304);
+ this.Controls.Add(this.checkBox4);
+ this.Controls.Add(this.checkBox3);
+ this.Controls.Add(this.checkBox2);
+ this.Controls.Add(this.checkBox1);
+ this.Controls.Add(this.button1);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.textBox1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.Name = "FormParallax";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Parallax features";
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/Nifscan/FormParallax.cs b/Nifscan/FormParallax.cs
new file mode 100644
index 0000000..1117f3a
--- /dev/null
+++ b/Nifscan/FormParallax.cs
@@ -0,0 +1,80 @@
+using System;
+using System.Windows.Forms;
+
+namespace Nifscan
+{
+ public partial class FormParallax : Form
+ {
+ public FormParallax()
+ {
+ InitializeComponent();
+ checkBox1.Checked = FormMain.parallaxInvert;
+ checkBox2.Checked = FormMain.parallaxCompare;
+ checkBox3.Checked = FormMain.parallaxAdd;
+ checkBox4.Checked = FormMain.parallaxRemove;
+ if (FormMain.texturesList.Count > 0)
+ {
+ textBox1.Clear();
+ textBox1.AppendText(String.Join(Environment.NewLine, FormMain.texturesList));
+ }
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ FormMain.texturesList.Clear();
+ foreach (string line in textBox1.Lines)
+ {
+ if (!String.IsNullOrEmpty(line))
+ {
+ FormMain.texturesList.Add(line);
+ }
+ }
+ Dispose();
+ }
+
+ private void checkBox1_CheckedChanged(object sender, EventArgs e)
+ {
+ FormMain.parallaxInvert = checkBox1.Checked;
+ }
+
+ private void checkBox2_CheckedChanged(object sender, EventArgs e)
+ {
+ FormMain.parallaxCompare = checkBox2.Checked;
+ }
+
+ private void checkBox3_CheckedChanged(object sender, EventArgs e)
+ {
+ if (checkBox3.Checked)
+ {
+ checkBox4.Checked = false;
+ }
+ else
+ {
+ checkBox1.Checked = false;
+ }
+ changeState();
+ }
+
+ private void checkBox4_CheckedChanged(object sender, EventArgs e)
+ {
+ if (checkBox4.Checked)
+ {
+ checkBox1.Checked = false;
+ checkBox3.Checked = false;
+ }
+ changeState();
+ }
+
+ private void changeState()
+ {
+ checkBox1.Enabled = checkBox3.Checked && !checkBox4.Checked;
+ checkBox2.Enabled = !checkBox3.Checked && !checkBox4.Checked;
+ checkBox2.Checked = false;
+ FormMain.parallaxAdd = checkBox3.Checked && !checkBox4.Checked;
+ FormMain.parallaxRemove = checkBox4.Checked && !checkBox3.Checked;
+ FormMain.parallaxInvert = checkBox1.Checked;
+ FormMain.parallaxCompare = checkBox2.Checked;
+ FormMain.formMain.buttonColorParallax(checkBox3.Checked || checkBox4.Checked);
+ }
+ }
+}
diff --git a/Nifscan/FormParallax.resx b/Nifscan/FormParallax.resx
new file mode 100644
index 0000000..4fc9c37
--- /dev/null
+++ b/Nifscan/FormParallax.resx
@@ -0,0 +1,228 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ AAABAAEAMGAAAAEAIACoJQAAFgAAACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADgAAADEAAABlAAAAfAAA
+ AGwAAABIAAAAKQAAABkAAAANAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAZIBQUU2xK
+ SbKEW1nZZkZFvCIXF6MDAgKhAAAAkAAAAHMAAABPAAAAMQAAABwAAAAQAAAABgAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACQAA
+ AChAKyt6jV5e57WQj//dzMz/v6Gg/6J3df+SZWPxZ0dFvzAhIaUHBQWgAAAAlwAAAHwAAABZAAAAOAAA
+ ACEAAAATAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAIAAAASDQcHQGNCQqSba2v8zK6u/+3d3f/8+vr/+/j4//j09P/j1NT/xamo/6iAfv+XaGb5dVFQzD8r
+ K6kQCwqgAAAAmwAAAIQAAABjAAAAQQAAACYAAAAXAAAACwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAABgAAAB8qHBxiglZW0Kp/f//gysr/69nZ/+zb2//8+fn/+/f3//r29v/59PT/+PLy//fw
+ 8P/o2tr/y7Kx/6+JiP+abGr9g1pZ2083NrAaEhKhAgEBnwAAAIwAAABtAAAASgAAAC0AAAAbAAAADwAA
+ AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAIAAAAMAAAAL04zM4qTY2PxwJ6e/+zb2//s29v/69jY/+zb2//7+Pj/+vb2//n1
+ 9f/48/P/8+jo/+nU1P/mzc3/69fX//Pp6f/r3d3/0bm4/7aSkf+dcW/+jWFf6V5BQbkpHBujBQMDoQAA
+ AJMAAAB2AAAAVAAAADQAAAAfAAAAEgAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgWDw9NcktLtqBycv7YwcH/7+Dg/+3d3f/k0dH/xa6u/+za
+ 2v/79/f/+vb2//n09P/06ur/5c3N/9W4uP+BZ3P/WkV1/4t2kv/u4eH/8eXl//Dj4//o09P/1r28/7ya
+ mf+jeHb/k2Zk9G5MSsU3JiWnCwgHoQAAAJkAAAB/AAAAXgAAADwAAAAjAAAAFQAAAAoAAAACAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAITckJHKKXFzgtI2N/+na2v/w4uL/7t7e/9K9
+ vf+QdXX/o4qK/+vZ2f/69vb/+fX1//jz8//s2tr/3sXF/2VMTP86KHf/PS6Q/yMWcv94ZYr/8eTk//Di
+ 4v/RpKT/6tfX/+3d3f/r2tr/28TE/8KhoP+pf37/l2ln+3tWVNNGMTCsFQ4OoQAAAJwAAACIAAAAZwAA
+ AEUAAAApAAAAGQAAAA0AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAApFBQZbUlJm5ppafrNsbH/8ebm//Dj
+ 4//s3Nz/uqGh/4xubv+CZmb/oIeH/+vY2P/69vb/+fT0//fv7//q19f/n4eH/1o8PP9POqT/fXDO/zop
+ nP8mGGz/3MbJ//Di4v/RpKT/9ezs/+3d3f/s2tr/6tfX/+fR0f/mzs7/38fG/8enpv+vh4X/mm1r/ole
+ XeJWPDu0IRYWogMBAaEAAACQAAAAcQAAAE8AAAAwAAAAHAAAABAAAAAGAAAAAQAAAACLX16TrIaE/+PT
+ 0//z6Oj/8eXl/9/Ozv+niYn/kXFx/4hqav9/Y2P/nYWF/+rX1//59fX/+PPz//bu7v/s2dn/nYKC/3RN
+ Tf9qRpT/cV3n/2BQv/8tIH3/v6Wv/+/h4f/RpKT/9evr/+3c3P/r2Nj/5c3N/9O1tf+Td4b/jnWP/9vC
+ xf/mz8//4cjI/8urq/+0jYz/n3Jw/5JkY/FmRka+LiAfpAcFBaIAAACWAAAAewAAAFgAAAA3AAAAHgAA
+ AAmVZ2XT4tLS//Tq6v/x5eX/zbW1/6F/f/+Wdnb/jW9v/4RoaP97YWH/m4OD/+rW1v/59PT/+PLy//bv
+ 7//u3t7/yrCw/4xeXv+MXV//Xj6Y/0czqf9BL3H/2ry9/+/g4P/RpKT/9evr/+zb2//q1tb/1r29/1pC
+ Sf86LIf/KBp7/0c2cf/fxsf/4MPD/9iysv/jyMj/4MXF/9Cvrv+5kpH/pHd1/5doZvl1UVDLPispqQ8K
+ CqAAAACaAAAAeQAAADOWZWTd5tbW/+rb2/+9nZ3/pYGB/5x6ev+Tc3P/imxs/4BlZf9+ZWX/wKmp/+nW
+ 1v/48/P/9/Hx//bv7//x5eX/69jY/6qFhf91Tk7/YEBA/041Nf+skpL/5MvL/+7f3//RpKT/9evr/+za
+ 2v/q19f/jnV1/1k7S/9mVsX/XU64/ygZff+chJv/3r+//9WsrP/r2dn/4cbG/+DExP/gwsL/38DA/9Ox
+ sP++l5b/qX17/5lraf2CWljZEQsLoAAAAGOVY2Pc49LS/7eSkv+qhYX/oX5+/5h3d/+PcHD/hmlp/5Z8
+ fP/XwcH/5c3N/+nU1P/48vL/9/Dw//bu7v/17Oz/7+Hh/+nW1v+vlpb/jnV1/8Kqqv/mzs7/6tfX/+7e
+ 3v/RpKT/9Orq/+za2v/s2tr/kXNz/3tSUv9lRr7/cGDX/0M0m/+FbZH/3r6+/9ixsf/z6en/4cXF/+HF
+ xf/ky8v/17m5/6KFkv+vkJ3/27m5/9Wxsf+0ion/YEJBuAAAAHOVY2Pc49HR/7GLi/+ng4P/nnx8/5V1
+ df+Nb2//tZ2d/+XQ0P/mz8//5MzM/+nU1P/38fH/9+/v//jy8v/27+//8+np//Dh4f/t3Nz/69jY/+rX
+ 1//r2dn/7t7e/+3d3f/Ro6P/9Orq/+vY2P/u3t7/xqqq/5BfX/9/VGD/UzeN/0Ascv/Cpqz/3r6+/9ix
+ sf/z6Oj/4MTE/+fQ0P/Wvr7/XERS/zgqhP8jFm7/i3CL/9q3t//Fnp3/bUtJwQAAAHOVY2Pc49HR/66K
+ iv+jgID/mnl5/5Fycv+xmJj/xa6u/8Cpqf+/qKj/1r29/+jT0//38PD/4cTE/+bOzv/y5ub/+/j4//v4
+ +P/48fH/9Orq//Dj4//v4OD/7t7e/+3c3P/Ro6P/9Onp/+rX1//t29v/69nZ/62MjP9oRkb/Vzw8/6GI
+ iP/ky8v/3r+//9aurv/z6Oj/4MPD/+vY2P+SeXn/XD1X/2xdyv9MPKn/MiJv/9eys//Fnp3/aklIvwAA
+ AHOVY2Pc49HR/6yJif+gfX3/l3Z2/41vb/+EaGj/e2Fh/3JaWv9pU1P/tp2d/+jS0v/37+//48jI/9ex
+ sf/Pn5//zZyc/9aurv/ixcX/7dvb//jy8v/8+vr/+PPz//Tr6//SpaX/9Onp/+rW1v/p1NT/7dzc/+zb
+ 2//Tvr7/2sXF/+jS0v/mz8//3r6+/9aurv/z6Oj/4MLC/+3c3P+jhYX/hVla/2VHwv9hUMf/Nyh//9Wy
+ tP/FnZz/aklIvwAAAHSVY2Pc49DQ/7OTk/+gf3//k3R0/4psbP+BZWX/eF5e/29XV/9mUFD/tJub/+fR
+ 0f/27+//9e3t//Tr6//z6Oj/7Nvb/+PIyP/atrb/0qWl/8yamv/RpKT/3Lq6/+jR0f/RpKT/9Orq//r1
+ 9f/17Oz/8OLi/+7f3//t3Nz/7Nra/+jT0//jycn/3r6+/9atrf/z6Oj/38HB/+rX1//ZwcH/jF9f/3FL
+ Uf9LMWP/gGd7/96+vv/FnZz/a0pJwAAAAHaVY2Pc48/P/+7g4P/s3Nz/4s7O/6WLi/99Y2P/dFtb/2tU
+ VP9iTU3/s5qa/+fQ0P/07Oz/9ezs//Tq6v/z6Oj/8ubm/9G4t//cvb3/3r6+/+LGxv/ixsb/3Lq6/9Sr
+ q//NnJz/zZyc/9evr//ixsb/7t3d//nz8//8+fn/9+/v//Dj4//q1tb/4MLC/9Wrq//z5+f/38DA/+HF
+ xf/t3Nz/ybCw/4BlZf+Xf3//4cjI/96+vv/Gnp3/cExLxAAAAHeVY2Pc4s7O/+7e3v/VwMD/mX19/4Nn
+ Z/96YGD/cVlZ/2hSUv9fS0v/tZub/93Cwv+mfXv/9fT0/9nGxv/dzMz/8Obm/6N5d//MoqL/4MPD/97A
+ wP/YtLT/27m5/+DDw//kysr/4sfH/928vP/Wrq7/0KGh/8yamv/SpaX/3bu7/+jS0v/06en/9Orq/9Wr
+ q//59PT/69nZ/+TKyv/ix8f/7dvb/+za2v/r19f/5MvL/9izs//GnZ3/cExLxAAAAHeVY2Pc38rK/7uh
+ of+Sc3P/iGtr/39kZP92XV3/bVZW/3FbW/+zmpr/38LC/9zAwP+id3b/8vLy/7yenv/JtbX/6uXl/6J3
+ df/NpKT/zcnJ/9LOzv/t5ub/6dvb/+HLy//dwMD/27q6/9y7u//fwcH/4sbG/+HFxf/dvLz/17Cw/9Kl
+ pf/Nm5v/zZub/86env/jx8f/7t7e//n09P/8+vr/9+/v//Pn5//p1dX/3by8/9iysv/FnZz/cExLxAAA
+ AHeVY2Pc2MHB/5d2dv+Ob2//hWho/3xhYf91XFz/noaG/9rAwP/hxcX/38LC/9u/v/+cbmz/vqCg/6qB
+ gf+/pqb/4djY/6B0c//OpaX/HxkZ/wAAAP8YFxf/TktL/4N8fP+3q6v/18fH/9nFxf/Xvr7/17u7/9m7
+ u//dv7//4cTE/+LGxv/hxcX/3by8/9ewsP/Sp6f/zp6e/8yamv/Spqb/3by8/+jS0v/06en//Pr6//r1
+ 9f/QsbH/cExLxAAAAHeVY2Pc17+//5N0dP+KbW3/gWZm/492dv/MtLT/48rK/93Cwv+ii4v/tpub/9u/
+ v/+dcG7/u56e/6Fzc/+cbGz/oHFx/59zcf/Qp6f/HxkZ/wAAAP8AAAD/AAAA/wAAAP8AAAD/DQsL/zUw
+ MP9iWFj/inp6/7CZmf/EqKj/xaam/8ipqf/Nr6//1be3/93Cwv/kysr/48fH/96/v//XsbH/06en/8+g
+ oP/Mmpr/zp2d/9q2tv/KpaT/cExLxAAAAHeVY2Pc1r6+/5Bxcf+NcHD/u6Ki/+TNzf/jysr/s5ub/2tX
+ V/9RQED/qpCQ/9u+vv+hdnT/6Ojo/7CNjf/Jurr/3tbW/55ycP/Sq6r/Hxoa/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAEAP8AJQD/ADIA/wEPAP8QDg7/Mioq/1NERP92X1//lXZ2/6uEhP+wh4f/uZOT/8ys
+ rP/lzs7/2ra2/9m0tP/YsrL/1ays/9Srq//Fm5r/cExLxAAAAHiVY2Pc1b29/62Skv/eyMj/5tDQ/8Or
+ q/9+aGj/X0tL/1ZERP9NPT3/qY6O/9u+vv+Zamj/pHh4/55ubv+wj4//yrS0/55xcP/Traz/Hxoa/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAsAP8PdB//F4kv/wdMD/8ABQD/AAAA/wAAAP8AAAD/AAAA/wgG
+ Bv8lHBz/Szc3/4hgYP/Hpqb/2ra2/9i0tP+8nZ3/wJ+f/9aurv/Empn/cExLxAAAAHmVY2Pc3sbG/+nV
+ 1f/Qubn/knl5/25WVv9lT0//XEhI/1NBQf9KOjr/p4yM/9q9vf+ec3H/zL29/6J3d/+rh4f/uJaW/51v
+ bf/VsLD/Hxoa/wAAAP8AAAD/AAAA/wAAAP8AAAD/AA0A/wlMEP9ww3v/oeKl/zKORf8CJQX/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/0YxMP+/nZz/2bW1/7Sbm/9gX1//S0pK/6CFhf/Fm5r/c09OxwAA
+ AHqVY2Pc3cXF/6eOjv99YmL/c1tb/2pTU/9hTEz/WEVF/08+Pv9YR0f/vJ6e/9q8vP+fdXP/3dzc/6Z+
+ fv/Jv7//3dbW/51vbf/WsrL/IBsb/wAAAP8AAAD/AAAA/wAAAP8AAAD/ABsA/0uRUv+I0I3/Xrpt/223
+ c/8LShX/AAQA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0o0M//BoKD/2bS0/7Khof+VlZX/YWFh/2xf
+ X//Gm5r/c1BOyQAAAHuVY2Pc3MPD/4pvb/95X1//cFhY/2dRUf9eSkr/ZVFR/6GIiP/Yt7f/27m5/9q9
+ vP+ZaWj/nnBw/5tpaf+si4v/w6qq/5xvbf/YtbT/IBsb/wAAAP8AAAD/AAAA/wAAAP8AAQD/CzcO/3W8
+ dv8jcS3/E2ki/2u2bv8faCv/AA8A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0s0M//CoqH/2LOz/8+2
+ tv+wsLD/ZWVl/454eP/Fmpn/c1BOyQAAAHuVY2PW2sDA/4dsbP91XFz/bFVV/3JcXP+oj4//2ry8/92+
+ vv/Pr6//z66u/9m7u/+ec3H/yb29/55wcP+tjo7/uJeX/5xtbP/auLj/Hxoa/wAAAP8AAAD/AAAA/wAA
+ AP8ABgD/L2ky/0aIR/8AKwD/ACwB/zyEQf85hUH/ARwD/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/002
+ Nf/EpaT/2LKy/9awsP+8oKD/spWV/9Oqqv/FmZn/c1BOyQAAAHuVY2PU2L6+/4Npaf9/Zmb/r5aW/9zB
+ wf/gwsL/y66u/4ZwcP9ENjb/tJaW/9m7u/+edHL/0tHR/59xcf/GwcH/18/P/5xubP/burr/GhYW/wAA
+ AP8QEBD/GRkZ/w8PD/8BDgH/TZdO/xhEGP8AFwD/AB8A/xdHGv9LmE3/AyUH/wACAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/083Nv/Gp6b/17Gx/9avr//Tra3/yqSk/9Sqqv/FmZj/c1BOyQAAAHuVY2PU2L29/7yj
+ o//fxsb/4sfH/8esrP+Ebm7/Tj4+/0EzM/85LCz/s5SU/97Bwf+fc3H/nG9t/5lqaP+lgoH/v6Sj/5xt
+ bP/cvLz/NzU0/26Tbv9pa2n/YmJi/1xcXP9QZ1H/UZVR/wAOAP8AAAD/AAsA/wEYAv9IlUn/DjIQ/wAF
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/1I4N//Iqqr/17Cw/9Ovr/+Sjo7/SUdH/7OSkv/EmJj/c1BOyQAA
+ AHuVY2PU2Ly8/+TMzP/Dqqr/hW5u/1pHR/9QPz//Rzg4/z4xMf81Kir/spKS/+PHx//r3Nz/4MzM/9W8
+ vP/Kraz/zbGw/5xta//ev7//WFVU/4esh/94iXj/aWlp/2NjY/92l3b/bY5t/xwfHP8AAAD/AAAA/wAI
+ AP8sYyz/IE4g/wAFAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1Q6Of/Kraz/1q+v/9G4uP++vr7/Wlpa/3xu
+ bv/El5f/c1BOyQAAAHyVY2PU17q6/411df9nUVH/XkpK/1VDQ/9MPDz/QzU1/zouLv8yJyf/sJGR/+PI
+ yP/v4eH/7t/f/+7e3v/t3Nz/6NXV/5xta//fwcH/W1hY/4KTgv+Hq4f/b29v/2lqaf+EsoT/ZnJm/1dY
+ V/8tLS3/AQEB/wAAAP8TLxP/LnEu/wABAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1c8O//MsK//1q6u/9e0
+ tP/v7Oz/q6ur/7eamv/El5f/dlFQywAAAH6VY2PU1rm5/3ZfX/9kTk7/W0dH/1JAQP9JOTn/QDIy/0s8
+ PP+WfHz/1K2t/+LHx//v4OD/uK6u/5WNjf/Vxsb/6NTU/5xtbP/gxMP/X1xc/4KDgv+OuI7/eoN6/3V/
+ df+GtIb/ZGVk/15eXv9ZWVn/PT09/wYGBv8CBgL/MYQx/wYSBv8AAAD/AQQB/wweDP8FBQX/AAAA/1k+
+ Pf/OtLP/1q2t/9WsrP/Ura3/0ays/9Kmpv/FmJf/eVRTzgAAAH+VY2PU1be3/3NcXP9gTEz/V0VF/04+
+ Pv9GNzf/l319/9Sxsf/YsrL/1q6u/+LGxv/f0tL/b29v/1xcXP9ZVlb/5tPT/51vbf/ixsb/Yl9f/4iI
+ iP+KoIr/i7KL/4iviP9+l37/a2tr/2VlZf9fX1//WVlZ/0pKSv8gISD/KmAq/ypXKv8mJib/OVI5/z96
+ P/8rKyv/GRkZ/1s/Pv/Qtrb/1a2t/9KoqP/Cl5b/1Kur/9Klpf/Fl5f/eVRTzgAAAH+VY2PU1ba2/29Z
+ Wf9eSkr/eWNj/049Pf9DNTX/1LKy/9izs//XsLD/1a2t/+LGxv/bz8//urq6/3Z2dv9JSUn/4c3N/5xu
+ bP/iyMj/ZmNj/46Ojv+JiYn/iqCK/4afhv93eXf/cXFx/2tra/9mZmb/YGBg/1paWv9UVFT/U15T/16c
+ Xv9GU0b/SYBJ/z1aPf8xMTH/Kysr/2ZJR//Tu7r/1ays/82jo/+ieXf/3djY/9Glpf/Elpb/eVRTzgAA
+ AH+VY2PU1LW1/2xXV/94YmL/3Ly8/04+Pv8/MjL/1LCw/9iysv/Wr6//1aur/+HFxf/s3d3/vLm5/3Nz
+ c/+Nhob/59LS/5xubP/jycn/b2xs/5WVlf+Pj4//iYmJ/4ODg/99fX3/eHh4/3Jycv9sbGz/ZmZm/2Fh
+ Yf9bW1v/VVVV/1d0V/9Xmlf/TYdN/z5APv84ODj/MjIy/21QT//Vv77/1Kur/9Cmpf+cbmz/nnNy/8ue
+ nf/ElpX/eVRTzgAAAH+VY2PU07S0/2lUVP92YWH/27u7/0o7O/88Ly//06+v/9ewsP/Vra3/1Kqq/+DE
+ xP7t3d3/69ra/+HQ0P/q19f/6NTU/51wbv/gxsb/saGh/6CYmP+FgYH/cnFx/3BwcP95eXn/fX19/3h4
+ eP9zc3P/bW1t/2dnZ/9hYWH/XFxc/1ZWVv9RVVH/Sk1K/0RERP8+Pj7/OTk5/3NUUv/YxcT/1Kur/9Oo
+ qP/NoaH/w5aW/8+hof/ElZX/eVRTzgAAAH+VY2PU07Oz/2ZRUf9zXl7/2rq6/0c4OP9VRET/1K+v/9av
+ r//VrKz/06io/+DDw/7t3Nz/7Nra/+vY2P/q19f/6dXV/6+Ihv+4kpH/4MfH/+jT0//p1NT/5tPT/9XE
+ xP+4qqr/oZaW/5CJif+Aenr/bWpq/1taWv9UU1P/WVlZ/1tbW/9XV1f/UVFR/0tLS/9FRUX/Pz8//3VW
+ VP/ayMf/1a2t/8+lpf+MeHj/f2xs/8KYmP/DlJT/eVRTzgAAAH+VY2PU0rGx/2JPT/9xXFz/2rm5/6SI
+ iP/WsbH/17Gx/9Wtrf/Uqqr/0qen/9/Cwv7s29v/69nZ/+rX1//p1tb/6NTU/9/Gxv+uhoT/m2xq/6V6
+ ef+zjYz/v52c/8qtrP/VvLv/4MvL/+rZ2f/w4eH/8ePj//Dj4//l2tr/ysHB/7Grq/+dmJj/iIWF/3Nx
+ cf9cW1v/QUFB/3lZWP/ezs3/1q2t/7GUlP9wcHD/WFhY/2tbW//DlJP/eVRTzgAAAIGVY2PU0rCw/19M
+ TP9uWVn/27m5/9m1tf/YsrL/1q+v/9WsrP/Tqan/0qWl/9/Cwv7s2tr/69jY/+rX1//p1dX/6NPT/+fR
+ 0f/mz8//3sTE/82urf/AnJz/tY6N/6yCgf+jd3X/m21r/5praf+gdHL/q4OB/7aTkf/Co6L/z7a1/9zJ
+ yP/q3dz/9e3t//jy8v/59PT/9/Pz//n19f/69vb/06mp/8Cnp/+6urr/a2tr/15VVf/ElZT/fldW0wAA
+ AIKVY2PU0a+v/1xJSf9vWlr/2re3/9m0tP/XsbH/1q6u/9Opqf7Pp6f317q68eve3vrx5eX+7+Hh/u3d
+ 3f7r2dn+6dXV/ufR0f7lzs7+5c3N/+TLy//jycn/4sfH/+HFxf/gw8P/38HB/9i3t//Oq6v/xaCf/7yU
+ k/+ziYj/qn59/6Fzcf+aa2r/m21r/6d/ff+1k5L/xKin/9XBwP/bxcT/0aWl/8+mpv+nn5//bmtr/6GC
+ gv/ElJT/fVdV0wAAAIKVY2PU0a6u/56EhP/SsbH/2ba2/9iysv/Vrq7+1LOz9d7JyfPu5OT58+np//Po
+ 6P/y5ub/8eXl//Hk5P/w4uL/7+Hh/+/g4P/t3d3+69ra/unW1v7n09P+5s/P/uTLy/7ix8f+4MPD/t7A
+ wP7cvb3+3Lu7/9u6uv/buLj/2ra2/9m0tP/WsLD/zaWl/8OZmP+6jo3/sYSD/6d5eP+ecG7/zJ+f/9Gk
+ pP/QoqL/zp+f/86env/Ek5P/fVdV0wAAAIKVY2PU0a2t/9y6uv/at7f/17S0+9u+vvbm1dX28ebm/vLm
+ 5v/x5eX/8ePj//Di4v/v4eH/7uDg/+7e3v/t3d3/7Nzc/+za2v/r2dn/6tjY/+rW1v/p1dX/6NPT/+jS
+ 0v/n0dH/5s/P/+XNzf7jy8v+4sjI/uDExP7ewcH+3b29/tu5uf7Ztrb+17Ky/tWurv7VrKz/1Kqq/9Oo
+ qP/Spqb/0aWl/9Cjo//PoaH/z5+f/86dnf/Dk5L/gVlX1AAAAHGWZ2bV0Kys/tu8vPrizMz47d/f+vHl
+ 5f/w4+P/8OLi/+/h4f/u39//7t7e/+3d3f/s29v/7Nra/+vZ2f/q19f/6tbW/+nV1f/o09P/6NLS/+fR
+ 0f/mz8//5s7O/+XNzf/ky8v/48rK/+PJyf/ix8f/4sbG/+HFxf/gw8P/4MLC/9/Bwf/ev7//3r6+/9y7
+ u/7bubn+2ba2/teysv7Vr6/+1Kur/tKnp/7QpKT+zqCg/siXl/60g4L/glpYyQAAADuXaGahnnFv/ql+
+ fv6yior/uZSU/8Cenv/HqKj/zrGx/9W6uv/bw8P/4cvL/+bR0f/p1dX/6dTU/+jT0//n0tL/59DQ/+bP
+ z//lzs7/5czM/+TLy//jysr/48jI/+LHx//hxsb/4cTE/+DDw//fwsL/38DA/96/v//evr7/3by8/9y7
+ u//curr/27i4/9q3t//atrb/2bS0/9izs//XsbH/0Kio/8GVlf+xg4P/onFx/phnZv2TZWTWa0lGTAAA
+ AAp/X18IkWVlP49eXlmQX19ukF9fhJJhYZmSYGCuk2Jiw5ZkZNiWZGTql2Zm+ZpoaP6ebW3/o3V1/6p9
+ ff+whob/t46O/72Wlv/Dnp7/yaWl/86trf/Us7P/2bq6/92+vv/ewMD/3r+//92+vv/dvLz/3Lu7/9u6
+ uv/buLj/2re3/9q2tv/ZtLT/2LOz/9exsf/Pp6f/wJSU/7CCgv+hcHD/mGZm+5FiYtGMXV2Xf1ZWXGlG
+ RiMAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/f38CjVVVCZNi
+ YhqRY2MxkF9fR49fX16PXl50kF9fiZJhYZ6SYWGylGJiyJVjY9yXZGTvmGZm/JpoaP+ebGz/o3Nz/6l6
+ ev+ugYH/s4eH/7mNjf++k5P/w5qZ/8Scm/++lJP/r4GB/6Bvb/+YZmb6kWFhzotcXJOBVVVYZENDHQAA
+ AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAACi1xcC4ta
+ Wh+QXV02jF5eTZBgYGOQX194kGBgjZJiYqOTYmK3lWVlzpVnZtaTZmPHjF5ekYFWVlRjOzsYAAAAAwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gA////////8AAP///////AAAH///
+ ///4AAAD//////AAAAB/////wAAAAAf///+AAAAAAP///wAAAAAAH///AAAAAAAB//8AAAAAAAD//wAA
+ AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
+ //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA
+ AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
+ //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA
+ AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAP///+AAAAAP//////4AAP/
+ //8=
+
+
+
\ No newline at end of file
diff --git a/Nifscan/FormVC.Designer.cs b/Nifscan/FormVC.Designer.cs
new file mode 100644
index 0000000..63fbbce
--- /dev/null
+++ b/Nifscan/FormVC.Designer.cs
@@ -0,0 +1,241 @@
+namespace Nifscan
+{
+ partial class FormVC
+ {
+ private System.ComponentModel.IContainer components = null;
+ private System.Windows.Forms.NumericUpDown numericUpDown4;
+ private System.Windows.Forms.NumericUpDown numericUpDown3;
+ private System.Windows.Forms.NumericUpDown numericUpDown2;
+ private System.Windows.Forms.NumericUpDown numericUpDown1;
+ private System.Windows.Forms.Label label9;
+ private System.Windows.Forms.Label label8;
+ private System.Windows.Forms.Label label7;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.CheckBox checkBox2;
+ private System.Windows.Forms.CheckBox checkBox1;
+ private System.Windows.Forms.CheckBox checkBox3;
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ private void InitializeComponent()
+ {
+ this.numericUpDown4 = new System.Windows.Forms.NumericUpDown();
+ this.numericUpDown3 = new System.Windows.Forms.NumericUpDown();
+ this.numericUpDown2 = new System.Windows.Forms.NumericUpDown();
+ this.numericUpDown1 = new System.Windows.Forms.NumericUpDown();
+ this.label9 = new System.Windows.Forms.Label();
+ this.label8 = new System.Windows.Forms.Label();
+ this.label7 = new System.Windows.Forms.Label();
+ this.label6 = new System.Windows.Forms.Label();
+ this.checkBox2 = new System.Windows.Forms.CheckBox();
+ this.checkBox1 = new System.Windows.Forms.CheckBox();
+ this.checkBox3 = new System.Windows.Forms.CheckBox();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown4)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown3)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit();
+ this.SuspendLayout();
+ //
+ // numericUpDown4
+ //
+ this.numericUpDown4.DecimalPlaces = 6;
+ this.numericUpDown4.Enabled = false;
+ this.numericUpDown4.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.numericUpDown4.Increment = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 65536});
+ this.numericUpDown4.Location = new System.Drawing.Point(135, 67);
+ this.numericUpDown4.Maximum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.numericUpDown4.Name = "numericUpDown4";
+ this.numericUpDown4.Size = new System.Drawing.Size(77, 21);
+ this.numericUpDown4.TabIndex = 5;
+ this.numericUpDown4.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.numericUpDown4.ValueChanged += new System.EventHandler(this.numericUpDown4_ValueChanged);
+ //
+ // numericUpDown3
+ //
+ this.numericUpDown3.DecimalPlaces = 3;
+ this.numericUpDown3.Enabled = false;
+ this.numericUpDown3.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.numericUpDown3.Increment = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 65536});
+ this.numericUpDown3.Location = new System.Drawing.Point(56, 76);
+ this.numericUpDown3.Maximum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.numericUpDown3.Name = "numericUpDown3";
+ this.numericUpDown3.Size = new System.Drawing.Size(58, 21);
+ this.numericUpDown3.TabIndex = 4;
+ this.numericUpDown3.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.numericUpDown3.ValueChanged += new System.EventHandler(this.numericUpDown3_ValueChanged);
+ //
+ // numericUpDown2
+ //
+ this.numericUpDown2.DecimalPlaces = 3;
+ this.numericUpDown2.Enabled = false;
+ this.numericUpDown2.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.numericUpDown2.Increment = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 65536});
+ this.numericUpDown2.Location = new System.Drawing.Point(56, 56);
+ this.numericUpDown2.Maximum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.numericUpDown2.Name = "numericUpDown2";
+ this.numericUpDown2.Size = new System.Drawing.Size(58, 21);
+ this.numericUpDown2.TabIndex = 3;
+ this.numericUpDown2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.numericUpDown2.ValueChanged += new System.EventHandler(this.numericUpDown2_ValueChanged);
+ //
+ // numericUpDown1
+ //
+ this.numericUpDown1.DecimalPlaces = 3;
+ this.numericUpDown1.Enabled = false;
+ this.numericUpDown1.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.numericUpDown1.Increment = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 65536});
+ this.numericUpDown1.Location = new System.Drawing.Point(56, 36);
+ this.numericUpDown1.Maximum = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.numericUpDown1.Name = "numericUpDown1";
+ this.numericUpDown1.Size = new System.Drawing.Size(58, 21);
+ this.numericUpDown1.TabIndex = 2;
+ this.numericUpDown1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.numericUpDown1.ValueChanged += new System.EventHandler(this.numericUpDown1_ValueChanged);
+ //
+ // label9
+ //
+ this.label9.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.label9.Location = new System.Drawing.Point(135, 39);
+ this.label9.Name = "label9";
+ this.label9.Size = new System.Drawing.Size(77, 25);
+ this.label9.TabIndex = 0;
+ this.label9.Text = "Alpha:";
+ this.label9.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label8
+ //
+ this.label8.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.label8.Location = new System.Drawing.Point(10, 75);
+ this.label8.Name = "label8";
+ this.label8.Size = new System.Drawing.Size(40, 20);
+ this.label8.TabIndex = 0;
+ this.label8.Text = "B";
+ this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label7
+ //
+ this.label7.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.label7.Location = new System.Drawing.Point(10, 55);
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size(40, 20);
+ this.label7.TabIndex = 0;
+ this.label7.Text = "G";
+ this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label6
+ //
+ this.label6.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.label6.Location = new System.Drawing.Point(10, 35);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(40, 20);
+ this.label6.TabIndex = 0;
+ this.label6.Text = "R";
+ this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // checkBox2
+ //
+ this.checkBox2.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.checkBox2.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox2.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox2.Location = new System.Drawing.Point(143, 7);
+ this.checkBox2.Name = "checkBox2";
+ this.checkBox2.Size = new System.Drawing.Size(70, 25);
+ this.checkBox2.TabIndex = 1;
+ this.checkBox2.Text = "Alpha";
+ this.checkBox2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged);
+ //
+ // checkBox1
+ //
+ this.checkBox1.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox1.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox1.Location = new System.Drawing.Point(12, 7);
+ this.checkBox1.Name = "checkBox1";
+ this.checkBox1.Size = new System.Drawing.Size(70, 25);
+ this.checkBox1.TabIndex = 0;
+ this.checkBox1.Text = "Color";
+ this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
+ //
+ // checkBox3
+ //
+ this.checkBox3.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox3.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox3.Location = new System.Drawing.Point(12, 108);
+ this.checkBox3.Name = "checkBox3";
+ this.checkBox3.Size = new System.Drawing.Size(201, 25);
+ this.checkBox3.TabIndex = 1;
+ this.checkBox3.Text = "Remove white Vertex Colors";
+ this.checkBox3.CheckedChanged += new System.EventHandler(this.checkBox3_CheckedChanged);
+ //
+ // FormVC
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(224, 138);
+ this.Controls.Add(this.numericUpDown4);
+ this.Controls.Add(this.numericUpDown3);
+ this.Controls.Add(this.numericUpDown2);
+ this.Controls.Add(this.numericUpDown1);
+ this.Controls.Add(this.label9);
+ this.Controls.Add(this.label8);
+ this.Controls.Add(this.label7);
+ this.Controls.Add(this.label6);
+ this.Controls.Add(this.checkBox3);
+ this.Controls.Add(this.checkBox2);
+ this.Controls.Add(this.checkBox1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "FormVC";
+ this.ShowIcon = false;
+ this.ShowInTaskbar = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "VertexColors";
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown4)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown3)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/Nifscan/FormVC.cs b/Nifscan/FormVC.cs
new file mode 100644
index 0000000..15661dd
--- /dev/null
+++ b/Nifscan/FormVC.cs
@@ -0,0 +1,83 @@
+using System;
+using System.Windows.Forms;
+
+namespace Nifscan
+{
+ public partial class FormVC : Form
+ {
+ public FormVC()
+ {
+ InitializeComponent();
+ checkBox1.Enabled = !FormMain.fixesOn;
+ checkBox2.Enabled = !FormMain.fixesOn;
+ checkBox1.Checked = FormMain.vcColor;
+ checkBox2.Checked = FormMain.vcAlpha;
+ checkBox3.Checked = FormMain.vcRemove;
+ numericUpDown1.Value = (decimal)FormMain.vcR;
+ numericUpDown2.Value = (decimal)FormMain.vcG;
+ numericUpDown3.Value = (decimal)FormMain.vcB;
+ numericUpDown4.Value = (decimal)FormMain.vcA;
+ }
+
+ private void checkBox1_CheckedChanged(object sender, EventArgs e)
+ {
+ FormMain.vcColor = checkBox1.Checked;
+ numericUpDown1.Enabled = checkBox1.Checked;
+ numericUpDown2.Enabled = checkBox1.Checked;
+ numericUpDown3.Enabled = checkBox1.Checked;
+ changeButton();
+ }
+
+ private void checkBox2_CheckedChanged(object sender, EventArgs e)
+ {
+ FormMain.vcAlpha = checkBox2.Checked;
+ numericUpDown4.Enabled = checkBox2.Checked;
+ changeButton();
+ }
+
+ private void numericUpDown1_ValueChanged(object sender, EventArgs e)
+ {
+ FormMain.vcR = (float)numericUpDown1.Value;
+ }
+
+ private void numericUpDown2_ValueChanged(object sender, EventArgs e)
+ {
+ FormMain.vcG = (float)numericUpDown2.Value;
+ }
+
+ private void numericUpDown3_ValueChanged(object sender, EventArgs e)
+ {
+ FormMain.vcB = (float)numericUpDown3.Value;
+ }
+
+ private void numericUpDown4_ValueChanged(object sender, EventArgs e)
+ {
+ FormMain.vcA = (float)numericUpDown4.Value;
+ }
+
+ private void checkBox3_CheckedChanged(object sender, EventArgs e)
+ {
+ FormMain.vcRemove = checkBox3.Checked;
+ if (checkBox3.Checked)
+ {
+ checkBox1.Checked = false;
+ checkBox2.Checked = false;
+ checkBox1.Enabled = false;
+ checkBox2.Enabled = false;
+ checkBox1_CheckedChanged(this, new EventArgs());
+ checkBox2_CheckedChanged(this, new EventArgs());
+ }
+ else if (!FormMain.fixesOn)
+ {
+ checkBox1.Enabled = true;
+ checkBox2.Enabled = true;
+ }
+ changeButton();
+ }
+
+ private void changeButton()
+ {
+ FormMain.formMain.buttonColorVC(checkBox1.Checked || checkBox2.Checked || checkBox3.Checked);
+ }
+ }
+}
diff --git a/Nifscan/FormVC.resx b/Nifscan/FormVC.resx
new file mode 100644
index 0000000..e8ae276
--- /dev/null
+++ b/Nifscan/FormVC.resx
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Nifscan/FormVer.Designer.cs b/Nifscan/FormVer.Designer.cs
new file mode 100644
index 0000000..d34924d
--- /dev/null
+++ b/Nifscan/FormVer.Designer.cs
@@ -0,0 +1,283 @@
+namespace Nifscan
+{
+ partial class FormVer
+ {
+ private System.ComponentModel.IContainer components = null;
+ private System.Windows.Forms.CheckBox checkBox1;
+ private System.Windows.Forms.CheckBox checkBox2;
+ private System.Windows.Forms.CheckBox checkBox3;
+ private System.Windows.Forms.CheckBox checkBox4;
+ private System.Windows.Forms.CheckBox checkBox5;
+ private System.Windows.Forms.CheckBox checkBox6;
+ private System.Windows.Forms.CheckBox checkBox7;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.NumericUpDown numericUpDown1;
+ private System.Windows.Forms.NumericUpDown numericUpDown2;
+ private System.Windows.Forms.NumericUpDown numericUpDown3;
+ private System.Windows.Forms.NumericUpDown numericUpDown4;
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ private void InitializeComponent()
+ {
+ this.checkBox1 = new System.Windows.Forms.CheckBox();
+ this.numericUpDown1 = new System.Windows.Forms.NumericUpDown();
+ this.checkBox2 = new System.Windows.Forms.CheckBox();
+ this.numericUpDown2 = new System.Windows.Forms.NumericUpDown();
+ this.numericUpDown3 = new System.Windows.Forms.NumericUpDown();
+ this.checkBox3 = new System.Windows.Forms.CheckBox();
+ this.checkBox4 = new System.Windows.Forms.CheckBox();
+ this.checkBox5 = new System.Windows.Forms.CheckBox();
+ this.checkBox6 = new System.Windows.Forms.CheckBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.numericUpDown4 = new System.Windows.Forms.NumericUpDown();
+ this.checkBox7 = new System.Windows.Forms.CheckBox();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown3)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown4)).BeginInit();
+ this.SuspendLayout();
+ //
+ // checkBox1
+ //
+ this.checkBox1.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox1.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox1.Location = new System.Drawing.Point(12, 68);
+ this.checkBox1.Name = "checkBox1";
+ this.checkBox1.Size = new System.Drawing.Size(44, 25);
+ this.checkBox1.TabIndex = 7;
+ this.checkBox1.Text = "X";
+ this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
+ //
+ // numericUpDown1
+ //
+ this.numericUpDown1.DecimalPlaces = 6;
+ this.numericUpDown1.Enabled = false;
+ this.numericUpDown1.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.numericUpDown1.Increment = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 65536});
+ this.numericUpDown1.Location = new System.Drawing.Point(129, 70);
+ this.numericUpDown1.Maximum = new decimal(new int[] {
+ 100000000,
+ 0,
+ 0,
+ 0});
+ this.numericUpDown1.Minimum = new decimal(new int[] {
+ 100000000,
+ 0,
+ 0,
+ -2147483648});
+ this.numericUpDown1.Name = "numericUpDown1";
+ this.numericUpDown1.Size = new System.Drawing.Size(145, 21);
+ this.numericUpDown1.TabIndex = 8;
+ this.numericUpDown1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.numericUpDown1.Value = new decimal(new int[] {
+ 100000000,
+ 0,
+ 0,
+ -2147483648});
+ this.numericUpDown1.ValueChanged += new System.EventHandler(this.numericUpDown4_ValueChanged);
+ //
+ // checkBox2
+ //
+ this.checkBox2.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox2.Location = new System.Drawing.Point(62, 68);
+ this.checkBox2.Name = "checkBox2";
+ this.checkBox2.Size = new System.Drawing.Size(61, 25);
+ this.checkBox2.TabIndex = 7;
+ this.checkBox2.Text = "Hard";
+ this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged);
+ //
+ // numericUpDown2
+ //
+ this.numericUpDown2.DecimalPlaces = 6;
+ this.numericUpDown2.Enabled = false;
+ this.numericUpDown2.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.numericUpDown2.Increment = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 65536});
+ this.numericUpDown2.Location = new System.Drawing.Point(129, 101);
+ this.numericUpDown2.Maximum = new decimal(new int[] {
+ 100000000,
+ 0,
+ 0,
+ 0});
+ this.numericUpDown2.Minimum = new decimal(new int[] {
+ 100000000,
+ 0,
+ 0,
+ -2147483648});
+ this.numericUpDown2.Name = "numericUpDown2";
+ this.numericUpDown2.Size = new System.Drawing.Size(145, 21);
+ this.numericUpDown2.TabIndex = 8;
+ this.numericUpDown2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.numericUpDown2.Value = new decimal(new int[] {
+ 100000000,
+ 0,
+ 0,
+ -2147483648});
+ this.numericUpDown2.ValueChanged += new System.EventHandler(this.numericUpDown1_ValueChanged);
+ //
+ // numericUpDown3
+ //
+ this.numericUpDown3.DecimalPlaces = 6;
+ this.numericUpDown3.Enabled = false;
+ this.numericUpDown3.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.numericUpDown3.Increment = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 65536});
+ this.numericUpDown3.Location = new System.Drawing.Point(129, 132);
+ this.numericUpDown3.Maximum = new decimal(new int[] {
+ 100000000,
+ 0,
+ 0,
+ 0});
+ this.numericUpDown3.Minimum = new decimal(new int[] {
+ 100000000,
+ 0,
+ 0,
+ -2147483648});
+ this.numericUpDown3.Name = "numericUpDown3";
+ this.numericUpDown3.Size = new System.Drawing.Size(145, 21);
+ this.numericUpDown3.TabIndex = 8;
+ this.numericUpDown3.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.numericUpDown3.Value = new decimal(new int[] {
+ 100000000,
+ 0,
+ 0,
+ -2147483648});
+ this.numericUpDown3.ValueChanged += new System.EventHandler(this.numericUpDown2_ValueChanged);
+ //
+ // checkBox3
+ //
+ this.checkBox3.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox3.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox3.Location = new System.Drawing.Point(12, 99);
+ this.checkBox3.Name = "checkBox3";
+ this.checkBox3.Size = new System.Drawing.Size(44, 25);
+ this.checkBox3.TabIndex = 7;
+ this.checkBox3.Text = "Y";
+ this.checkBox3.CheckedChanged += new System.EventHandler(this.checkBox3_CheckedChanged);
+ //
+ // checkBox4
+ //
+ this.checkBox4.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox4.Location = new System.Drawing.Point(62, 99);
+ this.checkBox4.Name = "checkBox4";
+ this.checkBox4.Size = new System.Drawing.Size(61, 25);
+ this.checkBox4.TabIndex = 7;
+ this.checkBox4.Text = "Hard";
+ this.checkBox4.CheckedChanged += new System.EventHandler(this.checkBox4_CheckedChanged);
+ //
+ // checkBox5
+ //
+ this.checkBox5.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox5.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox5.Location = new System.Drawing.Point(12, 130);
+ this.checkBox5.Name = "checkBox5";
+ this.checkBox5.Size = new System.Drawing.Size(44, 25);
+ this.checkBox5.TabIndex = 7;
+ this.checkBox5.Text = "Z";
+ this.checkBox5.CheckedChanged += new System.EventHandler(this.checkBox5_CheckedChanged);
+ //
+ // checkBox6
+ //
+ this.checkBox6.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox6.Location = new System.Drawing.Point(62, 130);
+ this.checkBox6.Name = "checkBox6";
+ this.checkBox6.Size = new System.Drawing.Size(61, 25);
+ this.checkBox6.TabIndex = 7;
+ this.checkBox6.Text = "Hard";
+ this.checkBox6.CheckedChanged += new System.EventHandler(this.checkBox6_CheckedChanged);
+ //
+ // label1
+ //
+ this.label1.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.label1.Location = new System.Drawing.Point(9, 9);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(262, 56);
+ this.label1.TabIndex = 9;
+ this.label1.Text = "Set vertices coordinates be offset value. Hard - set all vertices coordination be" +
+ " this value.";
+ this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // numericUpDown4
+ //
+ this.numericUpDown4.Enabled = false;
+ this.numericUpDown4.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.numericUpDown4.Location = new System.Drawing.Point(231, 159);
+ this.numericUpDown4.Maximum = new decimal(new int[] {
+ 5,
+ 0,
+ 0,
+ 0});
+ this.numericUpDown4.Name = "numericUpDown4";
+ this.numericUpDown4.Size = new System.Drawing.Size(43, 21);
+ this.numericUpDown4.TabIndex = 8;
+ this.numericUpDown4.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+ this.numericUpDown4.Value = new decimal(new int[] {
+ 3,
+ 0,
+ 0,
+ 0});
+ this.numericUpDown4.ValueChanged += new System.EventHandler(this.numericUpDown4_ValueChanged_1);
+ //
+ // checkBox7
+ //
+ this.checkBox7.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
+ this.checkBox7.ForeColor = System.Drawing.Color.DarkRed;
+ this.checkBox7.Location = new System.Drawing.Point(12, 157);
+ this.checkBox7.Name = "checkBox7";
+ this.checkBox7.Size = new System.Drawing.Size(213, 25);
+ this.checkBox7.TabIndex = 7;
+ this.checkBox7.Text = "Trim coordinates after dot";
+ this.checkBox7.CheckedChanged += new System.EventHandler(this.checkBox7_CheckedChanged);
+ //
+ // FormVer
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(286, 192);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.checkBox6);
+ this.Controls.Add(this.checkBox4);
+ this.Controls.Add(this.checkBox2);
+ this.Controls.Add(this.checkBox7);
+ this.Controls.Add(this.checkBox5);
+ this.Controls.Add(this.checkBox3);
+ this.Controls.Add(this.checkBox1);
+ this.Controls.Add(this.numericUpDown4);
+ this.Controls.Add(this.numericUpDown3);
+ this.Controls.Add(this.numericUpDown2);
+ this.Controls.Add(this.numericUpDown1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "FormVer";
+ this.ShowIcon = false;
+ this.ShowInTaskbar = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "Vertices";
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown3)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.numericUpDown4)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/Nifscan/FormVer.cs b/Nifscan/FormVer.cs
new file mode 100644
index 0000000..2dfae9a
--- /dev/null
+++ b/Nifscan/FormVer.cs
@@ -0,0 +1,92 @@
+using System;
+using System.Windows.Forms;
+
+namespace Nifscan
+{
+ public partial class FormVer : Form
+ {
+ public FormVer()
+ {
+ InitializeComponent();
+ checkBox1.Checked = FormMain.verX;
+ checkBox3.Checked = FormMain.verY;
+ checkBox5.Checked = FormMain.verZ;
+ checkBox2.Checked = FormMain.verXHard;
+ checkBox4.Checked = FormMain.verYHard;
+ checkBox6.Checked = FormMain.verZHard;
+ checkBox7.Checked = FormMain.verTrim;
+ numericUpDown1.Value = (decimal)FormMain.verXval;
+ numericUpDown2.Value = (decimal)FormMain.verYval;
+ numericUpDown3.Value = (decimal)FormMain.verZval;
+ numericUpDown4.Value = (decimal)FormMain.verTrimNum;
+ }
+
+ private void checkBox1_CheckedChanged(object sender, EventArgs e)
+ {
+ FormMain.verX = checkBox1.Checked;
+ numericUpDown1.Enabled = checkBox1.Checked;
+ changeButton();
+ }
+
+ private void checkBox2_CheckedChanged(object sender, EventArgs e)
+ {
+ FormMain.verXHard = checkBox2.Checked;
+ }
+
+ private void numericUpDown4_ValueChanged(object sender, EventArgs e)
+ {
+ FormMain.verXval = (double)numericUpDown1.Value;
+ }
+
+ private void checkBox3_CheckedChanged(object sender, EventArgs e)
+ {
+ FormMain.verY = checkBox3.Checked;
+ numericUpDown2.Enabled = checkBox3.Checked;
+ changeButton();
+ }
+
+ private void checkBox4_CheckedChanged(object sender, EventArgs e)
+ {
+ FormMain.verYHard = checkBox4.Checked;
+ }
+
+ private void numericUpDown1_ValueChanged(object sender, EventArgs e)
+ {
+ FormMain.verYval = (double)numericUpDown2.Value;
+ }
+
+ private void checkBox5_CheckedChanged(object sender, EventArgs e)
+ {
+ FormMain.verZ = checkBox5.Checked;
+ numericUpDown3.Enabled = checkBox5.Checked;
+ changeButton();
+ }
+
+ private void checkBox6_CheckedChanged(object sender, EventArgs e)
+ {
+ FormMain.verZHard = checkBox6.Checked;
+ }
+
+ private void numericUpDown2_ValueChanged(object sender, EventArgs e)
+ {
+ FormMain.verZval = (double)numericUpDown3.Value;
+ }
+
+ private void changeButton()
+ {
+ FormMain.formMain.buttonColorVer(checkBox1.Checked || checkBox3.Checked || checkBox5.Checked || checkBox7.Checked);
+ }
+
+ private void checkBox7_CheckedChanged(object sender, EventArgs e)
+ {
+ FormMain.verTrim = checkBox7.Checked;
+ numericUpDown4.Enabled = checkBox7.Checked;
+ changeButton();
+ }
+
+ private void numericUpDown4_ValueChanged_1(object sender, EventArgs e)
+ {
+ FormMain.verTrimNum = (int)numericUpDown4.Value;
+ }
+ }
+}
diff --git a/Nifscan/FormVer.resx b/Nifscan/FormVer.resx
new file mode 100644
index 0000000..e8ae276
--- /dev/null
+++ b/Nifscan/FormVer.resx
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Nifscan/Nifscan.csproj b/Nifscan/Nifscan.csproj
new file mode 100644
index 0000000..d466616
--- /dev/null
+++ b/Nifscan/Nifscan.csproj
@@ -0,0 +1,146 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {954D1A7F-D909-43EC-A1E2-053ABF7358D6}
+ WinExe
+ Properties
+ Nifscan
+ Nifscan
+ v4.0
+ 512
+
+ false
+ опубликовать\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ true
+
+
+ x86
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ x86
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ favicon.ico
+
+
+ Nifscan.Program
+
+
+
+
+
+
+
+
+ Form
+
+
+ FormEC.cs
+
+
+ Form
+
+
+ FormMain.cs
+
+
+ Form
+
+
+ FormVer.cs
+
+
+
+
+ Form
+
+
+ FormParallax.cs
+
+
+ Form
+
+
+ FormVC.cs
+
+
+ FormEC.cs
+
+
+ FormMain.cs
+
+
+ FormVer.cs
+
+
+ FormParallax.cs
+
+
+ FormVC.cs
+
+
+
+
+
+
+
+
+
+
+ False
+ Microsoft .NET Framework 4 %28x86 и x64%29
+ true
+
+
+ False
+ Клиентский профиль .NET Framework 3.5 SP1
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+ False
+ Windows Installer 4.5
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/Nifscan/Program.cs b/Nifscan/Program.cs
new file mode 100644
index 0000000..7f623f9
--- /dev/null
+++ b/Nifscan/Program.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Windows.Forms;
+
+namespace Nifscan
+{
+ static class Program
+ {
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new FormMain());
+ }
+ }
+}
diff --git a/Nifscan/Properties/AssemblyInfo.cs b/Nifscan/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..c94de21
--- /dev/null
+++ b/Nifscan/Properties/AssemblyInfo.cs
@@ -0,0 +1,13 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+[assembly: AssemblyTitle("")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: ComVisible(false)]
+[assembly: AssemblyVersion("1.0.0.0")]
diff --git a/Nifscan/bin/Release/Nifscan.exe b/Nifscan/bin/Release/Nifscan.exe
new file mode 100644
index 0000000..4c5b6d8
Binary files /dev/null and b/Nifscan/bin/Release/Nifscan.exe differ
diff --git a/Nifscan/bin/Release/Nifscan.exe.config b/Nifscan/bin/Release/Nifscan.exe.config
new file mode 100644
index 0000000..58262a1
--- /dev/null
+++ b/Nifscan/bin/Release/Nifscan.exe.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/Nifscan/bin/Release/Nifscan.pdb b/Nifscan/bin/Release/Nifscan.pdb
new file mode 100644
index 0000000..52a50cf
Binary files /dev/null and b/Nifscan/bin/Release/Nifscan.pdb differ
diff --git a/Nifscan/bin/Release/Nifscan.vshost.exe b/Nifscan/bin/Release/Nifscan.vshost.exe
new file mode 100644
index 0000000..8c84517
Binary files /dev/null and b/Nifscan/bin/Release/Nifscan.vshost.exe differ
diff --git a/Nifscan/bin/Release/Nifscan.vshost.exe.config b/Nifscan/bin/Release/Nifscan.vshost.exe.config
new file mode 100644
index 0000000..58262a1
--- /dev/null
+++ b/Nifscan/bin/Release/Nifscan.vshost.exe.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/Nifscan/bin/Release/Nifscan.vshost.exe.manifest b/Nifscan/bin/Release/Nifscan.vshost.exe.manifest
new file mode 100644
index 0000000..061c9ca
--- /dev/null
+++ b/Nifscan/bin/Release/Nifscan.vshost.exe.manifest
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Nifscan/favicon.ico b/Nifscan/favicon.ico
new file mode 100644
index 0000000..1d1164f
Binary files /dev/null and b/Nifscan/favicon.ico differ
diff --git a/Nifscan/obj/Release/Nifscan.FormEC.resources b/Nifscan/obj/Release/Nifscan.FormEC.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/Nifscan/obj/Release/Nifscan.FormEC.resources differ
diff --git a/Nifscan/obj/Release/Nifscan.FormMain.resources b/Nifscan/obj/Release/Nifscan.FormMain.resources
new file mode 100644
index 0000000..e8ac659
Binary files /dev/null and b/Nifscan/obj/Release/Nifscan.FormMain.resources differ
diff --git a/Nifscan/obj/Release/Nifscan.FormParallax.resources b/Nifscan/obj/Release/Nifscan.FormParallax.resources
new file mode 100644
index 0000000..e8ac659
Binary files /dev/null and b/Nifscan/obj/Release/Nifscan.FormParallax.resources differ
diff --git a/Nifscan/obj/Release/Nifscan.FormVC.resources b/Nifscan/obj/Release/Nifscan.FormVC.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/Nifscan/obj/Release/Nifscan.FormVC.resources differ
diff --git a/Nifscan/obj/Release/Nifscan.FormVer.resources b/Nifscan/obj/Release/Nifscan.FormVer.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/Nifscan/obj/Release/Nifscan.FormVer.resources differ
diff --git a/Nifscan/obj/Release/Nifscan.csproj.FileListAbsolute.txt b/Nifscan/obj/Release/Nifscan.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..c0d0be8
--- /dev/null
+++ b/Nifscan/obj/Release/Nifscan.csproj.FileListAbsolute.txt
@@ -0,0 +1,11 @@
+C:\Build\Nifscan\Nifscan\bin\Release\Nifscan.exe.config
+C:\Build\Nifscan\Nifscan\bin\Release\Nifscan.exe
+C:\Build\Nifscan\Nifscan\bin\Release\Nifscan.pdb
+C:\Build\Nifscan\Nifscan\obj\Release\Nifscan.FormEC.resources
+C:\Build\Nifscan\Nifscan\obj\Release\Nifscan.FormMain.resources
+C:\Build\Nifscan\Nifscan\obj\Release\Nifscan.FormVer.resources
+C:\Build\Nifscan\Nifscan\obj\Release\Nifscan.FormParallax.resources
+C:\Build\Nifscan\Nifscan\obj\Release\Nifscan.FormVC.resources
+C:\Build\Nifscan\Nifscan\obj\Release\Nifscan.csproj.GenerateResource.Cache
+C:\Build\Nifscan\Nifscan\obj\Release\Nifscan.exe
+C:\Build\Nifscan\Nifscan\obj\Release\Nifscan.pdb
diff --git a/Nifscan/obj/Release/Nifscan.csproj.GenerateResource.Cache b/Nifscan/obj/Release/Nifscan.csproj.GenerateResource.Cache
new file mode 100644
index 0000000..6029ff3
Binary files /dev/null and b/Nifscan/obj/Release/Nifscan.csproj.GenerateResource.Cache differ
diff --git a/Nifscan/obj/Release/Nifscan.exe b/Nifscan/obj/Release/Nifscan.exe
new file mode 100644
index 0000000..4c5b6d8
Binary files /dev/null and b/Nifscan/obj/Release/Nifscan.exe differ
diff --git a/Nifscan/obj/Release/Nifscan.pdb b/Nifscan/obj/Release/Nifscan.pdb
new file mode 100644
index 0000000..52a50cf
Binary files /dev/null and b/Nifscan/obj/Release/Nifscan.pdb differ