Skip to content
游戏世界地形纹理 · 机制与百科资料

食物与腐败 ​

稳定食物来源由狩猎、烹饪与库存轮换共同组成。只解决眼前饥饿、不管理腐败,会让据点不断回到缺粮状态。种植与耕作部分见农业机制。

数据统一

本节提到的饱食度、营养值、进食疲劳为0~1之间的浮点数,为了玩家方便理解,在此处会转换为0~10格饱食度。0格表示饱食度条为空,10格表示饱食度条已满,为了表述方便,我们将”一饥饿条”表示“10格饱食度”。下文提到的饱食度和饥饿值是相同的概念。疾病、生病和呕吐是相同的概念。

食物系统 ​

食物类型 ​

游戏中有以下几种食物类型:肉类、鱼类、水果、草类、面包、其他(无类型)。

进食机制 ​

进食逻辑在进食方法中,流程如下:

  1. 饱食度检查:饱食度已满时不能进食
  2. 疾病状态检查:如果玩家已生病,不能吃任何有疾病概率的食物和引起疾病的食物。
  3. 营养值应用:营养值是食物能提供的饱食度,如果生病,营养值会降低25%。
  4. 同食物疲劳累积:每种食物有独立的疲劳计数器,每次进食累加其营养值(低于 5 时累加 5)。
  5. 疾病概率判定:根据食物的疾病概率随机判定决定是否引发疾病;某种食物疲劳超过 35 时强制引发疾病
进食的关键要素必要条件🍖 饱食度未满饱食度需 < 10 格🚫 疾病限制生病时禁吃有疾病概率的食物⚠️ 不满足则无法进食影响因素🤢 生病状态营养吸收 ×0.75🎲 疾病概率按概率引发疾病😋 进食疲劳超过25吃腻 · 超过35生病同类食物反复吃累积值持续增加
进食要素:满足必要条件方可进食,影响因素决定营养吸收与疾病风险

饱食度与同食物疲劳的区别 ​

关键区分:游戏画面上的饱食度条和"吃腻了"机制用的进食疲劳是两个完全不同的数据,不要混淆。

游戏中有两套独立的数据:

数据范围画面表现说明
饱食度0~10 格画面上 10 格饥饿条吃任何食物都会增加,随时间持续下降
同食物疲劳值≥ 0无直接显示,但超过阈值时弹提示每种食物各自独立累积,仅随时间缓慢衰减
  • 饱食度是玩家熟悉的 10 格饥饿条。吃一个面包就涨半条饥饿条(5 格),吃饱了(10 格)就不能再吃。
  • 饱食度溢出会被丢弃:饱食度上限被锁死在 10 格。9 格时吃一个面包(5 格),饱食度不会变成 14 格,而是直接满到 10 格——溢出的 4 格被丢弃,不会转化为任何额外效果。
  • 进食疲劳是一个隐藏计数器,每种食物各自独立。每次吃同一种食物,该食物的疲劳值就增加 5(营养值不足 5 时按 5 算)。当疲劳值超过以下阈值时触发对应效果:
疲劳值阈值触发效果说明
> 20提示"开始吃腻了"屏幕显示小字提示
> 25提示"吃腻了"更明显的提示
> 35强制生病无论食物本身疾病概率多低,都会引发疾病

关键:疲劳值与饱食度溢出无关。每次吃同一种食物,疲劳值固定增加 5,不管你当时饱食度是 1 格还是 9 格。9 格时吃面包,疲劳值只增加 5(和空腹时吃一样),溢出的 4 格饱食度不会变成额外的疲劳值。强制生病的条件是连续吃同一种食物累计到 35,不是单次溢出。

举例:面包营养值 0.5(5 格),连续吃 5 个面包 → 疲劳值 = 5 × 5 = 25,触发"吃腻了"提示;吃第 7 个 → 7 × 5 = 35,强制生病。熟肉营养值 0.8(8 格),吃 4 个 → 4 × 0.8 = 3.2,已经"吃腻了";吃第 5 个 → 5 × 0.8 = 4.0,强制生病。生鱼肉营养值仅 0.25(2.5 格),但每次仍按 5 累积,吃 7 个也会强制生病。

疲劳值衰减:进食疲劳会随时间缓慢衰减,每游戏天衰减 5。也就是说,如果停止吃某种食物约 5 个游戏天(约 100 现实分钟),进食疲劳就能从 25 降到 0;从 35 降到 0 需要约 7 个游戏天。因此轮换吃不同种类的食物可以有效避免吃腻。

饱食度与进食疲劳-两套独立数据饱食度(0~10 格 · 封顶 10)10/10 满✕ 溢出丢弃↑ 吃食物增加随时间下降 ↓两套数据互不影响进食疲劳(≥0 · 无上限 · 每种食物独立)20 开始吃腻25 吃腻了35 强制生病示例 28↑ 同食物每次 +max(营养值,5)每天衰减 5 ↓💡 关键:吃食物时两套数据各自增加,互不转化9 格饱食度吃面包 → 饱食度满到 10(溢出 4 格丢弃),疲劳值只 +5(与空腹时相同)
饱食度封顶丢弃溢出,进食疲劳持续累积——两者完全独立

