他人の空似自作物置場

東方緋想天で動作するAIツール、ほぼ上位互換のth123_aiがある。

プログラム名:th105_AI

用途:東方緋想天で独自AI

注意:
このプログラムは現在オープンαテスト段階です。
知的好奇心を満たすためならどんな苦労も厭わない!という類の人以外触らないことをお勧めします。


使い方:
・StoryとVS Network以外のモードで1Pをキーボードのアリス、2Pを自分で使いたいキャラに設定します。
※ゲームパッド使いならば1Pと2Pはどちらでも構いません
・ai.exeを起動します。
・対戦を始めます。
・場合によりtest.aiを編集して楽しみます。

インストール:
zip解凍するだけ

アンインストール:
レジストリもテンポラリファイルも弄っておりません。
フォルダごと削除するだけですっきりさっぱりおさらばできます。

ファイル解説:
th105_ai.exe		プログラム本体です。
th105_ai.ini		設定ファイルです、設定必須ではないのでスルー可。
Readme.txt		今読んでいるこれ
History.txt		更新履歴です。
script/test.ai		AIスクリプトです、テキストエディタで書き換えることで動作内容を変更できます。
document.txt		test.aiを書くための超簡易リファレンスです。
motion.txt		上記リファレンスの付属物です。
skill.txt		同上
spell.txt		同上

免責事項:
これに同梱されたプログラムその他が原因で発生したいかなる損害を当方は一切関知しません。
また、全てのプログラムがウイルスではないという証明も、ウイルスに感染していないという証明もありません。
自己責任でお使いください。

