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

2023年10月15日

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



3Dダンジョンロールプレイングゲーム 第26.5回目です。

またか!?と、思われるかも知れませんが、またです。
今回は私のハンドアセンブルのやり方、BASICのDATA文をPOKEでマシン語に書き込んでいくやり方の上限にぶつかりました。
どういうことか?
この説明をするには、MSXのメモリマップの説明が必要になります。
MSXのメモリマップを図にします。(64kb)

10_15_1.png



エリア名

説明


BASICインタプリタ

主にBASIC言語のプログラムを翻訳しながら実行するためのプログラムが入っているエリア。


テキストエリア

BASIC言語のプログラムが入るエリア。プログラムが大きくなればなるほど、矢印方向に広がっていく。


変数エリア

使用された変数の値などの情報が入るエリア。プログラムが実行され新しい変数が使用されるたびに、矢印方向に広がっていく。


フリーエリア

空きエリア。BASIC言語のプログラムが大きくなったり、変数をたくさん使ったり、CLEAR文で文字列エリアを大きく取ったりして、このエリアがなくなると「Out Of Memory」エラーとなる。


文字列エリア

文字変数の内容である文字列が入るエリア。CLEAR文で文字列エリアの大きさが決められ、大きく取れば取るほど、矢印方向に広がっていく。


マシン語エリア(ユーザーエリア)

主にマシン語のプログラムを入れるのに使うエリア。CLEAR文で大きさを決められる。


ワークエリア

BASICがプログラムを実行中に色々なことに使うエリア。



今作は、&HC000からマシン語のプログラムに使うので、テキストエリア〜文字列エリアが&H8000~&HBFFFまでしか使えません。
しかし、私のハンドアセンブル方法では、BASIC言語のプログラムが長くなり、テキストエリア〜文字列エリアの部分が&HC000に達してしまい、マシン語エリアを侵食し暴走してしまいました。
10_15_2.png
追加でプログラムを組み込んで、テスト実行した際暴走するので、ただのプログラムミスだと思い込み、ありもしないプログラミングミスをしばらく探していました。
今回はMSXプログラミングが久しぶりだったので、この上限に達した状態だと気付くのに時間が掛かりました。
昔ならすぐに察する事が出来たと思います。(大体&HCD00くらいが一旦の上限。)

解決法は簡単。
マシン語プログラムを2本に分ければ解決します。
10_15_3.png
1本目は&HC000~&HCCFFまでの「.BIN」ファイル作成。
2本目は&HCD00~&HCFFFまでの「.BI2」ファイル作成。
とすれば、解決です。

あとは、本当の上限&HCFFFに達した時にどうするか?ですが、まだ悩んでます。
posted by J-JSOFT at 15:00 | Comment(0) | TrackBack(0) | 開発

2023年10月14日

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



3Dダンジョンロールプレイングゲーム 第26回目です。

さて、今回からスクリプトの命令「IS」を組んでいきます。
今回は「買い」側を組んでいきます。

「ドラクエ」タイプのお店を実現するには、いくつかのサブルーチンが必要です。
まずは、?@「IS」命令のパラメータのアイテム?bゥら、そのアイテムデータの先頭アドレスを検索するサブルーチン。
10_14_10.png
アイテムデータは1種類に付き、19バイト(&H13)です。

?Aそれを基に、アイテム名と買値を一緒に表示するサブルーチン。
10_14_11.png
コメントのISは?@「ITEM SEARCH」、VPは前回記載した「VARIABLE PRINT」です。

?B所持金額を表示するサブルーチン。
10_14_15.png
コメントのVPは「VARIABLE PRINT」です。

?C標準メッセージウィンドウを表示し、メッセージを表示するサブルーチン。(標準サブルーチンとして利用。)
10_14_14.png

?D所持品ワーク中に空きがあるかチェックするルーチン。(「GI」でも利用。書き込めなければエラー。)
10_14_13.png
コメントのKWは「KEY WAIT」のサブルーチンです。

?E所持金より購入額を引けるかチェックするルーチン。(引けなければエラー。)
10_14_12.png
コメントのKWは「KEY WAIT」のサブルーチンです。

?F所持品ワークにアイテム?b?書きこんで、所持金を減らすルーチン。
10_14_16.png
コメントのKWは「KEY WAIT」のサブルーチンです。

…など、多岐に渡ります。
メッセージも「売り」側も含め全種組み込み終わりました。
10_14_1.png
10_14_2.png
10_14_3.png
10_14_4.png
10_14_5.png
10_14_6.png
10_14_7.png
10_14_8.png
10_14_9.png
「いらっしゃい!」と「またのおこしを。」のみ、メッセージデータです。

