図1を参照して、この実施例のビデオゲームシステム10はビデオゲーム装置12を含む。ビデオゲーム装置12は、略立方体のハウジング14を含み、ハウジング14の上端には光ディスクドライブ16が設けられる。光ディスクドライブ16には、ゲームプログラム等を記憶した情報記憶媒体の一例であるたとえばCD−ROMやDVD-ROMのような光ディスク18が装着される。ハウジング14の前面には複数の(実施例では4つの)コネクタ20が設けられる。これらコネクタ20は、ケーブル24によって、コントローラ100をビデオゲーム装置12に接続するためのものであり、この実施例では最大4つのコントローラ100をビデオゲーム装置12に接続することができる。なお、この発明を実行する装置は、ビデオゲーム装置に限られず、携帯型ゲーム装置,業務用ゲーム装置,または携帯電話等、ゲームを実行可能な装置であればなんでもよい。
そして、このコントローラ100はケーブル22によってビデオゲーム装置12に接続される。しかしながら、コントローラ100は、他の方法、たとえば電磁波(たとえば電波または赤外線)を介してワイヤレスで、ビデオゲーム装置12に接続されてもよい。
ビデオゲーム装置12のハウジング14の前面のコネクタ20の下方には、少なくとも1つの(この実施例では2つの)メモリスロット22が設けられる。このメモリスロット22にはメモリカード24が挿入される。メモリカード28は、光ディスク18から読み出したゲームプログラム等をローディングして一時的に記憶したり、このゲームシステム10を利用してプレイしたゲームのゲームデータ(たとえばゲームの結果)を保存(セーブ)しておいたりするために利用される。
ビデオゲーム装置12のハウジング14の後面には、AVケーブルコネクタ(図示せず)が設けられ、そのコネクタを用いて、AVケーブル28を通してビデオビデオゲーム装置12にモニタ30を接続する。このモニタ30は典型的にはカラーテレビジョン受像機であり、AVケーブル28は、ビデオゲーム装置12からの映像信号をカラーテレビのビデオ入力端子に入力し、音声信号を音声入力端子に与える。したがって、カラーテレビ(モニタ)30の画面32上にたとえば3次元(3D)ビデオゲームのゲーム画像が表示され、左右のスピーカ34からゲーム音楽や効果音などのステレオゲーム音声、または2スピーカであってもサラウンド効果を出すことが可能な場合は、サラウンド音声を含むゲーム音声が出力される。
このゲームシステム10において、ユーザまたはゲームプレイヤがゲーム(または他のアプリケーション)をプレイするために、ユーザはまずゲーム装置12の電源をオンし、次いで、ユーザはビデオゲーム(もしくはプレイしたいと思う他のアプリケーション)をストアしている適宜の光ディスク18を選択し、その光ディスク18をゲーム装置12のディスクドライブ16にローディングする。応じて、ゲーム装置12がその光ディスク18にストアされているソフトウェアに基づいてビデオゲームもしくは他のアプリケーションを実行し始めるようにする。ユーザはゲーム装置12に入力を与えるためにコントローラ100を操作する。応じて、ゲームもしくは他のアプリケーションをスタートさせ、さらには動画キャラクタ(プレイヤキャラクタ)を異なる方向に移動させたりできる。
ここで、図1−図5を参照して、実施例のコンガ型コントローラ100を詳細に説明する。コントローラ100は筐体112を含み、この筐体112は、樽形状に形成される第1ハウジング114と、当該第1ハウジング114とほぼ同じ形状および大きさに形成される第2ハウジング116と、第1ハウジング114と第2ハウジング116とを連結し、第1ハウジング114および第2ハウジング116よりも小さい大きさで略四角柱(直方体)状に形成される第3ハウジング(連結部)118とによって構成される。
また、第1ハウジング114および第2ハウジング116の上面(天面)には、カバー120および122がそれぞれ設けられ、このカバー120および122によって覆われる領域がプレイヤないしユーザが操作(叩き操作)する領域(操作領域)または叩き操作面である。つまり、操作装置ないしコントローラ100は、第1ハウジング114の上面と第2ハウジング116の上面とに2つの操作入力部を有している。たとえば、カバー120および122はラバーで形成され、プレイヤないしユーザの叩き操作によって、弾性変形し、その後、元の形状に戻る。カバー120および122は平面視の大きさ(カバーを真上から見た形状の大きさ)が少なくとも直径3cmの円を含む大きさである。これによって、プレイヤによる叩き操作が容易になる。なお、カバー120および122の形状は円形でなくてもよく、円を含む形状であれば楕円でも矩形でもその他どのような形状でもよい。
なお、図1に示すように、第3ハウジング118の上面には、マイク124が設けられる。音を集音するための孔を設ける場合には、マイク124は第3ハウジング118の内部或いは集音部が当該孔から露出するように設置される。ただし、この実施例では、マイク124を第3ハウジング118に設けるようにしてあるが、ユーザが叩き操作する操作領域(操作入力部)以外であれば、第1ハウジング114または第2ハウジング116に設けるようにしてもよい。
図2はコントローラ100の一部についての分解図である。つまり、第1ハウジング114側についての分解図であり、第2ハウジング116および第3ハウジング118については簡単のため、省略してある。
図2を参照して、第1ハウジング114には上面(天面)パネル126を含み、この上面パネル126の上方には、大きさの異なるスイッチ基板130およびスイッチ基板132が設けられ、このスイッチ基板130および132は、上面パネル126の所定位置にそれぞれ固定的に配置(収納)される。図2では省略するが、スイッチ基板130および132のそれぞれには、2つの接点(図4および図5ではスイッチ基板132の接点132a,132aだけが図示される。)が設けられる。
スイッチ基板130および132の上方には、それぞれ、2つのラバースイッチ134が配置され、このラバースイッチ134は、後述する押圧突起150および154の先端に接合される。図2では省略するが、このラバースイッチ134の裏面には、接点134aが設けられ、各ラバースイッチ134は、スイッチ基板130および132の接点と対向する位置に設けられる(図4参照)。
ラバースイッチ134の上方には、第1ハウジング114の蓋136が設けられ、これが上面パネル126、スイッチ基板130、132およびラバースイッチ134を覆うように第1ハウジング114に装着される。蓋136には、後述する係合突起148および152を通すための5つの孔138と押圧突起150および154と対向する位置に配置されたラバースイッチ134を通すための4つの孔140とが設けられる。
蓋136の上方には、異なる大きさ(形状)の押し下げ部材142および押し下げ部材144が設けられ、さらに、その上方には、蓋136に装着されるカバー120が設けられる。図3および図3のIV-IV断面図の一部である図4に示すように、押し下げ部材142は、三日月形状の本体146を有し、本体146から下方に突出して、3つの係合突起148および2つの押圧突起150が設けられる。また、押し下げ部材144は、半月形状の本体152を含み、本体152から下方に突出して、3つの係合突起152および2つの押圧突起154が設けられる。
図3は第1ハウジング114およびカバー120を真上から見た図であり、係合突起148,押圧突起150,係合突起152および押圧突起154は、それぞれ、図3に示すような位置に配置される。図3から分かるように、3つの係合突起148は押し下げ部材142の本体146の端部(左右両端および下端)に設けられ、2つの押圧突起150は3つの係合突起148の間に設けられる。また、3つの係合突起152は押し下げ部材144の本体152の端部(左右両端および上端)に設けられ、2つの押圧突起154は3つの係合突起152の間に設けられる。また、図4に示すように、係合突起152(係合突起148も同様である。)は、少なくともその先端に設けられる係合部158が上面パネル126の裏面(第1ハウジング114の内部)まで貫通するように、蓋136に設けられる孔138および上面パネル126に設けられる孔を通される。ただし、蓋136が上面パネル126に装着されることにより、孔138の内部に面パネル126の孔が形成されることになる。さらに、押圧突起150および押圧突起154は、蓋136の孔140内に配置されるラバースイッチ134を押圧するように設けられる。言い換えると、ラバースイッチ134は、その表面(押圧突起150および押圧突起154と接合される面)が第1ハウジング114の孔140から露出するように第1ハウジング114内に収納される。
なお、押圧突起150および154の先端部は、図4に示すようにラバースイッチ134上に接触して載置される。あるいは、ラバースイッチ134と嵌合構造または接着或いはその両方によって、接合されてもよい。したがって、ラバースイッチ134によって、押し下げ部材142および144は、支持されることになる。
また、図3および図4に示すように、係合突起152(係合突起148も同じ。)には、切り欠き(スリット)160が設けられ、これにより、係合突起148および152は、面パネル126の孔を通るときに縮径され、その孔を貫通すると、元に戻り、係合部158が上面パネル126の裏面(第1ハウジング114の内壁)に係合する。このため、押し下げ部材142および144が離脱してしまうのを防止することができる。
たとえば、図5(A)に示すように、プレイヤがコントローラ100(カバー120)の右側を叩くと、これによって、カバー120は弾性変形し、押し下げ部材144(押し下げ部材142も同じ。)の右側が押し下げられようとする。このとき、押し下げ部材144の左側に設けられる係合突起152の係合部158が上面パネル126の裏面に係合する。これにより、押し下げ部材144が上方向に付勢されることが防止される。したがって、押し下げ部材144の右側が下方向に付勢され、当該右側のラバースイッチ134が押圧部材154によって押圧され、スイッチ基板132に接触する。すなわち、接点132aと接点134aとが接触する。
また、図5(B)に示すように、プレイヤがコントローラ100(カバー120)の左側を叩くと、これによって、カバー120が弾性変形し、押し下げ部材144(押し下げ部材142も同じ。)の左側が押し下げられようとする。このとき、押し下げ部材144の右側に設けられる係合突起152の係合部158が上面パネル126の裏面に係合する。これにより、押し下げ部材144が上方向に付勢されることが防止される。したがって、押し下げ部材144の左側が下方向に付勢され、当該左側のラバースイッチ134が押圧部材154によって押圧され、ラバースイッチ134の接点134aがスイッチ基板132の接点132aに接触する。
つまり、押し下げ部材144(押し下げ部材142も同じ。)のいずれの位置(領域)が叩かれたとしても、叩いた位置或いはその近傍に設けられる係合突起152(148)以外の少なくとも1つの係合突起152(148)の係合部158が上面パネル126の裏面に係合する。このため、プレイヤの叩き操作があると、押し下げ部材144(142)が押し下げられ、いずれかのラバースイッチ134の接点134aは、スイッチ基板132の接点132a(スイッチ基板130の接点)に、必ず接触されるのである。
具体的には、図5に示すコントローラ100(カバー120)の左半分の領域のいずれかの位置が叩かれたときは、押し下げ部材144の右側に設けられる係合突起152の係合部158が上面パネル126の裏面に係合し、押し下げ部材144の左側が下方向に付勢され、当該左側のラバースイッチ134が押圧部材154によって押圧され、ラバースイッチ134の接点134aがスイッチ基板132の接点132aに接触する。反対に、コントローラ100(カバー120)の右半分の領域のいずれかの位置が叩かれたときは、押し下げ部材144の左側に設けられる係合突起152の係合部158が上面パネル126の裏面に係合し、押し下げ部材144の右側が下方向に付勢され、当該右側のラバースイッチ134が押圧部材154によって押圧され、ラバースイッチ134の接点134aがスイッチ基板132の接点132aに接触する。また、コントローラ100(カバー120)の中央部分の領域のいずれかの位置が叩かれたときは、押し下げ部材144の左右両方が略均一に押下げられるので、左右両方のラバースイッチ134が押圧部材154によって押圧され、ラバースイッチ134の接点134aがスイッチ基板132の接点132aに接触する。
このように、コントローラ100(カバー120または122)のどの位置(領域)が叩かれても確実にいずれかのラバースイッチを押圧して同じ操作信号を出力することができる。
コントローラ100の電気的な構成が図6に示される。この図6を参照して、コントローラ100は、コントローラIC162を含み、コントローラIC162には、第1ボタン164,第2ボタン166,第3ボタン168および第4ボタン170が接続される。また、上述したケーブル38の端部であり、プラグ36が接続されない側の端部がコントローラIC162に接続される。したがって、図1に示すように、ケーブル22がゲーム装置12のコネクタ20に差し込まれることによって、図6に示すように、コントローラIC162はゲーム装置12と電気的に接続される。さらに、コントローラIC162には、オペアンプ172を介してマイク124が接続される。
第1ボタン164および第2ボタン166は、第1ハウジング114に設けられるボタンであり、この実施例では、第1ボタン164は、スイッチ基板130およびそのスイッチ基板130の上方に(に対向して)設けられる2つのラバースイッチ134によって構成される。また、第2ボタン166は、スイッチ基板132およびそのスイッチ基板132に対向して設けられる2つのラバースイッチ134によって構成される。
第3ボタン168および第4ボタン170は、第2ハウジング116に設けられるボタンであり、この実施例では、第3ボタン168は、第1ボタン164と同様に構成され、第4ボタン170は、第2ボタン166と同様に構成される。
したがって、コントローラ100では、プレイヤは、第1ボタン164ないし第4ボタン170のいずれか1つまたはいずれか2つ以上の組み合わせにより、様々な操作をすることができるのである。プレイヤの叩き操作が第1ボタン164ないし第4ボタン166のオン/オフの状態信号でコントロールIC162に入力される。そして、叩き操作に応じた操作信号がコントローラIC162からゲーム装置12に出力される。
また、コントローラ100では、プレイヤが手拍子や音声により音を発生すると、その音がマイク124に入力され、オペアンプ172で増幅された後、コントローラIC162に入力される。これにより、音の発音による操作信号がコントローラIC162からゲーム装置12に出力される。たとえば、図1に示すように、コントローラ100のマイク124の近傍で拍手すると、その拍手による音がマイク124に入力され、そのときの音量が閾値以上であれば、音入力があったものとして検出される。
図7には、コントローラIC162からゲーム装置12に出力される操作信号のフォーマットの一例が示される。ただし、操作信号は、ゲーム装置12(この実施例では、本件出願人が製造販売する「GAME CUBE(商品名)」)の標準のコントローラに対応したフォーマットであり、図示は省略するが、当該コントローラは、2つのアナログジョイスティック(コントロールスティックおよびCスティック),十字キー,Aボタン,Bボタン,Xボタン,Yボタン,Zボタン,Lトリガーボタン,Rトリガーボタンおよびスタート(START)/ポーズ(PAUSE)ボタンなどを備える。
図7からも分かるように、操作信号は8バイトで構成され、1バイト目(1st byte)には、ビット7(b7)から順にビット0(b0)まで、“0”,“0”,“ORG_CH”,“START”,“Y”,“X”,“B”および“A”についてのデータが書き込まれる。ビット7およびビット6は固定値“0”であり、ビット5は設定モード“ORG_CH”のオンまたはオフを示すデータが書き込まれる。この実施例では、設定モード“ORG_CH”がオンである場合には“1”が書き込まれ、設定モード“ORG_CH”がオフである場合には“0”が書き込まれる。ここで、“ORG_CH”は、基準位置(ジョイスティックの原点(ニュートラルポジション))を再設定するか否かを設定するモード(設定モード)についての変数である。ビット4〜ビット0は、Yボタン,Xボタン,BボタンおよびAボタンの各々のオンまたはオフを示すデータが書き込まれる。この実施例では、ボタンがオンである場合には該当するビットに“1”が書き込まれ、ボタンがオフである場合には該当するビットに“0”が書き込まれる。
2バイト目(2nd byte)には、ビット7から順にビット0まで、“FIN”,“L”,“R”,“Z”,“UP”,“DOWN”,“RIGHT”および“LEFT”についてのデータが書き込まれる。ビット7はコントローラを識別するモード“FIN”のオンまたはオフを示すデータが書き込まれる。この実施例では、標準コントローラの場合にはオンである“1”が書き込まれ、操作装置10(打楽器型コントローラ)の場合にはオフである“0”が書き込まれる。ビット6−ビット0には、Lトリガーボタン,Rトリガーボタン、Zボタン、UP(上)ボタン、DOWN(下)ボタン、RIGHT(右)ボタンおよびLEFT(左)ボタンの各々のオン/オフを示すデータが書き込まれる。各ビットに書き込まれるデータ値は、上述したYボタン等と同じである。
なお、UP(上)ボタン、DOWN(下)ボタン、RIGHT(右)ボタンおよびLEFT(左)ボタンは、十字キーの各ボタンである。
3バイト目(3rd byte)には、コントロールスティックのX方向の傾き量を示すデータが全8ビットを用いた2進数のデータで書き込まれる。したがって、X方向の傾きは、“00000000”(10進数で“0”)−“11111111”(“255”)で表される。たとえば、コントロールスティックを左に傾けると“0”に近づき、右に傾けると“255”に近づく。
なお、デフォルト設定では、ニュートラルポジションは“128(0100000)”であるため、これより小さい場合には、左方向に傾けられていることが分かり、これより大きければ右方向に傾けられていることが分かる。また、その傾き量は、取得したデータ値とニュートラルポジションのデータ値との差分によって検出することができる。
4バイト目(4th byte)には、コントロールスティックのY方向の傾き量を示すデータが全8ビットを用いた2進数のデータで書き込まれる。したがって、Y方向の傾きもまた、X方向と同様に、“00000000”(10進数で“0”)−“11111111”(“255”)で表される。たとえば、コントロールスティックを下に傾けると“0”に近づき、上に傾けると“255”に近づく。
なお、デフォルト設定では、ニュートラルポジションは“128(0100000)”である
ため、これより小さい場合には、下方向に傾けられていることが分かり、これより大きければ上方向に傾けられていることが分かる。また、その傾き量は、取得したデータ値とニュートラルポジションのデータ値との差分によって検出することができる。
5バイト目(5th byte)には、CスティックのX方向の傾き量を示すデータが全8ビットを用いた2進数のデータで書き込まれる。また、6バイト目(6th byte)には、CスティックのY方向の傾き量を示すデータが全8ビットを用いた2進数のデータで書き込まれる。これらのデータ値の決め方は、上述したコントロールスティックの場合と同じである。
7バイト目(7th byte)には、Lトリガーボタンの押し込み量を示すデータが全0ビットを用いた2進数のデータで書き込まれる。Lトリガーボタンが押されていない場合のデータ値は“00000000”であり、押し込み量に応じてデータ値は大きくされ、最大限に押し込んだ場合のデータ値は“11111111”となる。
8バイト目(8th byte)には、Rトリガーボタンの押し込み量を示すデータが全0ビットを用いた2進数で書き込まれる。このデータ値の決め方は、Lトリガーボタンの場合と同じである。
このように、操作信号のフォーマットが示されるが、コントローラ100にはジョイスティック、Yボタン、Xボタン、BボタンおよびAボタンは設けられておらず、第1ボタン164ないし第4ボタン170のオン/オフについての操作信号とマイク124への音の発音による操作信号とコントローラ識別モードとをゲーム装置12に出力するようにしてあるため、たとえば1バイト目−3バイト目までのデータが使用されることになる。具体的には、第1ボタン164のオン/オフのデータが1バイト目のビット3に書き込まれ、第2ボタン166のオン/オフのデータがビット2に書き込まれ、第3ボタン168のオン/オフのデータがビット1に書き込まれ、そして、第4ボタン170のオン/オフのデータがビット0に書き込まれる。また、コントローラ100(打楽器型コントローラ)であることを識別するためのデータである“0”が2バイト目のビット7に書き込まれる。さらに、マイク124への音の入力の有無(オン/オフ)のデータが3バイト目に書き込まれる。なお、音の大きさ(音量)のデータもゲーム装置に出力する場合には、3バイト目に音量に対応するデータ値(“00000000”−“11111111”)も書き込まれる。
なお、図1に示すようにコントローラ100には、スタート/ポーズボタン174も設けられるため、そのオン/オフのデータがビット4に書き込まれる。
図8は図1実施例のビデオゲームシステム10の電気的な構成を示すブロック図である。ビデオゲーム装置12には、中央処理ユニット(以下、「CPU」という。)36が設けられる。このCPU36は、コンピュータ或いはプロセサなどとも呼ばれ、ビデオゲーム装置12の全体的な制御を担当する。CPU36ないしコンピュータは、ゲームプロセサとして機能し、このCPU36には、バスを介して、メモリコントローラ38が結合される。メモリコントローラ38は主として、CPU36の制御の下で、バスを介して結合されるメインメモリ40の書込みや読出しを制御する。このメモリコントローラ38にはGPU(Graphics Processing Unit:グラフィックス処理装置) 42が結合される。
GPU42は、描画手段の一部を形成し、たとえばシングルチップASICで構成され、メモリコントローラ38を介してCPU36からのグラフィクスコマンド(graphics command :作画命令) を受け、そのコマンドに従って、ジオメトリユニット44およびレンダリングユニット46によって3次元(3D)ゲーム画像を生成する。つまり、ジオメトリユニット44は、3次元座標系の各種キャラクタやオブジェクト(複数のポリゴンで構成されている。そして、ポリゴンとは少なくとも3つの頂点座標によって定義される多角形平面をいう。)の回転,移動,変形等の座標演算処理を行う。レンダリングユニット46は、各種オブジェクトの各ポリゴンにテクスチャ(Texture :模様画像)を張り付けるなどの画像生成処理を施す。したがって、GPU42によって、ゲーム画面上に表示すべき3D画像データが生成(作成)され、その画像データがフレームバッファ48内に描画(記憶)される。
なお、GPU42が作画コマンドを実行するにあたって必要なデータ(プリミティブまたはポリゴンやテクスチャ等)は、GPU42がメモリコントローラ38を介して、メインメモリ40から入手する。
フレームバッファ48は、たとえばラスタスキャンモニタ34の1フレーム分の画像データを描画(蓄積)しておくためのメモリであり、GPU42によって1フレーム毎に書き換えられる。後述のビデオI/F58がメモリコントローラ38を介してフレームバッファ48のデータを読み出すことによって、モニタ34の画面上に3Dゲーム画像が表示される。
また、Zバッファ50は、フレームバッファ48に対応する画素(記憶位置またはアドレス)数×1画素当たりの奥行データのビット数に相当する記憶容量を有し、フレームバッファ48の各記憶位置に対応するドットの奥行き情報または奥行データ(Z値)を記憶するものである。
なお、フレームバッファ48およびZバッファ50は、ともにメインメモリ40の一部を用いて構成されてもよい。
メモリコントローラ38はまた、DSP(Digital Signal Processor)52を介して、ARAM54に結合される。したがって、メモリコントローラ38は、メインメモリ40だけでなく、サブメモリとしてのARAM54の書込みおよび/または読出しを制御する。
DSP52は、サウンドプロセサとして働き、CPU36の指示に従って、ARAM54に書き込まれている音波形データ(図5参照)を用いて、ゲームに必要な音(効果音)、音声或いは音楽(BGM)に対応するオーディオデータを生成する。
メモリコントローラ38は、さらに、バスによって、各インタフェース(I/F)56,58,60,62および64に結合される。コントローラI/F56は、コントローラ22のためのインタフェースであり、コントローラ100のコントローラIC162(図6)からの操作信号またはデータをメモリコントローラ38を通してCPU36に与える。ビデオI/F58は、フレームバッファ48にアクセスし、GPU42で作成した画像データを読み出して、画像信号または画像データ(ディジタルRGBピクセル値)をAVケーブル28(図1)を介してモニタ30に与える。
外部メモリI/F60は、ゲーム装置12の前面に挿入されるメモリカード26(図1)をメモリコントローラ38に連係させる。それによって、メモリコントローラ38を介して、CPU36がこのメモリカード26にデータを書込み、またはメモリカード26からデータを読み出すことができる。オーディオI/F62は、メモリコントローラ38を通してDSP52から与えられるオーディオデータまたは光ディスク18から読み出されたオーディオストリームを受け、それらに応じたオーディオ信号(音声信号)をモニタ30のスピーカ34に与える。
なお、ステレオ音声の場合には、スピーカ34は、少なくとも、左右1つずつ設けられる。また、サラウンド処理することで、左右2つのスピーカのみであっても後方から音が発生しているように音を聞かせることも可能である。
そして、ディスクI/F64は、そのディスクドライブ16をメモリコントローラ38に結合し、したがって、CPU36がディスクドライブ16を制御する。このディスクドライブ16によって光ディスク18から読み出されたプログラムデータやテクスチャデータ等が、CPU36の制御の下で、メインメモリ40に書き込まれる。
図9にはメインメモリ40のメモリマップが示される。メインメモリ40は、プログラム記憶領域68,プログラムデータ記憶領域70およびグラフィックデータ記憶領域72を含む。ゲームプログラム記憶領域68には、光ディスク18から読み出したゲームプログラムが、1度に全部または部分的かつ順次的に、記憶される。
プログラムデータ記憶領域70にも、同様に、光ディスク18から読み出したプログラムデータが1度に全部または部分的かつ順次的に、記憶される。プログラムデータは、たとえば、キャラクタやオブジェクトのモデルの座標データを含む。このプログラムデータ記憶領域70は、ゲームプレイヤがコントローラ100を操作することによってゲーム空間内で移動させ、あるいは他の任意の動作をさせることができるキャラクタ(プレイヤキャラクタまたは第1キャラクタ)の座標データ(初期位置の座標データ)を記憶するプレイヤキャラクタ座標データ記憶領域70a、および敵キャラクタや妖精キャラクタなどプレイヤキャラクタ以外のキャラクタ(ノンプレイヤキャラクタ:ゲームプレイヤによって操作または制御できないキャラクタ)の座標データ(初期位置の座標データ)を記憶するノンプレイヤキャラクタ座標データ記憶領域70bを含む。
ノンプレイヤキャラクタ座標データ領域70bには、移動基準位置データテーブル70cと所定形状基準位置データテーブル70dと現在位置データ70eが設定されている。この実施例では、ノンプレイヤキャラクタである複数の妖精キャラクタが仮想世界に登場する。各妖精キャラクタには妖精番号が付られており、移動基準位置データテーブル70cには、それぞれの妖精キャラクタの番号毎に、その番号の妖精キャラクタの移動制御の基準となる位置が3次元仮想空間(ゲーム空間またはゲーム世界)における座標として設定されている。また、所定形状基準位置データテーブル70dには、それぞれの妖精キャラクタの番号毎に、音入力があった場合にその番号の妖精キャラクタが位置すべき基準位置が3次元仮想空間(ゲーム空間またはゲーム世界)における座標として設定されている。移動基準位置は、第2キャラクタ(妖精)が移動表示される第2態様表示のときに用いられ、所定形状基準位置は、第2キャラクタを所定形状、たとえば矢印形状やブロック形状に配置する第1態様表示のときに用いられる。また、現在位置データ70eには、各妖精キャラクタの番号毎に、その番号の妖精キャラクタの現在位置が3次元仮想空間(ゲーム空間またはゲーム世界)における座標として記憶されている。
なお、移動基準位置と所定形状基準位置を同じ位置に設定してもよく、その場合には、いずれか一方のデータのみを設定すればよい。また、プレイヤキャラクタの座標データおよび各ノンプレイヤキャラクタの現在位置データはゲームの進行にともなって変更される。しかしながら、移動基準位置データおよび所定形状基準位置データは、ゲームの進行にともなって変更されることはなく仮想世界内において固定的な位置を示すデータである。
グラフィックデータ記憶領域72にも、同様に、光ディスク18から読み出したグラフィックデータが1度に全部または部分的かつ順次的に、記憶される。グラフィックデータは、たとえば、色や透明度などのような描画に関するデータである。グラフィックデータ記憶領域72には、上述のプレイヤキャラクタのポリゴンなどのデータ(ポリゴンリスト等)を記憶するための記憶領域72a,ノンプレイヤキャラクタ(妖精キャラクタや敵キャラクタ等)のポリゴンなどのデータ(ポリゴンリスト等)を記憶するための記憶領域72b,静止オブジェクト(壁オブジェクト,地面オブジェクトなど)のポリゴンなどのデータを記憶するための記憶領域72b,およびテクスチャデータを記憶するための記憶領域72dを含む。そして、テクスチャデータ記憶領域72dには、上述の静止オブジェクトのそれぞれの表面に貼り付けるための静止オブジェクトテクスチャを記憶する記憶領域72da,上述の平面マップに貼り付けるための平面マップテクスチャを記憶する記憶領域72db,さらにはその他のオブジェクトやキャラクタに貼り付けるためのテクスチャを記憶する記憶領域72dcを含む。この実施例では、第2キャラクタである妖精キャラクタを半透明表示するためのテクスチャデータが設定されている。つまり、この実施例では、妖精キャラクタは半透明で表示される。なお、この実施例では3次元画像処理を実行するゲーム装置を例として説明するが、この発明は2次元画像処理を実行するゲーム装置でもよい。
図10を参照して、図1実施例のゲームシステム10で、ゲーム装置12の電源を入れ、コントローラ100のスタートスイッチ118を押すことによって、ゲームがスタートする。そして、CPU36(図8)は、コントローラIC162(図6)からコントローラI/F56(図8)を経て入力される図7に示す操作信号またはコントローラデータを見る。
この実施例のゲームは、プレイヤの操作に基づいて仮想世界の中でプレイヤキャラクタを動作制御し、画面領域よりも大きな仮想世界の中を移動しながら、敵キャラクタを倒したり、アイテムを取得したりしつつ、ゴールを目指すゲームである。
プレイヤが第1操作面120を叩き操作すると、第1ボタン164または第2ボタン166(図6)がオンとなり、したがって、図7の1バイト目のビット3に第1ボタン164のオンのデータ(左操作信号)が書き込まれ、あるいは第2ボタン166のオンのデータ(左操作信号)がビット2に書き込まれる。また、プレイヤが第2操作面122を叩き操作すると、第3ボタン168または第4ボタン170(図6)がオンとなり、したがって、図7の1バイト目のビット1に第3ボタン168のオンのデータ(右操作信号)が書き込まれ、あるいは第4ボタン170のオンのデータ(右操作信号)がビット0に書き込まれる。
そして、CPU36は、ステップS1で、このような操作信号に基づいて、プレイヤキャラクタ74(図12)を移動制御する。たとえば、プレイヤが第1叩き操作面120を叩き操作すると、システム36は、左操作信号を検出し、モニタ30(図1)の画面に表示されるゲーム世界または仮想世界に登場するプレイヤキャラクタ(第1キャラクタ)74を左方向へ移動させる。CPU36は、同様に、プレイヤが第2叩き操作面122を叩き操作すると、右操作信号を検出し、プレイヤキャラクタ74を右方向へ移動させる。
続くステップS3において、CPU36は、音入力があったかどうか判断する。具体的には、マイク124への音の入力の有無(オン/オフ)のデータが図7の3バイト目に書き込まれ、その音の大きさ(音量)のデータが同じく3バイト目に音量データ値(“00000000”−“11111111”)として書き込まれる。したがって、CPU36は、コントローラデータの3バイト目の音量データを見て、それぞれが一定以上であれば、すなわち閾値以上の音入力があれば、ステップS3で“YES”を判断する。
ステップS3で”YES”の場合、ステップS5において仮想世界に衝撃波を発生する処理がされる。すなわち、音入力があった場合に仮想世界に発生する所定の変化である衝撃波が発生される。具体的には、衝撃波発生フラグがオンに設定され、衝撃波中心位置および衝撃波半径が設定される。衝撃波中心位置は、音入力があった時点におけるプレイヤキャラクタの座標位置が設定され、衝撃波半径は初期値(衝撃波がプレイヤキャラクタを囲む程度の大きさ)が設定される。なお、衝撃波発生フラグ、衝撃波中心位置および衝撃波半径はメインメモリ40に記憶されるデータである。また、ゲーム開始時において衝撃波発生フラグはオフに設定される。
ステップS3で”NO”の場合またはステップS5の後、ステップS7において、衝撃波発生フラグがオンか否かが判断される。ステップS7で”YES”の場合、ステップS9に進み、メインメモリ40に記憶された衝撃波中心位置および衝撃波半径に基づいて、球体状の衝撃波が仮想世界に配置される。具体的には衝撃波中心位置を球体の中心とし、衝撃波半径を球体の半径とするような球体(衝撃波)が仮想世界内に配置される。そして、この球体(衝撃波)が画面領域内の場合は表示処理がされる。なお、画面領域とは仮想世界のうちモニタ30に表示される領域のことであり、プレイヤキャラクタの位置を基準とする仮想世界における一定の領域内が画面領域に設定される。具体的には、3次元画像処理におけるクリッピング処理に行なうことにより表示領域とされる範囲が画面領域である。
ステップS9の後、ステップS11において、衝撃波半径を一定量だけ増加する処理がされる。この処理によって、次回のステップS9において半径を増した衝撃波が配置および表示されることになり、衝撃波が次第に半径を増して大きくなることになる。
ステップS11の後、ステップS13において、衝撃波半径が所定値以上になったか否かが判断される。”YES”の場合、ステップS17に進み、衝撃波を消す処理がされ、衝撃波発生フラグがオフにされる。すなわち、衝撃波は初期半径から次第に大きくなり、半径が所定以上になったときに消滅する。なお、ステップS13における所定値は画面領域よりも大きな半径としてもよい。その場合、衝撃波が画面領域を超えて広がることになり、画面領域外に存在する妖精キャラクタについても衝撃波を当てることができる。
ステップS13において”NO”の場合、ステップS15において、衝撃波中心位置を変更する処理がされる。この処理では、衝撃波中心位置を一定方向に一定速度で移動するようにしてもよいし、音入力があったときのプレイヤキャラクタの移動ベクトルを記憶しておき、この移動ベクトルと同じベクトルだけ衝撃波中心位置を移動するようにしてもよい。この処理によって、衝撃波が時間と共に移動することになる。なお、ステップS15の処理を省略して衝撃波中心位置は初期位置から変更しないようにしてもよい。
ステップS7で”NO”の場合、ステップS15またはステップS17の後、図11に示すステップS19に進む。
図11のステップS19−ステップS37では、仮想世界に存在する複数の妖精キャラクタのそれぞれについて配置位置を決定する処理および表示処理がされる。それぞれのステップS19−S33においては、1つの妖精キャラクタについて着目し、その妖精キャラクタについての処理がされる。まず、ステップS19において、衝撃波発生フラグがオンか否かが判断される。”YES”の場合、ステップS21において、妖精キャラクタの現在位置が前述のステップS9で配置された球体の表面に当たっているか否かが判断される。”YES”の場合、ステップS23において、その妖精キャラクタについて基準位置配置フラグがオンにされる。なお、基準位置配置フラグは妖精キャラクタそれぞれについてメインメモリ40に記憶されるデータであり、ゲーム開始時にはオフに設定されている。
ステップS19またはステップS21において”NO”の場合またはステップS23の後、ステップS25に進み、妖精キャラクタの現在位置が画面領域内か否かが判断される。”YES”の場合、ステップS27において、その妖精キャラクタの基準位置配置フラグがオンか否かが判断される。”YES”の場合、ステップS29において、その妖精キャラクタを、対応する所定形状基準位置に配置して(すなわち現在位置を所定形状基準位置に設定して)表示する処理がされる。すなわち、音入力がされた場合に発生した衝撃波に当たったキャラクタについて第1態様で表示される。
このステップS29で、CPU36は、メモリ40の所定形状基準位置データテーブル70dを参照し、そのテーブルが示す仮想空間座標(X11,Y11,Z11)、(X12,Y12,Z12)、(X13,Y13,Z13)…に対応する位置に妖精キャラクタを表示する。図13を参照してステップS29の処理を具体的に説明する。図13には、所定形状準位置801,…80n,および妖精キャラクタ761,…76nが示されている。現在着目している妖精キャラクタが761の場合、図13に示す対応の所定形状基準位置801に妖精キャラクタ761を配置する.
妖精キャラクタ761,…76nのすべてについて基準位置配置フラグがオンの場合(妖精キャラクタ761,…76nのすべてが衝撃波に当たった場合)、基準位置801,…80nが所定形状に配置されているので、その各基準位置上に各妖精キャラクタ761,…76nを配置されることになり、結果的に、妖精キャラクタ761,…76nが所定形状に配置された第1態様で表示され、図13の例では、矢印形状に配置して表示する。
そして、ステップS31においてその妖精キャラクタについての基準位置配置フラグがオンになってから一定時間が経過したか否かが判断され、”YES”の場合は、ステップS33において、その妖精キャラクタについての基準位置配置フラグがオフに設定される。なお、CPU36は、ステップS21で基準位置配置フラグをオンにしたときにたとえばメインメモリ40の所定領域に形成されたタイマ(図示せず)をトリガする。そして、CPU36は、そのタイマの計測時間を監視し、基準位置配置フラグがオンになってから(すなわち妖精キャラクタの所定形状表示から)一定時間経過したかどうか、ステップS31で判断する。このステップS31で“NO”が判断される限りステップS29での第1態様表示が継続される。なお、このタイマは妖精キャラクタのそれぞれについて設けられる。
しかしながら、ステップS31で“YES”が判断されると、つまり、妖精キャラクタの所定形状表示が始まって一定時間経過すると、CPU36は、基準位置配置フラグをオフにする(ステップS33)。したがって、このステップS33が、第1態様表示から第2態様表示への移行手段として機能する。
上述のように妖精キャラクタ761,…76nをたとえば矢印形状に配置することによって、たとえばプレイヤキャラクタ74の進むべき方向やたとえばアイテムの存在する方向などを示すようにすれば、その矢印形状の妖精キャラクタがゲームプレイヤに対してヒントを与えることができる。しかしながら、このヒントがあまりにも長時間継続することはゲームの興趣(切迫感)を削ぐことがあるので、上述のように一定時間の第1態様表示の後には再び第2態様表示に移行させるのである。
一方、ステップS27において”NO”の場合、ステップS35において、その妖精キャラクタを、対応する移動基準位置を基準として移動制御する処理がされ、移動後の位置にその妖精キャラクタを表示する処理がされる。すなわち、ステップS35において、妖精キャラクタは第2態様で表示される。つまり、メモリ40の移動基準位置データテーブル70cを参照し、そのテーブルが示す仮想空間座標(X1,Y1,Z1)、(X2,Y2,Z2)、(X3,Y3,Z3)…を基準として妖精キャラクタを移動制御する。
図12を参照してステップS35の処理を具体的に説明する。図12には、移動基準位置781,…78nおよび妖精キャラクタ761,…76nが示されている。現在着目している妖精キャラクタが761として、まず、対応する移動基準位置781に妖精キャラクタ761を配置する。そして、モニタ30の毎表示フレームにおいて、妖精キャラクタ761にランダムな方向の加速度を加える。ただし、加速度には上限が設定されている。さらに毎表示フレームにおいて、妖精キャラクタ761に、対応する移動基準位置781に向かう方向の加速度を与える。このときの加速度は、移動基準位置781と対応の妖精キャラクタ761との間の距離に比例するように設定される。ただし、2次元距離を計算する処理は重いので、高速化のために、正確な距離ではなくXY各成分の距離としている。この処理によって、妖精キャラクタは基準位置781の位置に留まらずに、基準位置781の付近をランダムに移動することになる。この移動のことを以下ランダム移動と呼ぶ。妖精キャラクタ761,…76nのすべてについて基準位置配置フラグがオフの場合、各妖精キャラクタがランダム移動することになる。
なお、このランダム移動において、摩擦を考慮するようにしてもよく、その場合には、表示フレーム毎に、たとえば0.9のような1未満の数値を加速度に掛け算する。
このように、妖精キャラクタに移動基準位置に向かう方向に加速度を加えることによって、妖精キャラクタが対応する移動基準位置から離れることなく、たとえば図12に示すようにランダム表示(第2態様表示)される。
ステップS25またはステップS31において”NO”の場合、または、ステップS33またはS35の後、ステップS37において、ステップS19〜ステップS33の処理を仮想空間内のすべての妖精キャラクタについて処理したか否かが判断され、”YES”の場合は、ステップS39に進み、”NO”の場合はステップS19に戻って他の妖精キャラクタについて処理を繰り返す。
ステップS39ではゲームオーバーか否かが判断され、ゲームオーバーでない場合はステップS1に戻ってゲーム処理を繰り返し、ゲームオーバーの場合は終了する。
なお、ステップS35では図14に示す第2態様表示にし、ステップS29では図15に示す第1態様表示にすることも変形例として可能である。
すなわち、図14に示すような妖精キャラクタ761,…76nのランダム表示が行なわれているときには、この妖精キャラクタはプレイヤキャラクタにとって何も助けにはならない。つまり、プレイヤキャラクタ74は、高い障壁82を越えることはできない。
しかしながら、図15に示すように妖精キャラクタ761,…76nをブロック形状に配置することによって、プレイヤキャラクタ74の助けとなる。つまり、音入力に応じて、妖精キャラクタ761,…76nが一定時間ブロック形状に集合して表示されると、たとえば図15に示すようにプレイヤキャラクタ74がジャンプしてその上に乗ることができる。したがって、プレイヤキャラクタ74単独では到底越えられなかった高い障壁82であっても、プレイヤキャラクタ74が、妖精ブロック上からジャンプすることによって、容易に越えることができる。
妖精キャラクタ761,…76nをブロック形状に配置するためには、ステップS29で、CPU36は、ブロック形状配置のための所定形状基準位置データテーブル70dを参照し、そのテーブルが示す仮想空間座標(X11,Y11,Z11)、(X12,Y12,Z12)、(X13,Y13,Z13)…に対応する位置に各妖精キャラクタを表示する。具体的には、図15に示す所定形状基準位置841,…84nに妖精キャラクタ761,…76nを配置する。
なお、上述の実施例では所定の入力としてステップS3で音入力を検知するようにした。しかしながら、所定の入力としては、たとえばプレイヤが第1叩き操作面120と第2叩き操作面122とを同時に叩き操作したときの操作信号のような他の入力も容易に考えられる。また、打楽器型コントローラではない場合には、たとえばZボタン操作とかも所定の入力として考えられる。
さらに、上述の実施例では、打楽器型コントローラ100を用い、ステップS1では、その叩き操作回数に応じた移動速度を設定するようにした。しかしながら、コントローラは、公知のジョイスティック付きコントローラに変更されてもよい。ジョイスティック付きコントローラを用いる場合には、ステップS1では、プレイヤキャラクタの移動方向はジョイスティックの傾斜方向によって決まり、移動速度はジョイスティックの傾動角度(レバーを倒した程度)に応じて設定するようにすればよい。
また、上述の実施例では、各妖精キャラクタごとに、音入力があった場合に仮想世界に発生する変化の影響を受けるか否か、すなわち、衝撃波との当たり判定を行なって、各妖精キャラクタごとに第1態様で表示するか第2態様で表示するかを決定するようにしたが、他の変形例では、代表的な妖精キャラクタを1つ決めて、その代表妖精キャラクタが衝撃波と当たったときには、すべての妖精キャラクタを第1態様で表示し、その代表妖精キャラクタが衝撃波と当たらない場合は、すべての妖精キャラクタを第2態様で表示するようにしてもよい。具体的には、代表妖精キャラクタを示すデータを記憶し、そのデータが示す妖精キャラクタについてのみ衝撃波(音入力により仮想世界に発生する所定の変化)の影響を受けるか否かを判定する。代表妖精キャラクタが衝撃波の影響を受けると判定された場合には、すべての妖精キャラクタについて第1態様で表示する。この場合、仮想世界に存在する妖精キャラクタをグループにわけて(各妖精キャラクタについてどのグループに属するかを示すグループ属性情報を記憶しておき)、各グループごとに代表妖精キャラクタを決め(グループごとに代表妖精キャラクタを示すデータを記憶しておき)、代表妖精キャラクタが衝撃波の影響を受ける場合には、その代表妖精キャラクタのグループに属する他の妖精キャラクタすべてを第1態様で表示するようにしてもよい。このグループは、ヒントごとやブロックごと等、手助け処理の単位ごとにグループわけするとよい。
たとえば、所定形状がヒントを表す形状の場合、上述の実施例では、衝撃波が一部の妖精キャラクタにのみ当たった場合には、ヒントの一部のみが表示されて興趣性が増し、ヒントの全体を表示するにはすべての妖精キャラクタに衝撃波を当てる必要があるためゲーム性が増す。これに対して、上述の他の変形例では、衝撃波が代表妖精キャラクタに当たった場合には他の妖精キャラクタも第1態様で表示されるため、代表妖精キャラクタにさえ衝撃波を当てればヒントの全体が表示される。
また、上述の実施例では、仮想世界に存在するすべての妖精キャラクタについて、第1態様で表示するか第2態様で表示するかを決定する処理を実行するようにしたが、所定条件を満たす妖精キャラクタについてのみ当該処理をするようにしてもよい。たとえば、画面領域に存在する妖精キャラクタのみ処理をするようにしてもよいし、画面領域よりも大きい所定領域に存在する妖精キャラクタのみ処理するようにしてもよい。また、その画面領域または所定領域外でも処理を行なうか否かを示すフラグを各妖精キャラクタについて(またはグループごとに)記憶しておいて、そのフラグが画面領域または所定領域外でも当該処理を行なうことを示す妖精キャラクタ(またはグループ)についてのみ画面領域または所定領域外であっても当該処理をするようにしてもよい。この場合には、たとえば重要な手助け処理をする妖精キャラクタについては画面に表示される前から衝撃波とのあたり判定をしておいて、第1態様で表示される一定時間内に、プレイヤキャラクタが移動してその妖精キャラクタが画面領域に含まれるようにしたときに、その妖精キャラクタが第1態様で表示されることになる。