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

2023年10月21日

プログラミング仲間

4_19_1.png
実は専門学校に、MSXでプログラミングできる仲間がいました。
今まで、MSX仲間と言っても、プログラミングを教え合える仲間はいませんでした。

ただ、私と違って完全なMSX2ユーザーでした。
それでも、「なぜそんな不便な機能(MSX1)使ってるの?」と言いながらも、私がMSX1が好きだと言う事を理解してくれていました。
因みに以前に書いた、「ドラクエ」の処理の仕方でヘルプを求めてきたのが彼です。(2023年5月20日記事参照「3Dダンジョンロールプレイングゲーム」)

しかし彼は、マシン語やプログラミングの知識もあり、ゲームも大好きなのですが、自分でゲーム制作することはしませんでした。
難題なロジックや、困難な処理の仕組みを解析して、それをプログラミングして再現させる事を趣味としていました。
ですので、プログラミングレベルは非常に高かったと思います。
比較がゲームと、ロジックなので出来ませんが…。

ただ、彼は非常にゲームが好きで、バイト代をほぼゲームに突っ込んでいました。
私もそれを借りてプレイするようになり、徐々にプレイヤー側に片足突っ込み始めました…。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | MSX回顧録

2023年10月20日

MSX1

制作中の3Dロールプレイングゲームですが、今までBlueMSXのMSX2+環境で開発しておりました。
10_20_2.png
特にそれで困らないのでそうしていたのですが、ふと「本当にMSX1環境で動作するのかな?」と思ってしまいました。

そこで、MSX1環境に設定し、起動。
10_20_3.png
…動かん!
え? なんで?
MSX2の機能使ってないよ!?

慌てて調べてみると…、使ってました…。
10_20_4.png
SCREEN1.5にするロジックと一緒に、SPRITEモードを2にするロジックが入っていました。(SPRITEモード2はMSX2の機能です。)
そらダメだ…。
10_20_5.png

SCREEN1.5にするロジックだけ残して再起動!
10_20_6.png
おぉ! 今度はちゃんと動作しました。
10_20_7.png
MSX1
んー? なんか、色合いが違うなぁ…。
10_20_8.png
MSX2+
MSX1の方が色が薄い…。
何の違いなんだろう?
まぁ、とりあえずMSX1環境で問題なく動作することが確認できました。
このままこの環境で制作続けます。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | MSX雑記

2023年10月19日

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



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

さて、今回はスクリプトの命令「IN」を組んでいきます。
「INn」で宿屋となります。

前回の「IS」に比べれば、とんでもなく簡単です。
前回同様フローを書いてみました。
10_13_1.png
ほぼメッセージデータで組めます。
「IN」のスクリプト処理は、所持金減らして、体力・魔力を回復して、画面の暗転処理するだけです。
状態異常の毒はアイテムか魔法でないと消せません。

画面の暗転処理は、ちょっと凝ってみます。
上下から暗転するパターンで、偶数列は上から、奇数列は下から1FONT単位で黒く画面を消していくことにします。

次回は、実際に「IN」を組み込んでいきます。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2023年10月18日

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



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

さて、今回もスクリプトの命令「IS」を組んでいきます。
前回「買い」を組みましたので、「売り」を組んでいきます。

「買い」同様、いくつかのサブルーチンが必要です。
@所持アイテムbゥら、そのアイテムデータの先頭アドレスを検索するサブルーチン。
「買い」の@と同じ。

A所持アイテム格納エリア(16バイト)が空かチェックするルーチン。(空ならエラー。)
10_18_7.png
コメントのKWは「KEY WAIT」、GPは「GOLD PRINT」のサブルーチンです。

B選択された所持アイテムの格納エリアのアドレスを検索するサブルーチン。
10_18_8.png
今作は所持アイテム数が16個と少ないので、並び替えしない。
そのため、所持アイテム格納エリアの空きを飛ばして検索する必要有り。
どういう事か具体的に説明します。
10_18_13.png
格納エリアに上図のように入っていたとして、3個目のアイテム20を使うとします。
10_18_14.png
すると、3個目の格納エリアが空きます。
この時、アイテム22は、アイテムとしては3個目になりますが、格納エリアは4個目となります。
並び替えしないと、格納エリアの空きを飛ばして個数カウントしないと、正常なアイテムを選べません。
因みに、この時アイテム21を手に入れると、格納エリアの一番若い空き場所である3個目に格納されます。
10_18_15.png

Cアイテム名と売値を一緒に表示するサブルーチン。
10_18_9.png
コメントのISは「ITEM SEARCH」、VPは「VARIABLE PRINT」です。
売値は買値の半額(/2)となります。

D所持金額を表示するサブルーチン。
「買い」のBと同じ。

E標準メッセージウィンドウを表示し、メッセージを表示するサブルーチン。(標準サブルーチンとして利用。)
「買い」のCと同じ。

F重要アイテム、若しくは装備中アイテムかチェックするルーチン。(重要アイテム、装備中アイテムならエラー。)
10_18_10.png
アイテムbフ8ビット中先頭1ビット目を重要品フラグ、先頭から2ビット目を装備中フラグとします。
10_18_12.png
どちらかでも立っていれば、売れない(捨てられない)事にします。
アイテム種類は6ビットなので、最大31種類作成可能。(今作は23種類。)
アイテム種類を32種類以上作りたければ、アイテム格納ワークと同数のアイテム情報ワークを用意します。
これがあれば、下6ビットで同じアイテムを複数持っている時に、1つの格納エリアで31個まで持たせるといった事が出来ます。
10_18_16.png


G所持品格納エリアからアイテムb削除し、所持金を増やすルーチン。
10_18_11.png
コメントのPSはB「POSSESSION SEARCH」、ISは「ITEM SEARCH」、KWは「KEY WAIT」です。

メッセージです。
10_18_1.png
10_18_2.png
10_18_3.png
10_18_4.png
10_18_5.png
10_18_6.png

次回は、「IN」を組んでいきます。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | 開発

2023年10月17日

PUSHとPOP

4_19_1.png

とにかく公私共々忙しいです…。

帰宅も遅いし、帰ってきてからプログラミングする意欲がわかないくらい疲れてる…。
そのため、なかなか「売り」側が完成しない。

久しぶりにがっつりロジック組んでるせいか、マシン語の暴走が多い…。
先日の上限オーバーにすぐ気づかなかったのも、普段から暴走させまくってたので、今回もそうだろうと考えてしまったのもあります。
暴走の理由の大半は、やはり「PUSH」と「POP」。
非常に便利な命令ですが、制約が厳しい。
制約を守らないと、すぐ暴走・リセットします。

主な制約は、
制約@ PUSHで退避した分だけPOPで戻さなければいけない。
制約A PUSHした内容をCALL命令で飛んだ先でPOPしてはいけない。
まぁ、理屈が分かっていれば当然なんですけどね。

今回の「店屋」のように、条件が多く、ジャンプ命令を多用するロジックになると、どうしても飛んだ先で「POP」の回数が合わなくて暴走するという、今更な初心者的な事を繰り返しています…。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | MSX雑記

2023年10月16日

細かく修正K

4_19_1.png
技術資料」カテゴリに、「ハンドアセンブル方法」と「MSXメモリマップ」を追加しました。

上記に併せて、2023年6月1日記事「ハンドアセンブル」に、サンプルプログラム掲載。

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

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月 >>
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コード