2017年09月13日

【超重要】キャラによって重力が強くかかってしまう現象の原因と対策

MUGENの空中コンボにはキャラによって若干浮き方に違いがあることは
なんとなく多くの人が気づいているかもしれませんが、
その原因についてはあまり知られていないような気がするので記事にします
(既にどこかで記事にされている方がいらっしゃった場合、
そちらの方のブログ等をこちらで引用させていただきます。
とあるスレで言及があったのは見つかりましたが…)。

※追記
既に記事にしてくださっている方がいらっしゃいました。
しもつきさんのブログです。
http://simotukinew.blog135.fc2.com/blog-entry-713.html

具体的な内容は続きから。

続きを読む
posted by リック at 20:32 | Comment(0) | MUGEN豆知識 | このブログの読者になる | 更新情報をチェックする

2017年08月03日

MUGENキャラ操作時に起こるしゃがみ→立ちチェーンの不具合の対処

https://www49.atwiki.jp/mugencns/?cmd=word&word=command&type=&pageid=37
こちらのページの最下部にある
「Lv2-PauseTime中のキー放しを反映させる方法」
の部分の解説にある通り、mugenではしゃがみ攻撃から
立ち攻撃へチェーンさせようとすると、ヒットポーズ中もしゃがみ入力が続き、
結果立ち攻撃を出したつもりなのにしゃがみ攻撃が出てしまう不具合があります。
自分も実は少し前まで知りませんでした(^-^A;)自分の操作が下手なだけかと…

この不具合の影響を受けるキャラはだいたい以下の通り。
・しゃがみ単ボタン技から立ち単ボタン技へチェーンできるキャラ。
・レバー入れ単ボタン技を持つキャラ(鎖骨割り等)。
よほど古いゲームでなければ大抵影響を受けるでしょう。
この不具合はかなり深刻でストレスが溜まるので、人に操作してもらうことを
意識している作者さんであれば必ず対策することをおすすめします。

上記wikiにはその対処法も書かれており、
記述に慣れている方であればだいたいどうすれば良いか理解できると思います。
しかしそうではない人、特にキャラをDLして操作する側の人にとっては
キャラに記述を追加して直すというのは若干ハードルが高いかもしれません。
というわけで具体的にどのような改変が必要かを簡単に解説しようと思います。

ちょっとしたお断りですが、これから紹介する方法は制作者側ではなく、
キャラをDLして操作する側が行うことを前提としています。
なるべくコピペで済むようにしてありますので、
一部効率が悪いところや記述の仕方が汚い感じになりますのでご了承ください。

具体的な方法は続きから。

続きを読む
posted by リック at 17:00 | Comment(0) | MUGEN豆知識 | このブログの読者になる | 更新情報をチェックする

2012年07月11日

Alive=0時のターゲット放棄

http://oki6761.blog23.fc2.com/blog-entry-1290.html

遅レスで申し訳ないのですが。

これはプレイヤータイプのキャラ(ヘルパーも本体も)のLifeが0になるとAliveが0になり、
同時に強制的に5030ステートに飛ばされて(ステートを奪われている時は別?)、
そしてMoveTypeがHになってしまうという仕様によるものです。
MoveType=Hだとターゲットを維持することはできませんからね。

ちなみに一度死亡してから蘇生し、更にもう一度Lifeが
0になった場合は5030ステートに行かないみたいです。
Loseフラグが付いた後が条件なのでしょうか?
この現象自体本当に発生するのか確信が持てませんので、
もし検証してくださる方がいると嬉しいです。

posted by リック at 01:05 | Comment(0) | MUGEN豆知識 | このブログの読者になる | 更新情報をチェックする

2012年04月28日

TagetStateのIDとvalueを読む順番

ステコンはトリガーを満たしたらすべてのパラメータを読むものだと思ってたのですが、
どうやらそうとは限らないみたいです。
TargetStateのトリガーを満たした場合、
まずIDというパラメータを見て、その指定されたIDの
ターゲットが存在していればvalueを読むようです。

つまり、


[State ]
type = TargetState
value = (var(0):=999)
ID = 1
trigger1 = NumTarget || (var(0):=0)
ignorehitpause = 1

[State ]
type = DisplayToClipBoard
trigger1 = 1
text = "%d"
params = var(0)
ignorehitpause = 1



こんなステコン群があった場合、
トリガーが満たされた時にID=1のターゲットがいなければ、
クリップボードの値が示すのは0ということになるわけです。

何らかの役に立つということはなさそうですが、
ちょっと変わった仕様でしたので紹介してみました。

posted by リック at 00:22 | Comment(0) | MUGEN豆知識 | このブログの読者になる | 更新情報をチェックする

2012年04月11日

AI記述をどこに置くか

たまにこういうことに疑問を覚える人がいるみたいなので書いてみます。
ただし自分になりの考えであって、まだ理由があるかもしれないこと、
そしてある程度製作に関する知識あることを前提にしていることにご注意ください。
結論から言えば、-3ステートにするのが無難だと思います。

