3Dダンジョンロールプレイングゲーム第11回目です。
今回は3D表示のプログラミングに挑戦する予定だったのですが、ゲーム製作久しぶりすぎて、最初にやらなくてはならない事を忘れていました。
メモリマップの作成です。
ゲームを製作する時には、ツールを使うなりして各種データを作成し、最後すべて読み込んで1本のゲームにします。
と、いう事は、それぞれのデータの保存アドレスが重ならないように、データ保存する必要があります。(若しくは読込先アドレスを変更する。)
しかも、ロールプレイングゲームは、データの種類が多いジャンルです。
・マップデータ
・イベントデータ
・メッセージデータ
・アイテムデータ
等々…。
これらが重ならないように事前にデータ量と範囲を決めておく必要があります。
今回の3Dロールプレイングゲームのメモリマップは、現状下記としました。
アドレス | データ名 | 備考 |
A000〜A1B8 | 2Dマップデータ | 21マス×21マス=441バイト |
A200〜A7FF | 壁キャラクタデータ | 前回から保存先アドレス変更 |
A800〜AFFF | 空き | |
B000〜B7FF | フォントキャラクタデータ | 256キャラ×縦8バイト=2,048バイト |
B800〜BFFF | フォントカラーデータ | 256キャラ×縦8バイト=2,048バイト |
C000〜CFFF | マシン語エリア | |
D000〜D0FF | 変数エリア | |
D100〜DFFF | メッセージデータエリア | アイテムデータも含む |
ゲームの種類によっては、各面の最初にフォントを設定してしまえばフォントデータのエリアは不要なのですが、ロールプレイングゲームの場合は、敵キャラフォントを毎回読み込む必要があるので、読込先エリアとして空けておく必要があります。
うーん、キツキツですね。
MSX2以降だと、データをVRAMに保存してといったことが可能なのですが、MSX1だと厳しいです…。
メッセージ表示ルーチンとか、選択ルーチンとかは、かなり巨大なサブルーチンだけど、マシン語エリア(&HC000〜&HCFFF)に収まるのか?
因みに、タイトル背景の「Devils Busters」製作中にメモリ不足に悩まされて、ロールプレイングゲーム製作止めた過去があります…。(2023年4月14日記事参照「ブログタイトル画像更新」)
とりあえず、今のところはこれだけ決めておけば大丈夫です。
これに合わせて、各データの保存先アドレスを変更しておきます。
では、次回こそ、3D表示のプログラミングをしましょう。