この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
広告
posted by fanblog
2023年10月09日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第23回
3Dダンジョンロールプレイングゲーム 第23回目です。
さて、開発順序として先に戦闘以外をすべて完成させる事にします。
前回書いた通り、戦闘のみ別プログラムにする可能性が出たからです。 (2023年10月4日記事参照「 【ゲーム制作】3Dダンジョンロールプレイングゲーム 第21回 」)
と、言う訳で今回は残りのスクリプトを組むための準備として、メッセージ中に変数の値を表示する仕組みを考えます。
メッセージ中に変数の値を表示とは何か?
代表的な例は、ロールプレイングゲームならば必須のステータス表示ですね。
あとは、戦闘時のダメージ表示なんかですね。
実は、この2例、表示方法が異なるのです。
ステータス表示は右詰め。
ダメージ表示は左詰め。
シューティングゲームの得点表示とは異なり、頭の「0」は消す「ゼロサプレス」も必要です。
以前に「Laboratory」でやった、Laboratoryテーマ??5「 16ビットアドレス値の10進数表示 」の表示部分を改造します。
そのままのロジックで表示させると、

これを改造し「ゼロサプレス」すると、

更に改造し、変数&HD005に桁数を代入しコールすると、指定桁数で右詰め表示されます。
桁数「4」で表示すると、

更に、変数&HD005に「0」を代入しコールすると、左詰め表示されます。

これが出来れば、ステータス表示(右詰め)や、店屋の商品値段表示(右詰め)、戦闘のダメージ表示(左詰め)等が出来るようになります。
改造内容は下記の通り。
16進数→10進数変換ロジックは、ほぼいじっていません。

表示ロジックは大幅に改造してあります。
直接VRAMに描き込まず、メッセージ表示ワーク内に、&HD005の値に応じて格納するように改造しました。

IN
OUT
HL
表示する値
なし
DE
格納先先頭アドレス
2023年10月05日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第22回
3Dダンジョンロールプレイングゲーム第22回目です。
そういえば「詳細設計」と「シナリオ」を載せるのを忘れてました。
詳細設計とは、その名の通り詳細を決める事です。
具体的に言うと、敵を攻撃した時のダメージ値の計算式や、攻撃ミスの確率、会心の一撃の確率など、ゲームの根幹に係る設計の事です。
他には、
・アイテム毎の攻撃力や防御力、値段
・プレイヤーのレベルアップ時の能力向上値、魔法習得
・アイテム所持数(32個)、魔法習得数(6種)
・敵のパラメータ
など、多岐に渡ります。
これを決めておかないと、変数をいくつ確保するかなどが、決まりません。
ほぼ全てのパラメータ値を、今回は「ドラクエ?T」と同じで行きます。

