以下、本実施形態の一例に係るゲームシステムについて説明する。本実施形態におけるゲームシステム1の一例は、本体装置(情報処理装置;本実施形態ではゲーム装置本体として機能する)2と左コントローラ3および右コントローラ4とを含む。本体装置2は、左コントローラ3および右コントローラ4がそれぞれ着脱可能である。つまり、ゲームシステム1は、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置として利用できる。また、ゲームシステム1は、本体装置2と左コントローラ3および右コントローラ4とを別体として利用することもできる(図2参照)。以下では、本実施形態のゲームシステム1のハードウェア構成について説明し、その後に本実施形態のゲームシステム1の制御について説明する。
図1は、本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図である。図1に示すように、左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、ゲームシステム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、ディスプレイ12を備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための操作部を備える装置である。
図2は、本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図である。図1および図2に示すように、左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。
図3は、本体装置2の一例を示す六面図である。図3に示すように、本体装置2は、略板状のハウジング11を備える。本実施形態において、ハウジング11の主面(換言すれば、表側の面、すなわち、ディスプレイ12が設けられる面)は、大略的には矩形形状である。
なお、ハウジング11の形状および大きさは、任意である。一例として、ハウジング11は、携帯可能な大きさであってよい。また、本体装置2単体または本体装置2に左コントローラ3および右コントローラ4が装着された一体型装置は、携帯型装置となってもよい。また、本体装置2または一体型装置が手持ち型の装置となってもよい。また、本体装置2または一体型装置が可搬型装置となってもよい。
図3に示すように、本体装置2は、ハウジング11の主面に設けられるディスプレイ12を備える。ディスプレイ12は、本体装置2が生成した画像を表示する。本実施形態においては、ディスプレイ12は、液晶表示装置(LCD)とする。ただし、ディスプレイ12は任意の種類の表示装置であってよい。
また、本体装置2は、ディスプレイ12の画面上にタッチパネル13を備える。本実施形態においては、タッチパネル13は、マルチタッチ入力が可能な方式(例えば、静電容量方式)のものである。ただし、タッチパネル13は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式(例えば、抵抗膜方式)のものであってもよい。
本体装置2は、ハウジング11の内部においてスピーカ(すなわち、図6に示すスピーカ88)を備えている。図3に示すように、ハウジング11の主面には、スピーカ孔11aおよび11bが形成される。そして、スピーカ88の出力音は、これらのスピーカ孔11aおよび11bからそれぞれ出力される。
また、本体装置2は、本体装置2が左コントローラ3と有線通信を行うための端子である左側端子17と、本体装置2が右コントローラ4と有線通信を行うための右側端子21を備える。
図3に示すように、本体装置2は、スロット23を備える。スロット23は、ハウジング11の上側面に設けられる。スロット23は、所定の種類の記憶媒体を装着可能な形状を有する。所定の種類の記憶媒体は、例えば、ゲームシステム1およびそれと同種の情報処理装置に専用の記憶媒体(例えば、専用メモリカード)である。所定の種類の記憶媒体は、例えば、本体装置2で利用されるデータ(例えば、アプリケーションのセーブデータ等)、および/または、本体装置2で実行されるプログラム(例えば、アプリケーションのプログラム等)を記憶するために用いられる。また、本体装置2は、電源ボタン28を備える。
本体装置2は、下側端子27を備える。下側端子27は、本体装置2がクレードルと通信を行うための端子である。本実施形態において、下側端子27は、USBコネクタ(より具体的には、メス側コネクタ)である。上記一体型装置または本体装置2単体をクレードルに載置した場合、ゲームシステム1は、本体装置2が生成して出力する画像を据置型モニタに表示することができる。また、本実施形態においては、クレードルは、載置された上記一体型装置または本体装置2単体を充電する機能を有する。また、クレードルは、ハブ装置(具体的には、USBハブ)の機能を有する。
図4は、左コントローラ3の一例を示す六面図である。図4に示すように、左コントローラ3は、ハウジング31を備える。本実施形態においては、ハウジング31は、縦長の形状、すなわち、上下方向(すなわち、図1および図4に示すy軸方向)に長い形状である。左コントローラ3は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング31は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、左コントローラ3は、横長となる向きで把持されることも可能である。左コントローラ3が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
左コントローラ3は、アナログスティック32を備える。図4に示すように、アナログスティック32は、ハウジング31の主面に設けられる。アナログスティック32は、方向を入力することが可能な方向入力部として用いることができる。ユーザは、アナログスティック32を傾倒することによって傾倒方向に応じた方向の入力(および、傾倒した角度に応じた大きさの入力)が可能である。なお、左コントローラ3は、方向入力部として、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、本実施形態においては、アナログスティック32を押下する入力が可能である。
左コントローラ3は、各種操作ボタンを備える。左コントローラ3は、ハウジング31の主面上に4つの操作ボタン33〜36(具体的には、右方向ボタン33、下方向ボタン34、上方向ボタン35、および左方向ボタン36)を備える。さらに、左コントローラ3は、録画ボタン37および−(マイナス)ボタン47を備える。左コントローラ3は、ハウジング31の側面の左上に第1Lボタン38およびZLボタン39を備える。また、左コントローラ3は、ハウジング31の側面の、本体装置2に装着される際に装着される側の面に第2Lボタン43および第2Rボタン44を備える。これらの操作ボタンは、本体装置2で実行される各種プログラム(例えば、OSプログラムやアプリケーションプログラム)に応じた指示を行うために用いられる。
また、左コントローラ3は、左コントローラ3が本体装置2と有線通信を行うための端子42を備える。
図5は、右コントローラ4の一例を示す六面図である。図5に示すように、右コントローラ4は、ハウジング51を備える。本実施形態においては、ハウジング51は、縦長の形状、すなわち、上下方向に長い形状である。右コントローラ4は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング51は、縦長となる向きで把持される場合に片手、特に右手で把持可能な形状および大きさをしている。また、右コントローラ4は、横長となる向きで把持されることも可能である。右コントローラ4が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
右コントローラ4は、左コントローラ3と同様、方向入力部としてアナログスティック52を備える。本実施形態においては、アナログスティック52は、左コントローラ3のアナログスティック32と同じ構成である。また、右コントローラ4は、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、右コントローラ4は、左コントローラ3と同様、ハウジング51の主面上に4つの操作ボタン53〜56(具体的には、Aボタン53、Bボタン54、Xボタン55、およびYボタン56)を備える。さらに、右コントローラ4は、+(プラス)ボタン57およびホームボタン58を備える。また、右コントローラ4は、ハウジング51の側面の右上に第1Rボタン60およびZRボタン61を備える。また、右コントローラ4は、左コントローラ3と同様、第2Lボタン65および第2Rボタン66を備える。
また、右コントローラ4は、右コントローラ4が本体装置2と有線通信を行うための端子64を備える。
図6は、本体装置2の内部構成の一例を示すブロック図である。本体装置2は、図3に示す構成の他、図6に示す各構成要素81〜91、97、および98を備える。これらの構成要素81〜91、97、および98のいくつかは、電子部品として電子回路基板上に実装されてハウジング11内に収納されてもよい。
本体装置2は、プロセッサ81を備える。プロセッサ81は、本体装置2において実行される各種の情報処理を実行する情報処理部であって、例えば、CPU(Central Processing Unit)のみから構成されてもよいし、CPU機能、GPU(Graphics Processing Unit)機能等の複数の機能を含むSoC(System−on−a−chip)から構成されてもよい。プロセッサ81は、記憶部(具体的には、フラッシュメモリ84等の内部記憶媒体、あるいは、スロット23に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ84およびDRAM(Dynamic Random Access Memory)85を備える。フラッシュメモリ84およびDRAM85は、プロセッサ81に接続される。フラッシュメモリ84は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM85は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
本体装置2は、スロットインターフェース(以下、「I/F」と略記する。)91を備える。スロットI/F91は、プロセッサ81に接続される。スロットI/F91は、スロット23に接続され、スロット23に装着された所定の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、プロセッサ81の指示に応じて行う。
プロセッサ81は、フラッシュメモリ84およびDRAM85、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
本体装置2は、ネットワーク通信部82を備える。ネットワーク通信部82は、プロセッサ81に接続される。ネットワーク通信部82は、ネットワークを介して外部の装置と通信(具体的には、無線通信)を行う。本実施形態においては、ネットワーク通信部82は、第1の通信態様としてWi−Fiの規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部82は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。なお、上記第2の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置2との間で無線通信可能であり、複数の本体装置2の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
本体装置2は、コントローラ通信部83を備える。コントローラ通信部83は、プロセッサ81に接続される。コントローラ通信部83は、左コントローラ3および/または右コントローラ4と無線通信を行う。本体装置2と左コントローラ3および右コントローラ4との通信方式は任意であるが、本実施形態においては、コントローラ通信部83は、左コントローラ3との間および右コントローラ4との間で、Bluetooth(登録商標)の規格に従った通信を行う。
プロセッサ81は、上述の左側端子17、右側端子21、および下側端子27に接続される。プロセッサ81は、左コントローラ3と有線通信を行う場合、左側端子17を介して左コントローラ3へデータを送信するとともに、左側端子17を介して左コントローラ3から操作データを受信する。また、プロセッサ81は、右コントローラ4と有線通信を行う場合、右側端子21を介して右コントローラ4へデータを送信するとともに、右側端子21を介して右コントローラ4から操作データを受信する。また、プロセッサ81は、クレードルと通信を行う場合、下側端子27を介してクレードルへデータを送信する。このように、本実施形態においては、本体装置2は、左コントローラ3および右コントローラ4との間で、それぞれ有線通信と無線通信との両方を行うことができる。また、左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置または本体装置2単体がクレードルに装着された場合、本体装置2は、クレードルを介してデータ(例えば、画像データや音声データ)を据置型モニタ等に出力することができる。
ここで、本体装置2は、複数の左コントローラ3と同時に(換言すれば、並行して)通信を行うことができる。また、本体装置2は、複数の右コントローラ4と同時に(換言すれば、並行して)通信を行うことができる。したがって、複数のユーザは、左コントローラ3および右コントローラ4のセットをそれぞれ用いて、本体装置2に対する入力を同時に行うことができる。一例として、第1ユーザが左コントローラ3および右コントローラ4の第1セットを用いて本体装置2に対して入力を行うと同時に、第2ユーザが左コントローラ3および右コントローラ4の第2セットを用いて本体装置2に対して入力を行うことが可能となる。
本体装置2は、タッチパネル13の制御を行う回路であるタッチパネルコントローラ86を備える。タッチパネルコントローラ86は、タッチパネル13とプロセッサ81との間に接続される。タッチパネルコントローラ86は、タッチパネル13からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、プロセッサ81へ出力する。
また、ディスプレイ12は、プロセッサ81に接続される。プロセッサ81は、(例えば、上記の情報処理の実行によって)生成した画像および/または外部から取得した画像をディスプレイ12に表示する。
本体装置2は、コーデック回路87およびスピーカ(具体的には、左スピーカおよび右スピーカ)88を備える。コーデック回路87は、スピーカ88および音声入出力端子25に接続されるとともに、プロセッサ81に接続される。コーデック回路87は、スピーカ88および音声入出力端子25に対する音声データの入出力を制御する回路である。
また、本体装置2は、加速度センサ89を備える。本実施形態においては、加速度センサ89は、所定の3軸(例えば、図1に示すxyz軸)方向に沿った加速度の大きさを検出する。なお、加速度センサ89は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。
また、本体装置2は、角速度センサ90を備える。本実施形態においては、角速度センサ90は、所定の3軸(例えば、図1に示すxyz軸)回りの角速度を検出する。なお、角速度センサ90は、1軸回りあるいは2軸回りの角速度を検出するものであってもよい。
加速度センサ89および角速度センサ90は、プロセッサ81に接続され、加速度センサ89および角速度センサ90の検出結果は、プロセッサ81へ出力される。プロセッサ81は、上記の加速度センサ89および角速度センサ90の検出結果に基づいて、本体装置2の動きおよび/または姿勢に関する情報を算出することが可能である。
本体装置2は、電力制御部97およびバッテリ98を備える。電力制御部97は、バッテリ98およびプロセッサ81に接続される。また、図示しないが、電力制御部97は、本体装置2の各部(具体的には、バッテリ98の電力の給電を受ける各部、左側端子17、および右側端子21)に接続される。電力制御部97は、プロセッサ81からの指令に基づいて、バッテリ98から上記各部への電力供給を制御する。
また、バッテリ98は、下側端子27に接続される。外部の充電装置(例えば、クレードル)が下側端子27に接続され、下側端子27を介して本体装置2に電力が供給される場合、供給された電力がバッテリ98に充電される。
図7は、本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図である。なお、本体装置2に関する内部構成の詳細については、図6で示しているため図7では省略している。
左コントローラ3は、本体装置2との間で通信を行う通信制御部101を備える。図7に示すように、通信制御部101は、端子42を含む各構成要素に接続される。本実施形態においては、通信制御部101は、端子42を介した有線通信と、端子42を介さない無線通信との両方で本体装置2と通信を行うことが可能である。通信制御部101は、左コントローラ3が本体装置2に対して行う通信方法を制御する。すなわち、左コントローラ3が本体装置2に装着されている場合、通信制御部101は、端子42を介して本体装置2と通信を行う。また、左コントローラ3が本体装置2から外されている場合、通信制御部101は、本体装置2(具体的には、コントローラ通信部83)との間で無線通信を行う。コントローラ通信部83と通信制御部101との間の無線通信は、例えばBluetooth(登録商標)の規格に従って行われる。
また、左コントローラ3は、例えばフラッシュメモリ等のメモリ102を備える。通信制御部101は、例えばマイコン(マイクロプロセッサとも言う)で構成され、メモリ102に記憶されるファームウェアを実行することによって各種の処理を実行する。
左コントローラ3は、各ボタン103(具体的には、ボタン33〜39、43、44、および47)を備える。また、左コントローラ3は、アナログスティック(図7では「スティック」と記載する)32を備える。各ボタン103およびアナログスティック32は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部101へ出力する。
左コントローラ3は、慣性センサを備える。具体的には、左コントローラ3は、加速度センサ104を備える。また、左コントローラ3は、角速度センサ105を備える。本実施形態においては、加速度センサ104は、所定の3軸(例えば、図4に示すxyz軸)方向に沿った加速度の大きさを検出する。なお、加速度センサ104は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。本実施形態においては、角速度センサ105は、所定の3軸(例えば、図4に示すxyz軸)回りの角速度を検出する。なお、角速度センサ105は、1軸回りあるいは2軸回りの角速度を検出するものであってもよい。加速度センサ104および角速度センサ105は、それぞれ通信制御部101に接続される。そして、加速度センサ104および角速度センサ105の検出結果は、適宜のタイミングで繰り返し通信制御部101へ出力される。なお、加速度センサ104および角速度センサ105がコントローラに備えられる慣性センサの一例に相当する。
通信制御部101は、各入力部(具体的には、各ボタン103、アナログスティック32、各センサ104および105)から、入力に関する情報(具体的には、操作に関する情報、またはセンサによる検出結果)を取得する。通信制御部101は、取得した情報(または取得した情報に所定の加工を行った情報)を含む操作データを本体装置2へ送信する。なお、操作データは、所定時間に1回の割合で繰り返し送信される。なお、入力に関する情報が本体装置2へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
上記操作データが本体装置2へ送信されることによって、本体装置2は、左コントローラ3に対して行われた入力を得ることができる。すなわち、本体装置2は、各ボタン103およびアナログスティック32に対する操作を、操作データに基づいて判別することができる。また、本体装置2は、左コントローラ3の動きおよび/または姿勢に関する情報を、操作データ(具体的には、加速度センサ104および角速度センサ105の検出結果)に基づいて算出することができる。
左コントローラ3は、振動によってユーザに通知を行うための振動子107を備える。本実施形態においては、振動子107は、本体装置2からの指令によって制御される。すなわち、通信制御部101は、本体装置2からの上記指令を受け取ると、当該指令に従って振動子107を駆動させる。ここで、左コントローラ3は、コーデック部106を備える。通信制御部101は、上記指令を受け取ると、指令に応じた制御信号をコーデック部106へ出力する。コーデック部106は、通信制御部101からの制御信号から振動子107を駆動させるための駆動信号を生成して振動子107へ与える。これによって振動子107が動作する。
振動子107は、より具体的にはリニア振動モータである。リニア振動モータは、回転運動をする通常のモータと異なり、入力される電圧に応じて所定方向に駆動されるため、入力される電圧の波形に応じた振幅および周波数で振動をさせることができる。本実施形態において、本体装置2から左コントローラ3に送信される振動制御信号は、単位時間ごとに周波数と振幅とを表すデジタル信号であってよい。別の実施形態においては、本体装置2から波形そのものを示す情報を送信するようにしてもよいが、振幅および周波数だけを送信することで通信データ量を削減することができる。また、さらにデータ量を削減するため、そのときの振幅および周波数の数値に替えて、前回の値からの差分だけを送信するようにしてもよい。この場合、コーデック部106は、通信制御部101から取得される振幅および周波数の値を示すデジタル信号をアナログの電圧の波形に変換し、当該波形に合わせて電圧を入力することで振動子107を駆動させる。したがって、本体装置2は、単位時間ごとに送信する振幅および周波数を変えることによって、そのときに振動子107を振動させる振幅および周波数を制御することができる。なお、本体装置2から左コントローラ3に送信される振幅および周波数は、1つに限らず、2つ以上送信するようにしてもよい。その場合、コーデック部106は、受信された複数の振幅および周波数それぞれが示す波形を合成することで、振動子107を制御する電圧の波形を生成することができる。
左コントローラ3は、電力供給部108を備える。本実施形態において、電力供給部108は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ3の各部(具体的には、バッテリの電力の給電を受ける各部)に接続される。
図7に示すように、右コントローラ4は、本体装置2との間で通信を行う通信制御部111を備える。また、右コントローラ4は、通信制御部111に接続されるメモリ112を備える。通信制御部111は、端子64を含む各構成要素に接続される。通信制御部111およびメモリ112は、左コントローラ3の通信制御部101およびメモリ102と同様の機能を有する。したがって、通信制御部111は、端子64を介した有線通信と、端子64を介さない無線通信(具体的には、Bluetooth(登録商標)の規格に従った通信)との両方で本体装置2と通信を行うことが可能であり、右コントローラ4が本体装置2に対して行う通信方法を制御する。
右コントローラ4は、左コントローラ3の各入力部と同様の各入力部を備える。具体的には、各ボタン113、アナログスティック52、慣性センサ(加速度センサ114および角速度センサ115)を備える。これらの各入力部については、左コントローラ3の各入力部と同様の機能を有し、同様に動作する。なお、加速度センサ114および角速度センサ115がコントローラに備えられる慣性センサの他の例に相当する。
また、右コントローラ4は、振動子117およびコーデック部116を備える。振動子117およびコーデック部116は、左コントローラ3の振動子107およびコーデック部106と同様に動作する。すなわち、通信制御部111は、本体装置2からの指令に従って、コーデック部116を用いて振動子117を動作させる。
右コントローラ4は、電力供給部118を備える。電力供給部118は、左コントローラ3の電力供給部108と同様の機能を有し、同様に動作する。
以上に説明したように、本実施形態におけるゲームシステム1については左コントローラ3および右コントローラ4が本体装置2から着脱可能である。また、クレードルに左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置や本体装置2単体を装着することによって据置型モニタ6に画像(および音声)を出力可能である。以下、左コントローラ3および右コントローラ4を本体装置2から取り外した状態で、クレードルに本体装置2単体を装着することによって据置型モニタ6に画像(および音声)を出力する利用態様におけるゲームシステムを用いて説明する。
上述のように、本実施形態においては、左コントローラ3および右コントローラ4を本体装置2から外した状態(「離脱状態」と呼ぶ)でゲームシステム1を利用することも可能である。離脱状態でゲームシステム1を利用してアプリケーション(例えば、ゲームアプリケーション)に対する操作を行う場合の態様としては、2人のユーザが左コントローラ3および右コントローラ4をそれぞれ用いる態様が考えられる。また、3人以上のユーザが同じアプリケーションを用いて操作する場合は、左コントローラ3および右コントローラ4の組を複数組用意して、それぞれのユーザが左コントローラ3および右コントローラ4のいずれか1つを用いる態様等が考えられる。また、複数のユーザが操作を行う他の態様としては、それぞれのユーザが左コントローラ3および右コントローラ4の両方を1人で用いる態様が考えられる。この場合、左コントローラ3および右コントローラ4の組を複数組用意して、それぞれのユーザが当該複数組のうちの1組を用いる態様等が考えられる。
図8〜図14は、離脱状態において、2人のユーザが左コントローラ3および右コントローラ4をそれぞれ操作してゲームシステム1を利用する様子の一例を示す図である。図8〜図14に示すように、離脱状態において、第1のユーザが左コントローラ3を両手で把持し、第2のユーザが右コントローラ4を両手で把持してそれぞれ操作を行いながら、据置型モニタ6に表示された画像を見ることができる。
例えば、本実施例では、第1のユーザは、縦長の略板状である左コントローラ3の長手方向の横方向(図1に示す下方向(y軸負方向))が水平方向になるとともに、本体装置2に装着された際に当該本体装置2と接する側面(スライダ40が設けられている側面)が前方に向き、かつ、左コントローラ3の主面(アナログスティック32等が設けられる面)が上に向くように左コントローラ3を両手で把持する。つまり、第1のユーザの両手によって把持されている左コントローラ3は、x軸負方向がユーザの前方を向き、z軸正方向が上を向いた状態となる。また、第2のユーザは、縦長の略板状である右コントローラ4の長手方向の横方向(図1に示す上下方向(y軸負方向))が水平方向になるとともに、本体装置2に装着された際に当該本体装置2と接する側面(スライダ62が設けられている側面)が前方に向き、かつ、右コントローラ4の主面(アナログスティック52等が設けられる面)が上に向くように右コントローラ4を両手で把持する。つまり、第2のユーザの両手によって把持されている右コントローラ4は、x軸正方向がユーザの前方を向き、z軸正方向が上を向いた状態となる。
このように、両手で把持された左コントローラ3または右コントローラ4の各操作ボタンやスティックを操作することに応じて、ゲームプレイが行われる。また、両手で左コントローラ3または右コントローラ4を把持した状態(以下、このような操作方式を横持ち操作方式と記載することがある)から、各コントローラを上下左右前後に動かしたり、各コントローラを回転させたり、各コントローラを振り動かしたりすることによって、各コントローラの動きや姿勢に応じてゲームプレイが行われる。そして、上記ゲームプレイにおいて、左コントローラ3の加速度センサ104は、上記xyz軸方向の加速度をそれぞれ操作入力として検出可能であり、角速度センサ105は、上記xyz軸方向周りの角速度をそれぞれ操作入力として検出可能である。また、右コントローラ4の加速度センサ114は、上記xyz軸方向の加速度をそれぞれ操作入力として検出可能であり、角速度センサ115は、上記xyz軸方向周りの角速度をそれぞれ操作入力として検出可能である。
また、左コントローラ3および/または右コントローラ4を把持してゲームプレイする場合、当該ゲーム状況に応じて、左コントローラ3および/または右コントローラ4に振動が与えられる。上述したように、左コントローラ3は、振動子107を有しており、右コントローラ4は、振動子117を有している。本体装置2のプロセッサ81は、実行しているゲーム状況に応じて振動データを左コントローラ3および/または右コントローラ4に送信することによって、当該振動データに応じた振幅および周波数で振動子107および/または振動子117を振動させることができる。
図8〜図14は、左コントローラ3または右コントローラ4を操作してプレイするゲームにおいて表示されるゲーム画像例を示している。本ゲーム例では、複数のユーザからなるチームを少なくとも1つ含むチーム編成を設定し、当該チームに属するユーザが協力してゲームプレイされる。例えば、図8に示すように、本ゲーム例では、複数のキャラクタ(図8の例では、2つのプレイヤキャラクタPC1およびPC2と2つの非プレイヤキャラクタNPC1およびNPC2)が協力して制限時間以内にゴールすることを目的とするメインゲーム(例えば、複数のキャラクタが乗船してゴールを目指すラフティングゲーム)の画像が据置型モニタ6に表示される。そして、左コントローラ3を操作する第1のユーザは、左コントローラ3本体を振り動かしたり、左コントローラ3本体の姿勢を変化させたり、アナログスティック32や操作ボタン33〜36を操作したりすることによって、第1のプレイヤキャラクタPC1を操作することができる。また、第1のユーザと同じチームに属する第2のユーザは、右コントローラ4を操作し、右コントローラ4本体を振り動かしたり、右コントローラ4本体の姿勢を変化させたり、アナログスティック52や操作ボタン53〜56を操作したりすることによって、第2のプレイヤキャラクタPC2を操作することができる。なお、第1の非プレイヤキャラクタNPC1および第2の非プレイヤキャラクタNPC2は、第1のユーザおよび第2のユーザのチームが操作するキャラクタチーム(すなわち、プレイヤキャラクタPC1およびPC2が属するキャラクタチーム)に属するが、コンピュータ(本体装置2のプロセッサ81)によってそれらの動作が自動的に制御される。なお、第2ゲームは、一例としてメインゲームに相当する。また、第1ゲームや第2ゲームに登場するユーザが操作するキャラクタは、一例としてプレイヤキャラクタPC1およびPC2に相当する。
また、上記メインゲームのゲーム画像には、当該メインゲームにおける制限時間、すなわち、ゴールするまでに許容される残り時間を示す残り時間通知画像Tが表示される。残り時間通知画像Tは、上記残り時間に応じた数値を示し、当該残り時間がカウントダウンされる様子が通知される。一例として、図8に示すメインゲーム画像例では、残り時間が45秒であることを示す残り時間通知画像Tが表示されている。
図9に示すように、上記メインゲームでは、複数のキャラクタが乗船しているラフト(船)がゴールに到達するまでのルート上における少なくとも1箇所の特定の位置には、アイテムIが配置されている。アイテムIは、プレイヤキャラクタPC1〜PC2および非プレイヤキャラクタNPC1〜NPC2や乗船しているラフトが接触して取得した場合、上記メインゲームとは別のサブゲームをユーザがプレイできる権利を与えるものである。上記メインゲーム中にアイテムIが取得された場合、当該アイテムIが取得されたことを契機として当該メインゲームを一旦中断して、当該メインゲームとは別のサブゲームが開始される。上記サブゲームは、上記メインゲームをプレイしていた複数のユーザが操作してプレイする少なくとも1つのミニゲームと、当該ミニゲームの結果に応じて行われる協調操作演出とによって構成されている。なお、第1ゲームは、一例としてミニゲームに相当する。
図10は、上記ミニゲームのゲーム画像例を示している。図10に示すように、上記メインゲームを中断して行われるミニゲームは、当該メインゲームをプレイしていたチームに属するユーザが当該チーム編成を継続しながら引き続きプレイすることができる。したがって、上記ミニゲームは、上記メインゲームをプレイしていた第1のユーザが引き続き左コントローラ3を操作し、当該メインゲームをプレイしていた第2のユーザが引き続き右コントローラ4を操作して、据置型モニタ6に表示された同じゲーム画像を用いてゲームプレイする。上記ミニゲームは、上記メインゲームをプレイしていたチームに属する複数のユーザが引き続いて協力してプレイ可能なゲームであればどのようなものでもよい。一例として、複数のユーザが操作するプレイヤキャラクタPCが順番にさいころを振ったりカードをめくったりするような単純なゲームであってもよいし、各種スポーツのプレイや各種スポーツの一場面を模したゲームであってもよい。また、上記ミニゲームは、上記メインゲームに登場していた複数のキャラクタ(例えば、2つのプレイヤキャラクタPC1〜PC2および非プレイヤキャラクタNPC1〜NPC2)の少なくとも1つが登場するゲームでもよいし、当該キャラクタが登場しないゲームであってもよい。また、上記ミニゲームは、上記メインゲームで用いられているゲームステージとは異なるゲームステージが用いられてもよいし、上記メインゲームで用いられているゲームステージと同じゲームステージが用いられてもよい。また、上記メインゲームが他のユーザチームと対決して操作するゲームである場合、上記ミニゲームも当該他のユーザチームと対決するゲームであってもよい。
なお、上記ミニゲームは、上記メインゲームをプレイしていたチームに属するユーザの少なくとも1人が参加する態様であってもよい。例えば、上記ミニゲームが上記メインゲームをプレイしていたチームに属するユーザの1人だけがプレイするものであっても、後述する協調操作演出も当該チームを対象として実行することが可能である。
図11に示すように、上記ミニゲームが終了した場合、据置型モニタ6に当該ミニゲームの結果が表示される。そして、上記ミニゲームの結果が好成績であった場合、中断しているメインゲームにおける有利な効果が付与される。ここで、上記ミニゲームの結果が好成績であった場合とは、当該ミニゲームにおいて閾値以上の成果(得点)が得られた場合や当該ミニゲームにおいて勝利した場合等が考えられる。また、メインゲームにおける有利な効果とは、メインゲームにおいて用いられるゲームパラメータを当該メインゲームの進行において有利になるように増減させるものであり、一例として上記メインゲームで設定されている残り時間を増加させることが考えられる。図11の例では、上記ミニゲームがAランクでクリアされたため、上記メインゲームの残り時間が30秒増えたことが通知されている。なお、上記ミニゲームの結果が好成績であった場合に付与される有利な効果は、上記メインゲームで用いられるゲームコインが増加するものでもよいし、上記メインゲームで用いられるアイテムを取得するものでもよいし、上記メインゲームに登場するキャラクタの能力が向上するものでもよいし、上記メインゲームの得点を加算するものであってもよい。また、上記ミニゲームの結果が好成績でなかった場合であっても、中断しているメインゲームにおける一定の有利な効果が付与されてもよい。
また、上記ミニゲームの結果が好成績であった場合、当該好成績であったユーザチームに属するユーザに対して、協調操作を促す通知が行われる。なお、協調操作を行う対象となるキャラクタチームに、コンピュータによって動作が制御される非プレイヤキャラクタが含まれている場合、当該キャラクタチームからコンピュータ制御の非プレイヤキャラクタを除いたプレイヤキャラクタを操作しているそれぞれのユーザが、協調操作を行う対象となることになる。ここで、協調操作を促す通知は、上記ミニゲームの結果が好成績であったユーザチームのユーザに左コントローラ3または右コントローラ4を用いた所定操作を促す通知であり、画像または音声の少なくとも一方によって行われる。例えば、図11の例では、ユーザが把持している左コントローラ3または右コントローラ4を前に突き出すように動かす操作が上記協調操作の操作内容であることを示す協調操作通知画像Nが据置型モニタ6に表示されている。また、上記ミニゲームにおいて好成績を上げて上記協調操作を行う対象となるキャラクタチームに属するキャラクタ(図11の例では、2つのプレイヤキャラクタPC1〜PC2および非プレイヤキャラクタNPC1〜NPC2)が表示される。なお、上記ミニゲームの結果が好成績でなかった場合であっても、当該好成績でなかったユーザチームに属するユーザに対して、協調操作を促す通知が行われてもよい。また、上記協調操作を行う対象を示す場合、当該協調操作を行う対象となるキャラクタチームに属するキャラクタを表示しなくてもよく、一例として好成績であったユーザチームに属するユーザ名が表示されてもよい。なお、第1通知は、一例として協調操作通知画像Nに相当する。
また、上記協調操作は、当該協調操作の対象となっている複数のユーザが同じタイミングで協調して操作することによって成立する。ここで、操作が上記同じタイミングで行われたことを判定する場合、後述する協調操作を行うことを促すための表示「イエーイ」の通知に重なるほぼ同じタイミングで操作が行われた場合に成立判定(相対的に厳しい判定)してもよいし、当該通知の前および/または後に設定された判定期間内で操作が行われた場合に成立判定(相対的に緩い判定)してもよい。このように複数のユーザが同じタイミングで操作することを促すために、協調操作通知画像Nは、操作タイミングを示す号令を通知する。例えば、図11の例では、協調操作通知画像Nにおいて協調操作の準備を促すための表示「せーの」を通知して、現時点が協調操作を行う直前の準備段階であることをユーザに示している。
上記協調操作の準備を促すための通知とともに、協調操作の対象となるユーザチームに属するユーザが操作している左コントローラ3または右コントローラ4に対して、振動が与えられる。このように、協調操作の対象となるユーザに対する通知は、協調操作通知画像Nや当該協調操作を行う対象となるキャラクタチームの表示による通知だけでなく、当該ユーザが把持しているコントローラへの振動による通知も行われる。したがって、左コントローラ3または右コントローラ4を把持しているユーザは、自身が協調操作の対象であることがわかりやすくなる。なお、左コントローラ3または右コントローラ4に対して与えられる振動は、上記協調操作の準備を促すため表示通知が開始された時点から当該表示通知が継続している期間より短い期間経過後に終了してもよいし、上記協調操作の準備を促すため表示通知が開始された時点から当該表示通知が終了するまで連続して与えられてもよい。なお、第2通知は、一例としてユーザが把持しているコントローラへの振動に相当する。
そして、協調操作を行う操作タイミングを示す号令の次の段階として、上記協調操作の準備を促すための通知の所定時間後において、現時点が協調操作を行うタイミングであることが示される。例えば、図12の例では、協調操作通知画像Nにおいて協調操作を行うことを促すための表示「イエーイ」を通知して、現時点が協調操作を行うタイミングであることをユーザに示している。
上記協調操作を行うことを促すための通知とともに、協調操作の対象となるユーザチームに属するユーザが操作している左コントローラ3または右コントローラ4に対して、再度振動が与えられる。このように、協調操作の対象となるユーザが操作している左コントローラ3または右コントローラ4に複数回の振動を与えることによって、さらにユーザ自身が協調操作の対象であることを気づかせることができる。
そして、上記協調操作の準備を促すための通知および上記協調操作を行うことを促すための通知によって構成される協調操作の通知から所定の閾時間内に、当該協調操作の対象となるユーザ全員が協調操作を行ったと判定された場合、指示された協調操作が成立する。なお、協調操作が成立したことを判定するための上記閾時間は、上記協調操作を行うことを促すための通知に重なるほぼ同じタイミングで操作が行われたことを判定可能な時間(相対的に厳しい判定を行うための時間)に設定されてもよいし、当該通知のタイミングと当該通知の前および/または後の期間とを含む相対的に長い時間(相対的に緩い判定を行うための時間)に設定されてもよい。また、協調操作を行う対象となるキャラクタチームに、コンピュータによって動作が制御される非プレイヤキャラクタが含まれている場合、当該キャラクタチームからコンピュータ制御の非プレイヤキャラクタを除いたプレイヤキャラクタを操作しているそれぞれのユーザが、協調操作を行う対象となる。例えば、図12の例では、上記協調操作を行うことを促すための通知に応じて、当該協調操作の対象となる第1のユーザが左コントローラ3を前に突き出す操作を行っているとともに、第2のユーザが右コントローラ4を前に突き出す操作を行っているため、協調操作が成立したと判定される。例えば、左コントローラ3および右コントローラ4を動かす協調操作が行われた否かの判定は、それぞれのコントローラに生じている加速度(具体的には、加速度センサ104および加速度センサ114の検出結果)および/またはそれぞれのコントローラに生じている角速度(具体的には、角速度センサ105および角速度センサ115の検出結果)に基づいて行うことができる。例えば、協調操作の対象となっているコントローラにおいて、加速度の変化が第1の閾値より大きい、かつ、所定時間前(例えば、20フレーム前)からの角速度の変化が第2の閾値より小さい状態が上記閾時間内に生じた場合、当該コントローラにおいて当該協調操作が行われたと判定することができる。そして、協調操作の対象となっているコントローラ全てにおいて上記協調操作が行われたと判定された場合、当該協調操作の対象となるユーザ全員による協調操作が成功したと判定される。また、協調操作の対象となっているコントローラの少なくとも1つにおいて上記協調操作が行われたと判定されなかった場合、当該協調操作の対象となるユーザ全員による協調操作が失敗したと判定される。
なお、上記協調操作の通知は、複数回繰り返されてもかまわない。例えば、上記協調操作の準備を促すための通知および上記協調操作を行うことを促すための通知が行われた所定時間の経過後に、上記協調操作の準備を促すための通知および上記協調操作を行うことを促すための通知が再度行われてもよい。この場合、左コントローラ3および右コントローラ4への振動による通知についても、上記繰り返される協調操作の通知とともに行われる。一例として、協調操作の準備を促すための表示「せーの」と協調操作を行うことを促すための表示「イエーイ」とが所定周期(例えば、1秒ごと)で切り替わり、それぞれ所定回数(例えば、3回)繰り返されてもよい。この場合、協調操作の準備を促すための最初の表示「せーの」が通知されてから、協調操作を行うことを促すための最後の表示「イエーイ」が通知されて所定時間経過(例えば、1秒経過)するまでの期間、すなわち協調操作の準備を促すための最初の表示「せーの」が通知から7秒以内の期間において、上記協調操作が成功しなければ失敗判定してもよい。このように協調操作の通知が複数回繰り返されることによって、ユーザ自身が協調操作の対象であることをさらに気づかせることが可能となる。
また、上記協調操作の操作内容は、他の操作内容であってもよい。第1の例として、ユーザが把持している左コントローラ3または右コントローラ4を上に突き出すように動かす操作(ハイタッチ操作)が協調操作の操作内容であってもよい。第2の例として、ユーザが把持している左コントローラ3または右コントローラ4の長手方向が上下方向となるように姿勢を変えた状態で前に突き出すまたは身体に近づけるように動かす操作(サムズアップ操作)が協調操作の操作内容であってもよい。第3の例として、ユーザが把持している左コントローラ3または右コントローラ4を上から下方向へ素早く1回以上動かす操作(ガッツポーズ操作)が協調操作の操作内容であってもよい。第4の例として、ユーザが把持している左コントローラ3または右コントローラ4を左右に振り動かす操作(手を振る操作)が協調操作の操作内容であってもよい。また、何れの例であっても、ユーザが把持している左コントローラ3と別のユーザが把持している右コントローラ4とを接触させるような操作を、協調操作の操作内容としてもよい。また、上記協調操作の操作内容は、異なる操作内容の組み合わせであってもよく、一例として、ハイタッチ操作の後にサムズアップ操作するような操作内容の組み合わせが協調操作の操作内容であってもよい。このような様々な協調操作の操作内容であっても、当該操作内容に応じて判定基準を設定することによって、それぞれのコントローラに生じている加速度や加速度の履歴、それぞれのコントローラに生じている角速度や角速度の履歴、当該加速度および/または当該角速度に基づいて算出可能な重力加速度基準のコントローラの姿勢等に基づいて、協調操作が行われたか否かについて判定することが可能となる。なお、上記協調操作の操作内容は、左コントローラ3本体または右コントローラ4本体を動かすような操作内容でなくてもよく、ボタン操作(例えば、操作ボタンの押下操作)や傾倒操作(例えば、アナログスティックの傾倒操作)等でもよい。
また、上述した説明では、上記協調操作を促すための通知とともに、左コントローラ3および右コントローラ4に対して振動が与えられる例を用いたが、上記協調操作を促すための通知とともに、他の刺激が左コントローラ3および右コントローラ4から与えられてもよい。一例として、上記協調操作を促すための通知とともに、協調操作の対象となるユーザチームに属するユーザが操作している左コントローラ3または右コントローラ4のハウジング31または51の少なくとも一部が変形する(例えば、膨らむ)ことによって、ユーザに刺激が与えられもよい。他の例として、上記協調操作を促すための通知とともに、協調操作の対象となるユーザチームに属するユーザが操作している左コントローラ3または右コントローラ4の操作ボタンやスティックが動く(例えば、飛び出す)ことによって、ユーザに刺激が与えられもよい。このように振動とは異なる刺激を左コントローラ3または右コントローラ4の接触体(把持するユーザの手)に与えた場合であっても、表示や音声とは異なる方法で協調操作を促すことが可能となる。
また、上記協調操作を促すための通知とともに、左コントローラ3および右コントローラ4から接触体に刺激が与えられなくてもよい。表示や音声による上記協調操作を促すための通知だけであっても、ユーザは、上記協調操作を促されていることを認識することが可能であり、左コントローラ3および右コントローラ4から刺激が与えられなくてもユーザ自身が協調操作の対象であることを気づくことは可能である。
また、上記協調操作の対象となるユーザは、上記ミニゲームの結果が好成績であったユーザチームに属する1人のユーザでもよい。例えば、上記ユーザチームに属するユーザに含まれる特定のユーザにおいては、上記協調操作の対象外にすることも考えられ、結果的に当該ユーザチームに属する1人のユーザが協調操作の対象となることもあり得る。
図13に示すように、上記協調操作の対象となるユーザ全員による協調操作が成功したと判定された場合、協調操作成功演出が行われる。例えば、協調操作成功演出は、上記協調操作を行う対象となるキャラクタチームに属するキャラクタ(図13の例では、2つのプレイヤキャラクタPC1〜PC2および非プレイヤキャラクタNPC1〜NPC2)が、ユーザが行った上記協調操作におけるユーザ動作に対応して動作する。一例として、コントローラを前に突き出すような協調操作が行われた場合、上記プレイヤキャラクタPC1〜PC2および非プレイヤキャラクタNPC1〜NPC2が画面中央に集まってそれぞれ協調操作におけるユーザ動作を模した動作(例えば、互いに片手を前に突き出したり、互いにグータッチする動作を行ったり、互いにハイタッチする動作を行ったりする動作)を行うことによって、上記協調操作成功演出が行われる。なお、協調操作成功演出におけるキャラクタの動作は、ユーザが行った協調操作による動きに対応していなくてもよく、単に協調操作が成功したことをキャラクタが喜ぶ動作であってもよい。なお、成功条件が満たされたと判定された場合に行われる所定のゲーム演出は、一例として協調操作成功演出に相当する。
そして、上記協調操作の対象となるユーザ全員による協調操作が成功したと判定された場合、中断しているメインゲームにおける有利な効果がさらに付与される。協調操作成功時に付与される有利な効果も、上記メインゲームにおいて用いられるゲームパラメータを当該メインゲームの進行において有利になるように増減させるものであり、上記ミニゲーム終了時と同様に当該メインゲームで設定されている残り時間を増加させることが考えられる。図13の例では、上記協調操作が成功したことに応じて、上記メインゲームの残り時間がさらに3秒増えたことが通知されている。なお、協調操作成功時に付与される有利な効果は、上記ミニゲームの結果に応じて与えられる効果とは異なるものであってもよい。また、協調操作成功時に付与される有利な効果は、上記メインゲームで用いられるゲームコインが増加するものでもよいし、上記メインゲームで用いられるアイテムを取得するものでもよいし、上記メインゲームに登場するキャラクタの能力が向上するものでもよいし、上記メインゲームの得点を加算するものであってもよい。なお、成功条件が満たされたと判定された場合に行われる所定のゲーム演出は、他の例としてメインゲームにおける有利な効果がさらに付与される(例えば、メインゲームの残り時間が増加される)ことが通知される演出に相当する。
図14に示すように、上記ミニゲームおよび当該ミニゲームの結果に応じて行われる協調操作演出とで構成されるサブゲームが終了した場合、中断していた上記メインゲームに戻ってゲームプレイが再開される。そして、上記サブゲームにおいて有利な効果が得られている場合、再開されたメインゲームに当該有利な効果が反映される。例えば、図14の例では、上記サブゲームにおいて、メインゲームの残り時間が33秒増加する効果(上記ミニゲームにおける残り時間が30秒増加する効果と上記協調操作演出における残り時間が3秒増加する効果とを積算した効果)が得られたため、残り時間通知画像Tが示す残り時間が中断時の35秒から68秒に増加しており、残り時間が33秒増加したことが通知されている。
なお、上記協調操作の対象となるユーザ全員による協調操作がまだ成功に至っていない期間では、上記協調操作を行う対象となるキャラクタチームに属するキャラクタが協調操作を待っているような動作を行ってもよい。例えば、上記協調操作の対象となるユーザの一部が当該協調操作を行った場合、当該ユーザが操作するプレイヤキャラクタPCが他のユーザの協調操作を待つような動作をすることが考えられる。一例として、協調操作におけるユーザ動作を模したプレイヤキャラクタPCの動作がハイタッチする動作である場合、プレイヤキャラクタPCがジャンプする前のかがむ動作を、他のユーザの協調操作を待つ動作として行うことができる。また、上記協調操作の対象となるユーザ全員による協調操作が失敗したことが確定した場合、当該協調操作を行う対象となるキャラクタチームに属するキャラクタ全員が残念がる動作を行うことが考えられる。
また、上記協調操作は、協調操作の対象となるユーザの少なくとも1人が当該協調操作を行った場合に成功と判定してもかまわない。この場合、上記協調操作を行ったと判定された人数に応じて、与えられる有利な効果の度合いが増減してもよい。
また、上記協調操作を促すタイミングは、上記ミニゲームの終了直後だけでなく、上記ミニゲームの開始直前や上記ミニゲームの途中であってもよい。例えば、上記ミニゲームの開始直前に協調操作を促す場合、当該ミニゲーム開始前に連帯感を煽る演出が行われてもよい。なお、上記ミニゲームの開始直前に協調操作を促す場合は、当該協調操作が成功することに応じて、当該協調操作後に行われるミニゲームにおける有利な効果が付与されてもよく、上記メインゲームがないサブゲームだけで構成されるゲーム態様であっても上記協調操作による効果を得ることができる。また、上記ミニゲームの途中で協調操作を促す場合、当該ミニゲームの途中で当該ミニゲームを進める上で効果的なイベントが生じた時点で協調操作を促すことが考えられる。ここで、効果的なイベントが生じた時点とは、スポーツを模したミニゲームにおいて得点が得られた時点、相手チームの得点を防いだ時点、敵と戦うミニゲームにおいて敵を倒した時点、敵の攻撃を防御した時点等が考えられる。
また、上述した説明では、メインゲームの一例として、複数のキャラクタが乗船して残り時間が0となる前のゴールを目指すラフティングゲームを用いたが、他のゲームでもよいことは言うまでもない。例えば、複数のユーザが操作するプレイヤキャラクタが順番にさいころを振って進む双六ゲームが上記メインゲームである場合、止まった双六マスに応じてゲームコインが増減するとともに、特定の双六マスに止まることによってまたは1ターンが経過する毎に上記サブゲームが行われ、上記ミニゲームや上記協調操作の結果に応じてゲームコインがさらに増加することが考えられる。
次に、図15〜図19を参照して、本実施形態においてゲームシステム1で実行される具体的な処理の一例について説明する。図15は、本実施形態において本体装置2のDRAM85に設定されるデータ領域の一例を示す図である。なお、DRAM85には、図15に示すデータの他、他の処理で用いられるデータも記憶されるが、詳細な説明を省略する。
DRAM85のプログラム記憶領域には、ゲームシステム1で実行される各種プログラムPaが記憶される。本実施形態においては、各種プログラムPaは、上述した左コントローラ3および右コントローラ4との間で無線通信するための通信プログラムや、左コントローラ3および/または右コントローラ4から取得したデータに基づいた情報処理(例えば、ゲーム処理)を行うためのアプリケーションプログラム等が記憶される。なお、各種プログラムPaは、フラッシュメモリ84に予め記憶されていてもよいし、ゲームシステム1に着脱可能な記憶媒体(例えば、スロット23に装着された所定の種類の記憶媒体)から取得されてDRAM85に記憶されてもよいし、インターネット等のネットワークを介して他の装置から取得されてDRAM85に記憶されてもよい。プロセッサ81は、DRAM85に記憶された各種プログラムPaを実行する。
また、DRAM85のデータ記憶領域には、ゲームシステム1において実行される通信処理や情報処理等の処理において用いられる各種のデータが記憶される。本実施形態においては、DRAM85には、操作データDa、角速度データDb、加速度データDc、チーム編成データDd、残り時間データDe、操作待ち時間データDf、振動データDg、サブゲームフラグデータDh、ミニゲームフラグデータDi、操作待ちフラグデータDj、キャラクタ動作データDk、および画像データDm等が記憶される。
操作データDaは、左コントローラ3および/または右コントローラ4からそれぞれ適宜取得した操作データである。上述したように、左コントローラ3および/または右コントローラ4からそれぞれ送信される操作データには、各入力部(具体的には、各ボタン、アナログスティック、各センサ)からの入力に関する情報(具体的には、操作に関する情報や各センサによる検出結果)が含まれている。本実施形態では、無線通信によって左コントローラ3および/または右コントローラ4からそれぞれ所定周期で操作データが送信されており、当該受信した操作データを用いて操作データDaが適宜更新される。なお、操作データDaの更新周期は、後述するゲームシステム1で実行される処理の周期である1フレーム毎に更新されてもよいし、上記無線通信によって操作データが送信される周期毎に更新されてもよい。
角速度データDbは、左コントローラ3および右コントローラ4それぞれに生じている角速度を示すデータである。例えば、角速度データDbは、左コントローラ3および右コントローラ4それぞれに生じているxyz軸周りの角速度を示すデータ等を含んでいる。
加速度データDcは、左コントローラ3および右コントローラ4それぞれに生じている加速度を示すデータである。例えば、加速度データDcは、左コントローラ3および右コントローラ4それぞれに生じている重力加速度を除いて、xyz軸方向に生じている加速度を示すデータ等を含んでいる。
チーム編成データDdは、ゲームを行うキャラクタチームをそれぞれ示すデータであり、当該チームのうち、複数のユーザがそれぞれ操作するプレイヤキャラクタPCを含むチームを少なくとも1つ含むチーム編成を示すデータである。チーム編成データDdには、各キャラクタチームに属するプレイヤキャラクタPC、各キャラクタチームに属する非プレイヤキャラクタNPC、当該プレイヤキャラクタPCの操作に用いられているコントローラの識別情報等が管理される。
残り時間データDeは、メインゲームにおいてゴールするまでに許容される残り時間(ゴールするまでの制限時間)を示すデータである。操作待ち時間データDfは、複数のユーザによる協調操作が行われるのを待っている時間を示すデータである。
振動データDgは、左コントローラ3および/または右コントローラ4をそれぞれ振動させるための振動を示すデータである。
サブゲームフラグデータDhは、サブゲームが行われている場合にオンに設定されるサブゲームフラグを示すデータである。ミニゲームフラグデータDiは、ミニゲームが行われている場合にオンに設定されるミニゲームフラグを示すデータである。操作待ちフラグデータDjは、複数のユーザによる協調操作を待っている期間においてオンに設定される操作待ちフラグを示すデータである。
キャラクタ動作データDkは、各プレイヤキャラクタPCおよび各非プレイヤキャラクタNPCの仮想空間における位置、方向、姿勢、および動作等をそれぞれ示すデータである。
画像データDmは、ゲームの際に本体装置2のディスプレイ12や据置型モニタ6の表示画面に画像(例えば、プレイヤキャラクタの画像、仮想オブジェクトの画像、フィールド画像、背景画像等)を表示するためのデータである。
次に、図16〜図19を参照して、本実施形態における情報処理(ゲーム処理)の詳細な一例を説明する。図16は、ゲームシステム1で実行されるゲーム処理の一例を示すフローチャートである。図17は、図16におけるステップS126において行われるメインゲーム処理の詳細の一例を示すサブルーチンである。図18は、図16におけるステップS127において行われるサブゲーム処理の前半の詳細の一例を示すサブルーチンである。図19は、図16におけるステップS127において行われるサブゲーム処理の後半の詳細の一例を示すサブルーチンである。本実施形態においては、図16〜図19に示す一連の処理は、プロセッサ81が各種プログラムPaに含まれる通信プログラムや所定のアプリケーションプログラム(ゲームプログラム)を実行することによって行われる。また、図16〜図19に示すゲーム処理が開始されるタイミングは任意である。
なお、図16〜図19に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をプロセッサ81が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、プロセッサ81以外のプロセッサや専用回路が実行するようにしてもよい。また、本体装置2において実行される処理の一部は、本体装置2と通信可能な他の情報処理装置(例えば、本体装置2とネットワークを介して通信可能なサーバ)によって実行されてもよい。すなわち、図16〜図19に示す各処理は、本体装置2を含む複数の情報処理装置が協働することによって実行されてもよい。
図16において、プロセッサ81は、ゲーム処理における初期設定を行い(ステップS120)、次のステップに処理を進める。例えば、上記初期設定では、プロセッサ81は、以下に説明する処理を行うためのパラメータを初期化する。一例として、プロセッサ81は、サブゲームフラグデータDhが示すサブゲームフラグ、ミニゲームフラグデータDiが示すミニゲームフラグ、および操作待ちフラグデータDjが示す操作待ちフラグをそれぞれオフに初期設定する。
次に、プロセッサ81は、左コントローラ3および/または右コントローラ4から操作データを取得して操作データDaを更新し(ステップS121)、次のステップに処理を進める。
次に、プロセッサ81は、上記ステップS121において取得した操作データに基づいて、メインゲームおよびサブゲームをプレイするチーム編成を設定する処理を行い(ステップS122)、次のステップに処理を進める。ここで、プロセッサ81は、メインゲームおよびサブゲームをプレイする複数のユーザからなるチームを少なくとも1つ含むチーム編成を設定し、当該複数のユーザがそれぞれ操作する複数のプレイヤキャラクタPCが属するキャラクタチームを設定する。そして、プロセッサ81は、各キャラクタチームに属するプレイヤキャラクタPCの情報、各キャラクタチームに属する非プレイヤキャラクタNPCの情報、当該プレイヤキャラクタPCの操作に用いられているコントローラの識別情報等を用いて、チーム編成データDdを更新する。したがって、上記チーム編成では、複数のユーザが操作する複数のプレイヤキャラクタPCが属する単一のキャラクタチームが設定されることもあり得るし、複数のユーザが操作する複数のプレイヤキャラクタPCが属するキャラクタチームが複数組設定されることもあり得るし、複数のユーザが操作する複数のプレイヤキャラクタPCが属するキャラクタチームとコンピュータ(プロセッサ81)によって自動制御される非プレイヤキャラクタNPCのみが属するキャラクタチームとが設定されることもあり得る。また、複数のユーザが操作する複数のプレイヤキャラクタPCが属するキャラクタチームには、コンピュータによって自動制御される非プレイヤキャラクタNPCが属していてもよい。以下の説明においては、複数のユーザがそれぞれ操作する複数のプレイヤキャラクタPCが属するキャラクタチームがメインゲームおよびサブゲームを行う場合の処理について説明する。
次に、プロセッサ81は、チーム編成が決定されたか否かを判定する(ステップS123)。例えば、プロセッサ81は、チーム編成が決定されたことを上記ステップS121において取得した操作データが示す場合、プロセッサ81は、上記ステップS123において肯定判定する。そして、プロセッサ81は、チーム編成が決定された場合、メインゲームプレイを行うためのゲームフィールドおよび当該ゲームフィールド上のプレイヤキャラクタPCおよび/または非プレイヤキャラクタNPCの初期状態を設定してキャラクタ動作データDkを更新して、ステップS124に処理を進める。一方、プロセッサ81は、チーム編成が決定されていない場合、ステップS121に戻って処理を繰り返す。
ステップS124において、プロセッサ81は、左コントローラ3および/または右コントローラ4から操作データを取得して操作データDaを更新し、次のステップに処理を進める。
次に、プロセッサ81は、メインゲームを行うか否かを判定する(ステップS125)。例えば、プロセッサ81は、サブゲームフラグデータDhが示すサブゲームフラグがオフに設定されている場合、上記ステップS125において肯定判定する。そして、プロセッサ81は、メインゲームを行う場合、ステップS126に処理を進める。一方、プロセッサ81は、サブゲームを行う場合、ステップS127に処理を進める。
ステップS126において、プロセッサ81は、メインゲーム処理を行い、ステップS128に処理を進める。以下、図17を参照して、上記ステップS126において行われるメインゲーム処理の一例について説明する。なお、第2ゲーム実行手段は、第1ゲームとは別の第2ゲームを実行するものであり、一例としてステップS126の処理を行うプロセッサ81に相当する。
図17において、プロセッサ81は、メインゲームにおけるプレイヤキャラクタ動作処理を行い(ステップS141)、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS124において取得した複数のユーザ(例えば、第1のユーザおよび第2のユーザ)の操作データがそれぞれ示す指示内容を設定し、当該指示内容に応じてメインゲームを行っているキャラクタチームに属する複数のプレイヤキャラクタPC(例えば、第1のユーザが操作する第1のプレイヤキャラクタPC1および第2のユーザが操作する第2のプレイヤキャラクタPC2)を動作させ、複数のプレイヤキャラクタPCの仮想空間における位置、方向、姿勢、および動作等をそれぞれ設定してキャラクタ動作データDkを更新する。
次に、プロセッサ81は、メインゲームにおける非プレイヤキャラクタ動作処理を行い(ステップS142)、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS141において設定されたプレイヤキャラクタPCの動作に応じてメインゲームを行っているキャラクタチームに属する複数の非プレイヤキャラクタNPC(例えば、非プレイヤキャラクタNPC1およびNPC2)を動作させ、複数の非プレイヤキャラクタNPCの仮想空間における位置、方向、姿勢、および動作等をそれぞれ設定してキャラクタ動作データDkを更新する。
次に、プロセッサ81は、メインゲームを行っているキャラクタチームがサブゲームを実行する権利を取得したか否かを判定する(ステップS143)。例えば、プロセッサ81は、メインゲームを行っているキャラクタチームに属するプレイヤキャラクタPCおよび非プレイヤキャラクタNPCや当該キャラクタチームが動かす仮想オブジェクト(例えば、キャラクタチームが乗船しているラフト)等がアイテムIと接触した場合、上記ステップS143において肯定判定する。そして、プロセッサ81は、サブゲームを実行する権利を取得した場合、実行中のメインゲームを中断してステップS144に処理を進める。一方、プロセッサ81は、サブゲームを実行する権利を取得していない場合、ステップS145に処理を進める。
ステップS144において、プロセッサ81は、サブゲームフラグをオンに設定し、ステップS145に処理を進める。例えば、プロセッサ81は、サブゲームフラグデータDhが示すサブゲームフラグをオンに変更して更新する。
ステップS145において、プロセッサ81は、上記キャラクタチームのメインゲームに設定されている残り時間を所定時間減らして更新し、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、残り時間データDeが示す残り時間からゲームシステム1で実行される処理の周期(例えば、1フレーム分に相当する時間)を減算し、当該減算後の残り時間を用いて残り時間データDeを更新する。
図16に戻り、プロセッサ81は、上記ステップS125においてサブゲームを行うと判定した場合、サブゲーム処理を行い(ステップS127)、ステップS128に処理を進める。以下、図18および図19を参照して、上記ステップS127において行われるサブゲーム処理の一例について説明する。
図18において、プロセッサ81は、現時点が上記キャラクタチームのサブゲームを開始するタイミングか否かを判定する(ステップS151)。例えば、プロセッサ81は、現時点がサブゲームフラグデータDhのサブゲームフラグをオンに変更した直後である場合、上記ステップS151において肯定判定する。そして、プロセッサ81は、現時点がサブゲームを開始するタイミングである場合、ステップS152に処理を進める。一方、プロセッサ81は、既にサブゲームが開始されている場合、ステップS153に処理を進める。
ステップS152において、プロセッサ81は、上記キャラクタチームの中断しているメインゲームの状況を記憶するともに、当該キャラクタチームが行うミニゲームの初期設定を行い、ステップS153に処理を進める。例えば、プロセッサ81は、ミニゲームプレイを行うためのゲームフィールドおよび当該ゲームフィールド上に上記キャラクタチームに属するプレイヤキャラクタPCおよび/または非プレイヤキャラクタNPCの初期状態を必要に応じて設定してキャラクタ動作データDkを更新する。また、プロセッサ81は、ミニゲームフラグデータDiが示すミニゲームフラグをオンに変更して初期設定する。
ステップS153において、プロセッサ81は、ミニゲームフラグがオンに設定されているか否かを判定する。例えば、プロセッサ81は、ミニゲームフラグデータDiが示すミニゲームフラグがオンに設定されている場合、上記ステップS153において肯定判定する。そして、プロセッサ81は、ミニゲームフラグがオンに設定されている場合、ステップS154に処理を進める。一方、プロセッサ81は、ミニゲームフラグがオフに設定されている場合、ステップS171(図19参照)に処理を進める。
ステップS154において、プロセッサ81は、ミニゲームを行っているキャラクタチームに属するプレイヤキャラクタ動作処理を行い、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS124において取得した複数のユーザ(例えば、第1のユーザおよび第2のユーザ)の操作データがそれぞれ示す指示内容を設定し、当該指示内容に応じてミニゲームを行っているキャラクタチームに属する複数のプレイヤキャラクタPC(例えば、第1のユーザが操作する第1のプレイヤキャラクタPC1および第2のユーザが操作する第2のプレイヤキャラクタPC2)を動作させ、複数のプレイヤキャラクタPCの仮想空間における位置、方向、姿勢、および動作等をそれぞれ設定してキャラクタ動作データDkを更新する。
次に、プロセッサ81は、ミニゲームを行っているキャラクタチームに属する非プレイヤキャラクタ動作処理を行い(ステップS155)、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS154において設定されたプレイヤキャラクタPCの動作に応じてミニゲームを行っているキャラクタチームに属する複数の非プレイヤキャラクタNPC(例えば、非プレイヤキャラクタNPC1およびNPC2)を動作させ、複数の非プレイヤキャラクタNPCの仮想空間における位置、方向、姿勢、および動作等をそれぞれ設定してキャラクタ動作データDkを更新する。なお、第1ゲーム実行手段は、複数のユーザからなるチームを少なくとも1つ含むチーム編成を設定し、当該チームに属する少なくとも1人のユーザによりプレイされる第1ゲームを実行するものであり、一例としてステップS152、S154、およびS155の処理を行うプロセッサ81に相当する。
次に、プロセッサ81は、上記キャラクタチームのミニゲームが終了したか否かを判定する(ステップS156)。上記ステップS156においてミニゲームを終了する条件としては、例えば、上記ミニゲームの結果が確定したことや、ユーザがミニゲームを終了する操作を行ったこと等がある。プロセッサ81は、ミニゲームを終了する場合にステップS157に処理を進め、ミニゲームを終了しない場合にステップS171(図19参照)に処理を進める。
ステップS157において、プロセッサ81は、上記キャラクタチームのミニゲームの結果を報知してミニゲームを終了する処理を行って、次のステップに処理を進める。例えば、プロセッサ81は、ミニゲームをクリアしたランクまたはクリアできなかった結果を算出して、当該クリアしたランクやクリアできなかった上記キャラクタチームの結果を示す画像を生成し、後述するステップS128の表示制御処理において当該画像を表示装置(例えば、据置型モニタ6)に表示する(図11参照)。また、プロセッサ81は、ミニゲームフラグデータDiが示すミニゲームフラグをオフに変更して上記キャラクタチームのミニゲームを終了する処理を行う。
次に、プロセッサ81は、上記キャラクタチームのメインゲームに設定されている残り時間に当該キャラクタチームのミニゲームの結果に基づいた時間を加算して更新し(ステップS158)、次のステップに処理を進める。例えば、プロセッサ81は、上記ミニゲームの結果が残り時間の追加が行われるものである場合、残り時間データDeが示す残り時間に当該追加される時間を加算し、当該加算後の残り時間を用いて残り時間データDeを更新する。また、プロセッサ81は、上記ミニゲームの結果に応じて残り時間が加算される場合、当該残り時間が上記キャラクタチームに対して加算されることを報知する画像を生成し、後述するステップS128の表示制御処理において当該画像を表示装置(例えば、据置型モニタ6)に表示する(図11参照)。なお、上記ミニゲームの結果によっては、メインゲームに設定されている残り時間が加算されないこともある。その場合、プロセッサ81は、残り時間データDeを更新することなく上記残り時間が加算されることを上記キャラクタチームに報知する画像の生成も行わない。また、上記キャラクタチームのメインゲームに設定されている残り時間に当該キャラクタチームのミニゲームの結果に基づいた時間が実際に加算された状態をユーザに示すタイミングは、当該メインゲームが再開される直前や当該ミニゲームの再開直後であってもよい。
次に、プロセッサ81は、上記キャラクタチームのミニゲームの結果が好成績であったか否かを判定する(ステップS159)。ここで、ミニゲームの結果が好成績であった場合とは、当該ミニゲームにおいて閾値以上の成果(所定のランク以上でのクリアや所定の閾値以上の得点の取得)が得られた場合や当該ミニゲームにおいて上記キャラクタチームが勝利した場合等が考えられ、これらの条件を満たした場合、プロセッサ81は、上記ステップS159において肯定判定する。そして、プロセッサ81は、ミニゲームの結果が好成績であった場合、ステップS160に処理を進める。一方、プロセッサ81は、ミニゲームの結果が好成績でなかった場合、ステップS161に処理を進める。
ステップS160において、プロセッサ81は、操作待ちフラグをオンに変更して、ステップS171(図19参照)に処理を進める。例えば、プロセッサ81は、操作待ちフラグデータDjが示す操作待ちフラグをオンに変更して更新する。
一方、ステップS161において、プロセッサ81は、サブゲームフラグをオフに設定し、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、サブゲームフラグデータDhが示すサブゲームフラグをオフに変更して更新する。また、プロセッサ81は、中断している上記キャラクタチームのメインゲームの状況を読み出して当該メインゲームを再開する処理を行う。なお、プロセッサ81は、上記キャラクタチームのメインゲームの中断時点と比較して、残り時間データDeが示す残り時間が変化している場合、当該変化したことを上記キャラクタチームに報知するための残り時間通知画像Tを生成し、後述するステップS128の表示制御処理において当該画像を表示装置(例えば、据置型モニタ6)に表示する(図14参照)。
図19に進み、ステップS171において、プロセッサ81は、操作待ちフラグがオンに設定されているか否かを判定する。例えば、プロセッサ81は、操作待ちフラグデータDjが示す操作待ちフラグがオンに設定されている場合、上記ステップS171において肯定判定する。そして、プロセッサ81は、操作待ちフラグがオンに設定されている場合、ステップS172に処理を進める。一方、プロセッサ81は、操作待ちフラグがオフに設定されている場合、当該サブルーチンによる処理を終了する。
ステップS172において、プロセッサ81は、上記キャラクタチームのユーザに協調操作の操作内容を通知する処理を行い、次のステップに処理を進める。例えば、ユーザが把持している左コントローラ3または右コントローラ4を前に突き出すように動かす操作が協調操作の操作内容である場合、上記キャラクタチームのユーザに当該操作内容を示す協調操作通知画像Nを生成し、後述するステップS128の表示制御処理において当該画像を表示装置(例えば、据置型モニタ6)に表示する(図11、図12参照)。なお、第1通知手段は、第1ゲーム開始前、第1ゲーム中断時、および第1ゲーム終了後の少なくともいずれかにおいて、コントローラを動かす操作をチームのユーザに促す第1通知を、画像および音の少なくとも一方により行うための信号を出力するものであり、一例としてステップS172およびS175の処理を行うプロセッサ81に相当する。
次に、プロセッサ81は、上記キャラクタチームのユーザにおける協調操作を待っている操作待ち時間を所定時間増やして更新し(ステップS173)、次のステップに処理を進める。例えば、プロセッサ81は、操作待ち時間データDfが示す操作待ち時間にゲームシステム1で実行される処理の周期(例えば、1フレーム分に相当する時間)を加算し、当該加算後の操作待ち時間を用いて操作待ち時間データDfを更新する。
次に、プロセッサ81は、現時点が上記キャラクタチームのユーザにおける協調操作の操作タイミングを示す号令を出す号令タイミングであるか否かを判定する(ステップS174)。例えば、プロセッサ81は、操作待ち時間データDfが示す操作待ち時間が、予め定められた号令タイミングに相当する時間である場合、上記ステップS174において肯定判定する。そして、プロセッサ81は、現時点が号令タイミングである場合、ステップS175に処理を進める。一方、プロセッサ81は、現時点が号令タイミングでない場合、ステップS177に処理を進める。
ステップS175において、プロセッサ81は、協調操作の操作タイミングを示す協調操作号令を上記キャラクタチームのユーザに通知する処理を行い、次のステップに処理を進める。例えば、プロセッサ81は、操作待ち時間データDfが示す操作待ち時間に応じて、上記キャラクタチームに協調操作の準備を促すための通知(図11に例示する表示「せーの」)または上記キャラクタチームに協調操作を行うことを促すための通知(図12に例示する表示「イエーイ」)を示す協調操作通知画像Nを生成し、後述するステップS128の表示制御処理において当該画像を表示装置(例えば、据置型モニタ6)に表示する(図11、図12参照)。
次に、プロセッサ81は、振動データを生成する処理を行い(ステップS176)、ステップS177に処理を進める。例えば、CPU81は、協調操作の対象であることを示す振動波形(振動パターン)を設定し、上記キャラクタチームに属するプレイヤキャラクタPCを操作しているコントローラを振動させるための振動データを当該振動波形に基づいて生成して、振動データDgを更新する。一例として、第1のユーザが操作している左コントローラ3および第2のユーザが操作している右コントローラ4が協調操作の対象である場合、協調操作の対象であることを示す振動波形(振動パターン)で振動させる振動データが第1のユーザが操作している左コントローラ3および第2のユーザが操作している右コントローラ4にそれぞれ送信する振動データとして振動データDgに設定される。そして、後述するステップS129の送信処理において当該振動データが協調操作の対象の左コントローラ3および右コントローラ4にそれぞれ送信されることによって、第1のユーザが操作している左コントローラ3および第2のユーザが操作している右コントローラ4が上記振動パターンで振動することになる。なお、第2通知手段は、チームに属するユーザが操作するコントローラに対して、当該コントローラに接触する接触体を刺激する第2通知を第1通知とともに行うための信号を出力するものであり、一例としてステップS176の処理を行うプロセッサ81に相当する。
ステップS177において、プロセッサ81は、操作判定を行い、次のステップに処理を進める。例えば、プロセッサ81は、協調操作の対象となっているコントローラを用いた操作内容を解析する。一例として、プロセッサ81は、角速度データDbおよび加速度データDcを参照して、協調操作の対象となっているコントローラに生じている加速度およびその履歴/または当該コントローラに生じている角速度およびその履歴に基づいて、当該コントローラを用いた操作内容を解析する。
次に、プロセッサ81は、協調操作の対象となっているコントローラを用いて協調操作が行われたか否かを判定する(ステップS178)。例えば、プロセッサ81は、左コントローラ3または右コントローラ4を前に突き出すように動かす操作が協調操作の操作内容である場合、加速度の変化が第1の閾値より大きい、かつ、所定時間前(例えば、20フレーム前)からの角速度の変化が第2の閾値より小さいコントローラについて、協調操作が行われたと判定する。そして、プロセッサ81は、協調操作の対象となっているコントローラの中に現時点で協調操作が行われていると判定されたコントローラが少なくとも1つある場合、ステップS179に処理を進める。一方、プロセッサ81は、協調操作の対象となっているコントローラの中に現時点で協調操作が行われていると判定されたコントローラがない場合、ステップS180に処理を進める。なお、操作判定手段は、チームに属するユーザが操作する少なくとも1つのコントローラにおいて、操作が行われたか否かの判定を行うものであり、一例としてステップS177およびS176の処理を行うプロセッサ81に相当する。
ステップS179において、プロセッサ81は、他のユーザの協調操作を待つ動作に、協調操作を行ったと判定されたコントローラによって操作されているプレイヤキャラクタPCの動作を設定し、ステップS180に処理を進める。一例として、プロセッサ81は、協調操作の成功時におけるプレイヤキャラクタPCの動作が互いにハイタッチする動作である場合、プレイヤキャラクタPCがジャンプする前のかがむ動作を、他のユーザの協調操作を待つ動作として設定し、キャラクタ動作データDkを更新する。
ステップS180において、プロセッサ81は、上記キャラクタチームのユーザ全員における協調操作が成功したか否かを判定する。例えば、プロセッサ81は、上記キャラクタチームのユーザが操作するコントローラ全てに対して協調操作が行われたと上記ステップS178において判定された場合、上記ステップS180において肯定判定する。そして、プロセッサ81は、上記キャラクタチームのユーザ全員における協調操作が成功した場合、ステップS181に処理を進める。一方、プロセッサ81は、上記キャラクタチームのユーザ全員における協調操作が成功していない場合、ステップS184に処理を進める。なお、成功判定手段は、判定に基づいて、成功条件が満たされたか否かを判定する。ゲーム演出手段は、成功条件が満たされたと判定された場合に、所定のゲーム演出を行うものであり、一例としてステップS180の処理を行うプロセッサ81に相当する。
ステップS181において、プロセッサ81は、協調操作成功演出処理を行い、次のステップに処理を進める。例えば、プロセッサ81は、上記キャラクタチームに属するキャラクタが、協調操作におけるユーザ動作に対応して動作するようにキャラクタ動作データDkを更新する。一例として、プロセッサ81は、コントローラを前に突き出すような協調操作が行われた場合、上記キャラクタチームに属するプレイヤキャラクタPC1〜PC2および非プレイヤキャラクタNPC1〜NPC2が画面中央に集まってそれぞれ協調操作におけるユーザ動作を模した動作(図13参照)を行うように、キャラクタ動作データDkを更新する。
次に、プロセッサ81は、上記キャラクタチームのメインゲームに設定されている残り時間に当該協調操作成功に基づいた時間を加算して更新し(ステップS182)、次のステップに処理を進める。例えば、プロセッサ81は、残り時間データDeが示す残り時間に当該協調操作成功に基づいた時間を加算し、当該加算後の残り時間を用いて残り時間データDeを更新する。また、プロセッサ81は、残り時間が上記キャラクタチームに対して加算されることを報知する画像を生成し、後述するステップS128の表示制御処理において当該画像を表示装置(例えば、据置型モニタ6)に表示する(図13参照)。
次に、プロセッサ81は、操作待ちフラグおよびサブゲームフラグをそれぞれオフに設定し(ステップS183)、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、操作待ちフラグデータDjが示す操作待ちフラグをオフに変更し、サブゲームフラグデータDhが示すサブゲームフラグをオフに変更して、それぞれ更新する。また、プロセッサ81は、操作待ち時間を0に初期化して操作待ち時間データDfを更新する。さらに、プロセッサ81は、中断している上記キャラクタチームのメインゲームの状況を読み出して当該メインゲームを再開する処理を行う。また、プロセッサ81は、残り時間データDeが示す残り時間が加算されたことを上記キャラクタチームに報知するための残り時間通知画像Tを生成し、後述するステップS128の表示制御処理において当該画像を表示装置(例えば、据置型モニタ6)に表示する(図14参照)。
一方、上記ステップS180において上記キャラクタチームのユーザ全員における協調操作がまだ成功していないと判定された場合、プロセッサ81は、操作待ち時間が終了したか否かを判定する(ステップS184)。例えば、プロセッサ81は、操作待ち時間データDfが示す操作待ち時間が、予め定められた閾時間に到達している場合、上記ステップS184において肯定判定する。そして、プロセッサ81は、操作待ち時間が終了した場合、ステップS185に処理を進める。一方、プロセッサ81は、操作待ち時間が終了していない場合、当該サブルーチンによる処理を終了する。
ステップS185において、プロセッサ81は、協調操作失敗演出処理を行い、次のステップに処理を進める。例えば、プロセッサ81は、上記キャラクタチームに属するキャラクタ全員が残念がる動作を行うように、キャラクタ動作データDkを更新する。
次に、プロセッサ81は、操作待ちフラグおよびサブゲームフラグをそれぞれオフに設定し(ステップS186)、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、操作待ちフラグデータDjが示す操作待ちフラグをオフに変更し、サブゲームフラグデータDhが示すサブゲームフラグをオフに変更して、それぞれ更新する。また、プロセッサ81は、操作待ち時間を0に初期化して操作待ち時間データDfを更新する。さらに、プロセッサ81は、中断している上記キャラクタチームのメインゲームの状況を読み出して当該メインゲームを再開する処理を行う。また、プロセッサ81は、残り時間データDeが示す残り時間が加算されたことを上記キャラクタチームに報知するための残り時間通知画像Tを生成し、後述するステップS128の表示制御処理において当該画像を表示装置(例えば、据置型モニタ6)に表示する(図14参照)。
図16に戻り、ステップS128において、プロセッサ81は、表示制御処理を行い、次のステップに処理を進める。例えば、プロセッサ81は、キャラクタ動作データDkを用いて、ゲームフィールド上にプレイヤキャラクタPCや非プレイヤキャラクタNPC等を配置する。そして、プロセッサ81は、所定の位置に配置された仮想カメラからゲームフィールドを見た仮想空間画像を生成し、当該仮想空間画像を表示装置(例えば、据置型モニタ6)の表示画面に表示する処理を行う。また、プロセッサ81は、上述した処理において、各ゲームの結果を示す画像、メインゲームの残り時間が加算されることを示す画像、残り時間通知画像T、協調操作通知画像N等の表示画像が生成されている場合、上記仮想空間画像に当該画像が含まれるように当該仮想空間画像を合成し、当該仮想空間画像を表示装置の表示画面に表示する処理を行う。
次に、プロセッサ81は、データ送信周期毎に左コントローラ3および右コントローラ4へデータを出力する処理を行い(ステップS129)、次のステップに処理を進める。例えば、プロセッサ81は、コントローラへ出力するための振動データDgに格納されている場合、当該振動データDgに格納されている振動データを、当該振動データを送信する対象となる送信先のコントローラへ出力する処理を行う。このように各コントローラに振動データを出力することによって、当該振動データを取得した左コントローラ3および/または右コントローラ4は、それぞれの振動データに応じた振動波形で振動する。
次に、プロセッサ81は、メインゲームを終了するか否かを判定する(ステップS130)。上記ステップS130においてゲームを終了する条件としては、例えば、上記メインゲームの結果が確定したことや、残り時間データDeが示す上記メインゲームにおける残り時間が0となったことや、ユーザがメインゲームを終了する操作を行ったこと等がある。プロセッサ81は、メインゲームを終了しない場合に上記ステップS124に戻って処理を繰り返し、メインゲームを終了する場合に当該フローチャートによる処理を終了する。以降、ステップS124〜ステップS130の一連の処理は、ステップS130でメインゲームを終了すると判定されるまで繰り返し実行される。
このように、本実施例においては、複数のユーザがそれぞれ操作するプレイヤキャラクタPCが属するキャラクタチームによってプレイされるゲームにおいて、協調操作を当該ユーザに促す画像によって通知するとともに、当該ユーザが操作するコントローラへの振動によっても通知され、上記複数のユーザによる協調操作が成功した場合に当該協調操作の成功に応じた演出が行われるため、チーム編成がなされるゲームにおけるユーザの興趣性を高めることができる。
なお、上述したフローチャートによる処理例では、複数のユーザがそれぞれ操作する複数のプレイヤキャラクタPCが属するキャラクタチームの1つがメインゲームおよびサブゲームを行う場合を用いたが、複数のユーザがそれぞれ操作する複数のプレイヤキャラクタPCが属するキャラクタチームが複数設定され、当該キャラクタチーム同士がメインゲームおよびサブゲームに参加する形態も考えられる。この場合、何れか一方のキャラクタチームのみがサブゲームを行う権利を取得したり、ミニゲームにおいて一方のキャラクタチームが好成績で他方のキャラクタチームが不成績となったりすることも考えられる。このように、複数のユーザが操作するキャラクタチームが複数参加する場合は、上記フローチャートにおける各ステップをキャラクタチーム毎に並行して行うとともに、異なる結果となる場合に両方の結果を同じ表示画面に表示したり、一方のキャラクタチームが他方のキャラクタチームのゲーム進行を待ったりすることによって、同様に上述した処理を実現することが可能となる。
また、上述した説明では、操作判定処理を本体装置2側で行う例を用いたが、当該操作判定処理の少なくとも一部を左コントローラ3および/または右コントローラ4において行ってもよい。例えば、左コントローラ3の加速度、角速度、姿勢を算出する処理、左コントローラ3の軸方向や軸方向の変化量を算出する処理、左コントローラ3に生じている加速度(重力加速度)を算出する処理等を左コントローラ3内で行ってもよいし、右コントローラ4の加速度、角速度、姿勢を算出する処理、右コントローラ4の軸方向や軸方向の変化量を算出する処理、右コントローラ4に生じている加速度(重力加速度)を算出する処理等を右コントローラ4内で行ってもよい。
また、上述した実施例において、左コントローラ3や右コントローラ4の動きや姿勢を検出する方法については、単なる一例であって、他の方法や他のデータを用いて左コントローラ3や右コントローラ4の動きや姿勢を検出してもよい。また、上述した実施例では、左コントローラ3や右コントローラ4を用いた操作に応じたゲーム画像を据置型モニタ6に表示しているが、本体装置2のディスプレイ12に表示してもよい。また、プレイヤキャラクタPCの動作を制御するためのコントローラは、左コントローラ3または右コントローラ4だけでなく、他のコントローラでもよい。
また、付加装置(例えば、クレードル)は、本体装置2を着脱可能な任意の付加装置であってよい。付加装置は、本実施形態のように、本体装置2に対する充電を行う機能を有していてもよいし、有していなくてもよい。
また、ゲームシステム1は、どのような装置であってもよく、携帯型のゲーム装置、任意の携帯型電子機器(PDA(Personal Digital Assistant)、携帯電話、パーソナルコンピュータ、カメラ、タブレット等)等であってもよい。
また、上述した説明では情報処理(ゲーム処理)をゲームシステム1でそれぞれ行う例を用いたが、上記処理ステップの少なくとも一部を他の装置で行ってもかまわない。例えば、ゲームシステム1がさらに他の装置(例えば、別のサーバ、他の画像表示装置、他のゲーム装置、他の携帯端末)と通信可能に構成されている場合、上記処理ステップは、さらに当該他の装置が協働することによって実行してもよい。このように、上記処理ステップの少なくとも一部を他の装置で行うことによって、上述した処理と同様の処理が可能となる。また、上述した情報処理(ゲーム処理)は、少なくとも1つの情報処理装置により構成される情報処理システムに含まれる1つのプロセッサまたは複数のプロセッサ間の協働により実行されることが可能である。また、上記実施例においては、ゲームシステム1のプロセッサ81が所定のプログラムを実行することによって情報処理を行うことが可能であるが、ゲームシステム1が備える専用回路によって上記処理の一部または全部が行われてもよい。
ここで、上述した変形例によれば、いわゆるクラウドコンピューティングのシステム形態や分散型の広域ネットワークおよびローカルネットワークのシステム形態でも本発明を実現することが可能となる。例えば、分散型のローカルネットワークのシステム形態では、据置型の情報処理装置(据置型のゲーム装置)と携帯型の情報処理装置(携帯型のゲーム装置)との間で上記処理を協働により実行することも可能となる。なお、これらのシステム形態では、上述した処理をどの装置で行うかについては特に限定されず、どのような処理分担をしたとしても本発明を実現できることは言うまでもない。
また、上述した情報処理で用いられる処理順序、設定値、判定に用いられる条件等は、単なる一例に過ぎず他の順序、値、条件であっても、本実施例を実現できることは言うまでもない。
また、上記プログラムは、外部メモリ等の外部記憶媒体を通じてゲームシステム1に供給されるだけでなく、有線または無線の通信回線を通じて当該装置に供給されてもよい。また、上記プログラムは、当該装置内部の不揮発性記憶装置に予め記録されていてもよい。なお、上記プログラムを記憶する情報記憶媒体としては、不揮発性メモリの他に、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープ、などでもよい。また、上記プログラムを記憶する情報記憶媒体としては、上記プログラムを記憶する揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施例の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。