P6イース2オープニングの作り方(4) | TINY野郎のブログ

TINY野郎のブログ

PC-6001、MSX、ぴゅう太など、昔のPCが大好きな人のブログ。

4ヶ月も放置とか…すみません。

もうP6イース2の話題もすっかり昔のこととなってしまいましたが、最初のシーンから順に、作るにあたっての苦労話や工夫した点などを色々と思い出しながら書いてみようと思います。

-----

冒頭のダレス登場シーンと、最初の夜明けのシーン。
共通して苦労した「フェードイン」について書きます。

PC-6001のSCREEN3では、4色しか使えません。
パレットチェンジなどという芸当もできません。

しかし、演出上、フェードイン(アウト)させたい場所があります。

まず、最初のダレスのシーンです。

イメージ 1

背景がフェードインしてきます。

このシーンは、作り始めてすぐだったということもあって、何も考えずにPC上で画像を作成し、すべてのパターンデータを持たせることにしました。

書き換える部分は11x14=154セル、それを3枚。

細かい部分が多く、セルの共通化もほぼできないということもあって、めちゃめちゃメモリを使っています。

このシーンは本編から独立していることもあって、なんとかメモリに載せることはできたのですが、作っている最中から、

「この作り方はヤバい」

という気がしました。


メモリ問題はすぐに表面化しました。

タイトル画面の後の、本編最初のシーン。
ダームの塔の夜明け。遠くに見える山の間からキラリと太陽の光が見え、塔が明るくなるシーンです。

4色しか出せないうえに解像度も低いP6では、他機種のように滑らかに色を変化させることは無理です。
目標を「夜から朝へ移り変わったことが表現できれば良い」と割り切ることにしました。

とはいえ、基本的には最後までオンメモリで動かしたいので、ダレスのシーンのようにフェード用のパターンデータをすべて載せるわけにもいきません。

そこで、プログラム処理だけでフェードっぽく見えるよう、色々と試すことにしました。

まず、1ライン抜きです。

VRAMへの描画の際に、Y座標を1ライン置きに描画すれば良いので、プログラム的には簡単です。

イメージ 2

ダメですね。
いかにも「1ライン抜きました」的な絵になってしまいました。
しかも、1ライン抜いたところで全く夜には見えませんし、元々メッシュで描いてある山は縦縞になってしまいました。

次の方法を考えます。

元の絵を全体的に暗くするために、青のメッシュをかけてみます。

イメージ 3

これもダメです。
元々メッシュで塔に影を付けていた部分が埋もれてしまっていますし、山については赤の部分が全く隠れないので、メッシュをかけた効果はゼロです。

メッシュのタイリングパターンをずらしてみました。

イメージ 4

山の赤いドットが隠れることで、暗い感じは出ています。
塔の影の部分も、さらに暗くなってくれました。

ただ、やはりちょっと明るい。

雲や塔の黄色い部分は、メッシュをかけても明るく目立ってしまうため、どうしても夜の暗さが表現しきれません。

特に空と雲は、「夜→朝」というより、「メッシュあり→メッシュなし」としか見えません。

できれば、もっともっと暗い感じが出したいのです。

黄色は使わず、青と緑だけで表現するくらいがちょうど良いのかも…?

やってみましょう。

プログラムでドット単位で置き換えるということも不可能ではないですが、ここはPC-6001のVRAMの特徴を上手く使って、最低限の処理で、これを表現することにしました。

PC-6001のSCREEN3は、VRAMの2ビットで1ドットを表しています。

[00]…緑
[01]…黄
[10]…青
[11]…赤

例えば、

緑黄青赤

とドットが並んでいた場合、

[00][01][10][11]

となるわけですが、ここでVRAMと &hAA(2進数で[10101010]) との AND を取ってみます。

[00][01][10][11]
[10][10][10][10]
----------------AND
[00][00][10][10]

つまり、

緑黄青赤
↓↓↓↓
緑緑青青

ということになり、赤や黄色の部分も、青と緑に変換されます。
この操作を、先ほどの画像に行ってみました。

イメージ 5


夜っぽいです。いい感じです。

これで、フェード用のグラフィックデータを一切持たせることなく、夜→朝への変化をつけることができました。

実際のシーンは、これにさらに1ライン抜きを加えることで、もう一段階暗い画像を作り、それを切り替えて日の出のシーンを表現しました。

たかがフェードですが、パレットを持たず、色数もメモリも少ない、P6ならではの苦労があったのでした。