Repository navigation
Contributing Workflow
TL;DR: Fork, branch, change, open a pull request, keep your fork in sync with
upstream. Everything that goes into git is in English. How a change reaches a running game depends on what you touched: a plugin needs a rebuild and a reload, the core needs a restart, zone files load at boot, public Fenia hot-reloads. Use when: you are about to send your first pull request, or you changed something and need to see it in a local game. Source of truth:dreamland_code/plug-ins/admin/cplugin.cpp(plugin reload),dreamland_code/plug-ins/feniaroot/ccodesource.cpp(cs load),dreamland_code/README.md,dreamland_world/scripts/Verified: 2026-11-02 against dreamland_code a7c4fd10, dreamland_world a35c62ce, dreamland_fenia_public c28874b
Build commands live in the repository README, next to configure.ac. This page covers what happens after you can build. Environments and ports are on Local-Setup.
- Fork the repository on GitHub and clone your fork.
- Add the main repository as a second remote right after cloning:
git remote add upstream https://github.com/dreamland-mud/dreamland_code.git- Create a branch per change. Keep one topic per branch.
- Commit, push the branch to your fork, open a pull request against
master. - To catch up with the main repository:
git fetch upstream
git merge upstream/masterThe same cycle applies to dreamland_world, dreamland_fenia_public, mudjs and dreamland_web. Substitute the repository name.
These are always English:
- Commit messages.
- Pull request titles and descriptions.
- Issue and pull request comments.
- Code comments in C++, Fenia, JSON and XML.
- Any source string that no player reads.
Text a player reads is content, not code. It stays trilingual (English, Ukrainian, Russian) and follows Writing-Player-Text.
| Changed | Check |
|---|---|
| C++ | Build the plugin or core you touched. A header change breaks callers in other plugins, so grep for the symbol first and rebuild everything. |
| Fenia act, echo or fmt strings | Every placeholder is numbered (%1$s), see Output-Format. |
| Help articles | No duplicate help ids, see Help-Articles. |
| Any Cyrillic text | One alphabet per word, ASCII punctuation, see Writing-Player-Text. |
The dreamland_world/scripts/ folder holds checkers. Each script documents its arguments in its header.
| Script | Catches |
|---|---|
lint-help-boot.py |
Duplicate help ids, and skills with a spell, affect or command but no help. Both crash the boot. |
lint-catalog-coverage.py |
A wrapped _() string in a source file with no English or Ukrainian catalog entry. Players would see Russian. |
lint-catalog-placeholders.py |
A translated catalog value whose placeholders differ from the Russian key. |
lint-hc-command-lang.py |
{hc links whose command word is not a command. |
find-foreign-fragments.py |
Latin words inside Cyrillic text and Latin letters hidden in Cyrillic words. |
lint-affect-labels.py |
The web client affect panel fields on skills. |
lint-religion-access.py |
Religion access rules that disagree with the help articles. |
A push to master of dreamland_code triggers the project's build pipeline (.drone.yml, admin/drone-build.sh), and the result is posted to the developers' Discord channel. Legacy: .travis.yml and the Travis badge in the README no longer reflect the build.
A maintainer reviews and merges your pull request.
| You changed | Do this | Needs restart |
|---|---|---|
A plugin (plug-ins/<name>/*.cpp) |
make -j 4 && make install in the plugin's build directory, then plugin reload <name> in game |
no |
| Several plugins | Rebuild them, then plugin reload changed
|
no |
The core (src/*.cpp) |
make -j 4 && make install in the src build directory |
yes |
| A header | Rebuild from the top of the build directory | yes |
Config and help files in dreamland_world
|
plugin reload most for files a plugin reads at load. Which reload covers which file is listed on Data-Configs
|
sometimes |
| Zone files | Read once at boot | yes |
| Public Fenia |
cs load public/<path> as a coder character, for example cs load public/utils/translit (some public helpers call private namespaces and do not run on a local server). The name is resolved under feniaScriptDir from etc/dreamland.xml, which the stock template sets to share/DL/fenia. A config made from an older template says share/DL/fenia.local, and there the command fails with Error loading codesource, see Local-Setup
|
no |
| Fenia you type in game |
cs web or cs paste, then cs post
|
no |
plugin reload takes all, most, changed or one plugin name:
-
allreloads every plugin, including the criticaldescriptorplugin that holds connections, so everybody is dropped. -
mostreloads everything except thedescriptorplugin. -
changedreloads plugins whose library file is newer than their load time, and also skipsdescriptor. A change to XML or JSON alone does not mark a plugin as changed. - A plugin name reloads that one plugin. Naming
descriptordrops connections on purpose.
Avoid all on a server with people on it.
cs load all <directory> loads every script under a directory. A failed file prints an error and the details go to the game log, so read the log after a load.
| Your change | Repository |
|---|---|
| Engine, plugins, Fenia interpreter | dreamland_code |
| Skills, races, classes, config, help articles, tunables | dreamland_world |
| A reusable Fenia helper | dreamland_fenia_public |
| Web client | mudjs |
| Website, help site, searcher | dreamland_web |
| Mudlet package | dreamland_mudlet |
Zone files and most game scripts are in private repositories. If your change needs them, describe it in an issue or on Discord and a maintainer will help land it.
Start here
Get running
Contribute
- Contribute
- Contributing Workflow
- Code Style
- Accessibility
- Writing Player Text
- Game Design Principles
Build areas
- Building
- OLC
- OLC Rooms
- OLC Mobiles
- OLC Objects
- OLC Resets
- OLC Line Editor
- OLC Other Editors
- Area Format
- Area Quests
- Mob Forms and Parts
Fenia
- Fenia
- Fenia Language
- Fenia Triggers
- Fenia Gotchas
- Fenia API
- Fenia Scripts
- Fenia Behaviors
- Fenia Skills and Spells
- Fenia Cookbook
- Fenia Grammar
Engine
- Engine Architecture
- Engine Time and Pulses
- Output Format
- Mechanics Combat
- Mechanics World
- Data Configs
- Item Power
Localization
Clients
More