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 helphelp <command>- Get detailed help on a command (e.g.,help look,help fight)help systems- List all help system categorieshelp 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 keywordshelpsearch 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 zonewho here- List characters in your current roomwho 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 profileprofile 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 descriptionobserve bar- Watch a specific place (furniture/location)observe room- Watch the entire roomobserve selforobserve me- See your own detailed descriptionobserve 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 roomlook Alice's sword- Look at an item Alice is wearing/holdinglook north- Look at an exit to see where it leadslook 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 countsnews announcement- View all announcementsnews ic- View IC (in-character) newsnews ooc- View OOC (out-of-character) newsnews 5- Read article #5news 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 allto respect others’ privacy settings - Schedule overlap - Use
fingerto find the best times to connect with others
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 tablecommands navigation- List all navigation commands with descriptionscommands 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 resendsticky 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 OOCsticky onleft roll 2d6- Keep in input AND show results on left- Order doesn’t matter:
asleft stickyworks the same assticky asleft
Aliases: atleft = asleft, atright = asright
Movement & Navigation
walk - Walk toward a target with optional style
walk north- Walk in a cardinal directionwalk to tavern- Walk to a named roomrun to John- Run to a character’s locationcrawl east- Crawl in a direction (movement verb changes speed and description)stroll to park- Use different movement verbs for flavorangrily 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
invorifor 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
eqorwornfor short
Player Availability Status
afk - Toggle away from keyboard status
afk- Set AFK status (indefinite)afk 30- Set AFK for 30 minutes (auto-clears)afkagain - 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 minutesgtg 30- Set GTG for 30 minutesgtg(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 ticketstickets all- View all tickets (including resolved)tickets new- Submit a new ticket (opens form)tickets view 42- View ticket #42bug- Quick shortcut to submit a bug reporttypo- Quick shortcut to report a typorequest- Submit a feature requestsuggest- Submit a suggestionreport- 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:
- Submit via form (category, subject, description)
- Staff receives alert with ticket ID
- Track status: open → resolved/closed
- View resolution notes and staff response
- 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.,
ifor inventory) - Sticky mode - Use for repeated commands without re-typing
- Status visibility - AFK/GTG shows in
whoandfingeroutput - 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
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 directlydm 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 playerooc 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 shortcutchan 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 channeljoinchannel 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 memosmail read 1- Read memo #1mail 5- Quick-read memo #5 (shortcut)mail send Alice- Compose via formmail send Alice Subject=Body- Quick formatmail delete 1- Delete memo #1mail 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 abovebb post Looking for group!- Post a bulletinbb Looking for group!- Quick post (shortcut)bb read 1- Read bulletin #1bb 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 clanclan create --secret The Hidden Order- Create a secret clanclan invite Alice- Invite someoneclan invite Alice as ShadowMaster- Invite with handleclan kick Bob- Remove a member (requires permissions)clan leave- Leave your clanclan info- Show clan detailsclan roster- List all membersclan memo Subject=Message- Send memo to all membersclan handle ShadowMaster- Set your clan handleclan 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)quietagain - 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
undoin 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
undowithin 60 seconds to delete your last message
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 onfor seamless experience
accessibility resume off - Don’t auto-resume after typing
Pro tip: Enable both typing pause and auto-resume for a smooth workflow:
- TTS plays room description
- You start typing → TTS pauses
- You submit command
- 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:
- Enable
accessibility mode onfor linear output - Choose your screen reader with
accessibility reader <type> - Enable TTS with
narrate onfor dual audio (screen reader + TTS) - Disable visual effects with
accessibility effects off - Use
narrate configto filter content types (reduce noise)
For Vision Impaired Users:
- Enable
accessibility contrast onfor better text visibility - Use TTS with a clear voice like Deneb or Polaris
- Adjust
accessibility speedto your comfortable listening rate - Consider disabling effects with
accessibility effects off
For Motion Sensitivity:
- Disable visual effects:
accessibility effects off - Enable high contrast for less eye strain:
accessibility contrast on
For Audio Focus:
- Enable typing pause:
accessibility typing on - Enable auto-resume:
accessibility resume on - Use
narrate skipif the queue gets long during busy scenes - Customize content types in
narrate configto 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
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 |
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 throughorshout throughfor 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
'sattaches 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 coloremote 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 - Consent-Based Actions
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.
Prisoner System (Consent-Based Restraints)
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 restraintsuntie Bob hands→ Only removes hand bindingsfree 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
undoin 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
undowithin 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
Consent and Boundaries
- 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 rollroll <STAT>— Roll using a specific statroll <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
stopto 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
stoporstop 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
sethomein 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:
- System finds shortest path using pathfinding algorithm
- Movement starts automatically
- You move through each room sequentially
- Brief pause at each room
- 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
releaseto 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
sethomein a room you own for quick returns - Stop mid-journey with
stopif you change your mind - Multi-room paths show progress messages - don’t panic if you see several rooms flash by
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
etacommand 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
- Plan destination:
journey to Ravencroft - Select travel mode from quickmenu
- Choose “Assemble Party” option
- Invite members:
journey invite Alice,journey invite Bob - Wait for acceptances - Members receive quickmenu invites
- 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
acceptordeclinedirectly - 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 passengersto 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
/statusor 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
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:
- Input Phase - Choose your actions via quickmenu
- Resolution Phase - All actions resolve in 100-segment order
- Narrative Phase - See dramatic narrative of what happened
- 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:
- Choose “Abilities” as your main action
- Select ability from your available list
- Choose target (if required)
- 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
| 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
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 locationactivity start <name>- Begin an activity (you become the leader)activity join- Join an activity that’s being set up in your roomactivity leave- Leave an activity you’ve joinedactivity 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:
- Read the round description (what’s happening)
- Review available actions (what you can do)
- Choose an action:
activity choose <number> - Optionally set qi to spend:
activity qi <0-2> - Wait for everyone to choose
- 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
- View options:
activity status(shows available actions) - Choose:
activity choose <number> - Set qi:
activity qi <0-2>(optional) - 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
- Go to the room where an activity is running
observe support <player>- Request to help themobserve oppose <player>- Request to hinder them- Player must accept: They use
observe accept <your name> - You now observe their activity remotely
As an Observer
observe status- See activity status and your queued actionobserve actions- List actions available for current round typeobserve action <type> <target>- Submit an actionobserve 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
- Communication: Coordinate with your team about who does what
- Manage qi: Don’t spend it all early - you might need it later
- Help synergy: Multiple helpers on one person = very high success chance
- Recovery timing: Use rest rounds to heal and recover qi
- Branch votes: Discuss before voting - wrong path can be dangerous
- Free rolls: Be creative and specific in your descriptions
- Persuade rounds: Roleplay genuinely - the AI evaluates your arguments
- 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 activitiesactivity start <name>- Start an activityactivity join- Join setup activityactivity leave- Leave activityactivity status- Show current status
Standard rounds:
activity choose <number>- Choose an actionactivity help <player>- Help another playeractivity recover- Skip roll, gain qiactivity qi <0-2>- Spend qi dice (adds d8s to roll)
Branch rounds:
activity vote <number>- Vote for a branch
Rest rounds:
activity heal- Heal damageactivity continue- Vote to proceed
Free roll rounds:
activity assess <description>- Gather information (once per action)activity action <description>- Take an action
Persuade rounds:
- Use
sayandemotefor RP with the NPC activity persuade- Attempt the persuasion roll
Observation:
observe support <player>- Request to supportobserve oppose <player>- Request to opposeobserve accept <player>- Accept an observe requestobserve reject <player>- Reject an observe requestobserve status- Show observation statusobserve actions- List available actionsobserve action <type> <target>- Submit actionobserve leave- Stop observing
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(orinvori) - 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 groundget all- Pick up everything in the roomget money- Pick up money from the groundget 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 grounddrop 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 givingshow <item>- Show to everyone in the room
Holding and Pocketing
hold <item>- Move item to your handpocket <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 menushop list(or justlist) - View items for saleshop buy <item>- Purchase an itembuy <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:
- Your bank account first (if the shop accepts bank cards)
- 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 inventoryshop add <price> <item>- Add item from your inventory to shopshop 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 bankwithdraw <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 jewelrywear <item1>, <item2>, <item3>- Wear multiple itemswear- 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 clothingremove 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 positionremove <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 wearingoutfit save <name> as <type>- Save as partial outfit
Types:
full- Complete outfit (removes everything when worn)underwear- Just underweartop- Just shirts/topsbottom- Just pants/skirtsoverwear- Just jackets/coatsjewelry- Just jewelryaccessories- Just accessories
Wearing Outfits:
outfit wear <name>- Wear a saved outfitdress <name>- Quick wear outfit
Managing Outfits:
outfit list- View saved outfitsoutfit 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 partexpose <position>- Expose a body partflash <position>- Briefly expose then re-cover
Zippers
Some clothing has zippers:
unzip <item>- Unzip clothingzipup <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 menuwardrobe store <item>- Store item from inventorywardrobe store all- Store all inventory itemswardrobe retrieve <item>- Get item from wardrobewardrobe retrieve all- Get everything stored herewardrobe 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 itemswardrobe transfer from <location>- Start transfertransfer from <location>- Quick transfer commandwardrobe status- Check transfer progress
Aliases: transfer, ship, summon
How it works:
- Items are marked as “in transit” when you start transfer
- After 12 real-time hours, items arrive at destination
- Check
wardrobe statusto see time remaining - 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 statusto track deliveries - Quick retrieve:
retrieve allwhen you arrive somewhere
Using Consumables
Eating, Drinking, Smoking
eat <item>- Consume fooddrink <item>- Consume drinkssmoke <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 inventoryget <item>- Pick updrop <item>- Dropgive <item> to <person>- Giveshow <item>- Show to roomtrash <item>- Destroy permanently
Shopping:
shop- Open shop menushop list/list- Browse itemsbuy <item>- Purchasebalance- Check money
Banking:
deposit <amount>- Put money in bankwithdraw <amount>- Take money out
Clothing:
wear <item>- Put onremove <item>- Take offoutfit save <name>- Save outfitdress <name>- Wear saved outfitunzip <item>- Unzipzipup <item>- Zip up
Wardrobe:
wardrobe- Open menustore <item>- Store itemretrieve <item>- Get itemtransfer 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 roomuse <item> <style>— Play a specific style/modeuse <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> resetto 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
sayto 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:
- One player starts a game (creates deck)
- Others join the game
- Dealer deals initial cards
- Players take turns playing cards
- Use center area for tricks/community cards
- Discard as needed
- Reshuffle when deck runs out
Quick Reference
Games:
use <item>— Play a gameuse <item> <style>— Play specific styleuse <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.
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:
- Observe the pattern:
study n # Study north trapOutput example:
1. quiet 2. quiet 3. TRAP! 4. quiet 5. TRAP! 6. quiet 7. TRAP! 8. quiet - Extend observation if needed:
listen n # See more pulses (costs 10 sec) - 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:
- Symbol Grid - Deduce symbols from clues
- Pipe Network - Rotate pipes to connect source to drain
- 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
- Explore efficiently
- Move quickly (10 sec per room)
- Skip optional fights if low on time
- Prioritize terminal rooms for treasure
- 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
- Use qi strategically
- Focus early when you have time
- Save qi for critical skill checks
- Max 3 dice = don’t over-invest
- Trap navigation
- Study traps once, remember pattern
- Use listen only if pattern is ambiguous
- Mark experienced traps (easier second time)
- 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 dungeonflee- Exit, keep loot
Movement:
n/s/e/w/down- Move (10 sec)look- Inspect roommap- Show minimap
Obstacles:
study <direction>- Study trap/blockerlisten <direction>- Extend trap observationgo <direction> <pulse>- Pass trap at pulseeasier <direction>- Lower blocker DCstudy puzzle- View puzzlesolve <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.
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_buildpermission - 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: trueto force AI generation - Set
use_llm_names: falseto 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:
- Stand at intersection (room_type = ‘intersection’)
- Run
build block - Select building type from menu
- Building is constructed at that grid position
- 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_economyfor shop commands shop stock- Manage inventoryshop add <price> <item>- Add item to shopshop 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
@homecommand - 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 gridbuild city <name>- Quick build with defaults
Building Types:
build block- Add building at intersectionbuild apartment- Create apartmentbuild shop- Create shopbuild location- Create standalone room
Room Editing:
decorate <text>- Add decorationredecorate- Remove decorationsedit room- Edit propertiesrename <name>- Rename roomresize room <w> <d> <h>- Change dimensionsdelete room- Delete room
Property:
make home- Set home locationbuy house- Purchase housebuy shop- Purchase shop
Advanced:
generate <type> <context>- AI content generationgraffiti <text>- Add graffiticlean graffiti- Remove graffitinpc 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.
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
- Find a Facility: Visit an appropriate workshop, shop, or crafting room for your item type
- Select Your Pattern: Use
fabricate <name>with a pattern you own - Choose Delivery:
- Pickup: Return to the workshop when ready (default)
- Delivery: Have it delivered to your home room (if you own one)
- Wait: Fabrication takes time based on era and item complexity
- 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>orfabricate 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:
- Use
designordesign itemto open the form - Fill in item details
- Submit to create the item in your current room
- Other players in the room see: “{Your Name} creates {item name}.”
Permissions:
- Requires
staff: trueoradmin: trueon 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)
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
- Session Start: When you and another character start interacting, a session begins
- Message Collection: Your IC messages are logged in a buffer
- Session End: When characters leave or activity stops for 2 hours, the session finalizes
- AI Summary: If the session has 5+ messages, an AI generates a summary
- 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:
- Level 1: Raw session summaries (original memories)
- Level 2: 8 Level 1 memories → 1 Level 2 summary
- Level 3: 8 Level 2 summaries → 1 Level 3 summary
- 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:
- Memory Storage: When an NPC interacts with you, they store a memory
- Embedding: The memory is converted to a vector for similarity search
- Retrieval: When the NPC needs context, they search memories semantically
- 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:
- Search their memories for relevant context
- Retrieve top 10 most relevant memories
- 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)
- Every IC message is checked within seconds
- Gemini AI screens for potential abuse
- Returns: flagged/not flagged, confidence (0-1), category, reasoning
Tier 2: Verification (Claude Opus 4.5)
- If Gemini flags a message, Claude verifies it
- Claude reviews the message with room context
- Distinguishes IC (in-character) conflict from OOC (out-of-character) harassment
- 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:
- RP normally: Your IC interactions are captured automatically
- NPCs remember: They’ll reference past events naturally
- Pets react: Your companion will respond to the world
- 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.
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:
- Monitors your actions - Watches what you say, do, and where you go
- Makes decisions - Determines how NPCs react and what happens next
- Executes actions - Describes events, NPC dialogue, environmental changes
- 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:
- Snapshot Timelines: Frozen moments you’ve captured
- 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
- New Instance Created: You get a separate character instance in the past
- State Restored: Your snapshot state is loaded (HP, stats, equipment from that moment)
- Inventory Cloned: Your current items are copied to the timeline (so you can still use gear)
- 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.
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:
activity list- Find competitions in your locationactivity join- Join a competition being set up- Each round, choose actions and roll dice
- Your score accumulates across rounds
- 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 createdmedia_session_ended- Session stoppedmedia_playback_update- Play/pause/seek/buffering/rate change
Viewer Lifecycle
- Viewer joins - Calls
viewer_joinwith their PeerJS peer ID - Connection pending - Viewer attempts WebRTC connection to host
- Connected - WebRTC established, viewer receives stream
- Disconnected - Viewer leaves room or connection fails
- Cleanup - Stale viewers removed after 2 minutes
Buffering Handling
When the host’s video buffers:
- Host sends
bufferingaction with current position - All viewers pause at that position
- When host resumes, viewers sync to new position
- Drift correction ensures everyone stays aligned
Common Use Cases
Hosting a Party
- Create event via web calendar (set start time, location, type: “party”)
- Add decorations/furniture beforehand (or during event)
- When ready,
enter eventto auto-start - Players
enter eventto join your party - Share media:
media share tabto show a video or presentation - When done,
end eventto conclude
Watch Party
- Start YouTube session:
play <youtube-url>(or web interface) - Others in room automatically see the video
- Control playback:
media pause,media seek 2:30,media play - Check viewers:
media status - End session:
media stop
Setting Up a Tavern Jukebox
make music player The Old Oak Jukebox- Add tracks:
playlist add https://youtube.com/watch?v=...playlist add https://youtube.com/watch?v=...
- Configure:
player shuffleandplayer loop - Start:
player play - Players entering the room hear the music
Recording a Major Story Event
- Staff creates metaplot event via admin panel
- Set type: “battle”, significance: “major”
- Tag location and involved characters
- Set public/private visibility
- Event appears in world history queries
- 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
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:
- User Permissions - Visibility, messaging, and social preferences (generic defaults + per-player overrides)
- Interaction Permissions - Physical interactions like follow, dress, undress (permanent, temporary, and one-time)
- 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:
- Generic OOC messaging: “yes” (allow everyone)
- Override for AnnoyingPlayer: “no” (block them)
- Override for BestFriend: “generic” (uses default = yes)
- 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.
Tier 3: One-Time Consent (Quickmenu)
When someone tries an action you haven’t permitted, they get a quickmenu consent request.
Example flow:
- Bob uses
follow Alice - Bob doesn’t have permission (neither permanent nor temporary)
- Bob sees quickmenu: “Request permission to follow Alice?”
- Bob selects “Ask” → Alice gets quickmenu: “Bob wants to follow you. Allow?”
- 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
Content Consent
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
- Look for specific permission for target player
- If specific value is “generic” or missing, use generic default
- Return the resolved value
Interaction Permission Check (follow, dress, etc.)
- Check permanent permission (Relationship.can_follow, etc.)
- If not found, check temporary permission (Redis, 1-hour TTL)
- If room-scoped, check Redis with room ID
- If no permission, trigger quickmenu consent request
Content Consent Check
- Check each ordered user pair’s base consent for
UNRESTRICTED - If both directions are consenting, the pair is mutually opted-in
- If either direction is missing, check per-player overrides for that direction
- 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”
permissions general- Set OOC messaging: “no”
- Set lead/follow: “no”
- Set dress/style: “no”
- Submit
Result: Only players you explicitly allow can interact.
Allowing Trusted Friends
“I want my RP partner to have full access”
permissions BestFriend- Set all fields to “yes” (or “generic” if your defaults are permissive)
- Grant permanent interaction permissions (via quickmenu when they try actions)
- Optionally: Grant content consent overrides for mature themes
Restricting an Annoying Player
“This player won’t stop messaging me”
permissions AnnoyingPlayer- Set OOC messaging to “no”
- Set IC messaging to “no”
- Optionally: Set all fields to “no” for complete restriction
Unrestricted Content with Specific Partners
“I want heavy/dark themes only with trusted partners”
permissions consent- leave the generic Unrestricted toggle OFFconsent override TrustedPartner on- per-player exception- TrustedPartner does the same for you (mutual override)
- Result: Unrestricted RP allowed with TrustedPartner, blocked with others
Checking Room Status
“Is this scene Unrestricted?”
- Look for
[Unrestricted]in red next to the room name, or the red icon in the status bar. - Or run
consent roomto see whether Unrestricted is active for the current room (requires 10 minutes of stable occupancy). - If active, every player present has Unrestricted set on every other player (generic or per-player override).
- 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
Room Consent Cache
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:
- Get each character’s consented restriction IDs
- Calculate intersection (codes ALL consent to)
- 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 roombefore 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
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
colorcommand 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
describecommand with aesthetic_type: tattoo - Permanent (can’t be removed without special process)
- Can span multiple body positions
Creating a tattoo:
describe- Choose body positions (e.g., left_shoulder, left_upper_arm)
- Set aesthetic_type: tattoo
- Write description: “A coiling dragon…”
- 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:
- Short description: “a weathered soldier with dark hair” (via describe modal)
- Room title: “looking exhausted” (via describe modal or
roomtitlecommand) - 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.”
- Tattoo description: Dragon tattoo (aesthetic_type: tattoo, spans left_wrist to left_shoulder)
- 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)
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 roomendscene/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.
Navigation & Utility
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


