Skip to main content

@nekz/sdp@0.10.0
Built and signed on GitHub Actions

Simple Source Engine demo parser. 🔧

This package works with Cloudflare Workers, Node.js, Deno, Bun, Browsers
This package works with Cloudflare Workers
This package works with Node.js
This package works with Deno
This package works with Bun
This package works with Browsers
JSR Score
70%
Published
4 weeks ago (0.10.0)

CI CD jsr npm

sdp

Simple Source Engine demo parser. Try it out on StackBlitz!

Features

Examples

Read header only

Using Deno + TypeScript:

import { SourceDemoParser } from 'jsr:@nekz/sdp';

const demo = SourceDemoParser.default()
    .setOptions({ messages: false })
    .parse(Deno.readFileSync('demo.dem'));

console.log(demo);

/*
    SourceDemo {
    demoFileStamp: 'HL2DEMO',
    demoProtocol: 3,
    networkProtocol: 15,
    serverName: 'localhost:0',
    clientName: 'Can\'t Even',
    mapName: 'testchmb_a_00',
    gameDirectory: 'portal',
    playbackTime: 3.944999933242798,
    playbackTicks: 263,
    playbackFrames: 253,
    signOnLength: 80641,
    messages: [] }
*/

Read UserCmd messages

Using Node + JavaScript:

import fs from 'node:fs';
import { DemoMessages, SourceDemoParser } from '@nekz/sdp';

const demo = SourceDemoParser.default()
    .setOptions({ userCmds: true })
    .parse(fs.readFileSync('demo.dem'));

const IN_JUMP = 1 << 1;

const registeredJumps = demo
    .findMessages(DemoMessages.UserCmd)
    .filter(({ userCmd }) => userCmd.buttons & IN_JUMP);

console.log('registered jumps:', registeredJumps.length);

/*
    registered jumps: 270
*/

The examples directory contains more examples for Node and Deno.

View Origin

showcase.gif

Used in nekz.me/parser. Updated example can be found in examples/web/parser.html.

Dependencies

Vendored inolen/bit-buffer for TypeScript port + improvements.

License

MIT License

Built and signed on
GitHub Actions
View transparency log

Add Package

deno add jsr:@nekz/sdp

Import symbol

import * as sdp from "@nekz/sdp";

---- OR ----

Import directly with a jsr specifier

import * as sdp from "jsr:@nekz/sdp";

Add Package

npx jsr add @nekz/sdp

Import symbol

import * as sdp from "@nekz/sdp";

Add Package

yarn dlx jsr add @nekz/sdp

Import symbol

import * as sdp from "@nekz/sdp";

Add Package

pnpm dlx jsr add @nekz/sdp

Import symbol

import * as sdp from "@nekz/sdp";

Add Package

bunx jsr add @nekz/sdp

Import symbol

import * as sdp from "@nekz/sdp";