2024年03月31日
【ゲーム制作】面クリア型アクションゲーム 第1回
面クリア型アクションゲーム 第1回です。
どんなゲームにするのかのアイデアを考えていきます。
いくつかのアイデアを列挙します。
・平面迷宮の中を移動
・じゃんけん要素を入れる
・落ちているエサを全部取ると面クリア
列挙したアイデアを基に、ゲームとして成立するように肉付けしていきます。
・敵とぶつかった時、じゃんけんで勝っていれば敵を倒せる
・倒した敵は、しばらくすると復活する
・敵を倒すと、自分の手が「グー」→「チョキ」→「パー」の順で切り替わる
敵の動きなど、ある程度考えておかないとゲームとして成立しないくらい簡単になってしまったりします。
次回は、このルール(ゲームシステム)を基に詳細設計をします。
2024年03月30日
面クリア型アクションゲーム
製作第3作目決めました。
「面クリア型アクションゲーム」に決定します。
最近面クリア型のアクションゲームなんてプレイしたことがないので、参考ついでに過去のMSXの面クリア型のアクションゲームを調べてみる…。
…なんか、凄くノスタルジックな気分になる…。
気を取り直してアクションゲームと言う事で色々案を考えたけど、なかなか良いアイデアが浮かばない。
思いついてもゲームにならないような、簡単なものばかり…。
なんとか「じゃんけん」とかの別要素を取り入れて、遊べるバランスのゲームに仕上げてみます。
何と言っても面クリア型の物は、単純なだけにゲームバランスが重要。
簡単すぎても難しすぎてもダメ。
正直ゲームバランスを整えるのは苦手なんですが、頑張ります。
この作品にLaboratoryで扱った「水平ライン4枚(MSX2は8枚)を超えてSPRITEを表示させたい」の機能と、先日ツールとして制作した「BGM演奏ルーチン(通常版)」を載せます。
私の予想では製作期間そんなに掛からないかなと思っています。
2024年03月29日
作品?PTETRIS-SPECIAL
音源を「MuSICA」から自作「BGM演奏ルーチン(通常版)」に切り替えたことにより、公開できるようになりました!
今回は本家「テトリス」のルールを把握して制作しました。
ブロック削除時の演出も派手にしています。
ブロックの速度が上がった時の横移動の処理方法など、本家の処理がどうやっているかまでは不明ですが、「それらしく」はしたつもりです。
▲ユーザーフレンドリーな落下位置案内ガイド付き
▲4ライン消去達成時の派手な演出
■主な新テクニック
・4ライン消去達成時の派手な演出
・ユーザーフレンドリーな落下位置案内ガイド
・BGM演奏ルーチン(通常版)利用によるBGM演奏
・4ライン消去達成時の派手な演出
・ユーザーフレンドリーな落下位置案内ガイド
・BGM演奏ルーチン(通常版)利用によるBGM演奏
今回は本家「テトリス」のルールを把握して制作しました。
ブロック削除時の演出も派手にしています。
ブロックの速度が上がった時の横移動の処理方法など、本家の処理がどうやっているかまでは不明ですが、「それらしく」はしたつもりです。
▲ユーザーフレンドリーな落下位置案内ガイド付き
▲4ライン消去達成時の派手な演出
タイトル
『 テトリスSPECIAL 』
作品??
17
内容
上から落下するブロックを横移動・回転させて上手く積み、横一列ブロックで埋まったらその列は消えます。次のブロックが落下できなくなったらゲームオーバーです。
操作方法
起動し、しばらくしてタイトルが表示されたら、Aボタンでゲーム開始
十字キーの「←」、「→」で、ブロックを左右に移動
Aボタンで、ブロック落下
Bボタンで、ブロック回転対応機種
MSX1、MSX2、MSX2+
製作年
1990年
ライセンス
テトリスはザ・テトリス・カンパニーの登録商標です。
※ゲーム内のキャラクタ、音楽は制作当時の物です。
公開前提に製作していないため、雑誌等から流用している物もあるかも知れませんので、著作権侵害の恐れのあるものは、ご連絡をお願いします。2024年03月28日
過去製作ゲームの「MuSICA」入替
「BGM演奏ルーチン(通常版)」が完成しましたので、早速、過去作品の「MuSICA」と入れ替えてみます。
そういえば「BGM.BIN」、深く考えずに開始アドレスを&HCA00にしたけど、過去作品の「.BIN」のアドレスとダブらないかな…?
過去作品の「.BIN」ファイルはソースが既にないのでアドレス変更は無理です。
まぁ、その時は「BGM演奏ルーチン(通常版)」の「BGM.BIN」のアドレス変えるしかないか…、そんな手間でもないし。
では、作業開始。
「MuSICA」ディスクに入っているMMLデータを「MMLコンパイラ(通常版)」に登録します。
元々大きくないデータなので、すぐに登録出来ました。
因みにファミコン版と同じ「トロイカ」です。(曲の著作権は切れているので問題ないはず…。)
登録が終わったらコンパイル。
コンパイルに時間が掛かりそうなので、裏技。
「BlueMSX」の「オプション」-「エミュレーション」と開きます。
真ん中にある「スピード」のつまみを、一番右側に持っていきます。
これで、「BlueMSX」の内部速度が10倍になります。
あっという間に、コンパイルが終わりました。
内部速度を元に戻します。
(因みに、わざわざ設定変更せずとも「左SHIFT」+「F9」を押している間、最速化します。)
次に、過去作品のメインプログラムを開いて、「MuSICA」関連の場所を修正します。
10行の「CLEAR」文の&HCE00が、「MuSICA」領域だけの確保なので全マシン語領域分(&HC000)に広げておきます。
70行の「DEFUSR」文の1、2、3が「MuSICA」のそれぞれ「初期設定」、「演奏開始」、「演奏終了」なので、これを「BGM演奏ルーチン(通常版)」のものに変更。
100行のPSG初期化部分は全クリアとSOUND7の設定のみとする。
最後、50000行が、「MuSICA」初期化と、演奏開始、50100行が演奏終了なので、こちらも「BGM演奏ルーチン(通常版)」のものに変更。
以上。
意外と変更箇所少ない。
変更後がこちら。
3チャンネル分のBGMデータ格納アドレスをワークにセットする必要があります。
変更簡単でした。
では、テストプレイ。
おー、FM音源「トロイカ」からPSG「トロイカ」に変わったが、問題なく演奏されました。
あれ? ブロックが落下した時の効果音が付いてる?
今更ながら「MuSICA」で演奏中に、PSGで効果音を上手く鳴らせていなかったようです…。
逆に、効果音鳴っていなかったので、効果音ないのかと思い3重奏でBGM作ってしまいました。
折角3重奏にしたので、今回効果音は無しとして、そのまま行きます。(効果音あっても落下した時の「ターン」と言う音のみなのであまり意味なし。)
因みにBGM演奏、「MuSICA」ではFM音源5重奏でした。(そこから3音抜き出しました。)
次回公開します。
そういえば「BGM.BIN」、深く考えずに開始アドレスを&HCA00にしたけど、過去作品の「.BIN」のアドレスとダブらないかな…?
過去作品の「.BIN」ファイルはソースが既にないのでアドレス変更は無理です。
まぁ、その時は「BGM演奏ルーチン(通常版)」の「BGM.BIN」のアドレス変えるしかないか…、そんな手間でもないし。
では、作業開始。
「MuSICA」ディスクに入っているMMLデータを「MMLコンパイラ(通常版)」に登録します。
元々大きくないデータなので、すぐに登録出来ました。
因みにファミコン版と同じ「トロイカ」です。(曲の著作権は切れているので問題ないはず…。)
登録が終わったらコンパイル。
コンパイルに時間が掛かりそうなので、裏技。
「BlueMSX」の「オプション」-「エミュレーション」と開きます。
真ん中にある「スピード」のつまみを、一番右側に持っていきます。
これで、「BlueMSX」の内部速度が10倍になります。
あっという間に、コンパイルが終わりました。
内部速度を元に戻します。
(因みに、わざわざ設定変更せずとも「左SHIFT」+「F9」を押している間、最速化します。)
次に、過去作品のメインプログラムを開いて、「MuSICA」関連の場所を修正します。
10行の「CLEAR」文の&HCE00が、「MuSICA」領域だけの確保なので全マシン語領域分(&HC000)に広げておきます。
70行の「DEFUSR」文の1、2、3が「MuSICA」のそれぞれ「初期設定」、「演奏開始」、「演奏終了」なので、これを「BGM演奏ルーチン(通常版)」のものに変更。
100行のPSG初期化部分は全クリアとSOUND7の設定のみとする。
最後、50000行が、「MuSICA」初期化と、演奏開始、50100行が演奏終了なので、こちらも「BGM演奏ルーチン(通常版)」のものに変更。
以上。
意外と変更箇所少ない。
変更後がこちら。
3チャンネル分のBGMデータ格納アドレスをワークにセットする必要があります。
変更簡単でした。
では、テストプレイ。
おー、FM音源「トロイカ」からPSG「トロイカ」に変わったが、問題なく演奏されました。
あれ? ブロックが落下した時の効果音が付いてる?
今更ながら「MuSICA」で演奏中に、PSGで効果音を上手く鳴らせていなかったようです…。
逆に、効果音鳴っていなかったので、効果音ないのかと思い3重奏でBGM作ってしまいました。
折角3重奏にしたので、今回効果音は無しとして、そのまま行きます。(効果音あっても落下した時の「ターン」と言う音のみなのであまり意味なし。)
因みにBGM演奏、「MuSICA」ではFM音源5重奏でした。(そこから3音抜き出しました。)
次回公開します。
2024年03月27日
MMLコンパイラ(通常版)活用方法
「MMLコンパイラ(通常版)」のディスク内に同梱されている「BGM.BIN」(BGM演奏ルーチン(通常版))を活用することで、制作中のゲームにBGMを付けることが出来ます。
走査線割込み中に演奏しますので、BASICプログラム実行中でも問題なく鳴ります。
「MuSICA」などの高機能な音楽演奏ルーチンとは異なり、お手軽ルーチンなので非常に軽いのが特徴です。(「BGM.BIN」の容量は543バイト(走査線割り込み処理88バイト、音楽演奏処理328バイト、BGM開始アドレス格納エリア15バイト、機能拡張予備105バイト))
このサイズでMSX標準MML同等のBGMが演奏可能です。(因みに「MuSICA」の「BGM.BIN」は4,072バイトあります。)
サンプルプログラムを用意しました。
【 ダウンロード 】
実質1,000行以下の部分となります。
「BGM.BIN」」(BGM演奏ルーチン(通常版))を読込(1,010行)
PSG初期化(1,040行〜1,050行)
BGMデータ「MML.BGM」を読込(2,510行)
BGMデータ格納アドレスを設定(2,511行〜2,512行、2,610行〜2,630行)
演奏曲?b?&HE023に設定(2,530行)
走査線割り込み開始(演奏開始)(2,540行)
:
<この間に自由にプログラムを組む>
:
走査線割り込み終了(演奏終了)(2,590行)
終了(2,600行)
以上、簡単です。
2024年03月26日
【ツール制作】MMLコンパイラ(通常版) 公開
『基本操作』
プログラムを「LIST」表示します。
プログラム最初にあるDATA行部に、作成したMMLをチャンネル毎に登録してください。
Aチャンネルの最後には「P1」、Bチャンネルの終わりには「P2」、Cチャンネルの終わりには「END」を入れてください。
登録が終わったら「RUN」実行。
BGMデータを書き出すファイル名(デフォルト:「MML」)と、データの先頭アドレス(デフォルト:「&HC000」)を入力して下さい。
「Now Compile…」と表示されコンパイルが開始します。
Aチャンネル、Bチャンネル、Cチャンネルの順でコンパイルされ、全てのチャンネルのコンパイルが完了したら「All Complete」のメッセージと、各チャンネル毎のBGMデータの開始と終了アドレスが表示され、コンパイルされたBGMが演奏されます。
演奏終了は「スペースバー」を押してください。
オールBASICですので、MMLデータの大きさによっては、完了までに時間を要します。
『MML仕様』
MSX標準のMML仕様に、「N」コマンド以外ほぼ準じています。
但し、テンポのみ「テンポずれ」回避のため、設定値に近いテンポずれしない値に強制変更します。
テンポずれしないテンポ値
36
40
45
48
50
60
64
72
75
80
90
96
100
120
125
128
144
150
160
180
192
200
225
240
250
256
300
360
450
※例えばT210を設定すると、一つ下のT200に変更されます。
【音階】
C
D
E
F
G
A
B
ド
レ
ミ
ファ
ソ
ラ
シ
【半音】
半音下げる時は「 -」、半音上げる時は「 +」を音階に付けます。
【長さ】
全音符を「 1」として、64分音符「 64」まで使えます。
音階に付けます。
デフォルトの長さ(「L」コマンド設定値)なら付ける必要なし。
【付点音符】
長さにピリオド「 .」を付けると付点音符となり長さを半分伸ばします。
(4分音符に付けると、4分音符+8分音符になる。)
4段階まで可。(「 ....」4分音符+8分音符+16分音符+32分音符+64分音符)
【書式例】
C+4
D
A-2.
F.
【コマンド一覧】
コマンド
意味
T
テンポを設定する。(但し、テンポずれしない近いテンポに強制変更)【例】T225
※注:「T」を設定した後には必ず「L」をしてください。V
ボリュームを設定する。(0〜16)16はエンベロープ【例】V13
)
ボリュームを1上げる。
(
ボリュームを1下げる。
O
オクターブを設定する。(1〜8)【例】O2
>
オクターブを1上げる。
<
オクターブを1下げる。
L
デフォルトの音の長さを設定する。(【長さ】、【付点音符】参照)【例】L4
R
休符。(【長さ】、【付点音符】参照)【例】R4.
S
エンベロープ波形を設定する。【例】S3
M
エンベロープ周期を設定する。【例】M15000
※エンベロープ周期設定は全チャンネル共通です。Z
ノイズ周波数を設定する。(0:OFF)【例】Z15
※ノイズ周波数は全チャンネル共通です。※コマンドの詳細はMSXのマニュアルを参照ください。
【BGMデータファイルレイアウト】
1音(3バイト)
2音(3バイト)
...
最後
音程下位8ビット
音程上位8ビット
長さ
音程下位8ビット
音程上位8ビット
長さ
...
FF
コマンドデータレイアウト(上図の音と音の間に入る。)
「V」「S」「Z」
(2バイト)「M」(3バイト)
「V」&HFC
「S」&HF8
「Z」&HFB設定値
&HF7
設定値下位8ビット
設定値上位8ビット
2024年03月25日
【ツール制作】MMLコンパイラ(通常版) 第4回
MMLコンパイラ(通常版) 第4回です。
「MMLコンパイラ(通常版)」と「BGM演奏ルーチン(通常版)」のバージョンアップ順調に進んでいます。
今回追加した機能「T」、「V」、「(」、「)」、「S」、「M」、「Z」に対応しました。
「T」、「(」「)」はBASIC部のみでの対応です。
ついでに、今まで1チャンネル分のルーチンが小さかったこともあり、A、B、C、3チャンネル分そのままルーチンを組み込んでいましたが、機能追加で1チャンネル分が大きくなることから、1つのルーチンを3チャンネル分ループさせることにします。
因みにこちらが、今までの「BGM演奏ルーチン」3チャンネル分。
1チャンネル分のルーチンが小さいですが、音を鳴らすだけならこれで十分でした。
「MMLコンパイラ(通常版)」BASIC部。
「簡易MMLコンパイラ」への追加分です。
まずは機能追加した各コマンド「M」(エンベロープ周期)、「S」(エンベロープ波形)、「Z」(ノイズ)、「V」(ボリューム)対応です。
次は「T」(テンポ)対応。
最後に「テンポずれ」しないテンポへの強制変更をしています。(790行〜)
1分間の走査線割り込み発生回数3,600から、テンポを割って求めます。
「付点音符」も4段まで可能とします。
小数点以下を足していき、繰り上がったところで音長に「1」加えます。
テンポへの強制変更データ設定。
A・B・Cチャンネル3チャンネル分ループします。
コンパイル終了後、演奏開始します。
「BGM演奏ルーチン(通常版)」マシン語部。
まずはいつもの走査線割り込み処理。
次に曲を切り替えるための選曲処理。
そして、3チャンネル分ループするよう改良したロジック。
上にある今までの「BGM演奏ルーチン」と比べれば、長くなったのが一目瞭然。
コメントのある場所で、それぞれのコマンドの処理をしています。
最後の音階をPSGに送るとき(680行〜)、同時にボリュームとエンベロープ波形も送ることでエンベロープ対応にしています。
このルーチンならノイズもエンベロープもBGMデータから設定できるので、効果音も自由に鳴らせます。
最後、BGMデータの開始アドレスを格納するワークエリアです。
では、次回公開します。
2024年03月24日
【ツール制作】MMLコンパイラ(通常版) 第3回
MMLコンパイラ(通常版) 第3回です。
「MMLコンパイラ(通常版)」制作進めていますが、製作中にいくつか「ん?」と思う事があったので、覚書として記載します。
まず、エンベロープ周期について。
私はMSX標準のMMLについて詳しくないのですが、MSXでは設定できるエンベロープ周期は1つということでいいんですよね?
過去に制作した「MMLコンパイラ(高機能版)」は「@」コマンドが使えたため、「S」、「M」コマンドは使えなかったこともあり、エンベロープに関しては調べたこともなくほぼ無知です。(自作ゲームでも爆発音くらいにしか使っていなかったので…。)
PSGの機能的にSOUND11と12しかないので、どれかのチャンネルで切り替えたら、全チャンネル連動して変わりますよね?
もし、チャンネル毎にエンベロープ周期設定できるのであれば、どこへ記録しているのかが不明です。
どなたかご教授ください。
ひとまず「MMLコンパイラ(通常版)」では、エンベロープ周期は1つとします。
どれかのチャンネルで切り替えたら、全チャンネル連動して変わります。
次に、記載省略について。
MSX標準のMMLでは一部コマンドで省略が許可されています。
「O」(オクターブ)コマンドで「O」とだけ記載すると、「O4」になるようです。
あと、「R」(休符)は「L」(音長)と連動せず、「R」とだけ記載すると「R4」になるようです。
こちらも私がMSX標準のMMLについて詳しくないので、何が省略出来て、省略すると何になるのかいまいち不明で、すべて試すわけにもいかないので、「MMLコンパイラ(通常版)」では、省略をサポートしません。
省略は「C」〜「B」(音階)の後の音長だけとします。
「R」の省略も可能ですが、音階同様「L」と連動します。(「L8R」なら、8分休符となります。)
2024年03月23日
【ツール制作】MMLコンパイラ(通常版) 第2回
MMLコンパイラ(通常版) 第2回です。
さて、「MMLコンパイラ(通常版)」で「T」(テンポ)コマンドが扱えるようにします。
MSXに限らず「音楽演奏ルーチン」を制作する時、必ず問題になる「テンポずれ」。
過去に制作した「MMLコンパイラ(高機能版)」でも相当悩みましたので、よく覚えています。
今更ながら、テンポは1分間に4分音符を何回鳴らすかの設定です。
1分間の走査線割込み発生回数(60分の1秒ごとに発生するので、1分間で3,600回。)をテンポで割った時に小数点以下が発生します。
しかし当然割り算ですので、割り切れない場合が存在します。
この時の割り切れない端数が「テンポずれ」の原因です。
具体的に説明しますと…、
小数点以下の処理は、小数点以下だけを足していき1を超えたところで音長に1加える等で、音長を調整します。
例えば「T40」の16分音符の音長は「22.5」となります。
それを2回鳴らす際、小数点以下は切り捨てられるので調整しないと「22」・「22」となります。
そこで、別途小数点以下をワークで足していき(「0.5」・「0.5+0.5」)、1を超えた2音目の音長に「1」を足して、「22」・「23」とします。
ただ、割り算の商がBASICで扱える小数点以下の桁(確か15桁)を超えるテンポが指定された場合に、加算しても小数点以下15桁目以降がおかしくなります。
例えば「T41」の32分音符の音長は「21.951219512195・・・」と割り切れない音長となり、2回加算しても正確な値にはなりません。
これが「テンポずれ」となります。
この「テンポずれ」を、何らかの方法で調整しなければなりません。
「MuSICA」をはじめ、各種音楽演奏ルーチンは、当然なんらかの処理を行っています。
例えば1分間の総音長を音符側で算出し、1分演奏したらその時残っている端数と総音長で調整する。など、方法はいくつか考えられます。
しかし、元々私は「T」コマンドがなぜあんなに細かく設定できるのか不思議でした。
1テンポの違いを聴き比べずに感じ取れる人がどれだけいるのだろう…。
…と、いう事で「MMLコンパイラ(通常版)」では、テンポずれが発生しないテンポ(64分音符が小数点以下15桁までに割り切れるテンポ)に強制的に調整します。
例えば、「T41」と指定したら、一番近いテンポずれしない「T40」にデータ上強制的に変更します。
過去に制作した「MMLコンパイラ(高機能版)」もこの方式でした。
高機能版は、コンパイラもマシン語でした。
参考までに、マシン語での小数点以下の扱いは下図になります。
バイト数を増やせば増やすほど、より「1」に近づける事が出来ます。
「MMLコンパイラ(高機能版)」では、少数点以下の計算は確か3バイトでやっていたかと記憶しています。