2021/4/24 | 投稿者: ghost

スペインはMATRAより好評発売中オンラインでも遊べる拙最新作 CONCLAVE of Darklord の一見してわからないちょっとした実装上の工夫について問わず語りに書く。

クリックすると元のサイズで表示します

ちょっとクドい前置きから。

ゲームに限らずプログラミングに馴染みのない人にはピンと来ない話かも知れないが、ゲーム画面上でわらわらとたくさんの何かが動いていたとしても、本質的にコンピュータは、ある瞬間を取り出すと一つのことしかしていない。

アニメーションが秒間何コマのセル画から出来ていてこれをパラパラと流すから絵が動いて見えるのだ、というアナロジーを思い浮かべる人もいるかも知れないが、ここで言っているのはそれとは次元の異なる話になる。アニメの場合、同じセル画に載っている複数のキャラクタは、少なくとも1コマと1コマの間では同時に移動することがあり得るのに対し、コンピュータゲームの動作は、強いてこのアナロジーに乗るとすれば、それぞれのセル画を一人の人が描き続けている様に近い。

それが人間の視覚に比してあまりに高速なので、すべてが同時に動き続けているように見える。が、これを超スローモーションで観察すれば、ある瞬間には一つのことしか起こっておらず、その出来事の間には厳密な順序性がある。

クリックすると元のサイズで表示します

さて、CONCLAVE of Darklordは繰り返し言っているように6人同時対戦がウリのゲームなのだが、上に書いたようなコンピュータゲームの特性は、実は6人同時対戦と相性がよろしくない。具体的には当たり判定が問題になる。

話を単純化して光子剣で敵枢機卿を斬る判定に限定して考えてみよう。6人の枢機卿それぞれの光子剣が、自分以外の5人の枢機卿を斬ったかどうかの判定は、1フレーム毎に計30組み合わせでおこなわれることになる。そして、この判定も冒頭に書いたように、1つ1つ順番におこなわれる。本作では、すべての枢機卿はまったく同じ性能を与えられており、武器のリーチ範囲も台頭なので、先に当たり判定の順番が回ってくる側が一方的に有利になってしまう。これでは、対戦ゲームとしてフェアではない。

このような場合、ボードゲームに詳しい人であれば思い当たる節もあろうかと思うが、一般論としては「判定」フェーズと「結果反映」フェーズを分ける、ということをする。つまり、6人vs5人=30回の当たり判定を黙々とおこなってその結果を記録した後、その結果を組み合わせて「斬った」「斬られた」「相打ち」の状態変化を起こす。こうすると、判定順序による不公正はおこらない。ただ、この方法にもデメリットがあって、まぁ、考えればわかることだが、単純に手間=時間が倍かかることになる。

本作では、時間は十二分に処理に余裕があるので問題にはならなかったが、その処理をおこなうプログラムも当然のことながらメモリ資源を消費するのでそれを嫌ったのと、それ以上に、本作は「最後に生き残った枢機卿が勝者」というのが大前提の枠組みになっているので、「相打ち」を許容する処理系を採用する気になれず、別の解決策を採った。これが本稿本題になる。

続きを読む
タグ: MSX Z80




AutoPage最新お知らせ