3Dダンジョンロールプレイングゲーム 第87回目です。
前回で、メインプログラムは一通り完成です。
後は、「エンディング」及び、「CONTINUE」処理を残すのみ。
今回は、一通りプレイしてみてバグがないか探す、「デバッグ」作業を行います。
ゲームが完成した際は、アルバイトなど雇ってどこのソフトハウスも必ずやる作業です。
まぁ、最近はバグ修正パッチを簡単にネット配信できるので、昔ほど力を入れていないと聞いたことがありますが…。
うーん…。
仕方がないけど、ゲームバランス悪い…。
「スライム」と、次の強さの敵「シルバーウルフ」の強さ差が半端ない…。
(ドラクエマップの広さの敵レベルを21×21のマップ(移動可能エリアは更にその半分)に凝縮してるから仕方ない…。)
バランス調整で、取得経験値を上げてレベルを上げやすくするか、取得金を上げて武具・防具を買いやすくするか…。
ちょっと考えます。
「デバッグプレイ」の結果、細かいバグ多数と、大きなバグ数件発見。
細かいバグは、無数にありました。
簡単に修正できるような内容でも、メモリの空き容量がないのでなかなか修正が困難なものもありました。
これまでに掲載したロジックも、バグ取りで細かく色々変更になっていますので、ご了承願います。
(掲載しきれません。)
大きなバグは数件ありましたが、ほとんどが計算結果の8ビット越え。
なかでも与ダメージ値の計算。
(乱数*(攻撃力-敵防御力/2+1)/255+攻撃力-敵防御力/2)/4 |
最終ダメージ値が8ビット値(〜255)なので、掛け算・割り算の計算ロジック以外は8ビットで大丈夫だろうと思っていたのですが、足し算・引き算の計算ロジックで8ビット超えていました…。
何気にプレイヤー最強状態で「スライム」と戦った時、与ダメージ値「2」とか出るからなんだろうと思ってたら、これでした。
例えばプレイヤー攻撃値が「168」で、スライム防御が「3」、乱数が最大値で「255」だと、与ダメージ値計算式最後の「÷4」する前の結果が、「325」になり、8ビット値(÷256の余り)325-256=「69」。
最後、与ダメージ値計算結果は69÷4=「17」になります。
そのため乱数値次第で「2」が出たようです。
▲バグフィックスの一部
同じように敵が強すぎて、プレイヤーが弱い時の被ダメージ値計算も同じ状態になるので16ビット化。
まぁ、プレイヤーが弱々の時に、強敵と遭遇しないので、こちらは修正の必要ないかもと思いましたが念のため。
他にも、「ドラゴン」がやけに弱いと、思ってたら「ドラゴン」だけ初期体力が8ビット超えてる(350)…。
ドラゴンの体力が350-256=「94」になってたんですね…、そりゃ弱いわ…。
体力計算式をすべて16ビットに変更…。
上記理由で、ロジックだけ組み込んだ敵魔法の回復も16ビット化。
今作では使いませんので、こちらも不要かと思いましたが、念のため。
後は、プレイヤーが回復魔法かけた時の8ビット越え…。
最大体力「210」の時に、「回復2」をかけると回復値最大「100」で、計「310」になってしまう。
薬草だと回復値最大「27」なので超えない(210+27=237)のでとりあえずそっちは放置。
大変でした…。
こんなことなら詳細設計通り、全計算16ビットでしておけばよかった。
多少なりとも計算ロジックが短くなるので8ビットにしたのに、結果的にバグ取りで大きくなってしまった…。
最後は、なんと「レベルアップ時に魔法を習得しない」といった、致命的なバグでした。
開発時のテストデータで、最初から全魔法を習得させていた関係で、気付きませんでした。
修正。
これで「デバッグ」作業完了です!
共通マシン語エリアの空き容量がほぼなくなりました。
レベル最大時のステータス画面で、レベルアップ必要経験値(つぎ)の値がおかしいですが、ゲーム上不都合ないのでこのままいかせてください、修正できる容量がありません。
次回は、エンディングを組んでいきます。