Jump to content

Elin:解析/物理戦闘: Difference between revisions

シールドバッシュを修正。
m (属性追加ダメージのコード部分を最新のものに)
(シールドバッシュを修正。)
Line 340: Line 340:
使用する武器が遠隔武器で、射手座のフィートを持つ場合、貫通率に'''25%'''を加算します。
使用する武器が遠隔武器で、射手座のフィートを持つ場合、貫通率に'''25%'''を加算します。


使用する武器が近接武器で、天秤座のフィートを持つ場合、貫通率に'''25%'''を加算します。<ref>これにより貫通率が100%を超える場合、貫通率は100%に補正される。</ref>
使用する武器が近接武器で、天秤座のフィートを持つ場合、貫通率に'''25%'''を加算します。<ref name=":3">これにより貫通率が100%を超える場合、貫通率は100%に補正される。</ref>


基礎命中力は「'''(器用'''、ワンドなら'''意志) / 4 + 武器スキルに対応する主能力 / 3 + 武器スキル''' 」を、スタート50、ステップ25、レート75%のCURVE関数で計算した後、'''50'''を足したものです。
基礎命中力は「'''(器用'''、ワンドなら'''意志) / 4 + 武器スキルに対応する主能力 / 3 + 武器スキル''' 」を、スタート50、ステップ25、レート75%のCURVE関数で計算した後、'''50'''を足したものです。
Line 1,084: Line 1,084:
==補正前ダメージ算出==
==補正前ダメージ算出==


===攻撃力===
===物理攻撃力===
攻撃者の攻撃力は攻撃のダイス数・ダイス面数・ダメージ修正を使って[[Elin:解析/共通処理|ダイスロール]]をした後、[[Elin:戦禍のイーヴァン|戦禍の炎状態]]によるダメージ修正を追加し、
攻撃者の物理攻撃力は攻撃のダイス数・ダイス面数・ダメージ修正を使って[[Elin:解析/共通処理|ダイスロール]]をした後、[[Elin:戦禍のイーヴァン|戦禍の炎状態]]によるダメージ修正を追加し、


その後攻撃倍率と距離修正をかけたものです。
その後攻撃倍率と距離修正をかけたものです。
Line 1,152: Line 1,152:


攻撃力は以下のようになります。
攻撃力は以下のようになります。
  攻撃力 = 攻撃力 × 追加の攻撃倍率
  物理攻撃力 = 物理攻撃力 × 追加の攻撃倍率
斬撃無双の攻撃倍率は'''「0.2」'''倍、カウンターの攻撃倍率は'''「1」'''<ref>変動するような仕組みは用意されているものの、bonusが初期値以外の値を取らないため現状は1倍で固定。</ref>倍、パリィの攻撃倍率は'''「1.5」'''倍です。
斬撃無双の攻撃倍率は'''「0.2」'''倍、カウンターの攻撃倍率は'''「1」'''<ref>変動するような仕組みは用意されているものの、bonusが初期値以外の値を取らないため現状は1倍で固定。</ref>倍、パリィの攻撃倍率は'''「1.5」'''倍です。


==== 攻撃力の上限 ====
==== 物理攻撃力の上限 ====
<syntaxhighlight lang="c#">
<syntaxhighlight lang="c#">
int num = Dice.Roll(dNum, dDim, dBonus, CC);
int num = Dice.Roll(dNum, dDim, dBonus, CC);
Line 1,162: Line 1,162:
num = (int)(dMulti * (float)num * dmgMulti);
num = (int)(dMulti * (float)num * dmgMulti);
return Mathf.Clamp(num, 0, 9999999);
return Mathf.Clamp(num, 0, 9999999);
</syntaxhighlight>上記までの攻撃力の算出の際、「9999999」を超える攻撃力は'''「9999999」'''に補正されます。
</syntaxhighlight>上記までの物理攻撃力の算出の際、「9999999」を超えた場合は'''「9999999」'''に補正されます。


