メガドライブで画像や文字を表示するためには、扱える画像形式を理解する必要があります。SGDKにはResCompという画像ファイルや音楽ファイルを扱うための便利なツールが組み込まれていて、比較的簡単に画像を組み込めるようになっています。今回はそれらの使い方をまとめてみます。
<メガドライブの画像形式について>
これは、メガドライブで表示可能な512色です。各チャンネルが3ビットのRGBカラー(赤・緑・青それぞれが8段階)です。
同じようにマップの画像を作成し16色で保存
SGDKではフォントも用意されていますが、ATARI FONTに変更しました。ASCIIコードの0x20-0x7F(32-127)までの文字です。
<画像と文字を表示してみる>
実際にメガドライブで画像と文字を表示してみます。
画像を入れるresフォルダをプロジェクトファイルの中に新規作成します。先ほどの画像ファイル(gr_font.png, gr_map.png)を作成したresフォルダに保存します。更にResCompで画像を読み込むためのファイルgfx.resを新規作成し、以下の2行を書き込みます。gfx.hは自動で作成されるようです。
IMAGE image_font "gr_font.png" -1
IMAGE image_map "gr_map.png" -1
main.cは以下のように
{
VDP_loadFont(image_font.tileset, TRUE);
VDP_loadTileSet(image_map.tileset, TILE_MAP, FALSE);
VDP_setPalette(PAL0, image_map.palette->data);
VDP_setTextPalette(PAL0);
VDP_setMap(PLAN_A, image_map.map, TILE_ATTR_FULL(PAL0, 0, 0, 0, TILE_MAP), 1, 0);
VDP_drawTextBG (PLAN_A, "HIGH SCORE", 30,1);
VDP_drawTextBG (PLAN_A, " 000000", 30,3);
VDP_drawTextBG (PLAN_A, "1UP", 30,5);
VDP_drawTextBG (PLAN_A, " 000000", 30,7);
VDP_drawTextBG (PLAN_A, "CREDIT 00", 30,26);
{
// program
}
return (0);
}
<ResCompで扱うImage構造体について>
SGDKでは画像を扱う構造体であるImageが用意されており、Palette・TileSet・Map構造体のポインタがメンバとして含まれます。ResCompでPNGファイルを読み込むと、Image構造体として読み込まれます。
typedef struct
{
Palette *palette;
TileSet *tileset;
Map *map;
} Image;
このような構造体です。
Palette構造体は、512色中どの16色を使うかの色指定データがあります。
typedef struct
{
u16 index;
u16 length;
u16 *data;
} Palette;
TileSetは画像に使われる、タイルデータ(パターン)が格納されています。
typedef struct
{
u16 compression;
u16 numTile;
u32 *tiles;
} TileSet;
Mapは画像のサイズやタイルマップ(画像のどの場所でどのパターンが使用されているかのデータ)が格納されています。
typedef struct
{
u16 compression;
u16 w;
u16 h;
u16 *tilemap;
} Map;
*SGDKについて公式サイトに詳しく説明されています。
*間違った内容があるかもしれません。もしお気づきになられたらコメントでご指摘して頂いたらうれしい限りです。