Files
TinyWaste/docs/03-系统设计.md
T
virtheart 6234a50bdb feat: 实现避难所仓储系统与生存状态HUD改进
- 新增避难所仓储功能,支持物品在随身背包与仓储间转移
- 添加生存状态图标资源与状态阈值告警系统
- 重构HUD界面,优化状态显示与操作流程
- 扩展游戏核心系统,增加仓储相关动作和校验
- 更新文档说明仓储规则与实现细节
2026-04-28 22:58:49 +08:00

11 KiB
Raw Blame History

03 系统设计

本文档以“可实现、可平衡、可扩展”为目标,对核心系统做可落地的规格定义。所有系统尽量以统一的“条件/消耗/产出/冷却/概率/标记”表达,便于数据驱动与复用。

3.1 时间系统

3.1.1 时间推进来源

  • 被动流逝:玩家停留在地点、整理背包、阅读日志
  • 行为推进:制作、采集、移动、休息、治疗、战斗
  • 加速推进:长行为可在 UI 显示进度条并快速推进

3.1.2 时间推进的副作用(统一执行顺序)

一次时间推进 advanceTime(Δt) 必须按固定顺序执行,避免“先后顺序导致结果不可解释”:

  1. 计算状态消耗(饥饿/口渴/精力/理智/辐射等)
  2. 计算 Buff/Debuff 结算(按 interval 或按时间累计)
  3. 地点资源刷新与生长
  4. 敌人刷新窗口推进(遭遇表/权重)
  5. 灾害计时与效果更新
  6. 触发“基于时间”的任务/事件检查
  7. 写入日志与可视化提示
flowchart TD
  A[advanceTime Δt] --> B[状态消耗]
  B --> C[Buff结算]
  C --> D[资源生长]
  D --> E[遭遇/敌人刷新]
  E --> F[灾害结算]
  F --> G[任务/事件检查]
  G --> H[日志与提示]

对应源文件:time-pipeline.mmd

3.1.3 可测试性要求

  • advanceTime(Δt) 必须是纯逻辑可重放:输入(状态/地点/随机种子)确定,输出确定
  • 所有随机必须可注入 seed,避免线上“无法复现”的 bug

3.2 状态系统(生存/精神/污染)

3.2.1 核心状态列表(建议)

  • 生命(HP):硬失败边界
  • 饥饿:低饥饿降低恢复、降低命中/逃跑等
  • 口渴:比饥饿更急迫,强约束出行时长
  • 精力:约束连续行动;低精力叠加负面 Buff
  • 理智:驱动叙事与事件;低理智引发幻觉/误判/不可控选择(可选)
  • 辐射/污染:长期压力;影响上限、引发变异与负面状态

3.2.2 状态表示与阈值

每个状态至少包含:

  • value 当前值
  • min/max 上下限(或软上限)
  • regen/decay 每分钟变化或由公式计算
  • thresholds 阈值效果表(进入阈值时添加/移除 Buff)

阈值效果建议优先“软惩罚”,例如:

  • 饥饿过低:移动耗时增加、制作速度降低、战斗命中降低
  • 口渴过低:理智下降加快、出行事件风险上升
  • 辐射过高:最大生命/精力上限下降,物品治疗效率降低

3.2.3 Buff/Debuff 设计

Buff 必须具备可解释来源与可清除/可缓解路径:

  • 来源:事件、食物、药物、环境、灾害、装备、技能
  • 结算:按时间间隔(interval)或按行动(onAction)触发
  • 堆叠:定义 stack 规则(叠加、刷新时长、取最大/取和)

3.3 物品、背包与容器

3.3.1 物品分类

  • 食物:恢复饥饿/精力,可能增加辐射或降低理智
  • 饮水:恢复口渴,可能增加辐射
  • 材料:用于制作、交易、修理
  • 工具:提高采集/制作效率,通常有耐久
  • 武器/护甲:战斗相关
  • 药品:治疗/解毒/抗辐射
  • 任务物品:推动剧情,通常不可丢弃或有提示

