以下、本発明の実施の形態について、図面を参照して説明する。尚、この実施例により本発明が限定されるものではない。
(ゲームシステムの全体構成)
図1を参照して、本発明の実施形態に係るゲーム装置を含むゲームシステム1について説明する。図1は、ゲームシステム1の外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。図1において、ゲームシステム1は、テレビジョン受像器(以下、単に「テレビ」と記載する)2、ゲーム装置本体3、光ディスク4、コントローラ7、およびマーカ部8を含む。本システムは、コントローラ7を用いたゲーム操作に基づいてゲーム装置本体3でゲーム処理を実行するものである。
ゲーム装置本体3には、当該ゲーム装置本体3に対して交換可能に用いられる情報記憶媒体の一例である光ディスク4が脱着可能に挿入される。光ディスク4には、ゲーム装置本体3において実行されるためのゲームプログラムが記憶されている。ゲーム装置本体3の前面には光ディスク4の挿入口が設けられている。ゲーム装置本体3は、挿入口に挿入された光ディスク4に記憶されたゲームプログラムを読み出して実行することによってゲーム処理を実行する。
ゲーム装置本体3には、表示装置の一例であるテレビ2が接続コードを介して接続される。テレビ2には、ゲーム装置本体3において実行されるゲーム処理の結果得られるゲーム画像が表示される。また、テレビ2の画面の周辺(図1では画面の上側)には、マーカ部8が設置される。マーカ部8は、その両端に2つのマーカ8Rおよび8Lを備えている。マーカ8R(マーカ8Lも同様)は、具体的には1以上の赤外LEDであり、テレビ2の前方に向かって赤外光を出力する。マーカ部8はゲーム装置本体3に接続されており、ゲーム装置本体3はマーカ部8が備える各赤外LEDの点灯を制御することが可能である。
コントローラ7は、当該コントローラ7自身に対して行われた操作の内容を示す操作データをゲーム装置本体3に与える入力装置である。コントローラ7とゲーム装置本体3とは無線通信によって接続される。本実施形態では、コントローラ7とゲーム装置本体3との間の無線通信には例えばBluetooth(ブルートゥース)(登録商標)の技術が用いられる。なお、他の実施形態においてはコントローラ7とゲーム装置本体3とは有線で接続されてもよい。
(ゲーム装置本体3の内部構成)
次に、図2を参照して、ゲーム装置本体3の内部構成について説明する。図2は、ゲーム装置本体3の構成を示すブロック図である。ゲーム装置本体3は、CPU10、システムLSI11、外部メインメモリ12、ROM/RTC13、ディスクドライブ14、およびAV−IC15等を有する。
CPU10は、光ディスク4に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。CPU10は、システムLSI11に接続される。システムLSI11には、CPU10の他、外部メインメモリ12、ROM/RTC13、ディスクドライブ14およびAV−IC15が接続される。システムLSI11は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムLSIの内部構成について後述する。揮発性の外部メインメモリ12は、光ディスク4から読み出されたゲームプログラムや、フラッシュメモリ17から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、CPU10のワーク領域やバッファ領域として用いられる。ROM/RTC13は、ゲーム装置本体3の起動用のプログラムが組み込まれるROM(いわゆるブートROM)と、時間をカウントするクロック回路(RTC:Real Time Clock)とを有する。ディスクドライブ14は、光ディスク4からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ11eまたは外部メインメモリ12に読み出したデータを書き込む。
また、システムLSI11には、入出力プロセッサ11a、GPU(Graphics Processor Unit)11b、DSP(Digital Signal Processor)11c、VRAM11d、および内部メインメモリ11eが設けられる。図示は省略するが、これらの構成要素11a〜11eは内部バスによって互いに接続される。
GPU11bは、描画手段の一部を形成し、CPU10からのグラフィクスコマンド(作画命令)に従って画像を生成する。より具体的には、GPU11bは、当該グラフィクスコマンドに従って3Dグラフィックスの表示に必要な計算処理、例えば、レンダリングの前処理にあたる3D座標から2D座標への座標変換などの処理や、テクスチャの張り込みなどの最終的なレンダリング処理を行うことで、ゲーム画像データを生成する。ここで、CPU10は、グラフィクスコマンドに加えて、ゲーム画像データの生成に必要な画像生成プログラムをGPU11bに与える。VRAM11dは、GPU11bがグラフィクスコマンドを実行するために必要なデータ(ポリゴンデータやテクスチャデータ等のデータ)を記憶する。画像が生成される際には、GPU11bは、VRAM11dに記憶されたデータを用いて画像データを作成する。
DSP11cは、オーディオプロセッサとして機能し、内部メインメモリ11eや外部メインメモリ12に記憶されるサウンドデータや音波形(音色)データを用いて、音声データを生成する。また、内部メインメモリ11eは、外部メインメモリ12と同様に、プログラムや各種データを記憶したり、CPU10のワーク領域やバッファ領域としても用いられる。
上述のように生成された画像データおよび音声データは、AV−IC15によって読み出される。AV−IC15は、読み出した画像データをAVコネクタ16を介してテレビ2に出力するとともに、読み出した音声データを、テレビ2に内蔵されるスピーカ2aに出力する。これによって、画像がテレビ2に表示されるとともに音がスピーカ2aから出力される。
入出力プロセッサ(I/Oプロセッサ)11aは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ11aは、フラッシュメモリ17、無線通信モジュール18、無線コントローラモジュール19、拡張コネクタ20、およびメモリカード用コネクタ21に接続される。無線通信モジュール18にはアンテナ22が接続され、無線コントローラモジュール19にはアンテナ23が接続される。
入出力プロセッサ11aは、無線通信モジュール18およびアンテナ22を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ11aは、定期的にフラッシュメモリ17にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール18およびアンテナ22を介してネットワークに送信する。また、入出力プロセッサ11aは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ22および無線通信モジュール18を介して受信し、受信したデータをフラッシュメモリ17に記憶する。CPU10はゲームプログラムを実行することにより、フラッシュメモリ17に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ17には、ゲーム装置本体3と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置本体3を利用してプレイしたゲームのセーブデータ(ゲームの結果データまたは途中データ)が記憶されてもよい。
また、入出力プロセッサ11aは、コントローラ7から送信される操作データをアンテナ23および無線コントローラモジュール19を介して受信し、内部メインメモリ11eまたは外部メインメモリ12のバッファ領域に記憶(一時記憶)する。
さらに、入出力プロセッサ11aには、拡張コネクタ20およびメモリカード用コネクタ21が接続される。拡張コネクタ20は、USBやSCSIのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール18に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ21は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ11aは、拡張コネクタ20やメモリカード用コネクタ21を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
ゲーム装置本体3には、電源ボタン24、リセットボタン25、およびイジェクトボタン26が設けられる。電源ボタン24およびリセットボタン25は、システムLSI11に接続される。電源ボタン24がオンにされると、ゲーム装置本体3の各構成要素に対して、図示しないACアダプタを経て電源が供給される。また、一旦電源がオンにされた状態で、再度電源ボタン24を押すと、低電力スタンバイモードへの移行が行われる。この状態でも、ゲーム装置本体3への通電は行われているため、インターネット等のネットワークに常時接続しておくことができる。なお、一旦電源がオンにされた状態で、電源をオフにしたいときは、電源ボタン24を所定時間以上長押しすることで、電源をオフとすることが可能である。リセットボタン25が押されると、システムLSI11は、ゲーム装置本体3の起動プログラムを再起動する。イジェクトボタン26は、ディスクドライブ14に接続される。イジェクトボタン26が押されると、ディスクドライブ14から光ディスク4が排出される。
次に、図3および図4を参照して、コントローラ7について説明する。なお、図3は、コントローラ7の上面後方から見た斜視図である。図4は、コントローラ7を下面前方から見た斜視図である。
図3および図4において、コントローラ7は、ハウジング71と、当該ハウジング71の表面に設けられた複数個の操作ボタンで構成される操作部72とを備える。本実施例のハウジング71は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさであり、例えばプラスチック成型によって形成されている。
ハウジング71上面の中央前面側に、十字キー72aが設けられる。この十字キー72aは、十字型の4方向プッシュスイッチであり、4つの方向(前後左右)に対応する操作部分が十字の突出片にそれぞれ90°間隔で配置される。プレイヤが十字キー72aのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー72aを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、複数の選択肢から選択指示したりすることができる。
なお、十字キー72aは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、十字方向に4つのプッシュスイッチを配設し、プレイヤによって押下されたプッシュスイッチに応じて操作信号を出力する操作部を設けてもかまわない。さらに、上記4つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、4つのプッシュスイッチとセンタスイッチとを複合した操作部を設けてもかまわない。また、ハウジング71上面から突出した傾倒可能なスティック(いわゆる、ジョイスティック)を倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー72aの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー72aの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー72aの代わりに設けてもかまわない。
ハウジング71上面の十字キー72aより後面側に、複数の操作ボタン72b〜72gが設けられる。操作ボタン72b〜72gは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン72b〜72gに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン72b〜72dには、1番ボタン、2番ボタン、およびAボタン等としての機能が割り当てられる。また、操作ボタン72e〜72gには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン72a〜72gは、ゲーム装置本体3が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられる。なお、図3に示した配置例では、操作ボタン72b〜72dは、ハウジング71上面の中央前後方向に沿って並設されている。また、操作ボタン72e〜72gは、ハウジング71上面の左右方向に沿って操作ボタン72bおよび72dの間に並設されている。そして、操作ボタン72fは、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
また、ハウジング71上面の十字キー72aより前面側に、操作ボタン72hが設けられる。操作ボタン72hは、遠隔からゲーム装置本体3本体の電源をオン/オフする電源スイッチである。この操作ボタン72hも、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
また、ハウジング71上面の操作ボタン72cより後面側に、複数のLED702が設けられる。ここで、コントローラ7は、他のコントローラ7と区別するためにコントローラ種別(番号)が設けられている。例えば、LED702は、コントローラ7に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ7からゲーム装置本体3へ送信データを送信する際、上記コントローラ種別に応じて複数のLED702のうち、種別に対応するLEDが点灯する。
また、ハウジング71上面には、操作ボタン72bおよび操作ボタン72e〜72gの間に後述するスピーカ(図5のスピーカ706)からの音を外部に放出するための音抜き孔が形成されている。
一方、ハウジング71下面には、凹部が形成されている。後述で明らかとなるが、ハウジング71下面の凹部は、プレイヤがコントローラ7の前面をマーカ8Lおよび8Rに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の傾斜面には、操作ボタン72iが設けられる。操作ボタン72iは、例えばBボタンとして機能する操作部である。
また、ハウジング71前面には、撮像情報演算部74の一部を構成する撮像素子743が設けられる。ここで、撮像情報演算部74は、コントローラ7が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大200フレーム/秒程度のサンプリング周期であるため比較的高速なコントローラ7の動きでも追跡して解析することができる。この撮像情報演算部74の詳細な構成については、後述する。また、ハウジング71の後面には、コネクタ73が設けられている。コネクタ73は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
ここで、以下の説明を具体的にするために、コントローラ7に対して設定する座標系について定義する。図3および図4に示すように、互いに直交するxyz軸をコントローラ7に対して定義する。具体的には、コントローラ7の前後方向となるハウジング71の長手方向をz軸とし、コントローラ7の前面(撮像情報演算部74が設けられている面)方向をz軸正方向とする。また、コントローラ7の上下方向をy軸とし、ハウジング71の上面(操作ボタン72a等が設けられた面)方向をy軸正方向とする。さらに、コントローラ7の左右方向をx軸とし、ハウジング71の左側面(図3では表されずに図4で表されている側面)方向をx軸正方向とする。
次に、図5および図6を参照して、コントローラ7の内部構造について説明する。なお、図5は、コントローラ7の上ハウジング(ハウジング71の一部)を外した状態を後面側から見た斜視図である。図6は、コントローラ7の下ハウジング(ハウジング71の一部)を外した状態を前面側から見た斜視図である。ここで、図6に示す基板700は、図5に示す基板700の裏面から見た斜視図となっている。
図5において、ハウジング71の内部には基板700が固設されており、当該基板700の上主面上に操作ボタン72a〜72h、加速度センサ701、LED702、およびアンテナ754等が設けられる。そして、これらは、基板700等に形成された配線(図示せず)によってマイコン751等(図6、図7参照)に接続される。マイコン751は本願発明のボタンデータ発生手段の一例として、操作ボタン72a等の種類に応じた操作ボタンデータを発生させるように機能する。この仕組みは公知技術であるが、例えばキートップ下側に配置されたタクトスイッチなどのスイッチ機構による配線の接触/切断をマイコン751が検出することによって実現されている。より具体的には、操作ボタンが例えば押されると配線が接触して通電するので、この通電がどの操作ボタンにつながっている配線で発生したかをマイコン751が検出し、操作ボタンの種類に応じた信号を発生させている。
また、コントローラ7は、無線モジュール753(図7参照)およびアンテナ754によって、ワイヤレスコントローラとして機能する。なお、ハウジング71内部には図示しない水晶振動子が設けられており、後述するマイコン751の基本クロックを生成する。また、基板700の上主面上に、スピーカ706およびアンプ708が設けられる。また、加速度センサ701は、操作ボタン72dの左側の基板700上(つまり、基板700の中央部ではなく周辺部)に設けられる。したがって、加速度センサ701は、コントローラ7の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分の含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコントローラ7の回転を良好な感度でゲーム装置本体3等が判定することができる。
一方、図6において、基板700の下主面上の前端縁に撮像情報演算部74が設けられる。撮像情報演算部74は、コントローラ7の前方から順に赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744によって構成されており、それぞれ基板700の下主面に取り付けられる。また、基板700の下主面上の後端縁にコネクタ73が取り付けられる。さらに、基板700の下主面上にサウンドIC707およびマイコン751が設けられている。サウンドIC707は、基板700等に形成された配線によってマイコン751およびアンプ708と接続され、ゲーム装置本体3から送信されたサウンドデータに応じてアンプ708を介してスピーカ706に音声信号を出力する。
そして、基板700の下主面上には、バイブレータ704が取り付けられる。バイブレータ704は、例えば振動モータやソレノイドである。バイブレータ704は、基板700等に形成された配線によってマイコン751と接続され、ゲーム装置本体3から送信された振動データに応じてその作動をオン/オフする。バイブレータ704が作動することによってコントローラ7に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。ここで、バイブレータ704は、ハウジング71のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング71が大きく振動することになり、振動を感じやすくなる。
次に、図7を参照して、コントローラ7の内部構成について説明する。なお、図7は、コントローラ7の構成を示すブロック図である。
図7において、コントローラ7は、上述した操作部72、撮像情報演算部74、加速度センサ701、バイブレータ704、スピーカ706、サウンドIC707、およびアンプ708の他に、その内部に通信部75を備えている。
撮像情報演算部74は、赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744を含んでいる。赤外線フィルタ741は、コントローラ7の前方から入射する光から赤外線のみを通過させる。ここで、テレビ2の表示画面近傍に配置されるマーカ8Lおよび8Rは、テレビ2の前方に向かって赤外光を出力する赤外LEDである。したがって、赤外線フィルタ741を設けることによってマーカ8Lおよび8Rの画像をより正確に撮像することができる。レンズ742は、赤外線フィルタ741を透過した赤外線を集光して撮像素子743へ入射させる。撮像素子743は、例えばCMOSセンサやあるいはCCDのような固体撮像素子であり、レンズ742が集光した赤外線を撮像する。したがって、撮像素子743は、赤外線フィルタ741を通過した赤外線だけを撮像して画像データを生成する。以下では、撮像素子743によって撮像された画像を撮像画像と呼ぶ。撮像素子743によって生成された画像データは、画像処理回路744で処理される。画像処理回路744は、撮像画像内における撮像対象(マーカ8Lおよび8R)の位置を算出する。以下、図8を用いて撮像対象の位置の算出方法を説明する。
図8は、撮像画像の一例を示す図である。図8に示す撮像画像においては、マーカ8Lの画像8L'およびマーカ8Rの画像8R'が左右に並んでいる。撮像画像が入力されると、まず、画像処理回路744は、撮像画像内において所定条件に合致する領域の位置を示す座標を当該領域毎に算出する。ここで、所定条件とは、撮像対象の画像(対象画像)を特定するための条件であり、所定条件の具体的な内容は、輝度が所定値以上の領域(高輝度領域)であり、かつ、領域の大きさが所定範囲内の大きさであることである。なお、所定条件は撮像対象を特定するための条件であればよく、他の実施形態においては、画像の色に関する条件を含んでいてもよい。
対象画像の位置を算出する際、まず、画像処理回路744は、撮像画像の領域から上記高輝度領域を対象画像の候補として特定する。撮像画像の画像データにおいて対象画像は高輝度領域として現れるからである。次に、画像処理回路744は、特定された高輝度領域の大きさに基づいて、その高輝度領域が対象画像であるか否かを判定する判定処理を行う。撮像画像には、対象画像である2つのマーカ8Lおよび8Rの画像8L'および8R'の他、窓からの太陽光や部屋の蛍光灯の光によって対象画像以外の画像が含まれている場合がある。この場合、マーカ8Lおよび8Rの画像8L'および8R'以外の画像も高輝度領域として現れてしまう。上記の判定処理は、対象画像であるマーカ8Lおよび8Rの画像8L'および8R'とそれ以外の画像とを区別し、対象画像を正確に特定するための処理である。具体的には、当該判定処理においては、特定された高輝度領域が、予め定められた所定範囲内の大きさであるか否かが判定される。そして、高輝度領域が所定範囲内の大きさである場合、当該高輝度領域は対象画像を表すと判定され、高輝度領域が所定範囲内の大きさでない場合、当該高輝度領域は対象画像以外の画像を表すと判定される。
さらに、上記の判定処理の結果、対象画像を表すと判定された高輝度領域について、画像処理回路744は当該高輝度領域の位置を算出する。具体的には、当該高輝度領域の重心位置を算出する。なお、重心位置は撮像素子743の解像度よりも詳細なスケールで算出することが可能である。ここでは、撮像素子743によって撮像された撮像画像の解像度が126×96であるとし、重心位置は1024×768のスケールで算出されるものとする。つまり、重心位置の座標は、(0,0)から(1024,768)までの整数値で表現される。なお、撮像画像における位置は、図8に示すように、撮像画像の左上を原点とし、下向きをy軸正方向とし、右向きをx軸正方向とする座標系(xy座標系)で表現されるものとする。
以上のようにして、画像処理回路744は、撮像画像内において所定条件に合致する領域の位置を示す座標を当該領域毎に算出する。なお、以下では、画像処理回路744によって算出される座標をマーカ座標と呼ぶ。マーカ座標は、撮像画像に対応する平面上の位置を表すための座標系において撮像対象の位置を示す座標である。画像処理回路744は、マーカ座標を通信部75のマイコン751へ出力する。マーカ座標のデータは、マイコン751によって操作データとしてゲーム装置本体3に送信される。マーカ座標はコントローラ7自体の向き(姿勢)や位置に対応して変化するので、ゲーム装置本体3は当該座標値を用いてコントローラ7の向きや位置を算出することができる。なお、本実施形態では、撮像画像からマーカ座標を算出する処理までをコントローラ7の画像処理回路744および/またはマイコン751で行ったが、例えば撮像画像をゲーム装置本体3に送り、以降の処理と同等の処理をゲーム装置本体3のCPU10等で行わせることもできる。
また、コントローラ7は、3軸(x、y、z軸)の加速度センサ701を備えていることが好ましい。この3軸の加速度センサ701は、3方向、すなわち、上下方向、左右方向、および前後方向で直線加速度を検知する。また、他の実施形態においては、ゲーム処理に用いる制御信号の種類によっては、上下および左右方向(または他の対になった方向)のそれぞれに沿った直線加速度のみを検知する2軸の加速度検出手段を使用してもよい。例えば、この3軸または2軸の加速度センサ701は、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能であるタイプのものでもよい。加速度センサ701は、シリコン微細加工されたMEMS(Micro Electro Mechanical Systems:微小電子機械システム)の技術に基づいた静電容量式(静電容量結合式)であってもよい。しかしながら、既存の加速度検出手段の技術(例えば、圧電方式や圧電抵抗方式)あるいは将来開発される他の適切な技術を用いて3軸または2軸の加速度センサ701が提供されてもよい。
当業者には公知であるように、加速度センサ701に用いられるような加速度検出手段は、加速度センサの持つ各軸に対応する直線に沿った加速度(直線加速度)のみを検知することができる。つまり、加速度センサ701からの直接の出力は、その2軸または3軸のそれぞれに沿った直線加速度(静的または動的)を示す信号である。このため、加速度センサ701は、非直線状(例えば、円弧状)の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
しかしながら、加速度センサ701から出力される加速度の信号に基づいて、ゲーム装置のプロセッサ(例えばCPU10)またはコントローラのプロセッサ(例えばマイコン751)などのコンピュータが処理を行うことによって、コントローラ7に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサを搭載するコントローラが静的な状態であることを前提としてコンピュータ側で処理する場合(すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理する場合)、コントローラが現実に静的な状態であれば、検出された加速度に基づいてコントローラの姿勢が重力方向に対して傾いているか否か又はどの程度傾いているかを知ることができる。具体的には、加速度センサの検出軸が鉛直下方向を向いている状態を基準としたとき、1G(重力加速度)がかかっているか否かだけで傾いているか否かを知ることができるし、その大きさによってどの程度傾いているかも知ることができる。また、多軸の加速度センサの場合には、さらに各軸の加速度の信号に対して処理を施すことによって、各軸が重力方向に対してどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサ701からの出力に基づいて、プロセッサがコントローラ7の傾き角度のデータを算出する処理をおこなってもよいが、当該傾き角度のデータを算出する処理をおこなうことなく、加速度センサ701からの出力に基づいて、おおよその傾き具合を推定するような処理としてもよい。このように、加速度センサ701をプロセッサと組み合わせて用いることによって、コントローラ7の傾き、姿勢または位置を判定することができる。一方、加速度センサが動的な状態であることを前提とする場合には、重力加速度成分に加えて加速度センサの動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、動き方向などを知ることができる。具体的には、加速度センサ701を備えるコントローラ7がユーザの手で動的に加速されて動かされる場合に、加速度センサ701によって生成される加速度信号を処理することによって、コントローラ7のさまざまな動きおよび/または位置を算出することができる。なお、加速度センサが動的な状態であることを前提とする場合であっても、加速度センサの動きに応じた加速度を所定の処理により除去すれば、重力方向対する傾きを知ることが可能である。他の実施例では、加速度センサ701は、信号をマイコン751に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサが静的な加速度(例えば、重力加速度)を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。
他の実施形態の例では、コントローラ7の動きを検出する動きセンサとして、回転素子または振動素子などを内蔵したジャイロセンサを用いてもよい。この実施形態で使用されるMEMSジャイロセンサの一例として、アナログ・デバイセズ株式会社から入手可能なものがある。加速度センサ701と異なり、ジャイロセンサは、それが内蔵する少なくとも一つのジャイロ素子の軸を中心とした回転(または角速度)を直接検知することができる。このように、ジャイロセンサと加速度センサとは基本的に異なるので、個々の用途のためにいずれの装置が選択されるかによって、これらの装置からの出力信号に対して行う処理を適宜変更する必要がある。
具体的には、加速度センサの代わりにジャイロセンサを用いて傾きや姿勢を算出する場合には、大幅な変更を行う。すなわち、ジャイロセンサを用いる場合、検出開始の状態において傾きの値を初期化する。そして、当該ジャイロセンサから出力される角速度データを積分する。次に、初期化された傾きの値からの傾きの変化量を算出する。この場合、算出される傾きは、角度に対応する値が算出されることになる。一方、加速度センサによって傾きを算出する場合には、重力加速度のそれぞれの軸に関する成分の値を、所定の基準と比較することによって傾きを算出するので、算出される傾きはベクトルで表すことが可能であり、初期化を行わずとも、加速度検出手段を用いて検出される絶対的な方向を検出することが可能である。また、傾きとして算出される値の性質は、ジャイロセンサが用いられる場合には角度であるのに対して、加速度センサが用いられる場合にはベクトルであるという違いがある。したがって、加速度センサに代えてジャイロセンサが用いられる場合、当該傾きのデータに対して、2つのデバイスの違いを考慮した所定の変換を行う必要がある。加速度検出手段とジャイロセンサとの基本的な差異と同様にジャイロセンサの特性は当業者に公知であるので、本明細書ではさらなる詳細を省略する。ジャイロセンサは、回転を直接検知できることによる利点を有する一方、一般的には、加速度センサは、本実施形態で用いるようなコントローラに適用される場合、ジャイロセンサに比べて費用効率が良いという利点を有する。
通信部75は、マイクロコンピュータ(Micro Computer:マイコン)751、メモリ752、無線モジュール753、およびアンテナ754を含んでいる。マイコン751は、処理の際にメモリ752を記憶領域として用いながら、送信データを無線送信する無線モジュール753を制御する。また、マイコン751は、アンテナ754を介して無線モジュール753が受信したゲーム装置本体3からのデータに応じて、サウンドIC707およびバイブレータ704の動作を制御する。サウンドIC707は、通信部75を介してゲーム装置本体3から送信されたサウンドデータ等を処理する。また、マイコン751は、通信部75を介してゲーム装置本体3から送信された振動データ(例えば、バイブレータ704をONまたはOFFする信号)等に応じて、バイブレータ704を作動させる。
コントローラ7に設けられた操作部72からの操作信号(キーデータ)、加速度センサ701からの加速度信号(x、y、およびz軸方向加速度データ;以下、単に加速度データと記載する)、および撮像情報演算部74からの処理結果データは、マイコン751に出力される。マイコン751は、入力した各データ(キーデータ、加速度データ、処理結果データ)を無線コントローラモジュール19へ送信する送信データとして一時的にメモリ752に格納する。ここで、通信部75から無線コントローラモジュール19への無線送信は、所定の周期毎に行われるが、ゲームの処理は1/60秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は16.7ms(1/60秒)であり、ブルートゥース(Bluetooth;登録商標)で構成される通信部75の送信間隔は例えば5msである。マイコン751は、無線コントローラモジュール19への送信タイミングが到来すると、メモリ752に格納されている送信データを一連の操作情報として出力し、無線モジュール753へ出力する。そして、無線モジュール753は、例えばブルートゥース(登録商標)の技術に基づいて、所定周波数の搬送波を用いて操作情報で変調し、その電波信号をアンテナ754から放射する。つまり、コントローラ7に設けられた操作部72からのキーデータ、加速度センサ701からの加速度データ、および撮像情報演算部74からの処理結果データが無線モジュール753で電波信号に変調されてコントローラ7から送信される。そして、ゲーム装置本体3の無線コントローラモジュール19でその電波信号を受信し、ゲーム装置本体3で当該電波信号を復調や復号することによって、一連の操作情報(キーデータ、加速度データ、および処理結果データ)を取得する。そして、ゲーム装置本体3のCPU10は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、ブルートゥース(登録商標)の技術を用いて通信部75を構成する場合、通信部75は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
ここで、コントローラ7を用いたゲーム操作について説明する。ゲームシステム1でコントローラ7を用いてゲームをプレイする際、プレイヤは、一方の手でコントローラ7を把持する。このとき、図9に示すように、プレイヤは、コントローラ7の前面(撮像情報演算部74が撮像する光の入射口側)がマーカ8Lおよび8Rの方向を向く状態でコントローラ7を把持する。この状態で、プレイヤは、コントローラ7の傾きを変化させたり、コントローラ7が指し示す画面上の位置(指示位置)を変更したり、コントローラ7と各マーカ8Lおよび8Rとの距離を変更したりすることによってゲーム操作を行う。
次に、図10〜図30を用いて、本実施形態で想定するゲームの概要について説明する。本ゲームは、仮想3次元空間内でプレイヤオブジェクトを操作するアクションアドベンチャーゲームである。図10は、本実施形態で想定するゲームの画面の一例である。図10において、ゲーム画面には、3次元仮想ゲーム空間の様子が表示されている。3次元仮想ゲーム空間にはプレイヤオブジェクト101が存在しており、その全身が表示されている。すなわち、図10においては、3次元仮想ゲーム空間の様子を撮影する仮想カメラは、プレイヤオブジェクト101の全身がゲーム画面に表示されるような位置および画角が設定されて制御されている。ここで、本ゲームでは、仮想カメラの制御に複数の方法を使い分けているが(詳細は後述)、上記のようなカメラ制御を、以下では客観カメラ制御と呼ぶ。また、当該客観カメラ制御が行われているときのゲームの状態を通常モードと呼ぶ。
上記通常モードでは、プレイヤオブジェクト101に仮想カメラの注視点が設定され、当該プレイヤオブジェクト101の全身が画面のほぼ中央に表示されるように仮想カメラが制御される。そのため、プレイヤオブジェクト101が仮想ゲーム空間内を移動すると、仮想カメラも移動する。図11は、プレイヤオブジェクト101が(プレイヤから見て)左方向に移動制御されているときの状態を示す画面の一例である。図11では、プレイヤオブジェクト101が(プレイヤから見て)左方向を向いて走っている様子がゲーム画面のほぼ中央に表示されている。また、通常モードにおいて、所定のボタン操作を行うことで、仮想カメラをプレイヤオブジェクト101の背後の位置に移動させる(つまり、視界を正面に向ける。以下、視点リセット操作と呼ぶ)ことが可能である。すなわち、プレイヤオブジェクト101が向いている方向が正面に来るようなゲーム画面を表示させることが可能となっている。
なお、図10に示すゲーム画面上にはカーソル106も表示されている。プレイヤは、当該カーソル106を移動させ、画面上の所定の位置を指示する操作等が可能となっている。
次に、図12(a)〜(c)を用いて、上述したような通常モードでのカメラ制御について説明する。図12(a)〜(c)はそれぞれ、仮想ゲーム空間を鳥瞰した模式図であり、プレイヤオブジェクト101と仮想カメラの配置(位置関係)を示している。また、図12(a)〜(c)においては、それぞれ上方向が仮想ゲーム空間内における「北」方向であるとする。まず、図12(a)に示すように、プレイヤオブジェクト101が「北」を向いており、仮想カメラはプレイヤオブジェクト101の背後に位置し、「北」方向を向いているとする(このときは、上記図10のようなゲーム画面が表示される)。図12(a)の状態から、プレイヤがプレイヤオブジェクト101を左方向に移動させる操作を行うと、図12(b)に示すように、仮想ゲーム空間内においてプレイヤオブジェクト101が左方向、すなわち、「西」方向を向き、「西」に向かって移動する。このとき、仮想カメラは、「北」を向いたまま、プレイヤオブジェクトの移動に従って、「西」方向に移動する。その結果、上記図11に示したような画面が表示される。また、図11(図12(b))の状態において、プレイヤが上記のような視点リセット操作を行えば、図12(c)に示すように、仮想カメラがプレイヤオブジェクトの背後の位置に移動し、仮想カメラも「西」方向を向くような制御が行われる。その結果、プレイヤオブジェクト101の前方の様子が表示されるゲーム画面(背景の様子は異なるが、上記図10のような画面)が表示されることになる。
ここで、本ゲームは、上記通常モード(客観カメラ制御)を基本的な状態としてゲーム処理が実行されるが、この他、ゲーム中の場面やプレイヤの操作等に応じて、通常モードで行われる客観カメラ制御とは異なる仮想カメラの制御方法でゲーム画面が表示される。すなわち、複数の仮想カメラの制御方法が使い分けられている。具体的には、本ゲームでは、上記客観カメラ制御の他、3次元仮想ゲーム空間を鳥瞰したような画面(以下、鳥瞰画面)を表示する鳥瞰カメラ制御(以下、当該鳥瞰カメラ制御が行われているときの状態を2Dモードと呼ぶ)、後述するような、所定の地点に常に仮想カメラが向いているような制御によってゲーム画面を表示するマーカ注目制御(以下、当該マーカ注目制御が行われているときの状態をマーカ注目モードと呼ぶ)、および、プレイヤオブジェクト101の目線(1人称視点)で見た仮想カメラ制御によるゲーム画面が表示される主観カメラ制御(以下、当該主観カメラ制御が行われる状態を主観モードと呼ぶ)の3種類のカメラ制御方法が用いられる。以下、各仮想カメラ制御および各モードについて説明する。
まず、上記2Dモードにおける鳥瞰カメラ制御について説明する。通常モードと2Dモードとの間の切替操作は、予め定義されている2Dモード切り替え用の操作(例えば、十字キー72aの上ボタンを押す)をプレイヤが行うことで切り替えることが可能である。通常モードにおいて、プレイヤが当該2Dモード切り替え用の操作を行うと、ゲーム画面の切替中の演出として、仮想カメラを仮想ゲーム空間の上方に移動させつつ真下を向かせる制御を行うことで生成されるゲーム画面が表示され(仮想カメラが急上昇するような動きをしたゲーム画面が表示される演出となる)、最終的に、図13に示すようなゲーム画面が表示される。図13は、当該2Dモードにおけるゲーム画面の一例である。図13では、仮想ゲーム空間を鳥瞰した画像(以下、鳥瞰画像と呼ぶ)が表示されている。当該鳥瞰画像は、仮想カメラが仮想ゲーム空間の上方に移動し、真下を向いて撮影したときの画像となっている。なお、当該鳥瞰画像は、3次元空間に対応した2次元のマップ画像として表示しても良い。すなわち、仮想ゲーム空間を鳥瞰した状態の3次元空間を基にして、例えば岩場などの地形オブジェクトを、予め用意されている2次元画像用の岩場画像に置き換える等して、別途2次元画像を生成して表示するようにしてもよい。また、プレイヤオブジェクト101を示すプレイヤシンボル105がゲーム画面の中央に表示されてる。プレイヤは、この画面に切り替えることによって、プレイヤオブジェクト101の周囲の状況や仮想ゲーム空間の全体像を把握することが可能となる。また、この状態においても、プレイヤはプレイヤオブジェクト101(プレイヤシンボル105)の移動操作を行うことが可能である。例えば、図13の状態でプレイヤオブジェクト101を右に移動させる操作を行えば、ゲーム画面が右から左にスクロールする。つまり、プレイヤシンボル105は常に画面中央に表示されるように画面のスクロール制御が行われる。
また、図13において、ゲーム画面右側には、ツールバー104が表示され、更にツールバー104の中にマーカ103が表示されている。本ゲームでは、当該マーカ103を用いて仮想ゲーム空間内の任意の地点に「目印」をつけることができる。具体的なマーカ103の設定操作例を示すと、まず、プレイヤは、カーソル106をマーカ103の表示位置まで移動させ、所定のボタン(例えば、操作ボタン72d)を押す。すると、図14に示すように、カーソル106がマーカ103を掴むような画像に変化する。その後、操作ボタン72dを押したまま、ゲーム画面内(仮想ゲーム空間内)の所望の位置にカーソル106(マーカ103)を移動させ(ドラッグ操作)、操作ボタン72dを離す。これにより、操作ボタン72dを離したときの位置にマーカ103が設定され、図15に示すように、マーカ103が設定された地点に星印の「目印」107が表示される。このようにマーカを設定した「目印」地点(以下、マーカ地点と呼ぶ)は、後述のマーカ注目モードにおける仮想カメラ制御で用いられる。
次に、マーカ注目モードおよびマーカ注目制御について説明する。まず、上記2Dモードにおいて上述したような操作をプレイヤが行うことで「目印」107(マーカ地点)を設定済みの状態であるとする。そして、通常モードのときに、所定のボタン、例えば操作ボタン72iを押すと、上記マーカ地点が仮想カメラの正面方向(仮想カメラの視線方向)に位置するような仮想カメラの制御、すなわち、マーカ注目制御が行われる。例えば、仮想ゲーム空間を鳥瞰した図で考えたときに、プレイヤオブジェクト101とマーカ地点との関係が上記図16に示したような状態から図17に示すような状態に変化したとする。すなわち、プレイヤオブジェクト101が、少し右(仮想ゲーム空間内の東方向)に移動した状態とする。また、このときはまだ通常モードであり、仮想カメラは上記客観カメラ制御による制御が行われており、仮想ゲーム空間内における東方向を向いている状態とする。図17に示すような位置関係にあるときに、上記通常モードにおいてプレイヤが操作ボタン72iを押すと、仮想カメラのマーカ注目制御が開始され、その結果、仮想カメラの位置および向きが図18に示すような状態となるように制御される。すなわち、仮想カメラの注視点が上記マーカ地点に設定され、仮想カメラの向きがマーカ地点のある方向を向く。また、仮想カメラの位置は、マーカ地点とプレイヤオブジェクト101とを結んだ直線の延長線上にくるような位置(プレイヤオブジェクト101がゲーム画面のほぼ中央に表示されるような位置)となる。その結果、ゲーム画面としては、図19のような画面が表示される。図19では、プレイヤから見て奥行き方向にマーカ地点(図19では、説明の便宜上、星印で明示しているが、実際のゲーム画面上では当該星印は表示されない。但し、3次元空間内において、当該マーカ地点に所定のオブジェクトを配置して、表示されるようにしても良い)が位置するような画面であり、かつ、プレイヤオブジェクト101もゲーム画面のほぼ中央に表示されている状態である。
そして、プレイヤが操作ボタン72iを押し続けている間は、常に仮想カメラの視線方向にプレイヤオブジェクト101とマーカ地点が来るように仮想カメラが制御される。すなわち、操作ボタン72iを押し続けている間がマーカ地点注目モードであり、上記マーカ注目制御による仮想カメラの制御が実行され続ける。図20は、上記図19のような状態から、プレイヤが操作ボタン72iを押したまま、プレイヤオブジェクト101を右に移動させる操作を行ったときのゲーム画面の一例である。また、図21は、図19の状態から操作ボタン72iを押したまま、プレイヤオブジェクト101を(プレイヤから見て)手前側にに移動させる操作を行ったときのゲーム画面の一例である。いずれの場合も、「目印」のある方向に仮想カメラが向けられている。すなわち、(プレイヤから見て)プレイヤオブジェクト101の奥行き方向にマーカ地点(上記図19と同様、本実施形態では、星印は実際のゲーム画面では表示されないものとする。但し、マーカ地点を示す所定のオブジェクトとして図20、21のような星印のオブジェクトを配置し、マーカ地点が画面内に明示されるようにしてもよい)が位置しているゲーム画面は表示されている。また、プレイヤは、操作ボタン72iの押下を止めることで、マーカ注目モードから通常モードへと切り替えることができる。
上記マーカ注目制御における仮想カメラの制御処理についてより具体的に説明する。例えば、仮想ゲーム空間を鳥瞰した図で考えたときに、プレイヤオブジェクト101とマーカ地点との関係が図22に示したような状態であるとする。この状態の時に、操作ボタン72iがプレイヤによって押される(マーカ注目モードへの切替操作が行われる)と、まず、図23に示すように、仮想ゲーム空間内における、マーカ地点とプレイヤオブジェクト101を結ぶ直線109が算出される。次に、図24に示すように、当該直線109のプレイヤオブジェクト101側を延長した直線上に仮想カメラが配置される。更に、マーカ地点がカメラの注視点として設定され、仮想カメラの向きがマーカ地点の方向となるように設定される。そして、このように制御された仮想カメラで撮影した仮想ゲーム空間の様子がゲーム画面として表示されることになる。
また、マーカ注目制御中は、仮想カメラの注視点はマーカ地点に設定されているため、上記のように操作ボタン72iを押したままプレイヤオブジェクト101を移動させると、仮想カメラの移動軌跡は、当該マーカ地点を中心とする円の円周上を移動するような軌跡になる。例えば、操作ボタン72iを押したままプレイヤオブジェクト101を(プレイヤから見て)右方向に移動させつづけると、プレイヤオブジェクト101および仮想カメラの移動軌跡は、図25のように、マーカ地点を中心とした円を描く様な移動軌跡となる(ゲーム画面には、プレイヤオブジェクト101が右を向いて走っている様子が表示され続ける)。
なお、上記のように通常モードにおいて操作ボタン72iを押すことで、仮想カメラがマーカ地点を向くような制御が行われるが、上記2Dモードにおいて操作ボタン72iを押したときにも、マーカ地点に応じた画面の制御が行われる。具体的には、上記2Dモードにおいて操作ボタン72iが押されたとき、マーカ地点が画面の上方向に位置するように、上記図13等で示したような鳥瞰画面を回転させる処理が実行される。例えば、図26に示すような鳥瞰画面が表示されているとする。図26では、目印107(マーカ地点)が右下の位置に設定されている状態である。この画面が表示されているときに操作ボタン72iを押すことで、図26に示すように、目印107(マーカ地点)が画面の上部に位置するように画面の回転処理が行われる(但し、図27では、マーカ地点自体はゲーム画面の表示範囲内には含まれていない状態である)。
次に、上記主観モードおよび主観カメラ制御について説明する。主観カメラ制御は、主に、仮想ゲーム空間内で所定のオブジェクト(本ゲームでは、敵オブジェクト)を特定し、これに対して攻撃する場面で用いられる仮想カメラ制御方法である。まず、通常モードと主観モードとの間の切替操作について説明する。当該操作は、「ポインタロック」と呼ばれる操作を行うことで可能である。具体的には、通常モードにおいて、例えば図28に示すような状態で、ゲーム画面に表示されてるカーソル106を敵オブジェクト201に重ねる。そして所定のボタン、例えば操作ボタン72dをプレイヤが押すことで、仮想カメラがプレイヤオブジェクト101の目の位置に移動し、図29に示すような、一人称視点で見たゲーム画面が表示される。このモードでは、仮想カメラの注視点がカーソル106を重ねた敵オブジェクト201に設定される。つまり、プレイヤオブジェクト101が敵オブジェクト201に注目しているような仮想カメラ制御が行われる。また、図29に示されるように、ゲーム画面が一人称視点(プレイヤオブジェクト101の目線)で描かれるため、プレイヤオブジェクト101自体は表示されないが、プレイヤオブジェクト101の持つ武器オブジェクト131については、ゲームの便宜上表示される。プレイヤはこの武器オブジェクト131を操作することで、敵オブジェクト201に攻撃を行うことが可能となっている。主観モード中において、上記敵オブジェクト201を倒すか、主観モード解除のための所定の操作を行うことで、主観モードから通常モードに切り替えることができる。すなわち、仮想カメラの制御を主観カメラ制御から客観カメラ制御へ切り替えることができる。
図30に、上記各モード間の遷移とこれに伴う操作の関係を示す。図30において、通常モードを起点として、2Dモード切替のための操作(例えば、十字キー72aの上ボタンを押す)を行うと、上記2Dモードに切り替わり、2Dモード中に所定の解除操作を行うと、通常モードに戻る。また、通常モードにおいて、マーカ注目モードへの切替のためのボタン(例えば、操作ボタン72i)を押すと、上記マーカ注目モードに切り替わる。操作ボタン72iを押下し続けている間はマーカ注目モードが継続し、当該操作ボタン72iを離せば、通常モードに戻る。また、通常モード中に、上述したようなポインタロック操作を行うことで、主観モードへ切り替わる。主観モードにおいて、主観モードの解除のための操作を行うか、あるいはポインタロックを行った敵オブジェクトを倒したときは、通常モードに戻る。
このように、本ゲームでは、仮想ゲーム空間においてプレイヤが所望する任意の地点をマーカ地点として設定し、ゲーム中において、プレイヤが所定の操作を行えば、当該マーカ地点がプレイヤから見て正面の位置に来るような仮想カメラ制御(すなわち、仮想カメラの視線上に来るような仮想カメラ制御)が行われる。そのため、マーカ地点のある方向を容易にプレイヤに把握させることができ、また、このような画面が表示されている時に、プレイヤオブジェクト101をプレイヤから見て奥行き方向に移動させるという操作を行うだけで、プレイヤオブジェクト101をマーカ地点に向けて容易に移動させることが可能となる。
次に、ゲーム装置本体3によって実行されるゲーム処理の詳細を説明する。まず、ゲーム処理の際に外部メインメモリ12に記憶されるデータについて説明する。図31は、ゲーム装置本体3のメインメモリ12のメモリマップを示す図である。図31において、外部メインメモリ12は、プログラム記憶領域121およびデータ記憶領域128を含む。プログラム記憶領域121およびデータ記憶領域128のデータは、光ディスク4に記憶され、ゲームプログラム実行時には外部メインメモリ12に転送されて記憶される。
プログラム記憶領域121は、CPU10によって実行されるゲームプログラムを記憶し、このゲームプログラムは、メイン処理プログラム122と、通常モード処理プログラム123と、2Dモード処理プログラム124と、マーカ注目処理プログラム125と、ポインタロック処理プログラム126と、主観モード処理プログラム127などによって構成される。メイン処理プログラム122は、後述する図32のフローチャートの処理に対応するプログラムである。通常モード処理プログラム123は、上述したような通常モードにおける仮想カメラの制御処理等をCPU10に実行させるためのプログラムであり、2Dモード処理プログラム124は、上記2Dモードにおける仮想カメラの制御処理等をCPU10に実行させるためのプログラムであり、マーカ注目処理プログラム125は、上記マーカ注目モードにおける仮想カメラの制御処理等をCPU10に実行させるためのプログラムである。また、ポインタロック処理プログラム126は、上述したポインタロック操作が行われたときの処理を実行されるためのプログラムであり、主観モード処理プログラム127は、上記主観モードにおける仮想カメラの制御処理等をCPU10に実行させるためのプログラムである。
データ記憶領域128には、操作データ129、カレントモード130、マーカ地点データ131、プレイヤオブジェト位置データ132、仮想カメラ制御用パラメータ133、オブジェクトデータ134、画像データ135などのデータが記憶されるとともに、ゲーム処理中に用いられる各種フラグも記憶される。
操作データ129は、コントローラ7からゲーム装置本体3へ送信されてくる操作データである。上述したように、コントローラ7からゲーム装置本体3へ1/200秒に1回の割合で操作データが送信されるので、メインメモリに記憶される操作データ129はこの割合で更新される。本実施形態においては、メインメモリには、最新の(最後に取得された)操作データのみが記憶されればよい。
操作データ129には、操作ボタンデータ1291、マーカ座標データ1292、および、加速度データ1293が含まれる。
操作ボタンデータ1291は、各操作ボタン72a〜72iに対する入力状態を示すデータである。
マーカ座標データ1292は、撮像情報演算部35の画像処理回路41によって算出される座標、すなわち上記マーカ座標を示すデータである。マーカ座標は、撮像画像に対応する平面上の位置を表すための2次元座標系で表現される。なお、撮像素子40によって2つのマーカ6Rおよび6Lが撮像される場合には、2つのマーカ座標が算出される。一方、撮像素子40の撮像可能な範囲内にマーカ6Rおよび6Lのいずれか一方が位置しない場合には、撮像素子40によって1つのマーカのみが撮像され、1つのマーカ座標のみが算出される。また、撮像素子40の撮像可能な範囲内にマーカ6Rおよび6Lの両方が位置しない場合には、撮像素子40によってマーカが撮像されず、マーカ座標は算出されない。したがって、マーカ座標データ65は、2つのマーカ座標を示す場合もあるし、1つのマーカ座標を示す場合もあるし、マーカ座標がないことを示す場合もある。
加速度データ1293は、加速度センサ37によって検出された加速度(加速度ベクトル)を示すデータである。ここでは、加速度データ1293は、図3に示すXYZの3軸の方向に関する加速度を各成分とする3次元の加速度ベクトルVa1を示す。また、本実施形態においては、コントローラ7が静止している状態で加速度センサ37が検出する加速度ベクトルVa1の大きさを"1"とする。つまり、加速度センサ37によって検出される重力加速度の大きさは"1"である。
カレントモード130は、現在のゲーム処理の状態が、上述したような通常モード、2Dモード、マーカ注目モード、および主観モードのいずれのモードであるかを示すためのデータである。
マーカ地点データ131は、上述のように2Dモードにおいてマーカ103が設定された仮想ゲーム空間内における位置、すなわち、マーカ地点を示すためのデータである。
プレイヤオブジェクト位置データ132は、仮想ゲーム空間内におけるプレイヤオブジェクト101の位置を示すためのデータである。
オブジェクトデータ134は、プレイヤオブジェクト101や敵オブジェクト201等、仮想ゲーム空間に配置される各種オブジェクトのデータである。
画像データ135は、上記マーカ103やカーソル106の画像等、ゲーム処理において用いられる各種画像のデータである。
次に、図32〜図37を参照して、ゲーム装置本体3によって実行されるゲーム処理について説明する。ゲーム装置本体3の電源が投入されると、ゲーム装置本体3のCPU10は、ROM/RTC13に記憶されている起動プログラムを実行し、これによってメインメモリ33等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムが外部メインメモリ12に読み込まれ、CPU10によって当該ゲームプログラムの実行が開始される。図32に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。また、図32に示すステップS2〜ステップS5の処理ループは、1フレーム毎に繰り返し実行される。
図32において、まず、CPU10は、初期化処理を実行する(ステップS1)。このステップS1の処理をより具体的に説明すると、まず、CPU10は、仮想ゲーム空間を構築し、プレイヤオブジェクト101等の各種オブジェクトを配置する。また、CPU10は、プレイヤオブジェクト位置データ132に、プレイヤオブジェクト101を配置した位置を設定する。更に、CPU10は、カレントモード130に「通常モード」を設定し、仮想カメラ制御用パラメータ133の注視点データ1333にプレイヤオブジェクト位置データ132で示される位置(つまり、プレイヤオブジェクト101の位置)を設定する。また、CPU10は、マーカ地点データ131に、所定の地点、ここでは、スタート地点の位置を示すデータを設定する。
次に、CPU10は、カレントモード130が「2Dモード」であるか否かを判定する(ステップS2)。当該判定の結果、
「2Dモード」ではないと判定されたときは(ステップS2でNO)、CPU10は、後述する通常モード処理を実行する(ステップS3)。ゲーム開始直後は、上記初期化処理で「通常モード」が設定されているため、当該判定で「2Dモード」ではないと判定されることになる。一方、当該判定の結果、「2Dモード」のときは(ステップS2でYES)、後述する2Dモード処理(ステップS4)に進む。
次に、CPU10は、ゲーム終了条件が満たされたか否か(プレイヤからゲーム終了のための指示がなされたか否か等)を判定する(ステップS5)。その結果、YESの場合、ゲーム処理を終了し、NOの場合、ステップS2に戻って、ゲーム処理を繰り返す。
次に、上記ステップS3の通常モード処理について説明する。図33は、上記ステップS3で示した通常モード処理の詳細を示すフローチャートである。図33において、まず、CPU10は、操作データ129を取得する(ステップS11)。次に、CPU10は、カレントモード130が「主観モード」か否かを判定する(ステップS12)。当該判定の結果、「主観モード」のときは(ステップS12でYES)、CPU10は、後述の主観モード処理を実行し(ステップS19)、その後、ステップS18の処理に進む。
一方、「主観モード」ではないときは(ステップS12でNO)、次に、CPU10は、操作データ129で示されるプレイヤの操作の内容がマーカ注目モードへの切替指示を示す内容(例えば、操作ボタン72iが押下されている状態)であるか否かを判定する(ステップS13)。当該判定の結果、マーカ注目モードへの切替指示を示す内容のときは(ステップS13でYES)、CPU10は、後述するマーカ注目処理を実行し(ステップS20)、その後、ステップS18の処理に進む。
一方、ステップS13の判定の結果、マーカ注目モードへの切替指示を示す内容ではないときは(ステップS13でNO)、次に、CPU10は、操作データ129で示されるプレイヤの操作の内容が2Dモードへの切替指示を示す内容であるか否かを判定する(ステップS14)。当該判定の結果、2Dモードへの切替指示を示す内容のときは(ステップS14でYES)、CPU10は、カレントモード130に「2Dモード」を設定する(ステップS21)。続いて、CPU10は、図13等で示したような、仮想ゲーム空間を鳥瞰した画像を生成する(ステップS22)。その後、後述のステップS18の処理へ進む。
一方、ステップS14の判定の結果、2Dモードへの切替指示を示す内容ではないときは(ステップS14でNO)、次に、CPU10は、操作データ129で示されるプレイヤの操作の内容がポインタロック指示を示す内容(例えば、操作ボタン72dの押下)であるか否かを判定する(ステップS15)。当該判定の結果、ポインタロック指示を示す内容の時は(ステップS15でYES)、CPU10は、後述のポインタロック処理を実行し(ステップS23)、その後、ステップS18の処理に進む。
一方、ステップS15の判定の結果、ポインタロック指示ではないときは(ステップS15でNO)、次に、CPU10は、操作データ129で示される操作内容に基づいて、所定のゲーム処理を実行する(ステップS16)。つまり、通常モードにおけるゲーム処理、例えば、プレイヤオブジェクト101の移動やジャンプ等のゲーム処理が実行される。また、カーソル106の表示位置の制御等も実行される。このとき、プレイヤオブジェクト101の位置に応じてプレイヤオブジェクト位置データ132も更新される。
続いて、CPU10は、図12を用いて上述したような客観カメラ制御処理を実行する(ステップS17)。すなわち、プレイヤオブジェクト101の全身がゲーム画面内に表示されるように仮想カメラ制御用パラメータ133を適宜設定する。
次に、CPU10は、描画処理を実行する(ステップS18)。すなわち、仮想カメラで仮想ゲーム空間を撮影した画像をゲーム画像としてテレビ2に表示する処理が実行される。以上で、通常モード処理が終了する。
次に、図32のステップS4で示した2Dモード処理について説明する。この処理では、図13等を用いて上述したような2Dモードにおける処理が実行される。本処理は、上記通常モード処理において2Dモードへの切替指示が行われたと判定されたときに実行される。図34は、上記ステップS4で示した2Dモード処理の詳細を示すフローチャートである。図34において、まず、CPU10は、操作データ129を取得する(ステップS31)。
次に、CPU10は、操作データ129の内容に基づいて、図14〜図16を用いて説明したようなマーカ103をセットする操作が行われたか否かを判定する(ステップS32)。すなわち、マーカ103がドラッグされている状態で、ドラッグ状態が解除されたか否かを判定する。当該判定の結果、マーカ103をセットする操作が行われたときは(ステップS32でYES)、次に、CPU10は、マーカ103がセットされた仮想ゲーム空間内の位置を示すデータ(例えば、座標データ)をマーカ地点データ131として外部メインメモリ12に記憶し(ステップS33)、2Dモード処理を終了する。
一方、ステップS32の判定の結果、マーカ102をセットする操作ではないときは(ステップS32でNO)、CPU10は、操作データ129で示される内容がマーカ注目モードへの切替指示であるか否かを判定する(ステップS34)。その結果、マーカ注目モードへの切替指示のときは(ステップS34でYES)、図26および図27を用いて上述したような、マーカ103(目印107)のセットされた地点が画面の上部に来るように画面を回転させる処理を実行する。すなわち、CPU10は、マーカ地点データ131を取得する。そして、CPU10は、当該データで示される仮想ゲーム空間内の地点が図26のxy座標軸におけるy軸正方向上の所定の位置であって、x軸上は画面の中心に来るような位置となるように画面を回転する。
一方、ステップS34の判定の結果、マーカ注目モードへの切替指示ではないときは(ステップS34でNO)、次に、CPU10は、操作データ129で示される内容が2Dモードの終了指示であるか否かを判定する(ステップS36)。その結果、2Dモードの終了指示のときは(ステップS36でYES)、カレントモード130に「通常モード」を設定する(ステップS37)。
一方、2Dモードの終了指示ではないときは(ステップS36でNO)、CPU10は、操作データ129で示される内容に基づいたゲーム処理(例えば、プレイヤオブジェクトの移動処理等)を実行する(ステップS38)。以上で、2Dモード処理が終了する。
次に、図33のステップS20で示したマーカ注目処理について説明する。この処理では、上記図17〜図24を用いて説明したマーカ注目モードにおける処理が実行される。図35は、上記ステップS20で示したマーカ注目処理の詳細を示すフローチャートである。図35において、まず、CPU10は、マーカ地点データ131を取得し(ステップS51)、続けて、プレイヤオブジェクト位置データ132を取得する(ステップS52)。
次に、CPU10は、上記ステップS51およびS52で取得したデータに基づいて、マーカ地点とプレイヤオブジェクトの位置とを結ぶ直線を算出する(ステップS53)。
次に、CPU10は、マーカ地点データ131で示される仮想ゲーム空間内の位置を注視点データ1333として設定することで、マーカ地点を仮想カメラの注視点として設定する(ステップS54)。なお、プレイヤが上記2Dモードでマーカをセットしていない場合は、上記初期化処理においてマーカ地点データ131に設定された所定の位置(上記の例ではスタート地点)が注視点として設定されることになる。
次に、CPU10は、仮想カメラの位置の設定を行う(ステップS55)。具体的には、上記ステップS53で算出された直線をプレイヤオブジェクト側に延長した延長線上の所定の位置(プレイヤオブジェクト101の全身が撮影できるような位置)を算出し、当該位置を示すデータを仮想カメラ位置データ1331として設定する。
次に、CPU10は、ステップS11で取得した操作データ129の内容に基づいて、所定のゲーム処理を実行する(ステップS56)。例えば、プレイヤオブジェクト101の移動処理等を実行する。なお、本ゲームでは、マーカ注目モードは、操作ボタン72iが押下され続けている間、実行されるため、ここでのプレイヤの操作は、操作ボタン72iを押下したまま、他の操作ボタンを操作するような状態となる。以上で、マーカ注目処理は終了する。このような処理を行うことで、マーカ103が設定された地点(プレイヤがマーカ103をセットしていないときは、上記初期化処理で設定された所定の地点)に仮想カメラが常に向いている状態のゲーム画面を表示することが可能となる。
次に、上記図33のステップS15で示したポインタロック処理について説明する。この処理では、上記ポインタロック操作が行われたときに、上記主観モードに切り替えるか否かの判定等が実行される。図36は、上記ステップS15で示したポインタロック処理の詳細を示すフローチャートである。図36において、まず、CPU10は、カーソル106(図28参照)の表示位置が、攻撃対象となり得るように予め設定されている所定のオブジェクト(例えば、図28の敵オブジェクト201)の表示位置と重なっているか否かを判定する(ステップS61)。当該判定の結果、カーソル106がいずれの上記所定のオブジェクトに重なっていないときは(ステップS61でNO)、CPU10は、ポインタロック処理を終了する。
一方、カーソル106がいずれの上記所定のオブジェクトと重なっているときは(ステップS61でYES)、CPU10は、カレントモード130に「主観モード」を設定する(ステップS62)。
次に、CPU10は、上記カーソル106が重なっているオブジェクトをロックオンするための処理を実行する(ステップS63)。例えば、当該オブジェクトのパラメータとして予め用意されているロックオンフラグ(図示せず)にオンを設定する等の処理が考えられる。本処理でロックオンされたオブジェクトについては、例えばプレイヤオブジェクト101に攻撃動作を行わせると、自動的に当該ロックオンされたオブジェクトを目掛けて剣オブジェクトが振り下ろされるような制御が実行されることになる。
次に、CPU10は、上記ロックオン設定を行ったオブジェクトの位置を仮想カメラの注視点として設定する(ステップS64)。具体的には、注視点データ1333に、当該ロックオン設定されたオブジェクトの位置を設定する。
次に、CPU10は、主観カメラ制御処理を実行する(ステップS65)。具体的には、CPU10は、仮想カメラ位置データ1331にプレイヤオブジェクト101の目の位置を設定する。また、画角データ1332についても適宜設定する。注視点データ1333については上記ステップS64において設定されているため、このようにして設定された仮想カメラで仮想ゲーム空間を撮影することで、上記図29で示したようなゲーム画像を生成することが可能となる。以上で、ポインタロック処理は終了する。
次に、上記ステップS19で示した主観モード処理について説明する。本処理では、上記主観モードにおける処理が実行される。図37は、上記ステップS19で示した主観モード処理の詳細を示すフローチャートである。図37において、まず、CPU10は、上記図33のステップS11で取得された操作データ129の内容が主観モードの終了指示であるか、または、ポインタロック処理においてロックオンされたオブジェクトを倒したか(例えば、当該オブジェクトに予め設定されていたヒットポイントがプレイヤオブジェクトの攻撃動作によって減少した結果、0となったか)を判定する(ステップS71)。当該判定の結果、上記の条件が満たされていないときは(ステップS71でNO)、CPU10は、操作データ129の内容に基づいて所定のゲーム処理、例えば、ロックオンしたオブジェクトを攻撃する等の処理を実行する(ステップS72)。
次に、CPU10は、主観カメラ制御処理を実行する(ステップS73)。本処理の内容は、上記図36のステップS65の処理と同様であるため、説明は省略する。
一方、上記ステップS71の判定の結果、主観モードの終了指示が出されているとき、または、ロックオンしたオブジェクトを倒したときは(ステップS71でYES)、CPU10は、主観モードを終了するための処理を実行する。すなわち、CPU10は、カレントモード130に「通常モード」を設定する(ステップS74)。続いて、CPU10は、ロックオン設定の解除を実行する(ステップS75)。例えば、上記ロックオンフラグをオフに設定することが考えられる。
次に、CPU10は、注視点データ1333にプレイヤオブジェクト101の位置を設定する(ステップS76)。次に、CPU10は、客観カメラ制御処理を実行する(ステップS77)。すなわち、上記図10等で示したような、プレイヤオブジェクト101の全身がゲーム画面に表示されるようなカメラ制御を実行する。本処理は、上記図33のステップS17で示した処理を同様であるため、詳細な説明は省略する。以上で、主観モード処理は終了する。
このように、本実施形態では、上記2Dモードを利用して仮想ゲーム空間内の任意の地点にマーカ103をセットすることができ、ゲーム処理中に所定の操作を行うことで、仮想カメラをマーカ地点に向けることができる。これにより、プレイヤが自ら設定した仮想ゲーム空間内の任意の地点がどの方向にあるのかをプレイヤに瞬時に把握させやすくすることができる。また、当該マーカ103をセットした地点とプレイヤオブジェクトの位置と仮想カメラの位置が一直線上に存在する関係(つまり、プレイヤオブジェクト101が仮想カメラの撮影範囲に含まれている)となるため、プレイヤから見て奥行き方向にプレイヤオブジェクトを移動させる操作を行わせるだけで、上記マーカをセットした地点に向けて移動させることが可能となる。これにより、操作性を高めることも可能となる。
また、上記ポインタロックのように、攻撃対象とするような所定のオブジェクトに注目する仮想カメラ制御と上記マーカ地点に注目するカメラ制御を併用しているため、3次元仮想空間を舞台にしたゲームにおいて、ゲーム中の場面に応じてプレイヤにとって見やすいゲーム画面を提供することが可能となる。
また、マーカ地点注目モードに関しては、上記のように、操作ボタン72dが押下され続けている間に、上記マーカ注目制御による仮想カメラの制御が行われている。これにより、プレイヤに、マーカ地点の注目前後での方向の対比、すなわち、プレイヤオブジェクトが向いている方向とマーカ地点のある方向との対比を容易にさせることができ、仮想ゲーム空間内におけるプレイヤオブジェクト101の位置関係を容易に把握させることができる。
なお、上述の実施形態では、マーカ103を一つだけ利用した場合を例としていたが、複数のマーカを利用できるようにしても良い。例えば、上記2Dモードにおける鳥瞰画面において、図38に示すように、マーカ103を複数表示し(マーカ103a〜103c)、各マーカに対応する複数のマーカ地点データ131を用意しても良い。図38では、各マーカの画像として1〜3の番号が付された画像が表示され、これらの番号で各マーカを識別することが可能となっている、更に、この場合、複数のマーカ地点データ131のうちのいずれか一つを選択し、外部メインメモリ12に、当該選択されているマーカを示すための情報を記憶させる。そして、通常モードのゲーム画面において、現在選択されているマーカを示す情報を表示するようにしてもよい。例えば、図39に示すように、通常モードにおけるゲーム画面の右上隅に、現在選択されているマーカを示す情報ウィンドウ210を示すようにすればよい。図39では、現在は2番のマーカが選択されており、この状態でマーカ注目モードへの切替操作を行うと、2番のマーカが設定されたマーカ地点に仮想カメラが向けられることになる。つまり、図39に示す状態は、2番のマーカが選択されている状態である。
また、上記図39のような画面において、所定の操作を行うことで、選択されているマーカ地点データを切り替え可能にしてもよい。すなわち、図39の画面でマーカ切替のための所定の操作を行うことで、上記複数のマーカ地点データのうちの一つを所定の順序で選択することを可能とすればよい。そして、当該操作に応じて、情報ウィンドウ210内のマーカ画像が上記所定の順序に沿って、例えば、1番→2番→3番→1番・・・のように順に切り替わって表示されるようにすればよい。もちろん、複数のマーカ画像を通常モード時のゲーム画面上に全て表示するようにしても良い。その上で、任意のマーカ画像を選択できるようにしても良い。
また、上記複数のマーカ地点データを、入力装置で入力可能な操作のいずれかと1対1で対応づけて、1度の操作(ワン・アクション)だけでマーカ地点を選択可能としてもよい。例えば、上述の3つのマーカ地点をそれぞれ、十字キー72aの上(前)、右、左と対応付け、プレイヤが十字キー72aの右部分を押下するだけで、2番目のマーカ地点が選択されるようにしてもよい。
また、上記実施形態では、上記マーカ注目モードにおける仮想カメラの位置として、マーカ地点とプレイヤオブジェクト101を結ぶ直線109を延長した直線上に仮想カメラが配置される場合を例に挙げた。仮想カメラの位置については、これに限らず、当該直線の近傍に配置するようにしても良い(図40参照)。例えば、仮想カメラがプレイヤオブジェクト101を少し遅れて追いかける「追尾カメラ」のような仮想カメラ制御を行う場合に、マーカ注目モードに切り替わった直後は、上記直線の近傍に仮想カメラを配置し、徐々に当該直線上に位置するよう移動させる制御を行っても良い。
また、上記実施形態では、マーカ注目モードおよび通常モードにおいては、プレイヤキャラクタ101の全身が表示されるような位置に仮想カメラを配置していたが、これに限らず、プレイヤオブジェクト101の一部のみがゲーム画面に表示されるような制御を行っても良い。換言すれば、プレイヤオブジェクトの少なくとも一部がゲーム画面に表示されるような仮想カメラの制御を行っても良い。