Character Vault
Any Concept / Any System
Your System Come To Life
Roll20 for Android
Streamlined for your Tablet
Roll20 for iPad
Streamlined for your Tablet

Personal tools

Dungeons and Dragons 3.5

From Roll20 Wiki

Revision as of 02:48, 25 July 2015 by The Aaron (Talk | contribs)

Jump to: navigation, search

This page is about both playing an DMing (DM and GM are the same in D&D) Version 3.5 of D&D on Roll20.


Macros and Attributes

Macros and attributes are best used when the time reduction of using the macro is greater than the time to make macro, or set up and apply the attribute. For example, setting up a macro to roll 1d20 /r d20 is not an efficient use of a macro, but rolling 3 attacks and adding the modifier after it might be worth attributes for the modifiers and a macro for the entire process. Remember that abilities are essentially macros but are visible to and usable by everyone that can edit the character.

Also, when you use attributes, remember that the computer just replaces the call command with the "value" it represents. This value doesn't have to be a number. For example, you could have an attribute that places something after the rest of the chain and fill this macro with the weapon you are currently using and the name of that weapon would appear where that attribute is. This substitution happens first in the chain of events, so you could even put something like 1d6+5 in an attribute at the end of a damage roll and it would roll the d6 and add both the d6 roll and the 5 to the result you would have otherwise received.


Some common/recommended uses of macros/attributes when playing D&D 3.5 on Roll20 are: (feel free to add any not included using existing as a guide)


All players put their save value in an attribute on the corresponding character page then the DM and/or Player (depending on style of play) makes a macro that rolls the save

ex: A DM macro for rolling the Fort save of 4 players

/r 1d20+@{PC 1|Fort}} PC1
/r 1d20+@{PC 2|Fort}} PC2
/r 1d20+@{PC 3|Fort}} PC3
/r 1d20+@{PC 4|Fort}} PC4

When using the pre-set 3.5 character sheet (set by the DM in the campaign settings) you can create more advanced macros to extract key information. Using inline rolls (see dice reference) you can take a lot of the work out of calculating a roll, even setting the target needed with a prompt pop-up:

@{selected|character_name} performs a Fortitude check:
[[1d20 + @{selected|fortitude} + ?{Other Bonus|0}]] v DC ?{DC Target:|10}.

Returns a result of:
Ziechael performs a Fortitude check:
14 v DC 10.

Using inline cleans up the result and hides the calculations (which can still be seen when hovering your pointer over the result). The ?{...|...} acts as a prompt with the first ...'s being the question asked to the user and the second ...'s being the default but editable answer, again see dice reference for details.

You will note the macro started with @{selected|character_name}, this would require the user to have selected a token on the map first but works great for generalised macros, remember to use @{selected|...} for each instance of wanting to look up information from the character sheet. This can also work for @{target|...} which would prompt the user to select a target token on the map.

Ability Checks

Ability checks are simple rolls which are measured against a target number and receive bonuses from a characters stats and may be subject to other modifiers from temporary boosts or GM discretion.

Using the 3.5 character sheet you can create quick and simple macros for all abilities which when coupled with token selection (@{selected|token_name} or @{selected|character_name}) can help resolve ability checks in one step.

@{selected|character_name} performs a Strength check: 
[[1d20 + @{selected|str-mod} + ?{Other Bonus|0}]] v DC ?{DC Target:|10}.

Returns a result of:
Ziechael performs a Strength check:
17 vs 10.

With basic skills you can use this to suit any of the abilities just by changing the modifier looked at, also the text can be enhanced to be less clinical: 'Ziechael performs a feat of strength' for example?

Skill Checks

Skill checks operate in much the same way as ability checks. Have a token selected, hover over the skill on the sheet to find its 'look-up' name and use that as your modifier:

@{selected|character_name} assesses the value of an item: [[1d20 + @{selected|appraise} + ?{Other Bonus|0}]] v DC ?{DC Target:|0}.

Returns a result of:
Ziechael assesses the value of an item: 12 v DC:15.

Simply change the modifier and text to suit and simple skill checks can be generated in seconds.

Hide the Results

Sometimes an evil GM will ask a player to perform a check but doesn't want them to know if they passed or not! This can be easily replicated by adding a simple whisper into the equation:

/em Septimus searches his memory for useful information.
/w gm [[1d20 + @{selected|level} + @{selected|int-mod} + 4]] vs DC: [[?{DC?|10}]]

