アフィリエイト広告を利用しています
 

2023年09月30日

【ゲーム制作】3Dダンジョンロールプレイングゲーム 第18回



3Dダンジョンロールプレイングゲーム第18回目です。
BGM演奏に、当初はASCIIの「MuSICA」を利用予定でしたが、思った以上にメモリが厳しいので、「簡易BGMプレイヤー」を利用したBGMに変更します。(2023年5月20日記事参照「3Dダンジョン」)
Windowsでの製作が長かったので、メモリを節約すると言う事を忘れていました...。

BGMの演奏には、Laboratoryテーマ10「マシン語処理中に走査線割り込みを使ってBGMを鳴らしたい」でやったとおり、「走査線割込み」を利用します。
事前にLaboratoryで走査線割込みのサンプルプログラムを作ったので今は大丈夫ですが、最初、走査線割込みの知識をすっかり忘れていて、何すればいいんだっけ!?状態でした。
…と言う訳で、上手くいくのか心配だったので、もっと後の方の予定だったBGM演奏を前倒しします。

BASIC、マシン語プログラム共にLaboratoryテーマ10「マシン語処理中に走査線割り込みを使ってBGMを鳴らしたい」での追加分を組み込んで実行。

BASIC部
9_30_2.png

マシン語部
9_30_1.png


BGMは、過去に製作した迷宮アクションゲームの「TOWER」のBGMを再利用しております。
ちょうど雰囲気的にもよいかと…。

よし、問題なくBGMが鳴りました。
そう言えば、メモリマップにBGMデータ領域を用意するのを忘れてた…。
&HA800~&HAFFFまでが空いていたので、そこの&HA800〜&HA855をBGMデータ領域にしています。

posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2023年09月26日

【ゲーム制作】3Dダンジョンロールプレイングゲーム 第17回



9_27_1.png
3Dダンジョンロールプレイングゲーム第17回目です。
今回はタイトル画面に「NEW GAME」/「CONTINUE」のメニュー選択を実装します。

「NEW GAME」選択時は、オープニング開始。
「CONTINUE」選択時は、新たな選択ウィンドウが開き、セーブファイル選択となります。

セーブファイル数ですが、小さなゲームなので1つでいいかなとも思ったのですが、メニュー選択のサンプルも兼ねているのでとりあえず3ファイル位選べるようにすればいいかな?
9_27_2.png
基本的にファイル操作はBASICに戻って実行します。
よって、マシン語でメニュー選択し、任意アドレス(今回は&HD015)に選択結果を書き込み、BASIC部へ戻る。
バックアップファイルから読み込んで、ゲーム実行。
と言う、処理の流れとなります。

メニュー選択は、Laboratoryテーマ23「選択肢メニューを開いて、選択したい」で製作した「メニュー選択」を利用します。

「NEW GAME」でオープニング開始はOK。
仮のセーブファイル(FILE1〜3.SAV)を用意し、「CONTINUE」でゲーム開始するか動作テスト。
こちらも動作OKですね。

スクリプトを使わないメニュー選択の利用方法です。
9_27_3.png
赤枠にメッセージデータ先頭アドレスを代入しコールすると、選択ウィンドウが開き、メニュー選択できます。
因みに、メッセージデータは&HC988〜&HC98Fが「NEW GAME」、&HC990~&HC997が「CONTINUE」、&HC998~&HC99Cが「FILE1」、&HC99D~&HC9A1が「FILE2」、&HC9A2~&HC9A6が「FILE3」です。

posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2023年09月24日

【ゲーム制作】3Dダンジョンロールプレイングゲーム 第16回



9_24_1.png

3Dダンジョンロールプレイングゲーム第16回目です。
ゲームの雰囲気を高めるため、なぜ3Dダンジョンに挑むのかの説明を兼ねた、簡単なオープニングを作ります。

オープニングの実装には、Laboratoryテーマ21「指定座標に指定サイズのメッセージウィンドウを開きたい」で製作した、独自スクリプト付の「メッセージウィンドウ」を利用します。

まずはタイトル画面(上図)を表示し、「PUSH SPACE」でボタンを押したコントローラーを、操作コントローラーとして登録し、以降そのコントローラーでのみ操作可能とします。
次に、オープニング表示。
MESSET.BAS」でメッセージデータを作成します。
9_24_2.png

