生命值
本条目的最后更新时,参考的游戏客户端(简体中文)版本号为2.7.71。
本条目的最后更新时,参考的游戏客户端(简体中文)版本号为2.7.71。
生命值是游戏内单位的基础属性之一。当一个单位生命值归零时,若非特殊情况,这个单位将会离场。
但在内部处理中,因为各种原因,生命值的处理变得比较复杂,这里仅对生命值(“血条”)本身为对象讨论。
截至简体中文2.6.21版本,生命值实际上分为三个部分:常规生命值,溢出生命值,负生命值
常规生命值
通常情况下的生命值,在游戏中表现为我方单位模型下的“蓝条”、敌方单位模型下的“橙条”/“红条”(领袖级单位)。
大多数情况下所指的“血条”即为常规生命值。
- 每个单位的生命值拥有 \(0\) 的下限与其最大生命值的上限。
- 当最大生命值发生变化时,生命值将同时变化,使得生命值比例不变。
- 各类与生命比例相关的判定均判断常规生命值。
- 拥有溢出生命值与负生命值的单位在被获取生命值时仍然会获取到其常规生命值的数值与比例(例如集成战略收藏品“扣挠之手”的基于当前生命比例的伤害,不会将溢出生命值与负生命值加入计算)。
额外生命值
额外生命值是一种独立于当前生命值的生命值,可用于“抗”下对生命值的减损。单位需专门激活额外生命值机制(将额外生命值上限提升至非0%)才能利用额外生命值,因此通常不会看见干员拥有额外生命值。
此机制于将进酒版本所加入,最初用于岁相吸收磷火后的提供的“初始生命”(在游戏中表现为覆盖在原有血条上、从左侧追加的淡色条),后多被应用于治疗溢出机制的处理。
- 可用额外生命值机制的单位会存在与最大生命值相关的额外生命值上限(单位为%),单位默认为0%,启用后通常会改为100%。
- 溢出生命值在仅应用
modifier时被判定,此时其将与常规生命值一同用于计算生命值的增减(如伤害)。
- 生命自然回复属性不使用常规的
modifier逻辑,因此不会与额外生命值产生互动。
- 对于增加生命值的
modifier(以治疗为主),其需要携带特殊 Flag:HEAL_CAN_GENERAL_SHIELD_FLAG,才能让超出生命值上限的部分治疗量转化为额外生命值。
治疗溢出
治疗溢出(或称过量治疗)是对额外生命值机制的一种应用,通常再需要使用此类机制时会临时启用相关单位的额外生命值机制。
- 休谟斯的第一天赋“超出自身生命上限的生命值可转化为屏障”实际有以下这些效果:
- 自身部署后激活额外生命值机制(获得100%的额外生命值上限)。
- 在自身受到治疗效果前,将本次治疗调整为可产生额外生命值(添加Flag
HEAL_CAN_GENERAL_SHIELD_FLAG); - 额外生命值高于0时,生成等同于“溢出量”的屏障(不超过设定的屏障上限),随后以生命流失的形式“消耗掉”所有额外生命值。
- ※如果此时持有收藏品食腐者手杖,食腐者手杖会因为此时额外生命值已耗尽,而产生不了实际伤害了。
- 医生的天赋效果与之类似,自身的治疗应用至我方单位时,令对方获得以下效果:
- 临时激活额外生命值机制(获得9999900%的额外生命值上限)。
- 在自身应用与此效果同来源(医生)的治疗效果时,将本次治疗调整为可产生额外生命值(添加Flag
HEAL_CAN_GENERAL_SHIELD_FLAG); - 额外生命值高于0时,生成等同于“溢出量”的屏障(不超过设定的屏障上限),随后以生命流失的形式“消耗掉”所有额外生命值。
- 受到伤害时,处理屏障效果后,若屏障量耗尽,此Buff结束并关闭额外生命值机制(额外生命值上限变回0%)
曾经的致命伤害判定会将治疗溢出逻辑产生的生命流失加入判定,过于巨大的生命流失量会直接触发复活甲效果。
在该问题修复之前,可以通过医生复现“庸医”名场面之通过“拿错枪”的治疗消耗了目标的复活甲效果。
该问题已在2024年4月11日的更新中被修复。
负生命值
负生命值是一种独立于当前生命值的生命值,可以“贷款”的形式来“抗”下致命伤害。单位需专门激活负生命值机制(将负生命值上限提升至非0%)才能利用负生命值,因此通常不会看见干员拥有额外生命值。 负生命值在单位受到足以致命的伤害时将致命部分累加到负生命值上,直到负生命值占满时才会真正死亡,在表现上相当于以负数值参与计算的一种生命值。
于墟版本所加入,最初用于斩业星熊第一天赋“我执”状态的判定。
在游戏中表现为从左侧开始的暗红色条。
- 负生命值实际是表示“已贷款的量”的正值。
- 处理负生命值时通常会保留1点生命值防止单位直接死亡
- 任何实体类单位均存在与最大生命值相关的负生命值上限,负生命值上限默认为 \(0\times\) 最大生命值;该上限可后续调整。
- 当最大生命值发生变化时,负生命值上限也会一同变化,但负生命值不会随之发生变化。
- 当负生命值上限 \(>0\) 时,计算生命值变动将考虑负生命值的影响,与常规生命值一同计算生命值的扣减(如伤害,此时为增加)或储存(如追加生命值,此时为扣减)。
- 这个计算在重设生命值时被判定,无法被绕过;但可以通过
force属性无视负生命值机制设置常规生命值为 \(0\)。 - 此时具体判定将会发生较为复杂的变化:
- 重设生命值时,若目标值 \(>0\):
①若目标值 \(>\) 当前常规生命值:使用负生命值抵消此次(部分)生命增加并重新计算目标值;
②否则:仅计算在常规生命值上。 - 否则,若目标值 \(\le0\):
①若当前常规生命值 \(>1\):设置负生命值为 \(\lvert\text{目标值}\rvert-\text{当前常规生命值}\);
②否则:设置负生命值为 \(\text{当前负生命值}+\lvert\text{目标值}\rvert\);
Fin:收尾判定:若此时负生命值大于等于负生命值上限,则触发受到足以致命的伤害时(OnBeforeTrySetHpZero)事件。 - 以上计算完成后:
将负生命值clamp到 \((0,\text{负生命值上限})\) 区间。
如果持有不死:区间上限变为 \(\text{负生命值上限}-1\)。 - 设置常规生命值(下限为 \(1\))。
若负生命值 \(=\) 负生命值上限,视为生命值归零。
- 重设生命值时,若目标值 \(>0\):
- 在上述计算后,若负生命值 \(>0\),则常规生命值在大多数情况下会变为 \(1\)。
- 这个计算在重设生命值时被判定,无法被绕过;但可以通过
- 负生命值上限为 \(0\) 时,可以视作负生命值机制处于未激活状态,不参与各类判定。
- 负生命值即将超出上限的情形,大部分情况下等价于未激活负生命值时,常规生命值即将不高于 \(0\) 的情形(比如触发
OnBeforeTrySetHpZero事件,判定不死等)。
但注意:负生命值上限 \(>0\) 时,在受到足以致命的伤害时(OnBeforeTrySetHpZero)事件中,无法直接阻止当次生命归零行为,此时对应的成功阻止生命归0后(OnPostTrySetHpZero)通常也无法正常生效。
在这种情况下,免死效果几乎无法正常生效。
- 负生命值即将超出上限的情形,大部分情况下等价于未激活负生命值时,常规生命值即将不高于 \(0\) 的情形(比如触发