
I know this has already been done a number of ways, but here's my version. I didn't want big pink buttons and wanted to show which spells are prepared and which ones aren't. As a player I don't normally have access to API calls or even know what scripts the DM might have installed and this method requires very little effort on the DM's part. For the setup the DM needs to create 2 rollable tables that players can access CheckBox0 and CheckBox1 . Each table has only 1 entry, CheckBox0 contains the white square emoji ⬜️ and CheckBox1 contains the green check box emoji ✅ . Next copy the following macro into a new Ability on your character sheet and check Show as Token Action. You will need to manually add or remove lines to reflect the number of spells for each level that you have on your sheet. /w "@{selected|character_name}" &{template:atk} {{range=**@{selected|character_name}'s Spell List**}} {{desc=**Cantrips** [@{selected|repeating_spell-cantrip_$0_spellname}](~selected|repeating_spell-cantrip_$0_spell), [@{selected|repeating_spell-cantrip_$1_spellname}](~selected|repeating_spell-cantrip_$1_spell), [@{selected|repeating_spell-cantrip_$2_spellname}](~selected|repeating_spell-cantrip_$2_spell), [@{selected|repeating_spell-cantrip_$3_spellname}](~selected|repeating_spell-cantrip_$3_spell) --- **1st Level** (@{selected|lvl1_slots_expended}/@{selected|lvl1_slots_total} slots left) [[1t[CheckBox@{selected|repeating_spell-1_$0_spellprepared}]]] [@{selected|repeating_spell-1_$0_spellname}](~selected|repeating_spell-1_$0_spell) [[1t[CheckBox@{selected|repeating_spell-1_$1_spellprepared}]]] [@{selected|repeating_spell-1_$1_spellname}](~selected|repeating_spell-1_$1_spell) [[1t[CheckBox@{selected|repeating_spell-1_$2_spellprepared}]]] [@{selected|repeating_spell-1_$2_spellname}](~selected|repeating_spell-1_$2_spell) [[1t[CheckBox@{selected|repeating_spell-1_$3_spellprepared}]]] [@{selected|repeating_spell-1_$3_spellname}](~selected|repeating_spell-1_$3_spell) [[1t[CheckBox@{selected|repeating_spell-1_$4_spellprepared}]]] [@{selected|repeating_spell-1_$4_spellname}](~selected|repeating_spell-1_$4_spell) [[1t[CheckBox@{selected|repeating_spell-1_$5_spellprepared}]]] [@{selected|repeating_spell-1_$5_spellname}](~selected|repeating_spell-1_$5_spell) [[1t[CheckBox@{selected|repeating_spell-1_$6_spellprepared}]]] [@{selected|repeating_spell-1_$6_spellname}](~selected|repeating_spell-1_$6_spell) [[1t[CheckBox@{selected|repeating_spell-1_$7_spellprepared}]]] [@{selected|repeating_spell-1_$7_spellname}](~selected|repeating_spell-1_$7_spell) --- **2nd Level** (@{selected|lvl2_slots_expended}/@{selected|lvl2_slots_total} slots left) [[1t[CheckBox@{selected|repeating_spell-2_$0_spellprepared}]]] [@{selected|repeating_spell-2_$0_spellname}](~selected|repeating_spell-2_$0_spell) [[1t[CheckBox@{selected|repeating_spell-2_$1_spellprepared}]]] [@{selected|repeating_spell-2_$1_spellname}](~selected|repeating_spell-2_$1_spell) [[1t[CheckBox@{selected|repeating_spell-2_$2_spellprepared}]]] [@{selected|repeating_spell-2_$2_spellname}](~selected|repeating_spell-2_$2_spell) [[1t[CheckBox@{selected|repeating_spell-2_$3_spellprepared}]]] [@{selected|repeating_spell-2_$3_spellname}](~selected|repeating_spell-2_$3_spell) [[1t[CheckBox@{selected|repeating_spell-2_$4_spellprepared}]]] [@{selected|repeating_spell-2_$4_spellname}](~selected|repeating_spell-2_$4_spell) [[1t[CheckBox@{selected|repeating_spell-2_$5_spellprepared}]]] [@{selected|repeating_spell-2_$5_spellname}](~selected|repeating_spell-2_$5_spell) --- **3rd Level** (@{selected|lvl3_slots_expended}/@{selected|lvl3_slots_total} slots left) [[1t[CheckBox@{selected|repeating_spell-3_$0_spellprepared}]]] [@{selected|repeating_spell-3_$0_spellname}](~selected|repeating_spell-3_$0_spell) [[1t[CheckBox@{selected|repeating_spell-3_$1_spellprepared}]]] [@{selected|repeating_spell-3_$1_spellname}](~selected|repeating_spell-3_$1_spell) [[1t[CheckBox@{selected|repeating_spell-3_$2_spellprepared}]]] [@{selected|repeating_spell-3_$2_spellname}](~selected|repeating_spell-3_$2_spell) [[1t[CheckBox@{selected|repeating_spell-3_$3_spellprepared}]]] [@{selected|repeating_spell-3_$3_spellname}](~selected|repeating_spell-3_$3_spell) --- **4th Level** (@{selected|lvl4_slots_expended}/@{selected|lvl4_slots_total} slots left) [[1t[CheckBox@{selected|repeating_spell-4_$0_spellprepared}]]] [@{selected|repeating_spell-4_$0_spellname}](~selected|repeating_spell-4_$0_spell) [[1t[CheckBox@{selected|repeating_spell-4_$1_spellprepared}]]] [@{selected|repeating_spell-4_$1_spellname}](~selected|repeating_spell-4_$1_spell) }} You should end up with something that looks like this: Bonus tip : I like to edit the spell names on the spell page of the character sheet to include emojis for spells with a casting time that is not 1 action. I use small blue diamonds for bonus actions, small orange diamonds for reactions, and watches ⌚️ for spells with longer casting times. You could also add text or emojis to indicate ritual and concentration spells.