「ダメージ」の編集履歴(バックアップ)一覧はこちら
「ダメージ」(2014/12/04 (木) 10:21:40) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
-''※未検証部分がやや多いです。''
----
:※解説修正情報※|
●&font(12,b){2014-12-04:防御力の補正について修正。防御力の補正係数値の存在を確認。}
●&font(12,b){2013-04-25:TargetLifeAddの回復時}
●&font(12,b){2013-02-17:HitFallDamageが一部HitFalDamageになってたのを修正}
●&font(12,b){2013-02-11:防御力の計算式を修正}
----
*■ダメージについて
基本的には[[SC-/HitDef]]や[[SC-/Projectile]]が命中した際に起きる体力減少処理のこと。
広義としては通常のダメージの他、[[SC-/HitFallDamage]]や[[SC-/TargetLifeAdd]]のダメージ、
もっと広く言えば[[SC-/LifeAdd]][[SC-/LifeSet]]によるものも含まれる。
明確に区別する際は通常のダメージを「Damage」、[[SC-/HitFallDamage]]は「FallDamage」、
[[SC-/TargetLifeAdd]][[SC-/LifeAdd]][[SC-/LifeSet]]は、それぞれのステコン名で呼ぶ。
なお以下、単に''攻撃''と表現した場合[[SC-/HitDef]]や[[SC-/Projectile]]の他
[[SC-/ReversalDef]]が含まれている場合もある。注意。
:補正値|
-攻撃力の値(ヒットDamageに影響)
--[[File-/CNSファイル]]の[Data]のAttack(攻撃力)設定値+[[SC-/AttackMulSet]]の倍率。
--「 基本威力*(攻撃力値*0.01*倍率) 」が威力(Damage)となる。
--[[SC-/AttackMulSet]]分は実行時点の数値。
---内部的には攻撃ステコン実行時点でDamage値を補正してる。
---例えば[[SC-/Projectile]]発射後、途中変動しても発射時点の攻撃力で威力が決定している。
--なおガードされた場合の削りダメージは補正を受けない。
-防御力の値(ヒットDamage・削りDamage、Absolute=0のLifeAdd系ステコンに影響)
--[[File-/CNSファイル]]の[Data]のDefence(防御力)設定値/防御力の補正係数
---「 威力 / ( (防御力/防御力の補正係数)*0.01 ) 」
---防御力の補正係数は1、もしくは[[SC-/DefenceMulSet]]の設定値に&br()倒れ時の防御上昇や[[Sc-/SuperPause]]のP2DefMulなどの影響を受けた値。
--詳しい処理については[[SC-/DefenceMulSet]]を参照。
---重要1:Movetype=HかPauseTime適応中でなければ補正値は1倍にリセットされ''補正がかからない''。
---重要2:倒れ防御上昇とSuperPauseの防御上昇は、現在の補正値に対する変動処理であり累積する。
---最重要:[[SC-/DefenceMulSet]]は''補正値を上書きするため、上記2種の修正値がリセットされる''。
:|
補正値による小数数値の扱いは不明。''※検証不足''
推定四捨五入? 1未満になった場合は切り上げ1?
----
:■Damageの処理|
-[[SC-/HitDef]]・[[SC-/Projectile]]の命中時、&br()設定されたDamage値を元に体力を減少させる。(ReversalDefは含まない)
-[[T-/GetHitVar()]]のGetHitVar(Damage)から参照できる。
-Damage値は''攻撃側の攻撃力・くらった側の防御力によって補正''を受ける。
--''ガードの場合は攻撃力の補正を受けず、防御力の補正のみ受ける。''
--Damage値は通常''Lifeより大きな数値にならない''
---ただし、[[SC-/HitOverride]]の発動時に限り、Lifeより大きな数値になる。
--設定の''Killが0でDamage値がLifeより大きい場合、「Life-1」の値に''まで下がる。
--ガードに対してはGuard.Killの値で判別される。
-同時に複数の[[SC-/HitDef]][[SC-/Projectile]]が命中した場合
--''Damageは累積し、全てのDamageの合計値をDamage値として保存''する。
--複数ヒット時のKillの扱いについては不明。多分誰かがKill=1ならkill=1扱い?
-''Damage値の保存は1Fのみ''
-Damageでの減少処理のタイミングは「''そのキャラのステート読み込みの後''」
--Damage値''計算は直前のフレームの最後''で行われている。
--''Movetype=Hでない場合は減少処理を行わない''。
--なお[[SC-/HitOverride]]が発動した場合でも''Movetype=Hで留まると体力は減少''する。
--減少直後に生死判定が入る。
-※''Kill=0でもDamage値計算後、反映前にライフが減ると死ぬ可能性がある。''
:■Fall.Damageの処理|
-攻撃に設定されたFall.Damageを保存し[[SC-/HitFallDamage]]実行時に反映。
--Fall.Damageは攻撃力・防御力による''補正を受けない''
--[[SC-/HitFallDamage]]を実行しなければ反映されない。
--[[SC-/HitFallDamage]]実行時、指定値分体力を減少させ、保存値を0にする。
--保存値は[[T-/GetHitVar()]]のGetHitVar(Fall.Damage)から参照できる。
-減少タイミングはステートコントローラー実行時。[[T-/LifeAdd]]に近い。
--Fall.Killという設定値が存在するが、機能しない?
-[[SC-/HitFallDamage]]は[[Commonステート]]の内部で指定されている
--5100番ステートにTime=3条件で
--5110番ステートに!Time条件で
-[[SC-/HitFallDamage]]が実行されない場合、保存値は保持し続ける。
--保存した状態で自ら5100番や5110番へ飛んだ場合、ダメージを受ける。
---自身の技の演出などで新たな攻撃を受けずにそれらに飛んだ場合も?
:■[[SC-/TargetLifeAdd]]の処理|
-[[Target]]相手への[[SC-/LifeAdd]]処理。以下対象Lifeと呼称。
-valueで指定した分、対象Lifeを増減させる。
--オプションのAbsoluteが0の場合、相手の防御力の補正を受ける。
---ただし正数値(回復)の場合、防御力補正を受けない。
---自分側の攻撃力の補正は一切受けない。
--オプションのKillが0の場合、実行後対象Lifeが0の場合、対象Lifeは1になる。
---おそらくLife=0に対して発動しても1になる。
---Lifeが1になるだけで''通常のDamageが1以上あると死ぬ''
---Ignorehitpause=1で実行する必要があるが。
:■[[SC-/LifeAdd]]の処理|
-[[SC-/TargetLifeAdd]]の対象が自分になっただけ。
-valueで指定した分、Lifeを増減させる。
--オプションのAbsoluteが0の場合、防御力の補正を受ける。
---ただし正数値(回復)の場合、防御力補正を受けない。
---攻撃力の補正は一切受けない。
--オプションのKillが0の場合、実行後Lifeが0の場合、Lifeは1になる。
---おそらくLife=0に対して発動しても1になる。
---Lifeが1になるだけで''通常のDamageが1以上あると死ぬ''
---Ignorehitpause=1で実行する必要がある、かな?
:■[[SC-/Lifeset]]の処理|
-Lifeを指定値にする。
-0にすれば死ぬ。
----
Lv1-補足解説
**■死亡判定
上で説明している通り死亡の判定は「''そのキャラのステート読み込みの後''」で行われる。
しかもタイミング的にはほぼDamageの直後。
[[SC-/AssertSpecial]]のNoKOが働いている間は死亡判定にはならない。
ただしNoKOが解けた時点でLife=0の場合は死亡する。
そのフレームにおいて死亡判定を行う前にNoKOが発動していない場合も死亡する。
その場合NoKOが無くなるか・制限時間が無くなるまで試合中の状態は終わらない。
:補足:PauseTimeとPause,SuperPause|
[[SC-/Pause]]や[[SC-/SuperPause]]が実行されている場合、
MoveTimeを持たない停止しているキャラはステートの読み込みを行わないのだが、
''動いている攻撃に命中するとPauseTimeの分=HitPause中は読み込みを行う(=動ける)''ため
Pauseでの停止中でも死亡する。なおPauseTimeがx,0設定の場合動けないので死亡しない。
これは「''PauseTimeでMoveTimeが更新される''」せいであり、
他の[[SC-/Projectile]]の停止中の挙動などにも影響が出る仕様。
**■DamageとLifeaddのバッティング
上記説明でも解説していたが、
Kill=0であっても''通常のDamageとLifeAdd系が重複した場合死ぬ''可能性がある。
Kill=0のDamageは''Damage>=Lifeの時に「Life-1」のDamage値にするだけ''であり、
そこからDamage値計算後・反映前に''LifeAddで-1でもしてしまうと''、
Damage値=Lifeになってしまい、合計Lifeが''0になって死亡する''。
これはLifeAddがKill=0であっても起きるし、TargetLifeAddでも発生する。
なおLife自体が1の場合、Kill=0のDamageは計算後「0」になるため、
Kill=0のLifeAddでの減算と重複しても同じような状態で死ぬことはない。
**■LifeAdd、TargetLifeAddの攻撃力設定値の反映
攻撃力設定を反映させたい場合
-最低1保証型「Value = Ceil(設定値*(Const(Data.Attack)*0.01))」
-四捨五入型「Value = Floor(設定値*(Const(Data.Attack)*0.01)+0.5)」
なお、書いてある通り[[SC-/AttackMulSet]]の影響は受けない。
必要なら[[SC-/AttackMulset]]の設定値を[[T-/Fvar()]]で管理し、計算に入れると良い。
**■Helperの体力
[[SC-/Helper]]のキャラは基本的に[[本体と同じ最大値(LifeMax)>T-/LifeMAx]]の[[T-/Life]]を持って生成される。
プレイヤーキャラと同じダメージ処理を行い、体力が0になれば死亡判定が行われる。
----
Lv4-バグではないが通常のキャラでは使用しな技術
**■常時LifeAdd回復による対通常攻撃の死亡耐性
DamageはLifeの値までにしかならないことを逆手に取り、
致死量のDamageの攻撃を受けても、
Damage計算後・反映前に''LifeAddで+1するとDamageの減少が1足りず生き残る''。
これが「''常時LifeAdd回復による対通常攻撃の死亡耐性''」
この状態では[[F1>デバッグ]]でLifeを0にした場合も生き残る。
通常のキャラではまず使わないが。
:対通常攻撃の死亡耐性の突破方法|
[[常時監視ステート]]でLifeAddを実行し続けているだけであれば、
相手の番号ステート内でLifeを減らしてやれば殺害することができる。
-代表例:[[ステート奪取]]から[[SC-/LifeSet]]による殺害。addでも良い。
-応用例:Fall.Damageを与えての[[SC-/HitFallDamage]]による殺害。
-特殊例:[[ステート奪取]]から[[SC-/HitOverride]]を実行させ&br()それを攻撃で発揮させ''Life量を無視したDamage値を与える''方法。
--StateNo=-1設定ならそのまま通常のくらいステートへ飛ばせる。
なおTargetLifeAddは生死判定の前に常時監視ステートが挟まるため不可。のはず
-力技:Damage値をオーバーフローさせれば突破可能な場合もある。
----
-''※未検証部分がやや多いです。''
----
:※解説修正情報※|
●&font(12,b){2014-12-04:防御力の補正について修正。防御力の補正係数値の存在を確認。}
●&font(12,b){2013-04-25:TargetLifeAddの回復時}
●&font(12,b){2013-02-17:HitFallDamageが一部HitFalDamageになってたのを修正}
●&font(12,b){2013-02-11:防御力の計算式を修正}
----
*■ダメージについて
基本的には[[SC-/HitDef]]や[[SC-/Projectile]]が命中した際に起きる体力減少処理のこと。
広義としては通常のダメージの他、[[SC-/HitFallDamage]]や[[SC-/TargetLifeAdd]]のダメージ、
もっと広く言えば[[SC-/LifeAdd]][[SC-/LifeSet]]によるものも含まれる。
明確に区別する際は通常のダメージを「Damage」、[[SC-/HitFallDamage]]は「FallDamage」、
[[SC-/TargetLifeAdd]][[SC-/LifeAdd]][[SC-/LifeSet]]は、それぞれのステコン名で呼ぶ。
なお以下、単に''攻撃''と表現した場合[[SC-/HitDef]]や[[SC-/Projectile]]の他
[[SC-/ReversalDef]]が含まれている場合もある。注意。
:補正値|
-攻撃力の値(ヒットDamageに影響)
--[[File-/CNSファイル]]の[Data]のAttack(攻撃力)設定値+[[SC-/AttackMulSet]]の倍率。
--「 基本威力*(攻撃力値*0.01*倍率) 」が威力(Damage)となる。
--[[SC-/AttackMulSet]]分は実行時点の数値。
---内部的には攻撃ステコン実行時点でDamage値を補正してる。
---例えば[[SC-/Projectile]]発射後、途中変動しても発射時点の攻撃力で威力が決定している。
--なおガードされた場合の削りダメージは補正を受けない。
-防御力の値(ヒットDamage・削りDamage、Absolute=0のLifeAdd系ステコンに影響)
--[[File-/CNSファイル]]の[Data]のDefence(防御力)設定値/防御力の補正係数
---「 威力 / ( (防御力/防御力の補正係数)*0.01 ) 」
---防御力の補正係数は1、もしくは[[SC-/DefenceMulSet]]の設定値に&br()倒れ時の防御上昇や[[Sc-/SuperPause]]のP2DefMulなどの影響を受けた値。
--詳しい処理については[[SC-/DefenceMulSet]]を参照。
---重要1:Movetype=HかPauseTime適応中でなければ補正値は1倍にリセットされ''補正がかからない''。
---重要2:倒れ防御上昇とSuperPauseの防御上昇は、現在の補正値に対する変動処理であり累積する。
---最重要:[[SC-/DefenceMulSet]]は''補正値を上書きするため、上記2種の修正値がリセットされる''。
:|
補正値による小数数値の扱いは不明。''※検証不足''
推定四捨五入? 1未満になった場合は切り上げ1?
----
:■Damageの処理|
-[[SC-/HitDef]]・[[SC-/Projectile]]の命中時、&br()設定されたDamage値を元に体力を減少させる。(ReversalDefは含まない)
-[[T-/GetHitVar()]]のGetHitVar(Damage)から参照できる。
-Damage値は''攻撃側の攻撃力・くらった側の防御力によって補正''を受ける。
--''ガードの場合は攻撃力の補正を受けず、防御力の補正のみ受ける。''
--Damage値は通常''Lifeより大きな数値にならない''
---ただし、[[SC-/HitOverride]]の発動時に限り、Lifeより大きな数値になる。
--設定の''Killが0でDamage値がLifeより大きい場合、「Life-1」の値に''まで下がる。
--ガードに対してはGuard.Killの値で判別される。
-同時に複数の[[SC-/HitDef]][[SC-/Projectile]]が命中した場合
--''Damageは累積し、全てのDamageの合計値をDamage値として保存''する。
--複数ヒット時のKillの扱いについては不明。多分誰かがKill=1ならkill=1扱い?
-''Damage値の保存は1Fのみ''
-Damageでの減少処理のタイミングは「''そのキャラのステート読み込みの後''」
--Damage値''計算は直前のフレームの最後''で行われている。
--''Movetype=Hでない場合は減少処理を行わない''。
--なお[[SC-/HitOverride]]が発動した場合でも''Movetype=Hで留まると体力は減少''する。
--減少直後に生死判定が入る。
-※''Kill=0でもDamage値計算後、反映前にライフが減ると死ぬ可能性がある。''
:■Fall.Damageの処理|
-攻撃に設定されたFall.Damageを保存し[[SC-/HitFallDamage]]実行時に反映。
--Fall.Damageは攻撃力・防御力による''補正を受けない''
--[[SC-/HitFallDamage]]を実行しなければ反映されない。
--[[SC-/HitFallDamage]]実行時、指定値分体力を減少させ、保存値を0にする。
--保存値は[[T-/GetHitVar()]]のGetHitVar(Fall.Damage)から参照できる。
-減少タイミングはステートコントローラー実行時。[[T-/LifeAdd]]に近い。
--Fall.Killという設定値が存在するが、機能しない?
-[[SC-/HitFallDamage]]は[[Commonステート]]の内部で指定されている
--5100番ステートにTime=3条件で
--5110番ステートに!Time条件で
-[[SC-/HitFallDamage]]が実行されない場合、保存値は保持し続ける。
--保存した状態で自ら5100番や5110番へ飛んだ場合、ダメージを受ける。
---自身の技の演出などで新たな攻撃を受けずにそれらに飛んだ場合も?
:■[[SC-/TargetLifeAdd]]の処理|
-[[Target]]相手への[[SC-/LifeAdd]]処理。以下対象Lifeと呼称。
-valueで指定した分、対象Lifeを増減させる。
--オプションのAbsoluteが0の場合、相手の防御力の補正を受ける。
---この防御力には防御力の補正係数が入っている。
---ただし正数値(回復)の場合、防御力補正を受けない。
---自分側の攻撃力の補正は一切受けない。
--オプションのKillが0の場合、実行後対象Lifeが0の場合、対象Lifeは1になる。
---おそらくLife=0に対して発動しても1になる。
---Lifeが1になるだけで''通常のDamageが1以上あると死ぬ''
---Ignorehitpause=1で実行する必要があるが。
:■[[SC-/LifeAdd]]の処理|
-[[SC-/TargetLifeAdd]]の対象が自分になっただけ。
-valueで指定した分、Lifeを増減させる。
--オプションのAbsoluteが0の場合、防御力の補正を受ける。
---この防御力には防御力の補正係数が入っている。
---ただし正数値(回復)の場合、防御力補正を受けない。
---攻撃力の補正は一切受けない。
--オプションのKillが0の場合、実行後Lifeが0の場合、Lifeは1になる。
---おそらくLife=0に対して発動しても1になる。
---Lifeが1になるだけで''通常のDamageが1以上あると死ぬ''
---Ignorehitpause=1で実行する必要がある、かな?
:■[[SC-/Lifeset]]の処理|
-Lifeを指定値にする。
-0にすれば死ぬ。
----
Lv1-補足解説
**■死亡判定
上で説明している通り死亡の判定は「''そのキャラのステート読み込みの後''」で行われる。
しかもタイミング的にはほぼDamageの直後。
[[SC-/AssertSpecial]]のNoKOが働いている間は死亡判定にはならない。
ただしNoKOが解けた時点でLife=0の場合は死亡する。
そのフレームにおいて死亡判定を行う前にNoKOが発動していない場合も死亡する。
その場合NoKOが無くなるか・制限時間が無くなるまで試合中の状態は終わらない。
:補足:PauseTimeとPause,SuperPause|
[[SC-/Pause]]や[[SC-/SuperPause]]が実行されている場合、
MoveTimeを持たない停止しているキャラはステートの読み込みを行わないのだが、
''動いている攻撃に命中するとPauseTimeの分=HitPause中は読み込みを行う(=動ける)''ため
Pauseでの停止中でも死亡する。なおPauseTimeがx,0設定の場合動けないので死亡しない。
これは「''PauseTimeでMoveTimeが更新される''」せいであり、
他の[[SC-/Projectile]]の停止中の挙動などにも影響が出る仕様。
**■DamageとLifeaddのバッティング
上記説明でも解説していたが、
Kill=0であっても''通常のDamageとLifeAdd系が重複した場合死ぬ''可能性がある。
Kill=0のDamageは''Damage>=Lifeの時に「Life-1」のDamage値にするだけ''であり、
そこからDamage値計算後・反映前に''LifeAddで-1でもしてしまうと''、
Damage値=Lifeになってしまい、合計Lifeが''0になって死亡する''。
これはLifeAddがKill=0であっても起きるし、TargetLifeAddでも発生する。
なおLife自体が1の場合、Kill=0のDamageは計算後「0」になるため、
Kill=0のLifeAddでの減算と重複しても同じような状態で死ぬことはない。
**■LifeAdd、TargetLifeAddの攻撃力設定値の反映
攻撃力設定を反映させたい場合
-最低1保証型「Value = Ceil(設定値*(Const(Data.Attack)*0.01))」
-四捨五入型「Value = Floor(設定値*(Const(Data.Attack)*0.01)+0.5)」
なお、書いてある通り[[SC-/AttackMulSet]]の影響は受けない。
必要なら[[SC-/AttackMulset]]の設定値を[[T-/Fvar()]]で管理し、計算に入れると良い。
**■Helperの体力
[[SC-/Helper]]のキャラは基本的に[[本体と同じ最大値(LifeMax)>T-/LifeMAx]]の[[T-/Life]]を持って生成される。
プレイヤーキャラと同じダメージ処理を行い、体力が0になれば死亡判定が行われる。
----
Lv4-バグではないが通常のキャラでは使用しな技術
**■常時LifeAdd回復による対通常攻撃の死亡耐性
DamageはLifeの値までにしかならないことを逆手に取り、
致死量のDamageの攻撃を受けても、
Damage計算後・反映前に''LifeAddで+1するとDamageの減少が1足りず生き残る''。
これが「''常時LifeAdd回復による対通常攻撃の死亡耐性''」
この状態では[[F1>デバッグ]]でLifeを0にした場合も生き残る。
通常のキャラではまず使わないが。
:対通常攻撃の死亡耐性の突破方法|
[[常時監視ステート]]でLifeAddを実行し続けているだけであれば、
相手の番号ステート内でLifeを減らしてやれば殺害することができる。
-代表例:[[ステート奪取]]から[[SC-/LifeSet]]による殺害。addでも良い。
-応用例:Fall.Damageを与えての[[SC-/HitFallDamage]]による殺害。
-特殊例:[[ステート奪取]]から[[SC-/HitOverride]]を実行させ&br()それを攻撃で発揮させ''Life量を無視したDamage値を与える''方法。
--StateNo=-1設定ならそのまま通常のくらいステートへ飛ばせる。
なおTargetLifeAddは生死判定の前に常時監視ステートが挟まるため不可。のはず
-力技:Damage値をオーバーフローさせれば突破可能な場合もある。
----