Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion Knossos.NET/Classes/KnUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -592,6 +592,19 @@ public static void ForEach<T>(this IEnumerable<T> enumerable, Action<T> action)
}
}

/// <summary>
/// Splits a cmdline string into individual flag arguments. Splits on a '-' that is
/// preceded by start-of-string or whitespace, so hyphens inside flag values (e.g. paths)
/// are preserved.
/// </summary>
/// <param name="cmdline"></param>
/// <returns>array of flag arguments (without the leading '-'), or null if input is null</returns>
public static string[]? SplitCmdLineFlags(string? cmdline)
{
if (cmdline == null) return null;
return Regex.Split(cmdline, @"(?<=^|\s)-");
}

/// <summary>
/// Adds arguments to a cmdline string, only if they arent already present
/// </summary>
Expand All @@ -605,7 +618,7 @@ public static string CmdLineBuilder(string cmdline, string[]? args)
if (args != null && args.Any())
{
var addedArgs = new List<string>();
foreach (var arg in cmdline.ToLower().Split('-'))
foreach (var arg in SplitCmdLineFlags(cmdline.ToLower()) ?? Array.Empty<string>())
{
addedArgs.Add(arg.Split(' ')[0].Trim());
}
Expand Down
6 changes: 3 additions & 3 deletions Knossos.NET/Classes/Knossos.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1358,9 +1358,9 @@ public static async void PlayMod(Mod mod, FsoExecType fsoExecType, bool standalo
}

/* Build the cmdline, take in consideration systemcmd, globalcmd, modcmd(with user changes if any) */
var modCmd = mod.GetModCmdLine()?.Split('-').ToList();
var systemCmd = Knossos.globalSettings.GetSystemCMD(fsoBuild)?.Split('-');
var globalCmd = Knossos.globalSettings.globalCmdLine?.Split('-');
var modCmd = KnUtils.SplitCmdLineFlags(mod.GetModCmdLine())?.ToList();
var systemCmd = KnUtils.SplitCmdLineFlags(Knossos.globalSettings.GetSystemCMD(fsoBuild));
var globalCmd = KnUtils.SplitCmdLineFlags(Knossos.globalSettings.globalCmdLine);

if(!standaloneServer)
{
Expand Down
50 changes: 25 additions & 25 deletions Knossos.NET/Models/GlobalSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -954,8 +954,8 @@ public string GetSystemCMD(FsoBuild? build = null)
var cmd = string.Empty;
if(shadowQuality > 0)
{
cmd += "-enable_shadows";
cmd += "-shadow_quality " + shadowQuality;
cmd += " -enable_shadows";
cmd += " -shadow_quality " + shadowQuality;
}
if(aaPreset > 0)
{
Expand All @@ -964,32 +964,32 @@ public string GetSystemCMD(FsoBuild? build = null)
var flag_aaPreset = aaPreset - 1;
if (build == null || SemanticVersion.Compare(build.version, "21.0.0") >= 0)
{
cmd += "-aa";
cmd += "-aa_preset " + flag_aaPreset;
cmd += " -aa";
cmd += " -aa_preset " + flag_aaPreset;
}
else
{
if (SemanticVersion.Compare(build.version, "3.8.0") >= 0)
{
if (flag_aaPreset <= 2)
{
cmd += "-fxaa";
cmd += " -fxaa";
switch (flag_aaPreset)
{
case 0: cmd += "-fxaa_preset 1"; break;
case 1: cmd += "-fxaa_preset 5"; break;
case 2: cmd += "-fxaa_preset 7"; break;
case 0: cmd += " -fxaa_preset 1"; break;
case 1: cmd += " -fxaa_preset 5"; break;
case 2: cmd += " -fxaa_preset 7"; break;
}
}
else
{
cmd += "-smaa";
cmd += " -smaa";
switch (flag_aaPreset)
{
case 3: cmd += "-smaa_preset 0"; break;
case 4: cmd += "-smaa_preset 1"; break;
case 5: cmd += "-smaa_preset 2"; break;
case 6: cmd += "-smaa_preset 3"; break;
case 3: cmd += " -smaa_preset 0"; break;
case 4: cmd += " -smaa_preset 1"; break;
case 5: cmd += " -smaa_preset 2"; break;
case 6: cmd += " -smaa_preset 3"; break;
}
}
}
Expand All @@ -999,47 +999,47 @@ public string GetSystemCMD(FsoBuild? build = null)
{
switch (msaaPreset)
{
case 1: cmd += "-msaa 4"; break;
case 2: cmd += "-msaa 8"; break;
case 1: cmd += " -msaa 4"; break;
case 2: cmd += " -msaa 8"; break;
}
}
if (enableSoftParticles)
{
cmd += "-soft_particles";
cmd += " -soft_particles";
}
if (!enableDeferredLighting)
{
cmd += "-no_deferred";
cmd += " -no_deferred";
}
switch (windowMode)
{
case 0: cmd += "-window"; break;
case 1: cmd += "-fullscreen_window"; break;
case 0: cmd += " -window"; break;
case 1: cmd += " -fullscreen_window"; break;
case 2: break; //fullscreen
}
if (!vsync)
{
cmd += "-no_vsync";
cmd += " -no_vsync";
}
if(!postProcess)
{
cmd += "-no_post_process";
cmd += " -no_post_process";
}
if (noFpsCapping)
{
cmd += "-no_fps_capping";
cmd += " -no_fps_capping";
}
if(showFps)
{
cmd += "-fps";
cmd += " -fps";
}
if(disableAudio)
{
cmd += "-nosound";
cmd += " -nosound";
}
if(disableMusic)
{
cmd += "-nomusic";
cmd += " -nomusic";
}
return cmd;
}
Expand Down