FC2ブログ

 |   |  次のページ

AI動作のためのNoWalk

12/20
20:42 (Anoth-blue-eyes) AIのときって、AssertのNoWalkで勝手に歩かせないようにした方がいいんですかねぇ
20:45 (Anoth-blue-eyes) キー押してステート20に飛ぶ処理がまさかの内部処理だってことに今更気づきまして(
20:46 (DRM) それはそうした方が良い。勝手に歩かれると思い通りに動かせないしね
20:46 (Anoth-blue-eyes) やっぱりそうなんですねー
20:47 (Anoth-blue-eyes) 相手がダウンして、前進する条件を満たさなくなったのにミストが前言ったり立ち止まったりで痙攣し始めたんでもしやと思いまして(
20:48 (DRM) 起き上がり攻めたりしたいときにそういうのされると本当に困るんな
20:49 (Anoth-blue-eyes) あと見た目が気色悪いことになるんですよね単純に(
20:49 (Anoth-blue-eyes) 起き上がりには相手にわずかですが無敵がついてるんで、起き攻めのやりかたがあまりよく分からなかったり
20:50 (DRM) 持続の長い技を置いたり、めくったりするのも良い
20:50 (DRM) 投げはだめ
20:50 (Anoth-blue-eyes) ミストのめくりはちびみすとでのめくりか、コンボからでしかめくれないのでなかなか・・・
20:50 (DRM) 投げの無敵は12Fくらいついてたと思う
20:51 (Anoth-blue-eyes) 持続の長い技に該当するのは設置技に該当する2ゲージ技だけですねぇ
20:51 (DRM) 2ゲージはリスク高すぎるなw
20:51 (Anoth-blue-eyes) 投げだけやたら長いんですねー
20:51 (Anoth-blue-eyes) マグナムみたいに炸裂するちっこい弾を発射するんです
20:51 (Anoth-blue-eyes) 動きが遅いんですが炸裂すると結構な持続時間と攻撃範囲になるんで
20:52 (Anoth-blue-eyes) そこをガード崩ししてやれば・・・というのはありますけど
20:52 (Anoth-blue-eyes) 別に起き攻めでなくてもやれる(
20:52 (Anoth-blue-eyes) なので今は、相手が起きようとしたらバックダッシュに該当するワープで距離をとるようにしてます
20:54 (mosa) 起き上がり投げられると永久になっちゃうからね
20:54 (Anoth-blue-eyes) ですねー、人技では無理としてもAIならやりかねない(
20:55 (Anoth-blue-eyes) ちきしょー(
20:55 (mosa) 割りと人力でもいける感。というかいけるからこそ無敵ないと糞ゲに
20:55 (Anoth-blue-eyes) 2ndミストのAI作りこんでいけバイクほど現時点での2ndベルのAIがうんこにしか見えなくなってくr(
20:55 (Anoth-blue-eyes) 人力でもいけちゃうんですねー
21:01 (Anoth-blue-eyes) そういえば
21:02 (Anoth-blue-eyes) 内部処理で20に入ったとき、入った瞬間に前後どっちに動いてるか判断できる方法ってあります?
21:02 (Anoth-blue-eyes) nowalkと同等の処理を行いたいんですが、バックだけは残しておきたい感が。。。
21:03 (DRM) アニメかVelか
21:03 (Anoth-blue-eyes) 20に入った瞬間にvelってセットされるもんなんです?
21:04 (DRM) そらわからんw
21:04 (Anoth-blue-eyes) [State 20, 1]
21:04 (Anoth-blue-eyes) type = VelSet
21:04 (Anoth-blue-eyes) trigger1 = command = "holdfwd"
21:04 (Anoth-blue-eyes) x = const(velocity.walk.fwd.x)
21:04 (Anoth-blue-eyes) [State 20, 2]
21:04 (Anoth-blue-eyes) type = VelSet
21:04 (Anoth-blue-eyes) trigger1 = command = "holdback"
21:04 (Anoth-blue-eyes) x = const(velocity.walk.back.x)
21:04 (Anoth-blue-eyes) 速度を決めてるのはこれっぽいなぁ
21:05 (DRM) そのまま使うならコマンドでも判別できるか
21:05 (Anoth-blue-eyes) アニメもこれに準拠してるってことは、コマンドを使えばいいってことかしら。。。
21:07 (Anoth-blue-eyes) うーん、基本技中はctrl1にならないし、timeに依存しない構造になってるから、ステート20のトップにコマンド式のprevstateno飛ばしがあればいいかなぁ(
スポンサーサイト



ヘルパー式AIなど(3/13会話の始まり部分追記)

12/11
22:15 (Anoth-blue-eyes) ヘルパーと本体とでコマンドが食い違ってAI判断するって話はよく聞きますけど、
22:16 (Anoth-blue-eyes) ヘルパーどうしでもコマンドがくいちがうことはあります?
22:17 (Anoth-blue-eyes) この際混線を受けない限り誤作動が起こらないようにヘルパーのみで起動させる方法をとってみようと思うんですが。。。
22:17 (emeru) どうだろう、ヘルパー同士ならあるんじゃないかなぁ
22:17 (Anoth-blue-eyes) ほむ
22:17 (emeru) つか、人操作でもヘルパーと本体じゃ食い違う事はある
22:17 (Anoth-blue-eyes) らしいですね
22:17 (Anoth-blue-eyes) くらい状態とか振り向きとかで起こることが多いらしいので
22:18 (emeru) 木人形をよくテストキャラとして動かしてるけど、たまーに誤爆するンw
22:18 (Anoth-blue-eyes) やっぱりw
22:18 (Anoth-blue-eyes) だからこそ、ステート固定を利用して混線が起こらない限り誤作動しないように
22:18 (Anoth-blue-eyes) 安全なヘルパー2つで起動させてみようと思ったんです
22:19 (emeru) 二つとナ
22:20 (Anoth-blue-eyes) keyctrl=1のヘルパーAとBを同時に召喚して、両方とも自分の後ろ側のはるか遠くに飛ばしておいて
22:21 (Anoth-blue-eyes) まずはP2誤判定を避けておく、と
22:21 (Anoth-blue-eyes) それで、全く同じ位置、全く同じ向きの状態でAからB、BからAのコマンドを互いに監視するんです
22:23 (Anoth-blue-eyes) この2つは常時無敵/ガーステの完全防備体勢をとるので、私の推測が正しければ、相手が混線親変更クラスのものをぶつけて来ない限り誤作動しないと考えられるんです
22:24 (Anoth-blue-eyes) 本体とヘルパーとでは攻撃の晒され方、硬直の発生など多数の異なる条件があるから食い違いが発生するわけで。だったら全く同じ条件でやろうじゃないって感じですね
22:27 (emeru) ふむふむ・・・
22:27 (Anoth-blue-eyes) というわけで実際にやってみます(
22:28 (Anoth-blue-eyes) これで本当に起動したらMUGEN界に革命が起きるぞ・・・(
22:29 (emeru) AI起動か・・ラベル差を利用した方法しかやってないなぁ・・・
22:30 (Anoth-blue-eyes) 私はそれこそAI専用コマンドを押したかどうかしかやってかなtt(
22:30 (Anoth-blue-eyes) ただそのタイムラグでAIが起動しないまま首とられることがザラにあったので(
22:31 (emeru) 常時アーマー(ボソッ
22:31 (Anoth-blue-eyes) wwwwwww
22:32 (Anoth-blue-eyes) でも実際はこのアクティベートヘルパーも5150においときたかったんですけど、どうやら5150にいるヘルパーはコマンドを読み込んでくれない(
22:37 (Anoth-blue-eyes) 混線でtargetfacingやってくるような輩で凶ランクにいられる連中はまずいないからこれが飛んでくる可能性は除外してよいっと(
22:41 (Anoth-blue-eyes) ・・・
22:41 (Anoth-blue-eyes) AIコマンド差式の場合ってコマンドいくつくらい監視対象にすればいいんです?(
22:43 (Anoth-blue-eyes) 基本的なABCXYZS↑↓←→くらいあれば十分なんですかね?
22:55 (Anoth-blue-eyes) 起動しない・・・orz
22:58 (Anoth-blue-eyes) triggerall=ishelper(80261)
22:58 (Anoth-blue-eyes) trigger1 =command="a"
22:58 (Anoth-blue-eyes) trigger1 =helper(80260),command!="a"
22:58 (Anoth-blue-eyes) 書き方自体はこれであってるはず・・・
23:00 (Anoth-blue-eyes) あ(
23:00 (Anoth-blue-eyes) こいつら5150にいやがった(
23:04 (Anoth-blue-eyes) うーん、わからん・・・
23:04 (Anoth-blue-eyes) 基本コマンドだけでは起動しないってことなのか・・・
23:04 (Anoth-blue-eyes) root比較を織り交ぜてなおこれだけ起動しにくいってことだから・・・
23:12 (Anoth-blue-eyes) コマンドに/・・・?やっべぇわかんないことだらけだ(
23:15 (vesper_AFK) winMUGENなら、どれだけやっても内部AIのコマンド入力でAI起動することが前提だからライフバーの設定によっては棒立ちしやすいよ
23:15 (vesper_AFK) 常時AI最強(
23:15 (Anoth-blue-eyes) まぁ一応常時用スイッチもありますけど(
23:16 (Anoth-blue-eyes) やっぱりこういうところでもデフォで動くようにしておきたいんですよ、ある種の汎用魂(
23:16 (vesper_AFK) うん。
23:17 (Anoth-blue-eyes) で、コマンドの仕様を調べてたんですが・・・わけわかめ(
23:17 (Anoth-blue-eyes) ;後を押しながらA+B、という意味
23:17 (Anoth-blue-eyes) [Command]
23:17 (Anoth-blue-eyes) name = "away-b"
23:17 (Anoth-blue-eyes) command = /B,a+b
23:17 (Anoth-blue-eyes) time = 10
23:17 (vesper_AFK) 自分が知ってる限りはこんなところ。 http://mugenbinran.web.fc2.com/AIFlag.html
23:17 (Anoth-blue-eyes) ヘルパーが読み込めるコマンドってもしかしてこれのことですか?
23:17 (vesper_AFK) ん?
23:18 (Anoth-blue-eyes) 私もちょうどそのページを調べてたんですが
23:18 (Anoth-blue-eyes) KeyCtrl=1のヘルパーでのラベルは人操作の入力なら本体と同様に真になるが、内部AIのキー入力ならコマンドに/を含むラベルのみ本体と同様の真偽になる(コマンドに/を含まないラベルは真になることがない)。
23:18 (Anoth-blue-eyes) ってのが出てきたんですよ
23:18 (vesper_AFK) うん
23:19 (Anoth-blue-eyes) その/入りてのが、もしかして上の/B,a+bのことなのかなぁと
23:19 (vesper_AFK) あ~
23:19 (vesper_AFK) 単ボタン前提で書いてたなぁ
23:20 (Anoth-blue-eyes) 単ボタン?
23:22 (vesper_AFK)  /Bなら内部AIのキー入力でも真になる。 A+Bは内部AIのキー入力では真にならないから、「/B,A+B」とすると内部AIのキー入力では真にならないと思う
23:23 (Anoth-blue-eyes) てーことは、ABCXYZS↑↓←→の11種類にのみ/処理を施せばいいってことです?
23:24 (Anoth-blue-eyes) [Command]
23:24 (Anoth-blue-eyes) name = "a"
23:24 (Anoth-blue-eyes) command = /a
23:24 (Anoth-blue-eyes) time = 1
23:24 (Anoth-blue-eyes) こんなふうに。
23:25 (vesper_AFK) う~ん、AIフラグに使うなら、そんな感じかな。 その説明のもう少し下にある「ヘルパー単独式」の基本例の項目に一応暴発しないはずの書き方例があるから、それを使ってもらってもいいよ
23:26 (Anoth-blue-eyes) 一応見ておきますけど大丈夫のはずです。この方法は本体に依存しない方法にできるかを試す意味合いもあるので。
23:27 (Anoth-blue-eyes) きた!・・・けど圧倒的に遅い(
23:27 (vesper_AFK) ところでヘルパーだけで判断させる方法の利点って何だろ?
23:28 (Anoth-blue-eyes) 本体がどんな状態にあっても暴発させること無く起動できるところ?
23:28 (Anoth-blue-eyes) なおしっかり暴発した模様(
23:28 (vesper_AFK) 自分のやつで暴発することあったら報告が欲しかったりはする(
23:29 (Anoth-blue-eyes) おかしい・・・Xボタンおしたときだけ百発百中で暴発する(
23:29 (vesper_AFK) 条件から抜けてるとか、コマンドが抜けてるとか。
23:30 (vesper_AFK) ちなみにAI暴発って単語は人操作中にAIが起動してしまうことで良いよね?
23:30 (Anoth-blue-eyes) ですです
23:31 (Anoth-blue-eyes) XじゃなくてAだった(
23:32 (vesper_AFK) 人操作フラグを立てるようにすれば、AI起動するのは人操作が立ってないときだけって条件にすることで、暴発しないと思ってるんだけど、例外あるっけ?
23:32 (Anoth-blue-eyes) 押し忘れ?(痴呆
23:33 (vesper_AFK) あ、人が操作する前に攻撃食らってどうのこうのの可能性はあるのかな。
23:34 (vesper_AFK) この文章書いてから時間経ってるから知識抜けてる(
23:35 (Anoth-blue-eyes) は?(
23:35 (vesper_AFK) ん?
23:35 (Anoth-blue-eyes) aボタンとXボタンを起動対象から外したのに暴発する(
23:35 (Anoth-blue-eyes) なにこれ(
23:36 (vesper_AFK) ちょっとcns見てみたい
23:37 (Anoth-blue-eyes) ちょっと待ってくださいね・・・本当にこのステコンが原因なのか試して見ます
23:37 (vesper_AFK) てか、ヘルパー単独式って言ってるやつがヘルパー単独で行う利点がわからないって言った事が分からない(おい
23:38 (vesper_AFK) 自分のがそもそもヘルパー単独で判断してるのに、何言ってたんだw
23:39 (vesper_AFK) 判断はヘルパー1個だけで行って、そのフラグの保存場所を本体にしてるだけだ、これw
23:39 (vesper_AFK) 忘れ過ぎである(

ここまで追加

23:39 (Anoth-blue-eyes) ;【AI起動制御】
23:39 (Anoth-blue-eyes) [State ];AIスイッチ
23:39 (Anoth-blue-eyes) type = parentvarset
23:39 (Anoth-blue-eyes) triggerall=ishelper(80260)
23:39 (Anoth-blue-eyes) triggerall=numhelper(80261)
23:39 (Anoth-blue-eyes) triggerall=playerIDexist(parent,ID)
23:39 (Anoth-blue-eyes) triggerall=(parent,ID)=(root,ID)
23:39 (Anoth-blue-eyes) triggerall=roundstate=2
23:39 (Anoth-blue-eyes) triggerall=root,sysvar(2)>=30
23:39 (Anoth-blue-eyes) triggerall=root,var(59)=96061096
23:39 (Anoth-blue-eyes) triggerall=1
23:39 (Anoth-blue-eyes) trigger1 =command="a"
23:39 (Anoth-blue-eyes) trigger1 =helper(80261),command!="a"
23:39 (Anoth-blue-eyes) trigger2 =command="b"
23:39 (Anoth-blue-eyes) trigger2 =helper(80261),command!="b"
23:39 (Anoth-blue-eyes) trigger3 =command="c"
23:39 (Anoth-blue-eyes) trigger3 =helper(80261),command!="c"
23:39 (Anoth-blue-eyes) trigger4 =command="x"
23:39 (Anoth-blue-eyes) trigger4 =helper(80261),command!="x"
23:39 (Anoth-blue-eyes) trigger5 =command="y"
23:39 (Anoth-blue-eyes) trigger5 =helper(80261),command!="y"
23:39 (Anoth-blue-eyes) trigger6 =command="z"
23:39 (Anoth-blue-eyes) trigger6 =helper(80261),command!="z"
23:39 (Anoth-blue-eyes) trigger7 =command="a"
23:39 (Anoth-blue-eyes) trigger7 =helper(80261),command!="s"
23:39 (Anoth-blue-eyes) trigger8 =command="U"
23:39 (Anoth-blue-eyes) trigger8 =helper(80261),command!="U"
23:39 (Anoth-blue-eyes) trigger9 =command="D"
23:40 (Anoth-blue-eyes) trigger9 =helper(80261),command!="D"
23:40 (Anoth-blue-eyes) trigger10=command="F"
23:40 (Anoth-blue-eyes) trigger10=helper(80261),command!="F"
23:40 (Anoth-blue-eyes) trigger11=command="B"
23:40 (Anoth-blue-eyes) trigger11=helper(80261),command!="B"
23:40 (Anoth-blue-eyes) v=59
23:40 (Anoth-blue-eyes) value = -(random+1)
23:40 (Anoth-blue-eyes) ignorehitpause=1
23:40 (Anoth-blue-eyes) 長いのでこっちに。
23:40 (Anoth-blue-eyes) 本体直属のヘルパーがこのステートにあるとき、80260のコマンドが成立して相棒の80261のコマンドが成立してない場合にスイッチ起動っていう寸法です
23:40 (Anoth-blue-eyes) [State ];AIスイッチ
23:40 (Anoth-blue-eyes) type = parentvarset
23:40 (Anoth-blue-eyes) triggerall=ishelper(80261)
23:40 (Anoth-blue-eyes) triggerall=numhelper(80260)
23:40 (Anoth-blue-eyes) triggerall=playerIDexist(parent,ID)
23:40 (Anoth-blue-eyes) triggerall=(parent,ID)=(root,ID)
23:40 (Anoth-blue-eyes) triggerall=roundstate=2
23:40 (Anoth-blue-eyes) triggerall=root,sysvar(2)>=30
23:40 (Anoth-blue-eyes) triggerall=root,var(59)=96061096
23:40 (Anoth-blue-eyes) triggerall=1
23:41 (Anoth-blue-eyes) trigger1 =command="a"
23:41 (Anoth-blue-eyes) trigger1 =helper(80260),command!="a"
23:41 (Anoth-blue-eyes) trigger2 =command="b"
23:41 (Anoth-blue-eyes) trigger2 =helper(80260),command!="b"
23:41 (Anoth-blue-eyes) trigger3 =command="c"
23:41 (Anoth-blue-eyes) trigger3 =helper(80260),command!="c"
23:41 (Anoth-blue-eyes) trigger4 =command="x"
23:41 (Anoth-blue-eyes) trigger4 =helper(80260),command!="x"
23:41 (Anoth-blue-eyes) trigger5 =command="y"
23:41 (Anoth-blue-eyes) trigger5 =helper(80260),command!="y"
23:41 (Anoth-blue-eyes) trigger6 =command="z"
23:41 (Anoth-blue-eyes) trigger6 =helper(80260),command!="z"
23:41 (Anoth-blue-eyes) trigger7 =command="a"
23:41 (Anoth-blue-eyes) trigger7 =helper(80260),command!="s"
23:41 (Anoth-blue-eyes) trigger8 =command="U"
23:41 (Anoth-blue-eyes) trigger8 =helper(80260),command!="U"
23:41 (Anoth-blue-eyes) trigger9 =command="D"
23:41 (Anoth-blue-eyes) trigger9 =helper(80260),command!="D"
23:41 (Anoth-blue-eyes) trigger10=command="F"
23:41 (Anoth-blue-eyes) trigger10=helper(80260),command!="F"
23:41 (Anoth-blue-eyes) trigger11=command="B"
23:41 (Anoth-blue-eyes) trigger11=helper(80260),command!="B"
23:41 (Anoth-blue-eyes) v=59
23:41 (Anoth-blue-eyes) value = -(random+1)
23:41 (Anoth-blue-eyes) ignorehitpause=1
23:41 (Anoth-blue-eyes) もちろん、80261の方からも同じ要領で監視を行っています
23:42 (vesper_AFK) trigger7 =command="a" これが原因じゃない?
23:42 (vesper_AFK) trigger7 =command="s" にしたら直らない?
23:42 (Anoth-blue-eyes) あwwwwwwwwwwwwwww
23:42 (Anoth-blue-eyes) あほやwwwwwwww完全にあほンゴwwwwwwwwwwwwwwwwww
23:42 (YANMAR) アチャー
23:44 (vesper_AFK) 直った?
23:44 (Anoth-blue-eyes) いや・・・それが今度は不思議な挙動をとるようになりまして(
23:44 (vesper_AFK) ふむ
23:45 (Anoth-blue-eyes) [Command]
23:45 (Anoth-blue-eyes) name = "a"
23:45 (Anoth-blue-eyes) command = /a
23:45 (Anoth-blue-eyes) time = 1
23:45 (Anoth-blue-eyes) オリジナルのコマンドで直接試したのがまずかったっぽい(
23:45 (Anoth-blue-eyes) 起動用コマンドってやっぱり"a"だとまずいです?
23:46 (Anoth-blue-eyes) どういうわけか必殺技が撃てなくなったりしてるので・・・
23:46 (YANMAR) AI起動用ってふつう人間が入力できない奴とかじゃなかったっけ
23:46 (Anoth-blue-eyes) それもあるんですが、コマンドの食い違いを利用する方法を使ってみようと思ったんです
23:46 (vesper_AFK) ん? command=a とcommand=/a の両方のラベル名をcommand="a"にしてたりします?
23:47 (Anoth-blue-eyes) command=aが/aに変わったんです
23:47 (Anoth-blue-eyes) command=aが存在しない状態です
23:48 (vesper_AFK) AI起動で入力できないコマンドを作るのは、内部AIがコマンド入力条件に関係なくそのコマンドのラベルを真にする動作を利用する場合ですね >ヤンマーさん
23:49 (YANMAR) ほうほほほう?
23:49 (Anoth-blue-eyes) コマンドは、AIの場合キャラが独自に持ってるコマンドを自力で入力することができないので
23:49 (vesper_AFK) 今回は内部AIのキー入力がヘルパーでは一部読み取れない事を利用しようとしてます
23:49 (Anoth-blue-eyes) そのキャラが持ってるコマンドを使うってのはご存知の通りですが
23:49 (YANMAR) あーその差を利用って感じなのね
23:50 (Anoth-blue-eyes) ヘルパーと本体で別々に管理されてるので、本体しか読んでない、もしくはヘルパーしか読んでないって上体が生まれうるのを利用してるわけです
23:51 (Anoth-blue-eyes) にしてもこの・・・/ってどういう意味なんだろう・・・
23:51 (vesper_AFK) 長押し
23:51 (vesper_AFK) 知らずに使ってたかw
23:51 (Anoth-blue-eyes) 長押し?
23:51 (YANMAR) おいいw
23:52 (Anoth-bl_) 回線きれた(
23:52 (vesper_AFK) aと/aの違いは、aは単にAボタンを押した瞬間ですけど、/aはAボタンを押し続けた時という感じですね
23:53 (Anoth-bl_) ほむ、それがどういうわけか、ヘルパーでは/しか読み込めなくなってる、と(
23:53 (vesper_AFK) ですね
23:55 (Anoth-bl_) なるほど。。。でも/しか使えるコマンドがないってことは、ヘルパーのコマンドプールはかなり少ないわけですね
23:55 (Anoth-bl_) つまり、たった10個程度の数でもすばやく感知できるわけだ。。。
23:55 (vesper_AFK) ん?
23:55 (vesper_AFK) すばやく感知というのは?
23:56 (Anoth-bl_) いえ、ヘルパー式がコマンド式よりも圧倒的に早いって書いてあったので。
23:56 (vesper_AFK) ああ、それはコマンド式は、↑で言ったラベルを直接真にする機能だけを使ってますけど、
23:57 (vesper_AFK) ヘルパー式はキー入力の機能を使ってることが原因ですね
23:57 (Anoth-bl_) ふむ
23:57 (vesper_AFK) ラベルを真にする機能が働く頻度は、キー入力が働く頻度よりだいぶ少ないのです。
23:58 (Anoth-bl_) ふむ・・・
23:58 (Anoth-bl_) つまりあれか、本体を経由しないとやっぱり起動速度はそのまま・・・
23:59 (vesper_AFK) で、自分が書いたヘルパー単独式はヘルパー式の暴発原因を取り除いたものなので速度も早いと
23:59 (vesper_AFK) (宣伝

00:00 (Anoth-bl_) ぬぁー起動しねぇ(
00:00 (vesper_AFK) 自分のと違うのは、自分は1つのヘルパーで判断してるのに対して、青眼さんは2つのヘルパーで判断してるってことかな
00:00 (Anoth-bl_) たった11このヘルパーじゃ全然起動してくれねぇ(
00:01 (vesper_AFK) ヘルパー増やしても変わらないようなw
00:01 (Anoth-bl_) ヘルパーじゃないや、コマンドです
00:01 (vesper_AFK) あ~、コマンド数は正義(
00:02 (Anoth-bl_) えっと
00:02 (vesper_AFK) それでも埋めなくても起動しないということは無かったはずだけど。
00:02 (Anoth-bl_) やっぱりキー操作で本体を経由しないとダメなのかー・・・
00:03 (vesper_AFK) 本体を経由というのがちょっと分かってなかったり。
00:03 (Anoth-bl_) えっとだ
00:03 (Anoth-bl_) ヘルパーでもキー操作は受け付けるんですよね?
00:03 (vesper_AFK) うん
00:03 (Anoth-bl_) [Command]
00:03 (Anoth-bl_) name = "a"
00:03 (Anoth-bl_) command = a
00:03 (Anoth-bl_) time = 1
00:04 (Anoth-bl_) つまり、この単独キーだけは/がなくても感知できるってことでいいんですね?
00:04 (vesper_AFK) いや出来ないです
00:04 (Anoth-bl_) ふぁー(
00:04 (Anoth-bl_) あれ、じゃあミストのヘルパーはどうやって動いてたんだ・・・?(
00:05 (Anoth-bl_) 旧ミストのボディヘルパーのことです
00:05 (Anoth-bl_) >みすとのへるぱー
00:05 (vesper_AFK) それはAIの時の話ですよね?
00:05 (Anoth-bl_) いや、本体動作のときです
00:05 (vesper_AFK) 人操作時です?
00:05 (Anoth-bl_) ・・・まさかあれはrootcommand参照だったのかしら
00:05 (Anoth-bl_) ですね
00:06 (vesper_AFK) 人操作の場合はヘルパーも↑のは感知できますよ
00:06 (vesper_AFK) 出来ないと言ったのは、内部AIのキー入力に対してですね
00:07 (Anoth-bl_) ほむ
00:07 (Anoth-bl_) キー操作ってのは、内部AIもやってくれるんです?
00:07 (vesper_AFK) はい
00:07 (Anoth-bl_) つまりだ
00:07 (vesper_AFK) 内部AIは2つの動作が有ります。
00:08 (vesper_AFK) 1つがあるコマンドのラベルを無条件で真にする動作。 もうひとつがキー入力の動作。
00:08 (Anoth-bl_) つまり・・・
00:08 (Anoth-bl_) [Command]
00:08 (Anoth-bl_) name = "a"
00:08 (Anoth-bl_) command = a
00:08 (Anoth-bl_) time = 1
00:08 (Anoth-bl_) こっちはキー操作してくれるからヘルパーでも有効化できるけど
00:08 (Anoth-bl_) [Command]
00:08 (Anoth-bl_) name = "a-X"
00:08 (Anoth-bl_) command = a
00:08 (Anoth-bl_) time = 1
00:09 (Anoth-bl_) こっちは読み込んでくれない。こういうことですか(
00:09 (Anoth-bl_) ちがってそうだ(
00:09 (vesper_AFK) ん? nameが違うだけ?
00:09 (vesper_AFK) それはどちらも内部AIのキー入力では、ヘルパーでのコマンドラベルは真に出来ないですね
00:10 (Anoth-bl_) あれー自分でも言ってることおかしくなってきた(
00:10 (Anoth-bl_) どっちも無理なんだ(
00:10 (vesper_AFK) nameは識別するための名前ですからねw
00:10 (vesper_AFK) 肝心なのはcommand= の方ですね
00:10 (Anoth-bl_) じゃあ、内部のキー入力で入力できるコマンドってどういうものなんです?
00:10 (Anoth-bl_) ふむ
00:11 (vesper_AFK) [Command]
00:11 (vesper_AFK) name = "a_AI"
00:11 (vesper_AFK) command = /a
00:11 (vesper_AFK) time = 1
00:11 (Anoth-bl_) こっちがキーで入力できないわけですか
00:11 (vesper_AFK) これだと内部AIのキー入力でも、ヘルパーのコマンドラベルも真になります
00:12 (Anoth-bl_) つまり・・・キー入力がなされた場合、aが有効化されずa-AIだけが有効化される、と
00:13 (Anoth-bl_) あぁこれデュアルヘルパーにする意味なかったやつかしら(
00:13 (vesper_AFK) うん(
00:13 (Anoth-bl_) ぐふっ(
00:13 (Anoth-bl_) はいっおとなしくそうしますっ(
00:35 (Anoth-bl_) いや待て・・・どういうことだ・・・これでどうやって本体とヘルパーを判別するんだ・・・
00:35 (vesper_AFK) 暴発はさっきのAIの話? 単純ミス?
00:35 (Anoth-bl_) AIのほうです(
00:37 (Anoth-bl_) キー入力がなされた場合、aが有効化されず/aだけが有効化される、ここまではいいですよ
00:38 (Anoth-bl_) でも、キーは本体だろうがAIだろうがやってくる。。。これをどうやってヘルパーだけで見破るのかが(
00:38 (vesper_AFK) 両方が真なら人操作、片方だけが真ならAI操作
00:39 (Anoth-bl_) trigger1 =command="a-X"
00:39 (Anoth-bl_) trigger1 =command!="a"
00:39 (Anoth-bl_) つまりこうでいいんですか?
00:39 (Anoth-bl_) というか今これなんですけど・・・
00:39 (vesper_AFK) え~とa-Xは/aで、aはaです?
00:39 (Anoth-bl_) です
00:40 (Anoth-bl_) そもそも人操作でもこれを満たすような気がしてならないんですよね。。。
00:40 (vesper_AFK) それが満たされるならAIですね
00:40 (Anoth-bl_) ですよね?じゃあ何で暴発するんだ・・・
00:41 (vesper_AFK) いつも暴発します?
00:41 (Anoth-bl_) どのキーでも百発百中で暴発しますね(
00:42 (vesper_AFK) う~ん、ファイルをアップしてもらったほうが見やすいかなぁ。
00:42 (Anoth-bl_) なにを送ればいいです?
00:43 (vesper_AFK) AI判断を行っているステートがあるファイルを上げてもらえれば。
00:43 (Anoth-bl_) つまりメインCNSか・・・了解です
00:46 (vesper_AFK) 受け取りました
00:47 (Anoth-bl_) 了解ですー
00:48 (Anoth-bl_) ;特殊召喚/AIアクティベーター
00:48 (Anoth-bl_) [statedef 77026]
00:48 (Anoth-bl_) これがその記述があるステートです
00:50 (vesper_AFK) は~い
00:55 (vesper_AFK) ああ、思い出した
00:55 (vesper_AFK) この条件はAボタンを押した瞬間だけ判別できてる
00:55 (Anoth-bl_) 押した瞬間?
00:55 (vesper_AFK) だけど、即ボタンを離すわけではないから
00:56 (Anoth-bl_) おしっぱなしになった場合はアウト、と。。。
00:56 (vesper_AFK) 2F目とかで、!="a"が成立しつつ、"/a"も成り立ってしまってる
00:56 (vesper_AFK) ですです
00:56 (vesper_AFK) だから、自分のフラグでは先に人操作であるかを判断して、人操作フラグを立てる構造になってますね
00:57 (Anoth-bl_) なるほど。。。
00:57 (Anoth-bl_) でも人間なんてそうそう1Fだけ押すことは不可能ですからねぇ・・・
00:58 (vesper_AFK) ですね。 
00:59 (vesper_AFK) だから人操作である判断も同時に行う必要がありますね
01:00 (Anoth-bl_) ふむ。。。
01:02 (Anoth-bl_) キーを押した1Fだけ判別できる、か・・・
01:02 (Anoth-bl_) となればこれはexplodスイッチの出番かな(痙攣
01:03 (Anoth-bl_) 各種キーに対応したexplodを、/なしが発動した瞬間にのみremovetime=0で発動して
01:03 (Anoth-bl_) このexplodがある間のみ判別を行う
01:03 (Anoth-bl_) これならいけるだろ・・・(執念
01:04 (vesper_AFK) 1Fだけ判断できるというか、1Fあれば判断できるという
01:04 (Anoth-bl_) ステコン数22個くらいに膨れ上がるやで(痙攣
01:04 (Anoth-bl_) 2Fがやってきたらまずいってことですよね?つまり。
01:05 (vesper_AFK) 人操作フラグ無しの話なら、そうかなぁ
01:05 (Anoth-bl_) ・・・あー
01:06 (Anoth-bl_) 両方が満たされた場合に別スイッチをONにして、
01:06 (vesper_AFK) 自分は未判断を0、AI起動を1、人操作時を-1にしてますね
01:06 (vesper_AFK) va(59)=x
01:06 (Anoth-bl_) これがOFFの状態のまま片方だけ満たされた場合に使えばいい、か・・・
01:07 (Anoth-bl_) 私のはAILvを備えてる上、対変数いじり対策に面倒なことをしてるので(
01:07 (vesper_AFK) 人操作感知で特定の番号のexplodを出すとか?
01:07 (Anoth-bl_) そうなりますね
01:08 (Anoth-bl_) で、このexplodがないまま前の条件を満たすとスイッチオン、と
01:08 (vesper_AFK) ですね
01:08 (Anoth-bl_) やってみますか。。。
01:18 (Anoth-bl_) trigger1 =command="a-X"
01:18 (Anoth-bl_) trigger1 =command="a"
01:18 (Anoth-bl_) えっと
01:18 (Anoth-bl_) これを満たした場合にAI発動を封じればいいんですね
01:19 (vesper_AFK) そうですね。それが満たされた時は人操作確定なので。
01:20 (Anoth-bl_) 暴発しました☆
01:21 (Anoth-bl_) というかまたしても百発百中なんですが(
01:25 (vesper_AFK) また、送ってもらえば見てみます
01:26 (Anoth-bl_) おくりましたー
01:26 (Anoth-bl_) 変わってるのは、AI発動補助用のexplodスイッチ記述が増えてるところくらいでしょうか

01:30 (vesper_AFK) 青眼さん、暴発するというのは試合開始して、イントロ飛ばさずにラウンドが始まって、操作しようとしたらAIが暴発ということであってます?
01:31 (Anoth-bl_) あれ、飛ばさなかったら暴発しなくなってる(
01:31 (Anoth-bl_) なんで(
01:31 (vesper_AFK) イントロ飛ばしは暴発原因だったり
01:31 (Anoth-bl_) そうなんですか?でもなんで?
01:31 (vesper_AFK) ちょっとよく分からないヘルパーの挙動があるのです
01:32 (Anoth-bl_) ふむ・・・
01:32 (vesper_AFK) えっと、推測混じりだった気がしますが
01:32 (vesper_AFK) 原因:イントロ終了によりヘルパーの変数がリセットされ、"/command"コマンド成立でAIフラグが立つ。
01:32 (vesper_AFK) これが原因だったと思います
01:33 (Anoth-bl_) でも変数も何も、このヘルパーが召喚されるのはroundstateが2になった後ですよ?
01:33 (Anoth-bl_) それでもこの影響を受けるものなんです?
01:33 (vesper_AFK) ふむぅ
01:34 (vesper_AFK) 自分は最初から出してたからなぁ
01:34 (Anoth-bl_) trigger1=sysvar(2)=3;
01:34 (vesper_AFK) RoundState=2から3F目って意味です?
01:34 (vesper_AFK) =2開始から
01:34 (Anoth-bl_) これですね、roundstate=2になってからの時間を計測する本体変数SV2が3のときなので
01:35 (Anoth-bl_) roundstate=2になってから3F経過しなければ召喚されないんです
01:35 (vesper_AFK) う~ん、
01:35 (vesper_AFK) イントロ飛ばしの直後って既にRoundState=2ですよね?
01:35 (Anoth-bl_) ですね
01:37 (vesper_AFK) あ、でも30F以降から判定かぁ
01:37 (Anoth-bl_) この条件でしかこのヘルパーはその処理をしないんです
01:37 (vesper_AFK) 0.5秒
01:38 (Anoth-bl_) さっき試したところ、試合開始後3秒経過してからキー操作して暴走したのを確認しました
01:38 (vesper_AFK) イントロ飛ばしは?
01:38 (Anoth-bl_) イントロを飛ばした場合のみですね、飛ばさなければ大丈夫なのは同じみたいです
01:39 (vesper_AFK) う~ん、やっぱりイントロ飛ばしかぁ・・・
01:40 (vesper_AFK) 確かイントロ飛ばしを行うといろいろとリセットがかかるんでしたよね
01:40 (Anoth-bl_) ですねー、かなり面倒なことになったような。
01:41 (vesper_AFK) そのリセットされた情報が特定の条件ではリセット前が読み込まれるとか?
01:41 (vesper_AFK) 凶悪技術系の部屋の話みたいな
01:41 (Anoth-bl_) ですねぇ、こんなところで仕様の話が飛んでくるんですねぇ
01:41 (vesper_AFK) 何が読み込まれた結果かとか一切思いついてないですけど(
01:41 (Anoth-bl_) そういった意味では神での経験はおおきかった(
01:42 (vesper_AFK) 人操作判定がトリガーで弾かれて、AI判定は弾かれない状態になってるということのはず。
01:43 (Anoth-bl_) そのようですね、trigger12=1をexplod側にいれたら発動しなくなったので
01:43 (Anoth-bl_) コマンド部分に何らかの影響が出てるってことでしょうか。。。
01:44 (vesper_AFK) 人操作のexplod側にだけあるtriggerall=PlayerIDExist(ID)をAI判定の方にも入れるとどうでしょ?
01:45 (Anoth-bl_) triggerall=PlayerIDExist(ID)
01:46 (Anoth-bl_) これってたしか、P消去かdestroyselfでもしない限り満たされないはずがないと思うんですが・・・
01:46 (vesper_AFK) 現状も「はずがない」状態なので、とりあえず形を一緒にしてみようという考え(
01:48 (Anoth-bl_) 了解です。でももしこれで発動したとなればMUGEN界の常識が根底から覆りかねない(
01:48 (Anoth-bl_) うん、やっぱり暴発しますね
01:48 (Anoth-bl_) 逆に安心(
01:48 (vesper_AFK) 良かった(
01:50 (vesper_AFK) 自分もイントロ飛ばしでそうなる現象おきてたけど、今は起きなくなってたはず。。。
01:51 (vesper_AFK) 十徳ナイフ使ってます?
01:51 (Anoth-bl_) 使ってないですね
01:51 (Anoth-bl_) なんならキャラごと送りましょうか?
01:51 (vesper_AFK) あ、じゃあお願いします
01:53 (Anoth-bl_) しかし何だろうなぁ・・・trigger12の例がある以上、イントロ飛ばしによってコマンドそのものに悪影響が及んでると考えるのが一番自然ですが・・・
01:57 (Anoth-bl_) 2時半まで粘って無理だったら、ヘルパー式とコマンド式のデュアルAIで妥協します(
01:57 (Anoth-bl_) イントロを飛ばされたらヘルパーを召喚しないという開き直り(
01:58 (vesper_AFK) イントロ飛ばしって、ヘルパーを出しておいて、RoundState=2開始時に消えていたら感知ってことでいいのかなぁ
01:59 (Anoth-bl_) 逆に言えば、このヘルパーをroundstate=1のときにだけ召喚するって方針でいいかと
01:59 (vesper_AFK) ああ、確かに
02:00 (Anoth-bl_) で、無かったら無かったで元から本体に入ってるコマンド式でなんとかする、って形で。。。
02:02 (vesper_AFK) やった暴発確認できた(
02:02 (Anoth-bl_) でしょー(
02:03 (Anoth-bl_) そして環境依存で発生する類のものではないことを確認できて一安心(
02:03 (vesper_AFK) ですねw
02:04 (Anoth-bl_) こうも長くMUGEN神環境やってると異常動作の原因に考えられるものが多すぎるんですよね(
02:05 (Anoth-bl_) まあ迷宮入りするよりは圧倒的にマシなんですけど(
02:08 (Anoth-bl_) あ゛
02:08 (Anoth-bl_) 待ってこれなんかいやな予感する(
02:10 (Anoth-bl_) ・・・いやそんなはずないか、私とてその程度のことは当然踏まえてるよな(

02:51 (vesper_AFK) [state ]
02:51 (vesper_AFK) type = null
02:51 (vesper_AFK) triggerall=!var(58)
02:51 (vesper_AFK) trigger1 = command="a"&&command="a"
02:51 (vesper_AFK) trigger1 = var(58) := 1
02:51 (vesper_AFK) trigger2 = command!="a"&&command="a-X"
02:51 (vesper_AFK) trigger2 = var(58) := 2
02:52 (vesper_AFK) こんなのをヘルパーに読み込ませると、イントロ飛ばしせずにAを押すと1、イントロ飛ばしをすると2になる
02:52 (vesper_AFK) ちなみに本体なら1。
02:53 (vesper_AFK) イントロ飛ばしをすると、最初の入力に限って人操作でも内部入力と同じ動作になってるなぁ。

03:21 (vesper_AFK) うん、確実に1F起動が遅くなるけど、1F目はAI起動フラグのフラグを立てて、2F目にフラグのフラグが立っていればAIフラグを立てるようにすれば暴発もしないし、ちゃんと起動もする
03:22 (vesper_AFK) 一応イントロ飛ばしを完治した時だけ、この1F目はフラグをたてるだけにするようにすれば、遅れを最小限にできるはず。
03:22 (vesper_AFK) ちょっと複雑になるけど。
03:22 (vesper_AFK) まぁそんなわけで勝手にヘルパーのvar(58)を使ってるけど、
03:22 (vesper_AFK) [State ];AIスイッチ
03:22 (vesper_AFK) type = parentvarset
03:22 (vesper_AFK) triggerall=PlayerIDExist(ID)
03:22 (vesper_AFK) triggerall=ishelper(8026)
03:22 (vesper_AFK) triggerall=playerIDexist(parent,ID)
03:22 (vesper_AFK) triggerall=(parent,ID)=(root,ID)
03:22 (vesper_AFK) triggerall=roundstate=2
03:22 (vesper_AFK) triggerall=root,sysvar(2)>=30
03:22 (vesper_AFK) triggerall=root,var(59)=96061096
03:22 (vesper_AFK) triggerall=numexplod(214849297)!
03:22 (vesper_AFK) triggerall=var(58)
03:22 (vesper_AFK) trigger1 =command="a-X"
03:22 (vesper_AFK) trigger1 =command!="a"
03:22 (vesper_AFK) trigger2 =command="b-X"
03:22 (vesper_AFK) trigger2 =command!="b"
03:22 (vesper_AFK) trigger3 =command="c-X"
03:22 (vesper_AFK) trigger3 =command!="c"
03:22 (vesper_AFK) trigger4 =command="x-X"
03:22 (vesper_AFK) trigger4 =command!="x"
03:22 (vesper_AFK) trigger5 =command="y-X"
03:22 (vesper_AFK) trigger5 =command!="y"
03:22 (vesper_AFK) trigger6 =command="z-X"
03:22 (vesper_AFK) trigger6 =command!="z"
03:22 (vesper_AFK) trigger7 =command="s-X"
03:22 (vesper_AFK) trigger7 =command!="s"
03:22 (vesper_AFK) trigger8 =command="U-X"
03:22 (vesper_AFK) trigger8 =command!="U"
03:22 (vesper_AFK) trigger9 =command="D-X"
03:22 (vesper_AFK) trigger9 =command!="D"
03:22 (vesper_AFK) trigger10=command="F-X"
03:22 (vesper_AFK) trigger10=command!="F"
03:22 (vesper_AFK) trigger11=command="B-X"
03:22 (vesper_AFK) trigger11=command!="B"
03:22 (vesper_AFK) v=59
03:22 (vesper_AFK) value = -(random+1)
03:22 (vesper_AFK) ignorehitpause=1
03:22 (vesper_AFK) [State ];AIスイッチ
03:22 (vesper_AFK) type = varset
03:22 (vesper_AFK) triggerall=PlayerIDExist(ID)
03:22 (vesper_AFK) triggerall=ishelper(8026)
03:22 (vesper_AFK) triggerall=playerIDexist(parent,ID)
03:22 (vesper_AFK) triggerall=(parent,ID)=(root,ID)
03:22 (vesper_AFK) triggerall=roundstate=2
03:22 (vesper_AFK) triggerall=root,sysvar(2)>=30
03:22 (vesper_AFK) triggerall=root,var(59)=96061096
03:22 (vesper_AFK) triggerall=numexplod(214849297)!
03:22 (vesper_AFK) trigger1 =command="a-X"
03:22 (vesper_AFK) trigger1 =command!="a"
03:22 (vesper_AFK) trigger2 =command="b-X"
03:22 (vesper_AFK) trigger2 =command!="b"
03:22 (vesper_AFK) trigger3 =command="c-X"
03:22 (vesper_AFK) trigger3 =command!="c"
03:22 (vesper_AFK) trigger4 =command="x-X"
03:22 (vesper_AFK) trigger4 =command!="x"
03:22 (vesper_AFK) trigger5 =command="y-X"
03:22 (vesper_AFK) trigger5 =command!="y"
03:22 (vesper_AFK) trigger6 =command="z-X"
03:22 (vesper_AFK) trigger6 =command!="z"
03:22 (vesper_AFK) trigger7 =command="s-X"
03:22 (vesper_AFK) trigger7 =command!="s"
03:22 (vesper_AFK) trigger8 =command="U-X"
03:22 (vesper_AFK) trigger8 =command!="U"
03:22 (vesper_AFK) trigger9 =command="D-X"
03:22 (vesper_AFK) trigger9 =command!="D"
03:22 (vesper_AFK) trigger10=command="F-X"
03:22 (vesper_AFK) trigger10=command!="F"
03:22 (vesper_AFK) trigger11=command="B-X"
03:22 (vesper_AFK) trigger11=command!="B"
03:22 (vesper_AFK) v=58
03:22 (vesper_AFK) value = 1
03:22 (vesper_AFK) ignorehitpause=1
03:23 (vesper_AFK) というようにAIフラグを立てるステートの下にフラグのフラグを置いてみた。
03:23 (vesper_AFK) 実験的に入れてみたから、かなり不格好ではあるけど、暴発はしなくなった。
07:07 (Anoth-bl_) ねおち(
08:46 (Anoth-bl_) ほんとだ、これだけで本当に暴発抑えられてる・・・
08:46 (Anoth-bl_) そして起動ゲロHAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE!!!!!!!!!!
08:47 (Anoth-bl_) 革命的に早い(
08:50 (Anoth-bl_) ただ変数使うの癪なんで、explodスイッチに置き換えが可能か試してみます
08:54 (Anoth-bl_) でもこの2つって書いてること殆ど同じですよね?ほぼ同じ条件のものをもう一つ加えただけでなんで暴発が止まるんだろう・・・?
09:33 (Anoth-bl_) まぁあれか、さすがに人操作でキー入力したあとctrl+1でAI化しても言う事きくわけないか(
09:33 (Anoth-bl_) ヘルパーが召喚できなかった場合も考えて、念のためコマンドとヘルパーのデュアルシステムでいきますか
09:42 (Anoth-bl_) explodスイッチへの移行完了!あとはこれをデュアルシステムに変更して・・・
10:40 (Anoth-bl_) できましたー!理屈がよくわからないままですが本当ありがとうございます!
11:29 (Anoth-bl_) あ
11:29 (Anoth-bl_) ラウンドが始まってからボタン押しっぱなしにすると暴発する不具合を発見(
11:42 (Anoth-bl_) これはイントロを飛ばしたかどうかに関係ないみたいだなぁ。。。
11:43 (Anoth-bl_) ということはあれか、
11:43 (Anoth-bl_) ヘルパーがでるより前に押しっぱなしにしてても暴発しちゃうなぁ
11:44 (Anoth-bl_) 開幕から相手からの干渉を受けることはないとするならば、
11:44 (Anoth-bl_) 本体からも人操作判定エフェクトスイッチを導入した方がいいってことかしら
11:44 (Anoth-bl_) まぁいいや、ここらへんは保留にしていったん出かけてきますか
14:05 (Anoth-blue-eyes) いや・・やったる(
14:25 (Anoth-blue-eyes) できちゃああああああああああああああああああああああああああああああああああ
20:56 (vesper_AFK) キー入力のあった1F目はvar(58)だけが、オンになって、2F目以降にvar(59)がオンになるようにしてるだけだよ >青眼さん
20:56 (vesper_AFK) だから、上下関係をひっくり返すと暴発する(
20:57 (vesper_AFK) 1F目は無視して2F目でオンにする方法が特に思いつかなかったからあんなことにw
20:58 (vesper_AFK) あと押しっぱなしで暴発するというのは解決したみたいだけど、判定するのが30F目からだから、それより前に押し始めてると暴発するってことかな

参考:内部AIとAIフラグについて[MUGENの便覧]

学習AI

7/27-28
00:03 (mosa) ガー不と中段と下段だらけのキャラ
00:03 (mosa) 果たして固めを作る意味はあるのだろうか
00:04 (simotsuki) 崩せばええねんという発想
00:05 (mosa) 勝手に崩れていくんだよなあ…。一応CPUだと崩れないのか
00:05 (simotsuki) うーんAI作者次第っぽいけど
00:06 (simotsuki) 立ち下段とかガー不打撃とかは割と死ぬ
00:06 (mosa) ほほー
00:06 (mosa) そっか
00:06 (mosa) 相手の座りとかじゃないと
00:06 (mosa) 反応できないんだもんね
00:07 (simotsuki) 判断の方法次第だけどの。立ち下段については。基本下段で固めて中段を学習させてるAIもあるし
00:07 (simotsuki) ガー不の方は最初は喰らうと思ふ
00:07 (mosa) enemy,hitdefattrとかで判別とかは間に合わんよねぇ
00:07 (mosa) 学習AIはわからんねー。やっぱりあると
00:07 (mosa) 違うんだろうか
00:07 (simotsuki) 結構違うね
00:08 (mosa) ふーむ
00:08 (dry_ice) 学習AIって凄いイメージ有るんだけどどうなんじゃろ?
00:08 (simotsuki) まぁワンチャンから必ず即死するレベルだったらあんま関係無くなってくるけど
00:08 (mosa) 試合が長引けば長引くほど強くなりそう
00:08 (dry_ice) あぁ、なるほど
00:09 (simotsuki) どんくらい学習するかによるよ
00:09 (mosa) 食らったステートとか記憶するのかの
00:09 (simotsuki) 極めてったらキリがない。AI自体がそうだけど。
00:09 (mosa) まあそうよね
00:09 (simotsuki) 私はそうしとるね
00:10 (mosa) 入れてみたいけどまた公開が遅れて行きそうだしとりあえず対アーマー対策ぐらいで良いか
00:10 (simotsuki) とりあえず喰らった攻撃の発生と投げ覚えて次からは割りこめる攻撃には割り込む
00:10 (mosa) 発生も覚えられるのね
00:10 (dry_ice) 相手が特定のステートいたらXXXするみたいな?
00:10 (nns) 一回は喰らわないと覚えられないのが何とも
00:10 (DRM) 一回は食らっても良いという発想。なお十割
00:11 (dry_ice) なるへそ
00:11 (mosa) ふーむ、中々良さそう
00:12 (mosa) まあ時間かかりそうだしとりあえずは何度か攻撃スカッたら即死させる程度にしておこう
00:12 (dry_ice) 面白そうだけども記述めんどくさそう・・・
00:12 (simotsuki) 結構変数を喰うのが気になる
00:12 (DRM) まぁ変数バカスカ使う羽目になるでw
00:12 (mosa) あー
00:12 (dry_ice) あー
00:12 (mosa) ふぁー(´・ω:;.:...
00:12 (simotsuki) ワシは学習だけで20個使ってる
00:12 (dry_ice) すごいなw
00:12 (DRM) 管理が面倒っちゃ面倒やね
00:13 (simotsuki) ヘルパーに覚えさせられないからね
00:13 (simotsuki) 引き継げないし
00:13 (nns) 自分は15個かなー
00:13 (mosa) 前一度食らったら死なない奴とか-2ステートに1700kbぐらいぶちこんでたな
00:13 (mosa) 重い原因だった
00:13 (mosa) 変数アレルギー
00:14 (dry_ice) あ、そうかヘルパーの変数は次のラウンドじゃ引き継げないんだったな
00:14 (simotsuki) 割とAIはクソみたいにメンドイデ
00:14 (simotsuki) 飛び道具感知ひとつとってもメンドイ
00:14 (mosa) 突き詰めるとワンチャンで殺したほうが早いんだよねぇ
00:14 (simotsuki) 後重力計算とか諸々
00:14 (mosa) やっぱりより人間らしい精度高いAIのためなら使えるけど
00:15 (mosa) 勝つためなら必要じゃないって感じか
00:15 (mosa) 完成度高めるなら学習と
00:16 (simotsuki) まぁマジで強さによるさね。狂ったレベルならもはや存在がAI殺しレベルで学習など何の意味も為さないw
00:16 (mosa) デスヨネー
00:17 (nns) 並強ならあった方が間違いなく強くはなりますねー
00:19 (dry_ice) だよなーw

重力加速度

9/16
22:22 (hitachi) んー…敵の位置予測難しいなあ
22:23 (hitachi) y=y0 +vt +at^2なんだがうまくいかん
22:23 (mapelao) おろ? 0.5はかけないん?
22:23 (hitachi) ああ0.5もかけてるけど
22:24 (mapelao) ふむ。。
22:24 (hitachi) ただ敵の位置に打ち込むと速度によっては回避されるから偏差射撃をやろうと
22:24 (rakurai) あれだ、相手の重力加速度をちゃんと見ないと
22:25 (hitachi) enemy,const(Movement.yaccel)ですよね
22:25 (rakurai) fvar(26):=Ifelse(enemynear,movetype=H&&(enemynear,stateno!=[120,169]),enemynear,gethitvar(yaccel),enemynear,const(movement.yaccel))
22:25 (rakurai) まあ間違っちゃいないけどねそっちでも。
22:26 (hitachi) ん?
22:26 (hitachi) 45とかの場合は
22:27 (hitachi) ああ違うstatetype=Aは前提か
22:28 (rakurai) 自分は最後に(p2statetype=A)*移動予測 になってる
22:29 (rakurai) あと、重力加速度を加算されるのは1Fずれるから
22:29 (rakurai) y0+vt +at*(t-1)が正解
22:30 (hitachi) ふむ
22:30 (mapelao) 1Fずれるっつか、厳密には階差だしの、加速度計さん。
22:32 (mapelao) 時間の最小単位が、現実では無限小だけど、mugen上では1Fっていうアレ。

参考:加速度について[MUGENの便覧]

AI_振り向き

6/19
22:30 (dry_ice) さてAI作るかぁ
22:33 (dry_ice) 最初は歩いてなおかつ振り向いてくれるようにするかぁ
22:59 (dry_ice) うーん、歩きはなんとか出来たが・・・ 振り向きしてくれないな・・・
23:00 (dry_ice) コモンの0ステで振り向き動作とかもしてくれるはずだが・・・
23:00 (ni-san) 20ステ固定したんだから勝手にターンしませんYO
23:01 (Rick) ctrl=0式なら振り向きませんね
23:01 (dry_ice) 0ステに戻って無いってことですか
23:01 (Rick) 自動振り向きの条件はctrl=1の状態で地上にいることです
23:01 (dry_ice) うぅむ(´・ω・`)
23:01 (dry_ice) fmfm
23:01 (ni-san) なんで0ステにctrlトリガー突っ込まんと
23:02 (ni-san) チェンジステートにctrl仕込むほうが楽ですがw
23:02 (Rick) 私のオススメはassertspecialでnoautoturnにしてから、ステコンでturnを実行する方法です
23:03 (ni-san) 相手の向き向いてなかったらターンしろよな! って命令すればOK
23:04 (dry_ice) 相手の場所を確認するってことでしょうか?
23:04 (Rick) ですね
23:05 (Rick) type=turn trigger1=ctrl&&(StateType=S||StateType=C) trigger1=P2Dist X<0が一番シンプルな方法です
23:05 (Rick) ただ歩きをctrl=0にしたのであれば、ctrlの部分をctrl||StateNo=20とかにする必要がありますが
23:05 (dry_ice) これはAIで判断ですよね?
23:05 (Rick) もちろんです
23:05 (dry_ice) ですよね
23:06 (ni-san) 人間でやったら勝手に振り返る怖い現象にw
23:06 (dry_ice) なるほどw
23:10 (dry_ice) あ、歩きのトリガーなんですが
23:10 (dry_ice) trigger1 = enemynear,movetype != A
23:11 (dry_ice) 自分では近くの敵が攻撃状態以外だったらとしてるつもりなんですがあってますかね?
23:11 (ni-san) うn
23:11 (dry_ice) 良かったw ありです
23:19 (dry_ice) んぁ、走りのステートにもコマンドあったのか 全然気づかなかった
23:20 (Rick) デフォのラン型だと歩きと違って戻る記述がありますね
23:20 (dry_ice) ですね
23:21 (dry_ice) だけどコントロール返してないのか だから止まったりしたのね
23:23 (dry_ice) うん、こう見るといろいろと見落としてるなぁ・・・w
23:23 (ni-san) このへんは凶悪関係ない知識ですからねえ
23:24 (ni-san) ステコン1個で済む即死なんかよりよっぽどむずいw
23:24 (dry_ice) ですねw
23:24 (Rick) コモンは初心者がぶち当たる壁の1つですね
23:33 (dry_ice) おぉ!動いてくれたし攻撃もしてくれた! kfm倒せたーw
23:33 (Rick) おめでとうw
23:34 (dry_ice) (前は何もせずにサンドバック状態だったw

AI_歩き

6/14-15
21:28 (dry_ice) とりあえず、超簡易AI作るかぁ
21:55 (dry_ice) あら?なんでこのステートで固まる
21:57 (dry_ice) あーん?どうなってんだこりゃ?
22:03 (dry_ice) (;´Д`)・・・どうしてこうなった・・・
22:04 (dry_ice) 早速バグが発生かw なんだこれw
22:06 (dry_ice) あー(;´Д`)これか なんでレヴァ剣しか使わないのかと思ったらw
22:07 (teki) 解決されましたか
22:07 (dry_ice) ステート0でなぜか敵に近づいて訳わからん状況でしたw
22:08 (dry_ice) 立っているのにスーッと敵に近づいてたからすごいシュールw
22:10 (teki) 常時監視の暴発ですか?
22:11 (dry_ice) かはわからないですね・・・(知識不足
22:15 (dry_ice) よし、ちゃんと歩いてくれてる
22:29 (dry_ice) ( ゜д゜) 今度は起き上がりキャンセルか・・・w
22:35 (dry_ice) AI作るのってこんな難しいのか・・・
22:36 (ryusei_) ctrl入れて場いいよ
22:38 (dry_ice) ctrlですか?
22:38 (ryusei_) 条件にctrl入れてれば普通に動くはず・・・
22:39 (ryusei_) ただ、うりえるふらんのこうぞうがわからんからなんともいえぬが・・・
22:40 (dry_ice) まぁ、ですよね
22:40 (dry_ice) だからレヴァ剣連発やめろw
22:41 (ryusei_) まぁ、ctrl入れた方がいいかもね とりあえずだけど
22:41 (dry_ice) ですねぇ・・・
22:48 (ryusei_) 歩いてくれないのは内部処理が原因かなっと思うぬ
22:48 (dry_ice) うーん、なんだろう・・・
22:49 (ryusei_) 歩かせたり、ずっとしゃがませたいのなら ctrl=0にしないときついかもぬ
22:50 (dry_ice) ctrl=0ですか・・・
22:51 (ryusei_) 一応、アルク場合でもctrlついてるからぬ
22:51 (ryusei_) 歩く場合
22:52 (dry_ice) ふむふむ
22:54 (ryusei_) ああ、AIで歩かせるなら stateno!=20 もいるぬ
22:55 (ryusei_) いや、これいらねえかな・・・ 条件にctrl入れてるだけなら・・・
22:57 (dry_ice) ・・・?AIの場所はここがいいとかあるんですか? サイト毎に-1ステだったり-3ステだったりするんですが
22:58 (simotsuki) ステート奪われないならどっちでも良いけど
22:58 (simotsuki) -1で困る事は無いと思うから-1でいいと思う
22:58 (dry_ice) ふむ、ありがとうございます
23:18 (dry_ice) うーん、条件が少なすぎるのも駄目かー
23:46 (dry_ice) ・・・うまくいかんなぁ
23:47 (dry_ice) 自分で作ったキャラなのにわけがわからんw
23:53 (dry_ice) うぬーすいませんがAIを作る際に参考にしたキャラもしくはサイトとかありますか?うまく出来なんです・・・orz
23:53 (DRM) http://homepage3.nifty.com/andil/mugen/
23:53 (vesperAFK) [URL] ADIのMUGENメモ
23:53 (DRM) 自分はここを参考にした
23:54 (dry_ice) ふむふむ
23:54 (SAIKEI) AIだと(ガタ
23:54 (simotsuki) AIは最初むずかしいかもねw
23:54 (Rick) そもももどこで躓いてるかで大分違ってきますけどねー
23:54 (dry_ice) そうですか・・・
23:55 (Rick) 技が出ないとかそういう次元なのか、立ち回りをどう制御するかという話かで全然違いますしね
23:55 (simotsuki) 凶悪製作者は苦手って人多いんじゃないだろか
23:55 (dry_ice) とりあえずは普通に歩いてくれないんですよね・・・(
23:55 (SAIKEI) 歩きは実はAIの中でも難しい
23:55 (dry_ice) えぅ・・・
23:55 (Rick) 常に同じアニメで変わらないなら、20ステートでChangeAnim trigger=Anim!=20にすると良いかもです
23:57 (SAIKEI) 自分のAIの作り方は他の人と違うから参考にならん
23:57 (dry_ice) 0ステートでスーッと動いて敵に近づくからシュールなんですよね・・・w
23:58 (Rick) それは20ステートに0ステに戻る記述があるからです
23:58 (SAIKEI) うむ
23:58 (Rick) AI起動時はその記述が働かないようにしましょう
23:58 (SAIKEI) 平成㌢さんのAI説明書にコモンステートのAI仕様化の項目参考にすれば上手くいくようになる
23:59 (SAIKEI) 無かったら歩き自体を「一つの技」と捉えよう
23:59 (dry_ice) なるほど・・・
23:59 (SAIKEI) ctrl=0にすると制御が基本的に楽になる
23:59 (Rick) コモンステートは人操作しか考慮していない作りであることは頭に入れておくと良いですね
00:00 (Rick) あーそうでした
00:00 (SAIKEI) mugen内部の自動ステート移動はctrl=1のときしかならないから多くのAIは立ち以外ではctrl=0にしているかな
00:01 (Rick) assertspecialのNoWalkで防げたかな・・・
00:01 (SAIKEI) 立ちから歩きへの暴発は防げるね
00:02 (Rick) 歩きから立ちのステート移動も防げましたっけ?
00:02 (SAIKEI) そっちはなかったと思う
00:02 (Rick) じゃあ0ステに戻るということは、歩き命令自体にランダムを入れてるからでしょうね
00:03 (Rick) しかし常に0ステートで・・・?
00:06 (dry_ice) 難しイィなぁ
00:06 (Rick) ちょっと間違ったことも言ってしまったのですみません
00:06 (dry_ice) いえいえありがとうございます
00:10 (dry_ice) 一応コモンステの移動とかctrl=0にしてみるか・・・
00:11 (SAIKEI) で、コモンステートのほうに歩きから立ちに戻るためのchangestateをいれる
00:11 (SAIKEI) そういう感じでAIを制御してゆく
00:12 (dry_ice) 0ステへのChangeステートですjか?
00:12 (SAIKEI) そうそう
00:12 (SAIKEI) 歩きっぱなしから戻れなくなるからね
00:12 (dry_ice) なるほど・・・
00:12 (SAIKEI) 作業を整理するならAIを書いてる常時監視に
00:13 (SAIKEI) triggerall=stateno=20
00:13 (SAIKEI) で条件をつけたchangestateを書いてもいいかな
00:13 (SAIKEI) コモンステートをいちいち開かなくて済む
00:13 (SAIKEI) value=0ね
00:14 (SAIKEI) このような記述はAIの中でも優先度を最低レベルにしたほうがいい
00:14 (SAIKEI) つまり下のほうに記述かな 常時監視では
00:14 (dry_ice) ホントに難しいですね・・・
00:15 (SAIKEI) だいじょーぶだいじょーぶ 慣れだよ慣れ
00:15 (dry_ice) ・・・すいませんがコモンステに書くトリガーの条件はどうしたらいいですかね・・・?
00:15 (dry_ice) チェンジステートのトリガーは
00:15 (SAIKEI) 歩きを解除したい条件だな これが結構難しい
00:15 (SAIKEI) といっても
00:16 (SAIKEI) テンプレがあるのでそれを参考にしよう
00:16 (SAIKEI) はりつける
00:16 (dry_ice) すいません
00:17 (SAIKEI) ぬおー AI説明書がないー
00:19 (SAIKEI) [state ]
00:19 (SAIKEI) type=changestate
00:19 (SAIKEI) value=0
00:19 (SAIKEI) triggerall=(AIフラグ)
00:19 (SAIKEI) triggerall=facing*(enemynear,pos x-pos x)>0
00:19 (SAIKEI) trigger1=p2bodydist x>=90
00:19 (SAIKEI) とりあえずこんな感じにしてみてはどうだろう
00:19 (SAIKEI) これで歩きモーションできたら成功
00:19 (dry_ice) ありがとうございます
00:19 (SAIKEI) 歩きへいく記述は常時監視に
00:20 (SAIKEI) [state ]
00:20 (SAIKEI) type=changestate
00:20 (SAIKEI) value=20
00:20 (SAIKEI) triggerall=(AIフラグ)
00:20 (SAIKEI) triggerall=facing*(enemynear,pos x-pos x)>0
00:20 (SAIKEI) trigger1=p2bodydist x<100
00:20 (SAIKEI) ctrl=0
00:20 (SAIKEI) こんな感じかな
00:20 (SAIKEI) あ、上のchangestateにはctrl=1を追加ね トリガーではなく
00:20 (dry_ice) これは-2ステートですか
00:21 (SAIKEI) -2はだめだぞー
00:21 (dry_ice) アホか俺はw 常時監視って言ってるじゃん・・・
00:21 (SAIKEI) AI書いてる常時監視ね
00:22 (SAIKEI) -3でも-1でもよい
00:23 (dry_ice) 歩いてくれましたー!ありがとうございます! 
00:24 (dry_ice) ただダメージ受けなかったけどどうしてなんでしょうか?
00:24 (dry_ice) 20ステートにいっぱなしだからでしょうか?
00:25 (simotsuki) 20ステート自体にそんな効果は無いよw
00:25 (dry_ice) うーんw
00:25 (ni-san) アーマーキャラじゃねえの!?
00:25 (SAIKEI) あー
00:25 (SAIKEI) すまない
00:25 (SAIKEI) movetype!=h
00:25 (SAIKEI) を入れよう
00:25 (dry_ice) ちゃいますよw ヘルパーアーマー貼ってないカラーでしたから
00:25 (SAIKEI) 歩きへのchangestateに
00:25 (SAIKEI) あとtriggerall=ctrl
00:26 (SAIKEI) を忘れてた
00:26 (SAIKEI) これも歩きへのchangestateにね
00:26 (SAIKEI) これでダイジョブなはず
00:28 (dry_ice) ちゃんとダメージ受けてくれましhた
00:28 (dry_ice) ホントもうすいません・・・orz
00:29 (SAIKEI) これはこちらのミスでござった
00:32 (SAIKEI) とりあえず復習ね
00:32 (dry_ice) はい
00:33 (SAIKEI) 1.コモンステートはmugen内部処理が面倒なので立ち以外ではctrl=0にしてしまう 
00:33 (SAIKEI) 2.コモンステートに移動させたらコモンステートからもとに戻ってくる記述を入れる
00:33 (ryusei_) SAIちゃん教室のはじまりやな
00:33 (SAIKEI) 3.changestateには基本的にはtriggerall=ctrl=1 || (特定の条件用) を入れておく
00:33 (SAIKEI) この三つを意識しよう
00:34 (dry_ice) 了解です
00:34 (SAIKEI) 3つ目の条件はどのchangestateにも必要であるが、まあキャラに用意されたchagestateの条件を破らないようにさえしてれば暴発はないだろう
00:34 (simotsuki) AIはさいけーさんが一番詳しいだろうw
00:35 (SAIKEI) AIを作るときは元のキャラのchangestateからcommand関係のトリガーを抜いたもので制御される
00:35 (SAIKEI) そこへ代わりにAI用の条件(距離とかコンボとか)を加えることでAI制御が可能となるわけなのだ
00:35 (SAIKEI) 人操作条件を排除してAI条件をいれていく 基本的にはこの作業の繰り返し
00:36 (dry_ice) fmfm
00:36 (SAIKEI) あとはAI条件をどのように組み込んでいくかがAI作成のメインである
00:36 (SAIKEI) 書き方は千差万別だがある程度テンプレ化もされてるので他人のAIを見るのも良し
00:38 (dry_ice) なるほど・・・
00:38 (SAIKEI) AI全体として必要なのは大体 反撃(切り替えし)、コンボ、起き攻め、ガード、立ち回り
00:39 (SAIKEI) に分類される 起き攻めはまあ起き上がりに重ねるだけなのでそんなに難しくない
00:39 (SAIKEI) 立ち回りはまあ最初のうちは
00:39 (SAIKEI) 距離が離れてたら頻度低めの飛び道具、近づく
00:39 (SAIKEI) 技の範囲に敵がいたらとりあえずなんか技振る
00:39 (SAIKEI) くらいでも結構動いてくれる
00:42 (dry_ice) なるほど・・・
00:44 (dry_ice) AI製作者ってすごいんだな・・・

AIフラグ

3/10-11
17:20 (DRM) http://monoai.blog84.fc2.com/blog-entry-401.html
17:20 (vesper_AFK) [URL] ふぁんしーむげん ヘルパーを使わないでできるだけ早くAI起動
17:20 (DRM) 何か新しいAI起動法が
17:21 (DRM) 発見された?
17:21 (ryusei_) ほえー
17:21 (ryusei_) きじゅつがなげえ・・
17:21 (ryusei_) まあ、暴発対策考えたらこうなるのかぬ・・・
17:23 (simotsuki) ほう
17:23 (simotsuki) これ用は人操作だと両方満たしちゃうけどAIなら片方だけ選択するって事かね
17:24 (DRM) そういうことになるんかねぇ
17:34 (vesper_AFK) あ~、なるほど。人操作だと必ず"a"と"aAI_0"と"aAI_1"を満たすけど、内部AIはCommandのラベルを実行するから、一つだけ成立されたらそれはAIということかぁ。
17:37 (vesper_AFK) この前Commandを検証した時にここまで発想出来れば、と悔やんだり(
17:39 (simotsuki) これ中々良いかもしれない
18:19 (DRM) このAI起動法がめちゃ早い気がする
18:19 (DRM) 方向キー込みで
18:20 (simotsuki) かなり早いとは思う。一つでヘルパー式と大体同じじゃないかなぁ
18:21 (simotsuki) 一つってか基本コマンド各種1つずつか
18:23 (ryusei_) 方向キーもあればすごくはやくなるのかぬ
18:28 (vesper_AFK) 動けるようになると同時に起動してるようにみえるなぁ。
18:30 (simotsuki) ヘルパー式も早いからその為に更新する程では無いけど、更新する時にこれに変えるのはアリだね~
18:33 (vesper_AFK) ヘルパー式は作ったこと無いけど、これは導入が簡単だなぁ。 AI用Commandを減らせるってのもあるのかな?
18:36 (simotsuki) んにゃ、ヘルパー式自体はコマンド増えないから減らせはしないね
18:36 (ryusei_) コマンドに余裕があるキャラじゃないときついぬー
18:37 (simotsuki) メリットは暴発が無くなりそうって事と、失敗する事が無さそうって事とべすぱーさんがいった用に導入が簡単そう
18:37 (simotsuki) って事かね?
18:38 (simotsuki) とヘルパー出さなくていいことかw
18:38 (ryusei_) いちばん肝心の部分ェ・・
18:40 (vesper_AFK) あ~、調べてきたけどヘルパー式はCommand作らなくていいのかぁ。勘違いしてた。
18:41 (simotsuki) 総合するとBKさんのヤツの方が良さそう
18:42 (simotsuki) ヘルパー式は失敗する事と謎の暴発あるし
18:42 (vesper_AFK) ふむふむ
18:42 (simotsuki) まぁまだ詳しく分かってないから確実ではないけどw

00:42 (vesper) http://monoai.blog84.fc2.com/blog-entry-401.html そういや、これいいなぁと思った。
00:42 (vesper) [URL] ふぁんしーむげん ヘルパーを使わないでできるだけ早くAI起動
00:42 (vesper) 人が少ない頃に話題になってたけど(
00:43 (DRM) もう早速導入した(
00:44 (simotsuki) 更新ついでに私もこっちにしよかな~
00:45 (rakurai) なるほどね、これいいかも
00:45 (DRM) メッチャ早いんよこれ
00:47 (SAIKEI) 二つ以上同時にオンにすることってあるのかな?
00:47 (vesper) あるよ
00:47 (SAIKEI) ふむ
00:49 (vesper) https:// この画像の左にあるボタンは内部AIが押したもの
00:50 (vesper) まぁ正確には押したんでなくて、真にしたコマンドのラベルだけどねw
00:51 (vesper) ごめん、違うかも。
00:51 (vesper) というか違う。
00:52 (vesper) 複数を同時にオンにする事は実験してないです。 この画像は証明になってないことに今気づいたので。
00:53 (blue-eyes) 私が実験キャラ作ってみましょうか?
00:53 (blue-eyes) たぶん小一時間あれば作れるはずなので・・・
00:58 (vesper) あ、同時入力されることもあるっぽい
00:58 (vesper) [state ]
00:58 (vesper) type = null
00:58 (vesper) trigger1 = command="start"&&command="a"
00:58 (vesper) trigger1=var(3):=100
00:59 (vesper) でvar(3)が100になったので。
01:00 (vesper) 熄氏のNothignessにコマンドのAとClipboardと↑のステコン増やしただけなので間違いないかと。
01:03 (SAIKEI) となると三つ以上もありえるんかなー
01:03 (SAIKEI) 自分で調べればいいだけか
01:03 (SAIKEI) 実験してみよう
01:04 (vesper) ただ4体で動かしてても2つ同時押しは1ラウンドに1回あるか無いかかも? stateno的に方向キーとのかぶりを含めたら多そうだけど。
01:05 (vesper) あ、3つ押しもあった。
01:05 (vesper) Ctrl+Sで加速すればもっと早く結果出せることに気づいた(
01:06 (SAIKEI) 相当小さいだろうけど一応暴発する可能性は文字通り微粒子レベルで存在してるわけね
01:06 (vesper) いや、
01:06 (simotsuki) 起動しない確立の方じゃないかな
01:06 (SAIKEI) unn
01:06 (vesper) うん、全コマンドを満たすことがあるなら起動しないことはあるかも。
01:07 (SAIKEI) 万能なものはないってところかー
01:07 (vesper) だね~。
01:36 (blue-eyes) おぉこれなら分かりやすい・・・
01:36 (blue-eyes) いい感じの実験キャラが出来ました
01:37 (vesper) 流石に7つ同時押しは99秒*1700ラウンドでも出ないっぽいなぁw
01:38 (vesper) 2000ラウンド突破
01:43 (vesper) 3000ラウンドでも起きないみたいだから、7つもあれば多分起動遅れは起きないと思う。
01:44 (SAIKEI) まあそこまでしなくてもいいっちゃいいわねw
01:44 (SAIKEI) しかし6つも同時にオンになるのかー
01:45 (vesper) いや、3つまでしか調べてない(
01:45 (vesper) 3の次に7を調べ始めたからw
01:45 (SAIKEI) ・-・
01:46 (vesper) 4つは確認
01:49 (vesper) 5つになるとぐっと確率が減るのか600ラウンド超えても出ないね。
01:54 (SAIKEI) humu
01:56 (vesper) 2000ラウンド突破しても出ない。7つの方は6000ラウンド突破しても出ない。

(以下しばらくvesperは内部AIはラベルを真にするのみで、人と同じキー入力は無い(内部AIのキー入力=ラベルを真)と考えていたので青眼氏と話が咬み合っていません。)
02:10 (blue-eyes) 一応私も調べてみましたが、複数のボタン同時押しは滅多に発生しないみたいですね
02:11 (blue-eyes) ただ、ボタン一つだけで入力できてかとまったく同じ内容のコマンドだと複数が同時に押されることが結構多いみたいです
02:20 (blue-eyes) どうなんだろ・・・
02:27 (blue-eyes) しかしこうやってみると、MUGENの内部処理による複数のボタン同時押しは結構な頻度で起こるみたいですね
02:28 (blue-eyes) 4つ同時押しもたまに起こってるのを見ますが、それでも”あらかじめ定めた4つ”を同時に押す確率はかなり低いですねぇ
02:29 (blue-eyes) あと、内部処理によるキー入力では、Sボタンは全く押されていませんでした
02:29 (vesper) ん?
02:30 (blue-eyes) startに該当するボタンです
02:30 (vesper) 関係ないと思うよ、こっちでは確認したし。
02:30 (blue-eyes) おろ
02:31 (blue-eyes) コマンド入力としては確認されるんですが、キー入力というか、ボタン押しの意味合いではSは押される気配が全くありませんでした
02:31 (vesper) ん?
02:31 (vesper) どういうこと?
02:32 (blue-eyes) たとえば・・・えっと
02:32 (blue-eyes) [Command]
02:32 (blue-eyes) name = "aI"
02:32 (blue-eyes) command = a
02:32 (blue-eyes) time = 1
02:32 (blue-eyes) [Command]
02:32 (blue-eyes) name = "aII"
02:32 (blue-eyes) command = a
02:32 (blue-eyes) time = 1
02:32 (blue-eyes) [Command]
02:32 (blue-eyes) name = "aIII"
02:32 (blue-eyes) command = a
02:32 (blue-eyes) time = 1
02:32 (blue-eyes) たとえばこんなコマンド一群があったとして、
02:33 (blue-eyes) 人操作ならびに内部処理によるキー入力では、これらのコマンド全てが反応するんですが、
02:33 (vesper) うん
02:33 (vesper) ん?
02:33 (vesper) 内部処理によるキー入力?
02:33 (blue-eyes) ですです
02:34 (blue-eyes) こちらから定義するコマンドとは別に、MUGENが勝手にキー入力を行ってるんです
02:34 (vesper) ラベルを真にするのとは別にあるの?
02:34 (blue-eyes) そのようです
02:34 (blue-eyes) 先ほどのテストキャラにてそれが確認できました
02:36 (blue-eyes) で、こちらから定義したコマンド入力を強制的にONにする方の内部処理では、前述の3つのコマンドのうちどれが1つだけが反応する、と言ったことが起こり得るようです
02:37 (SAIKEI) そうでないとchangestateで定義されていないステート移動とかガード辺りで不具合起こるもんね
02:37 (SAIKEI) ていうかできない
02:37 (blue-eyes) ですね。方向キーに関しては実験してませんが、その処理で無いとガードができなくなりますからねぇ
02:38 (blue-eyes) ・・・それで、肝心のSボタンに関してなんですが、
02:38 (blue-eyes) [Command]
02:38 (blue-eyes) name = "sI"
02:38 (blue-eyes) command = s
02:38 (blue-eyes) time = 1
02:38 (blue-eyes) [Command]
02:38 (blue-eyes) name = "sII"
02:38 (blue-eyes) command = s
02:38 (blue-eyes) time = 1
02:39 (blue-eyes) [Command]
02:39 (blue-eyes) name = "sIII"
02:39 (blue-eyes) command = s
02:39 (blue-eyes) time = 1
02:39 (blue-eyes) aボタンの時と同じように、こんな感じにSボタンのコマンドを複数用意したんですが、
02:40 (blue-eyes) 他のボタンとは異なり、SボタンだけはAI処理にすると全てのコマンドが反応したことは1度もありませんでした
02:40 (vesper) ふむふむ。
02:40 (vesper) 自分が確認したのはラベルを真にする効果のみの前提だったからなぁ。
02:41 (vesper) commandはs,a,b,c,x,y,zの7つでやってた。
02:41 (blue-eyes) なるほど。。。道理で話が食い違ってると(
02:42 (blue-eyes) 私のですと、その7つ全てに名前だけが異なるコマンドをそれぞれ5つ用意してました
02:43 (vesper) 方向キーは隠しラベルみたいなものがあって、反応してるのかと思ったけど、こっちはキー入力なのかぁ。
02:44 (vesper) sの話からすると。
02:44 (blue-eyes) かもしれませんねぇ・・・
02:45 (blue-eyes) 一応念のためですが、Sボタンのコマンドも、人操作なら全てのコマンドが反応するのは確認してますので、こちらのミスということもないはずです
02:47 (vesper) うん、500戦超えてもs2つなら反応ないね。
02:48 (blue-eyes) ですが、aとかだとたぶん試合開始後30秒もすれば10個くらいあったとしても全てが反応するんですよw
02:48 (vesper) うん
02:48 (blue-eyes) なので、実際のところこちらを参照する方が早いと思うんです
02:49 (blue-eyes) AIを感知するに置いて
02:49 (vesper) ん?
02:49 (blue-eyes) これを何らかの形で利用できればいいんですが・・・
02:50 (vesper) 人操作時はsキーをして下さいぐらいしか思いつかない(
02:51 (vesper) 最初に自分が2つ押しするのは1ラウンドに1回ぐらいといったのは、sとaの組み合わせだったからか。
02:52 (blue-eyes) あるいは、aボタンのコマンドを5つ用意して、それらのうち反応した数が0か5以外の数だったらAIをオンにする、この記述を全てのボタンに適用する、でもいいかもしれませんねぇ
02:53 (blue-eyes) 記述の量が嵩みますが、これなら確実かつ最速で判断をつけられるはずです
02:53 (vesper) それだったら結局BK氏のと代わりは無いような?
02:53 (blue-eyes) あー・・・(
02:54 (vesper) だからSキー押して(ry
02:54 (blue-eyes) たしかに手っ取り早いw
02:56 (vesper) どちらかと言うと、AIを切る手段か。
02:56 (blue-eyes) あーたしかに
02:56 (blue-eyes) Sを全て反応させるためには人操作で無いと無理ですからねぇ
02:58 (vesper) あれ?2つ同時されたかも? ミスな気がするけど(
02:59 (blue-eyes) 内部のコマンド入力が3つくらい同時に処理されることもあるので、s2つでも極稀に同時が起こりうるかもしれません
02:59 (blue-eyes) なので、Sに限っては5つくらい用意した方が安全かもしれません
03:01 (blue-eyes) 内部のコマンド入力の複数同時入力は私の身間違いかもしれませんが(
03:01 (vesper) コマンド入力=ラベルを真 だよね? 数え方あるのかなぁ。
03:02 (blue-eyes) うーん、そこらはまだ分からないですなぁ・・・うむむ
03:03 (vesper) Sキーを使った複数のコマンドが同時押しされるのはめったにないのは確か。
03:03 (blue-eyes) ですねぇ
03:16 (vesper) やっぱさっきのは自分のミスかなぁ。S2つなんだけどさっきと同じ3600ラウンド突破したけど出ないなぁ。
03:16 (blue-eyes) でしょうかねぇ・・・
03:18 (vesper) 1Pと3Pだけ内部AI起動させて、同時押しが出たら2Pをなぐる。 1度殴ると勝利するので、ラウンドの勝利数の差がでたら同時押しが有った。
03:19 (vesper) Ctrl+SとCtrl+Fで1ラウンドが一瞬で終わるようにして高速回転。
03:19 (vesper) そんな感じの検証方法。
03:19 (blue-eyes) なるほど
03:20 (vesper) さっきは攻撃が出るかのチェックに殴って、1ラウンド勝利したまま実験してた気がしないでもない。
03:20 (blue-eyes) あーw

3/12-13@2
23:40 (vesper) BKさんのAI記事見てから内部AIの実験してたけど、コマンド数を限界の126(AI専用コマンドが11*2)登録してると結構ヘルパー式と差が出るなぁ。
23:41 (vesper) あと、オプションのDifficultyはコマンドのラベルを真にする頻度が変わるみたいね。
23:42 (ni-san) ヘルパー式のほうを知らない俺ザンギエフ
23:44 (vesper) ヘルパーはkeyctrl=1でも内部AIには反応できない→ヘルパーが反応せず本体のみコマンド感知→AI。本体とヘルパーがコマンド感知→人操作
23:44 (vesper) って感じ。
23:44 (simotsuki) ヘルパー式は本体のコマンドのヘルパーのコマンドが一致しない仕様を利用してる
23:44 (simotsuki) 本体のコマンドと
23:47 (ni-san) 穣子ちゃんは11P12P以外コマンド式だから無意味に遅い時があるけど
23:47 (ni-san) 面白いからほっといてる(
23:48 (YANMAR) def選択式しかやったことないのぅ、凶悪キャラだし人操作無いだろーってことでw
23:48 (simotsuki) 自キャラは起動遅れると結構致命的だからヘルパー式使ってるw
23:48 (mapelao) 相手5150だと棒立ちになっちゃうしなぁ
23:48 (rakurai) 自分もヘルパー式。高カラーは常時ONだけど・・・w
23:48 (simotsuki) さんすーさんが前やったように1秒くらいで大半のキャラが倒せそう
23:52 (vesper) あ、ヘルパーが反応しないのはトレモのButton jamの話だった( 本体とヘルパーでキー入力は違うのを利用したのがヘルパー式か
23:53 (ni-san) そのヘルパーってすぐ消えるんかなコレ見る限り
23:53 (simotsuki) BKさんと理屈は似てると思う
23:53 (vesper) 判断したら消してるのかな。
23:53 (YANMAR) 人操作との差別という意味では似てるのかな
23:54 (simotsuki) 人操作の場合keyctrl=1のヘルパーは本体と同じコマンドになるはず
23:54 (mapelao) こんな方法があったのか
23:55 (simotsuki) でも本体AIもヘルパーと本体同時に同じボタンオンにする事があるから判断ミスもある
23:55 (rakurai) うん、そのせいで自操作中に暴発する事もある
23:56 (simotsuki) 後hitpausetime中?はなんか狂うっぽくて
23:56 (simotsuki) ヘルパー式だとたまに暴発する
23:56 (simotsuki) って感じかなぁ
23:57 (vesper) 内部AIはキー入力とコマンドのラベルを真にする2つの効果がある。 キー入力はs以外のa,b,c,x,y,z,U,D,F,Bを押す。 ラベルの方はcommandからランダムに真にする(多くても2つ?)。
23:58 (vesper) キー入力は本体とヘルパーで独立(プレイヤーごと?) ラベルは本体とヘルパーで真になるものが一致してるっぽい
23:58 (vesper) BK氏のはラベルを利用、ヘルパー式はキー入力を利用。
23:58 (mapelao) へー。。
23:59 (vesper) だと思う、自分が調べた感じ。
00:00 (YANMAR) 似てるようで違うのか・・
00:00 (YANMAR) ねゆまする
00:00 (mapelao) お疲れ様でしたm(__)m
00:02 (vesper) んで、ラベルはDifficultyの設定で頻度が変わるから起動速度の点だとヘルパー式に負けるみたいね。
00:02 (vesper) ただ暴発は起こさないと思う。
00:03 (vesper) あとCMD式に比べたらやっぱり早い。

03:16 (vesper) hitpause中にヘルパー式AIが暴発するのって、hitpause中は本体のCommandNameが真になってることが維持されて、ヘルパーのは偽になって暴発してるのかなぁ。 人操作かAIか判断したらヘルパー消すなら、なんでかよく分からないけど。
03:17 (simotsuki) 多分そんな感じだと思う
03:19 (simotsuki) 私は常駐ヘルパーにAI起動もやらせてるから消してないし
03:19 (vesper) なるほど~
03:20 (simotsuki) hitpausetime中に暴発する確立がかなり高かったから今は一発判断にしてる
03:20 (simotsuki) 一回目で一致したらもうヘルパー式は取りやめ
03:21 (vesper) ふむふむ。

上記のログには、この時点では分かっていなかったこともあり間違いも含まれています。
現在調べた限りの事は下記のリンク先にまとめています。
リンク:内部AIとAIフラグについて

加速度と処理順

7/21
14:47 (DRM) ちょーっと質問なんですが、長いので記事にしました(
14:47 (DRM) http://drmugen.seesaa.net/article/282328054.html
14:47 (vesperAFK) [URL] 落下速度について疑問: でぃーあーるM
14:49 (DRM) 計算結果と実際の位置が違ってくる理由が分からんばい・・・
14:50 (Sance) hitpauseとか関係ないよね?
14:50 (DRM) 落下中だから関係無いと思う
14:51 (Sance) 少なくとも摩擦は関係ない。あれはstatetype=SかCじゃないと何もしないから
14:51 (DRM) ふむ・・・
14:53 (Sance) うーん・・・ちょっとグラフかなんかにしてみるか・・・
14:53 (DRM) え、原因分かったんです?
14:53 (Sance) いや、分からないからグラフにしてみてみる
14:54 (DRM) あー(
14:58 (Sance) 難しいねぇ・・・
14:58 (Sance) 原因がイマイチ分からない
14:59 (DRM) うーむ・・・どういうことなんだ・・・ただの計算間違いなのだろうか・・・
14:59 (Sance) 記述での式はどうなってます?
15:00 (DRM) こぴぺでOKですか?
15:00 (Sance) いいですよ
15:00 (vesper) 多分処理順の問題
15:00 (DRM) TriggerAll = 1 || FVar(5) := IfElse(EnemyNear(Var(2)),MoveType = H,EnemyNear(Var(2)),GetHitVar(Yaccel),EnemyNear(Var(2)),Const(Movement.Yaccel))
15:00 (DRM) TriggerAll = 1 || FVar(5) := Var(7) * EnemyNear(Var(2)),Vel Y + FVar(5)*Var(7)*(Var(7)-1)*0.5
15:01 (DRM) Var(7)が発生F
15:02 (vesper) 距離計算をする瞬間の速度と、実際のフレームでの最終的な速度の違いだと思った。
15:03 (Sance) それが一番しっくり来る説明だねぇ
15:03 (DRM) んー?
15:03 (DRM) 速度の処理タイミングか
15:03 (Sance) ですねー
15:03 (vesper) ですです
15:04 (vesper) 説明に書き加えるべきか悩んだんですけど、実際の距離計算では問題になるか分からなかったので、書き加えてなかっったんですよ。
15:04 (vesper) 書き加えたほうがよさそうだなぁ
15:05 (Sance) DRMさんのブログにあったのを表にしてみたら
15:05 (Sance) http://blog-imgs-55.fc2.com/s/a/n/sance/yaccel1.png
15:05 (Sance) こうなったから
15:05 (Sance) 1Fごとにずれてるね
15:06 (DRM) おお・・・
15:06 (vesper) 最初の速度にも加速度を考慮させたら問題無いはずです
15:07 (Sance) Normalの下がいつもの式でActualの下が「計算結果 + 技の発生F*EnemyNear,GetHitVar(Yaccel)」になってる。Startupは発生速度ですね
15:07 (Sance) とりあえずまぁ、1Fずれてるのを修正したらおkって事なのかな
15:09 (DRM) 了解です
15:17 (DRM) おー、修正できた!ありがとうございます!
15:18 (Sance) おーなおりましたかー
16:23 (vesper) http://mugenbinran.web.fc2.com/acceleration.html#5 処理順に関することを追記してみた。
16:23 (vesper) [URL] 加速度について【MUGENの便覧】
17:09 (DRM) やべーw さっきの修正で驚くほど精度が向上した

加速度

7/8
02:06 (DRM) あれ・・・昨日の落下計算式何か間違ってる気がしてきた・・・
02:09 (DRM) 落下速度 = 初速度 + 時間*重力加速度 っていうのを基にして、
02:10 (DRM) Enemy,Vel Y + 技発生F*Enemy,Const(Movement.Yaccel) を導き出したけど・・・
02:10 (DRM) 落下速度ってそもそもEnemy,Vel Yだ(
02:11 (Sance) 重力計算は自分用に使うものや・・・w
02:12 (Sance) 数F後の相手の速度、位置を計算するためでもいいけど(
02:12 (DRM) 自分は後者をやろうとしていますw
02:12 (DRM) こんがらがってきた・・・
02:13 (Sance) ふむ・・・
02:14 (DRM) ちょっと見てもらいたいところがあるんですけど、いいですか?
02:14 (Sance) いいですよー
02:15 (DRM) ADIさんのメモなんですけど、
02:15 (DRM) http://homepage3.nifty.com/andil/mugen/Vel.txt
02:15 (vesperGameSkype) [URL] No Title
02:15 (DRM) これの2.落下速度ってところ
02:15 (DRM) 速度×時間)+(加速度×((時間×(時間-1))/2)
02:15 (DRM) これが理解できない・・・
02:17 (Sance) 一応高校の物理と同じ式なのよねー
02:17 (Sance) まず・・・
02:19 (Sance) ちょっと待って・・・久しぶりで少しこんがらがってきたw
02:19 (DRM) 土下座待機・・・ッ!
02:19 (ais) http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1364928823
02:19 (vesperGameSkype) [URL] 物理です。。式 x=vt+1/2at^2は次元的に正しいことを示せ。 x=座標で長さの単位 v... - Yahoo!知恵袋
02:19 (ais) これかな?
02:20 (Sance) それだねぇ
02:20 (SAIL_) 高校物理だねー
02:20 (Sance) 単純にさっきの式は今の位置からどれだけの距離離れてるかになる
02:20 (DRM) ・・・【゜Д゜;】
02:21 (ais) これ参考に考えたけど結構これ見ればわかるような
02:23 (Sance) 前から個人的に気になってたのはなんで(速度×時間)+(加速度×((時間×(時間))/2)じゃないのかだねぇ・・・
02:24 (Sance) 自分は確か高校物理で習う式をそのまま使ってるけど((時間×(時間-1))/2)にしてる人多いのよね
02:25 (SAIL_) -1ってなんだっけって一瞬考えた(
02:26 (Sance) うん・・・w
02:26 (Sance) まぁ、そこまで変わるものでもないけど・・・
02:27 (DRM) この式って距離を求める式・・・なのかな
02:27 (Sance) とりあえず自分はこの式を使って○F後の自分の位置、○F後の相手の位置を割り出して
02:27 (Sance) そこから距離を取ってる
02:28 (Sance) ○F後は攻撃の発生速度ね
02:30 (Sance) 慣れてきたら結構簡単になる・・・はず
02:30 (Sance) 空コンとかが凄いなら本当に厄介だけど
02:31 (DRM) 速さ*時間 + (加速度*(時間*時間)) * 0.5 ・・・理解できない(
02:31 (Sance) うーん・・・
02:32 (Sance) 式の説明をそのまますると・・・
02:32 (DRM) 速さ * 時間 = 距離 に何を足してるん?
02:32 (Sance) 加速度で増した速度によって追加される距離
02:35 (DRM) でもMugenのVel Yって1Fの間に進む距離じゃなかったっけ?
02:36 (Sance) そうなるね
02:37 (DRM) Vel Y に 加速度で増した速度~ を付け加えるんです?
02:38 (SAIL_) 加速度の話って
02:38 (SAIL_) 微分積分しっかり理解してないと難しいかも?
02:39 (SAIL_) 速度微分したものが加速度なわけだし
02:40 (DRM) 微分も積分もあやふやだ・・・
02:44 (ais) 微積分はMUGENの記述より楽だと思う(
02:44 (DRM) Vel YにはSanceさんの言う 加速度で増した速度によって追加される距離 は含まれてない?のかな・・・
02:45 (SAIL_) Vel Y が何のことだけ分からない自分には死角がなかった(
02:46 (SAIL_) あ、上にあったか
02:47 (SAIL_) ふむ・・・加速度でました速度によって追加される距離は含まれると思うよ
02:49 (SAIL_) 図を描けば説明できると思うんだが図が書ける環境じゃないな(
02:50 (DRM) では、ここで一番最初の疑問に戻りますが、
02:50 (DRM) (速度×時間)+(加速度×((時間×(時間-1))/2) )
02:51 (DRM) = Vel Y と言うことで良いんでしょうか・・・?
02:51 (Sance) = ΔY
02:51 (SAIL_) デルタYだね
02:52 (SAIL_) デルタYっていうか進んだ距離って表現が正しいか
02:52 (DRM) Δって微分だっけ
02:52 (Sance) そうなる
02:53 (Sance) 進んだ距離ってわけでもないねぇ、初期速度が上方向でも時間経過で速度がマイナスになるからΔで(
02:53 (SAIL_) ようは変化した距離かな
02:53 (Sance) だね
02:53 (SAIL_) 時間0からTの間に
02:54 (SAIL_) 高校物理の内容なんだが人に説明しきれる気がしない・・・w
02:55 (Sance) 自由落下とかの考え方が分かりやすいのかなぁ・・・
02:56 (SAIL_) そうかもぬ・・・
02:56 (SAIL_) まぁ日本の高校物理で最初に習う範囲は自由落下ですし
02:56 (SAIL_) そっからかな
02:57 (SAIL_) あー自由落下だっけ?速度関連なのは確かだけど
02:58 (SAIL_) V=初速度 + 加速度×t から習う
02:58 (Sance) それはtになった時の速度だねぇ
02:59 (SAIL_) あー
02:59 (Sance) 速度0、重力加速度9.8の状態からボールかなんかを落としたら最初は停止状態。つまり初期速度は0。これを式に当てはめると V=0+9.8t でV=9.8@t=1 V=19.6 @t=2って感じになる
03:00 (Sance) まぁ、これはMUGENではどうでもいいとして
03:00 (SAIL_) 9,8ってのは重力加速度。まぁ要は加速度ね
03:00 (Sance) そしてMUGENに必要なのはどれだけ移動したかになるから
03:02 (Sance) ΔY=vt + 0.5at^2を使ってそれを計算する
03:02 (Sance) つまりさっきのサイトにある式ね
03:03 (mapelao) それ、不正確ですよ。。
03:03 (Sance) あれ?
03:03 (mapelao) 加速度は、
03:03 (mapelao) MUGEN上だと、
03:03 (mapelao) 1FごとのVELの増加量なので。。
03:03 (Sance) あー
03:04 (mapelao) かなりずれます。
03:04 (Sance) ΔY=vt + 0.5a*t*(t-1)なのか
03:04 (Sance) だから
03:04 (mapelao) 階差の式ですね。。
03:04 (mapelao) 1+2+3+・・・みたいな。
03:04 (Sance) 納得した
03:05 (SAIL_) へー(ついでに納得)
03:06 (DRM) ΔY = 0~tの間で変化した距離?だっけ。この変化っていうのがいまいち理解できないですけど・・・
03:07 (Sance) 最初の位置が Pos Y = -100だとして
03:08 (Sance) 5F後に Pos Y = -50 だったら ΔY = 50、つまり50ドット移動したって事に
03:09 (Sance) Excelあたりで表かなんか作ってみたら分かりやすいとは思うんだけど…
03:09 (Sance) うーん・・・
03:10 (SAIL_) Y軸に距離、X軸に速度の表作って、それの面積の考え方ってのをちょっと考えたんだが
03:10 (SAIL_) まずネット上では無理だわ(
03:10 (DRM) 50ドット変化したってことか・・・上下左右に変化するのかと思っていました(
03:10 (Sance) というか一応AI用に式を使うだけなら理解する必要もあまりないのよねぇ・・・
03:11 (Sance) とりあえずこうなるって感じで分かっておけばw
03:11 (SAIL_) うん
03:11 (SAIL_) Δとか先生にロクに説明もされないまま使ってたけどずっと使ってたらいつの間にかどんなもんか大体分かってたし(ぉぃ
03:12 (SAIL_) そのうち慣れる(
03:17 (DRM) 微分積分についてはクルクルパーですけど、何となくわかりました。
03:17 (DRM) ありがとうございました
03:18 (Sance) がんばれー
03:19 (SAIL_) がんばれー
12:44 (DRM) そうか・・・昨日見た式が距離を求める真・公式だったわけか・・・
12:45 (DRM) 小学校の時に習った 時間*速度が全てだと勘違いしていた・・・
12:46 (DRM) 時間*速度 + 加速度を考えたもの これが距離を求める本当の公式ってことだったんだな・・・
12:47 (DRM) この式での加速度が 0 の時に限って時間*速度=距離なわけか・・・
12:48 (Sance) そうなるねー
12:50 (DRM) いやー、本当に感謝ですわ・・・ 一生気付かなかったかもしれない・・・
15:33 (DRM) なるほど・・・縦軸を速度、横軸を時間として考えれば (加速度*時間^2)*0.5が出てくる理由が簡単に分かるな・・・
15:36 (DRM) いやはや、これはすごいw

当たり判定判断

7/5
21:49 (simotsuki) 個人的には当たり判定系がムズイです。というか諦めてしまった
21:50 (macbeth_) あー、当たり判定系は難しいねぇ
21:50 (macbeth_) なんかよくわからない判定してるキャラもいるs
21:51 (DRM) 相手の技のリーチとかっすかね
21:52 (mapelao) 事前に予測するのは不可能そうですねえ
21:53 (simotsuki) 身長で大体の予測を立てるみたいなんですが、私はそこまでのAIは組めませんでした
21:53 (simotsuki) ちびキャラとか相手だとまともに戦えないと思います
21:53 (DRM) えー、何それー【´Д`;】 絶望感MAX
21:53 (mapelao) ぶっちゃけcnsの設定は雑なの多いし、
21:54 (mapelao) 当てにならないと思いますけどねえ
21:54 (macbeth_) ってかさ、くらい判定が妙に後ろにいってるのが結構いてコンボ面倒(
21:55 (mapelao) コンボは無理ですwww格ゲじたい自分自身がうまくないので
21:55 (simotsuki) 喰らい判定は製作者によりますね…w
21:55 (macbeth_) 自キャラのコンボがシビアすぎて人操作で再現できませんヽ(*´∀`)ノ
21:55 (simotsuki) 仰け反った時に判定まで仰け反るとまともにコンボ出来ぬう
21:55 (mapelao) 細かく設定してるのもあれば、頭と胴体で分けてるのもあれば、真四角なのもありますしねえ
21:56 (simotsuki) 私も自分のキャラが組んだコンボはとても出来ないw
21:57 (macbeth_) まぁ基本的には相手の中心に攻撃判定被せることが出来ればいいんだろうけど、そこまで精巧に作るのは大変な気がする(
21:58 (mapelao) p2dist x-p2bodydist xとかですかね
21:58 (mapelao) あー、でも、
21:58 (simotsuki) リックさんとかは開幕にhitdefの攻撃判定を細い線みたい降ろして測ってるみたいでしたね
21:58 (mapelao) 押し出し判定と実際の判定は違うのか。。。
21:58 (macbeth_) 距離関係+発生フレーム+相手速度計算
21:58 (macbeth_) ヘブンズさんとかは開幕で計測してるね
21:59 (mapelao) そのためのground.type=noneなのか。。。

AI:攻撃判定出現フレーム予測

7/2
22:22 (DRM) ちょっとAIのことで質問があるんですが、
22:22 (DRM) 今、相手の攻撃猶予フレームを調べているんですが、
22:22 (DRM) TriggerAll = EnemyNear(Root,Var(2)),MoveType = A
22:22 (DRM) TriggerAll = EnemyNear(Root,Var(2)),HitDefAttr = SCA,NA,SA
22:23 (DRM) 条件はこれだけで大丈夫ですかね?
22:23 (DRM) この条件で、相手のStateNoとTimeを保存するんですが・・・
22:28 (DRM) んー、大丈夫なのかな。まぁいいや
22:30 (simotsuki) ん?
22:31 (simotsuki) 相手の攻撃が出るまでのFを予測するって事ですか?
22:31 (DRM) そうです~
22:32 (simotsuki) 多分大丈夫だと思います。movetype=Aよりかmovehitの方が良いかもしれませんけども
22:34 (DRM) MoveHitなら確実に攻撃をしているってことですかね?
22:35 (macbeth) movehitはまずいんじゃないかなぁ
22:35 (simotsuki) 基本的にどっちでも問題無いとは思うんですけど攻撃中以外ではmovetypeをIに戻すようにしてる方もいると思いますので
22:36 (macbeth) movehitってことはhitdefが当たらないと反応しないから
22:36 (macbeth) 相手の攻撃を最速で被弾しないと…
22:36 (simotsuki) でもmovetype=Aだったら相手の攻撃がいつ来るか基本的に分かりませんぜ
22:37 (macbeth) そのためのhitdefattrじゃないの?
22:37 (simotsuki) 先だししてるキャラも結構いますよw
22:37 (DRM) 猶予Fを調べたいですからぬ
22:37 (DRM) 先だし?
22:38 (simotsuki) 攻撃判定が来るのがhitdefを打つよりも先のキャラです
22:38 (simotsuki) ドロウィンさんとかのキャラがそうだったと思います
22:38 (simotsuki) じゃない
22:38 (simotsuki) hitdefを打つのが攻撃判定が来るのよりも先
22:39 (DRM) あ、HitDefAttrが発生する条件ってHitDefが発動している間でしたっけ
22:39 (REL) です
22:39 (DRM) うげー・・・
22:40 (DRM) となるとこれだけじゃあ危ういってことだなぁ・・・
22:41 (macbeth) でもmovehitだと今度は遅れることがあると思うんですがねぇ…
22:41 (DRM) MoveType = Aで攻撃判定が出ていてかつHitDefが出ている・・・うーむ・・・
22:42 (DRM) 確かにこう考えるとMoveHitの方が良さげではありそうですなぁ・・・
22:42 (REL) まぁヒットした後も一応HitDefAttr続くんですけどね

処理順

3/25
14:22 (nns_) 並キャラのAI作ってたら最終ヘルパーが必要になったでござる
14:22 (macbeth) 並で最終設置かー(;´Д`)
14:24 (nns_) うーん、まぁ並キャラだし最終確保しなくても1F待てばいいか
14:27 (macbeth) まー、AIだと欲しいってのはわからなくもないですが…設置のために最低でも1フレーム占有する必要があるのが怖いですねぇ
14:28 (Rel) 最終にタゲステさせてガードするんです?
14:29 (nns_) 単に出たばっかりのヘルパーのMoveTypeを見たいってだけですね
14:30 (nns_) StateDefのMoveType設定が有効になるのって
14:31 (nns_) そのヘルパーの行動開始時ですよね?
14:33 (macbeth) 行動開始時なので相手がヘルパーからヘルパーを出して、さらにそのヘルパーが前の方に出てこない限りは1フレームの間movetype=Iが持続しますねぇ
14:35 (nns_) ですよねぇ
14:35 (nns_) MoveType = IとHの処理順ってIが先でしたっけ?入れ替わるのはAだけ?
14:35 (macbeth) 入れ替わるのはAだけだったはず
14:35 (nns_) なる
14:36 (nns_) つまりリダイレクト掛ける側をMoveType = Hにしても意味なしと・・・
14:37 (macbeth) ただ何かを監視するヘルパーをmovetype=Hにしておくとちょっと問題があるかも?
14:38 (nns_) なんでしょう?
14:38 (macbeth) movetype=hにすると時止め耐性が消えるはずなんで相手の時止めで止まっちゃうかなーと
14:38 (macbeth) まぁ相手の必殺、超必殺中にそのヘルパーが行動する必要がなければあまり関係ないですが…
14:39 (nns_) あー、多分関係ない・・・かな?いや、あるかも
14:39 (nns_) まぁ無難にIにしとこう
14:40 (macbeth) 何かを常時監視するようなヘルパーはIにしておくのが無難ですねぇ
14:42 (nns_) 常々思うけどAI作製って凶悪キャラの知識役立ちますよね
14:43 (macbeth) AIも凶悪もmugen内部での処理担当ですからねぇ
14:44 (mosa) 処理順とかは結構役に立つよね
14:44 (macbeth) ですねぇ
14:44 (mosa) AIも割と記述順大事
14:45 (mosa) ってか順番間違えるとあばば(´゚'ω゚`)

相手が画面端に向かって吹っ飛んでいるかどうか

2/22
21:41 (Rick__) Sanceさんいます?
21:44 (Sance) いる
21:44 (Rick__) ちょっとAIの記述で相談らしきものが・・・
21:45 (Sance) なんでしょうか
21:45 (Rick__) 相手が画面端に向かって吹っ飛んでいるかどうかを判断したいのですが、何かいい方法はありませんか?
21:48 (Sance) うーん・・・画面端ヘルパーから相手との距離を確認とかではだめ?
21:48 (rakurai) Xベクトルがあったら、どうあがいても画面端に向かって吹っ飛んでるのだと思うのだが。
21:48 (Sance) まぁ、そうよねぇ
21:48 (rakurai) つまり、相手のfrontedgeとbackedgeを見ればいいと思う
21:48 (Rick__) いいとこまできたかも・・・
21:49 (Sance) あー、画面端か、ステージの端かと(
21:49 (rakurai) ステージ端だとヘルパーとの相対距離だね
21:49 (Rick__) あーできました
21:49 (Rick__) すみません;;
21:50 (Rick__) やりたかったのは相手が画面端にくっつきながら、画面端に向かって吹っ飛んでいるときの判定です
21:50 (Rick__) その時はVel X=0として計算したかったので
21:50 (Sance) なるほど
21:50 (Rick__) [State -1, 相手画面端時のX軸速度補正]
21:50 (Rick__) type = VarSet
21:50 (Rick__) fvar(23) = 0
21:50 (Rick__) triggerall = !IsHelper
21:50 (Rick__) triggerall = PalNo < 10
21:50 (Rick__) triggerall = fvar(23) := 1 ;最初にリセット
21:50 (Rick__) trigger1 = EnemyNear(var(14)),BackEdgeBodyDist = 0
21:51 (Rick__) trigger1 = EnemyNear(var(14)),Vel X < 0
21:51 (Rick__) trigger2 = EnemyNear(var(14)),FrontEdgeBodyDist = 0
21:51 (Rick__) trigger2 = EnemyNear(var(14)),Vel X > 0
21:51 (Rick__) ignorehitpause = 1
21:51 (rakurai) あーなるほどね
21:51 (Rick__) 最初相手が右向きか、自分と相手のどっちが左側にいるかで計算が変わってかなり複雑でした
21:52 (Rick__) こんな感じ
21:52 (Rick__) [State -1, 相手画面端時のX軸速度補正]
21:52 (Rick__) type = VarSet
21:52 (Rick__) fvar(23) = 0
21:52 (Rick__) triggerall = !IsHelper
21:52 (Rick__) triggerall = PalNo < 10
21:52 (Rick__) triggerall = fvar(23) := -1 ;最初にリセット
21:52 (Rick__) triggerall = EnemyNear(var(14)),BackEdgeBodyDist = 0
21:52 (Rick__) trigger1 = EnemyNear(var(14)),Pos X > Pos X ;相手の方が右にいる
21:52 (Rick__) trigger1 = EnemyNear(var(14)),Vel X*facing < 0 ; 相手が画面端に向かって吹っ飛んでいる
21:53 (Rick__) trigger2 = EnemyNear(var(14)),Pos X <= Pos X ;相手の方が左にいる
21:53 (Rick__) trigger2 = EnemyNear(var(14)),Vel X*(-facing) < 0 ; 相手が画面端に向かって吹っ飛んでいる
21:53 (Rick__) ignorehitpause = 1
21:53 (Rick__) でもこれだとFrontEdgeBodyDist、つまり相手がこちらに背を向けて奥側に吹っ飛んでいるのを考慮しているようで考慮してませんでした
21:53 (Rick__) 自己完結になってしまって申し訳ないです
21:54 (YANMAR) frontとbackとがややこしいのぅ
21:54 (rakurai) 話かけてから思いつくなんてのは良くあること
21:54 (YANMAR) リアルでも普通にありますなw相談持ちかけて自己解決とかw
21:55 (Sance) ですねー
21:55 (Rick__) 画面端に向かってもVel Xが変わらないのはちょっと困りますねぇ
21:55 (macbeth) 話しかけようとした瞬間に閃くのもよくあること
21:55 (rakurai) そのせいで攻撃側が押し戻される現象があるんだよね 困ったことに
21:55 (Rick__) ちなみに画面端限定コンボ作るときは上のを使ってみるといいよ!
21:56 (Rick__) 押し戻されないと永久になりやす(ry

AI

1/23
23:49 (rakurai) 自キャラの緑の子のスローショット。あれがだーれもガード出来なくて困ってる。
23:50 (ryusei_) AI殺しになってるのかぬ
23:50 (ni-san_) ガードディストせっていしてないんじゃね
23:50 (rakurai) proj+explod
23:50 (rakurai) まあ、ガードディストを超えてるのが悪いんだけど。
23:50 (Rick___) うわああああん
23:50 (Momizi_y-) enemy,numprojでガードすれb(ry
23:51 (Rick___) えー・・・それで相手がガードしないのは当たり前じゃないですかー
23:51 (ni-san_) 護身しすぎるwww
23:51 (rakurai) つまりーガードディストに+出来ないかな、という発想
23:51 (Rick___) ヘルパーを飛ばしてMoveType=A
23:51 (Rick___) え?
23:51 (SAIKEI) guarddist自体はちゃんと設定されてるのね?
23:51 (Rick___) projにguard.distありますよ?
23:52 (Momizi_y-) ありますねー
23:52 (Momizi_y-) H扇奈でお世話になった(
23:52 (rakurai) 公開版は知らないけど、手元のはあるよ
23:52 (SAIKEI) じゃあ前後30ドットあたりにinguarddist検知ヘルパー設定するとガードできるかもね
23:52 (ni-san_) リック氏はそういうの詳しいので
23:52 (rakurai) あーなるほど
23:52 (ni-san_) 一度アップしてみるのも手かと
23:52 (Momizi_) そういう方法もあるのかー
23:53 (Rick___) さいにゃんを差し置いて何言ってるんですか
23:53 (SAIKEI) numprojでガードはおすすめしない 下手すると完全に固まる
23:53 (rakurai) ん、基本的に手元のはすぐにあげれる状態じゃないんだぜ
23:53 (ryusei_) NumProjで固めてしまったことに今更後悔してる自分
23:53 (Rick___) ちなみにめくりってguarddistが発生しないので、後ろ向きのMoveType=Aのヘルパーでガードさせる方法もあるのよ
23:54 (macbeth_) AIとか未だに良くわからん、というか並とか強とか良くわからん(
23:54 (ryusei_) 後ろ向きのMovetype=Aでガードできるのか・・・・fmfm
23:54 (rakurai) めくりはガード出来るものじゃないと思ってる
23:55 (SAIKEI) ケンシロウからガード関連のAI抽出してみるか
23:55 (Rick___) まあAI戦だとめくりでガードさせるようにするともう投げでしか崩せないんだけどね
23:55 (ryusei_) やっぱりAI製作は勉強不足だな・・・自分 AI製作者とは言えないや
23:55 (SAIKEI) 超反応ならね レベル設定で上手く調整できるといいお
23:55 (Rick___) だからめくりのguarddistは修正してないです
23:55 (rakurai) なるほど
23:55 (ni-san_) 無理そうだなー
23:55 (SAIKEI) めくりが完全ガー不だとハメできてしまいそうだからある程度はって感じかな
23:56 (Rick___) はぁととかかなりめくりきっついんだよねー
23:56 (rakurai) 自キャラはめくりでも勝手に直ガするときはあるけどー
23:56 (SAIKEI) 自分の場合めくりがきたと判断したら一旦ガード解除、もう一回ガードするかの判定をAIにさせることでめくりガード率を減少させている
23:57 (Rick___) ガード率は単純にrandomですねー 最高レベルAIは常時ガードの代わりに対空攻撃頻度高くて崩れるようにしてるので・・・
23:57 (Rick___) 人間操作だと対空精度に苦戦する羽目に
23:58 (rakurai) 自分もランダム入ってるけど…mugen内部のAIレベルが高いと…
23:58 (rakurai) 直ガ連打になる
23:58 (sudara13_) っていうか気がつくと本体hitdefが当たらなくなってるじゃないですカーやだー
23:58 (Rick___) MUGEN内部AIは投げ捨てるもの(リアル話
23:58 (ryusei_) 内部AIはガードだけ投げ捨ててないや・・・
23:59 (Rick___) というかcommand判定にAI変数をトリガーに入れれば良いのでは
00:00 (rakurai) ・・・あー直ガの判定変数トリガーの事かな?そういや、そうすれば直ガ減るね。

AI作成

12/17-18
21:09 (Melt) 技によって対応したガードじゃないと攻撃が通るのかー
21:09 (Real) ...格ゲーやったことあります?(´・ω・`)
21:10 (Melt) ないよー
21:10 (Real) oh...
21:10 (Melt) ないから一から学んでるのです
21:15 (Sance) とりあえず相手が地上にいる→しゃがみガード、空中にいる→立ちガードである程度あんていする
21:15 (Melt) うんうん
21:16 (Melt) ガードは形によって2種類ガードできて、1種類を通すみたいだねー

22:31 (Melt) あー・・・ガードできないと思ったらコモン上書きしてたかあ・・・
22:33 (qeg_) つそのステートの優先順位を下げる(def弄ったりとかで)
22:34 (Melt) うんうん、対応したー
22:49 (Melt) やったーガードできたー
22:49 (Sance) おめでとー
22:50 (Melt) ありがとです~

23:30 (Melt) 後はヘルパーとProjのガードかあ・・・難しそう
23:34 (macbeth) ガードは基本的にInGuardDistde
23:34 (macbeth) InGuardDistでいいのよ
23:35 (Melt) ほむー
23:36 (Real) attackdist不足による意図的でないガー不は学習できるからね( ・`ω・´)
23:52 (Melt) うーん・・・ガードがまだ甘いなあ・・・
23:56 (Melt) 下段のガードがうまくいかない・・・
23:58 (ni-san) ん?
23:58 (ni-san) 相手は誰です?
23:59 (ni-san) 下段ガードするなら本体のタイプがCじゃないと無理かも
23:59 (Rick__) 下段ガードは131ステート限定

00:00 (Melt) 今はヘブンズさんだね~
00:00 (macbeth) ヘブンずさんの下段…っていうとスライディング?
00:00 (Sance) 本体のstatetypeをcにしたら勝手に下段ガードに移るよー
00:01 (Melt) 弱キックだねー
00:01 (Rick__) 小足かー
00:01 (Melt) ですー
00:03 (macbeth) 平成センチ氏のAI説明書の
00:03 (Melt) 下段ガード自体は出来てるから、移行時の問題かな
00:04 (macbeth) ガードステートAI仕様化、切り替えし ガードを導入して調整するとガードは問題なくなる、かなぁ
00:04 (macbeth) ただガード固すぎるとあれなんだよねぇ
00:04 (Melt) そこはランダムとかで調整ぬー
00:08 (Sance) 適当に暴れるようにしておけばなんとかなるよー
00:13 (Melt) 咲夜さんはAI以外にもナイフの設定がいっぱいあるから大変だあ
00:13 (macbeth) GATT氏の咲夜さんなら私がアドバイスできるかな
00:13 (macbeth) ナイフなんだけど
00:14 (macbeth) コマンドを変数で管理してるから
00:14 (macbeth) まずナイフ投げのステートのコマンド管理の変数セットをAIoffの時限定に変更
00:15 (macbeth) んでchangestateする時に:=で代入すると確実だと確実に制御できるはず
00:15 (macbeth) 誤字がひどい(
00:15 (Melt) なるほど・・・
01:23 (Melt) かなりガードが堅くなったかなあ
01:31 (ni-san) AIは適当に暴れさせると宜しい
01:31 (ni-san) 攻撃できなくなっちゃう場合もあるんで
01:34 (Sance) たまにあるからねー 1RずっとAIがガードしてるだけ
01:34 (Real) ガード硬いとただの待ちガイルに完封される恐れがあるのは注意
01:35 (Melt) 色々考慮しないといけないのですねー
01:35 (Sance) 逆にガードが緩いと待ちガイルに完封される恐れがあるので注意
01:35 (Sance) 完封
01:36 (Sance) 結論:待ちガイル最強
01:36 (Real) 緩すぎても硬すぎてもダメ...これがAI作る上で難しいところやな
01:36 (Sance) 完成された戦術ですからね

14:15 (Melt) さーて技を当てれるように頑張るぞー
14:47 (Melt) 相手に当てるには、技の当たり判定と相手との位置を計算するんだよね?
14:47 (Reg__) ですね
14:47 (Reg__) 当たり判定だと別の意味になるので攻撃判定
14:48 (Melt) りょうかいですー
14:49 (Melt) 動いているのを前提にすると計算が必要になるから後回しにしておこう・・・。
14:50 (Reg__) あー、AI戦同士だと相手のX速度はあまり考慮しない方が...してもいいんだけど歩きに反応して出すと歩くの止められてものすごい空振りを起こしたりするから色々考える必要が出てくるので
14:51 (Melt) うんうん
14:52 (SAIKEI) (enemy,statetype=A)*enemy,vel x*(発生フレーム)
14:52 (SAIKEI) まちがえた
14:52 (Reg__) まぁ空中相手のX速度は考えてもいいわね
14:53 (SAIKEI) 地上は慣性を考えてもいいよ
14:53 (SAIKEI) とりあえず自分の移動距離も計算して相手はおおざっぱでも大丈夫
14:53 (Melt) ほむ・・・。
14:55 (SAIKEI) (1-2*(enemy,facing*(pos x-enemy,pos x)<0))*enemy,vel x*(enemy,statetype=a)
14:56 (SAIKEI) 自分のAIに搭載している 相手がどちらを向いていてかつどちらの方向に速度をもっていても正確に相対速度を割り出す
14:56 (SAIKEI) 相対速度とか日本語ちがうじゃーん
14:57 (Reg__) 自分の速度引いてないやーん(´゚'ω゚`)
14:57 (SAIKEI) 自分の速度はvel x*F/2が一番自然にできるよ
14:57 (SAIKEI) フレームってすげー短いからね ほとんど近似値
14:57 (SAIKEI) 慣性込みの話ってことで
14:58 (Reg__) ちょっと適当に入れ込んでも当たるレベル
14:58 (Reg__) まぁCPU同士だと超反応があるからなんとも
14:58 (SAIKEI) ↑↑の計算式は自分がどっちを向いていて、相手がどちらを向いていて、そして相手の速度が正負どちらでも
14:58 (SAIKEI) 自分に対して進んでるのか後退してるのかがわかる
14:59 (SAIKEI) これのおかげで対空精度が飛躍的に上がった
15:00 (SAIKEI) [state ]
15:00 (SAIKEI) type=null
15:00 (SAIKEI) triggerall=numenemy
15:00 (SAIKEI) triggerall=1||fvar(38):=pos y-playerid(var(55)),pos y
15:00 (SAIKEI) triggerall=1||fvar(39):=facing*(playerid(var(55)),pos x-pos x-facing*ifelse(playerid(var(55)),statetype!=a,const(size.ground.front),const(size.air.front)))
15:00 (SAIKEI) trigger1=facing!=playerid(var(55)),facing&&fvar(39)>=0||facing=playerid(var(55)),facing&&fvar(39)<0
15:00 (SAIKEI) trigger1=fvar(39):=fvar(39)-(1-2*(fvar(39)<0))*ifelse(playerid(var(55)),statetype!=a,playerid(var(55)),const(size.ground.front),playerid(var(55)),const(size.air.front))||1
15:00 (SAIKEI) trigger2=fvar(39):=fvar(39)-(1-2*(fvar(39)<0))*ifelse(playerid(var(55)),statetype!=a,playerid(var(55)),const(size.ground.back),playerid(var(55)),const(size.air.back))
15:01 (SAIKEI) fvar(39)=p2bodydist x fvar(38)=p2bodydist y
15:01 (Reg__) まぁちょっと待て落ち着け、AI作りが格ゲー未経験者レベルのめるちゃんにはちょっと最初からハード過ぎる
15:01 (SAIKEI) playerヘルパー対策には便利やな
15:02 (SAIKEI) 相手との距離を測るだけだから別に格ゲーは関係ないべ
15:02 (SAIKEI) でもpos x-enemy,pos xだけで事足りるのは認めざるを得ない
15:02 (SAIKEI) 狂以上ならね
15:02 (Reg__) 事足りんのはレオパルドンとかそういう特殊なん
15:03 (SAIKEI) うん
15:03 (Reg__) いくら近づいても普通のキャラじゃ絶対に真ん中の方に入ることはできんからな...
15:03 (simotsuki) もう狂未満のAIならplayerヘルパー使う方が悪いとして投げたw
15:04 (SAIKEI) めんどかったら↑のやつ勝手に使ってもいいんでね(チラ
15:04 (SAIKEI) ていうかブログに載せたと思う
15:04 (Melt) とても難しいのでよく分からないのですが、記述のメモはとってみます。
15:05 (Melt) ブログにもいくつか載ってるね~重力計算とかー
15:05 (SAIKEI) p2bodydistがどういうパラメータで割り出してるのかかなり実験したからなぁ
15:05 (SAIKEI) 重力計算はあったほうがいいねー
15:05 (SAIKEI) 自分のは他で使われてる一般的なのと少し記述が違う(メガマリ式とでもいうのか平成㌢式とでもいうのか
15:10 (simotsuki) 重力計算どんなのにしたっけな~
15:17 (simotsuki) 相手のhitshaketimeとか自分自身のvel yとかで何度も修正した気がする

16:22 (Melt) おー・・・近距離と中距離入れたら普通に格闘したー
16:25 (Melt) 少しずつだけど、なんとなく分かってきたかも

エラー:AI

12/11
19:33 (YANMAR) ぬ、特定行動しかしないなぁ
19:33 (YANMAR) 何かが悪さしてそうだ・・
19:35 (YANMAR) 混線すごい失敗するようになってるなぁ・・
19:36 (YANMAR) 凍結すると画面外にぶっ飛ぶなぁ
19:36 (YANMAR) 生成と領域が残りっぱなしになる確率が5割強とか・・
19:40 (YANMAR) 最終ヘルパーが悪さしてるのかなぁ、なんで急に残るようになったんだ
19:41 (YANMAR) とりあえず最終戻しはまだ使わないから戻しておこ・・
19:42 (YANMAR) んで凍結維持も大魔法時とイントロくらいかなぁ・・
19:47 (YANMAR) うーん、どうにも動作が狂うなぁ
19:47 (YANMAR) 同じステート連発しまくる・・
19:48 (Melt) 動作維持って大変そう
19:49 (YANMAR) 何かでステ抜けしてるっぽいような動作を・・
19:49 (YANMAR) 105か2500をずっとループしちゃうんですよね、んで画面外に出ちゃうし
19:50 (YANMAR) まだ完璧に出来てないってことか・・
19:52 (YANMAR) changestateが出来てないのかな、これ・・
19:53 (YANMAR) trigger1 = animtime = [-2, -1]のトリガーでChangestateしてるけど、これが満たされないからずっと同じステートに居る・・のかな
19:54 (YANMAR) 大魔法はちゃんと時間通りやってくれるし、動作も正しいんだよなぁ・・
19:55 (YANMAR) 個別ステートでAI変数全リセするか・・
19:58 (YANMAR) うーん、AI変数リセしても2500から動けない・・

21:58 (YANMAR) うーん、何で本体Hitdef使うとアニメループするかなぁ・・
21:59 (YANMAR) 他の平和なキャラで試してみるかぁとりあえず・・
22:03 (macbeth) 凍結維持してると挙動がおかしくなる?
22:05 (YANMAR) どうにもchnagestateが働いてない疑惑・・
22:06 (YANMAR) 同一アニメをずっと繰り返しちゃうんだよねぇ
22:06 (Rick___) AnimTime=0ェ・・・
22:06 (macbeth) 凍結でよくあるのはコマンドが狂って延々と同じ行動するとかかなぁ…
22:06 (Rel) トリガーが悪いとか
22:06 (YANMAR) コマンドが狂ってるってのはありえそうだなぁ
22:06 (YANMAR) コマンドとAI変数のどちらかで判断して動かしてるし
22:07 (YANMAR) [State 2500, ステート変更]
22:07 (YANMAR) type = Changestate
22:07 (YANMAR) trigger1 = animtime = [-2, -1]
22:07 (YANMAR) value = ifelse(pos y < -5, 45, 0)
22:07 (YANMAR) ctrl = 1
22:07 (YANMAR) persistent = 256
22:07 (YANMAR) ignorehitpause = 1
22:07 (YANMAR) 個別のチェンジはこれでいいと思うんだけど、とすると後はCMDのほうのチェンジが悪いのかなぁ
22:07 (YANMAR) [State -1, ライトピラー]
22:07 (YANMAR) type = Changestate
22:07 (YANMAR) triggerall = !ishelper
22:07 (YANMAR) triggerall = alive
22:07 (YANMAR) triggerall = roundstate = 2
22:07 (YANMAR) triggerall = sysvar(2)
22:07 (YANMAR) triggerall = command = "/$D, c" || sysvar(3) = 2500
22:07 (YANMAR) trigger1 = ctrl
22:08 (YANMAR) value = 2500
22:08 (YANMAR) ignorehitpause = 1
22:08 (YANMAR) 凍結するとその時点でのコマンドがずっと維持されるとか?
22:08 (macbeth) 凍結状態でコマンドが入力されると凍結が解除されるまで維持されますよ
22:08 (YANMAR) オウイエ
22:08 (YANMAR) とすると原因はこれか
22:08 (macbeth) つまり延々と同じ行動をしてたのはコマンドが変わらないからだと思う
22:09 (YANMAR) AIの有無でやってしまうかー
22:09 (macbeth) ってかAIにコマンド使うのがまず(
22:09 (YANMAR) そらまぁうんw
22:09 (YANMAR) えーと、これをsysvar(3)だけにして
22:09 (YANMAR) トリガー2にcmd入れて、かつsysvar(3)が無い時ってすればいいのか
22:24 (YANMAR) triggerall = (command = "/$F, c" && !sysvar(3)) || sysvar(3) = 2400
22:24 (YANMAR) かなぁ
22:30 (YANMAR) おー、できた、まーちゃん感謝ー
22:30 (YANMAR) 後は凍結してても動くかどうかや・・
22:32 (YANMAR) 動く、動くぞー
22:32 (YANMAR) 後は画面外にぶっ飛ぶのさえ解決すれば・・
22:32 (Melt) 画面外制御はふぁいとです~
22:32 (macbeth) 画面外は
22:32 (YANMAR) 常時監視でpossetかなー
22:33 (macbeth) 画面外に出てたら画面の端に戻せばいいよ
22:42 (YANMAR) メガテンの
22:42 (YANMAR) [state ]
22:42 (YANMAR) type = posset
22:42 (YANMAR) trigger1 = pos x != [-150,150]
22:42 (YANMAR) x = 150-300*(pos x<0)
22:42 (YANMAR) ignorehitpause = 1
22:42 (YANMAR) これが画面外制御の記述かな?
22:42 (macbeth) それですねぇ
22:42 (Rick___) っぽいぽい
22:42 (YANMAR) おー、どもどもです
22:42 (YANMAR) ということはこれを全ステートに入れれば・・
22:43 (macbeth) -2でやっていいのよ?
22:43 (YANMAR) ちょっとでもー2減らしたいじゃん?w
22:43 (Awamizu) 私は必要なステートにだけ入れてますね
22:43 (macbeth) ヘルパーを上でselfstateさせましょうよ
22:43 (Rick___) ここで-1ステートが颯爽と登場
22:43 (YANMAR) -1でもいいんだけど、それでもちょっと重さに関わると思って
22:44 (YANMAR) なるべく入れれるのは個別にバンバン重複して突っ込んでたり
22:44 (YANMAR) 勿論、ヘルパーはー2の上でセルフさせてるよ
22:44 (macbeth) なら-2でいいじゃない
22:44 (YANMAR) かわんないのかぁ、重さ的に
22:45 (Sance) 多分変わらない
22:45 (YANMAR) なんとまぁ。。
22:49 (YANMAR) おーできたー
22:50 (YANMAR) こりゃメガテンもスペサンに書かなくては・・ありがたやー
22:53 (YANMAR) あ、やっぱ常時監視に入れよう・・相手が動くと駄目だw

random

12/8
00:18 (rakurai) あれ謎なんだよね、random=[0,20]なのに5連発とかするし
00:19 (ryusei) random<15で・・・・
00:19 (YANMAR) random=[0,20]だと結構な頻度になっちゃうんじゃないすかね、毎F計算するとなると・・
00:19 (ryusei) 200ですか
00:19 (YANMAR) 10でも結構やってくれたような
00:19 (Rick__) 1/50を60回試行したら・・・
00:19 (ryusei) 10Fで299ですか
00:20 (macbeth) あとはあれかな
00:20 (Rel) Σ(k= from 1 to 60) k/50 ?
00:20 (ryusei) あれかrakurai氏のキャラは外部AIで補うという(ry
00:20 (macbeth) 大魔法以外の技のトリガーが全て満たされないような状態になるとrandomが低くてもかなり振りまくるよね
00:20 (rakurai) 全部にtrigger1 = ctrlが入ってるから無いと思うんだが・・・
00:21 (Rel) ふぅ
00:21 (rakurai) そっか、位置偽装とかで相手どっか行ってるせいか
00:22 (macbeth) どんな状況でも大魔法以外の選択肢があるようにすると大魔法連発は少なくなるんじゃないかな?
00:22 (HALU) 変数にrandom保存して[a,b]はこの技で[c,b]はあの技で~ってやればいいさ
00:22 (HALU) [c,d]だった
00:23 (ryusei) randomか・・・・
00:25 (Acc) ひたすらifelseとrandom%で分岐させることでワンパターンをごまかす作業

ガード

11/2
21:42 (YANMAR) noautoguardを常時実行してる状態だとガードのコマンドも作らないといけないけど
21:42 (YANMAR) 単にcommand="holdback"だけだと後ろ歩きが出来ないから
21:42 (YANMAR) 他にトリガー加えるとしたら何がいいんだろうか
21:42 (Rick_) InGuardDist
21:42 (YANMAR) ほうー
21:42 (Rick_) おいィ・・・
21:43 (YANMAR) いやまぁ並のキャラ作ったことなくてw
21:43 (YANMAR) 攻撃範囲内なら、かー
21:43 (Rick_) ちなみに人操作のガードのトリガーは全く違いますね
21:43 (Rel) テイルズみたいにボタン式のガードもあるっちゃある
21:43 (YANMAR) まぁ低カラーだけだしこれだけあればおkそうね、謝々
21:43 (YANMAR) 人操作のが知りたいですw
21:43 (Rick_) 人操作だとInGuardDistは全く考慮されないです
21:44 (YANMAR) にゃんと
21:44 (Rel) 後ろに倒すだけでガードになりますからね
21:44 (Rick_) Enemy,NumProj || Enemy,MoveType=Aだったと思います
21:44 (YANMAR) なるほど、相手が攻撃判定持ってたら、かー
21:44 (YANMAR) チェンジの位置は後ろ歩きよりも上のがいいか
21:44 (Rick_) だからInGuardDist真面目にやってないキャラ相手でもガードできます
21:45 (YANMAR) 全画面だろうがattckdistやってないキャラだろうがガードできるわけですな
21:45 (Rick_) ですねー
21:45 (Rick_) ちなみに人操作だと上入力があるとガードできません
21:45 (YANMAR) 仕様なんでしたっけ
21:45 (Rick_) 仕様ですねー 意味が分からないですが
21:45 (Rel) チキガ入れ込みなんてなかった
21:46 (Rick_) 空中ジャンプの処理で-4ステートが終わってしまうからでしょうか?
21:46 (Rick_) ただの予想ですが
21:46 (YANMAR) 内部処理がそこで終わっちゃう、か
21:46 (Rick_) ともかくその辺りは自分で記述を加えていますねー
21:47 (Rick_) 私の場合はInGuardDistも考慮しているので離れた時は結局上入力外さないといけないですが
21:48 (YANMAR) ふむむー、とりあえずしゃがみもジャンプも全部共通だからそこ等辺は気にしなくて良さそう
21:49 (YANMAR) できたー、あざっす
21:49 (Rick_) おめめー
22:20 (YANMAR) おーカルマ1Pに勝てた、ガードって偉大!

くフライング

8/15
00:55 (Silverstar) どんなタイミングでAIいれたらちょうどよくフライングせずに動けるんだろう・・・
00:55 (Rick_ShiroLen) ctrl
00:56 (Acc_) 試合開始時から時間計測して10F経過してから動かすようにしてるなぁ
00:58 (lunatic__) 10Fはちょっと早いですねぇ
00:59 (Sance) 相手が動いたら
01:00 (nisanka) わしゃうごかん!
01:00 (kamase) リミカはctrlフラグがONになったら ゼロはフライング上等
01:02 (Silverstar) うーむ
01:04 (Silverstar) まぁ・・・いろいろ監視するべきか

projからのコンボ

7/8
22:26 (DRM) 実は今のAIはそんな感じで作ってたつもりなんですよねぇ・・・w どうにも思い通りにならない
22:27 (ni-san) 飛び道具だとムーブヒット認識しない
22:27 (ni-san) projhit使わないと
22:27 (YANMAR) projhittimeがいいですねぇ
22:28 (DRM) なるなる・・・
22:28 (DRM) projからのコンボは特にうまくいってないので参考になりますm(_ _)m
22:29 (DRM) うまくいってないってかそれが原因でやってないというか(
22:31 (DRM) とりあえず次回更新は来月以降になりそうだな(
22:33 (ni-san) てんま(様じゃないほう)
22:33 (ni-san) がそれのプロだったんですがぬー
22:33 (ni-san) projからのコンボ

本体とヘルパーのコマンド・本体固定時AI起動

8/22
11:52 (setuna_2) ヘルパーがコマンドを認識するのが時間かかるだけか?それとも、AIのステートがなにもないから起動が遅いと感じるだけか?
11:54 (lunatic__) ヘルパーは何故だかコマンド入力頻度が低かった気がする。気のせいかもしれないけど
11:54 (setuna_2) ふむ・・・・・
11:54 (setuna_2) やはり、AIの起動は本体・・・しかし本体常時5150だが・・・・
11:54 (lunatic__) あとヘルパー式は本体とのコマンドの差を見るのが基本。まぁ本体ステート奪われるならあれだけど
11:56 (setuna_2) ふむ・・・
11:56 (setuna_2) やはり、ヘルパー式はさけて、本体で認識を・・・
11:56 (setuna_2) うーむ・・・・
12:00 (setuna_2) うむ・・・本体はコマンド認識してない?  常時5150があれなのか?・・・
12:02 (setuna_2) ヘルパー式本体は難しいです・・・・AI
12:06 (setuna_2) 本体を常時固定させてヘルパーが本体の代わりになるものだから、本体がコマンドを認識してくれてないみたいなんだよね・・・・
12:08 (lunatic__) いや、本体固定してもコマンドは認識しますよ
12:08 (lunatic__) あと、やっぱりヘルパーも本体もコマンド入力頻度は変わらずでした
12:08 (setuna_2) ん?じゃ俺が悪いのか・・・なぜだろう・・・
12:10 (setuna_2) 起動しない・・・オンにならない・・・なぜだ・・・
12:13 (nanasiAFK) MUGENのAIって自作したコマンドよりaとかxとか基本コマンドの方が使用頻度高いんだよね
12:14 (nanasiAFK) だからヘルパー式の方が圧倒的に起動早いみたいね
12:32 (setuna_2) いったん、見てもらってもいいでしょうか?お暇な方お願いしたいです・・・・
12:49 (lunatic__) 起動遅いですがAI入っると思いますが
12:49 (setuna_2) 起動は普通はこんなもんなんでしょうかね?
12:52 (lunatic__) 大体こんなもんなはずです。ヘルパー式みたいにデフォルトコマンド使わないと遅いです
12:52 (setuna_2) デフォルトコマンド・・・・・・・・?    ふむ・・・・・・・もう少し早くできないかとか思っていたのですが、これはしかたないことか・・・

参考:本体のコマンドとヘルパーのコマンド

タッグ対応

7/1
21:07 (mosa) タッグ対応ってどうすりゃええねん(´・ω・`)
21:07 (SAIKEI) こん
21:07 (mosa) enemynearじゃいかんのか
21:07 (BluishCat) まずはEnemy(x)の対応から
21:07 (SAIKEI) どういうふうに対応させたいの?
21:08 (nanagami0) enemynearだけだと片方落ちたとき変に反応しなかったっけ?
21:08 (BluishCat) 学者のAIはEnemy(var(x))で更にaliveも判定させてる
21:08 (mosa) ふむ
21:08 (BluishCat) 死体に反応しなくていいよ
21:08 (mosa) 一応格闘するキャラなので
21:08 (mosa) タッグでおかしな動きをするのは避けたいのです
21:08 (YANMAR) alive判断って5150固定の神夫さんとかも対応できるのかしら
21:09 (SAIKEI) aliveは5150と関係はないはず
21:09 (YANMAR) おお、よかった
21:09 (BluishCat) このvar(x)に0か1を入れる処理が前に要るけど
21:09 (SAIKEI) まずはenemynear(!enemynear,alive&&numenemy>1),~~
21:09 (SAIKEI) これしておけばまず既に死んだ敵に反応することはない
21:09 (mosa) !
21:09 (mosa) ありがとう(・∀・)
21:10 (YANMAR) numenemyかー、なるほど
21:10 (SAIKEI) 記述が長くなっちゃうから
21:10 (SAIKEI) var(X)=!enemynear,alive&&numenemy>1 として
21:10 (BluishCat) 頭で判定してvar利用が妥当か
21:10 (SAIKEI) enemynear(var(X)),~~
21:10 (SAIKEI) がいいね
21:10 (SAIKEI) もちろんenemyでもいいよ
21:10 (mosa) ほほー
21:10 (SAIKEI) ちょっと記述の仕方を工夫すればenemynearでもenemyでもいける
21:11 (BluishCat) 確実に敵を狙うために、Enemyにしてるなぁ
21:11 (BluishCat) 凶悪キャラ相手は想定外だけど
21:11 (mosa) ふむ
21:11 (BluishCat) 確かEnemyNearで取得して、IDをEnemyと比較してるはず
21:11 (mosa) それで大丈夫か
21:12 (BluishCat) もちろんAliveとかNumEnemyとかも入れて
21:12 (SAIKEI) まあどうせタッグなんて混戦必死だから
21:12 (SAIKEI) 死んだ相手に反応しないようにするだけで十分な気もする
21:12 (nanagami0) ですね
21:12 (SAIKEI) 並鰤が全てを証明している
21:12 (YANMAR) なるほどなるほど
21:12 (BluishCat) あとは技の使用率変更とかかな
21:13 (SAIKEI) あとポイントとして
21:13 (SAIKEI) タッグは壁端とると有利だから
21:13 (YANMAR) MCSとかわざと死んでもヘルパーアーマー残して偽装してたり(
21:13 (SAIKEI) 自分とパートナーと敵二人がどういう位置関係か取得して
21:13 (SAIKEI) おいしい位置に立ち回るっていうのが有効かも
21:13 (mosa) にゃるほど
21:13 (mosa) まぁ、俺のは狂キャラだし
21:13 (SAIKEI) これは葉桜氏アレンジK`のAIが
21:13 (mosa) 確かに死亡判定できればいいのかn

めくられる

5/8
23:31 (SAIKEI) ところでAIにめくりが見えない!な状態にするにはどう記述したらいいんだろう
23:32 (lunatic__) 位置飾r(ry
23:32 (SAIKEI) いや
23:32 (SAIKEI) むしろこっちが見えない
23:32 (SAIKEI) という意味で
23:32 (SAIKEI) ようはAIにめくられたらガードできなくさせる記述
23:33 (Rel_) ガードさせる時に
23:33 (Rel_) p2dist x >= 0
23:33 (lunatic__) めくられたらinguarddistが消えるはずだったと思ったけど
23:33 (Rel_) かなぁ...?
23:34 (SAIKEI) ヘルパーで補助ってるからinguarddistを補完してるけど
23:34 (mosa) 逆向きヘルパーのinguarddistが1になったら防御付加にすれば
23:34 (SAIKEI) まあ内部ではまだ反対側向いてますよーってフラグを立てさせて
23:34 (SAIKEI) ガードをさせなくすればいいかな
23:36 (SAIKEI) めくったさいにp2dist x>=0になることはあるから
23:37 (SAIKEI) p2dist xは役に立たんくさい
23:37 (SAIKEI) やっぱりめくられたら崩されるってくらいが
23:37 (SAIKEI) 対人としてはいいと思うんだ
23:37 (SAIKEI) たまに見えてやるのも必要だけどね
23:39 (SAIKEI) 今ガッチガチの超反応AIだからどう弱くしていくかがすごい悩む
23:39 (SAIKEI) というか難しい
23:40 (mosa) わかる
23:40 (mosa) 弱くするのは辛い
23:40 (mosa) 軋間のAIも良くしたつもりが動画にでてみたらただ大味な技を出すだけになってた
23:41 (mosa) ヘルパーで逆方向のinguarddist補完してるならそっちが1になったら自分がガード不能とかにすれば良いんじゃないですかね
23:41 (mosa) ランダムで
23:41 (SAIKEI) ああなるほど
23:41 (SAIKEI) その手があったか
23:42 (mosa) いつもやると狙われるからAI毎にランダムを調整すれば
23:42 (mosa) 何とかならないかのう

直前ガード

5/8
22:00 (SAIKEI) アジガのさせかたがわからんちん
22:00 (SAIKEI) hitdefattrを駆使すればいいのかな
22:03 (_AS_) 直前ガードだっけ
22:03 (SAIKEI) sousou
22:03 (_AS_) ブロッキングするキャラを参考にしてみるとか?
22:03 (_AS_) とりあえず直前でガードをしているはずだし
22:04 (SAIKEI) そういえば他のキャラの無想天生とかどうやってるんだろう
22:04 (SAIKEI) それもブロッキングの要領かしら
22:04 (_AS_) かねぇ
22:05 (_AS_) HitOverRideつかって、無想転生のステートに移動しているとか
22:05 (SAIKEI) hitoverrideを使うのはあまりよくないねえ
22:05 (_AS_) 実際に見てみるのが早いかもね(
22:06 (SAIKEI) movecontactが成立しちゃって本来キャンセルできないのにキャンセルされる可能性がある
22:06 (SAIKEI) 無想ならの話だけど
22:06 (SAIKEI) で、このラオウはそれをreversaldefで再現されてるね
22:06 (SAIKEI) グレイズと同じ感じだな
22:06 (_AS_) ほう
22:07 (SAIKEI) ラオウを覆う攻撃判定ヘルパーを出して
22:07 (SAIKEI) 当身して
22:07 (SAIKEI) ヘルパーは当身と同時にステート移動
22:07 (SAIKEI) 本体はその移動を感知して
22:07 (SAIKEI) ミキッタ
22:07 (SAIKEI) に移動
22:07 (_AS_) なるほど
22:10 (SAIKEI) ブロッキングはガードをしながらでもさせることはできるけど
22:10 (SAIKEI) 直ガは難しいなー
22:10 (_AS_) むずかしいのぅ
22:13 (SAIKEI) ここは攻撃発生フレーム調査ヘルパーの出番だ!
22:27 (SAIKEI) ふむ、アジガ判定はガード入力後5Fまでか
22:27 (_AS_) へぇ
22:27 (_AS_) 結構あるのか
22:28 (SAIKEI) ということは相手の攻撃判定が出る2,3F前にガードさせれば
22:28 (SAIKEI) 完璧だ!
22:28 (SAIKEI) それと攻撃判定の出ているヘルパーの監視も必要になりそう
22:29 (SAIKEI) 今はまだ見送るけど
22:32 (_AS_) ヘルパーの便利さに嫉妬
22:35 (SAIKEI) 飛び道具にprojだけ使ってくれるとnumproj一個ですむんだけどねえ
22:35 (SAIKEI) ヘルパーだとそうもいかない
22:58 (SAIKEI) アジガしてくれねー
22:58 (SAIKEI) うひー
23:13 (SAIKEI) 直前ガードできた!これで勝つる!

凍結解除の利用

5/8
21:23 (SAIKEI) ああ
21:23 (SAIKEI) 他の北斗キャラはどうやってHSCEでの繋ぎをしてるのか気になってたけど
21:23 (SAIKEI) ブースト使ったときは発生が短くなるアニメに変更して
21:23 (SAIKEI) 再現してたのか
21:24 (_AS_) Anim 200+Var(0) みたいな感じかのぅ
21:24 (SAIKEI) そんな感じ
21:25 (_AS_) Timeでやると色々メンドイねぇ・・・AnimTimeとかがつかえそうだ
21:28 (SAIKEI) だが凶悪MUGEN出身の私はそんなことせず凍結解除を利用して(ry
21:28 (_AS_) !?
21:28 (SAIKEI) 自分にhitdef当てるタイプだと内部コンボが途切れちゃうって仕様があるのは知らなかったけどね
21:29 (_AS_) でも凶悪MUGENでの技術って並とかでも普通に使えるからのぅ
21:30 (SAIKEI) だから自分がhitdef出して専用ヘルパーに当ててhitpauseを消すほうを選んだ
21:31 (SAIKEI) ところでこの方式だとどうしても2Fいるんだけど
21:31 (SAIKEI) 超即死式なら1Fでできたりしないかな

ランダム

5/8
19:52 (SAIKEI) ラオウ様のコンボをどこで失敗させりゃいいんだー
19:52 (SAIKEI) コンボ用ステコン多すぎて管理めんどくせー
19:53 (SAIKEI) 今のままだとコンボに関しては完全にKI械ですわん^^
19:55 (SAIKEI) というか他のAIってどういうふうにコンボを自重させてるんだろう
19:57 (_AS_) スタンダードにrandomあたり使って成功率きめたりとかじゃね
19:58 (SAIKEI) ふむ
19:58 (_AS_) 完遂させずわざと失敗させて
19:59 (_AS_) 立ち回りをみたりとか、意味あるかわかんないけど(
19:59 (_AS_) わざと失敗→受身取る→受身狩りからジョイヤーとか・・・
19:59 (SAIKEI) そういえばmovehitって時間指定ができたな
19:59 (SAIKEI) そうすればrandomの値が信用できるものになりそうだの
20:00 (_AS_) まぁVarRandomつかえば
20:00 (_AS_) Triggerを用いて好きな風にランダムをいじれるから
20:01 (_AS_) 実際 Rndom<300 とかでTriggerやっても
20:01 (_AS_) 1F毎に0-999変動するから
20:01 (_AS_) あんま信用ならへんし
20:01 (SAIKEI) そうそう
20:01 (_AS_) そこは使いようだねぇ
20:02 (_AS_) VarRandomをGameTime%20 とかでやれば、
20:02 (SAIKEI) そこでだ
20:02 (SAIKEI) movehit=1 && random <= 500 なら
20:02 (SAIKEI) 必ず2分の1の確率になるはずだー
20:03 (kamase) randomって大きい数字より小さい数字の方が出やすいって聞いたことが(ry
20:04 (_AS_) あれ、MoveHitとかって・・・
20:04 (_AS_) きのせいか・・・
20:04 (SAIKEI) smallなことはno thank you
20:04 (_AS_) しらべよう
20:04 (SAIKEI) まあ人間そう感じるかもしれないけど
20:05 (SAIKEI) 多分1000回くらい試行すればきっと500近い値になってるはず!!
20:06 (_AS_) ああいいのかよかった
20:06 (_AS_) 俺の気のせいだった。
20:07 (SAIKEI) なにがー???
20:07 (_AS_) いや、MoveHitの値って攻撃が当たった時からMoveType=Aが解除されるまで変動するもんだと勘違いしてた(
20:07 (_AS_) そしたらMoveHit=1でのトリガーじゃなりたたねぇと、今気づいたんだ(
20:08 (SAIKEI) 当たったときから変動するけんども
20:08 (SAIKEI) hitpausetimeがある場合は変動せず
20:08 (SAIKEI) 解除された瞬間はmovehit=1のまま
20:08 (SAIKEI) そこから1ずつ増えていくって感じ
20:08 (_AS_) デスヨネー
20:09 (SAIKEI) うまく使えばtimeのようにできてAIではなかなか応用の利く仕様
20:09 (_AS_) さっきいった
20:09 (_AS_) MoveHit = 1 && Random <= 500 いけそうだね
20:10 (_AS_) Random <= MoveHit*500 でもいけそうだ
20:11 (_AS_) * って便利だなぁと翼神弄ってた感じたわ
20:11 (SAIKEI) ちょいちょい
20:12 (SAIKEI) それだとmovehit=2で確率100%ですぜ
20:12 (_AS_) なんだと(
20:12 (SAIKEI) (movehit=1)*500
20:12 (_AS_) movehitって
20:12 (SAIKEI) これが正解
20:12 (_AS_) 0or1じゃないんだ・・・
20:12 (_AS_) 当たったら 1 しか返さないとおもってたんだが(
20:12 (SAIKEI) ↑でもいったように
20:12 (SAIKEI) ちゃんとカウントされるよ
20:12 (SAIKEI) だからmovehit=5なら
20:12 (_AS_) 当たってからふえていくのか
20:13 (_AS_) そうかもしかして
20:13 (SAIKEI) 当ててヒットストップが解除されたら
20:13 (_AS_) movehitは攻撃があたってからのF数か?
20:13 (SAIKEI) 5フレーム目って意味
20:13 (SAIKEI) Dos版では0or1の仕様だったらしいけどね
20:13 (_AS_) いい事知った(*´ω`*)
20:14 (_AS_) 当たったか当たらなかったかの値しかかえさないとおもってたわぁ
20:15 (SAIKEI) こら さりげなく流行らそうとするんじゃ(
20:15 (SAIKEI) ああーでもほとんどmovehit か movehit>=○○って書いてるから
20:15 (SAIKEI) 大量に書き直さんといかんな
20:16 (_AS_) MoveGuardedもMoveContACTも
20:17 (_AS_) 0or1じゃなくて、ふえていくのか
20:18 (SAIKEI) そそ
20:18 (_AS_) Moveハンパねぇ、これは流行る
20:20 (_AS_) そうか、だからMoveHit だけでHelper出そうとしたら
20:20 (_AS_) ボロボロでまくってたのかあの頃
20:23 (_AS_) ってことは
20:24 (_AS_) 一つのステートで複数の攻撃がある場合(多段攻撃など)は、当たるたびにFが初期化されるってことかな
20:25 (SAIKEI) そうそう
20:25 (SAIKEI) めったに使われないけど
20:26 (SAIKEI) type=MoveHitReset
20:26 (SAIKEI) これで初期化できる
20:26 (_AS_) あんまつかわんね
20:27 (_AS_) それ使ってるの、sui氏のアリスぐらいしかみたことないなぁ
20:29 (SuperMechSuika) どちらかというとmovehit持ち越す記述のが使うな
20:30 (SAIKEI) movehitpersistねえ
20:31 (_AS_) 初耳だ
20:31 (SAIKEI) 複数のステートで一つの技になってるものとかかしら
20:31 (_AS_) ステ固定でHitDef打たせる為には必要だーとかで聞いたことあるが(
20:31 (SAIKEI) 基本一個のステートで完結させてしまうからあんま使ったことないの
20:31 (_AS_) 乱舞技みたいなもんか
20:33 (_AS_) Triggerがたくさんあると
20:33 (_AS_) 時折番号が飛んで機能しなくなるな・・・
20:34 (_AS_) 前の翼神がまさにそれでヘルパー保護ミスってたという。
20:35 (SuperMechSuika) 昇竜の着地硬直を昇竜当たったときだけ着キャンできるとかな
20:35 (SuperMechSuika) 俺は着地硬直のステートをまとめてるから
20:36 (_AS_) ああ、なるほど。
20:37 (_AS_) まぁそこも、個性が出るって感じだね。
20:37 (SAIKEI) なるほろ
20:58 (piyoll) AIのtriggerにrandom使うか否かで動きがダンチに(
20:58 (_AS_) 俺は⑨氏のAI講座で
20:58 (_AS_) VarRandomに切り替えたよ(
20:58 (SuperMechSuika) 俺のアーマー一枚絵とかrandomだけで構成されてるAGIがおおい
21:00 (SAIKEI) Varrandom式というと
21:00 (SAIKEI) あれか
21:00 (SAIKEI) trigger1=time=30
21:00 (SAIKEI) trigger2=!time
21:00 (SAIKEI) trigger2=ctrl
21:00 (SAIKEI) かの
21:00 (SAIKEI) randomよりも大きい括りで分岐するやつかな
21:01 (SAIKEI) 2ndRSPでも使って種
21:01 (_AS_) なんていうか
21:01 (_AS_) 好きなタイミングでランダムができるっていうか
21:01 (_AS_) Trigger1 = Time = 1
21:01 (_AS_) Trigger2 = Time%15 = 1
21:01 (_AS_) Trigger2 = MoveType != I
21:01 (_AS_) Trigger3 = Time%1 = 1
21:01 (_AS_) Trigger3 = MoveType = I
21:01 (_AS_) まぁ前のキャラにつかってたやつなんだけど
21:01 (_AS_) これはほんの一例ですのぅ
21:02 (SAIKEI) まあどうあれ分岐という点では共通かの
21:02 (SAIKEI) そういえば
21:02 (_AS_) 何もしてないなら、1F毎にランダムの値もとめたり

ガード

5/1
16:28 (Rel) メガマリの立ち中段がガードできない...
16:29 (Rel) うーん、立ち中段見てから下段ガードで被弾余裕でしたになってる...
16:30 (Rel) mugenじゃガードする側で上段扱いにできないからなー...
16:31 (Rel) ...アーマーがあったか
16:32 (Rel) gethitvarでガード硬直時間取得して全部上段扱い...
16:34 (Rel) これを東方キャラのガードシステムで実装できたら普通に強いなぁ
16:35 (Rel) hitflag取得できないから全部正ガードになりそうだけど...
16:36 (_Alice_) Enemynear(0),HitDefAttr = SCA, AP ぐらいかね
16:37 (_Alice_) 後どうでもいい事なんだけど、HitDefで
16:37 (_Alice_) ガードフラグをキチンと書いてもガード不能になるときがあるね
16:38 (_Alice_) Time=0でHitDefやるとそうなる
16:38 (_Alice_) 俺も昔これでとまどったなぁ
16:38 (Rel) それってmugen側で反応できないからでは
16:38 (_Alice_) 反応っていうより処理順じゃね
16:38 (Rel) ふむ
16:39 (LANCEL) 0フレ発生だとガード出来ませんね
16:39 (_Alice_) ま、二年以上も前の事だったし。

AI

3/25
22:35 (SAIKEI) むしろ今はAIのほうに変数を使いたい
22:38 (okihaito) AIってそんなに変数使ったっけ? バーサーカーではあまり使わなかったなぁ
22:38 (SAIKEI) Ai行動フラグ、中段記憶、立ち下段記憶
22:39 (SAIKEI) 敵の攻撃発生フレームとか
22:39 (okihaito) あー・・・相手の技が多いと対処とか大変か
22:39 (SAIKEI) これは最大20個まで保存するようにしてるから
22:39 (okihaito) 発生フレームまで記憶してるのかw
22:39 (SAIKEI) とても本体では無理なのでヘルパーの変数でがんばってる
22:40 (SAIKEI) 最低でも一回はガードでもヒットでも喰らわないといけないのが難点
22:40 (okihaito) 通常処理のガードで防げなかったら回避か当身に専念ってやるかなぁ・・・本体の性能便りになっちゃうが
22:40 (okihaito) もし記憶するならね
22:41 (SAIKEI) 回避と当身はその性能しだいかなー
22:41 (SAIKEI) あと低ダ→JA
22:41 (okihaito) 使用したその瞬間から無敵だと結構使えるんだけどねー そういうのってやっぱ並じゃ少ないだろうしなぁ
22:42 (SAIKEI) みたいな複数のステートを利用して一つの動きとなる戦法とかに
22:42 (SAIKEI) 変数で制御したりする
22:42 (okihaito) んー・・・?コンボレシピみたいな?
22:42 (SAIKEI) まあそんな感じ
22:42 (SAIKEI) 低空ダッシュするには
22:43 (SAIKEI) ジャンプをさせてさらにダッシュ
22:43 (SAIKEI) そして攻撃
22:43 (SAIKEI) と三つの動きが必要になるわけだが
22:43 (SAIKEI) 変数で制御しちゃえば楽なんだよね
22:43 (okihaito) そーなのかー
22:43 (SAIKEI) あと1F目から無敵な回避ってのは普通にあるよ
22:44 (okihaito) バーサーカーのコンボも確か変数制御だったかな
22:44 (okihaito) 命中した攻撃は何かを記憶してその記憶した値に応じてコンボが変動する
22:44 (SAIKEI) ただそうすると超反応上等になって対人AIにならないから
22:44 (SAIKEI) かといってあほみたいに中段を喰らうわけにもいかないので
22:45 (okihaito) 対人想定するならrandom低めにしたり複数回食らったら回避確立上げればおk
22:45 (SAIKEI) 記憶させる必要があるんだね
22:45 (SAIKEI) ガードもしてほしいんだ
22:46 (okihaito) んー・・・どちらにせよ1回は食らうからその記憶した情報を何に使うかだねぇ
22:46 (p-rom) AIにきっちりガードさせるのって意外と難しいのかしら
22:46 (SAIKEI) まあそんなこんなでできるなら多くの変数は欲しいって話だね
22:46 (okihaito) そうだね
22:46 (SAIKEI) AIのガードってのは常に課題になるね
22:47 (okihaito) きっちりガードさせるのは結構難しいよ
22:48 (okihaito) 最寄の敵が地上か空中かでしゃがみか立ちかに分岐するけど中断と立ち下段とガー不が本当に厄介 あとヘルパー攻撃
22:49 (SAIKEI) 立ち下段は普通なら問題ないんだけどガード切り替えの方式によってはめんどうなもの
22:49 (SAIKEI) ガー不は無敵切り替えしかジャンプで避けるしかない
22:49 (SAIKEI) バックステップでもいいか

p2とenemy

3/18
21:06 (mosa_) enemy,movetype =Aで判別してるとヘルパーが本体のキャラやタイムアタック系のキャラに反応できない
21:06 (mosa_) どうしたものか・・・
21:07 (SAIKEI) AI
21:08 (SAIKEI) ですかね
21:08 (mosa_) せやな・・・
21:08 (SAIKEI) あきらめてくださいと言わざるを得ないのが現実かと
21:08 (mosa_) 今回パッチ入れようとしてる点がそこなんだけど
21:08 (mosa_) やっぱそうだよなあ・・・
21:09 (mosa_) せいぜい本体の位置が画面にあるか無いかで判別する程度
21:09 (mosa_) ヘルパーに張り付かれてたら詰んどるな
21:09 (mosa_) ある程度の誤作動は諦めてp2とenemyの併用でいくか
21:13 (okihaito) マリオ1-1みたいなキャラ相手だとどうしても変に動くよね
21:13 (SAIKEI) まあ人間操作前提ですあらねー
21:13 (mosa_) ターゲットを壊せとか
21:13 (mosa_) 棒たちのままだった
21:14 (okihaito) 自キャラだと組み手蛟がそのタイプか
21:14 (mosa_) そうそうKFM軍団とかフルボッコされる
21:14 (SAIKEI) まあこれはどうかは知らないけど
21:14 (SAIKEI) いまやAIによる闘いを見るのがメインではあるが
21:15 (SAIKEI) 本来は異なる作品のキャラ同士で対戦できるってのが
21:15 (SAIKEI) 根本じゃなかったかなーとは思う
21:15 (SAIKEI) 遊び方はMUGENだけどね
21:15 (okihaito) 組み手蛟の本体は無意味に高速移動を繰り返すだけだからenemynearのリダイレクトが全く役に立たなくなるんだよなー
21:16 (mosa_) まぁ、そうだけど・・・俺のキャラは手動では使われないだろうしなぁ
21:17 (mosa_) enemynearだとドナルドみたいな分身キャラに惑わされない利点とかはあるんだけどね
21:18 (SAIKEI) まあ最善の手ってのはないよねー
21:18 (SAIKEI) ヘルパーと戦うってのがそもそも難しい
21:19 (okihaito) enemynearが働かない相手は鬼巫女Rとか村人Jとかの異端キャラだから普通に使ったほうが多くのキャラに対応できてお得ではある
21:20 (mosa_) だねぇ・・・

AIをvarで制御

3/15
21:41 (SAIKEI) 最近のAIの作り方は
21:41 (SAIKEI) changestateを使わないで
21:41 (SAIKEI) varのみの制御でやってるな
21:41 (SAIKEI) command=""の部分に || var(○)=XXX
21:42 (SAIKEI) 全て追加してね
21:42 (okihaito) cmdのあれに?
21:42 (SAIKEI) そうそう
21:42 (SAIKEI) ついでに本体動作ステートも一通りみて
21:42 (SAIKEI) commandがあったらとにかくそこに||~~を追加する
21:42 (okihaito) ふむ・・・確かにそれだと記述量も抑えられるし人操作でもAI操作でも機能できるか
21:43 (SAIKEI) 公開しているラオウAIがその方式
21:43 (okihaito) コマンド違って同じ技だけど少し内容が違う場合はどうするの? 火柱やワープみたいな
21:43 (SAIKEI) そういうタイプは
21:44 (SAIKEI) x なら100 y なら200みたいにしておいて
21:44 (SAIKEI) そのどちらでもchangestateはするが
21:44 (SAIKEI) 動作のほうでどこに火柱を出すかの情報も同時に設定するって感じかな
21:44 (SAIKEI) ワープにしたって
21:44 (okihaito) ふむふむ
21:45 (SAIKEI) 結局command="○"の違いを読み取ってるんだから
21:45 (SAIKEI) 結果的に同じようにAIにも分岐させることができる
21:45 (okihaito) そうか・・・それもそうだな
21:46 (SAIKEI) ガード切り替えとか全部この方式にしちゃえば
21:46 (SAIKEI) 一つのAIファイルだけでほとんどの動作を制御できるようになるから
21:46 (SAIKEI) 便利かなーって
21:46 (SAIKEI) 面倒なしゃがみ、立ちガード切り替えとか
21:47 (mosa) 確かにいいねぇ・・・

 |   |  次のページ

 検索フォーム


 全記事表示リンク

 全記事表示(500件ずつ)


 プロフィール

vesper

Author:vesper

IRCチャンネルの
#凶悪MUGEN
#凶悪MUGEN_雑談
のログからMUGENに関するものを編集・公開しています。
修正した方が良い箇所があった場合は知らせてもらえると助かります。
MUGEN界隈からはリンクフリーです。
その他からのリンクはご遠慮ください。
このブログをリンクに追加

IRCへの入り方などは
IRCに関する記事
をご覧ください。

簡易凶悪MUGEN IRC情報
・ホスト名
 [irc.friend-chat.jp]
・ポート番号
 [6664]
・チャンネル名
 [#凶悪MUGEN]
 [#凶悪MUGEN_雑談]
 (以下はお好みで)
 [#凶悪MUGEN_艦これ]
 [#凶悪MUGEN_スマブラ]
 [#凶悪MUGEN_麻雀]
 [#凶悪MUGEN_緋想天]
 [#凶悪MUGEN_アカツキ]
 [#凶悪MUGEN_小説]
 [#凶悪MUGEN_絵チャ]

・推奨IRCクライアント
 LimeChat2


 カテゴリ

記述の子カテゴリは目安程度に考えてください。

 最新コメント


 最新記事


 カウンター

累計の閲覧者数:

現在の閲覧者数:

 RSSリンクの表示


他ブログ更新情報(最新70件)

仕様上、下記のリンク一覧でサイトリンクにあるサイトはこの一覧に出ません。

Twitter


基礎リンク集


リンク

サイトに断り書きがない限りリンクさせてもらっています。
リンクしてほしくない場合はお気軽におっしゃってください。