蛇レンジ([Hebis] Target Drones)のあれこれ

登録タグ
  • Stormworks
  • プログラミング
  • この記事は Stormworks 第2 Advent Calendar 2023 第13日目の記事です。

    紹介

    兵器開発を想定した射爆場をクリエイティブ島に生成するStormworks用アドオンです。様々な標的を1ボタンでスポーンさせることで作成した兵器を素早くテストできます。ドックから艦艇をスポーンさせてテストするほか、ハンガーで作った発射器を射爆場までテレポートさせる機能を備えています。ユーザーの間では 「蛇レンジ」 と呼ばれ親しまれているようで嬉しいです。

    使用方法

    あらひと様の解説動画が詳しいので、そちらも参考にどうぞ。

    インストール方法

    • Steam Workshopでサブスクライブを押してダウンロード
    • Stormworksで新規ゲームメニューへ
    • 開始地点をクリエイティブ島に設定
    • Enabled AddonsボタンからWorkshopタブに入り、そこから蛇レンジを見つけて設定項目を確認し、有効にする
      • Spawn keep active anchor:長距離射撃をテストする際に長距離のオブジェクトを強制表示させるためのアンカーをスポーンさせます
      • Anchor Count:そのアンカーの数を指定できます。1500m毎に設置されます
    • ワールド生成、射爆場の準備が完了です

    使い方

    メインパネル

    蛇レンジ([Hebis] Target Drones)のあれこれサブ画像[0]
    ①ターゲットスポーンボタン
    蛇レンジ標準付属のターゲットをスポーンします。
    ②アドオンターゲットスポーンボタン
    アドオンターゲットをスポーンします。横の空欄でアドオンIDを確認できるので上下ボタンでIDを選択し、下のボタンでスポーンさせます。
    ③レンジオフセット
    出現基準位置をキーパッドに入力した分だけ遠ざけます。単位はメートル。
    ④デスポーンボタン
    出現中の標的すべてをデスポーンします。
    ⑤AIウェポンテスター
    ビークルの座席に座らせると最初に出現した標的を照準します。詳しい使い方はゲーム内のAIガンナーの項目を参照。

    サブパネル

    蛇レンジ([Hebis] Target Drones)のあれこれサブ画像[1]
    ①射点へのテレポート切替ボタン
    ハンガーで作った地上発射器を射爆場の射点へテレポートします。有効時緑色のインジケーターが光ります。
    ②射界へのテレポート切替ボタン
    自身のビークルを標的として射界へ移動します。被弾に対するテストを行うことができます。有効時赤色のインジケーターが光ります。

    これらのパネルがクリエイティブ島にスポーンされていれば、初期状態でハンガーで作成したビークルが射爆場に移動します。ターゲットスポーンボタンを押して射撃を開始してください。標的が機能を停止したと判断された場合・制御を失い射爆場から離れた場合、自動でデスポーンします。

    ゲーム内無線9968chで標的GPS座標をNumberコンポジット[X,Y,Z](Z-UP)で配信しているため、レーダーノイズを無視したFCSの作成に挑戦する際はそちらを利用しても良いかもしれません。

    アドオンターゲット

    インストール方法

    アドオンターゲットは本体と同じ要領でWorkshopからダウンロードし新規ゲームメニューへ。蛇レンジと同時に有効にすると開始時にデータが読み込まれ、アドオンターゲットに追加されます。ちなみにアドオンターゲット作者の皆さんはSampleのほうも必要アイテムに設定してくれてるのですが、あれはなくても構いません。

    開発方法

    Locationデータにビークルを配置し蛇レンジと共に有効にした状態でゲーム開始、タグで所定の宣言を行われたビークルを起動時にロードします。

    Nav_XNav_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を参考にしていて空中標的はそこから発想を得ています。(パクリとも言う…。)

    標的詳細

    水上標的
    蛇レンジ([Hebis] Target Drones)のあれこれサブ画像[3]
    水上で制止した標的。まずは凪いだ海に浮かべたこれに命中させることで兵器のゼロイン調整や飛翔体の動翼調整を行うことを目的に用意しました。当初は質量軽減のためにフロート(赤マージ)と標的のマージを分けていましたが、正式版でのアップデートで赤マージ以外のブロックも浮力を発生させるようになったため標的を赤マージに変更。今ではレーダー照準を行うと赤マージである標的に照準が固定されるようになりました。
    標的艦
    蛇レンジ([Hebis] Target Drones)のあれこれサブ画像[4]
    静止目標への命中が確実になったら、低速で大型の実用的な移動目標への射撃を試験するために用意。軽度のPvPを想定した設計で、隔壁とビルジポンプ、喫水線下に弾薬庫再現の弾頭を配し、撃っていて楽しい標的を目指しました。アップデートによる挙動変更や特殊弾頭のダメージ評価にも使用するため、設計は初期バージョンから手を付けていません。おかげで、兵器開発部の方々には評価試験動画のための一つの基準として 「蛇標的艦」 として愛されているようで嬉しいです。ちなみに元ネタは標的艦はまゆき。
    標的ボート
    蛇レンジ([Hebis] Target Drones)のあれこれサブ画像[5]
    蛇標的艦を撃沈できるようになれば今度はより正確にピンポイントで攻撃できることが求められるかと思い、小型の標的を用意しました。波のある環境で巡視艇から海賊の乗るボートを想定した射撃訓練としても実用的で有用かもしれません。ちなみに元ネタはQST-35 SEPTAR。
    レーダーリフレクター
    蛇レンジ([Hebis] Target Drones)のあれこれサブ画像[6]
    FCSの完成度を上げていくと彼我の高度差からくる仰角にも対応する必要があり、高度があり低速でもある標的を追加しました。ゼロイン調整が単純な加算だと、仰角が90度に近づくにつれ誤差が大きくなるのがわかると思います。
    無人飛行機
    蛇レンジ([Hebis] Target Drones)のあれこれサブ画像[7]
    三次元空間を縦横無尽に行き交う航空標的を想定した標的です。釣り合い旋回をさせるため、飛行速度はSW内航空機としては少し低速かもしれません。複雑な軌道を描いていますが、これを射撃できるようになるとFCSとしては完成でしょう。蛇レンジを公開してから頂いた 「パームデールの戦いだ!」 というコメントが面白かったので、敬意を表してF6F-5Kヘルキャット無人機を実装しました。
    ドローン
    蛇レンジ([Hebis] Target Drones)のあれこれサブ画像[8]
    FCSの性能を高めていくうえで最も難易度の高いジェット機・ミサイルなどの高速空中目標を想定した射撃を行うために追加しました。Stowmworksでは砲の平均誤差半径(CEP)がとても広いので必殺は難しいですが、射撃中CEP内に納め続けることができればFCSとしては完成したと思っていいのではないでしょうか。元ネタはBQM-74 Chukar。
    標的魚雷
    蛇レンジ([Hebis] Target Drones)のあれこれサブ画像[9]
    アップデートでソーナーがより複雑になり、水中目標の捜索・追尾を行う試験の為に追加しました。水上からは確認できないので、ソーナーのみを使って座標を割り出す訓練などに使えるのではないでしょうか。雰囲気重視で作っているため、スクリュー音を追尾するだけなら標的艦を用いた方が良いかもしれませんね。

    今後の方針

    蛇さんとしてはクリエイティブ島に関しては概ね開発完了で、長期サポート体勢かなという所です。アップデート内容を見ながらそれに合わせて対応していこうかなと思っています。ToDoリストとしては

    • 耐久試験に便利な標的自動再スポーンシステム。UIをどうしよう。
    • 地上車両が走行しながらの試験ができる場所。場所と標的をどうしよう。
    • 動画撮影に便利なように、標的の座席へのテレポート機能つけようかな。
    • 標的からの油漏れ問題どうしよう。
    • 蛇レンジそのものに対するアドオンシステムを考えようかな。
    • そろそろコードのリファクタリングをしないといけないね。

    という感じになっています。良い感じの解決方法があれば助言を頂けると蛇さんうれしいです。

    拙いアドオンですが、皆さんのストワライフのお役に立てるよう頑張っていく所存なのでこれからもよろしくお願いします。