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

AI製作関係スレ その2

20MUGEN名無しさん:2010/10/10(日) 16:51:09 ID:Uz9Qr8ng
ラウンド開始時にイントロをとばしたことをAIに認識させる方法ってありますか?

21MUGEN名無しさん:2010/10/11(月) 05:48:21 ID:6DdVFmvM
イントロを飛ばすとヘルパーやExplodなどが一度消えることを利用して
RoundState < 2で見えないよう(Scale=0,0)にExplodを出し
RoundState = 2にそのExplodがあるかを確認すればできるんじゃないかな。
ただNumExplod条件はID指定のないRemoveExplodで消えるのでRoundState=2で
NumExplodを確認してVarに記録し最後まで保持するのが確実かと。

22MUGEN名無しさん:2010/10/11(月) 11:05:26 ID:isDWLwKQ
>>21
返答ありがとうございます。
早速やってみようと思います。

23MUGEN名無しさん:2010/10/17(日) 17:04:37 ID:YGSiMEe.
てす

24MUGEN名無しさん:2010/10/17(日) 17:16:06 ID:YGSiMEe.
Don Dorago氏のギースのレベルを8に出来ません。
どうしても4ぐらいにしかなりません。
付属のリドミも英語ばっかりで、何て書いてあるかわかりません。
誰かやり方を教えて下さい。

25MUGEN名無しさん:2010/10/17(日) 21:17:58 ID:kLNWriMw
Setting.cnsで弄れた気がする
「AIlevel」とか書いてあると思うよ
見つからなかったら検索すればよろし
俺はタクマしかもってないんだが、たぶんギースもそうだろ

26MUGEN名無しさん:2010/10/17(日) 22:36:28 ID:YGSiMEe.
>>25
そこはわかってるんだけど、やはり4までしかあがらない、それ以上あげたらバグる。
聞くところによると、対人用と対AI用の二種があるらしいが、もしそうなら切り替えるにはどうすればいい?

27MUGEN名無しさん:2010/10/18(月) 12:09:19 ID:bx5hI6dU
最近の更新でレベルは4段階になったんだよ
対人用云々はAIレベルより下にある"hardcore mode"とかじゃないの?
AIというより性能自体が変化するんだと思うけど
もしくは、6ボタン4ボタンの操作それぞれに対応したcnsをレベルが二つあると誤解してるとか…ねーな

あとスレチなんで、そういう質問は他所でやるほうが良いと思うよ

28MUGEN名無しさん:2010/10/18(月) 13:28:47 ID:CL3EsEnE
>>27
そーなのか、でも最大レベルにしては弱いような。(JIN氏制作ギース(斑鳩氏製AI)にストレート負け)
ここがスレ違ならどこのスレですればいい?

29MUGEN名無しさん:2010/10/18(月) 18:05:25 ID:XYzVwGqI
ここはAI製作関係スレなんだからニコMUGENスレとかでいいんじゃないの?

30MUGEN名無しさん:2010/10/22(金) 17:48:57 ID:mcclLe1I
AI発動フラグにTrigger○ =RoundState = 2
と記述して戦闘開始後にAIを強制発動させようとしたのですが、
キャラが分身してしまいます。
これを直すにはどうしたらいいでしょうか。
ちなみにヘルパー式AIを利用しています。

31MUGEN名無しさん:2010/10/22(金) 21:42:14 ID:TjPivycU
triggerall=roundstate=2
で、
AI用コマンドの最後のtriggerにtrigger○=1をつけると強制発動するよ

それしか方法がわからないからダメだったらごめん

32MUGEN名無しさん:2010/10/22(金) 21:45:09 ID:8TnGsvaE
trigger○=!ishelperを追加すればおk。
○にはroundstate=2と同じ数を入れてね。

33MUGEN名無しさん:2010/10/23(土) 10:20:58 ID:oZY39U7s
32>>
実行してみたら分身することがなくなりました。
ありがとうございます
31>>
の方もご協力してくれてありがとうございます。

34MUGEN名無しさん:2010/10/24(日) 19:40:15 ID:pm3dOuic
タッグ時にキャラがまともに動かないのだがどうしたらいいのだろうか。
あとタッグ対策の記述があったら教えてほしいです。

35MUGEN名無しさん:2010/10/24(日) 20:35:52 ID:uZ6Bo2wQ
おそらくマトモに動かないのは、相手の死体に反応していることが大半。
色んなAIをおとして見て「タッグ時の生死判別」などの記述がある
AIパッチを参考にするといいと思う。
たいていは、AI起動スイッチのそばなどAI記述の最初の方に書いてある。

