2009年 06月 09日 ( 1 )

古印体のフォーマット その1

階段を降りた直後や、中断した所から再開した時に「99 掛軸裏の洞窟」等と表示されますね。今回はあのフォントの話です。
このフォントは「古印体」と呼ぶことを最近知りました。印鑑に使われる書体だそうですが、少し怖いイメージがあるからか、その手の作品にしばしば登場します(どちらが先かは分かりませんが)。言うまでもなく、かまいたちの夜のタイトル画面のフォントもこれです。
いつものようにJavaScriptで文字を表示していると、いきなり「怨」の文字が登場してびっくりしたのは秘密です。これはROMハッカーに対するCHUNSOFTからの怨念なのかと一瞬思いましたが、http://oyasen20.tripod.com/other_romhacking.htmlから分かるように、当初は「怨念坂」という地形を入れる予定だった訳ですね。
因みに見れば分かりますが、巻物の洞窟の「巻物」のフォントは適当に描いたもので、古印体ではありません。とても暇な時があれば描き直すかも知れません。

さて、前置きが長くなりましたがこのフォント、簡単な圧縮(と言う程でもないが)がされているのでYY-CHR等では編集できません。地道にバイナリエディタで編集しましょう。
1文字は24*24ドットですが、それは8*8ドットのブロックに分かれています。ブロックを左から右へ並べ、右端まで来ると下の行へ降りて左から右へ並べ……を繰り返して1つの文字を描画します。
更にブロックのデータにはタイプ0~タイプ3の4つのタイプがあります。これはブロック毎に自由に設定でき、そのデータを圧縮するか否か、圧縮する場合はその方法を決定します。

1つの文字のフォーマットは以下の通りです。

・横幅(1バイト)
・ブロック1~4のタイプ(1バイト)
・ブロック1(0~8バイト)
・ブロック2(0~8バイト)
・ブロック3(0~8バイト)
・ブロック4(0~8バイト)
・ブロック5~8のタイプ(1バイト)
・ブロック5(0~8バイト)
・ブロック6(0~8バイト)
・ブロック7(0~8バイト)
・ブロック8(0~8バイト)
……

但し、
・(横幅)=(実際の横幅/8)-1
・(ブロックn~n+3のタイプ)=(ブロックnのタイプ)+04h*(ブロックn+1のタイプ)+10h*(ブロックn+2のタイプ)+40h*(ブロックn+3のタイプ)

24*24ドットの文字なら、横幅の値は24/8-1=2、すなわち02hになります。

タイプの解説は次回に行います。
[PR]
by oyasen | 2009-06-09 19:48 | 改造・解析