rimworld吧 关注:234,923贴子:4,140,137

攻击、命中、伤害机制的知识整合与代码解读

只看楼主收藏回复

相信玩家们关于战斗的疑惑在本帖子中都会得到解答。不过目前本帖不涉及对AI、应用的分析。
写贴时版本1.4.3580,可能有遗漏或更新,以后会有楼中楼的勘误
欢迎补充、讨论相关内容
目录:
2楼 前文、省流
3楼 引用链接索引
4楼 攻击机制、权重随机算法
5楼 近战命中、常用的插值随机算法
6楼 远程命中-误差半径
7楼 远程命中-显示命中率
8楼 远程命中-命中率判定流程、”流弹”
9~10楼 子弹拦截、弹道、击中流程
11楼 近战伤害量
12楼 枪弹、箭伤害量、其他种类伤害量
13楼 造成伤害-伤害易伤减伤、处理方式说明与表、常用机制
14楼 造成伤害-非单位、普通类型
15楼 造成伤害-类似普通类型
16楼 造成伤害-独特类型、气体全解



IP属地:天津1楼2023-01-15 14:57回复
    二楼留着方便前排插入楼中楼,日后引用重要的补充。
    首先本帖内容参考并引用了大量其他吧友、UP主、英文wiki的资料。
    感谢他们对边缘世界的研究。
    来源链接将在三楼单独列出,以防被吞,如果被吞将在此楼楼中楼留下索引。
    之后会将本帖内容概括地做成视频记录下来,链接也将发在此楼楼中楼。
    正文事无巨细地记录下来了所有发现,看得懵圈的可以看看省流或以后发的视频
    省流:
    1. 只有利器护甲减伤时才会将伤害改为钝击伤害。
    2. 动物觅食时第一击强制命中,击昏7秒,包括野人觅食。
    3. 有误差半径的远程武器在近距离下会转变为用命中率的射击。
    4. 近视的代码设计使之距离26格时命中率骤降到2%,怀疑是BUG
    5. 在远程射击中,墙的体型为200%
    6. 因目标卧倒而无法命中的射击,不会形成流弹。
    7. 因掩体而无法命中的射击,会射到掩体上,不会形成流弹。
    8. 流弹50%概率注定无法击中任何单位。
    9. 流弹会以射手实际瞄的地方为中心散布,例如目标的延伸受击格,而不是目标本身。小人会优先选取北格和东格,所以流弹总是偏向东北边。
    10. 流弹不会飞向背后。
    11. 不计体型再计算命中率,越高,流弹散布越小,但至少偏移一格。
    12. 剩下50%的流弹落到有敌人的格子时,打中该敌人的概率为50%*体型因素*卧倒
    13. 子弹飞行5格以内不会被拦截,除非撞上护盾。飞行5~12格,距离倍率由0~100%渐变。
    14. 子弹途径的任何单位的接子弹概率=40%*体型因素*卧倒*友伤设置*距离倍率
    15. 流弹途径的填充率>20%的建筑的接子弹概率=填充率*距离倍率*15%。邻近终点时不用乘最后的15%,简单来说身边的掩体还有额外的阻挡流弹效果。
    16. 像是手榴弹的爆炸也会产生热量。
    17. 大部分近战武器的穿透=1.5%*伤害量,但像单分子剑就不是这样。
    18. 传奇近战武器伤害量*165%,远程*150%,远程武器精度*150%
    19. 等离子剑的刺与割50%概率会造成10火焰伤害,人格武器则是70%概率。
    20. 反粒子弹头有距离伤害衰减。
    21. 大部分机械集群的建筑对屋顶崩塌有额外伤害抗性。
    22. 类似火焰、爆炸的伤害高于15时,会分裂成2~4份。
    23. 护甲损失的耐久不受皮实、坚韧减免。
    24. 钝击、捅对有皮肤的部件造成的伤口是瘀伤,瘀伤不会形成疤痕。
    25. 是否形成疤痕,在受伤的那一刻就注定了,无论治疗效果多好也无法避免。
    26. 如果”殖民者直接死亡”调成0%,就算是用速射机枪处决、帝王业火炮轰炸也绝对不会当场死亡。
    27. 允许向外穿透的伤害,如枪弹、爆炸,打中骨头或内脏会同时伤害所有包括该器官的部位。(如命中脑子会伤害脑子、颅骨、头)
    28. 钝击类型会同时伤害骨头,摧毁肢体时溢出伤害将转移到连接的根部位,伤害躯干和头部时有概率击昏。
    29. 刺类型有概率强制瞄准骨头或内脏,并对所有包括该器官的部位也造成伤害。
    30. 割类型有概率伤害多个附近的随机部位。
    31. 抓类型会打2个部位。
    32. 火焰伤害对易燃性≥30%的目标必定点燃。
    33. 无论室内室外是否有屋顶,都无法改变气体的消散速度。


    IP属地:天津2楼2023-01-15 14:57
    收起回复
      IP属地:天津3楼2023-01-15 14:58
      收起回复
        一、攻击
        进行攻击行动时,根据装备武器、是否有射线、是否用随身炮塔等条件决定能进行哪种攻击。
        (涉及代码TryStartAttack等)
        其中值得一提的是:
        (1) 每种攻击都具有伤害类型,指的是钝击、捅、割、刺、枪弹、箭等。像是有用锤头钝击、用锤柄桶、用头槌钝击。
        (所有近战的伤害类型可以在开发者模式中选择opendebug logging menu,再选择tools,capacities列查到)

        注意不要与后文的对应护甲、处理方式、伤口混淆
        1.对应护甲是指伤害类型要经过其中一种护甲减伤,也有不被护甲减伤的伤害类型,如冻伤。

        2.处理方式是指代码在造成伤害的过程中通过种种不同的方式形成伤口,其中分为普通类型、割类型、钝击类型、刺类型等等。像是捅、刺的伤害类型属于刺类型的处理方式,枪弹属于普通类型。
        3.伤口是指留在单位健康面板上的持续生效的状态,如火焰伤害和灼烧伤害都会造成烧伤伤口,烧伤会带来较高的疼痛,割伤的失血速度较快。
        (2)动物进行觅食时的第一次近战攻击属于突袭攻击,强制命中成功,强制闪避失败,且附带7秒的击昏。(默认7秒,影响因素见近战伤害章节)

        (3)近战有多种攻击招式,如拿着锤子时可能会用锤头和锤柄,还可能会用头和牙齿攻击。
        另外如果攻击者所在位置可以进行地形攻击(踢沙之类的),那么有固定4%的概率进行地形攻击。
        (ChooseMeleeVerb)
        细节如下:

        (图片来源 ①号帖子2楼)
        (4)远程射击需视线成立,视线的起点在射击者格子中心的正右方0.175格处,而终点可以是目标受击范围内任意格的正中心。(起点不在正中心也是视野不对称的成因)
        其中非炮塔单位(如人类、机械族、动物)的受击范围为所在格加上下左右四个邻格,总共五格,炮塔与建筑物的受击范围为所有所在格。
        如下图绿格为盾螳的受击范围,女魔头这边的紫点是视线起点,盾螳这边的紫点是视线终点,兰线为视线,不经过墙。

        视线不能穿过墙与阻挡视野的建筑。可探身时,视线起点可移至邻格,探身细节可看本帖子38、39楼,或b站视频BV1uW4y1x7xC。
        (来源详见 ②号帖子23~28楼)
        需要特别注意的是,有多个可受击格能作为视线终点时,按照中、北、东、南、西的优先顺序选格。有多个有效探身方向时,按东、西、南、北的优先顺序选方向。
        (TryFindShootLineFromTo)
        另外说明一下权重随机算法,如随机选择A,B,C之一,A权重为1,B为2,C为3,则权重总和为6,选择A的概率就是1/6,B是2/6,C是3/6。


        IP属地:天津4楼2023-01-15 14:59
        收起回复
          二、命中
          (1)近战命中:
          1.首先进行命中率的判定,如果攻击是突袭攻击、或目标不能动,命中强制成功。
          近战命中率=加成对应命中率*年龄乘数+夜战
          计算加成对应命中率,首先统计加成,从0累加各项加成:
          格斗技能每级提供1;视觉、操作能力每比100%多1%提供0.12,最多提供6,每少1%扣0.12;特性格斗者额外+4;文化DLC首领的战斗命令+3,格斗专家本身+8,狂暴恍惚再+8。

          累加的加成经过插值变换到命中率(低于-20时得5%,高于60时得98%),一般显示时是四舍五入。

          rimworld中常用插值算法,通常用来在两个区间之间建立线性关联的数值关系。
          参考上表,值0~10的区间对应50%~80%的命中率区间,实际值越接近10,命中率就越接近80%。假如值为9,具体命中率为50%+(80%-50%)*(9-0)/(10-0)=77%
          如下图值为19,则落入10~20的区间,对应80%~90%精度区间,具体命中率为80%+(90%-80%)*(19-10)/(20-10)=89%

          拥有生物技术DLC时,年龄乘数在3~4岁时等于5%,4~12岁之间为5%~80%的插值,12~13岁之间时为80%~100%的插值,大于13岁时等于100%。没有该DLC时直接取100%
          夜战为文化DLC中特有的因素,规则与下图描述一致,注意这里只看目标的情况。后文闪避率同理。

          如果未命中会在战斗日志中显示类似下图的记录。

          2.命中判定成功后,进行闪避率的判定

          如果攻击是突袭攻击、或目标不能动,闪避强制失败。目标在进行瞄准或射击等行动时闪避也强制失败。
          闪避率=加成对应闪避率+夜战
          计算加成对应命中率,首先统计加成,从0累加各项加成:
          格斗技能每级提供1;移动能力每比100%多1%提供0.18,无上限,每少1%扣0.18;视觉能力每比100%多1%提供0.08,最多提供3.2,每少1%扣0.08;特性敏捷+15;文化DLC格斗专家本身+8,狂暴恍惚再+8。

          累加的加成经过插值变换到命中率(低于-5时得0%,高于60时得50%)

          如果成功闪避会显示”闪避”,并在战斗日志中显示类似下图的记录。

          3.若命中成功且闪避失败,则对目标造成伤害。
          4.无论是否造成伤害,对目标造成1.583秒的减速,移动速度降至原来的17%,目标如果有不可阻挡基因(生物技术DLC)可免疫此减速。
          (Verb_MeleeAttack.TryCastShot)


          IP属地:天津5楼2023-01-15 15:01
          收起回复
            (2)远程命中:
            首先检查武器是否拥有误差半径,没有的话直接进行命中率判定。
            最终误差半径=误差半径*迫击炮偏移率*距离修正
            误差半径取值与武器面板显示一致

            操纵迫击炮射击时,取迫击炮的误差半径,一般是9。

            当玩家在叙事者难度自定义中启用了经典迫击炮,迫击炮的误差半径便会变为13

            操纵迫击炮射击时,迫击炮偏移率为炮手人物面板的对应值。非迫击炮射击则取100%。
            堆操作能力可以把迫击炮偏移率降得很低,如果恰其他药物还能堆更高。

            计算距离修正时,测量射手与目标的直线距离(一般都是两格的中心连线)
            距离<3时,距离修正=0
            3≤距离<5时,距离修正=50%
            5≤距离<7时,距离修正=80%
            7≤距离时,距离修正=100%
            最终误差半径>1时,进行落点偏移计算:
            先以目标为中心以最终误差半径画圆,计算圆内有多少格,并随机抽一格作为落点。
            如果是集群火箭发射塔,会将所有火箭的落点均匀地分布在范围内。
            当落点经过偏移计算,还处于目标格时,那么落点无效并进行命中率判定。
            处于非目标格时,形成误差偏移子弹。
            例如EMP手榴弹误差半径为1.9,3格内距离修正为0直接当成正常射击,5格内距离修正50%,使最终误差半径为0.95,低于1,也当成正常射击。
            只有离五格及以外远才是”九格平均分布”的误差偏移子弹,不过其实并不平均,因为当好不容易命中目标时,结果会无效,并当成正常射击重新结算。
            投掷5格远时,可能会扔到误差半径1.9*0.8=1.52格以内的范围里,斜边为1.41格远,所以可以像下图里扔到目标的左上侧格。


            IP属地:天津6楼2023-01-15 15:02
            回复
              最终误差半径≤1、或落点偏移后仍然选中目标格、或武器没有误差半径时,进行命中率判定。
              不过还是先解释一下游戏中显示的命中率,实际的命中率判定流程大体上也符合显示命中率。
              显示命中率=X*目标大小*掩体*卧倒
              X=射手精度*武器精度*天气*烟雾*处决+夜战 (X下限为2.01%)


              (部分来源 ②号帖子11、12楼)
              射手精度=(射击精度*精度距离修正*年龄修正)^距离
              射手精度的下限为2.01%
              一部分影响因素在人物面板上列出,其中:
              射击技能每级提供1;视觉能力每比100%多1%提供0.12,最多提供12,每少1%扣0.12;操作能力每比100%少1%扣0.08;特性冷枪手+5,乱开枪-5;辅瞄器+3;射击灵感+8;文化DLC首领的战斗命令+3,射击专家本身+7,射手命令给其他人类+4。
              累加的这些加成经过插值变换到射击精度(低于-20时得70%,高于60时得99.9%)

              另外炮塔的射击精度在炮塔的面板上直接显示出来了,也不用算以上有的没的。
              接下来计入面板上不列出的影响因素:
              射手拥有生物技术DLC的近视基因时,精度距离修正在距离≤25时等于100%,25<距离≤40时,修正为中与远的插值,距离>40时,修正等于25%。没有该DLC时直接取100%
              (当然具体表现是距离只要比25大,近视的射手精度就直接归2%,怀疑为BUG)

              拥有生物技术DLC时,年龄修正在射手3~4岁时等于5%,4~12岁之间为95%~98%的插值,12~13岁之间时为98%~100%的插值,大于13岁时等于100%。没有该DLC时直接取100%
              最后射手与目标之间有多少格直线距离,射手精度就等于射击精度的多少次方。像是25格的射手精度等于24格的射手精度再乘以一次射击精度。
              武器精度在距离≤3时与贴近值一致,3<距离≤12时在贴近与近之间插值。
              12<距离≤25,25<距离≤40时同理,40<距离时武器精度与远值一致。
              关于面板是怎么算出来的,可以看④号链接(BV1eR4y127Hs)

              射手和目标格只要有一个没有屋顶覆盖,就会受到天气影响。
              雾天、雾雨为50%
              雨、雪、暴风雨为80%
              烟雾固定为70%,射线经过烟雾即受到影响。
              夜战为文化DLC中特有的因素,规则与下图描述一致,注意这里只看目标的情况。

              单位的目标大小与面板体型显示一致,瞄准地面时取100%
              建筑的目标大小为填充率*占地长*宽*2.5
              (建筑的填充率大部分情况下等于它的掩体效果,当填充率=100%时,掩体效率置75%)
              (在开发者模式中选择opendebug logging menu,再选择thing fill percents即可看到所有建筑的填充率)
              此项>2时,取为200%;<0.5时,取为50%。
              目标倒地且距离≤3.9时触发处决,固定750%。
              目标倒地且距离≥4.5时触发目标卧倒,固定20%。


              IP属地:天津7楼2023-01-15 15:07
              回复
                本楼介绍实际的命中率判定流程
                1.当攻击可以产生流弹时,进行一次只有(X*目标大小)部分的命中率判定,X值计算过程详见七楼。
                命中后继续下一步;
                未命中时形成流弹,且流弹以视线终点格为中心画圆,半径长与X值有关,流弹落点在圆边上随机分布,实际分布情况可以通过开发者模式查到,如下表:
                (注意视线终点格与目标格不一定是同一格,⑥号链接提到的地转偏向力就是如此形成,流弹中心格优先选择了目标的北邻格)

                (更多的概率通过选择opendebug logging menu,再选择wild miss results查到,注意这里的散布概率是只测了相对目标格的单方向单格)
                细节部分:圆半径长的最大值由X值插值得到,如下表:

                在半径长度范围内随机取一个非整数值作为半径长,画圆后随机在圆边上挑一个点,此点所在格即选作流弹落点。
                如下图,因为本体被墙挡住,所以优先选择北格为视野终点,包含绿色的格子就有概率成为落点,可以理解为以每格的面积为权重随机选择落点,(假设X值是62%,半径长度范围为1~1.51格)

                在视线起点处画视线的垂线,流弹落点如果随机到垂线的另一侧(不包括垂线上),则重新随机选一个流弹落点。可以理解为射手不会射到自己背后。如下图,射手在墙左格,向上探身,则墙↖格为视线起点,流弹不会落到兰线的左侧。

                流弹有50%概率不能击中非目标的单位(即不会打到任何人)。
                如下面两张图,显示”o”的格子代表该格无法拦截子弹,一般是空地显示”o”,但触发不能击中单位机制的流弹也会显示”o”。没有触发时会正常显示拦截概率。

                (另外这里最左上角的敌人是目标,由于流弹也一定无法击中目标单位,所以也显示”o”)
                2.目标不为空地且目标可从掩体中受益时,继续再进行一次(掩体%)概率的随机判定
                命中后形成预期子弹,选择目标作为落点格
                未命中时形成掩体偏移子弹,选择掩体所在格作为落点,如果有多个掩体就以掩体效果作为权重随机选取一格。如下图情况只有14%概率能命中目标格,15%命中路障格,20%命中30%墙格,50%命中75%墙格

                顺便一提炮塔已经可以从掩体中受益了

                注意当目标建筑占地不止一格时,目标格取建筑正中心的格子
                中心位于两格之间的边上时,目标格取该建筑默认放置方向时的左侧或下侧格,中心处于四格之间的点上时,取左下侧格,并且该方位会随着建筑的旋转放置而旋转。(也有一些建筑有例外,以实际情况为准)
                不过流弹在此种情况下的判断又不一样了,流弹的落点中心一般是取建筑的”原点”,参考③号帖子链接的41~46楼。
                因此视线和弹道有时会分开很离谱的程度,可以出现下图的奇葩情况,虽然正面挡的死死的,但通过左侧漏出的视线能看到建筑的部分所在格,即形成视线,但弹道以建筑物中心为终点。

                看到这里应该能理解只有同时通过(X*目标大小)概率与(掩体%)概率判定的子弹才能射向目标,与显示命中率大致一致,但缺了卧倒因素。这个因素将下一节中讲到。
                (Verb_LaunchProjectile.TryCastShot、AimOnTargetChance_StandardTarget、HitReportFor)


                IP属地:天津8楼2023-01-15 15:09
                收起回复
                  (3)子弹拦截、弹道、击中机制
                  (在开发者模式中选择open the viewsettings,再选择draw shooting可以观测到弹道拦截概率等细节)
                  代码中对枪弹、手榴弹、炮弹、火箭等等一起处理,这里统称为子弹。
                  子弹发射时,会将单位的身体正中心作为起点,大部分情况下就是所在格的正中心,在探身射击时则是探身方向侧的边的中点。

                  并会在落点格中央60%的正方形区域随机选一点作为终点,连接起点与终点画线作为弹道,
                  注意这个弹道与前文的视线不是同一条线。
                  根据弹道计算出预计子弹飞行时间,当子弹飞行了对应时间后正好抵达终点,并进行着弹计算。
                  子弹飞行过程中每1/60秒检查一次是否撞到护盾,一切子弹经过护盾都会被拦截(当然前提是符合护盾规则的才拦截,比如射入射出和阵营规则。迫击炮弹对应高角护盾)
                  子弹每抵达一个非终点的新格子都会进行一次拦截判定,判断是否子弹是否中途便击中事物,步骤为:
                  1.当距离倍率=0时,拦截判定强制失败。
                  距离倍率在子弹飞出去5格及以内时为0,12格及以外为100%。在5~12格范围内时,计算距离的平方,在25~144范围内为0~100%插值,

                  如上图黄金地板区域为中央小人的无误伤区域,白地板区域为最大的互相之间无误伤站位
                  2.对新格子上每个”可击中”的事物计算拦截概率。(事物顺序不清楚)
                  “可击中”事物条件:
                  事物不能是射手、该种子弹要能击中该事物(如迫击炮炮弹不能击中任何事物)、事物不能被另一个事物盖住(如100%填充率建筑可盖住其他事物,高度更高的事物可以盖住低的)
                  预期子弹默认只能击中目标事物与非目标的单位,如果目标为空地或100%填充率建筑,那么该预期子弹不限制击中类型。
                  掩体偏移子弹不能击中目标事物,除非它是100%填充率的目标建筑。
                  流弹50%概率不能击中非目标的单位(与八楼讲到的是同一件事)。一定不能击中目标事物,除非它是100%填充率的目标建筑。
                  误差偏移子弹默认不限制击中类型,但有50%概率不能击中目标事物与非目标的单位,除非它是100%填充率的目标建筑。
                  3.事物为填充率100%的建筑且它不是开着的门时,子弹会被该建筑拦截。
                  (建筑的填充率大部分情况下等于它的掩体效果,当填充率=100%时,掩体效率置75%)
                  (在开发者模式中选择opendebug logging menu,再选择thing fill percents即可看到所有建筑的填充率)
                  4.事物为单位(如人类、机械族、动物)时
                  拦截概率=40%*体型因素*卧倒*队友误伤因素*距离倍率
                  单位的体型因素与面板体型显示一致,下限为0.1,上限为2。
                  单位倒地时触发卧倒,固定10%。
                  当单位为自己人或盟友,子弹可误伤队友时队友误伤因素等于叙事者难度中的友军伤害,此项可在叙事者难度自定义中看到,而不可误伤队友时等于0。

                  距离倍率为第1步提到的
                  5.当事物为填充率>20%的建筑时
                  如果它是开着的门,拦截概率=5%*距离倍率
                  如果它不是,则拦截概率=填充率*距离倍率*即将抵达因素
                  即将抵达因素在此途径格是终点的8邻格之一时等于100%,不是时为15%
                  6.其他事物拦截概率=0
                  7.返回第2步判定下一个事物,直到无事物可判定
                  8.如被某事物拦截,则子弹击中该事物。如未被任何事物拦截,则子弹可飞行到下一格。


                  IP属地:天津9楼2023-01-15 15:12
                  回复
                    当子弹抵达终点格时:
                    如果它拥有飞高高的属性(如迫击炮炮弹),终点格拥有建筑屋顶或薄岩顶,则造成屋顶崩塌,终点格拥有厚岩顶时子弹消失。
                    当终点格存在”可击中”的目标,目标为倒地单位且弹道长度≥4.5时子弹有80%概率无法击中任何事物,剩下20%概率击中该目标。目标不为倒地单位时,子弹击中目标。
                    当终点格不存在”可击中”的目标时,对该格所有每个”可击中”的事物计算击中概率。(事物顺序不清楚)
                    1. 事物为单位(如人类、机械族、动物)时
                    击中概率=50%*体型因素*卧倒*友伤距离倍率
                    单位的体型因素与面板体型显示一致,下限为0.1,上限为2。
                    单位倒地且弹道长度≥4.5时触发卧倒,固定20%。
                    当单位为自己人或盟友时,友伤距离倍率才有效,数值等于拦截判定中提到的距离倍率
                    2.事物不为单位时,击中概率=1.5*填充率 (像是道具的击中概率都是0)
                    3.若未击中任何事物,子弹打中地面。
                    4.若子弹击中了某事物、或被某事物拦截,且没有爆炸倒计时(如手榴弹),则对该事物造成伤害或引发爆炸。
                    如果被击中的单位体型≤子弹抑止能力,单位会受到1.583秒的减速,移动速度降至原来的17%,目标如果有不可阻挡基因(生物技术DLC)可免疫此减速。但生物技术DLC中的掘进机被任何子弹击中时都会受到2秒的减速,移动速度降至原来的20%。
                    5.子弹被非单人护盾拦截时,护盾盾值减少(该子弹伤害量)点。
                    举个例子
                    下图中射手瞄准木凳射击,由于大部分建筑物不能享受掩体,所以不存在产生掩体偏移子弹的可能性,没有误差半径也没有误差偏移子弹。
                    图中显示”towild”说明产生流弹,终点为”wild dest”格,弹道为一条14格长的水平直线。
                    弹道前五格距离倍率=0,无拦截判定
                    第六格中只有一个木路障,为填充率55%的建筑,拦截概率=55%*距离倍率*15%
                    距离倍率在第六格为(36-25)/(144-25)≈9.2%,因此拦截概率≈0.76%,与图中相符。
                    第十二格时距离倍率达到100%,拦截概率=8.25%
                    第十三格是终点的8邻格之一,所以即将抵达因素等于100%,拦截概率=填充率=55%
                    抵达终点后,击中该格木路障概率为1.5*填充率,即82.5%,图中显示hit-83%

                    5.各种爆炸效果都是由落点向四周扩散冲击波,冲击波经过的格子内的所有事物都会被爆炸击中并造成伤害(不一定是爆炸伤害)
                    I.火焰被爆炸波及后会立即熄灭。桥被爆炸波及后,如果此爆炸的伤害类型为爆炸伤害,且伤害量≥35则会摧毁桥。

                    II.如果该爆炸拥有点燃概率,则波及到的可燃格有此概率会形成火焰大小随机10~92.5的火焰。
                    III.如果该爆炸拥有产生热量值,则会产生(爆炸格数*产生热量值)点热量,每点热量对于1格房间可以升温1摄氏度。如爆炸伤害的爆炸每格可以产生5点热量。
                    IV.如果该爆炸拥有生成事物概率、种类、时机属性,则波及到的可行走格有此概率会在爆炸前或爆炸后(根据生成事物时机)形成该数量该种类的事物,如燃烧弹爆炸前对2.9格半径内每可行走格25%生成化学液体。但生成气体时也可以在不可行走格生成,如毒气弹爆炸后会在4格半径内都充满毒气。
                    V.如果该爆炸是火焰伤害的,则波及到的可燃格有概率会形成火焰大小随机20~60的火焰。概率由易燃性插值得出,如下表;

                    VI.如果该爆炸拥有融雪属性,根据融雪值减少波及范围内雪的厚度。
                    VII.单位因爆炸受伤后,单位会受到1.583秒的减速,移动速度降至原来的17%,目标如果有不可阻挡基因(生物技术DLC)可免疫此减速。
                    VIII.落点在墙上的情况下甚至可能冲击波穿墙生成,规律是冲击波会朝弹道起点一侧穿墙生成。具体可以看②号链接的60~74楼。

                    IX.帝王业火炮会清除离落点4.9格内地上的灭火剂泡沫,对2.9格内所有事物造成气化伤害,在4.9格内的可燃格地上形成火焰大小随机40~80的火焰。
                    末日火箭会在落点7.8格半径范围内造成爆炸,爆炸伤害,点燃概率40%,爆炸后20%生成化学液体,然后在落点11X11正方形范围内随机选取三个格,在每个格3.9格半径范围内造成爆炸,火焰伤害,点燃、生成概率0。

                    6.如果子弹是手榴弹、火箭等,被护盾拦截时会立即爆炸。手榴弹落地后会开始读爆炸倒计时,一般是1.67秒,并对附近的盟友AI发出警示。
                    火焰箭击中或落地时会在周围生成总计4滩化学液体,在落点生成火焰大小随机50~80的火焰,没有伤害,被护盾拦截时会在被拦截的格子落地。
                    酸液喷吐、泡沫喷吐击中或落地时,会在落点与八个邻格中每格生成1滩废酸或随机1~3滩灭火剂泡沫,并且会对这些格子中的所有事物造成酸蚀伤害或熄灭伤害,被护盾拦截时会在被拦截的格子落地。
                    泡沫发射塔射出的泡沫与泡沫喷吐的类似,只是范围、数量、次数不同。

                    7.火焰大小>100的火焰每(3.17-火焰大小*0.0067)秒扩张一次,扩张时80%概率在8个邻格中生成火焰大小10的火焰,剩下20%概率会发射火花,射击范围如下图所示。另外如果目标格已有火焰,扩张无效。

                    每经过约2.5秒执行如下操作:
                    I.判断格子是否能继续燃烧;
                    II.火焰大小>40且在地上时使格中所有可燃单位身上有概率生成0.2*该火焰大小的火焰,概率=100%-中间值^2.5,中间值由易燃性插值得出,如下表;

                    III.对附着的事物(如果在地上,则是该格内随机一个事物)造成(1.875+0.54*火焰大小,上限7.5)点火焰伤害。
                    如果该事物是单位,火焰大小<40时无效,火焰大小≥40时只能对单位的外层部件造成伤害。如果单位穿着衣服则随机挑一件造成同样伤害;
                    IV.使该格产生火焰大小*1.6点热量,如果该格有门,则只产生火焰大小*0.24点热量(每点热量对于1格房间可以升温1摄氏度);
                    V.40%概率使(火焰大小*0.03)格半径内的雪消融,消融速度与火焰大小和距离有关;
                    VI.火焰大小会自行增加(8.25*附着物易燃性(如果在地上,则是该格内事物最高的易燃性))点,火焰大小最高175;
                    VII.如果当前为雨雪天气且该格无屋顶,则该火焰受到10点熄灭伤害。
                    (全文中对具体时间描述“约”说明该值由哈希值决定)
                    火焰自生成后持续在某块可燃的地板上燃烧175秒后会烧毁该地板。

                    火花也是子弹,落地后如果落点可燃,会在地上形成火焰大小10的火焰,没有伤害。

                    (Verse.Projectile.Tick、CheckForFreeIntercept、ImpactSomething、TrySpread)


                    IP属地:天津10楼2023-01-15 15:14
                    收起回复
                      三、伤害量
                      注意本文伤害含义不仅是会造成肢体生命值损失的情况,还包括造成击昏、中毒、烟雾等情况。
                      (1)近战伤害量
                      1.首先统计该攻击招式的伤害量和护甲穿透,面板伤害量=招式的基础伤害量*品质伤害乘数*材料对甲伤害乘数*肢体效率*成长阶段因素*近战伤害系数
                      护甲穿透=伤害量*1.5% (如果有基础穿透,则=招式的基础穿透*品质伤害乘数)
                      这些项不会在游戏里显示明细,游戏里只显示最终结果。
                      招式的基础伤害量可以通过在开发者模式中选择open debug logging menu,再选择tools看到,power列就是。
                      品质伤害乘数由所用武器的品质得来,品质极差时为80%、较差90%、一般100%、良好110%、极佳120%、大师145%、传奇165%,若招式没用武器则等于100%。
                      材料对甲伤害乘数等于所用武器的材料中“钝器伤害”“利器伤害”的值,若招式没用武器或武器不可制造则等于100%。

                      肢体效率只对肉搏招式和仿生体攻击有影响,等于招式所需的肢体或仿生体的部件效率,如咬看的是牙的部件效率。如果该招式拥有永远可以使用的属性,则肢体效率最低取40%,一般是头槌有这个属性。
                      成长阶段因素在攻击者是人类0~2岁时为50%、人类3~9岁70%、人类10~12岁72.5%(有生物DLC时)、人类13~18岁75%、人类19岁以上100%、动物幼崽昆虫幼虫为50%、动物幼年昆虫成长体为75%、动物成年昆虫成虫为100%
                      攻击者拥有生物技术DLC的擅长近战基因时,近战伤害系数=150%,否则直接取100%

                      注意上述这些因素会改变攻击者手中武器的面板,如下图为一个擅长近战基因、3岁的人类手持的玻璃钢长剑武器面板。


                      长剑的割攻击基础伤害量为23,钝击为9。于是割的伤害量为23*120%*110%*70%*150%≈31.9,钝击9*120%*90%*70%*150%≈10.2。由于长剑招式都没有基础穿透,所以割穿透=31.9*1.5%≈48%,钝击穿透≈15.3%。

                      2.于是对于近战招式命中造成的伤害,伤害量等于该招式面板伤害量的0.8~1.2倍范围内的随机数,带有如前文计算得出的护甲穿透。伤害类型可在开发者模式中选择open debug logging menu,再选择tools,capacities列查到。
                      如果该伤害量<1且是由单位造成的,则伤害量变为1,伤害类型变为钝击伤害。
                      3.此外如果该招式带有额外伤害,则将以该额外伤害量的0.8~1.2倍范围内的随机数再造成一次伤害。目前能造成额外伤害的只有以下情况:
                      皇权DLC中,宙斯锤的锤头钝击能造成9点EMP伤害(即4.5秒)、等离子剑的剑尖刺与剑刃割有50%概率造成10点火焰伤害(人格武器则是70%概率)。
                      4.此外如果此次攻击是突袭攻击,那么再造成(14*肢体效率*成长阶段因素*近战伤害系数)点的额外击昏伤害(默认7秒)。
                      5.所有近战伤害的第一伤害对象只能是外层部件,但可能由于特殊处理方式而伤害到内层部件。(如心脏是内层部件,腿是外层部件)
                      (Verb_MeleeAttackDamage.ApplyMeleeDamageToTarget、DamageInfosToApply)


                      IP属地:天津11楼2023-01-15 15:15
                      回复
                        (2) 枪弹、箭伤害量
                        伤害量=子弹基础伤害量*品质伤害乘数
                        穿透=子弹基础穿透*品质伤害乘数
                        枪弹与箭的基础伤害量可以通过在开发者模式中选择open debug logging menu,再选择weapons ranged,damage列查到。AP列为子弹基础穿透。
                        品质伤害乘数由所用武器的品质得来,品质极差时为90%、较差一般良好极佳100%、大师125%、传奇150%。如果不是用武器形成的子弹,则取100%。
                        (Bullet.Impact)
                        (3) 其他种类伤害量
                        如爆炸、酸蚀、EMP、火焰伤害等的伤害量、抑止能力、穿透基本与游戏预设一致,可以在游戏文件夹根目录\Data\Core\Defs内搜索” damageAmountBase”来查到(查DLC内容需要将Core部分换掉),也可在灰机wiki里查找。
                        其中较为特殊的
                        1.反粒子弹头造成的为特殊爆炸伤害,基础伤害量为550,穿透130%,点燃概率22%。但具有扩散衰减,对于某格计算出该格离落点的距离
                        伤害量=550-440*距离/14.9,穿透=130%-104%*距离/14.9,点燃概率=22%-17.6%*距离/14.9
                        2.对于非机械族单位的中暑与低温症,约每秒执行一次如下操作(游戏一倍速一小时41.67秒):
                        I.当温度>最高适宜温度+10℃时,记温度与(最高适宜温度+10℃)的差值,并以差值如下表插值,中暑严重程度增加(调整值* 0.00645)%,至少增加0.0375%。

                        II. 当温度<最低适宜温度-10℃时,低温症严重程度增加(最低适宜温度-温度) *0.00645%,至少增加0.075%。虫族以慢性低温症代替低温症。
                        III.当温度<最高适宜温度时,中暑严重程度减少(中暑严重程度*0.027),每次至少减少0.15%,最多减少1.5%。当温度>最低适宜温度时,低温症、慢性低温症缓解类似中暑。
                        IV.当低温症严重程度>37%、温度<0℃时,(严重程度*2.5%)概率以部件的易冻性为权重随机挑选一个单位的部件,对该部件造成5点冻伤。
                        (越严重概率越高,部件易冻性默认为1,手指为8,脚趾为10,耳鼻为5,颌为2,头脚为0.5,动物的可以在BodyParts_Animal.xml里查)
                        V.约每七秒,当温度>最高适宜温度+150℃时,记温度与(最高适宜温度+150℃)的差值,并以差值如上表插值,对单位造成(0.06*调整值)点灼烧伤害,最低3点,且只伤害单位的外层部件。
                        3.轨道能量束靶向器的能量束持续10秒,每秒240次选择落点15格半径内的随机一格,对格中每个事物造成四次火焰伤害,伤害量是随机65~100,但对于尸体是随机5~10,如果该格可燃便形成火焰大小随机10~92.5的火焰。
                        4.龙卷风靶向器会形成一个随机移动的龙卷风,在45~168秒内消失。龙卷风约每0.25秒对离龙卷风中心半径4.2格内的所有不在屋顶下的事物造成刮伤,对10格内的随机一格的所有事物再造成一次刮伤,约每0.33秒摧毁半径4.2格内的所有非厚岩顶的屋顶。
                        刮伤伤害量=30*距离倍率*事物因素
                        距离倍率对于半径4.2格判定=(1-0.8*离中心距离/4.2),对于半径10格判定=0.5
                        事物因素对于血量乘数<1的单位=血量乘数(并不等同体型)、对于动物=0.75、对于倒地单位=0.2、对于建筑=0.8、对于物品=0.68、对于植物=1.7、对于岩壁和没有占有的建筑=0。(如果同时符合多项就相乘)
                        5.机械耀螳的激光会根据激光规则选定五格,依次扫过五格,中间如果有墙会拦截激光,但盾无法拦截激光。对每个被扫过格中没有被盖住的随机一个事物造成10点光束伤害,穿透为50%,如果事物可燃,则有85%概率对它形成火焰大小随机55~85的火焰,否则有85%概率对该可燃格形成火焰大小随机55~85的火焰,如果该格不可燃则无法形成。
                        6.手术失败时47.75%概率造成65合计伤害,剩余52.25%概率造成20合计伤害,进行多次伤害,根据击中概率随机选择部位,伤害类型从割、抓、刺、压中随机选一个,伤害无视护甲减伤,造成0.5~1倍部位当前血量值的伤害,重复直到合计伤害达标。
                        此外生物技术DLC里生育规范科技相关的手术失败会有概率造成绝育、10合计伤害。
                        7.尖刺陷阱伤害量=陷阱近战伤害*随机(0.8~1.2)/5,穿透=伤害量*1.5%,伤害类型为刺,一共重复5次。
                        这里列举其他一些比较独特的攻击与数据:
                        (DamageWorker.ExplosionDamageThing、PowerBeam.Tick、Tornado.tick、Verb_ShootBeam.ApplyDamage、RoofCollapserImmediate.DropRoofInCells、SetBodyRegion)


                        IP属地:天津12楼2023-01-15 15:16
                        回复
                          四、造成伤害
                          此部分内容包括来源于目标本身的伤害易伤减伤、各种类型处理方式、护甲减伤、形成伤口。
                          (1) 来源于目标本身的伤害易伤减伤
                          每个符合条件的伤害修正之间都可以相乘叠加。
                          1.首先部分事物对于特定伤害类型有伤害修正,伤害量需要乘以伤害修正。
                          飞船部件(枯萎、灵质)、大部分机械集群的建筑受到的火焰伤害修正为0
                          墙壁类受到的爆炸伤害修正为200%
                          墙壁类受到的共振伤害修正为200%,岩壁类受到的为400%。
                          (共振和爆炸的伤害类型中也有一些对建筑伤害修正,需要与此伤害修正连乘)
                          具有生物技术DLC中火焰抗性基因的单位受到火焰伤害修正为25%,枯木皮肤基因则为400%
                          2.当目标单位带有护盾腰带等单人护盾,且护盾还剩盾值时:
                          I.EMP伤害可以直接击碎护盾,并使单位受到EMP影响。
                          II.枪弹、渗毒枪、箭、高速箭、爆炸、特殊爆炸、共振、光束、远程刺伤害会被吸收,护盾盾值会减少(伤害量*3.3)点,如果剩余盾值<0则被击碎。
                          护盾腰带被击碎后重启需53.3秒,重型护盾装置需要600秒
                          3.承伤系数虽然名义上也该属于这类,但优先级较低,会在后文提到。
                          (TakeDamage)
                          (2)处理方式说明与表
                          大部分的伤害类型以普通类型来处理造成伤害
                          咬、钝击、割、刺、抓、火焰、冻、气化类型以普通类型作为模板,大部分情况可以当成普通类型。
                          击昏、熄灭、气体、电磁脉冲类型是独特的处理方式。
                          此外如果目标不是单位,普通类型将转变为非单位类型,有一些伤害类型直接就是非单位类型处理方式。


                          (DamageDefs文件夹)
                          (3) 常用机制
                          1.部件
                          部件指的是单位的肢体、内脏、皮肤、骨等器官。细节如下图:

                          (图片来源 ①号帖子5楼)
                          I.核心部件为没有父部件的部件,对人类而言为躯干。
                          II.部分外层部件是有皮肤的,会影响伤口类型。
                          III.击中概率由部件之间的覆盖率、覆盖关系得来。
                          IV.机械族是全身固体的。
                          Bodies文件夹中,BodyPartDef定义了部件(比如说手是不是固体有多少血),BodyDef定义了生物整体的部件关系(比如说手是外层部件属于胳膊)
                          2.断肢保护,细节如下图:

                          (图片来源 ①号帖子4楼)
                          这个概率是击毁部件的概率,可以理解为(溢出伤害/部件最大血量)的值对断肢保护区间插值。
                          例如抓的区间为0~70%,如果一次抓正好能将某部件的血量打光,那么击毁概率接近0%,该部件一定能1血幸存。如果某部件最大血量为20,抓对该部件不仅血量打光,还溢出了70%*20的伤害,那击毁概率=100%,该部件一定被破坏。(只要没触发七转续命丹)
                          (ReduceDamageToPreserveOutsideParts)


                          IP属地:天津13楼2023-01-15 15:18
                          收起回复
                            (4) 非单位类型
                            1.如果目标没有耐久度,则伤害无效
                            2.如果目标是门,那么伤害量乘以近战破门系数(只有卫螽和战争女皇的近战此系数为150%)
                            3.结算伤害,将目标的耐久减去伤害量。
                            (5) 普通类型
                            1.如果目标不是单位,则后续转入非单位类型。
                            2.如果伤害类型为火焰、酸蚀、灼烧、爆炸、特殊爆炸、气化、共振,且伤害量≥15,那么伤害将随机分为2~4次造成,伤害量将平均分配。触发这个机制时将无法进行第9步。
                            (如下图为50伤害分为4份,其中炸到脊椎触发第8步额外对躯干追加一次伤害)

                            3.如果没有限制可伤害的部件,则在单位的全部部件中随机选一个部件作为第一伤害对象,如果限制了,则在那些符合限制条件的部件中随机选一个。
                            (各随机概率默认值可以通过健康界面Devtool中的Table: BodyPartRecord info的Hit chance(this part)列查看)
                            另外钝击伤害类型无法选到眼。
                            4.护甲减伤
                            流程整体上符合游戏中描述,如图:

                            细节有:
                            I.手术失败造成的伤害无视护甲。
                            II.只要是覆盖了对象部位的服装就参与判定,在某层伤害无效后结束检测
                            III.只要参与了检测,就在该服装减伤前,对该服装造成(0.25*伤害量)点同种伤害
                            IV.如果对应护甲是利器,伤害类型才会改为钝击,并且不会改变检测的护甲类型,也不会改变处理方式。
                            5.当伤害属于外来伤害时,伤害量乘以承伤系数。
                            皮实基因的承伤系数为75%,而坚韧特性的为50%,脆弱特性的为115%
                            (这三个系数可以相乘叠加)
                            6.进行断肢保护判定,细节见前文
                            7.形成伤口,伤口的伤势=伤害量:
                            I.首先判断伤口是否会形成疤痕,如果是相关部件是仿生体或拥有生物技术DLC里的无痕身躯基因,则必定无法形成疤痕。瘀伤和吸血痕迹也无法形成疤痕。
                            如果是大脑,则直接形成疤痕。如果是眼,则30%概率直接形成疤痕。
                            其他部件受伤(2%*部件留疤率*调整值)概率留下疤痕隐患,将在愈合至1~(该伤势/2)范围内随机值时形成疤痕。无论医疗条件有多好,带有疤痕隐患的伤口最终必会形成疤痕。
                            伤势<4时调整值=0,伤势4~14范围内为调整值0~100%插值,伤势>14时调整值=100%
                            (鼻颌和各种骨头的留疤率为0,眼为1500%,脊椎为600%)
                            可以通过在健康界面的Dev tool中打开hediff debug tooltips来查看,permanentDamageThreshold即是疤痕隐患值,等于9999代表无隐患。

                            II.七转续命丹
                            叙述者难度自定义中的”殖民者直接死亡”选项默认为100%,即无法触发七转续命丹。
                            殖民者每次受到外来伤害时,如果形成伤口后将死亡,便有(100%-该值)概率触发七转续命丹:
                            该伤势减1,最低剩1,之后如果伤势>部件当前血量,则伤势再降为(部件当前血量)点。
                            第一轮减伤后如果仍致死,那么该伤势再减2,最低剩0
                            第二轮减伤后如果仍致死,那么该伤势再减4,最低剩0
                            第三轮减8,第四轮减16,以此类推直到第七轮再减64后直接生成伤口。
                            (相当于触发后必不死,只受到最低限度的伤害)

                            III.形成伤口
                            伤口的影响细节可见灰机wiki伤势程度页面(第⑤号链接)
                            8.当此伤害允许向外穿透时:
                            如果伤害对象是内层的部件,会对部件的父部件形成等额伤害量的伤口(即进行第7步,此伤害量保底1点),重复直到外层部件。
                            例如对象为肺,则会对躯干造成相同伤害。

                            9.当伤害到血量乘数(并不等同体型)≤0.5的单位时,如果伤害量≥10,且最后的伤害对象是非核心的部件,则对该部件的父部件造成等额伤害(即进行第3~8步)。
                            例如对象为手,则会对胳膊造成相同伤害。

                            (GetPostArmorDamage、FinalizeAndAddInjury、CompPostInjuryHeal)


                            IP属地:天津14楼2023-01-15 15:20
                            收起回复
                              (6) 类似普通类型
                              (以下内容大部分参考第①号链接)
                              都执行普通类型的第1~5步,
                              部分不执行断肢保护,即第6步
                              部分多次执行形成伤口,即第7步
                              部分不执行向外穿透,即第8步
                              1. 咬
                              只能伤害外层部件,其余和普通类型相同。
                              2. 钝击
                              只能伤害外层部件
                              I.不执行断肢保护和向外穿透
                              II. 40%概率触发伤害”向内传递”,触发后伤害量随机降低0.1~0.2倍。
                              III.先形成伤口
                              IV.若摧毁了当前选择的部件,那么溢出伤势会转移到父部件,形成伤口,重复直到伤害≤1或部件未被摧毁。标记最后形成伤口的部件。
                              V.如果触发了”向内传递”,并且标记是外层非固体部件,那么将对此部件的内层固体的直接子部件形成伤口(如果有多个符合条件的部件,那么根据覆盖率随机抽取)
                              伤势值为(降低的伤害量 + 降低前伤害量的0.2~0.35倍)。
                              VI.如果标记是核心部件,有概率造成4点击昏伤害(即2秒击昏)。
                              (降低前伤害量/核心部件最大血量)≤0.4时概率为0,介于0.4~0.9之间时为0~15%的插值,≥0.9时为15%
                              VII.如果标记是产生意识的部件(如大脑),有概率造成4点击昏伤害(即2秒击昏)。
                              (降低前伤害量/该部件最大血量)≤0.04时概率为20%,介于0.04~0.5之间时为20~100%的插值,≥0.5时为100%
                              3. 刺
                              I.如果第一伤害对象为外层部件,则有概率在此部件的所有内层直接子部件中抽选一个来替换伤害对象,以覆盖率为权重抽选。刺的概率为60%,捅为40%。
                              II.执行断肢保护
                              III.然后如果伤害对象为内层部件,将对父部件也形成伤口,重复直到外层部件。触发后对外层部件造成的伤势降为0.75倍,对内层部件为0.4倍。
                              IV.不执行向外穿透
                              4. 割
                              只能伤害外层部件
                              I.不执行断肢保护和向外穿透
                              II.类似刺进行向外贯穿,但没有这种可能性,略过。
                              III.有概率额外随机击中该部件的直接子部件、父部件以及同属于此父部件的其他部件
                              概率约为30%概率0个,45%概率1个,20%概率2个,5%概率3个。
                              伤害量变为(原伤害*2.4/(击中的部件总数量 + 1.4))点
                              IV.如果没有击中其他部件那么执行断肢保护。
                              5. 抓
                              只能伤害外层部件
                              I. 不执行向外穿透
                              II.类似刺进行向外贯穿,但没有这种可能性,略过。
                              III.执行断肢保护前,随机选择一个该部件的父部件或同属于此父部件的其他部件,额外伤害该部件。
                              两个伤害量都降为0.67倍。(如果无法选择额外部件就不用降)
                              6. 火焰
                              如果该伤害没有被护甲彻底抵挡,则目标有概率被生成火焰大小随机15~25的火焰,概率由易燃性插值得出,如下表;

                              7. 冻
                              不执行断肢保护、向外穿透


                              IP属地:天津15楼2023-01-15 15:21
                              回复