“RUN” それは魔法の言葉

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

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

思いのほか早くコンティニュー機能を作れたので、ステージ練習機能の作成に取り掛かった。
とりあえず思いついた仕様はこれ。

  • 選択したステージが終わったらゲームオーバー
  • 本編で進んだステージまでしか選べない
  • ボーナスステージは対象外(ボーナスステージで終わった場合は前ステージまで)
  • ラストステージも対象外

とりあえずステージ選択画面を先に作った。

ステージデータはCSVファイルを読み込めばよいのだが、ステージ選択のために使うことは考えていなかったので、ちょっとだけ面倒だった。
何ステージでも作れるようにしたり、; が先頭の行は、コメントとして扱い、読み込み時はスキップしたりしていた。

ステージデータのCSV

全部の行を最初に読み込んで、配列に入れるのは非効率と考え、ステージ開始時に1行分のデータを読み込み、各変数にセットするようにしていた。

こんな作りなので、各ステージの始めに実際のCSVの何行目を読み込むかを変数で指定する。同じCSVデータを使うので、練習するステージを選択したら、実際のCSVの行数を渡さなくてはならない。

そこで、ステージデータのCSVを全部読み込んで、ステージ番号とその行数を配列に格納することにした。
選択したステージの行数を持ってる配列の値を、ステージ最初にCSVファイルを行数指定して読み込むルーチンに渡してやった。

あとは練習モードであるフラグを設定して、ステージクリアとゲームオーバーの判定処理に、練習モードならば無条件にゲームオーバーになる処理を加えた。
ただ、画面が全く同じままだと判別できないので、ゲームの進行中は、画面左下に「PRACTICE」の文字を点滅表示させた。

これで、コンテストの〆切前に機能追加したバージョンをアップすることができた。

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

新年あけましておめでとうございます。
今年もHSP3で、アラフィフの趣味プログラムを続けていきますので、どうぞよろしくお願い致します。

さて、昨年からの続き。コンテストに応募した後に、新たな機能を作るようにした。

 ・コンティニュー機能
 ・ステージ練習機能

まずはコンティニュー機能からとりかかった。
ゲームオーバー画面にコンティニューするか、そのまま終わるかの選択肢を表示する。
ついでにコンティニューを無限にできても仕方ないので、回数を3回にした。
ちゃんと定数に定義したので、ソースの冒頭を書き換えれば回数を増やしたり、減らしたりできるようにした。

ゲームオーバー画面は、BGMの長さを考慮した長さのループを作って、ループが終わったらタイトルに戻るように構成していたので、キー入力を受け付けていなかった。まずキー入力のルーチンを組み込み、コンティニューするか終了するかの選択ができるようにした。

コンティニューを選択したら、同じステージを繰り返すように、フラグを立てて、ステージデータの読み込み行数を変更せずに、ステージ初期化ルーチンに飛ばしたのだが、スプライトの表示初期化や、フラグの処理が足りておらず、それらの処理の実行場所を変えたり、処理を追加した。

コンティニューの仕様をもう少し詰める必要があった。
まず、エンディングをどうするか。
せっかくなので頑張ってもらうために、エンディングはノーコンティニューじゃないと見れないようにした。

よくある処理だが、コンティニューしたとわかるように、スコアを1足すことにした。ゲーム中の最低点が100点なので、1の位は0より増えない。これで見た目でコンティニューしたかがわかる。

ボーナスステージでもゲームオーバーになることがある。ここでコンティニューしたら、次のステージに進むようにした。
あと、最終ステージはコンティニューできないようにした。

このような条件を満たすための条件分岐と、フラグの追加などを行って、コンティニュー機能が完成した。

もともとコンティニューさせることを決めずに作っていた割には、比較的簡単に処理を追加できたのはラッキーだった。
なにせ、フローチャート作成も、プログラムの構造設計も全く行わずに作ってるからww

まぁ、このレベルのソース量ならスパゲッティにならずに見渡せるからいいかな。
構造設計、今後は多少やっておくかw

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

無事、HSPプログラムコンテストに応募して、友人たちにも完成版を遊んでもらうことにした。
友人たちは既にプロト版をテストしてもらっていたので、すんなり受け入れてもらったのだけど、他の人にはそうはいかなかった。

もともとシューティングゲーム好きな私なので、壊しちゃだめなシューティングは面白くないかね?と思ったのがきっかけ。
プレイすると、爽快に敵を破壊できるけど、ゲームオーバーになる。あれ?なんで?と思ってほしかった。

でも、これは逆効果だった。結局ルールが分かりにくいのだ。
最初は画面端に細胞がくっついたのがバグだと思われ、報告をいただく。
次に、目的が分かりにくい。わかってからでないと遊べないと。
さらに、爽快感を味わってもらうはずのボーナスステージ。細胞は吸着するものだと思って、破壊せずに膨らませたまま画面外に逃していたと。

完全に自分よがりだった。ただただ反省。

そこで急遽、プロモーションビデオもどきの動画を作成してyoutubeへアップして、リンクを紹介した。
紹介文の中にも簡単なルールを記載した。

こういう気配りと、何も説明しなくてもすぐに遊べるようなゲームデザインが大事だなと痛感した。

で、もう一つの気がかりとして、シューターとしての腕は自分よりも上、と思っている友人たちが難しすぎてステージ3を超えられないとの報告があった。
確かにステージ3以降は、細胞の方向が変わったり、武器固定になったりするけど、自分でもギリギリクリアできるぐらいの難易度に調整したはず。
追尾される細胞の出現など、ステージの変化を味わってもらう前に、ゲームを終わられは困る。
そこで、〆切まで2週間あったので、新たな機能を作ることにした。

 ・コンティニュー機能
 ・ステージ練習機能

2022年内の更新は、最後になります。
今年もつたないブログながら、ご覧いただきありがとうございました。
2023年もよろしくお願い致します。

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

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

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

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

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

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

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

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