Make the game shout when something matters
By the end you’ll have a bounty line that turns gold and chimes, a web that lights an on-screen indicator, and the ambient noise you’re tired of reading gone from the feed.
What you’ll build
Three rules, each one a different kind of “tell me”:
- Color + sound —
You have completed your taskprints in gold and plays a chime, so a bounty finishing lands even when you’re reading something else. - A status light — being webbed switches on a custom status id, and an indicator window wired to that id lights up. This is the one worth learning: any line of game text can drive a visual, without the game ever sending a status update for it.
- Squelch — the ambient weather chatter never reaches your main window again.
You’ll prove all three with .testline, which feeds a fake game line through
the live highlight pipeline, so nothing here depends on finding a mob first.
Before you start
-
For the sound rule only: an audio file in
~/.vellum-fe/global/sounds/. VellumFE creates that folder and seeds it on first run. Drop a.wavor.mp3in and it appears in the editor’s Sound dropdown. The examples below usechime.wav— substitute the name of a file you actually have. -
Coming from Wrayth or StormFront? Convert your existing rules first instead of retyping them:
vellum-fe import-highlights 70682.xmlThis runs and exits without connecting. It writes
70682-highlights.tomlbeside the source file; add--dry-runto see what it would produce, or--out <FILE>to choose the destination.
Steps
Rule 1 — a bounty that shows and chimes
- Click Editors in the top toolbar, then Highlights. The hub stays
open, so you can keep working alongside it. (Or type
.highlightsin the command input.) - Click Add highlight.
- Fill in the form:
- Name —
bounty-done - Pattern —
You have completed your task - Foreground —
gold - Sound — pick
chime.wavfrom the dropdown - Tick Entire line so the whole line colors, not the matched words
- Name —
- Click Save.
Rule 2 — webbed lights an indicator
- You need somewhere for the light to live. Type
.addwindow webbed indicator 60 2 12 1to place a one-row indicator window — an indicator window’s name is its status id, so this one answers towebbed. - Back in the highlights editor, click Add highlight again:
- Name —
webbed-on - Pattern —
You are entangled in a web - Set status —
WEBBED - Status duration — leave empty so it stays lit until cleared
- Name —
- Save, then add the matching off-switch:
- Name —
webbed-off - Pattern —
You tear through the last of the webbing - Clear status —
WEBBED
- Name —
- Save.
Rule 3 — hide the weather
- Add highlight once more:
- Name —
quiet-weather - Pattern —
A gentle breeze blows through - Tick Squelch
- Name —
- Save.
Prove all three without waiting for a mob
-
Type each of these into the command input:
.testline You have completed your task .testline You are entangled in a web .testline A gentle breeze blows through
→ Expected result: the first line prints in gold and the chime plays. The second lights your WEBBED indicator. The third produces nothing at all — the feed does not move, which is the squelch working.
Make it yours
Send lines somewhere else instead of hiding them. Squelch is absolute — the
line is gone. If you’d rather keep it but move it out of the way, set
Redirect to to another window’s name. The mode selector decides what
happens to the original: redirect only removes it from the main feed,
redirect copies leaves it in place and duplicates it. A rule with pattern
asks you to and Redirect to thoughts puts merchant chatter in your
thoughts window while your hunting feed stays clean.
Make a status clear itself. The webbed rule above stays lit until the
matching Clear status rule fires — right if you have a reliable “you’re
free” line, wrong if you don’t and it sticks on forever. Put 30 in Status
duration instead and the status switches itself off after thirty seconds
whether or not a clear rule ever matches. The two approaches combine: whichever
happens first wins.
Rewrite noisy text rather than removing it. Replace rewrites the matched
text in place and understands $1-style capture groups. A rule with pattern
(\w+) just bit you! and Replace >>> $1 BIT YOU <<< keeps the
information and makes it impossible to skim past. Set Window to scope the
rewrite to one window while the colors still apply everywhere.
Buzz the controller. If you play with a gamepad, the Rumble dropdown fires a named rumble pattern on match — a low-health rule you feel rather than read. Patterns come from the Controller editor’s Rumble tab.
When it doesn’t work
The rule never fires. Confirm with .testline before blaming the rule:
.testline injects your text verbatim into the live pipeline, so if the rule
doesn’t fire there, the pattern is wrong. The most common cause is a regex
metacharacter taken literally — (, ), [, ], ., ?, * and + all
have meaning. To match a literal (2/3) you need \(2/3\). If your pattern
is plain text with no regex in it at all, tick Fast parse — it uses literal
matching, which is both faster and immune to this problem.
Colors don’t apply but the sound plays (or the reverse). The [highlights]
section has four independent global switches, all on by default:
sounds_enabled, replace_enabled, redirect_enabled and coloring_enabled.
One being off disables that entire category across every rule while the others
keep working. Check them in Settings before rewriting a rule that was fine
all along.
No sound at all. Three things in order: the file must be in
~/.vellum-fe/global/sounds/; [sound] enabled must be true; and the master
[sound] volume (default 0.7) multiplies against each rule’s Sound
volume, so a low master value quietly mutes everything. On the phone, also
check the sheet’s own Sound alerts toggle.
One sound machine-guns, or a repeated line only chimes once. Both are
cooldown_ms (default 500). It’s a minimum gap between repeats of the same
sound — a pattern that matches ten lines in a burst plays once, not ten times.
The cooldown is tracked per sound, so two different rules with two different
files never suppress each other. Raise it if a spammy pattern still chatters;
lower it if you’re genuinely missing fast repeats.
The indicator doesn’t light. The id in Set status must match the
indicator window’s id — matching ignores case, so webbed and WEBBED are the
same id, but web is not. Confirm the window is actually on screen; a status
firing at a hidden window looks identical to a rule that never matched.
✅ A dashboard adds unknown ids for you. If your Set status id doesn’t exist yet, a dashboard widget appends it and lights it. An indicator window does not — it only flips an id it already has. So a dashboard is the faster way to see a new status working before you commit to placing a dedicated indicator for it.
Your rules vanished when you switched characters. Rules save per-profile by default. Tick Global (all characters) in the GUI form, or use the (global) list on the phone, for rules that should follow you everywhere.
See also
- Highlight Patterns — every rule field, its type and default
- Sound Alerts — the sound system, the seeded
files, and the
[sound]settings - Indicators — placing and configuring the window a
set_statusrule drives - Dashboard — the grid that auto-adds unknown status ids
- Command Reference —
.testline,.highlights,.addhighlight - Browser Client — the full list of what the phone can and can’t author
- Make your health bar shout when you’re hurt — the same machinery applied to vitals