CONCLAVE of Darklord開発進捗。
マルチ対戦型ゲームとしてベタな実装になるが、ゲームスタート時に一定のエントリ時間を設け、その間に対応する操作キーを押された枢機卿はプレイヤーキャラクタとなり、時間切れまたは締切操作(SPACE TO CLOSEとあるのがソレ)時点でエントリされていなかった枢機卿はAIキャラクタとなる、という仕掛け。
それぞれエントリ時に抜刀っぽい動作(なんです、コレは)をするのはちょっと拘った。
それはさておき、上掲tweetでも少し触れている
AIに改良を加えてややマイルドに の部分について、やっていることは極々つまらないことなのだが、今後の類似の実装にも応用が利きそうなので……って、まだ作るのかよ……忘れないようにメモしておくことにする。
以下のアイデアを思いついたそもそものキッカケは、自身でAI相手にテストプレイをしていたときに、AIは操作が正確だからミスなくアイテムを取ってズルい!!という、作者らしからぬ苛立ちを覚えたことだった。
先にも書いたように、本作のAIは基本的には自身からあるオブジェクトに対する方位と距離を元に、各フレーム毎に左右旋回するかジャンプするか、あるいは何もせずに前進し続けるかを決定する、ただそれだけのプログラムである。
アイテムを取る、というのは、AI枢機卿が自身から見たアイテムの方位に対して左右旋回を繰り返して位置調整することに他ならず、スピードアップの取り過ぎで小回りが利かないケースを除けば……これとて遠目から正確に方位を捉えて接近していく限りにおいてほとんど問題にならないのだが……確実にアイテム取得位置まで舵取りすることができる。これは単純な算術の繰り返しなのであって、まったくブレがない。
対して、人間であるところのボクちゃんには、目で見て、判断して、キーを押す、というハンデ(?)がある。交通事故等の教訓等で一般に言われるところの人間の視覚刺激に対する反応速度というのは、どんなに集中していても0.2秒程度の遅れがあるらしい。もちろん、本作程度の単純な世界であれば十二分に事前予測によってその遅れを補った操作は可能であろうが、同時に、これは一瞬でも気を抜くとヤラれる緊張感を伴ったゲームであるからして、常に理想的な予測・判断・操作のコンビネーションを維持できるワケがないのであって、やはりAI側が一方的に有利なのである。
そこで、AIにも判断から操作までにタイムラグを強制してやってはどうか、ということを思いついた。
具体的には、AI枢機卿毎に操作バッファ領域を設けてやる。あるフレームにおいて状況判断したAIは、その判断結果=直進 or 左右旋回 or ジャンプ操作の値を枢機卿へのキー入力して返すのではなく、一旦操作バッファ領域に出力する。操作バッファ領域はフレーム毎に1ステップ流れていて、その先頭まで流れてきたものが漸く枢機卿へのキー入力として拾われる。
平たく言えば、AI枢機卿も人間同様に、判断から実際の操作までコンマ何秒か遅れるようになった、ということである。
存外この効果が劇的で、冒頭に書いたようなAI特有のズルさを感じることが軽減されたことに加え、この操作遅延時間は実は4段階からランダムに選ばれていて、一見してどの程度遅れているのか、あるいはまったく遅れないスーパーAI(?)なのかはわからないから、その判断ロジックを本来熟知しているはずの作者のボクですら俄かにその挙動が予測しにくくなるという、嬉しい副作用も得た。
自分で言うのもなんだが、この仕掛けのナイスなところは、実装自体は無味乾燥単純明白であるにも関わらず、生まれる効果が極めてアナログ的、というか、無論これは単なる欺瞞、目くらましの類に過ぎないのであるが、内部ロジックに通じていないプレイヤー視点で見る限りにおいて、AIに人間っぽさが加わるという点である。
これは本作のような対AI戦を前提としたゲームに限らず、たとえばシューティングゲームの敵機挙動があまりに無機的に感じられるケースなどにも使えるんじゃないか、と思っているのだが、現時点では捕らぬ狸の皮算用だ。
ところで、今回の実装に並行して、新たに2種のアドホックな思考処理をAIに追加している。これがそれぞれ二分岐するので2ビット4種。さらに、上に書いたように操作遅延時間が4段階からランダムに選ばれるので、これに既存の組み合わせ256通りを掛けると
バリエーションを256種から4096種へ拡張 となったワケだが、言ってる本人がいささか水増し感を覚えていることは、正直に吐露しておこう。