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 .
×
Create a free account

5E Simple Character Spellbook - no API needed.

1665112423

Edited 1665435722
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.
1665112619

Edited 1665115829
Gauss
Forum Champion
I think your image didn't post. :) There it is :) What you have is a great idea, although might not work so well for Artificers, Clerics, and Druids if they drop all the available spells they have onto their sheets.  For that I use a macro which only lists spells with a red dot (ie. prepared) on the spell sheet (courtesy of Ooshp).
You may be interested in my  Universal Statblock Menu  that will display Prepared versus unprepared spells for PCs. 
Gauss said: I think your image didn't post. :) There it is :) What you have is a great idea, although might not work so well for Artificers, Clerics, and Druids if they drop all the available spells they have onto their sheets.  For that I use a macro which only lists spells with a red dot (ie. prepared) on the spell sheet (courtesy of Ooshp). I agree, for most classes listing unprepared spells is not useful.  However wizards are an exception because they don't need to have a ritual spell prepared in order to cast it.  Also wizards are much more likely to have their situational spells on scrolls rather than preparing them.  In either case having them listed with a clickable link is helpful.   But I suppose you could work around that by setting them as prepared and then manually appending (Ritual only) or (Scroll) to the spell name so you know that they aren't actually prepared. Can you provide a link to the macro that you are using so I can check it out for use with other classes?
Jarren said: You may be interested in my  Universal Statblock Menu  that will display Prepared versus unprepared spells for PCs.  I actually looked at an earlier stand alone version of your SpellsMacro but didn't care for the formatting and wasn't able to figure out how exactly it was blanking the lines for non-existant spells.  So I couldn't adapt it to work with the format I wanted. Your Macro Mule looks awesome, but as a player it is beyond my ability to implement.  But I will pass the link along to my DM.
1665210493

Edited 1665210528
Gauss
Forum Champion
Ryan85202 said: Gauss said: I think your image didn't post. :) There it is :) What you have is a great idea, although might not work so well for Artificers, Clerics, and Druids if they drop all the available spells they have onto their sheets.  For that I use a macro which only lists spells with a red dot (ie. prepared) on the spell sheet (courtesy of Ooshp). I agree, for most classes listing unprepared spells is not useful.  However wizards are an exception because they don't need to have a ritual spell prepared in order to cast it.  Also wizards are much more likely to have their situational spells on scrolls rather than preparing them.  In either case having them listed with a clickable link is helpful.   But I suppose you could work around that by setting them as prepared and then manually appending (Ritual only) or (Scroll) to the spell name so you know that they aren't actually prepared. Can you provide a link to the macro that you are using so I can check it out for use with other classes? /w @{selected|character_name} &{template:npcaction} {{rname=@{selected|character_name}}} {{description=[-- Cantrips --](" style="background: none; background-color: transparent; border: none; padding: 0px; text-decoration: none; display:none; color: #7e2d40; font-weight: bold; display:none; display: block@{selected|repeating_spell-cantrip_$0_spellname|max};)[@{selected|repeating_spell-cantrip_$0_spellname} ](~@{selected|character_name}|repeating_spell-cantrip_$0_spell" style="background: none; background-color: transparent; border: none; padding: 0px; text-decoration: none; color: purple; display:none; display: block@{selected|repeating_spell-cantrip_$0_spellname|max}; )[@{selected|repeating_spell-cantrip_$1_spellname} ](~@{selected|character_name}|repeating_spell-cantrip_$1_spell" style="background: none; background-color: transparent; border: none; padding: 0px; text-decoration: none; color: purple; display:none; display: block@{selected|repeating_spell-cantrip_$1_spellname|max}; ) [-- Level 1 Spells --](" style="background: none; background-color: transparent; border: none; padding: 0px; text-decoration: none; display:none; color: #7e2d40; font-weight: bold; display:none; display: block@{selected|repeating_spell-1_$0_spellname|max};)[@{selected|repeating_spell-1_$0_spellname} ](~@{selected|character_name}|repeating_spell-1_$0_spell" style="background: none; background-color: transparent; border: none; padding: 0px; text-decoration: none; color: purple; display:none; display: block@{selected|repeating_spell-1_$0_spellname|max}; height: @{selected|repeating_spell-1_$0_spellprepared}; overflow: hidden;)[@{selected|repeating_spell-1_$1_spellname} ](~@{selected|character_name}|repeating_spell-1_$1_spell" style="background: none; background-color: transparent; border: none; padding: 0px; text-decoration: none; color: purple; display:none; display: block@{selected|repeating_spell-1_$1_spellname|max}; height: @{selected|repeating_spell-1_$1_spellprepared}; overflow: hidden;) }} {{name= Prepared Spells }} &{noerror} (broke it up for legibility) First section is the start and cantrip section. Add more cantrip lines as needed. Second section is the subsequent levels. Rename the repeating_spell-1 as needed. Rename $0 as needed. I have about 10 cantrip lines in my macro, about 35 1st level (cleric/druid + extras), about 35 2nd level, then the numbers start to decrease as there are fewer spells per spell level.  I recommend a Level Button macro as the starting macro for the above. Then I have it call either the entire list, or by level.  If you want the full macro I can invite you to a game and you can grab my mule.
Gauss said: (broke it up for legibility) First section is the start and cantrip section. Add more cantrip lines as needed. Second section is the subsequent levels. Rename the repeating_spell-1 as needed. Rename $0 as needed. I have about 10 cantrip lines in my macro, about 35 1st level (cleric/druid + extras), about 35 2nd level, then the numbers start to decrease as there are fewer spells per spell level.  I recommend a Level Button macro as the starting macro for the above. Then I have it call either the entire list, or by level.  If you want the full macro I can invite you to a game and you can grab my mule. That's perfect thanks!
I am doing exact same thing for one of my players in a game. But find the explanation a bit overwhelming. Is it possible to invite to my campaign and try to give me a hand and quick explanation over discord or something. I'm using the Darker Dungeons Sheet but it functions a lot like the OGL. I did just spend a lot of time importing all the spells for the druid as something messed them up. So if there is a risk of them being messed up again I'll probably just pass and keep using the Token Action script.
Zym said: I am doing exact same thing for one of my players in a game. But find the explanation a bit overwhelming. Is it possible to invite to my campaign and try to give me a hand and quick explanation over discord or something. I'm using the Darker Dungeons Sheet but it functions a lot like the OGL. I did just spend a lot of time importing all the spells for the druid as something messed them up. So if there is a risk of them being messed up again I'll probably just pass and keep using the Token Action script. Can you clarify who you are directing this to?  There are 3 different options posted: my original post which is geared more towards a wizard spell list, Jarren's Universal Statblock Menu , and Gauss's version which only lists prepared spells.
1665345550

