MSXでキャラクターを表示するプログラムをまず作った(はず)。
1つのスプライト(キャラクター)は16ドット×16ドットで構成。
方眼紙に色を塗って、キャラクターをデザインする。
某ドットイートゲームっぽいのはご愛敬でw
そして、塗りつぶしたところを1、塗ってないところを0に見立てて、2進数に変換する。
これを2進数から16進数に変換。*1これをデータとしてプログラムに書いて、スプライトに定義すると、画面に表示できるようになる。
プログラムは全く覚えていないwので、改めてネットで調べながら、エミュレータで書いてみた。
参考サイト:
www.nyaonyao21.com
10 SCREEN1,2:CLS 20 FOR I=0 TO 15 30 READ DT$ 40 L$=L$+CHR$(VAL("&H"+LEFT$(DT$,2))) 50 R$=R$+CHR$(VAL("&H"+RIGHT$(DT$,2))) 60 NEXT I 70 SPRITE$(0)=L$+R$ 80 PUT SPRITE 1,(100,50),10,0 90 END 100 DATA 0FF0,3FFC,7FFE,FFFE 110 DATA 7FFF,1FFF,03FF,01FF 120 DATA 00FF,01FF,03FF,1FFF 130 DATA FFFE,7FFE,3FFC,0FF0
簡単にプログラムの解説を。
READ~DATA文では、データを1つずつ順番に読み込める。それをデータの個数、16回分をFOR文でループする。
MSXのスプライトは基本8×8ドットで、16×16ドットの時は、左上、左下、右上、右下の順で登録が必要。なので、こんなことしていたかは全く覚えていないがw、取得した16進数の横のラインを、左右2バイトずつに分けて結合していく。
そのあたりが、LEFT$,RIGHT$を記述している40、50行になる。
70行で、スプライト番号0番に、スプライトの定義を行って、80行で表示している。
実行するとこんな感じ。
次回は、表示したスプライトを、キー操作で動かすプログラムを追加してみる。
*1:2進数のままでもいいのだが、データを入力する文字数が増えるので、16進数にすることで圧縮している。