Princes of the Apocalypse, Session 52: “Barbarians at the Gates, Part 7”

Wherein Our Heroes finally find a lost friend … and a banished enemy.

Princes of the ApocalypseThis is part of a series about my DMing Princes of the Apocalypse, a D&D 5e adventure by and copyright Wizards of the Coast.

Table of ContentsThe Party

There will be SPOILERS. If you are playing in a PotA game, please don’t read this. But if you are DMing a PotA game, or are a DM who wants to see what the ride was like … read on!


GM Recap

Session 52 (Day 41)
In … the Temple of the Black Earth

  1. Black Earth token
    Black Earth

    The party continued their exploration of the Temple of Black Earth.  The crevice led to a hidden trail midwall in a great cavern, ending up at an arrow slit in the rocky wall. Moony‘s use of the Claws of the Umber Hulk let the pass from there into Marlos Urnrayle‘s chambers. There they found luxurious treasure and two very realistic statues — one of whom they concluded was the petrified form of their old friend, Aldrik. Which was odd, because Aldrik had been taken at the Air Temple by a Water Elemental ….

  2. Carefully searching the chamber beyond as a giant crab (as they had decided there was a petrifying creature nearby, and giant crabs can use Blindsight), William was attacked by a shadow demon, who viciously struck at him, only to discover that a restored William, with lighting, and a Moonbeam, could do a hella radiant damage.
  3. Spells up and clock ticking, the party left Aldrik behind and rushed down the hall to the shrine that Moony had previously scouted out. Kicking in the door, they interrupted the Black Earth Priestess Erione doing something creepy and mystic that seemed to involve a lot of very fragile cultists and sacrificing a deep gnome named Rukh to a black pudding. A shortlived melee ensued, though Nala‘s armor was damaged by the black pudding’s acid.
  4. Rukh gave Nala some information about he’d come there and what lay below, including about the Fane of the Eye.
  5. The party ran to the “First ???” location on the map, a chamber of great square pillars. Another of the great stone warriors was there, watching to the northwest, but they attacked and quickly dispatched it.
  6. It was time for a short rest, so they decided to take a quick peek at the area that might be the staircase that Rukh had spoken of leading to the Fane of the EyeMoony found it a great cavern with a pillar and spiralling staircase leading downwards into the dark. Which is the point when Xharva Deem came up around the final turn of the stairs. “YOU!”

Player Recap

Where we once again find Aldrik in a loin cloth!

They leave the room and travel down the rough hall to the North. It ends in a blank wall that with some chicken bones and other human trash. Moony locates a hidden door and concealed latch. Looks like it hasn’t been used frequently. Traversing along a path around a large crevasse leads Moony to an arrow slot. When the group joins him […]

A beautiful appointed room. Lushes tapestry … There is a status of a dismayed elf (holding a cloak) and an angry dwarf in a loin cloth. It’s Aldrick. Don’t […]

William turns into a giant crab and scuttles into the room to the south of the bedroom. In the dark he can sense large immovable object and then senses a presence coming from above. William tries to find. The creature says in Williams head “You don’t belong here” and slashes him. William quickly changes to human form and drops a moonbeam on to the creature. It screams loudly and flees East as the others enter the room. 

Pressing on rapidly while Faith’s fairies are active. The cavern was once beautiful, but the natural stalactite’s, stalagmites, and flows have been destroyed. There is a small cleared path through the cave. Around the room are more petrified statues

Trying to maximize the fairy time, the group quickly goes to the door to the South. Next is a large room with a tall domed ceiling. The tiles have been pulled up in the center of the room and a pit is being dug. There is a large dark obelisk in the pit with bones littered around it. There are several earth cultists, Erione – female earth priestess in stone armor and Rukh – Gnome shackled to a smaller stone obelisk. The cultists and Erione go down quickly, but not before Erione hits Faith and Moony with a shatter spell. Nala approaches Rukh asking him in Gnomish, “Friend or Foe?” Rukh is too terrified of black ooze coming up around large obelisk. Nala swings at the chains with her sword and shatters them. She then tries to shove him out of the way of the black pudding. The Black Pudding gets an attack on Nala just before she takes it out. 

The Gnome tells us that he was captured below. His people use to have a colony there and he was an explorer looking for them when he got caught and brought up to serve as bait for the black pudding. He lets Nala know that Marlos is a Gorgon.

Continue North and enter room devoid of carvings with a large stone statue in the middle. It is another of the Giant Dwarf animated statues. Faith’s fairies damage and slow the status. Other move into attack range.

Party decides to check out one other hallway before taking a short rest. The corridor leads to a large cavern area with a grand staircase down.  A voice in Moony’s head says “YOU” A figure that looks amazingly like Xharva Deem comes charging up the stairs.

Game Notes

Sneak, sneak, sneak

The big crevasse around the northeast of this map means there are a lot of ways to get into Marlos’ hide-out other than the main doors. Given the map marking of “Death,” it made sense to figure those ways out.

The party’s use of the hidden path was great out-of-the-box thinking, especially as they sussed out what its use was (a back door for a guy who can walk through walls).

It also gave me a great opportunity to use Roll20’s new one-way vision dynamic lighting barriers, perfect for multiple layers of “this is above and you can’t see it, but it can see you.” I retrofitted that tech onto the map, rather than have a lot of removable light barriers.

Claws of the Umber Hulk
Claws of the Umber Hulk (though I pictured them more metallic and forged)

It was also a completely unanticipated use of the Claws of the Umber Hulk. I wish Moony hadn’t already had Inspiration, because I would have given him one for it.

That said, little did I know how tired I would get of that particular magic item.

Marlos’ hang-out

Marlos has a sumptuous private chamber, which bolstered their treasure supply. It also had (I decided) two statues — one the petrified Aldrik (see below), the other a petrified elvish warrior. On the assumption that he wouldn’t end up revivified, I didn’t bother to work up a backstory on him — at a guess, an adventurer whose near success led Marlos to giving him a place of honor (or to contemptuously use him as a coat rack).

terrified statues in the dark
Some (poor) AI renditions of terrified statues

The main chamber outside of it was a bit different. There are a dozen statues placed around the map — very cool, but not a word of description about them, other than that they all look terrified (having been petrified by Marlos). I numbered them all and crafted up some brief descriptions  across races, genders, and classes (e.g., “Male human, a bit fat, holding a hammer, squinting as if to see something”) — it’s the sort of thing a DM should be able to improv, but why improv it when you have prep time for it?

Also, the way the place is described, the floor is covered with rock, stalagmites, flowstone, etc. So … there should be paths to allow the statues to be enjoyed (or just to get between the doors). I had to add those on the map.