あと、相手の行動を参照するトリガーにある
P2MoveType / P2StateType
などの記述を
EnemyNear(x),Movetype / EnemyNear(x),StateType
などに置き換える必要がある。
xは生死判別に使用した変数を当てはめることが多い。

いじょ

36MUGEN名無しさん:2010/10/24(日) 20:38:40 ID:HIEhknw6
p2〜は死体を勝手に無視してくれなかったっけ?
死体に反応するのはenemynearだけだった気がする。

37MUGEN名無しさん:2010/10/24(日) 21:05:22 ID:uZ6Bo2wQ
>36
 あら、その通りかも。
 タッグの場合P2/P4に分かれる場合の対策だったかな。
 タッグでしっかり相手を補足しているAIを探すのが早いということで・・・

38MUGEN名無しさん:2010/10/24(日) 21:29:00 ID:pm3dOuic
書き込みサンクス
タッグ用AIなんてのがあるらしいし、それ探して参考にしてみるわ

39MUGEN名無しさん:2010/10/25(月) 08:54:32 ID:9sd4WqW6
そういやplayerIDでリダイレクトしてる時ってタッグ時もちゃんと動作できるのかな?

40MUGEN名無しさん:2010/12/09(木) 17:46:32 ID:56b1JW1U
アルカナのAI作ってる人いる?パラセのを捜してるんだが。
既出だったら作るのやめる。変数一覧なくて調べるのだるいし。

スレチか?

41MUGEN名無しさん:2010/12/21(火) 17:00:32 ID:uT0GjPG.
>>39
亀だけど、teamsideを参照すれば敵側のヘルパーか判別できると思うから、たぶん大丈夫
味方の弾に反応するのを懸念してるってことだよね?

キャラ製作者の方にはhelperのsize項目を設定して欲しいです

42MUGEN名無しさん:2010/12/25(土) 12:27:20 ID:gTFucDKo
>>42
返答ありがとうございます

飛び道具対策って上手くいくと楽しいですよね

43MUGEN名無しさん:2011/01/04(火) 20:10:07 ID:H8JSHk/Y
AIの作成を始めたけどvarがどうしても理解できない
前スレで分子氏やyes氏のサイトみたりいろいろググったりはしてるけども、
「なに」に使うのかわかっても「どう」使うのかが断片的な情報ばかりでよくわからない
実際に用例を出したり、こういう段取りでvarを使いますよ
って説明してくれるとこあるのかな?

44MUGEN名無しさん:2011/01/23(日) 21:18:15 ID:/e81czMI
>>43
厨忍氏のQ&Aとかいいんじゃないかい?

45MUGEN名無しさん:2011/02/16(水) 10:14:46 ID:mfxrlGjk
飛び道具がしゃがまれると当たらないことを認識する方法ってある?

46MUGEN名無しさん:2011/02/19(土) 14:43:25 ID:9bY7vnGs
>>45
・コンボ確定状況時、飛び道具と敵が同じX座標時にあり敵が屈被ダメステ
・contactを満たさずに飛び道具が消える、或いは存在してて敵が被ダメから抜ける
コレ満たせば暫定的に「スカ」は認識できるだろ
ヘルパー側で、飛び道具の背後に敵が居てdef11だったり屈被ダメで飛び道具が存在してれば、
「スカ」認識出来んじゃね

47MUGEN名無しさん:2011/02/19(土) 19:51:35 ID:HRHTVnkI
>>46
なるほど、そういう方法があったか
ありがとう、参考にしてみる

48MUGEN名無しさん:2011/03/21(月) 01:26:51 ID:VDMryTbI
Error message: State machine stuck in loop (stopped after 2500 loops) 131 for ○○○○
Check your states for infinite ChangeState loops

AI作ってためしてみたら、
試合の途中にこんなエラー吐いてmugen終了してしまった
一体全体どうなってしまっているのかわかりません
(○○○○はキャラの名前)

49MUGEN名無しさん:2011/03/21(月) 10:31:50 ID:5NogkGjo
>>48

ステートが無限ループしてるね。
[statedef 131]辺りのチェンジステートを調べてみると良いよ。

5048:2011/03/21(月) 13:26:03 ID:VDMryTbI
>>49
ありがとうございます。
原因はChangeStateのところに、
Trigger2 = EnemyNear(Var(57)),StateNo = Helper(99999),Var(0)(中段攻撃記憶)
Value = 130

