Mark J. SalisburyMJS-OM-2026 · Sheet WV
Just show me the cool stuff
Wispvale · Build record WV · September to November 2026

A birthday game grew into Wispvale.

I wanted to make a birthday game you could open in a browser and play offline. The first version gave you three places to explore and a companion that changed how you played. That little game got big fast. Getting it to feel like the storybook I had in mind took a change of engine, a smaller playable chapter, and a lot of watching the game in motion.

First build
One offline HTML file
Current build
Native Godot adventure
Playable locally
Opening, Lanternwild trail, two guardian encounters
Build record
A small hero in combat by a bridge on a top-down tile map.
September browser campaign. A combat encounter in the Reedwater area.
01 · September 5–6

How far could one HTML file go?

The first version was a 255 KB file with three areas, three companions that changed your stats, and a local save. The next pass turned it into a four-act campaign. By September 6, the browser candidate had 56 maps, 30 main quests, five phased bosses, 17 music themes, a character creator and a narrated opening.

Then I watched it move. The painted lanes looked promising in screenshots. In motion, the characters could feel like Colorforms stuck to the screen. We tried authored walk and attack poses, staged enemy tells and layered scenery. One motion pass cleared all 15 temporal checks, but cutout masks still broke around hair, skin and eyes, and the hero's look drifted between poses.

Small figures standing in front of a brightly painted woodland cottage.
Painterly browser candidate. The lane gained atmosphere while the cutout actors still needed better motion.
An isometric gray floor with a doorway, trees, rocks and a shallow channel.
Two-room browser experiment. Plain geometry made the casting and collision work easier to inspect.
02 · September 7

Start smaller in Godot.

The browser campaign had shown how much game we could fit in one file. With Godot, I wanted to find out how good the first few minutes could feel. We started with Chapter I. The 12-panel story led into a garden, cottage and Hall, where you could pick one of three classes and one of three rigged companions. The Hall had real collision, stat changes and a local save. Ten checks covered the Hall route, including simulated controller input.

With the opening playable, the next question was how to build what came after it. A quest needed to survive leaving the area, closing the game and coming back later.

03 · October 20–21

Make a quest survive a restart.

In October I asked whether we could stop building common RPG machinery one piece at a time. We compared native quest code, reusable quest tools and a Unity framework route, then tried the same kind of quest in isolated copies. One version passed an in-memory reload while a milestone autosave had already wiped the quest extension on disk. We added another process restart and checked the save file itself. The pilot gave us working pieces and a better test. It couldn't establish a speed winner across the routes.

October 21 · The Seed Song prototype · 26 seconds. Ask about the missing seeds, gather them in the glade, and return to plant them. The old interface and clearing are visible here. This web edit uses the later Lanternwild score, Youthful elf seeking adventure by Ragnar Random. Orchestral and World Music Pack (CC0)
04 · November 3

Give the valley a life of its own.

By November 3 the native project was back on its feet after a machine migration. We repaired the launch paths and traced a visible camera hitch to 60 Hz physics updates on a 144 fps run. Physics interpolation smoothed the gaps while the rig animations stayed separate from the collision body.

The playable opening gave us a place to start. The Lanternwild trail gave us a reason to leave it. Once there was a route worth following, the Lanternwild became the yardstick for how the rest of the valley should feel. We put a repaired rope bridge over the water, tucked a tea nook off the path and gave the old ruins moss, wishing ribbons and an old bell. Dragonflies, robins and ripples belong to the rooms they live in. They pause with the game, and reduced motion quiets the decorative movement. We carried those rules to the garden, cottage, Hall and trials without making them look like the same room.

A character and companion by a rope bridge in a green woodland clearing.
The Lanternwild. The native gameplay view that became the reference for scenery, light and quiet movement.
The garden bridge before the environment pass.
Before. The earlier native garden approach.
A cottage garden and wooden bridge surrounded by leafy plants and blue water.
After. The garden bridge and approach, with more deliberate light and planting.
A cutaway cottage room with warm light and a purple rug.
Inside the cottage. Warm light and furnishings give the room a different mood from the trail.

The trail gives the scenery a job. Wake three waylights, send your companion to rescue a creek wish-sprout, clear a mixed glade, quiet Bellback and return for a keepsake. Mossling slows enemies with roots, Cinderkin pounces, and Lunamoth restores health and magic. Trail progress persists through checkpoints. The four-wave trials meadow resets so you can practice again. Eight creatures got distinct silhouettes, including two that actually fly, plus a field guide with motion previews and individual practice.

