游戏版本 756039
首页 › 游戏机制 › 季节

季节 Seasons

机制季节温度天气首领 又名 四季

季节由世界的季节组件推进,按秋季、冬季、春季、夏季循环,并同时影响昼夜分配、环境温度、降雨与积雪,以及部分生物和首领的活动。默认友好世界中,秋季和春季较长,冬季和夏季较短;实际长度还会受世界设置影响。

季节长度与推进

季节组件 scripts/components/seasons.lua 按 autumn → winter → spring → summer 的顺序循环。默认长度由以下平衡常量提供:

季节 默认长度
秋季 20 天
冬季 15 天
春季 20 天
夏季 15 天

季节长度在运行时存入世界状态;每经过一个世界日,当前季节的剩余天数减少,归零后切换到下一个启用的季节。季节组件支持 cycle、endless 和 always 三种模式:正常循环会按启用季节轮换;只启用一个季节时,组件会使用永久季节相关逻辑;世界设置改变季节长度后,当前季节的剩余时间会按当前进度重新计算。

季节切换并不只在边界瞬间改变环境。温度和降雨组件读取 seasontick 的 progress,因此季节中的温度、降雨等效果会随季节进度渐变。秋季和春季在新世界开始时会以中段进度初始化相关环境数据,以避免开局立即处于极端天气状态。

昼夜分配

每个季节仍由总计 16 个时钟格组成,但白天、黄昏和夜晚的比例不同。默认分配为:

季节 白天 黄昏 夜晚
秋季 8 格 6 格 2 格
冬季 5 格 5 格 6 格
春季 5 格 8 格 3 格
夏季 11 格 1 格 4 格

季节接近交替时,组件会在前后季节的时钟分配之间进行过渡,再将结果修正为总计 16 格。世界设置或其他系统可以修改季节时钟分配;因此表中的分配是源码内置的默认值,而非所有世界都不可变的固定规则。

温度与季节特征

环境温度由 scripts/components/worldtemperature.lua 计算,主要由季节温度、昼夜温度和噪声共同组成,之后还会应用世界温度倍率与基准偏移。季节温度的变化规律如下:

  • 秋季:从夏季侧的交叉温度逐渐降向冬季侧的交叉温度。
  • 冬季:以正弦曲线从冬季交叉温度降至环境最低端,再回升。
  • 春季:从冬季交叉温度线性升向夏季交叉温度。
  • 夏季:以正弦曲线从夏季交叉温度升至环境最高端,再回落。

源码中的交叉温度为 35 等 TUNING 之外的局部环境常量,实际温度还会叠加昼夜项和随机噪声,因此不能仅用季节名称判断角色当前体感温度。夏季白天还会启用额外的夏季光照 bloom 效果;天气组件同时会在夏季生成花粉效果。

季节还会改变生存压力:冬季通常需要准备保暖、热源和防雪方案;夏季则需要降温、防自燃与灭火方案。worldtemperature.lua 中确认的过热阈值为 70,但角色是否过热还取决于体温组件、装备和环境位置。

降雨、湿度与积雪

降水由 scripts/components/weather.lua 根据季节进度、当前湿度和温度决定。四季的降水趋势不同:

  • 秋季:降水处于中等范围,湿度变化较温和。
  • 冬季:降水可能转为降雪;季节开始阶段会特别处理湿度速率,使早期更容易形成初始积雪。低于当前季节的开始降雪温度时,降水类型会选择雪;温度升过停止降雪温度后才会停止积雪效果。
  • 春季:湿度和降水速率最高,连续降雨更容易使角色潮湿;源码还将春季的植物生长倍率设为 0.75。
  • 夏季:降雨速率较低,且在季节中段进一步降低;夏季降雨会带来额外的降温项 -20,但不能替代完整的降温装备与热源管理。

天气组件会把季节状态转换为世界状态中的 precipitation、israining、issnowing、snowlevel、wetness 等变量。下雨会增加潮湿;不下雨时,干燥速度还受温度影响。冬季在低于冻结温度时有专门的快速干燥分支,不能简单地把四季的干燥速度视为相同。