The main doors into the this area from the south I covered with stone masks — actually, stone faces of still more of his victims. I thought it was a nicely gruesome touch.

Aldrik!

Aldrik
Aldrik

They found Aldrik! Huzzah! And he’s back to being in a loin cloth. And, of course, made of stone.

Now they need to figure out what to do with him. For the record, there are now three relatively clear options (since I put a kibosh on their putting a 1400-pound Aldrik statue into the Bag of Holding):

  1. Cut a deal with Xharva Deem, who has also shown up. She can do a Wish, if persuaded (and bribed with the Can of Sand, which I have finally given a name).
  2. basilisk fountain
    Oh, I made an AI image of the basilisk fountain I made up.

    Purify (with the Ewer they picked up earlier) the water of the Basilisk Fountain I had placed at the Duergars’ hidey-hole. Ironically, the party thought that the Basilisk Fountain is evil, and the Gargoyle Fountain might be able to do the job.

  3. Wait until next level-up for Faith to get Greater Restoration, and use that.

My son, who runs Aldrik, sat silently through the game that night, since that aspect didn’t get resolved. Which I felt kind of bad about, but I still thought it was a great re-entrance.

Speaking of which, I (minorly) blew it. I’ve been establishing that each time they fulfill the level-up requirements for the zone they are in, they get a brief sense of Being Observed (as they attract the momentary attention of the Prince/Godling involved). That should have happened when they took down Erione and the Black Pudding, but I completely spaced on it (not helped by the party wanting to rush off to the next encounter) …

What’s the rush?

scooby doo hallway
Rush, rush, rush …

Yes, my current pet peeve is that Faith’s Spirit Guardians (which Moony noticed look a lot more like Aerisi than they used to) lasts for 10 minutes (with Concentration), which has suddenly created a huge motivation for the whole party to run from one encounter to the next to get maximum utility out of them. Which, as in this case, kind of ruins the moment. Rukh had a lot of info to dump (and was an interesting character in and of himself), and I ended up skipping some and rushing through other bits, just because Faith was dragging everyone onward to the next battle.

I decided I was going to have to something about that. I understood the incentive, but it felt artificial and encouraged bad metagaming behavior (i.e., game mechanics were driving behavior that was not good for the game). Maybe being under that kind of pressure should have an impact on the rogue’s scouting — disadvantage on Perception, trap clearing, disadvantage on the party’s Stealth, etc. …

Xharva Deem

Xharva Deem
Xharva Deem

Anyway, Xharva Deem is back! One of the players said it was the surprise of the evening, which I felt somewhat gratified about. 

Running into her again was, by DM fiat, inevitable — they would have encountered her trudging her way back to them whatever exit they went to first. It’s hard to permanently Banish someone who can Planar Travel, even if it’s not that accurate (“Take me back to my Forge” ended up with her being somewhere in the Black Geode and having to make her way through the Fane back to here).

stone warrior
An AI-generated Stone Warrior. I eventually decided I liked the one I had come up with last episode.

Let’s see if she can convince the party to not immediately attack her. At least I was able to reasonably suggest that the party’s internal debate after killing the Stone Warrior (which, honestly, wouldn’t have attacked them if they hadn’t attacked it first) about where to Short Rest was long enough for the Spirit Guardians to have faded.

Hmm. For some reason, I didn’t do (or save) an exploration map for this session. Ah, well.


<< Session 51 | Session 53 >>

Princes of the Apocalypse, Session 40: “Rising Tides, Part 4: Over Your Head”

Wherein our heroes fight some weird creatures — and end up running away from a battle they could not win.

Princes of the ApocalypseThis is part of a series about my DMing Princes of the Apocalypse, a D&D 5e adventure by and copyright Wizards of the Coast.

Table of ContentsThe Party

There will be SPOILERS. If you are playing in a PotA game, please don’t read this. But if you are DMing a PotA game, or are a DM who wants to see what the ride was like … read on!


GM Recap

Session 40 (Day 36)
In the Temple of the Crushing Wave …

  1. Crushing Wave tokenThe party interrogated Khalt. He confirmed that Gar Shatterkeel was not present, but would return. They threatened him with torturous death (!), until he agreed to take them the temple.
  2. Instead, he took them to a room with a gargoyle fountain … with a door heading north to the domain of the Black Earth … and a pair of Nothics that sucked various memories from Moony, before fleeing, one to the north and one to the south. The latter was dispatched. 
  3. Khalt managed to teleport away from Ko’s tether, and away from Nala and Faith, diving into the canal. Faith pursued and, against all odds, took him down by bowshot before he could escape.
  4. The party headed toward the bridge north to the “High Temple” — but entering the marketplace they found the bodies there had been ceremonially arranged, and a pair of Reavers were there, one of whom rang the gong. Though the Reavers were quickly dispatched, the Dragon Turtle, Bronzefume, rising from the lake, was not so easily dealt with. William tried to talk them down, but Bronzefume ended up attacking, nearly killing Faith, Nala, and William, and slaying Ko.
  5. Though they responded with some attacks, it was quickly clear that the Dragon Turtle was a serious challenge. Faith threw down a sleet storm which both slowed Bronzefume and obscured the line of sight between it and them. The party fled, regrouped, and headed back to the Temple of Howling Hatred, fearful of any wide corridor or water channel.
  6. Hunkering down in one of the Air Cult dormitory rooms in the southwest, they resolved to wait out several hours, and then take a Long Rest, before dealing with what to do next:
    • Head to the “Forges” (presumed to be the Fire cult area)
    • Head back to the Water cult area, to sneak past Bronzefume to the “High Temple” to deal with Gar Shatterkeel.
    • Head back to the Water cult area, to sneak around to the “Gates” (the Earth cult area).

Player Recap

Our Clocks Are Steam-Cleaned

Nala questions the captive Khalt. There are threats of fire and laughter as he names off other lead cultists who will avenge him. They are all dead. Shatterkeel is away bargaining with their goddess Olhydra. Eventually the intimidation plays out and Khalt says that Shatterkeel if below in the maelstrom communing with Olhydra. He doesn’t have much other useful information, so they ask him to lead them to the entrance to the down-below. 

Moony feels like something is going on in his head. He recalls being in Gemvox’ parlor hearing about the mission that he was sending Moony on. There is a Nothic in the shadows beside him. He has flashes of memories from his home village. Moony also sees a second Nothic to his right. William only sees Moony standing there as another memory flashes — a vision of Aerisi falling to the ground and her wings being stripped away before she disappears.

