銀の星

人生なんでも楽しんだモノ勝ち
銀の星 TOP  >  MUGEN

ひとつ前の記事の続き的なつぶやき

いっこ前の記事を受けてのつぶやきなんですが……


AIで当身技なんかを振らせようと思ったときに困るのは、
なにもHitDefAttrを感知できたときには敵の攻撃判定は発生してるから、
1フレーム発生じゃない当身は扱いが難しいってことだけじゃないです。


例えば遠くからHitDefを出したまま飛んでくる突進技とか、
Time = 0 でHitDefのステコンは有効になるけど攻撃判定が出るのはもっと後
みたいなのも、同じくらい困ることになります。


困ることになるんですが、これらにも
前の記事で紹介した記述を応用すれば対応できるようになりますね。

前者については距離÷速さが時間であることを考えれば
わざわざ学習機能を使わなくても対応可能かもしれませんが、厄介なのは後者。


これについては、MoveContactも併用した監視をすることで高度な対処が可能になります。

ただし、一度は食らうかガードしなきゃいけないのが難点ね。
[ 2018/05/12 20:31 ] MUGEN MUGEN雑記 | TB(0) | CM(0)

発生が遅い攻撃を記憶するための記述 ※追記あり



※追記 2018 05 16

この記事の記述では不完全です。

HitDefAttrはたとえClsn1が無い場合でも
一度発動した以上はMoveType=Aの間有効であり続けるので、

この記事の記述のままでは、HitDefAttrが発動したその瞬間は判断できますが、
持続当てができるタイプの技なのか、それとも一瞬だけ判定が出る技なのか、
多段技だったりするのかは判別できません。

とはいえ、当身技を振らせるためだけに使うなら十分すぎる効力はありますが……。


これをもう少し確実なものにしたい場合、
相手が MoveType=A になってから HitDefAttr を発生させた瞬間までの経過フレーム数を記録するVar
が別途必要になります。





どうも。AI作ってます。



だいたい剣質 『力』 は戦えるようになってきてますが、
弾き後の追撃行動を入れてないのでまだ更新版は上げられないです。



それはさておいて、響には発生1フレームのReversalDefである弾きとは別に、
『居を合わす也』 という、
発生が1フレームじゃない当身投げ
が存在します。


弾きは発生が早い代わりに持続が短く、
居を合わす也は発生が弾きよりは遅い代わりに持続が長い……

そんな感じの差別化がされているんですが、
AIにそういった、1フレーム発生じゃない当身技を正確に振らせようと思ったとき、
思いのほか苦労することになります。



その理由としては、

当身技ってのはだいたい、
相手の攻撃を何でも、どんな属性でも取って返せるようなもんではありません。


MUGEN上では恐らくHitDefAttrが噛み合ったときにのみ
返し技として機能するように作ると思います。


そこで問題になってくるのが、敵が攻撃動作のなかで "いつ" HitDefAttrを出すのか?
って部分。


今現在の記述の主流では、攻撃技の Clsn1(攻撃判定) が生じたと同時にHitDefを発動するキャラが多いです。

とどのつまり、HitDefAttrを感知できた時にはすでに相手は攻撃判定を発生させており、
次の瞬間にはヒットしてしまうってことです。


これは攻撃属性をかみ合わせる必要がある当身技にとっては死活問題で、
相手のHitDefAttrをトリガーにして当身技を振らせようと思っても、
その当身技の発生が1フレームじゃない限り、その当身技を成功させることができません。


ならば……ってことで、
相手の攻撃判定が発生するフレームを覚え、
その覚えた技でだけ当身技を振るようにしようという記述、考えました。


っつっても今のAI界隈ではすでに利用されている発想な話ではあるんですが、
いちおうイチから自分で考えた記述ってことで紹介しときます。





必要なものは空きVarが最低7つ。
ふたつ以上の技を覚えたい場合はそこから2つずつ必要Varが増えます。


その内訳は……

・相手の現在のステートナンバーを保存するVar
・相手のひとつ前のステートナンバーを保存するVar
・相手が MoveType = A になってからの時間(フレーム数)を記録するVar
・相手が MoveType = A になった瞬間のステートナンバーを保存するVar
・相手の遅い攻撃を感知したとき、そのステートナンバーを保存するVar
・相手の遅い攻撃を感知したとき、その時点で相手が
  MoveType = A になってからどれだけのフレームが経過したかを記録するVar
