[1.情報処理システムの構成]
以下、本実施形態の一例に係る情報処理システム、情報処理装置、ゲームプログラム、および、ゲーム処理方法について説明する。本実施形態におけるゲームシステムの一例となる情報処理システム1は、本体装置(情報処理装置;本実施形態ではゲーム装置本体として機能する)2と左コントローラ3および右コントローラ4とによって構成される。また、上記情報処理システムの他の態様は、上記構成にクレードル5(図6、図7等参照)を加えて構成されることもある。本実施形態における情報処理システム1は、本体装置2に対して左コントローラ3および右コントローラ4が着脱可能であり、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置として利用でき、また、本体装置2と左コントローラ3および右コントローラ4とを別体として利用することもできる(図2参照)。また、情報処理システム1は、本体装置2に画像を表示する態様での利用と、テレビ等の他の表示装置に画像を表示させる態様での利用が可能である。前者の態様において、情報処理システム1は、携帯型装置(例えば、携帯ゲーム機)として利用することができる。また、後者の態様において、情報処理システム1は、据置型装置(例えば、据置型ゲーム機)として利用することができる。
図1は、本実施形態における情報処理システム1の一例において、本体装置2に左コントローラ3および右コントローラ4を装着した状態を示す図である。図1に示すように、情報処理システム1は、本体装置2と、左コントローラ3と、右コントローラ4とを含む。左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、情報処理システム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、ディスプレイ12を備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための操作部を備える装置である。
図2は、本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図である。図1および図2に示すように、左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。なお、本実施形態において、1人のユーザが操作する「操作装置」は、1つのコントローラ(例えば、左コントローラ3および右コントローラ4の一方)でも複数のコントローラ(例えば、左コントローラ3および右コントローラ4の両方、またはさらに他のコントローラを含んでもよい)でもよく、当該「操作装置」は、1以上のコントローラによって構成可能となる。以下、本体装置2と左コントローラ3および右コントローラ4との具体的な構成の一例について説明する。
図3は、本体装置2の一例を示す六面図である。図3に示すように、本体装置2は、略板状のハウジング11を備える。本実施形態において、ハウジング11の主面(換言すれば、表側の面、すなわち、ディスプレイ12が設けられる面)は、大略的には矩形形状である。本実施形態においては、ハウジング11は、横長の形状であるものとする。つまり、本実施形態においては、ハウジング11の主面の長手方向(すなわち、図1に示すx軸方向)を横方向(左右方向とも言う)と呼び、当該主面の短手方向(すなわち、図1に示すy軸方向)を縦方向(上下方向とも言う)と呼び、主面に垂直な方向(すなわち、図1に示すz軸方向)を奥行方向(前後方向とも言う)と呼ぶこととする。本体装置2は、本体装置2が横長となる向きで利用されることが可能である。また、本体装置2が縦長となる向きで利用されることも可能である。その場合には、ハウジング11を縦長の形状であるものと見なしてもよい。
なお、ハウジング11の形状および大きさは、任意である。一例として、ハウジング11は、携帯可能な大きさであってよい。また、本体装置2単体または本体装置2に左コントローラ3および右コントローラ4が装着された一体型装置は、携帯型装置となってもよい。また、本体装置2または一体型装置が手持ち型の装置となってもよい。また、本体装置2または一体型装置が可搬型装置となってもよい。
図3に示すように、本体装置2は、ハウジング11の主面に設けられるディスプレイ12を備える。ディスプレイ12は、本体装置2が取得または生成した画像(静止画であってもよいし、動画であってもよい)を表示する。本実施形態においては、ディスプレイ12は、液晶表示装置(LCD)とする。ただし、ディスプレイ12は任意の種類の表示装置であってよい。
また、本体装置2は、ディスプレイ12の画面上にタッチパネル13を備える。本実施形態においては、タッチパネル13は、マルチタッチ入力が可能な方式(例えば、静電容量方式)のものである。ただし、タッチパネル13は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式(例えば、抵抗膜方式)のものであってもよい。
本体装置2は、ハウジング11の内部においてスピーカ(すなわち、図8に示すスピーカ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と音量ボタン26aおよび26bとを備える。
本体装置2は、下側端子27を備える。下側端子27は、本体装置2が、後述するクレードル5と通信を行うための端子である。本実施形態において、下側端子27は、USBコネクタ(より具体的には、メス側コネクタ)である。
図4は、左コントローラ3の一例を示す六面図である。図4に示すように、左コントローラ3は、ハウジング31を備える。本実施形態において、ハウジング31は、略板状である。また、本実施形態においては、ハウジング31は、縦長の形状、すなわち、上下方向(すなわち、図1に示す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を備える。また、左コントローラ3と同様、第2Lボタン65および第2Rボタン66を備える。
また、右コントローラ4は、右コントローラ4が本体装置2と有線通信を行うための端子64を備える。
図6は、本実施形態における情報処理システムの他の例の全体構成を示す図である。図6に示すように、一例として、クレードル5は、左コントローラ3および右コントローラ4を本体装置2から取り外した状態で本体装置2のみを載置することが可能である。また、さらに他の例として、クレードル5は、左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置を載置することも可能である。また、クレードル5は、ディスプレイ12とは別体の外部表示装置の一例である据置型モニタ6(例えば、据置型テレビ)と通信可能である(有線通信であってもよいし、無線通信であってもよい)。詳細は後述するが、上記一体型装置または本体装置2単体をクレードル5に載置した場合、情報処理システムは、本体装置2が取得または生成した画像を据置型モニタ6に表示することができる。また、本実施形態においては、クレードル5は、載置された上記一体型装置または本体装置2単体を充電する機能を有する。また、クレードル5は、ハブ装置(具体的には、USBハブ)の機能を有する。
図7は、クレードル5の一例の外観構成を示す図である。クレードル5は、上記一体型装置または本体装置2のみを着脱可能に載置する(装着するとも言える)ことが可能なハウジングを有する。本実施形態においては、図7に示すように、ハウジングは、溝71aが形成される第1支持部71と、略平面状の第2支持部72とを有する。
図7に示すように、第1支持部71に形成される溝71aは、上記一体型装置の下側部分の形状に応じた形状を有する。具体的には、溝71aは、上記一体型装置の下側部分を挿入可能な形状であり、より具体的には、上記本体装置2の下側部分と略一致する形状である。したがって、上記一体型装置の下側部分を溝71aに挿入することによって、上記一体型装置をクレードル5に載置することができる。また、第2支持部72は、その下側部分が溝71aに挿入された上記一体型装置の表面(すなわち、ディスプレイ12が設けられる面)を支持する。この第2支持部72によって、クレードル5は、上記一体型装置をより安定的に支持することができる。なお、図7に示すハウジングの形状は一例であり、他の実施形態においては、クレードル5のハウジングは、上記本体装置2を載置することが可能な任意の形状であってよい。
図7に示すように、また、クレードル5は、クレードル5が上記一体型装置と通信を行うための本体端子73を備える。図7に示すように、本体端子73は、第1支持部71に形成される溝71aの底面に設けられる。より具体的には、本体端子73は、上記一体型装置がクレードル5に装着される場合に、本体装置2の下側端子27が接触する位置に設けられる。本実施形態においては、本体端子73は、USBコネクタ(より具体的には、オス側コネクタ)である。
図7では図示しないが、クレードル5は、ハウジングの背面に端子(本実施形態においては、複数の端子を有する。具体的には、クレードル5は、図10に示すモニタ用端子132、電源端子134、および拡張用端子137)を有する。これらの端子の詳細については後述する。
図8は、本体装置2の内部構成の一例を示すブロック図である。本体装置2は、図3に示す構成の他、図8に示す各構成要素81〜98を備える。これらの構成要素81〜98のいくつかは、電子部品として電子回路基板上に実装されてハウジング11内に収納されてもよい。
本体装置2は、CPU(Central Processing Unit)81を備える。CPU81は、本体装置2において実行される各種の情報処理を実行する情報処理部である。CPU81は、記憶部(具体的には、フラッシュメモリ84等の内部記憶媒体、あるいは、各スロット23および24に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ84およびDRAM(Dynamic Random Access Memory)85を備える。フラッシュメモリ84およびDRAM85は、CPU81に接続される。フラッシュメモリ84は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM85は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
本体装置2は、スロットインターフェース(以下、「I/F」と略記する。)91を備える。スロットI/F91は、CPU81に接続される。スロットI/F91は、スロット23に接続され、スロット23に装着された所定の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、CPU81の指示に応じて行う。
CPU81は、フラッシュメモリ84およびDRAM85、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
本体装置2は、ネットワーク通信部82を備える。ネットワーク通信部82は、CPU81に接続される。ネットワーク通信部82は、ネットワークを介して外部の装置と通信(具体的には、無線通信)を行う。本実施形態においては、ネットワーク通信部82は、第1の通信態様としてWi−Fiの規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部82は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。なお、上記第2の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置2との間で無線通信可能であり、複数の本体装置2の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
本体装置2は、コントローラ通信部83を備える。コントローラ通信部83は、CPU81に接続される。コントローラ通信部83は、左コントローラ3および/または右コントローラ4と無線通信を行う。本体装置2と左コントローラ3および右コントローラ4との通信方式は任意であるが、本実施形態においては、コントローラ通信部83は、左コントローラ3との間および右コントローラ4との間で、Bluetooth(登録商標)の規格に従った通信を行う。
CPU81は、上述の左側端子17、右側端子21、および、下側端子27に接続される。CPU81は、左コントローラ3と有線通信を行う場合、左側端子17を介して左コントローラ3へデータを送信するとともに、左側端子17を介して左コントローラ3から操作データを受信する。また、CPU81は、右コントローラ4と有線通信を行う場合、右側端子21を介して右コントローラ4へデータを送信するとともに、右側端子21を介して右コントローラ4から操作データを受信する。また、CPU81は、クレードル5と通信を行う場合、下側端子27を介してクレードル5へデータを送信する。このように、本実施形態においては、本体装置2は、左コントローラ3および右コントローラ4との間で、それぞれ有線通信と無線通信との両方を行うことができる。また、左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置または本体装置2単体がクレードル5に装着された場合、本体装置2は、クレードル5を介してデータ(例えば、画像データや音声データ)を据置型モニタ6に出力することができる。
ここで、本体装置2は、複数の左コントローラ3と同時に(換言すれば、並行して)通信を行うことができる。また、本体装置2は、複数の右コントローラ4と同時に(換言すれば、並行して)通信を行うことができる。したがって、ユーザは、複数の左コントローラ3および複数の右コントローラ4を用いて本体装置2に対する入力を行うことができる。
本体装置2は、タッチパネル13の制御を行う回路であるタッチパネルコントローラ86を備える。タッチパネルコントローラ86は、タッチパネル13とCPU81との間に接続される。タッチパネルコントローラ86は、タッチパネル13からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、CPU81へ出力する。
また、ディスプレイ12は、CPU81に接続される。CPU81は、(例えば、上記の情報処理の実行によって)生成した画像および/または外部から取得した画像をディスプレイ12に表示する。
本体装置2は、コーデック回路87およびスピーカ(具体的には、左スピーカおよび右スピーカ)88を備える。コーデック回路87は、スピーカ88および音声入出力端子25に接続されるとともに、CPU81に接続される。コーデック回路87は、スピーカ88および音声入出力端子25に対する音声データの入出力を制御する回路である。すなわち、コーデック回路87は、CPU81から音声データを受け取った場合、当該音声データに対してD/A変換を行って得られる音声信号をスピーカ88または音声入出力端子25へ出力する。これによって、スピーカ88あるいは音声入出力端子25に接続された音声出力部(例えば、イヤホン)から音が出力される。また、コーデック回路87は、音声入出力端子25から音声信号を受け取った場合、音声信号に対してA/D変換を行い、所定の形式の音声データをCPU81へ出力する。また、音量ボタン26は、CPU81に接続される。CPU81は、音量ボタン26に対する入力に基づいて、スピーカ88または上記音声出力部から出力される音量を制御する。
本体装置2は、電力制御部97およびバッテリ98を備える。電力制御部97は、バッテリ98およびCPU81に接続される。また、図示しないが、電力制御部97は、本体装置2の各部(具体的には、バッテリ98の電力の給電を受ける各部、左側端子17、および右側端子21)に接続される。電力制御部97は、CPU81からの指令に基づいて、バッテリ98から上記各部への電力供給を制御する。
また、バッテリ98は、下側端子27に接続される。外部の充電装置(例えば、クレードル5)が下側端子27に接続され、下側端子27を介して本体装置2に電力が供給される場合、供給された電力がバッテリ98に充電される。
図9は、情報処理システム1の内部構成の一例を示すブロック図である。なお、情報処理システム1のうちの本体装置2に関する内部構成の詳細については、図8で示しているため図9では省略している。
左コントローラ3は、本体装置2との間で通信を行う通信制御部101を備える。図9に示すように、通信制御部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)を備える。また、左コントローラ3は、アナログスティック(図9では「スティック」と記載する)32を備える。各ボタン103およびアナログスティック32は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部101へ出力する。
左コントローラ3は、加速度センサ104を備える。本実施形態においては、加速度センサ104は、所定の3軸(例えば、図11に示すXYZ軸)方向に沿った直線加速度の大きさを検出する。なお、加速度センサ104は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。また、左コントローラ3は、角速度センサ105を備える。本実施形態においては、角速度センサ105は、所定の3軸(例えば、図11に示す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に送信される振動制御信号は、単位時間ごとに周波数と振幅とを表すデジタル信号であってよい。別の実施形態においては、波形そのものを示す情報を送信するようにしてもよいが、振幅と周波数とだけを送信することで通信データ量を削減することができる。また、さらにデータ量を削減するため、そのときの振幅と周波数との数値に替えて、前回の値からの差分だけを送信するようにしてもよい。この場合、コーデック部106は、通信制御部101から取得される振幅と周波数との値を示すデジタル信号をアナログの電圧の波形に変換し、当該波形に合わせて電圧を入力することで振動子107を駆動させる。したがって、本体装置2は、単位時間ごとに送信する振幅および周波数を変えることによって、そのときに振動子107を振動させる振幅と周波数とを制御することができる。なお、本体装置2から左コントローラ3に送信される振幅と周波数とは、1つに限らず、2つ以上送信するようにしてもよい。その場合、コーデック部106は、受信された複数の振幅および周波数それぞれが示す波形を合成することで、振動子107を制御する電圧の波形を生成することができる。
左コントローラ3は、電力供給部108を備える。本実施形態において、電力供給部108は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ3の各部(具体的には、バッテリの電力の給電を受ける各部)に接続される。
図9に示すように、右コントローラ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と同様の機能を有し、同様に動作する。
図10は、クレードル5の内部構成の一例を示すブロック図である。なお、図10において、本体装置2に関する内部構成の詳細については、図8で示しているので省略している。
図10に示すように、クレードル5は、変換部131およびモニタ用端子132を備える。変換部131は、本体端子73およびモニタ用端子132と接続される。変換部131は、本体装置2から受信した画像(映像とも言える)および音声に関する信号の形式を、据置型モニタ6へ出力する形式へと変換する。ここで、本実施形態においては、本体装置2は、ディスプレイポート信号(すなわち、DisplayPortの規格に従った信号)として画像および音声の信号をクレードル5へ出力する。また、本実施形態においては、クレードル5と据置型モニタ6との間の通信は、HDMI(登録商標)の規格に基づく通信が用いられる。すなわち、モニタ用端子132は、HDMI端子であり、クレードル5と据置型モニタ6とがHDMIケーブルによって接続される。そして、変換部131は、本体装置2から本体端子73を介して受信されるディスプレイポート信号(具体的には、映像および音声を表す信号)を、HDMI信号へ変換する。変換されたHDMI信号は、モニタ用端子132を介して据置型モニタ6へ出力される。
クレードル5は、電力制御部133および電源端子134を備える。電源端子134は、図示しない充電装置(例えば、ACアダプタ等)を接続するための端子である。本実施形態においては、電源端子134にACアダプタが接続されており、クレードル5には商用電源が供給されているものとする。電力制御部133は、クレードル5に対して本体装置2が装着された場合、本体端子73を介して電源端子134からの電力を本体装置2へ供給する。これによって、本体装置2のバッテリ98が充電される。
また、クレードル5は、接続処理部136および拡張用端子137を備える。拡張用端子137は、他の装置を接続するための端子である。本実施形態においては、クレードル5は、拡張用端子137として、複数(より具体的には3つ)のUSB端子を備える。接続処理部136は、本体端子73および各拡張用端子137に接続される。接続処理部136は、USBハブとしての機能を有し、例えば、拡張用端子137に接続された装置と、本体端子73に接続された本体装置2との間の通信を管理する(すなわち、ある装置からの信号を他の装置へ適宜分配して送信する)。上記のように、本実施形態においては、情報処理システム1は、クレードル5を介して他の装置との通信を行うことが可能である。なお、接続処理部136は、通信速度を変換したり、拡張用端子137に接続された装置に対する電力供給を行ったりすることが可能であってもよい。
以上に説明したように、本実施形態における情報処理システム1については左コントローラ3および右コントローラ4が本体装置2から着脱可能である。また、クレードル5に左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置や本体装置2単体を装着することによって据置型モニタ6に画像(および音声)を出力可能である。以下、左コントローラ3および右コントローラ4を本体装置2から取り外した状態で、クレードル5に本体装置2単体を装着することによって据置型モニタ6に画像(および音声)を出力する利用態様における情報処理システムを用いて説明する。
上述のように、本実施形態においては、左コントローラ3および右コントローラ4を本体装置2から外した状態(「離脱状態」と呼ぶ)で情報処理システム1を利用することも可能である。離脱状態で情報処理システム1を利用して同じアプリケーション(例えば、ゲームアプリケーション)に対する操作を行う場合の態様としては、1人のユーザが左コントローラ3および右コントローラ4の両方を用いる態様が考えられる。なお、当該利用態様によって複数のユーザが同じアプリケーションを用いて操作する場合は、左コントローラ3および右コントローラ4の組を複数組用意して、それぞれのユーザが当該複数組のうちの1組を用いる態様が考えられる。
図11〜図13は、離脱状態において、1人のユーザが左コントローラ3および右コントローラ4の組を把持して情報処理システム1を利用する様子の一例を示す図である。図11〜図13に示すように、離脱状態において、ユーザは、左コントローラ3を左手で把持し、右コントローラ4を右手で把持して操作を行いながら、据置型モニタ6に表示された画像を見ることができる。
例えば、本実施形態では、ユーザは、縦長の略板状である左コントローラ3の長手方向の下方向(図1に示す下方向(y軸負方向))が鉛直方向になるとともに、本体装置2に装着された際に当該本体装置2と接する側面(スライダ40が設けられている側面)が前方に向き、かつ、左コントローラ3の主面(アナログスティック32等が設けられる面)が右に向くように左コントローラ3を左手で把持する。また、ユーザは、縦長の略板状である右コントローラ4の長手方向の下方向(図1に示す上下方向(y軸負方向))が鉛直方向になるとともに、本体装置2に装着された際に当該本体装置2と接する側面(スライダ62が設けられている側面)が前方に向き、かつ、右コントローラ4の主面(アナログスティック52等が設けられる面)が左に向くように右コントローラ4を右手で把持する。このように左手で左コントローラ3を把持し右手で右コントローラ4を把持した状態(以下、当該方向に把持された左コントローラ3および右コントローラ4の姿勢を基本姿勢と記載することがある)から、各コントローラを上下左右前後に動かしたり、各コントローラを回転させたり、各コントローラを振り動かしたりすることによって、各コントローラの動きや姿勢に応じてゲームプレイが行われる。
なお、左コントローラ3に生じる加速度や角速度の方向をわかりやすくするために、上記把持状態における前方向(丸みを帯びた側面から本体装置2と接する側面に向かう方向であり、図1に示すx軸負方向)をX軸正方向とし、上記把持状態における右方向(背面から主面に向かう方向であり、図1に示すz軸負方向)をY軸正方向とし、上記把持状態における上方向(長手方向の上に向かう方向であり、図1に示すy軸正方向)をZ軸正方向とする。そして、左コントローラ3の加速度センサ104は、上記XYZ軸方向の加速度をそれぞれ検出可能であり、角速度センサ105は、上記XYZ軸方向周りの角速度をそれぞれ検出可能であるとする。また、右コントローラ4に生じる加速度や角速度の方向をわかりやすくするために、上記把持状態における前方向(丸みを帯びた側面から本体装置2と接する側面に向かう方向であり、図1に示すx軸正方向)をX軸正方向とし、上記把持状態における右方向(主面から背面に向かう方向であり、図1に示すz軸正方向)をY軸正方向とし、上記把持状態における上方向(長手方向の上に向かう方向であり、図1に示すy軸正方向)をZ軸正方向とする。そして、右コントローラ4の加速度センサ114は、上記XYZ軸方向の加速度をそれぞれ検出可能であり、角速度センサ115は、上記XYZ軸方向周りの角速度をそれぞれ検出可能であるとする。
[2.ゲーム操作の概要]
次に、図14〜図20を参照して、本実施形態におけるゲーム操作の概要について説明する。ここで、本実施形態においては、プレイヤ(換言すれば、情報処理システムのユーザ)によって操作される第1〜第4プレイヤオブジェクトという4つのオブジェクトが3次元のゲーム空間に登場する。本実施形態においては、4人のユーザが、それぞれ1つずつプレイヤオブジェクトを操作する。具体的には、第1ユーザが第1プレイヤオブジェクトを操作し、第2ユーザが第2プレイヤオブジェクトを操作し、第3ユーザが第3プレイヤオブジェクトを操作し、第4ユーザが第4プレイヤオブジェクトを操作する。なお、詳細は後述するが、本実施形態におけるゲームは、対戦式のゲームであり、各プレイヤオブジェクトが2つのグループに分かれて対戦を行う。ここでは、第1プレイヤオブジェクトと第2プレイヤオブジェクトが第1グループ(第1プレイヤオブジェクトにとっては、味方のグループ)を構成し、第3プレイヤオブジェクトと第4プレイヤオブジェクトが第2グループ(第1プレイヤオブジェクトにとっては、敵のグループ)を構成し、第1グループと第2グループとで対戦を行う。以下においては、第1ユーザが上記左コントローラ3および右コントローラ4を用いて第1プレイヤオブジェクトを操作する場合を例として、ゲーム操作について説明する。
図14〜図19は、左コントローラ3および右コントローラ4を動かすことによってプレイするゲームにおいて表示されるゲーム画像例を示す図である。図14に示すように、本ゲーム例では、第1プレイヤオブジェクトP1および第2プレイヤオブジェクト(不図示)が、第3プレイヤオブジェクトP3および第4プレイヤオブジェクトP4と対戦するゲーム(例えば、ボクシングゲーム)の画像が据置型モニタ6に表示される。
左コントローラ3および右コントローラ4を操作するユーザは、左コントローラ3本体および/または右コントローラ4本体を振り動かしたり、左コントローラ3本体および/または右コントローラ4本体の姿勢を変化させたりすることによって、第1プレイヤオブジェクトP1を操作することができる。例えば、左コントローラ3を振り動かすことによって第1プレイヤオブジェクトP1の左グラブ(左拳)を模した左拳オブジェクトG1の動作を制御することができ、右コントローラ4を振り動かすことによって第1プレイヤオブジェクトP1の右グラブ(右拳)を模した右拳オブジェクトG2の動作を制御することができる。具体的には、ユーザが左コントローラ3を把持している左手を用いて左パンチを繰り出すように振る操作を行った場合、敵オブジェクトである第3プレイヤオブジェクトP3または第4プレイヤオブジェクトP4が配置されている場所に向かって第1プレイヤオブジェクトP1の左グラブを模した左拳オブジェクトG1が移動する。また、ユーザが右コントローラ4を把持している右手を用いて右パンチを繰り出すように振る操作を行った場合、敵オブジェクトが配置されている場所に向かって第1プレイヤオブジェクトP1の右グラブを模した右拳オブジェクトG2が移動する(図15、図16参照)。
例えば、左コントローラ3および右コントローラ4の何れも動かしていない状態(図14に示す状態)から、右コントローラ4を前方(右コントローラ4のX軸正方向)に押し出すように振り動かした場合、図15に示すように右コントローラ4の動きに応じて第1プレイヤオブジェクトP1の右拳オブジェクトG2が敵オブジェクトに向かってエフェクト画像Ie1が付与された状態で移動する。これによって、敵オブジェクトに対して第1プレイヤオブジェクトP1が右パンチを繰り出したようなゲーム画像が表示される。
ここで、左拳オブジェクトG1が移動開始する際の移動方向は、左コントローラ3を押し出すように振り動かした際の左コントローラ3の姿勢によって設定される。また、右拳オブジェクトG2が移動開始する際の移動方向は、右コントローラ4を押し出すように動かした際の右コントローラ4の姿勢によって設定される。例えば、図15に示したように、右コントローラ4がX軸正方向に移動した場合、当該移動における右コントローラ4のロール方向の姿勢に応じて右拳オブジェクトG2の移動方向D1が設定される。一例として、本実施例では、上記右コントローラ4が移動している期間において、実空間において重力加速度が作用している方向を基準とした右コントローラ4のY軸方向の傾きを算出し、当該Y軸方向の傾きに基づいて右拳オブジェクトG2の移動方向D1を算出している。具体的には、右コントローラ4が上記基準姿勢に対して右方向にロール回転した姿勢であることを上記Y軸方向の傾きが示す場合、仮想空間の右方向に向かって右拳オブジェクトG2が移動する。また、右コントローラ4が上記基準姿勢に対して左方向にロール回転した姿勢であることを上記Y軸方向の傾きが示す場合、仮想空間の左方向に向かって右拳オブジェクトG2が移動する。そして、それぞれ右方向または左方向に移動方向がずれる角度については、上記Y軸方向の傾き角度に応じてそれぞれ算出される。
また、本ゲーム例では、仮想空間において第1プレイヤオブジェクトP1と敵オブジェクトとの距離が相対的に遠い場合であってもパンチを繰り出すことが可能であり、第1プレイヤオブジェクトP1の腕が伸びることによって、左拳オブジェクトG1および右拳オブジェクトG2が相対的に長い距離を移動することができる。そして、左拳オブジェクトG1または右拳オブジェクトG2は、他のオブジェクト(例えば、敵オブジェクト)と衝突するか所定の距離移動した後に移動を終了し、当該左拳オブジェクトG1および右拳オブジェクトG2がそれぞれ移動開始した移動開始位置(例えば、図14に示す第1プレイヤオブジェクトP1の手元)まで戻る。左拳オブジェクトG1および右拳オブジェクトG2が移動開始位置まで戻ることによって、敵オブジェクトに向かう次の移動が可能となる。言い換えると、次のパンチを出すことができるようになる。したがって、上記移動開始位置から左拳オブジェクトG1または右拳オブジェクトG2が移動を開始してから再び当該移動開始位置まで戻るまでの時間が一般的なボクシングゲームより相対的に長くなる。
また、本ゲーム例では、仮想空間において左拳オブジェクトG1および/または右拳オブジェクトG2が移動する際、当該オブジェクトを操作するコントローラが振動する。例えば、左コントローラ3を押し出すように振り動かすことに応じて左拳オブジェクトG1が移動する場合、左拳オブジェクトG1が仮想空間を移動することに応じて左コントローラ3が振動する。また、右コントローラ4を押し出すように振り動かすことに応じて右拳オブジェクトG2が移動する場合、右拳オブジェクトG2が仮想空間を移動することに応じて右コントローラ4が振動する(図15の状態)。具体的には、本体装置2は、左コントローラ3および/または右コントローラ4が押し出すように振り動かされた場合、仮想空間を移動する左拳オブジェクトG1および/または右拳オブジェクトG2の種類、移動速度、移動方向等に応じて往路振動データを生成して、左コントローラ3および/または右コントローラ4に送信する。また、本体装置2は、左拳オブジェクトG1および/または右拳オブジェクトG2が他のオブジェクトと衝突した場合は、当該衝突に応じた振動を示す振動データを生成して、左コントローラ3および/または右コントローラ4に送信する。さらに、本体装置2は、左拳オブジェクトG1および/または右拳オブジェクトG2が上記移動開始位置へ戻る復路を移動する場合、復路を移動する左拳オブジェクトG1および/または右拳オブジェクトG2の種類、移動速度、移動方向等に応じて復路振動データを生成して、左コントローラ3および/または右コントローラ4に送信する。これによって、各種振動データを受信した左コントローラ3および/または右コントローラ4は、当該振動データに基づいて振動する。
また、本ゲーム例では、左拳オブジェクトG1または右拳オブジェクトG2の移動時間を利用して、左拳オブジェクトG1または右拳オブジェクトG2が移動中(典型的には、敵オブジェクトの方向へ移動している期間)であっても、左コントローラ3または右コントローラ4の姿勢や動きに応じて移動する軌道を変化させることができる。例えば、上述した左拳オブジェクトG1または右拳オブジェクトG2の移動開始時の左コントローラ3または右コントローラ4の姿勢から左コントローラ3または右コントローラ4がロール方向に回転した場合やヨー方向に回転した場合、当該回転に応じて左拳オブジェクトG1または右拳オブジェクトG2の軌道を変化させる。例えば、図16に示した一例では、右コントローラ4がX軸正方向に押し出すように振り動かされた後、右拳オブジェクトG2の移動中に右コントローラ4が左ロール方向に回転移動(図示θx)することに応じて、右拳オブジェクトG2の移動方向がD2に変化している。また、右拳オブジェクトG2の移動方向が変化する際、右拳オブジェクトG2にエフェクト画像Ie2が付与された状態となる。
一例として、本実施例では、左拳オブジェクトG1または右拳オブジェクトG2の移動開始後の左コントローラ3または右コントローラ4のX軸周りの回転速度(角速度)を上記ロール方向の回転として、当該X軸周りの回転速度に基づいて移動中の左拳オブジェクトG1または右拳オブジェクトG2の軌道を変化させる。具体的には、左拳オブジェクトG1が移動中に左コントローラ3がX軸を中心として右方向にロール回転した回転速度が得られた場合、仮想空間の右方向に左拳オブジェクトG1の軌道を変化させ、左コントローラ3がX軸を中心として左方向にロール回転した回転速度が得られた場合、仮想空間の左方向に左拳オブジェクトG1の軌道を変化させる。また、右拳オブジェクトG2が移動中に右コントローラ4がX軸を中心として右方向にロール回転した回転速度が得られた場合、仮想空間の右方向に右拳オブジェクトG2の軌道を変化させ、右コントローラ4がX軸を中心として左方向にロール回転した回転速度が得られた場合、仮想空間の左方向に右拳オブジェクトG2の軌道を変化させる。
他の例として、本実施例では、左拳オブジェクトG1または右拳オブジェクトG2の移動開始後の実空間の重力方向を基準とする左コントローラ3または右コントローラ4の回転速度(角速度)を上記ヨー方向の回転として、当該重力方向周りの回転速度に基づいて移動中の左拳オブジェクトG1または右拳オブジェクトG2の軌道を変化させる。具体的には、左拳オブジェクトG1が移動中に左コントローラ3が重力方向を中心として右方向にヨー回転した回転速度が得られた場合、仮想空間の右方向に左拳オブジェクトG1の軌道を変化させ、左コントローラ3が重力方向を中心として左方向にヨー回転した回転速度が得られた場合、仮想空間の左方向に左拳オブジェクトG1の軌道を変化させる。また、右拳オブジェクトG2が移動中に右コントローラ4が重力方向を中心として右方向にヨー回転した回転速度が得られた場合、仮想空間の右方向に右拳オブジェクトG2の軌道を変化させ、右コントローラ4が重力方向を中心として左方向にヨー回転した回転速度が得られた場合、仮想空間の左方向に右拳オブジェクトG2の軌道を変化させる。
上述したように左拳オブジェクトG1および/または右拳オブジェクトG2の軌道が変化した場合、左コントローラ3および/または右コントローラ4の振動も変化する。例えば、本体装置2は、左拳オブジェクトG1および/または右拳オブジェクトG2の往路軌道が変化した場合、左コントローラ3および/または右コントローラ4の動きや姿勢の変化(例えば、ロール方向やヨー方向の角速度)に応じて振動の振幅および/または周波数の変化パラメータを算出し、当該変化パラメータを用いて上記往路振動データを一時的に変化させた後、再度往路振動データに戻す。これによって、一時的に変化する往路振動データを受信した左コントローラ3および/または右コントローラ4は、当該往路振動データに基づいて振動の振幅および/または周波数を変化させる。
また、本ゲーム例では、左コントローラ3または右コントローラ4が振り動かされたか否かの判定を、左コントローラ3または右コントローラ4に生じた加速度の大きさを用いて行う。そして、左拳オブジェクトG1が上記移動開始位置に配置されている状態(以下、第1移動開始可能状態と称する)において左コントローラ3が上記X軸正方向に振り動かされたと判定された場合、当該移動開始位置から敵オブジェクトに向かって左拳オブジェクトG1が移動を開始する。また、右拳オブジェクトG2が上記移動開始位置に配置されている状態(以下、第2移動開始可能状態と称する)において右コントローラ4が上記X軸正方向に振り動かされたと判定された場合、当該移動開始位置から敵オブジェクトに向かって右拳オブジェクトG2が移動を開始する。しかしながら、本実施例では、上記第1移動開始可能状態でない場合であっても、左コントローラ3が上記X軸正方向に振り動かされたと判定されてから所定時間以内に上記第1移動開始可能状態になった場合は、当該左コントローラ3の振り操作に応じて上記移動開始位置から敵オブジェクトに向かって左拳オブジェクトG1の移動を開始させることができる。また、上記第2移動開始可能状態でない場合であっても、右コントローラ4が上記X軸正方向に振り動かされたと判定されてから所定時間以内に上記第2移動開始可能状態になった場合は、当該右コントローラ4の振り操作に応じて上記移動開始位置から敵オブジェクトに向かって右拳オブジェクトG2の移動を開始させることができる。このように、本実施例では、上記第1移動開始可能状態および/または上記第2移動開始可能状態でない場合であっても、左コントローラ3および/または右コントローラ4を振り動かすことによって左拳オブジェクトG1および/または右拳オブジェクトG2を移動開始させる指示を行うことができるため、操作指示可能な状態が断続的に生じるゲームであっても操作を容易にすることが可能となる。つまり、上述したように、上記ゲーム例では、移動開始位置から左拳オブジェクトG1または右拳オブジェクトG2が移動を開始してから再び当該移動開始位置まで戻るまでの時間が一般的なボクシングゲームより相対的に長くなるため、上記第1移動開始可能状態や上記第2移動開始可能状態になるのを待ちきれずに左コントローラ3または右コントローラ4を振り動かす操作が先行してしまうことが考えられるが、このような先行操作が行われた場合であっても当該先行操作を無効にせずに救済してゲーム操作に生かすことが可能となる。
また、本ゲーム例では、図17に示すように、左拳オブジェクトG1および右拳オブジェクトG2を上記移動開始位置から同時に移動開始させることによって、所定のアクションが行われる。例えば、左拳オブジェクトG1および右拳オブジェクトG2の一方が移動開始した時点から所定期間以内に他方が移動開始する場合、左拳オブジェクトG1および右拳オブジェクトG2が組となった「両手パンチアクション」が開始される。ここで、「両手パンチアクション」は、仮想空間を移動する左拳オブジェクトG1および右拳オブジェクトG2の間に衝突領域Aが形成された様子がゲーム画像で表現され、当該衝突領域Aが形成された状態で左拳オブジェクトG1および右拳オブジェクトG2が敵オブジェクトに向かって移動する。そして、敵オブジェクトには移動中の左拳オブジェクトG1または右拳オブジェクトG2や衝突領域Aが衝突した場合に、左拳オブジェクトG1または右拳オブジェクトG2が単独で衝突する場合より大きなダメージが敵オブジェクトに与えられる所定のアクションが行われる。本実施形態では、「両手パンチアクション」では、敵オブジェクトと衝突した場合に当該敵オブジェクトを投げ飛ばすアクションが行われる。なお、「両手パンチアクション」は、例えば、敵オブジェクトを動けなくするようなアクションであってもよい。なお、「両手パンチアクション」実行中であっても、上述した左コントローラ3および/または右コントローラ4の姿勢や動きに応じて左拳オブジェクトG1および/または右拳オブジェクトG2が移動する軌道を変化させることができる。したがって、左拳オブジェクトG1および/または右拳オブジェクトG2が移動する軌道を変化させることによって、衝突領域Aの範囲も変化させることができるため、敵オブジェクトに対してより戦略的な攻撃も可能となる。
上記のように、本実施形態においては、左拳オブジェクトG1および右拳オブジェクトG2の両方による動作が行われる場合(図17)における動作の表示態様は、左拳オブジェクトG1および右拳オブジェクトG2の一方によるパンチ動作が行われる場合(図15)における動作の表示態様と異なる。つまり、前者の場合には、動作を行う拳オブジェクトにエフェクト画像Ie2が付されるのに対して、後者の場合には、それとは異なるエフェクト画像(すなわち、衝突領域A)が拳オブジェクトに付される。これによって、いずれの動作が行われているかをユーザに対してわかりやすく提示することができる。
このようなアクションが行われた状態で左拳オブジェクトG1および右拳オブジェクトG2が移動する場合であっても、当該オブジェクトの移動に応じて左コントローラ3および/または右コントローラ4が振動する。具体的には、本体装置2は、左拳オブジェクトG1および右拳オブジェクトG2が両手パンチアクションによって移動する場合、仮想空間を移動する左拳オブジェクトG1および右拳オブジェクトG2の種類、移動速度、移動方向等に応じてアクション往路振動データを生成して、左コントローラ3および右コントローラ4に送信する。また、本体装置2は、衝突領域A、左拳オブジェクトG1、または右拳オブジェクトG2が他のオブジェクトと衝突した場合は、当該衝突に応じた振動を示す振動データを生成して、左コントローラ3および右コントローラ4に送信する。さらに、本体装置2は、左拳オブジェクトG1および右拳オブジェクトG2が上記移動開始位置へ戻る復路を移動する場合、復路を移動する左拳オブジェクトG1および右拳オブジェクトG2の種類、移動速度、移動方向等に応じて復路振動データを生成して、左コントローラ3および右コントローラ4に送信する。これによって、両手パンチアクションが行われる場合であっても、各種振動データを受信した左コントローラ3および右コントローラ4は、当該振動データに基づいて振動する。
また、両手パンチアクション実行中に左拳オブジェクトG1および右拳オブジェクトG2の軌道が変化した場合、左コントローラ3および右コントローラ4の振動も変化する。例えば、本体装置2は、両手パンチアクション実行中に左拳オブジェクトG1および右拳オブジェクトG2の往路軌道が変化した場合、左コントローラ3および/または右コントローラ4の動きや姿勢の変化に応じて振動の振幅および/または周波数の変化パラメータを算出し、当該変化パラメータを用いて上記アクション往路振動データを一時的に変化させた後、再度アクション往路振動データに戻す。これによって、一時的に変化するアクション往路振動データを受信した左コントローラ3および右コントローラ4は、当該アクション往路振動データに基づいて振動の振幅および/または周波数を変化させる。
また、本ゲーム例では、左コントローラ3および右コントローラ4の両方の動きおよび/または姿勢に応じて、仮想空間内で第1プレイヤオブジェクトP1を移動させることができる。例えば、左コントローラ3および右コントローラ4の両方が実空間のピッチ方向に回転した場合やロール方向に回転した場合、当該回転した傾き(例えば、図18に示すθx)に応じて第1プレイヤオブジェクトP1を移動させる(図18参照)。具体的には、実空間の重力方向を基準とする左コントローラ3のX軸方向およびY軸方向と右コントローラ4のX軸方向およびY軸方向の傾きをそれぞれ算出する。そして、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が前方に傾く姿勢になっていると判定された場合、左コントローラ3および右コントローラ4の両方が当該前方へ傾いている角度(例えば、左コントローラ3の傾き角度と右コントローラ4の傾き角度との平均値)に応じた移動量で第1プレイヤオブジェクトP1を仮想空間の前方へ移動させる。なお、本実施形態において、第1プレイヤオブジェクトP1は、第1プレイヤオブジェクトP1の正面方向を基準とした向きへ移動する。すなわち、上記の場合、第1プレイヤオブジェクトP1は、第1プレイヤオブジェクトP1の正面方向へ移動する。なお、他の実施形態においては、第1プレイヤオブジェクトP1は、仮想カメラの視線方向に応じた方向(すなわち、画面における奥行き方向)を基準とした向きへ移動してもよい。
また、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が後方に傾く姿勢になっていると判定された場合、左コントローラ3および右コントローラ4の両方が当該後方へ傾いている角度(例えば、当該角度の平均値)に応じた移動量で第1プレイヤオブジェクトP1を仮想空間の後方(すなわち、第1プレイヤオブジェクトP1の正面方向を基準としたときの後方)へ移動させる。また、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が左に傾く姿勢になっていると判定された場合、左コントローラ3および右コントローラ4の両方が当該左へ傾いている角度(例えば、当該角度の平均値)に応じた移動量で第1プレイヤオブジェクトP1を仮想空間の左(すなわち、第1プレイヤオブジェクトP1の正面方向を基準としたときの左方)へ移動させる(図18参照)。また、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が右に傾く姿勢になっていると判定された場合、左コントローラ3および右コントローラ4の両方が当該右へ傾いている角度(例えば、当該角度の平均値)に応じた移動量で第1プレイヤオブジェクトP1を仮想空間の右(すなわち、第1プレイヤオブジェクトP1の正面方向を基準としたときの右方)へ移動させる。
また、本ゲーム例では、左コントローラ3および右コントローラ4の両方の動きおよび/または姿勢に応じて、第1プレイヤオブジェクトP1にガード動作を行わせることができる。ガード動作中においては、第1プレイヤオブジェクトP1は他のオブジェクトのパンチが当たってもダメージを受けない状態となる。ただし、第1プレイヤオブジェクトP1は、他のプレイヤオブジェクトの両手パンチアクションによる投げ動作を、ガード動作によって防ぐことはできない(つまり、ガード動作中であっても第1プレイヤオブジェクトP1は他のプレイヤオブジェクトによる両手パンチアクションによって投げられる。)。また、ガード動作中においては、第1プレイヤオブジェクトP1は、パンチを行うことができず、また、両手パンチアクションを行うことができない。
本実施形態においては、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が内側へ傾く姿勢になっていると判定された場合、第1プレイヤオブジェクトP1はガード動作を行う(図19)。具体的には、本体装置2は、実空間の重力方向を基準とする左コントローラ3のX軸方向の傾きと右コントローラ4のX軸方向の傾きとをそれぞれ算出する。そして、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が内側へ所定角度以上傾いた姿勢(例えば、図19に示すθx)になっていると判定された場合、第1プレイヤオブジェクトP1にガード動作を行わせる。
また、本ゲーム例では、コントローラを動かす操作に加えて、コントローラのアナログスティックおよび/または操作ボタンを用いた操作に応じて、第1プレイヤオブジェクトP1に動作を行わせることができる。例えば、本体装置2は、コントローラに対する所定の操作ボタンに対する押下入力に応じて、第1プレイヤオブジェクトP1にジャンプ動作を行わせる。
以上においては、第1プレイヤオブジェクトP1に対する操作方法を説明したが、本実施形態においては、第2〜第4プレイヤオブジェクトに対する操作方法は、第1プレイヤオブジェクトP1に対する操作方法と同じである。つまり、本実施形態においては、各ユーザはそれぞれ、左コントローラおよび右コントローラからなる1組のコントローラを用いてプレイヤオブジェクトに対する操作を行う。なお、他の実施形態においては、第2〜第4プレイヤオブジェクトに対する操作方法は、第1プレイヤオブジェクトP1に対する操作方法と異なっていてもよい。例えば、第2〜第4プレイヤオブジェクトのいくつかは、1つの左コントローラまたは右コントローラに対する入力(例えば、アナログスティックおよびボタンに対する入力)に基づいて動作が制御されてもよい。
また、本実施形態におけるゲームは、通信対戦が可能なゲームであってもよい。このとき、第2〜第4プレイヤオブジェクトのいくつか(例えば、敵オブジェクトである第3プレイヤオブジェクトP3および第4プレイヤオブジェクトP4)は、本体装置2とネットワークを介して通信可能な他の外部装置のユーザによって操作されてもよい。例えば、外部装置は、図1に示す本体装置2と同種の他の本体装置であって、当該他の本体装置と通信可能なコントローラに対する入力に基づいてプレイヤオブジェクトの動作が制御されてもよい。このとき、本体装置2は、2組のコントローラと通信を行って当該2組のコントローラから操作データを取得し、上記他の本体装置は、別の2組のコントローラと通信を行って当該別の2組のコントローラから操作データを取得する。なお、複数のユーザが1つの本体装置を用いる場合には、据置型モニタ6の表示領域を2つに分割して、それぞれの分割表示領域に各ユーザ用の画像(すなわち、ユーザが操作するプレイヤオブジェクトから他のユーザが操作するプレイヤオブジェクトへの視線方向でゲーム空間を見た画像)を表示してもよい。
また、本実施形態においては、第2〜第4プレイヤオブジェクトのいくつかに代えて、ノンプレイヤキャラクタが用いられてもよい。すなわち、本体装置2は、ゲームプログラムにおいて定められるアルゴリズムに従って自動的に動作が制御されるオブジェクトを、第2〜第4プレイヤオブジェクトに代えて用いてもよい。つまり、本実施形態におけるゲームをプレイするユーザの人数は、4人に限らず、1〜3人であってもよい。
また、本実施例では、左コントローラ3と右コントローラ4とを接合して1つの操作装置として機能させるアタッチメント(付属機器)を用いて上記ゲームをプレイすることも可能である。
図20は、左コントローラ3および右コントローラ4を装着可能な付属機器の一例を示す図である。図20に示すように、付属機器の一例である拡張グリップ210は、ユーザがそれを用いて操作を行うための付属機器である。拡張グリップ210は、左コントローラ3を装着可能であり、また、右コントローラ4を装着可能である。したがって、拡張グリップ210によって、ユーザは、本体装置2から外した2つのコントローラ3および4を一体として把持して操作を行うことができる。
拡張グリップ210は、左コントローラ3および右コントローラ4をそれぞれ装着するための機構として、本体装置2が有する機構(具体的には、左レール部材15および右レール部材19等)と同様の機構を有している。したがって、本体装置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が押下操作された場合、第1プレイヤオブジェクトP1が左パンチを繰り出して左拳オブジェクトG1が移動開始する。右コントローラ4のAボタン53が押下操作された場合、第1プレイヤオブジェクトP1が右パンチを繰り出して右拳オブジェクトG2が移動開始する。仮想ゲーム世界において左拳オブジェクトG1および/または右拳オブジェクトG2が移動中に左コントローラ3のアナログスティック32が傾倒操作された場合、傾倒操作された方向および傾倒角度に応じて、移動中の左拳オブジェクトG1および/または右拳オブジェクトG2の移動方向が変化する。左拳オブジェクトG1および右拳オブジェクトG2が何れも移動開始位置に配置されている場合に左コントローラ3のアナログスティック32が傾倒操作された場合、傾倒操作された方向および傾倒角度に応じて、仮想ゲーム世界において第1プレイヤオブジェクトP1が移動する。右コントローラ4のAボタン53とBボタン54とが実質的に同じタイミングで押下操作された場合、左拳オブジェクトG1および右拳オブジェクトG2が移動を開始する、すなわち、第1プレイヤオブジェクトP1が両手パンチアクションを行う。なお、他の実施形態においては、コントローラのいずれか1つのボタンに対する押下操作に応じて、第1プレイヤオブジェクトP1が両手パンチアクションを行うようにしてもよい。また、左拳オブジェクトG1および右拳オブジェクトG2が何れも移動開始位置に配置されている場合に左コントローラ3のアナログスティック32が押し込まれる操作が行われた場合、仮想ゲーム世界において第1プレイヤオブジェクトP1が敵オブジェクトEOからの攻撃を防御する。右コントローラ4のXボタン55が押下操作された場合、仮想ゲーム世界において第1プレイヤオブジェクトP1がジャンプする動作を行う。そして、右コントローラ4のYボタン56が押下操作された場合、仮想ゲーム世界において第1プレイヤオブジェクトP1がダッシュ(高速移動)する。
拡張グリップ210を用いてゲームプレイする場合であっても、仮想ゲーム世界における左拳オブジェクトG1および/または右拳オブジェクトG2の状況に応じて、拡張グリップ210に装着された左コントローラ3および/または右コントローラ4に振動が与えられる。一例として、本体装置2は、拡張グリップ210を用いてゲームプレイする場合も、左拳オブジェクトG1が仮想空間を移動することに応じて、左拳オブジェクトG1の種類、移動速度、移動方向等に応じて往路振動データを生成して、左コントローラ3に送信する。また、本体装置2は、右拳オブジェクトG2が仮想空間を移動することに応じて、右拳オブジェクトG2の種類、移動速度、移動方向等に応じて往路振動データを生成して、右コントローラ4に送信する。また、本体装置2は、拡張グリップ210を用いてゲームプレイする場合も、左拳オブジェクトG1および/または右拳オブジェクトG2が他のオブジェクトと衝突した場合は、当該衝突に応じた振動を示す振動データを生成して、左コントローラ3および/または右コントローラ4に送信する。さらに、本体装置2は、拡張グリップ210を用いてゲームプレイする場合も、左拳オブジェクトG1および/または右拳オブジェクトG2が上記移動開始位置へ戻る復路を移動する場合、復路を移動する左拳オブジェクトG1および/または右拳オブジェクトG2の種類、移動速度、移動方向等に応じて復路振動データを生成して、左コントローラ3および/または右コントローラ4に送信する。これによって、拡張グリップ210を用いてゲームプレイする場合も、各種振動データを受信した左コントローラ3および/または右コントローラ4は、当該振動データに基づいて振動する。
また、拡張グリップ210を用いてゲームプレイする場合であっても、アナログスティック32が傾倒操作されることによって左拳オブジェクトG1および/または右拳オブジェクトG2の軌道が変化した場合、左コントローラ3および/または右コントローラ4の振動も変化する。例えば、本体装置2は、左拳オブジェクトG1および/または右拳オブジェクトG2の往路軌道が変化した場合、アナログスティック32に対する傾倒操作角度(アナログ入力値)に応じて振動の振幅および/または周波数の変化パラメータを算出し、当該変化パラメータを用いて上記往路振動データを一時的に変化させた後、再度往路振動データに戻す。これによって、一時的に変化する往路振動データを受信した左コントローラ3および/または右コントローラ4は、当該往路振動データに基づいて振動の振幅および/または周波数を変化させる。
なお、左コントローラ3および右コントローラ4を装着可能な付属機器を用いて操作する場合、左コントローラ3のアナログスティック32だけでなく、右コントローラ4のアナログスティック52を用いた操作を可能にしてもよい。この場合、一対のアナログスティックを用いた操作が可能となるため、アナログスティック32によって左拳オブジェクトG1の軌道を変化させ、アナログスティック52によって右拳オブジェクトG2の軌道を変化させるような、独立した方向指示を可能としてもよい。
[3.連結オブジェクト]
[3−1.連結オブジェクトの概要]
次に、図14、図21〜図26を参照して、連結オブジェクトについて説明する。上述のように、本実施形態においては、第1プレイヤオブジェクトP1と第2プレイヤオブジェクトP2(図21参照)が第1グループを構成し、第3プレイヤオブジェクトP3と第4プレイヤオブジェクトP4が第2グループを構成する。本実施形態においては、連結オブジェクトは、同じグループに属するプレイヤオブジェクト同士を連結する。つまり、味方同士のプレイヤオブジェクトが互いに連結オブジェクトによって連結される。
具体的には、図14に示すように、敵オブジェクトである第3プレイヤオブジェクトP3と第4プレイヤオブジェクトP4とが、第2連結オブジェクトC2によって連結される。また、第1プレイヤオブジェクトP1は、味方である第2プレイヤオブジェクトP2(図14では図示されていない)と第1連結オブジェクトC1によって連結される。連結オブジェクトによって、ユーザは、同じグループに含まれるプレイヤオブジェクト、換言すれば、どのプレイヤオブジェクトが味方でどのプレイヤオブジェクトが敵であるかを容易に把握することができる。
なお、本実施形態においては、第1プレイヤオブジェクトP1の味方オブジェクトである第2プレイヤオブジェクトP2は、図14に示すように、表示範囲に含まれない場合もある。ここで、本実施形態においては、第1プレイヤオブジェクトP1と第2プレイヤオブジェクトP2とを連結する第1連結オブジェクトC1が表示されるので、第2プレイヤオブジェクトP2が表示範囲に含まれない場合であっても、ユーザは、第2プレイヤオブジェクトP2の大まかな位置を把握することができる。例えば、図14に示す例においては、ユーザは、第1連結オブジェクトC1の方向を確認することによって、第1プレイヤオブジェクトP1の左後方に第2プレイヤオブジェクトP2が位置することを把握することができる。これによって、ユーザは、例えば、味方である第2プレイヤオブジェクトP2のパンチが第1プレイヤオブジェクトP1に当たらないように注意してゲーム操作を行うことができる。
ここで、詳細は後述するが、本実施形態においては、各プレイヤオブジェクトは、自身に連結される連結オブジェクトによって移動に制約が加えられる。具体的には、連結オブジェクトによって連結される2つのプレイヤオブジェクトは、他方のプレイヤオブジェクトに対して離れた位置に移動しにくいように動作が制御される。つまり、本実施形態においては、同じグループに属する各プレイヤオブジェクトは、連結オブジェクトによって、互いに近くに位置するように移動に制約が加えられる。
一方、詳細は後述するが、本実施形態においては、第3プレイヤオブジェクトP3および第4プレイヤオブジェクトP4のうち一方を向くように仮想カメラが設定される(図14参照)。したがって、上記のように第2連結オブジェクトC2によって第3プレイヤオブジェクトP3および第4プレイヤオブジェクトP4が近くに配置されると、仮想カメラが向いているプレイヤオブジェクト以外のプレイヤオブジェクトも表示範囲内に含まれやすくなる。例えば、図14に示す例においては、第3プレイヤオブジェクトP3の方を向くように仮想カメラが設定されており、このとき、第4プレイヤオブジェクトP4が表示範囲に含まれやすくなる。このように、本実施形態においては、連結オブジェクトを設定することによって、同じグループに属する各プレイヤオブジェクト(ここでは、敵オブジェクト)が単一の表示範囲に収まりやすくなるので、ユーザにとって見やすいゲーム画像を提供することができる。
(連結オブジェクトの表示態様)
図21は、連結オブジェクトで連結される2つのプレイヤオブジェクトの一例を示す図である。なお、図21(a)は、2つのプレイヤオブジェクト間の距離が相対的に短い場合(すなわち、距離d=d1である場合)を示し、図21(b)は、2つのプレイヤオブジェクト間の距離が相対的に長い場合(すなわち、距離d=d2(>d1)である場合)を示している。図21に示すように、本実施形態においては、第1連結オブジェクトC1は、紐状の外観を有するオブジェクトである。なお、以下においては、第1連結オブジェクトC1を例として説明するが、本体装置2は、第2連結オブジェクトC2についても第1連結オブジェクトC1と同様の処理を実行する。
本実施形態において、第1連結オブジェクトC1の表示態様は、自身によって連結される2つのプレイヤオブジェクト間の距離(換言すれば、第1連結オブジェクトC1の長さ)に応じて変化する。具体的には、上記距離d=d1である場合、第1連結オブジェクトC1の太さは、第1の太さに設定され(図21(a))、上記距離d=d2である場合、第1連結オブジェクトC1の太さは、第1の太さよりも細い第2の太さに設定される(図21(b))。なお、本実施形態においては、本体装置2は、上記距離に比例した太さとなるように第1連結オブジェクトC1の太さを設定する。このように、本実施形態においては、連結オブジェクトの表示態様を上記距離に応じて変化させるので、連結オブジェクトによって上記距離をユーザに把握させることができる。例えば、図14に示す例においては、ユーザは、第1プレイヤオブジェクトP1に対する第2プレイヤオブジェクトP2の方向だけでなく、第1プレイヤオブジェクトP1から第2プレイヤオブジェクトP2がどの程度離れているかを、第1連結オブジェクトC1によって把握することができる。
なお、本体装置2は、第1連結オブジェクトC1の任意の表示態様を上記距離に応じて変化させてもよい。例えば、第1連結オブジェクトC1の色が上記距離に応じて変化してもよいし、点線で表現される第1連結オブジェクトC1の点線の間隔が上記距離に応じて変化してもよい。また、第1連結オブジェクトC1が螺旋状の形状(例えば、バネのような形状)である場合、螺旋のピッチ(換言すれば、螺旋が円柱の側面に沿って延びる場合において、螺旋が円柱を1周するときの、円柱の軸方向の長さ)が上記距離に応じて変化してもよい。
また、他の実施形態においては、連結オブジェクトは、2つのプレイヤオブジェクトが連結されることを表す任意の形状を有するものであってよい。図22は、連結オブジェクトの他の例を示す図である。図22に示すように、連結オブジェクトC11は、第1プレイヤオブジェクトP1と第2プレイヤオブジェクトP2とを含む領域を表す形状であってもよい。なお、図22(a)および(b)に示されるように、連結オブジェクトC11のうちで2つのプレイヤオブジェクトの間の部分の幅Wが、上記距離dに応じて変化してもよい。
(連結オブジェクトと他のオブジェクトとの関係)
本実施形態において、本体装置2は、連結オブジェクトについては当たり判定処理を実行しない。つまり、本体装置2は、第1連結オブジェクトC1がゲーム空間における他のオブジェクトと接触するか否かにかかわらず、第1プレイヤオブジェクトP1および第2プレイヤオブジェクトP2に基づいて第1連結オブジェクトC1の状態(具体的には、位置および/または方向)を決定する。なお、上記「他のオブジェクト」は、例えば、プレイヤオブジェクトや、ゲーム空間に配置される地形オブジェクトあるいは障害物のオブジェクト等である。本実施形態においては、例えば、第1プレイヤオブジェクトP1と第2プレイヤオブジェクトP2との間に障害物が存在する場合であっても、第1連結オブジェクトC1は障害物の有無に関係なく、第1プレイヤオブジェクトP1と第2プレイヤオブジェクトP2との間に配置される。なお、連結オブジェクトが他のオブジェクトと接触する場合における表示方法は任意である。例えば、上記の場合、第1連結オブジェクトC1は、障害物をすり抜ける(換言すれば、突き抜ける)ように表示されてもよい。
上記のように、本実施形態においては、連結オブジェクトについては当たり判定処理が実行されないので、連結オブジェクトによってプレイヤオブジェクトの動作が必要以上に制限される可能性を低減することができる。例えば、連結オブジェクトが障害物と接触することが原因でプレイヤオブジェクトの移動が制限されることを防止することができる。また、連結オブジェクトが他のオブジェクトと接触する場合には、連結オブジェクトに関する計算処理(具体的には、連結オブジェクトの位置、向き、および/または、後述する張力等を計算する処理)が複雑になる可能性がある。これに関して、本実施形態においては、本体装置2は、連結オブジェクトが他のオブジェクトと接触する場合における計算処理を実行する必要がないので、ゲーム処理による処理負荷を軽減することができる。なお、他の実施形態においては、本体装置2は、連結オブジェクトと他のオブジェクトとの当たり判定を行ってもよい。
(仮想カメラの設定)
本実施形態においては、ゲーム画像を生成するために用いられる仮想カメラは、第1プレイヤオブジェクトP1の側から2つの敵オブジェクト(すなわち、第3プレイヤオブジェクトP3および第4プレイヤオブジェクトP4)のいずれかの側を向くように設定される。より具体的には、仮想カメラは、2つの敵オブジェクトのいずれかと第1プレイヤオブジェクトP1とが表示範囲に含まれるように設定される(図14参照)。以下において、2つの敵オブジェクトとのうちで、仮想カメラの設定の基準となるプレイヤオブジェクトを、「注目オブジェクト」と呼ぶ。本実施形態においては、図14に示すように、注目オブジェクトである第3プレイヤオブジェクトP3は、左右方向に関して表示範囲の実質的に中央に配置される。したがって、第1ユーザは、第1プレイヤオブジェクトP1が正面にパンチを繰り出すように操作を行うことによって、注目オブジェクトに向けてパンチを繰り出すことができるので、注目オブジェクトに対してパンチを当てやすくなる。
本実施形態においては、注目オブジェクトは、第1ユーザによる切替操作(例えば、コントローラの所定のボタンを押下する操作)に応じて、切り替えられる。すなわち、本体装置2は、注目オブジェクトが第3プレイヤオブジェクトP3である状態において切替操作が行われると、注目オブジェクトを第4プレイヤオブジェクトP4に変更する。また、本体装置2は、注目オブジェクトが第4プレイヤオブジェクトP4である状態において切替操作が行われると、注目オブジェクトを第3プレイヤオブジェクトP3に変更する。これによって、ユーザは、狙いとする敵オブジェクトを容易に変更することができる。
なお、本実施形態においては、本体装置2は、所定の自動切替条件が満たされた場合には、切替操作が行われなくても、注目オブジェクトを自動的に切り替える。具体的には、注目オブジェクトがダウンした場合、注目オブジェクトは切り替えられる。なお、本実施形態においては、注目オブジェクトは、他のプレイヤオブジェクトによるパンチを受けて飛ばされたり、他のプレイヤオブジェクトによる上記両手パンチアクションによって投げられたりした後、ダウンする。本実施形態においては、ダウンした状態のプレイヤオブジェクトにはパンチを当てても無効となる(つまり、ダメージは与えられない)ので、ダウンした状態にあるプレイヤオブジェクトを狙いとする必要性が小さいからである。
なお、他の実施形態においては、仮想カメラは、第1連結オブジェクトC1を視野範囲に含むように設定されてもよい。すなわち、第1連結オブジェクトC1が上記注目オブジェクトとして設定されてもよい。また、他の実施形態においては、第1プレイヤオブジェクトP1は視野範囲に含まれなくてもよく、いわゆる1人称視点のゲーム画像が生成されてもよい。また、他の実施形態においては、本体装置2は、仮想カメラの視線方向をユーザが自由に操作することができるようにしてもよい。仮想カメラの視線方向をユーザが自由に操作することが可能な実施形態であっても、同じグループに属する各プレイヤオブジェクトが上記連結オブジェクトによって近くに配置されるので、当該各プレイヤオブジェクトが単一の表示範囲に収まりやすくなる。そのため、上記実施形態では本実施形態と同様に、ユーザにとって見やすいゲーム画像を提供することができる。
[3−2.連結オブジェクトによる張力]
本実施形態においては、本体装置2は、プレイヤオブジェクトに連結される連結オブジェクトによって当該プレイヤオブジェクトの移動に制約を加える。本実施形態においては、本体装置2は、プレイヤオブジェクトと連結オブジェクトとの間に働く仮想的な張力を計算する。そして、この張力を考慮してプレイヤオブジェクトの動作を制御することによって、プレイヤオブジェクトの移動に制約を加える。つまり、プレイヤオブジェクトは、(状況によっては)連結オブジェクトに引っ張られる力を受けるので、連結オブジェクトで連結された2つのオブジェクト間の距離を離れにくくすることができる。以下、図23を参照して、張力の算出方法の具体例について説明する。
図23は、プレイヤオブジェクトに働く張力の一例を示す図である。なお、図23においては、第1プレイヤオブジェクトP1に働く張力を例として説明を行うが、各プレイヤオブジェクトに働く張力を算出する方法は同じである。
本実施形態においては、本体装置2はまず、第1連結オブジェクトC1の方向に働く張力(以下、「補正前の張力」と呼ぶ)T1を算出する。補正前の張力T1は、第1連結オブジェクトC1の向きに平行であって、第1プレイヤオブジェクトP1から第2プレイヤオブジェクトP2への方向を向く(図23参照)。
補正前の張力T1の大きさは、第1連結オブジェクトC1の長さL(換言すれば、第1プレイヤオブジェクトP1と第2プレイヤオブジェクトP2との距離d)に基づいて算出される。具体的には、補正前の張力T1は、次の式(1)に従って算出される。
・長さLが基準値L1より小さい場合:T1=0
・長さLが基準値L1以上である場合:T1=k×(L−L1) …(1)
上式(1)において、係数kは予め定められた定数である。上式(1)に示すように、本実施形態においては、第1連結オブジェクトC1の長さLが基準値L1より短い場合、補正前の張力T1は0となる(つまり、張力T1は生じない)。これによれば、第1プレイヤオブジェクトP1と第2プレイヤオブジェクトP2との距離が基準値L1より小さい場合には、各プレイヤオブジェクトの移動に制約が加えられないので、プレイヤオブジェクトに対する操作の操作性を向上することができる。また、第1連結オブジェクトC1の長さLが基準値L1以上である場合、補正前の張力T1は、長さLに応じた大きさとなる。このように、本実施形態では、第1連結オブジェクトC1が弾性体のような性質を有するものとして張力が計算される。
ここで、上記補正前の張力T1をそのまま用いてプレイヤオブジェクトの移動に制約を加えるとすると、ゲーム空間における鉛直方向(具体的には、地面に対して垂直な方向。換言すれば、ゲーム空間において設定される重力方向に平行な方向。)に関しては制約が大きくなりすぎるおそれがある。例えば、プレイヤオブジェクトがジャンプ動作を行う場合において、張力によって十分な高さのジャンプを行うことができず、ユーザがジャンプ動作に違和感を抱くおそれがある。また、本実施形態におけるゲームでは、プレイヤオブジェクトが敵オブジェクトのパンチをジャンプ動作によってかわすことも考えられる。そのため、プレイヤオブジェクトが十分な高さのジャンプを行うことができないとすれば、プレイヤオブジェクトに対する操作の操作性が低下するおそれがある。
そこで、本実施形態においては、本体装置2は、補正前の張力T1から、鉛直方向の成分を減少させる補正を行う。具体的には、図23に示すように、本体装置2は、補正前の張力T1のうちの鉛直方向の成分T1yを減少させて、補正後の鉛直方向成分T2yを得る。補正後の鉛直方向成分T2yは、例えば、補正前の鉛直方向成分T1yに所定の係数a(ここで、0<a<1)を乗算することによって得られる。本体装置2は、補正前の張力T1のうちの水平方向の成分T1xzと上記補正後の鉛直方向成分T2yとによって構成される張力を、補正後の張力T2とする。
上記のように、本実施形態においては、本体装置2は、第1連結オブジェクトC1の方向を向く張力(すなわち、上記補正前の張力T1)のうち、ゲーム空間における所定の第1方向(すなわち、水平方向)に直交する第2方向(すなわち、鉛直方向)に関する成分を減少させることによって補正後の張力T2を算出する。これによって、鉛直方向に関する第1プレイヤオブジェクトP1の動作(例えば、ジャンプ動作)に対してユーザが違和感を抱く可能性を軽減することができる。
なお、本実施形態においては、本体装置2は、鉛直方向についての張力を減少させる補正を行ったが、他の実施形態においては、ゲーム内容やゲーム設定に応じた任意の方向について張力を減少させる補正を行ってもよい。また、張力を補正する方法は任意であり、他の実施形態においては、例えば、補正前の鉛直方向成分T1yから所定値を減算することによって補正後の張力T2が算出されてもよい。
また、本体装置2は、補正前の張力T1の向きに応じて張力T1の減少量を変化させてもよい。例えば、本体装置2は、補正前の張力T1の鉛直方向成分T1yが鉛直上向きである場合、鉛直方向成分T1yに係数a1を乗算することによって補正後の鉛直方向成分T2yを算出し、補正前の張力T1の鉛直方向成分T1yが鉛直下向きである場合、鉛直方向成分T1yに係数a2を乗算することによって補正後の鉛直方向成分T2yを算出してもよい。なお、係数a1および係数a2は、ゲーム内容やゲーム設定に応じて適宜設定されればよく、係数a1は係数a2よりも大きく設定されてもよいし、小さく設定されてもよい。
本実施形態においては、上記のようにして算出された補正後の張力T2を用いて第1プレイヤオブジェクトP1の動作が制御される。本実施形態においては、第1プレイヤオブジェクトP1は、第1ユーザによる操作(例えば、図20に示す移動操作)、他のオブジェクトから受ける影響(例えば、他のプレイヤオブジェクトによるパンチを受けることによる影響)、および、ゲーム空間に設定される力(例えば重力)等の要素に基づいて動作が制御される。本体装置2は、上記の要素に加えて、補正後の張力T2に基づいて動作を制御する。これによって、第1プレイヤオブジェクトP1は、第1連結オブジェクトC1の長さLが基準値L1以上である場合には、第1連結オブジェクトC1によって引っ張られるので、移動に制約を受け、第2プレイヤオブジェクトP2から離れにくくなるように制御されることとなる。
例えば、図23に示す例においては、第1プレイヤオブジェクトP1から左方向に第1連結オブジェクトC1が延びているので、第1プレイヤオブジェクトP1は左方向を向く張力T1を受けており、右方向に移動しにくくなっている。具体的には、図18に示す移動操作によって第1プレイヤオブジェクトP1を移動させる場合において、各コントローラを左へある角度だけ傾けた操作によって左方向へ移動する移動量は、各コントローラを右へ同じ角度だけ傾けた操作によって右方向へ移動する移動量よりも大きくなる。また例えば、図23に示す状態から第1プレイヤオブジェクトP1が真上にジャンプ動作を行った場合には、ジャンプ動作中に受ける張力によって第1プレイヤオブジェクトP1はジャンプ動作中に左方向へ移動する。
なお、本実施形態においては、各プレイヤオブジェクトの腰に連結オブジェクトが接続される。そのため、本体装置2は、プレイヤオブジェクトの腰に張力が作用するものとして、プレイヤオブジェクトの動作制御を行う。なお、連結オブジェクトがプレイヤオブジェクトに対して接続される位置は任意であり、腰以外の他の位置であってもよい。
以上のように、本実施形態においては、本体装置2は、第1連結オブジェクトC1が第1プレイヤオブジェクトP1および第2プレイヤオブジェクトP2に及ぼす仮想的な張力を用いて、第1プレイヤオブジェクトP1および第2プレイヤオブジェクトP2の移動に制約を加える。また、本体装置2は、第2連結オブジェクトC2が第3プレイヤオブジェクトP3および第4プレイヤオブジェクトP4に及ぼす仮想的な張力を用いて、第3プレイヤオブジェクトP3および第4プレイヤオブジェクトP4の移動に制約を加える。これによれば、各プレイヤオブジェクトは、移動に制約が加えられるものの、張力が弱い状態ではある程度自由に移動することができる。したがって、例えばプレイヤオブジェクトの移動が連結オブジェクトによって急に停止されるといった、プレイヤオブジェクトの動作が不自然になる可能性を軽減することができる。
以上より、本実施形態においては、プレイヤオブジェクトは、連結オブジェクトの長さLが短い状態(すなわち、長さLが基準値L1より小さい状態)では、自由に移動することができ、連結オブジェクトの長さLがある程度の長さになった状態(すなわち、長さLが基準値L1以上である状態)では、張力が作用することによって移動に制約が加えられる。ここで、本実施形態においては、連結オブジェクトの長さには上限が設定される。したがって、連結オブジェクトが長くなった結果、張力が非常に大きくなった場合、または、連結オブジェクトの長さが上限に達した場合、プレイヤオブジェクトは、連結オブジェクトが伸びる方向へ移動することができなくなる。
また、他の実施形態においては、連結オブジェクトによってプレイヤオブジェクトに対して制約を加えるための具体的な方法は任意であり、張力以外の方法によって制約が加えられてもよい。例えば、他の実施形態においては、連結オブジェクトの長さが所定の範囲内となるように制限が加えられてもよい。このとき、連結オブジェクトによって連結される2つのプレイヤオブジェクトの距離は当該所定の範囲内に制限される。
[3−3.連結オブジェクトの制約の解除]
本実施形態においては、連結オブジェクトによってプレイヤオブジェクトに加えられる制約(具体的には、張力)は、当該プレイヤオブジェクトに関する解除条件が満たされる場合には発生しない。すなわち、本体装置2は、プレイヤオブジェクトに関する解除条件が満たされる間、当該プレイヤオブジェクトの移動に関する制約を解除して当該プレイヤオブジェクトの動作を制御する。以下、連結オブジェクトによる制約が解除される場合について詳細を説明する。
本実施形態においては、上記解除条件は、プレイヤオブジェクトが所定の張力無効動作を行っていることである。つまり、プレイヤオブジェクトが張力無効動作を行っている間は、当該プレイヤオブジェクトには張力が働かない。ここで、本実施形態においては、下記(A)〜(C)の動作が張力無効動作として設定される。
(A)他のプレイヤオブジェクトによるパンチを受けたことに応じて飛ばされる動作(以下、「飛ばされ動作」と呼ぶ)
(B)他のプレイヤオブジェクトによる両手パンチアクションによって投げられる動作(以下、「投げられ動作」と呼ぶ)
(C)両手パンチアクションによって他のプレイヤを投げる動作(以下、「投げ動作」と呼ぶ)
図24は、飛ばされ動作を行う第1プレイヤオブジェクトの一例を示す図である。図24(a)に示すように、第1プレイヤオブジェクトP1が他のプレイヤオブジェクトからのパンチを受ける前(つまり、飛ばされ動作の前)においては、第1連結オブジェクトC1による張力が働いている。そして、図24(b)に示すように、第1プレイヤオブジェクトP1が他のプレイヤオブジェクトからのパンチを受けて飛ばされ動作を行うと、本体装置2は、張力を発生させずに飛ばされ動作の制御を行う。飛ばされ動作は、第1プレイヤオブジェクトP1が倒れた姿勢で地面に接触する(すなわち、ダウンした状態となる)まで行われる。図24(c)に示すように、飛ばされ動作が終了した後においては、第1連結オブジェクトC1による張力が再度働く。したがって、飛ばされ動作が終了した後の状態(図24(c))においては、張力の大きさによっては、ダウンした状態の第1プレイヤオブジェクトP1が第1連結オブジェクトC1によって引っ張られて移動する場合もある。
なお、本体装置2は、投げられ動作が行われる場合も飛ばされ動作と同様の制御を行う。すなわち、投げられ動作が開始されたタイミング(すなわち、プレイヤオブジェクトが他のプレイヤオブジェクトに掴まれたタイミング)から、投げられ動作が終了するタイミング(すなわち、プレイヤオブジェクトが倒れた姿勢で地面に接触するタイミング)までの期間において、本体装置2は、張力を発生させずにプレイヤオブジェクトの動作の制御を行う。
また、本体装置2は、プレイヤオブジェクトが投げ動作を行う期間において、張力を発生させずに当該プレイヤオブジェクトの動作の制御を行う。例えば、投げ動作は、プレイヤオブジェクトが他のプレイヤオブジェクトを掴んで振り回した後、当該他のプレイヤオブジェクトを投げるという一連の動作である。本体装置2は、この一連の動作をプレイヤオブジェクトに行わせる間、張力を発生させずに当該プレイヤオブジェクトの動作の制御を行う。
以上のように、本実施形態においては、本体装置2は、プレイヤオブジェクトが張力無効動作を行っている間は、当該プレイヤオブジェクトには連結オブジェクトによる張力を発生させないようにして動作制御を行う。これによれば、プレイヤオブジェクトに張力無効動作を自然に行わせることができる。例えば、上記プレイヤオブジェクトが飛ばされ動作を行う際に、プレイヤオブジェクトが飛ばされる距離が張力の影響によって短くなったり長くなったりすると、飛ばされ動作についてユーザが違和感を抱く可能性がある。これに対して、本実施形態によれば、このような違和感をユーザが抱く可能性を軽減することができる。
なお、張力無効動作として設定される動作の種類は任意であり、他の実施形態においては、上記(A)〜(C)とは異なる動作が張力無効動作として設定されてもよい。なお、本実施形態においては、上記(A)〜(C)の動作中は、ユーザによる操作がオブジェクトの動作に反映されない。したがって、上記(A)〜(C)の動作は、当該プレイヤオブジェクトに対するユーザによる操作が反映されない動作(換言すれば、ユーザによる操作の影響を受けない動作)ということができる。つまり、本実施形態においては、上記解除条件は、「プレイヤオブジェクトが、当該プレイヤオブジェクトに対するユーザによる操作が反映されない動作を行っていること」であるとも言うことができる。
なお、本実施形態においては、プレイヤオブジェクトが解除条件を満たすか否かは、プレイヤオブジェクト毎に判定される。例えば、第1プレイヤオブジェクトP1と第2プレイヤオブジェクトP2とについて、それぞれ独立して、解除条件を満たすか否かが判定される。したがって、第1プレイヤオブジェクトP1については解除条件が満たされることから、第1連結オブジェクトC1による張力が発生しない状態であっても、第2プレイヤオブジェクトP2については解除条件が満たされず、第1連結オブジェクトC1による張力が発生していることもある。このように、解除条件の判定は、連結オブジェクトにより連結される各プレイヤオブジェクトについて独立して行われるので、各プレイヤオブジェクトをより自然に動作させることができる。
[3−4.連結オブジェクトによる他の影響]
本実施形態においては、連結オブジェクトは、上述の張力によってプレイヤオブジェクトに影響を与えることに加えて、以下に説明する処理によってプレイヤオブジェクトに影響を与える場合がある。以下、詳細を説明する。
(連結オブジェクトによる連鎖動作)
本実施形態においては、プレイヤオブジェクトは、連結オブジェクトにより自身と連結されるプレイヤオブジェクトの動作に連動して、当該動作と同種の動作(連鎖動作と呼ぶ)を行うことがある。具体的には、本実施形態においては、連結オブジェクトにより連結される2つのプレイヤオブジェクトのうち一方が投げられ動作を行う場合(つまり、他のプレイヤオブジェクトによって投げられた場合)、一定条件下で、他方のプレイヤオブジェクトも投げられ動作を行う。以下、図25を参照して連鎖動作の詳細を説明する。
図25は、投げられ動作を行うプレイヤオブジェクトの一例を示す図である。図25においては、図25(a)に示す状態において、第2プレイヤオブジェクトP2が敵オブジェクトによる投げ動作を受ける場合を考える。この場合、まず、第2プレイヤオブジェクトP2は、敵オブジェクトによる投げ動作に応じて投げられ動作を行う(図25(b))。このとき、連鎖条件が満たされる場合、第1プレイヤオブジェクトP1も投げられ動作を行う(図25(c))。
本実施形態においては、連鎖条件は、第2プレイヤオブジェクトP2が投げられ動作によって移動する結果、第1連結オブジェクトC1の長さLが所定の判別値L2よりも大きくなったことである。つまり、あるプレイヤオブジェクトに関する連鎖条件は、「当該プレイヤオブジェクトに連結されるプレイヤオブジェクトが投げられ動作中であり、かつ、第1連結オブジェクトの長さが所定の判別値L2よりも大きくなったこと」である。なお、上記判別値L2は、任意の値であってよく、上記基準値L1と同じ値であってもよいし、異なる値であってもよい。第1プレイヤオブジェクトP1は、第1連結オブジェクトC1の長さが所定の長さ(例えば、上記判別値L2)以下となる状態を維持するように投げられ動作を行う。
なお、他の実施形態においては、連鎖条件の内容は任意である。例えば、他の実施形態においては、連鎖条件は、プレイヤオブジェクトに働く張力が所定値以上となったことであってもよい。また、他の実施形態においては、連結オブジェクトによって連結される2つのプレイヤオブジェクトのうち一方が投げられ動作を行う場合には、無条件で他方のプレイヤオブジェクトが連鎖動作(換言すれば、投げられ動作)を行ってもよい。
上記のように、本実施形態においては、連結オブジェクトによって連結される2つのプレイヤオブジェクトのうち一方が投げられ動作によって移動する場合、連結オブジェクトの長さが一定長さ以下となる状態を維持するように、他方のプレイヤオブジェクトも投げられ動作によって移動する。これによれば、ユーザは、連結オブジェクトによって連結される2つの敵オブジェクトのうち一方に影響を与える(具体的には、投げ動作によってダメージを与える)ことによって、他方の敵オブジェクトにも影響を与えることができる。これによって、ゲームの戦略性を向上することができ、ゲームの興趣性を向上することができる。また、連結オブジェクトによって連結される2つのプレイヤオブジェクトのうち一方が投げられ動作を行う場合であっても、当該2つのプレイヤオブジェクトの距離を一定長さ以下に維持することができる。
(動作方向の補正)
本実施形態においては、連結オブジェクトによって連結される2つのプレイヤオブジェクトが共に飛ばされ動作(または投げられ動作)を行う場合がある。ここで、上述のように、飛ばされ動作中においては張力が働かないので、上記2つのプレイヤオブジェクトが同時に飛ばされ動作を行う場合には、当該2つのプレイヤオブジェクトの両方が連結オブジェクトの影響を受けずに動作する。そのため、飛ばされ動作が終了した時点では、2つのプレイヤオブジェクトの間の距離が非常に離れてしまう場合がある。このような場合、大きな張力がプレイヤオブジェクトに急に加えられることになり、プレイヤオブジェクトの動作が不自然になるおそれがある。そこで、本実施形態においては、上記2つのプレイヤオブジェクトが同時に飛ばされ動作を行う場合には、本体装置2は、飛ばされ動作の方向(すなわち、飛ばされ動作によって移動する方向)を必要に応じて補正する。
図26は、2つのプレイヤオブジェクトが飛ばされ動作を行う様子の一例を示す図である。図26(a)に示すように、2つのプレイヤオブジェクトP1およびP2が互いに反対側に向かって飛ばされ動作を行う場合には、飛ばされ動作後において第1連結オブジェクトC1が長くなりすぎるおそれがある。そのため、上記の場合、本体装置2は、プレイヤオブジェクトが飛ばされ動作を行う方向を補正する。具体的には、図26(b)に示すように、各プレイヤオブジェクトP1およびP2の動作方向は、平行な方向に近づくように補正される。なお、図26においては、本体装置2は、2つのプレイヤオブジェクトP1およびP2のそれぞれの動作方向を補正するが、他の実施形態においては、2つのプレイヤオブジェクトP1およびP2のうちいずれか一方の動作方向を補正してもよい。
なお、動作方向を補正する補正条件は任意である。例えば、上記条件は、2つのプレイヤオブジェクトの動作方向のなす角度が所定値以上であることであってもよい。また、上記条件は、連結オブジェクトの長さが所定値以上となったことであってもよい。このように、補正条件は、2つのプレイヤオブジェクトの一方または両方の張力無効動作が終了した時点における2つのプレイヤオブジェクトの距離が所定値よりも大きくなること(あるいは、大きくなると予測されること)であってもよい。
また、動作方向を補正するタイミングは任意である。例えば、連結オブジェクトによって連結される2つのプレイヤオブジェクトの一方が飛ばされ動作中である状態において、他方のプレイヤオブジェクトが飛ばされ動作を開始したタイミングで、動作方向の補正が開始されてもよい。また例えば、上記補正条件が満たされたタイミングで、動作方向の補正が開始されてもよい。
なお、図26においては、各プレイヤオブジェクトが共に飛ばされ動作を行う場合を例として説明したが、本体装置2は、各プレイヤオブジェクトのうち一方または両方が投げられ動作を行う場合も、飛ばされ動作が行われる場合と同様に、動作方向の補正を行う。
以上のように、本実施形態においては、連結オブジェクトによって連結される2つのプレイヤオブジェクトのうち一方が所定の第1動作(すなわち、飛ばされ動作または投げられ動作)を行い、他方が所定の第2動作(すなわち、飛ばされ動作または投げられ動作)を行う場合であって、第1動作の動作方向および第2動作の動作方向が所定の条件を満たす場合、第1動作の動作方向と第2動作の動作方向との少なくともいずれかを補正する。これによって、各プレイヤオブジェクトが上記第1動作または第2動作の後で不自然な挙動をとる可能性を低減することができる。なお、上記第1動作と第2動作は、同じ種類の動作であってもよいし、異なる種類の動作であってもよい。
[4.ゲーム処理の具体例]
図19〜図37を参照して、上記において概要を説明したゲーム処理が情報処理システムにおいて実行される場合の具体例について説明する。図19は、本実施形態において本体装置2のDRAM85に設定されるデータ領域の一例を示す図である。なお、DRAM85には、図19に示すデータの他、他の処理で用いられるデータも記憶されるが、詳細な説明を省略する。
DRAM85のプログラム記憶領域には、情報処理システム1で実行される各種プログラムPaが記憶される。本実施形態においては、各種プログラムPaは、上述した左コントローラ3および右コントローラ4との間で無線通信するための通信プログラムや、左コントローラ3および/または右コントローラ4から取得したデータに基づいた情報処理を行うためのアプリケーションプログラム(本実施形態においては、ゲーム処理を行うためのゲームプログラム)、クレードル5に対する本体装置2の着脱に応じて画像を表示する表示装置を切り替えるプログラム等が記憶される。なお、各種プログラムPaは、フラッシュメモリ84に予め記憶されていてもよいし、情報処理システム1に着脱可能な記憶媒体(例えば、第1スロット23に装着された第1の種類の記憶媒体、第2スロット24に装着された第2の種類の記憶媒体)から取得されてDRAM85に記憶されてもよいし、インターネット等のネットワークを介して他の装置から取得されてDRAM85に記憶されてもよい。CPU81は、DRAM85に記憶された各種プログラムPaを実行する。
また、DRAM85のデータ記憶領域には、情報処理システム1において実行される通信処理や情報処理等の処理において用いられる各種のデータが記憶される。本実施形態においては、DRAM85には、操作データDa、姿勢データDb、角速度データDc、加速度データDd、閾値データDe、カーブ値データDf、回転速度データDg、振りフラグデータDh、移動フラグデータDi、アクションフラグデータDj、戻りフラグデータDk、移動開始可能フラグデータDl、プレイヤオブジェクトデータDm、衝突領域データDn、左コントローラ振動データDo、右コントローラ振動データDp、連結オブジェクトデータDq、張力無効フラグデータDr、注目オブジェクトデータDs、および、画像データDt等が記憶される。
操作データ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は、左コントローラ3および右コントローラ4に対してそれぞれ行われた振り動作を判定するための閾値を示すデータである。カーブ値データDfは、左拳オブジェクトG1および右拳オブジェクトG2それぞれの移動方向や軌道を算出するためのカーブ値Cを示すデータである。回転速度データDgは、左拳オブジェクトG1または右拳オブジェクトG2が移動中における左コントローラ3および右コントローラ4の動き(回転速度V)を示すデータである。
振りフラグデータDhは、左コントローラ3および右コントローラ4それぞれが振り動かされたと判定された際にオンに設定される振りフラグを示すデータである。移動フラグデータDiは、左拳オブジェクトG1および右拳オブジェクトG2それぞれが仮想空間内を移動中である場合にオンに設定される移動フラグを示すデータである。アクションフラグデータDjは、左拳オブジェクトG1および右拳オブジェクトG2が組となったアクションが行われている場合にオンに設定されるアクションフラグを示すデータである。戻りフラグデータDkは、左拳オブジェクトG1および右拳オブジェクトG2それぞれが移動開始位置に戻る仮想空間内の復路を移動している場合にオンに設定される戻りフラグを示すデータである。移動開始可能フラグデータDlは、左拳オブジェクトG1が第1移動開始可能状態となった場合および右拳オブジェクトG2が第2移動開始可能状態となった場合にそれぞれオンに設定される移動開始可能フラグを示すデータである。
プレイヤオブジェクトデータDmは、第1プレイヤオブジェクトP1に関する状態を示すデータである。具体的には、プレイヤオブジェクトデータDmは、第1プレイヤオブジェクトP1のゲーム空間における位置を示すデータと、上記左拳オブジェクトG1および右拳オブジェクトG2のゲーム空間における位置を示すデータとを含む。また、プレイヤオブジェクトデータDmは、第1プレイヤオブジェクトP1が第1連結オブジェクトC1から受ける張力を示す張力データを含む。また、プレイヤオブジェクトデータDmは、第1プレイヤオブジェクトP1が上述の飛ばされ動作または投げられ動作を行う場合における動作方向を示すデータを含む。衝突領域データDnは、衝突領域Aの仮想空間における位置、形状、および範囲を示すデータである。
左コントローラ振動データDoは、左コントローラ3を振動させるための振動を示すデータである。右コントローラ振動データDpは、右コントローラ4を振動させるための振動を示すデータである。
連結オブジェクトデータDqは、第1連結オブジェクトC1に関する状態を示すデータである。具体的には、連結オブジェクトデータDqは、第1連結オブジェクトC1の位置、向き、および長さを示すデータを含む。張力無効フラグデータDrは、第1プレイヤオブジェクトP1が上述の張力無効動作を行っている状態であるか否かを示す張力無効フラグを示すデータである。
注目オブジェクトデータDsは、上述の注目オブジェクトを示すデータである。第1プレイヤオブジェクトP1を操作するユーザのためのゲーム画像を生成する場合には、注目オブジェクトデータDsは、第1プレイヤオブジェクトP1の敵である敵オブジェクトのいずれか(すなわち、第3プレイヤオブジェクトP3または第4プレイヤオブジェクトP4)を示す。
画像データDtは、ゲームの際に本体装置2のディスプレイ12や据置型モニタ6の表示画面に画像(例えば、仮想オブジェクトの画像、フィールド画像、背景画像)を表示するためのデータである。
なお、図27において図示していないが、本実施形態においては、図27に示す各種データのうち第1プレイヤオブジェクトP1に関して設定されるデータと同種のデータが、第2〜第4プレイヤオブジェクトP2〜P4についても設定される。また、第1連結オブジェクトC1について設定される上記連結オブジェクトデータDqと同種のデータが、第2連結オブジェクトC2についても設定される。
次に、本実施形態における情報処理(ゲーム処理)の詳細な一例を説明する。図28は、情報処理システム1で実行されるゲーム処理の一例を示すフローチャートである。図29〜図30は、図28におけるステップS4およびステップS5において行われるコントローラ振り認識処理の詳細の一例を示すサブルーチンである。図31〜図33は、図28におけるステップS6およびステップS7において行われるオブジェクト軌道変化処理の詳細の一例を示すサブルーチンである。図34は、図28におけるステップS8において行われるプレイヤオブジェクト移動処理の詳細の一例を示すサブルーチンである。図36〜図37は、図28におけるステップS9において行われる動作制御処理の詳細の一例を示すサブルーチンである。図38は、図28におけるステップS10において行われる表示制御処理の詳細の一例を示すサブルーチンである。本実施形態においては、図28〜図38に示す一連の処理は、CPU81が各種プログラムPaに含まれる通信プログラムや所定のアプリケーションプログラム(ゲームプログラム)を実行することによって行われる。また、図28〜図38に示すゲーム処理が開始されるタイミングは任意である。
なお、図28〜図38に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をCPU81が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、CPU81以外のプロセッサや専用回路が実行するようにしてもよい。また、本体装置2において実行される処理の一部は、本体装置2と通信可能な他の情報処理装置(例えば、本体装置2とネットワークを介して通信可能なサーバ)によって実行されてもよい。すなわち、図28〜図38に示す各処理は、本体装置2を含む複数の情報処理装置が協働することによって実行されてもよい。
図28において、CPU81は、ゲーム処理における初期設定を行い(ステップS1)、次のステップに処理を進める。例えば、上記初期設定では、CPU81は、以下に説明する処理を行うためのパラメータを初期化する。また、上記初期設定では、CPU81は、ゲームプレイを行うためのゲームフィールドを設定し、当該ゲームフィールド上の各プレイヤオブジェクトの初期位置を設定し、左拳オブジェクトG1および右拳オブジェクトG2の移動方向をデフォルト値(例えば、正面方向)に初期設定して、プレイヤオブジェクトデータDmを更新する。また、CPU81は、移動開始可能フラグデータDlが示す移動開始可能フラグをオンに初期設定する。また、CPU81は、張力無効フラグデータDrが示す張力無効フラグをオフに初期設定する。また、CPU81は、注目オブジェクトデータDsが示す注目オブジェクトを、例えば敵オブジェクトのうちいずれか1つに初期設定する。
また、本実施形態においては、プレイヤオブジェクトに対して設定される左拳オブジェクトおよび右拳オブジェクトとしてそれぞれ、複数種類のオブジェクトが予め用意されている。ユーザは、ゲームの開始前において、用意されている複数種類のオブジェクトのうちから、自身が操作するプレイヤオブジェクトに対して設定する左拳オブジェクトおよび右拳オブジェクトを選択することができる。上記初期設定において、CPU81は、ユーザによって選択された左拳オブジェクトおよび右拳オブジェクトの種類を示すデータを含むプレイヤオブジェクトデータDmをDRAM85に記憶する。
次に、CPU81は、左コントローラ3および右コントローラ4から操作データを取得して操作データDaを更新し(ステップS2)、次のステップに処理を進める。
次に、CPU81は、左コントローラ3および右コントローラ4それぞれの姿勢、角速度、加速度を算出し(ステップS3)、次のステップに処理を進める。例えば、CPU81は、左コントローラ3および右コントローラ4それぞれに生じている加速度を示すデータを操作データDaから取得し、左コントローラ3および右コントローラ4それぞれに作用している重力加速度の方向を算出して、当該方向を示すデータを用いて姿勢データDbを更新する。重力加速度を抽出する方法については任意の方法を用いればよく、例えば左コントローラ3および右コントローラ4それぞれに平均的に生じている加速度成分を算出して当該加速度成分を重力加速度として抽出してもよい。そして、CPU81は、左コントローラ3に対して算出された重力加速度の方向を基準とした左コントローラ3のXYZ軸方向を左コントローラ3の姿勢として算出し、当該姿勢を示すデータを用いて姿勢データDbを更新する。また、CPU81は、右コントローラ4に対して算出された重力加速度の方向を基準とした右コントローラ4のXYZ軸方向を右コントローラ4の姿勢として算出し、当該姿勢を示すデータを用いて姿勢データDbを更新する。また、CPU81は、左コントローラ3および右コントローラ4それぞれに生じている角速度を示すデータを操作データDaから取得し、左コントローラ3および右コントローラ4それぞれのXYZ軸周りの角速度を算出して、当該角速度を示すデータを用いて角速度データDcを更新する。さらに、CPU81は、左コントローラ3および右コントローラ4それぞれに生じている加速度を示すデータを操作データDaから取得し、左コントローラ3および右コントローラ4それぞれに生じているXYZ軸方向の加速度から上記重力加速度成分を除去して、当該除去後の加速度を示すデータを用いて加速度データDdを更新する。
なお、左コントローラ3や右コントローラ4の姿勢については、重力加速度を基準としたXYZ軸方向が算出された以降は、XYZ各軸周りの角速度のみに応じて更新してもよい。しかしながら、左コントローラ3や右コントローラ4の姿勢と重力加速度の方向との関係が誤差の累積によってずれていくことを防止するために、所定周期毎に重力加速度の方向に対するXYZ軸方向を算出して左コントローラ3や右コントローラ4の姿勢を修正してもよい。
次に、CPU81は、左コントローラ振り認識処理を行い(ステップS4)、次のステップに処理を進める。以下、図29〜図30を参照して、上記ステップS4において行う左コントローラ振り認識処理について説明する。
図29において、CPU81は、左コントローラ3の処理に対して設定されている振りフラグをオフに設定して振りフラグデータDhを更新し(ステップS11)、次のステップに処理を進める。
次に、CPU81は、左コントローラ3に対する振り判定を除外するか否かを判定する(ステップS12)。例えば、CPU81は、左コントローラ3が振り戻されている状態である場合、振り判定を除外する。そして、CPU81は、左コントローラ3の振り判定を除外する場合、ステップS13に処理を進める。一方、CPU81は、左コントローラ3が振り判定を行う場合、ステップS14に処理を進める。
左コントローラ3が振り戻されている状態であると判定する方法の第1の例として、CPU81は、姿勢データDbを参照して左コントローラ3のY軸周りの角速度を取得し、左コントローラ3が手前側への回転(例えば、Z軸正方向が手前側に向く回転)をしている場合、上記ステップS12において肯定判定する。左コントローラ3が振り戻されている状態であると判定する方法の第2の例として、CPU81は、姿勢データDbを参照して左コントローラ3の姿勢を取得し、当該左コントローラ3が重力加速度の方向に対して後傾している姿勢(例えば、左コントローラ3のX軸正方向が実空間に対して水平方向より上を向いている姿勢)となっている場合、CPU81は、上記ステップS12において肯定判定する。左コントローラ3が振り戻されている状態であると判定する方法の第3の例として、CPU81は、加速度データDdを参照して左コントローラ3に生じている加速度を取得し、当該左コントローラ3がプレイヤへの方向に移動している(例えば、左コントローラ3に生じている加速度に左コントローラ3のX軸負方向成分が含まれている)場合、CPU81は、上記ステップS12において肯定判定する。
ステップS13において、CPU81は、現時点において左コントローラ3に生じている加速度の大きさが左コントローラ3の振り判定をするための閾値より大きい場合、現時点において左コントローラ3に生じている加速度の大きさを当該閾値として設定して閾値データDeを更新し、ステップS14に処理を進める。ここで、後述により明らかとなるが、本実施例では、左コントローラ3に生じている加速度のうち、Y軸方向成分を除いた加速度(以下、XZ加速度と記載する)の大きさが閾値を越えた場合に、左コントローラ3が振り動かされたと判定している。上記ステップS13では、現時点において左コントローラ3に生じている加速度の大きさ(すなわち、現時点において左コントローラ3に生じている加速度からY軸方向成分の加速度を除いた大きさ)が後述する所定値より大きい場合に、当該加速度の大きさを上記振り判定で用いる閾値として設定することによって、上記振り判定において否定判定されることになる。つまり、上記ステップS13は、左コントローラ3が振り戻されている状態となっている場合に実行される処理であり、左コントローラ3がパンチを繰り出す動作の前後で振り戻されているような場合に左コントローラ3がパンチを繰り出すように振られていると誤判定することを防止することができる。
ステップS14において、CPU81は、左コントローラ3に生じているXZ加速度の大きさが上記閾値より大きいか否かを判定する。そして、CPU81は、左コントローラ3に生じているXZ加速度の大きさが上記閾値より大きい場合、ステップS15に処理を進める。一方、CPU81は、左コントローラ3に生じているXZ加速度の大きさが上記閾値以下である場合、ステップS18に処理を進める。ここで、本実施例では、左コントローラ3がパンチを繰り出すように、すなわち左コントローラ3がX軸正方向へ移動するように振り動かされたか否かを判定するために、左コントローラ3に生じている加速度のうち、Y軸方向成分を除いたXZ加速度の大きさと所定値(上記ステップS13や後述するステップS17またはステップS18において設定される閾値)とが比較される。したがって、上記ステップS14においては、CPU81は、加速度データDdを参照して左コントローラ3のX軸方向およびZ軸方向それぞれに生じている加速度を取得し、当該加速度を用いて左コントローラ3に生じているXZ加速度の大きさを算出する。そして、左コントローラ3が振り戻されている状態ではない場合、XZ加速度の大きさが所定値または当該所定値に近づいた閾値を越えていれば、左コントローラ3がパンチを繰り出すように振られたと判定する。
ステップS15において、CPU81は、一時変数Bが0であるか否かを判定する。そして、CPU81は、一時変数Bが0である場合、ステップS16に処理を進める。一方、CPU81は、一時変数Bが0でない場合、ステップS17に処理を進める。
ステップS16において、CPU81は、左コントローラ3の処理に対して設定されている振りフラグをオンに設定して振りフラグデータDhを更新し、一時変数Bとして所定フレーム数を設定して、ステップS17に処理を進める。このように、左コントローラ3の処理に対して設定されている振りフラグは、左コントローラ3がパンチを繰り出すように振られたと判定され、かつ一時変数Bが0である場合にオンに設定される。
ここで、上記ステップS16において、一時変数Bとして設定する所定フレーム数は、左コントローラ3がパンチを繰り出すように振られたと判定された直後に次の振り判定を除外する期間(振りフラグをオンに設定できない期間)を一時的に設定するものであり、本実施例では一例として12フレームに設定する。例えば、左コントローラ3が振り動かされていると判定された後であっても、左コントローラ3に生じている加速度の上昇が継続することがあり得る。このような場合、上記ステップS14における振り判定では肯定判定が連続することになるが、このような肯定判定を全て左コントローラ3がパンチを繰り出すように振られたと見なすと意図しているパンチの判定ができなくなる。したがって、本実施例では、左コントローラ3がパンチを繰り出すように振られたと判定された後の所定期間(例えば、12フレーム)は、当該判定されることを除外している。なお、他の例として、左コントローラ3がパンチを繰り出すように振られたと判定されて振りフラグがオンに設定されてから、左コントローラ3に生じている加速度の上昇(具体的には、XZ加速度の上昇)が継続している期間を、振りフラグが再度オンに設定できない期間として設定してもよい。
ステップS17において、CPU81は、左コントローラ3の振り判定をするための閾値として、現時点において左コントローラ3に生じている加速度の大きさを設定して閾値データDeを更新し、ステップS19に処理を進める。
一方、上記ステップS14において左コントローラ3に生じているXZ加速度の大きさが上記閾値以下であると判定された場合、CPU81は、左コントローラ3の振り判定をするための閾値を予め定められた所定値に近づけて閾値データDeを更新し、ステップS19に処理を進める。一例として、CPU81は、閾値データDeが示す閾値を所定量だけ上記所定値に近づけて新たな閾値を設定し、当該閾値を用いて閾値データDeを更新する。他の例として、CPU81は、閾値データDeが示す閾値を所定割合だけ上記所定値に近づけて新たな閾値を設定し、当該閾値を用いて閾値データDeを更新する。このように左コントローラ3の振り判定をするための閾値を予め定められた所定値に近づけることによって、上記ステップS13やステップS17が実行されることによって上記閾値が上昇したとしても、所定時間経過後には意図している所定値を用いてコントローラの振り判定を行うことができる。
ステップS19において、CPU81は、一時変数Bが0より大きいか否かを判定する。そして、CPU81は、一時変数Bが0より大きい場合、ステップS20に処理を進める。一方、CPU81は、一時変数Bが0である場合、ステップS21(図30参照)に処理を進める。
ステップS20において、CPU81は、一時変数Bから1減算して新たな一時変数Bを設定し、ステップS21(図30参照)に処理を進める。
図30に進み、ステップS21において、CPU81は、振りフラグデータDhを参照して左コントローラ3の処理に対して設定されている振りフラグがオンに設定されているか否かを判定する。そして、CPU81は、左コントローラ3の処理に対して設定されている振りフラグがオンに設定されている場合、ステップS22に処理を進める。一方、CPU81は、左コントローラ3の処理に対して設定されている振りフラグがオフに設定されている場合、ステップS23に処理を進める。
ステップS22において、CPU81は、左コントローラ3がパンチを繰り出すように振られたと判定された後の処理フレーム数をカウントするための一時変数Sとして所定フレーム数を設定し、ステップS25に処理を進める。ここで、一時変数Sとして設定する所定フレーム数は、左コントローラ3がパンチを繰り出すように振られたと判定されてから所定時間以内に第1移動開始可能状態になった場合に左拳オブジェクトG1の移動を開始するための処理を行うための当該所定時間に相当するパラメータであり、本実施例では一例として15フレームに設定する。したがって、上記第1移動開始可能状態でない場合であっても、左コントローラ3がパンチを繰り出すように振られたと判定されてから15フレーム以内に上記第1移動開始可能状態になった場合は、左拳オブジェクトG1の移動を開始するための処理が行われることになる。
一方、上記ステップS21において、振りフラグがオフに設定されていると判定された場合、CPU81は、一時変数Sが0より大きいか否かを判定する(ステップS23)。そして、CPU81は、一時変数Sが0より大きい場合、ステップS24に処理を進める。一方、CPU81は、一時変数Sが0である場合、ステップS25に処理を進める。
ステップS24において、CPU81は、一時変数Sから1減算して新たな一時変数Sを設定し、ステップS25に処理を進める。
ステップS25において、CPU81は、一時変数Sが0より大きいか否かを判定する。そして、CPU81は、一時変数Sが0より大きい場合、ステップS26に処理を進める。一方、CPU81は、一時変数Sが0である場合、当該サブルーチンによる処理を終了する。
ステップS26において、CPU81は、移動開始可能フラグデータDlを参照して左拳オブジェクトG1の処理に対して設定されている移動開始可能フラグがオンに設定されているか否かを判定する。そして、CPU81は、左拳オブジェクトG1の処理に対して設定されている移動開始可能フラグがオンに設定されている場合、ステップS27に処理を進める。一方、CPU81は、左拳オブジェクトG1の処理に対して設定されている移動開始可能フラグがオフに設定されている場合、当該サブルーチンを用いた処理を終了する。
ステップS27において、CPU81は、左拳オブジェクトG1の処理に対して設定されている移動フラグをオンに設定して移動フラグデータDiを更新し、次のステップに処理を進める。このように、左コントローラ3がパンチを繰り出すように振られたと判定されたときだけではなく、当該判定後であっても所定フレーム数(例えば、15フレーム)が経過する前に、移動開始可能フラグがオン(すなわち、第1移動開始可能状態)になれば、左拳オブジェクトG1の処理に対して設定されている移動フラグがオンに設定される。
次に、CPU81は、左拳オブジェクトG1の処理に対して設定されている移動開始可能フラグをオフに設定して移動開始可能フラグデータDlを更新して(ステップS28)、次のステップに処理を進める。このように、左拳オブジェクトG1が仮想空間内を移動することを示す移動フラグがオンに設定された場合、第1移動開始可能状態ではなくなるため左拳オブジェクトG1の移動開始可能フラグがオフに設定される。なお、第1プレイヤオブジェクトP1が敵オブジェクトに対して攻撃できない状態(例えば、第1プレイヤオブジェクトP1がダメージを受けて一時的にダウンしている状態)である場合、移動開始可能フラグを適宜オフに設定して移動開始可能フラグデータDlを設定してもよい。この場合、第1プレイヤオブジェクトP1が上記攻撃できない状態から回復した場合に、移動開始可能フラグがオンに設定される。
次に、CPU81は、現時点が右拳オブジェクトG2を移動開始してから所定フレーム数(例えば、4フレーム数)以内か否かを判定する(ステップS29)。例えば、CPU81は、後述するステップS5において左コントローラ振り認識処理と同様の処理を右コントローラ4に対しても行っており、現時点が当該ステップS5において右コントローラ4の処理に対して設定されている移動フラグがオンされてから所定フレーム数以内であれば、上記ステップS29において肯定判定する。そして、CPU81は、現時点が右拳オブジェクトG2を移動開始してから所定フレーム数以内である場合、ステップS30に処理を進める。一方、CPU81は、現時点が右拳オブジェクトG2を移動開始してから所定フレーム数以内でない場合、当該サブルーチンを用いた処理を終了する。
ステップS30において、CPU81は、アクションフラグをオンに設定してアクションフラグデータDjを更新し、当該サブルーチンを用いた処理を終了する。このように、左拳オブジェクトG1および右拳オブジェクトG2の一方のオブジェクトが移動開始してから所定フレーム数以内に、他方のオブジェクトが移動開始した場合、アクションフラグがオンに設定される。
図28に戻り、上記ステップS4における左コントローラ振り認識処理の後、CPU81は、右コントローラ振り認識処理を行い(ステップS5)、次のステップに処理を進める。なお、図29および図30を用いて説明したコントローラ振り認識処理は、上記ステップS5の右コントローラ振り認識処理においても用いられるサブルーチンである。すなわち、上記左コントローラ振り認識処理において処理対象としていた左コントローラ3および左拳オブジェクトG1を右コントローラ4および右拳オブジェクトG2にすることによって、同じサブルーチンを用いて同様の処理が可能となる。したがって、上記ステップS5の右コントローラ振り認識処理の詳細な説明については省略する。
次に、CPU81は、第1オブジェクト軌道変化処理を行い(ステップS6)、次のステップに処理を進める。以下、図31〜図33を参照して、上記ステップS6において行う第1オブジェクト軌道変化処理について説明する。
図31において、CPU81は、移動フラグデータDiを参照して左拳オブジェクトG1の処理に対して設定されている移動フラグがオンに設定されているか否かを判定する(ステップS41)。そして、CPU81は、左拳オブジェクトG1の処理に対して設定されている移動フラグがオンに設定されている場合、ステップS42に処理を進める。一方、CPU81は、左拳オブジェクトG1の処理に対して設定されている移動フラグがオフに設定されている場合、当該サブルーチンを用いた処理を終了する。
ステップS42において、CPU81は、一時変数Sが所定数以上か否かを判定する。そして、CPU81は、一時変数Sが所定数以上である場合、ステップS43に処理を進める。一方、CPU81は、一時変数Sが所定数未満である場合、ステップS51(図32参照)に処理を進める。ここで、上記ステップS42では、左コントローラ3がパンチを繰り出すように振られたと判定されてから当該パンチ操作が終わるまでの期間であるか否かを判定しており、パンチ操作中であると判定される場合とパンチ操作が終わったと判定される場合とによって異なる軌道設定を行っている。したがって、上記ステップS42で用いる所定数は、上記期間を判別可能なフレーム数に設定すればよく、例えば所定数=7に設定される。
ステップS43において、CPU81は、重力加速度の方向に対する左コントローラ3のY軸方向の傾きを算出し、次のステップに処理を進める。例えば、CPU81は、姿勢データDbを参照して左コントローラ3の姿勢を取得し、重力加速度の方向に対する当該左コントローラ3のY軸方向の傾きを算出する。
次に、CPU81は、左コントローラ3のY軸方向の傾き角度に応じて、左拳オブジェクトG1のカーブ値Cを算出してカーブ値データDfを更新し(ステップS44)、次のステップに処理を進める。ここで、左拳オブジェクトG1のカーブ値Cは、左拳オブジェクトG1の軌道を左右に変化させるための係数であり、例えば−1≦C≦1となるように設定される。そして、上記ステップS44では、左コントローラ3のY軸方向がX軸正方向に向かって右に傾いている場合にカーブ値Cを正の値に設定し、当該Y軸方向が水平方向に対して右に40°傾いている場合にC=1に設定され、当該Y軸方向が水平方向に対して右に40°以上傾いたとしてもCが上限値である1に設定される。また、左コントローラ3のY軸方向がX軸正方向に向かって左に傾いている場合にカーブ値Cを負の値に設定し、当該Y軸方向が水平方向に対して左に40°傾いている場合にC=−1に設定され、当該Y軸方向が水平方向に対して左に40°以上傾いたとしてもCが下限値である−1に設定される。
なお、本実施形態においては、上述のように、第1プレイヤオブジェクトP1に設定される左拳オブジェクトG1として、複数種類のオブジェクトがある。CPU81は、上記カーブ値Cを、左拳オブジェクトG1の種類に応じて異なる値となるように算出してもよい。つまり、CPU81は、左拳オブジェクトG1の種類に応じて異なる算出方法で(例えば、種類に応じて異なる計算式を用いて)カーブ値Cを算出してもよい。これによれば、左拳オブジェクトG1の種類に応じて曲がり具合が異なるので、ユーザの操作対象のバリエーションを増加させることができ、ゲームの興趣性を向上することができる。
また、拳オブジェクトには、重さを示すパラメータが拳オブジェクトの種類毎に設定されてもよい。このとき、あるプレイヤオブジェクトと他のプレイヤオブジェクトとが共にパンチ動作を行った結果、当該あるプレイヤオブジェクトの拳オブジェクトと、当該他のプレイヤオブジェクトの拳オブジェクトとが接触した場合、接触後における拳オブジェクトの挙動は、拳オブジェクトの種類に基づいて判断されてもよい。具体的には、上記の場合、接触後における拳オブジェクトの挙動は、拳オブジェクトの重さに基づいて(より具体的には、衝突した2つの拳オブジェクトの各重さの関係に基づいて)決定されてもよい。例えば、上記の場合、2つの拳オブジェクトのうちで重い方の拳オブジェクトは、軽い方のオブジェクトを吹き飛ばして移動を継続するように制御されてもよい。また、2つの拳オブジェクトのうちで軽い方の拳オブジェクトは、地面に落とされる(つまり、パンチ操作に応じて行われる移動が中止される)ように制御されてもよい。また、2つの拳オブジェクトの重さが同じである場合、2つの拳オブジェクトの両方が、地面に落とされるように制御されてもよい。
次に、CPU81は、左コントローラ3を振動させるための往路振動データを作成して(ステップS45)、ステップS46に処理を進める。例えば、CPU81は、左拳オブジェクトG1の種類に応じて左拳オブジェクトG1が往路を移動する際の往路振動波形を生成し、往路振動波形に基づいて左コントローラ3を振動させるための往路振動データを生成して、左コントローラ振動データDoを更新する。なお、CPU81は、左拳オブジェクトG1の移動速度や移動方向(カーブ値C)に応じて上記往路振動波形を調整してもよいし、当該移動速度や移動方向とは関わらずに上記往路移動波形を生成してもよい。また、CPU81は、左拳オブジェクトG1以外の仮想空間の状況に応じた振動を、上記振動波形に加えてもかまわない。例えば、第1プレイヤオブジェクトP1の動作や第1プレイヤオブジェクトP1に与えられた衝撃に応じた振動、ゲームフィールドの状況に応じた振動、BGMや効果音に応じた振動等を、上記往路振動波形に加えてもかまわない。また、CPU81は、アクションフラグデータDjが示すアクションフラグがオンに設定されている場合、「両手パンチアクション」用の往路振動データ(アクション往路振動データ)を生成して、左コントローラ振動データDoを更新してもよい。
一方、図32に示すように、一時変数Sが所定数未満である場合、CPU81は、重力加速度方向周りの左コントローラ3の回転速度Vを算出し(ステップS51)、次のステップに処理を進める。例えば、CPU81は、姿勢データDbを参照して左コントローラ3に作用している重力加速度の方向を取得する。また、CPU81は、角速度データDcを参照して左コントローラ3に生じているXYZ軸周りの角速度を取得する。そして、CPU81は、XYZ各軸周り角速度および重力加速度の方向を用いて重力加速度方向周りの左コントローラ3の角速度を算出し、当該角速度に応じた左コントローラ3の回転速度Vを算出して回転速度データDgを更新する。
次に、CPU81は、左コントローラ3に生じている角速度から上記回転速度Vに相当する角速度を除いた成分の大きさより、回転速度Vの大きさの方が大きいか否かを判定する(ステップS52)。そして、CPU81は、回転速度Vの大きさの方が大きい場合、ステップS53に処理を進める。一方、CPU81は、回転速度Vの大きさの方が小さいまたは同じである場合、ステップS56に処理を進める。ここで、上記ステップS52の処理は、左コントローラ3に生じている角速度がどの方向周りを主体として生じているのか判定するためのものであり、実空間における左コントローラ3の動きが重力加速度周りに回転するヨー方向の動きが主体なのか、他の方向周りに回転する動きが主体なのかを判定している。
ステップS53において、CPU81は、重力加速度方向周りの左コントローラ3の角速度に基づいて、左コントローラ3が重力加速度の方向を中心に左ヨー方向に回転しているか否かを判定する。そして、CPU81は、左コントローラ3が重力加速度の方向を中心に左ヨー方向に回転している場合、左コントローラ3の回転速度Vを1.15倍して回転速度データDgを更新し(ステップS55)、ステップS57に処理を進める。一方、CPU81は、左コントローラ3が重力加速度の方向を中心に左ヨー方向に回転していない場合、そのままステップS57に処理を進める。一般的に、人間の手首が曲がる方向を考えた場合、ユーザが左手で把持する左コントローラ3を右ヨー方向に回転させる操作と比べて左ヨー方向に回転させる操作がやりにくくなる。上記ステップS53およびステップS55の処理は、このような操作の難易を考慮したものであり、やりにくい方向にコントローラを動かす操作であっても、他の操作と同様にオブジェクトを制御することができる。
なお、当該サブルーチンを右拳オブジェクトG2の軌道変化処理を行うために用いる場合、上記ステップS53では右コントローラ4が重力加速度の方向を中心に右ヨー方向に回転しているか否かを判定する。そして、右コントローラ4が重力加速度の方向を中心に右ヨー方向に回転している場合、右コントローラ4の回転速度Vを1.15倍して回転速度データDgを更新することになる。
一方、回転速度Vに相当する角速度の方が小さいまたは同じである場合、CPU81は、左コントローラ3のX軸方向周りの角速度に応じて回転速度Vを算出し(ステップS56)、ステップS57に処理を進める。例えば、CPU81は、角速度データDcを参照して左コントローラ3のX軸方向周りの角速度を取得し、当該角速度に応じた左コントローラ3の回転速度Vを算出して回転速度データDgを更新する。
ステップS57において、CPU81は、左拳オブジェクトG1のカーブ値Cに左コントローラ3の回転速度Vに関する値を加算して新たなカーブ値Cを算出して、次のステップに処理を進める。例えば、CPU81は、カーブ値データDfおよび回転速度データDgを参照して左拳オブジェクトG1のカーブ値Cおよび左コントローラ3の回転速度Vを取得し、カーブ値Cに回転速度Vに応じた値を加算することによって得られる左拳オブジェクトG1の新たなカーブ値Cを用いて、カーブ値データDfを更新する。
次に、CPU81は、左拳オブジェクトG1のカーブ値Cが所定の上限値Cmax(例えば、Cmax=1)を超えているか否かを判定する(ステップS58)。そして、CPU81は、左拳オブジェクトG1のカーブ値Cが上限値Cmaxを超えている場合、左拳オブジェクトG1のカーブ値Cとして上限値Cmaxを設定してカーブ値データDfを更新し(ステップS59)、ステップS60に処理を進める。一方、CPU81は、左拳オブジェクトG1のカーブ値Cが上限値Cmaxを超えていない場合、そのままステップS60に処理を進める。
ステップS60において、CPU81は、左拳オブジェクトG1のカーブ値Cが所定の下限値Cmin(例えば、Cmin=−1)より小さいか否かを判定する。そして、CPU81は、左拳オブジェクトG1のカーブ値Cが下限値Cminより小さい場合、左拳オブジェクトG1のカーブ値Cとして下限値Cminを設定してカーブ値データDfを更新し(ステップS61)、ステップS62に処理を進める。一方、CPU81は、左拳オブジェクトG1のカーブ値Cが下限値Cmin以上である場合、そのままステップS62に処理を進める。
ステップS62において、CPU81は、回転速度Vに基づいて左コントローラ3を振動させるための往路振動データを変更して、ステップS46(図31参照)に処理を進める。例えば、CPU81は、左コントローラ3に生じている角速度に基づいて算出された回転速度Vに応じて、振動の振幅および/または周波数を変化させる変化パラメータを算出し、当該変化パラメータを用いて往路振動データを変化させて、左コントローラ振動データDoを更新する。
例えば、図35に示すように、回転速度Vに応じて往路振動波形の振幅を変化させる場合、様々な変化パターンが考えられる。例えば、変化パターン1は、回転速度Vの0からVaへの変化に対して振幅変化率が1.0からMAX1(MAX1>1.0)まで線形変換され、回転速度Va以上では振幅変化率MAX1で一定となる振幅の変化パターンである。変化パターン2は、回転速度Vの0からVaへの変化に対して振幅変化率が1.0からMAX2(MAX1>MAX2>1.0)まで線形変換され、回転速度Va以上では振幅変化率MAX2で一定となる振幅の変化パターンである。変化パターン3は、回転速度Vの0からVaへの一定範囲ごとに振幅変化率が段階的に1.0からMAX3(MAX3>1.0)まで高くなるテーブルに基づいて変換され、回転速度Va以上では振幅変化率MAX3で一定となる振幅の変化パターンである。
上記変化パターンを用いて振幅変化率1.0が算出された場合、往路振動波形の振幅を変化させない、すなわち上記ステップS45で作成された往路振動データがそのまま左コントローラ振動データDoに設定されることになる。また、上述から明らかなように、回転速度Vは、重力加速度方向周りの左コントローラ3の角速度(ヨー方向の角速度)または左コントローラ3のX軸方向周りの角速度(ロール方向の角速度)に応じて算出されており、左コントローラ3の動きや姿勢の変化に基づくパラメータである。つまり、ヨー方向またはロール方向への左コントローラ3の動きや姿勢の変化がない場合、回転速度Vも0となるため振幅変化率も1.0となる。すなわち、左コントローラ3の動きや姿勢の変化によって回転速度Vが生じたことによって往路振動波形の振幅が変化したとしても、当該動きや姿勢の変化が止まることによって振幅変化率が1.0となって元の往路振動波形に戻ることになる。したがって、上記ステップS62における往路振動データの変更は、上記ステップS45で生成された往路振動波形を一時的に変化させるものであって、左コントローラ3の動きや姿勢の変化が止まることにより元の往路振動波形に戻るものである。
上記ステップS62においては、回転速度Vに基づいて様々な変化パターンを用いて往路振動データを変化させてもよく、左拳オブジェクトG1の種類に応じて選択される変化パターンを設定してもよい。また、図35では、回転速度Vに対応して変化させる振幅変化率を例示しているが、同じ変化パターンを用いて振動の周波数を変化させてもよいし、振幅とは異なる変化パターンで振動の周波数を変化させてもよい。
また、上記ステップS62においては、回転速度Vに基づいて往路振動データを変化させているが、他のパラメータに基づいて往路振動データを変化させてもよい。例えば、カーブ値Cの変化量に基づいて往路振動データを変化させてもよいし、カーブ値Cそのものの値に基づいて往路振動データを変化させてもよい。前者の場合、上記ステップS58〜ステップS61の処理を経たカーブ値Cの変化量、すなわち下限値Cminおよび上限値Cmaxに制限されたカーブ値Cの変化量に基づいて、往路振動データを変化させることが考えられる。
上記のように、本実施形態においては、CPU81は、パンチ操作中であると判定される場合(すなわち、ステップS42の判定結果が肯定となる場合)には、左コントローラ3の傾きに基づいてカーブ値Cを算出し(ステップS44)、パンチ操作が終わったと判定される場合(すなわち、ステップS42の判定結果が否定となる場合)には、左コントローラ3の回転速度に基づいてカーブ値Cを算出する(ステップS57)。ここで、上記2通りの場合においてカーブ値Cを算出する方法は任意である。例えば、他の実施形態においては、パンチ操作中であると判定される場合において、左コントローラ3の回転速度に基づいてカーブ値Cが算出されてもよい。また、パンチ操作が終わったと判定される場合において、左コントローラ3の傾きに基づいてカーブ値Cが算出されてもよい。
図31に戻り、ステップS46において、CPU81は、左拳オブジェクトG1のカーブ値Cを用いて左拳オブジェクトG1の移動方向を算出し、次のステップに処理を進める。例えば、CPU81は、カーブ値データDfを参照して左拳オブジェクトG1のカーブ値Cを取得し、プレイヤオブジェクトデータDmを参照して左拳オブジェクトG1の移動方向を取得する。そして、CPU81は、取得した左拳オブジェクトG1のカーブ値Cが正の値の場合、取得した左拳オブジェクトG1の移動方向をカーブ値の大きさに応じて右に変更し、当該変更後の左拳オブジェクトG1の移動方向を用いてプレイヤオブジェクトデータDmを更新する。また、CPU81は、取得した左拳オブジェクトG1のカーブ値Cが負の値の場合、取得した左拳オブジェクトG1の移動方向をカーブ値の大きさに応じて左に変更し、当該変更後の左拳オブジェクトG1の移動方向を用いてプレイヤオブジェクトデータDmを更新する。
なお、左拳オブジェクトG1が移動開始位置に戻る仮想空間内の復路を移動している場合、左拳オブジェクトG1のカーブ値Cによって移動方向を変更することなく、現在の左拳オブジェクトG1の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。左拳オブジェクトG1が復路を移動しているか否かについては、後述する戻りフラグがオンに設定されているか否かによって判別することができる。
次に、CPU81は、左拳オブジェクトG1の移動方向に基づいて、左拳オブジェクトG1を移動させ(ステップS47)、次のステップに処理を進める。例えば、CPU81は、プレイヤオブジェクトデータDmを参照して左拳オブジェクトG1の位置および移動方向を取得し、当該左拳オブジェクトG1の位置から当該移動方向に基づいて左拳オブジェクトG1を移動させ、当該移動後の左拳オブジェクトG1の位置を用いてプレイヤオブジェクトデータDmを更新する。
なお、上記ステップS47において左拳オブジェクトG1を移動させる移動速度(移動量)は、一例として、左拳オブジェクトG1の移動速度については、左拳オブジェクトG1の種類に応じた速度に応じて設定されてもよい。他の例として、左拳オブジェクトG1の移動速度については、左コントローラ3がパンチを繰り出すように振られたと判定された際の加速度の大きさに応じて設定されてもよい。この場合、振りフラグがオンされた時点のXZ加速度の大きさに基づいて左拳オブジェクトG1が移動開始する初速度を設定し、その後の移動速度を仮想空間の状況、移動方向の変化、所定のアルゴリズム、左拳オブジェクトG1に設定された移動特性等に基づいて適宜変化させてもよい。
次に、CPU81は、アクションフラグデータDjを参照して、アクションフラグがオンに設定されているか否かを判定する(ステップS48)。そして、CPU81は、アクションフラグがオンに設定されている場合、ステップS49に処理を進める。一方、CPU81は、アクションフラグがオフに設定されている場合、ステップS70(図33参照)に処理を進める。
ステップS49において、CPU81は、左拳オブジェクトG1と右拳オブジェクトG2との間に衝突領域Aを設定し、ステップS70(図33参照)に処理を進める。例えば、CPU81は、プレイヤオブジェクトデータDmを参照して左拳オブジェクトG1の位置および右拳オブジェクトG2の位置を取得し、当該位置に基づいて衝突領域Aの仮想空間における位置、形状、および範囲を設定して、衝突領域データDnを更新する。このようにアクションフラグがオンに設定された状態で左拳オブジェクトG1(および右拳オブジェクトG2)の移動方向および移動後の位置が設定される場合は、当該左拳オブジェクトG1と右拳オブジェクトG2との間に衝突領域Aが設定される。
図33に進み、CPU81は、衝突判定処理を行い(ステップS70)、次のステップに処理を進める。例えば、CPU81は、各プレイヤオブジェクトデータ、および、衝突領域データDnを参照して、左拳オブジェクトG1および衝突領域Aと、仮想空間における他のオブジェクト(例えば、敵オブジェクト)とにおける、仮想空間における衝突を判定する。
次に、CPU81は、左拳オブジェクトG1および衝突領域Aの少なくとも1つと他のオブジェクトとが、仮想空間において衝突したか否かを判定する(ステップS71)。そして、CPU81は、左拳オブジェクトG1および衝突領域Aの少なくとも1つと他のオブジェクトとが衝突した場合、ステップS72に処理を進める。一方、CPU81は、左拳オブジェクトG1および衝突領域Aの何れも他のオブジェクトと衝突していない場合、ステップS75に処理を進める。
ステップS72において、CPU81は、他のオブジェクトに対する衝突アクション処理を行い、次のステップに処理を進める。例えば、CPU81は、左拳オブジェクトG1と敵オブジェクトとが衝突した場合、当該衝突に応じたダメージを敵オブジェクトに与えるとともに、当該ダメージに応じた所定のアクション(すなわち、上記飛ばされ動作)を設定する。また、CPU81は、衝突領域Aと敵オブジェクトとが衝突した場合、当該衝突に応じたダメージを敵オブジェクトに与えるとともに、左拳オブジェクトG1および右拳オブジェクトG2が組となった「両手パンチアクション」を設定する。
なお、本実施例では、左拳オブジェクトG1が敵オブジェクトに向かって移動している期間だけでなく、左拳オブジェクトG1が第1プレイヤオブジェクトP1に向かって戻る期間においても、当該左拳オブジェクトG1が他のオブジェクトと衝突した場合に衝突アクション処理が行われる。しかしながら、左拳オブジェクトG1が敵オブジェクトに向かって移動している期間に限って他のオブジェクトに対する衝突アクション処理を行う場合は、左拳オブジェクトG1が第1プレイヤオブジェクトP1に向かって戻る期間(戻りフラグがオンとなった状態)においては、上記ステップS71において左拳オブジェクトG1と他のオブジェクトとが衝突していないと常に判定して当該衝突アクション処理を行わなくてもかまわない。
次に、CPU81は、衝突振動を追加して(ステップS73)、次のステップに処理を進める。例えば、CPU81は、左拳オブジェクトG1と他のオブジェクトとが衝突した状況に応じた衝突振動波形を生成する。そして、CPU81は、左コントローラ振動データDoが示す振動波形に上記衝突振動波形を合成して新たな振動波形を生成し、当該振動波形を用いて左コントローラ振動データDoを更新する。
次に、CPU81は、アクションフラグをオフに設定してアクションフラグデータDjを更新するとともに、衝突領域データDnを衝突領域なし(例えば、Null)に設定して(ステップS74)、ステップS75に処理を進める。このように、左拳オブジェクトG1、右拳オブジェクトG2、または衝突領域Aのいずれかが他のオブジェクトと衝突するアクションが設定された場合、アクションフラグがオフに設定されるとともに、衝突領域に関する設定データが消去される。
ステップS75において、CPU81は、戻りフラグデータDkを参照して左拳オブジェクトG1の処理に対して設定されている戻りフラグがオンに設定されているか否かを判定する。そして、CPU81は、左拳オブジェクトG1の処理に対して設定されている戻りフラグがオフに設定されている場合、ステップS76に処理を進める。一方、CPU81は、左拳オブジェクトG1の処理に対して設定されている戻りフラグがオンに設定されている場合、ステップS80に処理を進める。
ステップS76において、CPU81は、左拳オブジェクトG1が移動開始位置に戻る仮想空間内の復路を移動する動作を行うか否かを判定する。例えば、CPU81は、左拳オブジェクトG1が移動開始位置から所定距離離れた位置に到達した場合、左拳オブジェクトG1が敵オブジェクトの位置を通過した後に所定時間経過した場合、左拳オブジェクトG1または衝突領域Aが他のオブジェクトに衝突した後に所定時間経過した場合等の条件を満たす場合、左拳オブジェクトG1が復路を移動する動作を行うと判定する。そして、CPU81は、左拳オブジェクトG1が復路を移動する動作を行う場合、ステップS77に処理を進める。一方、CPU81は、左拳オブジェクトG1が復路を移動する動作を行わない場合、ステップS84に処理を進める。
ステップS77において、CPU81は、左拳オブジェクトG1の処理に対して設定されている戻りフラグをオンに設定して戻りフラグデータDkを更新し、次のステップに処理を進める。このように、左拳オブジェクトG1が復路を移動する動作が設定された場合、左拳オブジェクトG1の処理に対して設定されている戻りフラグがオンに設定される。
次に、CPU81は、左拳オブジェクトG1の移動方向として、移動開始位置に向かう方向を設定して(ステップS78)、次のステップに処理を進める。例えば、CPU81は、プレイヤオブジェクトデータDmを参照して左拳オブジェクトG1の現在位置から移動開始位置へ向かう方向を左拳オブジェクトG1の移動方向として算出し、当該移動方向を用いてプレイヤオブジェクトデータDmを更新する。なお、上記ステップS78において設定する左拳オブジェクトG1の移動方向は、左拳オブジェクトG1が連結されているオブジェクト(例えば、第1プレイヤオブジェクトP1の伸びた腕オブジェクト)に沿った方向に設定してもよいし、左拳オブジェクトG1が移動開始位置から移動した際の軌道を逆に戻るように設定してもよい。
次に、CPU81は、左コントローラ3を振動させるための復路振動データを作成して(ステップS79)、ステップS84に処理を進める。例えば、CPU81は、左拳オブジェクトG1の種類に応じて左拳オブジェクトG1が復路を移動する際の復路振動波形を生成し、復路振動波形に基づいて左コントローラ3を振動させるための復路振動データを生成して、左コントローラ振動データDoを更新する。なお、CPU81は、左拳オブジェクトG1の移動速度や移動方向に応じて上記復路振動波形を調整してもよいし、当該移動速度や移動方向とは関わらずに上記復路移動波形を生成してもよい。また、CPU81は、左拳オブジェクトG1以外の仮想空間の状況に応じた振動を、上記振動波形に加えてもかまわない。例えば、第1プレイヤオブジェクトP1の動作や第1プレイヤオブジェクトP1に与えられた衝撃に応じた振動、ゲームフィールドの状況に応じた振動、BGMや効果音に応じた振動等を、上記復路振動波形に加えてもかまわない。また、CPU81は、左拳オブジェクトG1が復路を移動する際に左コントローラ3に振動を与えない場合は、振幅0を示す振動データまたは振動させないことを示す振動データを左コントローラ振動データDoに設定してもよい。
一方、戻りフラグがオンに設定されている場合、CPU81は、左拳オブジェクトG1が移動開始位置まで戻ったか否かを判定する(ステップS80)。例えば、CPU81は、プレイヤオブジェクトデータDmを参照して、左拳オブジェクトG1の位置が移動開始位置に設定されている場合、上記ステップS80において肯定判定する。そして、CPU81は、左拳オブジェクトG1が移動開始位置まで戻った場合、ステップS81に処理を進める。一方、CPU81は、左拳オブジェクトG1が移動開始位置まで戻っていない場合、ステップS84に処理を進める。
ステップS81において、CPU81は、左拳オブジェクトG1の処理に対して設定されている移動開始可能フラグをオンに設定して移動開始可能フラグデータDlを更新し、次のステップに処理を進める。このように、左拳オブジェクトG1が仮想空間内を再度移動可能な状態となった場合、第1移動開始可能状態となるため左拳オブジェクトG1の移動開始可能フラグがオンに設定される。なお、上記ステップS81では、左拳オブジェクトG1が移動開始位置まで戻った場合に即時に左拳オブジェクトG1の移動開始可能フラグをオンに設定して第1移動開始可能状態としているが、他のタイミングで第1移動開始可能状態を開始してもよい。例えば、左拳オブジェクトG1が移動開始位置まで戻ってから所定時間(例えば、8フレーム数)経過したタイミングで第1移動開始可能状態が開始されてもよい。
次に、CPU81は、左拳オブジェクトG1の処理に対して設定されている移動フラグおよび戻りフラグをオフに設定し、アクションフラグをオフに設定し、衝突領域や左拳オブジェクトG1の移動方向に関するデータをデフォルト値に設定して(ステップS82)、次のステップに処理を進める。例えば、CPU81は、左拳オブジェクトG1の処理に対して設定されている移動フラグおよび戻りフラグをそれぞれオフに設定して、移動フラグデータDiおよび戻りフラグデータDkをそれぞれ更新する。また、CPU81は、アクションフラグをオフに設定して、アクションフラグデータDjを更新する。また、CPU81は、衝突領域に関する設定データを衝突領域なし(例えば、Null)に設定して、衝突領域データDnを更新する。また、CPU81は、左拳オブジェクトG1の移動方向をデフォルト値(例えば、正面方向)に設定して、プレイヤオブジェクトデータDmを更新する。
次に、CPU81は、左コントローラ3の振動を停止させる処理を行い(ステップS83)、ステップS84に処理を進める。例えば、CPU81は、左拳オブジェクトG1の種類に応じて左拳オブジェクトG1が移動開始位置に戻った際に生じる振動および当該振動の後に振動を停止させる振動波形を生成し、当該振動波形に基づいて左コントローラ3を振動させるための振動データを生成して、左コントローラ振動データDoを更新する。なお、CPU81は、左拳オブジェクトG1の移動が停止した後も、左拳オブジェクトG1の移動以外の仮想空間の状況に応じた振動を与える場合は、当該振動(第1プレイヤオブジェクトP1の動作や第1プレイヤオブジェクトP1に与えられた衝撃に応じた振動、ゲームフィールドの状況に応じた振動、BGMや効果音に応じた振動等)を加えて、引き続き振動させてもかまわない。
ステップS84において、CPU81は、第1プレイヤオブジェクトP1が他のプレイヤオブジェクトによって投げられたか否かを判定する。詳細は後述するが(ステップS117)、本ゲーム処理においては、他のプレイヤオブジェクトについても上記ステップS2〜S9の一連の処理が実行される。そのため、他のプレイヤオブジェクトによる衝突領域Aが第1プレイヤオブジェクトP1に接触した場合、CPU81は、第1プレイヤオブジェクトP1が他のプレイヤオブジェクトによって投げられたと判定する。ステップS84の判定結果が肯定である場合、ステップS85の処理が実行される。一方、ステップS85の判定結果が否定である場合、CPU81は、当該サブルーチンによる処理を終了する。
ステップS85において、CPU81は、第1プレイヤオブジェクトP1による動作中のパンチ動作(ここでは、左拳オブジェクトG1を移動させる動作)の中止を設定する。このように、本実施形態においては、第1プレイヤオブジェクトP1がパンチ動作中に他のプレイヤオブジェクトによって投げられる場合、当該パンチ動作は動作中であってもキャンセルされる。上記ステップS85においてパンチ動作の中止が設定された場合、後述するステップS113またはS114において、CPU81は、第1プレイヤオブジェクトP1の左拳オブジェクトG1が元の位置(換言すれば、移動開始前の位置)に戻る動作を行わせる。上記ステップS85の後、CPU81は、当該サブルーチンによる処理を終了する。
なお、他の実施形態においては、プレイヤオブジェクトがパンチ動作中に他のプレイヤオブジェクト(例えば、敵オブジェクト)のパンチを受けた場合についても上記ステップS84およびS85の場合と同様、プレイヤオブジェクトによるパンチ動作がキャンセルされてもよい。すなわち、ステップS84において、CPU81は、第1プレイヤオブジェクトP1が他のプレイヤオブジェクトによって投げられた、または、パンチを受けたか否かを判定するようにしてもよい。
また、プレイヤオブジェクトによるパンチ動作は、パンチ動作の実行に関する条件が満たされた場合には、禁止されてもよい。例えば、拳オブジェクトには、耐久値を示すパラメータが設定され、CPU81は、拳オブジェクトが他のオブジェクトに当たったことに応じて耐久値を減少させてもよい。このとき、CPU81は、耐久値が0になったことを上記条件として、プレイヤオブジェクトによるパンチ動作を、所定時間の間、禁止する(すなわち、プレイヤによってパンチ操作が行われても、プレイヤオブジェクトにパンチ動作を行わせない)ようにしてもよい。これによれば、ゲームの戦略性を増すことができ、ゲームの興趣性を向上することができる。
図28に戻り、上記ステップS6における第1オブジェクト軌道変化処理の後、CPU81は、第2オブジェクト軌道変化処理を行い(ステップS7)、次のステップに処理を進める。なお、図31〜図33を用いて説明したオブジェクト軌道変化処理は、上記ステップS7の第2オブジェクト軌道変化処理においても用いられるサブルーチンである。すなわち、上記第1オブジェクト軌道変化処理において処理対象としていた左コントローラ3および左拳オブジェクトG1を右コントローラ4および右拳オブジェクトG2にすることによって、同じサブルーチンを用いることによって同様の処理が可能となる。したがって、上記ステップS7の第2オブジェクト軌道変化処理の詳細な説明については省略する。
次に、CPU81は、プレイヤオブジェクト移動処理を行い(ステップS8)、次のステップに処理を進める。以下、図34を参照して、上記ステップS8において行うプレイヤオブジェクト移動処理について説明する。
図34において、CPU81は、左コントローラ3および右コントローラ4の実空間におけるピッチ方向に対する傾きが同じ方向であるか否かを判定する(ステップS91)。例えば、CPU81は、姿勢データDbを参照して左コントローラ3のX軸正方向と右コントローラ4のX軸正方向とが実空間の水平方向に対してともに仰角方向にある、またはともに俯角方向にある場合、上記ステップS91において肯定判定する。そして、CPU81は、左コントローラ3および右コントローラ4の実空間におけるピッチ方向に対する傾きが同じ方向である場合、ステップS92に処理を進める。一方、CPU81は、左コントローラ3および右コントローラ4の実空間におけるピッチ方向に対する傾きが同じ方向にない場合、ステップS93に処理を進める。
ステップS92において、CPU81は、左コントローラ3および右コントローラ4の実空間におけるピッチ方向に対する傾き角度の平均値Pを算出し、ステップS94に処理を進める。例えば、CPU81は、姿勢データDbを参照して、左コントローラ3のX軸正方向と実空間の水平方向との差角と右コントローラ4のX軸正方向と実空間の水平方向との差角とを算出し、当該差角の平均値Pを算出する。例えば、上記差角は、X軸正方向が俯角方向である場合に正の値となり、X軸正方向が仰角方向である場合に負の値となるように算出する。
一方、上記ステップS91において左コントローラ3および右コントローラ4の実空間におけるピッチ方向に対する傾きが同じ方向にないと判定された場合、CPU81は、平均値Pを0に設定し(ステップS93)、ステップS94に処理を進める。
ステップS94において、CPU81は、左コントローラ3および右コントローラ4の実空間におけるロール方向に対する傾きが同じ方向であるか否かを判定する。例えば、CPU81は、姿勢データDbを参照して左コントローラ3のY軸正方向と右コントローラ4のY軸正方向とが実空間の水平方向に対してともに仰角方向にある、またはともに俯角方向にある場合、上記ステップS94において肯定判定する。そして、CPU81は、左コントローラ3および右コントローラ4の実空間におけるロール方向に対する傾きが同じ方向である場合、ステップS95に処理を進める。一方、CPU81は、左コントローラ3および右コントローラ4の実空間におけるロール方向に対する傾きが同じ方向にない場合、ステップS96に処理を進める。
ステップS95において、CPU81は、左コントローラ3および右コントローラ4の実空間におけるロール方向に対する傾き角度の平均値Rを算出し、ステップS97に処理を進める。例えば、CPU81は、姿勢データDbを参照して、左コントローラ3のY軸正方向と実空間の水平方向との差角と右コントローラ4のY軸正方向と実空間の水平方向との差角とを算出し、当該差角の平均値Rを算出する。例えば、上記差角は、Y軸正方向が俯角方向である場合に正の値となり、Y軸正方向が仰角方向である場合に負の値となるように算出する。
一方、上記ステップS94において左コントローラ3および右コントローラ4の実空間におけるロール方向に対する傾きが同じ方向にないと判定された場合、CPU81は、平均値Rを0に設定し(ステップS96)、ステップS97に処理を進める。
ステップS97において、CPU81は、平均値Pに応じた前後移動量と平均値Rに応じた左右移動量とを合成して移動量Mを算出し、次のステップに処理を進める。例えば、CPU81は、平均値Pが正の値である場合に仮想空間における前方へ移動し、平均値Pが負の値である場合に仮想空間における後方へ移動する前後移動量を、当該平均値Pの値に応じて算出する。また、CPU81は、平均値Rが正の値である場合に仮想空間における右へ移動し、平均値Rが負の値である場合に仮想空間における左へ移動する左右移動量を、当該平均値Rの値に応じて算出する。そして、上記前後移動量および上記左右移動量を合成することによって、仮想空間に対する移動量Mを算出する。
次に、CPU81は、移動フラグの設定状況に応じて移動量Mをスケーリングし(ステップS98)、当該サブルーチンによる処理を終了する。例えば、CPU81は、移動フラグデータDiを参照して左拳オブジェクトG1および右拳オブジェクトG2の処理に対してそれぞれ設定されている移動フラグが両方オフに設定されている場合、移動量Mはそのままの値とする。また、CPU81は左拳オブジェクトG1および右拳オブジェクトG2の処理に対してそれぞれ設定されている移動フラグの一方のみオンに設定されている場合、移動量Mを所定倍率によって縮小(例えば、0.9倍して縮小)する。また、CPU81は左拳オブジェクトG1および右拳オブジェクトG2の処理に対してそれぞれ設定されている移動フラグの両方がオンに設定されている場合、移動量Mを0に設定する。後述するステップS113においては、上記ステップS98の処理によって設定された移動量に基づいて、第1プレイヤオブジェクトP1の動作が制御される。
図28に戻り、上記ステップS8におけるプレイヤオブジェクト移動処理の後、CPU81は、動作制御処理を行う(ステップS9)。動作制御処理は、各プレイヤオブジェクトP1〜P4の動作を制御するための処理である。以下、図36および図37を参照して、動作制御処理について説明する。
図36に示すステップS101において、CPU81は、連結オブジェクトを設定する。すなわち、CPU81は、第1連結オブジェクトC1の位置、方向、および、長さを算出する。第1連結オブジェクトC1は、上記“[3−1.連結オブジェクトの概要]”で説明した方法に従って設定される。具体的には、第1連結オブジェクトC1は、DRAM85に記憶されるプレイヤオブジェクトデータが示す、第1プレイヤオブジェクトP1および第2プレイヤオブジェクトP2の位置に基づいて設定される。上述したように、連結オブジェクトについては他のオブジェクトとの当たり判定が行われないので、CPU81は、連結オブジェクトが他のオブジェクトと接触するか否かにかかわらず、当該連結オブジェクトによって連結されるプレイヤオブジェクトのみに基づいて連結オブジェクトを設定する。CPU81は、算出した第1連結オブジェクトC1の位置、方向、および、長さを示すデータを含むプレイヤオブジェクトデータDmをDRAM85に記憶する。なお、第2連結オブジェクトC2については、プレイヤオブジェクトデータが示す第3プレイヤオブジェクトP3および第4プレイヤオブジェクトP4の位置に基づいて、第1連結オブジェクトC1と同様に位置、方向、および、長さが算出される。ステップS101の次に、ステップS102の処理が実行される。
ステップS102において、CPU81は、連結オブジェクトの表示態様を決定する。すなわち、CPU81は、上記“(連結オブジェクトの表示態様)”で述べた方法に従って、ステップS101において算出された連結オブジェクトの長さに基づいて、連結オブジェクトの太さを決定する。ステップS102の次に、ステップS103の処理が実行される。
ステップS103において、CPU81は、第1連結オブジェクトC1によって第1プレイヤオブジェクトP1に加えられる張力を算出する。張力は、上記“[3−2.連結オブジェクトによる張力]”で述べた方法に従って算出される。具体的には、CPU81は、DRAM85に記憶される連結オブジェクトデータDqが示す第1連結オブジェクトC1の方向および長さに基づいて、張力の向きおよび大きさを算出する。また、CPU81は、プレイヤオブジェクトデータDmに含まれる上記張力データを、算出された張力を示すように更新する。ステップS103の次に、ステップS104の処理が実行される。
ステップS104において、CPU81は、上述の解除条件が満たされるか否かを判定する。ステップS104における判定は、上記“[3−3.連結オブジェクトの制約の解除]”で述べた方法に従って行われる。なお、上記飛ばされ動作および投げられ動作が行われたか否かは、後述するステップS117(具体的には、最後に実行されたステップS117の処理)の処理結果に基づいて判定することができる。また、上記投げ動作が行われたか否かは、上記ステップS72の処理結果に基づいて判定することができる。ステップS104の判定結果が肯定である場合、ステップS105の処理が実行される。一方、ステップS104の判定結果が否定である場合、ステップS105の処理がスキップされて、ステップS106の処理が実行される。
ステップS105において、CPU81は、第1プレイヤオブジェクトP1に張力無効動作を開始させるように設定する。なお、本実施形態においては、プレイヤオブジェクトデータは、プレイヤオブジェクトが行っている動作(張力無効動作を含む)の内容を示す動作データを含む。CPU81は、第1プレイヤオブジェクトP1に動作を行わせることを設定した場合、当該動作に関する動作データを含むようにプレイヤオブジェクトデータDmを更新する。また、ステップS105において、CPU81は、張力無効フラグをオンに設定する。すなわち、CPU81は、張力無効フラグデータDrを、オンを示す内容に更新する。ステップS105の次に、ステップS106の処理が実行される。
ステップS106において、CPU81は、第1プレイヤオブジェクトP1の動作方向を補正する補正条件が満たされたか否かを判定する。すなわち、CPU81は、上記“(動作方向の補正)”で述べた方法に従って、補正条件が満たされたか否かを判定する。なお、ステップS106の判定処理に用いられる、第1および第2プレイヤオブジェクトP1およびP2の動作内容および動作方向の情報は、プレイヤオブジェクトデータを参照することによって得ることができる。ステップS106の判定結果が肯定である場合、ステップS107の処理が実行される。一方、ステップS106の判定結果が否定である場合、ステップS107の処理がスキップされて、ステップS108の処理が実行される。
ステップS107において、CPU81は、第1プレイヤオブジェクトP1の動作方向を補正する。すなわち、CPU81は、上記“(動作方向の補正)”で述べた方法に従って動作方向を補正し、補正後の動作方向を示すように、プレイヤオブジェクトデータDmを更新する。ステップS107の次に、ステップS108の処理が実行される。
ステップS108において、CPU81は、上述の連鎖条件が満たされたか否かを判定する。ステップS108における判定は、上記“(連結オブジェクトによる連鎖動作)”で述べた方法に従って行われる。ステップS108の判定処理に用いられる、第2プレイヤオブジェクトP2が行っている動作の内容、および、第1連結オブジェクトC1の長さを示す情報は、プレイヤオブジェクトデータおよび連結オブジェクトデータDqを参照することによって得ることができる。ステップS108の判定結果が肯定である場合、ステップS109の処理が実行される。一方、ステップS108の判定結果が否定である場合、ステップS109の処理がスキップされて、図37に示すステップS110の処理が実行される。
ステップS109において、CPU81は、第1プレイヤオブジェクトP1に連鎖動作(具体的には、投げられ動作)を開始させるように設定する。すなわち、CPU81は、投げられ動作を示す動作データを含むようにプレイヤオブジェクトデータDmを更新する。また、ステップS109においてもステップS105と同様、CPU81は、張力無効フラグをオンに設定する。ステップS109の次に、図37に示すステップS110の処理が実行される。
図37に示すステップS110において、CPU81は、上述のガード操作が行われているか否かを判定する。具体的には、CPU81は、姿勢データDbを参照して、左コントローラ3および右コントローラ4の両方が内側へ所定角度以上傾く姿勢になっているか否かを判定する。ステップS110の判定結果が肯定である場合、ステップS111の処理が実行される。一方、ステップS110の判定結果が否定である場合、ステップS111の処理がスキップされて、ステップS112の処理が実行される。
ステップS111において、CPU81は、第1プレイヤオブジェクトP1がガード動作を行うように設定する。すなわち、CPU81は、ガード動作を示す動作データを含むようにプレイヤオブジェクトデータDmを更新する。ステップS111の次に、ステップS112の処理が実行される。
ステップS112において、CPU81は、第1プレイヤオブジェクトP1が張力無効動作中であるか否かを判定する。ステップS112の判定は、張力無効フラグデータを参照して、張力無効フラグがオンに設定されているか否かを判定することによって行うことができる。ステップS112の判定結果が否定である場合、ステップS113の処理が実行される。一方、ステップS112の判定結果が肯定である場合、ステップS114の処理が実行される。
ステップS113において、CPU81は、第1連結オブジェクトC1による張力の制約を加えて第1プレイヤオブジェクトP1の動作を制御する。ここで、ステップS113において、CPU81は、上記ステップS4〜S8の処理結果に基づいて第1プレイヤオブジェクトP1にパンチ動作および移動動作を行わせたり、所定の動作(例えば、ジャンプ動作やガード動作)を行わせるためのユーザ操作に応じて、第1プレイヤオブジェクトP1に当該所定の動作を行わせたりする。具体的には、CPU81は、今回のフレームにおける第1プレイヤオブジェクトP1の外観状態(具体的には、位置、向き、および、体勢)を決定する。このとき、CPU81は、上記張力を考慮して上記外観状態を決定する。なお、CPU81は、決定された第1プレイヤオブジェクトP1の外観状態を示すようにプレイヤオブジェクトデータDmを更新する。ステップS113の次に、ステップS115の処理が実行される。
ステップS114において、CPU81は、張力を考慮せずに第1プレイヤオブジェクトP1の動作を制御する。ここで、ステップS114において、CPU81は、上記張力無効動作を第1プレイヤオブジェクトP1に行わせ、今回のフレームにおける第1プレイヤオブジェクトP1の上記外観状態を決定する。このとき、CPU81は、上記張力を考慮せずに(換言すれば、張力を無視して)上記外観状態を決定する。CPU81は、決定された第1プレイヤオブジェクトP1の外観状態を示すようにプレイヤオブジェクトデータDmを更新する。ステップS114の次に、ステップS115の処理が実行される。
ステップS115において、CPU81は、張力無効動作が終了したか否かを判定する。すなわち、CPU81は、ステップS114による動作制御の結果、第1プレイヤオブジェクトP1が地面に倒れた状態となったり、あるいは、第1プレイヤオブジェクトP1による投げ動作が終了したりした場合、張力無効動作が終了したと判定する。ステップS115の判定結果が肯定である場合、ステップS116の処理が実行される。一方、ステップS115の判定結果が否定である場合、ステップS116の処理がスキップされて、ステップS117の処理が実行される。
ステップS116において、CPU81は、張力無効フラグをオフに設定する。すなわち、CPU81は、張力無効フラグデータDrを、オフを示す内容に更新する。ステップS116の次に、ステップS117の処理が実行される。
ステップS117において、CPU81は、他のプレイヤオブジェクトに関する動作制御を行う。具体的には、CPU81は、第2〜第4プレイヤオブジェクトP2〜P4についてもそれぞれ、動作を制御するための処理(具体的には、ステップS2〜S8の一連の処理、および、ステップS103〜S116の一連の処理)を実行する。ステップS117の後、CPU81は、図36および図37に示す動作制御処理を終了する。
図28に戻り、上記ステップS9における動作制御処理の後、CPU81は、表示制御処理を行う(ステップS10)。表示制御処理は、ゲーム空間を表すゲーム画像を生成して、表示装置(据置型モニタ6)にゲーム画像を表示するための処理である。以下、図38を参照して、表示制御処理について説明する。
図38に示すステップS121において、CPU81は、注目オブジェクトを切り替える条件が満たされたか否かを判定する。すなわち、CPU81は、ユーザによる切替操作が行われた、あるいは、上述の自動切り替え条件が満たされた場合、注目オブジェクトを切り替える条件が満たされたと判定する。一方、CPU81は、ユーザによる切替操作が行われておらず、かつ、上述の自動切り替え条件が満たされていない場合、注目オブジェクトを切り替える条件が満たされていないと判定する。ステップS121の判定結果が肯定である場合、ステップS122の処理が実行される。一方、ステップS121の判定結果が否定である場合、ステップS122の処理がスキップされて、ステップS123の処理が実行される。
ステップS122において、CPU81は、注目オブジェクトを切り替える。すなわち、CPU81は、切り替え後の注目オブジェクトを示すように、注目オブジェクトデータDsを更新する。ステップS122の次に、ステップS123の処理が実行される。
ステップS123において、CPU81は、仮想カメラを設定する。具体的には、CPU81は、プレイヤオブジェクトデータおよび注目オブジェクトデータDsに基づいて、仮想カメラの位置、向き、および画角を設定する。ステップS123においては、仮想カメラの向きは、第1プレイヤオブジェクトP1の側から注目オブジェクトの側を向くように設定される。なお、仮想カメラは、第1プレイヤオブジェクトP1から注目オブジェクトへの方向を厳密に向くように設定される必要は無い。また、仮想カメラの位置および画角は、仮想カメラの視野範囲に第1プレイヤオブジェクトP1と注目オブジェクトが含まれるように、設定される。ステップS123の次に、ステップS124の処理が実行される。
ステップS124において、CPU81は、ステップS123の処理によって設定された仮想カメラに基づいてゲーム画像を生成する。例えば、CPU81は、プレイヤオブジェクトデータを用いて、ゲームフィールド上に各プレイヤオブジェクト(左拳オブジェクトおよび右拳オブジェクトを含む)を配置する。また、CPU81は、アクションフラグデータDjが示すアクションフラグがオンに設定されており、衝突領域データDnに衝突領域Aに関する設定データが設定されている場合は、左拳オブジェクトG1および右拳オブジェクトG2の間に衝突領域Aに対応するオブジェクトを配置する。CPU81は、上記のようにして各種のオブジェクトが配置されたゲーム空間を仮想カメラから見たゲーム画像を生成する。なお、このとき、CPU81は、連結オブジェクトについては上記ステップS102で決定された表示態様に従って描画を行う。ステップS124の次に、ステップS125の処理が実行される。
ステップS125において、CPU81は、ステップS124の処理によって生成されたゲーム画像を表示装置(ここでは、据置型モニタ6)に表示させる。ステップS125の後、CPU81は、表示制御処理を終了する。なお、図28に示すステップS2〜ステップS12の一連の処理ループは、ステップS125の処理が所定時間(すなわち、1フレーム時間)に1回の割合で実行されるように、繰り返し実行される。
図28に戻り、上記ステップS10における表示制御処理の後、CPU81は、振動データの送信処理実行する(ステップS11)。具体的には、CPU81は、振動データを送信する周期毎に当該周期に対応する振動データを、左コントローラ3および右コントローラ4へ送信する処理を行い、次のステップに処理を進める。例えば、CPU81は、左コントローラ振動データDoを参照して、上記送信周期に対応する振動長さ分の振動データを左コントローラ3へ送信する。また、CPU81は、右コントローラ振動データDpを参照して、上記送信周期に対応する振動長さ分の振動データを右コントローラ4へ送信する。このように2つのコントローラを振動させるための振動データがそれぞれ左コントローラ3および右コントローラ4へ送信されることによって、当該振動データを受信した左コントローラ3および右コントローラ4は、それぞれ振動データに応じた振動波形で振動する。
次に、CPU81は、ゲームを終了するか否かを判定する(ステップS12)。上記ステップS12においてゲームを終了する条件としては、例えば、上記ゲームの結果が確定したことや、ユーザがゲームを終了する操作を行ったこと等がある。CPU81は、ゲームを終了しない場合に上記ステップS2に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。以降、ステップS2〜ステップS12の一連の処理は、ステップS12でゲームを終了すると判定されるまで繰り返し実行される。
[5.本実施形態の作用効果および変形例]
以上に説明した実施形態によれば、ゲームプログラムは、ユーザが操作する第1プレイヤオブジェクトおよび第2プレイヤオブジェクトを含む第1グループと、第3プレイヤオブジェクトおよび第4プレイヤオブジェクトを含む第2グループとが対戦するゲーム処理を行う情報処理装置のコンピュータ(具体的には、本体装置2のCPU81)を次の手段として機能させる。
・仮想3次元空間内に、第1〜第4プレイヤオブジェクト、当該第1プレイヤオブジェクトと当該第2プレイヤオブジェクトを連結する第1連結オブジェクト、および、当該第3プレイヤオブジェクトと当該第4プレイヤオブジェクトを連結する第2連結オブジェクトを配置するオブジェクト配置手段(ステップS1,S124)
・第1連結オブジェクトに基づいて第1プレイヤオブジェクトおよび第2プレイヤオブジェクトの移動に制約を加えて、第1プレイヤオブジェクトおよび第2プレイヤオブジェクトの動作を制御し、第2連結オブジェクトに基づいて第3プレイヤオブジェクトおよび第4プレイヤオブジェクトの移動に制約を加えて、第3プレイヤオブジェクトおよび第4プレイヤオブジェクトの動作を制御する動作制御手段(ステップS113,S117)
・第3プレイヤオブジェクトおよび第4プレイヤオブジェクトの少なくともいずれかが視野範囲に含まれるように、仮想3次元空間内に配置される仮想カメラを制御する仮想カメラ制御手段(ステップS123)
・仮想カメラに基づいて得られる仮想空間画像を生成する仮想空間画像生成手段(ステップS124)
・仮想空間画像を表示装置に表示させる表示制御手段(ステップS125)
上述のように、上記実施形態においては、各プレイヤオブジェクトは、連結オブジェクトにより移動に制約を受ける。ここで、上記実施形態においては、プレイヤオブジェクトが手を伸ばして拳オブジェクトを移動させるというパンチ動作によって敵オブジェクトと戦うゲームであるので、プレイヤオブジェクトは、敵オブジェクトに対してある程度距離を置いて動作を行う。そのため、連結オブジェクトによりプレイヤオブジェクトの移動に制約があっても、ゲームバランスが大きく崩れることはなく、移動の制約はユーザにとって十分許容できるものとなる。
なお、本実施形態においては、ユーザが操作する移動オブジェクトが、プレイヤオブジェクトの拳オブジェクトであるゲームを例として説明したが、移動オブジェクトは任意の種類のものであってもよい。また、移動オブジェクトは、本実施形態のように、移動中にユーザが移動方向を操作可能であるものであってもよいし、移動開始後はユーザが移動方向を操作できないものであってもよい。また、移動オブジェクトは、本実施形態のように、プレイヤオブジェクトの位置に戻ってくるものであってもよいし、プレイヤオブジェクトの位置には戻ってこずに前進し続けるものであってもよいし、他のオブジェクトに接触したことに応じて消滅(例えば、爆発)するものであってもよい。
また、本実施形態においては、1つのグループに含まれるプレイヤオブジェクトの数が2つである場合と例として説明したが、1つのグループに含まれるプレイヤオブジェクトの数は2以上の任意の数であってもよい。例えば、他の実施形態においては、1つのグループに3つのプレイヤオブジェクトが含まれていてもよい。このとき、本体装置2は、本実施形態と同様の連結オブジェクトであって、1つのグループに含まれる3つのプレイヤオブジェクトのうち任意の2つを連結する3つの連結オブジェクトを用いてもよい。また、連結オブジェクトは、上記3つのプレイヤオブジェクトを囲む領域を表すオブジェクトであってもよい。この領域は、球体形状であってもよいし、図22に示すような形状であってもよい。
以上に説明した実施形態によれば、ゲームプログラムは以下のように特定される。以下のゲームプログラムにより、新規なゲームを提供することができる。
(1−1)
情報処理装置のコンピュータに実行させるためのゲームプログラムであって、
前記情報処理装置のユーザの第1操作に応じて、仮想空間内に配置されたプレイヤオブジェクトの本体部分とは異なる第1部分を当該本体部分から離れる方向へ移動させる処理を開始する第1移動開始手段と、
前記ユーザの第2操作に応じて、前記プレイヤオブジェクトの本体部分および前記第1部分とは異なる第2部分を当該本体部分から離れる方向へ移動させる処理を開始する第2移動開始手段と、
前記ユーザの第3操作に応じて、前記第1部分および前記第2部分を一体として前記本体部分から離れる方向へ移動させる処理を開始する第3移動開始手段と、
前記第1部分の移動が開始された後の前記ユーザの第4操作に応じて、前記第1部分の移動方向を変更する第1移動変更手段と、
前記第2部分の移動が開始された後の前記ユーザの第5操作に応じて、前記第2部分の移動方向を変更する第2移動変更手段と、
前記第1部分および前記第2部分を一体とした移動が開始された後の前記ユーザの第6操作に応じて、前記第1部分および前記第2部分の移動方向を変更する第3移動変更手段と、
前記第1操作に応じて前記第1部分の移動が開始された後において所定の第1復帰条件が満たされた場合、前記第1部分を前記本体部分の方へ段階的に復帰させるように移動する処理を実行する第1復帰手段と、
前記第2操作に応じて前記第2部分の移動が開始された後において所定の第2復帰条件が満たされた場合、前記第2部分を前記本体部分の方へ段階的に復帰させるように移動する処理を実行する第2復帰手段と、
前記第3操作に応じて前記第1部分および前記第2部分の移動が開始された後において所定の第3復帰条件が満たされた場合、前記第1部分および前記第2部分を前記本体部分の方へ段階的に復帰させるように移動する処理を実行する第3復帰手段として機能させるためのゲームプログラム。
なお、上記において、「前記第1部分および前記第2部分を一体として移動させる」とは、第1部分および第2部分を、実質的に同じ方向に、実質的に同じ速度で移動させることを意味し、第1部分と第2部分とが接触した状態で移動することに限らない。
(1−2)
互いに独立して移動する前記第1部分および前記第2部分のうちのいずれかが所定のオブジェクトに衝突した場合、当該所定のオブジェクトに対する第1処理を実行する第1処理手段と、
一体となって移動する前記第1部分および前記第2部分が前記所定のオブジェクトに衝突した場合、前記第1処理とは異なる処理であって当該所定のオブジェクトに対する第2処理を実行する第2処理手段として前記コンピュータをさらに機能させる、上記(1−1)に記載のゲームプログラム。
(1−3)
前記第1処理手段は、前記所定のオブジェクトの状態が第1状態から第2状態となった場合、前記第1部分および前記第2部分のうちのいずれかが前記所定のオブジェクトに衝突したときには、前記第1処理を無効とし、
前記第2処理手段は、前記所定のオブジェクトの状態が第1状態から第2状態となった場合であっても、前記第1部分および前記第2部分が前記所定のオブジェクトに衝突したときには、前記第2処理を実行する、上記(1−2)に記載のゲームプログラム。
(1−4)
前記ユーザの第7操作に応じて、前記プレイヤオブジェクトの状態を変化させる処理を実行する状態変化手段として前記コンピュータをさらに機能させる、上記(1−1)または(1−2)に記載のゲームプログラム。
(1−5)
前記ユーザの第8操作に応じて、前記プレイヤオブジェクトを前記仮想空間内で移動させる移動制御手段として前記コンピュータをさらに機能させる、上記(1−1)から(1−4)のいずれか1つに記載のゲームプログラム。
(1−6)
前記第3移動開始手段によって前記第1部分および前記第2部分を一体として移動させる処理が開始された場合に、前記第1部分および前記第2部分に関連してエフェクト画像を表示させる表示制御手段として前記コンピュータを機能させる、上記(1−1)から(1−5)のいずれか1つに記載のゲームプログラム。
(1−7)
前記第3操作は、前記第1操作と前記第2操作とが実質的に同じタイミングで行われる操作である、上記(1−1)から(1−6)のいずれか1つに記載のゲームプログラム。
(1−8)
前記プレイヤオブジェクトに対して設定される前記第1部分の種類をユーザの選択指示に基づいて決定する種類決定手段として前記コンピュータをさらに機能させ、
前記第1移動変更手段は、前記第1部分の種類に応じて移動制御方法を変化させて当該第1部分の移動を制御する、上記(1−1)から(1−7)のいずれか1つに記載のゲームプログラム。
(1−9)
移動している前記第1部分と前記所定のオブジェクトの本体部分とは異なる第3部分とが衝突した場合、前記種類決定手段により決定された前記第1部分の種類と前記第3部分の種類とに基づいて、当該第1部分の移動を中止するか否かを判断する判断手段として前記コンピュータをさらに機能させる、上記(1−8)に記載のゲームプログラム。
(2−1)
操作装置を用いた操作に基づいた情報処理を行う情報処理装置に含まれるコンピュータで実行される情報処理プログラムであって、
前記コンピュータを、
前記操作装置の位置移動を示すデータを含む第1の操作データに基づいて、仮想空間においてオブジェクトの第1の移動方向への移動を開始させる移動開始判定部と、
前記操作装置の前記位置移動後に行われた前記操作装置の回転または姿勢を示すデータを含む第2の操作データに基づいて、前記オブジェクトを前記第1の移動方向から曲げて移動するように制御する軌道制御部として機能させる、情報処理プログラム。
(2−2)
前記軌道制御部は、前記第2の操作データに基づいて、前記操作装置の前記位置移動後に行われた前記操作装置の回転の方向に、前記オブジェクトを前記第1の移動方向から曲げて移動するように制御する、(2−1)に記載の情報処理プログラム。
(2−3)
前記軌道制御部は、前記操作装置の回転を示すデータとして、実空間における重力方向周りの回転を示すデータを用いて前記オブジェクトの移動方向を制御する、(2−1)または(2−2)に記載の情報処理プログラム。
(2−4)
前記軌道制御部は、前記操作装置の回転を示すデータとして、実空間において前記操作装置が前記位置移動した方向周りの当該操作装置の回転を示すデータを用いて前記オブジェクトの移動方向を制御する、(2−1)または(2−2)に記載の情報処理プログラム。
(2−5)
前記軌道制御部は、前記操作装置の姿勢を示すデータとして、実空間における重力方向を基準とした傾きを示すデータを用いて前記オブジェクトの移動方向を制御する、(2−1)から(2−4)の何れか1つに記載の情報処理プログラム。
(2−6)
前記第1の操作データは、前記操作装置に設けられた加速度センサにおける検出結果に基づくものであり、
前記第2の操作データは、前記操作装置に設けられたジャイロセンサまたは加速度センサにおける検出結果に基づくものである、(2−1)から(2−5)の何れか1つに記載の情報処理プログラム。
(2−7)
前記第1の操作データは、前記操作装置を振る操作に応じて生成され、
前記第2の操作データは、前記操作装置の曲げ操作に応じて生成される、(2−1)から(2−5)の何れか1つに記載の情報処理プログラム。
(2−8)
前記第1の操作データは、前記操作装置の回転または姿勢を示すデータを含み、
前記移動開始判定部は、前記第1の操作データに含まれる前記操作装置の回転または姿勢を示すデータに基づいて、前記第1の移動方向を決定する、(2−1)から(2−5)の何れか1つに記載の情報処理プログラム。
(2−9)
前記第1の操作データに含まれる前記操作装置の回転を示すデータは、前記操作装置に生じている角速度を示すデータであり、
前記移動開始判定部は、
実空間における前記角速度の重力方向周りの成分の大きさが、前記角速度から重力方向周りの成分を除いた大きさよりも大きい場合、前記角速度の重力方向周りの成分を用いて前記第1の移動方向を決定し、
実空間における前記角速度の重力方向周りの成分の大きさが、前記角速度から重力方向周りの成分を除いた大きさ以下の場合は、実空間において前記操作装置が前記位置移動した方向周りの前記角速度の成分を用いて前記第1の移動方向を決定する、(2−8)に記載の情報処理プログラム。
(2−10)
前記移動開始判定部は、前記位置移動した方向周りの前記角速度の成分を用いて前記第1の移動方向を決定する場合、当該方向周りの角速度成分が正であるときと負であるときで、前記操作装置の回転を示すデータの大きさに対する曲がりの程度を変えて前記第1の移動方向を決定する、(2−9)に記載の情報処理プログラム。
(2−11)
前記第1の移動方向は、前記オブジェクトを含む仮想画像を生成する仮想カメラから見て前後方向であり、
前記軌道制御部は、前記第2の操作データに基づいて、前記仮想カメラから見て上下左右方向に前記第1の移動方向から曲げて前記オブジェクトの移動方向を制御する、(2−1)から(2−10)の何れか1つに記載の情報処理プログラム。
(2−12)
前記軌道制御部は、仮想空間において前記オブジェクトが移動開始位置に戻る方向に移動している場合、前記第2の操作データに基づいて前記オブジェクトの移動方向の変更をしない、(2−1)から(2−11)の何れか1つに記載の情報処理プログラム。
(2−13)
前記オブジェクトは、仮想空間におけるプレイヤキャラクタの拳である、(2−1)から(2−12)の何れか1つに記載の情報処理プログラム。
(2−14)
前記情報処理装置は、2つの前記操作装置を用いた操作に基づいた情報処理を行い、
前記移動開始判定部および前記軌道制御部は、前記2つの操作装置それぞれの操作に基づいて、2つの前記オブジェクトそれぞれの移動を開始する処理およびそれぞれの移動方向を曲げる処理を行う、(2−1)から(2−13)の何れか1つに記載の情報処理プログラム。
(2−15)
前記2つの操作装置両方の操作に基づいて、仮想空間において前記オブジェクトを有するプレイヤキャラクタを移動させるプレイヤキャラクタ移動制御部として、さらに前記コンピュータを機能させる、(2−14)に記載の情報処理プログラム。
上記実施形態においては、上記(1−1)〜(1−8)および(2−1)〜(2−15)に記載のゲームプログラムの他、上記(1−1)〜(1−8)および(2−1)〜(2−15)における各手段を備える情報処理装置および情報処理システムが開示される。また、上記実施形態には、上記(1−1)〜(1−8)および(2−1)〜(2−15)における情報処理装置において実行されるゲーム処理方法が開示される。
上記実施形態においては、左コントローラ3および右コントローラ4を振動させるために、一時変数Sが7以上である場合にステップS195において往路振動データが生成され、一時変数Sが7未満である場合にステップS222において回転速度Vに基づいて往路振動データが変更される。ここで、一時変数Sは、左コントローラ3または右コントローラ4がパンチを繰り出すように振られたと判定された際に所定数に設定(ステップS22)された後、処理が進行されることに応じて1減算される変数である。つまり、左コントローラ3および右コントローラ4は、パンチを繰り出すように振られたと加速度に基づいて判定された直後は往路振動データに基づいて振動し、その後は回転速度Vに基づいて変化する振動データに基づいて振動することになる。したがって、本実施例においては、左コントローラ3および/または右コントローラ4を多様に振動させることが可能となり、リアリティがあるゲームプレイも可能となる。また、左コントローラ3および右コントローラ4を振動させるための振動データは、左コントローラ3および/または右コントローラ4の動作や姿勢に応じて変化させることができるとともに、アナログスティックの傾倒操作等におけるアナログ出力に応じて変化させることもできるため、操作態様に応じたフレキシブルな制御が可能となる。
なお、上述した実施例では、コントローラに生じた加速度が所定の条件を満たした場合に所定の往路振動データが生成され、当該往路振動データが出力されている期間においてコントローラに生じた角速度が所定の条件を満たした場合に、振動の振幅および/または周波数を一時的に変化させる振動データが生成されて出力する例を用いたが、他の態様によって振動データが生成されてもよい。例えば、コントローラを用いてパンチを繰り出すような操作がされたか否かを判定するパラメータは、当該コントローラに生じる加速度でなくてもよく、当該コントローラに生じる角速度や当該コントローラに生じる加速度と角速度の両方を用いて判定されてもよい。また、振動データを一時的に変化させるか否かを判定するための条件は、当該コントローラに生じる角速度に基づく条件でなくてもよく、当該コントローラに生じる加速度に基づく条件や当該コントローラに生じる加速度と角速度の両方に基づく条件でもよい。また、上記判定は、コントローラに設けられた操作ボタンや方向指示部に対する操作によって判定されてもよい。
また、回転速度Vに応じた振動データの一時的変化は、複数回生じてもよい。例えば、上述したフローチャートからも明らかであるが、左拳オブジェクトG1や右拳オブジェクトG2の往路移動中に回転速度Vが複数回生じた場合、回転速度Vが生じる毎に往路振動データが一時的に変化することになり、上記フローチャートによる処理を行えば、往路振動データを一時的に複数回変化させることが可能となる。
また、上述した実施例では、所定の往路振動データが出力されている期間においてコントローラの動きまたは姿勢の変化が所定の条件を満たした場合に、振動の振幅および/または周波数を一時的に変化させる振動データを出力する例を用いたが、他の態様によって一時的に変化させる振動パラメータを設定してもよい。第1の例として、コントローラが所定の周期で断続的に振動している場合に、コントローラの動きまたは姿勢の変化が所定の条件を満たしたことに応じて、当該周期や振動が途切れる期間および/または振動が加わる時間が変化する振動データを出力してもよい。第2の例として、所定の往路振動データが出力されている期間においてコントローラの動きまたは姿勢の変化が所定の条件を満たした場合に、当該往路振動データによる振動波形より振幅が大きい単発的な振動を所定回数加えることによって、一時的に変化させる振動データを出力してもよい。第3の例として、所定の往路振動データの出力対象となっているオブジェクトが特定種類のオブジェクトの場合、コントローラの動きまたは姿勢の変化が所定の条件を満たした場合であっても、振動を変化させずに当該往路振動データの出力を継続してもよい。
また、上述した実施例では、左コントローラ3や右コントローラ4の動きに応じて移動開始する左拳オブジェクトG1や右拳オブジェクトG2の移動に伴って往路振動データが生成される例を用いたが、他の操作に応じて左拳オブジェクトG1や右拳オブジェクトG2が移動開始してもよい。例えば、左コントローラ3や右コントローラ4に設けられた所定の操作部(例えば、操作ボタンや方向指示部)に対するユーザ操作に応じて、左拳オブジェクトG1や右拳オブジェクトG2が移動開始し、当該左拳オブジェクトG1や右拳オブジェクトG2の移動に伴って往路振動データが生成されてもよい。
また、上述した実施例では、左拳オブジェクトG1および右拳オブジェクトG2は、それぞれ移動中であっても左コントローラ3や右コントローラ4を用いた操作によって軌道が変化するため、結果的に第1移動開始可能状態が終了してから次の第1移動開始可能状態となるまでの時間や第2移動開始可能状態が終了してから次の第2移動開始可能状態となるまでの時間が長いものであることが前提となっている。このように、次の移動が開始可能となるまでの時間が長くなるゲームにおいては、先行して移動開始する操作(振り操作)を受け付けるゲーム仕様が効果的となるが、他の仕様によって次の移動が開始可能となるまでの時間が長くなるゲームであってもよいことは言うまでない。例えば、上述したゲーム例では、第1プレイヤオブジェクトP1の腕が伸びることによって移動中の動きを制御可能にしているが、プレイヤオブジェクトの他の五体(例えば、脚)が伸びるゲームやプレイヤオブジェクトが所持している物体(鞭オブジェクト、蛇腹オブジェクト等)が伸びるゲームに本発明を適用してもよい。また、プレイヤオブジェクトが遠隔操作可能なオブジェクト(例えば、ラジコン、ロボット、ロケットパンチ等)を移動中に操作し、再びプレイヤオブジェクトの手元に帰った場合に次の移動が可能となるゲームに本発明を適用してもよい。また、一旦放ったオブジェクト(鳥、ブーメラン、ボーリングの球等)が戻ってくるゲームに本発明を適用してもよい。
また、上述した「両手パンチアクション」は、左拳オブジェクトG1および右拳オブジェクトG2が組となって所定のアクションを行う例として記載したが、単に左拳オブジェクトG1および右拳オブジェクトG2が組となって移動するものであってもよい。この場合、ゲーム画像として表現される左拳オブジェクトG1および右拳オブジェクトG2の移動形態は、単に左拳オブジェクトG1および右拳オブジェクトG2が組となって移動するものとなるが、左拳オブジェクトG1および右拳オブジェクトG2の少なくとも一方が敵オブジェクトと衝突した場合に、単独で衝突する場合と比べて与えるダメージが大きくてもよい。
また、上述した実施例では、左コントローラ3や右コントローラ4を用いた操作に応じて、左拳オブジェクトG1および右拳オブジェクトG2における仮想空間の左右方向の位置が制御され、当該操作に応じて振動が一時的に変化する例を用いたが、左拳オブジェクトG1および右拳オブジェクトG2における仮想空間の上下方向の位置および/または前後方向の位置が制御可能に構成されてもよい。この場合、左コントローラ3および/または右コントローラ4の実空間における上下方向の動作および/またはピッチ方向の姿勢に応じて、左拳オブジェクトG1および/または右拳オブジェクトG2における仮想空間の上下方向の位置が制御可能に構成され、当該操作に応じて振動が一時的に変化してもよい。また、左コントローラ3および/または右コントローラ4の実空間における前後方向の動作および/またはピッチ方向の姿勢に応じて、左拳オブジェクトG1および/または右拳オブジェクトG2における仮想空間の前後方向の位置が制御可能に構成され、当該操作に応じて振動が一時的に変化してもよい。また、左コントローラ3や右コントローラ4を用いた操作に応じて、左拳オブジェクトG1および右拳オブジェクトG2における仮想空間における姿勢が制御可能に構成されてもよい。この場合、左コントローラ3および/または右コントローラ4の実空間におけるロール方向の姿勢に応じて、左拳オブジェクトG1および/または右拳オブジェクトG2における仮想空間のロール方向に対する姿勢が制御可能に構成され、当該操作に応じて振動が一時的に変化してもよい。また、左コントローラ3および/または右コントローラ4の実空間におけるピッチ方向の姿勢に応じて、左拳オブジェクトG1および/または右拳オブジェクトG2における仮想空間のピッチ方向に対する姿勢が制御可能に構成され、当該操作に応じて振動が一時的に変化してもよい。また、左コントローラ3および/または右コントローラ4の実空間におけるヨー方向の姿勢に応じて、左拳オブジェクトG1および/または右拳オブジェクトG2における仮想空間のヨー方向に対する姿勢が制御可能に構成され、当該操作に応じて振動が一時的に変化してもよい。
また、上述した実施例において、左コントローラ3や右コントローラ4の動きや姿勢を検出する方法については、単なる一例であって、他の方法や他のデータを用いて左コントローラ3や右コントローラ4の動きや姿勢を検出してもよい。例えば、上述した実施例における加速度センサ104および114や角速度センサ105および115は、左コントローラ3や右コントローラ4の動きや姿勢を算出するための姿勢センサの一例である。例えば他の実施形態においては、左コントローラ3や右コントローラ4は、加速度センサや角速度センサに加えて(または代えて)磁気センサを備えていてもよく、磁気によって左コントローラ3や右コントローラ4の動きや姿勢を算出してもよい。また、例えば他の実施形態においては、本体装置2は、左コントローラ3や右コントローラ4を撮像装置によって撮像し、撮影された画像を用いて左コントローラ3や右コントローラ4の動きや姿勢を算出してもよい。また、上述した実施例では、左コントローラ3や右コントローラ4を用いた操作に応じたゲーム画像を据置型モニタ6に表示しているが、本体装置2のディスプレイ12に表示してもよい。また、左拳オブジェクトG1および/または右拳オブジェクトG2の動作を制御するためのコントローラは、左コントローラ3および右コントローラ4のセットだけでなく、他のコントローラが組み合わせられたり、他のコントローラ同士が組み合わせられたりしてもよい。
また、上述した実施例では、一対の左コントローラ3および右コントローラ4を用いて複数のオブジェクトを操作するゲームを用いたが、1つのコントローラを用いて単一のオブジェクトを操作するゲームでもよい。この場合、上記単一のオブジェクトの移動に応じて1つのコントローラを振動させるための往路振動データが出力されている期間において、当該コントローラの動きまたは姿勢の変化が所定の条件を満たした場合に、振動の振幅および/または周波数を一時的に変化させる振動データが出力される。これによって、1つのコントローラによって単一のオブジェクトを操作するゲームであっても、当該1つのコントローラの振動を一時的に変化させることが可能となる。
また、他の実施形態においては、本体装置2は、据置型モニタ6と直接通信可能であってもよい。例えば、本体装置2と据置型モニタ6とが直接有線通信または直接無線通信を行うことが可能であってもよい。この場合、本体装置2は、本体装置2と据置型モニタ6とが直接通信可能か否かに基づいて画像の表示先を決定してもよい。
また、アナログスティック32および52は、操作検出結果をアナログ値で取得し、当該アナログ値を示すアナログ操作データを出力できる操作装置の一例であるが、アナログ値を取得できる他の操作装置が左コントローラ3や右コントローラ4に設けられてもよい。例えば、ユーザがボタンを押下する押下量に応じたアナログ値を取得可能な押下ボタンやユーザがタッチする位置に応じたアナログ値を取得可能なタッチパネルやタッチパッドが左コントローラ3や右コントローラ4に設けられてもよい。
また、付加装置(例えば、クレードル)は、本体装置2を着脱可能な任意の付加装置であってよい。付加装置は、本実施形態のように、本体装置2に対する充電を行う機能を有していてもよいし、有していなくてもよい。
また、情報処理システム1は、どのような装置であってもよく、携帯型のゲーム装置、任意の携帯型電子機器(PDA(Personal Digital Assistant)、携帯電話、パーソナルコンピュータ、カメラ、タブレット等)等であってもよい。また、左コントローラ3および/または右コントローラ4も、どのような装置であってもよく、任意の携帯型電子機器(PDA(Personal Digital Assistant)、携帯電話、パーソナルコンピュータ、カメラ、タブレット、携帯ゲーム装置等)等であってもよい。
また、上述した説明では情報処理(ゲーム処理)を情報処理システム1でそれぞれ行う例を用いたが、上記処理ステップの少なくとも一部を他の装置で行ってもかまわない。例えば、情報処理システム1がさらに他の装置(例えば、別のサーバ、他の画像表示装置、他のゲーム装置、他の携帯端末)と通信可能に構成されている場合、上記処理ステップは、さらに当該他の装置が協働することによって実行してもよい。このように、上記処理ステップの少なくとも一部を他の装置で行うことによって、上述した処理と同様の処理が可能となる。また、上述した情報処理(ゲーム処理)は、少なくとも1つの情報処理装置により構成される情報処理システムに含まれる1つのプロセッサまたは複数のプロセッサ間の協働により実行されることが可能である。また、上記実施例においては、情報処理システム1のCPU81が所定のプログラムを実行することによって情報処理を行うことが可能であるが、情報処理システム1が備える専用回路によって上記処理の一部または全部が行われてもよい。
ここで、上述した変形例によれば、いわゆるクラウドコンピューティングのシステム形態や分散型の広域ネットワークおよびローカルネットワークのシステム形態でも本発明を実現することが可能となる。例えば、分散型のローカルネットワークのシステム形態では、据置型の情報処理装置(据置型のゲーム装置)と携帯型の情報処理装置(携帯型のゲーム装置)との間で上記処理を協働により実行することも可能となる。なお、これらのシステム形態では、上述した処理をどの装置で行うかについては特に限定されず、どのような処理分担をしたとしても本発明を実現できることは言うまでもない。
また、上述した情報処理で用いられる処理順序、設定値、判定に用いられる条件等は、単なる一例に過ぎず他の順序、値、条件であっても、本実施例を実現できることは言うまでもない。
また、上記プログラムは、外部メモリ等の外部記憶媒体を通じて情報処理システム1に供給されるだけでなく、有線または無線の通信回線を通じて当該装置に供給されてもよい。また、上記プログラムは、当該装置内部の不揮発性記憶装置に予め記録されていてもよい。なお、上記プログラムを記憶する情報記憶媒体としては、不揮発性メモリの他に、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープ、などでもよい。また、上記プログラムを記憶する情報記憶媒体としては、上記プログラムを記憶する揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施例の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。