This page is the concise command and source map for day-to-day development. Detailed APIs and subsystem behavior live in the developer reference.
- GCC 13+ or Clang 18+ with GNU C23 support
- Autoconf, Automake, Make, and the repository's configured Autotools files
- MariaDB/MySQL server and client development headers
- crypt, GD, curl, OpenSSL, pthread, and json-c development libraries
- CMake 3.21+ for the supported secondary build
- GDB and Valgrind for debugging and memory checks
| Command | Purpose |
|---|---|
make clean && make -j"$(nproc)" |
Rebuild the configured Autotools tree |
make test |
Run production-linked CuTest and registered shell regressions |
make install |
Activate the tested immutable release as bin/circle |
./bin/circle -d lib |
Run the server with repository runtime data |
./scripts/debugging/debug_game.sh |
Start the maintained GDB helper |
./scripts/operations/healthcheck.sh |
Check database-backed local readiness |
python scripts/world/wtool.py --help |
Inspect the read-only world-data tool surface |
If configure or Makefile is missing, initialize Autotools first:
autoreconf -fvi
./configureTests are opt-in for a fresh CMake tree:
cmake -S . -B build -DBUILD_TESTS=ON
cmake --build build -j"$(nproc)"
ctest --test-dir build --output-on-failure
cmake --install buildThe root make test target is authoritative for behavior linked against all
game sources. There is no test_runner binary and CuTest has no
per-test-function filter. The focused protocol parser harness is available at:
cd unittests/CuTest
make protocol-parser
make test-allSee TESTING_GUIDE.md for the complete suite, schema, world-tool, sanitizer, Valgrind, and subsystem commands.
src/comm.c,src/interpreter.c,src/db.c,src/handler.c, andsrc/utils.cform the server core.- Feature directories under
src/are one level deep. Put a file where its primary responsibility belongs; do not introduce second-level source trees. - Spells and skills share the number space and live under
src/magic/. - Combat behavior lives under
src/combat/; movement commands live undersrc/movement/; OLC lives undersrc/olc/. - Headers inside a feature directory use path-qualified includes from outside that directory.
- Every source addition or removal updates both
Makefile.amandCMakeLists.txt.
On a fresh clone only, copy missing examples to their local paths:
test -e src/campaign.h || cp src/campaign.example.h src/campaign.h
test -e src/mud_options.h || cp src/mud_options.example.h src/mud_options.h
test -e src/vnums.h || cp src/vnums.example.h src/vnums.h
test -e lib/mysql_config || install -m 600 lib/mysql_config_example lib/mysql_configNever overwrite or commit those local files. Edit the example only when the shared template contract changes.
Use 2-space indentation, Allman braces, declarations at block starts,
lower_snake_case identifiers, UPPER_SNAKE_CASE constants, and bounded
string functions. Do not mechanically restyle legacy code. Documentation and
helpfiles must be ASCII, UTF-8, and LF.