# グラフィック ゲームボーイでは、160×144ピクセルの液晶ディスプレイにグラフィックを出力していますが、その際、レンダリングを容易にするために、非常に複雑な仕組みを採用しています。 スプライトやグラフィックといった用語の定義は、プラットフォームやゲーム機、ユーザーやコミュニティによって大きく異なります。また、これらの定義の中には、低レベル(ハードウェア)のツールを指すものと、高レベルな抽象概念を指すものがあることを覚えておいてください。 ここではゲームボーイで、画面描画に関する用語の説明を行います。 ## タイル 他のレトロシステムと同様に、ゲームボーイはピクセルを個別に操作することはありません。これはCPUコストが高くなるからです。 その代わり、ピクセルはタイル(またはパターン)と呼ばれる8x8の正方形にまとめられ、ゲームボーイのグラフィックの基本単位とされています。 タイルには色情報は含まれていません。その代わりにタイルの各ピクセルには、0から3までのカラーIDが割り当てられています。 そのため、ゲームボーイの画面描画のフォーマットは2bpp(2bit per pixel)とも呼ばれています。 タイルが背景やウィンドウに使用される場合は、このカラーIDがパレットに関連付けられます。OBJでタイルを使用する場合は、ID1~3がパレットに対応していますが、ID0は透明を意味しています。 ## パレット パレットとは、色データの配列のことで、ゲームボーイの場合は4色です。モノクロ機とカラー機では、パレットの格納方法が異なります。 パレットを変更することで、一部のグラフィックを素早く点滅させたりしてダメージ、無敵、雷雨などのエフェクトや、画面のフェードアウトを表現することが可能になっています。 ## レイヤ ゲームボーイには、後ろから順に**背景**、**ウィンドウ**、**オブジェクト**の3つの層が重なって画面を形作っています。 背景をオブジェクトの前に表示できる機能があったりと、多少の例外はありますが、このレイヤ構造を意識しておくと理解の手助けになるでしょう。 ### 背景レイヤ BGレイヤ(BackGround layer)と呼ぶ時もあります。 背景は、タイルマップで構成されています。タイルマップとは、大きな格子状のタイルのことです。 しかし、タイルそのものの2bppデータがタイルマップに直接書き込まれるわけではなく、単にタイルの2bppデータへの参照を含んでいるだけです。 このため、タイルの再利用は、CPU時間と必要なメモリ空間の両方において非常に安価であり、8KiBというわずかなビデオRAMをうまく利用するための主なメカニズムとなっています。 2つのIOレジスタ(SCX, SCY)に書き込むことで、背景を全体としてスクロールさせることができます。これにより、スクロールも非常に少ないコストで行うことができます。 ### ウィンドウレイヤ ウィンドウは、背景の上にある第2の背景レイヤーのようなものです。透過性はなく、常に長方形で、左上のピクセルの位置だけを制御できるという、かなり限定的なものです。 例えば、スーパーマリオブラザーズ3のように、スクロールするゲームの中で、固定されたステータスバーのような使い方が考えられます。 ### オブジェクトレイヤ OBJレイヤと呼ぶ時もあります。 背景レイヤは、全体としてスクロールする要素には有効ですが、プレイヤーのように個別に移動する必要のあるオブジェクトには実用的ではありません。 オブジェクトレイヤは、このギャップを埋めるために設計されています。オブジェクトは、1枚または2枚のタイル(8x8または8x16ピクセル)を重ねたもので、画面上のどこにでも表示できます。 ゲームによっては、いくつかのオブジェクトを組み合わせて、8x8(or 8x16)よりも大きなグラフィック要素を描き、それらをゲーム(のソースコード)内でスプライトと呼んでいる場合もあります。(メタスプライトとも呼ばれる場合もあります)