chikuchikugonzalezの雑記帳

趣味とか日記とかメモとか(∩゚д゚)

ダメージが入るタイミングをメモる

WinMugenで一撃目の防御補正をどう反映させるか、を考えていたときに知ったことをメモしておく。
まずダメージが実際に反映されるのはmovetype=Hになったフレームの最後だと思われます。なんでかってーと5000番かつTime=0で回復型の防御補正をした際に体力MAX時に補正が効かなかったから。でもダメージ自体はTime=0で確定している模様。とゆーかこのダメージ計算のおかげて回復型の防御補正はあきらめたんですけどね。

ダメージ計算式は次のようになっている模様。関係ないですがtexって書き方よくわかりません。

\white damage=\left\{ { gethitvar\(damage\) \text{ if gethitvar(damage) < life} \atop life \text{ if gethitvar(damage) >= life} }

何が問題って食らったダメージから補正した分のダメージの算出が面倒なこと。特にKOするはずの技だと先に回復処理が走るために死なないということが発生します。ぶっちゃけ回復でやるとライフが2以上あると一撃目の段階で必ず1残る、という現象にぶちあたります*1

仕方ないんでウチでは補正分で受けるはずだったダメージを追加でLifeAddしてます。

;------------------------------------------------------------------------------;
; GetHitVar(hitcount) ((gethitvar(hitcount) はMoveType=H以外では前回の最大hitcountを返してきますorz))
;------------------------------------------------------------------------------;
[State -2:          Hit Count Reset]
type           = VarSet
triggerall     = !IsHelper
trigger1       = MoveType != H
trigger2       = StateNo = [120, 159]
v              = 33
value          = 0
ignorehitpause = 1

[State -2:          Hit Count]
type           = VarSet
triggerall     = !IsHelper
trigger1       = MoveType = H
trigger1       = StateNo != [120, 159]
v              = 33
value          = GetHitVar(HitCount)
ignorehitpause = 1

;------------------------------------------------------------------------------;
; 一撃目補正
; fvar(6) = 通常防御補正 (モード・特殊カラー補正)
; fvar(7) = 根性値補正
;------------------------------------------------------------------------------;
[State -2:          Calc First Get Hit Damage]
type           = LifeAdd
triggerall     = Alive
triggerall     = var(33) = 1
triggerall     = var(31) := GetHitVar(Damage)
trigger1       = var(30) := Floor(var(31) * (1.0 - (fvar(6) * fvar(7))))
value          = var(30)
absolute       = 1
persistent     = 0
ignorehitpause = 1

利点としては

  • 体力MAXでも補正がかかる
  • 補正でKOする場合は必ずKOにできる

でしょうか。
逆に欠点は5000番台のステートでKOすることになるので、そのときは削りKOなどのステートに飛ばす処理をしないと見た目にちょっと問題が (いきなり倒れるなど) でること。

*1:無敵医師氏のソル 金カラーでなっているのを見たことあります