本稿は、基本的にGamasutraに投稿した英語記事の転載となります。オリジナルの記事はこちらです!

ショベルナイトはNES/ファミコン時代のレトロゲームをイメージして作られた作品ですが、よく観察すると、いくつか大きな違いがあることに気づくでしょう。本作のアートスタイルやプレイスタイルを決定するにあたって、ヨットクラブゲームズでは、いくつか明確な目標を設定しました。その一つは、NESのゲームをとにかく忠実に再現するのではなく、思い出補正を加えた8ビット風のゲームを作ることでした。

*NESとは、Nintendo Entertainment Systemの略称で、海外版のファミコンにあたります。記事内で触れているとおり、若干の違いはありますが、基本的にはファミコンと同等の機能を持ったゲーム機です。

NESのゲームが現在も開発され続けていたら、いったいどうなっているでしょうか? 今、8ビットゲームを開発したら、どんな姿になるでしょうか? おそらく、現代のゲームデザインを反映した内容で、ハード的にも若干ながら明確な進化を遂げているはずです。これは、ある程度の拡張機能をカートリッジに内蔵できたNES/ファミコンならではの想像ですね。

たとえば「スーパーマリオブラザーズ3」のようなNES後期のゲームには、初代「スーパーマリオブラザーズ」のような初期作から格段に進化したテクノロジーが、カートリッジに詰め込まれています。カートリッジに搭載するチップセットによって、斜めスクロール、大型スプライト、拡張サウンドチャンネル(後述しますが日本のファミコンにのみ対応)といった機能を利用できたのです。技術が進歩し、ハードウェア機能の活用法も研究されていった結果、初期のゲームと後期のゲームとの差は、時には歴然たるものでした。

そうしたカートリッジの進化を踏まえれば、ショベルナイトに使われている技術が実現できていたかもしれません。一方で私たちは、NESの技術的な限界をいくつか勝手に破りました。ハードウェアの限界から生まれる不便を、プレイヤーに押し付けたくなかったからです。スプライトのチラつきもその一つで、水平方向に8つ以上のスプライトを表示させようとした際に発生します。一部の方にとっては懐かしい現象かと思いますが、やはり有害なものですので、自然には発生しないようにしました。なお、一部では意図的にスプライトのチラつきを発生させていますが、画面上に多数のオブジェクトを詰め込むのではなく、パーティクルエフェクトなどに留めています。こうした判断のおかげもあって、ゲームの雰囲気は、NES時代のゲームらしい明確でシンプルなものになりました。

こうした例はまだたくさんありますので、私たちがいかにNESのルールを曲げていったかを見ていきましょう!

いかに曲げたか

我々には現行世代のハードウェアがある!コンシューマー機やPC向け! NES用ゲームじゃないんだから!

ショベルナイトは現代のハードウェア上で動作し、NES上では動作しません。NES的なゲームを作るという私たちの意図を文字通りに解釈した方は、これを知ってとても驚いたそうです。なにしろ一部には、自作のフラッシュカートリッジを使って本物のNESでプレイするつもりの人までいたとか…

実際のところ、ショベルナイトは非常に複雑なゲームで、様々なプラットフォームやハードウェア構成で動作します。現行の任天堂ハードで動作する際は、Miiverseやすれちがい通信といった、任天堂独自のワイヤレス機能やインターネット機能に対応します。また、FMODオーディオやSDLコントローラといった、サードパーティーのミドルウェアにも対応しています。

16:9のワイドスクリーン 表示(3DSでは5:3)

ショベルナイトでは現代化の一環として、画面の表示サイズを拡大しています。バーチャルコンソールでNESやファミコンのゲームをプレイした際のように、左右に黒い帯が入ったりはしません。つまり、現在主流になっている16:9のディスプレイでプレイできるということです。なおアスペクト比は変わりましたが、解像度は変えていません。つまりショベルナイトは、ピクセル密度の高いHDゲームなのです!

そのかわりショベルナイトの1ピクセルは、1080pにおける4.5×4.5ピクセルに相当し、事実上の解像度は400×240になります。これはNESが256×240で出力した場合の垂直解像度と一致します。また、背景タイルもNESやファミコンと同様に16×16サイズで、縦方向のタイル数も当時のゲームと同じです。私たちはNESのゲーム画面を再現するにあたって、縦のタイル数とタイルの寸法を合わせることを重視しました。唯一の違いは水平方向に広くなったことですが、これはパズルやオブジェクトの配置、あるいは開放感の面で、ステージデザインに良い影響を与えると考えました。

背景の多重表示

