ZEITGEIST Session Three: Recap and Review

Previous sessions: Session one, Session two

Our group gathered in mid February for our third session in the Zeitgeist campaign from EN World. This session took us to the climactic finish of Adventure One: The Island at the Axis of the World.

Beware the cannonballs!

Since my group had ended session two by going a little bit off the rails, I had to create a new encounter to kick off session three. The group was racing along a sea wall surrounding a fortress, trying to follow the trail of some fiery, smoky being that had destroyed a ship in the harbor before leaping onto the wall and into the fort. Unfortunately for our heroes, the wall was being viciously fought over by the defenders upon it and the attackers bombarding it from ships in the harbor.

Sea Wall Battle - showing enemy positions

The battle is fairly simple. The party is approaching along the wall from the left side of the map. Four Rebel Musketeers (custom enemies) are on the north side of the wall, shooting at ships in the harbor, and four more are on the south side of the wall, doing the same thing. Half of each set of musketeers have their muskets loaded and ready at any given time. Two Rebel Soldiers (from the published adventure) are between the rows of musketeers, giving orders.

At the end of each round, a cannonball comes flying across a random row of the wall around the tower, attacking creatures in that row and on either side of that row. This can cause characters (both PCs and enemies) to be pushed off the wall and into the water.

Once the PCs get within ten squares or attack the enemies, the rebels notice them and turn their focus from the ships to the PCs.

The full encounter is available here (Beware the Cannonballs), and battle maps scaled to a 50 pixel per square grid are below.

Sea Wall map - with grid

Sea Wall map - No grid

Where did he go?

Once the party had conquered the sea wall tower, they moved along the inner wall until they met up with allied soldiers who had succeeded in breaching the wall. The fiery creature they were pursuing was nowhere to be seen, but the commanding officers requested the party’s assistance in dealing with some Danoran prisoners in a brig.

Negotiations with the prisoners went well and led to some intelligence about an entrance to the central tower of the keep through the sewers. The Danorans also gave the party a key that would open a door on the roof of the tower in case they ended up there. These discussions were ultimately interrupted by screams and the sound of running feet across the roof of the brig – the fiery creature was back!

Our heroes rushed into the streets to see the fiery creature, revealed as an eladrin, using a strange orb that caused the inner fortress wall to disappear, replaced by wilderness for a few moments. The fiery eladrin ran across the tops of the hedge maze within the inner fortress wall and then started scaling the central tower. The PCs decided to rush after him.

Vesper, the scout in the party, had found the token back in the mines that gave him tremendous jumping power, so he decided to use that power to go bounding after the eladrin. He hopped along the tops of the hedges in the maze and found himself at the base of the tower, staring up as the eladrin finished ripping out bricks, tearing what looked like a gold wire in the wall (gold circles prevent teleportation in this world) and then disappearing – presumably inside the tower. Vesper climbed to the roof, used the key on the roof door, and started sneaking downstairs.

Meanwhile, the rest of the party found themselves dealing with an irate fey creature named Ghillie Dhu who was blaming them for lighting his hedges on fire (when in fact it was the eladrin who had done so with his fiery aura). Some quick negotiations followed, including a bit of a seduction by the female eladrin in the party, Andraste, and Ghillie Dhu was satisfied that the party was chasing the eladrin who burned the maze, not allied with him. Ghillie Dhu led them through the maze to the base of the tower, where they found a rope had been lowered by Vesper.

Level 1 PCs fighting a level 20 monster

Inside the tower, Vesper had gotten himself into a good eavesdropping position. He was able to see the eladrin, badly bloodied after fighting a bunch of guards in the tower, having a heated exchange with Duchess Evelyn of Shale (the Risuri noblewoman who had invaded the island) and a tiefling named Nathan Jierre. The eladrin, referred to by the duchess as Asrabey, had clearly beaten the duchess and the tiefling, and the duchess was trying to reason with him. Vesper bided his time, readying an attack in case Asrabey tried to hurt the duchess or the teifling any more.

The rest of the party was working on climbing the rope. Some of the PCs made their Athletics checks quickly, but our poor docker bard, Corduroy, struggled and struggled. As the party made it onto the roof, they saw the open door and peaked in, communicating through hand gestures with Vesper below.

Once Corduroy finally made it to the roof, he danced a jig of happiness…

Which made some noise, attracting the attention of Asrabey, who finally looked up and saw Vesper above him. His rage set off Vesper’s readied action, and we were in combat!

This was a beautiful moment in the adventure, where the writer, Ryan Nock, provides the DM with two ways to run the encounter. The default approach is to run Asrabey as an injured level 20 creature with only 27 hit points. This makes him practically impossible to hit, unless a PC rolls a natural 20, uses a power that deals damage without an attack roll (like Magic Missile) or uses a power that still has an effect on a miss (like most daily powers). At the same time, his attacks always hit the PCs unless he rolls a 1.

Alternatively, the battle can be run with Asrabey as a level 2 solo creature. I went hard core – he was level 20.

Combat was quick and deadly. Asrabey set his shield to work chewing on Vesper as the rest of the party rushed inside. The eladrin set up a zone that would soon erupt into flames. Andraste the witch used a power that would deal damage to Asrabey every time he hurt one of Andraste’s allies.

The party started to worry that they had bitten off more than they could chew, but they were doing their best to make use of daily powers and creative effects. Asrabey took a few hits and was clearly teetering, but Vesper was unconscious and laying in the area that would soon erupt into flames.

Asrabey began his turn, the flames rose, and Vesper was burned to death…

At which point Andraste’s effect caused Asrabey to take a few points of damage, killing the eladrin.

My players, including Vesper’s player, literally jumped to their feet, cheering and high fiving one another. It was one of the best moments I’ve had as a DM. Even though a PC died, it was a huge victory that was hard-won. They earned it, 100%.

In the aftermath of the battle, the party managed to steal Asrabey’s sword and cloak – high-level items that they really shouldn’t have and that are quite illegal for them to have taken in-game. But that’s okay… I don’t mind there being consequences later!

Thus ends adventure one of ZEITGEIST. It’s a very cool campaign so far, and I’m hoping to start adventure two as soon as we can get everyone’s schedules to line up. I’ve just learned that two of my six players are moving away in August, and there’s a chance that two more might be going eventually as well, so I hope to make some progress on the campaign while we still can.

-Michael the OnlineDM

Lords of Waterdeep, and a break to build MapTool macros

I don’t usually go multiple weeks without a post here on Online Dungeon Master, so I thought I’d give my loyal fans an update.

I’ve been traveling for work a lot in the past  couple of weeks, which certainly interferes with blogging time. However, I HAVE been using the time for D&D stuff – specifically MapTool work. You may recall that I had built and shared some macros for quickly creating monster powers a few weeks ago. Well, I’ve been working on the same thing for PC powers in D&D 4e. It’s been tremendously time consuming to build the macros, but actually using them has been fast! (Aside from bug killing, that is.)

Three of the players in my long-running Friday night War of the Burning Sky campaign created new characters for last week’s game (one new player, two existing players switching to new characters), so I had the chance to put my new PC power creation macros through their paces. I’m pleased to say that they worked like a charm! No problems at all so far, and the ability to recharge a power with a button click has been awesome.

The next step is to add a character sheet frame, similar to what I’ve done for Marvel Heroic RPG. I’d love for my D&D players to be able to scroll through their powers in a custom frame rather than the buttons in the Selection window. I could include the rules text of the powers in a small font, links to recharge powers individually, some nice-looking tables for organization purposes, and so on. But for now I still have a little tweaking to do on the PC power creation, though I hope to start sharing pieces of it soon. It’s a complicated family of macros, and I have not yet figured out how to break it into blog-post-sized chunks.

I haven’t run Madness at Gardmore Abbey in the past few weeks, which is a bit of a bummer. I finally have that whole campaign prepped in MapTool, so I’m ready to go at a moment’s notice! But the timing hasn’t worked out with my players.

I was going to try to revive my ZEITGEIST campaign for today’s gaming session, but two players had to bow out at the last moment. The day wasn’t a total loss, though, since the rest of us used the time to play three games of Lords of Waterdeep!

I’ve played a total of five games of Lords of Waterdeep now, and I absolutely love it even though I haven’t won yet. LoW feels like a streamlined fantasy setting of Agricola, another game that I absolutely love. We haven’t discovered a “dominant strategy” yet, which is a good thing. I love the design of the box itself – there’s a great insert to organize all of the pieces. The rulebook is excellent, too – very clear, with a handy summary of the rules on the back cover. It’s tons of fun, and everyone who has played it so far has loved it. I highly recommend Lords of Waterdeep.

I’m going to be out of town on vacation starting next weekend, so I hope to get another post or two up before I go. But if not, don’t expect to see anything from me until late April.

-Michael the OnlineDM

Madness at Gardmore Abbey – MapTool campaign file

At long last, I have finished putting together my complete MapTool campaign file for the Madness at Gardmore Abbey adventure. Huzzah! You can download it right here.

