Getting Help & Information

Finding help, looking up characters, and getting information

Getting Help & Information

Getting Help on Commands

help - Get help on any command or topic

  • help - Show general help
  • help <command> - Get detailed help on a command (e.g., help look, help fight)
  • help systems - List all help system categories
  • help system <name> - View a specific help system (e.g., help system combat)

AI-Powered Help - If you ask a question (end with “?”), the AI autohelper will try to answer:

  • help how do I fight? - AI synthesizes help from relevant topics
  • Uses semantic search to find related commands
  • Remembers context for follow-up questions (10 min window)

helpsearch - Search for help topics by keyword

  • helpsearch combat - Find all help topics mentioning “combat”
  • helpsearch sword navigation - Search with multiple keywords
  • helpsearch look - Find commands related to “look”

Aliases: help = h, ?, helpsearch = searchhelp, findhelp

Looking Up Characters

finger - Get detailed information about a character

  • finger Alice - See Alice’s stats, online status, location, schedule overlap
  • Shows: name, race/class, level, online/offline status, last seen
  • Schedule overlap: See when you’re most likely to find each other online

who - See who’s online

  • who - List online characters in your current zone
  • who here - List characters in your current room
  • who all - List all online characters globally (grouped by zone/event/timeline)
  • Shows character names, posture (sitting/standing), and furniture they’re at
  • Also shows upcoming events

profile - View a character’s full profile

  • profile - View your own profile
  • profile Alice - View Alice’s profile
  • Shows: name, race/class, gender, age, height, profile picture, descriptions, current location

observe - Continuously watch a character, place, or room for updates

  • observe Alice - Watch Alice’s actions and see detailed description
  • observe bar - Watch a specific place (furniture/location)
  • observe room - Watch the entire room
  • observe self or observe me - See your own detailed description
  • observe stop - Stop observing
  • While observing, you’ll receive real-time updates about what happens

Aliases: observe = watch, o

Looking Around

look - Examine your surroundings, objects, or characters

  • look - Look at the room (full description, exits, characters, places, objects)
  • look Alice - Look at Alice (appearance, clothing, held items)
  • look sword - Look at an object in the room
  • look Alice's sword - Look at an item Alice is wearing/holding
  • look north - Look at an exit to see where it leads
  • look me - See your own appearance
  • Works while blindfolded (limited to sounds/presence)
  • Works in vehicles (shows interior and passengers)
  • Works while traveling (shows journey progress)

Aliases: look = l, examine, ex, “look at”

News & Announcements

news - View staff announcements and updates

  • news - Show categories and unread counts
  • news announcement - View all announcements
  • news ic - View IC (in-character) news
  • news ooc - View OOC (out-of-character) news
  • news 5 - Read article #5
  • news read 5 - Same as above
  • Unread articles marked with [NEW]

Categories:

  • announcement - Important game updates
  • ic - In-character world news
  • ooc - Out-of-character announcements

Weather & Time

weather - Check current weather conditions

  • weather - See atmospheric prose, temperature, wind, humidity, cloud cover
  • Shows realistic weather based on location’s real-world coordinates
  • Only works outdoors or in rooms with sky visibility
  • Includes severe weather warnings and visibility notes

time - Check the current time and date

  • time - See game time, date, time of day, moon phase, celestial info
  • Shows: formatted date/time, time period (morning/afternoon/evening/night)
  • Includes: moon phase with emoji, cloud cover, stars visibility
  • Useful for planning RP and understanding world state

Aliases: weather = forecast, conditions; time = clock, date

Tips

  • Staff members see extra information in help output (source files, implementation notes)
  • Tab completion works for command names
  • Partial matches work for most commands (e.g., “fi” for “finger”)
  • Case insensitive - all commands work in any case
  • Context memory - AI autohelper remembers your recent questions
  • Privacy - Use who all to respect others’ privacy settings
  • Schedule overlap - Use finger to find the best times to connect with others
Related Systems: commands_ui communication

Commands, UI and Playing the Game

Game basics, utility commands, and interface features

Commands, UI and Playing the Game

Finding & Using Commands

commands - List all available commands

  • commands - Show all categories in a two-column table
  • commands navigation - List all navigation commands with descriptions
  • commands combat - List combat commands
  • Use with any category: system, navigation, combat, social, inventory, etc.
  • Shows unavailable commands with an empty circle ○, available with filled circle ●

Categories:

  • building - World building and room creation
  • clothing - Wearing and managing clothing
  • combat - Fighting and restraining others
  • communication - Channels, mail, and messaging
  • crafting - Creating items and objects
  • economy - Money, shopping, and trading
  • entertainment - Games, dice, and media
  • events - Activities and group events
  • info - Information and lookup commands
  • inventory - Managing belongings and storage
  • navigation - Movement, posture, and vehicles
  • roleplaying - Emotes, speech, and scenes
  • social - Relationships and customization
  • staff - Staff and admin commands
  • system - System, help, and status

Aliases: commands = cmds, cmdlist

Webclient UI Prefixes (Meta-Commands)

These are special prefixes that control how the webclient behaves. They can be combined!

sticky <command> - Keep command in input after sending (for repeated commands)

  • sticky say hello - Sends “say hello” but keeps it in input for quick resend
  • sticky roll 2d6 - Useful for repeated dice rolls
  • Great for spam-free repeated actions

asleft <command> - Send as if typed in left (OOC) pane

  • asleft look - Executes in OOC context even if typed on right side
  • Affects command type sent to server

asright <command> - Send as if typed in right (RP) pane

  • asright who - Executes in RP context even if typed on left side

onleft <command> - Display result in left pane (doesn’t change execution context)

  • onleft look - Command executes normally but result shows in left pane
  • Good for keeping RP pane clean

onright <command> - Display result in right pane

  • onright commands - Show command list in right pane instead of left

Combining prefixes:

  • sticky asleft say Hello - Keep in input AND send as OOC
  • sticky onleft roll 2d6 - Keep in input AND show results on left
  • Order doesn’t matter: asleft sticky works the same as sticky asleft

Aliases: atleft = asleft, atright = asright

Movement & Navigation

walk - Walk toward a target with optional style

  • walk north - Walk in a cardinal direction
  • walk to tavern - Walk to a named room
  • run to John - Run to a character’s location
  • crawl east - Crawl in a direction (movement verb changes speed and description)
  • stroll to park - Use different movement verbs for flavor
  • angrily run north - Add an adverb for extra description

Available movement verbs: walk, run, jog, crawl, limp, strut, meander, stroll, sneak, sprint, fly, swagger, stride, march, hike, creep, shuffle, amble, trudge, wander, lumber, pad, skip, plod, shamble, patrol, sashay, stalk, stomp, pace, scramble, stagger, prowl, traipse, drift, saunter

Note: Movement uses pathfinding. Multi-room walks show duration and broadcast arrival.

Inventory & Equipment

inventory - View everything you’re carrying

  • inventory - Shows wallet balance, held items, carried items, worn items
  • Groups items by location: In Hand, Carrying, Wearing
  • Shows item quantity, condition, and damage level
  • inv or i for short

equipment - View what you’re wearing and holding

  • equipment - Focused view of equipped items only
  • Shows In Hand and Wearing sections
  • Stacks identical items with count
  • eq or worn for short

Player Availability Status

afk - Toggle away from keyboard status

  • afk - Set AFK status (indefinite)
  • afk 30 - Set AFK for 30 minutes (auto-clears)
  • afk again - Clear AFK status
  • Broadcasts to room: “gets busy with their phone. [AFK]”
  • Auto-AFK: System sets AFK after inactivity (17 min with others, 60 min alone)

gtg - Set “got to go” status (imminent departure)

  • gtg - Set GTG with default 15 minutes
  • gtg 30 - Set GTG for 30 minutes
  • gtg (when already set) - Clear GTG status
  • Broadcasts: “receives a message on their phone. [GTG 30 Minutes]”
  • Use to signal you’re about to leave soon

Auto-AFK Behavior:

  • Alone in room: AFK after 60 minutes inactive
  • With others: AFK after 17 minutes inactive
  • WebSocket timeout: Disconnected after 5 minutes without ping
  • Hard timeout: Logged out after 3 hours inactive (2 hours for agents)
  • AFK characters excluded from NPC animation triggers and some auto-features

Aliases: afk = away, gtg = gottago, gotta_go

Tickets & Support

tickets - Manage bug reports, suggestions, and requests

  • tickets - Open tickets menu (quickmenu with options)
  • tickets list - View your open tickets
  • tickets all - View all tickets (including resolved)
  • tickets new - Submit a new ticket (opens form)
  • tickets view 42 - View ticket #42
  • bug - Quick shortcut to submit a bug report
  • typo - Quick shortcut to report a typo
  • request - Submit a feature request
  • suggest - Submit a suggestion
  • report - Report player behavior

Ticket Categories:

  • bug - Code errors, broken features
  • typo - Text errors, spelling mistakes
  • behaviour - Player conduct issues
  • request - Feature requests
  • suggestion - Improvement ideas

Ticket Workflow:

  1. Submit via form (category, subject, description)
  2. Staff receives alert with ticket ID
  3. Track status: open → resolved/closed
  4. View resolution notes and staff response
  5. Auto-captures game context (room, character, timestamp)

Aliases: mytickets, ticket, bug, typo, report, request, suggest, viewticket

Quitting the Game

quit - Leave the game and go to sleep

  • quit - Log out safely
  • Broadcasts departure to room: “goes to sleep”
  • Records playtime for session tracking
  • Clears active states: observing, following, AFK, attempts, mind reading
  • Cannot quit while in combat

Aliases: logout, sleep, “log out”

Tips

  • Command shortcuts - Most commands have short aliases (e.g., i for inventory)
  • Sticky mode - Use for repeated commands without re-typing
  • Status visibility - AFK/GTG shows in who and finger output
  • Auto-logout - Game disconnects you after 3 hours inactive (safety feature)
  • WebSocket - If connection drops, you have 5 minutes to reconnect
  • Ticket tracking - Use tickets to track bugs you’ve reported
  • Movement verbs - Add flavor to your movement with crawl, strut, swagger, etc. Add adverbs too: angrily run north
  • Category browsing - Use commands <category> to explore specific feature sets
Related Systems: help_info accessibility

Communication

Talking, messaging, channels, memos, and bulletins

Communication System

Direct Messaging

msg - Send a direct message to someone anywhere in the game

  • msg Alice Hey, where are you? - Message Alice directly
  • dm Bob Meeting at 5 - Same as msg (alias)
  • text Charlie On my way! - Another alias
  • Shows phone use in modern eras (“eyes flick to phone”)
  • Recent targets tracked for quick access (last 10)
  • Era-aware routing (phone, pager, magical message, etc.)

Aliases: msg = dm, text

Out-of-Character (OOC) Communication

ooc - Send private OOC message to one or more players

  • ooc Alice Hello there! - Message one player
  • ooc Alice,Bob,Charlie Hey everyone! - Message multiple (comma-separated)
  • ooc (no args) - Show recent OOC contacts
  • Messages sent to users, not characters (crosses character boundaries)
  • Recent contacts cached for quick access (last 10)

Aliases: ooc = oocp, oocmsg

Channels

channel - Chat on a communication channel

  • channel ooc Hello everyone! - Send to a channel
  • + Hi there! - Quick OOC channel shortcut
  • chan general What's up? - Use alias
  • Auto-join public channels on first message
  • Muted members can’t send
  • Supports multi-word channel names
  • Last channel tracked for status bar

channels - List available channels

  • channels - Show all channels with status
  • Shows: [TYPE] name (status) - N online
  • Status: (joined), (muted), or (not joined)
  • Includes description if set

join channel - Join a communication channel

  • join channel OOC - Join the OOC channel
  • joinchannel General - Use compact alias
  • Public channels: auto-join allowed
  • Private channels: invitation required
  • Broadcasts join message to members

leave channel - Leave a channel

  • leave channel OOC - Leave the channel
  • Broadcasts departure to remaining members
  • Can rejoin public channels anytime

Aliases:

  • channel = chan, ch, +
  • channels = chanlist, “channel list”, listchannels
  • join channel = joinchannel, “chan join”, “channel join”
  • leave channel = leavechannel, “chan leave”, “channel leave”

Memos (Asynchronous Mail)

mail - Read and send memos/mail

  • mail - View inbox (quickmenu)
  • mail list - List all memos
  • mail read 1 - Read memo #1
  • mail 5 - Quick-read memo #5 (shortcut)
  • mail send Alice - Compose via form
  • mail send Alice Subject=Body - Quick format
  • mail delete 1 - Delete memo #1
  • mail delete all - Delete all memos
  • Unread memos marked with ●
  • Subject and body required
  • Abuse checking on send

Aliases: mail = memo, memos, email, messages, inbox

Bulletin Board

bb - View and manage the bulletin board

  • bb - List all recent bulletins (shows last N)
  • bb list - Same as above
  • bb post Looking for group! - Post a bulletin
  • bb Looking for group! - Quick post (shortcut)
  • bb read 1 - Read bulletin #1
  • bb delete - Delete YOUR bulletin (only one per character)
  • Bulletins expire over time
  • Age shown: “just now”, “5h ago”, “2d ago”
  • Broadcasts preview to room on post

Aliases: bb = bulletin, bulletins, board

Clans

clan - Manage clan membership and activities

  • clan list - List all clans (shows membership status)
  • clan create The Shadows - Create a new clan
  • clan create --secret The Hidden Order - Create a secret clan
  • clan invite Alice - Invite someone
  • clan invite Alice as ShadowMaster - Invite with handle
  • clan kick Bob - Remove a member (requires permissions)
  • clan leave - Leave your clan
  • clan info - Show clan details
  • clan roster - List all members
  • clan memo Subject=Message - Send memo to all members
  • clan handle ShadowMaster - Set your clan handle
  • clan grant - Grant room access to clan (leader/officer)
  • clan revoke - Revoke room access from clan

Clan Features:

  • Secret clans: Members get Greek letter handles (Alpha, Beta, etc.)
  • Ranks: leader (full control), officer (invite/kick), member (basic access)
  • Channels: Auto-created for clan communication
  • Multi-clan: Characters can belong to multiple clans
  • Room access: Leaders/officers can grant clan-wide room permissions

Aliases: clan = clans, guild, group

Quiet Mode

quiet - Toggle quiet mode to hide all channel messages

  • quiet - Enable quiet mode (hides OOC, channels, broadcasts)
  • quiet again - Disable with catch-up option
  • Broadcasts: “puts on headphones [Quiet Mode]”
  • On exit: Offer to catch up on missed messages (up to 100)
  • Suppressed: ooc, channel, broadcast, global, area, group
  • Still see: room messages, DMs, whispers

Aliases: quiet = quietmode

Undo

undo - Delete your last message

  • undo - Removes your most recent message from everyone’s screen
  • Works on both panels: in-character messages (right panel) and channel messages (left panel)
  • The message is deleted from the database and removed from all viewers’ screens
  • Must be used within 60 seconds of sending the message
  • Only affects your most recent message — you can’t undo further back
  • Great for fixing typos, accidental sends, or messages sent to the wrong place

How it works:

  • Type undo in the same panel where you sent the message
  • Right panel: Undoes say, emote, whisper, and other IC messages
  • Left panel: Undoes channel messages and OOC chat

Tips

  • Channel shortcuts: + is fastest for OOC channel
  • Era-awareness: Msg command adapts to game era (phone/pager/magic)
  • Recent contacts: msg and ooc track your last contacts
  • Bulletin limits: Only one bulletin per character (deletes old on post)
  • Memo persistence: Memos stay until deleted
  • Secret clans: Hidden membership, Greek letter handles for anonymity
  • Auto-join: Public channels let you send without explicit join
  • Quiet mode: Great for focused RP without OOC distractions
  • Multi-recipient OOC: Use commas to message multiple players at once
  • Clan disambiguation: If in multiple clans, you’ll get a quickmenu to choose
  • Undo mistakes: Use undo within 60 seconds to delete your last message
Quick Reference

Quick Reference