In the bardic knowledge check performed above the player/s will only see 'Septimus searches his memory for useful information.' in the chat box, the result of '7 vs DC:10' is then whispered to the GM so that they can decide how to mislead the failed knowledge check. Does the bard misremember, vaguely recall of just outright not know what they were hoping was in the deep recesses of their mind?

Attacks/attack sequences

Attributes are made to add the various values used by the attack(s) in question for both attack rolls and damage. Then a Macro(s) is written to use these values to do all the math and rolling and and the values together.

ex: attacking with a two handed weapon twice using a full attack. If Str (strength) is odd, then the .5 at the end of the damage is ignored

/me attacks twice with @{weapon}
/r 1d20+@{str}+@{enchantment}+@{attack temporary} attack 1
/r @{damage}+@{str}*1.5+@{enchantment}+@{damage temporary} damage 1
/r 1d20+@{str}+@{enchantment}+@{attack temporary} attack 2
/r @{damage}+@{str}*1.5+@{enchantment}+@{damage temporary} damage 2

Using the pre-set character sheet again can greatly increase the ease and speed of your players attacks and damage, even incorporating things like critical hits and special attacks such as a sneak attack. Again the following will require a token to be selected and a target token for the focus of the attack/damage etc. While the macro can get long and complex looking it is worth breaking down to analyse and is a great way to learn the nuances of macro building.

Attack Macro:
@{selected|token_name} attacks @{target|token_name} with their @{selected|weapon1name} rolling [[1d20]] + [[d0+@{selected|BAB}[BAB] +@{selected|weapon1stat}[Ability] +@{selected|size}[size] +@{selected|weapon1enh}[Weapon1 Enh] +@{selected|weapon1focus}[Weapon1 Focus] + ?{Flank (1=yes)|0}*2[Flank] +?{Other Att Bonus?|0} ]] (check for crit for @{selected|weapon1critmult}x damage on [[@{target|armorclass}]] or better; confirm crit = [[1d20+@{selected|BAB}[BAB] +@{selected|weapon1stat}[Ability] +@{selected|size}[size] +@{selected|weapon1enh}[Weapon1 Enh] +@{selected|weapon1focus}[Weapon1 Focus] + ?{Flank (1=yes)|0}*2[Flank] +?{Other Att Bonus?|0} ]]) against @{target|token_name}'s armor class of [[@{target|armorclass}]].

Returns a result of:
Ziechael attacks Goblin with their Long Sword rolling 14+7 (check for crit for 2x damage on 13 or better; confirm crit = 17) against Goblin's armor class of 13.

You can see how by telling the macro to take into account all of the possible modifiers to a roll and looking up the information from the character sheet the actual 'work' needed to be done by the player is minimised. A player using this attack roll would need to input any bonus' outside of the norm they may have (like being blessed for example which isn't a permanent bonus) and they would be prompted to 'tell' the macro if they have flanked the enemy or not (a great example of a query using the question to guide an answer: ?{Flank (1=yes)|0}). The rest is done by the macro including telling you if there was a critical hit or not. To make this more obvious we leave the original roll (rolling [[1d20]]) untainted by the bonuses to highlight easily whether a clean 20 was rolled. If so the player can then look at the 'check for crit' section to see if their 'threat' became a 'crit' or remained a hit as normal. You can even move the individual part of the macro around for layout purposes should you desire to see the roll to hit first and have the crit check at the end. When wanting to set a macro up for the other weapon slots you would just make the same macro but with every instance of 'weapon1' replaced with 'weapon2' through to 'weapon6'.

