这是一个沙盒页面。此页面仅供存放和父页面相关,但尚需测试的、暂未发布的内容。
如果您不小心来到了这里,请
点此返回主页面。
这是一个沙盒页面。此页面仅供存放和父页面相关,但尚需测试的、暂未发布的内容。
如果您不小心来到了这里,请
点此返回主页面。
本页面将进行非常大的逻辑重构
暂时不建议在重构完成前进行更改
本页面将进行非常大的逻辑重构
暂时不建议在重构完成前进行更改
攻击逻辑:从索敌到技能
- “一次攻击”或“一次攻击流程”,指的是某个单位从索敌成功准备攻击,到准备进行下一次攻击的整个流程,可按照下表分为三个阶段。
我们在实战中计算得到的实际攻击间隔,就是这个单位的相邻两个“攻击流程”之间的时间差。
阶段名称
|
操作内容
|
备注
|
索敌阶段
|
- 单位上场后会每3帧扫描一次攻击范围内是否有敌对单位,
扫描到敌对单位后触发攻击动作。
|
- 攻击过程中索敌继续进行,以判断目标是否更改,并在下一次攻击中体现。
|
从抬手阶段开始,单位视为发动了一次攻击
|
抬手阶段
|
- 第一次攻击开始前,检测这个单位是否存在“Attack_Begin”动画的设定。如果有则播放抬手动画,否则跳过抬手阶段。
- 对于一名敌人而言,如果其有需要手动释放的技能,当其技能冷却完成时,下次攻击将会变为释放技能。技能和普通攻击占用同样的攻击间隔。
|
- 如果可以利用这一点,在其技能冷却完成前使其攻击一次,那么进入攻击间隔时既不能普攻,也不能释放技能。这可以一定程度拖延部分关键技能的释放时机。
- 对于普通攻击而言,在攻击动作结束前如果攻击目标消失,就不会计算攻击间隔,直接开始下一次攻击,但如果是技能攻击,攻击目标消失时当次技能也将不会生效,且技能进入冷却。
这一点对我方和敌方来说都是如此。[理论参考 2]
|
第二次及以后的攻击动作从攻击前摇阶段开始计算
|
攻击前摇阶段
|
- 在攻击前摇结束时,单位将射出弹体或直接造成伤害。
这个阶段长度取决于不同单位的动画设置。
|
- 一般来说,前摇动画只占攻击动画的一部分,
剩余的攻击动画将在攻击后阶段播放。
|
攻击后阶段
|
- 在上述阶段完成后,单位将根据当前的实际攻击间隔,
计算这次攻击剩余的时间,并用剩余的攻击动画和待机动画填充。
- 由于第一次攻击的抬手阶段也计入当次攻击,
所以第一次攻击的攻击后阶段会相对较短, 导致视觉上第二次攻击会比其他的攻击快一些。
|
- 当更改攻击方式的技能开启后,
当前攻击动作会跳过剩余的攻击动画和待机动画,强制从攻击前摇阶段重新开始。 利用这一特点,在攻击后阶段手动释放技能以跳过攻击后阶段的操作,称为“重置普攻”。
|
如果攻击范围内依然存有敌对单位,那么攻击之后阶段结束后,会从攻击前摇开始循环,直至攻击范围内没有敌对单位,单位重新进入索敌状态。
|
- 类似“重置普攻”的现象也可以被自动释放技能触发:
- 如果自动释放技能在攻击动画结束之前已经准备好释放了,那么在攻击动画结束之后会跳过待机动画,直接释放技能。
- 为与“重置普攻”区分,这种现象也可以叫做“取消攻击间隔”。需要注意的是如果技能在待机期间准备好,则仍会正常经过待机阶段,在下一次攻击时释放。[理论参考 3]
索敌顺序
- 在明日方舟里,敌我的索敌优先级顺序和原则虽然表现上存在一定差异,但基本逻辑相同。以下是优先级由高到低的顺序;
1.最高优先度:“阻挡”:
- “阻挡”状态独立于索敌顺序,当近战单位被阻挡时会无视索敌顺序,依照阻挡接敌顺序依次攻击敌人。这一优先级对于所有敌方单位和我方近战单位都是有效的,但我方纯远程单位(纯高台单位)不存在这一优先级,故高台单位阻挡的敌方单位不会影响高台的索敌。
1.5.独立体系:“随机选择器”:
- “随机选择器”顾名思义,会随机选择范围内的敌人作为目标,消耗随机数轴吗?[需要验证 1]它的特点在于随机选择器和下文的“通用索敌顺序”是并行的两套逻辑,并非通用索敌体系的一部分。目前采用随机选择器索敌的攻击方式有
艾雅法拉的火山和
阿米娅的精神爆发。
2.通用索敌顺序的计算:“索敌权重值”[理论参考 4]
- 单位的索敌权重值是根据攻击特性,通用仇恨值,敌人到终点距离或干员的布置时间等数据计算出的一个浮点数,根据索敌机制的不同,权重算法也有差别。而最终的索敌顺序是在索敌权重值计算的基础上根据特性进行二次排序的结果,在无二次排序的情况下索敌权重值越低越先被攻击。
- 通用仇恨值是一般情况下的索敌顺序判据,同时也在很多其他权重算法中使用,其计算公式对于我方单位和敌方单位不同:
通用敌人仇恨值 = 1000 × 嘲讽等级[注释 1] - 敌人距离终点距离
通用我方单位仇恨值 = 10000 * 嘲讽等级 + 创建时间(单位为秒,范围为[0, 10000])
仇恨值算法列表一览
展开
算法名称
|
典型使用者
|
索敌权重值计算公式
|
全部 |
溅射攻击 |
未知
|
距离终点距离升序 |
无 |
距离终点距离
|
血量比例升序 |
苦艾 - 执法模式 |
血量百分比
|
血量未满目标中按血量比例升序 |
各类治疗 |
血量百分比
|
仇恨降序 |
一般攻击 |
通用仇恨值的相反数
|
只选血量未满目标 |
无 |
无
|
优先飞行目标,仇恨降序 |
仅安德切尔 |
通用仇恨值的相反数,非飞行单位1000006权重
|
优先远程单位,仇恨降序 |
无 |
通用仇恨值的相反数,非远程单位1000007权重
|
防御降序 |
史都华德 刻俄柏 - “很热的刀” |
防御值相反数*1000-通用仇恨值
|
防御升序 |
 守林人、安比尔 |
防御值*1000-通用仇恨值
|
距离来源距离降序 |
拉人干员 |
距离干员距离平方的相反数
|
距离来源距离升序 |
阿消 |
距离干员距离平方
|
只选未眩晕目标,仇恨降序 |
萨卡兹术师 - 枷锁 |
通用仇恨值相反数
|
距离来源垂直距离升序 |
食铁兽 - 崩拳式 铁意六合也是吗[需要验证 1] |
干员到敌人的向量在干员朝向方向上的投影
|
随机 |
刻刀 - 红移 |
随机
|
血量降序 |
W - D12 |
血量相反数*1000-通用仇恨值
|
血量升序 |
无 |
血量*1000-通用仇恨值
|
攻击力降序 |
无 |
攻击力相反数*1000-通用仇恨值
|
攻击力升序 |
无 |
攻击力*1000-通用仇恨值
|
最大血量降序 |
鼠王 - 唱沙 |
最大血量相反数*1000-通用仇恨值
|
最大血量升序 |
鼠王 - 沙暴 |
最大血量*1000-通用仇恨值
|
优先正前方,曼哈顿距离升序 |
 阿 - 爆发剂·γ型 / 爆发剂·榴莲味 |
