Skip to content

机车换挂(decouple) ​

来源:pulsexlb/OpenTTD-patches 的 jgrpp-decouple 特性分支(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* 等)。

2026-09-28 上游合并更新(px-patch 2609.x) ​

本次并入 pulsexlb 后续 113 提交中的换挂/对接相关改动:

改动说明
对接认领状态持久化列车前往对接/等待对接的瞬时状态(couple claim)写入存档(CPLM 数据块 + XSLFI_COUPLE_CLAIM_STATE),读档后对接不再错乱
对接方向判定放宽前往对接时,目标列车区间内其它车辆不在对接方向上时可继续对接
站内掉头安全列车在车站掉头前确保区间内无车辆
解挂后推进修复修复解挂后推动(propulsion)错误、primary != first 时编号不显示、站内自动改装无效等问题
路签(追踪限制)修复修复解挂后使用等待对接调度计划时错误返回路签、对接后返还路签不返还的问题
站台命令复制解挂时装卸并使用调度计划的站台命令完全复制原站台命令
对接前条件检查修复对接前列车条件只检查一次导致条件变动时对接崩溃
家调度表保护修复列车家调度表被错误删除、存档后正在执行玩家自定义调度计划的列车状态异常
无引擎列车信息面板列车窗口支持无动力编组的信息展示
订单窗口拖拽(jgrpp 0.73.3)订单支持拖拽排序;修改停靠位置/汽车行驶方向改为双击触发