泳池,扶梯,和珊瑚僵尸
 
Notifications
Clear all

泳池,扶梯,和珊瑚僵尸


100kt
Posts: 25
Topic starter
(@100kt)
小丑压制
Joined: 3 years ago

珊瑚僵尸,俗称水鬼僵尸,出现在 w20 的水路 6~9 列,特征是头戴水草。珊瑚僵尸对水路 6~9 列存在无保护植物的阵型威胁很大(一般是炮)。因此,消除珊瑚威胁在这些阵型中显得十分必要。

常见的方法有炮消珊瑚和冰消珊瑚两种。冰消珊瑚在这里不予详细讨论。我们主要来考虑炮消珊瑚。

相对于冰消珊瑚,炮消珊瑚的劣势在于时机需要更为精准,对炮落点的位置也需要更细腻的掌控。而其优势就在于可以省去一冰。我们知道在白昼炮数较多的阵中,冰是非常珍贵的,而炮相比起来就比较廉价了。

最近某群中出现了一些关于炮消珊瑚的时机、落点的讨论,我发现此前我们对炮炸珊瑚这个事实上极为简易的问题并没有过于深入的研究,大部分与此相关的精确数据都是“能用就行”。当群友询问“炮炸珊瑚的容错范围是多少“此类问题时,就来到没有知识存在的荒原了。在精品区的《纵向偏移的部分遗留问题清算——时空贴补丁》中对其他几乎所有存在高度变化的僵尸都进行了概述,但也没有涉及到珊瑚僵尸。

本贴对相关的机制、判定范围计算进行了补充。

10 Replies
100kt
Posts: 25
Topic starter
(@100kt)
小丑压制
Joined: 3 years ago

前置知识:时空贴。可以在 wiki 的技术/精确数据处进行浏览,本文也会进行一些简要的介绍。 《纵向偏移的部分遗留问题清算——时空贴补丁》,本吧精品区。

一些约定:

1px: 一个像素, 1cs: 0.01s

下文的坐标体系中,水平向右为 x 轴正方向,水平向下为 y 轴正方向。

下文会出现两个坐标系,一个的原点为 1-1 格子的左上角,另一个的原点为屏幕左上角。

前者是内存中存储僵尸坐标的坐标系,后者是计算判定范围时常用的坐标系。通常,内存中与判定范围有关的量相加之后直接计算出的判定范围在此坐标系中的位置和在调试模式中显示的位置一致。两者的换算关系可以简单地描述:在以 1-1 左上角为原点的坐标系中,屏幕左上角的坐标为 (-40,-80).

我们认为炮击操作的“落点”一词表示的是炮弹准星的位置而非爆心。(一般来说,爆心是准星向左平移 7px,实际上是爆心为中心进行伤害判定)。

本贴采用的是不涉及源代码的老式探究方法(读内存,手算),若有问题欢迎指正。

Reply
100kt
Posts: 25
Topic starter
(@100kt)
小丑压制
Joined: 3 years ago

首先,我们要了解珊瑚僵尸。

我们熟知每个僵尸都有一个防御域,是一个水平线段与竖直线段构成的矩形,类似于许多游戏中的碰撞箱,僵尸的受击判定直接与僵尸的防御域有关。同种僵尸的防御域纵向与横向宽度均为定值,记为 (wX,wY)

同时,每个僵尸个体有一个不同的坐标 (x,y),刻画的是其在场地中的位置情况。一般来说,每一行的僵尸纵坐标相同,横坐标则因僵尸会水平运动与行走机制、出生位置有关。但仅仅这两个量还不足以确定僵尸的位置,僵尸还有两个量 (offsetX,offsetY).僵尸防御域的实际左上角坐标一般为 (x+offsetX,y+offsetY).

确定了僵尸的横纵坐标与种类,我们一般就能唯一确定僵尸的防御域。

对于一些特殊的僵尸,有一个游戏设定称为”纵向偏移“,又称高度。(如气球僵尸)它是一个值,记为 h. 假设僵尸的坐标为 (x,y) ,则一般可认为其参与判定计算的实际坐标为 (x,y-h).

在【不在宝前】的判定计算贴和时空贴中均有以上内容更为详细的描述,以及大量精确数据,本文不再赘述。

Reply
100kt
Posts: 25
Topic starter
(@100kt)
小丑压制
Joined: 3 years ago

现在,让我们回到珊瑚僵尸。仔细观察过的你一定知道,珊瑚僵尸有一个从水中缓慢出水的过程,类似于伴舞僵尸。这类存在“出土“的僵尸,其纵向偏移的相关机制有所不同。

在“出水”过程中(其状态为 14),即 wave 20 刷新为基准的 200~249cs,珊瑚僵尸的坐标值固定。假设珊瑚僵尸位于 r c 列,则其坐标锁定为 (85r-35,80c-65). 例如,位于 4-9 的珊瑚僵尸坐标始终为 (655,305).

但其纵向偏移在近似匀速地从 -150 减小至 -40250cs 才到),也即正常水中鸭子的状态。

不过,这里 h 的意义和此前提到的不同。按我们此前给出的定义,h 变化相当于整个防御域在从下往上平移。这与事实不符。

