BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
도라와 엔조가 등장하는 37개의 독창적인 브라우저 게임, 격투·경계 검사·기타 등
Thirty-seven original browser games starring Dora and Enzo the chinchillas: a fighting game with predator rivals and ICE agents, two editions of the Dust & Documents border-inspection game, the Chin x
게임TypeScript · JavaScriptGitHub @merimenjason온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Twelve original browser games starring Dora and Enzo the chinchillas: roguelites, a fighter, stealth, racing, soccer, an idle lodge and more.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A collection of fifty-four original browser games starring Dora (a white chinchilla) and Enzo (a grey one). Pick a cabinet from the arcade menu at / and play in the browser, with no install and no sign-in. Three.js renders the 3D games and Canvas 2D the flat ones. Every game keeps its rules in a standalone deterministic engine under lib/, which the tests drive directly.
Chin x Pit is the sub-brand for the two pit-diving games: Classic (/chin-x-pit) and Night Survivors (/survival).
Listed in arcade-menu order.
| # | Game | Route | Genre |
|---|---|---|---|
| 01 | Paw Fighter II | /fighter | Fighting |
| 02 | Dust & Documents: Remake | /checkpoint-remake | Inspection |
| 03 | Dust & Documents | /checkpoint | Inspection |
| 04 | Spy Escape | /escape | Stealth |
| 05 | Bounce / Burrow | /adventure | Action RPG |
| 06 | Chin x Pit · Classic | /chin-x-pit | Ball-bouncing roguelite |
| 07 | Chin x Pit · Night Survivors | /survival | Survival roguelite |
| 08 | Pawprint Grand Prix | /kart | Racing |
| 09 | Fluffball Cup | /soccer | Sports |
| 10 | Border Hop | /hop | Arcade flyer |
| 11 | Dust Bath Dash | /dust-bath | Cozy spa |
| 12 | Dora & Enzo’s Mountain Retreat | /mountain-retreat | Idle lodge |
| 13 | Paw Buster X | /paw-buster | Action platformer |
| 14 | Burrow Town | /burrow-town | City builder |
| 15 | Dusty Hollow | /dusty-hollow | Village life |
| 16 | Fluff Forge | /fluff-forge | Course maker platformer |
| 17 | Fluffstevania: Symphony of the Dust | /fluffstevania | Metroidvania action RPG |
| 18 | Chinchilla Clash | /clash | Card battler |
| 19 | Hay Maze Defence | /hay-maze | Roguelite maze tower defence |
| 20 | Chinchillas vs Zombies | /chinchillas-vs-zombies | Lane defence |
| 21 | Chinchilla Scribble | /scribble | Word puzzle |
| 22 | Burrow Tactics | /tactics | Turn-based tactics |
| 23 | Burrow Barrage | /barrage | Turn-based artillery |
| 24 | Summit Shuffle | /summit | Deck-building climb |
| 25 | Poof Panic | /poof | Versus puzzle |
| 26 | Burrow Express | /express | Transport puzzle |
| 27 | Moonlight Mischief | /moonlight | Cozy stealth adventure |
| 28 | Pawprint Pinball | /pinball | Woodland pinball |
| 29 | Pawprint Detectives | /detectives | Cozy mystery adventure |
| 30 | Frostpaw Frontier | /frontier | Survival builder |
| 31 | Moonpond | /moonpond | Night-fishing journal |
| 32 | Whisker Saga | /saga | Hero-squad adventure |
| 33 | Ember & Clover: Midnight Kitchen | /kitchen | Cozy kitchen management |
| 34 | Acorn Hand | /acorn-hand | Poker-scoring card roguelite |
| 35 | Whisker Ware | /whisker-ware | Microgame frenzy |
| 36 | Hay Bale Brawl | /brawl | Auto-battler |
| 37 | Chinchilla Trek | /trek | Roguelite trek |
| 38 | Glimmer Cave | /cave | Cave survival |
| 39 | Grumble Hunt | /hunt | 3D storybook hunting adventure |
| 40 | Puttering Paws | /putt | 3D mini golf |
| 41 | Fluff Roll | /roll | 3D roll-and-grow |
| 42 | Pawhaven | /pawhaven | Town builder |
| 43 | Dust Disco | /disco | Rhythm |
| 44 | Pebble Pop | /pebble | Brick breaker |
| 45 | Snapshot Safari | /safari | Photography |
| 46 | Dust Bunny Dungeon | /dungeon | Roguelike |
| 47 | Burrow Command | /command | Real-time strategy |
| 48 | Hayloft Tycoon | /hayloft | Idle tycoon |
| 49 | Kit Parade | /parade | Puzzle |
| 50 | Prism Paws | /prism | Light-beam puzzle |
| 51 | Seedstorm | /seedstorm | Vertical shoot-'em-up |
| 52 | Driftwood Post | /driftwood | Sailing adventure |
| 53 | Ropeclimb | /ropeclimb | Rope-physics climber |
| 54 | Echo Burrow | /echo | Time-loop puzzle platformer |
Use Node 22.13 or newer:
npm ci
npm run dev
Open http://localhost:3000 for the arcade menu, or go straight to any route above. The 3D games need a browser with WebGL 2. Every game has a MAIN ARCADE link back to the menu.
Every game uses the same layout: Play (what it is), Controls, Tests and Docs (longer write-ups, where one exists).
/fighter)Play: A one-on-one fighter with seven fighters. Arcade mode is a six-rival ladder. Each match is first to two round wins, and rounds last 60 seconds. Tied rounds award no win. Story mode follows a chinchilla leaving the Andes to chase American citizenship. Rivals appear in a fixed south-to-north order: the burrow in Chile, the Antofagasta docks, the Atacama crossing, the Darien Gap, the Rio Grande at midnight, an ICE checkpoint and the naturalization podium. Narration runs before and after each chapter. Versus is two players on one keyboard or two gamepads; player two picks a fighter and one of eight arenas (the Andean night market plus the seven story places). Survival is one round per rival with 30 health back after each win, and counts how many fall. Time attack runs the arcade ladder against a running clock. Training mode gives infinite power, no round timer, a self-healing dummy (set it to stand, block, jump or fight back), a live combo-damage readout and five combo trials (jab into kick, special finish, launcher, super finish, throw follow-up), named with each fighter's own moves. The CPU plays at easy, normal or hard.
Hits pause the action for a moment and shake the camera. A jab that connects cancels into a kick, special, rising attack or super, and a kick into a special, rising attack or super; each extra hit in a combo does 12% less, down to 40%. Blocking stops jabs and kicks completely, while specials and supers chip 15% through. Every blocked hit wears down a guard bar that refills after a short rest, and an empty guard breaks, leaving the blocker open. A throw (12 damage, up close) beats blocking; pressing jab and kick together as you are grabbed breaks free. Projectiles can be jumped, and two projectiles cancel each other. Picking a fighter from the roster at any time returns to selection and resets the run.
Progress is saved in localStorage under paw-fighter-v1: the CPU level, story and arcade medals, best survival streak and time-attack time for each fighter, and cleared trials. Clearing arcade with a fighter unlocks their alternate outfit on the select screen.
Controls:
Each fighter's special (35 power) is shown on its roster card, and an on-screen callout confirms activation or insufficient power:
Tests: tests/fighter.mjs and the CPU-against-CPU bot tests/fighter-bot.mjs (both in npm test; the bot alone is npm run bot:fighter). Browser: tests/e2e/fighter.mjs.
Docs: This section.
/checkpoint-remake)Play: A reimagined edition of Dust & Documents at the North Pass, with its own engine and 3D scene. There are seven seeded shifts. Compare the traveler card, entry permit and verified scale reading against the day's bulletin, then approve or deny. A denial needs at least one selected discrepancy, and every reason given must be true. Correct decisions earn 6 credits and a citation costs 3. Rent is deducted automatically. Between shifts, choose supper: 3-credit hay, or a 7-credit warm meal that adds 20 seconds to the next shift. Shifts are untimed by default. Optional timed shifts last 150 seconds, and the clock pauses while the tab is hidden. There is no detention-for-profit mechanic, no save data and no audio. Restart replays the same queue.
Controls: Mouse or touch on the on-screen documents and buttons. There are no keyboard shortcuts.
Tests: tests/checkpoint-remake.mjs (engine; not in npm test, so run it with the commands in the doc). Browser: tests/e2e/checkpoint-remake.mjs and tests/e2e/checkpoint-remake-behavior.mjs.
Docs: Remake design and scene layout · verification record.
/checkpoint)Play: The original document-inspection game in the spirit of Papers, Please, rendered in 3D. It is set in a lit border booth in the Andes at night. Dora works the window and Enzo works behind her, while travelers walk up the queue to be judged. The permit, traveler card, seal and stamps are physical objects on the sill, and the scale stands outside. Approving slams the green stamp and raises the gate. Denying slams the red stamp, flashes the lamp and sends the traveler back down the queue. Each shift opens with a briefing: the day's rules, the quota and Enzo's commentary. Eight violations appear over seven days: expired permits, closed regions, mismatched names, missing permits, missing seals, padded weights, barred species and suspended purposes. Rules escalate daily. Permits apply from day 1, closed regions from day 2, the scale from day 3, species bans from day 4, seals from day 5 and suspended transit from day 6. Correct calls pay 5 credits, citations cost 7 and detentions pay 1. Rent climbs every shift, from 17 on day 1 to 35 on day 7. Run out of credits and the booth closes. Three endings depend on your final credits.
Controls:
Tests: tests/checkpoint.mjs (in npm test). Browser: tests/e2e/checkpoint.mjs.
Docs: This section.
/escape)Play: Enzo and Dora Escapes from ICE, a nonviolent 3D stealth escape with an orbiting camera and platform climbing. The pair moves as one. First solve the cage: roll the blue tunnel, take the chew stick, fetch the latch clip and the toy key, and open the wire door. Then sneak through a room patrolled by three ICE agents. Take the exit card at the desk, download intel at the covered terminal and reach the green door together. Guards' vision cones fill an alert meter, and a full meter means capture. Retry restarts at the opened cage with the cage puzzles kept. Nothing is saved between reloads.
Controls:
Tests: tests/escape.mjs (in npm test).
Docs: Controls and full escape route.
/adventure)Play: An isometric action RPG, titled Dustbound in game, set across endless procedurally generated floors. Lead Dora (ranged seeds) or Enzo (melee) while the other follows and fights automatically. Shared XP levels the party. Each level gives one skill point to spend in either hero's two branching skill trees. A Great Sweeper guardian appears every third floor. From floor 2, tinted elite machines are tougher and carry one trait each (Swift, Armoured or Volatile). Machines drop gear in three rarities for three slots, and courage potions heal on a cooldown. Running out of courage resets the floor but keeps levels, skills and gear. The adventure is saved in the browser and continues from the start of the floor you were on.
Controls:
Tests: tests/arpg.mjs (in npm test) covers floor generation and reachability, skills and stances, attack swings and Shift-attacks, elites and their traits, gear forging, equipping and salvaging, potions, saving and restoring, and bot playthroughs of four floors on three seeds.
Docs: Dustbound RPG guide. It uses the earlier hero names: White for Dora, Grey for Enzo.
/chin-x-pit)Play: The original ball-bouncing roguelite, restored separately from Night Survivors. Aim bouncing balls at advancing enemies and catch returning balls for stronger ricochets. Clear twelve waves, defeat the Dustbreaker and descend with your build. There are three starting kits, twenty weapons, eight fusions and six passive items. Progress lasts for the current run.
Controls:
Tests: tests/classic-pit.mjs (in npm test). Browser: tests/e2e/classic-pit.mjs.
Docs: Classic restoration evidence.
/survival)Play: A 3D survival roguelite on an Andean plateau. Foxes, owls and snakes pursue the pair from every direction. Survive three minutes, then defeat the Mountain Cougar to reach dawn. You can continue into harder nights with the same build. Weapons fire automatically. Collect green XP gems to level up and pick one of three upgrades. Equip up to four weapons, each upgradeable to rank 5. There are twelve base weapons and eight evolved forms made by fusing compatible rank-2 pairs. Six passive items stack to rank 3 without using weapon slots. Builds reset on a new run or a reload.
Controls:
Tests: tests/survival.mjs (in npm test). tests/pit.mjs documents the earlier ball-mode rules and is not run.
Docs: Night Survivors guide.
/kart)Play: An arcade 3D kart racer. Dora and Enzo share a kart and race Copper Fox, Night Owl, Sly Snake and Mountain Cougar in the Pawprint Cup: three laps each of Dust Valley Circuit (a wide oval), Moonpebble Canyon (three sweeping bends with mud patches that cap your speed) and Frostwhisker Pass (a snowy hourglass with ice puddles that take away grip). Every race scores 10, 7, 5, 3 or 1 points, and the cup standings decide the trophy. Choose the Pebble, Boulder or Summit Cup to set how fast the rivals are. Mint crystals near the road center award items, and gold strips give boosts; each circuit places its strips differently. Driving off the asphalt or bumping rivals costs speed. There are three items: Hay Turbo (a three-second boost), Frost Pellet (slows the closest rival ahead) and Dust Bath (slows rivals close behind). Best times per circuit and the best trophy in each cup are saved in this browser. The minimap and running order track all five racers.
Controls:
Tests: tests/kart.mjs (in npm test).
Docs: Pawprint Grand Prix guide.
/soccer)Play: Top-down arcade soccer, four a side. You control Dora's Sky Squad (blue) and pick a mode on the title screen. The cup is three knockout rounds: Viscacha United, then Degu Dynamo, then Enzo's Ember FC in the final. Each rival is sharper than the last: faster chasers who read your run, a second defender covering the shot, and a keeper who dives quicker. A cup match level after 90 seconds goes to golden goal. A friendly is one 90-second match against Ember FC that can end in a draw. Control follows the blue player receiving or winning the ball, and running into the ball carrier tackles. Keepers dive at shots on target, so long shots get saved and the far corner from close in is the way to score. Passes that arrive and tackles you win fill the Fluff meter; a full meter buys a Cloud Chip, a lofted shot that sails over everyone, keeper included. Enzo now and then bursts forward with an Ember Dash. Balls rebound off the touchlines, and a shot over the bar is a goal kick; there are no fouls, offside or throw-ins. Full time shows shots and possession, and the page remembers cups won and the furthest round reached.
Controls:
Tests: tests/soccer.mjs (in npm test). Browser: tests/e2e/fluffball-cup.mjs.
Docs: Fluffball Cup guide.
/hop)Play: A Flappy Bird-style flyer. Dora and Enzo fly together on paper wings across a desert and must pass 20 striped checkpoint gaps to reach the welcome gate. A point is awarded only when both clear a checkpoint, and each checkpoint is worth 100. A Perfect Pair bonus of 50 is earned when both cross near the gap center. Hitting a column, the ground or the ceiling ends the flight. A brief freeze shows who clipped it. Your best score is saved in this browser when storage is available.
Controls:
Tests: tests/flappy.mjs (in npm test).
Docs: Border Hop guide.
/dust-bath)Play: Dora and Enzo run a gentle dust-bath spa. Pick a waiting guest and an empty bath, then scrub. Release in the striped sweet spot (about 1.3 seconds) to earn up to 12 coins. Too short needs another try. Too long makes the guest sneeze and splash occupied neighboring baths, which cuts their tips. Enzo's treats restore patience and remove one splash. His refill restocks six dust scoops and three treats after three seconds. You can play two-minute shifts or an untimed cozy mode. Between shifts, buy cloud towels (30 coins: wider sweet spot, less mess), a golden scoop (40 coins: one-second refills) and fern decor (25 coins: more patience). Coins and upgrades last for the page visit, not after a reload.
Controls:
Tests: npm run test:dust-bath (also in npm test). Browser: tests/e2e/dust-bath.mjs.
Docs: This section · acceptance checklist.
/mountain-retreat)Play: A responsive, pixel-styled idle game set in a cutaway of Juniper Lodge. Dora handles hospitality and Enzo handles supplies. Open the kitchen, suite and alpine bath, then raise all four rooms to level 3, which takes 5 to 10 minutes. Supplies feed automatic guest visits, which earn hearts and tips. Dora and Enzo walk between the open rooms, and before each visit one visiting chinchilla per open room walks up the path and settles in. Welcome serves a guest every 6 seconds. Comfort serves every 10 seconds for triple hearts. Enzo delivers supplies every 2 seconds: Gather brings 3, while Craft with care brings 1 but earns 50% higher tips and turns 2 supplies into an oat cake or herbal soap every 6 seconds.
Every visit has a featured guest with a wish: a room, sometimes an oat cake or herbal soap, and sometimes Extra comfort. A guest book shows who is coming next. Granted wishes earn bonus tips, hearts and reputation. Unmet wishes cost 1 reputation, and guests turned away for lack of supplies cost 3. Every 20 reputation adds a star (up to 5), which unlocks new guest types and bigger tips. At level 3 each room picks one of two specialties. Regulars Pip, Mochi and Luna return every fifth visit and send postcards at friendship 3, 6 and 10, and every featured guest fills a coat album. Seasons change every 6 minutes of lodge time and night falls every 2 minutes, each with its own bonus. Stargazers only come at night, and winter closes the summit. A ? beside tips, hearts, supplies and the rating breaks each number down. A countdown ring shows the next guest arriving, and a season strip shows the time until the next season and until nightfall. Each visit shows its rewards floating over the room and marks coats that are new to the album. After time away, a summary lists what happened. Soft synthesized sound is available and off by default. Guests wear an accessory for their type, show their wish in a bubble as they arrive, and react to how their stay went; regulars wear name tags. The scene has seasonal weather, stars and a rooftop stargazer at night, art for each room specialty, six summit decorations on the lodge, a backdrop for each outing, the occasional mountain viscacha, and chimney smoke that grows with the number of guests.
Every guest you see can be clicked to open a profile: a name, home village, bio, wish, friendship and album status. The guest in a room can be offered an oat cake or herbal soap once per visit, for +3 hearts and +2 tips; a treat for a regular also adds friendship. Nine lodge goals (such as reaching 3 stars, hosting 3 festivals or rescuing a lost hiker) each pay tips once, leave a keepsake by the lodge and raise its title, from Mountain hut up to Legend of the Andes. Every 3 minutes of lodge time a surprise may arrive: a storm (+50% tips and +1 heart per room), a travelling musician (+2 hearts per room), or a lost hiker to rescue on a 20-second outing for +40 tips and +8 reputation. Two optional mini-games pay small bonuses: pouring tea into the gold band (up to +25 tips, once a lodge minute) and catching the season's weather (+1 tip each, up to 15, every 90 lodge seconds). A camera snaps the scene into a scrapbook of up to 12 photos with editable captions.
On screens at least 1024×640 the game fits one screen without scrolling. The lodge scene is on the left, and seven tabs on the right hold everything else: Hosts, Rooms, Trips, Fun, Guests, Goals and Scrapbook. A dot marks a tab with something waiting. Narrower screens keep a scrolling page with the same tabs. Dora learns from every guest and Enzo from every day of work. At levels 2 to 5 each picks one of two skills, such as Tip jar, Kind words, Strong back or Tinkerer. The Goals tab has a daily wish list of three requests, the same for every player on a given day; finishing all three pays +100 tips, +10 hearts and +3 reputation once. Pip, Mochi and Luna each have a three-part story that unlocks at friendship 3, 6 and 10. Each season hosts its own festival: the Blossom fair (stocks the pantry), Midsummer lanterns (half as much again), the Harvest feast (+40 supplies) and the Snow-lantern night (+10 reputation). A tenth lodge goal rewards hosting all four.
All outings pause normal production:
Progress is saved locally under dora-enzo-mountain-retreat-v1 (save format version 4; older journals upgrade automatically). The scrapbook is stored separately under mountain-retreat-scrapbook, with offline progress capped at eight hours. Malformed saves start fresh. The light/dark theme choice is stored separately under mountain-retreat-theme. There is no account and no network service. Play in one tab, because cross-tab conflicts are not resolved.
Controls:
Tests: npm run test:mountain-retreat (also in npm test). Browser: tests/e2e/mountain-retreat.mjs, tests/e2e/mountain-retreat-theme.mjs, tests/e2e/mountain-retreat-scene.mjs, tests/e2e/mountain-retreat-depth.mjs, tests/e2e/mountain-retreat-ux.mjs, tests/e2e/mountain-retreat-scenery.mjs, tests/e2e/mountain-retreat-fun.mjs and tests/e2e/mountain-retreat-layout.mjs.
Docs: Mountain Retreat validation and known limitations.
/paw-buster)Play: A Mega Man X-style side-scrolling action platformer. Dora (blue armour) fires a paw buster that charges through two levels: a tap shot deals 1, a half charge (0.55 s) deals 2, and a full charge (1.4 s) deals 4 and pierces. Enzo (red armour) swings a whisker saber for 3 (4 on every third swing), and his swings cut enemy shots out of the air. Both heroes run, dash, dash-jump, wall-slide and wall-jump. Each has separate health (16 to start). Tag your partner in at any time for a two-second tag strike that deals ×1.5 damage; when one hero falls, the other tags in automatically, and the run ends only when both are down. Kills, weakness hits and hits of 4 or more freeze the action for a moment.
Pick any of six maverick stages: Snowcap Ridge (Frost Fox), Cloud Forest (Storm Owl), Ember Caldera (Magma Snake), Crystal Mines (Quartz Armadillo), Salt Flats (Volt Vicuña) or Titicaca Falls (Tide Toad). Each has checkpoints, beetles, bats, turrets or hopping frogs, chain-hung ceiling turrets, shielded walkers (their shield stops weak shots from the front, so hit them from behind or with a charged shot) and bombers that drop bombs which burst into shock waves, plus pits and spikes (6 damage each; a pit puts you back on the last safe ground) and a boss room that seals behind you. Halfway through each stage a guardian mid-boss (20 health, 30 on hard) blocks the way with a three-way volley and a shock-wave leap, and drops health and weapon energy when it falls. Each maverick takes triple damage, and flinches, from another maverick's weapon; the Quartz Armadillo deflects every other shot while it rolls. Once you've found a boss's weakness, its health bar names it, and the pause screen lists which boss each weapon beats. Beating a maverick also changes another stage: the Frost Fox freezes Titicaca Falls' pits into ice, the Tide Toad cools Ember Caldera's spikes into rock, and the Storm Owl takes the bats with it from the Salt Flats.
Beating a maverick gives its weapon (28 energy, 2 per shot): Frost Shard pierces, Gale Feather fires a fan of three, Ember Coil rolls along the ground, Quartz Orbit circles you with three crystals for 3 s that block enemy shots, Volt Spark curves toward the nearest enemy, and Bubble Burst fires two rising bubbles that pass through enemies. Hold fire to charge a special weapon for 4 energy: an ice wall that blocks shots for 3 s, a slow tornado, a pillar of fire, six crystals bursting outward, three homing sparks or one giant bubble. Special weapons tint the heroes' armour.
Hidden in the stages: a heart tank in each maverick stage (+2 maximum health for both heroes, up to 28); sub-tanks in Cloud Forest, Ember Caldera, Crystal Mines and Titicaca Falls, which store health picked up beyond your maximum (up to 16 each) and heal you from the pause screen; and five armour parts. The Dash Boots (Salt Flats) give one air dash per jump and the Saber Crest (Crystal Mines) turns Enzo's dashing slash into a 5-damage dash slash; the other three sit in capsules behind walls only a later weapon opens, so cleared stages are worth revisiting: the Scout Helmet (Cloud Forest) is up a waterfall you float with Bubble Burst and outlines hidden walls and points arrows at items you haven't found, Body Armour (Ember Caldera) is behind a crystal wall that Quartz Orbit shatters and takes a quarter off every hit and all of its knockback, and the Arm Cannon (Snowcap Ridge) is behind a dead power door that a Volt Spark opens and gives Dora a third charge level, a 6-damage spiral shot at 2.4 seconds. The last two sit at the bottom of trenches most heroes dash-jump straight over. Crystal Mines, the Salt Flats, Titicaca Falls and the citadel also hide small stashes under a patch of ground that looks solid but isn't: drop through it and jump back out. The pause screen names the wall each missing capsule sits behind once you hold the weapon that opens it. Enemies drop health (+6) and weapon energy (+8).
Clearing all six mavericks opens the Cougar Citadel; saves that already beat it keep it open. It has three sectors, each ending in a teleporter, and health and weapon energy carry from one to the next: the outer wall; the conveyor works, with conveyor belts, crushers (4 damage) and moving platforms; and the throne room. Its boss room is a rush: all six mavericks again with 16 health each and a health capsule between fights, then the Cougar Kingpin (44), who switches to the mavericks' lightning, sparks and crystals below half health. A retry restarts the rush at the boss you lost to.
Every clear is graded. A stage rank from S to C comes from up to three points for the time medal (each stage shows its gold, silver and bronze target times), three for taking little damage and two for clearing out the enemies, and the best rank and medal are kept. Four challenge badges are shown on each stage card: Untouched (beat the boss without taking a hit in its room), Buster only (clear it without firing a special weapon), Dry tanks (beat the Kingpin without drinking a sub-tank) and Hard clear.
Options on the stage select: a difficulty of easy (half damage, and pits don't hurt), normal, or hard, which unlocks once the citadel falls and gives enemies and bosses half again as much health, faster patterns and an extra aimed volley after every move; two players; music; a best-time ghost; screen shake; and separate sound-effect and music volume sliders. Every special weapon has its own sound. In two-player co-op Dora and Enzo are both on screen with their own health and weapons and can't tag; a fallen player can be revived by standing beside them for two seconds or by reaching the next checkpoint, and the run ends when both are down. A single-player run that sets a new best time without a retry is saved as that stage's ghost, which replays translucently alongside you next time. The boss gallery refights any boss you've beaten on its own, with its own best time, and beating the Kingpin rolls an ending and the credits. Progress lives in three save slots, and a save code copies a slot to another browser. Cleared stages, collectibles, found weaknesses, best times, ranks, medals, badges, ghosts, options and key bindings are saved in this browser.
Controls:
← → or A D: move. Space, K or Z: jump (hold for height; jump against a wall to wall-jump; hold it in a waterfall with Bubble Burst to float up).
T, J or X: fire (hold to charge Dora's buster or any special weapon; Enzo slashes). Y, L, C or Shift: dash (hold while jumping to dash-jump; with the Dash Boots, press it in mid-air).
U, V or I: tag your partner in. T, Y and U sit together above the WASD keys, so the left hand can move while the right hand fires, dashes and tags; or move with A and D and use T, Y and U with the right hand. Q / E: switch weapon. P / Esc: pause (sub-tanks are used from the pause screen). Enter retries after a defeat.
Customise keys on the stage select moves any action to a key of your choice (P, Esc, Enter and Tab stay reserved).
Co-op player 2 (Enzo): ← → move, ↑ jump, . fire, / dash, [ ] switch weapon (or numpad 0, 1 and 2 to jump, fire and dash).
Gamepad: d-pad or left stick to move, A jump, X fire, B or RT dash, Y tag, LB / RB switch weapon, Start pause (or retry after a defeat). In co-op the first gamepad plays Enzo and the second Dora.
Touch screens and narrow windows get an on-screen pad. Sound is optional and off by default; music plays while sound is on.
Co-op: stand beside a fallen partner for two seconds to revive them.
Tests: npm run test:paw-buster (also in npm test). npm run bot:paw-buster (also in npm test, about 30 s) plays the game with the engine: it searches every sector for the ways a hero can move and checks the route to each boss door can be walked without upgrades and every item can be reached with them, then fights each boss with a keep-your-distance bot and prints the route and fight times the medal targets are based on. Browser: tests/e2e/paw-buster.mjs.
Docs: This section.
/burrow-town)Play: A cozy 3D city builder on a 16×12 tile Andean valley, rendered with Three.js. Every valley starts with one plaza and 120 hay. A building only works when it is linked: it must touch a road that leads back to a plaza, or sit beside one. Anything unlinked flies a red marker and earns nothing, and unlinked homes empty out. Roads cost 4 hay, bridges over the river cost 12, and roads cannot cross rock. Hovering a tile names what stands there and, when a building is idle, says why.
There are two resources. Hay feeds everyone: farms earn 3 a tick, 4 on a terrace and 1 more beside the river, and each resident eats 0.2. Every third day is dry, and farms away from water grow half as much that day. The granary only holds 300 hay, and anything above that spills, so a big town needs silos at 250 each. Stone comes only from quarries on rock, 2 a tick, and pays for the bigger buildings: 20 for a big burrow, 25 for a plaza, 15 for a watchtower, 10 for a workshop. A workshop mills 4 hay a tick when a linked quarry is within 4 tiles and there is stone in store, burning 1 stone each tick; with no stone to cart it manages 1. Markets earn 1 a tick per 3 residents within 4 tiles, up to 8.
Comfort decides how full a home gets. Every amenity casts desirability over its radius, strongest right beside it and fading with distance: dust baths and gardens 1.5, plazas 1.6, watchtowers 1.4. Quarries and workshops cast the same thing negative. A home adds up the best of each kind in range, and the rounded total from 0 to 4 is its comfort, filling it to 40, 60, 80 or 100 per cent of its beds. A home at comfort 4 is delighted and brings in a little extra hay. Residents arrive one a tick and take a name as they move in.
Dora and Enzo each keep three wishes open between them, drawn so both are always asking for something. Dora wants homes, dust baths in range, gardens, happiness, quiet, big burrows and delighted homes; Enzo wants quarries, farms, stored hay, stored stone, silos, income, markets, workshops, watchtowers and terrace farms. An advisor never asks for something they have not unlocked, or for something the valley cannot give. Granting a wish pays 15 or 20 approval and the same in hay, and approval unlocks buildings: Dora gives gardens at 25, big burrows at 50 and extra plazas at 75; Enzo gives markets at 25, workshops at 50 and watchtowers at 75. Clearing a tile refunds half; a ruin is worth nothing and the last plaza cannot be cleared.
Seven valleys unlock in order, each with a population goal and an approval both advisors must reach: Meadow Hollow (20 residents, 25), Silver Creek (40, 40), Terrace Steps (60, 50), Old Orchard (70, 55), Condor Shelf (90, 60), Canyon Split (100, 65) and Lake Titicaca Shore (120, 75). Old Orchard and Canyon Split are scattered with derelict buildings that rebuild for half price, and Canyon Split's river runs bank to bank, so nothing on the far side works until it is bridged. Meeting a goal completes the valley and offers the next, or you can stay and keep building. The Open Valley sandbox has no goal. A day lasts 2 minutes at normal speed, lamps light after dusk, and Dora, Enzo and the residents wander the roads. Three save slots keep their own town, saved in this browser every few seconds.
Controls:
, and . step the clock between ×1, ×2 and ×4. Space or P pauses.Tests: npm run test:burrow-town (also in npm test) compiles lib/burrow-town-game.ts and runs tests/burrow-town.mjs: 33 checks covering terrain generation, road and bridge costs, terrain rules, plaza connectivity, hay and stone economies, the granary cap and spill, dry days, workshop carting, comfort and occupancy, approval unlocks, wish completion and replacement, ruins, undo, demolition refunds, pause and speed, winning, the sandbox, named residents and save round-trips. npm run bot:burrow-town (also in npm test, about a second) plays every valley with the engine to prove each one can actually be finished, and checks that no single building carries a town: six workshops with no quarry earn less than three with one, and farm spam without silos stalls at the granary.
Docs: docs/burrow-town.md.
/dusty-hollow)Play: A cozy top-down village-life game on a fixed 32×24 tile seaside hollow, drawn with Canvas 2D in a soft storybook style: one palette across the whole village, one light from the upper left so every shadow falls the same way, paper grain over the ground instead of a checkerboard, feathered joins between grass, path, sand and water, ink outlines on anything that stands up, and a warm grade and vignette over the finished frame. Dora and Enzo move in together. You steer one and the other walks a step behind; press X to swap at any time, or turn the escort off in Settings and they keep neighbour hours like everyone else. Both wear name tags, and the one you are steering reads “(you)” in amber. Burrow Works next door holds your house loan and keeps a list of eleven things to try, each paying raisins when you first do it. A day lasts 6 minutes of real time and seasons change every 4 days, or switch on the live clock in Settings and the hollow follows your real time and calendar (with Andean seasons, so December is summer). Roughly one day in four is rainy, snowy in winter. Fruit trees drop 3 apples a day; foreign fruit (pear, peach, cherry, orange) comes from neighbours and wishes and sells for 500 instead of 100, before Vito’s fruit market, which pays 70% to 150% depending on the day. Planting a fruit with the shovel grows a new tree in 3 days, and about one foreign sapling in eight grows into a golden tree whose three daily fruit sell for 1,500 each (they cannot be planted). Four money rocks pay 25, 50, 75 and 100 raisins for four shovel hits a day. Three fossils are buried each morning; they come up unidentified and Bubo at the museum assesses them for free, one at a time, saying what each is worth and whether the museum already has one. Three shells wash up on the sand each day.
Fishing: cast into the river, pond or sea and a shadow shows how big the fish is (three sizes by value). Up to two nibbles dip the bobber first; pressing on a nibble spooks the fish. On the real tug, press within 0.9 s to hook it, then hold the action button to reel and let go when the line strains: reeling adds progress and tension, easing off drops both, and big fish fight harder. The line snaps at full tension and the fish slips if progress falls to nothing. The 18 fish depend on the water, the season and day or night, from a 100-raisin pond frog to a 7,000-raisin tuna, with a rare pejerrey in autumn rivers. Every season also hides a jackpot that surfaces only on its festival day, and only once: the Golden Dorado (9,000) in the spring river, the Hercules Beetle (11,000) under the summer trees, the Great Zúngaro (12,000) in the autumn river and the Titicaca Water Frog (10,000) in the winter pond. The board announces the day's jackpot and says when someone has landed it. The 15 bugs spawn by season, time and habitat (grass, trees, flowers, water), up to six at once, and notice you: running within a tile or so scares any bug off, and the rare ones (stag beetle, winter moth) flee even from a walker who gets within a tile, but a sneaking hero (C or Ctrl, 1.2 tiles a second) can get within half a tile. Snails only come out in the rain; winter has moths and snow fleas. Flowers can be picked bare-pawed, or watered so that two watered neighbours may breed overnight: red and yellow can make orange, red and white pink, white and yellow purple, and white and white blue, and hybrids sell for 400 instead of 40.
Shaping the hollow: the Trowel (2,400 at Vito’s) is the landscaping tool. On clear grass it lays a path stone, and on a stone you laid it lifts it again, so you can run your own paths anywhere; the village’s original street is not yours to dig up. On a tree it digs the whole tree up and hands back its fruit, which replants elsewhere and takes the usual 3 days to bear, so moving an orchard costs you time rather than nothing. With a piece of furniture selected it stands that piece out in the hollow, where it is drawn exactly as it is indoors and counts toward Vito’s Home Rating; bare paws or the trowel take it back. Paving, moved trees and everything standing outside are saved with the village.
The ending: when every goal on the list is ticked, all 41 species are on display and every neighbour is a Best friend, the whole village comes up the street at dusk with lanterns and says its piece. Nothing stops afterwards: the seasons keep turning and the hollow is still yours.
The hollow: Vito’s Emporium (open 8:00 to 22:00) buys anything and sells the shovel (600), watering can (400) and trowel (2,400), red, yellow and white seeds (80) and three rotating pieces of furniture a day from twelve in three sets (Cabin, Seaside, Andean). One day a season, announced on the board the day before, is a sale: fruit pays 150% and one piece in stock is half price. The museum takes one of each of the 41 species; completing a wing (all 18 fish, 15 bugs or 8 fossils) pays 3,000 raisins and a plaque for your burrow. Your pockets hold 20 things (the counter turns amber with three or fewer free); pin an item to keep it out of “sell everything”, and O sorts them. Four neighbours (Pia the flamingo, Rodri the fox, Vivi the viscacha and Tato the condor) are out from 7:00 to 22:00 and keep a schedule: mornings near home, afternoons at a favourite spot (Pia by the sea, Rodri in the orchard, Vivi in the flower meadow, Tato on the cliff path) and evenings on the street or by the shop; the board and the Neighbours card say where each one is. Each has a favourite kind of gift and a daily request, and two more (Lupe the llama, Nico the Andean cat) move into empty plots once 4 and 8 goals are done. The first chat of the day is +1 friendship, a gift +1 or +3 if it is their favourite and nothing if you gave them the same thing recently (they remember your last three gifts and sometimes mention them), a delivered request +3 plus 300 raisins or a foreign fruit, and a gift on their birthday +5 more. At Best friend (10 hearts) a neighbour tells you where they came from and hands over a framed photo of themselves for the burrow, once each. The notice board by the street lists today’s festival or the countdown to it, birthdays, the fruit market and sale, Vito’s Home Rating for your room, tomorrow’s weather, the balloon, who is visiting whom, where everyone will be in the afternoon and the weather. On about two clear days in five a balloon drifts in from the west in the early afternoon; select a fruit or shell and press the action button as it passes overhead to pop it for a piece of furniture or 500 raisins. Festivals fall on the last day of each season: a Fishing Tourney in spring and autumn and a Bug-Off in summer score everything you catch that day by value against the neighbours (3,000, 1,500 and 500 raisins for the top three, and a Festival Trophy for first), and Snowman Day in winter scatters three snowballs to roll into snowmen for 500 each. On clear summer nights after 20:00 a shooting star crosses the sky every so often; press the action button with nothing in front of you to wish, and next morning brings 300 raisins, a foreign fruit, a piece of furniture, a hollow that likes you a little more or a clear sky.
The loan runs 4,800 for the tent, 19,800 for the Cozy Burrow and 49,800 for the Roomy Burrow, paid in any amounts at Burrow Works; each payoff moves you up and grows the room from 3×2 to 4×2, 4×3 and 5×3 tiles. Inside, the burrow is drawn as a room you look into: canvas walls in the tent and plaster in the burrows, a window showing the same sky and weather as outside, floorboards, and every piece of furniture drawn rather than listed. Click a piece from your pockets and then a floor tile to place it, click a placed piece and another tile to move it, or click it twice to pick it up. The paper lamp casts a pool of light, brightest at night, and the pebble stove burns; place either and it shows from the street too, as a warmer window or a smoking chimney. Three placed pieces from one set pay a one-time 1,000-raisin bonus, and Vito rates the room from “Bare but honest” to “The talk of the hollow”. Neighbours at Friend level or better may follow you in once a day to admire it (+1 friendship). Sleeping at home skips to 7:00 the next morning (not in live mode) and shows a summary of the day: catches, gathering, the most valuable single find, raisins earned and friendship gained. The first morning of each season shows a title card, and the ambient pad changes key with the season. Sound is a written tune, one phrase per season played over an ambient pad that changes with the time of day, an octave lower and thinner at night and softer in the rain, plus rain and sea loops, with separate music and effects sliders. F enters photo mode, which hides the interface and offers a PNG download of the view. The game autosaves in this browser every few seconds.
Controls:
Tests: npm run test:dusty-hollow (also in npm test) compiles lib/dusty-hollow-game.ts and runs tests/dusty-hollow.mjs: 52 checks covering the fixed map and bridge, walking, running and collisions, the clock, seasons and deterministic weather, fruit trees with effects and reactions, nibbles, biting, hooking and reeling, fish filtered by habitat, season and time, bug spawning, fleeing and netting, money rocks and tool auto-swap, fossil assessment and museum donations, flower watering, breeding and hybrids, planting, pockets with pins and sorting, the shop’s hours, prices, stock and fruit market, the room grid, the loan ladder, neighbour chats, gifts, memory and requests, birthdays, late arrivals, wandering and bedtime, the notice board, festivals, Snowman Day, shells, shooting stars, the facing hint, live mode, goal rewards, v1 to v3 save round-trips, deterministic replays, villager schedules, the friend’s fishing remarks, home visits, the forecast and sky-clearing wishes, museum wing rewards, furniture sets and the home rating, golden trees, sale days, sneaking, one-at-a-time assessment, the five wish outcomes, balloons, the day summary, the pocket warning, the season title card, the festival-day jackpots and their one-a-day limit, Best-friend keepsakes, the summary's best find, the two chinchillas moving in together with a following companion, the swap and the escort setting, paving and lifting paving, digging up and replanting trees, furniture standing outside, and the closing ceremony. npm run bot:dusty-hollow (also in npm test) plays the engine to prove every fish and bug can be caught in its listed window, that a year of fishing pays off the whole loan ladder, and that a full year runs all four festivals.
Docs: docs/dusty-hollow.md.
/fluff-forge)Play: A Mario Maker-style course builder, drawn in Canvas 2D. Build a side-scrolling course on a grid 15 tiles tall and 25 to 240 tiles wide, then run it as Dora or Enzo. Dora jumps higher (her held jump rises about three and a half blocks) and Enzo runs faster (155 pixels a second at a run against her 135); press C at any time to tag the other one in: they dash in from behind, the two boop noses and your partner runs off, and you keep control throughout. Jumps go higher the longer you hold the button and the faster you are running, and a jump still counts for a moment after you step off a ledge.
There are 19 parts in five groups. Terrain: ground, stone, ice (slow to speed up and slow to stop), cloud ledges you jump up through and stand on (hold down to drop through), drifting clouds three tiles wide that swing 40 pixels each way every 4 seconds and carry you, and cactus spikes that hurt from any side. Blocks: adobe bricks, raisin blocks, clover blocks and feather blocks, all bumped from below; a bump also flips any enemy standing on top. Items: raisins and springs (a spring throws you about four and a half tiles, much higher if you hold jump as you land). Enemies: beetles walk and turn at walls, frogs hop toward you every 1.1 seconds, bats chase you once you are within about ten tiles, and prickles walk, turn at ledges too and cannot be stomped. Stomping bounces you up, higher with jump held. Markers: one start, one goal flag and any number of checkpoints.
A clover makes you big: bricks break when you bump them and a hit shrinks you back with 1.5 seconds of safety instead of ending the try. A condor feather does the same and adds one extra jump in the air, and holding jump while falling floats you down. A second hit, spikes while small, a pit or the timer (100 to 500 seconds, set per course) ends the try: the course resets and you start again from the last checkpoint touched, keeping the raisins you had there. Clearing a course shows your time, raisins and number of tries.
Four starter courses show what the parts can do: Dora’s First Hop (meadow), Salt Flat Sprint (salt flats), Night Cave Crawl (cave) and Snowcap Summit (snow). Best times are kept for starters and your own courses.
Making and sharing: the editor has a parts palette, a title, theme, timer and width, undo and redo, and saves every change in this browser. Terrain paints as you drag; enemies and markers go down one per click, and placing a start or goal moves the old one. Test play runs the course from its start; Test from here starts at the left edge of the view for practice and never counts. Like Mario Maker, a course has to be cleared from its start by its maker before it can be shared: the first clear of each version unlocks a Share button with a code beginning FLUFF-, and any edit locks it again until you clear the new version. The code carries the whole course, so nothing is uploaded. Paste a friend’s code under Play a friend’s course to play it, or save it to your courses to edit it.
Controls:
Tests: npm run test:fluff-forge (also in npm test) compiles lib/fluff-forge-game.ts and runs tests/fluff-forge.mjs: 24 checks covering the parts list, the starter courses, share codes (round trips, whitespace, unicode titles and every kind of broken code), painting with one start and one goal, resizing, walking and running speeds and each hero’s jump, variable jumps and coyote time, bumping raisin blocks and bricks, clovers, hits and restarts, stomping each enemy, bumping enemies off blocks, walkers turning at walls and ledges, cloud ledges, springs, spikes, ice, drifting clouds, the feather, checkpoints, pits and the timer, clearing and tagging, the tag scene and dust and sparkle effects, and independent clones. npm run bot:fluff-forge (also in npm test) runs a search over the real engine to prove every starter course can be cleared by both heroes without dying. Browser: tests/e2e/fluff-forge.mjs plays a starter, builds a course, test-plays it, checks the clear check unlocks a share code that survives a reload and relocks on an edit, imports the code and drives the touch pad on a phone-sized screen.
Docs: docs/fluff-forge.md.
/fluffstevania)Play: A Symphony of the Night-style castle explorer, drawn in Canvas 2D with the same Dora and Enzo as Fluff Forge. Grandpa Pebble says the Golden Wolfberry, a berry that never runs out of snacks, grows at the top of the castle on the mountain, and the two go in together. The castle is one connected map of rooms, each one or more screens of 24×14 tiles; walking off an edge takes you into the next room, and a minimap and a full map in the menu fill in as you explore, with icons for shrines, Pip’s stall, guardians, treasure you haven’t taken, familiars and sealed doors, and a legend. The story runs to its end over five chapters: chapter I is the Moonlit Approach, Entrance Hall, Hay Cellar and Owl Belfry, chapter II is the Pantry Catacombs behind the belfry's sealed door, chapter III is Count Culpeo’s Library beyond the Rat King’s door, chapter IV is the Clock Tower above the Count’s balcony, and chapter V is the Moonlit Roof, 48 rooms over 90 map screens. Each weapon has its own look, carried and mid-swing: three painted fans, bare paws or a steel gauntlet, and a cudgel, marble rolling pin or red leather tome strapped to Enzo's back, each with its own trail and slash colour. Every area has three layers of parallax scenery (moonlit graveyards, stained-glass windows, barrel vaults, clockwork, shelves of glowing jars, round windows high above the castle, stormy rooftops under a full moon), rain and lightning on the roof, gears that turn behind the Clock Tower’s stonework, candlelight that cuts through the dark, afterimages when a hero dashes or lunges, and a dark foreground that slides past in front. Rain and lightning show through the hall's windows, light shafts fall through the hall and belfry, water drips in the cellar and catacombs, and each area has its own colour grade.
You control one hero while the other follows a step behind. Press C to tag: the partner tumbles from behind to the front in a spinning ball that hurts anything on its path (1.6× their attack plus 4, and it gets past an armadillo’s shield), then carries on as the lead. Tags have a one-second cooldown. Dora sweeps a Dust Fan (34-pixel reach, 140 px/s walk): every sweep blows a small gust of dust ahead, and holding attack then letting go spins her in a whirlwind that hits both sides for double damage. Enzo lunges into quick 28-pixel claw swipes (124 px/s walk, more HP and defence): each swipe carries him forward, stops when it connects, and won’t take him off a ledge. Pressing attack again as a swing ends chains a three-hit combo, and the third hit does 1.5× damage: Dora’s blows a big gust that goes through foes, Enzo’s claws uppercut foes into the air, and a club slams out little quakes. Each hero has their own HP; when the lead is worn out the partner takes over automatically and the worn-out one can’t tag back in until a rest. Both worn out sends you back to the last save.
Landing hits fills a Duo meter. When it’s full, tag and attack together (or V) set off a Duo Strike: both heroes streak across the screen and strike every foe in view. Spells run on Dust, which trickles back over time, drops from candles and comes from defeated foes. Dora learns Whirlwind at level 3 (↓ ↘ → + attack), a drifting tornado that hits again and again. Enzo learns Burrow Quake at level 4 (→ ↓ ↘ + attack), quakes both ways that throw foes up. F casts either without the motion. Scrolls in the Clock Tower teach each a second spell, cast with → ↘ ↓ + attack or ↓ + F: Dora’s Petal Ward sets six petals whirling around her for four seconds, cutting foes and knocking shots out of the air, and Enzo’s Boulder Roll curls him into a ball that bowls through everything and bounces back off walls. Up + attack throws the readied sub-weapon, paid for in seeds:
Choose between them and read up on spells in the menu’s Magic tab. A difficulty is picked for each new game: Easy softens foes and heals a little at every doorway, and Hard makes foes 1.5× tougher and has bosses fight all-out from the start.
Chapter I has cave bats that wake and chase, dust moths that drift after you, shell beetles, bone mice that lob bones, and armadillo guards whose shield blocks hits from the front until a lunge leaves them open. The catacombs add pantry rats that bristle and charge, jar ghosts that fade out of reach, and cellar spiders that drop on their threads. The Clock Tower adds clockwork mice that wind up and zoom, bouncing off walls; cuckoos that pop out of their clocks to spit notes and can only be hit while they’re out; and spring toads that leap at you in high arcs. Every hit freezes the frame for an instant and shows its damage in a bouncing number, with big gold ones for finishers, spells and the Duo Strike; your luck gives a chance of a 1.5× critical. Defeated foes burn away into embers and give off Dust motes that fly into the lead and top up the Dust meter. Foes give XP (one shared level for both, with more HP, attack and defence each level) and drop raisins and sometimes gear or food. Candles hide seeds, raisins and wolfberries. Gear goes in three slots per hero (weapon, armour, accessory): the Moonlit Fan and Wolfberry Fan for Dora; the Acorn Cudgel, Rolling Pin, Heavy Tome and Iron Claws for Enzo; the Wool Scarf, Moth Cape, Thimble Helm, Clockwork Cuirass, Silver Bell, Beetle Shell and Raisin Ring. Hay Cakes heal 40, wolfberries 20 and Timothy Tea 80 from the Items menu. Wolfberry Leaves raise both heroes’ max HP by 10. Pip the hamster keeps a stall in the catacombs, and a second one in the Clock Tower, that sells food, seeds, the Thimble Helm, Raisin Ring and Iron Claws for raisins. Defeated foes stay down until you rest at a shrine or move to another area, and the Bestiary tab records each kind you’ve beaten with its stats, weakness and a line of lore.
Four familiars can be befriended, and one comes along at a time, levelling up as you win fights:
The Dust Dash relic in the cellar lets you burst forward, once in mid-air, and dashing into a jump carries you far; it is the only way across the broken gallery in the Entrance Hall. The Cloud Hop relic in the catacombs is a second jump in mid-air, and it reaches the chimney up to the Rat King and two high treasures. Cracked walls crumble when hit and hide a Wolfberry Leaf and a secret room. Golden dust-bath shrines heal and revive both heroes and save the game in this browser, and once you’ve found two, pressing up at one warps you to another. Bosses are saved the moment they fall, so they never come back. Each area has its own synthesised music, and bosses have a theme of their own. At the top of the belfry stair waits Duke Hootsworth, a great horned owl (260 HP) who throws feather volleys and swoops low across the room; at half health he summons two bats and adds a dive that sends shockwaves along the floor. Beating him ends chapter I and opens the sealed door. At the top of the catacomb chimney sits Gnawdrick the Rat King (560 HP) on his cheese throne. He charges wall to wall, stunning himself and shaking rocks from the ceiling; he leaps at you and lands with shockwaves; and he bowls wheels of cheese. At half health he calls two rats and bowls a bouncing wheel too. Beating him ends chapter II and unlocks Count Culpeo’s Library: flying tomes that snap, ink quills that flick ink, ink blots that spring at you, a bookshelf puzzle whose sign tells you which book to pull, and the Dust Form relic, which lets you drift through iron grates to reach the Count’s tower and a hidden reading nook. Count Culpeo (980 HP), a fox in a vampire’s cape, throws fans of fireballs, bursts into bats to reappear behind you and sweep his cape along the floor, swoops across his study, and at half health calls his bats and raises pillars of fire. Beating him ends chapter III and opens the balcony door to the Clock Tower. Its Wall Cling relic lets a hero cling to a wall in mid-air, slide slowly down it and kick off it; kicking back and forth climbs the tower’s sheer shaft and reaches a pocket watch and a Wolfberry Leaf on a high shelf. At the top of the tower waits Tick-Tock the Clockwork Cat (1,900 HP). She pounces and lands with shockwaves, bowls cogs that bounce off the walls, and runs up a wall to cling there and dive at you, which leaves her dizzy and open. At half health she lets two clockwork mice loose and rings the bell on her collar: a low chime to jump and a high one to stay down under. Beating her ends chapter IV and opens the door to the roof. The Moonlit Roof is out in a storm: gargoyles that sleep as stone on their perches until you come close, then wake, dive at you and fly home; storm crows that circle and swoop; a great chimney only the Wall Cling climbs, up to a gargoyle roost holding the (Dora, ATK +22) and the (Enzo, ATK +32); Pip’s last stall; and a spire up to the summit. There fights for the last time (2,600 HP): all-out from the start, with lightning called down on the roof, until at half health he bites the Golden Wolfberry and becomes the , a great winged fox who soars, sweeps fire breath along the roof, swoops low and lands (the moment to strike), and brings down falling stars. Beating him ends chapter V. In the garden beyond, the ends the story with the credits, and goes in your bag as an accessory (ATK, DEF and LCK up); you can keep exploring afterwards.
Controls:
Tests: npm run test:fluffstevania (also in npm test) compiles lib/fluffstevania-game.ts and runs tests/fluffstevania.mjs: 64 checks. They cover:
Browser: tests/e2e/fluffstevania.mjs:
Docs: docs/fluffstevania.md.
/clash)Play: A Clash Royale-style lane battler, drawn in Canvas 2D on an 18 × 32 tile arena. Dora and Enzo hold the Dust Palace at the bottom; a rival clan holds the top. Each side has two princess towers (1400 health) and a king tower (2400), which sleeps until it is hit or a princess tower falls. A river crosses the middle, and ground troops cross it on the two bridges. You play cards with bath dust: you start with 5, gain one every 2.8 seconds up to 10, and gain it twice as fast in the last minute. Your deck of eight cycles through a hand of four, with the next card shown beside it. Troops and buildings go on your own half, or in the enemy half of a lane whose princess tower you have knocked down; spells go anywhere. Everything takes a second to drop in.
There are 12 cards. Troops: Kit Squad (2 dust, four fast kits), Pellet Flickers (3, two ranged shooters that hit flyers), Dora, Dust Duchess (5, dust puffs that splash crowds and flyers), Enzo, Boulder Brawler (4, a spin that hits every ground troop around him), Grandpa Pebble (5, a slow tank that only hits buildings), Dust Dasher (4, a fast tower-hitter that leaps the river), Glider Gang (3, three flying sugar gliders), Mochi the Capybara (3, a sturdy blocker) and Hay Balloon (5, flies to towers, drops bales and one last bale when popped). Spells: Dust Bomb (4, heavy damage in a small area, with knockback) and Pellet Volley (3, lighter damage over a wide area); towers take 35% of spell damage. Building: Hay Cannon (3, shoots ground troops for 30 seconds and pulls tower-hitters). Dora and Enzo are hero cards only you can play. Build a deck of any eight on the title screen.
Knock down a princess tower for a crown, or the king tower for all three and an instant win. After three minutes the side with more crowns wins; if it's level, one minute of overtime follows where the next crown wins, and after that the side whose weakest tower has less health loses it. The trophy road has three arenas, each opened by beating the one before: Sandy’s Beige Brigade at the Salt Flat Arena, Duchess Velvet’s Violets in Cactus Canyon and Baron Ebony’s Night Guard on the Moonlit Summit, rival clans of beige, violet and ebony chinchillas, each with its own deck and a sharper computer player. Your deck, the arenas you've opened and your wins are kept in this browser.
Controls:
Tests: npm run test:clash (also in npm test) compiles lib/chinchilla-clash-game.ts and runs tests/chinchilla-clash.mjs:
Browser: tests/e2e/chinchilla-clash.mjs checks the menu card and locked arenas, the deck builder's limits and that the deck survives a reload, tap, keyboard and drag plays, a troop refused on the enemy half, a spell on an enemy tower, pausing, a king-tower victory that opens the next arena, and tap plays on a phone-sized screen. tests/e2e/older-quality.mjs checks that a win is saved in the frame the battle ends, that a cancelled card drag plays nothing, that a hidden tab pauses, and layouts from 320 to 844 pixels wide.
Docs: docs/chinchilla-clash.md.
/hay-maze)Play: A roguelite tower defence in the style of Emberward, drawn in Canvas 2D on a 20 × 12 tile meadow at nightfall. Predators come for the Hearthlight, the lantern that keeps Dora and Enzo's burrow warm, and always take the shortest open way to it, shown as a glowing line. You build the maze from hay-bale blocks drawn as cards: 11 shapes from a single bale to the tetrominoes, which you turn and lay between waves. While you place one, the line shows the route it would make, and you can never close the way completely. Towers stand on top of bales, or on the meadow's rocks, so the bales are both the maze and the foundations. Hawks fly straight over it all.
There are eight towers, each with an element. You start with three: the Pellet Flicker (10 hay, hits flyers too), Dora's Frost Fan (16, ice: chills everything nearby by 35%, up to 55%) and Enzo's Boulder Roller (22, splash). The other five are rewards: the Ember Brazier (fire: sets foes burning for 3 s, and burning ignores armour), the Spark Wheel (a chain of zaps that jumps to 3 foes, up to 5), the Moon Lantern (arcane: long-range bolts that ignore armour), the Snooze Bell (naps of 0.6 to 1 s) and the Glider Nest (flyers only). Elements react: chilled foes shatter for double damage from sparks, and burning foes flare when moonlight hits them, scorching their neighbours for half. Towers upgrade twice and sell for 70% back.
A run is six levels, each on a newly generated meadow with its own rocks and ways in (from the third level a second way in may come down from the top, and always does from the fifth). Each level is five waves, and every second level ends with a lynx. You start each level with fresh bales, no towers, 70 hay (30 more each level after the first) and a hand of 7 cards from your deck of 11. After each wave you draw 3 more, and you can hold 8. Towers can go up during a wave; bales wait until it's over. Clear a level to pick one of three rewards: a new tower, a relic (12, such as Static Fur for longer chains or the Old Map for an extra card each wave), more cards for your deck, or a brighter flame. Predators that reach the Hearthlight dim it (badgers by two, the lynx by five); it starts at 20 and carries over between levels, and the run ends if it goes out. The run in progress is saved in this browser as you play, so you can close the page and Continue your run later. A wave left part-way comes back paused, with every predator where it was. Runs played, runs won and the furthest level reached are kept too.
Controls:
Tests: npm run test:hay-maze (also in npm test) compiles lib/hay-maze-game.ts and runs tests/hay-maze.mjs:
npm run bot:hay-maze (also in npm test) runs tests/hay-maze-bot.mjs, a planner that plays whole runs through the real engine: it lays bales to lengthen the walk along a snaking plan, stands towers where they reach the most of the route (and anti-air along the hawks' flight line), and picks rewards. It must win at least three of six seeded runs.
Browser: tests/e2e/hay-maze.mjs starts a run, lays and turns a bale, has a bale refused on a rock and a tower refused on grass, builds on a bale and a rock, upgrades and sells, reloads the page between waves, mid-wave and at the reward screen and continues the saved run each time, starts a wave with Space, pauses, clears a level to the reward screen and level 2, loses the Hearthlight (after which there's nothing to continue), and taps to preview and place on a phone-sized screen. tests/e2e/older-quality.mjs checks that a finished run is saved in the frame it ends, that a hidden tab pauses the wave and keeps the run, and layouts from 320 to 844 pixels wide.
Docs: docs/hay-maze.md.
/chinchillas-vs-zombies)Play: A lane defence in the style of Plants vs Zombies, drawn in Canvas 2D. Zombies shamble in from the street along the lanes of a 9 × 5 lawn towards Dora and Enzo's burrow, and you stop them by planting chinchilla defenders, one to a tile. Defenders cost sunflower seeds. You start each night with 75. A glowing pouch worth 25 drifts down from the sky every 7 to 10 seconds, and each Seed Gatherer finds one every 24 seconds. Click a pouch to collect it before it fades, 12 seconds after it lands. Every defender has a recharge before you can plant another of the same kind. There are seven: the Seed Gatherer (50 seeds), the Pellet Flicker (100, 25 damage every 1.3 s down its lane), Grandpa Pebble (50, a 4,000-health wall), the Dust Trap (25, ready after 14 s, then it wipes out the first zombie on its tile), Enzo's Boulder (150, 1,800 damage to every zombie in the 3 × 3 around it), Dora's Frost Fan (175, puffs that chill a zombie to half speed, bites included, for 10 s) and Twin Flickers (200, two pellets a volley). The shovel digs a defender up, without a refund. A night left part-way is kept in this browser: the home screen offers Continue Night N, and it comes back paused.
Six zombies: the plain Zombie (200 health), the faster Flag Zombie that leads each huge wave, the Conehead (370 armour on top) and Buckethead (1,100), the Pogo Zombie, which bounces over the first defender it meets and can't be hit in mid-air, and the Brute, 3,000 health, which flattens any defender in one smash and takes two boulders. There are eight nights. The first two use only the middle three lanes, and every other night uses all five. A night is 6 to 16 waves, 22 seconds apart. The first two waves are always plain zombies, flag waves are twice the size, the last wave brings the night's toughest zombie, and a progress bar with flags shows what's to come. Each lane has a hay cart that clears it the first time a zombie gets to the end. After that, a zombie at the end of the lane gets into the burrow and the night is lost. Winning a night opens the next and adds a defender to your seed bar (Grandpa Pebble, the Dust Trap, Enzo's Boulder, the Frost Fan, then Twin Flickers). The nights you've cleared are kept in this browser.
Controls:
Tests: npm run test:cvz (also in npm test) compiles lib/cvz-game.ts and runs tests/cvz.mjs:
npm run bot:cvz (also in npm test) runs tests/cvz-bot.mjs, a simple gardener that collects every seed, plants gatherers at the back and shooters where the zombies are, walls in front of pogos and boulders on crowded lanes. It must win all eight nights, and doing nothing must lose.
Browser: tests/e2e/chinchillas-vs-zombies.mjs checks the menu card and the locked nights, planting with a packet and a click, a plant refused for seeds and on a bare lane, collecting a pouch by clicking and with Space, planting with the keyboard, reloading mid-night and continuing it, a recharging packet, the shovel, speed, pausing, a won night that shows the new defender and opens the next one, losing, and tap-to-preview on a phone-sized screen. tests/e2e/older-quality.mjs checks that a won night is saved in the frame it ends, that a hidden tab pauses the night, and layouts from 320 to 844 pixels wide.
Docs: docs/chinchillas-vs-zombies.md.
/scribble)Play: A word puzzler in the style of Super Scribblenauts, drawn in Canvas 2D. Write the name of a thing and it appears next to whichever chinchilla you're steering: a ladder to climb, a bridge to cross, a carrot for a hungry llama. The dictionary knows 177 things (356 words with plurals and synonyms), and 47 adjectives change them. Adjectives stack, so a giant flying hay bale is twice the size and can be ridden through the air, and a frozen campfire won't burn. Things act on each other: fire spreads to things that burn and burns them away after 10 seconds, water and cold put fires out, cold freezes a river solid enough to walk on, bombs and dynamite go off after 3 seconds and break rockfalls, trampolines bounce you high, and animals wander, eat and scare each other. You can have 14 of your things at once; the oldest vanishes when you make a 15th. Chinchillas can't swim, and big fires push them back. There are 12 levels across three worlds (Meadow, Mountain and Burrow Town), each with a golden wolfberry to reach: a high ledge, a river, a hungry llama in a tunnel, a campfire in a mountain pass, a rockfall, a puma on patrol, a gate that needs something heavy on its plate, Grandpa Pebble shivering in a doorway, a pitch-dark storeroom, the rooftops and a zombie guarding a haystack. Each level has a par of 1 or 2 words. Solving at or under par earns 3 stars, within two more earns 2, and anything else earns 1. Only real summons count, so a word the dictionary doesn't know costs nothing and suggests the closest one it does know. Solving a level again using only words you haven't used there before counts as a bonus solve. Solving a level opens the next, and the sandbox is always open. Stars, bonus solves and a word book of everything you've written are kept in this browser.
Controls:
Tests: npm run test:scribble (also in npm test) compiles lib/scribble-game.ts and runs tests/scribble.mjs:
Browser: tests/e2e/scribble.mjs checks the menu card and the locked levels, did-you-mean, clicking to walk and climb, winning with three stars and saving them, steering with the keyboard, dragging and deleting a thing, swapping to Enzo, riding a flying carpet up the cliff for two stars, the word book, the sandbox, and tap-to-walk on a phone-sized screen.
Docs: docs/scribble.md.
/tactics)Play: Turn-based tactics in the style of Into the Breach, drawn in isometric Canvas 2D on an 8 × 8 meadow. Predators raid the warren, and every one of them shows in red what it will hit when you end the turn. Each turn your chinchillas move once and act once, and almost every action pushes something: a fox into the stream (it drowns), a weasel into brambles, one predator into another's line of fire. A telegraphed attack is a direction, not a tile, so pushing a predator moves its attack with it. A burrow that is hit collapses and costs 1 warren; at 0 warren, or with every chinchilla knocked out, the battle is lost. Hold out for the set number of turns (3 to 6) and the raid is over; some missions ask for something else: escort a kit to its den, hunt a marked predator before time runs out, or keep the nursery burrow standing. New predators come up through rustling grass, which you can block by standing on it. Six chinchillas: Dora's Seed Shot (a line, 1 and a push), Enzo's Tail Whack (2 and a push), Pip's Dust Puff (a cloud nobody can attack from, pushing everything beside it), Grandpa Pebble's Hay Toss (a bale as a wall, or 1 to whoever is there), Mochi's Tug (pulls the first creature in a line up to her) and Biscuit's Pounce (a leap that hits and scatters everyone around the landing). Each also has a second action to learn (Piercing Seed, Ground Slam, Switcheroo, Brace, Lullaby and Drop Kick) and belongs to a class with a perk that is always on: Scouts (Dora, Pip) may act first and move after, Bruisers (Enzo, Biscuit) make whatever they knock into something take 1 more, and Wardens (Grandpa Pebble, Mochi) take a predator's hit meant for a burrow beside them. Ten predators: fox, snake, owl, weasel, mole (tunnels under everything), skunk (leaves a stink cloud), badger, hawk, the Mountain Cougar and the Great Bear. Besides water and brambles there is ice (a pushed creature keeps sliding), high ground (hit 1 harder from it) and fire (burns whoever stands in it and spreads through brambles and hay). While you aim, the board shows the result before you confirm it, and a forecast line says what ending the turn now would cost. A Hint button marks what the game's own planner would do next, and the first mission is guided step by step the first time it is played. The campaign is eighteen missions with up to three stars each: ten that unlock four of the chinchillas, then chapter two, eight more where you choose where the squad starts and each mission brings new ground, a new predator, a new objective or a second action. Winning mission 5 opens The Long Night, a seeded run of seven battles on generated boards with three chinchillas of your choice, on (a warren of 6, 5 or 4, and fewer or more predators), ending with the cougar or the bear, with a reward after each battle: an upgrade, a second action, one of six relics, or a warren repair. Stars and the run in progress are saved in the browser. A campaign mission left part-way is kept in this browser: the home screen offers , back on the turn you left.
Controls:
Tests: npm run test:tactics (also in npm test) compiles lib/burrow-tactics-game.ts and runs tests/burrow-tactics.mjs:
npm run bot:tactics plays the game with the engine's own planner (the one behind the Hint button), which tries each chinchilla's options on copies of the battle. npm test needs it to win all eighteen missions with at least 2 stars and at least 6 of 12 seeded Standard runs, and needs an idle player to lose every mission.
Browser: tests/e2e/burrow-tactics.mjs checks the menu card and the locked missions, picking, moving and undoing, an aimed action and its forecast, ending a turn, reloading mid-mission and continuing it, winning a mission and its saved stars, the keyboard, starting and resuming a run, and a phone-sized screen.
Docs: docs/burrow-tactics.md.
/barrage)Play: Turn-based artillery in the style of Gunbound, drawn in Canvas 2D. Two teams of two take turns: walk a little, set the angle and the power, and fire across ground that every shot digs away. Wind (up to 10 either way, drifting each turn) bends every shot. A blast hurts everyone in its reach, your own side included, with full damage on a direct hit falling to 35% at the edge. A chinchilla with no ground left under it falls, and one that falls through the bottom of the map or is shoved off its side is out at once; so is one at 0 health. There are no fixed rounds: every action adds to a chinchilla's wait, and whoever has waited least goes next, so a quick shot can earn two turns before a slow one. From turn 49 everyone loses 8 health a turn.
Each chinchilla rides one of four rides, each with two shots and a big shot that takes three turns to charge. The Hay Catapult (125 health) throws bales that hit hard and dig wide. The Seed Spitter (110) fires fans of seeds and has the shortest waits. The Tunnel Digger (120) fires shots that tunnel through the ground before they burst, and a Sinkhole that digs a crater of 22. The Dust Cannon (115) has wide, soft blasts that shove whatever they reach, up to 34 cells. Every chinchilla also carries three items, once a match each: Double Shot fires twice, Dandelion heals 40 in place of a shot, and Burrow Hop moves you to wherever a lobbed marker lands.
The ladder is six matches against rival pairs, one on each of the six maps (Clover Meadow, Mossy Valley, The Mound, Rope Bridge, Sky Ledges, Broken Crags), with the rivals' aim rising from Sleepy through Sharp to Deadeye. A win is worth one star, two with both Dora and Enzo still in, three with half their health left as well. Pass and play puts two people on one device, on any map with any rides. Stars and Dora's and Enzo's rides are saved in the browser; a match in progress is not.
Controls:
Tests: npm run test:barrage (also in npm test) compiles lib/burrow-barrage-game.ts and runs tests/burrow-barrage.mjs:
npm run bot:barrage plays computer against computer for every pairing of rides on every map and reports each ride's win rate, how often going first wins, and the ladder; it fails if any ride wins under 30% or over 70% of its matches. Set SEEDS for more matches per pairing.
Browser: tests/e2e/burrow-barrage.mjs checks the menu card and the locked ladder, choosing rides, aiming with the sliders and by dragging, walking, firing and the rival's reply, the shots and items, winning a match and its saved stars, pass and play, and a phone-sized screen with its close camera.
Docs: docs/burrow-barrage.md.
/summit)Play: A deck-building climb in the style of Slay the Spire, drawn in Canvas 2D. Dora or Enzo sets out with 80 health and ten plain cards (five Nips, four Fluff Ups and a Dust Kick) and climbs three stretches of mountain: The Foothills, The Cliffs and The Snowline. Each stretch is a trail map of six rows of stops with a guardian at the top, 21 stops in all, and you choose your own route through it. Fights give seeds and a choice of one card from three; alphas are harder fights that also give a trinket; rest burrows heal 30% of your health or upgrade a card; treat stalls sell cards and trinkets and will take a card out of your deck; a hidden stash is a free trinket; and something on the trail is one of eight chance meetings.
In a fight you draw 5 cards and have 3 energy each turn. Every predator shows what it will do next, with its damage worked out. Fluff soaks up damage until your next turn. Zoomies add to every hit, Exposed creatures take half as much again, Winded ones hit a quarter less, and Burrs wear a predator down at the start of each of its turns. There are 64 cards to find (24 common, 26 uncommon, 14 rare), each with an upgraded version, and 30 trinkets. 25 cards turn up for either chinchilla, 20 are Dora's own (quick hits, Exposed, playing card after card) and 19 are Enzo's own (Burrs, Bristle, heavy paws, lots of Fluff). They start with the same deck and one trinket each: Dora's Ruby Bell gives two more cards and one more energy on the first turn of every fight, and Enzo's Grey Scarf heals 5 after every fight.
Reaching the summit opens the next of six altitudes for that chinchilla, each adding a rule: tougher predators, harder hits, thinner healing, a Fright in your deck, tougher guardians. A climb is saved after every choice; a climb left in the middle of a fight comes back at the start of that fight. Records, the cards and trinkets you have seen, and the climb in progress are kept in the browser.
Controls:
Tests: npm run test:summit (also in npm test) compiles lib/summit-shuffle-game.ts and runs tests/summit-shuffle.mjs:
npm run bot:summit climbs every altitude with both chinchillas and reports how often each reaches the summit, where climbs end, and how each card and trinket does. Set RUNS and LEVELS for more, FIGHTS=1 for a line per fight, and TRIAL=1 to measure each card by itself.
Browser: tests/e2e/summit-shuffle.mjs checks the menu card, the home screen and its locked altitudes, the trail, choosing and playing cards by tap, on a predator and by keyboard, the piles, the predators' turn, saving in the middle of a fight, the reward, a burrow, a stall, a meeting, a guardian's trinkets, both endings and the saved record, a whole 21-stop climb through the page, and a phone-sized screen.
Docs: docs/summit-shuffle.md.
/poof)Play: A versus falling-pair puzzler in the style of Puyo Puyo, drawn in Canvas 2D. Pairs of fluff balls fall into a well 6 columns wide and 12 rows tall. Four or more of one colour that touch pop, whatever sat on top falls, and a pop caused by that fall is the next link of a chain. A link scores 10 points a ball times its bonuses, and the chain bonus grows fast: four balls are 40 points, the second link of a chain 320, the third 640. Every 70 points become one dust clump for your rival. Your own pops cancel dust waiting above your board before they send any. Dust lands after a pair that popped nothing, 30 clumps at most at a time, and clears when something pops beside it. Emptying your whole board is a clean sweep, worth 30 extra clumps on your next pop. A round is lost when the cell marked ✕ at the top of the third column fills. Both boards are dealt the same pairs.
The rival ladder is six predators, each match first to two rounds: Mossy the Mole, Pongo the Skunk, Whip the Weasel, Brock the Badger, Professor Hoot the Owl and Sierra the Cougar, from one who pops whatever turns up to one who plans two pairs ahead and builds four-chains. Climbing it with a chinchilla opens the hard ladder for that chinchilla. Free match replays any rival you have reached. Endless has no rival: the pairs fall faster every 12 placed, and from level 4 each new level blows dust in. Chain lessons are twelve set boards that teach stairs, sandwiches, digging out dust and the clean sweep, up to a five-chain. Dora and Enzo differ in how the odd clumps of their dust land: Dora's scatter over different columns, Enzo's land side by side in a heap. The climb in progress, records and finished lessons are kept in the browser.
Controls:
Tests: npm run test:poof (also in npm test) compiles lib/poof-panic-game.ts and runs tests/poof-panic.mjs:
npm run bot:poof plays three stand-in players against every rival and each rival against the one below it, and fails if a rival does not beat the one below it at least half the time or a round never ends. Set RUNS for more rounds, HARD=1 for the hard ladder and TRIAL=1 to print without checking.
Browser: tests/e2e/poof-panic.mjs checks the menu card, the home screen, moving, turning and dropping by keyboard, pausing, a whole match played on fast forward, losing a match, carrying a climb on, free matches, the top of the ladder and the hard ladder opening, endless and its record, two lessons with a miss and a hint, and dragging, tapping and flicking on a phone-sized screen.
Docs: docs/poof-panic.md.
/express)Play: A transport puzzle starring Dora and Enzo. Draw coloured tunnels between homes (circles), hay markets (squares), dust baths (diamonds) and mountain retreats (triangles). Passengers use the shortest operating route, changing carts at shared stations. Three maps offer eight-day, six-minute shifts with targets of 100, 115 and 130 deliveries, or Endless until a platform overflows. A guided tutorial teaches drawing, destinations, deliveries and upgrades. Start with three lines, three four-seat carts, two rock drills and 62 hay. Each 45-second day brings an upgrade choice; new stations open until there are ten. More than eight passengers waiting for 18 seconds ends the route. Departures cost hay, hay deliveries replenish it, rocky crossings use drills, and occasional cave-ins can be cleared or routed around. Removing stops or freeing a cart preserves its passengers. The route saves as you play and resumes paused; records and tutorial completion stay in this browser. The painted terrain, station and cart sprites, portrait and interface follow the approved mock-up, including Dora's dark ruby eyes. Live waiting groups and exact counts follow each queue, with up to eight figures and a +N overflow badge. Chinchillas breathe, blink, shuffle, board and alight; carts bounce with turning wheels. Painted platforms, lanterns, sleepers, rails and timber crossings bring routes to life. Dust baths contain dry powder. Pause and reduced-motion preferences control decorative animation.
Controls:
Tests: npm run test:express (also in npm test) covers routing and transfers, resources, safe edits, passenger conservation, crowding, growth, upgrades, cave-ins, tutorial completion, snapshots, invalid saves, nine seeded shifts and Endless past day eight. npm run bot:express checks twelve seeded shifts across all three maps. Browser: tests/e2e/burrow-express.mjs plays the tutorial and a full shift through the controls, checks drag cancellation, keyboard, cart assignment, loops, edits, mid-journey saves, focus loss, cave-ins, records, losing and broken saves, and native touch drawing with four phone layouts.
The animation browser suite checks live counts, passenger hops, dry powder, pause, reduced motion and restored queues.
Docs: docs/burrow-express.md.
/moonlight)Play: A painted moonlit village heist starring Dora and Enzo. Recover every treat, open the rescue cage with Enzo, and bring both chinchillas home before dawn. Three nights have five, six and seven treat bundles, two or three owl patrols, and time limits of 180, 165 and 150 seconds. Complete a night to unlock the next; untimed practice opens every night and lets you learn with unlimited catches. Owls see within gold cones, with buildings blocking sight. Suspicion rises while seen and falls out of sight; three catches end a timed heist. Hide in hay, creep over noisy cobblestones, use dry dust to mask scent for 22 seconds, squeeze through fence gaps with Dora, or move a heavy obstacle with Enzo. Dora has a quiet dash with a four-second recharge; Enzo creates a misleading decoy rustle with an eight-second recharge. Rescue the friend, who finds the way home, then return both heroes. Earn a star for finishing, another for no catches, and another for finishing with a quarter of the night left. Heists save during play and resume paused. Dora retains her dark ruby eyes, and dust bowls contain dry powder.
Controls: WASD or arrow keys move, Shift creeps, Q switches, Space uses the selected chinchilla's ability, and E interacts with a nearby object. Tap a path to navigate there; the village-object buttons offer the same destinations. Phones have a paw pad, a creep toggle and a zoomable map that follows the selected chinchilla. Action buttons keep keyboard movement ready. Portrait meters warn when either friend is being watched. P / Escape pauses; M toggles sound. Focus loss pauses and clears held movement. Save & menu keeps the heist; Continue restores it paused.
Tests: npm run test:moonlight (also in npm test) covers navigation, corner collision, abilities, rescue, hiding, dry dust, occluded sight, detection, timeout, save validation, deterministic replay and complete heists on all three nights. npm run bot:moonlight runs 15 timed heists with different starting patrol phases through legal routes and actions. tests/e2e/moonlight.mjs checks controls, path tapping, abilities, pause/focus loss, mid-heist saves, reduced motion, results and unlocking, asset failure recovery and four phone layouts. tests/e2e/moonlight-polish.mjs checks action focus, all-night practice, timed unlocks, standstill dashes, the creep toggle, zoom following, zoomed pause and reduced-motion restarts.
Docs: docs/moonlight-mischief.md.
/pinball)Play: The Clockwork Warren is a painted woodland pinball table matching the approved mock-up. Launch a golden wolfberry, use two carved paw flippers, build bumper combos and race the timber ramps. Three-ball arcade runs keep a personal best; practice gives unlimited berries. Light the three brass studs on the stone wall under the burrow to rescue a neighbour. Each ramp is entered from the pocket on its side of the table: the left ramp crosses the bridge and returns the berry to the right flipper; the right ramp feeds a dry powder bowl and moonberry lock. The berry only touches what is painted on the felt, and the one way out is the slot between the flippers. Three locks release three balls with double points. Launches have seven seconds of ball save, and multiball begins with twelve. Frequent nudges tilt the table, resting the flippers for three seconds. Real rotating flipper collisions and ball-to-ball rebounds drive the play; scoring and lamp states stay live over authored artwork. Dora retains dark ruby eyes and the dust bowl stays dry. The table saves as you play and resumes paused; arcade records bank when the third ball drains.
Controls: ← / A and → / D control the flippers. Hold Space or Launch to charge and release to launch. ↑ / N nudges. Phones support simultaneous two-thumb presses; cancelled launch presses do not fire a ball. P / Escape pauses, M toggles sound and focus loss pauses and releases every held control. Save & menu keeps the table; Continue restores it paused with launch released.
Tests: npm run test:pinball (also in npm test) covers charge/cancel, weak and firm launches, flipper momentum and shot speed along the paw, catches, cushions, ball collisions, targets/rescue, ramps/dust/locks/multiball, a berry that never leaves the felt, ball save, drains, unlimited practice, tilt, deterministic frame subdivision, snapshot replay and 14,400 in-play snapshots across three planner runs. npm run bot:pinball checks eight seeded runs using legal launch/flipper controls. tests/e2e/pinball.mjs checks actual input, simultaneous touch and cancellation, focus/pause, saved tables, scoring and banked results, asset retry, reduced motion, four phone layouts and where Dora and Enzo sit at five desktop sizes.
Docs: docs/pawprint-pinball.md.
/detectives)Play: Three untimed mysteries in a painted autumn village: The Missing Moonberry, The Silent Festival Bell and The Vanishing Seed Parcel. Explore Bakery Square, Market Lane and Old Mill Court. Dora examines physical details; Enzo follows scents. Question Bruna the baker, Finn the clockkeeper, Milo the mill helper and Wren the gardener, then use established evidence to ask follow-up questions. Each case has seven clues and four required deductions; some witness accounts are optional context. Choose or drag two discovered notebook cards together, read their observations and select a supported conclusion. Establish all four deductions before explaining the complete case. Exactly one of 27 final answer combinations fits each mystery. Hints guide the next useful action without supplying the final answer. Solving earns a star, with one more for no unsupported conclusions and one for no hints. Unrelated comparisons and reviewing established deductions do not cost stars. Complete a case to unlock the next. Notebooks save after actions and restore paused; results bank immediately. Dora retains her dark ruby eyes.
Controls: Click/tap a scene marker, then Examine, Follow scent or ask a question. E examines, S follows scent, T talks and Q switches detectives. Notebook cards support tap pairing and mouse drag/drop; the information button reopens their descriptions. Location tabs and the accessible clue list offer larger controls. P / Escape pauses or closes a dialog, M toggles sound, and focus loss pauses. Save & menu keeps the case; Continue restores it paused.
Tests: npm run test:detectives (also in npm test) checks every case in forward/reverse exploration order, clue abilities and context gates, evidence requirements, witness follow-ups, duplicate reads, hints, pause, valid snapshots, malformed saves and all 27 final answer combinations per case. tests/e2e/detectives.mjs completes all three cases through actual controls, checking conversations, evidence drag/tap pairing, stars/unlocks, save/resume, modal focus, hints/gates, reduced motion, artwork retry and four native-touch phone layouts.
Docs: docs/pawprint-detectives.md.
/frontier)Play: A survival builder in the style of Tiles Survive, drawn in Canvas 2D. Winter is coming to the Andes, and Dora and Enzo lead a band of chinchillas out of the burrow onto a 13 × 13 mountain hidden under cloud. Only the ring of tiles round the burrow is uncovered at the start, with a Hay Farm and a Twig Lodge already working. Spend stamina (up to 10, a point back every 5 seconds) to uncover a cloudy tile next to land you hold: 1 for most ground, 2 for snow (1 while Dora is fit), and crags and uncleared dens block the way. Under the cloud are meadows, groves, rocks, snowfields and crags, plus supply caches, lost chinchillas who move in when there's room, three ruins that each hold a hero (Grandpa Pebble, Kiki and Luna), five rumours that ask you to choose (a buried sled, a storm, an owl who trades stone for hay and more), and five predator dens.
Build on the land you hold: Hay Farms on meadows, Twig Lodges on groves, Pebble Quarries on rocks, Snug Nests for three more chinchillas, Glow Lanterns that burn wood to light every tile within two (lit farms, lodges and quarries work half as fast again) and Watchtowers that add 15 to the night defence while someone keeps watch. Survivors take jobs on their own (farms first while the hay is running down) and you can move them with − and +. Everyone eats hay, and if the hay runs out for 20 seconds someone leaves. A day is 50 seconds of daylight and 16 of night, and a traveller settles at dawn if there's room and 30 hay to spare. Every night a raid comes: it grows with the days and with every den still standing, and it's held if your defence (8 for each burrow level, the watchtowers, half your fit heroes' power, plus Enzo's and Grandpa Pebble's guard) is at least as strong. If it isn't, the raiders steal hay, wood and stone, batter the burrow's walls and, if they win by 8 or more, damage a building. The run is lost if the walls fall or everyone leaves.
Your heroes clear a den when their combined power reaches the den's: a Weasel Hole is 12, a Fox Den 24, an Owl Roost 36, a Badger Sett 52 and the Cougar Lair on the summit 80. Too weak, and they come home hurt for 30 seconds. Clearing a den pays out supplies, opens the land beyond and weakens the raids. Raise the burrow to level 4 (each level adds homes, defence and wall strength, unlocks buildings and lets heroes train a level higher), clear the cougar, and build the Summit Beacon where it stood to win. Three mountains, Clover Valley, Salt Flats and Frost Summit, each open the next, with three stars for lighting the beacon by day 15, 16 or 18. The run in progress and your stars are saved in this browser.
Controls:
Tests: npm run test:frontier (also in npm test) compiles lib/frontier-game.ts and runs tests/frontier.mjs:
npm run bot:frontier (also in npm test) runs tests/frontier-bot.mjs, a steady settler that explores, builds, staffs, lights, defends, trains and clears dens through the real engine. It must win every map on seed 1 and at least 10 of 12 seeded runs, and standing still must lose.
Browser: tests/e2e/frontier.mjs checks the menu card and locked mountains, exploring by click (a cache) and a refused far tile, building from the panel and with the keyboard, raising the burrow, moving a worker, training Enzo, clearing a den, answering a rumour, speed, pausing, a night raid, saving and continuing, lighting the beacon (stars kept, the run cleared, the next mountain opened), losing, and tap-to-preview on a phone-sized screen.
tests/frontier-life.mjs also checks safe routes, live worker counts, damage, delivery cycles, reduced motion and engine state isolation. The painted alpine presentation uses separate terrain, building, character and walk-cycle atlases with stable worker coat variants; tiles, workers, lighting and fog stay driven by the live game. tests/e2e/frontier-art.mjs checks four layouts, tool targets, animated activity, frozen pause/reduced motion and recovery after a failed artwork request.
tests/e2e/frontier-descriptions.mjs checks building descriptions on map/card hover and keyboard focus, including locked cards and narrow screens.
tests/e2e/frontier-enemies.mjs checks complete enemy sprites, transparent safety margins and all five den/inspector renderings.
Docs: docs/frostpaw-frontier.md, art provenance.
/moonpond)Play: A night-fishing journal with a painted woodland pond, dock, chinchillas and forty illustrated journal entries, animated in Canvas 2D. Dora and Enzo sit on the dock with a lantern; you cast, wait for the bobber, work the reel, sketch what comes up and let it go. A night is 8 casts (up to 12 with more lantern oil) spread across dusk, moonrise, midnight and first light, under one weather (clear, mist, rain or fireflies) and a moon that moves on one phase a night.
A cast has three beats. Throw: hold to charge, let go to throw; how far it goes decides the water it lands in (reeds, lily pads, open water, the deep channel, or the moon's reflection on a clear night). Bite: leave the nibbles alone and press when the bobber goes right under, within 0.6 s. Reel: hold to reel and let go to ease, keeping the tension gauge in its pale band; too tight for too long snaps the line, too slack and the creature slips away. Creatures fight in five ways (steady, darters, divers, heavy ones and jumpers that you must let go for), and all of them surge now and then.
The journal has forty pages: thirty creatures, six curiosities and four legends. What takes the lure depends on the water, the hour, the weather, the lure (glow bead, clover knot or dust puff) and the moon, and each unfound page gives a clue. Letting a catch go earns moon shells for the bait shop: two better rods, three lines, lantern oil, two bobbers, Enzo's spyglass and the two extra lures. Three requests from the neighbours pay extra. Dora casts 15% further; Enzo has 15% longer to hook. Filling the journal plays an ending and lets you choose the weather.
The pond is animated throughout: the rod whips on the throw, the bobber plunges for a bite, a landed catch is lifted out and held up while Dora and Enzo hop, and it dives back in when you let it go. Clear nights have shooting stars, moths circle the lantern, and dawn brings a sunrise. Reduced motion switches all of it off without changing how the game plays.
Controls:
Tests: npm run test:moonpond (also in npm test) compiles lib/moonpond-game.ts and runs tests/moonpond.mjs: the forty pages and their conditions, casting and the bands of water, the moon's reflection, nibbles, bites and the hooking window, the five ways of fighting, snapped and slack lines, leaps, stars, shells, requests, the shop, a whole night, moon phases and weather, the ending, seed replay, frame subdivision, and saves including damaged journals and nights. npm run bot:moonpond (also in npm test) runs tests/moonpond-bot.mjs, an angler that presses only what a player can: it must fill the journal within 70 nights on eight seeds, catch every entry, never have a night without a bite, and land between 55% and 85% of casts on starter gear. tests/e2e/moonpond.mjs checks the menu card, a whole cast by keyboard, nibbles and each kind of loss, an interrupted touch, pausing and a hidden tab, the hold button on a phone, journal, shop and requests, dawn, reloads mid-night and at dawn, the lifted catch, the hop and the dive back, the ending, reduced motion (no splashes, hops or CSS animation) and seven screen sizes.
tests/e2e/moonpond-painted.mjs verifies all forty complete creature silhouettes and the hero/prop crop margins, visible fishing controls, the tension range after line upgrades, and playable artwork failure followed by retry.
Docs: docs/moonpond.md, painted artwork and exact prompts.
/saga)Play: A hero-squad adventure in the style of the squad stages of Top Heroes: Kingdom Saga, drawn in Canvas 2D. Painted heroes and bosses march through eight illustrated chapter landscapes. Five heroes march down a road from Clover Meadow to Hollow Keep and meet three waves of enemies a stage. They attack on their own. You choose who stands in the front row (two slots, where the hits land) and the back row (three), spend the loot, and decide when each hero's skill is fired.
Skills charge as a hero lands hits. There are ten kinds: a strike that stuns, a volley over every enemy, a snipe, a freeze that stuns them all, a heal, a mend, a shield for the whole squad, a rally, a three-target chain and a cleansing heal. Captains, bosses and hexers wind up their big moves for 1.8 s, with the ground reddening under the squad. Stun an enemy mid-wind-up and the move is lost, and the enemy is staggered for 2.5 s and takes 50% more damage for 4 s. A slam that lands hits every hero.
There are twenty heroes in three factions (Meadow, Burrow and Summit) and five roles. Dora and Enzo start; six join as the first six chapter bosses fall; two are earned in hero trials, and ten come from summons paid for with scrolls that are only ever won in play, with a legendary guaranteed by the tenth summons. Repeats become shards that raise a hero's stars. Gold buys levels, stages drop gear in four slots and six tiers, and the forge turns three pieces into one of the next tier. Three or more heroes of one faction give the squad 10% to 25% more attack and health.
Eighty stages in eight chapters, each stage worth up to three stars (cleared, nobody fell, under a minute), with three scroll chests a chapter. A camp chest fills with gold for up to four hours while you are away. Clearing the last stage opens an endless tower. Six optional Trials unlock after 10, 20, 30, 40, 50 and 60 campaign clears: earn Fennel, Sable and first-clear gear, culminating in tier-six Ascendant equipment.
Controls:
Tests: npm run test:saga (also in npm test) compiles lib/saga-game.ts and runs tests/saga.mjs: the roster, levels, stars, gear and the faction bonus, stage make-up, marching and attacks, all ten kinds of skill, wind-ups, interrupts and staggering, who gets hit, losing by falling or by time, stars, loot, story heroes, summons and the guarantee, the forge, arranging the squad, chests, the tower, the camp, seed replay, and saves including damaged ones. npm run bot:saga (also in npm test) runs tests/saga-bot.mjs, a squad leader that does only what a player can; it must finish the campaign on eight seeds while losing some fights, show that timed stuns beat auto-fire in the same fight, and show that a squad that never spends gold stalls early. tests/e2e/saga.mjs drives the page with keyboard and touch: summons, a battle with an interrupt, pause and a hidden tab, double speed, a loss, the squad, forge, chests and camp, auto, a story hero joining, reloads, the tower, broken saves, reduced motion and six layouts.
tests/e2e/saga-painted.mjs checks fifty complete character silhouettes and portraits, all eight chapter/boss scenes, live boss meters and artwork failure/retry. tests/e2e/saga-feedback.mjs checks live hero health, early-press guidance, target-aware interrupts, painted spells, camp rewards and reduced motion. The engine suite also checks exactly-once skill presses on 120/144/240 Hz display frames. tests/e2e/saga-loading.mjs verifies that pending artwork cannot block play and later chapters load on demand.
Docs: docs/whisker-saga.md, artwork and prompts for a painted pass.
/kitchen)Play: Run a moonlit bakery with Dora, Enzo, Pip and Ember. Each order needs preparation, an oven task and service. Four chefs can work together; Auto crew picks the fastest free specialist. Clear twelve shifts, earn three stars by meeting the goal, missing no orders and serving two above the goal, and spend gold on three kitchen upgrades. The second oven upgrade opens another rack. Untimed Cozy kitchen has no deadlines or campaign rewards.
Controls: Click or tap an order's next step. Q / W / E / R advance orders from left to right. 1–4 select a chef, 0 selects Auto crew, Space rings a five-second rush bell, P / Escape pauses and M changes sound. Leaving the tab pauses. Progress saves between shifts in this browser.
Tests: npm run test:kitchen checks order stages, crew ownership, oven limits, expiry, bell timing, cozy mode, save recovery and 240 campaign simulations. npm run test:e2e:kitchen checks actual serving, keyboard controls, pause, saved upgrades, six layouts and reduced motion.
Docs: docs/midnight-kitchen.md, docs/kitchen-art.md.
/acorn-hand)Play: A poker-scoring card run with Dora and Enzo. Hold eight cards from a 52-card deck in four suits (Acorns, Clovers, Berries and Pebbles) and play up to five at a time: the best poker hand among them sets a base of chips and mult, each card that counts adds its chips (number cards their value, faces 10, aces 11), and charms join in from left to right. Chips × mult is the score. Each round gives four plays and three discards to reach a target. Winning a run opens a harder stake (bronze, silver, then gold), each adding a rule to the last, picked on the title screen. An ante is a small round, a big round and a boss round against a woodland rival whose rule changes how you play (a suit that scores nothing, exactly five cards a play, a hand dealt face down and so on); beat the eighth boss to win, then carry on into endless antes. Between rounds the shop sells 44 chinchilla charms (five slots), almanac pages that level up a hand type, one-use treats that gloss, dye, copy or remove cards, one voucher an ante from ten permanent upgrades (a sixth charm slot, an extra play, a bigger hand and so on) and two booster packs of charms, pages, treats or cards to pick from. Its two item offers are always different; old saved duplicate offers are repaired when continued. Every five nuts kept earns one more, up to five. Simple suit pips stay readable on small cards. A rival sits across the table every round (the ante's boss in the boss round), changing between painted calm, happy and beaten portraits as it reacts to your discards and big hands, beside a pile of ten nuts that shrinks as your score closes on the target; cards deal, fly and flip, and reduced motion turns the motion off.
Controls: Click or tap cards to pick them. 1–8 pick by position, Enter plays, D discards, S sorts by rank or suit, Esc clears the selection and M changes sound. In a booster pack, the number keys take an option (1–6 with Market Day) and S skips the rest. Hover a charm, an item or a glossed card (or hold it on a touch screen) to read it. Charms can be sold and reordered in the shop; ×mult charms count most at the right-hand end. The run saves after every action, a round in progress included.
Tests: npm run test:acorn-hand checks hand detection with every edge case, the scoring order, every kind of charm, treat and boss rule, the shop and rerolls, every voucher, every kind of booster pack, the win and endless, seed replay and broken saves, and the rivals' lines and who sits at each table. npm run bot:acorn-hand plays 200 seeded runs and requires a win rate between 20% and 45%, under 5% of runs lost in ante 1, every boss met and beaten and nearly every charm in some winning run, every voucher bought and every kind of pack opened; no ante may be a wall (survival within 14 points of the ante before), and on the bronze, silver and gold stakes each must win fewer runs than the one below, with gold still won at least 2% of the time. npm run test:e2e:acorn-hand plays rounds by mouse, keyboard and touch in a browser, buys a voucher and opens every kind of pack, and checks the rival at the table, cards dealing and flying with no copies left behind, a charm wiggling as it scores, the shop's motion and that reduced motion leaves nothing animating. It also checks painted-art loading, failed-image fallback, retry and redraw on a phone, and resuming an old shop with duplicate almanac offers. Since 17-10-2026 it also checks the rival centred across the table with its nut pile and card slots, held cards pulsing, six charms on one row, a new round never showing the last rival's mood, the purse on Continue, and opening, picking and keeping a harder stake.
Docs: docs/acorn-hand.md, docs/acorn-hand-art.md, docs/acorn-hand-suit-prompts.md.
/whisker-ware)Play: A microgame frenzy. Each microgame is one command word, a fuse along the bottom and about five seconds (300 ticks; a boss runs 900) to win it. Four hosts each run a stage of their five games and a boss: Enzo's Snack Shack (STUFF!, CATCH!, SORT!, SNIFF!, GNAW! and the RAISIN RAIN! boss), Dora's Dust Spa (DUST!, BALANCE!, FLUFF!, HOP!, COMB! and CLIMB!), the Owl's Night Watch (SNEAK!, HIDE!, HUSH!, FIND!, DODGE! and DASH!) and the Fox's Trick Fair (PICK!, POP!, AIM!, STACK!, COUNT! and TOSS!). A stage plays eight of the host's games, each at least once and never the same twice running, then the boss. Halfway through, a SPEED UP card raises the speed, and each stage starts faster and at a harder level than the one before (speeds ×1.0 to ×2.0, levels 1 to 3). Four hay cubes are four lives. A lost game costs one and play moves on; a lost boss costs one and is played again. Clearing a stage opens the next. Clearing all four opens Remix, an endless mix of the twenty ordinary games that speeds up every five wins, with a boss every ten that raises the level. Every game won goes into the gallery with the best speed it was beaten at, and from there Practice plays it alone on one life, faster every three wins.
Controls: Tap or click, or use the keyboard. Space is the button: mash it for STUFF!, press it on the beat for GNAW!, HOP!, CLIMB!, DASH!, STACK! and TOSS!, and hold it for FLUFF!, SNEAK! and AIM! (on AIM! a drag from the slingshot also sets the power). The arrows steer the bowl, Dora, Enzo or the lantern (a mouse or finger works too: the bowl or actor follows the pointer), sort left or right on SORT! (or swipe), and rub left-right on DUST! (or scrub back and forth). For SNIFF!, HUSH!, PICK!, POP! and COUNT!, tap the cup, toy, card, balloon or answer, or press 1–3 for left, middle and right. On COMB!, drag the comb or move it with the arrows. On FIND!, hold the pointer where the lantern should shine and let go to dig there, or steer it with the arrows and tap Space; digging anywhere but the acorn loses, as does tapping a quiet toy on HUSH!. A press or release anywhere, even off the stage, counts. The game pauses while the tab is hidden, and the sound switch is remembered.
Tests: npm run test:whisker-ware checks the input deriver (presses, swipes, rubs and steering), the speed clock and the microgame contract. A solver per game must win all 24 on seeds 1–100 at levels 1–3 and the slowest and fastest speeds, standing still must lose, and seeds must replay exactly. It also checks stage pacing and queues, lives, boss retries, break lengths, Remix and Practice pacing, and the saved profile, including malformed saves. npm run bot:whisker-ware plays every stage and Remix 300 times with human timing (presses up to five ticks early or late, reactions 10–20 ticks behind, one game in 25 fumbled) and requires Enzo's stage cleared at least 85% of the time, the Fox's at least 50%, no stage easier than the one before, and a Remix median between 20 and 45. npm run test:e2e:whisker-ware plays in a browser by pointer and keyboard. It checks a release off the stage, a hidden tab, a resize mid-game, all 24 games drawing at the hardest setting, the gallery and Practice, the fit at phone and desktop sizes, and mute. It then runs the painted-art loader's checks.
Docs: docs/whisker-ware.md, docs/whisker-ware-art.md, docs/whisker-ware-integration.md, docs/whisker-ware-image-prompts.md.
/brawl)Play: An auto-battler in the manner of Super Auto Pets. Pick Dora or Enzo as coach, then play turns: shop, then fight. Each turn starts with 10 acorns. Units and snacks cost 3, a roll of the shop costs 1, and selling a unit gives back its level. Your crew is a line of five on a hay bale, front first. The shop offers 3 units and 1 snack on turns 1–4, 4 and 1 on turns 5–8, and 5 and 2 from turn 9, from 30 woodland critters in five tiers that unlock every two turns. Three copies of a unit merge into level 2 and six into level 3; each new level adds a unit from the tier above to the shop. Frozen shop slots are kept into the next turn. Snacks give stats or one status: Shell, Mint or Chilli. Then your crew fights a rival crew by itself: start-of-battle abilities first, then the two front units hit each other until one side is empty. A win earns a bale, a loss costs one of five hearts, and a draw changes nothing. Ten bales win the run. Dora gives the front friend +0/+2 at the start of every fight; Enzo's first roll each turn is free. The run is saved after every action, and the Almanac shows every critter and snack, starring those that were in a winning crew. Every critter, summon, snack, both coaches, the barn shop, the meadow stage and the title are painted; the paintings load lazily, the game's code drawings stand in until they arrive, and if one fails a Retry artwork button asks for it again. Every shop offer wears its price in acorns. Critters move only when something happens to them, in the fight and in the shop; reduced motion stills them.
Controls: Drag a shop unit or snack onto the line to buy or feed it, a line unit onto another place to move, swap or merge it, or onto Sell to sell it. Or tap one, then tap where it goes; tap it again to put it back. Hover or tap a critter for its card. Roll, Freeze (the chosen shop slot) and End turn are buttons, or R, F and Space. During a fight, ×2 speed and Skip, or Space to skip and then go on.
Tests: npm run test:hay-bale checks the roster against the design, every fight ability at levels 1 and 3, ability order, statuses, chained faints and stalled fights, the shop (slots, tiers, buying, merging, levels, snacks, freezing, rolls, selling and every shop-time ability), illegal actions changing nothing, the end of a run, saves round-tripping and malformed saves, the buying policy, ghost rivals and the profile, and then the painted art: all seven files at their delivered hashes, every subject mapped to its measured crop, and the loader (one request per file, drawings while pending, no retry until asked, stale callbacks ignored, mirrored rivals), and the movement (only the critter an event is about moves, a fainted critter stays gone until its line closes up, the line slides, reduced motion stays still, shop effects end). npm run bot:hay-bale plays 300 runs with the buying policy and 300 with a random buyer, and requires the policy to win 30–55% of runs and the random buyer under 5%, every unit bought in at least 2% of runs, none in more than half of the winning crews, every tier in winning crews, and no fight near the 200-round cap. npm run test:e2e:brawl buys by drag and tap-tap, merges, sells, cancels drags, freezes and rolls, plays and skips a fight, reloads mid-fight, wins a whole run, opens the Almanac, and checks the fit at phone and desktop sizes and mute. Its painted-art checks paint all 44 subjects facing both ways on dark and cream, play a shop, a drag and all three summons at phone size with reduced motion, hold a replay while the tab is hidden, play a whole turn while the paintings are held back, and fail every file to check the stand-ins, one request per file and a Retry that repaints the title and the Almanac in place. Its effects checks record which cell of the effects sheet every draw uses: all twelve at their game sizes, frozen shop and fight frames on desktop and phone, reduced motion, and a slow and a failed sheet with Retry. A last check makes sure a buy, a merge, a roll and a sale start their shop effects, which all end, and that reduced motion starts none.
Docs: docs/hay-bale-brawl.md, image prompts, painted art and art integration.
/trek)Play: A roguelite trek in the spirit of Capybara Go!. At camp, pick Dora (+10% HP, starts with Shell) or Enzo (+10% attack, starts with Combo) and one of five chapters: Clover Meadow, Bramble Wood, Willow River, Frosty Peak and Moon Hollow, each unlocked by clearing the one before. A trek is thirty days, one event a day. Day 1 is always a fight; day 10 and day 20 are elite fights, day 15 is the crossroads, day 25 the Pedlar and day 30 the chapter's boss. The other days are drawn from fights, story scenes, skill caches, finds, rests, the lucky wheel and the Pedlar, never the same kind twice running. Fights play out by themselves, the hero first each round: attacks, crits, dodges and the skills you hold, up to 40 rounds. HP carries from day to day, and at 0 the trek ends. Won fights give experience and acorns; every level-up heals 20% and offers three of 18 skills, each up to level 3, and two skills at level 3 can evolve into one of four evolutions. Story scenes offer two choices, some with odds; the Owl heals or levels a skill, and the Fox trades max HP for new skills. Every trek, won or lost, banks its acorns and opens a chest: acorns plus a piece of gear (a hat, scarf, charm or boots, from Plain to Legend), two on a clear. At camp, acorns train attack and HP, and three pieces of a kind merge into one of the next rarity. The Journal lists every skill, evolution and foe. The trek is saved after every action. The 30 foes, the Owl, the Fox, Pip, the landmarks, the five chapter paths, the skill badges, the gear and the title are storybook paintings, with the code drawings standing in while they load; Dora and Enzo walk and fight as the arcade's shared code-drawn chinchillas.
Controls: Walk on walks to the next day, or turn on Auto-walk to keep walking until a choice is needed. Tap a choice, a skill card or a ware; Reroll redraws the skill cards once a trek. During a fight, ×2 and Skip. Tap a skill in the tray to read it. Keys: 1, 2 and 3 pick a choice or card, Space walks on or skips a fight, R rerolls and Escape walks on from an event.
Tests: npm run test:trek checks the data against the design, the hero's stats and the foes' scaling, every skill at its levels, the four evolutions and the six foe traits, knock-outs after every hit, the 40-round cap and 1000 random fights; then the trek itself (the fixed days, no repeated events, level-ups and picks, evolutions, the reroll, the crossroads, visits, story follow-ups, the wheel, the Pedlar, a stalled boss, illegal actions changing nothing, determinism, saves round-tripping and malformed saves); then camp, the chest odds, the profile and the bot's policy. npm run bot:trek plays 300 fresh chapter-1 treks with the policy and with a random player, and 40 whole campaigns to a chapter 5 clear, and requires the policy to clear chapter 1 in 25–55% of treks and at least 20 points more often than the random player, a median campaign of 15–45 treks and none over 90, every skill picked in at least 2% of treks, every evolution in at least 5% of clears, and under 2% of fights stalled. npm run test:trek also runs tests/chinchilla-trek-art.mjs: the twelve delivered files and their hashes, every crop at its documented index, the path bands, the wheel's slices, the loader (one request per file, failures, Retry, stale callbacks, wrong sizes) and the painters (feet on the baseline, left-facing foes, mirrored backdrop tiles meeting on whole device pixels). npm run test:e2e:trek starts a trek, plays and skips a fight, picks and rerolls, plays a story day, the crossroads and the Pedlar, reloads mid-fight, ends a trek and opens its chest, trains and merges at camp, auto-walks, opens the Journal, checks that a trek asks only for its own chapter's paintings, that slow or failed paintings leave the game playable, that Retry brings them back and the title repaints by itself, that cards, Reroll, the tray and the Journal show badges, and checks the fit at phone and desktop sizes and mute.
Docs: docs/chinchilla-trek.md, the design, the plan, the image prompts and the painted art and its integration.
/cave)Play: A cave survival dive in the spirit of Deep Rock Galactic: Survivor, seen from above.
Controls: Move with WASD or the arrow keys, or put a thumb down anywhere on the stage and drag a floating joystick. Walk into a block to dig it. Pick a card with a click, a tap or 1, 2 and 3, and reroll with R: one reroll each layer plus any from camp. P or Escape pauses, and so does the pause button and hiding the tab.
Tests:
npm run test:cave covers:
tests/glimmer-cave-art.mjs: the eleven cleaned sheets and their hashes, the icons in card order, decoded alpha, every crop inside its cell, the named sequences, and the loader (one request per sheet, failures, Retry, stale callbacks, wrong sizes).tests/glimmer-cave-bot.mjs (in npm test; npm run bot:cave runs four times as many dives) plays seeded dives on worker threads and requires:
npm run test:e2e:cave checks:
Docs: docs/glimmer-cave.md, the design, the plan and the art pipeline.
/hunt)Play: A gentle 3D storybook adventure. Pick Dora or Enzo, then choose from fourteen basic weapons at the rack; the other friend follows, helps bonk, and tosses a healing berry when Fluff is low. Visit the village Pantry, Forge, Beast Book, and hunt board. Bonks lower a beast’s Grump until it curls up for a nap and goes to the sanctuary. Bristleback charges into trees, Puffwart hops and makes sleepy clouds, Skreel swoops then rests, Hornclack guards its front, and Frostmane has three moods. After the story, Paddlepaw the belly-sliding otter (Soggy Marsh) and Rumblesnout the burrowing badger (Pebble Hollow) join the free hunts, each with its own armour set and quests; Rumblesnout digs down under an orange circle on the leader and pops up inside it. Below 30% Grump a beast turns Extra Grumpy: steam puffs from its ears, and it moves 15% faster with 0.1 seconds less warning. When the beast is far off or behind a tree or rock, Enzo sniffs out a trail of glowing pawprints to it. The buddy follows one of three orders: stay close, go bonk or gather. From chapter 2, Bramble’s Forge also makes three charms (Clover for more nap materials, Acorn for Fluff, Feather for quicker rolls and vine), each grown from I to III with materials and quest stars. From chapter 2, Old Mossback’s quest board has eleven quests (timed calms, goals such as no vine or three finishers, and two-beast quests) that pay stars and material bundles; after the story and three quests, Mighty quests bring each beast back with twice the Grump and one new warned move, and unlock a golden Mighty armour set at the Forge. Finishing Mighty Rumblesnout and Mighty Paddlepaw opens the finale, Best of Friends: both Mighty river friends in a row, a finale story scene and a keepsake ribbon. The Beast Book also keeps Mighty best times and the turf bonks you've seen. Follow Old Mossback’s six story chapters, starting with a 40-Grump calf in the village paddock and travelling through Clover Meadow, Soggy Marsh, Windy Ridge, Pebble Hollow and Frosty Peak. Painted intros and outros tell the story of the Grumble Wind; seen scenes replay from the Beast Book. The ending opens Extra Grumpy colour variants with 60% more Grump and twice the rare chance, plus Wren’s three daily bounties for material bundles. Each beast drops its own materials from bonks, pop-off parts and naps, and they pay for five-tier weapon trees with two beast-themed branches and Glimmer healing, plus fifteen armour pieces with mixed sets and two- and three-piece skills. The Forge swaps either friend’s weapon for free; Bubble Wand and Pinecone Yo-yo open at chapters 3 and 4. After the story, four more open through post-game goals: the Tickle Feather (5 bounties claimed) fills a Giggle meter that makes the beast giggle-dizzy; the Dandelion Puffer (all five Extra Grumpy variants calmed) blows clinging fluff and a pushing Big Breath; the Pogo Spring (10 plops) High Bounces onto flying Skreel and straight into a Hop-on; and the Leaf Umbrella (every part broken) guards from every side and spins. On hunts, press F at berry bushes, marsh reeds and glimmer sparkles to gather; at the Pantry, make fluffberries, big fluffberries, sleepy seeds, smoke puffballs, pathfinder acorns, dizzy bells and sticky sap traps as story chapters open, pick six for your item ring, and pack one snack (more Fluff, quicker rolls, more Dizzy or a luckier nap) for the next hunt. Hop onto a dizzy or sap-stuck beast with a connecting Yo-yo Loop, or roll / Staff vault away from a rock edge towards it. Three full bonks make a plop with +30 Dizzy and two commons; rides last up to eight seconds and are limited to two per hunt. Every wild area is three named zones joined by worn paths: below 70% and again below 35% Grump the beast wanders down the far path to the next zone, the path glows, and walking up it follows. Each zone has its own layout, gathering spots, nest, one hazard (an acorn bough, bubble spring, rock pile, sticky vines or icicles; trip it with a pebble or F and it drops after a 0.8-second warning for 8% Grump and 3 seconds of dizzy) and three fluff finches that add 5 Fluff and 5 most Fluff when you walk up to them. Outside the paddock, the first wind-up of a hunt is a roar with a painted name card; it makes the leading friend cover their ears if caught inside the orange circle. Rain, mist, dust or a blizzard blows in now and then and shortens how far the beast can be seen. Once a hunt a second beast wanders in, and when the two square off the turf bonk takes 10% of the hunted beast's Grump. Below 20% Grump a beast trudges home to snooze in its nest, and the first bonk on it there is a double wake-up bonk. Every bonk shows its Grump as a rising number, orange on a weak spot (the face, or Hornclack's sides) worth 15% more. The results show the calm time, and the Beast Book keeps each beast's best. At zero Fluff you are tuckered out and return to camp with gathered materials safe. Replay any open hunt; New game resets this game’s progress.
Controls: In story scenes, tap, Enter or J advances; Skip skips the scene. During Hop-on, tap J five times per full bonk, hold K through “Hold on!”, and Space to hop off; touch uses Bonk, Hold · big and Roll. WASD or arrows move, Shift sprints, J bonks or shoots (three J swings in rhythm with a melee tool make a string that ends in the tool's finisher), hold K and release charges a big swing or shot, tap K (under 0.2 seconds) uses the equipped weapon’s special action. On guard tools, hold K guards and releasing ends the guard; hold J+K, then release K uses a charged signature or Lance counter. Hold J for 0.35 seconds with the Staff to vault. G throws the grab-on vine at a beast within 9 steps: while holding on, two J presses tickle it soft, K yanks it 6 steps (into a tree or rock for a wall bonk) and Space lets go; it takes 20 seconds to coil back. R flicks a pebble from the slinger at the locked-on beast or straight ahead; three bring a flying Skreel down. Space rolls with a brief dodge window, and Tab locks on while the meadow has focus. Q/E step through the item ring and F uses the item, or gathers when a spot is in reach; hold Tab and tap Q/E to change the buddy’s order, or click the order under the Fluff bar; at camp, walk up to a shopkeeper (Bramble at the Forge, Old Mossback at the hunt board, Wren at the Beast Book, Pip at the Pantry) and press F to talk and open their place. Drag to orbit the camera and scroll to zoom. P/Escape pauses, M toggles sound. Touch has a joystick, action buttons (Vine and Sling among them), and a tappable item pouch. Blur and hiding the tab pause a hunt. Progress saves under grumble-hunt-v5 (v1, v2, v3 and v4 saves migrate, retaining equipment and counting old naps and scenes as cleared); reloading returns to camp with permanent progress intact.
Tests: npm run test:grumble-hunt checks deterministic combat, warning times, tool timing, armour, dizzy openings, rolls, items, buddy help, collisions, material rewards, unlocks, upgrades, camp returns, safe saves, Extra Grumpy, Enzo’s sniff, buddy orders, drop tables, gathering, Pantry crafting, the item ring, every item, snacks, weapon signatures and perks, armour set skills, v1/v2 save migration, the tired snooze, roars, weather, visitors and turf bonks, the vine, the slinger, weak spots, hazards, best times, fluff finches, zones, three-hit strings, quests, charms, Mighty beasts, Mighty armour, the two post-game beasts, the epilogue, Mighty best times, the Best of Friends finale and turf-bonk pages; it also runs the expansion content checks. npm run bot:grumble-hunt plays every hunt as both heroes across 12 seeds with all three buddy orders, using movement and action inputs crafting the cheapest affordable tree path, armour and fluffberries from earned materials, and requires all 120 beasts to be calmed; after each story campaign it calms all five Extra Grumpy beasts with each of the four post-game tools, then plays every quest on the quest board, Mighty beasts last. npm run test:grumble-hunt-weapons poses all twenty toys at every tier through idle, charge, swing and guard, and fails if any part sinks more than 0.2 units into a hero's head, ears or body, a paw reaches more than 0.45 from its shoulder, or posing allocates new resources. npm run test:e2e:grumble-hunt checks the arcade entry, desktop and touch input, camera, pause, camp, Pantry, gathering, traps, forge, book, saving, all five hunts, nap, victory, best times, roars, weather, the vine, hit numbers, hazards, finches, zone travel, reset, resource cleanup, and phone layouts, and saves screenshots under .checks/hunt/.
Docs: docs/grumble-hunt.md, the art inventories and prompts (meadow, icons and portraits, story, weapon icons), and the model and look-test reference.
/putt)Play: Storybook 3D mini golf. Putt as Dora or Enzo, or pick Both, taking turns for two players on one screen: each hole is played in turn, and whoever scored lower on the last hole putts first on the next. Two nine-hole courses: the sunny Clover Nine (par 24) and, once you have finished it, the dusk Lantern Nine (par 27) with lantern strings and fireflies. Holes are built from ramps, one-way ledges you can only drop off, windmills whose turning sails block the door, burrows that swallow the ball and roll it out of a paired burrow, dust-bath sand that slows it, ponds (a ball in the water costs a stroke and goes back to where it was putted from), bouncy mushrooms, hills and bowls, rolling hay bales and a sleepwalking Bristleback. A ball rolling faster than the cup can catch rattles over the rim. After six putts the ball is picked up and the hole scores 7. Every hole hides a golden acorn to roll through; the clubhouse counts them per course. The friend who isn't putting waits by the flag and lifts it as the ball drops. Practise a hole plays any open hole on its own. The clubhouse keeps each hole's best, aces, acorns and each course's best round.
Controls: Drag back from the ball and let go, like a slingshot: the drag direction aims and its length sets the power. The dotted line shows the direction and the first bounce; the power bar shows how hard. Or use ←/→ (or A/D) to aim and ↑/↓ (or W/S) for power, with Shift for fine steps, and Space or Enter to putt, skip the fly-over and move on from the scorecard. V or Whole hole shows the whole hole from above, M toggles sound and Escape pauses. A course round saves between putts under puttering-paws-run-v1 and carries on from the clubhouse; bests, aces, acorns and the Lantern unlock save under puttering-paws-v1.
Tests: npm run test:putt parses all eighteen holes, replays a recorded par-or-better line and an acorn line for every hole through the real game, plays a whole Clover round on those lines and checks it opens the Lantern Nine, and checks determinism, lip-outs, the pick-up after six putts, the pond penalty, windmill sails, random putts staying on the course, taking turns and the honour order, round saves and broken saves, and the profile. npm run bot:putt plays every hole eight times as a careful player who aims along the game's suggested line and misses each putt by up to 5° and 20% power, and fails if the average is more than one stroke from par; node tests/putt-bot.mjs --find searches for new par and acorn lines. npm run test:e2e:putt checks the arcade entry, the clubhouse, a practice hole played with the mouse and the keyboard, a saved round, pause, the phone layout and the draw-call budget.
Docs: docs/puttering-paws.md and the art list.
/roll)Play: A 3D roll-and-grow game. Dora pushes a fluffy dust ball round a fenced meadow while Enzo rides on top and calls out every catch. Anything with a footprint up to 0.6 of the ball's radius sticks to it, and the ball keeps 0.4 of each catch's volume, so it grows. Bigger things are in the way: a coral ring on the ground marks every one near the ball, and bumping one says what it is and the size it sticks at. The HUD names the next kind you'll grow into, and when the ball gets big enough for a new kind, a banner says so and every one nearby hops. Hitting something too big at more than 0.6 of top speed knocks up to three small things off; they can be rolled up again after a moment. Ladybirds, beetles, field mice, ducklings and ducks wander about, and run from a ball that could catch them, though never faster than it can roll. Each level hides three golden acorns, each worth 5 more seconds. Catches less than a second apart build a streak.
Four levels open in turn, each with a starting size, a goal and a clock: Dust Bath Corner (8 cm to 40 cm in 3 minutes), Clover Garden (32 cm to 1.6 m in 4 minutes), Hay Barn Yard (1.6 m to 8 m in 5½ minutes) and The Whole Meadow (6 m to 40 m in 5 minutes, from hay bales to barns and a ring of grassy hills). Reaching the goal opens the next level, and you keep rolling until the clock runs out: one star for the goal, two for 1.35 times it, three for 1.65 times. The Fluffbook records every kind of thing you have ever rolled up.
Controls: Press anywhere and drag, like a joystick: up rolls forward, sideways turns and edges the ball across. Or use ↑/↓ (or W/S) to roll and ←/→ (or A/D) to turn. Space skips the intro, Escape pauses and M toggles sound. Progress saves under fluff-roll-v1 and sound under fluff-roll-sound-v1.
Tests: npm run test:roll (also in npm test) compiles lib/roll-game.ts and runs tests/roll.mjs. It checks that layouts and replays repeat exactly, and covers sticking and bumping, the next-up hint and its call-out, streaks, golden acorns, critters wandering, running and still being caught, and the save. npm run bot:roll (also in npm test) plays every level four times as a busy player who steers round things too big to roll, backs out when wedged and gives up on a chase after 4 seconds. It fails unless the goal comes between 35% and 80% of the clock. npm run test:e2e:roll checks the arcade entry, the level menu, rolling with the keys and the joystick, the rings, pausing, finishing a level, the phone layout and the draw-call budget.
Docs: docs/fluff-roll.md.
/pawhaven)Play: An isometric town builder. Dora and Enzo found a chinchilla town meadow by meadow. Lay roads from the way in and put down home plots, and newcomers walk in and move into them. Every service runs on walkers: a water helper, a market seller, a dust bath helper, a healer, a storyteller, a musician and a fire watcher each walk the roads from their building and visit the homes they pass, and carts carry goods between farms, workshops, the granary and the storehouse. A home grows through seven levels, from Hay Nest to Grand Burrow, as its needs are met: water, then food, a dust bath, a second food with pottery and a healer, toys, stories and a pretty street, and finally three foods, bedding, music and a lovely street. A home that loses a need shrinks back after a month. Goods come in chains: hay, oats and berries from farms; sand milled into bath dust; clay into pottery, wood into toys and hay into bedding. The town hall collects acorns from every home each month and pays its workers, and cosiness rises with food, visits and fair taxes. From Clayfoot Brook on, roads to four neighbouring towns can be opened, and a caravan stops at the trading post every two months to sell what is above your line and buy up to it. The threats are gentle: fires that a fire watcher puts out (nobody is hurt, and rubble clears for free), curious foxes that fences, gates and a fox watch keep away, storms that leave puddles to sweep, and dry spells that slow farms away from water.
Seven campaign meadows open in turn, from Clover Landing (60 chinchillas and 10 Snug Burrows) to Pawhaven itself (900 chinchillas and 15 Grand Burrows), each opening new buildings, plus a Free Meadow with 5,000 acorns and no goals. A meadow is finished when every goal holds at once: one star, two for finishing within its set years, and three for doing that with cosiness 80 or more. Up to three towns are kept in save slots, and a town saves itself every month and when the page is hidden.
Controls: Drag the meadow to look around; scroll, pinch or +/− to zoom; arrow keys or WASD to pan. Pick a building from the bar at the bottom and tap the meadow to place it: roads and fences are laid by dragging a line, home plots, gardens and the clearing tool by dragging a box. With no tool picked, tapping a building shows what it holds and what a home needs next, and tapping a puddle sweeps it away. Space pauses, 1, 2 and 3 set the speed, R picks the road, X the clearing tool, Escape puts a tool down and M toggles sound. Progress saves under pawhaven-v1 and sound under pawhaven-sound-v1.
Tests: npm run test:pawhaven (also in npm test) compiles lib/pawhaven-game.ts and runs tests/pawhaven.mjs, which checks that maps and towns replay exactly and covers building rules, walkers, home levels, goods chains, trade, fire, foxes, weather, goals and the save. npm run bot:pawhaven (also in npm test) builds all seven campaign meadows from a fixed plan, zoning the later towns into a core of homes, rings of helpers and stores, and farm and works sides, and fails unless each is finished within its two-star years. npm run test:e2e:pawhaven checks the arcade entry, the meadow menu, the brief, laying roads and placing buildings with the mouse, saving and carrying on, finishing a meadow, trade routes, the save slots and the phone layout.
Docs: docs/pawhaven.md.
/disco)Play: A four-lane rhythm game. Dust bunnies roll down four lanes; press each lane as its bunny reaches the pad, on the beat, while Dora and Enzo dance either side and a crowd of chinchillas bobs at the front. Twelve original songs, each at its own venue with its own painting: Burrow Bop (96 BPM), Hay Loft Hop (112, swung), Moonpond Waltz (132, in 3/4), Pebble Street Funk (104), Snowpeak Gallop (140), Dust Storm Disco (124), Pebble Beach Sway (100), Lantern Lullaby (96), Clover Reel (138), Raindrop Bossa (112), Thunder Peak Rock (152) and Encore! (128), the finale, where Burrow Bop comes back as a disco anthem. Each song has Easy, Normal and Hard charts built from its own melody and drums: melody notes move left to right as the tune rises, drums fill the rests, long notes become holds, and Normal and Hard add two-note chords on the chorus downbeats. A press within 45 ms is Perfect (100 points), within 90 ms Great (70) and within 135 ms Good (40); a hold kept to the end is worth another 100. The combo multiplies points by up to 4 (from a 60 combo). Hits fill the sparkle meter; from half full, Dust Up doubles points for up to 16 beats. Misses, dropped holds and stray presses drain the groove meter, and the song stops if it empties, unless Never fail is on. A clear earns one star, an A two and an S (95% accuracy) three, and opens the next song. Settings hold note speed, timing offset and a Find my timing tap test. Bests, stars, full combos and settings are saved in localStorage (dust-disco-v1).
Controls: D F J K or ← ↓ ↑ → press the four lanes; keep a key down through a hold. Space for Dust Up. P or Escape pauses; R starts over from the pause menu or the results. On a phone, tap the lanes and use the Dust Up button. Gamepad: d-pad or X A Y B for the lanes, LB/RB for Dust Up, Start to pause.
Tests: npm run test:disco (also in npm test) compiles lib/disco-game.ts and runs tests/disco.mjs, which checks every song and chart (order, spacing per difficulty, lane use, Easy sparser than Normal sparser than Hard), the timing windows, holds, strays, scoring, grades, Dust Up, failing and never fail, unlocking and the save. npm run bot:disco (also in npm test) has a steady seeded player clear all thirty-six charts at 85% accuracy or better and a shakier one clear every Easy and Normal chart. Browser: npm run test:e2e:disco (tests/e2e/disco.mjs).
Docs: docs/dust-disco.md, and docs/dust-disco-art.md for the paintings.
/pebble)Play: A brick-breaker roguelite. Dora and Enzo hold up a hay bale and bounce a pebble into walls of crates, stout crates, acorn piles (acorns to catch and spend), ice (two hits), dust clouds (the pebble rolls through and slows), moss that grows back after 7 s, chain blocks that pop their eight neighbours, and sliding crates. A run follows a branching trail of 15 steps through the Meadow, Pebble Creek, Frosty Ridge and Badger Barn, with elite walls, acorn shops, rest stops, and bosses at steps 5, 10 and 15: Captain Caw, Frostwhisker and Big Bramble. Each boss sways side to side and rebuilds its rows. You start with 3 pebbles (up to 6). After every wall you keep one of three upgrades from 13, such as Split Pebble, Burr Ball, Snowball, Spark, Sticky Paws, Dust Up Shield, Wide Bale and Pinecone Pop, and four pairings give synergies. Dora has a wide, gentle bale (84 wide, pebble at 92% speed). Enzo has a narrower one (64 wide), but he can charge a spin shot that curves the pebble and hits harder. Where the pebble lands on the bale sets its angle, up to 62°. Hits trigger hit-stop, screen shake and a combo that pays 2 acorns for every 10 in a row.
Controls: Mouse or finger to steer the bale. Click, tap or Space to launch. A / D or ← / → also steer. Enzo holds Space, the mouse button or the SPIN button to charge his spin. Number keys pick on the map and in the reward, shop and rest screens. P or Esc pauses. Gamepads work too.
Tests: npm run test:pebble covers the map, the walls, swept collision without tunnelling, every block, upgrade and synergy, the shop, rest and bosses, a whole run, replays and saving. npm run bot:pebble: a careful bot must win at least half its runs as Dora and 40% as Enzo, and a sloppy one must win clearly fewer. npm run test:e2e:pebble is the browser test.
Docs: docs/pebble-pop.md, with the art list in docs/pebble-pop-art-brief.md.
/safari)Play: Dora or Enzo walk a 220 m Andes trail with a camera, 24 frames of film and six minutes of daylight. Shy animals run off if you hurry at them, so tiptoe, crouch in the tall grass and wait. A calm animal does more: a vicuña rolls in the dust, flamingos dance, a bear cub tumbles. Each photo is scored 0–5★ for size, framing (centre or thirds), sharpness (your steadiness against the animal's movement), facing, behaviour (rare ones are worth much more), friends in frame and golden light. At home the roll is developed and the best shots go into a field journal: 24 creatures, 82 behaviour slots, 22 of them rare. Journal stars unlock noon (12★), the Cloud Forest (30), a berry pouch (50), dusk (70), the Salt Flat Lagoon (95), a soft whistle (125), Condor Cliffs (155) and a camera trap (190) you set down and walk back to fetch.
Controls: A/D or ←/→ walk; 1/2/3 tiptoe, walk, hurry (hold Shift to tiptoe); S or ↓ crouch and hide; the mouse aims (or I/J/K/L); click, Space or Enter snaps; wheel or +/− zooms; B berries, V whistle, C camera trap; P pauses, H heads home. On touch: hold ◀ ▶, tap a pace and Hide, drag to aim, zoom slider and the 📸 button.
Tests: npm run test:safari (engine: creatures, trails, being noticed, scoring, tools, the day, journal, save), npm run bot:safari (a careful photographer fills 70 of 82 slots over 36 outings, reaching three quarters only on outing 22, at 3.88★ a photo, against a careless one's 1.88★; exact replays), npm run test:e2e:safari.
Docs: docs/snapshot-safari.md, art brief docs/snapshot-safari-art-brief.md.
/dungeon)Play: Mischievous dust bunnies have taken over the old burrow cellars. Dora (5 hearts) or Enzo (4 hearts, plus a dash of up to 3 tiles once a floor) tidies twelve floors on a turn-based grid, across the Root Cellar, the Pantry Tunnels and the Old Mine, with bosses on floors 4, 8 and 12: the Great Dust Bunny, the Mole Foreman and the Dust King. Every bunny marks on the floor what it will do next turn, and you can only be bopped on a marked tile. Walk into a bunny to bop it and knock it back a tile; knock it into walls, crates or friends to make it dizzy, or into pits and raised prickles to poof it at once. Crates fill pits, switches raise and lower every prickle trap, bellows plates puff things away, and keys open treasure rooms. Five tools carry up to 3 charges each (feather duster, pebble sling, bubble soap, lantern and acorn), and you pick one of three perks after floors 2, 4, 6, 8 and 10. Linger more than 120 turns on a floor and a new dust bunny tumbles out every 10 turns. The Daily dust-up gives everyone the same cellars each day. Runs save every turn and resume exactly.
Controls: Arrows, WASD or the numpad move and bop; Space waits; 1–5 use a tool (aimed tools then take a direction, Esc cancels); Q or Shift + arrow dashes; 1–3 pick a perk; P pauses. With a mouse or touch, tap a tile next to you, or tap yourself to wait. Phones get an on-screen pad.
Tests: npm run test:dungeon checks the room templates, 1440 generated floors, every push, trap, tool, boss and perk, fairness (you are only ever bopped on marked tiles), replays and saves. npm run bot:dungeon checks that a careful bot wins at least 60% of runs, a bot without look-ahead wins far less, and a random walker never wins. npm run test:e2e:dungeon covers the menu, keys, tools, pause, save and resume, the daily seed and the phone layout.
Docs: docs/dust-bunny-dungeon.md, art brief docs/dust-bunny-dungeon-art-brief.md.
/command)Play: A cosy real-time strategy game for three sides: Dora and Enzo's Burrow Colony of chinchillas, Marlo's Ringtail Guild of raccoons and the Clockwork Hive of wind-up beetles. Gather hay and glimmer, put up buildings, train an army and send it out; a unit bumped to nothing is poofed home dizzy and a broken building is tidied away. The Colony tunnels between mounds and mends units in Dust Baths; the Guild salvages 15% of each rival poofed nearby, sets Honey Snares and rolls its workshop somewhere new; the Hive's beetles run down to half pace away from Spring Towers but mend their own shells, and the Queen calls out more beetles. There is a ten-mission story campaign with briefings, talk during play, heroes and three stars per mission, and skirmishes against an Easy, Normal or Hard computer on five maps.
Controls: Drag a box or click to pick (double-click picks every one of that kind on screen); right-click walks, gathers or bumps, and Shift queues orders. A attack-moves, P patrols, H holds, S stops, M moves, B builds, F uses an ability and T tunnels. Ctrl+1–9 (or Alt+1–9) sets a group and 1–9 picks it. The arrow keys or the screen's edges look around and the wheel zooms; Space looks at the last alert, Backspace looks home, . picks the next idle gatherer and Esc pauses. On touch, tap to pick and tap to send; drag looks around (or draws a box once the ▢ button is on) and pinch zooms.
Tests: npm run test:command checks the engine: the sides, the maps, gathering, building, training, combat, pathfinding, fog, every ability, the computer players, each mission's goals, replays and saving. npm run bot:command plays every pairing of sides on every map, Hard against Easy, and a pilot through all ten missions. npm run test:e2e:command covers the browser.
Docs: docs/burrow-command.md, art brief docs/burrow-command-art-brief.md.
/hayloft)Play: Dora and Enzo start with one hay meadow and grow it into a valley of twelve buildings, from the Hay Meadow and the Dust Bath Spa to the Moonlight Observatory and the Comet Skyship Dock. Buy levels, which pay ×2 to ×5 at milestones (10, 25, 50, 100, 150 … 1000); valley festivals double everything when every building reaches 10, 25, 50 and so on. Each building has a helper who runs it on their own, also while you are away, and brings a perk; there are upgrades too. Fifty taps make a Fluff Burst. Visitors fly by every 75–150 s: catch them for a ×7 Golden Acorn, coins, blueprints, sunberries or a burst. Every 6–10 minutes a 10-second Twig Shower can give a boost of up to ×6. Teams go on real-time trips of 15 minutes to 8 hours and bring back finds and ten keepsakes; sixteen research studies run on blueprints and real time; a daily gift runs in a seven-day round; and 59 achievements give +3% each. Time away counts for 8 hours at first, and upgrades raise that to 38. Building the Comet Skyship Dock opens the Great Migration, which gives Stardust for a Star Tree and moves the colony through five valleys, each with a twist: Meadowvale, Snowdrift Valley, Pebble Cove, Glowcap Hollow and Cloudreach Isles. At 200K Stardust you can name a Constellation for Moonstones that last for good.
Controls: Tap the valley for coins and fluff, tap a building marked TAP! to run it, tap visitors to catch them, and drag to scroll. Six bottom tabs: Build (×1/×10/×100/MAX), Helpers, Research, Trips, Stars and More. Keys: Space taps, 1–0, - and = buy buildings, B sets the buy amount, C catches a visitor, M mutes, and P or Esc pauses.
Tests: npm run test:hayloft runs 1009 engine checks, including that an hour away pays the same as an hour online, the offline cap, the prestige maths, saves and the number range. npm run bot:hayloft runs active, commuter and idle players over a simulated day and asserts that the first migration comes 45–90 minutes into active play and that there is never a wait of more than five minutes. npm run test:e2e:hayloft runs the browser test.
Docs: docs/hayloft-tycoon.md, art brief docs/hayloft-tycoon-art-brief.md.
/parade)Play: A line of baby chinchilla kits pops out of a burrow, one every 1.2 to 4.4 seconds, and marches on. They walk a pixel a tick at 25 ticks a second, hop steps of up to 5 pixels and turn round at anything taller. Falls of up to 56 pixels are safe; from any higher a kit gets dizzy and Mum carries it home. Hand out a limited number of eight jobs: the Stopper turns others round (any other job sets it free), the Digger digs a shaft 9 pixels wide straight down, the Tunneller digs a kit-tall tunnel sideways, the Builder lays a 12-bale hay stair 24 pixels high and 48 long, the Climber climbs walls, the Glider floats down any drop, the Bouncer makes a dust puff that springs every kit about 50 pixels up, and the Hugger clears a circle of earth 13 pixels round. Bring home the target number of kits before the gentle timer runs out. There are 30 handmade levels in four worlds: Clover Meadow (one-way hay), The Big Pantry (hay belts), Pebble Cave (undiggable pebble stone and a pond with drifting lily pads) and Moonlit Rooftops (seesaws that tip by weight and chimney fans that float kits up). Each level gives three stars: one for the target, one for jobs at or under par and one for everyone home by the par time; clearing a level opens the next. Progress saves in kit-parade-v1.
Controls: Pick a job with its button or keys 1–8, then click a kit; hovering shows who would get it. On a phone, tap a job, then tap near a kit, and drag to look around big levels. Space, P or Esc pause, F fast-forwards 3×, and R in the pause menu calls everyone home and restarts. Arrow keys or WASD pan. There are buttons for pause, fast-forward, restart and sound.
Tests: npm run test:parade runs 466 engine checks: levels, every job and terrain rule, falls, the exit, stars, determinism and saves. npm run bot:parade replays each level's stored solution for three stars, checks that idling fails every level but the first, that removing any key job fails the level, and that clicks a few ticks early or late still clear at least 85% of runs. npm run test:e2e:parade is the browser suite.
Docs: docs/kit-parade.md, art brief docs/kit-parade-art-brief.md.
/prism)Play: A light-beam puzzle on a night board of at most 9 × 7 tiles. Moon windows shine beams of moonlight, and Dora and Enzo steer them with pieces from a tray to light every paper lantern without waking the sleeping kits. Light mixes like real light: Rose, Leaf and Sky combine into Honey (rose and leaf), Plum (rose and sky), Mint (leaf and sky) and Moonwhite (all three). A lantern lights only when the colours reaching it make exactly its colour; too much colour leaves it "too bright". A Mirror bounces light round a corner from either face, a Crystal pane lets light through and bounces a copy, Candy glass keeps only its own colour (and stops a beam with none of it), and a Prism fans light out: rose turns left, leaf goes straight on and sky turns right. Rocks stop light, nothing stands on clover, light on a kit wakes it, and a beam into a burrow leaves its partner going the same way. There are 32 handmade levels in four chapters: Meadow Lanterns (mirrors and kits), Candy Glass (tinting and mixing), Crystal Grotto (panes and prisms) and Festival Night (burrows, ending with a board of seven lanterns in every colour). Each level gives three stars: one for lighting it, one for catching the firefly in the winning arrangement, and one for using no more tray pieces than par, the fewest the built-in solver needs. Solving a level opens the next, and lighting all 32 opens the Festival. Progress saves in prism-paws-v1.
Controls: Drag a piece from the tray onto open grass, or tap a tray piece and then a tile. Tap a piece on the board to turn it (fixed mirrors and panes with a gold arrow turn too), drag it to another tile to move it, or drag it off the board to pick it up. Arrow keys move a tile cursor, 1–9 pick a tray piece, Enter or Space place or turn, Backspace or Delete pick up, Z undoes, R resets and H shows a hint: a glowing ghost of where the next piece goes. There are buttons for undo, reset, hint, sound and the level list.
Tests: npm run test:prism runs 765 engine checks: every piece's optics in every direction, colour mixing, the too-bright rule, kits, burrows, loops, undo and reset, hints, stars and saves, and for every level that it is not won at the start, that the solver's par matches, that nothing wins with fewer pieces, that the firefly can be caught at par, and that the solution wins three stars through the real actions. It prints each level's par, tray and solve time. npm run test:e2e:prism is the browser suite.
Docs: docs/prism-paws.md, art brief docs/prism-paws-art-brief.md.
/seedstorm)Play: A cosy vertical shoot-'em-up. The Grumble Storm is blowing the valley's washing away, so Dora and Enzo ride dandelion-seed gliders up through five skies: Meadow Morning, Orchard Breeze, Thunderhead, Moonlit Mist and the Eye of the Storm. Each stage has waves of storm critters (bumbles, kites, beetles, sprouts, moths and wisps), a mid-boss and a boss with three or four named attacks, each with its own health bar and timer: Gale the Magpie, Crabapple Crow, Rumble the thundercloud, Madame Hoot and finally the Grumble Storm. Only a 2.5-unit dot at the pilot's chest can be hit. Dora fires a Petal Spread (3 to 9 petals) and flies faster; Enzo fires a Pebble Lance (2 to 5 pebbles that pierce small critters); the other flies alongside as a wingmate with homing seeds. Passing close to bullets grazes them, which fills the Bloom meter; a Bloom sweeps a ring out from the pilot that turns every bullet into a seed, and a Bloom within 12 ticks of a hit cancels it. Seeds score 10 × the Breeze multiplier (up to ×5 from chained kills) and fill a purse for the seed shop between stages (Shot Power, Wingmate Wings, Extra Heart, Bloom Pouch, Magnet Paws). Beating a boss attack before its timer without being hit earns a Clear Sky bonus. Three difficulties: Breezy (5 hearts, slower and sparser bullets), Gusty (3 hearts) and Stormy (3 hearts, more and faster bullets, no continues). Breezy and Gusty offer a continue at game over, which restarts the score from zero. Bosses chat before each fight and make friends after it, and clearing stage 5 plays an ending and a cast roll. Any stage reached can be practised alone. The top 5 scores per difficulty, the stages reached and the settings save in seedstorm-v1.
Controls: Arrow keys or WASD fly, Shift focuses (slower, tighter shots, hitbox shown), X, Space or K Bloom, Esc or P pause. Shots fire by themselves. On a touch screen, drag anywhere to fly (the glider keeps its offset from your finger), tap with a second finger or the 🌸 button to Bloom, and use the 🎯 button to toggle focus. In chats, tap or press Z, Enter or Space to go on and Esc to skip; in the shop, 1–5 buy and Enter flies on. The game pauses when the tab is hidden.
Tests: npm run test:seedstorm runs 207 engine checks: exact replays, movement and focus, shots and piercing, the hitbox and graze edges, Bloom and the last-gasp window, game over and continues, pool caps under the busiest attacks on every difficulty, seeds, magnets and Breeze, the shop, every stage's timeline, boss phases, chats and Clear Sky, mid-bosses, practice, difficulty scaling and saving. npm run bot:seedstorm runs a dodging bot that plays nearby bullets forward 22 ticks; it must clear all five stages on Breezy and Gusty for at least 4 of 5 seeds, and a pilot who stands still must lose on Gusty before the end of stage 2. A human-like pilot (deciding every 8–9 ticks, with a small seeded steering wobble and no last-gasp Blooms) must clear Breezy losing at most 2 hearts and Gusty's stage 1 losing at most 1 (npm test runs a quick version). npm run test:e2e:seedstorm is the browser suite.
Docs: docs/seedstorm.md, art brief docs/seedstorm-art-brief.md.
/driftwood)Play: A cosy sailing adventure. The post boat on Lake Whisker has sprung a leak, so Dora and Enzo patch up an old driftwood dinghy and take over Granny Tuft's round: twenty-four story letters between ten island villages, each unlocked by the ones before, get every island back in touch for the Lantern Regatta. The wind drives the boat. Nothing sails inside the no-go zone (42° either side of the wind, 34° with the deep keel), a beam reach is fastest, and going upwind means tacking. The wind mostly blows from the west-south-west, swings up to 115° either side, and announces its shifts. Weather is Calm, Breezy, Gusty or a rain squall; currents carry the boat, reeds slow it to 42%, and three hard bumps on rocks or shores scuff the hull until Enzo patches it. A day lasts 6 real minutes; at night and in fog you see less, and the chart fills in as you sail. The bag holds 3 items (up to 6 with mail crates). Letters pay 5 shells and parcels 7, with bonuses for heavy, express on time and unjostled fragile parcels. After letter 4, side post appears between the islands and Tamsin's boatyard sells a bigger sail, a deep keel, mail crates, a lantern, a spyglass and a sturdy hull. 20 hidden shells and 6 message bottles are tucked round the lake. The voyage saves every time you tie up.
Controls: A/D or ←/→ steer (tap to nudge, hold to turn), E or Space ties up within reach of a jetty, X or Shift brakes, M opens the chart, Esc or P pause. At a jetty, Space or Enter casts off. With manual trim on, W/S or ↑/↓ haul and ease the sail. On a touch screen, slide on the wheel at the bottom left to steer; the buttons on the right brake, tie up and trim.
Tests: npm run test:driftwood runs 29 engine checks: the sailing polar and no-go zone, tacking, steering, collisions (no tunnelling through rocks, no gaps to wedge into, no current that pins the boat on a rock, sliding along a shore with one soft bump), currents and reeds, docking (and not re-docking on a held key, and casting off toward open water), the bag, heavy and fragile parcels, scuffs and patching, express times (kept through the regatta's jump to dusk), the story's unlocks, side post, that every jetty, hidden shell and bottle can be reached by water, pickups, the chart, saves, exact replays, the weather, how far you can see, and the boatyard. npm run bot:driftwood sails the whole story to the Lantern Regatta for three weather seeds; npm test runs a quick version. npm run test:e2e:driftwood runs 11 browser checks.
Docs: docs/driftwood-post.md, art brief docs/driftwood-post-art-brief.md.
/ropeclimb)Play: A side-on physics climber for one player or two. Dora and Enzo are tied together by a short, stretchy rope (130 units, about eight times their height) and climb a giant barn tower from the cellar to the weathervane at dawn, through six sections of two floors each: the Cellar, the Stables, the Hayloft, the Rafters, the Bell Loft and the Rooftop. Hold to charge a leap and let go to spring (a full 0.75 s charge leaps about eight times their height), aim with left or right, and grip posts, hay stacks and beams with your claws. Whoever isn't moving holds on: a missed leap is caught by the rope, and the dangling climber can steer to swing like a pendulum, grab something, or be hauled up by the partner. Holding a hanging partner too long tires the claws. Falls cost height, never lives. The hazards are crumbling straw, hay bales sliding along beams, knothole gusts, swinging lanterns, the bell and three sleepy owls who wake at noise (hard landings, big leaps, the rope snapping taut, the bell) and flap off anyone not gripping. Rolling together in the dust-bath tub on every floor saves the climb. For replays there are a speedrun clock, fewest-falls medals (Sure-Footed, Steady Paws, Hay Hopper), 30 acorn charms, and Hard Knot (a 90-unit rope, no saves and no hay nets), which opens after the first finish.
Controls: In 1 player, ←/→ or A/D aim and walk, hold Space (or Enter or J) to charge and let go to leap, ↓, S or Shift let go (with Auto claws on, the default) or grip (with it off), ↑ or W hauls the rope or climbs a post, Tab, Q or E swap climbers, and Esc or P pause. In 2 players on one keyboard, Dora uses A/D, Space, S and W, and Enzo uses ←/→, Enter, ↓ and ↑. The first two gamepads work too: the stick aims, Ⓐ leaps, Ⓑ or a trigger grips or lets go, d-pad ↑ hauls, Ⓨ or a bumper swaps, and Start pauses. On a touch screen, ◀ ▶ aim, the big button holds to charge a leap, and smaller buttons haul, grip or let go, and swap. The game pauses when the tab is hidden or the window loses focus.
Tests: npm run test:ropeclimb runs 159 engine checks: exact replays (1 and 2 players, and copies of a game), leaping and its charge, the rope’s length, links, pendulum swing and pumping, bending round a hatch edge, gripping posts, beams and the auto-bracing partner, catches, hauling, tired claws, the rope paying out, drags in 2 players, falls and hard landings, every hazard (straw, bales, gusts, lanterns, owls and noise, the bell), acorns, tubs and checkpoints, Hard Knot, swapping, reaching the top, medals, and saves (corrupt ones, clamping, resuming, records). npm run bot:ropeclimb climbs every floor from its tub with a human-like bot that searches ahead, plays with a wobble on its charge and aim, and replans; it checks that standing still climbs nothing and that each floor takes under 8 minutes (--quick, floors 1, 5 and 9, runs in npm test). npm run test:e2e:ropeclimb checks the browser: the menu, a real charged leap, swapping, pausing by key and on a hidden tab, a tub saving the climb, acorns, continuing after a reload, the ending and Hard Knot opening, a corrupt save, two players on one keyboard, and phones held either way with the touch buttons.
Docs: docs/ropeclimb.md, art brief docs/ropeclimb-art-brief.md.
/echo)Play: A side-on time-loop puzzle platformer. Dora and Enzo find their way home through thirty burrow rooms in five chapters of six: the Root Cellar, Mushroom Hollow, the Underground Brook, the Crystal Gallery and Home Burrow. In each room one of them records a run while a candle burns (12 to 22 seconds); then time rewinds and the other plays live beside a teal echo that repeats the recording tick for tick. The echo presses plates, rides lifts, flips seesaws, shoves crates (Enzo's), lights glow-moss and can be stood on (Dora's echo is springy: a jump off her head starts a quarter faster), but it never gets pushed or blocked, and it waits where its recording ended. Reach the burrow door to clear the room. Dora is light and springy and fits one-tile kit tunnels, but is too light for heavy plates and seesaws; Enzo pushes crates, holds heavy plates and flips seesaws. The ideas arrive a few at a time: plates and doors, the head boost and kit tunnels, then crates, heavy plates and doors that need two plates or stay open for a few seconds, then lifts and fans (wind lifts Dora and only slows Enzo), then seesaws and crumbling ledges with Enzo recording first, then glow-moss, which is only solid near the echo. Room 30, Home, uses most of them at once. Each room has three stars: the clear, the golden seed (either climber can pick it up, the echo too) and clearing within par loops (the recording counts as one). Clearing a room opens the next two; there is a free hint in every room, a room list with stars, and an ending.
Controls: ←/→ or A/D move, Space, ↑ or W jump (hold for a higher jump), R stops the recording early or, while live, tries again with the same echo, Shift+R throws the echo away and records again, H shows the hint, and Esc or P pause. Gamepads: the stick or d-pad moves, Ⓐ jumps, Ⓧ is R, Ⓨ is Shift+R, and Start pauses. On a touch screen ◀ ▶ and a jump button sit below the room when the phone is upright and beside it when it is sideways, with ⟲ (stop or retry) and ⟲⟲ (record again). The game pauses when the tab is hidden or the window loses focus.
Tests: npm run test:echo runs 683 engine checks: the thirty rooms and their maps, input recordings, the record, rewind and live loop, the echo's exact replay and where it waits afterwards, retries and re-recording, plates, heavy plates and doors that hold, crates, kit tunnels, standing on the echo and the head boost, lifts, seesaws, fans, crumbling ledges, glow-moss, coyote time, the jump buffer and short hops, seeds and stars, and saves (corrupt ones, unlocking, keeping the best). npm run bot:echo plays every room from stored inputs (tests/echo-solutions.json): the main solution clears within par, the seed solution clears with the seed, idling clears nothing, and with an empty recording the second climber can't clear alone (a breadth-first search over their moves); npm test runs a quick version without the search. npm run test:e2e:echo checks the browser: the menu, room 1 through both loops with real keys, the rewind, re-recording, the room list, saving across a reload, a corrupt save, pausing, and phones held either way with the touch buttons.
Docs: docs/echo-burrow.md, art brief docs/echo-burrow-art-brief.md.
npm run typecheck
npm test
npm run build
npm run test:e2e # optional; needs `npm run dev` running and `npm i -D playwright`
npm run test:e2e:newest # the recent games and interrupted-input / progress regressions
npm test compiles the game engines and runs each game's deterministic suite. It also runs tests/readme.mjs, which fails if the Games table and Game guides above drift from the arcade menu in app/page.tsx.
Run npm test before the browser suites to generate the compiled engines they use. tests/e2e/newest-quality.mjs adds checks for cancelled Poof Panic gestures and focus-loss pausing, Barrage controls released between turns and native keyboard slider controls, and Tactics and Barrage progress saved before the final animation finishes. It also checks that a Tactics run reward is banked once when resumed and that Summit Shuffle explains its separate hero card pools. tests/e2e/older-quality.mjs does the same for Chinchilla Clash, Hay Maze Defence and Chinchillas vs Zombies: a result saved in the frame the game ends, a cancelled Clash card drag, pausing when the tab is hidden, and portrait and landscape layouts from 320 to 844 pixels wide. npm run test:e2e:older runs it with those three games' own suites.
The planned Whisker Ware artwork package is ready for its game implementation: docs/whisker-ware-integration.md documents the loader API and scene wiring. npm run test:whisker-ware-art checks its loader/assets/crops (also in npm test); npm run test:e2e:whisker-ware-art starts an isolated Playwright art harness and needs no dev server. It is not a playable cabinet yet, so the game count remains 34.
app/<route>/page.tsx and the rules in a deterministic engine at lib/<name>-game.ts.GAMES in app/page.tsx. Update the hardcoded game count in app/page.tsx (eyebrow, headline, lede), the metadata description in app/layout.tsx, the /Fifty-four ways/ assertion in tests/e2e/dust-bath.mjs, the 54-card assertions in tests/e2e/arcade-navigation.mjs, tests/e2e/classic-pit.mjs, tests/e2e/dust-bath.mjs, tests/e2e/mountain-retreat.mjs, tests/e2e/mountain-retreat-theme.mjs, tests/e2e/paw-buster.mjs, tests/e2e/fluff-forge.mjs, tests/e2e/chinchilla-clash.mjs, tests/e2e/hay-maze.mjs, tests/e2e/chinchillas-vs-zombies.mjs, tests/e2e/scribble.mjs, tests/e2e/burrow-tactics.mjs, tests/e2e/burrow-barrage.mjs, tests/e2e/summit-shuffle.mjs, tests/e2e/poof-panic.mjs, tests/e2e/burrow-express.mjs, tests/e2e/moonlight.mjs, tests/e2e/pinball.mjs, tests/e2e/detectives.mjs, tests/e2e/frontier.mjs, tests/e2e/moonpond.mjs, tests/e2e/saga.mjs, tests/e2e/acorn-hand.mjs, and the route list in tests/e2e/panel-contrast.mjs. Past forty-nine games, add the next number word to the list in tests/readme.mjs.tests/<name>.mjs and wire it into npm test in package.json.### NN · Title (/route) guide with Play, Controls, Tests and Docs. Both the table and the guides follow arcade-menu order. npm test fails until they match.The arcade is live at https://chinchillas.jason.engineering. It runs on Cloudflare Workers as a Worker named dora-enzo-arcade.
npm run build (vinext) produces the Worker in dist/: the server code in dist/server/ and the static assets in dist/client/. Every game runs in the browser, so the Worker needs no database, storage or app secrets. GitHub Pages cannot serve this build as-is.
Every push to main deploys automatically. The deploy job in .github/workflows/ci.yml runs after the typecheck, tests and build pass, then rebuilds and runs npm run deploy. Pull requests and pushes to other branches are checked but never deployed. Deploys run one at a time, in push order, and each replaces the live version.
The job needs two repository secrets, under Settings → Secrets and variables → Actions:
CLOUDFLARE_ACCOUNT_ID: the ID of the Cloudflare account that owns the Worker.CLOUDFLARE_API_TOKEN: a Cloudflare API token. Create it in the Cloudflare dashboard under My Profile → API Tokens → Create Token with the Edit Cloudflare Workers template, limited to that account and the jason.engineering zone. Store it with gh secret set CLOUDFLARE_API_TOKEN, which prompts for the value so it stays out of your shell history.Wrangler, Cloudflare's CLI, is already a dev dependency.
Install dependencies and build:
npm ci
npm run build
Optionally, preview the production build locally at http://localhost:8787:
npm start
Log in to Cloudflare. This opens a browser window, and you only need to do it once per machine:
npx wrangler login
Deploy:
npm run deploy
npm run deploy uploads dist/ to the dora-enzo-arcade Worker and attaches chinchillas.jason.engineering as its custom domain. On the first deploy, Wrangler creates the DNS record and HTTPS certificate. The domain must be a zone on the same Cloudflare account. To deploy somewhere else, change --name and --domain in the deploy script in package.json.
To check the upload without publishing, run npx wrangler deploy --config dist/server/wrangler.json --dry-run; it needs no login. The current build uploads about 1.8 MB (about 514 KB gzipped).
The project was originally hosted on OpenAI Sites, linked by .openai/hosting.json. Keep that file if you want to continue that deployment. It does not affect Cloudflare deploys.
GitHub Actions runs npm ci, npm run typecheck, npm test and npm run build on every push and pull request (.github/workflows/ci.yml). Pushes to main that pass are then deployed (see Automatic deploys above). The browser suites in tests/e2e/ need a running dev server and a local Playwright install, so they are run manually rather than in CI.
HANDOFF.md records where the work stands, engine notes for the newest games and ideas for what to do next. CLAUDE.md and AGENTS.md hold the project guide and house rules for coding agents.
Released under the MIT License.