doubledepth

またbugだあ

こんな刻限に即席🍜拉麺を貪り食ってしまいました〜〜〜〜おいしい!もう何も怖くない!拙作変換器、#BMP00を変換できていなかったりしたんですが、何の悔いもなく心地好い眠気に身を委ねます!

_wsh_bms2bmson.js v0.1.1

  • #BGA関連処理を多少改善した。
  • #BMPの多重定義を検出する処理が穴だらけだったのを改善した。
以下備忘録

#BGAが参照する#BMP番号の寛容性について、

#BGA01 10 0 0 128 128 0 0
#BGA02 a 128 128 256 256 128 128
#BMP0a image/layer_002.bmp
#00107:010a020a
  • #BMP10が見つからないときは16進数換算で#BMP0Aを参照する。(for BM98de/Delight)
  • #BGAzz a …#BMP0Aを参照する。
  • 指定された画像と同じ位置関係を保つpathに、切り出した画像群を出力する。
  • Filenameの一意性を保つため、連番出力をやめて元の名前と座標を組み合わせる。
  • layerEventsのみがある図表でPulsusが真っ黒になるのでbgaEventsを捏造する。
Windows OSのPath長さ制限が心配だが、他にうまい手を思いつかない。
{
  "version": "1.0.0",
  "info": {
    "init_bpm": 130,
    "resolution": 1
  },
  "lines": [
    {"y": 0},
    {"y": 4},
    {"y": 8}
  ],
  "bga": {
    "bga_header": [
      {
        "id": 1310,
        "name": "image\\___alpha_layer_layer_002.png"
      },
      {
        "id": 3901,
        "name": "image\\___alpha_layer_cropped_layer_002_0_0_128_128_0_0.png"
      },
      {
        "id": 3902,
        "name": "image\\___alpha_layer_cropped_layer_002_128_128_256_256_128_128.png"
      },
      {
        "id": 1,
        "name": "___undefined_black.png"
      }
    ],
    "layer_events": [
      {"id": 3901, "y": 4},
      {"id": 1310, "y": 5},
      {"id": 3902, "y": 6},
      {"id": 1310, "y": 7}
    ],
    "bga_events": [
      {"id": 1, "y": 0}
    ]
  }
}

多重定義の検出処理について、

#BMP01 ./audio/../image/layer_001.bmp
#BMP02 image\\\LAYER_001.BMP
#BMP03 layer_001.bmp
#00107:010203

前述の#BMP01#BMP02は多重定義とみなす。ついでに、同じ内容の画像が連続して配置されている場合は後続の指示を休符に置き換える。例の場合なら#00107:020003とみなす。[追記] 同じ動画を連続させてRetrigger再生するような演出がもし出てきたら、変換器がそれを勝手に台無しにしそうなので、やめ。

階層が異なれば内容も異なりうるので、前述の#BMP02#BMP03は多重定義とみなさない。

charatbeat­HDX VIOLET v1.18

曲終了後に延々と終わらない場合にESC(キャンセルボタン)を押すことで即座に結果画面に行けるようにしますた。

とのことです。にreleaseされていたようです。

BMSの中身を見ないusersが曲の終わりどころを把握する方法は、実際にESCを押してみる以外になさそうです。既に曲が終わっていたならESCを押しっぱなしにせずとも普通に押すだけで結果画面に行けるし結果画面が途中終了扱いにならない、ということらしいので、よほど空気が読めない図表以外なら演奏が無駄に終わることもないでしょうし大丈夫でしょう〜

[追記] 私はどうやら「演奏すべきnote(地雷含む)に未到達なら、ESCにlockがかかる(演奏画面を抜けたいなら押しっぱなしにする必要がある)もの」と勘違いしていました。すみませんでした。まったくそんなことはなく、ESCを普通に一回押せばいつでも演奏画面を抜けられます。今までは「演奏すべきnotesが出揃った後も、以降の地点に(たとえば#99902:1等の)非演奏notesが記述されていれば、その指示に未到達時点でESCを押すと結果画面に到達しない」ということだったようです。

_wsh_bms2bmson.js v0.1.0

  • #BGAzzの変換に対応した(つもり)。
  • #BMP00/#BGA00が変換されていなかったbugを修正。
  • PNG画像を生成出力しないようにもできる設定を追加var GENERATE_PNGS = false;)。