今回は、ありきたりで単純なストーリーにしておきます。
タイトル画面とオープニングだけで、グッとゲームらしくなりました!

スクリプトを使わないメッセージウィンドウの利用方法です。
9_24_3.png
赤枠にイベントb代入しコールすると、イベントのフラグ値に応じたメッセージbフメッセージが表示されます。

posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2023年09月18日

【ゲーム制作】3Dダンジョンロールプレイングゲーム 第15回




9_18_3.png
3Dダンジョンロールプレイングゲーム第15回目です。
今回は、いよいよ3Dマップの中をウロウロできるようにします。

これが出来れば、ゴール判定付ければ3D迷路ゲームなら完成ですね。
更に上下階段付けて、「MAP8 EDITOR」で2Dマップを立体迷路にすれば、高難度迷路の出来上がりです。

では、今回はキー入力処理と言う事で、BIOSの「GTSTCK」(&H00D5)を利用します。
Aレジスタにジョイスティック番号(0:キーボード、1:ジョイステックPORT1、2:ジョイスティックPORT2)を入れてコールすると、Aレジスタに押された方向値(BASICのSTICK関数と同じ値)が入ります。
今作のキー操作は下記の通りとします。


















キー行動
向いている方向に前進
向いている方向に対して、右を向く
向いている方向に対して、後ろを向く
向いている方向に対して、左を向く

「↑」が押された時だけ、向きに合わせて移動。
それ以外は向きを変えるだけになります。
凄く単純な操作なのでロジックも短いです。
9_18_1.png

方向は4方向なので、方向転換に下位2ビット(0〜3)のビット操作を使い、ロジックの短縮化を図っています。
移動が「↑」だけなので、正面が壁なら移動できないようにするだけなので楽です。
無駄なこと結構しているにも拘らず、3D描画が早すぎて思ったとこに停まれなかったので、1移動ごとにキーリピートをかけました。(移動後1回移動キーを離さないと、次の移動が出来ない。)

BASIC部です。
9_18_2.png
今はまだ製作途中で、値を変更することもあるので初期変数をREAD、POKEしています(500行以降)が、完成したらこれも初期値という事でファイル化し(拡張子「.INI」)BLOADします。
上中段と下段で別のフォント(上中段:ダンジョン用FONT、下段:メッセージ用FONT)を設定しています。(2023年9月13日記事参照「Laboratoryテーマ25「SCREEN2のグラフィックをFONTデータにして扱いたい」」)

ここまで「ダウンロード

プログラムは、Laboratoryテーマ21「指定座標に指定サイズのメッセージウィンドウを開きたい」その@のサンプルプログラムに、3Dロールプレイングゲームの追加分を足しています。
今後、メッセージ表示部にメニュー選択ロジックが追加されたら、3Dロールプレイングゲーム部を後ろにズラシます。

posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2023年09月16日

【ゲーム制作】3Dダンジョンロールプレイングゲーム 第14回



3Dダンジョンロールプレイングゲーム第14回目です。
今回はダンジョン描画があまりにもチープなので、もう少しだけマシにしてみます。
まぁ、まだ本格的なものを作るわけではないのでこれでもいいのですが、あまりにもチープすぎて…。
MSX1の画像能力なので、すごいことは出来ませんが、ちょうど「FONT EDITOR」のマウスが使えなかった時に、とりあえずで描いたものですので、もう少しなら何とかなるかな?と…。
9_14_1.png
9_14_2.png
9_14_3.png
9_14_4.png
9_14_5.png
9_14_6.png

今回はこんなところでヨシとします。
まぁ、雰囲気的な物は出せたかな?と、思います。
後は気が向いたらもう少し描き込みます。
本格的に作るのなら、上段と中段別々にFONTを用意した方が綺麗になります。
何なら実際の洞窟画像をキャプチャしてもいいかも。(FONT足りないか…。)
昔なら考えられなかった手法が、今なら当たり前に使えてしまう…。

では、次回は3Dマップの中を歩かせます。
併せて、途中経過プログラムを公開しますね。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2023年09月09日

【ゲーム制作】3Dダンジョンロールプレイングゲーム 第13回