次回も引き続き、「IS」の「売り」を組んでいきます。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2023年10月13日

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



4_19_1.png
3Dダンジョンロールプレイングゲーム 第25.5回目です。

「.5」て何?
と、思われたでしょうが、今回はバグ取りです。

&HD0F0~&HD0FFを、いろいろなルーチンで共用ワークとして使っていたのですが、遂にダブってしまいました。
「選択ウィンドウを開く際、大本のメッセージウィンドウの情報を記憶させる領域」と、「スクリプトのパラメータを読み取って記憶させる領域」がダブって、誤作動を起こしてしまいました…。
ワークエリア節約のため共用しているのですが、本来、全く違う処理で使うのでダブることはないのですが、店屋さんは少し複雑なので、ダブらせてしまいました…。
未熟ですね…。
この時間まで原因不明で、今日の更新抜けてしまうかと思いました…。

まぁ、この領域は所持アイテムを表示する際のワークとしても使う予定で、修正する必要があったので事前にロジック確認できてよかったかも。
修正内容は領域のサイズを広げる予定です。
&HD0F0~&HD0FFは16バイトです。
所持できるアイテム数は16個なのですが、所持アイテム表示場所の情報が4バイト、所持数が1バイトで、16+4+1の21バイト必要になるからです。
&HD0E8~&HD0FFの24バイトにする予定です。

ここと同じようにワーク領域を共有しているところがあと何か所かあるので、ダブらないことを祈ります。
posted by J-JSOFT at 22:09 | Comment(0) | TrackBack(0) | 開発

2023年10月12日

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



3Dダンジョンロールプレイングゲーム 第25回目です。

さて、今回はスクリプトの命令「IS」を組んでいきます。
「IS」は「ItemShop」で、要するに店屋さんです。

しかし、この店屋さんが結構難題…。
店屋さんと一言で言うけど、「買い」と「売り」があるし、メッセージ数もなかなか多い…。
いきなり組み出すとハマるのは目に見えているので、ちょっとロジック整理します。

まず、どこまでをメッセージデータで出来るのか?
残念ながら、最初の「いらっしゃいませ!」位ですね。
その後すぐに「かう/うる」選択になるので、そこからスクリプト内処理です。
最後、メッセージに戻って「またのおこしを。」までとなります。

解り易いように、フローにしてみました。
10_12_1.png
これだけの内容を一つの命令に組まないといけません。
「一番大変であろう」と言った意味がお解りいただけましたか?

次回は、実際の処理を組んでいきます。
先に、「買う」側だけ組んでみます。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2023年10月11日

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



4_19_1.png
3Dダンジョンロールプレイングゲーム 第24回目です。

さて、今回からは残りのスクリプト命令を組み込んでいきます。
これがないと、イベントが作成できませんので、先に全部組み込んでしまいます。
今回の3Dロールプレイングゲームで必要な命令は、残り6つ。




命令

意味

動作


GI

GetItem

所持アイテムを増やす


LI

LostItem

所持アイテムを減らす


CI

CheckItem

アイテムを所持しているか調べる


IN

INn

宿屋


IS

ItemShop

店屋


BE

BattleEnemy

敵とイベント戦闘開始


「GI」は、宝箱を開けた際に、青い鍵を所持させます。
「LI」は、青・赤鍵を使った際に、持ち物から消します。
「CI」は、宝箱とゲートで、それぞれの鍵を持っているかチェックします。宝箱のイベントのフラグを「CF」で調べても代用可。
「IS」と「IN」は説明要らずですね。
武器屋と道具屋は、売る物が異なるだけで命令は同じです。商品点数が多ければ、武器屋と防具屋を分けてもいいですね。
「BE」は、ボス戦闘を開始します。

まず事前準備として、以前に公開した「 アイテムデータ登録ツール 」で仮の道具データを登録します。
仮でもデータを入れておかないと、「IS」等ちゃんと動いているかのテストが出来ません。
同様に、「BE」テスト用に敵データも仮で登録します。

次回は、一番大変であろう「IS」を組んでいきます。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2023年10月09日

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



3Dダンジョンロールプレイングゲーム 第23回目です。

さて、開発順序として先に戦闘以外をすべて完成させる事にします。
前回書いた通り、戦闘のみ別プログラムにする可能性が出たからです。 (2023年10月4日記事参照「 【ゲーム制作】3Dダンジョンロールプレイングゲーム 第21回 」)

と、言う訳で今回は残りのスクリプトを組むための準備として、メッセージ中に変数の値を表示する仕組みを考えます。
メッセージ中に変数の値を表示とは何か?
代表的な例は、ロールプレイングゲームならば必須のステータス表示ですね。
あとは、戦闘時のダメージ表示なんかですね。

