技术:出怪机制

这是本词条的历史版本!该页面包含旧版本的快捷文本。
是否自动将快捷文本同步至最新版本?是 


本条目部分或全部内容搬运自外部资源。

遵守CC BY-SA 4.0协议,部分内容可能有所改动。

以下内容涉及较多精确数据,除非确信某处有误,否则请谨慎修改。

出怪机制

本条目主要讲解生存无尽模式中僵尸的生成算法与随机原理。

不要强行认字

以下内容不是为初学者设计的。想要学习关于出怪的基础知识,请参阅僵尸刷新机制

出怪类型指本次选卡准许生成的僵尸种类。

准许

即使准许生成某僵尸,也不代表该僵尸一定会出现。例如,即便出怪类型中含有蹦极僵尸,也可能不生成蹦极,取决于生成时的随机结果。

另有一部分僵尸无需准许亦能生成,如固定出现的旗帜僵尸、小概率随机出现的雪人僵尸。

出怪类型位于[[[6a9ec0]+768]+54d4]开始的连续33个bool类型的地址,true代表准许,false代表不准许。

出怪类型的决定方式如下1)

  1. 设定要出普僵
  2. 产生一个0~4的伪随机整数(后文详解),若等于0则设定要出读报,否则设定要出路障2)
  3. 轮数<8,则设定剩余出怪类型数为轮数+1,否则设定剩余出怪类型数为9
  4. 产生一个0~33的伪随机整数,若未设定要出此类僵尸且没有禁止出此类僵尸3),则设定要出此类僵尸并进入第5步,否则重复第4步
  5. 若第4步中已设定要出的僵尸类型数等于第3步的剩余出怪类型数,则进入第6步,否则重复第4步
  6. 忽略摇旗、僵博,即强制设为false4)

轮数

轮数即选卡时已完成flag数/2-1

随机数生成器算法为MT19937,种子由以下几个数值相加:

[[[6a9ec0] +82c] +20]              // 用户序号
[[[6a9ec0] +768] +561c]            // 出怪种子
[[[[6a9ec0] +768] +160] +6c] * 65  // 完成选卡次数 * 101
[[6a9ec0] +7f8]                    // [[教程:名词大全#序号-2|游戏模式]]

以下表格列出了不同轮数下,各僵尸出现在出怪类型中的概率,以及出怪类型中僵尸总数5)各取值的概率。6)

轮数=1

路障 读报 其他 2种 3种 4种
前院 82.67% 30.67% 13.33% 0.95% 24.76% 74.29%
后院 82.35% 29.41% 11.76% 0.74% 22.06% 77.21%
屋顶 83.08% 32.31% 15.38% 1.28% 28.21% 70.51%

轮数=2

路障 读报 其他 3种 4种 5种
白昼 83.53% 34.12% 17.65% 2.21% 30.88% 66.91%
黑夜 83.75% 35.00% 18.75% 2.50% 32.50% 65.00%
后院 83.16% 32.63% 15.79% 1.75% 28.07% 70.18%
屋顶 84.00% 36.00% 20.00% 2.86% 34.29% 62.86%

轮数=3

路障 读报 其他 4种 5种 6种
白昼 84.71% 38.82% 23.53% 4.41% 38.24% 57.35%
黑夜 85.00% 40.00% 25.00% 5.00% 40.00% 55.00%
后院 84.21% 36.84% 21.05% 3.51% 35.09% 61.40%
屋顶 85.33% 41.33% 26.67% 5.71% 41.90% 52.38%

轮数=4

路障 读报 其他 5种 6种 7种
白昼 85.88% 43.53% 29.41% 7.35% 44.12% 48.53%
黑夜 86.25% 45.00% 31.25% 8.33% 45.83% 45.83%
后院 85.26% 41.05% 26.32% 5.85% 40.94% 53.22%
屋顶 86.67% 46.67% 33.33% 9.52% 47.62% 42.86%

轮数=5

路障 读报 其他 6种 7种 8种
白昼 86.67% 46.67% 33.33% 9.80% 47.06% 43.14%
黑夜 87.06% 48.24% 35.29% 11.03% 48.53% 40.44%
后院 86.00% 44.00% 30.00% 7.89% 44.21% 47.89%
屋顶 87.50% 50.00% 37.50% 12.50% 50.00% 37.50%

轮数=6

路障 读报 其他 7种 8种 9种
白昼 87.78% 51.11% 38.89% 13.73% 50.33% 35.95%
黑夜 88.24% 52.94% 41.18% 15.44% 51.47% 33.09%
后院 87.00% 48.00% 35.00% 11.05% 47.89% 41.05%
屋顶 88.75% 55.00% 43.75% 17.50% 52.50% 30.00%

轮数=7

路障 读报 其他 8种 9种 10种
白昼 88.89% 55.56% 44.44% 18.30% 52.29% 29.41%
黑夜 89.41% 57.65% 47.06% 20.59% 52.94% 26.47%
后院 88.00% 52.00% 40.00% 14.74% 50.53% 34.74%
屋顶 90.00% 60.00% 50.00% 23.33% 53.33% 23.33%

轮数≥8

路障 读报 其他 9种 10种 11种
白天 90.00% 60.00% 50.00% 23.53% 52.94% 23.53%
黑夜 90.59% 62.35% 52.94% 26.47% 52.94% 20.59%
后院 89.00% 56.00% 45.00% 18.95% 52.11% 28.95%
屋顶 91.25% 65.00% 56.25% 30.00% 52.50% 17.50%

计算公式

