Hi everyone, I have started DMing on Roll20 very recently and it is
great so far, but setting up D&D 3.5 spell macros for PC's and NPC's
has been quite tedious (especially with cleric/druid spell lists). I am
a big fan of PCGen for
character sheet management and decided to create a custom outputsheet
that creates roll20 macros for every spell on a characters spell list. I
think the result is quite helpful, so i am posting it here: #Spell Outputsheet for Roll20 D&D 3.5 Spell Roll Templates
#Save this file as "csheet_roll20_rollscripts.txt.ftl"
#Copy file into outputsheets/d20/fantasy within your PCGen directory
#Use Pcgen export (Ctrl + Shift + P) and select this outputsheet under "Export to: Text"
#Feedback welcome under Roll20.net DMokun
<@loop from=0 to=pcvar('COUNT[SPELLBOOKS]-1') ; spellbook >
<@loop from=pcvar('COUNT[SPELLRACE]') to=pcvar('COUNT[SPELLRACE]+COUNT[CLASSES]-1') ; class >
<@loop from=0 to=9 ; level >
<@loop from=0 to=pcvar('COUNT[SPELLSINBOOK.${class}.${spellbook}.${level}]')-1 ; spell ><#assign range = pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.RANGE') /><#assign sr = pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.SR')/>&{template:DnD35StdRoll} {{spellflag=true}} {{name=@{character_name}}} {{subtags=casts <#if (pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.SOURCELINK') != "")>[<@pcstring tag="SPELLMEM.${class}.${spellbook}.${level}.${spell}.NAME"/>](<@pcstring tag="SPELLMEM.${class}.${spellbook}.${level}.${spell}.SOURCELINK"/>)<#else><@pcstring tag="SPELLMEM.${class}.${spellbook}.${level}.${spell}.NAME"/></#if>}} {{School:=<@pcstring tag="SPELLMEM.${class}.${spellbook}.${level}.${spell}.SCHOOL"/><#if (pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.SUBSCHOOL') != "")> [<@pcstring tag="SPELLMEM.${class}.${spellbook}.${level}.${spell}.SUBSCHOOL"/>]</#if>}} {{Level:=<@pcstring tag="SPELLMEM.${class}.${spellbook}.${level}.${spell}.CLASS"/> ${level}}} {{Comp'nts:=<@pcstring tag="SPELLMEM.${class}.${spellbook}.${level}.${spell}.COMPONENTS"/>}} {{Casting Time:=<@pcstring tag="SPELLMEM.${class}.${spellbook}.${level}.${spell}.CASTINGTIME"/>}} {{Range:=<#if range?lower_case?starts_with("close")> Close ([[25+5*floor(@{casterlevel}/2)]]ft.)<#else><#if range?lower_case?starts_with("medium")> Medium ([[100+10*@{casterlevel}]]ft.)<#else><#if range?lower_case?starts_with("long")> Long ([[400+40*@{casterlevel}]]ft.)<#else>${range}</#if></#if></#if>}} {{Target:=<@pcstring tag="SPELLMEM.${class}.${spellbook}.${level}.${spell}.TARGET"/>}} {{Duration:=<@pcstring tag="SPELLMEM.${class}.${spellbook}.${level}.${spell}.DURATION"/>}} <#if (pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.SAVEINFO') != "None")>{{Saving Throw:=<@pcstring tag="SPELLMEM.${class}.${spellbook}.${level}.${spell}.SAVEINFO"/> (DC [[ @{spelldc${level}} ]])}} </#if><#if sr?lower_case == "yes">{{Spell Resist.:=${sr} }} {{Caster level check: = [[ 1d20+@{casterlevel2}+@{spellpen} ]] vs spell resistance.}}</#if>{{compcheck= Conc: [[ {1d20 + [[ @{concentration} ]] }>?{Concentration DC=15+Spell Level or 10+Damage Received|16} ]] }} {{succeedcheck=The spell is cast successfully.}} {{failcheck=The spell fizzles without effect.}} {{notes=<#if (pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.EFFECT') != "")><@pcstring tag="SPELLMEM.${class}.${spellbook}.${level}.${spell}.EFFECT"/><#else><#if (pcstring('SPELLMEM.${class}.${spellbook}.${level}.${spell}.DESC') != "")><@pcstring tag="SPELLMEM.${class}.${spellbook}.${level}.${spell}.DESC"/><#else><@pcstring tag="SPELLMEM.${class}.${spellbook}.${level}.${spell}.DESC2"/></#if></#if> (<@pcstring tag="SPELLMEM.${class}.${spellbook}.${level}.${spell}.SOURCESHORT"/> <@pcstring tag="SPELLMEM.${class}.${spellbook}.${level}.${spell}.SOURCEPAGE"/>)}}
</@loop>
</@loop>
</@loop>
</@loop> Output for an example spell looks like this (Acid Splash, Wizard cantrip): &{template:DnD35StdRoll} {{spellflag=true}} {{name=@{character_name}}} {{subtags=casts [Acid Splash](<a href="http://www.d20srd.org/srd/spells/acidSplash.htm" rel="nofollow">http://www.d20srd.org/srd/spells/acidSplash.htm</a>)}} {{School:=Conjuration [Creation]}} {{Level:=Wizard 0}} {{Comp'nts:=V, S}} {{Casting Time:=1 standard action}} {{Range:= Close ([[25+5*floor(@{casterlevel}/2)]]ft.)}} {{Target:=One missile of acid}} {{Duration:=Instantaneous}} {{compcheck= Conc: [[ {1d20 + [[ @{concentration} ]] }>?{Concentration DC=15+Spell Level or 10+Damage Received|16} ]] }} {{succeedcheck=Spell cast successfully.}} {{failcheck=The spell fizzles.}} {{notes=Orb deals 1d3 acid damage. (PH p.196)}} The
result is of course not perfect, but a majority of the spell
descriptors (e.g. Range, Duration, Targets, etc.) are filled correctly.
The effect description is the weakest part, since the short descriptions
offered by PCGen are very coarse. However, I would argue that this is
also the part that is usually adapted to fit individual needs. Give it a try for your own spell lists and if you have any suggestions or feedback, please let me know Cheers, DMokun