以下、本実施形態の一例に係る情報処理プログラム、情報処理システム、情報処理装置、および情報処理方法について説明する。本実施形態における情報処理システムの一例となるゲームシステム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は、ユーザが入力を行うための操作部を備える装置である。なお、本実施形態においては、ゲームシステム1の主面の長手方向を横方向(左右方向とも言う)と呼び、当該主面の短手方向を縦方向(上下方向とも言う)と呼び、主面に垂直な方向を奥行方向(前後方向とも言う)と呼ぶこととする。また、ゲームシステム1における方向をわかりやすくするために、ゲームシステム1に対する3軸(xyz軸)方向を定義する。具体的には、図1に示すように、ゲームシステム1においてディスプレイ12が設けられている前面から背面に向かうディスプレイ12の奥行方向をz軸正方向とし、当該奥行方向に対して垂直な横方向において右から左に向かう方向(右コントローラ4の装着位置から左コントローラ3の装着位置に向かう方向)をx軸正方向とし、当該奥行方向および当該横方向に対して垂直な上下方向において下から上に向かうディスプレイ12に沿った方向をy軸正方向とする。
図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へ出力される。
通信制御部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の各入力部と同様の機能を有し、同様に動作する。
また、右コントローラ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単体を装着することによって据置型モニタに画像(および音声)を出力可能である。以下、左コントローラ3および右コントローラ4を本体装置2から取り外した状態で、クレードルに本体装置2単体を装着することによって据置型モニタに画像(および音声)を出力する利用態様におけるゲームシステムと、左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置の状態でディスプレイ12に画像(および音声)を出力する利用態様におけるゲームシステムとを用いて説明する。
上述のように、本実施形態においては、左コントローラ3および右コントローラ4を本体装置2から外した状態(「離脱状態」と呼ぶ)でゲームシステム1を利用することが可能である。離脱状態でゲームシステム1を利用してアプリケーション(例えば、ゲームアプリケーション)に対する操作を行う場合の態様としては、1人のユーザが左コントローラ3および右コントローラ4の両方を用いる態様が考えられる。なお、1人のユーザが左コントローラ3および右コントローラ4の両方を用いる場合、左コントローラ3と右コントローラ4とを接合して1つの操作装置として機能させる付属機器(例えば、後述する拡張グリップ210)を用いることも可能である。また、離脱状態でゲームシステム1を利用してアプリケーション(例えば、ゲームアプリケーション)に対する操作を行う場合の他の態様としては、1人のユーザが左コントローラ3および右コントローラ4の一方を用いる態様が考えられる。なお、当該利用態様によって複数のユーザが同じアプリケーションを用いて操作する場合は、複数のユーザが左コントローラ3および右コントローラ4の一方をそれぞれ用いる態様や、左コントローラ3および右コントローラ4の組を複数組用意してそれぞれのユーザが当該複数組のうちの1組を用いる態様等が考えられる。
図8〜図10は、離脱状態において、1人のユーザが左コントローラ3および右コントローラ4の組を把持してゲームシステム1を利用する様子の一例を示す図である。図8〜図10に示すように、離脱状態において、ユーザは、左コントローラ3を左手で把持し、右コントローラ4を右手で把持して操作を行いながら、据置型モニタ6に表示された画像を見ることができる。
例えば、本実施例では、ユーザは、縦長の略板状である左コントローラ3の長手方向の下方向(図1に示す下方向(y軸負方向))が鉛直方向になるとともに、本体装置2に装着された際に当該本体装置2と接する側面が前方に向き、かつ、左コントローラ3の主面(アナログスティック32等が設けられる面)が右に向くように左コントローラ3を左手で把持する。つまり、ユーザの左手によって把持されている左コントローラ3は、x軸負方向がユーザの前方を向き、z軸正方向が左を向いた状態となる。また、ユーザは、縦長の略板状である右コントローラ4の長手方向の下方向(図1に示す上下方向(y軸負方向))が鉛直方向になるとともに、本体装置2に装着された際に当該本体装置2と接する側面が前方に向き、かつ、右コントローラ4の主面(アナログスティック52等が設けられる面)が左に向くように右コントローラ4を右手で把持する。つまり、ユーザの右手によって把持されている右コントローラ4は、x軸正方向がユーザの前方を向き、z軸正方向が右を向いた状態となる。
このように、左手で左コントローラ3を把持し右手で右コントローラ4を把持した状態(以下、このような使用態様を縦持ち操作方式として、当該方向に把持された左コントローラ3および右コントローラ4の姿勢を基本姿勢と記載することがある)から、各コントローラを上下左右前後に動かしたり、各コントローラを回転させたり、各コントローラを振り動かしたりすることによって、各コントローラの動きや姿勢に応じてゲームプレイが行われる。そして、上記ゲームプレイにおいて、左コントローラ3の加速度センサ104は、上記xyz軸方向の加速度をそれぞれ操作入力として検出可能であり、角速度センサ105は、上記xyz軸方向周りの角速度をそれぞれ操作入力として検出可能である。また、右コントローラ4の加速度センサ114は、上記xyz軸方向の加速度をそれぞれ操作入力として検出可能であり、角速度センサ115は、上記xyz軸方向周りの角速度をそれぞれ操作入力として検出可能である。さらに、上記縦持ち操作では、ユーザの左手の親指によって第1Lボタン38を押下する操作が可能となり、ユーザの右手の親指によって第1Rボタン60を押下する操作が可能となり、当該ボタン操作によるゲームプレイも行われる。
また、本実施例では、左コントローラ3および右コントローラ4を把持してゲームプレイする場合、当該ゲーム状況に応じて、左コントローラ3および/または右コントローラ4に振動が与えられる。上述したように、左コントローラ3は、振動子107を有しており、右コントローラ4は、振動子117を有している。本体装置2のプロセッサ81は、実行しているゲーム状況に応じて振動データを左コントローラ3および/または右コントローラ4に送信することによって、当該振動データに応じた振幅および周波数で振動子107および/または振動子117を振動させることができる。
図11〜図13は、左コントローラ3および右コントローラ4を動かすことによってプレイするゲームにおいて表示されるゲーム画像例を示す図である。図11に示すように、本ゲーム例では、プレイヤオブジェクトPOと敵オブジェクトEOとが対戦するゲーム(例えば、ボクシングゲーム)の画像が据置型モニタ6に表示される。そして、左コントローラ3および右コントローラ4を操作するユーザは、左コントローラ3本体および/または右コントローラ4本体を振り動かしたり、左コントローラ3本体および/または右コントローラ4本体の姿勢を変化させたり、操作ボタン(例えば、第1Lボタン38や第1Rボタン60)を押下したりすることによって、プレイヤオブジェクトPOを操作することができる。
例えば、左コントローラ3を振り動かすことによってプレイヤオブジェクトPOの左グラブ(左拳)を模した第1オブジェクトG1の動作を制御することができ、右コントローラ4を振り動かすことによってプレイヤオブジェクトPOの右グラブ(右拳)を模した第2オブジェクトG2の動作を制御することができる。具体的には、ユーザが左コントローラ3を把持している左手を用いて左パンチを繰り出すように振る操作を行った場合、敵オブジェクトEOが配置されている場所に向かってプレイヤオブジェクトPOの左グラブを模した第1オブジェクトG1が移動する。また、ユーザが右コントローラ4を把持している右手を用いて右パンチを繰り出すように振る操作を行った場合、敵オブジェクトEOが配置されている場所に向かってプレイヤオブジェクトPOの右グラブを模した第2オブジェクトG2が移動する。
具体的には、左コントローラ3および右コントローラ4の何れも動かしていない状態(図11に示す状態)から、右コントローラ4を前方(右コントローラ4のx軸正方向)に押し出すように振り動かした場合、図12に示すように右コントローラ4の動きに応じてプレイヤオブジェクトPOの第2オブジェクトG2が敵オブジェクトEOに向かって移動する。これによって、敵オブジェクトEOに対してプレイヤオブジェクトPOが右パンチを繰り出したようなゲーム画像が表示される。また、左コントローラ3および右コントローラ4の何れも動かしていない状態から、左コントローラ3を前方(左コントローラ3のx軸負方向)に押し出すように振り動かした場合、左コントローラ3の動きに応じてプレイヤオブジェクトPOの第1オブジェクトG1が敵オブジェクトEOに向かって移動する。これによって、敵オブジェクトEOに対してプレイヤオブジェクトPOが左パンチを繰り出したようなゲーム画像が表示される。
ここで、第1オブジェクトG1が移動開始する際の移動方向は、左コントローラ3を押し出すように振り動かした際の左コントローラ3の姿勢によって設定される。また、第2オブジェクトG2が移動開始する際の移動方向は、右コントローラ4を押し出すように動かした際の右コントローラ4の姿勢によって設定される。例えば、図12に示したように、右コントローラ4がx軸正方向に移動した場合、当該移動における右コントローラ4のロール方向の姿勢に応じて第2オブジェクトG2の移動方向が設定される。一例として、本実施例では、右コントローラ4が移動している期間において、実空間において重力加速度が作用している方向を基準とした右コントローラ4のy軸方向の傾きを算出し、当該y軸方向の傾きに基づいて第2オブジェクトG2の移動方向を算出している。具体的には、右コントローラ4が上記基準姿勢に対して右方向にロール回転した姿勢であることを上記y軸方向の傾きが示す場合、仮想空間の右方向に向かって第2オブジェクトG2が移動する。また、右コントローラ4が上記基準姿勢に対して左方向にロール回転した姿勢であることを上記y軸方向の傾きが示す場合、仮想空間の左方向に向かって第2オブジェクトG2が移動する。そして、それぞれ右方向または左方向に移動方向がずれる角度については、上記y軸方向の傾き角度に応じてそれぞれ算出される。
また、本ゲーム例では、仮想空間においてプレイヤオブジェクトPOと敵オブジェクトEOとの距離が相対的に遠い場合であってもパンチを繰り出すことが可能であり、プレイヤオブジェクトPOの腕が伸びることによって、第1オブジェクトG1および第2オブジェクトG2が相対的に長い距離を移動することができる。そして、第1オブジェクトG1または第2オブジェクトG2は、他のオブジェクト(例えば、敵オブジェクトEO)と衝突するか所定の距離移動した後に移動を終了し、当該第1オブジェクトG1および第2オブジェクトG2がそれぞれ移動開始した移動開始位置(例えば、図11に示すプレイヤオブジェクトPOの手元)まで戻る。第1オブジェクトG1および第2オブジェクトG2が移動開始位置まで戻ることによって、敵オブジェクトEOに向かう次の移動が可能となる。言い換えると、次のパンチを出すことができるようになる。したがって、上記移動開始位置から第1オブジェクトG1または第2オブジェクトG2が移動を開始してから再び当該移動開始位置まで戻るまでの時間が一般的なボクシングゲームより相対的に長くなる。
本ゲーム例では、このような移動時間を利用して、第1オブジェクトG1または第2オブジェクトG2が移動中(典型的には、敵オブジェクトEOの方向へ移動している期間)であっても、左コントローラ3または右コントローラ4の姿勢や動きに応じて移動する軌道を変化させることができる。例えば、上述した第1オブジェクトG1または第2オブジェクトG2の移動開始時の左コントローラ3または右コントローラ4の姿勢から左コントローラ3または右コントローラ4がロール方向に回転した場合やヨー方向に回転した場合、当該回転に応じて第1オブジェクトG1または第2オブジェクトG2の軌道を変化させる。
一例として、本実施例では、第1オブジェクトG1または第2オブジェクトG2の移動開始後の左コントローラ3または右コントローラ4のx軸周りの回転速度(角速度)を上記ロール方向の回転として、当該x軸周りの回転速度に基づいて移動中の第1オブジェクトG1または第2オブジェクトG2の軌道を変化させる。具体的には、第1オブジェクトG1が移動中に左コントローラ3がx軸を中心として右方向にロール回転した回転速度が得られた場合、仮想空間の右方向に第1オブジェクトG1の軌道を変化させ、左コントローラ3がx軸を中心として左方向にロール回転した回転速度が得られた場合、仮想空間の左方向に第1オブジェクトG1の軌道を変化させる。また、第2オブジェクトG2が移動中に右コントローラ4がx軸を中心として右方向にロール回転した回転速度が得られた場合、仮想空間の右方向に第2オブジェクトG2の軌道を変化させ、右コントローラ4がx軸を中心として左方向にロール回転した回転速度が得られた場合、仮想空間の左方向に第2オブジェクトG2の軌道を変化させる。
他の例として、本実施例では、第1オブジェクトG1または第2オブジェクトG2の移動開始後の左コントローラ3または右コントローラ4の実空間の重力方向周りの回転速度(角速度)を上記ヨー方向の回転として、当該回転速度に基づいて移動中の第1オブジェクトG1または第2オブジェクトG2の軌道を変化させる。具体的には、第1オブジェクトG1が移動中に左コントローラ3が重力方向を中心として右方向にヨー回転した回転速度が得られた場合、仮想空間の右方向に第1オブジェクトG1の軌道を変化させ、左コントローラ3が重力方向を中心として左方向にヨー回転した回転速度が得られた場合、仮想空間の左方向に第1オブジェクトG1の軌道を変化させる。また、第2オブジェクトG2が移動中に右コントローラ4が重力方向を中心として右方向にヨー回転した回転速度が得られた場合、仮想空間の右方向に第2オブジェクトG2の軌道を変化させ、右コントローラ4が重力方向を中心として左方向にヨー回転した回転速度が得られた場合、仮想空間の左方向に第2オブジェクトG2の軌道を変化させる。
また、本ゲーム例では、左コントローラ3または右コントローラ4が振り動かされたか否かの判定を、左コントローラ3または右コントローラ4に生じた加速度の大きさを用いて行う。そして、第1オブジェクトG1が上記移動開始位置に配置されている状態において左コントローラ3が上記x軸負方向に振り動かされたと判定された場合、当該移動開始位置から敵オブジェクトEOに向かって第1オブジェクトG1が移動を開始する。また、第2オブジェクトG2が上記移動開始位置に配置されている状態において右コントローラ4が上記x軸正方向に振り動かされたと判定された場合、当該移動開始位置から敵オブジェクトEOに向かって第2オブジェクトG2が移動を開始する。
また、本ゲーム例では、第1オブジェクトG1および第2オブジェクトG2の一方が上記移動開始位置から移動開始して移動中であっても、第1オブジェクトG1および第2オブジェクトG2の他方も上記移動開始位置から移動開始させることができる。例えば、図13に示すように、ユーザが右コントローラ4を前方(右コントローラ4のx軸正方向)に押し出すように振り動かすことによって、第2オブジェクトG2が敵オブジェクトEOに向かって移動開始する。その後、第2オブジェクトG2の移動中に、ユーザが左コントローラ3を前方(左コントローラ3のx軸負方向)に押し出すように振り動かすことによって、第1オブジェクトG1も敵オブジェクトEOに向かって移動開始する。したがって、図13に例示した据置型モニタ6には、第1オブジェクトG1および第2オブジェクトG2の両方が敵オブジェクトEOに向かって移動するゲーム画像が表示されている。また、図13には、先行して移動開始した第2オブジェクトG2が敵オブジェクトEOに衝突(ヒット)しているゲーム画像が例示されている。
ここで、本ゲーム例では、仮想ゲーム世界における第1オブジェクトG1および/または第2オブジェクトG2の状況に応じて、左コントローラ3および/または右コントローラ4に振動が与えられる。一例として、本ゲーム例では、第1オブジェクトG1が仮想ゲーム世界を移動する場合、第1オブジェクトG1の種類、移動速度、移動方向、衝突状況等に応じた振動が左コントローラ3に与えられる。また、第2オブジェクトG2が仮想ゲーム世界を移動する場合、第2オブジェクトG2の種類、移動速度、移動方向、衝突状況等に応じた振動が右コントローラ4に与えられる。
例えば、図12に示した例では、ユーザが右コントローラ4を前方(右コントローラ4のx軸正方向)に押し出すように振り動かすことによって、第2オブジェクトG2が敵オブジェクトEOに向かって仮想ゲーム世界を移動しており、当該移動に応じた振動が右コントローラ4のみに与えられている。また、図13に示した例では、第2オブジェクトG2の移動中に、ユーザが左コントローラ3を前方(左コントローラ3のx軸負方向)に押し出すように振り動かすことによって、第1オブジェクトG1も敵オブジェクトEOに向かって仮想ゲーム世界を移動しており、当該移動に応じた振動が左コントローラ3のみに与えられている。その一方で、第2オブジェクトG2が仮想ゲーム世界において敵オブジェクトEOに衝突(ヒット)したため、当該衝突に応じた振動が右コントローラ4のみに与えられている。このように、左コントローラ3および右コントローラ4には、それぞれの第1オブジェクトG1および第2オブジェクトG2の移動状況に応じて独立した別の振動が与えられるため、ユーザは、リアリティのある振動をそれぞれのコントローラから与えられることになる。
また、本ゲーム例では、左コントローラ3および右コントローラ4の両方の動きや姿勢に応じて、仮想空間内でプレイヤオブジェクトPOを移動させたり、動作させたりすることができる。例えば、左コントローラ3および右コントローラ4の両方が実空間のピッチ方向に回転した場合やロール方向に回転した場合、当該回転した傾きに応じてプレイヤオブジェクトPOを移動させる。具体的には、実空間の重力方向を基準とする左コントローラ3のx軸方向およびy軸方向の傾きと右コントローラ4のx軸方向およびy軸方向の傾きとをそれぞれ算出する。そして、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が前方に傾く姿勢になっていると判定された場合、左コントローラ3および右コントローラ4の両方が当該前方へ傾いている角度(例えば、当該角度の平均値)に応じた移動量でプレイヤオブジェクトPOを仮想ゲーム世界の前方へ移動させる。また、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が後方に傾く姿勢になっていると判定された場合、左コントローラ3および右コントローラ4の両方が当該後方へ傾いている角度(例えば、当該角度の平均値)に応じた移動量でプレイヤオブジェクトPOを仮想ゲーム世界の後方へ移動させる。また、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が左に傾く姿勢になっていると判定された場合、左コントローラ3および右コントローラ4の両方が当該左へ傾いている角度(例えば、当該角度の平均値)に応じた移動量でプレイヤオブジェクトPOを仮想ゲーム世界の左へ移動させる。また、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が右に傾く姿勢になっていると判定された場合、左コントローラ3および右コントローラ4の両方が当該右へ傾いている角度(例えば、当該角度の平均値)に応じた移動量でプレイヤオブジェクトPOを仮想ゲーム世界の右へ移動させる。また、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が内側へ傾く姿勢になっていると判定された場合、仮想ゲーム世界においてプレイヤオブジェクトPOが敵オブジェクトEOからの攻撃を防御する動作を行う。
さらに、本ゲーム例では、左コントローラ3および右コントローラ4の操作ボタンに対する操作に応じて、仮想空間内でプレイヤオブジェクトPOを移動させたり、動作させたりすることができる。例えば、左コントローラ3の第1Lボタン38が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがダッシュして移動(高速移動)する。また、右コントローラ4の第1Rボタン60が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがジャンプする。
また、本実施例では、左コントローラ3と右コントローラ4とを接合して1つの操作装置として機能させるアタッチメント(付属機器)を用いて上記ゲームをプレイすることも可能である。
図14は、左コントローラ3および右コントローラ4を装着可能な付属機器の一例を示す図である。図14に示すように、付属機器の一例である拡張グリップ210は、ユーザがそれを用いて操作を行うための付属機器である。拡張グリップ210は、左コントローラ3を装着可能であり、また、右コントローラ4を装着可能である。したがって、拡張グリップ210によって、ユーザは、本体装置2から外した2つのコントローラ3および4を一体として把持して操作(以下、このような使用態様を拡張グリップ操作方式と記載することがある)を行うことができる。
拡張グリップ210は、左コントローラ3および右コントローラ4をそれぞれ装着するための機構として、本体装置2が有する機構と同様の機構を有している。したがって、本体装置2に装着する場合と同様にして、左コントローラ3および右コントローラ4を拡張グリップ210に装着することができる。具体的には、拡張グリップ210は、所定幅の本体部を挟んで左右両側に左コントローラ3および右コントローラ4をそれぞれ装着するための機構が設けられており、左コントローラ3および右コントローラ4を装着するレール部材がそれぞれ平行に設けられている。これによって、左コントローラ3および右コントローラ4は、それぞれのxyz軸方向が平行となるように拡張グリップ210に取り付けられることになる。そして、ユーザは、拡張グリップ210に装着されて一体となった左コントローラ3および右コントローラ4を両手で把持する。これによって、ユーザは、本体装置2から外した2つの左コントローラ3および右コントローラ4を一体として把持することができる。
このような拡張グリップ210によって一体となった左コントローラ3および右コントローラ4を用いて上記ゲームをプレイする場合、左コントローラ3および右コントローラ4に設けられた各操作ボタンやスティックが用いられて操作される。例えば、右コントローラ4のBボタン54が押下操作された場合、プレイヤオブジェクトPOが左パンチを繰り出して第1オブジェクトG1が移動開始する。右コントローラ4のAボタン53が押下操作された場合、プレイヤオブジェクトPOが右パンチを繰り出して第2オブジェクトG2が移動開始する。仮想ゲーム世界において第1オブジェクトG1および/または第2オブジェクトG2が移動中に左コントローラ3のアナログスティック32が傾倒操作された場合、傾倒操作された方向および傾倒角度に応じて、移動中の第1オブジェクトG1および/または第2オブジェクトG2の移動方向が変化する。第1オブジェクトG1および第2オブジェクトG2が何れも移動開始位置に配置されている場合に左コントローラ3のアナログスティック32が傾倒操作された場合、傾倒操作された方向および傾倒角度に応じて、仮想ゲーム世界においてプレイヤオブジェクトPOが移動する。また、第1オブジェクトG1および第2オブジェクトG2が何れも移動開始位置に配置されている場合に左コントローラ3のアナログスティック32が押し込まれる操作が行われた場合、仮想ゲーム世界においてプレイヤオブジェクトPOが敵オブジェクトEOからの攻撃を防御する。右コントローラ4のXボタン55が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがジャンプする動作を行う。そして、右コントローラ4のYボタン56が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがダッシュ(高速移動)する。
拡張グリップ210を用いてゲームプレイする場合であっても、仮想ゲーム世界における第1オブジェクトG1および/または第2オブジェクトG2の状況に応じて、拡張グリップ210に装着された左コントローラ3および/または右コントローラ4に振動が与えられる。一例として、拡張グリップ210を用いてゲームプレイする場合も、第1オブジェクトG1が仮想ゲーム世界を移動する場合、第1オブジェクトG1の種類、移動速度、移動方向、衝突状況等に応じた振動が拡張グリップ210に装着された左コントローラ3に与えられる。また、第2オブジェクトG2が仮想ゲーム世界を移動する場合、第2オブジェクトG2の種類、移動速度、移動方向、衝突状況等に応じた振動が拡張グリップ210に装着された右コントローラ4に与えられる。
例えば、図14に示した例では、ユーザが右コントローラ4のAボタン53を押下することによって、第2オブジェクトG2が敵オブジェクトEOに向かって仮想ゲーム世界を移動しており、当該移動に応じた振動が拡張グリップ210に装着された右コントローラ4に与えられている。さらに、第2オブジェクトG2の移動中に、ユーザが右コントローラ4のBボタン54を押下することによって、第1オブジェクトG1も敵オブジェクトEOに向かって仮想ゲーム世界を移動しており、当該移動に応じた振動が拡張グリップ210に装着された左コントローラ3にも与えられている。その一方で、第2オブジェクトG2が仮想ゲーム世界において敵オブジェクトEOに衝突(ヒット)したため、当該衝突に応じた振動が拡張グリップ210に装着された右コントローラ4に与えられている。このように、拡張グリップ210に装着された左コントローラ3および右コントローラ4であっても、それぞれの第1オブジェクトG1および第2オブジェクトG2の移動状況に応じて独立した別の振動が与えられるため、ユーザは、リアリティのある振動をそれぞれのコントローラから与えられることになる。なお、後述により明らかとなるが、拡張グリップ操作方式において左コントローラ3および/または右コントローラ4に与えられる振動の大きさ(振幅)は、上述した縦持ち操作方式において左コントローラ3および/または右コントローラ4に与えられる振動の大きさ(振幅)より相対的に小さく調整される。
図15は、離脱状態において、1人のユーザが左コントローラ3および右コントローラ4の一方を把持してゲームシステム1を利用する様子の一例を示す図である。図15に示すように、離脱状態において、ユーザは、例えば左コントローラ3を両手で把持して操作を行いながら、据置型モニタ6に表示された画像を見ることができる。
例えば、本実施例では、ユーザは、縦長の略板状である左コントローラ3の長手方向(図1に示すy軸方向)が横方向になるとともに、本体装置2に装着された際に当該本体装置2と接する側面が前方に向き、かつ、左コントローラ3の主面(アナログスティック32等が設けられる面)が上方を向くように左コントローラ3を両手で把持する。つまり、ユーザの両手によって把持されている左コントローラ3は、y軸正方向がユーザの左方向となり、x軸負方向がユーザの前方を向き、z軸正方向が下方を向いた状態となる。なお、ユーザは、縦長の略板状である右コントローラ4を両手で把持する場合、縦長の略板状である右コントローラ4の長手方向(図1に示すy軸方向)が横方向になるとともに、本体装置2に装着された際に当該本体装置2と接する側面が前方に向き、かつ、右コントローラ4の主面(アナログスティック52等が設けられる面)が上方を向くように把持する。
このように、両手で左コントローラ3および右コントローラ4の一方を把持した状態(以下、このような使用態様を横持ち操作方式と記載することがある)で、当該一方のコントローラの操作ボタンやスティックを操作することによって、ゲームプレイが行われる。例えば、上記横持ち操作では、ユーザの左手を上記一方のコントローラの上面(図1に示すy軸正方向側の側面)に添え、ユーザの右手を上記一方のコントローラの下面(図1に示すy軸負方向側の側面)に添えた状態となる。したがって、上記横持ち操作では、把持するコントローラの主面に設けられた各操作ボタンやスティックを用いた操作が可能となる。また、上記横持ち操作では、把持するコントローラが本体装置2に装着された際に当該本体装置2と接する側面に設けられた操作ボタン(例えば、第2Lボタン43、第2Rボタン44、第2Lボタン65、第2Rボタン66等)を用いた操作が可能となる。
一例として、ユーザが左コントローラ3を両手で把持して横持ち操作する場合、左コントローラ3に設けられた各操作ボタンやスティックが用いられて操作される。例えば、左コントローラ3の左方向ボタン36が押下操作された場合、プレイヤオブジェクトPOが左パンチを繰り出して第1オブジェクトG1が移動開始する。左コントローラ3の下方向ボタン34が押下操作された場合、プレイヤオブジェクトPOが右パンチを繰り出して第2オブジェクトG2が移動開始する。仮想ゲーム世界において第1オブジェクトG1および/または第2オブジェクトG2が移動中に左コントローラ3のアナログスティック32が傾倒操作された場合、傾倒操作された方向および傾倒角度に応じて、移動中の第1オブジェクトG1および/または第2オブジェクトG2の移動方向が変化する。第1オブジェクトG1および第2オブジェクトG2が何れも移動開始位置に配置されている場合に左コントローラ3のアナログスティック32が傾倒操作された場合、傾倒操作された方向および傾倒角度に応じて、仮想ゲーム世界においてプレイヤオブジェクトPOが移動する。また、第1オブジェクトG1および第2オブジェクトG2が何れも移動開始位置に配置されている場合に左コントローラ3のアナログスティック32が押し込まれる操作が行われた場合、仮想ゲーム世界においてプレイヤオブジェクトPOが敵オブジェクトEOからの攻撃を防御する。左コントローラ3の右方向ボタン33が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがジャンプする動作を行う。そして、左コントローラ3の上方向ボタン35が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがダッシュ(高速移動)する。
他の例として、ユーザが右コントローラ4を両手で把持して横持ち操作する場合、右コントローラ4に設けられた各操作ボタンやスティックが用いられて操作される。例えば、右コントローラ4のAボタン53が押下操作された場合、プレイヤオブジェクトPOが左パンチを繰り出して第1オブジェクトG1が移動開始する。右コントローラ4のXボタン55が押下操作された場合、プレイヤオブジェクトPOが右パンチを繰り出して第2オブジェクトG2が移動開始する。仮想ゲーム世界において第1オブジェクトG1および/または第2オブジェクトG2が移動中に右コントローラ4のアナログスティック52が傾倒操作された場合、傾倒操作された方向および傾倒角度に応じて、移動中の第1オブジェクトG1および/または第2オブジェクトG2の移動方向が変化する。第1オブジェクトG1および第2オブジェクトG2が何れも移動開始位置に配置されている場合に右コントローラ4のアナログスティック52が傾倒操作された場合、傾倒操作された方向および傾倒角度に応じて、仮想ゲーム世界においてプレイヤオブジェクトPOが移動する。また、第1オブジェクトG1および第2オブジェクトG2が何れも移動開始位置に配置されている場合に右コントローラ4のアナログスティック52が押し込まれる操作が行われた場合、仮想ゲーム世界においてプレイヤオブジェクトPOが敵オブジェクトEOからの攻撃を防御する。右コントローラ4のYボタン56が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがジャンプする動作を行う。そして、右コントローラ4のBボタン54が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがダッシュ(高速移動)する。
また、本実施例では、横持ち操作方式によって左コントローラ3および右コントローラ4の一方を把持してゲームプレイする場合も、当該ゲーム状況に応じて、把持している左コントローラ3および右コントローラ4の一方に振動が与えられる。上述したように、左コントローラ3は、振動子107を有しており、右コントローラ4は、振動子117を有している。本体装置2のプロセッサ81は、実行しているゲーム状況に応じて振動データを左コントローラ3および右コントローラ4の一方に送信することによって、当該振動データに応じた振幅および周波数で振動子107または振動子117を振動させることができる。なお、後述により明らかとなるが、横持ち操作方式によって1つのコントローラを用いてゲームプレイする場合は、2つのコントローラを用いてゲームプレイする場合にそれぞれのコントローラに与えられていた振動を1つに合成して、当該1つのコントローラに与えられる。そして、横持ち操作方式において合成される振動の大きさ(振幅)は、上述した縦持ち操作方式において左コントローラ3および/または右コントローラ4に与えられる振動の大きさ(振幅)より相対的に小さく調整され、当該調整された振動データを用いて合成処理が行われる。
また、本実施例では、左コントローラ3と右コントローラ4とを本体装置2に装着した一体型装置として上記ゲームをプレイすることも可能である。
図16は、左コントローラ3および右コントローラ4を本体装置2に装着して操作(以下、このような使用態様を携帯機モード操作方式と記載することがある)する様子の一例を示す図である。図16に示すように、携帯機モード操作方式によってゲームプレイする場合、上述したゲーム画像は、本体装置2のディスプレイ12に表示される。
このような携帯機モード操作方式に基づいて一体型装置を用いて上記ゲームをプレイする場合、左コントローラ3および右コントローラ4に設けられた各操作ボタンやスティックが用いられて操作される。例えば、携帯機モード操作方式において、各操作ボタンやスティックが用いた操作に応じたプレイヤオブジェクトPOの動作は、上述した拡張グリップ操作方式と同じにしてもよく、ここでは具体例の記述を省略する。
上記一体型装置を用いてゲームプレイする場合であっても、仮想ゲーム世界における第1オブジェクトG1および/または第2オブジェクトG2の状況に応じて、本体装置2に装着された左コントローラ3および/または右コントローラ4に振動が与えられる。一例として、上記一体型装置を用いてゲームプレイする場合も、第1オブジェクトG1が仮想ゲーム世界を移動する場合、第1オブジェクトG1の種類、移動速度、移動方向、衝突状況等に応じた振動が拡張グリップ210に装着された左コントローラ3に与えられる。また、第2オブジェクトG2が仮想ゲーム世界を移動する場合、第2オブジェクトG2の種類、移動速度、移動方向、衝突状況等に応じた振動が拡張グリップ210に装着された右コントローラ4に与えられる。
例えば、図16に示した例でも、ユーザが右コントローラ4のAボタン53を押下することによって、第2オブジェクトG2が敵オブジェクトEOに向かって仮想ゲーム世界を移動しており、当該移動に応じた振動が拡張グリップ210に装着された右コントローラ4に与えられている。さらに、第2オブジェクトG2の移動中に、ユーザが右コントローラ4のBボタン54を押下することによって、第1オブジェクトG1も敵オブジェクトEOに向かって仮想ゲーム世界を移動しており、当該移動に応じた振動が拡張グリップ210に装着された左コントローラ3にも与えられている。その一方で、第2オブジェクトG2が仮想ゲーム世界において敵オブジェクトEOに衝突(ヒット)したため、当該衝突に応じた振動が拡張グリップ210に装着された右コントローラ4に与えられている。このように、拡張グリップ210に装着された左コントローラ3および右コントローラ4であっても、それぞれの第1オブジェクトG1および第2オブジェクトG2の移動状況に応じて独立した別の振動が与えられるため、ユーザは、リアリティのある振動をそれぞれのコントローラから与えられることになる。なお、後述により明らかとなるが、携帯機モード操作方式において左コントローラ3および/または右コントローラ4に与えられる振動の大きさ(振幅)も、上述した縦持ち操作方式において左コントローラ3および/または右コントローラ4に与えられる振動の大きさ(振幅)より相対的に小さく調整される。
図17は、上述した操作方式(縦持ち操作方式、拡張グリップ操作方式、横持ち操作方式、携帯機モード操作方式)毎の操作内容に対するプレイヤオブジェクトPOの動作を示す操作対応テーブルの一例である。
図17から明らかなように、プレイヤオブジェクトPOに同じ動作を行わせたい場合であっても、操作方式が異なることによって異なる操作が必要とされる場合がある。例えば、プレイヤオブジェクトPOを前後左右に移動させたい場合、縦持ち操作方式では左コントローラ3および右コントローラ4を移動させたい方向に傾ける操作が必要となるが、拡張グリップ操作方式、携帯機モード操作方式、および横持ち操作方式ではスティックの傾倒操作が必要となる。また、プレイヤオブジェクトPOを前後左右に移動させたい場合、拡張グリップ操作方式および携帯機モード操作方式と右コントローラ4を用いる横持ち操作方式との間では、操作に用いるスティックが異なる。さらに、プレイヤオブジェクトPOを前後左右に移動させたい場合、拡張グリップ操作方式および携帯機モード操作方式と左コントローラ3を用いる横持ち操作方式との間では、アナログスティック32を傾倒させる方向が異なる。具体的には、プレイヤオブジェクトPOを左または右に移動させたい場合、拡張グリップ操作方式および携帯機モード操作方式ではアナログスティック32をx軸正方向またはx軸負方向へそれぞれ傾倒させる必要があるが、左コントローラ3を用いる横持ち操作方式ではアナログスティック32をy軸正方向またはy軸負方向へそれぞれ傾倒させる必要がある。また、プレイヤオブジェクトPOを前方または後方に移動させたい場合、拡張グリップ操作方式および携帯機モード操作方式ではアナログスティック32をy軸正方向またはy軸負方向へそれぞれ傾倒させる必要があるが、左コントローラ3を用いる横持ち操作方式ではアナログスティック32をx軸負方向またはx軸正方向へそれぞれ傾倒させる必要がある。また、これらの操作内容は、第1オブジェクトG1および/または第2オブジェクトG2の移動方向を変化させる場合も類似した相違がある。
また、プレイヤオブジェクトPOに左パンチまたは右パンチを繰り出す動作をさせる場合、縦持ち操作方式では左コントローラ3または右コントローラ4を振る操作が必要となるが、拡張グリップ操作方式、携帯機モード操作方式、および横持ち操作方式では上述したように割り当てられた操作ボタンを押下する操作が必要となる。そして、拡張グリップ操作方式および携帯機モード操作方式と横持ち操作方式との間でも、左パンチまたは右パンチを繰り出す動作をさせる場合に割り当てられた操作ボタンがそれぞれ異なっている。さらに、プレイヤオブジェクトPOにジャンプまたはダッシュする動作をさせる場合、各操作方式において割り当てられた操作ボタンがそれぞれ異なっている。
また、図17から明らかなように、左コントローラ3および/または右コントローラ4を用いて同じ操作を行ったとしても、操作方式が異なることによって対応するプレイヤオブジェクトPOの動作が異なることがある。例えば、拡張グリップ操作方式および携帯機モード操作方式においてアナログスティック32を傾倒操作する場合と左コントローラ3を用いる横持ち操作方式においてアナログスティック32を傾倒操作する場合とでは、スティックが傾倒する方向が同じ操作が行われてもプレイヤオブジェクトPOが移動する方向が異なることになる。また、拡張グリップ操作方式および携帯機モード操作方式においてBボタン54が押下操作された場合、プレイヤオブジェクトPOが左パンチを繰り出す動作を行うが、右コントローラ4を用いる横持ち操作方式においてBボタン54が押下操作された場合、プレイヤオブジェクトPOがダッシュする動作を行う。拡張グリップ操作方式および携帯機モード操作方式においてAボタン53が押下操作された場合、プレイヤオブジェクトPOが右パンチを繰り出す動作を行うが、右コントローラ4を用いる横持ち操作方式においてAボタン53が押下操作された場合、プレイヤオブジェクトPOが左パンチを繰り出す動作を行う。拡張グリップ操作方式および携帯機モード操作方式においてXボタン55が押下操作された場合、プレイヤオブジェクトPOがジャンプする動作を行うが、右コントローラ4を用いる横持ち操作方式においてXボタン55が押下操作された場合、プレイヤオブジェクトPOが右パンチを繰り出す動作を行う。そして、拡張グリップ操作方式および携帯機モード操作方式においてYボタン56が押下操作された場合、プレイヤオブジェクトPOがダッシュする動作を行うが、右コントローラ4を用いる横持ち操作方式においてYボタン56が押下操作された場合、プレイヤオブジェクトPOがジャンプする動作を行う。
また、本実施例では、縦持ち操作方式によって左コントローラ3および右コントローラ4の両方を把持してゲームプレイする場合、他の操作方式と比較して相対的に強い振動が左コントローラ3および右コントローラ4に与えられる。上述したように、左コントローラ3は、振動子107を有しており、右コントローラ4は、振動子117を有している。本体装置2のプロセッサ81は、実行しているゲーム状況に応じて振動データを左コントローラ3および/または右コントローラ4に送信することによって、当該振動データに応じた振幅および周波数で振動子107または振動子117を振動させることができる。そして、プロセッサ81は、操作方式に応じて適切な振動強度に調整した振動データを左コントローラ3および/または右コントローラ4に送信している。以下、図18〜図23を参照して、振動データを調整する方法について説明する。なお、図18は、各操作方式における振動の振幅を調整するための関数の一例を示す図である。図19は、縦持ち操作方式と振幅調整された携帯機モード操作方式との振幅の関係の一例を示す図である。図20は、縦持ち操作方式と振幅調整された横持ち操作方式との振幅の関係の一例を示す図である。図21は、縦持ち操作方式と振幅調整された操作グリップ操作方式との振幅の関係の一例を示す図である。図22は、他の振幅調整の一例を示す図である。図23は、高周波側および低周波側の振幅をそれぞれ調整する場合に用いられる調整モジュールの一例を示す図である。
図18において、本実施例においては、左コントローラ3および/または右コントローラ4に与える振動の強さ(典型的には、振幅の大きさ)をコントローラの操作方式に応じた関数を用いて変更し、振動の周波数については変更しない。具体的には、本実施例においては、振幅の大きさを変更する場合の関数(パラメータ)を、操作方式に応じて複数(第1のサブ関数および第2のサブ関数(係数aおよび上限値b)を用意する。
係数aは、調整前の振幅(入力振幅x)に乗算する係数を示している。したがって、振幅の大きさを調整して出力される調整後の振幅(出力振幅y)が
y=ax
となる関数(第1のサブ関数)によって調整されることを示している。一例として、係数aは、縦持ち操作方式においてa=1、横持ち操作方式においてa=0.35、携帯機モード操作方式においてa=0.45、拡張グリップ操作方式においてa=0.65に、それぞれ設定される。このような係数aが設定されることによって、縦持ち操作方式では入力振幅xがそのまま調整されずに出力振幅yとなるが、他の操作方式は何れも入力振幅xが小さく変換されて出力振幅yが縦持ち操作方式より振動が弱く調整される。
上限値bは、入力振幅の最大値や左コントローラ3および/または右コントローラ4に与える振動の振幅の最大値(出力振幅の最大値)が1の場合に、調整前の振幅(入力振幅x)がその値以下に変更される定数を示している。したがって、入力振幅xが上限値b以上である場合、振幅の大きさが調整されて出力される調整後の振幅(出力振幅y)が
y=b
となる関数(第2のサブ関数)によって調整されることを示している。一例として、上限値bは、縦持ち操作方式においてb=1、横持ち操作方式においてb=0.2、携帯機モード操作方式においてb=0.1、拡張グリップ操作方式においてb=0.4に、それぞれ設定される。このような上限値bが設定されることによって、縦持ち操作方式では入力振幅xがそのまま調整されずに出力振幅yとなるが、他の操作方式は何れも出力振幅yが上限値b以下に変換されて縦持ち操作方式より振動が弱く調整される。
本実施例では、y=ax(第1のサブ関数)によって算出される出力振幅yと、y=b(第2のサブ関数)によって算出される出力振幅yとを比較して、yの値が小さくなる方を出力振幅yとして採用する。例えば、図19に示すように、携帯機モード操作方式を用いて左コントローラ3および/または右コントローラ4に振動を与える場合、y=0.45x(第1のサブ関数)によって算出されるyの値が上限値0.1を超えるまで(入力振幅xが0〜A(約0.22)となる場合)は、y=0.45xで変換されたyの値が出力振幅yとして出力され、y=0.45xによって算出されるyの値が上限値0.1を超える場合(入力振幅xがA(約0.22)〜1となる場合)は、y=0.1の値が出力振幅yとして出力される。一方、縦持ち操作方式では、入力振幅xが調整されることなくそのまま出力振幅yとして出力されるため、結果的に携帯機モード操作方式においてコントローラに与えられる振幅の大きさは、縦持ち操作方式より小さく調整される。
また、図20に示すように、横持ち操作方式を用いて左コントローラ3または右コントローラ4に振動を与える場合、y=0.35x(第1のサブ関数)によって算出されるyの値が上限値0.2を超えるまで(入力振幅xが0〜B(約0.57)となる場合)は、y=0.35xで変換されたyの値が出力振幅yとして出力され、y=0.35xによって算出されるyの値が上限値0.2を超える場合(入力振幅xがB(約0.57)〜1となる場合)は、y=0.2の値が出力振幅yとして出力される。一方、縦持ち操作方式では、入力振幅xが調整されることなくそのまま出力振幅yとして出力されるため、結果的に横持ち操作方式においてコントローラに与えられる振幅の大きさは、縦持ち操作方式より小さく調整される。
また、図21に示すように、拡張グリップ操作方式を用いて左コントローラ3および/または右コントローラ4に振動を与える場合、y=0.65x(第1のサブ関数)によって算出されるyの値が上限値0.4を超えるまで(入力振幅xが0〜C(約0.62)となる場合)は、y=0.65xで変換されたyの値が出力振幅yとして出力され、y=0.65xによって算出されるyの値が上限値0.4を超える場合(入力振幅xがC(約0.62)〜1となる場合)は、y=0.4の値が出力振幅yとして出力される。一方、縦持ち操作方式では、入力振幅xが調整されることなくそのまま出力振幅yとして出力されるため、結果的に拡張グリップ操作方式においてコントローラに与えられる振幅の大きさは、縦持ち操作方式より小さく調整される。
なお、拡張グリップ操作方式において用いられる関数(パラメータ)は、上述した拡張グリップ210に左コントローラ3および右コントローラ4が装着されて操作される場合に用いられるが、他の付属機器に左コントローラ3および/または右コントローラ4が装着される場合や他の形状のコントローラを用いて操作させる場合にも用いられてもよい。すなわち、拡張グリップ操作方式において用いられる関数(パラメータ)は、上述した縦持ち操作方式、横持ち操作方式、および携帯機モード操作方式とは異なる他の操作方式(その他の操作方式)を用いて操作される場合に選択されてもよい。
また、上述した関数(パラメータ)とは異なる関数(パラメータ)を用いて、振幅を調整してもよい。例えば、図22に示すように、上限値bを設定することなく第1のサブ関数および第2のサブ関数を設定したり(関数f1)、上限値bを設定することなく1つの関数(例えば、(0,0)を通る対数関数、高次関数、三角関数等)を設定したり(関数f2)することによって、出力振幅yを調整してもよい。例えば、関数f1は、y=2x/3(第1のサブ関数)によって算出されるyの値が切替値0.4を超えるまで(入力振幅xが0〜D(約0.6)となる場合)は、y=2x/3で変換されたyの値が出力振幅yとして出力され、y=2x/3によって算出されるyの値が切替値0.4を超える場合(入力振幅xがD(約0.6)〜1となる場合)は、y=(x/4)+0.25の値が出力振幅yとして出力される。また、関数f2は、入力振幅xが大きくなるにしたがって、出力振幅yが大きくなる度合いが漸減的に小さくなる(0,0)を通る関数(例えば、対数関数)であり、入力振幅xがどのような値であっても(入力振幅xが0〜1となる全て)、当該関数f2によって算出されるyの値が出力振幅yとして出力される。
また、上述した例では、入力振幅に対して出力振幅を小さく調整しているが、操作方式に応じて入力振幅に対して出力振幅を大きく調整する関数(パラメータ)を用いてもかまわない。また、上述した例では、振幅の大きさを変更する場合に、操作方式に応じた第1のサブ関数および第2のサブ関数(係数aおよび上限値b)を用いているが、操作方式に対応して3つ以上のサブ関数(3つ以上のパラメータ)を設定してこれらのサブ関数(パラメータ)から選択されることによって振幅が調整されてもよい。さらに、上述した例では、振動の周波数とは無関係に振幅を調整しているが、振動データが示す特定の周波数の振幅や特定の周波数帯の振幅を調整する関数(パラメータ)を用いてもよい。例えば、左コントローラ3、右コントローラ4、本体装置2、付属装置(拡張グリップ210)、および操作に用いられる他のコントローラ等やこれらを組み合わせた装置が有する共振周波数の振動の振幅を小さく調整する関数をそれぞれ設定し、操作に用いられる操作装置(すなわち、使用態様)に応じて当該関数が選択されて振幅が調整されてもよい。
また、入力した振動データが高周波帯の振動波形と低周波帯の振動波形との組み合わせによって示される場合、高周波側および低周波側の振幅をそれぞれ調整することが考えられる。図23において、上述した振幅調整を行う調整モジュールは、低周波側振動波形の振幅αLiに係数aを乗算した第1の振幅調整値αLi*aと、振幅上限値bで示される第2の振幅調整値bとを比較(すなわち、関数min(αLi*a,b))を行い、当該比較においてより小さな振幅を示す振動波形を低周波側調整振動波形として出力する。また、上記調整モジュールは、高低周波側振動波形の振幅αHiに係数aを乗算した第1の振幅調整値αHi*aと、振幅上限値bで示される第2の振幅調整値bとを比較(すなわち、関数min(αHi*a,b))を行い、当該比較においてより小さな振幅を示す振動波形を高周波側調整振動波形として出力する。なお、上記調整モジュールは、低周波側振動波形の周波数fLおよび高周波側振動波形の周波数fHを変えることなく、高周波側調整振動波形の周波数fLおよび高周波側調整振動波形の周波数fHとして出力する。また、上記調整モジュールは、入力した振動データが3つ以上の異なる周波帯の振動波形の組み合わせによって示される場合、それぞれの周波数帯の振幅をそれぞれ調整してもよい。
なお、上述した振幅調整処理では、第1のサブ関数を用いて変換されたyの値と第2のサブ関数を用いて変換されたyの値とを比較して、当該比較においてより小さな値を示すyの値を出力振幅yとして出力している。しかしながら、同じ第1のサブ関数および第2のサブ関数を用いる場合であっても、異なる方法を用いて出力振幅yを出力してもかまわない。例えば、図19〜図22を用いた説明から明らかなように、第1のサブ関数を用いたyの値が採用される場合と第2のサブ関数を用いたyの値が採用される場合とが切り替わる入力振幅xの切替値(すなわち、図19〜図22における入力振幅A〜D)を用いることによって、算出に用いるサブ関数自体を切り替えることができる。すなわち、入力振幅xの値が上記切替値A〜D未満の場合は第1のサブ関数を用いて出力振幅yを算出して出力し、入力振幅xの値が上記切替値A〜D以上の場合は第2のサブ関数を用いて出力振幅yを算出して出力するように、入力振幅xの値に応じて用いる変換関数自体を選択してもかまわない。
このように、用いられている操作方式に応じて振動の強さが調整されるため、操作方式によってユーザが感じる振動が強すぎたり弱すぎたりするような状況を軽減することができる。例えば、1未満の係数aを乗算する関数を単に用いるだけでは、強い振動がユーザにとって好適になるように振動強さを調整すると弱い振動がユーザにとって弱すぎる場合があり、当該弱い振動をユーザが感知できない状況になる。その一方で、上限値bに制限する関数を単に用いるだけでは、上限値b未満の上記弱い振動を操作方式に応じて調整することができない。このように想定される課題に対して、2つのサブ関数を適宜選択することによって、上記強い振動を好適な振動強さに調整するととともに、上記弱い振動も好適な振動強さに調整することが可能となり、操作方式に応じた適切な振動強さに調整することが可能となる。また、左コントローラ3および/または右コントローラ4を把持して振り動かすように操作する場合(例えば、縦持ち操作方式の場合)、ユーザがコントローラの振動を知覚しにくいため、振動を相対的に強くすることによってユーザに振動を知覚させやすくすることができる。一方、他の操作方式では、左コントローラ3および/または右コントローラ4を振り動かして操作することが想定されていないため、コントローラから与える振動を強くしなくてもユーザが知覚することが可能であり、当該状況に応じた振動強さに調整することができる。さらに、コントローラの振動をユーザに知覚させる場合、コントローラの材質、重量、形状、ケース本体の板厚、ハウジングにおける振動の伝えやすさ、装着されている装置(本体装置2や拡張グリップ210)における振動の伝えやすさ、装着部位における振動の伝えやすさ、振動子とユーザが把持する部位との距離、コントローラの持ち方(掌で把持する、指先でつかむ等)、コントローラと接触するユーザの手の面積、手の部位等によって、ユーザが知覚する振動が変化することが考えられる。しかしながら、上述したように操作方式に応じて振幅を調整することによって、適切な強さでユーザに振動を知覚させることが可能となる。
また、横持ち操作方式によって把持している左コントローラ3および右コントローラ4の一方を振動させるための振動データは、縦持ち操作方式、拡張グリップ操作方式、および携帯機モード操作方式において左コントローラ3を振動させるための振動データと右コントローラ4を振動させるための振動データとに基づいて生成される。つまり、1つのコントローラを用いてゲームプレイする場合は、2つのコントローラを用いてゲームプレイする場合にそれぞれのコントローラに与えられていた上記振幅調整後の振動を1つに合成して、当該1つのコントローラに与えられる。例えば、1つのコントローラを振動させるための振動データを生成する方式としては、選択方式および加算方式がある。以下、図24〜図26を参照して、振動データを生成する方式について説明する。なお、図24は、選択方式によって振動データを生成する方法の一例を説明するための図である。図25は、高周波側および低周波側をまとめて判定する場合に用いられる合成モジュールの一例を示す図である。図26は、加算方式によって振動データを生成する方法の一例を説明するための図である。
選択方式によって振動データを生成する場合、左コントローラ3を振動させるための上記振幅調整後の振動データおよび右コントローラ4を振動させるための上記振幅調整後の振動データについて、所定時間毎に何れか1つを選択する。具体的には、左コントローラ3を振動させるための上記振幅調整後の振動データおよび右コントローラ4を振動させるための上記振幅調整後の振動データが入力された場合、左コントローラ3を振動させるための振動データが示す左コントローラ用振動波形の調整後の振幅と右コントローラ4を振動させるための振動データが示す右コントローラ用振動波形の調整後の振幅とに基づいて、所定時間毎に振幅の大きい方の振動波形を示す振動データを選択する。このように選択方式によって振動データを選択することによって、ユーザが顕著に知覚可能な振動を優先して生じさせることが可能となる。
図24は、左コントローラ用振動波形と右コントローラ用振動波形とが入力された場合の一例を示している。左コントローラ用振動波形は、相対的に弱く継続的な振動を示し、右コントローラ用振動波形は、相対的に強く短い振動を示している。例えば、選択方式によって振動データを生成する場合、所定期間毎(例えば、5msec〜数10msec)にいずれの振動波形の振幅が大きいのかを判定し、より振幅の大きな振動波形を示す振動データを選択して出力する。したがって、選択方式では、所定期間毎に選択された振動波形によって合成振動波形が生成され、当該合成振動波形を示す振動データが出力される。
なお、上記選択方式において振動データを選択する際、当該振動データが示す振動波形の周波数も考慮して選択する振動データを判定してもよい。例えば、上記振幅調整後に入力された振動データが高周波帯の振動波形と低周波帯の振動波形との組み合わせによって示される場合、高周波側および低周波側をそれぞれ独立して判定する方法と高周波側および低周波側の一方に重み付けをして判断する方法とが考えられる。前者の場合、左コントローラ用振動波形と右コントローラ用振動波形とが入力された場合、高周波側の左コントローラ用振動波形の振幅と高周波側の右コントローラ用振動波形の振幅とに基づいて、所定時間毎に振幅の大きい方の振動波形を示す振動データを、高周波側の振動データとして選択する。また、左コントローラ用振動波形と右コントローラ用振動波形とが入力された場合、低周波側の左コントローラ用振動波形の振幅と低周波側の右コントローラ用振動波形の振幅とに基づいて、所定時間毎に振幅の大きい方の振動波形を示す振動データを、低周波側の振動データとして選択する。後者の場合、各周波数帯の振幅に重み付けをした上で所定期間毎に最も大きな振幅を示す振動波形を選出し、入力した左コントローラ用振動波形および右コントローラ用振動波形のうち、当該選出された振動波形を含む方の振動波形を示す振動データを選択する。
また、上記振幅調整後に入力された振動データが高周波帯の振動波形と低周波帯の振動波形との組み合わせによって示される場合、高周波側および低周波側をまとめて判定することが考えられる。図25において、上記合成モジュールは、左コントローラ用振動波形の低周波側の調整後の振幅α1Lおよび高周波側の調整後の振幅α1Hを合成した振幅と、右コントローラ用振動波形の低周波側の調整後の振幅α2Lおよび高周波側の調整後の振幅α2Hを合成した振幅との比較(すなわち、関数max(α1L+α1H,α2L+α2H))が行なわれ、当該比較においてより大きな振幅を示す振動波形が合成振動波形として出力する。すなわち、上記合成モジュールは、上記振幅調整後の左コントローラ用振動波形に含まれる第1の振幅(α1L)および第2の振幅(α1H)から算出される値(α1L+α1H)と、上記振幅調整後の右コントローラ用振動波形に含まれる第1の振幅(α2L)および第2の振幅(α2H)から算出される値(α2L+α2H)とに基づいて、いずれかの振動波形を選択的に出力する。
このように、左コントローラ3を振動させるための複数の振動データおよび右コントローラ4を振動させるための複数の振動データが入力された場合に、左コントローラ3を振動させるための複数の振動データが示す振幅の合計と右コントローラ4を振動させるための複数の振動データが示す振幅の合計とに基づいて、所定期間毎に、振幅の合計が大きい方の複数の振動データが選択される。したがって、左コントローラ用振動波形および右コントローラ用振動波形のうち、全体として振幅がより大きなものが選択されるので、入力される振動波形全体の特徴を維持したまま、ユーザに対して振動刺激を与えることができる。
また、図25に示す選択方式においては、入力された振動パターンの振幅に対して周波数による重み付けをして評価するようにしてもよい。一般的に、人間は低周波側の振動に敏感であるので、例えば、高周波側の振幅より大きな重み係数(例えば、b>1)を低周波側の振幅に乗じるようにしてもよい。この場合。関数max(bXα1L+α1H,bXα2L+α2H)を利用して、いずれの振幅が大きいのかが判断されてもよい。
また、左コントローラ用振動波形の低周波側の周波数f1Lおよび右コントローラ用振動波形の低周波側の周波数f2Lの異同、および、左コントローラ用振動波形の高周波側の周波数f1Hおよび右コントローラ用振動波形の高周波側の周波数f2Hの異同については考慮せず、各振動波形の振幅のみを比較対象とするように構成してもよい。
また、左コントローラ用振動波形および右コントローラ用振動波形に含まれる周波数成分から、各振幅の大きさに基づいて、所定数の周波数成分を選択するようにしてもよい。すなわち、左コントローラ用振動波形の低周波側の振幅α1L、左コントローラ用振動波形の高周波側の振幅α1H、右コントローラ用振動波形の低周波側の振幅α2L、および右コントローラ用振動波形の高周波側の振幅α2Hのうち大きなものから上位2つの周波数成分を抽出して、合成振動波形として出力するようにしてもよい。
また、上記選択方式において振動データを選択する際、当該振動データが示す振動波形の振幅とは異なるパラメータに基づいて選択する振動データを判定してもよい。例えば、振動データが示す振動波形の周波数に基づいて、所定時間毎に周波数の小さい方の振動波形を示す振動データを選択してもよい。
図26に示すように、加算方式によって振動データを生成する場合、左コントローラ3を振動させるための上記振幅調整後の振動データおよび右コントローラ4を振動させるための上記振幅調整後の振動データについて、所定時間毎に振動波形を重ね合わせる。具体的には、左コントローラ3を振動させるための上記振幅調整後の振動データおよび右コントローラ4を振動させるための上記振幅調整後の振動データが入力された場合、左コントローラ3を振動させるための振動データが示す左コントローラ用振動波形と右コントローラ4を振動させるための振動データが示す右コントローラ用振動波形とを所定時間毎に重ね合わせて合成振動波形を生成して、当該合成振動波形を示す振動データを生成する。具体的には、所定周期毎に入力された上記振幅調整後の振動波形の振幅を加算して合成振動波形を生成することが考えられ、この場合、上記振幅調整後の左コントローラ用振動波形と右コントローラ用振動波形とが時間軸上で結合したものとなる。このように加算方式によって振動データを生成することによって、例えば図25に示すような同じような種類の振動が複数重なり合うことが頻繁に生じ得る状況において、当該振動を欠落させることなく互いに重なり合った振動をユーザに対して知覚させることができる。
ここで、上記加算方式によって振動データを合成する場合、合成振動波形の周波数は、左コントローラ用振動波形の周波数と右コントローラ用振動波形の周波数とに基づいて算出される。第1の例として、入力した左コントローラ用振動波形および右コントローラ用振動波形のうち、振幅が最も大きい振動波形の周波数を採用する。第2の例として、入力した左コントローラ用振動波形の周波数と右コントローラ用振動波形の周波数との平均値を採用する。第3の例として、入力した左コントローラ用振動波形の周波数と右コントローラ用振動波形の周波数とにそれぞれの振幅による重み付け(例えば、振幅に応じた重み付け加重平均)をした上で、上記第1の例または上記第2の例による周波数の算出を行う。
なお、上記加算方式によって振動データを合成する場合、所定周期毎に入力された振動波形の振幅を加算して合成振動波形を生成することが考えられるが、当該振動波形の振幅を平均して合成振動波形を生成してもよい。また、振動波形の振幅を平均して合成振動波形を生成する場合、各振動波形の周波数によって重み付けをした振幅を平均してもよい。
このように、横持ち操作方式によって左コントローラ3および右コントローラ4の一方を用いて操作する場合であっても、左コントローラ3および右コントローラ4の両方を用いて操作している場合に与えられる振動に基づいた振動が生成される。したがって、横持ち操作方式によって操作するユーザは、他の操作方式による振動と同じ振動データに基づいた振動を知覚することができ、操作方式による興趣性が損なわれることを防止することができる。
また、上述した説明では、1つのコントローラを振動させるための振動データを選択方式および加算方式によって生成する例を用いたが、他の方式を用いて当該振動データを生成してもかまわない。例えば、縦持ち操作方式、拡張グリップ操作方式、および携帯機モード操作方式において音と同期した振動が左コントローラ3および右コントローラ4にそれぞれ与えられる場合、横持ち操作方式では、当該音を合成した合成音に基づいた振動を左コントローラ3および右コントローラ4の一方に与えてもよい。具体的には、縦持ち操作方式、拡張グリップ操作方式、および携帯機モード操作方式の場合、仮想ゲーム世界における第1オブジェクトG1の移動に伴う音声(例えば、移動音、衝突音、破壊音等)を示す音声データに基づいて左コントローラ3を振動させるための振動データが生成され、仮想ゲーム世界における第2オブジェクトG2の移動に伴う音声(例えば、移動音、衝突音、破壊音等)を示す音声データに基づいて右コントローラ4を振動させるための振動データが生成される。この場合、横持ち操作方式では、第1オブジェクトG1の移動に伴う音声と第2オブジェクトG2の移動に伴う音声とを合成した合成音声データを生成し、当該合成音声データに基づいて左コントローラ3および右コントローラ4の一方を振動させるための振動データが生成される。
また、上述した説明では、操作方式に応じて振幅を調整した後に振動データを合成する処理を行っているが、他の手順でもよい。例えば、上記振動データを合成する処理を行った後に、上述した操作方式に応じた振幅調整処理を行ってもかなわない。
次に、図27〜図32を参照して、本実施形態においてゲームシステム1で実行される具体的な処理の一例について説明する。図27は、本実施形態において本体装置2のDRAM85に設定されるデータ領域の一例を示す図である。なお、DRAM85には、図27に示すデータの他、他の処理で用いられるデータも記憶されるが、詳細な説明を省略する。
DRAM85のプログラム記憶領域には、ゲームシステム1で実行される各種プログラムPaが記憶される。本実施形態においては、各種プログラムPaは、上述した左コントローラ3および右コントローラ4との間で無線通信するための通信プログラムや、左コントローラ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、敵オブジェクト位置データDn、および画像データDp等が記憶される。
操作データ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は、左コントローラ3および右コントローラ4それぞれに生じている加速度を示すデータである。例えば、加速度データDdは、左コントローラ3および右コントローラ4それぞれに生じている重力加速度を除いて、xyz軸方向に生じている加速度を示すデータ等を含んでいる。
操作方式データDeは、ユーザによって選択されて設定された操作方式(例えば、縦持ち操作方式、拡張グリップ操作方式、横持ち操作方式、携帯機モード操作方式)を示すデータである。
左コントローラ振動データDfは、左コントローラ3を振動させるための振動を示すデータである。右コントローラ振動データDgは、右コントローラ4を振動させるための振動を示すデータである。左コントローラ調整振動データDhは、左コントローラ3を振動させるための上記振幅調整された振動を示すデータである。右コントローラ調整振動データDiは、右コントローラ4を振動させるための上記振幅調整された振動を示すデータである。合成振動データDjは、横持ち操作方式が設定されている場合に左コントローラ3および右コントローラ4の一方を振動させるための振動を示すデータである。
操作対応テーブルデータDkは、操作に対応して行われる指示内容が操作方式毎に記述された操作対応テーブル(図17参照)を示すデータである。
プレイヤオブジェクト位置データDmは、第1オブジェクトG1、第2オブジェクトG2、およびプレイヤオブジェクトPOの仮想空間における位置および方向(移動方向)をそれぞれ示すデータである。敵オブジェクト位置データDnは、敵オブジェクトEOの仮想空間における位置および方向を示すデータや当該敵オブジェクトEOから放たれるオブジェクト(例えば、左グラブ(左拳)および右グラブ(右拳)を模したオブジェクト)の仮想空間における位置および方向を示すデータである。
画像データDpは、ゲームの際に本体装置2のディスプレイ12や据置型モニタ6の表示画面に画像(例えば、仮想オブジェクトの画像、フィールド画像、背景画像)を表示するためのデータである。
次に、図28〜図32を参照して、本実施形態における情報処理(ゲーム処理)の詳細な一例を説明する。図28は、ゲームシステム1で実行されるゲーム処理の一例を示すフローチャートである。図29は、図28におけるステップS146において行われる縦持ちゲーム処理の詳細の一例を示すサブルーチンである。図30は、図28におけるステップS148において行われる拡張グリップゲーム処理の詳細の一例を示すサブルーチンである。図31は、図28におけるステップS150において行われる携帯機モードゲーム処理の詳細の一例を示すサブルーチンである。図32は、図28におけるステップS151において行われる横持ちゲーム処理の詳細の一例を示すサブルーチンである。本実施形態においては、図28〜図32に示す一連の処理は、プロセッサ81が各種プログラムPaに含まれる通信プログラムや所定のアプリケーションプログラム(ゲームプログラム)を実行することによって行われる。また、図28〜図32に示すゲーム処理が開始されるタイミングは任意である。
なお、図28〜図32に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をプロセッサ81が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、プロセッサ81以外のプロセッサや専用回路が実行するようにしてもよい。また、本体装置2において実行される処理の一部は、本体装置2と通信可能な他の情報処理装置(例えば、本体装置2とネットワークを介して通信可能なサーバ)によって実行されてもよい。すなわち、図28〜図32に示す各処理は、本体装置2を含む複数の情報処理装置が協働することによって実行されてもよい。
図28において、プロセッサ81は、ゲーム処理における初期設定を行い(ステップS141)、次のステップに処理を進める。例えば、上記初期設定では、プロセッサ81は、以下に説明する処理を行うためのパラメータを初期化する。また、上記初期設定では、プロセッサ81は、ゲームプレイを行うためのゲームフィールドを設定し、当該ゲームフィールド上のプレイヤオブジェクトPOや敵オブジェクトEOの初期位置を設定してプレイヤオブジェクト位置データDmおよび敵オブジェクト位置データDnを更新する。また、プロセッサ81は、第1オブジェクトG1および第2オブジェクトG2の移動方向をデフォルト値(例えば、正面方向)に初期設定してプレイヤオブジェクト位置データDmを更新する。
次に、プロセッサ81は、左コントローラ3および/または右コントローラ4から操作データを取得して操作データDaを更新し(ステップS142)、次のステップに処理を進める。
次に、プロセッサ81は、ユーザによって操作方式が選択されたか否かを判定する(ステップS143)。そして、プロセッサ81は、操作方式が選択された場合、ステップS144に処理を進める。一方、プロセッサ81は、操作方式が選択されていない場合、上記ステップS142の処理を繰り返してユーザによって操作方式が選択されるのを待つ。
上記ステップS143の処理において、プロセッサ81は、一例として、上記ステップS142において取得した操作データが、複数の操作方式それぞれに設定されている固有の操作のいずれかに該当する場合、操作方式が選択されたと判定する。例えば、プロセッサ81は、本体装置2と有線接続されていない状態で、左コントローラ3の第1Lボタン38と右コントローラ4の第1Rボタン60とが同時に押下される操作が行われた場合、縦持ち操作方式が選択されたと判定する。また、プロセッサ81は、本体装置2と有線接続されていない状態で、左コントローラ3のZLボタン39と右コントローラ4のZRボタン61とが同時に押下される操作が行われた場合、拡張グリップ操作方式が選択されたと判定する。また、プロセッサ81は、本体装置2と左コントローラ3および右コントローラ4とが物理接続(有線接続)されている場合、携帯機モード操作方式が選択されたと判定する。また、プロセッサ81は、本体装置2と有線接続されていない状態で、左コントローラ3の第2Lボタン43と第2Rボタン44とが同時に押下される操作が行われた場合、左コントローラ3を用いた横持ち操作方式が選択されたと判定し、右コントローラ4の第2Lボタン65と第2Rボタン66とが同時に押下される操作が行われた場合、右コントローラ4を用いた横持ち操作方式が選択されたと判定する。
他の例として、プロセッサ81は、本体装置2のディスプレイ12や据置型モニタ6の表示画面に操作方式の選択を促す選択肢を表示し、上記ステップS142において取得した操作データがいずれかの選択肢を選択する操作を示す場合、操作方式が選択されたと判定する。例えば、プロセッサ81は、本体装置2のディスプレイ12や据置型モニタ6の表示画面に、縦持ち操作方式、拡張グリップ操作方式、携帯機モード操作方式、および横持ち操作方式をそれぞれ選択する選択肢を表示して、何れかの選択肢の選択をユーザに促す。
ステップS144において、プロセッサ81は、操作方式を設定し、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS143において選択された操作方式を示すデータを用いて、操作方式データDeを更新する。
次に、プロセッサ81は、縦持ち操作方式が選択されているか否かを判定する(ステップS145)。そして、プロセッサ81は、縦持ち操作方式が選択されている場合、ステップS146に処理を進める。一方、プロセッサ81は、縦持ち操作方式が選択されていない場合、ステップS147に処理を進める。
ステップS146において、プロセッサ81は、縦持ち操作方式によるゲーム処理を行い、ステップS152に処理を進める。以下、図29を参照して、縦持ち操作方式によるゲーム処理について説明する。
図29において、プロセッサ81は、左コントローラ3および右コントローラ4から操作データを取得して操作データDaを更新し(ステップS161)、次のステップに処理を進める。
次に、プロセッサ81は、左コントローラ3および右コントローラ4それぞれの姿勢、角速度、加速度を算出し(ステップS162)、次のステップに処理を進める。例えば、プロセッサ81は、左コントローラ3および右コントローラ4それぞれに生じている加速度を示すデータを操作データDaから取得し、左コントローラ3および右コントローラ4それぞれに作用している重力加速度の方向を算出して、当該方向を示すデータを用いて姿勢データDbを更新する。重力加速度を抽出する方法については任意の方法を用いればよく、例えば左コントローラ3および右コントローラ4それぞれに平均的に生じている加速度成分を算出して当該加速度成分を重力加速度として抽出してもよい。そして、プロセッサ81は、左コントローラ3に対して算出された重力加速度の方向を基準とした左コントローラ3のxyz軸方向を左コントローラ3の姿勢として算出し、当該姿勢を示すデータを用いて姿勢データDbを更新する。また、プロセッサ81は、右コントローラ4に対して算出された重力加速度の方向を基準とした右コントローラ4のxyz軸方向を右コントローラ4の姿勢として算出し、当該姿勢を示すデータを用いて姿勢データDbを更新する。また、プロセッサ81は、左コントローラ3および右コントローラ4それぞれに生じている角速度を示すデータを操作データDaから取得し、左コントローラ3および右コントローラ4それぞれのxyz軸周りの角速度を算出して、当該角速度を示すデータを用いて角速度データDcを更新する。さらに、プロセッサ81は、左コントローラ3および右コントローラ4それぞれに生じている加速度を示すデータを操作データDaから取得し、左コントローラ3および右コントローラ4それぞれに生じているxyz軸方向の加速度から上記重力加速度成分を除去して、当該除去後の加速度を示すデータを用いて加速度データDdを更新する。
なお、左コントローラ3や右コントローラ4の姿勢については、重力加速度を基準としたxyz軸方向が算出された以降は、xyz各軸周りの角速度のみに応じて更新してもよい。しかしながら、左コントローラ3や右コントローラ4の姿勢と重力加速度の方向との関係が誤差の累積によってずれていくことを防止するために、所定周期毎に重力加速度の方向に対するxyz軸方向を算出して左コントローラ3や右コントローラ4の姿勢を修正してもよい。
次に、プロセッサ81は、左コントローラ振り認識処理を行い(ステップS163)、次のステップに処理を進める。例えば、プロセッサ81は、加速度データDdを参照して、現時点において左コントローラ3に生じているxy加速度の大きさが左コントローラ3の振り判定をするための閾値より大きい場合、左コントローラ3が振り動かされたと判定する。ここで、xy加速度は、左コントローラ3に生じている加速度のうち、z軸方向成分(つまり、図8〜図13を用いて説明した縦持ち操作方式による操作において、左コントローラ3の横方向成分)を除いた加速度である。
次に、プロセッサ81は、右コントローラ振り認識処理を行い(ステップS164)、次のステップに処理を進める。例えば、プロセッサ81は、加速度データDdを参照して、現時点において右コントローラ4に生じているxy加速度の大きさが右コントローラ4の振り判定をするための閾値より大きい場合、右コントローラ4が振り動かされたと判定する。ここで、xy加速度は、右コントローラ4に生じている加速度のうち、z軸方向成分(つまり、図8〜図13を用いて説明した縦持ち操作方式による操作において、右コントローラ4の横方向成分)を除いた加速度である。
次に、プロセッサ81は、第1オブジェクト動作処理を行い(ステップS165)、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS163において左コントローラ3が振り動かされたと判定されたことに応じて、移動開始位置からの第1オブジェクトG1の移動を開始し、重力加速度の方向に対する左コントローラ3のz軸方向の傾きに応じて、第1オブジェクトG1の移動方向を変化させる。具体的には、プロセッサ81は、姿勢データDbを参照して左コントローラ3の姿勢を取得し、重力加速度の方向に対する当該左コントローラ3のz軸方向の傾きを算出する。さらに、プロセッサ81は、重力加速度の方向周りの左コントローラ3の角速度に応じて、第1オブジェクトG1の移動方向を変化させる。具体的には、プロセッサ81は、角速度データDcを参照して左コントローラ3に生じているxyz軸周りの角速度を取得し、当該角速度に基づいて重力加速度方向周りの左コントローラ3の角速度を算出する。そして、プロセッサ81は、第1オブジェクトG1の移動方向および移動アルゴリズムに基づいて、移動開始位置に戻るまで第1オブジェクトG1の移動を継続する。例えば、プロセッサ81は、プレイヤオブジェクト位置データDmを参照して第1オブジェクトG1の位置および移動方向を取得し、当該第1オブジェクトG1の位置から当該移動方向および移動アルゴリズムに基づいて第1オブジェクトG1を移動させ、当該移動後の第1オブジェクトG1の位置を用いてプレイヤオブジェクト位置データDmを更新する。なお、第1オブジェクトG1が移動開始位置に戻る仮想空間内の復路を移動している場合、現在の第1オブジェクトG1の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。また、第1オブジェクトG1が他のオブジェクトと衝突した場合、当該衝突状況に応じた位置に第1オブジェクトG1の位置が設定される。また、プレイヤオブジェクトPOが左パンチを繰り出す動作をしていない場合、プレイヤオブジェクトPOの位置に基づいた移動開始位置に第1オブジェクトG1の位置が設定される。
次に、プロセッサ81は、第2オブジェクト動作処理を行い(ステップS166)、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS164において右コントローラ4が振り動かされたと判定されたことに応じて、移動開始位置からの第2オブジェクトG2の移動を開始し、重力加速度の方向に対する右コントローラ4のz軸方向の傾きに応じて、第2オブジェクトG2の移動方向を変化させる。具体的には、プロセッサ81は、姿勢データDbを参照して右コントローラ4の姿勢を取得し、重力加速度の方向に対する当該右コントローラ4のz軸方向の傾きを算出する。さらに、プロセッサ81は、重力加速度の方向周りの右コントローラ4の角速度に応じて、第2オブジェクトG2の移動方向を変化させる。具体的には、プロセッサ81は、角速度データDcを参照して右コントローラ4に生じているxyz軸周りの角速度を取得し、当該角速度に基づいて重力加速度方向周りの右コントローラ4の角速度を算出する。そして、プロセッサ81は、第2オブジェクトG2の移動方向および移動アルゴリズムに基づいて、移動開始位置に戻るまで第2オブジェクトG2の移動を継続する。例えば、プロセッサ81は、プレイヤオブジェクト位置データDmを参照して第2オブジェクトG2の位置および移動方向を取得し、当該第2オブジェクトG2の位置から当該移動方向および移動アルゴリズムに基づいて第2オブジェクトG2を移動させ、当該移動後の第2オブジェクトG2の位置を用いてプレイヤオブジェクト位置データDmを更新する。なお、第2オブジェクトG2が移動開始位置に戻る仮想空間内の復路を移動している場合、現在の第2オブジェクトG2の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。また、第2オブジェクトG2が他のオブジェクトと衝突した場合、当該衝突状況に応じた位置に第2オブジェクトG2の位置が設定される。また、プレイヤオブジェクトPOが右パンチを繰り出す動作をしていない場合、プレイヤオブジェクトPOの位置に基づいた移動開始位置に第2オブジェクトG2の位置が設定される。
次に、プロセッサ81は、プレイヤオブジェクト動作処理を行い(ステップS167)、次のステップに処理を進める。例えば、プロセッサ81は、操作対応テーブルデータDkが示す操作対応テーブルの記述に基づいて、上記ステップS161において取得した操作データが示す指示内容を設定し、当該指示内容に応じてプレイヤオブジェクトPOを動作させて、プレイヤオブジェクト位置データDmを更新する。すなわち、プロセッサ81は、姿勢データDbを参照して、左コントローラ3および右コントローラ4の両方が左に傾けられている場合、当該傾斜角度に応じた移動速度でプレイヤオブジェクトPOを左に移動させて、プレイヤオブジェクト位置データDmを更新する。プロセッサ81は、姿勢データDbを参照して、左コントローラ3および右コントローラ4の両方が右に傾けられている場合、当該傾斜角度に応じた移動速度でプレイヤオブジェクトPOを右に移動させて、プレイヤオブジェクト位置データDmを更新する。プロセッサ81は、姿勢データDbを参照して、左コントローラ3および右コントローラ4の両方が前方に傾けられている場合、当該傾斜角度に応じた移動速度でプレイヤオブジェクトPOを前方に移動させて、プレイヤオブジェクト位置データDmを更新する。プロセッサ81は、姿勢データDbを参照して、左コントローラ3および右コントローラ4の両方が後方に傾けられている場合、当該傾斜角度に応じた移動速度でプレイヤオブジェクトPOを後方に移動させて、プレイヤオブジェクト位置データDmを更新する。そして、プロセッサ81は、姿勢データDbを参照して、左コントローラ3および右コントローラ4の両方が内側に傾けられている場合、第1オブジェクトG1および第2オブジェクトG2が移動開始位置に配置されていれば、プレイヤオブジェクトPOに防御動作させる。また、操作データDaを参照して、第1Lボタン38が押下されている場合、プレイヤオブジェクトPOをダッシュで移動させて、プレイヤオブジェクト位置データDmを更新する。また、操作データDaを参照して、第1Rボタン60が押下されている場合、プレイヤオブジェクトPOをジャンプさせて、プレイヤオブジェクト位置データDmを更新する。
次に、プロセッサ81は、左コントローラ3を振動させるための振動データを生成する処理を行い(ステップS168)、次のステップに処理を進める。例えば、プロセッサ81は、第1オブジェクトG1の種類、移動速度、移動方向、衝突状況等に応じた振動波形を生成し、振動波形に基づいて左コントローラ3を振動させるための振動データを生成して、左コントローラ振動データDfを更新する。なお、プロセッサ81は、第1オブジェクトG1の移動速度や移動方向が変化した場合や他のオブジェクトとの衝突が生じた時点において、当該変化や衝撃度に応じて左コントローラ3を振動させるため振幅や周波数を変化させてもかまわない。また、プロセッサ81は、第1オブジェクトG1以外の仮想ゲーム世界の状況に応じた振動を、上記振動波形に加えてもかまわない。例えば、プレイヤオブジェクトPOの動作やプレイヤオブジェクトPOに与えられた衝撃に応じた振動、ゲームフィールドの状況に応じた振動、BGMや効果音に応じた振動等を、上記振動波形に加えてもかまわない。
次に、プロセッサ81は、左コントローラ3を振動させるための振動データにおける振幅を調整する処理を行い(ステップS169)、次のステップに処理を進める。例えば、プロセッサ81は、操作方式データDeが示す操作方式(縦持ち操作方式)に基づいて、上記ステップS168で生成された振動データの振幅を調整し、当該調整後の振動データを用いて左コントローラ調整振動データDhを更新する。具体的には、プロセッサ81は、左コントローラ振動データDfが示す振動波形(左コントローラ用振動波形)が示す振幅値を第1のサブ関数(係数a;例えば、a=1)を用いて算出した値と、第2のサブ関数(上限値b;例えば、b=1)を用いて制限した値とを比較して、小さい方の値を調整後の振幅値として選択し、当該調整後の振幅値を用いて振動波形を調整して左コントローラ調整振動データDhを更新する。なお、縦持ち操作方式の場合、係数a=1および上限値b=1(振幅の最大値)に設定され、結果的に振幅の調整が行われない。このような場合、上記ステップS169による振幅調整処理を行わなくてもよく、上記ステップS168で生成された振動データをそのまま用いて左コントローラ調整振動データDhが更新されてもよい。
次に、プロセッサ81は、右コントローラ4を振動させるための振動データを生成する処理を行い(ステップS170)、次のステップに処理を進める。例えば、プロセッサ81は、第2オブジェクトG2の種類、移動速度、移動方向、衝突状況等に応じた振動波形を生成し、振動波形に基づいて右コントローラ4を振動させるための振動データを生成して、右コントローラ振動データDgを更新する。なお、プロセッサ81は、第2オブジェクトG2の移動速度や移動方向が変化した場合や他のオブジェクトとの衝突が生じた時点において、当該変化や衝撃度に応じて右コントローラ4を振動させるため振幅や周波数を変化させてもかまわない。また、プロセッサ81は、第2オブジェクトG2以外の仮想ゲーム世界の状況に応じた振動を、上記振動波形に加えてもかまわない。例えば、プレイヤオブジェクトPOの動作やプレイヤオブジェクトPOに与えられた衝撃に応じた振動、ゲームフィールドの状況に応じた振動、BGMや効果音に応じた振動等を、上記振動波形に加えてもかまわない。
次に、プロセッサ81は、右コントローラ4を振動させるための振動データにおける振幅を調整する処理を行い(ステップS171)、次のステップに処理を進める。例えば、プロセッサ81は、操作方式データDeが示す操作方式(縦持ち操作方式)に基づいて、上記ステップS170で生成された振動データの振幅を調整し、当該調整後の振動データを用いて右コントローラ調整振動データDiを更新する。具体的には、プロセッサ81は、右コントローラ振動データDgが示す振動波形(右コントローラ用振動波形)が示す振幅値を第1のサブ関数(係数a;例えば、a=1)を用いて算出した値と、第2のサブ関数(上限値b;例えば、b=1)を用いて制限した値とを比較して、小さい方の値を調整後の振幅値として選択し、当該調整後の振幅値を用いて振動波形を調整して右コントローラ調整振動データDiを更新する。なお、縦持ち操作方式の場合、係数a=1および上限値b=1(振幅の最大値)に設定され、結果的に振幅の調整が行われない。このような場合、上記ステップS171による振幅調整処理を行わなくてもよく、上記ステップS170で生成された振動データをそのまま用いて右コントローラ調整振動データDiが更新されてもよい。
次に、プロセッサ81は、振動データを送信する周期毎に当該周期に対応する振動データを左コントローラ3および右コントローラ4へ送信する処理を行い(ステップS172)、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、左コントローラ調整振動データDhを参照して、上記送信周期に対応する振動長さ分の振動データを左コントローラ3へ送信する。また、プロセッサ81は、右コントローラ調整振動データDiを参照して、上記送信周期に対応する振動長さ分の振動データを右コントローラ4へ送信する。このように各コントローラ用の振動データが送信されることによって、当該振動データを受信した左コントローラ3および右コントローラ4は、それぞれの振動データに応じた振動波形で振動する。
図28に戻り、上記ステップS145において縦持ち操作方式が選択されていないと判定した場合、プロセッサ81は、拡張グリップ操作方式が選択されているか否かを判定する(ステップS147)。そして、プロセッサ81は、拡張グリップ操作方式が選択されている場合、ステップS148に処理を進める。一方、プロセッサ81は、拡張グリップ操作方式が選択されていない場合、ステップS149に処理を進める。
ステップS148において、プロセッサ81は、拡張グリップ操作方式によるゲーム処理を行い、ステップS152に処理を進める。以下、図30を参照して、拡張グリップ操作方式によるゲーム処理について説明する。
図30において、プロセッサ81は、左コントローラ3および右コントローラ4から操作データを取得して操作データDaを更新し(ステップS181)、次のステップに処理を進める。
次に、プロセッサ81は、第1オブジェクト動作処理を行い(ステップS182)、次のステップに処理を進める。例えば、プロセッサ81は、操作対応テーブルデータDkが示す操作対応テーブルの記述に基づいて、上記ステップS181において取得した操作データが示す指示内容を設定し、当該指示内容に応じて第1オブジェクトG1を動作させて、プレイヤオブジェクト位置データDmを更新する。
例えば、プロセッサ81は、上記ステップS181において取得した操作データがBボタン54の押下操作を示している場合、移動開始位置から所定方向への第1オブジェクトG1の移動を開始して、プレイヤオブジェクト位置データDmを更新する。また、プロセッサ81は、上記ステップS181において取得した操作データがアナログスティック32の傾倒操作を示している場合、移動開始位置から離れて仮想ゲーム世界を第1オブジェクトG1が移動中であればアナログスティック32が傾倒操作されている方向および傾倒角度に応じて、第1オブジェクトG1の移動方向や移動速度を変化させて、プレイヤオブジェクト位置データDmを更新する。そして、プロセッサ81は、第1オブジェクトG1の移動方向および移動アルゴリズムに基づいて、移動開始位置に戻るまで第1オブジェクトG1の移動を継続する。例えば、プロセッサ81は、プレイヤオブジェクト位置データDmを参照して第1オブジェクトG1の位置および移動方向を取得し、当該第1オブジェクトG1の位置から当該移動方向および移動アルゴリズムに基づいて第1オブジェクトG1を移動させ、当該移動後の第1オブジェクトG1の位置を用いてプレイヤオブジェクト位置データDmを更新する。なお、第1オブジェクトG1が移動開始位置に戻る仮想空間内の復路を移動している場合、現在の第1オブジェクトG1の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。また、第1オブジェクトG1が他のオブジェクトと衝突した場合、当該衝突状況に応じた位置に第1オブジェクトG1の位置が設定される。また、プレイヤオブジェクトPOが左パンチを繰り出す動作をしていない場合、プレイヤオブジェクトPOの位置に基づいた移動開始位置に第1オブジェクトG1の位置が設定される。
次に、プロセッサ81は、第2オブジェクト動作処理を行い(ステップS183)、次のステップに処理を進める。例えば、プロセッサ81は、操作対応テーブルデータDkが示す操作対応テーブルの記述に基づいて、上記ステップS181において取得した操作データが示す指示内容を設定し、当該指示内容に応じて第2オブジェクトG2を動作させて、プレイヤオブジェクト位置データDmを更新する。
例えば、プロセッサ81は、上記ステップS181において取得した操作データがAボタン53の押下操作を示している場合、移動開始位置から所定方向への第2オブジェクトG2の移動を開始して、プレイヤオブジェクト位置データDmを更新する。また、プロセッサ81は、上記ステップS181において取得した操作データがアナログスティック32の傾倒操作を示している場合、移動開始位置から離れて仮想ゲーム世界を第2オブジェクトG2が移動中であればアナログスティック32が傾倒操作されている方向および傾倒角度に応じて、第2オブジェクトG2の移動方向や移動速度を変化させて、プレイヤオブジェクト位置データDmを更新する。そして、プロセッサ81は、第2オブジェクトG2の移動方向および移動アルゴリズムに基づいて、移動開始位置に戻るまで第2オブジェクトG2の移動を継続する。例えば、プロセッサ81は、プレイヤオブジェクト位置データDmを参照して第2オブジェクトG2の位置および移動方向を取得し、当該第2オブジェクトG2の位置から当該移動方向および移動アルゴリズムに基づいて第2オブジェクトG2を移動させ、当該移動後の第2オブジェクトG2の位置を用いてプレイヤオブジェクト位置データDmを更新する。なお、第2オブジェクトG2が移動開始位置に戻る仮想空間内の復路を移動している場合、現在の第2オブジェクトG2の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。また、第2オブジェクトG2が他のオブジェクトと衝突した場合、当該衝突状況に応じた位置に第2オブジェクトG2の位置が設定される。また、プレイヤオブジェクトPOが右パンチを繰り出す動作をしていない場合、プレイヤオブジェクトPOの位置に基づいた移動開始位置に第2オブジェクトG2の位置が設定される。
次に、プロセッサ81は、プレイヤオブジェクト動作処理を行い(ステップS184)、次のステップに処理を進める。例えば、プロセッサ81は、操作対応テーブルデータDkが示す操作対応テーブルの記述に基づいて、上記ステップS181において取得した操作データが示す指示内容を設定し、当該指示内容に応じてプレイヤオブジェクトPOを動作させて、プレイヤオブジェクト位置データDmを更新する。すなわち、プロセッサ81は、操作データDaを参照して、アナログスティック32がx軸正方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを左に移動させて、プレイヤオブジェクト位置データDmを更新する。プロセッサ81は、操作データDaを参照して、アナログスティック32がx軸負方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを右に移動させて、プレイヤオブジェクト位置データDmを更新する。プロセッサ81は、操作データDaを参照して、アナログスティック32がy軸正方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを前方に移動させて、プレイヤオブジェクト位置データDmを更新する。プロセッサ81は、操作データDaを参照して、アナログスティック32がy軸負方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを後方に移動させて、プレイヤオブジェクト位置データDmを更新する。そして、プロセッサ81は、操作データDaを参照して、アナログスティック32を押し込む操作が行われている場合、第1オブジェクトG1および第2オブジェクトG2が移動開始位置に配置されていれば、プレイヤオブジェクトPOに防御動作させる。また、操作データDaを参照して、Yボタン56が押下されている場合、プレイヤオブジェクトPOをダッシュで移動させて、プレイヤオブジェクト位置データDmを更新する。また、操作データDaを参照して、Xボタン55が押下されている場合、プレイヤオブジェクトPOをジャンプさせて、プレイヤオブジェクト位置データDmを更新する。
次に、プロセッサ81は、左コントローラ3を振動させるための振動データを生成する処理を行い(ステップS185)、次のステップに処理を進める。なお、上記ステップS185における振動データ生成処理は、上述したステップS168における振動データ生成処理と同様であるため、ここでは詳細な説明を省略する。
次に、プロセッサ81は、左コントローラ3を振動させるための振動データにおける振幅を調整する処理を行い(ステップS186)、次のステップに処理を進める。例えば、プロセッサ81は、操作方式データDeが示す操作方式(拡張グリップ操作方式)に基づいて、上記ステップS185で生成された振動データの振幅を調整し、当該調整後の振動データを用いて左コントローラ調整振動データDhを更新する。具体的には、プロセッサ81は、左コントローラ振動データDfが示す振動波形(左コントローラ用振動波形)が示す振幅値を第1のサブ関数(係数a;例えば、a=0.65)を用いて算出した値と、第2のサブ関数(上限値b;例えば、b=0.4)を用いて制限した値とを比較して、小さい方の値を調整後の振幅値として選択し、当該調整後の振幅値を用いて振動波形を調整して左コントローラ調整振動データDhを更新する。
次に、プロセッサ81は、右コントローラ4を振動させるための振動データを生成する処理を行い(ステップS187)、次のステップに処理を進める。なお、上記ステップS187における振動データ生成処理は、上述したステップS170における振動データ生成処理と同様であるため、ここでは詳細な説明を省略する。
次に、プロセッサ81は、右コントローラ4を振動させるための振動データにおける振幅を調整する処理を行い(ステップS188)、次のステップに処理を進める。例えば、プロセッサ81は、操作方式データDeが示す操作方式(拡張グリップ操作方式)に基づいて、上記ステップS187で生成された振動データの振幅を調整し、当該調整後の振動データを用いて右コントローラ調整振動データDiを更新する。具体的には、プロセッサ81は、右コントローラ振動データDgが示す振動波形(右コントローラ用振動波形)が示す振幅値を第1のサブ関数(係数a;例えば、a=0.65)を用いて算出した値と、第2のサブ関数(上限値b;例えば、b=0.4)を用いて制限した値とを比較して、小さい方の値を調整後の振幅値として選択し、当該調整後の振幅値を用いて振動波形を調整して右コントローラ調整振動データDiを更新する。
次に、プロセッサ81は、振動データを送信する周期毎に当該周期に対応する振動データを左コントローラ3および右コントローラ4へ送信する処理を行い(ステップS189)、当該サブルーチンによる処理を終了する。なお、上記ステップS189における振動データ送信処理は、上述したステップS172における振動データ送信処理と同様であるため、ここでは詳細な説明を省略する。
図28に戻り、上記ステップS147において拡張グリップ操作方式が選択されていないと判定した場合、プロセッサ81は、携帯機モード操作方式が選択されているか否か(本体装置2と左コントローラ3および右コントローラ4との間が物理接続(有線接続)されているか否か)を判定する(ステップS149)。そして、プロセッサ81は、携帯機モード操作方式が選択されている場合、ステップS150に処理を進める。一方、プロセッサ81は、携帯機モード操作方式が選択されていない場合、ステップS151に処理を進める。
ステップS150において、プロセッサ81は、携帯機モード操作方式によるゲーム処理を行い、ステップS152に処理を進める。以下、図31を参照して、携帯機モード操作方式によるゲーム処理について説明する。
図31において、プロセッサ81は、左コントローラ3および右コントローラ4から操作データを取得して操作データDaを更新し(ステップS191)、次のステップに処理を進める。
次に、プロセッサ81は、第1オブジェクト動作処理を行い(ステップS192)、次のステップに処理を進める。例えば、プロセッサ81は、操作対応テーブルデータDkが示す操作対応テーブルの記述に基づいて、上記ステップS191において取得した操作データが示す指示内容を設定し、当該指示内容に応じて第1オブジェクトG1を動作させて、プレイヤオブジェクト位置データDmを更新する。なお、上記ステップS192における処理は、上述したステップS182における第1オブジェクト動作処理と同様であるため、ここでは詳細な説明を省略する。
次に、プロセッサ81は、第2オブジェクト動作処理を行い(ステップS193)、次のステップに処理を進める。例えば、プロセッサ81は、操作対応テーブルデータDkが示す操作対応テーブルの記述に基づいて、上記ステップS191において取得した操作データが示す指示内容を設定し、当該指示内容に応じて第2オブジェクトG2を動作させて、プレイヤオブジェクト位置データDmを更新する。なお、上記ステップS193における処理は、上述したステップS183における第2オブジェクト動作処理と同様であるため、ここでは詳細な説明を省略する。
次に、プロセッサ81は、プレイヤオブジェクト動作処理を行い(ステップS194)、次のステップに処理を進める。例えば、プロセッサ81は、操作対応テーブルデータDkが示す操作対応テーブルの記述に基づいて、上記ステップS191において取得した操作データが示す指示内容を設定し、当該指示内容に応じてプレイヤオブジェクトPOを動作させて、プレイヤオブジェクト位置データDmを更新する。なお、上記ステップS194における処理は、上述したステップS184におけるプレイヤオブジェクト動作処理と同様であるため、ここでは詳細な説明を省略する。
次に、プロセッサ81は、左コントローラ3を振動させるための振動データを生成する処理を行い(ステップS195)、次のステップに処理を進める。なお、上記ステップS195における振動データ生成処理は、上述したステップS168における振動データ生成処理と同様であるため、ここでは詳細な説明を省略する。
次に、プロセッサ81は、左コントローラ3を振動させるための振動データにおける振幅を調整する処理を行い(ステップS196)、次のステップに処理を進める。例えば、プロセッサ81は、操作方式データDeが示す操作方式(携帯機モード操作方式)に基づいて、上記ステップS195で生成された振動データの振幅を調整し、当該調整後の振動データを用いて左コントローラ調整振動データDhを更新する。具体的には、プロセッサ81は、左コントローラ振動データDfが示す振動波形(左コントローラ用振動波形)が示す振幅値を第1のサブ関数(係数a;例えば、a=0.45)を用いて算出した値と、第2のサブ関数(上限値b;例えば、b=0.1)を用いて制限した値とを比較して、小さい方の値を調整後の振幅値として選択し、当該調整後の振幅値を用いて振動波形を調整して左コントローラ調整振動データDhを更新する。
次に、プロセッサ81は、右コントローラ4を振動させるための振動データを生成する処理を行い(ステップS197)、次のステップに処理を進める。なお、上記ステップS197における振動データ生成処理は、上述したステップS170における振動データ生成処理と同様であるため、ここでは詳細な説明を省略する。
次に、プロセッサ81は、右コントローラ4を振動させるための振動データにおける振幅を調整する処理を行い(ステップS198)、次のステップに処理を進める。例えば、プロセッサ81は、操作方式データDeが示す操作方式(携帯機モード操作方式)に基づいて、上記ステップS197で生成された振動データの振幅を調整し、当該調整後の振動データを用いて右コントローラ調整振動データDiを更新する。具体的には、プロセッサ81は、右コントローラ振動データDgが示す振動波形(右コントローラ用振動波形)が示す振幅値を第1のサブ関数(係数a;例えば、a=0.65)を用いて算出した値と、第2のサブ関数(上限値b;例えば、b=0.4)を用いて制限した値とを比較して、小さい方の値を調整後の振幅値として選択し、当該調整後の振幅値を用いて振動波形を調整して右コントローラ調整振動データDiを更新する。
次に、プロセッサ81は、振動データを送信する周期毎に当該周期に対応する振動データを左コントローラ3および右コントローラ4へ送信する処理を行い(ステップS199)、当該サブルーチンによる処理を終了する。なお、上記ステップS199における振動データ送信処理は、上述したステップS172における振動データ送信処理と同様であるため、ここでは詳細な説明を省略する。
図28に戻り、上記ステップS149において携帯機モード操作方式が選択されていないと判定した場合、プロセッサ81は、横持ち操作方式が選択されているとしてステップS151に処理を進める。ステップS151において、プロセッサ81は、横持ち操作方式によるゲーム処理を行い、ステップS152に処理を進める。以下、図32を参照して、横持ち操作方式によるゲーム処理について説明する。
図32において、プロセッサ81は、横持ち操作方式で用いられるコントローラとして設定されている左コントローラ3または右コントローラ4から操作データを取得して操作データDaを更新し(ステップS201)、次のステップに処理を進める。
次に、プロセッサ81は、第1オブジェクト動作処理を行い(ステップS202)、次のステップに処理を進める。例えば、プロセッサ81は、操作対応テーブルデータDkが示す操作対応テーブルの記述に基づいて、上記ステップS201において取得した操作データが示す指示内容を設定し、当該指示内容に応じて第1オブジェクトG1を動作させて、プレイヤオブジェクト位置データDmを更新する。
例えば、左コントローラ3を用いた横持ち操作方式において、プロセッサ81は、上記ステップS201において取得した操作データが左方向ボタン36の押下操作を示している場合、移動開始位置から所定方向への第1オブジェクトG1の移動を開始して、プレイヤオブジェクト位置データDmを更新する。また、プロセッサ81は、上記ステップS201において取得した操作データがアナログスティック32の傾倒操作を示している場合、移動開始位置から離れて仮想ゲーム世界を第1オブジェクトG1が移動中であれば、アナログスティック32が傾倒操作されている方向および傾倒角度に応じて、第1オブジェクトG1の移動方向や移動速度を変化させて、プレイヤオブジェクト位置データDmを更新する。
また、右コントローラ4を用いた横持ち操作方式において、プロセッサ81は、上記ステップS201において取得した操作データがAボタン53の押下操作を示している場合、移動開始位置から所定方向への第1オブジェクトG1の移動を開始して、プレイヤオブジェクト位置データDmを更新する。また、プロセッサ81は、上記ステップS201において取得した操作データがアナログスティック52の傾倒操作を示している場合、移動開始位置から離れて仮想ゲーム世界を第1オブジェクトG1が移動中であれば、アナログスティック52が傾倒操作されている方向および傾倒角度に応じて、第1オブジェクトG1の移動方向や移動速度を変化させて、プレイヤオブジェクト位置データDmを更新する。
そして、何れのコントローラを用いた横持ち操作方式であっても、プロセッサ81は、第1オブジェクトG1の移動方向および移動アルゴリズムに基づいて、移動開始位置に戻るまで第1オブジェクトG1の移動を継続する。例えば、プロセッサ81は、プレイヤオブジェクト位置データDmを参照して第1オブジェクトG1の位置および移動方向を取得し、当該第1オブジェクトG1の位置から当該移動方向および移動アルゴリズムに基づいて第1オブジェクトG1を移動させ、当該移動後の第1オブジェクトG1の位置を用いてプレイヤオブジェクト位置データDmを更新する。なお、第1オブジェクトG1が移動開始位置に戻る仮想空間内の復路を移動している場合、現在の第1オブジェクトG1の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。また、第1オブジェクトG1が他のオブジェクトと衝突した場合、当該衝突状況に応じた位置に第1オブジェクトG1の位置が設定される。また、プレイヤオブジェクトPOが左パンチを繰り出す動作をしていない場合、プレイヤオブジェクトPOの位置に基づいた移動開始位置に第1オブジェクトG1の位置が設定される。
次に、プロセッサ81は、第2オブジェクト動作処理を行い(ステップS203)、次のステップに処理を進める。例えば、プロセッサ81は、操作対応テーブルデータDkが示す操作対応テーブルの記述に基づいて、上記ステップS201において取得した操作データが示す指示内容を設定し、当該指示内容に応じて第2オブジェクトG2を動作させて、プレイヤオブジェクト位置データDmを更新する。
例えば、左コントローラ3を用いた横持ち操作方式において、プロセッサ81は、上記ステップS201において取得した操作データが下方向ボタン34の押下操作を示している場合、移動開始位置から所定方向への第2オブジェクトG2の移動を開始して、プレイヤオブジェクト位置データDmを更新する。また、プロセッサ81は、上記ステップS201において取得した操作データがアナログスティック32の傾倒操作を示している場合、移動開始位置から離れて仮想ゲーム世界を第2オブジェクトG2が移動中であれば、アナログスティック32が傾倒操作されている方向および傾倒角度に応じて、第2オブジェクトG2の移動方向や移動速度を変化させて、プレイヤオブジェクト位置データDmを更新する。
また、右コントローラ4を用いた横持ち操作方式において、プロセッサ81は、上記ステップS201において取得した操作データがXボタン55の押下操作を示している場合、移動開始位置から所定方向への第2オブジェクトG2の移動を開始して、プレイヤオブジェクト位置データDmを更新する。また、プロセッサ81は、上記ステップS201において取得した操作データがアナログスティック52の傾倒操作を示している場合、移動開始位置から離れて仮想ゲーム世界を第2オブジェクトG2が移動中であれば、アナログスティック52が傾倒操作されている方向および傾倒角度に応じて、第2オブジェクトG2の移動方向や移動速度を変化させて、プレイヤオブジェクト位置データDmを更新する。
そして、何れのコントローラを用いた横持ち操作方式であっても、プロセッサ81は、第2オブジェクトG2の移動方向および移動アルゴリズムに基づいて、移動開始位置に戻るまで第2オブジェクトG2の移動を継続する。例えば、プロセッサ81は、プレイヤオブジェクト位置データDmを参照して第2オブジェクトG2の位置および移動方向を取得し、当該第2オブジェクトG2の位置から当該移動方向および移動アルゴリズムに基づいて第2オブジェクトG2を移動させ、当該移動後の第2オブジェクトG2の位置を用いてプレイヤオブジェクト位置データDmを更新する。なお、第2オブジェクトG2が移動開始位置に戻る仮想空間内の復路を移動している場合、現在の第2オブジェクトG2の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。また、第2オブジェクトG2が他のオブジェクトと衝突した場合、当該衝突状況に応じた位置に第2オブジェクトG2の位置が設定される。また、プレイヤオブジェクトPOが右パンチを繰り出す動作をしていない場合、プレイヤオブジェクトPOの位置に基づいた移動開始位置に第2オブジェクトG2の位置が設定される。
次に、プロセッサ81は、プレイヤオブジェクト動作処理を行い(ステップS204)、次のステップに処理を進める。例えば、プロセッサ81は、操作対応テーブルデータDkが示す操作対応テーブルの記述に基づいて、上記ステップS201において取得した操作データが示す指示内容を設定し、当該指示内容に応じてプレイヤオブジェクトPOを動作させて、プレイヤオブジェクト位置データDmを更新する。
すなわち、左コントローラ3を用いた横持ち操作方式において、プロセッサ81は、操作データDaを参照して、アナログスティック32がy軸正方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを左に移動させて、プレイヤオブジェクト位置データDmを更新する。プロセッサ81は、操作データDaを参照して、アナログスティック32がy軸負方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを右に移動させて、プレイヤオブジェクト位置データDmを更新する。プロセッサ81は、操作データDaを参照して、アナログスティック32がx軸負方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを前方に移動させて、プレイヤオブジェクト位置データDmを更新する。プロセッサ81は、操作データDaを参照して、アナログスティック32がx軸正方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを後方に移動させて、プレイヤオブジェクト位置データDmを更新する。そして、プロセッサ81は、操作データDaを参照して、アナログスティック32を押し込む操作が行われている場合、第1オブジェクトG1および第2オブジェクトG2が移動開始位置に配置されていれば、プレイヤオブジェクトPOに防御動作させる。また、操作データDaを参照して、上方向ボタン35が押下されている場合、プレイヤオブジェクトPOをダッシュで移動させて、プレイヤオブジェクト位置データDmを更新する。また、操作データDaを参照して、右方向ボタン33が押下されている場合、プレイヤオブジェクトPOをジャンプさせて、プレイヤオブジェクト位置データDmを更新する。
また、右コントローラ4を用いた横持ち操作方式において、プロセッサ81は、操作データDaを参照して、アナログスティック52がy軸負方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを左に移動させて、プレイヤオブジェクト位置データDmを更新する。プロセッサ81は、操作データDaを参照して、アナログスティック52がy軸正方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを右に移動させて、プレイヤオブジェクト位置データDmを更新する。プロセッサ81は、操作データDaを参照して、アナログスティック52がx軸正方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを前方に移動させて、プレイヤオブジェクト位置データDmを更新する。プロセッサ81は、操作データDaを参照して、アナログスティック52がx軸負方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを後方に移動させて、プレイヤオブジェクト位置データDmを更新する。そして、プロセッサ81は、操作データDaを参照して、アナログスティック52を押し込む操作が行われている場合、第1オブジェクトG1および第2オブジェクトG2が移動開始位置に配置されていれば、プレイヤオブジェクトPOに防御動作させる。また、操作データDaを参照して、Bボタン54が押下されている場合、プレイヤオブジェクトPOをダッシュで移動させて、プレイヤオブジェクト位置データDmを更新する。また、操作データDaを参照して、Yボタン56が押下されている場合、プレイヤオブジェクトPOをジャンプさせて、プレイヤオブジェクト位置データDmを更新する。
次に、プロセッサ81は、左コントローラ3を振動させるための振動データを生成する処理を行い(ステップS205)、次のステップに処理を進める。なお、上記ステップS205における振動データ生成処理は、上述したステップS168における振動データ生成処理と同様であるため、ここでは詳細な説明を省略する。
次に、プロセッサ81は、左コントローラ3を振動させるための振動データにおける振幅を調整する処理を行い(ステップS206)、次のステップに処理を進める。例えば、プロセッサ81は、操作方式データDeが示す操作方式(横持ち操作方式)に基づいて、上記ステップS205で生成された振動データの振幅を調整し、当該調整後の振動データを用いて左コントローラ調整振動データDhを更新する。具体的には、プロセッサ81は、左コントローラ振動データDfが示す振動波形(左コントローラ用振動波形)が示す振幅値を第1のサブ関数(係数a;例えば、a=0.35)を用いて算出した値と、第2のサブ関数(上限値b;例えば、b=0.2)を用いて制限した値とを比較して、小さい方の値を調整後の振幅値として選択し、当該調整後の振幅値を用いて振動波形を調整して左コントローラ調整振動データDhを更新する。
次に、プロセッサ81は、右コントローラ4を振動させるための振動データを生成する処理を行い(ステップS207)、のステップに処理を進める。なお、上記ステップS207における振動データ生成処理は、上述したステップS170における振動データ生成処理と同様であるため、ここでは詳細な説明を省略する。
次に、プロセッサ81は、右コントローラ4を振動させるための振動データにおける振幅を調整する処理を行い(ステップS208)、次のステップに処理を進める。例えば、プロセッサ81は、操作方式データDeが示す操作方式(横持ち操作方式)に基づいて、上記ステップS207で生成された振動データの振幅を調整し、当該調整後の振動データを用いて右コントローラ調整振動データDiを更新する。具体的には、プロセッサ81は、右コントローラ振動データDgが示す振動波形(右コントローラ用振動波形)が示す振幅値を第1のサブ関数(係数a;例えば、a=0.35)を用いて算出した値と、第2のサブ関数(上限値b;例えば、b=0.2)を用いて制限した値とを比較して、小さい方の値を調整後の振幅値として選択し、当該調整後の振幅値を用いて振動波形を調整して右コントローラ調整振動データDiを更新する。
次に、プロセッサ81は、振動合成処理を行い(ステップS209)、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS206で生成されて更新された左コントローラ調整振動データDhおよび上記ステップS208で生成されて更新された右コントローラ調整振動データDiに基づいて、1つのコントローラを振動させるための合成振動データを生成し、当該データを用いて合成振動データDjを更新する。具体的には、プロセッサ81は、左コントローラ調整振動データDhが示す振動波形(振幅調整後の左コントローラ用振動波形)と右コントローラ調整振動データDiが示す振動波形(振幅調整後の右コントローラ用振動波形)とを、上述した選択方式や加算方式等によって合成し、当該合成した振動波形を用いて合成振動データDjを更新する。
次に、プロセッサ81は、振動データを送信する周期毎に当該周期に対応する振動データを、横持ち操作方式で用いられるコントローラとして設定されている左コントローラ3または右コントローラ4へ送信する処理を行い(ステップS210)、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、合成振動データDjを参照して、上記送信周期に対応する振動長さ分の振動データを左コントローラ3または右コントローラ4へ送信する。このように1つのコントローラを振動させるための合成振動データが送信されることによって、当該合成振動データを受信した左コントローラ3または右コントローラ4は、合成振動データに応じた振動波形で振動する。
図28に戻り、ステップS152において、プロセッサ81は、表示制御処理を行い、次のステップに処理を進める。例えば、プロセッサ81は、プレイヤオブジェクト位置データDm、および敵オブジェクト位置データDnを用いて、ゲームフィールド上にプレイヤオブジェクトPO、第1オブジェクトG1、第2オブジェクトG2、敵オブジェクトEOを配置する。そして、プロセッサ81は、所定の位置(例えば、プレイヤオブジェクトPOの背後)に配置された仮想カメラからゲームフィールドを見た仮想空間画像を生成し、当該仮想空間画像を表示装置(例えば、据置型モニタ6やディスプレイ12)の表示画面に表示する処理を行う。
次に、プロセッサ81は、ゲームを終了するか否かを判定する(ステップS153)。上記ステップS153においてゲームを終了する条件としては、例えば、上記ゲームの結果が確定したことや、ユーザがゲームを終了する操作を行ったこと等がある。プロセッサ81は、ゲームを終了しない場合に上記ステップS145に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。以降、ステップS145〜ステップS153の一連の処理は、ステップS153でゲームを終了すると判定されるまで繰り返し実行される。
このように、本実施例においては、用いられている操作方式に応じて振動の強さが調整される関数が選択されるため、ゲームコントローラに与える振動を操作方式に応じた適切な振動強さに調整することができる。また、本実施例においては、操作方式に応じて複数のサブ関数が選択され、強い振動と弱い振動とによってサブ関数を使い分けることができるため、強い振動を好適な振動強さに調整するととともに、弱い振動も好適な振動強さに調整することが可能となり、操作方式に応じた適切な振動強さに調整することが可能となる。
なお、上述した実施例では、ゲーム開始前に操作方式が選択されて設定される例を用いたが、ゲーム中であっても操作方式が変更可能であってもよい。一例として、上述した複数の操作方式それぞれに設定されている固有の操作がゲーム中に行われることに応じて、操作方式が切り替え可能に構成されてもよい。他の例として、所定の操作が行われることによって操作方式の選択肢を表示してゲームを中断し、当該ゲーム中断中に選択肢が選択されることに応じて、操作方式が切り替え可能に構成されてもよい。
また、上述した実施例では、左コントローラ3の振動データと右コントローラ4の振動データとの振幅を調整する処理を、本体装置2において行っているが、他の装置において当該処理を行ってもよい。例えば、振動データを用いて振動することになる左コントローラ3および/または右コントローラ4側において、当該振動データにおける振幅を調整する処理を行ってもよい。この場合、本体装置2から対象となるコントローラへ、左コントローラ3の振動データと振幅を調整するための関数(パラメータ)とを送信することによって、当該コントローラ側で振動データの振幅を調整する処理が可能となる。
また、上述した実施例では、1人のユーザが縦持ち操作方式、拡張グリップ操作方式、携帯機モード操作方式、および横持ち操作方式によって左コントローラ3および/または右コントローラ4を用いてゲームプレイする例を用いたが、複数のユーザがゲームプレイすることも考えられる。この場合、それぞれのユーザが用いる左コントローラ3および/または右コントローラ4に対して、それぞれのユーザが設定された操作方式に応じた振動をそれぞれのユーザが操作するコントローラに与えればよい。
また、複数のユーザが横持ち操作方式によって左コントローラ3および右コントローラ4の一方を用いる場合、それぞれのユーザが操作するコントローラに対して、同じ振動を与えることも考えられる。例えば、複数のユーザがそれぞれ縦持ち操作方式、拡張グリップ操作方式、または携帯機モード操作方式によって同じゲームをプレイする場合に、それぞれのユーザが把持する左コントローラ3には同じ振動が与えられ、それぞれのユーザが把持する左コントローラ3にも同じ振動が与えられるゲーム例(例えば、ゲームで再生されるBGMや効果音と連動して左コントローラ3および右コントローラ4にそれぞれ振動が与えられるケース、複数のユーザが同じプレイヤオブジェクトを操作するケース等)を想定する。上記ゲームを複数のユーザがそれぞれ横持ち操作方式によって操作する場合、左コントローラ3用の振動波形と右コントローラ4用の振動波形とが各ユーザにおいて同じとなるため、複数のユーザがそれぞれ操作するコントローラには、それぞれ同じ振動が与えられることになる。
また、上述した実施例では、複数のコントローラを用いて、縦持ち操作方式、拡張グリップ操作方式、および携帯機モード操作方式に設定される例を用いたが、1つのコントローラを用いてそれぞれの操作方式に設定され、当該操作方式に応じて当該1つのコントローラに与えられる振動強さが調整されてもよい。例えば、付属機器(拡張グリップ210)に複数のコントローラ(左コントローラ3および右コントローラ4)が装着されることによって拡張グリップ操作方式に設定され、本体装置2に対して複数のコントローラ(左コントローラ3および右コントローラ4)が装着されることによって携帯機モード操作方式に設定される例を用いたが、一方のコントローラが付属機器や本体装置2に装着された場合にそれぞれの操作方式に設定されてもよい。一例として、右コントローラ4が既に装着されているまたは固定されている拡張グリップ210や本体装置2に対して、左コントローラ3が装着された場合にそれぞれの操作方式に設定されて、それぞれに操作方式に応じた振幅に調整されてもよい。他の例として、何れのコントローラも装着されていない拡張グリップ210や本体装置2に対して、左コントローラ3または右コントローラ4のみが装着された場合にそれぞれの操作方式に設定され、当該装着されたコントローラのみを用いて操作する場合に、当該コントローラに与えられる振動がそれぞれに操作方式に応じた振幅に調整されてもよい。また、左コントローラ3および右コントローラ4の一方のみを用いて上述した縦持ち操作を行う場合であっても上述した縦持ち操作方式に設定され、当該操作に用いられる1つのコントローラに与えられる振動が縦持ち操作方式に応じた振幅に調整されてもよい。また、左コントローラ3および右コントローラ4とは異なる、単一のゲームコントローラによるゲームプレイが可能である場合、当該単一のゲームコントローラを用いた操作が選択されることによって、当該ゲームコントローラに与えられる振動強さが選択されたゲームコントローラの種別に応じて調整されてもよい。
また、左コントローラ3および/または右コントローラ4に別の部材や別の装置が着脱可能に構成されている場合、当該別の部材や別の装置が装着されているか否かによって振動の振幅を調整してもかまわない。例えば、左コントローラ3および/または右コントローラ4に外部バッテリ(例えば、蓄電池)が着脱可能である場合、当該外部バッテリが装着されているか否かによって、振動の振幅を変化させてもよい。一例として、上記外部バッテリが装着された状態で横持ち操作方式が用いられている場合と、上記外部バッテリが装着されていない状態で横持ち操作方式が用いられている場合とで、異なる関数(パラメータ)を用いて振動の振幅を調整してもよい。左コントローラ3および/または右コントローラ4において上記外部バッテリの着脱を検出し、当該検出情報を本体装置2へ送信することによって、当該検出情報に基づいて振動の振幅を調整する関数(パラメータ)を選択することが可能となる。
また、上述した実施例では、用いられている操作方式に応じて振動の振幅が調整される例を用いたが、操作方式に応じて振動の周波数を調整してもかまわない。例えば、操作に用いられる操作装置の形状、サイズ、重量、材質等によって異なる共振周波数の特性を有している。また、操作に用いられる操作装置によって、当該操作装置を操作するユーザが振動を感じやすい周波数帯域や振動を感じにくい周波数帯域があることも考えられる。このような操作装置固有の共振周波数、振動を感じやすい周波数帯域、および/または振動を感じにくい周波数帯域を避けるように、または積極的に当該共振周波数および/または当該周波数帯域を狙って振動の周波数を調整してもよい。また、操作装置の構成により、周波数が相対的に高い振動を感じやすい場合や周波数が相対的に低い振動を感じやすい場合が考えられる。このような場合、操作装置が有する特性に応じて、操作装置に与える振動の周波数を相対的に高い周波数や低い周波数にシフトして調整してもよい。さらに、上述した操作方式に応じた振動の振幅を調整に、上記振動の周波数の調整を加えてもかまわない。
また、上述した実施例において、左コントローラ3や右コントローラ4の動きや姿勢を検出する方法については、単なる一例であって、他の方法や他のデータを用いて左コントローラ3や右コントローラ4の動きや姿勢を検出してもよい。また、上述した実施例では、左コントローラ3や右コントローラ4を用いた操作に応じたゲーム画像を据置型モニタ6に表示しているが、本体装置2のディスプレイ12に表示してもよい。また、第1オブジェクトG1および/または第2オブジェクトG2の動作を制御するためのコントローラは、左コントローラ3および右コントローラ4のセットだけでなく、他のコントローラが組み合わせられたり、他のコントローラ同士が組み合わせられたりしてもよい。
また、他の実施形態においては、本体装置2は、据置型モニタ6と直接通信可能であってもよい。例えば、本体装置2と据置型モニタ6とが直接有線通信または直接無線通信を行うことが可能であってもよい。この場合、本体装置2は、本体装置2と据置型モニタ6とが直接通信可能か否かに基づいて画像の表示先を決定してもよい。
また、付加装置(例えば、クレードル)は、本体装置2を着脱可能な任意の付加装置であってよい。付加装置は、本実施形態のように、本体装置2に対する充電を行う機能を有していてもよいし、有していなくてもよい。
また、ゲームシステム1は、どのような装置であってもよく、携帯型のゲーム装置、任意の携帯型電子機器(PDA(Personal Digital Assistant)、携帯電話、パーソナルコンピュータ、カメラ、タブレット等)等であってもよい。
また、上述した説明では情報処理(ゲーム処理)をゲームシステム1でそれぞれ行う例を用いたが、上記処理ステップの少なくとも一部を他の装置で行ってもかまわない。例えば、ゲームシステム1がさらに他の装置(例えば、別のサーバ、他の画像表示装置、他のゲーム装置、他の携帯端末)と通信可能に構成されている場合、上記処理ステップは、さらに当該他の装置が協働することによって実行してもよい。このように、上記処理ステップの少なくとも一部を他の装置で行うことによって、上述した処理と同様の処理が可能となる。また、上述した情報処理(ゲーム処理)は、少なくとも1つの情報処理装置により構成される情報処理システムに含まれる1つのプロセッサまたは複数のプロセッサ間の協働により実行されることが可能である。また、上記実施例においては、ゲームシステム1のプロセッサ81が所定のプログラムを実行することによって情報処理を行うことが可能であるが、ゲームシステム1が備える専用回路によって上記処理の一部または全部が行われてもよい。
ここで、上述した変形例によれば、いわゆるクラウドコンピューティングのシステム形態や分散型の広域ネットワークおよびローカルネットワークのシステム形態でも本発明を実現することが可能となる。例えば、分散型のローカルネットワークのシステム形態では、据置型の情報処理装置(据置型のゲーム装置)と携帯型の情報処理装置(携帯型のゲーム装置)との間で上記処理を協働により実行することも可能となる。なお、これらのシステム形態では、上述した処理をどの装置で行うかについては特に限定されず、どのような処理分担をしたとしても本発明を実現できることは言うまでもない。
また、上述した情報処理で用いられる処理順序、設定値、判定に用いられる条件等は、単なる一例に過ぎず他の順序、値、条件であっても、本実施例を実現できることは言うまでもない。
また、上記プログラムは、外部メモリ等の外部記憶媒体を通じてゲームシステム1に供給されるだけでなく、有線または無線の通信回線を通じて当該装置に供給されてもよい。また、上記プログラムは、当該装置内部の不揮発性記憶装置に予め記録されていてもよい。なお、上記プログラムを記憶する情報記憶媒体としては、不揮発性メモリの他に、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープ、などでもよい。また、上記プログラムを記憶する情報記憶媒体としては、上記プログラムを記憶する揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施例の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。