虽然游戏中用了随机数,而随机实际上是一种概率模型。游戏中,陆军战斗中,会取 1~4 的随机数来计算每回合(小时)的伤害。而1~4的随机是等概率随机,也就是理论上roll 10000次,roll到1、2、3、4的次数是相同的。均为2500次。因此可以很简单做一个计算:(1+2+3+4)÷4 = 2.5。
它的意思就是随机1~4,多次积累下来的总数,平均每次为2.5。
本文针对的是组织度的计算,针对强度是同理的,无非将这个为2.5的随机数变为1.5再进行计算。
根据攻击方、防御方属性,一回合一回合模拟计算。
可以调整的参数:陆军组织度骰子、陆军兵力骰子、陆军基本伤害参数、进攻方组织度衰减、命中率参数。
进攻方组织度衰减会每回合降低进攻方的组织度,游戏默认值是0.2,为了一些目的,可以设置为0。
部队的作战能力会根据兵力损耗降低,这个也模拟进去了。
HOI4伤害计算
名词
名称 | 解释 |
---|---|
软攻 | 对软度部分的攻击能力 |
硬攻 | 对硬度部分的攻击能力 |
防御 | 防御方的防御力 |
突破 | 进攻方的防御力 |
护甲 | 护甲>穿甲则受到伤害 ×50%,并且对于装甲部队来说会有额外伤害加成 |
穿甲 | 穿透护甲的能力 |
组织度 | 组织度为0则会退出战斗 |
硬度 | 软度 + 硬度 = 1。影响部队受到攻击类型的比例 |
伤害计算
战斗时分为攻击方与防御方。
攻击力:无论攻击或防御,都会用到软攻、硬攻来计算攻击力。
防御力:
进攻方的防御力是突破,完全用不到防御。
防御方的防御力是防御,完全用不到突破。
根据单位的软度/硬度分别计算受到的软攻/硬攻伤害部分。
模型
一个模型可以有很多种表达方式,在此使用一种便于想象的模型来表述
将攻击力看作攻击次数,防御力看作防御次数。双方每小时(称为回合)进行一次交火,会执行相应次数的攻击与防御。假设具体数值如下:
攻击力 | 防御 | 突破 | |
---|---|---|---|
进攻方 | 100 | 0 | 100 |
防御方 | 40 | 20 | 200 |
进攻方造成组织度伤害
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
防御方造成组织度伤害
防御方攻击力仅40,进攻方突破为100。因此防御方对进攻方的攻击是全部处于有效防御范围内的。
一回合内40次攻击总伤害为:40 × 0.0125 = 0.5。
装甲单位伤害额外加成
defines中有一个参数
LAND_COMBAT_ORG_ARMOR_ON_SOFT_DICE_SIZE = 6
游戏中单位分为装甲单位和非装甲单位。被分为装甲类型的单位,在攻击时在软攻方面有额外加成。
触发此加成有个条件:敌方的穿甲值不高于本方护甲值。
无视目标单位类型,无论是装甲单位还是非装甲单位,只要满足上面这些条件,就可以触发加成。
效果是: 伤害计算公式中的 随机数 最大值从 4 变为 6。 但此伤害只作用于目标的软度部分。
随机数 1~6 的期望值为 3.5。
我们继续使用之前的例子,并添加一些参数:
进攻方使用的是 装甲 单位。
防御方使用的是软度100%的单位。
防御方的穿甲不能穿透进攻方的护甲。
此时进攻方的伤害能力产生了变化:
每回合有效防御伤害: 3.5 × 10% × 0.05 = 0.0175。
每回合无防御时伤害: 3.5 × 40% × 0.05 = 0.7。
实际就是 有装甲单位伤害额外加成的单位 对非装甲部分能造成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
发布日期 | 点击标题下载 | 对应游戏版本 | 说明 |
---|---|---|---|
2016.07.18 | 钢铁雄心4伤害计算器 | - | - |