🌻 设计文档小农场 · 野花笔记
← 全部文档/野花笔记/玩法

关卡与解谜

现行 #策划#关卡#解谜#线索 docs/野花笔记/关卡与解谜.md
这一份管什么

兔子会自己跑自己跳(见 玩法 第三、四节)。 玩家唯一的操作就在这里:岔路口看线索、选出口。

野花笔记 · 演示(跑到岔路口会自动停下)

一、这一版的原创点#

轻解谜最难的地方是:线索不能靠猜,但又不能难。 太难玩家去网上搜答案,太简单等于没有。

这套设计取的办法是——线索不是文字谜语,是自然界里真实存在的方向指认。

常见做法 这一版
线索形态 谜语、数字、密码 环境本身的物理特征(苔藓长在哪面、水往哪边流)
玩家要调用的知识 联想 / 试错 观察(答案就画在屏幕上,仔细看就能看出来)
需要的前置知识 可能很多 几乎为零。苔藓背着阳光长,这是常识
犯错成本 重来 / 扣命 零。折返还能多捡一样东西

一句话给玩家听:"答案不在我脑子里,在我眼睛里。"


二、关卡结构#

一关 = 约 18000px(跑 60 秒),由段落拼成。段落类型固定,顺序随机。

段落 长度 内容 玩家状态
平缓草坡 800~1600px 只长花,无坎 放松、看风景
石块带 1000~2000px 石头(高 24~72px) 看兔子自己跳
沟壑 900~1500px 缺口(宽 90~150px) 看兔子贴边起跳
溪流栈道 1200~1800px 木桩桥(间距 120~170px) 连续小跳(唯一的"连招")
花丛 900~1400px 花密度 ×3,无坎 纯收益
坡地 1000~1600px 上下坡(4°~9°) 视觉变化
岔路口 240px 一块木牌 + 2~3 个出口 ★ 停下,读卡,点一下
观察点 单个物体 一件会自己动的遗物(如飘动的布条) 看,然后收
小游戏点 单个装置 如三只挂铃(见 小游戏) ★ 停下,动手十几秒
终点 400px 本关结算 看手账涨了

硬约束(保证一关里有明确的高潮和明确的喘息,不是均匀噪声):

  1. 同一类段落不连出三次。
  2. 花丛每关至少一次,溪流栈道每关最多一次。
  3. 岔路口每关 2~3 个,前 1/3 段落里必定有一个(让玩家很快知道这一关要动脑)。 3.5 小游戏点每关 0~1 个,间隔 9000~13000px。触发时和岔路比谁更近,不重叠(见 小游戏 第五节)。
  4. 两个岔路口之间至少隔 4000px(否则一直在选,累)。

2.1 配表格式#

段落在代码里生成、参数在配表里(照工程约定:数值走配表,公式在代码里)。

配表已经生成好了:demo/data/levels.json(20 关全在里面)。 它由 tools/sim/gen_levels.py 产出,改关卡请改那个脚本再重新生成,不要手改 JSON—— 脚本里带着 8 条硬约束的校验,手改就绕过了校验。

{
  "levels": [
    {
      "id": "spring-02",
      "band": 1,
      "name": "苔原草坡 · 第二段",
      "length": 17000,
      "paragraphs": ["slope", "bloom", "rocks", "branch", "gully", "bloom", "slope",
                     "branch", "rocks", "slope", "bloom", "gully", "slope", "finish"],
      "paragraphLengths": [1454, 1318, 1621, 240, 1245, 1392, 1520,
                           240, 1706, 1433, 1187, 1350, 1494, 400],
      "branches": [
        {
          "at": 4393,
          "clue": "lichen-north",
          "options": [
            { "label": "左边的石阶", "correct": false },
            { "label": "中间的苔石路", "correct": true }
          ],
          "reward": [],
          "detour": ["crayon-half"]
        }
      ]
    }
  ]
}
字段 说明
paragraphs 段落序列。类型固定、顺序每关不同
paragraphLengths 每段的实际像素长度。由脚本按 length 精确分配,加起来正好等于 length
branches[].at 岔路在关卡里的像素位置。必须落在前 1/3(否则玩家要跑很久才知道这关要动脑)
branches[].clue 线索模板编号(见第四节十个模板)
branches[].options 2~3 个出口,恰好一个 correct: true,正确项固定放中间
branches[].detour 折返兜底奖励。每个岔路都带,选错不惩罚、折返必定有收获
bait 诱饵线索(秋章起),必须另配一条能自证的线索
paddedParagraphs 脚本为撑满长度补出来的段数。有值说明这关的段落列表是自动补过的
关于 `length` 的口径:它是**纯跑像素数**,不含岔路停留

单关 6090 秒是含岔路停留的(见剧情与世界观 六), 而岔路停留 1220 秒是"停着读卡"的时间、不产生像素。 所以配表里的 length 对应的是跑动那一段(4560 秒),不是总时长。 实测:单关 length 1550017000px(跑 5257 秒)+ 02 个岔路(035 秒)= **5289 秒**。

这一条一开始搞错过:配表按 18000px(=60 秒纯跑)填,加上岔路停留就顶到 90 秒以上, 一周目算出来 32 分钟,和"26~28 分钟"对不上。


