2019/02/10

ウィンドウ面を表示してみよう

ゲームボーイにはBG面の他にウィンドウ面というものがあります。
簡単に説明すると、BGの上に表示できる、もう1枚のBGみたいなものですが
制限が色々あるので使い勝手は微妙なところです。

まず、表示できるタイルデータはBGと共通です。

表示はSHOW_WIN、非表示はHYDE_WINで行います。
表示内容はset_win_tiles()で設定します。
BGみたいにgotoxy()命令やsetchar()命令とか無さそうなので
表示にひと手間かかります。

そして重要なことですが、下のBGを透過させることが出来ません。
透過させるにはウィンドウ面をスクロールさせて
ウィンドウ面の外側にBGを表示させるしかありません。
スクロールにはmove_win(横スクロール位置, 縦スクロール位置)命令を使いますが
ここにも制限があり、横スクロール位置は0~166、縦スクロール位置は0~143でないと
ウィンドウ面は表示されません。
ちなみに横スクロール位置は7ドット左にずれてしまうようですので
画面の左上にピッタリ表示させるにはmove_win(7,0)とする必要があります。
(かといってmove_win(0,0)にしても左上に設定したタイルの右端は
 何故か表示されません…仕様なのかエミュレータのバグなのかは不明です)

これらの制限から考えるに、ウィンドウ面は基本的に
画面の下部や右部にスコアやステータスなどを表示する際に適しています。

ファミコンではラスタースクロールで画面を分割したりしますが
それよりは簡単に実装できます。