12.グラフィック設定について2




SUB_GFXの中身ついて詳しく説明します。
GET_DRAW_INFOルーチンを呼び出すと、そのスプライトに対応したOAMインデックスがYレジスタに格納されし、
$00にスプライトの画面上でのx座標が、$01に画面上でのy座標が代入されます。
OAMインデックスはスプライト毎に一意に定まるので、SUB_GFXを2回以上呼び出して、
スプライト2つ分のグラフィックを描画することは出来ません。
次に、$0300,yから順に1タイル毎のグラフィックの設定を書き込んでいきます。
1つのタイルにつき、4つ分のRAMを使います。
$300,y 第1タイルの画面上でのx座標
$301,y 第1タイルの画面上でのy座標
$302,y 第1タイルのタイル番号の下位バイト
$303,y 第1タイルの属性
$304,y 第2タイルの画面上でのx座標
$305,y 第2タイルの画面上でのy座標

となります。
タイルの属性のフォーマットは以下の通りです。
bit0 SP3,4のタイルを使うなら1
bit1-3 パレット番号の下位3bit
bit4-5 描画の際の優先度。0ならオブジェクトの裏側に描画
bit6 左右反転するなら1
bit7 上下反転するなら1
また、タイル毎に、描画モード(サイズが8x8か16x16か)を指定できます。
X=Y/4とすると、
$460,x 第1タイルのサイズ
$461,x 第2タイルのサイズ
$462,x 第3タイルのサイズ

8x8のサイズなら0を、16x16のサイズなら2を入力します。
必要な分のタイルの設定が終わったら、アキュムレータ(A)に設定したタイル数-1の値を入れ、
タイルの描画モード(サイズ)指定を行わなかった場合は、Yレジスタに0か2を(8x8か16x16か)入れ、
行った場合はYレジスタにFFを入れ、$01B7B3を呼び出します。
サンプルでは、cfgファイルで設定した値を読み込んでいましたが、
これらの値を直接指定することで、1タイル毎に、また条件によって
タイルの大きさや用いるパレット番号などを変えることができます。