乱数ツールのUIについて
なんぞこれ
3日目の記事がなかなか書けそうに無いので助走をつけるために書きなぐった記事です。
『乱数調整ツール』と呼ばれるものについて普段断片的に考えていることをまとめようとしてまとまらなかった。
『乱数ツール』概観
もっともベースにあるのは「乱数値リスト」を出力するだけのツール。
そこにプラスアルファして「特定の生成処理の結果を併記する乱数値リスト」。
つまりこんなやつ。
https://gyazo.com/53ef9a45c6b3c5b34945a4926b6cc1af
もうちょっと親切なツールになると入力した条件に合致するものだけを出力してくれたり、テキストファイルで出力してくれたりする。
「最低限乱数調整をするだけ」ならこれでも十分だが、やっぱり不便に感じてくる。
どうしても入力する条件が増えてくるのでコマンドライン入力が大変。
性格の入力などが煩雑になる(利用者が内部番号と照合するか、ツール側が日本語から数値に変換するか、どちらにしても手間が大きい)。
一般人はそもそもコマンドラインの入出力に慣れていない。
そこで「GUIで乱数調整ツールを開発したい/してほしい」という需要が生まれる。
条件入力はチェックボックスやドロップボックス、テキストボックスなどを介して行う。
入力形式が直観的にわかりやすい(個体値を半角スペース区切りにしたり、性格を数値に直して入力したりする必要が無くなる)。
うっかり入力形式を間違えてしまったり、一部だけ条件を変えて再検索したくなったりしたときに、その部分だけ入力を変えればよい。
見た目がそれっぽい。
「それっぽいモノが動く」というのは作る側のモチベ維持に大きく貢献する。
「それっぽいモノ」は使ってもらいやすい。
こんなかんじ。
https://gyazo.com/f8f774da998754b7974cb515c38aa040
長い間、ほとんどの乱数調整ツールはこのような「CUIの機能をGUIに移植したツール」どまりだった。
つまり「最低限の入出力機能を備えているか、あるいは入出力を多少快適に行える」程度のUIにとどまっていた。
私は2020年現在においてなお、ほとんどの乱数調整ツールはUIにおいて重大な欠陥を残している…と考えている。その欠陥とは「UIが内部処理の同一性に引きずられて不必要に統合されてしまっていること」、そしてその結果「実際の乱数調整のフローに即していないこと」である。
どういうこったい
https://gyazo.com/0b144049a2582177eabedc56ea6ce66c
例えば3genSearchを例に挙げよう。
この画面において「内部処理の同一性に引きずられて不必要に統合されてしまっている」点はおおまかに2つある。
まず1つ目は「同じ3世代乱数である」という括りによってRS/Em/FRLGおよび固定/野生/孵化/ID調整が1つの画面にまとめられてしまっている点である。これがよろしくないと思う理由は以下のとおりである。
ユーザはツールを開く前に『どのバージョンで何の乱数調整をするか』を既に決めていることが多い。
例えばEmで野生乱数をする場合、野生以外のタブやRS/FRLGはノイズになる。
操作ミスの原因になる。
Em乱数において「電池待機時間から初期seedを指定する機能」や「複数初期seedを指定する機能」は不要。
開発者視点においても、コードの煩雑化に繋がる。
1つのツールですべて賄える嬉しさはあるにしても、これの1画面前で分岐させるべきだと考える。
そして2つ目が、本来意図によって2つに分けられるべき検索処理が1つにまとめられてしまっている点である。要するに「『目標個体検索のための検索処理』と『ズレ調整のための検索処理』が同じ機能として提供されているのはよろしくない」ということが言いたい。
実際に乱数調整するときの手順を考えてみよう。たとえばEmで適当な色違い個体を出したいとする。
1. ツールに表IDと裏IDを入力し、待機できる範囲のフレームを入れて「色違いのみ出力」のチェックを入れ、「計算」ボタンを押す。
2. 検索結果から目標個体を決める。
3. 一度実機でツールの出力通りに待機を行い、出てきたポケモンを捕まえる。
4. ズレの確認のために捕まえた個体の情報を入力し、目標Fを入力して検索範囲を変更して、「色違いのみ出力」のチェックを外し、「計算」ボタンを押す。
5. 出力された結果からズレを把握してタイマーを微調整し、再度待機を行う。
6. 3 - 5を光るまで繰り返す。
……おおよそこの通りのはずである。
ここで1.の「検索」と4.の「検索」は、行為として全く異なるものである。その証拠として、1.の入力内容と4.の入力内容にはほとんど互換が無く、たとえばうっかり目標個体の消費数を忘れてしまったりしたら、4.の入力内容をほとんど変更する必要がある。しかし内部処理はほとんど同じことをしているため、開発者の視点からだと統合してしまった方が自然に思えてしまい、今までずっとこの不便さは見過ごされてきた。
この2種類の検索を区別すれば、たとえば個体条件の個体値入力が必要になるのは主に目標個体の検索であり、実数値入力が必要になるのはズレ調整のための検索である。
https://gyazo.com/3274c78d1b454da2342a3282b6db6984
かつて「性格入力をするときに性格補正がわかったほうが嬉しい」と思って3genSearchにこのような性格入力UIを実装したが、さらによく考えれば、このような入力が便利なのは目標個体検索のときであり、ズレ調整の際にはむしろ従来のドロップダウンのほうが便利である(入力したい情報は『実機の画面に表示されている文字列と一致する性格』である)。
……とここまで語ったものの、『乱数調整のフローに即したUI』を実現した乱数調整ツールは自分では未だ完成させられていない。強いて言えば開発途中のXDSearchがかなりそれを意識して作ってあるが、まだ不便な部分が多い。4genSearchで「セルをクリックしてseedをタブ間で受け渡しする」、XDSearchで「乱数調整のフローに即した構造を意識する」、8denSearchで「セーブデータ情報を先に作成させて外部ファイルに保存し、検索フォームをセーブデータ情報に依存させる」といった思い付きを実装してきたので、そろそろそれらをまとめて一つの完成形を見たいとは思っている。思っているだけ…。
理想としては「ツールの導線に従って操作させることで、乱数調整のフローの理解を助けられる」という状態を目指したい。
〆
「乱数調整は難しい」と思われている部分の内、ツールの構造が理解を邪魔している部分は、意外に大きいように思う。特定の用途に特化したデザインの(当然高機能な)乱数調整ツールがいくつも公開されるのは喜ばしいことだと思っているので、既に類似のツールがあるからと遠慮せず、良いツールを開発・公開してくれる人が増えることを願っています(最近乱数調整ツールに掛けられる時間がめっきり減っているので後継者が欲しい、というのが本音)。