设可出怪类型数是a,剩余出怪类型数是b,则:
  • 路障出现概率0.8+0.2*b/a
  • 读报出现概率0.2+0.8*b/a
  • 其他出现概率b/a

僵尸种类数的三种情况概率分别为:

  • b*(b-1)/(a*(a-1))
  • b*(a-b)*2/(a*(a-1))
  • (a-b)*(a-b-1)/(a*(a-1))

六大场地的a值分别为18/17/20/20/16/16,b值在轮数≥8时取值为9。

出怪列表决定了实际生成的僵尸的具体种类与个数,在选卡页面就已经确定。退出重进选卡页面会刷新出怪列表(所谓的无痕S/L)

完整的出怪列表长度20007),位于[[[6a9ec0]+768]+6b4]开始的连续2000个int_32类型的地址,每50个为1波,总共记录40波。因此,每波至多生成50只僵尸。若出怪列表中留空,则对应波次会生成少于50只。

生存无尽模式中每轮仅20波,故只使用前1000个值。老虎机、宝石迷阵等无限出怪的模式中,第41波起会重复循环第40波的出怪。

每波僵尸刷新时,游戏会严格按照出怪列表预先设定的顺序依次生成对应僵尸。

生存无尽中,出怪列表的生成受以下因素影响:权重、级别、阶数、红眼数量上限

权重位于[0x0069da94 + i * 0x1c],游戏依此加权随机决定下一个要填入出怪列表的僵尸。

加权随机

即调整不同结果被随机到的概率。

例如从箱中抽红球与黄球,若红球权重2,黄球权重1,等同于抽到红球的概率为3分之2,抽到黄球的概率为3分之1。

每种僵尸的级别位于[0x0069da88 + i * 0x1c]

各僵尸级别与权重一览8)

序号 简称 级别 权重 备注
0 普僵 1 4000 轮数=5起每轮-180,轮数=25起固定为400
1 旗帜 1 0 在旗帜波固定出现,不参与随机过程
2 路障 2 4000 轮数=5起每轮-150,轮数=25起固定为1000
3 撑杆 2 2000
4 铁桶 4 3000
5 读报 2 1000
6 铁门 4 3500
7 橄榄 7 2000
8 舞王 5 1000
9 伴舞 1 0 衍生于舞王
10 鸭子 1 0 实际出现的鸭子僵尸为出现在水路的普僵/路障/铁桶自动转换而来
11 潜水 3 2000
12 冰车 7 2000
13 雪橇 3 2000
14 海豚 3 1500
15 小丑 3 1000
16 气球 2 2000
17 矿工 4 1000
18 跳跳 4 1000
19 雪人 4 1 无需出怪类型准许亦可生成,需已在冒险二周目4-10见到雪人
20 蹦极 3 1000 仅在旗帜波生成
21 梯子 4 1000
22 投篮 5 1500
23 白眼 10 1500
24 小鬼 10 0 衍生于巨人
25 僵博 10 0
26 豌豆 1 4000
27 坚果 4 3000
28 辣椒 3 1000
29 机枪 3 2000
30 窝瓜 3 2000
31 高坚果 4 2000
32 红眼 10 6000 非旗帜波调整为1000

每波所出僵尸的级别总和不超过该波级别上限

级别上限

每波级别上限 = int(int((当前波数 + 已完成选卡数 * 每轮总波数) * 0.8) / 2) + 1,旗帜波再* 2.5并向零取整。

阶数决定了这个僵尸从第几波才会出现9)

阶数 包含 限制
一阶僵尸 普僵、路障、铁桶、读报、雪人 第1波开始就可以出现
二阶僵尸 撑杆、铁门、橄榄、舞王 至少从第5波开始才可以出现
三阶僵尸 潜水、海豚、冰车、小丑、气球、矿工、跳跳、梯子、投篮 至少从第10波开始才可以出现
四阶僵尸 白眼、红眼 至少从第15波开始才可以出现,轮数=9起每轮-1,轮数=23起固定为1

已生成的红眼总数达到红眼数量上限后,非旗帜波不再出红眼,立刻生效。

红眼数量上限初始为0,轮数=5起每轮+1,轮数=54起固定为50。

出怪难度饱和指到达一定flags数后,游戏不再增加出怪算法难度的情况。该flags数阈值被称作“饱和f数”。

从不同角度可以得到不同的饱和f数:

  • 第47f起,阶数不再起限制作用
  • 第85f起,级别上限在统计意义上不再起限制作用
  • 第109f起,红眼数量上限不再起限制作用
  • 第126f起,级别上限在严格意义上不再起限制作用

2)
此处读报和路障中未被选中者,仍有可能在后面的步骤中被选中,因而“读报路障不同出”系谣言
3)
伴舞/鸭子/雪橇/雪人/小鬼、植物僵尸、黑夜的冰车、非后院的潜水/海豚、屋顶的舞王/矿工、轮数<2时的冰车/白眼、轮数<5时的红眼
4)
若均未选中,为常规“11怪”;若选中其一,为“10怪”;若均选中,为“9怪”
5)
普僵与鸭子计一种,不计旗帜(固定生成)、雪人(极小概率随机生存)
8)
以内存值为准,实际有调整的标于备注
bbbbbbbbba, 2023/01/20 23:40
如按(3,4,1,2,5,1)的行顺序出怪后,结果如右(不考虑第6行)。

这里为什么2~5行的SecondLastPicked都是0呢?不在本行出怪时不是应该都+1吗?

野泽萘古, 2022/12/21 12:48

辛苦了!

OTZzzz, 2022/12/21 15:14

谢太宗认可。

请先登录后发表评论 (・ω・)
  • 最后更改: 17月前
  • OTZzzz 修改