計算式出展:『GCGX』
https://gcgx.games/dq1/damage.html
「攻撃力」=「ちから」、「防御力」=「素早さ÷2」で計算します。
あと、「ドラクエ?T」に兜はないので、盾の防御力と金額を半分にし、同値で兜を用意しました。
ダメージ計算
プレイヤー→敵ダメージ値
(乱数*(攻撃力-敵防御力/2+1)/255+攻撃力-敵防御力/2)/4
敵→プレイヤーダメージ値
(乱数*(敵攻撃力-防御力/2+1)/255+敵攻撃力-防御力/2)/4
若しくは
乱数*(敵攻撃力/2+1)/255+2敵の先制攻撃率
(素早さ*乱数(0〜255))<(敵防御力*乱数(0〜63))
プレイヤー逃走判定
(素早さ*乱数(0〜255))≧(敵防御力*乱数(0〜63))
敵逃走判定
攻撃力(武具除く)/2≧敵攻撃力
且つ
逃走確立1/4会心の一撃率
確率1/32、攻撃力-(攻撃力/2*乱数)/256
レベルアップ値
レベル
体 力
魔 力
攻撃力
防御力
素早さ
必要経験
習得魔法
1
15
0
4
2
4
0
−
2
22
0
5
2
4
7
−
3
24
5
7
3
6
23
回復1
4
31
16
7
4
8
47
攻撃1
5
35
20
12
5
10
110
−
6
38
24
16
5
10
220
−
7
40
26
18
8
17
450
毒消
8
46
29
22
10
20
800
−
9
50
36
30
11
22
1300
−
10
54
40
35
15
31
2000
−
11
62
50
40
17
35
2900
−
12
63
58
48
20
40
4000
−
13
70
64
52
24
48
5500
戻る
14
78
70
60
27
55
7500
−
15
86
72
68
32
64
10000
−
16
92
95
72
35
70
13000
−
17
100
100
72
39
78
17000
回復2
18
115
108
85
42
84
21000
−
19
130
115
87
43
86
25000
攻撃2
20
138
128
92
44
88
29000
−
21
149
135
95
45
90
33000
−
22
158
146
97
45
90
37000
−
23
165
153
99
47
94
41000
−
24
170
161
103
49
98
45000
−
25
174
161
113
50
100
49000
−
26
180
168
117
52
105
53000
−
27
189
175
125
53
107
57000
−
28
195
180
130
57
115
61000
−
29
200
190
135
60
120
65000
−
30
210
200
140
65
130
65535
−
次に武器。(アイテム区分「1」)
名前
攻撃力
値段
木の棒
2
10
石の剣
4
60
銅の剣
10
180
鉄の剣
15
560
銀の剣
20
1500
勇者の剣
28
9800
次に盾。(アイテム区分「2」)
名前
防御力
値段
木の盾
2
45
鉄の盾
5
400
勇者の盾
10
7400
次に鎧。(アイテム区分「3」)
名前
防御力
値段
布の服
2
20
皮の鎧
4
70
銅の鎧
10
300
鉄の鎧
15
1000
銀の鎧
20
3000
勇者の鎧
28
7700
次に兜。(アイテム区分「4」)
名前
防御力
値段
皮の帽子
2
45
鉄の兜
5
400
勇者の兜
10
7400
次に道具。(アイテム区分「9」)
名前
効果
値段
薬草
体力23〜30回復
24
毒消し草
毒状態回復
100
エリクサー
体力・魔力・状態改善回復
10000
赤い鍵
宝箱を開ける鍵
7800
青い鍵
ゲートを開ける鍵
−
次に魔法。
名前
効果
消費魔力
回復1
体力10〜17回復
4
攻撃1
敵に5〜12ダメージ
2
戻る
スタート位置に戻る
8
回復2
体力58〜100回復
10
毒消
毒状態回復
6
攻撃2
敵に58〜65ダメージ
5
最後に敵。
名前
体力
魔力
攻撃力
防御力
素早さ
経験値
お金
スライム
3
0
5
3
2
1
2
おおさそり
15
0
18
35
4
16
25
リカント
34
0
40
30
21
40
60
鎧の騎士
55
6
70
71
45
78
150
悪魔の騎士
79
4
94
92
53
130
165
死神の騎士
95
14
105
99
57
172
152
ストーンマン
160
0
100
40
40
155
148
ドラゴン
350
0
130
150
90
0
0
次にシナリオです。
今回はマップが小さいので、シナリオはほぼないに等しいです。
シナリオとは、要するに謎解きのようなものです。
何もないのも寂しいので、サンプルに一つ宝箱を用意します。
イベント数は6個。
1
武器屋
2
道具屋
3
宿屋
4
宝箱
5
ゲート
6
ボス

ルートはこうです。
・道具屋さんに赤い鍵が売られている。(高額)
・宝箱がある。(ゲートで赤い鍵を使うまでは「何かある気がする。」で宝箱発見できず。)
・宝箱は赤い鍵で開く。
・宝箱の中身は青い鍵だった。
・道中、鍵のかかったゲートがある。(赤い鍵を使うと「遠くで何かの仕掛けが動いたような音がする…。」となり、宝箱が見付かるようになる。)
・ゲートは青い鍵で開く。
これを最初に考えておかないと、必要なアイテムや、イベントの配置場所が決まらないので最初に決めます。
ただ、最初は絶対に必要なイベントと、アイテムのみ決めておいて、後はそれに付属する形で決めていけばいいです。
以上で詳細設計とシナリオとなります。
実際はゲームに組み込んでテストプレイしながら値を調整していきますので、そこまでガチガチに決めておく必要はありません。
今回はすでにあるゲームの値をそのまま使っているので、調整も少なくて済むかと思います。
2023年10月04日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第21回

