見出し画像

一方通行のすゝめ

今週はマジでずっとFactorioをやっていたのでFactorioについて書きます。具体的には「Factorioの鉄道は一方通行が良さそう」と言う話をします。


Factorioとは

ここであまり詳細な説明はしませんが、分類としてはリアルタイムストラテジーゲームに分類されるゲームで、マインクラフトの工業Mod(BuildCraft、IndustrialCraft)に着想を得た、いわゆる「工場建設ゲーム」の先駆けとなるゲームです。

自動化

Factorioを定義する重要なキーワードに「自動化」があります。

アイテムクラフトの一番の大元は、鉄鉱石や銅鉱石などの鉱石で、これはフィールドに埋蔵されていて、アイテムとして取り出すためには採掘を行う必要があります。プレイヤーキャラクターはつるはしを持っているので、自分でつるはしを振って鉱石を掘り出すことができますが、これを代わりに自動で行ってくれる掘削機と呼ばれる設置型のアイテムがあります。

掘り出した鉱石は炉で焼いて鉄板や銅板にしなければあまり使い道がありません。掘削機が掘り出した鉱石は掘削機の中にある1スタック分のアイテムスロットに格納されていくので、炉で焼くためにはそこから取り出して炉に入れる必要があります。プレイヤーキャラクターが掘削機に近づいてマウスカーソルを合わせてクリックすると、そのアイテムスロットにアクセスできて掘り出した鉱石を取り出すことができて、同じように炉に近づいてクリックして鉱石を入れて焼くことができますが、アイテムを取り出して入れる動作を代わりに自動で行ってくれるインサータと呼ばれる設置型アイテムがあります。インサータはごく近くからアイテムを取り出してごく近くにアイテムを入れることしかできませんが、インサータでアイテムをベルトコンベアに乗せれば、ベルトが続く限りどこまでもアイテムを運んでいってくれます。

炉で鉄板や銅板として焼き上がると、アイテムクラフトで様々なアイテムに加工することができます。この加工はプレイヤーのアイテムインベントリから行うことができますが、設定したレシピのアイテムクラフトを材料の限り自動で行ってくれる組立機と呼ばれる設置型アイテムがあります。

これらを適切に組み合わせる事で、プレイヤーは見ているだけで作業が勝手に進んでいくという夢のような世界を作り上げることができます。これがこのFactorioというゲームの目標です。

模範的Factorioプレイヤーの証
(3.3%しか取得されてませんね)

鉄道

Factorioには自動車や戦車などの乗り物がいくつか存在し、その中に鉄道があります。

現実の鉄道と同様に、敷設した軌道上を機関車が走ることができます。機関車には人が乗りこむことができますし、機関車に貨物貨車やタンク貨車を繋げることでアイテムを運ぶこともできます。機関車の運転は乗り込んだプレイヤーが行うことができますが、これも駅と信号により自動的な列車運行が可能です。

現実の貨物列車は、荷の行き先によって編成を組み替える途方もない作業を行います(かつては本当に危険で手間がかかる作業でした。興味がある方は「突放」で検索してみてください)が、Factorioにそのような作業を自動的に行うようなシステムは存在しないため、荷物を積んで運び荷物を降ろして戻ってくるサイクルを回し続けることができる列車編成を行う必要があります。

Factorioの鉄道設計パターン

前述の通り、Factorioの貨物列車は最初に設置された編成のまま一生回り続けるという制約があります。このようなシステム的な制約は他にも存在し、Factorioの機関車は自動運転中に後退することができません。これはなかなか大きな制約で、遠回りを強いられたり、袋小路線に突っ込むと自動運転では脱出できなくなります

図1 自動運転で脱出できなくなっている機関車

袋小路線をどうするか

一つの回答に袋小路線を許容しないというものがあります。袋小路線が存在しないのなら袋小路線に由来する問題は発生しません。

