本発明の実施例について以下の順序で説明する。本実施例では、パチンコ機としての構成例を示すが、遊技機は、回胴式遊技機としてもよい。
A.遊技機の構成:
B.制御用ハードウェア構成:
C.図柄制御基板:
D.VDPの構成例:
E.表示制御処理:
F.描画処理:
G.描画コマンド出力処理:
H1.変形例(1):
H2.変形例(2):
A.遊技機の構成:
図1は実施例としてのパチンコ機1の正面図である。パチンコ機1は、中央に遊技領域6を備えた遊技盤4が取り付けられている。遊技者は、ハンドル8を操作して遊技領域6内に遊技球を打ち込み、入賞口に入賞させる遊技を行うことができる。入賞口の一つである始動入賞口9に遊技球が入賞すると、パチンコ機1は抽選を行い、その結果に応じて「大当り」か否かが決まる。大当り発生時には、大入賞口10が所定期間開放するなどの大当り遊技が行われる。
上述の抽選の結果は、4つのランプで構成された特別図柄表示装置41に表示される。遊技領域6の中央には、LCD16が備えられており、遊技中に種々の演出画面(装飾図柄と呼ぶこともある)が表示される。始動入賞口9への入賞時、大当りの発生時などにも、それぞれ遊技の状態に応じた演出画面が表示される。装飾図柄は、遊技の状況に応じて種々変化する。抽選結果を表示する過程で、大当りが発生する可能性が高いリーチ状態になると、スピード感あふれる画面が表示され、遊技者をハラハラドキドキさせることによって興趣を高めるようになっている。
B.制御用ハードウェア構成:
図2はパチンコ機1の制御用ハードウェア構成を示すブロック図である。パチンコ機1は、メイン制御基板3、払出制御基板25、サブ制御基板35、図柄制御基板30などの各制御基板の分散処理によって制御される。メイン制御基板3、払出制御基板25、サブ制御基板35は、それぞれ内部にCPU、RAM、ROMなどを備えたマイクロコンピュータとして構成されており、ROMに記録されたプログラムに従って種々の制御処理を実現する。
実施例のパチンコ機1では、種々の不正を防止するため、メイン制御基板3への外部からの入力が制限されている。メイン制御基板3とサブ制御基板35とは単方向のパラレル電気信号で接続されており、メイン制御基板3と払出制御基板25とは、制御処理の必要上、双方向シリアル電気信号で接続されている。払出制御基板25、サブ制御基板35は、それぞれメイン制御基板3からのコマンドに応じて動作する。図柄制御基板30は、サブ制御基板35からのコマンドに応じて動作する。パチンコ機1には、メイン制御基板3が直接に制御する機構もある。図中には、メイン制御基板3が制御する装置の一例として、大入賞口10を駆動するための大入賞口ソレノイド18、および特別図柄表示装置41を例示した。メイン制御基板3は、この他にも、普通図柄表示装置、特別図柄保留ランプ、普通図柄保留ランプ、大当り種類表示ランプ、状態表示ランプなどの表示を制御することができる。また、メイン制御基板3には、遊技中の動作を制御するため、種々のセンサからの検出信号が入力される。図中には一例として入賞検出器15aからの入力を例示した。入賞検出器15aとは、始動入賞口9への入賞を検出するためのセンサである。メイン制御基板3は、入賞検出器15aからの信号に応じて、先に説明した抽選を行い、大当り遊技を実行することができる。メイン制御基板3には、他にも種々の入力がなされているが、ここでは説明を省略する。
遊技時におけるその他の制御は、払出制御基板25、サブ制御基板35を介して行われる。払出制御基板25は、遊技中の遊技球の発射および払い出しを次の手順で制御する。遊技球の発射は、直接的には発射制御基板47によって制御される。即ち、遊技者が、発射ハンドル8を操作すると、発射制御基板47は操作に応じて発射モータ49を制御し、遊技球を発射する。遊技球の発射は、タッチ検出部48によって、発射ハンドル8に遊技者が触れていることが検出されている状況下でのみ行われる。払出制御基板25は、発射制御基板47に対して、発射可否の制御信号を送出することで、間接的に球の発射を制御する。
遊技中に入賞した旨のコマンドをメイン制御基板3から受信すると、払出制御基板25は、賞球払出装置21内の払出モータ20を制御し、払出球検出器22によって球数をカウントしながら規定数の球を払い出す。払出モータ20の動作は、モータ駆動センサ24によって監視されており、球ガミ、球切れなどの異常が検出された場合、払出制御基板25は、表示部4aにエラーコードを表示する。エラー表示された時には、係員が異常を除去した後、操作スイッチ4bを操作することで復旧させることができる。
サブ制御基板35は、遊技中における音声、表示、ランプ点灯などの演出を制御する。これらの演出は、通常時、入賞時、大当たり時、エラー時、不正行為その他の異常が生じた時の警報など、遊技中のステータスに応じて変化する。メイン制御基板3から、各ステータスに応じた演出用のコマンドが送信されると、サブ制御基板35は、各コマンドに対応したプログラムを起動して、メイン制御基板3から指示された演出を実現する。
本実施例では、図示する通り、サブ制御基板35はスピーカ29を直接制御する。LCD16は、図柄制御基板30を介して制御する。図柄制御基板30の回路構成は後述する。サブ制御基板35の制御対象となるランプには、遊技盤面に設けられたパネル装飾ランプ12と、枠に設けられた枠装飾ランプ31がある。サブ制御基板35は、ランプ中継基板32、34を介して、パネル装飾ランプ12および枠装飾ランプ31と接続されており、各ランプを個別に点滅させることができる。
C.図柄制御基板:
図3は、図柄制御基板30の回路構成を示すブロック図である。図柄制御基板30は、キャラクタROM340、第1キャラクタRAM321、第2キャラクタRAM322、CPU311、制御ROM325、VDP330及びメモリインターフェース制御回路324を備えている。
図柄制御基板30は、サブ制御基板35からの表示コマンドに基づいて、図柄表示制御プログラムに従って演出表示を制御する。VDP330と表示装置16との間には、スケーラ390およびフレームバッファ397が備えられている。スケーラ390は、VDP330から出力された表示データを一旦、フレームバッファ397に保存し、適宜、表示装置16に出力する機能を奏する。この過程で、スケーラ390は、表示データを拡大/縮小し、表示装置16の画素数に適合させる処理を行ったり、予め用意されたOSD(On Screen Display)図形を表示データに重ね合わせて出力することも可能である。
CPU(Central Processing Unit)311は、サブ制御基板35からの表示コマンドに基づいて表示装置16における表示を制御する。VDP330は、CPU311(中央演算処理装置)の指示に基づいて、表示装置16に表示するための表示データを生成する。図柄制御基板30を構成する各種回路は、例えば6層の配線層を持つ単一の基板上に設けられている。
CPU311は、表示コマンドに対応する表示態様を実現する表示データの生成条件を規定した描画パラメータを制御ROM325から読み出す。この描画パラメータとしては、描画の色彩情報を規定したカラーパレットデータ、各レイヤの透明度等を設定したレイヤデータ、スプライトの描画条件を規定したスプライト属性データ、バックグラウンド(背景)の描画条件を規定したバックグラウンド属性データである。CPU311は、制御ROM325から読み出した描画パラメータなどをVDP330の各種レジスタに設定(指示)する。VDP330は、この描画パラメータに基づいて、表示装置16に出力する表示データを生成する。
また図柄制御基板30は、これ以外にもキャラクタROM340及び制御ROM325を備えている。制御ROM325は、CPU311が実行する図柄表示制御プログラム及び、CPU311などが参照する展開情報を管理する展開テーブルを不揮発的に記憶している。この展開テーブルは、上記変動表示パターンを表示するにあたり参照され、その変動表示パターンに含まれるシーンの組み合わせや各シーンの表示順序を管理している。なお、図柄表示制御プログラムがこの展開テーブルの機能を含んでいても良い。
一方、キャラクタROM340は、変動表示パターンを構成する各シーンに係るデータ(映像の表示に必要なデータ)群が予め記憶されている。すなわち各シーンの表示に必要な素材としてのスプライトデータ(や動画像データ)を含んでいるのである。ここで、上記展開テーブルは、キャラクタROM340において、各スプライトデータ(や動画像データ)を格納している位置としてのアドレスや、各スプライトデータを格納している位置としてのアドレスを管理している。
この動画像データは、予め設定された非可逆な圧縮方式によってデータ構造が圧縮された状態で、キャラクタROM340に格納されている。一方、スプライトデータは、予め設定された可逆な圧縮方式によってデータ構造が圧縮された状態で、キャラクタROM340に格納されている。本実施形態では、圧縮された動画像データを「圧縮動画像データ」と呼称する。
ここでスプライトは、その表示態様として、背景としての動画像に重ねた場合、この動画像を視覚的に透過させない非透過領域及び、背景としての動画像を視覚的に透過させる透過領域を有している。なお本実施形態においては、圧縮されたスプライトデータを「圧縮スプライトデータ」と呼称する。
次にCPU311は、内蔵メモリとしてのSDRAM(Synchronous Dynamic Ramdom Access Memory)を備えている。CPU311(動作指示プロセッサ)は、制御ROM325(制御メモリ)、VDP330(映像表示プロセッサ)及びメモリインターフェース制御回路324に接続されている。制御ROM325は、上記展開テーブルのみならず、CPU311の制御によって演出表示を制御する図柄表示制御プログラムを格納する読み出し専用メモリである。
CPU311は、制御ROM325からSDRAMに読み込んだ図柄表示制御プログラムの動作によって、サブ制御基板35からの表示コマンドに基づいてVDP330の動作を制御する。CPU311は、サブ制御基板35から受信した上記表示コマンドを解析し、この解析結果に応じた演出表示の実行を制御する。
この演出表示の具体例としては、リーチ演出表示や特別遊技状態におけるラウンド表示を挙げることができる。このリーチ演出表示は、例えば遊技球の入賞を契機とした大当り抽選において当選しそうであること或いは当選しないもののあたかも大当りに当選するかもしれないことを、遊技者などに対して暗示して遊技者を期待させる演出表示である。一方、ラウンド表示は、例えば特別遊技状態に移行している場合に、特別遊技状態における各ラウンドでの演出表示を表している。
このようなリーチ演出表示などに関する図柄の変動表示を実行する場合、上記CPU311は、このリーチ演出表示などにおける変動表示パターンに含めるべき各シーン及び各シーンの表示順序を展開テーブルを参照して決定する。
C1.メモリインターフェース制御回路324の構成例:
図3に示すメモリインターフェース制御回路324は、CPU311の制御によって、キャラクタROM340、第1キャラクタRAM321及び第2キャラクタRAM322と、VDP330との間のデータ交換に関するインターフェースを制御する機能を有する。VDP330からメモリインターフェース制御回路324を介してキャラクタRAM321,322を参照すると、キャラクタRAM321,322に同一のスプライトデータが同一の場所(アドレス空間)に配置されているため、VDP330は、キャラクタRAM321,322が切り替えられたとしても、これらキャラクタRAM321,322を各々区別することなく、あたかも1つのキャラクタRAMが存在しているかのように見えるようになっている。
メモリインターフェース制御回路324は、CPUインターフェース316、圧縮データメモリコントローラ312、動画像データ伸張コントローラ327、スプライトデータ伸張コントローラ328,329、展開データメモリコントローラ315、第1キャラクタRAMコントローラ314、第2キャラクタRAMコントローラ317及びVDPインターフェース320を備えている。メモリインターフェース制御回路324は、キャラクタROM340、CPU311、VDP330及びキャラクタRAM321,322にそれぞれ接続されている。
CPUインターフェース316は、CPU311とメモリインターフェース制御回路324とのインターフェースを制御しており、CPU311の他にも、圧縮データメモリコントローラ312、動画像データ伸張コントローラ327、スプライトデータ伸張コントローラ328,329及び展開データメモリコントローラ315に接続されている。
これら圧縮データメモリコントローラ312、動画像データ伸張コントローラ327、スプライトデータ伸張コントローラ328,329及び展開データメモリコントローラ315は、それぞれレジスタ312a,327a(動画像レジスタ),328a(スプライトレジスタ),329a(スプライトレジスタ),315aを備えている。これらレジスタ312a,327a,328a,329a,315aは、CPUインターフェース316に接続されている。
C2.CPUインターフェースの構成:
CPUインターフェース316は、スプライト伸張制御プロセッサとしてのCPU311によるレジスタ328a,329aへのそれぞれの書き込みを制御するとともに、動画像伸張制御プロセッサとしてのCPU311によるレジスタ327a(動画像レジスタ)への書き込みを制御する。
また、CPUインターフェース316は、CPU311による展開データメモリコントローラ315のレジスタ315aや圧縮データメモリコントローラ312のレジスタ312aへの書き込みを制御している。
つまり、これらレジスタ312a,327a,328a,329a,315aには、それぞれCPUインターフェース316を経由して、CPU311によって設定値が書き込まれるようになっている。これら圧縮データメモリコントローラ312、動画像データ伸張コントローラ327、スプライトデータ伸張コントローラ328,329及び展開データメモリコントローラ315は、それぞれレジスタ312a,327a,328a,329a,315aを介してCPU311によって制御される構成となっている。
動画像データ伸張コントローラ327は、動画像レジスタ327aに書き込まれる設定値によって、圧縮動画像データについて非可逆圧縮データの伸張処理を開始したり、その伸張処理を中止するようになっている。また動画像データ伸張コントローラ327は、動画像レジスタ327aに書き込まれる設定値によって、転送元であるキャラクタROM340の圧縮動画像データの読み出し開始アドレス、読み出すデータ数(バイト数)、転送先であるキャラクタRAM321又はキャラクタRAM322への伸張データの書き込みアドレスが指定される。また動画像データ伸張コントローラ327は、伸張の処理状態、その他(実行中、停止中)などが確認できるステータスレジスタを備えている。
一方、スプライトデータ伸張コントローラ328及びスプライトデータ伸張コントローラ329は、それぞれレジスタ328a及びレジスタ329aに書き込まれる設定値によって、圧縮スプライトデータについて可逆圧縮データの伸張処理を開始したり、その伸張処理を中止するようになっている。また、スプライトデータ伸張コントローラ328,329は、それぞれ動画像レジスタ328,329aに書き込まれる設定値によって、転送元であるキャラクタROM340の圧縮動画像データの読み出し開始アドレス、読み出すデータ数(バイト数)、転送先であるキャラクタRAM321又はキャラクタRAM322への伸張データの書き込みアドレスが指定される。またこのスプライトデータ伸張コントローラ328,329は、それぞれ伸張の処理状態、その他(実行中、停止中)などが確認できるステータスレジスタを備えている。
C3.2つのスプライト伸張装置の構成:
スプライト伸張制御プロセッサとしてのCPU311は、2つのスプライト伸張装置としてのスプライトデータ伸張コントローラ328,329による伸張動作をそれぞれ独立して制御する機能を有する。これらスプライトデータ伸張コントローラ328,329は、それぞれ、上述のようにCPU311によって書き込まれるレジスタ328a及びレジスタ329a及び、CPU311によるレジスタ328a,329aへの書き込みに基づいて、予め設定されたスプライト伸張方式に従って圧縮スプライトデータをスプライトデータに伸張するスプライト伸張部(図示せず)を含んだ構成となっている。
まず、キャラクタROM340に、スプライトデータを圧縮した圧縮スプライトデータを記憶させておくと、キャラクタROM340の記憶容量を有効活用してより多くのスプライトデータを記憶させておくことができるものの、スプライトを含めたシーンを表示する際には、キャラクタROM340から読み出した圧縮スプライトデータを伸張する必要がある。
このスプライトデータをスプライトデータ伸張コントローラ328,329によって伸張しようとすると、キャラクタRAM321,322における記憶状態と読出状態との切り替えが必要であることを考慮すれば、一見すると、伸張制御が複雑になることも考えられる。しかしながら本実施形態では、スプライトデータ伸張コントローラ328,329が存在している場合においても、CPU311によるスプライトレジスタ328a,329aへの各書き込みという簡単な制御によって、圧縮スプライトデータを伸張してスプライトデータを生成することができるため、全体として伸張制御が簡素化される。
C4.動画像伸張装置の構成:
また、動画像伸張制御プロセッサとしてのCPU311は、動画像データ伸張コントローラ327による伸張動作を制御する機能を有する。動画像データ伸張コントローラ327は、上述のようにCPU311によって書き込まれるレジスタ327a及び、CPU311によるレジスタ327aへの書き込みに基づいて、圧縮動画像データを予め設定された動画像伸張方式に従って伸張して動画像データとする動画像伸張部とを含んだ構成となっている。
まず、キャラクタROM340に、動画像データを圧縮した圧縮動画像データを記憶させておくと、キャラクタROM340の記憶容量を有効活用してより多くの動画像に係るデータを記憶させておくことができるものの、スプライトのみならず動画像を含めたシーンを表示する際には、キャラクタROM340から読み出した圧縮スプライトデータのみならず圧縮動画像データも伸張する必要がある。
ここで、上述のようにスプライトデータを伸張するとともに、この動画像データを動画像データ伸張コントローラ327によって伸張しようとすると、キャラクタRAM321,322における記憶状態と読出状態との切り替えが必要であることを考慮すれば、伸張制御が複雑になることも考えられる。
しかしながら本実施形態によれば、スプライトデータ伸張コントローラ328,329とは別にさらに動画像データ伸張コントローラ327が存在している場合においても、CPU311による動画像レジスタ327aへの書き込みという簡単な制御によって、圧縮スプライトデータの伸張とともに、圧縮動画像データを伸張して動画像データを生成することができるため、全体として伸張制御が簡素化される。
また、上記圧縮データメモリコントローラ312は、レジスタ312aに書き込まれた設定値に従って、キャラクタROM340から、表示すべき変動表示パターンに含まれる各シーンを表示するための圧縮動画像データ及び圧縮スプライトデータを読み出す制御を行う。
ここでCPU311は、CPUインターフェース316を経由して、圧縮データメモリコントローラ312のレジスタ312aに、例えばキャラクタROM340の種類に応じたアクセスタイミングを設定する。
具体的には、CPU311が制御ROM325の展開テーブルの内容に従って、動画像データ伸張コントローラ327の動画像レジスタ327a、スプライトデータ伸張コントローラ328のレジスタ328a及び、スプライトデータ伸張コントローラ329の329aにそれぞれ書き込んだ設定値に従って、キャラクタROM340の記憶領域の転送元アドレスを指定する。このようにCPU311が指定すると、圧縮データメモリコントローラ312は、この指定された転送元アドレスに該当するキャラクタROM340の記憶領域から圧縮スプライトデータ及び圧縮動画像データを、それぞれ書き込まれた設定値に基づくタイミングで読み出して、スプライトデータ伸張コントローラ328,329及び動画像データ伸張コントローラ327へ引き渡す。
動画像データ伸張コントローラ327は、非可逆な圧縮方式で圧縮されている圧縮動画像データを、その非可逆な圧縮方式に対応した伸張方式によって伸張する機能を有する。一方、スプライトデータ伸張コントローラ328は、可逆な圧縮方式で圧縮されている圧縮スプライトデータをキャラクタROM340から読み出して、その可逆な圧縮方式に対応した伸張方式によって伸張する機能を有する。
本実施形態では、メモリインターフェース制御回路324には、キャラクタROM340から読み出した圧縮スプライトデータを伸張する伸張手段として、2個のスプライトデータ伸張コントローラ328,329が設けられている。これらスプライトデータ伸張コントローラ328,329は、それぞれキャラクタRAM321,322に対して固定的に対応づけられているのではなく、キャラクタRAM321,322の数に応じて設けられている。また、これらスプライトデータ伸張コントローラ328,329は、キャラクタRAM321,322に各々対応して設定(切り替え)可能であり、各々キャラクタROM340から読み出した圧縮スプライトデータを独立してスプライトデータに伸張している。
動画像データは、CPU311によるレジスタ327aへの書き込みを契機に、動画像データ伸張コントローラ327によって伸張され、動画像データ伸張コントローラ327から各々展開データメモリコントローラ315に引き渡される。
また、スプライトデータは、CPU311によるレジスタ328a,329aへの書き込みを契機に、このスプライトデータ伸張コントローラ328,329によってそれぞれ独立して伸張され、スプライトデータ伸張コントローラ328,329から各々独立して展開データメモリコントローラ315に引き渡される。
C5.展開データメモリコントローラ:
展開データメモリコントローラ315は、CPU311によってレジスタ315aに書き込まれた設定値に従って、第1キャラクタRAM321及び第2キャラクタRAM322における記憶状態(「展開状態」とも呼称する)と読出状態との切り替え条件が指定される。本実施形態では、例えば外部信号の立ち上がりエッジに同期して第1キャラクタRAM321と第2キャラクタRAM322とを切り替えている。
そして、この展開データメモリコントローラ315は、CPU311によってレジスタ315aに書き込まれた設定値に従って、第1キャラクタRAMコントローラ314及び第2キャラクタRAMコントローラ317を制御する。この第1キャラクタRAMコントローラ314は、第1キャラクタRAM321へのスプライトデータ及び動画像データの展開や読み出しを制御する機能を有する。一方、第2キャラクタRAMコントローラ317は、第2キャラクタRAM322へのスプライトデータ及び動画像データの展開や読み出しを制御する機能を有する。本実施形態では、シーンの素材としてスプライト及び動画像を例示しているが、以下の説明においては、シーンの素材として主にスプライトデータを例示する。
またさらに、これらキャラクタRAMコントローラ314,317(「メモリリフレッシュ部」と呼ぶこともある)は、それぞれ展開データメモリコントローラ315の制御によって、キャラクタRAM321,322に対してリフレッシュ動作を実行する機能を有する。この展開データメモリコントローラ315は、CPU311の指示に従って、キャラクタRAMコントローラ314,317に対するリフレッシュ動作の実行を各々制御している。なお、本実施形態では、第1キャラクタRAMコントローラ314が第1キャラクタRAM321に対してリフレッシュ動作を実行し、第2キャラクタメモリコントローラ317が第2キャラクタRAM322に対してリフレッシュ動作を実行するように対応づけられている。
この展開データメモリコントローラ315(リフレッシュデータ提供部)は、キャラクタRAM321,322に各々リフレッシュ動作を実行させるためのリフレッシュキャラクタデータを有し、このリフレッシュキャラクタデータをVDP330に提供する機能を有する。具体的には、展開データメモリコントローラ315は、CPU311の指示に従って、VDP330に対してリフレッシュデータを提供する。なお、この展開データメモリコントローラ315は、このように予め用意しておいたリフレッシュキャラクタデータをVDP330に提供する代わりに、リフレッシュキャラクタデータを生成してVDP330に提供するようにしても良い。
ここで、上記スプライトデータは、例えば64ドット×64ドットの表示範囲に8ビット(256色)でスプライトを表示させるための画像データである。一方、このリフレッシュキャラクタデータも、例えば64ドット×64ドットの表示範囲に8ビット(256色)でリフレッシュキャラクタを表示させるための画像データである。つまり、本実施形態においては、リフレッシュキャラクタデータとスプライトデータとがその表示内容は異なるもののデータ構造が同様であることから、1つのスプライトの表示範囲が1つのリフレッシュキャラクタの表示範囲と同一となっている。そして、この展開データメモリコントローラ315は、自らとVDP330とを接続するバス線、例えば32ビット幅のバス線を介して、VDP330に対してスプライトデータを提供する。
そして、キャラクタRAMコントローラ314,317は、CPU311の指示に従って、VDP330が展開データメモリコントローラ315からリフレッシュキャラクタデータを読み出したことを契機として、各々キャラクタRAM321,322に対してリフレッシュ動作を実行するようになっている。
さらに本実施形態では、VDP330が、CPU311の指示に従って、この読み出したリフレッシュキャラクタデータに基づくリフレッシュキャラクタをラインバッファ336の可視領域外に記憶させている。ここで本実施形態においては、リフレッシュキャラクタとして着色した画像を採用することができる。
ここでいうフレームにおける可視領域とは、配置させたスプライトがVDP330によって表示装置16に表示される領域をいう。一方、可視領域外とは、フレームにおける可視領域を除いた領域をいい、例えば配置させたスプライトがVDP330によって表示装置16に表示されない非可視領域をいう。つまり、フレームは、可視領域及び非可視領域を含んでいる。
ここでCPU311は、キャラクタRAMコントローラ314,317によって、キャラクタRAM321,322に対するリフレッシュ動作を実行させる場合、例えばキャラクタRAM321,322におけるリフレッシュキャラクタエリアを指定するアドレス(例えば「0C00 0000」)を指定する。なお、この「0C00 0000」というアドレスは、図4に示すようにキャラクタRAM321,322におけるリフレッシュキャラクタエリアの先頭アドレスを表している。
ここで本実施形態では、このリフレッシュキャラクタエリアには、実際にリフレッシュキャラクタデータが格納されておらず、CPU311が、このキャラクタRAMコントローラ314,317によってリフレッシュ動作を実行すべきタイミングを指示するために、このリフレッシュキャラクタエリアからリフレッシュキャラクタデータを読み出すべき旨の指示を行うようになっている。
また、このキャラクタRAMコントローラ314,317は、展開データメモリコントローラ315の制御によって、各々図示しないリフレッシュキャラクタ数設定部の設定値に従って動作するようになっている。このリフレッシュキャラクタ数設定部には、キャラクタRAM321,322に対するリフレッシュ動作に必要な時間に応じて、CPU311によって、表示させるべきリフレッシュキャラクタの数が設定されるものである。このリフレッシュキャラクタ数設定部は、例えば展開データメモリコントローラ315に設けられたレジスタ315aに相当する。
つまりCPU311は、キャラクタRAM321,322のリフレッシュに必要な時間に応じて表示させるべきリフレッシュキャラクタの数(設定値)を、このリフレッシュキャラクタ数設定部(レジスタ315a)に、例えば初期設定時に予め設定しておくのである。このリフレッシュキャラクタの数は、キャラクタRAM321,322におけるリフレッシュすべきリフレッシュ範囲(リフレッシュすべき容量)に応じて設定される値である。なお、このリフレッシュキャラクタの数は、キャラクタRAM321,322に対するリフレッシュ動作の実行にあたり、VDP330がメモリインターフェース制御回路324から読み出すリフレッシュキャラクタデータの数でもある。
ここで、1つのリフレッシュキャラクタによってリフレッシュされる容量の具体例としては、例えば64ドット×64ドット×8ビット(256色)の表示範囲であるリフレッシュキャラクタの表示に用いるリフレッシュキャラクタデータのデータサイズに相当している。つまり、キャラクタRAM321,322において広い範囲(大きな容量)をリフレッシュしたい場合には、表示させるべきリフレッシュキャラクタの数が多くなるのである。
また、展開データメモリコントローラ315のレジスタ315aは、レジスタ名(REFOFT,REFNOF,REFNCH)を有している。これらのレジスタ名には、動作指示プロセッサとしてのCPU311によって所望の設定値が書き込まれるようになっている。またこれらのレジスタ名には、メモリインターフェース制御回路324に接続されているキャラクタRAMの仕様に基づく値が設定される。レジスタREFOFTは、リフレッシュの実行期間を設定するためのレジスタである。一方、レジスタ名REFNOFは、リフレッシュ実行期間内に実行しなければならないリフレッシュ回数を設定するためのレジスタである。
また、レジスタ名REFNCHは、リフレッシュキャラクタによるリフレッシュ回数を設定するためのレジスタであり、1回のリフレッシュ指示に対応したリフレッシュキャラクタデータの読み出し回数を設定する。ここでいう、リフレッシュキャラクタデータの読み出し回数は、接続されているキャラクタRAM321,322の仕様に応じて設定されるものである。
メモリインターフェース制御回路324は、リフレッシュ回数及びリフレッシュ監視カウンタ(リフレッシュを実行している時間に相当)を管理している。上記したレジスタ名REFOFTで設定した時間内にレジスタ名REFNOFで設定した回数分だけ、リフレッシュ部がリフレッシュ動作を実行した否かを判断する。本実施形態においては、CPU311がリフレッシュ部に対して、例えば16msごとに1024回にわたりリフレッシュ動作を実行することを、4回繰り返すように指示する。
つまり本実施形態では、これらレジスタ名REFNOFの設定値及びレジスタ名REFOFTの設定値に基づいて、例えば64ms間にわたり4096回リフレッシュ動作を実行するものとする。また本実施形態では、仮にレジスタ名REFNOF及びレジスタ名REFOFTの設定値に応じた回数分、キャラクタRAM321,322に対するリフレッシュ動作が実行されなかった場合、レジスタ名RENOF及びレジスタ名REFOFTに設定した値に基づいて集中リフレッシュを開始するようになっている。
つまり本実施形態では、これらレジスタ名REFNOFの設定値及びレジスタ名REFOFTの設定値などのリフレッシュ条件が設定されるリフレッシュ条件設定部が用意されており、図示しないリフレッシュ監視部(リフレッシュ監視手段)が、リフレッシュ条件設定部に設定された設定値(リフレッシュ条件)を満たさないことを検出した場合、このリフレッシュ条件を満たすように強制的にリフレッシュ動作を開始させる指示を出すようになっている。
C6.キャラクタRAMの切り替え構成:
第1キャラクタRAM321及び第2キャラクタRAM322は、それぞれ展開データメモリコントローラ315の制御によって、スプライトデータを一時的に記憶する展開状態(記憶状態)と、記憶済みのスプライトデータを読み出す読出状態とが、互いに逆になるように交互に切り替わる構成となっている。
より具体的には、この展開データメモリコントローラ315は、第1キャラクタRAM321へ展開している期間(以下「第1展開期間」と呼称する)においては、第2キャラクタRAM322から読み出しを実行するよう制御する。一方、この展開データメモリコントローラ315は、第2キャラクタRAM322へ展開している期間(以下「第2展開期間」と呼称する)においては、第1キャラクタRAM321から読み出しを実行するよう制御する。本実施形態では、この展開データメモリコントローラ315は、VDP330が出力する外部信号である垂直同期信号(いわゆるVブランク信号)を契機に、これら第1展開期間と第2展開期間とが繰り返し交互に連続するように、第1キャラクタRAM321及び第2キャラクタRAM322の切り替え動作を制御している。
C7.両キャラクタRAMの記憶領域の管理:
ここで本実施形態では、これら第1キャラクタRAM321及び第2キャラクタRAM322の記憶領域が、それぞれ同一のアドレスによって管理されている。つまり、これら第1キャラクタRAM321の記憶領域と第2キャラクタRAM322の記憶領域とは、互いに記憶容量が等しく、各記憶領域には同一のアドレスが付されている。
そして、これら第1キャラクタRAM321及び第2キャラクタRAM322には、同一のアドレスで管理された記憶領域に対して、同一のスプライトデータが交互に展開される。このようにすると、第1キャラクタRAM321及び第2キャラクタRAM322が読み出し中に切り替わったとしても読み出されるスプライトデータを同一のものとすることができる。
C8.複数の共通エリア:
ここで、本実施形態においては、第1キャラクタRAM321及び第2キャラクタRAM322には、それぞれ、組み合わせ映像群の一例としての変動表示パターンに使用するシーン(映像)の組み合わせの表示に必要なスプライトデータを一時的に記憶可能な複数の共通エリア(複数の共通領域)が区画形成されている。
これら複数の共通エリアは、それぞれ制御ROM325に記憶されている展開テーブルの内容に基づいて、CPU311が区画する領域である。これら複数の共通エリアからは、展開データメモリコントローラ315の制御によって、それぞれシーンの組み合わせに各々必要なスプライトデータが独立して読み出されるようになっている。
C9.スタティックロード:
ここである変動表示パターンを例示すると、データ展開プロセッサとしてのCPU311は、変動表示パターンに含まれるシーンの組み合わせに各々必要なスプライトデータを、各々予め定められた複数の共通エリアのいずれかに一時的に記憶させている。
このように本実施形態では、この変動表示パターンに含まれるシーンの組み合わせに係るシーン表示に必要なスプライトデータが、それぞれ展開テーブルの内容に基づいて、予め決められた複数の共通エリアのいずれかに別々に展開されるようになっている。つまり本実施形態では、上記展開テーブルに従って、これらシーン表示に必要な各スプライトデータは、複数の共通エリアにおける展開先が予め決められており、これら複数の共通エリアのうちの異なる共通エリアに展開されるようになっている。なお本実施形態では、このようにスプライトデータを、複数の共通エリアのいずれかに固定的に展開することを「スタティックロード」と呼称する。つまり、スタティックロードは、複数の共通エリアのうちの予め定められた共通エリアにスプライトデータを一時的に記憶させることを表している。
ここで1つの共有エリアには、同時に複数のシーン表示に必要なスプライトデータを展開しても良いが、本実施形態では、1つの共有エリアには、同時に複数のシーン表示に必要なスプライトデータを展開せず、主として1つのシーン表示に必要なスプライトデータを展開する構成となっている。ここで、複数の共通エリアに時期を同じくして各々展開されたシーン表示に必要なスプライトデータは、1つの変動表示パターンを表示するために用いられるデータである。
また本実施形態では、1つの変動表示パターンに含まれるシーンのうち表示順序が連続するシーンの組み合わせに係るシーン表示に必要なスプライトデータを、それら複数の共通エリアのうち予め定められた異なる共通エリアに記憶させている。
C10.常駐エリア:
ここで、メモリインターフェース制御回路324は、キャラクタRAM321,322からシーン表示に必要なスプライトデータを読み出すと、それぞれこれらキャラクタRAM321,322から読み出したシーン表示に必要なスプライトデータを上書きしている。しかしながら本実施形態では、複数の変動表示パターンを表示するにあたり、各シーンを表示するのに共通して多用されるシーン表示に必要なスプライトデータについては、キャラクタRAM321,322の記憶領域の一部に常駐させるものとする。本実施形態では、CPU311が、例えば共通して多用されるシーン表示に必要なスプライトデータを、キャラクタRAM321,322における複数の共通エリアの一部として常駐エリア(常駐領域)を区画形成して展開させるものとする。
このようにキャラクタRAM321,322に常駐エリアを設けてシーン表示に必要なスプライトデータを常時展開させておくと、頻繁にキャラクタROM340から読み出さなくても済む。なお、この常駐エリアに展開するシーン表示に必要なスプライトデータは、例えば図柄の変動表示中に常に表示される図柄の表示に用いるスプライトデータが挙げられる。なお、展開する時期としては、電源投入直後、すぐに展開するようにしておけば良い。ここで、上記展開テーブルは、これらシーン表示に必要なスプライトデータを、常駐エリアを含む複数の共通エリアのうちのいずれかに展開するために用いる展開情報を含んでいる。
C11.各共通エリアのデータサイズ:
ここで、これら複数の共通エリアのうちの各共通エリアには、表示態様の異なる複数の変動表示パターンのうちのある変動表示パターンを表示する場合と、それとは別の変動表示パターンを表示する場合とで、それぞれ互いに異なる複数のシーン表示に必要なスプライトデータがそれぞれ記憶される。
そこで本実施形態では、データ展開プロセッサとしてのCPU311は、CPUインターフェース316を経由して展開データメモリコントローラ315を制御することで、複数の共通エリアのうちの各共通エリアに記憶されうる複数のシーン表示に必要なスプライトデータのうち、データサイズが最大であるシーン表示に必要なスプライトデータのデータサイズを基準として、予め複数の共通エリアをそれぞれ区画形成しておく。ここでいうデータサイズは、例えば1つのシーンを表示するのに必要な素材としてのスプライトを表示するのに必要なスプライトデータのデータサイズを表している。
まず、複数の共通エリアは、それぞれ格納されうるスプライトデータが予め定められているため、その共通エリアに展開されることのないスプライトデータのデータサイズを考慮して区画形成されていなくてもよい。このため、これら複数の共通エリアは、大きなデータサイズのスプライトデータが将来展開されるかもしれないことを想定してデータサイズを余分に形成しておく必要がなく、記憶されるスプライトデータのうちの最もデータサイズの大きなスプライトデータを基準に区画形成しておけばよい。従って本実施形態によれば、キャラクタRAM321,322に区画形成すべき複数の共通エリアのうちの各共通エリアのデータサイズが、各共通エリアに展開され得るスプライトデータに応じて最小限度に抑制されるため、キャラクタRAM321,322を効率よく使用することができる。
D.VDPの構成例:
図4はVDP330の電気的な構成例を示すブロック図である。VDP330は、CPUインターフェース383(図において「CPU I/F」と略す)、ROMインターフェース333(図において「ROM I/F」と略す)、バス382、VDPコントローラ331、ラインバッファ336、カラーパレットレジスタ332c、スプライト属性レジスタ332s、バックグラウンド(図において「BG」と略す)属性レジスタ332b、内蔵RAM335及びDMAコントローラ384を含んだ構成となっている。なお、内蔵RAM335は、VDP330の外部に設けられていても良い。
制御ROM325においては、上記展開テーブルが管理されている。この展開テーブルは、キャラクタRAM321,322においてシーン表示に必要なスプライトデータが複数の共通エリアのうちのどの共通エリアに展開されているべきかに関する展開情報及び、この展開情報の他、スケジューラ(表示情報)を含んでいる。ここでいうスケジューラは、VDP330が表示すべきスプライトの先頭アドレス、表示すべき枚数(縦及び横方向の枚数)、スプライトの識別子(キャラクタ番号など)及び、重ね合わせた場合の優先順位などの後述する表示データを表示順序に記憶した表示情報を含んでいる。なお、制御ROM325においては、このスケジューラに展開情報が含まれて記憶されている形態や、スケジューラと展開情報が並列して存在している形態であっても良い。
そしてさらに、CPU311は、制御ROM325の展開テーブルを参照し、キャラクタRAM321,322における複数の共通エリアのうちのどの共通エリアに、この変動表示パターンの表示動作に必要なシーンの組み合わせに係るシーン表示に必要なスプライトデータが記憶されているのかに関する展開情報を取得する。つまりCPU311は、この展開情報に基づいて、必要なシーン表示に必要なスプライトデータがそれぞれ展開されている複数の共通エリアのうちのある共通エリアを特定する。
次にCPU311は、さらに展開テーブルの内容を参照し、各シーンの種類ごとに、そのシーンの表示に用いるスプライトを把握するとともに、それぞれ対応した複数の共通エリアのうちある共通エリア群を特定する。ここでいう特定とは、キャラクタRAM321,322における各シーン表示に必要なスプライトデータが展開されている特定の共通エリア付されたアドレスを把握することなどを意味している。
CPU311は、変動表示パターンを表示するのに必要なシーン表示に必要なスプライトデータに関するアドレスを把握すると、まずCPU311の制御によって表示すべきスプライトが配置されているアドレスなどの描画パラメータを指定する。このVDPコントローラ331は、CPU311の制御によってメモリインターフェース制御回路324を経由してスプライトデータを取得する。
図4に示すカラーパレットレジスタ332c、スプライト属性レジスタ332s及びBG属性レジスタ332bは、それぞれVDPコントローラ331による画像表示動作の制御に際し、このVDPコントローラ331が参照するレジスタである。つまりVDPコントローラ331は、CPU311の指示に基づいて、これらカラーパレットレジスタ332c、スプライト属性レジスタ332s及びBG属性レジスタ332bを参照しつつ、ラインバッファ336を経由して、表示装置16の演出表示を制御している。
ここで上記CPU311は、上述のように生成した描画パラメータに含まれる、カラーパレットデータをカラーパレットレジスタ332cに書き込むとともに、スプライト属性データをスプライト属性レジスタ332sに書き込み、さらにバックグラウンド属性データをバックグラウンド属性レジスタ332bに書き込む。
カラーパレットレジスタ332cは、例えば0〜255番で表される各パレット番号に対応して256パレット分のカラーパレットデータを予め記憶するためのレジスタである。1つのパレットは、例えば16色で構成されている。つまり、このカラーパレットレジスタ332cは、スプライト設定時にパレット番号(例えば0〜255番)の指定があると、この指定されたパレット番号に対応したカラーパレットデータを提供する。
スプライト属性レジスタ332sは、スプライトデータなどのスプライト属性に関するスプライト属性データを記憶している。バックグラウンド(BG)属性レジスタ332bは、バックグラウンド画像の属性に関するバックグラウンド属性データを記憶している。
内蔵RAM335は、書き換え可能な揮発性のメモリであり、例えばSDRAM(Synchronous Dynamic Random Access Memory)である。ここで制御ROM325から内蔵RAM335へのデータの書き込みは、例えばCPU311の制御によって実行されているが、その代わりに、DMAコントローラ384の制御によって実行されるようにしてもよい。
ラインバッファ336は、VDPコントローラ331によって、このよう生成された表示データを、表示すべき画像の走査線(ライン)単位で蓄積する機能を有し、この蓄積した走査線単位の表示データを出力する機能を有する。このVDPコントローラ331は、表示データの出力の際、この表示データに同期させた同期信号SYNCも出力している。表示装置16にフレームを表示させる周期は固定されているため、走査線単位の表示データを出力するための所要時間の上限値が制限されている。このことから、VDP330には、走査線単位で描画可能な画素数の上限値が決められており、描画時の「のべ画素数」が上限値を超える場合には、その走査線については以後の描画を中断して、表示データを出力する。以下、この状態をスプライトオーバーと称する。本実施例では、表示装置16の横方向の画素数640ドットであるのに対し、スプライトオーバーを生じさせる上限値は7000ドットとなっている。
E.表示制御処理:
図5は表示制御処理のフローチャートである。CPU311がVDP330に対して描画コマンド等を出力し、表示データを生成させる処理である。併せて、スケーラ390に対して、拡大/縮小やOSD表示の制御などを行ってもよい。この処理は、16msec周期の割込処理として実行される。
この処理を開始すると、CPU311は、処理を実行するための準備として、多重割込みを許可し(ステップS10)、ノイズキャンセル・判定処理を行う(ステップS12)。そして、割込端子の端子レベルを確認し(ステップS14)、端子レベルが異常の場合には、ノイズ等の影響による異常なトリガに基づいて表示制御処理が開始されたものと判断し、そのまま処理を終了する。
端子レベルが正常の場合には、以下の手順でVDP330に対して描画コマンド等を出力し、表示データを生成させる。ここでは、説明の便宜上、全体を表示制御処理として説明しているが、以下の部分をステップS10〜S14とは別の処理として構成し、32msec周期の割込処理として実行してもよい。
次に、CPU311は、VDP330を初期化する(ステップS16)。この処理には、VDP330が表示データの生成に使用する種々のレジスタ等の値の初期化が含まれるが、CPU311からの描画コマンド等を保持しておくべきスプライトレジスタおよびVDPレジスタの初期化は含まれない。スプライトレジスタ等の初期化は、別途実行することになる。
CPU311は、更にVDP330のスプライトレジスタを初期化する(ステップS18)。また、VDPレジスタに条件設定コマンドを設定する(ステップS20)。これは、表示データ生成時に使用される種々の設定をVDPレジスタに書き込む処理である。これらの初期化およびVDPレジスタ設定が完了すると、CPU311は、次にサブ制御基板35から受信した表示コマンドの内容を解析し(ステップS22)、LCD16に表示すべき画面データを特定する。そして、この画面データに基づいて画像の描画コマンドをVDP330に出力する(ステップS100)。
CPU311は、描画コマンド出力の後、スプライトの最適化を行って、表示制御処理を終了する(ステップS200)。これは、次の手順で、VDP330に定義された表示エリアから全体が外れるようなスプライトについて、描画コマンドから省略する処理である。描画コマンド出力時には、CPU311は、スプライトが表示エリアに含まれるか否かを判定することなく、画面データで特定された全てのスプライトを描画対象としてVDP330のスプライトレジスタに書き込む。各スプライトについては、描画位置の指定の他、表示/非表示を切り換えるためのフラグが設けられており、この段階では、このフラグは全て「表示」に設定されている。CPU311は、スプライトの最適化では、それぞれのスプライトレジスタについて、書き込んだスプライトレジスタのサイズ、位置に基づいて、表示エリアから全体が外れるか否かを判定する。全体が外れるスプライトに対しては、CPU311は、上述のフラグを切り換え「非表示」に設定する。
スプライト最適化は、上述の通り、全体が表示エリアから外れるスプライトを描画するという無駄な処理を回避するための処理である。描画コマンドを出力する際に、一つ一つのスプライトについて表示エリアから外れるか否かの判定を行う方法を採ることも可能ではあるが、本実施例では、描画コマンドの出力と、スプライト最適化に分けることにより、同種の処理を集約することができ、処理効率を向上させている。もっとも、スプライト最適化は、VDP330の処理効率を向上させるための処理であるため、省略することも可能である。
F.描画処理:
図6は描画処理のフローチャートである。表示制御処理(図5)を受け、VDP330が内部的に実行する処理である。まず、VDP330はCPU311から出力された描画コマンドを読み込む(ステップS302)。この描画コマンドには、多数のスプライトについて、表示/非表示、表示位置などの指定がなされている。VDP330は、これらの中から規定の順序で選択したスプライトが表示対象であれば(ステップS304、S306)、そのスプライトを描画する(ステップS308)。表示対象でない場合には(ステップS306)、スプライトの描画をスキップする。
VDP330は、全スプライトの処理について終了した場合(ステップS310)、またはスプライトオーバーが生じた場合(ステップS312)には、描画処理を終了する。スプライトオーバーが生じると、表示対象として指定されたスプライトが残っている場合でも、VDP330は、描画処理を中断してしまうため、そのフレームは、一部のスプライトが欠落した状態で表示される。全スプライトの処理が完了していない場合(ステップS310)、かつスプライトオーバーが生じていない場合(ステップS312)には、VDP330は、次のスプライトの処理(ステップS304)に移行する。
図7はスプライトオーバーの判断方法を示す説明図である。上段に示す通り、横方向が640ドットの表示装置に、横方向100ドットのスプライトA〜Cを配置して画面を描画する場合を例示した。図中に示した走査線Lの描画をする場合を考える。背景を描く際には、走査線L1に示すように、ラインバッファには、640ドット分の描画が行われ、背景に応じた階調値が格納される。次に、スプライトAを描く際には、走査線L2に示すように、ラインバッファには、100ドット分の描画が行われる。走査線L1と重複している画素は、スプライトAに対する透明度の設定に応じて、背景の階調値とスプライトAの階調値との合成結果が格納される。スプライトAが不透明に設定されている場合には、これらの画素にはスプライトAの階調値が格納されることになる。スプライトBを描く際には、走査線L3に示すように、100ドット分の描画が行われる。更に、スプライトCを描く際には、走査線L4に示すように、100ドット分の描画が行われる。
この結果、図示する走査線については、合計940ドットの描画が行われることになる。このように、各走査線に描画されるのべ画素数は、スプライトの大きさ、数、位置によって変化する。こうして求められるのべ画素数が、VDP330によって描画可能な上限値を超えると、スプライトオーバーが生じる。仮に、スプライトBを描いた時点で(走査線L3)、スプライトオーバーが生じたとすれば、スプライトCは描画されないまま走査線Lの表示データが出力される。この結果、スプライトCは、走査線Lの部分が欠落した状態で表示されることになる。
図8はスプライトオーバーによる効果を示す説明図である。図示する通り3枚のレイヤLA1〜LA3で構成される画面を表示する場合を例示する。最前面に全レイヤを重ねた画面PICを示した。最背面のレイヤLA1には、海を表す演出表示と始動記憶が表示される。図中の下部に示したのが始動記憶表示であり、この例では、左右の始動入賞口に入賞した遊技球数をそれぞれハートマーク、スペードマークの数で表している。
最背面のレイヤには、始動記憶の前面に図示する矩形のスプライトが表示される。このスプライトの高さMHは、始動記憶の高さと同じである。この矩形のスプライトは、本実施例では、透明な矩形を用いたが、始動記憶と同じ図柄を表示するスプライトとしてもよい。つまり、これらの矩形は表示してもしなくても、始動記憶の表示内容に影響を与えない。このようなスプライトを本実施例では、マスクスプライトと呼ぶものとする。VDP330は、他のスプライトと同様に、マスクスプライトについても描画処理を行うため、マスクスプライトが存在する領域では、その数によってスプライトオーバーが生じることがある。図8の例では、スプライトオーバーを生じさせるに足りる分のマスクスプライトが用意されているものとする。仮に、表示装置の横幅が640ドットとし、VDP330が描画可能なのべ画素数の上限値が7000ドットであるとすると、マスクスプライトを10枚用意すれば、始動記憶も含めたのべ画素数7000ドットを超えるため、スプライトオーバーが生じることになる。
図の例でVDP330が描画を開始すると、始動記憶よりも上方の部分には、マスクスプライトは存在しないため、スプライトオーバーは生じない。従って、レイヤLA3における魚のスプライトも正常に描画される。これに対し、始動記憶の部分では、上述の通りスプライトオーバーが生じる。このため、レイヤLA3における魚のスプライトは描画されない。つまり、魚のスプライトは、マスクスプライトに対応する領域MSK部分だけ欠落した状態で描画されることになる。この結果、全てのレイヤLA1〜LA3を重ね合わせると、画像PICに示すように、最前面に始動記憶を描画したかのような表示を簡易に実現することができる。
G.描画コマンド出力処理:
図9は描画コマンド出力処理のフローチャートである。表示制御処理(図5)のステップS100に相当する処理であり、CPU311がマスクスプライトの描画要否を判断して、VDP330に描画コマンドを出力する処理である。ここでは、図8に示したように複数のレイヤから画面が構成されている場合を例示する。
まず、CPU311は背景レイヤについての描画コマンドを出力する(ステップS102)。次に、CPU311は、サブ制御基板35からの表示コマンドでマスク指定がなされている時、即ちマスクスプライトを描画すべき旨が指定されている時(ステップS104)には、その表示コマンドに応じてマスクスプライトを描画すべき箇所、マスクスプライトの高さMH、およびマスクスプライト数を設定し(ステップS106)、これに応じてマスクスプライトの描画コマンド(以下、「マスクコマンド」と称する)を出力する(ステップS108)。マスクスプライトが不要の場合には(ステップS104)、上述の処理(ステップS106、S108)はスキップされる。
マスクスプライトの要否は、サブ制御基板35が出力する表示コマンドによって直接、指定してもよいし、表示コマンドに基づいて特定される画面構成(図3で説明した展開テーブル)に基づいて指定するようにしてもよい。後者の場合には、画面構成においてマスクスプライトを配置する旨のみを指定し、位置等はCPU311が判断するようにしてもよいし、マスクスプライトの位置、形状、数を全て指定するようにしてもよい。さらに単純な形式として、スプライトオーバーを生じさせるに足りる数のマスクスプライトを重ね合わせて配置した形で展開テーブルを表しておく方法を採っても良い。この態様では、CPU311は、ステップS106の処理を省略することも可能である。
スプライトオーバーを生じさせるに足りるマスクスプライトの数としては、VDP330が描画可能な上限値を、マスクスプライトの走査線方向のドット数で除した値を用いればよい。マスクスプライト数を、この値よりも小さく設定してもよい。こうすれば、マスクスプライト以外に描画されるスプライトの大きさ、数によってスプライトオーバーが生じるか否かが不規則に変化し、適用部位によって興趣を高めることができる。
マスクスプライトの描画が完了すると、CPU311は次のレイヤの描画コマンド出力に移行する(ステップS110)。CPU311は、この処理(ステップS110)を、全レイヤについて描画コマンドの出力が完了するまで(ステップS112)、繰り返して実行し、描画コマンド出力処理を終了する。
図9の例では、背景レイヤにおいてマスクスプライトを出力する例を示した。マスクスプライトは、種々のタイミングで出力可能である。例えば、背景レイヤの直前に配置されるレイヤにおいて、最初にマスクスプライトの描画コマンドを出力した後、その他のスプライトの描画コマンドを出力するようにしてもよい。
以上で説明した実施例の遊技機によれば、マスクスプライトを用いることにより、容易にスプライトの一部をマスクすることができる。マスクを利用することによって、図8に示したように、特定のスプライトの前面に、他のスプライトが重なることを回避できる。従って、画面上での重なり状態を考えてスプライトの描画の先後を考慮したり、表示すべきスプライトの描画前でスプライトオーバーが生じないようスプライトの配置や描画順序を考慮したりするといった画面デザイン上の負荷を軽減することが可能となる。また、図8に示したように複数のレイヤで画面が構成されている場合、始動記憶を最前面のレイヤに描画する必要がなくなるため、最前面のレイヤを「不透明」という設定にする必要性がなくなる。この結果、例えば、最前面のレイヤを「半透明」に設定して種々のスプライトを描画させるなどして、奥行きを感じさせる演出表示を実現することが可能となる。
上述の実施例では、透明な矩形をマスクスプライトとして用いる場合を例示した。マスクスプライトは、透明なスプライトの他、背景と同一の表示内容を示すスプライトなど、実質的に不可視な種々のスプライトを用いることができる。例えば、先に説明した通り、第1キャラクタRAM321、第2キャラクタRAM322のリフレッシュを実行させるために用いられる不可視の「リフレッシュキャラクタ」をマスクスプライトとして用いても良い。こうすることで、リフレッシュとマスクを並行して行うことができる利点がある。
H1.変形例(1):
実施例(図8,9)では、一定高さのマスクスプライトを用いる場合を例示した。本実施例では、マスクスプライトの高さは固定である必要はなく、異なる高さのマスクスプライトを混在させてもよい。かかる例について、変形例(1)として以下に示す。
図10はマスクの変形例(1)を示す説明図である。図10(a)に示すように、画面内にスプライトA〜Cを描画する場合を考える。変形例では、スプライトA、Cの前面に、高さがMH2のマスクスプライトを描画し、この前面に重ねて高さMH1(MH1<MH2)のマスクスプライトを描画する。高さMH2のマスクスプライトのみが描画される領域LA1と、高さMH1、MH2のマスクスプライト双方が描画される領域LA2とが隣接するようにして形成されることになる。同様に、スプライトA〜Cの前面には、高さMH2のマスクスプライトのみが描画される領域LA3と、高さMH1、MH2のマスクスプライト双方が描画される領域LA4とが隣接するようにして形成されることになる。
図10(b)に、上述の各領域LA1〜LA4において、VDP330が描画するのべ画素数の様子を模式的に示した。ハッチング付した部分がマスクスプライトの描画に相当するのべ画素数を表している。高さMH2のマスクスプライトのみが描画される領域LA1、LA3では、高さMH1、MH2のマスクスプライトの双方が描画される領域LA2、LA4よりも、のべ画素数が小さい。
この状態で、スプライトA〜Cの描画による画素数を加えた状態を、それぞれ示した。図中の「上限値」を超えるとスプライトオーバーが生じるものとする。領域LA1、LA2では、スプライトA,Cを描画しても、スプライトオーバーは生じない。スプライトA〜Cを描画した時、領域LA3ではスプライトオーバーは生じないが、領域LA4ではスプライトオーバーを生じる。この結果、スプライトCは領域LA4に対応する部分が欠落した状態で表示されることになる。
このように高さの異なるマスクスプライトを混在させた場合、マスクスプライトの高さ、数、マスク部分に描画されるスプライトの数、大きさによって、スプライトオーバーが生じたり、生じなかったりする。従って、マスクが演出表示中に不規則に生じることになり、興趣に富んだ演出表示を実現することが可能となる。図10の例では、マスクの高さを2通りに設定したが、更に多段階に高さを変化させてもよい。また、マスクスプライト相互の位置を上下方向にずらすことによっても、上述と同様の効果を得ることができる。
H2.変形例(2):
実施例では、背景レイヤの描画コマンドを出力した後、全マスクコマンドを出力し、その後、前面レイヤの描画コマンドを出力する例を示した。本実施例では、必ずしも全マスクコマンドを一連の順序で出力する必要はなく、複数のマスクコマンドを出力する途中で、他の描画コマンドを挟んでも良い。かかる例について変形例(2)として示す。
図11は変形例(2)の描画コマンド出力処理のフローチャートである。実施例(図9)に代わる処理である。まず、CPU311は、背景レイヤの描画コマンドを出力する(ステップS122)。
マスクが指定されている時(ステップS124)、CPU311は、マスク箇所、マスク高さMH、マスク用スプライトの数、および各レイヤ切換位置を設定する(ステップS128)。変形例では、例えば、複数のマスクコマンドを出力する場合、背景レイヤにおいて一部のマスクコマンドを出力し、レイヤを切り換えて残りのマスクコマンドを出力するという態様を採ることができる。レイヤ切換位置は、例えば、レイヤを切り換えるまでに出力すべきマスクコマンド数という形で設定することが可能である。マスクが指定されていない時(ステップS124)は、この処理はスキップされる。
CPU311は、上述の設定に従って、順次、描画コマンドまたはマスクコマンドを出力する。まず、従前に出力したマスクコマンド数から、レイヤ切換位置に該当すると判断される場合には(ステップS130)、レイヤ描画コマンドを出力し(ステップS134)、そうでない場合には、マスクコマンドを出力する(ステップS132)。CPU311は、以上の処理を全レイヤ、全マスクコマンドについて終了するまで(ステップS136)、繰り返し実行する。
図12は変形例(2)の効果を示す説明図である。図12(a)に示すように、画面内にスプライトA〜Cを描画する場合を考える。画面内にはマスクスプライトMSが描画されている。スプライトA〜Cは背景レイヤよりも前面のレイヤに描画されるものとする。
図12(b)はマスク部分において描画されるのべ画素数を表している。ハッチング部分はマスクスプライトの描画による画素数である。この画素数は、図示する通り、マスクスプライト数が増えるほど、増大する。図中には、マスクスプライト数N1,N2,N3の3通りでレイヤ切換を行った場合の様子を示した。マスクスプライト数N1でレイヤ切換を行った場合には、マスクスプライトによって描画された画素数が比較的少ないため、スプライトA〜Cを描画してもスプライトオーバーは生じない。N2でレイヤ切換を行った場合には、スプライトBの描画中にスプライトオーバーが生じる。従って、スプライトAは完全に表示され、スプライトBはマスクMSの一部が欠落して表示され、スプライトCはマスクMS部分が完全に欠落した状態で表示される。N3でレイヤ切換を行った場合には、スプライトAの描画中にスプライトオーバーが生じる。従って、スプライトAはマスクMSの一部が欠落して表示され、スプライトB、CはマスクMS部分が完全に欠落した状態で表示される。
変形例(2)によれば、レイヤ切換位置の設定によって、スプライトオーバーが生じたり、生じなかったりする。従って、マスクが演出表示中に不規則に生じることになり、興趣に富んだ演出表示を実現することが可能となる。
以上、本発明の種々の実施例について説明したが、本発明はこれらの実施例に限定されず、その趣旨を逸脱しない範囲で種々の構成を採ることができることはいうまでもない。上述の各実施例および変形例は、適宜、組み合わせて用いることも可能である。実施例および変形例では、LCD16を表示装置として用いる場合を例示したが、本発明は他の種類の表示装置を用いる場合にも適用可能である。