饥饿系统 ​

饥饿值会随时间持续下降。

下面表格展示了不同活动对饥饿值的影响:

活动速率说明
站着不动1×约 2.4 天消耗 1 饥饿条
陆地行走1~2×走得越快消耗越多
水中游泳2~4×消耗是陆地的 2 倍
跳跃每次固定消耗跳得越多越饿
挖掘2×挖掘时消耗翻倍

饥饿系数 ​

以 饥饿系数 = 1 为例,纯被动消耗需2.4 游戏日才会把饥饿条从满消耗到空。

饥饿系数是一个饥饿消耗总倍率,由玩家性别、等级、游戏模式三个因子相乘得出

饥饿系数=性别因子×等级因子×游戏模式因子\text{饥饿系数} = \text{性别因子} \times \text{等级因子} \times \text{游戏模式因子}

性别因子

条件值来源
男性1.0默认
女性0.7女性饥饿消耗降低 30%

等级因子

条件值来源
等级 11.0默认
等级 20.99每升 1 级减少 0.01
等级 21+0.80封顶(最多降低 20%)

游戏模式因子

条件值说明
无害0.66饥饿消耗降低 34%
生存0.75饥饿消耗降低 25%
挑战/残酷1.0无减免
创造0不消耗饥饿

举例:女性玩家,等级 21,生存模式 → 饥饿系数 = 0.7 × 0.8 × 0.75 = 0.42,即饥饿消耗速度仅为基准的 42%。

饥饿值降到 0 后,每 50 秒造成 0.5 伤害(饥饿伤害)。

食物腐败 ​

腐败机制概述 ​

游戏中的食物方块会随时间流逝逐渐腐败。腐败过程分为两个阶段:新鲜 → 开始变质 → 完全腐烂。背包中的食物图标旁有一个小鱼图标,当食物开始变质时,图标会从白色变为棕色。

腐败只在生存模式和挑战模式下生效,创造模式和冒险模式下食物不会腐败。

腐败参数 ​

游戏中的腐败参数由腐败子系统控制:

参数值含义
最大腐败值1最大腐败阶段数(共2阶段:新鲜→变质→腐烂)
轮询间隔1 分钟基础轮询间隔
腐败周期各食物不同该食物每阶段的腐败轮询间隔次数

最大储存时间计算公式:

储存时间(天)=腐败周期10\text{储存时间(天)} = \frac{\text{腐败周期}}{10}

即:腐败周期除以 10 就是该食物可储存的游戏天数(1 游戏天 = 20 现实分钟)。

腐败判定逻辑 ​

腐败的核心逻辑:每个食物方块有一个"腐败周期"数值。游戏每 1 分钟检查一次,如果检查次数能被腐败周期整除,食物就向腐败迈进一个阶段。经过两个阶段后,食物完全腐烂,转为对应的腐烂方块。

各食物腐败数据 ​

以下数据按默认腐败周期字段排列:

食物营养值食物类型腐败周期储存时间现实时间疾病概率
生鱼肉2.5鱼202天40 分钟25%
生禽肉2肉303天60 分钟25%
生肉3肉303天60 分钟25%
生面团0—303天60 分钟0%
南瓜1.5水果808天2 小时 40 分钟0%
牛奶桶1.5—808天2 小时 40 分钟0%
南瓜汤桶2.5—808天2 小时 40 分钟0%
熟鱼肉7鱼15015天5 小时0%
熟禽肉5肉15015天5 小时0%
熟肉8肉15015天5 小时0%
面包5面包20020天6 小时 40 分钟0%
海胆0.5鱼不腐败——25%

规律:生肉腐败极快(2-3天),烹饪后延长至15天。面包最耐储存(20天)。海胆不会腐败但营养极低且有 25% 疾病概率。蛋类食物因鸟类种类不同营养值各异,详见下方蛋类食物专节。

蛋类食物 ​

游戏中共有 7 种可食用蛋,来自不同鸟类,分生蛋和熟蛋两种状态。蛋的营养值因鸟类体型而异——体型越大营养越高。烹饪后营养值变为 1.5 倍,且疾病概率从 10% 降为 0%。所有可食用蛋的腐败周期相同(120,储存 12 天)。

