【阅读笔记】旅行的青蛙——旅行模拟系统分析

知乎原文

作者:黄小秋链接:https://www.zhihu.com/question/68733553/answer/305463907来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文是知乎的一个分享帖,涉及算法逆向工程。和彦斌同学饶有兴致地聊了两句。以下是摘要

1. 路线设计

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

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

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

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

作为例子的东部地图。膜拜一下

图上的每个节点 (vertex)都代表了一个地点。每个地点都有可能被蛙经过,并触发一些事件(想起了口袋妖怪的鲤鱼王养殖游戏)。

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

START 起始点(帽绿色)

GOAL 目的地(桃红色)

PATH 途径地(橘黄色)

DETOUR 绕路地(浅黄色)

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

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

1. 选择目的地

携带特点食物或道具可以影响到地区的选择,有些物品可以增加特定地区的被选概率,甚至可以直接确定选择的地区。在一个区域内的目的地的选择同样取决于所携带的道具。具体每件物体效果会在后面提到

2. 选择途径地

途径地由目的地决定,每个地点都有对应的途径地,代码中对此的描述是当地的县府/交通枢纽。

3. 选择绕路地

这个很有意思,我猜测作者的目的是为了让旅途更有多样性,每次路途会额外添加几个地区内绕路地点,携带物品对决定绕路地似乎没有影响。

4. 生成经过所有地点的旅行路径

目的地是怎么选择的?

数值不是绝对概率而是相对的优先级

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

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

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

呱是如何旅行的?

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

1. 携带物品会决定蛙最长能旅行多久,6 ~ 72 小时不等。

2. 初始体力由携带物品决定,以 100 为基数提升。

*物品的具体属性参考下面的图鉴

3. 经过图上的一条路(边)的时候,道路的地形属性和所携带的物品属性互相作用,会决定呱实际消耗的时间和体力。

4. 路上可能会遇见小伙伴,会在之后的旅行中结伴而行,从而出现在明信片中。

5. 根据路途属性,有一定概率会寄相关的明信片。

6. 当体力不支的时候,蛙必须停下来休息 3 小时,休息完之后体力会恢复到 100。休息时间也算作旅行时间。

7. 当到达目的或者旅行时间耗尽的时候,蛙就会回家。

    7.1 回家时会携带三叶草和抽奖券。

    7.2 如果在时间耗尽前到达了目的地,蛙会在此基础上带回当地特产和收藏品。

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

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

呱离家出走了怎么办?(这算是个旅行系统的设计彩蛋吧)

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

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

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

道路有哪些属性?

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

1.地形

四种地形分别是普通、大海、山地、洞穴

经典的SLG地形影响行动的设计,从当年“”霸王的大陆“”开始

2.耗时

途径这条路的体力和时间损耗,分为基础耗时和地形增加耗时

呱需要跋山涉水自然会耗时久一点

3.明信片概率

明信片上不同元素出现的概率

据说所有的地图元素都有真实原型

4.遇见伙伴

遇见特定伙伴的概率

原帖中附有详细图

道具设计

收藏品

收藏品有点败笔,太少了。像GAGEX Co推出的那几款“昭和杂货店”,“昭和盛夏祭典”就相当成功。

属性分类

    HP

        最大时间(小时

        决定蛙的旅行时间

        初始体力提升(%)

        增加一开始一鼓作气能旅行的距离

        随机体力提升(%)

        随机额外增加体力提升的最高百分点

物品几率

        三叶草

        获得三叶草数量

        额外随机三叶草

        随机额外获得的最大三叶草数量

        抽奖券

        奖券数量

        物品收集阻力

        减少收集阻力,增加获得目的地收藏品的概率

决定地区

    对应地区被选中的概率,如果值为 D 则可以直接决定目的地所在区域

移动速度

    根据地形不同,提升移动速度,减少途径所耗费的时间,在相同旅行时间内可以走更远

朋友

    遇到特定旅行伙伴的概率

遭遇地形

    途径特定地形时候获得相应明信片的概率

FLAG 属性

    立一些特定的 Flag,主要影响成就系统,下面会写到

实例: 几个例子来展示物品和路线结合的效果

1. 决定想去的地区

携带的便当和抽奖获得的护身符(お守り)可以提升选择特定地区的概率。 抽奖获得的车票(きっぷ)可以直接决定所去到的地区。

例:想去北方,使用北国きっぷ。

2. 影响路途的距离和时间

最大时间 值高的食物吃走得远,带体力提升值高的食物吃走得快耗时少。

3. 快速通过沿途路线的地形

带有地区速度加成的食物或者道具,可以增加特定地形的移动速度。

不同物品的移动速度效果可以叠加,详情查看上面的解释。

4. 匹配在道路上遇到的伙伴

如果在途径会遭遇伙伴的道路,特定物品可以增加实际遭遇概率

例:

抽奖抽到的黄色ぼうろ(饼干)可以增加路途中遇到螃蟹的几率。

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

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

在地图上找到 秋田県(3022) 在北方。

便当选择あさつきのピロシキ (葱饼?)可以提升去北方的概率。

携带青色のお守り (蓝色护身符)可以提升去北方的概率。

如果有北国きっぷ(北方车票?)可以直接决定去北方,上面的便当和护身符可以换别的。

通过目的地概率表发现携带各类帐篷前往 3022 目的地的概率更高。

查看可能的路线发现从起始点 3000 到 3022 之间会途径很多山路。

携带ハイテクテント (高级帐篷?)增加山地移动速度更显著。

如果还有空余,可以带上よつ葉(四叶草)或者幸運の鈴,提升带回物品的概率。

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

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

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

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

旅途中会带回哪些特产?

上面提到了,成功到达目的地(GOAL)的时候才会获得特产,收藏品的获得的基础概率是 15%,使用四叶草或者幸运铃铛可以减少收集收藏品的阻力,增加获得概率。

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

但是很可能是为了提高收藏的难度(因为种类太少)而故意放弃的

朋友什么时候会来访?

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

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

朋友来访应该投喂什么?

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

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

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

我去!这个真是太人性了。连续三次会吃腻!怪不得每次给蜗牛米它回馈极少

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


四叶草获得的概率是?

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

抽奖球的概率是?

白:60%

蓝:27%

绿:9%

红:3%

金:1%

如何获得成就?

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

使用称呼对游戏其他部分没有任何影响,不会改变获得物品和明信片获得概率,也不会影响出门时长。




end

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容

  • 旅行青蛙是一个近期非常热门的休闲游戏,所谓佛系游戏。旅かえる是猫咪后院游戏公司HIT-POINT新出的一款休闲小游...
    搞笑有嘻哈阅读 698评论 0 1
  • 近期旅行青蛙这款游戏非常的火热,周围的朋友、家人都养了一只小青蛙。看到网上有人说这款游戏可以直接逆向编译,没有加密...
    MrYun阅读 2,866评论 0 2
  • 来自纯新手的手把手实践经验分享 初次接触逆向,简单记录一下心路历程及一些自认为有趣的东西,大佬们可绕过或者多多指教...
    JackyTsuuuy阅读 653评论 0 0
  • “别让我一个人醉,你别不喝嘛!”干完一杯又一杯,酒这东西,要是没有互相劝酒,好像就没有太多意思了。 许久不见的朋友...
    叫我梅芳就好阅读 463评论 0 0
  • 单词 遊びます(あそびです)玩,游乐 泳ぎます(およぎます)游泳 迎えます(むかえます)迎接,欢迎 疲れます(つか...
    闷油瓶小张阅读 313评论 1 0