Legend reborn

MAKING OF

A travelogue of remaking the 1983 ZX Spectrum / Commodore 64 classic as a living browser world. This is the voyage of recreating the game in a modern browser.

It began when I was reminded of the old game when I saw the re-issue of the C64.
Like many others - I had always wanted to finish the game, but due to long and unreliable loading times, plus the game being quite challenging and slow, I simply moved on to other things.

I recall spending half an hour waiting for the game to load looking at the character art.

So, I downloaded the old game, found a map and attempted to write a script to convert the map into a JSON text, to create a walk through.

Pretty soon I had the idea to re-create the game to run in a browser, as a labour of love.

Prologue

A voyage in side quests

From a PNG of a world map to a PWA game on the home screen. About five weeks in real time, split between many short sessions.

There were many false paths and dead ends, ideas which seemed great at the time but turned out to be abysmal!

~5 wks Map to public PWA
634 Main-thread prompts
1 Abandoned tech path
6 Quest relics to win
1 Jul 2026 Foundation

The map before the myth

It began with an old picture of the world map and a question: can this become structured geography in a JSON? Named rooms, eight-way exits, gated routes — then the real ambition landed: not a map viewer, a remake.

  • Parse the map into JSON the game can walk
  • Strip impossible cardinals from wayfinding
  • Add the characters and items
  • Add the logic to move the player around the world
Valhalla world map
The map that started everything
1–15 Jul Foundation

A browser with a pulse

React, Vite, a simulation worker, procedural halls — and stick figures that looked suspiciously like Terrance and Phillip until the Spectrum crops arrived.

  • Move, look, get/drop, chronicle, pause
  • Thor’s Hall, castles, lakes — screenshot by screenshot
  • Slow the world: rush-hour Asgard was wrong
Starting location crop
Start location crop
Thor's Hall crop
Thor’s Hall
Mid Jul Side journey

Raid the Spectrum tape

Hand-drawn approximations weren’t enough. The sprites lived as Movisoft bitmaps inside a .z80 snapshot — time to do some archaeology.

The Legend team made some good choices to speed up development of the game. While the game was written in Basic; Movisoft itself was 4Kb of machine code which explains why the animations ran in realtime whereas the scenery took notorioulsy long to render each time you changed location.

  • Extract the sprites from the tape
  • Extract the sprite animations from the tape data
  • Decode tape graphics into transparent atlases
  • Learn that legs can detach from torsos (they did)
  • Chests, keys, hunger, Mary’s swear list from BASIC
Sample Z80 machine code listing
Sample Z80 code (not the real Movisoft code)
Segue

Movisoft

Movisoft was a system designed by Legend to handle the graphics and animations for the game:

  • A custom graphics/animation engine created by the Valhalla development team at Legend.
  • Occupied about 4 KB of the game’s memory footprint.
  • Written in machine code, with the rest of the game logic and parser in Sinclair BASIC.
  • Intended by Legend founder John Peel to become a kind of standard adventure engine, “the adventure game equivalent of CP/M.”
Extracted Movisoft sprite atlas
Movisoft atlas — bones of the cast
16–18 Jul Foundation

Make it feel like Valhalla

Combat, hunger, Wagnerian ponderings, the Ring soundtrack, speech bubbles — and a victory horn when all six quest items finally reach Valhalla.

  • Lean vs Original hunger; soft food regen
  • Mary is not amused (red slap, not a duel)
  • First true win: relics assembled, gods gather
Talis portrait
Talis (manual)
Mary portrait
Mary (manual)
18–23 Jul Side journey

Faces from the manual

Automate portrait extraction from the PDF, then carve faces for what would become the bait of the trollsticks era. Eyebrows were collateral damage once.

  • Named portrait batch from the manual
  • Repair Talis, Kir’s eyes, Idun
  • Hand-tune ovals until Boldir’s chin survived
Portrait contact sheet
Manual portraits contact sheet

Intermediate era

Procedural halls, then the brush

Before AI scenery, every room was drawn live in Pixi — castles, caves, yellow beams, black arches. Those plates were never saved as files; they only existed at runtime. For this documentary we re-baked them from the original drawScenery code so you can see the middle step between Spectrum cells and the refined paintings.

