植物大战僵尸吧 关注:563,263贴子:5,100,607

【火星向】分析冒险6-49为什么有豌豆射手僵尸

只看楼主收藏回复

一楼喂度,求此贴不被吞


IP属地:北京1楼2019-05-17 20:41回复
    前言:本贴中结论均是通过反汇编读Mac版PvZ的代码得到,对Windows版也适用,但其他版本中不保证正确
    分析可能有误,欢迎指出


    IP属地:北京2楼2019-05-17 20:42
    回复
      2025-07-20 01:02:07
      广告
      如果用修改器跳到冒险模式6-49(即冒险第99关),会发现出怪中有豌豆射手僵尸,而其他关却没有。接下来分析原因。


      IP属地:北京3楼2019-05-17 20:43
      回复
        首先,PvZ每一关的出怪分以下两步完成:
        (1)根据当前关卡(EL中还有选卡次数和出怪种子)确定出怪种类;
        (2)确定总波数,并根据出怪种类填充每一波的出怪列表。
        而查看游戏内存可以发现,冒险6-49中的出怪种类中并不包含豌豆射手僵尸,因此问题必定出在第(2)步中。


        IP属地:北京4楼2019-05-17 20:43
        回复
          众所周知,冒险模式中除x-5和x-10外每两关出一种新僵尸,且每种僵尸首次出现时数量较少,但至少出现两只(一周目通常是第一旗后和关末)。
          游戏中所有33种僵尸均有一个地址存放其相关属性,其中包含这种僵尸在冒险中首次出现的关卡(Windows英文1.0版中为[0x69DA8C]+i*0x1C,i为僵尸编号)。
          查看填充出怪列表的函数可以发现,游戏首先会寻找编号最小的首次在这一关卡出现的僵尸(找不到则返回-1),这里称其为“特殊僵尸”。
          填充列表时,如果当前所在波为总波数的一半加一(若“特殊僵尸”为矿工或气球则为第7波)或者最后一波,就会将一只“特殊僵尸”添加入列表。问题在于,此时游戏并没有检查“特殊僵尸”是否在本关的出怪种类中。而所有植物僵尸首次出现关卡的值均为99,因此在冒险6-49,其中编号最小的豌豆射手僵尸就会刷出,且只有两只。


          IP属地:北京5楼2019-05-17 20:43
          回复
            因此,冒险6-49会出现豌豆射手僵尸只是当初宝开的一个疏漏(虽然正常情况下没有影响)。这个bug只会在6-49这一关出现。
            注:1.“特殊僵尸”的独特出怪方式有其意义所在。由于普通的出怪方式随机性很强,强制出现两只“特殊僵尸”可以保证玩家在冒险中见到新僵尸。
            2.若“特殊僵尸”为雪人僵尸,游戏还会检查[0x6A9EC0]+0x88C是否为0,貌似会使4-10杀死雪人后重来时不出现雪人...
            3.之所以说是“火星向”,因为这个现象好像早就有人发现了,原因也很容易猜到...


            IP属地:北京6楼2019-05-17 20:44
            收起回复
              综上,全贴完


              IP属地:北京7楼2019-05-17 20:45
              回复
                一小时惨案


                IP属地:广东来自Android客户端8楼2019-05-17 21:45
                回复
                  2025-07-20 00:56:07
                  广告


                  IP属地:江苏来自Android客户端9楼2019-05-17 22:24
                  回复

                    4-10杀死雪人后关卡结束前重开的话雪人不会再出来好像有人讲过原理(现在考证不了),6-49的豌豆射手僵尸的分析以前倒是没见


                    IP属地:上海10楼2019-05-17 22:52
                    回复


                      IP属地:上海来自Android客户端11楼2019-05-17 22:54
                      回复
                        技术贴,顶顶


                        IP属地:湖北来自Android客户端12楼2019-05-17 23:17
                        回复
                          顶顶


                          IP属地:广东来自Android客户端14楼2019-05-18 01:23
                          回复
                            🐮🍺


                            IP属地:河北来自Android客户端15楼2019-05-18 01:56
                            回复
                              2025-07-20 00:50:07
                              广告


                              IP属地:黑龙江来自Android客户端16楼2019-05-18 20:21
                              回复