Eight creature models on a labeled inspection sheet, with six ground types and two flyers.
Creature roster QA. Eight silhouettes built to stay readable during play.
A hero and companion at the edge of a marked grass arena.
Trials meadow. The repeatable combat space has a clear warning boundary.

The adventure book became a system.

The menus started as a one-off journal. They became a reusable set of paper and stationery screens for travel, the creature guide, options and rewards. One menu candidate imported successfully, then failed its file check because Godot generated UID files outside the declared list. We kept that attempt for comparison and verified the native implementation separately. In the reusable version, the game still owns the quests and saves. A clean relocation of the menu kit passed 62 headless and 68 rendered checks. Along the way we caught a controller cancel press escaping the pause menu and becoming a dodge. The menu now consumes the press before resuming play.

An early adventure-book checklist on a dark blue panel.
Earlier journal. The checklist already tracked the trail.
The adventure book on cream paper with tabs, a map and a quest checklist.
Stationery journal. The map, tabs and checklist now share a visual system.
05 · November 4–5

Make the threat match what you see and hear.

Bellback was already the last stop on the Lanternwild trail. Giving Bellback and Briarweaver their own arenas made it possible to build each fight around a different idea. Bellback got a broken belfry. Briarweaver got a root amphitheatre. Both grew to 1.9 times their earlier scale and gained three stages with changes in posture, attack timing and recoveries. The bells send out travelling waves with gaps you can use. Heavy slams can knock you down and leave a crater rim with two ways through.

Briarweaver exposed the gap between a warning and the thing that hit you. We made the roots fill their marked lanes, gave the seed pods visible bodies with matching swept hit geometry, and tied the stones to a single landing plan. The stone falls, the ground takes the hit, then the rim becomes a real obstacle. The sound lands on the same beat.

The plant guardian surrounded by seed projectiles inside a root arena.
Seed pods in flight. The attack has visible mass and a matching swept hit shape.
A bright impact and broken ring of obstacles around the plant guardian.
Uproot landing. Stones become blockers at impact and leave routes through the rim.

The score follows pursuit and committed attacks, with a 2.5-second release after the last threat. Music, world effects and spoken voices have separate controls. I cut all 14 player effort and breath sounds after hearing them in repeated play. Recorded cloth, leather and impacts from Kenney, plus non-vocal magic sounds, took their place. The story dialogue stayed. Kenney RPG Audio (CC0)

Watch the two guardian fights.

Play either clip for sound. These are scripted captures from the native game, staged to show the attacks and phase changes clearly.

Bellback, Keeper of the Crown · 28 seconds. A bell crest travels across the belfry floor. Watch for the opening in the crest and the broken rim left by a slam. This web edit uses the encounter's score by Juhani Junkala. Epic Boss Battle (CC0)
Briarweaver, the Rootbound Matron · 68 seconds. Watch for the spread of seed pods, the falling stones and the roots that mark out lanes. Hear the root crack, then the stone hit as the rim forms. This capture uses the live combat effects and a capture-only score. Hope by MintoDog (CC0) and a brief opening cue by Ragnar Random (CC0)
06 · November 5

Go back to the first five minutes.

The opening was still where a new player met the world and learned what their buttons did. We kept the original paintings, gave them more room on screen, and worked on the handoff from the story to the Hall. The teacher demonstrates the lesson with a moving prop, then makes room for the three starter choices. We checked the sequence at 720p and 540p.

A painted story scene from the native opening with a caption at the bottom.
November 5 prologue. The opening keeps the original story paintings and gives them room to breathe.
A parchment Guardian lesson card in front of three figures in the Hall.
November 5 Hall. A class lesson presents its controls in the same room where you make your choice.
07 · The receipts

What the tests actually covered.

  • November 3 · Adventure and opening. The adventure pass logged 1,006 checks across 20 suites. A separate run let all 12 opening panels play through naturally.
  • November 5 · Guardian attacks. The Briarweaver pass logged 99 headless and 99 native payload checks, 246 threat checks and six ordinary-health scripted wins.
  • November 5 · Opening polish. The craft pass logged 12 prologue checks and 13 Hall checks at 720p, plus 14 Hall checks at 540p.

Public record revised . Application and device checks retain the dates, builds and conditions described in this record.