Смена локомотивов (decouple)
Источник: ветка функций
jgrpp-decoupleиз pulsexlb/OpenTTD-patches (ядро из 152 коммитов), объединено через git merge в jrpm.
Краткое описание функции
«Смена локомотивов» позволяет поездам расцепляться и сцепляться с вагонами или локомотивами на станциях/в депо, обеспечивая:
- Расцепление: поезд по «приказу на расцепку» оставляет часть вагонов (или вагоны+локомотив) на указанной станции, остальная часть продолжает движение;
- Сцепление: поезд ожидает на станции и автоматически сцепляется с другим составом (или стоящей группой вагонов);
- После расцепления оба поезда выполняют свои собственные расписания: через механизм «условного пропуска команд» и т.п. два поезда после расцепления следуют разным расписаниям;
- Передача маршрутных листов: при расцепке/сцепке маршрутные листы (теги ограничения отслеживания) правильно передаются или дедублицируются.
Ключевые возможности
| Возможность | Описание |
|---|---|
| Приказы на расцепку/сцепку | Новые типы приказов с поддержкой «загрузить/не загружать», «ожидать сцепки», «расцепить» и других ограничений |
| Ограничения длины сцепки и скорости | Операция сцепки ограничена по длине поезда; сцепка имеет ограничение скорости |
| Поддержка двойной тяги | Правильная сцепка/расцепка переднего и заднего локомотивов (включая NewGRF двухголовые локомотивы) |
| Навигация сцепки | YAPF/NPF поддерживают планирование пути сцепки; сцепка только на станциях |
| Движение задним ходом | После сцепки возможно движение задним ходом, поддержка тактики «расцепиться и ехать назад» |
| Сцепка NewGRF | Поддержка атрибутов сцепки, определённых NewGRF (атрибуты 0xC6/0xF2 и т.д.) |
| Сохранение | Версия сохранения SLV_ORDER_DECOUPLE; сохранение счётчика num_decouple |
Способ использования
- На станции используйте приказ «расцепить» (
decouple) для разделения поезда; - Установите приказ на сцепку, чтобы поезд ожидал соединения;
- В сочетании с «условным пропуском команд» (conditional order skip) два поезда после расцепки следуют разным маршрутам;
- На станции можно перетаскивать вагоны для изменения порядка или использовать вспомогательные инструменты типа «фильтр по длине».
Соответствующий код
- Приказы:
src/order_cmd.cpp,src/order_gui.cpp,src/order_type.h - Поезда:
src/train_cmd.cpp,src/train.h - Навигация:
src/pathfinder/yapf,src/pathfinder/npf - Сохранение:
src/sl/saveload_common.h(SLV_ORDER_DECOUPLE)
Примечания
- Эта функция включает глубокие изменения физического порядка поезда/логики резервирования сигналов, рекомендуется тщательное регрессионное тестирование после сборки на реальном железе: расцепка, сцепка, задний ход, восстановление после столкновения, автозамена (autoreplace) и т.д.;
- Связанные строки и GUI для расцепки уже включены (
STR_DECOUPLE*и т.д.).
Обновление слияния upstream 2026-09-28 (px-patch 2609.x)
Слито 113 новых коммитов pulsexlb с изменениями расцепления/сцепления:
- Состояние заявки на сцепление сохраняется в игре (чанк CPLM + XSLFI_COUPLE_CLAIM_STATE);
- Поезд может продолжать следовать на сцепление, даже если в целевом блоке стоят другие составы вне направления сцепления;
- Разворот на станции выполняется только при свободном блоке;
- Исправлены: ошибка тяги после расцепления, номер состава при primary != first, автопереоборудование на станции и др.;
- Исправлен возврат меток (tracerestrict) после расцепления с ожиданием сцепления и после сцепления;
- Команды платформы с погрузкой/выгрузкой и расписанием при расцеплении копируются полностью;
- Исправлен вылет при изменении условия перед сцеплением; домашнее расписание больше не удаляется по ошибке;
- Информационная панель для поездов без двигателя; (jgrpp 0.73.3) перетаскивание заказов и двойной клик.