植物大战僵尸吧 关注:529,770贴子:4,911,374

关于出怪列表的填充:级别容量上限、固定出怪……

只看楼主收藏回复

本来可以再养两天的,但是听说今天适合发帖,那我也来凑个热闹。


IP属地:江苏1楼2023-01-21 21:08回复
    沙发


    IP属地:河北来自Android客户端2楼2023-01-21 21:12
    收起回复
      感谢和风唐舞的提醒,感谢uint8_t和Umbrella_leaf的帮助和纠错,感谢被我站在肩膀上的巨人们。
      目前应该还比较缺少这方面的探索吧?我看PT站和改版界传的都有些问题。
      老天保佑我少出错……(已经被揪出来两处了)
      别急着插楼,翻图片可能需要些时间。


      IP属地:江苏3楼2023-01-21 21:14
      收起回复
        大家应该都看过PT站上的资料吧,那个是有点问题的。

        (uint8_t帮我写的开场白,)在探究冒险模式和各个非EL关卡的过程中,发现“级别容量上限”并非在所有关卡中都符合这一规律。借助“级别上限”,本文将对各关出怪列表填充的机制进行简单的分析。


        IP属地:江苏4楼2023-01-21 21:18
        回复

          最初是在小年兽的帖子下面,有吧友跟我这么说,当时我还奇怪怎么会不同。
          后来我在研究看星星无尽时发现,看星星w40的级别容量上限只有35,与PT站中的40的确不同。
          几天前uint8_t用脚本统计了一些关卡,发现与PT站的结论不同,于是我借用他的结果,对比着游戏重新处理了一下PT站(和风唐舞的提醒给了我很大的帮助),发现生存无尽的第一次选卡用的是另一套公式:

          并且趁热打铁探索了下几乎所有关卡(锤僵尸、僵王除外)的一些出怪规律。


          IP属地:江苏5楼2023-01-21 21:29
          回复
            注:以下内容未使用反汇编,全部使用修改器+不完全归纳得出,加上楼主和宝开都存在犯傻的可能,因此并不能保证绝对正确,大家有发现问题欢迎反应。
            目录
            一、辅助工具说明
            二、级别容量上限
            2.1 第一类
            2.2 第二类
            2.3 混合类
            2.4 特殊说明
            2.4.1 一周目1-1~1-3、1-5. 7
            2.4.2 谁笑到最后
            2.4.3 一/二周目5-5、蹦极闪电战
            2.5关卡一览
            三、固定出怪
            3.1 (冒险模式)新僵尸
            3.2 (冒险模式)最后一波出所有僵尸
            3.3 (所有模式)旗帜波出普僵旗帜
            3.4 特殊情况
            3.4.1 一周目1-1
            3.4.2 一/二周目5-5、蹦极闪电战
            3.4.3 植物僵尸、植物僵尸2
            3.4.4 你看,他们像柱子一样
            3.4.5 谁笑到最后
            3.5 顺序
            四、无普僵关
            4.1 几则实验
            4.2 出怪规律
            4.3 跳跳舞会
            4.4 空袭
            4.5 雪橇区
            五、下期预告(其实是鸽子预告)


            IP属地:江苏6楼2023-01-21 21:29
            收起回复
              一、辅助工具说明
              使用到的辅助工具有:
              1. PT:可以修改出怪种类(会默认选择普僵);可以显示w1~20的出怪种类和数量(PTK只能显示SE的出怪)。
              2. v1.9:可以修改出怪种类(可以不选择普僵)。
              3. WPF:可以显示出怪列表;可以修改出怪种类(会默认选择普僵);可以显示所有波的具体出怪列表(即在列表中的顺序也能看到)。
              其他跳关、自收、后台、倍速等功能与本文关系不大,略去。
              关于辅助工具的一些事:
              1. 正常状态下出怪列表中普僵似乎是不可更改的?(下图来自WPF)

              不过v1.9的确可以做到不选普僵,并且会导致一个神奇的现象:
              正常来说只有普僵和豌豆级别是1(权重为0的不计);如果出怪没有这两种僵尸,可能因为前几波级别上限为1的就没法填了,会把出怪列表中序号最小的僵尸的级别变为1。
              这个推测是v1.9的效果而非游戏本身的机制:如果用WPF挑一个无普僵、无豌豆关,并修改出怪种类,得到的并不是这样的效果(下文“无普僵关”会讲);如果挑的是有普僵或有豌豆关,会直接闪退。
              2. 关于“波数”,绝大部分地方都是从1开始的,即我们平时所说的第x波,但是(目前发现)有两处例外,是从0开始的(即内存中的数值,没有+1):
              一处是ShowMe的“僵尸所在波数”:

              还有一处是级别容量上限公式中的“当前波数”:
              每波容量上限 = int(int((当前波数 + 已完成选卡数 * 每轮总波数) *0.8) / 2) + 1, 大波再乘以 2.5 并取整
              可以用w3验证一下:
              w3(3):int(int(3*0.8)/2)+1=2
              w3(2):int(int(2*0.8)/2)+1=1
              下文“波数”均指平时所说、从1开始的波数。
              //补充:(来自uint8_t)
              /*
              出怪列表可以自行在内存中读取,但是未填充到的部分会有垃圾数据残留在里面。因此要在同时读取每波的总出怪数。
              地址表:十六进制[[[6a9ec0h]+768h]+6b4h],从这个地址开始的2000个的数据,每个数据是unsignedint。其中存放的是僵尸的编号,每50个数组一组,为一波的出怪,共可容纳40波。
              */
              //(来自xiao_He)有时候用PT读取冒险的出怪会看到w10以后群魔乱舞,就是因为之前留下的出怪记录没有删去。


              IP属地:江苏7楼2023-01-21 21:34
              收起回复
                二、级别容量上限
                不考虑多次选卡,PT站的那条公式可以简化为:
                每波容量上限 =int(int((当前波数) * 0.8) / 2) + 1, 大波再乘以 2.5 并取整
                用这个公式可以得到w20的级别容量上限是20,但是实际上发现不全是这样,哪怕是大家最最最最最熟悉的生存无尽:

                w20:12+1+2*2=17≠20。
                看来需要重新统计一下了……
                咳,先说一下统计级别容量上限的方法。第一种是脚本统计。
                第二种,针对不会写脚本的人,前20w可以将出怪设置为只有普僵,再用PT查看,这样普僵的数量就是级别容量上限(因为特殊出怪,其实还需要加上一些,但反正是轻松了不少);
                20w以后PT就不管用了,在PT更新之前只能用WPF读取,WPF没有直接的统计,需要一个个数,推荐出怪设置为普僵和巨人(白/红眼均可),普僵每只级别1、巨人每只级别10。
                经探索发现游戏中有两类级别容量上限:
                第一类公式:每波容量上限 = int(int((当前波数) * 0.67~0.68) / 2) + 1。

                第二类公式:每波容量上限 = int(int((当前波数) * 0. 8) / 2) + 1。

                一个很简单的分辨方法:看开头,如果是aaabbbccc就是第一类,如果是aaabbccc就是第二类。
                此外还有将两类混合起来的混合类,还有若干变式,下面详解:


                IP属地:江苏8楼2023-01-21 21:36
                回复
                  2.1 第一类
                  基础公式:每波容量上限 = int(int((当前波数) * 0.67~0.68) / 2) + 1,大波再*2.5。

                  那个参数是0.67或0.68得到的结论是一样的:

                  以我对宝开的认识应该不会搞3位小数。
                  也可以简单地记为“每3波增加1”。
                  此外部分关卡会在此基础上进行翻倍,普通波会全部翻x倍,旗帜波的规律暂未找到,好在一共没几种情况,全部罗列下来就好了:
                  普通波翻2倍:

                  适用关卡:一周目5-5、蹦极闪电战、隐形食脑者、保护传送门、你能挖了它吗。
                  普通波翻3倍:

                  适用关卡:一周目x-10。
                  普通波翻4倍:

                  适用关卡:一周目1-5、二周目1-5、坚果保龄球、坚果保龄球艺术锦标赛、一周目3-5、小僵尸大麻烦。
                  普通波翻6倍:

                  适用关卡:你看,他们像柱子一样


                  IP属地:江苏9楼2023-01-21 21:39
                  收起回复
                    2.2 第二类
                    基础公式:每波容量上限 = int(int((当前波数) * 0.8) / 2) + 1,大波再*2.5。

                    也可以简单地记为“每10w的第1、4、6、9波增加1”。
                    翻倍后如下:
                    普通波翻2倍:

                    适用关卡:二周目5-5。
                    你没看错,一类、二类的2倍的w30都是51,非常奇怪,但我试下来的确是。
                    普通波翻3倍:

                    适用关卡:二周目x-10。
                    普通波翻4倍:

                    适用关卡:二周目3-5。


                    IP属地:江苏10楼2023-01-21 21:42
                    收起回复
                      2.3 混合类
                      生存模式(包括简单、困难、无尽),第一次选卡(1~20w)按照第一类公式出怪,之后(>w20)按照第二类公式出怪。


                      IP属地:江苏11楼2023-01-21 21:43
                      回复
                        2.4 特殊说明
                        一周目1-1~1-3、1-5
                        一周目1-1:
                        一周目1-2:
                        一周目1-3:
                        一周目1-5:
                        其实都是符合前面的结论的,只是比较特殊就单拿出来了,1-1的w4没有旗帜僵尸、容量上限也没有*2.5(否则就是2*2.5=5了)。
                        谁笑到最后

                        显然是从常规第一类的w11开始的。
                        一/二周目5-5、蹦极闪电战
                        见下文“固定出怪”部分。


                        IP属地:江苏13楼2023-01-21 21:53
                        收起回复
                          芜湖


                          IP属地:美国来自Android客户端14楼2023-01-21 21:57
                          回复
                            三、固定出怪
                            使用v1.9将出怪种类设置为原本不会出现的僵尸,就可以得到每一波的“固定出怪”。
                            绝大多数情况下,这些“固定出怪”满足以下特点:
                            不管“固定出怪”的僵尸在不在本关出怪种类中,总是会先填充进出怪列表。此时如果已经达到或超过级别容量上限,则不会继续出怪(一周目很多关卡的w11和w20光是把固定出怪填完就满了);若是没有达到,则会继续填充。
                            至于为什么是“绝大多数情况下”,因为有一个例外,5-5和蹦极闪电战。
                            测试方法:使用v1.9将出怪种类设置为本关不会出现的僵尸(如红眼),剩下还黏在出怪列表中的就是固定出怪了。
                            固定出怪大致分为4种情况:
                            1. (冒险模式)新僵尸
                            2. (冒险模式)最后一波出所有僵尸
                            3. (所有模式)旗帜波出普僵旗帜
                            4. 特殊情况


                            IP属地:江苏16楼2023-01-21 22:01
                            回复
                              3.1 (冒险模式)新僵尸
                              推荐阅读:p/6134448446
                              一、二周目都有,本关如果有新出的僵尸,会选择其中序号最小的(如3-6新出冰车和雪橇小队,会选择冰车)进行填充,在第总波数/2+1 波和最后一波各有一只,特例如下:
                              1. 气球、矿工固定于w7和w20(Final Wave)各出一只,一、二周目都是,而不是第总波数/2+1 波;
                              2. 6-49会出豌豆射手僵尸;//(来自uint8_t)实际上这不是“特例”,只是由于豌豆编号的特殊性导致的bug,豌豆的编号正好在6-49,符合规律(((
                              3. 雪人只会固定出现于二周目4-10的w16,w30没有,且击杀后退出重进一次就不会出现了(重进两次就可以了)。
                              4. 一、二周目1-1都不会因为这个固定于w3和w11生成普僵,1-3的路障是符合的。
                              话说红眼会不会出现啊?


                              IP属地:江苏17楼2023-01-21 22:03
                              回复