Spectrum map-cell reference for room 71
1 · Map cell / reference
Re-baked procedural Pixi scenery for room 71
2 · Procedural Pixi (re-baked)
AI-refined scenery for room 71
3 · AI refined
Procedural Odin castle
Odin’s castle · procedural
Procedural yellow beam hall
Yellow beam hall
Procedural black hall
Black hall
Procedural cave
Cave
Procedural double turret castle
Double turret
Refined Odin castle for comparison
Odin · refined (compare)

Glorious disaster

The Trollsticks Affair

The plan: CC0 stick walk cycles plus oval “trollfaces” glued on like refrigerator magnets. On paper: elegant reuse. On screen: a cursed puppet show moonwalking through Asgard.

Trollstick Boldir reconstruction
Boldir offender
Hel portrait source
Face source
Original female humanoid crop
What we left behind
Final Hel standing frame
Where we landed
25–30 Jul Pivot

Hel walks out of a video

A homemade Hel.mp4 on white changed everything. Extract frames, keep the boots black, wage war on white puddles, and chase equitemporal sampling until the gait matched the film.

  • mp4 → keyed walk frames
  • Non-linear cell grabs looked “jerky”
  • Speed vs smoothness became a religion
Animated Hel walk then attack from extracted game frames
Extracted frames — walk cycle, then attack
Hel walk frame strip
Later: runtime half-WebP strip
25–30 Jul Render pipeline

Render all the characters

Hel was rendered frame by frame from a video created by FLUX from the portrait and a character bio I made up - based on a similar character from a different mythology from Neil Gaiman's Dreaming. From here, it was clear that rendering all the characters would be a huge task which I didn't have the time or expertise to do.

So - I created a "rendering pipeline" in Python which took each character portrait, searched the web for that character's mythology, created a character bio then render walking videos using FLUX Kontext, and finally extract walk frames from those videos.

The pipeline worked but did require a lot of manual tweaking to get the videos into a format that could be used.

The main issue was cleaning up the videos to remove the background and any other noise.

I took a leaf out of the old book of movie making and rendered each video with a precise industry 'green screen' background of #00B140 which can then be easily procedurally converted into transparent in a Python script.

Next was to set up the combat animation pipeline. This required changing aspect ratio of the generated videos and a few goes round to ensure they fit on the screen.

  • Extract character portraits from the manual
  • Create bio by searching the web for that character's mythology
  • Render walking videos using FLUX Kontext
  • Extract walk frames from those videos
  • Repeat for combat animations
Mistra standing plate on #00B140 green screen
30 Jul – 4 Aug Pivot

Teach the machine Norse fashion

Novita, Seedream, FLUX Kontext — and a firm stop when the first batch looked like a three-year-old’s people. Dragons must not be cute. Cloaks must not become green-screen holes.

  • Portrait → persona → stills → walk/attack packs
  • Scenery refined from map cells, no figures allowed
  • Per-champion anim trees that finally look like the cast
Original Spectrum-style room reference
Reference 071
AI-refined room scenery
Refined 071
4 Aug Player character

Finally add the player character graphics

At this stage the game was almost ready, but the player's character was still a stick figure. To render the player, I used the same pipeline as the players, and picked an appearance for the male/female player which were inspired by ... well you work it out!

Male player — Mail appearance
Female player — Travel appearance
5–7 Aug Shipped

Ship it to the nine worlds

Diet the install: drop videos, keep half-size WebP. Caddy, quiet music, mobile chrome that doesn’t open the keyboard in landscape, and a PWA portal to the live site.

  • pack:minimal + webp-half
  • Portrait / landscape overlays
  • Add to Home Screen — URL bar gone
Saga standing
Saga
Thor standing
Thor

Fin

Re-creating and finally finishing the game was a real joy. I'm quite pleased with the final result - it's not perfect but it's a fun game.

It's my ultimate wish that the original authors, John Peel, Mike Dailly and team will see the game and enjoy a play through.

Please drop me a line below if you have any comments, suggestions or improvements you'd like to see.

Refined scenery plate 034
Scenery · refined 034

Enter the living world

The Making Of ends where the game begins. The horn is optional. The wine is not.

Play Valhalla

Guestbook

Leave a comment

Plain text only — no links, no HTML, no scripts. Email is optional and stays with the comment.

Loading comments…