まず-2ステートでない理由から。
これは簡単で、-2ステートは投げ等のステートを奪われた状態でも読み込まれるため、
自分から勝手に相手の投げ技から抜けたり、
下手をすれば存在しないステートで固まってしまうということがあります。

では-1と-3の違いはというと、実際には処理順と時止め無視以外はほぼ変わりません。
そして-2ステートが常に読み込むステートなので、
-2ステートより後に読み込まれる-1ステートの方が便利だと言えます。
私も自分のキャラのAIは-1ステートに記述していることが多いです。

最初の結論と違うじゃないかと思うかもしれませんが、
ここで問題になってくるのが外部AIを作成する場合。
普通プレイヤー操作でのコマンド認識とステート移動を行うのは-1ステートなのですが、
外部AIを-1ステートに入れてしまうと、本体の-1ステートが変更された時に
外部AIもそれに合わせて更新しなければ、本体の更新された部分を上書きしてしまいます。
よって外部AIを作成されることを考えている場合は、
-3ステートに何も書かないorAI記述だけ書くようにして
本体の更新と外部AIの更新の著しい競合をなるべく避けるわけです。

ちなみに-3ステートにプレイヤー操作の記述を入れて、
外部AIを-1ステートに入れるという変わったこともできなくはないですが、
-1ステートとコマンド定義は同じファイルに書くことが多いため
(そうしなければならないわけではありませんが)、
-3ステートは何も書かずに済むことが多いです。

よって外部AIを作成されることを考えていないなら、
-1ステートにAI記述を置いても問題はありません。
外部AIを作成されることを考えているor外部AIを作りたいと
考えている方は-3ステートが無難だと思います。

posted by リック at 22:50 | Comment(2) | MUGEN豆知識 | このブログの読者になる | 更新情報をチェックする

2012年02月23日

相手が画面端にくっついた状態で吹っ飛んでいるときの判断

AIに画面端限定コンボをさせるとき必ず考慮しなくてはいけないのがこれ。
画面端にくっついていて後ろに吹っ飛んでいるとき、
見た目のX軸速度は0なのですが、内部的にはX軸速度は存在しており、
そのまま相手のX軸速度を考慮すると相手が後ろに吹っ飛んでいると判断して
攻撃を振りづらくなってしまいます。

というわけで相手が画面端にくっついて後ろに吹っ飛んでいるときは
相手のX軸速度を0と判断して計算するようにしましょう。
私の場合はこんな感じで判断しています。

[State -1, 相手画面端時のX軸速度補正]
type = VarSet
fvar(23) = 0
triggerall = fvar(23) := 1 ;最初にリセット
trigger1 = EnemyNear,BackEdgeBodyDist = 0
trigger1 = EnemyNear,Vel X < 0
trigger2 = EnemyNear,FrontEdgeBodyDist = 0
trigger2 = EnemyNear,Vel X > 0
ignorehitpause = 1

※一部解説に不要な記述は省いています。

fvar(23)を相手のX軸速度にかけるようにしています。
Enemy,Vel X*fvar(23)みたいな感じです
(実際は技の発生速度とかいろいろ書いていますが)。
条件を満たせばfvar(23)は0なのでX軸速度を考慮せず、
条件を満たさなければfvar(23)=1なのでX軸速度はそのまま計算されます。

相手が画面端にくっついているということはBackEdgeBodyDistは0です。
更にそこにX軸速度がマイナスなら画面端に向かって移動していることになります。
facingはBackEdgeBodyDistに内部的に含まれているので
わざわざ判定する必要はありません。
まためくりなどで相手がこちらに背を向けて吹っ飛んでいることもありますので、
FrontEdgeBodyDistを使って同様に判断しています。

画面端限定コンボって実戦では当たり前なのですが、
AIにさせるとなると結構面倒だったりしますねー。
特に相手の加速度や技の発生を考慮など厳密に行動させると
こういう所では逆に作用してしまうこともあるかもしれません。
それでも工夫すれば厳密に計算させることは可能だと思います。


何か間違いがありましたらご指摘ください。

posted by リック at 00:38 | Comment(0) | MUGEN豆知識 | このブログの読者になる | 更新情報をチェックする

2012年02月13日

ライフバーのパワーゲージ上昇音の消し方(動画投稿主さん向け?)

MUGENはパワーゲージが溜まった時に何らかのサウンドを鳴らします。
商用ゲームでもよくあるものですね。
スト3のレッツゴーなどはMUGENでも聞けるので知っている人も多そうです。

ですが神キャラだと騒音の原因になったりするのですよね。
自分からパワーを変えまくってるキャラは少ないですが、
相手のゲージを減らす攻撃や当身がありますので、
相手が常にゲージMAXにしているとスココココココンとゲージ上昇音が鳴り響くことになります。
同時に鳴らせるサウンドには限りがありますので、
このせいで既に鳴っている音が潰されてしまいやや聞き映えが悪いです。

