ヤサコ(アニメキャラの名前)を描画するプログラムです。
プログラムファイル(yasako.wb)のダウンロードはこちら。パソコンでダウンロードする場合はこちらがいいでしょう。ダウンロードしたファイルをW-ZERO3にコピーしてください。
W-ZERO3単体でダウンロードする場合は以下のものがいいでしょう。ただし、圧縮ファイルを解凍するツール(GSFinderなど)が必要です。
プログラムファイルをLZH形式で圧縮したものはこちら。
ZIP形式で圧縮したものはこちら。
![]() |
実行するとこうなります。液晶の小さい画面に表示して、かつ目を細める(笑)と、意外にそれっぽく見えます。「あー可愛い」。ただそんだけ。 「こんなことをして、なんの意味があるの?」 「アニメキャラなんて実在しないじゃん!」 いいからほっといてください(T_T)! ……ではなくて、プログラム的に意味があるんですよ、一応。 その「意味」とやらがちょっと分かりづらいと思うので、以下に詳しく説明します。 |
ワンべぇWMの最大の欠点は、外部ファイルにアクセスできないことだと思います。画像を読み込んで表示したり、データを書き出して保存したりできません。ゲームのセーブくらいなら「復活の呪文」形式でやれなくもなさそうですが、画像ファイルが扱えないのは痛い。
画像ファイルの読み込みができないならプログラムで記述するしかないわけですが、ここにも難関があります。ワンべぇWMはDATAやRESTOREといった構文がないので、そのままでは大量のデータを一括で扱うことができません。たとえば、
| 100 fcolor ○,○,○:pset ×,× 110 fcolor △,△,△:pset □,□ |
といった記述を、必要なピクセルの数だけひたすら繰り返さなければなりません。これはきつい。かといって
| 100 @(○)=× 110 @(△)=□ |
のように、いちいち配列に代入していくのも面倒。
いっそグラフィックの使用はあきらめて、文字のみでやるというのもひとつの手です。「天元突破ドリラーマン」はそうしました。
しかし、ウォーシミュレーションのマップなんかを考えると、どうしても配列に取り込んで処理したい場合があります。その解決策として、一旦print文で表示してからscreenpeekで値を取得し、配列に代入することにしました。そのプログラムの具体例として、今回はとりあえずヤサコを描画してみたわけです。僕がヤサコを好きで好きでたまらんから、というのもありますけど。←あるんだ!
![]() |
元画像(部分)。あらかじめ16色に減色してあります。今回はこれをprint文で表示できる文字データに置き換えます。 |
ピクセルを1個ずつ調べて、その色に応じた文字データを出力するプログラムを作ればいいわけですが、ワンべぇWMでは不可能だし、ワンべぇWM以外の言語でプログラムを作るのでは本末転倒です。だいたい、僕は古典的でTinyなBASICしか知らんので、今さらVBでとか言ってもできません。
しょうがないので、今回はフォトショップで作業しました。電車内プログラミングがW-ZERO3の醍醐味(笑)なのに、自宅の母艦で作業するというのも本末転倒な感じですが、ほかにやりようがないので目をつぶりましょう。
![]() |
元画像に重ねて、字だけのレイヤーを作ります。今回はAからPまで16色分作りました。 |
![]() |
元画像から1色選択します。 |
![]() |
ラスタライズした文字レイヤーに、上記の選択範囲をレイヤーマスクとして適用します。 |
![]() |
16回繰り返して、各色に文字を割り付けました。 |
問題はこの後です。こうして作った文字の羅列をどうやってフォトショップから出力するか。はっきりいってどうにもならないので、手入力でテキストエディタに書き写しました。←工エエェェ(´д`)ェェエエ工
![]() |
で、print文で表示してからscreenpeekで文字コードを取得し、配列に代入します。グラフィックを描画するときは、配列の値に応じた色で点を打っていくだけです。 ←どうでもいいけど、ちょっとホラーな雰囲気。 |
途中の処理が見えるように上記の例では白色で文字列を表示していますが、bcolorとfcolorを同じ色にすれば見えません。今回は16色で作りましたが、手間を惜しまなければフルカラーも可能です。←文字データに漢字を総動員するとか(笑)。
面倒というか分かりづらくて困ったのが、画面上下にある青色の帯部分ですね。こちらからは見えませんが、帯の下にも画像や文字が表示されています。実際に見える範囲に描画するため、pset文ではY座標を補正しています。上のprint文の例では、わざと非表示範囲にも出力しました。青帯のせいで見えなくても、screenpeekでちゃんと値が取得できます。
実行すると分かりますが、print文が遅いわりに、screenpeekによる取り込みは一瞬で終わります。pset文もまあまあ速い。テキストとグラフィックでは画面解像度が違うので一概に比較できませんが、場合によっては、文字キャラクタを使ってゲームを作るよりもpsetでグラフィックキャラクタを表示するほうが速いかもしれません。