第4回MUGEN凶悪技術講座
第4回では「永続ターゲットバグ」について教えます。
ターゲットについては第2回ですでに教えているので割愛します。
では、続きからどうぞ。すごく長いです。
追記(08/05):どうやら死亡ステ(5150)にはガーステ効果がないそうです。誤った情報を載せてしまいすいません。
第2回では「とあることをし続けると相手がどんな状態でもターゲットを保持し続けることができます」と言いました。
その「とあること」とは「ReversalDef」のことです。
MUGENのバグなのかわかりませんがターゲットを取得した直後ReversalDefを1Fも途切れさせずに実行し続けると、
相手がどんな状態でもターゲットを保持し続けることが出来ます。
こんな感じに。

相手が立ち状態(MoveType = I)なのにTargetが表示されています。これが永続ターゲットバグです。
この講座では当身でターゲットを取得するやり方でいきます。
では、本題に入ります。
本体でやるのはかなり不便なのでヘルパーにやらせます。以下のステコンを-2に追加してください。
[State -2, マーキングヘルパー]
Type = Helper
Trigger1 = !numhelper(XXXX)
HelperType = Player
Name = "marking"
ID = XXXX
Stateno = XXXX
Supermovetime = 2147483647
Pausemovetime = 2147483647
Ignorehitpause = 1
[State -2, 固定]
Type = SelfState
Trigger1 = ishelper(XXXX)
Value = XXXX
Ctrl = 0
Ignorehitpause = 1
XXXXは任意の数字にしてください。
そして中身はこんな感じにしてください。
[Statedef XXXX]
Type = A
MoveType = A
Physics = N
Ctrl = 0
Anim = XXXX
[State , 当身]
Type = ReversalDef
Trigger1 = ishelper(XXXX)
Reversal.Attr = SCA,AA,AT,AP
Pausetime = 0, 2
Sparkno = -1
Hitsound = -1
Numhits = 0
Ignorehitpause = 1
Animは全画面攻撃判定推奨です。
これだけでOKです。試してみてください。
ターゲットが永続保持できたらこのバグを利用した技術が使えます。
まずは「毒」から。
「毒」とはTargetLifeAddを使って相手のLifeをじわじわと減らすことです。
先ほどのヘルパーに以下のステコンを追加してください。
[State , 毒]
Type = TargetLifeAdd
TriggerAll = NumTarget = 1
Trigger1 = ishelper(XXXX)
Trigger1 = GameTime%10 = 0
Value = -3
Ignorehitpause = 1
これでじわじわとLifeが減っていきます。
次は「ステート送り」です。
「ステート送り」とはTargetStateを使って相手を自分自身のステートに引き込むことです。
このバグを利用することで任意のタイミングで即死ステートなどに引き込むことが可能です。
先ほどのヘルパーに以下のステコンを追加してください。
[State , ステート送り]
Type = TargetState
Trigger1 = 1
Value =
ignorehitpause = 1
条件は任意の条件にしてください。ステートは第2回で使った即死ステートでいいでしょう。
最後は「死の宣告」です。
試合後(RoundState = 3)には、MUGENの仕様として、一切攻撃が当たらず、ライフが変動させられない時間があります。
それを利用してタイムアップ直後にTargetLifeAddでLifeを0にすると、相手は回復出来ずに即死してしまうものです。
先ほどのヘルパーに以下のステコンを追加してください。
[State , 死の宣告]
Type = TargetLifeAdd
Trigger1 = ishelper(XXXX)
Trigger1 = NumTarget
Trigger1 = !Target,ishelper
Trigger1 = root,Alive
Trigger1 = RoundState > 2
Value = -2147483647
Ignorehitpause = 1
また、死の宣告を成功させやすくさせるために「時止め」を使います。
「時止め」とはPauseとSuperPauseと言うステコンのことです。
狂以下では暗転などに使われているステコンです。
なぜ時止めを使うと成功しやすくなるかと言うと、時止めを食らっている状態だと
ガードステートの効果が無効になるからです。
ガードステート(120~155)にはTarget系のステコンが効かないと言う特長があります。
しかし、時止めと食らっている状態だとガードステートにいてもTarget系のステコンが効くようになります。
ちなみに死亡ステート(5150)でも同じ効果があります。
時止め記述はリンクの製作物公開空間のテンプレフォルダの「永続ターゲットバグテンプレ」に記載してあります。
と、言うことでもうちょっと見栄えを良くしてこの3つのほかに2つ技術を搭載したテンプレを公開いたします。
DLはリンクの製作物公開空間→テンプレ→永続ターゲットバグテンプレです。
以上で本講座は閉講となります。
次回は「超即死」です。
ターゲットについては第2回ですでに教えているので割愛します。
では、続きからどうぞ。すごく長いです。
追記(08/05):どうやら死亡ステ(5150)にはガーステ効果がないそうです。誤った情報を載せてしまいすいません。
第2回では「とあることをし続けると相手がどんな状態でもターゲットを保持し続けることができます」と言いました。
その「とあること」とは「ReversalDef」のことです。
MUGENのバグなのかわかりませんがターゲットを取得した直後ReversalDefを1Fも途切れさせずに実行し続けると、
相手がどんな状態でもターゲットを保持し続けることが出来ます。
こんな感じに。

