Руководство разработчика
В этом документе описано, как продолжать разработку на 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 как пример) |
Часто используемые шаблоны разработки
- Добавление игровой команды: перечисление команд +
DEF_CMD_TUPLE_NT+ обработчик + GUI/консольный вход - Добавление API скрипта:
script_*.hpp/.cpp(автоматическая регистрация привязки Squirrel) - Добавление настройки:
.ini+ поле вsettings_type.h+ строка
Сборка
bash
cmake -B build ..
cmake --build build -jЗамечания по разработке
- Кодировка: при изменении исходного кода/документации, содержащей китайские символы, обратить внимание на UTF-8 (инструменты Write/Edit на данной машине однажды создали кодировку GBK, можно исправить через
jgrpp-features/_fix_utf8.py); - Сообщения коммитов: рекомендуется английский (чтобы избежать проблем с кодировкой в терминале);
- Вставка в середину перечисления команд смещает ID последующих команд — старые версии бинарника несовместимы с новыми по сети, это нормально для форка, обновление должно быть синхронным;
- Версия сохранения: при изменении структуры сохранения добавить новую запись
SLV_*вsrc/sl/saveload_common.hи обновитьSAVEGAME_VERSION; - Новые файлы:
.cppобязательно добавить в соответствующий список исходниковCMakeLists.txt(src/CMakeLists.txtили подкаталог/script/api/CMakeLists.txt);script_*.hppавтоматически обнаруживаются черезfile(GLOB), регистрация не требуется; - Новые строки: добавить в
src/lang/english.txt(для других языков по умолчанию используется английский); - Совместимость NewGRF/сохранений: изменение
_openttd_content_version/ номера версии NewGRF требует осторожности (влияет на сетевую и совместимость контента).
Рекомендации по регрессионному тестированию (важно)
Текущая ветка не компилировалась на реальном железе, после первой сборки рекомендуется регрессия в следующем порядке:
- База:
openttd-jrpm -vпоказываетjrpm-0.1.0; - Сохранения: одиночная игра 1-2 года;
- Сеть: взаимное подключение клиентов jrpm; подключение клиентов jgrpp/pxp;
- Новые функции: смена локомотивов (расцепка/сцепка/задний ход), модульные аэропорты (изменение планировки), параллельная загрузка, автоматическая группировка, подсказка строительства, GlobalAI;
- Регрессия старых функций: сигналы, tracerestrict, scheduled dispatch, шаблонная замена.