Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Progress Bars

Health, mana, stamina and spirit as bars you read in a glance — so you never type health with a troll swinging at you.

What it’s for

Mid-fight you need one number: am I still safe? Typing health costs you a line of scrollback and a beat of attention, and the answer is already three exchanges old by the time you read it. A progress bar keeps that answer on screen permanently, filling and draining as the game sends updates, so checking your health becomes a glance instead of a command.

Each bar is its own window, which is the point — you place health where your eye already goes, put spirit somewhere quieter, and skip the ones you don’t care about. Bars are not limited to vitals either: the same widget draws stance, encumbrance level, mind state, and any bar a Lich script invents, because a bar is really just “a number out of a maximum, drawn as a fill.”

If you’d rather have all four vitals stacked in one compact window, that is a different widget — see Mini Vitals.

Set it up

  1. Click Windows in the top toolbar. The catalog stays open while you work.
  2. Tick health, mana, stamina, and spirit. Each one appears as its own window, already bound to the right feed and colored.
  3. Set each row’s zone control to Header to line them up across the top, or leave them floating and drag them where you want.
  4. Right-click any bar to open its menu. The widget section holds Bar id, Label, Bar color, Show value/max, and Show value only. Changes apply live — there is no Save button, and text fields commit when you press Enter or click away.

For a bar the catalog doesn’t list — a Lich-pushed feed, or encumlevel — use ➕ Custom window… ▸ Progress bar. VellumFE drops you straight into the new window’s menu, because a bar with no Bar id draws nothing at all. Type the feed id there and it comes alive.

📷 screenshot pending
A health bar right-clicked, with the widget section open showing Bar id, Label, Bar color, and the Show value/max and Show value only checkboxes.

Expected result: four bars sit across the top of your layout, each filling to its current value and redrawing the moment the game sends a vitals update.

Common setups

A compact vitals strip that shows numbers, not words

You know which bar is which by position and color, so the word “Health” is wasted space — the numbers are what you actually want.

  1. Add health, mana, stamina and spirit from the Windows catalog and set each row’s zone to Header.
  2. Right-click each bar and tick Show value/max in the widget section.
  3. Drag each bar narrower until the four sit side by side across the header.

→ Your header reads 142/193 88/110 95/95 10/10 in dark red, dark blue, orange and gray — four numbers, one row, no labels.

A stance bar next to your roundtime

Stance is a bar like any other, and it belongs beside the timer that tells you when you can act.

  1. In the Windows catalog, tick stance. It arrives bound to the feed id pbarStance, titled Stance, in navy.
  2. Set its zone to match your roundtime countdown so the two sit together.
  3. Right-click it, clear the Label field, and the bar draws its percentage instead.

→ Dropping to guarded shows the stance bar visibly shorter, right beside your RT bar, so “can I act, and how exposed am I?” is one glance at one corner.

Tips & gotchas

⚠️ A progress window with an empty Bar id renders as nothing. It is not broken and it is not invisible-because-of-color — a bar with no feed has no value to draw. This is why creating one from ➕ Custom window… drops you into its menu immediately. If a bar you made is a blank rectangle, that empty field is almost always why.

⚠️ Bar ids are case-sensitive. mindState works; mindstate matches nothing and draws nothing. The same goes for encumlevel and pbarStance — copy the capitalization exactly.

⚠️ Unlike countdowns, a progress window’s name is not a fallback binding. Naming a window health does not feed it; only the Bar id field does. A countdown window will fall back to its name, which is why .addwindow roundtime countdown … appears to work with no id set and the same trick fails completely for bars.

Nothing on a bar changes color at a threshold. There is no low-health red, no flash, no pulse — a bar draws in one solid color at every value, by design. Alerting on low health is a job for a hotbar button’s condition state, an indicator, a sound, or controller rumble; see Make your health bar shout when you’re hurt, which builds exactly that.

Show value only wins over Show value/max. With both ticked you get the bare current number. The precedence is: value-only, then value/max, then your Label, then a percentage when the label is empty.

Feeds that report a percentage have no maximum. Stance arrives as 0–100 with no max, so Show value/max on a stance bar reads 100/0. Leave the numbers off for percent-style feeds and let the fill do the talking.

Encumbrance has a dedicated widget too. encumlevel works as a Bar id if a plain bar is what you want, but the encum window shows the level name with its own color bands — see Encumbrance.

Colors are per bar, and the defaults are deliberately dark. Health is #6e0202, mana #08086d, stamina #bd7b00, spirit #6e727c, stance #000080 — dark enough that the text drawn over the fill stays readable. If you brighten a bar, check the label is still legible against it.

See also

Config reference (TOML)

Written by the editors above. Hand-editing is for troubleshooting, not the normal path.

[[windows]]
name = "health"          # a label — NOT the feed binding
widget_type = "progress"
id = "health"            # the feed binding
row = 0
col = 0
rows = 3
cols = 20
color = "#6e0202"

Widget fields (ProgressWidgetData):

FieldTypeDefaultWhat it does
idstring(none)Progress feed identifier — the game’s progressBar id. Case-sensitive. With no id the window draws nothing.
labelstring(feed text)Overrides the label drawn over the fill. Empty label draws a percentage instead.
colorstringper-id defaultFill color, #rrggbb or a color name. One solid color at every value.
numbers_onlyboolfalseDraw current/max instead of the label.
current_onlyboolfalseDraw only the current value — no label, no max. Takes precedence over numbers_only.

Standard window keys — row, col, rows, cols, show_border, border_style, background_color, text_color, locked — apply as they do to any window.

Known feed ids. The client does not keep a closed list; it draws whatever progressBar ids arrive. The ones the GUI names are health, mana, stamina, spirit, encumlevel, and mindState, plus any custom id a Lich script pushes. The catalog additionally ships concentration (DragonRealms only) and stance, whose feed id is pbarStance.

Preset defaults: health #6e0202, mana #08086d, stamina #bd7b00, spirit #6e727c, concentration #00a0a0, stance #000080. Each preset is 20 columns wide and 3 rows tall.