Chivalry & Sorcery on Roll20

I recently started a new Chivalry & Sorcery campaign, and COVID-19 comes to rain on our parade! So we moved our most recent session online, and that’s where the campaign will stay for the foreseeable future. Since I already have a Roll20 Pro subscription and since I am familiar with it from my Lamentations of the Flame Princess campaign (still going strong), I went to Roll20 as my default. Unfortunately Roll20 doesn’t have a character sheet built for Chivalry & Sorcery – I am pretty sure that none of the VTT platforms out there do! But that’s OK, I don’t need all of the VTT bells and whistles, since at this stage I am still assuming that the campaign will be able to move back to a face-to-face campaign in the medium term. There are some Roll20 features I can make good use of though.

Dice Macros

Chivalry & Sorcery has an elegant dice mechanic. Once you have calculated the Total Success Chance (TSC) for all your skills during character creation, in play, the dice mechanic is quick and easy to use. Face-to-face we roll 1d100 and 1d10 – the 1d100 is the roll to determine success or failure and the 1d10 is the “Crit die”. If the 1d100 result is equal to or below the TSC, the roll is a success, and the Crit die shows how successful the success was (a 10 = a critical success). If the 1d100 result is above the TSC, the roll is a failure, and the Crit die shows how much of a failure the failure was (a 10 = a critical failure).

There is nothing to stop you just rolling your dice in Roll20 the same way, or at least in two steps (/roll 1d100 then /roll 1d10) but we are not familiar enough as a group with the Crit die tables that all of us know how much of a success or failure a given Crit die roll is. Complicating this, the Crit die roll is modified by very high and very low TSCs. So I thought I would setup some simple macros to semi-automate the resolution mechanic.

Click the “In Bar” check box and “Show macro quick bar?” check box so that you can get your macro as a convenient button to click.

Unfortunately, this was much more difficult than I anticipated, because the functions Roll20 exposes for dice mechanics are limited unless you can use APIs in your game (which requires a Pro subscription). I am going to keep refining these macros, but for now, this is what I have.

Percentile Pair Roll

Percentile Pair Roll is the simplest macro and is one which can be implemented without API support:

/roll 1d100<?{Total Success Chance|01}

This macro rolls 1d100 and compares it to a number provided by the player called “Total Success Chance”. If we have an electronic character sheet, this could point at the sheet, but we don’t, so instead we need a pop-up box to ask the player to type in their TSC manually. This is OK for now as it helps the players learn the system.

Crit Die Macros

My Crit Die macros include a conditional statement and format results nicely, so I used the Power Card API. To use this API, I needed a Pro account (which I already had), and I needed to go into the Game Settings and add the API to the game.

Burning Jacques de Molay courtesy of talented artist Luigi Castellani

Once Power Cards was added, the macros I use are coded like this:

