2009/10/05
ツール作者様、並びにツールスレやAIスレの皆様、いつもお世話になっています。


test_area.aiリードミー


・これを使ってできること
各キャラの(打撃の)攻撃判定を調べ、記録することができます。
(射撃やその他オブジェクトには対応していません)




・使用法
起動すると、自分の攻撃判定を探し始めます。
th123_aiで設定した側のプレイヤーをキーボードで操作します。
自分が打撃の攻撃判定をだすと、その攻撃判定がでている時間と判定の範囲が出力されます。


例:
newData(act 301):
{   {  {14,15}  ,{ {84,164,154,74} ,{32,134,120,56} }  }  ,{  {16,17}  ,{ {92,76,154,0} ,{38,98,102,18} }  }   }

これは、

自分がモーション値301の行動をとったとき
14-15フレーム間に、自分の位置から(+84,+164,+154,+74)の範囲と(+32,+134,+120,+56)の範囲に攻撃判定が発生した
16-17フレーム間に、自分の位置から(+92,+76,+154,+0)の範囲と(+38,+98,+102,+18)の範囲に攻撃判定が発生した

ということを表しています。
攻撃範囲の数値は自分の位置x,yを0,0とした相対座標で、それぞれ攻撃範囲の(左,上,右,下)の座標を表しています。

↓ソースから引っ張ってきたコメント文より。こんな感じになっています。

--AIで使用するデータ:
atkArea={};
--以下はイメージ。独自に名前を付けたデータ型がある訳ではないので
--atkArea[motion]=data={data_1,data_2,...,data_m};
--atkArea[motion][i]=data[i]=data_i={time,area};
--atkArea[motion][i][1]=data_i[1]=time={start,end};
--atkArea[motion][i][2]=data_i[2]=area={area_1,area_2,...,area_n};
--atkArea[motion][i][1+j]=data_i[1+j]=area_j={left,top,right,bottom};
--例:
--atkArea[301]={   {  {14,15}  ,{ {84,164,154,74} ,{32,134,120,56} }  }  ,{  {16,17}  ,{ {92,76,154,0} ,{38,98,102,18} }  }   }


newDataが出力されると同時に、同じモーション値で過去に記録したデータ(oldData)が出力されます。
データの見かたはnewDataと同様です。
過去に記録したデータがない場合、oldDataの数値は表示されません。
newDataとoldDataが同じ場合、ここでoldDataの数値が出力される代わりに equals old one. と出力されます。


newDataとoldDataが異なった場合 (new:F8,old:F9) と出力されるので、記録の上書きを行うかどうかを決めます。
newDataとoldDataを見比べて、どちらを記録に残すか決めてください。
newDataを残す場合はF8を、oldDataを残す場合はF9を押します。
(押すときは非想天測を操作可能な状態で押してください。特に黒窓が前だと反応しません)
 done. と出力されたら処理完了です。
再び攻撃判定を探し始めますので、いろいろデータをとってみてください。

なお、Shiftキーを押している間はデータの比較を行いません。ただしShiftを押している間もデータの取得だけは行っています。
厳密に言えば、あるモーション終了時にShiftを離していた場合、そのモーションのデータの比較が行われます。
例えばAAAのデータが欲しいときは、AAAのモーションが始まるまでShiftを押しっぱなしにして、AAAのモーションが終わる前にShiftを離せばできます。


攻撃判定を探している状態でF10キーを押すと、今まで記録したデータをファイルに保存します。
ファイルに保存しないで終了した場合、それまで取得したデータは失われてしまうので注意です。
ファイル名は123666xx.dat(xxはキャラID)です。script_dataフォルダ内に保存されます。
保存したデータは次回起動時に呼び出されるので、追加や変更ができます。
ちなみにデータはファイルにそのまま文字で記録しているので、メモ帳などで簡単に書き換えることが可能です。
取得したデータに納得がいかないので修正したい、データのずれを直してスッキリしたい、といったときにおすすめです。
……というかかなりずれると思うので、このデータを参考にキャラ別wikiとか見ながら修正、とかした方がいいかもしれません。

座標データの細かさは、設定.txtの10行目にあるAREA_DT_CUTで自由に設定できます。
仕様上1つの座標が1違うだけでも区別されてしまうので、あまり細かすぎるとデータがごちゃごちゃになって分かりづらくなってしまいます。
デフォルトで2に設定していますが、4とかもっと大きな値にしていいと思います。



・おまけ
実際にこれを使って記録してみた衣玖,天子のデータ(12366613.dat,12366614.dat)を一緒に入れておきます。
だいぶすっきりしたデータですが、普通にやってもこんな綺麗な値は殆どでません。
モーション中にキャラが動く(x,yが変わる)と、相対座標がぶれて一定の値になりにくいためです。
ではどうやったかというと……反対側のキャラを操作して、x座標が動かないように頑張ったのです。


台風や三粒の天滴などで反対のキャラをアーマーや無敵にする
自分を画面端背負いにして反対のキャラでひたすら押す
押されながら調べたいモーションを行う

とか

自分が相手を画面端に追い詰める
相手を上飛翔で逃がす
自分が画面端に向かってぴったり張り付いた状態で行動

とかしました。
衣玖さん遠Aのときは、遠A始動直後ストップウォッチで止めて接近……という荒業で。



・最後に
初心者が暇見てちょこちょこ作ったものなので、エラーとか不都合、不満要素があるかもしれません。
改造、借用等はご自由にどうぞ(寧ろそのためにあるといっても過言では……)
つまらないものかもしれませんが、何か参考になるものがあったら幸いです。