しかし袋小路線自体は有用な軌道敷設のパターンです。Factorioの鉄道の軌道のカーブの最小半径はコンパクトに敷設しようと考えるとかなりかさばります[図2]。袋小路線を許容するのなら、このような大きなカーブを描いてUターンする必要がなくなります。

図2 最小半径で半回転する軌道

自動運転で袋小路線に突っ込んでいって戻ってこれるような方法があれば設計の選択肢になります。こちらの方針での回答に、逆方向に進める機関車を列車編成に追加するというものがあります[図3]。こうすることで、自動運転で袋小路線に入って行っても、自動運転で折り返して戻ってくることができます。

図3 列車編成に逆方向の機関車を追加したところ

この編成が万能かと言えば、これにも問題があります。逆方向に進める機関車を追加していると、推進力を生まない機関車というデッドウェイトが常に列車編成にのしかかります。機関車の重量は軽くはなく、エネルギー効率や速度で問題が出てきます。

双方向線をどうするか

袋小路線に入って行って折り返すということは、その袋小路線は双方向に列車が進行する線路と言うことになります。場合によっては両方から列車が進入して動けなくなるデッドロックが発生します。現実の鉄道で言う「閉塞」を実現することは可能なので適切に信号制御をすることで回避できます。逆に言えば双方向線に不適切な信号制御が行われるとデッドロックを生みます

図4 デッドロックの例

袋小路線と同じく、双方向線を許容しないという回答が存在します。単純明快です。しかし、袋小路線を活用するのなら、双方向線も許容する必要があります

前述の通り、適切に信号制御を行って閉塞を実現すれば、双方向線に起因するデッドロックの問題は起きなくなります。これで問題が全て解決するかと言うと、そう言う訳にもいきません。閉塞を設置するということは、その区間に進入できる列車を制限するということなので、その区間のスループットが大きく減少します。全体の輸送効率が落ちるだけでなく、詰まった列車が他の区間へはみ出して影響がどんどん拡大していくような事案も発生します。現実の鉄道では事前に作成されたダイヤグラムに則って全体制御されますが、ダイヤグラムを扱うような仕組みはFactorioの鉄道にはないため、より対処が難しくなっています。Factorioの鉄道で双方向線のスループット向上に使える手法には、「閉塞の分割」と「複線化」があります。

閉塞の分割は、現実の鉄道で行われているように、列車交換可能な駅や信号所を作成してすれ違いを行えるようにすることです。Factorioの鉄道でも簡単な信号制御で列車交換が可能です[図5]。

図5 列車交換の例

複線化も同じく現実の鉄道で行われているように、行きの軌道と帰りの軌道を分けてしまう方法です。ある意味では双方向線を許容しない方法と言えます(路線ではなく軌道単位では一方通行になっています)。閉塞の分割よりもスループットの向上に寄与しますし、デッドロックも起きづらいですが、軌道を二本用意することになるので当然敷地を広く確保する必要があります。また、分岐などの路線の結束点は非常に複雑な配線になってしまいます。

まとめ

Factorioの鉄道設計には次の二軸の選択が存在します。

  • 列車編成を「単方向」にするか「双方向」にするか。

  • 路線を「単線単方向」にするか「単線双方向」にするか「複線双方向」にするか。

一方通行のすゝめ

友達とやっているマルチのFactorioでは、最初は「双方向」+「単線双方向」で設計し、ぐちゃぐちゃになった鉄道を整理しようという機運が生まれた時に「双方向」+「複線双方向」が採用されるのが定例でした。ほぼそのマルチでしかやっていなかったので毎回それだったのですが、実績の「怠惰なろくでなし」を取得しようと考えてソロで始めた時に「単方向」を採用したのが一方通行との出会いでした。その結果、想像よりもずっと良いことが分かってきて、少なくともソロでやるのなら双方向の列車はやらなくても良いのかなぐらいに思っています。

袋小路線が使えないのはそんなに問題ではなかった

用地が広く要るとは言え、鉄道が敷設できるぐらいにゲームが進行しているのなら使える土地は有り余っています。贅沢にぐるっとUターンさせましょう。コンパクトにまとめることを目指さないことで、工場の拡張性が自然と確保されるなどのメリットもありました。

