diff --git a/Mo3RegUI/Constants.cs b/Mo3RegUI/Constants.cs
index 04971e4..802320c 100644
--- a/Mo3RegUI/Constants.cs
+++ b/Mo3RegUI/Constants.cs
@@ -2,43 +2,74 @@
{
public static class Constants
{
- public const string GameName = "心灵终结 3.3.6";
- public const string EnglishGameName = "Mental Omega 3.3.6";
+ public const string GameName = "Tiberium Crisis 2";
+ public const string EnglishGameName = "Tiberium Crisis 2";
public const string AppName = GameName + " 注册机";
public const string EnglishAppName = "Register for " + EnglishGameName;
- public const string Version = "v2.4.1";
- public const string AssemblyVersion = "2.4.1.0";
+ public const string Version = "v2.4.2";
+ public const string AssemblyVersion = "2.4.2.0";
public const string CopyrightYearFrom = "2019";
- public const string CopyrightYearTo = "2023";
+ public const string CopyrightYearTo = "2025";
public const string AuthorName = "伤心的笔"; // You are not supposed to remove the name here. Append your name if you have made significant changes.
- public const string EnglishAuthorName = "Sad Pencil"; // You are not supposed to remove the name here. Append your name if you have made significant changes.
+ public const string EnglishAuthorName = "SadPencil"; // You are not supposed to remove the name here. Append your name if you have made significant changes.
public const string RepoUri = "https://github.com/SadPencil/Mo3RegUI"; // Change to your repo if you have forked it. Note: this is REQUIRED by GPLv3.
public const string NeutralResourcesLanguage = "zh-CN";
- public const string GameConfigIniName = "RA2MO.ini";
- public const string LauncherExeName = "MentalOmegaClient.exe";
+ public const string GameConfigIniName = "RA2MD.ini";
+ public const string LauncherExeName = "TiberiumCrisis.exe";
public const string GameExeName = "gamemd.exe";
- public const string SecondaryGameExeName = "Syringe.exe";
+ public const string SecondaryGameExeName = "GotoTC.exe";
public static readonly string[] VulnerableAvExes = new string[] {
- "cncnet5.dll",
- "cncnet5mo.dll",
- "ares.dll",
+ LauncherExeName,
+ //GameExeName,
+ SecondaryGameExeName,
+ "Ares.dll",
+ "Ares.dll.inj",
+ "AxionGear.ext",
+ "cncnet5.ext",
+ "Crisis.ext",
+ "Crisis.ext.inc",
+ "GScript.ext",
+ "Phobos.ext",
+ "d3dx9_29.ext",
+ "ra2md.csf",
+ "stringtable02.csf",
+ "stringtable03.csf",
+ "Resources/d3d9.ext",
+ "Resources/mainexecutable.exe",
+ "Resources/mainexecutable2.exe",
+ "Resources/mainexecutable3.exe",
+ "Resources/cnc_ddraw.dll",
+ "Resources/clientdx.exe",
+ "Resources/clientxna.exe",
+ "Resources/clientogl.exe",
+ "GameShaders/BaseShared/tchelper/tchelper.exe",
+ "GameShaders/BaseShared/tchelper/TCHelper.dll",
+ "gamemd.exe",
+ "BINKW32.dll",
"Blowfish.dll",
- "Syringe.exe",
- "Map Editor/FinalAlert2MO.exe",
- "Map Editor/Syringe.exe",
- "Resources/ddraw_dxwnd.dll",
};
- public const bool CheckDirectXRuntime = false;
- public const string CnCDDrawDllName = "cnc-ddraw.dll";
- public const string CnCDDrawIniName = "cnc-ddraw.ini";
- public const bool LauncherExeDpiUnaware = true;
+ public const bool DirectXRuntimeTaskEnabled = true;
+ public const bool ChinaNetworkTaskEnabled = false;
+ public const bool RendererTaskEnabled = false;
+ public const bool ResolutionTaskEnabled = false;
+ public const bool FirstRunTaskEnabled = false;
+ public const bool UserNameTaskEnabled = false;
+
+ public const string CnCDDrawSectionName = "CNC_DDRAW";
+ public const string CnCDDrawDllName = "cnc_ddraw.dll";
+ public const string CnCDDrawIniName = "cnc_ddraw.ini";
+
+ public const bool LauncherExeDpiUnaware = false;
+
+ public const bool DetectDotNet35 = false;
+ public const bool DetectXna40 = false;
}
}
diff --git a/Mo3RegUI/MainWindow.xaml b/Mo3RegUI/MainWindow.xaml
index 778afd8..7047c97 100644
--- a/Mo3RegUI/MainWindow.xaml
+++ b/Mo3RegUI/MainWindow.xaml
@@ -31,7 +31,7 @@
-
+
diff --git a/Mo3RegUI/MainWindow.xaml.cs b/Mo3RegUI/MainWindow.xaml.cs
index 785fa95..e90b84f 100644
--- a/Mo3RegUI/MainWindow.xaml.cs
+++ b/Mo3RegUI/MainWindow.xaml.cs
@@ -64,23 +64,42 @@ private void Window_Initialized(object sender, EventArgs e)
new TaskInstance(){Task = new FirstRunTask(), Parameter = new FirstRunTaskParameter(){ GameDir = gameDir}},
new TaskInstance(){Task = new UserNameTask(), Parameter = new UserNameTaskParameter(){ GameDir = gameDir}},
new TaskInstance(){Task = new ResolutionTask(), Parameter = new ResolutionTaskParameter(){ GameDir = gameDir}},
- new TaskInstance(){Task = new RendererTask(), Parameter = new RendererTaskParameter(){ GameDir = gameDir}},
+ //new TaskInstance(){Task = new RendererTask(), Parameter = new RendererTaskParameter(){ GameDir = gameDir}},
new TaskInstance(){Task = new SpeakerNumTask(), Parameter = new SpeakerNumTaskParameter()},
new TaskInstance(){Task = new DDrawDLLTask(), Parameter = new DDrawDLLTaskParameter()},
new TaskInstance(){Task = new RemoveObsoleteFilesTask(), Parameter = new RemoveObsoleteFilesTaskParameter(){ GameDir = gameDir}},
- new TaskInstance(){Task = new XboxGameBarTask(), Parameter = new XboxGameBarTaskParameter()},
+ //new TaskInstance(){Task = new XboxGameBarTask(), Parameter = new XboxGameBarTaskParameter()},
new TaskInstance(){Task = new ForegroundLockTimeoutTask(), Parameter = new ForegroundLockTimeoutTaskParameter()},
new TaskInstance(){Task = new CompatibilitySettingTask(), Parameter = new CompatibilitySettingTaskParameter(){ GameDir = gameDir}},
- new TaskInstance(){Task = new ChinaNetworkTask(), Parameter = new ChinaNetworkTaskParameter(){ GameDir = gameDir}},
new TaskInstance(){Task = new AffinityTask(), Parameter = new AffinityTaskParameter(){ GameDir = gameDir}},
new TaskInstance(){Task = new NetworkInterfaceTask(), Parameter = new NetworkInterfaceTaskParameter()},
new TaskInstance(){Task = new FalsePositiveTask(), Parameter = new FalsePositiveTaskParameter(){ GameDir = gameDir}},
};
- if (Constants.CheckDirectXRuntime)
+ if (Constants.DirectXRuntimeTaskEnabled)
{
tasks.Add(new TaskInstance() { Task = new DirectXRuntimeTask(), Parameter = new DirectXRuntimeTaskParameter() });
}
+ if (Constants.FirstRunTaskEnabled)
+ {
+ tasks.Add(new TaskInstance() { Task = new FirstRunTask(), Parameter = new FirstRunTaskParameter() { GameDir = gameDir } });
+ }
+ if (Constants.ChinaNetworkTaskEnabled)
+ {
+ tasks.Add(new TaskInstance() { Task = new ChinaNetworkTask(), Parameter = new ChinaNetworkTaskParameter() { GameDir = gameDir } });
+ }
+ if (Constants.RendererTaskEnabled)
+ {
+ tasks.Add(new TaskInstance() { Task = new RendererTask(), Parameter = new RendererTaskParameter() { GameDir = gameDir } });
+ }
+ if (Constants.ResolutionTaskEnabled)
+ {
+ tasks.Add(new TaskInstance() { Task = new ResolutionTask(), Parameter = new ResolutionTaskParameter() { GameDir = gameDir } });
+ }
+ if (Constants.UserNameTaskEnabled)
+ {
+ tasks.Add(new TaskInstance() { Task = new UserNameTask(), Parameter = new UserNameTaskParameter() { GameDir = gameDir } });
+ }
this.mainTaskManager = new TaskManager(tasks);
this.mainTaskManager.ReportMessage += (task_sender, task_e) =>
diff --git a/Mo3RegUI/Mo3RegUI.csproj b/Mo3RegUI/Mo3RegUI.csproj
index b324029..df01032 100644
--- a/Mo3RegUI/Mo3RegUI.csproj
+++ b/Mo3RegUI/Mo3RegUI.csproj
@@ -77,6 +77,7 @@
+
diff --git a/Mo3RegUI/NativeConstants.cs b/Mo3RegUI/NativeConstants.cs
new file mode 100644
index 0000000..96ea744
--- /dev/null
+++ b/Mo3RegUI/NativeConstants.cs
@@ -0,0 +1,11 @@
+namespace Mo3RegUI
+{
+ public class NativeConstants
+ {
+ /// SM_CXSCREEN -> 0
+ public const int SM_CXSCREEN = 0;
+
+ /// SM_CYSCREEN -> 1
+ public const int SM_CYSCREEN = 1;
+ }
+}
diff --git a/Mo3RegUI/NativeMethods.cs b/Mo3RegUI/NativeMethods.cs
index 8a81a3f..61ab75d 100644
--- a/Mo3RegUI/NativeMethods.cs
+++ b/Mo3RegUI/NativeMethods.cs
@@ -1,42 +1,18 @@
namespace Mo3RegUI
{
-
public partial class NativeMethods
{
/// Return Type: int
///nIndex: int
- [System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "GetSystemMetrics")]
+ [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetSystemMetrics")]
public static extern int GetSystemMetrics(int nIndex);
- }
-
- public partial class NativeConstants
- {
- /// SM_CXSCREEN -> 0
- public const int SM_CXSCREEN = 0;
- }
-
- public partial class NativeConstants
- {
- /// SM_CYSCREEN -> 1
- public const int SM_CYSCREEN = 1;
- }
-
- public partial class NativeMethods
- {
/// Return Type: UINT->unsigned int
- [System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint = "GetACP")]
+ [System.Runtime.InteropServices.DllImport("kernel32.dll", EntryPoint = "GetACP")]
public static extern uint GetACP();
- }
-
- public partial class NativeMethods
- {
-
/// Return Type: UINT->unsigned int
- [System.Runtime.InteropServices.DllImportAttribute("winmm.dll", EntryPoint = "waveOutGetNumDevs")]
+ [System.Runtime.InteropServices.DllImport("winmm.dll", EntryPoint = "waveOutGetNumDevs")]
public static extern uint waveOutGetNumDevs();
-
}
-
}
diff --git a/Mo3RegUI/Tasks/RendererTask.cs b/Mo3RegUI/Tasks/RendererTask.cs
index b016794..93dbd02 100644
--- a/Mo3RegUI/Tasks/RendererTask.cs
+++ b/Mo3RegUI/Tasks/RendererTask.cs
@@ -55,7 +55,7 @@ private void _DoWork(RendererTaskParameter p)
MyIniParserHelper.EditIniFile(Path.Combine(p.GameDir, Constants.GameConfigIniName), ini =>
{
var section = MyIniParserHelper.GetSectionOrNew(ini, "Compatibility");
- section["Renderer"] = "CnC_DDraw";
+ section["Renderer"] = Constants.CnCDDrawSectionName;
});
}
}
diff --git a/Mo3RegUI/Tasks/ResolutionTask.cs b/Mo3RegUI/Tasks/ResolutionTask.cs
index 0060ae6..ad5b9a8 100644
--- a/Mo3RegUI/Tasks/ResolutionTask.cs
+++ b/Mo3RegUI/Tasks/ResolutionTask.cs
@@ -30,8 +30,8 @@ private void _DoWork(ResolutionTaskParameter p)
MyIniParserHelper.EditIniFile(Path.Combine(p.GameDir, Constants.GameConfigIniName), ini =>
{
var videoSection = MyIniParserHelper.GetSectionOrNew(ini, "Video");
- videoSection["ScreenWidth"] = Resolution.Width.ToString(CultureInfo.InvariantCulture);
- videoSection["ScreenHeight"] = Resolution.Height.ToString(CultureInfo.InvariantCulture);
+ videoSection["FakeScreenWidth"] = Resolution.Width.ToString(CultureInfo.InvariantCulture);
+ videoSection["FakeScreenHeight"] = Resolution.Height.ToString(CultureInfo.InvariantCulture);
});
}
ReportMessage(this, new TaskMessageEventArgs() { Level = MessageLevel.Info, Text = "设置游戏分辨率为 " + Resolution.Width.ToString() + "×" + Resolution.Height.ToString() + "。" });
diff --git a/Mo3RegUI/Tasks/RuntimeComponentTask.cs b/Mo3RegUI/Tasks/RuntimeComponentTask.cs
index abc1b2b..c38b30d 100644
--- a/Mo3RegUI/Tasks/RuntimeComponentTask.cs
+++ b/Mo3RegUI/Tasks/RuntimeComponentTask.cs
@@ -35,23 +35,26 @@ public void DoWork(ITaskParameter p)
private void _DoWork(RuntimeComponentTaskParameter p)
{
- // Future: Remove .NET 3.5 check for MO 3.3.7
- string net35 = GetInstalledNetFramework35VersionString();
- if (net35 is null)
+ if (Constants.DetectDotNet35)
{
- ReportMessage(this, new TaskMessageEventArgs()
+ // Future: Remove .NET 3.5 check for MO 3.3.7
+ string net35 = GetInstalledNetFramework35VersionString();
+ if (net35 is null)
{
- Level = MessageLevel.Info,
- Text = ".NET Framework 3.5 未安装。", // don't treat this as an error
- });
- }
- else
- {
- ReportMessage(this, new TaskMessageEventArgs()
+ ReportMessage(this, new TaskMessageEventArgs()
+ {
+ Level = MessageLevel.Info,
+ Text = ".NET Framework 3.5 未安装。", // don't treat this as an error
+ });
+ }
+ else
{
- Level = MessageLevel.Info,
- Text = ".NET Framework " + net35 + " 已安装。",
- });
+ ReportMessage(this, new TaskMessageEventArgs()
+ {
+ Level = MessageLevel.Info,
+ Text = ".NET Framework " + net35 + " 已安装。",
+ });
+ }
}
string net4 = GetInstalledNetFramework4VersionString();
@@ -72,54 +75,57 @@ private void _DoWork(RuntimeComponentTaskParameter p)
});
}
- int? net45plus = GetInstalledNetFramework45VersionNumber();
- bool isDotNet45Installed = net45plus.GetValueOrDefault() >= NET_FRAMEWORK_4_5_RELEASE_KEY;
- // Future: Remove .NET 4.5 check for MO 3.3.7
- if (!isDotNet45Installed && Environment.OSVersion.Version.Major < 6)
+ int? net46plus = GetInstalledNetFramework46VersionNumber();
+ bool isDotNet46Installed = net46plus.GetValueOrDefault() >= NET_FRAMEWORK_4_6_RELEASE_KEY;
+
+ if (!isDotNet46Installed && Environment.OSVersion.Version.Major < 6)
{
ReportMessage(this, new TaskMessageEventArgs()
{
Level = MessageLevel.Error,
- Text = "当前 .NET Framework 4 的版本号低于 4.5。",
+ Text = "当前 .NET Framework 4 的版本号低于 4.6。",
});
}
- // Future: Always require .NET 4.7.1 for MO 3.3.7
+ // Future: Always require .NET 4.7.1 for MO 3.3.7 Launcher
// Future: Always require .NET 7 for MO 3.3.7
- bool isXna4Installed = IsXNAFramework4Installed();
- if (isXna4Installed)
+ if (Constants.DetectXna40)
{
- ReportMessage(this, new TaskMessageEventArgs()
+ bool isXna4Installed = IsXNAFramework4Installed();
+ if (isXna4Installed)
{
- Level = MessageLevel.Info,
- Text = "XNA Framework 4.0 已安装。",
- });
- }
- else
- {
- ReportMessage(this, new TaskMessageEventArgs()
- {
- Level = (Environment.OSVersion.Version.Major < 6) ? MessageLevel.Error : MessageLevel.Info, // Future: Always prompt as Info for MO 3.3.7
- Text = "XNA Framework 4.0 未安装。",
- });
- }
-
- if (Environment.OSVersion.Version.Major < 6) // Future: Remove this part for MO 3.3.7
- {
- if (!isXna4Installed && !isDotNet45Installed)
+ ReportMessage(this, new TaskMessageEventArgs()
+ {
+ Level = MessageLevel.Info,
+ Text = "XNA Framework 4.0 已安装。",
+ });
+ }
+ else
{
ReportMessage(this, new TaskMessageEventArgs()
{
- Level = MessageLevel.Error,
- Text = "当前 .NET Framework 4 的版本号低于 4.5,且 XNA Framework 4.0 未安装。客户端可能无法正常运行。",
+ Level = (Environment.OSVersion.Version.Major < 6) ? MessageLevel.Error : MessageLevel.Info, // Future: Always prompt as Info for MO 3.3.7
+ Text = "XNA Framework 4.0 未安装。",
});
}
}
+
+ //if (Environment.OSVersion.Version.Major < 6) // Future: Remove this part for MO 3.3.7
+ //{
+ // if (!isXna4Installed && !isDotNet45Installed)
+ // {
+ // ReportMessage(this, new TaskMessageEventArgs()
+ // {
+ // Level = MessageLevel.Error,
+ // Text = "当前 .NET Framework 4 的版本号低于 4.5,且 XNA Framework 4.0 未安装。客户端可能无法正常运行。",
+ // });
+ // }
+ //}
}
- private static int? GetInstalledNetFramework45VersionNumber()
+ private static int? GetInstalledNetFramework46VersionNumber()
{
try
{
diff --git a/Mo3RegUI/tc2icon.png b/Mo3RegUI/tc2icon.png
new file mode 100644
index 0000000..b77273f
Binary files /dev/null and b/Mo3RegUI/tc2icon.png differ