(57)【特許請求の範囲】
【請求項１】
プレイヤによって、互いに直交するＸＹＺ軸で定義される仮想３次元空間におけるプレイヤオブジェクトの移動方向を指示するため、レバーの横方向の傾斜量と縦方向の傾斜量それぞれに応じた値を出力するジョイスティックを含む操作手段と、プログラムに基づきかつ操作手段の操作に応じて表示画像を変化させかつその表示のための画像データを表示装置に供給する画像処理装置とを有するビデオゲームシステムにおいて、
前記画像処理装置は、
前記ジョイスティックの、前記レバーの横方向の傾斜量と前記縦方向の傾斜量とに基づいて、プレイヤオブジェクトの前記仮想３次元空間における位置を算出する、プレイヤオブジェクト位置算出手段、
前記ＸＹＺ軸の−Ｚ軸方向を視線方向とし、かつ前記プレイヤオブジェクトの位置に基づいて、視線方向の軸上における座標値は、前記プレイヤオブジェクトの位置に基づいて視線方向に対応する軸の座標値よりも大きい値を算出して設定し、視線方向に直交する軸上における座標値は、視点位置のＸ座標値を前記レバーの横方向の傾斜量に応じて、右方向の傾斜量に応じてプラスのＸ座標値を設定し、左方向の傾斜量に応じてマイナスのＸ座標値を設定する値を算出して設定することにより、前記仮想３次元空間における視点位置を算出して設定する、視点位置設定手段、を備え、
前記仮想３次元空間を前記視点位置設定手段で設定された視点位置から前記視線方向を見た画像データを表示装置に供給することを特徴とするビデオゲームシステム。
【請求項２】
プレイヤによって、互いに直交するＸＹＺ軸で定義される仮想３次元空間におけるプレイヤオブジェクトの移動方向を指示するため、レバーの横方向の傾斜量と縦方向の傾斜量それぞれに応じた値を出力するジョイスティックを含む操作手段と、プログラムに基づきかつ操作手段の操作に応じて表示画像を変化させかつその表示のための画像データを表示装置に供給する画像処理装置とを有するビデオゲームシステムをゲーム装置として機能させるゲームプログラムを記憶したビデオゲーム用記憶媒体であって、画像処理装置のコンピュータに、
前記方向指示手段の前記レバーの横方向の傾斜量と、前記縦方向の傾斜量とに基づいて、プレイヤオブジェクトの前記仮想３次元空間における位置を算出する、プレイヤオブジェクト位置算出ステップ、
前記ＸＹＺ軸の−Ｚ軸方向を視線方向とし、かつ前記プレイヤオブジェクトの位置に基づいて、視線方向の軸上における座標値は、視線方向に対応する軸の座標値よりも大きい値を算出して設定し、視線方向に直交する軸上における座標値は、視点位置のＸ座標値を前記レバーの横方向の傾斜量に応じて、右方向の傾斜量に応じてプラスのＸ座標値を設定し、左方向の傾斜量に応じてマイナスのＸ座標値を設定する値を算出して設定することにより、前記仮想３次元空間における視点位置を算出して設定する、視点位置設定ステップ、を実行させ、
画像処理装置が、前記仮想３次元空間を前記視点位置設定ステップで設定された視点位置から見た画像データを表示装置に供給させるゲームプログラムを記憶したビデオゲーム用記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明はビデオゲームシステムおよびビデオゲーム用記憶媒体に関し、特にプレイヤオブジェクトを移動表示しながら敵を倒すシューティングゲームのような、ビデオゲームシステムおよびビデオゲーム用記憶媒体に関する。
【０００２】
【従来の技術】
従来よりビデオゲームには、シューティングゲームがあった。
【０００３】
【発明が解決しようとする課題】
しかしながら、プレイヤがゲームを楽しむときに、画面の見やすさについて配慮されていなかった。
【０００４】
それゆえに、この発明の目的は、画面を見やすくし、かつ照準を敵に合わせやすくすることにより、プレイヤが快適にゲームを楽しむことができるビデオゲームシステム及びビデオゲーム用記憶媒体を提供することである。
【０００５】
【実施例】
次に、この発明のビデオゲームシステムと、それに用いられるビデオゲーム用記憶媒体の構成を説明する。なお、以下の実施例では、ビデオゲーム機専用の場合を説明するが、画像処理装置の他の例として、パーソナルコンピュータ等に適用することもできる。また、操作手段としては、ゲーム専用コントローラの場合を説明するが、本願のビデオゲームシステムがパーソナルコンピュータ等の画像処理装置に適用される場合であれば、キーボードやマウス等の入力装置を用いてもよい。
【０００６】
図１はこの発明の一実施例のビデオゲームシステムの構成を示す外観図である。ビデオゲームシステムは、ビデオゲーム機本体１０と、外部記憶装置の一例のＲＯＭカートリッジ２０と、ビデオゲーム機本体１０に接続される表示装置の一例のＣＲＴディスプレイ３０と、操作手段（又は操作入力手段）の一例のコントローラ４０とを含んで構成される。コントローラ４０には、必要に応じてＲＡＭカートリッジ５０（又は振動カートリッジ５０Ａ）が着脱自在に装着される。
【０００７】
コントローラ４０は、両手又は片手で把持可能な形状のハウジング４１に、複数のスイッチ又はボタンを設けて構成される。具体的には、コントローラ４０は、ハウジング４１の左右と中央のそれぞれの下部にハンドル４１Ｌ，４１Ｃ，４１Ｒが設けられ、その上面を操作領域とする。操作領域には、中央下部にアナログ入力可能なジョイスティック４５が設けられ、左側に十字形のディジタル方向スイッチ（以下「十字スイッチ」という）４６が設けられ、右側に複数のボタンスイッチ４７Ａ〜４７Ｚが設けられる。ジョイスティック４５は、スティックの傾き量と方向によって、プレイヤオブジェクトの移動方向及び／又は移動速度（又は移動量）を指示したり入力するために用いられる。十字スイッチ４６は、ジョイスティック４５に代えてプレイヤオブジェクトの移動方向の指示入力のために用いられる。複数のボタンスイッチ４７には、プレイヤオブジェクトの動作を指示するためのスイッチ４７Ａ，４７Ｂ、カメラから見た画像の視点切換え等に用いられるスイッチ４７Ｃ、スタートスイッチ４７Ｓ、ハウジング４１の左上部側面に設けられる動作スイッチ４７Ｌ、ハウジング４１の右上部側面に設けられる動作スイッチ４７Ｒ、及びハンドル４１Ｃの裏側に設けられるスイッチ４７Ｚを含む。スイッチ４７Ｃは、上下左右に４個のボタンスイッチ４７Ｃｕ，４７Ｃｄ，４７Ｃｌ，４７Ｃｒを配置して成り、カメラの視点切換え以外の用途として、シューティング又はアクションゲームにおいて移動速度のコントロール（例えば、加速，減速等）にも使用できる。これらの複数のボタンスイッチ４７Ａ〜４７Ｚの機能は、ゲームプログラムによって定義することができる。
【０００８】
図２はこの発明の一実施例のビデオゲームシステムのブロック図である。ビデオゲーム機１０には、中央処理ユニット（以下「ＣＰＵ」と略称する）１１及びコプロセッサ（リアリティ・コプロセッサ：以下「ＲＣＰ」と略称する）１２が内蔵される。ＲＣＰ１２には、バスの制御を行うためのバス制御回路１２１と、ポリゴンの座標変換や陰影処理等を行うための画像処理ユニット（リアリティー・シグナル・プロセッサ；以下「ＲＳＰ」と略称する）１２２と、ポリゴンデータを表示すべき画像にラスタライズしかつフレームメモリに記憶可能なデータ形式（ドットデータ）に変換するための画像処理ユニット（リアリティー・ディスプレイ・プロセッサ；以下「ＲＤＰ」と略称する）１２３とが含まれる。ＲＣＰ１２には、ＲＯＭカートリッジ２０を着脱自在に装着するためのカートリッジ用コネクタ１３と、ディスクドライブ２６を着脱自在に装着するためのディスクドライブ用コネクタ１４と、ＲＡＭ１５が接続される。また、ＲＣＰ１２には、ＣＰＵ１１によって処理された音声信号を出力するための音声信号発生回路１６及び画像信号を出力するための画像信号発生回路１７が接続される。さらに、ＲＣＰ１２には、１つ又は複数のコントローラ４０Ａ〜４０Ｄの操作データ及び／又は拡張用ＲＡＭカートリッジ５０のデータをシリアル転送するためのコントローラ制御回路１８が接続される。
【０００９】
ＲＣＰ１２に含まれるバス制御回路１２１は、ＣＰＵ１１からバスを介してパラレル信号で与えられたコマンドをパラレル−シリアル変換して、シリアル信号としてコントローラ制御回路１８に供給する。また、バス制御回路１２１は、コントローラ制御回路１８から入力されたシリアル信号をパラレル信号に変換し、バスを介してＣＰＵ１１へ出力する。コントローラ４０Ａ〜４０Ｄから読み込まれた操作状態を示すデータは、ＣＰＵ１１によって処理されたり、ＲＡＭ１５に一時記憶される等の処理が行われる。換言すれば、ＲＡＭ１５は、ＣＰＵ１１によって処理されるデータを一時記憶する記憶領域を含み、バス制御回路１２１を介してデータの読出又は書込を円滑に行うことに利用される。
【００１０】
音声信号発生回路１６には、ビデオゲーム機１０の後面に設けられるコネクタ１９５が接続される。画像信号発生回路１７には、ビデオゲーム機１０の後面に設けられるコネクタ１９６が接続される。コネクタ１９５には、テレビのスピーカ等の音声発生装置３２の接続部が着脱自在に接続される。コネクタ１９６には、テレビジョン受像機又はＣＲＴ等のディスプレイ３１の接続部が着脱自在に接続される。
【００１１】
コントローラ制御回路１８には、ビデオゲーム機１０の前面に設けられるコントローラ用コネクタ（以下「コネクタ」と略称する）１９１〜１９４が接続される。コネクタ１９１〜１９４には、接続用ジャックを介してコントローラ４０Ａ〜４０Ｄが着脱自在に接続される。このように、コネクタ１９１〜１９４にコントローラ４０Ａ〜４０Ｄを接続することにより、コントローラ４０Ａ〜４０Ｄがビデオゲーム機１０と電気的に接続され、相互間のデータの送受信又は転送が可能とされる。
【００１２】
図３はコントローラ制御回路１８の詳細な回路図である。コントローラ制御回路１８は、ＲＣＰ１２とコントローラ用コネクタ１９１〜１９４との間でデータをシリアルで送受信するために用いられ、データ転送制御回路１８１，送信回路１８２，受信回路１８３及び送受信データを一時記憶するためのＲＡＭ１８４を含む。データ転送制御回路１８１は、データ転送時にデータフォーマットを変換するためにパラレル−シリアル変換回路とシリアル−パラレル変換回路を含み、さらにＲＡＭ１８４の書込み読出し制御を行う。シリアル−パラレル変換回路は、ＲＣＰ１２から供給されるシリアルデータをパラレルデータに変換してＲＡＭ１８４又は送信回路１８２に与える。パラレル−シリアル変換回路は、ＲＡＭ１８４又は受信回路１８３から供給されるパラレルデータをシリアルデータに変換して、ＲＣＰ１２に与える。送信回路１８２は、データ転送制御回路１８１から供給されるコントローラ４０の信号読込制御のためのコマンド及びＲＡＭカートリッジ５０への書込データ（パラレルデータ）をシリアルデータに変換して、複数のコントローラ４０Ａ〜４０Ｄのそれぞれに対応するチャンネルＣＨ１〜ＣＨ４へ送出する。受信回路１８３は、各コントローラ４０Ａ〜４０Ｄに対応するチャンネルＣＨ１〜ＣＨ４から入力される各コントローラ４０Ａ〜４０Ｄの操作状態データ及びＲＡＭカートリッジ５０からの読出データをシリアルデータで受信し、パラレルデータに変換してデータ転送制御回路１８１に与える。データ転送制御回路１８１は、ＲＣＰ１２から転送されたデータ又は受信回路１８３で受信されたコントローラ４０Ａ〜４０Ｄの操作状態データやＲＡＭカートリッジ５０の読出データをＲＡＭ１８４に書込み制御したり、ＲＣＰ１２からの命令に基づいてＲＡＭ１８４のデータを読出してＲＣＰ１２へ転送するように働く。
【００１３】
ＲＡＭ１８４は、図示を省略しているが、記憶エリア１８４ａ〜１８４ｈを含む。エリア１８４ａには第１チャンネル用のコマンドが記憶され、エリア１８４ｂには第１チャンネル用の送信データ及び受信データが記憶される。同様に、エリア１８４ｃには第２チャンネル用のコマンド、エリア１８４ｄには第２チャンネル用の送信データ及び受信データがそれぞれ記憶される。エリア１８４ｅには第３チャンネル用のコマンド、エリア１８４ｆには第３チャンネル用の送信データ及び受信データがそれぞれ記憶される。エリア１８４ｇには第４チャンネル用のコマンド、エリア１８４ｈには第４チャンネル用の送信データ及び受信データがそれぞれ記憶される。
【００１４】
図４はコントローラ４０及びＲＡＭカートリッジ５０の詳細な回路図である。コントローラ４０のハウジングには、ジョイスティック４５，各スイッチ４６，４７等の操作状態を検出しかつその検出データをコントローラ制御回路１８へ転送するために、操作信号処理回路４４等が内蔵される。操作信号処理回路４４は、受信回路４４１，制御回路４４２，スイッチ信号検出回路４４３，カウンタ回路４４４，ジョイポート制御回路４４６，リセット回路４４７及びＮＯＲゲート４４８を含む。受信回路４４１は、コントローラ制御回路１８から送信される制御信号やＲＡＭカートリッジ５０への書込データ等のシリアル信号をパラレル信号に変換して制御回路４４２に与える。制御回路４４２は、コントローラ制御回路１８から送信される制御信号がジョイスティック４５のＸ，Ｙ座標のリセット信号であるとき、リセット信号を発生してＮＯＲゲート４４８を介してカウンタ４４４内のＸ軸用カウンタ４４４ＸとＹ軸用カウンタ４４４Ｙの計数値をリセット（０）させる。
【００１５】
ジョイステック４５は、レバーの傾き方向のＸ軸方向とＹ軸方向に分解して傾き量に比例したパルス数を発生するように、Ｘ軸用とＹ軸用のフォトインタラプトを含み、それぞれのパルス信号をカウンタ４４４Ｘ及びカウンタ４４４Ｙに与える。カウンタ４４４Ｘは、ジョイスティック４５がＸ軸方向に傾けられたとき、その傾き量に応じて発生されるパルス数を計数する。カウンタ４４４Ｙは、ジョイスティック４５がＹ軸方向に傾けられたとき、その傾き量に応じて発生されるパルス数を計数する。従って、カウンタ４４４Ｘとカウンタ４４４Ｙとの計数値によって決まるＸ軸とＹ軸の合成ベクトルによって、プレイヤオブジェクト又は主人公キャラクタ若しくはカーソルの移動方向と座標位置が決定される。なお、カウンタ４４４Ｘ及びカウンタ４４４Ｙは、電源投入時にリセット信号発生回路４４７から与えられるリセット信号、又はプレイヤが所定の２つのスイッチを同時に押圧されたときにスイッチ信号検出回路４４３から与えられるリセット信号によっても、その計数値がリセットされる。
【００１６】
スイッチ信号検出回路４４３は、制御回路４４２から一定周期（例えばテレビジョンのフレーム周期である１／３０秒間隔）で与えられるスイッチ状態の出力コマンドに応答して、十字スイッチ４６，スイッチ４７Ａ〜４７Ｚの押圧状態によって変化する信号を読込み、それを制御回路４４２へ与える。制御回路４４２は、コントローラ制御回路１８からの操作状態データの読出指令信号に応答して、各スイッチ４７Ａ〜４７Ｚの操作状態データ及びカウンタ４４４Ｘ，４４４Ｙの計数値を所定のデータフォーマットで送信回路４４５に与える。送信回路４４５は、制御回路４４２から出力されたパラレル信号をシリアル信号に変換して、変換回路４３及び信号線４２を介してコントローラ制御回路１８へ転送する。制御回路４４２には、アドレスバス及びデータバス並びにポートコネクタ４４９を介してポート制御回路４４６が接続される。ポート制御回路４４６は、ＲＡＭカートリッジ５０がポートコネクタ４４９に接続されているとき、ＣＰＵ１１の命令に従ってデータの入出力（又は送受信）制御を行う。
【００１７】
ＲＡＭカートリッジ５０は、アドレスバス及びデータバスにＲＡＭ５１を接続し、ＲＡＭ５１に電池５２を接続して構成される。ＲＡＭ５１は、アドレスバスを用いてアクセス可能な最大メモリ容量の半分以下の容量（例えば２５６ｋビット）のＲＡＭである。ＲＡＭ５１は、ゲームに関連するバックアップデータを記憶するものであり、ＲＡＭカートリッジ５０がポートコネクタ４４９から抜き取られても電池５２からの電力供給を受けてバックアップデータを保持する。なお、ゲームにおいて衝突又は爆発等の衝撃状態を画像表現したり音声出力する際に、そのような衝撃状態を一層現実に近づけたい場合は、振動発生回路５３を内蔵したＲＡＭカートリッジ５０が用いられるか、ＲＡＭ５１を含まない振動発生回路５２のみからなる振動カートリッジ５０Ａが用いられる。
【００１８】
ＲＯＭカートリッジ２０は、外部ＲＯＭ２１を基板に実装し、その基板をハウジングに収納して構成される。外部ＲＯＭ２１は、ゲーム等の画像処理のための画像データやプログラムデータを記憶するとともに、必要に応じて音楽や効果音やメッセージ等の音声データを記憶するものである。
【００１９】
図５は外部ＲＯＭ２１のメモリ空間の全体を図解的に示したメモリマップであり、図６は外部ＲＯＭ２１のメモリ空間の一部（画像表示データ領域２４）を詳細に示したメモリマップである。外部ＲＯＭ２１は、複数の記憶領域（以下には、「記憶領域」の前にデータの種類名を付ける場合は「領域」と略称する）、例えば図５に示すように、プログラム領域２２，文字コード領域２３，画像データ領域２４及びサウンドメモリ領域２５を含み、各種のプログラムを予め固定的に記憶している。
【００２０】
プログラム領域２２は、ゲーム等の画像処理を行なうために必要なプログラム（後述の図１５〜図３１）に示す各フローチャートの機能を実現するためのプログラムや、ゲーム内容に応じたゲームデータ等）を記憶している。具体的には、プログラム領域２２は、ＣＰＵ１１の動作プログラムを予め固定的に記憶するための記憶領域２２ａ〜２２ｐを含む。メインプログラム領域２２ａには、後述の図１５に示すゲーム等のメインルーチンの処理プログラムが記憶される。コントロールパッドデータ（操作状態）判断プログラム領域２２ｂには、コントローラ４０の操作状態等を示すデータを処理するためのプログラムが記憶される。書込プログラム領域２２ｃには、ＣＰＵ１１がＲＣＰ１２に書込処理させるべきフレームメモリ及びＺバッファへの書込プログラムが記憶される。例えば、書込プログラム領域２２ｃには、１つの背景画面で表示すべき複数の移動ブジェクト又は背景オブジェクトのテクスチュアデータに基づく画像データとして、色データをＲＡＭ１５のフレームメモリ領域（図７に示す１５２）に書き込むプログラムと、奥行データをＺバッファ領域（図７に示す１５３）に書き込むプログラムがそれぞれ記憶される。移動プログラム領域２２ｄには、ＣＰＵ１１がＲＣＰ１２に作用して三次元空間中の移動物体の位置を変化させるための制御プログラムが記憶される。カメラ制御プログラム領域２２ｅには、プレイヤオブシェクトを含む移動オブジェクトや背景オブジェクトを三次元空間中のどの位置でどの方向を撮影させるかを制御するためのカメラ制御プログラムが記憶される。コース選択プログラム領域２２ｆには、後述の図１６に示すコース選択サブルーチンプログラムが記憶される。モード切換プログラム領域２２ｇには、後述の図１７に示すモード切換サブルーチンプログラムが記憶される。記憶領域２２ｇに記憶されるプログラムは、表示モードが一方向スクロールの場合と全方向（オールレンジ）スクロールの場合のスクロールモードを切り換えることによって、スクロール方向やスクロール可能な範囲を切り換えるものである。
通信処理プログラム領域２２ｈには、後述の図１９〜図２１に示す通信処理サブルーチンのプログラムが記憶される。補給処理プログラム領域２２ｉには、後述の図２２〜図２３に示す補給処理サブルーチンのプログラムが記憶される。プレイヤオブジェクトプログラム領域２２ｊには、プレイヤによって操作されるオブジェクトの表示制御のためのプログラムが記憶される。仲間オブジェクトプログラム領域２２ｋには、プレイヤオブジェクトと助け合ってゲームを進行させる仲間オブジェクトの表示制御のためのプログラム（図２４〜図２６参照）が記憶される。敵オブジェクトプログラム領域２２ｌには、プレイヤオブジェクトに対して攻撃を加える敵オブジェクトの表示制御のためのプログラム（図２７及び図２８参照）が記憶される。背景プログラム領域２２ｍには、ＣＰＵ１１がＲＣＰ１２に作用して、三次元の背景画（又はコース）を作成させるための背景作成プログラム（図２９参照）が記憶される。音声処理プログラム領域２２ｎには、効果音や音楽や音声によるメッセージを発生するためのプログラム（図３１参照）が記憶される。ゲームオーバー処理プログラム領域２２ｏには、ゲームオーバーになった場合の処理、例えばゲームオーバー状態の検出やゲームオーバに達したときにそれまでのゲーム状態のバックアップデータの保存処理等のプログラムが記憶される。メッセージ処理プログラム領域２２ｐには、プレイヤオブジェクトの居る場所又は環境等に適した操作をするのに役立つメッセージを文字による表示又は音声による出力を行うために、メッセージ処理（図１９〜図２１の通信処理、図２２，図２３の補給物資の供給処理等を含む処理）のサブルーチンプログラムが記憶される。
【００２１】
文字コード領域２３は、複数種類の文字コードを記憶する領域であって、例えばコードに対応した複数種類の文字のドットデータを記憶している。文字コード領域２３に記憶されている文字コードデータは、ゲームの進行においてプレイヤに説明文を表示するために利用される。この実施例では、プレイヤオブジェクトの居る周囲の環境（例えば、場所，障害物の種類，敵オブジェクトの種類）やプレイヤオブジェクトのおかれている状況に応じて適切な操作方法又は対応方法を適切なタイミングで文字によるメッセージ（又はセリフ）を表示するために使用される。
【００２２】
画像データ領域２４は、図６に示すように、記憶領域２４ａ〜２４ｆを含む。画像データ領域２４は、背景オブジェクト及び／又は移動オブジェクトの各オブジェクト毎に複数のポリゴンの座標データ及びテクスチュアデータ等の画像データをそれぞれ記憶するとともに、これらのオブジェクトを所定の位置に固定的に表示し又は移動表示させるための表示制御プログラムを記憶している。例えば、記憶領域２４ａには、プレイヤオブジェクトを表示するためのプログラムが記憶される。記憶領域２４ｂには、複数の仲間オブジェクト１〜３を表示するための仲間オブジェクトプログラムが記憶される。記憶領域２４ｃには、複数の背景（静止）オブジェクト１〜ｎ１を表示するための背景オブジェクトプログラムが記憶される。記憶領域２４ｄには、複数の敵オブジェクト１〜ｎ２を表示するための敵オブジェクトプログラムが記憶される。記憶領域２４ｅには、ボスオブジェクトを表示するためのボスオブジェクトプログラムが記憶される。記憶領域２４ｆには、例えば後述の図１２に示すセリフ又はメッセージを出力するためのデータが記憶される。
【００２３】
サウンドメモリ領域２５には、場面毎に対応して、その場面に適した上記メッセージを音声で出力するためのセリフや効果音やゲーム音楽等のサウンドデータが記憶される。
【００２４】
なお、外部記憶装置は、ＲＯＭカートリッジ２０に代えて又はＲＯＭカートリッジ２０に加えて、ＣＤ−ＲＯＭや磁気ディスク等の各種記憶媒体を用いてもよい。その場合、ＣＤ−ＲＯＭや磁気ディスク等の光学式または磁気式等のディスク状記憶媒体からゲームのための各種データ（プログラムデータ及び画像表示のためのデータを含む）を読出し又は必要に応じて書込むために、ディスクドライブ（記録再生装置）２６が設けられる。ディスクドライブ２６は、ＲＯＭ２１と同様のプログラムデータが磁気的又は光学的に記憶された磁気ディスク又は光ディスクに記憶されたデータを読出し、そのデータをＲＡＭ１５に転送する。
【００２５】
図７はＲＡＭ１５のメモリ空間全体を図解的に示したメモリマップであり、図８はＲＡＭ１５のメモリ空間の一部（画像表示データ領域１５４）を詳細に示したメモリマップである。ＲＡＭ１５は、各種の記憶領域１５０〜１５９を含む。例えば、ＲＡＭ１５には、表示リスト領域１５０と、プログラム領域１５１と、１フレーム分の画像データを一時記憶するフレームメモリ（又はイメージバッファメモリ）領域１５２と、フレームメモリ領域のドット毎の奥行データを記憶するＺバッファ領域１５３と、画像データ領域１５４と、サウンドメモリ領域１５５と、コントロールパッドの操作状態データを記憶する領域１５６と、作業用（ワーキング）メモリ領域１５７と、仲間データ領域１５８と、レジスタ・フラグ領域１５９とが含まれる。各記憶領域１５１〜１５９は、ＣＰＵ１１がバス制御回路１２１を介して、又はＲＣＰ１２が直接アクセスできるメモリ空間であって、使用されるゲームによって任意の容量（又はメモリ空間）に割り当てられる。また、プログラム領域１５１，画像データ領域１５４，サウンドメモリ領域１５５は、ＲＯＭ２１の記憶領域２２，２４，２５に記憶されている１つのゲームの全場面（又はステージ）のゲームプログラムのうち一部のデータ、例えば或る１つのコース又はステージに必要なゲームプログラムが転送されたとき、対応するデータを一時記憶するものである。このように、ある場面に必要な各種プログラムデータの一部を各記憶領域１５１，１５４，１５５に記憶させておけば、ＣＰＵ１１が必要の生じる毎に直接ＲＯＭ２１から読み出して処理するよりも、ＣＰＵ１１の効率を高めることができ、画像処理速度を高速化できる。
【００２６】
具体的には、フレームメモリ領域１５２は、ディスプレイ３０の画素（ピクセル又はドット）数×１画素当たりの色データのビット数に相当する記憶容量を有し、ディスプレイ３０の画素に対応してドット毎の色データを記憶する。フレームメモリ領域１５２は、画像処理モードにおいて画像データ領域１５４に記憶されている１つの背景画面中に表示すべき静止オブジェクト及び／又は移動オブジェクトの１つ以上のオブジェクトを複数のポリゴンの集合体で表示するための三次元座標データに基づいて、視点位置から見える物体のドット毎の色データを一時記憶するとともに、表示モードにおいて画像データ領域１５４に記憶されているプレイヤオブジェクト，仲間オブジェクト，敵オブジェクト，ボスオブジェクト等の移動オブジェクトと背景（又は静止）オブジェクト等の各種オブジェクトを表示する際にドット毎の色データを一時記憶する。
Ｚバッファ領域１５３は、ディスプレイ３０の画素（ピクセル又はドット）数×１画素当たりの奥行データのビット数に相当する記憶容量を有し、ディスプレイ３０の各画素に対応してドット毎の奥行データを記憶するものである。Ｚバッファ領域１５３は、画像処理モードにおいて静止オブジェクト及び／又は移動オブジェクトの１つ以上のオブジェクトを複数のポリゴンの集合体で表示するための三次元座標データに基づいて視点位置から見える部分のオブジェクトのドット毎に奥行データを一時記憶するとともに、表示モードにおいて移動及び／又は静止の各オブジェクトのドット毎の奥行データを一時記憶する。
画像データ領域１５４は、ＲＯＭ２１に記憶されているゲーム表示のための静止及び／又は移動の各オブジェクト毎に複数の集合体で構成されるポリゴンの座標データおよびテクスチュアデータを記憶するものであって、画像処理動作に先立って少なくとも１コース又はステージ分のデータがＲＯＭ２１から転送される。画像データ領域１５４の記憶データの詳細は、図８を参照して説明する。
サウンドメモリ領域１５５は、ＲＯＭ２１の記憶領域に記憶されている音声データ（セリフ，音楽，効果音のデータ）の一部が転送され、音声発生装置３２から発生される音声のデータとして一時記憶する。
コントロールパッドデータ（操作状態データ）記憶領域１５６は、コントローラ４０から読み込まれた操作状態を示す操作状態データを一時記憶する。
作業用メモリ領域１５７は、ＣＰＵ１１がプログラムを実行中にパラメータ等のデータを一時記憶する。
仲間データ領域１５８は、記憶領域２２ｋに記憶されている仲間オブシェクトの表示制御のためのデータを一時記憶する。
レジスタ・フラグ領域１５９は、複数のレジスタ領域１５９Ｒと複数のフラグ領域１５９Ｆを含む。レジスタ領域１５９Ｒは、プレイヤオブジェクトの本体，左翼（又は羽），右翼のそれぞれのダメージ量をロードするレジスタＲ１〜Ｒ３，仲間のダメージをロードするレジスタＲ４，敵（ボス）のダメージをロードするレジスタＲ５，プレイヤオブジェクト数をロードするレジスタＲ６，プレイヤのライフ数をロードするレジスタＲ７，１画面に表示される敵オブジェクト数をロードするレジスタＲ８，静止オブジェクト数をロードするレジスタＲ９，プレイ中のコースにおける得点をロードするレジスタＲ１０，コース１〜ｎの得点をロードするレジスタＲ１１〜Ｒ１ｎ，合計点をロードするレジスタＲ２０及び最高点をロードするレジスタＲ２１等を含む。フラグ領域１５９Ｆは、ゲーム進行中の状態を知るためのフラグを記憶する領域であり、例えば仲間フラグＦ１，表示範囲のモードを識別するモードフラグＦ２，セリフ１〜ｍの出力の要否を記憶するセリフフラグＦ３１〜Ｆ３ｍ，ゲームオーバーに達した条件の検出の有無を識別するゲームオーバーフラグＦ４及び当たり判定フラグＦ５等を含む。
【００２７】
図９はこの発明が適用される一例のゲームのコースを示す図であり、図１０は図９に示すゲームのコース選択画面を示す図であり、図１１はこの発明が適用される一例のゲーム内容を説明するためのゲームエリアマップを示した図であり、図１２は図１１のゲームにおける仲間との通信処理におけるメッセージ出力内容を図解的に示した図であり、図１３は図１１のゲームにおける仲間との通信処理に基づいて表現されるメッセージ出力の画面表示の一例を示す図であり、図１４は図１１のゲームにおけるボスキャラクタとの対戦状態の画面表示の一例を示す図である。
【００２８】
図９〜図１４を参照して、この発明の特徴となるゲームの進行に役立つメッセージを出力する場合のビデオゲームの概要を説明する。ビデオゲームのゲーム内容は、ＲＯＭ２１に記憶されたプログラムによって決定されるが、実施例ではシューティングゲームの例を示す。ゲームの開始時は、図９に示すコースが表示される。図９において、四角形の外枠の内側は、ディスプレイ３０に表示される映像を示す。コース表示領域８０は、プレイヤが進むべきコースを示している。プレイヤは、まずコース１からゲームを始め、コース１をクリアした後にコース２へ進む。プレイヤは、コース２をクリアすると、コース３又はコース６を選択可能であり、希望のコースを選択する。このように、プレイヤは、行きたいコースを選択しながら、ゴールであるコース５をクリアするためにゲームを行う。また、例えば、コース３をクリアしたときのコース選択画面では、自動的に次のコースとしてコース４が選ばれている。しかし、後に説明するが、次のコースとしてコース４をコース７に変更することができる。クリアコース表示領域８１ａ〜８１ｅは、クリアしたコースを示す部分であり、四角の枠内にクリアしたコースを示す絵や数字等が表示される。図９の例では、クリアコース表示領域８１ａ〜８１ｃに表示物があり、クリアコース表示領域８１ｄ〜８１ｅに表示物がないため、３つのコースをクリアしたことになる。コース点数表示領域８２ａ〜８２ｅは、各コース毎にプレイヤが取得した点数を表示する部分である。点数は、ゲーム中にプレイヤが撃破した敵オブジェクトの数や特定の課題を解決した時等に付与されるように定められる。図示では、１番目，２番目，３番目にクリアしたコースの点数がそれぞれ５０，４８，１０の場合を示している。合計点数表示領域８２は、コース毎の点数を合計した数を表示する領域であり、１０８（＝５０＋４８＋１０）が表示されている。ハイスコア表示領域７３は、これまで行われたゲームの中での最高点を表示する部分である。機体数表示領域７４は、使用可能なプレイヤオブジェクト６０の数を表示する部分であり、あと２つのプレイヤオブジェクト６０が使用可能であることを示している。
【００２９】
ゲームの開始当初は、コース１を選択すると、図１１のスタート点の画面が図１２のように表示される。図１１に示すスタート点からモード切換地点までの長い距離（例えば奥行き座標の単位で１０万；単位は任意）が一方向スクロールモードの表示領域に選ばれる。一方向スクロールモードの表示領域は、ディスプレイ３０の表示画面３１に表示可能な幅が画面サイズと同じに選ばれ、上から下方向へのスクロール表示に使用される。一方向スクロールモードの表示領域では、例えばコース上の背景又は静止物を表す建物，木，山，道路，空等の背景画を構成するオブジェクト（物体）７１ａ〜７１ｎ（図１２参照）が順次表示され、その途中の予め定める場所Ａ〜Ｄにおいて複数の敵オブジェクト７２ａ〜７２ｎが出現してプレイヤオブジェクト６０に攻撃を加えたり、プレイヤオブジェクト６０の進行を妨げる。
一方向スクロールモードにおける表示領域の途中の場所Ａ，Ｂ，Ｃ，Ｄのそれぞれは、敵オブジェクト７２ａ〜７２ｎを撃退したり、攻撃を上手く回避するために、プレイヤに適切な操作方法を知らせたり、プレイヤオブジェクト６０を助けるためのメッセージ（又はセリフ）を表示又は音声によって出力する場所に決められている。そして、図１２に示すように、メッセージが表示領域３１ａに表示され、メッセージを送っている仲間の顔が表示領域３１ｂに表示され、プレイ中の得点が表示領域３１ｃに表示され、プレイヤオブジェクトのライフ（ダメージに耐えられる量）が表示領域３１ｄに表示される。
【００３０】
メッセージの具体例が図１３に図解的に示される。複数のメッセージのうち場所に応じてプログラム的に設定されているメッセージが表示領域３１ａに表示される。このゲームの例では、人物又は登場キャラクタの種類と場所によって異なるセリフを音声と画像で出力し、セリフの発生に関連して仲間からその状況に適した操作方法を知らせるメッセージを表示する場合を示す。また、各セリフ１〜９には優先順位が決められているので、同じタイミングで複数のセリフを発生すべき条件が検出された場合は優先順位の高いセリフを発生する。メッセージの表示に関連して、メッセージを送っている仲間オブジェクト７３の顔が表示される。メッセージは、例えばプレイヤオブジェクト６０を戦闘機と想定した場合の操縦方法（減速を指示する「ブレーキでやりすごせ」のメーセージ）と、その操縦方法を行うためのコントローラ４０のどのスイッチをどのように操作すべきかを知らせる操作方法が表示（４７Ｃｄボタンの押圧を指示する「Ｃボタン下」のメッセージ；好ましくは上下左右に４個ボタンを配置したうちの下のボタンの色表示を異ならせて表示）され、必要に応じてメッセージ表示に併せて音声出力（「ブレーキでやりすごせ」）も行われる。場所Ｃでは、スイッチ４７Ｚ又は４７Ｒを２回押すことを知らせる「ＺかＲの２度押し」のメッセージが発生される。このように、メッセージの内容は、敵オブジェクトの形状や動きの相違により、場所Ａ〜Ｄによって異なる。プレイヤは、ジョイスティク４５を操作して、プレイヤオブジェクト６０の位置又は方向を制御するとともに、スイッチ４７Ａ〜４７Ｚのうちのメッセージ出力に従ったスイッチを操作すれば、スイッチの数が多くて瞬時に適切なスイッチの操作が困難である場合でも、適切な操作を行うことが容易となり、素早く指示された操作をして敵を攻撃したり危険を回避することが容易となり、熟練していないプレイヤでも先の場面まで進むことが容易となる。
【００３１】
プレイヤオブジェクト６０がモード切換地点に到達すると、表示モードが全方向にスクロールの可能なオールレンジモードに切り換えられる。オールレンジモードでは、図１４に示すように、ボスキャラクタ（ボスオブジェクト）を表示可能な範囲の中央に位置させ、プレイヤオブジェクト６０がボスキャラクタ７４の周囲を旋回しながらを攻撃することになる。プレイヤオブジェクト６０が移動可能な範囲は、ボスキャラクタ７４を中心にして上下左右に或る短い距離（例えば１万）に選ばれる。プレイヤオブジェクト６０が移動範囲の境界に近づくと、プレイヤオブジェクト６０を撮影しているカメラの向きを切り換えることにより、プレイヤオブジェクト６０の移動方向が自動的に切り換えられる。このとき、プレイヤオブジェクト６０の居る位置をプレイヤに分かりやすくするために、表示画面３１の右下方のマップ表示領域３１ｃに縮小したマップが表示される。マップには、ボスキャラクタ７４とプレイヤオブジェクト６０と仲間オブジェクト７３の記号が表示される。
【００３２】
図１５はこの発明の一実施例のビデオゲームシステムのメインフローチャートである。次に、図９〜図１５を参照して、図１５のメインフローチャートに沿ってこの発明の原理を簡単に説明する。
電源が投入されると、ＣＰＵ１１はスタートに際してビデオゲーム機１０を所定の初期状態に設定する。例えば、ＣＰＵ１１は、ＲＯＭ２１のプログラム領域に記憶されているゲームプログラムのうちの立ち上げプログラムをＲＡＭ１５のプログラム領域１５１に転送し、各パラメータを初期値に設定した後、図１５のフローチャートの処理を順次実行する。
図１５のフローの動作は、１フレーム（１／３０秒）毎に行われるものであり、コースをクリアするまではステップ１（図示では「Ｓ」を付けて示す），ステップ２，ステップ３〜ステップ１７の動作が行われた後、ステップ３〜ステップ１７の動作が繰り返し行われる。コースクリアに成功することなくゲームオーバになると、ステップ１８のゲームオーバ処理が行われる。コースクリアに成功するとステップ１６からステップ１へ戻る。
【００３３】
すなわち、ステップ１においてゲームのコース画面及び／又はコース選択画面の表示が行われるが、電源投入後にゲームを開始する場合は図９に示すようなコース画面の表示が行われる。なお、図９に示すコース１をクリアしてコース２に進み、コース２もクリアした後は、図１０に示すコース選択画面の表示が行われる。コース選択画面においてコース選択する場合は、図１６に示すコース選択サブルーチンの動作（ステップ１０１〜１１６の動作）が行われるが、その詳細は後述する。
【００３４】
スタート直後はコース１のゲームが行われるので、ステップ２においてそのコースのゲーム開始処理が行われる。例えば、レジスタ領域１５９Ｒ及びフラグ領域１５９Ｆをクリア処理（レジスタＲ６，Ｒ７については初期値を設定）し、コース１（又は選択されたコース）のゲームを行うのに必要な各種データがＲＯＭ２１から読み出されて、ＲＡＭ１５の記憶領域１５１〜１５５に転送される。
【００３５】
ステップ３において、モード切換サブルーチン処理が行われる。ゲームを開始直後はプレイヤオブジェクト６０が図１１のスタート点にいるが、スタート点（Ｚ座標＝０）からモード切換地点（Ｚ座標＝−１０万）までの期間が一方向スクロールモードであるため、図１７のステップ１２１においてプレイヤオブジェクトがオールレンジモード位置にいないことが判断されて、ステップ１２２においてフラグＦ２をリセットして一方向スクロールモードに切り換えた後、次のステップ４へ進む。その詳細な動作は、図１７を参照して後述する。
【００３６】
ステップ４において、コントローラ処理が行われる。この処理は、コントローラ４０のジョイスティック４５，十字スイッチ４６，スイッチ４７Ａ〜４７Ｚの何れが操作されたか否かを検出し、その操作状態の検出データ（コントローラデータ）を読み込み、読み込んだコントローラデータを書込むことによって行われる。その詳細な動作は、図１８を参照して後述する。
【００３７】
ステップ５において、仲間との通信処理が行われる。この処理は、本願発明の特徴となる適切な操作方法を知らせるメッセージの表示又は音声出力として行われる。すなわち、図１１に示す一方向スクロール期間における場所Ａ〜Ｄにおいて、図１３に示すようなメッセージ又はセリフを表示したり、音声で出力することにより、プレイヤに適切な操作方法を知らせる。その詳細な動作の一例は、図１９〜図２１を参照して後述する。なお、メッセージの内容や発生条件は、一例を示すに過ぎず、ゲームの内容又は種類によって異なるので、適宜変更して使用されることを指摘しておく。
【００３８】
ステップ６において、本部から物資の補給処理が行われる。この処理では、プレイヤオブジェクト６０が敵から攻撃を受け、機体にダメージを受けて正常な飛行をできない場合でも、本部又は仲間からプレイヤを支援するためのアイテム（例えば戦闘機の翼を修理する部品や銃器やライフ等）が送られる。そのアイテムが画面に表示されたときに、プレイヤがそれを取得するための操作（アイテムに機体を重ねるか射撃によりアイテムに命中させる等）を行うと、ダメージを受けた部分を元の状態に回復させたり、敵を攻撃するのに有利なアイテムを取得できる。この場合、プレイヤの必要とするアイテムは、プレイヤオブジェクトのダメージ状態によって異なるので、アイテムの種類が予め定める優先順に自動的に決定される。その詳細な動作は、図２２及び図２３を参照して後述する。
【００３９】
ステップ７において、プレイヤオブジェクト６０の表示のための処理が行われる。この処理は、プレイヤオブジェクト６０が一方向スクロール領域とオールレンジ領域の何れに存在するかによって異なるが、基本的にはプレイヤの操作するジョイスティック４５の操作状態と敵からの攻撃の有無に基づいてその向きや形状を変化させる処理である。例えば、プレイヤオブジェクト６０の表示制御は、記憶領域２２ｊから転送されたプログラムと記憶領域２４ａから転送されたプレイヤオブジェクトのポリゴンデータとジョイスティック４５の操作状態とに基づいて、変化後のポリゴンデータを演算によって求める。その結果得られた複数のポリゴンで構成される複数の三角形の面に対応する記憶領域１５４ａの各番地には、テクスチャデータによって指定される模様又は色紙を貼りつけるように、色データが書込まれる。
【００４０】
ステップ８において、カメラ処理が行われる。例えば、カメラのファインダーを通して見たときの視線又は視界がプレイヤの指定したアングルとなるように、各オブジェクトを見た角度の座標演算が行われる。
【００４１】
ステップ９において、仲間オブジャクトの処理が行われる。仲間オブジェクトは、一方向スクロール領域においてプレイヤオブジェクトと所定の位置関係となるように計算され、例えばプレイヤオブジェクト６０の後方を飛んでいるときは表示せず、プレイヤオブジェクト６０が減速したときは前方に飛んでいるように表示するための演算処理が行われる。また、オールレンジ領域においては、仲間オブジェクトがプレイヤオブジェクト６０の前方を飛んでいるときは仲間の機体とともに縮小マップに記号で表示され、後方を飛んでいるときは縮小マップに記号のみが表示される。その詳細は、図２４〜図２６を参照して後述する。
【００４２】
ステップ１０において、敵オブジェクトの処理が行われる。この処理は、記憶領域２２ｌ及び２４ｄから一部転送されたプログラムに基づいて、プレイヤオブジェクト６０の動きを判断しながらプレイヤオブジェクト６０に攻撃を加えたり進行を妨げる動きとなるように、敵オブジェクト７２ａ〜７２ｎの表示位置及び／又はその形状をポリゴンデータの演算によって求めて、変化した画像が表示される。これによって、敵オブジェクトは、プレイヤオブジェクト６０に対して何らかの影響を与えるように働く。その詳細は、図２７及び図２８を参照して後述する。
【００４３】
ステップ１１において、背景（又は静止）オブジェクトの処理が行われる。この処理は、記憶領域２２ｍから一部転送されたプログラムと記憶領域２４ｃから転送された静止オブシェクトのポリゴンデータとに基づいて、静止オブジェクト７１ａ〜７１ｎの表示位置及びその形状を演算によって求める。その詳細は、図２９を参照して後述する。
【００４４】
ステップ１２において、ＲＳＰ１２２が描画処理を行う。すなわち、ＲＣＰ１２は、ＣＰＵ１１の制御の下に、ＲＡＭ１５の画像データ領域１５４に記憶されている敵，プレイヤ，仲間等の移動オブジェクトや背景等の静止オブジェクトのそれぞれのテクスチュアデータに基づいて、移動オブジェクト及び静止オブジェクトの表示処理のための画像データの変換処理（座標変換処理及びフレームメモリ描画処理）を行う。具体的には、複数の移動オブジェクトや静止オブジェクト毎の複数のポリゴンによって構成される各三角形の面に対応する記憶領域１５４ｄの各番地には、各オブジェクト毎に決められたテクスチャデータで指定される色等を貼りつけるために、色データが書込まれる。その詳細は、図３０を参照して後述する。
【００４５】
ステップ１３において、ＲＣＰ１２がメッセージや音楽や効果音等の音声データに基づいて、音声処理を行なう。その詳細は、図３１を参照して後述する。
【００４６】
ステップ１４において、ＲＣＰ１２がステップ１２において描画処理された結果によりフレームメモリ領域１５２に記憶されている画像データを読出し処理することにより、プレイヤオブジェクト，移動オブジェクト，静止オブジェクト，敵オブジェクト等が表示画面３１上に表示される。
【００４７】
ステップ１５において、ＲＣＰ１２がステップ１３において音声処理した結果得られる音声データを読出すことにより、音楽，効果音又は会話等の音声を出力させる。
【００４８】
ステップ１６において、コースをクリアしたか否かが判断（コースクリア検出）され、コースをクリアしていなければステップ１７においてゲームオーバになったか否かが判断され、ゲームオーバでなければステップ３へ戻り、ゲームオーバの条件が検出されるまでステップ３〜１７が繰り返される。そして、プレイヤに許容されているミス回数が所定の回数になるか、プレイヤオブジェクトのライフを所定数量使い切る等のゲームオーバ条件になったことが検出されると、続くステップ１８においてゲームの継続又はバックアップデータの記憶の選択処理等のゲームオーバ処理が行われる。なお、ステップ１６において、コースをクリアした条件（例えは、ボスを倒す等）が検出されると、ステップ１９においてコースクリアの処理をした後、ステップ１へ戻る。ここで、コースクリア処理は、例えば得点レジスタに記憶されている直前にプレイしたコースの得点を対応するコース別得点レジスタにロードさせ、そのコース別得点を図１１のコース別得点として表示させ、さらに複数のコースをクリアしている場合であればその合計得点を求めて表示する。なお、コース別得点の計算では、必要に応じてコースクリアした場合のボーナス得点を加算してもよい。以下には、各サブルーチンの詳細な動作を説明する。
【００４９】
図１６を用いて、本願の特徴となるコース選択（メインルーチンのステップ１）の詳細を説明する。ステップ１０１において、ＣＰＵ１１は、図９のように、各コース毎にプレイヤが取得したＲＡＭ１５のレジスタ領域１５９Ｒに記憶されているコース別得点をコース点数表示領域７２ａ〜７２ｅに表示するための表示処理を行う。具体的には、ＣＰＵ１１が点数を表すための画像データを表示リストに登録する。以下、特に記載がなければ、表示処理とは、画像データを表示リストに登録することをいう。ステップ１０２において、ＣＰＵ１１は、各コースの点数を合計して、合計点を合計点数表示領域７２に表示するための表示処理を行う。ステップ１０３において、ＣＰＵ１１は、使用可能なプレイヤオブジェクト６０の数を機体数表示領域７４に表示するための表示処理を行う。
なお、図１６には図示していないが、ステップ１０１，ステップ１０２およびステップ１０３の表示処理以外に、コース表示処理やハイスコア表示処理等が行われる。コース表示処理は、ＣＰＵ１１が図９のコース表示領域８０に表示されているような画像データを表示リストに登録することである。
ステップ１０４において、ＣＰＵ１１は、スタートスイッチ４７Ｓが押されているか否かを判断する。もし、スタートスイッチ４７Ｓが押されていないならば、ステップ１０５に進む。
ステップ１０５において、ＣＰＵ１１は、ボタンスイッチ４７Ａが押されているか否かを判断する。もし、ボタンスイッチ４７Ａが押されていないならば、毎フレーム行われる画像処理や音声処理を行い、所定の画像をディスプレイ３０に表示し、音声を出力した後、ステップ１０４に戻り、ボタンスイッチ４７Ａが押されているならば、ステップ１１０に進む。
【００５０】
一方、ステップ１０４において、スタートスイッチ４７Ｓが押されているならば、ステップ１０６に進む。ステップ１０６において、ＣＰＵ１１は、図１０のようなコース選択ウインドウ７５の表示処理を行う。コース選択ウインドウ７５には、「コースをすすめる」，「コースをかえる」，「コースをやりなおす」の３つの項目が表示され、どの項目を選択するかを指定するためのカーソル（指示手段）が移動可能に表示される。図１０では、カーソルを矢印で表したが、選択項目の色を反転させたり、絵柄によって項目を指示できるようにしてもよい。
ステップ１０７において、ＣＰＵ１１は、指示手段を上下に移動する移動処理を行う。具体的には、ＣＰＵ１１は、ジョイスティック４５が手前に引かれたか、反対に押されたかを検出し、引かれたら指示手段を下に移動させ、押されたら指示手段を上に移動させる。
ステップ１０８において、ＣＰＵ１１は、ボタンスイッチ４７Ａが押されているか否かを判断する。もし、ボタンスイッチ４７Ａが押されていないならば、毎フレーム行われる画像処理や音声処理を行い、所定の画像をディスプレイ３０に表示し、音声を出力した後、ステップ１０７に戻り、ボタンスイッチ４７Ａが押されているならば、ステップ１０９に進む。
ステップ１０９において、ＣＰＵ１１は、ボタンスイッチ４７Ａが押されたときに、指示手段がどの項目を選択しているかを判断し、選択項目が「コースをすすめる」であるか否かを判断する。もし、選択項目が「コースをすすめる」であるならば、ステップ１１０に進む。
ステップ１１０において、ＣＰＵ１１は、全コースでの仲間オブジェクトのデータをＲＡＭ１５の仲間データ記憶領域１５８に記憶する。仲間オブジェクトのデータは、前回クリアしたコースでの仲間オブジェクトの状態である。本願発明では、仲間オブジェクトは、戦闘中ダメージを多く受けると戦線を離脱するようになっている。仲間オブジェクトは、戦線を離脱した場合、ダメージが多いと次のコースに参加できなくなり、ダメージが少ないと次のコースに参加できる。この次のコースに参加できるか否かの状態が仲間オブジェクトの状態である。
ステップ１１１において、ＣＰＵ１１は、次のコースのための初期設定を行う。例えば、フラグのリセットや各種パラメータの設定や各種表示すべきオブジェクトデータのＲＡＭ１５への読込等である。ステップ１１１が終了すると、メインルーチンに戻り、ステップ２に進む。
【００５１】
一方、ステップ１０９において、選択項目が「コースをすすめる」でなければ、ステップ１１２に進む。ステップ１１２において、ＣＰＵ１１は、選択項目が「コースをかえる」であるか否かを判断する。もし、「コースをかえる」が選択されると、ステップ１１３に進む。ステップ１１３において、ＣＰＵ１１は、図９で示されていた次に進むべきコースとは異なるコースを選択するように設定する。例えば、コース３からコース４に進むように設定されていたのを、コース３からコース７に進むように設定する等である。次に、ステップ１０４に戻る。
【００５２】
一方、ステップ１１２において、選択項目が「コースをかえる」でなければ、ステップ１１４に進む。ステップ１１４において、ＣＰＵ１１は、ＲＡＭ１５のレジスタ領域１５９Ｒに記憶されているプレイヤオブジェクト数を１つ減らす。ステップ１１５において、仲間オブジェクトのデータをＲＡＭの仲間データ記憶領域１５８から読み出す。ステップ１１６において、前回クリアしたコースのための初期設定を行う。ステップ１１１が終了すると、元のルーチンに戻り、ステップ２に進む。
【００５３】
図１７を参照して、モード切換処理（メインルーチンのステップ３）のサブルーチンの動作を説明する。プレイヤオブジェクトが図１１のモード切換地点に到達すると、ステップ１２１においてオールレンジモード位置にいることが判断（又は検出）されて、ステップ１２３においてオールレンジモードのデモストレーション（以下「デモ」という）処理が終了したか否かが判断される。始めはデモ処理の終了していないことが判断され、ステップ１２４においてオールレンジモードのデモ表示のための画像処理が行われ、ステップ１２５においてオールレンジモードのデモ音声の発生のための音声処理が行われた後、前述のステップ１２の描画処理へ進む。
【００５４】
一方、ステップ１２３において、デモ処理の終了したことが判断されると、ステップ１２６においてオールレンジモードへの切換処理（モードフラグＦ２をオールレンジモードに切換）が行われた後、メインルーチンへ戻る。
これによって、一方向スクロールモードからオールレンジモードに切換えられたときに、急に画面のスクロール方向が変化したような違和感を生じさせずに、スクロール範囲を切換えられる利点がある。また、スクロール範囲を切換えることにより、コースの全期間に渡ってスクロール範囲を全範囲とする場合に比べて一方向スクロール期間におけるＣＰＵの負担を軽減でき、コースの全期間に渡って一方向スクロールとする場合に比べて変化に富んだスクロール表示が可能となり、多種多様なゲームの画像表現が可能となり、プレイヤの興趣を一層高められる利点がある。
【００５５】
図１８を参照して、コントローラ処理（ステップ４）のサブルーチンの動作を説明する。ステップ１３１において、コントローラデータの読込要求コマンドがあったか否かが判断され、なければステップ１３１において読込要求コマンドが発生されるのを待つ。読込要求コマンドがあったことが判断されると、ステップ１３２においてコントローラ制御回路１８にコマンドが供給される。これに応じて、コントローラ制御回路１８が各コントローラ４０Ａ〜４０Ｄの操作状態データを読込み処理を行う。ステップ１３３において、コントローラ制御回路１８が全てのコントローラ４０Ａ〜４０Ｄの操作状態データの読込みが終了したか否かが判断されるが、終了していなければするまで待つ。終了したことが検出されると、ステップ１３４において各コントローラ４０Ａ〜４０Ｄの操作状態データがコントローラ制御回路１８からバス制御回路１２１を介してＲＡＭ１５の記憶領域１５６へ書き込まれる。
【００５６】
図１９〜図２１を参照して、仲間との通信処理（ステップ５）のサブルーチンの動作を説明する。ステップ１４１ａにおいて、プレイヤオブジェクトが場所Ａに達したか否かが判断され、場所Ａに達していないことが判断されると、ステップ１４１ｂ，１４１ｃ，１５１ａ，１５１ｂ，１５１ｃ，１５１ｄの処理の後、メインルーチンへ戻る。そして、ステップ１４１ａにおいて、プレイヤオブジェクトが場所Ａに達したことが判断されると、ステップ１４２ａにおいて仲間１が存在するか否かが判断される。第１の仲間が存在する場合は、ステップ１４３ａにおいてセリフ又はメッセージを現在処理中か否かが判断される。セリフの処理中であることが判断されると、セリフフラグＦ３１〜Ｆ３ｎのうちセリフに対応するフラグをオンさせるとともに、複数のセリフのうちの何れか１つを選択する必要があるため、ステップ１４４ａにおいて優先順位の比較が行われる。ステップ１４５ａにおいて、セリフ１の優先順位が現在処理中のセリフよりも高いか否かが判断され、高い場合はステップ１４６ａへ進む。ステップ１４６ａにおいてセリフ１の表示処理が行われる。例えば、セリフ１は第１の仲間からプレイヤオブジェクトに対して場所Ａに出現する敵の攻撃を上手くかわすためのメッセージ（ブレーキでやり過ごせ）であって、その操作方法としてスイッチ４７Ｃの下ボタン（スイッチ４７Ｃｄ）を押すことを指示するメッセージが表示される。ステップ１４７ａにおいて、セリフ１を音声により出力するための処理が行われる。なお、ステップ１４３ａにおいてセリフの処理中でないことが判断されると、優先順位の判断を行う必要がないのでステップ１４６ａへ進み、ステップ１４２ａにおいて第１の仲間のいないこと又はステップ１４５ａにおいて処理中のセリフがセリフ１よりも優先順位の低いことが判断されると、メインルーチンへ戻る。
【００５７】
一方、プレイヤオブジェクトの位置が場所Ａではなく場所Ｂに居ることが判断されると、ステップ１４１ｂ〜１４７ｂの動作が行われる。このステップ１４１ｂ〜１４７ｂは、セリフ２を出力する動作であり、セリフが異なる点を除いてステップ１４１ａ〜１４７ａの動作と同様であるので、対応するステップ番号の後に記号「ａ」に代えて記号「ｂ」で示し、その詳細な説明を省略する。
また、セリフを出力する条件が時間に依存する場合、例えばボスを発見してからの時間Ａに依存する場合は、ステップ１４１ｃにおいて時間Ａであることが判断され、ステップ１４２ｃにおいて第２の仲間が近くにいることが判断されたとき、ステップ１４３ｃ〜１４７ｃの動作が行われる。このステップ１４３ｃ〜１４７ｃは、第２の仲間がボスの倒し方（攻撃方法）を教えるためのメッセージ（図１３のセリフ３）を送る動作であり、仲間とセリフが異なる点を除いてステップ１４２ａ〜１４７ａの動作と同様であるので、その詳細な説明を省略する。
また、セリフを出力する条件として、第３の仲間が敵から狙われている場合は、ステップ１５１ａにおいてそのことが判断されて、ステップ１５２ａ〜１５６ａの動作が行われる。ステップ１５２ａ〜１５６ａは、仲間がボスの倒し方を教えるためのメッセージ（図１３のセリフ５）を出力する動作であり、セリフが異なる点を除いてステップ１４２ａ〜１４６ａの動作と同様である。
また、セリフを出力する条件が第３の仲間を助けた場合は、ステップ１５１ｂにおいてそのことが判断されて、ステップ１５２ｂ〜１５６ｂの動作が行われる。ステップ１５２ｂ〜１５６ｂは、第３の仲間を助けたときにセリフ６を発生する動作であり、セリフが異なる点を除いてステップ１５２ａ〜１５６ａの動作と同様である。
さらに、セリフを出力する条件が敵からの攻撃を受けたプレイヤオブジェクトのセリフ８を出力する場合は、ステップ１５１ｃにおいてそのことが判断されて、ステップ１５２ｃ〜１５６ｃの動作が行われる。セリフを出力する条件がボスを倒したときのセリフ９を出力する場合は、ステップ１５１ｄにおいてそのことが判断されて、ステップ１５２ｄ〜１５６ｄの動作が行われる。
【００５８】
上述のように、プレイヤが適切な操作をするのを助けるためのメッセージ（図１３の例ではセリフ１〜４）を表示又は音声で出力することにより、状況に応じて適切な操作方法のアドバイスを出力すれば、操作方法が難しくてもゲームの進行を容易にし、プレイヤに達成感や満足感を与えることができ、画面又はコースのクリアが容易となる。また、ゲームの場面又は状況に応じて適切なメッセージ（図１３の例ではセリフ５〜９）を表示及び／又は音声による出力を行うことにより、ゲームの進行状況に応じて臨場感に富んだ表現ができ、ゲームの面白さを一層向上できる。
なお、プレイヤが適切な操作をするのを助けるためのメッセージや状況に応じて表示又は音声によって発生されるメッセージは、図１３の実施例に限らず、ゲームの種類や内容によって適宜変更されるので、実施例の記載に限定されるものではない。例えば、各スイッチの操作方法は、説明の簡略化のために、多数のスイッチのうちの何れか１個を押す場合を説明したが、同じスイッチを複数回押すとか、複数のスイッチを予め定める組合せて押すように決めてもよい。
【００５９】
図２２〜図２３を参照して、物資補給処理（ステップ６）のサブルーチンの動作を説明する。プレイヤオブジェクトがアイテムを取得できる所定の場所又は位置に来るまでは、ステップ１６１においてプレイヤオブジェクトが場所に入っていないことが判断され、ステップ１６３においてアイテムを表示する時間（Ｔ１）が設定されていないこと（Ｔ１＝０であること）が判断され、ステップ１７０においてアイテムを取得できる権利を有することを示すマーク（アイテムボックス）を表示する条件になっていないことが判断され、ステップ１７２においてアイテムがセットされていないことが判断された後、メインルーチンへ戻る。その後、メインルーチンの処理がフレーム周期で行われる。
そして、プレイヤオブジェクトがアイテムを取得できる場所に入ると、ステップ１６１においてそのことが判断される。ステップ１６２において、アイテムを取得できる条件であることを知らせるマークの表示時間として、タイマレジスタに一定時間（Ｔ１）がセットされる。ステップ１６３において、時間Ｔ１が０より大きいことが判断され、ステップ１６４において単位時間（例えば１秒）だけ減算（Ｔ１−１）される。ステップ１６５において、プレイヤがアイテムの表示要求スイッチ（例えば４７Ｃｒ）を押せばアイテムを要求できることを示すマークを表示する。ステップ１６６において、アイテム要求のためのスイッチが押されたか否かが判断され、押されていないことが判断されると、ステップ１７０，１７２が行われた後、メインルーチンへ戻る。そして、フレーム周期毎にステップ１６１，１６３〜１６６，１７０，１７２が繰り返されることにより、スイッチ４７Ｃｒが所定時間内に押されるのを待つ。
【００６０】
一方、前述の待機動作の繰り返し中に、ステップ１６６において、表示要求スイッチが押されたことを判断すると、ステップ１６７においてタイマレジスタに０がセット（リセット）され、ステップ１６８において仲間からアイテムの要求を受けたことを表すセリフの出力準備が行われる。このセリフは、ステップ１４及び１５において画像と音声で出力される。ステップ１６９において、アイテムを取得可能な条件を示すマーク（アイテムボックス）を表示するための処理（アイテムセット処理）が行われる。ステップ１７０において、アイテムボックスの表示が可能な条件であることが判断される。ステップ１７１において、アイテムボックスの表示を行うための処理が行われる。ステップ１７２においてアイテムボックスの表示が行われていることを判断したとき、次のステップ１７３においてプレイヤがアイテムボックスを取得するための操作（例えばアイテムボックスを射撃する操作又はプレイヤオブジェクトをアイテムボックスに重ねるように位置を決める操作等）が行われたか否かが判断される。アイテムボックスが取得されたことが判断されると、ステップ１７３〜１８０においてプレイヤオブジェクトの状態に応じて必要とするアイテムを供給するための処理が行われる。例えば、プレイヤオブジェクトがシューティングゲームの戦闘機の場合あれば、ステップ１７４において翼が所定の状態であるか否かが判断され、所定の翼がなければステップ１７５において補給アイテムとして翼が付与される。所定の翼の有る場合は、ステップ１７６においてライフ又はダメージに耐え得る量が一定値（１２８）以下か否かが判断される。以下であることが判断されると、ステップ１７７においてライフを回復させるアイテムが付与される。ライフが一定値（１２８）以下でなければ、ステップ１７８において２つのビーム砲（ツインビーム）があるか否かが判断される。ないことが判断されると、ステップ１７９においてツインビームが付与される。あることが判断されると、ステップ１８０において爆弾が付与される。
このようにして、プレイヤオブジェクトの状態に応じて、プレイヤがゲームを進める上で有効なアイテムが補給されるため、プレイヤはゲームを継続して先の場面又はコースクリアが容易となり、ゲームの達成感又は満足感を得ることが容易となる。また、プレイヤは、実際に戦闘機を操縦しながら指令を受けたり、援助を受けながら飛行をしているような感覚でプレイでき、ゲームの興趣を一層高めることができる。なお、補給されるアイテムは、ゲームの種類やゲーム内容によって異なり、ゲームソフトの開発者ならばこの実施例に記載の技術思想を参考に種々の変更が可能である。
【００６１】
次に、図３２，図３３，３６，３８，３９及び４２のフローチャートを参照して、プレイヤオブジェクト処理のサブルーチンを説明する。先ず、ステップ３０１において、ＣＰＵ１１は、コントロ−ルパッドデータ領域に記憶されているジョイスティックデータを読み出し、そのデータを補正する。具体的には、ジョイスティックの中心部分のデ−タを削除し、スティックが中心付近（例えば、半径１０カウント）に来たときに、データが「０」になるようにする。この様にすれば、スティックの製造上の誤差やプレイヤの指が微妙に震えたときであっても、ジョイスティックデータを正確に「０」にすることができる。また、スティックが動作可能範囲の外周部分の所定範囲も補正している。具体的には、ゲームでは不要な部分のデータを出力しないように補正している。
ステップ３０２において、ＣＰＵ１１は、ゲーム中に使用するジョイスティックデータＸj , Ｙj を求める。ステップ３０１で求められたデータは、カウンタ４４４のカウント値であるので、ゲームで処理し易い値に変換する。具体的に述べると、Ｘj は、スティックを傾けなかった時に「０」になり、−Ｘ軸方向（左方向）に最大に倒した時に「＋６０」になり、＋Ｘ軸方向（右方向）に最大に倒した時に「−６０」になる。Ｙj は、スティックを傾けなかった時に「０」になり、＋Ｙ軸方向（前方向）に最大に倒した時に「＋６０」になり、−Ｙ軸方向（後方向）に最大に倒した時に「−６０」になる。
ステップ３０３において、ＣＰＵ１１は、プレイヤオブジェクトの三次元のゲーム空間中の基本速度Ａs0を設定する。Ａs0は、１フレーム中にプレイヤオブジェクトが進むゲーム空間の距離である。このＡs0は、そのコースや場面に応じて自由に設定可能である。
ステップ３０４において、ＣＰＵ１１は、コントロールパッドデータ領域に記憶されているボタンスイッチＣｌのデータを読み出し、プレイヤがボタンスイッチＣｌを押したか否かを判断する。このボタンスイッチＣｌは、ゲーム中で、プレイヤオブジェクトの進行速度を速めるブーストスイッチとして用いられる。ボタンスイッチＣｌが押されたときは、例えば、プレイヤオブジェクトが飛行機の場合、ジェット噴射が激しくなる等の画像処理が行われ、ジェット音が激しくなる。もし、プレイヤがボタンスイッチＣｌを押していると判断したときは、ステップ３０５に進む。
ステップ３０５において、ＣＰＵ１１は、コントローラの振動発生回路５３に振動発生の信号を与えるための処理を行う。その結果、ボタンスイッチＣｌが押されているときにコントローラが振動し、ボタンスイッチＣｌが押されていないときに振動がとまることとなる。このように、ブースト中にコントローラを振動させると、ゲームの臨場感が高まり、よりプレイヤの興味を引くことができる。
ステップ３０６において、ＣＰＵ１１はＡs ＝Ａs0 + Ａsαの計算を行う。Ａs は、プレイヤオブジェクトの速度であり、Ａsαは、ブースト時のプレイヤオブジェクトの増加速度である。この計算をすることにより、プレイヤオブジェクトの次のフレームでの三次元位置の移動距離が増加することとなる。次に、ステップ３１０に進む。
【００６２】
一方、ステップ３０４において、もしプレイヤがボタンスイッチＣｌを押していないと判断したときは、ステップ３０７に進む。ステップ３０７において、ＣＰＵ１１は、コントロールパッドデータ領域に記憶されているボタンスイッチ４７Ｃｄのデータを読み出し、プレイヤがボタンスイッチ４７Ｃｄを押したか否かを判断する。このボタンスイッチ４７Ｃｄは、ゲーム中にプレイヤオブジェクトの進行速度を遅くするブレーキスイッチとして用いられる。ボタンスイッチ４７Ｃｄが押されたときは、例えば、プレイヤオブジェクトが飛行機の場合、逆噴射をする等の画像処理が行われ、逆噴射音を発生させる。もし、プレイヤがボタンスイッチ４７Ｃｄを押していると判断したときは、ステップ３０８に進む。ステップ３０８において、ＣＰＵ１１はステップ３０５と同様に振動処理を行う。
ステップ３０９において、ＣＰＵ１１は、Ａs ＝Ａs0 - Ａsβの計算を行う。Ａsβは、ブレーキ時のプレイヤオブジェクトの減少速度である。この計算をすることにより、プレイヤオブジェクトの次のフレームでの三次元位置の移動距離が減少することとなる。次に、ステップ３１０に進む。
【００６３】
一方、ステップ３０７において、もし、プレイヤがボタンスイッチ４７Ｃｄを押していないと判断したときは、ステップ３１０に進む。ステップ３１０において、ＣＰＵ１１は、オールレンジモードか否かを判断する。具体的には、ＣＰＵ１１は、ＲＡＭ１５のフラグ領域１５９Ｆのオールレンジモードフラグがオン（セット）かオフ（リセット）であることを検出し、オールレンジモードフラグがセットされているなら現在のゲームモードがオールレンジモードであると判断し、オールレンジモードフラグがリセット状態であるなら現在のゲームモードが一方向スクロールモードであると判断する。もし、オールレンジモードでないと判断したらステップ３２０に進む。
【００６４】
ステップ３２０において、ＣＰＵ１１は次の各計算式の演算を行う。但し、本願明細書では乗算を「* 」で表す。
θx1 = 0.68 * Ｘj
θy1 = 0.68 * Ｙj
Ｘs = - Ａs * sin θx1
Ｚs = - Ａs * cos θx1
Ｙs = - Ａs * sin θy1
ここで、θx1，θy1，Ｘs ，Ｚs ，Ｙs の意味を図３４を参照して具体的に説明する。θx1は、プレイヤオブジェクト６０のＸＺ座標（プレイヤオブジェクト６０を上部から平面視したときの平面の座標系）上におけるＡs の方向ベクトルと−Ｚ軸方向との角度であり、ジョイスティックのスティックを左に倒すと＋方向に増加し、右に倒すと−方向に増加する値である。式よりθx1の値は、スティックの傾斜に比例して、- 40.8 (0.68 * 60) 〜 40.8 (0.68 * (-60))に増減する。プレイヤオブジェクト６０は、Ａs の方向に向かって進行するので、左右に- 40.8 (0.68 * 60) 〜 40.8 (0.68 * (-60))度の範囲で方向転換をすることとなる。例えば、この方向は、プレイヤオブジェクト６０として図３５の様な飛行機を用いた場合に機首の方向、戦車を用いた場合に大砲の方向、動物を用いた場合に顔の方向となる。θy1は、プレイヤオブジェクト６０のＹＺ座標（プレイヤオブジェクト６０を左側部から右に向かって平面視したときの平面の座標系）上におけるＡs の方向ベクトルと−Ｚ軸方向との角度であり、ジョイスティックのスティックを前方に倒すと＋方向に増加し、後方に倒すと−方向に増加する値である。式よりθx1の値は、スティックの傾斜に比例して、- 40.8 (0.68 * 60) 〜 40.8 (0.68 * (-60))に増減する。プレイヤオブジェクト６０は、Ａs の方向に向かって進行するので、上下に- 40.8 (0.68 * 60) 〜 40.8 (0.68 * (-60))度の範囲で方向転換することとなる。Ｘs ，Ｚs およびＹs は、それぞれ、Ａs のＸ軸成分，Ｙ軸成分およびＺ軸成分である。
【００６５】
ステップ３２１において、ＣＰＵ１１は、プレイヤオブジェクト６０の左部分が有るか否かを判断する。この実施例では、プレイヤオブジェクトの一例として飛行機を用いて説明するため、左翼が有るか否かを判断する。なお、プレイヤオブジェクトとして戦車を用いた場合は翼ではなくキャタピラであり、動物を用いた場合は手足となる。もし、プレイヤオブジェクト６０の左部分が有ると判断されたときは、ステップ３２２に進む。ステップ３２２において、ＣＰＵ１１は、プレイヤオブジェクト６０の右部分が有るか否かを判断する。もし、プレイヤオブジェクト６０の右部分が有ると判断されたときは、ステップ３２３に進む。ステップ３２３において、ＣＰＵ１１は次の各計算式の演算を行う。
Ｘa = Ｘa + Ｘs
Ｙa = Ｙa + Ｙs
Ｚa = Ｚa + Ｚs
この計算によって、前フレームの座標（Ｘa ，Ｙa ，Ｚa ）（上記の式の右辺）にプレイヤオブジェクト６０の速度（Ｘs ，Ｙs ，Ｚs ）を加算することとなり、次フレームの座標（Ｘa ，Ｙa ，Ｚa ）（上記の式の左辺）が求められる。次に、図３６のステップ３３０に進む。
【００６６】
一方、ステップ３２１において、プレイヤオブジェクト６０の左部分が無いと判断されたときは、ステップ３２４に進む。ステップ３２４において、ＣＰＵ１１は次の計算式の演算を行う。
Ｘs = Ｘs - 2.5
Ｙs = Ｙs - 2.5
この計算によって、Ｘ軸方向の速度が減算され、かつＹ軸方向の速度が減算される。従って、ゲームを進行させると、プレイヤオブジェクト６０は、画面に向かって左下方向に引っ張られるように表示されることとなる。例えば、スティックを倒さなかった場合でも、プレイヤオブジェクト６０は、画面に向かって左下方向に徐々に移動するように表示されることとなる。
【００６７】
一方、ステップ３２２において、プレイヤオブジェクト６０の右部分が無いと判断されたときは、ステップ３２５に進む。ステップ３２５において、ＣＰＵ１１は次の計算式の演算を行う。
Ｘs = Ｘs + 2.5
Ｙs = Ｙs - 2.5
この計算によって、Ｘ軸方向の速度が加算され、かつＹ軸方向の速度が減算される。従って、ゲームを進行させると、プレイヤオブジェクト６０は、画面に向かって右下方向に引っ張られるように表示されることとなる。例えば、スティックを倒さなかった場合でも、プレイヤオブジェクト６０は、画面に向かって右下方向に徐々に移動するように表示されることとなる。次に、ステップ３２３に進む。
【００６８】
一方、ステップ３１０において、ＣＰＵ１１がオールレンジモードでないと判断したら図３６のステップ３３０に進む。
【００６９】
まず、一方向スクロールモードとオールレンジモードとの違いを述べると、一方向スクロールモードは、図３４のように座標系が１つであるのに対し、オールレンジモードは、図３７のように座標系が２つある。オールレンジモードの夫々の座標系について詳しく述べると、図３７のＸ1 （−Ｚ1 ）座標は、様々なオブジェクトが存在する三次元空間を表すための座標であり、ゲーム実行中常に固定的に設けられている座標である。（本実施例では、「ゲーム空間座標」と呼ぶ。）Ｘ2 （−Ｚ2 ）座標は、プレイヤーオブジェクトが移動することに基づいて変化する座標である。後のカメラ処理で説明するが、- Ｚ2 軸方向がカメラの撮影方向に相当するため、Ｚ2 軸が表示画面に垂直方向を示すことになる。（本実施例では、「プレイヤ座標」と呼ぶ。）プレイヤオブジェクト６０は、このプレイヤ座標において、一方向スクロールモードと略同様の動作をするのである。このように、２つの座標系を用いることにより、一方向スクロールモードのシステムを使用しながら、全方向スクロール可能なオールレンジモードのシステムを構築可能となった。従って、プレイヤは、モードが変化しても操作方法が殆ど変化しないため容易にゲームを楽しむことができる。
【００７０】
ステップ３３０において、ＣＰＵ１１は、次の計算式の演算を行う。
θx1 = 0.68 * Ｘj
θy1 = 0.68 * Ｙj
θx2 = 0.03 * θx1 + θx2 （１フレーム毎に 0.03 * θx1加算）
Ｘs = - Ａs * sin ( θx1 + θx2)
Ｚs = - Ａs * cos ( θx1 + θx2)
Ｙs = - Ａs * sin θy1
θx1，θy1，θx2，Ｘs ，Ｚs ，Ｙs を図３７を参照しながら具体的に説明する。θx1は、プレイヤオブジェクト６０のＸＺ座標（プレイヤオブジェクト６０を上部から平面視したときの平面の座標系）上におけるＡs の方向ベクトルと−Ｚ2 軸方向との角度であり、ジョイスティックのスティックを左に倒すと＋方向に増加し、右に倒すと−方向に増加する値である。
θy1は、プレイヤオブジェクト６０のＹＺ座標（プレイヤオブジェクト６０を左側部から右に向かって平面視したときの平面の座標系）上におけるＡs の方向ベクトルと−Ｚ2 軸方向との角度であり、ジョイスティックのスティックを前方に倒すと＋方向に増加し、後方に倒すと−方向に増加する値である。
θx2は、プレイヤオブジェクト６０のＸＺ座標（プレイヤオブジェクト６０を上部から平面視したときの平面の座標系）上における−Ｚ1 軸方向と−Ｚ2 軸方向との角度であり、毎フレーム、θx1に比例して増減する。すなわち、ジョイスティックのスティックを左に倒すと＋方向に増加し、右に倒すと−方向に増加する値である。式よりθx2の値は、スティックの傾斜に比例して、１フレーム毎に-1.224(=0.03 * 0.68 * (-60))〜 1.224(=0.03 * 0.68 * 60) の範囲で増減する。
Ｘs ，Ｚs およびＹs は、それぞれ、Ａs のゲーム空間座標のＸ軸成分，Ｙ軸成分およびＺ軸成分である。
【００７１】
ステップ３３２において、ＣＰＵ１１は、プレイヤオブジェクト６０の左部分が有るか否かを判断する。もし、プレイヤオブジェクト６０の左部分が有ると判断されたときは、ステップ３３３に進む。
ステップ３３３において、ＣＰＵ１１は、プレイヤオブジェクト６０の右部分が有るか否かを判断する。もし、プレイヤオブジェクト６０の右部分が有ると判断されたときは、ステップ３３４に進む。ステップ３３４において、ステップ３２３と同様にＣＰＵ１１は次の計算式の演算を行う。
Ｘa = Ｘa + Ｘs
Ｙa = Ｙa + Ｙs
Ｚa = Ｚa + Ｚs
この計算によって、前フレームのゲーム空間座標（Ｘa ，Ｙa ，Ｚa ）にプレイヤオブジェクト６０のゲーム空間座標系での速度（Ｘs ，Ｙs ，Ｚs ）を加算することとなり、次フレームのゲーム空間座標（Ｘa ，Ｙa ，Ｚa ）が求められる。次に図３８のステップ３５０に進む。
【００７２】
一方、ステップ３３２において、プレイヤオブジェクト６０の左部分が無いと判断されたときは、ステップ３３５に進む。ステップ３３５において、ＣＰＵ１１は次の計算式の演算を行う。
Ｘs = Ｘs - 2.5 * cos θx2
Ｚs = Ｚs - 2.5 * sin θx2
Ｙs = Ｙs - 2.5
この計算によって、プレイヤ空間でのＸ軸方向の速度が減算され、かつＹ軸方向の速度が減算される。従って、ゲームを進行させると、プレイヤオブジェクト６０は、画面に向かって左下方向に引っ張られるように表示されることとなる。例えば、スティックを倒さなかった場合でも、プレイヤオブジェクト６０は、画面に向かって左下方向に徐々に移動するように表示されることとなる。
【００７３】
次に、ステップ３３３において、プレイヤオブジェクト６０の右部分が無いと判断されたときは、ステップ３３６に進む。ステップ３３６において、ＣＰＵ１１は次の計算式の演算を行う。
Ｘs = Ｘs + 2.5 * cos θx2
Ｚs = Ｚs - 2.5 * sin θx2
Ｙs = Ｙs - 2.5
この計算によって、プレイヤ空間でのＸ軸方向の速度が加算され、かつＹ軸方向の速度が減算される。従って、ゲームを進行させると、プレイヤオブジェクト６０は、画面に向かって右下方向に引っ張られるように表示されることとなる。例えば、スティックを倒さなかった場合でも、プレイヤオブジェクト６０は、画面に向かって右下方向に徐々に移動するように表示されることとなる。次に、ステップ３３４に進む。
【００７４】
なお、図面では、簡略化のために１フレーム毎に、コントローラの角度がプレイヤオブジェクト６０に直接的に反映する様に記載したが、詳しく述べると、 0.68 * Ｘj からθx1を導き出す間にフィルター処理が行われている。同様に 0.68 * Ｙj からθy1を導き出す間にもフィルター処理が行われている。このフィルター処理を具体的に述べると、１フレームで 0.68 * Ｘj の値が即θx1になるのではなく、ＣＰＵ１１が複数フレームに渡って徐々にθx1の値を 0.68 * Ｘj に近づかせ、複数フレームを処理した時にθx1＝ 0.68 * Ｘj にさせる処理である。例えば、 0.68 * Ｘj をＮf （所定の自然数）で除算し、Ｎf フレーム間θx1に 0.68 * Ｘj ／Ｎf を加算し、θx1＝ 0.68 * Ｘj にさせる等の処理である。0.68 * Ｙj からθy1を導き出すフィルター処理も 0.68 * Ｘj からθx1を導き出すフィルター処理と同様である。このフィルター処理によって、プレイヤオブジェクト６０がジョイスティックの急激な操作によって激しく移動し、画面が激しく変化してプレイヤの目に負担をかけたり、プレイヤオブジェクト６０の操作を難しくすることを防止できる。
【００７５】
ステップ３５０において、ＣＰＵ１１は、プレイヤオブジェクト６０の当たり判定を行う。この当たり判定の詳細を図３９のステップ３５１〜ステップ３５４を用いて説明する。ステップ３５１〜ステップ３５４は、標準の当たり判定であり、後述の仲間オブジェクトの当たり判定も同様である。
【００７６】
図３９のステップ３５１において、ＣＰＵ１１は、ＡＢＳ（ＯＢＪ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でないならば、元のルーチンに戻る。
一方、ステップ３５０が終了するとステップ３６０に進む。
【００７９】
ステップ３６０において、ＣＰＵ１１は、プレイヤオブジェクト６０の本体６１の下部に他のオブジェクトが当たったか否かを判断する。具体的には、ＣＰＵ１１がＲＡＭ１５のフラグ領域１５９Ｆにある当たり判定フラグがセットされているか否かを検出する。もし、本体６１の下部に他のオブジェクトが当たったならば、ステップ３６１に進む。ステップ３６１において、ＣＰＵ１１は次の計算式の演算を行う。
Ｒ１＝Ｒ１−４０
Ｒ１は、本体６１の耐えうるダメージの大きさを示すものであり、本実施例では、初期値を２５５とする。計算式より、本体６１の下部がダメージを受けるとＲ１が４０減算され、例えば、７回ダメージを受けるとＲ１＜０になる。ステップ３６２において、ＣＰＵ１１は次の計算式の演算を行う。
Ｒ２（ｏｒ Ｒ３）＝Ｒ２（ｏｒ Ｒ３）−１５
Ｒ２は、左翼６２の耐えうるダメージの大きさを示すものであり、本実施例では、初期値を６０とする。同様に、Ｒ３は、右翼６３の耐えうるダメージの大きさを示すものであり、初期値を６０とする。このステップでは、ランダムに左右を選び、選ばれた方の翼のダメージを大きくする。計算式より、左翼６２または右翼６３がダメージを受けるとＲ２またはＲ３が１５減算され、例えば、４回ダメージを受けるとＲ２（ｏｒ Ｒ３）＝０になる。
【００８０】
ステップ３６３において、ＣＰＵ１１は、プレイヤオブジェクト６０の本体６１の上部に他のオブジェクトが当たったか否かを判断する。もし、本体６１の上部に他のオブジェクトが当たったならば、ステップ３６４に進む。
ステップ３６４において、ＣＰＵ１１は、Ｒ１≦０であるか否かを判断する。換言すると、プレイヤオブジェクト６０のダメージがプレー続行できる程度のものか否かを判断する。もし、Ｒ１≦０でないならば、ステップ３６５に進む。
ステップ３６５において、ＣＰＵ１１は、本体６１を表示リストに登録する。本体６１は、プレイヤオブジェクト６０の中心部分のオブジェクトである。
ステップ３６６において、ＣＰＵ１１は、Ｒ２ andＲ３≦０であるか否かを判断する。換言すると、左翼６２のダメージが左翼を存続できる程度のものであり、かつ右翼６３のダメージが右翼を存続できる程度のものであるか否かを判断する。もし、Ｒ２ and Ｒ３≦０でないならば、ステップ３６７に進む。
ステップ３６７において、ＣＰＵ１１は、Ｒ２≦０であるか否かを判断する。換言すると、左翼６２のダメージが左翼を存続できる程度のものか否かを判断する。もし、Ｒ２≦０でないならば、ステップ３６８に進む。
ステップ３６８において、ＣＰＵ１１は、Ｒ３≦０であるか否かを判断する。換言すると、右翼６２のダメージが右翼を存続できる程度のものか否かを判断する。もし、Ｒ３≦０でないならば、ステップ３６９に進む。
ステップ３６９において、ＣＰＵ１１は、完全な左翼オブジェクト６０Ｌと完全な左翼オブジェクト６０Ｌを表示リストに登録する。この登録により、ディスプレイ３０には、図３５のようなプレイヤオブジェクト６０が表示されることとなる。次に、元のルーチンに戻り、ステップ８へ進む。
【００８１】
一方、ステップ３６６において、Ｒ２ and Ｒ３≦０であるならば、ステップ３７０に進む。ステップ３７０において、ＣＰＵ１１は、左翼６２のない左翼オブジェクト６０Ｌと右翼６３のない右翼オブジェクト６０Ｒを表示リストに登録する。この登録により、ディスプレイ３０には、図４０のような左翼と右翼の一部である左翼６２と右翼６３が無くなったプレイヤオブジェクト６０が表示されることとなる。次に、元のルーチンに戻り、ステップ８へ進む。
【００８２】
一方、ステップ３６７において、Ｒ２≦０であるならば、ステップ３７１に進む。ステップ３７１において、ＣＰＵ１１は、左翼６２のない左翼オブジェクト６０Ｌと完全な右翼オブジェクト６０Ｒを表示リストに登録する。この登録により、ディスプレイ３０には、図４１のような左翼の一部である左翼６２が無く、かつ正常な右翼をもったプレイヤオブジェクト６０が表示されることとなる。次に、元のルーチンに戻り、ステップ８へ進む。
【００８３】
一方、ステップ３６８において、Ｒ３≦０であるならば、ステップ３７２に進む。ステップ３７２において、ＣＰＵ１１は、右翼６３のない右翼オブジェクト６０Ｒと完全な左翼オブジェクト６０Ｌを表示リストに登録する。この登録により、ディスプレイ３０には、図４１のプレイヤオブジェクト６０とは逆に、右翼の一部である右翼６３が無く、かつ正常な左翼をもったプレイヤオブジェクト６０が表示されることとなる。次に、元のルーチンに戻り、ステップ８へ進む。
【００８４】
一方、ステップ３６４において、Ｒ１≦０であるならば、ステップ３７３に進む。ステップ３７３において、ＣＰＵ１１は、プレイヤオブジェクト６０の爆発処理を行う。この爆発処理を実行すると、複数フレームに渡って、他の処理をスキップし、プレイヤオブジェクト６０が爆発するシーンをディスプレイ３０に表示する。その後、ＲＡＭ１５のレジスタ領域１５９Ｒの値を１つ減らし、ステップ１７に進み、ゲームオーバーでなければゲーム空間中の所定の場所からゲームを再開する。
【００８５】
一方、ステップ３６３において、本体６１の上部に他のオブジェクトが当たってなければ、ステップ３７４に進む。
ステップ３７４において、ＣＰＵ１１は、複数フレーム間、プレイヤオブジェクト６０の上方向に向かって移動させるための処理を行う。この処理を行うことにより、プレイヤオブジェクト６０の下部が他のオブジェクトに衝突し、はねとばされるような表現が可能となる。次に、ステップ３６４に進む。
【００８６】
一方、ステップ３６０において、本体６１の下部に他のオブジェクトが当たっていないならば、ステップ３７５に進む。
ステップ３７５において、ＣＰＵ１１は、プレイヤオブジェクト６０の本体６１の上部に他のオブジェクトが当たったか否かを判断する。もし、本体６１の上部に他のオブジェクトが当たったならば、ステップ３７６に進む。ステップ３７６において、ＣＰＵ１１は次の計算式の演算を行う。
Ｒ１＝Ｒ１−４０
ステップ３７７において、ＣＰＵ１１は次の計算式の演算を行う。
Ｒ２（ｏｒ Ｒ３）＝Ｒ２（ｏｒ Ｒ３）−１５
ステップ３７８において、ＣＰＵ１１は、複数フレーム間、プレイヤオブジェクト６０を下方向に向かって移動させるための処理を行う。この処理を行うことにより、プレイヤオブジェクト６０の上部が他のオブジェクトに衝突し、はねとばされるような表現が可能となる。次に、ステップ３６４に進む。
【００８７】
一方、ステップ３７５において、本体６１の上部に他のオブジェクトが当たらなっかたならば、ステップ３８０に進む。ステップ３８０において、ＣＰＵ１１は、プレイヤオブジェクト６０の本体６１と右翼オブジェクト６０Ｒに他のオブジェクトが当たらず、左翼オブジェクト６０Ｌにのみ他のオブジェクトが当たったか否かを判断する。もし、左翼オブジェクト６０Ｌにのみに他のオブジェクトが当たったならば、ステップ３８１に進む。ステップ３８１において、ＣＰＵ１１は次の計算式の演算を行う。
Ｒ２＝Ｒ２−２０
次にステップ３６５に進む。
【００８８】
一方、ステップ３８０において、左翼オブジェクト６０Ｌにのみに他のオブジェクトが当たらなかったならば、ステップ３８２に進む。ステップ３８２において、ＣＰＵ１１は、プレイヤオブジェクト６０の本体６１と左翼オブジェクト６０Ｌに他のオブジェクトが当たらず、右翼オブジェクト６０Ｒにのみ他のオブジェクトが当たったか否かを判断する。もし、右翼オブジェクト６０Ｒにのみに他のオブジェクトが当たったならば、ステップ３８３に進む。
ステップ３８３において、ＣＰＵ１１は次の計算式の演算を行う。
Ｒ３＝Ｒ３−２０
次にステップ３６５に進む。
【００８９】
一方、ステップ３８２において、右翼オブジェクト６０Ｒにのみに他のオブジェクトが当たらなかったならば、ステップ３６５に進む。
【００９０】
次に、プレイヤオブジェクト処理の他の実施例を示す。この実施例は、左翼オブジェクト６０Ｌおよび右翼オブジェクト６０Ｒが、２つの部分で構成されているのではなく、３つの部分で構成されている例である。具体的には、左翼および右翼がそれぞれ３つの部分で構成されており、ダメージによって、外側の部分から破壊され無くなっていくようにディスプレイ３０に表示させる。図３５に示すように、左翼オブジェクト６０Ｌおよび右翼オブジェクト６０Ｒは、左翼６２と左翼６４と右翼６３と右翼６５とを含む、例えば、左翼オブジェクト６０Ｌがダメージを少し受けたとき（例えば、０＜Ｒ２≦３０）に、図４１のように左翼６２がなくなり、多くのダメージを受けたとき（例えば、Ｒ２≦０）に、図４３のように左翼６４がなくなる映像をディスプレイ３０に表示させる。右翼６３と右翼６５も同様の処理を行う。
また、図３３のステップ３２１〜ステップ３２５および図３６のステップ３３２〜ステップ３３６のプレイヤオブジェクト６０の移動制御を左翼オブジェクト６０Ｌおよび右翼オブジェクト６０Ｒの状態により、左右それぞれ２段階にすることにより、より変化に富んだプレイヤオブジェクト６０の移動制御を行える。従って、さらに、プレイヤに対して、ゲームに対する臨場感や達成感を与えられる。
【００９１】
次に、図１５のステップ８のサブルーチンフローチャートである図４４および図４５の詳細な説明をする。ステップ５００において、ＣＰＵ１１は、ＲＡＭ１５のフラグ領域１５９Ｆのオールレンジモードフラグがセットされているか否かを判断する。もし、フラグ領域１５９Ｆのオールレンジモードフラグがセットされていないならば、ステップ５０１に進む。ステップ５０１において、ＣＰＵ１１は次の計算式の演算を行う。
Ｘc = （Ｘa - Ｘ0 ）* 0.8
図３４のように、Ｘc は、プレイヤオブジェクト６０を撮影するカメラのＸ座標位置である。このカメラとは、三次元空間中のオブジェクトをどのようなアングルでディスプレイ３０に表示するかを決定する仮想のカメラである。Ｘ0 は、プレイヤオブジェクト６０が移動しているＸ座標の中心と、三次元空間のＸ座標の原点とがずれているときのずれの値である。主に、コースが分岐しているときに使用する値である。本願実施例では、Ｘ0 を０とする。
ステップ５０２において、ＣＰＵ１１は次の計算式の演算を行う。
Ｙc = （Ｙa - Ｙ0 ）* 0.8
Ｙc は、プレイヤオブジェクト６０を撮影するカメラのＹ座標位置である。Ｙ0は、プレイヤオブジェクト６０が移動しているＹ座標の中心と、三次元空間のＹ座標の原点とがずれているときのずれの値である。主に、コースが分岐しているときに使用する値である。本願実施例では、Ｙ0 を０とする。
ステップ５０３において、ＣＰＵ１１は、プレイヤがボタンスイッチＣｌを押したか否かを判断する。もし、プレイヤがボタンスイッチＣｌを押していない場合は、ステップ５０４に進む。
ステップ５０４において、ＣＰＵ１１は、プレイヤがボタンスイッチ４７Ｃｄを押したか否かを判断する。もし、プレイヤがボタンスイッチ４７Ｃｄを押していない場合は、ステップ５０５に進む。
ステップ５０５において、ＣＰＵ１１は次の計算式の演算を行う。
Ｚc ＝Ｚａ+ ４００
Ｚc は、プレイヤオブジェクト６０を撮影するカメラのＺ座標の値である。従って、Ｚc は、プレイヤオブジェクトの位置からＺ軸方向に４００移動した位置のＺ座標を表す。ステップ５０６において、カメラの撮影方向をスクロール方向に設定する。図３４のように−Ｚ軸方向に設定する。
【００９２】
一方、ステップ５０３において、プレイヤがボタンスイッチＣｌを押している場合は、ステップ５０７に進む。ステップ５０７において、ＣＰＵ１１は次の計算式の演算を行う。
Ｚc ＝（Ｚa ＋ａｂｓ（Ｚα））+ ４００
ａｂｓ（）は、（）内の数値の絶対値を表す。Ｚαは、プレイヤオブジェクト６０がブーストを使用したときに、カメラがプレイヤオブジェクト６０から遠ざかる値である。このように、Ｚc からａｂｓ（Ｚα）を加算すると、プレイヤオブジェクト６０をディスプレイ３０に表示したとき、画面の奥方向に急速に飛んでいったように見える。次に、ステップ５０６に進む。一方、ステップ５０４において、プレイヤがボタンスイッチ４７Ｃｄを押している場合は、ステップ５０８に進む。ステップ５０８において、ＣＰＵ１１は次の計算式の演算を行う。
Ｚc ＝（Ｚa −ａｂｓ（Ｚβ））+ ４００
Ｚβは、プレイヤオブジェクト６０がブレーキを使用したときに、カメラがプレイヤオブジェクト６０に近寄る値である。このように、Ｚc からａｂｓ（Ｚβ）を減算すると、プレイヤオブジェクト６０をディスプレイ３０に表示したとき、画面の手前方向に急速に押し戻されるように見える。次に、ステップ５０６に進む。
【００９３】
一方、ステップ５００において、フラグ領域１５９Ｆのオールレンジモードフラグがセットされているならば、図４５のステップ５１０に進む。ステップ５１０において、ＣＰＵ１１は、プレイヤがボタンスイッチＣｌを押したか否かを判断する。もし、プレイヤがボタンスイッチＣｌを押していない場合は、ステップ５１１に進む。
ステップ５１１において、ＣＰＵ１１は、プレイヤがボタンスイッチ４７Ｃｄを押したか否かを判断する。もし、プレイヤがボタンスイッチ４７Ｃｄを押していない場合は、ステップ５１２に進む。ステップ５１２において、ＣＰＵ１１は次の計算式の演算を行う。
Ｘr ＝２．０＊θx1＊ｃｏｓθx2
Ｚr ＝２．０＊θx1＊ｓｉｎθx2
Ｘc ＝Ｘa ＋４００＊ｓｉｎθx2−Ｘr
Ｚc ＝Ｚa + ４００＊ｃｏｓθx2＋Ｚr
Ｙc ＝０．８＊Ｙa
図３７のように、２．０＊θx1は、カメラをプレイヤ空間でプレイヤオブジェクト６０の後方から（−Ｘ）軸方向にずらせる値である。Ｘr は、プレイヤ空間のＸ座標値をゲーム空間のＸ座標値に変換した値である。Ｚr は、プレイヤ空間のＺ座標値をゲーム空間のＺ座標値に変換した値である。このように、カメラの位置を、プレイヤオブジェクト６０の傾きに比例して、プレイヤオブジェクト６０が傾いている方向に移動させることができる。ディスプレイ３０に表示した例を示すと、図４６のように、プレイヤオブジェクト６０は、真っ直ぐに飛んでいる時は、画面の左右方向の中心に表示される。しかし、図４７のように、プレイヤオブジェクト６０は、左方向に移動すると、画面の左右方向の右に表示される。また、プレイヤオブジェクト６０は、右方向に移動すると画面の左右方向の左に表示される。このように表示すると、照準を敵に合わせやすくなるため、プレイヤは、敵を狙いやすくなり、快適にゲームを楽しむことができる。ステップ５１３において、図３７のように、ＣＰＵ１１は、カメラの撮影方向を−Ｚ2 軸方向に設定する。
【００９４】
一方、ステップ５１０において、プレイヤがボタンスイッチＣｌを押している場合は、ステップ５１４に進む。ステップ５１４において、ＣＰＵ１１は次の計算式の演算を行う。
Ｘr ＝２．０＊θx1＊ｃｏｓθx2
Ｚr ＝２．０＊θx1＊ｓｉｎθx2
Ｘc ＝Ｘa ＋（４００＋ａｂｓ（Ｚα））＊ｓｉｎθx2−Ｘr
Ｚc ＝Ｚa + （４００＋ａｂｓ（Ｚα））＊ｃｏｓθx2＋Ｚr
Ｙc ＝０．８＊Ｙa
次に、ステップ５１３に進む。
【００９５】
一方、ステップ５１１において、プレイヤがボタンスイッチ４７Ｃｄを押している場合は、ステップ５１５に進む。ステップ５１５において、ＣＰＵ１１は次の計算式の演算を行う。
Ｘr ＝２．０＊θx1＊ｃｏｓθx2
Ｚr ＝２．０＊θx1＊ｓｉｎθx2
Ｘc ＝Ｘa ＋（４００−ａｂｓ（Ｚβ））＊ｓｉｎθx2−Ｘr
Ｚc ＝Ｚa ＋（４００−ａｂｓ（Ｚβ））＊ｃｏｓθx2＋Ｚr
Ｙc ＝０．８＊Ｙa
次に、ステップ５１３に進む。
【００９６】
図２４〜図２６を参照して、仲間オブジェクト処理のサブルーチンの動作を説明する。ステップ２０１において第１の仲間がいるか否かが判断され、仲間がいればステップ２０２において第１の仲間オブジェクトの処理が行われる。その後、ステップ２０３において、第２の仲間がいるか否かが判断され、仲間がいればステップ２０４において第２の仲間オブジェクトの処理が行われる。同様に、第３の仲間の有無の判断と第３の仲間オブジェクトの処理がステップ２０５，２０６において行われる。ここで、ステップ２０２，２０４，２０６に示す第１〜第３の仲間オブジェクトの処理は、仲間の種類が異なる点を除いて同じ処理であり、具体的には図２５，図２６のサブルーチン処理（ステップ２１１〜２３０）によって実現される。
【００９７】
すなわち、ステップ２１１において中止処理でないことが判断され、ステップ２１２において第１〜第３の何れかの仲間の移動処理が行われる。ステップ２１３において、敵を攻撃可能な距離内か否かが判断され、攻撃可能な距離内であればステップ２１４において敵オブジェクトに対する攻撃処理（ビーム弾の発射等の演算と表示の処理）が行われる。ステップ２１５においていずれかの仲間が敵に追われているか否かが判断され、追われていることが判断されると、ステップ２１６において敵から攻撃可能な距離内か否かが判断される。敵が攻撃可能な距離内に居るとき、ステップ２１７においてセリフ５（例えば「助けてくれ」）の表示のための処理が行われ、ステップ２１８においてセリフ５の音声出力のための処理が行われる。なお、ステップ２１５および／または２１６において異なる（Ｎｏである）ことが判断されると、ステップ２１９において何れかの仲間オブジェクトがプレイヤオブジェクトに助けられたか否かが判断される。助けられたことが判断されると、ステップ２２０においてセリフ６（例えば「助かったぜ」）の表示のための処理が行われ、ステップ２２１においてセリフ６の音声出力のための処理が行われる。
【００９８】
ステップ２２２において、仲間が敵から攻撃を受けたときの当たり判定（例えば、後述のステップ２５４による攻撃によって仲間に当たったか否かの判定）が行われる。そして、ステップ２２３において敵の弾丸に当たったか否かが判断され、当たった場合はステップ２２４において仲間のダメージを減らす処理（レジスタＲ４の値の減算）が行われる。ステップ２２５において、レジスタＲ４のダメージに耐える量が１００以下か否かが判断され、以上であればステップ２２９へ進み、以下であればステップ２２６へ進む。ステップ２２６において、一定以上のダメージを受けた仲間が戦闘を中止して基地へ帰還するメッセージの表示処理が行われ、その音声出力処理がステップ２２７において行われる。ステップ２２８において戦闘中止処理が終了したか否かが判断され、終了していなければステップ２２９において処理中の仲間オブジェクトを表示リストに登録する処理が行われ、終了していれば仲間フラグＦ１がオフにされた後、メインルーチンへ戻る。
【００９９】
図２７を参照して、敵オブジェクト処理（ステップ１０）のサブルーチンの動作を説明する。ステップ２４１において、敵オブジェクトの数を一時記憶するレジスタＲ５に１が設定される。ステップ２４２においてレジスタＲ５の値に基づいて敵オブジェクトが居ることが判断され、ステップ２４３において何番目かの敵オブジェクトの処理のサブルーチン（後述の図２８）が行われる。その後、ステップ２４４においてレジスタＲ５に１が加算される。ステップ２４５においてプログラムによって設定されている数の全ての敵オブジェクトの表示のための処理が終了したか否かが判断され、全ての処理が終了していなければスイップ２４２へ戻り、ステップ２４２〜２４５の処理が繰り返される。
【０１００】
次に、図２８を参照して、１個の敵オブジェクトの処理の詳細を説明する。ステップ２５１において敵オブジェクトの爆発処理中でないことが判断され、ステップ２５２においてレジスタ（Ｅ）に記憶されている番号の敵オブジェクトの移動処理が行われる。ステップ２５３において、プレイヤオブジェクト又は仲間オブジェクトが射程距離の範囲内か否かが判断される。射程距離内であれば、ステップ２５４において射程距離の範囲に存在するプレイヤオブジェクト又は仲間オブジェクトに対して攻撃を加えるための処理が行われる。
一方、ステップ２５５において、プレイヤオブジェクト又は仲間オブジェクトから敵オブジェクトに対して攻撃を加えた場合の当たり判定が行われる。ステップ２５６において、プレイヤオブジェクト又は仲間オブジェクトの発射したビーム弾が敵オブジェクトに命中したか否かが判断される。命中したことが検出されると、ステップ２５７において打たれた敵オブジェクトのダメージ量を減らす処理（レジスタＲ５から１を減算）及びプレイヤに得点を付与する処理（レジスタＲ１０の値に倒した敵によって決められた得点を加算する処理）が行われる。ステップ２５８において、ダメージ量が０又は０以下になった（Ｒ５≦０）か否かが判断される。以下でなければ（Ｒ５＞０のとき）、ステップ２６１において処理中の敵オブジェクトが表示リストに登録される。逆に、以下のとき（Ｒ５≦０のとき）は、ステップ２５９において敵オブジェクトを爆発させて消滅させるための処理が行われる。ステップ２６０において爆発処理の終了したことが判断されると、ステップ２６２においてプレイヤオブジェクトから攻撃を受けた敵オブジェクトのフラグをオフさせた後、メインルーチンへ戻る。
【０１０１】
次に、図２８の敵オブジェクト処理のステップ２５５を詳細に表したフローチャートを図４８に示す。
従来のゲーム機では、敵の当たり判定の範囲は固定であった。そのため、プレイヤが敵を攻撃しても、遠くに存在する敵が小さすぎる為に、攻撃がなかなか当たらなかった。そのため、ゲームが不当に難解になり、プレイヤの意欲が削がれることがあった。これに対して、本願の敵当たり判定は、敵オブジェクトの当たり判定範囲を敵オブジェクトとプレイヤオブジェクト６０との距離に比例して大きくしている。そのため、プレイヤは、敵オブジェクトが遠くにいても、攻撃を命中させることが可能となった。従って、本願発明によって、ゲームを不当に難解にすることを防ぎ、プレイヤが適切な難易度でプレーでき、プレイヤがより意欲的にゲームをプレイ可能となった。
【０１０２】
ステップ６００において、ＣＰＵ１１は、
ＲＡＤ＝（ｓｑｒｔ（（ＯＢＪ2x−ＯＢＪ1x）＾２＋（ＯＢＪ2y−ＯＢＪ1y）＾２＋（ＯＢＪ2z−ＯＢＪ1z）＾２）／５０
を計算する。ＲＡＤは、当たり判定を行う２つのオブジェクト間の距離に比例して大きくなる数値である。ｓｑｒｔ（）は、（）内の平方根を表す関数である。記号「＾」は、前に記載した数値に後に記載した数値だけ乗算する記号である。従って、＾２は、二乗を示す。記号「／」は、除算を示す。ＯＢＪ1 は、当たり判定をする対象物のオブジェクトであり、ここでは、敵オブジェクトのことである。ＯＢＪ2 は、ＯＢＪ1 に向かって近づいてくるオブジェクトであり、ここでは、プレイヤオブジェクト６０が発射したレーザーオブジェクト等の攻撃オブジェクトのことである。ＯＢＪ2 がプレイヤオブジェクト６０，仲間オブジェクト，静止オブジェクトまたは仲間オブジェクトが発射した攻撃オブジェクトの場合の当たり判定は、図３９と同様の処理が行われる。
ステップ６０１において、ＣＰＵ１１は、ＲＡＤ＞２００か否かを判断する。もし、ＲＡＤ＞２００でなければ、ステップ６０２に進む。
ステップ６０２において、ＣＰＵ１１は、ＡＢＳ（ＯＢＪ2x−ＯＢＪ1x）≦ＯＢＪ1r＋ＲＡＤであるか否かを判断する。もし、ＡＢＳ（ＯＢＪ2x−ＯＢＪ1x）≦ＯＢＪ1r＋ＲＡＤであるならば、ステップ６０３に進む。
ステップ６０３において、ＣＰＵ１１は、ＡＢＳ（ＯＢＪ2y−ＯＢＪ1y）≦ＯＢＪ1r＋ＲＡＤであるか否かを判断する。もし、ＡＢＳ（ＯＢＪ2y−ＯＢＪ1y）≦ＯＢＪ1r＋ＲＡＤであるならば、ステップ６０４に進む。
ステップ６０４において、ＣＰＵ１１は、ＡＢＳ（ＯＢＪ2z−ＯＢＪ1z）≦ＯＢＪ1r＋ＲＡＤであるか否かを判断する。もし、ＡＢＳ（ＯＢＪ2z−ＯＢＪ1z）≦ＯＢＪ1r＋ＲＡＤであるならば、ステップ６０５に進む。
ステップ６０５において、ＣＰＵ１１は、ＯＢＪ2 とＯＢＪ1 とが当たったと判断し、ＲＡＭ１５のフラグ領域に当たり判定フラグをセットする。次に元のルーチンに戻る。
【０１０３】
一方、ステップ６０２において、ＡＢＳ（ＯＢＪ2x−ＯＢＪ1x）≦ＯＢＪ1r＋ＲＡＤでないならば、元のルーチンに戻る。
一方、ステップ６０３において、ＡＢＳ（ＯＢＪ2y−ＯＢＪ1y）≦ＯＢＪ1r＋ＲＡＤでないならば、元のルーチンに戻る。
一方、ステップ６０４において、ＡＢＳ（ＯＢＪ2z−ＯＢＪ1z）≦ＯＢＪ1r＋ＲＡＤでないならば、元のルーチンに戻る。
【０１０４】
一方、ステップ６０１において、ＲＡＤ＞２００であれば、ステップ６０６に進む。ステップ６０６において、ＣＰＵ１１は、ＲＡＤ＝２００を計算する。なぜ、このようにＲＡＤを２００を越えないようにするのかを述べると、敵オブジェクトがプレイヤオブジェクト６０から極端に遠いにも関わらず、簡単に当たり判定されることを防ぐためである。もし、ＲＡＤに上限を設定しなかった場合、画面上で判別できないくらい小さな敵オブジェクトにプレイヤオブジェクト６０から放たれた攻撃オブジェクトが命中することとなり、リアル感が失われてしまう。
【０１０５】
図２９を参照して、静止オブジェクト処理（ステップ１１）のサブルーチンの動作を説明する。ステップ２７１において、静止オブジェクトレジスタ（Ｒ９）に１が設定される。ステップ２７２において、レジスタ（Ｒ９）によって特定される静止オブジェクトが表示リストに登録される。ステップ２７３において、レジスタＲ９に１が加算される。ステップ２７４においてプログラムによって設定されている数の全ての静止オブジェクトの表示のための処理が終了したか否かが判断され、全ての処理が終了していなければスイップ２７２へ戻り、ステップ２７２〜２７４の処理が繰り返される。全ての処理が終了すると、メインルーチンへ戻る。
【０１０６】
図３０を参照して、描画処理（ステップ１２）のサブルーチンの動作を説明する。ステップ２８１において、座標変換処理が行われる。座標変換処理は、ＲＣＰ１２の制御の下に、ＲＡＭ１５の画像データ領域１５４に記憶されている敵，プレイヤ，仲間等の移動オブジェクトや背景等の静止オブジェクトのそれぞれの複数のポリゴンの座標データを、カメラの視点座標に変換することによって行われる。具体的には、カメラの視点から見た画像となるように、複数の移動オブジェクトや静止オブジェクトを構成する各ポリゴンデータが絶対座標からカメラ座標のデータに変換するための演算が行われる。ステップ２８２において、フレームメモリに描画処理が行われる。この処理は、カメラ座標に変換後のポリゴン座標によって囲まれる各オブジェクトを構成するある１つの三角形の面に、テクスチュアデータに基づいて決定される色データをイメージバッファ領域１５２のドット毎に書込むことによって行われる。このとき、各ポリゴン毎の奥行きデータに基づいて、手前（近く）にあるオブジェクトが優先的に表示されるように、近くのオブジェクトの色データを書込み、それに併せて色データを書き込んだドットに対応する奥行データがＺバッファ領域１５３の対応の番地に書き込まれる。その後メインルーチンへ戻る。
このステップ２８１及び２８２の動作は、フレーム毎に一定時間内で行われるが、１画面に表示すべき複数のオブジェクトのそれぞれを構成するポリゴン毎に順次処理され、かつ１画面に表示すべき全てのオブジェクトの処理が終了するまで繰り返して行われる。
【０１０７】
図３１を参照して、音声処理（ステップ１３）のサブルーチンの動作を説明する。ステップ２９１において音声フラグがオンされているか否かが判断される。オンされていることが判断されると、ステップ２９２において出力する音声データが選択される。ステップ２９３において、選択された音声データが読出し処理された後、メインルーチンへ戻る。なお、読み出されたメッセージの音声データは、音声発生回路１６によってディジタル−アナログ変換され、音声として出力される。
【０１０８】
【発明の効果】
以上のように、この発明によれば、照準を敵に合わせやすくなるため、プレイヤは、敵を狙いやすくなり、快適にゲームを楽しむことができる。
【０１０９】
【図面の簡単な説明】
【図１】この発明の一実施例のビデオゲームシステムの構成を示す外観図である。
【図２】この発明の一実施例のビデオゲームシステムのブロック図である。
【図３】コントローラ制御回路１８の詳細な回路図である。
【図４】コントローラ４０のブロック図である。
【図５】外部ＲＯＭ２１のメモリ空間全体を図解的に示したメモリマップである。
【図６】外部ＲＯＭ２１のメモリ空間の一部を詳細に示したメモリマップである。
【図７】ＲＡＭ１５のメモリ空間全体を図解的に示したメモリマップである。
【図８】ＲＡＭ１５のメモリ空間の一部を詳細に示したメモリマップである。
【図９】この発明が適用される一例のゲームのコースを示す図である。
【図１０】図１０に示すゲームのコース選択画面を示す図である。
【図１１】この発明が適用される一例のゲーム内容を説明するためのゲームエリアマップを示した図である。
【図１２】図１１のゲームにおける仲間との通信処理におけるメッセージ出力内容を図解的に示した図である。
【図１３】図１１のゲームにおける仲間との通信処理に基づいて表現されるメッセージ出力の画面表示の一例を示す図である。
【図１４】図１１のゲームにおけるボスキャラクタとの対戦状態の画面表示の一例を示す図である。
【図１５】この発明の一実施例のゲーム処理のメインフローチャートである。
【図１６】コース選択画面の詳細な処理を示すサブルーチンフローチャートである。
【図１７】モード切換えの詳細な処理を示すサブルーチンフローチャートである。
【図１８】コントローラ制御回路１８とビデオゲーム機本体とのデータ転送を説明するためのフローチャートである。
【図１９】ゲームの進行を助けるメッセージ出力処理の一例であって、仲間との通信処理のサブルーチンフローチャートである。
【図２０】ゲームの進行を助けるメッセージ出力処理の一例であって、仲間との通信処理のサブルーチンフローチャートである。
【図２１】ゲームの進行を助けるメッセージ出力処理の一例であって、仲間との通信処理のサブルーチンフローチャートである。
【図２２】ゲームの進行を助けるメッセージ出力処理の他の例であって、補給物資の供給処理のサブルーチンフローチャートである。
【図２３】ゲームの進行を助けるメッセージ出力処理の他の例であって、補給物資の供給処理のサブルーチンフローチャートである。
【図２４】仲間オブジェクト処理のサブルーチンフローチャートである。
【図２５】仲間オブジェクト処理のサブルーチンフローチャートである。
【図２６】仲間オブジェクト処理のサブルーチンフローチャートである。
【図２７】敵オブジェクト処理のサブルーチンフローチャートである。
【図２８】図２７の敵オブジェクト処理に含まれる一部ステップの動作を詳細に示したサブルーチンフローチャートである。
【図２９】静止オブジェクト処理のサブルーチンフローチャートである。
【図３０】描画処理のサブルーチンフローチャートである。
【図３１】音声処理のサブルーチンフローチャートである。
【図３２】プレイヤオブジェクト処理のサブルーチンフローチャートである。
【図３３】プレイヤオブジェクト処理のサブルーチンフローチャートである。
【図３４】一方向スクロールモードの三次元空間のＸ（−Ｚ）座標である。
【図３５】プレイヤオブジェクト６０の外観図である。
【図３６】プレイヤオブジェクト処理のサブルーチンフローチャートである。
【図３７】オールレンジモードの三次元空間のＸ（−Ｚ）座標である。
【図３８】プレイヤオブジェクト処理のサブルーチンフローチャートである。
【図３９】当たり判定処理のサブルーチンフローチャートである。
【図４０】両翼の一部が無くなったプレイヤオブジェクト６０の外観図である。
【図４１】左翼の一部が無くなったプレイヤオブジェクト６０の外観図である。
【図４２】プレイヤオブジェクト処理のサブルーチンフローチャートである。
【図４３】左翼の一部がより大きく無くなったプレイヤオブジェクト６０の外観図である。
【図４４】カメラ処理のサブルーチンフローチャートである。
【図４５】カメラ処理のサブルーチンフローチャートである。
【図４６】プレイヤオブジェクト６０の画面表示の一例を示す図である。
【図４７】プレイヤオブジェクト６０の画面表示の他の一例を示す図である。
【図４８】敵オブジェクトの当たり判定処理のサブルーチンフローチャートである。
【符号の説明】
１０・・・ビデオゲーム機
１１・・・ＣＰＵ（中央処理装置）
１２・・・ＲＣＰ
１５・・・ＲＡＭ（一時記憶メモリ）
１８・・・コントローラ制御回路
２０・・・ＲＯＭカートリッジ
２１・・・ゲームプログラムを記憶したＲＯＭ
３０・・・表示装置
３１ａ・・メッセージ表示領域
３１ｃ・・得点表示領域
４０・・・コントローラ
４４・・・操作信号処理回路
４５・・・ジョイスティック
５０・・・ＲＡＭカートリッジ
５１・・・ＲＡＭ（書込読出し可能な記憶メモリ）
６０・・・プレイヤオブジェクト
【図１】
0003640384.tif 000002
【図２】
0003640384.tif 000003
【図３】
0003640384.tif 000004
【図４】
0003640384.tif 000005
【図５】
0003640384.tif 000006
【図６】
0003640384.tif 000007
【図７】
0003640384.tif 000008
【図８】
0003640384.tif 000009
【図９】
0003640384.tif 000010
【図１０】
0003640384.tif 000011
【図１１】
0003640384.tif 000012
【図１２】
0003640384.tif 000013
【図１３】
0003640384.tif 000014
【図１４】
0003640384.tif 000015
【図１５】
0003640384.tif 000016
【図１６】
0003640384.tif 000017
【図１７】
0003640384.tif 000018
【図１８】
0003640384.tif 000019
【図１９】
0003640384.tif 000020
【図２０】
0003640384.tif 000021
【図２１】
0003640384.tif 000022
【図２２】
0003640384.tif 000023
【図２３】
0003640384.tif 000024
【図２４】
0003640384.tif 000025
【図２５】
0003640384.tif 000026
【図２６】
0003640384.tif 000027
【図２７】
0003640384.tif 000028
【図２８】
0003640384.tif 000029
【図２９】
0003640384.tif 000030
【図３０】
0003640384.tif 000031
【図３１】
0003640384.tif 000032
【図３２】
0003640384.tif 000033
【図３３】
0003640384.tif 000034
【図３４】
0003640384.tif 000035
【図３５】
0003640384.tif 000036
【図３６】
0003640384.tif 000037
【図３７】
0003640384.tif 000038
【図３８】
0003640384.tif 000039
【図３９】
0003640384.tif 000040
【図４０】
0003640384.tif 000041
【図４１】
0003640384.tif 000042
【図４２】
0003640384.tif 000043
【図４３】
0003640384.tif 000044
【図４４】
0003640384.tif 000045
【図４５】
0003640384.tif 000046
【図４６】
0003640384.tif 000047
【図４７】
0003640384.tif 000048
【図４８】
0003640384.tif 000049