生物、资源与世界事件

季节通过 worldstate 向实体广播 season、isautumn、iswinter、isspring、issummer 以及当前季节进度,许多系统据此切换行为:

  • 冬季会影响鸟类变体、企鹅相关行为、鹿群迁移,以及冬季惊喜和礼物袋等冬季生成系统。
  • 春季会触发moose巢穴初始化;春季还会改变蜜蜂、捕蝇草和部分植物相关行为。
  • 秋季、冬季、春季和夏季会使用不同的树木、蘑菇、植物或资源再生逻辑;是否再生取决于具体实体代码,而不是所有资源都遵循同一套季节规则。
  • 世界状态同时记录 elapseddaysinseason、remainingdaysinseason 和 seasonprogress,实体可以据此在季节开始、季节中段或季节末执行一次性事件。

月岛冰雹等特殊天气属于独立的降水类型,不应与普通四季降雨或冬季降雪混为一谈;worldstate.lua 将它单独暴露为 islunarhailing。

季节首领与准备

首领的出现通常由各自的生成组件控制,并不只是“进入某季节就立即生成”。当前源码确认的主要季节关联如下:

  • 独眼巨鹿:deerclopsspawner.lua 的默认条件要求世界度过保护期,并且当前季节为冬季;组件会选择符合条件的玩家和附近建筑作为目标,再通过计时器安排攻击。准备重点是冬季保暖、战斗空间和建筑保护。
  • 熊獾:beargerspawner.lua 在秋季季节事件中更新生成机会,并要求世界度过保护期;秋季开始时会重算相关生成数量。准备重点是把战斗引离基地,并预留处理其破坏建筑行为的空间。
  • 麋鹿鹅:moosespawner.lua 在春季状态开始且世界度过保护期后初始化部分巢穴,随后通过巢穴计时器安排生成。准备重点是春季高湿环境下的移动与战斗,以及避免把巢穴和基地布局混在一起。

源码中的保护期统一引用 26;不同首领仍有各自的计时器、生成机会和目标选择逻辑,不能据此推断每个首领必定在季节开始当天出现。实际准备应在对应季节前完成:冬季先准备保暖与热源,春季准备防雨和战斗场地,秋季准备基地防破坏与首领引导路线。

世界状态与代码参考

季节组件通过 seasontick 事件发布当前季节、进度和剩余时间;worldstate 接收后更新以下可观察变量:

  • season:autumn、winter、spring 或 summer。
  • isautumn、iswinter、isspring、issummer:对应季节布尔值。
  • elapseddaysinseason、remainingdaysinseason、seasonprogress:季节进度数据。
  • autumnlength、winterlength、springlength、summerlength:当前世界设置下的季节长度。

主要代码依据:

  • scripts/components/seasons.lua:季节顺序、长度、推进、模式和昼夜分配。
  • scripts/components/worldstate.lua:季节事件到世界状态变量的转换。
  • scripts/components/worldtemperature.lua:季节温度曲线、昼夜温度和夏季 bloom。
  • scripts/components/weather.lua:季节降雨、降雪、湿度、积雪和降水类型。
  • scripts/components/deerclopsspawner.lua:独眼巨鹿的季节条件。
  • scripts/components/beargerspawner.lua:熊獾的秋季生成条件。
  • scripts/components/moosespawner.lua:麋鹿鹅的春季巢穴初始化。
  • scripts/tuning.lua:季节长度、温度、降雨和相关平衡常量。

相关条目

独眼巨鹿熊獾mooseweather温度

版本记录

  • 首次收录:build 756039;正文编写:build 756039;核对至:build 756039

依据源码:scripts/components/seasons.lua scripts/components/worldstate.lua scripts/components/worldtemperature.lua scripts/components/weather.lua scripts/components/deerclopsspawner.lua scripts/components/beargerspawner.lua scripts/components/moosespawner.lua scripts/tuning.lua

涉及实体:seasons(seasons)