背景の多重スクロールは、異なるレイヤーやパーツをそれぞれ違った速度で動かすことで、2D画面に奥行きのある動きを再現する手法です。たとえばクルマが高速道路を走っていると、遠くの山は微動だにしないように見えますが、キロポストはすごい速さで流れ去ってゆきますね。それを踏まえて、初回トレーラー冒頭で流れるスクロールの様子を見て頂ければ、分かりやすいと思います。この高度な技法が広く使われるようになったのは、スーパーファミコン/SNES時代に入ってからです。NESでも可能だったのですが、これには様々な工夫が必要でした。実際のところ、当時のプログラマーには以下のような選択肢しかなかったのです。

私たちはショベルナイトの開発を始めた頃に、この多重スクロールを強化して平均5~6枚の背景レイヤーをスクロールさせることを決めました。NESゲームが現在まで進歩を続けていたら次に実現したであろう技術なので、無理のない表現でしょう。さらに大事なことは、エフェクトを追加したことで、実際にキャラクターを動かすレイヤーが見やすくなったことです。多くのレイヤーを使用する恩恵は、それだけではありません。ニンテンドー3DSの3D立体視では、驚くほど鮮明な3D映像を楽しむことが可能です!

スプライトのチラつき

驚くほど多くのスプライトを表示する「Summer Carnival '92: Recca / サマーカーニバル'92 烈火」

NESにおけるスプライトのチラつきは、水平方向に8個以上のスプライトが並んだ際に発生します。ショベルナイトではスプライト数をできるだけ抑えましたが、前述のように、特定の数に固執しているわけではありません。また、オブジェクトの中には、パーティクルの量がNESゲームの想定をちょっぴり超えてしまったものもありますが… 美しいので良しとしました。

「烈火」や「コントラ」といった一部のゲームでは、特定のスプライトを1フレームおきに表示することによって、スプライトの表示限界を回避しています。インターレース方式の低解像度CRTモニタでは、これらがフレーム毎にきちんと描画されているように見えるわけです。また爆発エフェクトなどがそうですが、NESのパーティクルアートの多くはチラつきを念頭において作られています。そこで私たちも、アルファ透過の代わりに、点滅するスプライトを使用しました。ショベルナイトが攻撃を受けて一時的に無敵になったとき、姿が明滅しているのもその一例です。何はともあれ、このハードウェア制限がなければNESのゲームに見えない――というわけでもないので、わざわざ再現する必要性は感じませんでした。

カラーパレットの追加

NESは54種類の色しか出力できないため、あまり色彩豊かとは言えません。私たちは様々な色相でグラデーションを使いたかったので、これは特に問題となりました。たとえば使いやすい黄色がなかったり、暗色系が全然足りなかったり、肌色の濃いキャラクターを表現する際に使えるシェードが少なかったりします。しかし私たちは、NESの特徴的なカラーパレットを使うことに強いコダワリがありました。そこで最終的には、ちょっとだけカラーを追加することで決着を図っています。

NESのカラーについての詳細は、Wikipediaの以下のページをご参照ください(英語):

https://en.wikipedia.org/wiki/List_of_video_game_console_palettes#NES

ここで使われている濃い紫色は #22123B

それでは、新たに追加した色をご紹介しましょう。左はトレジャーナイトのステージですが、地面に暗い紫色が使われているのがお分かりでしょうか? 追加されて以来、この色はゲーム内の様々な場所で使われ、主に黒と寒色系の背景カラーをつなぐ橋渡しとして活躍しました。

この深い赤は #360900

紫と同様に、黒と暖色系のカラーをつなぐ際にも、橋渡しとなる色が必要でした。この暗い赤は、モールナイトのステージである「古代都市」に使われています。使用例は前述の紫色ほど多くありませんが、これはNESのパレットが寒色に大きく偏っているためです。なにしろ企画段階では赤かったロックマンを、カラーパレットを見たスタッフが青に変更したというウワサがあるぐらいですから…

フロストナイトの肌や、コートのモフモフした部分は #9E9E5C

お次の追加カラーは、実は最初に追加されました。私たちはフロストナイトが着ている羊皮コートの色を探したのですが、NESのカラーパレットにはちょうどいい色がなかったのです。このベージュ色は彼の肌色にも使われており、ステージ全般のテーマカラーとしても使われています。ちなみに、このベージュは前述の場所にしか使われていないため、変更しようと試みたことがあります。が、他のどんな色もイマイチだったので、結局そのまま使うことにしました。

このお兄さんが着こなしている色は #824e00

最後の追加色は、ショベルナイトの世界をより多様にするために必要でした。NESの基本カラーパレットには、肌の色の濃いキャラクターを描くために必要な色がほとんどありません。これは、Kickstarterで展開した「Pixel My Face」という企画を実現する際に、大変な問題になりました。この企画では、開発資金をクラウドファンディングで募った際に、一定額以上の出資をしてくれた方の顔を、ドット絵にしてゲームに登場させるというものでした。もちろん出資は全世界から集まりましたので、さまざまな肌の色をきちんと再現しなければなりません。そこで最後の追加色として、右のお兄さんの肌色にもなっている「ライトブラウン」が追加されたのです!

