时间线
世界的时钟、历史,以及时间如何推进。
世界时钟
世界有自己的内部时钟,独立于现实时间:
ts
interface WorldTime {
day: number; // starts at 1
hour: number; // 0–23
minute: number; // 0–59
season: 'spring' | 'summer' | 'autumn' | 'winter';
year: number; // starts at 1
}现实时间与游戏时间的换算
- 1 现实秒 = 1 游戏分钟
- 1 现实分钟 = 1 游戏小时
- 24 现实分钟 = 1 游戏天
- 约 12 现实小时 = 1 游戏月
这个比例经过精心选择,让玩家可以在一次坐下来的时间里见证完整的一天。
Tick
世界以每小时一 Tick 的节奏前进。每个 Tick:
- 时钟推进 1 小时。
- 每个活跃 NPC 运行 Tick Pipeline。
- 世界状态持久化。
- 发出 SSE 事件(如果有人在监听)。
Tick 由 Cloudflare Cron Trigger 驱动,每现实分钟运行一次(因为 1 分钟 = 1 小时)。
一天的时间表
| 时间 | 发生什么 |
|---|---|
| 05:00–06:00 | 少数早起的人(面包师、渔夫) |
| 06:00–09:00 | 小镇苏醒,早餐,通勤 |
| 09:00–12:00 | 上午工作时段 |
| 12:00–13:00 | 午休 |
| 13:00–17:00 | 下午工作时段 |
| 17:00–19:00 | 下班,休闲开始 |
| 19:00–21:00 | 晚餐,家庭时光 |
| 21:00–23:00 | 酒馆、咖啡馆、散步 |
| 23:00–05:00 | 睡觉(轮班工人除外) |
季节
| 季节 | 天数 | 特征 |
|---|---|---|
| 春 | 第 1–30 天 | 花开,户外活动增多 |
| 夏 | 第 31–60 天 | 炎热,白天更长,社交活动更多 |
| 秋 | 第 61–90 天 | 落叶,市场丰收 |
| 冬 | 第 91–120 天 | 寒冷,室内聚会增多,生病概率上升 |
季节影响:
- 🧥 服装精灵图
- 🌦️ 天气概率
- 🏥 生病概率(冬季上升 30%)
- 📖 日记基调(冬季更内省)
年份及更远
每年 = 120 个游戏日 = 约 48 个现实小时。
与年份推进相关的游戏内事件:
- 🎂 NPC 生日
- 🎉 小镇周年纪念(第 120 天)
- ❄️ 冬至
- 🌸 春节
模拟被设计为可以运行数年而不崩溃。记忆裁剪和整合防止了无限增长。
时间异常(已避免)
世界时钟永远不会倒退。没有:
- ⏪ 倒带
- ⏸️ 暂停
- ⏩ 快进
- 💾 存档/读档(单一时间线)
这是一条核心原则——参见设计哲学。
历史(第一周示例)
以下是涌现事件的示例。不是预先编写的。
- 第 1 天,18:00 —— Margaret 和 Eleanor 在酒馆第一次见面。
- 第 2 天,11:00 —— Tom 开始了新的夜班排班。
- 第 3 天,14:00 —— Maria 和 Yuki 在市场为摊位位置争吵。
- 第 4 天,09:00 —— Henry 报告杂货店发生了小偷小摸。
- 第 5 天,19:00 —— Margaret 邀请 Eleanor 第 8 天来家里吃晚饭。
- 第 6 天,22:00 —— Tom 和 Sam 在酒馆长聊了一场。
- 第 7 天,08:00 —— Tommy 在日记里抱怨作业。
这些是涌现的——由模拟生成,而非预先编写。