Ex-Libris
25


ボーダーブレイクシミュレータ開発記(4)

今回はVer 3.0対応について。

3.0での主な変更点

・素材に「集積回路系」カテゴリが追加
・新規勲章追加
・購入条件の勲章を、「ユニオンレベル」の到達で回避できるように
・特定クラス到達時にパーツを無償支給
・チップ容量ほか、各パラメータの調整

なお、一時期騒がれた「3.0では素材を999個までしか持てない」はスタッフの牛マンがtwitterで否定している。

作業内容

今回はメジャーバージョンが上がるため、データ変更量もそこそこ多い。とはいえ、パーツにチップカテゴリが追加された時ほどの影響はないので丁寧にやれば問題なく終わる。
はっきり言えば、データ部分の修正とそれに伴うロジックをいくばくか直すだけ。ゲーム内容の変更点の大きさに比して、データ的にはあまり構造が変わらない(※1)のだ。

先行バージョンを作った主な理由は、稼働日が公開されてそれに備えてデータを組みたい、あるいはロケテで既に3.0を動かしているといった需要があること。また、先に新バージョンのデータを作成、公開して間違っている点や問題を起こしそうな点について洗い出しておきたいため。

(※1)
例えば、クラス関連の大幅変更やマップ大量追加は今のシミュレータには何も影響を与えない。武器などの名前変更はその逆の例として代表的。
システム開発で似た事例は山ほどあり、システムの外を含めて「最も軽い負担で解決できるところ」にツケをうまく回すことも大切。とはいえ「本当にやらなければならない」ならば「誰かがやらなければならない」という点は不可避なのだが…。

方針

・現行バージョン2.7を壊さない
当たり前だが、たまに修正を混入させてやらかす例がある。

・ゲームデータの3.0切り替えをタイムラグなしで行う
3.0用データと2.7現用データの2つのラインを作り、必要に応じて修正部分を同期させるイメージ。
ロケテ段階で判明した3.0変更点を反映したデータを作成。一方で3.0リリース前に2.7に加えられた変更は2.7と3.0の両方に反映。
こうして、3.0稼動時には全ての変更が最新状態になったデータファイルが手元にあるはずだ。

・3.0の機体構成データと2.7の機体構成データを相互に使えるようにする
3.0テストページで稼動に備えた機体構成を作ってセーブ、2.7ページに戻ったらいきなりエラー…では話にならない。
セーブデータ保存のDBを分けるということも考えたが、使い勝手が悪くなる(3.0が稼動したら全部手でコピーするとかはお断りだろう)上に手間もかかるので却下。
今回最大の注意点は「セーブデータの3.0にしか存在しない部分を扱えるよう2.7段階から処理部分をきちんと作る」ということ。代表例としては2.7で存在しない「集積回路系」素材のセーブデータの扱い。表組みにも関わるので全体が見通せていないといけない。

総合して、ブランチ(枝分かれ)的な状態…ゲームの状態にどう対応するかという意味で…の最も初歩的な練習とも言える。

修正を行ってみて

ロジック部には特段の問題は起きなかった。
「3.0対応のための泥縄修正を2.7用ソースに加えて、3.0に無理に引き継ぐか、直前で再度削除するか、あるいはブランチを切るか」というような事態はなく、「自分が処理できない物が来ても壊れない」方向で修正完了。

問題は、前々から懸念されていたレイアウト関連。
元々が画面解像度をかなり要求するものだったために、特に素材関連での扱いに困る。集積回路系統がパーツ購入に使われるのか否かもまだ不明なので、もしかしたら再度レイアウト修正が入るかもしれない。
実際、マガジン火力や秒間火力等の計算も内部的には既にできているが、必要な表示スペースが爆発しそうなのでその対応が済むまでは表示していない。表示切り替えボタン?そういう物を無秩序に増やした成れの果てを仕事で散々見ているからなあ…。

他にいくばくか

実はデータID登録の上での利用はいまいちどうなっているのか分からない。使う人は熱心に使って、使わない人は本当に使わない機能と化しているようだ。
登録データ数を5から10に増やそうかと思う反面、5個使い切る人はそれほど多くないようにも見える。

今回、描画周りの修正を試したものの軽量化はかなり厳しい。やや邪道な方法で100ms程度は短縮していたりするので、これ以上やるとなると別のアプローチかなあ。
ゲームデータに関しても、根本的なメモリ馬鹿食いを直すのは難しいし、おそらく本格的に遅延評価をやる場合には大手術になり、何よりも、多分、全体の待ち時間自体は長くなる。
あと、IEはjQueryのセレクタ回りで刺された感が強い。CSSクラスでセレクタを動かす場合にどうやらIEはパフォーマンスが目に見えて落ちるようだ。

次に開発する時はゲームデータの切り替えを動的に行えるようにしたいところ。他にもデータ関連はいくつか試しているけれど、かなり面白い分野である。

※追記
コメントでバグを教えていただいた方々へ。
バグは全て修正しました。ありがとうございます。が、手違いでコメントを消してしまいました。ごめんなさい。
使っているスパムフィルタが日本語の精度が良くないのか、いくつかはスパムの山に埋もれていたので、急を要するものはTwitterが一番早いと思います。