Factorio Space Exploration modにおける宇宙船自動操縦について
これはpyspa アドベントカレンダー 2023の19日目の記事です。昨日は@aodagのミス・マープルでした。
はじめに
このエントリはFactorioのSpace Explorationというmodを導入して遊んでいる人向けのエントリである。
Factorioというゲームがどんなゲームであるかについては、多くの情報がネットにあふれているので、ここでは説明を繰り返すことはしない。
Space Exploration mod は、Factorioの何もmodを導入していない状態でロケットを打ち上げる所までは遊んだ人向けのmodだ。つまり、クリア後の世界を拡張するものである。
Factorioでロケットを打ち上げた後、この世界はどうなるんだろう?と思った事はないだろ うか?開拓した星を飛び出して宇宙空間や更なる惑星を求めて冒険に出たいと思ったことは無いだろうか?
それをかなえてくれるのがSpace Explorationだ。このmodを導入することでどんな景色が見れるのか少し紹介させてほしい。
- 衛星軌道にむかってそびえたつ軌道エレベーター
- 衛星軌道上に作られた宇宙ステーションと地上の間を巡回する銀河鉄道
- 水のない惑星に立つ謎のピラミッド
膨大なコンテンツが含まれている大型modだが、信じられない事になんと無料だ。そして、日本語で遊べる。注意点としては、modはPC版のみ対応だ。もしPC版Factorioを一通り遊んだことのあるなら是非遊んでみて欲しい。
このエントリは、Space Exploration modにおける中盤以降で建築することになる宇宙船に関する攻略情報つまり、ネタバレを含むものである。もし、完全に自力で攻略したいと思っているなら、読むのを避けて欲しい。
それでは本題に入っていこう。
最小の宇宙船
まずは、テックレベルをSpaceship consoleが作れるところまでゲームを進めて欲しい。そうしたら、床と壁を作ってその中にSpaceship consoleを配置することで宇宙船を建築できる。
今回の説明で使う宇宙船は、そこからさらにテックレベルを進めてIon Engineを作成できるようになっている。
具体的にはこういうものだ。説明に使った宇宙船は最後のまとめでBlueprint Bookのインポート用文字列を用意してあるので、説明できなかった部分を詳細に知りたいという事であれば使って欲しい。
棺桶である。かっこよさは微塵もない事は認める。何せ筆者は絵心というものを気がついたら、どこか遠くに置いてきてしまったのだ。取りに戻ろうとしたが、もう分からなくなってしまった。
冗談はさておき、この棺桶は宇宙を飛び回れるし、惑星に着陸したうえで、大気圏を突破して宇宙に戻ることもできる。
⚠️ Space Explorationを遊んだことのある人は違和感を覚えるかもしれない。 本来なら、液体ロケット燃料を使うロケットエンジンが無ければ、地表面から宇宙に出られない筈なのだが、現在の仕様ではなんと液体ロケット燃料のタンクだけ据え付けておけば大気圏脱出できる。このバグが修正されたらロケットエンジンを自分で追加して欲しい。
レーザータレットは宇宙空間で飛ん でくる隕石を打ち落とすために必須なので設置している。上を歩けるフラットな太陽光パネルと広域電柱を配置して電気系統は実装してある。
ここまでは特に難しいことは無いはずだ。
手動スイッチによる発着
Spaceship consoleに回路を接続して操作するための基本的な部分から理解していこう。
まずは、定数回路を使った離陸と着陸について説明する。
最小の宇宙船に定数回路を2個と宇宙船を係留するクランプを取り付けてある。クランプは宇宙船側に一つと港側に一つ付けると宇宙船の着陸を自動化できる。
今回の回路で使うシグナルは、その他のタブに配置されているものを使う。
二つの定数回路とSpaceship consoleは単一の回路ネットワークで接続してある。
左側の定数回路には、宇宙船の離陸を表すシグナルを設定した。かっこいい宇宙船に上向きの黄色い三角がついているシグナルだ。値としては1以上の数値を設定すればなんでもいいので1を設定してある。この定数回路の電源をOnにしてシグナルをSpaceship consoleに送信すると宇宙船は離陸する。
右側の定数回路には、着陸するためのシグナルを設定してある。
シグナルパレットには、クランプを表すシグナルが4つあるが、三角の向きが同じ黄色と青のシグナルが対応関係にある。
黄色い三角がついているシグナルが宇宙船に設置してあるクランプを表す。青い三角がついているシグナルが港に設置してあるクランプを表す。
クランプの値は、クランプを一意に特定するためのIDを表す。黄色い三角形側のクランプは各宇宙船の中で一意になっていればよい。大抵の宇宙船はクランプが一つだけなので実質的にどんな値でも問題ない。青い三角形側のクランプに設定された値は、それぞれのマップごとに設置した複数のクランプの中で一意になっている必要がある。例えば、軌道衛星上と母星の地表はマップが違うので値が重複してもよい。
最初のうちは複数の宇宙船を単一のクランプに複数の宇宙船を係留しようとすることは事故につながるためやらない方が良いだろう。分かり易さのため宇宙船のクランプに付与するIDと港のクランプに付与するIDは同じにするのがおすすめだ。
なお、単一のクランプに対して、複数の宇宙船を係留しようとすると二つ目以降の宇宙船は該当するクランプが空くまで着艦しない。また、同一のIDを持つクランプが複数ある場合には空いているところに着艦する。
筆者にはFactorioで管制塔の制御システムを実装するだけの根性はないが、誰かが挑戦するのであれば見てみたいという気持ちはある。
この定数回路では、宇宙船に設置した500番のクランプを 使って、港に設置した500番のクランプに係留するように指示している。
それでは、宇宙船に配置したクランプを見てみよう。クランプ本体をクリックして、シグナルのアイコンをさらにクリックするとIDを編集できる。ここでは500を設定している。
同じように港側のクランプにも500番を設定した。
宇宙船は二か所以上の港を移動する。つまり、係留する可能性のある港側のクランプは全部同じIDを割り振るのがコツだ。違った値を割り当てても良いが、その分回路は複雑になる。
例えば、このケースでは軌道衛星上の宇宙港と、母星の地表にある港のクランプのIDとしてそれぞれ500を割り当てている。軌道衛星上と母星はマップが別なのでクランプの値が重複していても正しく動作する。
このクランプの仕様を理解するのに筆者は大分苦しんだが、これを読んでいるあなたはすんなり理解できただろうか?もしすぐに理解できたなら非常にうれしい。
加速の自動化
宇宙船が惑星間を移動する際には、係留状態か ら離陸状態になり、その後加速状態なる。離陸状態の宇宙船は速度がゼロなので一切移動しない。ロケットエンジンやIon Engineが動作して加速状態になった宇宙船は一定の時間経過によって目的地に到着し、速度がゼロになる。
離陸シグナルを定数回路からSpaceship consoleに送信することで離陸するとすでに説明した。実はそれだけでは宇宙船は移動しない。宇宙船が加速を開始するにはSpaceship consoleに対して目標となる速度を入力する必要がある。
というわけで、宇宙船に新しい定数回路を配置して回路ネットワークに接続した。
速度を指定する定数回路では、タコメータのようなシグナルを選んで値として目標速度を設定する。船の最大速度は船自体の大きさやエンジンの数によって決まるので、ここで設定した値の速度で必ず船が飛ぶという訳ではない。
設定された速度を目標に頑張ってエンジンを動かすだけだ。つまり、無理な目標を設定しても、エンジン性能の限界を超えた速度がでることはない。
なお、離陸していない宇宙船は速度を設定しても単に無視する。係留状態のままエンジンをふかしたりはできないのだ。