植物大战僵尸吧 关注:536,039贴子:4,926,415

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

取消只看楼主收藏回复

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


IP属地:江苏1楼2023-01-21 21:08回复
    感谢和风唐舞的提醒,感谢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
                      收起回复
                        三、固定出怪
                        使用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
                          回复
                            3.2 (冒险模式)最后一波出所有僵尸
                            一、二周目都有,迷你游戏和生存没有,最后一波会先把本关出怪种类列表中(除雪人僵尸外)所有(权重不为0的)僵尸都出一只。
                            当然这会与“新僵尸”和“旗帜波出普僵旗帜”重叠,重叠起来就不用再出一遍了。
                            并且从6-49可以看出,新僵尸会出在最后一波是“新僵尸”导致的,而不是(至少不只是)“最后一波出所有僵尸”,因为豌豆射手僵尸并不在出怪种类列表中,却仍然会出现在最后一波。
                            顺便一提,使用WPF修改出怪种类列表,再用PT修改出怪种类,可以发现最后一波的固定出怪也会发生改变。推测是两种修改器改的地方不同(下文还会提到这一点),具体什么原因就不清楚了。


                            IP属地:江苏18楼2023-01-21 22:04
                            收起回复
                              3.3 (所有模式)旗帜波出普僵旗帜
                              大名鼎鼎的“大波固定出8普僵1旗帜”,实际上稍微复杂一点。这个和级别容量上限是有关的,具体公式推不出来。
                              第一类上限:
                              第二类上限:
                              这也是个快速判断级别容量上限类别的方法……
                              另外,部分迷你游戏在w40后会重复w40的出怪,我称之为w41+,w41+固定出9普僵,就是那个旗帜换成了普僵。


                              IP属地:江苏19楼2023-01-21 22:07
                              回复