さて、今回の3Dダンジョンロールプレイングゲーム制作中に出たメモリ不足問題について、対応について改めて考えてみました。
最初、MSXでのプログラミング勘が鈍りまくっててマシン語エリアが&HC000〜CFFF(4,096バイト)くらいで大丈夫かな?とか思ってた自分を殴りたい…。
途中でマシン語エリアを&HCFFF→&HD9FF(6,656バイト)に増やし、それでも足りないのでFONT読込用エリア(&HB000~BFFF)をFONT読込・設定後、半分(&HB000~B7FF、2,048バイト)を戦闘用マシン語エリアにする事で何とか完成に漕ぎ着けました。
それでも共通ロジックはギリギリで、一部の不具合を直す余裕がなかったくらいです。
共通ロジック | 戦闘ロジック |
&HC000~D9FF | &HB000~BFFF |
メッセージルーチン メニュールーチン システムメッセージルーチン スクリプト処理 探索 システムメニュー 道具 魔法 死亡処理 状態異常効果 走査線割込み処理 BGM演奏 効果音演奏 敵遭遇 フェードアウト | 戦闘 レベルアップ イベント戦闘 |
そこで次回作る事があれば、FONT読込用エリアを戦闘時は戦闘ロジック、ダンジョン探索時は探索ロジックのマシン語エリアとする事で、共通ロジックを分散・縮小し、イベントデータなどに割くメモリを確保したいと思います。
共通ロジック | 探索ロジック | 戦闘ロジック |
&HC000〜CFFF | &HB000〜BFFF | |
メッセージルーチン メニュールーチン
道具 魔法 死亡処理 走査線割込み処理 BGM演奏 効果音演奏 共通フェードアウト BGMエフェクト処理 | スクリプト処理 探索 システムメニュー 状態異常効果 敵遭遇 フェードアウト イベントキャラ表示 | 戦闘 レベルアップ イベント戦闘 |
他にも、今作はメッセージルーチンとスクリプト処理ルーチンがひとまとめだった事もあり、システムメッセージ専用の表示ルーチンが必要でしたが、本来ならメッセージルーチンでシステムメッセージを表示するはずですので、システムメッセージルーチンは削除します。
あと、共通ロジックエリアは分割し軽くなるはずなので、メモリに余裕があればBGMがいかにもなPSG音そのままだったので、エフェクトかけてそれなりにしたいな。
ただ、ドラクエタイプのロールプレイングゲームを作るなら、スクリプト命令がかなり増えると思われるので、油断は禁物です。
(イベントでキャラクタをアニメーションさせたりするMV(ムーブ)命令など)
では、とりあえず次回作は宣言通り「BMP to MSX」を使ったアドベンチャーゲームの予定です。
これもとりあえず今回は比較的簡単なものにしたいと思います。
推理ものとかだとシナリオが大変なので、脱出物にでもしようかな…。
絵をどうするか検討中です。