1000*曼哈顿距离[注释 2]-通用仇恨值。非正前方时1000变为1000000
|
优先未阻挡目标,仇恨降序 |
刻俄柏 - “很冰的斧” |
通用仇恨值相反数,被阻挡单位1000022权重
|
血量未满目标中随机 |
清流 - 涌泉 |
随机
|
优先隐身目标,仇恨降序 |
极境 - 聆听 |
通用仇恨值相反数,非隐身单位1000024权重
|
优先最远,仇恨降序 |
爱国者 - 投枪 |
-1000000*距离-通用仇恨值
|
优先最近,仇恨降序 |
无 |
1000000*距离-通用仇恨值
|
重量降序 |
早露 |
重量等级相反数*1000-通用仇恨值
|
重量升序 |
无 |
重量等级*1000-通用仇恨值
|
- ↑ 一阶段爱国者的嘲讽等级为2,游击队盾卫,拜松二技能,鸟笼等单位嘲讽等级均为1,正常单位为0。
- ↑ 曼哈顿距离坐标差Δx与Δy的算数和,请与平方和(实际距离)区分
- 目前已知的二次排序只有三种情形:
- 安德切尔:优先远程单位
- 所有的对空狙击:优先飞行单位
- 格劳克斯:拥有某种(无人机)[需要验证 1]tag的敌人优先(需要配合filterTag变量填写对应的tag,)
- 二次排序会重新排列所有单位,且结果优先于索敌权重结果。比如安德切尔在遇到混合敌人时,会优先根据二次排序结果攻击远程敌人,之后根据索敌权重结果攻击飞行敌人,最后再攻击其他敌人。
3.兜底机制:“出怪顺序”:
- 由于仇恨值是浮点数变量,有效位数有限,遇到算法中出现“大数+通用仇恨值”的时候,容易出现由于精度不够而忽略微小的距离差异的情况。当权重差小于0.001,无法通过权重索敌的情况发生时,干员会根据敌人的编号(Fragments ID或Route Index)由大到小依次攻击。由于Route Index代表着出怪顺序,所以也可以理解为先攻击后出的怪[理论参考 5]。
机制应用举例:
现象:阿跨过站在正前方的塞雷娅攻击了能天使
原理:角色仇恨值 = 10000 * 嘲讽等级 + 创建时间(一个绝对的值,单位为秒,被限制在[0, 10000]),而阿的正前方索敌权重计算方式为1000*曼哈顿距离-通用仇恨值。
在这种情况下,1000s的创建时间带来的权重差距,足以抵消一格正前方曼哈顿距离带来的权重差距。所以,在一倍速塞雷娅放置后16分40秒(即1000s)后,在其前面一格放置能天使,阿可以优先攻击能天使。
原理参考:https://bbs.nga.cn/read.php?tid=22358536
现象:当使用一位干员同时攻击CE-5的3个重装防御组长时,史都华德、守林人等部分干员表现出了与其他干员不同的攻击顺序(下-中-上而非中-下-上)。
原理:CE-5的三个重装防御组长由于通用仇恨值差距很小而防御很高,防御相关算法在浮点精度下无法体现出索敌权重差异,所以根据出怪顺序进行攻击。
坐标相对于格子中心的偏移量 |
“仇恨降序”算法 |
“防御升序”算法 |
“防御降序”算法
|
(0.21,0.00) |
-12.8000 |
999987.2 |
-1000012.8
|
(0.22,0.01) |
-12.7877 |
999987.2 |
-1000012.8
|
(0.21,0.01) |
-12.8002 |
999987.2 |
-1000012.8
|
原理参考:https://bbs.nga.cn/read.php?tid=21728879
AOE攻击、弹道/抛射物攻击
|
一发打出的三个不同伤害
|
在方舟里,AOE可以认为是在极短时间内进行的多次单体攻击,基础攻击逻辑如下[理论参考 6]:
- 对攻击范围内的每个可以被选中的敌对单位进行锁定,如果成功被锁定,那么即使在伤害结算前离开攻击范围也会受到伤害。反之,如果未被锁定,无论如何都不会受到伤害。
- 按照索敌权重造成伤害并结算。如果锁定的人数大于目标人数,则只对索敌权重值最低的那些目标单位造成伤害。
- 对于有弹道的AOE攻击(例如群狙),目标锁定和伤害结算在命中目标时进行;
对于无弹道,类似于溅射的范围性攻击(例如群法、霜星,“冬痕”的冰环),目标锁定在抬手时进行,伤害结算在前摇结束时进行;[作战记录 1]
对于少数根据位置判定的攻击(例如炎爆),目标锁定和伤害结算均在攻击前摇结束时进行。
- 由于伤害判定是逐个结算的,所以如果对前一个单位的攻击影响了攻击力之类的数值,效果也会在后一个单位上实时体现出来。
特别的,对于部分以发射一个/若干个抛射物的形式体现的攻击方式,如果其锁定的目标在抛射物到达前消失,则该抛射物同样也会消失,不造成任何的攻击效果。此现象一般常见于陨星1、W1、温蒂3、4-10霜星的冰环[注释 1]等发射抛射物的攻击中。
- 目前,明日方舟能够打断攻击或技能的方法有五种:处于眩晕状态、处于冻结状态(干员)、处于强制位移状态[注释 2](敌人)、被沉默(敌人)、处于行动受阻状态(敌人)。不同的打断方式对技能的影响不同,下面根据打断时机分类讨论:
在抬手时打断技能释放(打断前摇):
- 任何打断都需要以效果成功作用于被打断对象为基础,在技能前摇期间就进入无敌状态的技能(如陈的赤霄·绝影、弑君者的位移)不会被打断前摇。
- 敌我的普通攻击和一次、瞬发性技能均不会产生效果,并自动进入下一次冷却期。
- 持续时间无限的状态转换类技能(如白金的天马视域、煌的链锯延伸模块)由于转换过程属于瞬发过程,且没有第二次sp回复,故如果在转换动画时被打断则本次部署内无法转换状态。
在技能过程中打断技能释放:
- 敌我处在维持技能状态的技能被打断后会直接无视技能剩余时间结束技能释放、进入下一个冷却期。目前已知技能发动时处在“维持技能状态”的技能包括:煌·沸腾爆裂、星熊·力之锯、伊芙利特·灼地、莫斯提马·荒时之锁、萨卡兹术师·枷锁
- 在被冻结或眩晕时,干员的技能效果不会受到影响,但由于无法攻击,故只能展现出光环类效果。
- 比如夜莺在开启“圣域”时被冻结,则在冻结期间夜莺无法治疗我方单位,但法抗增加效果仍然存在。
- 如果冻结或眩晕状态解除时干员技能时间还未结束,则可继续释放技能。
在技能冷却时进入打断状态并持续到技能准备完成:
- 技能冷却:不受影响,充能型技能也能以正常速度充能。
- 手动开启型技能:无法启动,技能发动图标变灰,在状态结束后图标重新变亮。
- 自动开启型技能/已经满足发动条件的条件技能:无法启动,技能冷却完成后不再回复sp,在状态结束后自动开启。
蓄力型天赋与打断时间的互动:
- 目前存在蓄力型天赋的单位包括白金和萨卡兹穿刺手,通过测试可以得出结论:技能打断状态的持续时间(包括冻结时间、位移时间、行动受阻时间等)是计入蓄力时间的。[作战记录 2]
机制应用举例:
|
就是你小子把积怨者叫醒的?
|
现象:本应在血量低于99.9%时触发报警技能的萨卡兹哨兵在被崖心位移过程中和位移停止后均未报警。
原理:经测试,警报技能属于持续时间无限的状态转换类技能,且有两帧的前摇,所以可以通过打断这一前摇来避免警报触发。
由于这类技能被前摇打断后无法再次释放,所以哨兵停止位移后也不会成功发出警报。
鉴于哨兵有眩晕免疫效果,若不能在抬手动画瞬杀,则只能使用位移技能强制打断。
原理参考:https://www.bilibili.com/video/BV1954y1Q7GM?p=2
现象:若麦哲伦和梅尔的召唤物在技能结束时处于冻结状态,则当次技能将不会回收被冻结的召唤物。
原理:麦哲伦和梅尔的召唤物通过技能回收召唤物,是通过隐藏技能“回收”的发动实现的。
如果在“回收”发动时召唤物仍处于冻结状态,满足发动条件的技能“回收”无法发动。
而在冻结解除时,已经不再满足“回收”技能发动的先决条件——“本体技能刚刚结束”,所以会导致召唤物留在场上。
- ↑ 见进阶机制汇总#弹道时间
- ↑ 即位移机制中提到的“失衡状态”
相关链接
理论参考:
实战参考:
伤害和buff
一般来讲,方舟中的一次“攻击”,在代码层面是一个包含了伤害(治疗)量和各种属性的一个小数据包,这个数据包里除了攻击力,还包括例如伤害类型(物理法术真实治疗),攻击类型(普通溅射buff),是否可致死,是否属于环境伤害等等一系列属性,故我们在这里称其为“攻击属性数据”。
而一次攻击从发出到被结算需要经过以下流程
流程顺序 |
流程名称 |
流程内容 |
应用举例
|
1 |
来源实体事件:ON_CALCULATE_DAMAGE。 |
获取modifier的各项属性,计算伤害并生成modifier |
攻击倍率调整
|
2 |
|
准备向目标实体应用modifier,检查modifier是否被cancel
|
3 |
目标实体事件:ON_BEFORE_APPLYING_MODIFIER |
|
4 |
来源实体事件:ON_OUTPUT_MODIFIER |
检查来源有效性。 |
造成治疗倍率调整
|
5 |
检查modifier目的, |
为伤害时执行来源实体事件:ON_OUTPUT_DAMAGE |
造成伤害倍率调整
|
6 |
目标实体事件:ON_APPLYING_MODIFIER |
受治疗倍率调整
|
7 |
执行On_Take_Damage/On_Take_Heal
|
1.取消掉隐匿/无敌状态下的攻击
2.取消试图非强制治疗不可治疗单位的治疗
3.检测modifier是否被cancel,反伤,闪避,抵挡,护盾。
|
未被cancel时对目标应用modifier
|
8 |
应用成功后, |
执行目标实体事件ON_APPLIED_MODIFIER
|
9 |
检查modifier目的, |
为伤害时执行来源实体事件:ON_AFTER_OUTPUT_DAMAGE
|
伤害与效果的生效时点:
攻击前、攻击后、成功造成伤害后、受到异常状态前、元素损伤爆发前
机制应用举例:
|
我刚刚闪了个什么?
|
现象:阿的远程攻击触发了因陀罗的近战攻击闪避天赋。
原理:攻击类型属于远程还是近战,是攻击属性数据里面的其中一项,用两位二进制数存储,无是00(0),近战是01(1),远程是10(2),近+远是11(3)。在检查特效是否生效的时候,就用检测条件与远近数据进行“与”运算,之后看是否有变化,比如01&01=01,01&10=00
但是,阿的攻击因为伤害固定,做了特殊处理,伤害类型为00,01&00=00,就很尴尬了。
以及,有弹道的攻击固定为10,无弹道的攻击固定为01,所以无人机的无弹道远程攻击也可能会被闪避。
原理参考:https://bbs.nga.cn/read.php?tid=22540222
|
我红字呢?
|
现象:部分情况下,泥岩的法术护盾存在时,会使其受到的法术伤害吃不到伤害加成。
原理:很明显,这二者在执行时并不会相互调用
先结算护盾时,护盾如果只抵消一部分,伤害倍率提升由于其逻辑只会对抵消后的modifier值生效,先结算伤害倍率提升时,modifier值会被增加,护盾值的扣减也会被伤害倍率提升加成
由于这二者的行为位于一个行动节点,按照鹰角目前的逻辑,其行动会按照其在buffContainer中的顺序(绝大部分时候为添加顺序)进行结算
也就是说,先加护盾,再加易伤,护盾吃不到伤害加成
先加易伤,再加护盾,护盾可以吃到伤害加成
原理参考:https://bbs.nga.cn/read.php?tid=22540222
buff判定与隐匿状态
加buff原理
- 在2020年3月17日的更新之前,方舟中给某个范围内的单位加buff的原理如下:
- 技能开启、有常驻性buff的干员部署时通过buff选择器选中攻击范围内所有能选择的目标。
- 在buff生效期间新单位进入生效区域时通过buff选择器试图选中新单位并加buff。
- 单位离开生效区域,技能结束或干员退场时强制清除目标身上的对应buff。由于这个兜底机制的存在,大部分光环类buff持续时间都是永久。
- 其他情况下基本不更新buff状态。[理论参考 2]
- 在2020年3月17日的更新之后,buff判定机制发生了一定的修改,但原机制仍然绝大部分有效,后文用到时会标注出已经更改的部分。
- 对已存在某buff的单位再次施加同名buff,不论两次的buff之间有无数值差异,在绝大多数情况下只会更新第一次施加的buff的作用时间。
隐匿状态的机理[理论参考 3]
- 隐匿状态下的单位一般无法被敌方的索敌机制和buff选择器选中为目标,直到状态被解除。目前方舟中能处于隐匿状态的单位有:
- 具有隐匿效果的敌方单位
- 守林人的技能“环境伪装”
- 麦哲伦第二天赋“光学折射配件”影响下的无人机
- 进入草地等地形的单位
- 部署动画播放完之前的入场干员
- 隐匿状态受阻挡开关的控制,在被阻挡时会被关掉,阻挡状态解除后3s重新开启。所以,当敌方单位被空降阻挡时,空降的我方单位在播放入场动画时就视为在阻挡状态,不处于隐匿状态,所以相比正常入场的干员会更快的遭受到敌人的攻击。同理,部分召唤物没有入场动画,所以连续部署召唤物主人与此类的召唤物时,召唤物将会先受到攻击。
- 目前方舟中使用能选中隐匿状态单位的buff效果包括三种:针对隐匿状态开关的[需要验证 1],无视隐匿状态起作用的和中立单位的效果。
- 针对隐匿状态开关的buff:银灰·天赋:鹰眼视觉,极境·技能:聆听,月禾·技能:迹无,敌方侦察兵和反隐装置的反隐buff[需要验证 1]。
- 无视隐匿状态起作用的buff:莫斯提马·天赋:主观缓时、安洁莉娜·技能:反重力模式的重量下降buff、寒霜的攻速下降、御4的防御力提升[理论参考 4]。
- 中立单位起作用的效果:地火的灼烧,源石地板的攻击力增加和血量减少等。
- 无敌状态和隐匿状态的区别只体现在对于伤害无敌方面[需要验证 1],不会受到星熊/年的反伤、毒雾的扣血等对隐匿状态起作用的伤害,但buff机制与隐匿状态无大区别。
机制应用举例:
|
在睡眠之歌里蹦迪
|
现象:1.当隐匿敌人在进入空的“睡眠之歌”作用区域后因为被阻挡而显形不会使敌人进入睡眠状态。
2.在三秒显形时间内使敌人再次进入作用区域时,会进入睡眠状态,但隐匿恢复后的敌人会解除睡眠状态。
原理:
- 在以隐匿状态进入buff区域后被阻挡显形无法触发目标更新机制,不会受到buff的影响。
- 此内容已在2020·3·17的更新中被修复
- 由于“睡眠之歌”的buff作用的单位不会移动,所以其作用方式不同于离开范围就消失的光环类,是通过频繁施加一个持续时间很短的buff实现的。在敌人恢复隐身后,buff无法再次选中隐身单位,故原有buff时间结束后就会解除睡眠状态。
原理参考:https://bbs.nga.cn/read.php?tid=20535163
|
叠满debuff的三级弑君者&龟速霜星
|
现象:1.在弑君者位移前摇时施加buff,如果位移后离开buff范围,则该buff在干员在场的情况下可无视攻击范围,技能时间等限制无限持续。
2.满足现象1的弑君者再次踏入同名buff中后,该buff在干员不在场的情况下也可无限持续。
3.延伸:用上述同样的办法,让霜星获得了永续停顿状态,移动速度降低到0.1的下限。
此内容已在2020·8·25日的更新中被修复
原理:暂缺[需要验证 1],尚不知位移技能逃脱范围外判定的机理。
现象参考:https://www.bilibili.com/video/BV1hi4y1G7Vh
https://www.bilibili.com/video/BV1qz411v7Nb
|
死得早的下路大盾
|
现象:蓝毒对多个高物抗低法抗敌人使用一技能时,对副目标造成的伤害可能比主目标大
解释:由于同一个目标上的同种buff,若在效果消失前被重新施加,只延长持续时间而不改变其他效果,所以在此例中毒伤的伤害量完全取决于第一次毒伤的攻击力。
蓝毒第一次攻击主目标是普攻,而第一次攻击副目标是技能发动时的散射,有攻击力提升的buff,所以对副目标的毒伤会大于对主目标的毒伤。当面对物伤抛光的敌人时,对副目标造成的毒伤可能会大于对主目标造成的毒伤和普攻抛光伤害之和。
现象参考:https://bbs.nga.cn/read.php?tid=20554606</ref>
伤害计算
显示算法
明日方舟里,伤害在实际计算时均保留小数取精确值,只有在显示时四舍五入至整数位
在计算之前,先复习一下攻击buff的种类:
A为面板攻击buff(词缀为+X%攻击),所有同类型buff为加算
B为攻击倍率(词缀为造成相当于Y%攻击力的伤害)
C为最终攻击倍率(词缀为攻击力提升至Z%攻击力的伤害)
红字的计算过程:某个单位(敌我均可)造成伤害时,
- 先计算A类buff后的面板攻击力,即“自身面板攻击力×(1+X%攻击)+友方面板攻击力×友方技能倍率”这一公式得出的结果,记为A。
- 用A的攻击力攻击敌方,在防御/法术抗性和抛光机制的影响下能够造成的伤害记为Xa。
- 再在A基础上考虑B、C类buff的加成,即“A×造成Y%伤害×攻击力提升至Z%”这一公式的计算结果,记为B。
- 最后引入降防/降抗和增伤buff,计算以B的攻击力对削弱后的目标造成的伤害、记为Xb。
- 若Xb>=1.5×Xa,则显示Xb的红字。
- 因为0>=1.5*0,所以0也会显示红字。多见于本可以造成红字非0伤害而被无敌或者免死能力等抵消的情况。另一方面,如果这次本可以造成红字的伤害被闪避,则当次伤害则会以黄字MISS显示。
计算举例
目前,非支援合约加成下的最大单次红字伤害为:PR-B-2中,格劳克斯在防空符文上打出的49940[作战记录 1]
计算过程:
- A=格劳克斯的面板563*(1+不稳定血浆0.9+爆发剂·榴莲味0.5+天使的祝福0.08)+战斗之歌385=1781.24
- Xa=A×(1-目标的法抗0)=1781.24。
- B=A×防空符文对空倍率1.7×二技能对无人机技能倍率8=24224.864
- Xb=B×钙质化1.55*虚弱化1.33×(1-目标的法抗0)=49939.55714
- Xb>1.5×Xa,所以显示红字,最终显示结果为Xb进位后的49940。
目前,支援合约加成下有记录的最大单次红字伤害为:龙门 新街中,断罪者打出的126722[作战记录 2]
计算过程:
- {[断罪者攻击力888*(1+阿榴莲针50%+华法琳血怒90%+诗怀雅天赋36%+近卫小车天赋20%)+(空攻击力385×(1+阿榴莲针50%+华法琳血怒90%))]×合约加成200%×伤害倍率800%-狂暴宿主士兵防御力200}×慑砂天赋116%×W天赋121%×巫恋天赋(1+(33%×一技能1.8))=126722.131
非支援合约加成下的最小单次非零红字伤害为:5-6中,刻俄柏打出的1[作战记录 3]
计算过程:
- A=((220-高爆弹头210)*(1-碎甲箭-扩散0.35)*(1-聆听0.25)*(1-诅咒娃娃0.5))*刻俄柏剥壳0.4=0.975
- Xa=A×(1-目标的法抗0)=0.975。
- Xb=B×钙质化1.5*(1-目标的法抗0)=1.4625
- Xb>1.5×Xa,所以显示红字,最终显示结果为Xb=退位后的1。
相关链接
理论参考:
实战参考:
行动与坐标相关
触发位移
- 当敌方单位(不包括装置等)受到一个任意来源的力,并且受力>0时,该敌方单位将进入失衡(UNBALANCE)状态机(以下简称“失衡”)。
- 刚进入“失衡”的单位将激活刚体,进行相关的物理运算,并参照下述原则进行位移
- “失衡”后,单位会有0.1s的“失衡硬直”
- “失衡硬直”期间无法解除失衡状态机——哪怕已经没有被移动或者受力。
- “失衡”会一直持续到下述条件任满足为止:
- 单位持有了失衡免疫异常效果
- 单位是飞行单位(包括但不限于陷入浮空或处于近地悬浮状态)
- 单位速度≤0.1m/s或仍处于“失衡硬直”期间
- 单位被强制切换至其他状态机(例如复活、触发技能,常见于boss单位与强制触发技能敌人)
- “失衡”结束后,单位将取消刚体,并不再进行物理相关的运算。
- 下面的讨论默认被讨论对象处于失衡中
为了方便计算起见,下面的叙述会对游戏内的数值进行一些单位假设
受力分析
|
环境模型
|
- 所有物理计算均在一个二维平面内进行
- 所有的敌人被视为质量为1kg的圆形刚体
- 方格的边长为1m
- 垂直于平面的重力加速度g=9.81kg/m·s²
- 平面的动摩擦因数μ=0.5
|
特性
|
力具有一些特殊的特性,分别为:
- 受力等级 : 由力度对应表和目标的重量可以得到一个差值,这个差值为受力等级
- 方向性 : 分为两种径向和方向,方向力在满足一定条件情况下会变为径向力。
- 作用时间 : 见下文。
|
推力
|
拉力
|
- 作用时间:瞬间,可以直接视为目标得到了一个大小等于“实际受力×1s”的动量
- 方向性:推力的方向性通常为方向,但也存在径向的推力。
通常来说,常见的推击手特种干员均施加方向推力,除此以外的均施加径向推力。
- 受力等级:力的列表值可以根据实际受力等级在游戏数据表中找到,实际受力大小=数据表值*0.01。
- 若干员使用抛射物造成,首帧将立刻被推动,且不会受到本帧摩擦力影响。(见下文)
|
- 作用时间:如果受力等级<-1,作用时间为0.5s,否则作用时间为1s
- 方向性:大部分情况下为径向,且均向着干员方向,拉动期间将持续修改这个力的方向向心。
- 受力等级:力的列表值可以根据受力等级在游戏数据表中找到,初始受力大小F0=数据表值。
- 拉力实际为一个绑定的,持续变化的推力,若导致变化的角色撤退,该力将自然摩擦——与推力效果一致。
|
方向推力
|
径向推力
|
拉力的绑定机制
|
将目标沿着设定的方向推动。
- 若一个目标与干员的连线和部署方向的夹角大于45°,或该目标与干员的距离小于0.25格时,对该目标施加的力将改为径向推力,且受力等级-2
|
将目标沿着干员向自身中心点的射线方向被推动。
- 少见的,薄绿存在着向中心推动的效果,也同样属于本类。(不属于拉力)
|
与推力不同,造成拉力的干员会与产生拉力的抛射物进行绑定,若拉动提前停止抛射物也会提前消失,若抛射物提前消失,拉动也会终止。
- 默认情况下抛射物均为5s持续时间,且命中无法拖动单位时不判定“已经拉到目标”,必须等待5s抛射物默认持续时间结束才能结束拉动。
- 拉动的方向虽然看似是永远径向向心,实际上在受到拐角冰面影响后,将强制变为方向的拉力且不会再被本次拉动改变方向。
|
实际力的大小(N)
|
列表值
|
受力等级
|
列表值
|
实际力的大小(N)
|
0 |
0
|
≤-3 |
0 |
0
|
1 |
100
|
-2 |
2 |
2
|
2 |
200
|
-1 |
10 |
10
|
4 |
400
|
0 |
40 |
40
|
4.5 |
450
|
1 |
42 |
42
|
5.3 |
530
|
2 |
44 |
44
|
5.8 |
580
|
3[注释 1] |
46 |
46
|
由FΔt=mΔv可以计算出目标的初速度,之后目标在平面上做匀减速运动直到停止。
|
拉力的大小在运动过程中会不断的产生变化,在默认情况下,开始运动后t时刻的拉力大小为:
F(t)=F(0)*(x(t)/x(0))^4
其中,x0为当钩爪命中目标时,目标与干员的距离,x(t)则为t时刻时目标与干员的距离。
|
行动基本原理
敌人的行动由在起点坐标和终点坐标之间一系列“行动”和“停驻”的指令组成。
- 敌人在起点坐标出现时,位于方格正中心,终点坐标的判定点是位于终点格中心的一个半径不大的圆。
- “行动”指令会让当前目标沿路线移动到指定位置,有两个参数:“Position(位置)”和“ReachOffset(偏移量)”,确定好参数后当前目标便会根据SPFA寻路逻辑以自身移速向目标点移动。
- “位置”参数是一组坐标,用于确定目标方格的位置。
- “偏移量”参数也是一组坐标,用于确定目标点相对于格子中心的偏移量,也影响行进过程中的路线偏移。
对于绝大部分移动这个参数都为零,可以忽略,但也有一些移动利用这个偏移量实现了“贴墙走”的效果。
- 即使“行动”指令的目标点偏移量为零,在行动结束后目标的位置也不在方格正中心。
- “停驻”指令的效果是让当前目标在当前坐标保持不动,只有一个参数“Time(时间)”。
- “时间”参数是一个精确到小数点后一位的秒数,用于确定停驻时间。
- 敌人到达其路径的终点后进入Reach_Exit的状态机,并进行相关结算(绝大多数情况为“进入蓝门”后扣除目标生命值)。
- 特别的,敌人具有的isUnharmfulAndAlwaysCountAsKilled参数为true时,意味着该敌人在抵达终点后不会扣除目标生命,且永远视为目标已处理(已处理敌人数量+1)
此项为true的敌人多用于部分需要保护的中立单位或者部分地图的演出效果(如GT-1中有一名因为剧情需要回头报信的士兵,在一段时间的停顿后回到了侵入点)
在大部分敌人出生或从停驻状态开始行动之前,会出现一条提示红线(或者代表飞行单位的黄线)将这些敌人的具体行动路线在地图上绘制出来。
- 因为空降兵可以降落在地图特定位置,无人机可以从地图外进场,所以侵入点并不是所有敌人的路线起点,而有些地图也确实没有侵入点。此类空降敌人的提示线一般会从其着陆位置开始。
- 绝大多数敌人的路线终点都是保护目标点,但侵入点和保护目标点本身仅作为标识作用,不提供任何敌人路径相关的功能(简单来说红蓝门在功能上就是个摆设)。
- 这会代表某些侵入点处可能不会生成任何敌人:于DM-MO-1中,右侧的所有敌人于原地生成,而非从侵入点出生再移动到右侧。
- 也代表者敌人路径的终点可以不是保护目标点;DM-3中有三名萨卡兹穿刺手红线标注的终点是保护目标点,但实际终点却是保护目标点旁的地穴。如果利用浮空机制将这些穿刺手救出地穴,那么他们将在抵达地穴中心时进行到达终点的结算,会正常扣除目标生命值。
- 一些不从侵入点出发而是直接出现在地图上的敌人在行动前可能不会有红线指示。
特殊地块机制
传送行动的本质[1]:敌人进入传送通道入口判定点→进入停驻+隐形状态(与干员无法攻击但视觉可见的隐匿状态区分)→停驻一定时间→瞬移至通道出口处并继续行动。
- 敌人行动进入停驻+隐形状态时,判定模型依然存在于传送入口的位置。
- 隐身前锁定其为目标的攻击不会丢失,在7月9日修复前,位移能使其强制显形[理论参考 3],显形后不会重新隐形。
- 停驻+隐形状态下不会被阻挡,无法被选中为目标,不会执行“返航”指令(见下文“行动受阻的处理机制”一节),也不会主动攻击。
- 如果在被阻挡时进入隐形状态,也会立即停止攻击并解除阻挡状态。
如果传送门之间距离过短,停留时间过短,这一段位移可被“正比于距离的真实伤害”识别并造成伤害。于7月9日的修复后,在0.33秒内的位移超过4格时,这段位移将不会被识别。
地穴地块:任何判定点被判定为进入地穴方块的敌人都会进入消失的状态机,从而立即判定为死亡。
- 判定为死亡后,任何以其为目标的攻击都会无效,自然包括攻击带来的位移、眩晕等附加效应,所以这也是在浮空机制实装前,龙门市区剿灭空降兵原理上无法被救出的原因[作战记录 1]。
- 地穴判定是只要识别立即触发的,所以不存在“由于位移力度过大导致敌人飞跃地穴”的情况。
- 地穴与SP回复:第六章修改
进入不可通行地块时的处理机制
进入不可通行地块包括进入可攻击地形、进入受阻地形两种情况。
- 可攻击地形包括箱子,显影装置等可以被敌方近战单位攻击的地形。
- 由于触发敌人近战攻击的原因是“阻挡优先索敌”机制,故尚未或无法被阻挡的单位不会攻击这些地形。
- 箱子可以认为是一个血量为100,防御为0的单位,但因为敌方单位最低攻击也有130,所以会被任何它阻挡的敌人的一次攻击干掉。
- 显影装置可以认为是一个无敌的单位,被它阻挡的敌人将会持续试图攻击它,直到脱离阻挡或者被干掉为止[作战记录 2]。
- 受阻地形,指其他对敌方单位的行动有阻挡效应的地形,包括地图中的各种高地、栏杆、提前进入的传送通道、控制终端[作战记录 3]、震撼装置等地形都属于受阻地形。
- 当敌人进入受阻地形时,会被给予一个立即执行的“返航”指令:缓慢移动到最近的可通行地形上。
- “返航”指令执行期间会按顺序覆盖掉原有行动的指令轴,返航完成后会继续通过寻路逻辑完成未被覆盖的指令。
覆盖量基于返航操作所用时间计算,如返航操作持续了15s,那么就会覆盖掉15s的停驻时间。
如果一次停驻时间不足就按顺序继续覆盖,直到完成覆盖或停驻时间用尽为止。
由于“行动”指令是否结束不是根据时间判断,所以持续时间视为零,遇到了就会立即被覆盖。
- 如果返航后发现没有能够前往下一个目标点的可用路径,将会继续处于偏航状态并停止所有动作[1]。
举例:1-12的W[1]
1-12的W的开头部分行动
|
操作序号
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7
|
行动类型
|
行动 |
行动 |
停驻 |
行动 |
行动 |
停驻 |
行动 |
行动
|
相应参数
|
(0,5) |
(1,5) |
(15.0s) |
(1,6) |
(2,6) |
(35.0s) |
(5,6) |
(7,6)
|
备注
|
此点为侵入点 |
|
|
|
|
此时W进入传送通道 同时被附加隐形状态 |
此时W走出传送通道 |
|
如果在不同的时间段将W推入附近的受阻地形,则会分别有以下效果:
- 在第一次停驻(操作2)结束前的任意时间将W推入受阻地形,停驻时间内放出:
- W会在原地停留至停驻时间结束后继续运动。(操作1将被跳过)
- 保证第一次停驻(操作2)结束后W仍然在停驻状态,第二次停驻(操作5)开始前放出:
- W会立即原地隐身(操作3、4将被跳过),在第二次停驻结束后瞬移至(5,6)。
- 保证第二次停驻(操作5)开始前W仍然被我方干员阻挡在停驻状态:
- W会立即停止移动,原地进入隐形状态,我方干员也不会继续阻挡W。在隐形状态被强制打断后W才会继续返航指令。
- 我方干员碰撞体积基本均为以0.25格为半径的圆形。在2020-6-2的修复前,伊芙利特的碰撞体积为半径为0.1格的圆形,这使得她可以在H7-4中间的高台上与爱国者二阶段面对面而不被打。
- 干员阻挡任何从其他方格进来的敌人时,敌人停止时二者碰撞箱并不紧密接触,敌方的碰撞箱并不在我方干员的格子内。
- 远程干员由于没有“优先攻击阻挡单位”的特性,无法攻击阻挡的单位。
- 位移特种干员的位移操作只会将自己攻击范围内的敌人识别为目标,从其他方向过来的敌人虽然并不在攻击范围内。
- 但由于阻挡的仇恨机制会触发位移干员的攻击,此时位移干员的自动触发位移技能就会出现“反复释放但不造成伤害”的现象。
- 向一个已经有敌人的格子空降干员时,敌人会强行移到到圆形外,移动方向为以干员圆心为起点,连接敌方干员中心点方向的一条射线。
- 位于方格正中心的敌人,在空降时不会移动。由于行动机制,这种情况只发生于在起点停顿的敌人。
- 在其他情况下,只有当这种位移现象发生时,敌我碰撞箱才紧密接触。
- 敌方单位的远程攻击判定点是自己影子的中心为起始点,我方单位的远程攻击判定点则是干员的碰撞箱。
- 当远程攻击判定点进入对方的攻击范围时,就会遭到对方的远程攻击。
弑君者的瞬移操作机制:当弑君者被阻挡时,
- 首先判断当前指令是否是“行动”和技能CD是否冷却完成,
- 然后判断自己判定点与当前行动指令目标点连线上,距自己1.5格的地方是否为不可通行地块。
- 如果上面三条都满足瞬移要求,则向当前行动指令目标点连线方向移动1.5格,并短暂的进入不可被阻挡状态。
瞬移没有前摇,过程持续15帧,并有10帧的后摇,期间无敌。
- 弑君者瞬移操作如果需要跳过自己下一个停驻点所在的地块,则会同时跳过停驻操作[理论参考 5]。
相关链接
理论参考:
实战参考:
代理运行与判定机制
代理失误的可能原因
干员能力提升
- 录制代理后影响代理的主要元凶,各个方面的提升(等级、技能等级、信赖等)均可以导致升级后代理翻车,其共同点是在干员能力提升后,出现了相应的衍生事件,对原代理的某个或某些次级时间轴产生了扰乱。这些情况包括并且不局限于:
- 干员每精英化1级一般会增加1~2点部署费用,导致原本卡费部署的干员在升级后出现部署费用不足,一些卡点下人的操作无法准时复现,因此推迟整个操作时间轴。
- 本来由撤回先锋完成的杀敌回费,由于周边干员攻击力提升从而被抢了人头,收不到应有的费用,导致部署费用不足。
- 提升自动触发技能的等级,SP需求降低(例如拉普兰德的狼魂、能天使的过载模式等),或者提升SP供应相关天赋或技能(阿米娅天赋、塞雷娅的二技能专精)导致自动技能轴与战局不对齐。
- 代理不保存的某些顺序,(如维什戴尔的普攻溅射顺序),该顺序改变可能影响好礼的触发。
- 技能提升导致的效果提升(比如特种主动技能的力度变化)。
- 过早杀死作为阻挡/攻击/受击回复SP来源的敌人,从而缺少SP无法准时开启技能。
- 技能升级只增加持续时间,而不减少SP需求时,连续卡点释放技能造成的误差累积。
- 需要特定单位激活地图装置的场合,干员或召唤物的排布与回收不对应战况,导致地图装置未能正确激活。
- 过早击杀关键节点的敌人(爱国者一阶段、剿灭节点敌人)导致下一波提前来临,或者未能控制某特定敌人的击杀位置(比如冬灵血巫)导致非预期结果(如地图装置反转、自爆眩晕了本不该被眩晕的单位)。
- 过早清理阻挡位,从而导致原计划中需要利用阻挡饱和而放过去的敌人,在提前清理阻挡位后反而将其挡住。
- 人口排满时,代理储存的干员死亡后在其他位置部署,而在干员能力提升后不会死亡,而又没有对其施加撤退指令。此时就会因为人口部署已满而无法部署另一处的干员。
- 随机天赋的提升或新获得改变代理判定(如精二陈的第二天赋进行的大量闪避判定)或改变索敌
- 更换皮肤导致的弹道延迟差异:初见于安洁莉娜皮肤“质素访客”上,由于法杖顶端位置与原皮肤的位置差距,导致新皮肤对于距离自己近的目标,其弹道飞行时间比原皮肤少一帧(远端则是多1帧)[理论参考 1]。此外白金的皮肤也出现了类似的状况
- 解决办法:重打。
丢帧
- 经大量测试,明日方舟一般情况下是以帧为单位判断攻击动作,技能的冷却等操作的,因此如果由于各种原因(常见的问题如手机或电脑模拟器性能问题导致的丢帧),使得游戏在运行时无法在一倍速模式下维持30帧每秒的帧率,则会导致丢帧现象的发生,可能导致某些效果释放失败,扰乱时间轴,严重者可导致代理失败。举例就是,一倍速下进行的操作,在二倍速运行的代理中就可能因为丢帧翻车。
- 当代理作战在二倍速模式下播放时,为了防止丢帧问题,需要游戏稳定维持60帧每秒的帧率,自然对设备性能提出了更高的要求,这种情况下的丢帧现象也更为常见。通常说的代理偶尔失败在排除上述情况之后一般原因都是设备性能波动引起的。在一些需要极限操作的作战记录里丢帧的影响可以非常大。
- 解决办法:要么保持一倍速,要么修改作战记录以留出更大的容错空间。
版本更新
- 1.霜星有关的代理上:4-10、6-16、H6-4,也就是部分玩家抱怨的“4-10因为掀地板不能稳定代理”。
- 这两个关卡的代理,霜星的掀地板是可以稳定保存的,除非干员能力过度提升导致整个战局发生了肉眼可见的变化(比如原代理霜星死在第二行,提升后反而死在了第一行)而版本更新由于需要重新下包安装,代理过程的种子会改变,从而导致霜星掀地板的位置变化,新的代理可能会掀掉关键位置的干员而翻车,又或者不会掀掉关键位置的干员从而卡住部署人口。
- 2.关卡5-10,在第六章更新后由于敌人技能释放优先级和sp回复方式[需要验证 1]的改变,5-10浮士德的攻击次序由原先的每5动1紫箭,变为了现在的每4动1紫箭,从通道口出来第一箭也变成了紫箭,这使得快速复活吃箭的代理在再部署时间上非常吃紧,或者由于练度不够导致一些干员无法吃箭。
- 解决办法:如果你需要去这些关卡刷素材,每次版本更新的时候去验证代理。
代理指挥对帧误差
代理指挥与玩家正常操作间常会保持有一帧的时间误差,有较小概率会导致失误,甚至卡出bug。重打一遍一般能够解决此类问题
代理指挥复制玩家操作的工作原理是:
- 将最后一次保存代理时的全部手动操作(部署、撤退、手动技能、手动装置)保存为按帧排列的序列,并在代理运作时复现。
- 如果如果出于某种原因(见“容易出现代理失误的情形”章节),其中部分操作无法复现,就会将所有无法复现的操作按顺序放入存储序列,并在任何条件变化时扫描整个存储序列,执行任何可以完成的操作。
条件变化包括:费用变化,部署人数变化,存储序列变化等。两次扫描之间间隔为一帧。
- 如果同时有多个操作满足复现条件,则会按顺序在一帧之内复现。
由于“复现”本身也使存储序列发生了变化,所以任何操作复现完成后的下一帧也会重新扫描并更新存储序列。
- 只要存储序列不为空,就会出现黄色标注:“检测到失误风险”。
- 只要在代理期间出现敌人进入保护目标点导致防御点数减少,无论是否出现过黄色标注,都会出现红色标注:“代理指挥已出现失误,请求人工接管作战”。所以代理完全复刻了你的手动操作,而前脚代理正常运行,后脚代理报红的现象是完全可能的。出现此情形时请向上翻阅“代理失误的可能原因”。
举例
这一操作的目标是利用代理作战,使得红使用两帧完成部署和撤离。
第一步:设计并调整行动序列:
某次LS-4代理作战行动部分序列
|
行动序号
|
1 |
2 |
3 |
4 |
5 |
…… |
12 |
13 |
14 |
15 |
16 |
17 |
……
|
行动内容
|
部署红豆 |
部署蓝毒 |
部署空 |
部署凛冬 |
红豆阵亡 |
…… |
部署巡林者 |
空使用技能 |
部署近卫小车 |
部署红 |
撤退巡林者 |
撤退红 |
……
|
剩余部署位数量
|
8→7 |
7→6 |
6→5 |
5→4 |
4→5 |
…… |
2→1 |
- |
- |
1→0 |
0→1 |
1→2 |
……
|
并且通过手动代理的方式,将撤退红(行动17)的时间调整到撤退巡林者(操作16)的两帧之后。
第二步:提升红豆练度,使红豆避免阵亡,此时代理序列变成了:
某次LS-4代理作战行动部分序列
|
行动序号
|
1 |
2 |
3 |
4 |
…… |
11 |
12 |
13 |
14 |
14 |
15 |
16 |
……
|
行动内容
|
部署红豆 |
部署蓝毒 |
部署空 |
部署凛冬 |
…… |
部署巡林者 |
空使用技能 |
部署近卫小车 |
部署红 |
撤退巡林者 |
部署红 |
撤退红 |
……
|
剩余部署位数量
|
8→7 |
7→6 |
6→5 |
5→4 |
…… |
1→0 |
- |
- |
0→-1 |
0→1 |
1→0 |
1→2 |
……
|
原本的第14步操作“部署红”由于部署位不足无法复现,被放在了存储序列里,而当“撤退巡林者”这一操作执行后,“部署红”满足了操作条件,所以在巡林者撤退的下一帧被部署。
由于原本“撤退巡林者”和“撤退红”之间只相隔一帧,所以当“部署红”移到这一帧后,代理的结果就是红在两帧之内完成了部署-释放狼群-撤退的效果,从视觉上表现为一帧秒杀虫群。
原理参考:https://www.bilibili.com/video/BV1bE411X7fW?p=1
- 每次开始作战的时候会产生一个不同的随机数序列,而如果一次作战被保存为了代理作战,这个序列也会被随之保存下来。
- 换句话说,这次代理作战的任何衍生作战(代理中途取消代理手动操作)也都使用这个随机数序列。
- 这个序列会被用于所有作战时进行概率事件的判定并在代理运作时复现。
目前可以确定使用随机数序列的概率事件包括[注释 1]:
- 所有的闪避类判定
- 所有的暴击类判定
- 艾雅法拉的乱火
- 华法琳的血怒的随机对象选择
- 能天使的“天使的祝福”随机对象选择
- 霜星的“掀地板”判定(在无任何(包括霜星攻击我方干员)外界干扰(也就是一路不接敌走过去)的情况下)
- 阿的四选一攻击效果判定
- 雷蛇/华法琳的充电对象选择
- 空的安可天赋
- W的惊吓盒子地砖选择
举例
在进入代理并手动接管后,我们得到了一个随机数字序列,为了方便起见我们假设其为1-100范围内的随机整数,在某次实际通关过程中它的结果可能是这样的:
目前没有证据表明游戏内数值完全按照下述方法生成和判定,但根据目前测试本方法得到的结论和游戏内效果表现一致。
计次
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35
|
随机数(X%)
|
17 |
47 |
86 |
3 |
93 |
2 |
81 |
96 |
4 |
50 |
70 |
95 |
10 |
18 |
36 |
12 |
9 |
33 |
6 |
49 |
6 |
79 |
46 |
13 |
25 |
33 |
7 |
20 |
94 |
76 |
99 |
81 |
10 |
15 |
7
|
伊桑-特性闪避 (X%≤50%)
|
Y |
Y |
N |
Y |
N |
Y |
N |
N |
Y |
N |
N |
N |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
N |
Y |
Y |
Y |
Y |
Y |
Y |
N |
N |
N |
N |
Y |
Y |
Y
|
红-处决模式闪避 (X%≤40%)
|
Y |
N |
N |
Y |
N |
Y |
N |
N |
Y |
N |
N |
N |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
N |
Y |
N |
N |
Y |
Y |
Y |
Y |
Y |
N |
N |
N |
N |
Y |
Y |
Y
|
伊桑-天赋缠绕 (X%≤25%)
|
Y |
N |
N |
Y |
N |
Y |
N |
N |
Y |
N |
N |
N |
Y |
Y |
N |
Y |
Y |
N |
Y |
N |
Y |
N |
N |
Y |
Y |
N |
Y |
Y |
N |
N |
N |
N |
Y |
Y |
Y
|
槐琥-天赋击退 (X%≤20%)
|
Y |
N |
N |
Y |
N |
Y |
N |
N |
Y |
N |
N |
N |
Y |
Y |
N |
Y |
Y |
N |
Y |
N |
Y |
N |
N |
Y |
N |
N |
Y |
Y |
N |
N |
N |
N |
Y |
Y |
Y
|
断罪者-断罪 (X%≤5%)
|
N |
N |
N |
Y |
N |
Y |
N |
N |
Y |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N
|
注意,这里的判定结果随机数序列虽然无法精确测出,但也不会因为接管了代理而变化,可以利用代理时携带的干员测试得到大概区间范围。
如果我们想实现某位干员的某种随机效果连续生效的效果,需要首先把这次代理的随机数序列测出来,然后选择一段离要求较近的随机数区间,最后利用其他干员将不满足条件的随机数用掉即可。
实例一:[作战记录 1]
我们假设想要实现12F每次闪避成功率50%的十五连闪,需要在上述序列中找到一个接近成功的序列,即第13次开始的标红序列:
计次
|
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28
|
随机数(X%)
|
10 |
18 |
36 |
12 |
9 |
33 |
6 |
49 |
6 |
79 |
46 |
13 |
25 |
33 |
7 |
20
|
12F-天赋闪避 (X%≤50%)
|
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
N |
Y |
Y |
Y |
Y |
Y |
Y
|
在测试完成后手动代理,在触发12次概率判定后启动阿的技能,并在攻击9次之后用其他干员触发一次闪避判定,所有的12F闪避都会被判定成功。
由于阿的十五连击速度为每帧一次攻击,所以某影视剧中的名台词“他的招式一共有72帧,而破绽就出现在第42帧上”确实出现在了实践中
三拳打死梅菲斯特,就需要这三拳全部触发5%概率触发的800%伤害效果。经过和上面类似的过程后我们决定取第4次开始的标蓝序列:
计次
|
4 |
5 |
6 |
7 |
8 |
9
|
随机数(X%)
|
3 |
93 |
2 |
81 |
96 |
4
|
断罪者-断罪 (X%≤5%)
|
Y |
N |
Y |
N |
N |
Y
|
将第5、7、8次闪避判定用其他干员用掉即可达到效果。
理论参考:https://www.bilibili.com/video/BV1KZ4y1j7hS
相关链接
理论参考:
实战参考:
与帧数有关的机制
攻击前摇指从攻击动画开始播放到攻击出手的时间,而攻击出手之后的攻击动画部分称为攻击后摇。
前摇在实战中的应用包括帧级别操作时提前量的计算和利用前摇打断取消攻击效果两种应用。
示例:暗杀萨卡兹哨兵
[作战记录 1]
萨卡兹哨兵检测到自己受伤之前会保持“锁血”状态,但检测到自己受伤之后又会立即发动警报技能,难以处理。
经测试,警报技能属于状态转换类技能,且有两帧的前摇,所以是可以通过打断这一前摇来避免警报触发的。
由于哨兵有眩晕免疫效果,故可以算准前摇,使用位移技能强制打断。[作战记录 2]
刚才提到了“攻击出手的时间”而可以避免了“造成伤害”的说法,是因为对于一部分远程攻击来说,从攻击发出到目标受伤是由时间差的。
由于这些时间差在游戏里一般是通过发射物的运动时间来表示的,这里称呼这个时间差为“弹道时间”。
也就是说,对于存在弹道时间的攻击,从攻击动画开始到造成伤害的时间差等于前摇+弹道时间。
由于弹体位置也是按帧判定的,所以可以根据测试得到弹体飞行匀速的结论,和轨迹形状无关。
举例:守林人核弹最速下落[作战记录 3]
帧对齐机制对攻速的影响
明日方舟的时间单位下限是一倍速下的一帧,即1/30s,当计算得到的时间不是整数帧时进行的取整机制即为“帧对齐”机制。
在2019年12月24日更新之后,帧对齐机制从原先的“非整数帧一律进一取整”更改为了“非整数帧一律四舍五入取整”。
机制应用举例:
|
安洁莉娜三技能的spine对比
|
示例一:能天使潜能与过载攻击次数差异:[理论参考 4]
现象:
(a) 能天使无论潜能,在12月24日更新前都只能在一个过载周期内打出21次攻击
(b) 12月24日更新后,三潜能天使能在一个过载周期内打出22次攻击
解释:
(a) 非三潜攻击间隔为0.696s,三潜攻击间隔为0.678s,在12月24日之前的帧对齐逻辑下均会取整为0.7s(21帧)
而15秒减去0.3秒左右的首次攻击抬手后,按照0.7秒的攻击间隔可以打出21次攻击。
(b) 12月24日更新后非三潜攻击间隔为0.696s,会取整为0.7s(21帧),而三潜攻击间隔为0.678s,会取整为0.6667s(20帧)。
而15秒减去0.3秒左右的首次攻击抬手后,按照0.6667秒的攻击间隔可以打出22次攻击。
但是,对于干员的攻击流程来说,抬手动画和攻击动画时长是无法被压缩的,所以攻速提高的效果就表现在了攻击后的读秒阶段上。
而当攻击后的读秒阶段为负,或者攻击动画循环播放而攻击速度与攻击动画周期不同,就会出现输出不稳定的情况。
但是,目前四舍五入的对齐机制并不能完全概括所有情况,有部分干员的攻击相比该机制存在误差。[理论参考 5],在更新前的对齐机制也不是简单的进位[理论参考 6],还需要研究。
在技能释放后,绝大部分技能不能马上开始sp回复过程或者接受充电(除推进之王),此时的表现一般为sp条变为橙色且逐渐减少、技能图标被橙黄色且逐渐减少的方块覆盖。
根据这一阶段“无法回复技力点”的特征,我们称其为“阻回时间”。
比如银灰的真银斩虽然技力值需要90,但是有30秒持续时间,这段期间是既不自回也不接受其他充电(外界技力恢复)。所以这30秒技能持续时间也相当于银灰的真银斩有30秒阻回时间。
- 根据测试,阻回时间完全等于相应技能的动画长度,但黄条显示时间被错误的设定为了攻击间隔[理论参考 8]。
- 当自身的攻击速度提高/降低时,黄条显示时间也会变短/变长。
- 推拉特种干员的技能阻回时间 = 抬手动画 + 弹体飞行(时间随距离变化) + 位移时间(时间随力度差变化) + 收手动画[理论参考 9]。
- 动画时长
Spine小人与动画触发
方舟中大部分攻击依赖于spine动画,spine动画是一种骨骼动画,通过将小块的“零件”绑定到“骨骼”上,制作成模型,然后调整“骨骼”来达成比较逼真的动画效果,同一个模型可以拥有多个不同的动画。而对于每个动画,制作者只需要制作“关键帧”,并做好骨骼的设定,中间的补间会由程序自动完成。
至于小人在作战中的攻击触发,则主要由“发射点”和“事件帧”两个设定决定。
“事件帧”是留给动画外程序的端口,动画外程序可以检测特定“事件帧”的播放来在特定时间点上执行特定的任务,例如能天使的攻击事件帧是在铳喷火的时候触发,所以每次攻击都是在铳喷火的时候执行,看起来就跟因为铳发出了子弹所以打到人了一样。而对于大部分攻击来说,所谓的"前后摇"就是从攻击动画播放开始到事件帧触发以及从事件帧触发到攻击动画播放结束所需要的时间。
“发射点”是留给弹道攻击动画的起点,方舟大部分带有弹道的攻击需要有一个弹道的发射点。这个发射点可以在小人的任意部位,但每个发射点需要绑定spine动画中的一根特定的骨骼,才可以作为发射点发射投掷物。
不过由于动画和骨骼结构等的区别,不同皮肤之间事件帧、发射点都可能存在差异,其中的一小部分会经过与各种机制的联动对作战产生肉眼可见的影响。
机制应用举例:
|
安洁莉娜三技能的spine对比
|
这段回来再整理
对于方舟来说,大多数(之后会讲到例外)攻击就是在检测到攻击动画中"OnAttack"事件发生时执行的
举个例子说的简单点,就是把能天使的OnAttack事件帧放到铳喷火的时候,所以每次攻击都是在铳喷火的时候执行,看起来就跟因为铳发出了子弹所以打到人了一样
而对于大部分攻击来说,所谓的"前后摇"就是从攻击动画播放开始到"OnAttack"事件以及从"OnAttack"事件到攻击动画播放结束所需要的时间
攻击是否依赖spine动画事件会由一个名为waitForAttackEvent的变量决定
当攻击动画中无OnAttack事件时,该变量强制为False
方舟的攻击速度也可以依赖很多种因素,这个由一个名为timeMode的变量控制
timeMode=0 为 FROM_ATTACK_SPEED。即攻击冷却依赖于攻击速度。至于怎么让动画适应间隔是别的变量的内容。典型例子是各类普攻。
timeMode=1 为 FROM_ANIMATION。即攻击无条件依赖于动画,与攻速无关。动画按默认速度播放,不受攻击间隔影响。典型例子是绝影。
timeMode=2 为 SPECIFIED。即攻击冷却需要指定,与动画攻速均无关联。典型例子钙质化,柏喙扔飞刀,爱国者的真伤光环
而当攻击间隔依赖于攻击速度时,默认情况下会让攻击动画拉伸(最长maxAnimScale倍)或收缩(最短0.1倍)以适应攻击间隔
但有一种名为channeling情况例外
这种情况的共性是是,会在一段时间内始终保持一个动作进行攻击,而不是像正常攻击中一样会在常态动作和攻击动作中切换
原因是因为其加载了一个特殊的动画模板用于保持一个动作循环播放,而这个动作不被攻击模板所调用,因此会保持默认速度播放
很明显,安洁的2,3技能都属于channeling
同样属于channeling的技能还有很多,例如精神爆发,奇美拉,火山,脑啡肽,钙质化等等
那么说了这么多,为什么安洁的技能会出问题?
首先,安洁的攻击waitForAttackEvent变量为True,而且她2,3技能动画中真的有有效的攻击事件。这意味着正常情况下安洁的攻击只能在动画关键帧进行
其次,安洁的攻击依赖攻速,这意味着她本应去调整攻击动画的长度使其适应攻击,调整不了时用默认动画填充
最后,安洁在技能期间属于channeling,这意味着她的动画只能按默认速度循环播放,不能被调整长度,不能被插入默认动画
这三者缺一不可的共同作用造就了安洁的奇葩bug
安洁技能期间的攻击只能在特定的时刻进行,而这个时刻又不依赖攻速
这样一来,能够进行攻击的时刻只能是攻击循环动画长度的整数倍,而堆积的攻击行为会在一个时刻多次进行
这就是安洁2,3技能攻速不稳定的真正原因
理论参考:https://bbs.nga.cn/read.php?&tid=21970478
示例二:安洁莉娜攻速不稳定的解释:[理论参考 10]
现象:
(a) 反重力模式攻击间隔为1.9/108×100×30=52.78帧(对齐后为53帧),但实际攻击间隔在42和56之间变化。
(b) 微粒模式攻速是(1.9×0.15)÷108×100×30=7.91帧,帧对齐后为8帧,但实际的攻击间隔为2~14帧的随机数
每次微粒模式都完全不同(但是可以被代理复制具体的随机波动),但平均攻击间隔和理论值8帧相等。
解释:
(a) 微粒模式和反重力模式共用的循环播放攻击动画时长为7帧前摇+7帧后摇=14帧,由于动画时长无法压缩,所以只能每14帧检测一次是否需要进行攻击。
反重力模式下,最接近理论攻击间隔53帧的周期长度为4个周期(56帧),但这样攻击4次后,由于误差累积,下一次攻击在第3个周期(42帧)就会打出来,导致了攻击间隔浮动。
(b) 类似的原因,微粒模式即使每次动画播放都攻击一次,在4轮动画后也需要攻击5次,所以在第四次攻击后两帧第五次攻击自动触发,导致攻击间隔差异。
相关链接
理论参考:
实战参考:
干员和敌人的独特机制
这一节内容涉及范围很广,本人收集难免有遗漏,如果有补充内容欢迎交流。
这一节内容涉及范围很广,本人收集难免有遗漏,如果有补充内容欢迎交流。
技能时间
- 对于纯粹增加面板类型的技能,其完全在技能期(阻回时间内)生效,这会产生这样的效果:
- 真银斩类技能如果攻击前摇中时间结束,那次攻击会是一次带有技能特效的普通平a,这一点在莫斯提马身上最为明显(因为群法攻速太慢)
- 反过来,在黑等狙击干员射出一发箭后再开启技能,这发射出去的箭也会受到技能加成(使用黑的基本技巧之普攻加倍率)。
- 对于基于自身属性的BUFF类技能(最典型的为战斗之歌),开启全程效果会以开启时自身的攻击力为准,无论过程中自身的buff变化如何(战斗之歌保鲜术)
- 一个爆发技能如果被buff,这个buff是在伤害瞬间判定
- 所有干员的攻击在命中前撤离都会失去其天赋效果。
DM-EX-3 <萨卡兹穿刺手组长>移速叠加上限
yj程序员偷懒,导致需要原地停顿170s的<萨卡兹穿刺手组长>的移速叠加上限从25层变成了25+170×2=365层
基于攻击目标的判定bug
- 猛男安塞尔:将被治疗目标的位置作为“自身”额外治疗的起点。这会让安塞尔的绷带被扔出超过10格的距离。
- 银灰强力击
- 煌强力击[作战记录 1]
技能空放效果
- 断罪者
- 手动启动的一次性攻击技能攻击型技能,在攻击范围内没有对象时,无法在手操作战时启动技能,但是却可以被代理作战开启。
- 液氮大炮[理论参考 1]
闪避,格挡与吸收盾
效果 |
荆棘 |
击回 |
充电 |
真伤
|
闪避 |
√ |
? |
? |
?
|
格挡 |
√ |
? |
? |
√
|
夜莺护盾 |
? |
? |
? |
?
|
自动防御 |
? |
? |
? |
?
|
闪灵护盾 |
? |
? |
? |
√
|
- 虽然看起来闪灵夜莺是对位的,但是夜莺二技能是法术盾,闪灵二技能是不分物法的真伤盾。
- 此外吸收盾按盾容分类,可以分为次数型(抵挡下n次伤害,如年第二天赋、雷蛇1技能)和数值型(抵挡共n伤害)
- 类似于南瓜壳,此类吸收盾在耗尽前,其本体不会受到任何影响(如雷蛇无法在套有闪灵盾的期间受击充电)
- 此类吸收盾在受到伤害时会出现护盾的特效。
被动画吞掉的攻击
阻挡数的相关互动
- 阿消/食铁兽推目标数错误(食铁兽是推等同于自己阻挡,可与年互动)
- tag的影响[理论参考 3]
装置的敌友加成
- 刻俄柏第二天赋加成会收到召唤物影响,包括赫默无人机,我方设施(侦测器已证实,箱子已证实,喧闹法则中的中枢和充电桩已证实)不会受到弩箭台,冰晶,冰封地板影响
- 刻俄柏天赋计算的阵营错误[理论参考 4]
- 支援弩炮加攻bug:支援合约忘了筛选弩箭这类Trap类型的装置[理论参考 5]
不是单纯的隐身,而是不会被选中
待汇总
- 抵抗是瞬时计算(直接作用于剩余debuff,效果结束立即恢复减益衰退速度)机制。
- 自爆虫的头朝向不同爆炸范围也不同,推测为位置判定问题
- 莱恩哈特释放二技能时不计入扩大范围内的隐身敌人[理论参考 8]
- 推力地板不加成水炮
- 巫恋和赫默的召唤物:都无阻回,但赫默无人机赫默撤退还在,巫恋不行,targetvalidator中有对于这个category的筛选,绝大部分buff都只能加给普通类别而不能加给赫墨无人机的trap类别
- 凛冬与撤离减费[理论参考 9]
- 当刻俄柏的一技能““很冰的斧””有充能时,攻击敌人前会先进行一次普通攻击再释放技能。若普通攻击命中,但技能未命中,则显示充能层数[不返还],但实际充能层数[返还]
- 阿的十五连发开始后就不会被除退场之外的任何情况打断,同时其目标获得buff时只需要第15针到达,期间受到的伤害可以被闪避而不影响buff加成[理论参考 10]。
- 灼地吞伤害[理论参考 12]
- 夜魔二技能效果debuff多次施加会单独叠加计算而非延长
- 攻回技能的释放错误[作战记录 3]
- 麦哲伦/送葬人与碰撞箱的错误[作战记录 4]
- 推进之王天赋错误(3技能阻回失效)
- 因陀罗天赋错误(闪避远程和友方伤害)[理论参考 13]
- 年铁御贴图错误(前摇被打断效果不消失)
- 格劳克斯无精英错误(优先攻击无人机)
- 安洁莉娜三技能普攻[理论参考 14]
- 阿消1技能错误(空中单位)
- 因陀罗回血错误(不计算易伤效果)
- 格劳克斯天赋加成错误(二技能)
- 阿消二技能效果:和食铁兽实际描述相同
- 夜魔一技能错误:实际是根据夜魔攻击力计算
引起过注意的已修复历史bug
参见客户端版本
- 传送门水炮秒人:短时间内的超长位移被“正比于距离的伤害”识别(2020.7.9修复)
- 推拉技能“拽出”传送门内的单位(2020.7.9修复)
- 麦哲伦进游戏卡死(2020.6.4修复)
- 伊芙利特碰撞箱(2020.6.2修复)
- 维持技能状态(2020.6.2修复)
- 传送门无敌导致D12留在通道口[作战记录 5](2020.6.2修复)
- 惊吓盒子释放前无法普攻(2020.6.2修复)
- 真理技能攻击数量(2020.4.21修复)
- 安德切尔天赋倍率不正确(2020.4.21修复)
- 刻俄柏“真伤”:天赋的额外伤害不应用敌人的法术抗性(2020.3.17修复)
- 雪雉二段位移:可强行使重型单位失衡(2020.3.17修复)
- 隐匿敌人免buff(2020.3.17修复)
- 寒霜影响赫默无人机(2020.3.17修复)
- 红的技能描述:修复前仅说明物理闪避,但实际上可以闪避法术伤害(2020.3.17修复)
- 二次呼吸:助战配置两名相同干员(2020.2.5修复)
- 敌方sp回复机制(2019.12.24修复)
- 睡眠之歌vs眩晕免疫(2019.12.24修复)
- 白金攻击不稳定(2019.12.24修复)
- 强力击系列bug(2019.12.24修复)
- 麦哲伦再部署不回复无人机库存(2019.10.22修复)
- 天使祝福生效于召唤物(2019.8.27修复)
- 猛男安塞尔(2019.8.27修复)
- 陈无法落地点火(2019.7.16修复)
- 白雪打隐匿[理论参考 15](2019.7.9修复)
- 天使祝福离场保留(2019.7.9修复)
- 箱子封路(2019.7.9修复)
相关链接
理论参考:
实战参考:
待测机制: