BulletML | ABA Games |
BulletML ver. 0.21 | (c) 長 健太(ABA."Saba") |
Japanese
|
BulletMLがどんなものかを見たい方は以下へ。 (要Internet Explorer, Netscape Navigator 6)
ソースや言語の定義は以下からダウンロード。
はじめに |
|
シューティング落日の今日この頃、皆様いかがお過ごしでしょうか。
ゲームといったらシューティングゲームを指していた時代は、今は昔も昔、大昔。 最近のシューティングゲームへの風当たりの強さといったら半端じゃありません。 コンシューマー市場ではほぼ全滅状態、かろうじてアーケード業界で細々と生き延びている惨状です。
細々ですが、最近のアーケードでのシューティングは良作ぞろいです。 かすりによるレベルアップで痛快なゲーム展開を実現した サイヴァリア、 リフレクトフォースによる新次元の稼ぎを体現した ギガウィング2、 芸術的な弾避けを楽しめる彩京系シューティングの極め ドラゴンブレイズ、 多彩を通り越して異彩を放つ敵の多種多様な攻撃が魅力 プロギアの嵐、 などなど。
しかし悲しいかな、これらの最高に楽しいシューティングも、 ゲーセンのすみにひっそりと置かれ、格闘ゲーや音ゲーに追いやられるのをおびえて待つ状態です。 いや、それどころがゲーセン自体の存続も昨今危ういです。 シューティングゲームの生命線はゆらぎまくりです。
そこでちょっと思い立ちました。
保存しなくては。
弾幕を。
シューティングゲームが消えてなくなってしまう前に、 この芸術的な弾幕の数々を保存しなくては、と。
BulletMLとは |
|
謎の前段はあまり気にしなくてもいいです。
BulletMLは、いわゆる昨今の弾幕シューティングにおける 弾幕を定義するための言語です。以下のような特徴があります。
使い方 |
|
まず BulletMLアプレットのページ をご覧ください。 (注意: Internet ExplorerまたはNetscape Navigator 6でご覧ください。NN 4.7では動作しません。) そしてサンプルをちょいと動かしてみてください。
だいたい雰囲気はつかめましたか? 先ほどのページで右に書かれているのがBulletMLで書かれている弾幕記述です。
BulletMLの書き方を説明するため、簡単な例を書いてみましょう。 右上のプルダウンメニューからtemplateを選んでDocumentをいったんクリアし、 以下のように書いてみます。 方向はVerticalにして縦シューモードにしましょう。
<?xml version="1.0" ?> <!DOCTYPE bulletml SYSTEM "http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/bulletml.dtd"> <bulletml xmlns="http://www.asahi-net.or.jp/~cs8k-cyu/bulletml"> <action label="top"> <fire> <bullet/> </fire> </action> </bulletml>
スタートを押すと、自分を狙った弾が飛んでくると思います。 この動作は<action label="top">と</action>の中に書いてあります。
action要素の中には弾幕発射のアクションを書きます。 この場合はfireアクション、つまり弾を1つ発射するというアクションが記述されています。
fireアクションの中では、どの弾をどの方向にどのくらいの速度で撃つか、 ということが記述できます。この例では方向と速度は省略、弾の種類も指定していません。 こうすると、デフォルトの自機を狙う弾が発射されます。
もう少しこった発射のしかたをしてみましょう。
<?xml version="1.0" ?> <!DOCTYPE bulletml SYSTEM "http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/bulletml.dtd"> <bulletml xmlns="http://www.asahi-net.or.jp/~cs8k-cyu/bulletml"> <action label="top"> <repeat> <times>100</times> <action> <fire> <direction type="sequence">23</direction> <bullet/> </fire> <wait>1</wait> </action> </repeat> </action> </bulletml>
action要素がちょっと複雑になってます。まず最初のアクションはrepeatです。 repeatアクションは、あるアクションを複数回繰り返すときに使います。 繰り返し回数はrepeat要素の中のtimes要素で、繰り返すアクションはaction要素で 指定します。 この例では繰り返し回数は100回、繰り返すアクションは fireアクションとwaitアクションです。
fireアクションでは先ほどはなかったdirection要素が加わっています。 direction要素は弾を撃つ方向を指定します。 direction要素にはtypeが指定できます。typeは以下の3種類があります。
この場合はsequenceですので、直前に撃った方向との相対方向を指定しています。 単位は度です。この場合は直前から23度ずれた方向に弾を撃ちます。
つぎのwaitアクションは、一定時間待つアクションです。 単位はフレームで、1フレームは約1/60秒です。
ここまでが繰り返すアクションです。これで
という動作を100回繰り返す動作が定義できました。 動かしてみると、ある場所からくるくる回転しながら弾をばらまく、 いわゆる回転砲台ができました。
BulletMLでは、弾の飛び方を定義することもできます。 以下のようにしてみます
<?xml version="1.0" ?> <!DOCTYPE bulletml SYSTEM "http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/bulletml.dtd"> <bulletml xmlns="http://www.asahi-net.or.jp/~cs8k-cyu/bulletml"> <action label="top"> <repeat> <times>100</times> <action> <fire> <direction type="sequence">23</direction> <bulletRef label="straight"/> </fire> <wait>1</wait> </action> </repeat> </action> <bullet label="straight"> <action> <wait>20+$rand*50</wait> <changeDirection> <direction type="absolute">180</direction> <term>10</term> </changeDirection> </action> </bullet> </bulletml>
撃ち方は変わってませんが、撃つ弾の定義、bulletがbulletRefに変わっています。 bulletRefは、その後ろのlabelでラベルづけされたbulletの要素を参照します。 この例だと、action要素の下にあるstraightラベルがついたbullet要素です。
bullet要素の中をみてみましょう。bullet要素の中にもアクションが書かれています。 最初はwaitアクションです。ここでは待つフレーム数の中に数式がかかれています。 このように、数を指定するところでは、数式を用いることもできます。 使えるのは四則演算と余りを求める%、括弧、0から1の間の乱数を発生させる$rand変数 などです。この例では20から70(20+50)のフレーム数待つように書かれています。
その次はchangeDirectionアクションです。このアクションはdirection要素で 指定された方向に弾を向けます。この場合はabsolute180度ですので、真下です。 その次のterm要素は、何フレームかけて方向を曲げるかを書きます。 この場合は10フレームかけて少しずつ下方向に弾を曲げます。
スタートしてみましょう。さきほどの回転砲台の弾が途中から下方向に変わって 落ちてきます。プロギアの2ボスっぽいですね。サンプルにもプロギア2ボス 最終形態のサンプルがありますので、そちらもあわせてご覧ください。
よりくわしい説明については以下をごらんください。
ダウンロード |
|
BulletMLのRELAX定義およびデモソフトウェアはフリーソフトウェアです。 以下からダウンロードできます。
活用事例 |
BulletMLの活用事例をご紹介。
謝辞 |
BulletMLではXMLモデルの定義に RELAX を、XMLドキュメントの操作用Javaクラスの生成に Relaxer を利用させていただいています。
ご意見、ご感想 |
ご意見、ご感想は、 cs8k-cyu@asahi-net.or.jp までお願いします。
■ | ABA Gamesトップページへ |