2024年11月04日
【ゲーム制作】シューティングゲーム 第26回
シューティングゲーム 第26回です。
今回は、敵表示処理のみ組んでいきます。
なぜ、敵表示だけなのか?
それは敵移動を組むのが大変なので後にして、それ以外を先に組んでしまおうと言う逃げ根性です。(冗談です。)
敵の表示は、敵の弾の発射起点であったり、当たり判定チェック用であったりと、しておかなくてはならないので、先に表示のみを組みます。
敵の数は10匹。
10回ループさせ初期位置にちゃんと指定のキャラが表示されるのを確認。
ループ処理の中に敵移動サブルーチンを呼び出すため用のスペースを開けておきます。
ついでに、共通ロジックとして敵が画面外に出た時の処理も組んでおきます。
もうひとつ、共通ロジックとして敵死亡アニメーションを組み入れます。
敵の死亡フラグを立てたら、ちゃんとアニメーションするか確認。
問題なく上手くいきました。
…アニメーション、ちょっと早いかな…?
まぁ、いいか。
敵の死亡、生物なのになぜ爆発なのかは、触れてはいけません。
次回は、パワーアップアイテム出現処理を組んでいきます。
2024年11月03日
【ゲーム制作】シューティングゲーム 第25回
シューティングゲーム 第25回です。
今回は、SPRITEパターンbフ指定について考えます。
今作は敵の種類が多く、動きも多種となりますので、SPRITEパターンb指定する際のルールを決めます。
なぜなら、今までならSPRITEパターン数が少なかったので、空いていても問題なかったのですが、今作はパターン数が多いので、空いているところがないように効率よく配置する必要があるからです。
これを決めないと、SPRITEがいつまでたっても完成しない。
まず、動作タイプの種類を挙げます。
タイプ | パターン数 | 主な敵種 | |
@ | ・向きあり ・アニメなし | 2 | 直進する敵 動きの速い敵 |
A | ・向きなし ・アニメあり | 2 | イソギンチャクなどの固定砲台 カニなどの甲殻類 |
B | ・向きあり ・アニメあり | 4 | 通常攻撃してくる敵 |
C | ・向きなし ・アニメなし | 1 | パワーアップアイテム 岩などの地形 |
今作では、向き(右・左)と、アニメーション2パターンで、敵1種につき最大4パターンとなります。
配置順は、右方向のアニメパターン1、右方向のアニメパターン2、左方向のアニメパターン1、左方向のアニメパターン2の順とします。
この時、気を付けなければならないのが@のタイプ。
アニメパターンがないので、ひとつパターンが飛びます。(下表参照)
効率よく配置するためには@のタイプは偶数種用意する。
難しければ、間にCのタイプを入れる事で、無駄なく配置できます。
上記ルールに則って、各面のSPRITEを描き直し、再配置します。
うーん、あまりキャラクタに時間掛けてられないので、とりあえずこれにて完成とします。
1面
2面
3面
一部海の生物じゃないものもいますが気にしない…。
次回は、敵の表示のみを組んでいきます。
2024年11月02日
【ゲーム制作】シューティングゲーム 第24回
2024年11月01日
【ゲーム制作】シューティングゲーム 第23回
突然敵の弾や、敵が消えたりする現象発生!
原因不明。
もしや!と思い、走査線割り込み処理からメイン処理に全ロジック移したら、現象が発生しなくなりました…。
なんでだろう…?
メイン処理と走査線割り込み処理で、ワーク変数等ダブってるとおかしくなるのでわざわざ全部分けたのに…。
うーん、考えてるだけ時間の無駄、バグが出る以上止む無し、走査線割り込み処理にはBGM演奏ルーチンのみ残し、あとは全部メイン処理に持っていきます。
メインプログラム | 走査線割込み |
プレイヤー処理 プレイヤー弾処理 敵処理 敵弾処理 当たり判定 背景処理 SPRITE水平ライン5枚以上点滅 他 | BGM・効果音演奏 |
「SPRITE5枚以上表示」もメインに持っていくのは、例のバグ解消のためです。
振替えはそれほど手間ではないので、ゲームの完成が見えてきたら改めてチャレンジします。
過去の未完成パワーアップ型縦スクロールシューティングゲーム「セイバー」で、同じ処理やってて問題なくできてるんだけどな…。
既にソースがないので、詳細は追えませんが…。
今作と同じ、衝突判定とスクロールのみメイン処理で、残りは全て走査線割り込み処理内ですが、何の問題もない…。
私が何か忘れてるのかな…。
知見がある方ご教授お願いします。
2024年10月31日
【ゲーム制作】シューティングゲーム 第22回
シューティングゲーム 第22回です。
今回は、プレイヤーのパワーアップ(速度)について考えます。
パワーアップ(速度)=スピードアップです。
こちらがスピードアップのパワーアップアイテムです。
前回、移動カウンタを小数点扱いとしました。
実はスピードアップすることも、勘案しております。
プレイヤー速度の初期値を、縦横方向は「100」、斜め方向は「70」としました。
スピードアップは、1つ取ると速度が1割アップする事とします。(縦横方向+10、斜め方向+7)
スピードアップは、最大で5つまで取得できます。
取得数 | 縦横方向 | 斜め方向 |
1 | +10(110) | +7(77) |
2 | +10(120) | +7(84) |
3 | +10(130) | +7(91) |
4 | +10(140) | +7(98) |
5 | +10(150) | +7(105) |
最大時は、縦横方向150、斜め方向105となり、初期値の1.5倍の速度となります。
これ以上速くなると、操作が困難となる速さです。
(まぁ、無制限でも面白いと言えば面白いのですが…。)
パワーアップの仕組みについては当たり判定時に、パワーアップアイテムとプレイヤーとの衝突時に組みますので、ここでは速度のアップ率のみ決めておきます。
次回は、プレイヤーの弾を組んでいきます。
2024年10月30日
【ゲーム制作】シューティングゲーム 第21回
シューティングゲーム 第21回です。
今回は、前回説明した内容に則り、プレイヤー移動を組んでいきます。
斜め方向移動が、狙撃弾と同じ考え方と言う事は、小数点以下が必要になります。
そこで移動カウンタを設け、その値を小数点扱いとし、加算値を加え1を超えたら実際の座標を±1する事にします。
移動速度の初期値を、縦横方向は+100、斜め方向は、Laboratoryテーマ9「32方向弾」の45度時の加算値を利用し+70と設定します。
移動カウンタが100を超えたら1ドット移動します。
変数的には、このように取っています。
変数用途 | 備考 |
プレイヤーY座標 | プレイヤーが表示されるY座標 |
プレイヤーX座標 | プレイヤーが表示されるX座標 |
Y座標移動カウンタ | 加算値を加え100を超えたらY座標に±1 |
X座標移動カウンタ | 加算値を加え100を超えたらX座標に±1 |
縦横方向加算値 | 初期値:100 |
斜め方向加算値 | 初期値:70 |
因みにX・Y座標をX・Yカウンタと別々にせず、それぞれ16ビットで取り「100」を「256」として換算すれば、もう少し楽に計算できます。(桁上がりなど)
でも、自分で分かり易いように組んでます。
この仕組みで、縦横方向は1回の移動で1ドット移動し、斜め方向は2回で1ドット移動します。(70+70=140-100 余り40)
これで、8方向弾と同じ速度比になります。
んー、長い!
なんか凄く回りくどいロジックになった気がする…。
2,710行からの「P MOVE COUNT」で移動カウンタを加算。
2,930行からの「P MOVE」で移動カウンタの100越えをチェックし、座標値加減算しています。
さっき書いた16ビット化なら、「P MOVE」は不要ですね…。
まぁ、今回はこれでいいか、次回作はもう少しスッキリさせたいな。
次回は、プレイヤーのパワーアップ(速度)を組んでいきます。
2024年10月29日
細かく修正㉛
「ゲーム制作」の「製作メニュー」の「海底大戦争」の各回へのリンクを追加。
「ゲーム制作」の「シューティングゲーム」の前後回へのリンクが全て切れていたので修正。
それ以外は、画像の貼り直しや、記事の誤記の修正程度です。
2024年10月28日
【ゲーム制作】シューティングゲーム 第20回
シューティングゲーム 第20回です。
今回は、プレイヤー移動処理について考えます。
さて、プレイヤーの移動ですが、MSX1のゲームは基本8方向に移動します。
(STICK命令で取得できる方向が8方向だから。)
この時注意しなければいけないのは、縦横方向の移動速度に対し、斜め方向は8方向弾のように「少し遅く」なる事です。(上手く説明できないので下図参照。)
実はこれまでに公開してきている過去作品の「シューティングゲーム」で斜め移動できるものは全て、縦横移動と同じ速さで(斜め移動時もX・Y座標それぞれ1ドット)移動しているので、斜めだけ早く移動します。(敵も同様。)
まぁ、過去作品の敵の弾は、まっすぐ下に進むタイプなので大きな問題にはならないのですが、今作は狙撃弾を予定しています。
という事は、弾は当然斜め方向だと遅くなります。
よって、プレイヤーが敵の狙撃弾から逃げる時、斜めに逃げると早く逃げれるという現象が発生します。
それは大きな問題です。
前置きが長くなりましたが、上記問題の解消の為、プレイヤーも敵も斜め方向は遅くします。
次回は、今回の内容に則ったプレイヤーの移動処理を組んでいきます。
2024年10月27日
【ゲーム制作】シューティングゲーム 第19回
シューティングゲーム 第19回です。
今回は背景の「疑似スクロール」処理を組んでいきます。
擬似スクロールは試作ディスクで紹介したSCREEN1.5のOUT命令版を利用します。
FONT作成時に作った絵柄をドットシフトしますので、4FONT×4FONT×3ブロック×8バイト=384バイト×2(パターン、カラー)=768バイト(&H300)分シフトとさせる必要があります。
結構な負荷になりますね…。
まずは、シフトに必要なFONTデータをワーク(&HBD00~&HBFFF)へ転送。
ワーク内でシフト処理して、OUT命令で一気にVRAMへ転送します。
良い感じです!
「SPRITE水平方向5枚以上表示」処理と「BGM演奏」した状態で、疑似スクロールをしています。
画面がチラついていますが、今後全体的に処理が遅くなると自然に直る(希望)と思いますので、今は放置します。
最後まで直らなければ、色を2色固定にしてパターンテーブルのみのスクロールにします(カラーの処理がなくなるので転送量は半分になる)、それで画面チラつかないことは確認済み。
次回は、プレイヤー移動を組んでいきます。
2024年10月26日
【ゲーム制作】シューティングゲーム 第18回
シューティングゲーム 第18回です。
今回はタイトル処理を組んでいきます。
タイトルは、前作そのままのBASICロジックで、タイトル画面で放っておくと、ストーリーに替わるパターンです。
こちらがタイトル。
少し時間に余裕があったので、縁取り加工をしてみました。
良い感じです。
タイトルが飛び出しているような立体にしても良かったのですが、今回はパス。
タイトルを「海底大冒険」から「海底大戦争」に変更。
元は同じでも違うものなんだよと意識づけの為に。
ロゴ表示、宣言通り「SINCE 1987」は除きました。
こっちの方がいいですね。
エンディングはストーリー以外、どんなのにするか考えていないので、最後の方でやります。
次回は、「疑似スクロール」を組んでいきます。