Factorioで宇宙の謎を解き明かそう(Space Exploration攻略シーズン2) Part.3 ※最終回
※本記事は、Factorioの宇宙開発MODであるSpace Explorationの謎解き攻略記事となります。例のごとくネタバレ尽くしなので、挑戦予定の方はご注意ください。あと色々詰め込んだ結果、信じられないくらい長くなりました。
前回、輪っか状遺跡の内部で行われている演算、すなわち3次元ベクトル合成の法則解明という最後の大謎に直面しました。全てが手探りのチャレンジの中、試行を重ねるごとにますます深まっていく謎。数か月が無為に過ぎていき、諦めかけたときに思わぬ所から見えた突破口。そして、すべての手がかりが繋がった瞬間、アーティファクトの謎は解明される――――。
Space Exploration攻略シーズン2、これにて完結です!
Excelを捨てよ遺跡へ出よう
8つの3次元ベクトルを入力に1つの3次元ベクトルを出力する。まず安直に思いつくのは、8つの入力ベクトルに対して入力の順番(輪っかのどの位置で入力されたか)によって重み付けをして足してから正規化しているのではという説です。しかし、8つとも同じベクトルを入力した場合の出力が入力のベクトルの値と微妙に一致せず、この説は間違いであることが分かります。
それ以外にも、ベクトルに対する処理としては平行移動・回転・拡大縮小等色々なものが考えられます。ただ、とっかかりとなる手がかりが全くと言っていいほど無く、なにかしら仮説を立ててはデータを取って検証する、という試行をひたすら繰り返すしかありません。
そして、そんな事を繰り返すうちに、いつしか私はFactorioを起動する時間より、取ったデータをExcelに入力してあれこれ考える時間の方が長くなっていました……。ゲームやっててそんな事ある?
しかしある日、行き詰まりを見せていた法則の研究に一つの光明がもたらされます。それは、X(旧Twitter)上で、私と同じく法則解明に苦しんでいる方に向けて送られた、「遺跡は全部行った方がいい」という旨のリプライです。私も実際、遺跡の中に描かれた図形と長距離星座で出てくるパターンが同じものであることは以前から気づいており、いくつかの遺跡はリサーチ済みでした。ただ、全ての遺跡を訪れるのは大変なことと、遺跡に描かれたものが謎解きにどう関連するかも分からなかったことから、1/3くらい調べた段階で調査を中断していました。
しかし今、遺跡に描かれた内容に何かしらの意味があることが示唆されたことで、私は藁にも縋る思いで、Excelを閉じ再び宇宙船に乗り込むことにしました。
60ヶ所の遺跡を巡る旅。それは決して簡単に出来ることではありません。とはいえ、一つの恒星系には大体2~3個は遺跡のある星があることと、たとえ長距離移動が必要だとしても、Part.2のおまけコーナーで紹介した技によって移動時間短縮が図れることから、そこまで絶望的に大変というわけでもありません。
約10分かけて星間を移動して、遺跡を訪れたらまた移動して……を数十回繰り返した結果、数時間後には60ヶ所全ての遺跡を訪問し、スクショを取ることに成功しました。
ここで改めて、遺跡には何があるのかを整理してみましょう。通常プレイでは、製造に莫大なリソースを要するレベル9のモジュール(特に、赤モジュールは研究所の効率を上げられるので超重要ですね)を手に入る貴重な手段となります。しかしこの謎解きパートに於いては、そちらではなく、床に描かれた謎のデザインが重要となります。
そして、このカルトーシュを詳しく研究していった結果、様々なことが分かりました。
隠されし4図形を暴け
とりあえず注目すべきは、大きなカルトーシュの中心に描かれている図形でしょうか。全遺跡を巡ったことで、60個全ての長距離星図ベクトルの図形デザインを知ることができました。60個……?あれ、輪っかの図形の数と合わなくない?
そう、輪っかを起動したときに表示される図形は数えてみると64個あり、遺跡や長距離星図研究で分かる60個に出てこない図形が4つ含まれていることが分かります。64個の中から遺跡巡りで判明した図形を一つ一つ除いていくことで、その4つの図形を炙り出してみましょう。炙り出しの結果、隠されし4つの図形が明らかになりました。
さらにこの4図形を調査した結果、他の図形にはない特徴がありました。輪っか装置の入力位置をコンソールを起点に時計回りに入力1〜入力8とした場合、入力1にのみ、この4図形を入力することが出来なかったのです。
これまでの傾向から、輪っかの出力SVは入力1の影響を最も受けることが判っています。この特徴は、輪っかの動作原理上の何らかの制約を示唆しているのかもしません。
ピラミッドを組み立てよ
続いて注目したのは、お馴染みの図形が書かれた大きなカルトーシュではなく、その下に描かれている小さなカルトーシュの方です。
こちらの小カルトーシュも独特のデザインであり、三角形に線や丸を足したような図形を中心に、三角形の3辺(あるいは2辺)に隣接する形で、同じような図形が描かれています。
これを詳しく調べていこうと思うのですが、先ずはデータとして扱いやすいように、この三角形を文字列で表せるように符号化する方法を考えてみましょう。ここでは、この図形を作図するときの手順を元に、以下のようなルールで図形を文字列で表現することとします。
外枠の三角形に対して、左辺の平行線を引くことをL、右辺の平行線を引くことをR、底辺の辺の平行線を引くことをB、三角形の中に丸を描くことをCと表す。
外枠の三角形に対して作図を行う順番を元に左から表記する。例えば、①左辺の平行線を引いてから、②底辺の平行線を引いて、③最後に丸を描く順番で作図する場合は、LBCと表記する。
遺跡によっては逆三角形(底辺が上)で描かれている場合があり、その場合は180°反転させてから上記ルールを適用する。
適用例は以下のような感じです。
符号化のルールができたところで、各カルトーシュの三角形を文字列データに変換するとともに、一緒に小さく描かれている三角形も併せて整理していきます。すると、ある三角形Aの底辺側に三角形Bが隣接しているならば、三角形Bが中心に描かれているカルトーシュ上では上辺側に三角形Aが隣接しているといったように、必ずカルトーシュ間での三角形の位置関係は正しく対応する形となっていることが分かりました。
つまり、この小カルトーシュをつなぎ合わせることで、三角形同士の位置関係を表す何らかの巨大な図形ができるのではないかということが予想されます。そして、60個のカルトーシュの情報をもとにマッピングを行った結果、その予想が正しかったことが証明されました。
この図形があらわになった瞬間、あまりの結果の美しさに暫く呆然としました。ピラミッド型遺跡を巡って得られた情報を組み合わせた結果、図形がピラミッドのように積み重なり、巨大な三角形となったのです。
この小カルトーシュピラミッドですが、構成している三角形の数は1+3+5+7+…+15=64個となり、ここでもやはり、小カルトーシュの数と比べて4つ余分です。そしてその4つというのは、小カルトーシュピラミッドの頂点であるBBB・RRR・LLL、さらにその中心に位置するCCCの4つです。
前章で明らかになった隠されし4図形が、このBBB・RRR・LLL・CCCのいずれかに対応することは、もはや明確でしょう。
ゼロの発見、そして訪れるブレイクスルー
隠されし4図形の意味が朧気ながら見えてきました。しかし肝心の、小カルトーシュピラミッドがSV決定にどのような役割を担っているかが不明です。そこで、4図形を入力に組み込むことで何かしら特徴的な結果が得られないかと思い様々な実験を行ったところ、小さな三角形のような図形(隠されし4つの図形の章の画像の一番左の図形)が、他の図形にはない特徴を示しました。
1番目の入力にどれかの図形を指定し、2~8番目の入力にこの図形を指定したところ、出力されたSV値は1番目に指定した図形のSV値そのままでした。つまり、この図形は入力しても結果に何も影響を及ぼさない、足し算におけるゼロのような図形だったのです。そしてこれは図形のイメージからくる直観なのですが、他の3図形が三角形の角のような図形なのに対して、この図形は三角形のコアのような見た目です。つまり、他の3図形がBBB・RRR・LLLのどれかに対応し、この図形がCCCに対応するのではないかと思われます。小カルトーシュピラミッドの中心に位置する図形を指定しても結果には影響しない。これは、小カルトーシュピラミッドの役割を解明する上で大きなヒントとなる事象だと考えられます。
このように、結果に影響を与えない図形が明らかになったことは、各図形のSV値を長距離星図研究を行わなくとも求めることができるようになったことを意味します。また、様々な比較検証を行っていく中で、これまでは8つ入力することが必須だったため、1つだけ入力を変えて比較するといったことが困難だったのですが、この「ゼロの発見」により比較検証が容易に行えるようになりました。そして、この発見が謎の解明に向けた大きなブレイクスルーに繋がっていくのでした。
天球の中のサッカーボール
任意の図形のSV値が求められるようになったことで、改めてもう一つのカルトーシュである、一つの図形の周りに11個の小さい図形が描かれている大きいカルトーシュの方に注目してみましょう。
このカルトーシュ、中心の図形と周りの図形との間で何らかの数学的な関連があるのだろうかと想像がつきますが、長距離星図の研究でまばらにSV値が分かっているだけの状況では確認する術がありませんでした。しかし、各図形のSV値を求める術を得たことでいよいよ調査が進められるようになりました。
そして、実際に1つのカルトーシュに描かれている図形を全て三次元グラフにプロットしてみることで、このカルトーシュの意味することが露わになりました。
この図形、何に見えるでしょうか?私には一見してハート型に見えました。しかし、この図形をDiscord上で調査協力をお願いしていた友人I氏に見せたところ、「もしかしてこれ、サッカーボール構造のやつでは」とのコメントが。
サッカーボール構造、正式名称は切頂二十面体というそうなのですが、その名の通り、正二十面体の頂点を切り落としたような形をしており、正六角形と正五角形を組み合わせた多面体となります。
切頂二十面体の頂点数は60。一つの頂点に隣接する3つの面の頂点数の合計は11(中心となる頂点は除く)。この完璧な一致に確信を深めた私は、60個の図形のSVの中で未判明だった残りのSV値を前章の手法を使って出力し、全ての点をプロットしてみました。
予想通り、60個の点で余すところなくサッカーボール状の図形が出現しました。この謎に取り組み始めた当初は、図形のSVがどのような規則で分布しているのかは皆目見当も付きませんでした。しかし、そこから様々な手がかりを組み合わせた結果、この美しい幾何学模様にたどり着くことができました。
法則解明
60個の点で構成されるサッカーボールの天球。そして、小カルトーシュのピラミッド。あとは、この二つを使ってSV算出の原理を暴くのみです。
解明の切欠となったのは、サッカーボールの中の1つの面(六角形)の各点に対して、その点を入力1とし、小カルトーシュピラミッドの頂点(LLL, RRR, BBB)を入力2としたSVを出力してみて、何らかの関係性が見いだせないものかとプロットしてみたことでした。
プロットした結果、これまた非常に綺麗な幾何学模様となりました。特筆すべき点が2点ほどあり、まず1点目として、ある図形を入力1に指定し、入力2にLLL・RRR・BBBを指定した場合の出力結果が、上記の図で示した三角形のように、小カルトーシュピラミッドの三角形とよく似た形になったことです。
2点目としては、その三角形が互いに重ならず、しかも規則的な配置になっていることです。配置の規則については、おそらくサッカーボールを構成する六角形の中心点には、この三角形の左右の頂点が交互に集まるようになっており(上図で青色と緑色の点が交互に並んでいるところ)、五角形の中心には、この三角形の上の頂点が集まるような配置(上図で黄色の点が集まっているところ)になっているものと思われます。
これらの特徴から、SV値の算出メカニズムとして下記のような仮説を立てました。
入力1により、入力図形を中心とした三角形の領域が確定する
入力2以降により、それまでの入力で確定している三角形領域の中から、入力図形の小カルトーシュピラミッド上の位置に基づいて三角形領域が絞り込まれる
入力8時点で絞り込まれている三角形領域の中心点が出力SVとなる
そして、この仮説を補強すべく、入力2までを固定化した上で入力
3を変化させていったときの分布を確認したところ、やはり小カルトーシュピラミッドの分布に従っていることが分かりました。そこで、いよいよこの説に基づいて、答えを導いていくことにしました。
故郷へと至る道
さて、答えを導いていくわけですが、そもそも前述の仮説を使ってどのSVにセットするかという点が問題となります。そこについては、これまで進めてきた中で、スターマッピングで出てくるSVを除いて唯一具体的なSVの値が出てきた箇所がありました。Foenestraに到着した瞬間に登録された、工場長の探査日誌です。探査日誌では、宇宙船にとあるSVをセットして、それから事故に遭ったというログが残っていました。と言うわけで、輪っかアーティファクトを使ってこのSVに接続してみることを目指しましょう。
前章にて、各入力記号を元に幾何学的な操作を行うことで出力SVが導出されることを示しました。しかし正直、ベクトル操作やら多面体の特性やらを連日調べていたせいで、この時点でかなり数学はお腹一杯になっていました。なので、本当は入力記号からSVを出す仕組みを定式化できればよかったのですが、横着して、下記ルーチンで目標SVを出力するための入力を求めることにしました。
① サッカーボール天球上に目標SVをプロットして、どの点を中心とした三角形領域に目標SVが含まれるかを確認する。その点に対応する図形を入力1として確定する。
② 絞り込んだ三角形領域の頂点の座標を輪っかアーティファクトで出力する。三角形の頂点は、これまで求めた入力の後ろにRRR・LLL・BBBを指定した座標となる。
③ ②で出力した三角形の中に目標SVが入っているかどうかを検算する。入っていなかった場合、一つ前の入力が誤っていたことになるので、ひとつ前の入力を変えて②から再度実施する。
★検算方法★
まず、RRR側の頂点を点 $${A={\begin{pmatrix}x_a\\ y_a\\ z_a \end{pmatrix}}}$$、LLL側の頂点を$${B={\begin{pmatrix}x_b\\ y_b\\ z_b \end{pmatrix}}}$$、
BBB側の頂点を$${C={\begin{pmatrix}x_c\\ y_c\\ z_c \end{pmatrix}}}$$、目標SVを$${P={\begin{pmatrix}x_p\\ y_p\\ z_p \end{pmatrix}}}$$とする。
このとき、三角形ABCと同一平面上の任意の点Qに対し、
$${\vec{OQ}=\vec{OA}+m\vec{AB}+n\vec{AC}}$$ (m,nは実数)が成り立つ。
一方で、原点から目標SVに向かうベクトル($${\vec{OP}}$$)上の任意の点Qに対しては、
$${\vec{OQ}=\alpha\vec{OP}}$$ ($${\alpha}$$は実数)が成り立つ。
よって、三角形ABCと同一平面上で目標SVに向かうベクトルが交わるとき、
$${\alpha\vec{OP}=\vec{OA}+m\vec{AB}+n\vec{AC}}$$が成り立つ。
これを変形して行列で表すと、
$${{\begin{pmatrix} x_p & x_b-x_a & x_c-x_a\\ y_p & y_b-y_a & y_c-y_a\\ z_p & z_b-z_a & z_c-z_a \end{pmatrix}} \begin{pmatrix} \alpha \\ -m \\ -n \end{pmatrix} = \begin{pmatrix}x_a\\ y_a\\ z_a \end{pmatrix}}$$
となり、ここから、
$${\begin{pmatrix} \alpha \\ -m \\ -n \end{pmatrix} = \begin{pmatrix} x_p & x_b-x_a & x_c-x_a\\ y_p & y_b-y_a & y_c-y_a\\ z_p & z_b-z_a & z_c-z_a \end{pmatrix}^{-1} \begin{pmatrix}x_a\\ y_a\\ z_a \end{pmatrix}}$$
により、α・m・nの値が算出できる。
そして、求めた値が下記のすべての条件を満たしていた場合に、OPは「三角形ABCと交わっている」と判定する。
$${0\leq m,n,\alpha \leq 1}$$
$${0\leq m+n \leq 1}$$
④ ③で計算した値を元に次の入力を求める。目標SVが三角形の中のおおよそどの位置になるかを③で算出したm,nの値から求めて(※)、下記の図から該当する入力を求める。ただし、これは本来球面で求めるべきものを平面に近似しているため、実際の正解と異なる可能性があることに注意(そのため、③で検算を行っている)
(※) : 0~1を8等分したときの値(1/8=0.125)を1レベルとしたときの、m・nのレベルを求める(例えば、m=0.2だった場合、0.2/0.125=1.6となり、mのレベルは1.6)。
⑤ ②~④を、8個の入力が求められるまで繰り返す。
中々複雑なルーチンになりましたね…。このルーチンで出力を求める場合、輪っかアーティファクトによる値出力を20回以上(コンソールへの操作回数は軽く300回以上)行う必要があります。しかし、ここに至るまでの試行錯誤で既に100回どころではない値出力を繰り返してきた私にとっては造作ないことでした。
座標を出力し、検算を行い、次の入力図形を推定する。黙々とこれらの作業を続け……そしてついに、目標SVと同じ出力を行うことに成功しました!
ゴゴゴ……!
:
:
:
何も起こらない……!
この瞬間、リアルで崩れ落ちそうになりました。何故だ、一体何を間違えた。
……これが最後の罠でした。よく考えてみれば当然の話で、ログによると、工場長たちが乗っていた船は、目的地に向かう方角としてログに書かれていたSVを設定していました。つまり、元居た故郷に戻りたいならば、そのSVの逆方向に向かわないといけなかったのです。最後まで油断も隙もねぇや!
気を取り直して、今度は目標SVを先ほどの真逆の方角にしてリトライします。ただ、逆方向のベクトルになるということで、入力2~8については、幸いにも、先ほど求めた入力2~8を小カルトーシュピラミッド上で左右に反転させるだけでよさそうです(例えば、LCRだったらRCL、BRRだったらBLLといったように)。
答えとなる入力が分かったことで、ついに帰郷のときがやって来ました。
莫大な資源を費やして復旧し、漸く動かすことのできた機構。幾つもの遺跡を巡った末に得られた情報。そして無限に続くかに思えた試行錯誤。それらの果てに導き出された8つの図形を、1つ1つ入力していきます。
全ての入力が成されたとき、ゲートは故郷へと至る道を繋ぎ、工場長は元来た銀河へと帰っていくことができました。
Factorio Space Exploration、アナザークリア達成です!
最後に
通常クリアを終えてから約2年、もっと遡ると、初めてSpace Explorationを触ってから4年数か月、ようやくここにたどり着くことができました。改めて、本当にとんでもないゲームでありMODでした。
このFactorioというゲームは、1本の木、1つの石ころを拾うところから始まって、そこから自動化の力によってどんどん出来ることや自分の支配領域が広がっていきます。Space Explorationではさらに、星を飛び出して宇宙に向けてその領域が無限に拡大していくのですが、気が付いたときには、銀河中を駆け回って宇宙人の残した謎を解くという馬鹿みたいにスケールの大きい話になっていました。MOD作者のEarendel氏の想像力と発想力、そしてそれを形にする開発力には本当に脱帽です。
最後、宇宙の果てにてたった一人で謎を解き終わった工場長を見ながら、何となく私の好きなSF小説「ディアスポラ」のラストシーンを思い出しました。主人公のヤチマとパオロは、宇宙文明の先人であるトランスミューターを追って途方もない時間と空間を超え、残された遺跡の意味を解き明かします。
そして目的を果たした二人は袂を分かち、パオロは人生の完結を、ヤチマは孤独な探求の継続を選択します。最後にそのシーンを少し引用し、本記事の完結といたします。
工場長の終わりなき探求に幸運を!
Factorioで宇宙の謎を解き明かそう 〜完〜
この記事が気に入ったらサポートをしてみませんか?