読者です 読者をやめる 読者になる 読者になる

しろもじメモランダム

文字についてあれこれと。

初代ポケモンの文字コード

初代ポケモン(要するに赤・緑)の文字コードの解説ページを読んだので紹介。

これを読めばわかるが、外で一般に使うJISだの Unicode だのとは違い、まさにポケモン専用の文字コードになっている。8ビットコードのようだ。

[改行] や [改ページ] といった制御コードが入っているのはもちろんのこと、「わざマシン」や「ロケットだん」のような単語にコードが割り振られていたり、さらには [主人公の名前] や [(戦闘時に)行動しているポケモン] を表すコードまである。

(半)濁音は合成用の(半)濁点を表すコードを利用する(つまり(半)濁音単独のコードはない)のかと思っていたが、そうではないようだ。0x00–0x4F の範囲のうち、制御コードがない符号位置は(半)濁音ですべて埋まっている*1。ただし、(半)濁音が1コードで表されるといっても一度の処理で表示できるわけではなく、一つ上のマスに(半)濁点を表示し、下に戻って基底文字(清音のかな)を表示、というステップを踏んでいる。

ポケモンの画面における1行の高さは、このように通常のメッセージでは縦2マス分だが、ステータス異常を表示するスペースは縦1マス分の高さしかない。そこで「どく」「やけど」の「ど」を表示するために、高さ1マスに合成済みの「ど」(0x70)が通常の「と゛」(0x34)とは別に入っていたりする。

他には唯一の漢字「円」が入っていたり、メッセージ枠やHPのバーを描画するパーツが入っていたり。「ッ」「ャ」「ュ」「ョ」「ィ」・「ァ」「ゥ」「ェ」・「ォ」が散らばっている理由は……なんでだろう。

文字コードといったら外向き・情報交換用の文字コード*2を考えることが多いけど、こういう思いっきり内側に閉じた世界を覗いてみるのもなかなか面白いもんですね。

*1:従って「イ゛」(0x01)はあるが、0x00 には [無効] が入っているため「ア゛」は存在しない。

*2:といってもこれもルーツを辿れば内部コードに行きついたりしますが。