Hello, my name is pornanime.

なぜ「2人用F-ZERO」ができなかったのか

はい。
ああ、近所の通り魔は捕まったそうです。これで背後を警戒しなくてよくなりますね(尚、実際は数日で忘れて背後なんか見なくなってた)



さて、なぜかヨーロッパの人達はレトロゲームが大好きなようでTwitter等でよく反応をもらう(日本人より多い)のですが、その中で Mode 7 使わないの?使ってよ、と言われて、せっかくなので全機能制覇を目指してテストプログラムを作ってみました。
Mode 7 というのはF-ZEROやパイロットウィングスみたいな……と言えばもう伝わったかと思いますが、巨大な一枚絵をグリグリ回すスーファミ独特の疑似3Dのことを指しています。(尚、下に書きましたが技術的には「画面モード7」の応用例として疑似3Dがあるだけで、疑似3DのことをMode 7と呼ぶのは俗称です)

↓結果としてはこんな感じに

実は「画面モード7」自体には3D機能は無く平面の変形機能を提供するだけで、遠近法を実現するためにはラインごとの変形操作を自分でやる必要があります。なので意外と面倒。

で、これを実際ゲームに使うかというと……うーん……まあデモで一瞬使うぐらいかな。



ところで、ミニスーファミ発売記念のインタビューでこんな話がありました

そもそも『F-ZERO』って、ものすごく長い直線を、時速400キロで走りきるというゲームですけど、2人で遊べるように画面を上下に2分割にすると、同じことをやるのは絶対に無理だ、ということがわかったんですね。

――ハードの制約上、どうしてもくねくね曲がったコースにせざるを得なかったんですね。
紺野 はい。そのような密集したコースを走らせられるのは、カートくらいしかない、ということになったんです。

https://topics.nintendo.co.jp/c/article/3228ce3a-8d29-11e7-8cda-063b7ac45a6d.html

読んだときは「へー」と流していましたが自分で実装したところ理由が分かってきました。

Mode 7のBGサイズはピクセル数で言うと1024×1024固定で、これより大きくも小さくもなりません。画面サイズの256×224と比べると結構大きいように見えますが、F-ZEROのようなスピード感を出そうとすると端から端まで一瞬で到達してしまいます。上のデモだと地面に白い金網がある所がBGの端なので、1秒程度で到達しています。ということは、何も考えずにF-ZEROを作ると1周が10秒もかからず終わる詐欺みたいなゲームになってしまいます。

実際のF-ZEROではどうしているかというと、コースの一部だけをVRAMにロードして、プレイヤーの動きに合わせてストリーミングするという手段で、1024×1024より広大なコースを実装しています。

f:id:gyuque:20180602030712p:plain

当然、ロードする範囲はプレーヤーの場所と1対1なので、プレーヤーが2人に増えるとBGが2枚要ります。しかしMode 7で使えるBGは唯の1枚だけ。ということで、マリオカートではストリーミングを諦めて

f:id:gyuque:20180602031127p:plain

単にコースを1枚に詰め込むという実装で、この点だけ見るとF-ZEROより退化しています。しかしここで「カートということにして車を遅くする」というアイデアを出してきて最終的にマリオカートにしてしまうのが任天堂のデザイナーの力でしょう。

ということでまあ、プロは流石やねという話です。



ちなみにテストプログラムはgithubに上げたので試したい方はどうぞ
https://github.com/gyuque/snes-m7/releases