기차 페리와 비
출처: pulsexlb/OpenTTD-patches
px-patch(2026-10 배치,pxp-2610.1~pxp-2610.3), git merge로 jrpm에 통합.
이번 배치에는 두 가지 큰 새 기능이 들어왔다: 기차 페리(선박으로 열차를 운반)와 비 시스템(세계 어두워짐과 빗방울 오버레이).
기차 페리
자동차가 기차·선박·비행기에 실리는 기존 「차량 운송(RoRo)」를 바탕으로, 이제 선박이 열차 전체를 운반할 수 있다.
RoRo와의 관계
| 차량 운송 (VEHC) | 열차 운송 (RAIL) | |
|---|---|---|
| 운반 수단 | 기차, 선박, 비행기 | 선박 |
| 운반 대상 | 도로 차량 | 열차 (기관차와 객차 모두) |
| 화물 라벨 | VEHC | RAIL |
| 화물 슬롯 | NUM_CARGO - 1 | NUM_CARGO - 2 |
두 화물 슬롯 모두 NewGRF의 64개 슬롯 밖에 있어 서로 충돌하지 않는다.
적재
- 선박은 수동 개조로 「운송 차량(열차)」 화물에 지정해야 열차 전체를 운반할 수 있다;
- 객차 단위 분실 적재: 열차를 여러 선실에 나누어 실을 수 있어, 열차 전체가 한 선실에 들어가야 한다는 제약이 없어졌다. 긴 열차가 한 선실 용량을 넘는 문제가 해결된다;
- 운송 옵션의 표지판 선택에서 열차 표지판과 자동차 표지판을 각각 고를 수 있어, 운송 방식마다 목적지를 따로 선언할 수 있다;
- 상태 표시줄이 실린 차량 목록을 자세히 표시하지 않아, 더 중요한 운행 정보에 공간을 내준다.
적재량 표시
- 선박 정보 창이 선실별 적재 가능한 화물 무게를 보여준다;
- 열차 정보 창이 객차별 용량을 보여준다.
관련 수정
이번 배치에서는 적재·하역과 승강장 예약 관련 결함도 여럿 고쳤다:
- 선박이 열차를 내릴 때 선로 유형을 호환되지 않다고 오판해 열차가 내리지 못하던 문제;
- 열차가 실릴 때 승강장 예약을 정리하지 않고, 내릴 때 구조 및 예약 오류가 발생하던 문제;
- 승강장 예약이 남아 열차가 다시 승강장에 내리지 못하던 문제;
- 일부 승강장 방향에서 열차를 내리지 못하던 문제;
- 운송용으로 개조된 차량의 객차 수 제한이 적용되지 않던 문제.
비 시스템
순수히 장식적인 날씨 시뮬레이션으로, 화면 표현에만 영향을 주고 게임 로직이나 경제 수치에는 손대지 않는다.
날씨 표현
- 무작위 강우 기간: 날씨 상태는 지도 생성 시드로 초기화된 결정론적 난수 생성기로 구동되며, 따라서 모든 플레이어와 서버가 완전히 동일한 날씨를 본다;
- 점진적 세계 어두워짐: 비가 오면 세계가 점차 어두워지고 그치면 다시 밝아진다. 어두워짐은
RAIN_SHADE_LEVELS단계로 진행되며 뷰포트를 그릴 때 읽힌다; - 빗방울 오버레이: 전체 화면 빗방울 레이어로 줌에 맞춰 크기가 변하고 무작위 흔들림이 있어 정지된 텍스처처럼 보이지 않는다.
설정과 치트
- 난이도 설정
difficulty.rain: 새 게임을 시작할 때 비 올 때의 세계 어두워짐을 사용할지 결정한다; - 샌드박스 치트 「날씨」: 자동 / 강제 비 / 강제 맑음 세 가지 순환.
저장 파일
날씨 상태(현재 비가 오는지, 난수 시드, 현재 강우 기간의 시작 시각)와 샌드박스 날씨 치트가 저장 파일과 함께 보존되며, 읽은 뒤에는 어두워짐이 다시 서서히 나타나지 않고 현재 날씨로 즉시 맞춘다.
- 청크:
WTHR; - 기능 플래그:
XSLFI_WEATHER; - 코드:
src/weather.cpp,src/weather.h,src/sl/weather_sl.cpp.
관련 코드
- 기차 페리와 적재량:
src/roadveh_transport.cpp,src/cargo_type.h(CT_RAILVEHICLES),src/table/cargo_const.h - 비 시각 효과:
src/weather.cpp,src/blitter/32bpp_anim.cpp,src/blitter/40bpp_anim.cpp,src/viewport.cpp - 날씨 저장:
src/sl/weather_sl.cpp,src/sl/extended_ver_sl.cpp(XSLFI_WEATHER) - 설정과 치트:
src/table/settings/difficulty_settings.ini(difficulty.rain),src/cheat_gui.cpp,src/cheat_type.h