火车轮渡与雨天系统
来源: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