Session Postmortem: The Battle of Leonor’s Hill 5


On Saturday, 22 October, 2022, I ran the 117th session of my Aurikesh campaign. I was trying some unusual stuff mechanically, and in this post, I’m going to talk about what worked, what didn’t, and how I could improve the concept. We all know that getting mass combat to work well and include everyone in a TTRPG is hard, but I needed a mass combat, so this is what I created.

What follows are my session prep notes. The commentary and actual postmortem are below the second line. (The tables are going to be difficult and annoying in Patreon. Here’s the Word doc attachment also, in case that helps readability.) There’s going to be some amount of “I knew what I meant, so I didn’t write it down,” but I’m trying to correct for that in the commentary.

This whole thing is another format of Hazards as Skill Challenges.

The Battle of Leonor’s Hill

In this battle I want to put the PCs through several encounters while still ensuring a mix of interaction encounters along with combat encounters. I think what I’m going to do is write two tables, one for combat and either victory or defeat, and one for social encounters. “Sapphire Banner is routed,” “Palomante infantry is routed,” and “Chardecum force is routed” are separate clocks that can tick up in the course of battle.

The flow of play is progress roll -> Combat Advancement Table -> Interaction Table -> repeat.

PC Forces

Sapphire Banner: Cavalry unit, 200 strong. 4-strike clock. Lady Sapphire is gravely wounded on the 3rd strike and killed on the 4th.

Palomante infantry: Elite heavy infantry unit, 400 strong. 6-strike clock. They lose their company standard on the 4th strike and the captain dies trying to recover it on the 6th.

Chardecum volunteers: Light infantry/musketeer unit (infiltrated with Tribunate warlocks), 400 strong. 4-strike clock. Strikes can’t be assigned to them until the Palomante infantry is at 2+ strikes. They summon devils on their 2nd strike and lose control of them on the 4th.

Potential PC Forces

Summoned devils: If devils are summoned, add +3d6 to all progress rolls, but all Charisma checks in interaction encounters have +5 DC.

Possible extra unit: The PCs could attempt to negotiate with Reynard Ironbane for an additional force of goblin-fey irregulars. Costly to acquire, but this group is 150 strong, and they rout on the third strike; no other bad stuff.

Defining Terms

What is a Command save? The Commanding PC averages the best and worst of their Con, Int, Wis, and Cha scores, then adds their proficiency bonus if it’s remotely plausible that they know anything about command. (Lanth, Warwick, and Persis definitely have this; open to persuasion from others.)

Istran battle standard (magic item)

  • 2 times in the battle, Gamble can roll a Command save when another character has failed a Command save.
  • Following any cavalry charge event, gain +1d10 progress.

Progress roll: 1d10 + active character’s best Command ability score bonus + any extras they gain from events or spell/feature use. Add the result to previous progress rolls.

Combat Advancement Table

