○ワンダーウィッチ[スピ魅を移植してみよう(その2)]

・マップ表示の大きさを考える

スピ魅の1マスの大きさは40×40pixcel,つまり5×5キャラクタだ。
また,画面に表示可能な縦のキャラクタは18で,既にメッセージ表示で5キャラクタ分使用しているので,残り13キャラクタ表示可能だ。
……とすると,画面上に縦2マスしか表示出来ない事になる(笑)
これではゲームとして成り立たない(^^;

仕方が無いので,強引に2×2キャラクタに縮小することにした。
これで縦6キャラクタ表示可能になる。
これもまた中途半端なので,縦5キャラクタ表示にする。

今回の製作では,CG操作を簡単にする為,白,黒,グレーの3色しか使っていない。
その為,非常に変なCGになるが,元が元なので気にしない事にする(^^;

・5×5のマップ表示をやってみる

用意した2×2キャラクタのCGを,横5×縦5に並べてみる。
その1で作成したソースに追加する。

/*キャラクタ定義*/
unsigned short bmp_mc01s[]={
0x0000, 0x0007, 0x001F, 0x001F, 0x003F, 0x003F, 0x003F, 0x003F,
0x0080, 0x00C0, 0x00F0, 0x00F8, 0x00F8, 0x00F8, 0x00F8, 0x00F8,
0x001F, 0x000F, 0x0003, 0x0001, 0x0001, 0x0003, 0x000F, 0x000F,
0x00F8, 0x00F0, 0x00C0, 0x0080, 0x0080, 0x0080, 0x00E0, 0x00F0
};

/*キャラクタ番号定義*/
unsigned chara_mc01s[]={8, 9, 10, 11};

void rSetMapC(void){
/*キャラクタ設定*/
font_set_colordata(8, 2*2, bmp_mc01s);
}

void rMapC(unsigned char hMode, int x, int y){
/*キャラクタを表示*/
switch (hMode){
case 1:
screen_set_char(SCREEN2, x * 2 + 1, y * 2 + 1, 2, 2, chara_mc01s);
break;
}
}

以下のように main関数を書き替える。
void main(void){
int x, y;
text_screen_init();
rMsgText("1234567890123456");
rMsgText("1234567890123456");
rMsgText("1234567890123456");
rWaku();
rSetMapC();
for (y=0; y < 5; y++){
for (x=0; x < 5; x++){
rMapC(1, x, y);
}
}
key_wait();
}

予想通り,ちゃんと表示されました(^_^)
……が,左上に余計なCGが表示されてしまう。そう言うものなのだろうか?(謎)

・マップデータを元にマップ表示をする

マップデータを定義して,自分を中心にマップを表示してみよう。
ソースに追加をする。

/*マップ定義*/
unsigned char md[]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
〜長いので中略〜
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};

void rMapView(int x, int y){
/*x,y位置を中心にマップ表示*/
int i, j;
unsigned char a;
for(j=0; j < 5; j++){
for(i=0; i < 7; i++){
/*マップデータを引き出す*/
a=md[(y + j - 2) * 50 + (x + i - 3)];
rMapC(a, i, j);
}
}
}

で,また main関数も書き替える。
void main(void){
text_screen_init();
rMsgText("1234567890123456");
rMsgText("1234567890123456");
rMsgText("1234567890123456");
rWaku();
rSetMapC();
rMapView(38, 19);
key_wait();
}

実行して一瞬,真っ白だと思ったが,木のCGしかセットしていなかったのを思い出した。
そこで,キャラクタを次々登録を行なったのだが……ここで大きな問題が起こった。
ずっと気になっていた,表示命令を出していないのに表示されてしまうCGがどんどん増えて行くのだ(;_;)

・ゴミCGの表示理由を追求する

ゴミCGをよく観察すると,登録したキャラクター順に並んでいる事が分かる。
どうみても,左上隅からキャラクタ8番から順に並んでいる。
つまり,デフォルト状態では,画面上にキャラクタが敷き詰められている事が分かる。

誰だ! キャラクタを敷き詰めたやつは! と思っていつ敷き詰められるのかを調べると……
text_screen_init();
こいつだった。
珍しくマニュアルを見ると「スクリーン全体をテキスト表示用に初期化します」と書いてある。
つまり,現状ではテキストを表示すると宣言したところにCGを表示している事になる(^^;

マニュアルの同じページに,部分初期化関数が書かれてあった。
text_window_init(Left, Top, Width, Height, 割り当てるフォントテーブルのベース);
最後のパラメータが何の事か分からない……
これはもうヤマカンでしか無いが,敷き詰めるキャラクタ番号の事だと思う。

今回のメッセージウィンドウの場合は,
unsigned chara_text[]={
511, 510, 509, 508, 507, 506, 505, 504, 503, 502, 501, 500, 499, 498, 497, 496,
495, 494, 493, 492, 491, 490, 489, 488, 487, 486, 485, 484, 483, 482, 481, 480,
479, 478, 477, 476, 475, 474, 473, 472, 471, 470, 469, 468, 467, 466, 465, 464
};
text_window_init(1, 14, 16, 3, chara_text);

コンパイルすると,エラーになった(;_;)
最後のパラメータの指定方法が間違っているものと思われる。
よく考えると,ベースと書いてある。フォントを使う最初の番号を指定すると言う意味だろうか?

text_window_init(1, 14, 16, 3, 494);
とする事で,うまく表示出来た(^_^)

……が,文字が表示されなくなった。
これは単純に,表示位置の指定は,このウィンドウの左上位置からのキャラクタ数で指定し直すと良いのだろうと予想出来る。

void rMsgText(char *hMoji){
static char sMoji[3][33];
/*文字を1行上に送る*/
strcpy(sMoji[0], sMoji[1]);
strcpy(sMoji[1], sMoji[2]);
/*最下行に送った文字列をセット*/
strcpy(sMoji[2], hMoji);
/*文字表示*/
text_put_string(0, 0, sMoji[0]);
text_put_string(0, 1, sMoji[1]);
text_put_string(0, 2, sMoji[2]);
}
のように,新しいウィンドウに位置を合わせる事でうまく表示された。

まだ問題がある。それは,変なキャラクタが画面上に敷き詰められている点である。
恐らく,何かキャラクタを表示させておかなければならないのだろう。

キャラクタ100番を0クリアして,画面に敷き詰める事にする。
その為に便利そうな関数を見つけた。キャラクタを画面に敷き詰める関数だ。

/*空白キャラクタ定義*/
unsigned short bmp_space[]={0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
/*キャラクタ番号定義*/
unsigned chara_space[]={100};

と定義して,初期化を行ないたいところで,その関数を呼び出す。
font_set_colordata(100, 1, bmp_space);
screen_fill_char(SCREEN2, 0, 0, 28, 18, chara_space);

……などとすると,エラーになる(^^;
キャラクタは必ず1つなので,直接キャラクタ番号を指定するのだろうか?
screen_fill_char(SCREEN2, 0, 0, 28, 18, 100);
当りだった(^_^)

・まとめ

間でソースがあると,自分でも意味不明になる為,まとめてここに書いておく。

#include <sys/bios.h>
#include <string.h>

/*空白キャラクタ定義*/
unsigned short bmp_space[]={0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};

/*キャラクタ定義*/
unsigned short bmp_waku0[]={0x0000, 0x0000, 0x0000, 0x0100, 0x0601, 0x0806, 0x0804, 0x1008};
unsigned short bmp_waku1[]={0x0000, 0x0000, 0x0000, 0xFF00, 0x00FF, 0x0000, 0x0000, 0x0000};
unsigned short bmp_waku2[]={0x0000, 0x0000, 0x0000, 0x8000, 0x6080, 0x1060, 0x1008, 0x0804};
unsigned short bmp_waku3[]={0x0804, 0x0804, 0x0804, 0x0804, 0x0804, 0x0804, 0x0804, 0x0804};
unsigned short bmp_waku4[]={0x0804, 0x1008, 0x1008, 0x6010, 0x8060, 0x0080, 0x0000, 0x0000};
unsigned short bmp_waku5[]={0x0000, 0x0000, 0x0000, 0x0000, 0xFF00, 0x00FF, 0x0000, 0x0000};
unsigned short bmp_waku6[]={0x1008, 0x0804, 0x0804, 0x0600, 0x0106, 0x0001, 0x0000, 0x0000};
unsigned short bmp_waku7[]={0x1008, 0x1008, 0x1008, 0x1008, 0x1008, 0x1008, 0x1008, 0x1008};
/*キャラクタ番号定義*/
unsigned chara_waku0[]={0};
unsigned chara_waku1[]={1};
unsigned chara_waku2[]={2};
unsigned chara_waku3[]={3};
unsigned chara_waku4[]={4};
unsigned chara_waku5[]={5};
unsigned chara_waku6[]={6};
unsigned chara_waku7[]={7};

/*キャラクタ定義*/
unsigned short bmp_mc01s[]={
0x0000, 0x0007, 0x001F, 0x001F, 0x003F, 0x003F, 0x003F, 0x003F,
0x0080, 0x00C0, 0x00F0, 0x00F8, 0x00F8, 0x00F8, 0x00F8, 0x00F8,
0x001F, 0x000F, 0x0003, 0x0001, 0x0001, 0x0003, 0x000F, 0x000F,
0x00F8, 0x00F0, 0x00C0, 0x0080, 0x0080, 0x0080, 0x00E0, 0x00F0
};
unsigned short bmp_mc02s[]={
0x0000, 0x0055, 0x0000, 0x002A, 0x0040, 0x0015, 0x0040, 0x0009,
0x0000, 0x0054, 0x0002, 0x00A8, 0x0002, 0x0050, 0x000A, 0x0020,
0x0052, 0x0000, 0x0055, 0x0000, 0x004A, 0x0020, 0x0085, 0x0028,
0x0049, 0x0004, 0x0050, 0x0002, 0x00A8, 0x0002, 0x0028, 0x0042
};
unsigned short bmp_mc03s[]={
0x0055, 0x004A, 0x0054, 0x00A9, 0x0056, 0x0029, 0x00D2, 0x0025,
0x0055, 0x00AA, 0x0044, 0x0099, 0x0066, 0x0011, 0x00EE, 0x0010,
0x009A, 0x0045, 0x00B4, 0x0025, 0x00AA, 0x0055, 0x00A4, 0x0029,
0x00AD, 0x0052, 0x00A5, 0x004A, 0x00B5, 0x004A, 0x0094, 0x0029
};
unsigned short bmp_mc04s[]={
0x0000, 0x007D, 0x00A0, 0x0029, 0x0002, 0x0052, 0x0005, 0x0028,
0x0000, 0x005A, 0x0006, 0x0050, 0x0004, 0x00D2, 0x0080, 0x002A,
0x0042, 0x0058, 0x0032, 0x00A4, 0x0001, 0x0056, 0x0001, 0x002A,
0x0080, 0x0036, 0x0084, 0x002A, 0x0000, 0x0064, 0x0092, 0x0040
};
unsigned short bmp_mc05s[]={
0x0000, 0x0000, 0x002A, 0x0000, 0x0040, 0x0012, 0x0000, 0x0044,
0x0000, 0x0000, 0x00AA, 0x0000, 0x0000, 0x0048, 0x0002, 0x0090,
0x0010, 0x0001, 0x0044, 0x0010, 0x0001, 0x0044, 0x0010, 0x0000,
0x0000, 0x000A, 0x0020, 0x0000, 0x0049, 0x0000, 0x0024, 0x0080
};
unsigned short bmp_mc06s[]={
0x0000, 0x0055, 0x0003, 0x0027, 0x004F, 0x003F, 0x009F, 0x0000,
0x0000, 0x0054, 0x00E2, 0x00E8, 0x00F9, 0x00FC, 0x00FE, 0x0000,
0x0040, 0x0000, 0x0886, 0x041A, 0x0856, 0x0806, 0x049A, 0x000C,
0xA854, 0xF804, 0xF804, 0xA854, 0x0001, 0x0000, 0x0000, 0x0000
};
unsigned short bmp_mc07s[]={
0x0000, 0x0000, 0x0094, 0x0003, 0x020D, 0x057A, 0x3609, 0x659A,
0x0000, 0x0000, 0x004A, 0x00C0, 0x8070, 0xB04C, 0xCC32, 0x9867,
0x54AB, 0x40B8, 0x40B0, 0x00C1, 0x0084, 0x0010, 0x0001, 0x0024,
0x17E8, 0x003F, 0x0304, 0x0003, 0x0048, 0x0000, 0x0022, 0x0008
};
unsigned short bmp_mc08s[]={
0x0020, 0x0075, 0x007B, 0x00FB, 0x0073, 0x0031, 0x0075, 0x0030,
0x0084, 0x00DE, 0x00CF, 0x00DE, 0x00CE, 0x009E, 0x00CC, 0x0086,
0x0005, 0x0071, 0x00FB, 0x007B, 0x0073, 0x0071, 0x0035, 0x0030,
0x0020, 0x009E, 0x00CF, 0x00DF, 0x00CE, 0x00AE, 0x008C, 0x00A6
};
unsigned short bmp_mc09s[]={
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0010, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000,
0x0000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
};
unsigned short bmp_mc10s[]={
0x0055, 0x0055, 0x0055, 0x0051, 0x0055, 0x0055, 0x0055, 0x0055,
0x0055, 0x0055, 0x0054, 0x0015, 0x0055, 0x0052, 0x0055, 0x004A,
0x0049, 0x0055, 0x00AA, 0x0055, 0x0054, 0x0053, 0x0055, 0x0095,
0x0055, 0x0055, 0x0054, 0x0095, 0x0055, 0x0052, 0x0055, 0x004A
};
unsigned short bmp_mc11s[]={
0x0000, 0x0000, 0x0000, 0x0003, 0x020D, 0x0D32, 0x225D, 0x2DD2,
0x0000, 0x0000, 0x0000, 0x00C0, 0x8070, 0xB04C, 0xCC32, 0x9867,
0x50AF, 0x609C, 0x8070, 0x00C0, 0x0080, 0x0000, 0x0000, 0x0000,
0x17E8, 0x003F, 0x0304, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000
};
unsigned short bmp_mc12s[]={
0x0055, 0x0055, 0x0055, 0x0051, 0x0055, 0x0055, 0x0055, 0x0055,
0x0055, 0x0055, 0x0054, 0x0015, 0x0055, 0x0052, 0x0054, 0x0054,
0x0049, 0x0055, 0x0055, 0x0055, 0x0055, 0x0052, 0x0055, 0x0048,
0x0055, 0x0020, 0x0054, 0x0050, 0x0045, 0x0010, 0x0042, 0x0014
};
unsigned short bmp_mc13s[]={
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0042,
0x0010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002,
0x0000, 0x0002, 0x0008, 0x0002, 0x0020, 0x0014, 0x0042, 0x0088
};
unsigned short bmp_mc14s[]={
0x0000, 0x0055, 0x0000, 0x002B, 0x0044, 0x0015, 0x0045, 0x0014,
0x0005, 0x0055, 0x0054, 0x0055, 0x00A5, 0x0055, 0x0054, 0x0095,
0x0055, 0x002A, 0x0055, 0x0055, 0x0049, 0x0055, 0x0055, 0x0055,
0x0055, 0x00A5, 0x0054, 0x0055, 0x0055, 0x0025, 0x0054, 0x0055
};
unsigned short bmp_mc15s[]={
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010,
0x0000, 0x00AA, 0x0000, 0x000A, 0x0000, 0x000A, 0x0000, 0x0002,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0000,
0x0000, 0x0080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
};
unsigned short bmp_mc16s[]={
0x0040, 0x005D, 0x00A5, 0x0049, 0x0055, 0x0055, 0x00AA, 0x0055,
0x0000, 0x0054, 0x0002, 0x0068, 0x0002, 0x0070, 0x008A, 0x0054,
0x0055, 0x0049, 0x0055, 0x0055, 0x0095, 0x0055, 0x00A9, 0x0056,
0x0054, 0x0055, 0x0054, 0x0025, 0x0055, 0x0054, 0x0055, 0x0055
};
unsigned short bmp_mc17s[]={
0x0000, 0x0055, 0x0000, 0x0028, 0x0040, 0x0000, 0x0020, 0x0040,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0081, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000
};
unsigned short bmp_mc18s[]={
0x0055, 0x0055, 0x0055, 0x0051, 0x0055, 0x002A, 0x0095, 0x0015,
0x0055, 0x0055, 0x0054, 0x0015, 0x0055, 0x00A5, 0x0054, 0x0055,
0x0054, 0x0013, 0x004C, 0x0001, 0x0055, 0x0001, 0x0054, 0x0001,
0x0095, 0x0055, 0x0054, 0x0055, 0x0049, 0x0055, 0x002A, 0x0045
};
unsigned short bmp_mc19s[]={
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0091, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0040, 0x0000, 0x0050, 0x0000, 0x0050, 0x000A, 0x0020, 0x004A,
0x0000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0010
};
/*キャラクタ番号定義*/
unsigned chara_mc01s[]={ 8, 9, 10, 11};
unsigned chara_mc02s[]={12, 13, 14, 15};
unsigned chara_mc03s[]={16, 17, 18, 19};
unsigned chara_mc04s[]={20, 21, 22, 23};
unsigned chara_mc05s[]={24, 25, 26, 27};
unsigned chara_mc06s[]={28, 29, 30, 31};
unsigned chara_mc07s[]={32, 33, 34, 35};
unsigned chara_mc08s[]={36, 37, 38, 39};
unsigned chara_mc09s[]={40, 41, 42, 43};
unsigned chara_mc10s[]={44, 45, 46, 47};
unsigned chara_mc11s[]={48, 49, 50, 51};
unsigned chara_mc12s[]={52, 53, 54, 55};
unsigned chara_mc13s[]={56, 57, 58, 59};
unsigned chara_mc14s[]={60, 61, 62, 63};
unsigned chara_mc15s[]={64, 65, 66, 67};
unsigned chara_mc16s[]={68, 69, 70, 71};
unsigned chara_mc17s[]={72, 73, 74, 75};
unsigned chara_mc18s[]={76, 77, 78, 79};
unsigned chara_mc19s[]={80, 81, 82, 83};

/*マップ定義*/
unsigned char md[]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,5,5,5,5,5,5,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,5,5,5,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,5,5,5,5,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,5,5,5,5,5,9,15,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,4,4,7,7,7,4,1,1,19,9,15,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,4,4,5,5,5,4,4,1,1,2,2,19,9,9,15,2,2,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,4,4,4,4,4,5,5,5,4,4,1,1,2,4,2,2,2,19,9,15,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,4,4,4,8,8,8,8,8,8,8,8,8,8,4,4,4,4,4,5,5,5,4,4,4,2,2,4,2,2,2,2,2,2,19,15,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,4,4,4,4,4,8,8,8,8,8,8,8,4,4,4,5,5,5,5,5,5,2,4,2,4,2,2,2,2,2,2,2,2,2,9,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,4,4,4,4,4,4,4,4,8,8,8,4,4,5,5,5,5,5,5,5,4,2,6,2,2,2,2,14,6,2,2,14,6,2,19,15,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,4,2,14,12,2,2,2,14,12,2,2,14,12,2,2,2,9,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,4,2,2,4,10,2,2,4,2,10,2,4,2,10,2,2,2,2,9,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,2,2,4,2,2,18,16,4,2,2,10,4,2,2,18,16,2,4,17,13,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,4,4,2,2,2,2,4,10,4,4,4,10,2,2,2,2,10,2,2,9,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,3,3,3,3,3,3,4,4,5,5,5,5,5,5,2,2,6,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,16,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,3,3,3,3,3,3,4,5,5,5,5,5,2,4,2,2,2,2,2,2,2,2,2,10,2,2,2,2,10,2,2,10,2,17,13,18,10,16,2,2,0,0,0,0,0,
0,0,0,0,0,3,3,3,3,3,3,3,5,5,5,5,2,2,2,2,2,4,4,2,2,2,2,14,12,4,2,2,2,10,4,2,10,2,9,2,2,2,18,10,10,0,0,0,0,0,
0,0,0,0,0,3,3,3,3,3,3,3,5,5,5,9,15,4,4,4,2,2,2,4,2,2,2,10,2,4,2,2,14,12,2,2,10,2,9,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,3,3,3,3,3,3,3,3,5,5,2,19,9,15,2,2,2,4,2,2,2,14,12,2,2,2,2,10,2,2,2,10,17,13,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,2,2,2,19,15,2,2,4,2,4,2,10,2,2,2,2,14,12,2,2,14,12,9,2,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,2,2,2,19,9,15,2,4,2,2,6,2,2,2,2,6,2,2,4,6,2,9,2,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,19,9,15,4,2,2,2,4,2,2,2,2,4,4,2,17,13,2,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,19,9,15,4,2,2,2,4,2,2,2,17,9,13,2,2,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,19,9,9,9,9,9,9,9,9,13,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};

void rMsgText(char *hMoji){
static char sMoji[3][33];
/*文字を1行上に送る*/
strcpy(sMoji[0], sMoji[1]);
strcpy(sMoji[1], sMoji[2]);
/*最下行に送った文字列をセット*/
strcpy(sMoji[2], hMoji);
/*文字表示*/
text_put_string(0, 0, sMoji[0]);
text_put_string(0, 1, sMoji[1]);
text_put_string(0, 2, sMoji[2]);
}

void rWaku(void){
int i;
/*キャラクタフォント・セット*/
font_set_colordata(0, 1, bmp_waku0);
font_set_colordata(1, 1, bmp_waku1);
font_set_colordata(2, 1, bmp_waku2);
font_set_colordata(3, 1, bmp_waku3);
font_set_colordata(4, 1, bmp_waku4);
font_set_colordata(5, 1, bmp_waku5);
font_set_colordata(6, 1, bmp_waku6);
font_set_colordata(7, 1, bmp_waku7);
/*キャラクタを表示*/
screen_set_char(SCREEN2, 0, 13, 1, 1, chara_waku0);
for(i=1; i < 17; i++){
screen_set_char(SCREEN2, i, 13, 1, 1, chara_waku1);
}
screen_set_char(SCREEN2, 17, 13, 1, 1, chara_waku2);
for(i=14; i < 17; i++){
screen_set_char(SCREEN2, 17, i, 1, 1, chara_waku3);
}
screen_set_char(SCREEN2, 17, 17, 1, 1, chara_waku4);
for(i=16; i > 0; i--){
screen_set_char(SCREEN2, i, 17, 1, 1, chara_waku5);
}
screen_set_char(SCREEN2, 0, 17, 1, 1, chara_waku6);
for(i=16; i > 13; i--){
screen_set_char(SCREEN2, 0, i, 1, 1, chara_waku7);
}
}

void rSetMapC(void){
/*キャラクタ設定*/
font_set_colordata( 8, 2*2, bmp_mc01s);
font_set_colordata(12, 2*2, bmp_mc02s);
font_set_colordata(16, 2*2, bmp_mc03s);
font_set_colordata(20, 2*2, bmp_mc04s);
font_set_colordata(24, 2*2, bmp_mc05s);
font_set_colordata(28, 2*2, bmp_mc06s);
font_set_colordata(32, 2*2, bmp_mc07s);
font_set_colordata(36, 2*2, bmp_mc08s);
font_set_colordata(40, 2*2, bmp_mc09s);
font_set_colordata(44, 2*2, bmp_mc10s);
font_set_colordata(48, 2*2, bmp_mc11s);
font_set_colordata(52, 2*2, bmp_mc12s);
font_set_colordata(56, 2*2, bmp_mc13s);
font_set_colordata(60, 2*2, bmp_mc14s);
font_set_colordata(64, 2*2, bmp_mc15s);
font_set_colordata(68, 2*2, bmp_mc16s);
font_set_colordata(72, 2*2, bmp_mc17s);
font_set_colordata(76, 2*2, bmp_mc18s);
font_set_colordata(80, 2*2, bmp_mc19s);
}

void rMapC(unsigned char hMode, int x, int y){
/*キャラクタを表示*/
switch (hMode){
case 1:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc01s);
break;
case 2:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc02s);
break;
case 3:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc03s);
break;
case 4:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc04s);
break;
case 5:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc05s);
break;
case 6:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc06s);
break;
case 7:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc07s);
break;
case 8:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc08s);
break;
case 9:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc09s);
break;
case 10:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc10s);
break;
case 11:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc11s);
break;
case 12:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc12s);
break;
case 13:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc13s);
break;
case 14:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc14s);
break;
case 15:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc15s);
break;
case 16:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc16s);
break;
case 17:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc17s);
break;
case 18:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc18s);
break;
case 19:
screen_set_char(SCREEN2, x * 2 + 2, y * 2 + 2, 2, 2, chara_mc19s);
break;
}
}

void rMapView(int x, int y){
/*x,y位置を中心にマップ表示*/
int i, j;
unsigned char a;
for(j=0; j < 5; j++){
for(i=0; i < 7; i++){
/*マップデータを引き出す*/
a=md[(y + j - 2) * 50 + (x + i - 3)];
rMapC(a, i, j);
}
}
}

void main(void){
font_set_colordata(100, 1, bmp_space);
screen_fill_char(SCREEN2, 0, 0, 28, 18, 100);
text_window_init(1, 14, 16, 3, 464);
rMsgText("1234567890123456");
rMsgText("1234567890123456");
rMsgText("1234567890123456");
rWaku();
rSetMapC();
rMapView(38, 19);
key_wait();
}

トップメニューワンダーウィッチ