I’m pretty sure this is the largest MapTool campaign file I’ve built to date (around 33 MB), and I’m quite happy with it. It has all of the maps, all of the monsters, all of the Deck of Many Things tokens, all of the traps. I’ve got a template token for PCs and a template token for monsters.

The campaign file consists of eight maps with encounters from the adventure, plus a ninth map that’s a holding pen for NPCs, the Deck tokens and some background stuff for the campaign (library token, templates). The maps are labeled according to the encounter numbers that are included on the map. For instance, the map named 01-04 Village has the encounter maps that take place in the outer part of Gardmore Village (Encounter 1: Main Gate; Encounter 3: Double Talk; Encounter 4: Ruined Garrison; plus the overland map of the abbey and the map of Winterhaven).

Because of the number of maps that are in this adventure, I’ve included Wolph42’s Bag of Tricks macros – specifically the Teleport Pads. To use these, you’ll need to click the “Back of Tricks Macros” button in the Campaign pane and then the Initialize Pads button. Once you’ve done that, you can drag tokens around the various maps by dragging them to the teleport pad corresponding to the map where you want them to go. The 01-04 Village map has the portals to every other map.

I hope that folks find this campaign file to be useful. I know that I’ve had a lot of fun with Madness at Gardmore Abbey so far, and I’m looking forward to running the rest of the adventure!

– Michael the OnlineDM

Madness at Gardmore Abbey: Session Five

Past sessions: Session OneSession TwoSession Three, Session Four

After a six-week break, I was finally able to gather again via MapTool with my wife, her brother, and his wife for our continuing adventure in Gardmore Abbey. At this point I pretty much have the entire adventure prepared in MapTool (still a few wrinkles to work on before it’s done, though), so I’m ready for unexpected twists.

As always, SPOILERS AHEAD.

The party’s current quest is to help Sir Oakley, paladin of Bahamut and scion of Gardmore Abbey, to recover three relics he needs in order to purify the main Temple of Bahamut in the abbey. Sora the dragonbornn swordmage, Homer the elf hunter and Stasi the half-elf warpriest are currently with Sir Oakley in the catacombs beneath the abbey.

At the end of the last session, they had finished a difficult battle against undead monstrosities and had found a magic fountain of Bahamut that granted some necrotic resistance. Some of them were talking about an extended rest, but they really weren’t ready for that yet (not enough adventuring). As they stood by the Font of Divine Health discussing their plans, they heard some footsteps from the stairs leading up to the Temple.

Homer crept over to the nearby door and tried to peer through the keyhole (sure, let’s say there’s a keyhole). His perception roll was terrible, though, so he could only tell that there were some humanoid-shaped creatures (more than two), that they were talking (but he couldn’t make out the language, let alone what they were saying) and that they were carrying a light source (but he couldn’t tell what it was). He decided to head around to the Memorial Chamber to spy from there, but he wasn’t very stealthy about it. As he got into the Memorial Chamber, he heard footsteps hurrying back up the stairs and saw the light around the corner getting dimmer.

The rest of the party came over to join Homer and they decided not to pursue the other people.

Though I didn’t tell them this, they had just had their first encounter with the rival adventuring party. I was supposed to have made it so that the Altar of Glory had already been cleared out by the other party when our heroes arrived, but I forgot. So instead I decided to have them come down, find the Altar of Glory already cleared by our heroes, and then skedaddle when the heroes detected them. It worked out really well.

After this, the group pressed on to a large chamber in which they could hear something heavy dragging along the floor in the darkness.

Encounter 27: Great Hall

Vadin Cartwright

Since they weren’t particularly stealthy in entering this chamber, Vadin Cartwright called out in a cold voice, “Ah, we have visitors. Get them, friends!” This was the first Villain encounter, where a bad guy was drawing cards from the Deck of Many Things. Vadin drew the Knight, which gave him a flanking buddy. I ruled that he could use a move action to move the Knight, who would otherwise have been useless since Vadin was so far from the action.

The basilisk was the first problem. Sir Oakley, Sora and Stasi were clustered together, ripe for the basislisk’s venomous gaze. Some vampire minions soon closed to melee and started grabbing PCs left and right. Homer did his traditional chicken impression, staying out of the room and shooting from the hallway. Vadin Cartwright himself waited until the end of the second round to make his move, coming in with a terrifying howl that stunned the three melee characters.

Since stunned can be such an un-fun condition, I house rule it a little differently at my table:

OnlineDM’s house rule for stunned: A character who is stunned is dazed and cannot attack.

I’ve experimented in the past with saying that a stunned character can’t take standard actions, but if someone wants to make a heal check or take second wind or total defense as their entire turn, I’m fine with that.

In this case, Stasi used her one action to grant Sir Oakley a saving throw and then made her own saving throw at the end of her turn, so the team was back in the game quickly. Vadin was a tough opponent to hit; I ended up lowering his AC from 26 to 24 (de-soldierifying him) just because I saw that this encounter could get grindy otherwise. I also left the Snaketongue Vampire out of the fight since we had only three PCs plus Oakley (who is a full participant in combat).

Vadin drew the Donjon card when he was down to two-thirds of his starting hit points. The villain effect on this card gives adjacent enemies a -2 penalty to attack rolls, which is exactly the kind of ability I hate. Anything that results in missed attacks slows the game down. So, I changed it to an aura that gave enemies vulnerable 2 to all damage. When the Sun card was drawn later, I had the same problem; as written, it gives the villain concealment, which would be another -2 to hit. I switched this to a fiery halo that dealt 5 fire damage to the first PC to hit Vadin in melee (which, combined with the vulnerability, was painful and fun).

During the battle, Homer eventually dashed over to the niche in the wall where Vadin was keeping a vial of a strange red liquid. This vial was glowing, and Homer couldn’t resist picking it up and taunting Vadin with it. This definitely got Vadin’s attention, which was a good thing since Oakley was unconscious and on two failed death saves and Stasi the healer had just joined him on the ground. My brother in law asked if Homer could still shoot his bow while holding the stopperless vial, and I said sure. He carefully lined up his shot and critically hit Vadin! But some of the goop in the vial crept out and onto his bow hand; that’s some bad news right there.

Once Vadin had turned his attention to Homer, Sora was able to perform first aid on Sir Oakley, letting him spend his second wind, and he then healed Stasi. With all four characters back in action, they were able to take Vadin down. Oakley had no surges left; Sora had two, I believe. It was an exhausting series of fights for the party, but they had acquired three more cards from the Deck of Many Things from Vadin. They also found a magic sword and some money in a compartment in the room. The sword is called Moonbane and is an ancestral item from the Markelhay family that currently rules Fallcrest. I decided to make it a +3 sword since it would otherwise be pretty unexciting (as written, it’s +2). Sora was happy to wield it. This also switches her from a broadsword to a longsword, so she should hit more often now.

The group then spent the rest of their day holed up in the secret chamber in the catacombs, with Stasi tending to Homer. The red liquid had left Homer infected with unpleasant boils up his left arm, and he lost a healing surge. Stasi’s healing skill wasn’t very useful for Homer, but at least he didn’t get any worse. After an extended rest in the chamber, Homer woke up feeling better (a good endurance check), and the disease was cured – although he carries the scars still.

Red goop diaries

Next question: What to do about the red liquid? Vadin had raved about Tharizdun, the Chained God, and the substance definitely seemed evil. Homer and Stasi decided to pour some holy water from the Font of Divine Health in the next room into the vial to see what would happen. What happened was that the water started bubbling over, and Homer threw the vial against the far wall. The red goo seemed to have emerged mostly unscathed, and it started creeping up the wall. Sora scooped it up in a bottle that previously held a healing potion, and stoppered the thing shut.

After some discussion, the group decided to tie the bottle to a rock, unstopper it and drop it in the fountain. The font started frothing over and turning a bit pinkish for a minute or two before calming down. The magical energy from the fountain has dissipated, but the overwhelming evil of the red stuff doesn’t feel strong any more.

From here, the adventurers explored the easternmost chamber of this floor They opened a door to reveal – a curtain of dragon scales obscuring the next room! But beyond that lay more sarcophagi – and undead monsters.

Encounter 26: Dragonslayers’ Tomb

A couple of ghasts emerged from the darkness, followed by a wraith surrounded by swirling winds (a vortex wraith). The curtain of dragon scales blocked Homer’s shot into the room, so Sora yanked it to the ground. The vortex wraith started off being dazed thanks to Homer’s disruptive shot, so I ruled that its aura wasn’t working at first. Once it started up, though, its automatic damage and pulling of PCs toward the wraith had a major effect on the battle. Fortunately Stasi and Sir Oakley were doing their best to keep dealing radiant damage, and Sora’s Moonbane sword was ignoring the wraith’s insubstantiality.

Meanwhile, a regular non-vortex wraith had phased through a wall to come after Homer in the hallway. He pulled out the Sun card and managed to activate it to give himself some concealment, but the wraith’s invisibility every time it got hit made it a tough fight.

Things only got worse when a second vortex wraith joined the battle in the third round. Sir Oakley finished off the first one, which promptly exploded, sending the party flying all over the place. The one remaining vortex wraith focused on Sora, bringing the dragonborn to the ground briefly before she was rescued by Stasi and the wraith was at last destroyed.