Total Encounter
01-06 Musket volley; each character faces two attacks, +5 vs AC, 1d12+3 piercing damage on a hit. Command save, DC 10. On failure, choose one group to take a strike.
07-12 Cavalry clash on the left wing. PCs fight the Hound of Vix-ragna (blackguard) + 1 knight per PC or roll a Command save, DC 12. On a failure, choose one group to take a strike.
13-18 The dry grass on the hill catches fire from a musket misfire. Begin tracking Fire. Command save DC 11. On a failure, choose one group to take a strike. PCs can skip one interaction scene to attempt a challenge to extinguish the Fire.
19-24 Musket volley; each character faces two attacks, +5 vs AC, 1d12+3 piercing damage on a hit. PCs fight Tharost the Harvester (gladiator) + 1 archer per PC. Command save, DC 11. On failure, choose one group to take a strike.
25-30 Infantry engagement. If there is Fire, an Infantry force takes a strike on a failed DC 16 Command save, but roll double dice for the next progress check. Fire advances if active. PCs fight 2 mages + 1 berserker per PC; fire hazard in the field if fire is active. The field catches fire in this battle if fire isn’t already active.
31-36 Enemy ghouls are revealed from tall grass and shallow burial. PCs fight ghasts (2 + 1 per PC). Fire hazard in the battle if fire is active; fire advances if active. Negate future undead events with a Channel Divinity: Turn Undead and a DC 14 Wisdom (Religion) check.
37-42 Cavalry charge; each character faces one attack, +8 vs AC, 1d12+1d6+3 damage on a hit. PCs fight a war priest + 1 veteran per PC and roll a Command save, DC 13. On a failure, choose one group to take a strike.
43-48 The PC unit that has taken the most damage, or the Chardecum volunteers if they have taken any damage, takes shelter in a cluster of farmhouse and barns. They can’t be chosen for the next strike. Roll a DC 20 Command save; on a success, the sheltered group heals a strike.   Fire advances if present. If Fire is at 3, the farm buildings become threatened and the unit takes a strike instead.
49-54 Enemy priests call down holy fury. Each character faces one guiding bolt: +6 vs AC, 4d6 radiant damage on a hit. PCs fight Perikk Tiorbas (war priest) who has cast summon celestial spirit, + 1 priest per PC. The grass catches fire if Fire isn’t currently active.
55-60 Enemy undead are revealed in the farmhouses and barns. Fire advances if active. Roll a DC 14 Command save; on a failure, choose one group to take a strike. Negate future undead events with a Channel Divinity: Turn Undead and a DC 14 Wisdom (Religion) check.
61-66 Musket volley; each character faces two attacks, +5 vs AC. On a hit, take 1d12+3 piercing damage. Command save, DC 13; on failure, choose one group to take a strike.
67-72 Intense infantry engagement. If Fire is active, an Infantry force takes a strike on a failed DC 16 Command save, but roll double dice for the next progress check. Fire advances if active. If undead are active, fight a bodak and 1 ghast per 2 PCs, or roll a DC 15 Command save; choose one group to take a strike on a failure. Fire hazard is present if fire is active.
73-78 Cavalry attack against the baggage train. Command save, DC 15; on a failure, the Chardecum volunteers take a strike from loss of morale, and each PC chooses 500 sp in stuff to lose, if possible.
79-84 Undead are revealed or increased in number, as Chardecum’s casualties are animated by enemy spellcasters. Roll a Command save, DC 13; choose one group to take a strike on a failure, or two to take a strike if you fail by 5+. Negate future undead events with a Channel Divinity: Turn Undead and a DC 17 Wisdom (Religion) check.
85-90 An enemy bounty hunter tries to hunt and take down a PC commander. Lanrik of the Piercing Eye (assassin) + 2 scouts per PC. If the PCs win with no deaths, roll one Command save (DC 13); on a success, choose one group to remove a strike.
91-95 Showdown with enemy command. Champion (Brigade commander Taagna Goldscar), Celestial warlock (warlock of the fiend) Samishen the Glorious, and three knights. One Command save (DC 15) during battle; on a failure, choose one group to take two strikes.
96-100 Fire advances. If undead are present, roll one Command save (DC 14); on a failure, choose one group to take two strikes. Showdown with enemy command (if that hasn’t already happened). A roiling, chaotic melee against men and horses. Roll one Command save (DC 14); on a failure, choose one group to take two strikes.
101+ Enemy is driven from the field in disarray, with heavy casualties.   Command save, DC 15/20. Success on 15: seize part of the enemy baggage train. Success on 20: seize all of the enemy baggage train. Characters without command experience who attempted at least two Command saves gain half-proficiency to Command saves.

Interaction Table

Each interaction can happen only once unless otherwise noted. If a number is rolled a second time, each PC can spend HD to regain hit points.

d8 Result
1 The PCs come across a combat medic treating three injured Palomante soldiers behind a low stone wall. A healing spell from the PCs or a successful DC 15 Wisdom (Medicine) grants +2d4 progress; the medic can also clean and bandage 1d3 PCs’ wounds to heal 1d4+Con modifier hit points.
2 A group of 4 enemy knights and their squires have taken Sapphire Banner lancers hostage. DC 15 Cha (Intimidation), or pay 400 silver each, to rescue them and remove/ignore one strike against the Sapphire Banner.
3 The PCs find a good defensible position with cover to rally the troops. The next time you have a musket volley event, gain cover and advantage on your Command save, or use this position for your own massed volley fire, +2d6 to your next progress roll
4 You find soldiers gathering their courage for the next charge. Rally them with a speech: remove one strike, or gain +2d4 progress.
5 The PC veytikka sense freshly-created ghosts in the area. Help them on their way to gain a bless effect in your next combat or Command save, or ask them to learn the enemy’s plan. Roll twice for the next progress roll; keep the higher result but play whichever event you prefer.
6 Both sides of the battle withdraw separate to reorganize their forces. PCs gain the effect of a short rest. This event can happen up to three times.
7 Reroll this event if Fire is not up to at least 3. The fire advances and the ground opens wide. Both sides of the battle scatter away from the fire, while the leaders of either side can approach and attempt to negotiate with the fire elemental myrmidons for direct or indirect aid. This is a series of three Charisma (Performance or Persuasion) checks, against DC 14, 18, and 22. For each success, choose one of the following:
The fire won’t force Command saves on your forces for the rest of the battle,
In your next battle, each PCs’ weapons deal +1d4 fire damage on a hit,
(costs two successes) One veytikka present gains the ability to conjure a fire elemental myrmidon, Feriza, once ever,
(costs two successes) Receive a ring that can transport you and up to 7 companions to the City of Brass, to speak with the efreet nobles, or
Gain a group of 50 salamanders, who return to the Inner Plane of Fire after two strikes. They can receive strikes from fire without harm.
8 The PCs spot Mandarnek observing from some distance. They can talk with him to gain some strategic information (like details about the enemy command) or ask him to extinguish fire in the area (requires a successful DC 15 Cha – Persuasion check). He won’t get more directly involved unless he perceives a threat to the Society of the Wise or he is personally threatened.

