任天堂から9月10日に発売された「スーパーマリオメーカー」が話題を呼んでいます。本作は「スーパーマリオブラザーズ」30周年記念の年に発売されたソフト。初代「スーパーマリオブラザーズ」から「NewスーパーマリオブラザーズU」に至るまで、4つのソフトのグラフィックをベースにパーツを配置して自由にコースを作成できるソフトです。

「スーパーマリオメーカー」(c)2015 Nintendo

「スーパーマリオ」シリーズを何十年も遊び続けてきた身としては、まさに夢のようなソフトだと大興奮。 だってマリオのコースが自分で作れて、しかも、それを世界中の人に遊んでもらえるのですから! さっそく自由に敵を配置して作ってみようかな。

ファミコンの「スーパーマリオブラザーズ」のステージで出てくるクリボーはこれくらい。大量に発生することはなかった (c)1985 Nintendo

……ということで、とりあえずクリボーを大量に配置して、気持よくジャンプで踏みつけられるステージを作成。踏みつけたときのポピュッという音が快感で、プレイしながら自分でニヤニヤしてしまいます。敵を大量に並べるって、発想としては小学生並みな気がしますけど、きっと「スーパーマリオメーカー」を買った人の大半が最初にやってますよね?

そこでふと思い出したのですが、そういえば、ファミコン時代の「スーパーマリオ」シリーズって、こういう敵がずらっと並ぶ無茶なコースはなかったですよね。もちろん、ゲームバランスを考えた結果だとは思いますが、ひょっとしてファミコンの場合、"ゲーム機としての性能的にできなかったコト"っていうのもいろいろあるんじゃないでしょうか。

そこで今回、初代「スーパーマリオブラザーズ」が発売された当時のドット技術についていろいろ調べてみました。30年前に時計の針を巻き戻し、ドット表現の知られざる裏側をご紹介します。

※今回の記事について、書籍『ファミコンの驚くべき発想力』(技術評論社・刊)を参考にしています。

マリオがキノコを取ったとき、縦にだけ伸びる理由

マリオシリーズでおなじみのパワーアップアイテムといえばスーパーキノコ。これを取ることでマリオがググッと一回り大きくなるのは、シリーズではもうおなじみの光景となっています。

初代「スーパーマリオブラザーズ」からすでにこの表現は登場しているわけですが、実はキノコを取ったときマリオが大きくなるのは縦にだけで、横には大きくなりません。なぜマリオは横に大きくならないのでしょうか。実はその理由、思わぬところにありました。

キノコをとったマリオは、横には広がらず縦方向にだけ大きくなる (c)1985 Nintendo

それを知るために、まずファミコンというハードに課せられた制限と、「スーパーマリオブラザーズ」というゲームがどのように構成されているのかを見ていきましょう。

「スーパーマリオブラザーズ」の構成を簡単に説明します。このゲーム、大きく分けると3つの画面が重なって作られています。「背景色」「背景グラフィック」「スプライト」です。スプライトとはマリオやクリボーなど、背景とは別に独立して動くキャラクターのこと。「スーパーマリオブラザーズ」に限らず、当時のファミコンソフトはたいていこの3つで構成されていました。

画像編集ソフトなどを使ったことがある人であれば、「レイヤー」の概念を思い浮かべてもらうとわかりやすいと思います。まず単色の「背景色」があり、その上に「背景グラフィック」が敷かれ、一番上のレイヤーに「スプライト」が載っているというイメージです。「スーパーマリオブラザーズ」では、マリオやキノコ、クリボー、パタパタ、クッパなど動く物がこの「スプライト」にあたります。

(c)1985 Nintendo

マリオをググッと拡大して見てみましょう。すると、キャラクターが描かれているブロックが、16×16のピクセルで構成されていることがわかります。ファミコンでは8×8ピクセルの四角形が最小のブロックとなり、これを縦に2つ、横に2つ並べた16×16ピクセルを1キャラ分の大きさとして使うのがポピュラーな作り方でした。なぜ16かというと、8×8ピクセルでは小さすぎてキャラクターが描けないからです。通常時のマリオやクリボー、パタパタなどは、すべてこの16×16ピクセルに収まる大きさとなります。ちなみにシューティングゲームの弾などは小さいので、8×8ピクセルで描かれていました。

さて、マリオはキノコを取ることでパワーアップし、巨大化するわけですが、ここで問題が発生します。

というのは、ファミコンのグラフィックはハードとしての仕様上、スプライトを横に64ピクセル分までしか同時表示できないのです。16ピクセルが1キャラ分ですから、64ピクセルだと4キャラ分。つまり、8×8のスプライトを8個しか並べることができませんでした。 よって、「スーパーマリオブラザーズ」では横に4キャラ(スプライト8個分)並んでしまうと、5キャラ目が表示できなくなってしまうというわけです(表示には優先順位が付けられるので、必ず右端のキャラクターが表示できないわけではありません)。

縦にずれていれば問題ないのですが、「スーパーマリオブラザーズ」では平坦なコースが多いため、キャラクターが横に並ぶ場面が多々発生します。この状況でマリオがキノコを取って横に大きくなってしまうと、ただでさえ少ない64ピクセルをさらに消費してしまい、敵キャラを表示する余裕がなくなります。これがマリオがキノコを取っても縦にしか伸びない理由の一つなのと考えられます(もちろん、ゲームバランス的な理由もあるでしょう)。

そうはいっても、どうしても5キャラ分、横に並んでしまうこともあります。そういう場合、4キャラ目と5キャラ目を交互に表示したり消したりして、擬似的に両方が見えるようにしていました。よく言われていたファミコンのちらつきは、これが原因です。

この方法が特に生かされているのはクッパが吐く炎です。炎は32ピクセルで構成されており、さらに横に向かって進んできます。そのまま表示すると同列2キャラ分ものピクセルを消費してしまいますが、実は炎の先端と後端を交互に表示することでピクセル数を減らしているのです。

そうはいっても、ちらつきはなるべく少ない方がいいに決まっていますから、「スーパーマリオブラザーズ」ではなるべく横一直線にスプライトが並ばないような工夫がなされています。たとえばハンマーブロスのハンマーは放物線を描きますし、火の海から出現する炎も縦に動きます。「スーパーマリオブラザーズ」のすごいところは、こうした制約による動きを逆に利用して、絶妙なゲームバランスを作り上げたところにあります。