Skip to main content

No project description provided

Project description

Crimsonland 1.9.93 decompilation + rewrite

This repository is a reverse engineering + high‑fidelity reimplementation of Crimsonland 1.9.93 (2003).

  • Target build: v1.9.93 (GOG "Crimsonland Classic") — see docs/provenance.md for exact hashes.
  • Rewrite: a runnable reference implementation in Python + raylib under src/.
  • Analysis: decompiles, name/type maps, and runtime evidence under analysis/.
  • Docs: long-form notes and parity tracking under docs/ (start at docs/index.md).

The north star is behavioral parity with the original Windows build: timings, RNG, UI/layout quirks, asset decoding, and gameplay rules should match as closely as practical.

Read the full story of how this project came together: reverse engineering workflow, custom asset formats, AI-assisted decompilation, and game preservation philosophy.


Quick start

Install uv package manager.

Run the latest packaged build

If you just want to play the rewrite:

uvx crimsonland@latest

Run from a checkout

gh repo clone banteg/crimson
cd crimson
uv run crimson

Keep runtime files local to the repo

By default, runtime files (e.g. crimson.cfg, game.cfg, highscores, logs, downloaded PAQs) live in your per-user data dir. To keep everything under this checkout:

export CRIMSON_RUNTIME_DIR="$PWD/artifacts/runtime"
mkdir -p artifacts/runtime
uv run crimson

Assets + binaries

There are two separate “inputs” to this repo:

  1. Runtime assets for the rewrite (PAQ archives)
  2. Original Windows binaries for reverse engineering (crimsonland.exe, grim.dll, …)

We keep them out of git and expect a local layout like:

game_bins/
  crimsonland/
    1.9.93-gog/
      crimsonland.exe
      grim.dll
      crimson.paq
      music.paq
      sfx.paq
artifacts/
  runtime/        # optional: where you run the rewrite (cfg/status/paqs)
  assets/         # optional: extracted PAQs for inspection/tools

Running the rewrite

The rewrite loads the assets from original archives:

  • crimson.paq
  • music.paq
  • sfx.paq

Extracted assets

For inspection/diffs/tools, you can extract PAQs into a filesystem tree:

uv run crimson extract crimsonland_1.9.93 artifacts/assets

Same as the original, many loaders can work from either:

  • PAQ-backed assets (preferred when available), or
  • the extracted filesystem layout under artifacts/assets/.

CLI cheat sheet

Everything is exposed via the crimson CLI (alias: crimsonland):

uv run crimson               # run the game (default command)
uv run crimson view ui       # debug views / sandboxes
uv run crimson quests 1.1    # print quest spawn script
uv run crimson config        # inspect crimson.cfg
uv run crimson extract <game_dir> artifacts/assets

Useful flags:

  • --base-dir PATH / CRIMSON_RUNTIME_DIR=... — where saves/config/logs live
  • --assets-dir PATH — where .paq archives (or extracted assets) are loaded from
  • --seed N — deterministic runs for parity testing
  • --demo — enable shareware/demo paths
  • --no-intro — skip logos/intro music

Docs

Docs are authored in docs/ and built as a static site at https://crimson.banteg.xyz/

For development, it's useful to have a live local build:

uv tool install zensical
zensical serve

Development

Tests

uv run pytest

Lint / checks

uv run lint-imports
uv run python scripts/check_asset_loader_usage.py

justfile shortcuts

If you have just installed:

just --list
just test
just docs-build
just ghidra-exe
just ghidra-grim

Reverse engineering workflow

High level:

  • Static analysis is the source of truth.
  • Runtime tooling (Frida / WinDbg) validates ambiguous behavior and captures ground truth.

Contributing notes

  • Keep changes small and reviewable (one subsystem/feature at a time).
  • Prefer measured parity (captures/logs/deterministic tests) over “looks right”.
  • When porting float constants from decompilation, prefer the intended value (e.g. 0.6 instead of 0.6000000238418579 when it’s clearly a float32 artifact).

Legal

This project is an independent reverse engineering and reimplementation effort for preservation, research, and compatibility.

No original assets or binaries are included. Use your own legally obtained copy.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

crimsonland-0.1.0.dev21.tar.gz (375.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

crimsonland-0.1.0.dev21-py3-none-any.whl (473.6 kB view details)

Uploaded Python 3

File details

Details for the file crimsonland-0.1.0.dev21.tar.gz.

File metadata

  • Download URL: crimsonland-0.1.0.dev21.tar.gz
  • Upload date:
  • Size: 375.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for crimsonland-0.1.0.dev21.tar.gz
Algorithm Hash digest
SHA256 5177cb001a76b7835d0553aa99e0cfa1d1cd949501f08940506f17586e8c4db6
MD5 2da6610f5f7149c919c5781e656799ca
BLAKE2b-256 3fdc2c6e8b9fae508addf16550b019deff666cf353ea38da110de31def26d6d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for crimsonland-0.1.0.dev21.tar.gz:

Publisher: release.yml on banteg/crimson

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file crimsonland-0.1.0.dev21-py3-none-any.whl.

File metadata

File hashes

Hashes for crimsonland-0.1.0.dev21-py3-none-any.whl
Algorithm Hash digest
SHA256 4fa4927656bc7f8a7ee42cd1e6e60b08e34283d53d9a01bf7212de41dbf5ad66
MD5 95b491946ee45bcf353c935feabd15dd
BLAKE2b-256 6b3744eb55d4f3e5bbaae46b83158be450b8eaa1ab85738f256f78a3fb7c3e3d

See more details on using hashes here.

Provenance

The following attestation bundles were made for crimsonland-0.1.0.dev21-py3-none-any.whl:

Publisher: release.yml on banteg/crimson

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page