Once all of the monsters were dealt with, the explorers discovered one of the relics Sir Oakley had been seeking – the Bowl of Io’s Blood. Huzzah! A great victory was shared by all.

I’m still having a ton of fun with this adventure. Ad-libbing the reaction of the red goo to the holy water was lots of fun, and I plan to have Homer’s scars from the disease come into play in the future. The mystery of the other people investigating the catacombs has worked out beautifully. And with five cards in their possession, the group is much more interested in and aware of the Deck of Many Things and its power. Now that I have almost everything prepped in MapTool, I’m ready for whatever they want to do next.

– Michael the OnlineDM

MapTool – Creating monster power macros with a macro

Strap in, macro lovers – you’re in for quite a ride!

As I mentioned in my last post, I’ve wanted for a while to create monster power macros using another macro. I’d like to be able to click an “Add Power” button, specify the details of the attack, and see a new button for that attack get created. And now, at long last, I’ve done exactly that.

It’s not a simple macro, to be sure. But I think it’s quite slick. Read on, if you dare! And note that you can download the macro here. My current D&D 4e campaign framework is available here.

First, some new properties

As I was going through this process, I realized that I would need to update my monster properties to better handle the tracking of encounter and recharge powers. I previously handled this with properties E1 through E7, which begin with a value of 1 and then get set to 0 once the encounter power is used, after which it can’t be used again. I did similarly with R1 through R5 for recharge powers.

Since my new macro is going to be creating encounter powers, it needs to know which encounter power slots are already taken. The cleanest way to do this was with pairs of JSON arrays as properties.

EncounterPowersCharged:'[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]’
EncounterPowersDeclared:'[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]’
RechargePowersCharged:'[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]’
RechargePowersDeclared:'[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]’

These are ten-item arrays, allowing for ten separate encounter powers and ten separate recharge powers. When I assign a new encounter power to one of the slots, I change the appropriate slot in the EncounterPowersDeclared array to 1. When that power is used up, it changes the appropriate slot in the EncounterPowersCharged array to 0, preventing it from being used again. And so on for recharge powers.

More on this later.

Macro structure

This macro has three main sections.

– There’s the first input box, where I ask for the name of the power, what range it targets, whether it’s standard or minor or whatever, what order I want the power to appear in, the usage (at-will, encounter, recharge), how many targets it has, whether it requires an attack roll and/or damage roll, and whether there are various other lines of text in the power (a Requirement line, a miss effect, etc.).

– There’s a second input box, where I ask about extra bonuses to the attack roll, what level of damage is being dealt, and what should appear in the various lines of text of the power.

– There’s the actual construction of the macro command text, which gets rather complicated.

First input box

I’ll present the code as a big dump, then explain it.

[h: listActionTypes = “2. Traits, 3. Standard Actions, 4. Move Actions, 5. Minor Actions, 6. Triggered Actions”]
[h: listDamageLevel = “Minion, Very Low, Low, Normal, High, Very High, Extreme”]
[h: listUsage = “At-Will, Recharge, Encounter, Not Applicable”]
[h: x = input(
“MacroName | NewPower| Power Name || WIDTH=20”,
“TargetRange | (M1) | Targets-Aura-Etc || WIDTH=10”,
“ActionType | ” + listActionTypes + ” | Action Type | LIST | VALUE=STRING SELECT=1″,
“SortOrder | 1 | Sort order || WIDTH=2”,
“Usage | ” + listUsage + ” | Usage | LIST | VALUE=STRING SELECT=0″,
“NumberOfTargets | Single-Target, Multi-Target, No Targets | Number of Targets | LIST | VALUE=STRING SELECT=0”,
“AttackRollRequired | 1 | Attack roll? | CHECK | “,
“DamageRollRequired | 1 | Damage roll? | CHECK | “,
“RequirementIncluded | 0 | Requirement line? | CHECK | “,
“PreAttackEffectIncluded | 0 | Pre-attack effect? | CHECK | “,
“MissEffectIncluded | 0 | Miss effect? | CHECK | “,
“AftereffectIncluded | 0 | After-save effect? | CHECK | “,
“PostAttackEffectIncluded | 0 | Post-attack effect? | CHECK | “,
“SpecialEffectIncluded | 0 | Special effect? | CHECK | ”
)]
[h: abort(x)]

The first three lines just set up some string lists that the user will be able to choose from for action type, damage level and usage. Then I have a big input box where I ask the user to make some choices. It’s probably easiest to just look at it in action:

The user is invited to type in the name of the power and any information about its range (such as M1 for melee 1 or AB1 in 10 for area burst 1 within 10 squares). A drop-down lets you pick whether it’s standard, minor, etc. The sort order only matters if you have multiple powers of the same action type – which standard action do you want first, then second, etc. The targets are either Single-Target, Multi-Target or No Targets. Then we have a series of check boxes that ask whether different possible parts of a power are present in this power. Note that the default options assume an attack roll and a damage roll and nothing else, but that’s all easy to edit with a click.

Second input box

[h: DefenseTargeted=’AC’]
[h: Enhancement=0]
[h: DamageLevel=”Normal”]
[h: DefaultDamageLevel=3]

Here I set up a few default values. These are useful in case I’ve said in the first input box that the power has no attack roll, in which case I won’t be picking a defense to target or a possible enhancement for critical rolls. That can be a problem later in the macro, so I need some defaults.

The DefaultDamageLevel is a variable that determines where the starting position in the damage drop-down will be. Position 3 is “Normal”. But in certain cases I want to default to things other than “Normal”:

[h, if(getProperty(“Role”)==”Brute”): DefaultDamageLevel=DefaultDamageLevel+1]
[h, if(Usage==”Recharge”): DefaultDamageLevel=DefaultDamageLevel+1]
[h, if(Usage==”Encounter”): DefaultDamageLevel=DefaultDamageLevel+2]
[h, if(NumberOfTargets==”Multi-Target”): DefaultDamageLevel=DefaultDamageLevel-1]
[h, if(getProperty(“SubType”)==”Minion”): DefaultDamageLevel=0]

Brutes deal more damage than other creatures. Recharge powers should do a bit more damage than normal, other things being equal. Encounter powers should do more still. Now, if the attack hits multiple targets, that should bring the damage down a bit. And of course if we’re building a power for a minion, we should use fixed minion damage.

Okay, now things start getting complicated.

[h: RechargeTargetInputString=if(Usage==”Recharge”,encode(“RechargeTarget | 2, 3, 4, 5, 6 | Recharge Target | LIST | VALUE=STRING SELECT=3″),””)]

What’s going on here? Well, I’m getting ready to build another input box. I want to be slick with this one, so it’s only going to ask the user for information that’s relevant. This means that if I’m building a recharge power, I want to ask for a recharge target number, but if I’m building an at-will or encounter power I don’t want to bother asking for a recharge number.

So, I create a string that will show up in the next input() command for the recharge target line. If I am building a recharge power, the string will be encoded to ask for a variable called RechargeTarget, which could range from 2 to 6. It will ask the user for a Recharge Target value in a drop-down list and save the choice as a string. The default selected in the drop-down will be at index 3 of the list which, because MapTool starts counting at 0, is actually the fourth item – which is the number 5, the most common recharge target.

However, if I’m NOT building a recharge power (Usage is anything other than Recharge) then instead of encoding this big string, I just set RechargeTargetInputString equal to “” – a blank string.

I then do similar things for lots of other possible inputs.

[h: DamageRollInputString=if(DamageRollRequired==1,encode(“DamageLevel | ” + listDamageLevel + ” | Damage Level | LIST | VALUE=STRING SELECT=” + DefaultDamageLevel),””)]
[h: EnhancementInputString=if(DamageRollRequired==1,encode(“Enhancement | 0 | Extra damage on crit? | CHECK | “),””)]
[h: ExtraAttackBonusInputString=if(AttackRollRequired==1,encode(“ExtraAttackBonus | 0 | Extra attack bonus | | WIDTH=2″),””)]
[h: JustEffectInputString=if(AttackRollRequired==0,encode(“JustEffect | . | Effect line | | WIDTH=50″),””)]
[h: DefenseInputString=if(AttackRollRequired==1,encode(“DefenseTargeted | AC, Fortitude, Reflex, Will | Defense targeted | LIST | VALUE=STRING SELECT=0″),””)]
[h: HitStringInputString=if(AttackRollRequired==1&&DamageRollRequired==1,encode(“HitStringWithDamage | damage | Hit line after damage roll | | WIDTH=50”),if(AttackRollRequired==1&&DamageRollRequired==0,encode(“HitStringNoDamage | . | Hit line | | WIDTH=50”),if(AttackRollRequired==0&&DamageRollRequired==1,encode(“EffectStringNoAttack | damage | Effect line after damage roll | | WIDTH=50″),””)))]
[h: RequirementInputString=if(RequirementIncluded==1,encode(“Requirement | . | Requirement | | WIDTH=50″),””)]
[h: TriggerInputString=if(ActionType==”6. Triggered Actions”,encode(“Trigger | . | Trigger | | WIDTH=50″),””)]
[h: PreAttackEffectInputString=if(PreAttackEffectIncluded==1,encode(“PreAttackEffect | . | Pre-Attack Effect | | WIDTH=50″),””)]
[h: MissEffectInputString=if(MissEffectIncluded==1,encode(“MissEffect | . | Miss Effect | | WIDTH=50″),””)]
[h: AftereffectInputString=if(AftereffectIncluded==1,encode(“Aftereffect | . | Aftereffect | | WIDTH=50″),””)]
[h: PostAttackEffectInputString=if(PostAttackEffectIncluded==1,encode(“PostAttackEffect | . | Post-attack effect | | WIDTH=50″),””)]
[h: SpecialEffectInputString=if(SpecialEffectIncluded==1,encode(“SpecialEffect | . | Special Effect | | WIDTH=50″),””)]

