Elin:解析/戦闘: Difference between revisions
Sakumashiki (talk | contribs) (攻撃の命中率について) |
Sakumashiki (talk | contribs) m (→命中率) |
||
Line 52: | Line 52: | ||
「CURVE」とは、スキル値の有効性にスライドカーブを追加するゲームの手法を指します。 | 「CURVE」とは、スキル値の有効性にスライドカーブを追加するゲームの手法を指します。 | ||
CURVE( input, start, step, rate) | |||
if input <= start | |||
CURVE( input, start, step, rate) | return input | ||
if input <= start | |||
return input | repeat x10 | ||
{ | |||
repeat x10 | num = start + repeatindex * step | ||
{ | if input <= num | ||
return input | |||
else | |||
input = num = (input - num) * rate /100 | |||
else | } | ||
return input | |||
} | |||
return input | |||
まず、システムは攻撃者の「命中」とターゲットの「回避」を評価します。 | まず、システムは攻撃者の「命中」とターゲットの「回避」を評価します。 | ||
Latest revision as of 13:35, 3 December 2024
このページには正規のプレイによって得られた情報ではなく、Elinのデータ解析・デバッグモード・内部ファイル閲覧などによって得た情報が掲載されています。 ゲームの重大なネタバレや、プレイの楽しみを損なう情報が含まれている可能性があります。 閲覧は自己責任でお願いするとともに、通常ページに解析ページへのリンクを貼ることはお控えください。 また、このページの情報をWikiの他のページに記載する際は計算コードなどをそのまま掲示するのではなく、コードが読めない人にもわかりやすいように内容を要約して書いていただけると幸いです。 |
Evalueリスト
Value# | Element | 備考 |
---|---|---|
(92) | 貫通率 | |
(108) | 投擲 | |
(132) | 戦術 | |
(133) | 射撃 | |
(305) | 魔道具 | |
(411) | 魔法強化エンチャント | |
(482) | 理力武器 | |
(1400) | 武器の知識フィート | 1, 2 |
(1404) | 射撃の名手フィート | 1, 2 |
命中率
EA23.46更新
「CURVE」とは、スキル値の有効性にスライドカーブを追加するゲームの手法を指します。
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)の75% + 50 |
ワンド | CURVE([攻撃者の意志]/4 + [攻撃者の武器の主能力]/3 + [攻撃者の武器スキル], 50, 25, 75) + 100 |
その他すべての武器 | CURVE([攻撃者の器用]/4 + [攻撃者の武器の主能力]/3 [攻撃者の武器スキル], 50, 25, 75) + 50 |
上記の式で算出した値に装備と武器による命中修正が加算され、その後遠距離武器には距離による修正が適用されます。
回避はこちらの式で計算されます。:CURVE ([対象の感覚] / 3 + [対象の回避スキル], 50, 10, 75) + [対象のDV] + 25
命中率に影響を与える以下の要素は、複合して作用しながら以下の順序で適用されます。
条件 | 効果 |
---|---|
攻撃者が災い状態 | 命中 = 75% |
攻撃者が高所にいる | 命中 +20% |
攻撃者が乗馬している | 命中 = 命中 * 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でクランプ]) |
攻撃者が盲目 | 命中 = 33.33% (または、遠距離/投擲の場合は10%) |
対象が盲目 | 回避率 = 50 |
対象が朦朧 | 回避率 = 50 |
対象が高所にいる | 回避率 + 20 |
システムには命中率と回避率の値が設定されており、攻撃が命中、外れる、クリティカルの順に、これらの値を使用して計算します。
対象が朦朧状態の場合、4分の1の確率でクリティカル
対象が死亡または睡眠状態の場合、確定でクリティカル
[対象の見切りスキル] × 10 > 命中の場合、以下の式で判定 num = 回避 * 100 / 命中 'num2' > 300 & random 0 to ([対象の見切りスキル]+250) > 100 のとき、攻撃は外れる 'num2' > 200 & random 0 to ([対象の見切りスキル]+250) > 150 のとき、攻撃は外れる 'num2' > 150 & random 0 to ([対象の見切りスキル]+250) > 200 のとき、攻撃は外れる
[対象の完全回避のパラメータ] > random 0 - 99 のとき、攻撃は外れる
1 in 20 のとき、攻撃は命中
1 in 20 のとき、攻撃は外れる
命中 < 1 のとき、攻撃は外れる
回避 < 1 のとき、攻撃は命中
random 0 - 命中 < random 0 - (回避 * 125 (遠距離攻撃なら150) / 100) のとき、攻撃は外れる
random 0 - 5000 < [攻撃者の感覚]のとき、攻撃はクリティカル
[攻撃者のCriticalスキル] + sqrt([攻撃者の心眼スキル]) > random 0 -200のとき、攻撃はクリティカル
攻撃者が[死の真髄]フィートを所持している場合、以下の判定を行う num = 100 - [攻撃者の現在HP] * 100 / [攻撃者の最大HP] num >= 50 & (num^3 / 3) > random 0 - 100000000 のとき、攻撃はクリティカル
攻撃は命中
格闘
else if (this.IsMartial || this.IsMartialWeapon)
{
this.weaponSkill = this.CC.elements.GetOrCreateElement(100);
this.attackType = (this.CC.race.meleeStyle.IsEmpty() ? ((EClass.rnd(2) == 0) ? AttackType.Kick : AttackType.Punch) : this.CC.race.meleeStyle.ToEnum(true));
this.dBonus = this.CC.DMG + this.CC.encLV + (int)Mathf.Sqrt((float)(this.CC.STR / 5 + this.weaponSkill.Value / 4));
this.dNum = 2 + Mathf.Min(this.weaponSkill.Value / 10, 4);
this.dDim = 5 + (int)Mathf.Sqrt((float)(this.weaponSkill.Value / 3));
this.dMulti = 0.6f + (float)(this.CC.STR / 2 + this.weaponSkill.Value / 2 + this.CC.Evalue(132) / 2) / 50f;
this.dMulti += 0.05f * (float)this.CC.Evalue(1400);
this.toHitBase = EClass.curve(this.CC.DEX / 3 + this.CC.STR / 3 + this.weaponSkill.Value, 50, 25, 75) + 50;
this.toHitFix = this.CC.HIT;
if (this.attackStyle == AttackStyle.Shield)
{
this.toHitBase = this.toHitBase * 75 / 100;
}
this.penetration = Mathf.Clamp(this.weaponSkill.Value / 10 + 5, 5, 20) + this.CC.Evalue(92);
if (this.IsMartialWeapon)
{
this.dBonus += this.weapon.DMG;
this.dNum += this.weapon.source.offense[0];
this.dDim = Mathf.Max(this.dDim / 2 + this.weapon.c_diceDim, 1);
this.toHitFix += this.weapon.HIT;
this.penetration += this.weapon.Penetration;
if (!this.weapon.source.attackType.IsEmpty())
{
this.attackType = this.weapon.source.attackType.ToEnum(true);
}
}
}
プレイヤーは格闘スキルを使用してキックまたはパンチを繰り出します。近接戦闘スタイルやキャラクターの特性に基づいて攻撃エフェクトは変わります。
ダメージは「格闘、筋力、器用、エンチャント値」によって決定されます。
ダメージのダイスは「2+(格闘/10)」、最大で「d6」です。
ダイスのダメージ値は「5+√(格闘/3)」です。
ダメージ倍率は『0.6 + ((筋力 / 2 + 格闘 / 2 + 戦術 / 2) / 50.0)』です。
プレイヤーが武器の知識フィートを持っている場合、追加ダメージが『0.05×(武器の知識フィートのランク)』の割合で与えられます。(事実上、+0.05または+0.10)
命中率は「(筋力/3 + 器用/3 + 格闘)+50)」で、最低値は「25+50」、最高値は「75+50」です。プレイヤーが「盾」を装備している場合、-25%の下方修正があります。
貫通率は「(格闘/10)+5」で計算され、最低5%、最高「20% + 貫通率」です。
格闘技武器を装備している場合:
ダメージボーナスは素手のダメージボーナス + 武器のダメージボーナス
ダイス数は、素手のダイス数 + 武器のダイス数
ダイス面は、素手のダイス面 / 2 + 武器のダイス面
命中ボーナスは素手の命中命中ボーナス + 武器の命中ボーナス
貫通率は素手の貫通率 + 武器の貫通率
投擲
if (this.isThrow)
{
bool flag = this.weapon.HasTag(CTAG.throwWeapon) || this.weapon.HasTag(CTAG.throwWeaponEnemy);
int num2 = (int)Mathf.Clamp(Mathf.Sqrt((float)(this.weapon.SelfWeight + this.weapon.ChildrenWeight)) * 3f + 25f + (float)(flag ? 75 : 0), 10f, 400f + Mathf.Sqrt((float)this.CC.STR) * 50f);
int num3 = Mathf.Clamp(this.weapon.material.hardness, flag ? 40 : 20, 200);
this.weaponSkill = this.CC.elements.GetOrCreateElement(108);
this.attackType = AttackType.Blunt;
this.dBonus = (this.CC.IsPCParty ? 3 : 7);
this.dNum = 2;
this.dDim = ((this.CC.IsPCParty ? 0 : this.CC.LV) + this.CC.STR + this.CC.Evalue(108)) * num2 * num3 / 10000 / 2;
this.dMulti = 1f;
this.toHitBase = EClass.curve(this.CC.DEX / 4 + this.CC.STR / 2 + this.weaponSkill.Value, 50, 25, 75) + (this.CC.IsPC ? 75 : 250);
this.toHitFix = this.CC.HIT + this.weapon.HIT;
this.penetration = 25;
}
プレイヤーの投げたアイテムは、投擲スキルの使用するかしないかにかかわらず、手元に戻ってきます。
攻撃エフェクトは常に鈍器です。
重量値は√アイテムの重量×3 + 武器を投げている場合: 75 それ以外は0、10から400までの範囲で、√(筋力 x 50)を上限とします
武器の材質値は材質の硬度で、武器を投げている場合は40、それ以外は0から200までの範囲で下限が設定されます
ダイスの目は常に2です
ダイスの目は (プレイヤーキャラクターでない場合:キャラクターレベル + 筋力 + 投擲 ) x 武器の重量値 x 武器の材質値 / 10000 / 2
正確さは、器用/4 + 筋力/2 + 投擲で、最低値は25+50、最高値は75+50 + (プレイヤーキャラクターの場合:75、それ以外:250)
命中ボーナスは、キャラクターの命中ボーナス + 武器の命中ボーナス
ダメージボーナスは、プレイヤーキャラクターの場合:3、それ以外:7
ダメージ倍率は常に1
貫通力は常に25です。
近接&遠隔武器
else
{
if (this.IsRanged)
{
this.weaponSkill = this.CC.elements.GetOrCreateElement(this.toolRange.WeaponSkill);
}
else
{
this.weaponSkill = this.CC.elements.GetOrCreateElement(this.weapon.category.skill);
}
if (!this.weapon.source.attackType.IsEmpty())
{
this.attackType = this.weapon.source.attackType.ToEnum(true);
}
bool flag2 = this.IsCane || this.weapon.Evalue(482) > 0;
if (flag2)
{
this.weaponSkill = this.CC.elements.GetOrCreateElement(305);
}
this.dBonus = this.CC.DMG + this.CC.encLV + this.weapon.DMG;
this.dNum = this.weapon.source.offense[0];
this.dDim = this.weapon.c_diceDim;
this.dMulti = 0.6f + (float)(this.weaponSkill.GetParent(this.CC).Value + this.weaponSkill.Value / 2 + this.CC.Evalue(flag2 ? 304 : (this.IsRanged ? 133 : 132))) / 50f;
this.dMulti += 0.05f * (float)this.CC.Evalue(this.IsRanged ? 1404 : 1400);
this.toHitBase = EClass.curve((this.IsCane ? this.CC.WIL : this.CC.DEX) / 4 + this.weaponSkill.GetParent(this.CC).Value / 3 + this.weaponSkill.Value, 50, 25, 75) + 50;
this.toHitFix = this.CC.HIT + this.weapon.HIT;
this.penetration = this.weapon.Penetration + this.CC.Evalue(92);
if (this.IsCane)
{
this.toHitBase += 50;
}
}
if (this.ammo != null)
{
this.dNumAmmo = ((this.ammo.source.offense.Length != 0) ? this.ammo.source.offense[0] : 0);
this.dDimAmmo = this.ammo.c_diceDim;
this.dBonusAmmo = this.ammo.DMG;
if (this.dNumAmmo < 1)
{
this.dNumAmmo = 1;
}
if (this.dDimAmmo < 1)
{
this.dDimAmmo = 1;
}
this.dBonus += this.ammo.DMG;
this.toHitFix += this.ammo.HIT;
}
else
{
this.dNumAmmo = 0;
this.dDimAmmo = 0;
}
プレイヤーは、戦術スキルを使用して近接武器を振るうか、または射撃スキルを使用して遠距離武器を撃ちます。
武器がワンドであるか、または理力武器のエンチャントが付いている場合、戦術スキルまたは射撃スキルの代わりに魔道具スキルを使用します
ダメージボーナスは、プレイヤーのダメージボーナス + 武器の改造道具によるダメージボーナス + 武器のダメージボーナスです
ダメージ倍率は0.6 + (武器に対応する主能力 + 武器スキル / 2 + (近接武器は戦術、遠距離武器は射撃、ワンドまたは理力武器の場合魔道具)) / 50
プレイヤーが武器の知識/射撃の名手のフィートを持っている場合、追加ダメージが0.05 x (フィートランク)の割合で与えられます。(事実上、+0.05または+0.10)
命中率は(器用、ワンドや理力武器なら意志) / 4 + 武器スキル / 3 + (近接武器は戦術、遠距離武器は射撃、ワンドまたは理力武器の場合魔道具) で、最小値は25+50、最大値は75+50です。
ワンドの命中率には、さらに+50が加わります
命中ボーナスは、キャラクターの命中ボーナス + 武器の命中ボーナス + 弾薬の命中ボーナス(弾薬を装填している場合)
ダメージボーナスは、キャラクターのダメージボーナス + 武器のダメージボーナス + 弾薬のダメージボーナス(弾薬を装填している場合)
貫通力は、キャラクターの貫通率 + 武器の貫通率
魔法:魔法のパワー
public override int GetPower(Card c)
{
int num = base.Value * 8 + 50;
if (!c.IsPC)
{
num = Mathf.Max(num, c.LV * 6 + 30);
}
num = EClass.curve(num, 400, 100, 75);
if (this is Spell)
{
num = num * (100 + c.Evalue(411)) / 100;
}
return num;
}
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 または キャラレベル x 6 + 30 のうち大きい方です
曲線関数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タイルの半径のボール内のすべてのターゲットにダメージを与えます。 壁でブロックされることがあります。 また、発動者にもダメージを与えます。 | |
地震 | 5+魔法のパワー/30 | 10+対応主能力/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 |
魔法:召喚魔法
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 (20) + 魔法のパワー / 20 | 魔法のパワー / 15 | |
動物召喚 | 死ぬまで | 魔法レベル * (100 + 魔法のパワー / 10) / 100 + 魔法のパワー / 30 | |
アンデッド妹召喚 | 死ぬまで | 魔法レベル* (100 + 魔法のパワー / 10) / 100 + 魔法のパワー / 30 | |
影召喚 | 死ぬまで | 魔法のパワー / 10 + 1 | 自爆攻撃を行う |