A similar macro can be used to determine damage (please note you need to input the weapon's damage as d4, d6, d8 etc into the 'damage' box of the weapon slot; overwriting the macro that exists there for these to work as you will use them in the lookups to allow these macros to work for any weapon), you can even tag this onto the previous macro to create one big roll out of data that can be picked as needed. I personally keep my damage separate as it can be devastating to see an attack miss that would have caused massive damage!

@{selected|token_name} hits for [[1@{selected|weapon1damage} +@{selected|weapon1damagestat}[Weapon1DamageStat] +@{selected|weapon1enh}[Weapon1 Enh] +@{selected|weapon1specialize}[Weapon1 Specialization] +?{Other Damage Bonus?|0}[Other Damage Bonus]]] damage!

Returns a result of:
Ziechael hits for 7 damage!

Again note that the macro asks the player to add any extra damage they may inflict, this can be temporary flaming weapons, racial bonus or any other damage modifier that isn't applicable to ALL damage rolls. You can even use this with a negative number to detract damage from the roll for enemies with damage reduction against certain damage types. As before, replace all 'weapon1' instances with the appropriate number for the weapon slot used for the attack that hit.

Critical damage works in much the same way but will incorporate a weapons damage multiplier for a given weapon:

@{selected|token_name} strikes mightily for [[(@{selected|weapon1critmult})@{selected|weapon1damage}]] + [[d0+(@{selected|weapon1damagestat}[Weapon1DamageStat] +@{selected|weapon1enh}[Weapon1 Enh] +@{selected|weapon1specialize}[Weapon1 Specialization])* @{selected|weapon1critmult}]] + [[d0+?{Other Damage Bonus?|0}[Other Damage Bonus]]] damage!

Returns a result of:
Ziechael strikes mightily for 12+4+0 damage!

The critical damage is set up to require some mental arithmetic to incorporate the 3.5 rules for critical hits. The multiplier only applies to base damage and doesn't multiply the weapons bonus damage or any 'other' bonus such as fire damage for a flaming sword. Again negative numbers can be used to reflect damage reductions.

Special attacks elaborate on existing macros but apply their own special rules as needed. I personally use API based Power Cards (require Pro level subscription) to make my special attacks look pretty but the macros used to calculate the attack, critical hit check, damage and critical damage remain the same and can be incorporated into a normal macro as with the previous examples:

[[1d20 + @{selected|BAB}[BAB] +@{selected|weapon1stat}[Ability] +@{selected|size}[size] +@{selected|weapon1enh}[Weapon1 Enh] +@{selected|weapon1focus}[Weapon1 Focus] + (?{Flank (1=yes)|0}*2)[Flank] +?{Other Att Bonus?|0} ]] vs [[d0+(?{Flat Footed? (1=No)|0}*@{target|dex-mod} + @{target|flatac})]]

Critical hit check:
[[1d20 + @{selected|BAB}[BAB] +@{selected|weapon1stat}[Ability] +@{selected|size}[size] +@{selected|weapon1enh}[Weapon1 Enh] +@{selected|weapon1focus}[Weapon1 Focus] + ?{Flank (1=yes)|0}*2[Flank] +?{Other Att Bonus?|0} ]] vs [[(d0+?{Flat Footed? (1=No)|0}*@{target|dex-mod}) + @{target|flatac}]]

[[1@{selected|weapon1damage} + (d0 +@{selected|weapon1damagestat}[Weapon1DamageStat] +@{selected|weapon1enh}[Weapon1 Enh] +@{selected|weapon1specialize}[Weapon1 Specialization]) + (d0+?{Other Damage Bonus?|0}[Other Damage Bonus])]] + [[d1*ceil(@{selected|level}/2)@{selected|weapon1damage}]]

Critical damage:
[[(@{selected|weapon1critmult}@{selected|weapon1damage}) + (d0+@{selected|weapon1damagestat}[Weapon1DamageStat] +@{selected|weapon1enh}[Weapon1 Enh] +@{selected|weapon1specialize}[Weapon1 Specialization]* @{selected|weapon1critmult}) + (d0+?{Other Damage Bonus?|0}[Other Damage Bonus])]] + [[d1*ceil(@{selected|level}/2)@{selected|weapon1damage}]]

The main change to the attack roll is that the flat footed armor class modifier has been incorporated using a query (technically this could be used in all attack rolls but adds an extra step that is easy enough to amend on the fly in game but since most sneak attacks will be against flat footed, or more accurately dex-modless, enemies is makes sense to add it in as an option). The damage uses the 'ceil' function (see dice reference) to calculate the damage multiplier based on the selected token players level. Again this is kept separate from the rest of the damage calculation as the multiplier only applies to the weapons base damage.


As with special attacks I like to use API based Power Cards for my spells, makes them look extra special. However the macro calculations can be extracted for general use. They can get quite complex as most spells do x amount of whatever every x levels or will generate x amount of whatever every x levels up to a maximum of x. Taking the time to really play around and familiarise yourself with the dice reference page can be a huge help in unravelling the weave.

The two main ones that teach the most lessons are cure light wounds and magic missile, some of the first spells an aspiring macro writer will encounter:

Cure Light Wounds
@{selected|token_name} heals @{target|token_name} for [[1d8+(@{selected|casterlevel},5)dh1]] hit points by divine energy. Undead are harmed for the same amount, or half the amount if a successful Will save of DC [[10+1+@{selected|wis-mod}]] is made.

Magic Missile
@{selected|token_name} shoots [[{d1*5, d1*ceil(@{selected|casterlevel}/2)}dh1}]] missiles from their fingertip dealing [[1d4+1]] damage per missile.

