「ワンダースワンゲームプログラミング」なかなか良い本です。
https://www.amazon.co.jp/dp/4797314109/
サンプルプログラムを16色カラー表示にしてみます。
https://web.archive.org/web/20090328071323/http://page.freett.com:80/gameboy/wwpoka.html
魔女本のソースをWSSIM 0.8a対応にしたやつ(c06)
http://www.geocities.jp/parallel_computer_inc/c06stg.zip
void main() { int i, j; static unsigned short cmap; srand(1); wwc_set_color_mode(COLOR_MODE_16PACKED); display_control(DCM_SCR1 | DCM_SPR); /* lcd_set_segments(LCDSEG_VERTICAL); */ sprite_set_range(0, 128); /* 画像を登録 */ wwc_font_set_colordata(0, 4, bmp_bg); wwc_font_set_colordata(4, 9, bmp_own); wwc_font_set_colordata(13, 2, bmp_shot); wwc_font_set_colordata(15, 9, bmp_enemy1); wwc_font_set_colordata(24, 9, bmp_enemy2); wwc_font_set_colordata(33, 9, bmp_enemy3); wwc_font_set_colordata(42, 4, bmp_deth); /* パレットを登録 */ for (i = 0; i < 16; i++) { wwc_palette_set_color(1, i, pal_bg[i]); wwc_palette_set_color(13, i, pal_bg[i]); wwc_palette_set_color(12, i, pal_bg[i]); } START: /* スプライトを128個使用する準備。 全て画面外に置いておき、使用状況監視テーブルを0でクリア。 */ for(i = 0; i < 128; i++) { sprite_set_location(i, 225, 145); used_sprites[i] = 0; } /* キャラクタ管理テーブルを初期化 */ for(i = 0; i < 100; i++) { objs[i].x = objs[i].y = objs[i].z = objs[i].w = objs[i].h = objs[i].enemy_flag = objs[i].hit_x = objs[i].hit_y = objs[i].hit_w = objs[i].hit_h = 0; for(j = 0; j < SMAP_MAX; j++) objs[i].sp_map[j] = 0; objs[i].move = NULL; } /* 各キャラクタを定義 */ set_base_obj(); /* 自機を生成 */ create_obj(0, 60, 60); /* 背景に宇宙空間を作成 */ for(i = 0; i < 32; i++) for(j = 0; j < 32; j++) { cmap = ((abs(rand()) % 4) << 14) | (0x200); if(abs(rand()) % 4 == 0) cmap |= abs(rand()) % 4; screen_set_char(SCREEN1, i, j, 1, 1, &cmap); } /* メインループ */ for(scr1_x = 0, scr1_y = 30, j = 0; 1; scr1_x++) { /* wait */ for(i = 0; i < 5000; i++); /* 全キャラクタ移動。STARTボタンが押されたら終了。 */ if(move_obj()) break; /* 新たな敵機登場 */ new_obj(); /* 当たり判定。自機が当ったら、少し待って終了。 */ if(obj_hit()) j = 50; /* 画面を更新 */ update_obj(); /* 背景スクロール */ screen_set_scroll(SCREEN1, scr1_x, scr1_y); /* 自機が当ったら、少し待って終了 */ if(j) j--; if(j == 1) break; } goto START; }