Skip to content

Смена локомотивов (decouple) ​

Источник: ветка функций jgrpp-decouple из pulsexlb/OpenTTD-patches (ядро из 152 коммитов), объединено через git merge в jrpm.

Краткое описание функции ​

«Смена локомотивов» позволяет поездам расцепляться и сцепляться с вагонами или локомотивами на станциях/в депо, обеспечивая:

  • Расцепление: поезд по «приказу на расцепку» оставляет часть вагонов (или вагоны+локомотив) на указанной станции, остальная часть продолжает движение;
  • Сцепление: поезд ожидает на станции и автоматически сцепляется с другим составом (или стоящей группой вагонов);
  • После расцепления оба поезда выполняют свои собственные расписания: через механизм «условного пропуска команд» и т.п. два поезда после расцепления следуют разным расписаниям;
  • Передача маршрутных листов: при расцепке/сцепке маршрутные листы (теги ограничения отслеживания) правильно передаются или дедублицируются.

Ключевые возможности ​

ВозможностьОписание
Приказы на расцепку/сцепкуНовые типы приказов с поддержкой «загрузить/не загружать», «ожидать сцепки», «расцепить» и других ограничений
Ограничения длины сцепки и скоростиОперация сцепки ограничена по длине поезда; сцепка имеет ограничение скорости
Поддержка двойной тягиПравильная сцепка/расцепка переднего и заднего локомотивов (включая NewGRF двухголовые локомотивы)
Навигация сцепкиYAPF/NPF поддерживают планирование пути сцепки; сцепка только на станциях
Движение задним ходомПосле сцепки возможно движение задним ходом, поддержка тактики «расцепиться и ехать назад»
Сцепка NewGRFПоддержка атрибутов сцепки, определённых NewGRF (атрибуты 0xC6/0xF2 и т.д.)
СохранениеВерсия сохранения SLV_ORDER_DECOUPLE; сохранение счётчика num_decouple

Способ использования ​

  1. На станции используйте приказ «расцепить» (decouple) для разделения поезда;
  2. Установите приказ на сцепку, чтобы поезд ожидал соединения;
  3. В сочетании с «условным пропуском команд» (conditional order skip) два поезда после расцепки следуют разным маршрутам;
  4. На станции можно перетаскивать вагоны для изменения порядка или использовать вспомогательные инструменты типа «фильтр по длине».

Соответствующий код ​

  • Приказы: 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) перетаскивание заказов и двойной клик.