How It Went

The story of the situation is that the PCs have led the city of Chardecum in revolt against the Prince of Tyrema, first throwing out the military governor that he installed, and now fighting back the force he sent to quell the revolt. The Prince’s army numbered around 2,000, but this is pure narrative and a matter of difficulty tuning, it’s not represented

First, the good news: the players had a great time, and they said so several times during and after the game (this is uncommonly effusive for them). One player went out of her way to note that this was the first time she’d really enjoyed a mass combat scenario in a tabletop game. We also got very close to the “proper” end of the battle at the precise end of my session’s time slot.

The session roster (alphabetical order):

  • Gamble, 11th-level Fey Wanderer ranger
  • Lanth, 10th-level Battle Master fighter
  • Persis Palomante, 8th-level Vengeance paladin (with the legendary greatsword Skyfire)
  • Santiago Hidalgo, 6th-level Glamour bard/1st-level variant Archfey warlock
  • Vasco Vega, 3rd-level Forge cleric/6th-level Diviner wizard
  • Warwick Palomante, 7th-level Champion fighter (with a blisteringly high AC)

In the course of a five-hour session with about a half-hour break in the middle, we got through three combats (blackguard + 6 knights; 8 ghasts; champion, warlock of the fiend, and 3 knights), 3 more combat advancements, and 6 interactions. There was also around an hour of explaining the format to the players and letting them make pre-battle plans, such as gathering more allies.

That led to the first big thing I failed to anticipate, but should have: the allies they called upon. Adding another couple of smallish units wasn’t a problem, though. They picked up a contingent of alchemists (who had an ash drake in tow as a secret weapon) and two domain sentinels (walking stone statues, which together could take three strikes and had no development states).

The PCs also reconnoitered the area and placed one significant trap, some light infantry in a concealed Leomund’s tiny hut, which got them +2d4 or so progress for one roll.

To establish the start of the battle, I had the player to my right roll 1d10: a 9, so the battle opened with a cavalry clash. Persis made it her mission in life to defeat the Hound of Vix-Ragna in personal combat on the field of battle… that’s Vengeance for you. The rest of the party fought the knights, starting with hypnotic pattern from Santiago – and three of them failed saves. Persis prevailed against the Hound – her rolls were great, and also Skyfire + paladin smiting did such deeds as the day would quake to look upon.

Each time they needed to make a progress roll, the person rolling progress roll and interaction table d8 passed one seat to the right. It wasn’t specifically about their character any more than any other progress roll, but it was still a good thing I think.

I think the first interaction roll was a 4, and since there hadn’t been any strikes yet, they took the bonus dice.

The first full progress roll was 1d10+2d4+a modifier, and those dice and the d10 all came up near their maximum values, so the PCs jumped past a ton of content in one roll, from 09 to 32. I thought about and realized that immediately jumping into another breakout fight would feel a bit off, so I went to an event they had skipped over that felt better at the moment: the first musket volley.

It went on like this; they didn’t roll an event that would start the grass-fire until after they’d rolled a 7 on the interaction, but in the fight against ghasts, Vasco did me the favor of giving his familiar the fire version of the dragon’s breath spell, and that did the job. The PCs succeeded a lot of Command rolls here with a combination of good dice luck and the Istran battle standard.

Which freed me up to use interaction 7 just a bit later. (They wound up rolling a bunch of 2s for interactions.) This interaction went really well – overall I think the interactions worked really well to break up the combat and lend a cinematic pacing (in a Henry V sense). The breakout fights had some Dynasty Warriors feel to them – partly for carving through tons of dudes, but also for just zooming in to personal scale.

I ran interaction 7 with Feriza, the fire elemental myrmidon, negotiating separately and simultaneously with both sides – but the PCs’ Persuasion rolls (Santiago wasn’t allowed to roll all of them) were way, way better than the NPCs’. Not a huge surprise – but anyway the PCs chose immunity to strikes from environmental fire and allowing one PC to summon Feriza someday, in exchange for promising to aid Feriza against an efreeti lord named the Flame in the Bronze, who they hate anyway. The enemy spent their one success on a unit of salamanders.

Oh, and when they got the ghast event, Vasco saved his one Channel Divinity for after the fight, so that he could try that Wisdom (Religion) roll to negate future undead events. I think he liked that unusual usage.