Q&A:
	Q:キーボードプレイヤーなんだけど、キーがかぶって対戦できない
	A:プロファイルから使うキーを読み込んでいます。
	なので、AI用に使わないであろうキーを設定してあげればキーボーダーでも問題なく対戦できます。
	ただし、アルファベット以外を設定した場合に問題が起こることが多いので
	基本的にアルファベットのみで設定することをお勧めします。

	Q:緋想天で対戦画面に入るたびにすぐ強制終了するんだけど
	A:一つ下と二つ下のQ&Aのほうをご覧ください。

	Q:PANIC: ほにゃらら〜と表示されてすぐ終了してしまう
	A:AIの中でエラーしています。
	本プログラムがaiで想定されたものよりも古いと思われます。
	もし最新版でも同じエラーが出る場合、aiの作者さんまでご連絡を

	Q:認識はしているけど動きがメチャクチャ
	A:1P側がキーボードの設定になっていないか、指定されているキーが未対応のキーだと思われます。
	数字、記号、テンキー、その他特殊キーは認識しない可能性があります。
	qwertyuiopaなど、アルファベットを使ったキーコンフィグのプロファイルを用意してください。

	Q:「外部に通信しようとしています、許可しますか?」的なダイアログ出るんだが
	A:th105_ai本体で致命的問題が起きた場合に自動でエラーを作者宛に送信するよう組まれています。
	そのため、一部セキュリティーソフトは起動時、もしくは送信時に上記のようなダイアログを出してユーザーに同意を求めてくる可能性があります。
	ブロックしても使用に問題はないので、デバッグなんてシラネという方や作者信じられませんという方はブロックしてください。

	Q:スクリプトの読み直しが面倒
	A:F12を押せば再読み込みされます
	ただし反応が少々悪目なので、長めに押さないと反応しないかもしれません。
	またAIがアクティブでなくともリロード動作は可能です(エディタで編集後即リロードできるように)

	Q:いちいち別スクリプト読むためにini書き換えるの面倒
	A:F11キーからダイアログを開いて読み込めます。
	また、iniでdialogとしておけばデフォルトでダイアログ指定でき、ドラッグ&ドロップでも読み込ませることが可能です。

	Q:タイトルバーに色々表示されているけど何これ
	A:特に意味はありません、気にしたら負け。

	Q:黒窓は使い辛いし無駄にスペースとりすぎ
	A:仕様です。

	Q:test.aiの書き方まったくわからん
	A:現在αテスト中に付き一部変人以外寄せ付けないのは仕様です。
	スレで作者を煽りつつマターリお待ちください。

	Q:黒窓に表示されている数値は何?
	A:aiから出力されている何かです、本プログラムから出力しているものではありません。
	(0.40ころまではデフォルトで1Pと2Pのアクション値を出力していましたが廃止しました)

	Q:スクリプトの○○の動作おかしくね?
	A:アルファテスト中に付き(ry
	緋想天ツールスレか作者メールアドレスまで連絡してもらえれば直るかもしれません。

	Q:AIが極稀に意図しない動作をする
	A:仕様です。
	緋想天に一切の害を与えないよう設計されているため同期が完全ではありません。
	なので、AIにもかかわらずキー入力失敗したり、射撃を見落としたりします。
	ただし、本当にバグの可能性もあるので作者に報告してくれてもかまいません。

	Q:AIで○○なことをしたいけど今のAPIだけでは実現できない
	A:作者の力不足です。
	緋想天ツールスレか作者メールアドレスまで要望を投げてもらえればいつか実装されるかもしれません。

	Q:set_key_delayとset_data_delayって何が違うの?
	A:set_key_delayはキー入力全てに影響しますが、set_data_delayは敵の状態取得のみが遅くなります。
	そのため、超反応を抑止したいならset_data_delayだけで十分でしょう。

	Q:緋想天更新かかって使えなくなったんだけど
	A:このプログラムは緋行跡付属のSwrAddr.iniを利用することが可能です。
	対応版の緋行跡がリリースされている場合に限り、
	SwrAddr.iniをai.exeと同じディレクトリ上に配置し、中の ; を全削除で動作するようになるかもしれません。
	ただし、あくまでも緋行跡と共通部分に限るので、見た目正常でも大して動作しない可能性が高いです。
	動作しない場合は作者の方までご連絡を。

	Q:その他バグをみつけた or 動作しない or 要望がある
	A:緋想天ツールスレに書き込んでもらえれば、確認次第対応可能であれば対応します。
	どうしても直に伝えたい場合、公開しても問題が無いメールアドレスにて
	下部に記載されたアドレスまでメールをどうぞ。


作者:名無し
メールアドレス:bnryxx332a(あっと)mail.goo.ne.jp
ライセンス:
本プログラムはMITライセンスされたプログラムLuaを使用しています。
http://www.lua.org/license.html
Copyright (c) 1994-2008 Lua.org, PUC-Rio. 

それ以外の自作部分について、ほぼ全ての権利を放棄しています。
再配布・改変・転用・売買などなど全て自由です。
たとえ「作者を偽っての再配布」をしたとしてもなんら法的措置に訴えることはありません。
また、上記の権利を行使する際に
作者へ連絡・作者の明記・ライセンスの制限・使用用途の制限・配布先の制限・ソースコードの配布などといった条件を課すことはありません。
全ての権利は無条件で行使することが可能です。


スペシャルサンクス:
freelight6	テストプレイ、モーション値の収集、その他色々
ツールスレ931	モーション値の収集および表の整形
同419,425	オブジェクト情報に関する技術提供
同447,448	Luaエンジン初期化に関する技術提供
同652		緋想天アクティブ判別方法
同948		アイコン画像の提供
その他、ツールスレおよびAIスレ住民全て


技術情報(と、どうでもいい話):
SwrAddr.iniが読込は緋行跡が非常に寛大なライセンスであり、作者が緋想天が出るたびに更新したくないために実装されています、中の人が同じわけではありません。
キーボードエミュレート→keybd_event、情報の読み取り→ReadProcessMemory、スクリプト→Lua、ということで技術も労力も大して注ぎ込まれていません、きっと誰でも作れます。
本プログラムは緋想天の動作内容にキーボード操作を除いて一切影響を与えません、あくまで情報読み取りのみを行っています。
緋想天に影響を与えうる動作一覧:
	カードリスト読み込み時に行うProfile以下のファイルへのアクセス
	ウィンドウをアクティブにする際に使うCreateRemoteThread
	AIスクリプトからのキーボード入力
	情報読み取りに使うOpenProcess、ReadProcessMemory
rep2prof、pn2cのコードを大量に使用しています、そのため一部意味がないコードが存在します。
コンパイル環境はコマンドライン版VC++14.00.50727.762、CodeGear付属のBCC32でも動作することを確認しています。
VC版は何かライブラリ依存(msvcrXX.dll?)しているようなので、リリース版はver6.0からBCC一本になりました。

        
2009/04/16	ver0.78d
リロードした際に黒窓をアクティブにする機能を緋想天フルスクリーン時は抑制するように修正
iniで黒窓を手前に表示する機能のON/OFFを設定可能に出来るMyWindowActive項目を追加
iniで0を設定した際、場合により誤動作する可能性があった不具合の修正

2009/04/13	ver0.78c
リロードした際に黒窓も手前になる機能の追加
get_obj_dataを使用した際にluaスタックが破損し、返り値が不定になっていた不具合の修正

2009/04/11	ver0.78b
一部状況下でget_card_cost,get_card_cost2,get_card_idを使用した場合に例外を吐く不具合の修正(Thx 例外報告を行ってくれた誰か)
ストーリーモードでキャラクターが同時に三人存在する状況になった場合に例外を吐く不具合の修正
一定時間処理が滞った際にチート対策コードが誤動作する可能性があった不具合の修正
緋想天自動実行に失敗した場合にファイル選択ダイアログを出すように変更
iniに緋想天自動実行する際のパスを設定できるStartupTH105項目を追加
上記項目を自動的に更新する機能の追加

2009/04/10	ver0.78
二重起動時にPlayerが反転する機能の廃止
二重起動時に一つ目とは逆のPlayerを使う機能の追加
io.lines関数で任意のファイルをオープンできてしまった不具合の修正
get_obj_dataで取得できる情報の追加
iniに小数点を含む値を設定すると場合により例外を吐く可能性があった不具合の修正(Thx 例外報告を行ってくれた誰か)
iniに緋想天起動タイミングを設定できるth105_start項目を追加

2009/03/01	ver0.77b
ver0.76bのエラー修正が上手くいっていなかった不具合を修正(したつもり)

2009/03/01	ver0.77
get_obj_dataに返り値追加
チート対策1がver0.76より動作していなかった問題の修正
チート対策3
構文エラーを起こしてからリロードすると例外を吐いていた不具合の修正
Luaスクリプトエラーの検地方法を一部従来方式に巻き戻し(ファイル占有問題対策)

2009/03/01	ver0.76b
ファイル読み書き機能周辺で問題が起こりそうだった箇所を修正
一部状況下で例外エラーする可能性があった不具合を修正(Thx 例外報告を行ってくれた誰か)
実数演算において例外エラーを吐く可能性があったのを修正したつもり(未確認)

2009/02/26	ver0.76a
ゲームパッドをキーボードと誤認することがあった不具合の修正
例外報告機能が動いていなかった不具合の修正
一部APIで不正な引数を検地できていなかった不具合の修正
set_key_delayが正常に動作していなかった不具合の修正
is_ard_useが正常に動作していなかった不具合の修正

2009/02/24	ver0.76
環境変数my_correctionとenemy_correctionの実装
関数get_correctionを実装
F11キーによるファイル選択読み込み機能が正常に動作していなかった不具合の修正

2009/02/24	ver0.75
一部状況下でPlayerが反転する不具合の修正
get_opt_xyで小町の霊魂の位置を取得できるように
エラーが起きても検地できなくなっていた不具合の修正)
io以下の関数を使用可能に(一部関数の仕様が公式のものとは異なります)
環境変数my_hitarea_nとenemy_hitarea_nとmy_attackarea_nとenemy_attackarea_nを実装
関数get_obj_attackareaとget_attackareaとget_obj_hitareaとget_hitareaの実装
Luaスクリプトエラーの検地方法を変更(2009/03/01:書き忘れに付き追記)