後述する連射数修正と種族特攻エンチャントは、この上限の適用後に計算されます。
後述する連射数修正と種族特攻エンチャントは、この上限の適用後に計算されます。


==== 連射数修正 ====
==== 連射数修正 ====
遠隔武器の連射数によるダメージ減衰は、攻撃力の上限の補正後に計算されます。
遠隔武器の連射数によるダメージ減衰は、物理攻撃力の上限の補正後に計算されます。


(倍率は「遠隔武器の連射数修正」の節を参照してください。)
(倍率は「遠隔武器の連射数修正」の節を参照してください。)
Line 1,180: Line 1,180:
}
}
}
}
</syntaxhighlight>特攻のエンチャントがついた武器で特攻が有効な種族を攻撃した場合、以下の式の通り攻撃力にボーナスを得ます。
</syntaxhighlight>特攻のエンチャントがついた武器で特攻が有効な種族を攻撃した場合、以下の式の通り物理攻撃力にボーナスを得ます。
  攻撃力 = 攻撃力 × (1 + 0.03 × (有効な種族特攻エンチャント強度の合計) + 0.015 × (全特攻エンチャント強度))
  物理攻撃力 = 物理攻撃力 × (1 + 0.03 × (有効な種族特攻エンチャント強度の合計) + 0.015 × (全特攻エンチャント強度))


===防御力===
===防御力===
Line 1,304: Line 1,304:
TC.DamageHP(num, num4, num5, (!IsRanged && !isThrow) ? AttackSource.Melee : AttackSource.Range, CC, showEffect, weapon);
TC.DamageHP(num, num4, num5, (!IsRanged && !isThrow) ? AttackSource.Melee : AttackSource.Range, CC, showEffect, weapon);
</syntaxhighlight>まず、属性変換によるダメージと貫通によるダメージ、防御力による軽減を計算します。
</syntaxhighlight>まず、属性変換によるダメージと貫通によるダメージ、防御力による軽減を計算します。
  属性変換ダメージ = 攻撃力 × 属性変換率
  属性変換ダメージ = 物理攻撃力 × 属性変換率
  貫通ダメージ = (攻撃力 - 属性変換ダメージ) × 貫通率
  貫通ダメージ = (物理攻撃力 - 属性変換ダメージ) × 貫通率
  非貫通ダメージ = (攻撃力 - 属性変換ダメージ - 貫通ダメージ) × 防御割合 - 防御固定値 ※(負の値になった場合0に補正)
  非貫通ダメージ = (物理攻撃力 - 属性変換ダメージ - 貫通ダメージ) × 防御割合 - 防御固定値 ※(負の値になった場合0に補正)
以上から、物理攻撃によるダメージは以下の通りです。
以上から、物理攻撃によるダメージは以下の通りです。
  軽減後ダメージ = 属性変換ダメージ + 貫通ダメージ + 非貫通ダメージ
  軽減後ダメージ = 属性変換ダメージ + 貫通ダメージ + 非貫通ダメージ
