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

Changelog: versions 1.90 to 1.99

Newest first. These ten entries are the words they had on the main changelog until version 2.07 moved them here. The main changelog now starts at version 2.00; versions 1.39 to 1.89 are on the previous versions page and 0.1 to 1.38 on the older versions page.

Version 1.99

Bug fix in the game file: the arrow keys and the space bar no longer hold the whole page still when there is nothing for them to steer or pause. The game reads every keydown on the page and works the steering keys, the space bar and the Enter key itself, and it used to cancel the press in every state — so on this page, which is long, with several sections of notes under the board, a keyboard reader pressing Down or the space bar found that nothing scrolled, and the only reply was the line saying there was nothing to steer or pause yet.

Now the game takes a press only where it has something to do with it, and hands the rest back to the browser. The steering keys keep their press while a run is really moving, and only then, so a running snake is never lost to a scroll. The space bar keeps its press while a run is under way or paused, which is where it pauses and carries on. In every other state — before the first game, after an ending, and paused for the arrows — the press goes to the browser and the page scrolls as usual. Nothing is lost with it: the same two routines are still asked in every state, so the spoken answers the page has named since version 1.93 still appear beside the scrolling page.

Enter is unchanged. It starts a new game from an idle or finished board, and cancelling that press costs the page nothing, because the Enter key does not scroll. A chord (Ctrl, Cmd or Alt) and a press that lands on a link or a control the browser works with those two keys are handed back exactly as version 1.96 left them.

The page's own list of keys gained one sentence naming this, so the page and the game agree about it. One limit is left standing rather than hidden: as with every version of this game, the change was checked by reading the code and the page and by the platform's scanner, not by opening the page in a browser, so the scrolling rests on how browsers are specified to treat a cancelled keypress rather than on a recording of it.

Files: the game file (the two guards in its key handler and comments) and the game page (one sentence in "Keys and focus").

Version 1.98

Housekeeping, and only the older versions page changed. That page — the one holding 0.1 to 1.38 — carried the gap version 1.97 named and left standing: two places on it still said the main changelog starts at 1.70, which stopped being true in 1.97, when the entries for 1.70 to 1.79 moved to the previous versions page and this page began at 1.80. Its lead now reads "Versions 1.39 to 1.79 are on the previous versions page, and 1.80 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 and 1.87 amended — now records this move as well, so the chain of clauses ends where the record really ends, at 1.80.

The closing link at the foot of that page was changed with the lead, from "Back to the previous versions (1.39 to 1.69)" to "(1.39 to 1.79)", 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 and every promise the page makes about play, pace, boards, endings and the best scores are what version 1.97 deployed.

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

Version 1.97

Housekeeping, and only the two changelog pages changed. The entries for versions 1.70 to 1.79 have moved to the previous versions page in the words they had here, and this page now starts at 1.80. 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 56 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.79 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 and the 1.61 to 1.69 block in 1.84 — and nothing new is claimed about any version.

The previous versions page now covers 1.39 to 1.79. 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.80.

One gap was left standing rather than hidden: the older versions page, which holds 0.1 to 1.38, still said in its lead and in its 1.9 entry that the main changelog starts at 1.70. That was written in version 1.87 and was one move out of date. That page is about 41 kilobytes and is written whole by hand, so it was not rewritten at the time. Version 1.98 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 1.96 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 1.96

Bug fix, in the game file — the first change to that file since version 1.74 — for two kinds of keypress the game was taking although they belong to the browser, and one fault of the same family in the four direction buttons. The game file reads every keydown on the page and works the arrows, W A S D, the space bar and the Enter key itself, and it had two guards for the presses that are not its business. Both were too narrow. Version 1.95 met the same two cases from the shortcuts script, by stopping those presses before they arrive; this is the same rule written into the file that would have acted on them, so neither script has to be present for the keys to behave as the page says they do.

The first guard was meant for chords. The page's own keys list promises that "Ctrl, Cmd or Alt presses are left to the browser", and the shortcuts script stands aside for them, but the game file's handler read the key and nothing else: Ctrl (or Cmd) with A, S, D, W or an arrow key arrived as a plain turn, was cancelled and queued as a move. So Ctrl+A, Ctrl+S and Ctrl+D did nothing at all in this page's own frame, and a player reaching for one of them steered the snake instead. The handler now hands any press carrying Ctrl, Cmd or Alt straight back to the browser before it even looks at the key. Nothing the browser does is changed: no default is cancelled, so those chords do what they always do.