Trigger2 = EnemyNear(Var(57)),StateNo = Helper(99999),Var(1)(空中下段記憶)
Value = 131

このように、学習したステートを利用してガード変更していたのですが、
変数に数値が代入されていない際の対策をしていなかったのでループしてしまっていました。
どちらにも代入されていなかったら、両方とも0ですものね。

51MUGEN名無しさん:2011/05/23(月) 11:23:41 ID:Z1nFIlkA
最初に適当に作ったAIが妙に味がある動きをしていて、
そこから距離計算とか有利不利とかきちんと計算してさらに強いAIにしようとすると
何か動きがつまらなくなることってあるよね

52MUGEN名無しさん:2011/05/23(月) 21:08:03 ID:AY2sQ51U
サクラカ氏が作るAIは大抵前者らしいな

53MUGEN名無しさん:2011/05/25(水) 21:11:40 ID:sxp0R4aM
適度にぶっぱとかいれないと単調になりがちだよね

54MUGEN名無しさん:2011/06/17(金) 13:46:34 ID:o1b2HBi.
StateDef40の記述に以下のような記述を入れているのですが、AIが無駄にジャンプしてしまいます。

[State 40, 2]
type = VarSet
Trigger1 = var(59) = 0
Trigger1 = command = "holdfwd"
sysvar(1) = 1

[State 40, 3]
type = VarSet
Trigger1 = var(59) = 0
Trigger1 = command = "holdback"
sysvar(1) = -1

var(59)はAIスイッチです。もちろん、AIの記述には40にchangestateする記述は入れてません。
無駄にジャンプするのは見映えが悪いので無くしたいと思っています。

55MUGEN名無しさん:2011/06/17(金) 19:50:19 ID:Upop9tps
>54
var(59)=0はAI無効(プレイヤー操作)ってことだよな?
なら逆にAI操作時の記述が必要ってことだ。

後はwikiや製作者のサイトを調べてみたほうがいいと思うよ。
他の人の記述見るのも手だけど、理解するのが大変かもしれない。

56MUGEN名無しさん:2011/06/17(金) 20:29:13 ID:OvOhwVCU
確かに人の記述は人によっちゃ魔術書か何かに近いレベルの難解な記述とかあるもんなぁ

57MUGEN名無しさん:2011/06/17(金) 20:41:43 ID:o1b2HBi.
>>55
書くのを忘れていましたが、AI専用のジャンプステートは既に用意してあって、
そこを呼び出してジャンプさせるようにしています。
相手が近距離でダウンしてるときしかジャンプしないようにさせているのですが、
ダウンしていなくてもぴょんぴょん飛んでしまうのでここで質問しました。
P2StateType = Lで相手がダウンしているとき、ですよね?

58MUGEN名無しさん:2011/06/17(金) 21:22:16 ID:GMMHtEVs
>>57
基本的なことなんですが
方向キーでする基本動作の歩き(20)・屈み(10)・ジャンプ(40)・ガード(120)はMUGEN側で処理されてるんです。
それらはChangeState記述を書いてなくてもCtrl=1などの状態で方向キーを動せばそのステートへ行くので、
MUGEN側のAIを起動させている場合も(MUGENのAIから)方向キーが入力されればジャンプなどをします。
なのでAIがその記述をしていないのにジャンプするという現象が起きるわけです。
ちなみに>>54のsysvarのvarsetは前後ジャンプ指定の記述です。

ニュートラル状態からCtrl=0で処理させようとなると試合開始の認識などが若干面倒なので、
操作処理のジャンプの時(!Time&&Ctrl=1&&StateNo=40)に屈みステートなどへChangeStateしたり、
Ctrl=1のダッシュ中などだけCtrl=0で維持させるといった処理でそうしたジャンプを抑制する方法があります。
前者はAI記述の最後尾に書いて制御し、後者はステートにtype=ctrlset,value=0の処理を追加して
技側を(Ctrl || StateNo=***)という感じで条件制御させればいいかと。

59MUGEN名無しさん:2011/06/17(金) 22:06:10 ID:o1b2HBi.
>>58
回答ありがとうございます。
wikiなども参考にしながらやってみます。

60MUGEN名無しさん:2011/06/18(土) 21:39:29 ID:jG/lVq.Y
自分はstate0でctrl=1になったらAI専用立ちステートに飛ばしちゃうな
これだと不具合起こるんだろうか

