したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

AI製作関係スレ その2

1MUGEN名無しさん:2010/07/18(日) 15:05:37 ID:AP4BZlNs
AIについて語るスレです。
AIについての質問とか見つけたネタを書いてくカンジです。

前スレ
AI製作関係スレ
ttp://jbbs.livedoor.jp/bbs/read.cgi/internet/1117/1232180149/

99MUGEN名無しさん:2011/10/07(金) 19:54:24 ID:RAl2LVQw
>>94
自分が作っているAIはぶっ飛んだ相手を拾ってコンボするのが中心です
P2Bodydist XとP2Bodydist Yを使えば
ある程度は当たり判定が分ると思います。
あとはVel XとVel Y を使って相手が地面に落ちるまでの時間を計算して
相手を拾っています。

100MUGEN名無しさん:2011/10/07(金) 20:20:55 ID:poxUzhlI
>>96
この間メールしたものです
あの後追記と訂正のメールを送ったのでメールチェックお願いします

101MUGEN名無しさん:2011/10/13(木) 20:56:29 ID:LCa1Rrg2
アーマー感知ってどうやるんでしょうか?

102MUGEN名無しさん:2011/10/16(日) 13:19:53 ID:ddy/BLhA
ヘルパーのID取得して、
それが相手にダメージを与えるヘルパーかそうでないヘルパーか
判断する方法ってありますか?
Movetype=A以外になにかありますかね?

103MUGEN名無しさん:2011/10/17(月) 22:38:32 ID:FcHNB.JQ
102 自己解決しました

104MUGEN名無しさん:2011/10/20(木) 19:40:46 ID:rAfY..xw
91だけどヘルパーが出せなかったら非常に困るのでやめます;;

105MUGEN名無しさん:2011/10/21(金) 01:05:07 ID:1lZxIxbo
>>104
開幕に出しておくならHelper数が上限に引っかかって出せないって可能性は少ないですよ。
それこそHelperを占有する特殊な相手か、上限設定が極端に少ない場合くらいで、
どちらにせよ意図的に封じられなければ開幕にHelperが出せないってことはほぼ無いし、
意図的に封じているってことはまともに戦うような状態じゃありません。

開幕にHelperを出して常駐させて色々するってのは色んなAIでやってて、
AI動作の条件自体がHelper側で制御されてるものもありますので、
通常の対戦だけを考慮するなら開幕にHelper出して使うのは大丈夫かと。1、2個くらいなら。

106MUGEN名無しさん:2011/10/21(金) 21:46:56 ID:aZsHFk2E
なるほど・・
開幕にヘルパー出せなくする相手の事まで考える必要はないんですね。
ありがとうございました

107MUGEN名無しさん:2011/10/23(日) 18:38:10 ID:/LdUnZPo
敵のProjの情報ってあまり取得できないのでしょうか?
敵のStateNoとProjが当たるまでの時間で位置が分るくらいかな?
Projってだいたい等速だよね?

108MUGEN名無しさん:2011/10/25(火) 01:15:29 ID:EKMY.lIA
>>107
自分のProj情報も射出点を記憶して計算させないと分からないくらいだから
Projを正確に感知するのはP2Name使っても難しいんじゃないかな。

>>81のやつのような要領で開始からの位置を細かく記憶させても、
飛び道具の大半は等速とはいえ、一応Projは速度係数や加速度も設定できるし、
特殊な使い方をしてる場合(アーマー時の攻撃判定とか2FProjとか)もあるんで
単純に計算させるとAIが見誤っちゃう可能性があって、難しいと思う。
(っていうか基本的な飛び道具の処理はHelperでするのが主流になっちゃってますし、
特殊な処理にしか使われてないんじゃなかろうか。)

ただ単純単体のProj飛び道具ならProj射出中本体のGuard.Distが無くなる仕様だとかを考えて、
HelperでInGuardDistの範囲を感知し続けて計算してX座標の位置くらいならいくらか分かるかも。
でも2個以上出されてたりHelperのGuard.Distが重なってたり、処理が特殊だと上手く感知できないけど。

109MUGEN名無しさん:2011/10/28(金) 01:54:16 ID:.2F19OAU
>>108
ありがとうございます。InGuardDistは使えそうですね。
これを使って色々試してみます。

110MUGEN名無しさん:2011/10/30(日) 23:24:36 ID:dyHFN2fA
攻撃を食らった時に何の攻撃に当たったか分かりますか?
飛び道具とか敵が2人いた時にどっちの攻撃に当たったかとか

111MUGEN名無しさん:2011/10/31(月) 18:35:04 ID:BuBzDPxg
攻撃を当てるとP2トリガーの対象が攻撃当てた相手になった気がするんで
enemy,movecontact
enemy,p2stateno=stateno
enemy,p2movetype=H
enemy,p2dist x=(pos x-enemy,pos x)*enemy,facing
とかで判別できないかな?
味方が同時ヒット喰らってるとダメそうなので
自分と味方のgethitvar系の数値を比較するといいのかも

同様のやり方でヘルパー飛び道具についても推察できると思うので
精度は敵の相方やヘルパーについての情報と重ね合わせて上げて頂くってことで

それと多段ヒットする飛び道具はmovecontactが立つと思うんだけど
単発物はヒットしてすぐに消滅ステートに入ってmovecontactが判別に使えないケースが
その場合は飛び道具と判定したIDのmovetype=Iをmovecontactの代わりにしたりでどうにか

112MUGEN名無しさん:2011/10/31(月) 22:46:01 ID:QqE6sQR2
ヒットと同時に消えるタイプのHelper飛び道具のヒット認識について気づいたこと。
キャラの処理順はMovetype=Aが先に処理されるのでMoveContactでステート移行or消滅するタイプは、
本体からだと自分のMovetypeがA(攻撃中)でないと先に動かれるからMoveContact認識できないけど、
一番最初に出しておいたMovetype=AのHelperからなら、MoveCotnactの処理をする前に認識できるかも。

処理はMovetype=Aのユニットから+IDの若い順なので、
早めに出してMovetype=Aにしておけば後から出したMovetype=AのHelperよりも早く処理ができるので、
その処理位置なら確実にHelperの処理を認識できるんじゃなかろうか。
ただ本体と認識用Helperの処理関係の管理とか、HelperをGuard.Dist=0にするとか面倒だけど。