2009/02/20	ver0.74
Ver0.72から一部環境下で例外を吐いていた不具合の修正(Thx 例外報告を行ってくれた誰か)
get_obj_dataの返り値を一つ追加
環境変数my_img、enemy_imgを実装
get_opt_xyが正常に動作していなかった不具合の修正
get_opt_xyでアリスの人形位置を取得できるように
get_special_dataで取れるデータをいくつか追加

2009/02/19	ver0.73b
command関数の一部機能が正常に動作していなかった問題の修正

2009/02/19	ver0.73a
my_xspeed、my_yspeed、enemy_xspeed、enemy_yspeedにアクセスできなかった不具合の修正

2009/02/17	ver0.73
チート対策その2
0.72でcommand関数が正常に動作していなかった不具合の修正
iniに設定された側がゲームパッドになっている場合、もう一方に切り替える機能の追加
th105_aiが多重起動されている場合に、もう一方の操作に切り替える機能の追加

2009/02/16	ver0.72
環境変数my_xspeed、my_yspeed、enemy_xspeed、enemy_yspeedを実装
require関数とiniのStartupAIに機能追加
チート対策
緋想天探索中にF10キーで自動起動する機能の追加

2009/02/15	ver0.71b
create_threadが正常に動作しなかった不具合の修正
上記変更に伴って、各種関数の書き直し
create_threadの動作内容が若干変更されました

