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

2023年07月21日

Laboratoryテーマを再追加!




6_2_1.png
「Laboratory」のテーマを再び追加しました。
この間から話題にしている三角関数を使った敵の移動を中心に5テーマ追加しました。










テーマ
16波状攻撃してくる敵を作りたい

p1.png
図のように左右(若しくは上下)に波打ちながら移動する敵の動きの作り方を考えます。







17放物線を描いて飛来する敵を作りたい

p4.png
図のように飛来し補物線を描くように撤退していく敵の動きの作り方を考えます。







18回転する敵を作りたい

p2.png
図のようにくるりと一回転する敵の動きの作り方を考えます。







19半円移動する敵を作りたい

p3.png
図のように横から現れ半円を描くように横に消えていく敵の動きの作り方を考えます。

これだけあれば、シューティングゲームはすぐに制作できると思います。
後はロジックの難しくない動き、例えば@直進、A直進+破裂16方向弾、Bじわじわと自機に寄って来る、C上から斜めに来て、弾撃って上へ撤退、D上から来て、倒されるまで弾を撃ちまくる、EX座標などが合ったら自機に向かって急速移動する等、何かの市販シューティングゲームで見たような動きを、いくつか追加すればOKです。

ちょっと変わり種で、こんなテーマも。






20大きなSPRITEで迫力あるゲームをしたい

MSXのSPRITEの機能で縦横倍表示が出来ます。
ただ16×16ドットのキャラクタを、単純に32×32ドットに引き延ばすだけなのでドットは粗く見えますが、迫力は間違いなし!
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年07月16日

Laboratoryテーマ15「任意サイズのFONTキャラクタを指定座標に表示させたい」




7_15_1.png

今回は、Laboratoryテーマ15「任意サイズのFONTキャラクタを指定座標に表示させたい」です。

MSXのテクニック的な事を紹介しているサイトを巡って感じたのですが、SPRITE関連の事はもの凄くしっかり説明されているところが多いのですが、FONTについてはパターン作成の説明は詳しいのですが、表示に関しては1文字表示するくらいのものしかありませんでした。(私が探せなかっただけかもしれませんが…。)
実際、巨大ボスキャラを実現しようとするとFONTを使うしかなく、できればそれを動かしたいですよね?

そこで、任意サイズのFONTキャラクタを指定座標に表示させるサブルーチンを公開します。
特に今回用に作ったわけではなく、元々自作ゲームに使っているサブルーチンを改良したものです。
(因みに、3DダンジョンRPGの壁や敵モンスターの描画もこのルーチンを使います。)
表示するキャラクタは下記【キャラクタコード表】のキャラクタコードで指定します。

【キャラクタコード表】























































































































































































































































































































