“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

216.HSPでLCDゲームを再現しよう:モンスターパニック その5

次はドラキュラ。
ドラキュラの行動も基本は同じ。二段階のコウモリが表示され、ドラキュラに。そして消える。これが1ループ。

プレイ動画をよーく見ると、出現時の第一段階は、細かく点滅している。ここまで再現するかは後で考える。

出現タイミングはランダム。結構出現タイミングに幅があり、出現していない時間が長いこともあるので、調整できるようにしておかねば。
出現したら、1コマ移動するまでのフレーム数を設定して、1フレームごとに減算。0になったら次のコマに進める。
一番最後(ドラキュラ)まで表示したら、表示フラグと進んだコマ数を0にする。
このあたりは、今までのG&W再現とさほど変わりないので、サクサクと作れた。

次にミス判定を作成。
ミスの条件は、ドラキュラ出現時、プレイヤーがその場にいて、かつアタックボタンを押してないとき。
これも、プレイヤー側が少しだけ有利になるよう、ドラキュラが消えるタイミングでプレイヤーがいたらミスになるようにした。

ドラキュラはミス判定だけじゃなく、アタック判定も必要。
このアタック判定が面倒だった。待ち伏せ禁止なのだ。
ドラキュラが出現して消える前での間に、前もしくは後ろからプレイヤーが移動。さらにアタックボタンを押さないと倒せない。

前々から少し考えていた、第一階層だけは、1つ前のポジションを記録する方式にした。
左右の移動キーを押したときに、1つ前のポジションを記録。ドラキュラのところでアタックボタンを押したら、この1つ前のポジションが違っていることも条件に加えてあげた。

よし。できたーと思っていたが…はい。お気づきの方多いと思いますが、このロジックだと、その場に居ても倒せます。
そもそも移動キーを押さなければ、前のポジションを更新しないのだから…ww
ということで、どうしようかといろいろ思案した結果、ドラキュラの出現ポジションにプレイヤーがいるときに、ドラキュラのポジションが進んだら、プレイヤーの前ポジションを今のポジションに更新することにした。
これで、その場に居続けたらアタックできなくなる。

ふぅ。これで何とかドラキュラの基本部分ができた。
続く。

215.HSPでLCDゲームを再現しよう:モンスターパニック その4

プレイヤーの移動処理を作ったので、いよいよモンスターの処理を作成していく。
まずは第一階層のフランケンシュタインから。

説明書には、片腕3か所ずつ移動することは分かるが、細かいルールまでは分からない…

youtubeの動画を漁っても、あまりよくわからなかった。
そんな私を救ってくれたのが、サイト「電子ゲームの世界」でした。
数々のLCDゲームの解説がされており、もちろんモンスターパニックの解説もある。
(足りない画像もこちらから、かなりお借りしましたww)

どうやら両腕は同期していないらしい。逆に同期しないようにバラバラのタイミングで動かさないとだめなのか。
一番上から、下に、そして一番上に戻る1ループごとに、動かすフレーム数に、乱数でブレ幅をつけることにする。こうすれば、両腕の周期が同じになっても、次は、ずれて動くということができそう。

左右の腕ごとに、腕が移動するフレーム数、今のポジションなどを持たせて、処理を作成していく。
いつも思うけど、意外に面倒なのが、往復する数字の処理。1→2→3→2→1→2→3→2→…と繰り返したいのだが、加算と減算が逆転するので当たり前に作るとif文だらけになってしまう。
往復する数字が小さいので、今回は配列変数に1ループ分の数字をセット。カウンタは常に加算する。そしてMAX値になったら0に戻すというif文だけで済む。
もっといい処理方法があれば教えて偉い人w

次はミスの判定。一番下に腕が来ているとき、かつプレイヤーがその真下にいるとき、次の移動フレームまでにプレイヤーがそこにいたらアウト。
このあたりも、今までのゲームウォッチ再現でやってるので、そこまで苦労せず。

そうして出来たのがこれ。だいぶモンスターパニックらしくなってきた♪

youtu.be

214.HSPでLCDゲームを再現しよう:モンスターパニック その3

