東方老桜夢の技術解説 パレットについて

ファミコンのソフト開発で、真っ先に枯渇するリソースは何かわかりますか?

答えは、パレットです。

ご存じの通り、ファミコンには、スプライト用に4パレット、 BG用に4パレットが用意されています。
パレットの数は潤沢にあるとは言いにくい仕様のため、 ゲームデザインレベルでパレットの割り当てを考える必要があります。

スプライトのパレット

東方老桜夢では、自機、敵、弾丸をスプライトで表示します。

自機に1パレット、敵(ボス)に1パレットを割り当てると、残り2パレット。
弾丸は、有彩色+白で表示するので、2パレットでは4色が常時表示できる色になります。

もう1色欲しい‥‥

自機に使用する色を見ると、有彩色+白が含まれているのに気づきました。

自機のパレットも使えば、5色の弾丸が表示できます。

自機と弾丸のパレット割り当て
(0番が自機表示のパレット 弾丸の有彩色は、赤、黄、青、緑、桃)

選択した自機毎に弾丸用のパレットの色も変える仕様にすることで、 常時、特定の5色の有彩色と白ができるようになりました。

いつでも特定の有彩色が使えるのであれば、弾丸だけでなく、 敵キャラの表示にも利用できます。
これにより、ボスキャラを4色以上で表現できるようになりました。
特にプリズムリバー三姉妹のように、 複数キャラを同時に出現させるのに必須の仕様となりました。

敵キャラのパレット割り当て
(リリーホワイトの手と顔の色は白と黄の点滅で表示している。 リリカの茶色は赤と黒の点滅で表示している。)

BGのパレット

BGのパレットは、スコアなどの枠部分に1パレット割り当てて、 残りの3パレットをゲーム背景の表示用に割り当てるという、 比較的悩むこともなく割り当てが決まりました。

しかし、1点だけ課題があり工夫が必要でした。

5面ボス戦が終わり、敵キャラと会話するシーンですが、 どうしても原作に準拠したいため、プリズムリバー三姉妹を 全員並べて表示しています。
会話中のキャラの表示は基本スプライトを使っているのですが、 スプライトの横並び制限のため、ここだけは特別処理で BGを併用して表示しています。

この時、どう計算してもBGでのキャラ表示に2パレット必要になりました。

スコアなどの枠表示に1パレット、キャラ表示に2パレット、 残り1パレットでゲームの背景を描かなければなりません。

散々悩んだ結果、日が暮れたことにすれば1パレットで背景が描けると、 閃きました。

5面ボス戦後の会話シーン
(左:通常、右:BGのみ表示)

であれば、5面の道中も夕方で徐々に暗くなっていく演出をすれば、 雲を白く描く必要もなくなり一石二鳥です。 (背景が白いと弾丸の視認性が悪くなる)

5面道中のシーン
(夕方ということにして雲を色付きで描画)

あと、この決定により、1面:朝、2面:午前、3面:正午、4面:午後、 5面:夕方、6面:夜、という後付け設定も加わることになりました。

パレットの割り当ては、ゲームデザインにも影響するというお話でした。