2024年04月23日
【ゲーム制作】面クリア型アクションゲーム 第23回
面クリア型アクションゲーム 第23回です。
今回はオープニング・エンディング処理を組んでいきます。
オープニングはタイトルだけにしようかと思ったのですがなんだか寂しい…。
そこで、昔よくあった「ストーリーのみ」を再現しようと思いつきました。
タイトル画面で放っておくと、ストーリーに替わるパターンをやってみました。
こんな感じ。
おー、昔懐かし感が出てますね。
因みに翻訳はMicrosoftのBing翻訳を使用して、詳細設計時に作ったストーリーを翻訳しました。
昔は辞書片手に一生懸命、英語化したものですが…。
便利な世の中です…。
ロゴ表示は今風、こんな感じ。
ロードするものが少ないので、一瞬です。
エンディングはどうしよう…。
このためだけに、メッセージ表示ルーチン使うのももったいないので、こちらも昔懐かし一画面エンディングにします。
メッセージだけ表示されて、BGMが鳴って「おしまい」。
懐かしさ満点ですね。
次回は「BASIC部」を組んでいきます。
2024年04月22日
【ゲーム制作】面クリア型アクションゲーム 第22回
2024年04月21日
【ゲーム制作】面クリア型アクションゲーム 第21回
面クリア型アクションゲーム 第20回です。
今回は「ハイスコア」処理を組んでいきます。
前回、敵の倍々スコア処理を組んでいて、「高得点を目指せるなら、ハイスコア必要だよね」って思ってしまいました。
確かに、昔の面クリア型のアクションゲームって、必ずハイスコアがありましたよね。
でも、現状で画面の空き無し。
特に手間でもないので、画面構成変更してハイスコア付けてみます。
50,000点で1匹増える処理(正直忘れてた)を組まないといけないので、ついでに組むことにします。
こんな感じでどうでしょう?
50,000点で1匹増える処理は、50,000点フラグを用意し、50,000点超えたらフラグを立てて1匹増やし、以降50,000点チェックしないようにします。
ハイスコアは毎回チェックし、ハイスコアになったらハイスコアフラグを立て、スコアと一緒に表示更新するようにします。
上手くいきました。
2024年04月20日
【ゲーム制作】面クリア型アクションゲーム 第20回
面クリア型アクションゲーム 第20回です。
今回はスコア倍々処理を組んでいきます。
倍々タイマーを用意し、敵に勝ったらタイマーをセットします。
最大でも3匹しか倒せない時間でセットします。
復活場所で待っていて、最初の1匹が復活する前にタイマーが切れるタイミングですね。
タイマーカウント中は、解り易いように「ハンド君」を点滅させます。
じゃんけんSPRITEを「白」→「黄」→「白」…でループさせます。
倍々タイマー中は点滅する「ハンド君」
2匹目以降の敵を倒した際は、倍々スコアカウンタを用意し、シフトで×2倍にします。
これで、1匹目1,000点、2匹目2,000点、3匹目4,000点、4匹目は時間的に倒せずタイムアップとなります。
上手くいきました。
ほぼこれでゲームのメイン部分のマシン語部は完成ですね。
次回は昔懐かしゲームにあった、「ハイスコア」を追加します。
2024年04月19日
【ゲーム制作】面クリア型アクションゲーム 第19回
面クリア型アクションゲーム 第19回です。
今回は衝突判定を組んでいきます。
衝突判定は、敵と衝突するゲームなら必須の処理となります。
MSXにはSPRITEの接触判定があるのですが、それを使った事はありません。
ぶつかっているかどうかが分かるだけで、どれとどれがぶつかったかの判断が出来ないからです。
ですので、通常の衝突判定を組みます。
衝突判定の範囲は下図の通り。
範囲はデバッグ時に再調整します。
復活カウンタが「0」の敵とだけ衝突判定を行います。
敵と衝突した際、じゃんけんで勝っていれば、敵の復活カウンタを「1」に。
あいこ、若しくは負けていればBASICに戻り、面の続きからとなります。
特に悩むこともなく、組みあがりました。
テストにぶつかりまくってみました。
問題なしです。
次回はスコア倍々処理を組んでいきます。
2024年04月18日
【ゲーム制作】面クリア型アクションゲーム 第18回
面クリア型アクションゲーム 第18回です。
今回は敵処理Bを組んでいきます。
敵の移動は、通路に曲道がない間はずっと真っ直ぐ。
曲道があるか、壁に衝突するとどちらに移動するかの選択となります。
袋小路(3方向壁)以外は、来た道を戻る事はしません。
ロジック的には、敵位置の上下左右の4方向のマップチェックをし3カ所以上空いていれば曲道有りと判断し、乱数でどちらに曲がるか選択します。
2方向しか空いていなければ、直進方向を調べ通路なら直進、壁なら曲がります。
1方向しか空いていなければ袋小路とし反転します。
いざ、ロジック組み。
良い感じです。
ゲーム完成後余りにも簡単なら、「ハンド君」に勝っている敵だけ追跡型にするのも良いかも。
次回は衝突判定を組んでいきます。
2024年04月17日
【ゲーム制作】面クリア型アクションゲーム 第17回
面クリア型アクションゲーム 第17回です。
今回は敵処理A復活処理を組んでいきます。
前回の復活アニメーションの違和感…。
うーん、アニメーション速度はいいが、なんか始まりから終わりまでが短い…。
これだと復活するポジションに「ハンド君」がいて、復活の兆しが見えてから逃げても間に合わない…。
しかも、アニメーションが味気ない…。
キラキラで復活するのに、キラキラらしくない…。
ロジックが長くなるが、復活だけ別のロジックにするか…。
いや、SPRITEパターンにかなり余裕がある(最大64パターン、現在26パターン使用)ので、復活アニメーションの種類をそっちで増やして対応します。
復活パターン2.4倍増。(5→12)
その影響で縁取パターンの位置ズレちゃったので、「ハンド君」「敵」表示ロジック修正。
いざ、テスト。
おぉ! キラキラしていていかにも復活っぽい!
しかもロジックそのまま。
良い感じです。
次回は敵処理Bを組んでいきます。
2024年04月16日
【ゲーム制作】面クリア型アクションゲーム 第16回
面クリア型アクションゲーム 第16回です。
今回は敵処理Aを組んでいきます。
これは、敵が「ハンド君」に負けて消滅し、ある程度の待機時間を空けて再度出現するまでのロジックとなります。
消滅・復活共に分かりやすいアニメーションをします。
これが消滅パターン。
こちらが復活パターン。
他のゲームの処理がどんな処理させているかは分かりませんが、私はこの一連の流れを1つのカウンタ(復活カウンタ)で処理する方法を採用。
敵がプレイヤーと衝突し負けたら、復活カウンタに「1」をセット。
後はカウント+1する毎に、下表の処理を実行します。
ロジック組んで実行…。
…おぅ、消滅も復活もアニメーションが早すぎる…。
各5パターンでは少なかったかな?
MSX1の16×16サイズのSPRITEは、8×8サイズのパターン4つを左上(⓪)、左下(@)、右上(A)、右下(B)の順に組んで1パターンとして表示されます。
SPRITEアトリビュートテーブルのパターンbノは、⓪〜Bのどれを設定しても同じキャラクタが表示される特性があります。
それを利用してアニメーションを4倍遅くします。
…それでも少し早い…。
止む無し、足をパタパタさせるためのアニメーションカウンタをタイミングカウンタとして利用。
アニメーションカウンタがある数値になったら、復活カウンタを加算する方法に変更。
…お、良い感じのスピードになりました。
しかし、消滅はいいが復活はなんか違う…。
開発に思ったよりも時間かかってしまいました、今回はここで終了。
次回は敵処理Aの復活処理を組んでいきます。
2024年04月15日
【ゲーム制作】面クリア型アクションゲーム 第15回
面クリア型アクションゲーム 第15回です。
敵処理は大きく3つに分けます。
@ 敵は複数匹いますので、ループ処理と、敵表示。
A 敵消滅から復活までのアニメーション。
B 敵移動。
今回は@の処理を組んでいきます。
ループは単純に面数に応じた敵匹数分のループ処理。
表示は仮想スプライトアトリビュートテーブルのアドレス計算が必要となりますので、そのロジック。
そして表示とアニメーションです。
これはプレイヤー「ハンド君」とほぼ同じ。
上手くいきました。
なんだか楽しそうな画面になりました。
詳細設計では敵は最上段横ラインに並ぶ予定でしたが、点滅が酷くなるので最左段縦ラインに変更しました。
次回は敵処理Aを組んでいきます。
2024年04月14日
【ゲーム制作】面クリア型アクションゲーム 第14回
面クリア型アクションゲーム 第14回です。
今回は「ハンド君」の見難い対策をします。
今作では、同時出現キャラクタ数が10種類(プレイヤー1、敵9)となります。
見易くするために、SPRITE同時表示枚数に余裕がある(最大32枚、現時点で10種類×2枚=20枚使用)ので、SPRITEもう1枚使って黒で縁取りする事にします。(10種類×3枚=30枚使用)
「SPRITE EDITOR」で縁取りキャラクタ作成。
しかし、MSX1で1キャラクタにSPRITE3枚使うと点滅が酷くなってしまいます。(横に2匹並んだだけで点滅の嵐。)
そこで、重ね合わせ位置を上下にズラし水平位置は同時に2枚しか重ならないように工夫します。
こうすることで、重なっているのはオレンジ枠部分の2枚だけになります。(赤ラインがキャラクタのY座標位置)
「ハンド君」表示ロジックを、3枚表示にして上記のとおりズラして表示するように変更します。
おぉ、良い感じです!
敵も同じパターンで行きます。
次回は敵を動かします。