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

・パレットを操作してみる

今までパレットについて触れなかったのは,ムダだからだ。
はっきり言って,元々発色の悪い物に対して,少々の工夫をしても効果は無い。
そんな事を考える分,面白いゲーム案の1つでも考えた方が有効である。
……と言う理由で,殆どやる気は無い状態で,解析してみる。

マニュアルを見ると,画面はモノクロ16階調表示だと書いてある。
実質5〜6階調ぐらいにしか見えないが? そもそも黒が無いゾ。
その中から,同時発色は8色らしい。
更にその中から4色を選んでキャラクタにセットする。

とにかく,デフォルトで設定されているLCDパレットを表示してみよう。

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

void main(void){
unsigned long LCDpalette;
char hWork[128];

/*LCDカラー取得*/
LCDpalette=lcd_get_color();

text_screen_init();
sprintf(hWork, "%lx", LCDpalette);
text_put_string(0, 0, hWork);
key_wait();
}

結果は「FCA86420」だった。
つまり,16階調を1つおきに定義しているのがデフォルトパレットだ。

次にデフォルトでセットされているキャラクタパレットを表示してみよう。

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

void main(void){
unsigned short Charapalette[16];
char hWork[16][128];
int i;

/*キャラクタカラー取得*/
for (i=0; i < 16; i++){
Charapalette[i]=palette_get_color(i);
}

text_screen_init();
for (i=0; i < 16; i++){
sprintf(hWork[i], "%x", Charapalette[i]);
text_put_string(0, i, hWork[i]);
}
key_wait();
}

結果は,下記の通りだった。実際のパレットも合わせて書く。

キャラクタパレット番号

LCDパレット割り当て

実際のパレット

0

7530

FA60

1

7532

FA64

2

7000

F000

3

7002

F004

4

7300

F600

5

1000

2000

6

0000

0000

7

4200

8400

8

7530

FA60

9

1426

284A

10

3000

6000

11

1040

2080

12

7400

F800

13

7000

F000

14

3060

60C0

15

1000

2000


PART1では,0番と12番を利用していた為,実際には16階調中5色を使っていた事になる。
つまり,私の見た目で5〜6階調なので,既に限界まで発色していると思って良いだろう。

・発色の良い色をピックアップ

世の中のあらゆる表示媒体には,発色が得な色と不得意な色がある。
そこで,少しでも発色が良い色,または組み合わせを探してみる。
ディザリング効果の高い組み合わせも,きっとあるだろう。

問題は,16色中8色しか同時に発色出来ないところだ。
これでは一発表示で検証する事が出来ない。

まずは,0〜7と8〜Fに分けて表示してみようと思う。
表示が薄いので,隣り合う色の違いは微妙なのでは無いかと考えられる為だ。
現在LCDカラーに設定されている通り,1つ置きで良いのか? の検証になる。

#include <sys/bios.h>

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

/*タイルキャラクタ定義*/
unsigned short tile0[]={0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
unsigned short tile1[]={0x00FF, 0x00FF, 0x00FF, 0x00FF, 0x00FF, 0x00FF, 0x00FF, 0x00FF};
unsigned short tile2[]={0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00};
unsigned short tile3[]={0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF};
/*タイルキャラクタ番号定義*/
unsigned chara_tile0[]={0+512};
unsigned chara_tile1[]={1+512};
unsigned chara_tile2[]={2+512};
unsigned chara_tile3[]={3+512};
unsigned chara_tile4[]={4+1024};
unsigned chara_tile5[]={5+1024};
unsigned chara_tile6[]={6+1024};
unsigned chara_tile7[]={7+1024};

void main(void){
/*指定レットを使ってサンプル表示*/

/*LCDカラーセット*/
lcd_set_color(0x0123, 0x4567);

/*パレットセット*/
palette_set_color(1, 0x0123);
palette_set_color(2, 0x4567);

display_control(DCM_SCR1);
font_set_colordata(100, 1, bmp_space);
screen_fill_char(SCREEN1, 0, 0, 28, 18, 100);

/*表示*/
font_set_colordata(0, 1, tile0);
font_set_colordata(1, 1, tile1);
font_set_colordata(2, 1, tile2);
font_set_colordata(3, 1, tile3);
font_set_colordata(4, 1, tile0);
font_set_colordata(5, 1, tile1);
font_set_colordata(6, 1, tile2);
font_set_colordata(7, 1, tile3);
screen_set_char(SCREEN1, 0, 0, 1, 1, chara_tile0);
screen_set_char(SCREEN1, 1, 0, 1, 1, chara_tile1);
screen_set_char(SCREEN1, 2, 0, 1, 1, chara_tile2);
screen_set_char(SCREEN1, 3, 0, 1, 1, chara_tile3);
screen_set_char(SCREEN1, 4, 0, 1, 1, chara_tile4);
screen_set_char(SCREEN1, 5, 0, 1, 1, chara_tile5);
screen_set_char(SCREEN1, 6, 0, 1, 1, chara_tile6);
screen_set_char(SCREEN1, 7, 0, 1, 1, chara_tile7);

key_wait();
}

lcd_set_color関数の値を色々変えて実験したところ,傾向が見えた。
本体に付いているコントラストダイアルによって,全然発色の濃度が変わる。
結論として,やはりパレット調整を行なってもムダである。

結局,デフォルトの「FCA86420」パレットが一番濃淡の変化を出せるので良い。
と言うことだった。
但し,これは私の見解であって,濃い色がにじみ易いと言う欠点もあるので,わざと薄い色だけを用いて作るのも有りだろう(コントラストを濃くされたら意味無いが……)

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