三、岔路口的界面#

兔子走到木牌前自动停下,然后:

┌──────────────────────────────┐
│  🪨 岔路 · 石楠台地           │  ← 标题:在哪
├──────────────────────────────┤
│  线索                          │
│  这三块石头上都长着苔藓,       │  ← 观察:一句话
│  苔藓只长在朝北的那一面。       │
│                              │
│  [ 图 ] 一块石头,苔藓在阴影面 │  ← 小图:把答案画出来
├──────────────────────────────┤
│  [ 左边的石阶 ]               │  ← 出口:点一下就选了
│  [ 中间的苔石路 ]              │
│  [ 右边的浅溪 ]                │
└──────────────────────────────┘
元素 规则
标题 「岔路」+ 当前风景带名
线索 一句话,不超过 24 个字
小图 一张 1:1 的小观察图(64×64 逻辑像素),把线索指的东西画出来
出口 2~3 个,用地貌特征命名("左边的石阶"),不用"左/中/右"
计时 无
提示 停留超过 30 秒后,正确出口轻微发光一下(每 15 秒一次)。照顾真正卡住的玩家
为什么出口要用"左边的石阶"而不是"左边"

"左边"没有任何信息,玩家只能回头再对一遍线索。 "左边的石阶" 让选项本身也承载线索信息——玩家可以用排除法缩小范围, 卡住的概率明显降低,而且读起来更像在看一张地图。


四、十个线索模板(可直接用)#

全部基于真实存在的自然现象。每个模板都能用一行的代码勾出来,不需要美术额外画东西。

4.1 植物类#

# 线索(一句话) 答案 为什么成立
1 苔藓只长在石头朝北的那一面 选苔藓多的那块石头 北面少日照、更潮
2 向日葵的花盘朝着太阳,现在是上午 选朝东的那边 上午太阳在东
3 芦苇顺着风倒,风从西边来 选风倒向的那条路(下风处更开阔) 风从西来,芦苇倒向东
4 蘑菇围成一圈长,圈心是老的 圈心有旧路基 蘑菇圈(仙环)逐年外扩
5 蒲公英的种子往一边飘 选种子飘向的那条路 飘向 = 下风 = 开阔

4.2 地形类#

# 线索(一句话) 答案 为什么成立
6 溪水从高处往低处流,水纹朝东 选东边(下游,通向河谷) 水往低处走
7 树桩的年轮一边密一边疏,疏的一侧朝南 选朝南的那条路 南侧日照足、长得快
8 倒下的树,苔藓长在朝上的那一面 选苔藓朝上的路 上面更潮、见光少
9 地面上的脚印朝一个方向 选脚印朝向的那条路 —(也可能是诱饵,见下)
10 鸟群往一个方向飞,离巢是去觅食 选鸟飞去的方向 觅食方向通常通向水/食物

4.3 关于"诱饵"#

9 和 10 是**故意不可靠**的,但要说清楚

脚印和鸟群在真实世界里都可能是任意方向,所以它们不能当唯一的正确线索。 规则是:用诱饵的岔路口,必须有第二个能自证的线索(比如牌子上同时写了苔藓)。 诱饵的作用是让玩家"多看一眼",不是"坑他"。没有第二个线索就不许用 9/10。


五、选错了会怎样(零失败的实现)#

这是整套设计里最需要写清楚的一节——"不惩罚"必须落在具体行为上,不能只是一句口号。

步骤 发生什么
1 兔子走向选错的那个出口,速度 0.8 倍(比正常慢,像是在犹豫)
2 走约 3 秒(900px)后,路渐渐变成死路:草变稀、天色偏暗、鸟声停
3 兔子自己停下、回头、走回来。回来路上必定能捡到 1 件东西(随机花或碎片)
4 回到岔路口,牌子上多出一行新线索("刚才那条路是断的"这类),再选一次
5 第二次选错 → 第三次直接给出唯一剩下的出口(不会卡住)

损失清单:不扣种子、不倒退进度、不重复计时、不减少本关的收集上限。唯一损失是 8 秒时间。

折返路为什么要塞东西

如果折返路上什么都没有,玩家的感受是"我白走了"。 塞一样东西进去,感受立刻变成"我顺便还捡了个东西"—— 一样的 8 秒,一个是惩罚,一个是奖励。 这就是零失败在细节上的写法。


六、种子、难度与长期曲线#

关 岔路口数 线索可读性 出口数
1~3(第 1 季) 1~2 线索直接写在牌子上,看图就懂 2
4~9 2 线索在牌子上,但小图需要看一眼 2~3
10~18 2~3 线索在场景里(牌子只写"看看四周"),要自己找 3
19+ 3 同上,且开始出现诱饵(必须有第二线索) 3
为什么难度是"线索越来越藏"而不是"选项越来越绕"

选项变多、线索变长,都只是变烦。"线索从牌子上移到场景里" 才是真正的难度提升—— 它要求玩家看画面,而看画面正是这个游戏的核心动作。 难度加在核心动作上,玩家会觉得"我在变强";加在阅读量上,只会觉得"我在做阅读理解"。