3.3.2 容量模型(推荐:体积)

  • volume:物品占用体积
  • stackLimit:最大堆叠
  • 背包容量 bagCapacity:体积上限
  • 容器(箱子/仓库)容量 storageCapacity:体积上限

当前实现采用:

  • Field Bag:在线行动时唯一权威随身背包
  • Shelter Storage:避难所内的长期仓储层
  • 主 HUD 只摘要显示随身容量,完整整理在独立背包弹层完成

设计理由:

  • 体积比“格子”更适合废土资源管理的“取舍”表达
  • 体积比“重量”更少涉及物理与移动速度耦合,平衡更稳定

3.3.3 耐久与损耗

  • 工具/装备耐久下降来源:使用、战斗、环境事件
  • 耐久影响方式:
    • 低耐久降低效率/命中/防护
    • 耐久为 0 时失效或损坏
  • 修理策略:
    • 基地可修理(消耗材料 + 时间)
    • 野外可应急修理(更高成本/更低效率)

3.3.4 仓储访问规则

  • 仓储不是全地图随时可开,而是地点约束能力
  • 当前版本仅在 home / Shelter-7 允许取放仓储
  • 配方在避难所内可以读取仓储材料,避免“物资明明囤着却不能做”的违和感

3.4 制作、烹饪、锻造与科研

3.4.1 配方数据结构(通用)

每条配方至少包含:

  • id/name
  • workbenchType(手工/工坊/锻造/烹饪/过滤/医疗/科研)
  • requirements:科技/设施/属性阈值/工具条件
  • inputs:消耗物品与数量
  • outputs:产出物品与数量(支持概率)
  • timeCost:时间消耗(分钟)
  • energyCost:精力消耗(可选)
  • byproducts:副产物(垃圾、污染等)

3.4.2 科技树(能力导向)

科技树节点建议分为三类:

  • 解锁类:解锁制作台/地点能力/新区域
  • 优化类:降低时间成本、降低材料损耗、提高成功率
  • 风险类:引入强力收益同时引入副作用(辐射、灾害触发概率等)

3.4.3 制作失败与变体(提升可玩性)

可选机制:

  • 失败:按成功率产生损耗/产出降低/副产物增加
  • 变体:同一配方可因材料替代产生不同品质/副作用
  • 品质:普通/良好/精良(品质影响耐久/效果/价值)

3.5 地图、地点与移动

3.5.1 地点图(Graph)结构

  • 节点:地点(基地、路口、资源点、剧情点)
  • 边:路径(时间成本、风险等级、交通方式)

3.5.2 移动消耗

移动的成本由三部分组成:

  • 时间成本(基础时间 * 路径系数)
  • 状态消耗(按时间推进的消耗 + 额外精力消耗)
  • 风险成本(途中遭遇概率、受伤概率、资源损耗)

3.5.3 地点模板(用于内容生产)

每个地点应配置:

  • tags:地洞/村庄/废墟/丛林/避难所等
  • dangerLevel:风险等级(用于 UI 提示与遭遇权重)
  • resourceNodes:可采集资源与刷新规则
  • trashNodes:随机垃圾池与刷新规则
  • encounterTable:敌人/事件权重表
  • services:交易/休息/制作/治疗/情报
  • questHooks:进入/停留/条件触发的任务节点

3.6 采集、垃圾与资源刷新

3.6.1 资源节点(可预测收益)

资源节点用于提供“可规划收益”:

  • 刷新规则:按时间增长(线性/分段)、上限、特殊条件(肥料/净水)
  • 采集成本:工具、时间、精力
  • 产出:固定 + 少量随机波动

3.6.2 垃圾节点(高随机收益)

垃圾节点用于提供“惊喜与赌博”:

  • 产出:低价值材料为主,少量稀有掉落
  • 风险:可能触发负面事件(感染/辐射/敌人)

3.6.3 风险收益标注(UI 需求)

每个采集/垃圾行为都要显示:

  • 预估耗时(分钟)
  • 预估消耗(口渴/精力)
  • 风险提示(可能战斗/可能辐射/可能受伤)

3.7 事件系统(详细)

