Initial Commit

This commit is contained in:
2026-03-08 16:27:27 +00:00
commit 543ac77454
5 changed files with 137 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

70
MapShuffler/Program.cs Normal file
View File

@@ -0,0 +1,70 @@
using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Collections.Generic;
try
{
if (args.Length == 0 || args.Contains("-h") || args.Contains("--help"))
{
Console.WriteLine("Usage: MapShuffler <output.txt> <maps_directory>");
return;
}
if (args.Length != 2)
{
Console.Error.WriteLine("Error: Expected exactly two arguments.");
Console.WriteLine("Usage: MapShuffler <output.txt> <maps_directory>");
Environment.ExitCode = 1;
return;
}
var outputPath = args[0];
var dirPath = args[1];
if (!Directory.Exists(dirPath))
{
Console.Error.WriteLine($"Directory not found: {dirPath}");
Environment.ExitCode = 2;
return;
}
var bspFiles = Directory.EnumerateFiles(dirPath)
.Where(f => string.Equals(Path.GetExtension(f), ".bsp", StringComparison.OrdinalIgnoreCase))
.Select(f => Path.GetFileNameWithoutExtension(f))
.ToList();
Console.WriteLine($"Found {bspFiles.Count} .bsp file(s) in {dirPath}");
if (bspFiles.Count == 0)
{
File.WriteAllText(outputPath, string.Empty, Encoding.UTF8);
Console.WriteLine($"Wrote empty file to {outputPath}");
Environment.ExitCode = 0;
return;
}
var rnd = Random.Shared;
for (int i = bspFiles.Count - 1; i > 0; i--)
{
int j = rnd.Next(i + 1);
var tmp = bspFiles[i];
bspFiles[i] = bspFiles[j];
bspFiles[j] = tmp;
}
var parent = Path.GetDirectoryName(outputPath);
if (!string.IsNullOrEmpty(parent) && !Directory.Exists(parent))
Directory.CreateDirectory(parent);
File.WriteAllLines(outputPath, bspFiles, Encoding.UTF8);
Console.WriteLine($"Wrote {bspFiles.Count} entries to {outputPath}");
Environment.ExitCode = 0;
}
catch (Exception ex)
{
Console.Error.WriteLine($"Error: {ex.Message}");
Environment.ExitCode = 99;
}

52
MapShuffler/README.md Normal file
View File

@@ -0,0 +1,52 @@
# MapShuffler
Small console utility to enumerate `.bsp` map files from a directory, shuffle their order, and write the shuffled list to a text file.
## Prerequisites
- .NET 10 SDK (the project targets `net10.0`).
## Build
From the repository root run:
```bash
dotnet build MapShuffler/MapShuffler.csproj
```
## Usage
Syntax:
```bash
dotnet run --project MapShuffler -- <output.txt> <maps_directory>
```
- `<output.txt>`: path to the output text file that will be (over)written.
- `<maps_directory>`: directory containing `.bsp` files (top-level only).
Example:
```bash
dotnet run --project MapShuffler -- shuffled_maps.txt /home/user/maps
```
Behavior notes:
- The program searches the provided directory (non-recursively) for files with the `.bsp` extension (case-insensitive).
- Output contains one entry per line: the map filename with the `.bsp` extension removed.
- The list is shuffled using a FisherYates shuffle and written in UTF-8.
- If there are no `.bsp` files found the program will write an empty file at the specified output path.
- The program will create the parent directory for the output file if it does not exist.
- Existing output files are overwritten.
Exit codes:
- `0` — success
- `1` — incorrect arguments
- `2` — input directory not found
- `99` — unexpected error
See the implementation in [MapShuffler/Program.cs](MapShuffler/Program.cs#L1).
If you'd like different behavior (recursive search, full paths in output, interactive prompts, or one-file-per-map), tell me and I can update the tool.