スプライトごとの色数

NESでスプライトに使用できる色は、最大で4色(もしくは3色+透過)でした。右の「ゼルダの伝説」のスクリーンショットに写っているスプライトキャラクターもその一例です。

一部の開発者はちょっとしたトリックを使って、それよりもカラフルなスプライトを実現していました。たとえばロックマンのようなキャラクターは、胴体(青/水色/黒)と顔(ベージュ/白/黒)の2つのスプライトが、互いに重なり合ってできています。ロックマンの顔がときどき胴体とは別にチラついてしまうのは、この構造によるものです。ショベルナイトはスプライトの大半をロックマンと同様の構成にして、それぞれに4~5の色と透過色を追加しています。

色のバランスをとるのは厄介なプロセスで、色が多すぎると違和感が出てしまうのです。何度も変えたり戻したりしているうちに、ようやく見栄えのいい色のバランスが見つかりました。

緻密すぎるスプライトをアニメーションさせるのは、本当に大変です!

こちらの例では、キングナイトの初期デザインがよく分かると思います。左のスプライトでは(通常どおり)5色しか使用していませんが、あまりにも緻密に描かれているため、16ビット時代のスプライトに近くなってしまいました。そのため何度か形状の単純化を行い、見やすさや分かりやすさを調整した結果、ようやく現在の姿に落ち着いたのです!

共通カラーパレット

ショベルナイトのスプライトには限られた色数しか使われていませんが、画面上のスプライトすべてに同じカラーパレットを適用しているわけではありません。またロックマンの例では、主人公が武器を変更すると身体の色(スプライトカラー)も変わるのですが、このとき1UPなどアイテムの色も同様に変化します。これは共通カラーパレットを使用しているためで、あるスプライトのカラーパレットを変更すると、同じパレットを使用している他のスプライトも、色が変わってしまうのです。こうしたハードウェア限界を再現してもプレイ面で良いことはありませんので、私たちはこの特性を無視しました。ただし、敵のバリエーションを表現したり、ダメージや爆発のエフェクトをサイクル(繰り返し)させる際には、限られたカラーパレットを利用しています。

こうしたエフェクトは、プレイをより分かりやすく刺激的なものにしてくれます。たとえばダメージ時に別のカラーパレットと入れ替えることによって、敵に攻撃が命中したことをプレイヤーにはっきりと伝えることができます。対象オブジェクト全体の色が変わるので、よくある「被弾アニメーション」や単なる点滅よりも、明確な表現になるわけですね。こうしたパレットの入れ替えやエフェクトの移動は、スプライトを表現するための「インデックス付きでバイト符号のないテクスチャ」とパレットを表現するための「32ビットカラーテクスチャ」をピクセルシェーダにパスすることによって実現し… とにかく、古き良き時代を再現するために、8ビット時代では考えられなかった高度な処理を行っているのです!

パレットエフェクトの実際の限界については、こちらのサイトをご覧ください。1つのカラーパレットをサイクルさせることで、驚異的なアニメーションを実現しています。

メモリの限界

NESのゲームは、プログラムコード、アニメーション、背景、テキスト、音楽、その他もろもろを、たった32Kbのメモリ容量に収めなければなりません。しかし、カートリッジ側に「メモリマッパ」というチップを搭載すると、この限界を飛躍的に向上することできます。より高度なグラフィックや特殊エフェクトを実現した後年のNES/ファミコンゲームでは、ROM容量も4~6メガビット(0.5~0.75MB)に達したため、このチップの搭載が必須となりました。ちなみにショベルナイトの容量は、1.2ギガビット(約150MB – 大半はMP3ファイル)ほどもあります。当時と違い、極度の最適化や圧縮を行ってまでして容量の小さなカートリッジにデータを押し込む必要はありませんので、私たちは技術的な努力やゲームシステムの改良、安定性の確保に集中することができました。

作曲およびサウンドデザインを担当したジェイク・カウフマン(別称Virt)によると、ショベルナイトの曲を正しい機械語(後述)に変換すれば、「星のカービィ 夢の泉の物語」に使われた6メガビット・カートリッジに何とか収まるらしいのですが… それでも、全てのグラフィックとプログラムコードは捨てないといけないそうです。

大型スプライト

NESのスプライト機能は、その処理限界ゆえに、大きな移動オブジェクトの描画が苦手です(なにしろ小さいものを幾つか並べただけで、チラついてしまうのです)。賢明な開発者はこの制限を回避するため、大きなアートをアニメーションタイルにして、背景レイヤーに描画しました。NESやファミコンのゲームで巨大な敵と戦う場面では、背景が真っ暗で何も描かれていなかったりしますが、それはまさに、この理由によるものです。つまり、ボス自身が背景だったわけです。

