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

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つ。































命令意味動作
GIGetItem所持アイテムを増やす
LILostItem所持アイテムを減らす
CICheckItemアイテムを所持しているか調べる
ININn宿屋
ISItemShop店屋
BEBattleEnemy敵とイベント戦闘開始

「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
















INOUT
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


レベルアップ値


























































































































































































































































































レベル体 力魔 力攻撃力防御力素早さ必要経験習得魔法
11504240
22205247
324573623回復1
4311674847攻撃1
5352012510110
6382416510220
7402618817450毒消
84629221020800
950363011221300
1054403515312000
1162504017352900
1263584820404000
1370645224485500戻る
1478706027557500
15867268326410000
16929572357013000
1710010072397817000回復2
1811510885428421000
1913011587438625000攻撃2
2013812892448829000
2114913595459033000
2215814697459037000
2316515399479441000
24170161103499845000
251741611135010049000
261801681175210553000
271891751255310757000
281951801305711561000
292001901356012065000
302102001406513065535


次に武器。(アイテム区分「1」)































名前攻撃力値段
木の棒210
石の剣460
銅の剣10180
鉄の剣15560
銀の剣201500
勇者の剣289800


次に盾。(アイテム区分「2」)



















名前防御力値段
木の盾245
鉄の盾5400
勇者の盾107400


次に鎧。(アイテム区分「3」)































名前防御力値段
布の服220
皮の鎧470
銅の鎧10300
鉄の鎧151000
銀の鎧203000
勇者の鎧287700


次に兜。(アイテム区分「4」)



















名前防御力値段
皮の帽子245
鉄の兜5400
勇者の兜107400


次に道具。(アイテム区分「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


最後に敵。




















































































名前体力魔力攻撃力防御力素早さ経験値お金
スライム3053212
おおさそり150183541625
リカント3404030214060
鎧の騎士55670714578150
悪魔の騎士794949253130165
死神の騎士95141059957172152
ストーンマン16001004040155148
ドラゴン35001301509000


次にシナリオです。
今回はマップが小さいので、シナリオはほぼないに等しいです。
シナリオとは、要するに謎解きのようなものです。
何もないのも寂しいので、サンプルに一つ宝箱を用意します。
イベント数は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マップグラフィック完了
73D表示完了
8マップ内移動完了
9システムメニュー(道具、魔法、ステータス、ゼーブ)10%
10イベント設置・発生
11メッセージ表示ロジック作成完了
12独自スクリプト作成(全20種)60%
13イベント進行
14BGM作曲(ダンジョン、戦闘、エンディング)33%(ダンジョンのみ)
15BGM演奏完了
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) | 開発
検索
<< 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コード