차량 운송 (RoRo: Road-vehicle on Road-vehicle)
출처: pulsexlb/OpenTTD-patches
px-patch(2026년 9월 배치), git merge를 통해 jrpm에 병합.
개요
"차량 운송"은 기차, 배, 비행기가 자동차를 직접 운송할 수 있게 합니다:
- 자동차는 더 이상 모든 곳을 스스로 달릴 필요가 없습니다. "이동수단을 타고" 갈 수 있습니다: 운반 차량이 먼 역까지 실어다 주면, 그곳에서 내려 도로로 스스로 달려갑니다;
- 운반 차량(기차/배/비행기)은 "Vehicles (Road)" 화물로 리핏되면 자동차 운송 능력을 얻습니다 (전용 화물
VEHC, 화물 공간을 사용); - 자동차 쪽에서는 "운송 대기", "여기서 하차" 주문 플래그가 운반 차량의 "자동차 적재" / "자동차 하역" 플래그와 짝을 이룹니다.
사용 방법
운반 차량 쪽 (기차/배/비행기)
- 차고지에서 기차를 수동으로 "Vehicles (Road)" 화물로 리핏합니다 — 운반 차량이 되는 것은 수동 리핏으로만 가능하며, 주문을 통한 리핏은 적용되지 않습니다;
- 역 주문에서 "자동차 적재"를 활성화합니다: 기차는 해당 역에서 대기 중인 자동차를 싣습니다;
- 선택적 짝 옵션:
- "적재 대기" (다 실어야 출발);
- "목적지 일치": 선언된 하차 역이 운반 차량의 다음 정차지와 같은 자동차만 적재;
- "여기서 모두 하차": 각 차량이 선언한 역과 무관하게 전부 내립니다.
자동차 쪽
- 역 주문에 "운송 대기"를 설정합니다: 자동차는 그곳에서 멈춰 운반 차량을 기다립니다;
- "여기서 하차"를 설정합니다: 자동차는 이 역에서 운반 차량에서 내립니다;
- 두 옵션은 상호 배타적입니다 (주문당 하나);
- 하차 시 자동차는 경로 탐색을 한 번 실행해 최적의 승강장을 고릅니다.
세부 사항 및 규칙
- 전용 화물 슬롯: 차량 운송은 화물 슬롯 128(
NUM_CARGO - 1)을 사용하며, NewGRF가 정의할 수 있는 64개 슬롯 밖입니다; 화물 종류 총수도 64에서 128로 확장되었습니다; - 전용 운반 차량 판정: 차량의 모든 부분이 "Vehicles (Road)"로 리핏되어 있으면 주문 버튼이 기본적으로 차량 운송을 표시합니다; 일반 화물을 싣는 차량은 일반 화물을 표시합니다;
- 운반 부분 설정:
vehicle.rv_transport_carrier_parts가 어느 부분이 자동차를 실을 수 있는지 결정합니다; - 타사 적재: 다른 회사 차량의 적재/하역과 수수료 자동 정산을 허용할 수 있습니다;
- "너무 오래 운반됨" 경고: 차량이 너무 오래 실려 있으면 1회 경고를 표시합니다;
- 플레이어 작성 주문 목록: 공유/독립 주문 목록도 차량 운송 플래그를 지원합니다.
세이브게임 호환성
- 대기/운반 상태와 주문 플래그가 저장됩니다;
- 구형 세이브(XSLFI_CARGO_TYPES_128 플래그 없음)는 64개 화물 슬롯으로 읽히며 호환됩니다.
콘솔 디버그 명령 (기본 꺼짐)
rvtransport 명령군은 회귀 테스트를 위해 CMake 옵션 RORO_DEBUG_COMMANDS=ON일 때만 컴파일됩니다.
관련 코드
- 핵심:
src/roadveh_transport.h,src/cargo_type.h(VEHC 화물) - 주문:
src/order_cmd.cpp,src/order_gui.cpp,src/order_base.h(OrderExtraInfo) - 기차 적재:
src/train_cmd.cpp,src/station_cmd.cpp - 화물 확장:
src/sl/station_sl.cpp,src/sl/company_sl.cpp(XSLFI_CARGO_TYPES_128)