From f84d88a616594ae6af614b6a73c52f671c248d15 Mon Sep 17 00:00:00 2001 From: Kurt Date: Thu, 13 Aug 2015 22:57:38 -0700 Subject: [PATCH] Initial Commit --- App.config | 6 + Favicon.ico | Bin 0 -> 1150 bytes Main.Designer.cs | 120 ++++++++++++++ Main.cs | 182 +++++++++++++++++++++ Main.resx | 145 ++++++++++++++++ Misc/Data.cs | 47 ++++++ Misc/Util.cs | 64 ++++++++ Misc/Verification.cs | 59 +++++++ NLSE.csproj | 120 ++++++++++++++ NLSE.sln | 20 +++ NLSE.v11.suo | Bin 0 -> 17920 bytes Program.cs | 19 +++ Properties/AssemblyInfo.cs | 36 ++++ Properties/Resources.Designer.cs | 63 +++++++ Properties/Resources.resx | 117 +++++++++++++ Properties/Settings.Designer.cs | 26 +++ Properties/Settings.settings | 7 + Subforms/Exhibition.Designer.cs | 80 +++++++++ Subforms/Exhibition.cs | 47 ++++++ Subforms/Exhibition.resx | 145 ++++++++++++++++ Subforms/Friend.Designer.cs | 80 +++++++++ Subforms/Friend.cs | 47 ++++++ Subforms/Friend.resx | 145 ++++++++++++++++ Subforms/Garden.Designer.cs | 107 ++++++++++++ Subforms/Garden.cs | 76 +++++++++ Subforms/Garden.resx | 145 ++++++++++++++++ bin/Debug/ACNL.vshost.exe.config | 6 + bin/Debug/ACNL.vshost.exe.manifest | 11 ++ bin/Debug/NLSE.exe | Bin 0 -> 29696 bytes bin/Debug/NLSE.exe.config | 6 + bin/Debug/NLSE.pdb | Bin 0 -> 56832 bytes bin/Debug/NLSE.vshost.exe | Bin 0 -> 22472 bytes bin/Debug/NLSE.vshost.exe.config | 6 + bin/Debug/NLSE.vshost.exe.manifest | 11 ++ obj/Debug/NLSE.csproj.FileListAbsolute.txt | Bin 0 -> 84 bytes 35 files changed, 1943 insertions(+) create mode 100644 App.config create mode 100644 Favicon.ico create mode 100644 Main.Designer.cs create mode 100644 Main.cs create mode 100644 Main.resx create mode 100644 Misc/Data.cs create mode 100644 Misc/Util.cs create mode 100644 Misc/Verification.cs create mode 100644 NLSE.csproj create mode 100644 NLSE.sln create mode 100644 NLSE.v11.suo create mode 100644 Program.cs create mode 100644 Properties/AssemblyInfo.cs create mode 100644 Properties/Resources.Designer.cs create mode 100644 Properties/Resources.resx create mode 100644 Properties/Settings.Designer.cs create mode 100644 Properties/Settings.settings create mode 100644 Subforms/Exhibition.Designer.cs create mode 100644 Subforms/Exhibition.cs create mode 100644 Subforms/Exhibition.resx create mode 100644 Subforms/Friend.Designer.cs create mode 100644 Subforms/Friend.cs create mode 100644 Subforms/Friend.resx create mode 100644 Subforms/Garden.Designer.cs create mode 100644 Subforms/Garden.cs create mode 100644 Subforms/Garden.resx create mode 100644 bin/Debug/ACNL.vshost.exe.config create mode 100644 bin/Debug/ACNL.vshost.exe.manifest create mode 100644 bin/Debug/NLSE.exe create mode 100644 bin/Debug/NLSE.exe.config create mode 100644 bin/Debug/NLSE.pdb create mode 100644 bin/Debug/NLSE.vshost.exe create mode 100644 bin/Debug/NLSE.vshost.exe.config create mode 100644 bin/Debug/NLSE.vshost.exe.manifest create mode 100644 obj/Debug/NLSE.csproj.FileListAbsolute.txt 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 0000000000000000000000000000000000000000..828edab3ffb1776aa0989e6b975cf76a8f29c7d8 GIT binary patch literal 1150 zcmbu8zb`{k6vxjkA|efmAl*7zM8sr}Sj5oDVCZBJ3GoLQ%@{;Vm`D(Vrhdea1Zj$D z>0oM%Vic2zKj8YD``)dW4kEnf({tas=X>t=-rkBBKJD$ola%R3kuF9(ps6Gn_boEa zT>WFMH6AHRGxWm*%)<(-!7}vux@aWd3PYgvMfe0;$2#vFsv|Z)oA1GR7V7J*lxw-F zul14oNf-?K#Tmc49z`^&yN5zef8}*PQacXM&=mHVbGjR`<_MjSmyFBuMxFB>(QlDc z&m*C}oAIaXfd{iMHkM)j3e-zUs*qxSfT-u`_nV3I)UylxSLm?^JE30pq(3(k zC0BEY?i{jsSR`(sBgZdeO^z7&@%n5;pLXkOt*(;~qS>a;D%xE*Aol>@{?ieCZ!NE0 zwNB6RIPei$;QbbKF3?|itwwTsFDh + /// 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 0000000000000000000000000000000000000000..363d1fa76f9eb2db141610590c4560a1a1a8685f GIT binary patch literal 17920 zcmeIuF#!Mo0K%a4Pi+hzh(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM x7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^%KfdNJU00961 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0f2bb4d14d81208474669a98d352b4de92780e74 GIT binary patch literal 29696 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 + + + + + diff --git a/bin/Debug/NLSE.pdb b/bin/Debug/NLSE.pdb new file mode 100644 index 0000000000000000000000000000000000000000..0967d7051bde16308a972e2d30fadb059988454f GIT binary patch literal 56832 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 + + + + + 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 0000000000000000000000000000000000000000..9707a0de7a94310f6e8959617a62fc2a7b83d018 GIT binary patch literal 84 LcmZQzpgsTq08{`0 literal 0 HcmV?d00001