后院玩法补全方案 v1.0
设计 → 产品级 PRD,给后续派发 / 排期 / 拍板使用,不动任何代码。 触发:当前后院 tab = 柴水采集点,玩家 5 秒走完;与厨房 / 员工 / 剧情 / 天气 / 季节耦合接近为零。 配套文档:
AGENTS.md/Phase1实施切片-v1.md/主厅总览页精简方案-v1.md/docs/story/主线故事/月01-月13-*.md。 最后更新:2026-07-12 v1.0 起草。
0. 元信息
| 项 | 内容 |
| :--- | :--- |
| 文档版本 | v1.0 / 2026-07-12 |
| 文档类型 | 产品级补全方案(PRD) |
| 配套代码(仅参考,不动) | src/components/BackyardTab.tsx / src/data/innAreas/facilityEffects.ts / src/utils/innAreas/facilityLogic.ts / src/data/staff/index.ts |
| 范围(做) | 现状梳理 + 缺失点清单 + 5 个候选玩法提案 + M1/M2/M3 优先级 + 三层分离边界 + 12 个月剧情衔接 |
| 范围(不做) | ❌ 不写任何实现代码;❌ 不新增 / 改 src/ 下任何文件;❌ 不动 AGENTS.md / Phase1 切片 / 现有 innAreas 数据 |
| 视觉风格 | 严格沿用现有写意卷轴 + 朱砂印章 + 拟物化大按钮(TongfuPaper / TongfuSeal / TongfuInkDot),不引入新色板 / 新组件族 |
| 完成标准 | 用户拍板 M1 玩法清单 + 三层分离边界;后续施工时按切片走,每个 T = 1 commit / 1 PR,可回滚;不新增 tsc 错误 |
核心原则:
- 玩家文案和开发者字段严格分开(AGENTS.md §4 2026-07-12 新增)。
- UI 提示语必须是中文玩家能看的话;不暴露
backyard_wood/backyard_yard/staffId/tick等内部 ID 或 snake_case key。 - 复用现有
auction/领域的三层分离模板(数据 / 逻辑 / UI 各自独立目录)。
1. 现状梳理
1.1 后院 tab 现在能做什么
后院 tab 在玩家视角下只有四件事:看柴水储量、点"手动劈柴"按钮、点"手动汲水"按钮、把员工调去劈柴/挑水/大堂。机制(已读代码确认):
- 手点产出:每点击 +1,受小郭等级加成(每级 +0.5),动画是 🪵 / 💧 弹跳 + 文字 +N 飞起。
- 委派产出:被安排到劈柴/挑水的员工每个 Tick(1.2 秒)自动 +0.15,按员工等级线性放大。
- 储量上限:基础 200,每级
backyard_yard扩建 +25(getResourceCapacityinfacilityLogic.ts)。 - 扩建后院效果:每级
backyard_yard让后院总产出 +8%(getBackyardProductionMultiplier)。 - 消费侧:柴水只被后厨自动消费(
src/data/kitchen/),无任何玩家可感知的"柴水告急"反馈。
1.2 后院现在不能做什么
- ❌ 天气 / 季节 / 昼夜影响——柴房井台永远是白天、永远是同一个样子。
- ❌ 突发事件——野猪下山、井水冒泡、夜半叩门、小偷翻墙一类的剧情钩子完全没接入。
- ❌ 专属小玩法——白展堂练功场 / 郭芙蓉练掌桩 / 秀才读书 / 小贝练字 / 晾被 / 种菜 / 养鸡 全部缺失。
- ❌ 视觉 / 听觉钩子——没有落叶飘动、没有井水波纹、没有鸡叫、没有风铃、没有月亮。
- ❌ 后院专属剧情事件触发点——12 个月剧情里后院高频出场(见 §6),但 tab 本身没有任何"剧情正在发生"的信号。
- ❌ 员工在后院时除了"加 0.15 / Tick"没有任何存在感——没有动作姿态、没有表情、没有特殊对白气泡。
1.3 玩家当前停留时长 / 感受
停留时长:从点进 tab 到点完两个手点按钮 + 把员工拖到劈柴/挑水,5-8 秒。开挂机后基本 1-2 秒扫一眼就关。 玩家感受:
- 这是一个"挂机资源流水线"的开关页,跟工厂流水线无异。
- 跟《武林外传》七侠镇那种"每天傍晚后院有故事"的氛围完全脱节。
- 玩家在剧情里看到"白展堂扔铜钱进井" / "雨水听雨灯" / "柿子树下白三娘",进 tab 只看到两行 🪵 💧 数字,无感。
1.4 跟现有模块的耦合现状
| 耦合点 | 现状 | 缺失 |
| :--- | :--- | :--- |
| 厨房(柴水消费) | src/data/kitchen/ingredients.ts 静默消费,玩家无感 | 缺"柴水告急"提示 + 厨子追讨的剧情反馈 |
| 员工(特性 / 等级) | staff.guo.preferredJobs = ['lobby', 'backyard_wood', 'backyard_water'] 已生效 | 缺"白展堂自动加治安" / "郭芙蓉打碎水桶"等专属反应 |
| 扩建(backyard_yard) | resourceCapacityPerLevel: 25 + backyardOutputPercentPerLevel: 8% 已生效 | 缺"扩建到 2 级解锁晾架" / "3 级解锁练功桩"等可见升级奖励 |
| 剧情(月01-13) | 12 个月剧情里后院高频出场,但 tab 完全没接入 | 见 §6 详细映射 |
| 天气 / 季节 / 昼夜 | data/time/ 已有昼夜 / 节气系统,但后院 tab 不读 | 缺"立春 / 雨水 / 霜降 / 小雪"后院不同气氛 |
| 事件(eventTables/) | 全局事件池已有,但后院没有专属事件 | 见 §3 提案 B |
2. 玩法缺失点清单(按"玩家感知度 × 实现成本"排序)
共 10 条。每条:缺失什么 / 玩家能感知的具体场景 / 挂钩模块 / 感知(高/中/低)/ 成本(低/中/高)。
| # | 缺失点 | 玩家能感知的具体场景 | 挂钩模块 | 感知 | 成本 |
| :-: | :--- | :--- | :--- | :---: | :-: |
| 1 | 视觉钩子(落叶 / 井波纹 / 风铃 / 月亮) | 玩家点进后院 tab,看到老槐树飘下一片黄叶、井口有光斑晃动、晚上屋顶挂一盏灯笼、风吹风铃响 | 视觉 + 听觉(既有 playSweepSound) | 高 | 低 |
| 2 | 天气 / 季节氛围(雨 / 雪 / 霜) | 雨天井边有水雾、井水"清甜"+20%;冬天下雪柴堆盖雪、井口结薄冰;霜降时柴上挂白霜、劈柴 -10% | data/time/ + 视觉 | 高 | 中 |
| 3 | 突发事件入口(野猪 / 偷儿 / 夜半叩门 / 井水冒泡) | tab 顶部出现"今日小事"滚动条;点开有 1 段对白 + 2 选 1 按钮 + 奖励反馈 | 事件池 + 剧情钩子 | 高 | 中 |
| 4 | 白展堂"练功场"专属小玩法 | 驻后院时出现"葵花点穴桩"图标 + 练功剪影;24 Tick 触发"葵花点穴手!治安 +1" | 员工 staff.bai + 治安系统 | 高 | 中 |
| 5 | 郭芙蓉"打碎水桶"事件 | 驻后院时每 80-120 Tick 触发"郭芙蓉排山倒海——水桶飞了",3 秒内劈柴/挑水暂停 + 治安微降;玩家选"斥责/原谅" | 员工 staff.guo + 后院产出 | 高 | 低 |
| 6 | 晾被 / 晾衣 / 晾酱料(小养成循环) | 1 级扩建解锁"晾架";晾上物品 24 Tick 变白收下,奖励"清洁 +5 / 治安 +1" | 视觉 + 清洁 / 治安 | 中 | 中 |
| 7 | 后院扩建后解锁新场景元素 | 1 级晾架 / 2 级菜畦 / 3 级练功桩 | 扩建 innAreas + 视觉 | 中 | 中 |
| 8 | 种菜 / 养鸡(小经济循环) | 每天浇水 / 喂鸡 1 次;3 天后产出"嫩青菜" / "柴鸡蛋"可入菜 | 厨房(食材)+ 经济 | 中 | 高 |
| 9 | 后院专属对白气泡(员工在场时) | 员工驻后院时每 30-60 Tick 在头像下冒一句玩家能看的话(白展堂:"这井水,嘿,比额以前喝过的都甜。") | 员工 depth.vital + 剧情 | 中 | 中 |
| 10 | 专属剧情触发点(12 个月剧情里挂场景) | 进 tab 时按当前月份触发:"雨水听雨灯" / "霜降深夜旧账擂台" / "小寒柿子树下白三娘" | 月度剧情 + 时间系统 | 高 | 中 |
优先级判读:
- #1 / #5(视觉钩子 + 郭芙蓉打碎桶)= M1 必须,感知度极高,成本极低,是"点进 tab 立刻有反馈"的两板斧。
- #3 / #4 / #10(突发事件 + 白展堂练功场 + 月度氛围)= M1 强烈推荐,把后院从"流水线"变成"会讲故事的场景"。
- #2 / #6 / #7 / #9(天气 + 晾被 + 扩建奖励 + 对白气泡)= M2 迭代,跟 Phase 1 道具系统收口后再上。
- #8(种菜养鸡)= M3 长线,跟厨房食材系统深度耦合,建议放在 Phase 6 内容池扩展一起做。
3. 候选玩法提案(5 个,深挖)
每个:玩家体验描述(白话 50-100 字) / 核心循环 + 反馈节奏 / 耦合 / 实现成本 / 风险。 覆盖:练功场 / 突发事件 / 天气季节 / 小养成 / 视觉钩子 + 月度剧情。种菜养鸡(M3)只在 §4 简提。
提案 A:白展堂"葵花点穴桩"练功场
玩家体验描述: 把白展堂从大堂调到后院劈柴 5 秒后,后院背景从"柴火堆 + 井"切到"夜色 + 一根木桩 + 一个剪影"。白展堂绕着木桩踢腿——动画是 3-4 帧的"飞影"剪影切换。每隔一段他摆个起手式,tab 顶部弹一句"葵花点穴手!治安 +1"的朱砂小印章。玩家既看不到具体数字飞涨,又能感觉到"他在练功"。
核心循环 + 反馈节奏:
- 挂机:白展堂驻后院时,每 24 Tick(约 29 秒)自动触发一次"练功"事件,治安 +1 + 800ms 印章动画。
- 手动:玩家可主动点"陪练"按钮,每 12 Tick 一次(后续 Phase 5 接
staff.guo.martial)。 - 奖励感:满 5 次练功后,白展堂头像旁出现"葵花点穴手"小成就,永久治安 +3 buff。
耦合:员工 staff.bai(需解锁)+ 治安系统(沿用 getSecurityRecoveryMultiplier)+ 扩建 backyard_yard 3 级解锁"练功桩"地块(视觉元素,不影响数值)+ 剧情月12 第 345 天柿子树下对白挂气泡。
成本:中。新组件 1 个 + 新数据 1 个 + 新逻辑 1 个 + 1 个 CSS 关键帧。
风险:白展堂未解锁前 fallback(空场地 + "白展堂未来这里练功"小提示);治安 +1 频次需按 getSecurityRecoveryMultiplier 已有公式动态调系数。
提案 B:后院突发事件("今日小事"滚动条 + 1-2 句剧情反馈)
玩家体验描述: 后院 tab 顶部多一行小字滚动条:"雨水第七天·子时——院墙有响动——白展堂出去了。" 玩家点这条小字,弹一个 6 行"飞鸽小报"卡片:白展堂在墙头看到黑影,点了灯吓走——治安 +2。玩家可选"再查" / "算了","再查"可能触发后续小事件(鸡叫 / 狗吠),"算了"则关闭。这是玩家第一次感觉到"这里真有人在守夜"。
核心循环 + 反馈节奏:
- 挂机:每 6-12 小时(游戏时间)随机从 8 类后院事件池里抽 1 条(井水冒泡 / 野猪下山 / 夜半叩门 / 小偷翻墙 / 鸡飞狗跳 / 风把晾被吹跑 / 隔壁猫叫 / 老槐树落叶)。事件触发时 tab 顶部出现滚动条。
- 手动:玩家点开"飞鸽小报"卡片,看 1 段对白 + 1 个 2 选 1 按钮("查看" / "不管")。选"查看"有概率触发二段事件。
- 奖励感:8 类事件里 3 类给奖励("抓贼"治安 +3 / "井水冒泡"柴水 +5 / "风吹晾被"清洁 +5),其他 5 类纯剧情反馈。
耦合:事件池(data/eventTables/,需新增 backyardEvents 子表)+ 时间系统(昼夜 / 节气权重)+ 员工系统(事件处理中检测"当前谁在后院"——白展堂在场时"夜半叩门"自动解决 + 治安 +3;郭芙蓉在场时触发"砸东西"二段事件)+ 剧情月13 第 68 天"寒露粉痕暗号"挂事件。
成本:中。新数据 1 个 + 新组件 2 个 + 新逻辑 2 个。
风险:日均 1-2 条频次严控(避免刷屏);奖励数值从 AREA_EFFECT_RULES.backyard_yard 派生(不硬编码破坏经济)。
提案 C:天气 / 季节氛围(视觉 + 微调数值)
玩家体验描述: 立春时后院有嫩芽和春雨;雨天井边有水雾 + 屋檐滴水动画,井水冒泡"清甜"小标记——挑水产出 +20%。霜降时柴堆上盖白霜、井口薄冰——劈柴产出 -10%。小雪时整个后院铺一层薄雪,晾架挂着前一天的被单。玩家切到不同月份玩,进后院会看到完全不同的画面,不是 12 个一模一样的"柴火堆"。
核心循环 + 反馈节奏:
- 挂机:根据
data/time/当前节气 / 天气,每帧重算后院背景层(layered 渲染)。 - 手动:玩家在"霜降劈柴"提示下点劈柴,会有"柴湿——产出略降"的小气泡。
- 奖励感:节气契合时(如"雨水"+ 雨天 = 井水清甜),玩家主动选时段挂机——"看天气预报"型软引导。
耦合:时间系统(节气 / 天气 API 已存在,后院只读)+ 后院产出(getBackyardProductionMultiplier 新增"季节加成"系数,逻辑层只增不改)+ 视觉层(沿用 TongfuPaper + motion/react + CSS 关键帧)。
成本:中。CSS 关键帧 3-4 个 + 后院背景层分组渲染 + 季节系数 1 个。
风险:节气判断逻辑跟剧情时间系统必须先对齐(不要错位);玩家必须看见视觉提示("清甜"小标记 / "湿柴"小气泡),不能只改数值。
提案 D:晾被 / 晾衣 / 晾酱料(小养成循环 + 扩建奖励)
玩家体验描述:
backyard_yard 扩建到 1 级后,后院右侧多出一根"晾架"。玩家点"晾上去"——被单湿答答挂着,24 Tick 后变白、收下,自动奖励"清洁 +5 / 治安 +1"。晾衣 / 晾酱料同理(24 / 36 Tick)。玩家可以同时晾 3 件。这是后院第一次有"看时间慢慢变好"的小养成感。
核心循环 + 反馈节奏:
- 挂机:晾架上的物品按 Tick 推进状态(湿 → 半干 → 干),状态可视化。
- 手动:玩家点"收下"按钮,物品消失,奖励落库。
- 奖励感:满晾 3 件 + 全干后,弹"晾架满员·清洁 +10"奖励动画。
耦合:扩建 backyard_yard 1 级解锁(视觉 / 数据)+ 清洁 / 治安系统 + 时间系统(晾干速度受天气影响:雨天 -30%、晴天 +20%)。
成本:中。新组件 1 个 + 新数据 1 个 + 新逻辑 2 个。
风险:晾架满了玩家忘记收——必须有 7 日后自动收的 fallback(自动入账,避免被遗忘);清洁 / 治安奖励数值需校准避免被后院单方面刷爆。
提案 E:月度剧情氛围(霜降深夜旧账擂台 / 雨水听雨灯 / 小寒柿子树下)
玩家体验描述: 玩家玩到月09 第 260 天,进后院 tab 会看到后院"临时搭了个木台"——背景切到"霜降深夜·擂台"主题。玩家看到一句剧情锚点提示:"今晚有旧账要算——白展堂上不上场?" 玩家点开能看到一段 6 行对白摘要("白展堂·完全不出手 / 保守一招 / 必要时暴露"三选一),选择同步影响剧情。月12 第 340 天进后院则是"小寒柿子树·白三娘"主题。
核心循环 + 反馈节奏:
- 挂机:根据
data/year1Plan.ts当前月份 + 节气,后院背景层切到对应"主题卡"。 - 手动:玩家点"剧情气泡"(淡朱砂印章 + 1 行提示),弹出对应月份对白摘要 + 选项按钮。
- 奖励感:选择结果落库到剧情追踪,玩家在简报 / 庙前目标卡看后续影响。
耦合:剧情系统(docs/story/主线故事/月01-月13-*.md,现有对白已经写好,后院只读不写)+ 剧情追踪(StoryTrackingCard.tsx + data/year1Plan.ts,沿用现有玩家选择存根)+ 视觉层(每个月份 1 张主题卡背景图,资源缺口 docs/art/asset-gap-list.md 已有 scene-pack-backyard 待补)。
成本:中。6-12 张背景图资源(依赖美术 lane)+ 新组件 1 个 + 新数据 1 个。
风险:美术资源依赖——6-12 张图需跟 scene-pack-backyard 缺口绑定排期,不能 0 美术上。M1 阶段先用 1-2 张图跑通(雨水 / 小寒),后续按月补;选项落库要跟现有剧情追踪系统对齐(不新造 state)。
4. 推荐落地优先级(M1 / M2 / M3)
判读标准:M1 = 第一周可上,低 / 中成本 + 高感知度;M2 = 后续 2-4 周迭代;M3 = 长期愿景(Phase 6 一起做)。 每个 M1 写清:玩法令名 / 涉及文件 / 三层各加什么 / 验收点。
M1(第一周 = 5 个工作日)
M1.1 「后院会讲故事」三件套:视觉钩子 + 郭芙蓉打碎桶 + 月度主题卡(先 2 张)
| 切片 | 玩法令名 | 数据层(src/data/innAreas/) | 逻辑层(src/utils/innAreas/) | UI 层(src/components/) |
| :--- | :--- | :--- | :--- | :--- |
| M1.1.A | 「后院有风」 | backyardScenery.ts(新)— 4 类视觉元素(落叶 / 井波纹 / 风铃 / 月亮)+ 节气 / 昼夜触发条件 | backyardSceneryLogic.ts(新)— 纯函数 pickSceneryLayers(time, season) | 改 BackyardTab.tsx 顶部 + BackyardSceneryLayer.tsx(新) |
| M1.1.B | 「排山倒海——水桶飞了」 | backyardMicroEvents.ts(新)— BACKYARD_MICRO_EVENTS 数组(3 条:郭芙蓉打碎桶 / 白展堂抓贼 / 秀才念错账) | backyardMicroEventsLogic.ts(新)— rollBackyardMicroEvent(staff, tick) + resolveBackyardMicroEvent(eventId, choice) | 改 BackyardTab.tsx 顶部 + BackyardMicroEventBanner.tsx(新)+ BackyardMicroEventCard.tsx(新) |
| M1.1.C | 「听雨灯 / 柿子树下」 | backyardStoryCards.ts(新)— BACKYARD_STORY_CARDS 数组(先 2 条:雨水听雨灯 / 小寒柿子树) | backyardStoryCardsLogic.ts(新)— getActiveStoryCard(month, solarTerm) | 改 BackyardTab.tsx 顶部 + BackyardStoryCard.tsx(新) |
M1.1 验收点:
- 玩家点进后院 tab,至少看到 2 个视觉元素(白天落叶 / 晚上月亮)。
- 郭芙蓉驻后院时每 80-120 Tick 触发一次"打碎水桶"事件 + 2 选 1 按钮(原谅 / 斥责),选完后 3 秒消失。
- 月01 玩到"雨水"节气看到"听雨灯"气泡;月12 玩到"小寒"节气看到"柿子树下白三娘"气泡。
- M1.1.C 关键:先只用 CSS 关键帧 + 文字 + 朱砂印章表达主题,不依赖新美术资源(M1 阶段美术 lane 没排期)。
M1 整体验收 checklist:
- [ ]
npm run lint无新增 tsc 错误(AGENTS.md §7 第 7 条) - [ ]
npm run build通过 - [ ] 现有游戏功能未破坏(开档 → 进游戏 → 玩 1 个周期)
- [ ] 玩家点进后院 tab 能看到至少 2 个视觉元素 + 1 个事件触发
- [ ] 月01 / 月12 玩家进 tab 能看到对应气泡
- [ ] 视觉对照现有
BackyardTab配色(朱砂 + 琥珀 + 米色 + 蓝),不漂移 - [ ] 所有玩家可见文案是中文玩家能看的话(不暴露
backyard_yard/staff.guo/tick等内部 ID)
M2(后续 2-4 周迭代)
| 切片 | 玩法令名 | 提案 | 工期 | | :--- | :--- | :--- | :---: | | M2.1 | 「葵花点穴桩」 | 提案 A | 3-4 天 | | M2.2 | 「今日小事」(8 类完整版) | 提案 B | 3-4 天 | | M2.3 | 「同福晾架」 | 提案 D | 2-3 天 |
M2.3 晾架可与 M2.1 / M2.2 合并压 1 周;天气对晾干速度的影响需要跟提案 C 一起落(避免重复实现)。
M3(长期愿景,Phase 6 内容池扩展一起做)
| 切片 | 玩法令名 | 提案 | 工期 | 依赖 |
| :--- | :--- | :--- | :---: | :--- |
| M3.1 | 「节气挂历」(6 个节气 6 张主题) | 提案 C | 5-7 天 | 美术 scene-pack-backyard 6-12 张图到位 |
| M3.2 | 「月度剧场」(12 个月全量) | 提案 E 全量 | 5-7 天 | 美术 12 张图 + 12 段对白 |
| M3.3 | 「后院菜畦 + 鸡窝」 | 缺失点 #8 | 5-7 天 | Phase 6 厨房食材系统扩展 |
5. 三层分离的数据 / 逻辑 / UI 边界建议
仅列 M1 落地边界。
auction/领域(数据 / 逻辑 / UI 各自独立目录)是项目目前唯一完整遵循三层分离的领域,严格按它的模板走。
5.1 数据层(src/data/innAreas/)
只放
type/interface/const/ 静态数组,不放任何函数(AGENTS.md §1)。
| 文件 | 内容 | 类型 |
| :--- | :--- | :--- |
| backyardScenery.ts(新) | 4 类视觉元素(落叶 / 井波纹 / 风铃 / 月亮)+ 节气 / 昼夜触发条件 | const + type |
| backyardMicroEvents.ts(新) | BACKYARD_MICRO_EVENTS 数组(3 条) | const + type |
| backyardStoryCards.ts(新) | BACKYARD_STORY_CARDS 数组(先 2 条) | const + type |
| facilityEffects.ts(沿用) | AREA_EFFECT_RULES.backyard_yard 已有数值规则,不动 | const + type |
| index.ts(沿用) | InnAreaExpansion 类型导出,不动 | type + 派生索引 |
关键边界:
- ❌ 禁止在数据层写函数(包括纯函数、过滤、计算)。
- ❌ 禁止在数据层
importutils/或components/。 - ✅ 玩家可见文案字段必须是中文玩家能看的话,不暴露
id/key/staffId/tick等开发者字段(AGENTS.md §4)。
5.2 逻辑层(src/utils/innAreas/)
只放函数 / 派生索引 / 状态机,不放常量配置(派生索引除外)。
| 文件 | 函数签名(建议) |
| :--- | :--- |
| backyardSceneryLogic.ts(新) | pickSceneryLayers(time, season): SceneryLayer[] |
| backyardMicroEventsLogic.ts(新) | rollBackyardMicroEvent(staff, tick): BackyardMicroEvent \| null + resolveBackyardMicroEvent(eventId, choice): BackyardMicroEventOutcome |
| backyardStoryCardsLogic.ts(新) | getActiveStoryCard(month, solarTerm): BackyardStoryCard \| null |
| facilityLogic.ts(沿用) | 已有 getBackyardProductionMultiplier / getResourceCapacity 等,不动 |
关键边界:函数命名 camelCase + Logic 后缀,跟 qualityLogic.ts / affixLogic.ts 范本一致。
5.3 UI 层(src/components/)
只放
.tsx/.css/ 内联className,不放业务计算(AGENTS.md §1)。
| 文件 | 职责 |
| :--- | :--- |
| BackyardTab.tsx(改) | 主 tab 入口;编排层,调逻辑层函数,挂子组件 |
| BackyardSceneryLayer.tsx(新) | 渲染落叶 / 井波纹 / 风铃 / 月亮 |
| BackyardMicroEventBanner.tsx(新) | 微事件顶部滚动条 + 飞鸽小报按钮 |
| BackyardMicroEventCard.tsx(新) | 微事件展开卡:6 行对白 + 2 选 1 按钮 |
| BackyardStoryCard.tsx(新) | 剧情气泡 + 展开:朱砂印章 + 1 行提示 + 选项 |
| TongfuPaper / TongfuSeal / TongfuInkDot(沿用) | 已有拟物化组件,直接复用,不新增 |
关键边界:
- ❌ 禁止在 UI 层写业务计算(如
const ratio = wood * 0.5 + level * 2)——所有计算走utils/innAreas/。 - ❌ 禁止在 UI 层
import数据层配置(只通过逻辑层拿结果)。可以import type拿类型。 - ✅ 玩家文案展示时必须用数据层的
playerTitle字段(玩家能看的话),而不是event.id(开发者字段)。 - ✅ 组件文件命名 PascalCase +
.tsx,跟QualityFrame.tsx/AffixChip.tsx范本一致。
5.4 命名约定(AGENTS.md §4)
- 类型:PascalCase(如
BackyardSceneryLayer/BackyardMicroEvent/BackyardStoryCard)。 - 常量:UPPER_SNAKE_CASE(如
BACKYARD_MICRO_EVENTS/BACKYARD_STORY_CARDS)。 - 函数:camelCase(如
pickSceneryLayers/rollBackyardMicroEvent/getActiveStoryCard)。 - 工具文件后缀:
Logic(如backyardMicroEventsLogic.ts);数据文件无后缀(如backyardMicroEvents.ts);UI 组件后缀 PascalCase +.tsx。 - 路径:用相对路径,不用
@/别名(AGENTS.md §3)。
5.5 Import 方向(单向依赖,AGENTS.md §1)
UI 层 → 逻辑层 → 数据层(禁止反向依赖)。细节见 AGENTS.md §1 关键边界规则。
6. 跟第一年剧情的衔接建议
6.1 12 个月剧情里后院的高频出场点(已调研)
调研方法:grep
docs/story/主线故事/月01-月13-*.md关键词(后院 / 劈柴 / 挑水 / 井 / 练功 / 晾 / 柴房 / 深夜 / 月下 / 砸)。
| 月 | 节气 | 关键场景 | 适合挂什么后院事件 | | :-: | :--- | :--- | :--- | | 月01 | 立春 / 雨水 | 白展堂深夜追屋顶黑影、郭芙蓉砸桌椅、莫小贝捡落叶、雨水听雨灯(小贝+白展堂+郭芙蓉 一起放) | M1 优先挂"雨水听雨灯"气泡 + 白展堂抓贼微事件 | | 月02 | 惊蛰 | 钱掌柜躲到柴房 | "陌生人借柴房"微事件(治安 +1) | | 月09 | 寒露 / 霜降 | 白展堂旧账擂台(霜降深夜后院临时搭木台) | M2 优先挂"霜降深夜旧账擂台" | | 月10 | 立冬 / 小雪 | 姬无病后院单独谈、门闩重新换 | "深夜密谈"微事件 | | 月11 | 大雪 | 钱夫人来柴房门口 | — | | 月12 | 冬至 / 小寒 / 大寒 | 超高频:石桌被雪盖、柿子树下白三娘、白展堂晾夹袄、白展堂扔铜钱进井("代表过去")、跨年夜 | M1 优先挂"小寒柿子树下"气泡 + "大寒深夜扔铜钱"剧情钩 | | 月13(旧账风波) | 寒露 / 芒种 / 小寒 | 后院是核心舞台:粉痕暗号、关老三跳墙、晾衣竿的灯、柴房藏底稿 | M2 挂"寒露粉痕暗号"事件(最重要) |
月03-08 暂无后院高频出场,可作为"日常 8 类后院突发事件"的舞台。
6.2 是否需要新建后院专属事件表
是,建议 M2 阶段建 data/eventTables/backyardEvents.ts。
理由:
- 现有
data/eventTables/是全局事件池,已有大类(治安 / 卫生 / 供货 / 抢客 / 作业风波),后院事件单独成类更清晰。 - 跟
docs/story/主线故事/月01-月13-*.md的 12 个月剧情天然对齐。 - 8 类基础事件 + 3 类员工专属 + 12 个月主题卡,组合空间足够支撑 Phase 6 内容池扩展。
建议结构(仅文字描述,不写代码):
- 三类配置 + 三种类型分别管理。
- 每类事件含 4 个字段:玩家可见标题、触发条件(开发者字段)、奖励(从
AREA_EFFECT_RULES.backyard_yard派生)、可选项。 - 玩家可见标题必须是中文玩家能看的话,不暴露
id/key/staffId等开发者字段(AGENTS.md §4)。
6.3 剧情衔接的三条铁律
- 后院 tab 不抢戏:所有剧情对白只是"提醒玩家有这事发生",具体对白在剧情系统展示,后院只做钩子。
- 选项落库不重造:所有后院剧情选项必须落库到现有剧情追踪系统(
StoryTrackingCard.tsx+data/year1Plan.ts),不新建一套 state。 - 月度主题卡按剧情时间,不按现实时间:玩家在月01 玩到雨水节气才看到听雨灯气泡,不按真实日历——跟
data/time/节气 API 对齐。
7. 风险与决策点
7.1 风险清单(M1 阶段)
| # | 风险 | 等级 | 现状 | 缓解 |
| :-: | :--- | :-: | :--- | :--- |
| 1 | M1 视觉钩子跟现有 TongfuPaper 视觉漂移 | 中 | 4 类视觉元素可能跟拟物化调性不一致 | 复用 motion/react + CSS 关键帧,不引入新色板 / 新字体 |
| 2 | 郭芙蓉打碎桶频次调错导致玩家烦躁 | 中 | 80-120 Tick 是建议值,需实测 | M1 上线后看 7 日数据再调,预留配置入口(如 BACKYARD_MICRO_EVENT_COOLDOWN) |
| 3 | 月度主题卡剧情选项跟剧情追踪系统不兼容 | 中 | 选项落库需 data/year1Plan.ts 现有 API 支持 | M1 阶段先做"展示 + 日志",不强行接追踪,M2 再接 |
| 4 | 66+ tsc 旧错误扩散 | 高 | 项目技术债 | AGENTS.md §7 第 7 条,不新增 / 不主动修;M1 切片完成后 npm run lint 跑一次确认无新增 |
| 5 | 玩家把后院 tab 当挂机流水线看完就走,5 秒心态不变 | 中 | 视觉钩子 + 微事件可能还不够"粘人" | M1.1 三件套是"点进 tab 立刻有反馈",M2.1 / M2.2 再加练功场 + 突发事件拉长停留 |
7.2 待用户拍板的决策点
| # | 决策点 | 选项 A(推荐) | 选项 B | 选项 C | 紧迫度 |
| :-: | :--- | :--- | :--- | :--- | :-: |
| D1 | M1 玩法清单是按 3 个切片走(视觉钩子 + 郭芙蓉 + 月度卡)还是只走 1 个? | 3 切片(5 工作日,密度高) | 2 切片(5 工作日,留 2 天 buffer) | 1 切片(保守先跑通) | 高 |
| D2 | 月度主题卡是先 2 张(雨水 / 小寒)跑通,还是直接 12 张? | 2 张跑通(M1 美术压力 0) | 6 张(M1 美术压力中) | 12 张(M1 美术压力高) | 高 |
| D3 | 后院微事件是否要落库到 data/year1Plan.ts 剧情追踪? | M1 只展示 + 日志,M2 再接 | M1 全部接入 | 暂不接,纯展示 | 中 |
| D4 | 晾架(M2.3)是否要合并到 M1? | 不合并(M2 上) | 合并到 M1.1.D(1 周多 1 天) | 合并到 M1.1.D 并压缩 M1.1.C | 低 |
| D5 | 美术 lane 是否要为 M1 排期(先出 2 张主题卡背景图)? | 是,先出 2 张(雨水 / 小寒),M1 跑通用 CSS 关键帧 fallback | 否,M1 全 CSS + 文字(无图) | 否,M1 全 CSS + 文字,但 M2 必须出 6-12 张 | 高 |
7.3 后续 Phase 预告(不在本切片范围)
| Phase | 范围 | 设计依据 | 预计工期 | | :---: | :--- | :--- | :---: | | M2.1 葵花点穴桩 | 白展堂练功场完整版 | 提案 A | 3-4 天 | | M2.2 今日小事 | 8 类后院突发事件 + 飞鸽小报 | 提案 B | 3-4 天 | | M2.3 同福晾架 | 3 类物品晾干循环 | 提案 D | 2-3 天 | | M3.1 节气挂历 | 6 个节气背景 + 季节加成 | 提案 C | 5-7 天 | | M3.2 月度剧场 | 12 个月剧情氛围 | 提案 E 全量 | 5-7 天 | | M3.3 后院菜畦 + 鸡窝 | 3 种菜 + 1 种鸡(柴鸡蛋) | 缺失点 #8 | 5-7 天(依赖 Phase 6 厨房食材系统) |
❌ 明确不在任何 Phase:
- 不重写
BackyardTab.tsx编排层(沿用现有主入口);- 不动
auctionRules.ts/App.tsx/ 66+ tsc 旧错误(AGENTS.md §7);- 不引入新的视觉组件族(沿用
TongfuPaper/TongfuSeal/TongfuInkDot);- 不新增对
@/别名的依赖(AGENTS.md §3)。
8. 附录
附录 A:相关文档(避免跑偏)
| 文档 | 路径 | 用途 |
| :--- | :--- | :--- |
| 项目守则 | AGENTS.md | 三层分离 + 命名 + 不做的事 |
| 主厅总览页精简方案 | docs/design/active/主厅总览页精简方案-v1.md | 本文档范式 |
| Phase1 实施切片 | docs/design/active/Phase1实施切片-v1.md | 三层分离施工蓝图 |
| 12 个月剧情 | docs/story/主线故事/月01-月13-*.md | 后院高频出场点 |
| 资源缺口清单 | docs/art/asset-gap-list.md | scene-pack-backyard 待补 |
| 现有后院 UI | src/components/BackyardTab.tsx | 主入口(不动编排层) |
| 现有后院扩建数据 | src/data/innAreas/facilityEffects.ts | AREA_EFFECT_RULES.backyard_yard |
| 现有后院逻辑 | src/utils/innAreas/facilityLogic.ts | getBackyardProductionMultiplier / getResourceCapacity |
| 现有员工数据 | src/data/staff/index.ts | 5 个员工 preferredJobs |
| 时间系统 | src/data/time/ + src/utils/gameTime.ts | 昼夜 / 节气 API |
| 事件池 | src/data/eventTables/ | 全局事件池(待新增 backyardEvents 子表) |
| 剧情追踪 | data/year1Plan.ts + StoryTrackingCard.tsx | 选项落库目标 |
附录 B:玩家文案示例(3 条,给后续切片用)
全部是中文玩家能看的话,不含任何内部 ID / snake_case key。给 M1 切片做参考。
-
M1.1.A 视觉钩子(白天 / 晚上)
院子里的老槐树飘下一片黄叶——风铃响了一下。 井口映着月光,屋顶的灯笼还亮着。
-
M1.1.B 郭芙蓉打碎桶
郭芙蓉:排——山——倒——海!……咦,水桶呢? (选项:原谅她 / 训她两句)
-
M1.1.C 月01 雨水听雨灯 / 月12 小寒柿子树
雨水的夜里,后院井边亮起一盏灯——白展堂手糊的听雨灯。 小寒的雪把后院那两棵柿子树盖得满满的——白三娘在树下站着。
附录 C:明确不在本切片范围(划走清单)
- ❌ 重写
BackyardTab.tsx编排层(沿用现有主入口) - ❌ 动
App.tsx/MainHallPanel.tsx/Sidebar.tsx等其他 tab - ❌ 修 66+ tsc 旧错误(AGENTS.md §7 第 7 条)
- ❌ 引入新的视觉组件族 / 色板 / 字体
- ❌ 引入对
@/别名的依赖(AGENTS.md §3) - ❌ 不写实现代码(本文档只描述,不实现)
后院玩法补全方案 v1.0 完。 等你拍板 D1-D5,再决定 M1 是 1 / 2 / 3 切片走。