Usage Guide
This guide covers how to use the PipeWorks MUD Mapper to create and edit maps for your MUD world.
SQLite + Export Workflow
The mapper now stores authoring data in SQLite and exports JSON on demand:
- Mapper DB (
data/mapper.db) Authoring source of truth with coordinates for visual editing.
- Map JSON Exports (
data/exports/maps/*.map.json) Optional authoring exports that preserve coordinates.
- Zone JSON Exports (
data/zones/*.json) Game truth files exported without coordinates. These are what the MUD server consumes. Coordinates are stripped because the game engine operates on topology (connections), not geometry (positions).
Typical workflow:
1. Create/edit map → SQLite DB (data/mapper.db)
2. Save changes → Preserves coordinates for future editing
3. Export Zone JSON → data/zones/my_zone.json (coords stripped)
Starting the Application
From the command line:
python -m pipeworks_mud_mapper
Or with custom settings:
python -c "from pipeworks_mud_mapper.app import run_app; run_app(debug=False, port=8080)"
The application will be available at http://127.0.0.1:8050 (or your custom port).
Interface Overview
The mapper has a three-column layout:
- Left Column - Game Server Exports
Shows the exported zone JSON files in the configured zones directory. This helps verify what the server will consume.
- Center Column - Map View
Interactive Plotly graph showing rooms as nodes and exits as connecting lines. Click rooms to select them. Use the Z-level selector below the map to view different floors.
- Right Column - Properties Panel
Form for editing room properties. Shows room ID, name, description, coordinates, and exit checkboxes. Also includes the Ollama LLM integration section for generating room descriptions.
- Workspace Panel (Center Column)
Tabs for SQLite status, room lists, cross-zone exits, and the API runner. The API tab lets you save remote service definitions and run HTTP commands directly from the UI.
Workspace API Runner
The Workspace → API tab can store remote API definitions and reusable commands (GET/POST/etc). This is useful for calling external services like the Pipeworks Name Generation API without leaving the mapper UI.
Configuration
The API catalog is stored in its own SQLite database. You can change the
location via config/server.ini:
[paths]
api_db_path = data/api_services.db
Basic Workflow
Create a Service with a name and base URL (for example,
https://name.api.pipe-works.org).Add a Command (method, path, optional query/body JSON).
Click Run to execute; the response appears in the panel below.
Notes
Query and body fields require valid JSON.
Service auth secrets are stored as plain text until a vault integration is added.
Creating a New Map
Click the New Map button in the action row
Enter a Zone ID (lowercase, no spaces, e.g.,
my_dungeon)Enter a Zone Name (display name, e.g.,
My Dungeon)Optionally add a Description
Click Create
The new map is stored in SQLite. You can export map/zone JSON when needed.
Adding Rooms
Click New Room in the action row
Enter a unique Room ID (e.g.,
hallway_north)Enter a Room Name (e.g.,
Northern Hallway)Add a Description (optional)
Set Coordinates (X, Y, Z) to position the room on the map
Click Add Room
The room appears on the map at the specified coordinates.
Editing Rooms
Click a room on the map to select it (turns red)
The properties panel fills with the room’s current values
Modify the name, description, or coordinates
Click Update to save changes
Note: Room ID cannot be changed after creation.
Managing Exits
Exits connect rooms together. The mapper creates bidirectional exits by default.
Adding Exits
Select a room on the map
Check the direction checkboxes (N, E, S, W, U, D) in the Exits section
The mapper finds the nearest room in that direction and creates:
An exit from the current room to the target
A reverse exit from the target back to current room
If no room exists in that direction, the checkbox unchecks and shows a warning
Removing Exits
Select a room with exits
Uncheck the direction checkbox
The exit is removed (but the reverse exit on the other room remains)
To create one-way exits, add the exit, then select the target room and uncheck the reverse direction.
Generating Descriptions with Ollama
The mapper integrates with a local Ollama server to generate room descriptions using LLMs.
Setup
Install Ollama from https://ollama.ai
Pull a model (e.g.,
ollama pull llama3.2)Ensure Ollama is running (default: http://localhost:11434)
Using the LLM Generator
In the center column, open the LLM Assistant (Ollama) panel beneath the map
Enter the Ollama server URL (default: http://localhost:11434)
Click Refresh Models to load available models
Select a model from the dropdown
Customize the system prompt (optional) and enter a user prompt
Click Generate to create a description
Review the generated text in the response area
Click Send to Description to apply it to the selected room
Tips
The system prompt sets the tone and style for generated descriptions
The user prompt should describe what you want (e.g., “A dark cellar with cobwebs”)
You can edit the generated text before sending it to the room
Generation marks the room as having unsaved changes
A validator staging panel shows hard-rule hits without blocking authors
Validator results are saved into the map file as authoring metadata
Template Strategy
Templates strongly influence length and style. The default Ledgerfall template is optimized for 60–120 word outputs. For short outputs, use the dedicated short template:
Ledgerfall Goblin (Short)(ledgerfall_goblin_short) for 25–40 wordsLedgerfall Goblin(ledgerfall_goblin) for 60–120 words
If you request 30 words while using the long template, small models often drift longer because the examples are longer than your target.
Length Control (Target Words vs Tokens)
Length is controlled by two knobs:
Target Words (template guidance): sets the suggested word range in the system prompt.
Max Tokens (num_predict): hard ceiling on output length.
For short descriptions, set Max Tokens low enough to prevent rambling:
30 words ≈ 40–50 tokens → set
num_predictto 60–8060 words ≈ 80–90 tokens → set
num_predictto 110–140
If num_predict is very high (e.g., 512), small models will often overshoot.
Sampling Controls (Temperature, Top-P, Top-K)
These parameters shape verbosity and drift:
Temperature: lower = tighter, higher = more wandering. Try 0.4–0.6 for short outputs, 0.7–0.9 for longer.
Top-P: lower = less variety. Try 0.7–0.85 for short outputs.
Top-K: lower = more focused. Try 20–40 for short outputs.
Short Output Checklist
If you need 25–40 words:
Use
ledgerfall_goblin_shortSet
num_predictto 60–80Use a strict user prompt: “Write 30 words exactly. One paragraph.”
Keep Temperature ≤ 0.6 and Top-P ≤ 0.85
Saving and Exporting
Saving Maps
Changes are tracked but not automatically saved. The status indicator at the bottom shows:
Gray dot: No file loaded
Yellow dot: Unsaved changes (Save enabled, Export disabled)
Green dot: All changes saved (Save disabled, Export enabled)
Click Save to persist changes to the SQLite database.
Exporting Zone Files
Once your map is saved, click Export Zone JSON to create the game truth file:
Exported to
data/zones/{zone_id}.jsonCoordinates are stripped (game engine doesn’t need them)
Room IDs, names, descriptions, and exits are preserved
The exported zone file is what the MUD server consumes.
Validating Your Map
The Validate Zone button runs comprehensive checks on your map to catch common issues before export.
Validation Categories
- Connectivity
Broken exits: Exits pointing to non-existent rooms (ERROR)
Unreachable rooms: Rooms with no path from spawn (WARNING)
Dead ends: Rooms with no exits (INFO)
- Exit Consistency
Asymmetric exits: Room A→B exists but B→A doesn’t (INFO)
Direction mismatch: Exit says “north” but coordinates suggest “south” (WARNING)
- Language-Direction
Vertical naming conflicts: Room named “Upper Landing” not reached via “up” (INFO)
Severity Levels
ERROR: Must be fixed before export (e.g., broken references)
WARNING: Should be reviewed but may be intentional
INFO: Informational only (e.g., intentional one-way doors)
Validation Report
When you validate, a JSON report is written to data/validation/{zone_id}.validation.json.
This file contains:
Timestamp of validation
Summary counts by severity
Pass/fail status (passes if no errors)
Detailed list of all warnings
The report file is useful for CI/CD integration or keeping records.
Using Validation
Load a map file
Click Validate Zone in the file browser
Review the results modal showing any issues
Click on room IDs in the modal to select them on the map
Fix issues and re-validate as needed
Export once validation passes
Keyboard Shortcuts
Currently, the mapper is mouse-driven. Keyboard shortcuts may be added in future versions.
Tips and Best Practices
- Room Naming
Use consistent naming conventions for room IDs. Consider prefixing with area names (e.g.,
tavern_common_room,tavern_kitchen).- Coordinate Planning
Plan your coordinate grid before building. Common approaches:
Unit spacing: Each room 1 unit apart
Grid spacing: Rooms at 5-unit intervals
Logical spacing: Match the “feel” of distances
- Z-Levels
Use Z-levels for multi-story buildings, dungeons, or elevation changes. Connect levels with “up” and “down” exits.
- Incremental Saving
Save frequently to avoid losing work. The mapper doesn’t auto-save.
- Export When Ready
Export zone files when your map is ready for testing in the MUD server. Keep editing the map file; re-export when you make changes.
- Version Control
Both map files and zone files are JSON and work well with git. Commit map files as your source of truth; zone files are derived.