User:びゃっこ/すたぶ/解析物理戦闘: Difference between revisions

Line 398: Line 398:
|減衰のある範囲攻撃
|減衰のある範囲攻撃
|-
|-
|splash
|cleave
|衝撃波
|旋風
|○
|攻撃が最初の相手から伝播する
|-
|flurry
|連撃
|○
|○
|最初の攻撃対象の周りにも当たる衝撃波を発する
|複数回攻撃する
|-
|-
|chaser
|chaser
Line 412: Line 419:
|回避された際に追撃する
|回避された際に追撃する
|-
|-
|flurry
|frustration
|連撃
|逆襲
|○
|○
|複数回攻撃する
|回避された際に確率で確定命中クリティカル攻撃をする
|-
|cleave
|旋風
|○
|攻撃が最初の相手から伝播する
|-
|-
|feint
|feint
Line 433: Line 433:
|制圧の状態異常を付与する
|制圧の状態異常を付与する
|-
|-
|frustration
|splash
|逆襲
|衝撃波
|○
|○
|回避された際に確率で確定命中クリティカル攻撃をする
|最初の攻撃対象の周りにも当たる衝撃波を発する
|}
|}
=== 突貫 ===
=== 突貫 ===
Line 461: Line 461:
}
}
</syntaxhighlight>
</syntaxhighlight>
攻撃者の半径「突貫エンチャント強度 / 10 + 1」マス以内かつ、攻撃者と攻撃対象を結ぶ直線上に存在する敵を攻撃します。
攻撃者の半径「突貫エンチャント強度 / 10 + 1」マス以内かつ、攻撃者と攻撃対象を結ぶ直線上に存在する敵を攻撃します。拡散・旋風エンチャントと共存できず、拡散・旋風の処理は省略されます。


半径に小数点以下が存在する場合、小数点以下の数値の確率で半径に+1します。
半径に小数点以下が存在する場合、小数点以下の数値の確率で半径に+1します。
Line 502: Line 502:
}
}
</syntaxhighlight>
</syntaxhighlight>
攻撃対象の半径1マス以内に存在する敵を攻撃します。突貫エンチャントと共存できず、両方存在する場合は突貫が優先されます。
攻撃対象の半径1マス以内に存在する敵を攻撃します。突貫・旋風エンチャントと共存できず、旋風の処理は省略されます。


拡散の効果による攻撃はダメージ減衰補正がかかり、
拡散の効果による攻撃はダメージ減衰補正がかかり、
Line 509: Line 509:


遠隔攻撃の倍率は「1.2 - 0.2 × (攻撃者と拡散の攻撃対象との距離) - (0.4、攻撃対象と同じマスにいる敵は0)」で、最小0.2倍です。
遠隔攻撃の倍率は「1.2 - 0.2 × (攻撃者と拡散の攻撃対象との距離) - (0.4、攻撃対象と同じマスにいる敵は0)」で、最小0.2倍です。
=== 旋風 ===
<syntaxhighlight lang="c#">
int num3 = GetWeaponEnc(622, addSelfEnc: true);
...
else if (num3 > 0)
{
List<Point> list = new List<Point>();
Act.TP.ForeachNeighbor(delegate(Point p)
{
list.Add(p.Copy());
});
list.Shuffle();
int num4 = 0;
for (int i = 0; i < 9 && num3 > EClass.rnd(10 + (int)Mathf.Pow(3f, i + 2)); i++)
{
num4++;
}
foreach (Point item2 in list)
{
foreach (Card item3 in item2.ListCards().Copy())
{
if (num4 <= 0 || !Act.CC.IsAliveInCurrentZone)
{
break;
}
if (item3.trait.CanBeAttacked || (item3.isChara && item3.Chara.IsHostile(Act.CC)))
{
AttackWithFlurry(item3, item2, 1f, subAttack: true);
num4--;
}
}
}
}
</syntaxhighlight>
攻撃対象のいるマス除く半径1マス以内のランダムな敵1体を攻撃します。攻撃回数はエンチャント強度に依存します。同じ敵を2回攻撃することはありません。
旋風の攻撃回数は "旋風エンチャント強度 > 0~「10 + 3 ^ (旋風攻撃回数 + 2)」までのランダムな値" の判定を満たし続ける限り、最大9回まで増加します。