2009/02/04	ver0.71a
yieldを一度も呼ばずにスレッド終了すると例外を吐いていたバグの修正(Thx 例外報告を行ってくれた誰か)
x==exのときx>exとして扱われていた問題を修正

2009/02/03	ver0.71
AI動作中はアイコンが変わる機能の追加
関数get_special_dataを実装
環境変数my_hitstopとenemy_hitstopを実装

2009/02/02	ver0.70a
対戦開始前にリロードすると例外を吐いていた問題を修正
aiスクリプトでmain関数が終了すると固まっていた不具合を修正

2009/02/01	ver0.70
擬似マイクロスレッドからきちんとしたマイクロスレッドに
関数create_threadを実装
上記二つの変更に伴いyieldの挙動が変更されました。
アイコンが表示されるようになりました(thx「東方緋想天 関連ツールスレッド2」>>948)

2009/01/29	ver0.68
require関数の挙動を一部変更
タイトルバーにバージョン表記を追加。
対戦開始ごとに自動でリロードされる機能の追加。
キャラクターごとに読み込むスクリプトを変更する機能を追加

2009/01/27	ver0.67
my_cardとenemy_cardがカードゲージ1未満のとき動作がおかしかったのを修正
小数点演算で極小の値を扱おうとすると例外を吐いていたバグの修正
緋想天が存在しないとき、自動で緋想天を立ち上げる機能の追加。

2009/01/25	ver0.66
enemy_dirとmy_dirとis_dir_frontが一部状況下で正常動作していなかったバグを修正
ver0.61の方法では不十分だったので再度バグ修正(Thx 例外報告を行ってくれた誰か)
例外送信にVersion情報を追加

2009/01/24	ver0.65
例外送信時にY/Nで送信するか選べるように変更

2009/01/24	ver0.64
key_delay、data_delay、weather_delayに代入した場合にもset_xxx_delay関数と同じ効果があるように変更
例外エラー時にある程度詳細情報を表示する機能の追加
上記内容を自動でサーバーに報告する機能の追加
スクリプトエラーのENTER待ちがおかしかったバグを修正
一部状況で非常にリロードし辛かった問題を修正
AI読み込みタイミングが緋想天発見後ではなく、th105_ai起動時だった不具合の修正
プロファイル名が長いときget_deck_list関数が失敗していた不具合の修正

2009/01/21	ver0.63
luaエンジンをdllから内蔵式に変更
関数get_key_statとget_key_mapを実装
ver0.62の更新で1フレームでも同期ずれが起きた際にkey_resetされていた不具合を修正
一部状況下でリロード出来なかった問題を修正
標準ライブラリのosから時間関連機能のみ使えるように変更
関数get_real_key_statを実装
同期精度の向上その2

2009/01/20	ver0.62
同期精度を向上
F11キーを押すことでスクリプトを選択してリロードできる機能の追加
自動認識できるキーの追加
get_deck_listの対象指定を廃止し自分のデッキしか見れないように変更

2009/01/19	ver0.61
極稀に例外を吐く可能性のあったバグを修正

2009/01/18	ver0.60
関数get_deck_listを実装
data_delayが+1されて作用していた不具合の修正(この修正により既存スクリプトがずれる可能性があります)
F12キーを押すことでスクリプトをリロードする機能の追加
エラー時に終了ではなくリロードするように変更

2009/01/17	ver0.55
get_obj_data使用時に強制終了する恐れがあったバグの修正
get_obj_dataの返り値にHPを追加
関数get_opt_xyを実装
対戦終了後にキーが入りっぱなしになる不具合を修正
関数get_card_cost2を実装