As the surprise ends, the rest of the group moves into the room. They gang up on the first Nothic (one-eyed wonder-worm). When it is on its last legs it flees the room, entering a corridor to the north descending into darkness. There is an Black Earth cult symbol on the wall. 

Ko tries to pull Khalt into the room. The rope breaks and Khalt appears down the hall. Faith and Nala pursue Khalt and a second Nothic appears. Moony takes a shot at Khalt with aid from Ko. Khalt teleports away and dives into the canal. Faith chases after Khalt but doesn’t see him. Nala and Moony finish off the second Nothic. Faith casts a light spell on a pebble and throws it 60 feet down the canal. She just sees Khalt 30 feet up stream from the bridge. She takes an Inspired shot and manages to do enough damage against Khalt to kill him. Faith returns to the group with a big grin. The courtyard of the Gargoyle Fountain is a mess. The walls are crumbling and there are bones and Nothic waste all around. The group decides to take a Short Rest before heading to the High Temple. 

In the large room that leads to the High Temple, there are a couple of Reavers preparing the bodies of the dead. A battle ensues and they are taken out, but not before they ring the gong. The water ripples and parts as a gigantic Dragon Turtle rises up from the lake. Everyone holds their actions while William tries to reason with the creature. He assumes that she is a captive like the Djinn in the Air Temple. Alas, she is a young and eager convert to the cult of the Crushing Wave. With a sad eye she exhales a huge cone of super heated steam. It seriously damages most of the party and takes out Ko. When it becomes clear that the party is out-classed, Faith casts Sleet Storm to hide their retreat and slow the dragon. 

After a mad dash through the halls of the water temple and into the air temple, the group holes up in one of the rooms in the air temple. They spend the rest of the day taking stock of the situation and planning for the assault on the temple. Nothing disturbs them that night except their dreams.

Game Notes

Tick-tock

So the Water Temple took longer than expected. There are ways I could have short-circuited that here — neither the Nothics nor Bronzefume were essential. But both were fun and different,  and, honestly, I wasn’t working on a deadline here. If the players were enjoying themselves (and I was, too), then what’s the harm.

Which comparing the overall length of this campaign, vs. other reports of PotA play, is clearly the case. We took longer. But (I sure hope) we had fun.

“There Is A Hole In Your Mind”

The Nothics were just plain creepy. 

Nothic
Nothic

Everything the players had encountered to this point was (a) evil people, (b) elemental forces, or (c) standard monsters.

Aberrations? Things that do necrotic damage? Things that suck your memories out?

Creepy.

Though, to my mind, also kind of pathetic. They were just sort of hiding out in their corner there, maybe picking off the occasional cultist, certainly stealing some memories, but for the most part willing to live and let live.

The players didn’t quite see it that way.

I did have fun calling up memories for Moony to remember and the Nothics to abscond with. 

The Dragon Turtle

The party knew there was a dragon around — the Dragonbone Sword told them. And I’m sure they were expecting something that would give them a challenge.

Dragon Turtle
Bronzefume wasn’t quite this big. Quite. Yet.

They were not ready for Bronzefume the Dragon Turtle.

To be fair, Bronzefume was a case of everything going completely wrong for the party. By coming in from the east side of the marketplace, and without any particular stealth, the party alerted the pair of Reavers random-encountered there (the last two in the complex, in fact, who had been arranging the bodies of their dead comrades on the tables for some ceremonial purpose). And the one down on the west side, near the gong, rolled top score for initiative. And was far enough away that nobody could do anything about it.

And then, even though the party quickly dispatched the Reavers so that they weren’t fighting when Bronzefume showed up two rounds later, William quite rationally chose the “Hey, we’re not with them, we’re on your side” tactic that was perfect for Ahtayir the Djinn in the Air Temple … but very not so much for Bronzefume the Loyal Young Cultist in the Water Temple.

Dragon Turtle anime
Dragon Turtle (source)

And even though the party had kind of spread out in the market, that didn’t help against the the sixty-foot cone from the Dragon Turtle; nor did the Dodge that everyone was using (the Steam Breath is a CONstitution save, not like Red Dragon’s Fire Breath). The damage roll was just above average, and nearly killed three players.

On the other hand, the party did quickly react to GTFO, and Faith’s Sleet Storm kept Bronzefume from targeting them further (and slowed it down substantially, given its land speed is so low already). It was a second top moment for the Cleric that night.

The Bronzefume encounter may have been the first time the party actually realized they were not going to be able to win a battle. It would be interesting to see how that affected their future actions.

The Stubbornness of the Stubborn Player

The top moment for the Cleric that night was when Khalt, the One-Eyed Shiver they had taken prisoner, chose the Nothic battle as a chance to escape. Misty Step is a wicked spell — verbal-only and a Bonus Action. So he could use it and Dash. Khalt, manacled, also got some great Athletics rolls while in the canal, swimming away.

Bullseye
Inspiration is your friend.

Faith wouldn’t let go. She couldn’t see him in the shadows of the canal, so she cast light on a rock and threw it in that direction, barely illuminating Khalt, who was just about to get out of the water and make good his escape to the temple. She pulled out her bow, which I told her because of the dim light and distance would be at Disadvantage — so she burned her Inspiration … hit … and then rolled a 2 on the damage (groans) … which happened to be how many HP he had left. And another corpse floats down the canal …

I gave her an Inspiration back. It was remarkably played and my expectations about how it would end were thwarted by the player/character’s persistence.

What next?

The players were split at the end — some wanted to finish clearing the Water Temple (aside from the Dragon Turtle in the lake, of course), thinking they need to get to the “High Temple” therein to advance (my preference). Others wanted to progress to the Black Earth quarter. Some were daunted by how the throne room map showed damage and depressing color commentary in that zone, and want instead to go to the Forges, the Eternal Flame quarter (which would be a bit of a level mess, as it’s designed for level 9).

On the one hand, it’s always cool when the players have different ideas about where to go next. It’s a sign I’m not railroading them (too much). On the other hand, it did mean additional prep on my part in case they did go hallooing off in an unexpected direction.

temple of the crushing wave (post-5)
What the party had explored by the end of this session.

Leveling was the other thing I needed to consider here. As noted before, the milestone of defeating the Temple of the Crushing Wave was level-up from 7 to 8. But had they defeated it? With Gar fled and Thuluna and Morbeoth both slain, theoretically, yes — the cult here would not recover (unless Gar succeeded in his quesrt). On the other hand, with the “High Temple” untaken, I’d been reluctant to award the win.

The fact was, unless they went messing around in the Starry Lake, by the time they got back to the Marketplace in 16 hours (it was still around Noon, but they were planning on camping out and Long Resting in their little hidey-hole) Bronzefume would be back at the bottom, watching his (substantial) treasure. They should go back and finish things up. But if they didn’t, wouild I count that as a milestone missed and no level-up? How far would they continue at that handicap?