Between those last two outcomes, their roll of 71 did nothing and was fully negated, so that was interesting – and helpful for keeping us on timeline.

When they rolled an 88 for progress, I had the option of them fighting Lanrik, the bounty hunter, but there was just no way to make that fit into the session length. They were just three points short of the 91 I needed for the showdown, though. By this point they were in dire need of a short rest, so I let them make a Command save against a moderate DC (probably 15?), which was the only failed Command save they couldn’t reverse with the Istran battle standard. They took two strikes for that, but those were their first strikes in the whole battle, so it meant nothing in particular to them.

They agreed afterward that this tradeoff felt pretty good – they were stepping off the front line and it cost them some soldiers, but it made their victory against Taagna and Samishen much more attainable. Samishen was so close to getting away, too – but Vasco countered his plane shift.

So, the good:

  • The basic format looks very promising,
  • the players had a lot of fun, and
  • the interaction events were incredibly good at keeping the spotlight moving around the table. I can’t overstate how important I think the interaction events were to not just having a ton of “now you take damage” events consecutively.
  • I deeply appreciate that my players didn’t get hung up on “but can’t I just fireball all of them into the dirt?” I was prepared to give them some bonus progress dice for spending spell slots.

It helped that everyone brought a ton of energy and creativity to the table – you know, the thing that makes bad systems fine actually, and good systems amazing?

The bad:

  • The difficulty tuning needs more work if I want the enemy to feel like a threat. I expect to change a lot of combat events to “2 strikes, or 1 on a successful Command save.”
  • Because the units took so few strikes, I didn’t get to reveal the stories that come out in the later stages of those clocks. I think those would have been exciting – though they also had balance problems that I would need to address.
  • It’s not great at communicating the current status of NPC forces. I can see some ways to do that – probably putting a slider on the number of strikes from combat events/failed Command saves.
  • I kind of needed to wear them down more and bulk up the final fight more. This was probably the largest number of total character levels I’ve ever had at the table in this campaign.
  • Making the interaction table a simple d8 is asking for repeated rolls. Giving myself a series of coin-flip rolls might be better, except that it’d require writing even more events.
  • GM narration does a lot of heavy lifting here. That’s not a bad think per se, but it creates mental load during the session. You can look at the tables, though, and see how much I was trying to pre-load that work.

Future Development

I think players would like it a little more if they got to be a bit more directly attached to one of the units – but I need them to be able to detach from their units quickly so join in breakout combats. That would help in making more than just the person with the best Command save make all those rolls.

As I’ve suggested above, I need to increase Command save DCs and increase the number of strikes on a failure. For this first test use, I’m glad that I went too easy and the PCs got a win – that accomplishes proof-of-concept. I’m sure there will be other mass battles in future sessions and I’ll get to see how much harder I can push them.

Sorting out the best approaches to “okay, using this same army, how do I change things if the enemy is twice as tough?” takes some thought. There are a LOT of available sliders here.

Generalizing this to take less than several hours of prep time to write, or so that someone else could run it, are further big challenges. I can turn a lot of this into template content. I also need to generalize to other kinds of battles: storming/defending a fortified position, ship-to-ship, ship-to-land, bombardment, hidden or reserve forces, and fighting retreats.

I hope you’ve enjoyed these ideas, and I hope you’ll ask questions where I’ve been unclear. If you’re interested in supporting my writing, consider backing my Patreon!


Leave a comment

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

5 thoughts on “Session Postmortem: The Battle of Leonor’s Hill

  • Annabeth WG

    I love this format. I’ve tried five or six different methods of running mass combat in DnD over the years and I think my next attempt will definitely look a lot like this. It feels like just the right amount of tactical engagement without essentially grafting a war game on top of DnD.

  • Blue

    In regards to the Command DCs and also the state of the NPC forces – perhaps have a slider of relative strength. Each Strike movies it one towards the foe, and various results move it towards the player’s forces. It has a Command modifier on it, so if the PCs don’t have as much to work with relatively they have a penalty. It also makes it easy to show “overwhelming enemy forces” by starting on like a -4. You could also apply this to progress rolls if it makes sense.

    • Brandes Stoddard Post author

      That’s approximately where I see this headed, yeah: a table with relative strength levels that loosely accounts for troop quantity, quality, and fortification position with things like “-50% disadvantage” or “+100% advantage.” From that, you get your base progress die, base Command save DC, and maybe base number of strikes per failed Command save. Command DCs tend to rise slightly over the course of the battle, just to increase tension.

      I’d just as soon avoid recalculating your progress die and Command save base DC round by round, though. To my mind, that seems like the kind of nitpicking that expresses very little to the PCs. (I recognize some hypocrisy in saying this while having Command save DCs rise over the course of the battle. Bear with me here – I’m figuring it out as I write.)