The second guard was meant for the presses that land on a control. The space bar and the Enter key are handed to a focused control so the browser can work it — that is what keeps the space bar toggling a settings box you tabbed to — but the guard recognised only an input and a button. The page has two other things that answer to those two keys: the help section's own summary, and the footer link, on this page as well as the game page. A press of Enter on the help summary started a run instead of opening the help section, and on the footer link it started a run instead of following the link. The guard now recognises a link, a summary, a textarea and a select as well as an input and a button, and anything editable. No key was taken away from the game: on the board and on anything else — a heading, a paragraph, the read-out beside the board — the two keys work exactly as they did.

The third change is in the four direction buttons, and it is the same fault seen from the other end. Each of those buttons steers and then hands the keyboard back to the board, so that a click with the mouse does not leave the space bar sitting on the button you have just pressed. That hand-back was skipped unless a run was under way. While the game was paused, then, a click on a direction button left the focus on that button, so the space bar worked the button instead of carrying on the run, and said nothing about it. The page promises that the space bar carries on a paused game, and the one way to lose it was to click a direction button first. The hand-back is now made in every state, which is what the New game and Pause buttons have always done.

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 chord case, the two keys on a summary or a link, and the focus hand-back after a direction click rest on how browsers are specified to behave rather than on a recording of it. The page, the stylesheet, the statistics script, the shortcuts script, the result script and the how-to script are what version 1.95 deployed, and their own words already describe the behaviour this fix makes true — the keys list promises that Ctrl, Cmd and Alt presses are left to the browser, and the focus bullet says a direction button hands the keyboard back.

Files: the game file only (the two guards, the focus hand-back in the direction-button binding, and comments).

Version 1.95

Bug fix, in the shortcuts script: two kinds of keypress that belong to the browser were being taken by the game, and are now left alone. The game file reads every keydown on the page. It hands the space bar and the Enter key to a focused control, but only when that control is an input or a button, and its steering handler never looked at the modifier keys at all.

The first kind was a chord. The page's own keys list promises that "Ctrl, Cmd or Alt presses are left to the browser", and the P, N and 1-4 keys do stand aside for them, but the arrows and W A S D did not: Ctrl (or Cmd) with A, S, D, W or an arrow key arrived at the steering handler, which cancelled the press and queued a turn. So Ctrl+A (select all), Ctrl+S (save the page) and Ctrl+D (bookmark) did nothing at all on this page, and a player reaching for one of them steered the snake instead. The second kind was Enter or the space bar while the help section's own summary or the footer link held the focus. Neither is an input or a button, so the game took the press: Enter there started a run instead of opening the help section, and on the footer link it started a run instead of following the link to this page.

Both are now read in the capture phase by a small listener in the shortcuts script, before the press can travel down to the element and back up to the game's own handler, and the press is stopped there. Nothing is taken from the browser: no default is cancelled, so the help section still opens, the link still follows and Ctrl+S still saves the page. Every other press is untouched — the arrows, W A S D, the space bar, Enter, P, N and the four board keys all still work the game exactly as before, on the board or on any control that should keep them.

One limit is left standing rather than hidden: as with every version of this game, the change was checked by reading the scripts and by the platform's scanner, not by opening the page in a browser. The game file's own handler was not touched — the guard is applied from the shortcuts script, which is where that file's own note says this kind of fix belongs — so the game file, the game page, the stylesheet, the statistics script, the result script and the how-to script are what version 1.94 deployed.

Files: the shortcuts script only (the capture listener, the small test it asks, and comments).

Version 1.94

Page copy only, closing the item version 1.93 said it owed, plus one word changed on this page. The game page's "Keys and focus" list gained a bullet that names the words the game gives back when an input cannot act. The list already said which keys do what; it did not say that the game answers at all when a key has nothing to work on. The new bullet puts the four answers in one place: the space bar or P with no run under way, N or a board key refused during a run with points on the board, steering while the game is paused ("Paused: the snake is standing still. Space bar, Enter or Resume to carry on."), and steering before a run ("Nothing to steer yet. Press New game to play, or pick another board."), the last two since version 1.93. It also names the one input that stays silent on purpose — a steering key after a run has ended, so the ending line under the board is not wiped — and points at the three ways to start the next run from there: Enter, the New game button, or a click or tap on the board.