Bah. If they decided to skip stuff, I’d give them the reward — they had effectively earned it. But not until they made that decision and acted on it — if I could get them to the “High Temple,” that would add some good story moments.

Some Roll20 Moments

As previously noted, I was running this game within the Roll20 VTT which, for the most part, was performing like a champ (and making it much easier for us all to gather together on Friday nights.

Dynamic Lighting in Roll20 is cool. The Marketplace, in particular, was nicely illumined … and when Bronzefume appeared at the far end, just his edge was visible in the dim light (and even that went away when William politely got rid of his Bonfire). Everything was perfectly visible to me as the DM, but it looked nicely creepy over on my wife’s computer screen.

I asked the players to take care of their own token markers this game, and they actually did a pretty good job of it. I further updated my Status-Tweak macro to include Helping and Dodging, both of which were useful.

The only real Roll20 problem, in fact, was that, because the scaling on the provided Roll20 PotA maps was at 50%, the status markers were oversized, obscuring much of the tokens. Mutter-mutter WotC.

I’d learned the technique at this point, for time and ease’s sake, to mass-transporting people along (cluster them together, select their tokens, move them in unison through the map, stopping at key junctions so that they players can see) when going through already-known terrain. It’s just much more efficient than asking people to move their tokens along when it doesn’t matter, and which inevitably leads to someone who is distracted or looking something up finding themselves left behind.

The problem is that it also leads to a predictable outcome. When they were getting back to the Marketplace, I set them down at the Bridge of Victory and asked which way they wanted to approach — through the Court of the Merfolk from the south, through the Bugbear Quarters, or through the ruined area to the east. (Their choice of the latter, “because bad things always happen when we go through the Court of the Merfolk,” turned out to be a tactical error.)

But later I heard the comment, “We should have known something was up, because that’s when Dave puts us down and asks us what we’re doing.” D’oh!


<< Session 38 | Session 40 >>

Roll20 – Area of Effect templates

A home-made game aid for Roll20 that makes life (for me, at least) a lot easier.

For my Princes of the Apocalypse game (which we ran on Roll20 with a standard 5-foot grid), I built some Roll20 AoE templates for spells, to make it easier to see and use the AoE and to provide a longer lasting way to show a still-active area spell.

So why is this needed?

There are ways to show the area of a spell. At a minimum, you can draw something on the screen — but that gets messy and not always easily movable. It’s also hard to draw some shapes, like cones.

Also, even if you draw something with the circle tool, you have two problems — precisely knowing the center point to anchor it on, and, more importantly, clarity on what squares are affected by the spell or not. Yes, you can interpolate (“I think that’s less than half the square”), but that’s just argument fodder.

Roll20 and various adjuncts to it provide area tools for AoEs (Roll20’s native tools have improved dramatically of late), but they still have a couple of problems. First, again, they are actual geometric figures (e.g., circles), so interpolation is still needed. Second, they are non-persistent — you can set them to Linger, but a player can only have one up at a time (I’m not sure if two players can have theirs up simultaneously); you can maybe eke by for that initial Fireball, but if you have a Spike Growth that stays up for a long time, you’re back to drawing a circle on the map.

What I wanted was a way that players could express a proper spell area (cones, squares, circles, even rectangles) in full squares, that they could move as needed for placement, and that would let me (as the DM) resolve the effects on those within the area, whatever the shape, and that could be left on the map for non-instant duration spells.

The answer: AoE templates.

Now coming to a marketplace near you

You can buy spell templates in the Roll20 marketplace. In fact, I did.

Unfortunately, the ones I bought turned out to be one or more of:

  1. Obtrusive (covering up too much of the underlying terrain).
  2. Ugly (a judgment call on my part, to be sure)
  3. Wrong (there are different ways of calculating a 15-foot or 20-foot radius circle on a grid, partly based on whether you are centering on a square middle or on a square corner. Who knew?) (And D&D 5e renders cones differently from other editions or systems.

I wanted something that would be:

  1. Largely transparent — clear enough to be visible, but not blocking the map people were on.
  2. Reasonably attractive
  3. Correct, based on my reading of how (especially) cones and circles/spheres work, including anchoring on a grid vertex (corner), not (except in rare, specified occurrences) on the centers of grid squares.

So, after a couple of failed tries, I decided to roll my own.

Rolling my own

I used a drawing program I have to basically build up a sample AoE as a drawing, trimmed to the edges, with transparency on anything outside of the borders. There would be a grid within the AoE, with solid borders along the grid, and the squares inside tinted but mostly transparent, with a slightly thicker border around the edges to make its boundary clear. I sized it to fit a 70 pixel cell grid.

For a given shape (a 20-foot radius circle, for example), I usually started with something gray. I could then use the color select / color dump functions to remake it into different colors based on the type of spell — orange for a Fireball, green for a Spike Growth, etc.

Once I had a drawing how I wanted it, I uploaded it to my Art Library in Roll20. Then I created an NPC character named, for example, “Fireball (20r)”. I assigned the drawing to it as its image and as its token.

I dragged out a token, sized it to the grid properly, made it into a drawing, and then reassigned that as the token. Lastly, I assigned that character to be seen and controlled by the mage who could throw fireballs.

AoE 20ft radius orange
20-foot radius orange circle

Now when that mage wants to throw a fireball, they can see in an “AoE” folder in their Journal “Fireball (20r)”.  They can then drag that out onto the map, move it to where they want their fireball to off, and say, “Hey, DM, your orcs are on fire.”  I can easily see the orcs in question, push the fireball token to the “bottom” of the token layer (something which Roll20 does not allow players to do, for some reason) so that I can click on each of those orcs, and start rolling saves …

And, once the excitement is over, I or the mage can easily delete the AoE.  Or, if it were a more persistent spell, leave it there for people to see.

Embellishments and Edge Cases

Moonbeam (5' radius) AoE token
Moonbeam (5 foot radius) AoE token

For some spells, I felt the need to decorate. So, for example, my Moonbeam template has a little Crescent moon in it. And, yes, I did it as a circle, rather than filling up the squares, largely because it’s a small template, and there’s no question which four squares are encompassed by it.

Similarly, for the Dust Devil’s radius of effect, I included a little Dust Devil icon in the center.

AoE 10ft radius Dust Devil
Dust Devil (10ft radius) AoE token

The biggest hassle are cones, both because of 5e’s rules, and because the vary in shape depending on the direction they are cast. Which left me, for example, with these two templates for a 15 foot cone.

Diagonal 30-foot cone
Diagonal 30-foot cone
Orthogonal 30-foot cone
Orthogonal 30-foot cone

Yes, this is all about the confusion of trying to fit a cone cross-section onto a square grid.

Both of these can be rotated, by the player or DM, in increments of 90 degrees and still line up

The orthogonal one includes a bunch of question marks because of 5e’s cone rules. The basic rule there is that the cone is as wide at a given point as it is long. That means at ten feet away, it’s ten feet wide, etc. But you have to then ask “is that ten feet leaning to the left or to the right?” because, for symmetry, at ten feet away orthogonally, it’s actually a potential range across fifteen feet. So for the diagonals, the player has to say “This cone includes the questionable squares on the left, not on the right” or vice-versa. The alternative is to have two orthogonal templates, and that would be kinda crazy.

The diagonal one doesn’t suffer from that, though it does dredge up the concerns about how diagonals are counted distance-wise on a grid in D&D. In 5e, the basic rule is that a diagonal is as long as an orthogonal — vertical or horizontal — distance, which is nonsense, but quite easy to work with, and the rule we use at my table. Other folk use the older 3.x rule (given as an option in the DMG) that the first diagonal is five feet, the second is ten feet, then five, then ten; under that rule, my diagonal template would need to be changed.

Lastly, cones don’t need to be shot as a straight orthogonal or diagonal — they can be further canted. Fine, whatevs. Since I don’t want to force the players to pick from dozens of templates, they can just rotate one of these partially and we’ll interpolate. The “it’s as wide as it is long” rule makes that a bit easier.

In conclusion

Anyway, this works for my virtual table, and it’s pretty easily extensible as people level up and get new AoE spells of different shades and shapes.

I’ve made a bunch of the ones I crafted early days available here, for you to copy, recolor, and have fun with. Some of them are a bit rough, but that’s what you get for free, and, honestly, the roughness is very rarely visible one the Roll20 desktop.

D&D 5e and Roll20 Macros

Macros make player and GM lives easier

Roll20 VTTI want to set down the macros I’ve end up using over the past few years of playing D&D 5e on the Roll20 VTT.

(Yes, I owe a bigger article about Roll20 and its plusses and minuses. One day.)

Roll20 has a moderately rich macro language, and an mod/API setup sitting behind that for further extensions to what macros can do.

I have written very few of these; most I inherited (and then tweaked and refined and customized) from the guy who was DMing the game before me, or else found out on the Roll20 forums, or sub-Reddits, etc. I apologize to the original authors for losing their names.

In Bar Macros

These are macros that I indicate should be in the macro bar at the bottom of the page.

The PC macros have player character names in them. The full names need to match the names on their Character Sheet in the Journal for the macro language to pick up the values in their character sheet.

PC-Health

This creates a quick list in the chat for the GM of current and max HP for each character. Sometimes that’s more useful than looking at health bars.

/w gm &{template:default} {{name=Party Health}} {{Theren=@{Theren Silverkin|hp} (@{Theren Silverkin|hp|max})}} {{Nala=@{Kimbatuul Nala|hp} (@{Kimbatuul Nala|hp|max}) }} {{William=@{William Steadman|hp} (@{William Steadman|hp|max})}} {{Faith=@{Faith d'Deneir|hp} (@{Faith d'Deneir|hp|max})}} {{Moony=@{(Moony) Rising Moon Cozy Cave|hp} (@{(Moony) Rising Moon Cozy Cave|hp|max})}}

PC-Percept

This gives to the GM in Chat the Passive Perception and then an Active Perception roll for each character in the party. I find it works faster (and is often more useful) to roll this for everyone at once than select a token and do it for an individual character, even if there’s just once character I’m interested in.

I use this same macro for Insight (insight_bonus), Investigation (investigation_bonus), and Stealth (stealth_bonus).

/w gm &{template:default} {{name=Party Passive/Active Perception}} {{Theren=[[10+@{Theren Silverkin|perception_bonus}]] / [[1d20+@{Theren Silverkin|Perception_Bonus}]] }} {{Nala=[[10+@{Kimbatuul Nala|perception_bonus}]] / [[1d20+@{Kimbatuul Nala|Perception_Bonus}]] }} {{William=[[10+@{William Steadman|perception_bonus}]] / [[1d20+@{William Steadman|Perception_Bonus}]] }} {{Faith=[[10+@{Faith d'Deneir|perception_bonus}]] / [[1d20+@{Faith d'Deneir|Perception_Bonus}]] }} {{Moony=[[10+@{(Moony) Rising Moon Cozy Cave|perception_bonus}]] / [[1d20+@{(Moony) Rising Moon Cozy Cave|Perception_Bonus}]] }}

The Talking Weapon

We had an intelligent weapon in our Princes of the Apocalypse campaign. Rather than fumbling with the Chat each time I wanted to say something from Windvane (the weapon) to Faith (the person carrying Windvane), I wrote this macro, which was a lot faster to use. For recurring NPC→PC chat partners, this can be easily tailored for use.

/w Faith &{template:default} {{name= A soft whisper in your mind ... }} {{ ?{What message from Windvane?} }}

Token Actions

These macros are IDed in the macro as being Token Actions, i.e., they are only valid (and show up for use) after you select a token you control (the GM controls all tokens, the players generally only control their own).

 Initiative

&{template:simple} {{rname=INITIATIVE}} {{mod=[[@{selected|initiative_bonus}]]}} {{r1=[[1d20+@{selected|initiative_bonus}&{tracker}]]}} {{normal=[[1]]}} {{charname=@{selected|token_name}}}

This rolls Initiative for a player character, putting it up both in the Chat and into the Initiative Tracker.

Inspiration

This giver/taker of Inspiration is based on the work of Keith Curtis (see here and here), and uses the Dealer API in Roll20.

You’ll need to create an infinite 1-card deck with whatever symbol you want to use (I use a golden D20), and when you give Inspiration to a token, it “deals” that symbol atop their player ID at the bottom of the Roll20 screen and makes a little announcement in chat; when you take Inspiration, it takes it away. This makes Inspiration very visible to the GM and to the Players.

(Note that it does allow for multiple Inspiration to be given to a character, which is not how the rules operate, but that can be handled manually.)

Inspiration-Give

!deal --give --Inspiration
&{template:npcaction} {{rname=Congratulations!}} {{description=**@{selected|character_name}** has just been granted **Inspiration!**
[x](https://s3.amazonaws.com/files.d20.io/images/210322160/r0ri9AKLAaLbYyle0nhPCw/max.png)}}

The image URL is what that card image translated to, so that it shows up in the chat entry.

Inspiration-Use

!deal --take --Inspiration
&{template:npcaction} {{rname=Inspiration!}} {{description=**@{selected|character_name}** has just spent their **Inspiration!** }}

Light

This uses the invaluable TokenMod API by The Aaron. It applies various lighting and vision conditions to a character. It could use some tweaking, but it’s useful in its current state.

!token-mod {{
--set ?{Lighting/Vision Options
|Normal Vision, 
  has_bright_light_vision#yes
  has_limit_field_of_vision#yes 
  limit_field_of_vision_total#360 
  limit_field_of_night_vision_total#360
  statusmarkers#-Blinded
|add Darkvision (60) red, 
  night_vision#yes
  limit_field_of_night_vision_total#360
  night_vision_distance#60
  night_vision_tint##ff0000
  night_vision_effect#nocturnal
|add Darkvision (60) blue, 
  night_vision#yes
  limit_field_of_night_vision_total#360
  night_vision_distance#60
  night_vision_effect#nocturnal
night_vision_tint##0000ff
|add Darkvision (60) purple, 
  night_vision#yes
  limit_field_of_night_vision_total#360
  night_vision_distance#60
  night_vision_effect#nocturnal
  night_vision_tint##9900ff
|Blinded, 
  statusmarkers#Blinded
  has_bright_light_vision#yes
  has_limit_field_of_vision#yes 
  limit_field_of_vision_total#0
  limit_field_of_night_vision_total#0
|-,
|Source None, 
  emits_bright_light#off
  emits_low_light#off 
  tint_color#transparent 
  statusmarkers#-yellow
|Source Candle (br5/dim10),
  emits_bright_light#on
  emits_low_light#on
  bright_light_distance#5
  low_light_distance#5 
  tint_color##f1c232
  statusmarkers#yellow
|Source Low Flame (br10/dim10),
  emits_bright_light#on
  emits_low_light#on
  bright_light_distance#10
  low_light_distance#10 
  tint_color##f1c232
  statusmarkers#orange
|Source Torch (br20/dim20),
  emits_bright_light#on
  emits_low_light#on
  bright_light_distance#20
  low_light_distance#20 
  tint_color##f1c232
  statusmarkers#yellow
|Source Light Spell (br20/dim20),
  emits_bright_light#on
  emits_low_light#on
  bright_light_distance#20
  low_light_distance#20
  tint_color#transparent
  statusmarkers#yellow
|Source Daylight Spell (br60/dim60),
  emits_bright_light#on
  emits_low_light#on
  bright_light_distance#60
  low_light_distance#60
  tint_color#transparent
  statusmarkers#yellow
|Source Holy Weapon (br30/dim30),
  emits_bright_light#on
  emits_low_light#on
  bright_light_distance#30
  low_light_distance#30
  tint_color#transparent
  statusmarkers#yellow
|Source Hooded Lantern (br30/dim30),
  has_bright_light_vision#on
  emits_bright_light#on
  emits_low_light#on
  bright_light_distance#30
  low_light_distance#30
  tint_color##f1c232
  statusmarkers#yellow
}
}}

NPC-Init

%{selected|npc_init}

This let me easily roll Initiative for NPCs without going into their character sheets. I also have a tool that lets me execute a macro against multiple selected tokens, so that’s handy, too.

(Technically, the rules say that all creatures of a given type roll a single Init, but that’s an artifact of pencil-and-paper gaming; we can do better on a VTT and let each goblin have their own go.)

NPC-Save

It’s easier to have all the saves rolled for the highlighted NPC, even if it takes marginally longer to proc, than to select a save type. Everything is rolled twice in case there’s (Dis)Advantage. If there is not, I just take the 1st roll.

/w gm &{template:default} {{name=Saving Throws with Advantage}} {{NPC= @{selected|token_name}}} {{Str Save= [[ 1d20 + [[@{selected|npc_str_save}]] ]] or [[ 1d20 + [[@{selected|npc_str_save}]] ]] }} {{Dex Save= [[ 1d20 + [[@{selected|npc_dex_save}]] ]] or [[ 1d20 + [[@{selected|npc_dex_save}]] ]] }} {{Con Save= [[ 1d20 + [[@{selected|npc_con_save}]] ]] or [[ 1d20 + [[@{selected|npc_con_save}]] ]] }} {{Int Save= [[ 1d20 + [[@{selected|npc_int_save}]] ]] or [[ 1d20 + [[@{selected|npc_int_save}]] ]] }} {{Wis Save= [[ 1d20 + [[@{selected|npc_wis_save}]] ]] or [[ 1d20 + [[@{selected|npc_wis_save}]] ]] }} {{Cha Save= [[ 1d20 + [[@{selected|npc_cha_save}]] ]] or [[ 1d20 + [[@{selected|npc_cha_save}]] ]] }}

NPC-Skillz

The most commonly accessed NPC skills, rolled twice in case of (Dis)Advantage. This could be easily expanded, if desired.

/w gm &{template:default} {{name=Skill Rolls with Advantage}} {{NPC= @{selected|token_name}}} {{Stealth= [[ 1d20 + [[@{selected|npc_stealth}]] ]] or [[ 1d20 + [[@{selected|npc_stealth}]] ]] }} {{Percept= [[ 1d20 + [[@{selected|npc_perception}]] ]] or [[ 1d20 + [[@{selected|npc_perception}]] ]] }} {{Deceive= [[ 1d20 + [[@{selected|npc_deception}]] ]] or [[ 1d20 + [[@{selected|npc_deception}]] ]] }} {{Insight= [[ 1d20 + [[@{selected|npc_insight}]] ]] or [[ 1d20 + [[@{selected|npc_insight}]] ]] }}

NPC-Token

Another one that uses TokenMod.  This takes an NPC token as provided in the game and turns on/off all the settings I want for it that differ from the Roll20 (or scenario) bog-standard. (What each element is doing should be pretty obvious.)

!token-mod --set 
bar_location|overlap_bottom 
compact_bar|on 
showname|yes 
showplayers_name|yes 
showplayers_bar1|yes 
show_tooltip|yes 
bar1_link|hp 
bar2_link|npc_ac 
bar3_link|speed 
bar1_reset|

Roll-Ability

This lets a player or the GM make an ability roll on the prompt-selected Ability without going into their character sheet.

And, yes, there are those weird HTML special characters that are necessary to make it work and which have a tendency on this (and the succeeding macros) to get messed up (e.g., by re-opening the macro editor) at which point the macro will stop working and you need to cut and paste the text in again.

Origin: Craig (and Kyle G), here.

@{selected|wtype}&{template:simple} @{selected|rtype}?{Stat
|Strength,+[[@{selected|strength_mod}]][STR] ]]&#125;&#125; {{rname=^{strength-u&#125;&#125;&#125; {{mod=[[ [[@{selected|strength_mod}]][STR] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[@{selected|strength_mod}]][STR] ]]
|Dexterity,+[[@{selected|dexterity_mod}]][DEX] ]]&#125;&#125; {{rname=^{dexterity-u&#125;&#125;&#125; {{mod=[[ [[@{selected|dexterity_mod}]][DEX] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[@{selected|dexterity_mod}]][DEX] ]]
|Constitution,+[[@{selected|constitution_mod}]][CON] ]]&#125;&#125; {{rname=^{constitution-u&#125;&#125;&#125; {{mod=[[ [[@{selected|constitution_mod}]][CON] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[@{selected|constitution_mod}]][CON] ]]
|Intelligence,+[[@{selected|intelligence_mod}]][INT] ]]&#125;&#125; {{rname=^{intelligence-u&#125;&#125;&#125; {{mod=[[ [[@{selected|intelligence_mod}]][INT] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[@{selected|intelligence_mod}]][INT] ]]
|Wisdom,+[[@{selected|wisdom_mod}]][WIS] ]]&#125;&#125; {{rname=^{wisdom-u&#125;&#125;&#125; {{mod=[[ [[@{selected|wisdom_mod}]][WIS] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[@{selected|wisdom_mod}]][WIS] ]]
|Charisma,+[[@{selected|charisma_mod}]][CHA] ]]&#125;&#125; {{rname=^{charisma-u&#125;&#125;&#125; {{mod=[[ [[@{selected|charisma_mod}]][CHA] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[@{selected|charisma_mod}]][CHA] ]]
}}} {{global=@{selected|global_skill_mod}}} @{selected|charname_output}

