Game now derives the MapView from the world each turn; GameTest gains a
real World (the per-turn map push needs it).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Side panel (map slot) now sizes to ~25% of window width, clamped to
[160, 320] scaled px, recomputed on resize — instead of a fixed width.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Java Swing does not reliably pick up desktop display scaling on every
Linux session (tiny text on HiDPI laptops). Detect the display scale from
the default GraphicsConfiguration transform (falling back to screen DPI)
and multiply all font sizes by it, plus the window size. Add live zoom via
Ctrl +/-/0 as a guaranteed manual override.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Semantic output model (Style/Span/StyledText) + RoomView/Hud views,
GameIO extended additively (write(String) stays as default), ConsoleIO
(ANSI + box-drawing, tiered glyph modes) and SwingIO (region layout,
JTextPane, bundled font) renderers, command + TestIO migration. Map,
menu, save, music explicitly deferred to later sub-projects.
Also: capture "don't overwhelm / distribute info across regions" and
"B baseline + ASCII for big moments" decisions in the backlog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- decisions: standard collections only, libraries allowed
- main menu + settings + saved-games list
- save/load system
- GUI music: per-room via YAML, external folder, compressed + streamed
- game core: "restore the power" main goal, 5-piece mechanic spine,
quest chain routing the player room-by-room, condensed by design
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Living backlog of ideas to take the game beyond the required minimum:
richer presentation, nerd-font strategy, map, quest system, ~60-min
content expansion. No design committed yet.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Task 3 adds IntBinarySearchTree with iterative add/contains and a
test class covering empty trees, duplicates, and degenerate ascending
and descending insertion orders.
Task 4 adds IntHashSet backed by an IntLinkedList bucket array with
a 0.7 load factor, Math.floorMod-based hashing for negative-int
safety, doubling resize that rehashes via a private
addWithoutResize helper, and a test class covering negatives,
Integer.MIN_VALUE, forced collisions on bucket 0, and 100-element
inserts spanning three resizes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Doubly linked list with head/tail references for int values (Task 1)
and a generic LinkedList<T>/ListNode<T> version (Task 2). Both
implement add, get, remove, getSize with O(n/2) walks via the
closer-end heuristic. Includes IntLinkedListTest covering empty,
single-element, head/tail/middle removal, and out-of-bounds cases.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>