アフィリエイト広告を利用しています
 

2024年04月28日

【ゲーム制作】面クリア型アクションゲーム 第28回






←前回初回次回→


面クリア型アクションゲーム 第28回

ドット抜けバグが、どうしても直らない…。
24_4_28_1.png
稀なんですが、毎回発生する場所も違うし、タイミングもバラバラで規則性がない…。

走査線割込みでSPRITE5枚以上の表示処理をしているので、それの影響であることは容易に推測出来ました。

ただ、まぁそれでもドット消しロジックのバグの可能性もあるので、そちらも調査。
ドットを消した場所とその隣に別のキャラを表示するように修正。
稀にですが、予想通りどちらかが抜けます。
と言う事は、ドット消しロジックがおかしいわけではないと結論。
(ドット消しロジックがおかしいのなら、両方共表示されない。)

次に、OTIR命令で転送が終わるまでに次のVRAM操作が入るのかな?と考えましたが、割込み処理ロジックでは、SPRITEシャッフル処理の後、BGM演奏ルーチンを実行しているので、転送処理時間が足りていない事はないと言い切れます。(32枚×4バイト=128バイト分の転送待ち時間)

しかし、ひょっとしたらの可能性が捨て切れないので、シャッフル処理とBGM演奏ルーチンの間に大量NOPを追加してみました。
…やっぱり直らない…。

何処かのサイトで、割込み処理内でVRAM操作すると画面がおかしくなる。とありました。
うーん、正しくこの状態なのかな?

そこでシャッフル処理だけ割込み処理から外してメインロジックに組み込んでみました。
遅い…。
「ハンド君」、敵、衝突判定、シャッフル処理のタイミングループ時間を調整。
うーん、ドット抜けは無くなりましたが、割込み処理でのSPRITE表示を見越して作成した、キャラクタ初期位置表示や、「ハンド君」消滅アニメーションが、おかしくなりました。
この方法を採用するなら、そのあたりのロジックを修正する必要があります。
この方法はどうしても直らなかった時ですね…。
とりあえず元に戻します。

となると、次に原因の要因となるのはドット消し時の&H004D。
そこで、&H004Dのコールを、DIとEIで囲い、VRAM操作中に割込みが掛からないようにしてみました。
…直らない…。

うーん、調べものと思考錯誤で時間が経ってしまいました。
今回は解決に至らず…。
次回も引き続きバグ取りです。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2024年04月27日

【ゲーム制作】面クリア型アクションゲーム 第27回






←前回初回次回→


面クリア型アクションゲーム 第27回です。
今回は、「積み残し解消」と「バランス調整」です。

「ハンド君」と敵の衝突範囲、狭めました。
24_4_27_2.png
微妙なとこですが、こんなところかな…。

あと、「ハンド君」が敵に負けた時のアクションが何もなかったので、アニメーションを追加。
24_4_27_1.png
敵復活アニメーションの逆再生を赤でしてみました。
良い感じ。
24_4_25_1.png

詳細設計の積み残しは、面クリアボーナスの10,000点、すっかり忘れていました!
24_4_26_1.png
これで詳細設計すべてクリアしました。

次回は、前回発見した「バグ取り」です。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2024年04月26日

【ゲーム制作】面クリア型アクションゲーム 第26回






←前回初回次回→


面クリア型アクションゲーム 第26回です。
今回は「デバッグ」します。

結構致命的なバグがいくつか発見されました。
逆に細かいバグは無し…。

まず真っ先に気付いたバグは、2面目以降、マップはちゃんと表示されているのに、実質は1面の壁通路となってしまっていました。
原因は簡単、マップチェックロジックにマップ先頭アドレスを足し忘れていました。
これにより、マップチェックはすべて1面のマップでチェックされていました。
修正はマップ先頭アドレスを足すだけです。
24_4_26_2.png

次に8面以降面表示が1キャラ上に上がった状態で表示される。
24_4_26_4.png1キャラ16×16という事を忘れて、横幅32キャラ(本当は16キャラ)に設定していたため、2面ずつ進み、面データのない8面(2面ずつ進むので16面)が1面の1キャラ上に上がった表示となった。
24_4_26_3.png
修正前
24_4_26_10.png
修正後

次にマップの外枠へ敵が飛び出しました。
これは、単純に一番上の通路の上壁のマップチェックロジックにバグがありました。
24_4_26_5.png
修正前
24_4_26_6.png
修正後


次に袋小路で復活した敵が初期位置と上の壁の間でウロウロしている。
24_4_26_7.png
これは復活後の移動方向を設定していなかったためで、消滅した際の向きに動こうとします。
その時、袋小路になっていると1方向にしか動けないためそこでウロウロしていました。
復活する際に移動可能な方向を設定するようにしました。
24_4_26_8.png

あと、稀にドット抜けが発生。
ドットを通過してもドットが残る。
24_4_26_9.png
効果音とスコアはアップしており、もう一度取ろうと戻ると既に取ったことになっているのでドットは残ったままになる。
多分、走査線割込みに関するバグだと思うので、時間かかりそう。
後日、このバグ取りをします。