事实上,在这 50cs 内,珊瑚僵尸的防御域上界确实在随 h 向上运动,但下界始终保持不动。这与鸭子僵尸有一些类似,但又有不同。

Reply
100kt
Posts: 25
Topic starter
(@100kt)
小丑压制
Joined: 3 years ago

在《纵向偏移的部分遗留问题清算——时空贴补丁》中提到了,鸭子僵尸的纵向偏移虽为 -40,其防御域下界却并非 y-h+offsetY+wY 。其内存中的防御域纵向宽度为 +115,但实际上的下界仅仅为 +82,在进入啃食状态后变为 +75。且由于该机制和啃食状态有关,对于每个僵尸,存在时间为 4cs 整数倍时才会切换下界。

直觉上,珊瑚僵尸也是“浸入水中”的,那么它的防御域下界应该是 +82 ?但是,事实上它处于出水状态(200~249,状态值为 14)时,防御域下界为 +75 。(非常反直觉)在 250cs 时,珊瑚僵尸的防御域下界突变为 +82.

至此,我们就确定了珊瑚僵尸的防御域下界变化情况。

Reply
100kt
Posts: 25
Topic starter
(@100kt)
小丑压制
Joined: 3 years ago

现在,让我们回到防御域上界。防御域上界随纵向偏移变化。前面提到过,纵向偏移是近似匀速地从 -150 增长到 -40 的。更精确的,我们注意到总变化量为 110px,而这一过程总时长为 40cs,似乎是每 cs 增长 2.2px 再取整。但这与读取内存得到的结果有一点点差距。下图展示了读取内存得到的纵向偏移与珊瑚僵尸存在时间的一一对应关系。

image

可以发现其差分后呈现出 2,2,3,2,2的周期变化。我们将时间的参照物换为 w20 刷新,其实就是加上 200cs,可以发现一个可能的表达式 INT(-2.2*(268-t)),因为我们的 t 只能取 200~250 之间的整数,可以认为这就是纵向偏移的表达式。有了该表达式,我们就能求出每个时刻珊瑚僵尸的防御域上界了。

image
Reply
100kt
Posts: 25
Topic starter
(@100kt)
小丑压制
Joined: 3 years ago

然而,这并不意味着结束。在刚刚开始出水的一段时间内,珊瑚僵尸的防御域上界反而低于其下界。目前推测的判定情况是,在炮弹低于上界的情况下,判定受伤的下界等于原下界。在炮弹高于下界的情况下,判定受伤的上界等于原上界。介于两者之间目前不清楚情况是如何,我猜测是对上界进行判定。但是最后一种情况不会出现在一切常见情况下,我们无法构造出任何一个灰烬植物与伴舞、矿工、珊瑚中任何一种僵尸(处于出土/水过程中某个状态)的二元组,使得其符合该情况。因此,直接将第三种情况忽略即可。

image
Reply
100kt
Posts: 25
Topic starter
(@100kt)
小丑压制
Joined: 3 years ago

然后,考虑炮弹。炮炸扶梯的范围是一个矩形。时空贴中给出了炮弹炸掉扶梯的充要条件。

对于rc列的搭梯南瓜,扶梯被炮炸飞的条件是r-1≤准星行数≤r+1,且80*c-113≤准星x≤80*c+126

因此,当岸路有 6 列梯时,为了不伤梯,炮的落点必须处在 607 及其右侧,也就是 7.5875 及其右侧(从这里能看出 (4,7.5875) 这个常用落点的来源)。

炮弹对僵尸的杀伤范围是一个半径为 115px 的圆形。爆炸中心的 x 为准星 x-7y 为同植物 y+40(非天台场景)。运用勾股定理便可求出炮弹的可行范围。

Reply
100kt
Posts: 25
Topic starter
(@100kt)
小丑压制
Joined: 3 years ago

将以上信息整合,便得到了珊瑚计算器。输入时机便可得到收/不收某格珊瑚的落点集合。

注:200 生效炮不可炸珊瑚,原因是同一帧内结算先处理子弹再处理刷怪。

 

Reply
100kt
Posts: 25
Topic starter
(@100kt)
小丑压制
Joined: 3 years ago

最后再给一些结论:

由于僵尸啃食 4cs 判定一次,炮消珊瑚的最晚时机为 251.

4 路炮炮收 6789 最早为 210 7.4875

3 路炮收 6789 最早于 249 7.4875.

由于最后的 7px 突变,4 路炮收 6789 的最大空间允差为 23px250251 炸),并且 218~249 空间允差均为 17px.

任何时机,3 路炮都无法避开 6 列梯的同时一炮收 6789.

4 路炮避开 6 列梯收 6789 最早时机为 218,落点 7.5875,最大空间允差在 250 时取到,也仅仅有 4px7.5875~7.625)。218~249 1px251 时由于僵尸开始行走也仅剩余 3px

Reply
100kt
Posts: 25
Topic starter
(@100kt)
小丑压制
Joined: 3 years ago

后记:本贴的动机来源于植吧玩家交流群内关于珊瑚的讨论。这个简单的问题却一直接近于无人问津,可见珊瑚之 nbcs

【全文完】

Reply
Scroll to Top
en_USEnglish
Powered by TranslatePress »