DQ36での外字追加

今更になって「DQ3で意外と漢字が使えない」ということに気が付きました。当然ながらDQ3とDQ6では大フォント(移動中メッセージで使用される文字)のリストは違うのでDQ6にあるのにDQ3にはない(逆もまた然り)という文字はポツポツと存在します。オリジナルは若年?プレイヤー層に配慮してるせいか、意外とひらがなが多用されていますが、パッチにおいてはその辺配慮する必要が無いということで、もっと漢字を多用できないかと言うことに考えが至りました。実はDQ3 Extendedでは大フォントの追加は領域に余裕があることや、移動中メッセージのフォーマットが単純に1文字2バイトの文字インデックスの羅列であることから比較的簡単です。

$0151AA- 大フォントデータインデックス(5バイト*49レコード)

意味開始位置サイズ
文字数0バイト目0ビット~12ビット
1バイト目4ビット~4ビット
開始アドレス2バイト目0ビット~16ビット
高さ4バイト目2ビット~4ビット

データ構成は極めて単純で、指定した幅、高さの中に何文字定義されているか、実データの開始位置はどこかというだけです。開始位置は$01バンクに存在することを想定しているので$01に配置する必要があります。幸いにしてDQ3 Extendedでは直後のハフマン木が不要になったお陰でごっそり4000バイトほど空いているのでここを使えばいいということになります。また、各文字のビットイメージも単純で、各ビットがONになっていたら白、OFFなら黒で文字を右から左にビット表現しています。

DQ36では一番多いのが11×13の文字です。オリジナルで定義されているレコードを見る限り、幅の最大は13ピクセル、高さの最大は14ピクセルのようです。最初から全文字13×14で定義すれば複数レコードに分ける必要はないだろうとは思いますが、恐らくROMの容量を無駄遣いしないようにという配慮だと思われます。全文字13×14で定義した場合、標準の11×13と比較すると39ビット(=約5バイト)多く容量が必要です。これを700文字全部に適用すると3,500バイト近く余計に必要になるのでそこそこの容量です(しかもほとんど空白)。というわけで現状のような実装になっているのでしょう。

現状の仕組みがわかったところで、次に「どうやったら外字を新規に定義できるか」ということになります。ポイントは以下の3点です。

  1. 直感的な外字エディタの必要性
  2. SFCGENEditorの「メッセージ」編集時に外字も使えるようにする
  3. あと何文字追加できるのか?

1はなければ作るしかないということで最初はSFCGENEditorのDQ36プラグインの機能の一部として実装していたのですが、スプライトの編集と違って別にROMイメージが必要なわけでもなく、また編集画面を開いていると色々不便であるということもあり、独立した別プログラムに切り出しました。DQ3 K.Mixで使いたい漢字はプラグインに含めている間にほとんど作業してしまったので追加で色々付けた機能は蛇足かもしれません。

2はせっかく追加できた文字をすぐに使えないと意味が無いということで、SFCGENEditor、プラグイン側両方に機能を追加し、「大フォントテーブル.csvに追加文字を定義すればすぐ使える」ようにしてあります。上で作ったツールの拡大画面上(左側)でそれっぽく見えていても実際にゲーム上で見ると違和感を覚えたりするので、「すぐにゲーム上で確認できる」というのが大事になってきます。

3は正直上限がいくつなのかわかりません。ROM上には比較的余裕がありますが(1文字18バイトとして200文字は追加可能)、RAM上でどれくらい余裕があるのかが気になるところです。小フォントは256文字の上限があり、これ以上追加するのは簡単には行かなそうです。そういう事情を知っているだけにおっかなびっくり増やしていきましたが、自分が追加したい70文字前後を追加しても他の文字が潰れるということはありませんでした。通しでプレイしてないのでまだわかりませんが。というわけで外字を追加して見た結果の一部がこちら。

変更前変更後
「破壊」「戮」を差し替え
「成功」「-」を差し替え

外字エディタの提供は次回のSFCGENEditorのリリースとともにそのうちやるつもりです(エディタの説明書を書くのが面倒くさいww)。確認はしていませんが、DQ6にもそのまま使えるはず。

コメント

  1. 名無し より:

    お疲れ様です。
    使用できる漢字が増えるとかなり良いですね。

    管理者より返信:

    漢字2文字以上の熟語がひらがな表記になっていてしまらない箇所が散見されるのでその辺をある程度直せると見た目的に良くなると思います。全部やるとキリがない上にこれまた自己満の領域の話ですが。ひらがな表記を漢字表記に変えていいところは基本的に文字数は少なくなるので変えることによって1行に収まる文字数オーバーを気にしなくていいところですね。文字さえあればww気楽に変えられます。

  2. 匿名 より:

    こちらでいいのかわかりませんが質問です
    KMIXで女勇者で開始し
    アリアハン王様に初めて話しかけた時のメッセージで
    「精悍」という単語がありますがSFCGENEditorでメッセージ編集をすると
    その 精悍さ。となっているはずの部分が
    その 精さ。になっており一度でも編集すると
    ゲーム内でその 精さ。と表記されてしまいます

    NUM$0556です

    精悍とかいても悍が使用できない文字といわれ編集を完了できません
    どうすれば悍などをメッセージで使えるようになるのでしょうか?

    管理者より返信:

    SFCGENEditorのDQ3プラグインを変更して外字は外字として表示するようにします。今は解釈できない文字はすっ飛ばしてしまっているのでご指摘のような状態になります。別件の作業中なのでその後になります。

タイトルとURLをコピーしました