Factorio - Train Supply Manager (TSM) @ 2020-09-04

ようやく先日導入したTSMを実際に試す機会が得られたので、TSMの使い方チュートリアルを兼ねて、使い勝手などをご報告させていただきたいと思う。


まずTSMについておさらいさせていただこう。TSMことTrain Supply Managerは鉄道のダイヤを需要と供給に応じて自動的に設定し円滑な運行を自動的に行ってくれるというMODだ。このMODを使うことで、いちいち自分でダイヤを組んでやりくりしなくても、MODが最適にいい感じで列車を運行してくれるようになる。鉄道網が小さく、需要と供給が1:1で結びついている間はそれほど恩恵を得られないのだが、例えば5個の駅で鉄板が必要で、鉄板を供給する駅が3箇所に分散して存在する、みたいな場面ではTSMのようなMODが大いに役立つはずだ。似たようなMODにLTNと呼ばれるものがあるのだが、TSMのほうが簡単に使えると経験者に推奨されていたため、早速私も試してみることにした。

ゴタクはこのぐらいにして、早速実際に使ってみよう。MODをインストールしたら、まずはSupply StationとRequest Stationを用意する必要がある。Supply Station・・・Sの頭文字が付いている駅だ・・・こちらが物資を供給する側の駅であり、もう一つのRequest Station・・・Rの頭文字が付いている駅・・・が物資を要求して運んできてもらう側の駅になる。

画像1

まずは供給駅の敷設から始めよう。具体的にはこんな感じだ。見ての通り、普通の駅と何も変わりはしない。単に普通の駅の代わりにTSMについてくるSupply Stationを置けば良いだけだ。

画像2

Supply Stationを用意したら、適当な列車を準備して、作成したSupply Stationに向かわせる。このとき、停車条件を「Circuit」の「空欄」にするのがコツだ。実はどんな停車条件でも良いのだが、このSupply Stationに永久に止まり続けるように設定すること。あとからTSMが必要に応じてこの列車をいい感じに動くようにしてくれるので、現段階ではSupply Stationに停車して動かないようにしておけば良い、とだけ覚えておこう。


さて、供給側の準備はできたので、次は物資を運んできてもらう要求側の準備を行う。こちらは少しだけ複雑だが、慣れれば何ということはない。

画像3

こんな感じだ。基本的には要求側の駅も普通の駅と同じように作れば良いのだが、3つほど違う点がある。

ひとつ、普通の駅の代わりにTSMのRequest Stationを使うこと。

ふたつ、駅のすぐとなりに、これまたTSMによって追加される新アイテムである「Train Requester」、見た目はランプの色違いみたいなやつだ、これを配置すること。

みっつ、Decider Combinatorを駅の近くに配置し、適当に配線すること。実はこのDecider Combinatorは無くてもTSMを動作させることができるのだが、最初は何も考えずに図のようにDecider Combinatorを配置して配線すればいい。入力側の配線を荷降ろしに使うストレージにつなぎ、出力側の配線を駅とTrain Requesterにつなぐ。


画像4

さて、次は論理回路の設定を行う。まずはDecider Combinatorの設定から。荷降ろしするアイテムが一定数以下ならチェックマークシグナルを1つ出力するように設定する。別にシグナルも荷降ろしするアイテムの量も何でも良いのだが、よくわからないなら黙ってこの図を真似して欲しい。こうすれば駅に備蓄されている石炭が8万を下回ったら自動的に列車がやってきて石炭を補給してくれるようになる。

画像5

次、Train Requesterの設定だ。左側に機関車にmがついているアイコンを選択し、右側に先程のチェックマークを配置する。これで「この駅に停車しているか、またはこの駅に向かっている列車の数が、先程のチェックマークより少ない場合に、Train Requesterが列車を要求する」ように設定したことになる。もっと簡単に言えば、この駅に向かってくる列車が1編成もおらず、かつこの駅に備蓄されている物資が足りなくなったときにだけ、列車がやってくる、ということだ。とても理に適っているだろう。もしこの設定がなければ、駅に備蓄の石炭が溢れかえっていようが、駅にすでに列車が停車していて場所を塞いでいようが、お構いなしに新しく列車がやってきてしまって大混乱を引き起こしてしまうから、上手い具合に論理回路で制御しましょう、というだけのことだ。このあたりの設定は複雑そうに見えるが、LTNのシグナル設定に比べれば遥かに簡単で直感的である。


画像6

さて、これでSupply StationとRequest Stationの準備が完了したので、次はTSMのGUIから最後のセットアップを行う。画面左上の列車のアイコンをクリックするとメニューが表示されるので、その中から上向き矢印のアイコンをクリックして、「Supply Source Priorities」ウィンドウを表示する。ここがTSMで一番難しい場所なのだが、一度ここを理解できればものすごく合理的で簡単でLTNより使いやすく出来ていることがわかると思うので、なんとか頑張っていただきたい。

この「Supply Source Priorities」ウィンドウの2つの四角をクリックして、今回運びたい資源を選択する。正確には、左側が「運びたい資源」で右側が「一意識別子」なのだが、何を言っているかわからないと思うので最初の段階ではどちらにも運びたい資源を入れておくのをおすすめする。この設定に従うのが一番簡単だ。


画像7

両方の四角で資源を選択したら右隣の「Select」ボタンを押す。すると何を意味するのか一ミリも理解できない意味不明なウィンドウが表示されて発狂しそうな気分になるが、ぜひここで我慢して慌てず騒がず「Select Stations」のドロップダウンリストメニューから先程作ったSupply Stationを選択してほしい。先程作ったSupply Stationこのリストにない場合は何かが致命的に間違っているので、Supply Stationを作り直すところからやり直してほしい。先程作ったSupply Stationをリストから選択できたらSaveボタンを押せばいい。