Command Usage Description
say / " say <message> Speak to the room
emote / : emote <action> Perform an action
say to say to <name> <msg> Speak to someone (all hear)
whisper whisper <name> <msg> Private speech (others see action)
pm pm <name> <msg> Private message (modern era)
think think <thought> Internal thought (observers see)
say through say through <exit>, <msg> Speak to adjacent room
knock knock <direction> Alert adjacent room
attempt attempt <name> <action> Request consent for action
yes / no yes Accept/deny consent request
send memo send memo <name> <subj>=<body> Send offline message
read memo read memo [#] Read received memos
delete memo delete memo <#/all> Delete memos
bulletin bulletin Read bulletin board
write bulletin write bulletin <msg> Post to bulletin board
give number give number <name> Share phone number
pemit pemit <names> = <msg> Staff: private emit

Adverbs: Add after command (e.g., say quietly Hello)

Era restrictions:

  • Medieval: No PM, memos delivered by courier
  • Gaslight: Telegrams with delay
  • Modern+: Instant everything

Accessibility

TTS narration, screen reader support, colorblind modes, and accessibility features

Accessibility Features

Firefly provides comprehensive accessibility features including text-to-speech narration with 30 high-quality AI voices, screen reader optimization, visual accessibility settings, and customizable playback controls.

Text-to-Speech (TTS) Narration

Getting Started with TTS

narrate on - Enable text-to-speech narration

  • Converts game text to natural-sounding audio
  • Uses Google Cloud Chirp 3 HD voices (30 voices available)
  • Queues audio for smooth playback
  • Works with all game content (speech, actions, room descriptions, system messages)

narrate off - Disable TTS narration

narrate status - Check current TTS settings and queue status

Choosing Your Voice

narrate config - Open voice and playback configuration

  • Voice Selection: Choose from 30 Chirp 3 HD voices
    • 14 female voices: Achernar, Aoede, Alula, Azha, Botein, Celaeno, Deneb, Electra, Hamal, Lesath, Maia, Merope, Taygeta, Unukalhai
    • 16 male voices: Achird, Algenib, Alioth, Alnair, Alphard, Alphecca, Altair, Dabih, Denebola, Eltanin, Kaus, Menkent, Polaris, Sabik, Sadalsuud, Zaurak
  • Pitch: Adjust voice pitch (-20 to +20 semitones, default 0)
  • Speed: Control speaking rate (0.5x to 2.0x, default 1.0x)
  • Locale: Choose accent (en-US, en-GB, en-AU, en-IN)

Each voice has unique characteristics:

  • Narrator voices: Warm, expressive, ideal for storytelling (e.g., Achernar, Achird)
  • Character voices: Distinct personalities, great for speech (e.g., Aoede, Algenib)
  • Neutral voices: Clear and professional (e.g., Deneb, Polaris)

Playback Controls

narrate pause - Pause current audio playback

  • Audio queue is preserved
  • Resume from where you left off

narrate resume - Resume paused audio playback

narrate skip - Skip to the latest queued audio

  • Useful if the queue gets long
  • Discards intermediate messages

narrate clear - Clear the entire audio queue

  • Stops playback immediately
  • Removes all queued audio

narrate current - Check what’s currently playing

narrate queue - View all queued audio messages

Content Type Filtering

You can customize which types of content get narrated:

narrate config form includes:

  • Narrate speech: Character dialogue (say, whisper, shout, etc.)
  • Narrate actions: Emotes, movement, combat actions
  • Narrate rooms: Room descriptions when you look or move
  • Narrate system: System messages, help text, errors

Toggle each type on/off to focus on what’s important to you. For example:

  • Combat-focused: Enable actions and system, disable rooms
  • RP-focused: Enable speech and actions, disable system
  • Minimal: Only enable speech to hear what others say

Screen Reader Mode

accessibility mode on - Enable screen reader optimization

  • Converts visual/spatial output to linear, screen-reader-friendly text
  • Transforms room layouts into sequential descriptions
  • Simplifies combat output for easy navigation
  • Removes visual formatting, emojis, and decorative elements

accessibility mode off - Disable screen reader mode (normal visual output)

How Screen Reader Mode Works

When enabled, the game transforms complex visual layouts into simple linear text:

Room descriptions:

  • Normal: ASCII art, spatial layout, directional arrows
  • Screen reader mode: “You are in [room name]. [Description]. Exits: north to [room], south to [room]. Characters present: [list]. Objects: [list].”

Combat output:

  • Normal: Battle map, hex positions, visual effects
  • Screen reader mode: “You are at position [coords]. Enemies: [name] at [coords], [range]. Your turn. Available actions: attack, defend, move.”

Character descriptions:

  • Normal: Formatted profile, visual indicators
  • Screen reader mode: “[Name], [race] [class], level [X]. [Description]. Equipment: [list]. Status: [conditions].”

Visual Accessibility Settings

accessibility contrast on - Enable high-contrast mode

  • Increases text contrast for better readability
  • Adjusts color palette for visual clarity
  • Helpful for low vision or bright/dim environments

accessibility contrast off - Disable high-contrast mode

accessibility effects on - Enable visual effects (animations, transitions) accessibility effects off - Disable visual effects

  • Reduces motion and animations
  • Helpful for vestibular disorders or motion sensitivity

Typing and Auto-Resume

accessibility typing on - Pause TTS when you start typing

  • Automatically pauses narration when you begin typing a command
  • Prevents audio from interfering with your input

accessibility typing off - Don’t pause TTS while typing

accessibility resume on - Auto-resume TTS after typing

  • Automatically resumes narration after you submit a command
  • Works with accessibility typing on for seamless experience

accessibility resume off - Don’t auto-resume after typing

Pro tip: Enable both typing pause and auto-resume for a smooth workflow:

  1. TTS plays room description
  2. You start typing → TTS pauses
  3. You submit command
  4. TTS automatically resumes with new output

Playback Speed

accessibility speed <rate> - Set TTS playback speed

  • Rate: 0.5 (half speed) to 2.0 (double speed)
  • Default: 1.0 (normal speed)
  • Examples:
    • accessibility speed 1.5 - 50% faster (good for experienced players)
    • accessibility speed 0.75 - 25% slower (good for complex content)

Screen Reader Selection

accessibility reader <type> - Select screen reader software

  • jaws: JAWS (Job Access With Speech)
  • nvda: NVDA (NonVisual Desktop Access)
  • voiceover: macOS VoiceOver
  • talkback: Android TalkBack
  • narrator: Windows Narrator
  • other: Generic screen reader

This helps the game optimize output for your specific screen reader’s conventions.

Viewing Your Settings

accessibility (no arguments) - Show current accessibility settings

  • Displays all 7 settings with current values
  • Shows TTS status and queue length

accessibility help - Show detailed help for accessibility command

Tips for Best Experience

For Screen Reader Users:

  1. Enable accessibility mode on for linear output
  2. Choose your screen reader with accessibility reader <type>
  3. Enable TTS with narrate on for dual audio (screen reader + TTS)
  4. Disable visual effects with accessibility effects off
  5. Use narrate config to filter content types (reduce noise)

For Vision Impaired Users:

  1. Enable accessibility contrast on for better text visibility
  2. Use TTS with a clear voice like Deneb or Polaris
  3. Adjust accessibility speed to your comfortable listening rate
  4. Consider disabling effects with accessibility effects off

For Motion Sensitivity:

  1. Disable visual effects: accessibility effects off
  2. Enable high contrast for less eye strain: accessibility contrast on

For Audio Focus:

  1. Enable typing pause: accessibility typing on
  2. Enable auto-resume: accessibility resume on
  3. Use narrate skip if the queue gets long during busy scenes
  4. Customize content types in narrate config to reduce noise

Examples

Complete setup for blind user:

accessibility mode on
accessibility reader nvda
accessibility effects off
accessibility typing on
accessibility resume on
narrate on
narrate config
  (Select: Achernar voice, pitch 0, speed 1.0, locale en-US)
  (Enable: speech, actions, rooms, system)

Quick TTS for sighted user who wants to listen:

narrate on
narrate config
  (Select: Altair voice, pitch 0, speed 1.2, locale en-US)
  (Enable: speech and actions only)
accessibility typing on
accessibility resume on

High-contrast mode for low vision:

accessibility contrast on
accessibility effects off
accessibility speed 0.75
narrate on

Troubleshooting

“TTS unavailable”: Server requires Google Cloud credentials (contact staff) Audio not playing: Check browser audio permissions, unmute tab Queue too long: Use narrate skip to jump to latest or narrate clear to reset Voice sounds wrong: Try narrate config and experiment with different voices Too fast/slow: Adjust with accessibility speed <rate> (0.5-2.0) TTS interrupts typing: Enable accessibility typing on Need to catch up after AFK: Use narrate skip to jump to current

Quick Reference

Accessibility System - Quick Reference

Settings Commands

Command Syntax Description
accessibility accessibility View settings
accessibility tts accessibility tts on/off Toggle TTS
accessibility voice accessibility voice <name> Set voice
accessibility screenreader accessibility screenreader on/off Screen reader
accessibility audio accessibility audio on/off Audio cues

TTS Commands

Command Syntax Description
narrate narrate Re-read output
narrate stop narrate stop Stop TTS
voices voices List voices

Voice Categories

Type Examples
Feminine Kore, Aoede, Leda, Zephyr
Masculine Puck, Charon, Koda, Orus
Neutral Sage, Echo, River, Morgan

Key Services

Service Purpose
TtsService Google Cloud TTS synthesis
TtsQueueService Audio queue management
AccessibilityOutputService Screen reader formatting
Related Systems: commands_ui communication

Roleplaying

Scenes, posture, social interactions, restraints, and consent

Roleplaying Commands

Firefly provides comprehensive roleplaying tools for immersive character interaction, including speech, emotes, posture, consent-based restraints, and consumption.

Speaking and Communication

Say - Public Speech

say <message> - Speak aloud to everyone in the room

  • Everyone present hears what you say
  • Shorthand: "<message> or '<message>
  • Aliases: yell, shout, mutter, grumble, scream, moan, gasp, sob, stutter, murmur, flirt, lecture, argue, confess

say <adverb> <message> - Speak with emotion

  • Adverbs: quietly, loudly, nervously, excitedly, sadly, angrily, softly, cheerfully
  • Any word ending in ‘ly’ works
  • Examples: say quietly I have a secret, say excitedly Did you hear?!

say to <target> <message> - Directed speech

  • Everyone hears, but it’s clear you’re speaking to someone specific
  • Aliases: tell, order, instruct, beg, demand, tease, mock, taunt
  • Examples: say to Alice Hello there!, tell Bob Come with me
  • If you recently spoke to someone, you can omit their name: say to I agree

reply <message> or respond <message> - Reply to last person who spoke to you

  • Automatic targeting based on conversation context
  • Example: Alice says to you, “How are you?” → reply I'm doing well!

say through <exit>, <message> - Yell through a door or exit

  • People in the adjacent room hear you
  • Example: say through north, Hello in there!
  • Use yell through or shout through for louder delivery

Whisper - Private Speech

whisper <target> <message> - Whisper privately to someone

  • Only the target hears the full message
  • Others see “[Name] whispers something to [Target]”
  • Supports adverbs: whisper Bob quietly How are you?
  • Short form: whi Bob Hello
  • No arguments shows quickmenu of people in the room

Think - Internal Thoughts

think <thought> - Express internal thoughts

  • Only you see your thoughts
  • Observers watching you see your thoughts (if you’re being observed)
  • Telepaths reading your mind see your thoughts
  • Aliases: hope, ponder, wonder, worry, wish, feel, remember
  • Examples: think I wonder what she meant, ponder the mysteries of life

Emotes and Actions

Emote - Express Actions

emote <action> - Perform an action or express emotion

  • Shows to everyone in the room
  • Your name is prepended automatically when text starts with a lowercase letter
  • Shorthand: :<action> or .<action>
  • Aliases: pose, emit (staff only)
  • Examples:
    • emote waves hello → “Alice waves hello.”
    • :smiles warmly → “Alice smiles warmly.”
    • pose stretches → “Alice stretches.”

Emote Syntax Options

1. Lowercase start (default) — Your name is automatically prepended:

  • emote waves → “Alice waves.”
  • :nods thoughtfully → “Alice nods thoughtfully.”

2. Starting with a capital letter — Your name is NOT prepended, but you must include your own name somewhere in the text. This lets you control exactly where your name appears:

  • emote With a sigh, Alice sits down → “With a sigh, Alice sits down.”
  • emote The room falls silent as Alice enters → “The room falls silent as Alice enters.”
  • If you forget your name, you’ll get a helpful error reminding you.

3. Possessive emotes — Start with lowercase so your name is prepended, then use possessive grammar:

  • emote 's eyes light up → “Alice’s eyes light up.”
  • :'s hands tremble slightly → “Alice’s hands tremble slightly.”
  • The system prepends your name and the 's attaches naturally.

4. Referencing other characters — Use other characters’ names in your emote text:

  • emote glances at Bob Jones and smiles → “Alice glances at Bob Jones and smiles.”
  • Each viewer sees names replaced with whatever they know that person as
  • Viewers who don’t know Bob might see “a tall man” instead

5. Adverbs — Start with a word ending in “ly” for automatic adverb placement:

  • emote gracefully bows → “Gracefully Alice bows.” or “Alice gracefully bows.” (randomly placed)
  • emote quietly slips away → “Quietly Alice slips away.” or “Alice quietly slips away.”

6. Including speech in emotes — Use quotes for dialogue within actions:

  • emote says "Hello!" and waves → Speech is colored with your speech color
  • emote leans in and whispers "Follow me" before walking away
  • Double quotes take priority; single quotes work as fallback (but apostrophes in contractions like “don’t” are handled correctly)

7. Emit (staff/GM only) — Text appears without any character name:

  • emit A mysterious figure appears in a flash of light.
  • Only available to staff and GMs

Rate limiting: In very crowded rooms (15+ people), emotes are rate limited to prevent spam (max 3 emotes per 20 seconds).

Names in Emotes

Your name is prepended automatically (when starting with lowercase). When you type emote waves, others see “Alice waves.” You don’t need to type your own name.

Mentioning other characters: You can use other characters’ names in your emote text. Each viewer sees those names replaced with whatever they know that person as:

  • If the viewer knows “Bob Jones”, they see “Bob Jones”
  • If the viewer has never learned Bob’s name, they see Bob’s short description (e.g. “a tall man”) or “someone”
  • You always see your own name as-is

Automatic name learning: When you mention someone’s name in an emote, everyone else in the room learns that name. For example:

  • emote waves at Bob Jones → Everyone who didn’t know Bob now learns he’s “Bob Jones”
  • This also works in speech: say Hello Bob Jones! → Others learn Bob’s name

Examples of name personalization:

You type: emote waves at Bob Jones and smiles.
Bob sees: Alice waves at Bob Jones and smiles.
Charlie (knows both): Alice waves at Bob Jones and smiles.
Dave (doesn't know Alice): A red-haired woman waves at Bob Jones and smiles.
Eve (doesn't know either): Someone waves at a tall man and smiles.

Semote - Smart Emote

semote <action> - Smart emote with automatic game command extraction

  • Works just like emote, shows immediately
  • AI automatically extracts game commands from your emote and executes them
  • Example:
    • semote stands up and walks to the door → Shows the emote, then AI extracts “stand” and “walk to door” commands and executes them
  • Only works outside combat
  • Asynchronous: emote shows immediately, commands execute after

Subtle - Proximity-Based Action

subtle <action> - Perform a subtle action visible only nearby

  • At a place (table, booth, etc.): Only others at the same place see the full action
  • Not at a place: Only other ungrouped characters see it
  • Others see: “[Someone at table] does something quietly” or “[Someone nearby] does something quietly”
  • Great for covert actions or small-scale interactions
  • Examples: subtle slides a note across the table, subtle winks conspiratorially

attempt <character> <action> - Request permission for an action

  • Target receives a quickmenu to allow or deny
  • If allowed, the action is performed as an emote
  • If denied, nothing happens
  • Prevents unwanted physical contact
  • Aliases: propose, request
  • Examples:
    • attempt Alice hugs warmly → Alice gets: “Bob wants your permission: Bob hugs warmly. [Allow/Deny]”
    • attempt Bob kisses on the cheek → Bob chooses to allow or deny

Posture Commands

Sit

sit or sit down - Sit on the ground

  • Changes your stance to “sitting”
  • Shows in room descriptions: “Alice is sitting here.”

sit on <furniture> - Sit on furniture

  • Aliases: sit at, sit in, sit beside, sit by
  • Examples: sit on couch, sit at bar, sit in booth
  • Special aliases: lean on, lean against, sprawl, get in, relax on, lounge on, kneel, crouch, straddle, exercise, work out, study
  • Furniture has capacity limits (shows error if full)

Stand

stand or stand up - Stand up from sitting/lying

  • Changes stance to “standing”
  • If you were at furniture, you step away
  • Aliases: get up

stand at <furniture> - Stand at a specific place

  • Aliases: stand by, stand beside, stand near
  • Examples: stand at bar, stand by window
  • Special aliases: dance on, pace at

Lie

lie down - Lie on the ground

  • Changes stance to “lying”
  • Aliases: lay, lay down

lie on <furniture> - Lie on furniture

  • Examples: lie on bed, lay on couch

Stance affects room descriptions:

  • Standing: “Alice is standing here.”
  • Sitting: “Alice is sitting here.” or “Alice is sitting at the bar.”
  • Lying: “Alice is lying here.” or “Alice is lying on the bed.”

Social Commands

Check In - Locatability

check in - Set who can find you in the where list

  • yes - Anyone can find you (default)
  • favorites - Only players you’ve marked as a favorite can see you
  • no - Hidden from where list (except those with special visibility permissions)
  • Aliases: locatability, wherevis
  • Examples: check in yes, check in no, check in favorites

Private - Adult Content Mode

private - Toggle private mode

  • Private mode ON: Adult content becomes visible when viewing others who are also in private mode
  • Private mode OFF: Adult content is hidden
  • Room sees: “Alice enters/leaves private mode.”

private <target> <emote> - Private emote

  • Perform an action visible only to you and the target
  • No one else sees it (not even observers)
  • Great for covert gestures, secret signals
  • Examples:
    • private Bob winks knowingly → Only Bob sees: “(Privately) Alice winks knowingly at you.”
    • private to Alice makes a subtle gesture → Only Alice sees it

Summon - Call NPCs

summon <npc> = <message> - Send a message summoning an NPC

  • NPCs use AI to decide whether to come based on your message and their personality
  • Example: summon Merchant = I need to buy supplies
  • NPC must be within summon range
  • Cooldown if NPC declines

Consumption Commands

Smoke

smoke <item> - Light up and smoke an item

  • Starts smoking animation
  • Item must be in your inventory
  • Aliases: puff, light up
  • Examples: smoke cigarette, puff pipe

Eat

eat <item> - Eat food from inventory

  • Starts eating animation
  • Aliases: consume, taste, swallow
  • Examples: eat apple, eat sandwich

Drink

drink <item> - Drink a beverage from inventory

  • Starts drinking animation
  • Aliases: sip, gulp, quaff
  • Examples: drink water, sip wine, quaff beer

Note: Consumption commands use ConsumableConcern for consistent behavior across smoke/eat/drink.

The prisoner system provides consent-based restraint mechanics for dramatic RP scenarios. All actions require the target to be helpless first.

Helpless State

helpless or helpless on - Voluntarily become helpless

  • Allows others to restrain you, search you, or move you
  • Consent required: You must explicitly enable this
  • Room sees: “Alice becomes helpless and vulnerable.”

helpless off - Remove voluntary helplessness

  • Room sees: “Alice is no longer helpless.”

Note: You can also become helpless involuntarily:

  • Knocked unconscious in combat (0 HP)
  • Hands bound by another character

Restraining Actions (Require Target to be Helpless)

tie <character> [hands/feet] - Bind someone’s hands or feet

  • Aliases: bind, restrain
  • Examples: tie Bob, tie Alice hands, bind Bob feet
  • Hands bound = target becomes/stays helpless and cannot use most commands
  • Feet bound = target cannot move

gag <character> - Gag someone to prevent speech

  • Aliases: muzzle
  • Target can no longer speak (say, whisper, etc.)
  • Target sees: “Bob gags you. You can no longer speak.”

blindfold <character> - Blindfold someone to block vision

  • Aliases: hood
  • Target cannot see room descriptions or visual emotes
  • Target sees: “Bob blindfolds you. Everything goes dark.”

untie <character> [hands/feet/gag/blindfold/all] - Remove restraints

  • Aliases: unbind, free
  • Default: removes ALL restraints
  • Examples:
    • untie Alice → Removes all restraints
    • untie Bob hands → Only removes hand bindings
    • free Alice gag → Only removes gag

Moving Helpless Characters

drag <character> - Drag a helpless character

  • Aliases: haul
  • Target follows you as you move (slower movement speed)
  • Target sees: “Bob drags you along.”

carry <character> - Pick up and carry a helpless character

  • Aliases: pickup, lift
  • Target is carried with you as you move
  • Target sees: “Bob picks you up and carries you.”

release - Put down or release a character you’re dragging/carrying

  • Aliases: letgo, putdown
  • Target is released at your current location

Other Prisoner Actions

search <character> - Search a helpless character’s belongings

  • Aliases: frisk, rob
  • Shows their worn items, carried items, and money
  • Target sees: “Bob searches your belongings.”
  • Example output:
    You search Alice:
    
    Wearing:
      - leather jacket
      - blue jeans
    
    Carrying:
      - wallet
      - keys
    
    Money:
      - 50 dollars
    

wake <character> - Wake an unconscious character

  • Aliases: rouse, awaken
  • Only works on unconscious characters (knocked out in combat)
  • Character regains consciousness
  • Example: wake Bob → “You shake Bob until he regains consciousness.”

Prisoner System Notes

  • Timeline restriction: Prisoner mechanics are disabled in past timelines
  • Consent first: Target must be helpless (voluntary or unconscious) before restraints can be applied
  • Helpless penalties:
    • Cannot use most commands
    • Cannot move if hands bound
    • Cannot see if blindfolded
    • Cannot speak if gagged
  • Auto-wake: Unconscious characters automatically wake after a delay (unless still in active combat)

Undo - Fix Mistakes

undo - Delete your last message from everyone’s screen

  • undo - Removes your most recent say, emote, whisper, or channel message
  • Must be used within 60 seconds of sending
  • Works on both panels:
    • Right panel: Undoes say, emote, whisper, and other IC messages
    • Left panel: Undoes channel messages and OOC chat
  • The message is deleted from the database and disappears for all viewers
  • Only affects your single most recent message — you can’t undo further back
  • Type undo in the same panel where you sent the message

Common uses:

  • Fix a typo in an important emote
  • Take back an accidental message
  • Remove a message sent to the wrong panel

Character Recognition & The Remember System

Firefly uses an organic name-learning system. Characters don’t automatically know each other — you discover names through roleplay, just as you would in real life. This creates natural moments for introductions and adds depth to character interactions.

How You See Others

When another character appears in a room description, emote, or speech, the name you see depends on whether you’ve learned who they are:

Your Knowledge What You See
You know them Their name (e.g. “Bob Jones”)
You don’t know them Their short description (e.g. “a tall man”) or “someone”
It’s yourself Always your own name

This means two people can read the same emote and see different names. If Alice waves at Bob, someone who knows Alice sees “Alice waves at Bob” while a stranger might see “A red-haired woman waves at Bob.”

How You Learn Names

Names are learned automatically through roleplay — no special command needed:

Through emotes: When someone mentions a character by name in an emote, everyone in the room learns that name.

  • emote waves at Bob Jones → Everyone now knows that person is “Bob Jones”

Through speech: Saying someone’s name out loud teaches it to listeners.

  • say Hey, have you met Bob Jones? → Everyone in the room learns Bob’s name

Through introduction: When a character performs any action that contains their own name (in speech or action text), others learn it.

  • say My name is Alice Smith, nice to meet you. → Everyone learns your name

How Memory Works

  • Persistent: Once you learn a character’s name, you remember it forever — across sessions, across logins
  • Per-character: Each character has their own separate knowledge. Your alt doesn’t know the people your main knows
  • First meeting tracked: The system remembers when you first met someone and when you last saw them
  • Organic discovery: There’s no “scan” or “identify” — you learn names the way you would in real life

Tips for Roleplaying with Names

  • Introduce yourself in speech to let others learn your name naturally: say "I'm Alice Smith, nice to meet you."
  • Use full names when referring to someone — this helps other characters learn who you’re talking about
  • Pay attention to descriptions — if you see “a scarred woman” instead of a name, your character hasn’t been introduced yet
  • This creates natural RP moments — you can play out introductions, ask someone’s name, or remain mysterious

Tips for Effective Roleplaying

Speech and Emotes

  • Use adverbs to add flavor: say nervously I'm not sure, emote gracefully bows
  • Include speech in emotes for complex actions: emote says "Watch this!" and jumps
  • Use whisper for private conversations in public spaces
  • Use private emotes for covert signals only one person should see
  • Use undo within 60 seconds to delete a message with a typo or mistake
  • Possessive emotes: emote 's eyes narrow → “Alice’s eyes narrow.”
  • Capital-letter emotes for creative sentence structure: emote With a flourish, Alice bows

Posture and Presence

  • Sit at places to join conversations: sit at table
  • Stand at landmarks to show where you are: stand at bar
  • Lie on beds to indicate resting or sleeping
  • Use attempt for any physical contact: attempt Alice hugs gently
  • Enable helpless only when you consent to restraint RP
  • Respect denials: If someone denies your attempt, don’t retry immediately

Consumption

  • Smoke, eat, drink add atmosphere to scenes
  • Emote with consumption: Combine with emotes for richer description

Examples

Social gathering:

sit at table
say Hello everyone!
emote leans back in her chair and smiles
drink wine
say to Bob How have you been?

Covert action:

subtle slides a note to Alice under the table
whisper Alice quietly Read this when you're alone

Consent-based restraint scene:

(Alice): helpless on
(Bob): tie Alice hands
(Bob): blindfold Alice
(Bob): carry Alice
walk north
(Bob): release

Combat aftermath:

wake Bob
untie Bob all
say Welcome back, you were knocked out

Dice Rolling

Roll dice based on your character’s stats for checks, saves, and contests.

  • roll — Show menu of your stats to roll
  • roll <STAT> — Roll using a specific stat
  • roll <STAT>+<STAT> — Combine multiple stats

How it works:

  • Rolls 2d8 exploding (8s are rerolled and added)
  • Adds your stat value(s) as a modifier
  • Results broadcast to everyone in the room

Examples:

roll STR
→ Bob rolls STR (3): [6, 4] +3 = 13

roll STR+DEX
→ Bob rolls STR (3) + DEX (2): [8, 5] EXPLODE!+6 +5 = 24

roll INT+WIS+CHA
→ Bob rolls INT (4) + WIS (3) + CHA (1): [7, 2] +8 = 17

Exploding dice: When you roll an 8, you roll again and add the new result. This can chain multiple times.

Combining stats: Use + to combine multiple stat modifiers. Can’t use the same stat twice.

Auto-GM integration: If an Auto-GM has requested a roll, your roll is automatically evaluated against the DC.

Within-Location Movement

Moving between rooms, looking around, maps, and room access

Local Movement Commands

Firefly provides comprehensive navigation tools for moving between rooms, following others, viewing maps, and finding destinations. Movement uses spatial adjacency - rooms connect based on their physical layout, not manual exits.

Basic Movement

Walk - Universal Movement Command

walk <target> - Move to a destination

  • Direction: walk north, walk south, walk east, walk west
  • Room name: walk to Main Street, walk to tavern
  • Character: walk to John (follow them to their room)
  • Furniture: walk to bar, walk to table (approach furniture)
  • Aliases: run, jog, crawl, limp, strut, meander, stroll, sneak, sprint, fly, swagger, stride, march, hike, creep, shuffle, amble, trudge, wander, lumber, pad, skip, plod, shamble, patrol, sashay, stalk, stomp, pace, scramble, stagger, prowl, traipse, drift, saunter

Movement verbs affect description and speed:

  • walk north → “Alice walks north.”
  • run north → “Alice runs north.” (faster)
  • sneak north → “Alice sneaks north.” (slower)
  • crawl east → “Alice crawls east.” (much slower)

Adverbs add flavor: You can add an adverb (any word ending in -ly) to describe how you move:

  • angrily run north → “Alice angrily runs north.”
  • quietly sneak to tavern → “Alice starts quietly sneaking toward the tavern.”
  • hastily walk to Main Street → “Alice starts hastily walking toward Main Street.”

Multi-room pathfinding:

  • walk to tavern → Finds the shortest path and moves you there automatically
  • Shows progress: “You start walking toward the tavern…”
  • Stops at each intermediate room briefly
  • Type stop to cancel mid-journey

Cardinal Direction Commands

north or n - Move north south or s - Move south east or e - Move east west or w - Move west up or u - Move upstairs/climb down or d - Move downstairs/descend

Diagonal directions:

  • northeast (ne), northwest (nw)
  • southeast (se), southwest (sw)

Interior movement:

  • in or enter - Enter a building or interior room
  • out or exit - Leave to exterior

Note: Direction commands are shortcuts for walk <direction>. They use the same pathfinding system.

Stop - Cancel Movement

stop - Stop whatever you’re doing

  • Cancels multi-room walking
  • Stops following someone
  • Stops observing
  • Cancels a world journey
  • Aliases: halt

stop following - Stop following (keeps moving if you were moving) stop observing - Stop observing stop journey - Cancel world journey

Following and Leading

Follow - Track Another Character

follow <character> - Follow someone as they move

  • You automatically move with them when they change rooms
  • Works across multiple rooms
  • Continues until you type stop or stop following
  • Requires permission (they must allow you to follow)

Example:

follow Alice
> You start following Alice.

(Alice moves north)
> You follow Alice north.

Lead - Grant Follow Permission

lead - Show who’s currently following you

lead <character> - Grant permission for someone to follow you

  • PC (player character): Grants follow permission
  • NPC: Asks the NPC to follow you (AI decides)
  • Aliases: allow, permit

lead stop <character> - Revoke follow permission

  • Stops them from following you
  • Aliases: lead revoke

NPC leading:

  • NPCs use AI to decide whether to follow you
  • Based on their relationship with you, personality, current task
  • Cooldown if they decline (prevents spam)

Room Information

Exits - View Available Directions

exits - Show all passable exits from current room

  • Shows direction, arrow, and destination
  • Example: “↑ North (Main Street), ↓ South (Park)”
  • Includes “enter” exits for contained rooms
  • Only shows passable exits (no walls blocking)

Exit types:

  • Spatial exits: Directions to adjacent rooms (north, south, etc.)
  • Contained rooms: Rooms inside this one (enter )

Places - View Furniture and Locations

places - Show all furniture and notable locations in room

  • Aliases: furniture, spots
  • Shows name, description, capacity, occupants
  • Example: “Places: bar, booth, stage, pool table”

Maps

Map - Visual Room and Area Maps

map - Show quickmenu of map types

  • Aliases: viewmap, maps

map room - View interior layout of current room

  • Shows room boundaries, furniture, characters, exits
  • Canvas-based rendering
  • Blocked if blindfolded
  • Aliases: map interior, map floorplan, map rm

map area - View surrounding terrain (hex-based world map)

  • Shows nearby terrain hexes
  • Requires location with world coordinates
  • Radius-based view centered on your location
  • Blocked if blindfolded
  • Aliases: map zone, map hex, map zonemap, map nearby

map city - View city/zone overview

  • Shows your position on the city map
  • Displays map image with pin marker
  • Zone name displayed

map mini - Toggle persistent minimap

  • Enables/disables small corner minimap
  • Stays visible as you move

Finding Destinations

Landmarks - List Public Places

landmarks - Show all public places in your zone

  • Lists public rooms (no owner)
  • Grouped by location
  • Room type indicators: [Shop], [Bank], [Park], [Street], etc.
  • Aliases: public, locations, destinations
  • Use walk <place name> to travel there

Example output:

Public Places in Downtown

Main Street:
  [Street] Main Street and 1st Avenue
  [Shop] General Store
  [Bank] First National Bank

City Park:
  [Park] City Park Entrance
  [Water] Park Fountain

Use 'walk <place name>' to travel there.

Directory - Business Listings

directory - View business directory for your area

  • Lists all shops in your zone
  • Grouped by location
  • Shows shop name and room name
  • Aliases: businesses, shops, yellowpages
  • Optional category filter: directory food, directory clothing

Example:

directory
> Business Directory - Downtown
> ========================================
>
> Main Street:
>   General Store (Main Street and 1st)
>   Coffee Shop (5th Avenue Cafe)
>
> Shopping District:
>   Clothing Boutique (Fashion District)
>
> 3 business(es) listed.
> Visit a shop and use 'list' to see their goods.

Quick Travel

Home - Head Home

home - Walk home via pathfinding

  • Your character walks home through the game world (not instant)
  • Requires home to be set (use sethome in a room you own)
  • Cannot use while in combat
  • Falls back to instant teleport if no walkable route exists
  • Staff characters teleport instantly
  • Aliases: gohome

Taxi - Call a Ride

taxi - Call a taxi or view destination menu

  • Era-dependent (modern/sci-fi only)
  • Shows quickmenu of nearby public destinations
  • Aliases: hail, hail taxi, hail cab, call taxi, rideshare, uber, lyft, autocab

taxi to <destination> - Travel by taxi to a destination

  • Finds destination by name
  • Starts automated journey
  • Example: taxi to Main Street, taxi to park

Era availability:

  • Modern/Contemporary: Taxis, rideshares, autocabs
  • Sci-fi/Future: Autocabs, hover taxis
  • Historical/Fantasy: Not available (use walk or own transportation)

Drive - Use Your Vehicle

drive to <destination> - Drive your vehicle to a destination

  • Requires you to own a vehicle
  • Vehicle must be in current room (or you’re inside it)
  • Starts automated journey
  • Cannot use while in combat
  • Examples: drive to market, drive home, drive to 5th and oak

Vehicle location:

  • If your vehicle isn’t here, error shows where it’s parked
  • Example: “Your sedan is not here. It’s parked at Main Street.”

Movement Mechanics

Spatial Adjacency

Rooms connect based on physical layout, not manual exits:

  • Rooms with shared edges are adjacent
  • Walls block passage unless there’s an opening
  • Doors must be open to pass through
  • Archways and openings are always passable

Passability rules:

  • No wall: Always passable (open plan)
  • Wall with door: Passable only if door is open
  • Wall with archway: Always passable
  • Outdoor rooms: Always passable to each other

Pathfinding

When you walk to a named destination:

  1. System finds shortest path using pathfinding algorithm
  2. Movement starts automatically
  3. You move through each room sequentially
  4. Brief pause at each room
  5. Arrival message when you reach destination

Pathfinding features:

  • Avoids blocked paths (walls, closed doors)
  • Finds shortest route
  • Handles multi-floor navigation (up/down)
  • Stops if path becomes blocked mid-journey

Followers

When you move, your followers automatically move with you:

  • Followers see departure/arrival messages
  • Followers move to same room you entered
  • Followers stop if you stop
  • Multiple characters can follow you at once

Follower chain:

  • Alice follows Bob, Bob follows Charlie
  • When Charlie moves, Bob follows, then Alice follows
  • Entire chain moves together

Prisoners (Dragged/Carried)

If you’re dragging or carrying someone (prisoner mechanics):

  • They automatically move with you
  • Drag: Slower movement speed
  • Carry: Normal movement speed
  • Broadcasts show you dragging/carrying them
  • Use release to put them down

Examples

Basic navigation:

exits
> Main Street Exits: ↑ North (City Park), ↓ South (Downtown Square)

north
> You walk north.
> City Park

walk to tavern
> You start walking toward the Old Tavern...
> You arrive at the Old Tavern.

Following:

lead Alice
> You grant Alice permission to follow you.

(Alice types: follow Bob)
> Alice starts following you.

north
> You walk north.
> Alice follows you north.

Finding places:

landmarks
> Public Places in Downtown
> Main Street:
>   [Street] Main Street and 1st Avenue
>   [Shop] General Store
>
> Use 'walk <place name>' to travel there.

walk to General Store
> You start walking toward the General Store...
> You arrive at the General Store.

Maps:

map room
> (Shows ASCII art room layout with furniture and characters)

map area
> (Shows hex terrain map of surrounding area)

map mini
> Minimap enabled. A small map will be displayed in the corner.

Quick travel:

taxi
> (Shows quickmenu of destinations)

taxi to park
> A taxi arrives. You hop in and head to City Park.
> (Automated journey begins)
> You arrive at City Park.

home
> You head home to Your Apartment.

Tips

  • Use exits to see where you can go before moving
  • Use landmarks to discover new places in your area
  • Use map room to understand room layout and find furniture
  • Follow others to explore new areas together
  • Set your home with sethome in a room you own for quick returns
  • Stop mid-journey with stop if you change your mind
  • Multi-room paths show progress messages - don’t panic if you see several rooms flash by
Related Systems: world_travel combat building

World Travel

Long-distance journeys, taxis, vehicles, weather, and time

World Travel Commands

Firefly provides long-distance travel between cities and locations across the game world. The journey system uses a globe hex grid with realistic terrain-based pathfinding. Travel can be done solo or with a party, and the flashback time system rewards active roleplay by letting you reduce or skip journey time.

Journey Command

journey - Main world travel command with multiple subcommands:

  • journey - Shows journey status if traveling, otherwise opens world map GUI
  • journey to <destination> - Plan travel to a city or location
  • journey party - View travel party status (while assembling)
  • journey passengers - View who’s on your current journey (while traveling)
  • journey invite <name> - Invite someone to your travel party
  • journey launch - Start party journey once assembled
  • journey cancel - Disband your travel party
  • journey return - Return from flashback instance to origin
  • journey disembark - Leave your current journey early (wilderness)
  • Aliases: world_travel, voyage, travel

Planning a Journey

journey to <destination> - Shows travel options quickmenu:

Standard Travel:

  • Normal journey time based on distance and vehicle
  • All passengers travel together in a shared vehicle room
  • Can see ETA with eta command during journey
  • Vehicle type depends on game era and route:
    • Land: horse, carriage, car, maglev, hovercar
    • Water: ferry, steamship, hydrofoil, hovercraft
    • Rail: steam train, train, maglev
    • Air: airplane, aircraft, shuttle (modern+ eras only)

Flashback Travel:

  • Uses accumulated flashback time to reduce/eliminate journey time
  • Three modes with different tradeoffs (see Flashback System below)
  • Flashback time accumulates while you’re not actively RPing
  • Rewards active players who spend time roleplaying

Journey Segments

Some journeys have multiple segments with transfers:

  • Rail journeys: If rail doesn’t reach destination, transfers to land vehicle partway
  • Water journeys: If water route impossible, falls back to land
  • Message shows: “Horse to transfer point, then continue by coach.”
  • Transfer happens automatically when you reach the transfer hex

ETA Command

eta - Check journey status while traveling

  • Aliases: arrival, travel_status, journey_status
  • Shows:
    • Destination name
    • Vehicle type (horse, ship, train, etc.)
    • Current terrain you’re passing through
    • Distance remaining in hexes
    • Estimated arrival time

Example:

eta
> === Journey Status ===
> Destination: Ravencroft
> Vehicle: Carriage
> Current terrain: rolling grasslands
> Distance remaining: 15 hexes
> Estimated arrival: 22 minutes

Disembarking Early

journey disembark - Leave your journey before arriving:

  • Aliases: journey leave, journey exit
  • Drops you in wilderness at current hex
  • Creates a temporary waypoint room based on terrain
  • Other passengers are notified you left
  • If you’re the only passenger, journey is cancelled

Party Travel

Travel with friends! Assemble a group, invite members, and journey together.

Creating a Travel Party

  1. Plan destination: journey to Ravencroft
  2. Select travel mode from quickmenu
  3. Choose “Assemble Party” option
  4. Invite members: journey invite Alice, journey invite Bob
  5. Wait for acceptances - Members receive quickmenu invites
  6. Launch when ready: journey launch

Party commands:

  • journey party - View party status, members, acceptances
  • journey invite <name> - Invite someone in your location
  • journey launch - Start the journey (leader only)
  • journey cancel - Disband party (leader only)

Member responses:

  • Members receive quickmenu: Accept or Decline
  • Can also type accept or decline directly
  • Leader can launch with only accepted members
  • Declined/pending invites are left behind

During party travel:

  • All members travel in the same vehicle
  • Use journey passengers to see who’s aboard
  • Anyone can disembark early (but leader continues)
  • If everyone disembarks, journey is cancelled

Flashback System

Flashback time accumulates when you’re not actively roleplaying. It represents downtime your character has “offscreen” that can be spent on travel.

How Flashback Time Works

Accumulation:

  • Time accumulates while you’re logged in but not RPing
  • Resets when you perform IC actions (say, emote, whisper, etc.)
  • Caps at 12 hours maximum
  • Check with /status or in journey planning menu

Usage:

  • Spend flashback time to reduce journey time
  • Three modes with different tradeoffs
  • Party travel uses minimum flashback time across all members

Flashback Mode: Basic

How it works:

  • Spends your flashback time to reduce journey time
  • If you have enough, arrival is instant
  • If partial coverage, journey time is reduced
  • Not instanced - you arrive in the normal world

Example:

  • Journey to Ravencroft: 30 minutes
  • You have 45 minutes flashback time
  • Result: Instant arrival, 30 minutes consumed, 15 minutes remain

Example (partial):

  • Journey to Ravencroft: 30 minutes
  • You have 10 minutes flashback time
  • Result: Journey takes 20 minutes, 10 minutes consumed

Flashback Mode: Return

How it works:

  • Reserves half your flashback time for the return trip
  • Uses the other half to travel there
  • You arrive in an instanced version of the destination
  • Can only interact with party members (if any)
  • Use journey return to go back to origin

Instancing:

  • You’re in a private instance of the destination
  • NPCs and other players can’t see you
  • Only you and your co-travelers exist there
  • Useful for quick visits without affecting the live world

Example:

  • Journey to Ravencroft: 20 minutes
  • You have 40 minutes flashback time
  • Uses 20 minutes for travel (instant arrival)
  • Reserves 20 minutes for return (instant return)
  • Result: Instant arrival in instanced Ravencroft

Returning:

  • journey return - Return to your exact origin room
  • Uses reserved flashback time
  • If not enough reserved, creates a reduced-time journey back
  • Clears instanced state, returns you to normal world

Flashback Mode: Backloaded

How it works:

  • Instant arrival at destination (no flashback time spent)
  • You’re instanced like Return mode
  • When you return, it takes 2x the normal journey time
  • Creates a “time debt” that must be paid on return

Use case:

  • Emergency travel when you don’t have flashback time
  • Quick visit knowing return will be slow
  • Works for journeys up to 12 hours maximum

Example:

  • Journey to Ravencroft: 30 minutes
  • You have 0 minutes flashback time
  • Result: Instant arrival in instanced Ravencroft
  • Return journey will take 60 minutes (2x)

Returning:

  • journey return - Starts return journey
  • Takes double the original journey time
  • No flashback time used (debt was the instant arrival)

Flashback Time Tips

  • Plan ahead: Accumulate time before long journeys
  • Check before traveling: Journey menu shows your available time
  • Party travel: Uses minimum time across all members
  • Basic mode is safest: No instancing, just time savings
  • Return mode for quick visits: Good for instanced exploration
  • Backloaded for emergencies: Instant there, slow return

Travel Modes

Different terrain and infrastructure support different travel modes:

Land Travel (always available):

  • Vehicle: Horse, carriage, car, hovercar (depends on era)
  • Travels overland avoiding water
  • Automatically finds roads/paths when available
  • Slower through mountains, faster on roads

Water Travel:

  • Requires: Port at origin and destination
  • Vehicle: Ferry, steamship, hydrofoil, hovercraft
  • Travels across oceans and lakes
  • Faster than land for long sea routes

Rail Travel:

  • Requires: Train station at origin and destination
  • Vehicle: Steam train, train, maglev
  • Follows railway networks
  • Very fast, but limited coverage
  • If rail doesn’t reach destination, transfers to land

Air Travel:

  • Requires: Modern+ era (not available in medieval/gaslight)
  • Vehicle: Airplane, aircraft, shuttle
  • Fastest travel mode
  • Direct routes ignoring terrain

Multi-segment journeys:

  • System plans optimal route
  • May combine rail + land, or water + land
  • Transfer happens automatically at connection points
  • Message shows full route when planning

During a Journey

While traveling, you’re in a vehicle room with other passengers:

  • Can talk, emote, roleplay with passengers
  • Use journey passengers to see who’s aboard
  • Use eta to check progress
  • Use journey disembark to leave early
  • Can’t interact with the outside world (you’re in motion)

Journey progression:

  • Journey moves one hex at a time
  • WorldTravelProcessorService advances every minute
  • Time per hex depends on vehicle speed and era
  • Terrain affects speed (mountains slower, roads faster)

Arrival:

  • Automatically placed in destination city
  • Usually a street or plaza (public room)
  • Broadcast message to passengers
  • Journey record marked as ‘arrived’

Examples

Solo standard travel:

journey to Ravencroft
> Journey to Ravencroft?
> [Standard Travel (25 minutes)] - Travel normally to Ravencroft
> [Flashback (Instant)] - Arrive instantly using 25 minutes flashback time
> [Cancel]

(Select Standard Travel)
> You begin your journey to Ravencroft by carriage.

eta
> === Journey Status ===
> Destination: Ravencroft
> Vehicle: Carriage
> Distance remaining: 18 hexes
> Estimated arrival: 22 minutes

Party travel:

journey to Ravencroft
> (Select "Assemble Party")

journey invite Alice
> Invited Alice to the travel party.

journey invite Bob
> Invited Bob to the travel party.

journey party
> Travel Party to Ravencroft:
> Members:
>   Charlie [LEADER]: ✓ accepted
>   Alice: ✓ accepted
>   Bob: ... pending

journey launch
> Your party of 2 begins the journey to Ravencroft.
> (Bob was pending, left behind)

journey passengers
> === Passengers aboard the Carriage ===
> - Charlie (you, driving)
> - Alice
> Destination: Ravencroft
> ETA: 25 minutes

Flashback return travel:

journey to Ravencroft
> (Select "Flashback Return (Instanced)")
> You arrive at Ravencroft via flashback return travel.
> You are instanced and can only interact with your co-travelers.
> Use 'journey return' to travel back.

(Explore instanced Ravencroft)

journey return
> Using reserved flashback time, you return instantly to Main Street.

Disembarking early:

(During journey)
journey disembark
> You disembark and find yourself in Open Plains.
> (Wilderness waypoint room created at current hex)

Tips

  • Use flashback for long trips: Accumulate time, then travel instantly
  • Party travel for groups: Assemble before launching to travel together
  • Check eta during journey: See progress and estimated arrival
  • Multi-segment routes: Rail or water may transfer to land partway
  • Return mode for quick visits: Good for instanced exploration without affecting live world
  • Basic mode is simplest: No instancing, just time reduction
  • Disembark if needed: Can leave journey early in wilderness
  • Plan ahead: Long journeys take real time, use flashback to skip
Quick Reference

Journey Commands

Command Aliases Usage
journey voyage, embark, depart journey to <destination>
eta arrival, travel_status eta
passengers fellow_travelers passengers
disembark leave_journey, get_off disembark

Travel Modes

Mode Requires Examples
Land Default Horse, car, hoverbike
Water Port Ferry, ship, hydrofoil
Rail Station Train, maglev
Air Modern+ era Airplane, shuttle

Vehicle Speed (relative)

Vehicle Speed
Cart 0.8x
Horse 1.5x
Car 3.0x
Train 4.0x
Airplane 7.0x
Shuttle 10.0x

Terrain Difficulty

Terrain Difficulty
Urban/Road Easy
Plain/Field Easy
Forest/Hill Moderate
Desert Moderate
Swamp/Ice Hard
Mountain Very Hard
Ocean Impassable (land)

Era Defaults

Era Land Water Air
Medieval Horse Ferry -
Gaslight Carriage Steamship -
Modern Car Ferry Airplane
Future Maglev Hydrofoil Aircraft
Sci-Fi Hovercar Hovercraft Shuttle

Combat

Fighting, abilities, battle maps, and tactical combat

Combat Commands

Firefly’s combat system combines tactical hex-based battle maps with a dynamic damage threshold system. Combat flows through rounds where you choose actions via quickmenus, then watch dramatic narratives unfold. The system rewards clever positioning, ability choices, and tactical thinking.

Starting Combat

Fight Command

fight <target> - Start combat with another character or NPC

  • Aliases: combat, engage
  • fight (no target) - Shows quickmenu of available targets
  • fight Bob - Engages Bob in combat immediately
  • Broadcasts fight initiation to the room
  • Opens combat quickmenu for your first action

You must be:

  • Alive (not knocked out or dead)
  • Standing (not sitting, lying down, etc.)
  • Not already in combat

Attack Command

attack <target> - Attack someone (starts fight if not in combat)

  • Aliases: hit, att
  • attack (in combat) - Confirm attack on current target
  • attack goblin (not in combat) - Starts fight with goblin
  • attack Bob (in combat) - Changes target to Bob for this round

If already in combat:

  • Changes your target for the current round
  • Sets your main action to “attack”
  • Can be changed until you submit with done

Spar Command

spar <target> - Challenge someone to friendly sparring

  • Aliases: sparring
  • spar (no target) - Shows quickmenu of available sparring partners
  • spar Alice - Challenges Alice to a sparring match
  • Works like combat but tracks “touches” instead of HP damage
  • Great for practice without real consequences
  • No death, no injury, just tactical fun

Sparring differences:

  • Damage doesn’t reduce HP
  • “Touches” count as hits
  • Fight ends when someone yields or time limit
  • No knockout, no lasting effects

Combat Flow

Combat proceeds in rounds. Each round follows this flow:

  1. Input Phase - Choose your actions via quickmenu
  2. Resolution Phase - All actions resolve in 100-segment order
  3. Narrative Phase - See dramatic narrative of what happened
  4. Next Round - Repeat until fight ends

The Combat Quickmenu

When combat starts, you receive a combat quickmenu — a hub menu where you configure your round. Each choice is independent, and you can set them in any order:

Attack / Target - Choose your main action and who you’re targeting

  • Attack - Basic attack with equipped weapon
  • Defend - Focus on defense, harder to hit
  • Dodge - Attempt to evade incoming attacks
  • Ability - Use a combat ability (if you have any)
  • Sprint - Extra movement (+3 hexes), but no attack or other action
  • Pass - Take no action this round

Tactic - Choose a tactical stance or use a tactical ability

  • Aggressive - +1 damage dealt, +1 damage taken
  • Defensive - -1 damage dealt, -1 damage taken
  • Quick - +1 movement, -1 damage dealt, +1 damage taken
  • Guard - Protect an ally (redirect attacks to you)
  • Back to Back - Mutual protection with an ally
  • Tactical abilities (healing spells, buffs) also appear here if available
  • None - No stance

Movement - Choose how to move on the battle map

  • Move toward a target (get closer for melee)
  • Move away from a target (retreat)
  • Maintain distance from a target
  • Stand still - Don’t move
  • Flee - Attempt to leave combat entirely

Use Qi - Allocate qi dice to boost your rolls

  • Spend dice on attack (extra d8s added to damage roll)
  • Spend dice on defense (d8s rolled as armor)
  • Spend dice on ability (extra d8s added to ability roll)
  • Spend dice on movement (d8s rolled, half total = bonus hexes)
  • Each qi die rolls a d8 that explodes on 8
  • Max 2 dice per action type per round

Options - Additional settings

  • Select weapons - Switch between melee and ranged weapons

Done - Submit your choices

  • Type done (or use ready, submit) to lock in choices
  • Can change choices until you submit
  • Round resolves when all participants submit or timeout

Combat Info Command

combat - Get combat information (accessibility friendly)

  • Aliases: cb, ci, fight status, battle
  • combat or combat status - Full combat status
  • combat enemies - List all enemies with HP and distance
  • combat allies - List all allies with HP and distance
  • combat recommend - Get AI target recommendation
  • combat actions - Show available actions
  • combat help - Show all combat subcommands

Screen-reader friendly:

  • All info presented as clear text
  • Distances shown in hexes
  • HP shown as current/max
  • Recommendations based on tactical situation

Done Command

done - Submit your combat choices and lock them in

  • Aliases: ready, submit
  • Marks your input as complete
  • Applies default choices for any options you skipped
  • Triggers round resolution if all participants ready
  • Shows narrative and starts next round

How Damage Works

Firefly uses a damage threshold system, NOT direct HP subtraction. This creates dramatic swings and realistic combat.

Damage Thresholds (at full HP):

Raw Damage HP Lost Result
0-9 0 HP Miss - no effect
10-17 1 HP Glancing blow
18-29 2 HP Solid hit
30-99 3 HP Heavy strike
100-199 4 HP Critical hit
200-299 5 HP Devastating blow
300+ 6+ HP Massive damage

Wound Penalty

As you take damage, thresholds shift DOWN:

  • Each HP lost = -1 to all thresholds
  • Makes you more vulnerable as you get wounded
  • Example: At 4/6 HP (2 HP lost):
    • Miss threshold: ≤7 damage (was ≤9)
    • 1 HP threshold: 8-15 damage (was 10-17)
    • 2 HP threshold: 16-27 damage (was 18-29)
    • 3 HP threshold: 28-97 damage (was 30-99)
  • Wounded characters go down faster!

Example scenario:

  • You’re at full HP (6/6)
  • Enemy rolls 15 damage → 1 HP lost (you’re now 5/6 HP)
  • Next round, enemy rolls 8 damage → normally a miss, but wound penalty makes it 1 HP lost!
  • You’re now 4/6 HP, and each hit hurts more

Qi System

Gain qi when wounded:

  • +0.25 dice per HP lost
  • Maximum 3.0 qi dice
  • At 6/6 HP → 0.0 qi
  • At 4/6 HP → 0.5 qi (2 HP lost)
  • At 0/6 HP → 1.5 qi (6 HP lost, but knocked out)
  • Start each fight with 1.0 qi die

Spend qi dice to boost rolls:

  • Choose “Use Qi” in the combat quickmenu
  • Allocate dice to attack, defense, ability, or movement
  • Each die rolls an extra d8 (explodes on 8) added to that roll
  • Movement dice: roll d8s, half total = bonus movement hexes
  • Max 2 dice per action type per round
  • Dice are spent when used — manage them carefully

Knockout

At 0 HP, you’re knocked out:

  • Fall unconscious
  • Removed from combat automatically
  • Wake up after fight ends (unless killed)
  • Can’t take actions while knocked out

Death:

  • In normal combat: knockout only
  • In dangerous situations: death possible
  • Sparring: never causes death

Battle Map Positioning

Combat takes place on a hex grid (4 feet per hex):

Hex Positioning

Starting position:

  • Based on your room position when combat starts
  • Converted from feet to hex coordinates
  • Sides assigned automatically (attackers vs defenders)

Movement:

  • Choose “Movement” from the combat quickmenu hub
  • Move toward a target - Get closer for melee attacks
  • Move away from a target - Retreat from enemies
  • Maintain distance - Keep current range from a target
  • Stand still - Hold position
  • Flee - Attempt to leave the fight

Distance affects combat:

  • Melee attacks: Must be adjacent (1 hex away)
  • Ranged attacks: Can target from distance
  • Cover bonuses apply based on hex type

Hex Types

Different hexes provide different benefits:

  • Normal - Standard terrain
  • Cover - Bonus to defense
  • High ground - Bonus to attacks
  • Difficult terrain - Slows movement
  • Hazards - Damage per round (fire, water, traps)

Abilities

Combat abilities are special moves with unique effects:

Using Abilities

During quickmenu:

  1. Choose “Abilities” as your main action
  2. Select ability from your available list
  3. Choose target (if required)
  4. Submit with done

Ability types:

  • Attack abilities - Special attacks (Fireball, Chain Lightning, etc.)
  • Defense abilities - Protective moves (Shield Wall, Dodge Roll, etc.)
  • Buff abilities - Boost allies (Inspire, Heal, etc.)
  • Debuff abilities - Weaken enemies (Slow, Poison, etc.)
  • Tactical abilities - Special maneuvers (Charge, Disarm, etc.)

Cooldowns:

  • Most abilities have cooldown periods
  • Can’t use again until cooldown expires
  • Shown as “rounds remaining” in menu

Resource costs:

  • Abilities do not cost qi to activate
  • Qi can be allocated to empower ability rolls
  • Some abilities cost HP
  • Some abilities require specific equipment

Multi-Faction Combat

Fights support multiple sides (not just 1v1):

Side System

Automatic side assignment:

  • First participant → Side 1
  • Target of first participant → Side 2
  • Late joiners → oppose their target’s side
  • Auto-balancing: join side with fewer fighters

Example: 3-way fight:

  • Alice attacks Bob → Alice (Side 1), Bob (Side 2)
  • Charlie attacks Alice → Charlie joins Side 2 (Bob’s side)
  • Dave attacks Bob → Dave joins Side 1 (Alice’s side)
  • Result: Alice & Dave vs Bob & Charlie

Targeting:

  • Can only target participants on opposing sides
  • Can’t attack your own side
  • Sides can be manually changed (staff command)

Examples

Starting a fight:

fight goblin
> You engage Goblin in combat! Choose your target.
> (Combat quickmenu appears)

(Select "Attack" and choose target)
(Optionally set tactic, movement, qi)
done
> Your choices are locked in. Waiting for other combatants...

(When all ready, round resolves)
> === Round 1 Resolution ===
> You swing your sword at the goblin! (Rolls: 15 damage)
> The goblin strikes back with its rusty blade! (Rolls: 8 damage)
> You take 1 HP damage. (5/6 HP remaining)

(Next round quickmenu appears)

Using combat info:

combat enemies
> === Enemies ===
> Goblin - 4/5 HP - 2 hexes away
> Orc Warrior - 6/6 HP - 5 hexes away

combat recommend
> Recommendation: Target Goblin
> Reason: Already wounded, close range, within melee distance

attack goblin
> You target Goblin.

done
> Your choices are locked in.

Sparring match:

spar Alice
> You challenge Alice to a sparring match!

(Combat proceeds normally, but tracks touches)

> === Round 3 Resolution ===
> You land a clean touch on Alice! (Touch #3)
> Alice concedes the match!
> The sparring session is over. You scored 3 touches, Alice scored 1.

Changing tactics mid-fight:

attack
> You prepare to attack Goblin.

(Realize you want to defend instead)
attack
> Reopening your combat menu. You can change your choices until the round resolves.

(Select "Defend" instead)
done
> Your choices are locked in.

Tips

  • Use combat enemies to track opponents’ HP before targeting
  • Spend qi strategically - it’s finite per fight
  • Wound penalty accelerates - finish weak enemies fast
  • Position matters - ranged characters stay back, melee move in
  • Abilities have cooldowns - plan ahead for multiple rounds
  • Sparring is great practice - no risk, learn mechanics
  • Watch for side assignments - make sure you’re targeting the right side
  • Done locks in choices - think before submitting
  • Quickmenu can be reopened - type command again before round resolves
  • NPCs act instantly - they don’t wait for quickmenu, decisions are immediate
Quick Reference

Quick Reference

Command Usage Description
fight fight <target> Start a fight
attack attack [target] Attack or change target
combat combat [status/enemies/allies] Combat status
done done Submit round choices

Main Actions: attack, defend, dodge, sprint, pass, ability

Tactical Actions: damage_boost (+1 dmg), movement_boost (+1 move), defense_boost (-1 incoming)

Movement: stand_still, towards_person, away_from, maintain_distance

Willpower:

  • +0.5/round, +0.25/HP lost, max 3.0
  • Spend: +2 attack, 1d8 defense, +2 ability per die

Damage Thresholds: | Roll | HP Lost | |——|———| | ≤10 | 0 | | 11-15 | 1 | | 16-24 | 2 | | 25+ | 3 |

Wound Penalty: -1 per HP lost

Related Systems: missions delves local_movement

Missions

Structured missions, heists, and group challenges

Missions & Activities System

The activity system provides structured group challenges like heists, missions, competitions, and social encounters. Activities progress through rounds where you make choices, roll dice, vote on decisions, and work together to succeed.

Activity Types

Activities come in various types, each with different goals and mechanics:

  • Mission: Story-driven challenges with branching paths and consequences
  • Task: Simple skill-based challenges with clear objectives
  • Collaboration: Pure cooperative challenges where everyone works toward a shared goal
  • Adventure: Exploration-based activities with discovery and choices
  • Encounter: Social or combat encounters with NPCs
  • Survival: Endurance challenges where you try to last as long as possible

Competitive activity types (Competition, Team Competition, Elimination) are covered in the Events & Competitions & Media system.

Starting and Joining Activities

Use the activity command to interact with the system:

  • activity list - Show available activities in your current location
  • activity start <name> - Begin an activity (you become the leader)
  • activity join - Join an activity that’s being set up in your room
  • activity leave - Leave an activity you’ve joined
  • activity status - See your current activity status and round information

Once an activity starts, everyone who joined becomes a participant. The activity progresses through rounds, and you’ll need to make choices each round to continue.

Round Types

Activities use different round types for variety and different gameplay experiences:

Standard Rounds

The most common type. You’re presented with a menu of action choices:

  1. Read the round description (what’s happening)
  2. Review available actions (what you can do)
  3. Choose an action: activity choose <number>
  4. Optionally set qi to spend: activity qi <0-2>
  5. Wait for everyone to choose
  6. Dice are rolled and results are narrated

Example:

Round 3: You approach the locked vault door. Time is running out.

Available actions:
1. Pick the lock (Dexterity + Lockpicking)
2. Blow the door with explosives (Strength + Demolitions)
3. Search for another entrance (Intelligence + Investigation)

activity choose 1
activity qi 2  (spend 2 qi dice for a better roll)

Branch Rounds

Decision points where the group votes on which path to take:

  • Each participant votes: activity vote <number>
  • Majority wins (ties go to the first option to reach majority)
  • No dice rolling, just group consensus
  • The chosen path determines which rounds come next

Example:

Round 5: The guards are alerted! What's your plan?

Branches:
1. Fight your way through (leads to combat)
2. Hide and wait for them to pass (stealth route)

activity vote 2  (vote for option 2)

Rest Rounds

Recovery periods where you can heal damage and catch your breath:

  • Healing: activity heal - Heals you based on damage taken
    • Every 2 HP you’ve lost = 1 permanent damage that can’t be healed back
    • Example: Lost 1 HP → heal to full. Lost 4 HP → heal to max-2 permanently
  • Continuing: activity continue - Vote to proceed
  • When majority votes to continue, the activity advances
  • No time limit - rest as long as you need

Example:

Round 7: You've escaped the guards and found a safe room to rest.

Your HP: 4/6 (lost 2 HP total → 1 is permanent)

activity heal      (heals you to 5/6 - best possible)
activity continue  (vote to move on when ready)

Free Roll Rounds

Open-ended problem solving where an AI Game Master evaluates your actions:

  • Describe what you want to do in your own words
  • Assess first (optional): activity assess <description> - Gather information
    • Can only assess once per action
    • Roll to see what you learn about the situation
  • Take action: activity action <description> - Describe what you do
    • The AI GM picks which stats apply and sets the difficulty
    • Your dice are rolled automatically
    • The AI narrates the outcome based on your roll

Example:

Round 9: A massive chasm blocks your path. There's no obvious way across.

activity assess I look for anchor points and measure the distance
→ You successfully spot a sturdy pillar across the gap, about 40 feet away.

activity action I tie rope to my grappling hook and throw it across to the pillar
→ Roll: 2d8 (Strength + Athletics) = 16 vs DC 12
→ Success! Your hook catches firmly. The rope holds as you swing across.

Persuade Rounds

Social encounters where you roleplay with an AI-controlled NPC:

  • The AI plays an NPC with a specific personality and goal
  • Use regular RP commands (say, emote) to talk to the NPC
  • The NPC will respond to you in character
  • When ready, roll to persuade: activity persuade
    • The AI evaluates how convincing your conversation was
    • Rating 1-5 affects the difficulty: +10 DC (terrible) to -10 DC (excellent)
    • Roll Charisma (or specified stat) against the adjusted DC
    • Success: You’ve convinced them! Failure: Keep trying with another attempt

Example:

Round 11: Guard Captain Thorne eyes you suspiciously.
NPC Thorne: "State your business. This area is restricted."

say We're here on official guild business, investigating the theft
emote shows Thorne the forged investigation papers
NPC Thorne: "These look legitimate... but I'm not convinced."
say The guildmaster herself sent us. Every hour counts - lives are at stake!

activity persuade
→ Evaluation: Rating 4 (Good arguments) = -5 DC
→ Roll: 2d8 (Charisma) + qi = 18 vs DC 10
→ Success! Thorne nods. "Very well. I'll let you pass, but be quick."

Combat Rounds

The activity pauses and spawns a fight:

  • NPCs appear and combat begins (see Combat system)
  • Use regular combat commands: fight, attack <target>, done
  • When combat ends, the activity automatically resumes
  • Victory/defeat may affect the story or difficulty

Reflex Rounds

Fast-reaction tests with a shorter timeout (2 minutes instead of 8):

  • Tests a specific stat (usually Agility or Reflex)
  • Everyone must choose - no helping or recovering allowed
  • Quick decisions matter!

Group Check Rounds

Everyone rolls individually against the same challenge:

  • All participants must make their own roll
  • No helping or recovering allowed
  • Each person’s result is evaluated separately
  • May require minimum number of successes to pass

Dice Mechanics

Understanding how rolls work helps you make better decisions:

Base Roll

  • 2d8 exploding: Roll two 8-sided dice
  • Exploding: Any die showing 8 is rolled again and added to the total
    • Example: Roll 8 → reroll 6 → total 14 from that die
    • Can chain indefinitely: 8, 8, 5 = 21!
  • Critical failure: If a die shows 1 on advantage, must take the 1

Stat Bonuses

  • Each action uses 1-3 character stats
  • Your stat values are added to the dice roll
  • Higher stats = higher totals

Qi Dice

  • Spend 0-2 qi to add extra d8 dice to your roll
  • Set with: activity qi <0-2>
  • Each qi die explodes on 8 just like base dice
  • Powerful but limited - use wisely!
  • Regain qi with the Recover action

Risk Dice

  • Some actions have risk/reward
  • Adds a d4 with values: -4, -3, -2, -1, +1, +2, +3, +4
  • Can help or hurt your total!

Help and Advantage

  • If someone helps you, you get advantage on dice
  • Advantage: Roll 2 dice, take the higher result
    • Exception: If either die is 1, you MUST take the 1 (critical failure)
  • Two helpers = advantage on both base dice

Success Calculation

  • Your total = Highest participant roll + Average of all risk rolls
  • Success if total ≥ Difficulty Class (DC)
  • DC varies by round and situation

Choosing Actions

Each round, you pick what to do:

Regular Actions

  1. View options: activity status (shows available actions)
  2. Choose: activity choose <number>
  3. Set qi: activity qi <0-2> (optional)
  4. Wait for everyone to choose

Special Actions

Help Another Player:

  • activity help <player name>
  • You don’t roll yourself - instead you give them advantage
  • Your choice of who to help is your action for the round
  • Can have multiple people help the same player
  • Advantage: They roll 2 dice and take higher (unless either is 1)

Recover Qi:

  • activity recover
  • Skip rolling this round to regain 1 qi
  • Use when you’re low on qi and need to build it back up
  • Important for long activities with many rounds

Remote Observation

Watch activities from outside and help or hinder participants:

Requesting to Observe

  1. Go to the room where an activity is running
  2. observe support <player> - Request to help them
  3. observe oppose <player> - Request to hinder them
  4. Player must accept: They use observe accept <your name>
  5. You now observe their activity remotely

As an Observer

  • observe status - See activity status and your queued action
  • observe actions - List actions available for current round type
  • observe action <type> <target> - Submit an action
  • observe leave - Stop observing

Observer Actions

Support actions:

  • stat_swap: Let them use your stat instead of theirs for a roll
  • reroll_ones: Reroll any dice showing 1
  • block_damage: Reduce damage they take in combat
  • halve_damage (combat): Cut damage taken in half
  • expose_targets (combat): Make enemies easier to hit
  • distraction (persuade): Distract the NPC to make persuasion easier

Oppose actions:

  • block_explosions: Their 8s don’t explode (capped at 8)
  • damage_on_ones: If any die shows 1, they take 1 damage
  • block_qi: Prevent qi dice from being added
  • redirect_npc (combat): Make an NPC attack them
  • aggro_boost (combat): Increase enemy aggression
  • npc_damage_boost (combat): Enemies hit harder
  • draw_attention (persuade): Make the NPC focus on them negatively

Example:

observe support Alice
→ Alice accepts your request

observe actions
→ Available support actions: stat_swap, reroll_ones

observe action reroll_ones Alice
→ Queued: reroll_ones on Alice
→ When the round resolves, any of Alice's dice showing 1 will be rerolled

Activity Progress

Track how far you’ve come:

  • activity status - Current round, progress percentage, participants
  • Round counter shows: “Round 5 / 12” (current / total)
  • Progress bar: “Progress: [=========> ] 75%”
  • Rounds done accumulates even on branching paths
  • Some activities have variable length based on choices

Tips for Success

  1. Communication: Coordinate with your team about who does what
  2. Manage qi: Don’t spend it all early - you might need it later
  3. Help synergy: Multiple helpers on one person = very high success chance
  4. Recovery timing: Use rest rounds to heal and recover qi
  5. Branch votes: Discuss before voting - wrong path can be dangerous
  6. Free rolls: Be creative and specific in your descriptions
  7. Persuade rounds: Roleplay genuinely - the AI evaluates your arguments
  8. Observer coordination: Remote supporters can turn the tide

Advanced: Activity Mechanics

For those who want to understand the math:

Resolution Formula

Individual Total = 2d8 (exploding) + stat bonuses + qi dice
Risk Average = Sum of all risk rolls / number of risk rolls
Final Total = Highest individual total + Risk average
Success = Final Total >= DC

Permanent Damage (Rest Rounds)

Permanent Damage = Total HP Lost / 2 (integer division)
Max Healable HP = Max HP - Permanent Damage

Examples:
- Lost 1 HP: Permanent = 0, heal to full
- Lost 2 HP: Permanent = 1, heal to max-1
- Lost 4 HP: Permanent = 2, heal to max-2
- Lost 5 HP: Permanent = 2, heal to max-2

Observer Effect Stacking

  • Multiple supporters can use different effects
  • Multiple opposers can use different effects
  • Same effect from multiple observers: Only strongest applies
  • Effects resolve in order during dice rolling

Troubleshooting

“No activity running”: Use activity list to see available activities, then activity start <name>

“You haven’t chosen yet”: Use activity choose <number> to pick an action

“Not all participants ready”: Wait for everyone to make their choice, or they’ll time out (8 minutes default)

“Can’t help yourself”: Help action requires targeting another player: activity help <name>

“Observe request expired”: Requests expire after 2 minutes - send a new one

“Already used assess”: You can only assess once before each action in free roll rounds

Branch round stuck: Encourage everyone to vote! Majority needed, or timeout will pick first option.

Command Quick Reference

Basic:

  • activity list - Show available activities
  • activity start <name> - Start an activity
  • activity join - Join setup activity
  • activity leave - Leave activity
  • activity status - Show current status

Standard rounds:

  • activity choose <number> - Choose an action
  • activity help <player> - Help another player
  • activity recover - Skip roll, gain qi
  • activity qi <0-2> - Spend qi dice (adds d8s to roll)

Branch rounds:

  • activity vote <number> - Vote for a branch

Rest rounds:

  • activity heal - Heal damage
  • activity continue - Vote to proceed

Free roll rounds:

  • activity assess <description> - Gather information (once per action)
  • activity action <description> - Take an action

Persuade rounds:

  • Use say and emote for RP with the NPC
  • activity persuade - Attempt the persuasion roll

Observation:

  • observe support <player> - Request to support
  • observe oppose <player> - Request to oppose
  • observe accept <player> - Accept an observe request
  • observe reject <player> - Reject an observe request
  • observe status - Show observation status
  • observe actions - List available actions
  • observe action <type> <target> - Submit action
  • observe leave - Stop observing
Related Systems: combat cards_games events_media

Items & Economy

Items, inventory, shopping, banking, clothing, eating, and storage

Items & Economy System

The items and economy system covers everything related to objects and money: picking up items, managing inventory, shopping, banking, wearing clothing, and storing items across locations.

Inventory Basics

Viewing Your Inventory

  • inventory (or inv or i) - See everything you’re carrying
    • Shows wallet balance
    • Items in hand (held)
    • Items carrying (in pockets/bags)
    • Items wearing (on your body)

Example:

inventory

=== Inventory ===

Wallet:
  $250

In Hand:
  flashlight

Carrying:
  (3) energy bars
  water bottle
  notebook

Wearing:
  leather jacket
  blue jeans
  sneakers

Picking Up Items

  • get <item> - Pick up an item from the ground
  • get all - Pick up everything in the room
  • get money - Pick up money from the ground
  • get 50 - Pick up a specific amount of money

Aliases: take, pickup, grab, pick up

Examples:

get sword
→ You pick up the ancient sword.

get all
→ You pick up: backpack, water bottle, 3 energy bars.

get 100
→ You pick up $100.

Dropping Items

  • drop <item> - Drop an item on the ground
  • drop all - Drop everything you’re carrying

Examples:

drop flashlight
→ You drop the flashlight.

drop all
→ You drop everything you're carrying (12 items).

Giving Items

  • give <item> to <person> - Give an item to another player

Examples:

give sword to Alice
→ You give the ancient sword to Alice.

Showing Items

  • show <item> to <person> - Show item without giving
  • show <item> - Show to everyone in the room

Holding and Pocketing

  • hold <item> - Move item to your hand
  • pocket <item> - Move item from hand to inventory

Destroying Items

  • trash <item> - Permanently destroy an item (no getting it back!)

Shopping System

Browsing Shops

When you’re in a room with a shop:

  • shop - Open the shop menu
  • shop list (or just list) - View items for sale
  • shop buy <item> - Purchase an item
  • buy <item> - Quick purchase

Examples:

shop
→ Opens interactive menu with shop options

shop list
→ Shows all items for sale with prices

shop buy leather jacket
→ You buy a leather jacket for $75.

buy 3 energy bars
→ You buy 3 energy bars for $12 ($4 each).

Payment

Shops automatically deduct from:

  1. Your bank account first (if the shop accepts bank cards)
  2. Your wallet second (cash on hand)

Cash-only shops only accept wallet money.

Shop Ownership

If you own a shop (own the building), you can manage stock:

  • shop stock - View your inventory
  • shop add <price> <item> - Add item from your inventory to shop
  • shop remove <item> - Remove item from shop

Examples:

shop add 50 leather jacket
→ Added leather jacket to shop at $50.

shop remove old boots
→ Removed old boots from shop.

Money Management

Checking Balance

  • balance - Check your wallet and bank account balances

Example:

balance

=== Balance ===

Wallet: $125
Bank Account (First National): $1,542
Total Available: $1,667

Banking

At a bank location:

  • deposit <amount> - Deposit money from wallet to bank
  • withdraw <amount> - Withdraw money from bank to wallet

Examples:

deposit 100
→ You deposit $100 into your bank account.
→ Wallet: $25 | Bank: $1,642

withdraw 50
→ You withdraw $50 from your bank account.
→ Wallet: $75 | Bank: $1,592

Clothing System

Wearing Clothing

  • wear <item> - Put on clothing or jewelry
  • wear <item1>, <item2>, <item3> - Wear multiple items
  • wear - Show menu of wearable items

Aliases: don, put on

Examples:

wear jacket
→ You put on a leather jacket.

wear hat, scarf, gloves
→ You put on a winter hat, scarf, and gloves.

Removing Clothing

  • remove <item> - Take off clothing
  • remove all - Remove everything

Aliases: take off, doff

Examples:

remove jacket
→ You remove your leather jacket.

remove all
→ You remove everything you're wearing.

Piercings (Special Handling)

Piercings need a body position:

  • wear <piercing> on <position> - Wear at specific position
  • remove <piercing> - Remove from piercing hole

Example:

wear gold ring on left ear
→ You put the gold ring in your left ear piercing.

remove gold ring
→ You remove the gold ring from your left ear.

Clothing Layers

Clothing has different layers (underwear, shirt, jacket, etc.). The system tracks what goes over what for realistic layering.

Outfit System

Save complete outfits for quick dressing:

Saving Outfits:

  • outfit save <name> - Save what you’re currently wearing
  • outfit save <name> as <type> - Save as partial outfit

Types:

  • full - Complete outfit (removes everything when worn)
  • underwear - Just underwear
  • top - Just shirts/tops
  • bottom - Just pants/skirts
  • overwear - Just jackets/coats
  • jewelry - Just jewelry
  • accessories - Just accessories

Wearing Outfits:

  • outfit wear <name> - Wear a saved outfit
  • dress <name> - Quick wear outfit

Managing Outfits:

  • outfit list - View saved outfits
  • outfit delete <name> - Delete an outfit

Examples:

outfit save casual
→ Saved current outfit as "casual" (6 items).

outfit save work jewelry as jewelry
→ Saved jewelry outfit "work jewelry" (necklace, earrings, bracelet).

dress casual
→ You remove what you're wearing and put on: jeans, t-shirt, sneakers, jacket, cap, watch.

outfit list
→ Your outfits:
  1. casual (6 items) - full
  2. formal (8 items) - full
  3. work jewelry (3 items) - jewelry

Coverage and Exposure

Some clothing covers body parts. Commands for adjusting coverage:

  • cover <position> - Cover a body part
  • expose <position> - Expose a body part
  • flash <position> - Briefly expose then re-cover

Zippers

Some clothing has zippers:

  • unzip <item> - Unzip clothing
  • zipup <item> - Zip up clothing

Wardrobe (Cross-Location Storage)

The wardrobe system lets you store items and transfer them between locations.

Requirements

  • Must be in your home or a storage facility
  • Each location has separate storage

Basic Storage

  • wardrobe - Open wardrobe menu
  • wardrobe store <item> - Store item from inventory
  • wardrobe store all - Store all inventory items
  • wardrobe retrieve <item> - Get item from wardrobe
  • wardrobe retrieve all - Get everything stored here
  • wardrobe list - View stored items at this location

Aliases: closet, vault Store aliases: store, stash Retrieve aliases: retrieve, ret, fetch

Examples:

wardrobe store sword
→ You store the ancient sword in your wardrobe.

wardrobe list
→ Your Wardrobe Here (3 items):
  ancient sword
  leather jacket
  winter coat

wardrobe retrieve jacket
→ You retrieve the leather jacket from your wardrobe.

Transferring Between Locations

Move items from one storage location to another (12-hour delay):

  • wardrobe transfer - List locations with stored items
  • wardrobe transfer from <location> - Start transfer
  • transfer from <location> - Quick transfer command
  • wardrobe status - Check transfer progress

Aliases: transfer, ship, summon

How it works:

  1. Items are marked as “in transit” when you start transfer
  2. After 12 real-time hours, items arrive at destination
  3. Check wardrobe status to see time remaining
  4. When ready, items automatically appear in new location’s wardrobe

Examples:

wardrobe transfer from apartment
→ Transfer initiated: 8 items from Downtown Apartment.
→ Items will be available here in 12 hours.

wardrobe status
→ Transfers In Progress:
  To Beach House: 8 items - 7h 23m remaining

[12 hours later]

wardrobe status
→ Transfers Completed (8 items now available):
  * winter coat
  * formal suit
  * dress shoes
  [... 5 more items]

Storage Tips

  • Organize by location: Keep seasonal items where you need them
  • Transfer ahead: Start transfers before you travel
  • Check status: Use wardrobe status to track deliveries
  • Quick retrieve: retrieve all when you arrive somewhere

Using Consumables

Eating, Drinking, Smoking

  • eat <item> - Consume food
  • drink <item> - Consume drinks
  • smoke <item> - Smoke tobacco/other

Consumable items are used up when consumed and may provide buffs or effects.

Generic Use

  • use <item> - Use an item (activates special abilities)

Item Conditions

Items have condition states that affect value:

  • Excellent - Pristine condition
  • Good - Normal wear
  • Fair - Shows wear
  • Poor - Damaged
  • Broken - Non-functional

Items can also be damaged (torn levels 1-10+):

  • Slightly damaged (1-3)
  • Damaged (4-6)
  • Heavily damaged (7-9)
  • Destroyed (10+)

Quick Reference

Inventory:

  • inventory / inv / i - View inventory
  • get <item> - Pick up
  • drop <item> - Drop
  • give <item> to <person> - Give
  • show <item> - Show to room
  • trash <item> - Destroy permanently

Shopping:

  • shop - Open shop menu
  • shop list / list - Browse items
  • buy <item> - Purchase
  • balance - Check money

Banking:

  • deposit <amount> - Put money in bank
  • withdraw <amount> - Take money out

Clothing:

  • wear <item> - Put on
  • remove <item> - Take off
  • outfit save <name> - Save outfit
  • dress <name> - Wear saved outfit
  • unzip <item> - Unzip
  • zipup <item> - Zip up

Wardrobe:

  • wardrobe - Open menu
  • store <item> - Store item
  • retrieve <item> - Get item
  • transfer from <location> - Move items (12 hours)
  • wardrobe status - Check transfers

Troubleshooting

“You don’t have that.” - Item might be worn or in wardrobe. Check inventory and wardrobe list.

“You can’t afford that.” - Check balance. Shops deduct from bank first, then wallet.

“Remove it first.” - Item is worn. Use remove <item> before storing or dropping.

“No vault access.” - Wardrobe only works in your home or storage facilities.

“Item went out of stock.” - Someone else bought it. Check shop list for alternatives.

Can’t wear piercing: - Need a piercing hole first. Use pierce <position> with <item>.

Transfer not showing: - Transfers take 12 real-time hours. Use wardrobe status to check.

Cards & Games

Card games, interactive games on items and room fixtures

Cards & Games System

The cards and games system lets you play card games with other players and interact with game objects in the world.

Games

Games are interactive objects attached to items you carry or room fixtures (like a dartboard on a wall or an arcade cabinet). Each game has one or more play styles (branches) with different weighted outcomes.

Playing a Game

  • use <item> — Play a game on an item you’re carrying or a fixture in the room
  • use <item> <style> — Play a specific style/mode
  • use <item> reset — Reset your score

Examples:

use dartboard
→ [ Darts - Play Normal ]
→ Good shot! +5 points | Your score: 15 points

use dartboard aggressive
→ [ Darts - Aggressive Throw ]
→ BULLSEYE! +10 points | Your score: 25 points

use slot machine
→ (Shows menu of play styles if multiple available)

use dartboard reset
→ Your score for Darts has been reset.

If a game has multiple play styles, you’ll see a menu to choose from. If it only has one style, it plays directly.

How Results Work

Each game has a set of possible outcomes ordered from best (rarest) to worst (most common). The system uses weighted random selection — better outcomes are harder to get.

  • Position 1 (best result): Rarest, highest points
  • Position 2: Less rare
  • Position 3+ (worst result): Most common, lowest points

The weighting uses an exponential curve, so the best outcome is significantly rarer than the worst.

Stat Influence

Some games are linked to a character stat (like DEX for darts). If a game uses a stat:

  • Your stat is compared to the room average and world average
  • Higher than average = slightly better chance at good outcomes
  • Lower than average = slightly worse chance
  • The effect is subtle — skill helps but doesn’t guarantee results

Scoring

Games can optionally track scores:

  • Each outcome awards a number of points (can be positive or negative)
  • Your cumulative score is tracked per game
  • Scores persist as long as you’re in the room (for room fixtures) or have the item
  • Use use <item> reset to reset your score
  • Scores are personal — each player has their own

Game Types

Games can be placed on:

  • Items: Portable games you carry (dice sets, handheld games, card decks with special rules)
  • Room fixtures: Stationary games placed in rooms (dartboards, arcade cabinets, slot machines, billiard tables)

Games are created by players and can be shared:

  • Private: Only you can attach instances
  • Public: Anyone can attach instances
  • Purchasable: Available for others to buy

Card Games

Play card games with other players using virtual decks.

Opening the Card Menu

  • cards - Open the card game interface

Aliases: card, cardgame, cardmenu

This opens an interactive menu with options for:

  • Starting a new game
  • Joining an existing game
  • Viewing your hand
  • Playing cards
  • Drawing cards
  • Managing the deck

Card Game Basics

Deck Structure:

  • Main deck: Cards to be drawn
  • Player hands: Each player’s cards (faceup or facedown)
  • Center area: Shared space for tricks, community cards, revealed cards
  • Discard pile: Used cards

Card Positions:

  • In deck: Not yet drawn
  • In hand (facedown): Secret from others
  • In hand (faceup): Visible to all
  • Center (facedown): Played but not revealed
  • Center (faceup): Played and visible
  • Discarded: Out of play

Common Actions

Through the card menu you can:

Drawing Cards:

  • Draw cards from the deck to your hand
  • Choose whether cards go faceup or facedown
  • Number of cards specified

Playing Cards:

  • Play from hand to center area
  • Can play faceup (revealed) or facedown (hidden)
  • Center area shared by all players

Revealing Cards:

  • Flip facedown cards to faceup
  • In your hand or in the center
  • Shows the card to all players

Discarding:

  • Send cards from hand to discard pile
  • Discard pile separate from main deck
  • Can be reshuffled into deck if needed

Deck Management:

  • Shuffle: Randomize card order
  • Reshuffle discard: Return discarded cards to deck
  • Collect all: Gather all cards back to deck
  • Deal: Distribute cards to players

Multiple Games

  • Each room can have multiple active card games
  • Players join specific deck instances
  • Games don’t interfere with each other
  • Useful for multiple tables at a casino or game night

Supported Deck Types

The system supports various deck patterns:

  • Standard 52-card deck: Hearts, Diamonds, Clubs, Spades
  • Tarot deck: Major and Minor Arcana
  • Custom decks: Any card design
  • Jokers: Optional inclusion

Cards display with:

  • Full name: “Ace of Spades”
  • Short symbol: “A♠” (for compact display)
  • Suit symbol: ♥ ♦ ♣ ♠

Card Values

For games that need card values:

  • Number cards: Face value (2-10)
  • Jack: 11
  • Queen: 12
  • King: 13
  • Ace: 14 (high) or 1 (low, game-dependent)

Tips for Playing

Communication:

  • Use say to announce your plays
  • Coordinate with other players via chat
  • Establish house rules before starting

Fair Play:

  • Cards in your hand facedown are secret
  • Don’t meta-game with out-of-character knowledge
  • Respect the game state (don’t cheat)

Game Flow:

  1. One player starts a game (creates deck)
  2. Others join the game
  3. Dealer deals initial cards
  4. Players take turns playing cards
  5. Use center area for tricks/community cards
  6. Discard as needed
  7. Reshuffle when deck runs out

Quick Reference

Games:

  • use <item> — Play a game
  • use <item> <style> — Play specific style
  • use <item> reset — Reset your score
  • Weighted random outcomes, stat influence, scoring

Card Games:

  • cards - Open card interface
  • Interactive menu for all actions
  • Deck, hand, center, discard tracking
  • Multiple simultaneous games per room

Troubleshooting

“This game has no playable options.” - The game pattern has no branches configured. Contact the game owner.

“You don’t have enough qi.” - Only applies to activities, not games.

Can’t see card menu: - Make sure you’re in a room that supports card games. Some areas restrict games.

Cards not appearing: - Check if you’ve joined the game. Open cards menu and select “Join Game”.

Deck empty: - Use the reshuffle option to return discarded cards to the deck.

Related Systems: roleplaying

Delves

Procedural dungeon exploration with traps, puzzles, monsters, and treasure

Delves - Procedural Dungeon Exploration

Delves are procedurally generated dungeon crawls where you explore grid-based levels against a 60-minute time limit. Navigate fog-of-war maps, solve timing-based traps, overcome skill check obstacles, solve puzzles, fight roving monsters, and collect treasure from terminal rooms before extracting or running out of time.

Getting Started

Entering a Delve

delve enter Dark Cave

Creates a new procedural dungeon and places you at the entrance. Each delve generates uniquely based on a random seed.

Initial State:

  • HP: 6/6
  • Qi: 0 dice
  • Time: 60:00 remaining
  • Loot: 0 gold
  • Level: 1

Contextual Commands

When inside a delve, movement and action commands work without the delve prefix:

n              # Instead of: delve n
look           # Instead of: delve look
map            # Instead of: delve map

Core Mechanics

Time Management

Actions consume time from your 60-minute limit:

Action Time Cost
Movement (n/s/e/w/down) 10 seconds
Fight 10 seconds (per combat round)
Recover (rest to full HP) 5 minutes
Focus (gain qi die) 30 seconds
Study (monster for +2 bonus) 1 minute
Easier (lower blocker DC) 30 seconds
Listen (extend trap sequence) 10 seconds
Solve (puzzle attempt) 15 seconds
Grab (loot treasure) Free

Time runs out? You collapse from exhaustion, lose 50% of collected loot, and are ejected with status fled.

Health & Qi

HP System:

  • Start: 6/6 HP
  • Traps deal 1 HP per dungeon level
  • Combat uses standard damage threshold system
  • Recover: Rest to full HP (costs 5 minutes)

Qi Dice:

  • Start: 0 dice
  • Focus: Gain 1 die (costs 30 seconds, max 3 dice)
  • Use in skill checks for rerolls/advantages
  • Not consumed in delves (permanent until extraction)

Loot & Extraction

Gold Collection:

  • Treasure found in terminal rooms (dead ends)
  • Value doubles each level: Level 1 = 5-10g, Level 2 = 10-20g, Level 3 = 20-40g
  • grab collects treasure (free action)
  • Monster kills award bonus gold (half their difficulty value)

Extraction Methods:

  • flee - Exit immediately, keep all collected loot
  • Time expired - Lose 50% loot, ejected
  • Defeated in combat - Lose 50% loot, ejected
  • Complete dungeon - Descend to final level and extract

Movement & Navigation

Basic Movement

n / north      # Move north
s / south      # Move south
e / east       # Move east
w / west       # Move west
down / d       # Descend to next level (at exit room)

Room Types:

  • Corridor - Empty passage
  • Chamber - Large space, may contain treasure
  • Treasure - Terminal room with loot
  • Monster - Contains hostile creature
  • Trap - Trapped exit
  • Puzzle - Logic puzzle blocks progress
  • Boss - Powerful enemy before exit
  • Exit - Stairs down to next level

Fog of War

You can only see:

  • Current room - Full details
  • Adjacent rooms - Direction availability only
  • Explored rooms - Shown on minimap

Visibility:

look           # Inspect current room
map            # Show explored area minimap
fullmap        # Show all explored rooms

Obstacles & Challenges

Timing Traps

Traps block movement in specific directions using coprime pulse patterns. You must observe the trap’s rhythm and time your passage through safe pulses.

How Traps Work:

  1. Observe the pattern:
    study n        # Study north trap
    

    Output example:

    1. quiet
    2. quiet
    3. TRAP!
    4. quiet
    5. TRAP!
    6. quiet
    7. TRAP!
    8. quiet
    
  2. Extend observation if needed:
    listen n       # See more pulses (costs 10 sec)
    
  3. Time your passage:
    go n 2         # Pass through at pulse #2
    

First-Time vs Experienced:

  • First passage: BOTH your chosen pulse AND the next pulse must be safe
    • Example: Choose pulse 2 → pulses 2 AND 3 must both be “quiet”
  • Repeat passage: Only your chosen pulse needs to be safe
    • After passing once, you’re “experienced” with that trap
    • Example: Choose pulse 2 → only pulse 2 needs to be “quiet”

Failed Timing:

  • Take damage equal to dungeon level (Level 3 trap = 3 HP damage)
  • Still move through (you’re not blocked, just hurt)

Skill Check Blockers

Obstacles require stat checks to pass:

Blocker Type Stat Description
Barricade STR Heavy obstacle to break through
Locked Door DEX Lock to pick
Gap AGI Dangerous jump across
Narrow Ledge AGI Balance required

Commands:

study n          # View blocker details, DC, stat
easier n         # Lower DC by 1 (costs 30 sec)
n                # Attempt to pass (auto skill check)

Failure Results:

  • Barricade/Locked Door: Blocked, no damage
  • Gap/Narrow: Take damage AND blocked

Making It Easier:

easier n         # Costs 30 sec, reduces DC by 1
easier n         # Can use multiple times
n                # Then attempt passage

Puzzles

Three puzzle types block progression:

  1. Symbol Grid - Deduce symbols from clues
  2. Pipe Network - Rotate pipes to connect source to drain
  3. Toggle Matrix - Click cells to reach target state

Commands:

study puzzle     # View puzzle details
solve <answer>   # Attempt solution (costs 15 sec)

Difficulty Scaling:

  • Easy (Levels 1-2): More clues, smaller grids
  • Medium (Levels 3-4): Moderate challenge
  • Hard (Levels 5-6): Few clues, larger grids
  • Expert (Levels 7+): Maximum difficulty

Accessibility Mode: If you have accessibility mode enabled, puzzles are replaced with an alternative obstacle — a trap, stat check, or blocker — so you still face a challenge without needing to solve the puzzle directly.

Combat & Monsters

Roving Monsters

Monsters patrol the dungeon and move every 10 seconds when you perform time-consuming actions (10+ second cost). They move randomly through adjacent rooms.

Monster Encounters:

  • Monsters in your room are immediately visible
  • Combat initiates automatically when you collide
  • Uses standard combat system (see help system combat)

Monster Types (by level):

  • Level 1-2: Rat, Spider, Goblin
  • Level 3-4: Skeleton, Orc
  • Level 5-6: Troll, Ogre
  • Level 7+: Demon, Dragon

Study System

Gain +2 combat bonus by studying a monster type before fighting:

study goblin     # Costs 1 minute
fight            # +2 attack and defense vs goblins
  • Study bonus applies to ALL instances of that monster type
  • Persists for entire delve
  • Stacks with other bonuses

When to Study:

  • Before first fight with a monster type
  • When you have spare time (>5 minutes remaining)
  • Not worth studying if time is critical

Combat Integration

  • Uses existing fight system
  • Each round costs ~10 seconds of delve time
  • HP syncs between delve and combat
  • Victory: Monster defeated, gain bonus gold
  • Defeat: Lose 50% loot, ejected from delve

Multi-Level Progression

Descending Levels

down             # At exit room (stairs)

Level Generation:

  • Entrance room at one corner
  • Exit room at opposite corner
  • Boss room before exit (if enough rooms)
  • Increased difficulty per level

Difficulty Scaling:

  • Monster power: +20% per level
  • Trap damage: +1 HP per level
  • Puzzle complexity increases
  • Treasure value doubles

Strategy Guide

Optimal Delve Run

  1. Explore efficiently
    • Move quickly (10 sec per room)
    • Skip optional fights if low on time
    • Prioritize terminal rooms for treasure
  2. Manage HP carefully
    • Use recover only when below 3 HP
    • Study monsters before fighting (1 min investment pays off)
    • Avoid risky gaps/ledges if low HP
  3. Use qi strategically
    • Focus early when you have time
    • Save qi for critical skill checks
    • Max 3 dice = don’t over-invest
  4. Trap navigation
    • Study traps once, remember pattern
    • Use listen only if pattern is ambiguous
    • Mark experienced traps (easier second time)
  5. Time budgeting
    • 10 rooms = ~2 minutes travel
    • 1 fight = ~5 minutes
    • 1 recover = 5 minutes
    • Leave 10 minutes buffer for escape

When to Flee

Flee immediately if:

  • Time < 10 minutes remaining
  • HP = 1 and no time to recover
  • Surrounded by monsters with no escape route
  • Collected valuable loot and satisfied

Keep going if:

  • Time > 20 minutes remaining
  • HP > 3
  • Clear path to more treasure
  • No monster encounters

Quick Reference

Entry & Exit:

  • delve enter <name> - Create and enter dungeon
  • flee - Exit, keep loot

Movement:

  • n/s/e/w/down - Move (10 sec)
  • look - Inspect room
  • map - Show minimap

Obstacles:

  • study <direction> - Study trap/blocker
  • listen <direction> - Extend trap observation
  • go <direction> <pulse> - Pass trap at pulse
  • easier <direction> - Lower blocker DC
  • study puzzle - View puzzle
  • solve <answer> - Attempt puzzle

Combat:

  • study <monster> - Study for +2 bonus (1 min)
  • fight - Engage monster

Resources:

  • grab - Loot treasure (free)
  • recover - Heal to full (5 min)
  • focus - Gain qi die (30 sec)

Status:

  • status - View current stats
  • (Dashboard shows automatically when in delve)

Troubleshooting

“You can’t go that way.” - Exit blocked by trap, blocker, or no room in that direction. Use look to see available exits.

“Trap blocks the way!” - Use study n to see pulse pattern, then go n <#> to time your passage.

“That obstacle has already been cleared.” - Blocker was defeated, move freely now.

“The puzzle has already been solved.” - Puzzle cleared, continue exploring.

“You don’t have any stats to roll.” - Set up stat block in character customization first.

“Time has run out!” - 60 minutes expired, ejected with 50% loot penalty.

Can’t see monster: Monsters are immediately visible in current room description. Check look output.

Lost in dungeon: Use map to see explored areas. Terminal rooms (dead ends) have treasure.

Related Systems: combat missions

Building

World building — rooms, cities, NPCs, and procedural content

Building System - World Construction

The building system provides tools for creating and modifying the game world. Build cities with street grids, construct buildings at intersections, customize rooms with decorations and dimensions, manage property ownership, and use AI-powered generation for realistic content.

Requires: Staff permissions with can_build flag OR creator mode enabled.

Getting Started

Permissions Check

Most building commands require one of:

  • Staff role with can_build permission
  • Admin role (has all permissions)
  • Creator mode enabled (for non-staff building access)

Check your permissions:

@check permissions    # View your permission flags

Creator Mode

Creator mode allows rapid iteration on building projects without full staff permissions:

@creator on           # Enable creator mode
@creator off          # Disable creator mode
@creator              # Check current status

Creator mode grants:

  • Access to building commands
  • Ability to modify owned rooms
  • Fast building workflow

Does NOT grant:

  • Permission to modify others’ rooms
  • Access to admin-only commands
  • Staff privileges

City Building

Creating a City

Build a city with a grid of streets (E-W) and avenues (N-S):

build city            # Interactive form
build city New York   # Quick build with defaults

Interactive Form Fields:

  • City Name - Name for the city (e.g., “New York City”)
  • Streets (E-W) - Number of horizontal streets (2-50, default: 10)
  • Avenues (N-S) - Number of vertical avenues (2-50, default: 10)
  • Max Building Height - Maximum height in feet (50-500ft, default: 200)
  • Longitude/Latitude - Optional coordinates for LLM context
  • Use AI for Street Names - Generate realistic names via AI

What Gets Created:

  • Street segments - E-W passages between avenues
  • Avenue segments - N-S passages between streets
  • Intersections - Grid points where streets/avenues cross
  • Sky room - Elevated room above the entire city

Example Output:

You have built New York City!

Created:
  - 10 streets (E-W)
  - 10 avenues (N-S)
  - 100 intersections
  - 1 sky room
  - Total: 111 rooms

You are now at 1st Avenue & 1st Street.
Use 'build block' at intersections to add buildings.

Street Grid Layout

Cities use a grid coordinate system:

  • Grid X: Avenue index (0 to N-1)
  • Grid Y: Street index (0 to N-1)
  • Intersections: At grid points (x, y)
  • Streets: Between avenues on same Y coordinate
  • Avenues: Between streets on same X coordinate

Navigation Example:

1st Ave & 1st St  →  (grid_x: 0, grid_y: 0)
1st Ave & 2nd St  →  (grid_x: 0, grid_y: 1)
2nd Ave & 1st St  →  (grid_x: 1, grid_y: 0)

Movement follows spatial adjacency - walk from intersection to street to next intersection.

Street Naming

AI-Generated Names (realistic):

  • Uses Claude to generate thematic street names
  • Context-aware (considers location, era, theme)
  • Examples: “Broadway”, “Park Avenue”, “Sunset Boulevard”

Numbered Names (default):

  • “1st Street”, “2nd Street”, etc.
  • “1st Avenue”, “2nd Avenue”, etc.
  • Fast generation, no API calls

Configuration:

  • Set use_llm_names: true to force AI generation
  • Set use_llm_names: false to force numbered names
  • Leave blank for auto-detection (based on world theme)

Building at Intersections

Building Blocks

Add buildings to intersections using predefined layouts:

build block           # Interactive menu (when at intersection)
build block apartment # Quick build apartment tower
build block shop      # Quick build shop/cafe
build block house     # Quick build single house

Available Block Types:

Type Description Rooms Created
Apartment Tower Multi-story building with rentable units 6-12 apartments + lobby + roof
Brownstone Classic urban row house 3-5 floors, private residence
House Detached single home 1-2 floors, garden
Shop/Cafe Commercial space Storefront + storage
Restaurant Dining establishment Dining room + kitchen + office
Bar Drinking establishment Bar area + storage + office
Mall Shopping center Multiple storefronts
Church Religious building Sanctuary + office
Hospital Medical facility ER + wards + offices
Police Station Law enforcement Precinct + cells + offices

Block Building Process:

  1. Stand at intersection (room_type = ‘intersection’)
  2. Run build block
  3. Select building type from menu
  4. Building is constructed at that grid position
  5. Interior rooms are created with spatial connections

Apartments

Create rentable apartment units:

build apartment       # At intersection or inside building

Apartment Features:

  • Rentable - Can be assigned to characters
  • Private - Only owner can enter
  • Customizable - Owner can decorate and resize
  • Storage - Safe location for items/wardrobe

Assignment:

make home             # Set apartment as your home

Shops

Create merchant shops:

build shop            # At intersection

Shop Features:

  • Merchant Interface - Stock items for sale
  • Ownership - Owner controls inventory
  • Economy Integration - Uses currency system
  • Location-Based - Customers must be in shop to browse

Shop Management:

  • See help system items_economy for shop commands
  • shop stock - Manage inventory
  • shop add <price> <item> - Add item to shop
  • shop remove <item> - Remove item from shop

Room Customization

Decorations

Add descriptive elements to rooms you own:

decorate A plush velvet couch sits by the window.
decorate Vintage posters line the walls.
decorate A crystal chandelier hangs from the ceiling.

Each decoration:

  • Appears in room’s long description
  • Has a display order (appears in order added)
  • Can be removed via redecorate

Removing Decorations:

redecorate            # Interactive menu to remove decorations

Resizing Rooms

Change room dimensions (spatial bounds):

resize room <width> <depth> <height>
resize room 30 40 12    # 30ft wide, 40ft deep, 12ft tall

Dimensions:

  • Width (X-axis): Minimum 10ft, maximum 200ft
  • Depth (Y-axis): Minimum 10ft, maximum 200ft
  • Height (Z-axis): Minimum 8ft, maximum 50ft

Use Cases:

  • Enlarge apartment for more space
  • Create tall ceilings for dramatic effect
  • Adjust room to fit furniture placement

Spatial Navigation: Resizing updates the room’s polygon bounds. Characters navigate via spatial adjacency - if two rooms share an edge, you can move between them.

Editing Room Properties

Modify room details:

edit room             # Interactive form

Editable Properties:

  • Name - Room title
  • Short Description - Brief description (1 line)
  • Long Description - Detailed description (paragraph)
  • Room Type - Type identifier (apartment, shop, house, etc.)
  • Public/Private - Accessibility settings
  • Background Image - Visual theme
  • Seasonal Variant - Seasonal background override

Renaming Rooms

Quick rename:

rename My Cozy Apartment
rename The Crimson Lounge

Changes the room’s display name.

Deleting Rooms

Remove rooms you own:

delete room           # Requires confirmation

Safety:

  • Can only delete owned rooms
  • Cannot delete rooms with characters inside
  • Spatial connections are recalculated
  • Irreversible action - use with caution

Property Ownership

Making a Home

Set your current apartment as your home:

make home             # Must be in apartment you own

Home Benefits:

  • Fast travel via @home command
  • Safe storage location
  • Privacy controls
  • Customization permissions

Buying Property

Purchase buildings for ownership:

buy house             # Purchase house
buy shop              # Purchase shop space

Requirements:

  • Must have sufficient currency
  • Property must be available for sale
  • Transaction is final

Advanced Features

AI Content Generation

Generate world content using AI:

generate <type> <context>
generate room modern apartment
generate npc friendly merchant
generate description cozy cafe

Generation Types:

  • room - Room descriptions
  • npc - NPC personalities and backgrounds
  • description - Generic descriptive text
  • street names - Realistic street names

Uses LLM (Claude) for creative content generation.

Graffiti

Add temporary markings to public spaces:

graffiti Was here - Bobby 2025

Graffiti Features:

  • Appears in room description
  • Public visibility
  • Can be cleaned by staff

Cleaning Graffiti:

clean graffiti        # Remove graffiti from room

NPC Location Management

Set NPC spawn points and patrol paths:

npc location <npc_name> here   # Set current room as NPC location

Use Cases:

  • Define merchant locations
  • Set guard patrol routes
  • Assign quest giver positions

Quick Reference

City Creation:

  • build city - Create city grid
  • build city <name> - Quick build with defaults

Building Types:

  • build block - Add building at intersection
  • build apartment - Create apartment
  • build shop - Create shop
  • build location - Create standalone room

Room Editing:

  • decorate <text> - Add decoration
  • redecorate - Remove decorations
  • edit room - Edit properties
  • rename <name> - Rename room
  • resize room <w> <d> <h> - Change dimensions
  • delete room - Delete room

Property:

  • make home - Set home location
  • buy house - Purchase house
  • buy shop - Purchase shop

Advanced:

  • generate <type> <context> - AI content generation
  • graffiti <text> - Add graffiti
  • clean graffiti - Remove graffiti
  • npc location <npc> here - Set NPC location

Troubleshooting

“Building commands require staff permissions or creator mode.” - Enable creator mode with @creator on or contact admin for building permissions.

“A city has already been built at this location.” - Cities can only be built once per location. Use existing city or choose a different location.

“You must be at an intersection to build a block.” - Stand at a grid intersection (where street meets avenue) before using build block.

“You don’t own this room.” - You can only edit/decorate rooms you own. Use make home in apartments you’ve rented or buy house to purchase property.

“Room dimensions must be at least 10x10x8 feet.” - Minimum room size enforced. Check resize room usage.

“Cannot delete room with characters inside.” - Ask all characters to leave the room before deleting it.

LLM generation fails: - Check that ANTHROPIC_API_KEY is configured. LLM features require Claude access.

Quick Reference

Room Customization

Command Permission Usage
rename Owner rename <new name>
set background Owner set background <url>
set seasonal Owner set seasonal desc morning spring <text>
windows Owner windows (toggle)
make home Owner make home

Decoration

Command Permission Usage
decorate Owner decorate
redecorate Owner redecorate
graffiti Anyone graffiti <text>
clean graffiti Owner/Staff clean graffiti

Access Control

Command Permission Usage
lock doors Owner lock doors
unlock doors Owner unlock doors
grant access Owner grant access <name>
revoke access Owner revoke access <name>
access list Owner access list

Creator Mode

Command Permission Usage
creator mode Staff/Builder creator mode
build location Creator build location
build shop Creator build shop
build city Staff build city <name>
build block Staff build block <type>

Building Types

Residential: apartment_tower, brownstone, house, townhouse, cottage Commercial: office_tower, hotel, mall, shop, restaurant, bar Civic: church, school, hospital, library, police_station Recreation: park, playground, garden, plaza

Block Layouts

Layout Description
full Single building
split_ns Two buildings (N/S)
split_ew Two buildings (E/W)
quadrants Four corners
perimeter Ring with courtyard

Seasonal Time Options

morning, afternoon, evening, night, day, dawn, dusk, default (or - for any)

Seasonal Season Options

spring, summer, fall, winter, default (or - for any)

Crafting

Pattern-based item fabrication and meta-structure creation

Crafting System

Firefly’s crafting system consists of two distinct mechanics: pattern-based fabrication for physical items, and meta-structure creation for game elements like events and notes.

Pattern-Based Fabrication

Overview

The fabricate command lets you create physical items from patterns - templates you own that define item properties. Fabrication requires appropriate facilities and takes time based on the current era.

Basic Usage:

fabricate <pattern name>     # Create an item from a pattern you own
fabricate                    # View your pending orders
fabricate orders             # Same as above
fabricate pickup <id>        # Pick up a ready order
fabricate deck               # Special: Create a card deck

Examples:

fabricate silk dress
fabricate leather jacket
fabricate golden ring
fabricate pickup 1

Aliases: conjure, fab

How Fabrication Works

  1. Find a Facility: Visit an appropriate workshop, shop, or crafting room for your item type
  2. Select Your Pattern: Use fabricate <name> with a pattern you own
  3. Choose Delivery:
    • Pickup: Return to the workshop when ready (default)
    • Delivery: Have it delivered to your home room (if you own one)
  4. Wait: Fabrication takes time based on era and item complexity
  5. Collect: Pick up your item or find it delivered to your home

Era-Based Timing

Fabrication speed depends on the current game era:

Era Base Time Example (Clothing) Technology
Medieval 4 hours ~4 hours Handcraft by artisan
Gaslight 2 hours ~2 hours Industrial workshops
Modern 30 minutes ~30 minutes Automated machinery
Near-Future 1 minute ~1 minute 3D printing
Sci-Fi Instant Instant Matter replicators

Complexity Multipliers:

  • Clothing: 1.0× (standard)
  • Jewelry: 1.5× (intricate work)
  • Weapons: 2.0× (heavy forging)
  • Tattoos: 0.5× (quick application)
  • Pets: 3.0× (breeding/cloning)

Examples:

  • Medieval clothing: 4 hours
  • Modern jewelry: 45 minutes (30 min × 1.5)
  • Sci-Fi weapon: Instant (below 10-second threshold)

Facility Requirements

Different item types require specific facilities:

Clothing & Fashion:

  • Tailor shops
  • Fashion studios
  • General shops

Jewelry:

  • Jeweler shops
  • Crafting studios
  • General shops

Weapons:

  • Forges
  • Armories
  • Blacksmiths

Tattoos:

  • Tattoo parlors
  • Medical clinics

Pets:

  • Pet shops (medieval/modern)
  • Breeders (medieval/modern)
  • Cloning labs (sci-fi)

Universal Facilities (any pattern type):

  • Replicators (sci-fi)
  • Materializers (sci-fi)
  • Fabrication bays (sci-fi)

Tutorial Rooms: Always allow fabrication regardless of type.

Delivery Options

When fabricating an item with significant time requirements, you’ll be presented with delivery options:

Pickup (Default):

  • Return to the workshop when the item is ready
  • Use fabricate pickup <id> or fabricate pickup <index> to collect
  • Must be at the fabrication room to pick up

Delivery (Home Required):

  • Item is delivered to your home room when complete
  • Requires owning a room (property ownership)
  • Receive notification when delivery arrives

Checking Orders:

fabricate               # Show all pending orders with:
                        # - Item name
                        # - Time remaining or "Ready"
                        # - Delivery method (pickup/delivery)
                        # - Location (workshop or home)

Instant Fabrication

If fabrication time is under 10 seconds (typically sci-fi era), the item is created instantly in your inventory without delivery options.

Patterns

Patterns are templates that define item properties:

  • Description: Visual appearance
  • Type: Clothing, jewelry, weapon, etc.
  • Properties: Layer, coverage, damage, etc.
  • Era: Min/max year restrictions
  • Price: Shop purchase cost

Acquiring Patterns:

  • Purchase from shops
  • Receive as quest rewards
  • Staff creation via admin interface
  • Player-created patterns (future feature)

Pattern Ownership:

  • You can only fabricate patterns you own
  • Patterns are stored in your inventory or pattern collection
  • Some patterns may be era-restricted

Card Decks

Special fabrication for card decks:

fabricate deck          # Create a card deck from your owned patterns

If you own multiple deck patterns (Standard 52-card, Tarot, custom decks), you’ll be prompted to choose which one to fabricate.

Era-Appropriate Messaging

The system uses era-appropriate language:

Medieval/Gaslight:

“The craftsman begins work on your silk dress. Return here in 4 hours to collect it.”

Modern:

“Your order has been placed. It will be ready in 30 minutes.”

Near-Future:

“Fabrication initiated. Estimated completion: 1 minute.”

Sci-Fi:

“Synthesizing… ready in 3 seconds.”

Meta-Structure Creation

Overview

The make command creates non-physical game elements like events, societies, and personal notes. These are meta-structures - organizational and narrative tools rather than physical items.

Note: For physical items like weapons, clothing, and objects, use fabricate or design (staff only).

Supported Meta-Structures

Events & Scheduling:

make event              # Create a scheduled event (redirects to web)
make calendar           # Same as above

Creates events with attendee tracking, decoration, and scheduling. Handled through the web interface at /calendar/new.

Social Groups:

make society            # Create a social group (redirects to web)
make club               # Same as above
make group              # Same as above

Creates societies/clubs with membership management. Handled through the web interface at /societies/new.

Personal Notes:

make memo <text>        # Create a personal note-to-self
make note <text>        # Same as above

Example:

make memo Remember to visit the library tomorrow at noon

Creates a memo stored in your character’s inbox. Useful for tracking tasks, reminders, or IC notes.

Roleplay Scenes:

make scene [name]       # Begin a roleplay scene
make story [name]       # Same as above

Examples:

make scene The Tavern Confrontation
make scene              # Auto-names based on current room

Marks the start of a roleplay scene for history tracking and narrative continuity.

Building Elements (Room Ownership Required):

These require owning the current room:

make entrance           # Mark this room as an entrance (visitor arrival point)
make library            # Designate this room as an arcane library

Web-Only Building Features:

These redirect to the building interface:

make space              # Configure room space properties
make floor              # Add floors to multi-story buildings

No Arguments

Running make with no arguments shows available types:

make

Output:

Make what? Available types: calendar, club, entrance, event, floor, group, library, memo, note, scene, society, space, story

Examples: make event - Create a scheduled event make society - Create a social group make memo - Create a personal note make scene - Start a roleplay scene

Staff Commands

Design Command (Staff Only)

The design command is a staff tool for creating physical items directly, bypassing the fabrication system:

design                  # Open design menu
design item             # Create an item with form interface

Aliases: create item, createitem, spawn item, item create

Item Types:

  • Generic Item
  • Weapon (with damage properties)
  • Armor (with armor value)
  • Clothing
  • Jewelry
  • Container (with capacity)
  • Food (consumable)
  • Drink (consumable)
  • Key (with unique ID)
  • Furniture
  • Decoration

Form Fields:

  • Name: Item display name (required, max 200 chars)
  • Description: Detailed description (optional, max 2000 chars)
  • Type: Item category (affects properties)
  • Quantity: Number of items (1-999)
  • Condition: Excellent, Good, Fair, Poor, Broken
  • Image URL: Optional image URL (must start with http/https)

Properties by Type:

  • Weapons: Auto-assigned damage_dice: '1d6', weapon_type: 'melee'
  • Armor: Auto-assigned armor_value: 1, armor_type: 'light'
  • Containers: Auto-assigned capacity: 10, container: true
  • Food: Auto-assigned consume_type: 'food', consume_time: 5
  • Drink: Auto-assigned consume_type: 'drink', consume_time: 3
  • Keys: Auto-assigned unique key_id (16-char hex)

Usage:

  1. Use design or design item to open the form
  2. Fill in item details
  3. Submit to create the item in your current room
  4. Other players in the room see: “{Your Name} creates {item name}.”

Permissions:

  • Requires staff: true or admin: true on character
  • Creator mode does NOT grant access to design command

Summary

Command Purpose Access Creates
fabricate Pattern-based item creation All players Physical items from owned patterns
make Meta-structure creation All players Events, memos, scenes, building elements
design Direct item spawning Staff only Physical items without patterns

Key Concepts:

  • Patterns define item templates you can fabricate
  • Era determines fabrication speed (medieval hours → sci-fi instant)
  • Facilities restrict what can be made where (tailor for clothing, forge for weapons)
  • Delivery lets you choose pickup vs home delivery
  • Meta-structures are non-physical game elements (events, notes, scenes)
Related Systems: items_economy building

World Memory/Narrative Intelligence

Automatic RP capture, NPC memories, relationships, pets, and narrative tracking

World Memory & Narrative Intelligence

Firefly automatically captures, remembers, and responds to your roleplay. This system runs behind the scenes with no player commands - it just works. Here’s what you can expect:

World Memory: Automatic RP Capture

What Gets Captured

When 2 or more characters engage in IC (in-character) activity, the system automatically starts a session to track the interaction:

Tracked Message Types:

  • Say
  • Emote
  • Whisper
  • Think
  • Attempt
  • Pose
  • Action

Not Tracked:

  • OOC (out-of-character) communication
  • System messages
  • Solo activity (only 1 character in room)
  • Private mode activity

How It Works

  1. Session Start: When you and another character start interacting, a session begins
  2. Message Collection: Your IC messages are logged in a buffer
  3. Session End: When characters leave or activity stops for 2 hours, the session finalizes
  4. AI Summary: If the session has 5+ messages, an AI generates a summary
  5. Searchable Memory: The summary becomes part of the searchable world history

Privacy Levels

Sessions are tagged with publicity levels:

  • Private: Private events, character set to private mode
  • Secluded: Small private gatherings
  • Semi-Public: Limited public spaces
  • Public: Open public areas
  • Private Event: Invite-only events
  • Public Event: Open events

Private content is never saved to world memory.

Memory Importance & Decay

Memories have an importance rating (1-10) and decay over time:

Relevance Formula:

relevance = (importance * 0.6) + (timeliness * 0.4)

Where timeliness decreases based on age:

timeliness = max(1.0 - (age_days / 365), 0.1)

Examples:

  • Recent important event (importance 9, age 1 day): ~0.94 relevance
  • Old mundane event (importance 3, age 200 days): ~0.26 relevance

Memory Abstraction

To prevent database bloat, old memories are progressively abstracted:

Abstraction Levels:

  1. Level 1: Raw session summaries (original memories)
  2. Level 2: 8 Level 1 memories → 1 Level 2 summary
  3. Level 3: 8 Level 2 summaries → 1 Level 3 summary
  4. Level 4: 8 Level 3 summaries → 1 Level 4 summary (most abstract)

Raw logs expire after 6 months to save space (only summaries remain).

NPC Memory & Intelligence

NPCs (non-player characters) have their own memory systems powered by semantic search and AI.

How NPCs Remember

NPCs store memories about their interactions using vector embeddings (Voyage AI) for semantic search:

  1. Memory Storage: When an NPC interacts with you, they store a memory
  2. Embedding: The memory is converted to a vector for similarity search
  3. Retrieval: When the NPC needs context, they search memories semantically
  4. Abstraction: Like world memory, NPC memories are abstracted over time

Memory Types:

  • Interaction (conversations, events)
  • Observation (things they saw)
  • Event (significant occurrences)
  • Secret (hidden knowledge)
  • Goal (objectives and plans)
  • Emotion (feelings about events)
  • Abstraction (compressed summaries)

Memory Relevance

NPCs rank memories using the same importance + timeliness formula as world memory. When they respond to you, they:

  1. Search their memories for relevant context
  2. Retrieve top 10 most relevant memories
  3. Use those memories to inform their LLM-generated response

Minimum Age Filter: Recent memories (< 1 hour old) are excluded to prevent NPCs from echoing just-said information.

Over-Fetching for Filtering

The system over-fetches memories (2-3× the limit) to account for filtering:

  • Embedding search returns 20-30 candidates
  • SQL filters by character, abstraction level, minimum age
  • Top 10 remaining memories are used

NPC Relationships

NPCs track their relationships with player characters dynamically.

Relationship Attributes

Sentiment (-1.0 to 1.0):

  • 0.7 to 1.0: Very fond of
  • 0.3 to 0.7: Friendly toward
  • -0.3 to 0.3: Neutral toward
  • -0.7 to -0.3: Wary of
  • Below -0.7: Hostile toward

Trust (0.0 to 1.0):

  • 0.8 to 1.0: Completely trusts
  • 0.6 to 0.8: Trusts
  • 0.4 to 0.6: Uncertain about
  • 0.2 to 0.4: Distrusts
  • Below 0.2: Deeply distrusts

Knowledge Tier (1-3):

  • Tier 1: Knows you by reputation only (public knowledge)
  • Tier 2: Knows you socially (same circles)
  • Tier 3: Close associate (personal details, secrets)

How Relationships Change

Relationships update after each interaction:

Sentiment Delta: -0.2 to +0.2 per interaction Trust Delta: -0.1 to +0.1 per interaction

Notable Events: Significant interactions are stored in the relationship record (up to 10 most recent events).

Knowledge Tier Evaluation: An AI (Gemini) evaluates whether the NPC should know you better based on:

  • Interaction count
  • Sentiment and trust levels
  • Notable events

Lead/Summon Cooldowns

NPCs can reject follow requests to prevent abuse:

Rejection Cooldowns:

  • If an NPC rejects your follow request, you’re on cooldown
  • Cooldown duration configured in GameConfig::NpcRelationship::REJECTION_COOLDOWN_SECONDS
  • Rejection counts track how many times you’ve been rejected

Pet Companions

Pets are AI-driven companions that follow you and react to the world.

Pet Behavior

Following: Pets automatically follow their owner between rooms (if following = true)

Moods:

  • Happy: Wags tail, plays excitedly, bounds around
  • Content: Rests quietly, watches attentively, sits calmly
  • Hungry: Whines softly, looks around hopefully, paws at ground
  • Playful: Chases tail, pounces at shadows, rolls around
  • Tired/Scared/Aggressive: Various contextual behaviors

Loyalty: 0-100 scale

  • Increases when fed or petted
  • Decreases when neglected
  • Affects how responsive the pet is

Pet Animations

Pets react to room activity automatically:

Reaction Triggers:

  • Say/emote/pose/action messages in the room
  • Idle animations every 2-10 minutes

Rate Limits:

  • Per-Pet Cooldown: 2 minutes between animations
  • Room Rate Limit: Max 3 pet animations per minute (prevents spam)
  • No Pet-to-Pet Reactions: Pets don’t react to other pets

Example Reactions:

  • Owner says something: Pet wags tail
  • Combat starts: Pet gets scared
  • Food mentioned: Pet looks interested

Pet Types

  • Dog
  • Cat
  • Bird
  • Horse
  • Familiar (magical)
  • Mythical

Content Moderation

All player messages are screened for abuse using a two-tier AI system.

How It Works

Tier 1: Fast Screening (Gemini Flash-lite)

  1. Every IC message is checked within seconds
  2. Gemini AI screens for potential abuse
  3. Returns: flagged/not flagged, confidence (0-1), category, reasoning

Tier 2: Verification (Claude Opus 4.5)

  1. If Gemini flags a message, Claude verifies it
  2. Claude reviews the message with room context
  3. Distinguishes IC (in-character) conflict from OOC (out-of-character) harassment
  4. Returns: confirmed/not confirmed, confidence, severity, recommended action

IC vs OOC

The key distinction:

IC Conflict (Allowed):

  • Characters fighting, arguing, threatening each other IN ROLEPLAY
  • Example: “I’ll defeat you in combat!” (in a fantasy battle)

OOC Harassment (Not Allowed):

  • Personal attacks, hate speech, real-world threats
  • Example: “You’re a terrible person” (directed at the player, not character)

Abuse Categories

  • Harassment
  • Hate speech
  • Threats
  • Doxxing
  • Spam
  • CSAM (child safety)
  • Other
  • False positive
  • None

Severity Levels

  • Low
  • Medium
  • High
  • Critical

Fail-Safe Design

Tier 1 (Gemini): Fails open - if API errors, message is not flagged Tier 2 (Claude): Fails safe - if API errors, abuse is not confirmed

This prevents false positives from blocking legitimate RP.

What This Means for You

Seamless Experience

You don’t need to do anything - the system just works:

  1. RP normally: Your IC interactions are captured automatically
  2. NPCs remember: They’ll reference past events naturally
  3. Pets react: Your companion will respond to the world
  4. Safe environment: Abuse is detected without affecting normal play

Privacy

  • Private mode: Set your character to private mode to opt out of world memory
  • Private spaces: Sessions in private rooms/events are not saved
  • Selective capture: Only IC messages with 2+ characters are tracked
  • Raw log expiration: Detailed logs expire after 6 months

Trust the System

  • NPCs won’t echo your words back (minimum age filter)
  • Relationships develop naturally over multiple interactions
  • Pets won’t spam (2-min cooldown + room rate limits)
  • False positives won’t block you (fail-safe verification)

Summary

System What It Does How It Helps
World Memory Captures RP sessions as searchable history NPCs and systems can reference past events
NPC Memory NPCs remember interactions semantically NPCs respond contextually and naturally
NPC Relationships Tracks sentiment, trust, knowledge tier NPCs treat you differently based on history
Pet Companions AI-driven pet behavior and reactions Immersive, reactive companion animals
Content Moderation Two-tier abuse detection (Gemini → Claude) Safe environment without false positives

No commands required - it all happens automatically to enhance your roleplay experience.

Related Systems: communication auto_gm staff_tools

AutoGM

AI-driven spontaneous adventures

Auto-GM: AI-Driven Spontaneous Adventures

Auto-GM creates unique, dynamic adventures powered by multiple AI models. Based on your location and nearby world history, an AI Game Master designs and runs a complete adventure that reacts to your actions in real-time.

Commands

autogm start                    # Start a new adventure
autogm start with <names>       # Start with specific party members
autogm status                   # Check adventure progress
autogm end                      # Abandon the adventure
autogm end success              # End with success resolution
autogm end failure              # End with failure resolution

Aliases: agm, adventure

Examples:

autogm start
autogm start with Alice Bob
autogm status
autogm end success

How Auto-GM Works

Phase 1: Adventure Design (Automatic)

When you start an adventure, the AI goes through multiple phases:

1. Context Gathering

  • Retrieves nearby world memories
  • Identifies interesting locations in the area
  • Analyzes current room and environment
  • Gathers participant information

2. Brainstorming (Parallel AI)

  • Two AI models brainstorm independently:
    • Kimi-k2: Creative, unconventional ideas
    • GPT-5.2: Structured, narrative-focused concepts
  • Each generates multiple adventure possibilities
  • Runs in parallel for speed

3. Synthesis (Claude Opus 4.5)

  • Combines brainstorm outputs into a cohesive adventure
  • Generates adventure sketch with:
    • Title: Adventure name
    • Stages: 3-5 escalating stages
    • NPCs: Named characters with motivations
    • Locations: Specific places adventure visits
    • Climax: Final confrontation or revelation
    • Stakes: What’s at risk

4. Inciting Incident

  • The adventure begins with a dramatic event
  • You’re thrust into the action immediately
  • Sets tone and introduces the first challenge

Phase 2: GM Loop (Dynamic)

Once the adventure starts, the AI Game Master (Claude Sonnet 4.5) continuously:

  1. Monitors your actions - Watches what you say, do, and where you go
  2. Makes decisions - Determines how NPCs react and what happens next
  3. Executes actions - Describes events, NPC dialogue, environmental changes
  4. Advances the story - Moves through stages toward climax and resolution

GM Decision Types:

  • Narration: Describe events and scenery
  • NPC dialogue: Characters speak and react
  • Stage progression: Advance to next stage
  • Combat initiation: Start a fight if appropriate
  • Random events: Introduce complications (via chaos system)
  • Resolution: Conclude the adventure

Phase 3: Resolution

Adventures can end in several ways:

  • Success: You achieve the goal
  • Failure: You don’t achieve the goal (but survive)
  • Abandoned: You manually end it early
  • Timeout: 2 hours of inactivity

World Memory: Successful adventures are recorded as world memories, becoming part of the game’s history.

Chaos Level

Adventures have a chaos level (1-9) that affects randomness:

  • Low Chaos (1-3): Predictable, straightforward
  • Medium Chaos (4-6): Some surprises, moderate complications
  • High Chaos (7-9): Frequent twists, unexpected events

Chaos level starts at 5 and can change based on events.

Random Event System

The chaos system drives random events during adventures:

  • Fate Questions: “Does X happen?” with chaos-based probability
  • Random Events: Unexpected complications at scene transitions
  • Event Focus: NPCs, threads, locations, or new NPCs

Higher chaos = more frequent random events.

Participating in Adventures

How to Interact

Use normal game commands - the AI watches everything:

Social Commands:

say "We should investigate the tower"
emote cautiously approaches the door
whisper to Alice "I don't trust him"

Action Commands:

move north
examine the mysterious artifact
attack the bandit leader

Combat:

  • If combat starts, use normal combat commands
  • The GM manages enemy NPCs
  • Combat integrates seamlessly into the adventure

What the AI Sees

The GM monitors:

  • Your dialogue and emotes
  • Your movements between rooms
  • Combat actions and outcomes
  • Interactions with NPCs and objects
  • Party dynamics (if multiple participants)

What Triggers GM Reactions

The AI acts when:

  • You perform a significant action
  • Enough time has passed since last GM action (30 seconds minimum)
  • You complete a stage objective
  • Random event occurs (chaos system)
  • Combat ends

Party Adventures

Start adventures with friends:

autogm start with Alice Bob Charlie

Requirements:

  • All participants must be in the same room
  • Must be online when adventure starts
  • Participants can be found by partial name match

During the Adventure:

  • All participants experience the same events
  • The GM reacts to any participant’s actions
  • Everyone sees GM narration and NPC dialogue
  • Party can split up (GM follows all participants)

Adventure Status

Check progress with autogm status:

Information Shown:

  • Adventure title
  • Current status (designing, active, combat, climax, resolved)
  • Progress (Stage 2 of 4)
  • Chaos level
  • Action count (how many GM actions so far)
  • Elapsed time
  • Timeout countdown (time until auto-abandon)
  • Recent events summary
  • Combat status (if in combat)
  • Resolution type (if ended)

Status Values:

  • Gathering: Collecting context
  • Sketching: Brainstorming and synthesizing
  • Inciting: Deploying the inciting incident
  • Running: Active adventure, GM loop running
  • Combat: Currently in combat encounter
  • Climax: Final stage, approaching resolution
  • Resolved: Adventure complete
  • Abandoned: Ended early

Ending Adventures

Abandoning

autogm end

Immediately stops the adventure. No world memory created.

Only the initiator (character who started it) can end an adventure. Other participants can leave by moving to different areas.

Resolving

Let the adventure reach its natural conclusion, or declare resolution:

autogm end success      # You achieved the goal
autogm end failure      # You didn't achieve the goal

World Memory: Success resolutions create world memories with:

  • Adventure summary
  • Participants
  • Key events
  • Resolution outcome

These memories can inspire future Auto-GM adventures!

Timeouts

Adventures auto-abandon after 2 hours of inactivity (no participant actions or GM actions).

Inactivity means:

  • No character movement
  • No IC messages
  • No combat actions
  • GM hasn’t acted

Warning: You won’t be notified before timeout - use autogm status to check remaining time.

Limitations

One Adventure Per Room:

  • Only one active Auto-GM session allowed per room
  • Prevents overlapping adventures

One Adventure Per Character:

  • You can only participate in one Auto-GM session at a time
  • Must end current adventure before starting a new one

Requires Location:

  • Must be in a specific room (not void/OOC areas)
  • Location influences adventure content

No Save/Resume:

  • Adventures run continuously until resolved or abandoned
  • Cannot pause and resume later

Tips for Great Adventures

1. Engage Actively

  • Respond to NPC dialogue with say
  • Describe your actions with emote
  • Make decisions and take initiative

2. Follow the Story

  • Pay attention to GM narration
  • Notice stage progression cues
  • React to environmental changes

3. Use Combat Wisely

  • Combat is part of the adventure, not separate
  • Fight when it makes narrative sense
  • The GM manages enemy NPCs

4. Embrace Chaos

  • Random events add excitement
  • Complications create memorable moments
  • Roll with unexpected twists

5. Bring Friends

  • Party adventures are more dynamic
  • The GM creates interactions between participants
  • Different character skills create options

Example Adventure Flow

> autogm start
Starting a new Auto-GM adventure...
Gathering context from nearby memories and locations...

[30 seconds later]

The AI Game Master whispers: "The Haunted Lighthouse"

A sudden storm rolls in from the sea. Through the rain, you spot
a lighthouse on the cliffs - its light flickering erratically.
A distant scream echoes from within.

> say "We should investigate that lighthouse"

You say, "We should investigate that lighthouse"

The AI Game Master narrates: As you approach the lighthouse, the
door creaks open on its own. Inside, the spiral staircase seems
to descend far deeper than it should...

> move down

You descend the stairs into darkness...

[The adventure continues, reacting to your choices]

> autogm status
Adventure: The Haunted Lighthouse
Status: Running
Progress: Stage 2 of 4
Chaos Level: 6/9
Actions: 12
Elapsed: 15.3 minutes

Recent events:
  You discovered the lighthouse keeper's journal. The last entry
  warns of "something from below"...

Summary

Aspect Details
AI Models Kimi-k2, GPT-5.2 (brainstorm), Opus 4.5 (synthesis), Sonnet 4.5 (GM)
Adventure Length Typically 30-90 minutes
Timeout 2 hours of inactivity
Party Size 1+ participants (specify at start)
Chaos Level 1-9, affects randomness
Stages 3-5 escalating challenges
Resolution Success, failure, abandoned, timeout
World Memory Created on successful completion

Auto-GM brings the magic of tabletop RPGs to the digital realm - a living, breathing Game Master that crafts unique stories just for you.

Timelines

Flashback roleplay via snapshots and historical eras

Timelines: Flashback Roleplay

Timelines let you enter the past to roleplay historical moments or revisit captured snapshots - all without affecting your present character.

Commands

timeline                    # Open timeline menu
timeline "<name>"           # Quick-enter a snapshot by name

Aliases: timelines, tl, snapshot, snap

What Are Timelines?

Timelines are past versions of the game world where you can roleplay without consequences to your main character. Think of them as “flashback scenes” in a movie.

Two Types:

  1. Snapshot Timelines: Frozen moments you’ve captured
  2. Historical Timelines: Shared past eras (specific years + zones)

Key Feature: All timelines have restrictions that protect your main character - no death, no XP loss, rooms are read-only, etc.

Snapshots

What is a Snapshot?

A snapshot is a saved moment in time - it captures:

  • Your character’s exact state (HP, stats, equipment)
  • Your current location
  • Who else was present
  • The exact date/time

Creating Snapshots

Use the timeline menu:

timeline
> Select "Create Snapshot"
> Enter snapshot name (e.g., "Before the Battle")
> Optionally add description

What Gets Captured:

  • Character HP, stats, XP, skills
  • Current room/location
  • Characters present in the room
  • Your inventory (items are cloned when you enter)
  • Timestamp

Use Cases:

  • Save dramatic moments for later RP
  • Capture “what if” branching points
  • Record key story beats
  • Preserve state before risky actions

Entering Snapshots

Quick Entry:

timeline "Before the Battle"

Menu Entry:

timeline
> Select "Enter Timeline"
> Choose from list of snapshots

Access Requirements:

  • You can only enter snapshots where you were present when created
  • This prevents meta-knowledge (you can’t witness scenes your character didn’t experience)

What Happens When You Enter

  1. New Instance Created: You get a separate character instance in the past
  2. State Restored: Your snapshot state is loaded (HP, stats, equipment from that moment)
  3. Inventory Cloned: Your current items are copied to the timeline (so you can still use gear)
  4. Restrictions Applied: Timeline protections activate

Multi-Tab Play: You can keep your main character active in one browser tab and play the snapshot in another!

Leaving Snapshots

timeline
> Select "Leave Timeline"

Your snapshot instance goes offline, and you return to your main character. All progress in the snapshot is saved.

Historical Timelines

What Are Historical Timelines?

Historical timelines are shared past eras - any character can visit the same historical year/zone combination.

Example: Year 1875 in Victorian London - multiple players can all roleplay in this shared historical setting.

Key Difference from Snapshots:

  • Shared: All characters in Year 1875 London see each other
  • Persistent: The timeline exists for all players, not just you
  • Era-Based: Configured for specific historical periods (medieval, gaslight, etc.)

Entering Historical Timelines

timeline
> Select "Enter Timeline"
> Choose "Historical Timeline"
> Select year (e.g., 1875)
> Select zone (e.g., London)

Your State:

  • Uses your current character state (not a frozen snapshot)
  • Inventory is cloned from your present self
  • You can interact with other players in the same historical era

Shared Historical RP

If multiple players enter the same year/zone:

  • You all share the same timeline reality
  • You can see and interact with each other
  • World events in that timeline affect all participants
  • Ideal for historical campaigns or flashback arcs

Timeline Restrictions

All past timelines have built-in protections:

Default Restrictions:

Restriction What It Means
No Death You can’t die in a timeline - prevents permanent loss
No Prisoner You can’t be imprisoned - prevents getting stuck
No XP You don’t gain experience - keeps progression on main character
Rooms Read-Only You can’t modify rooms - preserves historical integrity

Why Restrictions?

Timelines are for consequence-free roleplay. You can explore dramatic moments, experiment with risky actions, or participate in historical events without worrying about ruining your main character.

Viewing Restrictions

While in a timeline:

timeline
> Select "Timeline Info"

Shows all active restrictions for the current timeline.

Timeline Management

Viewing Your Snapshots

timeline
> Select "View Timelines"

Shows:

  • Your created snapshots
  • Snapshots where you were present
  • Active historical timelines

Snapshot List Includes:

  • Name and description
  • When it was created
  • Location where it was captured
  • Who was present

Deleting Snapshots

timeline
> Select "Delete Snapshot"
> Choose snapshot to delete

Note: Only delete snapshots you created. Snapshots you were merely present in belong to their creators.

Accessibility

Your Own Snapshots:

  • Full access to all snapshots you created
  • Can enter, leave, and delete

Others’ Snapshots:

  • Can enter if you were present when created
  • Cannot delete
  • Access is read-only

Eras and Historical Settings

Historical timelines are tied to game eras:

Era Years Characteristics
Medieval 500-1500 Gold currency, messenger system, no phones
Gaslight 1800-1900 Pounds, telegrams, landline phones, carriages
Modern 1950-2020 Dollars, mobile phones, cars, rideshare
Near-Future 2030-2100 Digital credits, implants, autocabs
Sci-Fi 2100+ Credits, communicators, hovertaxis

Era Effects in Timelines:

  • Currency type matches the era
  • Available technology matches the era
  • Transportation options match the era
  • Messaging systems match the era

See the EraService system for full era configurations.

Use Cases

Flashback Scenes

# Before a major battle
timeline "The Night Before"

# Roleplay preparations, last words, dramatic tension
# No risk - even if battle goes badly, your main character is safe

“What If” Scenarios

# Create snapshot before a critical choice
timeline "Before I Chose the Dark Path"

# Play out alternate timeline where you made different choice
# See what could have been without affecting your real story

Historical Campaigns

# GM creates historical campaign in Year 1875 London
# Multiple players enter same historical timeline
# Shared adventure in the past
# All return to present when campaign ends

Tutorial Safe Space

# New players can practice in a historical timeline
# Learn combat without risk of death
# Experiment with commands and mechanics
# Return to present once comfortable

Multi-Character Play

Since timelines create separate character instances, you can:

Play Multiple Versions Simultaneously:

  • Browser Tab 1: Your main character in the present
  • Browser Tab 2: Your snapshot character in “Before the Battle”
  • Browser Tab 3: Your historical character in “Year 1875 London”

Each instance is independent, with separate:

  • Location
  • HP/stats (based on when you entered)
  • Inventory (cloned at entry)
  • Active effects

Limitations

Cannot Enter Multiple Past Timelines:

  • You can only be in ONE past timeline at a time per browser session
  • Must leave current timeline before entering another
  • (But can have main character active in present simultaneously)

Snapshots Are Static:

  • Snapshots capture a specific moment
  • World state around you doesn’t dynamically update
  • Other players’ positions are frozen at creation time

Rooms Are Read-Only:

  • You can’t build or modify rooms in timelines
  • Prevents historical contamination
  • Keeps timelines pristine for future visitors

No Permanent Gains:

  • XP earned in timelines doesn’t transfer
  • Items found in timelines don’t transfer to present
  • Relationships formed in timelines are timeline-specific

Summary

Feature Details
Command timeline (menu) or timeline "<name>" (quick enter)
Types Snapshot (frozen moments) or Historical (shared past eras)
Restrictions No death, no prisoner, no XP, rooms read-only
Access Your snapshots + snapshots where you were present
Multi-Tab Play main character and timeline character simultaneously
Safety All timeline actions are consequence-free

Timelines give you the freedom to explore “what if” scenarios, roleplay historical moments, and experiment with risky actions - all without jeopardizing your main character’s story.

Related Systems: world_memory events_media

Events & Competitions & Media

Hosting events, media playback, and shared entertainment

Events & Media - Player Guide

Firefly provides powerful tools for hosting scheduled events and sharing media with other players. This system includes calendar events with temporary decorations, Watch2Gether-style media sessions for synchronized viewing, and jukebox playlists for background music.


Calendar Events

What Are Events?

Events are scheduled activities like parties, meetings, competitions, or ceremonies. When you enter an event, you move into a separate RP space from the main room. Players outside the event can’t see what’s happening inside, and vice versa. Events can have:

  • Temporary decorations and furniture that disappear when the event ends
  • Room state snapshots showing the room’s condition when the event started
  • Attendee tracking with RSVP support
  • Capacity limits and bounce lists for troublemakers
  • RP log visibility controls (public, attendees-only, or organizer-only)

Event Types

  • party - Social gatherings, celebrations
  • meeting - Formal assemblies, councils
  • competition - Contests, tournaments
  • concert - Musical performances
  • ceremony - Rituals, weddings, inaugurations
  • private - Invitation-only gatherings
  • public - Open to everyone

Attending Events

Find upcoming events:

  • Check the calendar (command not shown in current code, likely web-based)
  • Events appear when you’re in the location where they’ll happen

Join an event:

enter event
join event

When you enter, you’ll:

  • Move into the event’s RP space (separate from outside)
  • See only other participants inside the event
  • Receive a notification that you’ve entered

Leave an event:

leave event
exit event

You’ll return to the main room outside the event.

Event restrictions:

  • Bounced players can’t re-enter (kicked by host/staff)
  • Capacity limits prevent overcrowding
  • Auto-start: When the organizer enters a scheduled event, it starts automatically

Hosting Events

Create an event: Use the web calendar interface to schedule an event. Set:

  • Name and description
  • Start/end times
  • Location (room or general location)
  • Event type (party, meeting, competition, etc.)
  • Public/private status
  • Max attendees (optional capacity limit)
  • Log visibility (who can see the RP logs after)

End your event:

end event

This:

  • Removes all participants from the event space
  • Cleans up temporary decorations and furniture
  • Marks the event as completed
  • Creates a world memory from the event (for story continuity)

Event permissions:

  • Organizer: Can end the event, bounce attendees
  • Staff role: Attendees marked as “staff” can bounce players
  • Regular attendees: Can enter/leave freely

Temporary Event Content

Decorations: Events can have custom decorations visible only to participants. These are automatically cleaned up when the event ends.

Temporary furniture: Events can add places (seating, tables, stages) that exist only during the event. These follow the same furniture system as permanent places but disappear after the event.

Room snapshots: When an event starts, the system snapshots the room’s state (description, visible objects, etc.). This preserves the “before” state for reference.


Competitions

Competitions are structured competitive activities where players compete for the highest score or to be the last one standing. They use the same activity system as missions (dice rolls, rounds, qi) but with a competitive goal.

Competition Types

  • Competition: Individual contest — everyone rolls each round, and the highest cumulative score wins
  • Team Competition: Two teams compete — team scores are combined, and the highest team total wins
  • Elimination: Last-person-standing — each round, the lowest scorer is knocked out until one remains

How Competitions Work

Competitions use the same commands and mechanics as other activities:

  1. activity list - Find competitions in your location
  2. activity join - Join a competition being set up
  3. Each round, choose actions and roll dice
  4. Your score accumulates across rounds
  5. Winner is determined when all rounds complete

Key differences from missions:

  • Scoring: Your roll results accumulate as a score rather than determining pass/fail
  • No helping: In competitive rounds, you can’t help other participants
  • Elimination: In elimination competitions, the lowest scorer each round is knocked out
  • Teams: In team competitions, you’re assigned to a team and your scores are combined

Tips for Competitions

  • Manage qi carefully — spending early gives big scores but leaves you dry for later rounds
  • In elimination, consistency matters more than one big round
  • In team competitions, coordinate with teammates about who spends qi when

Media Sessions (Watch2Gether)

YouTube Sync Sessions

Watch YouTube videos together with synchronized playback - when the host plays/pauses/seeks, all viewers see the same thing.

Start a watch party: Not shown in current code - likely via play <youtube-url> command or web interface.

Control playback (host only):

media play              # Resume playback
media pause             # Pause for everyone
media seek 1:30         # Skip to 1 minute 30 seconds
media seek 90           # Skip to 90 seconds
media stop              # End the session

View status:

media status            # Show current playback state
media                   # Show media menu

How it works:

  • Host controls - Only the person who started the video can control playback
  • Drift correction - Position is calculated server-side to keep everyone synced
  • Buffering detection - If the host buffers, viewers pause automatically
  • Viewer count - See how many people are watching
  • Playback rate - Support for 0.25x to 2.0x speed (not exposed in commands yet)

Technical details:

  • Uses Redis polling for real-time sync (until AnyCable is integrated)
  • PeerJS for WebRTC connections (screen sharing only)
  • Heartbeat monitoring - Sessions end if host disconnects for 2+ minutes
  • Position tracking - Server calculates position as: saved_position + (now - started_at) * playback_rate

Screen/Tab Sharing

Share your screen or browser tab with others in the room using WebRTC.

Start screen sharing:

media share screen      # Share entire screen or window
share screen            # Alias for media share screen

Start tab sharing:

media share tab         # Share a browser tab (audio in Chrome only)
share tab               # Alias for media share tab

Stop sharing:

media share stop        # End the session
share stop              # Alias
media stop              # Also works

How it works:

  • WebRTC peer-to-peer - Direct connection between host and viewers (no server relay)
  • PeerJS cloud signaling - Uses PeerJS’s free cloud service to establish connections
  • Share types:
    • screen - Entire screen or a specific window
    • tab - A specific browser tab (with audio in Chrome/Edge)
  • Audio support - Tab sharing can capture audio, screen sharing cannot
  • Viewer joins - Viewers automatically connect when they poll and see the session

Browser compatibility:

  • Chrome/Edge: Full support (tab audio works)
  • Firefox: Screen/tab sharing works, but tab audio not supported
  • Safari: Limited WebRTC support

Legacy Room Media

Simple video playback (older system, still supported):

Play a video:

play <youtube-url>      # Start a video (not synced)

Stop playback:

media stop              # Stop the current video

This system doesn’t have synchronized playback - each viewer controls their own player.


Jukeboxes & Playlists

What Are Jukeboxes?

Jukeboxes are music players that can be placed in rooms. They play background music from a playlist, with shuffle and loop modes.

Create a jukebox:

make music player <name>

Example: make music player Tavern Jukebox

Managing Playlists

View the playlist:

media playlist          # Show all tracks
playlist                # Alias

Add tracks:

media playlist add <url>
playlist add <url>

Supports any audio URL (YouTube, SoundCloud, direct MP3 links, etc.)

Remove tracks:

media playlist remove 3    # Remove track #3
playlist remove 3

Clear all tracks:

media playlist clear
playlist clear

Permissions:

  • Room owners can edit playlists in their rooms
  • Staff can edit any playlist

Playback Controls

Start/stop playback:

media player play       # Start playing
player play             # Alias
jukebox play            # Alias

media player stop       # Stop playback
player stop             # Alias

Toggle shuffle:

media player shuffle    # Toggle shuffle mode
player shuffle

Toggle loop:

media player loop       # Toggle loop (repeat playlist)
player loop

View status:

media player            # Show playback status and modes
player                  # Alias

Playback modes:

  • Sequential - Play tracks in order (default)
  • Shuffle - Random track order
  • Loop - Repeat playlist when it ends
  • Shuffle + Loop - Random infinite playback

Metaplot Events (Story Continuity)

What Are Metaplot Events?

Metaplot events track significant story moments for world continuity. These are different from calendar events - they’re historical records of important happenings.

Event types:

  • battle - Major conflicts
  • discovery - Important findings
  • betrayal - Significant betrayals
  • alliance - Faction agreements
  • death - Notable character deaths
  • resurrection - Character returns
  • artifact - Powerful item appearances
  • political - Government changes, treaties
  • natural_disaster - Earthquakes, floods, etc.
  • ceremony - Major rituals, coronations
  • revelation - Shocking truths revealed

Significance levels:

  • minor - Local impact, few people affected
  • notable - Regional impact, widely known
  • major - World-changing events
  • legendary - Events that define an era

Visibility:

  • Public events - Visible to all players
  • Private events - Hidden from most (GM secrets, unrevealed plots)

Who creates these? Typically staff-created via admin interface. Players might trigger them through major RP events, completed missions, or Auto-GM adventures.

Searching metaplot history:

  • By location: See events that happened at a specific place
  • By character: See events a character was involved in
  • By date: Recent events (last 30 days, etc.)
  • By significance: Major/legendary events only

Integration with other systems:

  • World Memory: Metaplot events feed into the AI’s world knowledge
  • Auto-GM: Adventures can create metaplot events on completion
  • Events: Completed calendar events can spawn metaplot records
  • Timelines: Historical metaplot events shape different eras

Media Session Technical Details

Polling & Real-Time Updates

Since AnyCable isn’t integrated yet, media sessions use Redis-backed polling:

  • 2-second poll interval - Clients check for updates every 2 seconds
  • Event queue - Redis stores recent events (last 50)
  • Session cache - Active sessions cached in Redis with 5-minute TTL
  • Heartbeat timeout - Sessions end if host doesn’t ping for 2 minutes

Event types:

  • media_session_started - New session created
  • media_session_ended - Session stopped
  • media_playback_update - Play/pause/seek/buffering/rate change

Viewer Lifecycle

  1. Viewer joins - Calls viewer_join with their PeerJS peer ID
  2. Connection pending - Viewer attempts WebRTC connection to host
  3. Connected - WebRTC established, viewer receives stream
  4. Disconnected - Viewer leaves room or connection fails
  5. Cleanup - Stale viewers removed after 2 minutes

Buffering Handling

When the host’s video buffers:

  1. Host sends buffering action with current position
  2. All viewers pause at that position
  3. When host resumes, viewers sync to new position
  4. Drift correction ensures everyone stays aligned

Common Use Cases

Hosting a Party

  1. Create event via web calendar (set start time, location, type: “party”)
  2. Add decorations/furniture beforehand (or during event)
  3. When ready, enter event to auto-start
  4. Players enter event to join your party
  5. Share media: media share tab to show a video or presentation
  6. When done, end event to conclude

Watch Party

  1. Start YouTube session: play <youtube-url> (or web interface)
  2. Others in room automatically see the video
  3. Control playback: media pause, media seek 2:30, media play
  4. Check viewers: media status
  5. End session: media stop

Setting Up a Tavern Jukebox

  1. make music player The Old Oak Jukebox
  2. Add tracks:
    • playlist add https://youtube.com/watch?v=...
    • playlist add https://youtube.com/watch?v=...
  3. Configure: player shuffle and player loop
  4. Start: player play
  5. Players entering the room hear the music

Recording a Major Story Event

  1. Staff creates metaplot event via admin panel
  2. Set type: “battle”, significance: “major”
  3. Tag location and involved characters
  4. Set public/private visibility
  5. Event appears in world history queries
  6. AI systems (Auto-GM, NPC memory) reference it for context

Tips & Best Practices

For event hosts:

  • Set clear start/end times so players can plan attendance
  • Use capacity limits for intimate gatherings
  • Mark events public vs private based on story needs
  • Use temporary decorations instead of permanently modifying rooms
  • End events properly to clean up temporary content

For media sessions:

  • Test your screen share before important presentations
  • Use tab sharing for videos with audio
  • Remember only the host can control playback
  • Close the session when done to free up room resources

For jukebox owners:

  • Keep playlists themed to the location (tavern music, club beats, etc.)
  • Enable shuffle + loop for continuous background music
  • Give tracks descriptive titles when adding them
  • Regular attendees appreciate fresh tracks added periodically

Performance considerations:

  • Media sessions use polling (2-second intervals) until AnyCable is integrated
  • Screen sharing is peer-to-peer (no server bandwidth used)
  • YouTube sessions sync via server state (minimal bandwidth)
  • Stale sessions auto-cleanup after 2 minutes of inactivity
Related Systems: communication timelines missions

Permissions

Player-to-player permissions and content consent settings

Permissions & Consent - Player Guide

Firefly provides granular control over player interactions through a multi-tier permission system. You can set default permissions that apply to everyone, then override them for specific players. Content consent settings let you manage what themes you’re comfortable with in RP.


Quick Overview

Three permission systems:

  1. User Permissions - Visibility, messaging, and social preferences (generic defaults + per-player overrides)
  2. Interaction Permissions - Physical interactions like follow, dress, undress (permanent, temporary, and one-time)
  3. Content Consent - PG-13 default; opt in to Unrestricted for heavy/dark themes (with per-player exceptions). Private mode is a separate per-character toggle for intimacy.

Access your settings:

permissions              # Main menu
perms                    # Alias
prefs                    # Alias

User Permissions

Generic (Default) Settings

Your generic permissions apply to everyone by default. Set these once, then override for specific players.

View/edit your defaults:

permissions general      # Show generic permission form

Permission fields:

1. Where Visibility

  • default - Follow your locatability setting (most common)
  • never - Never appear in others’ where list
  • favorite - Only appear when they use “where favorites”
  • always - Always appear, regardless of your locatability

2. OOC Messaging

  • yes - Anyone can send you OOC messages (pages, tells, etc.)
  • no - Block all OOC messages
  • ask - Request consent first (quickmenu prompt)

3. IC Messaging

  • yes - Anyone can send you IC messages (whispers, etc.)
  • no - Block all IC messaging

4. Lead/Follow

  • yes - Anyone can lead/follow you
  • no - Require explicit permission first

5. Dress/Style

  • yes - Others can dress, tattoo, or style you
  • no - Require explicit permission first

6. Channel Muting

  • yes - See messages from everyone in channels
  • muted - Mute specific players (set per-player)

7. Group Preference

  • neutral - Standard treatment (default)
  • favored - Prioritize in matchmaking, etc.
  • disfavored - Avoid in automated systems

Per-Player Overrides

Override for a specific player:

permissions Bob          # Show Bob's permission form

How overrides work:

  • Each field defaults to “generic” (use your default)
  • Change any field to a specific value to override
  • Example: Generic OOC is “yes”, but set Bob to “no” to block him specifically

Example flow:

  1. Generic OOC messaging: “yes” (allow everyone)
  2. Override for AnnoyingPlayer: “no” (block them)
  3. Override for BestFriend: “generic” (uses default = yes)
  4. Result: AnnoyingPlayer blocked, BestFriend allowed, everyone else allowed

Interaction Permissions (Three-Tier System)

Physical interactions (follow, dress, undress, interact) use a three-tier permission system:

Tier 1: Permanent Permissions (Database)

Stored in your Relationship records. These persist forever unless revoked.

Permission types:

  • follow - Following your character
  • dress - Putting clothes on you, adding tattoos/piercings, styling
  • undress - Removing your clothes
  • interact - General physical interactions (emotes targeting you, etc.)

Granting permanent permission: Not exposed via commands yet - typically granted via quickmenu consent prompts (see Tier 3).

Checking permanent permissions: View via permissions Bob - shows if Bob has permanent follow/dress/undress/interact permission.

Tier 2: Temporary Permissions (Redis)

Session-scoped permissions that expire after 1 hour or when you leave the room (for room-scoped permissions).

When used:

  • Quick one-time permissions for current session
  • Room-scoped: “Bob can follow me while we’re in this dungeon”
  • General: “Bob can dress me for the next hour”

Automatic cleanup:

  • 1-hour TTL - All temporary permissions expire after 1 hour
  • Room-scoped - Cleared when you leave the room

Granting temporary permission: Typically granted via quickmenu when someone attempts an action.

When someone tries an action you haven’t permitted, they get a quickmenu consent request.

Example flow:

  1. Bob uses follow Alice
  2. Bob doesn’t have permission (neither permanent nor temporary)
  3. Bob sees quickmenu: “Request permission to follow Alice?”
  4. Bob selects “Ask” → Alice gets quickmenu: “Bob wants to follow you. Allow?”
  5. Alice chooses:
    • Allow Once - Temporary permission (1 hour or room-scoped)
    • Allow Always - Permanent permission
    • Deny - No permission granted

Actions that require permission:

  • follow <character>
  • dress <character>
  • undress <character>
  • Various emotes/interactions targeting others

Romance of Five Kingdoms is PG-13 by default. Two opt-in layers unlock heavier content for a scene.

Private Mode (Intimacy)

Each character has a private-mode toggle. Use private to switch it on or off. When private mode is active, your status bar shows a small lock icon next to your HP. Intimacy-themed RP (sex, nudity) is allowed when every character in the room has private mode on.

Unrestricted (Dark Themes)

A single binary opt-in covers all other heavy or dark themes (gore, horror, abuse themes, etc.).

Manage your setting:

permissions consent           # Open the form
consent                       # Alias
consents                      # Alias
consent set on                # CLI: opt in
consent set off               # CLI: opt out

When does Unrestricted activate?

For a scene to count as Unrestricted, every player in the room must have it set on every other player (generic preference or per-player override), AND the room must have been stably occupied for 10 minutes. When active:

  • [Unrestricted] appears in red next to the room name.
  • A red exclamation icon appears in your status bar next to HP.

Anyone leaving or entering the room resets the 10-minute timer.

Per-Player Overrides

Sometimes you want to allow Unrestricted content specifically with a trusted RP partner, even if you don’t opt in generally.

consent override Alice on     # Allow Unrestricted with Alice
consent override Alice off    # Revoke
consent overrides             # List your overrides

Overrides still require mutual consent: both you and Alice must have the override pointing at each other.

Check a Room

consent room                  # Show the room's current Unrestricted status

Shows whether Unrestricted is active in the current room and (after the 10-minute timer) which players are present.


Restricting a Player

All restrictions are managed through per-player permissions. Open the form for any player and adjust their settings:

permissions Bob          # Open Bob's permission form

What you can restrict per-player:

  • OOC Messaging → “no” - Block their direct messages (pages, tells)
  • IC Messaging → “no” - Block their IC messages (whispers)
  • Channel Muting → “muted” - Hide their channel messages
  • Lead/Follow → “no” - Block them from following you
  • Dress/Style → “no” - Block them from dressing/styling you
  • Visibility → “never” - Hide from their where list

Removing restrictions: Set any field back to “generic” to use your default setting, or to “yes” to explicitly allow.

Ending a friendship: Use per-player permissions to revoke all access — set each field to “no” or use the relationship options in the form.


Permission Checking Flow

How the system checks permissions:

User Permission Check

  1. Look for specific permission for target player
  2. If specific value is “generic” or missing, use generic default
  3. Return the resolved value

Interaction Permission Check (follow, dress, etc.)

  1. Check permanent permission (Relationship.can_follow, etc.)
  2. If not found, check temporary permission (Redis, 1-hour TTL)
  3. If room-scoped, check Redis with room ID
  4. If no permission, trigger quickmenu consent request
  1. Check each ordered user pair’s base consent for UNRESTRICTED
  2. If both directions are consenting, the pair is mutually opted-in
  3. If either direction is missing, check per-player overrides for that direction
  4. The scene is Unrestricted only if every directed pair is mutually opted-in

Common Use Cases

Setting Restrictive Defaults

“I don’t want random players following me or messaging me OOC”

  1. permissions general
  2. Set OOC messaging: “no”
  3. Set lead/follow: “no”
  4. Set dress/style: “no”
  5. Submit

Result: Only players you explicitly allow can interact.

Allowing Trusted Friends

“I want my RP partner to have full access”

  1. permissions BestFriend
  2. Set all fields to “yes” (or “generic” if your defaults are permissive)
  3. Grant permanent interaction permissions (via quickmenu when they try actions)
  4. Optionally: Grant content consent overrides for mature themes

Restricting an Annoying Player

“This player won’t stop messaging me”

  1. permissions AnnoyingPlayer
  2. Set OOC messaging to “no”
  3. Set IC messaging to “no”
  4. Optionally: Set all fields to “no” for complete restriction

Unrestricted Content with Specific Partners

“I want heavy/dark themes only with trusted partners”

  1. permissions consent - leave the generic Unrestricted toggle OFF
  2. consent override TrustedPartner on - per-player exception
  3. TrustedPartner does the same for you (mutual override)
  4. Result: Unrestricted RP allowed with TrustedPartner, blocked with others

Checking Room Status

“Is this scene Unrestricted?”

  1. Look for [Unrestricted] in red next to the room name, or the red icon in the status bar.
  2. Or run consent room to see whether Unrestricted is active for the current room (requires 10 minutes of stable occupancy).
  3. If active, every player present has Unrestricted set on every other player (generic or per-player override).
  4. If not active, the scene stays PG-13 (with private-mode intimacy if all chars in the room have private mode on).

Privacy & Safety

What others can see:

  • Your where visibility setting affects their where list
  • Your consent room contributions (after 10-minute timer)
  • Whether you’ve blocked them (they see errors when trying to interact)

What others can’t see:

  • Your individual consent settings (unless mutual)
  • Your generic permission defaults
  • Who you’ve blocked (only that they’re blocked, not specifics)
  • Your relationship statuses with others

Staff access:

  • Admins can view all permissions for moderation
  • Consent data visible to resolve disputes
  • Block logs tracked for abuse prevention

Technical Details

Redis Permissions

Key format:

permission:<type>:<grantee_id>:<granter_id>[:<room_id>]

Example:

  • permission:follow:123:456 - User 123 can follow user 456 (1-hour TTL)
  • permission:follow:123:456:789 - Same, but only in room 789

Automatic cleanup:

  • Redis keys expire after 1 hour (TTL)
  • Room-scoped keys cleared on room exit
  • Scheduler periodically cleans stale keys

RoomConsentCache model:

  • Tracks occupancy_changed_at (when last person entered/left)
  • Stores character_count (expected occupancy)
  • Caches allowed_codes (intersection of all consents)
  • Recalculated if stale (occupancy changed)

Display ready check:

Time.now - occupancy_changed_at >= 600 # 10 minutes

Intersection calculation:

  1. Get each character’s consented restriction IDs
  2. Calculate intersection (codes ALL consent to)
  3. Return ContentRestriction codes for those IDs

Tips & Best Practices

For new players:

  • Set generic defaults to what you’re comfortable with
  • Use quickmenu consents to grant one-time permissions
  • Check consent room before starting mature RP

For privacy-conscious players:

  • Set visibility to “never” to stay off where lists
  • Set OOC messaging to “no” or “ask”
  • Use perception blocks for complete privacy

For RP partners:

  • Grant permanent permissions for frequent partners
  • Use content overrides for trusted partners
  • Communicate OOC about consent boundaries

For GMs/event hosts:

  • Check room consent before planning event themes
  • Wait 10 minutes for stable occupancy
  • Communicate content expectations in event descriptions

Troubleshooting

“Someone can’t follow me, but I want to allow it”

  • They need to request permission (via quickmenu)
  • OR grant them permanent permission via relationship
  • OR adjust your generic lead/follow setting to “yes”

“I can’t see consent room info”

  • Room occupancy must be stable for 10 minutes
  • If someone enters/leaves, timer resets
  • Wait for stable period

“My restriction isn’t working”

  • Check each field individually via permissions <name>
  • Ensure the specific override isn’t set to “generic” (which falls back to your default)
  • Set fields to “no” explicitly if your default is “yes”

“My permission override isn’t working”

  • Specific override must not be “generic”
  • Check generic default isn’t overriding specific
  • Use permissions <name> to verify settings
Related Systems: roleplaying communication

Character Customization

Appearance, descriptions, names, piercings, tattoos, and profiles

Character Customization - Player Guide

Firefly lets you fully customize your character’s identity, appearance, and personality through multiple systems. Define your name, physical appearance, personality traits, and visual styling.


Quick Commands

describe                 # Open description editor (appearance, short desc, room title, color, picture)
roomtitle <text>         # Set status/pose text (e.g., "looking tired")
color                    # View/change your name color

Character Names & Identity

Changing Your Name

change name              # Request name change

Rules:

  • Names may have a cooldown period between changes (set by admins)
  • Some universes restrict certain name formats
  • Staff must approve name changes in some games
  • Your full name includes forename + surname

Handles/Nicknames: Some settings support IC handles (street names, aliases, codenames). Set via admin interface or special commands.


Appearance Customization

The Describe Modal

All character customization is handled through the describe command, which opens a modal editor:

describe                 # Open the description editor

The describe modal includes:

  • Short description (300 chars max) — blurb shown in room descriptions (e.g., “A weathered soldier with a scarred face”)
  • Room title (200 chars max) — current pose/status appended to your name (e.g., “looking exhausted”)
  • Name color — hex color code applied to your name in chat and rooms
  • Profile picture — URL to an externally hosted image
  • Detailed body descriptions — per-body-part appearance with aesthetic types

Room Title Command

You can also update your room title directly without opening the full editor:

roomtitle leaning against the wall
roomtitle clear          # Remove room title

Name Color

  • Hex color code (e.g., #FF5733)
  • Applied to your name in chat, room descriptions, etc.
  • Use color command to preview
  • Access the gradient creator through the UI button in the webclient

Detailed Physical Descriptions

The describe modal lets you edit detailed descriptions for individual body parts. It supports multiple aesthetic types: natural, tattoo, makeup, hairstyle. Descriptions combine when someone looks at you.

Body positions:

  • Head region: scalp, left_temple, right_temple, left_ear, right_ear, forehead, left_eyebrow, right_eyebrow, left_eye, right_eye, nose, mouth, left_cheek, right_cheek, chin, jaw
  • Torso region: throat, chest, navel, left_pec, right_pec, back, left_shoulder_blade, right_shoulder_blade
  • Arms region: left_shoulder, right_shoulder, left_upper_arm, right_upper_arm, left_elbow, right_elbow, left_forearm, right_forearm
  • Hands region: left_wrist, right_wrist, left_palm, right_palm, left_hand, right_hand, fingernails
  • Legs region: hips, left_buttock, right_buttock, groin, left_thigh, right_thigh, left_knee, right_knee, left_shin, right_shin, left_calf, right_calf, left_ankle, right_ankle
  • Feet region: left_foot, right_foot, toenails

Aesthetic types:

1. Natural (default body descriptions)

Example: "Dark brown eyes with flecks of gold"
  • Basic physical appearance
  • Can describe any body position
  • Prefix options: “He/She has”, “He/She is”, “And”, none
  • Suffix options: period, comma, space, newline, double_newline

2. Tattoo

Example: "A coiling dragon that spans from shoulder to wrist"
  • Can span multiple body positions
  • Example: Tattoo across left_shoulder + left_upper_arm + left_forearm
  • Visible description layers on top of natural

3. Makeup (restricted to face positions)

Example: "Dark smoky eyeshadow that accentuates the eyes"
  • Limited to: left_eye, right_eye, mouth, left_cheek, right_cheek, forehead, chin, jaw
  • Temporary aesthetic (can be removed/changed)
  • Adds to natural descriptions

4. Hairstyle (restricted to scalp)

Example: "Long hair pulled back in a tight braid"
  • Only applies to scalp position
  • Overrides natural scalp description when set
  • Can be changed frequently

Display formatting:

  • Prefix: How description starts (“She has”, “She is”, “And”, or none)
  • Suffix: How description ends (period, comma, space, newline, etc.)
  • Used to chain descriptions naturally: “She has dark hair. She is tall. And her eyes are piercing blue.”

Body Modifications

Piercings

pierce                   # Open piercing menu

How it works:

  • Piercings are items at specific body positions
  • Example: “silver hoop” at left_ear
  • Visible when someone examines you
  • Can be removed like any item

Piercing commands:

  • pierce - View/add piercings
  • Requires piercing item in inventory
  • Choose body position for placement

Tattoos

tattoo                   # Open tattoo menu

How tattoos differ from piercing:

  • Tattoos are descriptions, not items
  • Created via describe command with aesthetic_type: tattoo
  • Permanent (can’t be removed without special process)
  • Can span multiple body positions

Creating a tattoo:

  1. describe
  2. Choose body positions (e.g., left_shoulder, left_upper_arm)
  3. Set aesthetic_type: tattoo
  4. Write description: “A coiling dragon…”
  5. Submit

Example multi-position tattoo:

  • Positions: left_shoulder, left_upper_arm, left_forearm, left_wrist, left_hand
  • Description: “An intricate vine pattern that winds down the entire left arm”

Makeup & Styling

Makeup command:

makeup                   # Open makeup menu

Creates descriptions with aesthetic_type: makeup for face positions only.

Styling command:

style                    # Open styling menu

Creates descriptions with aesthetic_type: hairstyle for scalp position.

Temporary vs permanent:

  • Makeup and hairstyle are considered temporary aesthetics
  • Can be changed frequently without restrictions
  • Tattoos and natural descriptions are permanent

Visual Enhancements

Color Gradients

Color gradients let you apply multi-color effects to text. Access the gradient creator through the UI button in the webclient toolbar.

How it works:

  • Interpolates between start and end colors
  • Each letter gets a progressively different color
  • Supports RGB interpolation and CIEDE2000 (perceptually uniform, smoother transitions)

Character Stats & Scores

View your stats:

stats                    # Show your character's stats
score                    # Show your overall character sheet

Stat allocation: Some games allow you to allocate stat points at character creation or level-up. This is handled via:

  • Character creation forms
  • Stat allocation command (if enabled)
  • Staff commands (for adjustments)

Common stats:

  • STR - Strength
  • DEX - Dexterity
  • CON - Constitution
  • INT - Intelligence
  • WIS - Wisdom
  • CHA - Charisma

(Actual stats vary by game/universe)


Profile & Web Interface

Profile picture: Set via the describe modal or web interface.

What shows on your profile:

  • Full name
  • Profile picture
  • Short description
  • Detailed descriptions (when others look at you)
  • Stats and abilities (if public)
  • Character history (if you’ve written one)

Privacy settings: Some games let you control what appears on your public profile via privacy settings.


Description Display Example

When someone uses look Alice:

Alice, a weathered soldier with dark hair, stands here looking exhausted.

She is about 5'8" tall with a lean, muscular build.

Dark brown hair falls to her shoulders in messy waves. Her eyes are a piercing
blue-green that seem to assess everything around her. A jagged scar runs from
her left temple down to her cheekbone.

A coiling dragon tattoo winds up her left arm from wrist to shoulder, rendered
in black ink with crimson accents.

Dark smoky eyeshadow accentuates her eyes.

How this was built:

  1. Short description: “a weathered soldier with dark hair” (via describe modal)
  2. Room title: “looking exhausted” (via describe modal or roomtitle command)
  3. Natural descriptions:
    • scalp: “Dark brown hair falls to her shoulders in messy waves.”
    • left_eye + right_eye: “Her eyes are a piercing blue-green…”
    • left_temple: “A jagged scar runs from her left temple down to her cheekbone.”
  4. Tattoo description: Dragon tattoo (aesthetic_type: tattoo, spans left_wrist to left_shoulder)
  5. Makeup description: Eyeshadow (aesthetic_type: makeup, positions: left_eye, right_eye)

Tips & Best Practices

For new players:

  • Start with a simple short description
  • Add detailed descriptions gradually
  • Use room titles to show current mood/pose

For appearance:

  • Keep short description under 100 chars (shown in room)
  • Use detailed descriptions for when people examine you
  • Update room title frequently for dynamic RP

For tattoos:

  • Plan multi-position tattoos before creating
  • Describe flow/movement across positions
  • Consider how it looks from different angles

For colors:

  • Use the gradient creator button in the webclient toolbar
  • Use hex color picker tools to find good colors
  • Avoid eye-straining colors (super bright, low contrast)

For profile:

  • Host profile pictures externally (Imgur, personal site, etc.)
  • Keep image files under 2MB for fast loading
  • Use square aspect ratio for best display (1:1)
Related Systems: items_economy roleplaying

Staff Tools

NPC control, moderation, scene arrangement, and administrative commands

Staff Tools - Guide

(Staff-only commands)

Administrative tools for controlling NPCs, managing scenes, viewing world state, and moderating the game.


NPC Puppeting

Take direct control of an NPC:

puppet <npc name>        # Start controlling an NPC
unpuppet                 # Release control
puppets                  # List all NPCs you're currently puppeting
pemote <text>            # Emote as the puppeted NPC

How it works:

  • Puppet an NPC to manually control their actions
  • While puppeting, you can make them say/emote/move
  • NPCs can be puppeted across rooms (staff privilege)
  • Multiple NPCs can be puppeted simultaneously

Example flow:

> puppet the merchant
You are now puppeting Gregor the Merchant (in Market Square).
Use 'pemote <text>' to make them emote, or 'unpuppet' to release control.

> pemote grins and gestures to his wares
Gregor the Merchant grins and gestures to his wares.

> unpuppet
You release control of Gregor the Merchant.

NPC Query (AI-Powered)

Ask questions about NPCs using AI:

npcquery <npc name> <question>

Example:

npcquery Gregor What does he think about the upcoming festival?

The AI analyzes:

  • NPC’s personality and background
  • NPC’s memories (from NpcMemory system)
  • Recent interactions
  • Faction/reputation data

Returns an in-character response as if asking the NPC directly.


World Memory Viewing

View saved world memories:

viewmemory <id>          # View a specific memory by ID
searchmemory <query>     # Search memories by content

Example:

searchmemory battle
# Shows: Memories containing "battle"

viewmemory 42
# Displays full memory record #42

What you see:

  • Memory summary (AI-generated)
  • Involved characters
  • Location
  • Timestamp
  • Original RP log references

Reputation Management

View/modify reputation:

reputation <character> <faction>      # View reputation
reputation <character> <faction> +10  # Increase by 10
reputation <character> <faction> -5   # Decrease by 5

Example:

reputation Alice Thieves Guild
# Shows: Alice's reputation with Thieves Guild: 45 (Friendly)

reputation Alice Thieves Guild +10
# Increases to 55

reputation Bob City Guard -20
# Decreases by 20 (e.g., for breaking the law)

Reputation tiers (typical):

  • Hostile (-100 to -50)
  • Unfriendly (-49 to -1)
  • Neutral (0 to 24)
  • Friendly (25 to 74)
  • Allied (75 to 100)

(Actual tiers vary by game)


Scene Arrangement

Arrange private meetings between animated NPCs and specific players:

arrangescene <npc> for <pc> at <room>           # Same meeting/RP room
arrangescene <npc> for <pc> meeting <room1> rp <room2>  # Separate rooms
cancelscene <id>         # Cancel a pending scene
listscenes               # Show all arranged scenes
sceneinstructions <id> = <text>  # Seed NPC with instructions

What are arranged scenes?

  • Staff-arranged one-on-one meetings between a specific NPC and a specific PC
  • The NPC receives seeded instructions that guide their AI behavior during the meeting
  • The PC triggers the scene from a meeting room, both teleport to a private RP room
  • All dialogue is logged via world memory; an AI summary is generated when the scene ends
  • If the NPC isn’t online, a temporary instance is spawned for the scene

Example flow:

> arrangescene Gregor for Alice meeting Reception rp Private Office
Arranged scene created: Meeting with Gregor (#12)
Alice has been invited.

> sceneinstructions 12 = Gregor should reveal he knows about the stolen artifact
Instructions set for scene #12.

[Alice types 'scene' or 'meet' in the Reception room]
→ Both teleport to Private Office
→ Gregor's AI follows the seeded instructions
→ Alice types 'endscene' when done
→ Both return to their original locations
→ Staff receives an AI-generated summary of the meeting

Player commands:

  • scene / meet — trigger an available arranged scene from the meeting room
  • endscene / leave scene — end an active scene and return to the meeting room

Content Seeding

Trigger content generation:

seed                     # Trigger content seeding

Seeds game content like:

  • NPC dialogue prompts
  • Random events
  • World state changes
  • Mission generation

Used to populate the world with dynamic content.


Monitoring & Broadcasts

Monitor game state:

checkall                 # Enable broadcast monitoring
checkalloff              # Disable broadcast monitoring

When enabled, you see all broadcasts happening in the game (across all rooms).

Manual broadcasts:

broadcast <message>      # Broadcast to all players

Sends a system message to everyone online.


Staff movement:

goto <location>          # Teleport to a location
staffroom                # Return to staff room

goto examples:

goto Town Square
goto 145                 # Room ID
goto Bob                 # Teleport to Bob's location

NPC Management

(Via admin web interface, not commands)

NPC features:

  • Archetypes - Templates for NPC behavior (guard, merchant, scholar, etc.)
  • Schedules - NPCs move between locations on schedules
  • Spawning - Auto-spawn NPCs at specific locations
  • Combat AI - AI profiles for NPC combat behavior

Archetype system:

  • Defines personality traits
  • Sets default dialogue patterns
  • Configures behavior triggers
  • Associates with faction reputation

Schedule system:

  • Time-based movement (e.g., “8am: Go to tavern, 5pm: Go home”)
  • Day-of-week patterns
  • Event-triggered schedules

Combat AI profiles:

  • Aggression level
  • Preferred abilities
  • Target priority
  • Flee threshold

Staff Responsibilities

As staff, you can:

  • Puppet NPCs to drive stories
  • Arrange scenes for private NPC meetings with players
  • Monitor world memories for plot hooks
  • Adjust reputation for player actions
  • Query NPCs for in-character answers
  • Seed content to keep the world dynamic
  • Broadcast important announcements
  • Teleport to help players or investigate issues

Best practices:

  • Use puppeting sparingly (let AI drive most NPC behavior)
  • Arrange scenes for important NPC conversations with specific players
  • Check world memories regularly for RP to acknowledge
  • Use reputation as reward/consequence for player actions
  • Seed content during slow periods to encourage activity

Tips for Staff

For NPC puppeting:

  • Stay in character for the NPC
  • Use NPC’s known personality and background
  • Check NPC’s memories before puppeting (npcquery)
  • Release control when done (don’t leave NPCs puppeted)

For scene arrangement:

  • Write clear NPC instructions that guide the conversation naturally
  • Use separate meeting/RP rooms for immersion (PC enters reception, teleports to office)
  • Check scene summaries after completion (listscenes completed)
  • Cancel pending scenes if the player hasn’t triggered them

For content seeding:

  • Seed during off-peak hours
  • Monitor results (check if NPCs generate dialogue)
  • Balance AI-generated content with staff-crafted stories

For moderation:

  • Use checkall sparingly (high volume)
  • Investigate reports promptly
  • Document policy violations
  • Communicate clearly with players
Related Systems: world_memory building auto_gm