真っ暗な背景に巨大なボスという組み合わせは対決の構図を際立たせる効果を持ち、数々のゲームにおいて印象的で緊張感のあるボス戦を演出してきました。そのため、私たちもこの様式を採用しています。もっとも当時のようなスプライトの制限はないため、大きなキャラクターを表示させるために背景レイヤーを利用するといった特殊テクニックは必要ありませんでした。ショベルナイトではアニメーション・スプライトコードを使用して、デザインに注意しながら黒または非常に暗い色の背景に表示しています。

カメラの揺れ

画面を揺らすことによって振動や衝撃の大きさを表現するのは、当時のビデオゲームでよく使われていた手法です。ただしNESでは、カメラを一方向にしか揺らせませんでした。「スーパーマリオブラザーズ3」の最終バトルではクッパが床を踏み砕いた際に画面が揺れますが、機会があったらよく観察してみてください。これはNESが斜め方向のスクロールを処理できなかったことに起因しています。この制限については特に再現する必要もないため、ショベルナイトでは無視しています。

ショベルナイトがHUDの体力ゲージの上に表示されているのがお分かりでしょうか…

レイヤーとしてのHUD 

NESゲームで奇妙だったことの一つに、スプライトが通常、HUD(体力ゲージなどシステム系の表示)よりも前面に描画されていたことが挙げられます。多くの場合、HUDは背景レイヤー上に描画されていたのです。これはレイヤーが事実上1つしかなかったためで、背景とHUDは同じスペースを共存しなければなりませんでした。大容量ROMを実現したメモリマッパチップには、多くの場合「スプリットスクリーン」方式でステータスバーを表示する特殊なタイミング機能が備わっていましたが、背景はあくまで背景であり、スプライトはその上に描画されました。そのため、操作キャラクターが画面の上部まで移動すると、HUDの上にかぶってしまうわけです。ときにはこの挙動を利用して、画面上の「普通では届かない場所」に隠し要素や通路を用意するといったことも行われました。私たちはこの奇妙な特性を気に入っており、可能なかぎり再現していますが、状況によってはレイヤー配置がおかしくなってしまうため、ケースバイケースで対応しました。

サウンドの限界

音楽は、ショベルナイトの8ビットらしさが最も際立つ分野でしょう。ただし、皆さんの記憶にあるNES/ファミコンゲームよりも、ちょっぴり豊かで多彩なサウンドになっているかもしれません。というのも、ショベルナイトの楽曲は、VRC6という特殊なメモリマッパの使用を前提に作曲されているからです。VRC6チップはファミコン時代の末期に登場し、いくつかのコナミ製ゲームで使用されました。このチップは高度なグラフィック機能を備えていましたが、最も有名なのは3つの追加サウンドチャンネルを持っていたことでしょうか。この追加チャンネルを使って、より濃密で深みのある音楽を再生できたわけですね。もっとも、VRC6のような外部サウンドチップを利用できたのは、日本のファミコンだけでした。これはNESのカートリッジ端子に外部音源接続のピンが存在しなかったためで、欧米のゲーマーにとっては馴染みのない音と言えるかもしれません。一例として、「悪魔城伝説」とその北米版「Castlevania III」を聞き比べると、その違いは衝撃的なほどです

NESにおけるもう一つの限界は、効果音がしばしばサウンドチャンネルの一つを阻害してしまうことです。NESでは音楽と効果音が5つの基本チャンネルを共用するため、ときには効果音を再生するために、1つ以上の音楽用チャンネルが一時的に奪われてしまうわけですね。この現象はショベルナイトでは発生せず、効果音は音楽の上に重ねて再生されます。NESらしくないと言うこともできますが、こちらの方が素直に音楽を楽しめるでしょう。

もし今度NESやファミコンのゲームをプレイする機会があったら、よく耳を澄ませてみてください。少しでも多くの効果音を再生するために、多くのゲームでベースやドラムやハーモニーが犠牲になっていることが分かります…

我、NESを解体せり!

以上のような変更や改良を行ったことで、ショベルナイトとNESとの間には、埋めがたい大きな溝が生じてしまったと思われるかもしれません。しかし私たちは8ビット時代の美学を尊重しつつ、むしろ強調できたのではないかと考えています。

現在ではほとんど目にすることのないゲーム様式を研究し、作り上げたショベルナイトは、私たちにとって夢のようなプロジェクトでした。「現代化」を言い訳にしてしまう危険を避けながら過去の技術的課題に挑み、解決していく工程は、本当に刺激的でした。私たちはショベルナイトがレトロゲームの薄っぺらな模倣ではなく、本当の意味でNESに忠実であること、そして強固で創造的な作品を仕上がっていることを、切に願ってやみません。