你的蛙到底在干什么?花了 5 个晚上,我总算摸清了一些规律

701 阅读12分钟
原文链接: daily.zhihu.com

你的蛙到底在干什么?花了 5 个晚上,我总算摸清了一些规律

图片:《旅行青蛙》

玩《旅行青蛙》(旅かえる)有哪些体验?

黄小秋,。

呱呱走火入魔 - 逆向游戏代码 - 终结玄学迷信

看到很多人对物品的使用上的很多猜测,很多都不是很准确。

为了理解你们的呱究竟在干什么,花了五个晚上逆向游戏程序逻辑,提取各种数据。

这里相当于动用了 上帝视角 来解答这些问题。

答案将会陆续更新,欢迎在评论区提问。


  1. 呱真的在旅行么?
  2. 呱是如何选择旅行路径的?
  3. 呱是如何旅行的?
  4. 呱在每条路上的耗时是怎么计算的?
  5. 呱离家出走了怎么办?
  6. 道路有哪些属性?
  7. 每件物品都有什么效果?
  8. 如何科学使用物品?
  9. 旅途中会带回哪些明信片?
  10. 旅途中会带回哪些特产?
  11. 朋友什么时候会来访?
  12. 朋友来访应该投喂什么?
  13. 三叶草多久会长好?
  14. 四叶草获得的概率是?
  15. 抽奖球的概率是?
  16. 如何获得成就?
  17. 有没有免费获得三叶草的方法?

呱真的在旅行么?

不得不佩服游戏的设计者,为了追求真实,实现了一套非常完整的旅行模拟系统,有严谨的旅游路线设计。

因为旅行的过程并不展示给用户,我原本以为逻辑会十分简单。发现这套旅行模拟系统的时候,我也有些惊讶,也促使我深入研究这款游戏的逻辑。

下面的解释中间会用到少量计算机图论 (graph theory) 的术语,但应该还是很直观。

呱是如何选择旅行路径的?

程序内建东、西、南、北四个区域,呱会选择一个地区旅行

每个区域的设计都是一个连通的无向图 (connected undirected graph),而呱的旅行路线就是在图上某两个点之间走出一条路径 (path)

通过逆向手段,我提取出了程序中的信息,花了一些时间用 Graphviz 生成了每个地图的样子。

如果大家有兴趣的话,我可以把原始数据上传到 Github

图上的每个节点 (vertex) 都代表了一个地点。每个地点都有可能被蛙经过,并触发一些事件。

除了普通的地点外,还有四种特殊的地点会影响呱旅行的路线:

  • START 起始点(帽绿色)
  • GOAL 目的地(桃红色)
  • PATH 途径地(橘黄色)
  • DETOUR 绕路地(浅黄色)

连接节点之间的是边 (edge),代表连接地点的路,这些路上也会触发 遇上伙伴、拍摄照片 等事件。

每次开始旅行的时候,根据老母亲(?)打包的物品,呱都会:

  1. 选择目的地
    携带特点食物或道具可以影响到地区的选择,有些物品可以增加特定地区的被选概率,甚至可以直接确定选择的地区。在一个区域内的目的地的选择同样取决于所携带的道具。具体每件物体效果会在后面提到
  2. 选择途径地
    途径地由目的地决定,每个地点都有对应的途径地,代码中对此的描述是当地的县府 / 交通枢纽。
  3. 选择绕路地
    这个很有意思,我猜测作者的目的是为了让旅途更有多样性,每次路途会额外添加几个地区内绕路地点,携带物品对决定绕路地似乎没有影响。
  4. 生成经过所有地点的旅行路径
    运用了图论很经典的连通图找最短路径 Dijkstra 算法,配合途径地和绕路地的逻辑,最终计算出旅行路径。

目的地是怎么选择的?

具体目的地的选择就和携带的道具相关,每个物品对应目的地的优先级与 区域加成 叠加就能获得每个地点被选择的概率。

每个目的地的 区域加成 初始值都为 30,道具的 决定地区 属性值可以提升对应地区内目的地的 区域加成,从而增加区域内所有的目的地被选择的概率。

部分道具可以直接限制选择到规定的地区 (D)。

