読者です 読者をやめる 読者になる 読者になる

STGの敵の出現パターンとか、敵の飛行曲線とか、弾幕とかを安直に書くための言語STGL作った

上のページ行って、「START」ボタン押せば遊べます。左に書いてあるのがSTGL。

大昔に弾幕を書くための言語としてBulletMLってのを作ったけど、これは弾幕専用なので、敵の飛行曲線とかは書けなかった。あとXMLなので記述が冗長。この辺がかねてから不満だった。

飛行曲線、もっといえばステージパターンも含めて、STGの基本動作を安直に書ける方法があればいいのになー、ってのは前から思ってたんだけど、なかなかうまい方法が見つからなかった。いろいろ考えた結果、とりあえず今回のSTGLっていうのに落ち着いた。これがベストではないだろうが、それなりに簡易な言語仕様でまあまあいろいろ書けるというバランスにしたつもり。

STGLの特徴としては、

  • 1関数 = 1アクター

なので関数呼び出し=アクターの生成。

  • アクターってのは敵の出現場所、敵、砲台、弾のどれか

動作の記述方法はどれでも同じ。@xとかいうアクター変数をいじるとアクターの状態が変わる。

  • 毎フレーム変数を書き換え続ける<=とかいう謎の演算子

「@x <= cos(@y * 0.001) * 0.4 + 0.5」と1回言っておけば、あとは@y座標の変化に応じて自動的に@x座標はcosで波打ってくれる。

0.1__0.9で0.1〜0.9の間の小数が、2..5で2〜5の間の整数が作れます。

  • アクター間通信はほとんどできないけど、子を消したり待機状態を解除したりはできる

ザコの早回しとか、ボスを早めに倒した後の追加ザコの補充とかは無理やり書けます。

といったところ。BulletMLと比べると変数とか演算子とかいろいろ書けるようになってしまっているので、DSLとしての面白味は若干低め。論理演算はほんとは入れたくなかったんだけど、これ無いと自機の反対側から敵が出現するとか書けなかったので、しょうがなく入れた。

BulletMLの時はプロギアっぽい弾幕がそこそこ実現できるってのが目標だったけど、STGLはスターフォースゼビウスっぽいザコがそこそこ実現できるのを目指してます。今の言語仕様でたぶん大体書けると思うんだけど、どうかなあ。ゾシーとかは厳しいかなあ。