C# library supporting the modification of files relating to Descent, the 1995 FPS game developed by Parallax Software.
| Name | Read | Write | Comment |
|---|---|---|---|
| 256 | ✔ | ✔ | |
| BBM | ✔ | ✔ | BBM/IFF |
| BNK | ✔ | ✔ | |
| DEM | ✔ | ✔ | |
| DIG | ✗ | ✗ | |
| FNT | ✔ | ✔ | |
| HAM | ✔ | ✔ | |
| HMP | ✗ | ✗ | |
| HMQ | ✗ | ✗ | |
| HOG | ✔ | ✔ | |
| INI | ✗ | ✗ | Plain text |
| MID | ✔ | ✗ | |
| MN2 | ✔ | ✔ | |
| MSN | ✔ | ✔ | Plain text |
| MVL | ✔ | ✔ | |
| PCX | ✔ | ✗ | |
| PIG | ✔ | ✗ | D1, D2 |
| POF | ✔ | ✔ | |
| RAW | ✔ | ✗ | |
| RDL | ✔ | ✔ | |
| RL2 | ✗ | ✗ | |
| S11 | ✔ | ✔ | |
| S22 | ✔ | ✔ | |
| SNG | ✔ | ✔ | Plain text |
| TXB | ✔ | ✔ |
Install the nuget package e.g.
dotnet add package ii.Ascend
To edit a file you should instantiate the relevant class and call the Read method passing the filename. This will return an object model, which you can amend, before calling the Write method.
var hogProcessor = new HogProcessor();
var files = hogProcessor.Read(@"D:\Games\Descent2\DESCENT2.HOG");
foreach (var (filename, bytes) in files)
{
var outputPath = Path.Combine(@"D:\data\descent", filename);
Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!);
await File.WriteAllBytesAsync(outputPath, bytes);
Console.WriteLine($"Extracted {filename} ({bytes.Length} bytes)");
}
var txbProcessor = new TxbProcessor();
var text = txbProcessor.Read(@"D:\data\descent\credits.txb");
// Reading a Descent 1 demo: extract game data from the PIG file first
var pigProcessor = new Descent1PigProcessor();
var (_, _, _, gameData) = pigProcessor.ReadDetailed(@"D:\Games\Descent\DESCENT.PIG");
var robotModelNums = gameData.Robots.Select(r => r.ModelNum).ToArray();
var robotIsBoss = gameData.Robots.Select(r => r.BossFlag != 0).ToArray();
var polyModelNumSubmodels = gameData.PolygonModels.Select(p => p.NumModels).ToArray();
var demProcessor = new DemProcessor();
var demo = demProcessor.Read(@"D:\data\descent\demo1.dem", robotModelNums, robotIsBoss, polyModelNumSubmodels);
Console.WriteLine($"Demo version: {demo.Version}, Game type: {demo.GameType}");
Console.WriteLine($"Total events: {demo.Events.Count}");To clone and run this repository you'll need Git and .NET installed on your computer. From your command line:
# Clone this repository
$ git clone https://github.com/btigi/iiAscend
# Go into the repository
$ cd src
# Build the app
$ dotnet build
iiAscend is licenced under the MIT License. Full licence details are available in licence.md