!power {{
--name|Success with Crit Die
--Crit Die Roll:| [[ [$crit] 1d10 + ?{Crit Die Modifier (pp37-38)|0} ]]
--?? $ <= 1 ?? Result:|Mediocre Success
--?? $ >= 2 AND $ <= 5 ?? Result:|Middling Success
--?? $ >= 6 AND $ <= 9 ?? Result:|Competent Success
--?? $ >= 10 ?? Result:|Critical Success

The failure with Crit die code is very similar – just with the text after the “Result:|” on each line of the conditional statement changed to match the Failure Crit die table from Chivalry & Sorcery 5th edition. When the player runs this macro, they are asked to enter any modifier for their Crit die in a pop-up box, like they were with their TSC for the Percentile Pair roll. Then the final result is displayed in the chat log.

If you hover over the number, you can see a tool-tip with the actual roll and any modifiers shown.


Although in most face-to-face games I eschew the use of miniatures or tokens, in Roll20, it’s relatively easy to do combat on a battle mat. There’s no reason this has to be very elaborate – Roll20 admirably emulates a wet-erase gaming mat. C&S is battle mat agnostic – so you can use a square grid or a hex grid as you prefer. I’ve used a hex map for this demonstration. The scale which makes most sense for C&S for either squares or hexes is 5 feet. Naturally, each character has a token. Since I don’t have character sheets I am not going to link these tokens to a character sheet, but I will use the green bar for Body Points (BP) and the blue bar for Fatigue Points (FP).

The Turn Order tracking feature is quite useful for C&S

As I mentioned in my review of the PDF, Chivalry & Sorcery features (by default) an action point-based combat system. As mentioned in that review there is also an alternative blows-based system provided, but I am not using that in my game so I’ll stick with the default for this discussion.

Each combat round, every combatant has a fresh, partially-randomly generated pool of action points. Combatants act in order of who has the most action points left to the least, using up to 10 action points (10 AP) for a single action phase. After a combatant’s action phase, the character with the next-most remaining action points acts, and so on, until everyone is out of action points or has decided to hold onto them for the next round. This means a character may take multiple actions in a single round, the sequence always determined by who has the most action points left. At a physical table, it can be quite complex to track this in a way where all the players can see what is going on – but using the “Turn Order” tracker in Roll20, everyone can easily see who has the most action points left and therefore who will act next.

In my example combat with 3 combatants:

  • Aalis has 12 Base Action Points (BAP). She is wearing heavy armour (-3 AP/round), and is wielding a long sword.
  • The Black Knight has 9 Base Action Points (BAP). He is wearing battle armour (-5 AP/round), and is wielding a two-handed Battle Axe.
  • The Witch has 8 Base Action Points (BAP). She is wearing no armour (+3 AP/round).

When you “roll for initiative” in Roll20, you need to select your token, then send the result of a roll to the Turn Order tracker by appending &{tracker} to the end of your roll command. For example, in a system using 1d6 with no modifiers for initiative, you would select your token and type /roll 1d6&{tracker} into the chat window, then press enter, to send the result of the 1d6 roll to the Turn Order tracker. If you screw this up, the GM can always add a token for you and manually enter a number, but that should be a “fall back” position. So, the roll commands to randomly generate an Action Point pool for each combatant in our combat are:

  • Aalis: /roll 1d10+12-3&{tracker} because she has 12 BAP, and -3 AP for heavy armour.
  • The Black Knight: /roll 1d10+9-5&{tracker} because he has 9 BAP, and -5 AP for battle armour.
  • Witch: /roll 1d10+8+3&{tracker} because she has 8 BAP and +3 AP for wearing no armour.
Select a token then roll to determine AP pool for the round

As you can see from the screenshot, the Turn Order tracker will add characters in the order the rolls come through. We need to change this to sort by AP remaining.

Click on the blue cog thingy then on “Descending” to sort by remaining AP

After sorting the Turn Order in descending order, it is now obvious to everyone that the Witch goes first. She casts a hex, which takes 2 actions and will cost her a total of 15 AP. Her first action takes 10 AP of this, so we have to adjust her AP in the counter.

You can click on the number next to a character’s name to manually adjust the Turn Order.

Then you have to re-sort descending. In fact, we will need to do this same step again after every character’s action phase:

Re-sort after each action to show the new sequence of who gets to act.

It is now Aalis’ turn. She moves 10 feet (2 AP) towards the Witch and attacks with her long sword (8 AP). Since she is in heavy armour, this also costs 1 Fatigue Point. Let’s assume she hits. To do damage, she rolls a Crit Die with +1 for using a longsword, +5 base damage, +8 for her Strength bonus, and +2 attacker’s bonus for being level 2 with a medium weapon. This can be rolled with /roll 1d10+1+5+8+2. Damage is applied first to Fatigue Points (blue bar) then to Body Points (green bar).

After deducting the 10AP, the Turn Order needs to be re-sorted

After re-sorting the Turn Order counter, The Black Knight moves next! He cannot both close with Aalis and attack in the same action phase (i.e. within the 10 AP limit), so he moves 15 feet (3 AP). This costs him 2 FP in the process for wearing battle armour so that is deducted from the blue bar.

Hexes give extra wargaming cred

Fortunately for The Black Knight, even after paying the 3 AP, his current action point pool is still the largest, so he takes the next action – attacking with his battle axe (8 AP). Let’s assume he also hits. To do damage, he rolls a Crit Die with +1 for using a Battle Axe, +8 base damage, +10 for his Strength bonus, +3 attacker’s bonus for being level 6 with a 2H weapon. The command to roll this is /roll 1d10+1+8+10+3.

After spend 8 AP, The Black Knight has no AP left for the rest of the round.

Now we go back to the Witch’s turn to act… and so the round continues until all AP are spent or a combatant wishes to “bank” their remaining AP to the next round. Let’s say after the Witch has spent her 7 AP, Aalis wishes to bank her remaining 2 AP. When we re-roll her action point pool for the next round, we just add 2 to the same command we used before to generate the action point pool for Aalis: /roll 1d10+12-3+2&{tracker} Remember to select the correct token before rolling for the action point pool or the wrong character will get the pool added to the Turn Order window!

Regional Map

The regional map is a simple but really useful feature, especially since my campaign is set in a fictitious region. My region map is drawn using Hex Kit (affiliate link) and uploaded into Roll20 and then agonizingly resized until it fits the hex grid.

See the tool highlighted in the sidebar? Useful for measuring.

My map is setup with a scale of 1 hex = 2 miles. The ruler tool (highlighted in the sidebar in the screenshot above) is handy to measure the distance between arbitrary points. Useful for determining the range of scrying spells and many other functions!

Depending on how long the COVID-19 quarantine continues, I may expand on how much automation I build into Roll20 for Chivalry & Sorcery, and I may learn other tricks which are useful for using Roll20 for the game. For the time being, however, that’s about all I am doing for now with my temporarily online Chivalry & Sorcery game!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.