バグはこれくらい。
あとは、バランス調整。

ゲーム速度これでいいのかな?
自分としては結構ゆっくり目だけど、自分の感覚で設定すると、いつも早すぎるので、これくらいがいいのかな?

難易度は、最初の頃の面は敵3匹で簡単だけど、面進むと敵が増えてすぐ挟み込まれて終わってしまう。
わざわざ敵を追跡型にせずとも難しい。
挟みこまれて終わるパターンが多いかな?

あと、やっぱり敵との衝突判定の範囲が広すぎるかな…?
近距離で逃げている時、曲がり角で衝突してしまう。
もう少し狭めます。

次回は、詳細設計の「積み残し解消」と「バランス調整」です。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2024年04月25日

【ゲーム制作】面クリア型アクションゲーム 第25回






←前回初回次回→


面クリア型アクションゲーム 第25回です。
今回は、「BASICで処理すると遅い」処理をマシン語化します。

前回BASICで組んで実行した際、ちょっと待たされ時間が気になった部分をマシン語にしていきます。

・初期画面表示
「ハンド君」や敵を初期位置に表示する。
その時併せて、敵座標を変数に設定する…、最初DATA文で14面9匹分用意し、変数に設定しPUT SPRITEで表示していましたが、バラバラ…と表示されるのでBASICは止め。
そこで、仮想スプライトアトリビュートテーブルに初期値を設定し、一瞬だけ走査線割込み処理を実行。
あら不思議、「ハンド君」と敵が表示されました。
これは仮想スプライトアトリビュートテーブルの設定値を「水平ライン4枚(MSX2は8枚)を超えてSPRITEを表示させたい」により走査線割込み処理で更新しているから。
特に改めてプログラム組む必要なし。
24_4_25_7.png

・面に出現する敵以外のSPRITEを隠す処理
BASICの時は隠してあるSPRITEを表示させる処理でしたが、上記マシン語では9匹分表示されてしまうので、各面出現しない敵(例えば1面は3匹しか出現しないので6匹出現せず)のY座標に&HE0(画面外)を設定し隠します。
面数から隠す数を算出し設定。
24_4_25_2.png

・面内のドットの数数え
DATA文で14面分用意し、変数に設定していましたが、マシン語で数えたらあっという間でした。
24_4_25_5.png

・速度設定
・面に出現する敵数設定。
面数から計算式で算出し設定。
24_4_25_4.png

・全SPRITE消去
32枚全部のSPRITEを隠す。
24_4_25_3.png

・タイトルとロゴの表示用に256文字整列。
256文字なのでBASICでも大丈夫かと思ったが、やっぱり遅かった…。
24_4_25_6.png

それ以外は、処理の遅さを感じなかったのでBASICで組みます。
BASIC全リストです。
オープニングとエンディングメッセージが含まれてるので、長い…。
24_4_25_8.png

次回、「デバッグ」作業です。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2024年04月24日

【ゲーム制作】面クリア型アクションゲーム 第24回






←前回初回次回→


面クリア型アクションゲーム 第24回です。
今回は「BASIC部」を組んでいきます。

BASIC部で、ゲームとしての体裁をいろいろ整えていきます。
必要な処理は、
・初期画面表示
・プレイヤーが死んだときの処理
  ・ゲームオーバー処理
  ・ハイスコア表示
・面クリアした時の処理
  ・14面全てクリアした時の処理
・SPRITE全消し
・各面毎の敵数セット
・出現待機敵を隠す(Y座標を&HE0にセット)
・各面毎のドット数設定

…と、なります。

…あ、そうだ、久しぶりすぎて忘れていました。
残機があり、1匹死んでもその続きからできるタイプのゲームの変数の取り方をすっかり忘れていました。
1匹死んだときと、ゲームオーバーの時とで、初期化する変数が異なります。
24_4_24_1.png
基本的には全ての変数を初期化するのですが、一部「スコア」や、「残数」、「面数」、「50,000点フラグ」などは1プレイ中を通して継続しなければならない値ですので、ゲームオーバーまで継続する必要があります。

よって、その分だけ別のエリアに変数用意しておき、ゲームオーバーの時だけそちらもクリアするようにします。

最初に挙げたBASIC処理に関しては、一部組み込みましたが…、
「やっぱりおそい」

次回、BASICでは時間のかかる処理についてマシン語で組み直します。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2024年04月23日

【ゲーム制作】面クリア型アクションゲーム 第23回






←前回初回次回→


面クリア型アクションゲーム 第23回です。
今回はオープニング・エンディング処理を組んでいきます。

オープニングはタイトルだけにしようかと思ったのですがなんだか寂しい…。
24_4_23_3.png

そこで、昔よくあった「ストーリーのみ」を再現しようと思いつきました。
24_4_23_1.png
タイトル画面で放っておくと、ストーリーに替わるパターンをやってみました。
こんな感じ。
おー、昔懐かし感が出てますね。