3Dダンジョンロールプレイングゲーム第13回目です。
今回は遂に、3D表示のプログラミングに挑戦します。
前々々回(【ゲーム制作】3Dダンジョンロールプレイングゲーム 第10回)に書いたロジック通りに、前回設定した表示ワークの地形を描画します。
これはもう簡単。
条件に従って表示ロジックを記述していくだけです。
6_6_1.png

気を付けなければいけないのは一カ所だけ。
8_12_3.png

正面Dに壁があった時、Vだけでなく、その両サイドUとWの壁も描画し、T描画のロジックへ飛ぶくらいですね。
壁の描画はLaboratoryテーマ15「任意サイズのFONTキャラクタを指定座標に表示させたい」のサブルーチンで描画します。
9_9_5.png

前回同様各向きで描画してみました。
9_9_1.png
9_9_2.png
9_9_3.png
9_9_4.png

期待通りの動きです、問題なしですね。
マウスが使えなかった時に、とりあえずで作成したFONTなのでチープです。

では、次回は描画が非常にチープなのでもう少し(ほんの少し)見栄え良くしてみます。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

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を起点に、調べたい座標位置に加減算をします。
9_6_1.png
例えば、上向きの場合、@=MAP(X-1,Y-2)、A=MAP(X,Y-2)…と言った感じです。
簡単ですね。
それをマシン語で実現するためには、この加減算値でデータベースを作成します。(8ワーク×4方向×X/Y=64バイト)
9_6_3.png
XとYの加減算値は-2〜2の5つしかないので、容量節約のためにBレジスタ上4桁をX加減算値、下4桁をY加減算値とします。
これで、容量を半分に削れました。(8ワーク×4方向=32バイト)
先ほどの加減算値のルール通り変換しました。
9_6_2.png
データベース登録完了したら、向きにより自動でデータベースアドレスを算出し、データベースから加減算値を取得し、マップデータから地形データを読んでワークに設定するマシン語サブルーチンを作ります。
9_6_4.png
&HC370からは、Bレジスタに加減算値を代入しコールすると、マップデータ上の自分の位置+加減算値のアドレスを計算し、Aレジスタにその座標のキャラクタコードが返されるルーチンです。
&HC3B8は、向きによってデータベースアドレスを算出し、データベースを読んで8つ分ワークへ地形データを設定するルーチンです。

各向きで読み込んだキャラクタコードを表示してみました。
9_6_5.png
期待通りの動きです、問題なしですね。

では、次回は3D表示のプログラミングです。
posted by J-JSOFT at 10:30 | Comment(0) | TrackBack(0) | 開発

2023年08月23日

【ゲーム制作】3Dダンジョンロールプレイングゲーム 第11回



4_19_1.png
3Dダンジョンロールプレイングゲーム第11回目です。
今回は3D表示のプログラミングに挑戦する予定だったのですが、ゲーム製作久しぶりすぎて、最初にやらなくてはならない事を忘れていました。

メモリマップの作成です。
ゲームを製作する時には、ツールを使うなりして各種データを作成し、最後すべて読み込んで1本のゲームにします。
と、いう事は、それぞれのデータの保存アドレスが重ならないように、データ保存する必要があります。(若しくは読込先アドレスを変更する。)
しかも、ロールプレイングゲームは、データの種類が多いジャンルです。
・マップデータ
・イベントデータ
・メッセージデータ
・アイテムデータ
等々…。
これらが重ならないように事前にデータ量と範囲を決めておく必要があります。
今回の3Dロールプレイングゲームのメモリマップは、現状下記としました。






































アドレスデータ名備考
A000〜A1B82Dマップデータ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表示のプログラミングをしましょう。

posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2023年08月20日

MAP16 EDITOR 活用方法A

「MAP16 EDITOR」で作ったデータの活用方法、そのAです。
「MAP16 EDITOR」の最大のメリットは、「MAP8 EDITOR」に比べ、同じメモリ容量で4倍の広さのマップを表示できるところです。
あと、通常ゲームの基本となる16×16キャラクタを配置するのが「MAP8 EDITOR」では、かなり面倒ですが、「MAP16 EDITOR」だと簡単です。

