2023年09月06日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第12回
3Dダンジョンロールプレイングゲーム第12回目です。
随分久しぶりになってしまいました。
Laboratoryテーマ??23「コマンドを選択肢メニューを開いて、選択したい」のサンプル作りにてこずっておりまして、時間だけが過ぎていく…。
まぁ、おかげで「 MSX回顧録 」、だいぶ進めることが出来ましたが…。
さて、今回は3D表示のプログラミングに挑戦します。
前々々回( 【ゲーム制作】3Dダンジョンロールプレイングゲーム 第9回 )で考えたロジック通り、?@〜?Gの表示ワークへセットするプログラムを作ります。
これ、BASICの配列変数を使えれば簡単にできるんですが、マシン語にはそんな便利な機能はありません。
ただ、考え方は配列変数の考え方がそのまま使えます。
BASICですと、配列変数にマップデータを代入(MAP(21,21))し、自機のX座標、Y座標をそれぞれ変数X、Yとすると、X、Yを起点に、調べたい座標位置に加減算をします。
例えば、上向きの場合、?@=MAP(X-1,Y-2)、?A=MAP(X,Y-2)…と言った感じです。
簡単ですね。
それをマシン語で実現するためには、この加減算値でデータベースを作成します。(8ワーク×4方向×X/Y=64バイト)
XとYの加減算値は-2〜2の5つしかないので、容量節約のためにBレジスタ上4桁をX加減算値、下4桁をY加減算値とします。
これで、容量を半分に削れました。(8ワーク×4方向=32バイト)
先ほどの加減算値のルール通り変換しました。
データベース登録完了したら、向きにより自動でデータベースアドレスを算出し、データベースから加減算値を取得し、マップデータから地形データを読んでワークに設定するマシン語サブルーチンを作ります。
&HC370からは、Bレジスタに加減算値を代入しコールすると、マップデータ上の自分の位置+加減算値のアドレスを計算し、Aレジスタにその座標のキャラクタコードが返されるルーチンです。
&HC3B8は、向きによってデータベースアドレスを算出し、データベースを読んで8つ分ワークへ地形データを設定するルーチンです。
各向きで読み込んだキャラクタコードを表示してみました。
期待通りの動きです、問題なしですね。
では、次回は3D表示のプログラミングです。