diff --git a/src/Syroot.Worms.Mgame.Launcher/Config.cs b/src/Syroot.Worms.Mgame.Launcher/Config.cs
index 9945f09..0af6d33 100644
--- a/src/Syroot.Worms.Mgame.Launcher/Config.cs
+++ b/src/Syroot.Worms.Mgame.Launcher/Config.cs
@@ -12,7 +12,7 @@ namespace Syroot.Worms.Mgame.Launcher
public string UserName { get; set; }
public string Password { get; set; }
- public uint PasswordKey { get; set; }
+ public int PasswordKey { get; set; }
public string ExecutablePaths { get; set; } = "DWait.exe;Main.exe";
public string ExecutableArgs { get; set; }
diff --git a/src/Syroot.Worms.Mgame.Launcher/Program.cs b/src/Syroot.Worms.Mgame.Launcher/Program.cs
index ff75cbc..1da7599 100644
--- a/src/Syroot.Worms.Mgame.Launcher/Program.cs
+++ b/src/Syroot.Worms.Mgame.Launcher/Program.cs
@@ -7,6 +7,9 @@ using Microsoft.Extensions.Configuration;
namespace Syroot.Worms.Mgame.Launcher
{
+ ///
+ /// Represents the main class of the application containing the program entry point.
+ ///
internal class Program
{
// ---- METHODS (PRIVATE) --------------------------------------------------------------------------------------
diff --git a/src/Syroot.Worms.Mgame.Launcher/Resources/Icon.ico b/src/Syroot.Worms.Mgame.Launcher/Resources/Icon.ico
index 67e55e9..be19f0c 100644
Binary files a/src/Syroot.Worms.Mgame.Launcher/Resources/Icon.ico and b/src/Syroot.Worms.Mgame.Launcher/Resources/Icon.ico differ
diff --git a/src/Syroot.Worms.Mgame.Launcher/app.manifest b/src/Syroot.Worms.Mgame.Launcher/Resources/app.manifest
similarity index 100%
rename from src/Syroot.Worms.Mgame.Launcher/app.manifest
rename to src/Syroot.Worms.Mgame.Launcher/Resources/app.manifest
diff --git a/src/Syroot.Worms.Mgame.Launcher/Syroot.Worms.Mgame.Launcher.csproj b/src/Syroot.Worms.Mgame.Launcher/Syroot.Worms.Mgame.Launcher.csproj
index 450e88e..7716aef 100644
--- a/src/Syroot.Worms.Mgame.Launcher/Syroot.Worms.Mgame.Launcher.csproj
+++ b/src/Syroot.Worms.Mgame.Launcher/Syroot.Worms.Mgame.Launcher.csproj
@@ -2,6 +2,7 @@
false
Resources\Icon.ico
+ Resources\app.manifest
Launcher
Mgame Worms Launcher
Syroot
@@ -11,8 +12,7 @@
WinExe
Online Worms Launcher
net461
- 0.5.0
- app.manifest
+ 1.0.0
diff --git a/src/Syroot.Worms.Mgame/LaunchConfig.cs b/src/Syroot.Worms.Mgame/LaunchConfig.cs
index dffda12..b5cf698 100644
--- a/src/Syroot.Worms.Mgame/LaunchConfig.cs
+++ b/src/Syroot.Worms.Mgame/LaunchConfig.cs
@@ -14,34 +14,29 @@ namespace Syroot.Worms.Mgame
{
// ---- FIELDS -------------------------------------------------------------------------------------------------
- private static readonly char[] _invalidUserNameChars = { '=', '&', ' ' };
-
- private string _userName;
private string _passwordString;
// ---- PROPERTIES ---------------------------------------------------------------------------------------------
+ ///
+ /// Gets or sets the name of the publisher providing the launch configuration. Must not exceed 15 characters.
+ ///
+ public string Publisher { get; set; } = "MGAME";
+
+ ///
+ /// Gets or sets an unknown value. Must not exceed 19 characters.
+ ///
+ public string Unknown { get; set; }
+
///
/// Gets or sets the address of the game server.
///
public IPEndPoint ServerEndPoint { get; set; }
///
- /// Gets or sets the initially entered user name.
+ /// Gets or sets the initially entered user name. Must not exceed 250 characters.
///
- public string UserName
- {
- get => _userName;
- set
- {
- // 251 bytes is the space between "UID=" and the server IP, minus a terminating 0.
- if (Encodings.Win949.GetBytes(value).Length > 251)
- throw new ArgumentException("User name must not exceed 251 bytes.");
- if (value.IndexOfAny(_invalidUserNameChars) != -1)
- throw new ArgumentException("User name contains invalid characters.");
- _userName = value;
- }
- }
+ public string UserName { get; set; }
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
@@ -57,19 +52,12 @@ namespace Syroot.Worms.Mgame
using (BinaryStream stream = new BinaryStream(mappedFile.CreateViewStream(),
encoding: Encodings.Win949, stringCoding: StringCoding.ZeroTerminated))
{
- stream.WriteString("MGAME", 16);
-
- stream.Position = 36;
- stream.Write(_passwordString);
-
- stream.Position = 66;
- stream.Write("UID=", StringCoding.Raw);
- stream.Write(Encodings.Win949.GetBytes(UserName));
-
- stream.Position = 322;
- stream.Write(ServerEndPoint.Address.ToString());
- stream.Position = 352;
- stream.Write(ServerEndPoint.Port.ToString());
+ stream.WriteString(Publisher, 16);
+ stream.WriteString(Unknown, 20);
+ stream.WriteString(_passwordString, 30);
+ stream.WriteString($"UID={UserName}", 256);
+ stream.WriteString(ServerEndPoint.Address.ToString(), 30);
+ stream.WriteString(ServerEndPoint.Port.ToString(), 914);
}
return mappedFile;
}
@@ -92,9 +80,9 @@ namespace Syroot.Worms.Mgame
///
/// The password to store encrypted.
/// The key to encrypt with.
- public void SetPassword(string password, uint key = 1000)
+ public void SetPassword(string password, int key = 1000)
{
- _passwordString = $";{PasswordCrypto.Encrypt(password, key)};{key}";
+ _passwordString = $";{PasswordCrypto.Encrypt(password, (uint)key)};{key}";
}
}
}