Macros

Use macros to create standardized D&D 5e text based on the monster's stats.

Macros let you generate standardized D&D 5e text inside an action or a spell's description note. Instead of writing the full text manually, you insert a macro enclosed in curly braces, and Monstershuffler expands it into the appropriate rules text.

Macros automatically use the statistics of the creature they belong to, such as its attack modifier, save DC, proficiency bonus, or ability modifiers. This means a single action can be reused by multiple creatures while always producing the correct values for each one.

For example, writing:

{attack 1d6 bludgeoning}, and the target is Stunned.

might produce:

Melee Attack Roll: +5, reach 5 ft. Hit: 3 (1d6) bludgeoning damage, and the target is Stunned.

Using macros has several advantages:

  • Consistency. Rules text always follows the same wording and formatting.
  • Adaptability. Generated values automatically match the creature's statistics.
  • Reusability. The same action can be shared by multiple creatures without modification.
  • Less manual work. Complex rules text, including attack rolls, save DCs, damage expressions, and other game mechanics, can be generated from a short, readable syntax.

Macros available in the editor

Attack

{attack [<damage>] [<damage type>] [<ability>] [<options>]}

Damage

The damage argument supports two formats:

  • Damage expression: A standard D&D 5e damage expression, such as 1d6, 2d8 + 3, or 4d10 + 2.
  • Damage preset: One of the following keywords, which generates a damage expression based on the average damage per round for creatures of the monster's CR:
    • weak: 25% of the average
    • medium: 50% of the average
    • strong: 75% of the average
    • full: 100% of the average
    • deadly: 150% of the average

For example, the following macro:

{attack weak bludgeoning}

might expand to:

Melee Attack Roll: +5, reach 5 ft. Hit: 7 (2d6) bludgeoning damage.

Damage Type

The damage type argument specifies the type of damage dealt by the attack. Use one of the following keywords: acid, bludgeoning, cold, fire, force, lightning, necrotic, piercing, poison, psychic, radiant, slashing, or thunder.

Options

Shape the attack text with the following options:

  • Ability: Specify the monster ability modifier used for both the attack roll and the damage bonus. Use STR, DEX, CON, INT, WIS, or CHA. If omitted, the attack uses STR. For example, {attack 1d4 piercing DEX} uses the monster's Dexterity modifier.
  • Reach: Specify the reach of the attack in feet. For example, reach 10 expands to reach 10 ft..
  • Range: Specify the range of the attack in feet. For example, range 30 expands to range 30 ft..
  • Enchantment: Add additional damage to the attack by writing plus <damage> <damage type>. For example, plus 1d6 fire adds 1d6 fire damage to the attack.

Adding both reach and range options will create a thrown weapon attack description like the following:

Melee or Ranged Attack Roll: +2, reach 10 ft. or range 30 ft. Hit: 3 (1d4) piercing damage.

Saving Throw

{save [<saving throw ability>] [<DC ability>]}

The macro generates a saving throw using the monster's statistics.

  • Saving throw ability: The ability used by the target to make the saving throw.
  • DC ability: The monster ability modifier used to calculate the saving throw DC.

The DC is calculated as:

8 + the monster's proficiency bonus + the selected ability modifier

Use the standard ability abbreviations: STR, DEX, CON, INT, WIS, or CHA.

For example, the following macro:

{save CON WIS}

uses Constitution for the saving throw and the monster's Wisdom modifier to calculate its DC. For a monster with a +6 proficiency bonus and a +4 Wisdom modifier, it expands to:

Constitution Saving Throw: DC 18

Inline Values

{<value> [<type>]}

Inline values mark numbers, dice, and mathematical expressions that the editor should calculate and format automatically.

When an inline value contains dice, the generated dice expression is clickable and can be rolled directly from the stat block.

The value can be:

  • A fixed number, such as 15
  • A dice expression, such as 1d6
  • A dynamic dice expression, such as (PROF)d6 or (PROF)d(STR*2)
  • A mathematical expression using the monster's variables, such as 5 + PROF * CON
  • A value preset: weak, medium, strong, full, or deadly

See Variables for the complete list of available variables.

The optional type describes what the value represents, such as feet, hit points, temporary hit points, targets, rounds, or a damage type. Fixed numbers, variables, dice expressions, mathematical expressions, and value presets can all be used with or without one.

For example:

{1d6 cold}
{1d6}
{30 ft}
{1d6 hit points}
{(PROF)d6 fire}
{(PROF)d(STR*2) fire}
{weak fire}
{medium hit points}
{weak}
{30}
{STR}
{PROF*3}
{PROF * CON temporary hit points}

Type names and aliases are case-insensitive.

Untyped Expressions

Omit the type when the surrounding text explains what a calculated value represents:

The effect lasts for {PROF*3} rounds.

This macro evaluates PROF*3 using the monster's proficiency bonus and inserts the result without adding a type label. For example, it becomes 9 when the proficiency bonus is 3. Fixed numbers and variables are also expressions, so {30} inserts 30 and {STR} inserts the monster's Strength modifier.

Dynamic Dice

The number of dice, the number of sides, or both can use the monster's variables. Put each dynamic part in parentheses:

{(PROF)d6 fire}
{1d(STR*2) fire}
{(PROF)d(STR*2) fire}

For example, if the monster's proficiency bonus is 3 and its Strength modifier is 4, {(PROF)d(STR*2) fire} becomes 3d8 fire damage.

Dynamic parts use the same syntax as other expressions. Their results are rounded to whole numbers. A dice count or side count that evaluates to zero, a negative number, or an invalid expression is not parsed as an inline value.

Untyped Dice

Omit the type when the surrounding sentence already explains what the roll represents:

The target regains {1d6} hit points.

The dice expression remains clickable even though the type is outside the macro.

Value Presets

Inline values support the same CR-based presets as attack damage: weak, medium, strong, full, and deadly. Each preset selects a dice expression near its target percentage of the expected damage for the monster's CR.

Add a type when the macro should include it:

The target takes {weak fire}.
The target regains {medium hit points}.

Omit the type when the sentence supplies it:

The target takes {weak} damage.

Damage

A damage type can be written with or without the word damage:

{1d6 cold}
{1d6 cold damage}

Both formats represent the same value.

Fixed damage values are also supported:

{15 cold damage}
{CR/2 poison damage}

Hit Points

Use hp, hit point, or hit points for hit points:

{1d6 hp}

Temporary hit points can be written using aliases such as temp hp or temporary hit points:

{1d6 temporary hit points}
{PROF * CON temporary hit points}

Measurements

Use measurement values for distances and dimensions:

{30 ft}

Marking a measurement as an inline value allows the website to convert it according to the unit selected in the settings, such as feet, map squares, or meters. Measurements written as plain text cannot be converted automatically.

When the measurement is used as an adjective, attach the value directly to -foot:

{30-foot} cone

Ordinal Numbers

Use th after a number or expression to add the appropriate English ordinal suffix:

{2 th}
{PROF + 2 th}

These macros can expand to values such as 2nd and 5th. The suffix also handles exceptions such as 11th, 12th, and 13th.

Other Value Types

Inline values also support types such as:

  • target
  • attack
  • creature
  • humanoid
  • round
  • minute
  • hour
  • day
  • time

These are useful when the value is dynamic and can either result in a plural or singular form depending on the calculated value. For this reason plural forms are accepted where appropriate:

{CON targets}

can expand to 0 targets, 1 target, 3 targets etc. depending on the monster's CON modifier.

This is a test environment. Any data you enter will be deleted in the future. Do not store any information that you want to keep.