たまりば

パソコン・インターネット パソコン・インターネット三鷹市 三鷹市

ドラクエのカタカナが少ないのはROMの容量が少ないせいではない
2017年07月31日 09:02

ファミコンのドラゴンクエストシリーズにおいてカタカナが一部しか使えなかったことは有名だ。
この理由としてROMの容量が少ないためと言われることが多い。
試しにGoogleで「ドラゴンクエスト カタカナ」と検索し、上位50ページの中から初代ドラゴンクエスト(以下ドラクエ1)のカタカナが少ない理由を述べていると考えられる文章を(重複を除き)抜粋してみる。
・「当時はゲームソフトのメモリ(記憶容量)が少なかったため」「ROMの容量を増やしたこともあり、使用可能なカタカナは徐々に増加していった。」
・「64キロバイトしかありませんでした。」
・「容量の問題で」
・「容量の関係で」
・「わずか64KB!」「データ量削減」
・「使える容量はわずか64KB」
・「64kB」「容量を節約するため」
・「64KB」「データ量の削減のため」
・「512KB」「容量の節約のため」
・「ゲームソフトのメモリ(記憶容量)が少なかったため」
・「ソフトの容量が64キロバイト」
・「64KB」「容量がかなり少なかったため、データを削減するため…その一環」
・「約64キロバイト」「だから」
※「文字も1バイト使ってないんですよ。7ビットです。 だからカタカナなんか20文字しか使えない。」
・「容量の都合」
・「ファミコンカセットの容量は64KB」「だから、カタカナの文字データを全部入れることすらできなくて」
・「64KB」(ポートピアのカナ制限に対して「当時のROM容量では厳しく」)「初代ドラクエで使うことができたカタカナも、『ポートピア』と同じ20文字」
・「容量の関係で」
・「ゲームタイトルごとにフォントデータを持っていました。当然それは容量を食うものなので、いかにその文字数を減らすか」
・「64KB」「容量の問題で」

1件(※)を除き、総合すると「ROM容量が64kBと少なかったため、カタカナを入れる余裕が無かった」とまとめられるだろう。(1件については後述する)
このような説明に納得していた人は、ちょっと考えていただきたい。
ドラクエの文字は8×8ドットなので、容量は1文字64bit=8バイト。
50文字入れて8*50=400バイト。64kBの1%にも満たない。文章に大きな制限を加えてまで削減するような量だろうか。

また、ドラクエ2ではROM容量が倍増し128kBになっている。本当にROM容量が問題であるならば解決しているはず。
しかるに2でも多少文字数は増えたものの依然としてカタカナ全ては使えない。さらには3は256kB、4は512kBと倍増を繰り返しているのにやはり同様だ。



では何が原因か。問題は背景面のタイル種制限だ。

といって分かる人はそもそも誤解しないと思うので、詳しく説明しよう。
ファミコンやスーパーファミコンなど多くの2次元ゲーム機の画面表示は内部的に、背景(Background; BG)面と、スプライトと呼ばれる小さい絵を重ね合わせてできている。
ふつう、画面上を動くキャラクターはスプライトで表示し、背景画像や文章は背景面に表示する。
スプライトも背景も、8×8ドットのタイルまたはキャラクタと呼ばれる小片を並べて作られる。
そしてファミコンの場合、ふつうのプログラムでは背景面とスプライトに使えるタイルはそれぞれ別に256種づつとなっている。
この256個のタイルはカートリッジによっては、マッパーと呼ばれる回路を積むことで大量のROMを何分割かして切り換えたり、RAMを積むことで1つづつ自由に書き換えたりできるものもあるが、一度に256個しか使えないのは基本的には変わらない。
(なおドラクエ1に使われている「マッパー3」はというと、(背景+スプライトの)256×2個をいっぺんに切り替えることしかできない。)
よって、背景面に同時に表示される「フィールドの画像」「戦闘時の背景画」「文章のフォント」は、すべて合わせて256種のタイルで賄わなければならないのだ。
つまり文字を50文字用意するというのは、ROM64kB中の1%弱を使うだけでなく、タイルデータ256個中の50個、約20%という量を占領することになる。これは無視できる量ではない。

