SYSOP'S CHANGELOG
BYTENET DUNGEON · BUILD HISTORY · NEWEST FIRST
Every meaningful save of the game bumps the BUILD stamp — you can see the one you're
running at the top of the Adventurer's Manual (press ? in the game) — and gets an entry here.
Player-visible changes come first in each block; the notes in gold are for whoever edits the code next.
2026-09-04 — evening
BUILD 2026-09-04 / visual-v2m · filter-v4
Thirteen builds, almost all of them text mode. The file grew from 161,498 to 167,389 bytes.
TEXT MODE
- The ASCII art was scrambled, not misdrawn.
#title-artand#town-bannersit inside a centred screen, andtext-align: centeron a<pre>centres every line separately — so lines of different lengths slide sideways and the columns shear. Measuring the first visible glyph on each line of the town banner showed a 32 px drift, which is why the tree trunks sat off their foliage. Both blocks now usetext-align: leftwithwidth: max-contentandmargin-inline: auto, so the block centres while the columns hold. The art itself was regenerated with figlet to confirm the source was correct all along. - The map sat off-centre behind a scrollbar because
#map-stage— the wrapper added for the side panel — stayed a full-width empty block in text mode. Hidden now, as the side panel already was. - X actually zooms. The text renderer never referenced
zoomLevel; it always drew the full 51×19 grid, so the key logged a message and changed nothing. It now crops around the hero — 51×19, 31×13, 21×9 — clamped at the map edges, with font caps of 22/34/48 px so zooming in enlarges the glyphs instead of merely showing less map. - The text map is sized by measuring its container (
fitAscii), not by viewport media queries. Nineteen fixed rows at 22 px overflow on a short or zoomed window, and a height media query cannot see status-bar wrapping or page zoom — which is exactly the combination that produced a scrollbar. - The side panel appears in text mode too. It had been hidden by a
body:not(.video-tiles)rule, andrenderSidePanel()was only called from the tile branch, so un-hiding alone gave an empty box. - The panel now opens with CALLER — handle, level and class. Your handle previously appeared nowhere during play: title screen, town greeting, one log line on descent, then gone.
#map-wrapusessafe center, so a map larger than its box stays reachable instead of clipping unreachably at the top.
THE FIRST-CALL BRIEFING
- The onboarding screen was closing itself. Any keypress dismissed it, so the 1/2/3 that chose your class — or its auto-repeat — shut it instantly, and
leaveBriefing()writes the once-per-browser flag on the way out. New callers were never reading the screen written for them. Keys are now ignored for 600 ms after it appears. - It also could not scroll.
.crt-screenisoverflow: hiddenand the briefing had no height constraint, so on a short window the text was clipped — along with the [ UNDERSTOOD ] button.
SCREENS THAT COULD NOT SCROLL
#title-screen,#class-screenand#gameover-screenwere eachflex: 1withjustify-content: centerand nomin-height: 0or overflow. Under browser zoom or on a short window their content was silently cut at both ends — the DELETE SAVED HERO button and the title-screen links were unreachable without going fullscreen. All three now scroll, withsafe centerkeeping the top reachable.- Those title-screen links were the dimmest green in the palette and read as decoration rather than links. Now cyan, like every other link in the game.
NEW PAGES
- A screenshots gallery at dungeon-screens.html — six shots cropped to the CRT bezel, two columns on desktop, each clickable to full size. Linked from the homepage door-game card, the title screen, and this page.
- This changelog.
METADATA
dungeon.htmlcarried no Open Graph tags, so the link shared anywhere produced a bare URL with no preview. Addedog:andtwitter:tags plus a canonical, with the floor-10 dragon as the card image.
FOR WHOEVER EDITS NEXT
- ASCII art in a
<pre>must betext-align: leftwith the block centred. Per-line centring is the failure mode, and it stays invisible until the lines differ in length. - Any screen that can outgrow the frame needs
min-height: 0and its own overflow..crt-screenisoverflow: hidden, so anything taller is simply cut, with no scrollbar to hint at it. This caught three screens in one day. - The host caches 404s in Varnish, keyed on path only — query strings are ignored. Requesting a URL before its file exists poisons it for a while; renaming the file is the instant way out.
2026-09-04 — afternoon
BUILD 2026-09-04 / visual-v2 · filter-v4
Five passes in one sitting. The file grew from 137,938 to 161,498 bytes.
FIXES
- Status bar no longer hidden under the ◀ BYTENET.COM and ? corner buttons (
#game-screen { padding-top: 22px }). - Designed floors 1, 5 and 10 extended to the full 19-row grid. They previously stopped at 12–14 rows and
parseAsciipadded the rest with solid rock. Floor 1 gained a third band of rooms; floor 5 a lower pair of chambers; floor 10's dragon arena is nine rows tall with the ring corridor running all the way round.
READABILITY
--phosphor-dim#00661a→#2fb050and--phosphor-mid#00b830→#1fd24d. Lifts stat labels, older log lines, system messages and the footer together.- Faded log lines 45% → 70% opacity; footer 16 px in mid green.
- Floor 10 wall palette brightened after the first cut was too dark to see.
DUNGEON SCREEN
- Canvas sized to the shape of the play area (
fitCanvas), so 2× and 3× zoom fill it instead of sitting in a letterboxed strip. On phones (under 500 px) the base width halves so tiles get twice the pixels. - HP and MP bars beside the numbers. HP green → amber at 50% → red at 25%.
- Hybrid camera: follows the hero, may overshoot the map edge by a sixth of the screen (
W / 6,H / 6indrawTiles). - Torch-lit lighting: full brightness beside the hero easing to about 45% at the edge of the ten-tile sight radius, plus a warm radial glow. Skipped when a scroll reveals the map.
- Four wall and floor palettes by depth: grey 1–3, moss 4–6, rust 7–9, obsidian and red on 10 (
WALL_PALS,FLOOR_PALS,depthBand()). - Minimap top-right at 2× and 3× zoom: walls grey, remembered floor dark, stairs gold, doors brown, visible monsters red, hero cyan. One pixel per tile on narrow canvases.
- Side column (desktop, tile mode): GEAR (weapon, armour, potions), FOES (monsters seen this floor — red with a count when in sight, "lost" when out of sight, plus an "unseen" count), FLOOR (depth and turn).
renderSidePanel(). - Floor transition card "— FLOOR N —" on descend and ascend (
floorWipe).
COMBAT AND ANIMATION
- Floating damage numbers (white for hits, gold for crits and shadow strikes, magenta for Firebolt, red when you're hit), a 140 ms white flash on struck sprites, and a 220 ms screen shake when the hero is hit. A
requestAnimationFrameloop runs only while something is animating (FX,fxStep). Shake respectsprefers-reduced-motion. - Bosses drawn at 2×2 tiles, anchored bottom-centre, drawn last.
- Two-frame idle animation for every monster: the top half drops one pixel on the 480 ms tick. Frames are derived automatically (
SPR_IDLE,idleFrame). - Item glint on the alternate frame; cyan glow under the hero; expanding cyan ring when a floor loads (
state.arrived→FX.pulseT0). - Corner buttons breathe with a slow phosphor box-shadow.
SOUND
- Web Audio PC-speaker synth, no audio files. M toggles, off by default, choice saved as
bytenet_dungeon_sound. Works in the dungeon and on the town screen. - Cues: hit, kill, hurt, gold, potion, door, trap, stairs down and up, level up, a modem burst on wiring gold, a dirge on death, a fanfare on victory. Town purchases chime; refusals thud. All in
sfx().
TEXT MODE
- Walls render as ▒ (CP437 medium shade) in dim green instead of #.
LOG
- The log keeps 200 messages (was 30). T opens a scrollable transcript; T or Esc closes it, any other key closes it and is then acted on.
TOUCH CONTROLS
- The grid is five columns with new SND, WIRE and LOG buttons. Side panel hidden and status bar 14 px under 720 px.
MANUAL
- New rows for M and T; wall symbol ▒; new READING THE SCREEN section; new SYSOP'S BULLETIN section at the end (replace its lines and date each build rather than appending). Footer key legend updated.
HOUSEKEEPING
- Sysop caller-log beacons were stubbed during all testing; no test callers were recorded. Test characters were deleted from the browser afterward.
2026-07-31
BUILD 2026-07-31 / filter-v4
Baseline for the entries above.
- Fourth revision of the handle profanity filter word lists (
handleIsClean,normalizeForFilter). - Caller log with
departevents so the roster shows where players actually got to. - First-call briefing screen, YOUR FIRST CALL primer in the manual, one-time contextual tips.
- In-dungeon banking: dial-up wall terminals on roughly 40% of floors 2–9, 10% wire fee, one use each.