尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Authentication Restful with MongoDB
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A standalone canvas experience at https://imranakbarin.github.io/iakdevs/.
A visit without a link opens Today (assets/home.js): a card per experience with a small moving preview (Pip running through his kingdom, World art cycling through traditions, the touring car on the road, the garden, the reading nook) and what you have done there, read from what each experience already keeps on the device: Pip's best on today's world and the sights found, Road trip postcards collected, whether you have raked the garden. Tap a card to step in; ⌂ Today in the experience menu (and in Cozy Worlds' own menu) brings you back, and Esc or ✕ returns to where you were. The scene behind pauses while it is open. Links to an experience still go straight there; #today opens it.
assets/art-*-living.webp (see assets/living-art-notes.md).#pip-run).#<style>-<seed> opens a style at a seed, e.g. #gond-12345, #warli-7. Prefix painting- for the painted panorama (#painting-kangra-3). #zen-…, #road-… and #cozy-… open the other modes; #today (or no hash) opens the home screen. Seeds vary the starting layout; they do not regenerate painted panoramas. Editing the hash in an open tab loads that world.
assets/gond-benchmark.js replaces the Gond chunk grammar with a composition-first layout: one hero tree per chapter, an optional support tree whose placement is planned from a separate seeded stream so neighbouring chunks never collide, one animal story, rooted bank plants and patterned distant rises that run down behind the bank.
assets/creature-mind.js gives live-art creatures simple intentions. wander alternates rests (with an idle action) and purposeful walks between seeded waypoints; flight tours perches for birds and butterflies. Both are pure functions of time and seed, so paused redraws stay pixel-identical and evicted chunks rebuild exactly; gait phase follows distance actually covered, so nothing moonwalks.
add() now returns).assets/art-presence.js lets live art respond to the viewer without new controls; every response fades within a few seconds and reduced motion disables it.
Inputs are recorded on the scene clock, so paused redraws remain pixel-identical.
assets/art-ambience.js adds slow mist veils, cloud shadows and water glints to the painterly live-art styles (Kangra, Japan, China, Mexico). Mushroom Island's assets/mushroom-life.js animates the painted kingdom (mist, lamps, townsfolk, flocks, light shafts) and gives Pip's run star seeds to collect, a fairy companion and butterflies that lift off as he passes.
assets/art-wonders.js cuts each endless live landscape into long stretches (about a minute and a half of drifting). Most hold one rare sight, seeded and never the same twice in a row: a migrating flock, kites on the wind (strings down to the land), or a passing shower that leaves a rainbow once the cloud has gone by; fireflies when the theme is dark; petals on the wind in Japan, rising lanterns in China and papel picado garlands in Mexico. Each is drawn in the style's own ink and palette (Warli in white line), as a pure function of seed, stretch and scene time, so a paused redraw is unchanged. A quiet italic line under the style's name says what is passing. tests/art-wonders.test.cjs checks the no-repeat rule, every kind per style and deterministic drawing.
Drag across the sand to rake it: a five-tine rake follows your finger or pointer, carved with the same ridges and troughs as the steel ball's trail (a quiet hint says so on the first visit), and the garden renews with the next pattern as usual. A tap on the water still ripples it. About once a minute a small bird lands on the rim of the sand bed, hops in leaving tiny footprints, pecks and flies off (tap near it and it leaves sooner); by day a dragonfly hovers and darts over the lily pads. Raking by hand has its own sand hiss when sound is on.
assets/road-journey.js turns the drive into a trip between named places (original names). Each stretch heads for a town in the next landscape and the status line counts down to it ("Saltwind Bay in 1.2 km"). Arriving, as the new landscape takes over, shows a postcard: the town, how far you came from the last one and the weather on the way, stamped into a trip log kept on this device ("Stamp 6 of 20"). With a fixed place, towns come every stretch within it. It only reads the road's state.
assets/world-sound.js gives World art, Road trip and Zen garden sound, synthesized with WebAudio (no audio files). Road trip: an engine that follows the speed and pulls harder when overtaking, road and wind noise, rain, night crickets, waves on the coast, birds in the forest, a far horn in the city and a whoosh as an oncoming car passes. Zen garden: sand hissing under the steel ball (it follows the ball's speed), the bamboo fountain, a splash where you tap the pond, now and then a wind chime or a singing bowl, crickets and frogs by moonlight. World art: river and wind beds, birds and insects, and every so often a short phrase in a voice suited to the tradition (a breathy flute for the Indian styles, plucked strings for Japan and China, a guitar-like pluck for Mexico). Off by default: ♪ in the bar (or M); the choice is remembered and resumes on the first tap. Cozy Worlds, Mushroom Island and Pip Run keep their own sound, so the button hides there. tests/world-sound.test.cjs covers both modules.
pip-run.html + assets/pip-run.js (~40 KB of source, 13 KB gzipped) is a real game rather than an animation:
Hero feel: the painted Pip with classic platformer feel: squash and stretch, a braced skid pose, a forward lean at speed and distinct take-off/apex/landing poses.
Golden Sprout: some star blocks release a sprout that slides and drops; catching it makes Pip bigger. Big Pip smashes bricks from below and takes one hit (shrinking, with a flicker) instead of tumbling. The planner values bumping star blocks and predicts a sprout's slide-and-drop, so the demo grows in most runs.
Biomes with their own rules (release 3): regions of ~288 m run Mushroom Meadow, then Frost Ridge, Sky Isles and Glow Caves in a seeded order, with Meadow between cycles. Rules live in the shared physics, so the planner adapts without special cases: ice has low friction and acceleration (long skids), the sky has lighter gravity and gusting wind that drifts Pip, and caves are dark, lit only by Pip, crystals, seeds and star blocks (the thought lines glow above the dark). Each biome has its own terrain grammar (floating two-tile islands and spring pads in the sky; a jagged roof, guaranteed headroom and crystals in the caves) and its own tiles, parallax backdrop and weather. Gap tables are computed per biome from the take-off speed a short run-up can build, under a worst-case headwind. The next region's landmark (Mushroom Gate, Frost Spire, Sky Harbor, Crystal Heart) rises on the horizon and grows as Pip approaches, the HUD counts down to it, and a title card announces each region.
Director (viewers vs. the AI): while the demo plays, pick a tool (brick, creature, spring; keys 1 2 3 or the round buttons) and place it just ahead of Pip; 3 charges recharge every 6 s. The planner referees each placement by imagining Pip's futures with it: if every future tumbles, or no surviving future gets past a spot that one could before (a trap), it is refused as "Too cruel". Accepted placements force a visible replan and score: a reroute earns 20–100, a tumble on a fair trap "Gotcha! +150", and Pip using your spring +40. Springs are part of the shared physics, so the AI can use them.
A painted world (release 9): the ground is painted to match Pip rather than built from flat tiles. Earth, stone and stumps never change in play, so each chunk's are painted once into one canvas (paintChunk): soil that darkens with depth, strata, pebbles and roots, a grass cap with blades, tufts and flowers that rounds over cliff edges, faces lit from the upper left and shaded on the right, and per-biome dressing (snow lumps, sparkle and icicles; cloud billows with gold veins; glowing moss, glowcaps and stalactites). Stone blocks are bevelled and mossy, each a little different, and columns are tree stumps (snow-capped on the ridge, crystal pillars in the caves). Painted trees, rocks and the odd cottage from assets/road-painted-props.webp stand behind the ground on wide flat stretches, graded into each biome. Frost Ridge and Sky Isles get painted backdrops from (a snowy range with a pine ridge in front; the world far below the clouds), with drifting cumulus and islands that carry trees; the caves get light shafts and glowing crystal clusters. Bricks, star blocks, springs and creatures are re-painted with bevels, gloss, rim light and soft shadows, and a soft sun bloom and vignette (painted once, small, per biome) tie it together. Collision still reads the tile grid, so physics, the planner and ghosts are unchanged. Frame cost stays at the old level: only rows that hold something are kept, and the light is one cached overlay.
World tiles are 600 world units wide and cached per chunk. Tiles are blitted only up to the next tile's origin so translucent paint (hills, paper grain) never doubles along a seam. Bump the ?v= query on a script tag when its file changes.
assets/road-painted-mountains.webpSmoother motion (release 34): the simulation runs at 40 ticks a second and screens draw 60 or 120 frames. Pip's position, the camera and the creatures were already drawn between ticks, but much was not: Pip's stride and squash, the creatures' own clocks (a Mossbud's waddle, a Puddlehop's croak), every particle (dust, sparks, petals, splashes, fluff), and about two dozen drawing animations that read the tick counter (glows, bobbing seeds, the sea's glitter and surf, swaying grass, flickering lamps). They moved in the uneven steps of 40 a second on a faster screen, about three frames on and two off, and that read as stutter. They now all animate from a clock that runs between ticks. Instant replays, played at half speed, are blended between recorded frames too, instead of holding each one. On an iPhone in Low Power Mode, Safari draws at most 30 frames a second, which no page can get past.
Clearer instant replays (release 33): a replay of a close call now shows Pip solid. If he had just respawned he used to blink, and on the blink frames only the see-through ghost of your best run was left, so he read as a dim, bluish Pip. The ghost is left out of replays, and in the caves a replay lifts the dark partway, so the gap or creature he nearly met can be seen. The label says "Instant replay".
A sharper demo, and the 3D pass finished (release 32): the demo player now foresees the creatures by their own rules. Each creature near Pip is played forward once per decision, for the 96 frames a plan looks ahead, without touching the world: walkers and snails turn at walls and ledges and fall off edges, pods burst on what they hit, and a Puddlehop hops on its timer toward where Pip will be. The old guess kept walkers on a straight line, saw a Puddlehop's first hop only, counted an airborne hop's distance twice and aimed it at where Pip stood when the plan was made. Rollouts also bounce off a stomp the way play does (higher while jump is held), let crumbling planks give way under Pip's imagined feet, and know that Pip blinks harmlessly for a while after shrinking (without that, big Pip would not walk past a Puddlehop trapped hopping under a low block row, and dithered). The breeze that carries a stuck Pip on now needs a tile and a half of progress to reset, not a half-step. Over the same 61 runs (28 daily worlds and five seeds, at desktop and phone widths, 12 minutes each) the demo now tumbles 1.6 times per run instead of 4.2 (3.5 before Pip stood on his feet). Pauses over 8 s fell from 53 to 19, and none is longer than the breeze's 15 s. The 3D pass now covers the rest of the world: creatures cast the same soft shadow as Pip on the ground's receding top, following fliers, hoppers and pods into the air; ferries, rafts and lift boards show a receding top and a side; the landmarks stand set back on the plaza's top, in perspective like the faces; and trees, rocks and cottages stand a little back on the ground rather than at its front edge. Shared links use a new format.
A touch of 3D, and Pip stands on his feet (release 31): the world is drawn as if seen in perspective from just above. Every solid tile's exposed top recedes a little into the screen: the lawn, snow, cloud, moss and sand go back behind their painted edge. Blocks, bricks, stones and cliffs show the side that faces the middle of the view, so the faces turn as the view scrolls (left of centre you see right sides, right of centre left sides). Each face takes its colours from its own region's palette or from the painted tile. Pip's shadow lies on the ground's receding top and follows him into the air, smaller and fainter the higher he jumps. All of this is drawn behind the painted tiles and is drawing only. Pip also used to stand at the edge of a hole with his boots over the gap: his collision box is narrower than his painted body, and any sliver of it on the lip held him up. Now he stands on his feet (the middle half of the box). Once they pass the edge he slips off and falls, easing out from the lip, and while they are still just on it he teeters, swaying over the drop with his arms up. Lifts, ferries, springs and crumbling planks go by his feet too. This changes the physics, so shared links use a new format. Tests check he falls with 3 px or less on the lip and stands with 5. The demo tumbles a little more often for it, about 4.2 times per 12 minutes instead of 3.5 over the same 61 runs. It pauses no more than before, and never longer than the breeze's 15 s.
No more hanging at a block row (release 30): reported on the 29 October world at 4614 m in the caves. A row of blocks ended one tile before a two-tile step up, with two Mossbuds patrolling under it. Big Pip could not rise onto the step in that one-tile slot without bumping the step's face or the blocks, so every forward plan ended in a bump or a hit, and the demo jumped back and forth. The breeze that carries a stuck Pip on was meant to wait 30 s, but it was still counted in the old 60-a-second ticks, so it waited 45 s and then moved him ahead, which looked like a restart. Block rows now stop two tiles short of whatever comes next, and the breeze comes after 15 s. A test checks that no block row ends right before a rise; on the previous generator it finds two in seed 1 alone. A stall hunt over 28 daily worlds and five seeds at desktop and phone widths, 12 minutes each, found no hangs. Of 42 pauses longer than 8 s, 39 were Pip walking back from a checkpoint after a tumble, two were waits for a ferry or lift, and one was a cautious 12 s wait for a Puddlehop. The longest was 15 s. The 29 October world now runs past 6000 m. The worlds changed again, so shared links use a new format.
Real holes, bursting pods and life in the sea (release 29): a hole in the ground is now always at least two tiles wide. One-tile holes were narrower than Pip himself, so the little hop over them looked as if he walked across a crack (had he really walked, he would have fallen in). Where only a one-tile jump is safe (a step up, or a headwind in the sky) the far side now comes level instead, and the sky's gaps follow the actual wind along the jump rather than always the worst headwind. Only the floating steps keep their one-tile hops between stones. The worlds changed with it, so shared links use a new format. A stomped seed pod no longer hangs in the air as a flat disc: its husk splits, the halves tumble away and fall, and seed fluff drifts off; kicking a shell gets a small clack ring too. New small lives, drawn only (the run never sees them): fish that leap from the sea between the dunes and back in with a splash, shadows of fish under the surface, schools leaping far out on the water, butterflies by day in the meadow that lift away as Pip runs by, and bats that flit past his light in the caves. Pip notices them ("A fish!", "Sorry, butterfly!", "Bats! Eek!"). His bubble is smaller, in a regular weight and see-through. It waits until a region's title has faded and keeps clear of the cards (it drops below him, or fades). The ghost's "your best" label fades while the ghost runs alongside Pip, so it never reads as his own. The chapter card fades back while Pip jumps under it, and lines about new things get their article ("Never seen a lift before!").
Pip talks (release 28): now and then Pip says something about what is going on, in a comic bubble over his head that types itself out, with a soft babble when sound is on. He greets each region as he enters it, reacts to the weather rolling in and to a rainbow, calls out the next landmark when it comes into view and cheers when he reaches it, and has something to say about a stomp (more for a chain: "3 in a row!"), a tumble (and a weary one if it keeps happening), growing big or small again, a spring, a splash into the sea, a ferry or lift ride, crumbling boards, smashing a brick, his seed count, nightfall and dawn, the ghost he is racing pulling ahead or falling behind, someone taking over or handing back, a director's trick (and a refusal), and something new to see; in between he chats about the place he is in. Lines are worded from the moment (the landmark's name, the count), the last few of each kind are not said again, small talk waits for a quiet spell and a big moment can cut in, so it comes about every ten to fifteen seconds. It is only shown and heard: nothing in the simulation, the planner or a ghost depends on it. Also: on a phone the row of buttons now shrinks its type to fit (the Journey button ran off the edge).
Each place its own scenery (release 27): the same mountain painting and the same trees had been doing duty everywhere: the snowy range was also the world below the Sky Isles and, darkened and flipped, the caves' walls; pines stood in the meadow as well as on the ridge; the coast borrowed the meadow's rock. Now the Sky Isles look down through the haze on a painted countryside of their own (a patchwork of fields with furrows, woods, a winding river and villages), the caves have walls of their own (layered rock rising into stalagmites and hanging as stalactites, seamed with faintly glowing veins), and the trees belong to their places: oaks and cottages in the meadow, pines on the ridge, pink blossom trees on the sky isles (they shed petals), palms on the coast. Two things had been putting one place's scenery over another's ground: the backdrop began turning into the next region's a whole chunk before the border (so at the end of the coast the frost mountains already filled the sky over the sand), and while a backdrop faded in or out its pines, clouds and islands reset the fade and stood at full strength. The backdrop now blends over the same 16 tiles about the border as the ground, and every alpha inside a backdrop is relative to its fade. tests/pip-run.test.cjs checks that each place keeps to its own trees.
Pip's hands (releases 24-25): in the painted frame Pip's back hand ran past the edge of the picture and was cut off square, so it showed as a flat-topped block of skin. The cut skin (and its pale edge) is lifted from the body sprite and a fist is painted behind the cuff in its place, about the size of the front fist (a little smaller, being further off), in the painting's warm shading: four knuckles with creases between them, a thumb over them, a wrist that reaches into the sleeve and a soft outline. The painting also had an opaque grey smear between Pip's chin and his front fist (and another under that arm); once the arm swings its edges were straight cuts, so it is cleared from both the body and the arm (pixels with hardly any colour, the mask opened so the fist's thin outline is kept).
Weather, a journey book, and a stomp worth landing (release 23): most regions after the first now get one passing spell of weather, seeded and a function of distance like the hour, so ghosts and replays see the same sky. It is drawn and heard only: the rules stay the region's. A shower crosses the meadow with rain, splashes and puddles that ripple, linger and dry, and then a rainbow; a blizzard whitens the ridge with snow on the wind and a howl; a squall darkens the coast with driven rain, a heavier surf and thunder far off; a sunbreak sends shafts of light through the sky isles with a shimmer of chimes; and rain drips from the cave roof, catching what light there is and ringing where it lands. Each is a new find (15 sights now). Each landmark reached is stamped into a journey book kept on this device: the date it was first reached, how often, the best time to it from the chapter's start, and your own best when you played most of that chapter (a ghost rebuild stamps nothing). The chapter card says when a postcard is new or a time is beaten, and ✉ Journey (or B) opens a page of five postcards, each the landmark under its own sky with a perforated stamp and a postmark, the rest greyed with a question mark; the run waits while it is open. Stomps now land: the creature is squashed flat with a wobble, its eyes turn to spirals and stars go round its head before it vanishes in a poof; a ring of impact, star sparks and dust fly out; a Mossbud's leaf pops off and flutters down, a Puffwing bursts into feathers, a shell clacks and wobbles; Pip stretches up off it; a chain of stomps counts itself (×2, ×3...) in growing colours; the clock holds for a few frames and the view jolts (both in the render loop only, so the simulation, the planner and ghosts are unchanged); and the sound is a thump and a squish with a boing and a chime that climbs with the chain.
A speed pass (release 22): each frame paints fewer full-screen layers, for the same picture. The camera eases in only once the planner is properly tense, so calm stretches no longer draw the whole scene into a zoom buffer and copy it (about a third of all frames did). Distant ridges are filled down to the horizon or the foot of the stage instead of the bottom of the canvas. Each biome's sky gradient and sun glow are one small cached image, stretched. The hour's wash over the world and the sun's bloom and vignette are merged into one cached layer that is repainted only when the hour or the biome mix moves on. The cave darkness is drawn at half resolution. The racing ghost is greyed on a small buffer instead of through a canvas filter. HUD words come from cached images instead of being typeset every frame. On dense screens (twice the CSS pixels or more) the sky and everything far off is painted at half resolution and stretched, since it is soft and hazed anyway. Measured in headless Chromium with drawing forced to finish: a retina-sized window is 16-29% faster per frame across the five biomes, a phone 10-22% (the caves about even), and an ordinary desktop window up to 19%.
Sunset Coast (release 21): a fifth region joins the journey, so a lap is now meadow and then frost, sky, caves and coast in a seeded order. Its rule is soft sand: Pip is slower to get going and stops sooner (lower acceleration, more friction; the gap tables still re-derive from the take-off speed, which a short run-up still reaches). Its world: a warm sky over the sea with long clouds lit from below, the sun low on the water with a flickering path of glitter, headlands far off, swell lines that crowd and speed up toward the beach, and surf at the foot of the dunes, so every gap is sea (falling in makes a splash). Rock pools break up the sand the way the islands break up the sky. The ground is sand that darkens with depth, with wind ripples, shells and pebbles on top and weed hanging under the overhangs; columns are weathered pilings with barnacles and rope, stones have a wet sheen, crumble bridges are bleached driftwood, bricks are sandstone, and the drift ferry is a driftwood raft with a striped sail. Along the way stand leaning palms (with five tiles of headroom), shells and starfish, sandcastles with a pail, striped umbrellas over towels, driftwood and beached rowing boats; dune grass sways, gulls glide and spray glints, and the close foreground is dune grass on a sand bank. Footsteps hiss on the sand and leave prints. Its landmark is the Lighthouse: a red-banded tower on wet rocks with a railed gallery and a glowing lamp room. When Pip arrives the lamp catches and flares, twin beams sweep round over the sea and the gulls resting on the rocks and the rail lift off, to a foghorn, the lamp's chime and their cries. The coast has its own ambience (surf that rolls in and draws back, gulls now and then) and its own key for the score. The day now lasts six regions instead of five, so each lap meets the regions at a different hour (the second meadow still gets the starry night). Shared links use a new format, since older runs would replay on a different world.
Creatures that notice Pip, and quieter thought lines (release 20): the creatures react to Pip, drawn from the state of the world only, so the simulation, the planner's predictions and ghosts are unchanged. Their eyes leave the path ahead and follow him when he comes within a few tiles (up as he jumps over them, back over their shoulder once he has passed); a Mossbud's leaf perks up, a Shellback snail draws its head back under its shell as he approaches, a Puddlehop puffs its throat at him and a Puffwing beats its wings harder. A landing right beside them, a friend being stomped or a shell sliding past makes them flinch: they squash down with their eyes squeezed shut, and a stomp nearby makes the others jump. The planner's thought lines stay at a third of their strength while things are calm and come up when it is tense (in replays they show in full, since replays are about its thinking); they fade out over the eight tiles ahead of Pip instead of running across the scenery, and they give way to a landmark's arrival scene.
Smooth on a TV (release 19): resolution now follows the device. The canvas holds at most 4 million pixels (at twice a 4K TV's density it was asking for about 8 million on every one of its ten or so full-screen passes), and when frames keep coming slower than about 50 a second it renders a step smaller (80%, 64%, then 50% of the pixel density; two steps at once below about 24 fps) and lets the browser scale it up. Each step is judged over 1.5 s of frames after a second for caches to refill; a step that does not make frames faster (a display that only runs at 30 Hz) is taken back and the level settles. The level is remembered on the device for a week. A resolution change goes through the same path as a window resize, so ghosts still replay exactly. In a simulated 4K-density window Chromium went from 29 to a steady 58-60 fps in about 8 s; desktop and phone sizes keep full resolution.
Borders that blend, and a sound for each landmark (release 18): where one region gives way to the next, the ground no longer changes at a hard vertical line. Across 16 tiles around the border the soil crossfades from one biome's to the other's (brown loam into blue-grey frost, frost into lavender cloud, cloud into cave rock, rock back into loam), and the cap on top changes tile by tile in patches a few tiles long: snow drifts start on the grass at the foot of the Frost Spire, cloud billows over the last snow, moss creeps over the cloud and grass over the moss, the incoming cap's rounded edge lying over the old one. Footsteps, prints, kicked-up particles and the swaying grass follow the ground's look, so Pip's boots crunch on the first snow patch; the rules (ice, wind, darkness) still change at the border itself. A border chunk paints both looks, only where they mix, and every chunk is now painted ahead of time while the browser is idle instead of in the frame it scrolls in. Each landmark's arrival scene has its own synthesized sound, timed to what is drawn: the gate's caps boing as they bounce under a warm chord and a sprinkle of petals and bells; a rising shimmer climbs the Frost Spire and rings out as it flares, scattering glints; Sky Harbor's airship sounds its horn and its propeller hums away into the distance; the Crystal Heart's hum swells as each ring of light pulses out. The fanfare follows the scene.
Along the way, and a scene at each landmark (release 17): the route is dressed with small painted details, each placed like the props on level ground with three tiles of headroom under its whole width, inside its chunk and clear of the trees, rocks and cottages: split-rail fences, clusters of spotted mushrooms, wildflowers and lamp posts in the meadow; snowmen, frozen ponds, frosted fences and lamps on the ridge; bunting strung between poles and spinning pinwheels in the sky; glowing mushroom clusters and lanterns in the caves. Every region opens with a signpost naming the landmark it leads to, and a cottage gets a well beside it when there is room. When Pip reaches a landmark it plays a short scene (about four seconds, timed from the arrival so ghosts and replays see it too): the Mushroom Gate's caps bounce, its doorway fills with warm light and the arch bursts into petals; light climbs the Frost Spire until it flares, a beam stands from its tip and star glints burst out; the airship casts off from Sky Harbor, leans into the turn and sails away (it is gone when you look back); the Crystal Heart pulses rings of light. The chapter card now waits for the scene and sits higher. tests/pip-run.test.cjs checks every piece of dressing in four worlds and that each arrival plays its scene.
Painted set pieces (release 16): the last flat pieces are painted, each once into a cached sprite. Drift ferries: a lashed log raft with ring-cut ends and a veined leaf sail stirring in the breeze (meadow), a frosted ice slab with icicles (ridge), a cloud cushion with a gold ribbon (sky), a faceted amethyst slab that glows (caves). Lifts: a two-board platform hung on ropes from a beam with spoked pulleys that turn as it moves. Crumble bridges are long weathered boards, nailed and split, on a sagging rope (cracked ice, cloud, crystal elsewhere); the helping bridge is a board deck on a leafy vine; the podspitter a striped, glossy bulb. Star seeds are faceted golden stars around an amber heart, and the Golden Sprout a glossy golden fruit with two veined leaves.
One Pip in every pose (release 15): the drawn legs now carry every pose, not only the run, so the painted frames' cut-out legs no longer appear at all: in the air the pose follows the vertical speed (knee up and the other leg trailing on the rise, tucked at the top, reaching down for the ground as he falls), a landing crouches and blends back into the stride, a skid braces the front boot forward, and a tumble flips the same body. His front arm (sleeve and fist, lifted off the painted body, which keeps the shoulder so no gap opens) swings against the near leg as he runs and rises for balance in the air.
Placement (release 14): painted trees, rocks and cottages stand only where the ground is level and unbroken under their whole base and a tile beyond (a cottage needs nine tiles, an oak seven), within their own chunk, so nothing hangs over a cliff edge or is squeezed between a ledge and a gap; a cottage is tried wherever there is room for one. The kingdom painting and the mountain backdrops no longer repeat as mirror images (which showed a centre line and fused shapes into symmetrical ones, two mushroom houses into a heart): each is made into a strip whose two ends cross-dissolve, so copies join without a seam, and the kingdom is painted large enough that a screen shows it once. tests/pip-run.test.cjs checks every prop in four worlds stands on level ground.
A calmer jog, and things in their place (release 13): the clock runs at 40 ticks a second (from 46), so the whole game is about 13% calmer, and Pip's stride is longer: about six steps a second at full speed instead of nine. The landmark on the horizon is small and hazed into the sky with its foot fading out (it no longer stands mid-air at ground height), and is not shown underground; the full-size landmark on each plaza stands on the plaza's own ground with a contact shadow instead of bringing a painted mound of its own. Each sky island has one billowing cloud underside instead of a string of puffs, the cumulus sea sits lower and smaller, the close foreground is quieter (no bright blossoms by the buttons), and the cave mouth darkens later so golden hour and the caves do not muddy each other.
A run, not a waddle; a painted sky (release 12): the drawn legs now run: contact is under a third of the stride at speed, so there is a moment with both boots off the ground; the heel kicks up high behind, the knee drives through under the body and the boot reaches for the next step. The hips sit close together (they were spread like a duck's), the body leans into the run, rises in the flight and sinks at mid-stance, and the shoulders turn a little with each stride. The flat illustrations in the sky are painted now, each once into a cached sprite: the four landmarks (spotted mushroom caps on shaded stems under a flowering arch with a lantern; a faceted ice spire among shards; a floating island with trees, a pier and a shaded airship; a faceted crystal heart), the sky whale, the balloons (round, gored envelopes on wicker baskets), paper lanterns, the moon and the cave crystals. Below the Sky Isles a sea of cumulus replaces the flat bands, and the islands' undersides billow. The caves' far walls are crags from the mountain painting, darkened, and going into or out of the caves fades through the dark of the cave mouth instead of mixing a bright sky with dark rock.
A day on the road, depth and real strides (release 11): the sun goes down as the journey goes on, one day every five regions: day for the first chapters, a golden hour with a low sun, a lavender dusk with the moon rising, a starry night over the next meadow (fireflies, a warm glow around Pip, the birds give way to crickets and now and then an owl), then dawn. It is a function of distance, so ghosts and replays see the same sky; underground, the caves keep their own dark. Each frame blends the phases into one wash over the sky and one over the world, so night costs little. Out-of-focus plants (grass and blossoms, frosted tufts, cloud, dark stalagmites) pass close to the camera at the foot of the stage, faster than the world, and thin out around Pip. Footsteps crunch in snow and thud softly on cave moss, and a tree shedding its leaves rustles. Running legs are drawn now: the painted run frames were cut-outs that, stepped about 70 times a second, flickered faster than the screen could show them. Pip keeps his painted body, and his legs (short, cream, in glossy boots) follow one continuous phase from the distance run, half a cycle apart: a boot plants ahead of the hip and sweeps back, the heel rolls up, the leg swings through knee-first and reaches for the next step. The body sits as high as the planted boot allows, so it dips at each contact. Footstep sounds and prints land on the contacts. Jump, landing and skid poses stay painted.
Pip touches the world (release 10): footfalls throw up what the ground is made of: dust and grass clippings in the meadow, snow on the ridge, cloud in the sky, glowing spores in the caves, harder on a heavy landing; running through a flower kicks up its petals. Pip leaves footprints in snow (they fade over ~20 s) and in cloud, and in the caves the moss lights up under his boots and lights the dark around it. Grass along the front of the turf sways in a breeze, parts around Pip and the creatures and flattens where he lands. Leaves drift from the painted oaks and snow sifts from the pines, and a shower of them comes down when Pip runs past a trunk. Particles are spawned by the simulation from its own state (no randomness), so replays show them; prints, grass and leaves are drawn from the state at render time. Nothing feeds back into physics.
Sound (release 8): assets/pip-audio.js synthesizes everything with WebAudio (no audio files). Effects follow game events: footsteps that know the ground (grass, ice, cloud, stone, wood, crystal), jumps, landings weighted by impact, seeds that climb a pentatonic scale as you chain them, bumps, springs, stomps, crumbling planks, pods, tumbles, discoveries and an arrival fanfare. Each biome has a quiet ambience bed with occasional details (birds, ice tinkles, wind chimes, cave drips; sky wind follows the gusts). An optional sparse score plays a pad and a slow melody in each biome's own key and voice, a little fuller when the planner is tense. Off by default: the ♪ button (or M) cycles off → sound → sound + music, the choice is remembered, and sound pauses with the host's Pause and when the tab is hidden. A ghost rebuild and the planner's imagining are silent. tests/pip-audio.test.cjs runs it against a stub AudioContext.
Journey (release 7): each region is a chapter that ends at the next region's landmark (Frost Spire, Sky Harbor, Crystal Heart, Mushroom Gate), standing full size on a quiet plaza (creatures turn back at plaza edges, so the rule is part of the world). Pip slows to a walk across it, reaches the landmark and hops, the camera settles in, and a chapter card sums up the region: seeds, time, tumbles, new finds and, when racing a ghost, how far ahead or behind you were at that spot. The next region's title follows. The walk goes through the input log like any other input, so ghosts replay it exactly.
Set pieces, wonders and a calmer pace (releases 5–6): top speed is about 22% lower (gap sizes re-derive from the jump), and the simulation clock runs at 46 ticks a second (40 since release 13) with the renderer interpolating between ticks, so the whole game moves ~40% slower than at first while staying smooth. Each biome now lasts ~288 m (about a minute), set pieces come roughly every 65 m, and the planner's thought lines are reduced to a faint chosen path and its closest alternatives. Pieces are dealt from a bag that remembers the last six, so the route does not repeat itself, and new set pieces unlock as you go: drift ferries across chasms too wide to jump, lifts up cliffs too tall to jump, crumble bridges whose planks fall half a second after you land on them (and grow back), floating steps over a pit, and podspitters that spit seed pods along the ground. Ferries and lifts are one-way platforms whose position is a pure function of time, so the planner foresees them (it waits for a ferry, rides it, and steps off when ground is within a hop) and ghosts replay them exactly. Most regions also hold one wonder in the sky (a sky whale, lantern rise, balloon drift, meteor shower or aurora), never the same twice in a row. The first time you meet each piece or wonder, a small card names it ("3 of 10 found"), remembered on this device.
Ghost links and the daily world (release 4): the default world is the day's (UTC), the same for everyone. A run is stored as its seed, the simulation width and one 3-bit input per tick (run-length coded), plus the director's placements; the engine is deterministic (its sine is plain arithmetic, so browsers agree bit for bit), so that log rebuilds the run exactly. Share run copies a #pip-run-<code> link (about 1 KB for three minutes) that opens the same world with your run racing as a translucent ghost, with an ahead/behind readout and a flag where the ghost's run ended. Your best run of the day (once you have played yourself) is kept on this device and raced as "your best"; Race again (or R) restarts the same world. "New world" picks a random one.
Physics: fixed 60 Hz with sub-pixel motion; acceleration, skids, variable jump height (hold to jump higher), coyote time and jump buffering.
World: an endless seeded tile world from a chunk grammar (runs, gaps, steps, stump columns, stone pyramids, block tiers). Gap widths come from simulating the jump arc, so every stretch is clearable; difficulty ramps with distance.
Creatures: Mossbud walks and turns at walls; Shellback snail turns at ledges and retreats into a kickable shell that bowls others over; Puddlehop leaps toward Pip on a timer; Puffwing bobs through the air. Stomp them, or bump blocks from below to knock them off.
Demo player: when idle it presses the same buttons a person would. Every few frames it simulates ~40 candidate plans for 1.6 s against the real physics and predicted creature motion (including hopper arcs), then continues each rollout with a default policy (run, and leap where ground ends or a wall/creature is ahead, waiting for headroom under block rows). Average-position scoring and plan commitment stop it from procrastinating. Any key or tap hands control to the player; 9 s idle hands it back.
Controls: ← → / A D to run, Space / ↑ / W / Z to jump. On touch: a pad below the stage.
Visible mind: in demo play, each replan's rollouts are drawn as arcs: white futures, red ones that end in a tumble (with a break), gold for the chosen path.
Planner-driven drama: tension (the share of imagined futures that tumble within 40 frames) eases time down to ~0.55× and pushes the camera in; nothing is scripted.
Instant replays: a 6 s ring of recorded frames; close calls (a lethal option within 12 frames was avoided) and stomp chains replay at half speed with letterbox bars, at most every 30 s.
Memory: each tumble leaves a faint ghost mark. Rollouts near a mark keep a wider berth and avoid retracing it, a "!" shows when Pip approaches one, and a risk level rises after tumbles and relaxes with clean distance (≈2.4 tumbles per 3 min, down from ≈3.6).
Phones (portrait): the stage sits right under the host bar with larger tiles (12–13 across), and a console below it holds a journey strip (chapter, a mini Pip on the track, the ghost, the next landmark and the metres to it), the director tools, Sound/Restart/Share and the hint. Once you play by touch it becomes a thumb pad: the left quarter runs left, the next quarter runs right, the right half jumps, so thumbs need not aim. Tall phones show the chapter so far (seeds, time, finds, your best today) in the spare space. Where the browser supports it, landings, stomps, springs and tumbles give a light vibration while you play. Landscape keeps the full-height stage.
Never stuck: under a block row the demo leaps only under open sky, running off a lip and jumping in the coyote window when the row reaches the edge. After ~3 s without progress the planner grows impatient and commits to its best attempt instead of waiting forever (a late fall otherwise scores better than an early one). The generator leaves open sky after every block row, shrinks a gap after a short run-up, and brings the ground back into each biome's height range (so nothing is wedged under a cave roof). Two world rules guarantee progress: after three falls into the same gap a bridge grows across it, and after 30 s without progress a breeze carries Pip to the next safe ground. Both depend only on the world's state, so ghosts replay them.
tests/pip-run.test.cjs checks the gap table, finite physics, steady demo progress on four worlds, the director's referee, that a shared run (with a placement and a resize) replays frame for frame, that every biome's painted ground draws with sane geometry (a strict canvas stub rejects non-finite numbers and negative radii), once per chunk, and that whole frames render in every biome with footprints left in snow, cloud and moss.