61MUGEN名無しさん:2011/06/19(日) 13:22:14 ID:EfW1Fcn.
0番ステートの中にCtrl=1&&RoundState=2&&AIフラグでChangeState→AI用立ちステならフライング系の不具合はないかと。
ただ他のステートでも制御してないと、屈み攻撃後の屈み状態(11)から立ち上がり(12)中にジャンプとかはありそうですが。

Ctrl=0制御関係全般に言える事なんですが、
他のCtrl=1のステートもCtrl=0にするなりAI用ステートで制御するなりしないと完全制御できないので大変かと。
Ctrl=1全部をAI用に制御する場合Ctrlの代わりとなる記述をまとめる必要があったりします。
AI用ステートを500xx番とかの括りにしてStateNo=[50000,500xx]で纏めたり、Ctrlの代わりにVarで制御するとか。
Ctrl代わりの情報を使わない方法としてはAI用ステートの中で動作制御をするとかありますけど、その場合
Time!=0条件とかを入れておかないと終了フレームで次の動作を開始したり本来無理な動作をやらかす可能性が。
あとCtrlが戻ったりする動作ステートの中から動作制御するのは、記述が分散して調整が面倒です。
面倒なので完全制御にこだわらず基本的な挙動だけCtrl=0制御するのもありですけど。
不具合としてはCtrl=0制御の場合、試合が終わったらCtrlを戻してやらないと試合終了合図が遅れるとかあります。

あと半分相手のバグの話だけど、Ctrl=0制御だとMUGEN側のAIからのガードが出来なくなるはずなんで、
方向キー操作のガードでないとガードできない状態の攻撃(半分バグ)には一切無防備になってしまうはず。
自分側の不具合以外を上げると、Ctrl=0制御だと相手側のAIがEnemy,Ctrl=0で状況を誤認する場合がありそう。
相手が挑発中とか回避動作中とか溜め動作中とかに誤認し続けるみたいな。相手のミスな気もしますが。

色々と面倒なので自分は最低限勝手なジャンプをさせない程度でいいやと思ってます。

62MUGEN名無しさん:2011/06/19(日) 16:59:39 ID:fGihNZv.
攻撃後の屈みについてはノーマークだった、教えてくれてありがとう

63MUGEN名無しさん:2011/07/03(日) 13:55:53 ID:xf0O4fY6
方向キーでしかガードできないものはどうせ偶然でしかガードできないんだから無視していいと思うけどね

でも専用立ちステートは変な数字にしてほしくないな
コモンやKFMを基準に考えれば200未満が通常の移動・待機ステートなんだからそこに収めて欲しい
じゃないと回避とかの特殊なMoveType=Iステートが推測できなくなる
まあ俺がCtrl=0&&MoveType=IのうちStateNo=[0,120)くらいを嘘硬直として認識してるだけなんですけどね

ただ、AIの都合だけ言わなくても、ステートは基本(KFM)に沿った数字にして欲しいがね
被超必KOカットインとかは3000以上のステートの攻撃でやられた場合、なんて条件になるからそこを外れるとやりづらい
これの場合、EX技なんかの強化必殺技はどうするか迷うところだが

64MUGEN名無しさん:2011/07/10(日) 19:40:48 ID:leYxo.eY
ちょっと違う話するけど、
ダッシュの時に1F目のアニメのまま滑走することがあるんだけど、どうすればいいかな
ちなみに厨忍氏のサイトに載ってる方法は試したんだけど駄目だった

65MUGEN名無しさん:2011/07/10(日) 21:20:31 ID:iOpADiBk
状況がよく掴めないけど、ctrlの条件でダッシュ連打してるとか?
ダッシュステートがctrl=1のキャラもいた気がする

66MUGEN名無しさん:2011/07/10(日) 22:30:42 ID:leYxo.eY
たぶんそうだと思う
ダッシュステートはctrl=1だった
stateno!=[100,101]をトリガーに組み込んだんだけど駄目だったんだ

67MUGEN名無しさん:2011/07/11(月) 01:31:19 ID:B4fMOWDk
自己解決したかも
AI時のみダッシュステートをCtrl=0にして、AI行動のトリガーに

triggerall=Ctrl||stateno=100

と記述するようにしたらなんともなかった
ただこれって不具合でないかな?

68MUGEN名無しさん:2011/07/30(土) 19:50:56 ID:WdSKJcmI
helpertypeがplayerになってる飛び道具の対策って皆さんどうしてます?
triggerにenemynear,ishelper = 0を入れているのですが、AIがそのヘルパーに向かって技を振ってしまいます。