相手が立ち状態(MoveType = I)なのにTargetが表示されています。これが永続ターゲットバグです。
この講座では当身でターゲットを取得するやり方でいきます。
では、本題に入ります。
本体でやるのはかなり不便なのでヘルパーにやらせます。以下のステコンを-2に追加してください。
[State -2, マーキングヘルパー]
Type = Helper
Trigger1 = !numhelper(XXXX)
HelperType = Player
Name = "marking"
ID = XXXX
Stateno = XXXX
Supermovetime = 2147483647
Pausemovetime = 2147483647
Ignorehitpause = 1
[State -2, 固定]
Type = SelfState
Trigger1 = ishelper(XXXX)
Value = XXXX
Ctrl = 0
Ignorehitpause = 1
XXXXは任意の数字にしてください。
そして中身はこんな感じにしてください。
[Statedef XXXX]
Type = A
MoveType = A
Physics = N
Ctrl = 0
Anim = XXXX
[State , 当身]
Type = ReversalDef
Trigger1 = ishelper(XXXX)
Reversal.Attr = SCA,AA,AT,AP
Pausetime = 0, 2
Sparkno = -1
Hitsound = -1
Numhits = 0
Ignorehitpause = 1
Animは全画面攻撃判定推奨です。
これだけでOKです。試してみてください。
ターゲットが永続保持できたらこのバグを利用した技術が使えます。
まずは「毒」から。
「毒」とはTargetLifeAddを使って相手のLifeをじわじわと減らすことです。
先ほどのヘルパーに以下のステコンを追加してください。
[State , 毒]
Type = TargetLifeAdd
TriggerAll = NumTarget = 1
Trigger1 = ishelper(XXXX)
Trigger1 = GameTime%10 = 0
Value = -3
Ignorehitpause = 1
これでじわじわとLifeが減っていきます。
次は「ステート送り」です。
「ステート送り」とはTargetStateを使って相手を自分自身のステートに引き込むことです。
このバグを利用することで任意のタイミングで即死ステートなどに引き込むことが可能です。
先ほどのヘルパーに以下のステコンを追加してください。
[State , ステート送り]
Type = TargetState
Trigger1 = 1
Value =
ignorehitpause = 1
条件は任意の条件にしてください。ステートは第2回で使った即死ステートでいいでしょう。
最後は「死の宣告」です。
試合後(RoundState = 3)には、MUGENの仕様として、一切攻撃が当たらず、ライフが変動させられない時間があります。
それを利用してタイムアップ直後にTargetLifeAddでLifeを0にすると、相手は回復出来ずに即死してしまうものです。
先ほどのヘルパーに以下のステコンを追加してください。
[State , 死の宣告]
Type = TargetLifeAdd
Trigger1 = ishelper(XXXX)
Trigger1 = NumTarget
Trigger1 = !Target,ishelper
Trigger1 = root,Alive
Trigger1 = RoundState > 2
Value = -2147483647
Ignorehitpause = 1
また、死の宣告を成功させやすくさせるために「時止め」を使います。
「時止め」とはPauseとSuperPauseと言うステコンのことです。
狂以下では暗転などに使われているステコンです。
なぜ時止めを使うと成功しやすくなるかと言うと、時止めを食らっている状態だと
ガードステートの効果が無効になるからです。
ガードステート(120~155)にはTarget系のステコンが効かないと言う特長があります。
しかし、時止めと食らっている状態だとガードステートにいてもTarget系のステコンが効くようになります。
時止め記述はリンクの製作物公開空間のテンプレフォルダの「永続ターゲットバグテンプレ」に記載してあります。
と、言うことでもうちょっと見栄えを良くしてこの3つのほかに2つ技術を搭載したテンプレを公開いたします。
DLはリンクの製作物公開空間→テンプレ→永続ターゲットバグテンプレです。
以上で本講座は閉講となります。
次回は「超即死」です。
スポンサーサイト
コメント
No title
すみません、また質問なのですが・・・
anim以外のstateに入れるXXXXはどんな番号でもいいのでしょうか?
それと下の記述なんですが、-2ステートに入れていいのでしょうか?
[Statedef XXXX]
Type = A
MoveType = A
Physics = N
Ctrl = 0
Anim = XXXX
[State , 当身]
Type = ReversalDef
Trigger1 = ishelper(XXXX)
Reversal.Attr = SCA,AA,AT,AP
Pausetime = 0, 2
Sparkno = -1
Hitsound = -1
Numhits = 0
Ignorehitpause = 1
anim以外のstateに入れるXXXXはどんな番号でもいいのでしょうか?
それと下の記述なんですが、-2ステートに入れていいのでしょうか?
[Statedef XXXX]
Type = A
MoveType = A
Physics = N
Ctrl = 0
Anim = XXXX
[State , 当身]
Type = ReversalDef
Trigger1 = ishelper(XXXX)
Reversal.Attr = SCA,AA,AT,AP
Pausetime = 0, 2
Sparkno = -1
Hitsound = -1
Numhits = 0
Ignorehitpause = 1
Re: No title
> 彗さん
まずステートには4種類あって準常時監視ステートの-1,-3、常時監視ステートの-2、その他のステートに分けられるんだけどStatedef XXXXはその他に分けられるんだ。だから-2とStatedef XXXXは別々のステートに書き込んでください。
あとXXXXは好きな番号でいいですよ。
まずステートには4種類あって準常時監視ステートの-1,-3、常時監視ステートの-2、その他のステートに分けられるんだけどStatedef XXXXはその他に分けられるんだ。だから-2とStatedef XXXXは別々のステートに書き込んでください。
あとXXXXは好きな番号でいいですよ。
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
Re: No title
> 彗さん
まずnumheleperとishelperの()の中はHelperで設定したIDと同じにしてください。この記述だと9999。
固定ステートのValueはHelperのStatenoと同じにしてください。(Value = 6666)
それとignorehitpause = 1より下の記述削除してください。(余計な記述のため)
まずnumheleperとishelperの()の中はHelperで設定したIDと同じにしてください。この記述だと9999。
固定ステートのValueはHelperのStatenoと同じにしてください。(Value = 6666)
それとignorehitpause = 1より下の記述削除してください。(余計な記述のため)
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
Re: No title
> 彗さん
Targetが常に表示されていたら成功です。おめでとうございます。
Targetが常に表示されていたら成功です。おめでとうございます。
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
Re: No title
> 上のコメのひと
このアニメで出来ないのなら他の所に原因があると思いますね。
このアニメで出来ないのなら他の所に原因があると思いますね。
No title
上でできないと言った者ですが出来ました。
hitdefとreversaldefが競合していたのが原因で、
reversaldefに「trigger1=numtarget」を追加したら無事成功しました。
お騒がせして申し訳ございません。
hitdefとreversaldefが競合していたのが原因で、
reversaldefに「trigger1=numtarget」を追加したら無事成功しました。
お騒がせして申し訳ございません。
Re: No title
> 上コメのひと
おめでとうございます。これからもがんばってください。
おめでとうございます。これからもがんばってください。
No title
死の宣告って永久タゲを使うのか………参考になりました、ありがとうございます。
あと「即死ステートいいでしょう」って誤字な気が………
あと「即死ステートいいでしょう」って誤字な気が………
No title
>virtual reality氏
おろ、誤字ってる。報告ありがとうございます。
おろ、誤字ってる。報告ありがとうございます。
No title
うーん…aseertspecialがあるのに何故かしらヘルパーが分身してしまいますねぇ…
No title
> kinomiya氏
分身する原因の多くは存在しないステートに行です。
-2のselfstateで存在しないステートに送ってしまうと分身ができてしまいます。他にはステートの重複などがあります。
透明にならないのはヘルパーが本来行くべきステートに行っていないのでAssert諸々を読み込めない状態です。ステート番号をよくチェックしてみてください。
分身する原因の多くは存在しないステートに行です。
-2のselfstateで存在しないステートに送ってしまうと分身ができてしまいます。他にはステートの重複などがあります。
透明にならないのはヘルパーが本来行くべきステートに行っていないのでAssert諸々を読み込めない状態です。ステート番号をよくチェックしてみてください。
No title
お早い返信どうもです。上手くヘルパーが透明になってくれました!ありがとうございます!
もう一つ質問ですが相手に攻撃させずreversaldefを起動させる方法って存在するのでしょうか?
もう一つ質問ですが相手に攻撃させずreversaldefを起動させる方法って存在するのでしょうか?
No title
> kinomiya氏
おめでとうございます。
ReversalDefはHitDefしか感知できないので相手本体が攻撃しない限りタゲを取得するのは不可能です。
おめでとうございます。
ReversalDefはHitDefしか感知できないので相手本体が攻撃しない限りタゲを取得するのは不可能です。
No title
そうなのですか
いろいろと下らない質問に親切に答えてくださってありがとうございました
こちらはまだキャラを一体も作ってないトーシロの身ですが頑張ります
いろいろと下らない質問に親切に答えてくださってありがとうございました
こちらはまだキャラを一体も作ってないトーシロの身ですが頑張ります
No title
ありゃー、透明にするのには成功しましたが即死当身みたいになっちゃってますねー
何か暴発してるのでしょうか
何か暴発してるのでしょうか
No title
> kinomiya氏
永続タゲはタゲを取得したら常に当身をすればいいのでタゲ取得をする際は落下でも即死でもおkです。ただ単にタゲを取得するのが目的なので。
永続タゲはタゲを取得したら常に当身をすればいいのでタゲ取得をする際は落下でも即死でもおkです。ただ単にタゲを取得するのが目的なので。
No title
ふと疑問に思ったことなのですが、
609zさんの永続タゲテンプレにある
[State -2, 相手ライフ監視0-1]
Type = VarSet
Trigger1 = ishelper(XXXX)
Trigger1 = enemy(0),Life = enemy(0),LifeMax
V = 0
Value = enemy(0),Life
Ignorehitpause = 1
[State -2, 相手ライフ監視0-2]
Type = VarSet
Trigger1 = ishelper(XXXX)
Trigger1 = enemy(0),Life < Var(0)
V = 0
Value = enemy(0),Life
Ignorehitpause = 1
[State -2, 相手ライフ監視1-1]
Type = VarSet
Trigger1 = ishelper(XXXX)
Trigger1 = enemy(1),Life = enemy(1),LifeMax
V = 1
Value = enemy(1),Life
Ignorehitpause = 1
[State -2, 相手ライフ監視1-2]
Type = VarSet
Trigger1 = ishelper(XXXX)
Trigger1 = enemy(1),Life < Var(1)
V = 1
Value = enemy(1),Life
Ignorehitpause = 1
ってどういう意味があるのでしょうか?
609zさんの永続タゲテンプレにある
[State -2, 相手ライフ監視0-1]
Type = VarSet
Trigger1 = ishelper(XXXX)
Trigger1 = enemy(0),Life = enemy(0),LifeMax
V = 0
Value = enemy(0),Life
Ignorehitpause = 1
[State -2, 相手ライフ監視0-2]
Type = VarSet
Trigger1 = ishelper(XXXX)
Trigger1 = enemy(0),Life < Var(0)
V = 0
Value = enemy(0),Life
Ignorehitpause = 1
[State -2, 相手ライフ監視1-1]
Type = VarSet
Trigger1 = ishelper(XXXX)
Trigger1 = enemy(1),Life = enemy(1),LifeMax
V = 1
Value = enemy(1),Life
Ignorehitpause = 1
[State -2, 相手ライフ監視1-2]
Type = VarSet
Trigger1 = ishelper(XXXX)
Trigger1 = enemy(1),Life < Var(1)
V = 1
Value = enemy(1),Life
Ignorehitpause = 1
ってどういう意味があるのでしょうか?
No title
> 彗氏
この記述は「回復阻止」「便乗回復」というものに使います。
常に相手のライフを監視して相手のライフがvar(0)またはvar(1)より大きくなったらタゲライフで回復した分を減らし回復を阻止することを回復阻止。回復した分を自分のLifeAddで同じ量を回復することを便乗回復といいます。
この記述は「回復阻止」「便乗回復」というものに使います。
常に相手のライフを監視して相手のライフがvar(0)またはvar(1)より大きくなったらタゲライフで回復した分を減らし回復を阻止することを回復阻止。回復した分を自分のLifeAddで同じ量を回復することを便乗回復といいます。
No title
質問です。氏の永タゲテンプレを用いて当身型タゲ取得を搭載し、毒や任意のタイミングでのステ変更には成功したのですが、相手が最初に攻撃した際、自分にヒットしていない場合でもデフォルトのヒットスパークが表示されてしまいました。どうすれば表示されなくなるでしょうか。
打撃型は搭載していないので、10010ヘルパーが発生する記述、statedef10010、numhelper及びishelper(10010)を全て消去しています。
打撃型は搭載していないので、10010ヘルパーが発生する記述、statedef10010、numhelper及びishelper(10010)を全て消去しています。
No title
> 純白のトロサウルス氏
こちらの当身記述にはSparkno = -1とあるのでヒットスパークは出ないはずです。
相手が攻撃した音が鳴っていたら何かに当たっている可能性があります。
こちらの当身記述にはSparkno = -1とあるのでヒットスパークは出ないはずです。
相手が攻撃した音が鳴っていたら何かに当たっている可能性があります。
No title
攻撃音は鳴っていなかったですね。
一応sparknoの方をこちらで用意したヒットスパークの番号に変えて確かめてみましたが番号にかかわらず同様の現象が起こります。
デフォルトヒットスパーク発生後すぐに相手のライフが減り始めたのでおそらく当身ヘルパーに攻撃した際に出てると思いますが・・・。
一応sparknoの方をこちらで用意したヒットスパークの番号に変えて確かめてみましたが番号にかかわらず同様の現象が起こります。
デフォルトヒットスパーク発生後すぐに相手のライフが減り始めたのでおそらく当身ヘルパーに攻撃した際に出てると思いますが・・・。
No title
> 純白のトロサウルス氏
KFMで試しにsparkno=-1の当身を当ててみたんだけどヒットスパークは出なかったですね。
やはり何かに被弾して出ている可能性がありそうだけど...
もしダメだったらsparkxy=999,999を使ってみるといいかも、これならヒットスパークを画面外に追いやることができるはずだから。
KFMで試しにsparkno=-1の当身を当ててみたんだけどヒットスパークは出なかったですね。
やはり何かに被弾して出ている可能性がありそうだけど...
もしダメだったらsparkxy=999,999を使ってみるといいかも、これならヒットスパークを画面外に追いやることができるはずだから。
No title
5150ステの方でsparkno=-1を追加したらできました!
この5150ステのreversaldef、死亡時もターゲットを保持し続けることでタッグ等で自分が死んでも毒ダメージを与えるみたいな認識だったのですが実際はどうなのですか?
この5150ステのreversaldef、死亡時もターゲットを保持し続けることでタッグ等で自分が死んでも毒ダメージを与えるみたいな認識だったのですが実際はどうなのですか?
No title
> 純白のトロサウルス氏
解決してよかったです。
5150ステートつまり死亡ステートは相手にp2反応させない効果があります。
永続タゲヘルパーはプレイヤー判定なので5150固定にしないと相手がそのヘルパーに反応して試合に支障が出てしまうので5150固定をしています。いわば死んだフリです。そして永続タゲの条件はreversaldefを途切れさせないことなので固定先の5150にもreversaldefがあります。なのでこの5150に書き加えたreversaldefは永続タゲヘルパー用です。毒を使っているのは永続タゲヘルパーなので本体がどんな状態であろうがこのヘルパーさえ動ければ毒等色々使えます。
解決してよかったです。
5150ステートつまり死亡ステートは相手にp2反応させない効果があります。
永続タゲヘルパーはプレイヤー判定なので5150固定にしないと相手がそのヘルパーに反応して試合に支障が出てしまうので5150固定をしています。いわば死んだフリです。そして永続タゲの条件はreversaldefを途切れさせないことなので固定先の5150にもreversaldefがあります。なのでこの5150に書き加えたreversaldefは永続タゲヘルパー用です。毒を使っているのは永続タゲヘルパーなので本体がどんな状態であろうがこのヘルパーさえ動ければ毒等色々使えます。
No title
そんな意味合いがあったんですね。
教えていただきありがとうございました。
教えていただきありがとうございました。
No title
永続タゲテンプレRで[State 10000, 回復阻止1]のどこかがエラーを起こすんですが・・・
エラーメッセージは (空欄)でした。
エラーメッセージは (空欄)でした。
No title
>> (´・ω・`) さん
回復阻止1は2体目(タッグ)用のなので1vs1がメインなら無効にするといいかもしれません。
エラーメッセージ無しでのエラーは自分でもわからないのでどんな状況で起こるのか教えていただけませんか?
回復阻止1は2体目(タッグ)用のなので1vs1がメインなら無効にするといいかもしれません。
エラーメッセージ無しでのエラーは自分でもわからないのでどんな状況で起こるのか教えていただけませんか?
承認待ちコメント
このコメントは管理者の承認待ちです
初めまして、初対面であれですが質問いいですか?
以下のようにやってみましたが、毒が作動しません....
何か問題があるのでしょうか?
追記:ごめんなさい、原因分かりました... clsn1がなかったからでした....
お騒がせしました...
[State -2, マーキングヘルパー]
Type = Helper
Trigger1 = !numhelper(444)
HelperType = Player
Name = "marking"
ID = 444
Stateno = 444
Supermovetime = 2147483647
Pausemovetime = 2147483647
Ignorehitpause = 1
[State -2, 固定]
Type = SelfState
Trigger1 = ishelper(444)
Value = 444
Ctrl = 0
Ignorehitpause = 1
[Statedef 444]
Type = A
MoveType = A
Physics = N
Ctrl = 0
Anim = 616
[State , 当身]
Type = ReversalDef
Trigger1 = ishelper(444)
trigger1=numtarget
Reversal.Attr = SCA,AA,AT,AP
Pausetime = 0, 2
Sparkno = -1
Hitsound = -1
Numhits = 0
Ignorehitpause = 1
[State , 毒]
Type = TargetLifeAdd
TriggerAll = NumTarget = 1
Trigger1 = ishelper(444)
Trigger1 = GameTime%10 = 0
Value = -3
Ignorehitpause = 1
何か問題があるのでしょうか?
追記:ごめんなさい、原因分かりました... clsn1がなかったからでした....
お騒がせしました...
[State -2, マーキングヘルパー]
Type = Helper
Trigger1 = !numhelper(444)
HelperType = Player
Name = "marking"
ID = 444
Stateno = 444
Supermovetime = 2147483647
Pausemovetime = 2147483647
Ignorehitpause = 1
[State -2, 固定]
Type = SelfState
Trigger1 = ishelper(444)
Value = 444
Ctrl = 0
Ignorehitpause = 1
[Statedef 444]
Type = A
MoveType = A
Physics = N
Ctrl = 0
Anim = 616
[State , 当身]
Type = ReversalDef
Trigger1 = ishelper(444)
trigger1=numtarget
Reversal.Attr = SCA,AA,AT,AP
Pausetime = 0, 2
Sparkno = -1
Hitsound = -1
Numhits = 0
Ignorehitpause = 1
[State , 毒]
Type = TargetLifeAdd
TriggerAll = NumTarget = 1
Trigger1 = ishelper(444)
Trigger1 = GameTime%10 = 0
Value = -3
Ignorehitpause = 1