九个数字决定一切
电子老虎机本质上是一个披着机器外衣的概率主张。大多数情况下,这个主张是无法被检验的:转轮条是专有的,权重是专有的,帮助界面上的返还数字只能靠信任。Hanabi则反其道而行之。它的转轮根本不是条状排列——十五个格子中每一个都是独立的加权抽取——而权重就摆在引擎文件顶部的一张表里。
引擎已验证hanabi/engine.ts,HANABI_SYMBOLS:玉 SHELL(百搭)权重3;祭 MATSURI(散布)权重2;金魚 KINGYO权重4,3/4/5个连线分别赔付总下注额的×3/×10/×40(pay100 = [300, 1000, 4000]);提灯 CHOCHIN权重5,×2/×6/×25;団扇 UCHIWA权重6,×1.5/×4/×15;氷 KAKIGORI权重8,×1/×3/×10;風鈴 FURIN权重9,×0.8/×2.5/×8;麺 YAKISOBA权重12,×0.6/×1.6/×5;鈴 SUZU权重12,×0.5/×1.2/×4。WEIGHT_TOTAL是所有权重之和,即61;symAt(u)通过从u × 61中不断减去权重来遍历该表。
| 符号 | 权重 | 每格出现概率 | 3/4/5个同款(× 总下注额) |
|---|---|---|---|
| 玉 Shell(百搭) | 3 | 4.92% | 可替代任何付款符号 |
| 祭 Matsuri(散布) | 2 | 3.28% | 任意位置×2/×5/×20,且3个以上触发免费旋转 |
| 金魚 Kingyo | 4 | 6.56% | ×3/×10/×40 |
| 提灯 Chōchin | 5 | 8.20% | ×2 / ×6 / ×25 |
| 团扇 Uchiwa | 6 | 9.84% | ×1.5 / ×4 / ×15 |
| 刨冰 Kakigōri | 8 | 13.11% | ×1 / ×3 / ×10 |
| 风铃 Fūrin | 9 | 14.75% | ×0.8 / ×2.5 / ×8 |
| 炒面 Yakisoba | 12 | 19.67% | ×0.6 / ×1.6 / ×5 |
| 鈴 Suzu | 12 | 19.67% | ×0.5 / ×1.2 / ×4 |
每个格子的概率是权重除以61。线赢是在十条固定线上从左到右读取的;百搭可算作任意付款符号,且散点会中断连线。
从这张表里能看出两件帮助页面永远不会告诉你的事。最稀有的付款符号并不是转轮上最稀有的东西——散点才是,六十一分之二——而两个最便宜的符号加起来几乎填满了每个格子的百分之四十。这是有史以来每台老虎机的形状;区别只在于这里把这个形状印了出来。
每84次旋转中有一次
因为每个格子都是独立的,免费旋转触发概率有一个封闭形式。一个格子是散点的概率为2/61;一次基础旋转有十五个格子;当其中三个或更多是散点时,功能启动。这是一个二项分布计数,结果是1.193%的旋转,即83.8分之一。
| 散点 | 概率 | 大致 | 会发生什么 |
|---|---|---|---|
| 0 | 60.7% | 5次旋转中有3次 | 什么都没有 |
| 1 | 30.9% | 3分之1 | 无 |
| 2 | 7.3% | 1/14 | 无 —— 两个散点符号在这里不产生任何奖励 |
| 3 | 1.075% | 1/93 | 下注额×2,外加10次免费旋转 |
| 4 | 0.109% | 1/915 | 下注额×5,外加10次免费旋转 |
| 5个或更多 | 0.0086% | 1/11,600 | 下注额×20,外加10次免费旋转 |
这三个特色行的概率总和为1.193%,即每83.8次旋转出现一次。
引擎验证hanabi/engine.ts 文件头注释写道:“数学模型已通过蒙特卡洛方法校准(300万轮,scratch测试框架与此文件一致):RTP 96.1%,命中率33.5%,免费旋转约为1/83,最高赢取上限×2000。”引擎测得的1/83与上文根据其自身权重推算出的1/83.8是同一个数字;返还率和命中率数据均引用自文件头注释,本文并未重新计算。
这种一致性值得停下来说一说。该引擎的作者通过模拟调整了游戏参数,并将结果写在了注释中。产生这次模拟的权重就在同一个文件里。任何人拿计算器都能核实这两者是否一致——事实上它们确实一致——这也是本文能够重复引用96.1%这一数字的唯一原因。本刊不会刊登引擎本身未声明的返还率数字,也不会刊登无法看到其输入参数的数字。
阶梯:为什么这个功能呈烟花状
大多数老虎机的免费旋转功能都是固定奖励:十次旋转,也许还有一个固定倍数。而Hanabi的免费旋转是分层的。每次免费旋转所应用的倍数取决于这是第几次旋转,而且是递增的。
已通过引擎验证hanabi/engine.ts: HANABI_FS_START = 10, HANABI_FS_RETRIG = 4, HANABI_FS_CAP = 22; hanabiFsMult(i) = i < 2 ? 1 : i < 4 ? 2 : i < 7 ? 3 : 5,其中i为从0开始计数的免费旋转索引;每次免费旋转的paid100等于其win100 × 倍数。在该功能中出现三个或更多scatter会增加HANABI_FS_RETRIG次旋转,但绝不会超过HANABI_FS_CAP。
| 免费旋转 | 1–2 | 3–4 | 5–7 | 8及以后 |
|---|---|---|---|---|
| 该次旋转的倍数 | ×1 | ×2 | ×3 | ×5 |
| 普通10次旋转功能的总和 | 2 | 4 | 9 | 15 — 总计30,平均每次旋转×3.0 |
| 完全重触发的22次旋转功能的总和 | 2 | 4 | 9 | 75 — 共计90,每次转动平均×4.1 |
重触发会在功能结束时再增加四次转动,而每次转动此时已经支付×5。因此重触发的价值远超其转动次数所暗示的。
这正是这款游戏名字所指的设计理念。烟花的能量释放并非均匀的;它攀升、悬停,然后在终章爆发。阶梯机制让功能的最后几次转动成为最关键的部分,因此一个持续时间长的功能不仅仅是更长,而是更陡峭——而重触发,由于其构造必然落在×5区间,正是这款游戏真正的头奖机制。普通功能平均每次转动约为基础转动的三倍,而拉满的功能平均超过四倍,其最后十五次转动全部为五倍。
同样的阶梯机制也让这个功能显得诚实可信。因为倍数只取决于转动序号而无其他因素,所以它无法被操控:引擎不会决定何时慷慨,它只是执行一条被清楚写明的规则。这与Pagoda的阶梯机制所依据的论点如出一辙——攀升是一种日程安排,而非一种心情。
上限,及其存在的原因
已验证引擎hanabi/engine.ts: HANABI_WIN_CAP100 = 200_000(“×2000总投注上限”);该局的totalMult100为Math.min(total, HANABI_WIN_CAP100),当原始总值超过该值时,该局会被标记为已封顶。
在一条五连金鱼线上出现×5倍数,仅这一条线在一次转动中就已是投注额的×200,而完全重触发的功能会在十条线上产生十五次这样的转动。因此该分布的理论上限极为巨大,而×2,000的上限存在的目的是使游戏的赔付责任变得有限。由于构造原因,被封顶的局是罕见的——需要功能触发、重触发以及多条高价值线同时出现——但该标记会记录在结算中,以便玩家在触及上限时能够看出,是上限而非转轮决定了这个数字。
上限是唯一一个印刷赔付表与实际支付金额可能合理不一致的地方,而引擎会记录这种不一致,而不是隐藏它。这也是为什么回报率被标注为经过校准的96.1%而非精确值的原因:上限和重触发循环使得闭式回报率计算不切实际,因此作者对其进行了测量。
你能核实什么,以及仍然无法核实什么
Hanabi的每一局都可以从三个值重现:投注前提交的服务器种子、你的客户端种子和局的nonce。基础转动的单元格k对应游标k;免费转动j读取游标15 + 15j到29 + 15j。将这些输入相同的加权抽取,你会得到相同的网格、相同的连线和相同的功能,这正是验证演示在一款更简单的游戏中所做的事情。
- 你可以核实网格。每一局每一次转动的每一个符号都是可重新计算的,产生它的权重表是公开的。
- 你可以核实触发率。1/83.8是根据权重表得出的二项分布计数;它不依赖于对页首信息的信任。
- 你无法低成本地核实回报率。96.1%是一个模拟结果。该模拟的所有输入都在文件中,因此任何愿意运行三百万局的人都可以重现这个数字——但这只是重现,而非证明,而Journal引用的是引擎给出的数值。
最后这一点正是这类设计说明所应诚实面对的边界。一款老虎机可以公开其权重、连线、阶梯机制和上限,但仍然欠玩家一个经过测量的数字。Hanabi的作者测量了它,并将其写在产生它的权重旁边,两者都被公开供人查阅。Tairyō的赔付表也做出了同样的承诺。这是一个比“公平”更小的承诺,但却是一个可以兑现的承诺。
遊Hanabi,源码中包含权重
十条连线,从×1攀升到×5的阶梯,以及每个转轮停止位置都可从已提交的种子重新计算Hanabi →常见问题
Hanabi的RTP是多少?
引擎页首标明为96.1%,经过对同一文件三百万局模拟的校准,命中率为33.5%。Journal引用了源头的这一数字,并未自行计算。
Hanabi免费旋转多久触发一次?
大约每84次基础旋转触发一次。15个格子中每个都是概率为2/61的祭scatter,一次旋转中出现三个或更多scatter就会启动该功能;这个二项分布计算得出的概率是1.193%,与引擎实测的“约1/83”相符。
免费旋转的倍数是怎么计算的?
这只取决于是第几次免费旋转:第1-2次为×1,第3-4次为×2,第5-7次为×3,从第8次开始所有旋转都是×5。普通的10次旋转功能平均为每次×3;完全重新触发的22次旋转功能平均为×4.1,其中最后15次全部为×5。
能获得多少次免费旋转?
起始为10次;每次重新触发(功能中出现三个或更多scatter)增加4次,上限为22次。
Hanabi的最大赢额是多少?
总投注额的×2,000。引擎会以原始总额和上限中较小的一个来结算该轮,并会标记出被封顶的那一轮。
我能验证Hanabi的一次旋转吗?
可以。每个格子都是从已提交的服务器种子、你的客户端种子和nonce中进行的一次加权抽取——基础旋转的游标为0-14,第j次免费旋转的游标为15+15j到29+15j——使用公开的权重表,因此整轮都可以用这三个值重放验证。
来源与参考资料
- Betkyo引擎源代码:hanabi/engine.ts —— HANABI_SYMBOLS的权重和赔率、HANABI_LINES、HANABI_SCATTER_PAY100、HANABI_FS_START / RETRIG / CAP、hanabiFsMult、HANABI_WIN_CAP100,以及文件头部的蒙特卡洛校准数据(RTP 96.1%,命中率33.5%,免费旋转约1/83,上限×2000)
- 本文中的scatter触发概率及每格概率均为根据权重表得出的精确二项分布计算结果(15个格子中p = 2/61);返还率和命中率数据为引擎自带数据,未经重新计算