Skip to content

Latest commit

 

History

History
94 lines (72 loc) · 3.32 KB

File metadata and controls

94 lines (72 loc) · 3.32 KB

Development Guide

This page is the concise command and source map for day-to-day development. Detailed APIs and subsystem behavior live in the developer reference.

Required Tools

  • 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

Common Commands

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
./configure

CMake Validation

Tests 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 build

Test Surfaces

The 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-all

See TESTING_GUIDE.md for the complete suite, schema, world-tool, sanitizer, Valgrind, and subsystem commands.

Source Map

  • src/comm.c, src/interpreter.c, src/db.c, src/handler.c, and src/utils.c form 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 under src/movement/; OLC lives under src/olc/.
  • Headers inside a feature directory use path-qualified includes from outside that directory.
  • Every source addition or removal updates both Makefile.am and CMakeLists.txt.

Local Configuration

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_config

Never overwrite or commit those local files. Edit the example only when the shared template contract changes.

Code and Documentation Style

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.