=== 衝撃波 ===
=== 衝撃波 ===
<syntaxhighlight lang="c#">
splash = GetWeaponEnc(608, addSelfEnc: true);
...
if (splash > 0)
{
Act.TP.ForeachNeighbor(delegate(Point p)
{
if (p.Equals(Act.TP) || p.Equals(Act.CC.pos))
{
return;
}
if (!p.IsBlocked)
{
p.PlayEffect("smoke_shockwave");
p.Copy().Animate(AnimeID.QuakeMini, animeBlock: true);
}
foreach (Card item4 in p.ListCards())
{
if (item4.trait.CanBeAttacked || (item4.isChara && item4.Chara.IsHostile(Act.CC)))
{
int rawDamage = AttackProcess.Current.GetRawDamage(0.1f + 0.05f * Mathf.Sqrt(splash), crit: false, maxRoll: false);
rawDamage = item4.ApplyProtection(rawDamage);
item4.DamageHP(rawDamage, 0, 100, AttackSource.Shockwave, Act.CC);
}
}
});
}
</syntaxhighlight>
攻撃対象の半径1マス以内の敵すべてを攻撃します。
エンチャント強度は衝撃波のダメージ倍率に影響し、倍率は「0.1 + 0.05 × √(衝撃波エンチャント強度)」倍です。


ただし、衝撃波のダメージは貫通率0%かつ無属性固定で、対象の物理防御力で軽減されます。


                if (splash > 0)
=== 連撃 ===
                {
<syntaxhighlight lang="c#">
                    Act.TP.ForeachNeighbor(delegate(Point p)
flurry = GetWeaponEnc(621, addSelfEnc: true);
                    {
...
                        if (p.Equals(Act.TP) || p.Equals(Act.CC.pos))
void AttackWithFlurry(Card _tc, Point _tp, float mtp, bool subAttack)
                        {
{
                            return;
int num6 = 1;
                        }
if (flurry > 0)
                        if (!p.IsBlocked)
{
                        {
for (int l = 0; l < 10 && flurry > EClass.rnd(25 + (int)Mathf.Pow(5f, l + 2)); l++)
                            p.PlayEffect("smoke_shockwave");
{
                            p.Copy().Animate(AnimeID.QuakeMini, animeBlock: true);
num6++;
                        }
}
                        foreach (Card item4 in p.ListCards())
}
                        {
for (int m = 0; m < num6; m++)
                            if (item4.trait.CanBeAttacked || (item4.isChara && item4.Chara.IsHostile(Act.CC)))
{
                            {
if (!Act.CC.IsAliveInCurrentZone)
                                int rawDamage = AttackProcess.Current.GetRawDamage(0.1f + 0.05f * Mathf.Sqrt(splash), crit: false, maxRoll: false);
{
                                rawDamage = item4.ApplyProtection(rawDamage);
break;
                                item4.DamageHP(rawDamage, 0, 100, AttackSource.Shockwave, Act.CC);
}
                            }
if (!_tc.IsAliveInCurrentZone)
                        }
{
                    });
break;
}
if (m > 0)
{
Act.CC.Say("attack_flurry");
}
Attack(_tc, _tp, mtp, subAttack);
}
}
</syntaxhighlight>
追加の攻撃を行います。攻撃回数はエンチャント強度に依存します。


連撃の攻撃回数は "連撃エンチャント強度 > 0~「25 + 5 ^ (連撃攻撃回数 + 2)」までのランダムな値" の判定を満たし続ける限り増加します。


===追尾===
===追尾・逆襲===


   if (chaser > 0)
   if (chaser > 0)
Line 600: Line 680:
                 }
                 }
             }
             }
=== 旋風 ===


=== 牽制 ===
=== 牽制 ===
250

edits