メンテナンスがしやすい

「双方向」+「単線双方向」を採用していると、スループットが低下している区間を見つけ出して閉塞の分割を行っていく必要があります。スループットの低下を検出するためには、列車の挙動をよく観察する必要があり、これが非常に煩わしいですマルチなら対応を押し付け合う遊びができますが、ソロだと自分が面倒なだけです。

これが「単方向」+「単線単方向」であれば、敷設時に通常信号(その前の区間に列車が存在するかだけを判断する信号)を設置するだけでよく、ほぼメンテナンスフリーです。「双方向」+「複線双方向」でもメンテナンスの手間はあまりありませんが、こちらは敷設時に手間と資材が多く必要な問題があります。

燃料補給が作りやすい

Factorioの機関車は電化されていないので、プレイヤーやインサータによって燃料を入れないと動かすことができません。自動運転中に自動的に補給されるように作るのですが、「単方向」では先頭の車両へ燃料を入れるだけでいいので設計が簡単です。貨物貨車の数を変えても燃料補給位置が変わらないのもありがたいです。

省リソース

機関車はそれなりにリソースを使うアイテムなので、使用数が減るのはお得です。その上1スタックに10台しか入らないという厄介なアイテムなので、持ち歩く量を減らせるとインベントリ効率が格段に上昇します

複線双方向から良いとこだけ取れる

この区間は双方向に行き来したいと思ったら、その部分だけ複線化してしまえば、全体の複雑さを抑えつつ輸送効率を伸ばすことができます。

一方通行の問題点

当然存在します。

設計がやや難しい

「双方向」+「単線双方向」を採用していると、とりあえず分岐に連動式信号を置いておけばなんとかなりますが、「単方向」+「単線単方向」の分岐はある程度は信号の仕組みを分かっていないと厄介な印象があります。一部区間だけ複線化するようなことも、信号の仕組みが分かっていないとデッドロックを生みやすいです。

遠回りになると言えばそう

全ての列車が最短経路を通ることを目指すのは難しいです。やろうとすると、どんどんと「双方向」+「複線双方向」に近づいていきます

とは言え、逆方向の機関車によるデッドウェイトがないので、最終的な効率はそんなに悪くはないはずです。

全体の把握が難しい

「単線双方向」や「複線双方向」での路線は「二点が繋がっている」以外の情報を持たない(これを無向グラフと言います)ため路線把握の問題が起きづらいです。

これが「単線単方向」では「どの方向へ進むことができるか」という方向の情報があります(これを有向グラフと言います)。この時点で認知負荷が高まっているのですが、さらに悪いことに「どの方向へ進むことができるか」という情報をマップから読み取ることが難しいです。というのも、どの方向へ進むことができるかは、どのように信号が置かれているかによって導かれる結果でしかないため、どのような信号制御が行われているのか信号の配置から読み取る必要があります

図6 マップで見た信号と線路

Factorioの列車は進行方向の右側の信号に従って制御されるため、逆に言えば右側に信号がない方向へは進めません。ということで図6のマップから図7のように読み取ることができます。

図7 信号配置から読み取った進行可能な方向(赤矢印)

これは非常に認知負荷が高く、敷設した人しか分からないレベルです。そういう意味ではマルチではなくソロ向きの方式なのかもしれないです。

終わりに

ということで、マニアックなゲームのマニアックな話にお付き合いありがとうございました。Factorioにはこのレベルのややこしい話が他にもたくさんできるようなゲームなので、万人向けとは言い難いゲームですが、ここまで読み進めることができたあなたなら適性がありそうです。Steam版が4000円、Switch版が4500円と安くはないゲームですが、お値段以上の楽しさがあることは保障します。気付いたら朝だったを一回でもやればもうお釣りが来ていることでしょう。まあ、つまり、逆に適性がある人は買わない方が良いのかもしれません。

この記事が気に入ったらサポートをしてみませんか?