DHM terminal help
← Back to terminal

DHM Web Terminal

Reference guide for connecting, scripting, and speedwalking.

Connecting

Click Connect in the top bar. The terminal is preconfigured to reach DHM's server — there's nothing to type in.

If the connection ever fails, check that the proxy (websockify) is running and reachable from wherever you're loading this page.

Basics

KeysWhat it does
/ Step back and forward through your command history
EnterSend the current line
Ctrl/⌘ + KClear the terminal display

The Scripts button opens a side panel listing every alias, trigger, and path you've defined, each with a one-click delete button. If you have a lot of them, click Expand at the bottom of that panel to open the full-page Script Manager — more room, a search box, and inline editing. Changes there sync live back to the terminal if it's open in another tab.

During a password prompt, the input field automatically masks what you type.

Aliases

An alias is a shortcut: type a short word, get a longer command (or several) sent in its place. Works like a bash alias — arguments you type after the alias name get handled automatically.

Create one

#alias {k} {kill %1}

Now typing k orc sends kill orc. %1%9 refer to the words you typed after the alias name; %0 or %* means everything you typed, unsplit.

No placeholder? No problem

#alias {id} {c 'identify'}

Since this alias body never uses %1, whatever you type after id gets appended automatically — id sword sends c 'identify' sword.

Multiple commands

#alias {gg} {get all;wear all;wield sword}

Semicolons queue up multiple commands from one alias. Use \; if you need a literal semicolon sent to the MUD.

Manage aliases

#alias                 list every alias
#alias k             show what "k" expands to
#unalias k           remove it

Triggers

A trigger watches incoming text from the MUD and reacts automatically. There are three kinds:

CommandEffect
#action actionSends a command back when the pattern matches
#gag gagHides matching lines from the display entirely
#highlight highlightRecolors matching lines so they stand out

Auto-reply example

#action {%1 tells you} {say thanks, %1}

%1 here is a capture from the incoming line, not a typed argument — whatever matched that part of the pattern gets substituted into the command.

Hide the noise

#gag {is practicing}

Make it pop

#highlight {You are bleeding} {#c9605a}

The second argument is any CSS color — a hex code like #c9605a or a name like red.

Manage triggers

#action                    list every trigger, with its ID
#unaction 3                remove trigger #3
#ungag {is practicing}    or remove by exact pattern text
#unhighlight {You are bleeding}

Matching is done against each complete line with color codes stripped, so ANSI colors from the MUD won't interfere with your patterns.

Speedwalking & Paths

Type a compressed direction string and the terminal walks it for you, one room at a time.

3n2e5s

Sends north ×3, east ×2, south ×5 — each direction is sent with a short pause in between (400ms by default) so room descriptions and triggers have time to resolve.

DHM uses the six cardinal directions, so speedwalks are built from n s e w u d only (no diagonals).

Record one instead

Rather than typing the sequence yourself, you can walk it and let the terminal remember:

#path record          start recording
n;n;n;e;e                 walk normally -- these are just example moves
#path save {home}     stop and save what you walked as "home"

While recording, typing #path with no arguments shows your progress so far. #path cancel discards the recording without saving. Recording captures both short (n) and full-word (north) movement commands, however you type them, and compresses them automatically — walking north three times and east twice gets saved as 3n2e.

Save a path by name

#path {home} {3n2e}

Afterward, just type home to walk it. Manage saved paths with:

#path              list every saved path
#path home         show what "home" expands to
#unpath home       remove it

Tuning it

#speedwalk off          disable auto-parsing of compressed directions
#speedwalk on           re-enable it
#speedwalk delay 200    change the pause between steps (ms)

Saving your setup

Aliases, triggers, paths, and your speedwalk settings all save to this browser automatically — no action needed. They'll still be there next time you load the page, unless you clear this site's browsing data or switch browsers/devices.

Moving to a different browser? Type #export to print a JSON snapshot of everything you've defined. Copy it, then on the other browser type #import {paste it here} to restore it.

The Clear saved data button at the bottom of the Scripts panel wipes everything and starts fresh.

Command reference

CommandWhat it does
#alias {name} {body}Create or update an alias
#alias / #alias nameList all aliases, or show one
#unalias nameRemove an alias
#action {pattern} {command}Create an auto-reply trigger
#gag {pattern}Create a gag (hide matching lines)
#highlight {pattern} {color}Create a highlight
#actionList all triggers with their IDs
#unaction / #ungag / #unhighlight id-or-patternRemove a trigger
#path {name} {sequence}Save a named speedwalk directly
#path recordStart recording your movement
#path save {name}Stop recording and save it under a name
#path cancelDiscard the current recording
#path / #path nameList all paths (or recording progress), or show one
#unpath nameRemove a path
#speedwalk on|off|delay <ms>Configure speedwalk parsing
#exportPrint your full setup as JSON for backup
#import {json}Restore a setup from JSON
#clearClear the terminal display
#helpPrint a short command summary in the terminal

Known quirks

Words made of direction letters can misfire as speedwalks. If you type something like news, it'll parse as north, east, west, south rather than being sent as text — this is the same behavior real tintin++ has. Type it in CAPS (e.g. NEWS) to send it literally instead.
Aliases don't re-expand trigger commands. If a trigger auto-sends a command, it goes out literally rather than being run back through your aliases. This keeps things predictable and avoids accidental loops.
Autosave is per-browser. Aliases/triggers/paths won't follow you to a different browser or device automatically — use #export / #import to carry them over.