第一階層のモンスターの動きを作ろうと思ったが、フランケンシュタイン、ドラキュラ、半魚人と3キャラあるので、先にプレイヤーの移動とアクションを作ってしまうことにした。

第二階層では、ジャンプボタンでジャンプする動作がある。ジャンプのキャラ変更は、第一階層のアタックボタンと同じように、画像を二段にして、普段は一段目、ジャンプしたら二段目を表示する。第一階層と違うのは、キャラの表示位置が変わること。このあたりは、プレイヤーの表示座標値を持つ配列を2次元配列にして、簡単に切り替えられるようにした。


移動は左右キーで普通に移動。唯一違うのは、一番進んでミイラ男の前に来た時。天井が開いてて、ジャンプボタンを押すと第三階層に進む。

第三階層はちょっと特殊。上がってきた位置の左側に剣が落ちていて、その剣を取らないと、ガイコツへの攻撃ができない。
一番左の剣の位置は、ガイコツに対して安全地帯なのだが、これもしばらくすると攻撃されてミスになる。この処理は後回しで。
剣を持っているときは、一番左には戻れない。このあたりは剣を持ったというフラグで判定する。

アタックボタンを押したときの剣の表示も、いままでと同じ手法で行う。

そうして出来たのがこれ。
まだ、第三階層の剣は表示していない。
アタックやジャンプの表示フレームの調整も行っている。

まだ作らないといけない判定や、処理もあるけど、いったん次に進む。

213.HSPでLCDゲームを再現しよう:モンスターパニック その2

液晶とセロファンの切り出しに時間がかかったので、すぐに作成開始とはいかなかった。
任天堂製のゲーム&ウォッチと違い、液晶全点灯が無いだけでこれほど苦労するとは…

それでもなんとか切り貼りしつつ作り始めることができるようになった。

まずは、プレイヤーの移動から作成することにした。
モンスターパニックは、大きく三つの階層がある。
スタートして、フランケンシュタイン、ドラキュラ、半魚人が出てくる第一階層。
爆弾をこれでもかと投げつけてくるミイラ男が出てくる第二階層。
ガイコツと剣で戦い、脱出する第三階層。
それぞれアクションが違う。本当によくできたLCDゲームだ。

まず、第一階層のプレイヤーの移動から作成する。

第一階層のパターン

プレイヤーが移動するポジションは、全部で6か所。

移動ポジションは6か所

スタートの位置から右に移動したら、戻れなくなる。そして、2分動かなければ、巨人の足に押し出される。
とりあえず、巨人の足は後で作るとして、初期値が0で、右に進んだあとに左のボタンを押しても戻れないように判定処理を加える。
右に進んでいき、はしごのところ、半魚人が出てくる池があるが、右ボタンを押すとミスになる。ミスの処理も後回し。
はしごのところでジャンプボタンを押すと、はしごを登って第二階層に進む。

4つのキーが十字に配置されているので、windows版では、カーソルキーの上下左右を割り当てることにした。
stick命令でサクサク取って、判定するだけのソースは、このブログでは何度も出てきているので略。

まだ第一階層なのに、これに加えてアクションボタンの操作がある。
ドラキュラと半魚人は、タイミングよく移動して、アタックボタンで撃退できる。うん。昔のゲームウォッチなら、この第一階層だけでゲームになるな。

ということで、アタックボタンを押すと、十字架、ナイフを出すのだが、十字架とナイフだけを別表示するのは面倒なので、プレイヤー画像を二段にした。

通常は一段目の画像を表示。アタックボタンを押すと、フラグを立てて二段目の画像が表示されるようにした。この辺はいつもの論理式を使って実現。
三階層分で処理がそれぞれ違うので、判定処理はswitch文で分岐させることにした。

;プレイヤーを表示する
 gmode 2
 switch hei
  case 1: ;第一階層
   pos pposx_h1(ppos),pposy_h1(ppos)
   celput 4,ppos+(attack_flg=1)*6
   swbreak
  case 2: ;第二階層
   …
 swend

これで、移動とアタックのアクション作成まで終わり。