あつとブログ

WEB漫画サイト「ゆめいろGペン」のサポートが本来の目的。色々な(偏った)ジャンルで調べたこと等をまとめる奇妙なブログです。コメントは受け付けてないのでご連絡は「mituiatto☆gmail.com」まで

オリジナル漫画「魔心」公開中。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

記事まとめ

■宣伝事項
なんか画像とか貼れるスペースとして考えてるけど今のところ特に無し

ブログって後から記事探しにくいのが嫌なのでこういうのを用意しました。
「続きを読む」から今まで書いた記事のまとめリンクが見れるぞい

続きを読む
スポンサーサイト

ToSにっき6

この記事を閲覧するにはパスワードが必要です
パスワード入力

ToSにっき5

この記事を閲覧するにはパスワードが必要です
パスワード入力

Splatoon2の感想

この記事を閲覧するにはパスワードが必要です
パスワード入力

MUGEN ガードのみ可能記述

MUGENの話。調べても出てこなかったので一応電子の海に放流。

格ゲーには「行動不可だがガードのみ可能」という場合がたまにある。
技を出したりジャンプをすることはできないが攻撃をされた場合ガードに移行するもので、
私の知っている範囲だとブレイブルーの後転起き上がりなんかは後半がその状態らしい。
他にはワープ系の技はそういうの結構あるんじゃないだろうか。(ワープ直後攻撃がすぐ出せると世紀末になるが、簡単にワープ後の隙を狩られるのも嫌というようなバランス)
急降下技の着地硬直とかもそういうのがありそう。


以降は簡単のため、攻撃技の発生後、後硬直の間行動はできないがガードはできる、というようなものを作りたいとする。
StateNo=200で攻撃し、StateNo=201の間はガードのみ可能としよう。
St201は全体9Fとしてみよう。

MUGENはctrl=1でないとガードができない(連ガを除く)。
ではガードのみ可能にしたければSt201でctrl=1かつvar(x)=1にして、
技が出せないというのは-1常時監視のChangeState条件全てに ctlr=1 && var(x)=0 を書けばいいかというと、
MUGEN本体側でジャンプや歩き、立ちからしゃがみへの移行処理は行われてしまい、ステート変更が防ぎきれない
攻撃やダッシュこそ出せなくはできるものの、動くことはできるため直感に合わない形になってしまう。
(歩きはAssertSpecialのNoWalkでも抑制できるがジャンプは本当に無理)

よって行動抑制は-2監視で別ステに行った時、強制的にすぐ帰ってくるようにする。(-3でもいいかも)
これ自体はAIなどでよく使われる手法で、立ち(St0)に戻したりするらしい。
手操作の場合ジャンプせずにぼっ立ちに戻ればそれでいいかと言えば全然違うのでややこしい処理をする。


まず、ガードのみ可能になる直前、St200のAnimTime=0とかでvar(x)=1にし、特殊処理フラグを立てる。
この後普通にAnimTime=0でSt201へChangeState。(しなくてもいいかも)
St201はctrl=1。このままだと動けてしまうが、
-2監視でvar(x)>0をトリガーとし、StateNo!=201の時St201へChangeStateを行う。(もちろん奪取抜け等を防ぐための処理も入れる)
しかしこのままだとSt201のTime=0に戻ってくるため、永遠にSt201が終わらない。

そのため、St201のTimeの代わりにまたvar(x)を使う。
10>var(x)>0をトリガーとし、VarAddをvar(x)=1にする(var(x)を1Fごとに加算する)。
そして前述-2監視でSt201へのChangeStateを行ったが、それのトリガーに10>var(x)も追加する。
すると9Fの間だけSt201に縛られ、ガードのみ可能で他の行動は不可という形にできる。
var(x)は[9,1]で特殊処理フラグとして働き、兼、そのフラグのタイマーとして働くことになった。
このへんの処理は足し算引き算を1間違えただけで全然上手くいかないので義務教育未履修の場合はトライアンドエラー。

で、StateType=CのSt202を作り、StateType=SのSt201とHi to Lo、Lo to Hiでこっそり中下対応。
(StateDefでのtype宣言は演算子使えないからこれしかできないよね?)

最後に結局-1監視の各技へのChangeStateに ctrl=1 && var(x)=0 条件にするのも必要。
特にダッシュやバクステ等、Time=0で速度のつくステートを介すとまずいことになるので。
アニメも一瞬攻撃技の物が表示されてガタガタになります。
上入れっぱ等してもコモンステートのアニメが表示されないのはフレーム処理が
MUGEN本体のジャンプへのChangeState → -3 → -2 (ここでSt201に) → -1 → 数字(common含) →アニメ確定
だから。

ガードステートややられ等をトリガーとしてVarSetでvar(x)=0にして特殊処理フラグを解消するとなおよい。
細かいところではvar(x)の値によってSt201で表示するアニメのElemを調整してもいい。
var(x)=10 && StateNo=201をトリガーとしてSt0にChangeStateしてもいい。(実際の対戦で技振った後にぼっ立ちってあり得ないから実際には要らないけど)



これを作ろうと思った時はステートあっちこっちするからアニメガタガタになるかと思ったらそんなことはなく、上手くいきました

St201で他にもTimeによって細かい処理をしたい場合も全部Timeの代わりにvar(x)の値を利用できるハズ。
var(x)はタイマーの範囲しか使用しないので他にも使いまわせるかも?そもそも本体のvarじゃなくてもいいと思う。



「ガードのみ」がctrl=1を必須とするから難しいのであって、「ジャンプのみ」とかなら-1監視にSt201の時はctrl=0でもジャンプ可能にすればよいだけで簡単。
ガードがctrl=0でもできる方法があったとしたら空回りなんですが・・・
「ガードステートにいる」(連ガ)以外では無いと私は思っていて、それを前提とした記事でした。
MUGEN歴0年のにわかなので許して
変数好き勝手いじってこういうシステム作ってる時が一番楽しいです


余談(というか自分メモ)(自信が無い)
ガードの最初の方、120~130あたりまでの間はctrlに関する記述が無く、ガードというよりガードポーズをとるだけ。
130あたりにいる時に攻撃を食らうと内部処理で150あたりに飛ぶ(レバーの入力は関係無い)。150にもctrl=0にする記述はない。
相手のhitdefのctrltimeによってのみガード硬直ctrl=0を得る。なのでガードポーズ中でも攻撃を食らわなければ行動できる。
130あたりにいる時に後ろ入力をやめるとコモンステ記述処理で140に飛ぶが、ここにはctrl=1記述がある。
よって「ガードのみ可能」にしたいからといってこの記事のシステムを入れず、
[State 132, 6](空中ガード時に着地すると即地上ガード可能の記述)のようにinguarddistをトリガーとして130に飛んだりすると、
相手の攻撃発生前に一瞬後ろに入れて130に飛び、すぐに離し140に飛びctrlを得て小パンで割る、というような動きが多分できる。
[State 132,6]で130に飛んでいいのは、空中ガード硬直中に着地したらガード硬直が無くなってもよい、というシステムだから。
(後ろ入力してなければ52に飛んで、ガード硬直こそ関係無くなるけど着地硬直は発生するアヤシイ作りなのは有名な話)
「ガードのみ可能」は想定したフレーム数の間、行動の自由を得てはいけないというシステムで作りたい。

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。