Roll-Save

As above, only it prompts for what sort of Save you want to roll. Again, fragile.

Origin: Craig (and Kyle G), here.

@{selected|wtype}&{template:simple} @{selected|rtype}?{Save
|Strength,+[[(@{selected|strength_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_str_save}*@{selected|npc})]][STR SAVE] ]]&#125;&#125; {{rname=^{strength-save-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|strength_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_str_save}*@{selected|npc})]][STR SAVE] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|strength_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_str_save}*@{selected|npc})]][STR SAVE] ]]
|Dexterity,+[[(@{selected|dexterity_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_dex_save}*@{selected|npc})]][DEX SAVE] ]]&#125;&#125; {{rname=^{dexterity-save-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|dexterity_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_dex_save}*@{selected|npc})]][DEX SAVE] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|dexterity_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_dex_save}*@{selected|npc})]][DEX SAVE] ]]
|Constitution,+[[(@{selected|constitution_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_con_save}*@{selected|npc})]][CON SAVE] ]]&#125;&#125; {{rname=^{constitution-save-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|constitution_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_con_save}*@{selected|npc})]][CON SAVE] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|constitution_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_con_save}*@{selected|npc})]][CON SAVE] ]]
|Intelligence,+[[(@{selected|intelligence_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_int_save}*@{selected|npc})]][INT SAVE] ]]&#125;&#125; {{rname=^{intelligence-save-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|intelligence_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_int_save}*@{selected|npc})]][INT SAVE] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|intelligence_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_int_save}*@{selected|npc})]][INT SAVE] ]]
|Wisdom,+[[(@{selected|wisdom_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_wis_save}*@{selected|npc})]][WIS SAVE] ]]&#125;&#125; {{rname=^{wisdom-save-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|wisdom_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_wis_save}*@{selected|npc})]][WIS SAVE] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|wisdom_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_wis_save}*@{selected|npc})]][WIS SAVE] ]]
|Charisma,+[[(@{selected|charisma_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_cha_save}*@{selected|npc})]][CHA SAVE] ]]&#125;&#125; {{rname=^{charisma-save-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|charisma_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_cha_save}*@{selected|npc})]][CHA SAVE] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|charisma_save_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_cha_save}*@{selected|npc})]][CHA SAVE] ]]
}}} {{global=@{selected|global_save_mod}}} @{selected|charname_output}

