堕落街道まっしぐら。

現在のゲームプレイ状況: アリスギア = ウマ娘 > DMMブラゲ > Crossout >> それ以外

MUGEN記述/アラド戦記のカウンターヒット記述一例

イメージ 1

アラド戦記」のカウンターヒットを再現するための記述の一例です。

この記述は「ユニオンヒットシステム」の記述を応用しています。
参考にする際はそちらから目を通してください。
http://www.geocities.jp/harvest_dreamer/DnF__Union.lzh

~ ~ ~

●カウンターヒット

 -アラド戦記のカウンターヒット
  ・攻撃動作をとっている状態の相手に攻撃がヒットする
  ・通常の1.25倍のダメージを与える

 -MUGEN化するにあたっての変更点
  ・ダメージ125%→パワーゲージ100増加


●仕組みと記述例

 2つの変数(変数X,変数Y)を使用します。
 また変数Aはユニオンヒット記述における変数Aを、変数Bは同変数Bを指しています。

;---------------------------------------------------------------カウンターヒットここから
[State -2, カウンターヒット:フラグセット/ターゲット1]
type = VarSet
trigger1 = NumEnemy
trigger1 = Enemy(0),MoveType = A
var(X) = 3

[State -2, カウンターヒット:フラグセット/ターゲット2]
type = VarSet
trigger1 = NumEnemy >= 2
trigger1 = Enemy(1),MoveType = A
var(Y) = 3

[State -2, カウンターヒット:獲得ボイス]
type = PlaySnd
trigger1 = NumEnemy
trigger1 = Enemy(0),ID = var(B) && var(X) > 0 && var(A) = 2
trigger2 = NumEnemy >= 2
trigger2 = Enemy(1),ID = var(B) && var(Y) > 0 && var(A) = 2
value = s*,** ;←任意のサウンドアドレス

[State -2, カウンターヒット:獲得メッセージ]
type = Explod
trigger1 = NumEnemy
trigger1 = Enemy(0),ID = var(B) && var(X) > 0 && var(A) = 2
trigger2 = NumEnemy >= 2
trigger2 = Enemy(1),ID = var(B) && var(Y) > 0 && var(A) = 2
anim = **** ;←カウンターヒットメッセージアニメのNo
ID = **** ;←任意のIDNo
facing = Facing
ownpal = 1
ontop = 1
pos = 0,-130 ;←キャラのサイズに合わせて調整
postype = p1
removetime = -2
bindtime = 999
supermovetime = 999
pausemovetime = 999

[State -2, カウンターヒット:獲得メッセージ消去]
type = RemoveExplod
triggerall = NumExplod(****) ;←上記ID
trigger1 = NumEnemy
trigger1 = Enemy(0),ID = var(B) && var(X) > 0 && var(A) = 3
trigger2 = NumEnemy >= 2
trigger2 = Enemy(1),ID = var(B) && var(Y) > 0 && var(A) = 3
ID = **** ;←上記ID

[State -2, カウンターヒット:パワーゲージ増加]
type = PowerAdd
trigger1 = NumEnemy
trigger1 = Enemy(0),ID = var(B) && var(X) > 0 && var(A) = 2
trigger2 = NumEnemy >= 2
trigger2 = Enemy(1),ID = var(B) && var(Y) > 0 && var(A) = 2
value = 100

[State -2, カウンターヒット:フラグ管理/ターゲット1]
type = VarSet
trigger1 = NumEnemy
trigger1 = Enemy(0),MoveType != A && var(X) > 0
var(X) = IfElse((Enemy(0),MoveType=H),var(X)-1,0)

[State -2, カウンターヒット:フラグ管理/ターゲット2]
type = VarSet
trigger1 = NumEnemy >= 2
trigger1 = Enemy(1),MoveType != A && var(Y) > 0
var(Y) = IfElse((Enemy(1),MoveType=H),var(Y)-1,0)
;---------------------------------------------------------------カウンターヒットここまで


大体はユニオンヒットと同じような仕組みです。
相手が攻撃状態(MoveType=A)だったら変数Xに3を入れます。
変数Xは相手がやられ状態(MoveType=H)になったら1ずつ減少し、
どちらでもない状態(MoveType=I)になったら直接0になります。これにより、
 ・MoveType=Aの時は3
 ・その状態で攻撃を受けたら3→2→1→0と変化
 ・攻撃を受けずに動作終了したら3→0と変化
こうなるので、変数Xが2~1の時にカウンターフラグが立つようになっています。
つまりこの時に攻撃がヒットしていたらカウンターヒットとなるわけですね。

攻撃がヒットしたか、攻撃対象が同じ相手かを判断するのはユニオンヒット記述を利用。
変数Aが有効なら攻撃がヒット、変数Bが相手のIDと同じなら対象一致なので、
これら全てを満たした時にカウンターヒット処理が実行されます。
変数Xは相手キャラの1人目(シングル・タッグ問わず)なので、もうひとつ
変数Yを使って相手キャラの2人目を監視することで誤発動する確率を抑えています。
が、処理の都合上相手が「パートナーの攻撃で攻撃状態→やられ状態になってから1F目」
に攻撃を当ててもカウンターヒットになる可能性があります。そこはご了承ください。


カウンターヒットメッセージのスプライトとアニメーション指定例、サウンドデータサンプルはこちらからどうぞ。
http://www.geocities.jp/harvest_dreamer/DnF__Counterhit.lzh