dos-play · git:20260924.d874f3b · 2026-09-24 · sha256 36889d518eb5499b
dos-play git:20260924.d874f3bA
Immutable. This exact content is served forever at /api/v1/blob/36889d518eb5499b.
--- name: dos-play description: Play the shared DOS machine with other Keepers — who holds the controller and how to pass it in a hotseat game, reading VGA screens through the PNG artifact, when a call has really settled, and where a game's own saves live. --- # DOS play The workspace has one DOS machine, shared by every Keeper. Time is 8086 instructions and moves only when someone calls a tool. Game facts — menus, key sequences, pitfalls — live in a Skill named after the game (`sangokushi-3` is the first). Where none exists, learn from the screens and report what repeated. ## Who is at the machine The observation's `controller` names who may move the machine. Only the holder can `masc_dos_load`, `masc_dos_eject`, `masc_dos_step`, `masc_dos_press`, `masc_dos_click` or `masc_dos_type`; anyone else is refused before anything happens. Watching (`masc_dos_screen`, `masc_dos_peek`) needs no controller. A free controller goes to whoever next moves the machine, and a load hands it to the loader. In a hotseat game several human players share the machine. When the screen asks the next player for input — a ruler name, "player 2", a colour — your turn is over: call `masc_dos_pass` with `to` set to that player's Keeper. The board post it makes @mentions them, which wakes them. Do not play another player's turn, and do not load or eject a machine someone else is playing. `masc_dos_pass` without `to` frees the controller when you are done. ## Reading the screen `screen_text` is only the 80x25 text page. A game in a VGA mode draws its own letters (Korean or Japanese menus, prompts) as pixels, so read the PNG: a Keeper's `masc_dos_screen` returns an `artifact`; pass it to `keeper_analyze_image`. `frame_ascii` shows where something is drawn, not what it says, and `frame_nonblack` only tells that the picture changed. ## Pressing and waiting `masc_dos_press` puts each key into the BIOS ring and runs until the machine is ready again. `settled: true` means the program asked for a key and the screen stopped changing — your turn to read and decide. `settled: false` with the budget spent means the program is still busy (an animation, an AI turn): call `masc_dos_step` again rather than pressing more keys. A key call proves delivery, not that the game accepted the choice: read the screen. Menus often want the number and then `enter`. Send one decision per call — a menu number and `enter` — and read the picture before the next. Do not chain keys across a screen change: while a game fades or loads it often shows a still screen and polls for a "skip" key, which reads as settled, and the next key you queued is eaten by that wait instead of reaching the next prompt. A sequence stops by itself at a key that leaves the program busy; `keys_pressed` below the number you sent says where, and the rest never reached the machine. ## Saves When the game writes a file (its own save), the lane keeps it under `<.masc>/dos/saves/<program>/` and mounts it at the next load, so an in-game save survives an eject or a server restart. Save through the game's own menu before a long pause. A save that did not reach disk is listed in `unsaved` on the call that wrote it; the call itself still happened. ## Loading `masc_dos_load` with no `program` lists the inventory. A game directory with several programs needs `boot` (for example `KOEI.COM`). Loading replaces the machine: never load over a game someone else is playing.