他人の空似自作物置場

th135_ai.zip/Readme.txt

プログラム名:th135_ai

用途:東方心綺楼で独自AI

使い方:
・main.rbを任意の動作をするAIとして記述します
・東方心綺楼を起動します
・th135_ai.exeを起動します
・VS Playerで2P側をキーボードに設定します
・対戦を始めます

AI同士で戦わせる:
・1Pと2Pで被らないようにキーを設定します。
・戦わせたいAIを読み込ませた状態でth135_aiを2つ立ち上げます
・両方キーボードでVS Playerを始めます。

操作:
・F9: スクリプトリロード


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


Q&A:
  Q:1Pまで動くんだけど
  A:キーボード入力をエミュレートして動作しているため
  1Pと2Pで使用するキーがかぶっている場合どちらも動いてしまいます。
  キーコンフィグは自動で読み取りますので
  使わない任意のキーを指定してください。

  Q:このAIを使ったら心綺楼のデータ壊れる可能性ある?
  A:あります。
  th123_aiなどと違い心綺楼本体にコードをインジェクションし
  動作を変更する形で実装されています。
  なので、使用する際はデータのバッグアップなどをお願いします。

  Q:1P側をAIに出来ないの?
  A:2つ起動すると2つ目が自動的に1Pとして動作します。

  Q:AIを1P、自分を2Pで対戦できないの?
  A:AIを一度2つ立ち上げて、最初に立ち上げた方を終了すれば可能です。

  Q:心綺楼のバージョン上がったんだけど
  A:本アプリは自動アドレスサーチ機能を搭載しています。
  なので心綺楼本体が更新されても、そのまま使用できます。

  Q:フレームが飛んだんだけど
  A:スペルカード宣言時など一部状況でフレームが飛ぶことがあります。
  同期方法の仕組み上回避することが難しいため
  仕様とさせてください。

  Q:防御力がおかしいんだけど
  A:set_equipに問題があり、set_equip前にフォースシールドを装備していると
  効果が重複してしまうためです。
  直せるなら直したいのですが、直す方法がわからず放置されています。
  申し訳ありませんが仕様とさせてください。

  Q:箒使いきってもトップスピードまでが早まったままなんだけど
  A:上記フォースシールドと同じ問題が箒にも存在するためです。

  Q:mrubyで使える機能なのかがわからなくて辛い
  A:mirbというmrubyを対話環境で試せるアプリを同封しました。
  そちらでお試しください。

  Q:キャラクターセレクトで選んだのと違うキャラになるんだが
  A:AI側でキャラクターセレクトを書き換えられる機能があるので
  それを使用したAIを実行しているためと思われます。

  Q:AI終了してもキャラセレおかしいままなんだが
  A:実はキャラクター選択の書き換えは対戦開始時ではなく
  対戦待機中に行われています。
  よってすでに設定が行われた後でAIを終了しても
  次の対戦までは書き換わってしまいます。
  一度対戦する、心綺楼を再起動するなどで対処して下さい。

  Q:ポーズ画面のカード構成と実際の装備が違うんだが
  A:AI側で装備を書き換えられる機能があるので
  それを使用したAIを実行しているためと思われます。

  Q:AI終了しても装備おかしいままなんだが
  A:キャラセレ変更と同じく、装備変更も対戦待機中に行われています。
  よってすでに設定が行われた後でAIを終了しても書き変わったままとなります。
  一度対戦する、心綺楼を再起動するなどで対処してください。

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


メールアドレス:sweetie(あっと)click3.org


ライセンス:
本プログラムはMITライセンスされたプログラムmrubyを使用しています。
{{{
Copyright (c) 2013 mruby developers

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

Additional Licenses

Due to the reason that you choosed additional mruby packages (GEMS),
please check the following additional licenses too:

GEM: mruby-sprintf
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-print
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-math
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-time
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-struct
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-enum-ext
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-string-ext
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-numeric-ext
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-array-ext
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-hash-ext
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-range-ext
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-proc-ext
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-symbol-ext
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-random
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-object-ext
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-objectspace
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-fiber
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-toplevel-ext
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-bin-mirb
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-bin-mruby
Copyright (c) 2013 mruby developers
License: MIT

GEM: mruby-require
Copyright (c) 2013 mattn
License: MIT
}}}

