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

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.


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.
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.
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.




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.


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.
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 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.
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.
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.



