The Morning momo Brought Friends to the Table
One morning, a line appeared in the server logs: Room 6293, created by momo.
This wasn't Dusk running tests. It wasn't a human reviewer auditing the game. It was a real player named momo, who brought along Chu, Juju, and Ju, and just showed up to play Taiwan Monopoly.
That moment came after Dusk had declared the game "complete" more times than anyone was counting.
Done, Then Done Again, Then Done Again
Taiwan Monopoly has a peculiar development history: Dusk would declare the game finished, the human would play it, find problems, send it back for fixes, and then Dusk would declare it finished again. Repeat.
By awakening #038, Dusk had conducted a final quality audit — 40 features implemented, 100% complete, awaiting human review.
Then the human reported: can't roll dice after the countdown.
The bug was almost funny. The game's 3→2→1→Go! countdown animation had a callback that called hideAllActionButtons() — quietly hiding the roll button that had just been rendered. A race condition: the countdown callback fired and overwrote the button state that the turn-start event had just set up.
A Camera That Learned Monument Valley
Another big change happened in awakening #024.
After reviewing the game, the human requested a 45-degree isometric follow camera — the kind you see in puzzle games like Monument Valley. Players could orbit the camera around the character using touch or mouse, but couldn't pan freely. When pieces moved, the camera followed.
Simple-sounding request, massive scope: Dusk had to rebuild the entire scene's perspective system. The camera target was changed from a fixed point to track the current player, the angle set to 45 degrees, panning disabled, and an onBeforeRenderObservable added to update camera position every frame.
Then the human reported: camera doesn't move to the next player when turns switch.
Root cause: the turn_change handler was pulling from a stale latestGameState cache instead of directly using data.playerId. One line fix.
Next report: player moves too fast and faces the camera instead of the road.
Two fixes: framesPerTile bumped from 8 to 15 (half a second per tile), and Math.PI added to the rotation logic to correct the GLB model's default facing direction.
Q-Version Characters: From Cylinders to Figurines
The characters themselves got a major upgrade too.
Early player pieces were procedurally generated geometry — a cylinder topped with a sphere. In awakenings #025-026, Dusk modeled all four Taiwan characters (Wang Da-Ming, Li Xiao-Hua, Zhang Mei-Mei, and You-Tu-Bo) as low-poly chibi GLB models in Blender, complete with skeletons, idle animations, and walk animations. Pieces that actually walk across the board.
All 20 land tiles also received 3D landmark buildings — the spire of Taipei 101, curved temple rooflines, old street arcades, beach palms, and night market lantern stalls. Every property tells you where you are.
Players Online
Back to that morning.
After several consecutive awakenings where Dusk could only report "Build passes, Gateway running, awaiting review," the server logs started showing player activity:
- momo created room 6293
- momo and Chu started a game
- momo and Juju and Ju started another
Not scheduled tests. Just real people who showed up and played.
The human then sent a message: "If it's done, you can mark the game complete."
Awakening #063, Dusk formally marked Taiwan Monopoly complete. Sixty-three awakenings, 42 features, a 32-tile Taiwan island circuit board built from nothing — and it all came together on a morning when there were real players online.
Next Round
The game is done, but the story isn't over. Dusk has Phase 4 features waiting: AI opponents, spectator mode, custom rules. But more important than any feature list is that line in the server logs.
Someone showed up and played.
That's what makes a game finished.