> 一份给团队、合作方和未来玩家看的「游戏是什么」。
> 对齐代码状态:Beta 0.20.2(2026-06-21,10d5eb3)。
> 本文不是 marketing copy,也不是技术 spec——是把「为什么这样设计」讲清楚的一页纸。
0. 一句话(Logline)
> 一个笨手笨脚的女仆在暴风雨之夜签下一纸代管契约,离开主人、踏上去海鸥岛旧农场的旅途——用最朴素的工具,把「一慌就只想藏错」的习惯,一锄一锄地改成「先判断下一步」。
如果只能留 30 个字,就是:
从一扇被风吹开的窗,到一座失败过的农场——阿芙学着不再藏错。
1. 简介(Elevator Pitch)
《芙田物语》是一款 治愈系线性箱庭种田 RPG,核心体验是一段温柔的成长叙事。
玩家扮演女仆 阿芙(Alf),她的主人是侦探 Wuning。游戏从一个暴风雨的夜晚开始:阿芙闯进事务所想补救被雨淋湿的卷宗,主人却没责备她——而是把一份「海鸥岛旧农场代管契约」放在桌上,说「不是惩罚,是委托」。于是阿芙收拾行李、签下名字、雨停后从银岚城南门出发,沿旧邮路、灯湾、最终抵达那座「第一季开垦失败」的孤岛。
旅途中没有战斗系统、没有重数值刷宝、没有恋爱支线。种田、砍树、卖货、吃饭、睡觉——这些动作既是玩法,也是阿芙「独立判断」能力的一格格练习。每一格作物都对应一个她不再慌张的瞬间:她不是变厉害了,是学会了出错以后先想下一步。
技术上跑在 Godot 4.5(Web + Windows 双端),480×270 像素风 4× 放大窗口,30 分钟一段流程,强引导、强反馈、不内卷。
2. 类型 / 平台 / 受众
| 维度 | 定位 |
|---|---|
| 类型 | 治愈系剧情 + 模拟经营 + 线性箱庭种田 + 轻度冒险 |
| 节奏 | 短流程(一章 30~45 分钟),无开放世界、无内购、无 PVP |
| 平台 | Web 浏览器 + Windows 桌面(同一份代码,GL Compatibility 渲染器覆盖) |
| 受众 | 喜欢《星露谷物语》叙事节奏但嫌太忙、喜欢《Coffee Talk》互动密度但希望有玩法、喜欢《极乐迪斯科》文字密度但想要操作的玩家 |
| 不做的事 | 战斗硬核化、社交系统、永久死亡、内购、抽卡、签到、每日任务、刷宝 |
3. 核心幻想(Core Fantasy)
玩家玩这个游戏幻想得到的是:
「我可以在一个不出错也没关系的世界里,慢慢变好。」
对应的反幻想(玩家不想得到的):
- ❌ 资源焦虑(刷矿、刷金币、错过一天的焦虑)
- ❌ 数值碾压(装备碾压、Boss 速通)
- ❌ 社交负担(公会、好友、排行榜)
- ❌ 时间惩罚(错过日期作物死亡、错峰收益)
游戏里的所有机制——体力双轨制、食物恢复、所见即所得的农田湿/干视觉、被打断即收手的契约、允许失败的旧种子——都在强化这一条核心幻想。
4. 设计支柱(Design Pillars)
5 条不可妥协的设计原则。每一条都能在代码里找到对应锚点。
Pillar 1 · 服务于叙事的玩法(Mechanics Serve Story)
种田不是为了刷金币,是为了「独立判断」的练习。每一个工具动作都有剧情意义:
- 锄头 7001 → 开垦、收获、擦 Afforest(既开地又”清理过去的痕迹”)
- 洒水壶 7002 → 持续关注(不是一次性动作,呼应「学会负责」)
- 斧头 7003 → 砍树/砍围栏(决定砍不砍、留下什么,是一种取舍)
- 剑 1001 → 当前未在剧情线启用,roadmap 备用
→ 决策:所有玩法调整前先问一句「这个动作能让阿芙变独立吗?」
Pillar 2 · 出错以后,先判断下一步(Fail Forward)
游戏不惩罚失败,而把失败变成剧情钩子:
- 暴风雨夜打翻茶杯、撞碎盘子 → 剧情 02「侦探归来」直接触发,不让你真的捡完 5 份卷宗
- 旧邮路被泥拦住 → 不是「绕路」,是「去找埃文问」的剧情入口
- 退回的种子能不能发芽 → 教学关卡,不是隐藏惩罚
- 累瘫(energy ≤ 0)→ 弹一句 Alf 独白「四肢软软的、肚子空空的」,不死亡,不锁存档
→ 决策:任何「失败」动画前,先想能不能 hook 进一段剧情对话。
Pillar 3 · 温柔反馈优先于硬核机制(Soft Feedback First)
8 种食物对应 4~10 的体力恢复;作物播种后必须浇水才生长(moisture > 0.5),视觉所见即所得;能量条归零时变暗红色而不是消失;NPC 互动有 interact.visible 浮标引导。
→ 决策:反馈的”温柔程度” = “玩家被误解的概率的倒数”。
Pillar 4 · 关卡是一段连续的旅程(Chapters Are Stops, Not Boxes)
银岚城 → 旧邮路 → 灯湾 → 海鸥岛,不是「4 个互不相关的开放地图」,是一段情节递进的旅程。每个关卡都为下一关留下钩子:
- 银岚城留下「报告本 / 给罗温的信」
- 旧邮路埃文留下「退回的种子包」+ 一句「第一块田,种你能照顾好的数量就行」
- 灯湾小镇(待实装)应该接住「罗温」这条线
- 海鸥岛旧农场是「失败过的地方」,回到开头「第一季开垦失败」的伏笔
→ 决策:关卡之间必须有「带走的东西 + 留下的话」。
Pillar 5 · 短流程、强引导、不强迫(Short, Guided, Forgiving)
30 分钟一段主线,无支线干扰。剧情通过 cutscene_trigger 状态机驱动(0~8),关键对话 Dialogic 锁定,引导文本阿芙口吻写在场景里。玩家不会迷路——迷路的是赶路的人(埃文语)。
→ 决策:遇到”增加支线任务”的诱惑时,默认拒绝。
5. 世界观与故事前提
5.1 世界
芙田世界(AlfFarmTale World) — 一片被海风、雨水和时间慢慢磨过的土地。
- 银岚城(Silver Mist):港口 + 山城,海鸥岛的中转站,三家小店(家具 / 食材种子 / 武器杂货)
- 旧邮路(Old Post Road):连接银岚城与灯湾的泥路,雨后难行
- 灯湾小镇(Lamp Cove Town):罗温所在,待实装
- 海鸥岛旧农场(Seagull Island Old Farm):第一季开垦失败、已退还种子的孤岛——阿芙的最终试炼地
- Wuning 事务所:阿芙的家,序章 + 序幕过场发生地
世界采用四季节气(春 / 夏 / 秋 / 冬)+ 离散时段(早 / 午 / 晚)双层时间(README 4.3 设计,roadmap),当前已实装完整分钟制时钟 + 季节切换。
5.2 主角:阿芙(Alf)
- 身份:Wuning 的女仆,笨拙、不自信、一慌就只想藏错
- 语言习惯:第三人称自称「阿芙」,说话简短,带犹豫
- 成长曲线:从「我会不会搞砸?」→「先判断下一步」→ 「我可以照顾好这块田」
- 设计意图:阿芙的成长不是数值变强,而是判定顺序变了——她依然不强,但她不再慌
5.3 关键配角
| 角色 | 定位 | 关键台词 |
|---|---|---|
| Wuning(主人) | 侦探、契约方 | 「你在意的不是出错,是一慌就只想着把错误藏起来。」「你不用证明自己很厉害。先学会负责。」 |
| 埃文 | 旧邮路驿站老人,退回种子的接收者 | 「六粒种子,六个萝卜。种子躺在袋子里,只会发霉。你把它种出来,它才成了货。」「种下多少、收回多少、换了多少钱。心里要有数。」 |
| 罗温 | 灯湾码头联系人,Wuning 介绍 | 待实装(Wuning 写给罗温的信是 Prologue → Chapter 2 的桥) |
| 银岚城三店主 | npc4001 家具 / npc4002 食材种子 / npc4003 武器杂货 | 银岚城的热闹感来源,不主推个人剧情 |
| NPC 1001 船夫 | birth ↔ village_01 摆渡 | 任务 1001「船夫的请求」(收集 1 axe + 20 wood → 8 颗种子) |
5.4 故事前提(按章)
| 章 | 关卡 | 核心张力 | 已实装 |
|---|---|---|---|
| Prologue | wuninghouse(事务所三联场景) | 雨夜闯祸 → 主人归来 → 签下契约 → 出门 | ✅ Beta 0.20.0 |
| Chapter 1 · 旧邮路 | old_post_rd(旧驿站) | 泥路拦住 → 遇见埃文 → 试种退回种子 → 收获 → 卖给埃文 → 获得种子 → 启程 | 🔜 剧情脚本完成,关卡待实装 |
| Chapter 2 · 灯湾小镇 | lamp_cove | 见到罗温、转交信件、新委托 | 📋 设计中 |
| Chapter 3 · 海鸥岛旧农场 | seagull_farm | 抵达失败过的农场,开始真正的代管 | 📋 设计中 |
6. 关卡地图
当前已实装的 8 个 LevelType:
WuningHouse ─┬─ WuningHouseAlf (Prologue 阿芙卧室)
└─ WuningHouseCorridor (Prologue 走廊)
SilverMist (银岚城·中转·三店主)
OldPostRd (旧邮路·埃文驿站)
Village_01 (Village_01·NPC 1001 / 2001)
AdventurerGuildRoom_01
Birth (海鸥岛旧农场·中转)
> 路径约定:res://levels/<level_name>/<level_name>.tscn,关卡 KEY 用小写字符串(如 "wuninghouse_alf"),不是 PascalCase。
场景叙事功能:
- WuningHouse 三联场景:序章专属,统一接入 PointLight2D 烛火闪烁系统 + BGM《Silent Rain Narrative》
- SilverMist:热闹中转站,4 个 NPC(1001 / 2001 / 4001~4003),3 家商店,玩家出门的起点
- OldPostRd / LampCove / SeagullFarm:roadmap,三段递进的旅程
7. 核心玩法循环
每 5~10 秒一个微循环,每章节一个宏循环。
7.1 微循环(手感到位)
[探索] WASD / Shift 跑
↓ 靠近可交互物体
[提示] MouseFocus + Interact.visible + 键盘提示
↓ F / E / 鼠标左键
[互动] HoldEffectResource 触发(range gate / one-shot / oblique angle)
↓ 资源校验
[执行] 动画 + 音效 + 信号(hoe_target / watering_target / axe_target / seed_target / building_target)
↓ 状态写入
[反馈] 体力扣减 / floor 累加 / 物品消耗 / 农田状态更新
↓ 视/听反馈
[循环] 玩家看到效果,继续探索
7.2 宏循环(章节节奏)
序章触发事件 → 抵达目的地
↓ 任务系统
↓ → Task.try_complete_by_signal() 自动完成 + 发奖
继续探索
↓ 关键对话
剧情 trigger 推进(cutscene_trigger += 1)
↓ 时间推进 / 季节切换
切换关卡(load_level)
↓ BGM / LoadingManager / Camera.set_limit()
继续下一章
7.3 章节任务示例(Prologue)
P01 去客厅看看 → 阿芙房间 → 客厅
P02 收拾残局 → 拾起湿卷宗 0/5(3/5 即触发剧情)
P03 侦探归来 → 剧情过场(中断 P02)
P04 阅读契约 → 桌面互动《海鸥岛旧农场代管契约》
P05 签下名字 → 桌面互动签名
P06 回房间收拾 → 行李 + 床铺睡觉
P07 带走主人留的 → 报告本 + 给罗温的信
P08 前往南门 → 银岚城南门
P09 离开银岚城 → 进入旧邮路
8. 核心系统
8.1 体力双轨制(CharacterResource)
| 来源 | 字段 | 行为 |
|---|---|---|
| 跑步 | energy_current | 消耗可自然回复(封顶 energy_max - energy_floor),归零 2 秒喘息期 |
| 工具/劳作 | energy_floor | 永久累加,不可自然回复,自然回复上限随之下降 |
| 食物恢复 | restore_value | 走 floor -= N 模型,吃完上限自动上升,给玩家即时反馈 |
| 归零拦截 | consumes_energy() | 抽象方法,7001/7002/7003 override = true;切换工具时切到不消耗的工具不闪 range |
→设计意图:劳作不是「跑步消耗的副产物」,而是有独立代价的承诺。
8.2 工具 / HoldEffect 抽象
每个手持物品对应一个 HoldEffectResource:
- 1001 sword(无 range gate,OneShot)
- 4001~4007 7 个种子 → 基类
SeedHoldEffectResourceBase - 7001~7003 锄头 / 洒水壶 / 斧头(override
consumes_energy()=true) - 8001~8095 92 个建筑物品 → 基类
BuildingHoldEffectResourceBase(单行extends,所有行为继承自8001.gd)
→ extends新加一个物品 = 新写一个 .tres + 一个 行,零特例。
8.3 物品 / 库存
- 千位 ID 段:Weapon 1000 / Seed 4000 / Food 5000 / Tool 7000 / Building 8000
- 库存容量:背包 30 格 + 手持 9 格,每格堆叠上限 64
- 操作:左键拾取/合并/交换,右键半切(<200ms),双击合并同类,Shift+左键跨区转移,Q 丢弃
- 持久化:Web 端通过
WebSaveAdapter.swap_to_runtime_deep把 Bag/Hold 子属性也切到镜像版
8.4 商店 / 交易
4 个店主,按主题分工:
| NPC | 主题 | 商品 |
|---|---|---|
| npc2001 | village_01 通用工具 | axe / hoe / sprinkler / sword / carrot / carrot_seed |
| npc4001 | silver_mist 家具 | 92 件摆设(bed / chair / sofa / book / bonsai / plate / candle / clock / 食物摆盘…) |
| npc4002 | silver_mist 食材种子 | 8 Food + 7 Seed |
| npc4003 | silver_mist 武器杂货 | sword + wood + axe / hoe / sprinkler |
- 买入:玩家背包 / 手持栏优先
- 卖出:统一
max(int(price * 0.8), 1),单物品最低售价锁定 1 金币
8.5 任务 / 剧情状态机
- 任务数据结构:
TaskListResource存list: Array[TaskResource]+over_list: Array[int] - 任务状态机:
Un_Get → Un_Done → Done → Finish - 触发完成:
TaskResource.done_signal: StringName+try_complete_by_signal()自动完成+发奖 - 剧情状态机:
GameResource.cutscene_trigger: int(0~8),决定 sprint / 雨声 / BGM / 剧情过场是否启用- 0:初始,禁用 Shift
- 1~4:剧情引导期,雨声 + BGM《Silent Rain Narrative》
- 5:incident 视频(硬停 BGM)
- 6:leave 对话
- 7:自由探索,Shift 启用
→ 改 trigger 边界前必须先查完整剧情流程——这是 hard rule。
8.6 时间 / 季节
- TimeRecord:分钟制时钟 + 月/日/时/分 + 季节
- 季节切换:
switch_season()重置月份(春=3 / 夏=6 / 秋=9 / 冬=12)+ 切换带meta("seasonal")=true的 TileMapLayer 的 TileSet +FellableTree.set_frame_from_sequence() - 全局光照:基于时间段(DAWN/MORNING/DAY/SUNSET/DUSK/NIGHT)调 canvas_modulate / DirectionalLight2D / shadow_polygon
8.7 通用可破坏系统(Breakable)
compoents/breakable/breakable.gd 是 2026-06 重构后的统一入口:
- 斧头 + 未来所有工具走
Breakable.hit(tool, at)通用入口 - 配置集中在
Level顶部两张 const 表:BREAKABLE_SCRIPT_BY_INVENTORY_ID+BREAKABLE_HITS_NEEDED_BY_INVENTORY_ID - 子类:
BreakableFence/BreakableChest(砍前先吐内容物)/BreakableBed/BreakableTellable(锄头专用,擦 Afforest)
→ 新加特例改两张表,不动 Inventory 资源。
8.8 双端存档
- 桌面:
res://archives/<slot>/(不覆盖源文件,多 slot 不互相污染) - Web:
user://runtime_state/<slot>/(cold-start 镜像 31 个核心 .tres)+ IndexedDB 存档快照 - 自动保存:30s 定时 +
_beforeunload+pagehide+visibilitychange - 路径 shim:所有存档读写走
WebSaveAdapter,游戏代码层只调ResourceManager/WebSaveAdapter
9. 视觉与音效
9.1 视觉
- 分辨率:480×270 像素风(canvas_items stretch),4× 放大到 1440×810
- 调色板:低饱和度水彩 + 米黄/海蓝/苔绿主导,烘托「温柔成长」
- 抗锯齿:MSAA 2D + 3D,锯齿大幅缓解
- 光照:自然光带(DAWN/DAY/SUNSET/NIGHT)+ 室内 PointLight2D 烛火闪烁
- 相机缩放:室外 1.8×、室内 2.0×(视野近、聚焦)
9.2 音效
| 类别 | 资产 |
|---|---|
| BGM(专属) | 《Silent Rain Narrative》(Prologue 全程) / village_01 / birth |
| BGM(混合回退) | 未注册专属 BGM 的场景自动从 village_01 + birth 两池随机选播 |
| 环境音 | 雨声(10 秒渐变)/ 雷声(3 变种)/ 风窗声 |
| 动作音 | hoe 3 档 / watering 4 档 / axe 4 档 / walk 草地 7 档 / walk 石地 5 档 / chest open/close 3 档 |
| 互动音 | 翻页声 / 开锁声 / 剑击声 |
→ 音效分组:走路按地形分(草/石)、工具按动作分(锄/水/斧),音量按场景压低(walk_grass -16dB)。
10. 当前状态 & 路线图
10.1 已实装(Beta 0.20.0,10d5eb3)
- ✅ Prologue 章节(WuningHouse 三联场景)— 完整剧情 + 过场 + Skip
- ✅ 体力双轨制 + 8 种食物 + 累瘫对话
- ✅ 农田 × 浇水联动(所见即所得)
- ✅ 通用可破坏系统(斧头 + 锄头 tellable)
- ✅ SilverMist 三店主 NPC + 4 家商店
- ✅ 完整背包 / 商店 / 任务系统
- ✅ 双端存档(桌面 + Web)
10.2 路线图(按章节)
| 优先级 | 章节 | 内容 | 关键里程碑 |
|---|---|---|---|
| 🔥 P0 | Chapter 1 · 旧邮路 | 旧驿站场景 + 埃文 NPC + 试种教学 + 退回种子剧情 | 关卡 old_post_rd 实装 + 任务 R01~R09 落地 |
| 🟡 P1 | Chapter 2 · 灯湾小镇 | 罗温 NPC + 信箱 / 灯塔 / 集市 | 关卡 lamp_cove 实装 + 罗温支线 |
| 🟡 P1 | 自理度系统 | 独立完成动作 → 自理度 +1 → 触发台词/剧情反馈 | CharacterResource 新字段 + 反馈触发器 |
| 🟢 P2 | Chapter 3 · 海鸥岛旧农场 | 抵达失败过的农场 + 暴雨夜守护 | 关卡 seagull_farm 实装 + 终章演出 |
| 🟢 P2 | 战斗 / 冒险扩展 | 剑攻击 + 简易怪物 + 野外探险 | 剑 1001 实装 + Monster 子系统 |
| ⚪ P3 | 多人 / Mod / 云存档 | PWA + 云存档后端 | export_presets.cfg progressive_web_app=true |
10.3 设计原则(roadmap 验证清单)
每加一个新内容前过一遍:
- [ ] 这个内容让阿芙变独立了吗?
- [ ] 失败能不能 hook 进剧情?
- [ ] 反馈够温柔吗?
- [ ] 关卡之间有「带走的东西 + 留下的话」吗?
- [ ] 30 分钟能不能玩到?会不会强迫玩家迷路?
最后一句话:
我们做的不是「又一个种田游戏」。我们做的是「让一个慌张的孩子,在 30 分钟内学会,先判断下一步」的那段旅程。
种田、砍树、卖货——所有动作都是台词。代码只是把台词写实。