DemoFile 0.2.4

There is a newer version of this package available.
See the version list below for details.
dotnet add package DemoFile --version 0.2.4
NuGet\Install-Package DemoFile -Version 0.2.4
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DemoFile" Version="0.2.4" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add DemoFile --version 0.2.4
#r "nuget: DemoFile, 0.2.4"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install DemoFile as a Cake Addin
#addin nuget:?package=DemoFile&version=0.2.4

// Install DemoFile as a Cake Tool
#tool nuget:?package=DemoFile&version=0.2.4

DemoFile.Net

DemoFile.Net is a blazing fast demo parser library for Counter-Strike 2, written in C#. It is cross platform, and can be used from Windows, Mac or Linux.

Screenshot of DemoFile.Net

Features

Feature Availability
CSTV / GOTV demos ✅ Full support
POV demos ➖ Support planned
Game events (e.g. player_death) ✅ Full support
Entity updates (player positions, grenades, etc.) ✅ Full support

Examples

Note: This library is still under heavy development and the API is likely to change significantly before v1.0

using DemoFile;
using DemoFile.Sdk;

internal class Program
{
    public static async Task Main(string[] args)
    {
        var path = args.SingleOrDefault() ?? throw new Exception("Expected a single argument: <path to .dem>");

        var demo = new DemoParser();
        demo.Source1GameEvents.PlayerDeath += e =>
        {
            var attacker = demo.GetEntityByIndex<CCSPlayerController>(e.Attacker);
            var victim = demo.GetEntityByIndex<CCSPlayerController>(e.Userid);

            Console.WriteLine($"{attacker?.PlayerName} [{e.Weapon}] {victim?.PlayerName}");
        };

        await demo.Start(File.OpenRead(path));

        Console.WriteLine("\nFinished!");
    }
}

See also the examples/ folder.

Benchmarks

On an M1 MacBook Pro, DemoFile.Net can read a full competitive game (just under 1 hour of game time) in 1.5 seconds. This includes parsing all entity data (player positions, velocities, weapon tracking, grenades, etc).

Method Runtime Mean Error StdDev
ParseDemo .NET 8.0 1.501 s 0.0047 s 0.0042 s

Author and acknowledgements

DemoFile.Net is developed by Saul Rennison. The development of this library would not have been possible without demoparser by LaihoE and Manta by Dotabuff, the latter of which depends on the efforts of a number of people:

A modified version of Source2Gen by neverlosecc is used to statically generate the game schema classes and enums.

See ACKNOWLEDGEMENTS for license information.

Product Compatible and additional computed target framework versions.
.NET net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.13.1 122 4/30/2024
0.12.2 115 4/12/2024
0.12.1 374 2/29/2024
0.11.1 182 2/19/2024
0.10.1 80 2/17/2024
0.9.1 115 2/9/2024
0.8.1 181 12/30/2023
0.6.1 145 12/23/2023
0.5.1 342 12/19/2023
0.4.1 150 12/9/2023
0.3.6 156 11/25/2023
0.3.5 110 11/25/2023
0.3.4 109 11/25/2023
0.3.1 115 11/25/2023
0.2.9 144 11/12/2023
0.2.8 102 11/12/2023
0.2.7 110 11/12/2023
0.2.6 98 11/11/2023
0.2.5 87 11/11/2023
0.2.4 100 11/11/2023
0.2.3 97 11/8/2023
0.2.2 101 11/5/2023
0.2.1 153 10/29/2023
0.1.11 134 10/25/2023
0.1.10 128 10/22/2023
0.1.9 111 10/19/2023
0.1.7 129 10/12/2023