“RUN” それは魔法の言葉

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

143.HSPでゲームを作ろう:培養臼(BAIOUS) その20

いよいよゲーム全体が出来上がってきた。ただ、全面クリアしたときにどうするかを決めかねていた。
初めは単純にALL CLEAR!と表示して終わりにするつもりだったのだが、なんとも味気ない。
そこで、簡単なエンディングを作ることにした。

といっても、スタッフロールみたいなものしか思いつかなかったwwので、ストーリー的なものをスクロールさせながら表示していこうと思った。
文字のスクロールをどうしたものかと思っていたが、すでに使用しているmod_picmespicmes命令で何とかならないかと実験。
ループで、POS命令で指定するY座標を、どんどん減らしていき、マイナスの座標を指定すれば、画面外にスクロールしていくのではと。

目論見通り、スクロールさせることに成功♪
あとは、スクロールスピードを調整するために、2フレームごとに1ドットマイナスするようにプログラムした。
最後にちょっとした止め演出をしたかった部分は、limit関数でばっちり調整できた。

このエンディングに合わせて、タイトル画面でも簡単なストーリを流すようにした。基本的な作りは同じ。違うのはショットキーの入力を受け付けて、タイトル画面に戻るようにすることだった。

これで、ぐっとゲームらしくなったと思う。

さらに、臨場感を上げるため、最終ステージだけBGMを変更することにした。
またフリーBGM・音楽素材MusMusさんのところから拝借。最終ステージだけの縛りをいくつかステージデータのファイルに仕込んで、読み込み時にフラグを立てるようにした。

ここまで作ったところで、コンテストに応募(投稿)することにした。

142.HSPでゲームを作ろう:培養臼(BAIOUS) その19

ゲームの大枠がほぼ出来上がったので、テストプレイをして難易度や、各ステージの設定を変更する作業を行った。
大体長くて1ステージ5分弱。それが全11ステージ+ボーナスステージなので、そこそこのプレイ時間を強いられる。
そこで、休憩ができないことに気づく。ポーズ機能を作ろう。

で、このブログを見ている方だけのお知らせです。スタートボタン(ボタン10)かTABキーで、ポーズできます。
って、誰が見てるのかw

さて本題。いざ実装を始めると、単純ではなかった。

ポーズするボタンを押したら、ゲームのメインループの中でフラグを設定して、自機の移動やショットの処理を実行しないようにすればよいかと思ったけど、ここまで楽をしたことが面倒なことになった…

それは、細胞スプライトの自動移動と、アニメーション。

どっちも一時停止する方法が分からない…*1
また、BGMも一時停止できない。ここは割り切って、ポーズしたら停止して、再開するときに再生し直すことにした。

で、問題のスプライト関連。ポーズボタンを押したら、サブルーチンに飛ばして、もう一度ポーズボタンを押すまで、while~wendの無限ループにすることで解決したw
これで休憩しながら、テストプレイすることができた。

*pause
  ;ポーズ処理
  mmstop  
  pauseflg=0
  mmplay SE_PAUSE

  while pauseflg=0
    JStick key,,,1
    if (key&1024) or (key&1048576) : pauseflg=1
  wend

  if soundflg=1 : mmplay bgmno
  mmplay SE_PAUSE

  return

*1:のちに、es_drawで処理保留フラグを設定すれば、停止できることは分かったので作り直した

2022年のHSPプログラムコンテストも、参加賞でした

HSPプログラムコンテスト2022ですが、12/1に結果が発表されました。
HSPプログラムコンテスト2022 入賞作品詳細

はい。今年も参加賞でした。

今年作った「培養臼」は、去年作った「Digi Mole Attack!」よりも、大幅に完成度もゲーム性も高めることが出来たと思っているし、何より公式YouTubeの番組でも紹介してもらったので、うっすら何か賞をもらえるかな?と期待してたww

残念ながらどの賞にも選ばれなかったが、入選した作品を見ると、うん。納得という感じだった。

去年までは、ゲームウォッチの再現をすることで頭の体操になればいいやと思っていたHSP3でのプログラムも、今回オリジナル(オマージュはいっぱいあるw)のゲームを一から作ることで、学生時代に感じていた、プログラムする楽しさ、思った通りに動いた喜びを、もう一度感じることが出来たと思っている。
そして、次のゲームのネタが思った以上に浮かんできたので、来年のコンテストは入賞できるように楽しいゲームを作りたいと思っている。

ついに来年は、人生半世紀を生きることになり、ますます体も頭も老化が進みそうなのでww、適度に頭を使いつつ、楽しめる趣味として続けていきたいな。

141.HSPでゲームを作ろう:培養臼(BAIOUS) その18

前回は、背景色をgmulcolor命令で変えてバリエーションを作った。ふと、ぼわーっと明るさも変えてみたいなと思った。
これも、gmulcolor命令を使えばできそうなことはすぐにわかった。RGB値を足したり引いたりするのを周期的に行えばよい。
この周期的に繰り返すところをどうするか。はじめはカウンタを別に作って、増減させようと思ったが、三角関数を使うことを思いついた。というか、思い出したw

今回は、初期値が一番明るいところから始まって、暗くなっていくようにしたかったので、cosを使った。
cos(0°)=1なのを利用する。cosのグラフは、横軸に角度を取ると、0度のときが1から始まって、90度で0に、180度で-1になる。360度回るとまた1になる。

このcosの値に、明るさを変更したい幅になる値を掛けて、元から設定しているRGB値から引けばいい(もしくは足せばいい)
この処理のために別のカウンタを作るのは面倒なのでw、1フレーム回るごとに1度進むよう、ゲーム内カウンタを360で割った余りを使うことにした。

fade_c=int(cos(deg2rad(gamecnt\360))*40)
gmulcolor 24,28,143-fade_c

HSP3のcos関数の引数はラジアンであり、度ではない。deg2rad関数を使って、度→ラジアン変換した値を使う。
\演算子は、余りを表す。これに幅の値40を掛けた。
cos関数の計算結果は、浮動小数なので、int関数で丸め込んでやる。
計算した値を使ってgmulcolor命令でフレームごとに色を設定すれば、ぼわーっと背景の明るさを変えられる。

ここで、引き算したのがB(青)の値だけなのは、試行錯誤した結果。はじめはRGBすべての色に対して fade_c を引いていたのだが、色味自体も変わってしまう。
青なら青っぽい、緑なら緑っぽい色のまま、暗くなったり明るくしたい。
単純にRGBの中で一番成分が強い色だけ調整してやると、いい具合になった。