■掲示板に戻る■ ■過去ログ倉庫一覧■

AI製作関係スレ
1tokume ◆57jdfvVV/Y:2009/01/17(土) 17:15:49 ID:6SdDp0p2
AIなんかについて話すスレです
AI関係の質問とかすると知ってる人が答えてくれるかも
見つけたネタとか適当に書いてくれると喜ぶ人が居るかも(自分とか)
そんなスレ

2MUGEN名無しさん:2009/01/17(土) 17:37:57 ID:vKAdC3Rs
AIが止まらない

3MUGEN名無しさん:2009/01/17(土) 17:49:18 ID:GJskAQ22
とりあえずこれは分かっとこうぜって用語ある?

4MUGEN名無しさん:2009/01/17(土) 17:49:49 ID:YO3x7xA6
ふと思うのはゲージ溜めキャラとかはやっぱり最初に選ぶべきではないのだろうか?
KOFで言えば95あたりのゲージ再現キャラとか

5MUGEN名無しさん:2009/01/17(土) 17:55:51 ID:ea7.OFs.
そんなことないと思う

6tokume ◆57jdfvVV/Y:2009/01/17(土) 18:03:31 ID:6SdDp0p2
シンのグレコンですがとりあえずグレイヴ当てたらハイジャンでるようにしましょうか
センチ氏のパッチが入っている前提で(そのままだと出来ないというか小パンが連打できない)

既に入っているAIのグレイブ後のジャンプの記述を利用させてもらいます

[State a]
Type = changeState
TriggerAll=StateNo=300
TriggerAll=RoundState=2
Trigger1 = Movehit
value = 39
ignorehitpause = 1

センチ氏の記述からAIフラグを取っただけのものです
これをAI.cnsの最後に入れればとりあえずジャンプはしてくれるようになります
このままではプレイヤー操作でも(というかセンチ氏の記述が生きているはずなのでプレイヤー操作で「しか」)
ジャンプが出てしまうので後でAIフラグを入れますが
とりあえずコンボが出来てからにしましょう

>>4
そんなことはないと思います

7MUGEN名無しさん:2009/01/17(土) 18:05:49 ID:SNQt1Kpc
EFZキャラのAI途中で投げ出してる状態だなぁ
攻撃がつながらない・・・

8tokume ◆57jdfvVV/Y:2009/01/17(土) 18:16:06 ID:6SdDp0p2
>>3
ステート関係の基本的な知識と
Trigger関係は大体知っておいて損は無いと
Triggerは
Ctrl,Var,RoundState,Command,Random
StateNo,PrevStateNo,StateType,P2StateType,MoveType,P2MoveType
P2BodyDist X,P2BodyDist Y,P2Dist X
Pos X,Pos Y,Vel X,Vel Y,BackEdgeBodyDist,FrontEdgeBodyDist
Time,AnimTime,AnimElem,MoveHit,MoveContact,MoveGuarded
IfElse() Enemy, EnemyNear, Helper(*),

と、適当に書いただけで一杯ありますね
なんとなく分かるだけで十分だと思います

9MUGEN名無しさん:2009/01/17(土) 18:18:45 ID:qNhJVbgs
>>3
用語というかトリガーを理解することかなぁ

>>4
好きなキャラならなんでもいいかと

>>7
目押しコンボならvarを使うといいですぞ
普通にキャンセルできる技ならmove系のトリガーで

10MUGEN名無しさん:2009/01/17(土) 18:27:04 ID:SNQt1Kpc
>>4
自分の好きなキャラが一番

>>9
地上なら摩擦計算っぽいの導入すればいけるかな
と思うんですけど、空中関連で躓いてるんですよ

11MUGEN名無しさん:2009/01/17(土) 18:33:15 ID:r/pwxQmM
摩擦計算の使用タイミングを知りたい。壁際とかなのか?

12MUGEN名無しさん:2009/01/17(土) 18:37:12 ID:qNhJVbgs
空中コンボだと……
他のEFZキャラで空中コンボやってるAIを参考にしてみるとか

他の人のAIを覗くと新たな発見があったりして結構楽しい

13MUGEN名無しさん:2009/01/17(土) 18:38:41 ID:SNQt1Kpc
>>11
自分も使い始めたばかりなのでなんともいえませんが
とりあえず相手が地面にいるときの始動技以外には大体いれてます
壁際とかはよくわからないので、考慮してませぬ
そして、計算式も自分が考えたものではないので・・・

14MUGEN名無しさん:2009/01/17(土) 18:45:03 ID:r/pwxQmM
>>13
一時期スレに誰かが書いたやつだよな?
あの頃は使い道も書いてよくわからなかった。
とりあえずメモでのこしてあるがが転載していいんだろうか、
残しておけばみんなの役に立つだろうとは思うが

15MUGEN名無しさん:2009/01/17(土) 18:57:35 ID:SNQt1Kpc
>>14
多分それです

空中は重力計算とかもしないといけないのかなあ

16MUGEN名無しさん:2009/01/17(土) 19:10:17 ID:YO3x7xA6
>>6>>9>>10
うぉぅ。結構返信来て吃驚したw
まぁNoise Low氏のチャンなんですけどね…
何故か彼だけハブられているので付けてあげたいなーと。
BLACKK'は作成予定の方がいたのと当身キャラの立ち回りが解らない;
まずは頑張ってステートやらトリガーを理解せねば…
海胆頭なのでなかなか頭に入らないのが難点ではありますが

17MUGEN名無しさん:2009/01/17(土) 19:20:16 ID:1XFN3D5U
重力計算自体はそれほど難しくも無いがな
MUGENの重力仕様がまたワケワカランので実用は難しい
相手キャラのconst、HitDefが与えるもの、HitDefで指定されてないために適用される数値
さらにVel Yが適用されるタイミングのずれ・・・
とまあ要素が多くて一般化がどうにも

とりあえず相手との位置関係からタイミングを個別指定してやるしか実用的でないのが現状?

BLACKK'は作ってくれるなら俺の手間が省けていいぞ
別段強いAIが作れる身でもないしな

18MUGEN名無しさん:2009/01/17(土) 19:25:13 ID:BYDi9136
何も知らない状態からAIを作りたいんだが、wikiのテンプレ以外に何か補足でもあったら教えてくれるとうれしい

19sage:2009/01/17(土) 19:25:34 ID:1XFN3D5U
アホンダラー
あげてもうた
ここには並々ならぬ期待と興味があるがうちのIPだと串ないと書き込めなくて不便すぎるぜ
重いよ・・・wakwakIP嫌われすぎだよ・・・

他でもちょっと書いたけどトリガー関係のリファレンス他いろいろがあってここが便利
リンクがすっげえわかりづらいけど
ttp://homotaro.s44.xrea.com/mugen.htm

20MUGEN名無しさん:2009/01/17(土) 19:35:52 ID:YO3x7xA6
>>17
当身キャラは特に立ち回りが解らないとです。
飛び道具を持ってる当身キャラのギースでさえ自分操作の時に「いつ当身を使えと!」と言いたくなるような
操作状況ですしね(´・ω・`)
自分操作の時ももうちょっと考えて動くようにしないと物凄く操作が偏りますし…(気がついたら飛び道具だけで戦ってたり)
ううん、フィーリングで戦うのもどうにかしないとダメだ

21MUGEN名無しさん:2009/01/17(土) 19:36:01 ID:1XFN3D5U
・・・sage間違えるとかもうね、これはもうダメかもしらんね
ちなみに先のリンクは各ページのタイトルとかがリファレンスへのリンクになってるからわかりにくい

>>18
大抵はwikiのテンプレ(とリンクの分)でどうにかなる
あれを越えるともう研究中の分野に片足突っ込むことになってくるような
細かいことの補足だと乱入者氏やIldanaf氏あたりが時々書いてるかな
俺も多少記事書いてるけど参考になるかは知らん

22MUGEN名無しさん:2009/01/17(土) 20:08:32 ID:r/pwxQmM
>>20
どのギースかわからないが大方以下の当て身的使い方
相手がmovetype = Aの時だと結構いい感じになる。
ただし、飛び道具の場合もあるからHitdefAttrはP以外でかつpojはない状態限定
相手が空中の場合はvelを使って降下中前よりの落下時を指定
bodydist Xはご自由に
発生フレームによってダメージ受けたりもするがガード硬くならなくて済む。

23MUGEN名無しさん:2009/01/17(土) 21:52:42 ID:qNhJVbgs
>>20
自分はトリガーで距離だけ測って適当にぶっぱさせるくらいかなぁ

AIが本気出すと小足見てから当身余裕でしたになるから
ある程度自重させるような記述をしたほうがよさげ

当身とか弾きとかブロって匙加減が難しい……


超反応とそれ以外の境目ってどこなんだろね……
ただのぶっぱでも当たり方によっては超反応に見えるしね

24MUGEN名無しさん:2009/01/17(土) 22:16:13 ID:SNQt1Kpc
当身はだいたい>>22と同じだけど
相手空中時のvelは気づかなかったな、今度試してみる

25MUGEN名無しさん:2009/01/17(土) 22:19:56 ID:lU3Iv2X2
俺にとって当て身技は固めから暴れを潰すのに使うものだな
「かかったなアホが!」ってな感じで

つまりこういう感じか?
trigger○ = StateNo = (必殺技キャンセルできる通常技)
trigger○ = MoveGuarded
trigger○ = Time >= (当て身の発生とかに合わせて適宜)
trigger○ = Random > ○○
MoveHitとP2MoveType != Hも入れてブロ対策とかもやるといいかも

26tokume ◆57jdfvVV/Y:2009/01/17(土) 23:36:02 ID:6SdDp0p2
メタ的ですが
ぶっぱと低確率超反応とを混ぜてみると読みで置いてたっぽく見えるかもしれません
無敵技とかもそうですね

27MUGEN名無しさん:2009/01/18(日) 17:24:23 ID:GX8VjUOc
当身とか飛び道具反射技とか相手の攻撃に対して何らかのアクションをする技は難しいですね
反射とかキョンがバットでよく跳ね返してるけどあれどうやってるんだろ

28MUGEN名無しさん:2009/01/18(日) 18:18:20 ID:kVLabufo
>>26
なるほど
今度やってみようかな

>>27
記述見てないからあれだけど
たぶんヘルパーに反応してぶんぶん振らせてるんじゃないかと予想


みんなAI作るときはどこから作ってるのかな
コンボから作り始める俺はおそらく異端

29MUGEN名無しさん:2009/01/18(日) 18:24:00 ID:GX8VjUOc
>>27
飛び道具との距離を測れればいいんですけどね

ちょっと前まではコンボから作ってたけど
最近は対空とか切り替えしから作ってますね

30MUGEN名無しさん:2009/01/18(日) 23:16:45 ID:xEwL4fEI
俺は切り返しから作ったりもするが今作ってるのはコンボから

最初にやるのがコンボ調べる事からだから、自然にそこから組み立てられていく


例えば自分は相手の落下を待って、高さを調節してから繋ぐコンボがある場合は0ステ停止とか使うからなおさら他の部分が後回しになるw

31MUGEN名無しさん:2009/01/18(日) 23:32:35 ID:kVLabufo
>>29
あと速度も簡単に計れればねぇ
ヘルパー使って計測する方法があったと思うけど導入してる人っているのかな

>>30
最初にコンボ調べるとかなんという俺
浮かしてからのコンボはキャラによっては受身を取られるから困る


投げキャラのAI作るの楽しいよハァハァ

32MUGEN名無しさん:2009/01/18(日) 23:52:12 ID:pNoRpIqs
わーい。まず立ち回りを色々確認しようと思ってトレーニングモードで戦ってたら
コンボキャラとかラッシュキャラには手も足も出なーい。
切り返しや割り込みに使えるのが少なすぎる…

流石原作ではEランク。
しかし原作とMUGENでは見えない所で違ってたりするから動画だけじゃ勉強にはきついね
これはプレステのでもいいからソフトを買って調べろと言う啓示なのか…?

33MUGEN名無しさん:2009/01/18(日) 23:55:35 ID:5Zd7epNQ
どこからかはともかく状況の限定される部分から作るのが基本だろうな
でないと他の動きを見るときに邪魔になる
nullするにしても多いとそれだけで手間くうから・・・

34MUGEN名無しさん:2009/01/19(月) 00:11:55 ID:ltjg2oDM
>>32
なにも戦法は割り込みや切り返しだけじゃないんだぜ
10割でさえなければ必ず相手は休み手を出せる瞬間があるはずだ
・・・起き攻めでまたターン取られるとかさらに割り込み食らうとかだとどうしようもなくなってくるが
少なくても使える技があるだけいいじゃないか・・・

どのみち原作はたいていの場合アテにならん、基本コンボのかけらすらないこともある
まずは技の発生と判定を把握すべきだと思う

35MUGEN名無しさん:2009/01/19(月) 00:59:39 ID:BttUFAzc
>>32
逆に考えるんだ、切り返しや割り込みができないならガン攻めすればいいと

緊急回避とかガーキャンとかないキャラもいるんだぜ……

36MUGEN名無しさん:2009/01/19(月) 19:56:24 ID:IGqHXljw
おお、こんなスレできたのか。
俺はコンボから作る者だが・・・
だってそうすりゃ技に関する理解深まった状態で立ち回りに入れるし、
どの状況でどのくらいのリターン取れるかも分かるしね。

反応については・・・10F以上、以降10F経過するごとに確率増やすって位だ。
あとはガードした直後などのぶっぱ多めとか。
そうしないとガン攻めAI相手に固まりすぎるんだよね

37otto:2009/01/19(月) 23:03:46 ID:0ETYJckM
なんか
チェーンコンボとか、
長いコンボとかないキャラだと
なんとなーく超反応投げとか昇竜とかが元ゲーのCPUみたいに見える…気がする
とウチのワンパアスカとジャンヌが申しておりました

38MUGEN名無しさん:2009/01/20(火) 01:52:47 ID:M.loCVjI
製作とは関係ないですけど
tokume氏ヤフブリ消えちゃいますけどこのままですか?

39MUGEN名無しさん:2009/01/21(水) 00:55:29 ID:F88cA.Wc
ちょっと暇になるまで待ってください

40MUGEN名無しさん:2009/01/23(金) 23:33:10 ID:SKLtDoRc
いつもTerapad使ってるんだけど、AI作る時はwikiに書いてあるようなタイプの方がいいのかな?
ソフト自体は探して落として入るんだけど

AI作ってる人でこういうのは見やすいとかお勧め機能?ってある?

41MUGEN名無しさん:2009/01/23(金) 23:54:12 ID:RQC0J/CY
常にメモ帳な俺は答えることができないな/(^o^)\

みんななにかしらツール使ってるのかな

42MUGEN名無しさん:2009/01/24(土) 00:02:25 ID:0rBsaRyg
UnEditorとかでtriggerとかの単語を強調表示させるようにしたら便利かも
タイプミス回避にもなるし

43MUGEN名無しさん:2009/01/24(土) 00:07:19 ID:VlbxwVFs
Grepできれば何でもいい気がする

44MUGEN名無しさん:2009/01/24(土) 00:37:28 ID:NtVlWe7c
メモ帳使ってるなぁ
今までに一体何度truggerって誤字に気付かなかった事か…
エラー吐いてくれないから気付くのに時間かかったなぁw

45MUGEN名無しさん:2009/01/24(土) 02:00:56 ID:bzEnXBV2
メモ帳と更新内容調べるのにファイル比較ソフトかな・・・

46MUGEN名無しさん:2009/01/25(日) 00:37:26 ID:Nd8Q7Sww
いきなり話題重くて初心者書き込みにくくね?ってな感じの話聞いたので
初心者向けや技術系記事を書いたりしてるので宣伝みたいな感じー
初心者でも質問しやすい環境とか流れとかよくわからないけど・・・そうなるといいな。

ttp://cid-587c144b2a5be3a8.skydrive.live.com/browse.aspx/%e5%85%ac%e9%96%8b

正直言って俺がAI作ってる最終目的は「面白い動画を見たい」「動画のための選択を広げる」だ
職人が増えれば俺の仕事も減るからな
気に入らない人もいるだろうけど俺は俺の信念で以ってAIを作るんだぜ

47MUGEN名無しさん:2009/01/25(日) 01:12:23 ID:N17wHR/s
たしかに、話題重かったかもしれませんね
摩擦云々言い出したのは俺です、ごめん

これから作るっていう人がいたら、もし作ってて躓いたら
とりあえず他の人が作ったAIのぞいてみるといいかも、とくにcommonステート
例)ダッシュが滑る、前に跳んでくれない、ガード関係

私が最初に躓いたのがそこだったので、いや今でも躓いてますが
それと、案外ググると解決策が出てくることが

48MUGEN名無しさん:2009/01/25(日) 23:47:21 ID:6OjCfw.c
ガード考えるときに、空中下段や地上中段のせいで憂鬱になる人はいると思う。
そこでそれらに対する簡易の学習機能を作ってみたんだけど、需要あるかな?
まあ1回は食らわないといけないし、割と変数食うからヘルパー使ってやることになって、
そのせいでラウンド間持ち越しできなかったりするけど、とりあえずその技だけでボコされるってのは
少なくできると思う。
既出で常識だったらごめん。
だが折角こういうスレがあるので訊いてみた。

49MUGEN名無しさん:2009/01/25(日) 23:52:09 ID:N17wHR/s
>>48
学習機能はまだ試してないから、どういうのかちょっと見てみたい

50MUGEN名無しさん:2009/01/26(月) 00:28:03 ID:KzefwPJw
>>48
需要ありありです。
KUSANAGIにフルボッコにされるのはもういやだお……

51MUGEN名無しさん:2009/01/26(月) 01:10:55 ID:FY71XQog
ttp://www7b.biglobe.ne.jp/~tsuyoshishiki/learning.txt
適当に書いてみた。
これで大丈夫だと思うんだけど、何か不具合とか改良案とかあったらよろしく

52MUGEN名無しさん:2009/01/26(月) 01:25:09 ID:O0wU62mo
>>51

ざっと見たけどやっぱりRoot,P2よりかはPlayerIDの方が安定すると思う
P2だとType=Playerのヘルパーにも反応したりするから

5351:2009/01/26(月) 22:47:55 ID:ZRNYOH/U
そういや言い忘れた。
上のではヘルパーでやってるけど、普通に本体でも行けます。
ただ、かなり変数食うけど・・・

>>52
確かに〜。
まあtype=Playerのヘルパーなんてぶっちゃけしょうがないと思ってるけどねw

54MUGEN名無しさん:2009/01/27(火) 18:09:38 ID:6UYyl6XI
丁度ガードの話題のようなので質問ですが
どうにも相手の起き攻めに弱くて困っています、ガードステートは平成センチさんの
AI説明書のものを使わせてもらっています、何か良い対策ないでしょうか?

55MUGEN名無しさん:2009/01/27(火) 18:39:15 ID:zIQfBf.o
1.起き上がり時に何か別の行動をしていないか
2.被ダメ時にガードの条件を満たしていたかVarを使って確認する

大まかに分けるとこの2つ

56MUGEN名無しさん:2009/01/27(火) 19:11:51 ID:.TG2ZWGo
平成㌢氏のマニュアルのだとガード開始して
下段ガードに移行する条件の数値が低めになってるから
思い切ってあげた方がいいかもしれない

57MUGEN名無しさん:2009/01/27(火) 19:37:10 ID:uBWuYpyQ
相手が近くにいるなら小技振ってるところに食らってるんじゃないかな
とりあえずコマ送りにして何か技を出してないか確認するといいかも

5854:2009/01/28(水) 00:58:40 ID:CggDZYRA
下段ガードに移行する数値って、トリガーのrandomの値の事ですよね?
一応レベル制のAIにして、最大値にしているので問題ないと思います。

まだvarはよく分からなくて被ダメ時のガード条件を、
varで確認するやり方はよく分からないのですが、
とりあえず何か技を出していないかを確認してみます。
ありがとうございました。

59MUGEN名無しさん:2009/01/28(水) 02:46:41 ID:uYHk7tkM
しゃがみ状態(StateType = C)って、MUGEN本体側が勝手に立ち(S)に戻そうしてるような気がする
しかもキャラのステート実行した後に
だからかしゃがみ(ステート10)はctrl = 0にしないとすぐ立ち上がろうとするし、ガードもガードステート(120や130)で自分で移行させてやらないとかなり挙動が弱いっぽ
俺使ってないからわからないけどセンチ氏の記述まるごと写してるんならガードは問題ないだろうねえ

しゃがみをctrl=0にしないで制御する方法ってないかなあ

60MUGEN名無しさん:2009/01/29(木) 18:25:40 ID:U598cxf6
自分で操作しているときに下キーを離したら立ち上がるのと一緒じゃね?
つまりMugenはCommand!="holddown"だと立ち上がり処理を行うんだと思う。

ずっとしゃがませたいなら条件指定して永続的に飛ばすのが手っ取り早い

61MUGEN名無しさん:2009/01/29(木) 20:18:11 ID:O4cMSKYo
ふと疑問に思ったんだけど、上って連続でコマンド入力する事無いよね?
AI起動用コマンドを色々見てるうちにふと気付いて…
よく見るのはボタンの方だから妙に気になった

62MUGEN名無しさん:2009/01/30(金) 00:37:35 ID:9x.N7Dag
いつも不思議なんだが何でAIに組んでないステートをWATCHで使うんだ・・・

63MUGEN名無しさん:2009/01/30(金) 03:25:37 ID:UYJ77BGI
>>62
どういう意味?

64MUGEN名無しさん:2009/01/30(金) 06:00:37 ID:u6GVGA2E
>>62
それは俺もある
watchで固まったからデバックでステート確認したら、存在して無いステートに居たことがある
AIにもキャラのCNSにも、そのステートに飛ぶような記述は無く
そもそも、そのステート自体、commonにも無くcnsやstにも記述されてないのに…ワケワカメ

しかたないから-2ステートでそのステートに飛んだら強制的に立ちに戻るようにして強引に解決したがw
原因はいまだに謎

65MUGEN名無しさん:2009/01/30(金) 09:08:25 ID:8yibbtmI
>>61
「普通はしない」程度で「できない」わけじゃないな
それにモードやグルーヴ選択のときにやることもあるだろう

>>64
俺はそういうのなったことないなあ
乱入者氏のブログで出てた話だと、アニメが変なところに飛ぶっていうのがあったな
確か投げでステート奪われたときに存在しないアニメ表示しようとして吹っ飛んだんだったかな
それぞれ別目的のVarが被ってたせいだったはず
ひょっとしたらそういうものかも

ところで>>62はプレイヤー用記述を抑制してないってオチじゃないだろうな?
あと技記述に派生(コマンド)が記述されてることもあるが

66MUGEN名無しさん:2009/01/30(金) 13:46:59 ID:zwdbhD9I
>>64
それ俺もあったわー
AKOFとか緋のキャラで

67MUGEN名無しさん:2009/01/30(金) 14:40:25 ID:f1hnDPII
>>64
多分ステート指定の記述でValueの値が数式で管理されていて
検索に引っ掛からないパターンだと思う。

数式管理は便利だけど、きちんと全ての算出値を把握しておかないと
空のアニメやステートを指定してしまう事が多々有るんだよね。

6864:2009/01/30(金) 22:57:06 ID:EsC3Dsx6
>>67
数式で管理されてる部分もチェック済
つか、statedef 1なんて使わないだろ…

たぶんどっかの記述にエラーが出ないタイプのミスがあって、誤作動してるんだろうな
前も]が抜けてて、それ以降の記述の一部が無視され意図しない挙動を起こしたことあるからw

69MUGEN名無しさん:2009/01/31(土) 22:01:56 ID:hK4Fr8aw
関係ない技が発動するときまとめ
・プレイヤー用の記述を弄ってない
・↑はcmdでは出来ているが各ステートでは出来ていない
(例えばジャンプキャンセルや追加入力技をその技のステートに記述してる場合がある)
・ジャンプなどがでる場合、その処置をしていない
・誤記述

70MUGEN名無しさん:2009/02/02(月) 21:48:41 ID:hqJW.HME
movetime設定したヘルパーと設定してないヘルパーを出して時間を計測
2つのヘルパーの時間差が30前後だったら暗転と判断
AIに暗転返しさせるならこんな感じだろうか
ヘルパー枠2個使ってまですることなのかは微妙だが

71otto:2009/02/02(月) 23:27:53 ID:eefam7cM
俺の改変したダークアルクmk2に暗転返し記述書いてあった気がする
ヘルパー一個で済ませたやつ

72MUGEN名無しさん:2009/02/03(火) 03:27:12 ID:aCoA571A
やべえ蓬莱氏の説明書とか読んでたら
俺でもAI作れそうな気分になってきた
そんな暇があるなら動画の続き作れって話なんだけども

73MUGEN名無しさん:2009/02/03(火) 11:14:44 ID:5A9Nxuiw
>>71
確かによく考えたらvaradd側にmovetimeでよかったわ
本体のvarが余りまくってるキャラならヘルパー自体必要ないな

74MUGEN名無しさん:2009/02/04(水) 19:28:06 ID:bYIo/ouw
なんかたまにキャラが浮くと思ったら
statetype != Aがstatetype 1= Aになってた\(^o^)/

75MUGEN名無しさん:2009/02/06(金) 14:39:14 ID:aUbJKuVU
古いAI直してたらtrrigerってのを発見した

>>72
完全に一から始める人対象だからね
動画うp主でも作れるようになって損は無いと思う
使えるキャラの選択肢が格段に増えるから

76MUGEN名無しさん:2009/02/07(土) 22:27:01 ID:.JClrMG.
今溜めキャラのAI作っているんだが、溜め時間の考慮ってみんなしてる?
サマーとかはやっぱ屈→サマーってながれにしたほうがいいんだろうか?

77MUGEN名無しさん:2009/02/07(土) 23:25:57 ID:/kMEGZbM
人操作っぽくしたいなら溜めさせるべき
そうでないなら別に溜めなくてもおk

個人的に溜め無しはなんかあれなのでAIにも溜めさせるor溜めてるように見えるようにしてます

78MUGEN名無しさん:2009/02/07(土) 23:37:04 ID:IzkSl7vM
俺は溜めイカサマはしないようにしてるが・・・他の人はしてるのかね
コンボ中は考慮してるとかいう話はちらっと聞いたけど
記事にはしてあるので興味があったら俺の「鞄」に
もしくはクールのAI参照
1方向で二つ変数使ってるから他にいい方法があったらいいんだけどなぁ

絶対考慮しないほうが強いがな、出し放題だから
クールさんガチ遠距離できないからまだ全然方向性が見えてこない

79MUGEN名無しさん:2009/02/07(土) 23:46:45 ID:WFvZrQwY
statetype = Cの時間を計測して、一定以上じゃないと出せないようにしてる
SとかAになったらvarをリセットする
すげー適当だけどね

80MUGEN名無しさん:2009/02/08(日) 01:38:28 ID:xZFMQ8K6
>>77
>>78
>>79
やっぱりみんな考えてますね
少しやってみたのですが、対空サマーをぜんぜんしなくなるんですよね・・・
かといって完全待ちガイルにしたくはないのでむずかしいですね

81MUGEN名無しさん:2009/02/08(日) 17:08:51 ID:fvgn39Lg
いまだに立ち回りの制御の仕方がよく分からん・・・
記述入れてないのにわけわからん時にジャンプするし・・・・
どうすりゃいいんだ・・・

82MUGEN名無しさん:2009/02/08(日) 19:16:32 ID:wxc5UMMw
ジャンプ制御ならこれ入れたら絶対飛ばなくなる
[State -1]
type = ChangeState
value = 0
trigger1 = stateno=40
ctrl=1

ジャンプさせたい時は39なりAI用の作ればいいし

83MUGEN名無しさん:2009/02/08(日) 20:25:59 ID:fvgn39Lg
>>82
ほんとだすげぇ!
まじ有難う!!!

84MUGEN名無しさん:2009/02/08(日) 21:05:25 ID:AFmm2712
逆に絶対にしゃがまないようにする記述を教えてほしい。
いろいろ弄くったが、どうしても人操作に影響が出るんだが。

85otto:2009/02/08(日) 21:40:16 ID:m64gON9Q
state 10のchangeanimに
AI用変数が入ってない時のみにして
state10でAI用変数が入ってるときに0に戻ったらダメなんでしょうか

86MUGEN名無しさん:2009/02/08(日) 21:42:42 ID:Zr/5Quws
-2の常時監視ステートに

[State -1]
type = changestate
trigger1 = stateno = 10
trigger1 = ctrl
value = 0
ctrl = 1

テイルズキャラ作ってた時だが
これで通常しゃがみ省けたような気がする
ガードとかは…気合で頑張れ

87MUGEN名無しさん:2009/02/08(日) 21:48:48 ID:Zr/5Quws
あ、82と86人操作で不具合でないようにAIフラグ忘れないでね

88MUGEN名無しさん:2009/02/08(日) 21:52:15 ID:iwm8OuVk
var(*) ←これなんて読むの?バー?
読み方知らないと微妙に困ったりするよね

89MUGEN名無しさん:2009/02/08(日) 21:58:52 ID:QS9SvRak
最近はジャンプと歩きはAI専用ステート作ってやってるなあ
記述を2箇所に分けなくて済むから楽にもなるし
特に歩きは勝手に止まらない(本体側の歩き終了制御を受けない)みたいだから制御しやすい
wikiにもあったと思うけどジャンプなんかは完全制御すると動きがガチガチになる危険もあるってことで俺はしてないなぁ
強さを求めるなら必要にもなるけどね

それよりctrl=0にしないしゃがみ維持の方法はないものか・・・
専用ステートにしても立っちゃう
立ち属性でしゃがみアニメってわけにもいかないし、うーむむ

90MUGEN名無しさん:2009/02/08(日) 22:26:54 ID:Zr/5Quws
歩きは起き攻めぐらいだが、ジャンプは大体制御してる
コンボの拾い途中でジャンプされたりすると嫌だから

ctrl状態でしゃがませるだけなら上の逆でいける
[State -3]
type = changestate
trigger1 = stateno=12
value = 11

つか、今更ながら-2である必要は無かったな

91MUGEN名無しさん:2009/02/08(日) 22:43:58 ID:Zr/5Quws
補足、何度もスレ汚しごめんね

commonの11を使うと通常のAI動作に支障が出るので
statetype=C,ctrl=1のAI専用ステート333を用意するとして
(ステコンは解除用の0に飛ばすchangestateだけでいいや)
[State -3]
type = changestate
trigger1 = var(59)
trigger1 = prevstateno=333
trigger1 = stateno=12
value = 333

これでいけるだろう、たぶん

92MUGEN名無しさん:2009/02/08(日) 22:50:24 ID:QS9SvRak
>>90
それだとしゃがみアニメが複数枚あるキャラでは1枚目で固定になるから見た目がよろしくない場合があるんだよなー
そんなキャラみたことないけど

93MUGEN名無しさん:2009/02/08(日) 23:24:49 ID:Zr/5Quws
移行状態を強制的に戻してるだけだからtime=1のループになるね
KOFとかに居るかも<しゃがみ待機が複数アニメ

というわけで、一応対処法を考えてきた
anim11のanimelemを1F単位で全部分ける、11,2, 0,0, 2だったら
11,2, 0,0, 1
11,2, 0,0, 1
とする

例の333(任意の数値でいい)の中にこれ入れる
[State 40, 3]
type = ChangeAnim
trigger1 = time = 0
value = 11
elem = var(58)
[State 40, 3]
type = varset
trigger1 = var(58)>3;animの最大数
trigger1 = time = 0
var(58) = 0
[State 40, 3]
type = varadd
trigger1 = time = 0
var(58) = 1

当然animは仕様化した方に変更
これで見た目も改善できるとは思うが
ここまでしてやりたい人は居るのだろうかw

94MUGEN名無しさん:2009/02/08(日) 23:58:07 ID:AFmm2712
>>85
まず、state10にchangeanimがなかった・・・
>>86
どうやらこれで問題なさそうだ。ありがとう

95MUGEN名無しさん:2009/02/09(月) 18:58:50 ID:p4pO/Bp.
後から見直すと変な箇所があるな
var(58)>3→>=3
んで、リセットの記述も足りないし(prevstateno!=11でvarsetでいいかと)
anim書き変えなくてもvar(58)の値でelemを調整すれば済むし
しゃがみ待機が複数アニメ自体があまり無いから必要無いか

あと、夫氏(だよね?)のやり方でもできると思うよ
[State 10]
type = ChangeAnim
trigger1 = anim = 11
trigger1 = var(59)
value = 0
これでいいはず

96MUGEN名無しさん:2009/02/11(水) 06:10:55 ID:Bm9Xh0E6
初めてのAIだからトリカゴっぽいのさせようと思ったけど、
昇竜うたねえwwwwどの距離でも波動拳ばっか打ってるwww

あとガードしないなあ。やっぱり人の記述丸写しじゃあダメだな

97MUGEN名無しさん:2009/02/11(水) 13:50:37 ID:ohNjiW7o
>>96
ガードはcommonステートの方もいじればガードしてくれる
平成㌢氏のマニュアル参照すれば楽かと

98MUGEN名無しさん:2009/02/12(木) 05:58:04 ID:E1PaJ7P2
wikiと回廊→慣れてきたら平成㌢氏

こういう手順で行くと飲み込み早いと思うよ。
完全な初心者に平成さんの説明書はちょいと難しい。

99MUGEN名無しさん:2009/02/12(木) 17:20:17 ID:EsREqETM
>>98
あーごめん、たしかにそうかも・・・
俺も最初見てなにこれってなったからなぁ
でも一度自分で形作ってしまうとそれをテンプレで使いまわし出来るから便利
慣れてきたらキャラごとに工夫していけばいいかも
私はいまだに使いまわしてますが・・・

100MUGEN名無しさん:2009/02/13(金) 16:22:35 ID:w69i1ZsQ
0F投げってAIだと対応不可?

101MUGEN名無しさん:2009/02/13(金) 20:31:25 ID:d8tdpucg
対応不可だろうね。
読みでそのフレームに投げ無敵もしくは空中判定をつけておくくらいしかないと思う。

102MUGEN名無しさん:2009/02/13(金) 21:06:56 ID:75Mtkrps
画面端に追い込まれると
なーーんもできずボッコンボッコンにされるのはどうしてだろ

103MUGEN名無しさん:2009/02/13(金) 22:54:47 ID:w69i1ZsQ
>>101
やっぱりダメか
固めからの崩しで接近必須のキャラなんだが、
0F投げ持ってる奴相手だと逆に投げられちまって相性が悪くなるのよね
かといって崩しにいかないとテンポ悪くなるし

104MUGEN名無しさん:2009/02/13(金) 23:22:37 ID:dHTtZYZQ
>>100
2P側に限って反応出来るとかどっかで見たような気が

105MUGEN名無しさん:2009/02/13(金) 23:41:08 ID:k1P6McoQ
>>104
投げはまだ分からない
2P側にEnemyNear,Time=0の記述を書いて1P側に小パン連打させた場合だと
2発目には反応してくれた
あと原因は良く分からないがリセット用の記述にEnemyNear,Time>0があるとちゃんと狙い通りに働いてくれたけど
無かった場合は問答無用でリセットする動きが見られた
勿論これも2P側

これらから推測すると処理の順番が1P→2Pだから

///GameTime=300
1P:StateAに移行(0F目)
2P:EnemyNear,Time=0反応、StateBに移行(0F目)

///GameTime=301
1P:StateA(1F目)、EnemyNear,Time=0無反応
2P:StateB(1F目)

こうなって2P側だとTime=0=同一フレームにも反応できるのかもしれない
まあただの勘違いかもしれないけど

106MUGEN名無しさん:2009/02/14(土) 18:04:52 ID:C7DzLUgY
タッグでKOされてるキャラ座標を感知しない方法ってありますか?
敵の生存キャラとKOキャラが同距離にいると、KOキャラ座標認識して無反応だったりしてイヤンな感じ

107MUGEN名無しさん:2009/02/14(土) 20:04:35 ID:gEwHlpxw
>>106
相手のライフが0以上とか記述しとけばよかったような

108106:2009/02/14(土) 23:19:58 ID:D7Q3dshQ
>>107
そうらしいんですけどね〜
ヅァギ氏のAIとか見るとenemynear(var(*))となっており、
敵生存でenemynear(0)、敵KOでenemynear(1)となっていて、
そうすると確かに死体に反応せず、生きてる方の状況を読み込むみたいなんですが、
自分が原理をイマイチ理解出来て無くて。
これって、生きている敵にID付けるみたいなモンなんですかね?

109MUGEN名無しさん:2009/02/14(土) 23:32:23 ID:AiU8wVJ2
EnemyNear(0)で1番近い敵、EnemyNear(1)で2番目に近い敵なので
1番近い敵がKOされてる場合varに1を入れて死体に反応しないようにしてるわけです

110MUGEN名無しさん:2009/02/14(土) 23:47:43 ID:3w/6fJzo
>>102
端では距離計算とかがおかしくなるらしいから、その関係かも。
たとえば端に向かってダッシュすると、端より向こうに出ることは無いけど、
トリガー関係では端にめり込んだような判定になっている・・・ような気がする

>>108
ヘルパーにも参照させることを考えているなら、playerIDをお勧めするよ
enemynear(変数)だと、ヘルパーの位置から見た最近の敵になっちゃうから

111MUGEN名無しさん:2009/02/15(日) 00:40:44 ID:V/bjNFOU
ヘルパー関係ってほとんど分からないから自分で試してないんだけど、こういう事はいけるのだろうか?


自分の前方に見えないヘルパーを配置
そのヘルパーに攻撃判定を付ける。
この攻撃判定は当たってもダメージ無し、仰け反り無し。
この攻撃判定に相手が入ったら(hitしたら)
特定の技を発動とか。

[state-3]
type = changestate
value = 0000
TriggerAll = var(59)=1
Trigger1 = Helper(1230),movehit

みたいな感じかな。
ただ、こういうのやるとヘルパーの攻撃判定が相手の飛び道具を消したりしないかが心配。

112MUGEN名無しさん:2009/02/15(日) 00:47:54 ID:BlCGgT4Q
>>111
それもHitDefが出ているには変わりないから
HitOverride相手とかで挙動に影響しちゃうよ

113106:2009/02/15(日) 01:30:59 ID:pe/pkdzc
>>109
なるほど
最初にサーチしたKOキャラを強制的に2番にする事で、
1番を再サーチして生存キャラを認識させる訳ですか…
情報ありがとうございます

>>110
ID関係はあんまり使わないからまだ今一判って無いんです;
hitdefのID付加とかも、ガードされてもID付いたりとかprojには適応されないとかで、
微妙に使いづらくて

114110:2009/02/15(日) 02:41:04 ID:it47M2qg
>>113
多分・・・だけど、何かを勘違いしている気がする。

まずenemynearについてだけど、意味としては>>109の通り。
最寄の敵がKO済みのときのみenemynear(1)を使うってするために、
変数を使ってるんだ。だから、敵が2番になるというより、自分が2番(enemynear(1))を
参照するようにするってこと。

んで、ID関係は割とわかりにくい。
例えば、helper(1000)とplayerid(1000)とtarget(1000)は同時に存在しうる(はず)
これに関しては「トリガー一覧」ってページに説明があるから、読んでみるといいと思う。
とりあえず、攻撃を当てたからといって、相手のIDがその攻撃のID番号になるって訳じゃない。
使い方だけを言えば、
var(*)=ifelse(!enemynear(0),alive&&numenemy>=2,enemynear(1),ID,enemynear(0),ID)
という感じ。これだと警告でるから、numenemyを使った方がいいかも

長文だけど勘弁。分かってたらごめんね

115106:2009/02/16(月) 01:16:20 ID:U8K3g.Q6
>>114
ありがとうw
projやヘルパーのID指定の用途の違いとかは大丈夫ですw

116MUGEN名無しさん:2009/02/17(火) 18:54:45 ID:pPZdhC7.
敵の飛び道具攻撃のステートNOを覚えて反撃するAIって卑怯かな;
飛び道具発生前に飛び道具が来ると確実に判るから、
反応速度次第でかなりエグイAIになる・・・

117MUGEN名無しさん:2009/02/17(火) 19:17:18 ID:97ZVqwDE
別にいいんじゃね
俺も今似たようなの作ってるし

118MUGEN名無しさん:2009/02/17(火) 23:53:06 ID:NkyxTCOo
中西姉妹のAIを作ろうと思ったんだが弓道の動かし方がよく分からない・・・
statedef調べてそのステートをAIに組ませたら剣道がいきなり弓道に変身して焦った

119MUGEN名無しさん:2009/02/18(水) 00:16:08 ID:uK3lBwMo
>>116,117
自重させないレベルは自分が強くしたいだけ強くすればいいと思うよ?
さすがにそれしかレベル設定できないってのはアレだけどw

>>118
触ったことないから違うかもしれないけど、
ishelper(****)を使って弓道用の記述をしたらいいんじゃないかな?
コマンドファイルの人操作用の記述をよく読んでみるべきかも

120MUGEN名無しさん:2009/02/19(木) 02:14:02 ID:r4OZl8iA
>>118
くそぅどこの姉妹か気になるじゃねぇか・・・俺もいろいろと失敗してるが

121MUGEN名無しさん:2009/02/19(木) 10:59:17 ID:/KH8ClnQ
いろいろな人のAI見ていると“Value =” の位置が一番前と一番後ろにある場合があるけどなんかちがうのですか?

122MUGEN名無しさん:2009/02/19(木) 14:49:21 ID:2mrP7nM2
特に違いは無い…と思う

123MUGEN名無しさん:2009/02/19(木) 22:16:28 ID:MnYlJYk2
効果は変わらないと思う
上にvalueを書いた方が、トリガーの追記作業が楽に感じる気がしてるってのと、
技名書いてるからvalue値が傍にあると覚え易い位かな

124otto:2009/02/21(土) 00:07:37 ID:ytmKEiGU
>>95
ですです
>>value
俺は基本的に下だなあ
その方が美しい気がしてね

125MUGEN名無しさん:2009/02/21(土) 02:32:04 ID:daSpcSh2
changestateはtypeの下
それ以外はtriggerの下だな

126MUGEN名無しさん:2009/02/21(土) 07:24:57 ID:Y4QzmzMk
俺とか全くこだわらないからcmdのコピペそのままだぜw

127MUGEN名無しさん:2009/02/22(日) 22:28:20 ID:dDcrvixA
>>118
弓道は本体のステートに依存せずに動くタイプだから弓道のHelperステートで直接制御しないといけないはず
他のゲームだとGGのエディとかEFZの舞あたりが似たような処理やってるから参考にしてみたら?
どっちもちゃんとしたAIあるし

128MUGEN名無しさん:2009/02/24(火) 21:42:30 ID:gJ.WjWlE
AIにしゃがみ溜め攻撃させる場合ってどう記述すればいいのでしょう?

;---------------------------------------------------------------------------
;しゃがみ溜め
[state -1]
type = varset
triggerall = var(59) >= 1
triggerall = var(54) = 0
trigger1 = statetype = C
v = 54
value = 40

;しゃがみ溜め リセット
[state -3, syagami Reset]
type = varadd
trigger1 = var(54) > 0
trigger2 = statetype != C
trigger3 = 溜め攻撃ステート
var(54) = -1


溜め技ステートに
triggerall = var(54) = 0
triggerall = statetype = C
を入れればいいんですか?

如何せん、見ててもちゃんとなってるかわからないんです(´・ω・`)

129MUGEN名無しさん:2009/02/24(火) 22:54:46 ID:/Hm3M7j6
>>128
その記述だとしゃがみをやめても-1され続けるようになってますよ

あとしゃがみの制御をしておかないとCPUが勝手に立ったりジャンプしたり歩いたりしてしまいます

こういう記述でもたぶんおk

;しゃがみ溜め
[State -1]
Type = VarAdd
triggerall = var(59)
trigger1 = statetype = C
V = 54
Value = 1

;溜めリセット
[State -1]
Type = VarSet
triggerall = var(59)
trigger1 = statetype != C
var(54) = 0

これで技のステートに
triggerall = var(54) > xx(お好きな数字)
を入れればおk

個人的には溜めてるように見えればきっちりフレーム通り溜めないでいいかなとは思ったり……
超反応イカサマーとか無理ゲー\(^o^)/

130MUGEN名無しさん:2009/02/24(火) 23:21:50 ID:HbsE.Y3w
歩きサマーとかしないようにするだけでも、それなりに貯めてるように見えるんじゃね?
ようするに、stateno != 100とかstateno !=20とかをタメ技のtriggerに入れるだけw

131MUGEN名無しさん:2009/02/25(水) 00:26:31 ID:0zhkEcvA
>>129
ありがとうございます。
だいたい、1秒掛かるか掛からないくらいが丁度いいですかね?

>>130
私もそれを試したのですが、
AIのしゃがみ制御してないせいで、一瞬しゃがんだ瞬間サマソーしてましたw
立ってる時とあまり変わらなかった。

132MUGEN名無しさん:2009/02/25(水) 00:54:08 ID:nJvpzJ5c
>>131
きっちり溜めさせたいならコマンドの数字そのままでおkですよ
command = ~20$〜ってなってたら
triggerall = var(54) >= 20
こんな感じです

133MUGEN名無しさん:2009/02/25(水) 22:28:27 ID:0zhkEcvA
>>132
アドバイスありがとうございます。
じゃあ、コマンド数字のままにしておこうかな。

134MUGEN名無しさん:2009/02/28(土) 07:14:43 ID:fsWSCZYo
平成㌢氏の説明書方式でAIを組もうと思っているのですが、
ステートAI仕様化に戸惑っています。
⑨氏の物も見させて頂いたのですがいまいち理解出来ません。
技のステートを「AI.txt」にコピペしてそれをAI仕様にするというやり方で
正しいのでしょうか?
あと、作っているのは承太郎のAIです。、風見氏の様にcmd内に記述を付けるのか、または
適当氏の様にAI.txtを作ってそこに記述していくのかというのはどちらがより精巧なAIになりますかね?
御意見頂きたいです。

135MUGEN名無しさん:2009/02/28(土) 10:04:43 ID:0MX8Fm3w
ステートAI仕様化ってのは、ctrl=1の時にmugenのCPUが何も記述が無くてもやってしまう、
ジャンプ(40)、歩き(20)、しゃがみ(12とか)を制御するためってのが最大の目的になる。
そのためには、
・ジャンプとかのステートに、AIフラグが立った状態で来たら立ちに戻す
・AI用のステートは番号を別にして用意し、AIはそちらを使うようにする
ってことをするのが一般的。
だから多分そのやり方でできると思うよ。

cmdファイル内でやるなら[statedef -1]の下でやることになるだろうし、
別に作るなら[statedef -3]の下で作ることになると思う。
前者と後者の違いは、ヘルパーに影響するかってくらいだから、精巧さとかは変わらないはず。
-1の方はtriggerall=!ishelperが必要になるからちょっと劣るといえるかな・・・
ただ、ヘルパー用の記述(操作可能な設置技とか)は-1の方でやるか、
ヘルパーのステートに直接記述しないといけないから気をつけてね

何か間違ってたらどなたか突っ込みよろです

136MUGEN名無しさん:2009/02/28(土) 11:16:55 ID:UrB9yjpQ
正直、平成さんのはAI初心者にはオススメ出来ない。
ただ、AIがある程度分かるとあれ程優しく教えてる説明書もそう無いからオススメ。

大体は>>135さんの通りだけど、
多分AI作成初心者だよね?この様子じゃまだ1個も完成させた事が無いね。
なら、最初は「どっちが精巧か」を考えずに、説明書に従ってやるといいよ。

初心者はどうしても「上の方ばかり」を見てしまうからね。当時の自分もそうだけど。
ちなみに、AI記述的な精巧さってのは、自分の腕に関わってくる事だろうからこれはどちらがイイとは言えない。

後、平成氏や風見氏の記述は複雑に書かれてるから初心者の人には理解し辛いと思う

137MUGEN名無しさん:2009/02/28(土) 19:59:42 ID:riJ7jwFk
AI始めるなら蓬莱氏か流れ者氏がセンチ氏とかよりちょっと基礎よりで解説してるのがあるよ

あと、AI.txtとかやるのは良いけど、キャラによってはマイナスステートでエフェクト処理してたりする
これがあると別にファイル作ってもうまくいかないからそこ調べてからだね
cmdファイルに直接書けば絶対間違いないけど、まぁそこはほとんど趣味

あと、多分、-1でも-3でも反応はほぼ同じ
せいぜい>>135が書いたようなことくらい
一応処理順があるようだからコンボ用変数とかがつつかれてると少し反応に差が出るかも、くらい
究極まで突き詰めない限り気にするほどのことはないと思う

138MUGEN名無しさん:2009/02/28(土) 20:12:32 ID:hMWmsohk
>>135-136
お返答ありがとうございます
書いていただいた内容と違うようですが
AI.txtに Statedef -1で作っているのですが
問題があるのでしょうか?

139135:2009/02/28(土) 20:34:59 ID:0MX8Fm3w
>>138
大体(というか全てか?)のキャラは-1で人操作用のコマンドを記述してるから、
cmdファイル内にstatedef -1が残ったままだとAI.txtの方の記述がオーバーライド
されて無効になっちゃうと思う。コマンド記述ごと移植すればいけるかな・・・?
ただ、コマンド設定記述だけは必ずcmdの方に無いといけないから気をつけてね
まあ、とりあえず別にファイルを作ったなら[statedef -3]でやるのが一般的だね。
その際に、元々のstatedef -3にある記述もしっかり移植することを忘れないように。


>>137
俺も処理順って何となくでしか分かって無いんだよね
とりあえず-1→-2→-3ってことで良いのかな?
あとヘルパーとプレイヤーとの兼ね合いとか、1P側と2P側の優先順とかもあるという噂を聞くし
微妙なタイミングのズレのせいで不安になることもあるから、誰か詳しい人いないかな〜って思う

140MUGEN名無しさん:2009/02/28(土) 21:05:24 ID:hMWmsohk
皆さんありがとうございます。
色々参照してやっていきます。

141MUGEN名無しさん:2009/02/28(土) 21:07:41 ID:jsi3DN.o
>>139
本体とヘルパーの両方に同じ処理をやらせてみたらタイミングに差が生じたので、
本体とヘルパーでは本体の方が処理順が早いのはほぼ確実
また1Pと2Pだと1P側の処理の方が早いのもほぼ確実
ここから推測するとID順に処理していると見ると自然だと思います
ただTeamSideでも判断しているかもしれないので完全にはわかりません
TeamSideに関係無く無差別でID順なのか、それともTeamSideで分けた後にその区分内でのID順なのか

142135:2009/02/28(土) 23:26:10 ID:0MX8Fm3w
>>140
がんばって。
後はやっぱ他人のAI記述を読んでみるってのも基本かなあ

>>141
どもです。
IDにそんな意味が・・・

143MUGEN名無しさん:2009/03/01(日) 00:48:52 ID:nIcLxJBA
ニコmugenwikiの初心者用AI→⑨氏=蓬莱氏=流れ者氏→平成㌢氏作AI説明書
0からAI作成を始める場合、↑順番に読んでいくのがお勧め

144MUGEN名無しさん:2009/03/01(日) 07:22:01 ID:QRfzS/Jc
>>139
処理順は-3,-2,-1ですよ

-3
 ↓(ステート移行/記述終了)
-2
 ↓(ステート移行/記述終了)
-1
 ↓(ステート移行/記述終了)
0〜
 ↓(記述終了/ステート移行してもTIMEは進まない)
次のID

多分こんな感じです
たとえば-2でコンボフラグをセットして、-3でAIを実行させていると
-1でAIを実行している場合に比べてAIの処理が1フレーム遅れるはず

145MUGEN名無しさん:2009/03/01(日) 08:56:37 ID:Di2FG8aA
>>144
そっか、そうすりゃ小さいほうからってことで自然ですね。
情報感謝です。

146MUGEN名無しさん:2009/03/01(日) 14:28:52 ID:4KkV4gGc
処理の優先順位って-2,-3,-1だったと思うんだけどな

それはさておき
AIフラグは同じ監視ステートの中では
行動記述より上に置いた方がいいことになるのかね

147MUGEN名無しさん:2009/03/01(日) 17:15:50 ID:h9iYVJhA
同状況下での優先順位は判らんケド、どんな状況下でもって意味でなら確かに-2が一番高い
-2はステート奪われても機能するが、-3はステート奪われると機能しないから
-1と-3の違いは判らん

>>146
記述は上から順に読み込みされるから上が無難

148MUGEN名無しさん:2009/03/01(日) 18:37:52 ID:QRfzS/Jc
-3,-2,-1だよ
AppendToClipboardで確かめれば-3/-2/-1の順に表示されるのが解る

149MUGEN名無しさん:2009/03/01(日) 23:46:53 ID:fVce3ZyU
ひとつ聞きたいんだが、AIに関する記述が多いとAIの動作速度って鈍るのか?

tokume氏とかel氏とかが記述をコンパクトにしてるようなんだが意味とかあるのか判断の方法がわからなくてな

150MUGEN名無しさん:2009/03/02(月) 00:00:15 ID:.G5fpX9Y
>>145
M3氏(白レンアレンジやリーク・FのAIの人)の飛び道具制御もなかなか役に立ちます。
>>143
ニコmugenwikiの初心者用AI→平成㌢氏作AI説明書→⑨氏=蓬莱氏=流れ者氏=M3氏でいったから挫折しまくった。orz

151MUGEN名無しさん:2009/03/02(月) 08:04:53 ID:ZvGaVdjY
やっと膝をひとつ打たせられるようになりました\(^0^)/

152MUGEN名無しさん:2009/03/02(月) 09:01:14 ID:1cpXowSI
>>149
全体の動作が遅くなるかもしれないだけで、自分だけ鈍ることはないな

153MUGEN名無しさん:2009/03/04(水) 13:30:39 ID:2smmEdkw
>>152
情報サンクス

154MUGEN名無しさん:2009/03/05(木) 00:09:48 ID:P64fTZcI
var(*):=var(*)
って記述使う人ってどのくらいいるのかな?
便利だけど、あんまり見たことが無いから気になった

155154:2009/03/05(木) 01:08:20 ID:P64fTZcI
そして上のだと分かりにくいことに気づく。
var(*):=x
って感じね。右辺は何でもいいし

156MUGEN名無しさん:2009/03/06(金) 01:07:55 ID:RTwVqf7M
:=という記述を始めて見た俺に隙は無かった

157154:2009/03/06(金) 10:19:05 ID:dkM2nZ1Y
俺も初めて見たのがP.O.T.S.氏のキャラだった。
少なくとも国産のキャラでは見たことがないんだよね。
一人でも需要があるなら・・・ということで一応説明すると、
トリガーとかパラメータとかにvar(1):=3とか書いた時点で、var(1)に3が格納される。
ついでに、式全体の値が3と評価されることになる・・・というか、実験したところ、そうらしい。
全く同じ条件で、複数の変数に値を入れたいときとか、値を入れ替えたいときとか、ステート遷移の記憶に便利。
[State -1]
type = ChangeState
trigger1 = ****(任意の条件)
trigger1 = var(1):=var(2)||1
trigger1 = var(58):=10
みたいな書き方ができる。(左端に||1をつけるのは、右辺が0だった場合でも真にするためね)

因みに俺の場合は、専用の変数を1つ用意して、
キャンセルルートを早い段階で決めたりするのに使ってます。(対空からとか、牽制からとか、予備動作が必要な技とかね)
こうすると、最初のトリガーをしっかり設定しておけば、後は変数の値に従ってつないでいけばいいから、
記述が少なくてすむ・・・はず。
難点はタッグ時の応用力が下がることくらいかな?
まあその場合はタッグ時向けのコンボとかを考えればおk

長々と書いたけど、間違いがあったらすま(ry

158154:2009/03/06(金) 10:36:02 ID:dkM2nZ1Y
右と左を間違えた・・・だと・・・?

「左端に||1〜」ってのは、「右端に||1〜」の間違いです。
分かると思うけど、一応。
でもこれAI製作より、キャラ製作の方に役立つものな気がしてきた

159MUGEN名無しさん:2009/03/06(金) 14:26:39 ID:qtvOqZ5o
要するにtriggerの中でvarsetができると?

160154:2009/03/06(金) 16:31:48 ID:dkM2nZ1Y
>>159
さいです。
今のところこれを使って不具合が出たことは無いから、大丈夫なはず。

161MUGEN名無しさん:2009/03/06(金) 22:14:42 ID:Q5jTmhs2
ステートの処理順調べてみた。間違いはあるかもしれない。
ヘルパーとかとの関連は調べてないけど。
あと初心者用記事も更新。
ttp://cid-587c144b2a5be3a8.skydrive.live.com/browse.aspx/%e5%85%ac%e9%96%8b

俺はこれからも基本的に-1ステートにAI記述をしようと思う

162154:2009/03/06(金) 23:38:10 ID:dkM2nZ1Y
乙です。確かにゲージ増加判断が1F遅れるか・・・
まあ、慣れちゃったから俺は-3で行こうかな。

あと、-3ステートのpause系無視ってのは本当だろうか?
俺がやった時は普通に影響受けたんだけど

163MUGEN名無しさん:2009/03/07(土) 01:31:52 ID:/3D3yLUU
自身のmovetimeが関係してるとか聞いたことあるな

164MUGEN名無しさん:2009/03/08(日) 03:05:21 ID:50itVMIA
ジャンプ制御やダッシュは㌢氏のままで良いのかな?
他のAI製作者のその部分を見てもよく分からないんですがが

165MUGEN名無しさん:2009/03/08(日) 03:52:15 ID:huvBWFBA
下段ガードを殆どしないからJ・J氏のAIのガードを平成㌢氏位に固くするにはどうすれば良いかな?

166MUGEN名無しさん:2009/03/08(日) 05:08:13 ID:9n7XtIvA
俺、ガードは⑨氏のテンプレ丸写しでやってるわ。
とりあえずそれで不都合ないし・・・

167MUGEN名無しさん:2009/03/08(日) 11:26:48 ID:huvBWFBA
その手があったか
㌢氏のコピペしたら解決した

168MUGEN名無しさん:2009/03/08(日) 19:24:38 ID:Me4o8NS2
ひとつ聞きたいんだが、commonファイルにある
value = 130 + (statetype = C) + (statetype = A)*2
これはどういう意味なんだ?

和訳KFMとかも調べたんだが、載ってなくてサッパリだ。

169MUGEN名無しさん:2009/03/08(日) 21:17:57 ID:c3h6v20o
ガードのステートが↓である事を頭に入れておいて・・・だ
130 立ちガード
131 屈みガード
132 空中ガード

で、()内の条件をを満たす場合"1"なので
まぁつまりStateTypeがSなら130、Cなら131、Aなら132
がvalueの値になる
・・・これでわかるかな?

170MUGEN名無しさん:2009/03/08(日) 22:47:17 ID:Me4o8NS2
そういうことだったのかありがとう!
いやぁ何足せばいいんだかさっぱりだったがようやく理解できたぜ。

171MUGEN名無しさん:2009/03/08(日) 22:47:37 ID:CRPFeOQY
相手が背中を向けているときに攻撃させたいんですが
どういった記述をすればいいんでしょうか?

172MUGEN名無しさん:2009/03/08(日) 23:57:31 ID:VTXeQWpg
自分と敵のfacingを使う
ただし、P2bodydistXトリガーが機能しない時がある

173MUGEN名無しさん:2009/03/09(月) 00:01:43 ID:Kj8R9J0.
facingが1のときに右を向いている状態
facingが-1のときに左を向いている状態
これを相手と自分のをEnemynearでも使って同じであるかどうかを判別して
同じである状態でp2bodydist Xがプラス方向の状態なら相手の後ろにいることになると思うが

174MUGEN名無しさん:2009/03/09(月) 11:32:08 ID:6RX4q0zU
ここ1ヶ月ぐらい分からなくて試行錯誤し続けてた
小ジャンプをさせると必ず垂直ジャンプになってしまう現象がようやく解決した…
小ジャンプステートに飛ばす記述にanimtimeを加えて限定してやらんとダメだったのね

175MUGEN名無しさん:2009/03/09(月) 12:26:26 ID:R.8dnnVk
(Facing * (Enemynear,Facing) = 1)&&(P2bodydist X > 0 ||(Backedgedist < Enemynear,Backedgedist)
でいけたと思うが

176MUGEN名無しさん:2009/03/09(月) 15:21:44 ID:R.8dnnVk
↑すまん最後に”)”をつけ忘れた

177171:2009/03/09(月) 21:39:57 ID:ruU.Qw7Y
ありがとうございます
レスを参考にしていろいろ試行錯誤してなんとかなりました

178MUGEN名無しさん:2009/03/14(土) 21:39:08 ID:JMaCnymE
自分で作ってみたAIがエラメを垂れ流しで困ってるんですが

"キャラ名" in state ○○ has no target with hit ID -1

って何が原因で起きてるんでしょうか?
AI自体の挙動におかしいところは見られないんで
いまいち解決方法がわからないんですが…。

179MUGEN名無しさん:2009/03/14(土) 21:54:45 ID:qWFpmBJc
「Targetが存在するか分からないのに勝手に存在するって決め付けてんじゃねーよ」ってこと
要するにNumTargetが無いので
TriggerX = NumTarget
TriggerX = Target,〜
という形にしないといけない

180MUGEN名無しさん:2009/03/14(土) 23:49:17 ID:JMaCnymE
>>179
たしかにtarget,〜系にnumtargetがついていませんでした。
target,backedgebodydistで壁に押し込んでる判断材料にしたんですが、
おかげでうまく組み上げられそうです。
どうもありがとうございました。

181MUGEN名無しさん:2009/03/15(日) 00:46:34 ID:9uloR/K6
ヘルパーと絡んだ処理順やら調べたですよ
細かい真偽は保証できないけど。
ttp://cid-587c144b2a5be3a8.skydrive.live.com/browse.aspx/%e5%85%ac%e9%96%8b

182MUGEN名無しさん:2009/03/16(月) 10:05:44 ID:9yDiy3Dk
>>181
遅ればせながら乙!

183MUGEN名無しさん:2009/03/16(月) 15:40:14 ID:fs6KZAko
思ったんだが、p2bodydist X は自分と相手の当たり判定が中心軸から一番遠い前側の部分から
相手の上と同じ条件の部分を図るんだよな?

ってことは攻撃中とかは攻撃してる腕とかに判定があった場合そこからまた計測されるのか?

いま正確な距離を測りたいんだが、airファイルの中から計測しても自分の当たり判定の先端からの計測なのかよくわからないんだ。

184MUGEN名無しさん:2009/03/16(月) 16:50:58 ID:crE3XINg
当たり判定じゃなくて、ぶつかり判定のはずだから、Sizeのground.frontやground.backからじゃないのか?
確かめてないけどw

185MUGEN名無しさん:2009/03/16(月) 21:33:05 ID:fs6KZAko
>>184
そいつの存在を忘れていたぜ。計算してみたらぴったりだったぜ
サンキュー

186MUGEN名無しさん:2009/03/17(火) 11:50:06 ID:ghpXXkqo
攻撃発生時間のみに反応させて当身技をさせたいのですが上手くいきません

[State -3]
Type = VarAdd
Trigger1 = EnemyNear,HitDefAttr = SCA
V = 57
Value = 1
IgnoreHitPause = 1

[State -3]
Type = VarSet
TriggerAll = Var(57) = 0
Trigger1 = EnemyNear,HitDefAttr != SCA
V = 57
Value = 0
IgnoreHitPause = 1



[State -1, Triple Kung Fu Palm]
type = ChangeState
value = 1600
TriggerAll = Var(59) > 0
TriggerAll = StateType != A
TriggerAll = P2StateType != A
TriggerAll = P2MoveType = A
TriggerAll = EnemyNear,HitDefAttr = SC, NA
TriggerAll = Ctrl
TriggerAll =Var(57)=1
Trigger1 = P2BodyDist X= [-5,100]

⑨氏のサイトを見てこの記述をしてみたのですがキャラが動かないです
間違っているのはどこですか?

187MUGEN名無しさん:2009/03/17(火) 12:38:57 ID:GF6rjb.A
突っ込みどころが多いが順々に説明する。

まず、varaddだから、敵が攻撃モーション中は1が追加され続けるからvar(57)が1である時間はすぐ終わる。

そしてvarsetの記述条件にvar(57) = 0が入ってるからこの記述は一切動かない。

よって、var(57)は1以上の値になり続けるから当身を使わない。

どっかまちがってたら誰か補足たのむ

188MUGEN名無しさん:2009/03/17(火) 12:41:50 ID:b3dS.DS2
Var(57)をリセットする条件にVar(57) = 0入れたらリセットでけへんがな
あとHitDefAttr !=って書き方は使用不可能だったような気が

でもHitDefは一度読まれると攻撃判定がその時点では存在してなくても(攻撃判定がすでに消えてても)MoveType = Aで同一ステートにいる限り有効なはずだから、
HitDefAttrが有効な時がイコール攻撃判定発生時ではないよ

189MUGEN名無しさん:2009/03/17(火) 14:41:34 ID:odUVbZew
varリセットは単純にenemy,movetype != Aとmovetype = H とかで良い
まぁvarをセットする理由がそもそも判らんけど。
敵のtimeを調べるつもりならenemy,time等を使って、
通常技、必殺技のそれぞれ標準的な発生F未満時のみチェンステさせれば良い

190MUGEN名無しさん:2009/03/18(水) 10:19:06 ID:z3f3.ZmA
当身を完全に使わせるのは学習機能かP2Nameでも使わないと難しいと思うよ。
AIには、相手の攻撃が届くのかと、相手の攻撃判定がいつ発生するのかを予測することは出来ないから。
あと、例え発生1F(モーション開始と同時)の当身でも、相手の攻撃発生と確実に同時に使わせるってのは無理だと思う。
攻撃発生した1F後ならできるけど

191MUGEN名無しさん:2009/03/18(水) 16:21:03 ID:zeOiKDXU
世界発現後の承太郎のAIが無かったので作ってみようと思いました。
で、ニコmugenWikiや回廊などを参考にして組んでみたのですが、
敵と距離が開いたときに何故かガクガク動きながら接近しようとします。
ctrl+dで小刻みにダッシュしている事は把握したんですが直し方が解りません。
念のため[state -3]に作ったAIのダッシュの部分の記述にver(59)=0を加えてみたのですが変化はありませんでした
コレは[state 100]側に何か記述を加えなくてはいけないのでしょうか?
初心者丸出しの質問で申し訳ありませんが出来ればご教授願いたいです

192MUGEN名無しさん:2009/03/18(水) 17:05:10 ID:z3f3.ZmA
ダッシュ→停止を繰り返してるんだろうから、
state100側でダッシュを停止しないような記述を加えてあげればいいと思う

193MUGEN名無しさん:2009/03/18(水) 17:14:50 ID:M4Ig8Lkw
>>191
気まぐれ猫(M3氏のサイト)にAIにちゃんとダッシュさせる方法が載ってた気がする。

194MUGEN名無しさん:2009/03/18(水) 19:01:43 ID:h4vC2ni6
ダッシュがうまくいかないなんて
皆が既に100万回くらい通ってきた場所じゃないか?

195186:2009/03/18(水) 21:58:49 ID:4646QFKM
完全に当身を成功させるのは無理なんですね
みなさんアドバイスありがとうございます
いろいろ勉強不足でした

196MUGEN名無しさん:2009/03/18(水) 22:04:18 ID:F6WH4eVk
いや、確実にする方法はある。
しかしここに書き込むには量があまりにもなので書かないけどね。
分子氏の解説文読めば何とかなる。

197MUGEN名無しさん:2009/03/18(水) 22:45:08 ID:zeOiKDXU
>>192
>>193
ありがとうございます
なんとか直ったみたいです

198MUGEN名無しさん:2009/03/18(水) 23:15:43 ID:fYnm/UnI
平成㌢氏のAI起動ヘルパーってトレーニング中に暴発するんだが
暴発を止める方法をご存知な方はいらっしゃるだろうか?
ヘルパー無しでいくと起動がかなり遅くなってしまう・・・

199MUGEN名無しさん:2009/03/18(水) 23:43:34 ID:cwFLiuuw
>>198
俺のちょっと危険な方法でよければ
最近まで欠陥だらけだったんだけど

ttp://cid-587c144b2a5be3a8.skydrive.live.com/browse.aspx/%e5%85%ac%e9%96%8b
ここの技術メモ
ジャンヌ・クール・タロスは最新版で搭載してるけど他は欠陥品のままだ・・・

200MUGEN名無しさん:2009/03/19(木) 00:23:07 ID:lqfA.r5U
>>196
やっぱこういうのまとめてくれてる人っているのね。情報thx
これを改良できれば、飛び道具をしっかり当身できるAIが作れる気もしてきた。
ただ、相当な記述量になるからよっぽど当身が大事なキャラとか以外はやりたくないなw

にしてもやっぱ初っ端から確実にってのは無理だよね。。。
まあそうでないと、バランスが崩壊するどころの話じゃ無くなるけど

201MUGEN名無しさん:2009/03/19(木) 11:50:01 ID:7F1RHJy6
>>199 参考にさせていただきます。
つーかAI作ってたら29時間たってたわ。

202MUGEN名無しさん:2009/03/20(金) 04:31:13 ID:sBRPaq9.
素晴らしい集中力じゃないか

203MUGEN名無しさん:2009/03/22(日) 04:03:22 ID:E6FCPfFo
質問なんですけどMUGENって勝手に補正はいりますけど
その計算式ってどうやったらわかりますか?

204MUGEN名無しさん:2009/03/22(日) 09:16:40 ID:RasB4uLs
>>203
質問が雑で訳がわからない。
どの補正のことを言っているんだよ。

205MUGEN名無しさん:2009/03/22(日) 13:58:18 ID:4auXhuG.
MUGEN側で入る補正っていうとMulsetとかかね
SuperPause使ったときの。
その辺だったら月華キャラで有名なあの人のブログ見れば詳しく書いてある
あとはFall中の補正だけど、こっちはあったかなあ?
多分計算自体は同じだと思うけどよく知らん

206MUGEN名無しさん:2009/03/22(日) 17:39:27 ID:Go7C/Zjw
>>203
>>205が言いたい事を簡単にまとめると

相手の攻撃を一度見る。
それのanimtimeや発生Fとかをvarに記憶させる。
そしたら記憶したvarから相手の技の情報を引き出して
当身を使わせる。って感じじゃないかな。

だとすると膨大なvarも必要だし、一度技を見る必要がある。

207MUGEN名無しさん:2009/03/23(月) 14:43:10 ID:bB2duJLY
>>206
安価が謎だけど、学習のことだよね?
そんな感じでやると、ヘルパーの変数丸々全部使えば、一応20個くらいの技は覚えられるはず。
でもすごく面倒だし、弾幕相手には間違った覚え方をしちゃう。
ついでにそっちの言うとおり、それぞれの技を受けないといけないから危険だしね


ところで今飛び道具めくりについて研究中なんだけど、
mugenって一度ガード始めると本体が裏に回っても
飛び道具がある限り(inguarddistがある限り)、入力逆にしなくてもガードし続けることができるよね。
ということは起き攻めのときくらいしか狙えないってことになるかな?

208MUGEN名無しさん:2009/03/23(月) 15:36:48 ID:A6pNVKmE
mugenのめくりって、相手が振り向くことが前提じゃなかったっけ?
ガード方向は相手じゃなくて、向いてる方向依存とか。
一応p1facingつかえば、二発目移行はガードを混乱させられるけど。

209MUGEN名無しさん:2009/03/23(月) 16:56:23 ID:QY4VJzqk
流れを切ってしまって申し訳ないんですが
タッグモードで相手が両方生存していることを確認する方法ってないんでしょうか?
どちらか片方でも落ちてる場合は技を打たないように設定したいんですが。

210MUGEN名無しさん:2009/03/23(月) 19:17:38 ID:JCb72hfo
>>209
(Enemy(0),Alive)+(Enemy(NumEnemy=2),Alive)=2
これで両方生存フラグになると思う

211MUGEN名無しさん:2009/03/23(月) 22:11:01 ID:bB2duJLY
>>208
多分そうだと思うんだけど、
起き上がり直後は立ち状態で確実に相手の方を振り向いてくれるだろうから、
ガードするには裏表を見切らないといけなくなるかな、と。
対AIなら関係ないが、対人ならこれで崩せないかねえ

>>210
今までnumenemy=1とnumenemy>1で場合分けしていた俺にとっては目から鱗w

212MUGEN名無しさん:2009/03/24(火) 01:11:16 ID:Z1pTXH7g
>>210
返答ありがとうございます
無事に行動を制限できました
普通のAIは少しいじったことがありますが、タッグAIも特有の記述が必要で奥が深いですね

213MUGEN名無しさん:2009/03/25(水) 10:58:45 ID:5yvPiyvE
>>207ギコナビから書き込んだらギコナビはどうもスレとズレがあるのか順番がゴチャゴチャになってた。
正確には>>196-197です。

214MUGEN名無しさん:2009/03/26(木) 02:03:52 ID:frRzJRdQ
相手が吹っ飛んでるか、ダウンしてる時にゲージ溜めをしたいんだがどうも上手くいかない・・・
何か超高速でゲージ溜め→やめる→ゲージ溜め→・・・となってしまう・・・

215MUGEN名無しさん:2009/03/26(木) 02:42:56 ID:ANUd.8no
>>214
俺も同じことやった
実はStateType=Lのタイミングはかなり短い、特にAI相手だと
だから遠い位置、と一定速度以上、という条件で始めるといいかも
あとは追撃できない技を当てた直後。これは大門なんかがよくやってる

ちなみに起き上がりステート(5120)はStateType=LだがMoveType=I(Hじゃない)
溜めを止める条件にMoveType=Iを入れてると特にそうなる
だからこのステートの残り時間が少なくなったらやめるとか、動き出したら(MoveType=Aなんかで)止めるとかにするといい

216MUGEN名無しさん:2009/03/26(木) 13:59:43 ID:o4.6GD1A
[State -3]
Type = ChangeState
Value = 200
TriggerAll = Var(59) = 1
TriggerAll = Var(14) > 13
TriggerAll = StateType != A
trigger1 = p2bodydist X = [-10,50]
trigger1 = ctrl
ひとつ聞きたいんだが、これで技が発動しない理由わかる?
varは確認中なんだがどうしても技をやってくれない。
相手がなぜか攻撃モーション中に発動してくれるんだが。

217MUGEN名無しさん:2009/03/26(木) 16:41:16 ID:HJbY3cpc
ぱっと見た感じだと変数以外思いつかないな

218MUGEN名無しさん:2009/03/26(木) 18:29:47 ID:o4.6GD1A
ためしに
[State -3]
Type = ChangeState
Value = 200
TriggerAll = Var(59) = 1
TriggerAll = StateType != A
trigger1 = ctrl
としてみてんだが
これでも距離が離れると反応してくれなかったんだ立ちモーションでctrlなのも確認済みなんだが、
一定距離近づいたら振ってくれなくなるんだ

219MUGEN名無しさん:2009/03/26(木) 19:54:56 ID:b9WdDUKM
そこまで来るとあと疑う余地があるのはVar(59)だね。
知らないところで使用されてたりして1で固定されてないのかも。
クリップボードでVar(59)の値を確認してみるといいよ。

220MUGEN名無しさん:2009/03/27(金) 00:55:51 ID:tSNZV.aQ
ちょっとお聞きしたいのですが
trigger1 = StateNo = 1002
trigger1 = AnimElem = 10, < 0
となっている場合、state1002(必殺技でした)の
アニメが10を超えてからのトリガー、ということでいいのでしょうか
あと同じ行に;AnimElem = 6, < 5 とコメントアウトしてあるのが気になったので
これの補足の意味も知りたいです

221MUGEN名無しさん:2009/03/27(金) 01:00:14 ID:OPCWuzAs
考えてみるとこれもC言語なんだよね?

222214:2009/03/27(金) 04:10:51 ID:Gr4vZva6
[State -1,タメ]
Type = ChangeState
Value = 700
triggerall = Var(59) = 1 && roundstate=2
triggerall = StateType != A
triggerall = !inguarddist
triggerall = power<3000
trigger1 = ctrl || ( stateno = 100 )
trigger1 = p2Stateno = [5000,6000]



[State -1,タメ解除]
Type = ChangeState
Value = 710
triggerall = Var(59) = 1 && roundstate=2
triggerall = StateType != A
triggerall = !inguarddist
triggerall = ( stateno = 700 )
trigger1 = p2Stateno != [5000,6000]

こんな感じで組んだけどやっぱり超高速でゲージ溜め→やめる→ゲージ溜め→・・・
何がダメなんだろ・・・・

223MUGEN名無しさん:2009/03/27(金) 08:33:05 ID:WcZqEFJ.
>>222
溜めステート内の解除トリガーはどうなっている?
まさか操作時のままじゃあるまいな?
どうしても駄目なら、溜動作があるキャラを参考にすれば良い。

224MUGEN名無しさん:2009/03/28(土) 01:44:18 ID:guFyNW1U
>>220
結論から言うと、違う。
10枚目のアニメになって0フレーム以上経過して「いない」という意味
つまり9枚目のアニメ表示が終わる直前まで、ということになる
そこ「まで」という条件ということは無敵フレームの指定か何かかな
コメントアウトしてあるのは多分古い設定。何かの都合で前の設定に戻すときに困らないようにするため
絶対前の設定に戻さない、という確信がないときにそうやって残しとくのはプログラムの基本の一つよ

>>221
MUGEN本体はC言語だろうけどAI記述はC言語というよりBASIC

225224:2009/03/28(土) 04:41:52 ID:mwhPU3J2
>>224
いえこれは、cmdの超必欄にあったトリガーのうちの一つでした。
この場合キャンセル猶予ということになるのでしょうか

キャンセル猶予の場合、Animelemの数字か0の部分を大きくすればキャンセル受付時間が
伸びるってことでいいんですか?

226MUGEN名無しさん:2009/03/28(土) 12:32:34 ID:HwNmo2Wo
ひとつ聞きたいんだが、AIに絶対にガードさせない方法ってある?
ガードの記述書かなくてもなんか頻繁に使用するもので困ってるんだが
みんなどうやって比率落としてるんだ?

227MUGEN名無しさん:2009/03/28(土) 13:03:00 ID:e7HcxH4w
>>225
少しは自分で試せ
>>226
記述無くても、Inguarddist範囲に居る時にCPUが後ろ入れてるからじゃね?
嫌なら120or130に入ったら強制的に他のステートに飛ばす

228MUGEN名無しさん:2009/03/28(土) 14:09:41 ID:lVZwHiPw
>>226
[State -1]
Type = AssertSpecial
Trigger1 = 1
Flag = NoStandGuard
Flag2 = NoCrouchGuard
Flag3 = NoAirGuard

229MUGEN名無しさん:2009/03/28(土) 14:19:25 ID:HwNmo2Wo
>>227
なるほどそういう手があったか。
>>228
そんなステートコントローラーがあるとは知らなかった。ありがとう

230MUGEN名無しさん:2009/03/29(日) 23:46:17 ID:kCJXs3k6
聞きたいんだが、こっちの技がヒット&ガードした時の硬直差ってどうやって算出すんの?

231MUGEN名無しさん:2009/03/29(日) 23:52:30 ID:t9sBZaSY
ヒット時
自HitPauseTime - 相手HitPauseTime + HitTime - 硬直 + 1
ガード時
自Guard.PauseTime - 相手Guard.PauseTime + Guard.CtrlTime - 硬直 + 1
だと思う

232MUGEN名無しさん:2009/03/30(月) 00:33:18 ID:O3CyaqMk
成程、ありがとう

233MUGEN名無しさん:2009/03/30(月) 12:46:04 ID:fXmKB5Cc
>>232
空中ガード時やヒット時だったらctrltimeやhittime使えばいけるけど、
地上ガード時だとgethitvar(ctrltime)とgethitvar(hittime)の小さい方になるらしいから気をつけてね

234MUGEN名無しさん:2009/03/31(火) 08:49:16 ID:kjXg4qkQ
ステージのPos Xの最大値最小値を調べる方法ってありますか

235MUGEN名無しさん:2009/04/03(金) 14:23:08 ID:66s0fHxk
>>234
お手軽なトリガーは無い。
組み合わせででっち上げるか、代替案で何とかするか。
最大最小値を使って何をするかによっては、別の方法でも何とかなったりするし。
あと、sageないと悪目立ちするぞー。

236234:2009/04/04(土) 19:44:12 ID:4zNs6bwY
自己解決した

237MUGEN名無しさん:2009/04/05(日) 12:45:53 ID:dJutpQ5s
発生の遅い当身を起き上がりに使ってしまって相手の起き攻めを喰らってしまうのですが
起き上がりに自分側が必殺技を使わせないようにする方法ってありますか?

238sage:2009/04/05(日) 15:48:48 ID:0v1xUx5I
>>237
prevstateno!=[5100,5120]じゃだめ?

239MUGEN名無しさん:2009/04/05(日) 20:12:34 ID:FUyAdIY.
>>238
prevstatenoは本当に直前のだから、
CPU入力でしゃがんだりガードしたりしたらアウトになるね。
しっかりやりたいなら変数管理しないと駄目かと思われ

240MUGEN名無しさん:2009/04/05(日) 21:08:10 ID:9p1mvpYE
[State -3,倒れた]
Type = VarSet
Trigger1 = statetype = L
V = 57
Value = 1

[State -3,相手が起き上がってから攻撃してきた。]
Type = VarSet
Trigger1 = movetype = A
trigger1 = var(57) = 1
V = 57
Value = 0

これでvar(57)が1のときに当身を振るようにすれば起き攻め時の事故は消えるだろうけど
こんなことにvar使うのはもったいない気がする。

やるんなら、分子氏のとこの擬似学習使って相手のtime指定してやったほうが確実だと思う
time指定してるから起き攻めに暴発はないしな。
分子氏のだとヘルパーを大量に使いかねないが、最近だとWinnie氏の無頼さんだと
ヘルパーひとつでいくつも記憶してるな。
擬似学習の場合、飛び道具ヒット時に攻撃空ぶるとフレーム計測づれるのはやっぱりしょうがないよなぁ。
ヘルパーを完璧に個数計測する方法も未だ皆無だし。

241MUGEN名無しさん:2009/04/05(日) 21:10:28 ID:9p1mvpYE
[State -3,起き上がってから相手が攻撃してきた。]
Type = VarSet
Trigger1 = p2movetype = A
trigger1 = statetype != L
trigger1 = var(57) = 1
V = 57
Value = 0
すまん記述ミスったこれで問題ないはず。

242MUGEN名無しさん:2009/04/06(月) 10:49:41 ID:aW73uYyw
学習ねえ。
俺も自己流でつくってやって見てるけど、中下段学習以外はあんま有効じゃないんだよね。
どちらかというと、単純なトリガーを色々な状況を想定して組み合わせていった方が
少ない労力で効果がでかい感じ。

>>240
まあ確かにそれだけだともったいないかもね。
ただ俺の場合は、ガード直後の割り込み、リバサ、暴れ潰しとで兼用してるんだが、
そうすると結構有効だよ?
人間相手でもAI相手でも。初めから超反応前提なら意味無いけどね
あと、飛び道具当身とか無いなら、敵リダイレクトしてmovecontactでズレは防止できるんじゃまいか。

243MUGEN名無しさん:2009/04/06(月) 11:36:53 ID:nPU1bHnY
擬似学習は最終手段みたいなものだからねえ
それにヘルパーを使うのはVarが足りないからであって空きVarが多いならヘルパーも必要無いし
ちなみに擬似学習が最も脅威なのは触れずとも相手のHitDefの技の発生Fを記憶できること
ヘルパー1個で50個取得できるからメタ以外の何者でもない
まあリーチとかその辺は完全な取得は不可能なので封殺できるわけでも無いけど

>>240
Var(59)がAIフラグとして最大11、つまり2桁まで使うと仮定した場合
Trigger1 = !(Var(59)/100)
V = 59
Value = 100+Var(59)
とすれば別にVarを増やす必要は無いし、リセットするには
Trigger1 = Var(59)/100
V = 59
Value = Var(59)-100*(Var(59)/100)
とすればいい
Varは9桁までいけるから単純な1,0のスイッチならばVar1つで9個賄える
ちょっと工夫すれば27個賄えるけど
まあこの例でいくとレベル分けのトリガーがVar(59)=XじゃなくてVar(59)%100=Xになるけど

244MUGEN名無しさん:2009/04/07(火) 07:23:53 ID:5UxP.s.o
すいません、質問です。あるキャラのAIを組んでますが
まずコンボをやらせようと次のようにAIを組みました
;弱パンチ
[State -1, Stand LPunch]
type = ChangeState
value = 200
TriggerAll = Var(59) = 1
ignorehitpause = 1
trigger1 = statetype = S
trigger1 = ctrl
trigger1 = p2bodydist X <= 30

;中パンチ
[State -1, Stand MPunch]
type = ChangeState
value = 205
TriggerAll = Var(59) = 1
ignorehitpause = 1
trigger1 = p2bodydist X >= 16
trigger1 = statetype = S
trigger1 = ctrl
trigger1 = random <= 0
trigger2 = stateno = 200 && movehit

;強パンチ
[State -1, Stand skick]
type = ChangeState
value = 270
TriggerAll = Var(59) = 1
ignorehitpause = 1
triggerall = stateno != 100
trigger1 = statetype = S
trigger1 = ctrl
trigger1 = p2bodydist X >= 31
trigger1 = random <= 0
trigger2 = stateno = 205 && movehit

このように組んだ結果なぜかコンボはstateNo200→205→270の順ではなく
200→270となってしまいます。3つのステートのどれかひとつをなくしてしまえば
200→205、205→270とコンボはつながるのですが・・・

245MUGEN名無しさん:2009/04/07(火) 07:27:39 ID:GB8InO4Q
AIのChangeStateにignorehitpause=1は入れちゃだめだった気がする。
試したこと無いから、どういう処理になってるかは分からないけど

246MUGEN名無しさん:2009/04/07(火) 12:21:11 ID:JuG6RSYI
>>243
まあ、完璧にメタるのはよくないが、普段死に技になってる技を使わせるためくらいならいいんじゃない?
無頼さんのスウェーだって普通は反撃阻止のための後ろしか使わないしな。
ロックとかの当身とかに使わせるぐらいなら誰も文句言わないだろう。

247MUGEN名無しさん:2009/04/07(火) 13:08:34 ID:Ga8GLPYk
質問なんですがあるキャラの超必でこんな記述になってるんです。

triggerall = statetype != A
triggerall = ctrl || stateno = 40|| (StateNo=52 && Time>=2)
trigger1 = command = "コマンド名弱"
trigger1 = power >= 1000
trigger2 = command = "コマンド名強"
trigger2 = power >= 2000

ステート番号が同じな為、AI用の記述を書いても"コマンド名強"の方しか使ってくれません。
パワーゲージが1000でも強になってしまうので弱の方を使わせるにはどうしたらいいのでしょうか?

248MUGEN名無しさん:2009/04/07(火) 13:24:55 ID:Ga8GLPYk
AI用の記述はこんな感じです。

triggerall = var(59) = 1
triggerall = RoundState = 2
triggerall = statetype != A
triggerall = ctrl || stateno = 40|| (StateNo=52 && Time>=2)
triggerall = EnemyNear,StateType != A && EnemyNear,StateType != L
triggerall = EnemyNear,MoveType != H
triggerall = P2BodyDist X = [-5,30]
triggerall = P2stateno != 5120
triggerall = P2stateno != 5201
trigger1 = power >= 1000
trigger1 = Random = [1,400]
trigger2 = power >= 2000
trigger2 = Random = [1,400]

249MUGEN名無しさん:2009/04/07(火) 15:22:43 ID:Idjhem.k
同一ステートで1ゲージ版と2ゲージ版を一緒に処理してるなら、
どのコマンドでそのステートに飛んできたか判別するステコンがその超必ステート内に存在するはず
そこをいじればおk

250MUGEN名無しさん:2009/04/07(火) 18:37:39 ID:5UxP.s.o
>>244
すみません、解決しました。3つ目のステートにAnimelemNo()
記述したらうまく行きました

251MUGEN名無しさん:2009/04/07(火) 18:49:11 ID:daiLYdK.
拾いを
p2bodydist Yとp2movetype=H とp2statetype=Aでやってみたんだが上手くいかない・・・
何かいい方法はないかな?

252MUGEN名無しさん:2009/04/07(火) 21:10:59 ID:HouvAQEU
>>251
何が上手く行かないのかザックリ過ぎて判りづらい

253MUGEN名無しさん:2009/04/07(火) 21:53:52 ID:wdASdpio
>>251
どういう風に拾わせたいのか具体的な描写が無いと
アドバイスもし難いと思う

254MUGEN名無しさん:2009/04/07(火) 22:46:27 ID:dphQ0UGY
実際に拾う場面をトレモで再現して一時停止して
p2bodydistなりP2movetypeなり確認するしかないと思う
p2statetype=Aで自分地上のときでもp2bodydist Y>0の時とかあるし

255MUGEN名無しさん:2009/04/09(木) 12:35:22 ID:nuHgI9jg
AIスイッチ作ってて思ったんですがスイッチ用commandで仮に"a,b"と"a,b,a"を
入れたとしてそういう時ってコマンドかぶってるから
前者だけ入れとけば意味は同じなんですかね?それとも単に数が多ければ
多いだけ早くなるんでしょうか?

256MUGEN名無しさん:2009/04/09(木) 13:21:32 ID:b4g2Qf92
"a,b"と"a,b,a"ではコマンドは違うけどコマンド名が同じなら同じものとして扱われる。
AIの起動はコマンド名の数だけ早く起動する。
たしかこういうことだったと思う。

257MUGEN名無しさん:2009/04/09(木) 19:41:56 ID:nuHgI9jg
つまりコマンドの中身が同じでもコマンド名が異なれば別のものとして
扱われるということですか?

258MUGEN名無しさん:2009/04/10(金) 01:31:30 ID:.TE98b9I
>>252>>253>>254
すまん・・・遅れた・・・
とある技Aで2回拾った後、技Bで締めたいんだがどうにもこうにも・・・

259MUGEN名無しさん:2009/04/10(金) 11:25:39 ID:rQKw///Q
>>258
AがHITしたら専用varを加算して、そのvarが2の時にBを出させる
Aは2未満じゃないと出さないようにする

260MUGEN名無しさん:2009/04/10(金) 12:22:44 ID:8CLatXek
>>244
たぶん、
trigger2 = stateno = 205 && movehit
のMoveHitが205じゃなくて200のを継続して認識してるから、
205のTimeが0の段階でキャンセルされてる。
条件にTime加えると直るかも。

261MUGEN名無しさん:2009/04/10(金) 21:33:20 ID:.TE98b9I
>>259 こういうふうにしたんだがちゃんと動かない・・・何がダメなんだ・・・

[State -1, 2]
type = VarAdd
trigger1 = var(59) = 1
trigger1=stateno=(Aの技)
trigger1=movehit
var = 34
value = 1

[State -1, 2]
type = Varset
trigger1 = var(59) = 1
trigger1= p2movetype!=H
var(34) = 0

262MUGEN名無しさん:2009/04/10(金) 22:04:26 ID:B013TYCw
・movehitトリガーはヒット後何フレーム経ったかを返すトリガー
・trigger1 = movehitと書くとmovehit = 0でない限り常に有効
だからその方法だとvar(34)に入るのはAを何回当てたかではなくAヒット後の経過フレーム

263MUGEN名無しさん:2009/04/10(金) 22:45:37 ID:HEty6yRU
>>261
var使う時はクリップボードは要チェック

264MUGEN名無しさん:2009/04/10(金) 23:15:14 ID:0e3Pb9II
>>261
-1ってついてるからcmdファイルに書いてるんだと思うけど、ChangeStateより先に書かないと無視されたり反応が遅れたりする可能性があるぞ
それからリセット条件増やさないとタッグで割り込まれたときとかに硬直したりするかもしれない

265MUGEN名無しさん:2009/04/11(土) 10:23:12 ID:AVvwX876
>>262>>263>>264
どうも丁寧に有難うございます。
うーむ・・・つまりどうすればいいんだろうか・・・

266MUGEN名無しさん:2009/04/11(土) 13:59:37 ID:n18AHBsE
[State -1, 2]
type = VarAdd
trigger1 = var(59) = 1
trigger1 = stateno = (Aの技)
trigger1 = movehit = 1
var = 34
value = 1

[State -1, 2]
type = Varset
triggerall = var(59) = 1
trigger1 = p2movetype!=H
trigger2 = movetype = H  ;タッグ時に割り込まれた時用
trigger3 = stateno = (Bの技)
var(34) = 0

たぶんこんな感じ

267MUGEN名無しさん:2009/04/11(土) 18:30:48 ID:eMmDPUl2
もしくは、
[State -1, 2]
type = Varset
triggerall = var(59) = 1
trigger1 = p2movetype!=H
trigger2 = movetype = H
trigger3 = p2statetype=L
var(34) = 0
みたいなのを-3とか-1の一番上において、
Aの技の該当トリガーの最後尾にtrigger(*)=var(34):=var(34)+1、
それより前にtrigger(*)=var(34)<2、
Bの技のトリガーにtrigger(*)=var(34)>=2
みたいにしといても出来るよ。
コンボ用の変数は一つ作っとくとすごく楽になる

268MUGEN名無しさん:2009/04/12(日) 12:21:42 ID:zw5c5xQs
>>266>>267
おお!やっとできた!!!
本当に有難う!

269MUGEN名無しさん:2009/04/14(火) 22:24:55 ID:Pr8wEXBc
飛び道具で相手が仰け反ったとき攻撃を繋げたいんですが何かいい方法ないですか?
今飛び道具が当たったのをp2movetype = Hで試しているのですが、攻撃は繋がるのですが相手を仰け反らせる時間が長くて
同じ技をまただしてしまいガードされるか反撃食らってしまいます

270MUGEN名無しさん:2009/04/14(火) 23:52:08 ID:zI8GL36g
>>269
意味不明な部分がいくつかあるのはさておいて
とりあえず>>266>>267

P2MoveTypeだけで判断すると暴発しそうだから
飛び道具がヘルパー型ならそっちにMoveHitをトリガーにして本体のコンボフラグ立てさせるのはどうか
Projだとできるかどうかわからんな
飛び道具のMoveHitを感知できるならそれでフラグ立てるほうが簡単だと思う

271MUGEN名無しさん:2009/04/15(水) 01:20:05 ID:shnlbkp.
>>269
ProjHitTime(ID)つかってhit後何フレーム未満なら追撃する/しないで良いんでねーの?

272MUGEN名無しさん:2009/04/15(水) 14:09:06 ID:hLXEOQIk
できるなら仰け反り時間常時計算しとくのが一番さね

27368:2009/04/15(水) 22:04:47 ID:ghMmvTcg
↑悪い、動画張り忘れてた

ttp://dancingflower.net/aab/

274MUGEN名無しさん:2009/04/15(水) 22:29:57 ID:LSK0F5dA
273はスパムか。
クリックする前にアドレスググったらあっちこっちに張られてるな

275MUGEN名無しさん:2009/04/16(木) 16:33:15 ID:Hz1i8U.I
>>270
確かに分かりにくいです
すいません

>>271氏のProjHitTime(ID)つかってhit後何フレーム未満なら追撃する/しない、もしくは
>>272氏の仰け反り時間を計算する

といったものはどのような記述をすればいいんですか?

276271:2009/04/16(木) 17:19:14 ID:bAPnltT6
>>275
分かりにくいと思ったら、分かりやすいように説明し直してもらいたいところ・・・
語調だけ丁寧でも、それ相応の答えしかもらえないと思うよ

projhittime(ID)については、「トリガー一覧」を見てみれば分かるはず。
ヘルパー式の飛び道具なら、>>270の言う通りでできるはず。
俺の言ったのは・・・まあ慣れてないのならオススメしない。
hittimeとかfall.recovertimeの仕様を理解できたら、計算法を自分で考えてみると良いよ。

277MUGEN名無しさん:2009/04/16(木) 18:48:21 ID:s9HMvbF6
ここで質問してる人って自分で調べたり試したりをあまりしてない人が多い気がする。
ステートコントローラーやトリガーのサイト見れば大体はわかるし実際の効果は自分で色々実験してみればいい。
望んだものがないときは頭絞ってオリジナルのものを作り出すしかない。
それでもわからなかったらここに聞きにくればいいんじゃないかな?

278MUGEN名無しさん:2009/04/17(金) 11:59:01 ID:rSPsVILQ
>どのような記述
ここで貰うのは取っ掛かりのヒント、記述は自分で必死で考える、
ぐらいの気概で無いと、完成まで持たんぞー
あんまり繰り返すと
発案:あなた
CNS作成:mugenスレ
になっちまうし。

279MUGEN名無しさん:2009/04/17(金) 12:48:06 ID:mudg4HkA
次スレがあったらテンプレ作っとくのもひとつの手かもね。

280RMTハッピーゲームショップ:2009/04/17(金) 13:50:05 ID:sEtK30dM
新しいゲーム通貨<天地大乱-tenchitairan>販売登場。突然ですが申し訳ございません。
当ショップは主にオンラインゲーム通貨の販売を経営します。親切対応・安心取引・業界最低価格を目標として営業しております。

281やま:2009/04/19(日) 16:52:32 ID:uwNkGvMM
ttp://shinycafe.com/aab/
この鯖また落ちたな。
人気あるのか攻撃されてるのか知らんけど。
俺的には消えたんじゃなくって良かったw

282MUGEN名無しさん:2009/04/22(水) 16:37:33 ID:k1.aZ5nI
よくAIでタッグ用生死判別とあるのだが、Enemynear(Var())って
Var()が0,1のときに攻撃するかしないかを分けているようだがこの
メカニズムがわかる人います?

283MUGEN名無しさん:2009/04/22(水) 18:22:14 ID:vPB3IxGg
EnemyNearまたはEnemyNear(0)で一番近い敵
EnemyNear(1)で二番目に近い敵を参照する
EnemyNear(Var(*))と書いてVar(*)を状況に合わせて0か1か切り替えれば死体を無視できるというカラクリ

284MUGEN名無しさん:2009/04/22(水) 20:31:12 ID:k1.aZ5nI
>>283
なるほど、近くの奴が死んでたら遠くの奴を参照するというわけか。

285MUGEN名無しさん:2009/04/23(木) 16:31:23 ID:yP2wDN6s
自分はその技を使えるけど
CPUにはその技を使うことが出来ないようにする方法というのを
(例えば自分は波動拳がうてるけどCPUの時は使えないという方法)
知ってる方いらっしゃいませんか?ご教授お願いします。

286MUGEN名無しさん:2009/04/23(木) 18:09:49 ID:qvXhkaW.
ほぼすべてのAI製作講座に載ってる内容だから自分で調べろ

287MUGEN名無しさん:2009/04/27(月) 22:52:02 ID:N3sSogJ6
AIにジャンプキャンセルさせたいんだがどうしたらいいだろうか?

[State -1]
type = ChangeState
value = 40
triggerall = var(59)=1 && roundstate=2 && statetype !=A && ctrl
triggerall = (p2statetype!=L)
triggerall = !inguarddist
trigger1 = (ctrl) || (stateno = ジャンプキャンセルしたい技)
trigger1 = movecontact
ctrl = 1

で何でダメなんだろ・・・commonファイルにも
[State 40, 3]
type = VarSet
trigger1 = var(59) > 0
trigger1 = stateno = ジャンプキャンセルしたい技
trigger1 = movecontact
sysvar(1) = -1

ってしたのに全くしないし・・・

288MUGEN名無しさん:2009/04/27(月) 23:17:51 ID:tV852mA6
triggerall = ctrlとtriggerall = !inguarddist削ってみたら?

289MUGEN名無しさん:2009/04/27(月) 23:42:04 ID:N3sSogJ6
>>288
あっさりするようになってコーラ吹いた
本当に有難う!!

290MUGEN名無しさん:2009/04/29(水) 17:14:47 ID:cy.l6VrE
>>289
>>288の処理で何故解決したかをちゃんと理解してなきゃ意味無いぞ
あとdef40にチェンステ時のctrlは消して良い。
def40は基本ctrl=0
もしstatedef40をctrl=1に弄ってると、def40に移行しvelset→ctrl可能なので別ステートにvelsetされたまま移行されて、
動作バグなんて事も起きかねない

291MUGEN名無しさん:2009/04/29(水) 19:53:40 ID:nC6mQtDY
他の人の記述をコピペするだけじゃわからないことそのままになっちゃうから
まずは自分のわかる範囲で1から組み立てていった方がいいね。
意味のわからないトリガーは使わないか勉強してから使う。
教材用KFMみたいに、組み立て式の教材用AIとか作ったら需要あるのかな・・・

292MUGEN名無しさん:2009/04/29(水) 20:01:04 ID:vTXBdeUc
>>291
組み立て式と言うか順序立てて理解出来るのだといいかもしれないね。
今あるのって言ったら大抵はcns理解が少しでもないとついていくのがきついだろうし。
ステップアップタイプで説明してるサイトはあったかな…

293MUGEN名無しさん:2009/04/30(木) 00:55:16 ID:j/tAYv1U
>>291
Ai作ってみたい初心者には願っても見ない物ですので是非ともお願いします。

294MUGEN名無しさん:2009/05/01(金) 14:42:15 ID:Yp0fMj/o
AI用教材KFMか、おもしろそうだな。
俺も作ろうかな。
varの中身替えて次のステップに進むって感じのをさ。
>>291さんが作るんならやめておくが

295MUGEN名無しさん:2009/05/08(金) 14:24:32 ID:M8gKMlA2
既に使われてるvarの機能とかを調べる場合って皆どうやってんだ?
正直面倒だわ何に使われてるか訳分からんわでどうしたもんだか・・・

296MUGEN名無しさん:2009/05/08(金) 16:01:02 ID:VA/1jrYU
>>295
適当なcns開いてvarsetで検索
これで基本は大体解かる。

見てもわかんないやつはvar(X)で検索して使われるタイミングを考える。
またはデバッグの表示に追加して対戦時どんな風に中身が変わっていくかを判断する。

これで大体は解かると思うが。

297MUGEN名無しさん:2009/05/08(金) 18:39:42 ID:M8gKMlA2
ああ、やっぱ基本そんな感じなのね

298MUGEN名無しさん:2009/05/09(土) 07:33:37 ID:YrAZXDXo
ラウンドごとにAIが切れてしまうのって
何が原因なんだろう・・・特にそんな記述をした覚えはないんだけどなあ
やはり1から勉強しなおすか・・・

299271:2009/05/09(土) 09:28:22 ID:9ecKPpp6
つpersistindex

300MUGEN名無しさん:2009/05/09(土) 10:26:41 ID:VxI0JInI
なんとかvar(X):=の有効な使い方無いかねぇ。
今使ってる方法は
技を使ったら1にして何らかの行動に分岐させるとか
そのくらいしか使い道が分からないんだよな。
何か他に面白い使い方してる人います?

301MUGEN名無しさん:2009/05/09(土) 11:17:46 ID:XUA5oaDw
ジャンプの前後判定に使ってみたりとか
強弱をvarで管理してる技に使ってみたりとか
投げ分けに使ってみたりとか
ステート来た直後にvarで分岐するタイプの行動に専用のステート作らないで済むという使い方が

まあ使えるキャラは限られるけど。
そして自分で使ったことは無いという

302299:2009/05/09(土) 12:03:55 ID:9ecKPpp6
ごめん名前欄消し忘れてた。271じゃなかったです
俺の場合は>>301の使い方に加えて、変数同士の値を入れ替えたいときと、
特定の一連の行動を取らせたいときに使ってる。
たとえば、ダッシュ慣性つけてジャンプして飛び込みとかね

varsetやvaradd使うより記述量ずっと減らせる場合が多いから、よく使ってます

303MUGEN名無しさん:2009/05/09(土) 14:16:22 ID:XCksLApU
>>301
強弱をvarで管理してる技に使ってみたりとか
投げ分けに使ってみたりとか

すいません、その仕組み教えてもらえませんか?

304MUGEN名無しさん:2009/05/09(土) 14:32:31 ID:XUA5oaDw
>>303
varで強弱管理してる必殺技ステート見ると、最初の方に入力したコマンドに応じて分岐してるvarsetがあるはず。
これをAI時無効になるようにしておいて、
AIのchangestateのトリガー内に”var(強弱管理変数) := 任意の強さ”を入れておけばおk
投げ分けも似たような感じだがこっちは別にステート内に入れといても対して変わらんかな

305MUGEN名無しさん:2009/05/09(土) 18:18:50 ID:XCksLApU
今、悪咲氏のキャラのcns見てたらvar管理に強弱のvarがあったので見てみましたら
[State 1100, VarSet]
type = VarSet
trigger1 = Time = 0
var(X) = ifelse(root,command = "必殺技名3", 2, ifelse(root,command = "必殺技名2", 1, 0))
とあったんですけどこのトリガー「var(X):=」と違ってて今いちよく・・
度々すいません、「var(X):=」の意味教えてもらえます?
後、投げの使い分けってザンギエフだと同じ1回転コマンドでもパンチとキックで技が変わるって意味でしょうか?

306MUGEN名無しさん:2009/05/09(土) 20:38:35 ID:MvzPFnmk
使用varはMUGEN Var Changerってツールで簡単に分かるよ

307MUGEN名無しさん:2009/05/09(土) 22:34:50 ID:XUA5oaDw
>>305
var(X):=については>>157
投げ分けは通常投げの方向選択のことね。格ゲーの基本的な用語だよ

308MUGEN名無しさん:2009/05/09(土) 23:03:24 ID:XCksLApU
なるほど「var(X):=」はvarの中に値を格納出来るんですね。こんなトリガーあったのか・・
投げ分けは左右使い分けって意味だったんですね、勉強になりました。
どうもです。

309MUGEN名無しさん:2009/05/10(日) 00:51:07 ID:3XyreQRM
まだ使ったことないけどAIコンボルートの制御に便利そうだね。
var(50)をAIコンボ用とすると

[state -3,AI]
type = Changestate
value = 220
triggerall = stateno = 210 && movehit
trigger1 = random%2 = 0
trigger1 = var(50) := 1
trigger2 = random%2 = 1
trigger2 = var(50) := 2

これでvar(50)=1とvar(50)=2の2つのルートに分岐できるしかなり記述が楽になるね。
今度導入してみよう…

310MUGEN名無しさん:2009/05/10(日) 01:18:56 ID:B2YRT9bs
>>306
確かあれ精度がいまいちなのに注意しないといけない。
アフロン氏のキャラで比べてみたら使用している
Varが出てこなかった。
だけど大体使用して無いVarわかるからアレ参考になるな。
Tatsu氏ありがとう

311MUGEN名無しさん:2009/05/10(日) 12:22:54 ID:B2YRT9bs
相手のAnimelemNoを調べる方法ってある?

312MUGEN名無しさん:2009/05/10(日) 13:57:54 ID:6pg8NlgI
平成さんのトキのAIレベルを変更しようとしたらエラー吐き出すようになってしまった…
昨日までは何ともなくてバックアップ上書きしてももう一回レベル変更するとまたエラー
AIレベル元に戻してもエラー吐くし
なんかTriggerAllって所がおかしいとかなんとか
昨日まで大丈夫だったのになんでだろう

313MUGEN名無しさん:2009/05/10(日) 14:44:14 ID:ByALLfVw
つ自動改行設定

314MUGEN名無しさん:2009/05/10(日) 19:16:58 ID:L1XdQUjg
メモ帳の人に限らず、
テキストエディタの自動改行の設定は切っておいた方がいいね

315MUGEN名無しさん:2009/05/11(月) 15:17:54 ID:L87HqnvU
前にAI教材kfmの話しが出ていたが、実は海外にあった。

316MUGEN名無しさん:2009/05/11(月) 19:13:19 ID:GEbSnoKw
ちょっと自分でもAI作ってみようと思ってあちこち調べて一通り立ち回りとかの記述は理解したんだがコンボがよく解らん…
同じ技の記述をいくつも作ってるのはtriggerallの条件変えるためなの?
>>291さんAI教材用kfm真面目に頼んますorz
それと参考になるかと思って㌢氏トキのAI覘いてみたんだが、コンボ用と相手の無敵・アーマー状態判別用の変数がfvarである理由がよく分からんのです
アレってvarじゃ駄目なん?
質問ばっかりでスンマセン…

317MUGEN名無しさん:2009/05/11(月) 20:23:59 ID:ADdIjaO.
あんまり初期から他人のAI参考にし過ぎると自爆すると思うぞ
まずはバグまみれだろうと弱かろうと自分で一個完成させれば、そこから見えてくるものがあると思う
他人のAI参考にするのはその後。

318MUGEN名無しさん:2009/05/11(月) 20:27:20 ID:Ls6CFHxc
>>291に反応がないから、そろそろ作るべきなんだろうか・・・?
同じ記述をいくつも作ってるキャラというのが気になるな。
commandがトリガーの中に入ってるのが、プレイヤー入力用のchangestateだから
まとめてしまえばいい話だから、普通はまとまっているはずなんだがな。
まあ、何であれcommandがトリガー内にある部分の条件では発動には間違いはないはず。
コンボはキャンセルが必要なものであれば、移行先のchangeステートでctrlが入っていない
条件が大方キャンセル条件になっている。
キャンセルが必要のない場合は、距離とかrandomで分けて別の行動が発動しなければ特別気にする必要はない。

varでもfvarでも問題はない、ただp2nameを使っている分対策内容が多くなってきたら、
パターンも増えるので小数点以下の値から、条件を分けることができるので、
varよりも使い勝手がいいからという理由だと思う。

319MUGEN名無しさん:2009/05/11(月) 22:16:00 ID:wUoJ/lC2
>>318
プレイヤー用記述のことだとは書かれてないような気がするが・・・


なんにせよ、こういうプログラミング的作業でモノを分割する理由は大抵、その「分割する」のが目的
それの意図は「明確化する」ため
コップに水を半分入れて、その上から静かに色水をいれたらきっちり分かれるけど、ばさっと入れたりつついていると混ざってしまう
こっちの作業もおんなじようなもん。同じ括りにあれこれ入れてつつきまわすと、ほとんどの人はそのうちどれが何だかわからなくなる
コメント挟んでおけばそれなりにわかるけど、根っこから分けておけば間違いない
まとめてしまうのは100%以上に完成してからでよろし。

あと、AIでは「優先順位」を付けるためにやる
弱Pで相手の技硬直に差込む記述を入れるとして、それをガードやらより後に記述するとガードが優先されるから意味が無い
だから必要なだけ早い位置に書くんだけど、そこに牽制弱Pの記述をくっつけると牽制しまくったりする
こういうのはTriggerAllに入れる条件もごっそり違ったりするから、分けたほうがむしろ簡潔になることもある
それにコンボ用記述ならコンボフラグ変数をAllに入れてたりするから、そこに立ち回り用の記述入れても機能しない

全く同じ記述が二つあるなら・・・そりゃなんかのミスだろう、と、思う。よ?
まあ、プレイヤー用記述にはまとめてよくね?ってのは割とある。俺は慣例みたいなもんだと思って放置。

320MUGEN名無しさん:2009/05/11(月) 23:11:29 ID:GEbSnoKw
>>317-319
お返事どーもです
>>317
>まずはバグまみれだろうと弱かろうと自分で一個完成させれば、そこから見えてくるものがあると思う
現状敵に向かってダッシュ→何かしらの攻撃連打→ゲージ溜まったら蝶必使おうとしてchangestateを2500回繰り返してエラー吐いて落ちるだけなんだぜ
エラーの修正は多分溜め技の方にAI用の記述が無いせいだと思うんだけどコンボの方はよく分からなくてorz
>>318
説明不足でスンマセン>>319の指摘のとーり同じ技がいくつもあるのはAI用の記述の方っすわ
あとfvarの方が小数点以下の値から条件分ける事が出来るって書いてあるけど対策が必要な技って無敵技とかガー不技とかアーマー付加位しかないような
実際㌢氏とか風見氏のAIだと1~3の三つしか使ってなかったみたいだからコレがfvarである必要性ってあるんかな?と思って質問したんですわ
>>319の人が言ってる優先順位ってのは記述を上から読んでいくから多く出したい技はなるべく上の方に〜って㌢氏の説明書に書いてあったアレ?
一応元の記述に従って蝶必→必殺→通常の順に書き込んで(AIだからそもそも複雑なコマンド技を上に持ってくる必要が無いのは解ってるんだけども)振る確立は各種トリガーで制限してるんだけどコンボ用ってのはどの辺に書き込めばいいのか…
一番上に書き込んでコンボ用の変数で制御すればいいのかとも思ったんだけどそもそもコンボ用の変数の記述が全く解らないんですががががが
何かレス沢山貰って心苦しいんだけどコンボ制御のvarについて詳しく教えてくれるか解りやすく解説してくれるページの説明とかあったら誘導お願いしたいっす

321MUGEN名無しさん:2009/05/12(火) 00:24:07 ID:sTkHj6Lo
>>320
ああ、そーいうことね。
てっきり技発動用の記述がたくさん散らばってるかと思ってしまったぜ。
2500roopは、そのあとに書いてあるステートナンバーに何度も一瞬で行き来してるってエラー
多分エラーの改善法は予想と違うはず。
コンボ用の記述はガードのあとぐらいでいい。
多分Winnie氏の煉のAI見たほうが早いと思う。
10のコンボルートをヘルパーのvarを使って統制していて、きれいに似たような記述が連なってるからわかりやすいと思う。
ちなみに⑨氏のサイトのBBSにあるやつね。他のは確認してないから、なんともいえないけど。

322MUGEN名無しさん:2009/05/12(火) 02:13:58 ID:FSByiC6k
良く分からんがTriggerAll = StateNo!=2500じゃだめなのか?

323MUGEN名無しさん:2009/05/12(火) 11:00:05 ID:O/EWMVGs
AIを作ってkfmと戦わせてみたんですが、相手に勝って勝利ポーズの後、次のラウンドに進まなくなってしまいました。
ボタンを押してもダメでした。
相手が勝った時や自分で動かせる時は大丈夫なのでAIが原因なのは間違いないんですけど・・・

324291:2009/05/12(火) 15:44:22 ID:0.zaCUUM
すみません、しばらくここを覗いていなかったもので;
今考えているのはキャラだけで教材を作るのは難しいと思ったので、
教材用のキャラと合わせて1からAI完成までを手引きするようなページを私のサイトに作ろうかと思っています。
ただそれだと元の「AI教材用キャラを作る」という趣旨から外れてしまうので、
他に作成を考えている方がいればぜひ作っていただきたいと思います。

325MUGEN名無しさん:2009/05/12(火) 18:03:30 ID:sTkHj6Lo
>>324
わかった、製作しようと思う、がそこそこ忙しい+自分のAIの更新とかもあるので夏休みくらいにできるかもしれない。

一応理解しているから、擬似学習のやり方を軽く解説してみたり、相手の落下速度の計算なんかも加えようかと思う。

326MUGEN名無しさん:2009/05/12(火) 22:38:33 ID:Zw9cKTMg
2500ループの原因はほぼChangeStateの移行先と元のステートが同じになってること
俺は書き間違いで131→131やっちゃって起きた
場所は確実に0以上のステートのどこか。・・・のはず。
ひょっとして溜め持続のある技で溜め部分に戻ろうとしてない?

>>320
コンボは普通立ち回りとかの汎用記述より前。
ガードは人によって一番最後だったりもするからキャラの立ち回りによる
!InguardDistを片っ端からトリガーに入れとけば最終的にガードするから、、切り返しが強いカウンター型のキャラだとそうなる
優先順位もそうだが状況が限定的な行動も先に書かないと他の記述に食われて出なくなりやすい


ふーむ、そろそろ基礎・初級だけじゃなく中級講座も必要になってきたかな
・・・まあ、俺のAIは必死になっても弱いけども
ニートになれたらすぐにでも作るのだが。

327MUGEN名無しさん:2009/05/12(火) 23:30:42 ID:CYB//MGg
>>321
Winnie氏の煉クンのAIは丁度手元にあったんで見てみたけど確かに解りやすいね
キャンセル条件に変数使ってるのは⑨氏のキャラの特徴っぽいけど何でだろうか
>>326
なるほど参考になるっす
ガン攻めキャラなんでガードは下の方に記述してあったんだけど位置変える必要は無いよね多分。
それとchangestateの移行先のステートの記述はdestroyselfなんだ
他も探してみたけど同じステートに飛ばしてるのは無かったわ
とりあえず応急措置でAIが使ったときにmugen落ちた技の記述のキャンセル条件のトリガーにvar(59)=0を追加してみた
正直コレで解決してるのかよく分からないし何か不具合が出たら怖いんだけど知識不足なんで大した事は出来ないorz

328MUGEN名無しさん:2009/05/12(火) 23:55:56 ID:KkZKPRH.
>>327
本人では無いけど、Varでやると管理が凄い楽なんだ
一々MoveHitとかTimeとか個別に書かなくても全部の技にVar(2)〜って書くだけだし

329MUGEN名無しさん:2009/05/13(水) 14:06:22 ID:jp/xMn4Y
>>320
>記述を上から読んでいくから多く出したい技はなるべく上の方に
多分蛇足だと思うけど、一応補足。
ChangeStateが実行されると、その後の命令はスキップされるので、
例えば最上部に記述した技を確率低めに設定していた場合、
それが実行さえされれば、後に記述した技は確率100%であっても実行されない。

>322
あるStateNoに、2500回以上ループしてるって意味なんで、それだと違う。
あと、例えば本当にState2500だったとして、ループを防ぐなら
triggerall = PrevStateNo !=2500
の方がいいかも。

>323
つRoundNotOver

>327
・本当にdestroyselfのStateに飛んでいるか?
・destroyself自体が作動しているか?
・常時監視Stateと通常Stateで往復していないか?
すぐ思いつく原因はこれぐらいかな?
あと、一つ気になったのは、超必出そうとしてloopエラーで、
飛び先がdestroyselfって事は、loopしてるのは
超必で呼び出したHelperなんだよね?

330MUGEN名無しさん:2009/05/13(水) 23:20:08 ID:9W3f2fr.
ところで、AI説明の元となるキャラが居たほうがいいと思うんだが、誰がいいと思う?
とりあえず、コンボゲーのキャラは非コンボゲーのキャラよりやってること(システム)が多いだけなんで、
現在AIが無いハニーを元にしようと思うんだが、逆に⑨氏のキャンセル条件以外での場合はわかりにくい
可能性もあるので、なんか他に候補になるキャラない?
できれば改変自由のキャラで

331MUGEN名無しさん:2009/05/14(木) 02:20:59 ID:0NYalAPY
1024byte氏のワラキアとかは?
もしくは腐レ雅氏の悪天草。っつってもサムスピはコンボゲーじゃないか
あと、デフォでAI入ってるけど夫氏のキャラは全部改変公開自由だった気がする

332MUGEN名無しさん:2009/05/14(木) 09:21:05 ID:tlxfbA8A
カンフーマンでいいと思う

333MUGEN名無しさん:2009/05/15(金) 14:46:00 ID:DjzbAZcA
アダムスキーさんのヨハンとかどうですか?

334MUGEN名無しさん:2009/05/15(金) 19:50:50 ID:ixhb4wKo
>>331
下に書く理由を考慮するとワラキアはちょっと外れてもらうことにした。
天草は使わせてもらおうと思う。ストライカー的にもちょうどいい。

>>332
kfmだとどうも仕様が少ない気がする。改変物は改変物でたくさんいるけどね。
何より勉強していたころモチベがぜんぜん上がらなかった記憶が・・・
やっぱりどこかしら演出って重要だよね。

>>333
その案もいただいておく

いろいろ考えた結果いくらシステムが多いといえどシステムが違っちゃ意味が無いと思い予定変更
AI公開している人でもやり方が完璧ではない(微妙に条件が違う)
人とかも見たので、いっそのこと少しでも仕様の違う作品は何かしら解説を入れるべきだと思えてきたので

とりあえず、一作品づつ考えてみた

KOF 悩み中
MOW 悩み中
メルブラ ⑨氏ワルク
BBB ⑨氏ハニー
GG 悩み中
3rd GM氏ケン
カプエス H氏庵
MVC 悩み中
サムスピ 腐レ雅氏悪天草
ジョジョ y.y氏rei氏パッチ入り承太郎
EFZ 586氏繭
ヴァンパイア 3㌶氏ビシャモン
月華 inadaf氏製作の誰か許可はあり
NBC アフロン氏本気カラテ
豪傑寺 悩み中
ワーヒー Mounser氏フウマ
アルカナハート 悩み中
ワクワク7 NHK氏ティセ
北斗の拳 悩み中
BASARA 悩み中
レイドラ あだむすきー氏ヨハン

とりあえず予定、なんども言うが予定
この考えが実行できれば知識の収束も高まるだろうし完璧を目指した結果が
この量なので実行できるかは未定。
面子はAI被りが嫌いな人が多いから、試しに作ってみても公開したくなくなる気を
できるだけ消したいため。

面子に文句がある場合はどしどし言ってくれ。追加なり変更なり受け付ける。
とりあえず、ほぼ全共通事項を現在Openofficeにまとめて、それを第一段階として公開する予定
その後上記のキャラを題材にして説明するって形でやっていこうと思う。

長文失敬

335MUGEN名無しさん:2009/05/15(金) 22:36:10 ID:htga39ug
月華はinadaf氏のキャラに拘らなくてもいいんじゃないかな
虻蜂氏の天野なんかは改変許可出てる
虹蜂氏はMOWのカインも改変許可出してるし使っちゃえば?
BASARAだったらrei氏のホンダムとか
GGは厨忍氏アレンジチップが改変公開自由
北斗は原作再現キャラがいないしキャラ数自体があんまり…
作るんだったらアフロン氏のキャラがいいんじゃないの?
つかアフロン氏は月華のかがみんとBASARAの慶次と北斗の聖帝&レイとkofキャラ大量に作ってるし結構枠埋まるかと
MvCは海外の製作者が多いし英語苦手だからよく分からんけどSludge氏のシュマちゃんがオープンソースで改変許可不要
オイラのmugenに入ってるキャラだとこんなところかね
すまんが豪傑寺とアルカナキャラはまだ入れてないから分からない…
期待してるんでざっと調べてみたわ
参考になれば嬉しいんだけど

336MUGEN名無しさん:2009/05/18(月) 00:16:23 ID:nmMFjN4o
ちょっと教えていただきたい
相手が受け身を取れるか取れないかって、どこで制御してるんだろう
あるキャラのAIの最終調整してて
コンボ中に空中受け身で反確取られる技が異常に多いことに気付いたから
いくつか受け身不能にしたい技があるんだけど、どこをいじればいいのか分からない

ちなみに本体の方の改変許可はもらってるので大丈夫

337MUGEN名無しさん:2009/05/18(月) 01:00:25 ID:nmMFjN4o
申し訳ナイ、自己解決した

338MUGEN名無しさん:2009/05/23(土) 13:28:26 ID:gQ5E5b1k
>>335
遅くなったが、月華がinadaf氏のなのは、AIに氏自体も迷ってるところがあるから、
作る意欲がある人が居ればいいかと思ったんだ。
一応デフォルトでAiが無いのが望ましいので除いてはいるが、どうしてもなさそうなら、
挙げてくれたキャラで書くことにするわ。
北斗はrei氏パッチレイが望ましいが、承太郎のパッチに許可出してるが、reiのパッチにその辺の
事書いてなかったから、メールして聞いてみようかな。
アフロン氏のキャラにはダウン処理にいろいろあって、できるだけ避けようかと思ってたりする、
第一にみんなすぐAI作る気もするしね。
シュマチャンを忘れていたぜ。候補として考えておくわ。

339MUGEN名無しさん:2009/05/24(日) 12:09:06 ID:hbNBnPGA
>>338
あーなるほど。
アフロン氏のキャラ使わないのはそういう理由なのね
そんじゃKoFはGONZO-氏のルガールかイグニスでいいんじゃないかと
それとジョジョはスタンドモードの仕様の違いあったりするけど承太郎だけで大丈夫?
あと上にあったキャンセル条件云々の理由で⑨氏のキャラなんかも参考になるかどうか解らん気がする
MBの改変自由キャラはルージュノワール氏の遠野とかかなあ。1024byte氏ワラキアが駄目なら
BBBならゆーり氏のくなぎなんかも大丈夫だった筈
⑨氏のキャラは確かによく出来てるけど他の人のキャラのAI作る時の為にちょっと候補に入れるくらいは考えてもいいんじゃないかと

340MUGEN名無しさん:2009/05/24(日) 12:29:14 ID:qjE3zt8k
KOFのだけどjin氏のはダメなん?

341MUGEN名無しさん:2009/05/24(日) 13:54:40 ID:EvWRL2e2
>>339
kofは確か、ヅァギ氏と若本氏のAIがあったね。
ジョジョは確かにそうではあるが、現状改変自由なキャラはスタンドモードつきでは
ポルポル君とジョセフしか居ないと思うんだが、他に居たっけ?
確かにそれもあるな。じゃあ現在確かAIの無いDABA氏のキャラを使わせてもらおう。
BBBキャラは、ハニーとデビル大吾以外全部AI入ってるのよね。
でも、今落とせそうにないし、クナギを候補に入れておく。
>>340
JIN氏のでもまったく問題はないが、AIが別途AIパッチが確か全キャラあったはず。
むしろ仕様的には理想的な部類に入る。

342MUGEN名無しさん:2009/05/24(日) 14:49:18 ID:qjE3zt8k
>>341
色々調べた結果、確かに全員入ってるっぽいね。
最近AIパッチの更新がない人もいたから頭から抜け落ちてた。

改変自由とされてる一覧の中からMouser氏はどうだろ?
あの人も全部AI作られてたっけ?
あと民明書房氏はあまりAI作られてなかったような記憶があるんだけど。

一応以前某所からコピペしてた一覧。
【改変自由製作者一覧】

■全て改変OK
586氏、bad darkness氏、GONZO-氏、jin氏、MASA@DAS氏、Mouser氏、Nachel氏
NHK氏、otto氏、アフロン氏、キシオ氏、サクラカ氏、ソロモン(レイス)氏
の。氏、パンプキン氏、ゆーり氏、ルージュノワール氏、鬼龍氏、民明書房氏

■条件付きなど
3㌶氏…ザンギュラ、フィオ、ズィーガーのみOK
ACT JAPAN氏…マリー系以外OK(TESTP氏製作のマリーを改変した物なので)
fxm508氏…改変した旨を明記しておく事
GATT氏…NAOKのみOK
H"氏…香澄以外OK(MMR氏製作の香澄を改変した物なので)
ma-bo氏…出来るだけパッチ形式にする事
SUGIO氏…真・マッドギア、キャディラックスのみOK
あだむすきー氏…マッスルパワー以外OK
達氏…改変パッチとして配布する形式ならOK
地球氏…ヴァネッサ、拳崇、教材カンフーマンのみOK(和訳は不可)
七草堂ひろきち氏…元ゲーム名(TALES OF MOON)、元の作者(七草堂ひろきち)の明記をする事
ネンミン氏…チルノのリッドミーでは改変OKと記載してある
教材カンフーマン系…ちょっとこ丸氏作は曖昧なので使用する際は同梱txtを熟読すること。

ちょっと古めのリドミから持ってきてるから、今だともう少し増えてるかもしれない。

343MUGEN名無しさん:2009/05/24(日) 18:55:25 ID:hbNBnPGA
>>341
いやジョジョは
プログラム型
オリコン型
スタンドゲージ無し
の三種類だからプログラム型の承太郎だけでいいのかと思ってさ
とりあえずy.y氏は全部(承り、ジョセフ、ホルホル)作ってたからよければ考えて欲しい
それとAI入ってないキャラがいいんならEFZは586氏繭よりもふるれ氏香里の方がいいんじゃないかな
>>342
GATT氏の咲夜OSは改変物を同じ条件で公開するっつー条件なら改変おkだった気が
あとネンミン氏の作品は全部改変おkだった。ドットも自由に使っていいはず
つかそーゆーの上げてくとキリが無い気もするんだが。
東方系は作者によってかなりそのあたり違う人多いし。
伊吹川氏、クロガネ氏、蒼月氏、gu氏(咲夜OS改のみ可)、水影氏あたりがNGで
キャベツ氏、nachel氏、ふるれ氏、夫氏、ネンミン氏、そむE氏なんかがおkだった筈。

344otto:2009/05/25(月) 22:13:32 ID:J96MXdt.
天子だけ簡易AIにしかなっていないのでオススメですよ(キリッ

345MUGEN名無しさん:2009/05/26(火) 19:39:26 ID:xXp75m.M
>>342
確かにその二方は無いのもあったね。
考えておくことにするよ。

下の表もありがたい。付属しても問題ないかな?
3㌶氏のはどうなんだろう。BBSに改変OKとrei氏とのやりとりであるが
>>343
作業量が増えることになるが、そんなことはどうでもよかったぜ。
全部作ってみるよ。
床の人がAI作るといってたんで、はずしてみた。公開されないようなら、そっちでいってみる。

>>344
夫氏のキャラ全体的にAI十分なの入ってるんでほとんど作られない気がしますね。
でも、しんのゆうしゃにもAIが入る時代ですし、のんびり待てばいいと思いますよ。
と、思い出したが、フルムーン再現してるの夫氏のスイカしか居ないから、
今のうちにAIのため解析しとくべきなのかも。

346otto:2009/05/26(火) 20:22:28 ID:hzXyra3Q
実はイニシアティブヒートが微妙に間違ってる>フルムーン
あと確かグラップラーシキも積んでた

347MUGEN名無しさん:2009/05/26(火) 22:53:54 ID:HQirIRBs
AI初心者です。

確認をしたいんですが、
wikiの初心者講座の指示に従ってAIの暴発を防ぐために
TriggerAll = Var(59) = 0を全ての技に追加していったんですが、
人操作でも技が出せなくなりました(コマンドを入力しても動かない状態)

これは別に普通なんですか?
それともどこかがおかしいんですか?

348MUGEN名無しさん:2009/05/26(火) 22:55:26 ID:HQirIRBs
すいません。あげてしまいました

349MUGEN名無しさん:2009/05/26(火) 23:43:42 ID:gjtpVvx6
>>347
triggerAll=command = "○○"
を消していないかを確認してみてください。
そうでなければ、AI起動用コマンドに
ボタン1つだけのコマンドなどを登録していたり、
Atimeを設定し忘れなどはないでしょうか?

350MUGEN名無しさん:2009/05/27(水) 02:03:01 ID:kUpfn/Y2
>>349 ありがとうございます。
triggerAll=command はちゃんと記載してありました。
Atimeの設定というのはどのような事ですか?

351MUGEN名無しさん:2009/05/27(水) 02:53:57 ID:fPo2UUeE
>>350
Atimeじゃなかったtimeですね、コマンド入力の受付猶予時間のことです
AI起動用コマンドはtime=0などの人間では入力できない時間を設定することで
人操作時のAIの誤起動を防ぐものです。
これを記述しないとtime=15で一律設定されてしまい、誤起動の可能性があります

352MUGEN名無しさん:2009/05/27(水) 11:52:10 ID:bFgpudAI
>>350
人操作時にもVar(59)が0以外になってるとか。
Var(59)の挙動確認はしました?

353MUGEN名無しさん:2009/05/27(水) 14:45:43 ID:SFMFA58w
>>351 >>352 ありがとうございます。
色々調べた結果イマイチわかりませんでした。

TriggerAll = Var(59) = 0を全技に記述する事で
具体的にどのような結果が生まれるのでしょうか?
AIの暴発を防ぐためとwikiには書かれていましたが
操作できなくなるなど人操作に影響はでたりするのでしょうか?

ちなみにまだ前準備の段階でAI行動に記述はしておりません

354otto:2009/05/27(水) 14:59:01 ID:jR/lOdk6
たとえば相手が明らかに超必ぶっぱなす体制なのに
遠距離でクソ隙のある技を出したりしちゃうんですよね
だから、AI操作時に出したくない技を出さないようにvar(AIフラグ)=0をつける

355ほーりゃ:2009/05/27(水) 15:14:33 ID:uEVeddAc
>>353
var(59)=0を付けることで人操作専用の行動になる
全部に付けると自分で書いた記述以外の余計な行動を一切取らなくなる

全てのコマンド動作が制限されてしまったっていうんなら
>>352の可能性が高いな、var(59)が既に使われてるんだろう

356MUGEN名無しさん:2009/05/27(水) 15:16:58 ID:uEVeddAc
あ、消し忘れた・・・

357MUGEN名無しさん:2009/05/27(水) 15:23:03 ID:kw6awnXQ
講座にはvar(59)が使われてないかチェックするようには書いてあるけど、
それ以降の記述は全部AIスイッチをvar(59)でやる前提で書いてあるんだよね
しかもvar(59)がAIスイッチであることがあまり強調されてないし
これは勘違いされても仕方がないかも知れん

358MUGEN名無しさん:2009/05/27(水) 16:58:13 ID:7Ygp4Pn6
>>355 ありがとうごさいます。
自分もその可能性が高いと考えていました。ただそのキャラは他にも制作者様がいてその方はvar=(59)を使っていました。

少しわからなくなってきたのでもう一度、度々確認しながら製作し、原因を明らかにする事にしました。

色々教えて下さった方ありがとうごさいました。

359MUGEN名無しさん:2009/05/29(金) 03:04:36 ID:BXFicSfA
>>336
遅レスだが
キャラ性能を弄ってしまったらその時点でAIパッチとは呼べなくなるぞ
そのキャラの製作者が自分ならその限りでは無いが

360MUGEN名無しさん:2009/05/29(金) 18:06:28 ID:4oT9SVb6
初心者です。
しゃがみの制御方法はどうすればできますかね?
wikiやマニュアルを読みなが進めていった所、
しゃがみと立ちをずっと高速で繰り返している状態になってしまいました。
(下ボタンを連打している状態)

ジャンプや歩きを制御した後になったため、おそらくしゃがみをAIが制御
していないからだと思うのですが・・・

過去スレを読んで似たような書き込みがあったのですが
イマイチ理解できませんでした。

誰かご教授お願いします。

361MUGEN名無しさん:2009/05/29(金) 20:17:35 ID:/Q9VONCU
現物見てないし俺もあんまり詳しくないから確かな事は言えないけどCtrl=1になってたりしてない?
俺も前ダッシュの記述の時に1フレーム毎にダッシュ→停止繰り返しちゃってその時の原因がctrlだったからさ
まあここに記述貼り付けて詳しい人に聞くのがベストだと思うよ

362MUGEN名無しさん:2009/05/30(土) 14:57:49 ID:4nC3.oos
>>334
荒唐無限に置いてあるキャラは改造改変OKと書かれていました。

363MUGEN名無しさん:2009/05/31(日) 13:06:43 ID:nbPZaOzY
現在AI作成に挑戦中なのですが、詰まったので質問させてください。
必殺技→超必への繋ぎのステートで

type=changestate
value=3600
triggerall=roundstate=2
triggerall=(var(7)&&random<=(100+(ifelse(var(7)=1,300,0))))
triggerall=power>999
triggerall=enemynear,movetype=H
triggerall=enemynear,Alive
triggerall=enemynear,statetype !=L
triggerall=statetype !=A
triggerall=!inguarddist
triggerall=p2bodydist x>0
trigger1=(stateno=[1000,1002])&&movehit

という記述を組んだのですが、ゲージがあり当該の必殺技が当たってもゲージ技を発動してくれません。
エラー等はなく、他の通常攻撃の繋ぎ等は問題なく繋がるためAIは起動しているはずなのですが、
どこかおかしいところがあるのでしょうか

364MUGEN名無しさん:2009/05/31(日) 17:31:16 ID:nuxPyJ3Y
ヘルパーに攻撃判定があるタイプ?
だとしたらHelper(1000),Movehitとかにしないとだめ。
そうでないなら怪しいトリガーを一旦無効にして試してみれば原因はわかるよ。
Var(7)が何なのかわかんないけどその辺とか。
あと人によるけど必要以上に( )を使うと見づらくなると思う。

365MUGEN名無しさん:2009/05/31(日) 17:38:35 ID:g16lBUvM
>>363
ランダムが原因かな・・・ランダムも[]と同じで、&&なんかで接続するときは()でくくったほうがいい
triggerall=var(7) && (random<=(100+(ifelse(var(7)=1,300,0))))
なら動かないかなぁ

あと細かいけど、Var(7)は2以上の値もとるのかな?
0か1だけだったらそのトリガーが成立するときはifelseも300にしかならないから意味が無いと思う
それからpowerの条件はそこは普通power>=1000にするところ
小数はないだろうから変わらないっちゃあ変わらないんだけど

ついでにいうと、Var(7)がマイナスにならず2以上もあるのを前提にすれば
triggerall=random<=((Var(7)>=1)*101+(var(7)=1)*300-1)
で同じかな
確率0.1%まで気にしなければ
triggerall=random<((Var(7)>=1)*100+(var(7)=1)*300)
のほうがすっきりするけどまぁ俺の知るところじゃないな

366MUGEN名無しさん:2009/06/01(月) 01:24:48 ID:0BRn7fXY
triggerall=(var(7)&&random<=(100+(ifelse(var(7)=1,300,0))))
var(7)が0だと不成立

triggerall=enemynear,statetype !=L
!enemynearでないとダメとか無かったっけ?
俺はp2statetype!=Lにしてるから知らんが

他には1000~1002番以外のステートにいっちゃってるとか
上手くいかない時はtriggerを簡略化してみることをオススメする

367MUGEN名無しさん:2009/06/01(月) 04:15:01 ID:Zjj19jNI
mai_mvc2のボイスパッチを手に入れたので、当ててみようとしましたが
説明がよく分からなくて苦戦しています(涙

どなたか分かる方いらっしゃいますか?

368MUGEN名無しさん:2009/06/01(月) 06:49:25 ID:lfRosURg
>>363
試しに、trigger1=(stateno=[1000,1002])&&movehit
をtrigger1=(stateno=1000 || stateno=1001 || stateno=1002)&&movehit
に変えてみてくれ
cmdとかで通常技キャンセル→必殺技作る時に、(stateno=[*,*])&&movecontactってやったら通用しなかった気がする
これは気のせいかも知んないけど、stateno=[*,*]が通用しない記述タイプがあった様な
記述が生きてるか調べる時はrandom外して譲治発動にして見れば動くかどうか
楽に調べられる

369MUGEN名無しさん:2009/06/01(月) 07:11:28 ID:4YN/a8E.
>>363
>>368は気のせいのようだった、気にしないでくれ
とりあえずトリガーのランダム外して、発動すればvar(7)の部分、発動しなければそれ以外

・・で、今気になったんだがこれAIの記述だよな?
AIスイッチのvarが(7)なのか?

370MUGEN名無しさん:2009/06/01(月) 09:54:51 ID:lkiqFiFw
>>363
random<=(100+(ifelse(var(7)=1,300,0)))は、
random<=100+(var(7)=1)*300の方が楽かも
機能しない原因については色々考えられるけど、俺ならまずmovehitとstatenoとvar(7)
を当たるかな〜。displaytoclipboardを有効利用
あとは、>>366の言うみたいに、いっそtrigger1=1とかして、
そもそもそのブロックが機能してなかったりしないか確認してみるとか。俺はたまにやる

>>366
!=が通用するトリガーと通用しないトリガーがあるけど、statetypeはリダイレクトとか関係なく
通用するはず。通用しないのはteamsideとかだったかな?

371363:2009/06/01(月) 10:13:59 ID:WtULTOtI
意見ありがとうございます
stateno=[1000,1002]というのは同じ必殺技の弱〜強で
弾が地面に着弾したら攻撃判定のある爆風が出る、というものです
ヘルパーのことを考えてなかったのでそれで試してみます
var(7)というのはAIフラグになります。このキャラCNSのvar一覧見たら
;var(7)=AI
となっていたので、キャラ自体にAIは入ってなかったのですが、一応CNSに倣って
var(7)で組んでます。

>>365
var(7)の値が1と2の時で戦い方を変えるタイプのAIにしようとしてまして、
2のときは別の技をメインで振らせようとしてるのでこういった感じにしてみました。
randomが最低でも100だとかなり振りそうなので数字は今後調整しようかなと

372MUGEN名無しさん:2009/06/01(月) 10:33:49 ID:DfCBGxGA
>>371
hitdef式の飛び道具ならmovehitでも良いがproj式ならProjhit使わんと無理じゃね
地面に着弾後の爆発なら座標pos Y>0で攻撃ステートにチェンステする必要あるぞ

373363:2009/06/01(月) 12:44:27 ID:WtULTOtI
解決しました。やはりmovehitをヘルパーで指定しないといけないようでした。
途中ヘルパーのIDとHitdefのステートNOがごっちゃになって苦戦した;;
これで作成が進められます感謝感謝

374MUGEN名無しさん:2009/06/01(月) 18:01:22 ID:RDOlRAko
蛇足かもしれないが、後進の為に少し解説しとくと、
MoveHitは攻撃がヘルパーの場合、本体はMoveHit=0なので、
ヘルパーの攻撃を条件にするときは、リダイレクトでHelper(○),MoveHitにする必要がある。

375MUGEN名無しさん:2009/06/02(火) 01:39:41 ID:GHh4M34o
[State -1, Crouching Light Kick]
type = ChangeState
value = 430
triggerall = var(59) = 1 && RoundState = 2
triggerall = statetype = S || statetype = C
trigger1 = p2statetype != L || p2statetype! = A && P2BodyDist X = [-5,30]
trigger1 = ctrl && p2movetype != A
trigger1 = random <=600

相手の距離、行動関係なく屈小足を連打してしまうのですが、理由を教えていただけませんか?

376MUGEN名無しさん:2009/06/02(火) 08:15:25 ID:8Pqz03xI
trigger1 = p2statetype != L || p2statetype! = A && P2BodyDist X = [-5,30]
を、
trigger1 = (p2statetype != L || p2statetype! = A) && P2BodyDist X = [-5,30]
に変えて、あとはrandomが大きすぎるかな?
600あると2Fに1回以上だから、ほぼ確実に出すようなイメージになるけど

377MUGEN名無しさん:2009/06/02(火) 12:36:32 ID:zYw3GsvQ
しゃがみ、立ち、空中の通常技、必殺技、超必殺技の打撃を全部とれて
発生3F受付時間2Fの当身って使いにくい?
キャラによっちゃどうしても潰されたり、相手の攻撃判定に合わなかったりで
上手く使うことが出来ないんだがいい方法ないかな?

AI作るの上手くないからかなりこの当身に困ってる

378MUGEN名無しさん:2009/06/02(火) 14:46:19 ID:i7rvrom6
var使って発生F記憶させて使っていくのが一番安定するかと
KUSANAGIの鵺摘みですら実践活用できるようになるし

379MUGEN名無しさん:2009/06/02(火) 23:48:35 ID:2whBoLVQ
腋から失礼
技の発生フレームの記憶とかコンボ用のvarって具体的にどんな感じの記述したらいいんだろ
どこか参考になりそうなサイトかキャラあったら教えてもらいたい

380MUGEN名無しさん:2009/06/03(水) 09:51:30 ID:6oAEc28c
つ分子氏のサイト

381375:2009/06/06(土) 02:36:21 ID:oTJ69/vI
>>376
うおおお!ありがとうございました!randomも弄って、かなり良くなった気がします

382MUGEN名無しさん:2009/06/06(土) 12:33:53 ID:aBqQx1JQ
通常のコンボルートからゲージがある時だけ、違う技に派生させてゲージ技を使わせたいのですが、
どのように記述すればいいのか教えていただけませんか?

383MUGEN名無しさん:2009/06/06(土) 13:09:01 ID:ycWNqOh6
1 ゲージ技へのブロックを通常のコンボルートの上に作る
2 どこでもいいからゲージ技のブロックを入れて、通常のコンボルートはゲージが足りないときだけにする
どちらでもどぞ。「上から下へ」の処理順は常に意識したいところだね

384MUGEN名無しさん:2009/06/07(日) 02:22:28 ID:JMH.vZ4I
それかvar使うといいよ。

385MUGEN名無しさん:2009/06/07(日) 22:36:06 ID:ZHp.NYuM
プッシュガードについて質問があります

[state -1,PushGuard]
type=changestate
value=10150
triggerall=roundstate=2
triggerall=var(7)>=1
triggerall=stateno=[150,155]
triggerall=!numhelper(10150)
trigger1=random<=500
trigger1=enemynear,hitdefattr = SCA,HA,AT

という記述を入れたところ、ためしにAI戦をしてみたら
このステートに飛んだ瞬間姿が消えて画面端に吹き飛び、相手が延々攻撃を空振り
し続けるという事態になってしまいました。
10150はCNS内のプッシュガードのstateで、helper(10150)が相手を押し込んで
自分から突き放す、というタイプでした。
エラーなどが起きていないので、なぜこうなったのかがわからず詰っている状態
なので、お願いします

386MUGEN名無しさん:2009/06/07(日) 22:45:45 ID:QlxsQutI
そのstate10150はヘルパーが参照するべきステートであって、
本体がchangestateしたらあかんのではないか?
多分そのステコンはchangestateじゃなくてhelper。

387MUGEN名無しさん:2009/06/08(月) 01:20:53 ID:TOqVnlpo
スーパージャンプキャンセル後に低空で超必を発動させたいのですが、triggerはどんな感じにしたらいいでしょうか?

388MUGEN名無しさん:2009/06/08(月) 04:11:35 ID:JEV6/4uQ
流石にそのくらいはセンチ教科書読めばわかるだろう・・・

389MUGEN名無しさん:2009/06/09(火) 03:07:36 ID:HIUG640Q
>>385
ガードステートでヘルパー呼び出しさせるか-2で呼び出し管理すりゃ良い
初めて組む物は、それっぽい物を実装してるキャラの記述を見る事をオヌヌメ

390385:2009/06/10(水) 04:11:29 ID:QzlDtEYQ
trigger1=enemynear,hitdefattr = SCA,HA,AT

ここだけ抜いたら問題なく機能するようになりました
ありがとうございます

391MUGEN名無しさん:2009/06/13(土) 03:18:47 ID:zyqCbIHo
㌢氏の教科書で思い出したのだが、
AI起動ヘルパーってなぜ暴発するかわかる方いらっしゃいますか?

392MUGEN名無しさん:2009/06/15(月) 20:20:53 ID:aDFTY7MI
コンボルートとかの勉強とかでアンヘルはどうだろう?と提案しようと思ったら
1日でAIが作られたでござる…

393MUGEN名無しさん:2009/06/16(火) 01:05:11 ID:UOTlKr7c
起き攻めの記述作ってるんだが元キャラの記述覘いてみたら専用ステートあってさ
この場合どういう具合に書いてやればいいのかしら
5070~5110のステートに関する記述みたいなんだけど
EnvShakeとかGameMakeAnimとか初心者のオイラには意味が解らんトリガーが大量にあってもうだめ

394MUGEN名無しさん:2009/06/16(火) 13:04:10 ID:nIOq7ysY
>>393
そこはトリガー一覧で解読すればヨロシ

395MUGEN名無しさん:2009/06/16(火) 15:18:29 ID:0W1rYzFY
細かいことだが突っ込むぜ!
トリガー ×
ステートコントローラー ○

396MUGEN名無しさん:2009/06/16(火) 17:49:02 ID:Plc8Li3M
AI作り楽しすぎるだろ………
みんなはAI作る時まずはどうする?
俺は手帳にコンボとか牽制とか全部書いてみたりする

397MUGEN名無しさん:2009/06/16(火) 19:08:50 ID:YuSl5r6c
AI作り始めて10日目ですが
未だコンボの記述が終わらない…

コンボしかまだ書いてないのに120kbとか何コレ…

398MUGEN名無しさん:2009/06/16(火) 22:02:23 ID:UOTlKr7c
んが
そうじゃなくてですねー
cmdのchangestateで起き攻め用の技に飛ばすべきか起き攻め用のステートに飛ばすべきかがちと解らんので相談に来たのですよ
一応内容については一通り調べてみたけどよく分かんなかったんで
commonに書いてあったんだけれどももしかしてコレはこっち側のダウン時に使う物なのか…?

399MUGEN名無しさん:2009/06/16(火) 22:47:09 ID:AsCPaAI2
>>396
ちょっと操作してからちょっとcns読んで、またちょっと操作しての繰り返し。
原作の攻略サイトとかあったら見る。
そんで分かってきたらコンボ→牽制→固め→起き攻め→その他みたいな順かな

>>397
すごいなw期待

>>398
よく言ってる意味が分からないけど、
自分から起き攻めしたいなら、相手のステートを奪ってダウンさせるんじゃ無い限りは
自分のcnsは関係ないよ。

参考までに
5070番台:足払い食らって浮いてるときとか
5100番台:地面に落ちてから跳ねてる間
5110番台:ダウン中。いつでも起き上がりに入れる
5120番:起き上がりモーション。キャラ毎に長さが大分違う
というイメージで作るといい

400MUGEN名無しさん:2009/06/16(火) 22:56:39 ID:LzbJhqvs
>>396
技の発生とか無敵とか調べて、ガード→無敵切り返し→牽制→コンボ→起き攻めって感じに作るかな

>>397
何処の乱入者氏かと思った
自分用の簡易AIしか作らないから其処まで容量でかくならんなぁw

>>398
その記述がどういうものかはわからないけど、
GameMakeAnimにEnvShakeって事はダウン時の画面揺れ用の記述じゃないかな

基本commonってジャンプ、移動、ガードの記述以外あんまり関係ないんじゃないか、
と最近AI弄り始めた者が言ってみる

起き攻めさせたいなら普通に使いたい技の条件に
EnemyNear,StateNo = 5120とかEnemyNear,AnimTime = -(技の発生+3)とか使えば良いんじゃないかと

401MUGEN名無しさん:2009/06/17(水) 00:39:24 ID:BGl26rz2
>>397
AI製作始めて三日だがコンボどころかキャラが全く言うこと聞いてくれないのでほとほと困り果ててるぜ。
こうやって作り手側になってAI製作者の偉大さが物凄くわかるわホント。
小パン連打の記述もまともに実行させれない自分もいつかは人に公開できるほどのAI作りたいね。

さて今日も攻撃しないでタミフる改変天子を落ち着かせる作業を始めなければ…いや、昨日からずっとそれだけど。

402MUGEN名無しさん:2009/06/17(水) 02:19:04 ID:CLGYwcAg
作り初めて4日立ちやっとコンボが1つ完成したよ。
と思ったら2ラウンド以降になるとAIがコンボを全く行わなくなる…なぜなんだ…
(AIは発動している)

403MUGEN名無しさん:2009/06/17(水) 13:36:32 ID:Gv.0ISts
>>402
コンボのtriggerの記述をここにうp汁

404MUGEN名無しさん:2009/06/18(木) 08:05:05 ID:O94frhmM
AI初心者です
前方や後方へのジャンプってどう記述すればいいですか?

前方ジャンプで相手の間近に着地させたいんですがイマイチ記述がわかりません。

どなたかご教授願います

405MUGEN名無しさん:2009/06/18(木) 15:23:22 ID:uqetVr.A
初心者ということばをmugenなりネットなりで使ってはいけない。
ヒント mugenで内のファイルを用いられることがあるファイル

406MUGEN名無しさん:2009/06/18(木) 16:11:36 ID:O94frhmM
>>405 ありがとうごさいます。解決しました。

407MUGEN名無しさん:2009/06/19(金) 02:55:19 ID:8yhOxMn.
[State -3,ダッシュ]
type = ChangeState
value = 100
triggerall = var(59)>0
triggerall = Roundstate = 2
triggerall = StateType != A
triggerall = stateno != 100 && stateno != 21&& stateno != 10
triggerall = frontedgebodydist >= 90
trigger1 = random < var(59)*30

ダッシュするとキャラが水平移動します。何が原因でしょうか?

408MUGEN名無しさん:2009/06/19(金) 04:06:18 ID:SqAUtOUs
triggerにctrlが無い

409MUGEN名無しさん:2009/06/19(金) 04:38:32 ID:0oEwSxnU
作ったAIを搭載したキャラを同キャラ対戦させると、一定距離で移動せずに
しゃがんだり立ったりを繰り返すんだども(たまに決着付くまで、まともに進むこともある)
原因わかる人いる?
p2bodydist X が125とか166とか、まちまちでどの記述が原因がわからぬい…

同キャラ対戦じゃないと、他のキャラが動いて拮抗崩してくれるせいで
膠着状態にはならないんだが…ステートが暴発してるんかなぁ…

記述うpりたいけど、どこをうpればいいのかわからんです…

410otto:2009/06/19(金) 07:51:37 ID:Ud5reP5s
初心者って言葉をネットで使っちゃいけなかったのか
>>409
commonまで完全に制御してたとしたら
その屈伸する距離でちょうどやることがなくなってるんじゃね

411MUGEN名無しさん:2009/06/19(金) 21:41:12 ID:dLDUhOKk
移動、ジャンプの制御で死んだ
何をさせたらいいかわかんねえ………
逃げながら飛び道具連射をするのが基本戦術キャラなんだけど、難しいなこりゃ

412MUGEN名無しさん:2009/06/19(金) 23:49:50 ID:8yhOxMn.
>>408 つけてもだめでした。

もう一度貼ります。
[State -3,ダッシュ]
type = ChangeState
value = 100
triggerall = var(59)>0
triggerall = Roundstate = 2
triggerall = StateType != A
triggerall = stateno != 100 && stateno != 21&& stateno != 10
triggerall = ctrl
triggerall = frontedgebodydist >= 90
trigger1 = random < var(59)*30

キャラがダッシュしずに水平移動します。何が原因でしょうか?

413MUGEN名無しさん:2009/06/20(土) 00:01:33 ID:v2UzElyE
>>409
移動多めにしたり、random多めにしたりすれば直るかもしれんね。
良く分からんときは色々やってみることさ!
displayで怪しいところ確認したりね

>>411
プレイヤーの歩きやジャンプのステートに移動した場合はtime=0でstate 0に戻るようにして、
あとは相手に近づいたら下がるような記述を入れるのがいいと思う

>>412
とりあえず、[statedef 100]の下のchangestateを、AIスイッチON状態のと
AIスイッチOFF状態のに分けてみようか

泥酔してるかもしれんから間違ってるかも。参考程度にどぞ

414MUGEN名無しさん:2009/06/20(土) 00:21:40 ID:eMuCy9JQ
>>413 ありがとうございました。
確認した所、ダッシュ中は本来はstateNO=100であるのにstateNO=0の状態でした。
つまり立ち状態のままダッシュと同じ速さで動いていることがわかりました。
もちろん自分はこの記述はした覚えがありませし、確認しても見当たりません
もうお手上げ状態です。cnsファイルが原因という可能性はありますか?

415MUGEN名無しさん:2009/06/20(土) 00:40:52 ID:DhcMjdRg
>>414
>確認しても見当たりません
どこの記述をどう確認したか。
原因は絶対あるんだから、見落としがあるはず。
目星としては、State0の記述か、100の記述か、その他のChangeStateか。
自分が思うには、0フレームで100から0に移行して、
移動速度がリセットされて無いんじゃないかな?

416MUGEN名無しさん:2009/06/20(土) 00:42:58 ID:/hRplnRY
>>414
ダッシュの終了条件をいじってないんじゃない?
おそらくダッシュ移行即停止を高速で繰り返してると思う

417MUGEN名無しさん:2009/06/20(土) 00:48:31 ID:DhcMjdRg
>>398
喰らい動作に関係してて、その埃出したりの命令系統があってという事は、
相手か自分を飛ばす、専用の「喰らい動作のState」の可能性がある。
投げとかね。
そのStateのNoで全ファイルを検索すると、なんに使ってるか分かるかも。

>>414
一個聞き忘れてた。
>cnsファイルが原因
ちょっと何を指しているのか分からないので、もう少し詳しく頼む。

418MUGEN名無しさん:2009/06/20(土) 01:51:13 ID:eXSx2sAs
commonファイルを使ってない制作者の人達って
どうやって歩きやジャンプとか制御してるんですか?

AIの記述と一緒にジャンプする瞬間に0ステートに戻るようにしてるとか?

419MUGEN名無しさん:2009/06/20(土) 03:56:55 ID:CrDNNqLs
CNSに書いてるとか? cmd単体の人は制御して無いと思われ

420MUGEN名無しさん:2009/06/20(土) 07:17:38 ID:KZe/cjKc
>>414
特に何も記述していないからこそそうなるんだと思う。
人間操作なら、1.ダッシュ入力(ダッシュ動作に移る)→2.前おしっぱ(ダッシュ維持)
の2つがそろって「ダッシュをした」ように見える。

んで、常時監視ステートのchangestateで100番に飛ばした場合は、上の1.のみが
行われた状態で、2.が行われているかどうかはランダムみたいなもの。まあ行われてないときの方が多いね。
そうなると、処理順の関係で1F毎に「100番→0番」を繰り返すことになって、100番のステコンが有効になりつつ、最終的には0番にいるってことになる。
だから100番にある、「前おしっぱじゃないなら0番に戻る」という意味のブロックの記述を変えてやれば良い。
cnsに[statedef 100]ってのが無いなら、mugen本体のcommonから引っ張ってきてAIファイルに書いてやれば良い。

コモン制御については、結構丁寧に解説してくれてるところがあった気がするけど、それでもやっぱ詰まる人多いんだろうな・・・
良く話題に出るし

>>418
AIファイルを先に読み込ませるようにして、AIファイルにステートの記述すれば
オーバーライドできるからそれでやるときもあるかも。AIファイルもステート定義ファイルでしかないからね
AIファイルに戻すのを含める方法でもできるけど、それだけだと「ジャンプしそうでしない」みたいに見えちゃうかも

421MUGEN名無しさん:2009/06/20(土) 16:29:19 ID:Qn9Wekzs
[State -1,0]
type = ChangeState
value = 900
triggerall = roundstate = 2
triggerall = var(59) != 0
triggerall = !winko
triggerall = !Ishelper
triggerall = var(0) = 0
triggerall = statetype != A
triggerall = stateno != [150,153]
triggerall = p2statetype != L
triggerall = p2movetype != H
triggerall = random <= (var(59)) * 40
triggerall = fvar(38) != 3 ;投げ対策
triggerall = p2stateno > 199
triggerall = enemynear(var(8)),animtime < ifelse(p2statetype != A,-47,-23) || stateno = 105 && time >= 3
triggerall = enemynear(var(8)),time > 50 || var(59) > 4 || (prevstateno = [5000,5270]) || (prevstateno = [120,159])
triggerall = enemynear(var(8)),vel x > 0
triggerall = backedgebodydist <= 30
triggerall = prevstateno != 900
triggerall = p2bodydist X - (p2statetype = A) * enemynear(var(8)),vel x * 23 = [-15,160]
triggerall = p2bodydist Y + enemynear(var(8)),vel y * 23 + 0.5 * enemynear(var(8)),const(movement.yaccel) * 23 * 22 = [-200,0]
trigger1 = enemynear(var(8)),movetype = A
trigger1 = backedgebodydist <= 30
trigger1 = ctrl || (stateno = [1,20])
trigger1 = enemynear(var(8)),movetype = A
trigger2 = (stateno = [100,105]) && time >= 3
trigger2 = backedgebodydist <= 30
trigger1 = enemynear(var(8)),movetype = A
trigger3 = p2bodydist x > 160
trigger3 = ctrl || (stateno = [1,20])
前方回避の記述なんですが、戦わせて見ると敵の近くでひたすらこの行動を繰り返して戦いになりません
state900→state0→state900…という風な動きをするんでtriggerall = prevstateno != 900を追加してみたんですが効果がありませんでした
問題点解る方お願いします

422MUGEN名無しさん:2009/06/20(土) 17:18:13 ID:jPY2CukU
enemynear(var(8)),movetype = Aのtriggerをよく見るんだ

423MUGEN名無しさん:2009/06/20(土) 19:15:46 ID:Qn9Wekzs
そこは直したんですがやっぱり駄目っぽいですorz

424MUGEN名無しさん:2009/06/20(土) 19:55:46 ID:8ebQYFgY
>>414
AI時はダッシュをctrl=0にする
じゃないと、チェンステを実行条件の距離内でdef100へ移行→ctrl=1だからまたdef100へのチェンステを延々繰り返す
その為待機→ダッシュ開始→待機〜を繰り返す。
この場合、def100内にAI用の停止トリガーも作る必要がある。
ただP2bodydist Xで停止させる場合、facingとenemy,facingが同一値の時、その停止トリガーが働かない事がある
停止トリガーに((facing)+(enemy,facing))=0||((facing)+(enemy,facing))!=0と入れるのをオススメする
各動作のチェンステトリガーにctrl||stateno=100を入れるのを忘れるな。

>>421
AILV?が5以上だと、壁を背にしたら敵攻撃時にrandom<400で行う訳だから、
そりゃ避けまくるだろう

425MUGEN名無しさん:2009/06/21(日) 23:56:20 ID:RDcKf/NE
varrandomに変えたり攻撃技のトリガーにstate=900付けたりしてみたんですがやっぱ駄目っぽいです
一体何がおかしいんでしょうか…

426MUGEN名無しさん:2009/06/22(月) 01:24:14 ID:JRdkvu7E
>>425
421だと思うけど、名前を質問時のレス番にするとかして、
どの質問についてなのかを明確にしといてくれ
・他にAI用の900へのチェンステが無いかを調べる
・操作時の900へのチェンステが封印されているか(ボタン同時押し技はCPUは発生し易い)
・trigger1〜3を一個づつ検証してみる
・もう一度組みなおす(経験上、記述上の問題が全く無いのに稀に記述が無効になってる時がある)

まぁtrigger3はtriggerallの[-5,160]で距離を縛ってるから、満たす事は無いと思うが

427MUGEN名無しさん:2009/06/22(月) 12:48:13 ID:2zBdgS/I
いっそのことchagestateをnullに書き換えて本当にそのステートで動いてるか確認してみた方が良いかも

428MUGEN名無しさん:2009/06/23(火) 13:23:39 ID:H8M55Wbk
コンボ確認変数って絶対に必要ですかね?

429MUGEN名無しさん:2009/06/23(火) 18:12:24 ID:8JuYxiaw
そもそもコンボ確認変数ってのが何か分からない
movehitじゃ駄目なの?

430MUGEN名無しさん:2009/06/23(火) 19:30:09 ID:O.KabiW.
コンボだけ確認したいときのスイッチとして使う変数のことかな?

なら、なくても大丈夫。AIスイッチと兼用することも出来るし。
ただ、あると楽かも

431MUGEN名無しさん:2009/06/23(火) 19:37:42 ID:eql3G1y.
あればあるほど記述量減らせるしな。
trigger? = movehit
trigger? = 条件
なんかにするよりはどっかで制御したほうが記述減らせると思うし。

432MUGEN名無しさん:2009/06/23(火) 20:03:21 ID:lYL6KboE
数種あるコンボルートを制御するとかならあった方が良いとは思う

433MUGEN名無しさん:2009/06/24(水) 00:27:19 ID:jOuPnbS2
varとfvarの違いって何なんですか?マニュアルみても少数と整数しか
記してなくてイマイチわかりません。
fvarってのはどーゆう状況で使用するんですか?

またAIフラグ等をfvarで使用することとかできるんですか?

434MUGEN名無しさん:2009/06/24(水) 00:52:04 ID:/phw.opk
そのまま整数と小数しか意味は違わない
速度とかだと5.6とか小数の場合が多いからそういう値を入れるときに使う
他にはコンボ補正とかもFvarが使われる

435MUGEN名無しさん:2009/06/24(水) 01:40:28 ID:jOuPnbS2
>>433 解答ありがとうございます。

また疑問にぶつかったのでまた質問させて頂きます。
numprojIDが1000の飛び道具が出ている間ダッシュさせたいんですが
思うように動きません。何が足りないのでしょうか?

[State -3,ダッシュ]
type = ChangeState
value = 100
triggerall = var(59)>0
triggerall = StateType != A
triggerall = !inguarddist
triggerall = stateno != 100
Triggerall = EnemyNear,StateType != L
trigger1 = numprojID(1000) = 1
Trigger1 = P2BodyDist X >= 80
trigger1 = Random <= 400

436MUGEN名無しさん:2009/06/24(水) 02:41:56 ID:CggyCOdI
>>435
トリガーこれだけか?ctrlが見当たらんが
単純に動くか動かないかを確かめるならrandom外せ
ダッシュ自体をAI制御してなきゃ、うまく行く筈無いがな

437MUGEN名無しさん:2009/06/25(木) 00:41:57 ID:G.PDVJi2
P2BodyDistYって「自分との相対距離」であって「地面との相対距離」じゃないですよね?

438MUGEN名無しさん:2009/06/25(木) 02:11:56 ID:Q/16/Uzw
ctrl=0とctrlの記述をつけないのとは同じですか?

439MUGEN名無しさん:2009/06/25(木) 19:45:04 ID:8q8RGDqA
しゃがみの制御は皆はどうやってやってるんですか?

ジャンプやガードやダッシュの制御はwikiやらで載ってますが
しゃがみだけはどのマニュアルも記載していないですよね?

これは制御しなくていいという事ですか??

440MUGEN名無しさん:2009/06/26(金) 10:00:17 ID:xrD2PrZw
ステート100(ダッシュ)に移行したと思ったらすぐにステート0(立ち)に戻ってしまいます。
相手の近くまでステート100を続けさせたいんです。

多分移動する距離の記述をしてないからだと思うんですがダッシュ時の移動量を指定するトリガーって何かありますか?

441MUGEN名無しさん:2009/06/26(金) 13:34:25 ID:j8joThX6
>>440
ダッシュが上手いAIの記述見ようぜ
参考資料はゴロゴロある

442MUGEN名無しさん:2009/06/27(土) 02:45:29 ID:1V2S4g8E
>>437
うん、相手と自分のy軸の距離だね
相手が上にいれば−で下に居れば+
>>438
ctrl = 0はctrlが0のときに動く
ctrlを書かないとctrlの数値は処理に含まれない(1でも0でも動く)

443437:2009/06/27(土) 07:36:59 ID:Xocou/0s
>>442
ありがとうございます!

444MUGEN名無しさん:2009/06/27(土) 22:48:41 ID:CqxLGqys
ケーブルのAIを作ってるんですが、AIに強Pの銃連打を4発だけで止めさせて、最後だけ隙モーションのステートに飛ばす方法わかりませんか?

445444:2009/06/27(土) 22:49:59 ID:WDSIcDfo
教えて頂ければ幸いです

446MUGEN名無しさん:2009/06/28(日) 00:44:22 ID:ZteKEdd.
エスパーじゃない限り答えられねーよw

447MUGEN名無しさん:2009/06/28(日) 10:44:46 ID:qMk.Q1jY
ctrl=0は人操作不可でctrl=1は人操作可能って意味ですよね?

ctrlは人操作可能……
ctrlはctrl=0+ctrl=1ってことは人操作可能=人操作不可能+人操作可能…?
あれ?

ちょっとこんがらがってきた……

448MUGEN名無しさん:2009/06/28(日) 10:54:44 ID:l.ZYcsds
>>444
連打かホールドで攻撃を継続するタイプのものなら
恐らくその技のステート内で管理してるからそこを弄る
>>447
あーもしかして「ctrlの記述をつけない」ってctrlの=以降を書かない(「ctrl」とだけ書く)って事かな?
ctrlをそもそも書かない、って意味だと思ったよ

「ctrl」としか書かれてない場合、論理式のお約束的にctrl=1と同じ意味になる

449MUGEN名無しさん:2009/06/28(日) 15:57:32 ID:9gqGB1fQ
>>447
「ctrl=1」や「ctrl」が「操作可能」
「ctrl!=1」や「!ctrl」が「操作不能」って覚えておけば大体おk。キャラにもよるけど。
ちょっとだけ論理式とC言語あたりの勉強してみれば良いと思うよ。
というか、そういう知識無しで作ろうとしたらコピペAIしか作れないと思う


ところで、敵ヘルパーリダイレクトを使ってる人っている?
いたら使用変数&ヘルパーの数とか、取捨選択用トリガーとか聞いてみたいんだけど

450444:2009/06/28(日) 18:29:44 ID:YMp5NgJQ
だ、だめだあ・・・一日使ってもおら一人じゃ解決不能

>>448
ここらへんを弄ればいいんですかね?

[State 220, Varset]
type = VarSet
trigger1 = Time = 0
var(1) = 0



[State 220, ChangeState] ;強P2発目以降
type = ChangeState
triggerall = Time = [20,90]
trigger1 = command = "y"
value = 224

[State 220, ChangeState] ;強P後の隙モーション
type = ChangeState
trigger1 = AnimTime = 0
value = 226
ctrl = 0

451MUGEN名無しさん:2009/06/28(日) 18:37:35 ID:xegYa4/E
作ったAIが挙動不審なんでちょっと自分操作キャラで相手してみたんですが
こちらが攻撃すると(届かなくても)バックステップのステートに入ったまま固まってしまう(stateno=105でその場に停止)
自分から技を振ってこないで棒立ち(stateno=0で固まる)か、しゃがみ、ジャンプでこちらを飛び越えようとする
弱パンチのトリガーはこんな感じなのですが
trigger1 = ctrl || stateno = 0 || (stateno = [10,20])
それともジャンプやしゃがみを攻撃技の上に記述してしまったのがいけないのでしょうか
問題点わかる方いたらお願いします

452MUGEN名無しさん:2009/06/28(日) 18:58:19 ID:xegYa4/E
ってよくよく考えたらしゃがみやジャンプはともかく棒立ちは記述の順番じゃ説明付かないですねorz
とすると何が悪いのか…

453MUGEN名無しさん:2009/06/28(日) 19:41:36 ID:ZIUoqD9k
>>450
そのステートは224なの?違うならそっちを弄る必要がある
同じステートならVarで数える必要があるから
ステート-2に
StateNo = 224 && Time = 1の度に+1するVarAddと
StateNo!=224だと0にするVarSetを作って

[State 220, ChangeState] ;強P2発目以降
type = ChangeState
triggerall = Time = [20,90]
trigger1 = command = "y" || (AI判断用のVar && 回数を数えるVar<=4)
value = 224

とかすると良いんじゃないかしら。バグとかあっても知らない

>>451
前者は何らかの理由で常に105に飛ばし続けてるのかも
後者は分からない。小パンの記述全部晒してみるといいかも

454MUGEN名無しさん:2009/06/28(日) 21:44:50 ID:SJsA5pIw
[State -3,下段ガード]
Type = ChangeState
Value = 131
TriggerAll=var(59)>0
TriggerAll=StateNo!=[120,155]
triggerAll=Ctrl||(stateno = [10,12])||(stateno = [20,21])||(stateno = 100)
TriggerAll=StateType!= A
TriggerAll=P2StateType != A
Trigger1 = Enemy,NumHelper > 0 || Enemy,NumProj > 0
Trigger1 = EnemyNear,MoveType = A
Trigger1 = InGuardDist
Trigger1 = EnemyNear,HitDefAttr = SCA,NP,SP,HP,NA,SA,HA
Trigger1 = Random <= var(59)*180
Trigger2 = InGuardDist
Trigger2 = EnemyNear,StateNo = [400,450]
Trigger2 = P2BodyDist X = [-5,55]
Trigger2 = Random <= var(59)*150

しゃがみガードの記述ですが全くキャラがガードの動作を行おうとしません。
何が原因でしょうか・・

455MUGEN名無しさん:2009/06/28(日) 23:15:31 ID:ZIUoqD9k
>>454
一時的に
;TriggerAll=var(59)>0
ってコメントアウトしたあと、AIを入れずに色々試してみると良いんじゃないかな

Trigger1 = EnemyNear,MoveType = A
Trigger1 = InGuardDist
Trigger1 = EnemyNear,HitDefAttr = SCA,NP,SP,HP,NA,SA,HA
この辺を一時的に;でコメントアウトして試行錯誤してみるとか

456444:2009/06/28(日) 23:56:01 ID:YMp5NgJQ
>>453
ありがとうございます
Varについて勉強してきます

457MUGEN名無しさん:2009/06/29(月) 00:30:24 ID:8wbk2q7s
>>454
単に131番に移行した直後に0番に移行してるだけかもしれない。
そうだとしたら、131番の方もあわせて弄らないと

458MUGEN名無しさん:2009/06/29(月) 00:40:56 ID:0NxPmfXo
>>450
初弾と連打でステートが違うのかね
だとしたら2発目からは多分それでいい
あとの隙部分は連打しなければ自動的に移行するだろうからAI記述で移行する必要は無いと思う
てかすると隙が短くなるかもしれないな

>>454
MUGEN本体の処理としてしゃがみ系ステートはctrl=1である限り立ち系ステートに戻ろうとするらしい
だからフレームの最後でステート131がステート130になろうとしてるはず
これは>>457のいうようにステート131にあるChangeStateの条件を弄らないとダメ

459MUGEN名無しさん:2009/06/29(月) 01:21:26 ID:w3g3S5dI
>>454
TriggerAll=StateNo!=[120,155]は
TriggerAll=StateNo!=[150,155]に変える
ガードステートは120からスタートだ。いきなり130番台には行かない

なんか最近コモン系に飛ばしてるんだけど上手く行きませんての多いな

460MUGEN名無しさん:2009/06/29(月) 02:54:18 ID:O1OQG6l6
>>454だけど原因がわかりました。コモンファイルに凄い初歩的なミスしとったわw
キャラファイルにぶち込んだコモンファイルの名前変えてませんでしたw。

どうりでぶち込んだコモンにやけくそな記述してもエラーが出ないわけだ。

てかAIがほぼ完成してからやっと気付いた俺って………

461MUGEN名無しさん:2009/06/29(月) 03:18:32 ID:AMiEFMK2
>>457-459
そりゃ違う
130~132を直接指定しても一応ガードはちゃんとさせられる(しゃがみもちゃんとする)し
その場合ガードステートの中身を弄らないとガードしない、ということもないはず
120に飛ばない分の優位が僅かにあるかもしれないし
>>454の場合はStateNo!=[120,155]の働き具合によってはガードしないかもしれないが

462MUGEN名無しさん:2009/06/29(月) 03:40:55 ID:w3g3S5dI
うん?
120〜140から130番台へ行けるから、StateNo!=[120,155]だと損するってのと、
つい最近def52の着地硬直をガン無視したAI見たばっかで「うさんくせぇな」って思ったから
120から飛ばしてねって言いたかっただけなんだけどね

463MUGEN名無しさん:2009/06/29(月) 03:48:51 ID:5ctdDDGE
ちょうど初心者が詰まる壁ってところなんだろう

464MUGEN名無しさん:2009/06/29(月) 08:56:29 ID:c1qMz1Qc
>>462
コマンド入力で硬直キャンセルするタイプなら問題ないだろ。
というかそれ以外で見たことないからなんとも言えないが。

465MUGEN名無しさん:2009/06/29(月) 09:12:09 ID:7HLXRJlE
ガードなんて大体皆同じなんだから
本当にわからんかったら他製作者のコピって若干varやらいじる程度
でいいんじゃね?

466MUGEN名無しさん:2009/06/29(月) 10:50:55 ID:O1OQG6l6
AIってダッシュ中もしゃがみと同じで立ち状態になろうとするんですか?

467457:2009/06/29(月) 12:04:24 ID:FBbG.Kj.
>>459
まあそうだね。
でも結果は同じだから、とりあえずはいいかなーと思ってしまった俺がいる

>>460
おめでと

>>461
いや、131番に飛ばしても、コモンが元のままなら同F内で140番(キャラによってはそのまま0番まで)に飛んじゃうし、
しゃがみから立ちに戻ることも多いだろうから、結果的にガードしてないのと同じことになるな、と思ったんだけど

>>462
まあ、ただのミスって可能性もあるよ。
俺もよくstatetype!=Aとかctrl付け忘れてorzなことあるから

>>465
エフェクトをガードステート内で処理してるキャラとか、特殊ガード持ちじゃなければね

>>466
基本的には、「常に何もコマンドが入力されていない状態に戻ろうとしている」でいい。
偶然コマンドが入力されている場合もあるけど

468MUGEN名無しさん:2009/06/29(月) 12:47:13 ID:owcwJ3xk
確か130番台に飛ばすのは某氏が昔AI講座で書いてたもの(それ以外のところでも古いものならそう書かれてる)で
その時に参考にして作られたAIならそういった記述がされてるだろうし
理論的にどうこうの前に、ちゃんと有効に働いていたのも間違いない
多分131(140?)の次も131に飛ばされるからしゃがみガードになるんじゃないかなあ

469MUGEN名無しさん:2009/06/29(月) 19:30:28 ID:m.U9WKbw
120と140がctrl=1だから131に飛び続けるのかしらんけど
実際にしゃがみガードしてくれてたような気はする

まあ仕様化して120に飛ばした方が安心できるしいいんじゃない?
statetype!=A忘れて空中に浮いたとかも起こらないしね

470MUGEN名無しさん:2009/06/29(月) 20:55:41 ID:g/yZrqGI
>>453
>>451っす
スンマセン確認してみたらバックステップの停止時の記述のchangestateでvalue=105になってました
そりゃ動き止りますよねorz
小パンの方は依然理解不能状態です
記述はこんな感じっす
[State -1,0]
type = ChangeState
value = 200
triggerall = roundstate = 2
triggerall = var(59) != 0
triggerall = !winko
triggerall = !Ishelper
triggerall = var(0) = 0
triggerall = statetype != A
triggerall = p2movetype != H
triggerall = p2stateno > 199
triggerall = p2statetype != L || p2stateno = 5120
triggerall = fvar(38) > 0
triggerall = (P2BodyDist X - (EnemyNear,Vel X * 4)) = [23, 55]
triggerall = (P2BodyDist Y + (EnemyNear,Vel Y * 4 + EnemyNear,Const(Movement.YAccel) * 10) * (P2StateType = A && EnemyNear,Vel Y != 0)) = [-82,-42]
triggerall = !inguarddist
triggerall = random <= var(59) * 60
trigger1 = ctrl || (stateno = [1,20]) || stateno=100 && time >= 3 || stateno = 900 || stateno = 1400
それとものすごく遅くなりましたがstate900はおかげで問題点が分かりました
>>427さん感謝です

471MUGEN名無しさん:2009/06/29(月) 22:08:18 ID:m.U9WKbw
triggerall = p2stateno > 199 の意味は…?

472MUGEN名無しさん:2009/06/30(火) 16:44:07 ID:xvmw3ZwY
>>470
triggerall = !inguarddist
triggerall = p2stateno > 199
triggerall = (P2BodyDist X - (EnemyNear,Vel X * 4)) = [23, 55]

大抵相手が攻撃技ステートの時にp2bodydist x=[23,55]だと、inguarddistが1になるから重複して技が出ないよ

inguarddistをenemynear,animelemno(0)<=3とかにすると良いと思う

473MUGEN名無しさん:2009/06/30(火) 18:30:08 ID:z0bM3FBU
コモンファイルでガードの記述を弄った場合、AI上でのガードの記述はほとんどいらないですかね?

474MUGEN名無しさん:2009/06/30(火) 19:12:01 ID:kd8QsSC.
>>472
どうもです
これから試してきます
質問→答えが返ってくる→試してみよう→おお、解決した!→さてコンボでも組むか
って感じでここに戻ってくるの忘れる事がまれによくあるので先にお礼言っておきます
>>473
いや結構必要だったり
ガードの方の記述はあくまでAI用の記述であって、
AI側でこれこれこーゆー状況の時にガードステートに飛ばしなさい
って命令を出してやらないとなかなか思ったとおりに防いでくれない事が多い…と思います。多分
期待してた答えと違ったらすいまえんでした;

475MUGEN名無しさん:2009/07/01(水) 00:55:11 ID:ywDtCJ2o
ステート120は基本的に振り分けステートで大抵入ったフレーム中に130とかのステートに入るから遅延はないはず
だから直接それらのステートに入ってもそんなに問題ない
しゃがみガードも通常のしゃがみとは違うかもしらんね
どっちにしろ基本のcommonでは下キー入力ないと立ちガードに移行しようとするから、そこをAI用に変えないとなかなかしゃがみガード成功しない
結局振り分けてくれるからAIの基本的な判断としてはガードする=ステート120に入るにして
どのタイプのガードをする(切り替える)かはガードステートに任せる、というふうにすると記述が楽
切り替え判断も参照ステートでやるより多分1Fだけ早くなる場合がある
というのが俺がいろいろ検証してる上での見解。正しいかは保証せんが

ガードステートは実体ステートなんでそこに入らないと判断はしてくれないから最低限ステート120に入るよう記述はしてやらないとCPUまかせとあんまり変わらない
ちなみにダッシュや歩きはそういう特殊ステートじゃないから止まるのはステートの終了記述による処理
滑っていくようになるのは終了記述を切ってないせいで起こるしちゃんと切るようにしないとずーっと進む(特にKO後)

>>470
TriggeAllの9行目で p2stateno = 5120 があるのは起き攻めしようとしてるんだと思うけど、10〜11行目は対空記述してるみたいね
それだと起き上がりは地上ステートだから起き攻めしようとはしないし相手が地上にいると「対空」はできないから結局対空しかしないはず
多分、最後のTrigger1をTriggerAllにして、9行目をその下に持ってきてTrigger1、10〜11行目をさらにその下においてTrigger2にすれば思ったとおりの動作をすると思う
ところで8行目はおおよそ挑発や避けとかでない移動・待機ステートのを指すことになるだろうから、割り込みはしない、つまり!InGuardDistで十分だと思うんだが

476MUGEN名無しさん:2009/07/01(水) 01:06:50 ID:ywDtCJ2o
おっと、不等号を読み間違えた・・・
相手がステート200以上、ってことになるから多分避けに重ねるか割り込みしようとしてることになるな
てことは!InGuardDistがあるから射程外から突っ込むか避けに重ねようとすることになるな
自分が弱PでAnimTime考慮してないから射程外ってことはないだろうし避けに重ねて逆に背後とかから殴られそうだな
と、ここまで書いてほとんど>>472が説明してることに気づいたがまあいい
で、ステート900は避けなんだよな・・・避け中に弱Pだしていいの?

477MUGEN名無しさん:2009/07/01(水) 02:35:08 ID:UZ15Bh6I
[State -1, ダッシュ]
type = ChangeState
value = 100
triggerall = var(59) >0
triggerall = Roundstate = 2 && RoundState != 1
triggerall = statetype != A
triggerall = stateno != 100
triggerall = frontedgebodydist >= 90
triggerall = EnemyNear,movetype != A
triggerall = Enemy,NumHelper = 0 || Enemy,NumProj = 0
trigger1 = Ctrl
trigger1 = NumProjID(1000)>0||NumProjID(1310)>0||NumProjID(1315)>0
trigger1 = (Random <= var(59)*60)||(var(59)>9)
trigger2 = Ctrl
trigger2 = (p2statetype = S)||(P2statetype = C)
trigger2 = Random <= var(59)*60
trigger2 = p2bodydist X >= 181
trigger3 = Ctrl||(stateno = [10,12])||(stateno = 0)
trigger3 = P2StateNo= [120,159]
trigger3 = Random <= var(59)*180
trigger3 = p2bodydist X >= 150
trigger4 = NumProjID(2000)>0
trigger4 = (Random <= var(59)*60)||(var(59)>9)

ダッシュの記述です。NumProjID(1000)>0||NumProjID(1310)>0||NumProjID(1315)>0
の飛び道具が出てる時にダッシュさせたいんですが
立ちステートになぜか戻ってしまいます。

通常時のダッシュは立ちステートに移行しません。
NumProjが出ている状況下のみ立ちステートに戻ってしまいます。
なぜでしょうか?

478MUGEN名無しさん:2009/07/01(水) 09:51:05 ID:ju7NaGRg
>>477
一応確認するがdef100の停止継続条件もAI用の処理してあるよな?
ちなみにEnemy,NumHelper = 0は、「敵のゲージ系ヘルパー」が出てると成立しない
外すかEnemy,NumHelper >= 0 && !inguarddistにでも変えとき

479MUGEN名無しさん:2009/07/01(水) 18:02:15 ID:nQDfaYzI
>>478 停止条件はわかりません。平成㌢氏のマニュアルに載ってなければやってないかもしれません……

どのような記述をすればいいですか?

480MUGEN名無しさん:2009/07/01(水) 18:09:22 ID:qBlOFdBg
>>479
マニュアルを「単に読む」事と「理解する」事は違うので、「理解する」まで読みなさい

481MUGEN名無しさん:2009/07/01(水) 19:06:07 ID:CEVxpc5.
>>479
コモンの方にchangestateでstateno=0に飛ばせばいい
適当にストップする条件付けておくのを忘れないようにしませう

482MUGEN名無しさん:2009/07/01(水) 22:40:19 ID:bgtrTrrY
>>477
2行目はRoundState=2の時点でRoundState!=1も成立してるから後者は無駄だぞ
あとTrigger4はctrlが抜けてるからタッグとかで食らいぬけしそう

>>481
待て待て、キャラによっちゃ停止モーション(と硬直)があるのも多いからちゃんとダッシュの記述確かめてそれに従わないと
まあ停止モーションあっても普通に直しゃがみでキャンセルできちゃったりすることもあるけど。

483MUGEN名無しさん:2009/07/02(木) 03:36:10 ID:iGfc6mvc
コンボのループ回数を判別する方法ってないかな?

2ループでフィニッシュ技をやりたいんだがループ回数の指定方法がわからんから永久にループして10割コンボになってまう…

484MUGEN名無しさん:2009/07/02(木) 08:36:49 ID:zR/zXVCA
ループするたびにvarを1増やしていって2になったらそれ以上コンボさせない
ってすればいいんじゃない?

485MUGEN名無しさん:2009/07/02(木) 10:07:39 ID:YSvyuAoo
空中ダッシュの記述について質問です。
キャラクターのCNS内の記述では
;Air Dash
[state -2,Varset]
type = varset
trigger1 = statetype!=A
var(11) = 0         ←空中ダッシュ用の制御var

そして空中前ダッシュ後ダッシュの記述の中に
[state 110,varadd]           ←空後ダッシュは115
type = varadd
trigger1 = 1
var(11) = 1
という記述があり、cmd内の空中ダッシュの条件が
statetype=A&&!var(11)
というものでした。つまりvar(11)が0のときにダッシュできて、ダッシュは一回だけと
いうことだと思うんですが、その条件どおりに記述を組むと
空中ダッシュの終わり頃に空中で再度ダッシュしようとして、でもその場で尻を
ふんっふんっっふんっ(フクダーダではない)と振っているような挙動になってしまいます。
[state -1,空前ダッシュ]
type=changestate
value=110
triggerall=var(48)>=1       ←var(48)はAIのvar
triggerall=!var(11)
triggerall=statetype=A
triggerall=ctrl||stateno=[600,650]
この記述が基本条件でいろいろ試してみたんですが、今日もムキムキの尻を振られて
困ってます。たすけて;;

486MUGEN名無しさん:2009/07/02(木) 12:24:04 ID:OgQ5pHkM
とりあえず、displaytoclipboard使って、自分で操作した場合とAIの場合とで、
var(11)の変化に違いがないかを調べてみると良いと思う。
違いがなかったらトリガーの問題かな〜

487MUGEN名無しさん:2009/07/02(木) 12:36:18 ID:YSvyuAoo
一応それもすでに試してまして、var(11)の数字を見ていたんですが
表示されるvar(11)に違いはなかったです
人操作のときはちゃんと一回のダッシュで止まってくれて、ためしに
ダッシュ中のvaraddで
[state 110,varadd]           ←空後ダッシュは115
type = varadd
trigger1 = 1
var(11) = 1

[state 110,varadd]           ←空後ダッシュは115
type = varadd
trigger1 = 1
var(11) = 0
にしてvar(11)が増えないようにしてみたら、今度は連続で
ダッシュできるようになったので、このvar自体はちゃんと機能してるようです
CNS内やcmdのダッシュの記述を上に持ってきて優先順位を上げてみたりもしたんですが
やはり治らず

AI作成の途中までは普通に空中ダッシュでも止まってくれたんですが、ある時期を境に
こんな挙動になったのでなにかしら触ったせいなのは間違いないのですが、
肝心の場所がわからないため虱潰しな感じです

488MUGEN名無しさん:2009/07/02(木) 17:59:29 ID:iGfc6mvc
>>484 うーん。
その記述の仕方がイマイチわからんのです。
どっか詳しく載ってるサイトとか無いですかね?

489MUGEN名無しさん:2009/07/02(木) 21:44:23 ID:OgQ5pHkM
>>488
あんま基本的なことじゃないから解説は無い気がする。
キャラ製作の知識があれば何となく思いつくと思うんだが・・・

1 コンボ中以外は常に0になる変数用意。var(x)とする。
2 ループ始動技の該当トリガーの(trigger1とかtrigger2とかの)最後の行にtrigger*=var(x):=var(x)+1と入れる
3 ループ始動技のトリガーのどこかに、var(x)<(ループ回数)というのを加える
でとりあえず行けるかな。varじゃなくてfvarでも可。
2番の、最後の行ってのは割と重要なんで気をつけて

490MUGEN名無しさん:2009/07/03(金) 11:59:16 ID:GSpeWJ56
ダッシュ中にアニメが切り替わりません。

ステート100に飛ばしたら北斗のブーストみたいに1枚絵のまま移動します。
何が原因でしょうか?

; RUN_FWD
[Statedef 100]
type = S
physics = S
anim = 100
sprpriority = 1
ctrl = 1

[State 100, 1]
type = VelSet
trigger1 = 1
x = const(velocity.run.fwd.x)

[State 191,]
type = PlaySnd
triggerall = time = 1
trigger1 = Alive
loop = 1
value = s5,0
channel = 6

[State 100,]
type = StopSnd
trigger1 = command != "holdfwd"
trigger2 = Anim != 100
channel = 6

[State 100, 2] ;Prevent run from canceling into walk
type = AssertSpecial
trigger1 = 1
flag = NoWalk

[State 100, 3] ;Prevent from turning
type = AssertSpecial
trigger1 = 1
flag = NoAutoTurn

[State 100, 4]
type = ChangeState
triggerall = var(59) = 0
trigger1 = command != "holdfwd"
value = 0


[State 100, 4]
type = ChangeState
triggerall = var(59)>0
trigger1 = enemy,movetype = A && inguarddist
trigger2 = enemy,numproj > 0
trigger3 = roundstate != 2
trigger4 = p2bodydist x < 0
value = 0
ctrl = 1

cnsのダッシュ制御の記述です。

491MUGEN名無しさん:2009/07/03(金) 17:02:25 ID:p2f4XU6I
>>490
説明面倒だから>>412から見ろ

492MUGEN名無しさん:2009/07/03(金) 17:56:12 ID:kEczf1ng
前方と後方へのジャンプってどうやって判別させてるんですか?

ステートって同じですよね?

前方へジャンプさせたいのになぜか後ろへジャンプしてしまいます……

493MUGEN名無しさん:2009/07/03(金) 20:00:51 ID:WWZxWXPg
もう、さすがにこのスレ普通に他人のなり、スレさかのぼるなり、サイト行くなりすれば解かる質問多すぎるだろう・・・

494MUGEN名無しさん:2009/07/03(金) 21:54:20 ID:ctbLcEZ.
参考サイト一覧とか作ったほうがいいかもね

495MUGEN名無しさん:2009/07/03(金) 23:47:42 ID:NyUOc2Fg
>>493
そう思うなら話題を振るんだ!

別に初心者質問スレでもないわけだし・・・
よし、じゃあもう1回飛び道具対策の話題を振りなおしてみようか

>>494
気が向いたらやってみるわ

496MUGEN名無しさん:2009/07/04(土) 01:57:22 ID:Hqx1FR4E
このスレのログまとめようか?

497MUGEN名無しさん:2009/07/04(土) 09:29:06 ID:wzSJhigY
>>496
お願いしたい

498MUGEN名無しさん:2009/07/04(土) 10:30:57 ID:P.GYSEww
varとかみんなどこで覚えたんだろうな
俺はYes氏の製作講座だが、他に解説してるサイトはないもんかね?

499MUGEN名無しさん:2009/07/04(土) 11:10:09 ID:HWFK7qjA
>>498
分子氏のサイト読み砕いてたら大体解かるようになった。

500MUGEN名無しさん:2009/07/04(土) 17:40:47 ID:atHyrwco
varはキャラ製作中はイミフだったけど、AIを組む段階になって初めて理解したなぁ

501495:2009/07/05(日) 00:19:19 ID:EvbbHEf6
ありのまま今日起こったことを話すぜ・・・
「参考サイトは既にwikiにあるので十分と思ってしまい、
気づいたら自分が製作講座っぽいのを作ろうとしていた」

考えてみたら、俺ほぼニコニコMUGENwikiから飛べるサイトくらいしか思いつかないんだよね。
それ以外の参考サイトに詳しい人がいたらよろしくお願いしますorz
ついでにショボいQ&Aらしきものを作ってみた。スッキリした文章書けるようになりたい。
ttp://www7b.biglobe.ne.jp/~tsuyoshishiki/QA/index.html

>>496と被っちゃいそうなんだけど、
俺の方でも言ってもらえれば、よくある質問くらいは載せるのでよろしく〜

502MUGEN名無しさん:2009/07/05(日) 12:14:57 ID:0vOR1Ljs
>>501
GJなんだぜ

503MUGEN名無しさん:2009/07/05(日) 13:21:01 ID:GPZ8eNDU
>>501
お疲れ様なのです
初心者なんでこういった解説は凄くありがたい
今後の更新期待してますのぜ
それと出来ればAIに溜め技使わせる方法載せてもらいたいなとか思ったり

504MUGEN名無しさん:2009/07/05(日) 13:26:41 ID:RD.IvR.s
>>501 おお GJ

贅沢を言ってしまうと平成㌢氏のマニュアルや最果ての講座のように
記述例も書いた方がもっとわかりやすくていいかも。

文章だけだと何度も読み返さないといけないけど記述例があれば一発
でわかるし。

505MUGEN名無しさん:2009/07/05(日) 13:37:16 ID:EvbbHEf6
需要はあるみたいで良かった。

>>503
書いてみます。基本はダッシュや歩きと同じだね

>>504
やっぱ例もあった方がいいかー
んじゃ、簡単なのを併せて載せとくことにします

506MUGEN名無しさん:2009/07/05(日) 15:17:50 ID:6z2vCPCk
>>501
遅ればせながらGJ。
いきなりこんなことを言うのもアレかもしれんが
未掲載項目にもwktkが止まらないぜ。

507MUGEN名無しさん:2009/07/05(日) 16:09:31 ID:/wHtkLXI
varの使い方を憶えようと思ってるんですけど、解説してるサイトとかありませんかね?
Yes氏のサイトは見ました

508MUGEN名無しさん:2009/07/05(日) 17:09:11 ID:RD.IvR.s
; RUN_FWD
[Statedef 100]
type = S
physics = S
anim = 100
sprpriority = 1
ctrl = 0

のctrlの値って0だっけ?

509MUGEN名無しさん:2009/07/05(日) 17:15:28 ID:ieYNWM.k
デフォはctrl=1
ctrl=ifelse(var(59),0,1)とやる事もある

510MUGEN名無しさん:2009/07/05(日) 17:32:38 ID:RD.IvR.s
でも0にしてる人多いよね?なんかあるのかな?

511MUGEN名無しさん:2009/07/05(日) 20:03:46 ID:5bWt7ZL.
飛び道具による起き攻めをガードさせるとなぜかキャラがガードしたまま水平移動してしまいます。

これはなぜですかね?

512MUGEN名無しさん:2009/07/05(日) 20:44:18 ID:6cuiTk5M
基本地上コンボ自キャラの前(Dist=30,50あたり?)に固定のヘルパーを出しておいて、
そいつに攻撃させるかとかどうかして相手Clsnとの接触を見て相手との距離をはかって
コンボ開始の攻撃あててく、という感じのヘルパーを置くのは有効ですかな?
㌢氏のソルにDistは信用ならんとあったし、
確かに明らかに計り間違えてるときがあるじゃねーかって時があるから気になりますおさん・・・

513MUGEN名無しさん:2009/07/05(日) 21:41:15 ID:EvbbHEf6
>>510
ダッシュ→即ガードができないようにしてるんじゃないかな。
停止モーションはさむゲームが殆どだろうし

>>511
流石に状況詳しく書いてもらわないと分からないぜ・・・
まあ移動するってんなら移動系のステート暴発かもね

>>512
hitdef当てたのに当てて無い場合と全く同じ状況にするのって可能なの?
それができるなら有効かもしれない。
あとタッグの時に当身とられた場合とか気をつけて。

ぶっちゃけ、コンボルート色々用意しとけばDist系で十分だと思うけどね。
経験上は困ったことがほとんど無いし。

514MUGEN名無しさん:2009/07/05(日) 23:09:37 ID:u.PuzWLs
>>512
ヒット確認(MoveHit=1)するには1F経過しないといけないはずだから
それやると相手の行動が止まったり攻撃されてると勘違いしてガードしたり
とにかくいろいろとおかしなことになるはず
てかそれが出来るなら飛び道具に対してヘルパーに食らわせて距離確認したりできるんだが・・・
まあ試してみればいいけどろくなことにならないと思う
だいたい食らいの姿勢も判断時と攻撃発生時で同じとは限らないからどのみちキャラによっては当たらない

ついでに言えばDistが信用ならないのはDistはキャラの基本設定で、食らい(などの判定)の設定であるAirとは直接関係ないから
記述ひねくり回せば学習出来るかもしれないが、はっきり言って諦めるほうが無難

>>513
そういう考えの人がいないとは言えないけど普通違うと思う
Ctrl=1の移動ステートはそのままだとジャンプやら歩きやらをしてしまうからその防止のため
AIはNoWalkとか無視するしね
すぐにガードさせたくないならガードに入る記述で制限してやればいいだけだし

>>511
ガードステートに何かVel操作があるか、あるいは同じ状況で歩きやダッシュをする記述があるか、かねぇ
もしくはガードステートから直接移動ステートにChangeStateしてるか
姿勢がバタバタしてるようなら1Fごとに移動とガードを繰り返してると思う
そうでないならガードステートに何かあるんだろう
でも正直わからんな、ポーズかけてScrollLockで1Fずつ動かしてみれば何かわかるかも

515MUGEN名無しさん:2009/07/05(日) 23:56:05 ID:6z2vCPCk
横から失礼。

今まで本体管理で毎フレームごとにvarを操作してたところを
helperの方に管理するようにした途端
ヒットストップ中にmugenが処理落ちするようになったんだ。
せいぜいコマが飛ぶ程度ではあるんだが、
この手の症状ってよくあるんだろうか。
ちなみに一番顕著なのがexplodを大量に吐くタイプの超必発生時。
本体管理にしてた時には問題がなかったんで、
PCの能力不足ということではなさそうなんだが・・・。

516MUGEN名無しさん:2009/07/06(月) 01:09:35 ID:BNtudp4Q
>>514
ごめん、停止モーション云々が蛇足だった・・・
ダッシュ中でもnoguard系を使わないでctrl=1なら、デフォAIがガードしちゃう時があるんだよね
これとnowalkは同じ原理だから、言いたいことは同じだったつもりです。
そんなわけでassertspecialは有用。
勘違いもしやすいステコンだけど、mugen本体AIを抑えるには一番手っ取り早いんだよね


>>515
俺はそういう風な処理落ちはしたこと無いなあ・・・
ヒットストップ中ってのもよく分からないし

実は全ヘルパーが同様の計算するような記述になってて、
超必やヒットエフェクトではExplodと同時にヘルパーも大量に放出されているせいだとか。無いか。

517MUGEN名無しさん:2009/07/06(月) 11:29:36 ID:2dDbe8x6
>>470です
色々弄くってみましたが矢張り解決せず…
とりあえず記述はこんな感じにしてみたんですが
[State -1,0];立ち弱
type = ChangeState
value = 200
triggerall = roundstate = 2
triggerall = var(59) != 0
triggerall = !winko
triggerall = !Ishelper
triggerall = var(0) = 0
triggerall = statetype != A
triggerall = p2movetype != H
triggerall = p2stateno > 199
triggerall = p2statetype != L
triggerall = fvar(38) > 0
triggerall = P2BodyDist X <= 27
triggerall = P2BodyDist Y = [-82,-42]
triggerall = enemynear(var(8)),animtime = -3
triggerall = !inguarddist
triggerall = random <= var(59) * 60
trigger1 = ctrl || (stateno = [1,20]) || stateno=100 && time >= 3
この下にダッシュやジャンプ、その下の方にもう一個
[State -1,0];立ち弱
type = ChangeState
value = 200
triggerall = roundstate = 2
triggerall = var(59) != 0
triggerall = !winko
triggerall = !Ishelper
triggerall = var(0) = 0
triggerall = statetype != A
triggerall = p2movetype != H
triggerall = p2statetype != L
triggerall = fvar(38) > 0
triggerall = P2BodyDist X <= 27
triggerall = P2BodyDist Y = [-82,-42]
triggerall = enemynear(var(8)),animtime< -4
triggerall = !enemynear(var(8)),ctrl
triggerall = !inguarddist || prevstateno = 300 || stateno = 300
triggerall = random <= var(59) * 110
trigger1 = ctrl || (stateno = [1,20]) || stateno = 100 && time >= 2 || prevstateno = 300 && animtime = 0
こんな感じで入れてるんですが…
もう自分でも何やってるか分からなくなってきたorz
ご教授お願いします

518MUGEN名無しさん:2009/07/06(月) 12:35:19 ID:t6NL2zJM
・変数の値は逐一確認。
・とりあえず距離条件は取っ払ってみる。そうでなくても狭すぎるイメージ
・triggerall = enemynear(var(8)),animtime< -4とかのトリガーも有効になりにくいと思う

もしくは既にうまく動いているステコンを、
1行ずつ立ちPに近づけていけば、どこに問題があるのかわかるかもね。

519MUGEN名無しさん:2009/07/06(月) 14:36:18 ID:Z5NZJTDE
Trigger =
Trigger = Var(X):=Y
Trigger =
Trigger = Var(X):=Y+1
これで調べればいいと思う

520MUGEN名無しさん:2009/07/06(月) 15:15:55 ID:7PcYuu96
コンボフラグ変数について載ってるサイト無いかな?

平成㌢氏のマニュアルだと、記述の仕方しか載ってないし、過去スレみてもmovehitを省略できる?みたいな感じで書かれていたがイマイチわからない……

521MUGEN名無しさん:2009/07/06(月) 15:23:40 ID:26Jlij/o
M3氏のサイトのは?

522MUGEN名無しさん:2009/07/06(月) 15:28:53 ID:tcs3C0GI
>>517
一個目はvar以前の問題にしか見えないんだけど
和訳してやる
p2stateno > 199         敵が攻撃動作中(P2BodyDist X平均160以下がinguarddist成立範囲)
P2BodyDist X <= 27       敵が近距離
P2BodyDist Y = [-82,-42]    敵が空中時
enemynear(var(8)),animtime = -3 敵anim残り3F時「のみ」
!inguarddist          敵が非攻撃/(攻撃判定anim終了時も解除だっけか?)/平均で言えば、P2BodyDistXが160以上
相反する条件並べてtime縛りしてるんだから、成立するとは思えんな
そもそも>>472で、「inguarddist」の事で指摘されてんだろ

523MUGEN名無しさん:2009/07/07(火) 09:02:39 ID:3HeiuZIo
2日かかってようやくパンチ打てるようになったぜ
しかしなんで垂直ジャンプやガードも最初からコマンド管理制にしてなかったんだと素朴な疑問
ランダムしたければランダムしたい奴がランダムいっぱいつければいいだけの話だろうに・・・
おかげで挫折しそうだ・・・w
でも負けられない、姉御のためにも・・・

524MUGEN名無しさん:2009/07/07(火) 15:18:37 ID:NANaGbjE
>>523
そもそもmugenは対人向けの仕様だし、
これからまだまだ更新を重ねるつもりで作られていたんだから仕方が無い。

AIを作る技術なんて後づけで考えられたものだろうしね

525MUGEN名無しさん:2009/07/07(火) 21:15:58 ID:r3/1.lSw
ジャンプキックが全然上手く相手に当てられないよ……

ジャンプが相手の前に着地したり上手く当たってもガードされたりカウンターされる…

日影氏のオズワルドとかよくあんなに的確に空中から攻撃当てられよな……

なんかコツとか無いかな。

526MUGEN名無しさん:2009/07/08(水) 02:01:39 ID:.STdsYdw
>>525
それこそ日影氏のオズワルドのAIを参考にすればいいじゃない

527MUGEN名無しさん:2009/07/09(木) 22:53:28 ID:hIcmnakU
ジャンプステートのAI仕様化とか初心者にはきつすぎるだろ・・・
holdupコマンドでジャンプ発動するのはdef40のみ
AIはコマンドとか関係ないからdef40以外のステートでも指定すれば動くと
それだけのことに気づくのに1週間かかったぜ
wikiは完全封印するところまで、⑨氏の説明は完全初心者には若干省き気味と・・・
見落としてただけかもしれんが、他に説明してるサイトってあるだろうか?
過去に話題に上がってる蓬莱氏のサイトは閉鎖したようだし・・・

528MUGEN名無しさん:2009/07/10(金) 12:22:15 ID:eZ55lZlc
AIを弱体化させる人って基本どこを弱体化してるんだろう。

並キャラのAIをGルガレベルまでにしようとしたら強くしすぎてしまった…

529MUGEN名無しさん:2009/07/10(金) 12:32:49 ID:L1xYGFFY
無駄な動きをさせる、超反応率下げる
この二つやって尚強いなら並キャラ性能とは言えないだろうな

530MUGEN名無しさん:2009/07/10(金) 12:53:42 ID:eZ55lZlc
>>529 MUGEN界での並キャラかな。
原作だとまぁまぁ高性能かな。主人公キャラだし。

超反応はさせていないです。

無駄な動きか……
挑発とかかな?

531MUGEN名無しさん:2009/07/10(金) 14:38:32 ID:7ukvJq9k
>>530
横からだが
・睨み合っている時に無駄にジャンプしてみる
・失敗するはずのないコンボを無駄に失敗してみる
・関係ない時にどうでもいい技を無駄にぶっぱさせてみる
格闘ゲームを人間の初心者がプレイする際にとりうる行動を取り入れてみると、人間くさくなっていいかもな
その上で、100%隙を与えるものではなく、場合によってはそう悪く無い展開に転ぶ無駄さが、見ていて面白い(単純に舐めプレイと思われない)無駄のない無駄だと思う

532MUGEN名無しさん:2009/07/10(金) 15:38:24 ID:40wtkq7k
スクリューチャンスで何故か飛ぶとか大斬りチャンスで弱斬りとかそんな
人間臭さ=無駄な動きと考えても良いかも

533MUGEN名無しさん:2009/07/10(金) 17:07:21 ID:v.T4rp3M
スクリューされる!と思ったらコマンドミスでジャンプしてるよみたいなものか
ガイルのサマソ失敗でJKが出るみたいな

534MUGEN名無しさん:2009/07/10(金) 17:53:15 ID:7ukvJq9k
>>522 >>533
なんつうあるあるw

後は落下地点に合わせて出したはずのダッシュ攻撃の間合いを見誤る
(=ランダムで目的地点までダッシュしきる前に技を出させて空振りさせる)
とかか?

しかし初製作が海外製のキャラとかレベル高かったわぁ・・・
ようやくAI専用ステートも書き終わったしこれから技発動の条件付けだ、とチラ裏
やらせたいこと・立ち回りは完璧に頭にあるのに、それをさせるのにベストな記述の仕方が分からんってのはもどかしいもんだな

535赤犬:2009/07/10(金) 19:40:41 ID:PwRn4PxA
AIの強さはガードの上手さ、とAI製作さっぱりわからん俺が言ってみる
実際の格ゲーでも最初の相手はこちらの攻撃はほぼ全部喰らうけど、
ラスボスになるとキッチリガードしてくるようになるしね

536MUGEN名無しさん:2009/07/10(金) 21:01:53 ID:eZ55lZlc
ありがとう 色々参考にします。

AIレベル最大でも遊びは入れた方がいいかな?

537MUGEN名無しさん:2009/07/10(金) 22:04:13 ID:7ukvJq9k
>>536
何を求めるかだな
・キャラの性能・理論値をフルに引き出して戦わせたい
・一見無駄と思われる動きを織り交ぜつつ、それでも各場面でそれなりの対処をする様にしておいて、偶然がドラマを生むAIにしたい
究極はこの2パターンだろうと思う、結果はどうであれ
AIレベル最大の時のみ前者とするなら遊びは省くべきだろうと思う

538515:2009/07/10(金) 22:49:12 ID:BCspMXLY
遊びの有無も好みじゃないかね。超反応と似たようなものかと。

そしてやっと処理落ちの原因が判明。
どうやらバックグラウンドでウイルスバスターが
HDDにアクセスしていたようだ。

539MUGEN名無しさん:2009/07/11(土) 10:29:53 ID:uzb6NWCE
とりあえずAIが完成したー

ただ無理矢理繋げすぎたせいか稀にフィニッシュがスカるww

540MUGEN名無しさん:2009/07/11(土) 14:00:39 ID:vwFGTCjk
>>517です
一応アドバイスとか元にあれこれ試してみたんですがまだ棒立ちが直らず…
[State -1,0];立ち弱
type = ChangeState
value = 200
triggerall = roundstate = 2
triggerall = var(59) != 0
triggerall = !winko
triggerall = !Ishelper
triggerall = var(0) = 0
triggerall = statetype != A
triggerall = p2movetype != H
triggerall = p2stateno > 199
triggerall = p2statetype != L
triggerall = fvar(38) > 0
triggerall = P2BodyDist X <= 27
;triggerall = P2BodyDist Y = [-82,0]
triggerall = !inguarddist
triggerall = random <= var(59) * 60
trigger1 = ctrl || (stateno = [1,20]) || stateno=100 && time >= 3
立ち中とかダッシュ・ジャンプの記述を挟んで下の方に
[State -1,0];立ち弱
type = ChangeState
value = 200
triggerall = roundstate = 2
triggerall = var(59) != 0
triggerall = !winko
triggerall = !Ishelper
triggerall = var(0) = 0
triggerall = statetype != A
triggerall = p2movetype != H
triggerall = p2statetype != L
triggerall = fvar(38) > 0
triggerall = P2BodyDist X <= 27
triggerall = P2BodyDist Y = [-82,0]
triggerall = !inguarddist || prevstateno = 300 || stateno = 300
triggerall = random <= var(59) * 110
trigger1 = ctrl || (stateno = [1,20]) || stateno = 100 && time >= 2 || prevstateno = 300 && animtime = 0
アドバイスされた事はあらかた試したんですが直りません
p2bodydist yの条件が厳しかった気がしたので修正したのとanimの条件撤去しました
inguarddistは何回か>>472の通りにしてみたんですがやっぱり棒立ちだったんでそのままです

541MUGEN名無しさん:2009/07/11(土) 14:25:08 ID:k1eSyWr6
varの値も全部チェックしてんのか?
p2stateno > 199も外してみろ
トリガーが正常かどうか調べる為に一度random外して動かしてみろ

542MUGEN名無しさん:2009/07/11(土) 18:21:14 ID:vwFGTCjk
var(0)は元々の技に付いてた記述で、追加したのはAIフラグのvar(59)と㌢氏のからコピペしたp2name指定のfvar(38)です
他の技も同じような記述なんですが、p2stateno>199を書いてるのは立ち弱としゃがみ弱くらいですんで、この条件に引っかからなかったら下の記述を読む筈なんですよね
randomの値は1フレームごとに変化する筈なんで引っかからなくても流石に棒立ちってのはおかしいかと思いまして

543MUGEN名無しさん:2009/07/11(土) 18:55:52 ID:oD20ly9o
varの役割を聞いてんじゃなくて、varの値が成立条件を満たしてるか否かだけ聞いてるんだけど
それに他へのチェンステも同じ様な記述なら、動く所からコピペしてチェンステNO変えてみるとか、
或いはdef200自体に問題があるとかも考えられるだろう

544MUGEN名無しさん:2009/07/11(土) 19:09:51 ID:huBFzRTc
プログラムってのは、思った通りに動くんじゃなくて、書いた通りにしか動かない。
めちゃくちゃ素直な奴なんだよ。
読む筈、じゃなくて、そう動かないならそう書いていないからだろう。
だからこそ、>>541はどこでしくじってるのか見付けるために、
あれこれ条件を緩めてみればって言ってるわけだ。

545MUGEN名無しさん:2009/07/11(土) 19:39:05 ID:oD20ly9o
つーかちょと待て
var(0)のvarset条件は何にしてる

546MUGEN名無しさん:2009/07/11(土) 20:37:29 ID:vwFGTCjk
とりあえずp2stateno>199とfvar(38)とrandomの部分コメントアウトして試してみたけど棒立ち直りませんでした
動く記述っつっても避け動作とダッシュ・歩き・ジャンプくらいしかないんでどうすればいいのやら
あ、var(0)はstate 1000に飛ばした時に1,1001に飛ばした時に0に戻るよう組まれてるみたいです
スタンドモードのon/offなんでこの場合にはあんまり関係ないかと思うんですが

547MUGEN名無しさん:2009/07/11(土) 21:11:50 ID:e7Hzw6qg
>>540
[State -1,0];立ち弱
type = ChangeState
value = 200
triggerall = roundstate = 2
triggerall = var(59) != 0
triggerall = !winko
triggerall = !Ishelper
triggerall = var(0) = 0
triggerall = statetype != A
triggerall = p2movetype != H
triggerall = p2stateno > 199
triggerall = p2statetype != L
triggerall = fvar(38) > 0
triggerall = P2BodyDist X <= 27
;triggerall = P2BodyDist Y = [-82,0]
triggerall = !inguarddist
triggerall = random <= var(59) * 60
trigger1 = ctrl || (stateno = [1,20]) || stateno=100 && time >= 3
これを

[State -1,0];立ち弱
type = ChangeState
value = 200
triggerall = roundstate = 2
triggerall = var(59) != 0
triggerall = !winko
triggerall = !Ishelper
triggerall = var(0) = 0
triggerall = statetype != A
triggerall = p2movetype != H
triggerall = p2stateno > 199
triggerall = p2statetype != L
trigger1 = ctrl || (stateno = [1,20]) || stateno=100 && time >= 3
これに書き換えて一度試して
[State -1,0];立ち弱
type = ChangeState
value = 200
triggerall = fvar(38) > 0
triggerall = P2BodyDist X <= 27
;triggerall = P2BodyDist Y = [-82,0]
triggerall = !inguarddist
triggerall = random <= var(59) * 60
trigger1 = ctrl || (stateno = [1,20]) || stateno=100 && time >= 3
さらにこれに書き換えてもう一度試すと良いんじゃないかな
多分バグった動きをするはずだけど、どこに原因があるか特定しやすくなると思うよ

548MUGEN名無しさん:2009/07/11(土) 21:54:39 ID:fYy8otpk
>>546
スタンドONでvar(0)が1?
㌢氏のAIのP2name記述をコピペして?
もしコピペそのまま放置してるなら、fvar(38)のvarsetがまともに働くとは思えんが
氏のAIを使うには、var(0)は敵が生きてる限り0を返さなきゃ効果が無いからな

関係無い場所が「予期せぬ事で狂ってないか」を調べないで、バグが潰せるわけ無かろう
デバッグモードで「varは全て条件満たしてます」っつー返答すらねーから、
聞くしかないの

549MUGEN名無しさん:2009/07/11(土) 22:19:14 ID:yBVzgNpI
>>540
こういう時は逆に考えるんだ
trigger1 = ctrl
を初めとする「100%問題ないもの」だけ残して全て消した後、場合によっては問題の発生しそうなトリガーを1つずつ追加していくんだ
動かなくなった時点でそいつが悪さしているということだ
少しめんどいがトリガーを頭の中だけで上手く足し算できない場合はこれ程有効な手もない
むしろバグった時のその問題探しが楽しい俺がマゾいのか、そうか

550MUGEN名無しさん:2009/07/11(土) 22:27:26 ID:eRdAUCCs
だから>>519を使えと

TriggerAll = 条件1
TriggerAll = Var(X):=1
TriggerAll = 条件2
TriggerAll = Var(X):=2
Trigger1 = 条件3
Trigger1 = Var(X):=3
Value =
とした場合Var(X)が1にもなっていなかった場合条件1が悪い
Var(X)が1で止まっていたら条件2が悪い
Var(X)が2で止まっていたら条件3が悪い
条件3まで全部出来ていたらVar(X)は3に成っている筈

551MUGEN名無しさん:2009/07/11(土) 22:52:07 ID:2bzfAKuI
コピペはあかん・・・理解せな・・・

AI講座もある程度の記述例は示していますが、
具体的な例を出さないのは記述について考えて、
自分の記述を作れるようになって欲しかったからです。

って⑨氏言ってたよ。

552MUGEN名無しさん:2009/07/11(土) 22:54:48 ID:vwFGTCjk
>>548
いや、p2nameの指定で返すvarは適当に空いてる数に置換して使ってます
>>547
早速その方法を試してみたんですが、どっちに変えても動きませんでした
もうどこが悪いのか…

553MUGEN名無しさん:2009/07/11(土) 23:20:30 ID:Y1oKwZH.
549が書いてるように元々の技のトリガとtrigger1 = ctrlだけで一度やってみて

もしくは他の場所の記述で[Stateの後のスペース抜けてるところ無い?

これでダメならお手上げ
もうファイルうpした方が早いんじゃないかと

554MUGEN名無しさん:2009/07/11(土) 23:53:09 ID:yBVzgNpI
>>552
良い加減煮詰まって辛いのは十分に分かるが、もう少しがんばれ
よく分かってないものをコピペだけでやってるなら改めて勉強、そうでないなら>>550、そんなん理解できんというなら猿でもできる>>549を試すんだ

555MUGEN名無しさん:2009/07/12(日) 00:34:14 ID:FfjQMNnE
棒立ちとあるが、この200以外のチェンステは動くんだろ?
>>547の二個目がダメでfvar(38)>0もキッチリ入ってるなら、
動くチェンステ記述からコピペしてvalue変えるしかねーな
改行で全角空白とか何処かに入ってるかもしれねーし
あと、];***の記述方法は止めておけ
;の打ち間違いだけでstateが無効になる

556MUGEN名無しさん:2009/07/12(日) 00:35:43 ID:voW0q0ZU
>>552です
>>553をチェック、修正しても直らなかったんで
とりあえず>>549を試してみることにしたんですが
[State -1,0];立ち弱
type = ChangeState
value = 200
triggerall = var(59) = 0
triggerall = !winko
triggerall = !Ishelper
triggerall = var(0) = 0
triggerall = command = "x" && command != "holddown"
triggerall = statetype != A
trigger1 = ctrl
trigger2 = movecontact
trigger2 = stateno = 200 && time >= 14 ;立ち弱
trigger3 = movecontact
trigger3 = stateno = 300 && time >= 14 ;しゃがみ弱
これを
[State -1,0];立ち弱
type = ChangeState
value = 200
triggerall = roundstate = 2
triggerall = var(59) != 0
triggerall = !winko
triggerall = !Ishelper
triggerall = var(0) = 0
triggerall = statetype != A
trigger1 = ctrl || (stateno = [1,20]) || stateno=100 && time >= 3
こんな感じにして記述があった場所に入れてみたんですがやはり棒立ちのままです
もう何がなにやら…
>>550も試してみた方がいいんでしょうか
それともここまでやって駄目なら何か別の所に原因があるんでしょうか

557MUGEN名無しさん:2009/07/12(日) 00:41:00 ID:voW0q0ZU
>>>555
いえ、マトモに動くのはしゃがみ、歩き、ダッシュ、ガード、アドガ、ジャンプ、回り込み位です
とりあえず立ち回りの所の一番上に記述してあった立ち弱をここに書いただけで、しゃがみ弱も立ち中も全く動きません
全角は一応確認済みです
セミコロンの場所はちょっと変えてみますが、上記の普通に動いてくれる場所も同じ書き方してるんでこれで直るかは微妙な所のような気も

558MUGEN名無しさん:2009/07/12(日) 00:50:27 ID:7QV/jcbM
立ち弱の記述がまともに動く動作より下に書いてあるなら
立ち弱の記述を一番上にして試してみて

これで動くならAI記述の途中で記述ミスがあってそれ以降の記述が認識されてない

559MUGEN名無しさん:2009/07/12(日) 00:55:20 ID:FfjQMNnE
動作全滅となると、チェック範囲が一気に広がるな
-2ステートで敵生存認識varを使ってて、そのvarが0ではなく1を返してて敵を認識しないとか、な
];**方法で書くのは、「打ち間違いを起し易いから」と言う意味で、絶対に打ち間違えない自信があるなら別に直さんでも構わんが
まさかと思うが、[statedef -1]を二個作ってるとか無いよな

560MUGEN名無しさん:2009/07/12(日) 00:58:07 ID:FfjQMNnE
あでもenemynear(var(*))使ってねーからそりゃねーか

561MUGEN名無しさん:2009/07/12(日) 01:11:56 ID:/GGQ8Seg
それで動かないとなると…
Var(59)がおかしい:triggerall = var(59) != 0を一時消して人操作で勝手に出るか様子見
def200がおかしい:200の中を見てみる
別の記述がおかしい:ChangeStateで0に飛ばしてる記述がある?
記述場所がおかしい:cmdの元からある人操作用の記述の真下に書いてみてとりあえず動作確認

562MUGEN名無しさん:2009/07/12(日) 01:29:56 ID:FfjQMNnE
別途AI用cns組んでてdefで読み込ませてないとかだったら笑う

563MUGEN名無しさん:2009/07/13(月) 00:16:07 ID:agMW1vGA
>>557です
とりあえずこの記述自体には問題ないみたいなんで、他のところで何かおかしなことやってないか探してきます
上の方で間違えてその下の記述全滅ってのはよくある事なんですかね?

564MUGEN名無しさん:2009/07/13(月) 11:07:41 ID:4AUmmYXE
普通は無い、おかしいであろう部分は上で指摘されてるし
記述自体に問題がないなら問題なく動くのが当たり前

565MUGEN名無しさん:2009/07/13(月) 12:48:24 ID:VaJgghj6
場合によってはあるこれは自分の場合だけど、例えばTriggerのどこかに\があった場合
そこから先は読み込まれないような状態になる
まあTrigger以外の場所でも出来るけど
しかもエラメも出ないから困りもの
他にも何かあった気がするけど原因を覚えていない

566MUGEN名無しさん:2009/07/13(月) 13:49:12 ID:zzbJ7Up2
記述自体問題無いのにいきなりstatetype!=Aを認識せずに全技空中で出す事はあったな
未だに原因がわからんが、そういう時は一旦消して作り直すに限る
問題なく動く段階でのバックアップは必要

567MUGEN名無しさん:2009/07/13(月) 18:30:45 ID:IAGs2HNQ
記述自体問題ない・・・ねぇ
俺もあるにはあったな
Triggerの順番入れ替えがめんどくさかったから、
Trigger3
Trigger1
Trigger2
Trigger4
ってな具合で・・・これは用途別の位置、思いついて書いた順に適当にトリガー番号振ったせいだったが
後から内容を一切変えずに1〜4で綺麗に並べれば問題なく作動したが、Trigger4を書き足した直後の起動では常時このステートの条件を満たしていることになってた
ctrlやstateno!=が抜けていたなんてちゃちなもんじゃ断じてねぇ、もっと恐ろしいものの片鱗を味わったぜ
しかし逆に記述ミスが功を奏して意図していなかったコンボに派生するのも良くある話で

568MUGEN名無しさん:2009/07/13(月) 23:33:01 ID:EZYGTjN6
いいこと考えた
[State -1,0];立ち弱
type = ChangeState
value = 200
triggerall = roundstate = 2
triggerall = var(59) != 0
triggerall = !winko
triggerall = !Ishelper
triggerall = var(0) = 0
triggerall = statetype != A
trigger1 = ctrl || (stateno = [1,20]) || stateno=100 && time >= 3
これを
[State -1,0];立ち弱
type = ChangeState
value = 200
triggerall = roundstate = 2
triggerall = (var(59) != 0 || command = "x")
triggerall = !winko
triggerall = !Ishelper
triggerall = var(0) = 0
triggerall = statetype != A
trigger1 = ctrl || (stateno = [1,20]) || stateno=100 && time >= 3
こうして人操作で色んな場所に書いて試してみれば良いんじゃね

569MUGEN名無しさん:2009/07/13(月) 23:57:54 ID:agMW1vGA
>>568
ありがとうございます
試験終わったら試してみますね

570MUGEN名無しさん:2009/07/15(水) 08:39:57 ID:aY4eEyRk
小ジャンプや大ジャンプの記述って可能ですか?
ステートもアニメも全部一緒ですよね?

571MUGEN名無しさん:2009/07/15(水) 13:04:59 ID:vWJEVf.Y
ステートの中でコマンドに応じてY速度を変えている

572MUGEN名無しさん:2009/07/18(土) 04:17:36 ID:NgbFnVhY
>>569
とりあえず、弄くってる所が問題かどうか調べる為に、ここまで削ってみたら?
これでダメなら100%他の記述が原因。
これで動くなら、今の所が原因。

[State -1,0]
type = ChangeState
value = 200
triggerall = roundstate = 2
trigger1 = ctrl

573MUGEN名無しさん:2009/07/18(土) 05:12:52 ID:8l4F6lkY
>>569
他の処理を消すか処理の一番上に持ってきた上で、試してみた?
バックアップ取っておけば書いた処理を消したところで痛くも痒くもないんだから、
ここが悪い!って決め付けないで、先ずは悪いところの特定が先だと思うよ。

結果的に今問題にしてるところが悪いにしても、
他が悪いかどうかの選択肢が消えるだけでも十分意義はあると思う。
その上で、今のところが悪いんだったら、>>540とかから消してくんじゃなくて
>>572の状態から付け足していくのが一番早いと思う。

遠回りに見えるかもしんないけど、慣れるまではそんなもんだ。
というより、そうした方が「〜はダメなんだ」って分かるから良い経験になるよ。

つか、日本語で設計書書いてみてから始めたらどうだろうw
そこまでしてる人っているのかな?
AI作成じゃいねぇかw
設計書作っちゃえば、後は日本語を訳してファイルに落とすだけだぜ?
俺はやんないけどw

574MUGEN名無しさん:2009/07/18(土) 15:09:47 ID:djrTz7cQ
>>573
設計書まではないなぁ
ただベストな立ち回りと経験だけは頭にあるから、それに従ってくれる様に頑張って記述する感じか

しかし空中立ち回りは地上立ち回りに比べて更に記述量が多いな・・・総復習みたいなもんか
ところでAI作ってて思ったけど、皆キャラの強さ確かめる基準のキャラみたいなのいるだろうか?
参考までに俺は主にジャスティス・チップ・ヨハン・神人豪鬼・Gルガに審査をお願いしてる
更に余談だがギルティ勢のコンボ抜けとジャスティスのリーチが嘘臭くて泣きそうになるぜ・・・w

575MUGEN名無しさん:2009/07/20(月) 00:01:11 ID:yYKzyjbA
>>574
Gルガとヨハンじゃだいぶ強さに差がないか?w

自分がAI作る時の強さの基準はGルガにぼちぼち勝てる程度
それ以上の強さは俺には無理だw

576MUGEN名無しさん:2009/07/20(月) 22:04:38 ID:fOa5JGV6
>>547
大分相手がきついなw
あとは俺ならパチュリーとかマガキさんあたりにもぶつけとくかなあ。
固まり過ぎないかのチェックで。

577MUGEN名無しさん:2009/07/21(火) 00:39:52 ID:Lzdc8gAk
Type = VarSet
triggerall=var(59)>0
Triggerall= roundstate = 2
Trigger1 = (p2life<500)
fvar(20)=1

ってHPが500以下の時にfvar(20)の変数が1になるって意味ですよね?

578MUGEN名無しさん:2009/07/21(火) 01:28:35 ID:WbT2OhzI
>>577
そうだが、確かそれじゃデフォライフの敵のタッグモードだといきなりvarが入るぞ

579MUGEN名無しさん:2009/07/21(火) 13:58:01 ID:jJ8YnVGQ
LIFEは数値より%で式たてた方が良いよ。
キャラとかモードによって数値が違うから

580MUGEN名無しさん:2009/07/21(火) 16:59:43 ID:ETaLfm1M
(100 * enemynear,life / enemynear,lifemax) みたいに割合で出す感じかな?
あー、でもlifemaxってDos版で使えないんだっけか。
Dos版で取ろうとしたらどうやればいいんだ?

581MUGEN名無しさん:2009/07/21(火) 22:36:18 ID:J9cA3b5U
今どきDosを使っている人間がいるんだろうか・・・

582MUGEN名無しさん:2009/07/21(火) 22:43:02 ID:ETaLfm1M
>>581
Dos版でも取れる方法があるなら、そっちで取った方がいいと思うの。
使っている人がいる可能性が否定出来ない限り。

583MUGEN名無しさん:2009/07/22(水) 02:09:51 ID:zIsRbdZE
>>580
Lifeのトリガーは使えたっけ?
使えるようなら、開幕の相手Lifeを変数に記憶しておけばいいと思う。

あと、コンボルートとかAIの行動選択の為に相手Life参照する場合は、
相手の実ダメージを学習させた方が良いかもしれない。
mugenじゃこっちの想定してるダメージを相手が喰らう保証はないので。

584MUGEN名無しさん:2009/07/22(水) 04:58:05 ID:pJFu2QdI
>>583
おはよう。
lifeは使えるはず。
なるほど、最初に取っておけばいいのね。
本体の変数は割合貴重なキャラもいるから、
Helperの変数に記憶させてリダイレクトすりゃいいのかな。
俺はゲージ技をコンボの〆に使うかどうかくらいにしか相手のライフ気にしないから、
そこまで厳密に取らなくてもいいかなー。

まー、>>577はp2lifeで指定しない方法なら好きに取ればいいと思うw
あと、自分のライフも(100 * life / const(data.life)) <= **
みたいに割合で取った方がいいよ。
自分のライフもタッグだと初期値が500だった気がするから。

585MUGEN名無しさん:2009/07/22(水) 15:16:11 ID:j3AlvJ/w
AIが完成したんだが公開する時はもちろん制作者の許可がいるが動画に載せるだけの場合許可は必要ないよね?

586MUGEN名無しさん:2009/07/22(水) 19:53:19 ID:Gam8nfJs
>>585
動画だけなら問題ないと思うよ

587MUGEN名無しさん:2009/07/23(木) 12:55:01 ID:fcs.l.K2
まぁ、作者次第だからなんとも言えん。

588MUGEN名無しさん:2009/07/29(水) 03:11:31 ID://ScqJWI
技が出た後とかの硬直ってキャンセルしちゃだめかな?
技が終わる1フレーム前で次の行動に移行みたいな
やっぱりAI作る時って人ができない事するのはタブー?

589MUGEN名無しさん:2009/07/29(水) 04:18:49 ID:6wdkniZs
>>588
「自分で作ったキャラのAI」なら好きにすれば良いんじゃね?
その結果AIとキャラと作者がとやかく言われるだけだから

誰かのキャラのAIを作るなら、一般論で決め無いでそのキャラ作者に判断を仰いだ方が安全
操作上絶対に同等の類似結果が出せず、尚且つ一気に有利になるなら特に
「有利にならない様に繋がらない様にわざわざタイミング色々微調整して組上げた物」が
AIってだけでガンガン繋げて有利になる訳だから

基本は>>587だと思う

590MUGEN名無しさん:2009/07/29(水) 04:37:48 ID:hXJowK4o
つーか、そこまでいくとキャラ性能自体の改変だと思うんだよな。
まー、>>589の言う通り製作者に聞いた方がいいと思う。

591MUGEN名無しさん:2009/07/29(水) 05:20:26 ID:6wdkniZs
例えば落下への追撃トリガーがstateno=**&&animtime=0だと、ctrl&&prevstateno=**より2F位の短縮になるから、
敵高度が変わって追撃成立が操作よりも俄然安定するとかね
この場合は目押しコンボじゃ無くて技キャンセルコンボになるから、
こだわってる人には仕様改変と思われるかもね

592MUGEN名無しさん:2009/07/29(水) 08:10:18 ID://ScqJWI
やっぱりそれは改変ってことになるのか…

確かにそうだよね そんな事するAIがたくさんあったらインフレ状態どころじゃなくなりそうだし

確かに人操作不可だったらコンボし放題になるし弱キャラでも凶まで持っていけそうだもんな

593MUGEN名無しさん:2009/07/29(水) 08:38:13 ID:hXJowK4o
例えば、悪咲氏のキャラの場合、完全アウトだと思う。
AI公開は良識の範囲内で自由だけど、性能改変はアウトって名言してるし。

でも、アフロン氏のキャラなら、改変自由って明言してるからいいと思う。
ただし、ReadMeには書いておくべきじゃないかな。
出来ればスイッチでオンオフ出来る様にしておく。

その辺なんも指定して無い製作者なら、聞く。
こんな感じじゃないかなぁ?

594MUGEN名無しさん:2009/07/29(水) 12:53:42 ID:/OuNCaFY
人操作で可能ならばanimtime=0使っていいと思うけどね

595MUGEN名無しさん:2009/07/29(水) 12:56:45 ID:/OuNCaFY
あ、目押しで使うって意味ね
prevstaenoだと歩いたりしゃがんだりして出ない時がある気がするので

596MUGEN名無しさん:2009/07/29(水) 15:46:45 ID:iIa4sPHU
それだとstatetype=C限定の技を
statetype!=AとしてAIに使わせるのも改変に当たるな、数F早くなるし
まだ許容の範疇なんじゃないかねぇ…やっぱ製作者次第か

597MUGEN名無しさん:2009/07/29(水) 16:27:58 ID:ZwDjAiR.
>>596
いや、立ちしゃがみの切り替えは入力と同時のはずだから大丈夫だと思うよ。
キャンセルの場合は別だけど

598MUGEN名無しさん:2009/07/29(水) 18:48:00 ID:m5BQ9nAg
>>597
操作はdef11に1F入ってからの技移行じゃないっけ?
つってもAIの単発発動のstatetype!=Aでの立屈移行は諦めるLVな気はする
流石にそれはヤメテクレとは言えんわw

599MUGEN名無しさん:2009/07/29(水) 18:50:36 ID:m5BQ9nAg
×def11→〇def10だったか

600MUGEN名無しさん:2009/07/29(水) 20:43:08 ID:FKruhIZA
>>598
ごめん、確かにstatetypeが実際に変更されるのは10番に入ってからみたい。
だから10番に直接changestateが書かれてるとかじゃなければ1F遅れるから、
立ち状態で終了する技の後にしゃがみ技使いたい場合は1F遅れるらしい。

内部的には、入力と同時に(常時監視ステート読む前にmugenの暗な処理で)state 10に移行してはいるんだけど、
statetypeが変更されるのは実際にステート記述読んでからってことなのかね〜

601MUGEN名無しさん:2009/07/30(木) 08:37:09 ID:a87hIppo
空中ガードを辞めさせたいんだが辞めさせられない……
commonファイルを弄るのはわかるんですがどこを弄ればいいんですかね?

一応空中ガードに関わる部分(150番あたりを)全部消去しても空中ガードしてしまいます……

602MUGEN名無しさん:2009/07/30(木) 08:51:19 ID:8oe6PD3.
>>601
AssertSpecial

603MUGEN名無しさん:2009/07/31(金) 01:31:53 ID:K4q6jQ8w
>>601 うーん その記述を加えると空中ガードが不能にならないですか?

相手の攻撃をジャンプで回避して空中からジャンプ攻撃で隙を突く・・
みたいなことがやりたいんですよ・・

だけどジャンプはしてくれるんですが、相手にはもちろん
攻撃判定が出ているため、ジャンプ⇒数フレームで直ぐに空中ガード
に移行してしまうんですね。

特定の条件下のみ空中ガードをさせないようにさせたいんですよ。
伝わりにくくすいません。

604MUGEN名無しさん:2009/07/31(金) 01:34:20 ID:K4q6jQ8w
すいません >>602です

605MUGEN名無しさん:2009/07/31(金) 02:43:13 ID:cFOsPdeA
特定条件下だけでステコン動かせば良いんじゃねーの

606MUGEN名無しさん:2009/07/31(金) 03:34:00 ID:xPrVSe9M
>>605 ああ なるほど
記述は普通に空中ガードのステートの場所でいいんですかね?

607MUGEN名無しさん:2009/07/31(金) 03:57:43 ID:fNX01fCk
ガードステートに入れるとガード⇔解除でガクガクするよ

入れるならジャンプか常時監視のステート

608MUGEN名無しさん:2009/07/31(金) 16:54:28 ID:EqIKKuNk
[State -3, ]
type = AssertSpecial
trigger1 = 1
flag = noairguard

で記述はいいですかね?
一応-2,-3の常時監視ステートに入れても全然ダメでした

609MUGEN名無しさん:2009/07/31(金) 17:32:49 ID:cFOsPdeA
尋ねるなら「何がどうダメだった」のか位は書け

610MUGEN名無しさん:2009/07/31(金) 18:30:31 ID:6ldybYkA
>>608
それだと常時空中ガード不可
トリガーを工夫しなさい

611MUGEN名無しさん:2009/08/01(土) 07:39:43 ID:XPRHTXwo
>>610 になるはずなんですよね?ならないんですよ。 空中ガード不可に。

少しやってて気になったのですが空中ガードってステート番組は通常132ですよね?

だけど自分のやつは120になってるんですよ。

これはおかしいですか?

612MUGEN名無しさん:2009/08/01(土) 09:16:58 ID:53Wv0PXs
常時なら120に入る事自体おかしいわな
enemy,hitdefattrを使えば敵の技によって120に入ったりするかもしれんが
始動が120でその後に132に移行するが、AIのガード解除がどうなってるかで
その辺は変わるかも知れん
トレモでガードモードをautoにしてやってるのか?
あと-3より-2で組んだ方が良い気がする
-3は余りアテにならん

613MUGEN名無しさん:2009/08/01(土) 12:20:50 ID:mIPM/Q4E
AI用の記述で120番に飛ばすChangeState作ってるんなら、
そっちはassertspecialじゃ止められないからトリガー工夫しないとだめだよ

614MUGEN名無しさん:2009/08/03(月) 00:34:16 ID:i7PHx7Aw
ゲージ溜めをやらせたいんだがなんかうまくいかなくて
ctrlでやらせたらなんか連打してるみたいになってしまった
これはどうやって解決すればいいのか教えてくれないか?

615MUGEN名無しさん:2009/08/03(月) 03:20:03 ID:hBKevkNE
そのくらいはググれば出てきそうだけど、
たぶん、ゲージ溜めのStatedefをAI用に変えてないからだと思うよ。
Commandで終了条件指定してるとこにAI起動して無いときって条件加えて、
上手くいったらAI起動している時の条件を追加していけばいいんじゃない?

616MUGEN名無しさん:2009/08/03(月) 16:53:33 ID:tzcQSFmY
512ですー
>>513
>>514
すんごい遅いけど回答ありがとうっす。
しかしそれでもDistはなんだかなーと思って調べてみたら
モヒカン氏のAIに疑

617MUGEN名無しさん:2009/08/03(月) 19:47:48 ID:i7PHx7Aw
>>615
ありがとう
ちょっとやってみるよ

618MUGEN名無しさん:2009/08/05(水) 01:01:30 ID:Y9CL8862
ちょっと聞きたいんだけど、AI作る時の強さの目安の相手って誰にしてる?
ちょろっと作ってみたはいいもののめっちゃ弱くてさ
一応性能的には並かそれよりちょっと強い位なんだけど
どのくらいのキャラ倒せるようになればいいのかな、と気になったんだ

619MUGEN名無しさん:2009/08/05(水) 03:36:02 ID:25muaIPg
⑨氏ワラキーを推す

620MUGEN名無しさん:2009/08/06(木) 00:00:51 ID:OsEMrrrk
俺は並〜強推進派なのでとりあえず目標は悪咲氏のカプエスリュウと互角か安定して勝てるようになるくらい
自分の範囲内で出来るだけ強くなるようにはするけど

621MUGEN名無しさん:2009/08/06(木) 01:05:59 ID:XpaHbxx6
ゲージいらない技に
triggerall = power >= 0
の記述って意味あるのかな
人の作ったAI見てたらこれが全部書いてあった

622MUGEN名無しさん:2009/08/06(木) 01:54:21 ID:hg7dJwlI
>>616
時間もレスも遅くなっちゃったけど、
何かヤバい事やってました?僕のパッチ

623MUGEN名無しさん:2009/08/06(木) 02:11:25 ID:ghgRgenY
>>621
バグとかエラメ回避なのかな
あるいは単純に作った人用の目印とか

624MUGEN名無しさん:2009/08/06(木) 22:07:22 ID:fKCKBDe.
たまにしゃがみっぱなしになって全然動いてくれないことがあるんだが・・・
敵が攻撃してきたらガードはしてくれるんだがその後また動かなくなる
しばらくしたら動くこともあるんだが結局またしゃがむ

625MUGEN名無しさん:2009/08/06(木) 22:50:20 ID:IgXD3ayw
ただいまマブカプキャラのエリアル作成中
ようやくハイジャンの記述の在りかに気づいた
ムズすぎるぜ

626MUGEN名無しさん:2009/08/07(金) 20:24:07 ID:QcEM4lM6
>>624
ctrl=0のしゃがみなせいだな、きっと。
多分しゃがみ解除の条件が甘いんじゃないか?

>>625
マブカプキャラだと・・・?かぶってないことを祈るばかりだ
こちらは水柱が主力の女性キャラ作ってる
どうしても暴れてほしくて作ってるが、かぶってるなら手を引くぜ

627MUGEN名無しさん:2009/08/07(金) 20:48:51 ID:FumzYkL6
>>624
敵との距離で何の行動もしない座標に居ると棒立ちや屈伸運動は見かける

628MUGEN名無しさん:2009/08/07(金) 23:08:15 ID:ByElLXRI
パソコンが停止でハードが飛ぶかと・・・
>>622とおっしゃるとあなたはモヒカン氏ですか。氏のAIはヘルパーをあいてに
貼り付かせてますよね?あれが距離を測ってるのかなと思ったんですがdistで一応記述してあるので
何の用途につけてるのかなと思いまして。
イケメンというズームアウト機能が出来てきてるので、そこも踏まえてヘルパーで距離をはかったりなんてできやしないかなーと。

629622:2009/08/08(土) 00:11:17 ID:zogyJOv6
>>628
お返事どうも
cvsユリのパッチで説明しますと、AI用にヘルパーを4つ使ってまして。
"お師さん1"が表裏のガードとetc
"お師さん2"と"お師さん3"が画面端検出
"お師さんEX"が飛び道具検出とetc
って感じです
飛び道具検出方法はプレイヤーIDを探すやつ、distはあまり関係なかったりします

630MUGEN名無しさん:2009/08/08(土) 00:43:17 ID:p/5UQ2uc
上海人形とかのちびキャラってどうやって見分けさせればいいんだろうか?

631MUGEN名無しさん:2009/08/08(土) 01:12:54 ID:kH.rTI0s
あんまりアテにはできないけども、
const(size.height)でちびキャラであることぐらいはなんとか認識できるかどうか・・・。

モヒカン氏は飛び道具認識をplayerID型で行っているということですけども、
やっぱり手間がかかるだけのことはあります?
虻蜂氏カインのゼーレのような接触後も持続するタイプの飛び道具だと、
ブロッキング後にゼーレに向かって飛び込んだりするので、
そんな事態なんかもあの方式なら防げるのかなと気になったり。

632MUGEN名無しさん:2009/08/08(土) 01:42:13 ID:JVQA/Ru6
上の人じゃないけれど、ゲージ溜めを連打してるような格好になってしまってるので相談に来ました
ゲージ溜めの方の記述を弄くって
[State 700, ステート変更]
type = ChangeState
trigger1 = command != "hold_s"
value = 705
ctrl = 0
この記述を
[State 700, ステート変更]
type = ChangeState
trigger1 = command != "hold_s"
trigger1 = var(59) = 0
trigger2 = var(59) != 0;AI用
trigger2 = roundstate = 2
value = 705
ctrl = 0
こんな感じにしてみたんですがダメっぽいっす
何か足りない記述があるんでしょーか

633622:2009/08/08(土) 01:44:46 ID:zogyJOv6
>>631
ないよりはあった方がいい程度、所詮モヒカン製なのでw
僕のは接触後varをリセットするので、ブロッキング後とか普通に突っ込みますw

持続の長いタイプにも対応出来ない事はないと思います

634MUGEN名無しさん:2009/08/08(土) 02:04:29 ID:hGVhmAAs
>>632
roundstate=2だけだと戦闘中即解除じゃねーか!

635MUGEN名無しさん:2009/08/08(土) 02:35:27 ID:W36u3l9.
>>626
>>627
返答ありがとう
でも問題は別にあったようで
ガードの記述にある
enemy,numhelper > var(29) || enemy,numproj > var(29)を
enemynear,numhelper > var(29) || enemynear,numproj > var(29)にしたら直りました

636MUGEN名無しさん:2009/08/08(土) 04:05:13 ID:4C8pdsx.
ちょっと言わせてくれ
triggerall = RoundState = 2
Triggerall = life > 0
Triggerall = ctrl
よっぽどの理由が無い限りAIvarセットの条件にこの記述を足してほしい
タッグ戦でゾンビが増えまくってそのたびに書き足して欝になってきたぜ
元がタッグ前提でないこともあるだろうが・・・

637MUGEN名無しさん:2009/08/08(土) 07:35:31 ID:d9NbXEVo
Life>0で気になった。
自分は(RoundState=2&&Alive&&var(AIフラグ))で動作Varをセットさせて
(RoundState!=2||!Alive||!Var(AIフラグ))でリセットさせてるけど、
Life>0とAliveって特殊なシステムがなければ、ほぼ一緒なのかな?

638MUGEN名無しさん:2009/08/08(土) 08:48:30 ID:qRUyt4gI
>>632
パワー貯め解除の条件は、Powerがなんぼある時とかさ、
相手がどんくらい近づいて来た時とかさ、
色々あるじゃん?w

639625:2009/08/08(土) 10:50:54 ID:14QVvXrk
>>626
おいィ?モロかぶりじゃないかw
ぶっちゃけると俺はBeximus氏のルビィなわけだが・・・
でも公開する気は無いしかぶってても問題ないんじゃないのか

というより前同じキャラのAI作った人が製作者と連絡つかずで
公開できなかったっぽいし公開できないって言った方が正しいか

640MUGEN名無しさん:2009/08/08(土) 11:50:07 ID:4C8pdsx.
>>639
Beximus氏のルビィだと?あまりのかぶりっぷりに俺の悲しみが鬼なった
ってか姉さん、しゃがみモーションに当たり判定ないよな
後ラファールカノン投げつけにヘルパー系の攻撃当てられたら分身するし・・・w
この辺修正してくれる人いないんだろうか・・・

後すまん、俺の感性がずれてたら申し訳ないんだが
サイト閉鎖でメールしても連絡もつかんし、公開してもいいんじゃないだろうか?
オナニー糞改変というわけでもなく、心無い無断転載でもないしな・・・
製作者に連絡つかないからとかで埋もれていいキャラじゃないと思うんだよ
というかCNSやらは愛情や理解力はそこにあれど単に文字列の並びであって、よっぽどでなければSFF・sndとかと違って制限されるものではないと思ってる

641MUGEN名無しさん:2009/08/08(土) 12:34:07 ID:JVQA/Ru6
>>634
Oh…
すっかり見落としてましたわ
おかげで解決。どーもです
>>638
とりあえず解決したんでこれから色々付け足すつもりですわ
タッグの時にpowerで指定すると困る気がしたんですが、powermaxとかそういったトリガーありましたっけ?

642MUGEN名無しさん:2009/08/08(土) 15:33:21 ID:gifKaQ3w
>>640
それはやっぱり無しじゃないかな
無断改変可と一文が無い限り、連絡なしに公開するものじゃないよ。
一度前例を作ると、それを悪用する輩が出ないとも限らないし。
どうしても公開したいなら、組み立て式にするとか
メールくれた人にだけ渡すとかにした方がいい。

643MUGEN名無しさん:2009/08/08(土) 15:49:17 ID:4C8pdsx.
>>642
そうか・・・まぁなんだかんだ言って動画で姉さんを見たいだけなんだよ
逆にせめて無断改変不可とか禁止とか一文があれば諦めも付いたところだが
本当なら送ったメールの返事がきてくれるのが一番いいんだがな・・・
まぁまだ細かいコンボvarの調整もあるし、定期的にもう2,3通程メール送りながら2週間くらい待ってみる
そのうえで返事が来なければ、問題があれば削除しますのメールを入れて組み立て用のテキストファイルを公開・・・かねぇ

644MUGEN名無しさん:2009/08/08(土) 16:26:42 ID:XEKZhW9o
それは嫌がらせにしか思えんのだがw

645MUGEN名無しさん:2009/08/08(土) 17:08:19 ID:qRUyt4gI
>>641
PowerMaxはあるにはある。win版から追加された。
でもさ、パワーはライフと違って数値が変わる訳じゃなくて、
共用になるだけだからそこまで神経質にならなくてもいいと思うけどなぁ。

>>643
そこまでの情熱があるならマヴカプ2買って姐さんつく(ry
は冗談としても、
定期的にメールは確かに嫌がらせかもしれないw

確かにルビィ・ハートは格好良いんだよねー。
動画で活躍しているところは確かにみてみたい。
あと、Beximus氏のキャラはローズとかかりんも格好良くて好き。

646MUGEN名無しさん:2009/08/08(土) 18:11:31 ID:W36u3l9.
Neogouki氏のクリスのAIも組み立て式だよね
こっちは氏のメールアドレスが無効になってるそうだけど

647MUGEN名無しさん:2009/08/08(土) 23:25:33 ID:JVQA/Ru6
>>645
ゲージ数少ないキャラなんで、萃夢想とかJOJOと組ませると自分の分のゲージだけ溜めてってのがどうしても…
やっぱりある程度はタッグに対応した方がいいっすよねえ
それと俺はあんまり強いAI組めないんで、せめてゲージ溜めだけでもタッグで貢献を…とか思ったり

648MUGEN名無しさん:2009/08/09(日) 00:47:32 ID:ASqkn60E
>>647
自分P1時はパートナーのpowerMAXと自分のpowerMAX比較してデカイ方にあわせて溜めて、
P3時はパートナーのpowerMAXまでで良いんじゃないの?
けどpowerがデフォ管理なら良いけど、var管理されてるとおかしくなりそうだな
それにP1がIldanaf氏月華の1ゲージモードやKOFキャラのMAX発動状態だと、
最大値が常にMAX値未満の特定値でpowersetされてpowerMAX値にはならないから、ずっと溜め続けると思うが

どうしてもならpartner,name使ってvarでパートナーの状況毎の最大値を管理

649MUGEN名無しさん:2009/08/09(日) 00:53:22 ID:lqMccf.6
>>647
キャラの性能ないし設定が元々そういう種類のものならともかく、
相方にゲージ技をぶっ放させることを露骨に狙うAIが、
果たして見ていて楽しいかとなると疑問が・・・。
その角で色々意見が出た結果、更新されたAIがあるぐらいだしね。

650MUGEN名無しさん:2009/08/09(日) 01:24:40 ID:j30uaCeM
>>644 >>645
嫌がらせだとw ・・・そうかもしれん・・・w
まぁでも仕方ないさ愛だもの

>>647
妄想だがトリガーが有効なんであれば
((partner,PowerMax) && (partner,PowerMax > PowerMax))
||
((PowerMax) && (partner,PowerMax < PowerMax))
パワー溜め解除の条件はこれでいいんじゃないだろうか?
partnerの記述がどこまで読んでくれるのか分からんからなんとも言えんぜ
と、それとは別によっぽどの理由が無ければタッグでゲージ溜めっぱなしっていうのは逆にお荷物かも知れん
しかも見栄えも悪くなるとかなりの・・・他の人も言ってるけど、よっぽど溜まる速度が速いとか他にやることが無い(そもそも使うべきでないか・・・?w)限りは、恐らくゲージを溜める暇がある=相手が相方の攻撃によってやられ・ガード中か間合い保持の後退中、ダウン中だから、起き攻めなり相方の攻撃に合わせて自分ノックバック・相手の吹っ飛びが少ない技を連打していった方が逆に効率いいし見栄えも良くなると思われる

651MUGEN名無しさん:2009/08/09(日) 03:31:57 ID:7xmcmgU6
>>650
最初にルビィのAI作ってるって言った者だが、Beximus氏のにこだわらなければ
Ryou Winという人もHobby & Mugenってサイトでルビィ公開してるべ
一応デフォAIも入ってるっぽいし
デフォAIは 「う〜ん・・・」 って感じ
氏の他のキャラの最終更新が2008年の2月とかで止まってるから連絡つくかどうか怪しいけどな

でもやっぱルビィいいよな〜 箱○のリメイク版マブカプやってて再確認したわ
動画で活躍する姿が見たいのは俺も同じ

もし公開できることになったらぜひかっこいい動きをするAIを作ってやってくれ

652MUGEN名無しさん:2009/08/09(日) 06:06:09 ID:j30uaCeM
>>651
最初のメールから今日で一週間・・・奇跡が起きたんだ
2009 8/9(日) 05:33の受信メール
「ハート のA.I. パッチ を解放する許可を有する。
 私は人々がそれを楽しむことを望む。 最初に頼むことをありがとう。 幸運。
 ベキシマス]
英語訳で送ったら日本語訳で返してくれたぜ、後は仕上げるだけだ・・・!
動きに関しては任せてくれ、手前味噌だがとある格ゲで人気プレイヤーだったからセンスはあるんだと思う。
ただシュバルツェールに時間くいそうだ、8月中には公開できると思うから気長に待ってておくれ

653MUGEN名無しさん:2009/08/09(日) 10:37:09 ID:7xmcmgU6
>>652
うおおおおおおおお!!!
マジおめでとう!!! 何か自分のことではないのに無性にうれしい

公開されるの楽しみに待ってるわ!!

654MUGEN名無しさん:2009/08/09(日) 14:16:22 ID:m0gevQZ2
>>647
まー、問題点は他の人が指摘してるからこれ以上は言わないけど、
俺は逆に?F以上パワー溜めてたら解除するようにしてるよw
タッグ時の貢献なんて他にもたくさんあるからガンバ!

>>652
おー、おめでとう。よかったね。頑張れよー。

655MUGEN名無しさん:2009/08/09(日) 17:04:04 ID:mPje3ECM
一定時間だけ自分をパワーアップさせる超必を重ねがけさせないようにする方法ないかな?
出来ればvarを使わずに

656MUGEN名無しさん:2009/08/09(日) 18:10:26 ID:8Oj.cops
全体F数が指定時間と同じである何も表示しないAnimを作ってそれをヘルパーAで出す(条件としてTriggerAll = !NumHelperAが必要)
そのヘルパーはTrigger1 = AnimTime = 0でDestroySelfさせる
本体の方で重ねがけさせたくない技の条件にTriggerAll = !NumHelperAとすれば出来る……と思う

657MUGEN名無しさん:2009/08/09(日) 18:28:10 ID:6SJHtQvY
ステートが違うステートに移行してからの経過時間とか出来ないのかな?

658MUGEN名無しさん:2009/08/09(日) 20:22:25 ID:GmQZ/31.
立ち状態仰け反り中発動可の技を、相手の攻撃くらったら
即発動させたいんだけど、そのときの記述は

StateType = S
MoveType = H
ctrl = 1

だけでいいのかな?無理な抜け方してそうで不安になった。

659MUGEN名無しさん:2009/08/09(日) 21:14:12 ID:XCIgCrR.
いや抜けないから
movetype=Hでctrl可能なのガード準備とガード終了だけだから

660MUGEN名無しさん:2009/08/09(日) 21:29:24 ID:nkJoCZCk
のけぞり中なら ctrl = 0 だぜ
あと、StateType = S と MoveType = H だけだとガード中や相手のロック系必殺技中でも発動するから、
stateno=[5000,5120] とか入れといた方がいいかも

661MUGEN名無しさん:2009/08/09(日) 21:36:25 ID:GmQZ/31.
なるほど、ありがとう。
人操作じゃ確認取れないような反応だったから、
ちょっと気になって。

662MUGEN名無しさん:2009/08/10(月) 02:03:28 ID:QTIh.GVc
>>655
普通パワーアップ中は本体がその処理のためにVar使ってると思うんだが
コマンドにもそういう制限入ってないの?
ああ、でも重ね掛けするタイプのもあるか

>>660
投げやロック系はステート奪ってるはずだから-2ステートに記述しなければ大丈夫だろう、専用ステートに飛んでることも多いし
でも食らいステートを指定するのが無難よね

>>661
AIフラグ抜いて条件緩和(コメントアウト)しておいて、相手を操作して殴ってやれば確認できると思うよ
条件ってのは距離とか相手の硬直とか、ヒット確定させるために追加するの奴ね

663MUGEN名無しさん:2009/08/10(月) 12:05:51 ID:srFLln72
>>655
普通そういうのは本体側の変数でパワーアップ管理してるから、
その変数参照すれば新しく変数使わなくても出来ると思う。

>>656
それだとpause系でずれるかもね〜

>>658
コマンドファイルの記述にあわせてあれば良いと思うよ。
ignorehitpauseとかは気をつけるべきかも

664655:2009/08/11(火) 03:04:29 ID:Ql5BXUbg
みなさんありがとうございました。
>>662-663の方法で解決できました

665MUGEN名無しさん:2009/08/11(火) 09:53:25 ID:2nOZ8P7I
こぜに氏製作のウォターンのAIってまだできてなかっただろうか?
まだのようなら予定に加えようと思ってるんだが・・・情報求む

666MUGEN名無しさん:2009/08/11(火) 23:45:31 ID:rAqXziH.
自分の出したprojectile形式の飛び道具の相手との位置を知る
(相手の後ろか前かくらいでもいいです)方法ってありませんか?

667MUGEN名無しさん:2009/08/12(水) 01:17:38 ID:bjFR5BFY
projectと同じ速度で飛んでいくhelperを出してrootdistを使うとか、
そのへんが無難なんじゃなかろうか。

668MUGEN名無しさん:2009/08/12(水) 01:26:08 ID:fALbSp8Y
やっぱりHelper使わないと駄目ですか……。
ありがとうございます、参考にします。

669MUGEN名無しさん:2009/08/12(水) 01:29:04 ID:ksnOxhMY
projの現在位置は動作が単純ならば、
出した位置と経過時間で割り出せる。が、すごく面倒です

670MUGEN名無しさん:2009/08/12(水) 22:00:29 ID:u5HuKzjI
タッグ用記述を作るに当たって考え付いた物をいくつか相談させてほしい

(Facing*Enemy(varXX),pos x)-(Facing*pos x)
この記述でとりあえず相手と自分の距離を割り出せる
varを1つ用意して、
var○○=(P2BODYDIST X)-(Facing*Enemy(varXX),pos x)-(Facing*pos x)
これで(Facing*Enemy(varXX),pos x)-(Facing*pos x)+var○○の式にすることでP2BODYDISTと同義で扱える
そもそもここまでが間違ってたらあれだが・・・一応問題なく動くっぽい

これにできるようならvarを更にもう一つ用意して、条件に、今考えていることは最初のvarの数値と違うこと、そしてできれば最初にDIST情報を採取した敵と違うことを条件にしたいんだが、どうすればいいだろう?
AI暦が浅いせいでスマートなやり方が思い浮かばないぜ・・・敵の識別にvar□□=Enemy(var(XX)),palno-Enemy(var(XX)),Const(size.head.pos.y)+・・・とかできるだけ被りにくい条件を用意するのも仕方ないかななんて思ってたり
アドバイスとか上位互換策とか教授してもらえると凄く嬉しい

671670:2009/08/12(水) 22:31:42 ID:u5HuKzjI
用途書いてなかった、正直何に使うか分からんよな
何がしたいかって、要するに素直にP2BODYDIST使うとタッグの時どうしてもこのトリガーだけ死体に反応するじゃないか
これを解消できるかなと少し頭を捻ってみた
そんなに悩む必要はないぜ!これを使え!とかその記述にこういった記述を足すことで更に強靭になるとかいう風なアドバイスをもらえると嬉しいなと

672MUGEN名無しさん:2009/08/12(水) 22:52:09 ID:nrdrbJnQ
やった事無いけど、直近の生きてる敵だけにヘルパー常に貼り付けて、それとの距離を認識させられるんじゃないか?

673MUGEN名無しさん:2009/08/12(水) 23:24:00 ID:u5HuKzjI
>>672
なるほど・・・知る限りでは、アフロン氏製作モヒカン氏パッチのサウザーが利用しているっぽいから覗いてみる
けどそのやり方だと
自分 (攻撃中の相方 相方の攻撃をくらい中の敵) 敵
になった時に奥の敵の座標を認識できn・・・ヘルパー2つ付ければいいだけか
ヘルパーはまだ画面端の奴さえ作れないから、最終手段として考えてみる。ありがとう

674MUGEN名無しさん:2009/08/12(水) 23:32:11 ID:u5HuKzjI
ん・・・連投すまん
相手が2人の場合のラウンド開始時、仮に近くの者をA、遠くの者をBとして
BがAよりも手前に来た時でもBをB、AをAとして認識する方法はあるだろうか?
P3とかP4とかIDとか、それっぽいトリガーの説明を読んでみた限りではできない様に思えたんだぜ・・・
ヘルパーを2つそれぞれに貼り付けっぱなしにするにしてもその辺を分かってないと出来ないなと思って

675MUGEN名無しさん:2009/08/13(木) 00:40:06 ID:Fbw4PSgA
>>669
アレコレと考えて見ましたが、確かに面倒そうなので諦めました。
飛び道具を出した位置を変数に記憶しておいて、
その値から飛び道具の速度を云々かんぬんと考えているうちに、もういいやとw

676MUGEN名無しさん:2009/08/13(木) 00:50:43 ID:aaKcwztQ
[State -3, 距離計算A用varセット]
Type = VarSet
TriggerAll = Var(59) = 1
TriggerAll = RoundState = 2
Trigger1 = var(33) = ((Enemy(var(57)),Const(data.airjuggle)) * (Enemy(var(57)),Const(size.head.pos.y))) + ((Enemy(var(57)),Const(size.head.pos.x)) * (Enemy(var(57)),Const(data.guard.sparkno))) + (Enemy(var(57)),Const(data.KO.echo))
var(30) = P2BODYdist X - ((Facing*Enemy(var(57)),pos x) - (Facing*pos x))
[State -3, 距離計算A用var解除]
Type = VarSet
TriggerAll = Var(59) = 1
Trigger1 = RoundState != 2
Trigger2 != alive
var(30) = 0
[State -3, 距離計算B用varセット]
Type = VarSet
TriggerAll = Var(59) = 1
TriggerAll = RoundState = 2
Trigger1 = var(33) != ((Enemy(var(57)),Const(data.airjuggle)) * (Enemy(var(57)),Const(size.head.pos.y))) + ((Enemy(var(57)),Const(size.head.pos.x)) * (Enemy(var(57)),Const(data.guard.sparkno))) + (Enemy(var(57)),Const(data.KO.echo))
var(31) = P2BODYdist X - ((Facing*Enemy(var(57)),pos x) - (Facing*pos x))
[State -3, 距離計算B用var解除]
Type = VarSet
TriggerAll = Var(59) = 1
Trigger1 = RoundState != 2
Trigger2 != alive
var(31) = 0

[State -3, 距離判定A用varセット]
Type = VarSet
Triggerall = Var(59) = 1
TriggerAll = RoundState = 2
Trigger1 = var(33) = ((Enemy(var(57)),Const(data.airjuggle)) * (Enemy(var(57)),Const(size.head.pos.y))) + ((Enemy(var(57)),Const(size.head.pos.x)) * (Enemy(var(57)),Const(data.guard.sparkno))) + (Enemy(var(57)),Const(data.KO.echo))
var(32) = (Facing*Enemy(var(57)),pos x) - (Facing*pos x) + var(30)
[State -3, 距離判定B用varセット]
Type = VarSet
Triggerall = Var(59) = 1
TriggerAll = RoundState = 2
Trigger1 = var(33) != ((Enemy(var(57)),Const(data.airjuggle)) * (Enemy(var(57)),Const(size.head.pos.y))) + ((Enemy(var(57)),Const(size.head.pos.x)) * (Enemy(var(57)),Const(data.guard.sparkno))) + (Enemy(var(57)),Const(data.KO.echo))
var(32) = (Facing*Enemy(var(57)),pos x) - (Facing*pos x) + var(31)
[State -3, 距離判定var解除]
Type = VarSet
Triggerall = Var(59) = 1
Trigger1 = RoundState != 2
Trigger2 != alive
var(32) = 0

[State -3, 特徴判定A用varセット]
Type = VarSet
Triggerall = Var(59) = 1
TriggerAll = RoundState = 2
Trigger1 = Var(33) = 0
var(33) = ((Enemy(var(57)),Const(data.airjuggle)) * (Enemy(var(57)),Const(size.head.pos.y))) + ((Enemy(var(57)),Const(size.head.pos.x)) * (Enemy(var(57)),Const(data.guard.sparkno))) + (Enemy(var(57)),Const(data.KO.echo))
[State -3, 特徴判定A用var解除]
Type = VarSet
Triggerall = Var(59) = 1
Trigger1 = RoundState != 2
Trigger2 != alive
var(33) = 0

っしゃぁできた・・・はず、ひとまず俺の頭の中に浮かんだアイデアでの限界まで記述できた
varを4つも使う駄目っぷりだが・・・ことタッグにおいてはその価値はあるはず・・・w
ラウンド開始と同時に最も近い敵(A)のBODYDIST X とできるだけかぶらない様にチョイスしたいくつかの相手のデータを計算式に当てはめた数値(Aの特徴)を採取
Aの特徴をもたない敵(B)がAより手前に来たときにBのBODYDIST Xを採取
以後Aを敵として認識いているならばAのBODYDIST Xを、BならBのと・・・
・・・やっぱりこれ>>672が言ってくれた様にヘルパーでやるべきかね?ヘルパー使ったこと無いから分からんぜ・・・

677MUGEN名無しさん:2009/08/13(木) 01:09:02 ID:aaKcwztQ
>>675
相手の現在位置-飛び道具出した位置+
飛び道具のvel x × (現在のアニメ時間をなんとか計算-設置系なら移動を始めるまでのアニメ時間)
で算出できるような気がした・・・マイナスなら相手の向こう側
眠い頭の思いつきだからそんなんで算出できるかボケ!って場合はスマン

678MUGEN名無しさん:2009/08/13(木) 03:05:47 ID:taZqhEVc
>>675
projectの位置検出にhelperを使ったらどうかと言った者なんだが、
posを使うと画面のスクロールに対応できないような。
まぁprojectの速度が十分に速ければスクロールは無視できるだろうし、
多分そこまでの精度は必要としてないんじゃないかと
勝手にエスパーしてるんだけども。

679MUGEN名無しさん:2009/08/13(木) 08:09:27 ID:6PUqvZ.w
気になったんだけど、MUGENの仕様や状況によってP2BodyDistとかP2の対象選択って異なる?

[State -2, デバッグ表示]
Type = DisplayToClipBoard
Trigger1 = 1
Text = "B X=%d, B Y=%d, St=%d, Mt=%d"
Params = Floor(P2BodyDist X), Floor(P2BodyDist Y), (P2StateType=S), (P2MoveType=I)
IgnoreHitPause = 1
とF1とかスペースキーとかでちょっと調べたら
基本的に「一番近い死んでいない相手」だったんだけど、
通常P2***はP2に属する単一ID限定と考えるべき?

基本的に、と死んでいない、っていうのはkfmenで分かったんけど、
Player判定のHelperは本体が死んでも、ずっと生きているのと同じ状態みたいなので。
EnemyNearとかでの対象固定はむしろ、対Player判定Helperのような・・・。
いやよく調べてないから、わからん。

680MUGEN名無しさん:2009/08/13(木) 15:01:23 ID:AEDpi3/s
>>679
単にPlayer判定のHelperはあくまでPlayer扱いだからでしょ
つか本体が死んでもPlayer判定のHelperを出し続ける様なキャラは、
そもそも相手に誤認識をさせる事に何の疑問も持たない様なキャラとしか思えんけど
タッグだと弊害出まくるだろそれ

681MUGEN名無しさん:2009/08/14(金) 18:08:49 ID:qI3iWy.s
>>676
目的は良く理解してないけど、敵の区別ってことならID使えば一発じゃない?

>679
そういやP2は実験したことないなあ・・・
enemynearでやった場合も、死体に反応しない?

Player判定のヘルパーはできるだけ使わないほうが良いよね、としか。
面倒そうで全く対策しようと思わないw

682MUGEN名無しさん:2009/08/14(金) 19:30:57 ID:i3lH0hm.
>>681
基点と繋ぎと精度が厳しい遠距離コンボがあるんだが、タッグで奥の敵に使おうとした時に、P2BODYDIST Xは無論posのみでも使い物にならなかったので仕方なく考えてみた
IDだと話に上がってるプレイヤータイプのIDを認識するせいでうまくいかなかったので仕方なくこんな訳の分からない式にorz

683MUGEN名無しさん:2009/08/14(金) 20:29:19 ID:qI3iWy.s
>>682
!ishelper使えば除外できない?
そんでそのID(var(**)とする)使って、
facing*(playerID(var(**)),pos x-pos x)みたいにすればDist系トリガーと
同じように使えそうな気がするけど。確認はしていない

684MUGEN名無しさん:2009/08/14(金) 22:20:46 ID:i3lH0hm.
>>683
そんな素敵なトリガーが・・・!
ただpos=BODYDISTでは無いらしい。改めて書くことでも無いかも知れんが
BODYDISTは相手と自分がぶつかるまでの距離を、
DISTのみは相手の中心と自分の中心の距離を求める、
んでenemynear,pos x-pos xだけでもたいていの状況で信用に足る値が得られる・・・っぽいが、そのどちらとも微妙に、特にBODYDISTとは時に大きくずれた数値になる・・・っぽい。
もしかしたらDISTとは同じ値かもしれんが、俺も詳しいことは分からん、すまん
ただ今回必要になるのはBODYDISTの値だから、IDを使うにしてもやっぱりBODYDISTとのズレを記憶しておく必要はある・・・っぽい
なんにしてもありがとう

685MUGEN名無しさん:2009/08/14(金) 23:03:08 ID:qI3iWy.s
>>684
役立ったんなら良かった。
bodydistに合わせたい場合は多分、
自分と相手のconst(size.ground.front)系のトリガーを使えばいけるんじゃないかと。

今度タッグ時に役立つ記述まとめも作ってみようかなあ・・・

686MUGEN名無しさん:2009/08/14(金) 23:17:25 ID:RdVnyFh2
>>680
kfmenとか、元々極めて特殊なキャラだしね。
死んだ時、Nomal判定のHelperをPlayer判定のHelperに重ねて出して、
Player判定側を消させるとか、Explodを放出して消えるとか、
そういう対策をしてやらないと。

>>681
要約すると
P2は死体に引っかからない代わり、Player判定のHelperには反応する。
EnemyNear,は死体に反応する代わり、Player判定のHelperに引っかからない。
死体対策はEnemyNear(!(EnemyNear,Alive||NumEnemy=1)),とかでできる。
( 記述が長いから大抵Varに入れて、EnemyNear(Var(**))で使うけど )
ちなみにEnemy,はID番号の小さい相手のみを指定するっぽくて、
Enemy(1),とかで2番目の相手を指定可能。あとHelperには反応しないみたい。
相手のHelperにリダイレクト可能なのはPlayerIDくらい?

と言うか、Player判定のヘルパーの話はどうでもいい。
P2の認識はこれで、いいのか、どうか。

687MUGEN名無しさん:2009/08/15(土) 02:43:50 ID:pgaeVtLM
>>684
fxm氏のRugal2ndの最新版にそれっぽい記述があるよ。

[State -2, P2BodyDist X];右左正面(自分地上、相手地上)
type = VarSet
triggerall = Facing = 1 && EnemyNear(var(**)),Facing = -1
trigger1 = EnemyNear(var(**)),StateType != A && StateType != A
trigger1 = EnemyNear(var(**)),ScreenPos X - ScreenPos X >= 0
fvar(**) = EnemyNear(var(**)),ScreenPos X - ScreenPos X - (EnemyNear(var(**)),Const(size.ground.front)+Const(size.ground.front))
ignorehitpause = 1

こんなのが大量に並んでる。
精度はほぼ完璧と言っていいレベルだし参考に出来るかと。

688MUGEN名無しさん:2009/08/15(土) 11:40:11 ID:Z/yeu/kE
>>687
おおおおおぉぉぉ・・・fxm氏は本当に頭の良いお方
その様式だとvar3つで済む上にヘルパーに悩まされる心配もないと
・・・素晴らしい・・・! マジで感謝

689MUGEN名無しさん:2009/08/17(月) 22:31:09 ID:.JFBmq9A
立ち回りが難しいなあ

690MUGEN名無しさん:2009/08/19(水) 17:30:24 ID:r7seKP0c
>>686
例え生きていても死亡State(5150)に居れば、本体でもPlayerHelperでも反応しなかった記憶が。
逆にLife0でも5150に居ないと反応しちゃってたような。
そもそも、PlayerHelperを5150に飛ばすキャラが少ないんだけど。

691MUGEN名無しさん:2009/08/19(水) 19:24:27 ID:A4BXURbQ
>>690
情報ありがとうございます。
試しにkfmenの分身のStateを5150に飛ばしたら、反応しなくなりました。
分身も死亡ステートはそこへ飛ばせばいいみたいですね。
・・・と言うか、元々特殊なキャラを例に上げてるんですってば。

あと、!AliveでStateを飛ばしたりする事への反応を調べた所、
EnemyNear(!(EnemyNear,Alive)),は反応せず、P2は反応しました。
どうやらP2(基本対象参照)の条件は、StateNo!=5150のようです。
( 内部処理を調べられれば確実ですが。 )

確かに、だから何に使えるんだって話ですけど。

692MUGEN名無しさん:2009/08/19(水) 20:57:43 ID:r7seKP0c
>>691
ああ、ごめん、話の流れと違うのは分かってたんだけど、
情報は正確な方がいいかなと思って。
自分が作る分には重要だけど、相手に対処するには関係ないよね。
注釈付けとけばよかったかな。

ちなみに、蛇足かもしれんが、どうしても非分身なHelperをPlayerで使いたいときは、
全部5150で処理するとP2は反応しない。

693MUGEN名無しさん:2009/08/24(月) 09:27:05 ID:RtpY9Ed.
過疎ってる・・・?
何か寂しいので適当に書き込みます

↑の方でpowermaxについて出てたけど、powermaxはConstじゃないから、
タッグ時でもチーム全体のゲージの最大値を正確に返してくれるみたい。
だからゲージタメとかはpowermaxさえ気にしておけば大丈夫なんじゃないかな。
異常にゲージ最大値が違う相手と組んだりした場合じゃないければ。

694MUGEN名無しさん:2009/08/26(水) 08:15:11 ID:Pl/5x6WY
ここで聞いていいものか迷ったんだけども、
トレモのオートガードは単純にInguarddistが反応すればガード、
Inguarddistが反応しなくなったらガードを解除するものと
考えていいんだろうか?
設置飛び道具のattackdistを調整するのに
デフォKFMにトレモでオートガードをさせてたんだけども、
実戦に投入するとInguarddistを認識してるのかどうかあやしい
挙動をするAIが複数あったもんで・・・。

695MUGEN名無しさん:2009/08/26(水) 08:49:51 ID:gJu9mVeU
こちらの飛び道具を二回以上当てないと掻き消せない相手の飛び道具を通常飛び道具と
判断したいのですがどういう記述をすればいいですか?

696MUGEN名無しさん:2009/08/26(水) 10:42:39 ID:PiIkIUs.
>>694
トレモの仕様は分からないけど、
実際にデバッグモードで直接inguarddistの値を確認するのが手っ取り早いんじゃないかな。
>>695
projectile式なら、多分無理。
helper式なら、リダイレクトを使ってそれっぽくは行けそうだけど、
「何から攻撃を受けたか」は認識できなかった気がするから、こっちの飛び道具のmovehit
とかをうまく使ってどうにかするしかないんじゃないかな。すごく面倒くさそうな。

697MUGEN名無しさん:2009/08/26(水) 15:30:20 ID:MIvKHs2Q
>>694
distっつーか、単にAIのガードトリガーの違いな気がする
AIのガードトリガーがinguarddistやmovetype=Aを使わずenemy,hitdefattrだけだと、
攻撃記述がtime=0じゃなくanimelem指定されてる場合に、
攻撃判定枠の発生直後にenemy,hitdefattrを初めて認識出来る
だから結果間に合わない(ガードして無い様に見える)って事はある

発射ステートはmovetype=Aか?
飛び道具の発射ステートをmovetype=Iで組むと、
inguarddistトリガーの無い、enemy,movetype=Aやenemy,hitdefattrで構成されたガードトリガーじゃ反応出来ない

ついでに、飛び道具判定の最先端から飛び道具のposX=0座標までがattackdist以上だと、
inguarddistが入る前に判定に触れるわけだから、AI上でガー不っぽくなる
遠距離からのビームがAI殺しなのはその辺りの原因も絡む
それとヘルパー式の構成でtime=0から赤枠を出してると、
判定発生と同時にenemy,Numproj>0を満たすから、やっぱりガードが間に合わない事もある
判定airの最初の数Fに判定を何も入れなければ、それがAIが反応出来る「認識猶予」になる
この辺も相手のAIガード記述次第だと思うけど

単に調べるだけなら、記述を把握して無い相手のガードで試すより、
自分で条件を把握してるガード記述のキャラで試す方が良い

698MUGEN名無しさん:2009/08/27(木) 22:59:20 ID:K/fmnRs6
>>697
詳細なレスありがとう。
結局kfm側にdisplaytoclipboardを入れてinguarddistを
確認したらいいんじゃね、ということでとりあえず解決。
movetypeはAでattackdistもそれなりに大きい数字にしたんで、
飛び道具のガードをhitdefだけで判断するAIでもない限りは
これでなんとかなるはず。

ああ、次はprojectileのhelper化だ・・・。

699MUGEN名無しさん:2009/08/30(日) 15:16:21 ID:At1bLHiw
相手がmovetype = H で且つガードしてない状態のトリガーってどうすりゃいいかな?

700MUGEN名無しさん:2009/08/30(日) 22:03:16 ID:B5Hl83Dk
ガードのステートなんて大体120〜155(だっけ?)なんだろうから、
statetnoで判断すればいいんじゃない?

movetype = H 且つ statenoがガードステートじゃない場合

(movetype = H && p2stateno != [120,155])

これじゃ駄目かな?

701MUGEN名無しさん:2009/08/31(月) 06:39:23 ID:vA.vI7Ns
>>700
MoveTypeにP2とかの相手指定が抜けてますよ。
( P2MoveType = H && P2StateNo != [120,155] )

本体でのキャンセルコンボならMoveHitとかも使えるけど。
(MoveHit:同ステート内で攻撃がヒット(直撃)した。)

702MUGEN名無しさん:2009/08/31(月) 15:14:04 ID:0kVu8TaI
ブロやJD対策でその辺書き込むってメンドクサイよな…

703699:2009/08/31(月) 22:07:56 ID:IpvDsaeg
>>700-701
ありがとう。助かりました。

704MUGEN名無しさん:2009/08/31(月) 23:45:37 ID:k4JOepIw
>>703
(p2movetype = H && p2stateno != [120,155])
これに死体判別varを搭載して
(Enemy(var(**)),movetype = H && Enemy(var(**)),stateno != [120,155])
としておくことで、今後タッグ用記述作りたくなっても安心

705MUGEN名無しさん:2009/09/01(火) 21:50:06 ID:7suEZj3g
どうも、製作に行き詰ってしまったので相談させてください。
現在製作中のキャラなんですが、
↓コレです。
ttp://mug0.hp.infoseek.co.jp/cgi-bin/dcnt/dcnt.cgi?n=37

このキャラの超必殺の、D, DF, F, b+c コマンドででる戸隠山投げ
という技なんですが、
(飛び道具で、防御無視。攻撃で砕くことが出来ます。
打撃攻撃ならば、必殺技以上(S)のランクの攻撃で、
投げ攻撃ならば、空中投げ系または、必殺技以上(S)の
打撃投げ(空中の敵も掴める系統の技)で、
飛び道具ならば、超必殺(H)クラスの技ならば、破壊できます。)

AI同志だと、相手がガードしようとして攻撃を喰らってしまいます。
相手が対空技などで、飛び道具を破壊するようにしたいのですが、
うまい方法はないでしょうか?
↓この動画のようなことがやりたいわけです。
ttp://www.nicovideo.jp/watch/sm3875592

HelperのtypeをPlayerにしてみたり、なんとかしようとあがいたのですが、
どうもうまくいかず・・・。

706MUGEN名無しさん:2009/09/01(火) 22:22:03 ID:hcxynmxs
>>705
ファイルに直リンするな馬鹿
伊吹川氏のスイカで十分説明になるだろうが

707MUGEN名無しさん:2009/09/01(火) 22:42:11 ID:7suEZj3g
いや、作者本人だったりするのですが。(苦笑)
どうにかできませんでしょうか。

708MUGEN名無しさん:2009/09/01(火) 23:02:04 ID:hcxynmxs
いや、製作者本人でも余り直リンはオススメしないっす。
人が少ないスレとはいえ、他の人も真似しだすと困りますんで…
他の人のサイトのものでもやられちゃ、転送量制限があるサイトには死活問題ですし。

対処の方法はちょっと思いつかないですね
防御無視で破壊可能となると自分の勉強レベルではまだまだですし…
グレイズの処理とはまた違うしなぁ…

709MUGEN名無しさん:2009/09/01(火) 23:09:41 ID:7suEZj3g
そういわれると確かに、直リンを張るのはあまり良いものではないですね。
以後気をつけようと思います。

う〜ん、やっぱり対処法はムズかしいですか〜。
実は知り合いのAI製作者にも相談してみたのですが、やはりムズかしい
と言われてしまっていて・・・。(涙)

710MUGEN名無しさん:2009/09/01(火) 23:17:15 ID:hcxynmxs
きっちり対応出来るようにするとなると極端な話、相手にP2系使ってもらうくらいしか思いつかないですね

あと素人考えですが岩が飛ぶ一直線上にヘルパー置くなりして反応させるとか?
勿論岩とは別にもう一つ使っちゃうので色々きつくなる可能性が高いですが

711MUGEN名無しさん:2009/09/01(火) 23:20:54 ID:7suEZj3g
? ダミーのtype = Playerのhelperを置くってことですか?

712MUGEN名無しさん:2009/09/01(火) 23:29:43 ID:hcxynmxs
相手の反応のさせ方にもよると思いますけど
ダミーのヘルパーなりで相手の方に誤認させて攻撃させる事は出来ないかな?と。
ただ、そうなると出現させるタイミングがちょっと厳しいかなぁと思いますが…何せ飛び道具ですし。

この辺りの詳しいのは蓬莱氏やらAIを実際にリリースしてる人に聞いた方がいいと思いますけども。

713MUGEN名無しさん:2009/09/01(火) 23:55:53 ID:gDf5JSL2
AIを少しかじっている程度の意見ですが、P2Nameを使ってもらわない限り狙って破壊してもらうのはかなり難しいと思います。
ただ相手の設定次第ではP2Name無しで狙ったように動いてくれる可能性もあります。
1.相手との距離を無視してとりあえずInGuardDistになったら対空技を打つAI
2.飛び道具を何とかできる技を持っており、相手の飛び道具を認識してその技を使ってくるAI
大体この2通りぐらいでしょうか。
あとAIではEnemyNearを使っている方が多いのですが、それだとHelperを認識できないのでPlayerにしてもあまり効果はありません。
Type = PlayerのHelperはP2〜ならば認識できるのですが・・・・・・。

714MUGEN名無しさん:2009/09/01(火) 23:59:11 ID:7suEZj3g
ちょっと試してみたけどうまくいかず。う〜ん。攻撃しないなぁ〜。
こちらのプレイヤーヘルパーに対空撃ってくれないなぁ〜。
やはり難しいデス。

715MUGEN名無しさん:2009/09/02(水) 00:02:32 ID:yfISmDkw
やはり、相手任せになってしまうのですね。(苦笑)
出来れば、こちらで制御したいところですが。
なるほど、playerhelperが反応しないのは、そういうわけなんですね。

716MUGEN名無しさん:2009/09/02(水) 01:41:42 ID:EACwsgkM
よく判らんが、飛び道具扱いにして喰らい判定付与&HitOverrideで特定攻撃喰らえば破壊ステートに飛ばすとかじゃダメなの?

717MUGEN名無しさん:2009/09/02(水) 01:51:17 ID:7edeGPsg
ヘルパーの性質や用途を考えると、ヘルパーに対して意図的に攻撃を仕掛けるAI、というのはあまりない。
うちは飛び道具(のHitDef)に対して相殺狙いで飛び道具を撃つことはあるけど
まあよく失敗するけどね!軌道や高さや相殺判定ないとかで
AIでなく、キャラとしてのヘルパーの主な用途は、おおよそゲージ、エフェクト、飛び道具、ストライカー
前二つに攻撃する意味はないし、後の二つも無敵ですり抜けはしても攻撃して落とせる保証が無い(むしろ危ない)ので攻撃したがるAIは普通ない
それに既に挙がってるように認識する手段が少なく捉えるのが大変面倒。
動いているそれに正確に攻撃を当てようと思えば、アナブラの当身記述あたりを参考にすることになろうかと思う
そんなわけで、P2Nameとともに、飛び道具認識と、ある程度精密な位置予測も必要。
汎用性の無い対策ひとつのためにそれだけのことを組み込む人がどれだけいるか・・・
位置予測くらいはデフォルトで組み込んでる人も多いと思うけど
俺だったら素直に回避することを考えるかな

ちなみにプレイヤー型にすると(超反応)無敵昇竜をやるようなタイプはうまくやってくれるかもしれないけど
状況によっては本体無視してそっちに向きなおしちゃうことがあるから若干危ない
そしてやっぱり関係ないヘルパーに対して振って隙を晒したくないから本体認識してヘルパーには手を出さない可能性も高い・・・

718MUGEN名無しさん:2009/09/02(水) 02:42:59 ID:/PO/kR4U
>>715
p2nameの専用行動でようやく対応できる可能性のあるAI殺しかと

どうしてもやりたいのなら
透明になった無敵状態の本体がヘルパーで岩にくっ付いて
投げている萃香がプレイヤーヘルパー
岩が消滅時に本体がプレイヤーヘルパーの位置に戻る

とすればAIは本体に反応するからいけるとは思います
見た目上問題ないかはわかりませんががが

ただ近距離ではinguarddist=1後の発生が早いので間に合わない可能性高し
遠距離でも大きな攻撃判定が重力無視して高速移動していること

この二点からもし対応できる作りになったとしても
AIが対応できるかどうかは微妙としか

>>712
㌢氏とかヘルパーリダイレクト研究してる人なら何かわかるかもねー

719MUGEN名無しさん:2009/09/02(水) 11:44:30 ID:B3.AVvtQ
>透明になった無敵状態の本体がヘルパーで岩にくっ付いて
透明になった無敵状態の本体がヘルパーの岩にくっ付いて移動

しかし、出始めの長い無敵時間も厄介だし
空中判定の突進技に対して超反応するAIしか対応しないかな…?
必殺技以上でしか破壊できないのも結構絞られますしね

720MUGEN名無しさん:2009/09/02(水) 23:14:03 ID:Ig6yR4LU
そもそもが的確に相手本体でないプレイヤータイプの物体に対して特定の行動を取れというのが難しい気がするな
今はprojにヘルパーを重ねた飛び道具がほとんどだし、尚更他の飛び道具やらと見分けつけられんかも
岩に貼り付けるプレイヤーヘルパーに常時Movetype = Hとか付けれるならまだ分からんかな・・・
まぁでも今後の為に、こういった「殴ることで解決できる飛び道具の作り方と性質をAI記述用に統一」するために議論するのも良いかも
とP2ネーム・P2ステート判断は対象キャラ更新の度に書き直すことになるからできるだけ使いたくない怠け者の意見
そういやオトコマエ氏ベガAIは同氏豪鬼の飛び道具殴って消すことがあるんだよな、あれもP2ネームかねぇ

721MUGEN名無しさん:2009/09/03(木) 17:17:17 ID:VgIxu63.
相手のブロッキング感知をしたくて調べた結果、SongfuさんのHPにあった
(movecontact||movereversed)&&!numtargetという記述を使用したのですが
うまく感知できません。何が原因でしょうか

[State -1]
type = VarSet
triggerall = var(59) > 0
triggerall = p2movetype != A
triggerall = p2stateno != [5000,5210]
triggerall = enemynear,InGuardDist
triggerall = p2stateno != [120,155]
trigger1 = (movecontact||movereversed)&&!numtarget
var(70) = 1

722MUGEN名無しさん:2009/09/03(木) 17:30:06 ID:mYHgZvzU
varは0から59まで

723MUGEN名無しさん:2009/09/05(土) 20:17:33 ID:yt8M6VJo
AIに使われているリダイレクトがenemynearとかだとplayerヘルパーには全く反応しないのであまり有効ではないかも。

こちら側でできそうなのは、
まず通常時はmovetype=i(とかh)としておき、
敵と一定距離になったら即座にmovetype=aにセットしてやることで
攻撃が当たるまではガードさせなくすることはできます。

結局相手の記述次第になるというのはいうまでもありませんが。

724MUGEN名無しさん:2009/09/07(月) 14:41:46 ID:3XnlplvI
凄い分かり辛い文だったらすみません。

今ヘルパーで相手の発生FとStateNoを記憶して、当身を確実に当てようと思ってるんですが上手くいきません。
こっちの当身の発生は3F、持続は8Fです。
試しにとりあえず1個、発生10の技を記憶して当身出させてみたんだけどどうも上手くいかない。
っというか1F反応して9Fの時点で持続切れて当たるみたい。
こういう場合ってどうやって調節するんですかね?
Enemynear,Time<Var(*)-Floor(3)とか色々試してみたんですが出来なくって・・・。

725MUGEN名無しさん:2009/09/07(月) 14:46:34 ID:3XnlplvI
>>724
すいません、発生13の技でした。
っというか学習ヘルパーなんてのも始めて使うんで良く分からないんですよねぇ。
とりあえずやっつけでヘルパー使わず1個だけ保存できるように作ったものなんですよね。
後々上手くいったら本格的にヘルパー導入する予定なんですが。
因みに記憶方法はこんな感じです。

[State -3]
type = VarSet
trigger1 = P2MoveType=A
var(*) = EnemyNear,StateNo
ignorehitpause = 1

[State -3]
type = VarSet
trigger1 = MoveType=H
Trigger1 = Time=0
var(*) = EnemyNear,Time
ignorehitpause = 1

726MUGEN名無しさん:2009/09/07(月) 15:42:34 ID:3SFXkMMA
まず聞きたいことは
この記述をヘルパーのステートに書いているのか?
とりあえず、これが機能してないかどうかをデバッグで確認したのか?
当身は中下段両方に有効なのか?
この3点

ついでp2movetypeとenemynearが両方入ってるから、ヘルパーが攻撃中で前に居た場合
まともな値が入らないぞ。
あとFloor(3)のFloorはいらないぞ。

727MUGEN名無しさん:2009/09/07(月) 16:25:52 ID:3XnlplvI
>>726
上にも書いてある通り、ヘルパーは使ってませんよ。
上手く言ったらヘルパーに移動させて量産しようかと思いまして。
色々弄ってたらとりあえずは出来ました。
スレ汚し大変申し訳ありませんでした。

728MUGEN名無しさん:2009/09/07(月) 18:57:16 ID:4zA7oUg.
ttp://homepage3.nifty.com/andil/AI_atemi.txt
方法が気になったから、当身用学習機能の記述を想像してみた。
このファイルに打っただけだから確認はしてない。ただの想像。

当身技は、受付Fが長ければAI殺しにもなるし使わせやすいけど、
受付Fが短いと記憶無しじゃ暴れ狩りとかにしか使わせられないかね。

729MUGEN名無しさん:2009/09/07(月) 23:18:01 ID:W57kRL6o
当身なんて時々成功すればいいんですよ
難しいことしてほんのちょっとの精度向上目指すなんてバカらしいというのが俺のポリシー
てことで俺が使ってるざっくり記述

Trigger1 = ceil((Enemynear,AnimTime + Enemynear,Time * 3) / 4) + 2 <= 0
Trigger1 = ceil((Enemynear,AnimTime + Enemynear,Time * 5) / 6) + 2 >= 0

判定の発生するフレームが相手の攻撃全体Fの1/6Fから1/4Fの間に掛かれば成立という式
使ってるキャラの判定持続が長い(30F弱)から十分機能するんで判定の長さによってある程度調整が必要
持続15Fでもちゃんと機能してるけど8Fだときついかなあ
相手の全体フレームの長さによって分母を変えてやるのも要るかな、あとランダム
噛み砕いた記述はこれ

ceil((Enemynear,AnimTime + Enemynear,Time * {分母 - 1}) / {分母}) + {発生までのフレーム数} >= 0

持続が長くて前進する攻撃の発生とか学習するの面倒だし逆にひっかかりそうだから俺はやりたくねーなぁ
そんなこといってるから強いAI作れないのかな・・・

730MUGEN名無しさん:2009/09/07(月) 23:25:15 ID:1gjXj4Rk
>>729
擬似学習に頼りすぎてると逆に強いAIが作れなくなる気もします。
めんどくさいと思った事は放って置いてこれなら出来ると思った事を追求するのもありと思います。
擬似学習とか元々対AI特有のハメ対策(主に中下段)に作られただけですし。

731MUGEN名無しさん:2009/09/08(火) 14:00:53 ID:uaCb.1Ak
一通りざくっと作る→AIが予期せぬコンボをする→それを組み込む...
記述が膨れ上がるので整理→若干のバグが見つかる→記述のスキマでAIが予期せぬコンボをする→それを組み込む...
AIが強くなるのは嬉しいがループから抜けられん・・・!

732MUGEN名無しさん:2009/09/13(日) 20:46:39 ID:FdOsPQds
>>731
自分はまず触ってコンボに入れるルートを全てメモって
立ち回りも動きもメモって、各種技の発生リーチとかも全部記録して
そこからコンボとか切り替えしとか動きとか作るからそういうのは無いんだよね。
一通りザックリ作るってどうやるの?

733MUGEN名無しさん:2009/09/14(月) 19:43:19 ID:j8LYDoXU
>>725
[State -3]
type = VarSet
trigger1 = !var(x)
var(x) = -1
ignorehitpause = 1

[State -3]
type = VarSet
trigger1 = EnemyNear,MoveType=A
var(x) = EnemyNear,StateNo
ignorehitpause = 1

[State -3]
type = VarSet
trigger1 = var(x) = EnemyNear,StateNo
trigger1 = MoveType=H
Trigger1 = Time=0
var(y) = EnemyNear,Time
ignorehitpause = 1

記憶したStateNoとTimeがちぐはぐとか?
どうせならここまで記述しないと。
ただ、これだともう少しトリガー加えないと直前の技しか覚えないんだけどね。

734MUGEN名無しさん:2009/09/14(月) 19:46:42 ID:j8LYDoXU
あ、ごめん、上のやり方だと
[State -3]
type = VarSet
trigger1 = var(x) != EnemyNear,StateNo
var(y) = -1
ignorehitpause = 1
これ突っ込まないとダメかも。
とっさの思いつきなんで、おかしかったらごめん。

735MUGEN名無しさん:2009/09/18(金) 10:04:28 ID:RWtsLv.2
ttp://homepage3.nifty.com/andil/mugen/AI_atemi.txt
当身返し用の敵攻撃動作記録システム記述(当身用学習装置)。
色々と改良したけど、使わせるキャラがいないという現実。

あと、もう解決してるかもしれないけど、
「1つの技のタイミングだけ+更新し続ける」のであれば
[State -3]
Type = Varset
var(x) = EnemyNear,StateNo;敵ステート番号を代入
Trigger1 = EnemyNear,MoveContact;相手が攻撃を当てた
Trigger1 = EnemyNear,StateNo!=Var(x);記憶と異なる
Trigger1 = MoveType=H && Time=1;くらい動作始め
Trigger1 = 1 || Var(y) := EnemyNear,Time;Var(y)に敵Timeを代入
IgnoreHitPause = 1
とか、全く同じ条件でVarへ代入しないとずれるよ。
ヒット→ヒットバックでStateは変化するからTime=0を2回通るし、
条件がEnemyNear,MoveType=Aだけだと当たってなくても更新しちゃう。

というか、:=を多用する人って少ないのかな・・・。

736MUGEN名無しさん:2009/09/18(金) 11:03:08 ID:qqVhP4AE
:=は単に慣れの問題なんじゃないかね。
varsetの方が直感的に理解しやすいってのがは事実だろうし。

話は変わるがmugenwikiのMUGEN豆知識のページにガード関係の項目が増えてたな。
ちと長すぎるかと思ってregionから出したら本当に長かったよ・・・。

737MUGEN名無しさん:2009/09/23(水) 17:01:02 ID:ggFYk2j2
攻撃をくらったりガードしたりした瞬間に、
その攻撃のattrを直接参照する手段ってあるのかな?
hitoverrideの発動を条件にしてvarを操作できないかと思ったんだけども、
どうもうまくいかなくて・・・。
やっぱりmovetype=Hになった瞬間にenemynear,hitdefattrで参照するしかないんだろうか。

738MUGEN名無しさん:2009/09/23(水) 17:09:33 ID:UqSt1P.o
多分そうじゃない?
あと、hitoverrideは使った時点で性能改変の部類になっちゃうと思う。
P2Statenoが空振るからねー。

今ならelecbyteに頼んでみるのも手かも知れん。
俺は起動すらできないクチだけどw

739MUGEN名無しさん:2009/09/23(水) 18:25:25 ID:K8FeXhns
GetHitVar(Damage)を使ってみなよ
Attrを直接参照することはできないけど触れた瞬間なら判断できるから

740MUGEN名無しさん:2009/09/23(水) 21:51:32 ID:cRpp/BQQ
:=を使って行を分割できるって聞いたんですがやり方分かります?

741MUGEN名無しさん:2009/09/24(木) 11:11:36 ID:IFwGM99E
gethitverという発想はなかった。
確かに攻撃を受けたフレームを特定するのには一番よさそうだ。
あとは飛び道具の扱いなんだが、相手が打撃も投げも使ってないかenemynear,movecontactが反応しないときに
gethitverが反応したら飛び道具とみなすしかないかな。

attrを直接参照できれば単純だし、タッグでも使えそうだったんだけどね。

742MUGEN名無しさん:2009/10/03(土) 01:47:49 ID:cyVmu0xg
ctrlでは不可能だがanimtime=0にした場合繋がるコンボって目押しコンボっていえるかな?

743MUGEN名無しさん:2009/10/03(土) 13:51:04 ID:IxtdUeSg
>>742
それだとCtrlと比べて、処理の関係上1フレーム早く始動してるはずなので、
技の始動条件の一種にそれがなければ、目押しでなく性能改変になっちゃう。
1F分でギリギリ繋がらないよう調整されているのもありえるから、注意。

関係ないと思うけど、AIで目押し動作をさせたいのに別の技が暴発する場合は
暴発する行動にPrevStateNo!=などの条件を加えるとか、
全ての行動をVarによってコンボを含めた状況判定をさせるとか、
動作の終わり(主にAnimTime=0)からAI用ステートをはさんで、
そのステート内で1F経ってから(Time=1で)動作を行わせるとか。

744MUGEN名無しさん:2009/10/03(土) 18:17:39 ID:X9.2/3Dk
相手の全画面攻撃を学習する方法ってありますか?

745MUGEN名無しさん:2009/10/03(土) 18:26:36 ID:ScCf6PMI
最近公開したテリーのUP主ですが丁度それについて悩んでいたので、非常に助かりました。

一応確認なのですが、性能上キャンセルすることができない状態では
その技のフーレムが終わってから一旦ctrlできる状況に戻らないと
次の行動はできない(したら性能改変になる)という認識でOKでしょうか?

746MUGEN名無しさん:2009/10/03(土) 20:49:54 ID:Ne1oMOXQ
>>744
相手に悪影響が出るから無い

747MUGEN名無しさん:2009/10/03(土) 21:15:53 ID:nADoELow
>>745
自分でプレイしてて繋がるとか、
prevstetnoでやってみて繋がるなら、
安定性を求めてanimtime=0でやってもいいと思うんだけどね。
その辺も結局キャラの製作者次第だと思う。

748MUGEN名無しさん:2009/10/04(日) 00:58:32 ID:3mBoqQaw
PrevStateNoを条件に使うのは安定しないからなぁ
たとえば戻りステートがしゃがみだと、そのまま姿勢を維持させないと1Fでステート変わる
他にも歩き移行とかの基本動作はMUGEN本体が勝手に処理しちゃうから無視できないのよね
さらにコンボ自体を安定させるため前進、とかの調整が必要ならなおさら
コンボ用変数に判断させる+移動制御するのが一番安定するかな
不必要なジャンプは0Fで他の通常移動ステート(0〜20あたり)に飛ばすのは理屈上問題ないし
立ち止まりも単純にctrl=0だけ使うとフライングや嘘キャンセルの元なのでコンボ用変数は是非使いたい

普通硬直からの戻りは戻り姿勢の0Fでctrlになって、MUGENの仕様上その次のフレームで操作可能になる
(操作のためのコマンド認識が実体ステート処理より前のため)
0Fでコンボ補正切って繋ぐとかいう技術があるのもこの仕様のせい
キャラ製作側でそれぞれの実体ステートにガードなりに移行できるよう記述があるならこれらは防げるけど
全ての実体ステートにコマンドをつけないといけないから非現実的で誰もやってない(はず)

>>744
そんな方法があったら全画面よりまず立ちPをしゃがんでかわせる(もしくは姿勢の低い技で差し込める)かどうかを学習したいよ
スカっても距離の問題なのか高さの問題なのか判断できないんだよなー
Airを直接参照できないからとにかく食らわないと当たるかどうか判断できんのでようするに>>746

749MUGEN名無しさん:2009/10/04(日) 01:59:53 ID:uG5z1bMc
タッグ戦とかでP4にヘルパーを固定する方法なんてのはないでしょうか
P2で固定はできるけどこれだと近い方にだけ固定されて
もう片方にヘルパー出現させることができないんですよね

750MUGEN名無しさん:2009/10/04(日) 03:19:43 ID:AtffWXMQ
PosSetにEnemy(0),Pos Xとかで出来るはず。
[State xxxx];1人目の相手
Type = PosSet;座標指定移動
Trigger1 = 1;無条件真
X = Enemy(0),Pos X ;座標Xを一人目の相手の座標Xに
Y = Enemy(0),Pos Y ;座標Yを一人目の相手の座標Yに
と、
[State xxxx];2人目の相手
Type = PosSet;座標指定移動
Trigger1 = 1;無条件真
X = Enemy(1),Pos X ;座標Xを2人目の相手の座標Xに
Y = Enemy(1),Pos Y ;座標Yを2人目の相手の座標Yに
こんな感じで、相手それぞれと同座標にする。
ただ、Enemy,とかEnemyNear,とかは死亡確認までやってくれないから、
適当な条件式くっつけて生きている相手だけを参照させるようにしないといかんね。
あとEnemy(1)とかは、その対象が居ないとデバッグ表示でエラー垂れ流すから、
NumEnemy>1とかを条件に加えて、予防しとくこと。

751749:2009/10/04(日) 09:01:45 ID:bOPxQyJU
すごい助かります
本当にありがとう

752MUGEN名無しさん:2009/10/07(水) 02:52:18 ID:HulIb/u2
現在改造剣心のAIを作ろうとしているのですが
一番参考になりそうなキャラ「AI」を教えていただきたいです
 
当方、トリガーの意味が理解できる程度の知識しかないです

753MUGEN名無しさん:2009/10/07(水) 14:12:39 ID:7Terd66c
刀使いだからそれらを参考にすれば良いんじゃない?

754MUGEN名無しさん:2009/10/07(水) 16:39:36 ID:HulIb/u2
刀使いですか、、、
剣心に似た動きをする刀使いだと誰が良いですかね?

質問ばっかですいません

755MUGEN名無しさん:2009/10/07(水) 17:04:37 ID:Btift.wU
つか、トレーニングモードでもいいから自分で使ってみた上で、
適当に連続技とか作った後でKFM辺りとやらせてみた方がいいのでは。
習うより慣れろだと思うけどねぇ。
作ってるうちに、どうしたいこうしたい、って思ってくるもんだよ。

その後で色んなキャラと対戦させてみて、あの立ち回りどうやってんだろ?みたいな感じで、
他の人の記述を見てみるのがいいんじゃない?

刀使いなら月華キャラとかがいるけど、いきなり真似する事は考えない方がいいと思う。

756MUGEN名無しさん:2009/10/07(水) 18:10:35 ID:w4PnVMto
>>747
いろんなキャラと戦わせてみた結果どんな条件でも必ず
つながるというわけではなさそうなので、var使って追いうちにさせます。
ありがとうございましたー。

757MUGEN名無しさん:2009/10/07(水) 22:13:28 ID:rTal/7Fw
ちょっと質問。
皆さんはAI組む時にifelseって使ってますか?
自分は1行しか違わない条件時はchangestateのvalueにifelse使ってまとめて書くようにしていますが、
他のAI作者さんの記述でifelse使ってるのをあまりみないものですから・・・
ちなみに↓な感じ

[State -1,空中コンボの分岐]
Type = ChangeState
value = ifelse(Power=2000&&var(13)=0&&(EnemyNear,gethitvar(hitcount)<20),625,ifelse(PrevStateNo=605,615,605))
TriggerAll=(var(49)&&(Random<=var(48)*10)||var(49)=11)||fvar(39)
TriggerAll=alive = 1
TriggerAll=!Ishelper
TriggerAll=RoundState=2
TriggerAll=(StateNo != [100,106])
TriggerAll=Pos Y<-10
TriggerAll=StateType=A
TriggerAll=P2StateType != L && P2StateType = A
TriggerAll=P2MoveType=H
TriggerAll=!InGuardDist
TriggerAll=var(53)>=6
Trigger1 = StateNo=605 && MoveContAct

こんな感じです。
()の管理とか少し大変ですが、慣れるとそれほどではないこと。
無駄に長くなる記述や、誤って2つのchangestateのtrigger全く同じにしてしまって、
キャラが固まるのを防ぐこと。(目押し記述とかでよく起こった・・・)
あとは無駄に行数や文字数が増えるのを防止する目的もあるので、ほぼ全ての記述でifelseを使っています。

ちなみにこの方法だと1行が256文字以上になるとmugenが文字列を全部格納できなくてエラー起こしますので、
その場合は仕方なくchangestate2つに分けたりしていますが・・・

758MUGEN名無しさん:2009/10/07(水) 22:49:34 ID:IFQsFp2I
使わなくて良いときは使わないし使う時は使う
あとその記述だと
Var(13)=0 → !Var(13)
ifelse(PrevStateNo=605,615,605) → 605+10*(PrevStateNo=605)
のようにIfElseを使うよりも短く書ける場合もあるから文字数制限を食らうときは少し工夫してみると良いかも
他にも(EnemyNear,gethitvar(hitcount)<20)が長いからどこかに
TriggerAll = Var(X):=(EnemyNear,gethitvar(hitcount)<20)||1
と入れて
Power=2000&&var(13)=0&&Var(X)
と書いたりいっそまとめてしまって
TriggerAll = Var(X):=(Power=2000&&var(13)=0&&(EnemyNear,gethitvar(hitcount)<20))||1
Value = IfElse(Var(X),625,605+10*(PrevStateNo=605))
とすればかなり文字数を節約できる
あまりみないとは言っても使っている人は使っているから別に気にしなくて良いと思う
IfElseも結構べんりなところはあるからね

759MUGEN名無しさん:2009/10/08(木) 18:21:55 ID:6YtFUevg
>>758
おお!早速の返信ありがとうございます!
そんなに変なことじゃないんですね、安心しました。

>ifelse(PrevStateNo=605,615,605) → 605+10*(PrevStateNo=605)
ああそんな風に縮めれたんですねぇ・・・勉強になるわ。

>TriggerAll = Var(X):=(EnemyNear,gethitvar(hitcount)<20)||1
この発想は無かったなあ。
var(x)とか変数をあんまり勝手に使用するのはどうかと思ってたので・・・

次AI作るときはもうちょっと整理できそうな気がします。ありがとうございました。

760MUGEN名無しさん:2009/10/09(金) 00:17:07 ID:QZzFICIU
FAY418氏のサイトにのっている重力加速度計算なんですが

Trigger1 = (P2BodyDist Y + (EnemyNear,Vel Y * 9 + EnemyNear,Const(Movement.YAccel) * 300) *
(P2StateType = A && EnemyNear,Vel Y != 0)) = [-25,-23]という部分なんですが

EnemyNear,Const(Movement.YAccel)になぜ300(相手の重力加速度)を掛けるのか氏のサイトを
読んでもイマイチ理解できません。
氏に聞くのが定石だと思うんですが休止中?ぽく連絡がつかない状況です。
どなたかわかるかたご教授お願いします。

あと氏のサイト以外で重力加速度について説明してるサイトってどこか
ありますかね?

761MUGEN名無しさん:2009/10/09(金) 10:39:16 ID:7XM8z.J.
高校レベルの物理の知識があればなんで足し算になるかはわかるはず・・・なんだが、
そんなことを説明してもあまり意味がないと思うんで、
結果だけ言っておくと300という数は技の発生フレーム×(技の発生フレーム+1)/2の結果。
流れ者氏の技術メモにも重力加速度の解説があるんだが、
こっちは技の発生フレーム×(技の発生フレーム)/2で処理してるんだけどね。
まぁ流れ者氏も書いてるように空中ではたいていp2bodydist Yの基準点にくらい判定がないんで、
どっちの計算式を使っても致命的なことにはならないはず。
ただMUGENの累乗演算子は信用できないんで、(技の発生フレーム)**2/2とするのは危険。

762MUGEN名無しさん:2009/10/10(土) 23:13:04 ID:HE.Gxmbs
全く同じコンボでステージ右端では入るのに、左端では入らないことに戸惑っています。

具体的には
技Aで高く浮かせ、その技をキャンセルして、空中前方に突進しながら当たり判定が出る技Bで拾うというコンボです。
ステージ右端だと相手が自分の当たり判定の前に落ちてきて拾えるのですが、
ステージ左端だと自分が相手の後ろ側にめりこんでしまい当たりません。 
P2BodyDist,EnemyNear, vel等はすべて左端右端ともに同じです。
どなたか原因、解決方法などわかりませんでしょうか?

763MUGEN名無しさん:2009/10/10(土) 23:48:09 ID:lqhokrh6
俺もそれに似た状況を知ってるから、多分mugen自体の仕様なんじゃないかなー

764MUGEN名無しさん:2009/10/11(日) 17:07:50 ID:u2mfgweI
そうですかーとりあえず何もいじらずにそのままにして対策考えます。
ありがとうございました。

765MUGEN名無しさん:2009/10/11(日) 18:47:42 ID:EHK1573w
widthでedge使えば

766762:2009/10/12(月) 22:30:35 ID:NOktqViw
左と右端にヘルパー置いてそことの距離測ってなんとかしました。
ありがとうございました。

767MUGEN名無しさん:2009/10/14(水) 18:31:07 ID:ilmKdDrI
>>766
Helper置かなくても、FrontEdgeBodyDistで何とかならない?
不要なHelperは少ない方が良いし。

768MUGEN名無しさん:2009/10/15(木) 18:42:24 ID:4et/Q/JY
AIでダッシュさせると記述の内容に関係なく
ダッシュ音が無くなってしまいます。
見た目は普通にダッシュしています(水平移動もしていない)
それにcnsやcommonもちゃんと弄ってあります。

ちなみに人操作でダッシュさせると普通に音はあるんで
キャラ自体には問題はありません。

何が原因の可能性がありますかね?

769MUGEN名無しさん:2009/10/15(木) 20:14:19 ID:miD.fjLQ
>>768
ダッシュ音のsndstopのトリガーの
command !="hold_F"やanim!=100がどうなってるか見直す
前者は操作時のみ動くようにしとき

770MUGEN名無しさん:2009/10/16(金) 21:05:41 ID:s2ATuTdI
AI製作者様のデータをダウロードすると
コマンドファイルだけの方とほかにも2,3つ一緒の方がいて
あれはどういう意味または理由があるのでしょうか?

AI作るときはコマンドファイルだけ弄ればよいと思っていたので

771MUGEN名無しさん:2009/10/16(金) 23:56:15 ID:xeOl0p8k
基本は派生連続技やボタン溜押技等、コマンドで制御される箇所のAI時暴発を防ぐ為
コンボ分岐管理や学習機能を仕込む為とか色々理由はある
AIパッチで技をアッパー性能or原作風に改変する奴もいるけどな

772MUGEN名無しさん:2009/10/17(土) 03:25:30 ID:eDvyBUZw
まあ性能弄ったた時点で
AIパッチでなくてAI付き改変パッチになるわな

773MUGEN名無しさん:2009/10/18(日) 01:15:12 ID:eY3ddY7E
AI最近作り始めたんですが
なんか単調で人間ぽくない動きになっていまい
どうしても豊富なコンボやめくりなど考えたら
私のような思いつきでAI作り始めた人間では
作れない気がしてきた
キャラを作ると(AIいじっただけですがw)製作者が神に思えてきますね

AIが単調にならないようにする工夫などや
めくりの方法などが参考できるサイトありませんかね?;;

774MUGEN名無しさん:2009/10/18(日) 02:21:29 ID:/LIpNSd.
>>773
AI製作してる人はブログをやってたりもするから、
そこの過去記事で解説探してみたらどうだろう

775MUGEN名無しさん:2009/10/18(日) 11:25:37 ID:eY3ddY7E
返信ありがとうございます

探してみますね

776MUGEN名無しさん:2009/10/18(日) 16:44:44 ID:eY3ddY7E
空中ダッシュやダッシュを
何回もAIが人間では不可能な早さで行ってしまって
挙動がおかしいのですがどうやったら直りますか?

777MUGEN名無しさん:2009/10/18(日) 17:59:53 ID:jGYokpYU
common1のダッシュステートを自分のCNSにコピーして自分で制御する
ダッシュ・歩き・ジャンプ等の基本ステート制御の仕方はこのスレで探せ
既出過ぎ

778MUGEN名無しさん:2009/10/20(火) 00:30:37 ID:b89uu5O2
AIをデバックで観戦していると
ダッシュしようとする形のまま硬直してしまい
足もとのエフェクトとカタカタカタという足音だけがのこり
キャラがフリーズしてしまいます
これは何がいけないのでしょうか?

できたら解決法も教えていただきたいです

779MUGEN名無しさん:2009/10/20(火) 00:38:58 ID:b89uu5O2
ちなみにデバックのときに
ステートナンバー 52と延々と表示されてました

780MUGEN名無しさん:2009/10/20(火) 00:57:55 ID:iH1GDWck
>>779
着地ステートの内部処理や終了条件、そこに飛ばしてるステート内の不具合の有無くらいは「当然調べた」んだよな?
そうであればその辺どう処理したかの記述は書こうぜ
着地ステートを全く弄って無いのなら、AIの技に飛ばすチェンステのvalue値がミスってるとか色々可能性があるんだが?

781MUGEN名無しさん:2009/10/20(火) 01:08:02 ID:b89uu5O2
>>780
返信ありがとうございます
なんか凡ミスだったみたいで、ダッシュの記述を全部消して
スレで同じっぽい症状の方をみつけて、同じ対処法をしたら治りました。
何が悪くて何が良かったのか迷宮入りですが
お騒がせしました

782MUGEN名無しさん:2009/10/20(火) 11:25:02 ID:QMVORm5.
>>778
考えられる事は
1.ダッシュがCtrl=1でジャンプ制御してなくて、何らかが原因で高速で着地を繰り返してる。
2.ValueかChangeStateで飛ばすStateのミス
3.ダッシュを止める記述が101や0ではなく52になっていてしかも着地命令がミスってる。

この辺りかな?
兎に角、このくらいの問題は、まず一度全部消して、KFMとか見ながらやっていけば特に治らないような悪質な問題でもないですよ。

783MUGEN名無しさん:2009/10/20(火) 21:29:27 ID:iMMPZ0FY
話は全く変わるのですが、

レベル制AIを作ってて超反応を自重させる際に、超反応で使える技が複数あって、
いずれも使用できる状況(ゲージや体力の制限など)や用途(地対地や地対空など)が違う場合、
一括して超反応を制限するべきか、それとも技ごとに超反応の設定を変更できるようにするのか、
どっちがいいのでしょうか

前者は使う側も作る側も設定が楽だけれど、超必だけ超反応許可などといったことができない
後者はやや汎用性がなくもないけれど、使う側の設定が少々面倒

読みにくい文章で申し訳ありません

784MUGEN名無しさん:2009/10/20(火) 21:49:57 ID:nr9LxWP6
正直、別に使用者の事をそこまで考えてやる必要も無いと思うがなぁ…
総合的に後者の方が良いとは思うが、組みたい方でやれば良い
前者は大半が搭載してるがそれでも自重して無いと思ったら、弄る奴は自分で個別でAI修正して更に自重させたりするし

785MUGEN名無しさん:2009/10/20(火) 21:51:23 ID:nr9LxWP6
×総合的に後者の方が良いとは思うが、組みたい方でやれば良い
〇総合的に後者の方が便利とは思うが、組みたい方でやれば良い

786MUGEN名無しさん:2009/10/20(火) 22:35:55 ID:iMMPZ0FY
>>784
ありがとうございます
まずは作りたいように作って、煩わしく感じたら消そうと思います

787MUGEN名無しさん:2009/10/22(木) 08:28:08 ID:O14C3JdM
varが何に使われているか簡単に調べる方法ってないですかね?
早見表みたいなやつがなければ一つ一つ検索して調べるしかやはり無いですか?

788MUGEN名無しさん:2009/10/22(木) 09:11:04 ID:PaWQfmiw
作者はリストを持ってるかも知れんが持って無いかもしれん
地味に調べるが無難

789愛羅☆:2009/10/22(木) 17:11:59 ID:9vEXK/WM
スポーツしている女性の肉体美と、
読書好きの女性の肉体美のどちらが良いかな?
↓    ↓    ↓
ttp://tadalivedx.com/aab/?sk4

読書好きが私です。

790MUGEN名無しさん:2009/10/22(木) 20:23:11 ID:cHow2ZtA
>>787
検索して調べるにしても何を制御してるのかも見ただけじゃ分かりづらいしね
AIで変数を使いたいが調べるのが面倒だった俺はvar専用のヘルパーを一つ作った
その結果余計に面倒くさくなった
……うん、地道にキャラを使いながら調べるしかなさそうだ

791MUGEN名無しさん:2009/10/23(金) 01:38:34 ID:xvrRyG4s
いっそvar(x)で虱潰しに検索かけるとか

792MUGEN名無しさん:2009/10/23(金) 02:21:07 ID:Jgur5fYE
>>791
それ何て俺

793MUGEN名無しさん:2009/10/23(金) 04:26:30 ID:ETu6oqqk
どの変数が使われているかは、var/fvar exchangerで一応は調べられるのでは。
精度がめちゃめちゃ高い訳ではないみたいだけど。
var/fvar exchangerで引っかからなかった変数が本当に使われていないか調べて、
とりあえずはそこを使う様にしてるな。

何に使われているかはそれこそ調べないとどうしようもないしね。

794MUGEN名無しさん:2009/10/24(土) 04:08:15 ID:hghYcxao
重力計算に使う攻撃発生フレームって入力してから相手に攻撃が当たるまでのフレームですよね?

通常投げは1F
弱パンは3F
みたいなかんじの

795MUGEN名無しさん:2009/10/27(火) 01:42:00 ID:snmraFzg
[State -1,]
type = VarSet
Trigger1 = roundstate = 2
Trigger1 = life < 500
v = 55
value = 1

ライフ500以上はvar(55)=0。500未満はvar(55)=1にしたい場合ってこの
記述で大丈夫ですかね?

796MUGEN名無しさん:2009/10/27(火) 01:43:29 ID:eiCsphv6
Var(55)に対する他の記述が無ければ大雑把にそれで良いし、徹底的にやりたければ
[State -1]
Type = VarSet

797MUGEN名無しさん:2009/10/27(火) 01:44:06 ID:eiCsphv6
失敬
[State -1]
Type = VarSet
Trigger1 = RoundState = 2
V = 55
Value = (Life<500)
とすればOK

798MUGEN名無しさん:2009/10/27(火) 10:43:48 ID:6cMPVk4M
タッグだといきなりvar(55)に1入るよ、そのままだと。
上にそんな話題が出てるから、そっちを参考にした方がいいかもね。

799MUGEN名無しさん:2009/10/29(木) 22:45:15 ID:kUV2YM.U
蓬莱氏の説明書を見てAIを製作しようと思ったら書き直し中で見れなかったでござる

800MUGEN名無しさん:2009/10/30(金) 16:58:43 ID:gsbLD08c
消えてる分に関してはニコwikiの内容と大差無いからそっち見るといいよ

801MUGEN名無しさん:2009/11/02(月) 15:27:09 ID:zi.Sxffo
サイト閉鎖したんじゃなかったっけ?>蓬莱氏

802MUGEN名無しさん:2009/11/02(月) 16:35:22 ID:oEYcZbzw
>>801
サイト名が変わっただけでしょ

803MUGEN名無しさん:2009/11/03(火) 02:33:23 ID:oecHaBhQ
サイト名変わってないし閉鎖もしてないよ><

804MUGEN名無しさん:2009/11/03(火) 12:34:33 ID:gdbppE0Y
>>801
今のところ新しいところの方はニュースにしちゃダメ><
ってコトだから余計に気付きにくいのかも。

805MUGEN名無しさん:2009/11/06(金) 12:18:18 ID:Y7ykw0TE
過去のlife関連のやりとりから察するにタッグ時のlife半減はconstに反映されてそうなんだけども、
attackやらdefenceやらも反映されてるんだろうか。
もし反映されるなら、1対2のことも考えるとlifeをそのまま使って
constのattackやdefenceを使った方がいいんじゃなかろうかとふと思ったので。

806MUGEN名無しさん:2009/11/06(金) 19:46:20 ID:W/cfBmC.
何が良いのかよく分からないが、とりあえず
Const系の値はキャラが同じ(cnsで設定した値が同じ)なら同じもので、
lifemaxとかpowermaxのConstがかかってない値は、パートナーとかチーム制とかの状況で異なってくる
って認識でおkだと思うよ

807MUGEN名無しさん:2009/11/10(火) 15:56:23 ID:mUIpTsaA
>>805
主語をつけてくれー。
何に使うのか分からんと答えようがない。

lifeは反映されてるからこそ、lifeトリガーになんかしようとすると不具合がでやすいんだよね。

808MUGEN名無しさん:2009/11/13(金) 10:11:52 ID:Gm3kAYIE
AIに相手の飛び道具見てから技出させようと思って
EnemyNear,NumProj!=0
EnemyNear,NumHelper!=0
EnemyNear,MoveType=A
これらを主な条件にしてるんだけどどうも上手く行かない
主に攻撃と関係無しにゲージとかで常時ヘルパー出してるキャラのときとかただの攻撃に反応したり
EnemyNear,HitDefAttr=,AP
とか付け加えてみたけど命令そのものが実行されなくなった
なんじゃこりゃ

809MUGEN名無しさん:2009/11/13(金) 11:17:30 ID:jqez1Xu.
飛び道具対策は難しいよ。
projectileやhelperは常時出ている場合も多いし、
enemynear,hitdefattrは「本体が飛び道具判定の攻撃判定を出している時」だからめったに無い状況だし。

やるならplayerIDリダイレクトとかを使うか、相手がattackdistより遠い間合いで攻撃しているとき〜とかで妥協するかとかかな

810MUGEN名無しさん:2009/11/13(金) 17:40:50 ID:r3pB6ZIo
飛び道具対策でEnemyNear,MoveType=A系は含めない方が良いと思う
飛び道具が出ててもキャラ本体が待機に戻ったら0を返すし

811MUGEN名無しさん:2009/11/14(土) 04:06:46 ID:VWuJ9mmo
もしかして記述で:(コロン)と;(セミコロン)って同じ意味じゃない?

812MUGEN名無しさん:2009/11/14(土) 04:30:52 ID:02TwQiz.
違うよ。
;は以降コメントアウトでプログラムとしては読まれない。
行が変われば効果はなくなる。

:は:=で変数に値を入れる時に使う。

813MUGEN名無しさん:2009/11/15(日) 18:34:58 ID:kZxu5yIk
>>808
3秒以上相手のhelper+projectileの数に変化がなければ、その数を記録して、その分引いておく、
とかすれば、飛び道具が出てるかとか、画面上に新しく飛び道具が増えた瞬間とかは、
簡易的には把握できるとは思う。

814MUGEN名無しさん:2009/11/19(木) 03:46:20 ID:04nsekAU
目押しコンボや受身不可の技の後追撃で技を出したい場合ってanimtime=0を使った場合って性能改変になったりするのかな?

悪咲氏のキャラだし性能改変はダメだからそこらへんはどうなのかがはっきり知りたいです。

815MUGEN名無しさん:2009/11/19(木) 03:57:05 ID:ZWhembGE
度々出るね、その話題。
悪咲氏自身がAIでanimtime=0をトリガーに使ってるからいいんじゃない?
悪咲氏はケースバイケースと考えるかもしれないから、本人に聞くのが一番早い。

816MUGEN名無しさん:2009/11/20(金) 06:42:34 ID:AAThfDoo
っていうか先行入力できるキャラはanimtime=0使っても問題ないんじゃないか?
先行入力が成功してれば1Fの隙もなく繋げられるもんじゃないの? 俺の先行入力の認識が間違ってるかもしれないけど

817MUGEN名無しさん:2009/11/20(金) 12:29:03 ID:EpqZ0XG6
コマンドに1F遅れが生じるから無理だけど
animtime=0の微妙な強化がそんな気になるなら1F待機ステート挟めば良い話

818MUGEN名無しさん:2009/11/21(土) 13:52:27 ID:9te1C6mQ
>>814
ぶっちゃけ「何をドコまで弄るのを性能改変と判断するか」は氏だけにしか判らんのだから、
ココで聞かれてもな

例えば操作時に猶予F的に成功率が異常に低いとか基本無理な繋ぎが
animtime=0で劇的に余裕で繋がるなら考えモノ
1F短縮で改変云々って趣旨なら、そもそもAIの屈攻撃自体statetype!=Aが主で、
操作時と違いdef10を通らずに待機から直で出せる訳でな
その時点で既に性能改変されてるor図らずも改変しちゃってる訳よ

819MUGEN名無しさん:2009/11/21(土) 22:05:56 ID:eIRrOpuk
StateType!=Aの-1FはStateType=Cが条件に入ってる場合だけどね
制作者によってはStateType!=AとCommand="holddown"が条件の屈み技もある

あとStateNo=0&&Ctrl=1のときに勝手に動かれて困るなら
[State -3]
Type =ChangeState
Value=0
TriggerAll=*AIフラグ*
TriggerAll=PrevStateNo=0&&StateType=S&&Ctrl&&!Time
TriggerAll=StateNo=10||StateNo=20||StateNo=40
Trigger1=*状況条件*
とかの記述を-3ステートの最後尾に入れて、立ちステートを無理やり維持する方法もある。

ちなみにCtrl=1はMUGEN側で立ち・歩き・屈み・ガードの処理を行うという状態で、
それらの「レバー動作」は全てキャラの処理よりも前にやってるみたいだから、
ステ戻り(x→0)→・次F→レバー処理(0→10,20,40)→キャラ処理(PrevStateNo=0)ってことも多い。
なので直前の動作を確実に知りたいなら、Varで記憶する方がいい。

もっと確実にやりたいなら、AI用制御ステートを作るとか。
まあ、その辺りの細かい所は制作者に確認するほうがいいと思う。

820MUGEN名無しさん:2009/11/28(土) 04:22:47 ID:Fzp2yVa.
平成㌢氏AIマニュアル以上のことって皆どこから学習してくるんだろう

学習用ヘルパーとか 跳ね返り速度計算とか

821MUGEN名無しさん:2009/11/28(土) 08:45:49 ID:E2w5SSNQ
>>820
やってると自分で思いつく。
もしくは良い動きだと思ったAIを参考にする。
要はトリガーと変数とヘルパーの使い方の工夫だから

822MUGEN名無しさん:2009/11/28(土) 13:43:03 ID:Fzp2yVa.
色んなサイト回ってヘルパーってのがなんなのかってのはわかったんだが
イマイチ起動法以外の記述の仕方でわかんない所が結構あるんだよなぁ

例えば色んな人の記述見てるとhelper(25000+ID)っての見るけどhelper(25000)と何が違うのか、みたいなとことか
その他changestate
での記述の方法とか
そーゆうAI制作用に基礎的なこと説明してるサイトってないですかね?

知ってるなかだと厨忍氏のサイトがあるがイマイチ理解できないです。

823MUGEN名無しさん:2009/11/28(土) 18:55:05 ID:3j7ozfgE
>>822
説明下手なんだ・・・わかりにくくて申し訳ない(´;ω;`)ブワッ
helper(25000+ID)ってのは多分同キャラで戦った場合にヘルパーIDがかぶらないように、ってことで使われてるんだと思うんだけど、
そもそもヘルパーリダイレクトって自分のヘルパーにリダイレクトするものだから多分不要だと思うんだよね。

んであとはキャラ本体と同じように、としか言えないかな。
とりあえずは自分の出した飛び道具の情報をリダイレクトで取れれば良いと思う。
helper(1000),pos xとかhelper(1000),timeとかhelper(1000),movecontactみたいな。

学習とか相手の飛び道具リダイレクトとか第三者的な監視用とかで使おうとするとまた面倒くさいけど、
その辺りも慣れればできるようになると思う。キャラ改変とかもやって見ると勉強になるかも

824MUGEN名無しさん:2009/12/05(土) 23:07:11 ID:/fhbtGY6
AIの記述見てたら、(var(54)&61440)=4096 みたいな&の使い方があったんだけどこれってどういう意味だろ

825MUGEN名無しさん:2009/12/06(日) 00:26:17 ID:lWHUM3pg
>>824
参考:wikipediaのビット演算
ttp://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%83%88%E6%BC%94%E7%AE%97#AND

varにギリギリまで情報を押し込むために2進数にしてるからわかりにくいが、
目的としてはvar(54)%100=24と同じようなことをしてると考えていいはず。

826MUGEN名無しさん:2009/12/06(日) 10:29:45 ID:hYMRTyks
>>825
乙です。
紹介してくれたところと↓のページ見てだいたいわかりました。
ttp://www.cppdrive.jp/cstart/ope/index6.html
しかし慣れないうちは使うことはなさそうだな・・・

827MUGEN名無しさん:2009/12/22(火) 12:35:57 ID:e3EBRGQM
相手のぶつかり判定の高さを調べるってことできますか?

828MUGEN名無しさん:2009/12/23(水) 16:09:23 ID:y6fAxzG.
Constのheapd.posじゃだめなんだっけ?

829MUGEN名無しさん:2009/12/24(木) 02:04:02 ID:YTRWzMts
>>828
製作者が設定していないキャラが多いし、あまりあてに出来ないよねあれ。

830MUGEN名無しさん:2009/12/24(木) 04:43:08 ID:4IzVbyHc
ぶつかり判定なら
enemy,const(size.height)
の方じゃね?
アレって空中の相手にも適応できるのかしら

831MUGEN名無しさん:2009/12/24(木) 16:38:46 ID:p3fcbOeg
velXってのはどーゆう定義なんですかね
1フレームに移動するピクセルって事ですか?

velX=2だった場合1F間に2ピクセル移動する速度ってことですか?

832MUGEN名無しさん:2009/12/24(木) 18:25:52 ID:RIUgNnMs
>>830
確かにそっちだった気がする。ごめんw
>>831
合ってる。
つーか実際にデバッグモードにして移動距離を見てみれば、感覚的にもどの程度か理解できるんじゃないかな。

833MUGEN名無しさん:2010/01/02(土) 00:38:21 ID:xvspyRW.
1週間以上書き込みがないのも寂しいのでひとつ質問を。

AI動作時に悪咲3号氏が作成されたcvs京の無式の炎projectileが、
130番ステートにいるのに直撃する症状に見舞われてます。
guardflagはMですからガー不ということもありませんし、
prevstateno=130をトリガーにしている削りKOは正常に作動するので
ガードが解除されているということもないはずですが、
何か原因として考えられるものはありますでしょうか。
ちなみにキー入力では問題なくガードできています。

834MUGEN名無しさん:2010/01/02(土) 23:30:34 ID:ymJom7uA
よくあるのは、飛び道具の位置のせいでinguarddistが0になってて防御できないとか、
攻撃モーションに入ると同時にhitdefONかつ攻撃判定のair出現でガードできないとかだね。

でもそれだと130番に入るわけないか〜。
そもそも130番にいるならガードできると思っていたんだけど・・・
他のAIでもそうなります?

835MUGEN名無しさん:2010/01/03(日) 00:28:40 ID:U/WtlqeI
サンプルの数は少ないですが、GM氏のデフォルトAIを起動させた3rdリュウ、
本体をpots氏、AIをmisobon_ism氏が製作されたリュウでも、
デバッグを起動してコマ送りにすると130番または131番ステートから5000番台のステートに飛んでいることが確認できました。
inguarddistが反応するかどうかも確認してみましたが、
至近距離ではprojectileが当たってから反応がなくなるフレームが1フレームだけあるものの、
ある程度距離を離してprojectileの設置位置の前にキャラクターが来るようにしても、
130番台のステートから5000番台に行くようです。

836MUGEN名無しさん:2010/01/04(月) 13:04:26 ID:GVTrRDUY
みんなダッシュとかジャンプとかの制御どうしてる?
他の人のAI参考に自分なりに組んでみたんだけど、相手のすぐ近くでジャンプして対空食らったり相手と離れると動きが止まっちゃったりで中々うまくいかないのよ
それともこの手の質問は記述晒した方がいいのかな

837MUGEN名無しさん:2010/01/22(金) 14:41:37 ID:Bupd0Ctk
ダッシュとかジャンプってキャラによるから、
どうもこうも一概にどうしてるとはは言えないんじゃないのかね。
俺の場合は、自分で操作している時のプレイを一度デバッグ出したまま動画に撮って、
それを参考にしてるかなぁ。そんな面倒な事をしている人は他にはいないかもしれないけどw
普段操作してないキャラでもAIを作る人はよくわかんねw

838MUGEN名無しさん:2010/01/22(金) 22:31:10 ID:g59Lc6dI
自分はワンボタンで各種ジャンプをできるようにしてぎりぎり届くぐらいの距離を調べてる

839MUGEN名無しさん:2010/01/23(土) 01:49:44 ID:nAlyOAy6
>>680あたりでの話題について質問があります。
enemynear,pos x-pos xのみ でdistを使わずに距離を測るAIをつくりたいんだけど
fxm508氏ほどはvarを使わずに書きたいんですが
この場合はどうすべきでしょうか?
自分だけか知りませんがenemynear,pos x-pos xだけでは自キャラ右向き時のみしか
動かないのはどこがわるいんでしょうか?

840MUGEN名無しさん:2010/01/23(土) 09:26:44 ID:DKUmWXHE
facing*(enemynear,pos x-pos x)でおk。でもこの式ならP2Dist xと変わらないような

841MUGEN名無しさん:2010/01/23(土) 17:25:08 ID:nAlyOAy6
>>840
それか!どうもありがとう

842MUGEN名無しさん:2010/01/31(日) 02:42:32 ID:u00jhMCM
ヘルパーのリダイレクトについて色々調べてるんだがサッパリわかんない・
そもそもrootってなんですか?
ルートにリダイレクトしますって言われても意味不な状態です。

triggeall=root,inguarddistとtriggerall=inguarddist
って何が違うんですか?ヘルパーが関与していることまではわかるんですが・

843MUGEN名無しさん:2010/01/31(日) 06:32:41 ID:AZRef/fo
Root,(ルート)とはヘルパーを呼び出した大本である「本体」のキャラへのリダイレクトです。
類似としてParent,(ペアレント)というヘルパーを呼び出した「親」へのリダイレクトもあります。
違いは、本体のキャラがヘルパーAを呼び出し、ヘルパーAがヘルパーBを呼び出している場合、
ヘルパーAの親は「本体」で、ヘルパーBの親は「ヘルパーA」となり、
ヘルパーAでは Root,(本体情報) Parent,(親(本体)の情報) (どちらも一緒)
ヘルパーBでは Root,(本体情報) Parent,(親(HeA)の情報) という風な違いがでます。
これらのリダイレクトはヘルパーの処理で使うものであり、どちらも本体の処理では使えません。

ちなみにHelperは、本体のキャラとほぼ同じ量の情報を「本体とは別に」持たせることができます。
ステート処理を初め、座標位置やInGuardDistの情報も「本体とは別に」持っています。体力(Life)などは持っていませんが。
Helperのステート処理で「InGuardDist」を使った場合は「Helperの座標位置でのInGuardDist」を参照します。
またそこで「Root,InGuardDist」を使った場合は、「Root,(本体)の座標位置でのInGuardDist」を参照してくれます。
もし本体などからHelperのInGuardDistを参照したい場合は、Helper(*調べるヘルパーID番号*),InGuardDistで参照できます。
細かいことは、Helperについて調べてください。

TriggerAll=Root,InGuardDistは、【ヘルパーから見て】本体のInGuardDistがあるかどうか、
TriggerAll=InGuardDistは、【そのキャラに】InGuardDistがあるか、という違い。
ヘルパーから本体を調べたい時に使うのがroot,です。

844MUGEN名無しさん:2010/02/03(水) 16:15:22 ID:440eWaaI
[state -1] 
type=varset
triggerall=var(20)=0
trigger1=stateno=430 && time=1
var(20)=1

430の技を出した時にvar(20)に1を入れたいのですがvar(20)は0のままです。
何が考えられますか?

var(20)は使用されていないvarで他の記述もありません。

845MUGEN名無しさん:2010/02/03(水) 16:35:01 ID:3egGRTM6
>>844
その記述がどこに書いてあるかが重要なのでそいつも教えてもらいたい。
ラベルを-1にしても-1ステートで実行されるとは限らんからね。

846MUGEN名無しさん:2010/02/03(水) 20:33:21 ID:440eWaaI
statedef -1 の中の一番上です。

847MUGEN名無しさん:2010/02/03(水) 21:06:19 ID:TNV/lD4c
var(20)をデバッグ表示してコマ送り、time=○のタイミングを確認。
同じトリガーで別のステコンを動かしてみる。
トリガーを削ったり変えたりして上記を繰り返す。

くらいしか思いつかない。

848MUGEN名無しさん:2010/02/03(水) 23:08:01 ID:440eWaaI
>>847 試しに
[state -1] 
type=varset
triggerall=!var(21)
trigger1 = 1
var(21)=1

とやってもvar(21)は終始ずっとvar(21)=0の状態でした。
varの数値を変えても全部0の状態です。

デバックは
[State -1 デバッグ用]
type = DisplayToClipboard
trigger1 = 1
ignorehitpause = 1
text = " var(59) = %d var(20) = %d var(21) = %d var(5) = %d fvar(37) = %d"
params = var(59),var(20),var(21),var(5),fvar(37)

var(59)だけはちゃんと1になっていて後は条件が合っても0の状態です。

お助けです。

849MUGEN名無しさん:2010/02/03(水) 23:27:50 ID:H6/ekxYA
代入は:=じゃなかったっけ
具体的に言うと、最後をvar(21):=1にしてみるとか

850MUGEN名無しさん:2010/02/03(水) 23:32:14 ID:nGHkFHNs
Triggerにぶち込むならTrigger = Var(X):=YであってるけどVarSetならVar(X)=Yでいいよ
あと最後のFvar(37)だけど%dじゃなくて%fだよ

851MUGEN名無しさん:2010/02/03(水) 23:35:25 ID:Z3Explgo
>>844
>>848

[state -1] 
type=varset
triggerall=var(20)=0
trigger1=stateno=430 && time=1
var(20)=1

[state -1] 
type=varset
triggerall=!var(21)
trigger1 = 1
var(21)=1


これ実際に使用してる記述そのままコピーしたの?
もしそうなら[state -1]の後ろに全角スペース入ってるから
記述自体認識してないよ。

852MUGEN名無しさん:2010/02/03(水) 23:42:12 ID:H6/ekxYA
>>850
あ、そうだっけか・・・
あんまり知識ないのに口挟んでごめん

853MUGEN名無しさん:2010/02/04(木) 02:18:35 ID:VjJANLFE
>>851 おおお これだああ ありがとうございます。

てかそうなんだ 今まで一回も気にしたことなかった・・・

854MUGEN名無しさん:2010/02/05(金) 01:36:39 ID:c3A8vUAs
まあ、初歩的だけど結構気付かないミスだよ。
エラーとか出ないしね。

キャラ製作にしろAI製作にしろ全角スペースが表示される
エディターを使った方が良いかも。

ついでに強調表示も出来るやつだともっと良いね〜。

855MUGEN名無しさん:2010/02/06(土) 19:52:25 ID:sYysJUw2
サクラエディタにニシャス氏のMUGEN用のファイルを導入するのがお勧めです。
どちらもググれば出てくるはず。自分も名無しさんのところで知ったんですが。
全角スペースが赤で表示されるので非常に便利ですよ。

856MUGEN名無しさん:2010/02/09(火) 18:37:20 ID:Y6Au/C.E
「前の攻撃が地上ヒット」ってどういう条件を付ければいいんですか?

857MUGEN名無しさん:2010/02/09(火) 19:23:16 ID:ewfZWQoU
varを使っていいなら

type = varset
triggerall = var(*) = 0
trigger1 = movehit = 1
trigger1 = numtarget
trigger1 = target,stateno = 5000 || target,stateno = 5010
v = *
value = 1
ignorehitpause = 1

こんな感じかなぁ。書くのは-3ステートでいいかと。
適当なタイミングでvarを0に戻しておくのを忘れずに。

858MUGEN名無しさん:2010/02/09(火) 20:54:20 ID:FperFibI
または(enemy,Prevstateno=[5000,5010])&&(enemy,stateno=[5030,5050])

859MUGEN名無しさん:2010/02/09(火) 20:58:32 ID:FperFibI
じゃない
(enemy,Prevstateno=[5000,5010])&&enemy,movetype=H&&enemy,statetype=A
コンボルートを制御するならvar使わなきゃならんが、適当にランダム追撃させるなら
こんなもんでも行ける筈

860MUGEN名無しさん:2010/02/10(水) 22:41:17 ID:F.FOsETY
>>855
ニシャス氏のサクラエディタ支援ファイルのデッドリンク直ったんだね。
あれは便利だよなー。

861MUGEN名無しさん:2010/02/12(金) 05:31:04 ID:Fou.YX5U
お助けくだされー。
y・y氏承太郎でAIを作ってるんだども「hitpause中の任意の時間」にSoffのhelperスタンドを
発生させたいんだけどうまくいきまへん。
例えば6Bのヒットパースが10Fあるとして、その10のうちの4F目くらいにスタンド(helperで)を出して
スタンドモードオフの連携として繋げたい、
だがしかしignorehitpause絡めたTimeやamimelemtime,animetimeなどは全く違うみたいで
HitPauseまえ又はあとのTimeにhelperが出てうまくいきまへん
これは解決法ありませんかね?

862MUGEN名無しさん:2010/02/12(金) 12:56:01 ID:tbd9225M
まず人間操作でもその行動は可能?可能なら、
ignorehitpause中はtime,animelemtime,animtimeは変化しないから、
HitPauseTimeとignorehitpauseを組み合わせて使うべき。
あ、あとhitpause→ヒットポーズだと思うよ。日本だとヒットストップが普通だと思うけど。

863MUGEN名無しさん:2010/02/14(日) 06:16:51 ID:9pnWyjwg
>>862
お返事ありがとうですー
今までずっとパースと読んでいましたわ・・・恥ずかしい
操作時とその記述とで比べてみて違和感が無かったから大丈夫だと思います、
どうもありがとう

864MUGEN名無しさん:2010/02/23(火) 04:34:38 ID:ofN1Ay0s
みんな牽制技を振る距離って振ったら当たる範囲内だけにしてる?
適当にしてた距離を厳密に当たるときだけに変えたら動きが固くなった上に
なんか弱くなった気がする

865MUGEN名無しさん:2010/02/24(水) 04:54:59 ID:g5Gd3Has
>>864
誘いやラッキーHIT狙いだから当たらない距離から出してるな
特に上段小技は相手の前ジャンプ開始を潰せる間合位から、待機に戻って対空が間に合う距離位までとマチマチだな

866MUGEN名無しさん:2010/02/24(水) 12:15:19 ID:8ZuymPu6
>>864
自分は基本外さない位置で振るようにしてる。
ワンパを避ける場合は、変数使って立ち回り変化(制限)かな。

牽制間合いより外での動きを増やしたり、
間合いの中でも牽制と対になる動きを用意すると良いかも…?

以上、素人の浅知恵っす。

867864:2010/02/24(水) 17:11:37 ID:1S5bcVGM
>>865-866
返事ありがとう。なるほど、人によっていろいろ考え方があるんだな。
キャラの性能・特徴によっても変わりそうだし、やっぱそのへんはAI作者の
センスが大事なんだろうな。難しいぜ

868MUGEN名無しさん:2010/02/24(水) 22:33:43 ID:8ZuymPu6
空中にいる相手の足元の判定が薄くなるのって
どうやって見積もってる?
対空の記述にやや困難を感じる今日この頃…。

特にGGキャラの空中判定とか薄くて対応が難しい…。
ただでさえ空ダが鬱陶しいのにー。

869MUGEN名無しさん:2010/02/25(木) 00:07:35 ID:PQ7HRWtE
>>868
信頼性は低いけど、P2Dist Y+EnemyNear,Const(Size.Mid.Pos.Y)で体の中心の高さが分かる。
空中動作も地上と変わらずここを中心にしていることが多いから目安になる。
ただ相手側の設定が甘かったり、空中動作が特殊だったりすると使えないけど。

870MUGEN名無しさん:2010/02/25(木) 16:56:37 ID:VpG/nugY
相手のガードを含まない P2movetype = H ってどうすればいいんですか?
相手が確実に攻撃を食らっていることを条件にしたい

871MUGEN名無しさん:2010/02/25(木) 17:06:10 ID:Rydqg4G2
>>870
ガード関係を外したいならp2statno!=[130,155]を追加。
ロック技なんかのくらいモーションまで外したければp2stateno=[5000,5120]をかわりに追加。
一応5120番まで入れてあるけど、コモンステートを見て必要なところだけに限定した方がいいかも。
後者だとワイヤーみたいにくらい判定を残したまま吹っ飛んでる相手も対象から外れるから、
適当に調整して使ってくれれば。

872MUGEN名無しさん:2010/02/25(木) 17:26:09 ID:VpG/nugY
>>871
レスありがとうございます
やる気が湧きあがってきた

873MUGEN名無しさん:2010/02/25(木) 20:01:10 ID:EXed3xtk
>>869
その高さで当たらなかったら諦めるしかないよね。
参考になりました。ありがとう!

874MUGEN名無しさん:2010/02/26(金) 20:14:45 ID:LUP6Ye5Y
空中喰らいは地上喰らい以上にマチマチだからなぁ
mugenを一つのコンプゲーと捉えたら、喰らい判定の付け方だけは統一した方が楽で良いのになぁ
とか時々思う

875MUGEN名無しさん:2010/02/26(金) 23:52:02 ID:qpzXggs.
細かい処理の違いでAIを惑わせるキャラって結構いるよね。
つい嫌なキャラだなあと思っちゃうけど、AI戦ありきでキャラ作るわけでもないんだし仕方ないよね。
むしろAI作る側のアイデアが試される…ってことにしてがんばろ。

876MUGEN名無しさん:2010/02/27(土) 12:56:45 ID:iZ.Nyp1c
>>875
デフォAI積んでるのにcnsの不備が原因で同キャラ戦が残念なことになってて
なんとも言えない気持ちになることが割とあるから困る。
自分の作ったキャラのテストの過程で同キャラ戦はあんまりやらないものなのかなぁ・・・。

877MUGEN名無しさん:2010/02/27(土) 17:50:13 ID:HHvXdmJ2
AIに起き上がり時間短縮をさせたいのですがどうすればいいのでしょうか?
地味にAI作成講座とかに載ってなくて困ってます。

878MUGEN名無しさん:2010/02/27(土) 18:53:14 ID:R/VDCvbE
>>877
起き上がり時間短縮とは、5110→5120を何もしないより早く行わせることです。
つまり、単なる5110→5120のchangestateで実現されます。
あとは分かるよね?

879MUGEN名無しさん:2010/02/27(土) 19:14:36 ID:1t7bqLOI
>>877
どのゲームモードでの事なのか
トレモのP1や操作のVSモードでAI起動したら起き上がり短縮しないよ
CPUがコマンド入力して無いからdate通りの時間でしか起き上がれない
watchはランダムだけど
デフォcommonだと起き上がるまでが短いと落下したら完全無敵になってダウン追撃技が一切入らなくなるから、
その辺は考慮すべし
起き上がりまで短くても落下→バウンド→再落下までの無敵を無くしたいなら、
commonか-2で非無敵設定するしかない

880MUGEN名無しさん:2010/02/28(日) 20:36:55 ID:RJGF2bf.
>>878-879
どうもありがとうございます。
ダウン追撃とかも実際に試して調整しつつやってみます。

881MUGEN名無しさん:2010/03/01(月) 23:28:54 ID:aGZ8osQg
>>880
俺が自分のキャラのcommonでやってる記述はこんな感じ
Gal129さんのサイトで紹介されてた記述の改変だけど
まず[statedef 5110]に

[State 5110, ダウン時間の計測開始]
type = varSet
triggerall = var(59) > 0
trigger1 = Time = 0
trigger1 = prevstateno ! =5120 ;起き上がりステートから戻された時以外
var(16) = 0

[State 5110, ダウン時間の経過]
type = varAdd
triggerall = var(59) > 0
trigger1 = time >=0
var(16) = 1

[state 5110,一定時間経過後に起き上がりステートへ飛ぶ]
type = ChangeState
triggerall = var(59) > 0
trigger1 = alive
trigger1 = var(16) >= 45 ;←「45」はダウンさせたい時間
trigger1 = anim = 5110
value = 5120

上の記述を追加

882881:2010/03/01(月) 23:34:47 ID:aGZ8osQg
それから[Statedef 5120]に

[state 5120, 起き上がり禁止]
type = ChangeState
triggerall = var(59) > 0
trigger1 = var(16) < 45 ;ダウン時間が経過していないとき
value = 5110 ;ダウンステートに戻す

上の記述を追加して、
[statedef 5120]内のchangeanimのトリガーに

triggerall = var(16)>= ifelse(var(59) > 0,45,0) ;「45」はダウン時間
triggerall = anim != 5120

を追加してやればおk、だと思う

883MUGEN名無しさん:2010/03/03(水) 03:08:51 ID:cZF9PL9Y
ダレモイナイ、シツモンスルナライマノウチ

本体側の変数を極力使わずに、相手の投げ技をくらったことを認識する方法を探しています。
ヒットストップが存在する攻撃なら、ignorehitpauseを有効にしたステコンで
movehitとhitdefattrを使えばいいのですが・・・。
ちなみに、本体側は厳しいですが、helper側の変数は複数個準備できます。

884MUGEN名無しさん:2010/03/03(水) 08:54:12 ID:7s3MTjsk
攻撃属性は多分、hitdefが有効な間しか参照できないと思うから、
厳密に投げ技を認識〜ってのは難しそうだね。
ただ、投げ技は殆どがステート奪うと思うから、ヘルパー側と本体側の-1か-3で変数を1Fに1ずつ増やしてって、
その値にズレが生じたら、ステート奪われてる(投げ技っぽい)と判断することは可能。
もう考え済みだったらスマソ

885MUGEN名無しさん:2010/03/03(水) 17:56:31 ID:2Ofl1tAw
>>883

投げは即ステを飛ばすのが殆どで、movehitは無理な気がする。
本体-3で
var(n)=gametime
となるvar(n)を用意して、
var(n)<gametime
の時にステートを奪われていると判定。

投げが来た事を判定するために、
type=varset
trigger1= enemynear,hitdefattr=SCA,AT
var(/)= enemynear,stateno
として
enemynear,prevstateno=var(/)
を条件にreversaldefと判別かな?
gametime格納以外はヘルパー変数でOK。

ヘルパーのステート内で判定するならリダイレクトをお忘れなく。

886MUGEN名無しさん:2010/03/03(水) 19:40:19 ID:2G8UHOaA
知っているか、ひとつのプレイヤーが使える変数は105個ある

相手も即ステ飛ぶんだからHitDefAttrなんて食らってから参照しても空だろう
当身だったらMoveReversedが有効になってるはずだからそれ見たほうがいいと思う

[Statedef -3]
[State -3]
Type = VarSet
Trigger1 = 1
var(*) = -1

[Statedef -2]
[State -2]
Type = VarSet
Trigger1 = 1
var(*) = ifelse(var(*) = -1, 0, 1)

これが俺が使ってる記述
ステート奪われたら-3ステートが飛ばされて、-2ステートに0が返ってくるからそのときだけ1になる
最速で検出判断するなら-1でAI組むのがいいかな

887MUGEN名無しさん:2010/03/03(水) 20:47:09 ID:2Ofl1tAw
>>886
hitdefattrは投げを喰らう前から参照するんじゃよ。
それとmovereversedもmovecontactと同じで、直接飛ばされると無力だったような。

888MUGEN名無しさん:2010/03/03(水) 20:53:49 ID:0HdVOWh.
発想を変えてMoveType=Hになった時、MoveContact等を参照して「無い」場合を目安にするとか。
飛び道具の場合もあるから、あらかじめHitdefAttrが投げ技である事をVarで記録しつつ、
自分のステートが奪われていることや、相手のNumTargetを確認するとか。
Trigger1 = 1|| Var(11):=(Enemy,MoveContact=0 && MoveType = H && Enemy,NumTarget && Var(12))
Trigger1 = Enemy,Time = 1
Trigger1 = 1|| Var(12):=(Enemy,HitDefAttr= SCA,NT,ST,HT)
一瞬しか察知できない上、誤作動しそう。
HitPauseがある投げ技は、別にMoveHitで確認しちゃうとか。

889MUGEN名無しさん:2010/03/03(水) 22:05:41 ID:2G8UHOaA
>>887
MUGENの基本的な慣例だとAirに判定が出るのと同時にHitDef出すから
一般的には持続が当たらない限り感知できないよ
1Fしか判定のない通常投げは食らったら事実上感知不可能、スカしたなら学習はできるだろうけど
2Pだとコンパネ差で感知できるとかできないとか聞くけどどっちみち限定的すぎる
Moveなんとかは飛ばされても最初の1Fだけは感知できた気がするが・・・はっきり覚えていない
まあでもTargetStateで飛ばすタイプで判定直後に先に飛ばされたら消えそうだな

>>888
実は投げもMoveContactは発生する
それでいっぺん困ったことあるから間違いない
あとHitPause中に、それに関わったどっちかがステート変わるとその時点でHitPauseが切れる
だから即ステート移行する普通の投げにHitPauseはない
これも困ったんだよ・・・

890MUGEN名無しさん:2010/03/03(水) 22:23:15 ID:2Ofl1tAw
>>889
enemynear,hitdefattr=SCA,NT
を条件に投げ回避とかできるし、普通に感知できるはずよ。
回避行動のchangestateがvarsetに変わると考えればわかると思う。
自分のAIでは書き込んだシステムによる学習もしてる(デバッグで動作確認済み)から、
機能すると思う。

891MUGEN名無しさん:2010/03/03(水) 23:03:47 ID:BPq2HWtc
>>890
試してみたが、2Pは反応するが1Pはダメだった
やっぱり1Pが先出しで、あとからHitDef出されると次にターン回ってくる前に接触判定完了して対応できない
機能してるってのは搭載したのを2Pにおいて試してるからじゃないか?
まぁ普通に人操作で挑むためのAIとしてなら十分だ

892MUGEN名無しさん:2010/03/03(水) 23:16:05 ID:BPq2HWtc
ああ、処理順が後になるヘルパーなら1P側でも感知はできるか
できたところでその場で本体の行動は変えられないな(多分やりようはあるけどかなりのインチキ)
一般的な通常投げは0F発生=ChangeStateと同時だからステート覚えてもやっぱり1Pは対応できない
せいぜい投げ間合い覚えて立ち入らないようにする程度かな

893MUGEN名無しさん:2010/03/03(水) 23:42:34 ID:2Ofl1tAw
>>893
確かに0F投げだと1P側は回避できないね。
学習はできてたけど、0F相手じゃ使い道が乏しいなw
GG相手で投げをやたら喰らうなあとは思っていたが…。
自キャラが投げ2Fなもので気付かんかった。
ありがとう!

894883:2010/03/04(木) 01:33:44 ID:dJF3iG8o
皆さんありがとうございました。
すでに当身検知は積んであるので、それの応用でなんとかなりそうですね。

さて、ほとんどの投げが0F投げのうちのキャラはどうしよう・・・ (´・ω・`)
幸い最大火力の技は0F発生ではないのでhitdefだけを先に実行して
相手に逃げてもらえるようにしてあるんですが・・・。

895MUGEN名無しさん:2010/03/09(火) 19:20:35 ID:UTT/fxi.
fvarの小数点以下が安定しないんだけどいい方法ないかな?

896MUGEN名無しさん:2010/03/11(木) 02:56:54 ID:rmlphzcw
Fvarは使っている桁数や整数側(小数点より上)が大きいと下側の数値が不安定になる。
対処法としては大きい整数を使わないとか、整数を使う場合小数点以下を使わないとか。
ただそれ以外のことについては分からないから、原因が合ってるか分からないけど。

897MUGEN名無しさん:2010/03/18(木) 18:53:40 ID:hI2DZvdY
起き上がりに飛び道具を完全に重ねるとAIが全然ガードしないんだけどガードさせるように出来ないかな・・・

898MUGEN名無しさん:2010/03/18(木) 19:19:57 ID:eGwx7bH6
>>897
飛び道具側の軸位置を当たり判定の後ろに置いてやればガードするようになるはず。
ただそれだけだとattackdistとgurad.distが足りなくなるかもしれんね。
細かい話はmugenwikiの豆知識を読めばいいと思う。

899MUGEN名無しさん:2010/03/19(金) 14:23:51 ID:c5fwVN7c
>>897
飛び道具の横のデカさによってはそれも逆にガード出来なくなるけどね
遠距離からのレーザー系がAIにとって鬼門なのって、inguarddist入る前に赤判定がHITするからじゃなかったっけ?

900MUGEN名無しさん:2010/03/19(金) 14:24:39 ID:c5fwVN7c
アンカミス>898ね

901MUGEN名無しさん:2010/03/19(金) 22:23:12 ID:yff92zNI
>>887
inguarddistにならなくてガードしないってことかな?
ブロッキングみたいなシステムがあれば楽なのにね…。
自分より後ろにヘルパー置いて、
ヘルパーのinguarddistでガード、ガード解除を管理するとか?

>>889
ヘルパーの処理順はプレイヤーより後ろで、
ヘルパーが出現して即当たり判定、かつ当たる位置だと、
次のフレームで対処する前にヒット(フレーム内最後の処理)してしまうって感じかね?

902MUGEN名無しさん:2010/03/19(金) 22:26:04 ID:yff92zNI
両方安価ミスとか…
>>897
>>899
ビームは対処が難しいなあ…。

903MUGEN名無しさん:2010/03/20(土) 00:27:08 ID:ATs5WO8E
>>902
ビームがあってもキャラクターがAI戦を考慮に入れて作られていれば
AI側は何も考えなくてもinguraddistだけで十分対応できるんだけどなぁ。
実際time=0で当たり判定をつけてても、本体の方のステートでattackdistを設定しておけば
ビームの溜め動作に入った時点でinguraddistを反応させられるからね。

904MUGEN名無しさん:2010/03/20(土) 10:31:17 ID:bL4V3L6Y
初歩的な質問で申し訳無いんだが、
あるステートに移行した瞬間に発動する条件を付けるとしたら
animelem=1とtime=0どちらでもいいのかな?

905MUGEN名無しさん:2010/03/20(土) 19:56:40 ID:ATs5WO8E
本体用のステートでやってるなら普通は大丈夫。
ただステート内でchangeanimをかけてる場合はanim指定もかけておかないと暴発するし、
ヘルパーのステートだとanimを指定しない場合もあったりするんで、特に理由がなければtime=0でいいと思う。

906MUGEN名無しさん:2010/03/20(土) 21:31:39 ID:6Fg.JCw2
>>903
inguarddistだけではガードさせてないからなあ。
リダイレクトで飛び物の位置を確認して、
近くに来てからガードさせるのでビームの対処はめんどいのだ。
射出前にガードするのは学習してからなんだけど、
学習させるにも、まず一回は喰らってしまう。

907MUGEN名無しさん:2010/03/21(日) 13:01:03 ID:u56IKCDU
>>904
>>905
たぶん必要ない補足だけど、Time=0の条件を使う場所が-3,-2,-1ステートの場合、
Time=0は基本「そのフレーム中にChangeStateが行われた」と「攻撃を受けた」状態だけだから注意。
-3ステートではほぼ「Ctrlによる基本操作のChangeStateが行われた」と「攻撃を受けた」状態のみ。
-2ステートでは、それに加えて直前の-3ステートのChangeState処理でも、Time=0になる。
-1ステートなら、-3,-2のそれらも加えて直前の-2ステートのChangeState処理も。
これらのステートで「前のフレームで入った直後」の条件ならTime=1。CtrlがあるならTime<2か。

もちろん通常の番号ステート処理中なら、そのステートに入った時に発動する条件としてTime=0は使える。

908MUGEN名無しさん:2010/03/21(日) 19:23:35 ID:XQ.zd4VQ
コマンド条件にstateno = 235 && movehitてあった場合って
stateno = 235 && movehit = 1やstateno = 235 && movehit = 2って
のは可能?不可能?

909MUGEN名無しさん:2010/03/22(月) 13:00:30 ID:vbyb5/Ws
Time=0は「ChangeState直後」で「フレーム経過前」のみ補足できる条件
処理順の都合から、-3ステートでは基本的に補足できない
自分より処理の早い別プレイヤーのものなら補足できる(=1P本体では補足できない)
-2なら-3で、-1なら-3と-2で行われたChangeStateのものが補足できるが
そもそも-3や-2でChangeStateするのは推奨されない(-3にAI記述をするのはよくあるが)
該当する実態ステートで拾うのが確実

>>908
stateno = 235 && movehitは
stateno = 235 && movehit > 0と同じ意味よ。あとは・・・わかるな?
ちなみにMoveHitはヒットしてからの経過時間だというのはわかってるよな?

910MUGEN名無しさん:2010/03/22(月) 22:58:56 ID:fgvamUEI
>>909
-2ステートは論外だけど-3ステートのchangestateって何か問題あったっけ?
-2ステートでキャラクター用の内部処理をしてて、
それを反映して動かしたいならもちろん-1ステートですることになるけど。

911MUGEN名無しさん:2010/03/29(月) 17:58:02 ID:wGfBL/4Q
AIを作ってみようかと思い、色んな初心者向けサイトを回ってみたんだけど、その内容すら理解できない
まず最初に何を見ればいいんだろう。自分がアホすぎて泣けてきた

912MUGEN名無しさん:2010/03/29(月) 22:31:56 ID:nSRYtgTE
>>911
①そもそもAIとは、キャラをどんな制御方法で「操作とは別の挙動」として制御しているのか
②ではその制御方法、つまり動作指示はどうやって判断され「今出すのはコレだ」と決定され、行動という結果を返すのか
これが判んなきゃ、先にその仕組みの流れその物を理解するしかない

AI説明書だけを見るのじゃなくて、AI記述の少ない実際のAI記述やトリガー一覧を併用して見ながら
学べ、
そうすれば最初は漠然とした状態でも、徐々に理解出来ていく

913MUGEN名無しさん:2010/03/29(月) 23:49:26 ID:yDujAJmU
canrecoverを無視して受け身をとってくる相手にコンボルートを変えるようと思って
こんな方法を考えてみたんだが、抜けなんかがあったら教えてもらえないだろうか。

fall.recover=0の攻撃を当てた相手が5050番ステートに入ったらvarに適当な数字を入れておいて、
5050番ステートから5100番ステート以外のステートに入ったら
コンボルート変更用の数字をさっきのvarに代入。
一応バーストで作動させないためにenemy,movetype!=Aと
アルカナに反応しないようにpause検知はかけるつもりなんだけども・・・。

タッグ戦とくらい抜け常備のキャラは無視。さすがにこれは手に負えん。


>>911
平成センチ氏のAI説明書ベースのAIの実物を探して見ていくといいよ。
最近はヘルパーリダイレクトが込み入ってて作った本人以外は把握するのが大変なAIが多いから、
2008年あたりに更新された少し古めのAIの方がいいと思う。

914MUGEN名無しさん:2010/03/30(火) 00:11:25 ID:yFmrgGuI
受身した時は大抵52nn番のステートに飛ぶから
監査スイッチ始動>相手が条件を無視して52nn番に飛ぶのを確認>変更用スイッチON
で良いと思う

915MUGEN名無しさん:2010/03/30(火) 00:27:27 ID:UoUt9XVg
>>914
それも考えたんだが、有名どころの人が5000番台以外に飛ばしてたりするんで・・・。
まぁ単純に汎用性を確保した方がいいかなと思う節もあるんで、statenoの限定はできれば避けたい。
素直にp2name使えって突っ込みはなしで。

916MUGEN名無しさん:2010/03/30(火) 12:30:23 ID:Dhu3DD1s
俺はもう完全に最初の頃はコピペだったなぁ
技のステート覚えて後は全部コピペ 説明書や他AIからな

てか実際作ってみんとわからんよ
読んだだけで理解する人は俺は凄いと思う

てかAI作ってもう1年以上立つけど今だに説明書の切り返しの(!time&&var(59)>9)の意味が今だに理解していないというww
これってどんな状況なんだ?

917MUGEN名無しさん:2010/03/30(火) 13:05:54 ID:iM6SJJNQ
var(59)がAIレベルなら、AIレベル10以上かつtime=0……かな?

918MUGEN名無しさん:2010/03/30(火) 14:17:58 ID:Dhu3DD1s
>>917それはわかるんだけどctrlが条件でtime=0の時ってどんな時かなぁって?

919MUGEN名無しさん:2010/03/30(火) 15:32:31 ID:UoUt9XVg
>>918
常時監視ステートで自分自身のtime=0はまず成立しないはずだから、あのトリガーは無意味になってる。
氏のAI説明書は他にも色々実情にそぐわないところがあって、
例えばカウンターヒットの調節のためにstatetypesetでmovetypeを切り替えてるキャラには
切り返しのトリガーが全く機能しないし、enemynear,ctrlはAI用の歩きステートなんかがあるから
anim指定とセットで使わないと誤作動を起こすこともある。
まあ説明書の最終更新が2007年の年末だし、センチ氏も作り直したいらしいけどね。

920MUGEN名無しさん:2010/03/30(火) 16:56:25 ID:wiuBFh.A
>>919
俺もアレは無意味なのかなと思っていたが、
どうやら有効になってる時があるらしい。
少なくともレベル10でも超反応で出してくることはある。
ゲージのあるジョニーとかわかりやすい。
多分ガードステートとか歩きとかの、mugen本体側が行うChangeState
の場合だと思われ。

921MUGEN名無しさん:2010/03/30(火) 17:55:44 ID:UoUt9XVg
>>920
試しにtime=0とctrlだけをトリガーにして超必を使わせたらえらいことになったでござる。
watchモードだとステートの終わりにanimtime=0でctrlに戻したフレームの直後でほぼ確実に作動するし、
そうじゃなくてもガード硬直が解けた直後がtime=0かつctrl=1になってるみたいでこっちも垂れ流しになった。
これだけひどいと実ステートじゃなくて-3ステートの方で
ランダムの歩きステートをニュートラルに戻したくなるなぁ・・・。

922MUGEN名無しさん:2010/04/02(金) 21:12:47 ID:LYavEECU
なぁ…ルーシー(首チョンパの方)のAIって需要あると思う?

923MUGEN名無しさん:2010/04/04(日) 01:11:25 ID:AJ5fXhKo
自分が作りたいとか欲しいってだけで十分需要あるだろ
世間の需要は気にするな
単に自分のAIを使って欲しいってだけなら
AI無いキャラやインフレに置いてかれてるキャラ探して作れば良い

924MUGEN名無しさん:2010/04/04(日) 15:03:52 ID:tMwoBIMA
まぁ作りたいキャラが一番だな

ただ初心者だと空中での目押しを多様するアークキャラ等は少し厳しいかもな

925MUGEN名無しさん:2010/04/04(日) 15:08:51 ID:Ze/dUvxQ
>>923
そうか…どの動画見てもルーシー強いとは言えないんだよな…
今作ってるのでバルバトスの鋼体(20は無理)を倒したんだがどれくらいの強さなのかがなぁ

あと二トロワのエインのGEPARD-M1とかドラゴンのダンシズ&ドラゴンズとかp2stateとp2name,p2statetype
使ってもガードの反応が間に合わないんだがこれって普通なのか?

926MUGEN名無しさん:2010/04/05(月) 00:32:12 ID:8vgOmV/M
>>925
そのへんのキャラのcnsを見たわけじゃないんだがpause実行中に当たり判定出してるとかじゃないの。
暗転後にガードが間に合わないって仕様を再現するためにそうしてることがあるけど、
AIじゃ基本的にどうしようもない。

927MUGEN名無しさん:2010/04/05(月) 11:24:21 ID:ujU6kOmI
ガードといえばガード全般の前提条件(ガード可能条件)ってみんなはどうしてる?
StateType=A && MoveType = A(空中攻撃動作中)はCtrlがあってもガードできないとか、
StateType=C && MoveType = A(屈み攻撃動作中)もCtrlありでもガード始動不可で、
StateType=S && MoveType = A(立ち攻撃動作中)はCtrlがあればガード始動可能だから
ガード中に屈むことは可能だとか。Movetype=AでCtrlがある事自体珍しいんだけど、
ただ空中では攻撃後にCtrlが戻るのはよくあるから、
この辺り気をつけてるのか知りたいんだが。
大体前提条件はCtrl&&InGuardDistとStatetypeだけ?

928MUGEN名無しさん:2010/04/05(月) 15:53:06 ID:8vgOmV/M
>>927
いまひとつ状況が飲み込めないんだが・・・。
movetype=Aでctrlが入るってことは、攻撃後の硬直を任意の行動でキャンセルできるってことだよな?
それなら別にガードできても問題ないんじゃないの。
逆にガードしたらまずいようならctrlを戻すこと自体おかしくて、硬直キャンセル扱いにした方がいい。
ついでに空中で複数回攻撃できるキャラなら、
ctrlを戻すときに普通の落下モーションにchangestateした方が自然な気がする。

929MUGEN名無しさん:2010/04/05(月) 17:39:00 ID:ujU6kOmI
>>928
滞空が長めのキャラのジャンプ弱攻撃とかで落下ステートへ移行せずに、
同じステートでCtrlだけ戻してMoveTypeはAのままな場合が多いから、
そのせいで Ctrl && StateType=A && Movetype=A はよく起こるのよ。
Statetype=Cの例はKFMの屈み弱パンチ(2X)がある。

で問題は、手操作だと(StateType!=S && MoveType=A)はガードできないみたいで、
手操作にできない動作だからガードさせると僅かながら性能改変になるんだけど、
その状態でガードさせないよう気をつけてるかどうかって話。
ガードできない方が手違いなのかもしれないけれども。

930MUGEN名無しさん:2010/04/05(月) 18:06:31 ID:ujU6kOmI
ごめん、ガードの調べ方がおかしかった。
詳しく調べたら、Movetype=Aはガードできない。StateType関係ないや。

931MUGEN名無しさん:2010/04/11(日) 00:31:30 ID:yiuyMchU
相手の食らい時間ってどう取ればいいんだっけ

932MUGEN名無しさん:2010/04/11(日) 17:17:35 ID:T1.b.14.
>>931
厨忍氏のところに行ってらっしゃい

933MUGEN名無しさん:2010/04/11(日) 17:54:23 ID:KKg1v3bA
どっかで見たと思ったら厨忍氏のとこか
頭から抜けてた、ありがとう

934MUGEN名無しさん:2010/04/19(月) 02:15:14 ID:h/5PHNtU
AI作ってるのですが、下記ステコンは以下の解釈でよろしいでしょうか?

[State -3, 起き攻め]
type = ChangeState
trigger1 = var(55) = 100 ;var55が100であれば可
trigger1 = ProjHit1120 = 1 ;割愛
trigger1 = stateno = 1120 && time = [38,46] ステート1120中で1120が38〜46フレームの間
trigger1 = var(55) := 101 ;var55に101を代入する
value = 110

一番聞きたいのが下記の部分で
trigger1 = var(55) := 101 ;var55に101を代入する

これは上記ステートを実行した時に(110に飛んだ時)のみvar55に101を代入するという事でよろしいでしょうか?

935MUGEN名無しさん:2010/04/19(月) 23:10:39 ID:pvSFVePU
>>934
このステコンならそれで大丈夫。

936MUGEN名無しさん:2010/04/20(火) 20:34:01 ID:NH4.JKl.
サンクス

何か知らんがこのステートに入ってないのに代入するんで確認したかった。

937MUGEN名無しさん:2010/04/27(火) 17:09:27 ID:PIyG1MiY
当たっても相手になにも影響がないヘルパー式の飛び道具ってできるかな?
相手の高さや当たり判定を調べるのに役立ちそうなんだが・・・・

938MUGEN名無しさん:2010/04/27(火) 22:24:59 ID:1Q6M9YnY
>>937
相手が仰け反りモーションを取らないようにgroundtypeをnoneにした時点で
なぜかmovecontactが反応しなくなるんでやっぱり無理っぽい。
まぁできてたら一気に広まってるだろうしなぁ。

これだけじゃなんなので話題を
パートナーのターゲットのplayeridを取得する方法って何かないかな?
複数ターゲットを取った状態でランダムに選ばれそうなときは
partner,numtargetで処理するから別に構わないんだが、
何も考えずにpartner,target,idなんて入れたら案の定エラーを返されたでござる。

939MUGEN名無しさん:2010/04/28(水) 09:46:22 ID:U7UpEgJU
あらかじめ敵二人のIDを取得しといて、partner,numtargetが反応したら、喰らい状態の敵のIDを採用。
喰らい状態の敵が二人いるなら、partnerに近い敵のIDか自分の攻撃が当たってない敵のIDを採用、これで、できる・・・・かな?

940MUGEN名無しさん:2010/05/02(日) 02:52:40 ID:t5DfBYd.
未だ実装してるキャラが少なくて
キャラが強くなるために必要な情報っていうのはあるのかな
自分の攻撃の当たったガードされた狩られた当たらなかったとかかな

941MUGEN名無しさん:2010/05/02(日) 19:52:43 ID:JNHmK4.s
コンボ用超必殺技のトリガーで
TriggerAll = P2MoveType = H
TriggerAll = P2StateNo != [120,155]
としてるんですが、
これだとブロッキングにも反応してしまい困っています。

直前のコンボパーツが飛び道具だったりもするのでMoveHitも使えない状態です。
やられステートを全部書き込むのも考えましたが効率が良くなさそうなので・・・

942MUGEN名無しさん:2010/05/02(日) 20:33:44 ID:4TFdGRWo
>>941
飛び道具がhitdefかProjかでmovehitとProjHitTimeを使い分ける必要あるんだがそこはおkなのかと

943MUGEN名無しさん:2010/05/02(日) 21:15:34 ID:s4OwvAQM
>>941
相手に当たったことを確認するためなら、
飛び道具の判定がprojectileならprojhittimeでいいし、
helperのhitdefで相手に当たった後1フレームでも残るなら
helper(*),numtargetを使えばいいはず。
つかブロの判断だけなら5000〜5099までを外すだけでいいような。


話は変わるんだけども

trigger1 = enemy,time=0
trigger1 = enemy,stateno=130
trigger1 = enemy,command!=holdback
ignorehitpause=1

こんなトリガーで相手がAIと判定できないかと思ってるんだけど、
ステート奪ってない状態でcommandをトリガーに使っちゃって大丈夫だろうか。
一応kfmのcmdファイルにはholdbackのところにdo not removeと書いてあるんだけど・・・。

944MUGEN名無しさん:2010/05/03(月) 20:16:58 ID:zT0a3MEs
>>941 >>942
返答ありがとうございます
projhittimeは使った事がありませんでした

質問してから気付いたんですがキャラ本体のコンボ補正用の変数の監視で解決できました

945MUGEN名無しさん:2010/05/06(木) 02:01:37 ID:7mX1yZ/M
AIって行動の優先順位とか動き選びとかその辺が実は一番難しいよね
キャラは違うけど自分のAIより良く動いて強いあるAIの中身のぞいてみたら
少ない記述量とほぼ基本的な記述だけで構成されてて驚いた
操作上手い人間というかガチ系のプレイヤーは記述のレベル云々では無く基本的なセンスが違うのね

946MUGEN名無しさん:2010/05/06(木) 12:26:28 ID:4i2dCkfg
>>945
自分でも耳の痛い話、
AIってほとんどAI制作者の格闘ゲームの思考で構成されてるから、
効果的な動作が分かっているのと分かっていないのとでは全く違うよね。
ただ記述量に関して言えば動作や条件を無闇に増やしたり少なくしたりすると
状況が限定されすぎてむしろ悪くなることだってありうるから、
そこら辺は格闘ゲームの思考に加えて記述の技術にも寄ると思う。
記述や動作が的確でさえあれば多くても少なめでも良いAIにできるだろうし、
見当違いだと多かろうが少なかろうが動きは悪くなるだろうし・・・

でも的確な記述だとか効果的な動作だとかはもう、とにかく
たくさん見て使って書いて試して研究するしかないから難しい。
ほんとに難しい。

>>943
Commandに関してちょっと確認してみた所、
敵リダイレクトのCommandはステートを奪ってないと一切反応しないみたい。
ステートを奪われてても自分側のCommandは反応するのに・・・

947MUGEN名無しさん:2010/05/07(金) 16:15:54 ID:GL2yEMVs
強AIとかみるとステート200未満の記述がすごかったりすること多いよな

空中ダッシュやたかがジャンプだけで25くらいまでトリガーあった人とかいるもん

948MUGEN名無しさん:2010/05/08(土) 23:47:36 ID:NGJIfpIo
本体(エフェクト除く)スプライトの無断改変は厳禁とさせていただきますm(_ _)m
音声は危険なので止めた方が無難。
居ないと思うけど一応。

転載・改変についてのキャラ作者による記述
これってCNSについては、あくまで禁止はしないって解釈でいいんだろうか?
個人的にはそう見えるんだが・・・どう思う?
製作者は逝ってしまわれた、誰かに背中押してほしくて書いてみてる

949MUGEN名無しさん:2010/05/09(日) 15:35:57 ID:6bc01ESE
俺ならやめとく

950名無しさん:2010/05/09(日) 21:56:11 ID:T4QQoMA2
>>948
見覚えあるなそれ、多分曰くつきのオリキャラ2体と予想
ただの自作キャラへのCNS転用ならOKだと思うけど、
だからって外部AIパッチのリリースまで無断でOKとは行かないなと思って俺は諦めた
前者なら良いんじゃね?

951MUGEN名無しさん:2010/05/10(月) 01:38:32 ID:4lZmjZu.
pkrs氏が以前ブログに飛び道具検知方法を載せてたけど、今消されちゃってる・・・?

952MUGEN名無しさん:2010/05/10(月) 01:48:23 ID:TvzuF.uc
>>951
慌てて見に行ったらなくなってたでござる。
厨忍氏方式は飛び道具1個にどう対応するかって記述が中心だから、
相手が複数個飛び道具出してくるときついんだよなぁ。
つか瞬獄殺対策も消えてるのか、ゲージ技認識に使おうと思ってたのに・・・。

953MUGEN名無しさん:2010/05/10(月) 03:26:39 ID:4lZmjZu.
>>952
やっぱり消されちゃってるのか。
参考にしたかったんだけどなぁ…。

954MUGEN名無しさん:2010/05/11(火) 13:09:02 ID:vaE99k8E
>>949
>>950多分正解
禁止はされてなかったけど、万が一作者から苦情がきたらすぐ消す
としておけば問題はまず起こらない・・・んだろうが・・・
・・・そうか、諦めて他の奴作っとくよ

>>953
メールしてみればいいじゃないか、もしくはpks氏の記述を覗くとか

955MUGEN名無しさん:2010/05/13(木) 21:37:07 ID:p4ljQlIo
>複数飛び道具
飛び道具対応の記述をループステート化すればいいんじゃないのー?

956AIについて:2010/05/14(金) 02:45:23 ID:.PU65E6w
元ギルティ勢で、一週間前にオMUGENダウンロードして始めてみたんですけど
AIがガード固すぎてなんも喰らってくれなくてまともな対戦になりません(立ち回り時・起き攻め時同様)
何とか攻撃を喰らってくれるように出来ないでしょうか?

以下に状況を纏めてみますので少しでも解決案をいただけたら幸いです

使用キャラは大体ソルです。ギルティ原作の方ではメインがソルだったのでMUGENでもソルメインでやってます。
性能についてはMUGEN始めたばかりなのでよく分かりませんが多分青リロの時のやつだと思います。

立ち回り:ソルの基本攻めの一つであるガンフレ青しつつ走ってラッシュに入りますが殆どガード崩れません。ぶっきらで投げようとすると必ず暴れられて
逆に小Pコンボに持ってかれます(キャラによっては、こっからフルコン貰うし)
暴れ潰しは当然100%ガードされます。ディレイ攻撃も全く通じません。
起き攻め:基本的にガンフレ青を重ねてリバサを防止しつつジャンプからのn択を迫りますが全部ガードされます。
前述しましたがぶっきらは全く通りません。起き上がりにヴォルカRCorぶっきらの二択を迫っても絶対ガードされます。
生でジャンプからのn択を迫ってもこれも通りません。
ダウン奪った後、ジャンプ飛び越しからのバックダッシュDor着地下段の表裏二択も通りません。
ちなみにバーストも確定バーストでない限りほぼ100%ガードされます。

とまあ大体こんな感じです。私自身MUGENに関しては全然初心者なので、この中でもし何か間違っていたり抜けていたりするところが
あったら遠慮なく指摘してください。

957MUGEN名無しさん:2010/05/14(金) 04:28:50 ID:2Q0pOAjI
>>956
自分操作vsAIの話なら他所へ逝け

958956:2010/05/14(金) 14:01:23 ID:.PU65E6w
>>957さん
すみません。ご指示通り他を当たってみます

959MUGEN名無しさん:2010/05/14(金) 21:00:41 ID:fIht4LWs
>>956
うんこマンの動画でも見てみるといいんじゃないだろうか
なんとなく超反応AIとの戦い方がわかると思う
AIの穴的な部分が多く出るからAI組む上でもそこそこ参考になるよ

960MUGEN名無しさん:2010/05/15(土) 09:37:19 ID:GIY/EI0Q
っというか対人用AIでも探すか
AIレベル落とすか
いっそその強固なガードを崩すことに集中するかすればいいんじゃないか

961MUGEN名無しさん:2010/05/15(土) 10:52:09 ID:9fNMiYY2
勝手に崩れるAIならいざ知らず、ガードを崩せるAIって作るの大変よ。
ガチガチに固める方が頭を使うのと他の人のガード記述を参考にするだけでいいからはるかに楽。
崩しに対してちゃんと崩れるための記述は、他人が見てもわからんのじゃないかなぁ。

962MUGEN名無しさん:2010/05/16(日) 11:13:02 ID:8kw4ZZ8A
めくりに対して崩れる様にするには、単純に人と同じく
めくられた瞬間にrandom0,500ガードにすればいいのかね
めくられて数フレーム余裕があったら0,800くらいか?
いずれにしてもめんどくさいな、うまい具合に崩れるAI

963MUGEN名無しさん:2010/05/16(日) 11:30:33 ID:Cw2m33O2
>>962
ガードからニュートラルに戻す記述を組まない限り、
randomで1/2にしても5フレームあったら1/32でしか通らんよ。
めくりだから当たり判定がぶつかる前にhitdefが実行されてる可能性も考えると
ガード条件にenemynear,hitdefattr=A,**なんてのを仕込んでも1/2になるとは限らない。
つかそもそもめくりは裏表の二択になってるわけだから
相手が表にいるときもガードする確率を落とした方がそれっぽくなるわけだけど、
二択の表落ちと普通の飛び込みを区別してやらないと
今度は普通の飛び込みがやたら通ることになる。

まぁ最後はどこまでやるかだと思う。やり出したら本気できりがない。

964MUGEN名無しさん:2010/05/16(日) 12:39:42 ID:LLfs3gMw
予め大雑把にでも軌道計算して、変数管理とか?

965MUGEN名無しさん:2010/05/16(日) 14:01:57 ID:y.UGSwM.
>>962
めくられなら P2Dist X = [-10,5] の時ガードしにくいよう調整するとか。
これなら「自分が振り向くかどうかの位置」だから、らしいと思う。
あと一応ガードステート側もいじったほうが確実にガードの確率を下げれる。
変数管理をするなら「振り向きからの時間」を計って、数フレーム間
AssertSpecial(MUGEN側のガード抑制)も含めてガード不可の状態を作るとかじゃないかな。

あとEnemy,P2Dist X < 0(相手から見て自分が後ろ側)の場合はInGuardDistが無いから、
InGuardDistそのまま以外に頼らないと初めからガードができないけど、
何かしらで補助しているのなら確率を加えないとに完全対応するよね。

966MUGEN名無しさん:2010/05/23(日) 13:06:35 ID:j6dstOvM
statedef の値が200以上になると、cnsでmovetype=Iに設定してもmovetype=Aになるのは
MUGENの仕様?

967MUGEN名無しさん:2010/05/24(月) 01:57:13 ID:Z3ZtWjVs
被ダメステートが何番台だと思ってんだ
常時監視で弄ってんじゃねーの

968MUGEN名無しさん:2010/05/24(月) 08:29:17 ID:QElx31Uw
>>962
まさしくその通りだったぜ・・・
いろいろスイマセン

969MUGEN名無しさん:2010/05/24(月) 19:29:26 ID:bjSXv55A
乱入者氏の代入式の記事を見て思ったんですけど
1:学習用にVar(0)からVar(30)の中で開いてるステートにP2StateNoを入れたい
2:既にどこかに入っている場合は新規に入れるのは避けたい
場合
[State 14100,Varset]
type = null
TriggerAll = P2MoveType = A && EnemyNear,Time = 1
Trigger1 = Var(0) = 0 || P2StateNo = Var(0)
Trigger1 = Var(0):=P2StateNo
Trigger2 = Var(1) = 0 || P2StateNo = Var(1)
Trigger2 = Var(1):=P2StateNo
Trigger3 = Var(2) = 0 || P2StateNo = Var(2)
Trigger3 = Var(2):=P2StateNo
Trigger4 = Var(3) = 0 || P2StateNo = Var(3)
Trigger4 = Var(3):=P2StateNo
Trigger5 = Var(4) = 0 || P2StateNo = Var(4)
Trigger5 = Var(4):=P2StateNo
(中略)
Trigger30 = Var(29) = 0 || P2StateNo = Var(29)
Trigger30 = Var(29):=P2StateNo
って期待通りに機能してくれますかね

970MUGEN名無しさん:2010/05/24(月) 19:37:47 ID:Jp9qM1SM
>>969
misobon_ism氏のリュウに学習機能が入ってたはずだから
それを参考にすればいいと思う。あとはakagik氏のアナブラもかな。
DHQ氏のwind_CIにも同じようなのが入ってるけど
こっちは1つの変数に2つ以上のstatenoを代入してるから、
変数が足りないならそっちでもいいかも。

971MUGEN名無しさん:2010/05/24(月) 21:58:47 ID:p9VZ11OM
1.重複がでそう
既に別の変数に入っているステート番号は格納しないトリガーか、
重複を消去する作業がないと、よく振る技で変数が無駄になりそう。
自分のAIでは目的(中段学習とか)や属性別(attrなど)で小分けにして、
その中で重複が出ないようトリガーをつけます。
trigger(n+1)= !var(n)
trigger(n+1)= var(0)!=p2stateno && … && var(n-1)!=p2stateno
trigger(n+1)= var(n):=p2stateno
てな感じかな?まー素人の個人用AIですが。

2."|| p2stateno=var(0)"
の部分は何の意図があるんの?

3.これは学習用ヘルパーだよね?
bindtorootする必要があるかも。

972MUGEN名無しさん:2010/05/24(月) 22:29:37 ID:bjSXv55A
レスありがとうございます
>>970
学習用AI自体はできていて記述のスマート化を図ってるところなんです
紹介された同じ様な記述というDHQ氏のを覗いたのですが
コレはできてるという事なのかな。勉強になります

>>971
>1について
2でも触れられている"|| p2stateno=var(0)"というのが鍵でして
TriggerX(例えばTrigger1)が成功するとTriggerX+1以降(例えばTrigger2以降)は読み込まないという性質を利用して
探索中に既に登録されていることを確認する(p2stateno=var(0))と
代入処理を行ったうえでTriggerXは成立するので以降は読み込まない、という処理になります

つまり既に該当のP2StateNoが代入されてる所と同じ所に代入して、代入の処理を終わらせる…
…はずなんですがほんとにそうなってるかちょっと不安で

>3について
ちゃんとしてあります

973MUGEN名無しさん:2010/05/24(月) 22:43:28 ID:p9VZ11OM
>>972
なるほど、実にスマート!
勉強になりました、ありがとう!
自分もそうしよー

974MUGEN名無しさん:2010/05/25(火) 00:00:37 ID:REAY9Lu6
綺麗な記述だー。
でもTriggerの処理関係の話じゃなくて学習装置の話だけど、
P2管理の場合はタッグ戦の時に機能しないよう組まないと
記憶と違う相手にも反応しかねないけど大丈夫かな。

一応相手のIDを取得させて一緒に記録する方法なら、
処理がやや面倒になるけどタッグに対応できる。

975MUGEN名無しさん:2010/05/28(金) 19:55:24 ID:rzifKbKs
個人的な考えではありますが
タッグ戦時はそこまで厳密にやらなくてもいいかなと思ってます
一応再学習とかさせてますから、多少は対応できますしね

976MUGEN名無しさん:2010/06/14(月) 03:43:07 ID:Ol0aZlNA
画面端から画面端付近まで届くリーチのキャラのAIを作成してるんですが、
なまじ超リーチであるためか、起き上がりに攻撃しようとして相手の攻撃をモロに喰らってしまいます。
こういう時に、ガードさせる方法ってないものでしょうか?

977MUGEN名無しさん:2010/06/16(水) 02:37:32 ID:zdOs.KDQ
ちょっと状況が分からない
自分が起き上がりに攻撃してしまうという事?
相手の起き上がりに攻撃したら反撃を食らうという事?

978MUGEN名無しさん:2010/06/16(水) 13:52:36 ID:OPq9tjPc
対AI戦だとぶっちゃけ起き攻めはナンセンスだよ

一応格ゲーらしくみせるためにさせる事多いけど

MUGENの場合起き上がり後は3F無敵だからな

効率的な起き攻めさせたい場合相手のステート奪って無敵無くす事かな

979MUGEN名無しさん:2010/06/17(木) 05:34:40 ID:xDPIrFfM
>>977
>>978
自分が起き上がる時にです。流石に近距離で小パンとか重ねられたらガードするけど
それ以外の中距離からの攻撃とかだと反撃しようとして当たるんです。

980MUGEN名無しさん:2010/06/17(木) 15:14:59 ID:r3IQ0CfY
>>979
対起き攻めってことになるのかな?
VarでStateType=Lからの時間を管理すれば確実にガードさせられると思う。
「StateType=L→Varset(30)、StateType!=L&&Var(xx)>0→Varadd(-1)、
Var(xx)!=0→ガード優先 Var(xx)=0→抑制させる行動に付加」みたいな。

もしくは起き上がり直後に相手攻撃動作中の場合、
回避技か無敵技があればそれを振らせるとかが堅実なような。
単に起き上がりステート直後でないの条件を攻撃に付加しても、
PrevStateNo管理はすぐPrevStateNoが変わるからねぇ。

ただそれって普通の中距離からの攻撃に対しても
その起き上がり直後と同じ状態なんじゃないかな。

981MUGEN名無しさん:2010/06/30(水) 12:43:19 ID:RWJZuceE
今更だけど>>970>>980は次スレを建てておくれ

982MUGEN名無しさん:2010/07/02(金) 23:10:42 ID:Q05L1hY2
この速度なら990がたてればよくね

983MUGEN名無しさん:2010/07/04(日) 18:15:39 ID:URzvv452
定期あげ

984MUGEN名無しさん:2010/07/11(日) 12:02:45 ID:EPPzY/dE
AI起動でのCommand2方式ってヘルパー式と違ってトレモ時に暴発とかしないのかな?

985MUGEN名無しさん:2010/07/11(日) 16:35:13 ID:7OdKbLNc
facing=1ってのは相手の方を向いてるってことでいいのかな?

986MUGEN名無しさん:2010/07/11(日) 17:06:17 ID:EPPzY/dE
>>985
facing=1の意味はキャラが「右」を向いてるってことで「相手の方」
を向いているってことではないよ

987MUGEN名無しさん:2010/07/17(土) 04:11:32 ID:hgIOy.d2
必殺技の弱中強の打ち分けがわからなくて、
他の人の記述覗いてたんだけど

[State 1000,varset(10)]
type = varset
triggerall = Time = 0
trigger1 = var(59)
var(10) = ifelse(var(47),2,ifelse(random%4<2,0,random%2+1))

これって、var(10)=var(47)の時は2を返して、
そうでない時は変数0〜3が2より大きい時は0を返して、
それでもない時は変数0〜1に1を加算したものを返すってことでいいんだよね?

988MUGEN名無しさん:2010/07/17(土) 09:58:25 ID:S/3swYls
>>987
var(10)=var(47)のときに2を返すんじゃなくてvar(47)が0じゃないときに2を返す。
他はあってると思う

989MUGEN名無しさん:2010/07/17(土) 10:03:00 ID:i8s6/x0U
あと「2より小さい時は0を返して」。確率的には同じことだけど。
正直、var(47)が0じゃない時0、0、1、2を等確率で返す、とまで読んでしまっていい気がする。

……>>988みるまでそっちの方気にすらしてなかったorz

990MUGEN名無しさん:2010/07/18(日) 02:39:03 ID:cSnAyjqY
ヘルパー起動法でトレモで暴発するのを防ぐために以下の記述を作ってみたんだけどどうかな?
一応トレモではオートガードしても暴発せずwatchモードではAIヘルパーで起動確認済です

[StateDef 10000]
anim=9999
ctrl=0

[State 10000,プレイヤー判定]
type=varset
Trigger1=command="up"&&root,command="up"
:
:
Trigger11=command="start"&&root,command="start"
Trigger12=life!=10&&time>0 ;←ココ
var(59)=-1

[State 10000,プレイヤー判定]
type=parentvarset
Trigger1=command="up"&&root,command="up"
:
:
Trigger11=command="start"&&root,command="start"
Trigger12=life!=10&&time>0 ;←ココ
var(59)=-1

[State 10000,立ったら消失]
Type = DestroySelf
TriggerAll=isHelper
Trigger1=root,var(59)!=0||var(59)=-1
Trigger2=command="up"&&root,command="up"
:
:
Trigger12=command="start"&&root,command="start"
Trigger13=life!=10&&time>0 ;←ココ

[State 10000,AIフラグON]
Type=varset
TriggerAll=var(59)!=-1
Trigger1=root,command="up"&&(roundstate=2&&root,ctrl)
:
:
Trigger11=root,command="start"
var(59)=1

;↓コレ
[State 10000,lifeset]
type=lifeset
trigger1=1
value=10

991MUGEN名無しさん:2010/07/18(日) 11:22:29 ID:x.9Z/OFs
>>990
トレモも開始直後は2P側の操作を受け付けてるから、
そこでなにがしかのキー入力をしてやればすむんだけどね・・・。
確かに一手間かかってるわけだけど、あんまりめくじら立てるほどでもないような気がするんだよなぁ。
ステートを奪われたときにAIが暴発する方が、
頻度が少ないとはいえプレイヤー側がどうしようもない分たちが悪い。

992MUGEN名無しさん:2010/07/18(日) 15:06:33 ID:cSnAyjqY
次スレ
ttp://jbbs.livedoor.jp/bbs/read.cgi/internet/1117/1279433137/

993MUGEN名無しさん:2010/07/20(火) 08:04:06 ID:pGLKQCHw
>>992
スレ立てありがとう&お疲れ。

AI製作といえば
AI講座なるものを作ってみたいと思い始めたけれど
自分が書かなくったって分かりやすくて素晴らしい解説をしてる人が(wiki含め)一杯居すぎて
自分が作る意味が無いから一歩踏み出せないでいる。
しかし思うと今はAIを作りやすくなったなー。
自分の頃は解説サイトなんて数える程しかなかったのに。

994MUGEN名無しさん:2010/07/27(火) 01:22:51 ID:ceiynZ1Q
逆に情報が散逸しすぎてる気もするのが難しいところ。
センチ氏のAI説明書が今でもテンプレとして機能してるけど、
そこから先に進もうと思った途端にあっちこっちに手を伸ばさなきゃいけなくなるのよね。

995MUGEN名無しさん:2010/08/11(水) 08:47:23 ID:56cyVD6U
(残り少ないけど質問してみよう・・・)


AIにヘルパー数を確認させる手段として⑨氏のサイトのヘルパー数確認を使ってるのですが、なにかもっと良い方法ありませんかね?


あれだとタッグに対応しない気がして・・・

996MUGEN名無しさん:2010/08/11(水) 22:28:20 ID:V0LB5IBs
次スレもあるんで上げておく

997MUGEN名無しさん:2010/08/11(水) 23:12:14 ID:2dfw7HAQ
>>995
ヘルパー飛び道具の対策用?
だったらplayeridで細かく対応するところまでやっちゃいな

998MUGEN名無しさん:2010/08/12(木) 00:00:24 ID:YK2EeloQ
>>997

全くもってその通りのガード用です。
やっぱり細かく調べさせた方が良いですよね。

ありがとうございました

999MUGEN名無しさん:2010/08/30(月) 11:14:56 ID:1T2nAv8E
埋め

1000MUGEN名無しさん:2010/08/30(月) 11:15:26 ID:1T2nAv8E
1000

■掲示板に戻る■ ■過去ログ倉庫一覧■