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

2024年03月10日

Laboratory新テーマ追加




6_2_1.png

ゲーム制作」カテゴリで制作していた「3Dダンジョンロールプレイングゲーム」制作中に「やります」と言っていた、マシン語からフロッピーディスクを制御する方法です。(2023年10月10日記事参照「マシン語からのファイル制御」)
私自身過去作でやった事がないので、本当の意味での「Laboratory」です。
年齢のせいか、新しいことを覚えるのが最近億劫になってきたのですが、ここはひとつ気張って頑張ります。










テーマ
28マシン語でフロッピーディスクを制御したい

フロッピーディスク何枚組とかの、大規模なゲームを作成する時には必要な機能ですね。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年11月09日

Laboratoryテーマ27「SCREEN1.5でSPRITEモード2を使いたい」



11_9_2.png
水平方向にSPRITEを16枚並べた時、8枚まで表示される。
今回は、Laboratoryテーマ27「SCREEN1.5でSPRITEモード2を使いたい」です。
(MSX2以降の機能となります。)
SCREEN1.5は前回書いた通り、FONTが非常に扱い易いモードです。
このモードを使ってシューティングゲームなんかを作りたい!
しかしながらMSX1の機能であり、スプライトの機能が貧弱です。
そこで、SCREEN1.5で、SPRITEモード2が扱えないか?
実は扱えます!
代表作がコナミの「スペースマンボウ」ですね。(2023年10月2日記事参照「MSX語り」)
やり方ですが、システムワークとVDPの設定で行います。

詳細を説明すると非常に長く、専門的になってしまうので、今回は必要な設定のみ記載します。(簡潔に説明しきるスキルがない…。)
詳細は、「MSX2 TEchnical Hand Book」等で調べてみて下さい。
























ラベル名アドレス初期値内容設定値
T32ATR&HF3C3・F3C4&H1B00SCREEN1スプライトアトリビュート・テーブル&H1E00
GRPATR&HF3CD・F3CE&H1B00SCREEN2スプライトアトリビュート・テーブル&H1E00





























名称対応するVDP機能設定値
R#0VDP(0)モードレジスタ#0&H4
R#5VDP(5)スプライトアトリビュートテーブル(LOW)&H3F
R#8VDP(9)モードレジスタ#2第3ビットを「1」

モードレジスタ#0(R#0)













0DGIE2IE1M5M4M30