そして最後にもう一つだけ作業が残っている。ここまでの工程で、供給側の駅を作り、要求駅を設定し、Supply Source Prioritiesと呼ばれる設定を準備することが出来た。最後の仕上げとして、先程作った要求駅にSupply Source Prioritiesを割り振ることで実際にTSMが列車の運行を自動化してくれる、という寸法になっている。

画像8

左から2番めのTrain Requesterのアイコンをクリックすると先程作った要求駅がリストに掲載されていると思う。掲載されていなければ何かが間違っている。要求駅を作り直してほしい。

無事にリストに要求駅が存在する場合は「e」を全力でクリックする。するとその右隣にこれまた意味不明極まりないTrain Requesterウィンドウが開くと思う。よく見ると空白の四角が2つ存在すると思うが、この2つの空白に先程Supply Source Priorities設定を作った時に設定した資源と全く同じものを設定する。なんとなく察しが付くかもしれないが、これは要求駅にどのSupply Source Prioritiesを割り振るかを指定する箇所だ。2つの四角に設定された資源が一致する設定が選択される、というわけだ。


画像9

この設定が終わると晴れて自動的に列車が供給駅から要求駅までやってきて荷降ろしを始めると思う。線路の上に突っ立っていると轢き殺されるから気をつけろ。


ここまでの工程を振り返ると非常に複雑で何をやっているのかさっぱりわからないように思えるが、よくよく調べてみるとTSMは以下のようにシンプルなことしかやっていないことがわかる。

まず、TSMには、要求駅と供給駅、それから「Supply Source Priorities」と呼ばれる設定がある。Supply Source Prioritiesは例えるならば注文票のようなもので、「どの供給駅から、どのような設定に従って、輸送するか」を設定するものだと思ってほしい。Supply Source Prioritiesには2つの四角があって、この資格は左側が資源を表し、右側が一意識別子を表す。この2つの四角に設定されているアイコンと同じものを要求駅で指定してやることで、Supply Source Prioritiesをその要求駅に紐付けることができる。

そして、TSMは、要求駅に配置された「Train Requester」が論理回路上で「有効」になっているときに、そのTrain Requesterに紐付けされたSupply Source Prioritiesに従って、列車を供給駅から要求駅に自動的に走らせる、という処理を行うようになっている。逆に言えば、それだけしかしない。

供給駅はただの駅である。ここに止まっている列車は自動的に供給駅の列車とみなされる。単に供給駅に列車を止めておけばよく、それ以外の要件は何もない。なので、やろうと思えば、三箇所ぐらいの駅をハシゴして複数のアイテムを集めてきて、それから供給駅に停車して要求駅からの要求を待ち続ける、というような芸当も可能である。

要求駅は要求駅本体とそのすぐ隣に配置されたTrain Requesterの2つがセットで構成される。Train Requesterは単なるSupply Source Prioritiesを紐付けられるだけの論理回路オブジェクトであり、論理回路上で有効になっている間は常に供給駅から列車を呼び続ける。そのままだとあらゆる供給列車を駅に呼び出し続けてしまって役に立たないので、それを制御するために論理回路ワイヤーを張ったりDecider Combinatorを使ったりする、ということだ。逆に言えばTrain Requesterを論理回路的に有効・無効切り替えられるならどのような手法を使っても構わない。駅と全く関係ないところから論理回路ワイヤーを引いてきて有効・無効を制御してもいい。単に一番簡単で使いやすい設定が、先ほど紹介した駅のストレージとTrain Requesterをワイヤーで繋いで「指定された資源がN個以下まで減り、かつ駅に何も止まっていないときにだけ供給列車を呼び出す」設定であると言うだけに過ぎない。慣れてきたら色々試してみてほしい。


いかがだっただろうか。とにかく最初は苦戦するかもしれないが、一度TSMが何をやっているMODなのかが理解できると、驚くほどシンプルで何一つ対それたことをしていないMODだということが理解できるはずだ。


最後に一つ、TSMのバグらしき挙動を見つけたので対処法を記しておきたい。

画像10

TSMの要求駅 (Request Station) には「現在駅に停車しているか、または現在駅に向かってきている列車の数」を表す、機関車の上にmマークが付いたシグナルを放つConstant Combinatorが付属しているのだが、この「現在駅に停車しているか、または現在駅に向かってきている列車の数」が時々メチャクチャな値を示すことがある。具体的には1のまま減らなくなったりする。

原因は簡単で、TSMの機能ではなく自分の手動命令で駅に列車を送ったり、最初っから列車が存在する場所にあとからTSMの駅を配置したりした場合に発生する。コツとしてはTSMの要求駅を置く場所には絶対にTSMの機能以外で列車を送り込んだり、自分で運転して停車したりしないこと。TSMの要求駅に来る列車はすべてTSMの機能で自動的に運行されるようにする必要がある。もし間違って手で列車を送り込んだりしてしまった場合は、一度要求駅を取り除いて再度配置すると「現在駅に停車しているか、または現在駅に向かってきている列車の数」を示すシグナルの値が正常な値に戻る。駅を取り除くのが面倒ならTSMの機能を使って無理やり列車を要求してしまえば正しい値に戻るかもしれないが、無用な混乱を招くので要求駅を置きなおすことをおすすめする。