ストリード
「TVゲームの基礎構造」仮
”実物”と言える物がないのだが(・・・)、大体今”ゲームとしては”この様な構造を持っている、とは言える。
2010/12/21
森宮 照
プロデューサーシート
タイトル「TVゲームの基礎構造」仮
概略 TVゲームを創る上での基本的な構造の定義
コンセプト「汎用」
ハード的テーマ「どれでも一緒」否定肯定
ゲーム毎にアタリ判定の方法とか必要な物は違うが、ただそれらは”省いただけ”であって、根幹には同じモノがある。
ソフト的テーマ「マルチコア対応」肯定否定
複数のマルチコアにより分散処理される上でも使用出来る汎用性のある概念。シングルタスクでも使えるが結局ゲームとはマルチタスクなので。
目的 TVゲームの作り方の規格化
それは無い 解らない
ディレクターノート
テーマ
表「解りやすく」否定肯定
ともかくゲームの構造、と言うのを「学べば出来る」物と理解出来る様に。
裏「誰でも理解は出来る」肯定否定
■メインプログラム
メインプログラムの流れとしては、大体以下の様になる。
初期設定
最初にゲームに必要なパラメータの準備をする。
駆動部
各キャラに設定された動きをマルチタスクで仮に行わせる。
判断部
各キャラが仮に動いた時の衝突チェックを行わせる。
反映部
衝突チェックにより各キャラに起こった変化を反映させる。
表示部
最終的なキャラクタの状態を表示する。
※以後、駆動部へ戻る。
■必ず創らねば成らない物。
「表示プログラム」
ゲームの「絵」を表示する部分。2Dか3Dかはともかく、1回表示を依頼されるとその表示内容を次々と記録していき、「表示」で一括に画面へ反映する、と言うのが普通。2Dの場合「優先順位」を設定出来ると優先順位が高い方が上に表示される事になり、表現の幅が広がる。ハードにより表示出来る内容は異なるが、現在では速度以外のハード的制約は低いので、スタック式で問題が出る事は無い、とは思う。
このルーチンと、キャラクタその物には直接的には関係が無い。さっきまで10番に自機が表示されていても、次の時には2番か3番に成っている事も多々。この部分はあくまで「結果を反映する」為だけに創るので、それ以上の情報はいらない。
「キャラクタ出現プログラム」
キャラクターを”出現”させる部分。STGで自機のショットがイメージ。ボタンを押し適当な指定をすると、そのキャラクタを一つ画面内へ存在させる。駆動部などは、ここで出現したキャラクタ”全て”に対してコールをする事になる。
「キャラクタプログラム」
各キャラを移動/行動させる基本的なプログラム。これを駆動部などが全てのキャラに対して呼ぶ事でマルチタスクが実現する。なのでプログラムもそう組む必要がある。キャラクタプログラムは大体3つの機能を持つ必要がある。
>仮駆動
キャラクタを”一時的に”移動させる。
>衝突判定
周囲のキャラとの衝突を調べ処理(自分の位置を変えるとかパラメータを変えるとか)をする。
>表示反映
表示プログラムに対して、自分の状態を通達して表示して貰う。
結果、キャラクタプログラムは最悪下記の情報を保持する必要がある。
「キャラの保持情報」
現位置情報(仮駆動ではここの位置情報を変更する)
旧位置情報(最初に仮駆動の際に、現位置情報を移動し保持する)
衝突スタック(仮駆動の際に周囲のキャラの旧位置をチェックし衝突をスタック)
表示内容(自分が何の絵をどの位置に表示させるか?)
アタリ範囲(自分の衝突判定がある範囲)
>その他、ゲームにより必要な様々なパラメータ
■全体の流れ
ゲーム全体としては、まず初期設定で状況を創り、後は仮駆動を一斉に出現しているキャラ全てに対して要求。全てが仮駆動を終わらせた所で今度は衝突判定を行わせる。その結果として各キャラは自分の位置を適当に移動させる等するので、終了した所でその結果を表示反映させると、表示プログラムに表示情報が準備されるので、それで表示させると画面に反映、と言う流れになる。
■マルチコア化
コアの状況にも寄るが、駆動部の時にコアに分散させる事で処理軽減が出来る。これは判断、反映にも言える。コアが10個あり、一万キャラが居る時。単純には1コア1000体ずつのキャラの駆動、判断、反映を受け持つ事になる。表示プログラムをマルチコア化する場合は専用コアを用意する(2コアで画面上半分か下半分か、とか)、と言うのが考え方だろう。
■マルチエリア化
「表示キャラが百万キャラに成ったら?」現実として今なら有り得るが、こうなると1キャラがアタリ判定をするのも一苦労になる、が。考え方としては「空間を区分する」事で対処出来る。例えば空間を10m立方(エリア)で区切る。その一つのエリアに専用の「存在ポスト」を用意、キャラはまず自分がそこに居るならその存在をポストしておく。すると衝突判定の際には、自分が居るエリア(或いは隣接エリア)しか衝突チェックをする必要がない。ただ、現状でこれを行う必要があるか?と言うと疑問ではある。
■その他
ゲームにより省ける所は様々あるし不要な処理も多く、またもっと効率的に行う、方法もあるが。ともかく誰でも出来る所、と言うとこの辺だろうと思う。後は各自の研究に依存したい。
end