きっかけ
作ったきっかけは、最近買ったウイイレ2020の操作が、ちっとも頭に入らなかったからです。。。
一応ゲーム内にマニュアルがあるんですけど、文字とか矢印で説明されても、ピンと来ないんですよね。。。
そこで思いついたのが「ゲームの操作をぱぱっと記述したら、パッド上の動きをアニメーションを再生しつつ、操作ログも出してくれる」みたいなものがあったら、理解が捗るかなあ〜?ということです。
というわけで作ったのが、combo-scriptと、combo-playerです。
例えばcombo-scriptで昇龍拳を記述して、combo-playerで再生するとこんな感じになります。
その他、色々なコマンドについては、デモサイトを見てください。
上のデモサイトでは、ウイイレの他に、スト5とか鉄拳のコマンドとかも追加しておきました。
メニューの「Games」から選択できます。
コマンド部分は編集可能になっているので、色々と書き換えて遊んでみてください。
combo-script
combo-script
は、ゲーム操作を記述するための言語です。こんな風に記述します。
コナミコマンド
up, up, down, down, left, right, left, right, A, B
昇龍拳(十字キー操作で記述)
right, down, (right, down), punch
(right, down)
は右と左を同時押し(つまり右下)という意味です。
一般にボタンの同時押しは(X, Y, Z...)
のように記述します。
昇龍拳(スティック操作で記述)
setL(0), moveL(0, 90), rotateL(90, 45), punch
これは左スティックを0度(真右)に方向け、そこから真下に動かし、更にそこから45度(右斜め下)の位置まで回転させ、最後にパンチボタンを押す、という意味です。
setL
, moveL
, rotateL
の引数は、傾ける先の角度ですが、この角度は時計回りであることに注意してください。時計回りなので、90度は真上ではなく、真下です。
ウイイレ、コントロールシュート
R2 { square }
上の構文はHolding Syntax
と言って、X { Y, Z, ... }
などと書くと「X
の操作をしながらY
,Z
」という意味になります。
なので上のコマンドは
- R2を押しながら□ボタン
- 終わったらR2を離す
という意味になります。
combo-script(言語仕様)
詳しくは公式サイトを見てほしいのですが、大雑把に説明すると、
- ボタンの押下、押しっぱなし、同時押し、各種スティック操作などを抽象化した言語です。
- 特別なプログラミング知識がいらないので、誰でもコマンド部分を記述できます。
- 矛盾した操作はコンパイル時にエラーが出ます(押し込んでいる最中のボタンを再び押すとか、左と右を同時に押すとか、色々)。
- 押下についてはpushDown, pushUpを個別に扱う方法もあります。
- プラグインで拡張することができます。
- 定義済みの関数(rotateLとかmoveLとか色々)以外のシンボル名は、ユーザー定義のボタン名、もしくはユーザー定義のプラグイン関数として解釈されます。
- 例えば
punch
と書いたら、ユーザー定義のpunch
ボタンがあって、それを押して離す、という一連の動作として解釈されます。つまり、punch
という名前のボタンをどう解釈するかは、combo-scriptを組み込む実装者に任されます。 - 関数も同様です。例えば
foo(1,2)
と書いた場合、そういう定義済みの関数はないので、ユーザー定義のプラグイン関数とみなされます。そして、実際の動作はcombo-scriptを組み込む実装者に任されます。 - つまりボタン名も関数名も、それを解釈するのはプレイヤー側の仕事で、combo-script側は名前にルールや制限を設けません。コンパイラ側が判断するのは、それがボタンか、関数か、そしてそれらの動作は、どういう文脈で押されたか、ということだけです(通常押し、同時押し、押しっぱなしなど)。
- というわけで、例えばパッド右側にある4つのボタンなどは、プレステ風にtriangle/circle/cross/squareと定義してもいいし、Xbox風にY,B,A,Xと定義してもいいです。
- ただしボタン名を数字から始めることはできません。つまり
button1
はいいけど、1button
は駄目。 - ちなみに、combo-scriptは大文字と小文字を区別しません。だから
up
と書いてもUP
と書いても同じです。これは関数も同じ。 - あとボタン名については英数じゃなくてもいいです。例えば日本語で
強パンチ
とか書いても問題ありません。
コンパイルの仕方とか、それをどうやって自分のプレイヤーアプリに組み込むか、みたいなことは公式サイトを確認してください。