私は現在、C# で、基本的に私が開発している昔ながらの見た目のゲームの NES ハードウェアの独自の解釈と呼ぶことができるものを書いています。私は FCE を起動し、NES がどのようにグラフィックスを表示しレンダリングするかを観察してきました。
簡単に言えば、NES は 2 つのビットマップに相当するグラフィック情報を保持でき、それぞれのサイズは 128x128 です。これらは PPU テーブルと呼ばれます。1 つは BG タイル用で、もう 1 つはスプライト用です。画面上に描画するには、データがこのメモリに存在する必要がありました。ここで、ゲームがこれら 2 つのバンクよりも多くのグラフィック データを持っている場合、各フレームの最後にこの新しい情報の一部をこれらのバンクに書き込み、そこにあったものを上書きし、次のフレームからそれを使用することができます。
では、古いゲームでは、プログラマーはどのように「バンク スイッチ」を行ったのでしょうか? つまり、レベル デザイン内で、ロードするグラフィック セットをどのように知っていたのでしょうか? 画面がステージのある部分から次の部分にプログラムによってスクロールされると、ロックマン 2 のバンクが切り替わることに気付きました。しかし、どのスプライトを PPU テーブルにコピーし、どこに書き込むかなど、この情報をどのようにレベルに格納したのでしょうか?
もう 1 つの例は、MM2 で一時停止を押すことです。一時停止中に BG タイルが上書きされ、プレーヤーが一時停止を解除すると復元されます。どのタイルを交換したか、どのように元に戻すかをどのように覚えていたのでしょうか?
私が怠け者だったら、巨大な静的ビットマップを 1 つ作成し、その方法で値を取得することができました。しかし、私はこれらの価値を制限して、より本物の体験を作り出すようにしています. MC Kids の作成方法に関するすばらしいガイドを読みました。このゲームのプログラミング方法については最低限のことをしようとしています。これらのプログラマーが持っていたものを使って何を成し遂げたのか、今でも頭がおかしくなります。
編集:私が考えることができる唯一の解決策は、どのタイルがいつPPUにあるべきかを示す個別のテーブルを保持することですが、それはNESが処理できない巨大なメモリリソースになると思います.