The world in view. Your adventure at the center.
A custom Mudlet interface for New Duris, with a bronze-and-charcoal frame, live character information, integrated maps, and organized chat. Its three-column layout keeps the game console central while room, group, and combat details stay within reach.
Install · Features · Commands · How it works · Build and contribute
You need Mudlet 4.19.1 or newer, a New Duris profile, and GMCP enabled in both the Mudlet profile and the game. Zone maps also need access to www.newduris.com over HTTPS.
- Download duris-client.mpackage from the latest release. Each release lists its changes and a SHA-256 checksum; you do not need to build it yourself.
- Open your New Duris profile in Mudlet.
- Open Package Manager (
Alt+O), choose Install New Package, and select the downloaded.mpackage. See the Mudlet Package Manager guide for details. - Reconnect and enter the game so fresh character and room data can populate the interface.
The package is named Arjinius Client inside Mudlet. For updates, download the .mpackage from the latest release, replace your installed copy through Package Manager, and reconnect. See CHANGELOG.md for what changed.
| At a glance | What the client provides |
|---|---|
| A cohesive interface | A dark fantasy frame, percentage-based layout, central game console, and dedicated command input. |
| Character and quests | HP, mana, movement, progress toward the next level, position, character identity, coins, and active bartender quest details. Non-mana classes show MP n/a. |
| Zone and wilderness maps | Zone layouts from the New Duris map API and wilderness maps from GMCP, with zoom controls, room tooltips, and a current-position marker. |
| Room awareness | Clickable exits, distinct closed/locked exit styles, lists of mobs, items, and players, plus NPC annotations showing whom they are fighting. |
| Combat and groups | Target health and position, a prompt-derived tank display, affects, a per-fight damage counter, group size/capacity, moves per member, the most hurt member highlighted, and dimmed AWAY markers for members outside your room. |
| Chat that stays organized | ALL / TELLS / NCHAT / ROOM / GUILD / GROUP, with timestamps, individual tell windows, contact history for the current session, and alignment-colored nchat/jchat senders. |
| Useful details nearby | Inventory, equipment, who-list, and ship panels; context menus for common actions; in-game time; links to the world map and current zone's wiki page. |
| Text intelligence | Aligned, color-coded scan output with a per-direction summary; +exp notices with a kills-to-level estimate; banners when sanctuary, rage, war cry, or stone skin drop, when you are disarmed or scryed, and when a skill improves. |
| Automation, off by default | Auto-stand, auto-group on consent, auto-rescue for a list of names, auto-assist, re-rage, re-wield after disarm, auto-loot, bard song restart, follower traps, repeat timers, stat reroller, and ship hotkeys. Each has its own auto <name> on switch. |
| Utility aliases | Container, corpse, door, potion, bash-by-race, flee-stab, rebash-after-lag, hold-and-use wands, one-line identify, group casting, loot split by bidscore, ship orders and dock runs. Type auto for the list. |
| Numpad movement | 8/2/4/6 move, 7/9/1/3 diagonals, - up, + down, 5 look, / scan, 0 flee. Turn off with ui set keypad off. |
Guild gcc messages route to GUILD, group gsay to GROUP, and jchat to NCHAT. petition and wizmsg appear in ALL with distinct colors. Tell windows and their history are session-only.
Type these into the Mudlet command input:
| Command | Purpose |
|---|---|
ui on |
Initialize or rebuild the interface. |
ui off |
Hide the interface and restore Mudlet's main console and command line. |
ui help |
List commands and numpad keys. |
ui debug |
Show which core GMCP data tables have arrived. |
ui damage |
Session damage report (total, hits, damage per second, current fight). ui damage reset clears it. Clicking the DMG counter in the target panel shows the same report. |
ui set |
List the toggles below. ui set <name> on or off changes one and remembers it. |
auto |
ArjAuto help: automation toggles (auto set, `auto on |
mapper |
Show mapper help. |
mapper on / mapper off |
Enable or pause mapper updates. |
mapper status |
Show the current map mode, room, zone, and cache statistics. |
mapper debug |
Inspect current room, exit, and cached zone data. |
mapper reload |
Clear cached zone layouts; move or use look to request fresh room data and reload the map. |
mapper size 14 |
Set zone room size; accepts integers from 8–20. |
/mapreload |
An additional shortcut to clear the map cache. |
Toggles for ui set: keypad (numpad keys), chatTimestamps, damageTracker, scanFormat, alerts, and expTracker. All default to on and are saved to arjui_settings.json in your Mudlet profile folder.
Use the map's + / − controls to zoom. Click the active STATS, INV, EQ, WHO, or SHIP tab to send stat, inv, eq, who, or look contacts and refresh the corresponding information.
Three Lua scripts run inside Mudlet. ArjUI builds the Geyser interface and processes live game information. ArjMapper uses the map area provided by ArjUI, combining room data with downloaded zone layouts or the server's wilderness map. ArjAuto holds the automation toggles and utility aliases; it reads ArjUI's live state (combat, position, group, ship) to decide when to act.
flowchart TB
accTitle: New Duris client data flow
accDescr: The server supplies GMCP and game text to ArjUI. ArjMapper combines room GMCP with zone layouts from the web API and renders maps inside ArjUI.
server["New Duris server"]
wiki["New Duris web API"]
subgraph mudlet["Mudlet · Arjinius Client"]
direction TB
gmcp["GMCP events"]
text["Game text and prompts"]
ui["ArjUI.lua<br/>Interface and live state"]
mapper["ArjMapper.lua<br/>Zone cache and map rendering"]
panels["Console · vitals · room · group<br/>combat · chat · character tabs"]
maps["Zone and wilderness views<br/>inside ArjUI's map area"]
gmcp -->|"Character, room, combat, group, chat, quest"| ui
text -->|"Console, tank, time, inventory, equipment, who"| ui
gmcp -->|"Room.Info · Room.Map"| mapper
ui --> panels
ui -.->|"Provides map container"| mapper
mapper --> maps
end
server --> gmcp
server --> text
wiki -->|"HTTPS zone layout JSON"| mapper
classDef source fill:#211b14,stroke:#d4a855,color:#f0dfbf,stroke-width:2px
classDef transport fill:#14202a,stroke:#7090c0,color:#dce7f5
classDef script fill:#302519,stroke:#d4a855,color:#fff0d4,stroke-width:2px
classDef surface fill:#18241d,stroke:#7da68b,color:#e1f0e6
class server,wiki source
class gmcp,text transport
class ui,mapper script
class panels,maps surface
style mudlet fill:transparent,stroke:#8c6e46
linkStyle default stroke:#8c6e46,stroke-width:1.5px
Most live panels use GMCP. Inventory, equipment, and who lists capture game text; tank and time displays also depend on text triggers. The damage counter reads Combat.Update.round when the server sends it and falls back to [Damage: N] display lines. Several display helpers were adapted from the community "lielz scripts" collection; see docs/ongoing-projects/lielz-port.md for what was taken and what was left out. Zone layouts come from https://www.newduris.com/api/wiki/zones/{zoneId}/map-data and are cached in memory. The mapper listens to Room.Info and Room.Map directly.
- Empty vitals or room panels: run
ui debug, check that GMCP is enabled, then reconnect and enter the game. Initial character setup usesChar.Statuson login. - Blank or stale zone map: run
mapper statusandmapper debug, check access to the New Duris website, then trymapper reloadfollowed bylook. - Missing tank, inventory, equipment, who, or time information: these displays depend on recognized text and prompt formats. Custom prompts or changed server output can affect capture even when GMCP panels work.
- Need to restore the main console: use
ui off;ui onbuilds the interface again.
The SHIP tab lists contacts sorted by range and colored by side when the server sends Ship.Info/Ship.Contacts or when you look at contacts; it is a text panel, not a drawn radar. Quest-map rendering and the server's structured chat color runs are not implemented. Alignment coloring for other players in the room is limited by the fields the server supplies. The server study and implementation log records the protocol details, completed work, and remaining candidates.
Edit src/; build the package from those sources. The build uses Python 3's standard library. It also runs a Lua syntax check when a supported luac executable is on your PATH.
# Assemble the installable package at the repository root
python3 build.py
# Syntax-check the Lua scripts only (install luac to make this check effective)
python3 build.py --check
# Write the package to another location
python3 build.py -o /tmp/duris-client.mpackage| Path | Role |
|---|---|
src/scripts/ArjUI.lua |
UI construction, GMCP handlers, text capture, chat, and commands. |
src/scripts/ArjMapper.lua |
Zone layout downloads, caching, wilderness rendering, and map controls. |
src/scripts/ArjAuto.lua |
Automation toggles, variables, utility aliases, ship hotkeys, loot split. Settings persist in arjauto.json. |
src/package.xml |
Mudlet XML skeleton with @@SCRIPT:Name@@ placeholders. |
src/config.lua |
Package metadata. The build injects its version. |
src/assets/ |
Images copied into the package unchanged. |
VERSION |
Version source for packaged metadata and ArjUI.VERSION. |
build.py |
Injects Lua and version values, escapes script text, validates XML, and writes the package archive. |
duris-client.mpackage |
Committed build output; releases attach a copy built from the tag. |
CHANGELOG.md |
Release notes per version; the release workflow reads it. |
.github/workflows/ |
CI build on every push; tag v* publishes a GitHub Release. See docs/RELEASING.md. |
When changing the package, bump VERSION (semantic versioning, see docs/RELEASING.md), rebuild, and include the generated .mpackage with the source change. Let the build insert version strings; do not hand-edit the archive. Use Mudlet/Geyser APIs without external Lua dependencies, and preserve the dark fantasy style and percentage-based layout.
Validation is limited: --check checks Lua syntax only and skips that check with a warning if luac is absent. A full build also validates the assembled XML. Neither verifies runtime behavior; import the package into Mudlet to check layout, GMCP updates, chat, maps, controls, and reconnect behavior. No automated runtime test suite exists in this repository.
Read AGENTS.md for repository guidance and the Duris implementation log for server field names. The Mudlet reference documents were copied from LuminariGUI and are background references; their project-specific architecture and MSDP instructions do not describe this package.
Originally created by Arjinius / Arjin. Maintained here in Community-Duris/duris-client.
