Script Mapper をリリースして

 はじめまして。本記事は「Beat Saber Advent Calendar 2021」の記事になります。

https://adventar.org/calendars/6170

 本記事は私が開発した Beat Saber の補助ツール「Script Mapper」の紹介と、せっかくの機会なのでその設計思想について話したいと思います。

概要

 こんな感じに、いい感じのカメラワークを作ることができます。

経緯

 カメラを動かすこと自体は、かなり前から可能でした。しかし、従来のスクリプトでは、移動時間(何秒間動くか)は選べても開始時間(いつ始まるか)は選べませんでした。そのため、譜面の展開に合わせてカメラを動かすためには、
・譜面の再生時間をメモって
・それに合わせて移動時間を細かく逆算し
・実際にゲーム画面で一致しているかを確認する
 と、なかなかの苦行が必要でした。

 Script Mapper は、この点を解決するために「マッピングソフト上でカメラ移動の開始位置を指定する」というアイデアを導入しました。これにより、以上のような手間をかけることなく、ツールが自動的に移動時間を計算してれることにより、譜面の展開とカメラの移動を一致させることができます。

 このツールは、土台は私が作りましたが、後述するようにレイクンさんと仕様を共同考案したり、またイージング機能については彼一人が作ってくれたりしたので、私とレイクンさんの共同開発という形になります。

コマンドを決める責任

 というような実用上の経緯や意義は置いといて、「ブックマークにどのようなコマンドを入れたら、どのように動くようにするか」を決めるのは新しい体験でした。普段プログラムを打つ側として「なんでこの命令がこの名前なんだよ!」と思うことは結構多いですが、なんとそれを決める側に回ってしまいました。

 例えば、真正面にカメラを置く場合はどうしましょうか。最初は「front」というコマンドを想定しました。他に何か良い表現はあるでしょうか。ほぼ日本人しか利用者がいないことを考えると、割り切って「shoumen」なんていうのもアリかもしれません。

 その後、背後の見下ろし視点で同様に「back」というコマンドを追加しました。しかし、ここで「frontのマイナスパラメータと、backのプラスパラメータはどう違うんだ……?」という問題に気付きます。コマンドは増やしすぎると覚えきれなくなるので、なるべくシンプルにまとめた方がいいです。結局、「center」というコマンドの正負で制御することにしました。

実際の議論の様子

 こういった点は、プログラミング段階やテスト段階でいくらでもでてきます。なるべく万人にとって解釈しやすく誤解がないようにしますが、それでも場合によっては、リリース後にユーザーから「なんでこの命令がこの名前なんだよ!」と思われることになるのでしょう。

リリースしたら変えられない

 真に恐ろしいのは、一旦ソフトをリリースしてしまうと、後からコマンド体系を変えた場合、今までそのコマンドを覚えていたユーザーに、再び覚え直しを強いてしまうことです。長期的には改善であっても、局所的には改悪になってしまいます。

 更に、もしこれが何かのソフトの依存ライブラリとして使われている場合、変更されたコマンドを参照するだけでエラーになり、そのソフトを壊してしまいます。

 余談になりますが、プログラミングで依存ライブラリの多い実装を再現しようとすると、よく「バージョンアップで勝手にコマンドを変えてるんじゃねーよ!」とキレてしまうことがありますが(tensorflow、お前のことやぞ)、私がよかれと思って Script Mapper のコマンドをいじった場合、まさにそれをしてしまう側に回ってしまう訳です。

 つまり、一旦リリースをしたソフトは、他人に使ってもらう以上、後方互換性を保証する責任が発生するのです。「プログラミングは変数名を決めるセンスが重要」「最初に適切な名前をつけないと後で苦労する」とは言いますが、それの究極形です。しかし、リリースするためには、どこかのラインで「これが俺の思う合理的な体系だ!」と判断しなくてはいけません。

 このような感じで、プログラマとして「人に使ってもらう何か」を作る以上、気をつけなければいけないこと(特に変数名とかインターフェースの一貫性とか)を再認識する機会となりました。規模は小さいですが、独自の中間言語を作り出したことになる訳で、自分が決めたコマンド体系があるというのは、何かもう一つの宇宙を作り出したようで気分が良いですね。

みんなも使ってね

 話を冒頭に戻すと、このツールの目的はかっこいいカメラワークを生み出してかっこいい動画を作ってもらうことです。なんと、Yabutsubaki さんが Script Mapper の使い方をまとめた動画を出してくれました。みんなもこれを見てカメラアングル作成にレッツトライ!

 また、Script Mapper のサポートや開発に特化した Discord サーバー「Script Mapper Lab」も公開しております。よりやる気のある人はこちらにカモン。

この記事が気に入ったらサポートをしてみませんか?