背景画像を表示する

背景画像を画面に表示し、少しずらします

2022-11-15
画像、ResCompに関する記述を追加
2022-06-12
公開

コード

res_image.res

  1. PALETTE bg_palette "kyotosi_title.png"
  2. TILESET bg_tileset "kyotosi_title.png" NONE ALL
  3. MAP bg_map "kyotosi_title.png" bg_tileset NONE

main.c

  1. #include <genesis.h>
  2. #include "res_image.h"
  3.  
  4. int main(u16 hard) {
  5. // タイルの初期位置
  6. u16 index = TILE_USERINDEX;
  7.  
  8. // 背景画像のタイル情報セットを読み込む
  9. VDP_loadTileSet(&bg_tileset, index, DMA);
  10. // 背景画像のパレット情報(色)を設定する
  11. PAL_setPalette(PAL0, bg_palette.data, DMA);
  12. // Map構造体をBG_Aプレーンに作成する
  13. Map* bg = MAP_create(&bg_map, BG_A, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, index));
  14. // 指定位置に背景を移動させたい場合(タイル単位、右下が基準、左上方向が正)
  15. MAP_scrollTo(bg, 1, 2);
  16.  
  17. // メインループ
  18. while (TRUE) {
  19. SYS_doVBlankProcess();
  20. }
  21.  
  22. // Map構造体をメモリから解放する
  23. MEM_free(bg);
  24.  
  25. return 0;
  26. }

実行結果

上記コードをSGDK1.70でコンパイルし
Gens v2.14 Souvenirで実行したスクリーンショット

解説

画像

メガドライブ(Genesis)は16色を1セットとするパレットを4つ使うことが出来ます。
当コードでは背景を1パレットだけ使用して表示するために、フルカラー写真から16色に減色した画像を用意しました。
保存形式はPNG(8bit)です。BMP画像も使用できますが、こちらも8bitでなければいけません。

ResComp

画像ファイルをSGDK内で扱うには、ResComp1を利用します(利用せずに扱うことも可能です)。
ResCompの使用にはresファイルの作成(当ページではres_image.res)と、resファイルから作成されるヘッダファイル(.h)のインクルードが必要(当ページではmain.c 2行目)になります。

背景(MAP)

公式wikiによると、使いやすくて大きな背景マップを処理できるので、標準でMAP APIを使うべきとのことです。
SGDKに同梱されているサンプル「sonic」では実際に10240x1280ピクセルという巨大な画像ファイルを読み込んでいます。
23行目のMEM_free命令には到達しないのでなくても良いのですが、一応「sonic」に合わせて記述しています。

ダウンロード

1画像や音楽データをSGDKコード内で使える形に変換してくれるツールです。
様々な形式に対応しており、また各形式によって指定できるオプションが異なるため、rescomp.txt(sgdk\bin\rescomp.txt)を確認することを推奨します。