
ファミコン『ドラゴンクエスト』ステータスの上限が255や65535の理由
ファミコンの『ドラゴンクエスト』のステータスの上限が255や65535の理由を、いまさらながら、簡単にまとめておきたいと思います。
1986年(昭和61年)5月27日に発売された作品を、こんなテーマで振り返ってみました。
この記事はゲームをプログラムレベルで解析したものではなく、プレイヤーとしてみた推論・検証という内容で書いています。また一般的な平易な言葉で文章を表現していますので、その点もご了承ください。

バグでは?との声が聞えた。
まずファミコンは8bitマシンであることをはじめ、その他のハードについて掲載しておきます。
歴代ハードのCPU
【8bit機】ファミコン (1983),セガ・マークIII (1985),PCエンジン (1987)
【16bit機】メガドライブ (1989),スーパーファミコン (1990)
【32bit機】プレイステーション (1994),サターン (1994)
【64bit機】Nintendo 64 (1996)
:
:
8bitマシンとは何か
機械寄りの言葉でいえば、扱える数値管理の範囲が8bitのため、8bitマシンという言い方をします。(後述)
あまり深く立ち入らない方針ですので、お付き合いください。
8bitとは何か
8bitは、一度に扱える数値の範囲が0~255(計256個=2の8乗)
※ファミコンは内部がこのルールによって動作しています。
同様に、
16bitは、一度に扱える数値の範囲が0~65535(計65536個=2の16乗)です。
ファミコンの『ドラゴンクエスト』をはじめ、この頃のゲームで時々見かける、255や65535といった数値の表現について、このあたりの事情が関わっています。
まずコンピュータで扱う数値について簡単に説明を記します。
日常生活で使用するような0〜9まで数えると、次の桁に繰り上がるような数の世界を10進数と言います。
同様にコンピュータの世界では、0と1でしか扱うことができず、1の次は桁が上がります。このような数の世界を2進数と言います。
0と1の理由は、電気信号の状態を表し、電気が流れていない状態を0、流れている状態を1、つまりオフ・オンで処理していることを表しているためです。
ステータスの上限が255の根拠
ここで『ドラゴンクエスト』を数値という観点からみたとき、コンピュータ内部ではどうなっているか 確認していきましょう。
※『ドラゴンクエスト』において、255はステータスなどで画面に表示されませんが、内部で扱っているため ここで紹介しています。
先ほども書きましたが、コンピュータは0と1しか扱えませんので、ファミコンをはじめコンピュータは2進数で処理することになります。
(例)
10進数の123は、
コンピュータ内部では、2進数で 0111 1011 として扱います。
8bitのコンピュータは以下のように管理しています。
8bitは扱える数値の範囲が0~255(計256個=2の8乗)
つまり10進数の123を表すとき、
コンピュータ内部では2進数で 0111 1011 と8桁に収まっています。

8bitは8桁で扱う取り決めがあるのと、0と1しか扱えないので、最大値は、1111 1111となります。これを10進数で表すと、255となります。
つまり『ドラゴンクエスト』において、ステータスを8bit幅で管理しているため255より数値が上がらないことが理由となります。
経験値などの上限が65535の根拠
では次に、上限が65535となるステータスについて考えてみます。
たとえば10進数の56789のような桁数を表すとき、コンピュータ内部ではどうなっているでしょうか。
先ほどに比べて桁数が増えました。
8bitは2進数で8桁まで扱えると言いましたが、10進数では255までしか表現できず、56789を2進数にした場合、明らかに桁が足りません。
ここで、10進数の56789を2進数にしておきましょう。
1101 1101 1110 0101
となります。
よく見ると16桁になっていることがわかります。
8bitは8桁の数値を管理できますが、この数値は対応できない桁になってしまっています。
ここで対応策として、16桁を用意することができれば、0~65535を扱うことができます。
実際には8bitの桁を2つ用意することで、16bitを表現することになります。

16bit幅は0000000000000000~1111111111111111(0~65535)まで扱えます。
『ドラゴンクエスト』でゴールドや経験値の上限が65535となっているとき、ファミコン内部では2進数で1111 1111 1111 1111 として管理・処理しています。
つまりは、255と同様に これ以上の数値は扱えないことがわかります。
8bit幅と16bit幅
8bitの桁の枠組みを2つ用意することで、16bit幅が実現できるという表現を使っているので混乱すると思いますので整理しておきます。
あくまでもファミコンは8bit機ですので、機械の処理は8bitのルールで行われます。扱える数値の桁数が足りないので増やす工夫として、8bitで管理できる枠組みを2つつなげて処理していることになります。
マシンは8bitで処理は8bit、データは16bit幅で格納、ということになります。
この様子について、少しコンピュータから離れて説明してみます。
例えば‥
8人乗りの車は8人までしか乗れませんが、2台用意すれば16人が移動できます。しかし、車自体の人数の上限は8人なので、16人を1台に乗せることはできません。2台同時に移動すれば、見かけ上 16人が一度に移動しているような行動をとっていることになります。
スーパーファミコンは16bit機ですので、もしも同じ条件で『ドラゴンクエスト』を作ったとしたら、この部分について一括で16桁の処理が行えることになり、管理や処理の面で効率化が期待できます。
その結果として、余ったパワーを他の処理にまわすことができるため、8bitマシンよりも高度な処理が実現できるというわけです。

ゲーム中で必ずしもその上限まで数値を上げられるとは限らない。
たとえばレベルは30までしか上げることができない。
ステータスの上限が255、65535の理由を考える
なぜステータスは上限が255なのでしょうか。
ゴールドや経験値のように、一律65535であれば楽に冒険ができたかもしれません。
ただ‥そこはゲームバランスを考えて調整されている結果だといえます。
これはファミコン本体ではなく、作り手側の事情ということになりますが、物語の規模やゲーム内容の性質を考えると、むやみに数値を増やしては全体のバランスが崩れます。
この記事で紹介したように8bit幅であれば、レベルの上限も255にできたと思います。しかしそこは初心者向けのRPGとして、むやみに苦労をさせない配慮があったものと思います。レベルの上限を30とすることで、頑張れば手が届きそうな数値を設定してプレイヤーのモチベーションを維持させる狙いがあったものと思われます。
また人間の感覚だと99999などの10進数で示された方が、カウンターストップということで理解がしやすいところですが、当時はコンピュータの原理に近いところでゲームが表現されていた事情もあって、2進数の都合で表示されている作品も多くありました。
またファミコンの様々な制約から、内部のデータ管理を安易に8bit幅から16bit幅にしたとしても処理の工程が増え、動作が遅くなったり容量が増えROMに収まらないなどの問題も発生します。
『ドラゴンクエスト』は適切なところで、うまく取捨選択をして まとまっていると言えます。
最後に
シンプルで制約が多かったハードで制作されたゲームは、無駄な演出やデータを捨て、本当に作り手が主張したいことが詰まっていたと感じます。
またコンピュータの仕組みがシンプルで理解しやすかった時代、作り手のちょっとした工夫や配慮などがゲームを通じて伝わってきました。
この記事の8bitの制約は当時パソコンのゲームなどでも目にしていたので特別珍しいことではありませんでしたが、疑問に思うファミっ子が多くいました。
そんなことを懐かしく思い出しながら書かせていただきました。