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.dev14.tar.gz (331.0 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.dev14-py3-none-any.whl (418.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: crimsonland-0.1.0.dev14.tar.gz
  • Upload date:
  • Size: 331.0 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.dev14.tar.gz
Algorithm Hash digest
SHA256 576c0f034d291a944a608777c4e7f40e414d8265b38ead596047d47f1ae58716
MD5 22c1b4a2f287de16d5a25a3a3f732868
BLAKE2b-256 0f3eab24988c580b040578e98edff84dfd34a3505f8a7d4d55e39a9896b1183b

See more details on using hashes here.

Provenance

The following attestation bundles were made for crimsonland-0.1.0.dev14.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.dev14-py3-none-any.whl.

File metadata

File hashes

Hashes for crimsonland-0.1.0.dev14-py3-none-any.whl
Algorithm Hash digest
SHA256 45fe321f47b1fe8f523e61e4f29d52bf277bfc5a9495ac695e2b8ee0522c80e4
MD5 7257c8326f072b525be596486966c5a6
BLAKE2b-256 ba8aec6dd6bdead497ce91f6bd75b23a6036521f65768a0139f50ff25b31e1d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for crimsonland-0.1.0.dev14-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