・目的を満たせるものを感知できたとき、最終的にそのステートナンバーを保存するVar

です。


もうちょっと減らせる可能性が無くもありませんが、
万全を期すならたぶんこれぐらい必要です。

本体変数でやるにはちょっと窮屈なので
ヘルパーの変数を使う方がいいんじゃないかな?






[State 相手の一つ前のStateNo]
type = VarSet
trigger1 = EnemyNear,StateNo != var(1)
var(0) = var(1)

[State 相手のStateNo]
type = VarSet
trigger1 = EnemyNear,StateNo != var(1)
var(1) = EnemyNear,StateNo



[State リセット]
type = VarSet
trigger1 = EnemyNear,MoveType != A
var(2) = 0

[State リセット]
type = VarSet
trigger1 = EnemyNear,MoveType != A
var(3) = 0

[State リセット]
type = VarSet
trigger1 = EnemyNear,MoveType != A
var(4) = 0



[State 敵攻撃時間計測]
type = VarAdd
trigger1 = EnemyNear,MoveType = A
var(2) = 1

[State 攻撃開始時点のStateNo]
type = VarSet
trigger1 = EnemyNear,MoveType = A ;念のため
trigger1 = var(2) = 1
var(3) = var(1)

[State 発生が遅い攻撃感知]
type = VarSet
triggerall = !var(4)
triggerall = var(2) >= 7 ;これ以上発生速度が遅い攻撃を記憶する
trigger1 = EnemyNear,MoveType = A ;念のため
trigger1 = EnemyNear,HitDefAttr = SA,NA,SA ;記憶したい攻撃属性
var(4) = var(1)



[State 敵攻撃の発生F記憶]
type = VarSet
triggerall = var(3)
triggerall = var(4)
trigger1 = !var(6) ;ひとつめのステートがまだ未学習のとき
var(5) = var(2) ;敵の攻撃発生フレームを記録

[State 記憶するステート検討1]
type = VarSet
triggerall = var(3)
triggerall = var(4)
trigger1 = !var(6) ;ひとつめのステートがまだ未学習のとき
trigger1 = var(3) = var(4) ;攻撃開始時と攻撃判定発生時のステートが同じとき
var(6) = var(1) ;現在のステートを記録

[State 記憶するステート検討2]
type = VarSet
triggerall = var(3)
triggerall = var(4)
trigger1 = !var(6) ;ひとつめのステートがまだ未学習のとき
trigger1 = var(3) != var(4) ;攻撃開始時と攻撃判定発生時のステートが異なるとき
var(6) = var(0) ;一つ前のステートを記録


記憶するまでの記述はこんな感じ?




そして、実際に当身技を振らせるときは


[State -1]
type = ChangeState
triggerall = EnemyNear,MoveType = A
triggerall = InGuardDist
triggerall = Ctrl
triggerall = P2BodyDist X = [0,80] ;適宜調整
triggerall = P2BodyDist Y = [-80,0] ;適宜調整
trigger1 = var(5) && var(6) ;念のため
trigger1 = EnemyNear,StateNo = var(6) ;敵が学習した技を使っているとき
trigger1 = var(5) - var(2) = [7,18] ;当身技の発生フレームから終了フレームの間
value = 当身技のステートナンバー



こんな感じでできるはず。



実は今私のPCで動かしてる響のAIに入れている学習記述では
『相手が MoveType = A になった瞬間のステートナンバーを保存するVar』
を使っていなくて、

学習した技が単一のステートで完結してる技なのか
それとも複数のステートが連結した技なのかを判別せず、
ただ発生の遅い攻撃を覚えたら、そのステートか、
その直前のステートに対して当身技を振るようになってるんですが、


ここに書いた記述はそれの改良版になります。



Nullのステコンを使い、var() := を使って書けば
もっとシンプルというか、コンパクトな記述にできるとは思います。


どーでしょうかねぇ?


この記述を応用すれば、なにも当身技に限らず、
発生の早い小技で相手の技の出がかりを潰そうとするとかも可能。


逆に、発生の早い技に対しては防御行動を取る頻度をとくに下げるとか、
そういうベクトルでの利用も可能かな。


変数を一気に使うのが難点ですが、
一度用意してしまえば利用可能なシチュエーションは豊富にありますよ。


