今日もゲーム製作作業をできるときはやっていました。ついに、川に巨大な氷を流すあの処理を作成することになったのである…!

小屋から氷が出てくる、ベルトコンベアが下にあり、氷も右に向かって流れていく。 水に入ると水しぶきが上がり、氷は半分水に沈んで半分は水面から出た状態でぷかぷか右へ流れる。 その流れる途中、川の流れに乗るのかスピードアップする。

こんなにもやることがあるのか…。

まずベルトコンベアをどうやって作るのか。小屋から氷が出てくるって事は氷の一部は小屋に隠れていなければいけないということだ。どうやるんだ。

どうやったらいいのか分からず、あろうことか最初、全部ピクチャで作ろうとしました。 画面が止まった状態ならいいけど、主人公が歩けば画面も氷も全部スクロールするのにそれは無謀というものです。

まっさらなベルトコンベアをつくり、ベルトコンベアの一区切りをピクチャにしてスクロールさせようとするけど、まあ、うまくいかないよね。 座標がなんだって?スクロールがどうしたって?サッパリです。

次に氷。氷もピクチャで作り、それをベルトコンベアの上の位置に出現させてつくロールさせようとするけど、まあ、うまくいかないよね。 試しに動かしてみたら画面の左上に氷が浮遊。超常現象か!

そして時間を置いてからもう1回作り始め、ベルトコンベアはアニメーション可能なマップチップ「オートタイル」として作成すればいいとか、 氷はキャラクターとして表示させて歩いて右に動いていることにすればいいことに気づきました。おっそい。

ベルトコンベアの位置が丁度オートタイルとして1枚で表示できるようにしたかったので小屋の配置を数ドット微調整し、 ベルトコンベアのパーツとして3つ、アニメーションのコマ数として4つのマップチップを製作。動かしてみたらイッパツで完成。 なぜピクチャで作ろうとした…。

もっとアニメーション数を増やそうとしたんだけど、オートタイルのアニメーションの切り替わり速度は変えられず 枚数を増やすとベルトコンベアの動きが遅くなってしまうのでコレでいっかと納得。

次に氷の動き。右に歩かせるんだけど実際に歩くアニメーションをしてはいけないから歩行アニメとかはオフに。 小屋の入り口から出てきたとかそういうのは後で考えるとして、とりあえずベルトコンベアの上を右に歩かせてみる。

テストプレイをしてみたら小屋の入り口直後で氷が詰まっている。

入り口で氷が再凝固してへばりついているのか。ベルトコンベアの故障か。なぜ右に動かない!? イベントは並列実行にしてあるのに、起動条件も満たしているはずなのに…。

と、思ったらベルトコンベアがある位置は柵の向こうなので主人公が入る予定はなく、 各マップチップの通行許可の設定をしておらずベルトコンベアが壁扱いになっていたのが原因でした。 氷は氷とはいえキャラクターであり人間であり、壁に向かって歩こうとしても壁にぶつかったらそれまで。もうそれ以上は歩けなくなってしまうのです。

氷は小屋の前に出現し、右に歩けと言われても右は壁扱いのマップチップであるベルトコンベア。 出現直後、1歩も歩けないという状態になっていたのでした。

というわけでベルトコンベアを歩行可能…にすると主人公がそっちにいけたときに歩けてしまうので、 別に柵の向こうに行けるようにする予定はないけど氷を「すり抜け状態」にしたほうがラクなのでそうしました。

そして、見た目はとりあえず完成。小屋の中から氷も出てくるようにしました。


あとは川に氷が飛び込んで、しぶきのエフェクトが出て、半分沈んだ氷の絵に切り替わり、右へ素早く流れていけばOK。 まだやるべきことは山積みです。

氷が飛び込むときは「キャラ動作指定」で右下にジャンプさせることにしました。右に2、下に4の位置に氷がジャンプしてくれ。 と思ったけどちょっと急すぎる。じゃあこれぐらい…うーん、右に10歩も移動してからジャンプ位置を確かめるのは効率が悪いな。 右に10歩移動というのは今は消しておいて、ジャンプだけ見よう。

テストプレイをしてみた。画面左上から氷がバウンドしながら主人公の目の前を転がっていった。 あ、危ねえッ!下敷きになったら確実に死ぬサイズだぞ!!