Line 1,350: Line 1,350:
if (!IsRanged && !flag2 && attackStyle == AttackStyle.Shield)
if (!IsRanged && !flag2 && attackStyle == AttackStyle.Shield)
{
{
int num11 = CC.Evalue(123);
int num12 = CC.Evalue(123);
if (CC.elements.ValueWithoutLink(123) >= 10 && Mathf.Clamp(Mathf.Sqrt(num11) - 2f, 8f, 12f) > (float)EClass.rnd(100))
int num13 = CC.Evalue(381);
if (CC.elements.ValueWithoutLink(123) >= 10 && Mathf.Clamp(Mathf.Sqrt(num12) - 2f, 8f, 15f) + Mathf.Min(Mathf.Sqrt(num13), 25f) > (float)EClass.rnd(100))
{
{
num = num7 * Mathf.Min(50 + num11, 200) / 100;
num = num7 * (Mathf.Min(50 + num12 + num13, 200) + (int)Mathf.Min(Mathf.Sqrt(num13), 100f)) / 100;
num = TC.ApplyProtection(num);
penetration = (int)Mathf.Sqrt(num13) + ((num13 != 0) ? 20 : 0);
if (penetration > 100)
{
penetration = 100;
}
num9 = num * penetration / 100;
num -= num9;
num = TC.ApplyProtection(num) + num9;
Debug.Log("Bash:" + num + "/" + num7);
Debug.Log("Bash:" + num + "/" + num7);
CC.PlaySound("shield_bash");
CC.PlaySound("shield_bash");
Line 1,363: Line 1,371:
if (EClass.rnd(2) == 0)
if (EClass.rnd(2) == 0)
{
{
TC.Chara.AddCondition<ConDim>(50 + (int)Mathf.Sqrt(num11) * 10);
TC.Chara.AddCondition<ConDim>(50 + (int)Mathf.Sqrt(num12) * 10);
}
}
TC.Chara.AddCondition<ConParalyze>(EClass.rnd(2), force: true);
TC.Chara.AddCondition<ConParalyze>(EClass.rnd(2), force: true);
}
}
ProcShieldEncs(CC, TC, 500 + num13);
}
}
}
}
</syntaxhighlight>武器に事故防止エンチャントが付与されておらず、盾スキルが10以上の盾を持つキャラクターの近接攻撃が命中した場合、シールドバッシュの判定が行われます。
</syntaxhighlight>武器に事故防止エンチャントが付与されておらず、盾スキルが10以上の盾を持つキャラクターの近接攻撃が命中した場合、確率でシールドバッシュが行われます。
 
シールドバッシュの発生確率は以下の通りです。
シールドバッシュ発生率(%) = CLAMP<ref>値を一定範囲内に制限する関数です。 関数内の1つめの引数の値は、「2つめの引数の値」~「3つめの引数の値」の範囲内になるよう補正されます。</ref>(√(攻撃者の盾スキル) - 2, 8, 15) + MIN(√(盾の暴君エンチャント強度), 25)
発動率の最小は「8」%です。
 
盾スキルが「100」以上になると発動率が上昇しはじめ、最大で'''「15」'''%まで効果があります。
 
盾の暴君エンチャントは発動率に加算され、最大で'''「+25」'''%まで効果があります。
 


シールドバッシュの発生確率は'''「√(攻撃者の盾スキル) - 2」%で、最小で8%、最大で12%になるよう補正されます。'''
シールドバッシュの攻撃力は以下の式で算出されます。
シールドバッシュ攻撃力 = 物理攻撃力 × (MIN((0.5 + 攻撃者の盾スキル × 0.01), 2) + MIN(√(盾の暴君エンチャント強度) × 0.01, 1))


シールドバッシュのダメージは以下の式で算出されます。ただし、'''このダメージは貫通率0%で攻撃対象の物理防御力によって軽減されます。'''
 
  シールドバッシュのダメージ = 攻撃力 × MIN((0.5 + 攻撃者の盾スキル × 0.01), 2)
シールドバッシュは貫通率も持ちます。貫通力は以下の式で算出されます。<ref name=":3" />
シールドバッシュ貫通率(%) = √(盾の暴君エンチャント強度) + (0、盾の暴君エンチャントがある場合20)
 
 
上で求めたシールドバッシュ攻撃力・貫通力に攻撃対象の物理防御力を適用して、シールドバッシュダメージを計算します。
  貫通ダメージ = シールドバッシュ攻撃力 × 貫通率
非貫通ダメージ = (シールドバッシュ攻撃力 - 貫通ダメージ) × 防御割合 - 防御固定値 ※(負の値になった場合0に補正)
シールドバッシュダメージ = 貫通ダメージ + 非貫通ダメージ
シールドバッシュは唄魔法や属性変換エンチャントなどに関わらず無属性ダメージとなります。
シールドバッシュは唄魔法や属性変換エンチャントなどに関わらず無属性ダメージとなります。


250

edits