蛇レンジ([Hebis] Target Drones)のあれこれ
この記事は Stormworks 第2 Advent Calendar 2023 第13日目の記事です。
紹介
兵器開発を想定した射爆場をクリエイティブ島に生成するStormworks用アドオンです。様々な標的を1ボタンでスポーンさせることで作成した兵器を素早くテストできます。ドックから艦艇をスポーンさせてテストするほか、ハンガーで作った発射器を射爆場までテレポートさせる機能を備えています。ユーザーの間では「蛇レンジ」と呼ばれ親しまれているようで嬉しいです。
使用方法
あらひと様の解説動画が詳しいので、そちらも参考にどうぞ。
インストール方法
- Steam Workshopでサブスクライブを押してダウンロード
- Stormworksで新規ゲームメニューへ
- 開始地点をクリエイティブ島に設定
- Enabled AddonsボタンからWorkshopタブに入り、そこから蛇レンジを見つけて設定項目を確認し、有効にする
- Spawn keep active anchor:長距離射撃をテストする際に長距離のオブジェクトを強制表示させるためのアンカーをスポーンさせます
- Anchor Count:そのアンカーの数を指定できます。1500m毎に設置されます
- ワールド生成、射爆場の準備が完了です
使い方
メインパネル
サブパネル
これらのパネルがクリエイティブ島にスポーンされていれば、初期状態でハンガーで作成したビークルが射爆場に移動します。ターゲットスポーンボタンを押して射撃を開始してください。標的が機能を停止したと判断された場合・制御を失い射爆場から離れた場合、自動でデスポーンします。
ゲーム内無線9968chで標的GPS座標をNumberコンポジット[X,Y,Z](Z-UP)で配信しているため、レーダーノイズを無視したFCSの作成に挑戦する際はそちらを利用しても良いかもしれません。
アドオンターゲット
インストール方法
アドオンターゲットは本体と同じ要領でWorkshopからダウンロードし新規ゲームメニューへ。蛇レンジと同時に有効にすると開始時にデータが読み込まれ、アドオンターゲットに追加されます。ちなみにアドオンターゲット作者の皆さんはSampleのほうも必要アイテムに設定してくれてるのですが、あれはなくても構いません。
開発方法
Locationデータにビークルを配置し蛇レンジと共に有効にした状態でゲーム開始、タグで所定の宣言を行われたビークルを起動時にロードします。
Nav_X・Nav_Yと名付けられたキーパッドに所定の座標が入力されます。GPS誘導処理の実装をお願いします。スポーン時、蛇レンジ側ではスポーン・NAVキーパッド入力処理以外は全く何も行わないのでスポーン時には起動された状態で保存しておいてください。無限電源・無限燃料が必須である場合はそれを明記しておくべきかもしれません。
タグ
- hebis_target[必須]
- 蛇レンジ用ターゲットであることを宣言します。
- name
- 表示名を指定できます。無い場合、アドオンエディタでのDisplayNameが使用されるため、記述する必要はありません。
- type[必須]
-
標的の種類を宣言します。出現位置や射爆場での挙動に影響を与えます。
取りうる値:plane | drone | reflector | ship | float | torpedo | missile | random_ocean | missile_random - spawn_type
-
標的のスポーン種類を宣言します。planeのように上空を旋回するが出現位置をランダムにしたい場合などに使用します。必須ではありません。
取りうる値:plane | drone | reflector | ship | float | torpedo | missile | random_ocean | missile_random - replace_target
-
パネルのバニラターゲットと置き換えます。バニラターゲットの名前を指定すると機能します。
取りうる値:Target_Plane | Target_Drone | Target_Reflector | Float_Target | Target_Ship | Target_SEPTAR | Target_Torpedo
type・spawn_typeタグの詳細
- ship・torpedo
- 水上目標・水中目標用です。海上やや西側にスポーンし、Navキーパッドには射爆場中央を往復するルートへの座標が入力されます。両者の違いはデスポーンルールで、Shipは水面下(深度5m)ですぐデスポーンが始まり、torpedoではもう少し深度制限が深いです。(深度15m)
- float
- 海上静止目標用です。海上中央周囲にランダムでスポーンし、Navキーパッドには何も入力されません。水面下(深度5m)でデスポーンします。
- reflector
- 空中静止目標用です。海上中央周囲上空にランダムでスポーンし、Navキーパッドには何も入力されません。60秒経過するか、高度5m以下でデスポーンします。
- drone
- 直線飛行標的用です。海上南方向扇状の位置にスポーンし、Navキーパッドには何も入力されません。速度か高度を失うとデスポーンします。(速度10m/s以下あるいは海抜高度3m以下)
- plane
- 航空機用です。海上南方向扇状の位置にスポーンし、Navキーパッドには基準位置と少し南を往復するルートへの座標が入力されます。速度か高度を失うとデスポーンします。
- missile
- ミサイル用です。海上南方向扇状の位置にスポーンし、Navキーパッドには基準位置と少し南を往復するルートへの座標が入力されます。速度か高度を失うとデスポーンします。
- random_ocean・missile_random
- 出現位置ランダム用です。クリエイティブ島周囲の何もない海タイルが選択されます。random_oceanはスポーンした周辺を徘徊するようなルートがNavキーパッドに入力されます。missile_randomは射爆場の座標が入力されます。このスポーンルールでは射爆場外も選択されるためKeepActiveブロックが必須になります。
開発裏話
というあたりまでは多くのストームワーカーさんは知っているお話だと思うので、ここから先は蛇レンジ周辺のお話。
誕生の話
「極限まで面倒くさがりの蛇さんが射撃管制装置(FCS)開発の為にテスト用標的を手早く準備したかった」というのはそこそこ大きいのですが、一番大きな理由は「救助ゲームとして始めたのに、武器DLCが来たとたん民間船や病院船めがけて発砲するワーカーが多くて蛇さんの良心が痛んだため」だったりします。標的にNPCを乗せない設計にしているのもそのためです。兵器テストの為に極限まで利便性を追求し、わざわざ探す手間のかかる民間船や病院船を攻撃しなくてもすむ環境を整えればそのような事態も減るのではないかと考え蛇レンジの作成に着手しました。
…という割と平和的な理由で蛇レンジは誕生したのですが、気が付くと「蛇レンジ標的はチュートリアル。時代はECCMとアクティブディフェンス、さらにそれを突破する極超音速ミサイルや回避型ミサイル。」という世界になってしまい、ノーベル博士やガトリング博士もこんな気持ちだったのだろうかと思いを馳せる日々です。
アドオンターゲット
蛇レンジを公開して以来、兵器開発部が活発に動いているのは観測していたのですが、「シリウスチャレンジ」なる活動を発見。見てみるとどうやらワーカーさんが作った特製ミサイルを別途アドオンでスポーンさせて迎撃するチャレンジらしいということを確認。やっぱり雰囲気重視の蛇レンジバニラターゲットだけでは力不足だよねと追加しました。今ではいろんな方が参加してくださって極超音速ミサイルや自立無人戦闘機などが公開されているようです。
主催として、どこかで標的群をまとめて記事にするのが良いのかなと思いつつ、みんながどこに集まってるのかよく知らないもぐりボッチの兵器開発者なので一人涙。余談ですが、生成済みワールドであってもアドオンターゲットの読み込み検索は毎回実行しているため、アドオンターゲットパッケージという形でひとまとめにして公開、後のアップデートで追加、という形にしてもワールド再生成無しで更新を受け取ることができたりします。
設計
射撃場そのもの
レンジの設計思想として「極力無駄を排して操作を減らしビークル作成・標的生成・射撃のループを加速させる使いやすい射撃場」を作ることで「わざわざ民間船や病院船を探しまわって攻撃する必要をなくす」ことでした。説明書は実用を考えると少なくとも日本語・英語、可能であればロシア語を用意する必要があり、とてもコストがかかるため、説明書無しでも操作可能なレベルの複雑性に落ち着けようという方針です。極力コンパクトにまとめ、グリッチや非公開パラメータ、アクロバティックコーディングに頼らない設計はアップデート耐久性につながり、管理維持コストを下げることにも一役買っています。
標的にキープアクティブブロックを取り付けるかは少し悩みましたが、「多数スポーンさせて射撃、その一部が部位ダメージで射撃場から飛び出て行方不明」という事態を避けるため、あえてレンジ側でキープアクティブアンカーをスポーンさせ、その範囲内で射撃を行う、というスタイルにしました。しかし、2000m非アクティブ化ルールを知らないプレイヤーさんが多いらしく、範囲外へのスポーン時に警告文を追加する予定です。
アドオンターゲットUI
キーパッド入力にするかは少し悩みました。キーパッド入力にしてしまうとスポーンのためのボタンブロックが増え、キーボード数字入力を使用すると手が一瞬マウスから離れ、更にはIDを確認するために入力画面から離れないといけないことから、上下ボタンによる入力を選択しました。メインパネルの前に立ってWASD+マウス操作のまま制御することが可能になり、没入感は上がったのではないかと思います。
実装当初は1桁で0~9の10ターゲットのみのサポート、本来は「設計兵器と用途に合わせてアドオンパッケージを1つ選んでワールド生成、必要に応じてワールドを分ける。」、そもそもそんなにアドオンターゲットを作る人は居ないだろう、という設計でした。ですが公開してみると皆さん多くのターゲットを作ってくださって、あっという間にIDスロットが枯渇したため桁を増やして100まで対応する形になりました。
その際、アドオンIDリストが長くなりすぎて面白いことになってしまい頭を抱えましたが上下ボタンで選択しているID付近のリストを表示することでうまく収まったので結果として選択は正しかったのかなと思います。
標的
標的はレンジ整備コスト・標的整備コストを勘案して、極力厳選する方針でした。さらに細かく、
- 現実味を持たせて兵器開発の雰囲気を壊さない。
- PvPを意識してPhysicsFlooderを使わない。
- 各々試射において何を試験させるためのモノであるかを明確にしておく。
- そのうえで軽量化を徹底して行い大量スポーン時の処理負荷を最小限にする。
- やられる上で、美しく散る。(重要)
という設計要項でデザインしました。実はこのレンジ自体、SAM SimulatorのLive Practiceを参考にしていて空中標的はそこから発想を得ています。(パクリとも言う…。)
標的詳細
- 水上標的
- 標的艦
- 標的ボート
- レーダーリフレクター
- 無人飛行機
- ドローン
- 標的魚雷
今後の方針
蛇さんとしてはクリエイティブ島に関しては概ね開発完了で、長期サポート体勢かなという所です。アップデート内容を見ながらそれに合わせて対応していこうかなと思っています。ToDoリストとしては
- 耐久試験に便利な標的自動再スポーンシステム。UIをどうしよう。
- 地上車両が走行しながらの試験ができる場所。場所と標的をどうしよう。
- 動画撮影に便利なように、標的の座席へのテレポート機能つけようかな。
- 標的からの油漏れ問題どうしよう。
- 蛇レンジそのものに対するアドオンシステムを考えようかな。
- そろそろコードのリファクタリングをしないといけないね。
という感じになっています。良い感じの解決方法があれば助言を頂けると蛇さんうれしいです。
拙いアドオンですが、皆さんのストワライフのお役に立てるよう頑張っていく所存なのでこれからもよろしくお願いします。