Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
×

Cards from Deck Not Visible to Players with Dynamic Lighting – Looking for Chat-Based Solution or Visibility Fix

Hi everyone, I’m running a game using Roll20’s VTT with Dynamic Lighting enabled, and I’m using a paid card deck (Critical Hit/Fumble deck style content). I’ve run into a usability issue during live play: When a card is drawn from the deck, it appears on the tabletop—but due to Dynamic Lighting and player vision settings, players often cannot see the card at all (or have to pan/zoom awkwardly to find it). This breaks the flow a bit, especially during combat when I want the card result to be immediately visible and impactful. What I’m trying to achieve: Ideally, I’d like one of the following: A way to draw a card and automatically display it in chat (similar to rollable tables), OR A way to ensure that drawn cards are always visible to all players , regardless of lighting/vision Or any best-practice workflow other GMs are using to handle decks with Dynamic Lighting What I’ve tried: Using macros (e.g., /draw ) → not supported Calling the deck via %{DeckName|draw} → works, but still places card on tabletop Manually using “Show to Players” → works, but adds extra steps mid-combat Question: Is there: A macro or API script (Pro is fine) that can draw + show card in chat ? A deck setting I might be missing to improve visibility? Or a recommended workflow for using card decks smoothly with Dynamic Lighting? Really appreciate any help or ideas—this is a great feature, just trying to make it flow better during sessions. Thanks!
1777034776
The Aaron
Roll20 Production Team
API Scripter
A script would certainly be possible. Basically, it would watch for the creation of a card on the tabletop and would just send it to chat.  It could be fine tuned to only do that for certain decks, only whisper to players on the current page, etc. Outside a script, there are two ways you could handle this: 1) Once played, select the card and hit shift-z.  That will show it to all players.  (Possibly that's what you're already doing) 2) Cordon off a space in the dynamic lighting and place in it a token controllable by everyone with vision and light on it, then play cards in that space.  All players will be able to see it there.  You could shift-click-hold to ping pull everyone to see it as well.
1777035440

Edited 1777035482
The Aaron
Roll20 Production Team
API Scripter
Here's the simple version of that script that just shows any card played to the tabletop in chat: on('ready', () => { const SCRIPT_NAME = 'Played Card'; const htmlEscape = (s) => `${s || ''}` .replace(/&/g, '&') .replace(/</g, '<') .replace(/>/g, '>') .replace(/"/g, '"') .replace(/'/g, '''); const toDisplayImage = (imgsrc) => `${imgsrc || ''}`.replace(/\/(thumb|med|max)\./, '/original.'); const getCardTitle = (graphic) => { const cardId = graphic.get('cardid'); const card = cardId && getObj('card', cardId); return (card && card.get('name')) || graphic.get('name') || 'Card'; }; const announceCardGraphic = (graphic) => { if (!graphic || 'graphic' !== graphic.get('type') || 'card' !== graphic.get('subtype')) { return; } const title = htmlEscape(getCardTitle(graphic)); const img = toDisplayImage(graphic.get('imgsrc')); if (!img) { return; } sendChat( SCRIPT_NAME, `<div style="max-width:520px;margin:.2em 0;border:1px solid #444;border-radius:8px;overflow:hidden;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.25);">` + `<div style="padding:.45em .65em;font-weight:700;background:#222;color:#f5f5f5;">${title}</div>` + `<div style="padding:.45em;background:#111;">` + `<img src="${img}" style="display:block;width:100%;height:auto;border:0;" />` + `</div>` + `</div>` ); }; on('add:graphic', announceCardGraphic); });
Whoa, Aaron you are amazing and I have used your work/scripting for years. Thanks for reaching out. I am a little star struck. :)
Works like a damn.
1777065657
The Aaron
Roll20 Production Team
API Scripter
Lolz, happy to help!  I wish I had more time to spend just creating scripts, glad that works for you!