All of these things could be suppressed if the power in question doesn’t need them. I’ve tried to present them as intuitively as possible. I only ask for the damage level if there’s a damage roll (and the default selection was set up above). I ask if this power should have a little extra on the attack roll (like for a ranged artillery attack). If this power is just an effect (no attack, no damage – like a trait), then I ask for that. And so on.

Now it’s time to actually generate the input box that will ask for this stuff:

[h: x = input(
decode(RechargeTargetInputString),
decode(RequirementInputString),
decode(TriggerInputString),
decode(PreAttackEffectInputString),
decode(ExtraAttackBonusInputString),
decode(DefenseInputString),
decode(DamageRollInputString),
decode(EnhancementInputString),
decode(HitStringInputString),
decode(MissEffectInputString),
decode(AftereffectInputString),
decode(PostAttackEffectInputString),
decode(SpecialEffectInputString),
decode(JustEffectInputString)
)]
[h: abort(x)]

Yep – it’s all just a bunch of decoding of the stuff above. If the conditions are right, there will be an item in the input box. If not, the item will be skipped. For instance:

This is what I get if I pick a triggered recharge power with all of the check boxes checked. Conversely:

This is what I get if I choose the default options (single target at-will power with an attack and damage roll). And for the extreme simplicity case:

This is what I get if I pick a power with no targets, no attack roll, no damage roll and no boxes checked. It’s a pure text power – just an effect. Most move actions and traits will be this way, for instance.

Building the macro command

At this point, we have a lot of input from the user saved as variables. Now it’s time to use those variables and turn it all into command text for our new macro.

[h, switch(DamageLevel), code:
case “Minion”: {
[h: NumDice=0]
[h: DieSize=”MinionDamage”]
[h: DamageBonus=”MinionDamage”]
[h: Enh=1]
[h: CritDamageDie=”MinionDamage”]
};
case “Very Low”: {
[h: NumDice=”NumDice50″]
[h: DieSize=”DamageDie50″]
[h: DamageBonus=”DamageBonus50″]
[h: Enh=Enhancement]
[h: CritDamageDie=”DamageDie50″]
};
case “Low”: {
[h: NumDice=”NumDice75″]
[h: DieSize=”DamageDie75″]
[h: DamageBonus=”DamageBonus75″]
[h: Enh=Enhancement]
[h: CritDamageDie=”DamageDie75″]
};
case “Normal”: {
[h: NumDice=”NumDice100″]
[h: DieSize=”DamageDie100″]
[h: DamageBonus=”DamageBonus100″]
[h: Enh=Enhancement]
[h: CritDamageDie=”DamageDie100″]
};
case “High”: {
[h: NumDice=”NumDice125″]
[h: DieSize=”DamageDie125″]
[h: DamageBonus=”DamageBonus125″]
[h: Enh=Enhancement]
[h: CritDamageDie=”DamageDie125″]
};
case “Very High”: {
[h: NumDice=”NumDice150″]
[h: DieSize=”DamageDie150″]
[h: DamageBonus=”DamageBonus150″]
[h: Enh=Enhancement*2]
[h: CritDamageDie=”DamageDie150″]
};
case “Extreme”: {
[h: NumDice=”NumDice175″]
[h: DieSize=”DamageDie175″]
[h: DamageBonus=”DamageBonus175″]
[h: Enh=Enhancement*2]
[h: CritDamageDie=”DamageDie175″]
}
]

This rather inelegant piece of code does something simple in the end. It takes the indication of the damage level (from Minion to Very Low all the way up to Extreme) and sets some text variables that will show up in the final macro. I have properties in my campaign for number of dice, damage die size and damage bonus that are derived from a monster’s level. I also have tweaks from the 100% “normal” damage expressions to have 50% versions, 75%, 125%, 150% and 175%. That’s all I’m doing here – getting ready to tell the final macro what damage level to pull from the monster’s properties.

[h: AttackBonus=if(DefenseTargeted==’AC’,’DefaultAttackBonusVsAC’,’DefaultAttackBonusVsNAD’)]

This is a simple one. I have two monster properties for attack bonuses: One versus AC and one versus non-AC defenses (which is two points lower). I’m just telling the macro which one to use.

[h: MyCommand=””]
[h: MyCommand=MyCommand+encode(“<b>” + MacroName + “</b> ” + TargetRange + “<br>\\n”)]

As you saw in my last post, this is the way I build the “command” property that I’m setting for the new macro. I’m just adding the name and range at this point. The \\n at the end enters a new line (carriage return) in the macro itself, not in the output.

[h, if(RequirementIncluded==1): MyCommand=MyCommand+encode(“<i>Requirement:</i> “+Requirement+”<br>\\n”)]
[h, if(ActionType==”6. Triggered Actions”): MyCommand=MyCommand+encode(“<i>Trigger:</i> “+Trigger+”<br>\\n”)]
[h, if(PreAttackEffectIncluded==1): MyCommand=MyCommand+encode(“<i>Effect:</i> “+PreAttackEffect+”<br>\\n”)]

Here I add lines for Requirement, Trigger and Effect before the attack in the case that those exist for this power.

