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

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月10日

マシン語からのファイル制御

4_19_1.png

今回3Dロールプレイングゲーム作ってて気付いたんですが、私はマシン語でフロッピーディスクを制御したことがありませんでした。
おおー、驚愕の事実です。

そういえば、ファイルの読込などは全てBASICで行ってからマシン語コールしていたので、そう言われればそうかも。
ロールプレイングゲームなんかも、マップ変更する度に一度BASICに戻ってた気がします。

特にやり方が分からないとかの理由で、そうしていた訳ではありません。
それで困らなかったので、する必要がなかった、しようと思わなかった。というのが、正直なところです。

うーん、確かにマシン語からどうやってファイルを読み込むのか、知識として持っていない…。
今更そんな事に気付くとは…。
一度マシン語からディスク制御できるか試してみます。
上手くいったらLaboratoryのテーマに挙げようかな。

これが出来れば当時の自分を超えるのか!?
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | MSX雑記

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月08日

細かく修正J

4_19_1.png
ゲーム製作」カテゴリの、全記事の記事タイトルをルールに則って変更しました。(2023年10月6日記事参照「ゲーム制作記事タイトル記述ルール」)

ダウンロード」のサンプルに、
Laboratoryテーマ23「選択肢メニューを開いて、選択したい」その@
Laboratoryテーマ23「選択肢メニューを開いて、選択したい」そのB
のサンプルを掲載忘れていましたので、追加しました。

技術資料」カテゴリを新設しました。
グローバルメニューにも追加しました。

ダウンロード」に追加で新規公開したゲームやツール、サンプルの記事へのリンク追加、「Laboratory」テーマメニューの公開分記事へのリンク追加。

それ以外は、画像の貼り直しや、記事の誤記の修正程度です。

2023年10月07日

技術記事纏め

4_19_1.png

このブログは、MSXでのプログラミングをメインとしており、ハードウェア的な事に関しては解説しない方針でした。
(私の下手な説明より、解り易く詳細に説明されている方がたくさんいますので…。)
しかし、プログラミングの説明過程で、どうしてもハードウェア的な事も説明しなければならない時(主にBIOS等)は、表など用いて解り易く説明するよう心がけています。
ただ、せっかく説明したのに記事に埋もれてどこへ行ったのか分からなくなるともったいないので、新たに「技術資料」カテゴリを作り、インデックス代わりにリンク集を作ります。
技術的な記事が増えれば、随時追加していきます。

posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 技術資料

2023年10月06日

ゲーム制作記事タイトル記述ルール

4_19_1.png

突然ですが、「ゲーム制作」カテゴリの記事タイトルの記述ルールを決めます。
現在、「3Dダンジョンの考え方〇」となっています。
ゲーム製作を始める際、何も考えず付けたタイトルですが、現在もこれが続いています。
これを、「【ゲーム制作】3Dダンジョンロールプレイングゲーム 第1回」に変更します。
これだと一目でゲーム制作の記事だと分かるし、「BLOG RANKING」のように〇番号が表示エラーになるサイトでも、ちゃんと表示できるようになります。

本業が忙しく、余り時間が取れないので、他の記事の修正と併せて順次改訂していきます。
全記事改訂が終わったら改めて報告します。

うーん、他のカテゴリも解り易いように、タイトルにカテゴリ名を表記した方が良いかな?
時間があれば検討してみます。
検索
<< 2024年11月 >>
          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
広告
最新記事
ブログランキング
にほんブログ村 ゲームブログ ゲーム制作へ
プロフィール
J-JSOFTさんの画像
J-JSOFT
高校時代、あれほど熱心に取り組んだMSXに触れなくなって30年余…。 MSXエミュレータとの出会いで、MSX愛が再燃中。
プロフィール
カテゴリーアーカイブ
ファン
QRコード