1. 时间通道#
| 通道 | 职责 | 默认策略 |
|---|---|---|
| Frame | 输入、UI、可见快照 | 只处理表现层 |
| Tick | 需要连续变化的设备和运输 | 固定步长,可暂停和加速 |
| Batch | 生产、物流、需求和局部结算 | 按 Chunk 和 dirty 标记批量运行 |
| Period | 财务、市场、统计、任务和长期事件 | 按游戏日/周/月定义 |
| Platform | 成就、Cloud、Workshop 回调 | 异步队列,不阻塞仿真 |
2. 确定性#
世界随机性由 seed、命令序列、内容哈希和 MOD 清单共同决定。随机数按系统分流,禁止调用全局不可控随机。相同输入必须得到相同 world_hash,便于复现 bug 和验证存档。
3. 并发和提交#
main thread: accept commands -> advance authoritative state
worker: read immutable snapshot -> calculate result
main thread: validate revision/hash -> commit result
invalid result: discard and reschedule线程边界
工作线程不得直接修改权威状态,不得写 Godot 容器,不得发 UI 信号。所有写操作在主线程的提交阶段完成。
4. 存档格式#
save.sky
manifest block
world block
entity blocks
production/logistics blocks
achievement block
history block
mod manifest block
checksums存档使用分块二进制,数值数组紧凑编码,长文本和历史记录独立压缩。每块有版本、长度、压缩方式和校验值。
5. 保存、备份和恢复#
保存先生成内存快照,再后台编码到临时文件,完成校验后原子替换正式文件,同时保留上一份备份。程序中断、写入失败或校验失败时,旧存档必须仍可读取。
6. 迁移和兼容#
存档头记录 game_version、save_schema_version、content_version、balance_version、enabled_dlcs 和 enabled_mods。迁移只做字段增加、改名、默认值和 ID 映射,不偷偷重算玩家历史。无法安全迁移时进入只读恢复页。
7. 云存档边界#
Steam Cloud 只同步经过验证的存档包和必要 manifest,不同步缓存、日志或临时计算结果。发生冲突时显示本地版本、云端版本、时间和哈希,允许玩家选择,不静默覆盖。