今回は、Laboratoryテーマ15「任意サイズのFONTキャラクタを指定座標に表示させたい」です。
MSXのテクニック的な事を紹介しているサイトを巡って感じたのですが、SPRITE関連の事はもの凄くしっかり説明されているところが多いのですが、FONTについてはパターン作成の説明は詳しいのですが、表示に関しては1文字表示するくらいのものしかありませんでした。(私が探せなかっただけかもしれませんが…。)
実際、巨大ボスキャラを実現しようとするとFONTを使うしかなく、できればそれを動かしたいですよね?
そこで、任意サイズのFONTキャラクタを指定座標に表示させるサブルーチンを公開します。
特に今回用に作ったわけではなく、元々自作ゲームに使っているサブルーチンを改良したものです。
(因みに、3DダンジョンRPGの壁や敵モンスターの描画もこのルーチンを使います。)
表示するキャラクタは下記【キャラクタコード表】のキャラクタコードで指定します。
【キャラクタコード表】
上位4ビット | |||||||||||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | ||
下位4ビット | 0 | π | 0 | @ | P | ` | p | ️ | ー | タ | ミ | た | み | ||||
1 | 月 | ┴ | ! | 1 | A | Q | a | q | あ | 。 | ア | チ | ム | ち | む | ||
2 | 火 | ┬ | " | 2 | B | R | b | r | い | 「 | イ | ツ | メ | つ | め | ||
3 | 水 | ┤ | # | 3 | C | S | c | s | う | 」 | ウ | テ | モ | て | も | ||
4 | 木 | ├ | $ | 4 | D | T | d | t | ○ | え | 、 | エ | ト | ヤ | と | や | |
5 | 金 | ┼ | % | 5 | E | U | e | u | ● | お | ・ | オ | ナ | ユ | な | ゆ | |
6 | 土 | │ | & | 6 | F | V | f | v | を | か | ヲ | カ | ニ | ヨ | に | よ | |
7 | 日 | ─ | ' | 7 | G | W | g | w | ぁ | き | ァ | キ | ヌ | ラ | ぬ | ら | |
8 | 年 | ┌ | ( | 8 | H | X | h | x | ぃ | く | ィ | ク | ネ | リ | ね | り | |
9 | 円 | ┐ | ) | 9 | I | Y | i | y | ぅ | け | ゥ | ケ | ノ | ル | の | る | |
A | 時 | └ | * | : | J | Z | j | z | ぇ | こ | ェ | コ | ハ | レ | は | れ | |
B | 分 | ┘ | + | ; | K | [ | k | { | ぉ | さ | ォ | サ | ヒ | ロ | ひ | ろ | |
C | 秒 | × | , | < | L | \ | l | | | ゃ | し | ャ | シ | フ | ワ | ふ | わ | |
D | 百 | 大 | - | = | M | ] | m | } | ゅ | す | ュ | ス | ヘ | ン | へ | ん | |
E | 千 | 中 | . | > | N | ^ | n | ~ | ょ | せ | ョ | セ | ホ | ゛ | ほ | ||
F | 万 | 小 | / | ? | O | _ | o | っ | そ | ッ | ソ | マ | ゜ | ま |
※ BIOSの「CHPUT」ルーチンでは、&H00~&H1Fはコントロールキャラクタとなっています。
「あ」の場合は、上位4ビットを「9」、下位4ビットを「1」でキャラクタコードは「&H91」となります。
任意サイズのFONTキャラクタを指定座標に表示するサンプルです。
「CHPTSMPL.BAS」【ダウンロード】
十字キー若しくは「←」「→」カーソルで、横16キャラ×縦16キャラを左右に動かすプログラムです。
マシン語のサンプルです。
起動すると、CHPTSMPL.BINを作成します。
IN | OUT | |||
B | 表示先X座標 | なし | ||
C | 表示先Y座標 | |||
D | 横キャラ数 | |||
E | 縦キャラ数 | HL | キャラクタデータ先頭アドレス |
「BINSET.BAS」【ダウンロード】
プログラム長いですが、マシン語のサブルーチンとして必要なのは370行〜450行(&HC110~&HC14F)の64バイトです。
741行〜743行(&HC1F0~&HC1FF)で指定値を代入してサブルーチンコールします。
744行〜2,090行(&HC200~&HC5FF)が、左右2パターンアニメーションで計4パターン分のチャラクタデータです。(プログラムの半分以上がデータです。)
変数アドレス | 内容 |
BF00 | 速度カウンタ |
BF01 | キャラクタX座標 |
BF02 | キャラクタ速度 |
BF03 | 向き (0:← 1:→) |
BF04 | アニメカウンタ |
BF05 | ジョイスティック |
BF06 | アニメパターン |
では、今度こそは本当に、ここで一旦Laboratoryは中断して3DダンジョンRPGの制作に専念します。(2023年6月26日記事参照「開発案件広げすぎ…」)