diff --git a/App.config b/App.config
new file mode 100644
index 0000000..56efbc7
--- /dev/null
+++ b/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Form1.Designer.cs b/Form1.Designer.cs
new file mode 100644
index 0000000..90580f7
--- /dev/null
+++ b/Form1.Designer.cs
@@ -0,0 +1,159 @@
+namespace HelloWorld
+{
+ partial class Form1
+ {
+ ///
+ /// 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()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
+ this.textBoxUsername = new System.Windows.Forms.TextBox();
+ this.labelUsername = new System.Windows.Forms.Label();
+ this.labelUUID = new System.Windows.Forms.Label();
+ this.textBoxUUID = new System.Windows.Forms.TextBox();
+ this.btnGenerateUUID = new System.Windows.Forms.Button();
+ this.checkUsername = new System.Windows.Forms.CheckBox();
+ this.checkUUID = new System.Windows.Forms.CheckBox();
+ this.btnPlay = new System.Windows.Forms.Button();
+ this.imageList1 = new System.Windows.Forms.ImageList(this.components);
+ this.SuspendLayout();
+ //
+ // textBoxUsername
+ //
+ this.textBoxUsername.Location = new System.Drawing.Point(12, 26);
+ this.textBoxUsername.Name = "textBoxUsername";
+ this.textBoxUsername.Size = new System.Drawing.Size(166, 20);
+ this.textBoxUsername.TabIndex = 2;
+ //
+ // labelUsername
+ //
+ this.labelUsername.AutoSize = true;
+ this.labelUsername.Location = new System.Drawing.Point(12, 10);
+ this.labelUsername.Name = "labelUsername";
+ this.labelUsername.Size = new System.Drawing.Size(55, 13);
+ this.labelUsername.TabIndex = 3;
+ this.labelUsername.Text = "Username";
+ //
+ // labelUUID
+ //
+ this.labelUUID.AutoSize = true;
+ this.labelUUID.Location = new System.Drawing.Point(12, 94);
+ this.labelUUID.Name = "labelUUID";
+ this.labelUUID.Size = new System.Drawing.Size(42, 13);
+ this.labelUUID.TabIndex = 5;
+ this.labelUUID.Text = "8 Digits";
+ this.labelUUID.Click += new System.EventHandler(this.label2_Click);
+ //
+ // textBoxUUID
+ //
+ this.textBoxUUID.Location = new System.Drawing.Point(12, 110);
+ this.textBoxUUID.Name = "textBoxUUID";
+ this.textBoxUUID.Size = new System.Drawing.Size(166, 20);
+ this.textBoxUUID.TabIndex = 4;
+ this.textBoxUUID.TextChanged += new System.EventHandler(this.textBox2_TextChanged);
+ //
+ // btnGenerateUUID
+ //
+ this.btnGenerateUUID.Location = new System.Drawing.Point(184, 110);
+ this.btnGenerateUUID.Name = "btnGenerateUUID";
+ this.btnGenerateUUID.Size = new System.Drawing.Size(62, 20);
+ this.btnGenerateUUID.TabIndex = 6;
+ this.btnGenerateUUID.Text = "Generate";
+ this.btnGenerateUUID.UseVisualStyleBackColor = true;
+ this.btnGenerateUUID.Click += new System.EventHandler(this.button1_Click_1);
+ //
+ // checkUsername
+ //
+ this.checkUsername.AutoSize = true;
+ this.checkUsername.Location = new System.Drawing.Point(12, 52);
+ this.checkUsername.Name = "checkUsername";
+ this.checkUsername.Size = new System.Drawing.Size(57, 17);
+ this.checkUsername.TabIndex = 7;
+ this.checkUsername.Text = "Save?";
+ this.checkUsername.UseVisualStyleBackColor = true;
+ this.checkUsername.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
+ //
+ // checkUUID
+ //
+ this.checkUUID.AutoSize = true;
+ this.checkUUID.Location = new System.Drawing.Point(12, 136);
+ this.checkUUID.Name = "checkUUID";
+ this.checkUUID.Size = new System.Drawing.Size(57, 17);
+ this.checkUUID.TabIndex = 8;
+ this.checkUUID.Text = "Save?";
+ this.checkUUID.UseVisualStyleBackColor = true;
+ this.checkUUID.CheckedChanged += new System.EventHandler(this.checkUUID_CheckedChanged);
+ //
+ // btnPlay
+ //
+ this.btnPlay.Location = new System.Drawing.Point(285, 26);
+ this.btnPlay.Name = "btnPlay";
+ this.btnPlay.Size = new System.Drawing.Size(104, 104);
+ this.btnPlay.TabIndex = 9;
+ this.btnPlay.Text = "Play!";
+ this.btnPlay.UseVisualStyleBackColor = true;
+ this.btnPlay.Click += new System.EventHandler(this.button2_Click);
+ //
+ // imageList1
+ //
+ this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+ this.imageList1.ImageSize = new System.Drawing.Size(16, 16);
+ this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
+ //
+ // Form1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(404, 161);
+ this.Controls.Add(this.btnPlay);
+ this.Controls.Add(this.checkUUID);
+ this.Controls.Add(this.checkUsername);
+ this.Controls.Add(this.btnGenerateUUID);
+ this.Controls.Add(this.labelUUID);
+ this.Controls.Add(this.textBoxUUID);
+ this.Controls.Add(this.labelUsername);
+ this.Controls.Add(this.textBoxUsername);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Name = "Form1";
+ this.Text = "IveBeenAlone\'s Hytale Launcher";
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+ private System.Windows.Forms.TextBox textBoxUsername;
+ private System.Windows.Forms.Label labelUsername;
+ private System.Windows.Forms.Label labelUUID;
+ private System.Windows.Forms.TextBox textBoxUUID;
+ private System.Windows.Forms.Button btnGenerateUUID;
+ private System.Windows.Forms.CheckBox checkUsername;
+ private System.Windows.Forms.CheckBox checkUUID;
+ private System.Windows.Forms.Button btnPlay;
+ private System.Windows.Forms.ImageList imageList1;
+ }
+}
+
diff --git a/Form1.cs b/Form1.cs
new file mode 100644
index 0000000..484b51b
--- /dev/null
+++ b/Form1.cs
@@ -0,0 +1,201 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Diagnostics;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Security.Cryptography;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace HelloWorld
+{
+ public partial class Form1 : Form
+ {
+ public Form1()
+ {
+ InitializeComponent();
+ string path = ".ibalaunch";
+ string uuidsave = ".ibalaunch\\uuid";
+ string usersave = ".ibalaunch\\username";
+ string HytaleUserData = "UserData";
+
+ try
+ {
+ DirectoryInfo di = Directory.CreateDirectory(path);
+ Console.WriteLine($"Ensured directory exists: {di.FullName}");
+ }
+ catch (Exception)
+ {
+ Console.WriteLine($"An error occurred: idfk probably rw permission error?");
+ }
+
+
+ try
+ {
+ DirectoryInfo Hdi = Directory.CreateDirectory(HytaleUserData);
+ Console.WriteLine($"Ensured directory exists: {Hdi.FullName}");
+ }
+ catch (Exception)
+ {
+ Console.WriteLine($"An error occurred: idfk probably rw permission error?");
+ }
+
+
+ // Username File Checking
+ if (File.Exists(usersave))
+ {
+ FileInfo fileInfo = new FileInfo(usersave);
+ if (fileInfo.Length == 0)
+ {
+ Console.WriteLine("Username file is empty. Not setting anything.");
+ }
+ else
+ {
+ Console.WriteLine("Username file is not empty. Size: " + fileInfo.Length + " bytes.");
+ textBoxUsername.Text = File.ReadAllText(usersave);
+ checkUsername.Checked = true;
+ }
+ }
+ else
+ {
+ }
+
+ // UUID File Checking
+ if (File.Exists(uuidsave))
+ {
+ FileInfo fileInfo = new FileInfo(uuidsave);
+ if (fileInfo.Length == 0)
+ {
+ Console.WriteLine("UUID file is empty. Not setting anything.");
+ }
+ else
+ {
+ Console.WriteLine("UUID file is not empty. Size: " + fileInfo.Length + " bytes.");
+
+ textBoxUUID.Text = File.ReadAllText(uuidsave);
+ checkUUID.Checked = true;
+ }
+ }
+ else
+ {
+ }
+ }
+
+ private void button1_Click(object sender, EventArgs e){}
+ private void lblHelloWorld_Click(object sender, EventArgs e){}
+ private void label2_Click(object sender, EventArgs e){}
+ private void button2_Click(object sender, EventArgs e)
+ {
+
+ // All of this shit for username data
+ string TextBoxUsername = textBoxUsername.Text;
+ if (checkUsername.Checked == true)
+ {
+ Console.WriteLine("Username Checkbox true, saving.");
+ string usersave = ".ibalaunch\\username";
+ File.Create(usersave).Dispose();
+ Console.WriteLine("Username File exists, comparing textbox");
+ string UsernameFileText = File.ReadAllText(usersave);
+ if (UsernameFileText != TextBoxUsername)
+ {
+ Console.WriteLine("Username mismatch, writing!");
+ try
+ {
+ File.WriteAllText(usersave, TextBoxUsername);
+ Console.WriteLine("Username file saved.");
+ }
+ catch (Exception)
+ {
+ Console.WriteLine("An error occurred: idfk probably rw permission error?");
+ }
+ }
+ else
+ {
+ Console.WriteLine("Username already saved.");
+ }
+ }
+ else
+ {
+ Console.WriteLine("Username Checkbox false, not saving.");
+ }
+ Console.WriteLine("Username Shit done.");
+
+ // All of this shit is uuid data.
+ string TextBoxUUID = textBoxUUID.Text;
+ if (checkUUID.Checked == true)
+ {
+ Console.WriteLine("UUID Checkbox true, saving.");
+ string uuidsave = ".ibalaunch\\uuid";
+ File.Create(uuidsave).Dispose();
+ Console.WriteLine("UUID File exists, comparing textbox");
+ string UUIDFileText = File.ReadAllText(uuidsave);
+ if (UUIDFileText != TextBoxUUID)
+ {
+ Console.WriteLine("UUID mismatch, writing!");
+ try
+ {
+ File.WriteAllText(uuidsave, TextBoxUUID);
+ Console.WriteLine("UUID file saved.");
+ }
+ catch (Exception)
+ {
+ Console.WriteLine("An error occurred: idfk probably rw permission error?");
+ }
+ }
+ else
+ {
+ Console.WriteLine("UUID already saved.");
+ }
+ }
+ else
+ {
+ Console.WriteLine("UUID Checkbox false, not saving.");
+ }
+ Console.WriteLine("UUID Shit done.");
+
+
+ // Genuinely FUCK windows and C# and fucking whatever else to make this shit work
+ // I swear to fucking god I spent a solid 3 hours trying to make this thing
+ // OPEN A FUCKING EXE AND PASS ARGS CORRECTLY
+ string relativeExePath = Path.Combine("release\\package\\game\\latest\\Client\\", "HytaleClient.exe");
+ string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
+ string workingDirectory = Path.Combine(baseDirectory, "install");
+ string Hytaleappdir = "\\release\\package\\game\\latest";
+ string HytaleJava = "\\release\\package\\jre\\latest\\bin\\java.exe";
+
+ string arguments = " --app-dir "+workingDirectory+Hytaleappdir+" --user-dir "+baseDirectory+"UserData --java-exec "+ workingDirectory + HytaleJava+" --auth-mode offline --uuid 13371337-1337-1337-1337-1337"+textBoxUUID.Text+" --name \"" + textBoxUsername.Text + "\""; // Command-line arguments for the VB app
+
+ ProcessStartInfo startInfo = new ProcessStartInfo
+ {
+ FileName = relativeExePath,
+ Arguments = arguments,
+ UseShellExecute = true,
+ WorkingDirectory = workingDirectory
+ };
+
+ try
+ {
+ Process.Start(startInfo);
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show($"Error starting the VB.NET application: {ex.Message}");
+ }
+ }
+
+ private void checkBox1_CheckedChanged(object sender, EventArgs e){}
+ private void textBox2_TextChanged(object sender, EventArgs e){}
+ private void button1_Click_1(object sender, EventArgs e)
+ {
+ Random random = new Random();
+ int GeneratedUUIDVal = random.Next(10000000, 100000000);
+ textBoxUUID.Text = GeneratedUUIDVal.ToString();
+ }
+ private void checkUUID_CheckedChanged(object sender, EventArgs e){}
+ }
+}
\ No newline at end of file
diff --git a/Form1.resx b/Form1.resx
new file mode 100644
index 0000000..f3fc41c
--- /dev/null
+++ b/Form1.resx
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+
+
+ 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
+ AD/8AAAf+AAAH/gAAB/4AAAf/AAAP/////8=
+
+
+
\ No newline at end of file
diff --git a/IBAHytaleLauncher.csproj b/IBAHytaleLauncher.csproj
new file mode 100644
index 0000000..05536a5
--- /dev/null
+++ b/IBAHytaleLauncher.csproj
@@ -0,0 +1,123 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {420BC3CD-FE22-432A-82EB-DA5DEADBAB5F}
+ WinExe
+ IveBeenAlonesHytaleLauncher
+ IveBeenAlone%27s Hytale Launcher
+ v4.7.2
+ 512
+ true
+ true
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ false
+
+
+ hytale.ico
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Form1.cs
+
+
+
+
+ Form1.cs
+
+
+ ResXFileCodeGenerator
+ Designer
+ Resources.Designer.cs
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+
+
+
+ False
+ Microsoft .NET Framework 4.7.2 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/IBAHytaleLauncher.sln b/IBAHytaleLauncher.sln
new file mode 100644
index 0000000..d6b936e
--- /dev/null
+++ b/IBAHytaleLauncher.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.14.36811.4
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IBAHytaleLauncher", "IBAHytaleLauncher.csproj", "{420BC3CD-FE22-432A-82EB-DA5DEADBAB5F}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {420BC3CD-FE22-432A-82EB-DA5DEADBAB5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {420BC3CD-FE22-432A-82EB-DA5DEADBAB5F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {420BC3CD-FE22-432A-82EB-DA5DEADBAB5F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {420BC3CD-FE22-432A-82EB-DA5DEADBAB5F}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {B3397E7C-5E38-4B04-B20E-AF4E63184167}
+ EndGlobalSection
+EndGlobal
diff --git a/Program.cs b/Program.cs
new file mode 100644
index 0000000..cdce7b2
--- /dev/null
+++ b/Program.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace HelloWorld
+{
+ internal static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new Form1());
+ }
+ }
+}
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..a30d462
--- /dev/null
+++ b/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
+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("IveBeenAlone's Hytale Launcher")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("IveBeenAlone")]
+[assembly: AssemblyProduct("IveBeenAlone's Hytale Launcher")]
+[assembly: AssemblyCopyright("Copyright © 2026")]
+[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("420bc3cd-fe22-432a-82eb-da5deadbab5f")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+[assembly: AssemblyVersion("2.8.13.0")]
+[assembly: AssemblyFileVersion("2.8.13.0")]
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..f9adf23
--- /dev/null
+++ b/Properties/Resources.Designer.cs
@@ -0,0 +1,73 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace IveBeenAlonesHytaleLauncher.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", "17.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("IveBeenAlonesHytaleLauncher.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;
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap hytale_100 {
+ get {
+ object obj = ResourceManager.GetObject("hytale_100", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+ }
+}
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
new file mode 100644
index 0000000..d66b6b9
--- /dev/null
+++ b/Properties/Resources.resx
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+ ..\Resources\hytale_100.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
\ No newline at end of file
diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..14368a8
--- /dev/null
+++ b/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace IveBeenAlonesHytaleLauncher.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.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/Resources/hytale_100.png b/Resources/hytale_100.png
new file mode 100644
index 0000000..5e7409c
Binary files /dev/null and b/Resources/hytale_100.png differ
diff --git a/hytale.ico b/hytale.ico
new file mode 100644
index 0000000..a382a2f
Binary files /dev/null and b/hytale.ico differ