Notice the 'dh1', this tells the macro to drop the higher of two results which allows you to only produce the maximum result permitted by the spell. In the case of CLW it will only heal to a maximum of 1d8+5 even if your caster level is 6+. MM is a bit more complex as it needs to calculate an extra missile every 3 levels up to a maximum of 5. Using the ceiling of 1/2 of the caster level we can replicate the extra missile and by again using the drop highest function we can cap this at 5 missiles.

"Please note, my macros may look clunky to an advanced user but i've managed to pick these up within a couple of hours and to my mind, if it works I'm not going to keep messing with it!"


Some DMs find it useful to set up long description texts in a macro and put the name of the macro next to the room it is for.


/desc As You walk into the room, you all notice a few things at once. First, There is a giant pool covering half the room. Second, A rather large cave in in one corner. Finally, three lizard men are waiting for you. The Lizard men attack.

Another way of doing this is to put a token on the GM layer (a scroll token works well) in each room that has a description written out in one of the bars/bubbles (it is easiest to write out the description elsewhere, then copy/paste it into the bubble).

Then, use this macro:

/desc @{selected|bar1}

When the players get to the room, simply switch to GM layer, select the token holding the description, and hit the button for your description macro.


Say you use the Players Roll All The Dice variant and the Roll20 built-in D&D 3.5e character sheet. Because players roll a lot more dice using this variant than normal, it's important for them to know their roll modifiers for those new rolls. As such, it's be useful to have a tool for your players that allows them to look up all of their roll modifiers at any time (as a macro token action accessible by all players). Likewise, you'd want the tool to tell you what all of the various NPC/monster "scores" are that oppose those rolls, so you'd needed it to calculate the simple number which a player would need to beat.

That is, you'd need something that would output something like this:

Flat-Footed AC for Bob: +4 = 14 (Subtract lost Dodge bonus)

A number of these values have "conditionals" in them. For example, for Flat-Footed AC, you lose your Dex bonus (if you had one), but keep a Dex penalty. You'd need to represent these conditions in your tool, but the only tool you normally have available is macros/abilities unless you can afford Pro level (for custom character sheets). As-is, you can't do conditional math like the following because there's no "conditional" syntax available in macros/abilities.

[[ @{selected|dexmod} < 1 ? @{selected|dexmod} : 0 ]]

That means that you'll have to use Dice Representation to display all of these modifiers and all of their innate conditionals, and display them through a GM whisper so no one but you and the GM can see that information.

/w gm Flat-Footed AC for @{selected|character_name}: +[[ @{selected|modifier} ]] = [[ @{selected|modifier} +10 ]] (Subtract lost Dodge bonus)

The following formulas allow you to create very simple inequality-based conditionals using only Dice Representation. Assume that in the formulas all ALL_CAPS variables are integers that you plan on replacing with actual integers (or attributes that are integers) when you implement them. (Note: If you replace a variable with an explicit negative number, Roll20 Order of Operations must have that negative number in parentheses.)

Greater Than or Equal To

The formula below returns a 1 for all integers MINIMUM_VALID_NUMBER or more, and returns 0 for all other integers.

[[ ( 1 - ( floor( ( MINIMUM_VALID_NUMBER - 1 - ATTRIBUTE ) / ( abs( MINIMUM_VALID_NUMBER - 1 - ATTRIBUTE ) + 0.001 ) ) + 1 ) ) ]]

The formula below returns ATTRIBUTE when it's an integer that is greater than or equal to the MINIMUM_VALID_NUMBER and will be 0 for all other integers.

[[ ATTRIBUTE * ( 1 - ( floor( ( MINIMUM_VALID_NUMBER - 1 - ATTRIBUTE ) / ( abs( MINIMUM_VALID_NUMBER - 1 - ATTRIBUTE ) + 0.001 ) ) + 1 ) ) ]]

Less Than or Equal To

