Cheat Sheet

Conversations

  • Write your fic like normal until you want to add a chat conversation
  • Start conversations with -- fm: your-config-name -- and end them with -- end --
    • Use any number of dashes or hyphens
    • Config names can be anything, but can't have spaces
    • If you want multiple conversations to look the same as each other, use the same config name
-- fm: your-config-name --
username: Message goes here.
-- end --

Messages

  • Messages are just a username, a colon, and the message text: username: Message goes here.
    • Messages from the same user can go on following lines without a username
  • Usernames are short names for someone in a chat
    • They can have any characters except for spaces, colons (:), or brackets ([ ])
    • Usernames can be replaced with longer names when the chat is rendered by Fictional Messenger
  • Blank lines are fine
  • Lines starting with // are comments and won't appear in the output
  • Messages are formatted using Markdown
    • e.g. username: **This is in bold,** and _this is in italics_.
    • username: [this is a link](https://example.com)
    • username: ![this is an image. the text here will be the image's alt text](https://picsum.photos/200)
-- fm: your-config-name --
jane: This is a message from Jane.
This is a another message from Jane.

// This line is a comment and won't appear in the output.

username: You can make parts of messages **bold** or _italics_
Put links like this: [link text here](https://example.com)
Put images like this: ![image alt text here](https://picsum.photos/200.jpg)
-- end --

Timestamps

  • Message timestamps are optional
  • Timestamps go before or after a username:
    • [1:23am] username: message
    • username [23:59]: message
  • Times can be in 12-hour or 24-hour formats. Seconds are optional:
    • These are all the same time: [1:30pm], [13:30], [1:30:00 pm], [13:30:00]
  • Dates must be in either year-month-day or month-day form, separated by dashes:
    • 1999-12-31, 12-31
  • Dates must include a time:
    • [1999-12-31 11:59 pm], [12-31 23:59]
  • Relative timestamps will set the time based on the last timestamp entered.
    • [+1h] will be one hour after the last entered timestamp
    • [+ 1d 2h 3m 4s] will be one day, two hours, three minutes, and four seconds after the last entered timestamp
  • Timestamps will be displayed as specifically as you enter them
    • If you only use relative timestamps, then only relative times will be shown
      • e.g. just now, twelve minutes ago, six months ago
    • If you only use times, then times with relative dates will be shown:
      • e.g. 1:30 PM, Yesterday, 10:01 AM, Two years ago, 10:00 PM
    • If you only use months, days, and times, then dates and times with relative years will be shown:
      • e.g. Dec 3, 12:01 AM, Two years ago, April 1, 4:45 PM
    • If you use years, months, days, and times, then dates and times will be shown in absolute format:
      • e.g. 1999 Dec 31, 11:59 PM
  • Timestamps may not be more specific than the first timestamp in a conversation
    • If your first timestamp is [12:00pm], then a later timestamp with [2000-01-01 1:00am] will result in an error
  • Timestamps must always move forward in time, not backwards
    • (Sorry, time travelers.)
  • Messages without timestamps will be automatically given a timestamp 30 seconds later than the last message
    • This can be altered with the message-interval attribute, or mi for short
      • [message-interval = +1m30s] will make messages be one minute and thirty seconds apart
      • [mi=+2h] will make messages be two hours apart
-- fm: your-config-name --

// A timestamp that sets the start date and time of the conversation
[1999-12-31 01:00:00 am]

username: This message will have the above timestamp.

[5:30am] username: This timestamp will use the current conversation's current date,
so it's now Dec. 31, 1999, at 5:30 AM.

username: Timestamps are in [year-month-day hour:minute:second] format.
Years and dates are optional. Time can be 12-hour or 24-hour.

[+1h] username: This is a relative timestamp. It'll make this message be an hour after the previous one.
[+1d 2h 3m 4s] username: This message is one day, two hours, three minutes, and four seconds after.

other-username: Messages without timestamps will be moved forward 30 seconds from the last message's timestamp.
This can be controlled like:

[message-interval = +1h]

other-username: So now each message is one hour after the last.

// Shorthand for message-interval:
[mi=+1m30s]

other-username: Now messages are 1 minute and 30 seconds apart.

// This last timestamp will set the conversation timestamp, the time at which the conversation is being read
[2999-12-31 01:00:00 am]

// Now it's the distant future. All timestamps will be shown as full dates and times, instead of e.g. "Just now" or "Yesterday at 3:30 PM"
-- end --

Attributes

  • Attributes can change how messages or conversations look or act
  • Attributes have the format [name = value], where name is the name of the attribute and value is what the attribute is set to
  • Most attributes are specific to particular styles, so check out your chosen style's docs for details
  • Universal attributes are:
    • message-interval
      • Short Name: mi
      • Location: Conversation attribute or message attribute
      • Value: Any valid relative timestamp
      • Default Value: +30s
      • Examples: [mi = +2m 30s], [message-interval = +0]
      • Description: Sets the interval that timestamps will automatically advance for messages without timestamps.
    • markdown
      • Short Name: md
      • Location: Conversation attribute or message attribute
      • Value: on or off
      • Default Value: on
      • Examples: [md=off], [markdown = on]
      • Description: Controls whether Markdown parsing in messages is enabled. If set on a message, will only affect that message. If set on a conversation, will affect all following messages.
-- fm: your-config-name --
[message-interval = +0s] username: Messages will now be zero seconds apart.

[md=off] username: This message won't use Markdown, so **this** and _this_ will appear exactly as written.
-- end --