Which chapter element would you like to add?

Fictional Terminals

Chapter 4 by Friedman Friedman

Fictional Terminals

Fictional terminal blocks present a computer screen, command console, or passive system log inside chapter prose. Readers see a titled panel whose contents remain story text.

A terminal never executes a command or connects to a real system.

Preview

The security log appears in a terminal panel with its status in the header:

SECURITY LOG
Status: ARCHIVED

[03:14] Door B opened
[03:16] Unauthorized access detected
[03:17] Recording terminated

The reader sees SECURITY LOG as the title, Status: ARCHIVED, and the three authored log lines.

Copy the syntax

Give the opening tag a quoted title, write a non-empty body, and close the block on its own line:

{terminal "SECURITY LOG"}
[03:14] Door B opened
[03:16] Unauthorized access detected
{endterminal}

Add optional authored status text after the title:

{terminal "SECURITY LOG" status "ARCHIVED"}
[03:14] Door B opened
[03:16] Unauthorized access detected
{endterminal}

The title is required. The status is optional. Both must contain visible text and use matching straight single or double quotation marks.

Write the terminal body

A regular terminal body supports ordinary Markdown, links, reader and Game State values, conditional text, and compatible chapter elements. For example, a lock can ask for a fictional command and an action can apply a real story change:

{terminal "MAINTENANCE CONSOLE" status "LOCKED"}
Awaiting operator command.

{lock "Enter command" answer "override 7"}
ACCESS GRANTED
{endlock}

{action "Restart coolant pumps" once set game:coolant_online = true}
{endterminal}

The terminal remains a visual container. The lock checks the exact authored answer, and the action changes the existing coolant_online Game State value when a game is active.

A body line beginning with $ can look like a command prompt, but it is never executed. Use inline code or a fenced example when braces, ${HOME}, or another CHYOA-looking tag must remain literal instead of becoming chapter syntax.

Show output one line at a time

Place one complete stream inside a terminal when its output should appear automatically, one line after another. Try this working example:

NODE 7
Status: LIVE

$ connect node-7

Resolving address...

Secure channel established.

To create it, write:

{terminal "NODE 7" status "LIVE"}
{stream}
$ connect node-7
Resolving address...
Secure channel established.
{endstream}
{endterminal}

The terminal begins when it reaches the visible part of the chapter. A blinking cursor appears before the first line, then each non-empty source line appears in order. The delay is automatic and gives the reader time to read each line; authors cannot set its speed. Selecting the cursor reveals only the next line, then automatic pacing continues.

During playback, Show all output in the terminal header reveals every remaining line. When the output finishes or the reader shows everything early, that control becomes Replay output, which starts the sequence again from the first line.

On a narrow screen, these controls appear as icons beside the terminal title: fast-forward for Show all output and a replay arrow for Replay output. The terminal status stays on the line beneath them.

Add a start button to terminal output

Add one non-empty quoted label after stream when the terminal output should wait for the reader. The terminal frame, title, and status remain visible, but scrolling to or past it does not start this working example. Select Look at the terminal to begin:

NODE 7
Status: LIVE

$ connect node-7

Resolving address...

Secure channel established.

To create that start control, write:

{terminal "NODE 7" status "LIVE"}
{stream "Look at the terminal"}
$ connect node-7
Resolving address...
Secure channel established.
{endstream}
{endterminal}

The reader first sees Look at the terminal inside the empty terminal output area. Selecting it hides that start control, begins the same paced line-by-line output, and shows Show all output in the terminal header. When every line has appeared, that header control becomes Replay output. Scrolling to, away from, or past a labeled stream never starts it; only the reader's start selection does.

The authored start button is used only for the first playback. Replay uses the standard Replay output button, and reloading the chapter makes the authored start button available again. After playback starts, scrolling past a cursor that was already visible reveals the remaining output, so the sequence is not left running above the reader.

The label is plain authored display text. Keep it short, put visible text between matching straight quotation marks, and do not place chapter tags in it. The label chooses how the first playback starts; it does not change the output speed.

