无尽场地
PvZ 的六大无尽场地分别是:白天 / 白昼 (Day)、夜晚 / 黑夜 (Night)、泳池 (Pool)、浓雾 / 雾夜 (Fog)、屋顶 (Roof)、月夜 (Moon);对应的生存无尽模式 (Survival: Endless) 分别简称为:DE、NE、PE、FE、RE、ME。
场地元素的称谓
横行称为“路”或“行”,从上到右称呼依次从 1 路开始递增;纵列称为“列”,从左至右称呼依次从 1 列开始递增。
对前院和屋顶场地,1、5 路称为边路,2、4 路称为旁路,3 路称为中路。
对后院场地,1、2、5、6 称为陆路,1、6 路称为边路,2、5 路称为岸路,3、4 路称为水路。
场地的坐标表示
游戏窗口分辨率:800 * 600;左上角坐标为 (0, 0),右下角坐标为 (799, 599)。
格子的尺寸:所有场地每个格子的宽度均为 80(第 n 格的右边线横坐标 = 80 * n);前院场地格子高度为 100,后院和屋顶场地格子高度为 85。
格子坐标:可表示为(r, c),其中 r 为行数,c 为列数。植物一般可由此表示;特别地,占两格的玉米加农炮的坐标由左侧一格指代。而僵尸坐标:具有横坐标连续(但严格地,最小元为 1px)、纵坐标离散(路)的特点,因此引出:
像素坐标:可表示为(x, y)。
r – c 坐标与 x – y 坐标具有以下换算关系:
前院场地:
后院场地:
屋顶场地:
注意:转换时为了更精确,路数和列数都可用小数,但最终得到的像素坐标必须取整。
白天场地和夜晚场地
白天场地即 DE、PE、RE;夜晚场地即 NE、FE、ME。
天降阳光
白天场地有天降阳光,且掉落间隔满足公式:
$$ 掉落间隔 = min {已掉落阳光数量 \times 10 + 425, 950 } + rand ( 275 ) $$
亦即:刚开局时掉落较快,掉落 52 个之后间隔稳定在 950 ~ 1224 范围内。
夜晚场地无天降阳光。
蘑菇与咖啡豆
白天场地中,蘑菇需用咖啡豆唤醒;夜晚场地中,蘑菇可直接种植并生效,无需咖啡豆。
NE 无冰车、NE 墓碑和 FE 浓雾
NE 不出冰车——这极大方便了垫材的使用。
NE 墓碑:关底(W20)前五列(5 – 9 列)随机一格冒出一块墓碑,且已存在的每块墓碑下会冒出一只僵尸(普僵 / 路障);场上最多 12 块墓碑,墓碑未满且前场没空位则随机顶掉植物(玉米炮顶掉前轮不受影响,即“压碑”)。
FE 浓雾:即前场(6 – 9 列)有浓雾覆盖(6 列较浅),可用三叶草临时吹走 / 用灯笼照亮 / 用火树照亮(仅小片十字区域)。
前院场地、后院场地和屋顶场地
前院场地即 DE、NE;后院场地即 PE、FE;屋顶场地即 RE、ME。前院和屋顶场地尺寸为 5 9;后院场地尺寸为 6 9。
后院水池和珊瑚三人组
水池:后院场地中间两路为水池,陆生植物需种在睡莲上;水路出特有僵尸:鸭子、潜水、海豚;水池特有珊瑚三人组:即关底(W20)水路 6 – 9 列随机出现三只僵尸(普僵 / 路障 / 铁桶),在需特别考虑其威胁的阵型中,可冰消或灰烬处理。
屋顶花盆、斜坡、空降三人组和玉米炮的误差
屋顶植物需种在花盆上;屋顶场地不出矿工 / 舞王(常识上可以理解,因为它们需要从土里冒出,而屋顶没有土)。
斜坡:屋顶场地后场五列(1 列 – 5 列)为斜坡。射手类植物的子弹被前一列斜坡挡住(仙人掌被 5 列挡住);反向子弹会因斜坡打不中僵尸(火豌豆除外);斜坡上不会留冰道。
空降三人组:屋顶场地关底(W20)前五列(5 – 9列)随机三格由蹦极送下三只僵尸(普僵 / 路障 / 铁桶)
屋顶场地玉米加农炮的飞行时间和落点会随列数波动。另外还有一个被称为“上界之风”的现象:疑似游戏 bug,即屋顶底线玉米炮打不准,只能炸两行的步行僵尸及三行的巨人 / 小鬼 / 冰车 / 气球 / 跳跳
出怪规则
僵尸的等价和伴随关系
等价关系
选怪里的一个选项,实际表现为多种形象。如水路的鸭子僵尸,其实是普僵 / 路障 / 铁桶出现在水路所分别对应的特殊形态,比如若后院出怪有铁桶,则水路的铁桶表现为铁桶鸭子,二者共享“铁桶”这一选怪类别的列表容量。
注:两种僵尸有种间等价关系不代表它们代号相同。
伴随关系
一种僵尸的出现,需跟随或依赖其他僵尸,不参与选怪。如伴舞必须在舞王召唤后出现、小鬼必须靠巨人投出、雪橇小队(无尽不出)必须行驶于冰车的冰道。
选怪
选怪的选项共有 33 个,对应 PvZ 各模式所有 33 种僵尸的代号(在无尽中并非每种僵尸都有机会出场)。这些选项对应位于 [[[6a9ec0] +768] +54d4]
开始的连续 33 个 bool 类型的地址。
选怪规则
每次选怪将出现 9 – 11 种僵尸(但由于种间伴随与包含关系,实际种数显然更多)。
选怪需先满足场地特性(见 1.3 和 1.4),这决定了可出怪类型数 m 的值。
普僵必选。
无尽第一次选卡出普僵、路障、铁桶;已完成旗帜数小于 4 时不出白眼 / 冰车;已完成旗帜数小于 10 时不出红眼。
若冒险模式已达到二周目 4 – 10,则无尽可选雪人。
不选旗帜(包含于普僵);不选鸭子(等价于普僵 / 路障 / 铁桶);不选伴舞(伴随舞王);不选小鬼(伴随巨人);
不选雪橇小队;不选僵博;不选植物僵尸。
选怪概率
令可出怪类型数为 m,剩余出怪类型数为 n,则选怪概率满足以下规则:
有 20% 的概率出读报,否则在这个位置出路障(两者中落选的也可能在后续选择剩下种类时被选中)。
除普僵 + 读报 / 路障外剩余出怪类型数为:
$$ \min {完成选卡次数+1, 9 } $$
普僵 / 路障 / 读报 / 其他僵尸出现的概率分别为:
$$ 1、 0.8 + 0.2 \times \dfrac{n}{m}、 0.2 + 0.8 \times \dfrac{n}{m}、\dfrac{n}{m} $$
僵尸类型总数为 9 / 10 / 11 的概率分别为:
$$ \dfrac{n \times (n-1 )}{m \times (m-1)}、\dfrac{n \times (m-n) \times 2}{m \times (m-1)}、 \dfrac{(m-n) \times (m-n-1) }{m \times (m-1)} $$
六大场地的 m 取值依次为 18 / 17 / 20 / 20 / 16 / 16,n 从第九次选卡开始取值为 9,计算可得下表:
普僵 | 路障 | 读报 | 其他 | 9 种 | 10 种 | 11 种 | |
---|---|---|---|---|---|---|---|
DE | 1 | 90.00% | 60.00% | 50.00% | 23.53% | 52.94% | 23.53% |
NE | 1 | 90.59% | 62.35% | 52.94% | 26.47% | 52.94% | 20.59% |
PE | 1 | 89.00% | 56.00% | 45.00% | 18.95% | 52.11% | 28.95% |
FE | 1 | 89.00% | 56.00% | 45.00% | 18.95% | 52.11% | 28.95% |
RE | 1 | 91.25% | 65.00% | 56.25% | 30.00% | 52.50% | 17.50% |
ME | 1 | 91.25% | 65.00% | 56.25% | 30.00% | 52.50% | 17.50% |
随机数生成器算法为 MT19937,种子由以下几个数值相加:
[[[6a9ec0] +82c] +20] // 用户序号
[[[6a9ec0] +768] +561c] // 出怪种子
[[[[6a9ec0] +768] +160] +6c] * 65 // 完成选卡次数 * 101
[[6a9ec0] +7f8] // 游戏模式
——经过满足以上规律的伪随机过程后,本次选卡要出的僵尸类型被依次决定。
慢速关、变速关、快速关
慢速关一般指同时出红眼、白眼的关卡。因每波僵尸总血量较大,激活刷新较慢且下半场不会因红眼消失而变速得名。
快速关一般指无巨人的关卡,每波僵尸总血量较低,在自然输出较高的阵型(如水路顶满构型、边路加速构型等)中刷新极快,加速了对存冰、灰烬、南瓜等的消耗,提高了运阵压力。而极速关尤指铁桶 / 冰车等血量相对较高的僵尸较少而全是高速脆皮僵尸的快速关。
变速关一般指有红眼、无白眼的关卡。从 W11 开始的某一波后,红眼不再出现在普通波(仅 W20 重新出现),每波僵尸总血量下降、刷新阈值降低(刷新变快)。
红眼关的各种概率的参考数值如下(数据来自 植僵百科知识 – 植僵工具箱 ) :
红眼关概率:0.449391
红眼关每波出红概率:
波次 | 概率 | 波次 | 概率 |
---|---|---|---|
1 | 0.975322 | 11 | 0.641114 |
2 | 0.975378 | 12 | 0.489569 |
3 | 0.975634 | 13 | 0.345826 |
4 | 0.975364 | 14 | 0.227808 |
5 | 0.975342 | 15 | 0.139364 |
6 | 0.975313 | 16 | 0.0801017 |
7 | 0.975184 | 17 | 0.0431896 |
8 | 0.97404 | 18 | 0.0219252 |
9 | 0.968664 | 19 | 0.0103585 |
10 | 1 | 20 | 1 |
红眼关自然全红概率:0.00149536
旗帜波平均红眼数:12.9391
非旗帜出红波平均红眼数:3.62818
每轮平均红眼总数:64.95187
出怪列表
出怪列表作为数组
出怪列表决定了选出来的各种僵尸最终的数量与出场顺序。
出怪列表即每次选卡中要出现的每只僵尸组成的列表(相当于数组);每种僵尸对应一个级别和一个权重数据(详见下文),而数组的每一个元素由可出的僵尸种类按权重加权随机后算得。
旗帜波固定先出 1 只旗帜和 8 只普僵;有红眼的关卡,出完 50 只红眼(不是全部出完)后不再继续出红眼(即所谓的“变速关”,变速之后仅旗帜波可以继续出红眼,旗帜波红眼数计入其中但不受变速影响)。
容量上限
出怪列表容量上限为 1000 只,对应位于 [[[6a9ec0] +768] +6b4]
开始的连续 1000 个 int_32 类型的地址。前期实际僵尸数会少于 1000,理论上 125f 后、实际约 42 次选卡(84f)后列表将被填满(数据来自 植僵百科知识 – 植僵工具箱 ),称之为出怪饱和。
出怪列表被划为 20 段,每段数量容量上限为 50(不含伴舞 / 小鬼),分别对应选卡的每一波。僵尸逐波按列表顺序刷出。
每波出怪还受另一条件约束,即:每波僵尸的级别总和不超过该波级别容量上限。
每波级别容量上限满足公式:
$$ 级别容量上限 = int(\dfrac{int ( (当前波数+已完成选卡数 \times 每轮总波数 ) \times 0.8 )}{2} ) +1 $$
大波再乘以 2.5 并取整。
计算后不难得知:前期级别容量不够用,大多数波次处在被填满的状态;后期每波即使满 50 只了级别容量依然有富余,但由于列表区段的限制,50 即为每波实际容量上限。
级别和权重的数值
前文所提到的级别和权重的计算规则和详细数值如下:
权重调整:非大波红眼权重 1000;10f 之后普僵 / 路障每轮 -180 / -150, 50f 之后为 400 / 1000。
设僵尸代号为 i,则每种僵尸的级别对应地址为 [0x0069da88 + i * 0x1c]
,权重对应地址为 [0x0069da94 + i * 0x1c]
。
各种僵尸的代号、级别和权重见下表:
名称 | 代号 | 级别 | 权重 |
---|---|---|---|
普僵 | 0 | 1 | 4000 |
旗帜 | 1 | 1 | 0 |
路障 | 2 | 2 | 4000 |
撑杆 | 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 |
蹦极 | 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 |
刷新规律
选卡与波次
每次选卡(一关 / 2f)共 20 波僵尸,上半场 9 波、下半场 10 波、关底 1 波;W10、W20称为旗帜波 / 大波,其余称为普通波。
刷新倒计时
刷新真空:触发刷新条件后 200 刷新下一波僵尸,这段时间即“刷新真空”;刷新真空是计入本波波长的。
每关开场倒计时:600(第一次选卡为1800);游戏开始后从 599 减至 1 后刷出 W1。
普通波刷新倒计时:2500 + rand(600) ;倒计时减少至 1 或本波僵尸总血量 ≤ 刷新激活血量后,进入刷新真空,之后刷出下一波。
自然上限:普通波波长至少为 601。 即本波刷出至少 401 才可能激活下一波刷新,进入刷新真空。
W9 / W19 刷新时,倒计时从 4500 开始减少。
- 若自然减少至 200 或本波刷出至少 401 时将本波僵尸(除伴舞)全部消灭,则进入一段时长同样为 200 的“伪刷新真空”。
- 这个 4500 的倒计时减少至 5 时显示红字,此时倒计时被另一地址接管,它从 750 开始减少。25cs 后最初的倒计时变为 4 并停止,新的倒计时从 725 减少至 0 后刷出旗帜波。即:W9 / W19 激活伪刷新真空后最多能拖 945,W9 / W19 收尾理论最多能拖 4300 + 945 = 5245。
- 视觉红字约在刷出前 85 消失。
W20 刷新时,倒计时从 5500 开始减少。
- 若自然减少至 0 或本波刷出后僵尸全部被消灭,则立即激活白字(不受伪自然上限约束)。
- 白字显示 500 后结束本次选卡,并将倒计时重置为 600。
刷新激活血量和僵尸血量计算方式
刷新激活血量为本波总血量的 0.50 – 0.65 倍。若本波僵尸总血量小于此值且刷出至少 401,则立即激活刷新,进入刷新真空。
本波僵尸总血量计算方式为:
$$ 本体血量 + I类饰品血量 + 0.20 \times II类饰品血量 $$
其中本体不包括:魅惑状态 / 已不存在 / 消失状态 / 变黑状态 / 秒杀状态 / 蹦极类型的僵尸;I 类饰品包括: 路障 / 铁桶 / 橄榄球帽 / 雪橇车 / 气球 / 矿工帽 / 僵尸坚果 / 僵尸高坚果;II 类饰品包括:报纸 / 铁栅门 / 扶梯。
与刷新相关的内存地址
6A9EC0
├┬768
│├―5564 // 本轮总波数
│├―5568 // 游戏时钟
│├―556C // 游戏时钟(包括选卡时)
│├―557C // 已刷新波数
│├―5594 // 刷新触发血量
│├―5598 // 本波总血量
│├―559C // 刷新倒计时
│├―55A0 // 刷新倒计时初始值
│├―55A4 // 旗帜波刷新倒计时
发表回复
要发表评论,您必须先登录。