説明

プログラム、情報記憶媒体、及び、ゲーム機

【課題】所定期間に検出されたプレーヤの入力情報に基づいて特定コマンドを実行するオンラインの対戦ゲームにおいて、通信遅延が生じたとしても、特定コマンドを実行することが可能なプログラム、情報記憶媒体、ゲーム機を提供することにある。
【解決手段】自動制御情報が設定されているゲーム機のゲームデータに基づいてゲーム演算を行う場合には、プレーヤの入力情報に関わらず、所定条件下で特定コマンドを実行する処理を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム、情報記憶媒体、及び、ゲーム機に関する。
【背景技術】
【0002】
従来から、ネットワークを介して複数のプレーヤが参加してゲームを行うオンラインゲームが知られている。通常、オンラインゲームでは、ネットワークを介してデータを送受信する通信遅延が必然的に生じるため、プレーヤからの操作入力をゲームに反映させるまでに時間を要する。
【0003】
この問題を解決するために、特許文献1に開示される技術では、他機から受信するデータの通信遅延時間に基づいて、他のプレーヤが操作する他キャラクタの移動を予測して、プレーヤキャラクタと他プレーヤキャラクタとの整合性を図り、レスポンスの早いゲームを実現している。
【0004】
しかし、格闘ゲームのように、操作タイミングが重視されるゲームでは、特許文献1に開示される技術を採用し難い。なぜなら、他プレーヤキャラクタの移動・動作を予測することは極めて難しく、仮に他プレーヤキャラクタの移動・動作を予測したとしても、予測した移動・動作と、実際の移動・動作とに矛盾が生じてしまうからである。
【0005】
つまり、格闘ゲームでは、他プレーヤキャラクタの移動・動作を予測することなく、自機のデータと他機からのデータとが揃った段階でゲーム処理を行うので、複数のゲーム機間において通信遅延時間が生じると、例えば、特定コマンド(例えば「投げ抜け」のコマンド)の入力情報を、プレーヤはタイミングを見計らって適切に行うことができなくなる。このような状況下では、格闘ゲームをプレイするプレーヤに多大なストレスを与えてしまう。
【特許文献1】特開2006−320502号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
本発明は、以上のような課題に鑑みてなされたものであり、その目的とするところは、所定期間に検出されたプレーヤの入力情報に基づいて特定コマンドを実行するオンラインの対戦ゲームにおいて、通信遅延が生じたとしても、特定コマンドを実行することが可能なプログラム、情報記憶媒体、ゲーム機を提供することにある。
【課題を解決するための手段】
【0007】
(1)本発明は、
複数のゲーム機それぞれが、プレーヤの入力情報を含むゲームデータを、共通の識別情報に対応付けて、ネットワークを介して相互に送受信する処理を行い、識別情報が一致する自機のゲームデータと他機のゲームデータとに基づいて、ゲーム演算を行うゲーム機のためのプログラムであって、
特定コマンドに関する自動制御情報を設定する設定部と、
前記自動制御情報が設定されていないゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、プレーヤの入力情報に基づいて前記特定コマンドを実行する処理を行い、
前記自動制御情報が設定されているゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、プレーヤの入力情報に関わらず、所定条件下で前記特定コマンドを実行する処理を行うコマンド実行部として、コンピュータを機能させるプログラムに関する。
【0008】
本発明は、上記プログラムを記憶した情報記憶媒体、上記各部として構成するゲーム機に関係する。
【0009】
本発明は、通信遅延が生じたとしても、特定コマンドに関する自動制御情報が設定されている場合に、所定条件下で特定のコマンドを実行することが可能となる。
【0010】
(2)また、本発明のプログラム、情報記憶媒体、及び、ゲーム機では、
特定コマンドに対応するプレーヤの入力情報が所定期間内に入力されたものである場合に、当該入力情報を有効と判定する処理を行う判定部として、コンピュータを更に機能させ、
前記コマンド実行部が、
前記自動制御情報が設定されていないゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、有効と判定されたプレーヤの入力情報に基づいて、前記特定コマンドを実行する処理を行うようにしてもよい。
【0011】
本発明は、プレーヤが所定期間内に特定コマンドに対応する操作入力をしなければならない環境にあっても、自動制御情報が設定されている場合に、所定条件下で特定のコマンドを実行することが可能となる。
【0012】
(3)また、本発明のプログラム、情報記憶媒体、及び、ゲーム機では、
前記所定期間は、所定コマンドに対応するプレーヤの入力情報に応じた期間であってもよい。
【0013】
本発明は、所定コマンドに対応するプレーヤの入力情報に応じた期間内に、特定コマンドに対応する操作入力をしなければならない環境にあっても、自動制御情報が設定されている場合に、所定条件下で特定のコマンドを実行することが可能となる。
【0014】
(4)また、本発明のプログラム、情報記憶媒体、及び、ゲーム機では、
複数のゲーム機共通の抽選処理に基づいて、特定コマンドを実行するか否かを決定する決定部として、コンピュータを更に機能させ、
前記コマンド実行部が、
前記自動制御情報が設定されているゲーム機のゲームデータに基づいてゲーム演算を行う場合には、前記抽選処理の結果に基づいて、前記特定コマンドを実行する処理を行うようにしてもよい。
【0015】
本発明によれば、ゲーム機それぞれが共通の抽選処理を行うので、抽選処理の結果を、複数のゲーム機間相互で送受信させる必要がない。従って、通信遅延が生じても特定コマンドを実行することが可能となる。
【0016】
また、本発明によれば、自動制御情報が設定されている場合であっても特定コマンドが実行されることは不確実な状態となり、特定コマンドが実行されるという期待感をプレーヤに与えることができる。
【発明を実施するための最良の形態】
【0017】
以下、本実施形態について説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが、本発明の必須構成要件であるとは限らない。
【0018】
1.構成
図1に本実施形態のゲーム機の機能ブロック図を示す。なお本実施形態のゲーム機は図1の構成要素(各部)の一部を省略した構成としてもよい。
【0019】
操作部160は、プレーヤがプレーヤキャラクタ(プレーヤが操作するプレーヤキャラクタ、移動体、プレーヤオブジェクト、ゲームキャラクタを含む)の操作情報を入力するためのものであり、その機能は、レバー、ボタン、ステアリング、マイク、タッチパネル型ディスプレイ、或いは筺体などにより実現できる。
【0020】
記憶部170は、処理部100や通信部196などのワーク領域となるもので、その機能はRAM(VRAM)などにより実現できる。特に、本実施形態の記憶部170は、主記憶部172、画像バッファ174、第1のバッファ176、第2のバッファ178、自動制御情報記憶部179を有している。
【0021】
ここで、第1のバッファ176には、自機において入力情報を検出した検出結果を含むゲームデータが入力される。また、第2のバッファ178には、受信した他機のゲームデータが入力される。
【0022】
自動制御情報記憶部179には、特定コマンドに関する自動制御情報を記憶される。この自動制御情報とは、プレーヤからの入力情報によらずに、特定コマンドを実行することを示す情報である。
【0023】
情報記憶媒体180(コンピュータにより読み取り可能な媒体)は、プログラムやデータなどを入力するものであり、その機能は、光ディスク(CD、DVD)、光磁気ディスク(MO)、磁気ディスク、ハードディスク、磁気テープ、或いはメモリ(ROM)、メモリカードなどにより実現できる。処理部100は、情報記憶媒体180に入力されるプログラム(データ)に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体180には、本実施形態の各部としてコンピュータを機能させるためのプログラム(各部の処理をコンピュータに実行させるためのプログラム)が記憶される。
【0024】
表示部190は、本実施形態により生成された画像を出力するものであり、その機能は、CRT、LCD、タッチパネル型ディスプレイ、或いはHMD(ヘッドマウントディスプレイ)などにより実現できる。音出力部192は、本実施形態により生成された音を出力するものであり、その機能は、スピーカ、或いはヘッドフォンなどにより実現できる。
【0025】
通信部196は外部(例えば、他機、サーバや他のゲームシステム)との間で通信を行うための各種制御を行うものであり、その機能は、各種プロセッサ又は通信用ASICなどのハードウェアや、プログラムなどにより実現できる。
【0026】
なお、ゲーム機が、本実施形態の各部としてコンピュータを機能させるためのプログラム(データ)を、ネットワークを介してサーバからダウンロードし、情報記憶媒体180に記憶するようにしてもよい。このようなサーバに入力されているプログラムの出力も本発明の範囲内に含めることができる。
【0027】
処理部100(プロセッサ)は、操作部160からの操作情報(入力情報の一例)やプログラムなどに基づいて、ゲーム演算処理、画像生成処理、或いは音生成処理などの処理を行う。この処理部100は記憶部170内の主記憶部172をワーク領域として各種処理を行う。処理部100の機能は各種プロセッサ(CPU、DSP等)、ASIC(ゲートアレイ等)などのハードウェアや、プログラムにより実現できる。
【0028】
処理部100は、ゲーム演算部110、オブジェクト空間設定部111、仮想カメラ制御部112、移動・動作処理部113、ネットワーク設定部114、通信制御部115、バッファ制御部116、設定部117、判定部118、コマンド実行部119、決定部120、描画部130、音生成部140を含む。なおこれらの一部を省略する構成としてもよい。
【0029】
ゲーム演算部110は、ゲーム開始条件が満たされた場合にゲームを開始する処理、ゲームを進行させる処理、キャラクタやマップなどのオブジェクトを配置する処理、オブジェクトを表示する処理、ゲーム結果を演算する処理、或いはゲーム終了条件が満たされた場合にゲームを終了する処理などがある。
【0030】
本実施形態のゲーム演算部110は、ゲーム開始時に各プレーヤの体力値を初期値(例えば100)に設定し、ゲームを開始してからゲームが終了するまでのゲーム期間(例えば、90秒の間)に、フレーム毎に、各プレーヤからの入力情報に基づいてヒット判定処理を行い、ヒット判定結果に基づいていて、各プレーヤキャラクタの体力値を減算させ、各プレーヤキャラクタの体力値が0になったか否かに基づいてゲーム結果(勝敗、引き分け)を決定する演算処理を行う。なお、ゲーム演算部110は、ゲーム期間経過時点で、いずれのプレーヤキャラクタの体力値が0より大きい値である場合には、一方のプレーヤキャラクタの体力値が、他方のプレーヤキャラクタの体力値よりも大きい値である場合に、一方のプレーヤキャラクタが勝ちと決定し、他方のプレーヤキャラクタが負けと決定し、体力値が双方同じ場合には引き分けと決定する。
【0031】
本実施形態のゲーム演算部110は、識別情報が一致する第1のバッファ176から出力されたゲームデータと第2のバッファ178から出力されたゲームデータとに基づいて、フレーム毎にゲーム演算を行う。
【0032】
また、本実施形態のゲーム演算部110は、第1のバッファ176から出力されたゲームデータと第2のバッファ178から出力されたゲームデータとに基づいて、自機を使用するプレーヤの操作対象の第1のプレーヤキャラクタと、他機を使用するプレーヤの操作対象の第2のプレーヤキャラクタとを動作させるゲーム演算を行う。
【0033】
また、本実施形態のゲーム演算部110は、第1のバッファ176から出力された識別情報が異なる複数のゲームデータと、第2のバッファ178から出力された識別情報が異なる複数のゲームデータとに基づいて、フレーム毎にゲーム演算を行ってもよい。例えば、第1のバッファから出力された識別番号1〜4の複数のゲームデータと、第2のバッファ178から出力された識別番号1〜4の複数のゲームデータとに基づいて、プレーヤキャラクタに連続技の動作演算を行わせるようにしてもよい。
【0034】
オブジェクト空間設定部111は、プレーヤキャラクタ、移動体、建物、球場、車、樹木、柱、壁、マップ(地形)などの表示物を表す各種オブジェクト(ポリゴン、自由曲面又はサブディビジョンサーフェスなどのプリミティブで構成されるオブジェクト)をオブジェクト空間に配置設定する処理を行う。即ちワールド座標系でのオブジェクトの位置や回転角度(向き、方向と同義)を決定し、その位置(X、Y、Z)にその回転角度(X、Y、Z軸回りでの回転角度)でオブジェクトを配置する。
【0035】
仮想カメラ制御部112は、オブジェクト空間内の所与(任意)の仮想カメラ(視点)から見える画像を生成するための仮想カメラの制御処理を行う。具体的には、仮想カメラの位置(X、Y、Z)又は回転角度(X、Y、Z軸回りでの回転角度)を制御する処理(視点位置、視線方向あるいは画角を制御する処理)を行う。また、画角を制御するようにしてもよい。
【0036】
例えば、仮想カメラによりオブジェクト(例えば、プレーヤキャラクタ、ボール、車)を後方から撮影する場合には、オブジェクトの位置又は回転の変化に仮想カメラが追従するように、仮想カメラの位置又は回転角度(仮想カメラの向き)を制御する。この場合には、移動・動作処理部で得られたオブジェクトの位置、回転角度又は速度などの情報に基づいて、仮想カメラを制御できる。或いは、仮想カメラを、予め決められた回転角度で回転させたり、予め決められた移動経路で移動させる制御を行ってもよい。この場合には、仮想カメラの位置(移動経路)又は回転角度を特定するための仮想カメラデータに基づいて仮想カメラを制御する。なお、仮想カメラ(視点)が複数存在する場合には、それぞれの仮想カメラについて上記の制御処理が行われる。
【0037】
移動・動作処理部113は、モデル(キャラクタ、車、電車又は飛行機等)の移動・動作演算(移動・動作シミュレーション)を行う。すなわち操作部160によりプレーヤが入力した操作データや、プログラム(移動・動作アルゴリズム)や、各種データ(モーションデータ)などに基づいて、モデルをオブジェクト空間内で移動させたり、オブジェクトを動作(モーション、アニメーション)させたりする処理を行う。具体的には、オブジェクトの移動情報(位置、回転角度、速度、或いは加速度)や動作情報(オブジェクトを構成する各パーツの位置、或いは回転角度)を、1フレーム(1/60秒)毎に順次求めるシミュレーション処理を行う。なおフレームは、オブジェクトの移動・動作処理(シミュレーション処理)や画像生成処理を行う時間の単位である。
【0038】
特に、本実施形態の移動・動作処理部113は、プレーヤからの入力情報に基づいて、プレーヤの操作対象のプレーヤキャラクタを移動・動作させる処理を行うことができる。また、後述する通信制御部115によって送信されたパケットに含まれる他機のゲームデータに基づいて、他機を使用する第2のプレーヤの操作対象の第2のプレーヤキャラクタを、自機を使用するプレーヤの操作対象となる第1のプレーヤキャラクタと同一のオブジェクト空間において移動・動作させる処理を行うことができる。
【0039】
要するに、本実施形態の移動・動作処理部113は、第1のバッファ176から出力されたゲームデータに基づいて、自機を使用するプレーヤの操作対象の第1のプレーヤキャラクタを動作させる演算と、第2のバッファ178から出力されたゲームデータに基づいて、他機を使用するプレーヤの操作対象の第2のプレーヤキャラクタを動作させる演算を行うことができる。
【0040】
ネットワーク設定部114は、ゲームシステムで必要となるネットワーク情報を取得し、管理する処理等を行う。特に、本実施形態のネットワーク設定部は、各ゲーム機に個別に付与されるゲーム機の識別情報(オンラインゲームに参加できるゲーム機を識別するために個別に付与されたデータ)と、ゲーム機の識別情報に対応付けられたパケットの送信先を指定する宛先情報とを取得し、管理する処理を行う。
【0041】
また、宛先情報とは、ゲームシステムを構成する各ゲーム機のIPアドレス、ポート番号とすることができる。IPアドレスは、インターネット上もしくはWANで特定のゲーム機を特定するためのグローバルIPアドレスとしてもよいし、LANで特定のゲーム機を特定するためのプライベートIPアドレスとしてもよい。
【0042】
通信制御部115は、他機(第2のゲーム機)に送信するパケットを生成する処理、パケット送信先のゲーム機のIPアドレスやポート番号を指定する処理、受信したパケットに含まれるデータを記憶部170に保存する処理、受信したパケットを解析する処理、その他のパケットの送受信に関する制御処理等を行う。
【0043】
パケットとは、ネットワークを介して通信する固まりであり、送信元IPアドレス、送信先IPアドレスを含むネットワークに必要なヘッダーと、送信元において書き込まれたデータがペイロードとからなるデータのことをいう。
【0044】
また、アプリケーションレベルの通信を実現するためには、使用するTCPやUDPプロトコルに応じたアプリケーションの種類を特定するポート番号を指定してパケットを生成する。例えば、TCPプロトコルは、データの送受信の信頼性が高く、例えば、確認応答や再送を利用している。また、TCPプロトコルは、紛失したデータの再送処理を行うことができ、さらにデータの送信順序を確保して送信先のゲーム機にパケットを送信することができる。一方、UDPプロトコルでは、送信の途中でデータを紛失しても再送されず、順番が入れ替わって伝送されることがある。しかし、UDPプロトコルは、TCPプロトコルに比べてオーバヘッドがないので、リアルタイムにデータを送信するオンラインゲームでは適している場合がある。UDPプロトコルを利用する場合には、バッファに入力するゲームデータが識別番号順(昇順)に入力するようにし、入力対象の識別番号のゲームデータが届いていない場合には、他機に要求するようにしてもよい。本実施形態では、いずれのプロトコルにも対応することができる。なお、UDPプロトコルを利用する場合には、バッファへのゲームデータの入力順序を識別情報(識別番号)の昇順に入力するように制御するようにしてもよい。
【0045】
本実施形態の通信制御部115は、画像を描画するフレームレートに応じてパケットを生成し、接続先の第2のゲーム機に生成したパケットを送信する処理を行う。具体的に説明すると、例えば、フレームレートが60fpsである場合には、1/60秒毎に、パケットのヘッダーの送信先IPアドレスと送信先ポート番号に、第2のゲーム機のIPアドレスと使用するポート番号指定し、ヘッダーの送信元のIPアドレスと送信元ポート番号に、第1のゲーム機のIPアドレスと使用するポート番号を指定して、ゲームデータを含むデータをパケットのペイロードに入力し、生成したパケットを第2のゲーム機に送信する処理を行う。なお、送信したゲームデータは、後述するバッファ制御部116において、所与の条件下、第1のバッファ176に入力される。
【0046】
ここで、ゲームデータとは、フレーム毎にゲーム機を操作するプレーヤからの入力情報(操作情報も含む)を含むデータである。例えば、ゲームデータは、入力情報の有無や、入力情報が有る場合には入力情報の内容を示したデータとすることができる。例えば、ゲームデータを数値で示す場合には、入力情報が無い場合はゲームデータを「0」とし、入力情報があってその内容がAボタンの入力である場合にはゲームデータを「1」、入力情報があってその内容がBボタンの入力である場合にはゲームデータを「2」とする。また、入力情報があってその内容がA及びBボタンの入力である場合にはゲームデータを「3」とする。
【0047】
また、ここで、識別情報とは、フレーム毎に付与される複数のゲーム機(第1、第2のゲーム機)において共通のデータである。本実施形態では、第1のゲーム機と第2のゲーム機との接続が確立されたときを基準に、経過時間に応じてフレーム毎に付与される情報とすることができる。例えば、ゲーム機において、フレームレートに応じて取得したゲームデータに対応付けるシーケンシャルな識別番号(1から始まる正の整数)とすることができる。
【0048】
例えば、フレームレートが60fpsである場合を考えると、1/60毎に取得したゲームデータに、識別情報を対応付ける。例えば、第1のゲーム機と第2のゲーム機それぞれにおいて、接続が確立された時点に取得したゲームデータには、識別番号「1」を対応付けし、接続確立時から1/60秒後に取得したゲームデータには、識別番号「2」を対応付けし、接続確立時から2/60秒後に取得したゲームデータには、識別番号「3」を対応付けする。
【0049】
また、本実施形態の通信制御部115は、第2のゲーム機から送信されたパケットを受信する処理を行う。そして、受信したパケットを解析し、パケットのペイロードに含まれるゲームデータを含むデータを取得する。そして、受信したゲームデータは、後述するバッファ制御部116において、第2のバッファ178に入力される。
【0050】
また、本実施形態の通信制御部115は、複数のゲーム機間においての接続(第1のゲーム機と第2のゲーム機との接続)が確立されてから接続が切断されるまで、ゲームデータを互いに送受信する処理を行うことができる。
【0051】
なお、本実施形態のゲームに参加する通信グループに所属する複数のゲーム機のうち、1つのゲーム機を親機として特定することができる。親機は、ゲーム空間を生成したゲーム機としてもよいし、勝者と挑戦者との対戦ゲームである場合には、勝者側のゲーム機としてもよい。
【0052】
本実施形態のバッファ制御部116は、第1のバッファ176、第2のバッファ178のゲームデータの入出力を制御する処理を行う。ここで、バッファにゲームデータを入力する処理とは、ゲームデータをバッファが確保する記憶領域に記憶させる処理をいい、バッファからゲームデータを出力する処理とは、バッファが確保する記憶領域に記憶されたゲームデータを読み取ると共に、そのゲームデータを記憶領域から抹消することを意味する。
【0053】
また、本実施形態のバッファ制御部116は、自機のゲームデータを第1のバッファ176に入力し、他機のゲームデータを第2のバッファ178に入力する処理とを行う。
【0054】
また、本実施形態のバッファ制御部116は、第1のバッファ176に入力されている最先のゲームデータに対応する識別情報と、第2のバッファ178に入力されている最先のゲームデータに対応する識別情報とが一致する場合に、最先のゲームデータを第1のバッファ176から出力すると共に、最先のゲームデータを第2のバッファ178から出力する処理とを行う。つまり、本実施形態のバッファ制御部116は、第1のバッファ176、第2のバッファ178に入力(格納)されているゲームデータは、同期処理を行うために、第1のバッファ176に入力されているゲームデータの識別情報と、第2のバッファ178に入力されているゲームデータの識別情報とが一致していることを条件に、識別番号の昇順(小さい順)に出力される。
【0055】
設定部117は、ゲーム開始前又はゲーム中に、複数のゲーム機それぞれに対応付けて、或いは、操作入力や所定のゲーム条件の成立に基づいて、特定コマンドに関する自動制御情報を、自動制御情報記憶部179に設定する。
【0056】
例えば、設定部117は、ゲーム開始前に、各ゲーム機の識別情報に対応づけて、特定コマンドに関する自動制御情報を設定する。ここで、自動制御情報とは、プレーヤからの入力情報によらずに、所定条件下で特定コマンドを実行することを示す情報である。
【0057】
判定部118は、所定期間内に特定コマンドに対応するプレーヤの入力情報が検出された場合に、当該入力情報を有効と判定する処理を行う。ここで、所定期間とは、所定コマンドに対応するプレーヤの入力情報に応じた期間である。
【0058】
例えば、判定部118は、所定コマンド(「投げ」コマンド)に対応するプレーヤの「投げ」の入力情報に応じた期間内に、特定コマンド(「投げ抜け」コマンド)に対応するプレーヤの「投げ抜け」の入力情報が検出された場合に、「投げ抜け」の入力情報を有効と判定する処理を行う。
【0059】
コマンド実行部119は、自動制御情報が設定されていないゲーム機のゲームデータに基づいてゲーム演算を行う場合には、プレーヤの入力情報に基づいて、特定コマンドを実行する処理を行う。なお、前記自動制御情報が設定されていないゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、有効と判定されたプレーヤの入力情報に基づいて、特定コマンドを実行する処理を行う。
【0060】
コマンド実行部119は、自動制御情報が設定されているゲーム機のゲームデータに基づいてゲーム演算を行う場合には、プレーヤの入力情報に関わらず、所定条件下で特定コマンドを実行する処理を行う。
【0061】
また、コマンド実行部119は、自動制御情報が設定されているゲーム機のゲームデータに基づいてゲーム演算を行う場合に、後述する決定部120による抽選処理の結果に基づいて、特定コマンドを実行する処理を行う。
【0062】
決定部120は、複数のゲーム機共通の抽選処理に基づいて、特定コマンドを実行するか否かを決定する。
【0063】
描画部130は、処理部100で行われる種々の処理(ゲーム処理)の結果に基づいて描画処理を行い、これにより画像を生成し、表示部190に出力する。いわゆる3次元ゲーム画像を生成する場合には、まずオブジェクト(モデル)の各頂点の頂点データ(頂点の位置座標、テクスチャ座標、色データ、法線ベクトル或いはα値等)を含むオブジェクトデータ(モデルデータ)が入力され、入力されたオブジェクトデータ(モデルデータ)に含まれる頂点データに基づいて、頂点処理(頂点シェーダによるシェーディング)が行われる。なお頂点処理を行うに際して、必要に応じてポリゴンを再分割するための頂点生成処理(テッセレーション、曲面分割、ポリゴン分割)を行うようにしてもよい。頂点処理では、頂点処理プログラム(頂点シェーダプログラム、第1のシェーダプログラム)に従って、頂点の移動処理や、座標変換(ワールド座標変換、カメラ座標変換)、クリッピング処理、あるいは透視変換等のジオメトリ処理が行われ、その処理結果に基づいて、オブジェクトを構成する頂点群について与えられた頂点データを変更(更新、調整)する。そして、頂点処理後の頂点データに基づいてラスタライズ(走査変換)が行われ、ポリゴン(プリミティブ)の面とピクセルとが対応づけられる。そしてラスタライズに続いて、画像を構成するピクセル(表示画面を構成するフラグメント)を描画するピクセル処理(ピクセルシェーダによるシェーディング、フラグメント処理)が行われる。ピクセル処理では、ピクセル処理プログラム(ピクセルシェーダプログラム、第2のシェーダプログラム)に従って、テクスチャの読出し(テクスチャマッピング)、色データの設定/変更、半透明合成、アンチエイリアス等の各種処理を行って、画像を構成するピクセルの最終的な描画色を決定し、透視変換されたオブジェクトの描画色を画像バッファ174(ピクセル単位で画像情報を記憶できるバッファ。VRAM、レンダリングターゲット)に出力(描画)する。すなわち、ピクセル処理では、画像情報(色、法線、輝度、α値等)をピクセル単位で設定あるいは変更するパーピクセル処理を行う。これにより、オブジェクト空間内において仮想カメラ(所与の視点)から見える画像が生成される。なお、仮想カメラ(視点)が複数存在する場合には、それぞれの仮想カメラから見える画像を分割画像として1画面に表示できるように画像を生成することができる。
【0064】
なお、頂点処理やピクセル処理は、シェーディング言語によって記述されたシェーダプログラムによって、ポリゴン(プリミティブ)の描画処理をプログラム可能にするハードウェア、いわゆるプログラマブルシェーダ(頂点シェーダやピクセルシェーダ)により実現される。プログラマブルシェーダでは、頂点単位の処理やピクセル単位の処理がプログラム可能になることで描画処理内容の自由度が高く、従来のハードウェアによる固定的な描画処理に比べて表現力を大幅に向上させることができる。
【0065】
そして、描画部130は、オブジェクトを描画する際に、ジオメトリ処理、テクスチャマッピング、隠面消去処理、αブレンディング等を行う。
【0066】
ジオメトリ処理では、オブジェクトに対して、座標変換、クリッピング処理、透視投影変換、或いは光源計算等の処理が行われる。そして、ジオメトリ処理後(透視投影変換後)のオブジェクトデータ(オブジェクトの頂点の位置座標、テクスチャ座標、色データ(輝度データ)、法線ベクトル、或いはα値等)は、オブジェクトデータ記憶部176に保存される。
【0067】
テクスチャマッピングは、記憶部170のテクスチャ記憶部に記憶されるテクスチャ(テクセル値)をオブジェクトにマッピングするための処理である。具体的には、オブジェクトの頂点に設定(付与)されるテクスチャ座標等を用いて記憶部170のテクスチャ記憶部からテクスチャ(色(RGB)、α値などの表面プロパティ)を読み出す。そして、2次元の画像であるテクスチャをオブジェクトにマッピングする。この場合に、ピクセルとテクセルとを対応づける処理や、テクセルの補間としてバイリニア補間などを行う。
【0068】
隠面消去処理としては、描画ピクセルのZ値(奥行き情報)が入力されるZバッファ(奥行きバッファ)を用いたZバッファ法(奥行き比較法、Zテスト)による隠面消去処理を行うことができる。すなわちオブジェクトのプリミティブに対応する描画ピクセルを描画する際に、Zバッファに入力されるZ値を参照する。そして参照されたZバッファのZ値と、プリミティブの描画ピクセルでのZ値とを比較し、描画ピクセルでのZ値が、仮想カメラから見て手前側となるZ値(例えば小さなZ値)である場合には、その描画ピクセルの描画処理を行うとともにZバッファのZ値を新たなZ値に更新する。
【0069】
αブレンディング(α合成)は、α値(A値)に基づく半透明合成処理(通常αブレンディング、加算αブレンディング又は減算αブレンディング等)のことである。
【0070】
なお、α値は、各ピクセル(テクセル、ドット)に関連づけて記憶できる情報であり、例えば色情報以外のプラスアルファの情報である。α値は、マスク情報、半透明度(透明度、不透明度と等価)、バンプ情報などとして出力できる。
【0071】
音生成部140は、処理部100で行われる種々の処理の結果に基づいて音処理を行い、BGM、効果音、又は音声などのゲーム音を生成し、音出力部192に出力する。
【0072】
2.本実施形態の手法
(1)概要
本実施形態のゲームシステムは、オンライン格闘ゲームのためのゲームシステムである。すなわち、本実施形態のゲームシステムは、プレーヤの操作対象のプレーヤキャラクタが、他のプレーヤの操作対象の相手プレーヤキャラクタに攻撃を加えることによって相手プレーヤキャラクタにダメージを与え相手プレーヤキャラクタの体力値を減算させ、各プレーヤキャラクタの体力値に基づいて勝敗を判定する処理を行う。
【0073】
図2は、本実施形態のゲームシステムの一例を示す。本実施形態のゲームシステムでは、オンラインゲームに参加する各ゲーム機が、インターネットを介して相互に直接通信して、データを共有することができるピア・ツー・ピア方式のゲームシステムを採用する。また、本実施形態は、オンラインゲームに参加するプレーヤの操作対象のプレーヤキャラクタが同一のゲーム空間(オブジェクト空間)に存在してゲームが進行されるゲームシステムである。
【0074】
つまり、本実施形態では、第1のゲーム機、第2のゲーム機の相互間において、ゲーム機を操作するプレーヤからの入力情報の検出結果を含むゲームデータを送受信する処理を行い、ゲーム演算を行う。
【0075】
ここで、ゲームデータとは、フレーム毎に、方向キー、Aボタン、Bボタン等のキー入力によって検出された検出信号等のプレーヤの入力情報や、キー入力の検出結果を特定コマンドに変換した情報、入力情報がないという情報(例えば、「キー入力なし」の情報)も含む。
【0076】
本実施形態では、例えば、第1のゲーム機は、第1のゲーム機のゲームデータに基づいて、第1のプレーヤキャラクタ(第1のゲーム機を使用する第1のプレーヤの操作対象のプレーヤキャラクタ)の移動・動作演算等のゲーム演算を行い、第1のゲーム機のゲームデータを、ネットワークを介して第2のゲーム機へ送信する処理を行う。そして、第1のゲーム機は、ネットワークを介して受信した第2のゲーム機のゲームデータに基づいて、第2のプレーヤキャラクタ(第2のゲーム機を使用する第2のプレーヤの操作対象のプレーヤキャラクタ)の移動・動作演算等のゲーム演算を行う。また、第2のゲーム機においても、第1のゲーム機と同様にゲーム演算処理を行う。
【0077】
(2)同期処理
本実施形態は、同期処理を図るために、第1、第2のゲーム機が、フレーム毎に付与される共通の識別番号を用いて、ゲームデータを送受信する処理を行う。
【0078】
より具体的に説明すると、本実施形態では、まず、各ゲーム機において、画像を描画するフレームレートと同じ周期で、ゲームデータを取得する。そして取得したゲームデータに識別番号を対応付ける。すなわち、描画フレームレートが60fpsのフレームレートである場合には、第1のゲーム機と第2のゲーム機との接続が確立した時点を基準に、1/60毎に取得したゲームデータに、「1」、「2」、「3」、「4」・・・と、シーケンシャルに正の整数からなる識別番号を対応付けていく。
【0079】
なお、同じタイミングで取得したゲームデータを用いて正確に同期処理を行うために、第1、第2のゲーム機共に、同じ描画フレームレート(例えば、60fps)に設定することが望ましい。以下の説明では、第1のゲーム機、第2のゲーム機共に、描画のフレームレートを60fpsに設定した際の説明である。
【0080】
なお、「接続が確立した時点」とは、第1のゲーム機においては、第2のゲーム機に対する接続要求に対する確認応答を得たときであって、第2のゲーム機においても、第1のゲーム機に対する接続要求に対する確認応答を得たときである。なお、絶対時間軸に対して第1のゲームにおける「接続が確立した時点」と、ゲーム機2における「接続が確立した時点」とにおいて僅かな誤差があってもよい。
【0081】
本実施形態のゲーム機では、記憶部に自機のゲームデータを入力する第1のバッファ176と、他機のゲームデータを入力する第2のバッファ178を設け、第1のバッファ176に識別番号を対応付けた自機のゲームデータを入力する処理を行い、第2のバッファ178に識別番号に対応付けられた他機のゲームデータを入力する処理を行う。また、自機のゲームデータは、識別番号を対応付けて他機に送信する処理を行う。
【0082】
そして、本実施形態では、第1のバッファ176に入力されているの最先のゲームデータの識別番号と、第2のバッファ178に入力されているの最先のゲームデータの識別番号とが一致することを条件に、第1のバッファ176に入力されている最先のゲームデータと、第2のバッファ178に入力されている最先のゲームデータとを出力する処理を行う。
【0083】
そして、本実施形態では、第1のバッファ176から出力された最先のゲームデータに基づいて第1のプレーヤキャラクタの移動・動作演算等のゲーム演算を行い、第2のバッファ178から出力された最先のゲームデータに基づいて第2のプレーヤキャラクタの移動・動作演算(モーション演算)等のゲーム演算を行う。要するに、本実施形態では、第1のバッファ176、第2のバッファ178をFIFO(First In,First Out)(先入れ先出し)によって入出力処理を行っている。
【0084】
より具体的に、第1ゲーム機において、第1のゲーム機のゲームデータを第1のバッファ176に入出力を制御する処理、第2のゲーム機のゲームデータを第2のバッファ178に入出力する処理について、図3を用いて具体的に説明する。
【0085】
例えば、本実施形態では、第1、第2のゲーム機の接続が確立されるT1時点において、識別番号「1」の第1のゲーム機のゲームデータを、第1のバッファ176に入力する処理を行う。一方、T1時点では、まだ第2のゲーム機からゲームデータを受信していないので、第2のバッファ178は空の状態である。
【0086】
そして、T2時点〜T9時点と経過したときに第2のゲーム機から識別番号「1」のゲームデータを受信すると、T11時点において、第1のバッファ176に、識別番号「11」のゲームデータを入力し、第2のゲーム機から受信した識別番号「1」のゲームデータを、第2のバッファ178に入力する処理を行う。
【0087】
すると、T12時点において、第1のバッファ176、第2のバッファ178に入力されている最先のゲームデータの識別番号が一致する(共通の識別番号「1」である)ので、識別番号「1」のゲームデータを第1のバッファ176、第2のバッファ178から出力して、出力されたゲームデータに基づいて、ゲーム演算を行う。
【0088】
以上のように、本実施形態では、第1、第2のゲーム機それぞれが、フレーム毎に付与される共通の識別番号を用いて、ゲームデータを送受信する処理を行い、自機の最先のゲームデータの識別番号と、他機の最先のゲームデータの識別番号とが一致することを条件に、自機、他機の最先のゲームデータに基づいてゲーム演算を行うので、オンラインの格闘ゲームにおいても、第1、第2のプレーヤが、平等な環境下でゲームプレイを行うことができる。つまり、本実施形態によれば各ゲーム機において、同一のゲーム結果になるようにゲーム演算処理を行うことができる。
【0089】
(3)入力情報の有効性
本実施形態では、第1のバッファ176、第2のバッファ178それぞれの入力情報フラグを設定し、フレーム毎に第1のバッファ176、第2のバッファ178それぞれの入力情報フラグの値を更新して、入力情報の有効/無効を制御する。
【0090】
まず、入力情報フラグの値を更新する処理について説明すると、本実施形態では、フレーム毎に、プレーヤキャラクタが動作していない期間中の入力情報フラグの値を真(1)に更新し、プレーヤキャラクタが動作している期間中の入力情報フラグの値を偽(0)に更新する。なお、初期状態等のデフォルトの状態において、各バッファの入力情報フラグの値を真に設定する。
【0091】
具体的に第1のゲーム機の処理について説明すると、第1のバッファ176から出力された「右パンチ」の入力情報に基づいて、第1のプレーヤキャラクタに「右パンチ」の動作をさせると判断すると、第1のバッファ176の入力情報フラグの値を偽に更新する。そして、第1のプレーヤキャラクタの「右パンチ」の動作期間(10フレーム分の期間)は第1のバッファ176の入力情報フラグの値を偽に設定し、「右パンチ」の動作期間終了後に、第1のバッファ176の入力情報フラグの値を真に設定する。
【0092】
そして、第1のプレーヤキャラクタと第2のプレーヤキャラクタとが所定範囲に位置することによりヒットし(パンチがヒットし)、第2のプレーヤキャラクタが「右パンチ攻撃を受ける動作」を行うと判断すると、第2のバッファ178の入力情報フラグの値を偽に設定する。そして、第2のプレーヤキャラクタに「右パンチ攻撃を受ける動作」をさせる期間(例えば、10フレーム分の期間)は、第2のバッファ178の入力情報フラグの値を偽に設定し、動作期間終了後に、第2のバッファ178の入力情報フラグの値を真に更新する。
【0093】
次に、本実施形態の入力情報の有効/無効の判断について説明する。本実施形態では、第1のバッファ176の入力情報フラグが真である状態の場合に、第1のバッファ176から出力された入力情報は有効であり、第1のバッファ176の入力情報フラグが偽である状態には、第1のバッファ176から出力された入力情報は無効であると判断する。
【0094】
また、本実施形態では、第2のバッファ178の入力情報フラグが真である状態の場合に、第2のバッファ178から出力された入力情報は有効であり、第2のバッファ178の入力情報フラグが偽である状態には、第2のバッファ178から出力された入力情報は無効であると判断する。
【0095】
すなわち、有効と判断された入力情報に基づいてコマンドが実行され、動作演算が開始されると、当該演算が終了するまで他の動作演算を行わないようにしている。
【0096】
ところで、本実施形態では、バッファから出力された入力情報が無効であると判断され、入力情報フラグの真偽に関わらず、所定の入力情報については、有効・無効の判定をする場合がある。例えば、「投げ抜け」の入力情報等がある。
【0097】
まず、本実施形態の「投げ」コマンドについて説明する。本実施形態の「投げ」コマンドは、一方のプレーヤが「投げ」キー入力を行うと、一方のプレーヤキャラクタが、他方のプレーヤキャラクタを「投げ掴む」動作演算を行い、一方のプレーヤキャラクタが、他方のプレーヤキャラクタにヒットしたと判定されると、プレーヤキャラクタが他方のプレーヤキャラクタを「投げる」動作演算を行い、他方のプレーヤキャラクタが「投げられる」動作演算を行うものである。そして、他方のプレーヤキャラクタにダメージを与えることで体力値を減算させる処理を行っている。なお、一方のプレーヤキャラクタが、他方のプレーヤキャラクタにヒットしないと判定されると、プレーヤキャラクタは投げ掴まえることができずに立ち構えの状態に戻る。つまり、他方のプレーヤはダメージを被ることはない。
【0098】
次に、本実施形態の「投げ抜け」コマンドについて説明する。本実施形態の「投げ抜け」コマンドは、プレーヤキャラクタが仕掛けた「投げ」を回避する。つまり「投げ抜け」コマンドは、一方のプレーヤが「投げ」のキー入力を行ってから所定期間内に、他方のプレーヤが「投げ抜け」のキー入力を行うと、他方のプレーヤキャラクタが「投げられる」動作の途中で「投げ抜ける」動作演算に切り替える。つまり、他方のプレーヤキャラクタは「投げ」に対するダメージを受けず、体力値から「投げ」に対するダメージ分が減算されないように制御するものである。
【0099】
ここで、本実施形態において、「投げ抜け」の入力情報が有効と判定される場合について説明する。
【0100】
本実施形態では、第2のプレーヤキャラクタが「投げられる」動作が行われている期間は、第2のバッファ178の入力情報フラグの値は偽に設定される。つまり、「投げられる」動作が行われている期間に、第2のバッファ178から出力される入力情報は無効であると判断される。
【0101】
しかし、本実施形態では、「投げ抜け」の入力情報については、「投げられる」動作が行われている期間であっても、第1のプレーヤキャラクタと第2のプレーヤキャラクタとがヒットした直後の所定期間(例えば3フレームの期間)に、第2のバッファ178から「投げ抜け」の入力情報が出力される場合には、その「投げ抜け」の入力情報は有効と判定し、「投げ抜け」コマンドを実行する。
【0102】
また、第1のプレーヤキャラクタと第2のプレーヤキャラクタとがヒットした直後の所定期間(例えば3フレームの期間)以外の期間に、第2のバッファ178から「投げ抜け」の入力情報が出力される場合には、その「投げ抜け」の入力情報は無効と判定し、「投げ抜け」コマンドを実行しない。
【0103】
(4)通信遅延
本実施形態のゲームシステムは、同期処理を行っているので、プレーヤの入力情報がゲームに反映されるまでに時間を要してしまう。
【0104】
例えば、図3の識別番号「1」のゲームデータは、T1時点に入力情報が検出されているにも関わらず、T12時点で、識別番号「1」のゲームデータに基づくゲーム演算が行われる。つまり、本実施形態では、第1、第2のゲーム機間におけるゲームデータの送受信を行う通信遅延時間(タイムラグ)、が必然的に生じるために、不都合が生じる場合がある。具体的に、通信遅延時間に伴う弊害について、図4(A)〜(C)を用いて説明する。
【0105】
まず、図4(A)を用いて説明すると、T121時点において、第1のプレーヤからの「投げ」の入力情報が検出されたとすると、第1のゲーム機において、T121時点において、識別番号「121」に対応付けられた第1のプレーヤからの「投げ」の入力情報を第1のバッファ176に入力すると共に、第2のゲーム機に送信する処理を行う。
【0106】
そして、第1のゲーム機は、第2のゲーム機から識別番号「121」のゲームデータを受信して(T131時点)、識別番号「121」のゲームデータを出力する(T132時点)。そして、T132時点で、第1のバッファ176から、最先の識別番号「121」に対応付けられた「投げ」の入力情報が出力され、有効だと判断されると「投げ」コマンドを実行する。
【0107】
図4(B)に示すように、第1のゲーム機では、「投げ」コマンドは、第1のプレーヤキャラクタが、第2のプレーヤキャラクタを掴もうとする動作演算が、例えば、T133〜T135にかけて行われ、T136時点で、第1のプレーヤキャラクタが、第2のプレーヤキャラクタにヒットしたと判定される。
【0108】
そして、第1のゲーム機では、第1、第2のプレーヤキャラクタがヒットした後の、例えば所定期間T137〜T150に、第1のプレーヤキャラクタが第2のプレーヤキャラクタを投げる動作演算が行われるが、ヒットした時点(T130時点)直後の所定期間(T137〜T139)に、第2のバッファ178から出力されたゲームデータに含まれる「投げ抜け」の入力情報が有効と判定される。
【0109】
したがって、図4(B)に示す例のように、所定期間T137〜T139に、識別情報126〜128のゲームデータが出力されることになる場合には、T126〜T128の期間に「投げ抜け」の入力情報が検出されている場合に、T137〜T139に、「投げ抜け」のゲームデータが出力され、その「投げ抜け」の入力情報が有効と判定される。
【0110】
しかし、第1のゲーム機では、識別番号126〜128のゲームデータが第1のバッファ176、第2のバッファ178からT137〜T139の期間をかけて出力され、第2のゲーム機においても、識別番号126〜128のゲームデータが第1のバッファ176、第2のバッファ178からS137〜S139の期間をかけて出力される。
【0111】
しかし、図4(C)に示すように、第2のゲーム機のプレーヤがS138時点で投げられたことに気付き、S139時点で「投げ抜け」の入力情報を入力することにより、第2のゲーム機において、S139の時点で、第2のプレーヤからの「投げ抜け」の入力情報が検出されると、識別番号139に対応付けられて、「投げ抜け」のゲームデータが、第2のゲーム機の第1のバッファ176に入力されると共に、識別番号139に対応付けられた「投げ抜け」のゲームデータが第1のゲーム機に送信される。
【0112】
すると、第1のゲーム機においては、第2のプレーヤが入力した識別番号139の「投げ抜け」の入力情報が、T149時点に受信され、第1のゲーム機の第2のバッファ178に入力され、T150時点で、識別番号139の「投げ抜け」のゲームデータが第2のバッファ178から出力される。
【0113】
しかし、本実施形態では、T150時点では、識別番号139の「投げ抜け」のゲームデータは、所定期間T137〜T139で出力されたものではないので、無効と判断され、「投げ抜け」コマンドは実行されない。
【0114】
同様に、第2のゲーム機においても、S139時点において、入力情報された「投げ抜け」の入力情報は、無効と判断されるので、「投げ抜け」コマンドは実行されない。
【0115】
つまり、本実施形態のように同期処理が担保されたゲームシステムを採用すると、第2のプレーヤは、「投げ抜け」のキー入力のタイミングが適切だと思っているにも関わらず、通信遅延時間が起因して「投げ抜け」コマンドが実行できない事態が生じる。
【0116】
すなわち、本実施形態では、「投げ抜け」コマンドを実行させるためには、第2のプレーヤは、第2のゲーム機において、S133〜S136の期間で「投げ掴み」の動作が表示されるよりも前のS126〜S128の期間で「投げ抜け」の入力情報を入力しなければならず、実質的に「投げ抜け」コマンドを実行することができない。
【0117】
(5)自動的にコマンドを実行する手法
このように、本実施形態では、「投げ抜け」の入力情報が有効と判断される期間が、「投げられる」動作期間よりもきわめて短い期間であったり、通信遅延時間よりも短い期間である場合には、プレーヤは、「投げ抜け」コマンドが実行されるように「投げ抜け」のキー入力を行うことが極めて難しくなる。つまり、プレーヤは、相手が投げ技を仕掛けるであろうと予想して、T126〜T128の期間に、予め「投げ抜け」の入力情報を行わなければ、「投げ抜け」の入力情報が無効になってしまう。
【0118】
そこで、本実施形態では、所定条件下で、プレーヤの入力情報に関わらず、自動的に「投げ抜け」コマンドを実行する処理を行う。
【0119】
より具体的に説明すると、第1のバッファ176から出力された「投げ」の入力情報に基づいて第1のプレーヤキャラクタが第2のプレーヤキャラクタにヒットしたと判定されると、第2のバッファ178から「投げ抜け」の入力情報が出力されなくても、所定条件下で「投げ抜け」コマンドを実行する処理を行う。
【0120】
例えば、図4(B)に示すように、第1のゲーム機のT136時点で、第1のプレーヤキャラクタが第2のプレーヤキャラクタにヒットしたと判定されると、T137時点で、自動的に、所定条件に基づいて「投げ抜け」コマンドを実行する処理を行う。
【0121】
このようにすれば、プレーヤは、相手プレーヤキャラクタに投げられそうになったとしても、自身のプレーヤキャラクタに対して「投げ抜け」を行うことができ、相手からの投げ技を回避することができる。
【0122】
(6)抽選処理
本実施形態では、所定の確率に基づいて自動的に「投げ抜け」コマンドを実行する。なぜなら、常に「投げ抜け」コマンドを実行する処理を行うと、常に投げ技が失敗してしまうことになるからである。
【0123】
例えば、本実施形態では、図5(A)に示す、シーケンシャルなID(1から始まる正の整数)に対応づけて、0〜9のいずれかの数値が設定された乱数値が設定された乱数テーブル、及び、図5(B)に示す当選判定テーブルA、当選判定テーブルB、当選判定テーブルCが用意される。
【0124】
当選判定テーブルA、B、Cそれぞれは、乱数範囲0〜9の中から、当選確率に基づいて当選範囲が決められている。
【0125】
例えば、当選判定テーブルAは、80%確率で当選するように、当選範囲を2〜9に決定し、当選判定テーブルBは、50%確率で当選するように、当選範囲を5〜9に決定し、当選判定テーブルCは、30%確率で当選するように、当選範囲を7〜9に決定する。
【0126】
本実施形態では、第1、第2のゲーム機が共通の抽選処理結果を得るようにするために、ゲーム開始前に、第1、第2のゲーム機間で乱数テーブル、及び、当選判定テーブルA、B、Cを共有する。例えば、ゲーム開始前に、いずれかのゲーム機が、他方のゲーム機に乱数テーブルを送信する。また、乱数テーブルを送信する際に、ゲームが開始時に参照する乱数テーブルのIDの値を送信する。また、ゲーム開始前に、いずれかのゲーム機が、他方のゲーム機に当選判定テーブルA、B、Cを送信する。
【0127】
また、本実施形態の第1のゲーム機は、ゲーム開始前に、第1のゲーム機の「投げ抜け」コマンドの自動制御情報の設定有無を第2のゲーム機に送信し、第2のゲーム機から「投げ抜け」コマンドの自動制御情報の設定有無(「投げ抜け」コマンドの自動制御情報が設定されているか否かの情報)を受信する処理を行う。ここで、自動制御情報とは、プレーヤからの入力情報によらずに、「投げ抜け」コマンドを実行することを示す情報である。
【0128】
なお、自動制御情報が設定されている場合には、抽選処理で用いる当選判定テーブルの種類(「A」、「B」、「C」のいずれかの情報)を送信する。
【0129】
同様に、本実施形態の第2のゲーム機は、ゲーム開始前に、第2のゲーム機の「投げ抜け」コマンドの自動制御情報の設定有無を第1のゲーム機に送信し、第1のゲーム機から「投げ抜け」コマンドの自動制御情報の設定有無を受信する処理を行う。
【0130】
例えば、第1のゲーム機において、「投げ抜け」コマンドの自動制御情報を設定しない場合には、第1のゲーム機は、第2のゲーム機に自動制御情報無しの情報(例えば、自動制御情報フラグ=0)を送信する。一方、第2のゲーム機において、「投げ抜け」コマンドの自動制御情報が設定されている場合には、第2のゲーム機は、第1のゲーム機に自動制御情報有りの情報(例えば、自動制御情報フラグ=1)を送信する。また、第2のゲーム機は、抽選処理において、当選判定テーブルCを用いている場合には、当選判定テーブルの種類(例えば、「C」)を第1のゲーム機に送信する処理を行う。
【0131】
そして、図6に示すように、第1、第2の各ゲーム機は、各ゲーム機(ゲーム機の識別情報)に対応づけて「投げ抜け」コマンドの自動制御情報の設定有無(例えば、自動制御情報フラグ)を記憶部に記憶する。そして、第1、第2の各ゲーム機は、各ゲーム機に対応づけて「投げ抜け」コマンドの自動制御情報が設定されている場合には(例えば、自動制御情報フラグ=1に設定されている場合には)、併せて抽選処理で用いる当選判定テーブルを記憶部に記憶する。
【0132】
そして、ゲームが開始されると、上述した自動制御情報の設定有無に基づいて、ゲーム演算が行われる。
【0133】
例えば、第2のゲーム機に、「投げ抜け」コマンドの自動制御情報が設定され、抽選処理では当選判定テーブルCを用いる場合における、第1のゲーム機の処理について説明する。
【0134】
まず、第1のゲーム機において、第1のバッファ176から出力された有効な「投げ」入力情報に基づいて、「投げ」コマンドを実行し、第1のプレーヤキャラクタが、第2のプレーヤキャラクタにヒットしたと判定される。
【0135】
すると、第2のバッファ178から出力される入力情報に関わらず、乱数テーブルの参照IDに対応する乱数値を取得し、取得した乱数値が当選範囲(7〜9)に存在する場合に、「投げ抜け」コマンドを実行する処理を行う。
【0136】
一方、取得した乱数値が当選範囲(7〜9)に存在しない場合には、「投げ抜け」コマンドを実行せずに、第2のバッファ178から出力されるゲームデータに基づいてゲーム演算を行う。
【0137】
なお、本実施形態では、抽選処理が行われる度に、乱数テーブルの参照するIDを次の番号に移行するように制御している。
【0138】
このように、本実施形態では、ゲーム開始前に、第1、第2のゲーム機間で、乱数テーブルを共有すると共に、第1、第2のゲーム機に設定されている自動制御情報の有無を共有し、通信遅延が生じたとしても、抽選処理結果に基づいて「投げ抜け」コマンドを実行することができる。
【0139】
(7)自動制御情報の設定手法
本実施形態では、ゲームプレイ回数(格闘ゲームで勝負した回数)に応じて、「投げ抜け」コマンドの自動制御情報を設定でき、抽選処理で用いる当選判定テーブルを設定できるようにしている。
【0140】
例えば、本実施形態では、ゲームプレイ回数に応じて、1〜9段階ある熟練度を設定し、ゲームプレイ回数が30回行われる度に熟練度の段階を上げる。
【0141】
そして、本実施形態では、予め、熟練度が1〜6である段階では、プレーヤからの入力情報によらずに「投げ抜け」コマンドの自動制御情報を無効に設定し、熟練度が7以上になると、プレーヤからの入力情報に基づいて、「投げ抜け」コマンドの自動制御情報を設定できるようにしている。
【0142】
また、熟練度が7の場合には、当選判定テーブルCに設定されるが、熟練度が8になると、プレーヤからの入力情報に基づいて、当選判定テーブルB、当選判定テーブルCのうち、いずれか一方の当選判定テーブルの選択を受け付け、受け付けた当選判定テーブルを設定できるようにしている。
【0143】
また、熟練度が9になると、プレーヤからの入力情報に基づいて、当選判定テーブルA、当選判定テーブルB、当選判定テーブルCのうち、いずれか一つの当選判定テーブルの選択を受け付け、受け付けた当選判定テーブルを設定できるようにしている。
【0144】
このように、本実施形態では、ゲームプレイ回数に応じて、プレーヤに有利に働くよう自動制御情報を設定でき、また、当選判定テーブルの選択の幅が広がるので、プレーヤに、ゲームプレイに対する意欲を増大させることができる。
【0145】
(8)スキルを設定する手法
本実施形態では、ゲーム開始前に、キャラクタセッティング画面において、プレーヤからの入力情報に基づいて、複数のキャラクタの中から、1つのキャラクタの選択を受け付け、受け付けたキャラクタを、プレーヤの操作対象のプレーヤキャラクタとして設定する処理を行う。
【0146】
本実施形態では、プレーヤキャラクタを設定後、ゲーム開始前に、プレーヤの入力情報に基づいて、プレーヤキャラクタに対応づけて1又は複数のスキルを設定する。ここで、スキルとは、プレーヤに有利に働く情報である。例えば、スキルは、上述した「投げ抜け」コマンドの自動制御情報や、相手の防御に関わらず、必ず右パンチが成功する右パンチ成功情報、相手の防御に関わらず、必ず右キックが成功する右キック成功情報がある。
【0147】
そして、本実施形態では、スキル設定後、ゲーム開始前に、第1のゲーム機、第2のゲーム機がそれぞれ互いに、プレーヤキャラクタと当該プレーヤキャラクタに対応付けて設定されているスキルを送受信する処理を行う。
【0148】
つまり、本実施形態の第1、第2の各ゲーム機は、自機のプレーヤキャラクタに対応付けて1又は複数のスキルを記憶部に記憶し、他のゲーム機から、他のプレーヤキャラクタと当該他のプレーヤキャラクタに対応付けられた1又は複数のスキルを受信し、受信した他のプレーヤキャラクタと当該他のプレーヤキャラクタに対応付けられた1又は複数のスキルを記憶部に記憶する。
【0149】
3.タイミングチャート
本実施形態のタイミングチャートについて、図7を用いて説明する。例えば、第1のゲーム機では、「投げ抜け」コマンドの自動制御情報が設定されていない場合であって、第2のゲーム機において、「投げ抜け」コマンドの自動制御情報が設定されている場合について説明する。
【0150】
まず、ゲーム開始前において、第1のゲーム機が、第2のゲーム機に乱数テーブルを送信し、第2のゲーム機が第1のゲーム機から送信された乱数テーブルを受信する処理を行う。
【0151】
また、ゲーム開始前に、第1のゲーム機、第2のゲーム機がそれぞれ互いに、自動制御情報の設定有無を送受信する。なお、第2のゲーム機は、自動制御情報が設定されているので、抽選処理で用いる当選判定テーブルの種類を送信し、第1のゲーム機が第2のゲーム機から送信された当選判定テーブルの種類を受信する。
【0152】
そして、ゲームが開始されると、各ゲーム機において、各プレーヤからの入力情報が第1のバッファ176、第2のバッファ178に次々入力され、識別番号が一致するゲームデータから順次出力してゲーム演算が行われる。
【0153】
例えば、第1、第2のゲーム機間において、識別番号が「121」のゲームデータが送受信されると、第1、第2のゲーム機それぞれにおいて、第1のバッファ176、第2のバッファ178から出力される識別番号「121」のゲームデータに基づいてゲーム演算が行われる。
【0154】
つまり、第1のゲーム機において、第1のバッファ176から、有効な「投げ」の入力情報が含まれるゲームデータに基づいて、第1のプレーヤキャラクタが第2のプレーヤキャラクタを投げ掴みする動作演算がL1期間で行われる。同様に、第2のゲーム機において、第2のバッファ178から、「投げ」の入力情報が含まれるゲームデータに基づいて、第1のプレーヤキャラクタが第2のプレーヤキャラクタを投げ掴みする動作演算がL1´期間で行われる。
【0155】
そして、第1、第2のゲーム機それぞれにおいて、第1のプレーヤキャラクタが第2のプレーヤキャラクタにヒットしたと判定されると、取得した乱数値が当選判定テーブルCの当選範囲に含まれるか否かをし、取得した乱数値が当選範囲に含まれると判断されると、「投げ抜け」コマンドを実行する。
【0156】
つまり、取得した乱数値が当選範囲に含まれると判断されると、第1のゲーム機では、期間L2で第2のプレーヤキャラクタが第1のプレーヤキャラクタから投げ抜ける動作が表示され、期間L2´で、第2のプレーヤキャラクタが第1のプレーヤキャラクタから投げ抜ける動作が表示される。
【0157】
一方、取得した乱数値が乱数範囲外にあると判断されると、ヒット後、所定期間内において、第2のプレーヤからの入力情報が格納されるバッファ(第1のゲーム機では第2のバッファ178、第2のゲーム機では第1のバッファ176)から「投げ抜け」の入力情報が出力されない限り、第2のプレーヤキャラクタは「投げ抜け」することはできない。
【0158】
通常、第2のプレーヤは、相手の投げ技を予測することができないので、例えば、「投げ抜け」の入力情報が出力されず、その結果、期間L3で第1のプレーヤキャラクタが第2のプレーヤキャラクタを投げる動作が表示され、第2のゲーム機においても、期間L3´で第1のプレーヤキャラクタが第2のプレーヤキャラクタを投げる動作が表示される。
【0159】
なお、以上に説明した通りであるが、ゲーム開始してからゲームが終了するまで(勝敗結果が算出されるまで)第2のゲーム機は、第1のゲーム機と全く同じ処理が行われる。つまり、第2のゲーム機の第1のバッファ176には、第1のゲーム機の第2バッファにと同一のゲームデータが入出力され、第2のゲーム機の第2のバッファ178には、第1のゲーム機の第1のバッファ176と同一のゲームデータが入出力される。
【0160】
すなわち、第1、第2のゲーム機において、ゲーム演算に用いられるゲームデータは全く同じであり、自動制御情報の設定有無や、乱数テーブルを第1、第2のゲーム機で、同一のものが格納され、抽選処理も全く同じように行われるので、同じゲーム演算処理が行われることになる。
【0161】
つまり、第1のゲーム機において、121番の「投げ」の入力情報に基づいて双方のプレーヤキャラクタがヒットしたこと起因に、抽選処理結果に基づき「投げ抜け」コマンドを実行する際には、第2のゲーム機においても、同様に121番の「投げ」の入力情報に基づいて双方のプレーヤキャラクタがヒットしたことを起因に、第1のゲーム機と同様の抽選処理結果に基づき「投げ抜け」コマンドを実行することになる。
【0162】
4.フローチャート
次に、本実施形態の各ゲーム機で行われる処理の流れを、図8を用いて説明する。
【0163】
まず、「投げ」コマンドを実行するか否かを判断する(ステップS10)。例えば、第1のバッファ176、第2のバッファ178のうち、いずれかのバッファから出力されたゲームデータが「投げ」の入力情報である場合に、「投げ」コマンドを実行する。
【0164】
そして、「投げ」コマンドを実行すると判断される(ステップS10のYes)と、第1のプレーヤキャラクタと第2のプレーヤキャラクタとが所定範囲に存在することにより「投げ」がヒットしたか否かを判断する(ステップS11)。
【0165】
第1のプレーヤキャラクタと第2のプレーヤキャラクタとがヒットしたと判断されると(ステップS11のYes)、「投げ」をしたプレーヤキャラクタに対する他方のプレーヤキャラクタのゲーム機に、自動制御情報が設定されているか否かを判断する(ステップS12)。
【0166】
自動制御情報が設定されていると判断されると(ステップS12のYes)、抽選処理を行い(ステップS14)、当選か否かを判定する(ステップS15)。
【0167】
当選であると判定されると(ステップS15のYes)、「投げ抜け」コマンドを実行する処理を行う(ステップS16)。例えば、投げ技が失敗し、第2のプレーヤキャラクタが、第1のプレーヤキャラクタから「投げ抜ける」モーションを表示させ、第2のプレーヤキャラクタが第1のプレーヤキャラクタからダメージを受けないように制御する。つまり第2のプレーヤキャラクタの体力値は、「投げ技」のダメージによる減算はされないように制御する。
【0168】
一方、当選でないと判定されると(ステップS15のNo)、処理を終了する。例えば、投げ技が成功し、第1のプレーヤキャラクタが、第2のプレーヤキャラクタを「投げる」モーションを表示させ、第1のプレーヤキャラクタが第2のプレーヤキャラクタにダメージを与え、第2のプレーヤキャラクタの体力値を減算する処理を行う。
【0169】
一方、「自動投げ抜け」コマンドが設定されていないと判断されると(ステップS12のNo)、所定期間内に、「投げ」をしたプレーヤキャラクタに対する他方のプレーヤキャラクタに相当するバッファから「投げ抜け」の入力情報が出力されたか否かを判断する(ステップS13)。
【0170】
所定期間内に、バッファから「投げ抜け」の入力情報が出力されたと判断されると(ステップS13のYes)、「投げ抜け」コマンドを実行する処理を行う(ステップS16)。一方、所定期間内に、バッファから「投げ抜け」の入力情報が出力されていないと判断されると(ステップS13のNo)、処理を終了する。
【図面の簡単な説明】
【0171】
【図1】本実施形態のゲーム機の機能ブロック図。
【図2】本実施形態のネットワーク図。
【図3】同期処理の説明図。
【図4A】図4(A)は、本実施形態の第1、第2のバッファの入出力の説明図。
【図4B】図4(B)は、本実施形態の第1、第2のバッファの入出力の説明図。
【図4C】図4(C)は、本実施形態の第1、第2のバッファの入出力の説明図。
【図5】図5(A)は、乱数テーブルの一例、図5(B)は当選判定テーブルの一例。
【図6】本実施形態の自動制御情報。
【図7】本実施形態のタイミングチャート。
【図8】本実施形態のフローチャート。
【符号の説明】
【0172】
100 処理部、110 ゲーム演算部、111、オブジェクト空間設定部、
112 仮想カメラ制御部、113 移動・動作処理部、114 ネットワーク部、
115 通信制御部、116 バッファ制御部、117 設定部、118 判定部、
119 コマンド実行部、120 決定部、130 描画部、140 音生成部、
160 操作部、170 記憶部、172 主記憶部、174 画像バッファ、
176 第1のバッファ、178 第2のバッファ、179 自動制御情報記憶部、
180 情報記憶媒体、190 表示部、192 音出力部、196 通信部

