Skip to content
Randal edited this page May 5, 2026 · 8 revisions

Stat Bars and Dots

RPG Sage offers the ability to show numeric stats in the form of bars, dots, and more! These representations (tracker, gauge, bar, dots, etc.) are only displayed in dialog posts created by RPG Sage.

Value Bars

Value bars are used to render how "full" something is as a percentage. Value bars assume that 0 is the lowest ("empty") value. The classic, most common example, is hit points (health bar).

For value bars to work, your character must have two related stats stat and stat.max, ex:

sage! npc update name="BadGuy" hp="20" hp.max="20"

Showing the value bar in a dialog post is as simple as including {stat.bar} in your dialog, ex:

gm:: BadGuy takes damage, current health: {BadGuy::hp.bar}

VerticalBar (default)

The default value bar is a series of ascii characters that represents a vertical bar:

  • 0% (empty/0)
  • ▕▁ < 14.3%
  • ▕▂ < 28.6%
  • ▕▃ < 42.9%
  • ▕▄ < 59.2%
  • ▕▅ < 73.5%
  • ▕▆ < 87.8%
  • ▕▇ < 100%
  • ▕█ 100% (full/max)
  • ▕? invalid
    • shown when either stat or stat.max aren't numbers or produce an invalid result

HorizontalBar

RPG Sage also has a horizontal bar built in. To use it instead of the vertical bar, set the character's stat.bar.values value to HorizontalBar. Ex:

sage! npc update name="BadGuy" hp.bar.values="HorizontalBar"

This bar uses the following character strings to represent the horizontal bar:

  • ┆┈┈┈┈┆ 0% (empty/0)
  • ┃┈┈┈┈┆ < 20%
  • ┃━┈┈┈┆ < 40%
  • ┃━━┈┈┆ < 60%
  • ┃━━━┈┆ < 80%
  • ┃━━━━┆ < 100%
  • ┃━━━━┃ 100% (full/max)
  • ┆┈?┈┆ invalid

Custom Value Bars

Additionally, you can create your own bars by stringing together your choice of characters, ascii/unicode, or emoji. While you can use custom Discord emoji, such as ❤️, these examples will use regular emoji for readability. To do so, you need to provide a series of comma separated values for your character's stat.bar.values. You are required to have at least 4 values, but you can have more. The first is 0%, last is 100%, and the other values are used to calculate breakpoints based on percentage of stat.max. Ex:

sage! npc update name="BadGuy" hp.bar.values=" 🤍🤍🤍🤍🤍 , 🩷🤍🤍🤍🤍 ,🩷🩷🤍🤍🤍 , 🩷🩷🩷🤍🤍 , 🩷🩷🩷🩷🤍 , 🩷🩷🩷🩷🩷 "

Leading and trailing spaces will be stripped out, so you can have spaces around your commas for readability.

Optionally, you can specify a value for when the stat percentage is invalid by adding another value at the end after two commas.

sage! npc update name="BadGuy" hp.bar.values=" 🤍🤍🤍🤍🤍 , 🩷🤍🤍🤍🤍 ,🩷🩷🤍🤍🤍 , 🩷🩷🩷🤍🤍 , 🩷🩷🩷🩷🤍 , 🩷🩷🩷🩷🩷 ,, 💔💔💔💔💔"

HP "Bar" example output and corresponding % range:

  • 🤍🤍🤍🤍🤍 0%
  • 🩷🤍🤍🤍🤍 < 25%
  • 🩷🩷🤍🤍🤍 < 50%
  • 🩷🩷🩷🤍🤍 < 75%
  • 🩷🩷🩷🩷🤍 < 100%
  • 🩷🩷🩷🩷🩷 100%
  • 💔💔💔💔💔 invalid
    • optional, defaults to simple ? if missing
    • requires two commas before it

If you create custom bar emoji consisting of multiple emoji that look like a single image/emoji, you need to remove any spaces between the pieces that make up the whole. Ex:

sage! npc update name="BadGuy" hp.bar.values=" :l-no::no::no::r-no: , :l-yes::no::no::r-no: ,:l-yes::yes::no::r-no: , :l-yes::yes::yes::r-no: , :l-yes::yes::yes::r-yes: "

While they are called bars, you can use single emoji to just as easily create "gauges":

sage! npc update name="BadGuy" hp.bar.values=" ☠️ , 💔 , ❤️ , 🧡 , 💛 , 💚 "
sage! npc update name="BadGuy" hp.bar.values=" ☠️ , 💔 , ❤️ , 🧡 , 💛 , 💚 ,, ❓"

HP "Gauge" output and corresponding % range:

  • ☠️ 0%
  • 💔 < 25%
  • ❤️ < 50%
  • 🧡 < 75%
  • 💛 < 100%
  • 💚 100%
  • ❓ invalid

Value Dots

Value dots are used to render a count of something. A common Pathfinder 2e usage would be Hero Points.

For value dots to work, you character must have a stat with a number value, ex:

sage! pc update name="Wizzard" heropoints="3"

Showing the value dots in dialog post is as simple as including {stat.dots} in your dialog, ex:

gm:: Don't forget you can reroll using a heropoint: {Wizzard::heropoints.dots}

Which displays as:

Don't forget you can reroll using a heropoint: ●●●

If you want to show usage of a resource with dots, you need to include a stat.max as well, ex:

sage! pc update name="Wizzard" heropoints="1" heropoints.max="3"

This changes the above output to:

Don't forget you can reroll using a heropoint: ●○○

Value Dots (shapes)

In addition to stat.dots, RPG Sage has other shapes available (and 3 letter shortcuts):

  • ◇,◆ as stat.diamonds (or stat.dia for short)
  • ○,● as stat.dots (or stat.dot for short)
  • ♡,♥ as stat.hearts (or stat.hrt for short)
  • ⬡,⬢ as stat.hexes (or stat.hex for short)
  • ▫,▪ as stat.squares (or stat.sqr for short)
  • ☆,★ as stat.stars (or stat.str for short)
  • △,▲ as stat.triangles (or stat.tri for short)

Some Examples:

sage! pc update name="SpaceWizzard" charges=3 charges.max=4 grenades=1

Output Examples:

{SpaceWizzard::charges.hexes} becomes ⬢⬢⬢⬡
{SpaceWizzard::grenades.str} becomes ★

Value Dots (letters)

If you would prefer to see your dots as letters, then you simply use stat.letters (or stat.az for short). This will use the first letter of stat (if you have multiple parts, such as prefix.stat.az then it is the first letter of the part before az). As implied by "az", all letters A-Z are available (uppercase only).

For our Pathfinder and Starfinder (and other) players:

  • Ⓕ,🅕 as focuspoints.letters (or focuspoints.az for short)
  • Ⓗ,🅗 as heropoints.letters (or heropoints.az for short)
  • Ⓜ,🅜 as manapoints.letters (or manapoints.az for short)
  • Ⓢ,🅢 as staminapoints.letters (or staminapoints.az for short)

Some Examples:

sage! pc update name="Wizzard" heropoints="1" heropoints.max="3"

sage! pc update name="Wizzard" mana=2 mana.max=5

Output Examples:

{Wizzard::heropoints.letters} becomes 🅗ⒽⒽ
{Wizzard::mana.az} becomes 🅜🅜ⓂⓂⓂ

Value Dots (spell slots)

By using the "slots" option, you can show spell slots as circled numbers 1-10 (much like circled letters above). When determining what number to use, RPG Sage will look for a number (1), a word (first), and also an "nth" (1st). Cantrips will use the circled C.

Some Examples:

sage! pc update name="Wizzard" cantrips=4
sage! pc update name="Wizzard" first=3
sage! pc update name="Wizzard" spells.2nd=1 spells.2nd.max=2

Output Examples:

{Wizzard::cantrips.slots} becomes 🅒🅒🅒🅒
{Wizzard::first.slots} becomes ❶❶❶
{Wizzard::spells.2nd.slots} becomes ❷②

Value Dots (custom)

As with bars, dots can be customized using your choice of letters, ascii/unicode, or emoji. To do so, you provide the "off" and "on" emoji separated by a comma. Optionally, you can provide an "unknown" emoji in case your stat isn't a number, but unlike bars you only need 1 comma.

Example:

sage! pc update name="SpeedRacer" flags=1 flags.dots.values=" 🏴, 🏁 "
sage! pc update name="SpeedRacer" laps=3 laps.max=5 laps.dots.values=" 🏴, 🏳️ , 🚩"

Output:

{SpeedRacer::flags.dots} becomes 🏁
{SpeedRacer::laps.dots} becomes 🏳️🏳️🏳️🏴🏴

Bars and Dots in Dialog

In the previous examples, you saw dialog stat usage as {char::stat.bar} or {char::stat.dots}. This is done to highlight that a GM can show the bars and dots of characters by referencing their names/aliases. A player usually only needs {stat.bar} or {stat.dots} to reference their acting character.

In addition to displaying these in dialog, it is also worth noting that these can be added to stat templates, such as displayName.template or dialogFooter.template allowing them to automatically be appending to the display name or footer of each dialog post for a character.

Clone this wiki locally