[h, if(AttackRollRequired==1), CODE: {
[h: MyCommand=MyCommand+encode(“[h: AttackBonus=” + AttackBonus + ” + ” + ExtraAttackBonus + “]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: Defense='”+DefenseTargeted+”‘]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: d20roll=d20]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: Enh=”+Enh+”]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: CritDamageDie=”+CritDamageDie+”]\\n\\n”)]
[h: MyCommand=MyCommand+encode(“[h, if(CritDamageDie > 0), CODE:\\n { [CritBonus=roll(Enh,CritDamageDie)] }; \\n { [CritBonus=0] }\\n ]\\n\\n”)]
[h: MyCommand=MyCommand+encode(“[h: AttackRoll=d20roll+AttackBonus]\\n”)]
}
]

These lines are only added to the macro if there’s an attack roll. The macro will have the attack bonus, the defense targeted, the result of a d20 roll, etc.

[h, if(DamageRollRequired==1), CODE: {
[h: MyCommand=MyCommand+encode(“[h: DamageString='”+HitStringWithDamage+”‘]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: NumDice=”+NumDice+”]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: DamageDie=”+DieSize+”]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: DamageBonus=”+DamageBonus+”]\\n\\n”)]
[h: MyCommand=MyCommand+encode(“[h: DamageRoll=roll(NumDice,DamageDie)]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: NumDice=”+NumDice+”]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: MaxDamage=NumDice*DamageDie+DamageBonus+CritBonus]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: RegularDamage=DamageRoll+DamageBonus]\\n\\n”)]
}
]

These lines only show up if there’s a damage roll. Pretty standard stuff.

[h, if(NumberOfTargets==”Single-Target” && AttackRollRequired==1), CODE: {
[h: MyCommand=MyCommand+encode(“<i>Attack:</i> [d20roll] + [AttackBonus] = <b>[AttackRoll]</b> versus [Defense]<br>\\n”)]
[h, if(DamageRollRequired==1), CODE: {
[h: MyCommand=MyCommand+encode(“[if(d20roll==20), CODE:\\n”)]
[h: MyCommand=MyCommand+encode(” {<font color=red>–CRITICAL HIT–</font><br>\\n”)]
[h: MyCommand=MyCommand+encode(” <i>Hit:</i> [NumDice*DamageDie] ([NumDice]d[DamageDie]) + [DamageBonus] + [CritBonus] = <b>[MaxDamage]</b> [DamageString]<br>\\n”)]
[h: MyCommand=MyCommand+encode(” };\\n”)]
[h: MyCommand=MyCommand+encode(” {<i>Hit:</i> [DamageRoll] ([NumDice]d[DamageDie]) + [DamageBonus] = <b>[RegularDamage]</b> [DamageString]<br>}\\n”)]
[h: MyCommand=MyCommand+encode(“]\\n”)]
};
{[h: MyCommand=MyCommand+encode(“<i>Hit:</i> “+HitStringNoDamage+”\\n”)]
}
]
};{}
]

And now we have the “punch line” part of the code for the single-target attack case. This part of the code displays the result of the attack and damage rolls in the chat window.

[h, if(NumberOfTargets==”Multi-Target” && AttackRollRequired==1), CODE: {
[h: MyCommand=MyCommand+encode(“[h: x=input(‘NumberOfTargets|0|Number of targets’)]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: abort(x)]\\n\\n”)]
[h: MyCommand=MyCommand+encode(“Attacking [NumberOfTargets] [if(NumberOfTargets==1,’target’,’targets’)].<br>\\n”)]
[h: MyCommand=MyCommand+encode(“[count(NumberOfTargets,'<br>’), CODE: {\\n”)]
[h: MyCommand=MyCommand+encode(” [h: d20roll=d20]\\n”)]
[h: MyCommand=MyCommand+encode(” [h: AttackRoll=d20roll+AttackBonus]\\n”)]
[h: MyCommand=MyCommand+encode(” <i>Target [r:roll.count+1]:</i> [d20roll] + [AttackBonus] = <b>[AttackRoll]</b> versus [Defense]\\n”)]
[h, if(DamageRollRequired==1), CODE: {
[h: MyCommand=MyCommand+encode(” [if(d20roll==20), CODE: {<font color=Red> –CRITICAL HIT–</font> [NumDice*DamageDie] ([NumDice]d[DamageDie]) + [DamageBonus] + [CritBonus] = <b>[MaxDamage]</b> [DamageString]};{} ]\\n”)]
[h: MyCommand=MyCommand+encode(” }\\n”)]
[h: MyCommand=MyCommand+encode(“]<br><br>\\n”)]
[h: MyCommand=MyCommand+encode(“<i>Hit:</i> [DamageRoll] ([NumDice]d[DamageDie]) + [DamageBonus] = <b>[RegularDamage]</b> [DamageString]<br>\\n”)]
};
{[h: MyCommand=MyCommand+encode(“<i>Hit:</i> “+HitStringNoDamage+”\\n”)]
}
]
}
]

Same thing, but for the multi-attack case.

[h, if(AttackRollRequired==0&&DamageRollRequired==1): MyCommand=MyCommand+encode(“<i>Hit:</i> [DamageRoll] ([NumDice]d[DamageDie]) + [DamageBonus] = <b>[RegularDamage]</b> [DamageString]<br>}\\n”)]

In the odd case where you have no attack roll but a damage roll (such as an auto-hit power that still rolls for damage), we need to display the appropriate string.

[h, if(MissEffectIncluded==1): MyCommand=MyCommand+encode(“<i>Miss:</i> “+MissEffect+”<br>\\n”)]
[h, if(AftereffectIncluded==1): MyCommand=MyCommand+encode(“<i>Aftereffect:</i> “+Aftereffect+”<br>\\n”)]
[h, if(PostAttackEffectIncluded==1): MyCommand=MyCommand+encode(“<i>Effect:</i> “+PostAttackEffect+”<br>\\n”)]
[h, if(SpecialEffectIncluded==1): MyCommand=MyCommand+encode(“<i>Special:</i> “+SpecialEffect+”<br>\\n”)]
[h, if(AttackRollRequired==0): MyCommand=MyCommand+encode(“<i>Effect:</i> “+JustEffect+”<br>\\n”)]

We now display the extra lines if they were included. Note that JustEffect is only displayed in the “no attack roll” case.

[h: FontColor=”green”]

Setting another default here; my at-will powers default to green,

[h, if(Usage==”Encounter”), CODE: {
[h: EncountersArray=getProperty(“EncounterPowersDeclared”)]
[h: FirstEmptyEncounter=-1]
[h, for(i, 9, -1, -1), CODE:
{[h: PowerCheck=json.get(EncountersArray,i)]
[h, if(PowerCheck==0): EncounterPowerNumber=i]
}
]
[h: FontColor=”red”]
[h: NewArray=json.set(EncountersArray, EncounterPowerNumber, 1)]
[h: setProperty(“EncounterPowersDeclared”, NewArray)]
[h: MyCommand=MyCommand+encode(“[h: PowerNumber=”+EncounterPowerNumber+”]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: PowersCharged=getProperty(‘EncounterPowersCharged’)]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: IsPowerAvailable=json.get(PowersCharged,PowerNumber)]\\n\\n”)]
[h: MyCommand=MyCommand+encode(“[h, if(IsPowerAvailable==0), CODE:\\n”)]
[h: MyCommand=MyCommand+encode(” {[assert(1==0,add(‘This power has already been expended.’),0)]};\\n”)]
[h: MyCommand=MyCommand+encode(” {[h: NewArray=json.set(PowersCharged,PowerNumber,0)]\\n”)]
[h: MyCommand=MyCommand+encode(” [h: setProperty(‘EncounterPowersCharged’, NewArray)]}]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: setMacroProps(getMacroButtonIndex(), ‘color=darkgray’) ]”)]
}
]

All right, this is admittedly a complicated piece of code. I’m proud of it, but you’ll have to bear with me.

The first line sets up that we’re only doing the remaining lines for Encounter powers. We then fetch the EncounterPowersDeclared array that I described earlier. This is the one that starts off as ten zeroes.

We then start with the last element of the array (element nine, since MapTool starts counting from zero) and check to see if that last element is a zero. If so, we set EncounterPowerNumber equal to the element number (9).

We then repeat with the next-to-last element of the array (item 8) and check to see if IT is zero. If so, we overwrite EncounterPowerNumber with 8. We keep going through the first element in the array (item 0). Whatever the last non-zero element of the array is, that becomes our new EncounterPowerNumber. And you’ll note that the FOR loop goes to -1 because it doesn’t execute an iteration where the iterator equals the end point. Yeah, it’s weird.

From here, we set the font color of the macro button to red (for an encounter power) and then set the token’s EncounterPowersDeclared array to put a 1 instead of a 0 in this new macro’s spot in the array.

I finish by adding the appropriate new lines to the macro I’m creating. These check to see if the appropriate slot in the array still has the power charged. If so, it de-charges it and moves on. If not, it throws off an error message, saying that the power is already expended.

[h, if(Usage==”Recharge”), CODE: {
[h: RechargeArray=getProperty(“RechargePowersDeclared”)]
[h: FirstEmptyRecharge=-1]
[h, for(i, 9, -1, -1), CODE:
{[h: PowerCheck=json.get(RechargeArray,i)]
[h, if(PowerCheck==0): RechargePowerNumber=i]
}
]
[h: FontColor=”purple”]
[h: NewArray=json.set(RechargeArray, RechargePowerNumber, 1)]
[h: setProperty(“RechargePowersDeclared”, NewArray)]
[h: MyCommand=MyCommand+encode(“[h: RechargeTarget=”+RechargeTarget+”]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: RechargeRoll=d6]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: PowerNumber=”+RechargePowerNumber+”]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: PowersCharged=getProperty(‘RechargePowersCharged’)]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: IsPowerAvailable=json.get(PowersCharged,PowerNumber)]\\n\\n”)]
[h: MyCommand=MyCommand+encode(“[h, if(IsPowerAvailable==0 && RechargeRoll<RechargeTarget), CODE:\\n”)]
[h: MyCommand=MyCommand+encode(” {[g: assert(1==0,add(‘Recharge roll = ‘, RechargeRoll, ‘. The power fails to recharge.’),0)]};\\n”)]
[h: MyCommand=MyCommand+encode(” {[h: NewArray=json.set(PowersCharged,PowerNumber,0)]\\n”)]
[h: MyCommand=MyCommand+encode(” [h: setProperty(‘RechargePowersCharged’, NewArray)]}]\\n”)]
[h: MyCommand=MyCommand+encode(“[h: setMacroProps(getMacroButtonIndex(), ‘color=gray’) ]”)]
}
]

This is the same kind of thing, but for recharge powers. The button font is purple instead of red. And when it comes time in-macro to see if the power has been expended, there’s also a recharge roll made. If the roll succeeds, then the power proceeds.

[h, if(Usage==”Not Applicable”): FontColor=”black”]

If we’re talking about a trait rather than an at-will or encounter or recharge power, then the button text should be black.