Edited 1665346048
Cosmic
Sheet Author
Ideally it would be good to have one player button for spells known, as I already have done with Token Action.  and another button that would list prepared spells.  However, Ryan, I really liked the layout of yours and how it listed prepared spells with known spells. (This is a druid) I have tried your macro set up the tables which was easy but in the chat output have an error  No table found with that name!
Zym said: Ideally it would be good to have one player button for spells known, as I already have done with Token Action.  and another button that would list prepared spells.  However, Ryan, I really liked the layout of yours and how it listed prepared spells with known spells. (This is a druid) I have tried your macro set up the tables which was easy but in the chat output have an error  No table found with that name! Apparently the table names are case sensitive.  So make sure that you have them entered as CheckBox0 and CheckBox1.  You can click on the table name under the Collection tab to edit. I'm currently working on a version to list only the prepared spells using the snippets Gauss provided.  I'm still testing things and am finding that dynamically generating a complete spell list is kind of slow and requires a massive macro.  But I will post an update here once I have made more progress.
I am having no luck /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 available) [[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 available) [[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) }}
Maybe it's the character sheet you are using.  Does it have the repeating spell prepared flag?  Select the player's token and copy the following and paste in your chat box.  It should return a 1 or a 0 when you hit enter. @{selected|repeating_spell-1_$0_spellprepared}
@{selected|repeating_spell-1_$0_spellprepared} That returns a 0 when I enter 
Okay then try pasting the following into chat: 1t[CheckBox@{selected|repeating_spell-1_$0_spellprepared}] then [[1t[CheckBox@{selected|repeating_spell-1_$0_spellprepared}]]] you should get: 1t[CheckBox0] and ⬜️
Hey Ryan, Watsup. So yeah the first line does come back  1t[CheckBox0] But the second line still comes back  No table found with that name!
Let's try this.  Enter the following: 1t[CheckBox0] If it's still giving you the no table found error then check to make sure the table name ends with a zero and not an O. Also, are you setting this up as a Token Action or trying to run it as a Macro?
That works. Can I invite you to my game and set you as a GM so you see this set up. Running the script into the chat box.
Gauss said: If you want the full macro I can invite you to a game and you can grab my mule. Hey Gauss, I wanted to give your mule a shot.  Could you PM it to me?