植物大战僵尸吧 关注:561,200贴子:5,089,773
  • 20回复贴,共1

一些时空数据的验证、更正与补充

只看楼主收藏回复

主要是研究了一下豌豆过火炬的问题,同时验证了一些攻击植物的触发问题。


IP属地:广东1楼2024-06-14 09:55回复
    前置知识:单发、寒冰、双发、裂荚右子弹x偏移(右为正方向)为+21~+31,三线为+5,机枪为+31~+41,裂荚左为-67~-57,砸罐子里的反向双发为-60~-50。有波动是因为豌豆家族会摇头晃脑,为了方便,测试用了ize模式中不晃动的纸板样式,头靠左,所以偏移取小值,反向双发因为翻转,取大的-50。
    豌豆(包括左向)击中范围为-15~+40;火豆(包括左向)为0~+30,溅射为0~+100。
    本人习惯用转换前的坐标判定,一些数据相比PVZ Wiki给的转换后的数据有40的出入,这是正常现象,不影响计算判断。


    IP属地:广东2楼2024-06-14 09:56
    回复
      2025-06-13 20:14:04
      广告
      首先是一个勘误。PVZ Wiki 给的裂荚射手向左和反向双发的触发判定经验证是正确的,但给的杨桃向左触发判定是有问题的。估计当时给这个数据的人认为还是按僵尸防御域左界判定,而且只用领带僵尸测试,用防御域不同的僵尸测试一下就会发现数据对不上。实际上杨桃的左向触发与前两个不同,是判定僵尸防御域右界,按照Wiki的内存系应更正为x+40(其实就是同行僵尸整个防御域都在杨桃坐标的左侧才会触发杨桃左向攻击),为区分建议最好把哪个判定左界哪个判定右界也注明一下。


      IP属地:广东3楼2024-06-14 09:56
      回复
        接下来是豌豆过火炬的判定问题,先把结论讲了。对右向非三线豌豆,过火线在-20(以火炬坐标为原点,内存系为+20),右向同行三线豌豆过火线在-22,豌豆在-40(击中范围右界)-20=-60(三线为-62)处为临界过火点,豌豆到此点前若没有击中僵尸,到此点则删除,然后由火炬的-20点射出对应火豆,相当于瞬移了40(三线为42)。对于三线的上下旁路豌豆要分类讨论,火炬在三线以右时过火线在火炬+18处(内存系+58),到此点前都为普通豌豆,同列火炬情况见楼下。对左向豌豆,过火线在火炬+30处(内存系+70),也没有瞬移过程。


        IP属地:广东4楼2024-06-14 09:57
        收起回复
          一切游戏现象最后都要到数据中找答案。大家比较关心的可能就是卡火炬的bug原理。卡火炬简单来说就是豌豆在打到僵尸前被判定过火,而过火后打不到脸上的僵尸。看了上一楼的内容有人应该会认为是那段删除的瞬移导致的。瞬移确实很重要,但仔细想就会发现只是瞬移并没有bug——要卡火炬僵尸的防御域左界应当在过火线右,否则会在过火前就被打,但火豆就是从过火线射出来的,必定打到僵尸,整个设计是符合逻辑的。问题出现在一个先后顺序:当一个非三线豌豆挨着火炬,两者距离为80(即列距),21(子弹偏移)+40(瞬移)+20(过火线)=81>80,所以子弹刚刚射出就被判定过火,且这一判定优先于对僵尸的伤害判定(这才是重点),然后就瞬移到-20处,这时僵尸的防御域右界只要小于-20即可实现卡火炬,对领带、撑杆僵尸就是小于-20-38(防御域右界)=-58,需要注意的是寒冰,过火后变的是豌豆而不是火豆,所以-58还要-15(豌豆击中左界)=-73。像iz中卡火炬的一般是撑杆,撑杆跳火炬落于-70,-73<-70<-58,所以刚落地的撑杆理论上卡不了寒冰的火炬,但因为撑杆攻击域靠右问题会继续前进,所以要观察这一现象需要给寒冰套南瓜防止撑杆前进,而其他的非三线豌豆即使套了南瓜也会被卡。偷挨着火炬的豌豆的蹦极也可以观察到类似现象:蹦极落于-80,50(蹦极防御域右界)+20(过火线)=70<80,但70+15=85>80,所以也是卡不了寒冰火炬但可以卡其他非三线豌豆的。至于三线为什么不会被卡火炬,5(子弹偏移)+40+20=65<80,挨一起也卡不了,因为三线子弹射出来并不会被直接判定过火,所以对三线而言,僵尸在过火线前受过火前豌豆攻击,在过火线后受过火后豌豆攻击的逻辑是成立的(除非开修改器将三线与火炬的距离改到比65小的64,正常是无法实现的)。


          IP属地:广东5楼2024-06-14 09:57
          回复
            右向的判定顺序是固定的,豌豆在既可以伤害僵尸又可以过火时一定会优先过火,但左向豌豆过火稍微复杂一些,哪个优先要看火炬与豌豆的栈位:火炬栈位高先判定过火,豌豆高则先伤害僵尸。左向过火没有瞬移,但是当火炬栈位高时也有类似卡火炬的效果,因为豌豆和火豆的击中范围并不一致,具体就是少了40-30=10。没有火炬裂荚左向的击中范围是小于-26(-67+40=-27,以裂荚坐标为原点),反向双发是小于-9(-50+40=-10);有内鬼火炬则变为-36和-19。借助放置帧火炬加裂荚也可以有些应用,放在裂荚上的僵尸位于-30,-36<-30-4(领带、小鬼等防御域左界)<-26,所以图中上面的小鬼会被打死,下面刷到火炬高栈位即可通过。


            IP属地:广东6楼2024-06-14 09:59
            回复
              三线旁路子弹过右列火的情况上面已讲且不受栈位影响,这楼讲的过同列火也会受栈位影响。首先过同列火,豌豆也会遇到攻击僵尸和过火都在判定内的情况(用修改器测得同列过火线为+20,子弹生成在+5,还有+40的击中范围,符合刚发出就判定过火),优先级受栈位影响,火栈位高先过火,三线栈位高先攻击僵尸,又因为豌豆和火豆的击中范围不同,所以火栈位高时,-5~+5段的攻击范围将丢失,不过同时+5~+45段的伤害将由普通豌豆变成火豆。
              这里有个神奇的事情,对比三线同行豌豆的过火线-22与其他右向豌豆的-20,三线旁路豌豆右列火的+18与过同列火的+20,不难发现三线豌豆在距离火有一定距离时(可以认为是大于子弹刚生成就判定过火的距离)会早2px判定过火,这不是误差,就是可以实实在在测出来的。


              IP属地:广东7楼2024-06-14 10:00
              收起回复
                最后是一个可能因为设计者的疏忽造成的bug。仔细看了前置知识的人会发现左向豌豆的击中范围并不会因为反向而翻转。普通豌豆倒还好,多走的25px也就不到8cs的事。但火豆溅射范围也不翻转就有点逆天了,还是0~+100,但左向打有个右向的溅射有什么用啊()实际测试左向火豆有效的左向溅射范围大概也就2px,当然除非你喜欢玩这种阵,不然也没什么影响。()


                IP属地:广东8楼2024-06-14 10:01
                回复
                  2025-06-13 20:08:04
                  广告
                  有没有关于子弹高度的数据?


                  IP属地:澳大利亚9楼2024-06-14 14:55
                  收起回复
                    楼中楼不宜过长,这里专开一层补充一下7楼。
                    火炬栈位高增加的普通豌豆变成火豆的伤害翻倍段理论上比40长,应该是40+x,x为僵尸防御域宽。不过实际情况要把这么长的伤害翻倍段发挥出来不仅需要栈位正确,还需要火炬南瓜搭梯,同时还要有其他僵尸触发三线使其永动(不然索不了那么靠左的敌)。总之这就是个没啥实际用途只有理论研究价值的数据()


                    IP属地:广东来自Android客户端11楼2024-06-16 08:20
                    回复


                      IP属地:新疆来自Android客户端12楼2024-06-16 10:57
                      回复
                        em其实lz可以直接取编辑一下wiki的词条。。


                        IP属地:美国13楼2024-06-17 13:55
                        收起回复
                          大佬有没有显示子弹坐标的修改器? 有的话最好发个链接


                          IP属地:澳大利亚14楼2024-06-17 18:28
                          收起回复
                            之前相信了“豌豆过火删除导致有间隙”的坊间说法,加之没有好的工具,所以很武断地下了“瞬移”的错误结论事实证明有些东西真的要亲测,不过也好,顺便打假一下这个谣言。所谓“间隙”不是这个原因,我不知道代码上是怎么实现的,右向豌豆(冰豆)从距离火炬小于56px到过火这一段大约11cs的路程将不会伤害僵尸,所以从子弹运动来看没有什么间隙,只不过有一个无伤段,而除了子弹生成靠后的三线,其他豌豆如果挨着火炬,子弹射出来就是小于56px的(80-21-3.33=55.67),所以会被“卡火炬”,理论上即使不挨着火炬的豌豆只要在其子弹距离小于56px时一个僵尸出现在火炬后合适的位置也可以出现一次卡火炬的现象(条件苛刻且无用)。
                            除此之外上面的一些说法也有问题,主要是没考虑到子弹是3.33px/cs的一个类似量子化的运动形式,所以所谓“过火线”也不应该是一个数,应该是一个范围,要根据具体的子弹初始坐标分析。所以三线过火的2px差异也可以解释,机枪子弹虽然有10px的前移,但10≈3*3.33,所以没有体现;三线子弹后移16px,4*3.33=13.32,余下的向下取整为2px。


                            IP属地:广东来自Android客户端15楼2024-07-25 19:02
                            回复