前回、「MAP16 EDITOR」で作成したデータの、全画面キャラクタスクロール(16ドット)版のサンプルを公開しました。
そのサンプルでも、スクロールしない画面切り替え型のパズルゲームや、アクションゲーム等には問題なく使えます。

ただ、やはりドラクエタイプのロールプレイングゲームが作りたいと思った時、最低でも1FONTスクロール(8ドット)であって欲しいですよね。
と言う訳で、今回は表示範囲指定可能な8ドットスクロール版のサンプルを公開します。
8_5_1.png


「M16SMPL2.BAS」【ダウンロード
8_5_2.png

自作プログラムに組み込むには、下記の部分が必要です。

















行番号内容説明
70MAP16SC8.BINFONT単位マップ表示マシン語プログラム
160〜230マップ表示値指定画面に表示する際の座標と、表示する縦横幅、マップ全体の縦横幅、表示する左上の座標を指定
300マップ表示サブルーチンマップ表示値を指定し、300行のサブルーチンをコールするとマップを表示するサブルーチン

8ドットずらして表示するためには、各アドレスに任意の値をセットしてサブルーチンコールして下さい。























方向アドレス設定値
&HC004&HFF
&HC005&H01
&HC004&H01
&HC005&HFF

このプログラムでは、最も時間のかかるであろうマップ表示部分をマシン語で組んでいます。

「MAP16SC8.BIN」(70行)

下記機能を提供します。











実行アドレス機能詳細
&HC0E8マップ表示

指定されたマップ表示値から表示される先頭アドレスを算出しマップを表示する

最大16キャラクタ×12キャラクタ

マシン語アドレスを変えたい人用に、MAP16SC8.BIN作成用のBASICプログラムを用意しました。
起動すると、MAP16SC8.BINを作成します。
「MAP16SC8.BAS」【ダウンロード
8_5_3.png
いやはや、なかなかに苦労しました…。
昔に「MAP16 EDITOR」で作成したマップデータを使って作っていたゲームは、全画面のドラクエタイプのロールプレイングゲームでした。
だから気付きませんでしたが、上下スクロールで8ドットずらして表示した時、表示範囲の上下に残りの8ドット分が表示されてしまうバグがなかなか直らず、苦労しました。
おかげでマップ表示のロジック結構長くなったなぁ…。
まぁ、あまり時間かけてる余裕がなかったので、短縮化は図っていません。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2023年08月17日

【ゲーム制作】3Dダンジョンロールプレイングゲーム 第10回




3Dダンジョンロールプレイングゲーム第10回目です。
今回は、前回設定した表示ワークの内容を表示する順番と条件を考えます。

6_6_1.png
以前に書いたパターン番号で説明します。
プレイヤーに近い順に壁があるパターンを優先して描画していきます。

まず、Vのパターン。
1歩前に壁があるパターン。
この場合は、UVWを壁描画し、X描画に飛びます。
6_11_4_2.png
次、2歩前が壁があるパターン。
6_11_4_1.png
あとは、壁がないパターン。
6_11_4_3.png

次はWのパターン。
1歩前右に壁があるパターン。
6_11_3_1.png
あとは、壁がないパターン。
6_11_3_2.png

次はUのパターン。
Wのパターンの左右逆に同じです。

次はXのパターン。
左に壁があるパターン。
壁描画し、T描画に飛びます。
6_11_2_1.png
左に壁がなく、その1歩前に壁があるパターン。
6_11_2_2.png
あとは、壁がないパターン。
6_11_2_3.png

最後Tのパターン。
Xのパターンの左右逆に同じです。

描画条件、描画順も、ほぼこのままで大丈夫です。

それ以外のパターンは、ダンジョンの構造上発生しません。
と言うか、発生しないような構造にしました。(奇数行と奇数列を壁とするダンジョン。)

次回は、今回考えたロジックに則った描画ルーチンを組みます。

posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発
検索
<< 2024年12月 >>
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
広告
最新記事
ブログランキング
にほんブログ村 ゲームブログ ゲーム制作へ
プロフィール
J-JSOFTさんの画像
J-JSOFT
高校時代、あれほど熱心に取り組んだMSXに触れなくなって30年余…。 MSXエミュレータとの出会いで、MSX愛が再燃中。
プロフィール
カテゴリーアーカイブ
ファン
QRコード