经OP鉴定,本词条内容清晰,排版优美,是值得参考的优秀范例。
本条目部分或全部内容搬运自外部资源。
遵守CC BY-SA 4.0协议,部分内容可能有所改动。
栈位理论
前言
基本介绍
以下内容仅作为解释用,而非内存真实情况。
栈可以类比为一个深洞,往里面依次放入各种物品(元素),最早放的总是要最后取出来,即先进后出。游戏中只能访问栈顶元素。
对植物而言,场上的植物都会有一个序号,直接对应植物在数组中的位置。初始化游戏(比如重新开局)同时会有一个栈被初始化,用以分配植物序号。刚初始化的栈只有一个元素0,而当我们种下了第一株植物,发生了以下事情:
栈顶元素(就是0)出栈成为序号赋予植物-->判断栈是否为空-->空,出栈的元素+1后(这里是变成1)再入栈。
植物消失(包括被铲除、被碾压并过了一段时间1)、灰烬植物爆炸、被丑炸等)后,其序号会入栈,成为栈顶元素,将分配给下一次种植。
类似地,僵尸也会由另一个栈记录,在僵尸死亡时相应序号回归栈顶。
“低栈位”可与“序号小”等同,反之亦然。
序列号
此概念仅在蹦极和舞王的相关现象中用到,了解它并不是必要的。
事实上,游戏通过栈位和序列号共同确定一植物或僵尸(只不过大部分现象仅依赖栈位)。序列号有时也被称为mRank计数,但在内存中被称为mNextKey。游戏内部存在初值为0的计数器,植物、僵尸、子弹等各有一个,植物/僵尸/子弹/…生成时将被给予计数器当前值,即为序列号,之后对应计数器自增1。2)
重进关卡时,计数器将被重置为初值,这将可能使蹦极抓取植物、舞王区分伴舞过程产生错误。
对于让植物/僵尸拥有特定序列号以达成的操作是否应该归入“栈位理论”范畴,存在些许争议。
现象
植物栈位相关
海豚
海豚因植物间栈位高低有可能发生越过高坚果的现象。
静态(全过程无操作)
请注意,此现象只发生在下水即跳跃的海豚中(也就是八列有植物)。经典十炮高坚果带套会被海豚跳可认为是谣传了
发生的条件是:
- 1、八列有高坚果,是否带套不影响;
- 2、a.七列有空南瓜(b.或高坚果或高坚果套南瓜);
- 3、a.七列空南瓜(b.或高坚果或高坚果套南瓜)栈位低于八列高坚果。
对应的情况是:同时满足1,2.a,3.a,海豚跳过八列,落在七列更左的位置;同时满足1,2.b,3.b,海豚跳过八列,被七列高坚果阻挡而落在七列较右的位置;除此二种皆会被八列高坚果阻拦。
最后是对于“海豚概率跳过xx”的说法。只要是满足了上述条件,海豚跳过的概率就是100%,否则便是0%,不存在中间数,所谓概率也只是人为操作使得前后植物序号时大时小罢了。
动态(跳跃过程有人为操作)
在海豚跳跃时种植,可以有更大的作死操作空间。
对于n(1≤n≤7)列高坚果,只需在一小段时间内于n+1列种植一栈位低于此高坚果的非高坚果植物,那么海豚将会越过高坚果。而这段时间,上界不晚于跳跃后123(124触发碰撞判定),下界约为海豚半个头处在n+1列与n+2列交界时3)。
类似地,还可以令海豚做出越过n列高坚果(或南瓜)的动作,却被n+1列高坚果阻挡。仅需在海豚做出跳跃动作后、跃后124之前于n+1列迅速种植荷叶与低栈高坚果,海豚就会被拦在n+1列高坚果前。注意,此操作对n列普通植物无法复现。
对植物判定顺序
若僵尸可以同时攻击(巨人锤击、其余僵尸啃食)到两格的植物,则会优先攻击序号较小的植物。 但如果植物所在格有花盆南瓜等,则顺序会稍显复杂。
炮阵中,或许可以使用序号较炮小的垫材降低砸率。
使用后置炮的场景中,若三列的南瓜或梯子南瓜栈位比炮的栈位低,则小鬼会在横坐标为230px时不啃炮,在231px时啃炮;否则小鬼将在横坐标为229px时不啃炮,在230px时啃炮。
蹦极
蹦极依靠栈位和序列号来确定将要偷的植物,若设法将目标植物拥有与蹦极选定的植物相同的栈位和序列号,则目标植物会被偷取。此原理又名栈位偷,尽管这并未完全体现背后的机制。利用此原理可以做到一些神奇的事情:蹦极偷炮、炮后轮悬空、植物下方无花盆荷叶而悬空4)。 用于满足日益发展的审美观
复现方法:
- 1、在蹦极产生标靶到手开始收拢的时间内,退出重进一次,在蹦极所在格种下任意植物,之后直到蹦极手完全收拢前的时间段前,挑一时刻退出重进一次;
- 2、在蹦极手开始收拢到完全收拢(摸到植物)的这段时间,铲除蹦极所在格植物,并于目标位置种下计划被偷的植物;
- 3、此时计划被偷植物在所种格子仍存在,同时蹦极所在格也会有该植物的贴图。制造后轮悬空炮或悬空植物需要将花盆或荷叶选为计划被偷对象,并在此阶段完成炮或植物的种植;
- 4、蹦极手完全收拢(视觉上碰到了植物)后,计划被偷植物将从所种格子消失并且贴图随蹦极上升,此阶段对于被偷的荷叶、花盆也不再能于其上种植植物。
解释
- 步骤1时间内,蹦极未锁定植物序号与序列号,第一次退出重进使得蹦极所在格内种植的第一株植物序列号为0,第二次退出重进为种植下一株0序列号的植物作准备;
- 步骤2所在时间,蹦极锁定了本格植物的序号和序列号(为0),铲除该格植物让序号回归栈顶,则新种植的植物便拥有了被铲除植物的栈位和值为0的序列号,被蹦极误认成被偷植物;
- 蹦极手完全收拢前,目标植物仍可交互,若为荷叶、花盆,应在此时间段内种植好负载的植物;
- ps:若能够保证蹦极偷取植物的位置,则第一次退出重进与第一次植物种植可以早早地完成,毕竟只是为了产生0序列号植物。
一个使炮后轮悬空的实例是水母十四炮。
陆地荷叶/陆地猫
在有水路的地形中,使蹦极选定一株陆地上被套在南瓜中的植物,并用上述方法更换为猫尾草,则蹦极偷取猫后会在南瓜下放置荷叶,则实现了陆地荷叶,在荷叶上种植猫尾草就实现了陆地猫。
也称作飞贼荷叶skip、蹦极荷叶skip、Bungee Lilypad Skip。
除陆地放荷叶和猫外,利用此特性可以做到:
- 陆地或水上无限叠种荷叶;
- 给海蘑菇和缠绕海草套南瓜;
- 在同一格叠种任意数量荷叶与至多一个海蘑菇/猫;
- 在同一格叠种一个荷叶与一个缠绕海草;
- 浮空南瓜套;
- 荷叶与花盆、地刺、土豆地雷等叠种;
- ……
注意
制造陆地猫的条件不仅仅是蹦极靠栈位和序列号判断植物,它还包含了至少以下几点:- 1、蹦极依靠自身所在格来决定偷猫后补种荷叶的格子,而非猫原来在的格子;
- 2、补荷叶的过程不涉及额外的合法性判断;
- 3、种猫的过程并没有判断需要水。
参考贴:飞贼荷叶skip,参考视频:原版逆天bug:飞贼荷叶skip
Ice3失效
使用咖啡豆、模仿者等具有交接生效倒计时的植物时,由于存在切换计算问题,总时长会产生1cs的变化。对Ice3而言,咖啡豆与寒冰菇的序号相对大小不同会引起总生效倒计时的差异,这便是Ice3显得“玄学”易失效的原因。
键控中,解决此问题有使用改变生效时间的函数、读取内存等途径。(掉不掉节操取决于个人)
僵尸栈位相关
水草、大嘴花
这两种植物在攻击时会优先选择栈位较低的僵尸。
空降僵尸
已知僵尸的啃食判定是出生后时间每为4的倍数造成一次4hp的啃食伤害,蹦极下落时间为375~394cs。如果空降僵尸恰好落在植物上,此时:
1、若着地时间为4的倍数,则僵尸间栈位关系影响首次啃食时间——空降僵尸栈位低于蹦极,则过4cs才造成伤害;空降僵尸栈位高于蹦极,则在落地时就造成啃食伤害;
2、若着地时间不为4的倍数,则栈位高低无影响,统一到下一个4的倍数的时间才造成伤害。
垫材
当多个僵尸对植物造成碾压、跳跃、举锤等判定时,判定会从栈位最小的僵尸进行。
例:1、NE场地在九列种植植物时,有时可发现植物立即被碾压,同时本行九列巨人有一部分举锤,另一部分继续行走。这是因为植物同时在篮球车与巨人的攻击域内,刚放置的1cs中,栈位低于所有篮球车的巨人先对植物进行了举锤判定,其后篮球车进行碾压判定,最后栈位高于篮球车的巨人开始判定,但植物已被碾压,故没有被垫到,此类巨人继续行走。
2、屋顶地形车底垫花盆,可观察到一部分撑杆尝试越过花盆,一部分继续行走。垫花盆后的1cs内,栈位较冰车低的撑杆先进行了飞跃判定,栈位较冰车大的撑杆飞跃判定比冰车碾压判定晚,正常行走。
由于僵尸的栈位在正常游戏中不可控制,故采用上述“车底垫”的方式来垫巨人消除砸率的操作是不严谨、不被接受的5)。
撑杆
越过植物方面,撑杆拥有与海豚相似的特性,具体见上文。
撑杆与土豆地雷间亦存在一bug:土豆地雷遍历本行6)僵尸序号,每一个无杆撑杆会使本行土豆地雷的触发判定右移40px(即0.5格),而已出土的土豆地雷会处于霸体状态7)。这意味着,最少两个低栈位的无杆撑杆可以产生一个无敌土豆地雷;当撑杆数量足够多,使得地雷触发判定在僵尸出生点右侧时,土豆地雷将完全免疫本行僵尸啃食。相关应用有伪和平22炮。
多个撑杆可以将地雷判定引至足够右的位置使得爆炸不伤僵尸,如IZ中常用的四杆引雷。
单个撑杆也可以触发被南瓜套住的土豆地雷爆炸,这点在改版过关中有所应用。
关于此bug的演示及解析,参见:
拦截bug
(以灰烬激活投掷为时间参考,单位为cs)已知Ice3的生效时间是原速激活后105(减速210),但正常可拦截时间是原速107+(减速212+)。这是因为激活后106(减速211)时存在拦截bug,在这一cs内拦截可能导致拦截失败,甚至出现炸黑巨人没炸掉小鬼的情形(如图)。该bug与小鬼和巨人间的栈位高低有关:
若小鬼栈位高于巨人,则此时小鬼存在时间为1cs,该cs内必定成功拦截;
若小鬼栈位低于巨人,则此时小鬼存在时间为0cs,其坐标尚未初始化(为内存中残留的垃圾值),下一cs才会传送到巨人手中,本cs内概率拦截失败。
舞王
舞王通过栈位和序列号来确认自己的伴舞,若设法使另外的僵尸拥有与某伴舞相同的栈位和序列号,则该僵尸会被舞王错误识别为伴舞。
在生存无尽中,新舞夜惊魂将魅惑伴舞替换为敌对僵尸,在不使用女仆秘籍的情况下构建了永动曾。
在我是僵尸中,相关的应用有珍珑《移花接木》。
评论
这字码的……我的眼睛……
排版不能,抱歉(
可以料想到几个月后这个页面将会成为一座大山…… 可能某些内容需要分出去(?