今日はゲーム製作作業を久々にやってました。いやー、苦労した苦労した…。

前回まででは実はまだちゃんと「やられ判定」ができていなかったので、主人公の座標と敵の座標を取得してそれを比較して、 重なっていたら死亡、というような処理を作ろうとしました。しかしまあ、全然上手くいかない…あまりに訳が分からなさすぎて、 エクセルに1マスずつ色を塗って中心から何マスの位置にあるかの座標まで書いてなんとかしようとしたが上手くいかず。

主人公と敵の座標を、0.5マス移動だから「精密」で取得して…敵が主人公の右にいるときは、それぞれの座標がいくつズレていればいいの…? ああ、分からん。座標の取得が「精密」の場合は、1マスを4分割したときの左上の数値を得るんだ。あ゛ー、分からん!普通はどうすんだ…!?

一旦「やられ判定」の製作から離れて、別の処理を作ることにしました。迷路中にAボタンを押したら目の前の敵を倒すが、 目の前にいるのが敵ではなくて普通の壁だった場合、壊せるという処理は作ってあります。

…だが、現在迷路を構成している壁は迷路部分も外壁も全て同じものであり何の違いもないのである。 どういうことかというと、このままでは外壁を破壊できてしまうのである。それはダメだ。

「ドルアーガの塔」では外壁を壊そうとするとマトックが壊れて使えなくなってしまうので、 そのようにすることにしました。えーと、どうやって外壁を壊そうとしていると判断したらいいかな。 主人公の座標と向きを条件にすれば、できそうではある。

例えば外壁に主人公が隣接しており、さらに主人公が外壁の方を向いている、それでAボタンを押したらマトックがバキーン、 その面ではもうマトックは使えなくなる…みたいな感じ。だがそうすると別で色々と条件式を作らないといけない。 もっと、壁を壊そうとしたときの処理に組み込めないだろうか…。

と、楽をすることを模索した結果、迷路の外壁の上にもう一つ透明な壁を設置することにしました。 これなら見た目は壁があるようには見えないけど、判定には使えます。つまり、Aボタンを押して目の前の状態を判定。 目の前に敵がいれば倒す、目の前が壊せる壁なら壊す、目の前に透明壁があったらマトックが壊れる。(実際にはマトック破壊判定が2番目)

それでなんとかマトック破壊の判定はできたのでした。その面ではもう使えないけど次の面に行くと復活しているという原理は不明。 きっと鍵を取って扉をくぐったときのフシギな魔力的なので復元したのでしょう。ウルトラダブルスパーク的なパワーの中を通過したのでしょう。

…って、それはいいとして敵にぶつかったときに死ぬ処理ができてない。やっぱりピクチャじゃなくてキャラを動かして アクションゲームを作ろうというのが土台無理な話だったのか…。

そういえば、テラメリテールを作っているときに画面内をうろうろする光ってるものをどうやって表現しようかと 四苦八苦していたときに作った処理があった。アレは確か、「X座標(精密)」でも「X座標(標準)」でもなく、 「画面X座標」というものだった。

主人公の画面内における座標と、敵の画面内における座標を比較したら…できた。一発でできた。これでよかったんかーい!!

嘆いてる時間はない、次だ次。えーと、じゃあ宝箱を出現させる処理でも作ろう。 宝箱が出現する条件は面によって違うので、ここだけはちゃんとマップごとに作らなければいけない。 敵の挙動やアイテムの挙動が出来上がったら後は配置するだけとなり、宝箱出現条件だけを作る作業になっていきそうだな。

さてと、まず1面の宝箱出現条件は敵を3体倒すということ。どうやろう。敵を倒したときに何かの数値を増やすというような処理は入れていないのである。 入れてもいいんだけど、1面の条件のためだけに今後ずっと使うコモンイベントに余計な処理をくっつけるのも… マップ内にいるスライム(パン)の数を把握できたらそれでいいんだけどな。

というわけで全ての床にいるイベントを調べることにしました。今のところ、1画面に出る敵は最大で9匹にする予定なので マップ内の床にいるイベント数が6以下だった場合に宝箱が出現すればいい。そして数えてみたところ…なぜか、結果がまちまちに。 迷路開始直後、いきなり宝箱が出現することさえある。な、なぜ?

