スマホでの操作性 UI改修
このゲームの原型は、カーソルを動かしてボタンで入れ替える、という操作でできています。スマホ版も当初は単純に、タップした場所にカーソルを表示して入れ替えるとしていました。が、なんか挙動に違和感があって操作しにくい!これで連鎖できるやつはすごいなと思いました。
指に追従させる
そこで採用したのは、いわゆるパズドラ式です。パネルを指で掴むと、そのパネルが指について来る。隣のマスへ一定距離ぶん踏み込んだところで、初めて入れ替わる。カーソルという概念が消えて、触っているものが動くだけになります。
この「一定距離」が曲者でした。真面目に「隣のマスに入ったら入れ替え」と実装すると、境界線の上で指が揺れたときに入れ替えが超高速に往復するという面白いことになります(操作性?最悪です!)。そこで、進む方向は0.6マスで入れ替え、戻る方向は0.2マスぶん鈍くする、という段差(ヒステリシス)を入れました。ちなみにPCのマウス操作は0.75/0.25と別の値です。マウスは指より正確なので、少し我慢強くしてあります。同じ操作に見えて、指とマウスでは別の数字が入っています。
虚無も、落ちていくパネルも掴める
実装していて一番「なるほど」となったのが、何も無いマスを掴めなければいけないという点です。何も無いところを掴んで何になるのか?なります。隣のパネルを横から引っ張ってくるとき、人間は空いている方に手を伸ばしているからです。本家でもカーソルは空マスに置けます。虚無空間を掴めないのは、半分の操作が禁止されているのと同じでした。
同じ理屈で、掴んだパネルが落下しても指から離れません。落下中に手が使えないと、連鎖の最中に何もできない時間が生まれてしまいます。落ちていくパネルを指が追いかける処理を書いているときは、自分が何を作っているのかよく分からなくなりました。
動かした直後と離した直後
ほかにも、横に動かした直後の0.05秒は行移動をロックして斜め暴発を防ぐ、指を離した後も0.15秒ぶんは目標地点まで動き続けて操作の取りこぼしを拾う、といった細工が入っています。気持ちよさは、だいたいこういう地味な数字でできています。
この改修の途中で、一度掴み損ねると二度とパネルを掴めなくなるという致命的なバグも見つかりました。掴んでいる指のIDを解除し忘れていたせいです。スマホ版で見つけたバグですが、原因は共通コードにあったので、PC版のマウス操作も一緒に直っています。
判定は起動時に1回だけ
PC用とスマホ用の切り替えは、起動時に一度だけ判定して、あとは絶対に動かさない方式にしました。プレイ中に画面を回した瞬間にレイアウトが組み変わったら、そちらの方が事故です。もちろん判定は外れることがあるので、画面上部に手動の切り替えリンクを置いてあります。
技術的にありがたかったのは、画面サイズを表す定数をプロファイル依存にするだけで済んだことです。この定数はコード中の46か所から参照されていましたが、そのすべてを一行も書き換えずにスマホ対応が通りました。
そして細かい直しが延々と
大枠が動くと、今度は積み残しが次々に出てきます。リプレイの注目枠が実際の盤面とズレる(盤面サイズを固定の数字で書いていた場所が残っていた)、AIの形勢評価が盤面に被る、せり上げボタンが盤面の角と重なる、PCでもウィンドウが低いとスクロールバーが出る、実況クレジットの位置が端末によって変わる……。「スマホ対応」という作業の8割は、こういう名前のない直しの集合体でした。
おかげさまで、電車の中でも積めるようになりました。これでいつでもプレイできますね!