#end if
#end if
は 空白が余計 なので無視され、この譜面は 「#ENDIF
が無い #RANDOM
」 として扱われる。#if 1
(nanasi は #if 7
) 抽選時のみ再生される。 MW2 は PC がフリーズ。#ELSE
や入れ子の中で #ENDIF
を省略されるとたぶん死ぬ。#RANDOM
を 100 回入れ子させてみたLEVEL: 100
に到達する確率は 2 / 1267650600228229401496703205376
毎秒 1 回ペースで 100 年間延々試しても 3155760000
回しか試すことができない。
100 階到達はポコロコでも無理なので、以下は 「非現実的なベンチマーク」 でしかありません。
#SETRANDOM
非対応なので、「深い階層が正常に解釈可能なのか」 は検証が困難LEVEL: 15
までは正しく解釈されている (試行 3 回目で偶然出た)#RANDOM
を #SETRANDOM
に 全置換すると、正しく LEVEL: 100
が選ばれる#RANDOM
入れ子は、正しく解釈されているはず#ENDRANDOM
で閉じていてもダメ#RANDOM
と #SWITCH
を混合で無限に入れ子することが可能」 とある#RANDOM
と #SWITCH
を 交互にネストすると、深さ 100 でもたぶん正常に動作する#SWITCH
を 100 重にネストすると、なぜか演奏レーンが表示されない#SETSWITCH
を 100 重にネストすると、強制終了する#SETSWITCH
46 重まではセーフ、47 重以降はアウト#BMP
定義ファイルを、タイル状に敷き詰めて表示しようとする?#RANDOM
は #ENDRANDOM
で閉じたほうが良さそうだ#ENDRANDOM
を 補えば、dracunculus も オートメーション工場 もナナシグルーヴで遊べるようになる。
自分の環境では、
#ENDRANDOM
で閉じられていない #RANDOM
文ブロックが 47 個以上 存在する譜面は、#RANDOM
は #ENDRANDOM
で閉じたほうが良さそうだColorful Channel 版ゆめにっき EX 譜面の ネスト版 を、さらに減量してみた。
pomu2 / nanasi / IIDXv にて、元譜面と同じ結果が得られることを確認済み。
減量していて気がついたのですが、
#ENDRANDOM
を省略した場合、ナナシグルーヴは 「分岐の中」 しか再生してくれない。#ENDRANDOM
を省くと問題が顕在化する。#ENDRANDOM
を書く必要がある。#ENDRANDOM
を単に無視する (IIDXv は読んでるかもしれないけど)。#RANDOM
は 「常に」 #ENDRANDOM
で閉じてよいし、そのほうが安全。・・・ということがわかりました。
BMX2WAV は入れ子を許す構造だったはず。
ただし、
#RANDOM
の値は#ENDIF
で戻らない(そのまま)という作り。この辺は仕様も無いしマイナーな部分だから特にデファクトスタンダードも無さそうだから適当に作っちゃったにゃあ
子は親の生成値を引き継ぐ 感じでしょうか。・・・えっ? それだと明らかに・・・ えっ?
単純に 「bms シーンにおけるデファクトスタンダードソフト」 ということであれば、一昔前なら nazo、現在なら LR2 なんですが、分岐に関する挙動をみると、どちらも 「入れ子を外す解釈」 になってますねー
なんかよく見たら BMX2WAV のバグかもしれないんで保留保留で
テヘッ、BMX2WAV のはバグですねぇ。 本来は許すつもりで作ったのだけど、失敗しちゃった。
今の(間違った)作りだと、
#IF
で行かなかったルートではオブジェ配置とかヘッダとか無視してるのだけど、#RANDOM
だけは無視してなくて、そこで値が変わってる感じ。例 で言うと、18 行目で 1 が出ても 23 行目の
#RANDOM
で抽選が行われてそこで 1 が出ると 25 行目が読まれる、28 行目の#RANDOM
で抽選が・・・
とそんな感じ。
なるほど、「選外ルートのみを読み飛ばすルール」 に漏れがあり、意図に反して全分岐が処理されていたわけですね。 むしろ 「入れ子を外す解釈」 の具体例として、非常に勉強になりました!
結果的には nazo / LR2 と同じ挙動になってるので、てっきりデファクト標準準拠なんだろうなーと早合点してました。 モダン本体が 「入れ子を外す」 のも、俺にはうかがいしれない理由があってのことだろう、と早合点してました。 ううう。
あれ本当だ!?>オートメーション にランダムのネストあり
せっかくなので本人に問いただしたところ 「あ、仕様です」 という官僚的答弁が得られました!
というわけで思い込みで適当なことを言ってしまってごめんなさい!
おっ俺は hayana さんに向かって uBMplay 妄想を垂れ流していたのか・・・ なんという公開羞恥プレイ・・・
「1.4.0 で nazo に準拠したのかなー」 と思い直してたのですが、そもそもが勘違いでした。 こちらこそ思い込みで適当なこと書きまくってしまってごめんなさい; あとメールいたしました!
あの入れ子が仕様ということは、分岐ソースを自動生成したあとで わざわざ 途中の数行を切り取ってケツに貼り付けたわけで、悪魔の所業じゃないですか・・・。 いともたやすく作られるえげつない譜面・・・
「無制限な兄弟」 と同じ要領で 「無制限な子孫」 も作れるはずで、イヤな予感が止まりません。 確率 1/2 の分岐もわずか 40 回のネストで 1兆分の1未満 になるわけで、ユーザ側から検証とか絶対やりたくないなあ。
・・・ああ、だからナナシグルーヴ仕様は #SETRANDOM
を用意してるのか、なるほどなあ。
そういえばナナシには 「入れ子は終端符必須 (#ENDRANDOM
)」 という仕様もあるけど、先日の サンプル はナナシでも解釈されますね。 明示的な終端符が使われてる例は dracunculus くらいしか知りませんが、XML 時代には普通に使われるのかなー </random>
みたいな形で。 仕様ってむずかしい・・・
オートメーション工場 以外に、#RANDOM
の入れ子を使っている譜面を、ご存知の方は教えていただけるとありがたいです! 昔どこかでそんな差分譜面を見かけた記憶がありますが、詳細を思い出せない・・・
余談。 Colorful Channel 版ゆめにっき EX 譜面は、#RANDOM 2
のネストに書き換えれば 容量 9 割減。
pomu2 / nanasi / IIDXv で動作を確認済みですが、IIDXv はストップ非対応なので、ときには悲しい結果に。
位置 | KEY 1 | KEY 2 | KEY 3 | KEY 4 | KEY 5 | KEY 6 | KEY 7 | SCRATCH |
---|---|---|---|---|---|---|---|---|
確率 | 1/2 | 1/4 | 1/8 | 1/16 | 1/32 | 1/64 | 1/128 | 1/128 |
このサンプルファイルを BMS 再生ソフトに読ませた結果は、次のとおり。
微更新されてた
オートメーション工場 はランダム入れ子ではなく、分岐 17 以降を捨てているだけだったり。
詳しくは ubm 1.4.0 の更新履歴を見て熟知すべし。
えっ!? ご指摘を受けてインデントしてみた (正規表現置換) けど、入れ子あるっぽいですよ・・・?
実際に入れ子とみなすかどうかはさておき、行番号 347740 - 409548 は階層構造になってるような。
uBMplay 1.4.0 のランダム関連の更新は、まさにオートメーション工場を受けてのものだったと思います!
#IF
が閉じる前に #RANDOM
が来たら #ENDIF
を補う」 みたいな、何らかの処理を挟んで、#RANDOM
が必ず処理されるはず。きてたああああ
ZANNEN... いつか hitkey 先生とオフで色々語り合いたいものですなー (主に BMSE のバグとか)
せめてソース読めるレベルまで俺が達してないと恐縮すぎですけど、お会いできれば光栄です! あらためて バグリスト を読み返したらほぼイチャモンだったので、その際はリアル土下座をキメさせていただきます!
iBMSC の 「タスクマネージャから落とすときも保存を確認するオプション」 とか、誰かにとって何がしかのヒントとなれたなら、面映ゆいやら申し訳ないやら
(ジェバンニさんまじジェバンニ)
超ありがたいです! 見るからに大丈夫でした! もうミス報告の集約とかも含めて丸投げしちゃってよくねすか?
#RANDOM 3
#IF 1
#00111:11
#ENDIF
#IF 1
#00112:22
#ENDIF
#IF 1
#00113:33
#ENDIF
#ENDRANDOM
//bms
#SWITCH 2
#CASE 1
#WAV01 aaa.wav
#SKIP
#SWITCH 2
#CASE 1
#WAV01 ccc.wav
#SKIP
#CASE 2
#WAV01 ddd.wav
#SKIP
#ENDSW
#CASE 2
#WAV01 bbb.wav
#SKIP
#ENDSW
//C-like programming language
switch (n) {
case 1:
wav01 = "aaa.wav";
break;
switch (i) {
case 1:
wav01 = "ccc.wav";
break;
case 2:
wav01 = "ddd.wav";
break;
}
case 2:
wav01 = "bbb.wav";
break;
}
#TITLE 774_required_title
#SWITCH 6
#DEF
#00116:66
#SKIP
#CASE 1
#00111:11
#SKIP
#CASE 2
#00112:22
#SKIP
#CASE 3
#00113:33
#SKIP
#CASE 4
#00114:44
#SKIP
#CASE 5
#00115:55
#SKIP
#ENDSW
#RANDOM
の、ブロック終端符 #ENDRANDOM
も、省略できる?#ENDIF
の後続分岐命令が #IF
でも #ENDRANDOM
でもないなら、終端符を補完する」?なるほろねぇー、結構導入が楽な書式だからすぐ対応できそうな予感。
LRS は、人間向けの冗長な情報 (小節やリズム) を持たない (ゆえにアプリケーションから扱いやすい) 書式。
BMS は、人間が楽譜として読み書きできる書式 (文字通り Music Script)。 ・・・って感じでしょうか。
機械用と人間用に分化して、座標入力支援マクロ として BMS 書式を 「ッターン!」 とかできると面白そう?
ところでもうすぐ夏コミですが hitkey 先生は行ったりしないのですか? あるいは秋 M3 とか!
行きたいけど行けないので壁を殴る日々です! plugout サントラ全部ほしいお・・・ くそおおお誰かください
> iBMSC 2.2 Deltaあれ、もしかしてこれ結構すごい?
とりあえず日本語ロケールファイルくらいあった方がいい予感。
(とても配布できる出来じゃない訳をつくりながら)
結構どころか現時点での最優秀 UI ですよ! キーボードで配置変更できたりまじすごいですよ! 日本語ロケール欲しい人もいっぱいいると思います (俺とか)、ぜひ作者さんにご連絡を!!
ほほーん。 新フォーマットが出来るんですか。
BMX2WAV でもいつか対応するかもしれないんで作者に仕様を公開してちょって伝えておいて!
既存ソフトが対応していただけるなら確実にフォーマット普及の追い風となるはずで、プレイヤーとしてもありがたいです! lavalse さんがここ見ておられるか分かりませんが、仕様が公開されるその日を心待ちにしておりますー
plugout -ARCADE EDITION- の体験版? が公開されたことを知り、ダウンロード。 起動しない \(´・ω・`)/
せめて譜面だけでも、とファイル覗いたところ、これは噂の次世代フォーマット!?
<n c="1" s="34560" e="34620" p="82" />
なら、1P 側 1 key、分解能座標 34560 - 34620 のロングノート、再生ファイル 82 番、という感じ。c="0"
だし、鍵盤 6 番 7 番は c="6"
c="7"
だし、c="8"
ならたぶんポップくんだし、e 属性がついてるオブジェクトはロングノートなのです。これは・・・! BMS エディタも Web アプリの時代が到来・・・!?
プログラミング入門者になんという無茶振りっ・・・! いつか挑戦できるよう頑張りまーす
hitkey 先生復活まだかなー (チラッ
\チラッ/
剃髪中にバリカンが壊れて、丸一日サバンナ頭で過ごした。 人は 『恥』 のために死ぬ
(エンリコ・プッチ)
#PATH_WAV
で指定できるのは、即席でテストしたいときに便利。bmx2wav で表示される 「分解能」 は 「1小節をいくつに分解したか」 ではなくて 「4分音符4つ分の長さをいくつに分解したか」 を表示してますです。取り急ぎで
ご教示ありがとうございます! 思いっきり勘違いしてました; ええと、こういう理解でいいのかな・・・
hitkey 先生復活キター!このまま完全復活な感じなのかしら?
や、ありがたくも申し訳ないですが、数日後にはまた沈みます; 次は更新できれば2週間後くらいにー
KOREA BE-MUSIC SCRIPT PARTY 2011 公開とともに、2011/03/02 にバージョンアップ。 KR 版のみ。
KEYMODE
文を認識するように。自分が 以前報告したバグ はほぼ修正されたと思います。 本当にありがたいです。 2P 側が不可視オブジェのみの場合は SP 譜面に化けるけど、これをバグとみなすべきかどうか自分にはわかりません。 2P 側をアレンジ演奏専用とするような譜面も、理論上はありうるけど、誰も作らなきゃ問題ないわけで。
見逃してた大量のイベントに追いつくべく。 某所で一括パッケージを見つけたのでありがたく利用させていただきました。 Mystical Dejavu は、イベントで #BGA
座標定義を使用した初めての作品じゃないかな?
分解能がだんだんわけわかんなくなってきたメモ。
#00002:1.75
#00011:0000000000000001000000000000
#00002:1.75
#00011:0001
次の譜面を、BMSE は上の例と同じリズムで表示する。 bmx2wav は分解能を 112 と表示する。
#00002:1.75
#00011:00000000000000000000000000000100000000000000000000000000
変換は正しく行われる (と思う) けど、分解能はどんな値が表示されるべきなのか、そこがよくわからない。
ただ、以下の 2 例は、自分の理解が間違ってなければ、たぶん明らかに間違った分解能表示になる。
Johnny です。ご無事で何より。
地雷コンバーターはターゲットがライトユーザーなので
あのスタイルに落ち着きました。
その割にテキスト編集させる辺りが矛盾ですが俺スキル的制約です。
お互い達者で何より! Excel も Flash も知らない俺には充分ハイスキルに見えるけど、やっぱり譜面エディタの形にできるなら、それがベストではあるんですよね。 俺も試してみたけど、同様にスキルの壁が・・・
とりあえずこれで一人でも地雷の使い手が増えれば、
というか興味もってくれればなぁ…って実験です。
配置にはセンスが必要ですけどねー。すぐ糞譜面になる罠。
地雷否定派だけど、譜面厨としてはよくわかります。 おもしろい地雷譜面はおもしろいですよね!
ランダムのアレは
// 置換して右フィールドへ bmsIn2 = bmsIn2.replace(/(#...)3/g,"$1D"); bmsIn2 = bmsIn2.replace(/(#...)4/g,"$1E"); text_field2.text = bmsIn2;
この時点で if 文かますか再置換すれば良いんでしょうけど
そもそもランダム使いたい人が少ないのと挙動の安定重視で以下略。
や、/^(#\d{3})3/g
とかなら、#IF 3
も #WAV3F
も #BPM32
も #TITLE #65535
も蹴れるかなと。
拍手やコメントくださった方ありがとうございます! 返信が半年遅れとか申し訳なさすぎますが・・・;
いまさらながらこれはすごい! BMS とか知らねえよって方にこそ、むしろ超おすすめしたい!
まだ元作品をほとんどプレイできてないのに、チラ見したらサイト自体が神だったので、つい試聴して自らネタバレを踏みにいってしまいました。 disc 1 Repeat and Rewind の試聴用 mp3 がリンク切れてるような? (ogg 版は聴ける)
スタッフと作曲者の皆様に心から拍手をお送りしたいです。今年は特に個人的に、サイト担当さんにワンモア拍手をお送りしたいです。BMS への経路が (後から参照できる形で) 増えていくことは常に喜ばしいことだし、それがしっかりしたサイトであればなおさら。 jQuery + HTML5 Audio という形はこの規模だと容量やばい気はしますが、UI の威力を分からされました。
> クリスマスは・・・こなみじんになって死んだむう、「コナミ人」…!!
俺が、俺たちがこなみじんだ!
更新やリリースなど、ここ半年間の動きはだいぶ見逃してたので。
#IF 3
が誤爆する理由がわかってしまった。正規表現とかなら誤爆は防げると思うっす。#MOVIE filename
を定義する必要があったけど、今回の版からは、動画ファイルがひとつだけなら #BMPzz filename
に定義して配置できるようになり、たいていの動画 BMS はそのまま再生可能になった。#LNOBJ zz
形式には対応しない。#MIDIFILE foo.mid
とすれば #000 頭から MIDI が鳴るし、#WAVzz bar.mid
と定義して配置すれば wav ファイルのように MIDI を扱える。現在主流の BMS の方向性とは異なるけど、軽量データを扱えるのは面白い。#BMP
は配置のみ可能。ファイル定義はできない。#BGA
やプレビューウィンドウはオミットされている。#xxx02:n
の行が全部消えるから、変拍子系や小節長演出系の BMS は全滅。