今日もちょこちょこゲーム製作作業やってました。アクションパートが入らないとラクだ…。
でももう少ししたら、アンダインがまた槍を地面からブッ刺しながら襲い掛かってくる…二重の意味でやめてえええぇ…。
そのマップに到達する直前、雨がめっちゃ降ってるマップを先日作ったんだけど雨を降らせる処理だけ作って満足して
水溜りはもういいかな!!と思って次の城のマップを作っていました。
水溜りに鏡のように主人公が映る。歩けば同じだけ歩く。逆向きに。いやムリムリ。ぼくには作れないそんなの。
そもそも、鏡を作ろうとして一度挫折しているのです。UNDERTALEで最初に鏡が登場するのはトリエルさんが住んでいる家の
廊下の一番奥。小さな鏡だけど、主人公のことをしっかりと映します。ちょっと動けば同じだけ動く。
そのマップを作ったのはゲーム製作の序盤、ちゃんと「ウディタ 鏡」などで検索して、
なんだかすごく難しいことだけは分かったと納得して、それでもちょっと悪あがきしたけどわかんなくてあきらめたのでした。
…だが、今は遺跡を抜け、雪道を進み、スノーフルの町を越え、ウォーターフェルまでやってきたのである。
あれからちょっとは時間も経過しているし少しはスキルアップしているんじゃないか…と、ちょっと勘違いをしてもう1回チャレンジしてみることにしたのです…。
あの水溜りは一応大事な演出ってか小ネタというかみたいなのがUNDERTALEでも仕込まれているわけだし、やっぱ作るべきだよなあと…!
…しかし、一度挫折はしているモノ。どうやったもんか…主人公の向きの数値を取得し、それに応じて表示する画像を変更するのはできそう。
さらに、キャラの現在表示されているアニメーションのパターンの数値も取得できることが分かった。
現在表示されているパターン数というのは、歩いていれば止まっている絵、右手を振って左足を出している絵、その逆の3パターンがあるんだが
歩行中はそれがめまぐるしく切り替わっているわけで、でも今表示しているのがどれなのかを数値で取得できるというのだ…!
つまり、その数値に応じて鏡に映ったキャラもリアルタイムで変更すれば鏡に映ったキャラも歩いてくれるのだ。
初めて鏡を作ろうとしたときはこれらのベンリな数値を取得できる項目「変数操作+」を開いたことすらなかったんだよな…
遺跡の中はその「変数操作+」を使わずに作りきったということだ…。
そしてピクチャ番号を「-1000000」以下にするとマップチップよりも下に表示されることも判明。
これらのことを踏まえると、「ピクチャ番号が-1000000の画像を主人公の位置と向きとアニメパターンに応じてリアルタイムで
マップチップがない場所に反転させたキャラ画像のピクチャを表示させればいい」ということが分かったのであった。
マップチップがない場所というか「床が透明な場所」という感じ。透過処理されている画像であれば透明な部分だけにピクチャが表示されます。
幸いUNDERTALEの水溜りは真っ暗なので、本当に「通行可能な透明な床」の下にだけ水に映ったキャラが表示されることになる!
キャラの位置は微調整が必要だけど、なんだかあっさりとできました。苦手意識というかムリだという先入観があっただけだったんだな…
ただピクチャを反転させて表示させると処理落ちっぽいことが起こって主人公の動きと完全シンクロしてくれなかったので
反転した鏡像用の画像を別で用意してそれを表示することにしました。傘持ちバージョンも別で必要です。
やれやれ、やっと出られた…じゃねえ、やっとできた…。じゃあ試しに表示させてみよう。おお、ちゃんと傘を持っている状態で
水溜りに主人公が映っている!傘を持っていないときは通常の主人公の姿が!…と、思ったら。
主人公しか水溜りに映らない!ホラーか!!
そ、そうだ…トリエルさんの家の中の鏡なら主人公一人だけが鏡に映ることを考えていればいいんだけど、
この水溜りエリアまで来てしまった以上、二人で歩くことにもなるんだ…うげげ。
…と、思ったら「変数操作+」では主人公だけでなく「仲間1」の座標や向きなども取得できることが分かった。
おおお!これなら、主人公の処理を使いまわすだけでイイやん!!
そして主人公と仲間1の水溜りに姿が映る処理は分けてどちらも並列処理にして、
水溜りの上をぐるぐる歩いて表示を確認してみました。うんうん、いい感じ。位置も完璧だ…と、思いきや。
よく見ると、鏡像が重なっているときに上の画像の下にある画像がうっすらと表示されている。ホラーか!!
水に映ったピクチャは少し暗い色になるので「不透明度」を変更して150だったかぐらいの薄さにして=暗く表示させていたんだが、
不透明度が150の画像が二つ重なると下のが透けて見えるのは大自然の法則です。そ、そうか…!
というわけで鏡像用の画像自体を暗くしておいて、不透明度は255のまま(何も透けない状態)で表示させることに。
よ、よーし…これでなんとかなっただろう…と、思ったら。まだあるんかい。
…よく見ると、二つの鏡像が重なったときに奥に主人公がいても仲間1の鏡像の方が下に表示される。
ちょっとイメージしづらいが…仲間1は主人公の鏡像の上に立っており、
仲間1の鏡像が主人公の鏡像の下にあるのである。ホラーかッ!!
これは…ピクチャ番号の順番のせいだ。数値が若いほど上に表示されるんだが、どんなときでも
「-1000001」の主人公の鏡像の方が「-100002」の仲間1の鏡像より上に表示されてしまうのである。
だが、主人公のほうがマップの上にいるなら仲間1の鏡像が上に表示されるべきだ。
…というわけで、二人のY座標(マップで表示されたときの高さ)を比較して仲間1の方が
下というか手前にいるときは「-1000000」にも仲間1の鏡像を「-1000003」と全く同じ位置に表示する=
主人公の鏡像の上にも表示することにしたのでした。
-1000002(仲間1の鏡像)を消去する処理は入れなくても問題なかったので、仲間1の方が手前にいるときは
主人公の鏡像が2枚の仲間1の鏡像に挟まれているという状態になっています。表示的には問題なし。
…と、いう紆余曲折を経て…。
やーっと、二人分の鏡像を水溜りに表示することができたのでした。
でも二人分の処理しかないので、このマップに例えばパピルスが走ってきても彼は水溜りに映りません。
結局ホラーです。
ちなみに、水溜りのマップチップのデータはこんな感じになっています。
分かりづらきことこの上なし。配布したって誰も使えないなこんなの…
透明部分が水溜り部分で、床は別の画像で床のタイルを敷き詰めて水溜りの形にくりぬいたものです。
そして一応は水溜りの処理を作れたので、久々に遺跡というかトリエルさんの家にまで戻って…。
廊下のマップの右部分をちゃんと足して、鏡を作ったのでした。
水溜りの処理をそのまま…使うことはできない。この鏡に映る自分は暗くないし、
水溜りは主人公より下に表示されるべきだったけどこの鏡の場合は上に表示されなければいけません。
なので鏡像用の画像はまた別で作成し、表示する位置も上側になるように数値を変えて、
傘を持っているか否かの判定は不要なので消して、もっともっとシンプルに出来上がったのでした。
この鏡の処理はなんとたったの26行で完成。ピクチャ番号を変数にしているので、
ピクチャ番号を直接「-1000000」と書けばさらに一行少なくなります。
見た目はとりあえず大丈夫そうだけど…忘れてはいけない。絶対にバグがある。
気づいていないだけで、バグはすぐそばまで来ているのです…殺虫剤はどこだ…。
|