The Map of Britain
The strategic map Spirit of Excalibur is played on: a 72×60 tile
grid (1152×960 pixels at the game’s native 16px tile size), decoded
from the MMAP/IMAG resources in PLAYA32I.RES and pre-composited into
the image below by tools/spirit/render-map.ts. See
docs/spirit/amiga/gameplay-data.md § “World Map (MMAP)” in the main repo
(not part of this site) for the full byte-level format.
48 named locations. Hover or focus a marker for its name; search to highlight matches.
The render is immediately recognisable as England, Wales and Cornwall: the coastline shape, the Welsh mountains (grey terrain tiles clustered exactly where Snowdonia/the Cambrian Mountains should be), the road network and the Thames/Severn river paths all fall where they do in reality — overlaying all 48 decoded location coordinates above puts every town exactly where it belongs (London on the Thames estuary, York in the north, Dover and Canterbury on the south-east coast, Exeter and Tintagel in the south-west, Cardiff and Carmarthen in Wales, …). This is direct, strong ground truth for the grid decode, the tile atlas decode, and the palette all at once.
Want to see one of these places up close, composited the way the game’s own
SCEN resources actually draw it? The Scene Viewer
Gallery shows six named locations — Camelot,
London, Tintagel, Stonehenge, Dover, and Morgan’s Castle — as full
landscape-plus-object composites.
How the map is stored
Section titled “How the map is stored”Every one of the 4,320 tiles is a single byte, but unlike a flat tile index
it’s nibble-encoded: the low nibble selects an atlas column and the
high nibble an atlas row, both 0–15, directly addressing one 16×16
tile inside a 256×256-pixel, 16×16-tile atlas (IMAG resource
#500, 5-bitplane, 32 colours) — atlas_offset = hiNibble * 160 + loNibble * 2 in the original blitter’s byte-addressed terms, or equivalently (srcX, srcY) = (loNibble * 16, hiNibble * 16) once decoded to plain pixels. 234 of
the 256 possible byte values are actually used somewhere on the map.
Locations
Section titled “Locations”_aLoc, the executable’s compiled default location table, names 48 places.
This is the compiled default only — the table is per-episode
customizable exactly like the entity/force table (_aForces): each
EPISODE<n>.DAT can rename or add locations the compiled defaults leave
blank (up to 61 possible slots; EPISODE1.DAT alone names 5 more). The 48
markers above are the compiled table plotted directly against the render —
every single one lands on land, none in the sea, confirming both the
location table and the map decode simultaneously.