The formula below returns a 1 for all integers MAXIMUM_VALID_NUMBER or less, and return 0 for all other integers. This is useful for situations where above a certain maximum you should ignore that value (such as ignoring a Dex Bonus when flatfooted but keeping a penalty).

[[ ( floor( ( MAXIMUM_VALID_NUMBER - ATTRIBUTE ) / ( abs( MAXIMUM_VALID_NUMBER - ATTRIBUTE ) + 0.001 ) ) + 1 ) ]]

The formula below returns ATTRIBUTE when it's an integer that is less than or equal to the MAXIMUM_VALID_NUMBER and will be 0 for all other integers.


Full Example In-Use

Thus, to accomplish ignoring a Dex Bonus but keeping a Dex Penalty, you can write the following default template to a macro token action visible to all players:

/w gm &{template:default} {{name=AC Roll Modifiers for @{selected|character_name} }} {{Flat-Footed=+[[ @{selected|acitembonus} + @{selected|shieldbonus} + @{selected|size} + @{selected|armorclassnaturalarmor} + @{selected|armorclassdeflectionmod} + @{selected|armorclassmiscmod} + @{selected|dexmod} * ( floor( ( (-1) - @{selected|dexmod} ) / ( abs( (-1) - @{selected|dexmod} ) + 0.001 ) ) + 1 ) ]] = [[ @{selected|acitembonus} + @{selected|shieldbonus} + @{selected|size} + @{selected|armorclassnaturalarmor} + @{selected|armorclassdeflectionmod} + @{selected|armorclassmiscmod} + @{selected|dexmod} * ( floor( ( (-1) - @{selected|dexmod} ) / ( abs( (-1) - @{selected|dexmod} ) + 0.001 ) ) + 1 ) +10 ]] (Subtract lost Dodge bonus)}}


Say you run a version of the Defense Bonus variant where immaterial armor stacks with the Defense Bonus. You can't just use the @{selected|acitembonus} attribute to determine whether the Defense Bonus applies, but if you have a custom attribute for all creatures called "Is Wearing Physical Armor?", you can make it a boolean 1 or 0 depending on whether or not that's the case.

[[ @{selected|DefenseBonus}-(@{selected|DefenseBonus}*@{selected|Is Wearing Physical Armor?}) ]]

Admittedly, the formula could be made simpler if the attribute was "Is NOT Wearing Physical Armor".

[[ @{selected|DefenseBonus}*@{selected|Is NOT Wearing Physical Armor?} ]]

However, when looking at a character's attributes list it's easier to wrap your head around the logic of a "1" affirming a positive rather than affirming a negative.


Some API codes modify or use macros. Official API forum


  • This section only really applies to a DM

Before you do ANYTHING else with a map, make sure you have the page settings right. Nothing is more annoying then making your map look all nice and neat and then realizing you made some critical mistake and have to start over. D&D uses squares, so make sure you are in squares. In addition, 3.5 uses the pathfinder/3.5 diagonal measurement system. Make it big to start with, making it smaller is easier than making it bigger. One unit is 5 ft (unless you really need to change it for some reason, 5 ft is best) and a 1 unit grid is best, with both grid color and background color depending on the map and the preference of both players and DM(some prefer no grid at all when playing but the grid really helps when hand drawing a map). Fog of War and Dynamic Lighting can wait until after you draw the map, but should be dealt with before your players see the map, as determined by play style and personal preference.

Now that that you have the major set up complete, a choice has to be made: hand draw in Roll20, import a drawing you make elsewhere, or use a drawing from online. If you pull a map from online or your library, you may need to align it and move it into position. Once you finish with your map, you now know how big it is. If you followed the earlier recommendation and made your space too big, after moving everything into place you now shrink it down to fit your actual map you are using (or just leave it too big to help confuse the players).

Characters and tokens

While each group is different on what they do for characters and tokens, A few things are standard. You will want a character page for each character. The DM will likely have a long list of NPC characters and might or might not share those with the players. If the DM shares the NPC pages, they will likely use the "GM notes" section to record info the players shouldn't know. Finally, you will likely benefit from setting a default token and attaching the bars (aka: the "bubbles") to a specific attribute. Remember that no max value causes a bar not to show up though the "bubble" for its current value will still show.

Dynamic Lighting

You can find Dungeons and Dragons 3.5 specific vision and lighting examples in the Dynamic Lighting Style Guide.