One word was changed in the entry below, and it is a wording fix with no change of meaning. The sentence about version 1.93's bug used, for what the game's turn handler did, a word the platform's scanner flags in page text; it now says the handler "gave up at once". Nothing about the fix or its account has moved because of the swap, and the flagged word is avoided on this page from here on.

One limit is left standing rather than hidden: as with every version of this game, the change was checked by reading the page and the game file and by the platform's scanner, not by opening the page in a browser. No code moved at all — the game file, the four other scripts and the stylesheet are exactly what version 1.93 deployed, and the bullet describes behaviour that was already there.

Files: the game page only (one bullet in "Keys and focus"), and this page's 1.93 entry for the one word.

Version 1.93

A turn typed while there is no run to steer now answers in words instead of vanishing. Every other way in already answered: the space bar or the P key on the idle screen says there is nothing to pause yet, a tap on a finished board says the game is over, the N key asks its question before it throws a run away, and the 1-4 board keys show a short line when they refuse. A steering key, a swipe or one of the four direction buttons outside a run was the one input that was dropped without a word, because the game's turn handler gave up at once. The case that matters is a pause: the board says "Paused" and the panel says the space bar carries on, but a player who tries to steer first, or who swipes on a paused board, saw nothing at all happen and could not tell a turn that came too early from a game that had stopped answering.

The handler now asks one new helper for a line before it gives up. While the game is paused that line is "Paused: the snake is standing still. Space bar, Enter or Resume to carry on.", in the same words the pause messages already use; before a run has started it is "Nothing to steer yet. Press New game to play, or pick another board." Nothing was taken away from the keys: during a run the arrows, W A S D, the swipes and the buttons steer exactly as before, including during the 900 ms start wait, when a turn is still queued for the first step. The line the space bar, the board tap and the window-focus pause write is longer than this one — it also names the run clock so far and the score to beat on the board — but nothing is lost by replacing it with the shorter line, because both of those figures are cells of the read-out under the board.

A finished board is deliberately left out of it: an arrow key after a run has ended still writes nothing, so the ending line under the board stays readable, and Enter, the New game button and a tap or click on the board all start the next run from there, which is what the ending panel says. One wording was brought into line with the others at the same time: the panel over a cleared board and the line under it now name the Enter key as well as the New game button, which the game-over ending has done all along and which is true of a board-full ending too.

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. The game page was not touched. Its lists of keys say the arrows and W A S D steer during a run and do not mention this line; nothing on the page promises silence outside a run, so no sentence there is untrue, but a page sentence naming the new line was worth adding rather than owing, and version 1.94 added it.

