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개를 병합했으며, 분리/연결(decouple/couple) 관련 변경이 포함됩니다:

  • 커플 클레임 상태가 세이브게임에 저장됩니다 (CPLM 청크 + XSLFI_COUPLE_CLAIM_STATE);
  • 목표 블록에 다른 차량이 있어도 연결 방향 밖이면 기차가 도킹을 계속 진행할 수 있습니다;
  • 역에서 회차 전 블록이 비어 있는지 확인합니다;
  • 분리 후 추진 오류, primary != first 시 유닛 번호 미표시, 역 자동 리핏 무효 등 수정;
  • 분리 후 연결 대기 일정 사용 시 잘못된 라벨 반환과 연결 후 라벨 미반환 수정;
  • 분리 시 하역/상차 및 일정을 사용하는 플랫폼 명령이 원본 그대로 복사됩니다;
  • 연결 전 조건 변화로 인한 크래시 수정; 홈 일정이 잘못 삭제되는 문제 수정;
  • 엔진 없는 열차의 정보 패널; (jgrpp 0.73.3) 주문 드래그 앤 드롭과 더블클릭.