タイル表示を移植しやすいように、機種依存と非依存部分を分けようと考えてます。以下のような感じで。なにかコメントあればおねがいします>id:xppm 様、 id:xdd
ルーティン名は整理しようと思ってて、現行のと改訂案がごっちゃになってます。


タイル描画の流れ

                              • -

タイル内部イメージ tiles
↓重ね合わせ、合成 tile_draw_buf ->tile_draw_grid->tcache_find_id
->tcache_compose->tcache_overlay->CopyImg
キャッシュ内部イメージ tcache_img
↓コピー
画面バックアップ内部イメージ scr_buf
↓転送
画面

外部から呼ばれるルーティン

                                                                                      • -

void tile_draw_cursor(int x, int y, int flag)
void tile_draw_bolt(int x, int y, int fg)
void tile_draw_buf(short unsigned int *tileb)

ミニマップ
void display_gmap_aux(unsigned char *buf)


機種共通部分

                                                      • -

static void tile_draw_grid(int kind, int xx, int yy);
画面の位置 xx,yy 種類kind の部分を描画するためのデータをまとめて下位ルーチンに渡す。
kind はたとえば Qater View だと二種類グリッドがあるのでそれを区別。
static int tcache_find_id(int kind, int *fg, int *bg, int *is_new)
fg, bg の組み合わせをサーチし、あったらキャッシュ番号を返す。なければ
新しく合成する。
static void tcache_compose(int ix, int *fg, int *bg);
キャッシュ番号 ix に fg, bg の重ね合わせ描画を行う
static void tcache_overlay(img_type img, int idx, int tile, int region, int *copy)
キャッシュ img の idx 番目の位置に tile 番のタイルの領域番号 region の部分を重ねる。
copy==1 の時はコピー。

static void clear_tcache();
キャッシュ破棄
static void init_tcache();
キャシュ初期化
static void show_tilemap();


機種依存、内部イメージ操作関係

                                                            • -

img_type, color_type は機種毎に typedef
extern img_type InitImg(int wx, int wy, img_type img);
内部イメージ img を作成、ポインタを返す
extern void ClearImg(img_type img, color_type color);
内部イメージ img を color でクリア
extern void CopyImg(img_type src, int sx, int sy, int wx, int wy,
img_type dest, int dx, int dy, int copy);
内部イメージ src の sx,sy から wx,wy の矩形をdest の dx,dy へ描画。
copy==1 ならコピー、0 なら透明色を抜いて描画
extern void CopyImgMesh(..
上と同じ。黒メッシュをかける(視界外のタイル)
extern img_type tiles;
タイルの内部イメージ。各機種の初期化ルーチンで読みこむ

追記:クオータービューモード、とりあえず完成の図