3.7.1 事件结构

事件由三部分构成:

  • trigger:触发条件(地点/时间/状态/物品/任务进度)
  • content:文本与选项(可插入变量)
  • effects:结果链(消耗/获得/状态变化/标记/战斗/跳转)

3.7.2 选项与概率

选项结果支持:

  • 固定结果
  • 概率结果(权重表)
  • 属性检定(属性→成功率→不同结果)
  • 资源检定(消耗某物品才可选)

3.7.3 事件结果链(可组合)

结果链建议采用“原子效果”组合:

  • addItem/removeItem
  • addStatus
  • addBuff/removeBuff
  • setFlag(任务标记、世界标记)
  • startCombat
  • teleport(移动到新地点)
  • unlockRecipe/unlockPlace
  • log(统一日志格式)

3.8 战斗系统(详细)

3.8.1 战斗定位

战斗用于表达风险,避免成为主玩法;战斗时间应可控,且“逃跑始终可行但有代价”。

3.8.2 战斗模型(距离 + 回合)

关键变量:

  • distance:双方距离(离散或连续)
  • range:武器有效射程
  • hitRate:命中率(基于距离、状态、装备、掩体)
  • damage:伤害(基础值 * 修正)
  • armor:减伤/免伤机制
  • stamina/energy:战斗行动消耗

玩家动作:

  • 进攻:消耗弹药/耐久,可能造成伤害
  • 防御:降低被命中或降低伤害
  • 前进/后退:改变距离,影响下一回合命中率与逃跑
  • 逃跑:成功则结束战斗并触发“撤离成本”(掉落/受伤/时间损失)
stateDiagram-v2
  [*] --> Init
  Init --> PlayerTurn
  PlayerTurn --> Resolve
  Resolve --> EnemyTurn
  EnemyTurn --> Resolve
  Resolve --> CheckEnd
  CheckEnd --> PlayerTurn: 未结束
  CheckEnd --> Escape: 逃跑成功
  CheckEnd --> Win: 敌人死亡
  CheckEnd --> Lose: 玩家死亡/崩溃
  Escape --> [*]
  Win --> [*]
  Lose --> [*]

对应源文件:combat-state.mmd

3.8.3 战斗掉落与后果

  • 掉落不只是奖励,也是内容容器(任务物品、线索、稀有材料)
  • 战斗后果必须可见:
    • 伤口/感染(持续性 debuff
    • 辐射暴露
    • 装备耐久下降
    • 弹药消耗与补给压力

3.9 任务系统(详细)

3.9.1 任务状态机

任务建议包含:

  • NotStarted 未触发
  • Active 进行中
  • Completed 完成(领取奖励)
  • Failed 失败(可选)
  • Locked 锁定(条件不足)

3.9.2 任务目标类型

  • 拥有/交付物品
  • 到达地点/探索次数
  • 击败敌人
  • 制作某物
  • 触发某事件/做出某选择
  • 生存到某天/某时间窗口

3.9.3 奖励设计

奖励优先给“能力”而非单纯资源:

  • 解锁新配方、新地点服务、新设施槽位
  • 给关键工具/装备(降低后续成本)
  • 给叙事线索与地图标记

3.10 灾害系统(详细)

灾害由三段组成:

  • 预警期:给玩家准备窗口(提示与倒计时)
  • 爆发期:改变规则(消耗曲线、遭遇权重、资源刷新)
  • 残留期:提供短期机会(灾后掉落、特殊事件)

灾害必须满足:

  • 可配置开始条件(天数区间、概率、任务触发)
  • 可配置影响范围(全局/特定区域)
  • 对 UI 有清晰展示(倒计时、当前影响)

3.11 交易与经济系统(简化版)

交易系统建议为“基于稀缺度的动态标价”:

  • 基础价:物品配置中的 baseValue
  • 地点修正:不同地点对物品类别有偏好(倍率)
  • 供需修正:根据玩家近期交易记录做轻微浮动,避免刷钱
  • 风险定价:高风险区域的补给更贵、材料更便宜

经济更完整设计见:05-数值与经济.md