ドラクエ1のタイルデータは次のようになっている。
ドラクエ1_タイル(元画像はこちらのサイトから拝借した。 http://www.geocities.co.jp/Playtown-Bingo/2392/3syou.html )
上から109個が文字および罫線、下147個がフィールド画像用である。
ここから文字を増やせば増やすほど、地形のバリエーションが減っていくわけだ。

ここで参考に、ひらがな・カタカナが全種類使われている場合の例として初代ポケモンのフィールドでのタイルデータを示そう。ゲームボーイもファミコンと同じく背景に一度に使えるタイルは256種類である。
ポケモン緑_タイル
文字だけで5/8が埋まっており、フィールドの表示に使えるタイルはわずか96個である。ドラクエ1の2/3程度しかない。
これでフィールドを作るのは大変そうだと感じてもらえるかと思う。



さて、後述すると言った1件。
文字も1バイト使ってないんですよ。7ビットです。
だからカタカナなんか20文字しか使えない。
実は堀井雄二氏の発言である。( http://dq10maru.com/archives/7369365.html より)
制作陣の中心人物であり、注目すべき発言ではあるが、堀井氏はプログラマーではないの当作での役割はシナリオライターであり、プログラムについて熟知する立場ではないことに注意が必要だ。この発言は何を言いたいのかよく分からない。何が7bitなのか。

1つの解釈としては、文字コードが1文字7bitだったと取れるが、どうもそのようなことはない。

こちらにドラクエ2と3の文字コードについての情報があった。
http://www.geocities.co.jp/SiliconValley-Cupertino/7098/
該当する部分を引用する。
・2
00:1文字
8D:単語
EC:数値
ED:紋章
EE:濁点
EF:半濁点
F0:数値
F1:数値
F2:仲間名
F3:数値
F4:数値
F5:呪文名
F6:名
F7:繰り返し
F8:呪文名
F9:道具名
FA:区切り
FB:未使用
FC:メッセージ終わり
FD:名
FE:改行
FF:区切り
・3
1文字につき6bit使用しています。
つまり3byteで4文字分を表します。
仕様:
00~3B-ひらがなorカタカナ
3C-ひらがな・カタカナ切替
3D-圧縮単語+$00 圧縮単語は次の6bitと合わせて全部で192種類
3E-圧縮単語+$40
3F-圧縮単語+$80

説明がなく少々分かりづらいが、おそらく次のような解釈でよいだろう。
2: 1文字1バイト、00~8Cが通常の文字、残りが制御文字
3: 1文字6bit、00~3Bが通常の文字、残りが制御文字

肝心のドラクエ1の情報が無いが、2で1バイトだったのに1でそれより複雑なコードというのは考えづらい。あえて書くほどの事でもないので書いていないだけで、1も7bitではなく1文字1バイトであろう。

またもう一つ、ドラクエ2と3では文字コードが一変しているのに、使えるカタカナ数は2が33文字、3と4が38文字でほぼ変わらない(2の紋章5つを加えれば全く同一)。これは「文字コードが7bit」を原因とするのでは説明がつかない。

では堀井氏の発言は何を言っているかだが、これは「フィールド用のタイルを確保すると文字種は7bit分くらいしか取れない」ということではなかろうか。文字コードは1文字1バイトだが、そのうち7bit分128文字しか使われていない、と。
先述の通り文字と罫線で109文字。これに濁音・半濁音を加えると128文字を超えるが、文章中に使われることのない罫線や英字・記号を抜いたり、濁音・半濁音でも使われていないものがあれば抜けばちょうど128文字程度になりそうだ。
ただこれを指して7bitと言ったのだとした場合、問題なのは7bitになった原因の方であり、それは先述した通り背景面のタイル種制限だ。

  • Post time : 2017年07月31日 09:02│Comments(8)
    この記事へのコメント
    長い。三行でまとめて
    Posted by   at 2018年09月09日 01:18
    ドラクエのカタカナが少ないのはROMの容量が少ないせいではない
    問題は背景面のタイル種制限だ。
    文字を50文字用意するというのはタイルデータ256個中の50個を占領することになる。これは無視できる量ではない。

    いかがでしょう。
    Posted by いかづちSqueakいかづちSqueak at 2018年09月15日 00:47
    256種類の制限があるタイルデータをできる限り節約してその分を地形タイルに充てたわけですね。
    Posted by   at 2019年05月23日 00:03
    @名無し
    三行はさすがに...(笑)
    Posted by 星のデデデ at 2019年07月27日 08:35
    堀井雄二氏はドラクエではプログラムしていないが

    エニックスのゲームコンテストに自作プログラムで入賞してからゲームデザイナーになっている
    Posted by ああああ at 2019年09月20日 19:07
    >ああああさん
    ご指摘ありがとうございます。文章訂正しました。
    Posted by いかづちSqueakいかづちSqueak at 2021年01月02日 22:47
    堀井氏の発言は、文字の種類を7bit (128種類以内)に収めなければならなかったという意味だと思います。

    理由は、文字の指定を7bitに収め、あまりの1bitを他の何かに利用しなければ、プログラムやデータをマッパー3のPRG-ROMの容量である32kBに収められなかったからではないでしょうか。
    そうだとすれば、やはりROM容量が少ないせいだと言えると思います。

    ドラクエは文字への依存度が高いゲームですし、文字の指定の毎に1bitの削減できるとなると、その効果は高かったのではないでしょうか。

    逆の言い方をすれば、タイル種制限がゆるく、カタカナをよりたくさん入れることができたとしても、その文字の指定に1バイト使用するようになってしまうことで、プログラムやデータが32kBに収まらなくなっていた可能性があると思います。
    Posted by とんぬら at 2022年07月08日 18:17
    文中で述べたとおり、2が8bitなのに1がより複雑な7bitとは考えづらく、ROM容量が原因で文字コードが制限されたのであれば3の6bit化でカナの文字コードに余裕ができたのにカナ数が制限されたままであること、2,3,4とROM容量が増えても制限されたままであることの説明がつきません。
    Posted by いかづちSqueakいかづちSqueak at 2023年03月20日 00:48
    URL欄を実験的に消してる間に廃止されてしまいました。まあいいか。
     
    <ご注意>
    書き込まれた内容は公開され、ブログの持ち主だけが削除できます。
    削除
    ドラクエのカタカナが少ないのはROMの容量が少ないせいではない
      コメント(8)