Reference of all game stream identifiers.
Streams categorize game output. Each text window can subscribe to specific streams to filter content.
| Stream ID | Description | Content Type |
main | Primary game output | General text, actions, results |
room | Room descriptions | Room name, description, exits, objects |
combat | Combat messages | Attacks, damage, death |
speech | Spoken communication | Say, ask, exclaim |
whisper | Private messages | Whispers |
thoughts | ESP/mental communication | Think, group chat |
| Stream ID | Description |
speech | Player speech (say, ask) |
whisper | Private whispers |
thoughts | ESP channel (think) |
shout | Shouted messages |
sing | Sung messages |
| Stream ID | Description |
room | Room information |
inv | Inventory updates |
percWindow | Perception window |
familiar | Familiar view |
bounty | Bounty task info |
| Stream ID | Description |
combat | Combat actions and results |
assess | Creature assessments |
death | Death notifications |
| Stream ID | Description |
logons | Player login/logout |
atmospherics | Weather and atmosphere |
loot | Loot messages |
group | Group/party messages |
| Stream ID | Description |
raw | Unprocessed output |
debug | Debug information |
script | Script output (Lich) |
# 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 array = receive all streams
[[widgets]]
type = "text"
streams = []
[[widgets]]
type = "tabbed_text"
tabs = [
{ name = "All", streams = [] },
{ name = "Game", streams = ["main", "room"] },
{ name = "Combat", streams = ["combat"] },
{ name = "Chat", streams = ["speech", "thoughts", "whisper"] },
]
# Trigger on specific stream
[[triggers]]
pattern = "whispers,"
command = ".notify Whisper!"
stream = "whisper"
# Trigger on combat stream
[[triggers]]
pattern = "falls dead"
command = "search"
stream = "combat"
Configure stream-specific colors in colors.toml:
[theme]
# Stream colors
main = "#ffffff"
room = "#ffff00"
combat = "#ff4444"
speech = "#00ffff"
whisper = "#ff00ff"
thoughts = "#00ff00"
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
[[widgets]]
type = "text"
name = "main"
streams = [] # All streams
[[widgets]]
type = "text"
name = "game"
streams = ["main", "room", "combat"]
[[widgets]]
type = "text"
name = "chat"
streams = ["speech", "thoughts", "whisper"]
[[widgets]]
type = "text"
name = "story"
streams = ["main", "room"]
[[widgets]]
type = "text"
name = "combat"
streams = ["combat"]
[[widgets]]
type = "text"
name = "social"
streams = ["speech", "thoughts", "whisper"]
[[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
The parser assigns streams based on XML tags:
| XML Source | Stream |
<pushStream id="X"/> | Stream X |
<roomName> | room |
<roomDesc> | room |
| Combat XML | combat |
| Default text | main |