マップ内の敵の数をリアルタイムで表示させながら敵を倒してみるが、正しく表示されるときとそうでないときがやはりある。何が起きているんだ。

…よーくよく考えてみたところ、一つの結論に達しました。もしかして、敵が重なっていたら1匹と数えられてやしないか? そう…床の上にいるイベントがいないか1マスずつチェックしていたのだが、1マスにイベントが複数いた場合も1とカウントしかされておらず、 結果敵が少ないと判断されて宝箱が出てしまっていたのだ。それは、非常に困る。

というわけで、この方法で敵の数を数えるのは中止。敵のイベントの番号は連番になっているので、全てのイベントのページ番号が 1以上だったら敵が存在、0以下だったら倒されている、という処理にして数えて何とか…できた、ような。できていないような。

なぜ歯切れが悪いのかというと、なんかまだ挙動がまちまちだからである。3匹目のパンを倒したときに宝箱が出るのが正しいんだが、 なぜか4匹目を倒したときに出ることもたまにあるのだ…なにが起きているんだろう。でもとりあえず保留。

次に、アイテムを宝箱から出現させる処理を作ろう。宝箱が出現したら…いきなりパッと現れるのはなんか寂しいから煙でも出すか。 宝箱が出現したときに宝箱の座標の位置に煙エフェクトが出るようにして、宝箱の座標と主人公の座標が一致したら 宝箱が開いて中から宝が出現。

宝の中身は面ごとに全て変わるわけだが、とりあえず今は1面を完成させるのが目的なので画像ファイルを直接指定…って、 そうだ、まだ1面のアイテムの画像を作っていないんだった。前に作った「シャベル」は仮のものだったので、改めて作成。

というわけで「ウッドスプーン(木のスプーン)」というアイテムの画像をポチポチと作り、 それを宝箱が開いたときに表示させるようにしました。画面内に表示しておこうかと思ったけど画面にもうスペースがないので ポーズをかけたときに見られるようにしようと思います。もう画面サイズは変えたくない。融通がきかないプログラムにしてしまっているのだ… 特に迷路生成とか扉や鍵の設置とかその辺の最初に作ったヤツが…。

スプーンが壁を壊すアイテムの位置づけになっています。なんでスプーンなのか?スプーンはコーンフレークを食べるのに最適だからです。 そして理由はさておき、壁を掘るのに使われることもあるからです。でも木のスプーンでは壁を壊せる回数の数に限りがありそうですよね。 もうちょっと強いスプーンを手に入れれば、1面でもっとたくさん壁が壊せるようになるはずです。

で、今日の最後の作業は主人公の絵を描くこと。そう、今までの作業は全て主人公がハニワの状態でやっていました。 しかし今後、主人公の攻撃動作や壁を掘るアニメなどを導入していくことになるので、そろそろ主人公交代の時期です。

とりあえずこれぐらいのサイズでいいだろうか、と描いてみた主人公。それを動かしたものを録画したのがこちらの動画です。


まだ音は仮のものです。タイム換算だけは何とか画面内に収めました。あとは主人公の残り人数もあった方がいいか… どれぐらいのパラメータがあるのかもうちょいよく考えてから画面に表示するものを決めようと思います。

…そして、この動画では分からないけど実はとんでもない不具合が二つ潜んでいたりします。 一つは、敵が同じマスに重なっているところに攻撃をしても1匹しか倒せないということ。 イベントが重なっているときにどうなるかを、まだちゃんと分かっていなかったゆえの不具合…。

もう一つは、鍵も扉も宝箱もイベントなので、それらのイベントと敵が重なっていると敵が倒せないということ。 鍵と扉と宝箱をピクチャにして…と思いそうになるが、それだけでは敵同士が重なっていたときの解決策にはならない。 敵を倒すときの処理、もうちょっと書き直さないといけなさそうだなあー。

あとは敵のバリエーションも考えなければ。ドルアーガの塔の敵はスライムの上位種がブラックスライムだったが、だとするとブラックパン……こげぱん…??

2020年9月6日


◆目次に戻る◆





inserted by FC2 system