These moved from the Coffey-Labs org to jcoffey-dev, where they belong.
GitHub redirects a transferred repository, so nothing was broken by
leaving them -- but a source link that lands via a redirect is still
naming an owner that no longer holds the code, and the redirect only
lasts as long as nobody creates a repository of the same name in the
old place.
Only the seven repositories that actually moved are rewritten. Every
other Coffey-Labs URL is left alone: ihasmail, cairnobs and the rest
are still there.
Two things a game served from a subdirectory of somebody's site ought to have
and this did not: a way back up to the site, and enough in its head for that
relationship to be legible to something that is not a person.
The way back sits leftmost in the footer, next to SOURCE, because that row is
already where the chrome lives and leftmost is where a way back belongs. The
arrow is a pseudo-element rather than part of the label so it can be the right
arrow for the machine you are looking at: a chevron under the lamp, and the two
ASCII characters a Teletype could actually strike on the paper skin.
It is an absolute URL rather than "/". This game is served from a subdirectory
in production and from the root in development, so the relative answer is right
in one of those and points at the game itself in the other. The source link
beside it has always worked this way for the same reason.
The head gains the usual set -- canonical, Open Graph, Twitter, robots -- plus
two pieces of structured data. VideoGame says what this is, that it is free,
and that one to four people can play it. BreadcrumbList says the same three
steps the footer link offers: this game sits under the games site, which sits
under jcoffey.dev.
Canonical earns its place rather than being boilerplate. The container serving
this falls back to index.html for any path under /wumpus/, which is right for
the app and wrong for a crawler -- without it, /wumpus/anything-at-all is a
separate indexable page with identical content.
The preview image is served by the site rather than carried here. There is no
artwork file in this repository and there is not going to be one; a social card
is not part of the game, and it sits with the deployment, which is where the
canonical URL points anyway.
A noscript block describes the game and offers the way onwards, so a reader
without scripts and a crawler that does not run them get something better than
an empty div.
38 tests. Build clean.
A browser recreation of Gregory Yob's 1973 game. The rules are his and are
free to use; the sentences he wrote to explain them are not, and none of them
are here. Every line this game prints was written for it. NOTICE.md sets out
what is ours, what is not, and why -- the same argument the lemonade stand
makes about its own text, made before shipping rather than after.
Two skins over one game, and the period one is a Teletype rather than a
television. Wumpus is six years older than the Atari the lemonade stand runs
on. It lived on a timesharing service you telephoned and it printed on paper,
which is why the game asks you to remember things: there is no screen to look
back at. So 1973 is fanfold and black ink and a print head hammering out one
character at a time, and the remaster is the same cave with the lamp on. The
rules never differ, and neither does a single word.
The cave is proved rather than trusted. The adjacency table is typed out by
hand, because a generated dodecahedron comes out with an arbitrary numbering
and this is the numbering every listing has used since 1973 -- so a transcript
from a magazine still makes sense against it. Typed out means it can be typed
wrong, and a wrong table would not crash: it would quietly stop being a
dodecahedron while the game still played. cave.test.ts checks degree three,
symmetry, connectivity, a diameter of exactly five, and three pentagons
through every room.
The map is not allowed to know more than the paper. CaveMap draws only from
the rooms the hunter has stood in and the warnings those rooms gave, and it
marks suspects rather than answers. That guarantee is asserted in the engine
rather than in the component, because it is a property of the engine and would
still have to hold if the map were thrown away.
Drawing a solid flat took two attempts. Rooms 6 to 15 are not two pentagons at
different depths, they are one ten-room ring alternating inward and outward
wiring, and getting that wrong still draws and still looks cave-shaped. It is
much harder to read. The test checks the property that actually matters --
that no tunnel crosses another -- and was confirmed to fail against the bad
layout before it was believed.
The dial-in is a real Bell 103 call rather than a noise: dial tone at 350 and
440 Hz, Touch-Tone dialling, ringback at 440 and 480, the far modem's 2225 Hz
mark tone, then both ends keying at once through a telephone band. The screech
everybody remembers is a V.34 handshake from the 1990s and could not have
existed here.
38 tests. Typecheck clean.