2009/01/16	ver0.54
緋想天がアクティブでないときにAIの動作を中断する機能の追加(thx「東方緋想天 関連ツールスレッド2」>>652)
キー入力が20ms程度遅延する事があったバグの修正
is_card_useにおいて、一部状況下で使用できるのに偽が返っていた問題を修正
関数get_card_costを実装
晴嵐時にmy_card,enemy_card,get_card_id,get_card_costは-1になるように変更(暫定)

2009/01/15	ver0.53
環境変数is_dir_front、my_dir、enemy_dirを実装

2009/01/15	ver0.52
関数is_card_useを廃止
環境変数is_card_useを実装
環境変数weather2とweather_timeを実装
環境変数weather_delayを実装
関数set_weather_delayを実装

2009/01/14	ver0.51
環境変数dis_x,dis_y,dis2の実装
関数commandを実装
関数is_card_useを実装
緋想天発見時に自動的に緋想天をアクティブにする機能の追加

2009/01/13	ver0.50
2P側にもAIを適用できる機能の追加

2009/01/12	ver0.48
get_card_id関数にデバッグ用の文字出力コードが混入したままであったバグの修正
タイトルバーの更新頻度を下げるように変更

2009/01/10	ver0.47
関数get_obj_dataを実装
環境変数obj_nをenemy_obj_nに名称変更
環境変数my_obj_nを実装
AIにget_obj_dataを使って人形振起を使うコードを追加

2009/01/08	ver0.46
key_offでUPかDOWNを指定するとLEFTかRIGHTがONになることがあった不具合の修正
my_frameの取得ができていなかった不具合の修正
環境変数battle_timeを追加
lua標準のdebugライブラリを使用可能に(ver0.45の書き忘れ)

2009/01/07	ver0.45
関数set_key_delayとset_data_delayを実装
上記に伴って環境変数key_delayとdata_delayを実装
wait関数がyield関数と等価になっていた不具合を修正
key_on,key_offで斜めも入力できるように(10〜13)、それに伴い他のキー入力関数でも斜め入力が機能します。
環境変数d_front,d_back,u_front,u_backを実装

2008/12/31	ver0.44
1Pがゲームパッドの状態で対戦画面に入ると場合により例外を吐いていたのを修正

2008/12/30	ver0.43
読み込むaiファイルをダイアログから選択するように
wait関数を追加(指定回数だけyield関数を実行)
get_skill_lv関数を追加(指定したスキルのLvを取得する)
get_spell_id関数を追加(指定した位置のカードIDを取得する)
require関数を追加(別ファイルをaiとして実行する)

2008/12/27	ver0.42
luaから読み取れる情報にmy_frame/enemy_frameを追加

2008/12/26	ver0.41
luaから読み取れる情報にmy_card/enemy_card/my_air/enemy_airを追加
上の変更に伴ってAIの内容を微修正

2008/12/26	ver0.40
Lua標準ライブラリからioとdebugを使用禁止に(thx「東方緋想天 関連ツールスレッド2」>>447-448)
上記変更に伴って外部読込式に戻す。
スクリプトの流れをなんちゃってマイクロスレッド方式に変更(yieldの実装)

2008/12/25	ver0.31
Sleepする時間を固定16msから処理時間依存に
対戦中以外はSleepする時間を1000msに
AIに中距離以上なら射撃をグレイズする処理追加
吹き飛び属性の攻撃を当てたら6Bするように
スペカ使用に失敗したら切り替えるように
pn2cの機能が生きていたのを削除

2008/12/24	ver0.30
オブジェクトの位置を認識できるように(thx「東方緋想天 関連ツールスレッド2」>>419,425)
AIをオブジェクト座標を元にしたガード、危険がなければ接近する分岐を追加
Luaの標準ライブラリを使うことで危険な処理が実行可能なため、外部読み込みを一旦禁止に

2008/12/23	ver0.21
キーコンフィグを緋想天から読み取るように
AIに天候、霊力、スペカ枚数、相手被弾モーション分岐を追加

2008/12/22	ver0.20
AIを直にコーディングする方式からLuaスクリプト方式に変更
キーの入力方式を修正(fix)

2008/12/21	ver0.10
とりあえず試作