Explore this system
Step through curated paths without changing the source diagram.
Beat
Next
ReadyChapter 01 / 01
Guided chapter
Diagram guideExplore this system
Inspecting compiled semantics
E ExportT ThemeS Style0 Reset+ Zoom in- Zoom outEsc Close
Find a node
⌕/
No matching nodes
Semantic passport
Verified source
Authored reach
Route probeChoose a start node
Pick two semantic nodes on the diagram
Choose the source, then the destination. Direction matters.
Semantic lensCompare system roles
Choose up to two semantic kinds. One reveals its real traffic; two compare only direct authored relationships.
Choose a kind to inspect its nodes and touching relationships.
Semantic radar
Building overview
Click nodeDrag to pan
Edge, in and out
• Telnet on :33333 and :44444, AI clients on a separate :55555
• HTTP on :8090 serves the web client and upgrades /ws
• Either transport ends up as the same ConnectionDetails, and internal/inputhandlers runs the login, IAC and ANSI chain on it
• Game text does not travel back through the listener goroutine or the HTTP server
• That goroutine still writes the splash, the login flow and the prompt redraw itself
• ConnectionDetails.Write is the single split: a websocket text frame, or a raw socket write
Game loop
• MainWorker fires a turn every 50 ms; 80 turns make a 4 second round
• Every tick takes one global world lock, so game state stays single-writer
• Combat, mob AI, quests and achievements are all event listeners
• Game text is queued as an events.Message rather than written where it is produced
• Message_SendMessage drains those events inside the tick, parses ANSI, and calls connections.SendTo
World data
• Rooms, mobs, items, quests and dialogue are hand-authored YAML
• The template always loads; a saved instance is layered on top only if one exists
• There are two save layers, not one: rooms.instances/ unmarshals straight onto the room struct
• mobs.instances/ copies a fixed record instead, so a mob save can only carry the fields that record declares
• Player saves live in users/ and are not part of the instance overlay
Architecture diagram • Built with Archify • Create yours ↗ • Hover to trace • R route • Click to focus • +/− zoom • M radar • [/] views • P play story • T theme • E export