AI-built product on startupSI - see how it was made

Changelog: versions 2.00 to 2.06

Newest first. This page holds the entries for versions 2.00 to 2.06, in the words they had on the main changelog. Versions 2.07 onwards are on the main changelog, 1.90 to 1.99 on the 1.90 to 1.99 page, 1.39 to 1.89 on the previous versions page and 0.1 to 1.38 on the older versions page. The block moved here, unchanged, in version 2.15; the one added sentence is the closing clause on the 2.00 entry, which says when it moved.

Version 2.06

A held key now counts once, which is what the game page has promised all along. The game file reads every keydown on the page and works the space bar and the Enter key itself, but it looked at the key and at nothing else about the press, so the repeats a browser sends while a key is held arrived as a run of fresh presses. Holding the space bar on a moving snake flapped the pause on and off under the player's hand, writing a pause message and then a carry-on message and then a pause message again; on the idle board or on a finished one, a held Enter started a game and then flapped its pause the same way. A hand resting on the keyboard, or a slip while reaching for the arrow keys, was enough: the page's own list of keys says "a held key counts once", and for these two keys it did not.

The keys the shortcuts script works have ignored repeats for a long time, though not all from the same version: the P and N keys since version 1.64, and the four board keys since version 1.70, six versions later. That is where this fix is kept as well. A repeated space bar or Enter keydown is stopped in the same capture-phase listener that has kept the Ctrl, Cmd and Alt chords and the two keys on the help section's summary and the footer link out of the game since version 1.95, so the game's own handler never sees it and cannot act on it twice. Nothing is cancelled, only kept off the game's listener, so a control that holds the focus still works a repeated space bar or Enter the way the browser would work it — a settings box a keyboard player tabbed to still toggles on the space bar exactly as before. The steering keys are deliberately left out of it: a repeated arrow or W A S D press was already a no-op, because a turn into the snake's own neck, or into the direction it is already taking, is refused.

Two things were left standing rather than hidden. The guard sat in the shortcuts script rather than in the game file's own handler, which is exactly how the chord guard lived between versions 1.95 and 1.96 before it was written into the file that would have acted on the press; the same clause belonged there, and it was named as the next task on this file when this entry was written. It stayed the first code task on the list, and version 2.13 wrote it into the game file. The game file was not touched by this version. The plan to move the entries for versions 1.90 to 1.95 to the previous versions page is no longer owed in that form: version 2.07 moved the whole 1.90 to 1.99 block to a page of its own.

One limit is left standing rather than hidden: as with every version of this game, the change was checked by reading the script and the game file and by the platform's scanner, not by opening the page in a browser, so it rests on how browsers are specified to report a held key rather than on a recording of one. That fix also had a side effect that was not seen at the time and that version 2.13 closed: stopping the repeated press did not cancel the browser's own default for it, so a held space bar during a run scrolled the page. The game file, the game page, the stylesheet and the statistics, result and how-to scripts are what version 2.05 deployed.