Roll-Skill

As above, but with all the Skills. Awesome when it works.

Origin: Craig (and Kyle G), here.

@{selected|wtype}&{template:simple} @{selected|rtype}?{Skill
|Acrobatics,+[[(@{selected|acrobatics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_acrobatics}*@{selected|npc})]][ACRO] ]]&#125;&#125; {{rname=^{acrobatics-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|acrobatics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_acrobatics}*@{selected|npc})]][ACRO] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|acrobatics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_acrobatics}*@{selected|npc})]][ACRO] ]]
|Animal Handling,+[[(@{selected|animal_handling_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_animal_handling}*@{selected|npc})]][ANIM] ]]&#125;&#125; {{rname=^{animal-handling-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|animal_handling_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_animal_handling}*@{selected|npc})]][ANIM] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|animal_handling_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_animal_handling}*@{selected|npc})]][ANIM] ]]
|Arcana,+[[(@{selected|arcana_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_arcana}*@{selected|npc})]][ARC] ]]&#125;&#125; {{rname=^{arcana-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|arcana_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_arcana}*@{selected|npc})]][ARCA] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|arcana_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_arcana}*@{selected|npc})]][ARCA] ]]
|Athletics,+[[(@{selected|athletics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_athletics}*@{selected|npc})]][ARC] ]]&#125;&#125; {{rname=^{athletics-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|athletics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_athletics}*@{selected|npc})]][ATHL] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|athletics_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_athletics}*@{selected|npc})]][ATHL] ]]
|Deception,+[[(@{selected|deception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_deception}*@{selected|npc})]][ARC] ]]&#125;&#125; {{rname=^{deception-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|deception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_deception}*@{selected|npc})]][DECE] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|deception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_deception}*@{selected|npc})]][DECE] ]]
|History,+[[(@{selected|history_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_history}*@{selected|npc})]][ARC] ]]&#125;&#125; {{rname=^{history-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|history_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_history}*@{selected|npc})]][HIST] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|history_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_history}*@{selected|npc})]][HIST] ]]
|Insight,+[[(@{selected|insight_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_insight}*@{selected|npc})]][ARC] ]]&#125;&#125; {{rname=^{insight-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|insight_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_insight}*@{selected|npc})]][INSI] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|insight_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_insight}*@{selected|npc})]][INSI] ]]
|Intimidation,+[[(@{selected|intimidation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_intimidation}*@{selected|npc})]][ARC] ]]&#125;&#125; {{rname=^{intimidation-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|intimidation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_intimidation}*@{selected|npc})]][INTI] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|intimidation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_intimidation}*@{selected|npc})]][INTI] ]]
|Investigation,+[[(@{selected|investigation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_investigation}*@{selected|npc})]][ARC] ]]&#125;&#125; {{rname=^{investigation-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|investigation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_investigation}*@{selected|npc})]][INVE] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|investigation_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_investigation}*@{selected|npc})]][INVE] ]]
|Medicine,+[[(@{selected|medicine_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_medicine}*@{selected|npc})]][ARC] ]]&#125;&#125; {{rname=^{medicine-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|medicine_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_medicine}*@{selected|npc})]][MEDI] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|medicine_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_medicine}*@{selected|npc})]][MEDI] ]]
|Nature,+[[(@{selected|nature_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_nature}*@{selected|npc})]][ARC] ]]&#125;&#125; {{rname=^{nature-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|nature_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_nature}*@{selected|npc})]][NATU] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|nature_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_nature}*@{selected|npc})]][NATU] ]]
|Perception,+[[(@{selected|perception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_perception}*@{selected|npc})]][ARC] ]]&#125;&#125; {{rname=^{perception-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|perception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_perception}*@{selected|npc})]][PERC] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|perception_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_perception}*@{selected|npc})]][PERC] ]]
|Performance,+[[(@{selected|performance_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_performance}*@{selected|npc})]][ARC] ]]&#125;&#125; {{rname=^{performance-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|performance_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_performance}*@{selected|npc})]][PERF] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|performance_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_performance}*@{selected|npc})]][PERF] ]]
|Persuasion,+[[(@{selected|persuasion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_persuasion}*@{selected|npc})]][ARC] ]]&#125;&#125; {{rname=^{persuasion-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|persuasion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_persuasion}*@{selected|npc})]][PERS] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|persuasion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_persuasion}*@{selected|npc})]][PERS] ]]
|Religion,+[[(@{selected|religion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_religion}*@{selected|npc})]][ARC] ]]&#125;&#125; {{rname=^{religion-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|religion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_religion}*@{selected|npc})]][RELI] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|religion_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_religion}*@{selected|npc})]][RELI] ]]
|Sleight of Hand,+[[(@{selected|sleight_of_hand_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_sleight_of_hand}*@{selected|npc})]][ARC] ]]&#125;&#125; {{rname=^{sleight_of_hand-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|sleight_of_hand_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_sleight_of_hand}*@{selected|npc})]][SLEI] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|sleight_of_hand_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_sleight_of_hand}*@{selected|npc})]][SLEI] ]]
|Stealth,+[[(@{selected|stealth_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_stealth}*@{selected|npc})]][ARC] ]]&#125;&#125; {{rname=^{stealth-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|stealth_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_stealth}*@{selected|npc})]][STEA] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|stealth_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_stealth}*@{selected|npc})]][STEA] ]]
|Survival,+[[(@{selected|survival_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_survival}*@{selected|npc})]][ARC] ]]&#125;&#125; {{rname=^{survival-u&#125;&#125;&#125; {{mod=[[ [[(@{selected|survival_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_survival}*@{selected|npc})]][SURV] ]]&#125;&#125; {{r1=[[@{selected|d20}+[[(@{selected|survival_bonus}@{selected|pbd_safe}*(1-ceil((@{selected|npc})*0.00001)))+(@{selected|npc_survival}*@{selected|npc})]][SURV] ]]
}}} {{global=@{selected|global_skill_mod}}} @{selected|charname_output}

