自己診断ならともかく、他のプログラムにまでちょっかいだすような代物の、どこが「ホムのAI」なんでしょうね。AIスレで話題になっていた技術的話。Glenelgが名指しで話題になっていた件なので、こちらに要約。将来、開発メモに移すかも。iniファイルにテキスト形式で記録し、起動時に読み込んでいる。同じデータをrequireで取り込むのと、FileI/Oで取り込むのでは、もちろんrequireのほうが速いです。それはあきらかで、議論の余地はありません。かかわらずGlenelgでiniファイルを採用しているのは、それなりの理由があるからです。設定をユーザーが直接編集することを想定して。luaソースでは、編集ミスをするとAIそのものが起動できなくなる。iniファイルなら、エラー処理を読取時に行えるので、起動しないことはない。AIがデータを出力する際。luaソースにするには、出力されるデータごとにさまざまな記載を行わなければならず、汎用的でない。iniでは、1つのデータ取り込み方式を作ってしまえば同じ処理でだいたいできる。言い換えると、上記に引っかからないもの:つまりは基本的に固定値である情報については、Glenelgでもluaソース化する価値はあると思います。†Glenelgでmapifo関連で現状の形式を採用したのには、もう1つ別の理由があります。友瀬が地図関連を設計した際の考えでは、地図情報をプログラムに組み込むということは、全世界のマップ情報をソースに書かなければならないと思いました。実際、カプラさんなど一部のNPCについては、全マップにある情報がluaソース化されています。多くの場合、1回のAI起動時に参照するデータは「ホムが現在いるマップに該当する情報」だけです。具体的な数量をいうと、ROに存在するマップは200近く。1回のAI起動では、そのうちの1つしか使わないのです。高速のlua形式にしたとしても、その分読むこむデータ量が200倍に膨れ上がるというリスクがあったわけです。どちらにしても「不要とわかっている」データをわざわざ読み込むのは愚劣と思いました。それが現状の「1マップごとに別ファイルで情報保存」の理由です。↑そして友瀬の間抜けな点:あるいは、LUA知識の弱さ。どんな状況であれ、わざわざAIスレで性能を指摘している以上、なんらかのバックグランドとなる知識を持っている人の可能性が高いと判断。こちらの都合をぶつけてみる価値はあると判断しました。上記の「大サイズデータ+luaソース」vs「小サイズデータ+FileI/O」、比較検討できるネタ、ない?と。要は「小サイズデータ+luaソースにすればいいんじゃね?」ってこと。Σ('-'つ)つ・・・Cとかと違って、プログラム実行中に動的にプログラム実体を追加できるんだよね、LUAって。切り出したソースを作れば、初期起動時は必要分だけで起動し、状況がわかってから必要なソースを選んで取り込めると。考えれば、CなどでもDLLやプラグインなど、似たようなことをやっているものはあるわけですし。いう流儀のない、組み込み屋ゆえの思い込みってところでしょうか(^^;;;というわけで、このあたり、気が向いたら手をいれます(^^;;日記/2006-12-07なんか日記つーか論壇連射状態ですが(^^;;ホム配布AIは、結局「フリーソフトの1つ」です。何がいいたいかというと、本質的には「配布者を信用してもらう」ことが大前提。確かにホムAIからDOS窓相当の操作をすることは可能なので、その気になれば「利用者のPC環境をずたずたに」することは難しいことではないです。それを心配して配布AIを使わない、というのはお門違い。多少の警戒心は必要ですが・・・無条件に信用しないのでは、AIどころか、世の中のフリーソフトすら全て使えません。普通のフリーソフトは、ホムAIよりも遙かに自由度が高く、遙かに権限が強く、しかも(普通は)ソースリストを見ることもできません。「より危険な行為が可能で、しかも自分で内容チェックもできない」のが普通のフリーソフト。いって、フリーソフトをまるっきり使わない人というのは少数派ではないでしょうか。ホムAIだって同じこと。警戒する意識は必要ですが、そういう理屈をもって採用してくれればいいだけです。12/8時点でAI機能比較表で紹介されているバージョンまでの各配布AIは、それなりに長い間公開・使用されてきているものです:十分信用に足るものだと思います・・・もちろん、これを信用するか否かもあなた次第。あなたにとって、友瀬や他のAI作者の方々が、信用に足る人物であればいいのですが。日記/2006-12-06あ〜。自分で書いてて矛盾しているようにも読めたので、補足。友瀬は、アイテム課金自体は本質的には否定していません。企画側が、アイテムに相応の課金を設定して売るのは悪い話ではない。友瀬は、今回のアイテム群のうち、スキルスクロール系には矛盾を感じています:そこに強く文句を言ったのが、以前&今日の日記。常時使えるようにすると、本来そのスキルを使えるキャラの特質をつぶしてしまう:だからそういう意味で否定したのが数日前の日記。いって、常時使えないような値段を設定すれば、そもそも商売として成り立たないはず:そういう意味で否定をしたのが今日の日記。矛盾している「あってはならないもの」と感じているわけで、それに対するコメントもどうしても矛盾して読めてしまう、というわけです。昨日の日記で書いた「パーティ登録関連」で、いくつか意見をいただいたので・・・反応コメント。総合的に見て、微妙と判断しています。ご指摘の通り、範囲だけで判断するのは可能です。本質的な問題は、「判定範囲が、ROクライアント上で一発で理解できるようにはできない」というところにあります。そのため、特に「友達登録するよ」宣言せずに登録をしようとした場合、他プレイヤーがケミの近くに自然に立っている距離を判定範囲に収めなければなりません。実際にパーティを組んでみたときに調べれば判りますが、プレイヤー達は具体的に指示をしなければ、案外離れて立っています。移動・戦闘中では、5〜10セルくらい離れるのはそんなに珍しくない。10セルというのは、結構広いです:少なくとも街中・臨公広場で使うには、広すぎます。現実的な問題として、登録する際には少なくとも「登録するから、あんまり離れないでね」発言はしないと、無理があると思うのです。すれば、「動かないでね」発言して個別登録するのとそんなに変わらないのではないかと。「案ずるより〜」の域かもしれないですが。これは可能性は十分ありです。・・・が、管理テーブル作るのがめんどいかも(^^;;時間チェック自体は、現状でも「特友」や「ホム友」用に「10秒見失ったら削除」処理をしています。上述のタイプは相手が非常に限られていたので、管理用の専用リスト・情報はいいかげんにしか作っていません。範囲登録対象全てを、となると、そのあたりをきちんと拡張しないとならないので、それが作業量として結構大きいですね。要は、2回操作して、2回ともにいた人は友達、そうでない人は削除。しておけば、「誤登録したらもう一度操作」で、よけいな人は消えるのでは・・・ということですね。これは考えていませんでした。確かにそれは可能ですね。Q2に関連して、専用リストを作れば「古い友達を消しちゃう」リスクも回避できますし。この場合についてはそもそもの問題として、登録結果のフィードバックがうまくできないという点が大きくなりそうです。要は「誤登録した」ということに気づくこと自体が難しいのです。†ご指摘いただいたあたりの内容を対処すれば、範囲登録もうまくできるとは思ってます。友瀬的な「費用(投入労力)対効果」があんまりおいしくないから、現状の友達登録でもできる範囲じゃないですか?という感じです。公式に課金アイテムが発表されました。「もっとゲームが面白くなる」とのことですが、友瀬的にはまったく面白くなさそうなので、利用しないことで決定。詳しい理由は、以前の日記に書いたとおり。唯一利用するかもしれない可能性があった「デスペナ回避」も、上記日記で宣言していた「こういうパターンだったら使わない」としていた内容どおりだったので、スルー。「あんた、ゲームをどれくらいプレイする計算で値段つけた?」ってところか。大量に消費することが前提の消耗品。確かに1個当たりの値段は、一見それなりにリーズナブル。スクロール類なんて5〜7円ですし。持続時間まで冷静に考えれば、どれを使うにしても1時間維持するには100円くらいはかかる。それを1日1時間を常時つかう計算となると、月3000円くらい。そのアイテムを、一体何種類並べてるんですか。どんなブルジョアを客層にしてるんですか。・・・プリの「加速・ブレスを切れないようにかけつづける」って行為は、時給って200円ってことか。+アスムのハイプリで400円くらいなんだ。・・・つーか、転生キャラのスキルを誰でも使えちゃあかんでしょ。いう意味では、いよいよこれはGv向け品なんだろうね。毎週1セットくらい買って、Gvの間だけ投入とか。・・・「人と怪物とが争う世界」だったはずなのになぁ。・・・やっぱり戦争が技術を発展させる、ってものなのかなぁ。いうことがあるから、Webもまだまだ捨てたものじゃないと思う。いうか、こういうことをしてくれる人間が、健全なんだろう。なんのことかは、思い当たる人だけがわかってくれれば十分です。日記/2006-12-05AI板で「範囲友達登録」の話題がでています。Glenelg向けにも似たような話をもうだいぶ前・・・8月くらいから預かって、しかし対応がなされていないもの。検討したのに、現状なぜ対応していないのか、という話を。掲示板にも回答した内容ですが、最初は「一定時間、同じ敵を殴った第三者がいたら、それを友達に」という案がありました。それは以下の理由でイマイチかな、と思いました。登録できるのが、主にいわゆる前列に限定されてしまう。少なくとも、敵単体を積極的に触らないタイプのキャラ:支援プリや範囲攻撃Wizなどは登録しづらい。横殴り判定の都合上、登録したい場合は「味方が殴っている敵を、ユーザーが明示的に攻撃対象指定」しないとならない。個々に指定するのではなく、一定範囲内にいるキャラを一気に登録する、っていう方法は?これ、発想としては単純かつ効果的です。登録範囲を自分から3,4セル以内に絞ることで、遠くから走ってきたキャラを誤登録することはまずありませんし。逆に万が一起きてしまった誤登録をどうリカバリーするかが、非常に問題になってしまいます。ありていに言って心配なのは、登録しようとした瞬間に範囲内にテレポインしてきた人がいたら?ってところ。他人の中にテレポインした人は、普通即テレポアウトしていくはずです:つまりその人を削除するタイミングが難しい。個人ごとに登録していたケースと異なり、フィードバック表示も厄介ですね。どの人がどのIDかわからないですから。課題が多そうだったので、一時保留としました。「2回操作して、その両方で同じ位置にいる(移動していない)人だけ」を登録、っていうやり方ならいけるかも、という考えに至りました。これなら、万一テレポ者や高速かっとび者が通りかかっても、まず問題になりません。この場合、登録しているシーンを想像して、あまりやる気がなくなってしまいました。このやり方、実際にプレイ状況を考えると、こんな感じになるはずです。一定時間の間、ずっと視界内にいる人を登録、という作戦。この「一定時間」は、少なくとも数分単位のもの。これ、結構よさげに思ったのですが・・・問題はパーティ戦闘でも多少は離れてしまうことってある点。これは逆にいうと「パーティ戦闘が始まっても、その判定完了するまでは共闘してくれない」という、始動の遅さでもあります。それなら初めから手動登録させてもらったほうが何かといいのでは?また、街でだべっているときにこの機能を止め忘れたりした場合もまずいですよね。登録する気もないのに、露店さんとかを登録してしまう危険があります。自動登録系は、本質的に誤登録の対処に困ってしまいます。これもフィードバックの弱さが根本にある問題。†あんまりいい着地点を見つけられなくて、放置状態になっている、って感じです。日記/2006-12-04ともあれ。確かにGlenelgについては、更新はのんびりになってます。ここ数日の日記にあるように、いくつかネタは持ってますが、急いで対応検討するほど緊急度の高い内容ではないですし。自分が満足したら、あんまり更新しないのは、ある意味仕方ないですよね。バグにしても機能提案にしても、遠慮なくどうぞ。バグは極力速く対処します。機能については・・・ありていに言って「難易度」と「友瀬が必要性を納得するか否か」というハードルはありますが、まあ考えますし。それは友瀬のことをいっているのかな?正直、「すごい」なんて言葉を自分のAIに使ったつもりは一度もないので、ちがう可能性もあるが・・・最後に使ってる表現は、友瀬もよくいう言い回しなんだよな。Glenelgは独特の仕様が多いみたいだし、他AIとの動作比較・その理由説明もよくするし。あ〜〜・・・まあ、文章は難しいから。友瀬がいわんとしていることが、正しく伝わっていない、ということなんでしょう。自分の文章の悪さを反省することにするよ。日記/2006-12-03掲示板での指摘を見て、ふとやったほうがいいような機能を思いついたので、少し考えて見ます。今はイベント対応が優先なので、すぐにはやらないと思いますが。†ROクライアント上でのカーソル優先度。ホムとドロップ品とでは、ドロップ品のほうにカーソル優先度があるため、ホムがドロップ品の上にいると、ホムに対するPPが非常にやりにくい。アイテムを先に拾ってしまえばいいといえばいいのだが、上記状況ではホムの周囲にはまだ敵がいるはずで、下手なクリックをするとケミ本体が敵を殴ってしまう。非戦闘タイプのケミには致命的。手動でホムを歩かせる。SHIFTクリックでアイテムを取ってしまう。・・・というような対処をしています。たしかにちょっと面倒な操作の部類です。人間のパーティではいろんな意味でありえない、ホムらしい問題点だと思います。人間ならカーソル優先度の問題はないし、もしあったとしても「その人がアイテムを拾えば」いいだけですし。†この場合の判断ポイントは、以下の項目。ホムがPPを必要とするほど、ホムのHPが減っている。(HPが減っていなければ、わざわざ考える必要はない)まだ敵が残っている。(戦闘が終了しているのなら、素直にアイテムを拾えばいい)ホムがドロップアイテムの上に立っている。上記の条件が揃っている場合に、いずれかの方向に数歩歩くというのは、よさげな動作。問題になるのは、ホムには「ドロップアイテムの存在」を知る方法がないこと。そこで・・・ドロップアイテムについてはあきらめて、戦闘中、多少多めにライフが減っているようなら、敵が残っている状況でも数歩ステップ移動する・・・というようなことがよさそう。これにより副次的な効果として、重力座標の回避が期待できる。ショートステップはホム移動なので、その時点でホム側の座標ズレ改善の余地が発生。ホム移動に対して敵がホムに追従移動する結果、敵側の座標ズレの回線の余地が生まれる、ということ。†ショートステップする条件の詳細。単純に「ライフが減っているとき」とすると、ステップしっぱなしになってしまう。ステップは1回したら、またしばらく戦闘するのが適切な動作。敵を2、3体倒してまだ敵がいるならステップ、そののち更に2,3体倒してもまだいるなら・・・って感じがいいのかな。加えて、その戦闘でどれだけライフが減ったか、ってのも面白い視点かも。ショートステップの方向。単純に通常の「逃亡ルール」に従ってもいいんだけど。日記/2006-12-02ちんたら考えていること。まあらくがきに近いレベルなので、実装はいつになるかわかりません。SG・ME対策を考えたいね。アクティブ狩りしているときによくある話に、「SG/MEを唱えている第三者の側で、そこにいる(その時点ではAIからフリーに見えてしまう)SG/ME使いが狙っている敵」を横殴りしてしまう、って話。現状Glenelgでは、これを自動的に避けるには「第三者が視界内にいたら非アクティブ」にするカスタマイズくらいしか手がない。これは「呪文使いが詠唱中」という条件に絞ることだってできそう。火壁・SG対策を考えたいね。上記にも近いんですが。火壁絡みでは、魔法使いも敵も、AIからみるとどちらも「タゲ」を取っていないので、確実に横殴り判定に引っかからない。高速で特定範囲を往復している(火壁でノックバックしている)ような敵を判定外にするっていうのが理想。Glenelgでは敵の動作状況を管理する仕組みがあるので、そこに「今までどう動いた」という履歴を残すことはできる・・・が、単純にすれ違い移動などをした場合の誤検知類が心配かな。「より守ってあげないとダメな味方(後列キャラ)」「放っておいても大丈夫な味方(前列キャラ)」というような話。単純な職業だけでは決められないのがポイント。殴りプリ⇔支援プリ、FCASセージ⇔純魔法セージ、戦闘BS⇔製造寄りBSなど、枚挙にいとまなし。現状は「特友」で1人だけは「絶対守るべき」指定ができますが・・・ホムAI開発者としての、よく考えること。「AIでどこまで処理を行うべきか」というのは、人によってさまざまです。それがどこまでゲーム性を変えていいのか、というのも悩みごと。AIをどんどん賢くしていけば、ROクライアントゆえの(フィードバック不足などの)限界を考慮しても、結構頭のいいAIは作れると思います。ROは「ゲーム」です。ゲームは遊ぶものであって、作業をするものではないと思っています。ホムAIは、人間が普通にできる・やっていることをできるようにするのが、美しい姿だと思います。Glenelgでももちろんその考え方があるので、そういうのを意識して機能を積んでいます。周囲に敵が多かったら、スキルを積極的に使う。ないときはそれなりに。攻撃スキルや強化系スキルですね。敵も、「たくさん敵を抱えている(==よりピンチな)味方への敵」「より危険な敵」というような優先度を持って狙う。横殴りはしないように。どんな状況でも、横殴りっぽいと気が付いたら即止める。いう意味で、Glenelgで実装する際に一番「実装してよいか否か」で悩んだものは「詠唱反応動作」です。これはゲーム性を大きく変更してしまいます:通常人間の操作では追いつかずに不可能に近い「敵への呪文詠唱妨害」を、かなりの率で成功させてしまいます。やりすぎかな、と思っています。逆に、こういう考え方もあって採用を避けている、というのがmobdata関連。mobdataを導入した場合、「敵と実際に戦うことなく、対処方法を決めてしまう」というようなものになりやすいってところが、友瀬的によろしくないんじゃないかな、という感じです。別の例では・・・これも友瀬が冷たい態度を取っているのが「放置狩」や「寝落ち検知」。「自分では他のコトをするほど楽しめていないのに、なんでレベル上げなんてするの?」とか「眠ってしまうほどゲームを楽しめてないのに、なんでPCの前にいるの?」とか・・・これを「作業」と呼ばずになんというんですかね。まあ最初に言ったとおり、このあたりは人さまざまです。その人なりの理由・正義があると思います。友瀬&Glenelgではこういうスタンスで考えて・作られている、ってところです。編集操作バックアップある名言。