本プログラムはMITライセンスされたプログラムSquirrel3を使用しています。
{{{
Copyright (c) 2003-2012 Alberto Demichelis

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-----------------------------------------------------
END OF COPYRIGHT
}}}

自作部分のライセンス:
・本ライセンスにおいて、全ての条項は「変更の有無を問わず、明示暗示を問わず、商業慈善を問わず、
	個人法人を問わず、保持使用を問わず、有料無料を問わず、全体一部を問わず、コピー派生を問わず
	実行ファイルソースファイルを問わず、故意錯誤を問わず」と装飾されている物として扱う。
・著作権者は本ソフトウェアに関する一切の保障義務をもたない。
・上記条項唯一の例外として、本ライセンスに違反した場合を除いて著作権者から
	本ソフトウェアに関する一切の法的措置を受ける事が無い事のみ保証される。
・著作権者やその他保持者がこのライセンスの範囲で行う活動に支障が無い範囲であれば何を行っても構わない。
・上記条項の”何を行っても構わない”には本ソフトウェアの製作者を偽っての再配布も含まれる。
・全ての権利の行使において、著作権者への連絡、著作権者やライセンス条項の記載、
	適用ライセンスなどの制限は一切存在しない。
著作権者名:sweetie


面倒な人向けライセンス解説:
mrubyとSquirrel3のライセンスをどこかに書いておけば再配布出来ます。
自作部分のライセンスについては記載義務すらありません。
上記二つだけ説明書に放り込んでおくといいでしょう。


スペシャルサンクス:
ayokura 行き詰まった際の助言、sendkeys/commandの実装、Th135Character設計その他


技術情報(と、どうでもいい話):
自動アドレスサーチとか言ってますが、実際には3箇所だけなので大したことない。
Squirrel3の内部に乗り入れて情報を吸い出し、共有メモリーで共有し
mrubyに共有したデータをバインドして、mrubyコードで操作するという流れ。
以前は心綺楼=>th135_aiの順で起動しなきゃ動作しなかったがver0.11から大丈夫になった。
マイクロスレッドの実装でmrubyのバグを踏み、requireの導入でもまたバグを踏み
今回やたら自作コード以外のバグを踏んでる、なぜだ。
心綺楼内部のSquirrelのコードとインジェクションしているDLLのSquirrelのコードは
標準ライブラリが別空間の物を使っている関係で混ぜるな危険状態。
しかし混ぜている。
その結果、ちょっと間違えると即クラッシュという悲しい状態に。
同期方法として、Squirrelの関数呼び出し時にフックする機能を使っているが
スペル宣言時にはSquirrelの関数を呼ばずにフレームを終えている。
そのため、同期をとる手段がなく、そこだけフレームを落としてしまう。
フォースシールドと箒の枚数を加算する方法は見つかったのだが
減算する方法が見つからず、また現在何枚セットしているかの情報も
見つからなかったため、毎回0枚と仮定して加算している。
そのため、set_equip前に装備済みだったりするとおかしくなる。
何とかしたいんで、誰か方法教えてください。
同期はかなりいい加減
マルチコアの環境に限るとはいえもうちょっと早くすることが可能なはず。
Th135Characterはayokuraさん発案、確かに便利なので即採用。
set_character_idはキャラセレで勝手に選ばれるようなのを目指していたのだが
挫折したという経緯がある。
キャラクター色の重複対処は自前でやるつもりだったのだが
同じだと勝手に変わることを発見したので手抜きして心綺楼にやってもらっている。
実はmrubyはだいぶ古いものを使っている。
動作チェックがしんどいという理由だけで更新を渋っている、働け。
set_equipは別にmainの中でも動作するのだが、中で心綺楼内のメソッドを読んでいる関係で
絶対に動作するとは言えない状態だったので、document的には未定義としていた。
だがそうなると、キャラセレで選んだキャラでAIを起動するということができない。
ので、色々試してみて問題なさそうだったので未定義の記述を撤去した。
対戦中に呼んで装備切り替えたり、宣言使用の時だけスペルにしておいたり
装備をめまぐるしく変えて装備欄一個で全技使い分けたりといろいろできますが非推奨。
ちなみに、対戦中にいくら変更しようが信仰はちゃんと追従するようになってます。