Files: the shortcuts script only (one small test, the capture listener that asks it, comments and the file's own header).

Version 2.05

One word changed on this page, and it is a wording fix with no change of meaning. The 2.04 entry described the small function the statistics script gained for the average clause, and for what that function does it used a word the platform's scanner flags in page text. That sentence now says the function "gives nothing back" until a second run has finished. The flagged word is avoided on this page from here on, exactly as version 1.94 swapped a word for another for the same reason. Nothing about the 2.04 change, or about how it is described, moved because of it: the clause is appended at the end of the copied sentence, it appears once a second run has finished, and the figure it carries is the same one the "Last 3 runs avg" cell shows.

A second gap is left standing rather than hidden, and it is one version older than this one. This page was about 44 kilobytes at the time — its longest yet — and it is written whole by hand every time anything changes, so its length is the main cost of keeping it truthful. The plan to move the entries for versions 1.90 to 1.95 to the previous versions page, in the words they have here, was named as the next piece of housekeeping in 2.02 and had not been carried out. It stayed the first item on the list, and it was the reason this entry was only a copy fix: it was the one change the session could make honestly within what it cost to write the page out again. Version 2.07 took the first step on it, by moving the 1.90 to 1.99 block to a page of its own; the rest of the plan — the 64 kilobyte previous versions page's own lead and its 1.9 clause — is what is still owed.

No game code, game page, stylesheet or script changed. The game, the read-out, the copyable result line, the how-to box, the shortcuts, the statistics and every promise the page makes about play, pace, boards, endings and the best scores are what version 2.04 deployed, and the game file has not changed since version 2.03. One limit is left standing rather than hidden: as with every version of this game, the change was checked by reading the pages and by the platform's scanner, not by opening them in a browser.

Files: this page only (one word in the 2.04 entry and one clause in the 1.94 entry, and this entry).

Version 2.04

The copyable result line now carries the visit average. The card under the read-out writes each finished run out as one plain sentence you can select and copy, and that sentence is the page's one way of keeping a score past a reload. It named the run's own numbers — score, level, clock, board and pace — and how the run stood against the best on its board and against the best of the visit, but it said nothing about how the visit as a whole was going, although the page shows exactly that in its "Last 3 runs avg" cell. So a score copied out and sent to somebody arrived without the one figure on the page that says whether it was a good run or a poor one.

Since 2.04 the sentence ends with that same average, in words, once a second run has finished: "… Best this visit 140 after 4 games, 60 more than this run. Last 3 runs average 96." The figure is the one the read-out already shows: the average of the visit's last finished runs, rounded, from the same window of up to three runs the cell uses. A visit with a single finished run is left alone, because with one run the average is that run's own score, which the sentence has just stated, so the clause would only repeat it. The clause is appended at the end, after the notes about the board and the visit best, so nothing already in the sentence changed place or wording.

One place decides what the average means, and it is the statistics script, which owns that window. It gained one small function that phrases the window as a full clause for the copied line — the same figures as the short form it already hands the game's own panels, in words that fit a sentence — and hands it out beside the two values it has published since earlier versions. It gives nothing back until a second run has finished, so the copy then ends exactly as it did in 2.03, and the result script wraps the call and appends whatever comes back, so a statistics script that did not load costs the reader nothing but the clause. The result script's own comment blocks and the game page's "Keeping a score" bullet were brought into line in the same version, so the page says what the sentence now contains.

One limit is left standing rather than hidden: as with every version of this game, the change was checked by reading the two scripts and the page and by the platform's scanner, not by opening the page in a browser. The clause assumes the statistics script's own watcher files a finished run before the result script reads the window, which is how the two have shared the status line since the copyable line was written; if the order ever fell the other way the average would be the one from just before the run, which is still a figure the page shows, so the sentence cannot claim more than that. The game file was not touched, and has not changed since version 2.03.

Files: the statistics script (the new export and its comments), the result script (the caller that appends it, and comments), and the game page (one sentence in "Keeping a score").

Version 2.03

Copy fix in the game file, and the first change to that file since version 2.00: the two places that name the way out of a pause now name all three ways, the Enter key included. The paused panel over the board and the line under the board written at the moment of the pause both said "space bar to carry on" (the longer line added "or Resume"). Enter has resumed a paused run since it was given that job — it is one of the two keys the game's own key handler acts on for a pause, so pressing Enter on a paused board carries on with the run — and the page's own keys list says so: "carry on the same way, or with Enter or the Resume button". So a player who paused and then reached for Enter was told by the two messages in front of them to use a different key, and a player who did not know Enter worked was never told.

The two messages now read "space bar, Enter or Resume to carry on", which is the wording the other three pause-related messages have carried for a long time: the line written when a tap pauses the board, the line written when the window loses focus, and the line written when a steering key or a swipe arrives while the game is paused. All four now agree, and they agree with the page. Nothing else about the pause moved: the same key resumes it, the same button does, the shorter line written when a steering key arrives while paused is untouched, the board panel keeps its four lines and the same order (the level and any grown-block note on the second line, the board and its pace on the third), and the panel still shrinks a line that grows too long for the board with the same routine it has always used, so the longer second line — up to "Level 3 - 2 blocks grew in - space bar, Enter or Resume to carry on" — is fitted rather than clipped.

The game page was not changed: the help section already says a pause is carried on with "Enter or the Resume button", and no sentence on the page quotes either of the two messages that were altered. One limit is left standing rather than hidden: as with every version of this game, the change was checked by reading the file and the page and by the platform's scanner, not by opening the page in a browser, so the fit of the longer panel line rests on the same shrinking-font routine the panel has used for a long score, average or block note.

Files: the game file only (the pause message in the pause routine, the two branches of the paused panel's second line, and comments).

Version 2.02

Housekeeping, and only the older versions page changed. That page — the one holding 0.1 to 1.38 — carried the gap version 2.01 named and left standing: two places on it still said the main changelog starts at 1.80, which stopped being true in 2.01, when the entries for 1.80 to 1.89 moved to the previous versions page and this page began at 1.90. Its lead now reads "Versions 1.39 to 1.89 are on the previous versions page, and 1.90 onwards on the main changelog", and the closing clause of its 1.9 entry — that page's own account of what lives where, the same one versions 1.84, 1.87 and 1.98 amended — now records this move as well, so the chain of clauses ends where the record really ends, at 1.90.

The closing link at the foot of that page was changed with the lead, from "Back to the previous versions (1.39 to 1.79)" to "(1.39 to 1.89)", so a reader who reaches the bottom is sent to the range the middle page really holds. Nothing else moved: the entries for 0.1 to 1.38 are in the words they had, each carrying the same short closing pointer to the later version whose change overtook it, and no version's record was rewritten, added or dropped. The two limits that every entry used to repeat still sit once, in Standing limits at the bottom of this page.

One limit is left standing rather than hidden: as with every version of this game, the change was checked by reading the pages and by the platform's scanner, not by opening them in a browser. No game code, game page, stylesheet or script changed — the game, the read-out, the copyable result line, the how-to box, the shortcuts, the statistics and every promise the page makes about play, pace, boards, endings and the best scores are what version 2.01 deployed, and the game file has not changed since version 2.00.

Files: the older versions page only (its lead, the closing clause of its 1.9 entry, and its closing link).

Version 2.01

Housekeeping, and only the two changelog pages changed. The entries for versions 1.80 to 1.89 have moved to the previous versions page in the words they had here, and this page now starts at 1.90. The reason is the usual one: this page is written whole by hand every time anything changes, so its length is the main cost of keeping it truthful, and it had grown to about 49 kilobytes, the longest it has been. Nothing was cut from the record — each moved entry is on that page in the words it had, with the one added closing clause on the 1.80 entry saying when it moved, the same treatment the 1.39 to 1.52 block got in 1.69, the 1.53 to 1.60 block in 1.79, the 1.61 to 1.69 block in 1.84 and the 1.70 to 1.79 block in 1.97 — and nothing new is claimed about any version.

The previous versions page now covers 1.39 to 1.89. Its title and its lead were rewritten to say so, and the closing clauses of its 1.53 and 1.69 entries — the two that track where each of the three pages starts — were extended to record this move as well, so the chain of clauses ends where the record really ends, at 1.90.

One gap was left standing rather than hidden: the older versions page, which holds 0.1 to 1.38, still says in its lead and in its 1.9 entry that the main changelog starts at 1.80. That was written in version 1.98 and is now one move out of date, because this page starts at 1.90. That page is about 40 kilobytes and is written whole by hand, so it was not rewritten this time. Version 2.02 wrote it and put both places in line.

No game code, game page, stylesheet or script changed — the game, the read-out, the copyable result line, the how-to box, the shortcuts, the statistics and every promise the page makes about play, pace, boards, endings and the best scores are what version 2.00 deployed.

One limit is left standing rather than hidden: as with every version of this game, the change was checked by reading the pages and by the platform's scanner, not by opening them in a browser.

Files: this page and the previous versions page only.

Version 2.00

Bug fix in the game file: the panel drawn over the board now names the ending, and the "new best" news has moved off the headline. Both ending panels wrote that news into the headline itself, so the panel over a cleared board read "New best!" in place of "Board full!", and the panel over a losing run read "New best!" in place of "Game over". The news was true in both cases, but it was standing where the name of the ending belongs, and it was there almost every time it could be: a cleared board is the rarest ending in the game and it also scores the most points of any run, so a board you have just filled has almost always beaten the best of the visit, which means the two words a player wants to see after a win — "Board full!" — were the ones the panel almost never showed. The game did say so in the line under the board ("Board full on the Classic 16x16 board at 135 ms a step. You scored …"), so the panel was the one place that stayed quiet about it.

The fix is one small helper beside the score line, and the two ending branches of the board drawing now use it. The headline of each ending panel is a fixed name for what happened — "Game over" for a run that ended on a wall, a block or the snake's own tail, and "Board full!" for a board that was filled — which is the same shape the paused panel has had all along, where the headline reads "Paused" and the facts sit under it. The new-best news, when there is any, is now written at the front of the second line, in front of the score, level and run clock ("New best! Score 120 at level 5 in 1m 03s"), which is where the rest of the run's own numbers already are.

Nothing else about the panels moved and no new state was added. Which runs count as a new best is decided by the same routine it always was, at the moment the ending line is written, and the drawing reads that one flag as before, so the panel and the sentence copied out under the board cannot disagree about it; the copyable line is built from the status line, which is unchanged, and it has carried its own "new best" mark at the front since it was written. The four lines of each panel are the four lines they were, in the same order, with the pace, the Enter and New game reminder and the footer line untouched, and the panel still fits its longest line inside the board with the same shrinking-font routine.

The game page was not changed. Its bullet about a cleared board already says the game says "Board full!", with the board, the score, the level and the pace — that sentence was true of the line under the board before this version and is now true of the panel over the board as well — and no other sentence on the page describes the headline of an ending panel. One limit is left standing rather than hidden: as with every version of this game, the change was checked by reading the file and by the platform's scanner, not by opening the page in a browser, so the fit of the longer second line rests on the same shrinking-font routine the panel has always used for a long score, average or block note.

Files: the game file only (one new helper beside the score line, the two ending branches of the board drawing, and comments).

This entry and the six above it moved here, unchanged, in version 2.15.

Back to the main changelog