diff --git a/App.config b/App.config
new file mode 100644
index 0000000..e22aa48
--- /dev/null
+++ b/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/Favicon.ico b/Favicon.ico
new file mode 100644
index 0000000..828edab
Binary files /dev/null and b/Favicon.ico differ
diff --git a/Main.Designer.cs b/Main.Designer.cs
new file mode 100644
index 0000000..c1b374f
--- /dev/null
+++ b/Main.Designer.cs
@@ -0,0 +1,120 @@
+namespace NLSE
+{
+ partial class Main
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main));
+ this.B_Friend = new System.Windows.Forms.Button();
+ this.CB_Friend = new System.Windows.Forms.ComboBox();
+ this.B_Exhibition = new System.Windows.Forms.Button();
+ this.B_Garden = new System.Windows.Forms.Button();
+ this.L_IO = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // B_Friend
+ //
+ this.B_Friend.Location = new System.Drawing.Point(12, 66);
+ this.B_Friend.Name = "B_Friend";
+ this.B_Friend.Size = new System.Drawing.Size(90, 30);
+ this.B_Friend.TabIndex = 1;
+ this.B_Friend.Text = "Friend";
+ this.B_Friend.UseVisualStyleBackColor = true;
+ this.B_Friend.Click += new System.EventHandler(this.clickFriend);
+ //
+ // CB_Friend
+ //
+ this.CB_Friend.FormattingEnabled = true;
+ this.CB_Friend.Location = new System.Drawing.Point(108, 75);
+ this.CB_Friend.Name = "CB_Friend";
+ this.CB_Friend.Size = new System.Drawing.Size(90, 21);
+ this.CB_Friend.TabIndex = 2;
+ //
+ // B_Exhibition
+ //
+ this.B_Exhibition.Location = new System.Drawing.Point(12, 30);
+ this.B_Exhibition.Name = "B_Exhibition";
+ this.B_Exhibition.Size = new System.Drawing.Size(90, 30);
+ this.B_Exhibition.TabIndex = 3;
+ this.B_Exhibition.Text = "Exhibition";
+ this.B_Exhibition.UseVisualStyleBackColor = true;
+ this.B_Exhibition.Click += new System.EventHandler(this.clickExhibition);
+ //
+ // B_Garden
+ //
+ this.B_Garden.Location = new System.Drawing.Point(108, 30);
+ this.B_Garden.Name = "B_Garden";
+ this.B_Garden.Size = new System.Drawing.Size(90, 30);
+ this.B_Garden.TabIndex = 4;
+ this.B_Garden.Text = "Garden";
+ this.B_Garden.UseVisualStyleBackColor = true;
+ this.B_Garden.Click += new System.EventHandler(this.clickGarden);
+ //
+ // L_IO
+ //
+ this.L_IO.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.L_IO.Location = new System.Drawing.Point(-233, 6);
+ this.L_IO.Name = "L_IO";
+ this.L_IO.Size = new System.Drawing.Size(431, 18);
+ this.L_IO.TabIndex = 5;
+ this.L_IO.Text = "Drop a file/folder to begin.";
+ this.L_IO.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.L_IO.TextChanged += new System.EventHandler(this.updatePath);
+ this.L_IO.Click += new System.EventHandler(this.L_IO_Click);
+ //
+ // Main
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(209, 105);
+ this.Controls.Add(this.L_IO);
+ this.Controls.Add(this.B_Garden);
+ this.Controls.Add(this.B_Exhibition);
+ this.Controls.Add(this.CB_Friend);
+ this.Controls.Add(this.B_Friend);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "Main";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "AC:NL Save Editor";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button B_Friend;
+ private System.Windows.Forms.ComboBox CB_Friend;
+ private System.Windows.Forms.Button B_Exhibition;
+ private System.Windows.Forms.Button B_Garden;
+ private System.Windows.Forms.Label L_IO;
+
+ }
+}
+
diff --git a/Main.cs b/Main.cs
new file mode 100644
index 0000000..259b98f
--- /dev/null
+++ b/Main.cs
@@ -0,0 +1,182 @@
+using System;
+using System.IO;
+using System.Linq;
+using System.Threading;
+using System.Windows.Forms;
+
+namespace NLSE
+{
+ public partial class Main : Form
+ {
+ internal static string root;
+
+ public Main()
+ {
+ // Set up.
+ InitializeComponent();
+ CB_Friend.Enabled = B_Exhibition.Enabled = B_Friend.Enabled = B_Garden.Enabled = false;
+
+ // Allow D&D
+ AllowDrop = true;
+ DragEnter += tabMain_DragEnter;
+ DragDrop += tabMain_DragDrop;
+
+ // Find the save files.
+ scanLoop();
+ }
+ // Drag & Drop Events
+ private void tabMain_DragEnter(object sender, DragEventArgs e)
+ {
+ if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
+ }
+ private void tabMain_DragDrop(object sender, DragEventArgs e)
+ {
+ string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
+ string path = files[0]; // open first D&D
+ if (Directory.Exists(path))
+ {
+ root = path;
+ L_IO.Text = root;
+ }
+ else // Try fix checksums?
+ {
+ foreach (string file in files)
+ {
+ try
+ {
+ byte[] data = File.ReadAllBytes(file);
+ byte[] data2 = (byte[])data.Clone();
+ Verification.fixChecksums(ref data);
+ if (!data.SequenceEqual(data2))
+ {
+ if (Util.Prompt(MessageBoxButtons.YesNo, "Update checksums?" + Environment.NewLine + file) == DialogResult.Yes)
+ {
+ File.WriteAllBytes(file, data);
+ Util.Alert("File checksums were updated:" + Environment.NewLine + file);
+ }
+ Util.Alert("File checksums were not updated (chose not to):" + Environment.NewLine + file);
+ }
+ else
+ {
+ Util.Alert("File checksums were not updated (already valid):" + Environment.NewLine + file);
+ }
+ }
+ catch (Exception ex) { Util.Error("File error:" + Environment.NewLine + file, ex.ToString()); }
+ }
+ }
+ }
+
+ // Find Files on Load Loop
+ private bool findLoop = true;
+ private void scanLoop(int ms = 400)
+ {
+ new Thread(() =>
+ {
+ while (findLoop && (root = Util.GetSDFLocation()) == null)
+ Thread.Sleep(ms);
+
+ // Trigger update
+ if (InvokeRequired)
+ Invoke((MethodInvoker)delegate { L_IO.Text = root; });
+ else L_IO.Text = root;
+ }).Start();
+ }
+
+ private void L_IO_Click(object sender, EventArgs e)
+ {
+ FolderBrowserDialog ofd = new FolderBrowserDialog();
+ if (ofd.ShowDialog() != DialogResult.OK)
+ return;
+
+ findLoop = false;
+ root = ofd.SelectedPath;
+ L_IO.Text = root;
+ }
+ private void updatePath(object sender, EventArgs e)
+ {
+ // Scan for files to enable.
+ string[] files = Directory.GetFiles(root);
+
+ B_Exhibition.Enabled = File.Exists(Path.Combine(root, "exhibition.dat"));
+ B_Garden.Enabled = File.Exists(Path.Combine(root, "garden.dat"));
+
+ CB_Friend.Items.Clear();
+ foreach (string file in files.Where(file => file.Contains("friend")))
+ CB_Friend.Items.Add(Path.GetFileName(file));
+ CB_Friend.Enabled = B_Friend.Enabled = CB_Friend.Items.Count > 0;
+ if (CB_Friend.Items.Count > 0)
+ CB_Friend.SelectedIndex = 0;
+ }
+
+ // Editing Windows
+ private void clickExhibition(object sender, EventArgs e)
+ {
+ string dataPath = Path.Combine(root, "exhibition.dat");
+ if (!File.Exists(dataPath)) return;
+
+ // Load Data
+ try
+ {
+ byte[] data = File.ReadAllBytes(dataPath);
+
+ // Open Form
+ new Exhibition(data).ShowDialog();
+
+ // Form closed, write data.
+ Verification.fixChecksums(ref data);
+ File.WriteAllBytes(dataPath, data);
+ }
+ catch (Exception ex)
+ {
+ // Error
+ MessageBox.Show("Error:" + Environment.NewLine + ex);
+ }
+ }
+ private void clickGarden(object sender, EventArgs e)
+ {
+ string dataPath = Path.Combine(root, "garden.dat");
+ if (!File.Exists(dataPath)) return;
+
+ // Load Data
+ try
+ {
+ byte[] data = File.ReadAllBytes(dataPath);
+
+ // Open Form
+ new Garden(data).ShowDialog();
+
+ // Form closed, write data.
+ Verification.fixChecksums(ref data);
+ File.WriteAllBytes(dataPath, data);
+ }
+ catch (Exception ex)
+ {
+ // Error
+ MessageBox.Show("Error:" + Environment.NewLine + ex);
+ }
+ }
+ private void clickFriend(object sender, EventArgs e)
+ {
+ string dataPath = Path.Combine(root, CB_Friend.Text);
+ if (!File.Exists(dataPath)) return;
+
+ // Load Data
+ try
+ {
+ byte[] data = File.ReadAllBytes(dataPath);
+
+ // Open Form
+ new Friend(data).ShowDialog();
+
+ // Form closed, write data.
+ Verification.fixChecksums(ref data);
+ File.WriteAllBytes(dataPath, data);
+ }
+ catch (Exception ex)
+ {
+ // Error
+ MessageBox.Show("Error:" + Environment.NewLine + ex);
+ }
+ }
+ }
+}
diff --git a/Main.resx b/Main.resx
new file mode 100644
index 0000000..8fb9a60
--- /dev/null
+++ b/Main.resx
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ AAABAAEAEBAAAAAAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAA
+ AAD///8B////Af///wEAxQAHAMUAMQDFAF8AxQB/AMUAkQDFAJUAxQCPAMUAL////wH///8B////Af//
+ /wH///8BAMUACwDFAD0AxQB/AMUAwwDFAPMAxQD/AMUA/wDFAP8AxQD/AMUAlwDFABP///8BAMUAAwDF
+ AA////8B////AQDFAGsAxQD/AMUA/wDFAP8AxQD/AMUA/wDGAP8AxQD/AMUA0////wH///8B////Af//
+ /wEAxQBjAMUAOf///wEAxQANAMUA5wDFAP8AwwD/AMYA/wDHAP8AvwD/AMUA/wDFALv///8B////Af//
+ /wH///8BAMUAVQDFAN0AxQAF////AQDFAHcAxgD/AMEA/wGwAP8AwQD/AbAA/wC6AP8AxgDpAMUAE///
+ /wH///8B////AQDFAJ8AxQD/AMUARf///wEAxQAXAMUA8wDGAP8AwwD/AaoA/wKTAP8AuwD/AMcA/wDF
+ ANMAxQBLAMYAMwDFAJUAxQD/AMUA/wDFAJP///8B////AQDFAMMAxQD/AMYA/wDJAP8BpgD/AaMA/wDH
+ AP8AxgD/AMYA/wC/AP8AxQD/AMUA/wDFAP8AxQC1////Af///wEAxQCLAMYA/wDEAP8BtgD/AasA/wKK
+ AP8BmAD/AMQA/wDDAP8BrQD/AMcA/wDFAP8AxQD/AMUAq////wH///8BAMUAWQDFAP8AxAD/AL8A/wC9
+ AP8AvwD/AaIA/wKUAP8BpAD/Aa4A/wDIAP8AxQD/AMUA/wDFAFn///8B////AQDFAC0AxQD/AMUA/wDG
+ AP8AyAD/AMEA/wGxAP8CigD/AokA/wDCAP8AxgD/AMUA/wDFALn///8B////Af///wEAxQADAMUAyQDF
+ AP8AxAD/AbMA/wGmAP8BrwD/AL0A/wGjAP8BngD/AMcA/wDFAL8AxQAN////Af///wH///8B////AQDF
+ AEcAxQD/AMEA/wDAAP8AxwD/AMgA/wDHAP8AyAD/AbQA/wC9AO8AxgAZ////Af///wH///8B////Af//
+ /wH///8BAMUAaQDFAPEAxgD/AMUA/wDFAP8AxQDpAMUAkwDHADEAxQDfAMUA1QDFABn///8B////Af//
+ /wH///8B////Af///wEAxQAZAMUASwDFAFEAxQA5AMUADf///wH///8BAMUArQDFAP8AxQDdAMUAF///
+ /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQDFAGMAxQD/AMUAzQDF
+ ABf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAxQAVAMUAZQDF
+ AAn///8BAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//w==
+
+
+
\ No newline at end of file
diff --git a/Misc/Data.cs b/Misc/Data.cs
new file mode 100644
index 0000000..4a3df21
--- /dev/null
+++ b/Misc/Data.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Linq;
+using System.Text;
+
+namespace NLSE
+{
+ public class DataRef
+ {
+ public int Offset, Length;
+ public DataRef(int offset, int length)
+ {
+ Offset = offset;
+ Length = length;
+ }
+
+ public byte[] getData(byte[] Save)
+ {
+ return Save.Skip(Offset).Take(Length).ToArray();
+ }
+ public void setData(ref byte[] Save, byte[] Inject)
+ {
+ if (Length != Inject.Length)
+ throw new Exception(String.Format(
+ "Data lengths do not match.{0}" +
+ "Expected:{1}{0}" +
+ "Received:{2}",
+ Environment.NewLine, Length, Inject.Length));
+ Array.Copy(Save, Offset, Inject, 0, Length);
+ }
+
+ public string getString(byte[] Save)
+ {
+ return Encoding.Unicode.GetString(Save.Skip(Offset).Take(Length).ToArray()).Trim('\0');
+ }
+ public void setString(ref byte[] Save, string s)
+ {
+ if (Length > s.Length*2)
+ throw new Exception(String.Format(
+ "String byte lengths do not match.{0}" +
+ "Expected:{1}{0}" +
+ "Received:{2}",
+ Environment.NewLine, Length, s.Length));
+ byte[] newARR = Encoding.Unicode.GetBytes(s.PadRight(Length/2));
+ Array.Copy(newARR, 0, Save, 0, Length);
+ }
+ }
+}
diff --git a/Misc/Util.cs b/Misc/Util.cs
new file mode 100644
index 0000000..5956dcf
--- /dev/null
+++ b/Misc/Util.cs
@@ -0,0 +1,64 @@
+using System;
+using System.IO;
+using System.Windows.Forms;
+
+namespace NLSE
+{
+ class Util
+ {
+ internal static string GetSDFLocation()
+ {
+ try
+ {
+ // Start by checking if the 3DS file path exists or not.
+ string path_SDF = null;
+ string[] DriveList = Environment.GetLogicalDrives();
+ for (int i = 1; i < DriveList.Length; i++) // Skip first drive (some users still have floppy drives and would chew up time!)
+ {
+ string potentialPath_SDF = NormalizePath(Path.Combine(DriveList[i], "filer" + Path.DirectorySeparatorChar + "UserSaveData"));
+ if (!Directory.Exists(potentialPath_SDF)) continue;
+
+ path_SDF = potentialPath_SDF; break;
+ }
+ if (path_SDF == null)
+ return null;
+ // 3DS data found in SD card reader. Let's get the title folder location!
+ string[] folders = Directory.GetDirectories(path_SDF, "*", SearchOption.TopDirectoryOnly);
+ Array.Sort(folders); // Don't need Modified Date, sort by path names just in case.
+
+ // Loop through all the folders in the Nintendo 3DS folder to see if any of them contain 'title'.
+ for (int i = folders.Length - 1; i >= 0; i--)
+ {
+ if (File.Exists(Path.Combine(folders[i], "00000862" + Path.DirectorySeparatorChar + "garden.dat"))) return Path.Combine(folders[i], "00000862"); // JP
+ if (File.Exists(Path.Combine(folders[i], "00000863" + Path.DirectorySeparatorChar + "garden.dat"))) return Path.Combine(folders[i], "00000863"); // NA
+ if (File.Exists(Path.Combine(folders[i], "00000864" + Path.DirectorySeparatorChar + "garden.dat"))) return Path.Combine(folders[i], "00000864"); // EU
+ }
+ return null; // Fallthrough
+ }
+ catch { return null; }
+ }
+ internal static string NormalizePath(string path)
+ {
+ return Path.GetFullPath(new Uri(path).LocalPath)
+ .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
+ }
+ internal static DialogResult Error(params string[] lines)
+ {
+ System.Media.SystemSounds.Exclamation.Play();
+ string msg = String.Join(Environment.NewLine + Environment.NewLine, lines);
+ return MessageBox.Show(msg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ internal static DialogResult Alert(params string[] lines)
+ {
+ System.Media.SystemSounds.Asterisk.Play();
+ string msg = String.Join(Environment.NewLine + Environment.NewLine, lines);
+ return MessageBox.Show(msg, "Alert", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ }
+ internal static DialogResult Prompt(MessageBoxButtons btn, params string[] lines)
+ {
+ System.Media.SystemSounds.Question.Play();
+ string msg = String.Join(Environment.NewLine + Environment.NewLine, lines);
+ return MessageBox.Show(msg, "Prompt", btn, MessageBoxIcon.Asterisk);
+ }
+ }
+}
diff --git a/Misc/Verification.cs b/Misc/Verification.cs
new file mode 100644
index 0000000..59ec6da
--- /dev/null
+++ b/Misc/Verification.cs
@@ -0,0 +1,59 @@
+using System;
+using System.Linq;
+
+namespace NLSE
+{
+ class Verification
+ {
+ internal static void fixChecksums(ref byte[] d)
+ {
+ switch (d.Length)
+ {
+ case 0x2BE940: // Happy Home
+ applyCHK(ref d, 0x1A0, 0x1C);
+ applyCHK(ref d, 0x1C0, 0x2BE75C);
+ applyCHK(ref d, 0x2BE920, 0xC);
+ break;
+ case 0x7FA00: // garden
+ applyCHK(ref d, 0x80, 0x1C);
+ for (int i = 0; i < 4; i++)
+ {
+ applyCHK(ref d, 0xA0 + (0x9F10*i), 0x6B64);
+ applyCHK(ref d, 0xA0 + (0x9F10*i) + 0x6B68, 0x33A4);
+ }
+ applyCHK(ref d, 0x27CE0, 0x218B0);
+ applyCHK(ref d, 0x495A0, 0x44B8);
+ applyCHK(ref d, 0x4DA5C, 0x1E420);
+ applyCHK(ref d, 0x6BE80, 0x20);
+ applyCHK(ref d, 0x6BEA4, 0x13AF8);
+ break;
+ case 0x17B80C: // exhibition
+ applyCHK(ref d, 0x0, 0x17B808);
+ break;
+ case 0x29504: // friend#
+ applyCHK(ref d, 0x0, 0x29500);
+ break;
+
+ default:
+ throw new Exception("Invalid file size!" + Environment.NewLine + d.Length);
+ }
+ }
+ private static void applyCHK(ref byte[] data, int start, int length)
+ {
+ byte[] region = data.Skip(start + 4).Take(length).ToArray();
+ Array.Copy(BitConverter.GetBytes(CRC32C_acnl(region)), 0, data, start, 4);
+ }
+
+ private static uint[] table = { 0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB, 0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24, 0x105EC76F, 0xE235446C, 0xF165B798, 0x30E349B, 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384, 0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B, 0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35, 0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA, 0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A, 0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595, 0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957, 0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198, 0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38, 0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7, 0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789, 0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859, 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46, 0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, 0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6, 0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36, 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829, 0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93, 0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C, 0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC, 0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C, 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033, 0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D, 0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, 0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982, 0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622, 0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, 0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED, 0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, 0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F, 0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0, 0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, 0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540, 0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F, 0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE, 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1, 0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E, 0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81, 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E, 0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351 };
+ private static uint CRC32C_acnl(byte[] data)
+ {
+ int size = data.Length;
+ uint crc = 0xFFFFFFFF;
+ int p = 0;
+ while (size-- != 0)
+ crc = table[(crc ^ data[p++]) & 0xff] ^ (crc >> 8);
+
+ return ~crc;
+ }
+ }
+}
diff --git a/NLSE.csproj b/NLSE.csproj
new file mode 100644
index 0000000..c504511
--- /dev/null
+++ b/NLSE.csproj
@@ -0,0 +1,120 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {E3484BF1-9180-41C5-8EBC-E6CDB7C1F8BF}
+ WinExe
+ Properties
+ NLSE
+ NLSE
+ v4.0
+ 512
+
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Exhibition.cs
+
+
+ Form
+
+
+ Main.cs
+
+
+ Form
+
+
+ Friend.cs
+
+
+ Form
+
+
+ Garden.cs
+
+
+
+
+
+
+ Main.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ Exhibition.cs
+
+
+ Friend.cs
+
+
+ Garden.cs
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/NLSE.sln b/NLSE.sln
new file mode 100644
index 0000000..cb7d04f
--- /dev/null
+++ b/NLSE.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NLSE", "NLSE.csproj", "{E3484BF1-9180-41C5-8EBC-E6CDB7C1F8BF}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E3484BF1-9180-41C5-8EBC-E6CDB7C1F8BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E3484BF1-9180-41C5-8EBC-E6CDB7C1F8BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E3484BF1-9180-41C5-8EBC-E6CDB7C1F8BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E3484BF1-9180-41C5-8EBC-E6CDB7C1F8BF}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/NLSE.v11.suo b/NLSE.v11.suo
new file mode 100644
index 0000000..363d1fa
Binary files /dev/null and b/NLSE.v11.suo differ
diff --git a/Program.cs b/Program.cs
new file mode 100644
index 0000000..6b0b836
--- /dev/null
+++ b/Program.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Windows.Forms;
+
+namespace NLSE
+{
+ static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new Main());
+ }
+ }
+}
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..5706cfc
--- /dev/null
+++ b/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("NLSE")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("NLSE")]
+[assembly: AssemblyCopyright("Kaphotics © 2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("d86a4324-dce2-4324-aa44-e538e5cd99d1")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..3f752e5
--- /dev/null
+++ b/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.17929
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace NLSE.Properties {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NLSE.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..4284737
--- /dev/null
+++ b/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.17929
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace NLSE.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/Properties/Settings.settings b/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/Subforms/Exhibition.Designer.cs b/Subforms/Exhibition.Designer.cs
new file mode 100644
index 0000000..a937d29
--- /dev/null
+++ b/Subforms/Exhibition.Designer.cs
@@ -0,0 +1,80 @@
+namespace NLSE
+{
+ partial class Exhibition
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Exhibition));
+ this.B_Cancel = new System.Windows.Forms.Button();
+ this.B_Save = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // B_Cancel
+ //
+ this.B_Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.B_Cancel.Location = new System.Drawing.Point(136, 227);
+ this.B_Cancel.Name = "B_Cancel";
+ this.B_Cancel.Size = new System.Drawing.Size(65, 23);
+ this.B_Cancel.TabIndex = 5;
+ this.B_Cancel.Text = "Cancel";
+ this.B_Cancel.UseVisualStyleBackColor = true;
+ this.B_Cancel.Click += new System.EventHandler(this.B_Cancel_Click);
+ //
+ // B_Save
+ //
+ this.B_Save.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.B_Save.Location = new System.Drawing.Point(207, 227);
+ this.B_Save.Name = "B_Save";
+ this.B_Save.Size = new System.Drawing.Size(65, 23);
+ this.B_Save.TabIndex = 4;
+ this.B_Save.Text = "Save";
+ this.B_Save.UseVisualStyleBackColor = true;
+ this.B_Save.Click += new System.EventHandler(this.B_Save_Click);
+ //
+ // Exhibition
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(284, 262);
+ this.Controls.Add(this.B_Cancel);
+ this.Controls.Add(this.B_Save);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.Name = "Exhibition";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "Exhibition Editor";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button B_Cancel;
+ private System.Windows.Forms.Button B_Save;
+ }
+}
\ No newline at end of file
diff --git a/Subforms/Exhibition.cs b/Subforms/Exhibition.cs
new file mode 100644
index 0000000..a6ade36
--- /dev/null
+++ b/Subforms/Exhibition.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Windows.Forms;
+
+namespace NLSE
+{
+ public partial class Exhibition : Form
+ {
+ public Exhibition(byte[] data)
+ {
+ InitializeComponent();
+ Save = new ExhibitionData(data);
+
+ // Load
+ loadData();
+ }
+ private void B_Save_Click(object sender, EventArgs e)
+ {
+ saveData();
+ Close();
+ }
+ private void B_Cancel_Click(object sender, EventArgs e)
+ {
+ Close();
+ }
+
+ // Exhibition Save Editing
+ private ExhibitionData Save;
+ class ExhibitionData
+ {
+ public byte[] Data;
+ public ExhibitionData(byte[] data)
+ {
+ Data = data;
+ }
+ }
+ private void loadData()
+ {
+
+ }
+ private void saveData()
+ {
+
+ }
+
+ //
+ }
+}
diff --git a/Subforms/Exhibition.resx b/Subforms/Exhibition.resx
new file mode 100644
index 0000000..8fb9a60
--- /dev/null
+++ b/Subforms/Exhibition.resx
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ AAABAAEAEBAAAAAAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAA
+ AAD///8B////Af///wEAxQAHAMUAMQDFAF8AxQB/AMUAkQDFAJUAxQCPAMUAL////wH///8B////Af//
+ /wH///8BAMUACwDFAD0AxQB/AMUAwwDFAPMAxQD/AMUA/wDFAP8AxQD/AMUAlwDFABP///8BAMUAAwDF
+ AA////8B////AQDFAGsAxQD/AMUA/wDFAP8AxQD/AMUA/wDGAP8AxQD/AMUA0////wH///8B////Af//
+ /wEAxQBjAMUAOf///wEAxQANAMUA5wDFAP8AwwD/AMYA/wDHAP8AvwD/AMUA/wDFALv///8B////Af//
+ /wH///8BAMUAVQDFAN0AxQAF////AQDFAHcAxgD/AMEA/wGwAP8AwQD/AbAA/wC6AP8AxgDpAMUAE///
+ /wH///8B////AQDFAJ8AxQD/AMUARf///wEAxQAXAMUA8wDGAP8AwwD/AaoA/wKTAP8AuwD/AMcA/wDF
+ ANMAxQBLAMYAMwDFAJUAxQD/AMUA/wDFAJP///8B////AQDFAMMAxQD/AMYA/wDJAP8BpgD/AaMA/wDH
+ AP8AxgD/AMYA/wC/AP8AxQD/AMUA/wDFAP8AxQC1////Af///wEAxQCLAMYA/wDEAP8BtgD/AasA/wKK
+ AP8BmAD/AMQA/wDDAP8BrQD/AMcA/wDFAP8AxQD/AMUAq////wH///8BAMUAWQDFAP8AxAD/AL8A/wC9
+ AP8AvwD/AaIA/wKUAP8BpAD/Aa4A/wDIAP8AxQD/AMUA/wDFAFn///8B////AQDFAC0AxQD/AMUA/wDG
+ AP8AyAD/AMEA/wGxAP8CigD/AokA/wDCAP8AxgD/AMUA/wDFALn///8B////Af///wEAxQADAMUAyQDF
+ AP8AxAD/AbMA/wGmAP8BrwD/AL0A/wGjAP8BngD/AMcA/wDFAL8AxQAN////Af///wH///8B////AQDF
+ AEcAxQD/AMEA/wDAAP8AxwD/AMgA/wDHAP8AyAD/AbQA/wC9AO8AxgAZ////Af///wH///8B////Af//
+ /wH///8BAMUAaQDFAPEAxgD/AMUA/wDFAP8AxQDpAMUAkwDHADEAxQDfAMUA1QDFABn///8B////Af//
+ /wH///8B////Af///wEAxQAZAMUASwDFAFEAxQA5AMUADf///wH///8BAMUArQDFAP8AxQDdAMUAF///
+ /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQDFAGMAxQD/AMUAzQDF
+ ABf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAxQAVAMUAZQDF
+ AAn///8BAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//w==
+
+
+
\ No newline at end of file
diff --git a/Subforms/Friend.Designer.cs b/Subforms/Friend.Designer.cs
new file mode 100644
index 0000000..0a2d8e3
--- /dev/null
+++ b/Subforms/Friend.Designer.cs
@@ -0,0 +1,80 @@
+namespace NLSE
+{
+ partial class Friend
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Friend));
+ this.B_Cancel = new System.Windows.Forms.Button();
+ this.B_Save = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // B_Cancel
+ //
+ this.B_Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.B_Cancel.Location = new System.Drawing.Point(136, 227);
+ this.B_Cancel.Name = "B_Cancel";
+ this.B_Cancel.Size = new System.Drawing.Size(65, 23);
+ this.B_Cancel.TabIndex = 5;
+ this.B_Cancel.Text = "Cancel";
+ this.B_Cancel.UseVisualStyleBackColor = true;
+ this.B_Cancel.Click += new System.EventHandler(this.B_Cancel_Click);
+ //
+ // B_Save
+ //
+ this.B_Save.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.B_Save.Location = new System.Drawing.Point(207, 227);
+ this.B_Save.Name = "B_Save";
+ this.B_Save.Size = new System.Drawing.Size(65, 23);
+ this.B_Save.TabIndex = 4;
+ this.B_Save.Text = "Save";
+ this.B_Save.UseVisualStyleBackColor = true;
+ this.B_Save.Click += new System.EventHandler(this.B_Save_Click);
+ //
+ // Friend
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(284, 262);
+ this.Controls.Add(this.B_Cancel);
+ this.Controls.Add(this.B_Save);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.Name = "Friend";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "Friend Editor";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button B_Cancel;
+ private System.Windows.Forms.Button B_Save;
+ }
+}
\ No newline at end of file
diff --git a/Subforms/Friend.cs b/Subforms/Friend.cs
new file mode 100644
index 0000000..b89eb58
--- /dev/null
+++ b/Subforms/Friend.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Windows.Forms;
+
+namespace NLSE
+{
+ public partial class Friend : Form
+ {
+ public Friend(byte[] data)
+ {
+ InitializeComponent();
+ Save = new FriendData(data);
+
+ // Load
+ loadData();
+ }
+ private void B_Save_Click(object sender, EventArgs e)
+ {
+ saveData();
+ Close();
+ }
+ private void B_Cancel_Click(object sender, EventArgs e)
+ {
+ Close();
+ }
+
+ // Friend Save Editing
+ private FriendData Save;
+ class FriendData
+ {
+ public byte[] Data;
+ public FriendData(byte[] data)
+ {
+ Data = data;
+ }
+ }
+ private void loadData()
+ {
+
+ }
+ private void saveData()
+ {
+
+ }
+
+ //
+ }
+}
diff --git a/Subforms/Friend.resx b/Subforms/Friend.resx
new file mode 100644
index 0000000..8fb9a60
--- /dev/null
+++ b/Subforms/Friend.resx
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ AAABAAEAEBAAAAAAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAA
+ AAD///8B////Af///wEAxQAHAMUAMQDFAF8AxQB/AMUAkQDFAJUAxQCPAMUAL////wH///8B////Af//
+ /wH///8BAMUACwDFAD0AxQB/AMUAwwDFAPMAxQD/AMUA/wDFAP8AxQD/AMUAlwDFABP///8BAMUAAwDF
+ AA////8B////AQDFAGsAxQD/AMUA/wDFAP8AxQD/AMUA/wDGAP8AxQD/AMUA0////wH///8B////Af//
+ /wEAxQBjAMUAOf///wEAxQANAMUA5wDFAP8AwwD/AMYA/wDHAP8AvwD/AMUA/wDFALv///8B////Af//
+ /wH///8BAMUAVQDFAN0AxQAF////AQDFAHcAxgD/AMEA/wGwAP8AwQD/AbAA/wC6AP8AxgDpAMUAE///
+ /wH///8B////AQDFAJ8AxQD/AMUARf///wEAxQAXAMUA8wDGAP8AwwD/AaoA/wKTAP8AuwD/AMcA/wDF
+ ANMAxQBLAMYAMwDFAJUAxQD/AMUA/wDFAJP///8B////AQDFAMMAxQD/AMYA/wDJAP8BpgD/AaMA/wDH
+ AP8AxgD/AMYA/wC/AP8AxQD/AMUA/wDFAP8AxQC1////Af///wEAxQCLAMYA/wDEAP8BtgD/AasA/wKK
+ AP8BmAD/AMQA/wDDAP8BrQD/AMcA/wDFAP8AxQD/AMUAq////wH///8BAMUAWQDFAP8AxAD/AL8A/wC9
+ AP8AvwD/AaIA/wKUAP8BpAD/Aa4A/wDIAP8AxQD/AMUA/wDFAFn///8B////AQDFAC0AxQD/AMUA/wDG
+ AP8AyAD/AMEA/wGxAP8CigD/AokA/wDCAP8AxgD/AMUA/wDFALn///8B////Af///wEAxQADAMUAyQDF
+ AP8AxAD/AbMA/wGmAP8BrwD/AL0A/wGjAP8BngD/AMcA/wDFAL8AxQAN////Af///wH///8B////AQDF
+ AEcAxQD/AMEA/wDAAP8AxwD/AMgA/wDHAP8AyAD/AbQA/wC9AO8AxgAZ////Af///wH///8B////Af//
+ /wH///8BAMUAaQDFAPEAxgD/AMUA/wDFAP8AxQDpAMUAkwDHADEAxQDfAMUA1QDFABn///8B////Af//
+ /wH///8B////Af///wEAxQAZAMUASwDFAFEAxQA5AMUADf///wH///8BAMUArQDFAP8AxQDdAMUAF///
+ /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQDFAGMAxQD/AMUAzQDF
+ ABf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAxQAVAMUAZQDF
+ AAn///8BAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//w==
+
+
+
\ No newline at end of file
diff --git a/Subforms/Garden.Designer.cs b/Subforms/Garden.Designer.cs
new file mode 100644
index 0000000..4a7c35f
--- /dev/null
+++ b/Subforms/Garden.Designer.cs
@@ -0,0 +1,107 @@
+namespace NLSE
+{
+ partial class Garden
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Garden));
+ this.PB_JPEG = new System.Windows.Forms.PictureBox();
+ this.L_Info = new System.Windows.Forms.Label();
+ this.B_Save = new System.Windows.Forms.Button();
+ this.B_Cancel = new System.Windows.Forms.Button();
+ ((System.ComponentModel.ISupportInitialize)(this.PB_JPEG)).BeginInit();
+ this.SuspendLayout();
+ //
+ // PB_JPEG
+ //
+ this.PB_JPEG.Location = new System.Drawing.Point(12, 12);
+ this.PB_JPEG.Name = "PB_JPEG";
+ this.PB_JPEG.Size = new System.Drawing.Size(64, 104);
+ this.PB_JPEG.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
+ this.PB_JPEG.TabIndex = 0;
+ this.PB_JPEG.TabStop = false;
+ //
+ // L_Info
+ //
+ this.L_Info.AutoSize = true;
+ this.L_Info.Location = new System.Drawing.Point(82, 12);
+ this.L_Info.Name = "L_Info";
+ this.L_Info.Size = new System.Drawing.Size(25, 13);
+ this.L_Info.TabIndex = 1;
+ this.L_Info.Text = "Info";
+ //
+ // B_Save
+ //
+ this.B_Save.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.B_Save.Location = new System.Drawing.Point(207, 227);
+ this.B_Save.Name = "B_Save";
+ this.B_Save.Size = new System.Drawing.Size(65, 23);
+ this.B_Save.TabIndex = 2;
+ this.B_Save.Text = "Save";
+ this.B_Save.UseVisualStyleBackColor = true;
+ this.B_Save.Click += new System.EventHandler(this.B_Save_Click);
+ //
+ // B_Cancel
+ //
+ this.B_Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.B_Cancel.Location = new System.Drawing.Point(136, 227);
+ this.B_Cancel.Name = "B_Cancel";
+ this.B_Cancel.Size = new System.Drawing.Size(65, 23);
+ this.B_Cancel.TabIndex = 3;
+ this.B_Cancel.Text = "Cancel";
+ this.B_Cancel.UseVisualStyleBackColor = true;
+ this.B_Cancel.Click += new System.EventHandler(this.B_Cancel_Click);
+ //
+ // Garden
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(284, 262);
+ this.Controls.Add(this.B_Cancel);
+ this.Controls.Add(this.B_Save);
+ this.Controls.Add(this.L_Info);
+ this.Controls.Add(this.PB_JPEG);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.Name = "Garden";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "Garden Editor";
+ ((System.ComponentModel.ISupportInitialize)(this.PB_JPEG)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.PictureBox PB_JPEG;
+ private System.Windows.Forms.Label L_Info;
+ private System.Windows.Forms.Button B_Save;
+ private System.Windows.Forms.Button B_Cancel;
+ }
+}
\ No newline at end of file
diff --git a/Subforms/Garden.cs b/Subforms/Garden.cs
new file mode 100644
index 0000000..eebd6ba
--- /dev/null
+++ b/Subforms/Garden.cs
@@ -0,0 +1,76 @@
+using System;
+using System.Drawing;
+using System.IO;
+using System.Windows.Forms;
+
+namespace NLSE
+{
+ public partial class Garden : Form
+ {
+ public Garden(byte[] data)
+ {
+ InitializeComponent();
+ Save = new GardenData(data);
+
+ // Load
+ loadData();
+ }
+ private void B_Save_Click(object sender, EventArgs e)
+ {
+ saveData();
+ Close();
+ }
+ private void B_Cancel_Click(object sender, EventArgs e)
+ {
+ Close();
+ }
+
+ // Garden Save Editing
+ private GardenData Save;
+ class GardenData
+ {
+ // public int TOWNMAGIC = 0x84; // Offset of the Town Data
+ // public int Villagers = 0x180 + 0x84;
+
+ // Player Name is 0x16 bytes long.
+ // Town Name is 0x12 bytes long.
+ public DataRef JPEG = new DataRef(0x57C4, 0x1400);
+ public DataRef PlayerName = new DataRef(0xF8, 0x14);
+ public DataRef TownName = new DataRef(0x10E, 0x12);
+
+ public byte[] Data;
+ public GardenData(byte[] data)
+ {
+ Data = data;
+ }
+ }
+ private void loadData()
+ {
+ PB_JPEG.Image = Image.FromStream(new MemoryStream(Save.JPEG.getData(Save.Data)));
+ string Name = Save.PlayerName.getString(Save.Data);
+ string Town = Save.TownName.getString(Save.Data);
+ L_Info.Text = Name + Environment.NewLine + Town;
+ }
+ private void saveData()
+ {
+
+ }
+
+ // Unused
+ private int getTownOffset()
+ {
+ return 0x84;
+ }
+
+ private void lt_bank()
+ {
+ int offset = getTownOffset();
+ const int BANK_OFFSET = 0x6B8C;
+
+ offset += BANK_OFFSET;
+ Array.Copy(BitConverter.GetBytes(0x8CF95678), 0, Save.Data, offset, 4);
+ Array.Copy(BitConverter.GetBytes(0x0D118636), 0, Save.Data, offset, 4);
+ }
+
+ }
+}
diff --git a/Subforms/Garden.resx b/Subforms/Garden.resx
new file mode 100644
index 0000000..8fb9a60
--- /dev/null
+++ b/Subforms/Garden.resx
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ AAABAAEAEBAAAAAAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAA
+ AAD///8B////Af///wEAxQAHAMUAMQDFAF8AxQB/AMUAkQDFAJUAxQCPAMUAL////wH///8B////Af//
+ /wH///8BAMUACwDFAD0AxQB/AMUAwwDFAPMAxQD/AMUA/wDFAP8AxQD/AMUAlwDFABP///8BAMUAAwDF
+ AA////8B////AQDFAGsAxQD/AMUA/wDFAP8AxQD/AMUA/wDGAP8AxQD/AMUA0////wH///8B////Af//
+ /wEAxQBjAMUAOf///wEAxQANAMUA5wDFAP8AwwD/AMYA/wDHAP8AvwD/AMUA/wDFALv///8B////Af//
+ /wH///8BAMUAVQDFAN0AxQAF////AQDFAHcAxgD/AMEA/wGwAP8AwQD/AbAA/wC6AP8AxgDpAMUAE///
+ /wH///8B////AQDFAJ8AxQD/AMUARf///wEAxQAXAMUA8wDGAP8AwwD/AaoA/wKTAP8AuwD/AMcA/wDF
+ ANMAxQBLAMYAMwDFAJUAxQD/AMUA/wDFAJP///8B////AQDFAMMAxQD/AMYA/wDJAP8BpgD/AaMA/wDH
+ AP8AxgD/AMYA/wC/AP8AxQD/AMUA/wDFAP8AxQC1////Af///wEAxQCLAMYA/wDEAP8BtgD/AasA/wKK
+ AP8BmAD/AMQA/wDDAP8BrQD/AMcA/wDFAP8AxQD/AMUAq////wH///8BAMUAWQDFAP8AxAD/AL8A/wC9
+ AP8AvwD/AaIA/wKUAP8BpAD/Aa4A/wDIAP8AxQD/AMUA/wDFAFn///8B////AQDFAC0AxQD/AMUA/wDG
+ AP8AyAD/AMEA/wGxAP8CigD/AokA/wDCAP8AxgD/AMUA/wDFALn///8B////Af///wEAxQADAMUAyQDF
+ AP8AxAD/AbMA/wGmAP8BrwD/AL0A/wGjAP8BngD/AMcA/wDFAL8AxQAN////Af///wH///8B////AQDF
+ AEcAxQD/AMEA/wDAAP8AxwD/AMgA/wDHAP8AyAD/AbQA/wC9AO8AxgAZ////Af///wH///8B////Af//
+ /wH///8BAMUAaQDFAPEAxgD/AMUA/wDFAP8AxQDpAMUAkwDHADEAxQDfAMUA1QDFABn///8B////Af//
+ /wH///8B////Af///wEAxQAZAMUASwDFAFEAxQA5AMUADf///wH///8BAMUArQDFAP8AxQDdAMUAF///
+ /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQDFAGMAxQD/AMUAzQDF
+ ABf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAxQAVAMUAZQDF
+ AAn///8BAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//w==
+
+
+
\ No newline at end of file
diff --git a/bin/Debug/ACNL.vshost.exe.config b/bin/Debug/ACNL.vshost.exe.config
new file mode 100644
index 0000000..8e15646
--- /dev/null
+++ b/bin/Debug/ACNL.vshost.exe.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bin/Debug/ACNL.vshost.exe.manifest b/bin/Debug/ACNL.vshost.exe.manifest
new file mode 100644
index 0000000..061c9ca
--- /dev/null
+++ b/bin/Debug/ACNL.vshost.exe.manifest
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bin/Debug/NLSE.exe b/bin/Debug/NLSE.exe
new file mode 100644
index 0000000..0f2bb4d
Binary files /dev/null and b/bin/Debug/NLSE.exe differ
diff --git a/bin/Debug/NLSE.exe.config b/bin/Debug/NLSE.exe.config
new file mode 100644
index 0000000..e22aa48
--- /dev/null
+++ b/bin/Debug/NLSE.exe.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/bin/Debug/NLSE.pdb b/bin/Debug/NLSE.pdb
new file mode 100644
index 0000000..0967d70
Binary files /dev/null and b/bin/Debug/NLSE.pdb differ
diff --git a/bin/Debug/NLSE.vshost.exe b/bin/Debug/NLSE.vshost.exe
new file mode 100644
index 0000000..3c5dcfb
Binary files /dev/null and b/bin/Debug/NLSE.vshost.exe differ
diff --git a/bin/Debug/NLSE.vshost.exe.config b/bin/Debug/NLSE.vshost.exe.config
new file mode 100644
index 0000000..e22aa48
--- /dev/null
+++ b/bin/Debug/NLSE.vshost.exe.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/bin/Debug/NLSE.vshost.exe.manifest b/bin/Debug/NLSE.vshost.exe.manifest
new file mode 100644
index 0000000..061c9ca
--- /dev/null
+++ b/bin/Debug/NLSE.vshost.exe.manifest
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/obj/Debug/NLSE.csproj.FileListAbsolute.txt b/obj/Debug/NLSE.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..9707a0d
Binary files /dev/null and b/obj/Debug/NLSE.csproj.FileListAbsolute.txt differ