MapTool – Improved macros and properties

I’ve written before about some of my basic MapTool macros and the properties that I use in my own campaign.  I’ve also mentioned that there are some dedicated people out there who have written campaign frameworks that are ready-made for Fourth Edition (though I’m having more fun creating my own).

Now that I’ve played through a session with more players (eight!) and another player who already knew a lot about MapTool and had some tips for me, I’ve changed around my basic macros and properties.

First, the download links:

So, what’s new?


I’ve added some new properties since my first pass, and changed some others around

  • I’ve made the defenses all appear on one line on the character sheet pop-up (saves space and is easier to read)
  • I show hit points as “Current/Maximum + Temp” all on one line (so it might look like 22/34 + 0)
  • I broke down and added a He/She pronoun property
  • I added an Armor Penalty property so that default skills would be easier to calculate (you still have to add racial/class bonuses and training manually)
  • I got rid of the Melee / Ranged properties and went with Weapon 1 / Weapon 2 / Weapon 3 (which will work in case I have a dual-melee wielder who also has a ranged weapon available)
  • For monster properties, I added a flag for recharge powers that starts at 1 and turns to zero after the power’s first use
  • Also for monsters I added a line that will let me add text to the monster’s character sheet listing any trained skills

No huge changes there – just a few little things that make things nicer.  As an example, take a look at a character sheet with my old properties versus new:

Old character sheet

New character sheet


My macros are just overall better now, in lots of little ways.

  • First, I discovered that I don’t have to use the getProperty function every time I want to get the value of a property in a macro – I can just use the name of the property!  So, instead of [h: HP=getProperty(“HitPoints”)] and then using HP as a variable, I can just use HitPoints as a variable in my macro without having to get its value.  This makes my skill check macros in particular a lot simpler: Acrobatics = <b>[d20+Acrobatics]</b>
  • I switched to the new properties for weapons, of course.
  • I took into account the fact that on a crit a magic weapon deals an extra die of damage PER PLUS.  Easy enough – the bonus damage is now [CritBonus=roll(Enh,CritDamageDie)] (where Enh is the weapon or implement’s enhancement bonus – this used to just be 1 in my old macros)
  • I edited the structure of my attack macros so that all of the lines I need to edit are right at the top (in general – some attacks need more customization).  This means that I use a variable for the name of the attack, another variable for the name of the defense that the attack is going after (AC, Reflex, etc.) and another variable for the text that accompanies the damage (such as “damage, and the target is slowed (save ends).”)  This makes it much more efficient to set up new character attacks, be they PCs or monsters.
  • I learned to use the input() function to make the boxes that pop up to ask a player how many hit points they gained or how many targets they’re attacking a little bit nicer looking.  I also use the abort() function to let a player back out of one of these powers without getting an error message.
  • Most excitingly, I’ve changed the initiative macro to first of all let each player roll their own initiative, and second to automatically add them to MapTool’s built-in initiative tracker.  It’s not as slick as the D&D 4e Combat Tracker (which I need to talk about in a future post), but it’s so convenient to have it right there in MapTool.

The more I use MapTool, the better I get at it.  Now I just need to actually set up my next adventure for this Friday night!

6 thoughts on “MapTool – Improved macros and properties

  1. I’m using MapTools 1.3b87, and I have to use getProperty() instead of the property name. Do you know if this has changes, or, perhaps I’m doing something incorrectly?

    • I’m not sure off the top of my head, but I doubt if it’s a change in build 87 (I can say at the very least that it still works in build 86, which is what I currently use). Are you trying to get a property from a token other than the token on which the macro resides? If so, you’ll have to use getProperty().

        • Yes, save the file and then open it within MapTool. If it’s a Properties file, you’ll load it in MapTool by going to Edit – Campaign Properties – Import and then navigating to the file. If it’s a campaign file, you’ll go to File – Open Campaign. If it’s a token, you just browse to its location in the Resource Library panel in MapTool (make sure you’ve added the directory where you’re storing the token to the Resource Library using File – Add Resource to Library), then dragging the token to the map.

          -Michael the OnlineDM

  2. It’s really odd; what I’ve found is that in some places I can use the name, and in some places, I can not, I must use getProperty(). So I try the name first, run the macro, and if I get a popup asking for the value, I know I must use the getProperty(). Thanks for the reply, and the great info!

Leave a Reply