69MUGEN名無しさん:2011/07/31(日) 09:43:06 ID:5I21l7zs
>>68
HelperType=Player自体が特殊なもの(AIを殺しにきてるもの)なので、
余程入れ込んで作ってない限り対策してないと思います。

対策としてはEnemyNearやEnemyのリダイレクトはヘルパーを一切感知できないため、
それを逆手に( Pos X - EnemyNear,Pos X ) * Facing * -1の距離数値(擬似P2Dist X)に
向きやStateTypeを感知してConst(Size.Ground.Front)だとかを減算・加算する方式で、
相手本体の位置を認識させて、上手いこと動かすのが一番分かり易い方法ですかね。
その場合「相手本体が後ろに居る」とかを充実させる必要もありますけどけど。
(P2***タイプの情報はHelperType=Playerも(StateNo=5150(死亡ステート)の相手を除いて)認識するので、
相手StatetypeなどもP2StateTypeでなくEnemyNear,StateTypeとかで認識することになります。)

ただHelperType=Playerは「攻撃の当たる分身」の場合もあるのですが、
飛び道具かそうでないかの確実な認識にはその相手ヘルパーを
IDを調べてPlayerID(xx),リダイレクトで感知して
hitdefattr情報を入手して〜ということまでしないと無理かと。

AIを作る側としてはHelperType=Playerは分身以外に使って欲しくないのが本音です。

70MUGEN名無しさん:2011/08/09(火) 03:30:09 ID:mzq5aRog
70

71MUGEN名無しさん:2011/08/12(金) 12:23:23 ID:3QApvRMs
p2nameを使っちゃうのは?
helper指定して出ている間は攻撃振らないようにしちゃうのがカンタン
なんじゃないかな
まあそのhelperが常時発生してるなら使えないんだけど

72MUGEN名無しさん:2011/09/17(土) 01:38:47 ID:yTMaV9kM
AI製作について語りたいから来てみたけど・・
あまり書き込まれてない?
>>67
自分の場合、ダッシュは
Statedef -1 に動作開始条件を、
飛んだ先のステートで終了条件を書いてる。

73MUGEN名無しさん:2011/09/19(月) 13:32:06 ID:eGOoZPwo
>>72
>>67のやってることは半分それじゃないかな。

いつまでも続けられる+いつでも止められる+Ctrl=1タイプのラン型ダッシュは、
AIに制御させる場合、Ctrl=1のままだと色々調整が難しいから
>>67のようにダッシュステートをAI時にCtrl=0にしてしまって、
AI側にあるCtrl=1の動作条件にTriggerAll = (Ctrl||StateNo=100)で
ダッシュステート加えてしまう方式が一番安定するんじゃないだろうか。記述に手間かかるけど。
ただその場合「ダッシュステート内のChangeState(ダッシュ終了処理)で立ちステートへ」戻す時、
ChangeStateのオプションとしてCtrl=1を入れとかないとCtrl=0で立ちステートに戻ってしまうんで、
Ctrl=1を入れるかダッシュステート内のChangeStateをAI時に使わないようする必要があるけど。

自分も動作開始を-1(AI記述)でダッシュステートをCtrl=0に、
Ctrl=1動作条件にダッシュステートを加えてるけど、
自分の場合Var使って終了条件そのものは-1で調整してる。
その方が細かい調整をしたい時に、一々そっちのファイル開かなくて済むから。
ちょっと特殊なのとしては、Ctrl=0の状態を「ダッシュの出始め数F」だけにして、
AIはCtrlのみのままで【ダッシュ開始直後に他の動作をできないようにする】ようなものもあるけど、
他の人はどんな具合で調整してるんだろうか。

74MUGEN名無しさん:2011/09/23(金) 23:48:25 ID:cdMy6nIw
色々考えてみたけどCtrl=0にするのが一番いいな。

75MUGEN名無しさん:2011/09/26(月) 22:06:48 ID:TNRBPrp.
学習機能つけている人いる?

76MUGEN名無しさん:2011/09/27(火) 18:40:39 ID:nw0NZSmE
>>75
自分はガード中下段の記憶装置と対当て身投げの記憶装置を全部のAIにつけてる。
どっちもテンプレート使いまわせて対応も中下段は立ち屈み指定の切り替えて、
対当て身投げは状況判断Varで攻撃しないよう制御して終わり目を狙って攻撃する感じ。
ただそれら以外の細かいのはほどんど手を付けてない。面倒そうで。