呱是如何旅行的?

确定了地点之后,呱会开始旅行:

  1. 携带物品会决定蛙最长能旅行多久,6 ~ 72 小时不等。
  2. 初始体力由携带物品决定,以 100 为基数提升。
    *物品的具体属性参考下面的图鉴
  3. 经过图上的一条路(边)的时候,道路的地形属性和所携带的物品属性互相作用,会决定呱实际消耗的时间和体力。
  4. 路上可能会遇见小伙伴,会在之后的旅行中结伴而行,从而出现在明信片中。
  5. 根据路途属性,有一定概率会寄相关的明信片。
  6. 当体力不支的时候,蛙必须停下来休息 3 小时,休息完之后体力会恢复到 100。休息时间也算作旅行时间。
  7. 当到达目的或者旅行时间耗尽的时候,蛙就会回家。
    1. 回家时会携带三叶草和抽奖券。
    2. 如果在时间耗尽前到达了目的地,蛙会在此基础上带回当地特产和收藏品。

所以如果你的蛙很久都没回家,回家了也没有带土特产,可能是路途上多次体力不支,晕倒在路边。

呱在每条路上的耗时是怎么计算的?

设:

 为当前道路 耗时

 为当前道路的 地形增加耗时

 为当前道路的 地形,

 为携带物品数量

 依次为携带的第   件物品中所有具有 普通、山地、大海、洞穴、任意地形 移动速度 的效果值。

如果当前道路是 普通 地形,则耗时因叠加 移动速度 效果而减少:

或者 如果当前道路是 山地、大海、洞穴 地形,基础耗时不变,地形增加耗时因叠加 移动速度 效果而减少:

如果携带了 乳蛋饼 (のびるのキッシュ)这种 全地形 移动速度 提升的物品,则会在此基础上再次叠加 移动速度 效果:

最终获得的  就是该条道路上的实际耗时。

呱离家出走了怎么办?

如果长时间没有准备便当,包里和桌上都没有食物,呱会愤然离家出走(どこかへ出かけています)。

这个时候在桌子上放上吃的,呱就会在 5~30 分钟内回家。

有趣的是,离家出走也算作成就计算中的旅行次数……emmmm。

道路有哪些属性?

连接不同地点之间的每条路 (edge) 都有以下几个属性

  • 地形
    四种地形分别是 普通、大海、山地、洞穴
  • 耗时
    途径这条路的体力和时间损耗,分为基础耗时和地形增加耗时
    呱需要跋山涉水自然会耗时久一点
  • 明信片概率
    明信片上不同元素出现的概率
    据说所有的地图元素都有真实原型
  • 遇见伙伴
    遇见特定伙伴的概率

具体如下,不能再详细了

每件物品都有什么效果?

奉上这张吐血整理的物品效果图鉴:

有五类不同的物品

  • 便当
    商店购买或者抽奖获得的食物
  • 幸运符
    除了四叶草和可以购买的幸 (tǔ) 运 (háo) 铃之外,都要抽奖获得
  • 道具
    商店购买
  • 特产
    呱旅游时获得
  • 收藏品
    特别的特产,通常在县府获得,无法使用

