さて、今回の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」を使ったアドベンチャーゲームの予定です。
これもとりあえず今回は比較的簡単なものにしたいと思います。
推理ものとかだとシナリオが大変なので、脱出物にでもしようかな…。
絵をどうするか検討中です。