[ 2018/05/12 14:13 ] MUGEN MUGEN記述解説 | TB(0) | CM(0)

響AI作成中……

本体性能を固めてからAI作ろうかとも思ってたんですが、

やっぱ早く動くAI載せないと全く話題にすら上らないというか、
なにより私が楽しくない。



なのでAI作成中です。




今までは大凡10段階のAIレベルを用意していましたが、
今回は4段階のみ。


人向けの弱めと強め、
AI向けの弱めと強めで4段階。


その他にはワンチャンスで持っていく平均ダメージの設定(コンボレベル)。
超反応弾き確率等の設定項目は用意します。



少なくとも慨世さんのAI作成時にやっていたこととは
全く違ったアプローチによるAI作りをしているので、
私のキャラの中では新鮮なものになるんじゃないかと自分では思ってる。


いやまだ全然できあがってないんだけれども。




とりあえず、長い間隔で動く乱数によって、
攻めっ気が強いタイミングとガン待ちするタイミングを用意する。


また、別の乱数を用いて4段階の間合いを用意し、
それぞれで異なった立ち回りになるように目指す。



攻めモード時は積極的にダッシュや移動技からの奇襲をし、
また相手の攻撃の出始めを小技で潰そうと試みる。



待ちモード時は歩きによってジリジリと間合いを変えつつ、
相手が動いた時はまずはガードや避け技をしてから後隙に差し込むことを重視するようにさせる。



対人向けでも対AI向けでも、
技の選択に違いこそあれ、
その辺の行動の指針は変わらないようにする。



そんな感じ。


今はガード関連の動作と歩きによる間合いができあがって、
次は小技入れてからのコンボを作ろうとしてるとこ。


10割ルートがあることは確認済みですが、
キャンセルできる小技なら何刺しても永久とか
そういう火力は出ないので、
いい感じのバランス感覚でコンボを組まないとなぁと思考中です。
[ 2018/05/01 03:38 ] MUGEN MUGEN雑記 | TB(0) | CM(0)

二重リダイレクト使えば

変数食って疑似二重リダイレクトすれば、
Helperから処理させることでダウンエフェクトとか効果音とか
その辺のもろもろのタイミングをきっちり合わせられるかなぁと思ったけれども……


並~狂の間にいるキャラでそんなたった1Fの演出のズレのために
本体変数食う必要もないかなと思ったんで、

やっぱやめました。



[ 2018/04/28 12:19 ] MUGEN MUGEN雑記 | TB(0) | CM(0)

MUGENキャラ 『高嶺響』 更新しました。_KO時の演出関連

高嶺響


どうもです。

改変高嶺響の更新をします。


白色フラッシュ、赤色フラッシュ、BGMミュート、デヨ~ンSE等の
KO時の演出をいろいろ載せました。

それに関連して、
二幕版乱舞奥義を途中でやめた場合にもKO判定が出るようになりました。


ついでに剣質ロゴがRoundState = 4でいったん非表示になるように変更。



その他、

・限界ダメージ用のNoKoに!Winトリガーの追加

・一部Varの数値が間違って機能しなくなっていたのを修正

・コモンステートの無駄な(というか邪魔な)記述を削除


などを行ってバグや不具合への対処をしておきました。




AIはまだ無いですが、そろそろ募集をかけたい気持ち。
来なくても自分で一応つくりはしますけども。



今後はバグさえなければ斬殺KOや刺殺KOの再現を優先してやっていきます。
オリジナル技ももう一つ搭載予定ではありますが、
そちらは性能演出双方で苦戦してるので当分先。


そんな感じですー。
高嶺響

[ 2018/04/27 08:38 ] MUGEN MUGENキャラ更新 | TB(0) | CM(0)
プロフィール

ShipSilverstar

Author:ShipSilverstar


ドコにでもいるありきたりなオタクです
音楽とゲームが大好きなMUGENキャラ製作者です

いろんなコトで遊んで
いろんなことを勉強していきたい
いろいろと欲求の旺盛な人間です


リンクはご自由に
『ごあいさつ』
のコメント欄はトイレの壁代わりに使って頂いて構いませんよ

私が作ったMUGENキャラはリンク集にあります

FC2ブログ
あなたもブログを持ちませんか?
このブログもFC2無料ブログです
アクセスカウンター
オンラインカウンター
現在の閲覧者数:
検索フォーム