是否自动将快捷文本同步至最新版本?是 否
本条目部分或全部内容搬运自外部资源。
遵守CC BY-SA 4.0协议,部分内容可能有所改动。
本条目的部分内容不一定真实或已经过期,仍有待核查。
以下内容涉及较多精确数据,除非确信某处有误,否则请谨慎修改。
精确数据
本条目收录了由高精度测量或反汇编得到的精确游戏内时间、空间数据,包括但不限于植物、僵尸、子弹、场地等的机制与特性。
基础说明
数据体系
本条目使用PVZ圈最常用的数据体系,即:
- 植物/僵尸坐标:以游戏内存值为准,单位px
- 坐标轴原点为1-1格左上角,↓→为正方向
- 判定:以游戏内调试模式为准
- 坐标轴原点为可视区左上角2),↓→为正方向
- 时间:以游戏最小时间单位,单位cs
基准参考
- 战场可见区左端为
x=-40
,上端为y=-80
- 前院1-1豌豆射手
x=40, y=80
- 前院1路进家普僵
x=-100, y=50
判定计算
内存值中存在16位浮点数,但几乎所有判定计算时都会向零取整(即抹去小数部分)。圆的判定是(Δx)^2+(Δy)^2<=R^2
,其中(Δx)
、(Δy)
均以此法取整,因此相应的圆不是一般画图软件出来的圆,判定圆图形如右。
以僵尸为例,可从内存中读取下列判定相关信息:
内存地址3) | 意义 |
---|---|
[+8C]=36 | 防御范围横向偏移 |
[+90]=0 | 防御范围纵向偏移 |
[+94]=42 | 防御范围横向宽度 |
[+98]=115 | 防御范围纵向高度 |
[+9C]=20 | 攻击范围横向偏移 |
[+A0]=0 | 攻击范围纵向偏移 |
[+A4]=50 | 攻击范围横向宽度 |
[+A8]=115 | 攻击范围纵向高度 |
左行僵尸的判定范围:
- 左边界=横坐标+横向偏移,右边界=左边界+横向宽度
- 上边界=纵坐标+纵向偏移,下边界=上边界+纵向高度
右行僵尸的判定范围:
- 右边界=横坐标+120-横向偏移
- 左边界=右边界-横向宽度
例如,x=650,y=135
的普通僵尸,防御范围x:686~728,y:135~250
,攻击范围x:670~720
。
场地
场景边界
- 伤害区 -50 ~ 800
- 触车 -20 ~ 28
- 警戒区 0 ~ 800
- 屋外区 -21 ~ +
植僵坐标
场合 | 行号 | 僵尸y | 植物y |
---|---|---|---|
前院 | 1 | 50 | 80 |
2 | 150 | 180 | |
3 | 250 | 280 | |
4 | 350 | 380 | |
5 | 450 | 480 | |
后院 | 1 | 50 | 80 |
2 | 135 | 165 | |
3 | 220 | 250 | |
4 | 305 | 335 | |
5 | 390 | 420 | |
6 | 475 | 505 | |
屋顶 | 1 | 40 | 见下 |
2 | 125 | ||
3 | 210 | ||
4 | 295 | ||
5 | 380 |
屋顶植物:
(x,y) | 1(列) | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
1(行) | 40,170 | 120,150 | 200,130 | 280,110 | 360,90 | 440,70 | 520,70 | 600,70 | 680,70 |
2 | 40,255 | 120,235 | 200,215 | 280,195 | 360,175 | 440,155 | 520,155 | 600,155 | 680,155 |
3 | 40,340 | 120,320 | 200,300 | 280,280 | 360,260 | 440,240 | 520,240 | 600,240 | 680,240 |
4 | 40,425 | 120,405 | 200,385 | 280,365 | 360,345 | 440,325 | 520,325 | 600,325 | 680,325 |
5 | 40,510 | 120,490 | 200,470 | 280,450 | 360,430 | 440,410 | 520,410 | 600,410 | 680,410 |
地形图
注:
- 两种线有重合时,重合段用两者颜色相间的线表示
- 白线为坐标轴,x轴向右为正,y轴向下为正
- 紫色和暗品红色为各控制格的边框
- 绿线为可见区的边界
- 右红线为伤害区和警戒区的右界——若僵尸防御域都在其右方则无敌且不被当作目标
- 蓝线为警戒区的左界——若僵尸防御域都在其左方则不被当作目标
- 黄竖线为碰车区的边界
- 左红线为屋外区的左界——若僵尸防御域都在其左方则其进屋
- 黄横线或斜线为僵尸基准轨迹,没有纵向偏移且正常前进的僵尸坐标在其上
- 绿十字为植物基准点,通常植物坐标在那些位置
植物概览
坐标
植物 | x偏移 | y偏移 |
---|---|---|
小喷菇/海蘑菇 | -5~+4 | -3~+2 |
阳光菇 | -5~+4 | -5~+4 |
攻击判定
伸与缩
伸:指“延伸”,例如“左伸X”代表左限向左延伸X。缩:指“收缩”,例如“右缩X”代表右限向左收缩X。
植物 | 触发 | 触发特判 | 命中 | 命中特判 |
---|---|---|---|---|
樱桃炸弹 | 圆心(x+40,y+40) ,半径115 | |||
土豆地雷 | x~+55 | 对正在啃的左右各伸30 对跳后撑杆 左缩40*(1+N) ,N为比该撑杆编号小的跳后撑杆数 | 圆心(x+20,y+40) ,半径60 | |
大嘴花 | x+80~+120 | 对正在啃的左右各伸60 对反向矿 左缩20 | 范围内编号最小的僵尸 | |
窝瓜 | x+20~+135 | 对正在啃的右伸40 对跳后撑杆、海豚、橄榄、小鬼 左伸60 对反向矿、雪人 左伸70 ,正在啃再左伸40 窝瓜x-118≤奔跑撑杆x≤窝瓜x-17 时触发窝瓜 | 压区跨度43 | 对橄榄左右各伸20 |
缠绕海草 | x~+80 | 范围内编号最小的僵尸 | ||
普通植物向右 | x+60 | (取整后)坐标相同取小编号,否则取左坐标 | ||
裂荚射手向左 | x+16 | |||
杨桃向左 | x-3 | |||
反向双发 | x | |||
小喷菇 | x+60~+290 | x+40~+323 | ||
海蘑菇 | 同上 | x+45~+328 | ||
大喷菇 | x+60~+400 | x+61~+399 | ||
忧郁蘑菇 | x-80~+160 | x-79~+159 | ||
地刺(王) | x+20~+50 | x+21~+49 | ||
胆小菇害怕 | 圆心(x,y+20) ,半径120 | |||
磁力菇 | 圆心(x,y+20) ,半径270 | 对正在啃食的半径320 6) | ||
玉米加农炮 | 圆心为爆炸中心(见下文),半径115 |
命中范围
紫色竖线及右侧是触发区域,豌豆类的红色区域是必定击中范围,黄色区域是可能击中范围(越左击中可能越小),三线射手对三行的击中范围相同,仙人掌的黄色区域是飞行气球的击中范围。7)
紫色竖线是触发范围边界,红色竖线是击中范围边界,大喷菇的击中范围是触发范围左右各缩1。 如果小喷菇和海蘑菇的横坐标有偏移,触发范围和击中范围也会随着偏移。
玉米投手左侧的黄色区域表示黄油能击中、玉米粒不能击中。
防御判定
攻击种类 | 植物种类 | 判定范围 |
---|---|---|
啃碾砸 | 普通植物 | x+30~+50 |
高坚果 | x+30~+70 |
|
南瓜 | x+20~+80 |
|
玉米加农炮(炮尾) | x+20~+120 |
|
玉米加农炮(炮头) | x-60~+40 |
|
小丑爆炸 | 所有 | x左右各伸20, y=0~+80 |
攻击机制
晃动间隔
不同植物晃动时间不同,同一个植物晃动时间固定,状态改变可能会改变晃动时间。晃动时间指完成整个动作的时间,例如从最左到最右再到最左8)。
以下是晃动时间统计(单位:秒),数字中小数部分有四五位的是循环小数。
植物 | 最小晃动间隔 | 最大晃动间隔 | 备注 |
---|---|---|---|
豌豆射手、寒冰射手、双发射手、三线射手 裂荚射手、金盏花、机枪射手 | 1.25 | 1.6667 | |
向日葵、毁灭菇、双子向日葵 | 1.6667 | 2.5 | |
樱桃炸弹 | 0.9333 | 1.4 | |
坚果、高坚果 | 1.13333 | 1.7 | 被啃后重置 |
土豆地雷 | 0.73333 | 0.91667 | |
大嘴花 | 1.6667 | 2.5 | 消化中晃动1.06667;吞后固定2.08333 |
小喷菇、大喷菇、杨桃 | 1.1333 | 1.7 | 攻击后固定1.41667 |
阳光菇 | 0.8 | 1.29) | 睡觉时0.66667~1;长大后重置为0.8~1 |
墓碑吞噬者(一阶段) | 不晃动 | 吞噬共两个阶段,一阶段持续0.47~0.70 | |
墓碑吞噬者(二阶段) | 2.3333 | 2.3333 | 吞噬分两个阶段,二阶段持续4 |
魅惑菇、路灯花 | 1.3333 | 2 | |
胆小菇 | 1.0667 | 1.6 | 攻击后固定1.3333秒;害怕时1.1秒;僵尸离开再重置为1.0667~1.6 |
寒冰菇 | 1.13333 | 1.7 | |
荷叶 | 不晃动 | 随水面浮动,水面浮动周期2 | |
窝瓜 | 1.2667 | 1.9 | |
缠绕海草 | 1.4667 | 2.2 | |
火爆辣椒 | 0.86667 | 1.3 | |
地刺 | 1.4 | 2.1 | 攻击后重置 |
火炬树桩、南瓜 | 1.4 | 2.1 | |
海蘑菇 | 1.6667 | 2.5 | 攻击后固定2.08333 |
仙人掌 | 1 | 1.5 | 攻击后固定1.25 |
三叶草 | 3.3 | 3.310) | 转一圈0.5 |
磁力菇 | 1.9333 | 2.9 | 睡觉时1.2~1.8;吸附铁器后重置 |
卷心菜投手、西瓜投手、冰瓜 | 2.0667 | 3.1 | 攻击后固定2.58333 |
花盆 | 0.86667 | 1.3 | 上面种植植物后不晃动;植物消失后重置 |
玉米投手、忧郁菇、香蒲 | 1.2667 | 1.9 | 攻击后固定1.58333 |
咖啡豆 | 0.6 | 0.9 | |
大蒜 | 1 | 1.5 | |
叶子保护伞 | 1 | 1.5 | 弹起后固定0.6818 |
吸金磁 | 3.1333 | 4.7 | 吸附钱币后固定3.35714 |
地刺王 | 1 | 1.5 | 攻击或被砸被碾后重置 |
玉米加农炮 | 1.2667 | 1.9 | 炮弹装填完成后固定1.58333 |
眨眼间隔
植物 | 眨眼间隔11) |
---|---|
坚果、高坚果、爆炸坚果、巨大坚果 | 1000~1999 |
其余会眨眼植物 | 400~799 |
植物详解
磁力菇
- 正常情况下,磁力菇作用范围为半径270像素,但是对于正在啃食的僵尸,作用范围半径会增大到320像素13)
玉米加农炮
- “准星”即红叉的中心,单位为整数像素,除以80后得到列数
- 例如
准星x=721
的炮,等价于炸9.0125列
的炮,等价于AvZ::pao_operator.pao(x, 9.0125)
- 爆炸中心”即实际爆炸的圆心
- 非天台场景
爆炸中心x=准星x-7, 爆炸中心y=准星同行植物y+40
- 对于r行c列的梯子南瓜,梯子被炮炸飞的条件是
r-1≤准星行数≤r+1
,且80*c-113≤准星x≤80*c+126
僵尸概览
坐标
攻防判定
濒死减血
- 如果僵尸本体血量上限小于500,每cs有20%概率减少1点血量,每秒大约减少20
- 如果僵尸本体血量上限大于等于500,每cs有60%概率减少1点血量,每秒大约减少60
僵尸详解
僵尸水族馆中的潜水僵尸
迷你游戏的“僵尸水族馆”关卡中,潜水僵尸初始生命值是200,生命值每秒减10,生命值一定是10的整数倍。19)
生命值小于100(小于等于90)颜色变化(饥饿状态),生命值小于等于100时可以吃脑子,吃脑子后生命值增加200,生命值最多是300。
植僵互动
2列曾的小鬼盲点
仅在2列设曾且不给南瓜搭梯,则会出现如右图所示的小鬼盲点。20)
图中,绿色矩形是小鬼的防御范围,黄色竖线是触发区域边界,红色竖线是击中区域边界,小鬼盲点有3像素,其中左边1像素能构建永动曾。
另外有15像素区域,小鬼在冰瓜的击中范围,但不在冰瓜的触发范围。在这15像素内,冰瓜右侧有僵尸触发冰瓜,冰瓜才能击中小鬼。
出怪规律
出怪类型
出怪类型指本次选卡准许生成的僵尸种类。
准许
即使准许生成某僵尸,也不代表该僵尸一定会出现。例如,即便出怪类型中含有蹦极僵尸,也可能不生成蹦极,取决于生成时的随机结果。另有一部分僵尸无需准许亦能生成,如固定出现的旗帜僵尸、小概率随机出现的雪人僵尸。
出怪类型位于[[[6a9ec0]+768]+54d4]
开始的连续33个bool
类型的地址,true
代表准许,false
代表不准许。
出怪类型的决定方式如下22):
- 设定要出普僵
- 产生一个0~4的伪随机整数(后文详解),若等于0则设定要出读报,否则设定要出路障23)
- 若
轮数24)<8
,则设定剩余出怪类型数为轮数+1
,否则设定剩余出怪类型数为9 - 产生一个0~33的伪随机整数,若未设定要出此类僵尸且没有禁止出此类僵尸25),则设定要出此类僵尸并进入第5步,否则重复第4步
- 若第4步中已设定要出的僵尸类型数等于第3步的剩余出怪类型数,则进入第6步,否则重复第4步
- 忽略摇旗、僵博,即强制设为
false
26)
轮数
轮数即选卡时已完成flag数/2-1
。
随机数生成器算法为MT19937,种子由以下几个数值相加:
[[[6a9ec0] +82c] +20] // 用户序号 [[[6a9ec0] +768] +561c] // 出怪种子 [[[[6a9ec0] +768] +160] +6c] * 65 // 完成选卡次数 * 101 [[6a9ec0] +7f8] // [[教程:名词大全#序号-2|游戏模式]]
出怪概率
以下表格列出了不同轮数下,各僵尸出现在出怪类型中的概率,以及出怪类型中僵尸总数27)各取值的概率。28)
轮数=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。
出怪列表
出怪列表决定了实际生成的僵尸的具体种类与个数,在选卡页面就已经确定。退出重进选卡页面会刷新出怪列表。
完整的出怪列表长度200029),位于[[[6a9ec0]+768]+6b4]
开始的连续2000个int_32类型的地址,每50个为1波,总共记录40波。因此,每波至多生成50只僵尸。若出怪列表中留空,则对应波次会生成少于50只。
生存无尽模式中每轮仅20波,故只使用前1000个值。老虎机、宝石迷阵等无限出怪的模式中,第41波起会重复循环第40波的出怪。
每波僵尸刷新时,游戏会严格按照出怪列表预先设定的顺序依次生成对应僵尸。
生存无尽中,出怪列表根据以下规律随机生成:
- 旗帜波30)固定先出8只普僵和1只旗帜
- 出完50只红眼后,非旗帜波不再出红眼,立刻生效
- “50只”包含先前旗帜波次的红眼
- 该规律也被称作“变速”
- 每波所出僵尸的级别总和不超过该波级别上限
- 满足以上条件的情况下,从出怪类型准许生成的僵尸以及雪人中,根据各僵尸权重加权随机得到要生成的僵尸
级别上限
每波级别上限 =int(int((当前波数 + 已完成选卡数 * 每轮总波数) * 0.8) / 2) + 1
,旗帜波再* 2.5
并向零取整。
各僵尸级别与权重一览
序号 | 简称 | 级别 | 权重 | 备注 |
---|---|---|---|---|
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 | 无需出怪类型准许亦可生成,需已在冒险二周目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 |
时间体系
轮数<2
时的冰车/白眼、轮数<5
时的红眼
评论
建议补充说明一下火树豌豆bug()