☯ Wheel of Destiny
Let fate pick the victim.
Something bad is about to happen to someone in the room. But you don't want to be the one who chose. Let the Wheel of Destiny spin. It wasn't your fault — it was the damn computer.
One click, and the module randomly picks a token: it glows on the canvas, the wheel spins, a sound plays, and the chosen one is revealed to the whole table.
✨ What It Does
- 🎯 Picks a random token for you. Select a few tokens and it draws from those. Select nothing and it opens a picker listing every token in the scene, so you choose exactly who's in the draw.
- 🔍 Filters the scene for you. The picker filters by actor type, disposition, whether a player is linked to the actor, and whether the token is hidden. Click Hostile and only the hostiles are in the draw — no hunting through the list.
- 🎡 Spins a roulette. An optional "Native Glow" animation hops from token to token on the canvas before locking onto the winner. No extra modules needed.
- 🔊 Plays a random sound. Point it at a folder of sounds and it picks one at random every spin. Four evil laughs are included to get you started.
- 💬 Announces the result in chat. Keep it as a secret whisper to the GM, or show the whole table who got picked.
- 🖼️ Reveals the chosen one on screen. A fullscreen image of the token pops up for everyone — and fades away on its own after a few seconds.
- 📍 Targets and pings the winner. The camera pans to the token so nobody misses the moment.
- 🧩 Zero dependencies. No Sequencer, no JB2A, no socketlib. Install it and go.
- 👥 Players can use it too. A player targets a few tokens, hits the button, and the wheel picks from their targets.
The wheel stops, the winner gets targeted, and the verdict lands in chat — with the full list of who was in the draw, if you want it:
🚀 How To Use
Three ways to spin:
- The button. Open the Token controls in the left toolbar and click the ☯ yin-yang button.
- The keyboard. Press F to spin, or Shift+F to always open the token picker — even when you already have tokens selected. Both shortcuts are GM-only and can be rebound under Configure Controls.
- A macro. See the Macros & API section below.
Who gets drawn?
| What you do | Who's in the draw |
|---|---|
| You select two or more tokens first | Only the tokens you selected |
| You select nothing, or just one (GM) | Whoever you pick in the Choose Tokens window |
| You're a player | Only the tokens you have targeted |
🎛️ The Choose Tokens window
Start a draw without staging a selection and this opens, listing every token in the scene with its art, name, actor type, disposition, and the player linked to it.
The filters are how you build the draw. It opens with the whole scene in, and narrowing a filter drops whatever no longer matches — click Hostile and every non-hostile leaves the draw. Four filters, all read from the current scene:
| Filter | What it does |
|---|---|
| Actor Type | Built from the types actually in the scene, so your system's own types show up with a count each |
| Disposition | Friendly, Neutral, Hostile, Secret |
| Player Link | Whether the token's actor belongs to a Foundry user |
| Visibility | Visible or hidden tokens |
Need an exception? Untick any token by hand. All and None work on what's currently shown, Reset puts every filter back, and Draw spins with whatever's left.
⚙️ Settings
One setting sits right in the main module tab, because it's the one you'll actually change mid-game:
- Target the Selected Token — automatically target whoever gets picked.
Everything else lives behind three tidy buttons:
- 🎵 Audio & Sound — turn sound on, choose your sound folder, pick which audio channel it plays on (so players control the volume in their own Foundry mixer), and hit Preview Sound to try a folder before you commit to it.
- ✨ Animation & Visual — enable the roulette animation, tune its speed (Animation Delay per step) and set a Max Total Duration so the animation never drags on too long regardless of how many tokens are in the draw (if the per-step delay would exceed the total cap, it is reduced automatically), ping and pan to the winner, show the full list of candidates in chat, and choose whether to display the token art or the actor sheet art.
- 💬 Dialogs & Chat — turn the fullscreen reveal on or off, write your own dramatic line ("You have been chosen!"), and decide who sees the chat message: nobody, the GM only, or the whole table.
🧙 Macros & API
You can trigger the Wheel of Destiny from a macro or from another module:
Spin the wheel — exactly like clicking the button.
WoD.randomToken();
Open the token picker, then spin with whatever you choose. GM only.
WoD.openTokenPicker();
Spin using your own list of tokens. Runs the full show (animation, sound, chat, reveal) and returns the winner.
const mySelectedToken = await WoD.randomToken(myTokenList);
Just pick one, no bells and whistles. Returns a token from your list and nothing else happens.
const mySelectedToken = WoD.selectRandomToken(myTokenList);
Ask for a list of tokens without spinning. Opens the picker and hands back what you chose, or null if you closed it. GM only.
const myTokenList = await WoD.promptForTokens();
⚠️ Coming from an older version?
- v0.4.3 removed the auto-select mode.
WoD.customAutoSelectDialog()is gone — useWoD.openTokenPicker().WoD.randomToken()also lost its second argument:WoD.randomToken([], 'pcs')no longer filters, and the'pcs'is ignored. Pass your own token list instead, or use the picker's filters.- v0.4.0 moved the API from
game.wodto the globalWoD. Old macros usinggame.wod.randomToken()need to be updated toWoD.randomToken().


