Elin:解析/戦闘: Difference between revisions
Sakumashiki (talk | contribs) (攻撃の命中率について) |
m (ページ内容を分割したページを作成したため、Spoilerタグを外して解析ページ一覧から削除。(旧ページとして残るように。)) |
||
| (20 intermediate revisions by 5 users not shown) | |||
| Line 1: | Line 1: | ||
{{解析}} | {{解析}} | ||
{{DISPLAYTITLE:{{SUBPAGENAME}}}} | |||
==Evalueリスト== | ==Evalueリスト== | ||
{| class="wikitable" | {| class="wikitable" | ||
| Line 47: | Line 47: | ||
|1, 2 | |1, 2 | ||
|} | |} | ||
==敵のレベルに応じたダメージ軽減== | |||
{{バージョン|23.83}} | |||
レベル50を超えた敵が受けるダメージ軽減量は以下の通りです: | |||
まず、レベル50以下の敵の軽減率は0%、レベル1074以上の敵は軽減率80%となります。 | |||
if (!this.IsPCFaction && this.LV > 50) | |||
{ | |||
dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt((float)(this.LV - 50)) * 2.5f)) / 100; | |||
} | |||
プレイヤーのファクションに属するキャラで、敵のレベルがLv50より高い場合: | |||
与えるダメージに、* (100 - [ 2.5 * √(敵のレベル - 50) か 80 かのうち小さいほう ]<ref>正確には小さい方を四捨五入したもの</ref>) / 100が掛けられます。 | |||
つまり、Lv1074以上の敵に対してはダメージが80%減少し、Lv51~Lv1073の敵に対しては[sqrt(敵Lv-50) * 2.5]%減少します。 | |||
{| class="wikitable" | |||
|+レベル毎のダメージ軽減 | |||
!敵のLv | |||
!軽減率(%) | |||
|- | |||
|51 | |||
|2 | |||
|- | |||
|100 | |||
|17 | |||
|- | |||
|150 | |||
|25 | |||
|- | |||
|200 | |||
|30 | |||
|- | |||
|250 | |||
|35 | |||
|- | |||
|300 | |||
|39 | |||
|- | |||
|350 | |||
|43 | |||
|- | |||
|400 | |||
|46 | |||
|- | |||
|450 | |||
|50 | |||
|- | |||
|500 | |||
|53 | |||
|- | |||
|550 | |||
|55 | |||
|- | |||
|600 | |||
|58 | |||
|- | |||
|650 | |||
|61 | |||
|- | |||
|700 | |||
|63 | |||
|- | |||
|750 | |||
|66 | |||
|- | |||
|800 | |||
|68 | |||
|- | |||
|850 | |||
|70 | |||
|- | |||
|900 | |||
|72 | |||
|- | |||
|950 | |||
|75 | |||
|- | |||
|1000 | |||
|77 | |||
|- | |||
|1050 | |||
|79 | |||
|- | |||
|1074 | |||
|80 | |||
|- | |||
|1100 | |||
|80 | |||
|} | |||
== 命中率== | |||
{{バージョン|23.83}} | |||
[[File:Function curve as of EA23.46.png|thumb|upright=3.0|バージョン EA23.46 のCURVE 関数の入力(オレンジ色)と出力(藍)です。Output = Curve(Input, 50, 25, 75) ]] | |||
「CURVE」とはElinにて、スキル値の有効性を段階的に抑制する処理です。 | |||
CURVE( input, start, step, rate) | |||
if input <= start | |||
return input | |||
repeat x10 | |||
{ | |||
num = start + repeatindex * step | |||
if input <= num | |||
return input | |||
else | |||
input = num + (input - num) * rate /100 | |||
} | |||
return input | |||
まず、システムは攻撃者の「命中力」とターゲットの「回避力」を評価します。 | |||
命中力の値は、使用する武器の種類(投擲、遠距離、近接、格闘)とスタイルによって異なる計算式で算出されます。 | |||
{| class="wikitable wikitable」" | {| class="wikitable wikitable」" | ||
| Line 78: | Line 170: | ||
|- | |- | ||
|投擲 | |投擲 | ||
|CURVE([攻撃者の器用]/4 + [攻撃者の筋力]/2 + [攻撃者の武器スキル], 50, 25, 75) + 75 (PCのファクション以外の場合250) | |CURVE([攻撃者の器用] / 4 + [攻撃者の筋力] / 2 + [攻撃者の武器スキル], 50, 25, 75) + 75(PCのファクション以外の場合250) | ||
|- | |- | ||
|格闘 (盾なし) | |格闘 (盾なし) | ||
|CURVE([攻撃者の器用]/3 + [ | |CURVE([攻撃者の器用] / 3 + [攻撃者の武器の主能力] / 3 + [攻撃者の武器スキル], 50, 25, 75) + 50 | ||
|- | |- | ||
|格闘 (盾あり) | |格闘 (盾あり) | ||
|CURVE([攻撃者の器用]/3 + [ | |CURVE([攻撃者の器用] / 3 + [攻撃者の武器の主能力] / 3 + [攻撃者の武器スキル], 50, 25, 75) + 50 の結果に0.75をかけたもの | ||
|- | |- | ||
| ワンド | |ワンド | ||
|CURVE([攻撃者の意志]/4 + [攻撃者の武器の主能力]/3 + | |CURVE([攻撃者の意志] / 4 + [攻撃者の武器の主能力] / 3 + [攻撃者の武器スキル], 50, 25, 75) + 100 | ||
|- | |- | ||
|その他すべての武器 | |その他すべての武器 | ||
| CURVE([ | |CURVE([攻撃者の器用or意志] / 4 + [攻撃者の武器の主能力] / 3 + [攻撃者の武器スキル], 50, 25, 75) + 50 | ||
|} | |} | ||
上記の式で算出した値に装備と武器による命中修正が足し算され、その後遠距離武器には距離による修正が適用されたものが「命中力」となります。 | |||
「回避力」はこちらの式で計算されます。:CURVE ([対象の感覚] / 3 + [対象の回避スキル], 50, 10, 75) + [対象のDV] + 25 | |||
命中力・回避力に影響を与える以下の要素は、複合して作用しながら次の表の上から順で適用されます。<ref>プログラムでは、X=X+1のように、同じ文字が一つの式に複数回登場して右辺にあるものが調整前の数字、左辺にあるものが調整後の数字になる記法があります。</ref> | |||
{| class="wikitable" | {| class="wikitable" | ||
| Line 105: | Line 199: | ||
|- | |- | ||
|攻撃者が災い状態 | |攻撃者が災い状態 | ||
| | |命中力 = 命中力 * 0.75 | ||
|- | |- | ||
|攻撃者が高所にいる | |攻撃者が高所にいる | ||
| | |命中力 = 命中力 * 1.2 | ||
|- | |- | ||
|攻撃者が乗馬している | |攻撃者が乗馬している | ||
| | |命中力 = 命中力 * 100 / (100 + 500 / ('''5''' or '''10 + [攻撃者の乗馬スキル]''' の高い方)) | ||
|- | |- | ||
|攻撃者がペットを寄生させている | |攻撃者がペットを寄生させている | ||
| | |命中力 = 命中力 * 100 / (100 + 1000 / ('''5''' or '''10 + [攻撃者の共存スキル]''' の高い方)) | ||
|- | |- | ||
| | |騎乗されているペットによる攻撃 | ||
| | |命中力 = 命中力 * 100 / (100 + 1000 / ('''5''' or '''10 + [攻撃者の筋力]''' の高い方)) | ||
|- | |- | ||
| | |寄生しているペットによる攻撃 | ||
| | |命中力 = 命中力 * 100 / (100 + 1000 / ('''5''' または '''10 + [攻撃者の器用]''' の高い方)) | ||
|- | |- | ||
|攻撃者が両手持ち | |攻撃者が両手持ち | ||
| | | 命中力 = 命中力 + 25 + sqrt([攻撃者の両手持ちスキル] * 2) | ||
|- | |- | ||
|攻撃者が二刀流 | |攻撃者が二刀流 | ||
| | |命中力 = 命中力 * 100 / (115 + 手の番号 * 15 + 手の番号 *(2000 / (20 + [攻撃者の二刀流スキル])[0-100でクランプ<ref>クランプとは値に上限と下限を適用するという意味です。この場合、確率なので0から100%に設定されています</ref>]) | ||
|- | |- | ||
|攻撃者が盲目 | |攻撃者が盲目 | ||
| | |命中力 = 命中力 * 0.333 (または、遠距離/投擲の場合は0.1) | ||
|- | |- | ||
|対象が盲目 | |対象が盲目 | ||
| | |回避力 = 回避力 * 0.5 | ||
|- | |- | ||
| | |対象が混乱もしくは朦朧 | ||
| | |回避力 = 回避力 * 0.5 | ||
|- | |- | ||
|対象が高所にいる | |対象が高所にいる | ||
| | |回避力 = 回避力 * 1.2 | ||
|} | |} | ||
二刀流の補足説明: | |||
ここでいう、「手の番号」は利き手・もう片方の手と、カオスシェイプなどが持つ2本目以降の手を表します。 | |||
1-100の間でクランプされるのは(2000 / (20 + [攻撃者の二刀流スキル])だけです。つまり、二刀流で最適化するには、二刀流スキルが1980必要です。 | |||
ここまでで最終的な命中力と回避力を計算しました。以下では攻撃が命中するか、外れるか、クリティカルになるかするまで、上から順に判定します。 | |||
苛立エンチャントの効果による攻撃の場合、確定クリティカル。 | |||
対象が朦朧状態の場合、25%の確率でクリティカル | |||
対象が死亡または睡眠状態の場合、確定でクリティカル | 対象が死亡または睡眠状態の場合、確定でクリティカル | ||
[対象の見切りスキル] | [対象の見切りスキル] * 10 > 命中力の場合、見切り成否判定を行う。 | ||
見切り力 = 回避力 * 100 / 命中力 とし、以下3つの式を上から順に処理する。<ref>見切り力が301以上であれば、見切りによる回避判定は3回行われる</ref> | |||
見切り力 > 300 かつ、 random 0 - ([対象の見切りスキル] + 250) > 100 のとき、攻撃は外れる | |||
見切り力 > 200 かつ、 random 0 - ([対象の見切りスキル] + 250) > 150 のとき、攻撃は外れる | |||
見切り力 > 150 かつ、 random 0 - ([対象の見切りスキル] + 250) > 200 のとき、攻撃は外れる | |||
[ | [対象の完全回避] > random 0 - 99 のとき、攻撃は外れる (random X-Yは等確率でXからYまでの乱数を生成する関数。0から99までの値が等確率で選ばれる。完全回避分の確率で回避する。) | ||
random 0 - 19 が 0 のとき、攻撃は命中 (5%で対象の回避を無視して命中する)<ref name=":0">この場合、クリティカルにはならない。</ref> | |||
random 0 - 19 が 0 のとき、攻撃は外れる (5%で攻撃者の命中を無視して外れる) | |||
命中力 < 1 のとき、攻撃は外れる | |||
回避力 < 1 のとき、攻撃は命中<ref name=":0" /> | |||
random 0 - | random 0 - 命中力 < random 0 - (回避力 * 125 (遠距離攻撃なら150) / 100) のとき、攻撃は外れる | ||
random 0 - 5000 < [攻撃者の感覚]のとき、攻撃はクリティカル | random 0 - 5000 < [攻撃者の感覚] + 50 のとき、攻撃はクリティカル | ||
[ | [攻撃者のクリティカルエンチャント合計] + sqrt([攻撃者の心眼スキル]) > random 0 - 200のとき、攻撃はクリティカル | ||
攻撃者が[死の真髄]フィートを所持している場合、以下の判定を行う | 攻撃者が[死の真髄]フィートを所持している場合、以下の判定を行う | ||
HP減少率 = 100 - [攻撃者の現在HP] * 100 / [攻撃者の最大HP] | |||
HP減少率 >= 50 かつ、 (HP減少率 ^ 4 / 3) > random 0 - 100000000 のとき、攻撃はクリティカル (HPが5割以上減っている状態で、減少率に応じて最小2%~最大33%の確率でクリティカル) | |||
攻撃は命中 | 攻撃は命中 | ||
==格闘== | ==格闘== | ||
<syntaxhighlight lang="c#" line="1"> | <syntaxhighlight lang="c#" line="1"> | ||
else if ( | else if (IsMartial || IsMartialWeapon) | ||
{ | { | ||
weaponSkill = CC.elements.GetOrCreateElement(100); | |||
bool flag2 = weapon != null && weapon.Evalue(482) > 0; | |||
if (flag2) | |||
{ | |||
weaponSkill = CC.elements.GetOrCreateElement(305); | |||
} | |||
attackType = ((!CC.race.meleeStyle.IsEmpty()) ? CC.race.meleeStyle.ToEnum<AttackType>() : ((EClass.rnd(2) == 0) ? AttackType.Kick : AttackType.Punch)); | |||
dBonus = CC.DMG + CC.encLV + (int)Mathf.Sqrt(Mathf.Max(0, weaponSkill.GetParent(CC).Value / 5 + weaponSkill.Value / 4)); | |||
dNum = 2 + Mathf.Min(weaponSkill.Value / 10, 4); | |||
dDim = 5 + (int)Mathf.Sqrt(Mathf.Max(0, weaponSkill.Value / 3)); | |||
dMulti = 0.6f + (float)(weaponSkill.GetParent(CC).Value / 2 + weaponSkill.Value / 2 + CC.Evalue(flag2 ? 304 : 132) / 2) / 50f; | |||
dMulti += 0.05f * (float)CC.Evalue(1400); | |||
toHitBase = EClass.curve(CC.DEX / 3 + weaponSkill.GetParent(CC).Value / 3 + weaponSkill.Value, 50, 25) + 50; | |||
toHitFix = CC.HIT; | |||
if (attackStyle == AttackStyle.Shield) | |||
{ | |||
toHitBase = toHitBase * 75 / 100; | |||
} | |||
penetration = Mathf.Clamp(weaponSkill.Value / 10 + 5, 5, 20) + CC.Evalue(92); | |||
if (IsMartialWeapon) | |||
{ | |||
dBonus += weapon.DMG; | |||
dNum += weapon.source.offense[0]; | |||
dDim = Mathf.Max(dDim / 2 + weapon.c_diceDim, 1); | |||
toHitFix += weapon.HIT; | |||
penetration += weapon.Penetration; | |||
if (!weapon.source.attackType.IsEmpty()) | |||
{ | |||
attackType = weapon.source.attackType.ToEnum<AttackType>(); | |||
} | |||
} | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
キャラクターは格闘スキルを使用して格闘攻撃を繰り出します。通常はパンチないしキックですが、武器の近接戦闘スタイルやキャラクターの特性に基づいて攻撃エフェクトは変わります。 | |||
武器に'''理力武器'''のエンチャントが付いている場合、格闘スキルの代わりに'''魔道具'''スキルを、戦術スキルの代わりに'''詠唱'''スキルを使用します。 | |||
素手及び通常の格闘武器の場合: | |||
ダメージの基礎ダイス数は「'''2 + 格闘 / 10'''」で、最大で6です。 | |||
ダメージの基礎ダイス面は「'''5 + √(格闘 / 3)'''」です。 | |||
基礎ダメージ修正は「'''√(筋力 / 5 + 格闘 / 4) + 防具のダメージ修正合計 + キャラ固有のダメージ修正'''<ref name=":1">エーテル病の殺戮への飢えが該当する。</ref>」です。 | |||
ダメージ倍率は「'''0.6 + ((筋力 / 2 + 格闘 / 2 + 戦術 / 2) / 50.0)'''」です'''。''' | |||
貫通率は「'''格闘 / 10 + 5'''」で、最低5%、最高で20%です。<ref name=":2">固有の貫通率を持っているキャラクターであればその値も加算される。</ref> | |||
基礎命中力は「'''(器用 / 3 + 筋力 / 3 + 格闘)'''」を、スタート50、ステップ25、レート75%のCURVE関数で計算した後、50を足したものです。 | |||
理力武器のエンチャントが付いた格闘武器の場合: | |||
ダメージの基礎ダイス数は「'''2 + 魔道具 / 10'''」で、最大で6です。 | |||
ダメージの基礎ダイス面は「'''5 + √(魔道具 / 3)'''」です。 | |||
基礎ダメージ修正は「'''√(魔力 / 5 + 魔道具 / 4) + 防具のダメージ修正合計 + キャラ固有のダメージ修正<ref name=":1" />'''」です。 | |||
ダメージ倍率は「'''0.6 + ((魔力 / 2 + 魔道具 / 2 + 詠唱 / 2) / 50.0)'''」です'''。''' | |||
基礎貫通率は「'''魔道具 / 10 + 5'''」で、最低5%、最高で20%です。<ref name=":2" /> | |||
基礎命中力は「'''器用''' '''/ 3 + 魔力 / 3 + 魔道具'''」を、スタート50、ステップ25、レート75%のCURVE関数で計算した後、'''50'''を足したものです。 | |||
プレイヤーが武器の知識フィートを持っている場合、ダメージ倍率に『0.05×(''武器の知識フィートのランク)』だけ加算されます。''<small>(事実上、+0.05または+0.10)</small> | |||
プレイヤーが盾を装備している場合、基礎命中力は0.75倍に修正されます。 | |||
上記の後、基礎命中力に防具の命中修正が加算されます。 | |||
さらに、格闘武器を装備している場合は以下の修正を受けます。 | |||
最終的なダイス数は「'''基礎ダイス数 + 武器の基礎ダイス数'''」です。 | |||
最終的なダイス面は「'''基礎ダイス面 / 2 + 武器の基礎ダイス数'''」です。 | |||
最終的なダメージ修正は「'''基礎ダメージ修正 + 武器のダメージ修正'''」です。 | |||
最終的な命中力は「'''基礎命中力 + 武器の命中修正'''」です。 | |||
最終的な貫通率は「'''基礎貫通率 + 武器の貫通率'''」です。 | |||
==投擲== | ==投擲== | ||
<syntaxhighlight lang="c#" line="1"> | <syntaxhighlight lang="c#" line="1"> | ||
if ( | if (isThrow) | ||
{ | { | ||
bool flag = weapon.HasTag(CTAG.throwWeapon) || weapon.HasTag(CTAG.throwWeaponEnemy); | |||
int num2 = (int)Mathf.Clamp(Mathf.Sqrt(weapon.SelfWeight + weapon.ChildrenWeight) * 3f + 25f + (float)(flag ? 75 : 0), 10f, 400f + Mathf.Sqrt(CC.STR) * 50f); | |||
int num3 = Mathf.Clamp(weapon.material.hardness, flag ? 40 : 20, 200); | |||
weaponSkill = CC.elements.GetOrCreateElement(108); | |||
attackType = AttackType.Blunt; | |||
dBonus = CC.DMG + (CC.IsPCParty ? 3 : 7); | |||
dNum = 2; | |||
dDim = (((!CC.IsPCParty) ? CC.LV : 0) + CC.STR + CC.Evalue(108)) * num2 * num3 / 10000 / 2; | |||
dMulti = 1f; | |||
toHitBase = EClass.curve(CC.DEX / 4 + CC.STR / 2 + weaponSkill.Value, 50, 25) + (CC.IsPCFaction ? 75 : 250); | |||
toHitFix = CC.HIT + weapon.HIT; | |||
penetration = 25; | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight>プレイヤーの投げたアイテムは投擲武器であってもそうでなくても投擲スキルを参照します。 | ||
攻撃エフェクトは常に鈍器です。 | |||
重量値は 25 + '''投擲武器限定75<ref>投擲武器でないときは0</ref>''' + '''3 * √ [アイテムの重量]''' ですが、下限10、上限'''400 + 50 * √(筋力)'''があります。 | |||
ここでいうアイテムの重量はゲーム中の〇.〇sに1000をかけたものです。 | |||
武器の材質値は'''素材の硬度'''です。上限は200で、これはダークマターの硬度と等しく、下限は'''投擲武器を投げている場合'''で'''40'''、それ以外では'''20'''として設定されています。 | |||
ダイスの数は常に'''「2」'''です。 | |||
ダイスの面は「'''('''(プレイヤーパーティー外のキャラのみLv) + '''筋力''' + '''投擲''' ) * '''重量値''' * '''武器の材質値 / 10000 / 2」'''です。 | |||
ダメージボーナスは「(プレイヤーパーティー内のキャラの場合''':3'''、それ以外の場合:7) '''+''' '''武器のダメージ修正 + 防具のダメージ修正合計 + キャラ固有のダメージ修正<ref name=":1" />'''」です。 | |||
ダメージ倍率は常に「'''1'''」です。 | |||
貫通力は常に'''25%'''です。 | |||
基礎命中力は「'''器用 / 4 +''' '''筋力 / 2 +''' '''投擲'''」を、スタート50、ステップ25、レート75%のCURVE関数で計算した後、プレイヤーキャラクターの場合''':75'''、それ以外の場合:'''250''' を足したもので、 | |||
最終的な命中力は「'''基礎命中力 +''' '''武器の命中修正 + 防具の命中修正合計」'''です。 | |||
==近接&遠隔武器== | ==近接&遠隔武器 == | ||
<syntaxhighlight lang="c#" line="1"> | <syntaxhighlight lang="c#" line="1"> | ||
else | else | ||
{ | { | ||
if (IsRanged) | |||
{ | |||
weaponSkill = CC.elements.GetOrCreateElement(toolRange.WeaponSkill); | |||
} | |||
else | |||
{ | |||
weaponSkill = CC.elements.GetOrCreateElement(weapon.category.skill); | |||
} | |||
if (!weapon.source.attackType.IsEmpty()) | |||
{ | |||
attackType = weapon.source.attackType.ToEnum<AttackType>(); | |||
} | |||
bool flag3 = IsCane || weapon.Evalue(482) > 0; | |||
if (flag3) | |||
{ | |||
weaponSkill = CC.elements.GetOrCreateElement(305); | |||
} | |||
dBonus = CC.DMG + CC.encLV + weapon.DMG; | |||
dNum = weapon.source.offense[0]; | |||
dDim = weapon.c_diceDim; | |||
dMulti = 0.6f + (float)(weaponSkill.GetParent(CC).Value + weaponSkill.Value / 2 + CC.Evalue(flag3 ? 304 : (IsRanged ? 133 : 132))) / 50f; | |||
dMulti += 0.05f * (float)CC.Evalue(IsRanged ? 1404 : 1400); | |||
toHitBase = EClass.curve((IsCane ? CC.WIL : CC.DEX) / 4 + weaponSkill.GetParent(CC).Value / 3 + weaponSkill.Value, 50, 25) + 50; | |||
toHitFix = CC.HIT + weapon.HIT; | |||
penetration = weapon.Penetration + CC.Evalue(92); | |||
if (IsCane) | |||
{ | |||
toHitBase += 50; | |||
} | |||
} | } | ||
if ( | if (ammo != null && !(ammo.trait is TraitAmmoTalisman)) | ||
{ | { | ||
dNumAmmo = ((ammo.source.offense.Length != 0) ? ammo.source.offense[0] : 0); | |||
dDimAmmo = ammo.c_diceDim; | |||
dBonusAmmo = ammo.DMG + ammo.encLV; | |||
if (dNumAmmo < 1) | |||
{ | |||
dNumAmmo = 1; | |||
} | |||
if (dDimAmmo < 1) | |||
{ | |||
dDimAmmo = 1; | |||
} | |||
toHitFix += ammo.HIT; | |||
} | } | ||
else | else | ||
{ | { | ||
dNumAmmo = 0; | |||
dDimAmmo = 0; | |||
} | } | ||
</syntaxhighlight>プレイヤーは、戦術スキルを使用して近接武器を振るうか、または射撃スキルを使用して遠距離武器を撃ちます。 | </syntaxhighlight>プレイヤーは、戦術スキルを使用して近接武器を振るうか、または射撃スキルを使用して遠距離武器を撃ちます。 | ||
武器が'''ワンド''' | 武器が'''ワンド'''、または'''理力武器'''のエンチャントが付いている場合、戦術スキルまたは射撃スキルの代わりに'''詠唱'''スキルを、武器スキル(長剣、短剣、斧など)の代わりに'''魔道具'''スキルを使用します。 | ||
ダメージのダイス数及びダイス面は武器に表記されているものを使用します。 | |||
基礎ダメージ修正は「'''攻撃中の武器のダメージ修正 + 防具のダメージ修正合計 + キャラ固有のダメージ修正<ref name=":1" />'''」です。 | |||
ダメージ倍率は「'''0.6 + (武器スキルに対応する主能力 + 武器スキル / 2 + ('''近接武器は'''戦術'''、遠距離武器は'''射撃'''、ワンドまたは理力武器の場合'''魔道具)) / 50.0)'''」です'''。''' | |||
プレイヤーが武器の知識フィートを持っている場合、ダメージ倍率に『0.05 * (''武器の知識フィートのランク'')''』だけ加算されます。''<small>(事実上、+0.05または+0.10)</small> | |||
貫通率は武器に表記されているものを使用します。<ref name=":2" /> | |||
基礎命中力は「'''(器用'''、ワンドなら'''意志) / 4 + 武器スキルに対応する主能力 / 3 + 武器スキル''' 」を、スタート50、ステップ25、レート75%のCURVE関数で計算した後、'''50'''を足したものです。 | |||
命中力は「'''基礎命中力 +''' '''攻撃中の武器の命中修正 + 防具の命中修正合計 +''' (ワンドのみ:'''50'''、それ以外は'''0''')」です。 | |||
== | |||
<syntaxhighlight lang="c#"> | |||
さらに、弾薬を消費して攻撃した場合: | |||
ダメージ修正に「'''弾薬のダメージダイスを振った結果 + 弾薬のダメージ修正'''」を加算します。 | |||
命中力に「'''弾薬の命中修正'''」を加算します。 | |||
==遠隔武器の命中率&ダメージと距離== | |||
<syntaxhighlight lang="c#" line="1"> | |||
distMod = 100; | |||
… | |||
if (!isThrow) | |||
{ | { | ||
if (!IsRanged) | |||
{ | |||
attackStyle = CC.body.GetAttackStyle(); | |||
} | |||
else if (TP != null) | |||
{ | |||
int num = CC.pos.Distance(TP); | |||
distMod = Mathf.Max(115 - 10 * Mathf.Abs(num - toolRange.BestDist) * 100 / (100 + weapon.Evalue(605) * 10), 80); | |||
} | |||
} | } | ||
</syntaxhighlight><syntaxhighlight lang=" | … | ||
public | dMulti = dMulti * (float)distMod / 100f; | ||
toHit = toHitBase + toHitFix; | |||
toHit = toHit * distMod / 100; | |||
</syntaxhighlight> | |||
遠隔武器には、適正の攻撃距離があり、それによって命中力とダメージ倍率が増減します。 | |||
Evalue(605)はmod_precisionであり、遠隔武器の改造道具の精密射撃レベルにあたります。 | |||
適正攻撃距離から離れているほど、ペナルティも増えます。 | |||
精密射撃の改造道具のない場合、0(適正攻撃距離)の時は命中力、ダメージ共に115%になります、±1は105%、±2は95%、±3は85%、それ以降は80%になります。 | |||
精密射撃modの強度と適正距離差による命中力とダメージの倍率(%)は以下の表のようになっています。 | |||
{| class="wikitable" | |||
!精密射撃mod強度 | |||
!適正距離差0 | |||
!適正距離差1 | |||
!適正距離差2 | |||
!適正距離差3 | |||
!適正距離差4 | |||
|- | |||
|0 | |||
|115 | |||
|105 | |||
|95 | |||
|85 | |||
|80 | |||
|- | |||
|10 | |||
|115 | |||
|110 | |||
|105 | |||
|100 | |||
|95 | |||
|- | |||
|20 | |||
|115 | |||
|112 | |||
|109 | |||
|105 | |||
|102 | |||
|- | |||
|30 | |||
|115 | |||
|113 | |||
|110 | |||
|108 | |||
|105 | |||
|- | |||
|40 | |||
|115 | |||
|113 | |||
|111 | |||
|109 | |||
|107 | |||
|- | |||
|50 | |||
|115 | |||
|114 | |||
|112 | |||
|110 | |||
|109 | |||
|- | |||
|60 | |||
|115 | |||
|114 | |||
|113 | |||
|111 | |||
|110 | |||
|- | |||
|70 | |||
|115 | |||
|114 | |||
|113 | |||
|112 | |||
|110 | |||
|- | |||
|80 | |||
|115 | |||
|114 | |||
|113 | |||
|112 | |||
|111 | |||
|- | |||
|90 | |||
|115 | |||
|114 | |||
|113 | |||
|112 | |||
|111 | |||
|- | |||
|99 | |||
|115 | |||
|115 | |||
|114 | |||
|113 | |||
|112 | |||
|} | |||
==魔法:魔法のパワー== | |||
EA 23.79 Nightly Patch 1 | |||
これはAbility.csの44行目です | |||
ここに、魔法のパワーを決定するためにどの式を使用するかを記述したコードが書かれています | |||
<syntaxhighlight lang="「c#」" line="「1」"> | |||
public override int GetPower(Card c) | |||
{ | { | ||
int a = base.Value * 8 + 50; | |||
if (!c.IsPC) | |||
{ | |||
a = Mathf.Max(a, c.LV * 6 + 30); | |||
if (c.IsPCFactionOrMinion && !base.source.aliasParent.IsEmpty()) | |||
if ( | { | ||
a = Mathf.Max(a, c.Evalue(base.source.aliasParent) * 4 + 30); | |||
} | |||
} | |||
a = EClass.curve(a, 400, 100); | |||
if (this is Spell) | |||
{ | { | ||
a = a * Mathf.Max(100 + c.Evalue(411) - c.Evalue(93), 1) / 100; | |||
} | } | ||
a | return a; | ||
} | } | ||
</syntaxhighlight>ここではカーブ関数を使用します:<syntaxhighlight lang="「c#」" line="「1」"> | |||
public static int curve(int a, int start, int step, int rate = 75) | |||
{ | |||
if (a <= start) | |||
{ | |||
return a; | |||
} | } | ||
</syntaxhighlight> | for (int i = 0; i < 10; i++) | ||
{ | |||
int num = start + i * step; | |||
if (a <= num) | |||
{ | |||
return a; | |||
} | |||
a = num + (a - num) * rate / 100; | |||
} | |||
return a; | |||
} }. | |||
</syntaxhighlight>プレイヤーの魔法のパワーはcurve[ ('''魔法レベル''' x 8 + 50), 400, 100, 75 ] x (100 + '''魔法強化エンチャント''' - '''反魔法エンチャント''') / 100 です | |||
ペットや味方ミニオンの場合、魔法のパワーは('''魔法レベル''' x 8 + 50)の部分が、[キャラレベル * 6 + 30] か [関連主能力 * 4 + 30] のうち大きい方で置き換えられます。 | |||
敵などの場合、魔法のパワーは('''魔法レベル''' x 8 + 50)の部分が、[キャラレベル * 6 + 30]で置き換えられます。 | |||
''' | '''curve 関数について: ''' '''<code>curve(a, start, step, rate)</code>''' | ||
簡単に言うと、この関数は数値の伸びを抑えるために使われます。 | |||
<code>i = 0</code> をセットします。計算 <code>num = start + i * step</code>. <code>a</code> が <code>num</code> を超えたら、超えた部分に <code>rate / 100</code> を掛けます。その後、<code>i</code> を 1 ずつ増やします。上記のステップを 10 回繰り返します。 | |||
関数の曲線の傾きは徐々に小さくなり、最終的には<code>(rate / 100)^10</code> となります。 | |||
==魔法:攻撃魔法== | ==魔法:攻撃魔法== | ||
ダイス数、ダイス面、ダメージボーナスは切り捨て。 | |||
[[File:Damage of different types of spells as of EA23.71.png|thumb|upright=5.0|標準偏差を含むEA23.71時点での各種魔法のダメージ。パラメータは魔力=100固定、x軸は魔法レベル、y軸は平均ダメージ]] | |||
{| class="wikitable" | {| class="wikitable" | ||
!魔法 | !魔法 | ||
| Line 428: | Line 710: | ||
|5+魔法のパワー/80 | |5+魔法のパワー/80 | ||
| | | | ||
|ターンに1回ダメージを与える | | ターンに1回ダメージを与える | ||
|- | |- | ||
|ブレス | |ブレス | ||
| Line 442: | Line 724: | ||
|火炎属性固定 | |火炎属性固定 | ||
ダメージ | ダメージ 発動者から10マスの半径のボール内のすべてのターゲットにダメージを与えます。 壁でブロックされることがあります。 また、発動者にもダメージを与えます。 | ||
|- | |- | ||
|地震 | |地震 | ||
| | |1+魔法のパワー/30 | ||
| | |2+対応主能力/3 | ||
| | | | ||
|衝撃属性固定 | |衝撃属性固定 | ||
発動者から12マスの半径のボール内のすべてのターゲットにダメージを与えます。 重力デバフを持つ敵には、最大ダイスダメージの2倍のダメージを与えます。 浮遊効果を持つ敵には、ダメージの半分を与えます。 | |||
|- | |- | ||
|破呪 | |破呪 | ||
| Line 515: | Line 797: | ||
| | | | ||
| | | | ||
|} | |||
==魔法:バフ魔法== | |||
{| class="wikitable" | |||
!魔法 | |||
!パワー | |||
!持続時間 | |||
!備考 | |||
|- | |||
|(属性)の唄 | |||
|(魅力/40 + 1)*5 | |||
|魔法のパワー/25 + 8 | |||
|ここでいう「パワー」は、獲得できる属性耐性のこと | |||
|- | |||
|テレパシー | |||
|固定 | |||
|魔法のパワー/5 + 15 | |||
| | |||
|- | |||
|透明化 | |||
|魔法のパワー/30 + 5 | |||
|魔法のパワー/12 + 6 | |||
| | |||
|- | |||
|透明可視 | |||
|魔法のパワー/40 + 6 | |||
|魔法のパワー/6 + 12 | |||
| | |||
|- | |||
|インコグニート | |||
|固定 | |||
|魔法のパワー/2 + 20 | |||
| | |||
|- | |||
|猫の目 | |||
|魔法のパワー/30 + 5 | |||
|魔法のパワー*3 | |||
| | |||
|- | |||
|ホーリーヴェイル | |||
|固定 | |||
|魔法のパワー/6 + 5 | |||
| | |||
|- | |||
|元素保護 | |||
|魔法のパワー/200 + 5 | |||
|魔法のパワー/15 + 8 | |||
|ここでいう「パワー」は、獲得できる元素耐性のこと | |||
|- | |||
|英雄 | |||
|筋力: 魔法のパワー/30 + 5 | |||
器用: 魔法のパワー/30 + 5 | |||
|魔法のパワー/4 + 10 | |||
| | |||
|- | |||
|浮遊 | |||
|固定 | |||
|魔法のパワー/5 + 10 | |||
| | |||
|- | |||
|聖なる盾 | |||
| 魔法のパワー/15 + 15 | |||
|魔法のパワー/3 + 10 | |||
| | |||
|- | |||
|知者 | |||
|魔力: 魔法のパワー/40 + 6 | |||
学習: 魔法のパワー/40 + 6 | |||
読書: 魔法のパワー/40 + 3 | |||
|魔法のパワー/4 + 10 | |||
| | |||
|- | |||
|ホウキ変容 | |||
|固定 | |||
|魔法のパワー + 30 | |||
| | |||
|} | |||
==魔法:デバフ魔法== | |||
{| class="wikitable" | |||
!魔法 | |||
!パワー | |||
!持続時間 | |||
!備考 | |||
|- | |||
|瘴気 | |||
|固定 | |||
|魔法のパワー/100 + 5 | |||
| | |||
|- | |||
|グラビティ | |||
|固定 | |||
|魔法のパワー/20 + 10 | |||
| | |||
|- | |||
|沈黙 | |||
|固定 | |||
|魔法のパワー/80 + 5 | |||
| | |||
|- | |||
|脆弱 | |||
|固定 | |||
| 魔法のパワー/50 + 10 | |||
| | |||
|- | |||
|災い | |||
|魔法のパワー/30 + 50 | |||
|魔法のパワー/50 + 10 | |||
| ここでいう「パワー」は、運の低下量のこと | |||
|- | |||
|破門 | |||
|固定 | |||
|魔法のパワー/50 + 20 | |||
| | |||
|- | |||
|元素の傷跡 | |||
|魔法のパワー/100 + 5 | |||
|魔法のパワー/40 + 8 | |||
|ここでいう「パワー」は、元素耐性の低下量のこと | |||
|} | |} | ||
| Line 540: | Line 942: | ||
{| class="wikitable" | {| class="wikitable" | ||
!魔法 | !魔法 | ||
!持続時間 | !持続時間 | ||
!レベル | ! レベル | ||
!備考 | !備考 | ||
|- | |- | ||
|具象 | |具象 | ||
|20 + rnd ( | |20 + rnd (10) + 魔法のパワー / 20 | ||
|魔法のパワー / 15 | |魔法のパワー / 15 | ||
| | | | ||
|- | |- | ||
|動物召喚 | |動物召喚 | ||
|死ぬまで | |死ぬまで | ||
|魔法レベル * (100 + 魔法のパワー / 10) / 100 + 魔法のパワー / 30 | |魔法レベル * (100 + 魔法のパワー / 10) / 100 + 魔法のパワー / 30 | ||
| Line 555: | Line 957: | ||
|- | |- | ||
|アンデッド妹召喚 | |アンデッド妹召喚 | ||
|死ぬまで | |死ぬまで | ||
|魔法レベル* (100 + 魔法のパワー / 10) / 100 + 魔法のパワー / 30 | |魔法レベル* (100 + 魔法のパワー / 10) / 100 + 魔法のパワー / 30 | ||
| | | | ||
|- | |- | ||
|影召喚 | |影召喚 | ||
|死ぬまで | |死ぬまで | ||
|魔法のパワー / 10 + 1 | |魔法のパワー / 10 + 1 | ||
| Line 569: | Line 971: | ||
{{DEFAULTSORT:カイセキ,ダメージケイサンシキ}} | {{DEFAULTSORT:カイセキ,ダメージケイサンシキ}} | ||
[[Category:JA]] | [[Category:JA]] | ||
<references /> | |||
Latest revision as of 08:21, 27 March 2025
このページには正規のプレイによって得られた情報ではなく、Elinのデータ解析・デバッグモード・内部ファイル閲覧などによって得た情報が掲載されています。 ゲームの重大なネタバレや、プレイの楽しみを損なう情報が含まれている可能性があります。 閲覧は自己責任でお願いするとともに、通常ページに解析ページへのリンクを貼ることはお控えください。 また、このページの情報をWikiの他のページに記載する際は計算コードなどをそのまま掲示するのではなく、コードが読めない人にもわかりやすいように内容を要約して書いていただけると幸いです。 |
Evalueリスト
| Value# | Element | 備考 |
|---|---|---|
| (92) | 貫通率 | |
| (108) | 投擲 | |
| (132) | 戦術 | |
| (133) | 射撃 | |
| (305) | 魔道具 | |
| (411) | 魔法強化エンチャント | |
| (482) | 理力武器 | |
| (1400) | 武器の知識フィート | 1, 2 |
| (1404) | 射撃の名手フィート | 1, 2 |
敵のレベルに応じたダメージ軽減
レベル50を超えた敵が受けるダメージ軽減量は以下の通りです:
まず、レベル50以下の敵の軽減率は0%、レベル1074以上の敵は軽減率80%となります。
if (!this.IsPCFaction && this.LV > 50)
{
dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt((float)(this.LV - 50)) * 2.5f)) / 100;
}
プレイヤーのファクションに属するキャラで、敵のレベルがLv50より高い場合:
与えるダメージに、* (100 - [ 2.5 * √(敵のレベル - 50) か 80 かのうち小さいほう ][1]) / 100が掛けられます。
つまり、Lv1074以上の敵に対してはダメージが80%減少し、Lv51~Lv1073の敵に対しては[sqrt(敵Lv-50) * 2.5]%減少します。
| 敵のLv | 軽減率(%) |
|---|---|
| 51 | 2 |
| 100 | 17 |
| 150 | 25 |
| 200 | 30 |
| 250 | 35 |
| 300 | 39 |
| 350 | 43 |
| 400 | 46 |
| 450 | 50 |
| 500 | 53 |
| 550 | 55 |
| 600 | 58 |
| 650 | 61 |
| 700 | 63 |
| 750 | 66 |
| 800 | 68 |
| 850 | 70 |
| 900 | 72 |
| 950 | 75 |
| 1000 | 77 |
| 1050 | 79 |
| 1074 | 80 |
| 1100 | 80 |
命中率
「CURVE」とはElinにて、スキル値の有効性を段階的に抑制する処理です。
CURVE( input, start, step, rate)
if input <= start
return input
repeat x10
{
num = start + repeatindex * step
if input <= num
return input
else
input = num + (input - num) * rate /100
}
return input
まず、システムは攻撃者の「命中力」とターゲットの「回避力」を評価します。
命中力の値は、使用する武器の種類(投擲、遠距離、近接、格闘)とスタイルによって異なる計算式で算出されます。
| 武器の種類 | 計算式 |
|---|---|
| 投擲 | CURVE([攻撃者の器用] / 4 + [攻撃者の筋力] / 2 + [攻撃者の武器スキル], 50, 25, 75) + 75(PCのファクション以外の場合250) |
| 格闘 (盾なし) | CURVE([攻撃者の器用] / 3 + [攻撃者の武器の主能力] / 3 + [攻撃者の武器スキル], 50, 25, 75) + 50 |
| 格闘 (盾あり) | CURVE([攻撃者の器用] / 3 + [攻撃者の武器の主能力] / 3 + [攻撃者の武器スキル], 50, 25, 75) + 50 の結果に0.75をかけたもの |
| ワンド | CURVE([攻撃者の意志] / 4 + [攻撃者の武器の主能力] / 3 + [攻撃者の武器スキル], 50, 25, 75) + 100 |
| その他すべての武器 | CURVE([攻撃者の器用or意志] / 4 + [攻撃者の武器の主能力] / 3 + [攻撃者の武器スキル], 50, 25, 75) + 50 |
上記の式で算出した値に装備と武器による命中修正が足し算され、その後遠距離武器には距離による修正が適用されたものが「命中力」となります。
「回避力」はこちらの式で計算されます。:CURVE ([対象の感覚] / 3 + [対象の回避スキル], 50, 10, 75) + [対象のDV] + 25
命中力・回避力に影響を与える以下の要素は、複合して作用しながら次の表の上から順で適用されます。[2]
| 条件 | 効果 |
|---|---|
| 攻撃者が災い状態 | 命中力 = 命中力 * 0.75 |
| 攻撃者が高所にいる | 命中力 = 命中力 * 1.2 |
| 攻撃者が乗馬している | 命中力 = 命中力 * 100 / (100 + 500 / (5 or 10 + [攻撃者の乗馬スキル] の高い方)) |
| 攻撃者がペットを寄生させている | 命中力 = 命中力 * 100 / (100 + 1000 / (5 or 10 + [攻撃者の共存スキル] の高い方)) |
| 騎乗されているペットによる攻撃 | 命中力 = 命中力 * 100 / (100 + 1000 / (5 or 10 + [攻撃者の筋力] の高い方)) |
| 寄生しているペットによる攻撃 | 命中力 = 命中力 * 100 / (100 + 1000 / (5 または 10 + [攻撃者の器用] の高い方)) |
| 攻撃者が両手持ち | 命中力 = 命中力 + 25 + sqrt([攻撃者の両手持ちスキル] * 2) |
| 攻撃者が二刀流 | 命中力 = 命中力 * 100 / (115 + 手の番号 * 15 + 手の番号 *(2000 / (20 + [攻撃者の二刀流スキル])[0-100でクランプ[3]]) |
| 攻撃者が盲目 | 命中力 = 命中力 * 0.333 (または、遠距離/投擲の場合は0.1) |
| 対象が盲目 | 回避力 = 回避力 * 0.5 |
| 対象が混乱もしくは朦朧 | 回避力 = 回避力 * 0.5 |
| 対象が高所にいる | 回避力 = 回避力 * 1.2 |
二刀流の補足説明:
ここでいう、「手の番号」は利き手・もう片方の手と、カオスシェイプなどが持つ2本目以降の手を表します。
1-100の間でクランプされるのは(2000 / (20 + [攻撃者の二刀流スキル])だけです。つまり、二刀流で最適化するには、二刀流スキルが1980必要です。
ここまでで最終的な命中力と回避力を計算しました。以下では攻撃が命中するか、外れるか、クリティカルになるかするまで、上から順に判定します。
苛立エンチャントの効果による攻撃の場合、確定クリティカル。
対象が朦朧状態の場合、25%の確率でクリティカル
対象が死亡または睡眠状態の場合、確定でクリティカル
[対象の見切りスキル] * 10 > 命中力の場合、見切り成否判定を行う。 見切り力 = 回避力 * 100 / 命中力 とし、以下3つの式を上から順に処理する。[4] 見切り力 > 300 かつ、 random 0 - ([対象の見切りスキル] + 250) > 100 のとき、攻撃は外れる 見切り力 > 200 かつ、 random 0 - ([対象の見切りスキル] + 250) > 150 のとき、攻撃は外れる 見切り力 > 150 かつ、 random 0 - ([対象の見切りスキル] + 250) > 200 のとき、攻撃は外れる
[対象の完全回避] > random 0 - 99 のとき、攻撃は外れる (random X-Yは等確率でXからYまでの乱数を生成する関数。0から99までの値が等確率で選ばれる。完全回避分の確率で回避する。)
random 0 - 19 が 0 のとき、攻撃は命中 (5%で対象の回避を無視して命中する)[5]
random 0 - 19 が 0 のとき、攻撃は外れる (5%で攻撃者の命中を無視して外れる)
命中力 < 1 のとき、攻撃は外れる
回避力 < 1 のとき、攻撃は命中[5]
random 0 - 命中力 < random 0 - (回避力 * 125 (遠距離攻撃なら150) / 100) のとき、攻撃は外れる
random 0 - 5000 < [攻撃者の感覚] + 50 のとき、攻撃はクリティカル
[攻撃者のクリティカルエンチャント合計] + sqrt([攻撃者の心眼スキル]) > random 0 - 200のとき、攻撃はクリティカル
攻撃者が[死の真髄]フィートを所持している場合、以下の判定を行う HP減少率 = 100 - [攻撃者の現在HP] * 100 / [攻撃者の最大HP] HP減少率 >= 50 かつ、 (HP減少率 ^ 4 / 3) > random 0 - 100000000 のとき、攻撃はクリティカル (HPが5割以上減っている状態で、減少率に応じて最小2%~最大33%の確率でクリティカル)
攻撃は命中
格闘
else if (IsMartial || IsMartialWeapon)
{
weaponSkill = CC.elements.GetOrCreateElement(100);
bool flag2 = weapon != null && weapon.Evalue(482) > 0;
if (flag2)
{
weaponSkill = CC.elements.GetOrCreateElement(305);
}
attackType = ((!CC.race.meleeStyle.IsEmpty()) ? CC.race.meleeStyle.ToEnum<AttackType>() : ((EClass.rnd(2) == 0) ? AttackType.Kick : AttackType.Punch));
dBonus = CC.DMG + CC.encLV + (int)Mathf.Sqrt(Mathf.Max(0, weaponSkill.GetParent(CC).Value / 5 + weaponSkill.Value / 4));
dNum = 2 + Mathf.Min(weaponSkill.Value / 10, 4);
dDim = 5 + (int)Mathf.Sqrt(Mathf.Max(0, weaponSkill.Value / 3));
dMulti = 0.6f + (float)(weaponSkill.GetParent(CC).Value / 2 + weaponSkill.Value / 2 + CC.Evalue(flag2 ? 304 : 132) / 2) / 50f;
dMulti += 0.05f * (float)CC.Evalue(1400);
toHitBase = EClass.curve(CC.DEX / 3 + weaponSkill.GetParent(CC).Value / 3 + weaponSkill.Value, 50, 25) + 50;
toHitFix = CC.HIT;
if (attackStyle == AttackStyle.Shield)
{
toHitBase = toHitBase * 75 / 100;
}
penetration = Mathf.Clamp(weaponSkill.Value / 10 + 5, 5, 20) + CC.Evalue(92);
if (IsMartialWeapon)
{
dBonus += weapon.DMG;
dNum += weapon.source.offense[0];
dDim = Mathf.Max(dDim / 2 + weapon.c_diceDim, 1);
toHitFix += weapon.HIT;
penetration += weapon.Penetration;
if (!weapon.source.attackType.IsEmpty())
{
attackType = weapon.source.attackType.ToEnum<AttackType>();
}
}
}
キャラクターは格闘スキルを使用して格闘攻撃を繰り出します。通常はパンチないしキックですが、武器の近接戦闘スタイルやキャラクターの特性に基づいて攻撃エフェクトは変わります。
武器に理力武器のエンチャントが付いている場合、格闘スキルの代わりに魔道具スキルを、戦術スキルの代わりに詠唱スキルを使用します。
素手及び通常の格闘武器の場合:
ダメージの基礎ダイス数は「2 + 格闘 / 10」で、最大で6です。
ダメージの基礎ダイス面は「5 + √(格闘 / 3)」です。
基礎ダメージ修正は「√(筋力 / 5 + 格闘 / 4) + 防具のダメージ修正合計 + キャラ固有のダメージ修正[6]」です。
ダメージ倍率は「0.6 + ((筋力 / 2 + 格闘 / 2 + 戦術 / 2) / 50.0)」です。
貫通率は「格闘 / 10 + 5」で、最低5%、最高で20%です。[7]
基礎命中力は「(器用 / 3 + 筋力 / 3 + 格闘)」を、スタート50、ステップ25、レート75%のCURVE関数で計算した後、50を足したものです。
理力武器のエンチャントが付いた格闘武器の場合:
ダメージの基礎ダイス数は「2 + 魔道具 / 10」で、最大で6です。
ダメージの基礎ダイス面は「5 + √(魔道具 / 3)」です。
基礎ダメージ修正は「√(魔力 / 5 + 魔道具 / 4) + 防具のダメージ修正合計 + キャラ固有のダメージ修正[6]」です。
ダメージ倍率は「0.6 + ((魔力 / 2 + 魔道具 / 2 + 詠唱 / 2) / 50.0)」です。
基礎貫通率は「魔道具 / 10 + 5」で、最低5%、最高で20%です。[7]
基礎命中力は「器用 / 3 + 魔力 / 3 + 魔道具」を、スタート50、ステップ25、レート75%のCURVE関数で計算した後、50を足したものです。
プレイヤーが武器の知識フィートを持っている場合、ダメージ倍率に『0.05×(武器の知識フィートのランク)』だけ加算されます。(事実上、+0.05または+0.10)
プレイヤーが盾を装備している場合、基礎命中力は0.75倍に修正されます。
上記の後、基礎命中力に防具の命中修正が加算されます。
さらに、格闘武器を装備している場合は以下の修正を受けます。
最終的なダイス数は「基礎ダイス数 + 武器の基礎ダイス数」です。
最終的なダイス面は「基礎ダイス面 / 2 + 武器の基礎ダイス数」です。
最終的なダメージ修正は「基礎ダメージ修正 + 武器のダメージ修正」です。
最終的な命中力は「基礎命中力 + 武器の命中修正」です。
最終的な貫通率は「基礎貫通率 + 武器の貫通率」です。
投擲
if (isThrow)
{
bool flag = weapon.HasTag(CTAG.throwWeapon) || weapon.HasTag(CTAG.throwWeaponEnemy);
int num2 = (int)Mathf.Clamp(Mathf.Sqrt(weapon.SelfWeight + weapon.ChildrenWeight) * 3f + 25f + (float)(flag ? 75 : 0), 10f, 400f + Mathf.Sqrt(CC.STR) * 50f);
int num3 = Mathf.Clamp(weapon.material.hardness, flag ? 40 : 20, 200);
weaponSkill = CC.elements.GetOrCreateElement(108);
attackType = AttackType.Blunt;
dBonus = CC.DMG + (CC.IsPCParty ? 3 : 7);
dNum = 2;
dDim = (((!CC.IsPCParty) ? CC.LV : 0) + CC.STR + CC.Evalue(108)) * num2 * num3 / 10000 / 2;
dMulti = 1f;
toHitBase = EClass.curve(CC.DEX / 4 + CC.STR / 2 + weaponSkill.Value, 50, 25) + (CC.IsPCFaction ? 75 : 250);
toHitFix = CC.HIT + weapon.HIT;
penetration = 25;
}
プレイヤーの投げたアイテムは投擲武器であってもそうでなくても投擲スキルを参照します。
攻撃エフェクトは常に鈍器です。
重量値は 25 + 投擲武器限定75[8] + 3 * √ [アイテムの重量] ですが、下限10、上限400 + 50 * √(筋力)があります。
ここでいうアイテムの重量はゲーム中の〇.〇sに1000をかけたものです。
武器の材質値は素材の硬度です。上限は200で、これはダークマターの硬度と等しく、下限は投擲武器を投げている場合で40、それ以外では20として設定されています。
ダイスの数は常に「2」です。
ダイスの面は「((プレイヤーパーティー外のキャラのみLv) + 筋力 + 投擲 ) * 重量値 * 武器の材質値 / 10000 / 2」です。
ダメージボーナスは「(プレイヤーパーティー内のキャラの場合:3、それ以外の場合:7) + 武器のダメージ修正 + 防具のダメージ修正合計 + キャラ固有のダメージ修正[6]」です。
ダメージ倍率は常に「1」です。
貫通力は常に25%です。
基礎命中力は「器用 / 4 + 筋力 / 2 + 投擲」を、スタート50、ステップ25、レート75%のCURVE関数で計算した後、プレイヤーキャラクターの場合:75、それ以外の場合:250 を足したもので、
最終的な命中力は「基礎命中力 + 武器の命中修正 + 防具の命中修正合計」です。
近接&遠隔武器
else
{
if (IsRanged)
{
weaponSkill = CC.elements.GetOrCreateElement(toolRange.WeaponSkill);
}
else
{
weaponSkill = CC.elements.GetOrCreateElement(weapon.category.skill);
}
if (!weapon.source.attackType.IsEmpty())
{
attackType = weapon.source.attackType.ToEnum<AttackType>();
}
bool flag3 = IsCane || weapon.Evalue(482) > 0;
if (flag3)
{
weaponSkill = CC.elements.GetOrCreateElement(305);
}
dBonus = CC.DMG + CC.encLV + weapon.DMG;
dNum = weapon.source.offense[0];
dDim = weapon.c_diceDim;
dMulti = 0.6f + (float)(weaponSkill.GetParent(CC).Value + weaponSkill.Value / 2 + CC.Evalue(flag3 ? 304 : (IsRanged ? 133 : 132))) / 50f;
dMulti += 0.05f * (float)CC.Evalue(IsRanged ? 1404 : 1400);
toHitBase = EClass.curve((IsCane ? CC.WIL : CC.DEX) / 4 + weaponSkill.GetParent(CC).Value / 3 + weaponSkill.Value, 50, 25) + 50;
toHitFix = CC.HIT + weapon.HIT;
penetration = weapon.Penetration + CC.Evalue(92);
if (IsCane)
{
toHitBase += 50;
}
}
if (ammo != null && !(ammo.trait is TraitAmmoTalisman))
{
dNumAmmo = ((ammo.source.offense.Length != 0) ? ammo.source.offense[0] : 0);
dDimAmmo = ammo.c_diceDim;
dBonusAmmo = ammo.DMG + ammo.encLV;
if (dNumAmmo < 1)
{
dNumAmmo = 1;
}
if (dDimAmmo < 1)
{
dDimAmmo = 1;
}
toHitFix += ammo.HIT;
}
else
{
dNumAmmo = 0;
dDimAmmo = 0;
}
プレイヤーは、戦術スキルを使用して近接武器を振るうか、または射撃スキルを使用して遠距離武器を撃ちます。
武器がワンド、または理力武器のエンチャントが付いている場合、戦術スキルまたは射撃スキルの代わりに詠唱スキルを、武器スキル(長剣、短剣、斧など)の代わりに魔道具スキルを使用します。
ダメージのダイス数及びダイス面は武器に表記されているものを使用します。
基礎ダメージ修正は「攻撃中の武器のダメージ修正 + 防具のダメージ修正合計 + キャラ固有のダメージ修正[6]」です。
ダメージ倍率は「0.6 + (武器スキルに対応する主能力 + 武器スキル / 2 + (近接武器は戦術、遠距離武器は射撃、ワンドまたは理力武器の場合魔道具)) / 50.0)」です。
プレイヤーが武器の知識フィートを持っている場合、ダメージ倍率に『0.05 * (武器の知識フィートのランク)』だけ加算されます。(事実上、+0.05または+0.10)
貫通率は武器に表記されているものを使用します。[7]
基礎命中力は「(器用、ワンドなら意志) / 4 + 武器スキルに対応する主能力 / 3 + 武器スキル 」を、スタート50、ステップ25、レート75%のCURVE関数で計算した後、50を足したものです。
命中力は「基礎命中力 + 攻撃中の武器の命中修正 + 防具の命中修正合計 + (ワンドのみ:50、それ以外は0)」です。
さらに、弾薬を消費して攻撃した場合:
ダメージ修正に「弾薬のダメージダイスを振った結果 + 弾薬のダメージ修正」を加算します。
命中力に「弾薬の命中修正」を加算します。
遠隔武器の命中率&ダメージと距離
distMod = 100;
…
if (!isThrow)
{
if (!IsRanged)
{
attackStyle = CC.body.GetAttackStyle();
}
else if (TP != null)
{
int num = CC.pos.Distance(TP);
distMod = Mathf.Max(115 - 10 * Mathf.Abs(num - toolRange.BestDist) * 100 / (100 + weapon.Evalue(605) * 10), 80);
}
}
…
dMulti = dMulti * (float)distMod / 100f;
toHit = toHitBase + toHitFix;
toHit = toHit * distMod / 100;
遠隔武器には、適正の攻撃距離があり、それによって命中力とダメージ倍率が増減します。
Evalue(605)はmod_precisionであり、遠隔武器の改造道具の精密射撃レベルにあたります。
適正攻撃距離から離れているほど、ペナルティも増えます。
精密射撃の改造道具のない場合、0(適正攻撃距離)の時は命中力、ダメージ共に115%になります、±1は105%、±2は95%、±3は85%、それ以降は80%になります。
精密射撃modの強度と適正距離差による命中力とダメージの倍率(%)は以下の表のようになっています。
| 精密射撃mod強度 | 適正距離差0 | 適正距離差1 | 適正距離差2 | 適正距離差3 | 適正距離差4 |
|---|---|---|---|---|---|
| 0 | 115 | 105 | 95 | 85 | 80 |
| 10 | 115 | 110 | 105 | 100 | 95 |
| 20 | 115 | 112 | 109 | 105 | 102 |
| 30 | 115 | 113 | 110 | 108 | 105 |
| 40 | 115 | 113 | 111 | 109 | 107 |
| 50 | 115 | 114 | 112 | 110 | 109 |
| 60 | 115 | 114 | 113 | 111 | 110 |
| 70 | 115 | 114 | 113 | 112 | 110 |
| 80 | 115 | 114 | 113 | 112 | 111 |
| 90 | 115 | 114 | 113 | 112 | 111 |
| 99 | 115 | 115 | 114 | 113 | 112 |
魔法:魔法のパワー
EA 23.79 Nightly Patch 1
これはAbility.csの44行目です
ここに、魔法のパワーを決定するためにどの式を使用するかを記述したコードが書かれています
public override int GetPower(Card c)
{
int a = base.Value * 8 + 50;
if (!c.IsPC)
{
a = Mathf.Max(a, c.LV * 6 + 30);
if (c.IsPCFactionOrMinion && !base.source.aliasParent.IsEmpty())
{
a = Mathf.Max(a, c.Evalue(base.source.aliasParent) * 4 + 30);
}
}
a = EClass.curve(a, 400, 100);
if (this is Spell)
{
a = a * Mathf.Max(100 + c.Evalue(411) - c.Evalue(93), 1) / 100;
}
return a;
}ここではカーブ関数を使用します:
public static int curve(int a, int start, int step, int rate = 75)
{
if (a <= start)
{
return a;
}
for (int i = 0; i < 10; i++)
{
int num = start + i * step;
if (a <= num)
{
return a;
}
a = num + (a - num) * rate / 100;
}
return a;
} }.プレイヤーの魔法のパワーはcurve[ (魔法レベル x 8 + 50), 400, 100, 75 ] x (100 + 魔法強化エンチャント - 反魔法エンチャント) / 100 です
ペットや味方ミニオンの場合、魔法のパワーは(魔法レベル x 8 + 50)の部分が、[キャラレベル * 6 + 30] か [関連主能力 * 4 + 30] のうち大きい方で置き換えられます。
敵などの場合、魔法のパワーは(魔法レベル x 8 + 50)の部分が、[キャラレベル * 6 + 30]で置き換えられます。
curve 関数について: curve(a, start, step, rate)
簡単に言うと、この関数は数値の伸びを抑えるために使われます。
i = 0 をセットします。計算 num = start + i * step. a が num を超えたら、超えた部分に rate / 100 を掛けます。その後、i を 1 ずつ増やします。上記のステップを 10 回繰り返します。
関数の曲線の傾きは徐々に小さくなり、最終的には(rate / 100)^10 となります。
魔法:攻撃魔法
ダイス数、ダイス面、ダメージボーナスは切り捨て。
| 魔法 | ダイス数 | ダイス面 | ダメージボーナス | 備考 |
|---|---|---|---|---|
| 手 | 1+魔法のパワー/100+対応主能力/10 | 3+魔法のパワー/50 | 近接範囲 | |
| 矢 | 1+魔法のパワー/160+対応主能力/30 | 8+魔法のパワー/12 | 魔法のパワー/25 | 単体攻撃 |
| 光線 | 1+魔法のパワー/120+対応主能力/20 | 4+魔法のパワー/20 | 10マスにわたる直線上のすべてのターゲットにダメージを与える | |
| 球 | 1+魔法のパワー/70+対応主能力/20 | 2+魔法のパワー/35 | 発動者から5マスの範囲のボール内のすべてのターゲットにダメージを与える
ダメージ = ダメージ x 100 / (90 + 射程 x 10) | |
| 瘴気 | 2+魔法のパワー/150 | 5+魔法のパワー/80 | ターンに1回ダメージを与える | |
| ブレス | 1+魔法のパワー/80+対応主能力/20 | 6+魔法のパワー/100 | 対応主能力/4 | 発動者から7マスにわたる35°の円錐内のすべてのターゲットにダメージを与える |
| メテオ | 1+魔法のパワー/150 | 4+対応主能力*3 | 火炎属性固定
ダメージ 発動者から10マスの半径のボール内のすべてのターゲットにダメージを与えます。 壁でブロックされることがあります。 また、発動者にもダメージを与えます。 | |
| 地震 | 1+魔法のパワー/30 | 2+対応主能力/3 | 衝撃属性固定
発動者から12マスの半径のボール内のすべてのターゲットにダメージを与えます。 重力デバフを持つ敵には、最大ダイスダメージの2倍のダメージを与えます。 浮遊効果を持つ敵には、ダメージの半分を与えます。 | |
| 破呪 | 1+魔法のパワー/160+対応主能力/30 | 8+魔法のパワー/12 | 魔法のパワー/25 | 対象のすべてのデバフを除去し、周囲の敵にダメージを与えます。
対象に少なくとも1つのデバフがなければ効果はありません。 |
魔法:回復魔法
| 魔法 | ダイス数 | ダイス面 | 回復ボーナス | 備考 |
|---|---|---|---|---|
| 軽傷治癒 | 1+魔法のパワー/50+Will/30 | 5+魔法のパワー/40 | 魔法のパワー/30 | |
| 重傷治癒 | 2+魔法のパワー/40+Will/25 | 6+魔法のパワー/30 | 魔法のパワー/25 | |
| 致命傷治癒 | 3+魔法のパワー/35+Will/20 | 7+魔法のパワー/25 | 魔法のパワー/20 | |
| Healing | 4+魔法のパワー/30+Will/15 | 8+魔法のパワー/20 | 魔法のパワー/15 | |
| 《エリス》の癒し | 5+魔法のパワー/25+Will/10 | 9+魔法のパワー/15 | 魔法のパワー/10 | |
| 《オディナ》の癒し | 6+魔法のパワー/20+Will/5 | 10+魔法のパワー/10 | 魔法のパワー/5 | |
| 《ジュア》の癒し | 8+魔法のパワー/10+Will | 15+魔法のパワー/5 | 魔法のパワー | |
| 自然の抱擁 | 1+魔法のパワー/125 | 4+魔法のパワー/75 |
魔法:バフ魔法
| 魔法 | パワー | 持続時間 | 備考 |
|---|---|---|---|
| (属性)の唄 | (魅力/40 + 1)*5 | 魔法のパワー/25 + 8 | ここでいう「パワー」は、獲得できる属性耐性のこと |
| テレパシー | 固定 | 魔法のパワー/5 + 15 | |
| 透明化 | 魔法のパワー/30 + 5 | 魔法のパワー/12 + 6 | |
| 透明可視 | 魔法のパワー/40 + 6 | 魔法のパワー/6 + 12 | |
| インコグニート | 固定 | 魔法のパワー/2 + 20 | |
| 猫の目 | 魔法のパワー/30 + 5 | 魔法のパワー*3 | |
| ホーリーヴェイル | 固定 | 魔法のパワー/6 + 5 | |
| 元素保護 | 魔法のパワー/200 + 5 | 魔法のパワー/15 + 8 | ここでいう「パワー」は、獲得できる元素耐性のこと |
| 英雄 | 筋力: 魔法のパワー/30 + 5
器用: 魔法のパワー/30 + 5 |
魔法のパワー/4 + 10 | |
| 浮遊 | 固定 | 魔法のパワー/5 + 10 | |
| 聖なる盾 | 魔法のパワー/15 + 15 | 魔法のパワー/3 + 10 | |
| 知者 | 魔力: 魔法のパワー/40 + 6
学習: 魔法のパワー/40 + 6 読書: 魔法のパワー/40 + 3 |
魔法のパワー/4 + 10 | |
| ホウキ変容 | 固定 | 魔法のパワー + 30 |
魔法:デバフ魔法
| 魔法 | パワー | 持続時間 | 備考 |
|---|---|---|---|
| 瘴気 | 固定 | 魔法のパワー/100 + 5 | |
| グラビティ | 固定 | 魔法のパワー/20 + 10 | |
| 沈黙 | 固定 | 魔法のパワー/80 + 5 | |
| 脆弱 | 固定 | 魔法のパワー/50 + 10 | |
| 災い | 魔法のパワー/30 + 50 | 魔法のパワー/50 + 10 | ここでいう「パワー」は、運の低下量のこと |
| 破門 | 固定 | 魔法のパワー/50 + 20 | |
| 元素の傷跡 | 魔法のパワー/100 + 5 | 魔法のパワー/40 + 8 | ここでいう「パワー」は、元素耐性の低下量のこと |
魔法:召喚魔法
case EffectId.Funnel:
{
if (EClass._zone.CountMinions(CC) > CC.MaxSummon || CC.c_uidMaster != 0)
{
CC.Say("summon_ally_fail", CC, null, null);
return;
}
CC.Say("spell_funnel", CC, element.Name.ToLower(), null);
CC.PlaySound("spell_funnel", 1f, true);
Chara chara = CharaGen.Create("bit", -1);
chara.SetMainElement(element.source.alias, element.Value, true);
chara.SetSummon(20 + power / 20 + EClass.rnd(10));
chara.SetLv(power / 15);
EClass._zone.AddCard(chara, tp.GetNearestPoint(false, false, true, false));
chara.PlayEffect("teleport", true, 0f, default(Vector3));
chara.MakeMinion(CC, MinionType.Default);
return;
}
| 魔法 | 持続時間 | レベル | 備考 |
|---|---|---|---|
| 具象 | 20 + rnd (10) + 魔法のパワー / 20 | 魔法のパワー / 15 | |
| 動物召喚 | 死ぬまで | 魔法レベル * (100 + 魔法のパワー / 10) / 100 + 魔法のパワー / 30 | |
| アンデッド妹召喚 | 死ぬまで | 魔法レベル* (100 + 魔法のパワー / 10) / 100 + 魔法のパワー / 30 | |
| 影召喚 | 死ぬまで | 魔法のパワー / 10 + 1 | 自爆攻撃を行う |
- ↑ 正確には小さい方を四捨五入したもの
- ↑ プログラムでは、X=X+1のように、同じ文字が一つの式に複数回登場して右辺にあるものが調整前の数字、左辺にあるものが調整後の数字になる記法があります。
- ↑ クランプとは値に上限と下限を適用するという意味です。この場合、確率なので0から100%に設定されています
- ↑ 見切り力が301以上であれば、見切りによる回避判定は3回行われる
- ↑ 5.0 5.1 この場合、クリティカルにはならない。
- ↑ 6.0 6.1 6.2 6.3 エーテル病の殺戮への飢えが該当する。
- ↑ 7.0 7.1 7.2 固有の貫通率を持っているキャラクターであればその値も加算される。
- ↑ 投擲武器でないときは0