77MUGEN名無しさん:2011/09/29(木) 01:56:12 ID:nP7iLijo
俺はガード不能とコンボ失敗と攻撃失敗の学習機能を付けている。
コンボ失敗は失敗したらそのコンボを使わないというもの
ガード不能と攻撃失敗は失敗直前の相手のStateNoを記憶して
次からその技を出された時は別の対応してる。
攻撃失敗(ジャンプとゲージ溜めも含んでる)はちょっと面倒だけど
記憶するプログラム書けば他のAIでも使えるし便利です。
ただ、自分のはVar一つで2つのStateNoしか記憶できないので
かなりVarを消費しました

78MUGEN名無しさん:2011/09/30(金) 00:27:12 ID:BFrcSfE.
敵攻撃f学習(未完成)、中下段学習、コンボルート失敗学習の3つかな
システム上コンボが安定しないキャラなもんで最後のは特別
普段は前者二つだけで済ませてる

今度は当て身用に、相手の攻撃判定の大きさ等をある程度測定、学習する
機能をつけたいんだが、厨忍氏のQ&A参考にしてもさっぱりわからん……

79sage:2011/09/30(金) 05:13:21 ID:uiv.vhk.
>>78
厨忍氏のQ&A
攻撃が当たった時に相手のStateNoと距離と
攻撃開始してからの時間を記憶。
距離が長くなれば更新しているみたいだね

80MUGEN名無しさん:2011/09/30(金) 08:59:19 ID:uiv.vhk.
>>78 厨忍氏のQ&A
varの偶数値にStateNo、奇数値に当たるまでの時間
fvarの偶数値に距離X、奇数値に距離Yを記憶している。
var(47)は順番に保存するためのカウンタ。

81MUGEN名無しさん:2011/09/30(金) 14:55:12 ID:p7FsDtTE
ttp://homepage3.nifty.com/andil/mugen/AI_atemi.txt
前スレで話題が出たときに作ったヘルパーを使った当身投げ用の記憶装置。
2年前のなんで色々と型落ちしてるけど、参考になれば。
10個分(Var各4個)までの技しか記憶できないものの相手の攻撃に当たったら
相手のStateNo,Time,ID,相手とのX距離Y距離(本体が動いた分も補正),etcまで覚えて
複数の記憶からX距離の近しい方を参照するようにする機能も。
(突進系の技とかは相手との距離で命中するタイミングがずれるので)

実際の使い道ではシールド持ちキャラのAIへ、bitに改良してStateNo,Time,X距離、
ID,攻撃回数,失敗回数,直前のStateNo,直前のMoveTypeまで記憶させて
最大20個分の技を覚えられるようにしてるのを使ってる。(Var各2個)
今それを元にループ処理を加えて新しいAIに搭載準備中。

細かい調査が不要ならStateNo,Time,X距離の記憶だけでいいだろうけど。
攻撃の発生Fを認識させて色々と利用しちゃうと凶悪になるけどね。
相手の攻撃にあわせて始動無敵の技を重ねるとか。

82MUGEN名無しさん:2011/10/01(土) 05:27:09 ID:nh/r5i2k
飛び道具でループコンボをつくろうとして
trigger1=var(55):=var(55)+1
のような記述を入れてみたのですが数値が代入されません
勝手に初期化されたのか、トリガーの一番下にかいてあるのかいろいろ疑ってみたのですがやはり代入できません
打撃技だと問題なく代入されるのですが、飛び道具だとこの記述は使用できないのでしょうか?

83MUGEN名無しさん:2011/10/01(土) 13:01:19 ID:8X3lUDWc
んなこたない
他のトリガーでミスってるんだろう

84MUGEN名無しさん:2011/10/01(土) 13:58:25 ID:tEuzyBeY
>>82
代入のしくみが良く分らないならこれを見てみよう。
ttp://homepage3.nifty.com/andil/mugen/Var.txt

85MUGEN名無しさん:2011/10/01(土) 15:03:43 ID:7rHsflRE
>>82
もしかしてtrigger1=var(55):=var(55)+1の前に「MoveHit,MoveContact」系のトリガーが入ってるんじゃないだろうか。
そうなら「攻撃があたった」という条件の為にMoveHitだとかにしたのかもしれないけど、
MoveHitとかは自身の攻撃しか認識できないので、飛び道具はHelper型ならHelper(*HelperID*),MoveHit=1だとか、
Projectille型ならProjHitTime(*projID*)=1だとかの参照方法で認識させる必要がある。
ただHelper側はMovetype=Aによる処理の前後でもしかしたらそれでも上手くいかない場合があるかも。

