用户工具

站点工具


g:hoi:damagecalc

HOI4 伤害计算

名词

名称 解释
软攻 对软度部分的攻击能力
硬攻 对硬度部分的攻击能力
防御 防御方的防御力
突破 进攻方的防御力
护甲 护甲>穿甲则受到伤害 ×50%,并且对于装甲部队来说会有额外伤害加成
穿甲 穿透护甲的能力
组织度 组织度为0则会退出战斗
硬度 软度 + 硬度 = 1。影响部队受到攻击类型的比例

伤害计算

  1. 战斗时分为攻击方与防御方。
  2. 攻击力:无论攻击或防御,都会用到软攻、硬攻来计算攻击力。
  3. 防御力:
    • 进攻方的防御力是突破,完全用不到防御。
    • 防御方的防御力是防御,完全用不到突破。
  4. 根据单位的软度/硬度分别计算受到的软攻/硬攻伤害部分。

模型

  • 一个模型可以有很多种表达方式,在此使用一种便于想象的模型来表述
  • 将攻击力看作攻击次数,防御力看作防御次数。双方每小时(称为回合)进行一次交火,会执行相应次数的攻击与防御。假设具体数值如下:
攻击力防御突破
进攻方1000100
防御方4020200

进攻方造成组织度伤害

00_defines.lua 中有如下定义:

    LAND_COMBAT_ORG_DICE_SIZE = 4
    LAND_COMBAT_ORG_DAMAGE_MODIFIER = 0.05
    
    BASE_CHANCE_TO_AVOID_HIT = 90
    CHANCE_TO_AVOID_HIT_AT_NO_DEF = 60
  • 进攻方攻击力为100,攻击了100次,而防御方防御只有20,只进行了20次有效防御,另外80次攻击受到无防御时伤害
  • 有防御时伤害:有效防御发生时,每次攻击受到的伤害为 (随机数1~4可以当做期望值为2.5):
随机数 × 有效防御时被命中率 × 基本系数
= LAND_COMBAT_ORG_DICE_SIZE × ( 1 - BASE_CHANCE_TO_AVOID_HIT )  × LAND_COMBAT_ORG_DAMAGE_MODIFIER
= 2.5 × 10% × 0.05 
= 0.0125
  • 无防御时伤害:当防御次数耗尽时会受到无防御攻击,此时伤害为:
随机数 × 无防御时被命中率 × 基本系数
= LAND_COMBAT_ORG_DICE_SIZE × ( 1 - CHANCE_TO_AVOID_HIT_AT_NO_DEF )  × LAND_COMBAT_ORG_DAMAGE_MODIFIER
= 2.5 × 40% × 0.05 
= 0.05
  • 因此防御方受到伤害为
20 × 0.0125 + ( 100 - 20 ) × 0.05 
= 0.25 + 4 
= 4.25

防御方造成组织度伤害

  1. 防御方攻击力仅40,进攻方突破为100。因此防御方对进攻方的攻击是全部处于有效防御范围内的。
  2. 一回合内40次攻击总伤害为:40 × 0.0125 = 0.5。

装甲单位伤害额外加成

defines中有一个参数

LAND_COMBAT_ORG_ARMOR_ON_SOFT_DICE_SIZE = 6
  • 游戏中单位分为装甲单位非装甲单位。被分为装甲类型的单位,在攻击时在软攻方面有额外加成。
  • 触发此加成有个条件:敌方的穿甲值不高于本方护甲值。
  • 无视目标单位类型,无论是装甲单位还是非装甲单位,只要满足上面这些条件,就可以触发加成。
  • 效果是: 伤害计算公式中的 随机数 最大值4 变为 6。 但此伤害只作用于目标的软度部分。
  • 随机数 1~6 的期望值为 3.5。

我们继续使用之前的例子,并添加一些参数:

  1. 进攻方使用的是 装甲 单位。
  2. 防御方使用的是软度100%的单位。
  3. 防御方的穿甲不能穿透进攻方的护甲。

此时进攻方的伤害能力产生了变化:

  1. 每回合有效防御伤害: 3.5 × 10% × 0.05 = 0.0175。
  2. 每回合无防御时伤害: 3.5 × 40% × 0.05 = 0.7。
  3. 实际就是 有装甲单位伤害额外加成的单位 对非装甲部分能造成1.4倍的伤害。

软度/硬度

为了便于理解,只考虑一方的进攻力与另一方的防御力。

软攻 硬攻 防御 硬度
攻击方 1000 200
防御方 500 70%
  • 软攻攻击硬度70%的单位,只有30%的攻击有效,即1000 × 30% = 300 次
  • 硬攻攻击硬度70%的单位,只有70%的攻击有效,即200 × 70% = 140 次
  • 此时总攻击次数为:300 + 140 = 440 次
  • 因为防御方防御为500,因此所有伤害均为有效防御伤害:0.0125。
  • 总伤害:440 × 0.0125 = 5.5

若防御方防御为200

有效防御伤害 + 无防御伤害
200 × 0.0125 + 240 × 0.05 
= 2.5 + 12 
= 14.5

若进攻方有装甲伤害额外加成,防御方防御依然为200

此时需将软攻造成的伤害和硬攻造成的伤害分开计算。

软攻伤害部分 + 硬攻伤害部分
14.5 × ( 300/440 ) × 1.4 + 14.5 × ( 140/440 ) × 1 
= 13.84 + 4.61
= 18.45

或从头计算

( 有效防御软伤害 + 无防御软伤害 ) × 1.4 
+ ( 有效防御硬伤害 + 无防御硬伤害 ) × 1

=[ 300/440 × 200 × 0.0125 + 300/440 × (440-200) × 0.05 ] × 1.4 
 + [ 140/440 × 200 × 0.0125 + 140/440 × (440-200) × 0.05 ] × 1


g/hoi/damagecalc.txt · 最后更改: 2023/04/04 18:02 由 127.0.0.1