【特許請求の範囲】
【請求項1】
複数のゲーム機それぞれが、プレーヤの入力情報を含むゲームデータを、共通の識別情報に対応付けて、ネットワークを介して相互に送受信する処理を行い、識別情報が一致する自機のゲームデータと他機のゲームデータとに基づいて、ゲーム演算を行うゲーム機のためのプログラムであって、
特定コマンドに関する自動制御情報を設定する設定部と、
前記自動制御情報が設定されていないゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、プレーヤの入力情報に基づいて前記特定コマンドを実行する処理を行い、
前記自動制御情報が設定されているゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、プレーヤの入力情報に関わらず、所定条件下で前記特定コマンドを実行する処理を行うコマンド実行部として、コンピュータを機能させることを特徴とするプログラム。
【請求項2】
請求項1において、
特定コマンドに対応するプレーヤの入力情報が所定期間内に入力されたものである場合に、当該入力情報を有効と判定する処理を行う判定部として、コンピュータを更に機能させ、
前記コマンド実行部が、
前記自動制御情報が設定されていないゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、有効と判定されたプレーヤの入力情報に基づいて、前記特定コマンドを実行する処理を行うことを特徴とするプログラム。
【請求項3】
請求項2において、
前記所定期間は、所定コマンドに対応するプレーヤの入力情報に応じた期間であることを特徴とするプログラム。
【請求項4】
請求項1〜3のいずれかにおいて、
複数のゲーム機共通の抽選処理に基づいて、特定コマンドを実行するか否かを決定する決定部として、コンピュータを更に機能させ、
前記コマンド実行部が、
前記自動制御情報が設定されているゲーム機のゲームデータに基づいてゲーム演算を行う場合には、前記抽選処理の結果に基づいて、前記特定コマンドを実行する処理を行うことを特徴とするプログラム。
【請求項5】
コンピュータにより読取可能な情報記憶媒体であって、請求項1〜4のいずれかに記載のプログラムを記憶することを特徴とする情報記憶媒体。
【請求項6】
複数のゲーム機それぞれが、プレーヤの入力情報を含むゲームデータを、共通の識別情報に対応付けて、ネットワークを介して相互に送受信する処理を行い、識別情報が一致する自機のゲームデータと他機のゲームデータとに基づいて、ゲーム演算を行うゲーム機であって、
特定コマンドに関する自動制御情報を設定する設定部と、
前記自動制御情報が設定されていないゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、プレーヤの入力情報に基づいて前記特定コマンドを実行する処理を行い、
前記自動制御情報が設定されているゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、プレーヤの入力情報に関わらず、所定条件下で前記特定コマンドを実行する処理を行うコマンド実行部とを含むことを特徴とするゲーム機。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4A】
image rotate

【図4B】
image rotate

【図4C】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate