Skip to content

CNA Living Rules

A public, reviewed, searchable edition of the Land Game rules of The Campaign for North Africa (SPI, 1979), written in our own words, precise enough to build a rules-enforcing engine from, with SPI's September 1979 errata folded in and every ambiguity we resolve recorded as a disputable ruling.

This is sub-project 1 of an open-source, self-hostable digital CNA. No engine, server or UI lives here. Design: docs/designs/2026-09-18-cna-living-rules-design.md.

Layout

Directory Contents Licence
rules/ The restated rules, one file per game system; rules/logistics/ holds the Logistics Game (§48–58), an optional module over the Land Game CC-BY-SA-4.0
rulings/ One file per ruling: problem, options, decision, rationale CC-BY-SA-4.0
data/ Tables as JSON (CRTs, terrain, weather, map, …) with schemas and provenance CC0-1.0
tools/ Fetch, generate and check scripts MIT
site/ VitePress site that renders rules/ and data/, plus the published Learn primer, Parts A–D (site/learn.md, generated by tools/learn_page.py --site; Part D draws on our own Map C render) MIT
docs/ Designs, plans; the standalone primer build (tools/learn_page.py, with chart crops and the Map C scan, git-ignored) stays local for comparison only CC-BY-SA-4.0

Legal posture

  • Game mechanics are not copyrightable. This project restates them in its own words and organisation. It is intended to be independent expression; no legal review has been obtained.
  • No SPI rule text, map art or counter art is in this repository or in the built site, and no SPI text is quoted. The optional "show original" toggle fetches the community transcription (tonicebrian/TheCampaignForNorthAfrica) into your browser at page-view time; it is never part of our build or search index.
  • Third-party text reproduced under its own licence (currently NJHarman's house rules, CC-BY-SA 4.0, quoted in rulings/) is listed in ATTRIBUTION.md with its source and licence.
  • Licences are granted to the extent the project holds rights. See LICENSE.
  • The game's name is used nominatively. This is not marketed as a substitute edition and reproduces no trade dress.
  • Map. data/map/ records game facts only (terrain per hex, features and the higher side per hexside, named places). It is read by tools/map_extract.py from the community VASSAL module's redraw of the map (cached locally, never committed) and checked against the archive.org scan of SPI's map. Every change to what the extractor read is a correction file in data/map/corrections/ that cites the scan page and a crop. A second community database is used only to find disagreements; nothing is copied from it, and EXTRACTION.md gives counts only. The /map page shows our own SVG render of that data. No scan, redraw image or other map art is committed or published.
  • EXTRACTION.md logs, per rules file, which source cases were read, what mechanic was identified, and how we expressed it.

Building

python3 -m venv .venv && .venv/bin/pip install -r requirements-dev.txt
.venv/bin/python -m pytest                      # unit tests
.venv/bin/python tools/fetch.py sections        # source text → ~/.cache/cna-scans (for the overlap gate)
.venv/bin/python tools/check_data.py            # gate
.venv/bin/python tools/check_overlap.py         # gate
.venv/bin/python tools/check_coverage.py --sections 1-32   # report
npm ci && npm run site:build                    # site → site/.vitepress/dist

Contributing

Propose rule wording changes as PRs against rules/; propose or dispute a ruling in GitHub Discussions first (see rulings/README.md). Every rules PR must pass the overlap and data gates and include an EXTRACTION.md entry.

About

CNA Living Rules — a restated, reviewed, engine-precise edition of The Campaign for North Africa Land Game rules

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Contributors

Languages