Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Stream IDs

Reference of all game stream identifiers.

Overview

Streams categorize game output. Each text window can subscribe to specific streams to filter content.

Core Streams

Stream IDDescriptionContent Type
mainPrimary game outputGeneral text, actions, results
roomRoom descriptionsRoom name, description, exits, objects
combatCombat messagesAttacks, damage, death
speechSpoken communicationSay, ask, exclaim
whisperPrivate messagesWhispers
thoughtsESP/mental communicationThink, group chat

Communication Streams

Stream IDDescription
speechPlayer speech (say, ask)
whisperPrivate whispers
thoughtsESP channel (think)
shoutShouted messages
singSung messages

Game State Streams

Stream IDDescription
roomRoom information
invInventory updates
percWindowPerception window
familiarFamiliar view
bountyBounty task info

Combat Streams

Stream IDDescription
combatCombat actions and results
assessCreature assessments
deathDeath notifications

Specialty Streams

Stream IDDescription
logonsPlayer login/logout
atmosphericsWeather and atmosphere
lootLoot messages
groupGroup/party messages

System Streams

Stream IDDescription
rawUnprocessed output
debugDebug information
scriptScript output (Lich)

Using Streams

Widget Configuration

# Main window - everything
[[widgets]]
type = "text"
name = "main"
streams = ["main", "room", "combat"]

# Chat window - communication only
[[widgets]]
type = "text"
name = "chat"
streams = ["speech", "whisper", "thoughts"]

# Combat window - combat only
[[widgets]]
type = "text"
name = "combat"
streams = ["combat"]

Empty Streams (All)

# Empty array = receive all streams
[[widgets]]
type = "text"
streams = []

Tabbed Text

[[widgets]]
type = "tabbed_text"
tabs = [
    { name = "All", streams = [] },
    { name = "Game", streams = ["main", "room"] },
    { name = "Combat", streams = ["combat"] },
    { name = "Chat", streams = ["speech", "thoughts", "whisper"] },
]

Triggers

# Trigger on specific stream
[[triggers]]
pattern = "whispers,"
command = ".notify Whisper!"
stream = "whisper"

# Trigger on combat stream
[[triggers]]
pattern = "falls dead"
command = "search"
stream = "combat"

Stream Colors

Configure stream-specific colors in colors.toml:

[theme]
# Stream colors
main = "#ffffff"
room = "#ffff00"
combat = "#ff4444"
speech = "#00ffff"
whisper = "#ff00ff"
thoughts = "#00ff00"

Stream Priority

When streams overlap, content appears in all matching windows. Configure priority in layout:

[[widgets]]
type = "text"
name = "combat"
streams = ["combat"]
priority = 100        # Higher = checked first

Common Configurations

Single Window (All Content)

[[widgets]]
type = "text"
name = "main"
streams = []          # All streams

Two Windows (Game + Chat)

[[widgets]]
type = "text"
name = "game"
streams = ["main", "room", "combat"]

[[widgets]]
type = "text"
name = "chat"
streams = ["speech", "thoughts", "whisper"]

Three Windows (Specialized)

[[widgets]]
type = "text"
name = "story"
streams = ["main", "room"]

[[widgets]]
type = "text"
name = "combat"
streams = ["combat"]

[[widgets]]
type = "text"
name = "social"
streams = ["speech", "thoughts", "whisper"]

RP Layout

[[widgets]]
type = "text"
name = "story"
streams = ["main", "room"]        # Immersive content

[[widgets]]
type = "text"
name = "ic"
streams = ["speech", "whisper"]   # In-character

[[widgets]]
type = "text"
name = "ooc"
streams = ["thoughts"]            # Out-of-character

Stream Detection

The parser assigns streams based on XML tags:

XML SourceStream
<pushStream id="X"/>Stream X
<roomName>room
<roomDesc>room
Combat XMLcombat
Default textmain

See Also