Skip to content

Руководство разработчика ​

В этом документе описано, как продолжать разработку на jrpm. Все шаблоны взяты из реально реализованного кода в этом проекте (можно сверить с коммитами в git log).

Краткий обзор организации кода ​

КаталогНазначение
src/Весь исходный код C++ (верхний уровень назван по системе: rail_cmd.cpp, group_gui.cpp…)
src/network/Сеть (сервер/клиент/UDP/HTTP/загрузка контента)
src/script/Фреймворк скриптов (Squirrel); api/ — классы API для AI/GS
src/table/settings/*.iniИсточники определения настроек (settingsgen генерирует код)
src/lang/english.txtОпределение строк (strgen генерирует)
src/sl/saveload_common.hПеречисление версий сохранений (SLV)
bin/ai/Скрипты AI (GlobalAI как пример)

Часто используемые шаблоны разработки ​

Сборка ​

bash
cmake -B build ..
cmake --build build -j

Замечания по разработке ​

  1. Кодировка: при изменении исходного кода/документации, содержащей китайские символы, обратить внимание на UTF-8 (инструменты Write/Edit на данной машине однажды создали кодировку GBK, можно исправить через jgrpp-features/_fix_utf8.py);
  2. Сообщения коммитов: рекомендуется английский (чтобы избежать проблем с кодировкой в терминале);
  3. Вставка в середину перечисления команд смещает ID последующих команд — старые версии бинарника несовместимы с новыми по сети, это нормально для форка, обновление должно быть синхронным;
  4. Версия сохранения: при изменении структуры сохранения добавить новую запись SLV_* в src/sl/saveload_common.h и обновить SAVEGAME_VERSION;
  5. Новые файлы: .cpp обязательно добавить в соответствующий список исходников CMakeLists.txt (src/CMakeLists.txt или подкаталог/script/api/CMakeLists.txt); script_*.hpp автоматически обнаруживаются через file(GLOB), регистрация не требуется;
  6. Новые строки: добавить в src/lang/english.txt (для других языков по умолчанию используется английский);
  7. Совместимость NewGRF/сохранений: изменение _openttd_content_version / номера версии NewGRF требует осторожности (влияет на сетевую и совместимость контента).

Рекомендации по регрессионному тестированию (важно) ​

Текущая ветка не компилировалась на реальном железе, после первой сборки рекомендуется регрессия в следующем порядке:

  1. База: openttd-jrpm -v показывает jrpm-0.1.0;
  2. Сохранения: одиночная игра 1-2 года;
  3. Сеть: взаимное подключение клиентов jrpm; подключение клиентов jgrpp/pxp;
  4. Новые функции: смена локомотивов (расцепка/сцепка/задний ход), модульные аэропорты (изменение планировки), параллельная загрузка, автоматическая группировка, подсказка строительства, GlobalAI;
  5. Регрессия старых функций: сигналы, tracerestrict, scheduled dispatch, шаблонная замена.