上位4ビット
0123456789ABCDEF
下位4ビット0π 0@P`pスペード
1!1AQaqハート(トランプ)
2"2BRbrクラブ
3#3CScsダイヤ
4$4DTdt
5%5EUeu
6&6FVfv
7'7GWgw
8(8HXhx
9)9IYiy
A*:JZjz
B+;K[k{
C×,<L\l|
D-=M]m}
E.>N^n~
F/?O_o

※ BIOSの「CHPUT」ルーチンでは、&H00~&H1Fはコントロールキャラクタとなっています。

「あ」の場合は、上位4ビットを「9」、下位4ビットを「1」でキャラクタコードは「&H91」となります。

任意サイズのFONTキャラクタを指定座標に表示するサンプルです。

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

十字キー若しくは「←」「→」カーソルで、横16キャラ×縦16キャラを左右に動かすプログラムです。
7_15_2.png

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




































INOUT
B表示先X座標なし
C表示先Y座標
D横キャラ数
E縦キャラ数
HLキャラクタデータ先頭アドレス

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

7_15_3.png

プログラム長いですが、マシン語のサブルーチンとして必要なのは370行〜450行(&HC110~&HC14F)の64バイトです。
741行〜743行(&HC1F0~&HC1FF)で指定値を代入してサブルーチンコールします。
744行〜2,090行(&HC200~&HC5FF)が、左右2パターンアニメーションで計4パターン分のチャラクタデータです。(プログラムの半分以上がデータです。)




























変数アドレス内容
BF00速度カウンタ
BF01キャラクタX座標
BF02キャラクタ速度
BF03向き (0:← 1:→)
BF04アニメカウンタ
BF05ジョイスティック
BF06アニメパターン

では、今度こそは本当に、ここで一旦Laboratoryは中断して3DダンジョンRPGの制作に専念します。(2023年6月26日記事参照「開発案件広げすぎ…」)
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年07月13日

Laboratoryテーマ14「簡単にBGMを鳴らしたい」









 

このツールの上位版である、「MMLコンパイラ(通常版)Ver.1.1」を2024年3月26日に公開しています。

 

7_13_1.png
今回は、Laboratoryテーマ14「簡単にBGMを鳴らしたい」です。

やっぱりゲームを作る以上、盛り上げる為BGMは必須ですよね。
無音空間でゲームをプレイするのはなかなかキツイ。
と言う訳で、現時点で公開している自作ゲームで使われているレベルの、簡易的なBGM演奏ルーチンを公開します。
なお、BGMデータは下記レイアウトに合わせて作る必要があるので、音階を周波数データに変換して作らなくてはなりません。
しかし、流石にそれは大変なので、後日「簡易MMLコンパイラ」を公開します。
元々ツールとして制作しておらず、自分が使う用で万人向けに作られていませんでしたが、ツールとして公開するため色々改良しました。

【BGMデータレイアウト】


















1音(3バイト)2音(3バイト)...最後
音程下位8ビット音程上位8ビット長さ音程下位8ビット音程上位8ビット長さ...FF

【音階・周波数対応表】







































































































































オクターブ
12345678
音階CD5D6AF3571ACD66B351B
C#C9C64E327194CA653219
DBE75F42FA17DBE5F3018
D#B3C59E2CF168B45A2D16
EA9B54E2A7153AA552A15
FA02501281140A0502814
F#9734BA25D12E974C2613
G8EB47623B11D8F472412
G#86B43621B10D87432211
A7F23F91FDFE7F402010
A#7803C01E0F0783C1EF
B71438A1C5E371391CE

【長さ】


































音符長さ
全音符128
2分音符64
4分音符32
8分音符16
16分音符8
32分音符4
64分音符2


本格的なBGM演奏ルーチンになると、BGMデータ中にテンポやボリューム、エンベロープ、タイ、スタッカート、連符等のデータが追加されるため、BGMデータの作成が大変です。(因みに、タイ以降はMSX-BASICのPLAY文にはないコマンドですので、そもそも演奏できません。)
何より、データが膨大になります。
私はあまり自作ゲームのBGMに拘らない人でした。
「T(テンポ)やV(ボリューム)、S・M(エンベロープ)はゲーム開始前に設定しておけば良い。」=「演奏中に変更する必要はない。」という考えでした。
まぁ、今でもそう考えています。
と言うか、私はそんな大層な曲を作曲できません。
ゲーム開発後半でも簡易版で十分でしたが、一緒にゲーム制作していた仲間からASCIIの「MuSICA」を使うよう依頼され使い始めた経緯があります。
しかし、プログラムもBGMデータも膨大で、メモリ制約のあるなか苦労した記憶があります。

簡易BGM演奏ルーチンです。
サンプル曲として「かえるの合唱」が鳴ります。
変数を利用しているので、サブルーチンとしてアドレス変更する際は、そこの変更を忘れないように気を付けてください。

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

7_13_2.png
サンプルは、私が通常やっている通りルーチンを2つ並べて2重和音でBGMを鳴らし(B、Cチャンネル)、残りの1チャンネル(Aチャンネル)は効果音用です。
250行の変数U1にBチャンネルのBGMデータ先頭アドレス上位8ビット、D1にBチャンネルのBGMデータ先頭アドレス下位8ビット、U2にCチャンネルのBGMデータ先頭アドレス上位8ビット、D2にCチャンネルのBGMデータ先頭アドレス下位8ビットを代入して下さい。
因みに、処理が早すぎるので430行〜450行で時間稼ぎの無駄ループをしています。

「Bチャンネル」
460行〜520行(&HC028〜&HC057)






















変数アドレス内容
BF02演奏中アドレスカウンタ
BF03
BF04音長カウンタ
BF05BGMデータ先頭アドレス
BF06

「Cチャンネル」
530行〜590行(&HC058〜&HC087)






















変数アドレス内容
BF07演奏中アドレスカウンタ
BF08
BF09音長カウンタ
BF0ABGMデータ先頭アドレス
BF0B

3つ並べて3重和音もできますが、効果音を鳴らす際、効果音のチャンネルが鳴っている間フラグを立てて、フラグが立っている時はデータは読んでアドレスは先に進めるが、PSGは触らないと言った工夫が必要です。

では、次回はLaboratoryテーマ15「任意サイズのFONTキャラクタを指定座標に表示させたい」です。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年07月12日

Laboratoryテーマ13「「GRAPH」キーが押されたか調べたい」




今回は、Laboratoryテーマ13「「GRAPH」キーが押されたか調べたい」です。
こちらも簡単なので、サクッと説明。

ゲームのコントローラーとしてキーボードを使う時、ジョイスティックのBボタンに該当するキーとして、「GRAPH」キーが良く利用されます。
ジョイスティックのAボタンに該当するキーは間違いなく「スペースバー」と思われますので、その横にある「GRAPH」キーが押しやすいのでしょう。(私はそう。)

今回も前回紹介したBIOSに、リアルタイムなキーボード入力状況を得るサブルーチンがありますので、そちらの機能を紹介します。
ただ、前回の「Ctrl」+「STOP」ように「GRAPH」キーの押下だけを判定するBIOSではないので、少し知識が必要です。















ラベル名アドレス変化するレジスタ使い方
SNSMAT&H0141AF、C調べたいキーのある下表【キーマトリクス】の行をAレジスタに入れコールすると、Aレジスタの押されているキーに対応するビットが「0」、押されていないキーに対応するビットは「1」になる。

【キーマトリクス】





























































































































ビット
76543210
076543210
1+[@^-98
2BA_/><]*
3JIHGFEDC
4RQPONMLK
5ZYXWVUTS
6F3F2F1かなCAPSGRAPHCtrlSHIFT
7RETSELBSSTOPTABESCF5F4
8DELINSCLSSPACE
943210/+*
10.,-98765

※ 9〜10行はテンキーです。

例えば、「GRAPH」キーが押されたか調べたければ、【キーマトリクス】表の「GRAPH」キーのある行は「6」になるので、「6」をAレジスタに入れてコールすると、Aレジスタの第2ビットが「GRAPH」キーが押されていれば「0」、押されていなければ「1」になります。

これまでの私自作のゲームでも、それなりに使っています。
7_9_1.png
プログラムはBボタン(「GRAPH」ボタン)が押されたら下の処理へ、押されていなければ空欄に指定したアドレスへ飛びます。
押しっぱなしは、不可です。
変数は赤アドレス(&HE013)は、ジョイスティック
緑アドレス(&HE00D)は、Bボタン押し続け不可フラグです。
黄色がBIOSコール(&H0141)。
コール前の&H06が行aAコール後の&H04が第2ビット判定です。

では、次回はLaboratoryテーマ14「簡単にBGMを鳴らしたい」です。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年07月11日

Laboratoryテーマ12「「Ctrl」+「STOP」が押されたか調べたい」




今回は、Laboratoryテーマ12「「Ctrl」+「STOP」が押されたか調べたい」です。
Laboratoryの続きは3DダンジョンRPG完成後と言っていたのですが、マウス動かなくてストレスですので、気分転換も兼ねて追加した簡単なテーマを全部一気に。
現実逃避ともいう…。

マシン語を起動させると、プログラムが終了するまで中断させることは出来ません。
そこで、BASICと同じように「Ctrl」+「STOP」が押されたらプログラム中断するように、メインループに組み込んで使います。

今回は特に難しいことはありません。
ただ、そういう機能があることを知らないと、結構面倒臭いことをしないといけないので、機能を紹介します。

MSXには、どのMSXでも必ず動作するプログラムが作れるように「BIOS」(バイオス、Basic Input Output System)というサブルーチン群が用意されています。
そのBIOSに「Ctrl」+「STOP」が押されたか調べるサブルーチンが用意されています。
BIOSの使い方は簡単で、必要なデータを所定のレジスタに設定し、目的に応じたBIOSをコールするだけです。















ラベル名アドレス変化するレジスタ使い方
BREAKX&H00B7AFコールした時、「Ctrl」+「STOP」が押されていればCyフラグがセット、押されていなければCyフラグがリセットされる。


これまでの私自作のサンプルでも、当たり前のように使っています。
410行で、「Ctrl」+「STOP」が押されたか調べ、押されていればBASICに返ってきます。
7_14_1.png

では、次回はLaboratoryテーマ13「「GRAPH」キーが押されたか調べたい」です。
posted by J-JSOFT at 13:00 | Comment(0) | TrackBack(0) | Laboratory

2023年07月08日

Laboratoryテーマ追加!




6_2_1.png
突然ですが、「Laboratory」のテーマを追加しました。
あちこち色んなサイトを見てきましたが、「初心者には必要かな?」と思われるのにあまり紹介されていないロジックを「Laboratory」に4テーマ追加しました。
(まぁ、「初心者がいないのでは?」と言われればそれまでなのですが…。)
中には「Laboratory」のテーマとして挙げる程のものでもないのもありますが、他に紹介するカテゴリがないので取り敢えず「Laboratory」で。










テーマ
12「Ctrl」+「STOP」が押されたか調べたい

初心者がマシン語でしがちなのが「永久ループ」。
私もよくしました…。
ですのでこれは必須です。
メインループに組み込めば、いつでもどこでもプログラムを止められます。
当然ですが、暴走を止めるのは不可能です。







13「GRAPH」キーが押されたか調べたい

ゲームのコントローラーとしてキーボードを使う時、ジョイスティックのBボタンに該当するキーとして、「GRAPH」キーが良く利用されます。
その「GRAPH」キーが押されたかの調べ方です。
と言うか、キーボード全キーの押されたかの調べ方です。







14簡単にBGMを鳴らしたい

本格的でない、簡易BGM演奏ルーチンです。
ここまでに公開している自作ゲーム(作品10)までは、これに近い(もっと簡易)ルーチンでBGMを鳴らしています。
本格的になると、ドラムっぽいのを鳴らしたり、デチューンかけられたりしますが、そうなると今度はBGMデータの製作が大変になります。
なので、とりあえず「無音は寂しいから何か鳴らしたい。」という人向け。







15任意サイズのFONTキャラクタを指定座標に表示したい

意外と他のサイトで説明されていないのがこれ。
ボスキャラ表示など、大きめのFONTキャラクタを表示するサブルーチンです。
私が初心者の頃は大きなキャラクタ表示させるの大変だったんだけどなぁ…。(まぁ、力技で何とかなりますが…。)
BレジスタにX座標、CレジスタにY座標、Dレジスタに横キャラ数、Eレジスタに縦キャラ数、HLレジスタにキャラデータのある先頭アドレスを入れてコールすると、任意サイズのFONTキャラクタを指定座標に表示します。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年07月06日

Laboratoryテーマ9「32方向弾」そのB




7_8_1.png

Laboratoryテーマ9「32方向弾」そのB、最終回です。
Laboratoryテーマ8「32枚を超えてSPRITEを表示させたい(非走査線割込)」が未公開なので、敵と自機はFONTで作成しました。
敵はそれを動かしています。
(自機の上を敵が通ると、自機消えちゃいますけど気にしない…。)
動作は、十字キーの↑で4方向弾、→で8方向弾、↓で16方向弾、←で32方向弾を敵が撃ちます。
全弾空いている時にしか撃てません。

ロジック的には前回書いた通り、データは16バイト分しか用意していません。(&HC078~&HC087)
処理速度的には32方向弾の時はさすがに重いかな?
これは弾道計算で遅いのではなく、キャラクタ処理で遅くなっているのでやむ無しです…。

BASIC部分のサンプルプログラムです。

「32SMPL.BAS」【ダウンロード

7_8_2.png

スカスカですが、変数表です。
7_8_4.png

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

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

7_8_3.png

計算関係のサブルーチンは、すべて削除してあります。
弾のデータセットは、1,030行〜1,270行(&HC298~&HC317)までの128バイトです。
まぁまぁ短くできたかなと思います。

では、今度こそ本当に、ここで一旦Laboratoryは中断して3DダンジョンRPGの制作に専念します。(2023年6月26日記事参照「開発案件広げすぎ…」)
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年07月05日

Laboratoryテーマ9「32方向弾」そのA




さて、Laboratoryテーマ9「32方向弾」そのAです。

現在サンプルプログラム準備中です。
そこで今回は、データベース作成時のデータ順を説明します。
32方向弾のデータベースですが、データ配列を工夫することで、そのデータベースのまま16方向弾、8方向弾でも流用できます。
因みに16方向弾と8方向弾のデータ表です。
7_5_1.png

お気付きかと思いますが、8方向弾のデータは16方向弾のデータに完全に含まれています。
当然、16方向弾のデータは32方向弾のデータに含まれます。

という事は、弾にデータをセットする順番は決まっていないので、データベースを8方向弾、16方向弾、32方向弾の順に登録してやればいいのです。
7_5_2.png
実際のデータベース登録順です。
8方向弾の場合は先頭から2弾分、16方向弾の場合は4弾分を読み込み、4エリア分セットすれば良いという事です。

次回サンプルを用意します。
今回の実践もかねて、十字キーの↑で4方向弾、→で8方向弾、↓で16方向弾、←で32方向弾を撃てるサンプルにしますね。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年07月03日

Laboratoryテーマ9「32方向弾」その@




さて、今回はLaboratoryテーマ9「32方向弾」です。
「あれ? 3DダンジョンRPGが終わった後じゃなかったっけ?」と思われた方、正解。
実は私のMSX仲間(プログラマーに非ず)から久しぶりに連絡があって、「先日の16方向弾の動画面白かった! 32方向弾やって!」と、要請されました。
思わぬYouTube効果に驚き。
というか、貴方プログラミングしないでしょう?
経緯を説明し、「3DダンジョンRPGが終わってからね。」と説明するも、「誰も見てないブログだろ?」と言われ、ショックのあまり了承してしまいました…。
まぁ確かに、反応があった方を優先したいですが…。

一応、「32方向弾は自機・敵含めSPRITE同時表示32枚以上だから、せめてLaboratoryテーマ8「32枚を超えてSPRITEを表示させたい(非走査線割込)」の後で。」と抵抗はしましたが、「誰も見てないブログだろ?」とダメ出しされ、観念しました…。

余りにも唐突だったので、サンプルプログラム何も手を付けていないので、今回は考え方のみ。
そう、前回書いた「なんちゃって弾道計算」です。(2023年6月7日記事参照「しまった」)

いくらマシン語とは言え、32回も同時に三角関数を使った弾道計算するとなると、さすがに重くなります。(やった事ないから真偽不明ですが…。)
Laboratoryテーマ6「自機に向かって飛んでくる敵弾」は、自機と敵の位置が常に不定の為、計算して算出するしかないのですが、32方向弾は飛んでいく方向と速度は決まってるんです。
という事は、事前に移動量と方向をデータベース化しておけば、わざわざ時間のかかる計算をしなくてもいいのです!

因みに、32方向弾は一弾当たりの角度が、360°÷32方向=11.25°となります。
角度に対応した長さを事前に三角関数で計算しておきます。
データ容量は、32方向のX・Y移動量なので、32方向×2(X・Y)=64byteで済みます。
7_3_1.png
ここで、察しの良い方は気付かれたと思いますが、符号の変化と、X・Y移動量が逆転しているだけで90°ずつ同じ値なのです。
この符号は、Laboratoryテーマ6「自機に向かって飛んでくる敵弾」の時の4つにエリア分けした符号と同じです。
それらを利用して実際に用意するデータは64byte÷4エリア=16byte分用意し、32弾÷4エリア=8弾毎に値とエリアをセットしてやれば良いのです。
7_3_2.png
と、言う訳で「なんちゃって弾道計算」は、データベースを読んで弾のX・Y移動量と、エリアをセットするロジックとなります。
弾道計算と言いながら、計算すらしないロジックです。
それでも、これだと非常に早いし、ロジックも簡単です。

次回サンプルを用意します。
posted by J-JSOFT at 00:00 | Comment(0) | TrackBack(0) | Laboratory

2023年06月30日

Laboratoryテーマ6「自機に向かって飛んでくる敵弾」そのB




6_29_1.png

Laboratoryテーマ6「自機に向かって飛んでくる敵弾」そのB、最終回です。
前回は、BASICで組んだサンプルを公開しました。
今回はBASICで組んだサンプルを基に、マシン語に組み直しました。
考え方とロジックはそのまま、マシン語化しただけです。

ただ、まったくBASICと同じだとあまり面白くないので、SPRITEとFONTを設定し、キャラクタを8×8ドットを16×16ドットに変更。
さらに、敵が弾を16発撃つようにしました。
さすがマシン語、これだけ弾出しても速度的には余裕ですね。(これでもまだウェイト負荷掛けてあります。)

BASIC部分のサンプルプログラムです。

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

6_29_4.png

変数表です。
昔は手書きでしたが、便利な世の中になったものです…。
6_29_5.png
因みに昔製作途中で終わった、「SPACE WARS」と言うシューティングゲームのSPRITEを流用しています。
ロジックも、そちらから必要な部分だけ抜き取り加工しています。

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

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

6_29_3.png

「マシン語の割り算」の8ビットで計算しきれず、「マシン語の割り算(16ビット版)」に変更した時に、処理速度が遅くなると書きましたが、これだけ弾出してても、特に処理速度的な問題はなさそうです。
今回の主な用途はシューティングゲーム等の弾道計算用なので、弾幕シューティングでもない限り弾道計算がそこまで頻発することもないので、大して問題にならないと思います。
(MSXではSPRITEの制限(横4個(MSX2は8個)以上でチラつく、同時表示32個まで(走査線割込み使えば対応可ですが))の為、弾幕シューティング自体を私は見たことがない…。)

因みに、ここまでできれば、4方向弾、8方向弾、16方向弾はすぐできます。
6_29_2.png
簡単なのでちょっと撃ってみた。


では、前回記事で書いた通り、ここで一旦Laboratoryは中断して3DダンジョンRPGの制作に専念します。(2023年6月26日記事参照「開発案件広げすぎ…」)

再開後は、Laboratoryテーマ7「水平ライン4枚(MSX2は8枚)を超えてSPRITEを表示させたい」です。
MSXのSPRITEの弱点に、同一水平ライン上に4枚(MSX2は8枚)以上並ぶと、それ以上のSPRITEが表示されなくなると言った仕様があります。
その対処方法として、市販ゲームではキャラクタをチラつかせて、完全に見えなくなるのを防いでいます。
このテーマは、そのやり方です。
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コード