スーパーアーマー研究室(2008/12/30 開設)

ここでは一番単純な、HitOverrideを使用したステート例を挙げてみます。


[Statedef 1000];スーパーアーマー付き攻撃の例
type = S
movetype= A
physics = S
juggle = 10;この辺の数値はお好みで
ctrl = 0
;ここでanimは設定しないでください

[State 1000,ChangeAnim]
type = ChangeAnim;ここでanimを設定します
triggerall = PrevStateNo != 9999;スーパーアーマーのステートから帰ってきた場合は除外
trigger1 = Time = 0
value = 1000

[State 1000,HitOverride]
Type = HitOverride;ここでスーパーアーマーを設定します
Trigger1 = AnimElemTime(2) >= 0 && AnimElemTime(3) < 0;別のベテートに飛んで戻ってきても発動できるように注意
Attr = SCA,NA,SA,NP,SP;ここでは投げと超必殺技を除外してみました
StateNo = 9999;スーパーアーマーのステートナンバーです
IgnoreHitPause = 1
SuperMoveTime = 999;念のため設定
PauseMoveTime = 999;同上

[State 1000, HitDef]
type = HitDef
trigger1 = AnimElemTime(3) < 0;別のベテートに飛んで戻ってきても発動できるように注意
persistent = 0;何度も判定しない
attr = S, SA;ここから下は適当に
animtype = Hard
damage = 80,8
priority = 4,Hit
guardflag = M
hitflag = MAF
pausetime = 16,16
sparkxy = -10,-60
hitsound = 5,4
guardsound = 6,0
ground.type = Low
ground.slidetime = 12
ground.hittime = 20
ground.velocity = -10,-7
guard.velocity = -6.5
air.velocity = -10,-7
airguard.velocity = -5, -4
fall = 1

[State 1000,StateTypeSet]
type = StateTypeSet
trigger1 = AnimElemTime(3) >= 0
movetype = I

[State 1000, ChangeState]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1

[Statedef 9999];スーパーアーマーのステート
type = U;元の状態を引き継ぐ
movetype = H
physics = U;元の状態を引き継ぐ

[State 9999, PosFreeze]
type = PosFreeze;使用はお好みで
trigger1 = 1
value = 1
ignorehitpause = 1

[State 9999, PalFX]
type = PalFX;あると格好いい
trigger1 = 1
time = 1
mul = 256,0,0;数値などは適当に
ignorehitpause = 1

[State 9999, ChangeState]
type = ChangeState
trigger1 = HitShakeOver;HitShakeTimeが終了したら
value = PrevStateNo;元のステートに帰る

最後のChangeStateのトリガーにTime = 0を使用すると、Lifeが減らなくなります。
その際はLifeAddステートでGetHitVar(Damage)分を減らすなどすれば対応できます。
この方法の問題は、HitDefでP2StateNoを使用した攻撃を無視してしまう(ダメージも受けない)事と、アーマーステート中にもアニメが進行してしまう事です。
前者は特殊ヒット研究室を参考にしていただき、攻撃側のステートを修正すれば回避できます。
しかしアニメーションを停止させる命令が存在しないので、後者の修正には面倒な処理が必要になってしまいます。
具体的には、下記のような作業になります。
○Airで1フレームごとに1枚のアニメを設定します(例えば全動作時間が20フレームの技なら、20コマのAnimElemを割り当てる事になります)。ただし、アーマーを設定しない部分は分割しなくてもいいです。
○アーマーステート内で1フレーム経過するごとに、ChangeAnimステートでvalue = Anim、Elem = AnimElemNo(-1)としてアニメ番号を1コマ戻します。


もしくはHitOverrideの代わりにRevarsalDefを使用し、PauseTime設定で自分だけ停止させる方法もあります。
ただし、この場合はHitShakeTimeが取得できないので停止時間を固定しなくてはいけませんし、攻撃判定とアーマー判定を同時に出す事ができなくなります。

他に、ヘルパーを用いた方法もあります。
どうやら本体の代わりにヘルパーを攻撃させ、そこから本体のLifeなどを制御するようです。
これも処理が大変そうですね……。

参考:クリエイターズJAPAN2様



MUGEN研究所へ戻る
MENUへ戻る