是否自动将快捷文本同步至最新版本?是 否
本条目部分或全部内容搬运自外部资源。
遵守CC BY-SA 4.0协议,部分内容可能有所改动。
以下内容涉及较多精确数据,除非确信某处有误,否则请谨慎修改。
精确数据
本条目收录了由高精度测量或反汇编得到的精确游戏内时间、空间数据,包括但不限于植物、僵尸、子弹、场地等的机制与特性。
基础说明
数据体系
本条目使用PVZ圈最常用的数据体系,即:
- 植物/僵尸坐标:以游戏内存值为准,单位px
- 坐标轴原点为1-1格左上角,↓→为正方向
- 判定:以游戏内调试模式为准
- 坐标轴原点为可视区左上角1),↓→为正方向
- 时间:以游戏最小时间单位,单位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)
均以此法取整,因此相应的圆不是一般画图软件出来的圆,判定圆图形如右。
以僵尸为例,可从内存中读取下列判定相关信息:
内存地址2) | 意义 |
---|---|
[+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 3) | ||
玉米加农炮 | 圆心为爆炸中心(见下文),半径115 |
命中范围
紫色竖线及右侧是触发区域,豌豆类的红色区域是必定击中范围,黄色区域是可能击中范围(越左击中可能越小),三线射手对三行的击中范围相同,仙人掌的黄色区域是飞行气球的击中范围。4)
紫色竖线是触发范围边界,红色竖线是击中范围边界,大喷菇的击中范围是触发范围左右各缩1。 如果小喷菇和海蘑菇的横坐标有偏移,触发范围和击中范围也会随着偏移。
玉米投手左侧的黄色区域表示黄油能击中、玉米粒不能击中。
投掷类子弹
子弹初始速度
投手植物在发出子弹时,再查找范围内最近的僵尸,来确定子弹的初始速度,飞行路径在发出时就确定了。5)
- 水平方向初始速度:
( 僵尸防御左边界横坐标 - 9 - 僵尸速度参数6) * 50 - 子弹初始横坐标 ) / 120
- 竖直方向初始速度:
-7 + ( 僵尸防御上边界纵坐标 - 子弹初始纵坐标 ) / 120
其中,僵尸边界坐标只取整数部分,僵尸的“速度参数”是僵尸内存[+34]
数据。如果僵尸被寒冰菇冻结或者被黄油定身,计算时去掉“速度参数”部分。如果僵尸只是被减速或者在啃食,计算方法不变。
如果子弹发出时,范围内没有僵尸:
- 水平初速 =
( 705 - 子弹初始横坐标 ) / 120
- 竖直初速 =
-7
水平初速下限是1/3
,如果水平初速的计算结果小于1/3
,水平初速设为1/3
。
在平地场合,投手子弹的纵坐标不变,竖直速度影响的是高度,高度向上为负,向下为正。
高度>-30时
,有僵尸就击中;如果没有僵尸,高度>80
时拍地。
飞行用时
防御判定
攻击种类 | 植物种类 | 判定范围 |
---|---|---|
啃碾砸 | 普通植物 | x+30~+50 |
高坚果 | x+30~+70 |
|
南瓜 | x+20~+80 |
|
玉米加农炮(炮尾) | x+20~+120 |
|
玉米加农炮(炮头) | x-60~+40 |
|
小丑爆炸 | 所有 | x左右各伸20, y=0~+80 |
攻击机制
晃动间隔
不同植物晃动时间不同,同一个植物晃动时间固定,状态改变可能会改变晃动时间。晃动时间指完成整个动作的时间,例如从最左到最右再到最左7)。
以下是晃动时间统计(单位:秒),数字中小数部分有四五位的是循环小数。
植物 | 最小晃动间隔 | 最大晃动间隔 | 备注 |
---|---|---|---|
豌豆射手、寒冰射手、双发射手、三线射手 裂荚射手、金盏花、机枪射手 | 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.28) | 睡觉时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.39) | 转一圈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 |
眨眼间隔
植物 | 眨眼间隔10) |
---|---|
坚果、高坚果、爆炸坚果、巨大坚果 | 1000~1999 |
其余会眨眼植物 | 400~799 |
植物详解
磁力菇
- 正常情况下,磁力菇作用范围为半径270像素,但是对于正在啃食的僵尸,作用范围半径会增大到320像素11)
玉米加农炮
- “准星”即红叉的中心,单位为整数像素,除以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
- 闪烁亮度由游戏计时除以75的余数决定,余数是0和1时最亮,余数是38时最暗12)
僵尸概览
坐标
攻防判定
濒死减血
- 如果僵尸本体血量上限小于500,每cs有20%概率减少1点血量,每秒大约减少2016)
- 如果僵尸本体血量上限大于等于500,每cs有60%概率减少1点血量,每秒大约减少60
僵尸详解
僵尸水族馆中的潜水僵尸
迷你游戏的“僵尸水族馆”关卡中,潜水僵尸初始生命值是200,生命值每秒减10,生命值一定是10的整数倍。17)
生命值小于100(小于等于90)颜色变化(饥饿状态),生命值小于等于100时可以吃脑子,吃脑子后生命值增加200,生命值最多是300。
子弹
植僵互动
蹦极偷曾概率
基础数据
基础数据:忧郁菇攻击间隔186cs~200cs,15种情况概率相等,第一发击中延迟74cs,二三四发击中间隔28cs,蹦极僵尸停留300cs,抓取63cs。18)
实测现象:
- 忧郁菇触发与蹦极僵尸落下在同一厘秒,忧郁菇不触发
- 忧郁菇击中与蹦极僵尸开始抓取在同一厘秒,击中有效
- 没被抓的忧郁菇击中与蹦极僵尸离开在同一厘秒,击中有效
寒冰菇对蹦极僵尸的作用:
- 下落状态,不受冰冻,只有减速状态,没有减速效果
- 停留状态,受冰冻,有减速状态,没有减速效果
- 抓取状态,不受冰冻,如果全程减速,抓取持续1.25秒
计算忧郁菇击中次数概率:
仅一个蹦极僵尸的情况
- 没曾被抓,3曾被偷99.8%,4曾被偷77.6%,5曾被偷15%,6曾不被偷;
- 有曾被抓,3曾必被偷,4曾被偷89.9%,5曾被偷27.7%,6曾被偷0.38%。
这只是一个蹦极僵尸的情况,如果有多个蹦极僵尸,以上击中次数概率不适用。
蹦极僵尸初始高度3000~3150,每厘秒减8,减到0时落下。例如初始高度3001,第375cs高度1,第376cs减到0。蹦极僵尸下落用时3.75~3.94秒,先落下的蹦极僵尸可能先触发忧郁菇,先抓取。
双曾冰杀且被抓一曾时的被偷概率
最极限的情况,触发与落地同时,忧郁菇三次触发都间隔2.00秒,寒冰菇冰冻4.00秒。
蹦极在7.00s抓取,忧郁菇第10次击中应该在7.02s,只击中9次。
除了最极限的情况,蹦极僵尸迟0.01s落地,忧郁菇某次触发间隔1.99s,寒冰菇冰冻4.01秒,这5种情况忧郁菇也击中9次,总共6种情况。
没有被抓的忧郁菇最少击中12次,加上寒冰菇的一次伤害,总共22次,没打死蹦极僵尸。
没被抓的忧郁菇击中12次的概率,冰冻4.00秒10.3%、冰冻4.01秒9.8%。
假设寒冰菇冰冻4~6秒均匀分布,冰冻4.00秒概率是1/201,被偷概率
1/200 * 1/15 * 1/15 * 1/15 * 1/201 * 0.103 + 1/200 * 1/15 * 1/15 * 1/15 * 1/201 * 0.103 + 1/199 * 1/15 * 1/15 * 1/15 * 1/201 * 0.103 + 1/200 * 1/15 * 1/15 * 1/15 * 1/201 * 0.103 + 1/200 * 1/15 * 1/15 * 1/15 * 1/201 * 0.103 + 1/200 * 1/15 * 1/15 * 1/15 * 1/201 * 0.098
结果大约十亿分之4.5,小到可以忽略不计。
2列曾的小鬼盲点
仅在2列设曾且不给南瓜搭梯,则会出现如右图所示的小鬼盲点。19)
图中,绿色矩形是小鬼的防御范围,黄色竖线是触发区域边界,红色竖线是击中区域边界,小鬼盲点有3像素,其中左边1像素能构建永动曾。
另外有15像素区域,小鬼在冰瓜的击中范围,但不在冰瓜的触发范围。在这15像素内,冰瓜右侧有僵尸触发冰瓜,冰瓜才能击中小鬼。
评论
建议补充说明一下火树豌豆bug()