[h: MacroProps='{“autoexecute”:1, “label”:”‘+MacroName+” “+TargetRange+'”, “group”:”‘+ActionType+'”, “sortBy”:’+SortOrder+’, “fontColor”:”‘+FontColor+'”, “command”:”‘+decode(MyCommand)+'”}’]
[h: createMacro(MacroProps)]

And at long last, we actually build the macro! We stick together the JSON object that contains all of the macro properties, including decoding the MyCommand string that we’ve been building for the past 150 lines of code, and we then create a macro with those properties!

Whew – I need a drink or something.

I’m happy to say that this thing works really, really well for me so far. I’m sure I’ll tweak it over time, but I’m excited about it.

Congratulations if you’ve made it this far!

– Michael the OnlineDM

Review of Heroes of the Elemental Chaos

I’m continuing my recent habit of D&D book reviews. I loved Heroes of the Feywild. I wasn’t all that crazy about Heroes of Shadow.

Heroes of the Elemental chaos comes in somewhere between those two for me. As I said on Twitter, “It’s… okay.”

Chapter 1: Into the Maelstrom

This is the all-fluff chapter, and I think it’s awesome for dungeon masters who want to involve adventures in the Elemental Chaos. We learn about the nature of elemental magic and how it relates to the power sources. We get a few brief write-ups of locations in the Chaos (City of Brass, Kaltenheim, etc.).

Then we get into elemental-touched races. For those players who were hoping to get more racial options in this book, this is where you get disappointed. We get some ideas for being elemental-origin dragonborn, drow, dwarves, genasi, half-orcs and orcs. Then a paragraph each on how other races might be elemental-touched. Good fluff if you’re going for that kind of character concept, but this is not a crunch section.

The meaty, most interesting part of this chapter (at least for me) is the second half that gets into stories of the primordials. I’m new to D&D as of Fourth Edition, and I haven’t read the Plane Below or Manual of the Planes. So, whenever I’ve seen references to “primordials” in other books I’ve never really known what they meant.

Now I do. I know who Yan-C-Bin and Imix and Ogremoch and friends are. I especially liked the massive table at the end of the chapter that documents all 74 “known primordials” including those from places like the Forgotten Realms and Dark Sun. Useful stuff, and great for inspiration for high-level baddies.

Chapter 2: Character Themes

I’ve only recently begun using themes in my game, specifically the setting-focused themes for my ZEITGESIT campaign. I love the potential for themes to tie characters to settings; I’m not as crazy about more generic themes like the ones we get here. Still, some of them are interesting.

We get ten themes. Four of them correspond to the basic elements (air, earth, fire, water) plus one for “elemental metal”. We get a monk-focused theme (Elemental Initiate), a demon theme (Demon Spawn), a general “from the chaos” theme (Moteborn), a Primordial Adept and a Janissary (servant of genies).

The pure elemental themes are fine if you just love the elements. I didn’t find them especially exciting, but they’re all right. The Ironwrought theme (elemental metal) just felt odd to me, but it’s a fine theme.

Demon Spawn can work if you want a character who struggles against a dark nature. Not my own cup of tea, but some people might enjoy it.

The coolest theme in my opinion is the Janissary. You’re a servant of genies, and the back story is well done. The mechanics mainly give you a bonus to charging, but the flavor has a lot of potential for character hooks.

Chapter 3: Classes

No brand-new classes here, but we get some new options and new builds.

The druid sees support for both the Sentinel Druid (a Living Zephyr companion for the Druid of the Wastes) and the pre-Essentials Druid (Primal Wrath aspect and new powers at all levels).

The monk gets two new monastic traditions: Desert Wind (flurry lets you shift a square and can give a target -2 to attack) and Eternal Tide (flurry has reach and pulls the target). We also get new powers at all levels – fire- and water-themed.

The sorcerer gets a whole new build – the Elementalist. This is what some might call the “Essentialized” sorcerer. It does not get daily powers, and its encounter powers are spelled out for it. You pick an element and get your choice of two at-wills tied to that element. This is a really good build for someone who just wants to blast things with magic. And it’s a pretty darn good striker, too!  If you go with fire, you have an at-will single target attack that deals 1d12+Cha+Con+1d6 fire damage at first level, and another at-will that deals 1d10+Cha+Con in an area burst 1 and creates a zone of fire.

The regular sorcerer also gets new utility power choices, but no attack powers.

Warlocks get a new pact option – the elemental pact. You randomly get a new elemental affinity after each rest, which affects the type of damage you deal with certain attacks. There’s also a new option for Hexblade Warlocks, an elemental pact, which comes with elemental allies to summon at random at level 9 and 25. The regular warlock does get new attack and utility powers, too.

The wizard gets a new build – the Sha’ir, which I believe is originally from the Al Qadim setting. It’s a lot like a regular wizard, except that it has a Gen Servant (basically a familiar) who goes and gets spells for it each day rather than pulling them from a spellbook. This gives the Sha’ir a lot of flexibility (the Gen can get any appropriate-level spell), and I like that the player is encouraged to think about their Gen Servant from a role playing perspective, too.

Sha’ir spells are available to other wizards, and the at-wills don’t deal any damage directly. Several of them are nods to spells from older editions, like Alter Self and Reverse Gravity. I especially like Crack the World at level 29.

Chapter 4 – Elemental Options

This is the “everything else” chapter. It starts with ten paragon paths; my favorite is the Prince of Genies, who has a Genie in a Bottle to help it out. This path also gives us Limited Wish as a utility power – and compared to what I understand of earlier editions, this is a very, very limited wish!

There are only two epic destinies – Emergent Primordial, in which a primordial is basically taking you over from within, and Lord of Chaos, which has so much potential but a REALLY disappointing level 26 and level 30 power. Jeremy Morgan of Stormin’ Da Castle and @TriskalJM on Twitter was similarly disappointed when we talked about this on the Tome Show (episode forthcoming), so he took a crack at rebuilding the Lord of Chaos epic destiny. I chimed in with some edits of my own, leading to this:

-Level 21: As written, for now, though I’d personally like something cooler than the enhanced magic weapon / armor / neck slot.

-Level 24: As written

-Level 26: Upgrade the created zones to hazardous terrain as an improved Whim of Creation:

-Level 30: An improved Master of Chaos feature:

Whenever you bloody an enemy or score a critical hit against an enemy, roll a d6.
– 1: You teleport to any location within 10 squares; if the destination square is occupied by another creature, that creature teleports to your former location.
– 2: You gain 20 temporary hit points.
– 3: The enemy immediately takes an at-will action of your choice.
– 4: You become invisible until the end of your next turn and may immediately make a Stealth check to become hidden.
– 5: One ally within 10 squares immediately takes an at-will action of your choice.
– 6: The enemy makes a saving throw. If the saving throw fails, the enemy dies. If it succeeds, the enemy is dazed until the end of your next turn.”

After the epic destinies, we get feats. Strangely, we get Tome Expertise even though the Sha’ir doesn’t use tomes. Also strangely, there are a couple of illustrations of tome-reading Sha’ir earlier in the book. Anyway, we get a Born of the Elements feat that mainly serves to open the door to a bunch of other elemental feats. The most interesting of these is the Elemental Companion, which is similar to a beast companion. As with the Gen Servant, elemental companions are encouraged to be played for role playing potential. Personally, I’d let someone take the Elemental Companion feat without first taking Born of the Elements if they wanted it.

Finally, we get some magic items. Demonskin Armor has a good marriage of flavor and mechanics (wearing the skin of a demon makes you more intimidating). We get one weapon per element. We get a few tomes, including the Demonomicon (yes, as a tome implement). There are primordial shards, which I’ll admit I still don’t really understand flavor-wise. And lastly, we get Elemental Gifts, which are similar to Divine Boons. My favorite is the Gift of Chaos, which has an interesting random effect once per day when you roll a 1 or 20 on an attack roll or saving throw; I’d personally have it happen EVERY time you roll a 1 or 20 on an attack roll or saving throw. Yay for chaos!

Closing thoughts

As I said, I fell that Heroes of the Elemental Chaos is… okay. It’s great for DMs and players who want some flavor for elemental campaigns and primordials. The class crunch is available in DDI, and the class fluff isn’t worth the price of admission by itself. I definitely enjoyed Heroes of the Feywild more; the Bard’s Tales from that book were more entertaining and flavorful to me than the Elemental Viewpoint sidebars that pepper this book, providing commentary from various elemental denizens.

It’s not a must-buy, but it’s not bad.

– Michael the OnlineDM

Dragons and tentacles and flying sleds – oh my!

I don’t write about my long-running Friday night War of the Burning Sky online game nearly enough. It’s time to correct that.

Spoilers ahead for EN World’s War of the Burning Sky campaign – specifically, the end of Adventure Six.

This past Friday night, I gathered via MapTool and Skype with my group for our regular D&D game. The party was at 18th level, and they found themselves high up  in a castle with a raging firestorm above it (which they had held back with a magic item). The top level of this castle contained a rift to a fiery plane. They were here in search of a powerful magical torch.

“Katy, bar the door!”

During the last session, the party had fought a legion of fiery undead soldiers and explored the rest of the top level of this castle, which was reachable only via a hydraulic lift. As this session began, they had finished most of their exploration, when they heard the lift start to rise. The wizard/swordmage decided to cast Arcane Lock on the elevator door. It takes 10 minutes to cast. Uh oh!

So, I began by asking everyone what they were doing while the wizard/swordmage was casting her ritual. Some were standing guard near her, while others were loading treasure and people into this magical flying sled they had discovered. At this point, a little halfling NPC who had seemed rather dumb for the whole adventure popped into the room through a wall and started animating a dragon skeleton. And wouldn’t you know it, the whole “dumb little halfling” look was an illusion; the creature revealed itself to be a tentacled monster called Deception (a trillith).

Let’s roll initiative!

The fight began with most of the party in or near the cart in the room with the Dark Pyre, while a couple of them were through the banquet hall and down the hallway leading to the elevator doors. The animated dragon and the tentacle monster rather neatly cut the party in half.

Now, keep in mind that most of the party was entirely out of healing surges at this point, with no significant daily powers left. Their goal was escdape: Use the magical flying sled to burst through a window-wall in the Dark Pyre room and fly to safety, all before whatever ba guys were in the elevator made it to the top.

Our brave dwarf fighter threw himself at the dragon to try to keep it at bay to give the cut-off characters a chance to get to the sled. Unfortunately, the tentacle monster phased through some walls and started dominating the swordmage.

I used the house-ruled version of Dominated in this game that I’ve been playing with for a few weeks (with great results in my opinion:

OnlineDM’s Domination

  • When a character becomes dominated (save ends), it immediately takes an at-will action of the dominator’s choice (including a charge, a move, dropping to the ground – or of course an at-will attack power).
  • The character is dazed. On its turn, it gets to take one action of its own choice, just as with a normal daze.
  • Whenever the character fails its end-of-turn saving throw against the domination, it immediate takes an at-will action of the dominator’s choice.
  • If the domination is not “save ends”, then the dominated character immediately takes the at-will action and then is just dazed until the domination wears off.
This way, the dominated character still gets to do some good stuff on their own turn, but they’re also potentially wrecking their allies at the same time (which, you know, is fun). It worked out really well, in my opinion.

“I teleport out the window!”

Anyway, after some near-blinding of the bad guys, the party made its way to the cart, with the dragon and Deception hot on their heels. The dragon’s breath weapon then tried to dominate a whole bunch of folks, including our genasi pyromancer. As a free action, he used a power that would remove him from play and let him reappear within 10 squares at the beginning of his turn – still dominated. He reappeared OUTSIDE the big window that the sled was going to smash through; this left him 100 feet off the ground, above an invading, hostile army.

He used his one action (since he was dazed, thanks to my domination) to swap in Feather Fall, which saved him from death, but put him on the giant bear skull sculpture above the castle entrance. Some of the army members were eladrin, who teleported up onto the skull with him. The pyromancer quickly surrendered, realizing he was in a bad spot.

Meanwhile, back up in the castle, the party expended tremendous effort to get the warlock’s hell hound pet out of the clutches of the tentacled Deception and into the sled. The swordmage/wizard Thunderwaved the monsters away and the dwarf rushed out of the cart, hauled the hound onto his shoulders (burning himself in the process) and rushed back in.

Our warlock hit the gas on the magical flying sled and smashed through the window-wall. Whee!

Someone asked, “Hey, does smashing through the wall cause rubble to fall down on the eladrin who’ve captured our pyromancer?”

Excellent idea! The rubble hit the pyromancer as well, and the sled spiraled down to a stop next to the captive. Some fast talking by the swordmage convinced the eladrin to hand over the badly-wounded genasi.

“Not without my wyvern!”

Only one problem remained: The party had left the dwarf’s wyvern mount tied up outside the castle when they came in, and poor Wendy was now trapped in a cage by the army. I decided this army was cruel, so I had a half-orc deal a killing blow to the wyvern, right in plain sight.

The PCs asked if they could fly the sled so that it would smash into the half-orc – oh heck yes! The evil soldier went flying off the edge of the cliff on which the castle was situated, plummeting to his death 1,000 feet below.

 

With the dragon in pursuit, it seemed clear that it was time to take off and fly away… but our fighter couldn’t just leave his poor mount’s corpse to the evil invaders, so he grabbed onto the cage.

“Where did that thing come from?”

No problem! But now the sled was flying at half speed, and the dragon was gaining on them. To make matters worse, it turned out that the tentacle monster had used a power when the sled was back in the castle that let him invisibly teleport into their midst on the sled, leaving an illusory duplicate of himself behind. And now that the sled was flying away with a huge cage full of wyvern body dangling behind it, a bunch of tentacles came out of nowhere and started grabbing the party.

Our swordmage decided to turn once again to Thunderwave, shoving the tentacled beast out of the sled – but oh crap, that thing can fly!

There was only one thing to do, with the tentacled Deception bearing down and the dragon coming on from a distance: Our fighter tossed the wyvern cage at Deception, sending the thing plummeting to its doom.

No longer weighed down by the cage, the sled was able to fly away (with our warlock keeping her pet outside of the sled itself so that it didn’t burn the whole party to death), seeking safety, an extended rest, and a level up to 19.

Whew! Have I mentioned that my players are awesome? Thanks everyone!

-Michael the OnlineDM

Interview with OnlineDM on Skyland Games

Here’s something fun: I was interviewed on another blog!

Thorynn over at Skyland Games reached out to me for an interview about online gaming. I thought he asked some great questions, and I enjoyed answering them.

 

Gee, I feel like such a celebrity now. <blushing>

-Michael the OnlineDM

Genghis Con 2012 Recap

As I sit down to write this post Monday morning, I’m exhausted and happy for the past three-plus days I spent over the weekend at Genghis Con 2012. The Denver Gamers Association puts on two conventions each year: Genghis Con over Presidents’ Day weekend, and TactiCon over Labor Day weekend. I think they’re very smart in having each convention begin Thursday night and end Sunday evening, with Monday off for all of us to recover before we have to go back to our day jobs on Tuesday after the holiday.

Last TactiCon, I decided to be a Marathon GM and run games in all nine time slots (Thursday evening; Friday morning, afternoon and evening; Saturday morning, afternoon and evening, and finally Sunday morning and afternoon). For Genghis this year, I decided I wanted to run just three sessions (of games I’d written myself) and then play the rest of the time. I signed up for two specific games to play in – a Dresden Files game and a Hero System game based on Dr. Horrible’s Sing Along Blog. I wanted to keep my options open for the rest of the time.

I received an email a few weeks before the convention that the Dr. Horrible game was canceled. Oh well. Then I got an email two weeks ago letting me know that the person who was supposed to have been coordinating the D&D 4th Edition games at the convention (mainly Living Forgotten Realms) had gone incommunicado, and lots of games needed DMs. I was asked to help out.

So, I went from running three slots to running seven. Seven slots, seven different games. Two of them were Ashes of Athas, and I knew next to nothing about Dark Sun. Two were paragon tier LFR games (one of which, thankfully, I had run before and so already had prepared in MapTool). A couple of weeks of frantic prep work followed, including taking last Thursday off work to get ready. And then away we go!

Thursday

I got to the convention at the Red Lion Hotel around 6:00 PM to pick up my badge. The awesome RPG coordinator had arranged for me to get a refund for the sessions I had originally signed up to play in but was now running instead. You rock, Linda!

This was one of the two times in the convention when I was a player rather than a DM. I jumped into an LFR game that could be run for characters of levels 1-10, but the table has to agree on a four-level band. I really wanted to play Factotum, my beloved bard, who was fifth level. Unfortunately, there were a couple of other players who really wanted to play their 9th and 10th level characters. And thus I turned to Rhogar, my first-ever LFR character – a half-elf paladin of Ilmater. I hadn’t played him since Genghis Con 2011.

The adventure itself was set in Elturgard, and I should have known better. Rhogar’s last adventure was the Paladins’ Plague adventure in Elturgard, and I ended up having the least fun ever with that adventure. This adventure was somewhat similar, in that it was a very dark adventure with some no-win plot choices at the end. I left feeling victorious in the adventure, but kind of bummed out at the same time.

Friday

Friday was the day I was originally scheduled to run games, and I brought my projector rig on down to the convention. I was running the Staff of Suha trilogy (The Stolen Staff, Tallinn’s Tower and Descent Into Darkness). This was the second convention in a row where I’d run all three games, and I was excited to see that I had three players who would be involved in all three games and everyone else would be involved in two of the three. A fun twist in this particular series is that one of the players needed a fifth level character to play, and I offered to let him play Factotum the bard, which he totally ran with.

Things went pretty well in The Stolen Staff. I was happy that this party became the first to find the secret entrance to the orcs’ keep via the garbage pit, and the encounter down there was fun. It did take a long time to get to that point, though, so I ruled on the fly that the secret entrance let the party bypass most of the skill challenge through the stronghold. The fight in the orc temple was also cool, as this party was the first to let the orc shaman live more than a couple of rounds, which made the other orcs much more deadly. The fight against the orc leader in the end was only so-so; I still need to work on making him more interesting.

Tallinn’s Tower went smoothly enough, with the party eventually figuring out how the puzzle on the first floor worked, and then disabling the trap on the second floor very quickly, which made that fight much easier. The third floor got a little bit brutal, but the party whomped on the leader in time to prevent folks from turning to stone. Barely.

Descent Into Darkness went just okay, I’d say. The party solved the rune puzzle quickly, but not so quickly as to be trivial. They were a little bit tempted by the decoy sword but moved on before getting into too much trouble. They also took more of a negotiation approach with the halflings before Factotum decided to attack. That battle was more lethal than I intended it to be with the thieves; I need to tweak those guys. The climax fight against the beholder was a little anti-climactic, as the beholder got held in Bigby’s Icy Grasp and stayed there for three rounds. The party fought well, though, grabbed the Shield and got out of there, leaving the beholder alive (as most parties have done).

There was one player at the table who wasn’t having as much fun as the rest, and I tried and failed to get him more excited about the game. This was a bummer, as I like the guy, but he wasn’t having a great time. Oh well; I can’t blame anyone but myself, since I wrote the modules!

Saturday

Saturday was Ashes of Athas day. I had prepped my two sessions a couple of days before the convention and had thoroughly read one of them, but I had to finish reading the second during the hour-long break between sessions. I got there, though!

The Ashes of Athas modules are definitely more role-play heavy than most LFR modules, and that demands the right sort of players (and a prepared DM, which I just barely was). Fortunately, I had an awesome table. They were really into Dark Sun and spent way more time in-character than I’ve ever experienced before in D&D. I could tell that they really saw the various NPCs as actual characters, not just names and stat blocks. I felt successful when I realized that they truly hated one NPC, grokked another’s focus on the bottom line (her quote about profits being down 18% became a recurring bit), felt sympathy toward another, etc. The combats were only so-so, but I don’t think anyone cared – they loved the world. They were actually possessive of me as their DM, too; when we were talking about the possibility of players having to get moved around to other tables in the afternoon, they insisted that they get to keep me. That’s a good feeling!

Unfortunately for them, I was not running the final part of the Ashes of Athas trilogy in the evening; instead, I was playing a Dresden Files game. I’ve heard lots of great stuff about the game and wanted try it out. As it turns out, the GM was actually running a game using the Dresden Files rules in a different setting. The abbreviation for the setting is UA, and I thought the GM said this stood for “unearthed arcana” but that doesn’t seem right. Anyway, it was a setting with an occult subculture, and our characters were insiders of that culture.

Impressively, we did world creation, character tweaking, and a full adventure in the course of a three-hour session! As a party, we established three groups in Denver that had secret occult plans:

  • A biker gang in Cheeseman Park that was seeking an item called The Devil Rose in order to summon the devil to serve them
  • A group of metaphysical book shop owners who were focused on cleaning up the Cherry Creek Reservoir (where occult groups would dump bodies) and wanted to find the Cagliostro Seal, which would allow them to unleash nature and destroy civilization
  • A group of LGBT activists who maintained Elitch Gardens amusement park as occult neutral ground. Led by RuPaul, they were seeking the Alchemical Eye, which would give them full knowledge of all goings-on in the city

And we’re off! My character managed to get himself firebombed when he tried to chat up a book shop owner to warn her about the biker gang, but he only sprained an ankle. I learned how the Fate system works, doing some role playing to earn fate points. Getting to play NPCs and establish in-world facts as being true was a very cool mechanic. I don’t think I’d want to play a “story game” like this all the time, but it would be a fun change of pace now and then. I will note, however, that you need a DYNAMITE GM in order to make this work. The GM has to be able to make up all kinds of stuff on the fly, and our GM definitely did not disappoint. He rocked.

Sunday

For the final day of the convention, there were only two sessions, and I was running paragon-level LFR games for both of them. The first, CORE 2-2, is a game I had run before at Enchanted Grounds. I arrived just before the start time and discovered that the mount for my projector had popped off. I only needed a screwdriver to fix it, but I didn’t have one. Fortunately, one of my players was nice enough to go out to his car to get one, and the game went off without a hitch. That guy definitely was awarded a bonus point! (And writing this has reminded me to go put a screwdriver in my projector bag.)

My afternoon game had a great table of players, a number of whom I had DMed for at past conventions (in a couple of cases, with the same characters). This was NETH 3-3, and I have to say that this was WAY more fun than I expected it to be. I loved running this module. The players did some creative thinking during a skill challenge, and the combats were super-interesting and very well balanced. The party could have played at either level 12 or level 14, and they were ultimately happy they chose 12 (14 might have killed them).

My favorite moment of the convention came in this game, where a fighter decided he wanted to climb onto a table, make a running leap onto a bookshelf 10 feet away and then drop down the far side in order to attack an enemy. The jump was a masterful success, but since he wasn’t trained in Acrobatics, the fall down the far side of the shelf left him on his butt. And just to be a rat-bastard DM (to a player I know and like and whose character was plenty tough enough to take it), I ruled that the fall off the shelf involved the PC moving through a threatened square without shifting (falling from two squares up, next to a bad guy, down to the ground), which provoked an opportunity attack. We had some great laughs at this table, and it was good to end the convention on a high note.

After the sessions are done, the organizers always have an appreciation ceremony for the GMs, and I managed to pick up a free copy of Masks, a book of NPC ideas from Gnome Stew. Good stuff, and I can’t wait to use it!

And now I can stop my frantic convention prep work and relax. Ahhh!

-Michael the OnlineDM

ZEITGEIST Session Two: Recap and Review

Previous session: Session one

To avert war

Session two came later in Christmas week, two weeks later in-game. The PCs were invited into their boss’s office, where they met the foreign minister from Risur’s historic rival, Danor (the tiefling country). Things started getting hard to follow politically, but in a nutshell the Duchess had disappeared off the Coaltongue during the chaos of Session One and had resurfaced a week later leading a force of Risuri rebels to take over Axis Island, an island held by Danor. Ultimately her goal seemed to be to start a war between Risur and Danor, and the Danoran foreign minister wanted to head that off. So, the PCs were tasked with being the “B team” of RHC agents, traveling with an “A team” from out of town. They were going to help stop the Duchess.

The interaction with the Danoran foreign minister was a little odd; there was a puzzle for the PCs to solve that, in retrospect, seems pointless (though I think I ran it poorly). That’s a minor quibble.

Meet the A Team

Anyway, the “A team” was presented in the adventure with brief bios, talking about character quirks of Seven Foot Dan and the illusionist who leaves an image of himself in boring meetings while he leaves to get a snack, that sort of thing. The party gets to interact with this other team as they sail toward Axis Island. Naturally, being genre savvy, my players immediately assumed that their companions were doomed and the PCs would soon be in charge.

Yep.

The mission involved swimming through an underground tunnel on Axis Island, climbing through a mine, traveling overland to a fort, using a Passwall scroll to get inside, getting to a lighthouse, opening a sea gate to the fort’s harbor, and then using a Pyrotechnics scroll to signal the Risuri fleet to sail in and take the island. Naturally, the A team was mostly killed in step one, swimming through the tunnel, and the PCs had to take over.

The mine was inhabited by a paranoid Danoran whom the PCs were able to eventually convince to stop shooting them. They acquired a magical coin in this mine that allowed their scout character (who fancied himself as being Batman) to have a jump speed equal to his walk speed while on the island. This will become important later, especially in Session Three.

Traveling overland was another skill challenge, but handled as individual scenes – definitely my preferred style of skill challenge. The most noteworthy of these was when the party spots a gigantic headless iron golem lumbering through the woods and hides from it.

Into the fort!

Once the Constables arrived at the outer wall of the fort, getting through it with Passwall was a piece of cake. The Batman PC then climbed onto a roof and jumped from building to building, helping the folks on the ground avoid the Duchess’s patrols. Eventually they made it to the lighthouse out on the sea wall that contained the controls for the sea gate.

This triggered only the second full-on combat of the adventure so far, which took place near the end of the second session. (Zeitgeist is not ideal for players who just want to kill things and take their stuff, in case that wasn’t clear.) The lighthouse was defended by rebel soldiers, including a wizard with a pet drake. I appreciated that the combat had some good 3-D elements, with the PCs starting on a wall about 25 feet above the water. There was a ship docked beneath the wall, with ramps leading to the top. The lighthouse was obviously a vertical feature, with stairs leading up to a porch and then the tower itself having multiple stories. There were lots of opportunities to push people off ledges and so on.

Once the lighthouse was secure, the Constables found the controls to open the sea wall and they signaled the fleet to come on in. They stayed put while a land/sea battle broke out. Eventually one of the higher-ranking naval officers, Captain Rutger Smith of the RNS Impossible, came to chat with them. I only mention Captain Smith because he’s referred to once in the adventure as Captain Impossible; I have no idea if that was just a typo or what, but I love that name! “Captain Impossible; hero of the galaxy!”

Hello little buddy

Captain Smith handed out cigars but said not to smoke them until the whole mission was accomplished: Securing the fort and taking the Duchess into custody. She was holed up in a tower in an inner fort. Anyway, the PCs were given a detachment of soldiers to help them out, which I ended up referring to as their “little buddies”. These were basically minions who tagged along with the PCs and would follow orders. They could shoot a gun once per encounter, auto-hitting. I asked the PCs to name their pals, which gave us Pop Tart, Princess Sophia, Robin (Batman’s buddy, of course), Watson (another PC styles himself as being like Sherlock Holmes) and Food on Legs (companion of our vampire). Good times.

What the heck was that thing?

As the party was relaxing in the lighthouse, waiting for the military to finish doing their thing, they spotted a commotion on a Risuri ship across the harbor. The ship burst into flames, and they spotted a figure jumping from the ship to the sea wall and running along the wall before becoming impossible to see in a cloud of smoke. What to do? Go after it!

Of course, this required navigating the sea wall to get back to land, but the sea wall was being defended by the rebels and bombarded by the Risuri navy. This particular course of action was not spelled out in the printed adventure, so it was time to improvise a fight. And that’s where we decided to end Session Two.

This session didn’t “pop” as much as the big bang fight on the ship of Session One, but it was still fun. I enjoyed role playing Seven Foot Dan and the gang for sure!

-Michael the OnlineDM