因みに翻訳はMicrosoftのBing翻訳を使用して、詳細設計時に作ったストーリーを翻訳しました。
昔は辞書片手に一生懸命、英語化したものですが…。
便利な世の中です…。

ロゴ表示は今風、こんな感じ。
24_4_23_4.png
ロードするものが少ないので、一瞬です。

エンディングはどうしよう…。
このためだけに、メッセージ表示ルーチン使うのももったいないので、こちらも昔懐かし一画面エンディングにします。
24_4_23_2.png
メッセージだけ表示されて、BGMが鳴って「おしまい」。

懐かしさ満点ですね。

次回は「BASIC部」を組んでいきます。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2024年04月22日

【ゲーム制作】面クリア型アクションゲーム 第22回






←前回初回次回→


面クリア型アクションゲーム 第22回です。
今回はBGM作曲と、効果音作成です。

今作では、ゲーム中と、エンディングの2曲です。
どんな曲にしよう…。
今作に合う、楽しい曲が良いな。

24_4_22_1.png
「MMLコンパイラ(通常版)」を使いデータ化。
「左SHIFT」+「F9」で高速実行。
やっぱり、MMLからそのまま曲が確認できるのは便利ですね。

今回も、過去に作った「MuSICA」ディスクに入っていた音楽を利用。
曲のストックはまだまだあるのですが、シューティングゲーム曲多め…。
この手のアクションゲームに合う曲はあまりないかも…。

次回はオープニング・エンディング処理です。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2024年04月21日

【ゲーム制作】面クリア型アクションゲーム 第21回






←前回初回次回→


面クリア型アクションゲーム 第20回です。
今回は「ハイスコア」処理を組んでいきます。

前回、敵の倍々スコア処理を組んでいて、「高得点を目指せるなら、ハイスコア必要だよね」って思ってしまいました。
確かに、昔の面クリア型のアクションゲームって、必ずハイスコアがありましたよね。

でも、現状で画面の空き無し。
特に手間でもないので、画面構成変更してハイスコア付けてみます。
50,000点で1匹増える処理(正直忘れてた)を組まないといけないので、ついでに組むことにします。

24_4_21_1.png
こんな感じでどうでしょう?

24_4_21_3.png
50,000点で1匹増える処理は、50,000点フラグを用意し、50,000点超えたらフラグを立てて1匹増やし、以降50,000点チェックしないようにします。
ハイスコアは毎回チェックし、ハイスコアになったらハイスコアフラグを立て、スコアと一緒に表示更新するようにします。
24_4_21_2.png

上手くいきました。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2024年04月20日

【ゲーム制作】面クリア型アクションゲーム 第20回






←前回初回次回→


面クリア型アクションゲーム 第20回です。
今回はスコア倍々処理を組んでいきます。

倍々タイマーを用意し、敵に勝ったらタイマーをセットします。
最大でも3匹しか倒せない時間でセットします。
復活場所で待っていて、最初の1匹が復活する前にタイマーが切れるタイミングですね。

タイマーカウント中は、解り易いように「ハンド君」を点滅させます。
じゃんけんSPRITEを「白」→「黄」→「白」…でループさせます。
24_4_20_3.png
倍々タイマー中は点滅する「ハンド君」
24_4_20_1.png

2匹目以降の敵を倒した際は、倍々スコアカウンタを用意し、シフトで×2倍にします。
これで、1匹目1,000点、2匹目2,000点、3匹目4,000点、4匹目は時間的に倒せずタイムアップとなります。
24_4_20_2.png

上手くいきました。
ほぼこれでゲームのメイン部分のマシン語部は完成ですね。

次回は昔懐かしゲームにあった、「ハイスコア」を追加します。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2024年04月19日

【ゲーム制作】面クリア型アクションゲーム 第19回






←前回初回次回→


面クリア型アクションゲーム 第19回です。
今回は衝突判定を組んでいきます。

衝突判定は、敵と衝突するゲームなら必須の処理となります。
MSXにはSPRITEの接触判定があるのですが、それを使った事はありません。
ぶつかっているかどうかが分かるだけで、どれとどれがぶつかったかの判断が出来ないからです。

ですので、通常の衝突判定を組みます。

衝突判定の範囲は下図の通り。
24_4_19_1.png
範囲はデバッグ時に再調整します。

復活カウンタが「0」の敵とだけ衝突判定を行います。
敵と衝突した際、じゃんけんで勝っていれば、敵の復活カウンタを「1」に。
あいこ、若しくは負けていればBASICに戻り、面の続きからとなります。

24_4_19_2.png
特に悩むこともなく、組みあがりました。

テストにぶつかりまくってみました。
問題なしです。

次回はスコア倍々処理を組んでいきます。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発
検索
<< 2024年04月 >>
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        
最新記事
ブログランキング
にほんブログ村 ゲームブログ ゲーム制作へ
カテゴリーアーカイブ
プロフィール
J-JSOFTさんの画像
J-JSOFT
高校時代、あれほど熱心に取り組んだMSXに触れなくなって30年余…。 MSXエミュレータとの出会いで、MSX愛が再燃中。
プロフィール
ファン
QRコード