Skip to content

火车轮渡与雨天系统 ​

来源:pulsexlb/OpenTTD-patches px-patch(2026-10 批次,pxp-2610.1 ~ pxp-2610.3),经 git merge 并入 jrpm。

本轮合并带来两项较大的新功能:火车轮渡(轮船运载整列火车)与雨天系统(含世界变暗与雨滴蒙版)。

火车轮渡 ​

在原有「载具运输(RoRo)」把汽车装上火车/轮船/飞机的基础上,轮船现在还能运载整列火车。

与 RoRo 的关系 ​

汽车运输(VEHC)火车运输(RAIL)
承运载具火车、轮船、飞机轮船
被运载对象汽车火车(含机车与客车)
货物标签VEHCRAIL
货物槽NUM_CARGO - 1NUM_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