기관차 분리 (decouple)
출처: pulsexlb/OpenTTD-patches의
jgrpp-decouple기능 브랜치 (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*등).
업스트림 병합 업데이트 2026-09-28 (px-patch 2609.x)
pulsexlb의 신규 커밋 113개를 병합했으며, 분리/연결(decouple/couple) 관련 변경이 포함됩니다:
- 커플 클레임 상태가 세이브게임에 저장됩니다 (CPLM 청크 + XSLFI_COUPLE_CLAIM_STATE);
- 목표 블록에 다른 차량이 있어도 연결 방향 밖이면 기차가 도킹을 계속 진행할 수 있습니다;
- 역에서 회차 전 블록이 비어 있는지 확인합니다;
- 분리 후 추진 오류, primary != first 시 유닛 번호 미표시, 역 자동 리핏 무효 등 수정;
- 분리 후 연결 대기 일정 사용 시 잘못된 라벨 반환과 연결 후 라벨 미반환 수정;
- 분리 시 하역/상차 및 일정을 사용하는 플랫폼 명령이 원본 그대로 복사됩니다;
- 연결 전 조건 변화로 인한 크래시 수정; 홈 일정이 잘못 삭제되는 문제 수정;
- 엔진 없는 열차의 정보 패널; (jgrpp 0.73.3) 주문 드래그 앤 드롭과 더블클릭.