A streamed terminal must contain exactly one bare {stream} or labeled {stream "Label"} block, and that stream must fill the complete terminal body. Put at least two non-empty output lines between the stream tags. Each non-empty line you write is one output step. Blank separator lines are ignored: they do not create an output step or visible space.

Unlike a regular terminal body, streamed lines support only inline Markdown, links, reader values, Game State values, and inline code. Keep every link, emphasis marker, and inline-code span on one line. Streamed lines do not support headings, lists, tables, link reference definitions, fenced examples, chat bubbles, conditions, reveals, locks, actions, emails, polls, Random Draws, ordering puzzles, or other chapter blocks. Use a regular terminal without a stream when its body needs those elements.

For readers who request reduced motion, a bare stream initially shows all output with Replay output available. A labeled stream still waits for its start control. Starting or replaying it keeps the same line-by-line timing with a static cursor and no decorative motion.

Terminal streams reveal individual output lines one at a time. To play complete messages one at a time instead, use a stream of chat bubbles.

Use title and status as display text

Title and status are fixed authored metadata. They do not read or change Game State, and they cannot contain chapter tags. Put changing information inside the body:

{terminal "REACTOR CONTROL" status "MONITORING"}
Coolant pressure: {game:coolant_pressure}

{if game:coolant_online = true}
PUMPS ONLINE
{else}
PUMPS OFFLINE
{endif}
{endterminal}

The reader sees the passage that matches the current game. The terminal itself does not add a saved game step.

Hide the complete terminal until the reader opens it

A labeled stream keeps the terminal panel, title, and status visible while its output waits. Wrap the complete terminal in a reveal instead when the reader should not see any part of the panel until choosing to open it:

{reveal "Open terminal"}
{terminal "NODE 7" status "STANDBY"}
No active connection.
{endterminal}
{endreveal}

The reader initially sees only Open terminal. Opening the reveal displays the entire panel. A surrounding reveal and a stream start label therefore serve different purposes: the reveal hides the whole terminal, while {stream "Label"} leaves the panel visible and waits only to start its output.

Terminal presentation follows the story's Element Theme.

Limits and combinations

  • Put {terminal ...} and {endterminal} on their own lines.
  • Close a terminal only with {endterminal}; {/terminal} is not supported.
  • Terminal blocks cannot be nested inside other terminal blocks.
  • Terminals and chat bubbles cannot contain each other.
  • A streamed terminal contains only its one complete stream. Its opening stream tag may have one non-empty quoted start label and no other options. A regular terminal may contain compatible elements such as an email, reveal, code lock, action, or conditional block; close every inner block before {endterminal}.
  • Keep titles and statuses as plain authored text; put variables and other chapter syntax in the body.
  • A terminal is a storytelling device, not a security boundary or a way to run commands.

To show terminal tags as literal text in a chapter, put them in backticks or a fenced block.

Before publishing

Save a draft and check that:

  1. the title and optional status are quoted, non-empty, and free of chapter tags;
  2. both terminal tags are on their own lines and the body contains visible content;
  3. long commands, addresses, and log lines wrap without forcing awkward page scrolling;
  4. Markdown, links, reader values, and Game State values display correctly in the body;
  5. nested reveals, locks, emails, conditions, or actions close in the same order they open;
  6. fictional prompts are clearly part of the story and do not imply that CHYOA executed anything;
  7. a surrounding reveal hides and opens the complete terminal when one is used;
  8. a streamed terminal has one full-body stream with at least two non-empty lines and no unsupported block content;
  9. a bare stream begins when the terminal reaches the visible page, reveals its lines in order, and keeps its stream controls in the header;
  10. a labeled stream leaves the panel visible but waits with its start control inside the empty terminal output area even when scrolled into or past view, then hides that start control and uses the terminal header for Show all output and finally Replay output, shown as icons beside the title on a narrow screen;
  11. the panel and stream controls remain readable in White, Black, and Sepia appearance and on a narrow screen.
Start your own immersive adult AI roleplay story
Ad

You've reached the end of this Guide topic.

Back Start Over View Story Map

0 comments