Files
TinyWaste/docs/03-系统设计.md
T
virtheart 2e1b58bada docs: 添加项目文档和图表文件
添加游戏设计文档、技术架构文档、数值经济文档等内容
新增Mermaid图表文件描述系统架构和流程
包含README说明文档结构和阅读顺序
2026-04-28 19:19:20 +08:00

332 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 03 系统设计
本文档以“可实现、可平衡、可扩展”为目标,对核心系统做可落地的规格定义。所有系统尽量以统一的“条件/消耗/产出/冷却/概率/标记”表达,便于数据驱动与复用。
## 3.1 时间系统
### 3.1.1 时间推进来源
- 被动流逝:玩家停留在地点、整理背包、阅读日志
- 行为推进:制作、采集、移动、休息、治疗、战斗
- 加速推进:长行为可在 UI 显示进度条并快速推进
### 3.1.2 时间推进的副作用(统一执行顺序)
一次时间推进 `advanceTime(Δt)` 必须按固定顺序执行,避免“先后顺序导致结果不可解释”:
1. 计算状态消耗(饥饿/口渴/精力/理智/辐射等)
2. 计算 Buff/Debuff 结算(按 interval 或按时间累计)
3. 地点资源刷新与生长
4. 敌人刷新窗口推进(遭遇表/权重)
5. 灾害计时与效果更新
6. 触发“基于时间”的任务/事件检查
7. 写入日志与可视化提示
```mermaid
flowchart TD
A[advanceTime Δt] --> B[状态消耗]
B --> C[Buff结算]
C --> D[资源生长]
D --> E[遭遇/敌人刷新]
E --> F[灾害结算]
F --> G[任务/事件检查]
G --> H[日志与提示]
```
对应源文件:[time-pipeline.mmd](./diagrams/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`:体积上限
设计理由:
- 体积比“格子”更适合废土资源管理的“取舍”表达
- 体积比“重量”更少涉及物理与移动速度耦合,平衡更稳定
### 3.3.3 耐久与损耗
- 工具/装备耐久下降来源:使用、战斗、环境事件
- 耐久影响方式:
- 低耐久降低效率/命中/防护
- 耐久为 0 时失效或损坏
- 修理策略:
- 基地可修理(消耗材料 + 时间)
- 野外可应急修理(更高成本/更低效率)
## 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`:战斗行动消耗
玩家动作:
- 进攻:消耗弹药/耐久,可能造成伤害
- 防御:降低被命中或降低伤害
- 前进/后退:改变距离,影响下一回合命中率与逃跑
- 逃跑:成功则结束战斗并触发“撤离成本”(掉落/受伤/时间损失)
```mermaid
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](./diagrams/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](./05-%E6%95%B0%E5%80%BC%E4%B8%8E%E7%BB%8F%E6%B5%8E.md)