113MUGEN名無しさん:2011/11/05(土) 00:04:50 ID:XkIKGzk.
やっぱ色々面倒なんですね・・
ありがとうございます。

114MUGEN名無しさん:2011/11/12(土) 10:43:03 ID:UQkZ.Wuk
Fvarの仕組みが分る人いますか?
9999999(7桁)までは安定するという事だけわかっています。
確かにこれ以上大きくすると不安定になるけど
キャラによって狂いだす値が違うし意味が分らない
しかも安定7桁というのが10進数だし・・
fvarの上位ビットが小数点の位置情報と思ったけど違うみたいだ・・

とりあえず23bit(最大8388607)まではビット演算で使っていますが
この範囲ならビット演算でも正確な数値を返しますかね?
fvarにビット演算しない方がいいって事はないですよね?

115MUGEN名無しさん:2011/11/14(月) 00:27:41 ID:CRpzGU6Q
>>114
自己解決。
仕組みまでは分らないけどビット演算やっても問題ないね

116MUGEN名無しさん:2011/11/14(月) 03:04:03 ID:CRpzGU6Q
>>112について調べてみた
処理順は
キャラとヘルパーが全員Movetype=Iだったら↓
P1→P2→ヘルパー(早く出現したものから)
だけど、Movetype=Aが先に処理されるんだよね↓
P2(A)→ヘルパー(A)→P1(!A)→ヘルパー(!A)→ヒット判定
ヒットによって自分がMovetype=Hになるのはヒット判定処理時。
HitDefやHitOverrideによるステート移行はヒット判定処理時。
ヒットした瞬間に消えるヘルパーは
ヒット判定処理時にMoveCotnactになり、
もう一度自分に処理が回ってきた時にMoveCotnactを認識して消滅するタイプと、
ヒット判定処理時にHitdefでステート移行してそのまま消滅するタイプがある。
これであってますかね?

117MUGEN名無しさん:2011/11/14(月) 13:08:45 ID:Hnu3iuX.
処理順について細かいこというとIDの順(出現順)というよりメモリの並び順(デバッグの表示順と同じ)だった気がする
本体同士ならID順で安定だと思うけど、ヘルパーだと出入りがあるためそうとは限らない