“FELYS”(onoken, 逆凪氏版BGAをBMSON仕様に適合するように変換しPulsusで自動演奏した例:

ッッッッF!ッッッッO!ッッッッO!ッッッッN!

#LNTYPE 1型LongNote区間内に#LNOBJ型LongNoteを配置する。または、#LNOBJ型LongNote区間内に#LNTYPE 1型LongNoteを配置する。

#LNOBJ ZZ
#00113:0022ZZ00
#00153:11000011
#LNOBJ ZZ
#00111:110000ZZ
#00151:00222200

拙作変換器、こんな感じのpatterns入れ子のLongNotesとして変換してしまう……

LongNotes区間内の余計なnotesを掃除する処理がまるで役に立っていなかったので書き直したところ、今度は掃除されてほしくないnotesまで消えてしまう。どこだ、どこが間違っているんだ……

[追記] 一箇所しょうもない書き間違いをかましていたのが原因だった。v0.0.17に更新した。

_wsh_bms2bmson.js v0.0.16

これはHDX拡張の#LNOBJ表現です。iBMSC/μBMSCはLongNotesの長さを視覚化してくれる代わりに「#nnn[51-69]の始端と終端は同一の定義番号」「#LNOBJはひとつのみ」という制約を課すので、「LongNotes終端で音声を鳴らす図表」を編集するには向いていません。BMSEで通常の可視notesとして始端と終端を配置し、#LNOBJを複数定義したうえで拙作変換器に投げるのが楽かと思います。

_wsh_bms2bmson.js v0.0.15

  • 指定されたOUTPUT_FOLDERが存在しない場合に異常終了していたv0.0.14のbugを修正。

排便するたびに便器が真っ赤に染まるので物を食べるのが怖い…… Microwave ovenも余命幾許もなさそうな音を立てているし…… 高町さんは生身で成層圏を突破するし…… 生きるのが辛い……

_wsh_bms2bmson.js v0.0.14

  • BMS-on記法において、自己参照#WAVyy C-yyは波形始端とみなすように修正。
  • 各設定項目のPath区切り文字として、U+002F ‘SOLIDUS’も使えるように修正。

_wsh_bms2bmson.js v0.0.13

  • BMS-on記法において、各#WAVの最初のnoteが継続指示"c":trueなら波形始端"c":falseとみなすように修正。
  • 基底名が一文字の図表(“tit0.bmsなど)が変換対象として列挙されなかったbugを修正。
  • 始端と終端の定義番号が異なる#nnn[51-69]型LongNotesを、BMSON拡張定義"up"に変換。
  • 「便宜上の192分音符」を仮定しない設定を追加。var LIMITED_RESOLUTION = 3;

_wsh_bms2bmson.js v0.0.12

  • BMS-on記法において、波形始端"c":falseに競合する継続指示"c":trueは無視するように修正。
  • 継続指示#WAVxx C-yyと同名のfileC-yyが実際に存在する場合は波形始端とみなすように修正。
  • GrooveGauge増加率を、変換前と変換後で可能な限り一致させるように修正。
  • unsigned longでない#PLAYLEVEL値を"level_string"に隔離するように修正。

Mid2BMS (v)

多くのBMS作家にとっての救世主たるBMS制作支援softwareが更新されました! 既に四年以上の運用実績があり愛用者が多くDocumentsも充実している素晴らしいtoolsのひとつです。MIDIに限らずFL Studio等で書いた曲をMid2BMSでBMS化する方々もわりかしいらっしゃるので、未体験の方は是非〜

Renoise-BMS-Maker

Tracker-like music sequencer Renoise Ver.3.1.1用の拡張機能としてBMSの音切りを支援するそうです。私は今日まで寡聞にして知りませんでしたが、FamiTracker使用者氏いわく『メッチャスゴイ感動怒涛瞬殺的プログラム』だそうです! Renoiseを用いるBMS作家の方々は試してみてはいかがでしょう〜

μBMSC v3.2.1非公式改造版

先日Bluvel氏によって#SCROLL入力枠が実装されたμBMSCに対してさらに#SPEED入力枠も追加せんとするNekokan氏による非公式改造版がreleaseされました! 注意すべき点として、公式にmergeされた3.4.0.3版の#SCROLL入力枠はのに対し、Nekokan氏私家版3.2.1版は負数値の#SCROLLを新しく書き込むことができません(0.0001に化ける)。それはBMS codeを直接編集すればなんとでもなる話だし、望む場所に置換用dummy notesを配置できるだけでもありがたいです。

Nekokan氏によるView menu改善提案も意義が大きいと思われます。

Winamp 5.8 Build 3660

終了版と銘打たれたWinamp 5.6から五年の沈黙を経て突如公開された最新β版! 2019年にreleaseが予定されているWinamp 6はいざ知らず、すくなくとも今回のWinamp 5.8に関してはWAviewも今まで通り問題なく働くぞ! 良かったな、小僧!!!!(近日中にBMSE非公式Helpを改訂しなきゃ…… 公式がなにげにHTTPS化してるし……[追記] 改訂した。

_wsh_bms2bmson.js v0.0.11

BMS-on記法の変換をsupportしました。変換test用samples

今回から"sound_channels"の先頭に空のtrackを必ず挿入することにしました。この記述を消さないでください。BmsONE v0.2.1上でsound_channels[0]が認識されない場合があるので、それを回避して常に全tracksを認識させるためのWorkaroundです。

{
    "name": "___dummy_dont_delete___",
    "notes": []
},

あと、先週困っていたパブロペトリの泡影 -海底の記憶-”の件、変換後の拍分解能が48になるのは正しい変換結果だった。変換後のBMSON図表をbeatorajaで演奏できないのは文字列値難易度が原因だった。Pulsusで演奏できないのは不可視や地雷のために余計なpropertiesを生やしていたからだった。[追記] そんなこともなかった。こちらも文字列値難易度が原因だった。未定義音声の無音notes#WAV定義番号でいうZY)が警告されることを気にしないなら、普通に遊べる。BMSON仕様に反する値は文字列値難易度用のkeyに退避させておこう、とそういえば考えたのだった(直すのを忘れていた)。翌日直した。

_wsh_bms2bmson.js v0.0.10

#SCROLLの変換をsupportしました。

#SCROLLのみならず#SPEEDも、適当に"speed_events"とかkeyを生やして情報を確保します。

Test用の図表はこんな感じ。
#TITLE #ext #scroll test
#BPM 120
#PLAYLEVEL 1
#RANK 3

#exBPM01 130
#BPM01 あ.wav
#EXBPM02 000
#bpm03 
#exbpm06 12345678901234567890123456789012345678901234567890123456789
#00103:zz74
#00208:040102
#00308:06

#STOP01 あ.png
#stop02 000
#stop03 
#srop04 -1
#stop04 -1
#00109:01020304

#SCROLL01 あ.bmp
#SCROLL02 002
#ext #scroll03 1.5
#001sc:010203
#002SC:01020403

#SPEED00 0
#speed01 -1
#SPEEDz 6
/#speed30 1.2345678901234567890123456789012345678901234567890123456789
#000sp:0100
/#001sp:30

/#00111:01010101
#ext #EXT #00211:01010101

こういうparser耐久試験みたいなBMS図表をあちこちに書き散らして暫くすると自分がどこに何を書いたか忘れるので、BMS root folderからdatabaseを構築するたぐいの機種とは致命的に合わないんですよね…… 毎回起動時Errorを食らうのに疲れて、最終的にDrag-and-drop起動できる機種でしか遊ばなくなるという余談でした。さておきどのように解釈すべきか曖昧な状況がいくつか考えられました。

定義重複時は最後のが選ばれる規則(例外あり) vs. 不正な値を捨てる処理

#TITLE bad bpm 1
#BPM 120

#BPM01 kick.wav
#WAV01 kick.wav
#00108:01
#00111:01010101
#TITLE bad bpm 2
#BPM 120
#BPM01 240
#BPM01 kick.wav
#WAV01 kick.wav
#00108:01
#00111:01010101
#TITLE bad bpm 3
#BPM 120
#BPM01 kick.wav
#BPM01 240
#WAV01 kick.wav
#00108:01
#00111:01010101

異常な値の入力に対処するのは基本として、値を検証するかによっても結果が変わるのかな。最初に全行まとめて読み込んでから検証を行う実装が多いなか、beatoraja/Pulsusは各行を読みながらその場で検証もしているように見える(二つめの例でもBPMを240に変更できているので)。

「怪しきは食わない」という方法が安全な印象があるけど、書くのが難しそうにも見える。分岐を剪定しながらとなると尚更。入れ子分岐を考慮しないならいけそうな気もするけど、私には無理。

標準BPM変更文に36進数が指定された場合

#00103:zz74

ZZは16進数ではないので無効とするほうが仕様に忠実なのかな〜と思いつつ、一緒くたにparseInt(value, 36)するほうが楽なんだよな〜。そも、こんな書き方するのは分かってる人だけだろうし。調べたらbeatorajaも値ZZでBPMを1295に変更してくれたので、私も甘えてそのままにした。

無効な定義内容への参照は休符とみなすべきか

えっそうしないほうが難しくない?このメモなに?……あ〜もしかして、#00103:zz74ZZをはねるなら#00103:74になるのかな〜とか考えた?たぶん眠くて何かのtestを勘違いしたものと思われる

[追記] いや、これはたぶん「無意味なdata文によって分解能計算が狂わされる問題」を指している。v0.1.8でも結局のところ解決できず、buggyな関数を無効化しただけにとどまった。

有効な定義内容が皆無のeventsについて

これはなんだ、あ〜、test用図表内の#STOP定義群を全部異常値にしたときに発覚したやつ。空っぽの定義配列に対してBMSON拍分解能の算出処理を呼んでいて強制終了していたやつ。それを直したら#xxx09の配列がまたもや各停止値のBMSON換算値を算出しようとしていて強制終了していたやつ。そういうのが他にもありそうだなあと思ってメモしたのかな。思い出せないので放置。

いや、たぶん#BMPを整理する処理で同じようなpatternに引っかかりそうな気がする……怖不近

負数の#SPEED

いまのところ唯一の#SPEED実装例であるBemuseの場合、図表内に負数値の#SPEED定義がひとつでも存在すると、演奏時の画面にnotesが一切描画されない#00103:zzとかを投げるとErrorを返してくれるので、Errorにならない負数値#SPEEDはすくなくとも許容はされているとみなすべきか。

#EXT

#TITLE #EXT TEST
#EXT #WAV01 kick.wav
#EXT #00111:01010101
#EXT #EXT #00113:0101
#00115:01

いまのところ唯一の#EXT実装例であるBemuseの場合、

  • 一行目は普通に文字列値#EXT TESTとして解釈される。
  • 二行目がよくわからない。kick.wavが鳴らない。drag-and-dropで起動したからだろうか。
  • 三行目は#00111:01010101として解釈される。
  • 四行目は解釈されない。ということは、入れ子の#EXTは考慮する必要がない。

このファイルは大きすぎてごみ箱へ移動できません

BMS関連でこんなん初めて見た

BMS拡張定義#SPEEDzz/#nnnSP:samples

#SPEEDはBemuse由来の拡張命令です。演奏者は図表に対して任意でHI-SPEED option(註)を適用できますが、これに図表側から干渉することが#SPEEDの使命です。図表著者は#SPEEDを用いることで、図表上の任意の地点において任意に指定したHI-SPEED値を、強制的に適用できます。

(註:HI-SPEEDの値は、図表の表示倍率、音符の表示間隔、くらいの意味です。拡大鏡ですね。)

Bemuseの場合、#SPEEDの値は「演奏者側が適用しているHI-SPEED option」に対してされます。図表が変わらない場合でも、Option環境が変われば#SPEED適用結果も変動します。たとえばOptionを“HI-SPEED: から変更しなかった場合と、“HI-SPEED: に変更していた場合では、後者のほうが図表の伸縮率が大きくなります。ただし元のHI-SPEED値が何であれ、0の積は0です。

#SPEED01 0
#000SP:01

参考画像:「F! O! O! N! F, O, O, N! Foon...」の9個のnotesがすべて判定線上に。(^^)に対して前述のBMS codeを追加すると、図表内の全notesが判定線上に横並びに表示されました。見た目上のnotes間隔が0にされている間も図表自体は進んでいる(時間の流れは変わらない)ので、この状態のままでもBGMやbeat indicatorを頼りに555555点(PERFECT)を獲得することは可能です。(この状態では読譜できないので、図表を覚えておく必要はあります。)

Nekokan氏はdemonstrationの一環として、gimmick的な活かし方をいくつか示されています。こういった方向性は、nanasigroove独自拡張命令#OPTION/#CHANGEOPTIONや、feeling pomu 2ndが備える多様な演奏妨害要素(pop’n musicにおける“Ojama”)に倣うものといえるでしょう。

別の方向性として考えられるのは譜読みでしょうか。かつて本体側からHI-SPEED optionを禁じたのがforgetalia/forgetalia++ですが、#SPEEDを使えば図表側からもそんな感じのことができるかも。

54.8 GiBの単一図表file

先日の続報。懲りずにscriptを微調整して再びBMSON仕様の限界に挑んだ結果、Boleroを131080回繰り返す図表の生成が約18時間かかって完了しました。File sizeは58877134649 bytesでした。

私の事前予測より10 GiBくらい膨らんでるんですけど……

Hex EditorFavBinEdit)で眺めて、最後の小節線の"y"座標最後のlast.wav"y"座標が正しいことを確認。本番前に試しに3回分繰り返したBMSON図表が滞りなく完走できることも確認。

ボレロしすぎ

Bolero繰り返し過ぎる

https://hitkey.nekokan.dyndns.info/diary1008.htm#100817

ゴールド・エクスペリエンス・レクイエム差分って名前はちょっと気に入ってたりします。

ジョジョ5部始まりましたね。

関連linkまで挙げてくださりありがとうございます。

5部はJOJO表記すんなしって思ったけどGio-Goiの英語読みを鑑みるにやむなしって思い直しました。

「指定した回数分“Bolero”を繰り返し、BMSON図表として出力するWSH JScript」を即席で書いて、131080回繰り返すjobを今朝がた実行し、さきほど確認したところ終盤まで到達していました。

46784624 KiB…… おお〜まだ容量増え続けてるけどもうすぐ終わりそう。これって今gibibyte換算でなんぼやの? 右クリックメニューからプロパティーポチー

エラー:
書き込みできません。
ソース:
Microsoft JScript 実行時エラー

ちくしょう!だいなしにしやがった!お前はいつもそうだ。誰もお前を愛さない。今回の学びは、生成中のfileには絶対に触ってはいけないということ、この規模のtext繰り返しWriteLine()するとたぶん改行文字だけで28 MiBくらい食う概算になるけどそれでも行単位で追記していくほうが後々都合がよさそうということ、私の方法だと131080回分を追記しきるまで12時間以上かかるということ。

唐突な思いつき

BoleroをBMSONに変換し、拍分解能"resolution"限界まで切り詰めてみました。最初の空小節を削除したうえで、#000を⁷⁄₄拍子に変更しています。このBMSON図表における"y"座標の最大値は、偶然か必然か「2の15乗」に近似しています。

BMSON仕様が定める"y"座標の最大値は「2の32乗 - 1」すなわち4294967295なので、理論上は単一の図表で前述のBoleroを131080回繰り返すことができるはず。Bolero一周あたり700秒とすると、演奏時間は2年332日。図表のfile sizeは46.5 GiB54.8 GiBになりました。計算間違いすぎワロタ

これ、“Bolero”だからこの程度の長さで済んでますけど、拍分解能1で表現しきれる“Mokugyo AllCenturyMIX (longLONG)”は宇宙が滅ぶまで続けられそうな気がします。

BMSONと魔法の巻物

Bemuseによって提案されたBMS独自拡張定義#SCROLLbeatorajaもまた実装しており、そのBMSON表現である"scroll_events"もbeatorajaは独自に実装しています。このScrollEventは独自拡張ですが、音声裁断まで担いうるBMSONにとっては、波形の音価が伸び縮みするBPM変更や図表の時間軸長さが伸び縮みするSTOP sequenceによってgimmickを実装する従来の手法よりも、ScrollEventに頼るほうが圧倒的に利便性が高いはずです。私は#SCROLLならびに"scroll_events"を大いに支持します。

B.B.K.K.B.K.K. [戻]BMSONに変換してみたところ、すくなくとも手元のbeatoraja 0.6.4ではおそらく正常に再生されているように見えました。しかしMultiplexBMSONに変換してみたところ、明らかに"scroll_events"が働いていません。もしかして小数部分が切り捨てられている……? あとbeatorajaは#nnnsc:(小文字)だと反応してくれないっぽかったです。

拙作変換器、#BPM/#STOP/#STP/#SCROLLの各定義に異常な値を食わせた場合」についてまったく想定していなかったという事実にいまごろ気がついて、希望とやる気がムンムンしぼみました。μBMSCが#SCROLLをsupportしてくださったので、今後は#SCROLLxx 💛.bmpみたいな愚かしい値を怖れる必要はないだろうとは思うのですが。参照された定義番号に内容が存在しない場合とかはたまに見かけた覚えがあるので、やっぱりどうにかしておくべきか……

BMS-onに関しては、変換前BMSと変換後BMSONがこんな感じになれば良いのかな。BMSON仕様のSound Channelsまわりに以下のような規定があって、

  • A file extension may be omitted.
    • If file extension is omitted, then the implementation should search for compatible sound file with that name.
    • Example: { name: “piano” } → Try piano.wav, piano.ogg, piano.m4a, …

一瞬このへんとぶつからないかなって思ったんですが、変換時の話だから大丈夫大丈夫。ていうか、このへんの仕様に準拠する実装あんまりないような…… "stop_events""duration"が同じ位置に重なった場合に停止時間が合成される仕様も、たぶんBemuseくらいしか実装してないような。

さておき「予め波形に切れ目を入れておける」というのは私好みなのでもうちょっと考えてみます。

Explzh Ver.7.65

Explzh for Windows Ver 7.65 (x86/x64) 正式バージョン公開
Windows10 の「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用」に対応しました。
Explzh for Windows Ver 7.64 (x86/x64) 正式バージョン公開
4K 環境上での画面の表示に対応しました。

しゅ、しゅごい〜。UTF-8対応がどういう意味かにもよるけど、後で確かめなきゃ。

μBMSC 3.4.0.3

Bluvel氏によるcommitが反映されました。#SCROLLをがんがん使ってどうぞ。また、umt_ki氏によるiBMSC用themeが同梱されました。BMSEとiBMSC/μBMSCを併用する私には必須のthemeです。

うっかり忘れていたけど、dtinth氏提案のbmson-style “continuation note” (BMS-on)についても私は確認する必要がありました。おそらくこれは「BMSON形式に変換しやすいように記法を制約したBMS」なので、拙作変換器で積極的にsupportしていきたいところ。

witchcraft (SCROLLMAGIC14)の感想

疑似加速はともかく疑似停止はいきなり超絶技術すぎてびびりました。

Original図表の形の個性を踏襲しつつも異なる意味を加えていて、差分としての在り方が恰好良いと思いました。対称配置や並列配置はnotesをその形に並べる理由がわからない場合が多いのですけど、特に理由のない勢いだけのたたきだからこそ本差分のごときimmediate土竜叩きに組み込んでも違和感がなく、あと地雷でcall and response(?)させるのは癖譜面一派の基本技みたいなところがありますがそれをDouble-Playでやらせた作例は他になかったような気がします。あったらごめんなさい。

配置そのものは控えめな密度で軽く流させるに留めて、片側で読譜させながら同時に反対側の周辺視野を使わせるあたりに、multitaskingでtaskが三つに増えたかのような面白みがありました。Double-Playの複線性をもう一段階先に推し進めた感じで、難易度の出し方がとても好みです。

微細なrhythmを利用するmicro-scrolling手法は万能だなあと毎回思わされます。この差分には拡張#BPM変更#STOP sequenceも一切使われておらず、それら全部が#SCROLL拡張命令に置き換えられています。ここまでこねくり回していながらBGA関連行は一切変更されていないしbeat indicatorも完璧に欺くことができていて、なんというか非接触型scrollingというかCSS的図表演出が当たり前の世界になるまであと一歩という感があります。#SCROLL無しでこんな感じの図表を実現していた2016年頃の氏がいかに狂っていたかが察せられました。LR2とbeatorajaで遊び比べるといろいろわかりみ。

こういう手法をよくまあ毎度毎度発想なされるなあと感心させられます。筋道が分かっても真似できそうに思えません。あと、発想されたgimmickを実現するためにsoftwareのbug修正からBMS図表Editorの改善まで自分でこなしてしまえるというのが凄すぎます。BMS界隈の住人はわりと皆さんそんな感じの方ばかりなので、私は生きているのが恥ずかしいです。

_wsh_bms2bmson.js v0.0.9

#RANK#TOTALが誤変換されるのを修正しました。

誤変換というか、中身を読んだら判定EASYの場合だけわざと"judge_rank"を省略していたり、何やってんだこいつって感じでした。当時の私はおそらく「BMSON仕様で既定値が定められているkeysは積極的に省略しよう」などと浅はかにも考えたのだと思います。そういうのは変換の成否が紛らわしいし実際に未来の俺が勘違いして無駄な時間をかけさせられたので今後はやめようと思いました。

"total"に関しては今まではBMSの#TOTAL値をそのまま充てていましたが、BMSON仕様においては「いい感じのgauge上昇量を値100とする」ということになっているので、なら一律に値100をあてがっておけば大きな間違いはなかろうと考え、そのように変更しました。「いい感じ」は実装依存なのでいずれにせよ変換後も個々の図表ごとに微調整は必要になるんですが、多くの図表著者が7.605 * TotalNotes / (0.01 * TotalNotes + 6.5)のような#TOTAL算出式を用いているらしいので、大抵の場合は値100で用が足りるんじゃないかな〜という見通しです。

[追記] v0.0.12以降から、全notes数を計上して最適な"total"値を算出するようにしました。beatorajaの通常GrooveGaugeで比較したとき、変換前のBMS図表と変換後のBMSON図表でGauge増加量はほぼ同一になっているはずです。

めつめつめつかせめつすがめつひずめつかせ

先日の続き。寝て起きたら解決法が(意味のない傍点すき)

Pulsus 0.5.3が怪しいのは気のせいじゃあなかった。変換後のBMSONどころか変換前のEXORCIST_VOODOO.bmsからして、#068のLAYER少女が描画されない。理由はわからない。

raindrop 0.600bはBMS書式のVOODOO図表に関してはBGAを期待通りに描画してくれる。変換後のBMSONを渡すとうまくいかない。_wsh_bms2bmson.js v0.0.8は#RANKをど忘れしているので、変換後のBMSON図表には"judge_rank" propertyが存在しない。この状態のBMSON図表を演奏するとraindropが強制終了する。"judge_rank"を書き加えたBMSON fileを渡すと、raindropはBGAを期待通りに描画してくれる。"judge_rank"なしでも強制終了しない場合もある。何が原因なのかわからない。稀にLAYERが透かされず中盤BGAが真っ黒に染まる。稀に強制終了する。

BananaBeats 20180529はBMSON変換後のBGAを概ね描画してくれる。稀にLAYERが欠ける。

mok2lnbms.6.ql.bz/nijihaifu.htmlに一向に繋がる気配がなかったので、Web Archive経由でBMS “witchcraft”をdownloadした。これで#SCROLL図表の変換を試せる。と思いきや#RANDOMなので無理。

BMSをBMSONに変換するWSH JScript(手元版)進捗

以前進めていた手元版はどこまで進めたか完全に忘れたので、webからdownloadして再修正中。

手始めに、使っているLibraryのAPI変更に追従した。値を丸める関数群が削除されてて怖い……

拙作scriptでvar LIMITED_RESOLUTION = 2;パブロペトリの泡影 -海底の記憶-”を変換すると、BMSON拍分解能が"resolution":48になって、明らかにおかしい。けど修正前の版でもそのように変換されたから、元から論理が破綻していた。原因と解決法はたぶん分かった。[追記] 見事な仕事だと関心はするがどこもおかしくはない。"level"の値を数値型の9とかに変更すれば普通にbeatorajaなどで演奏可能

EXORCISTを変換して気づいた。beatoraja 0.6.4はBMSON図表の"layer_events"を無視する"bga_events"および"poor_events"は期待通りに働く。Pulsusでは変換後のBMSON図表はBMS版と同様に再生されているように見える。けどなんか怪しいんだよな……気のせいかな……

beatoraja 0.6.4の5 keys MODEについて

[追記] この記事中で言及されたbeatoraja 0.6.4の不具合(?)はほぼすべて、にreleaseされたbeatoraja 0.6.6では修正されていました

自分の環境だとレーンカバーもダメでした。(5鍵のみ)

BGAはどうでした?(レスどちらでも。へのコメント)

Commentありがとうございます! 5 keys MODEのLane-coverは仰る通り、私も設定画面からは「無効化」できていません。既定のkeyconfigの場合、演奏中の画面で直にAllow-key を連打すれば、手動でLane-coverを巻き上げておくことはできます。Allow-key を連打すれば再び引き出されます。

5 keys MODEのBGAも、初期状態ではcanvas領域さえ描画されませんでしたが、何かのきっかけで正常に表示されるようになりました。うろおぼえですが、設定画面から「スキンtabを選択して、スキン種類」欄で「5KEYS」を選択し、何も変更せずに「終了」したんだったかな。

私たちはbeatoraja0.6.4/player/playerID/config.jsonを直接編集することもできます。

"mode5": {
    "playconfig": {
        "fixhispeed": 0,
        "enablelanecover": false
    },
    "keyboard": {
        "keys": [ 54, 47, 52, 32, 31, 34, 50, 59, 129 ]
    },
    …
},

player folder配下のconfig.json」をnotepad.exe(メモ帳)などで開き、上述のあたりを上述の通りに指定しておけば、5 keys MODEのHI-SPEED OptionとLane-coverは確実に無効化できます。しかしながらbeatoraja上でのJSONのcharacter setに関して、私は詳しく知りません。RFC 8259によれば、JSON fileはUTF-8で文字符号化されなければなりません(must)が、さて。

問題は他にもあり、(Command Promptからbeatoraja.jar "5keys-bms-file-path"を指定するなどして)beatorajaを単曲起動して5 keys図表を演奏すると、5 keys MODE用のkeyconfig設定が初期化されます。あくまでも「私の環境では」ですけれども……

私の環境で5 keys MODE用keyconfig初期値はF-SCRFront-ScratchR-SCRRear-ScratchがともにUnknownなので、5 keys図表内に現れるturntable notesは、専用のkeyconfigを設定しない限り演奏できないのです…… もちろん選曲画面を経由すれば、この「初期化される問題」は顕在化しませんけれども。

そういった事情ですので、5 keys/10 keys図表だけは、私はいまだにLR2に投げております。LR2が最初から持っているline-half用のthemeはとても美しく、AUTO PLAYで図表を流すだけでもうっとりできます。LR2 Half themeを違和感なくbeatoraja用に流用するためには、いわゆるCN/HCN用の記述を書き加える必要がありそうなので、後々そのあたりについても調べなければ……

μBMSC枝版のbuild成功者あらわる

先日はこちらこそ失礼いたしました。そして私その画像とまったく同じ指定した(にもかかわらず先日は失敗した)んですけど!

仮想環境なら空き容量が足りることに気がついたので、そっちにVisual Studio Community 2017を最小構成でinstallしてみました。その後、画像と同じ指定でbuildしてみたところ、警告とErrorsの数が先日試したときの⅓未満に減少するも、buildそのものは失敗。やはり素のWindowsのみでは無理ぽ。

Errorsの依存関係を眺めると、どうやら少なくとも前述のpackagesが予めinstallされている必要があるようです。という感じの続報をいただきました。めっちゃありがとうございました!

いま気付いたけど、おれこのままだと空き容量なさすぎてG2R2018のpackageさえ展開できねえじゃん…… やっべえどうしよ

QMS-player Ver. 0.90c

不覚にもreleaseに気付くのが遅れました。PulsusといいQMS-playerといい、.NET系のBMS playersは外観がvividで良いですね〜

ロングノーツの始端もしくは終端に通常ノーツが重複定義されている場合に、通常ノーツを優先して削除する機能を追加。

その機能は私も自作のscriptでは実装し忘れていたような…… やべッッと思って確認したところ、「LongNotes区間内の可視Notes」は一掃できていたけど、#RANK#TOTALを変換できていないことに気が付いてしまった。いつからこうなっていたのか…… なるべく早く直します……

[追記] 直しました

たったいま見つけて鼻水噴いた

beatoraja 0.6.4(あるいはもしかするとそれ以前から?)、なんかBMSON書式のみならずBMS書式においても、普通にLongNotes始端側と終端側で別々のKEY音を鳴らすことができるんですけど⁉ どちゃクソびっくりしたわ⁉ ありがとうございます⁉⁉

4箇月くらい前に私は、beatorajaのBMSON拡張命令"up"を試しましたそのときの書庫に、BMS書式の図表も追加しました。例によってFF4 バトル2の追加図表です。

これはcharatbeatHDX拡張書式で、charatbeatHDX、BMIIDXView2015、およびTechnicalGrooveが実装していました。たしか元々の#xxx[5-6]x(Rhythm-it!提案の#LNTYPE 1書式)ではLN終端番号は何でも良かったはずなので、BMS構文解析器を書くことを考えるとと普通のLN終端を区別するのがなかなか難しそうな感じ。いろいろ面白い使い方ができそうなので、playersの一人としてはbeatorajaが実装組に加わったことを単純に喜んでいます。

μBMSCの枝版に#SCROLL入力枠が追加された

たぶんVisual Studio Communityなどをinstallすれば、μBMSC枝版のsource codeを拾ってきてcompileできるのではないでしょうか。私はVisual Studioを入れるにはDriveの空き容量が足りませんでしたが……

……と思いきや「OSに標準付属のC#/VBコンパイラーでソースコードをコンパイルするには?」「コマンドラインによりプロジェクトをビルドする」なる記事を見かけて、もしかしてこれはVisual Studioをinstallしなくてもcompileできるのかしら、と思って試してみた。

結果は失敗。

失敗したけど、うまいことやれればうまくいきそうな気もするので、もう少し試行錯誤してみる。

全然関係ないけどブロントさん名言集が文字化けしていた(Firefox)

フレームの右側が全部文字化けしている。

開くたびに別の文字に化けて駄目だった(Firefox)

フレームの右側がほぼすべて“REPLACEMENT CHARACTER” (U+FFFD)に。

beatoraja 0.6.4に関する私的memo

にbeatoraja 0.6.4が公開されたようだ。

witchcraft (SCROLLMAGIC14)が、図表著者の意図した通りに再生されるようになった。(「BMSサイトとか差分とか」によれば、差分を適用すべき元BMS“witchcraft”mok2lnbms.6.ql.bz/nijihaifu.htmlから入手できるようだが、私はいつ接続してもtime-outが返される……

beatoraja-config.batからconfigurationを起動し、プレイオプションtabを選択する。私はbeatorajaのversionを上げる度に、全MODEにおいて「レーンカバー」「ハイスピード固定」を無効にする。しかし5 keys図表に対しては、「ハイスピード固定: OFF」が適用されないように見える。

適当にBMS pathを登録してから本体を起動し、選曲画面で6 keyを押してkeyconfigを行う。私はEXE化したbeatorajaに図表fileを直接Drag-and-Dropして遊ぶ人なので、以降選曲画面はほぼ見ない。

Windows 10 October 2018 Update (Version 1809)

おそらく私も無事にUpdateできたと思うんですが、一部の関連付け設定がUpdate後に変更されていたりして、数時間ほど整備にかかりきりになっています。なぜかBoot Driveの容量が限界近くまで圧迫されている……?? 後日原因を調べます。今日はもう寝る。

以下の現象は仮想環境のWindows 10 Version 1809では再現されなかったので、おそらく私の環境の何かが原因と思われます。Windows 10 Version 1809に更新後、たまにBMSE起動直後からViewer選択枠がfocusされるようになりました。この状態でViewer選択枠をMouse左clickすると、Drop-down listが一瞬だけ展開され、即座に巻き戻ってしまいます。Tab keyなどでfocusを外して戻すか、選択中のviewerを一度でもBMSEから呼び出すと、以降は普通に左clickでDrop-down listを展開できるようになります。私は頻繁にviewerを切り替えるので、この地味な引っ掛かりに地味に苦しめられています。

SmartChartGenerator (version )

これはBMS形式の図表を分析してgraphを描画するapplicationです。Notesの密度や連打の激しさなどが、秒単位または小節単位でplotされます。BMSにおける小節の長さは演出の都合で伸び縮みしうるので、通常は小節単位を選択する理由はないでしょう。連打系の図表を描画すると興味深いです。

「池田ァァッ‼ てめェさっきの🀟はなんだ‼」

約物に後続する和字間隔をCSSで制御したい。一括置換するには条件指定がややこしい。見出しでいえば末尾のU+203CU+300Dの間には和字間隔を入れたくないとか、「てめェ」が行頭に来る場合は直前の二重感嘆符の後に和字間隔が挿入されてほしくないとか。Web上のtextはどこで改行されるかわからないのだから、plain textとして和字間隔を書き込むのはそもそも悪手。CSSはやくきて、やくめでしょ。CSS Text Module Level 4text-spacingを眺めていて、昔そんなようなことを考えたなあとふと。

Kisara9i (version )

BMS fotmatの図表を編集するためのapplicationsのひとつであるBMSEは、変換ウィザードという非常に便利な機能を持っています。Kisara9iは、変換ウィザードの機能の一部を切り出して独立させたapplicationです。BMSEの後継的存在であるiBMSC/μBMSCは変換ウィザードに相当する機能を持たないので、Kisara9iはとりわけ「iBMSC/μBMSCを用いてBMSを一から作成するusers」にとって大いに役立つはずです。ただしこれを使いこなすには注意深さが必要かもしれません。

Kisara9iが整理する対象は#WAV定義に限られます。#BMP/#BGAは整理されません。軽率に^*\.(wav|ogg|bmp|png)$などと指定すると、#WAVに定義されていないBMPsやPNGs」がすべて消えます#STAGEFILE#BANNERに定義済みの画像も含めてです。注意書きを読めばそういう意味だとわかるはずだし、変換ウィザードとの違いを理解したうえで使うぶんにはものすごくありがたいapplicationです。

Kisara9iが変換ウィザードを凌駕している部分もあります。BMSEの変換ウィザードは「BMSEが開いている図表」のみが対象でしたが、Kisara9iは複数の図表を対象にできます。たとえば以下のような構成のBMS folderが存在するとき、

sample_BMS_folder/
  • A.bms
    #WAV01 a.wav
    #WAV02 d.wav
    #00111:01020102
  • B.bms
    #WAV01 b.wav
    #WAV05 e.wav
    #00111:01010101
  • C.bms
    #WAV01 c.wav
    #00111:01010101
  • a.wav
  • b.wav
  • c.wav
  • d.wav
  • e.wav
  • f.wav

Kisara9iにA.bmsB.bmsC.bmsを一括dropしてbutton1を一回押せば、全図表の#WAV定義が一発で整理され、「どの図表からも使われないfiles」だけが一発で消えてくれます。各図表に専用の音声などを追加して作り込む性格の図表編集者にとっては、これは素晴らしく便利です。神。

その他、気付いた点や感想など。
  • 定義整理後に出力される図表filesにおいて、#BMP関連行はEXPANSION FIELDに隔離されます。
  • 定義整理後に出力される図表filesにおいて、#TITLE (^^) [5keys Normal]は、#TITLE (^^)および#SUBTITLE [5keys Normal]に分解されます。
  • #TOTAL未定義の図表には#TOTAL 260が補完されたり、一様に#LNTYPE 1が追加されたり。
  • 相対pathの定義は整理はされますが、図表の同位に存在するfilesだけが実際に削除されます。図表の親階層や子階層に存在する音声filesは未使用でも削除されません。そりゃそうだという感じもしますが。でももしかしてFilename入力枠の正規表現をいじればどうにかなったりするのかな。子方向はともかく、親方向がどうにかなったら危ないでしょうけど……
  • 多重定義は普通にうまく対応してくれるようです。当方あんまり丁寧に検証してないけど。
  • Sort by filenameは、階層分離符も含めてUnicode codepoint順に並べ替えるようです。
  • #RANDOMは構文解析され評価されます。無作為に選ばれた結果を基準として定義が整理され、filesが削除されます。出力される図表filesには分岐構文は残りません。これはちょっと困る感じですが、厳密に対処しようとするとcodingがものすご面倒くさそうですし、図表編集者の側でうまく工夫するべきでしょう。
  • 定義が#WAV01 a.wavで実物がa.oggのとき、#WAV01が図表内で使われていてもa.oggは消えます。図表作成段階で拡張子を忖度されても困るので、この挙動は妥当と思います。

あ〜、#TOTAL補完や#LNTYPE補完や暗黙的#SUBTITLEの明示化など、予想外の結果が出力されうるので、整理後の図表をNotepad等で確認しておくほうが、いまのところ安全そうではありますね……

[翌日追記] Source codeも公開されていました

witchcraft (SCROLLMAGIC14)

#SCROLL拡張命令の応用例がついに登場! 現時点における最新安定版beatoraja 0.6.3では正しく再生されないうえ、差分を適用する対象のoriginal BMS “witchcraft”は公式からはもうdownloadできないという、遊ぶまでのhurdleが高い差分ですが、見るだけでも刺激的です。停止しているように見えて実際はる箇所に#STOP sequenceは一切使われておらず、すべて#SCROLLzzでぐにゃぐにゃされています。

[追記] 先日公開されたbeatoraja 0.6.4では、この図表は正しく再生されます。

Yahoo!ジオシティーズサービス終了のお知らせ

匿名の方々が素早く教えてくださいました。いつもありがとうございます。

Yahoo! GeoCities(日本版)はBMSに限らずInternet黎明期の最後の牙城といった立ち位置で、見出しの記事を見ても分かる通り採算度外視気味に踏ん張ってくださっていました。とてもありがたいことでした。記事では歴史的経緯から移転先まで細やかに解説され、JavaScriptによるちょっとしたeaster egg(mobileでは見られない模様)さえ仕込んであります。

私の信頼できない記憶によれば、BMS界隈においてYahoo! GeoCities(日本版)は、おもに小規模のdata storage serviceとして利用されていました。たとえばMUSIC W@VE (log) No. 150 “Merry X’mas Mr. Lawrence”登録作品)が時点でまだdownloadできるという事実から、Yahoo! GeoCities(日本版)の資料的価値を理解していただけると思います。

この件によって影響を受けるBMS関連resourcesは多数あるはずです。私はそれらを把握しきれていませんが、見かけた範囲では…… Bit Upper氏の一部作品群.REDのファイル倉庫BMS作家の多くがお世話になっていると思われるSoftware Synthesizer Synth1、などなど。BMSと関わらない分野でも、VIPRPGまとめですとか、古いvideo games関連まとめですとか、WeblogやSNSに収まらないpersonal websitesの混沌たる文化資産がまるっと失われます。私もpasswordを忘れて更新できなくなったwebsitesをいくつか持っていて、今後の対応を思案しています。

[翌日追記] 既にしてNekokanさんがまとめてくださっていました。え〜…… そうそうたる顔ぶれなんですが……

危なそうで危なくない少し危ない見通し。二十年前から続く老舗のpersonal websitesのひとつ、BMSA制作講座 Version 3.11は2019年3月末に消えます。BMSA制作講座 Version 4.01 finalはそれ以降もしばらくは残るはずですが、FC2側のserviceもいつまでも維持されるわけではないでしょう。古いwebpages/archivesはたとえmaintenanceされていなくても「昔の形のままそこに残っている」というだけでありがたいのですが、歴史を残しinfrastructureを維持するにも相応のcost/riskが生じる以上、いつかserviceが終了するという流れそのものは仕方ないのだろうとは思います。整備されなくなったHTMLなど脆弱性要因でしかないだろうし。

個人でserverを運営できる草の根管理者の存在が、今後は相対的にますます重要になっていくと考えられます。たとえばNekokan氏のような。

(追記:見出しを書き忘れていた)

ほんま体大丈夫

四〜五週後には骨はくっつく見込みなので大丈夫大丈夫。心こそ窮まっていますが

あと返信不要の匿名さんもありがとうございました、養生しもす

左腕が折れ暫く休みもす

昨年末から急に難易度が上がりすぎワロタ

数日前に悪夢を見て丸一日調子悪かったが

あれはもしや台風の影響だったんだろうか。私の場合、現実の体調が悪夢の引き金になりがちなことを自覚しており、今回もそうだった可能性は高そう。内容をまだ微妙に覚えていたから書くと、尊敬する人と一緒の教室で講義を受けるそこで私が何かをやらかして、その人に失望され軽蔑され衆目の只中で真正面からこきおろされる、みたいな流れ。書いてみるとわりとしょっちゅう見ているpatternのひとつであることに気付かされる。今回は直接の面識がない人に裁かれたけれど、実際知っている顔ぶれになじられる場合も多々ある。

芋蔓式に今年見た夢が思い出されてきた。現時点でのworstは初夢の次の回のもので、後ろ手に拘束されて男子便所の汚い床に転がされた私が男たちに囲まれて一斉に立ち小便をひっかけられる。これはそういう願望があるというわけではないはず。当時の私が尿閉を患っていたからであるはず。

今年も⅔が既に過ぎたのだなあ。

大いにへこんだ

そのnewsを知った私は腰痛であるにもかかわらず椅子から立ち上がれなくなったんだが、他の人々の反応を検索するとなんかみんな淡々と受け入れているように見える…… 私は詳細を確認することを数回試みて毎回途中で耐えられずにそっとtabを閉じてしまうのでいまだに内容を最後まで確認できていないというのに…… あなたたちはこういう経験を一体どうやって乗り越えているの……

俺が踏んだのってもしかして

いや、昔から神経質にUSB機器の着脱を行っていたし、記憶が確かなら十日前も「安全に取り外しできます」のmessageを確認してから取り外したはずなので、自分の場合はこれが原因ではなさそう。そもそも外付けHDDが認識さえされなくなった症状は、記事で引用されているTweetsとは異なるし。

結膜炎がようやく治りそう

Kitchen-sinkの排水口を掃除中に汚物が目に跳ねたのがおそらく原因。先月からの痒みが今朝あたりからようやく治まってきた。充血はまだ続いている。

CAVERNS OF KHRON

一度clearした後、titleで燭台に攻撃すると、StageやCostumeを変更できる。遊んだのがだいぶ前なのでうろ覚えだが、たしか洞窟・雲・溶岩・遺跡の各fieldをclearすると各衣装を獲得できるほか、洞窟clear時の死亡回数が40回以下・30回以下・20回以下・10回以下で各衣装獲得、BOSS Rushを死なずにclearすると衣装獲得、洞窟を最初から蛞蝓まで死なずに駆け抜けると衣装獲得、だったかな。全部集めると「あなたはこのgameをcompleteした」というmessageが現れた気がする。

La-Mulana 2でCostumesが達成率の目安になっているような感じなのを見て、ふと思い出した。

外観のminor changeを以て達成率とする手法はExplobersでも使われていた。って、いま確認したら2018年5月のupdateで“Slow motion”が追加されていた! PIXEL PERFECT!😢と嘆いていた彼もこれなら楽勝でclearできそう。Update bonusに驚かされた。古い版でcomplete済みなんすけど……

CYANiDEではその手の報酬は用意されなかった。個人的にはここまで記号化されたplayable characterの見た目が多少変えられたところであんまり嬉しくもないしな〜…… Skyrimとかならともかく……


今朝は糞暑くて午前四時に目が覚めた。日中も暑くてスズメバチが飛び交っていて地獄だった。

La-Mulana 2雑感

註:Gameの進行に関わる情報に触れています。Spoiler warning.

表裏の各fieldsとGuardiansの関連性をなんとなく追ったdigest版BGM集

La-Mulana 2は前作や過去作やその他のvideo gamesからmotifを引っ張ってきてさりげなく混ぜ込んでいる。NESさえ持ったことがない無教養な私にはそのすべてを指摘することはできない。

Sekaiju no NeRoots of YggdrasilGuardian “Fafnir”

今回は最初からplayersをに乗せることが強く意識されているようで、Guardians二体を討伐するまではほぼ一本道。最初からあちこちに行けた前作では二人に一人が遺跡にさえ入れず、五人中四人が最初のGuardian “Amphisbaena”さえ倒せていない。序盤がtutorial同然になった今回は、いまのところ二人に一人は最初のGuardian “Fafnir”を倒せている。他人に片方だけ勧めるなら断然続編のほうだな〜

SOUND TRACK #02: LA-MULANA, #03: Miss Explorer, #06: Previous Adventure, #10: In Yggdrasil…これら4曲の根音はたぶん全部同じで、その理由も前述のを作るためとみた。口笛がなめらかにつながる感じが好き。“Miss Explorer”のsaxが峰不二子感あふるる。

Shinzoku no ShiroDivine FortressSenshisha no YakataValhallaGuardian “Vritra”GR3#03)

VritraがAzraelそのものであることは、HARD MODEを遊べば明白だった。HARD Vritra (One Finger)は初期鞭でも達成できた(糞強かったが)。Javaはもはやsoundbank.gmをsupportしていないらしい。私は自分が古いJavaを導入して安全に運用できるとは思えない。

seikaiAnnwfnGuardian “Kujata”

このgameを代表するGuardianはこいつでしょう。とても面白いBOSS。頭突きされるときにboatの端に乗っていると、傾斜による滑りという追加actionの活用例のひとつが拝める。One Finger実績を阻む最大の障害。初版Kujataは豆腐だったのに、version 1.1.1.2–1.2.2.2のKujataはlast BOSSの倍は強い。前作HARDのMotherやPalenqueにSub-Weaponsを禁止して挑むよりもつらい。勝てないので装備を調えて再挑戦したらKujataまで攻撃頻度と体力が上がっていて、近年まれにみる絶望感を味わった。

FumetsuSenImmortal BattlefieldGuardian “Jormungand”

Stage BGMは前作の“Song of Curry”的な位置付けかな、吉田建設の歌・二番(Genre: Rock)みたいな。Jormungandの曲にはThe Forbidden Realmが入っている?(私はもちろん遊んだことがないけれどSound Trackだけは買っていたのだ。) 前作Palenqueの曲にもPROTECTERSを感じたし、彼らはそういう担当なのかな。どっちも最後っ屁が糞すぎて笑う。Jormungandは覚えれば楽勝なのが救い。

Shisha no MonGate of the Dead殿MeiseiReidenDark Lord’s MausoleumGuardian “Aten-Ra”

La-Mulana定番の「表BOSS」で内容的にも音楽的にも関連があるやつ。基本Single-Screenのこのgameには珍しく、Aten-Raは水平方向scrollingを活かしたBOSS。弱いが即死pressがあるので適度にうざい。Raさんは生命力とか性的魅力とかに溢れていて好き。

Redcapを白き台座に誘導しようと四苦八苦して数時間を無駄にしたが、数時間の損失で済んだのでまだましな部類。というか白き台座の謎は無視してもclearできるので有情。

Enhyō no KozueIcefire TreetopGuardian “Surtr”

Surtrの曲は通して聴くと普通に良いのに短期決戦を強いられるせいでまともに聴けないのが不遇。Surtr自体は面白く、誘導が成功するとHARDでさえ豆腐なところが特に爽快。爆弾屋でじわじわくる。

EikyūgokuEternal Prisonにもここで触れておく。前作の迷いMayoi no MonGate of Illusionに相当するfieldで、“EDEN”も絡むし、曲も三拍子だし、前作より立体的な惑わしの構造を実現している。Last Guardian “Hel”は前作のBaphometに相当し、実際にBaphometのthemeが聞こえる。R-TYPE ⅢのMother Bydoを彷彿とさせる拍子と回転腕。R-TYPE Ⅲはgameとしても音楽としても面白くて試遊台で二周した(謝罪)

高天原TakamagaharabyōTakamagahara ShrineGensoKontonAncient ChaosGuardian “Anu”

他のstageの曲も邦楽的に聴こえるけど、高天原廟のそれは開き直って表拍を強調しまくっているあたりに和が感じられて好き。Anuは装備が揃っていればHARDでも多少強い雑魚という印象しかないが、私は一周目は銀盾さえ見つけられなかったので初見は無理だこれって感じだった。

TenjaMeikyūHeaven’s LabyrinthJaonKaiHall of Malice(Ungeared)JaonKaiHall of Malice(Geared)Guardian “Echidna”

天者の読みはTen-shaかもしれないが、InjaEnjaKanjaKenjaShinjaNinjaHenjaの顰に倣った。邪怨の読みはJa-enかもしれないが、検索したら2004年に制作された低予算邦画が引っかかったので。StageやBOSSの見た目の印象通り、邪怨回廊の曲には前作のJigenKaiDimensional Corridorのthemeが混ざってくるし、Echidnaの曲には前作Tiamatのthemeも盛り込まれている。

雑多な回想

Tezcatlipocaと初遭遇してなんとなく倒し方が分かって粘って倒すじゃん? したらXelpudから通信が来てチュルンッとか言ってるの。なにこいつって思ったけど後から考えたらそれ必須情報だったんだよね。でもTezcatlipocaの左の画面に初めて来たときにそんなhint出されても分かるわけないじゃん。この時点で五本柱とか見てなかったうえに画面内にはそれっぽいものが何もないんだから。結局「保留」のmarkerをつけて未処理案件に放り込んでそのまま順当に忘れて自分で盲点を作ってしまって最後までチュルンッ関係で詰まってたんですよね。Brahmaの試練とかは普通に解けたのに。

そのBrahmaの試練はめちゃくちゃ面白かった。考えて解けたときのCatharsisが類を見なかった。今回は六芒星やBrahma地図などの視覚的な訴求力でもって意地でも遺跡の全体像をappealしてやるぜという強い意気込みを感じたし、実際それは前作よりもはるかに高い水準で達成されていたと思う。

今回は最初から歩行速度が高く、そのかわりに土偶服という「鈍足化するが無制限遠距離攻撃と酷環境耐性が得られる装備」が用意されているのも良かった。うまいと思う。

あと跳躍後の空中制御が効くようになったしのけぞり落下中でも復帰するようになったので、状況に介入できる機会が増えて退屈しない。かわりにいちいち針に刺さるようにしてbalanceした感じ。しゃがみや梯子への飛びつき・飛び降りも、それをやらないと仕掛けが解けなかったりdamageを負わされるような状況がちゃんと用意されている。特に意味もなくしゃがんだりするのも楽しいし、それができるというだけでも動かしていて気持ち良いから重要だと思うけど。梯子を掴む音がまた良いんだこれが。

白状すると鎖鞭の取り方に終盤まで気が付かず、半分HARD MODEみたいな状況で必死こいてました。それでも通常難易度のGuardiansはどうにか倒せるようなlevel designだったし、考えてみれば「解かなくても構わない仕掛け」がけっこう多いね今回。斧とか、無視できるけど解けば得する系の。氷面の聖杯部屋の壊せる壁に気付いたのはOne Finger実績達成後だった。

Alsedanaは冥界に出てくるかな〜と思ってた。成仏されたい。

あとなんか書こうと思ってたことあった気がするけど忘れた。思い出したら追記するかも。

以下追記。自分の中で自明すぎて忘れていたけど、前作が「男が洞窟に潜る話」なので今回は「女が樹に登る話」なのかな〜と、遊ぶ前は安易に思っていたわけですが。実際はそういう中学生男子的なあれよりは、という概念が重要視されていた感じ。良かった(小並感)


一言でまとめると最高でした。

Computers hate me

容量0.9 TiBの外付けHDDをformatして約30 GiB相当のdataを移していたところ、HDDが突然Disk Managerからさえ認識されなくなり、移したdataが完全に消えました。時を同じくしてfilerのContext Menu Extensionsがなぜか一切表示されなくなりました。寝起きの思いつきでfilerをuninstallしたところ問題は解決しましたが、当然ながらtabs collectionやbookmarksやuser scriptsは全滅しました。なぜbackupする前に軽率に行動してしまったのか。Windows歴がもうすぐ20年に達するというのに初心者のような為体であり、昨年の私が送受信済みのE-mailsから解き放たれたように、今年の私は取り組んでいた雑事から自由になりました。hopstepを順調にこなしてしまったようなこの感じ。

あああああ…… Filerに登録していたMouse Gestures等の設定も関連付けも全部消えてる…… 常用applicationsもほぼbookmarksに頼り切りだったから覚えてないし…… 突然四肢をもがれたようなこの感じ、もどかしさに苛々させられるのは確かだけど「ああ、またか」程度でだんだん流せるようになってきているのが厭だなあ。実際もう包丁とか利き手で使えなくなって数年たってるけど、受け入れてしまえるものなんだよな。とどめをさしたのは自分自身なのに、まるで他人事のように……

追記

先日の日記について、寝起きの頭で早合点していましたが、見直してみたら紹介がはばかられる理由は特にありませんでした。匿名氏から教えていただいたSHOCK.C氏のscrolling図表、UTTER (S.C.MIX)

あと“MAX1120 (140ver.)”という、titleから内容が察せられる感じの図表も教えていただきましたが、こちらはLR2IRにも登録されてないそうなので、何かの限定公開とかそういう……? 前後の事情が分からないので紹介のみにとどめます。 https://web.archive.org/web/20030112014801/http://www16.big.or.jp:80/%7Eshockc/bms/c_max1120_easy.rar

古い作品がBPM詐称しがちなのは、当時BMS player applicationsの大半がpixel判定だったことも一因であるだろう、というごもっともな指摘もいただきました。古い環境では、速い曲ほど判定が厳しくなり、一方で遅い曲ほど判定が緩くなるという問題がありました。「低速VERY HARD判定」などもpixel判定の産物といえそうです。現在主流のBMS applicationsは、問題を既に解決しています。

そういえば昔のBPM変更は自然数のみで255が上限だったりしたんでしたっけ。たしかしょっぺ人氏が普通に#BPM 300のBMSを「新春カラオケ大会〜ボーカルBMS対決〜」に登録されていたような気がしますが、私が当時集めていたBMSは全滅の憂き目に遭ったので確証がありません。BPMや小節長を半分にするようなscrollingは一切使っていなくて驚かされたような記憶があります。

LA-MULANA 2をclearした

エゴサーチしてて、131さんが自分のBMSを評価してくださっているのを見て本当に感動しました。またBMSつくってみたくなりました。

つたないwebsiteを消さずに続けていて良かったです。私が熱中したBMS作品を生んでくださった方に対して少しでも何かをお返しできたなら、usersの一人としてこれに勝る幸せはありません。懐かしい方の新作BMSを遊べるなら嬉しく思いますし、もし遊べなくても、うん、まあ……うん。


以下、8月1日の日記6月19日の日記に関連する話題です。数日前に匿名氏から“Boldman's Anchor”の動画を教えていただきました。動画でみるbeat indicatorはたしかに曲の拍子と噛み合っていません。曲を聴く限りでは普通に⁴⁄₄拍子ですが、indicatorは小節あたり6回明滅しています。

これは単純に小節長を伸ばしたというよりは、「⁴⁄₄拍子曲のBPMと小節長をともに¾に縮小したうえで、縮小済み小節を二小節ずつ組にした」という感じでしょうか。

逆の言い方をすれば、「⁴⁄₄拍子の曲を、⁄₄拍子の図表として解釈したうえで、さらにそのBPMと小節長をともに¾に縮小した」という感じでしょうか。

どう表現するのが正しいのかちょっとわかりませんが、「BPMと小節長を、同じ比率で伸縮する」「二小節ずつまとめる」という二つの操作がこの図表には施されています。比による伸縮は音楽とは無関係な図表の都合で、小節連結のほうは拍子をどう解釈するかという音楽的な話になるのかな。このうち前者を#SCROLL独自拡張命令などで肩代わりすれば、強いてBPMを詐称する必要もなくなり音楽的には筋を通せるんじゃないかな、といういつもの話に。いや音楽的整合性とかはどうでもいいんですが、視覚的な気持ちよさに直結するindicatorを狂わせないような図表作りは重要と思いますね。

同様の図表scrolling操作の実例として、匿名氏からは往年のSHOCK.C氏のいくつかのBMSに関しても教えていただきました。これらはさすがにここに記すにははばかられる感じだったので、ありがとうございましたとだけ。というかよくもまあURLぽんぽん出てきますね⁉>匿名氏

で、わりと古めのBMS作品にscrolling操作系図表の作例が多く見えるのは、当時はHI-SPEED関連optionsが未整備あるいは大雑把な倍率しか用意されていなかったからかな、などとふと思いました。だからこそ図表著者側が先回りしたくなる感じがあったのかもしれません。今はまあ、10000 BPMを超えるようなExtratoneなども何の配慮もなくそのまま図表化されていたりするので…… 9年前の作品を「今」と言ってのける時間感覚にわれながらびっくりしますが……

Visual C++ Runtimeのsupport期限に関する、『窓の杜』の記事

いくつかのBMS関連applicationsも、Visual C++ Runtimeを使用しています。私はちょっと今まともに思い出せそうにないのですが、あ〜〜〜……

Visual C++ 2005 Runtime (only if user uses Windows XP/2000/Me/98):
Visual C++ 2010 Runtime:
Visual C++ 2015 Runtime:

思い出し次第、listに追記するかもしれません。あの、x86/x64とかもう全然覚えてないので……

某BMS作者氏がLA-MULANA2にちょい役で出ててふいた

ふと書いておこうと思ったので更新

Computerの電源を入れたらsaunaにfan heaterを設置したも同然になった。腕からは蓮の花托のように汗が噴き出し、mousepadが即座に湿って使えなくなった。夜なのに蝉がうるさい。

beatmania APPEND GOTTAMIX “HELL SCAPER”と、beatmania 5thMIX “HELL SCAPER”は、BPMは同じでありながら、図表のscrolling speedが異なる。似た例は他にもいくつかあったはず…… 暑くて思い出せないけど…… ああそういえば、私はbeatmania THE FINALでしか遊んだことが無いので初出のbeatmania 7thMIXでどうだったかは知らないが、REFERENCEも妙に速かったような記憶がある。

drummaniaAcross The Nightmareも何か妙な細工をしていなかったっけ? OPTIONでHI-SPEEDをつけている動画ばかりだから確認できないけど(間違っていたらごめんなさいね)、

  • 表記上のBPMは300
  • Scrolling speedは150 BPM相当
  • (おそらく表記上のBPMと辻褄を合わすために、)全小節の長さを半分にしていた

つまり感覚的には「150 BPM、のわりにはやたらと小節線が降ってくる」。一部のBMS作家諸氏がこの技法を参考にしていたような記憶もある。固有名詞が汗と一緒に身体から流れ出ていく…… たしかAozuna氏は何かの作品で確実に同じことをやっていたはずだが、作品名を思い出せない…… 

何が言いたかったのかというと、Bemuse/beatoraja(0.6.2以降)/raindropが実装する#SCROLLzz/#nnnSC:拡張命令なら、前述の例のように図表だけではったりを利かせたり手加減したりする目的でも「実際のBPMの通りに図表を組んで、後からscrollingを調整する」こともできるだろう、ということ。

Scrolling関連beatoraja独自拡張命令備忘

beatorajaの拡張にスクロールスピードに関するものが追加されたらしいです。

https://twitter.com/ryougae_samurai/status/1018105368163962880

お知らせいただきありがとうございます! に0.6.1がreleaseされていたんですね……

Bemuse由来の拡張命令#SCROLLzz/#nnnSC:は既に作例があります(“Multiplex” / Dolphin)。この図表は件の命令を用いて、実際のBPMが変動する状況で図表のscrolling speedを一定に保ちます。beatoraja 0.6.1は件の拡張命令を知らないので、LR2他と同様にこの図表のscrollingを加速・減速します。

beatoraja 0.6.2はBMSON書式においても同等の独自拡張を施します。

前述の“Multiplex”の該当箇所をBMSON書式に変換すると……
"bpm_events": [ … ],
"scroll_events": [
    {"rate": 1.8, "y": 0},
    {"rate": 1.714, "y": 12480},
    {"rate": 1.636, "y": 13440},
    {"rate": 1.565, "y": 13920},
    {"rate": 1.5, "y": 14400},
    {"rate": 1.44, "y": 14880},
    {"rate": 1.384, "y": 15360},
    {"rate": 1.333, "y": 15840},
    {"rate": 1.285, "y": 16320},
    {"rate": 1.125, "y": 35520},
    {"rate": 1.111, "y": 50880},
    {"rate": 1.097, "y": 51840},
    {"rate": 1.084, "y": 52800},
    {"rate": 1.071, "y": 53760},
    {"rate": 1.058, "y": 54720},
    {"rate": 1.046, "y": 55680},
    {"rate": 1.034, "y": 56640},
    {"rate": 1.022, "y": 57600},
    {"rate": 1.011, "y": 58560},
    {"rate": 1, "y": 66240}
],

負数指定によって図表を逆流させることができるらしいので、今後はflip bookめいた詐術無しでも手軽に図表を踊らせることができるようになるかもしれません。

LongNotes関連beatoraja独自拡張命令備忘

wish on the skyをbeatorajaで遊ぶと、playersがLongNotesを図表の指示通りに押下できない図表が指示する通りに押下できていない間、Groove Gaugeが減少し続ける。この変化はbeatoraja独自拡張命令#LNMODEによる。鍵盤の右側にturntableを構える環境(いわゆる2P側)で“wish on the sky”を遊ぶと、曲の展開に沿って運指が右側に追いつめられた挙句「右端の鍵盤押下状態を維持したままturntableを回転させ続ける」という曲芸を強いられる。予習なしではこなせないであろう攻略性……そういうのも良いよね!

Mifis -Confinement-や、RIE-CHAN MADNESS ~ Director's Cut: hitoGoroshi_no_yoha.oggのPMS発狂図表のように、LNも明示できる。前者はLR2との互換性を考慮した結果と思われる。終端判定の有無は演奏感に影響を与えうるので、私は#LNMODEを大いに支持している。

(TBD)のNORMAL/ANOTHER図表も#LNMODE 3を使っている。NORMAL図表は#036#038で、「休符の無いphrase・かつ同じ音階・かつLongNotes」という状況を「ええ〜……」って感じの方法で処理している。

uet_bms_collection収録作品“Covenant”は、現時点でbeatorajaが持っているBMSON独自拡張propertiesを全て使っている。この図表の後半はBSS祭りの様相を呈し、まさに図表の顔としてpreview音声に抜粋されている。

詳細:
  • info.ln_typeによって、この図表に現れるLongNotesの種別が大域的に指定される。

    "ln_type":3,
  • さらに、sound_channels[n].notes[idx].tによって、各NotesのLongNotes種別が局所的に変更される。具体的には#037#041のLongNoteのみ、HELLでないCHARGE NOTEに指定される。

    {"c":true,"l":3840,"t":2,"x":8,"y":35520},

    この一個のLongNoteはBMSON Layered Noteでもあるので、前述のcodeは複数個所に存在する。

  • さらに、sound_channels[n].notes[idx].upによって、各LongNotesの終端に別の音声が割り当てられる。これは、ありていにいえばbeatmaniaIIDXのBACK SPIN SCRATCHを再現できる代物。

    {"c":true,"l":3840,"t":2,"x":8,"y":35520},

    "x"列座標8番における、"y"座標3552039360区間のCHARGE NOTE終端位置に対して、以下の終端専用Noteが重ねられる。

    {"c":true,"l":0,"up":true,"x":8,"y":39360},

    "up" propertyそのものが存在しない場合、LN終端位置に重ねられた音声は、BGMとして自動再生される


beatorajaのBMSON拡張命令"up"は、turntableのみならず、鍵盤列に対しても使用できる。FF4 バトル2追加図表で試した。書庫内の図表二枚はまったく同じ内容だが、片方test-1は図表著者の期待通りには音声が再生されない。すくなくともbeatoraja 0.6時点では、BMSON code上において"up"よりも先に始端側のLongNotesが記述される必要がある。場合によっては"up"を後方に記述するためにsound_channelsを多重定義する必要もあるかもしれない。

無名戦#15 + A-1#8 on Bemuse

BMS event参加作品群(98 works)が丸ごとWebで遊べる! Umlaut + 漢字」のような「従来BMS applicationsでは表現できなかった文字の組み合わせ」も普通に表示されていて凄い。

また、「Bemuseが大文字の図表拡張子を認識しない」というのは貴重な情報。同様のBMS applicationsとしてiBMSC/μBMSCやPulsusなどが存在する。

図表やreadme.txtがUnicodeな作品も増えてきているし(最近だと抜駆不辣首瑞雪など)、2018年春のソフラン差分祭り第2回」にはvs_yūdachiなるfolder名のBMSが含まれる。

(そういえば春祭り動画集は非常に素晴らしく、前述のdownload場所の各曲解説欄に個別に動画への参照を差し挟むとものすごく宣伝効果がありそうだなあ、と思った。)

Cybergence MK.2は最初は[Antem]Cybergence MK_”というfolder名で配布されていた。おそらく日本語Windows環境でfilenamesがCP932のbyte列としてZIP圧縮され、おそらくMac OS環境で展開された時点で機種依存文字「」が文字化けし、package初版には[Antem]Cybergence MK_なる改竄されたfolder名が収録されていた。現在は元の書庫内の名前もpackage内の名前も修正済み。

直下型地震

大阪は本日も明日もそこそこ蒸し暑いうえに雨が降る……

こ゚か゚こ゚か゚aŋoŋahaŋoeŋa

Blink系browsersで先日の日記のtext fileを開くと、日本語Windows環境では文字化けするようだ。

Google Chrome 55以降ではencoding変更機能が削除されたこの機能が危ないから」というのが削除理由だったはず。エンコーディングの切り替えによるSelf-XSS」などで攻撃の発想例が見られる。私もBMSON Checkerではいちおう対策していた(FirefoxでHTML sourceを見ると分かる)。

Web browsersはencodingを自動判別してくれはするけれど、ことBMSのように大半がASCII英数字で記述されるtext fileでは自動判別の精度に期待できないし、「users側がencodingを変更することによって文字化けに対処すること」を許さない前述のような環境もある。

BMS applicationsに非ASCII文字をさせる方法は、やはり以下の二つしかない。

  • BMSをBOMつきUTF-8で保存し、BemuseやcharatbeatHDXなどのUTF-8対応機種で演奏する。
  • または、BMSをBMSON形式に変換し、beatorajaやBemuseなどのBMSON対応機種で演奏する。

ただし非ASCII文字をさせられるかどうかは、また別の問題。

先日の日記で示した例を、今回はZIP書庫で例示します(“AlitätriebのBGA適用版にUmlautを追加したもの)。“beatoraja default” skinが用いるVL Gothic書体(20141206版)は漢字とUmlautを含んでいるので、選曲画面や演奏画面などで漢字とUmlautを同時に表示することができる。

Umlautを含む文字列“Alitätrieb”と、漢字を含む文字列“BGA:自動車 原付”が、beatorajaの選曲画面に同時に表示されている。

beatorajaでLR2用themesを流用した場合にも同じことができるかどうかは、私は知らない。

Bemuseは文字描画関連処理をWeb browsersにほぼ丸投げできるので、当然のようにうまくいく。

日本語Windows環境上のBemuseの場合、Umlautを含む文字列“Alitätrieb”はSource Sans Pro書体で描画され、漢字文字列“自動車 原付”はMeiryo書体で描画される。

PulsusはBMSONをsupportしているので、非ASCII文字たるUmlautを正しく解釈してはいるはず。Umlautを描画できないのは書体の問題だと思う。

Pulsus 0.5.3の場合、Umlautを含む文字列“Alitätrieb”は“Alit?trieb”として表示される。

空調修理費弐万円無理

(あとどう調べても分からなかったんですが、BMSでウムラウト文字をタイトルにつける方法をご存知の方がいらっしゃったら教えていただけると超喜びます)

Alitätrieb / R*uLuru (第15回自称無名BMS作家が物申す!)

LR2上でUmlautを表示する方法はないはずです。LR2を無視して構わないなら二つ方法があります。

文字符号化方式は選択の余地がないので悩む余地もありません。Umlautと漢字を同時に表示できなければならない」という要件のほうが面倒かもしれません。

BMSE非公式Helpを少し更新した

Windows 10 April 2018 Update (Version 1803)以降特有の問題について軽く加筆し、linksを整備した。Microsoftのdocumentsはどうしてああも頻繁に所在が変わるのか。KB2575928とか到達できなくなってるし……。いっそ最初からInternet Archiveを参照するべきか。“Cool/Dead URIs don’t change.”

日記

BMS関連

拙作BMS
bubble / hitkey
二次配布BMS
ノイズの海と鯨 / moka
PARTY TIME IN MY DREAM / HAIJI
BMSE非公式ヘルプ
Lite
Lite-online
Full
Full-online
buglist
iBMSC
Web (Japanese version)
issues
BMS差分
a­nal­gam
boléro
Ketch­up
quovadis
SELF
yellows
Do not use non-ascii filenames
雑多なメモ
bmsplayer data
bms benchmark
Secrets - Feeling Pomu 2nd
grid2sec
bmx2xxx
BMx Outliner
BMS command memo
BMS command memo (Japanese version)
BMS EVENT LITE
#RANDOM BMS list
BMS #OPTION command
BMS Bitmap test
Extended BPM
STOP Sequence
BMS Edge Cases
BMS extensions proposed by Sonorous (unofficial Japanese version)
BMS 2.0 (unofficial Japanese version)
BMS Editors
Do not use non-ascii filenames
BM98 Kikuchan Version 3.30 Revision #4.2
BMSON Checker
_wsh_bms2bmson.js

その他

HTML関連メモ
Dakuten on HTML
nest1000
EVS
Nervous Cascading
Source Han Sans test
User-Agent String
CSS Logical Properties