というわけでこのパワーゲージ上昇音を消す方法を紹介します。
MUGENのフォルダの中の"data"フォルダを開き、
"fight.def"ファイルをテキストエディタで開きます
(ライフバーがデフォルトでない場合は導入しているライフバーの
フォルダを開き、同じく"fight.def"を開きます)。
それからそのテキストを"level1.snd"で検索して、
見つかったらその行をすべて消すか、行頭に";(セミコロン)"を入れてください。
"level2.snd"と"level3.snd"も同じようにして消します。

これでパワーゲージ上昇音が消えたはずです。
もちろんヒットスパークが連続で鳴ったりして音がかき消されることはありますが、
少し音がつぶれる現象は起きづらくなったかもしれません。
特に神キャラ動画投稿主さんはご参考いただければと思います。

もちろん製作者さんが苦労して作成されたライフバーです。
それを弄って一部の音を消すという行為に
気分を害する製作者さんがいるかもしれません。
なのでよほどうるさくて他の音声が聞こえないということでないなら、
音が出るようにした方が良いと思います。
無暗に音声を消すことは絶対にお勧めいたしません。


posted by リック at 18:07 | Comment(2) | MUGEN豆知識 | このブログの読者になる | 更新情報をチェックする

2012年01月18日

DisplayToClipBoardで使用される"Q"

DisplayToClipBoardでクリップボード上にアルファベットを表示させようとすると
テキストの小文字大文字の区別なくすべて大文字表記になってしまいます。

ですが、実は"Q"だけは違って小文字が使えたりします。





となんかすごそうなことを言ってみましたが何ということは無く、
大文字小文字区別なく小文字表記になっているだけです。
たぶん大文字表記にすると文字がつぶれて他の文字と
区別がつかないのでこのようになったのでしょうね。

mugen0.jpg

左下のクリップボードにアルファベット26文字を表示させてみました。
こう見ると違和感が結構あります。


まあくだらない話なのですがちょっとした無駄知識ということでw

posted by リック at 00:35 | Comment(0) | MUGEN豆知識 | このブログの読者になる | 更新情報をチェックする

2012年01月15日

もしかしたら役立つかもしれない記述:振り向き

[State -2, 勝手に振り向かない]
type = AssertSpecial
flag = NoAutoTurn
trigger1 = !IsHelper
trigger1 = var(59) > 0
ignorehitpause = 1

[State -2, 振り向く]
type = Turn
trigger1 = !IsHelper
trigger1 = StateType != A && ctrl && var(59) > 0
trigger1 = ((EnemyNear(NumEnemy>1&&!EnemyNear,Alive),Pos X>Pos X)*2-1) - facing

既にやってる人もいるかもしれないですが近くの敵に対して振り向くのを
それなりに行数を減らして行うようにしたものです。
var(59)>0がAIスイッチが入っていることの確認、
一番下の行で相手の位置がこちらより右側にいて自分が左向きなら振り向く、
逆に相手が左側にいてこちらが右向きなら振り向くようになります
(ちなみに2つ目のステコンにignorehitpause=1が無いのはわざとです)。
ただしEnemyNearの信用性はあんまり実験していないので、
もしおかしなことになったら申し訳ございません。
あとこれは-2ステートに置いていますが、
普通は-3ステートに置いた方が良いと思います。
ステートを奪ってctrl=1にする人はいないと思いますが一応。

まあ実戦ではどちらの相手を標的にするかの判断はもっと複雑なので、
AIを精密に作りたい場合はあんまり役に立たないかもしれません。

posted by リック at 18:30 | Comment(0) | MUGEN豆知識 | このブログの読者になる | 更新情報をチェックする

2012年01月07日

被弾ヘルパーが無敵になる現象について

やっと対処することができました・・・これでやっと次の作業に移れます。
他の方ももしかしたらこの問題に悩んでいるかもしれないので軽く触れておきます。

まず以前lunaticさんも同じ問題に悩まれたそうで、
その時に判明したことは以下の通りです。
http://lunatic284.blog90.fc2.com/blog-entry-7883.html

HitDefが当たった時に自分に付けるhitpausetimeの値だけ
無敵になってしまうということですね。
更に今回原因を調査して分かったのが、
この現象が発生するのは時止めが発生している瞬間のみということです。
その上時止めが発生していない状態の時にHitDefが当たると、
自分に付けるhitpausetimeの値だけ(ここは未調査です)
同じ現象がずっと発生しないかもしれません。

よってこの現象が発生するのは、自分が初めて凍結維持用HitDefを出す瞬間と
時止めのタイミングが重なった場合のみということです。
他のほとんどのキャラでこの現象が発生しないのも納得できそうです。
しかし本当に良くわからない仕様が多いですね・・・

posted by リック at 15:42 | Comment(0) | MUGEN豆知識 | このブログの読者になる | 更新情報をチェックする