A B C 順に生まれた三つのヘルパーがあり、左から処理しているとする(IDも左が若い
A C Bがdestroyselfすると真ん中のメモリが空き家となる
A D C その状況で生まれた新しいヘルパーDは空き家に入り込んでCより先に処理される

この場合はIDの大きいDがCより先に処理される
DがCの子だったりすると最初のフレームだけ順番が違ってくるだろうけどね

早期にmovetype=Aのヘルパーを出すとしても
>>112のように後から出たmovetype=Aのヘルパーより先に処理されるかは
一番若いアドレスのヘルパーでないと保証されないと思う
P1最速(もしくは消さないヘルパーの後)で出すか、他にヘルパーが存在しない状況で出さないと穴ができるんじゃないかな

118MUGEN名無しさん:2011/11/14(月) 22:23:34 ID:CRpzGU6Q
>>117
ありがとうございます

119MUGEN名無しさん:2011/11/19(土) 23:02:54 ID:T7BaVEXI
>>117 今更だけど
IDの若い順じゃなくて、書いてある通りユニット番号の若い順だってこと忘れてました。
開始直後であっても。それが起きる状況としては、
2P側以降であり+1P本体から一時Helperが射出されていることで、現実的には
1.開始と同時にイントロ演出などのHelperの射出→退場による空き発生
2.AI用の画面端認識の一時処理Helperなどが本体側から射出されている
という場合が考えられる、のかな。1はかなり多くても、2は少ないと思いたい。
イントロを飛ばした場合は一旦リセットされるので細かい演出が無ければほぼ穴は発生しないかな。

とにかく確認したい場合はまず、「開始直後(RoundState=0)に射出」しておいて、
定期的に新しいHelperを出して、ParentVarAddとParent,Var(xx)で
処理の順番を確認してより遅い方を消失させてしまう、といった方法なら、
時間がかかるかもしれないけど、ある程度確実に配置できるかも。

確認には本体がVarSetで指定のリセットして、
確認用のMoveType=AのHelperに(Time>0で)、本体のVarを確認してParentVarAddする。
次のMoveType=AのHelperから同様に本体のVarを確認して、!=0ならDestroySelfをする。
といった感じかな。互いに本体の認識をするだけだけど、
HelperIDは念のために別々にしておいた方が記述は面倒だけど参照に不備が出なくて済むかと。

120MUGEN名無しさん:2011/12/03(土) 00:42:40 ID:j/6ElHu2
>>119
詳しく説明していただきありがとうございます

121MUGEN名無しさん:2011/12/12(月) 03:27:14 ID:CcCdOtQM
厨忍氏のサイトにある技のステート、発生、距離を記憶する記述を参考にしてAIに組み込んだのですが、
正常に動作はしているものの
TRIED TO ACCESS NON-EXISTEN PLAYER WITH ID〜
というエラメが画面左上に流れ出しました。
変数や記述に間違いがないか確認しているのですが中々解決できず、
またPlayerIDExist(○)の記述を足したらエラメ自体は消えたものの、
今度は正常に動作せず相手の技を記憶してくれなくなりました。
どなたか解決方法を知りませんか?

122MUGEN名無しさん:2011/12/13(火) 15:42:12 ID:WUzWsfzI
記述のせてくれなきゃなんとも

123MUGEN名無しさん:2011/12/14(水) 04:22:17 ID:0E7LpZMk
>>121
自己解決しました。失礼しました

124MUGEN名無しさん:2011/12/15(木) 05:58:56 ID:reZ3E8uo
落下して何F後に地面に落ちるか計算したいのですがよく分りません。
必要な数値はPos Y , Vel Y , 1F毎に増加するVel Yの値 ・・かな?
1F毎に増加するVel Yの値はVel Yを監視しておけば分るかな。
何F後にPos Yが0になるかを計算したいです。
私が考えた式は (1F毎に増加するVel Yの値⇒VelAddY とする)
0 = PosY - (VelY + VelAddY*F) *F (Fを求めたい)
となったのですがあってますかね?

125MUGEN名無しさん:2011/12/15(木) 16:26:46 ID:reZ3E8uo
>>124
自己解決しました。
0 = PosY - (VelY + VelAddY*F) *Fではなく
0 = PosY + (VelY + VelAddY*F) *Fでした。

126MUGEN名無しさん:2011/12/23(金) 01:46:49 ID:zLj8D4MM
聞きたいんだけど
キャラ本体の作者さんにAIの制作許可もらうのってAI作り始める前に作者さんに聞きに行ってる?
AI作ってからそれを見せてこんなん作ったけど公開していいですか、って聞いてる?
前者のほうがAI作る側としては助かるけど、演出とか性能のちょっとした改変もしたいってのがあって
でも相手が海外の人だからそのへんの細かいニュアンスとか俺の英語の文章力じゃ伝えられん・・・

127MUGEN名無しさん:2011/12/25(日) 23:22:36 ID:wmc0zwyg
自分はある程度製作して、公開が実現できそうになったら連絡してる。
その際、近日公開したいと思っているということ、作者さんが作成・公開自由
という旨をおっしゃっていない限り公開して大丈夫かということ、他気になる点
(改変/調整等)を聞く感じ。
一応、必要であれば現状のAI実物をお渡しします、って付け加えてる。

公開ダメって言われたら素直に諦めます。
あと英語は俺にも無理じゃ。自分でベンキョーするか、エキサイト先生に頼むか
野生の英会話塾に頼んでくだされ。

128MUGEN名無しさん:2011/12/26(月) 01:23:25 ID:cBs9S0HU
ステージのtensionの値を判断する事は出来ますか?

129MUGEN名無しさん:2011/12/27(火) 02:53:59 ID:usaEIaM.
>>127
そっかーありがとう
やっぱある程度見せられる物は用意しといたほうがいいかもね
まあでもいきなり実物送りつけて見てくれってのもぶしつけだわな
まずはメールで理解してもらえるよう頑張るわw

130MUGEN名無しさん:2012/01/06(金) 17:19:14 ID:c2s/zTf6
すみません、初めてAIを製作していまして、
飛び道具を感知してグレイズするために、まず
「試合開始直後の敵ヘルパー数」を変数に記憶させている(つもり)
なのですが上手くいきません。
何が問題でしょうか。

;敵ヘルパー式飛び道具感知
[State -2,ヘルパー式飛び道具感知用]
type = VarSet
trigger1=RoundState=2
trigger1 = GameTime <= 1
var(57) = EnemyNear,NumHelper

131MUGEN名無しさん:2012/01/07(土) 02:36:55 ID:qjrBKcrA
>130
GametimeってRoundState=2からじゃなくて
RoundState=1から進んでるから条件に入らないからかな。
var(57)=0のときのみ代入するとかそっちのほうが分かりやすいと思うよ。

間違ってたらごめんね。

132MUGEN名無しさん:2012/01/07(土) 03:20:32 ID:nMaqr.iM
>>130
GameTimeは「mugenを起動してからの試合画面のフレーム数」なので、
試合開始前だけでなく、前の試合も含めたGameTimeになってるはずです。
開始時のヘルパーの数を安定して取得したいなら、>>131の方も言ってるように、
Trigger1=RoundState=2&&Var(57)=0;とかいう感じで代入する方が分かりやすいと思う。

ただ開始時のヘルパー数を確認するだけじゃ「エフェクト」か「飛び道具」か判別つかないから厳しいような。
それこそ相手のヘルパーをPlayerIDで参照して確認するとかそういう技術と併用しないと…

一番簡易的な飛び道具認識としては
「P2Movetype!=A&&InGuardDist(相手が攻撃でない+ガード可能範囲=飛び道具かも)」っていうのがありますよ。
あとは難しいけどAI用にヘルパーを出してInGuardDistの位置と相手の位置を確かめて判断するって方法とか。

133130:2012/01/07(土) 10:00:07 ID:bsP51QvM
>>131,>>132
お二方、ありがとうございます。
なるほど…GameTimeはそういうものだったんですか。
まさかデバッグで1番最初に出ている奴だったとは…この海のry

・「var(57)=0のときのみ代入」
この方法で無事に記憶させることが出来ました。
ありがとうございます!

・「エフェクト」か「飛び道具」か判別つかないから厳しい
エフェクトはExplodで作るもの!!(キリッ

・「P2Movetype!=A&&InGuardDist」
そのアイデア頂きました!

とりあえずはイメージどおりに動いてくれているので、
更なる強化が必要になったらリダイレクトな方向に作ってみます。

これで、
「キャラをDLして魅力に気付き、AIを作ろうと思ったらすでにキャラ対で脱落していた
な、何を言っているかry」
という悔しさを晴らすことが出来ます。
ありがとうございました!

134MUGEN名無しさん:2012/01/08(日) 01:42:33 ID:.WxKxK1Q
>>132
GameTimeは起動の時間を表してたのか、勘違いしてた。
補足含めて色々ありがとう。

135MUGEN名無しさん:2012/01/09(月) 19:21:12 ID:bYWWkTjk
自分は飛び道具?ってやつはenemy,hitdefattrとInguarddistでやってるなぁ
それと予め自分の90ドットくらい前に常駐helper置いといて

trigger=enemy,movetype=A
trigger=!enemy,hitdeattr=SCA(飛び道具はhelper等にhitdefが付いて本体には無い)
trigger=!inguarddist
trigger=numhelper(#####)
trigger=helper(#####),inguarddist

って感じにしてる。これなら近すぎる飛び道具に反応しちゃう事もないし
Explodとかで判別すると飛び道具見てから飛び込むけど、出る前に既に飛び込んでる、
ってのが個人的に理想だから
これにその他変数等入れて精度とか判別手段増やしてる

正直欠陥だらけなんだけど、意外なほど機能してる現状
まぁ一番はやっぱ相手のhelper情報取得しちゃう事なんだけどね

136MUGEN名無しさん:2012/01/09(月) 20:26:18 ID:tYIA7OOE
自分は>>132の最後に言ってたHelperのInGuardDist位置と相手の位置を比べるのを使ってる。
自分の前の+50,100,150,200のInGuardDistをHelperのVarに代入して、
50のInGuardDistが真で100が偽+相手が100より遠い = 相手本体のGuardDist以外がある?
みたいな感じに、100真・150偽+150より遠い、150真・200偽+200より遠いって並べてる。

ただこの場合「タッグ戦で挟まれている場合」も、反応しちゃうし、
相変わらず打撃判定とかの飛び道具やら分身やらは認識できないんだけど。

137MUGEN名無しさん:2012/01/13(金) 00:22:02 ID:GQSUZEZw
>>136
それってヘルパー4つ使ってるの?

138MUGEN名無しさん:2012/01/15(日) 00:28:44 ID:n88hnp4E
>>137
一つだよ。HelperをPosSetとTurnで本体に座標と向きを合せて、
PosAddでX=50した直ぐ下でInGuardDistをVarに代入×4回。
本体からは、Helper(xx),Var(x1)=x&&Helper(xx),Var(x2)!=xという感じで判断。
(実際の記述はbit演算なので、一つのVarで済ませてるけどイメージはそれと一緒。)

Vel系は「そのユニット(本体/ヘルパー両方)の処理の終わった時点」で座標が動くけど、
Pos系は「その処理が行われた時点」で内部的な座標が動いてる。んでもって、
InGuardDistは「現座標で相手のGuard.Dist(Attack.Dist)内にいるかどうか」の情報なので、
最中にPosが動いていればその動いた先でのInGuardDistの判定を返してくれるのよ。
なので、Helperは一つで十分。

問題としてHelperをMovetype=A(+Attack.Dist=0)にしないと情報が常時1F遅れる。
(mugenの仕様でMovetype=Aだと処理が先になる→本体がMovetype!=Aの時はそのフレームでのInGuardDistを教えてくれる。
そういう情報は1F遅れても大差無いので、自分は気にせずMoveType=Iで処理させてるけど。)

139MUGEN名無しさん:2012/01/15(日) 04:21:34 ID:OjXEphOs
>>138
ありがとうm(_ _)m
1Fで何回でも移動できたのか・・・
最後のPosSet,PosAddしか見ないのかと勘違いしていた
つまり、PosAdd x=1(-1)の命令を書きまくったら
飛び道具の動きに合わせてヘルパーを移動させる事もできるね(Guard.Dist(Attack.Dist)の数値分離れるけど)
Projの監視は諦めていたけどXの位置と速度はある程度分りそう
古いゲームキャラとかはProjをよく使ったりするから対策しておきたかった
自分が作っているAIのキャラは近づけないと何もできないから・・・
いい情報、感謝。

140MUGEN名無しさん:2012/01/17(火) 22:49:44 ID:HHH2xls6
>>139
実際にやるとしたらPossetでX=170に動かして、var(x1),var(x2)を0にしてから
[Statedef xx020]
type=s

[state xx020, posadd]
type = posadd
trigger1 = 1
x = -1

[state xx020, posadd]
type = varset
Trigger1 = InGuardDist
trigger1 = var(x1) = 0 && var(x2) = 0
var(x1) = floor(Pos X)

[state xx020, posadd]
type = varset
Trigger1 = !InGuardDist
trigger1 = var(x1) && var(x2) = 0
var(x2) = floor(Pos X)

[state xx020, changestate loop];ループ処理
type = changestate
trigger1 = pos X > -170 ;画面の反対端-10に到達していない
value = xx020

[state xx020, changestate];ループ処理後
type = changestate
trigger1 = 1
value = xx000 ;戻す
みたいなループ記述で処理させないと記述量が大変になるけど。
見比べたい場合は前Fのx1,x2は別のvarへ移しておく感じね。

あとProjについて補足ですが、「Projを射出している最中は本体からのAttackDistが出ない」みたいです。
InGuardDistの範囲を監視して、移動方向とかを認識する場合、
Helperの飛び道具だと相手本体からのAttackDistが重なるので調べ切れない部分が出ますが、
Projの飛び道具だと基本的にそれが無くなるので、比較的調査しやすいかも。

141MUGEN名無しさん:2012/01/18(水) 18:59:46 ID:iORmuHpQ
>>140
なるほど、ありがとうございます。(わざわざ例を書いてくれて・・)
changestateで1F何回でもループできるの初めて知った・・
これで自分のAIの容量がだいぶ減らす事が出来そうです。
やっぱHelperやProjに関してはまだまだ初心者だ・・

Helperの飛び道具監視はPlayerIDでやってます。
ちょっと気になる点がありますが、
「Projを射出している最中は本体からのAttackDistが出ない」
というのはMovetype=Aになっていない場合ですかね?
Movetype=AのステートでProj出す時はAttackDist出ますよね?

142MUGEN名無しさん:2012/01/18(水) 23:25:43 ID:hI8DKtHo
>>141
Proj射出中の本体のAttack.Dist>MoveType=Aでも出ないんです。
Proj自体からAttack.Distが出てるので普通困ることはないのですが、
Projを飛び越したりくぐったりした後、Projが消える前に相手の攻撃に対してレバーを後ろに倒すと、
通常ならガードする範囲でも、ガードモーションにならず、後ろ歩きになってしまうんですよ。
(Ctrl=1でCommand="holdback"の状態なら、ガードステートで待機してなくても、攻撃を食らった際にガードしますけど。)

ちなみにステートのループについては「2500回」が限度で、
それ以上のChangeState処理をするとエラーでMUGENが落ちちゃいます。
( 1つの本体orヘルパーが、1フレーム中に、2500回です。
複数のヘルパーが2000回以上処理してても、一つのキャラで2500回を超えてないと落ちないはず。 )
ループ処理のミス以外でループ上限に引っかかってMUGENが落ちるのは余程ループさせてないとなりませんけど。

143MUGEN名無しさん:2012/01/19(木) 00:21:44 ID:syi1YjrU
>>140
>>135の人間だけど、自分もすっげーべんきょーになった
やっぱある程度できて面倒になったから、ってのはダメだな
試行錯誤に終わりはない。上に上に目標立てねば
正直未だに1F内でそういったことが順番に行われているっていうイメージが
掴めなくて、なかなか理解しきれんのだけど、頑張って見よう。うん

>>141
>>142の人も言ってるけど、基本的に飛び道具ってのはProjないしHelperにHitdef
およびAttack.distがついて、本体からはMovetypeに関わらずなにも出ていない…はず

144MUGEN名無しさん:2012/01/19(木) 02:21:26 ID:B71Qe7t6
>>142
試しにテストしてみたけど
どうやら新MugenだとAttack.Distが出るみたいです。
旧MugenだとAttack.Distは出ませんでした。

2500回ですね。分りました。
改めて処理速度の速さに驚いた。

145MUGEN名無しさん:2012/01/19(木) 03:05:04 ID:IKdgut2o
>>144
あー新Mugenでは確かめてませんでした。自分、旧mugenしか使ってないので;
新mugenではProj出してる間でも出てるようになってるのかぁ…。

146MUGEN名無しさん:2012/01/24(火) 00:43:16 ID:uMwmBXZ2
飛び道具どころか出の早い通常攻撃もガードしてくれないぜ!www

それはさておき、
いつの間にか空中に立つバグが発生するようになってしまいましたorz
地面にめり込んだりもします。グギギ…

AIを書いてるステートのstatetypeは調べたんですが…
何か心当たりのある方は御教授ください。

147MUGEN名無しさん:2012/01/24(火) 11:45:13 ID:QOn/U3S6
>>146
>空中立ち
空中立ちの主な原因はStateType!=A/=Aの間違いだけど、
空中立ち+めり込みとなるとガードステート記述の間違いかも。
ガード動作から空中で立ったり、めり込んだりしてる場合はそれです。
ガードの中下段切り替え用に、State,140や120からStatetype=A状態からでも
StateType=CやSへ切り替えたり、地上ガードにChangeStateするようになっちゃってると両方起こる。
(空中で地上ガード→空中立ち状態 落下中に地上ガード→落下速度はそのままで地面より下へめり込む)
昔やらかしたそれくらいしか心当たりないんで、それ以外は分からないけど。

>出の早い〜
動作の確率が高すぎて刺さっちゃってるんじゃないかな。
相手の動作が遅い場合は反対に差し込めてるけど、相手の方が早いと食らってるとか。
動作に!InGuardDist挟んで動作を制限するとガードしやすくなるかも。ただし完全制限はオススメできないんで
TriggerAll = !InGuardDist || Random < 200 ;とかみたいにある程度の確率で動作もする感じで。

148146:2012/01/26(木) 01:40:02 ID:xRfW9x4c
>>147
情報ありがとうございます。
コマ送りで調べてみたところ、まさしくガードステートでした。
無事バグを消すことに成功しました。

出の早い技についてですが、確率を下げたところ、上手い具合になってきました。
が、一番防ぎたい技は上手く防げない…
何でかと思ってその技のCNSを見たら、
飛び道具でしたよwww エフェクトかと思ってたよ、チクショウww

ここの所話されている対飛び道具記述で頑張ってみます。
ありがとうございました。

149MUGEN名無しさん:2012/02/11(土) 13:12:52 ID:kKEqmlvI
age

150MUGEN名無しさん:2012/02/13(月) 01:18:20 ID:breT3G6.
最近作り始めて少し?てなった記述があったので、少し質問させて下さい

上述の対飛び道具認識記述を自分でも理解したいと思い、他人様の記述を
参考にしようと覗いてみたところ (var(58)/1000)%10 なる記述が
ございました

var(58)/1000 がvar(58)の値を1000で割ってるってのはわかるのですが、
この後ろの%10てのが何を意味するのかよく分からないのです
普段は何か分からなかったら各種trigger、ステコン記述の解説サイト様
で調べるのですが、この記述に関してはどうも無いらしく…

その他記述が何を意味し、何を行っているかはギリギリついて行けるの
ですが、この部分だけが全く分からない
色んな方の記述やAIを見る限りかなり常識的な記述臭いのですが…
ご存知の方がいらっしゃいましたら、どうぞお願い申し上げます

151MUGEN名無しさん:2012/02/13(月) 05:17:36 ID:8liuWYPk
>>150
「xx%zz」は「xxをzzで割った余り」です。余剰の計算ですね。
例えば「7%3」なら7/3は2余り1なので「1」の計算になります。
xx%1なら常に0、xx%10とすれば必ず1桁目だけを算出することができるわけです。

AIでの使い方としては「Varに対して複数の情報を入れる」場合に使われたりします。
Varは -2147483648 〜 2147483647 (32bit)までの数値を扱えるのですが、
10とか2〜3桁程度の数値を入れると「xxxxxx150」のように高い桁数に空きができてしまうので、
その空きの部分に数値を入れることで1つのVarへ複数の情報を入れているのです。
例えば3桁までの数値で「150」と「549」と「345」を1つのVarに入れれば「345549150」となります。
そこから中央の「549」を取り出す際「Floor(Var(xx)/1000)%1000」という数式を用いるわけです。
(下の桁はまず割り算で小数にしてFloor(小数切り捨て)で消し、上の桁は%(余剰)で消すという処理。
代入する際も、同じような手順で決めた桁へ代入します。※Floorをしないとエラーで落ちるので注意。)

ちなみに、こうした処理はVarの共有とか圧縮とか呼ばれてますが、
bit演算子「 & 」「 | 」を使うことでbit毎に管理する共有方式もあります。

152150:2012/02/13(月) 15:28:20 ID:breT3G6.
>>151
マジで感謝です!
そうか、割った余りだったんですね

AIでの使い方の実例や、分かりやすい記述内容の解体等至れり尽くせり
で本当に助かりました
よーし、さっそく作るぞー

153MUGEN名無しさん:2012/02/23(木) 10:56:56 ID:Hu5NREEI
AIの記述をcmdファイルに追記せず別ファイルでつくる形にしたいのですが
うまくいきません。defファイルに記述する読み込みの順番やファイル分割のルールなどはあるのでしょうか?

154MUGEN名無しさん:2012/02/24(金) 11:51:56 ID:UxfbxS9M
AI作成初めたのですが、まるで動かせないので少しご教授願います…

⑨氏のメルブラAA仕様のキャラのAIを作ろうとしているのですが…
AI講座の通りに技をstate -3に技を記述して行動させようとしても歩きとしゃがみしかしません…
omakeの方には好きなように行動を記述するだけ、とあるのですがまるで出来ません…
こんなことも分からないなら辞めた方が良いのでしょうか…?

155MUGEN名無しさん:2012/02/24(金) 16:10:37 ID:1JN1klTc
>>154
「諦めんなよ!何でそこで諦めんだよ!!」ってテニスの人が言ってました。

俺もまだ駆け出しの身ですが、分かる範囲で助言を。
で、とりあえず⑨氏のキャラとそのomakeファイルをDLしてみました。

なるほど、歩きとしゃがみしかしないのは、omakeファイルのデフォルトの状態ですね。
ということは、>>154さんが書き込んだ記述は読み込まれていないわけです。

よくあるパターンとして、
・AIフラグが入っていない(間違えて人操作用の記述になっている)
・[State -3 のような記述ミス
・そもそもtriggerを満たしていない
・defファイルにAIを記述しているファイルを書いていない
なんてのが自分にはありました。
俺に挙げられるのはその位です。
これで駄目ならベテランの皆さん、よろしくお願いしますm(_ _)m

156154:2012/02/25(土) 16:08:04 ID:JGE/ySw2
むー…色々確認してみましたが、やはり駄目です。
一朝一夕じゃあやっぱり無理ですねぇ。難しい…

157MUGEN名無しさん:2012/02/26(日) 00:20:11 ID:gscTypeg
AI作成をちょっとしかしたことない人だけど手助け出来れば。

まず動くかシンプルな記述をさせるのが手かなぁ。
遠距離で通常技ぶんぶん振り回せることから始めてみるとか。
これなら記述少なくて内容確認しやすいしね。

記述ミスがある可能性があるからもう一度作り直すって方法もあるよ。
作って試してみると何故か動かないことがあって打ち直してみると動くってこともあったね。

158MUGEN名無しさん:2012/02/26(日) 06:46:47 ID:EkcJPmgI
>>153
cmd=(コマンド、分割できない)
cns=(基本設定が書かれているファイル)
st 優先度高い順
stcommon優先度低い
同じstatedefは分割できない。複数ある場合は優先度が高いものしか見ない

>>154
AI用のファイルならdefの記述がおかしいのではないかと思う。
そのAI用ファイルよりも優先度の高いファイルに
statedef -3の記述があったら読み込まれない。

159MUGEN名無しさん:2012/02/29(水) 22:37:26 ID:kOogFgek
Defの記述に間違いないなら
とりあえず技をtrigger1=1で発動させるようにしてそれでダメなら
動かない原因はそれより前のChangeStateが常時作動しているか
記述ミスかその技のファイルを読み込んでいないか かな
技を発動させる条件の記述が正しくても
それより前や後の記述が間違えていれば(主にラベルのミスで他にも影響する)
技が出なかったりする。
(Statedef -3 にChangeState書くとそれが実行された瞬間(常時作動ならずっと)
それ以降の記述は(Statedef -2やstatedef -1も)読まない)
まあ、まずは何が原因で動かないか確かめるために[Statedef -3]内の記述を一時外して
技の命令だけ書いてみる事をお勧めしますよ。
それで動いたらほかの記述が原因で動かないって事が分るから
少しずつ外した記述を戻していくと、どの記述が原因かすぐ分る。

160nzunazu:2012/03/08(木) 16:49:04 ID:lEpBbsnI
悪咲氏のキャラのAIを作ろうと思っているのですが、
氏と連絡が取れないので作ることはできませんか?

161MUGEN名無しさん:2012/03/08(木) 18:44:59 ID:kO5FUVQc
悪咲氏キャラは性能改変がなければ勝手にAI作って良かったはず

162nzunazu:2012/03/08(木) 19:32:49 ID:lEpBbsnI
>>161
ボイスパッチや、カットインを入れたsffは公開してもいいのでしょうか?

163MUGEN名無しさん:2012/03/08(木) 20:41:48 ID:kO5FUVQc
その手のパッチについては特に言及がなかったと記憶してるので答え辛いのだけど、
おそらくAIと同様に「良識の範囲内」ってことで性能改変やイメージを壊すようなネタとかなければ大丈夫かと
カットインは明らかに絵面が変わる分、ダメという人もいるかもわからんけど
心配だったら人の多いスレで聞いてみてね

164nzunazu:2012/03/08(木) 22:00:34 ID:lEpBbsnI
今、AIを作っているんですが、トリガーでP2BodyDist Xなどの
相手の距離を記述するものってありますよね。
その相手の距離を調べるにはどうしたらいいですか?
それともう二つ、一つ目はcnsにAI記述を書き込む順でコンボは変わりますか?
二つ目は、私の作っているAIがなかなかうまくガードしないのですが、
どう記述すればちゃんとガードしてくれますか?
教えてください。お願いします。

165MUGEN名無しさん:2012/03/09(金) 00:05:56 ID:cERap3AY
質問の意味がよくわからない…
・直近の相手との距離だったらp2bodydist xでいいじゃない?
 式にするなら(enemy,pos x-pos x)*facingってな感じ
・cnsは上から読み込むので同じ条件なら上に書いた記述が優先されるけど、そういう質問?
・ガードステートにAI用の記述がなくて即ガード解除してるとか?
 質問がザックリしすぎだよう

とりあえずステコン・トリガー一覧や和訳KFMとか参照しながら既存のAIでシンプルなもの(デフォAIとか)の記述を読んだり改造するのがいいんじゃない?

166MUGEN名無しさん:2012/03/09(金) 00:22:36 ID:cERap3AY
p2bodydist xだとconstで設定されるキャラ幅の端からの距離になるから
中心軸の距離ならp2dist xな
(enemy,pos x-pos x)*facingはenemyに対する軸間距離ね

167MUGEN名無しさん:2012/03/09(金) 04:06:13 ID:JKDXtYKQ
P2BodyDist Xなどの距離を調べてみたいならデバッグモードを活用かな。
試合中D+Ctrlで出来るからトレーニングモードで動かしてみるといい。

168MUGEN名無しさん:2012/03/09(金) 04:07:30 ID:JKDXtYKQ
ちょっと記述ミス、Ctrl+Dのほうが正しいね。

169MUGEN名無しさん:2012/06/21(木) 00:18:08 ID:v2SasgsA
AIに関して・・・なのかどうか分からないのですが、ちょっと気になることがありまして、
よろしければどうかご意見下さい
内容は「一部のキャラクターのAI記述を入れるとイントロを飛ばせなくなる」
というものです
大きな実害はないのですが、毎回イントロを強制されるのは自分としても
AIを使っていただける側にもちょっとウザイかなと・・・

これはAI側の記述の問題なのでしょうか?
また、原因は何なのでしょうか?

170MUGEN名無しさん:2012/06/22(金) 04:32:07 ID:KHmfV8yo
>>169
私の方でもウォッチモードでイントロを飛ばせるキャラと飛ばせないキャラがいるので
キャラを調べたらHelperを出しているキャラのみ飛ばせて、
そのキャラのHelperが無い状態だと飛ばせないみたいです。
試しに一瞬だけHelperを出してもHelperがある時だけ飛ばせて、消えた後は飛ばせないようです。

ただAIを記述するとき本体にあったHelperを消していたなら、それが原因だと思いますが、
Helperなどをいじっていない場合はわかりません。
試しに適当なHelperを射出してイントロを飛ばせるか調べてみてはどうでしょうか。

171MUGEN名無しさん:2012/06/22(金) 20:20:41 ID:QdIcK2Z2
>>169
あくまで希望なんで笑い飛ばして欲しいんだけど
開幕時にヘルパー放出して、画面端までの距離計測してるAIだと
イントロ飛ばされるとそのヘルパーが出ない恐れがあるので
挙動がヘンになるから、出来るならイントロは飛ばせても飛ばさないで欲しかったり

172MUGEN名無しさん:2012/06/26(火) 20:57:50 ID:92oFww7s
>>170
なるほど、ありがとうございます
早速試してみたところ、無事イントロを飛ばすことができました

>>171
ああだから…
たまに開幕と同時にガードモーション取ったり、開始後数フレーム間だけ
挙動がおかしくなったりしたのかー

173MUGEN名無しさん:2012/06/27(水) 19:57:52 ID:PshatL9Y
>>172
いや、数フレームだけ挙動がおかしいのはMUGENのデフォAIというか
ランダム入力が動作してて
AIが起動してないだけよ
必用なヘルパー消えちゃっててもAIの動きには大きな変化はない
中下段やたらくらったり、飛び道具ガードあんまりしなくなったり、壁コンボ失敗する程度

174MUGEN名無しさん:2012/06/30(土) 12:01:12 ID:C.ZvfAeM
AIを作成中なのですが、ちょっと困ったことが起きたので質問させてください
というのも、ダッシュの制御がうまくいかなくて・・・

厨忍さんのQ&A等にあるようにstate!=100をトリガーに組み込み、
AssertSpecial NoWalk もダッシュステートに書かれています

それでもなぜか行動が1枚目のアニメで止まってしまう現象が続いています
このキャラはtrigger1=1で移動が始まらず、AnimElemTime>で加速がつくため
1枚目のアニメでその場にストップしてしまう感じです

停止条件にもAnimelemtime>は加えているのですが、一向に改善の気配が
みられず困り果てています
原因に心当たりのある方、どうかご教授願います

175MUGEN名無しさん:2012/07/02(月) 15:08:28 ID:O8qWGaNY
ctrlはどうなん

176MUGEN名無しさん:2012/07/02(月) 15:09:21 ID:O8qWGaNY
それとダッシュ解除条件とか

177MUGEN名無しさん:2012/07/04(水) 00:01:50 ID:Vrqt5PoA
174

178MUGEN名無しさん:2012/07/04(水) 00:10:14 ID:Vrqt5PoA
失礼、ミスです。
自分も製作初めて間もないもので、明確な原因とその理由を説明する
ことはできませんが…
しっかり記述しているのにダッシュが不自然。
経験的には[statedef 100]の部分に Ctrl=1 なる記述が含まれるとき
アニメーションがおかしくなる事が多くなるよう感じられます。
この記述、実はmugen本体のcommon1.cnsには含まれておりません。
先に述べたとおり理由はわかりませんが、一旦チェックしてみて
もしあったらその記述を削除、もしくはCtrl=0に変更してみてはいかがでしょうか?

179MUGEN名無しさん:2012/07/12(木) 01:31:04 ID:59VrLN8Y
>>175,176,178
無事解決いたしました!
どうもありがとうございます。
調べた結果確かにctrl=1という記述があり、それをctrl=0にしてみたら
変なモーションはしなくなるようになりました。

180MUGEN名無しさん:2012/07/22(日) 21:23:07 ID:U7ErgTps
空中コンボさせるのに、pos y+const(size.mid.pos.y)の比較でもトリガーにしようかと思っていたのですが、
手持ちのキャラを調べてみるとドロウィン氏の北斗キャラとかはmid.posが設定されてないみたいなんですよね…
そこで質問なんですが、pos y-enemynear,pos yとp2bodydist yの平均を取れば大体中心になりますかね?
思いついただけなんで、なんか穴がありそうなんですが、要は空中にいる相手の中心位置を取りたいのです。

181MUGEN名無しさん:2012/07/23(月) 05:04:17 ID:T3tfqd3g
>>190
P2Bodydist YとP2Dist Yは同一値で、ついでにEnemyNear,Pos Y-Pos YでP2Dist Yとほぼ同一です。
(Pos Y-EnemyNear,Pos Yだと、P2Dist Yとは+-反対の数値を返すので注意してください。)
相手の中心位置は基本P2Dist Y+EnemyNear,Const(Size.Mid.Pos.Y)しかないですね。
確かに設定されてないと中心位置にはなりませんけど、元々中心から+-10くらいは判定が出てて
多少判定より狭く条件をとっておけば多少ズレがあっても当たるはずですし、
よほど細かい調整が必要なものでなければ不具合は出ないと思います。
ただ速度計算しないと空中の相手へ細かく当てるってこと自体できませんが。

欲を言えば、Size.Mid.Posなどはステコンでも使われてる(実際には使われてないけど)必須数値なので
そうした数値が未設定のキャラは不具合報告をするべきじゃないかなと思います。

182180:2012/07/24(火) 19:38:06 ID:VfkOScMQ
>>181
色々varに入れて実験してみたらまさにおっしゃる通りで、自分が如何にトンチンカンなことを書いたかが分かりましたw
ついでに、とれーにんぐのhead.posとmid.posを表示する機能を使ってみたんですが、mid.pos設定の無いキャラでもある程度は認識するみたいです。
あと、空中くらいに関しては、mid.pos.yよりもくらい判定が低いキャラ(某凄い漢とか)がいることもわかりました。
ということで、p2bodydist y+enemynear,const(size.head.pos.y)/2-const(size.head.pos.y)/2
で大体の中心同士になるようなので(自キャラのhead.posは抜いた方が分かりやすいかも?)、とりあえずこれで、いろいろ試そうと思います。
ありがとうございました。

183MUGEN名無しさん:2012/08/26(日) 20:12:40 ID:RYfrxPZA
AIにダウン復帰させるのってどうすればいいんでしょうか?
ダウン時にchangestateでtime指定とかですかね?

184MUGEN名無しさん:2013/02/12(火) 19:08:11 ID:4rmkyJv.
ガードしないAIを作りたいのですが、MUGEN側のCPUが勝手にガードするのって何とかなりませんか?
assertspecialでflag3つをノーガード系にしても効果無しでした…
技みたいにプレイヤー操作で120に飛ぶ記述があれば制御できそうなんですが…

185MUGEN名無しさん:2013/02/15(金) 18:59:32 ID:RZhw8BvA
ガードできるステート(立ち、屈み、歩きなど)をAI用に別個用意して、ctrl=0にしておけばいいんじゃない?

186MUGEN名無しさん:2013/02/24(日) 23:33:33 ID:rLKFPWrc
今更コメントだけど多分コモン弄らないと出来ないと思う。
デフォルトでAI搭載されてたキャラいたのでそれを改良しようと思ってたら
それらしき記述があって調べてみたらガードすると確率で強制的にガード終了モーションに飛んだっけな。
全キャラに使えるかどうか分からないけどそのあたりを弄ってみては。

187MUGEN名無しさん:2013/03/06(水) 10:57:23 ID:9iRQjFJU
飛び道具(ヘルパー)監視ヘルパーを作ろうと思うのですが、
playerIDってどのぐらいの幅で検出したらいいんでしょう?
P1が56でP2が57、タッグだとP4が59だとして、最大ヘルパー数が64だから56〜123?

188MUGEN名無しさん:2013/03/07(木) 12:01:57 ID:X.TQ5oN.
毎Fヘルパー出して最新ID取る形なら、64さかのぼれば大丈夫なんじゃない?

189MUGEN名無しさん:2013/03/07(木) 18:38:18 ID:p5S8bjLY
>>188
あ、ほんとだw
アホな質問ですいませんでした…

190MUGEN名無しさん:2013/03/09(土) 02:24:10 ID:eVZ9KiNI
AIのガードのノックバック直後の挙動がおかしくなってしまいます。
InGuarddistに反応してガードモーションを取る所までは問題無いのですが、
151,153ステートの直後だと120ステートでTime=0のまま硬直、120ステートを繰り返す、130ステートから120ステートに、120ステートから0や12ステートに移行する等、変な動きをしてしまいます。
151,153ステートのHitoverをちゃんと介せば正常に動作するようなのですが・・・。
また、ガードモーションを取った直後であっても、InGuarddistぎりぎりの所だと同じ挙動をしてしまうみたいです。

191MUGEN名無しさん:2013/04/15(月) 21:49:48 ID:JB7Z.uOI
ttp://ikima.web.fc2.com/mugen/mugen1/ai.html

AI公開しました(遅)

192MUGEN名無しさん:2013/04/15(月) 22:49:19 ID:iay8FU0o
>>191
乙です。

193MUGEN名無しさん:2013/05/05(日) 03:50:12 ID:I7QaZG5o
AI作ろうとしたら本体の記述の圧縮できそうなとこやVarひとつで全てをまとまられるとか
いろいろ考え出して未だにキャラのAI作成がすすみません><
その本体の改良すら手をつけないっていうこの体たらくに一言お願いします・・・

194MUGEN名無しさん:2013/05/06(月) 11:30:02 ID:gB49cGoY
何という俺
凝った学習システム作ろうと計画してたら手が止まり、そのままMUGENそのものに飽きた…

195MUGEN名無しさん:2013/05/06(月) 23:38:35 ID:VMYejc/c
まずワンパでもいいからいくつか行動させることからやったらどうだろ?
あれこれやろうと思うと難易度高すぎて出来ないこと多いし。

とAI作る→飽きるの繰り返しで一通り作るのに一年以上かかって作成者が言ってみる。

196MUGEN名無しさん:2013/05/31(金) 08:56:21 ID:j5TfWe42
できもせんのに高望みはなにもできないひとの典型ってホントに身に染みる
とりあえず差し込み→繋ぎ→沖攻め→の無限ループは出来ました()
inguarddistに頼りきらないガード使用状況を作りたいのだけれどやっぱりそのガードすべき状況を知るにはヘルパーでinguarddistか調べたりとかって
結局月並みなガード仕様にしかできねえ

197MUGEN名無しさん:2013/07/17(水) 09:45:56 ID:xC/D4zks
>できもせんのに高望みはなにもできないひとの典型ってホントに身に染みる
ぐぬぬ…
そうなんだよなぁ、いざチョーツヨイAI作ろうと意気込んでも全然AIのつくり方わからんくて
結局妄想は妄想でしかないって痛感しつつ
ジャギにバニコンをやらせようと日々がんばってます
Ts氏のジャギでバニ当てたあとブーストやらせるのってどうやるんですかおしえてえろいひと

198197:2013/07/17(水) 09:54:12 ID:xC/D4zks
>>197ですが
自己解決しましたごめんなさい


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板