source2rosetta/crates/source2rosetta-core
Kamal Tufekcic a2922b8bad
All checks were successful
CI / fuzz (push) Successful in 1m41s
CI / lint (push) Successful in 16s
CI / test (push) Successful in 22s
initial commit
2026-07-27 10:12:04 +03:00
..
src initial commit 2026-07-27 10:12:04 +03:00
Cargo.toml initial commit 2026-07-27 10:12:04 +03:00
README.md initial commit 2026-07-27 10:12:04 +03:00

source2rosetta-gen

Render a published source2rosetta gamedata release into whatever format your framework reads. source2rosetta does the hard part — deriving CS2 / Dota 2 gamedata from the stripped engine and validating it on a live server — and publishes two JSON files per game. source2rosetta-gen turns those into CounterStrikeSharp, Metamod/SourceMod, ModSharp, Swiftly, Plugify, or a typed C# SDK, locally, in a second.

It's deliberately tiny: it links only source2rosetta-core (serde + the format emitters) — no ELF reader, no disassembler, no ptrace. So a consumer who "just wants the files" downloads one release + this small binary and generates exactly what they need, instead of every format being pre-baked into the release.

Get it

Grab the prebuilt source2rosetta-gen from the release page, or build it from source:

cargo build --release -p source2rosetta-core
# -> target/release/source2rosetta-gen

(The gen binary lives in the source2rosetta-core crate, so a plain cargo build --release at the repo root does not build it — use -p source2rosetta-core or --workspace.)

Use it

Download the two artifacts for your game from the release page:

  • gamedata-<game>.json — the derived gamedata (function signatures + vtable offsets), tiered by confidence.
  • netvars-<game>.json — the typed schema (every class's field offsets + runtime types).

Then point gen at whichever you need and pick a --format. Output goes to --out, or stdout if omitted.

# CounterStrikeSharp combined gamedata (the default)
source2rosetta-gen --from gamedata-cs2.json --format cssharp   --out gamedata.json

# Metamod / SourceMod gamedata VDF (one .games.txt)
source2rosetta-gen --from gamedata-cs2.json --format metamod   --out csgo.games.txt

# Swiftly / ModSharp / Plugify gamedata
source2rosetta-gen --from gamedata-cs2.json --format swiftly   --out gamedata.json

# Typed C# SDK from the schema — one `static class` per engine class, `const` field offsets + types
source2rosetta-gen --netvars netvars-cs2.json --format cs-sdk  --out Schema.cs

# Flat netvar offset map (class -> field -> offset)
source2rosetta-gen --netvars netvars-cs2.json --format netvars --out netvars.json

Formats

--format needs output
cssharp (default) --from CounterStrikeSharp combined gamedata (a commented, sectioned file)
metamod --from Metamod:Source / SourceMod gamedata VDF (.games.txt)
modsharp --from ModSharp gamedata JSON
swiftly --from Swiftly gamedata JSON
plugify --from Plugify gamedata JSON
model --from the canonical model, re-serialized (format-neutral)
cs-sdk --netvars typed C# SDK — static class per schema class, const int field offsets tagged with their type
netvars --netvars flat schema map, { class: { field: offset } }

Confidence tier

The gamedata formats (the --from ones) take a --tier, cumulative and defaulting to high_confidence:

--tier includes
core only the guaranteed, first-class entries
high_confidence (default) core + the promoted (verified-name) entries
experimental the above + every graded name guess (each has a resolvable locator, but an unverified name)
# only the rock-solid set:
source2rosetta-gen --from gamedata-cs2.json --format cssharp --tier core --out gamedata.json

The schema formats (cs-sdk, netvars) ignore --tier.


Part of source2rosetta · AGPL-3.0.