Changelog
Every version of the scene maker, newest first. The first versions are kept as one condensed block near the bottom; the recent ones each keep their own entry.
Version 0.48
The note under the buttons no longer names a scene that has moved on. Version 0.47 added the word box: type a word, press Paint that word, and the page says which word spelled which seed. That note was cleared only when the seed box was typed in or when Paint scene was pressed — but the box can also be written from script, and the seed can move without it: pressing a seed step button, riffling the seeds with the arrow keys, pressing Keep under a preview, picking a shelf entry or pressing Surprise me all move the scene while the box records nothing, so the note went on saying dawnpaw spells seed 691563 over a canvas and a printed line showing a different scene. The whole point of the word box is that the word and the number belong together, so a note that named the wrong number was the worst kind of stale.
The note is now checked against the printed seed line, which app.js keeps naming the scene on screen. Any click anywhere in the page, any change of the Land, Moment or Weather menu, and any typing in the seed box clear it the moment the scene has moved, and it is only written after the paint it describes, so a note and a scene cannot disagree. Nothing else about the word box changed: the same word still spells the same number, case and runs of space are still folded away, and an empty box is still answered with a line about what to type instead of a painted scene.
app.js, index.html and the four older scripts are byte for byte what they were, so no scene, seed, layout or drawing changed and every seed still paints what version 0.38 painted. Only the notes under the buttons behave differently.
Untested as ever: I have no browser automation here, so this rests on reading the code and not on a run. The two known limits stand: the Old Windgate's arch curve is still drawn in one-pixel steps, and nothing here has ever been watched on a phone or by a screen reader.
Versions 0.44 – 0.47
Four small passes. Each of them changed app.js or spell.js and nothing drawn, so every seed still painted what version 0.38 painted.
- 0.47 — a word can stand in for a seed. Type a word, press Paint that word, and the page paints the seed its letters spell: each letter is folded in one at a time — thirty-one times the total so far plus its own character code — and the total is kept inside 0 to 999999, so the same word always spells the same number. Case and runs of space are folded away first, and only the first twenty-four characters count. A word is only a shortcut for typing a number: it paints through the page's own Paint scene button, so the caption, the printed line, the previews and the shelf all follow, and the menus stay where they are. A new file, spell.js, holds the whole of it.
- 0.46 — a seed number outside the range now says so. The box recognised a number only when it was one to six digits long, so 1234567 or -5 was refused with the message that tells a visitor to enter a whole number — exactly what they had just typed — and a seed written with leading zeroes was refused as prose. Any run of digits is now read as a whole number, and one this page cannot paint is named as outside the range, repeating the number. Leading zeroes now paint the seed they spell.
- 0.45 — a menu change now rewrites a whole line in the seed box. Paste a line, then change the Land, Moment or Weather menu, and before this version the canvas, the caption and the printed line moved to the new scene while the box still spelled out the old one — four views of two scenes, with nothing on screen saying so, and Paint scene afterwards put the old scene back. Now a line in the box has its land, moment or weather rewritten to match the menu you chose, keeping its seed. A menu change still never moves a bare seed number.
- 0.44 — the warning about an unreadable seed line no longer disappears on its own. That warning used to be cleared by the next menu change even though the box still held the same unreadable line, so the box, the caption and the canvas quietly disagreed. It now stands until the box is something this page can read again, or until Paint scene is pressed on a box that reads. Reading the box moved into one function that only reads and says which of four things the box holds.
Version 0.43
The four pictures of one scene now show the same moment of the walk. When the system's reduce motion setting was turned on while the page was open, the big canvas jumped back to one fixed step of the cat's walk — but the three previews below it kept the last step the animation loop had drawn. So the big scene and its three previews stood at two different moments of the same walk until the next repaint. Turning that setting on now repaints the previews at the fixed step too.
app.js is the only file changed, and the change is one call added inside the function that already handles the setting, so no scene, seed, layout or drawing changed and every seed still paints what version 0.38 painted. A visitor whose system asks for reduced motion from the start was never affected: at load the previews are drawn at the fixed step already.
The same limit as every accessibility note here: this is reasoned from the code, not watched. I have no browser automation and no device, so I have not seen the previews freeze in step with the big canvas after flipping the system setting.
Version 0.42
Keyboard focus is no longer lost off the shelf. Pinning a scene, the shelf draws each pinned scene as one row with its own Forget button. Every time the shelf is rebuilt those rows are made fresh, so the button a visitor had just pressed was gone from the page — and a keyboard visitor pressing Forget was dropped at the top of the document, well above the shelf, with nothing to say where they were. The same happened to Clear the shelf, which hides itself as the shelf empties.
After a Forget the focus now goes to the pick button of the row that slid up into the place of the removed one, or to Pin this scene when that was the last scene on the shelf. After Clear the shelf it goes to Pin this scene above it. Focus is only moved by those two buttons, never by an ordinary repaint, so it is never taken away from a visitor in the middle of something else.
app.js is the only file changed, so no scene, seed, layout or drawing changed and every seed still paints what version 0.38 painted. As with every accessibility note here: this is reasoned from the code, not watched. I have no browser automation and no screen reader on this machine, so the fix rests on how a rebuilt button loses focus, which is standard behaviour, and not on a measurement.
Version 0.41
Two seed buttons to a line on a phone. Version 0.40 put four seed buttons in one row, and the narrow-screen stylesheet gives every button in a row a full-width line, so on a phone those four small steps stacked into a column four buttons tall and pushed the seed line, the shelf and the previews down the page. The four seed buttons now sit two to a line, so that row is half as tall and the seed box stays near the top of a small screen.
A stylesheet change only: index.html is untouched, and data.js, painter.js, app.js and previews.js are byte for byte what they were, so every seed still paints what version 0.38 painted. The buttons themselves, their labels and their order are unchanged, and the main buttons, Pin and every other row keep their full-width thumb targets. Selector is scoped to the row inside the seed field, so nothing else moves.
Same limit as ever: this is reasoned from the stylesheet, not watched. I have no phone here, so the two-up row has not been seen on a screen.
Version 0.40
Ten seeds a tap. Since 0.34 the Up and Down arrow keys in the seed box step one seed, and ten per press with Shift — but a phone has no arrow keys and no Shift, so until now a step of ten was unreachable for a thumb. Two buttons, Earlier seed −10 and Later seed +10, now sit beside the existing one-seed buttons under the box. They use the same seed step as the arrow keys, count from the scene on screen rather than from the box, and wrap round at 0 and 999999 like every other step.
index.html and app.js only, so no scene, seed or layout changed: every seed still paints what version 0.38 painted. The four buttons made that row taller on a narrow screen; 0.41 gives that row two lines instead of four. Untested as ever: I have no phone here, so the new buttons have been reasoned about and not watched.
Versions 0.38 – 0.39
Two small correctness passes. app.js is the only file either of them touched, so no scene, seed or layout changed and no drawn pixel moved.
- 0.39 — the canvases now describe the scene they are actually showing. The big canvas carried one fixed label — pixel-art dawn landscape with a travelling cat knight — whatever was on screen, so a screen reader got no land, moment, weather or seed from it; it now names all four, the same facts the caption gives a sighted visitor. The first of the three previews was labelled drawn from the first neighbouring seed, which was never true of it: it holds the seed on screen itself, and only the second and third are its neighbours. All three previews now name their own seed.
- 0.38 — the system's reduce motion setting is now watched while the page is open, not only read at load. Before this version the setting was read once when the page opened. A visitor who turned reduced motion on mid-visit kept the walking cat; one who turned it off mid-visit kept the frozen frame until a reload. The page now listens for a change of that setting and obeys it at once: with motion reduced the cat is drawn once, at one fixed step of his walk, and the animation loop stops asking for frames; with it off again the walk starts from a fresh clock, so the frozen seconds — however long they lasted — do not throw the walk forward.
Untested as before: I have no device here. I have not watched the cat freeze and start again by flipping the system setting, and I have not heard the new canvas descriptions read out by a screen reader; both are short and standard, but neither has been confirmed outside this machine.
Versions 0.36 – 0.37
Two passes, neither of which changed a pixel, a seed or a layout.
- 0.36 — the living scene is repainted at most fifteen times a second instead of on every animation frame. The cat's walk is four steps at eight steps a second and his legs, bob and tail all read off that step count, so the picture on screen only ever changes eight times a second; a canvas this size was being redrawn sixty or more times a second to show the same eight pictures. The only visible difference is that the drifting clouds and the bobbing birds now move in steps of at most a fifteenth of a second, which at their speed I cannot see but have not measured on a device.
- 0.37 — a copy pass. The Old Windgate entry said the arch's band was six pixels high in the middle; it is four pixels thick and rises six above the pillar tops, so the sentence now says that. The instructions for the seed box became four short lines: type a number and press Enter, tap the Earlier and Later seed buttons, riffle with the arrow keys, or paste the printed line back.
Versions 0.33 – 0.35
Three passes over the page's own words and controls, none of which changed a pixel.
- 0.33 — readability: the Old Windgate entry was one long run-on, and its measurements about the arch and the lane of flagstones are now five short lines under that land.
- 0.34 — keyboard browsing: the Up and Down arrow keys in the seed box step one seed, ten per press with Shift, and the scene on screen is what they count from.
- 0.35 — the same one-seed step by tap: Earlier seed −1 and Later seed +1 sit under the seed box, because a phone keyboard has no arrow keys. Both wrap round at 0 and 999999. (The ten-seed buttons joined them in 0.40.)
Versions 0.30 – 0.32
Three passes over screen disagreements and stale copy, none of which changed a pixel.
- 0.30 — picking a pinned scene repainted the big canvas but left the three previews on the previous scene's neighbours; it now repaints them too.
- 0.31 — the preview heading and hints said "three neighbouring seeds", stale since 0.30; they now say the previews follow the current scene.
- 0.32 — the three menus re-read the seed box on every change, so with an unreadable line in the box a menu change was refused and the menu showed one land while the canvas showed another. Menus are now read on their own, and one shared repaint refreshes the caption, travel line, seed line and previews.
Version 0.29
The Old Windgate's pillars are nine pixels across instead of five, and the arch spans forty-four pixels, so the twenty-four-pixel cat knight fits inside the opening and a pillar covers him from head to foot as he walks behind it. The gate's x position was narrowed to keep the wider arch off the right edge. No drawing stream was touched, so every seed's sky, hills, grass and weather are identical.
Version 0.28
The seed box now reads a whole pasted line. The page had told visitors to copy the line printed under the buttons, but the box accepted digits only; it now takes either a bare number or a directly pasted line, and a line carries its land, moment and weather with it. A line that is not one this page wrote is refused with an error that names both accepted forms.
Version 0.27
A shelf: pin up to six scenes while the page stays open and paint any of them again with one tap. Nothing is stored, so the shelf lasts only for the visit. Pinning takes the scene the big canvas is showing, not whatever is half-typed in the box, and refuses duplicates.
Version 0.26
The one large script was split into four files: data.js (land, light and weather tables), painter.js (all drawing), app.js (controls, seed line, shelf, previews) and previews.js (the preview switch). No pixel changed. The arch's band is a little taller.
Version 0.25
The printed seed line moved out of the middle of the page to just under the buttons, in a dashed box that one tap selects whole (there is no clipboard access here, so selecting is what a visitor gets). Narrower buttons, headings and canvas spacing on small screens. Stylesheet only.
Versions 0.18 – 0.24
All of these were the sixth land, Old Windgate, and then the bugs it caused in turn.
- 0.18 — Old Windgate added: a mossy sunken road, flagstones scattered along it and a ruined stone arch.
- 0.19 — flagstones could sit underneath the arch's feet; stones inside the arch's footprint were dropped (a fix that later turned out to leave a hole in the road).
- 0.20 — the cat knight now walks through the arch instead of in front of it: the arch's band is painted before him and the two pillars after him.
- 0.21 — flagstones a few pixels apart are dropped, so the road stops looking like rubble.
- 0.22 — the arch is taller: seven blocks per pillar instead of five.
- 0.23 — the road is one lane instead of stones at uneven heights, and the dropped-stones hole under the gate is gone.
- 0.24 — road and arch both stand on the grass row the cat's own feet walk on, so he no longer crosses below his own road on some seeds.
Versions 0.10 – 0.17
- 0.10 — a four-step walk: swinging legs, a body bob and a small shadow under each foot.
- 0.11 — the three previews can be hidden and shown again.
- 0.12 — seed-driven variety: cloud silhouettes and a scatter of meadow blooms of three kinds.
- 0.13 — the cat grows a fur tail that lifts and drops with his step.
- 0.14 – 0.16 — bloom placement: blooms no longer overlap a tree or each other, and they gather in clumps instead of spreading thinly.
- 0.17 — the marsh heron faces the pool it stands in.
Versions 0.1 – 0.9, condensed
The first nine versions built the toy: a seeded pixel-art canvas (200 by 120 logical pixels, shown four times larger) with five lands, three dawn moments and three weathers; clouds, birds and rain drifting over it; a one-line travel caption written from the same seed; and a strip of three small previews so a seed could be picked instead of guessed. Along the way the meadow got a second tree type and the marsh a heron, the dunes a lone stump and the cliffs a cairn, and the small-screen stylesheet was tightened.
Two limits are still open, and neither is fixed by anything above. The Old Windgate's arch curve is drawn in one-pixel steps, so its band steps rather than sweeps across the span. And nothing on this page has ever been watched on a real phone or by a screen reader: every measurement and every accessibility claim here rests on reading the code, not on a device.