DG:1のとき、カラーバスを入力モードにして、データをVRAMに取り込む
(デジタイズ機能を持ったMSX2でのみ使用可能)
IE2:Interrupt Enable2(1のとき、ライトペンによる割り込みを可能にする)
IE1:Interrupt Enable1(1のとき、水平帰線による割り込みを可能にする)
M5:表示モードの設定に使用する
M4:表示モードの設定に使用する
M3:表示モードの設定に使用する
(IE2はMSXでは使用しません。常に「0」)
(R#1のM1、M2と、R#0のM3~M5が「00010」でグラフィックモード3(SCREEN4)となります。
モードレジスタ#1(R#1)













0BLIE0M1M20SIMAG

BL:1=画面表示、0=画面非表示
IE0:Interrupt Enable0(1のとき、垂直帰線による割り込みを可能にする)
M1:表示モードの設定に使用する
M2:表示モードの設定に使用する
SI:スプライトのサイズ 1=16×16、0=8×8
MAG:スプライトの拡大 1=拡大する、0=拡大しない


スプライトアトリビュートテーブル(LOW)(R#5)













A14A13A12A11A10A911

(A9は必ず「1」に設定)

モードレジスタ#2(R#2)













MSLPTPCBVR0SPDBW


MS:1=マウスを使用する(カラーバスは入力モード)、0=マウスを使用しない(カラーバスは出力モード)
LP:1=ライトペンを使用する、0=ライトペンを使用しない
TP:カラーコード0の色をカラーパレットの色にする
CB:1=カラーバスを入力モードにする、0=カラーバスを出力モードにする
VR:VRAMの種類を選択する(1=64K×1bitまたは64K×4bit、0=16K×1bitまたは16K×4bit)
SPD:1=スプライト非表示、0=スプライト表示
BW:1=白黒32階調、0=カラー(Composit encoder にのみ有効)
(MS、LP、BWはMSXでは使用しません。常に「0」)

因みに「SPRITE EDITOR」はSPRITEモード2に対応しています。

BASICのサンプルプログラムです。
11_9_1.png
90行と100行でSPRITEモード2に設定できます。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年11月08日

Laboratoryテーマ26「SCREEN1.5を使いたい」



今回は、Laboratoryテーマ26「SCREEN1.5を使いたい」です。
MSXのSCREEN1は、8FONT毎に前景色と背景色で2色しか扱えないという、独特な仕様です。
しかし、SCREEN1はFONTがもの凄く扱いやすい…。
せめて、SCREEN2のように横8ドット毎2色扱えればなぁ…。
と、言う要望をかなえられるのがSCREEN1.5です。

やり方は簡単、「BIOS」の「SETGRP」(&H007E)を使って内部処理(VDP)だけをSCREEN2にします。















ラベル名アドレス変化するレジスタ使い方
SETGRP&H007EすべてVDP のみを GRAPHIC2 モードにする


因みに「FONT EDITOR」も、SCREEN1.5に対応しています。

BASICサンプルプログラムです。
11_8_1.png
80行のみで、SCREEN1.5にする事が出来ます。

では、次回はLaboratoryテーマ27「SCREEN1.5でSPRITEモード2を使いたい」です。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年10月31日

Laboratory再々々々追加




6_2_1.png
MSX1でゲームを製作するにあたり、一番の基本だけど、とても大切なことを忘れていました。
SCREEN1.5の設定方法です。
SCREEN1.5はこの機能が有ると無いとで、ゲームの出来栄えに雲泥の差が出ます。
当たり前すぎて、MSX1の標準機能と思ってしまいます。
あと、MSX2でSCREEN1.5を使ってシューティングゲームを作りたい時に必須のSPRITEモード2の設定方法です。










テーマ
26SCREEN1.5を使いたい

標準のSCREEN1では、画面をきれいにするにも限界がありますが、SCREEN1.5を使うことによって、MSX1のグラフィック機能のすべてが使えるようになると言っても過言ではありません。







27SCREEN1.5でSPRITEモード2を使いたい

MSX2の機能ですがSPRITEモード2が使えるようになれば、2枚重ね3色や、横ライン毎1色、水平方向同時表示8枚など、SPRITE機能が強化されます。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年09月29日

Laboratoryテーマ10「マシン語処理中に走査線割り込みを使ってBGMを鳴らしたい」




さて、今回はLaboratoryテーマ10「マシン語処理中に走査線割り込みを使ってBGMを鳴らしたい」です。
MSXには「走査線割り込み」と言う機能があります。
「走査線割り込み」は簡単に言うと、プログラム実行中でも凡そ1/60秒毎に割り込みが掛かり、別処理を走らせる事が出来る機能です。
1/60秒毎と一定間隔なので、タイマーやBGM演奏などに使われます。
別処理が終わると、実行中プログラムの中断した位置から再開します。

今回は以前に公開した、Laboratoryテーマ6「自機に向かって飛んでくる敵弾」と、Laboratoryテーマ14「簡単にBGMを鳴らしたい」のサンプルプログラムを合体させ、ゲーム中にBGMを演奏させてみます。


流石にシューティングゲームのBGMに、「カエルの歌」はなかなかシュールです。

「IITVLSMPL.BAS」【ダウンロード

9_29_1.png
STSMPL.BASへの追加分のみ掲載します。

マシン語のサンプルです。
起動すると、ITVLSMPL.BINを作成します。

「BINSET.BAS」【ダウンロード

9_29_2.png
STSMPL.BINへの追加分のみ掲載します。

走査線割り込みがされると、特定のアドレス(&HFD9F)がコールされます。
&HFD9F~&HFDA3の5バイトが走査線割込み時の命令格納エリアとなっているので、ここにBGM演奏ルーチン部へのコール命令を設定する事で、走査線割り込みでBGMを演奏する事が出来ます。
因みに、通常はリターン(&HC9)のみ設定されています。

プログラムは、「走査線割り込み初期処理」(&HC310)、「走査線割り込み終了処理」(&HC338)、「割り込みBGM演奏処理」(&HC348)の3つに分かれます。
「走査線割り込み初期処理」は、BGM演奏開始前に一度実行して下さい。
走査線割込み時の命令格納エリアの内容を退避します。
これは周辺機器が取り付けられていたりすると、走査線割込み時の命令格納エリアに既に別処理が設定されている可能性があるためです。
「走査線割り込み終了処理」は、BGM演奏終了時に一度実行してください。
退避した走査線割込み時の命令格納エリアの内容を戻します。
「割り込みBGM演奏処理」は、ルーチン開始時に全てのレジスタを退避(PUSH)し、終了時に戻し(POP)ます。
通常のプログラム処理と、割り込み処理で同じレジスタを使うので、割り込み内でレジスタ変更すると、通常プログラムにも反映されてしまい、必ずバグるので忘れないように。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年09月28日

Laboratoryテーマのタイトル変更




6_2_1.png
Laboratoryテーマ10「スクロールシューティング等で、処理が重いためスクロールの際、他のキャラクタの動きがガクガクする」について、タイトルを変更します。
このテーマは、シューティングゲームで自機の移動中、他の重い処理(スクロール等)が実行されると、その間、一瞬自機の動きが遅くなります。
スクロールの度にガクッガクッとなるので、物凄い違和感があります。
その違和感を解消するために、「走査線割り込み」機能を使おうと言う内容でした。

「走査線割り込み」は簡単に言うと、プログラム実行中でも凡そ1/60秒毎に割り込みが掛かり、別処理を走らせる事が出来ます。
その処理終了後、中断したプログラムを再開する機能です。
時間が一定なので、タイマーやBGM演奏などによく使われます。

シューティングゲームよりも先に、「ゲーム製作」の3DダンジョンロールプレイングゲームのBGM演奏で使いたいので、テーマタイトルを「マシン語処理中に走査線割り込みを使ってBGMを鳴らしたい」に変更します。










テーマ
10マシン語処理中に走査線割り込みを使ってBGMを鳴らしたい
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年09月23日

Laboratoryテーマ23「選択肢メニューを開いて、選択したい」そのB




さて、今回はLaboratoryテーマ23「選択肢メニューを開いて、選択したい」そのBです。
ゲーム中のメニュー選択と言えば、まずはロールプレイングゲームの「お店」系がすぐ思い浮かびます。
ドラクエだと、「武器屋」、「防具屋」、「道具屋」、「宿屋」、「協会」あたりでしょうか。
後は、自分の装備変更、アイテム・魔法使用時ですね。
他には、アドベンチャーゲームのコマンド選択ですかね?

今回は、このロールプレイングゲームで使う「アイテムデータ」を、レイアウトに合わせて作成するツールを公開します。

ITMSET.BAS【ダウンロード

使い方はサンプルに倣って、DATA文にメッセージを入力し「RUN」実行するだけです。
9_23_1.png

データレイアウトは下記となります。

【 レイアウト 】
アイテム区分,アイテム名称,価格,効果1,効果2,効果3,
アイテム区分,アイテム名称,価格,効果1,効果2,効果3,
   :
アイテム区分,アイテム名称,価格,効果1,効果2,効果3,
データ終了(END)




































区分アイテム種効果1効果2効果3
0武器攻撃力防御力素早さ
1防具
2体防具
3頭防具
9道具体力回復値魔力回復値状態異常回復

効果1〜3は、0〜10,000の範囲で設定します。
なぜ、上限が10,000かと言うと、防御力で説明すると「総防御力(50,000)=自分の防御力(20,000)+装備の防御力(防具10,000+体防具10,000+頭防具10,000)」となるので、各々値にあまり大きな値を設定すると16ビットの上限、65535を超えてしまうからです。
これらの項目は、参考ですので必要に応じて増やしてください。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年09月22日

Laboratoryテーマ23「選択肢メニューを開いて、選択したい」そのA




6_2_1.png
さて、今回はLaboratoryテーマ23「選択肢メニューを開いて、選択したい」そのAです。
前回公開したサンプルの、スクリプトの書き方を説明します。

まず、YN命令。
記述:





YN,y,x,m1,m2,m3

因数の説明:


















y,x選択ウィンドウ表示座標
m1キャンセル時メッセージ
m2はい選択時メッセージ
m3いいえ選択時メッセージ

例:座標(2,2)に「はい/いいえ」の選択ウィンドウを開き、キャンセルならメッセージ4を、「はい」ならメッセージ5を、「いいえ」ならメッセージ6を表示する。

























10,1,"げんきかい?",2,"YN,2,2,4,5,6"
21,"はい ",2
31,"いいえ",2
41,"むしすんなよ!",2
51,"そりゃよかった!",2
61,"おだいじに。",2

メッセージ長は3桁固定ですが、「はい」と「いいえ」のメッセージも変更可能ですので、2択なら「SW命令」よりも「YN命令」を使う方が効率良いです。例えば、「あか/あお」、「けす/つける」等。

次に、SW命令。
SW命令は項目を選択するだけですので、SS命令やCF命令と組み合わせて使います。
記述:





SW,y,x,x2,y2,n

因数の説明:


















y,x選択ウィンドウ表示座標
x2ウィンドウ幅
y2ウィンドウ行数
n選択項目数

例:座標(2,2)に選択項目を7項目選択できるウィンドウを開き選択する。

































10,1,"だいじなものは?",2,"SW,2,2,6,7,7"
21,"いのち ",2
31,"おかね ",2
41,"きぼう",2
51,"ゆめ  ",2
61,"かぞく",2
71,"しごと",2
81,"なかま ",2

選択項目のメッセージ長は揃えてください。
今回は最長が4桁なので、4桁に揃えてあります。
ウィンドウの幅は、4+2の6で設定してあります。

今回のテーマ、選択とは関係ありませんが、SW命令だけでは使い物にならないので、活用するためにSS命令とCF命令も説明します。
まず、SS命令。
SW命令での選択値をイベントのフラグ値に設定します。(SW命令でキャンセル時は「0」が入ります。)
要するに、イベントのフラグ値を変数として扱います。
記述:





SS,e

因数の説明:






e設定するイベント


次に、CF命令。
イベントのフラグ値に応じたメッセージbヨ飛ぶ。
記述:





CF,e,m0,m1,m2,...

因数の説明:


















e参照するイベント
m0フラグ値0時のメッセージ
m1フラグ値1時のメッセージ
m2フラグ値2時のメッセージ

例:じゃんけんをする。(選択値をイベント5のフラグ値に設定し、イベント5のフラグ値を参照し、メッセージを表示する。)






































10,1,"じゃんけん…",2,"SW,2,2,5,3,3:SS,5:JP,5"
21,"グー",2
31,"チョキ",2
41,"パー",2
51,"ポン! グー!",2,"CF,5,9,6,7,8"
61,"あいこだ!",2
71,"まけた…",2
81,"かったー!!",2
91,"やらないのかよ…。",2


その他の命令も順次説明していきますね。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年09月21日

Laboratoryテーマ23「選択肢メニューを開いて、選択したい」その@




9_21_1.png

さて、今回はLaboratoryテーマ23「選択肢メニューを開いて、選択したい」その@です。
「ゲーム製作」カテゴリで制作中の3Dダンジョンロールプレイングゲームで利用する、ドラクエ風メッセージウィンドウで、メニューを開いて選択処理を実装します。

前回独自スクリプトを組み込むと書きましたが、今回のサンプルには既に多くの命令を組み込んであります。
その中で、メニュー選択を伴う命令、「はい/いいえ」(YN命令)と、「複数メニュー選択」(SW命令)を使ったサンプルとなっています。
「はい/いいえ」はそのまま、2択のメニュー選択となります。
「複数メニュー選択」は、任意数でのメニュー選択で、選択肢が多くウィンドウに収まらない選択肢は上下スクロールして表示されます。(上図)

詳しくはサンプルプログラムで機能デモをしていますのでご覧ください。

メッセージデータは、前回公開した「メッセージエディタ」を利用します。
9_21_4.png
スクリプト部の「YN」(185行)、「SW」(255行)命令の次のメッセージからが選択肢となります。
「YN」は、2メッセージ分(190、200行)、「SW」は任意メッセージ分(選択肢数11項目、260〜360行)となります。
注意事項ですが、選択項目の桁数は必ず合わせてください。(280行の「あらいぐま」が6桁で最長なのでそれに合わせてあります。)
この時「SW」のウィンドウ幅は、6+2(選択カーソル+空白)の8を設定してください。
「YN」は3桁固定です。

「MSELSMPL.BAS」【ダウンロード

メニュー選択の機能を紹介するデモが実行されます。
9_21_3.png

マシン語のサンプルです。
起動すると、MSELSMPL.BINを作成します。

「MSELSMPL.BAS」【ダウンロード

9_21_2.png
スクリプトの大半を実装済みですので、かなり長いサンプルとなっています。
今回のテーマのメニュー選択部分は、実質1,270行〜1,980行となっています。

前回説明した独自スクリプトで一部、引数を変更したものもありますので、また後日改めて説明します。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年09月15日

Laboratoryテーマ25「SCREEN2のグラフィックをFONTデータにして扱いたい」そのB




さて、今回はLaboratoryテーマ25「SCREEN2のグラフィックをFONTデータにして扱いたい」そのB、最終回です。
前回のツール、「SC2toFNT」でFONT化したSCREEN2画像をFONTで表示するサンプルです。

画面全部にFONTをズラーっと並べて表示して、上中下段にFONTデータを登録するだけです。
9_13_2.png

「CNVPRT.BAS」【ダウンロード

分割保存されたFONT「.FNT」ファイルのファイル名(「ALPHA1.FNT」の場合「ALPHA」)を入力すると、上段、中段、下段の3ファイルを読み、元のSCREEN2の画像を表示します。
但し、FONTなので自由に横移動などは可能です。
普段は、1つのFONTデータを上中下段すべてに登録するのですが、SCREEN1.5の仕組みが分かると、上段ステータス表示用FONT、中段ゲームFONT、下段メッセージ用文字FONTと分ける等、色々できると思います。
9_16_1.png
サンプルデータとして、上段「ALPHA1.FNT」、中段「ALPHA2.FNT」、下段「ALPHA3.FNT」が同梱してあります。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory
検索
<< 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コード