William’s Starry Form

For our party druid, Circle of Stars, when he would take on his Starry Form. Good example of a macro that does something without choices. This one turns things on and off by reinvoking them in TokenMod.

!token-mod {{
--flip
emits_bright_light
emits_low_light
--set 
statusmarkers#!blue
bright_light_distance#10
low_light_distance#10
tint_color#transparent
}}

Status-Dead

Everyone’s favorite status macro! Uses TokenMod API for most of its action.

!token-mod {{
--set
statusmarkers|=dead
bar1_current|0
--off
showname
emits_bright_light
show_tooltip
}}
&{template:npcaction}} {{rname=Defeated!}}{{description=@{selected|token_name} is dead.}}

Status-0

Zeroes out the status markers on a character. Uses TokenMod API.

!token-mod --set statusmarkers

Status-Set

Adding (or turning off) a status marker on a token, grouped by broad function. The markers used are from my custom status marker set, but you can modify it to use any status markers, including the defaults. Again, uses the TokenMod API. You can undo any of the statuses by reinvoking it.

!token-mod ?{Status
|Concentrating, --set statusmarkers#!Concentrating
|Helping, --set statusmarkers#!Helping
|Hiding, --set statusmarkers#!Ninja-Mask
|Dodging, --set statusmarkers#!Dodging
|Readying, --set statusmarkers#!Readying
|-, 
|Blinded, --set statusmarkers#Blinded --set limit_field_of_vision_total#0 --set limit_field_of_night_vision_total#0
|(Unblinded), --set statusmarkers#-Blinded --set limit_field_of_vision_total#360 --set limit_field_of_night_vision_total#360
|Charmed, --set statusmarkers#!Charmed
|Deafened, --set statusmarkers#!Deafened
|Drowning, --set statusmarkers#!Drowning
|Exhausted, --set statusmarkers#!Exhausted
|Frightened, --set statusmarkers#!Frightened
|Grappled, --set statusmarkers#!Grappled
|Paralyzed, --set statusmarkers#!Paralyzed
|Petrified, --set statusmarkers#!Petrified
|Poisoned, --set statusmarkers#!Poisoned
|Restrained, --set statusmarkers#!Restrained
|Slowed, --set statusmarkers#!Slowed
|Stunned, --set statusmarkers#!Stunned
|Surprised, --set statusmarkers#!Surprised
|-, 
|Blessed, --set statusmarkers#!Blessed
|Hastened, --set statusmarkers#!Hastened
|Invisibile, --set statusmarkers#!Invisible
|Marked, --set statusmarkers#!Marked
|Raging, --set statusmarkers#!Raging
|Shielded, --set statusmarkers#!bolt-shield
|-, 
|Prone, --set statusmarkers#!Prone
|Incapacitated, --set statusmarkers#!Incapacitated
|Unconscious/Asleep, --set statusmarkers#!Unconscious
|Dying, --set statusmarkers#!Dying
|-, 
|Clear All, --set statusmarkers#=blue#-blue}

Surprised

Just a shortcut to quickly put the Surprised status marker on a token (uses the name from my custom token marker set, so you can change it to whatever you use).  Uses the TokenMod API.

!token-mod --set statusmarkers#!Surprised