実は、この2例、表示方法が異なるのです。
ステータス表示は右詰め。
ダメージ表示は左詰め。
シューティングゲームの得点表示とは異なり、頭の「0」は消す「ゼロサプレス」も必要です。

以前に「Laboratory」でやった、Laboratoryテーマ??5「 16ビットアドレス値の10進数表示 」の表示部分を改造します。
そのままのロジックで表示させると、
10_9_1.png

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

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

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

これが出来れば、ステータス表示(右詰め)や、店屋の商品値段表示(右詰め)、戦闘のダメージ表示(左詰め)等が出来るようになります。

改造内容は下記の通り。
16進数→10進数変換ロジックは、ほぼいじっていません。
10_9_5.png

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




IN

OUT


HL

表示する値

なし



DE

格納先先頭アドレス





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

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

ボス


10_5_1.png
ルートはこうです。
・道具屋さんに赤い鍵が売られている。(高額)
・宝箱がある。(ゲートで赤い鍵を使うまでは「何かある気がする。」で宝箱発見できず。)
・宝箱は赤い鍵で開く。
・宝箱の中身は青い鍵だった。
・道中、鍵のかかったゲートがある。(赤い鍵を使うと「遠くで何かの仕掛けが動いたような音がする…。」となり、宝箱が見付かるようになる。)
・ゲートは青い鍵で開く。

これを最初に考えておかないと、必要なアイテムや、イベントの配置場所が決まらないので最初に決めます。
ただ、最初は絶対に必要なイベントと、アイテムのみ決めておいて、後はそれに付属する形で決めていけばいいです。

以上で詳細設計とシナリオとなります。
実際はゲームに組み込んでテストプレイしながら値を調整していきますので、そこまでガチガチに決めておく必要はありません。
今回はすでにあるゲームの値をそのまま使っているので、調整も少なくて済むかと思います。

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

2023年10月04日

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



4_19_1.png

3Dダンジョンロールプレイングゲーム第21回目です。
前回、製作状況の進捗確認しました。
現在、BGM鳴らしながらマップ移動して、システムメニュー開いてメッセージを表示するまではできました。
後は大きく「敵との戦闘」、「プレイヤー関係」、「スクリプトの残り」の製作となります。

さて、ここで問題が発生しました。
プログラム見て気付かれている方もいるかとは思いますが、プログラム領域がなくなりそうです。
プログラム領域、&HC000~&HCFFFまでなのに、既に&HCA00まで使いました。
敵との戦闘、ただでさえ大きなロジックなので、&HCFFFまでではまず収まりません。
メモリ節約せずに突き進んできましたので、まぁ、仕方ないけど…。

解決策は2つあります。
?@変数領域を移動させプログラム領域を広げる。
?Aイベント進行は何とか残りのメモリでできそうなので、敵との戦闘だけ別プログラムにする。

実はどちらも大変です。
?@以前にも書いた通り、MSXには文字の置き換え機能がありません。
変数書き換えは、完全手作業なので大変です。
変換し忘れたら、当然暴走です。
ハンドアセンブルの厳しいとこです。

?A別プログラム化は、敵との戦闘になったら敵グラフィックの読み取りと同時に、敵戦闘プログラムもダウンロードし、実行する方法です。
まぁ、まだこちらの方が楽は楽かな…。

スマートな方法は当然?@です。
でも、技術的には?Aかな?(大した事ないけど…。)
イベント進行完成までに、どちらにするか考えます。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2023年10月03日

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



4_19_1.png

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%と言ったところでしょうか…。
難関部分である、「敵との戦闘」が手付かずですので、まだまだ先は長いです。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2023年10月01日

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



10_1_1.png
3Dダンジョンロールプレイングゲーム第19回目です。
今回はBボタンでメニュー表示をできるようにします。

コントローラーが、ジョイスティックの場合は「Bボタン」で、BIOSの「GTTRIG」(&H00D8)を利用します。
コントローラーが、キーボードの場合は「GRAPHキー」で、Laboratoryテーマ??13「 「GRAPH」キーが押されたか調べたい 」でやった、BIOSの「SNSMAT」(&H0141)を利用します。

そして前回メニュー(BASICからマシン語呼び出し)とは異なり、今回はマシン語内からメニュー選択画面を開きます。
メニュー項目は、
「どうぐ」
「まほう」
「ステータス」
「セーブ」
位かな?
キャンセルは当然ゲームに戻ります。
今回は何を選択してもとりあえず、ゲーム終了するようにしておきます。
10_1_2.png

次回はそれぞれの処理を作成していきます。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発
Build a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: