Skip to main content
Four toggleable RP helpers ship with Awoken Chat. Each renders only as 3D floating text above the sender - no chat row, ever. Recipients are filtered server-side by proximity so far-away players don’t even receive the event.
Because the result is 3D-only and never enters chat, there’s no rollback / audit unless you set webhooks.funCommands. That webhook IS the audit trail - critical if players are using /roll for skill checks, conflict resolution, etc. See Webhooks.

Config block

config.lua

Per-command toggles

Setting any of roll / coinflip / eightball / random to false removes the slash command entirely from the server and removes the suggestion picker entry. The command will print "No such command" in the F8 console if a player tries to use it.

/roll config

/coinflip config

No args. Always rolls 50/50 Heads/Tails.

/8ball config

The question text is ignored - it’s purely flavour. But the player must provide something - empty /8ball notifies “Ask a yes/no question.” and doesn’t fire.

Customising answers

The shipped 20 are the canonical Mattel set (10 affirmative / 5 non-committal / 5 negative). Replace, add, or remove freely:
The pick is uniform random. The traditional 10/5/5 affirmative/maybe/negative weighting falls out of how many of each you list. Want a heavily-negative 8-ball? List 15 negatives and 3 affirmatives. Duplicates are valid - list “Yes.” three times if you want it to appear ~3× more often than other single-entry answers.
Empty list / removed key → falls back to the hardcoded 20. Prevents bricking /8ball via a config typo.

/random config

Parsing rules:
  • If the args contain a , → comma-separated. Whitespace inside an option is preserved ("Sam Smith" is one entry).
  • If no , → falls back to space-separated.
  • Minimum 2 options; fewer notifies and doesn’t fire.
  • Hard caps: 64 options max, 60 chars per option (option strings longer than that are truncated with ... to keep the 3D backdrop sane).

Shared config (applies to all four)

renderDistance

Metres the 3D text is visible. Overrides the global threeD.renderDistance for these four commands only - useful if you want dice rolls to feel like a table-top range (e.g. 5.0 m) while leaving /me at full conversation distance. The server filters the recipient set by this distance before sending the event, so far-away clients don’t even pay queue/rendering cost.

rollMax

Already covered above but worth re-emphasising: this is the only hard ceiling anywhere in the fun-command config. Default 100 means /roll 9999 silently clamps to /roll 100, not an error. Bump to 1000 for thousand-sided dice; drop to 6 to force every roll to be 1-6 regardless of what the player types.

*DurationSec

Per-command seconds the 3D text stays floating. Clamped client-side to [0.25, 60]. nil falls back to the global threeD.durationMs (5 seconds default). /8ball defaults to 7s on purpose - sentence-length text reads slower than X/Y.

Colours

All four *Color keys default to white to match the /me channel’s default text colour, so overhead text reads as one visual family. Override per-command if you want a coloured dice (#FCD34D amber) or coin (#7DD3FC cyan) distinct from RP /me.

Audit webhook

Set webhooks.funCommands to log every fire to Discord:
Each command posts a colour-coded embed (amber for /roll, cyan for /coinflip, purple for /8ball, teal for /random) with:
  • The sender’s real character name + server id + avatar (the audit point - chat saw none of this).
  • Command + result inline.
  • Question (/8ball only) or Options (/random only) below.
  • License + Discord ping for cross-session lookup.
See Webhooks for the full embed shape.