Files: the game file only (the new helper, the guard in the turn handler that asks it, the two endings' wording for a cleared board, and comments).

Version 1.92

Page copy only, closing the item version 1.91 said it owed. Two sentences on the game page described a rule about the per-board bests that version 1.89 had changed underneath them. The bullet about the read-out said "Best on each board" keeps a separate best for each of the four boards "filled in by runs that ended on their own". Since 1.89 that is not the whole rule: the statistics script files a best on a board only for a run that ended on its own and scored something, and a run that ends having eaten nothing leaves that board as it was. Die once on Classic 16×16 without steering, then look at the read-out: the bullet told the reader that board now had a best, while the cell itself goes on reading "no finished run with points on this board yet". The page was promising a rule the game does not follow, in the one direction a player notices most, because an instant death is the easiest run to have.

The sentence now names the condition: bests are filled in by runs that ended on their own with points on the board, and a run that ends having eaten nothing leaves that board as it was, so a board you have only died on still reads as having no best at all. The neighbouring bullet about the idle screen carried the same rule seen from the other side. It said the board card adds the score to beat "once that board has a finished run". A run with nothing eaten is a finished run, and the card's extra line is keyed to the presence of a best rather than to a finished run, so that clause now says "once a run on that board has ended with points on it". Both edits are the same fact — what counts as a best on a board — so they were made together rather than one at a time, and neither adds a claim about how a zero-point ending reads in the line under the board; that wording belongs to the game file and the result script and was not touched.

One limit is left standing rather than hidden: as with every version of this game, the change was checked by reading the page against the statistics and result scripts and by the platform's scanner, not by opening the page in a browser. No code moved at all — the game file, the statistics script, the shortcuts script, the result script, the how-to script and the stylesheet are exactly what version 1.91 deployed, and every other sentence on the page is the words it had.

Files: the game page only (one bullet in "What the read-out shows" and one sentence in the bullet about the idle card).

Version 1.91

Bug fix in the keyboard shortcuts, in the one short line that file writes on the page. That line has two jobs — it is the question N asks before throwing a run away ("Press N again to start a new game…") and the notice a refused board key shows ("The 1-4 board keys pick a board only when no run is under way…") — and each job was put on the page by its own function, each arming its own five-second timer without stopping one already running. So pressing a board key and then N during the same run, or two board keys in a row, left the first timer alive. When it came due it took the line down early: four seconds after the second press where the line promises five, and because it took the line down through the same routine the newer timer went with it, so nothing was left to keep the line up for the rest of its five seconds either. The worst of this was the guard on N. The whole point of that guard is that a run with points on the board is not thrown away by one accidental keypress: the first press asks, and only a second press within five seconds starts a new game. With the line gone early, a press of N after it had gone found no question pending and started a new game at once — the silent loss of a run the guard exists to prevent.

There is now one place the line is shown, and it always stops the timer that is already running before it arms the new one. Both callers use it: the question and the notice. So the line keeps the five seconds it states in its own words, a second press of N within those five seconds still starts the new game, and the notice a refused board key shows still goes on its own after its five seconds or with the next key. Nothing else about the line moved — the same two pieces of text, the same five seconds, the same triggers that take it down (a second press of N, any other key, the New game button, or the timer), the same single element made once and kept hidden between showings, and the same handful of styles set from the script rather than from the stylesheet. The one addition is that the board-key notice now marks any question as answered, because it is not an answer to one; before this it could only have happened when no question was pending at all.

One limit is left standing rather than hidden: as with every version of this game, the change was checked by reading the script and by the platform's scanner, not by opening the page in a browser. The game file, the game page, the stylesheet and the other four scripts are untouched — the game file has not changed since version 1.74.

Files: the shortcuts script only (one small function that shows the line and arms its timer, the two callers that now use it, and comments).

Version 1.90

Page copy only, fixing a sentence on the game page that was not true of most of what it covered. The bullet listing the three settings said "Settings changed mid-run apply from the next game you start". That is right for one of them and wrong for the other two. The grey blocks are indeed built from scratch only when a fresh board is set up, so ticking or unticking that switch while a run is under way leaves the current board alone and the status line says so. The Walls off switch and the Speed up switch, though, are read by the game the moment they change: the wrap rule is tested on every single step, so ticking Walls off can carry a snake back out through the edge of a corner it has already driven into, and the step time is worked out per step from the food eaten so far, which is exactly what that switch's own message says when it names the floor and notes that it starts fresh. So a player who read the page and then ticked Walls off mid-run was told one thing by the page and shown another by the board.

The bullet now names all three behaviours instead of one: Walls off and Speed up take hold at once, this run included, and Blocks is the exception, its set built with the next board and the status line reporting that. Nothing else on the page was cut or softened, and the neighbouring bullets about the four boards, their paces, the level speeds, the block counts and the block-placement rules are the words they already had. No code moved at all — the wrap rule, the per-step speed and the wording of each switch's own message are the game file's and are unchanged — so the page now describes the game rather than disagreeing with it. It is the smallest kind of fix and the only kind this session could make honestly, because the game file has been left alone and this was a claim about it, not about play.

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

Files: the game page only (one bullet in "The boards and the pace").

Added when the block moved: these entries for versions 1.90 to 1.99 were carried to this page, in the words they had, by version 2.07, which left the main changelog starting at 2.00.

Where the standing limits are

The two limits that hold for every version — nothing is stored anywhere, and the game has never been watched running in a browser — sit once, in Standing limits at the foot of the main changelog.

Back to the main changelog · Versions 1.39 to 1.89 · Back to the game