アレに似てました。ゼルダの伝説神々のトライフォースの「ヘブラ山」の山頂付近のキャベツ巨大な落石の動きに…。 氷がボヨンボヨン跳ねながら画面左上から右下へ移動していく処理はできたぞ!いつか使うかもしれないから覚えておこう!でも今はいらん!!

さらに微調整して着水完了。氷が半分沈んだ絵を2パターン用意してアニメーションさせて、ぷかぷかしている感じにもなった。よしよし。 あとは水しぶきのエフェクトをつければOKだ。

さすがに水しぶきはピクチャで作成し、氷の座標の位置に表示。水しぶきはUNDERTALEでよく見てみると まず上からつぶされたような形で表示され、次に縦に長く表示されてそれと同時に透明になっていっている。これを再現するのか…。

どうしたもんかな、と表示したピクチャにエフェクトをかけてみることに。 「自動拡大縮小」というのがあって、縦と横をそれぞれ別々に伸び縮みさせられる。おお、これじゃないか!

えーと…最初はつぶれていて横長って感じの形だから…横は…「-150%」とか?あれ?違う? 縦は…縮んでほしいんだから、-20%とか…?ん?分からん。とりあえず動かしてみよう。

そしてペーパーマリオのようにくるんくるんひっくり返る水しぶき。違う!!

そ、そうか、100%を基準にするんだから、マイナスにすると反転してしまうのか! じゃあつぶれてほしいなら縦は20%、横は元の画像よりちょっと伸びるから120%だ。よし、またとりあえず動かしてみよう。

水しぶきがみよんみよん伸び縮みを繰り返している。だいぶシュールというかコミカルというか… それに、困ったことに起点が左上になっている。水しぶきの左上を軸にして伸び縮みしている。これはちょっとおかしいぞ…。

UNDERTALEの水しぶきは下の辺の中心を起点に伸縮している。つまり下部は固定、上方向にしか伸びていないのである。 だが今やっているのは左上から右下に伸びているという状態。ウィンドウのサイズを変えようとしてウィンドウの右下をクリックして マウスをういんういん動かしている感じの動きになってしまっているのだ。分かりづらいな。

さて、どうやって下を起点に動いてもらえばいいんだ…?ピクチャの表示には「位置」ってのがあって「左上」や「中心」を選べるけど、 エフェクトにはそれはない。じゃあ「ピクチャ」の「拡大率」を「移動」で変化させて、Y座標の位置をもっと上にすれば…うお、できた。

あとはそれと同時にピクチャを数十フレームかけて消去すればフェードアウトしたように見える…かと思いきやその処理が優先されてしまって 伸び縮みしてくれなかったのでピクチャの透明度を上げて透明にして、その後に消去することにしました。

さらに、そのマップは上と下へ移動ができるので水しぶきが表示されているときにマップ移動してしまい、 それが水しぶきを消去する前だったとしたらそれ以降の冒険、画面外に人知れず水しぶきがずっと存在しているということになるので マップ移動時に水しぶきのピクチャを消去する処理も入れて、コレでいいだろう…。

だがここで、氷を常に2つ表示しておきたくなってしまったので(一つが画面外に消えたら次のが出てくるのではなく、 一つが川に入った辺りで次のが小屋から出てくるように)同じイベントをもう一つ作ってピクチャ番号を一つ変えて…などとやって、とりあえず完成!

Gルート中は氷が出てこないけど…まだその辺は作ってないです。だが今日でまたピクチャの処理というとっても大事だけど まだよく分かってない部分があるヤツを少し理解したのであった。レベルが上がったぞ!UNDERTALEでレベルUPはまずいぞ!

ものすごく試行錯誤した氷の処理ですが、ウェイトや座標の取得も含めて全部でたったの10行のプログラムでした。 す、少な…。

というわけで、その氷が川へ流れていくだけですがその辺りの動画をまた録画しましたので、 プレミアムダイアリー・ゲームの製作風景として公開しました。 こちらのページで 見てみてやってください。氷が流れていくか監視するのも大事なお仕事なんです。たぶん。

2019年6月26日
◆目次に戻る◆






inserted by FC2 system