Helper型用でもっと確実なのは、Helperのステート側にParentVarAdd(親のvarに加算)をする加えるとか、
もしくは飛び道具を出すステート(始動用,ループ用両方)へのChangeStateをValue=**** +(var(55):=var(55)+1)*0にして、
相手の状態も条件にしてループするとかかな。Valueだとかの:=は「処理が行われる際に代入される」ので。

86MUGEN名無しさん:2011/10/02(日) 04:37:47 ID:sUWrMYD6
>>84
を熟読してようやく解決できました

>>85
の解説も非常に参考になりました、お二人様ありがとうございました

87inae:2011/10/02(日) 12:49:45 ID:8ADYXSVM
主に以下のような感じで浮かせ技を作ろうと思っているのですが、
trigger1 = time = 16
trigger2 = time = 22
trigger3 = time = 30
animtype = Diagup
ground.velovity = -1.5,-8
air.velocity = -1.5,-8
fall = 1
空中の敵に当てると問題無いのですが、
地上の敵に当てると浮かずにダウンしてしまいます。
何が原因でしょうか?

88MUGEN名無しさん:2011/10/02(日) 13:35:55 ID:794g7uFo
>>87
キャラ作成のスレで聞いて

89MUGEN名無しさん:2011/10/02(日) 16:51:14 ID:794g7uFo
質問です。helper(ID),〜って相手のヘルパーも参照できるんですよね。
相手のヘルパーIDと重なった時は自分のヘルパーを参照するのですか?

90MUGEN名無しさん:2011/10/02(日) 20:28:44 ID:H0U0Ivpk
>>89
Helper(ID),で他のキャラの出したヘルパーは参照できませんよ。
Helper,で参照できるのは自分が大本となっているヘルパー、
自分が出したヘルパーの他、そのヘルパーから射出したヘルパー(その子も可)などだけです。
なのでパートナーのHelperも同様に参照できません。安心してください。

ただ参照する方法がないのではなく、PlayerID(*ユニットID*),ならば敵味方関係なく参照できます。
そうした参照方法を多用して相手のヘルパーを探す場合、自分のヘルパーでないことも確認する必要があるのですが、
他のキャラが同キャラの場合は、PlayerID(xx),Name="xxxx"などが一緒になってしまう問題があります。
そこでPlayerID(xx),IsHelper(xx00+ID)という風な処理にすることで、確実な判断が可能になるわけです。
※ちなみにPlayerID(xx),TeamSide=TeamSideだけの判断では「パートナーの」と混同する可能性が出てきます。
(それ以外にもヘルパーのIDを記録して照合する方法もありますが、手間的にはHelperIDに+IDしてしまう方が圧倒的に楽)
そうした理由から射出するHelperIDに自身のIDもくっつけるという手法を用いている人たちがいるのでしょう。
私もそういうのCNSを覗いてHelperIDは重なるとマズいのかなと思ったわけですけど、
テスト用にいじってるKFMを使ってテストして調べて大丈夫だと確認しました。

91MUGEN名無しさん:2011/10/03(月) 18:15:56 ID:YTHbDy/E
>>90
自分のヘルパーだけでしたか。
なら、持ち越さなくていい数値はヘルパーに管理させても問題なさそうですね。
詳しく説明していただきありがとうございます。

92MUGEN名無しさん:2011/10/05(水) 07:53:33 ID:29s/I0cE
記述がわかりやすくて参考にしやすい作者のAIなんてありますか?

93MUGEN名無しさん:2011/10/05(水) 12:39:34 ID:xq0bvpUQ
どういうAIを作りたいのか、何を知りたい・何の参考にしたいのか、初心者かどうか
もう少し情報くれないとちょっと答えづらいな

デフォAIは基本的な記述でマイルドに作られることが多いし、初心者さんがAIに慣れるには良いかも
人それぞれ癖や好みがあるから、色々なAIを見るのが良いと思う
俺がぱっと思いつくのはPotS氏、GM氏、Gal129氏、rei氏、別府氏かな

