(57)【特許請求の範囲】
【請求項１】
少なくともビデオゲーム機と記憶媒体とコントローラとを備えたゲームシステムであって、
前記ビデオゲーム機は前記コントローラから出力される操作データと前記記憶媒体に記憶されたゲームプログラムとに基づいて、所定周期毎にディスプレイに表示されるべきゲーム画像を発生する処理手段と、カウント値を保持するためのメモリとを含み、
前記コントローラは、
プレイヤの手によって把持するためのハウジングと、
前記ハウジングに振動を与える振動源と、
前記ビデオゲーム機からの指令信号に応答して前記振動源を駆動する駆動回路とを備え、
前記記憶媒体は、前記処理手段に実行させるプログラムであって、前記ビデオゲーム機に、
前記コントローラから出力される前記操作データに応じてプレイヤオブジェクトの表示を制御する、プレイヤオブジェクト表示制御プログラムと、
前記プレイヤオブジェクト以外のオブジェクトの表示を制御する、オブジェクト表示制御プログラムと、
前記コントローラから所定の操作データが出力されたとき、および前記プレイヤオブジェクトが前記プレイヤオブジェクト以外のオブジェクトに接触したときの少なくとも一方のとき前記所定周期毎に増分値を前記カウント値に加算し、前記カウント値が所定値を超えたとき、予め定められた減算値をカウント値から減算する、カウント値制御プログラムと、
前記カウント値が前記所定値を超えた前記所定周期においてのみ前記振動源を駆動する、振動源制御プログラムとを含み、
前記ビデオゲーム機は、前記処理手段が前記プログラムを実行することに基づいてプレイヤにゲームをプレイさせる、ビデオゲームシステム。
【請求項２】
少なくともビデオゲーム機とプレイヤが操作するコントローラとを備えたゲームシステムであって、
前記コントローラは、
プレイヤの手によって把持するためのハウジングと、
前記ハウジングに振動を与える振動源と、
前記ビデオゲーム機からの指令信号に応答して前記振動源を駆動する駆動回路とを備え、
前記ビデオゲーム機は、
カウント値を保持するためのメモリと、
前記コントローラから出力される操作データに応じてプレイヤオブジェクトの表示を制御する、プレイヤオブジェクト表示制御手段と、
前記プレイヤオブジェクト以外のオブジェクトの表示を制御する、オブジェクト表示制御手段と、
前記コントローラから所定の操作データが出力されたとき、および前記プレイヤオブジェクトが前記プレイヤオブジェクト以外のオブジェクトに接触したときの少なくとも一方のとき前記所定周期毎に増分値を前記カウント値に加算し、前記カウント値が所定値を超えたとき、予め定められた減算値をカウント値から減算する、カウント値制御手段と、
前記カウント値が前記所定値を超えた前記所定周期においてのみ前記振動源を駆動する、振動源制御手段とを含む、ビデオゲームシステム。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
この発明はビデオゲームシステムに関する。より特定的には、この発明は、ビデオゲーム機に操作信号を与えるコントローラに設けられた振動源によってゲーム画像に応じて振動を発生させる、新規なビデオゲームシステムに関する。
【０００２】
【従来の技術】
従来のいわゆる業務用ビデオゲーム機では、プレイヤの座るシートに振動を発生させたり、あるいはそのシートを傾けたりして、ゲームの興趣を一層た高めることができる、いわゆる体感ゲーム機が既に実用化されている。
また、たとえば昭和６２年（１９８７）１２月１０日付で出願公開された実開昭６２−１９４３８９号には、ジョイスティックレバー内に電磁石を内蔵し、その電磁石によってジョイスティックレバーに振動を発生させるコントローラが開示されている。このような振動発生可能なコントローラを家庭用ビデオゲーム機に接続することによって、プレイヤの手に振動が伝達されるゲームを構成することが考えられる。
【０００３】
【発明が解決しようとする課題】
しかしながら、上述の従来技術は、ディスプレイに表示されるゲーム画像と振動との関連が全く開示されておらず、したがって、この従来技術を家庭用ビデオゲームシステムに利用することはできない。また、上述の体感ゲーム機は、シートに振動を発生させるものであるため、そのようなシートを持たない家庭用ビデオゲームシステムでは利用できない。
【０００４】
それゆえに、この発明の主たる目的は、ゲーム画像と関連してプレイヤに振動を伝達することができる、ビデオゲームシステムを提供することである。
【０００５】
【課題を解決するための手段】
この発明は、少なくともビデオゲーム機と記憶媒体とコントローラとを備えたゲームシステムであって、ビデオゲーム機はコントローラから出力される操作データと記憶媒体に記憶されたゲームプログラムとに基づいて、所定周期毎にディスプレイに表示されるべきゲーム画像を発生する処理手段と、カウント値を保持するためのメモリとを含み、コントローラは、プレイヤの手によって把持するためのハウジングと、ハウジングに振動を与える振動源と、ビデオゲーム機からの指令信号に応答して振動源を駆動する駆動回路とを備え、記憶媒体は、処理手段に実行させるプログラムであって、ビデオゲーム機に、コントローラから出力される操作データに応じてプレイヤオブジェクトの表示を制御する、プレイヤオブジェクト表示制御プログラムと、プレイヤオブジェクト以外のオブジェクトの表示を制御する、オブジェクト表示制御プログラムと、コントローラから所定の操作データが出力されたとき、およびプレイヤオブジェクトがプレイヤオブジェクト以外のオブジェクトに接触したときの少なくとも一方のとき所定周期毎に増分値をカウント値に加算し、カウント値が所定値を超えたとき、予め定められた減算値をカウント値から減算する、カウント値制御プログラムと、カウント値が所定値を超えた所定周期においてのみ振動源を駆動する、振動源制御プログラムとを含み、ビデオゲーム機は、処理手段がプログラムを実行することに基づいてプレイヤにゲームをプレイさせる、ビデオゲームシステムである。
【０００６】
この発明は、少なくともビデオゲーム機とプレイヤが操作するコントローラとを備えたゲームシステムであって、コントローラは、プレイヤの手によって把持するためのハウジングと、ハウジングに振動を与える振動源と、ビデオゲーム機からの指令信号に応答して振動源を駆動する駆動回路とを備え、ビデオゲーム機は、カウント値を保持するためのメモリと、コントローラから出力される操作データに応じてプレイヤオブジェクトの表示を制御する、プレイヤオブジェクト表示制御手段と、プレイヤオブジェクト以外のオブジェクトの表示を制御する、オブジェクト表示制御手段と、コントローラから所定の操作データが出力されたとき、およびプレイヤオブジェクトがプレイヤオブジェクト以外のオブジェクトに接触したときの少なくとも一方のとき所定周期毎に増分値をカウント値に加算し、カウント値が所定値を超えたとき、予め定められた減算値をカウント値から減算する、カウント値制御手段と、カウント値が所定値を超えた所定周期においてのみ振動源を駆動する、振動源制御手段とを含む、ビデオゲームシステムである。
【０００７】
【作用】
プレイヤオブジェクト画像および他のオブジェクト画像の状態（たとえば、両者が当たっているかなど）に応じて、振動発生条件が検出される。この条件が検出されると、コントローラに含まれる振動源を駆動回路によって駆動する。
また、コントローラの操作スイッチの操作状態によって、プレイヤオブジェクト画像と他のオブジェクト画像との関係によらず、振動を発生させることもできる。
【０００８】
【発明の効果】
この発明によれば、ゲーム画像の状態に応じてコントローラの振動源によって振動を発生させることができるので、より一層実感を伴ってゲームをプレイすることができる。
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【０００９】
【実施例】
図１に示す実施例のビデオゲームシステムは、ビデオゲーム機１０と、記憶媒体の一例のＲＯＭカートリッジ２０と、ビデオゲーム機１０に接続されるディスプレイ３０と、コントローラ４０とを含んで構成される。コントローラ４０には、振動カートリッジ５０が着脱自在に装着される。
【００１０】
コントローラ４０は、両手または片手で把持可能な形状のハウジング４１に、複数のスイッチないしボタンを設けて構成される。具体的には、コントローラ４０は、ハウジング４１の左右端部および中央部に、それぞれ下方に延びて形成されるハンドル４１Ｌ，４１Ｃおよび４１Ｒを含み、ハウジング４１の上面が操作領域である。操作領域には、中央下部にアナログ入力可能なジョイスティック（以下、「アナログジョイスティック」という。）４５が設けられ、左側に十字形のディジタル方向スイッチ（以下、「十字スイッチ」という。）４６が設けられ、右側に複数のボタンスイッチ４７Ａ，４７Ｂ，４７Ｃ，４７Ｄ，４７Ｅおよび４７Ｆが設けられる。
【００１１】
アナログジョイスティック４５は、スティックの傾き量と方向とによって、プレイヤオブジェクト（プレイヤがコントローラ４０によって操作可能なオブジェクト）の移動方向および／または移動速度ないし移動量を入力するために用いられる。十字スイッチ４６は、アナログジョイスティック４５に代えてプレイヤオブジェクトの移動方向を指示するために用いられる。ボタンスイッチ４７Ａおよび４７Ｂは、プレイヤオブジェクトの動作を指示するために利用され、ボタンスイッチ４７Ｃ−４７Ｄは、三次元画像のカメラの視点を切り換えたり、プレイヤオブジェクトのスピード調節等に用いられる。
【００１２】
操作領域のほぼ中央部にはスタートスイッチ４７Ｓが設けられ、このスタートスイッチ４７Ｓは、ゲームを開始させるときに操作される。中央部のハンドル４１Ｃの裏側にスイッチ４７Ｚが設けられ、このスイッチ４７Ｚは、たとえばシューティングゲームにおいてトリガスイッチとして利用される。ハウジング４１の左右上部側面にはスイッチ４７Ｌおよび４７Ｒが設けられる。
【００１３】
なお、上述のボタンスイッチ４７Ｃ−４７Ｆは、カメラの視点切換え以外の用途として、シューティングまたはアクションゲームにおいてプレイヤオブジェクトの移動速度を制御（たとえば、加速または減速）するためにも使用できる。しかしながら、これらのスイッチ４７Ａ−４７Ｆ，４７Ｓ，４７Ｚ，４７Ｌおよび４７Ｒの機能は、ゲームプログラムによって任意に定義することができる。
【００１４】
図２は図１実施例のビデオゲームシステムのブロック図である。ビデオゲーム機１０には、中央処理ユニット（以下、「ＣＰＵ」という。）１１およびコプロセッサ（リアリティ・コプロセッサ：以下、「ＲＣＰ」という。）１２が内蔵される。ＲＣＰ１２には、バスの制御を行うためのバス制御回路１２１と、ポリゴンの座標変換や陰影処理等を行うための信号プロセサ（リアリティ・シグナル・プロセサ；以下、「ＲＳＰ」という。）１２２と、ポリゴンデータを表示すべき画像にラスタライズしかつフレームメモリに記憶可能なデータ形式（ドットデータ）に変換するための描画プロセサ（リアリティ・ディスプレイ・プロセッサ；以下、「ＲＤＰ」という。）４６とが含まれる。
【００１５】
ＲＣＰ１２には、外部ＲＯＭ２１を内蔵するＲＯＭカートリッジ２０を着脱自在に装着するためのカートリッジ用コネクタ１３と、ディスクドライブ２９を着脱自在に装着するためのディスクドライブ用コネクタ１９７と、ＲＡＭ１４とが接続される。また、ＲＣＰ１２には、ＣＰＵ１１によって処理された音声信号および映像信号をそれぞれ出力するためのＤＡＣ（ディジタル／アナログ変換器）１５および１６が接続される。さらに、ＲＣＰ１２には、１つまたは複数のコントローラ４０の操作データおよび／または振動カートリッジ５０のデータをシリアル転送するためのコントローラ制御回路１７が接続される。
【００１６】
ＲＣＰ１２に含まれるバス制御回路１２１は、ＣＰＵ１１からバスを介してパラレル信号で与えられたコマンドをパラレル／シリアル変換して、シリアル信号としてコントローラ制御回路１７に供給する。また、バス制御回路１２１は、コントローラ制御回路１７から入力されたシリアル信号をパラレル信号に変換し、バスを介してＣＰＵ１１へ出力する。コントローラ４０から読み込まれた操作状態を示すデータ（操作信号ないし操作データ）は、ＣＰＵ１１によって処理されたり、ＲＡＭ１４に一時記憶される等の処理が行われる。換言すれば、ＲＡＭ１４は、ＣＰＵ１１によって処理されるデータを一時記憶する記憶領域を含み、バス制御回路１２１を介してデータの読出または書込を円滑に行うことに利用される。
【００１７】
音声用ＤＡＣ１５には、ビデオゲーム機１０の後面に設けられるコネクタ１９５が接続される。画像用ＤＡＣ１６には、ビデオゲーム機１０の後面に設けられるコネクタ１９６が接続される。コネクタ１９５には、ディスプレイ３０のスピーカ３１が接続される。コネクタ１９６には、テレビジョン受像機またはＣＲＴ等のディスプレイ３０が接続される。
【００１８】
コントローラ制御回路１７には、ビデオゲーム機１０の前面に設けられるコントローラ用コネクタ１８が接続される。コネクタ１８には、接続用ジャックを介してコントローラ４０が着脱自在に接続される。このように、コネクタ１８にコントローラ４０を接続することにより、コントローラ４０がビデオゲーム機１０と電気的に接続され、相互間のデータの送受信または転送が可能とされる。
【００１９】
コントローラ制御回路１７は、ＲＣＰ１２とコントローラ用コネクタ１８との間でデータをシリアルで送受信するために用いられ、図３に示すように、データ転送制御回路１７１，送信回路１７２，受信回路１７３および送受信データを一時記憶するためのＲＡＭ１７４を含む。データ転送制御回路１７１は、データ転送時にデータフォーマットを変換するためにパラレル／シリアル変換回路とシリアル／パラレル変換回路を含み、さらにＲＡＭ１７４の書込／読出制御を行う。シリアル／パラレル変換回路は、ＲＣＰ１２から供給されるシリアルデータをパラレルデータに変換してＲＡＭ１７４または送信回路１７２に与える。パラレル／シリアル変換回路は、ＲＡＭ１７４または受信回路１７３から供給されるパラレルデータをシリアルデータに変換して、ＲＣＰ１２に与える。送信回路１７２は、データ転送制御回路１７１から供給されるコントローラ４０の信号読込のためのコマンドおよび振動カートリッジ５０への書込データ（パラレルデータ）をシリアルデータに変換して、各コントローラ４０のそれぞれに対応するチャンネルＣＨ１〜ＣＨ４へ送出する。受信回路１７３は、各コントローラ４０に対応するチャンネルＣＨ１〜ＣＨ４から入力される各コントローラの操作データおよび振動カートリッジ５０からの読出データをシリアルデータで受信し、パラレルデータに変換してデータ転送制御回路１７１に与える。データ転送制御回路１７１は、ＲＣＰ１２から転送されたデータまたは受信回路１７３で受信されたコントローラデータや振動カートリッジ５０の読出データをＲＡＭ１７４に書込んだり、ＲＣＰ１２からの命令に基づいてＲＡＭ１７４のデータを読み出してＲＣＰ１２へ転送する。
【００２０】
なお、ＲＡＭ１７４は、図示を省略しているが、各チャネルＣＨ１〜ＣＨ４毎の記憶場所を有し、各記憶場所に当該チャネルのコマンド，送信データおよび／または受信データがそれぞれ記憶される。
図４はコントローラ４０および振動カートリッジ５０の詳細な回路図である。コントローラ４０のハウジングには、ジョイスティック４５，各スイッチ４６，４７等の操作状態を検出しかつその検出データをコントローラ制御回路１７へ転送するために、操作信号処理回路４４等が内蔵される。操作信号処理回路４４は、受信回路４４１，制御回路４４２，スイッチ信号検出回路４４３，カウンタ回路４４４，ジョイポート制御回路４４６，リセット回路４４７およびＮＯＲゲート４４８を含む。受信回路４４１は、コントローラ制御回路１７から送信される制御信号や振動カートリッジ５０への書込データ等のシリアル信号をパラレル信号に変換して制御回路４４２に与える。制御回路４４２は、コントローラ制御回路１７から送信される制御信号がジョイスティック４５のＸ，Ｙ座標のリセット信号であるとき、リセット信号を発生してＮＯＲゲート４４８を介してカウンタ４４４内のＸ軸用カウンタ４４４ＸとＹ軸用カウンタ４４４Ｙの計数値をリセット（０）させる。
【００２１】
ジョイスティック４５は、レバーの傾き方向のＸ軸方向とＹ軸方向に分解して傾き量に比例したパルス数を発生するように、Ｘ軸用とＹ軸用のフォトインタラプトを含み、それぞれのパルス信号をカウンタ４４４Ｘおよびカウンタ４４４Ｙに与える。カウンタ４４４Ｘは、ジョイスティック４５がＸ軸方向に傾けられたとき、その傾き量に応じて発生されるパルス数を計数する。カウンタ４４４Ｙは、ジョイスティック４５がＹ軸方向に傾けられたとき、その傾き量に応じて発生されるパルス数を計数する。したがって、カウンタ４４４Ｘとカウンタ４４４Ｙとの計数値によって決まるＸ軸とＹ軸の合成ベクトルによって、プレイヤオブジェクトまたは主人公キャラクタもしくはカーソルの移動方向と座標位置とが決定される。なお、カウンタ４４４Ｘおよびカウンタ４４４Ｙは、電源投入時にリセット信号発生回路４４７から与えられるリセット信号、またはプレイヤが所定の２つのスイッチを同時に押圧したときにスイッチ信号検出回路４４３から与えられるリセット信号によって、リセットされる。
【００２２】
スイッチ信号検出回路４４３は、制御回路４４２から一定周期（たとえばテレビジョンのフレーム周期である１／３０秒間隔）で与えられるスイッチ状態を出力するためのコマンドに応答して、十字スイッチ４６およびスイッチ４７Ａ〜４７Ｚの押圧状態によって変化する信号を読込み、それを制御回路４４２へ与える。制御回路４４２は、コントローラ制御回路１７からの操作状態データの読出指令信号に応答して、各スイッチ４７Ａ〜４７Ｚの操作状態データおよびカウンタ４４４Ｘおよび４４４Ｙの計数値を所定のデータフォーマットで送信回路４４５に与える。送信回路４４５は、制御回路４４２から出力されたパラレル信号をシリアル信号に変換して、変換回路４３および信号線４２を介してコントローラ制御回路１７へ転送する。制御回路４４２には、アドレスバスおよびデータバスならびにポートコネクタ４６を介してジョイポート制御回路４４６が接続される。ジョイポート制御回路４４６は、振動カートリッジ５０がポートコネクタ４６に接続されているとき、ＣＰＵ１１の命令に従ってデータの入出力（または送受信）制御を行う。
【００２３】
振動カートリッジ５０は、アドレスバスおよびデータバスにＲＡＭ５１を接続し、ＲＡＭ５１に電池５２を接続して構成される。ＲＡＭ５１は、たとえばアドレスバスを用いてアクセス可能な最大容量の半分未満の容量（たとえば２５６ｋビット）のＲＡＭである。ＲＡＭ５１は、ゲームに関連するバックアップデータを記憶するものであり、振動カートリッジ５０がポートコネクタ４６から抜き取られても電池５２からの電力供給を受けてバックアップデータを保持する。この振動カートリッジ５０は、振動発生回路５３を内蔵する。
【００２４】
次に、図５を参照して、振動カートリッジ５０を詳細に説明する。振動カートリッジ５０は、ケース５０１とそのケース５０１に取り付けられる裏蓋５０２とを含む。このケース５０１および裏蓋５０２で形成された振動カートリッジ５０が、図１に示すコントローラ４０の開口部に、着脱自在に装着される。
ケース５０１内には、基板５０３が収納される。基板５０３上には、前述のＲＡＭ５１およびバックアップ電池５２の他に、図４の振動発生回路５３を構成する、電池５０４および駆動回路５０５が実装される。なお、基板５０３の手前側エッジには、上述のコントローラ４０の開口部に形成されたコネクタ（図示せず）に接続される複数の端子５０６が形成される。この端子５０６がビデオゲーム機１０のＣＰＵ１１（図２）すなわちコントローラ制御回路１７からのデータおよびアドレスを受ける。
【００２５】
裏蓋５０２には、振動発生回路５３を構成する振動源５０７が固着される。実施例では、振動源５０７として、振動発生用モータを用いた。しかしながら、モータの他に、電源の供給を受けて振動を発生するソレノイドや他の素子が利用可能であることは勿論である。なお、振動発生用モータの一例として、東京パーツ工業株式会社製の「ＦＭ１６」，「ＦＭ２３」，「ＦＭ２５」あるいは「ＦＭ２９」や「ＣＭ−５」等が利用可能である。「ＦＭ」モータでは、円筒型ケースに内蔵された回転軸に偏心部材を取り付け、回転軸の回転に応じて偏心部材が回転することによって、ケースに振動が生じる。「ＣＭ」モータでは、電機子コイル自体を偏心させて装着し、その電機子が回転することによって、振動を発生する。なお、ソレノイドを用いる場合には、ソレノイド内の磁心が往復運動することによって振動が発生する。
【００２６】
いずれの場合も、このような振動源５０７は、電池５０４からの電源を受けて駆動回路５０５によって駆動され、振動を発生する。振動源５０７の消費電力は比較的大きく、したがって、この実施例では、ＲＡＭ５１のバックアップ電池５２（図４）とは別に、電池５０４を設けた。したがって、電池５０４が消耗されたときには、裏蓋５０２に取り外し可能に設けられた電池蓋５０８を開いて、電池５０４を新しい電池に交換することができる。ただし、２つの電池５２および５０４として、同じ電池を共通に用いることも、可能である。
【００２７】
また、コントローラケーブル（図示せず）に電源線を含ませ、その電源線によって、画像処理装置本体すなわちビデオゲーム機１０から端子５０６を通して振動源５０７に電源を供給するようにしてもよい。その場合には、電源線の容量は、振動源５０７の必要電力を考慮して適宜選定されることはいうまでもない。
さらに、この実施例では、振動源５０７で発生した振動が減衰することなくコントローラ４０からプレイヤの手に伝達され易いように、振動源５０７を裏蓋５０２に取り付けた。つまり、振動源５０７で発生した振動は、裏蓋５０２から、その裏蓋５０２に接触しているコントローラ４０の開口部に伝達され、したがって、コントローラ４０自体が振動する。そのため、コントローラ４０を把持しているプレイヤの手に、振動源５０７が発生した振動が伝達されることになる。したがって、振動源５０７の振動がコントローラ４０を通してプレイヤの手に伝達され得る限り、振動源５０７をケース５０１内の任意の位置に取り付けることができる。
【００２８】
なお、この実施例では、コントローラ４０に振動カートリッジ５０を装着することによってコントローラ４０に振動源５０７を持たせた。しかしながら、振動カートリッジ５０を用いることはなく、コントローラ４０のハウジング内に、振動発生回路５３（図４）すなわち振動源５０７，駆動回路５０５および電池５０４等を内蔵するようにしてもよい。
【００２９】
次に、図６を参照して、振動発生回路５３を構成する駆動回路５０５を詳細に説明する。駆動回路５０５は、ＮＡＮＤゲート５１０から成るデコーダを含み、このＮＡＮＤゲート５１０は、ビデオゲーム機１０のＣＰＵ１１（図２）からのアドレスデータＡ２〜Ａ１４を、アドレスバスすなわち端子５０６（図５）を通して受ける。実施例のゲーム機システムにおいては、そのアドレスＡ０〜Ａ１５の全てが「１」の場合、すなわち、アドレスＦＦＦＦの範囲をＣＰＵ１１が指定したとき、振動モードが設定され、振動源５０７を駆動するためのデータをＣＰＵ１１から出力するようにしている。つまり、ＣＰＵアドレスＦＦＦＦが指定されると、デコーダすなわちＮＡＮＤゲート５１０の出力が「０」となる。このＮＡＮＤゲート５１０の出力がＮＡＮＤゲート５１１に与えられる。ＮＡＮＤゲート５１１にはさらに、ＣＰＵ１１からの書込信号−ＷＥおよびチップイネーブル信号ＣＥが与えられているので、ＮＡＮＤゲート５１１はＮＡＮＤゲート５１０の出力および信号−ＷＥおよびＣＥに応答して、ラッチ５１２にラッチ信号を与える。したがって、ラッチ５１２は、ＣＰＵ１１がＦＦＦＦアドレスを指定したとき、すなわち、振動モードにおいて、ＣＰＵデータＤ０を、データバスすなわち端子５０６を通して、ラッチする。このＣＰＵデータＤ０は、振動源５０７で振動を発生すべきとき「１」として、振動を発生すべきでないとき「０」として出力される。ラッチ５１２の出力は抵抗５１３を介して、駆動トランジスタ５１４のベースに接続される。ラッチ５１２の出力が「１」のとき、トランジスタ５１４がオンし、「０」のときオフする。トランジスタ５１４がオンすると、電池５０４から振動源５０７（振動モータ）に駆動電流が流れ、駆動源５０７から振動が発生される。
【００３０】
図７はＲＯＭカートリッジ２０（図１）に内蔵される外部ＲＯＭ２１のメモリ空間を示すメモリマップである。外部ＲＯＭ２１は、複数の記憶領域（以下、単に「領域」と呼ぶこともある）、たとえば図５に示すように、プログラム領域２２，文字コード領域２３，画像データ領域２４およびサウンドメモリ領域２５を含み、各種のプログラムを予め固定的に記憶している。
【００３１】
プログラム領域２２は、ゲーム画像を処理するために必要なプログラムや、ゲーム内容に応じたゲームデータ等を記憶している。具体的には、プログラム領域２２は、ＣＰＵ１１の動作プログラムを予め固定的に記憶するための記憶領域２２ａ〜２２ｐを含む。メインプログラム領域２２ａには、後述の図９に示すゲーム等のメインルーチンの処理プログラムが記憶される。コントロールパッドデータ判断プログラム領域２２ｂには、コントローラ４０の操作データを処理するためのプログラムが記憶される。書込プログラム領域２２ｃには、ＣＰＵ１１がＲＣＰ１２に書込処理させるべきフレームメモリおよびＺバッファへの書込プログラムが記憶される。たとえば、書込プログラム領域２２ｃには、１つの背景画面で表示すべき複数の移動ブジェクトまたは背景オブジェクトのテクスチュアデータに基づく画像データとして、色データをＲＡＭ１４の画像データ領域２０１（図８）に書き込むプログラムが記憶される。移動プログラム領域２２ｄには、ＣＰＵ１１がＲＣＰ１２に作用して三次元空間中の移動物体の位置を変化させるための制御プログラムが記憶される。カメラ制御プログラム領域２２ｅには、プレイヤオブシェクトを含む移動オブジェクトや背景オブジェクトを三次元空間中のどの方向および／または位置で撮影させるかを制御するためのカメラ制御プログラムが記憶される。プレイヤオブジェクトプログラム領域２２ｆには、プレイヤによって操作されるオブジェクトの表示制御のためのプログラムが記憶される。敵オブジェクトプログラム領域２２ｇには、プレイヤオブジェクトに対して攻撃を加える敵オブジェクトの表示制御のためのプログラムが記憶される。背景プログラム領域２２ｈには、ＣＰＵ１１がＲＣＰ１２に作用して、三次元の背景画を作成させるための背景作成プログラムが記憶される。
【００３２】
文字コード領域２３は、複数種類の文字コードを記憶する領域であって、たとえばコードに対応した複数種類の文字のドットデータを記憶している。文字コード領域２３に記憶されている文字コードデータは、ゲームの進行においてプレイヤに説明文を表示するために利用される。
画像データ領域２４は、背景オブジェクトおよび／または移動オブジェクトの各オブジェクト毎に複数のポリゴンの座標データおよびテクスチュアデータ等の画像データをそれぞれ記憶するとともに、これらのオブジェクトを所定の位置に固定的に表示しまたは移動表示させるための表示制御プログラムを記憶している。
【００３３】
サウンドメモリ領域２５には、場面毎に対応して、その場面に適した上記メッセージを音声で出力するためのセリフや効果音やゲーム音楽等のサウンドデータが記憶される。
なお、記憶媒体ないし外部記憶装置としては、ＲＯＭカートリッジ２０に代えてまたはＲＯＭカートリッジ２０に加えて、ＣＤ−ＲＯＭや磁気ディスク等の各種記憶媒体を用いてもよい。その場合、ＣＤ−ＲＯＭや磁気ディスク等の光学式または磁気式等のディスク状記憶媒体からゲームのための各種データ（プログラムデータおよび画像表示のためのデータを含む）を読み出しまたは必要に応じて書き込むために、ディスクドライブ２９（図２）が設けられる。ディスクドライブ２９は、外部ＲＯＭ２１と同様のプログラムデータが磁気的または光学的に記憶された磁気ディスクまたは光ディスクに記憶されたデータを読み出し、そのデータをＲＡＭ１４に転送する。
【００３４】
図８はＲＡＭ１４のメモリ空間を示すメモリマップである。ＲＡＭ１５は、画像データ領域２０１およびプログラム領域２０２を含む。画像データ領域２０１は、図示しないが１フレーム分の画像データを一時記憶するフレームメモリ領域と、フレームメモリ領域のドット毎の奥行データを記憶するＺバッファ領域とを含む。プログラムデータ領域２０２は、プログラムを一時的に記憶するための領域である。上述のＲＯＭ２１の各領域（図７）に設定されたプログラムデータが必要に応じてプログラムデータ領域２０２に一時的に記憶され、ＣＰＵ１１およびＲＣＰ１２（図２）は、ＲＡＭ１４のプログラム領域をアクセスすることによって、ゲームを進行させる。同じように、画像データ領域２０１も、ＲＯＭ２１に記憶されている画像データを必要に応じて一時的に記憶しておくための領域であり、ＣＰＵ１１またはＲＣＰ１２によって直接アクセスされ得る。つまり、画像データ領域２０１は、外部ＲＯＭ２１に記憶されているゲーム画像表示のための静止オブジェクトおよび／または移動オブジェクトを構成する複数のポリゴンの座標データおよびテクスチュアデータを記憶するものであって、画像処理動作に先立ってたとえば１コースまたはステージ分のデータが外部ＲＯＭ２１から転送される。
【００３５】
コントローラデータ記憶領域１４１は、コントローラ４０から読み込まれた操作状態を示す操作状態データを一時記憶する。
また、フラグ・レジスタ領域１４２は、ＣＰＵ１１がプログラムを実行中に、必要に応じて、フラグを設定し、あるいは変数または定数を記憶する。このフラグ・レジスタ領域１４３に設定されるフラグとしては、振動ゲームフラグＦ１，当たりフラグＦ２，前フレームフラグＦ３および振動フラグＦ４などがある。
【００３６】
振動ゲームフラグＦ１は、現在プレイしているゲームが振動カートリッジ５０の振動源５０７によって振動を発生させる場面を含むかどうかを示すフラグであり、そのような場面があるとき「１」として、それ以外のとき「０」として設定される。当たりフラグＦ２には、後述する当たり判定ルーチン（図１１）によって２つのオブジェクトが衝突ないし接触したとき「１」が設定され、それ以外のとき「０」が設定される。前フレームＦ３は、ディスプレイ３０の１フレーム前のフレームにおいて上述の当たりフラグＦ２が「１」にセットされたかどうか、つまり直前のフレームにおいても２つのオブジェクトは衝突ないし接触したかどうかを設定するためのフラグである。前フレームにおいて当たり検出がなされたとき「１」が、それ以外のとき「０」がそれぞれ設定される。振動フラグＦ４は、振動源５０７によって振動を発生させるべきとき「１」として、それ以外のとき「０」として設定される。
【００３７】
変数ｎ＿ａｄｄは、後述の振動発生条件検出ルーチン（図１０）において、１フレーム毎にカウンタＣＴのカウント値ｎを増加させるための増分値であり、変数ｎ＿ａｄｄ＿ｍは増分値ｎ＿ａｄｄの変化値である。カウンタＣＴは、データサイズが３２ビットであり、２５６進カウンタ（８ビットカウンタ）のように、そのカウント値ｎが「２５５」を超えたとき、振動源５０７（図５）を駆動して振動を発生させる。変数ａｘ，ａｙおよびａｚは、プレイヤオブジェクトのＸ軸，Ｙ軸およびＺ軸のそれぞれの加速度である。変数ｆｘ，ｆｙおよびｆｚは、加速度ａｘ，ａｙおよびａｚに定数ａｃｃｘ，ａｃｃｙおよびａｃｃｚをそれぞれ乗算した値である。
【００３８】
なお、変数ｎ＿ａｄｄおよびｎ＿ａｄｄ＿ｍは、定数であってもよい。実施例では、変数ｎ＿ａｄｄは、「２５５」または「１５０」に設定される。また、変数ｎ＿ａｄｄ＿ｍは、たとえば、「２０」または「１０」に設定される。
図９はこの実施例のビデオゲームシステムのメインフロー図であり、電源が投入されると、最初のステップＳ１において、ＣＰＵ１１はスタートに際してビデオゲーム機１０を所定の初期状態に設定する。たとえば、ＣＰＵ１１は、外部ＲＯＭ２１のプログラム領域２２に記憶されているゲームプログラムのうちの立ち上げプログラムをＲＡＭ１４のプログラム領域２０２に転送し、各パラメータを初期値に設定した後、図９の各ステップを順次実行する。
【００３９】
図９のメインフロー図の動作は、たとえば１フレーム（１／６０秒）毎または２ないし３フレーム毎に行われるものであり、コースをクリアするまではステップＳ２〜Ｓ１４が繰り返し実行される。コースクリアに成功することなくゲームオーバになると、ステップＳ１４に続いて、ステップＳ１５においてゲームオーバ処理が行われる。コースクリアに成功するとステップＳ１３からステップＳ１へ戻る。
【００４０】
すなわち、ステップＳ１において、ゲームのコース画面および／またはコース選択画面の表示が行われるが、電源投入後にゲームを開始する場合は、最初のコース画面の表示が行われる。最初のコースをクリアすると、次のコースが設定される。
ステップＳ１に続いて、ステップＳ２において、コントローラ処理が行われる。この処理は、コントローラ４０のジョイスティック４５，十字スイッチ４６，およびスイッチ４７Ａ〜４７Ｚの何れが操作されたかを検出し、その操作状態の検出データ（コントローラデータ）を読み込み、読み込んだコントローラデータをＲＡＭ１４のコントローラデータ領域１４１に書き込む。
【００４１】
ステップＳ３において、プレイヤオブジェクトの表示のための処理が行われる。この処理は、基本的には、プレイヤの操作するジョイスティック４５の操作状態と敵からの攻撃の有無に基づいてその姿勢，方向，形状および位置を変化させる処理である。たとえば、外部ＲＯＭ２１の記憶領域２２ｆ（図７）から転送されたプログラムと記憶領域２４から転送されたプレイヤオブジェクトのポリゴンデータとコントローラデータすなわちジョイスティック４５の操作状態とに基づいて、変化後のポリゴンデータを演算によって求める。その結果得られた複数のポリゴンにテクスチャデータによって色を付与する。
【００４２】
ステップＳ４において、カメラ処理が行われる。たとえば、カメラのファインダを通して見たときの視線または視界がプレイヤがジョイスティック４５によって指定したアングルとなるように、各オブジェクトに対する視点の座標を演算する。
ステップＳ５において、敵オブジェクトの処理が行われる。この処理は、記憶領域２２ｇおよび一部転送されたプログラムおよび記憶領域２４（図２）から転送された敵オブジェクトのポリゴンデータに基づいて実行される。たとえば、プレイヤオブジェクトの動きを判断しながらプレイヤオブジェクトに攻撃を加えたり進行を妨げる動きとなるように、敵オブジェクトの表示位置および／またはその形状をポリゴンデータの演算によって求めて、変化した敵オブジェクトの画像が表示される。これによって、敵オブジェクトは、プレイヤオブジェクトに対して何らかの影響を与えるように働く。
【００４３】
ステップＳ６において、背景（または静止）オブジェクトの処理が行われる。この処理は、記憶領域２２ｈから一部転送されたプログラムと記憶領域２４（図２）から転送された静止オブシェクトのポリゴンデータとに基づいて、静止オブジェクトの表示位置およびその形状を演算する。
ステップＳ７において、ＲＳＰ１２２が描画処理を行う。すなわち、ＲＣＰ１２は、ＣＰＵ１１の制御の下に、ＲＡＭ１４の画像データ領域２０１に記憶されている敵オブジェクト，プレイヤオブジェクト等の移動オブジェクトや背景等の静止オブジェクトのそれぞれのテクスチュアデータに基づいて、移動オブジェクトおよび静止オブジェクトの表示のための画像データの変換処理（座標変換処理およびフレームメモリ描画処理）を行う。具体的には、複数の移動オブジェクトや静止オブジェクト毎の複数のポリゴンに色を付与する。
【００４４】
ステップＳ８において、ＣＰＵ１１がメッセージや音楽や効果音等の音声データに基づいて、音声処理を行なう。
次のステップＳ９において、ＣＰＵ１１は、振動条件検出処理を行う。すなわち、このステップＳ９において、ＲＣＰ１２は、プレイヤオブジェクトおよび敵オブジェクトもしくは静止オブジェクトの画像データに基づいて、もしくはコントローラ４０からの操作データに基づいて、図１０のサブルーチンを実行することによって、振動源５０７によって振動を発生させるための条件が成立したかどうかを検出する。ただし、振動条件検出サブルーチンについては、図１０を参照して後に詳細に説明する。
【００４５】
次のステップＳ１０において、ＣＰＵ１１は、ステップＳ９によって振動発生条件を検出したことに応答して、図１２に示すサブルーチンを実行することによって、振動源５０７によって振動を発生させる。ステップＳ１０もまた、図１２を参照して後に詳細に説明する。
ステップＳ１１において、ＣＰＵ１１が、ステップＳ７において描画処理された結果により、ＲＡＭ１４のフレームメモリ領域に記憶されている画像データを読み出す。したがって、プレイヤオブジェクト，移動オブジェクト，静止オブジェクトおよび敵オブジェクト等がディスプレイ３０（図１，図２）の表示画面上に表示される。
【００４６】
ステップＳ１２において、ＲＣＰ１２がステップＳ１８において音声処理した結果得られる音声データを読み出すことにより、音楽および効果音または会話等の音声を出力させる。
ステップＳ１３において、コースをクリアしたか否かが判断（コースクリア検出）され、コースをクリアしていなければステップＳ１４においてゲームオーバになったか否かが判断され、ゲームオーバでなければステップＳ２へ戻り、ゲームオーバの条件が検出されるまでステップＳ２〜Ｓ１４が繰り返される。そして、プレイヤに許容されているミス回数が所定の回数になるか、プレイヤオブジェクトのライフを所定数量使い切る等のゲームオーバ条件になったことが検出されると、続くステップＳ１５においてゲームの継続またはバックアップデータの記憶の選択等のゲームオーバ処理が行われる。
【００４７】
なお、ステップＳ１３において、コースをクリアした条件（たとえば、ボスを倒す等）が検出されると、コースクリアの処理をした後、ステップＳ１へ戻る。図１０を参照して、振動発生条件検出サブルーチンの最初のステップＳ１０１では、ＣＰＵ１１は、プレイヤオブジェクトとそれに対する影響物体ないし障害物（他の移動オブジェクト，地面，海面，壁等の静止オブジェクト，敵オブジェクト，攻撃オブジェクト等）とが当たった（衝突ないし接触）か否かを判断する。この当たり検出は、図１１のサブルーチンに従って実行される。
【００４８】
図１１のステップＳ２０１において、ＣＰＵ１１は、ＡＢＳ（ＯＢＪ2x−ＯＢＪ1x）≦ＯＢＪ1rであるか否か、すなわち、Ｘ座標系で２つのオブジェクトが当たっているか否かを判断する。ＯＢＪ1 は、当たり判定をする対象物のオブジェクトであり、この実施例では、プレイヤオブジェクトのことである。ＯＢＪ2 は、ＯＢＪ1 に向かって近づいてくるオブジェクトであり、この実施例では、仲間オブジェクト，敵オブジェクト，静止オブジェクトおよび敵オブジェクトが発射した攻撃オブジェクトのことである。ＯＢＪ1xは、ＯＢＪ1 のＸ座標値であり、ＯＢＪ2xは、ＯＢＪ2 のＸ座標値である。ＯＢＪ1xとＯＢＪ2xとは、同じ座標系のＸ座標値であれば、ゲーム空間座標であってもプレイヤ座標であってもよい。ＡＢＳ（）は、（）内の数値の絶対値を表す。ＯＢＪ1rは、ＯＢＪ1 を立方体として考えた場合の立方体の一辺の半分の長さを示す値である。換言すると、ＯＢＪ1rは、ＯＢＪ1 の当たり判定範囲を示す値である。もし、ＡＢＳ（ＯＢＪ2x−ＯＢＪ1x）≦ＯＢＪ1rであるならば、ステップＳ２０２に進む。
【００４９】
ステップＳ２０２において、ＣＰＵ１１は、ＡＢＳ（ＯＢＪ2y−ＯＢＪ1y）≦ＯＢＪ1rであるか否か、すなわち、Ｙ座標系で２つのオブジェクトが当たっているか否かを判断する。ＯＢＪ1yは、ＯＢＪ1 のＹ座標値であり、ＯＢＪ2yは、ＯＢＪ2 のＹ座標値である。ＯＢＪ1yとＯＢＪ2yとは、同じ座標系のＹ座標値であれば、ゲーム空間座標であってもプレイヤ座標であってもよい。もし、ＡＢＳ（ＯＢＪ2y−ＯＢＪ1y）≦ＯＢＪ1rであるならば、ステップＳ２０３に進む。
【００５０】
ステップＳ２０３において、ＣＰＵ１１は、ＡＢＳ（ＯＢＪ2z−ＯＢＪ1z）≦ＯＢＪ1rであるか否か、すなわち、Ｚ座標系で２つのオブジェクトが当たっているか否かを判断する。ＯＢＪ1zは、ＯＢＪ1 のＺ座標値であり、ＯＢＪ2zは、ＯＢＪ2 のＺ座標値である。ＯＢＪ1zとＯＢＪ2zとは、同じ座標系のＺ座標値であれば、ゲーム空間座標であってもプレイヤ座標であってもよい。もし、ＡＢＳ（ＯＢＪ2z−ＯＢＪ1z）≦ＯＢＪ1rであるならば、ステップＳ２０４に進む。
【００５１】
ステップＳ２０４において、ＣＰＵ１１は、ＯＢＪ2 とＯＢＪ1 とが当たったと判断し、ＲＡＭ１４のフラグ領域１４２の当たりフラグＦ２を「１」にセットする。
一方、ステップＳ２０１において、ＡＢＳ（ＯＢＪ2x−ＯＢＪ1x）≦ＯＢＪ1rでないならば、元のルーチンに戻り、ステップＳ２０２において、ＡＢＳ（ＯＢＪ2y−ＯＢＪ1y）≦ＯＢＪ1rでないならば、元のルーチンに戻り、ステップＳ２０３において、ＡＢＳ（ＯＢＪ2z−ＯＢＪ1z）≦ＯＢＪ1rでないならば、元のルーチンに戻る。
【００５２】
図１０のステップＳ１０１において、プレイヤオブジェクトが他のオブジェクトに当たっていないことを検出したとき、つまり、ステップＳ１０１において“ＮＯ”が判断されたとき、ＣＰＵ１１は、次のステップＳ１０２において、プレイヤがコントローラ４０を操作し、プレイヤオブジェクトのアクセルをスタートさせたか否かを判断する。たとえば、「ウェーブレース」においてプレイヤオブジェクトが「ジェットスキー」なら、Ａボタン４７Ａ（図１）を押すことによって、また、プレイヤオブジェクトが「マリオ」なら、ジョイスティック４５（図１）を前に倒すことによって、アクセルスタートが実行される。したがって、ＣＰＵ１１は、このステップＳ１０２において、ＲＡＭ１４のコントローラデータ領域１４１のデータを参照して、Ａボタン４７Ａやジョイスティック４５が操作されたかどうかを判断する。
【００５３】
ステップＳ１０２において、“ＮＯ”が判断されると、ＣＰＵ１１は、次のステップＳ１０３において、プレイヤオブジェクト（この実施例では、「ウェーブレース」の「ジェットスキー」）が水面に接しているかどうかを判断する。ステップＳ１０３において、プレイヤオブジェクト（「ジェットスキー」）が水面に接しているかどうかを判断するために、図１１の当たり検出サブルーチンが利用される。
【００５４】
このように、図１０に示す振動発生条件検出サブルーチンにおいては、３つの振動発生条件すなわちステップＳ１０１，Ｓ１０２およびＳ１０３のいずれかを検出する。いずれのステップＳ１０１，Ｓ１０２およびＳ１０３においても“ＮＯ”が判断されると、すなわち、振動発生条件のいずれもが検出されないと、図１０のステップＳ１０４において、ＣＰＵ１１は、ＲＡＭ１４のフラグ・レジスタ領域１４２のレジスタ値ｎ＿ａｄｄを「０」にリセットする。それとともに、ＣＰＵ１１は、次のステップＳ１０５において、フラグ・レジスタ領域１４２の前フレームフラグＦ３を「０」にクリアする。すなわち、ステップＳ１０４においては、カウンタＣＴの増分値ｎ＿ａｄｄを「０」に設定するため、カウンタＣＴのカウント値ｎは１フレーム毎に「０」加算される。換言すれば、全てのステップＳ１０１，Ｓ１０２およびＳ１０３において“ＮＯ”が判断されると、カウンタＣＴは全くインクリメントされない。後で述べるように、たとえばカウンタＣＴのカウント値が「２５５」を超えると振動が発生されるのであるから、この場合には、振動源５０７による振動は発生されない。
【００５５】
なお、先のステップＳ１０１において“ＮＯ”が判断されるため、ステップＳ１０５では、前フレームフラグＦ３がリセットされる。
ステップＳ１０１，Ｓ１０２またはＳ１０３のいずれかにおいて“ＹＥＳ”が判断されると、振動発生条件が成立したので、それぞれの振動発生条件に従って、振動発生処理が実行される。
【００５６】
すなわち、ステップＳ１０１において、プレイヤオブジェクトが他のオブジェクトと当たったことを検出すると、ステップＳ１０６ないしＳ１１０を実行し、振動源５０７から強い振動を発生させる。また、ステップＳ１０２において、アクセルスタートが検出されると、ステップＳ１１１ないしＳ１１３によって、弱い振動が発生される。プレイヤオブジェクト（たとえば「ジェットスキー」）が水面に接していることをステップＳ１０３で検出すると、ステップＳ１１４ないしＳ１１７を実行し、「ジェットスキー」が波の上をバウンドする状態を表す弱い振動を発生させる。
【００５７】
先のステップＳ１０１において“ＹＥＳ”と判断されたとき、すなわち、プレイヤオブジェクトが他のオブジェクトと衝突ないし接触したと判断したとき、ＣＰＵ１１は、前フレームフラグＦ３が「０」かどうか判断する。すなわち、このステップＳ１０６においては、前フレームにおいてもプレイヤオブジェクトが他のオブジェクトと衝突していたかどうかを判断する。ステップＳ１０６において“ＹＥＳ”と判断されたとき、すなわち、前フレームではプレイヤオブジェクトの衝突ないし接触はなく、現フレームにおいてプレイヤオブジェクトと他のオブジェクトとの衝突ないし接触が検出されたとき、ＣＰＵ１１は、次のステップＳ１０７において、ＲＡＭ１４のフラグ・レジスタ領域１４２の増分値ｎ＿ａｄｄを、強い振動を発生させるように、たとえば「２５５」に設定する。
【００５８】
つまり、図１３に示すように、プレイヤオブジェクトが敵オブジェクトに衝突ないし接触した場合、あるいは、図１４に示すように、プレイヤオブジェクトが敵オブジェクトないし静止オブジェクトに衝突ないし接触した場合には、強い振動を発生するために、ステップＳ１０７において、大きい増分値ｎ＿ａｄｄを設定する。
【００５９】
次いで、ステップＳ１０８において、ＣＰＵ１１は、増分値ｎ＿ａｄｄの変化値ｎ＿ａｄｄ＿ｍを「２０」に設定する。他のオブジェクトと衝突ないし接触したときには、強い振動を発生できるように、ステップＳ１０７において増分値ｎ＿ａｄｄを「２５５」にするとともに、ステップＳ１０８において、変化値ｎ＿ａｄｄ＿ｍを「２０」に設定する。変化値ｎ＿ａｄｄ＿ｍの値が大きいと増分値ｎ＿ａｄｄが短い時間で「０」になり、変化値ｎ＿ａｄｄ＿ｍの値が小さいと、増分値ｎ＿ａｄｄが「０」になるまでに長い時間継続する。したがって、変化値ｎ＿ａｄｄ＿ｍが大きいとき、振動源５０７による振動が長時間継続することになる。ステップＳ１０８に続くステップＳ１０９では、ＣＰＵ１１は、前フレームフラグＦ３を「１」に設定する。すなわち、現フレームにおいてプレイヤオブジェクトの当たりが検出されたのであるから、その時点で前フレームフラグＦ３を「１」に設定するのである。
【００６０】
なお、先のステップＳ１０６において“ＮＯ”が検出されると、すなわち前フレームフラグＦ３が「１」であるとき、つまり、前フレームにおいてもプレイヤオブジェクトの衝突ないし接触が検出されているときには、ステップＳ１１０において、増分値ｎ＿ａｄｄを「０」にリセットする。すなわち、前フレームにおいてもプレイヤオブジェクトが他のオブジェクトと接触ないし衝突したときには、継続的な振動の発生を防止するため、ステップＳ１１０において、増分値ｎ＿ａｄｄを「０」とする。
【００６１】
ステップＳ１０２において、プレイヤオブジェクトのアクセルスタートが検出されると、次のステップＳ１１１において、ＣＰＵ１１は、増分値ｎ＿ａｄｄを、弱い振動を発生させるように、たとえば「１５０」に設定する。すなわち、プレイヤオブジェクトのアクセルがスタートされたとき、先の当たり検出の場合と異なり比較的小さい振動を発生するために、カウンタＣＴの増分値ｎ＿ａｄｄをステップＳ１０７より小さい「１５０」に設定する。そして、ステップＳ１１２において、ＣＰＵ１１が、変化値ｎ＿ａｄｄ＿ｍを「１０」に設定する。ステップＳ１１３において、前フレームフラグＦ３を「０」とする。すなわち、このステップＳ１１３は、先のステップＳ１０１において“ＮＯ”と判断されたとき実行されるステップであるから、先のステップＳ１０９とは異なり、前フレームフラグＦ３を「０」とする。
【００６２】
さらに、ステップＳ１０３において、プレイヤオブジェクト、実施例においては「ジェットスキー」が水面に接していることが検出されると、次のステップＳ１１４において、乗算値ｆｘ，ｆｙおよびｆｚを計算する。そして、ステップＳ１１５において、ＣＰＵ１１は、カウンタＣＴの増分値ｎ＿ａｄｄとして、「ｆｘ×ｆｘ＋ｆｙ×ｆｙ＋ｆｚ×ｆｚ」の平方根（小数点以下切り捨て）を計算する。つまり、このステップＳ１１４およびＳ１１５では、プレイヤオブジェクトのＸ軸方向，Ｙ軸方向およびＺ軸方向の加速度ａｘ，ａｙおよびａｚを求め、その加速度に比例した値ｆｘ，ｆｙおよびｆｚを求め、この比例値ないし乗算値に応じて、「０」〜「２５５」の範囲の増分値ｎ＿ａｄｄを計算する。そして、ステップＳ１１６において、増分値ｎ＿ａｄｄの変化値ｎ＿ａｄｄ＿ｍとして、たとえば「１０」を設定する。すなわち、プレイヤオブジェクト「ジェットスキー」が水面に接している場合には比較的長時間衝撃を与えるために、変化値ｎ＿ａｄｄ＿ｍとしては相対的に小さい「１０」を設定する。そして、この場合にも先のステップＳ１０１において“ＮＯ”が判断されたのであるから、続くステップＳ１１７において、前フレームフラグＦ３を「０」にする。
【００６３】
振動発生サブルーチンを示す図１２の最初のステップＳ１２０において、ＣＰＵ１１は、ＲＡＭ１４のフラグ・レジスタ領域１４２の振動ゲームフラグＦ１が「１」であるかどうか、すなわち、現在プレイ内のゲームが振動付加ゲームであるかどうかを判断する。そして、このステップＳ１２０において“ＹＥＳ”が判断されると、ＣＰＵ１１は、ＲＡＭ１４のコントローラデータ領域１４１を参照して、振動カートリッジ５０（図１，図４）がコントローラ４０に装着されているかどうかを判断する。振動ゲームでありかつ振動カートリッジ５０がコントローラ４０に装着されているとき、次のステップＳ１２２において、ＣＰＵ１１は、振動発生条件が成立したにも拘わらず振動を強制的に停止すべきかどうかすなわち振動がリセットされたかどうかを判断する。このステップＳ１２２において“ＮＯ”が判断されると、ＣＰＵ１１は、次のステップＳ１２３において、カウンタＣＴのカウント値ｎを「ｎ＋ｎ＿ａｄｄ」とする。すなわち、カウンタＣＴのカウント値ｎを増分値ｎ＿ａｄｄに従って増加する。
【００６４】
そして、次のステップＳ１２４において、その増分値ｎ＿ａｄｄを、変化値ｎ＿ａｄｄ＿ｍに従って修正する。すなわち、このステップＳ１２４においては、ディスプレイ３０の１フレーム毎に増分値ｎ＿ａｄｄの値を変化値ｎ＿ａｄｄ＿ｍだけ減算するため、カウンタＣＴのカウント値ｎの値の増分値がフレーム毎に小さくなり、やがて、カウント値ｎが増加しなくなる。換言すると、振動源５０７による振動は、最初は大きく（強く）かつ徐々に小さく（弱く）なり、やがて振動しなくなるのである。
【００６５】
そして、ステップＳ１２５においては、カウンタＣＴのカウント値ｎが「２５５」を超えたかどうかを判断する。このステップＳ１２５において“ＹＥＳ”が判断されると、カウンタＣＴのカウント値ｎを「ｎ−２５６」とする。すなわち、ステップＳ１２５において、カウンタＣＴのカウント値ｎが「２５５」を超えたと判断されると、次のステップＳ１２６においては、そのカウント値ｎから「２５６」を減算する。そして、ステップＳ１２７において、ＣＰＵ１１は、振動フラグＦ４を「１」に設定する。先のステップＳ１２５においてカウンタＣＴのカウント値ｎが「２５５」を超えたことが検出されたので、このステップＳ１２７においては、振動フラグＦ４を「１」に設定する。
【００６６】
そして、次のステップＳ１２８においては、振動フラグＦ４が「１」かどうかを判断する。先のステップＳ１２７において、振動フラグＦ４が「１」に設定されていると、振動を発生するために、次のステップＳ１２９において、ＣＰＵ１１は、アドレスＡ１５を除く全てのアドレスＡ２−Ａ１４に「１」を出力するとともに、書込信号を出力し、かつ、チップイネーブル信号を出力する。したがって、このステップＳ１２９において、レコーダないしＮＡＮＤゲート５１１（図６）から信号が出力され、ラッチ５１２がＣＰＵ１１のデータビットＤ０をラッチする。ステップＳ１２９においては、振動源５０７において振動を発生すべきであるので、ＣＰＵ１１のデータビットＤ０は「１」として出力される。したがって、ラッチ５１２（図６）には「１」がラッチされ、応じて、トランジスタ５１４がオンし、振動源ないし振動モータ５０７に電池５０４から電力が供給され、振動源５０７すなわち振動カートリッジ５０、つまりコントローラ４０が振動する。
【００６７】
なお、先のステップＳ１２５において“ＮＯ”が判断されると、ステップＳ１３０において、振動フラグＦ４が「０」にリセットされる。すなわち、カウンタＣＴのカウント値ｎが「２５５」を超えないときには、振動フラグＦ４はリセットされたままである。
そして、ステップＳ１２７において、振動フラグＦ４が「１」でないとき、すなわち振動フラグＦ４が「０」であるときには、ステップＳ１３１において振動を停止するために、ＣＰＵ１１は、データビットＤ０に「０」を出力する。したがって、ラッチ５１２に「０」がラッチされ、トランジスタ５１４がオフする。したがって、振動源５０７には電流が流れず、振動源５０７から振動が発生されることはない。
【００６８】
たとえば、プレイヤオブジェクトが敵オブジェクトや静止オブジェクトに衝突ないし接触した場合（図１３，図１４）、ステップＳ１０７において、カウンタＣＴのカウント値ｎの増分値ｎ＿ａｄｄとして「２５５」が設定されかつステップＳ１０８において、変化値ｎ＿ａｄｄ＿ｍとして「２０」が設定されるため、表１および図１５に示すように、カウンタＣＴのカウント値ｎが最初のフレームを除く４フレーム連続して「２２５」を超えるため、振動源５０７が４フレーム連続して駆動され、その後２フレーム毎にカウント値ｎが「２５５」を超え、振動源５０７は２フレーム毎に駆動される比較的強い振動を発生する。
【００６９】
ところが、プレイヤオブジェクトのアクセルスタートのときには、比較的弱い振動を発生させるために、ステップＳ１１１において増分値ｎ＿ａｄｄとして「１５０」が設定され、ステップＳ１１２において、変化値ｎ＿ａｄｄ＿ｍとして「１０」が設定される。したがって、この場合には、表２および図１６に示すように、２フレーム毎に、カウント値ｎが「２５５」を超えるため、振動源５０７は２フレーム毎に駆動され、そして、次の２フレームは振動を休止し、次の１フレーム振動源５０７を駆動した後、さらに、次の２フレーム振動を休止する。
【００７０】
すなわち、強い振動を発生する場合には、振動源５０７は数フレーム連続して駆動され、その後２フレーム毎に駆動されるように振動が漸減する。弱い振動を発生すべきときには、２フレーム毎に駆動源５０７が駆動され、その後３フレーム毎に駆動されるように振動が漸減する。ただし、増分値ｎ＿ａｄｄや変化値ｎ＿ａｄｄ＿ｍすなわちこのような振動発生パターンは、任意に設定できることはいうまでもない。
【００７１】
なお、第３の振動発生条件すなわち、プレイヤオブジェクト（「ジェットスキー」）が水面に接している場合には、増分値ｎ＿ａｄｄはプレイヤオブジェクトの加速度の関数として設定されるため、その加速度に応じて強い振動または弱い振動が発生される。
【００７２】
【表１】
0003655438.tif 000002
【００７３】
【表２】
0003655438.tif 000003
【００７４】
なお、上述の実施例においては、図１５または図１６に示す強い振動または弱い振動を発生させるために、図１２のフロー図を実行して、カウンタＣＴのカウント値ｎを増分値ｎ＿ａｄｄや変化値ｎ＿ａｄｄ＿ｍに従って変化させ、そのカウント値ｎが「２５５」を超えたとき振動フラグＦ４を「１」に設定して、振動源５０７を駆動するようにしている。つまり、先の実施例では、振動源５０７によって振動を発生させるかどうかはリアルタイムで計算しながら決定した。
【００７５】
これに対して、たとえば図１７に示すように、ＲＡＭ１４のフラグ・レジスタ領域１４２に外部ＲＯＭ２１のプログラム領域２２ａから読み出した強振動パターンデータおよび弱振動パターンデータをそれぞれ記憶しておき、これらの振動パターンデータを選択的に読み出してそれに基づいて振動源５０７を制御するようにしてもよい。なお、強振動パターンデータとしては、先の表１におけるフレーム１〜１６のフレーム順次の振動信号「０１１１１０１０１０００００００」を用いることが考えられる。また、弱振動パターンデータとしては、先の表２におけるフレーム１〜１６のフレーム順次の振動信号「０１０１００１００１００００００」を用いることが考えられる。  なお、必要に応じて、中振動パターンデータも記憶してもよい。
【００７６】
たとえば図１０のステップＳ１０１でプレイヤオブジェクトの衝突ないし接触を検出したときには強振動パターンデータを読み出すと、最初のフレームでは振動源５０７は駆動されず、続く４フレーム連続して振動源５０７が駆動され、その後２フレーム毎に振動源５０７が駆動され、以後振動源５０７の駆動が停止される。たとえば図１０のステップＳ１０２でアクセルスタートを検出したときまたはステップＳ１０３で水面との接触を検出したときには弱振動パターンデータを読み出す。したがって、最初の４フレームでは振動源５０７は２フレーム毎に駆動され、その後３フレーム毎に振動源５０７が駆動され、以後振動源５０７の駆動が停止される。
【００７７】
さらに、上述の実施例では、プレイヤオブジェクトが他のオブジェクトと当たったとき等において、コントローラ４０に装着された振動カートリッジ５０の振動源５０７によって振動を発生させた。この振動と時間的に関連するタイミングで、ゲーム画像に視覚上の振動を付与するようにしてもよい。この場合、ディスプレイ３０上でのゲーム画像の振動はコントローラ４０の振動カートリッジ５０によって生じる機械的振動より早く認識されるので、図９のステップＳ１０で振動カートリッジ５０による機械的振動を発生させた後、１ないし２フレーム以上遅れて、図９のステップＳ４またはステップＳ７によってゲーム画像に振動を付与すればよい。
【００７８】
たとえば図１０のステップＳ１０１でプレイヤオブジェクトの他のオブジェクトとの接触ないし衝突が検出されると、強い振動をゲーム画像上に発生させるために、ディスプレイ３０の表示画面全体を振動させる。この場合、図９のステップＳ４のカメラ処理において、先に述べたカメラの視点座標を小刻みに変化させるようにすればよい。
【００７９】
図１０のステップＳ１０２またはＳ１０３において弱い振動を発生させるべき条件を検出すると、弱い振動をゲーム画像上に発生させるために、ディスプレイ３０に表示されているプレイヤオブジェクト画像にのみ振動を付与する。この場合、図９のステップＳ７の描画処理において、プレイヤオブジェクトを形成する複数のポリゴン集合体の中心座標位置を小刻みに変化させるようにすればよい。
【００８０】
なお、ゲーム画像に振動を付与するかどうかは、図１２のステップＳ１２８によって「Ｆ４＝１」が検出されたかどうかを条件とするようにすればよい。つまり、振動フラグＦ４が「１」のときゲーム画像に振動を付与し、「０」のときにはゲーム画像の振動を発生させない。
【図面の簡単な説明】
【図１】この発明の一実施例のビデオゲームシステムを示す概略図解図である。
【図２】図１のビデオゲーム機を詳細に示すブロック図である。
【図３】図２のコントローラ制御回路をより詳細に示すブロック図である。
【図４】図２のコントローラ制御回路および振動カートリッジを詳細に示すブロック図である。
【図５】振動カートリッジを詳細に示す図解図である。
【図６】振動カートリッジに含まれる振動発生回路を示す回路図である。
【図７】外部ＲＯＭのメモリマップを示す図解図である。
【図８】ＲＡＭのメモリマップを示す図解図である。
【図９】図１実施例の全体の動作を示すフロー図である。
【図１０】振動発生条件検出サブルーチンを示すフロー図である。
【図１１】当たり判定サブルーチンを示すフロー図である。
【図１２】振動発生サブルーチンを示すフロー図である。
【図１３】プレイヤオブジェクトと敵オブジェクトとの衝突を示す図解図である。
【図１４】プレイヤオブジェクトと静止オブジェクトとの衝突を示す図解図である。
【図１５】強く短い振動を発生させる振動パターンを示すグラフである。
【図１６】弱く長い振動を発生させる振動パターンを示すグラフである。
【図１７】この発明の実施例におけるＲＡＭのメモリマップを示す図解図である。
【符号の説明】
１０  …ビデオゲーム機
１１  …ＣＰＵ
１７  …コントローラ制御回路
２０  …ＲＯＭカートリッジ
４０  …コントローラ
５０  …振動カートリッジ
【図１】
0003655438.tif 000004
【図２】
0003655438.tif 000005
【図３】
0003655438.tif 000006
【図４】
0003655438.tif 000007
【図５】
0003655438.tif 000008
【図６】
0003655438.tif 000009
【図７】
0003655438.tif 000010
【図８】
0003655438.tif 000011
【図９】
0003655438.tif 000012
【図１０】
0003655438.tif 000013
【図１１】
0003655438.tif 000014
【図１２】
0003655438.tif 000015
【図１３】
0003655438.tif 000016
【図１４】
0003655438.tif 000017
【図１５】
0003655438.tif 000018
【図１６】
0003655438.tif 000019
【図１７】
0003655438.tif 000020