蛋类型来源生物营养值(生)疾病(生)营养值(熟)疾病(熟)腐败周期储存时间现实时间
鸵鸟蛋鸵鸟0.4010%60%12012天4 小时
食火鸡蛋食火鸡0.4010%60%12012天4 小时
海鸥蛋海鸥0.2010%30%12012天4 小时
鸭蛋鸭子0.2010%30%12012天4 小时
渡鸦蛋渡鸦0.2010%30%12012天4 小时
鸽子蛋鸽子0.1010%1.50%12012天4 小时
麻雀蛋麻雀0.0510%0.750%12012天4 小时
  • 烹饪配方:生蛋 + 水桶 → 熟蛋(需要热源)。烹饪后营养值 × 1.5,疾病概率降为 0%。配方适用于所有营养值 > 0 的蛋。
  • 疾病概率:所有生蛋均有 10% 疾病概率,熟蛋则完全无风险。
  • 体型越大营养越高:鸵鸟蛋和食火鸡蛋营养值最高(生 4 格 / 熟 6 格),麻雀蛋最低(生 0.5 格 / 熟 0.75 格)。
  • 腐败:只有可食用蛋才会腐败,腐败后统一变为腐烂鸡蛋(见下方腐烂食物表),无论原蛋类型。
  • 孵化:生蛋投掷击中地面可孵化为对应鸟类。生存模式下,生物自然产下的蛋仅 15% 孵化,创造模式获取的蛋 100% 孵化。熟蛋不可孵化。
  • 不可食用蛋:游戏中还有 43 种不可食用蛋(营养值 = 0),来自哺乳动物(牛、狼、熊、马、虎、狮等 32 种)和鱼类/水生动物(鲈鱼、鲨鱼、食人鱼、虎鲸等 11 种),仅用于投掷生成对应生物,不会腐败。

海胆 ​

海胆是一种可直接采集的海洋生物,不会腐败,但营养极低(0.5 格)且有 25% 疾病概率。

属性值说明
营养值0.5极低
疾病概率25%较高风险
食物类型鱼影响动物进食偏好
腐败不会腐败无腐败周期
采集方式直接采集徒手即可
最大堆叠40
颜色变体4 种深黑、暗红、深红、深蓝
碰撞伤害有碰到海胆会受到尖刺伤害
  • 尖刺伤害:碰到海胆会受到 0.1 / 尖刺抗性 × 速度 的伤害,速度越快伤害越高。死亡原因显示为"海洋生物"。
  • 生存环境:海胆只能生活在水中,离开水会被销毁。它通过底吸行为吸附在固体方块表面(6 个方向均可)。

腐烂食物数据 ​

腐烂食物营养值疾病概率腐败周期说明
腐烂南瓜175%160营养降低,高风险
腐烂面团00%120不能吃,会继续腐坏
腐烂面包275%120仍可继续腐坏
腐烂禽肉275%120仍可继续腐坏
腐烂肉2 75%120仍可继续腐坏
腐烂鱼肉275%120仍可继续腐坏
腐烂牛奶桶0.575%—营养极低
腐烂鸡蛋175%—所有蛋类腐败后的统一产物
腐烂南瓜汤桶175%—最终腐坏阶段

腐烂食物统一有 75% 的疾病概率,营养值大幅降低至 0.5~2 格。多数腐烂食物仍有腐败周期,会继续腐坏最终变成施肥的耕地。

写给开发者 ​

资料暂存

本小节内容暂时存放于此,后续会移动至“MOD开发”章节。

腐败系统架构 ​

核心文件:Survivalcraft/Subsystem/BlockBehavior/SubsystemRotBlockBehavior.cs

该类继承自 SubsystemPollableBlockBehavior,实现了 OnPoll 和 ItemsScanned 两个关键方法:

  • OnPoll(int value, int x, int y, int z, int pollPass):处理放置在世界中的食物方块腐败
  • ItemsScanned(ReadOnlyList<ScannedItemData> items):处理背包/容器中的食物腐败(通过 ItemsScanner 系统)

腐败状态存储:利用 Block 的 Damage 字段(GetDamage/SetDamage)存储腐败进度,而非另建数据。Damage=0 表示新鲜,Damage=1 表示开始变质,Damage>1 触发 GetDamageDestructionValue 转为腐烂方块。

关键常量:

csharp
public const int MaxRot = 1;           // 最大腐败阶段(Damage最大值)
public const float m_rotPeriod = 60f;  // 轮询间隔(游戏时间单位)

食物方块基类方法 ​

在 Block.cs 中定义的食物相关虚方法:

csharp
public virtual int GetRotPeriod(int value) => DefaultRotPeriod;
public virtual float GetNutritionalValue(int value) => DefaultNutritionalValue;
public virtual float GetSicknessProbability(int value) => DefaultSicknessProbability;
public virtual FoodType GetFoodType(int value) => FoodType;
public virtual int GetDamage(int value) => Terrain.ExtractDamage(value);
public virtual int GetDamageDestructionValue(int value) => 0;  // 需重写返回腐烂方块

模组开发者可通过重写 GetRotPeriod 自定义腐败行为。例如 BasePumpkinBlock 中,只有死亡的南瓜才会腐败:

csharp
public override int GetRotPeriod(int value) {
    if (!GetIsDead(Terrain.ExtractData(value))) return 0;  // 活南瓜不腐败
    return base.GetRotPeriod(value);
}

关键流程总结 ​

腐败流程:

放置/生成食物 → OnPoll轮询(pollPass % RotPeriod == 0) → Damage+1 → 
Damage > MaxRot(1) → GetDamageDestructionValue → 转为腐烂方块 → 
继续腐坏 → 最终转为堆肥
参与共建发现错误或有建议?两种零门槛方式,无需本地环境

玩家共建文档 · 原版、插件版、联机版与插件联机版请注意区分