Four cleanups recorded as advisories during the PR #26 review and deliberately kept out of it. No behaviour change. The 2026-08-09 sig-leave (closes #12) TODO entry still argued in the present tense that declining to save on SIGINT/SIGQUIT was also the safe choice, "because AutoSave gob-encodes live state that the main goroutine is still mutating, after removing the old file". Both halves stopped being true with #24: the encode runs on the game goroutine and saveFile is CreateTemp/Sync/Chmod/Rename with no Remove. The paragraph is now in the past tense and marked superseded, pointing at the fix/autosave-race entry, and says the split stands on C and on semantics alone — which is what the current savesOnSignal comment says. The false claim was in the #12 entry, not the #24 one; the latter's account of the old remove-then-write is correctly historical and is untouched, as is the err113 mention in the 2026-07-06 entry. encodeSnapshot becomes writeSnapshotFile: it encodes, fsyncs, chmods 0400 and closes, and the old name claimed only the first of those. Its doc comment now names all four and why the fsync is there. TestAutoSaveOnSignalWhileInShellEscape used t.Error for a precondition, so a save that was never taken fell through into assertRestorable, which can then only report a second, derived failure. t.Fatal, matching the identical assertion in the blocked-on-input test. serviceAutoSaveRequest's doc comment carried a 24-column stub line ("The result is still a") left by an earlier edit. gofmt does not rewrap comments, so fmt-check was legitimately green and nothing would have caught it; the paragraph is rewrapped to the block's width. Next Step deliberately not rotated: out-of-band issue work.
Rogue: Exploring the Dungeons of Doom (Go port)
Rogue is the original dungeon-crawling adventure game that spawned an entire genre. This branch is a faithful Go port of Rogue 5.4.4: explore procedurally generated dungeons, fight monsters, collect treasure, and attempt to retrieve the Amulet of Yendor.
Original authors: Michael Toy, Ken Arnold, and Glenn Wichman (1980–1983, 1985, 1999).
The port is function-by-function faithful to the classic C sources — same
dungeon generation (seed-compatible RNG), same combat math, same item tables,
same messages. The C reference implementation lives on the master and
modern-rogue branches; ARCHITECTURE.md documents both the
original program structure and the design of this port.
Building and running
Requires Go 1.25 or later and a terminal at least 80x24.
go build ./cmd/rogue
./rogue
# Restore a saved game
./rogue ~/rogue.save
# View high scores
./rogue -s
# Test the death screen (demo mode)
./rogue -d
In-game commands
Press ? in game for the full list.
- arrows or h/j/k/l/y/u/b/n — move (shift to run, ctrl to run until adjacent)
.rest,ssearch for hidden doors and trapsiinventory,,pick up,ddropqquaff potion,rread scroll,eeat foodwwield weapon,Wwear armor,P/Rput on / remove ringtthrow,zzap a wand,f/Ffight>/<take the stairsSsave,Qquit
Environment
# Game options, as in the original
export ROGUEOPTS="name=YourName,terse,jump,fruit=mango"
# Wizard (debug) mode, with a reproducible dungeon
ROGUE_WIZARD=1 SEED=12345 ./rogue
The scoreboard is kept in ~/.rogue.scores. Save files are Go gob snapshots
and, as in the original, are deleted when restored.
Code layout
game/ the game engine: one Go file per original C file,
function-by-function (see ARCHITECTURE.md for the mapping)
term/ tcell-backed terminal, replacing curses
cmd/rogue/ the executable
The engine package is fully headless-testable: make test runs scripted command
sequences, dungeon-generation golden checks, and an RNG compatibility test
against the original C generator.
For development, the Makefile wraps the toolchain: make fmt (gofmt +
prettier), make lint (golangci-lint), make test (the suite, under the race
detector with coverage and a timeout), and make check (all three). Use the
targets rather than invoking go test directly — they carry the flags the
project relies on.
License
BSD-style; see LICENSE.TXT.
Copyright (C) 1980-1983, 1985, 1999 Michael Toy, Ken Arnold and Glenn Wichman. All rights reserved.