3Dダンジョンロールプレイングゲーム第21回目です。
前回、製作状況の進捗確認しました。
現在、BGM鳴らしながらマップ移動して、システムメニュー開いてメッセージを表示するまではできました。
後は大きく「敵との戦闘」、「プレイヤー関係」、「スクリプトの残り」の製作となります。
さて、ここで問題が発生しました。
プログラム見て気付かれている方もいるかとは思いますが、プログラム領域がなくなりそうです。
プログラム領域、&HC000~&HCFFFまでなのに、既に&HCA00まで使いました。
敵との戦闘、ただでさえ大きなロジックなので、&HCFFFまでではまず収まりません。
メモリ節約せずに突き進んできましたので、まぁ、仕方ないけど…。
解決策は2つあります。
?@変数領域を移動させプログラム領域を広げる。
?Aイベント進行は何とか残りのメモリでできそうなので、敵との戦闘だけ別プログラムにする。
実はどちらも大変です。
?@以前にも書いた通り、MSXには文字の置き換え機能がありません。
変数書き換えは、完全手作業なので大変です。
変換し忘れたら、当然暴走です。
ハンドアセンブルの厳しいとこです。
?A別プログラム化は、敵との戦闘になったら敵グラフィックの読み取りと同時に、敵戦闘プログラムもダウンロードし、実行する方法です。
まぁ、まだこちらの方が楽は楽かな…。
スマートな方法は当然?@です。
でも、技術的には?Aかな?(大した事ないけど…。)
イベント進行完成までに、どちらにするか考えます。
2023年10月03日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第20回

3Dダンジョンロールプレイングゲーム第20回目です。
今回はゲームの進捗管理をします。
【ゲーム製作進捗】
工程
作業
進捗
1
ゲーム設計(規模、詳細、メモリマップ)
完了
2
シナリオ作成
完了
3
オープニグ作成
完了
4
タイトル作成
(仮)完了
5
マップ設計(2D)
完了
6
マップグラフィック
完了
7
3D表示
完了
8
マップ内移動
完了
9
システムメニュー(道具、魔法、ステータス、ゼーブ)
10%
10
イベント設置・発生
未
11
メッセージ表示ロジック作成
完了
12
独自スクリプト作成(全20種)
60%
13
イベント進行
未
14
BGM作曲(ダンジョン、戦闘、エンディング)
33%(ダンジョンのみ)
15
BGM演奏
完了
16
本番データ登録
未
17
敵グラフィック(全6種)
未
18
敵遭遇
未
19
敵戦闘
未
20
レベルアップ
未
21
道具屋(武器屋)
未
22
宿屋
未
23
エンディング
未
うーん、全体で30%と言ったところでしょうか…。
難関部分である、「敵との戦闘」が手付かずですので、まだまだ先は長いです。
2023年10月01日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第19回

3Dダンジョンロールプレイングゲーム第19回目です。
今回はBボタンでメニュー表示をできるようにします。
コントローラーが、ジョイスティックの場合は「Bボタン」で、BIOSの「GTTRIG」(&H00D8)を利用します。
コントローラーが、キーボードの場合は「GRAPHキー」で、Laboratoryテーマ??13「 「GRAPH」キーが押されたか調べたい 」でやった、BIOSの「SNSMAT」(&H0141)を利用します。
そして前回メニュー(BASICからマシン語呼び出し)とは異なり、今回はマシン語内からメニュー選択画面を開きます。
メニュー項目は、
「どうぐ」
「まほう」
「ステータス」
「セーブ」
位かな?
キャンセルは当然ゲームに戻ります。
今回は何を選択してもとりあえず、ゲーム終了するようにしておきます。

次回はそれぞれの処理を作成していきます。
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部

マシン語部

BGMは、過去に製作した迷宮アクションゲームの「 TOWER 」のBGMを再利用しております。
ちょうど雰囲気的にもよいかと…。
よし、問題なくBGMが鳴りました。
そう言えば、メモリマップにBGMデータ領域を用意するのを忘れてた…。
&HA800~&HAFFFまでが空いていたので、そこの&HA800〜&HA855をBGMデータ領域にしています。
2023年09月26日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第17回

3Dダンジョンロールプレイングゲーム第17回目です。
今回はタイトル画面に「NEW GAME」/「CONTINUE」のメニュー選択を実装します。
「NEW GAME」選択時は、オープニング開始。
「CONTINUE」選択時は、新たな選択ウィンドウが開き、セーブファイル選択となります。
セーブファイル数ですが、小さなゲームなので1つでいいかなとも思ったのですが、メニュー選択のサンプルも兼ねているのでとりあえず3ファイル位選べるようにすればいいかな?

基本的にファイル操作はBASICに戻って実行します。
よって、マシン語でメニュー選択し、任意アドレス(今回は&HD015)に選択結果を書き込み、BASIC部へ戻る。
バックアップファイルから読み込んで、ゲーム実行。
と言う、処理の流れとなります。
メニュー選択は、Laboratoryテーマ??23「 選択肢メニューを開いて、選択したい 」で製作した「メニュー選択」を利用します。
「NEW GAME」でオープニング開始はOK。
仮のセーブファイル(FILE1〜3.SAV)を用意し、「CONTINUE」でゲーム開始するか動作テスト。
こちらも動作OKですね。
スクリプトを使わないメニュー選択の利用方法です。