属性分类

  • HP
    • 最大时间(小时
      决定蛙的旅行时间
    • 初始体力提升(%)
      增加一开始一鼓作气能旅行的距离
    • 随机体力提升(%)
      随机额外增加体力提升的最高百分点
  • 物品几率
    • 三叶草
      获得三叶草数量
    • 额外随机三叶草
      随机额外获得的最大三叶草数量
    • 抽奖券
      奖券数量
    • 物品数量增多
      增加获得目的地收藏品的概率
  • 决定地区
    对应地区被选中的概率,如果值为 D 则可以直接决定目的地所在区域
  • 移动速度
    根据地形不同,提升移动速度,减少途径所耗费的时间,在相同旅行时间内可以走更远
  • 朋友
    遇到特定旅行伙伴的概率
  • 遭遇地形
    途径特定地形时候获得相应明信片的概率
  • FLAG 属性
    立一些特定的 Flag,主要影响成就系统,下面会写到

如何科学使用物品?

这里用几个例子来展示物品和路线结合的效果

  1. 决定想去的地区
    携带的便当和抽奖获得的护身符(お守り)可以提升选择特定地区的概率。 抽奖获得的车票(きっぷ)可以直接决定所去到的地区。
    例:想去北方,使用北国きっぷ。
  2. 影响路途的距离和时间
    最大时间 值高的食物吃走得远,带 体力提升 值高的食物吃走得快耗时少。
  3. 快速通过沿途路线的地形
    带有地区速度加成的食物或者道具,可以增加特定地形的移动速度。
    不同物品的 移动速度 效果可以叠加,详情查看上面的解释。
  4. 匹配在道路上遇到的伙伴
    如果在途径会遭遇伙伴的道路,特定物品可以增加实际遭遇概率
    例:
    抽奖抽到的黄色ぼうろ(饼干)可以增加路途中遇到螃蟹的几率。

综合运用(敲黑板!!!)

呱想去秋田県男鹿市看灯塔

  1. 在地图上找到 秋田県(3022) 在北方。
  2. 便当选择 あさつきのピロシキ (葱饼?)可以提升去北方的概率。
  3. 携带 青色のお守り (蓝色护身符)可以提升去北方的概率。
  4. 如果有 北国きっぷ(北方车票?)可以直接决定去北方,上面的便当和护身符可以换别的。
  5. 通过目的地概率表发现携带各类帐篷前往 3022 目的地的概率更高。
  6. 查看可能的路线发现从起始点 3000 到 3022 之间会途径很多山路。
  7. 携带 ハイテクテント (高级帐篷?)增加山地移动速度更显著。
  8. 如果还有空余,可以带上 よつ葉(四叶草)或者 幸運の鈴,提升带回物品的概率。

旅途中会带回哪些明信片?

途径每条道路上会遇到的明信片元素都有很明确的概率。

普通的明信片是自动合成的。根据道路元素、所携带道具、遇到的同行小伙伴,程序会选择合适的背景、前景和呱和小伙伴的 pose,合成完整的明信片。粗略计算,有 120 种左右的组合。

有一些带有特定的故事情节明信片是单张绘制的,这里也可以看出游戏制作者的用心:迷路和小伙伴看地图通常出现在地图的边缘,冷清下水道一般出现在四通八达的城市交通枢纽。

旅途中会带回哪些特产?

上面提到了,成功到达目的地(GOAL)的时候才会获得特产,收藏品的获得概率是 15%,其他物品的概率如下:

游戏代码中有收藏品收集三次必定成功的设定,但是实际上并未启用,可能在之后的版本中会引入

朋友什么时候会来访?

蜗牛、蜜蜂和乌龟会时不时来访。来访停留的时间 180~270 分钟。

蜜蜂需要有至少 3 件收藏品才会出现,乌龟需要有至少 6 件收藏品。

朋友来访应该投喂什么?

给来访的朋友投喂会获得三叶草和抽奖券的回礼:

在此基础上,投喂带有稀有 FLAG 属性的物品会多获得 20 根三叶草,多获得 1~4 张抽奖券。

朋友会记住最近三次的食品。连续投喂同一种物品,获得回礼的数量会降低。

为了达到最好效果,最好换四种不同的礼物轮流投喂,具体可以参照下面的喜好表格:

三叶草多久会长好?

花坛中总共有 20 根三叶草。

三叶草割完之后重生的时间是遵循

的正态分布在

的区间:

每一根都是独立重生的。最短 5 分钟 (300 秒),最长 4 小时 (14400 秒) 重生。

四叶草获得的概率是?

完成教程后会自动诞生第一颗四叶草,除此之外,每一根三叶草重生的时候都有 1% 的概率成为四叶草。

抽奖球的概率是?

  • 白:60%
  • 蓝:27%
  • 绿:9%
  • 红:3%
  • 金:1%

如何获得成就?

蛙旅行的时候会立一些 Flag,我从代码中整理了一下触发的条件:

这也是玄学错误迷信的一个地方。使用称呼对游戏其他部分没有任何影响,不会改变获得物品和明信片获得概率,也不会影响出门时长。

有没有免费获得三叶草的方法?

你猜?