Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
Create a free account

Trying to solve the Monster problem - avoiding creating hundreds of macros or character sheets. API solution?

As a GM, I find I'm spending an inordinate amount of time creating macros for my monster attacks.  Making a character sheet for each monster or monster type seems too painful, so I've just been creating macros for the attacks, but my macro list is getting unwieldy, and I have to hunt through the list to turn off and on the right macros for each encounter.  It really seems like there should be an easier way to have a list of monster attacks that I can easily update and reference. I've spent a good while looking for a solution to the problem, and as far as I can tell, there is no good one, unless there's some new feature that my searches haven't turned up yet. In MapTool, I had an attack macro on each monster token that would save the attack bonus and damage values the first time you used it and then saved it to the token so that future attack had the option of creating a new attack or using one of the previous ones.  Roll20 doesn't let a macro update the attributes, and even if it could, doesn't have the functions to create or parse the saved attacks.  It sounds like this might be doable with the API. I tried using a single-sheet solution:  Have a DM character sheet with the attacks saved as attributes.  Then have macros that use the token name to pull the attribute for that token, but I couldn't get the nested references to work.  Again, this might be solvable with some API script magic, but I'm not sure. A pure API solution seems like it might be the best bet.  Since I can't use AJAX to reference data I've stored elsewhere (which sucks, but that's a security nightmare, so understandable), I think I'd either have a big JSON structure to store all the attack types as part of my script, and then just update it.  As far as I can tell this is the tidiest solution given Roll20's limitations. I'm still a bit flabbergasted that such essential functionality is not only missing from the Roll20 but also the issue is so difficult to work around.  Am I missing something obvious or us upgrading to API or switching so some other VTT the only solution?
What system are you using? There are scripts for parsing stat blocks for both 5e and Pathfinder (maybe others?)
The Aaron
Roll20 Production Team
API Scripter
There are some API solutions that deal with importing information for various systems. &nbsp;They largely work by automatically filling in the character sheet for a given system and setting up some abilities as Token Actions. However, I don't think the API is necessary to ease a large part of your pain with this. &nbsp;I'll give a summary of how most people handle this first, then dive into the details of each step. Create a Character for each monster. Add Abilities as Token Actions. Create a 'Mook' Token for that monster. Add the 'Mook' Token to the monster Character. Create a character for each monster. In the Journal Tab, make a character with the stats and details about a monster, for example a Goblin. &nbsp;All goblins will be this character. See:&nbsp; <a href="" rel="nofollow"></a> Add Abilities as Token Actions. On the Attributes and Abilities tab of the Character, create an ability for each of the monster's attacks. For our Goblin, we might add a Spear attack and Short bow attack. &nbsp;You can also add special abilities, like Stealth, etc. &nbsp;Make sure that Token Action is checked for the Abilities. &nbsp;Token Actions show up in their own bar when a Token is selected. See:&nbsp; <a href="" rel="nofollow"></a> Create a 'Mook' Token for that monster. Drag a token onto the table top to represent your monster. &nbsp;Double-click the token (or select it and click the gear) to bring up its settings. &nbsp;In the Represents Character field, choose your monster Character. &nbsp;You can set the Bars to reflect whatever you want. &nbsp;For my Goblin, I set the Bar1 to represent the Gobin's AC. &nbsp; IMPORTANT : &nbsp;Do not set the HP bar to represent an attribute on the monster. &nbsp;If you do, then every token will share the same hit points. &nbsp;Put in the hit points min and max numbers, but don't set the represents to anything. &nbsp;Close the Token Settings. See: <a href="" rel="nofollow"></a>... See:&nbsp; <a href="" rel="nofollow"></a> Add the 'Mook' Token to the monster Character. After closing the Token Settings, shift-double-click the token to bring up it's Character (or open it's character through the journal). &nbsp;Click Edit in the top right corner, then under Default Token click Use Selected. &nbsp; Note : &nbsp;If you ever want to make changes to the default token (say, you want to have it start with a given status marker, or a particular aura), you will need to repeat this process in order to have all new copies you drag into the table start with those changes. See:&nbsp; <a href="" rel="nofollow"></a> With this setup, you can now just drag monsters from the Journal onto the table top. &nbsp;Selecting a given Token, like our Goblin, will show it's Attacks as buttons across the top of the screen. &nbsp;Selecting a different token will show different attacks. &nbsp;Each monster pulled in will have it's own pool of hit points, and you'll have one Character per monster. Depending on how uniform your game system is, you could make a Base Monster character, then when you want to create a new monster, just duplicate it (Open the Character, click Edit, click Duplicate) and Edit the abilities to reflect new attacks. Hopefully that helps. &nbsp;If it doesn't, definitely post back and let us try to find some other ways to help!
The Aaron's advice is great, but if you really don't want the make up character sheets then I think you may be able to do it with just the bubbles on the tokens. I assume you are using the one of the bars for health and another for AC. That leaves one bar that could be used for your attack and damage bonuses. In the extra bar there is a value and a max value so one could be used for the attack and the other for the damage bonus. Lets use Bar3 for this example. Try a macro like this /emas @{selected|token_name} strikes! /w gm Attack: [[1d20+@{selected|bar3}]] /w gm Damage on a hit [[1d8+@{selected|bar3|max}]] Very simple and quick and will work for basic attacks. You could even "show as Token action" to it show up for every token that you select.&nbsp; I hope that helps. Happy gaming.
Sheet Author
Personally I use either a "generic" NPC/monster character(boilerplate method) that includes the most basic ability macros like melee and ranged attacks, saves, initiative, perception, etc. and/or I import a statblock from the PRD(PF) that fills most of the sheets fields/attributes automatically and even adds some basic attacks. &nbsp;I set these up as Aaron mentions above. &nbsp; I realize the API is only available to Pro level, so that may not be accessible to you, but the first method works well at any level. I like the simplicity of Ed's example and I might suggest including a query for attack and damage mods as well. &nbsp;This allows a even more flexibility. ie ?{attack mod?|0} Cheers
I like to use detailed sheets for my monsters, however you can combine similar monsters and use a roll table with various tokens and select the token you want to represent the monster, adjust the bubbles and then copy to make several. A generic macro set on the master character sheet, coded so you know which macros apply to each class of monster. Your basic orc/goblin... will be very similar one to another.
Gen Kitty
Forum Champion
Another option is to forgo character sheets for your monsters but do use character journals .&nbsp; Back in the dawn of time, we didn't have sheets we just had the Attributes & Abilities tab of the Character Journal.&nbsp; Create a master monster journal with the barest attributes needed (Attack 1, Attack 2, AC, Saves, what-have-you) and some abilities (Attack 1, Attack 2, whathaveyou) with generic macro text.&nbsp; Duplicate the journal for monsters as needed. Attack1 ability text: /emas @{selected|token_name} attacks @{target|token_name} with a ?{type of attack?|mighty} attack! /w gm Hits AC [[1d20+@{Attack1}+?{TempHitMod?|0}]] for [[@{Attack1|max}+?{TempDamageMod?|0}]] Assuming that particular monster's journal had the attribute 'Attack1' with values of 8 and 1d8+5 (for normal and max), if you activated the Attack1 ability, you'd get dialog boxes asking for the kind of attack (defaulting to mighty), and any temporary bonuses/penalties to hit and damage.&nbsp; Then the public would see "Goblin 47 attacks Joe with a mighty attack!" and then you'd see 'Hits AC 17 for 6' whispered to you. Of course you'd modify this to suit your tastes and whatever system you're playing (I default to d20 because it's what I play).&nbsp; If you'd like more details on this style, I'll happily assist.&nbsp; I know there's more than a few people who GM this way.&nbsp; (I don't, because I GM 4e and there's next to no generic attacks so I need a character journal for each and every monster with detailed 4e powers.&nbsp; But I don't mind, I'm a perfectionist :)&nbsp; )

Edited 1450672966
Thanks for the above answers. &nbsp;I still don't see a way that is anywhere near as fast and easy as I could do before. The closest bet seems to be to have the DM character sheet holding all the monster attack info as attributes. So I can have an attack1 ability that does this: [[1d20 @{orc-attack-1}]] | [[1d20 @{orc-attack-1}]] Damage: @{orc-damage-1} Crit: @{orc-crit-1} And on the DM's character sheet have attributes: orc-attack-1 = +5 orc-damage-1&nbsp;=&nbsp;[[1d12+3]] slashing orc-crit-1 =&nbsp;[[1d12]] slashing But what I'd really like is to shove the monster type into one of the bar values (better than the token name, thanks Ed) and have the ability be generic for any monster -- the DM sheet can hold all the monster attacks and a single (for each attack number) ability can be used: [[1d20 @{@{selected|bar2}-attack-1}]] | [[1d20 @{@{selected|bar2}-attack-1}]] Damage: @{@{selected|bar2}-damage-1} Crit: @{@{selected|bar2}-crit-1} But that doesn't work because of the nested attribute references. &nbsp;Is there a way to make it work? &nbsp;I tried many variations of the trick I found to HTML-escape the "}", but I have yet to get it to work here, so I'm not sure if that trick only works with macro templates or if I'm just doing it wrong.

Edited 1450673181
I generally prefer to handle these kinds of encounters in the same way I do normal tabletop. I have a bunch of super generic attacks that are based on traits that work for just about every character that refrence the same place on all my monster sheets. I would never make 20 detailed character sheets for a 6 hour game.&nbsp; Then I give big NPC's in that encounter a few super powerful but interesting abilities, with an emphesis on status effects and the kind of stuff that changes the tactical landscape. It's enough to put the fear of god in people by just filling the map with really simple but high damage/hp monsters than to try and micromanage a bazzillion numbers. As a GM you can get as detailed or as limited as you want. I try to avoid pendantic focus on stats and move the plot along. Stats are for players to sit there and lovingly tweak. GM's should be focused on making encounters scary, interesting, and meaningful. They really don't care about a +1 to this or a +2 to that. If they are rocking your monsters, just boost their traits and call it a day instead of figuring out how many spell levels they have ... your time is limited after all and every minute spent figuring out if the challening rating on your monster is appriorate is a minute your not making cool gear, or writing compelling villians, or killing their family, ect.&nbsp;

Edited 1451255367
Forum Champion
Alex W. said: But what I'd really like is to shove the monster type into one of the bar values (better than the token name, thanks Ed) and have the ability be generic for any monster -- the DM sheet can hold all the monster attacks and a single (for each attack number) ability can be used: [[1d20 @{@{selected|bar2}-attack-1}]] | [[1d20 @{@{selected|bar2}-attack-1}]] Damage: @{@{selected|bar2}-damage-1} Crit: @{@{selected|bar2}-crit-1} But that doesn't work because of the nested attribute references. &nbsp;Is there a way to make it work? Yes, using API Command Buttons (using them in this way does not require access to the API). /w gm [Attack with @{selected|token_name}](!&amp;#13;&amp;amp;#13;&amp;amp;{template:default} {{name=@{selected|token_name} attacks!}} {{Attack=[[1d20 + &amp;#64;{GM|@{selected|bar2}-attack-1}]&amp;#93; | [[1d20 + &amp;#64;{GM|@{selected|bar2}-attack-1}]&amp;#93;}} {{Damage=&amp;#64;{GM|@{selected|bar2}-damage-1}}} {{Crit=&amp;#64;{GM|@{selected|bar2}-crit-1}}}) (The above assumes that the Character which holds the Attributes is named "GM".)
That still doesn't work for me, I get the attribute name output, e.g.: test attacks! Attack 16 | 20 Damage selected|orc-damage-1 Crit selected|orc-crit-1
Forum Champion
Sorry, Alex W.—I was still tweaking it a minute ago! It should function now.
Awesome, that looks like it works!
Forum Champion
Great. :)
Hi Silvyre, I have a question related to your API button posted above and thought it might be easier to ask here rather than starting a new thread. I have been playing with it, trying to get it to work but it is a bit of a mind bender for me since I am not a coder at heart but have picked up a bit since starting on Roll20. I have a macro for an attack that requires a resistance roll. I wanted to include the API button in the roll template so when I use the attack, the targeted token (the PC) can then just click on the resist API button and it will execute the command line pulling their info from their sheets. Here is my macro that I use for an influence spell: /em Crawler Queen invades @{target|token_name}'s mind &{template:default} {{name=Skill | Influence}} {{Check Result=[[1d20 + @{Raknid, Queen|Ability Level} [Ability Level] - ?{Spell Level?} [Spell Level] - @{Raknid, Queen|Spell Penalty} [Spell Penalty] + ?{Modifiers?|0} [Modifiers] ]] }} {{Resist (WILL)=[[1d20 + @{target|WILLPOWER x2} + @{target|Magic Rating} + ?{Modifiers?|0} [Modifiers] - floor(?{Spell Level?} / 2) [Spell Level] ]] }} {{Range=30 ft.}} {{Duration=1 min.}} I essentially want to create the "Resist (WILL)" line as an API button so that the PC who is targeted can roll quickly without having to access his sheet but not sure if that is possible. Right now if rolls it automatically for me but I like giving the PCs the feeling that they are in control when it comes to their rolls, hence the buttons. Any help is greatly appreciated, thanks!

Edited 1451255020
Forum Champion
John G. said: Right now if rolls it automatically for me but I like giving the PCs the feeling that they are in control when it comes to their rolls, hence the buttons. I do the same thing for my GMs with opposing rolls; this player does appreciate the extra mile taken here. :) /em Crawler Queen invades @{target|token_name}'s mind &{template:default} {{name=Skill | Influence}} {{Check Result=[[1d20 + @{Raknid, Queen|Ability Level} [Ability Level] - ?{Spell Level?} [Spell Level] - @{Raknid, Queen|Spell Penalty} [Spell Penalty] + ?{Modifiers?|0} [Modifiers] ]] }} {{[Resist (WILL)](!&amp;#13;[[1d20 + @{target|WILLPOWER}*2 + @{target|Magic Rating} + &amp;#63;{Modifiers?|0&amp;#125; [Modifiers] - floor(?{Spell Level?} / 2&amp;#41; [Spell Level] ]&amp;#93;)}} {{Range=30 ft.}} {{Duration=1 min.}} I'll break the nesting process down: Standard characters that require replacement with HTML entities to be nested within API Command Buttons (ACBs) typically include question marks that are part of Roll Query syntax. You'll notice I made such a replacement for the ?{Modifiers?} Query and not for the ?{Spell Level?} Query. I did this because the former is intended to be accessed after the the ACB is pressed, and the latter is to be parsed during the GM's execution of the parent macro (Roll Template). In order to nest an ACB within a Roll Template, it becomes further necessary to replace the closing curly braces of items that are not parsed during the execution of the parent macro. In this case, the only item that is not parsed is the aforementioned ?{Modifiers?} Query (the targeted Attributes are parsed during the execution of the parent macro due to the GM's targeting of the defender's token). I replaced a piece of the inline roll's syntax (e.g. the second closing square bracket) to ensure the parser did not attempt to execute it alongside the parent macro. Lastly, it's necessary to replace closing parentheses (e.g. the one that is part of the floor function) to prevent the ACB from being prematurely closed.
This is golden and works perfectly, thanks for helping out! I still need to get a better grasp of when to replace and when not to when it comes to nesting macros but at least I can analyze how you worked it here.&nbsp;