赤枠にメッセージデータ先頭アドレスを代入しコールすると、選択ウィンドウが開き、メニュー選択できます。
因みに、メッセージデータは&HC988〜&HC98Fが「NEW GAME」、&HC990~&HC997が「CONTINUE」、&HC998~&HC99Cが「FILE1」、&HC99D~&HC9A1が「FILE2」、&HC9A2~&HC9A6が「FILE3」です。
2023年09月24日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第16回

3Dダンジョンロールプレイングゲーム第16回目です。
ゲームの雰囲気を高めるため、なぜ3Dダンジョンに挑むのかの説明を兼ねた、簡単なオープニングを作ります。
オープニングの実装には、Laboratoryテーマ??21「 指定座標に指定サイズのメッセージウィンドウを開きたい 」で製作した、独自スクリプト付の「メッセージウィンドウ」を利用します。
まずはタイトル画面(上図)を表示し、「PUSH SPACE」でボタンを押したコントローラーを、操作コントローラーとして登録し、以降そのコントローラーでのみ操作可能とします。
次に、オープニング表示。
「 MESSET.BAS 」でメッセージデータを作成します。

今回は、ありきたりで単純なストーリーにしておきます。
タイトル画面とオープニングだけで、グッとゲームらしくなりました!
スクリプトを使わないメッセージウィンドウの利用方法です。

赤枠にイベント?b?代入しコールすると、イベントのフラグ値に応じたメッセージ?bフメッセージが表示されます。
2023年09月18日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第15回

3Dダンジョンロールプレイングゲーム第15回目です。
今回は、いよいよ3Dマップの中をウロウロできるようにします。
これが出来れば、ゴール判定付ければ3D迷路ゲームなら完成ですね。
更に上下階段付けて、「MAP8 EDITOR」で2Dマップを立体迷路にすれば、高難度迷路の出来上がりです。
では、今回はキー入力処理と言う事で、BIOSの「GTSTCK」(&H00D5)を利用します。
Aレジスタにジョイスティック番号(0:キーボード、1:ジョイステックPORT1、2:ジョイスティックPORT2)を入れてコールすると、Aレジスタに押された方向値(BASICのSTICK関数と同じ値)が入ります。
今作のキー操作は下記の通りとします。
キー
行動
↑
向いている方向に前進
→
向いている方向に対して、右を向く
↓
向いている方向に対して、後ろを向く
←
向いている方向に対して、左を向く
「↑」が押された時だけ、向きに合わせて移動。
それ以外は向きを変えるだけになります。
凄く単純な操作なのでロジックも短いです。

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

今はまだ製作途中で、値を変更することもあるので初期変数をREAD、POKEしています(500行以降)が、完成したらこれも初期値という事でファイル化し(拡張子「.INI」)BLOADします。
上中段と下段で別のフォント(上中段:ダンジョン用FONT、下段:メッセージ用FONT)を設定しています。 (2023年9月13日記事参照「Laboratoryテーマ??25「 SCREEN2のグラフィックをFONTデータにして扱いたい」 」)
ここまで「 ダウンロード 」
プログラムは、Laboratoryテーマ??21「 指定座標に指定サイズのメッセージウィンドウを開きたい 」その?@のサンプルプログラムに、3Dロールプレイングゲームの追加分を足しています。
今後、メッセージ表示部にメニュー選択ロジックが追加されたら、3Dロールプレイングゲーム部を後ろにズラシます。
2023年09月16日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第14回
3Dダンジョンロールプレイングゲーム第14回目です。
今回はダンジョン描画があまりにもチープなので、もう少しだけマシにしてみます。
まぁ、まだ本格的なものを作るわけではないのでこれでもいいのですが、あまりにもチープすぎて…。
MSX1の画像能力なので、すごいことは出来ませんが、ちょうど「FONT EDITOR」のマウスが使えなかった時に、とりあえずで描いたものですので、もう少しなら何とかなるかな?と…。






今回はこんなところでヨシとします。
まぁ、雰囲気的な物は出せたかな?と、思います。
後は気が向いたらもう少し描き込みます。

本格的に作るのなら、上段と中段別々にFONTを用意した方が綺麗になります。
何なら実際の洞窟画像をキャプチャしてもいいかも。(FONT足りないか…。)
昔なら考えられなかった手法が、今なら当たり前に使えてしまう…。
では、次回は3Dマップの中を歩かせます。
併せて、途中経過プログラムを公開しますね。