94MUGEN名無しさん:2011/10/05(水) 14:57:20 ID:29s/I0cE
参考にしたいものはいろいろありますが、主に攻撃がヒットして浮いた敵まで走ってタイミングよく技を出して拾う、という一連の動作が知りたいです
今のところ平成㌢氏の説明書を参考にしてEnemyNear,vel yや時間調節用のvalue = 0などを使っていますが、
最初の浮かせる攻撃がヒットした時の打点が高すぎ・相手との距離が離れすぎて拾うタイミングがズレ、最悪の場合受身を取られて反撃されたり
相手によって体が小さい・重いなどの理由で追撃に失敗したりしてどうしても精度の悪さが気になります
それでよく作りこまれてる製作者のAIをのぞいてみたのですが、やはりそこはしっかりしてるようで
あまり馴染みのない記述がビッシリと書かれていて理解に苦しんでいるところです

95MUGEN名無しさん:2011/10/05(水) 15:50:27 ID:xq0bvpUQ
ここで書くのは結構しんどいですねw
とりあえず大雑把にいきます

・重力計算をする
相手が重かろうが計算が正しければそんなに空振りません
地上コンボの場合は摩擦計算をお忘れなく

・追撃の種類を増やす、受身を取られる場合は追撃しない

・浮かせる攻撃を当てる際に追撃のことも考えておく
→浮かせる攻撃が当たる条件以外に当たった後の動きを予め計算し、
 受身可能時間となるまでに追撃範囲に入るかを計算する

・相手の喰らい判定の変化を考慮して計算する
→空中では足元が薄くなったり、絵に合わせて判定が動いたりします
 その分を考慮して余裕を持ったy方向のヒット条件を考えます
 立ち状態の腹〜胸の高さは空中でも喰らい判定に入ってると予想して
 p2dist y(足元)にconst(size.mid.pos.y)を加えた位置を狙うようにする、など

「時間調節用のvalue = 0」とは0番ステートでしょうか?
立ちにせよ歩きにせよ、AI専用ステートにした方が管理が楽です

もう少し細かく、ということであれば捨てアドでも用意していただければ

96MUGEN名無しさん:2011/10/05(水) 20:50:30 ID:29s/I0cE
返事遅れてすみません、ご丁寧にまとめられていてとてもわかりやすいです
お言葉に甘えて、捨てアドの用意が出来ましたので記述の流れなんかを簡単に書いて頂けると助かります
mugenaisuteado@yahoo.co.jp

97MUGEN名無しさん:2011/10/05(水) 22:47:01 ID:w3LoBL32
>>95-96
相手の吹き飛び中の当たり判定について零れ話を。メールの方では話してるかもしれませんが。
「吹き飛び状態」の時、相手の体は体の中心当たりを基準に「斜め〜横」になりますが、
その時当たり判定の横は「衝突判定(Const(Size.Air.Front))」より広いが良くあります。
特に体の大きい相手は横にしても大きくはみ出すことが多いので、Const(Size.Head.Pos.Y)<-70くらいを目安に、
P2Dist X-Const(Size.***.Front)+Enemy,Const(Size.Mid.Pos.Y)/3程度、縮める計算をした方がいい場合もあるようです。
>>94のようなタイプだと大差ないかもしれませんが、吹き飛ばし直後に追撃するタイプの場合、
大きさの違いによる空中と地上の衝突判定の設定差のせいで追撃の判断に違いの出ることもありました。
(実際には当たるはずなのに、当たらなさそうな場合の判断をしてしまう、など。)

98MUGEN名無しさん:2011/10/05(水) 22:52:32 ID:Ojx0C6.g
相手の差は後回しにして
まず一つずつ調整するのが良い。
そんなにいっぺんに質問したら答えにくい・・

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ですが
自己解決しましたごめんなさい

199MUGEN名無しさん:2015/02/12(木) 20:16:22 ID:.KGu9Emg
mugen側AI(内部AI)がうざいからvar使って常時ctrl=0にしようとしているんですが、
開幕でジャンプした時だけ空中でstate0に飛んで困ってます
changestateによる処理は加えてないのですが、原因は何なんでしょうか?

200199:2015/02/12(木) 20:45:29 ID:.KGu9Emg
すいません自己解決しました
どうもフライングしてたみたいで本来の開幕になるとmugen側で強制的にstate0に飛ばしてたみたいです
失礼しました

201MUGEN名無しさん:2017/05/05(金) 13:04:05 ID:07P5r0/Y
宣伝です、詳しい方の編集・追記お待ちしております

MUGEN初心者用簡易AI講座
ttp://wikiwiki.jp/simple-ai/


新着レスの表示


名前: E-mail(省略可)

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

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

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

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