Starfield: ランダムなクラッシュが多発するとき【FormIDバグ】

スターフィールド

2024年2月20日のアップデート1.9.67で、Form IDバグは修正されました。

スターフィールドをかなり長い時間(数百時間単位)プレイしていると、ゲームが不安定になりクラッシュが多発することがある。これはForm IDの蓄積とID生成プロセス中のバグが原因。長時間のゲームプレイによる「膨大なForm IDの蓄積」でセーブデータが肥大化し、クラッシュが発生する。(現在は修正済み)

ここでは以下の文献を参考に、スターフィールドの「Form ID」に関連するクラッシュ問題について解説する。かなりクリティカルなバグであるため、現在症状が発生していないプレーヤーも内容を把握しておきたい。

参照:ID bug breaks your save if played too long without NG+: Reddit

この記事では、上記文献で説明されているベセスダゲームにおけるID生成ロジック「Dynamic Form ID Generation」によって生成されるIDを「Form ID」と表記する。

Form IDに関連するクラッシュ問題

Form ID(Dynamic Form ID)とは、ゲーム中で動的に生成されるIDのこと。Form IDは動的に生成されたゲーム内のオブジェクトに付与され、FFから始まる8桁の16進数で表示される。

例えば、プレーヤーがマイクロガンをドロップすると、近くにForm IDが割り当てられたマイクロガンのオブジェクトが出現する。IDはコンソールを開いてオブジェクトをクリックする確認可能。上の画像では「FF013387」というIDが動的に生成されている。

IDはゲームプレイのあらゆる場面で生成される。プレーヤーが宇宙に飛び立つと周囲に出現する船、ランダムなロケーションに配置される大量のアイテム、そして惑星/月の地表に降りたときの膨大な量のオブジェクト。実際に確認すると分かるが、地表にあるほとんどすべての岩、樹木、生物には動的に生成されたIDが割り当てられている。

恐ろしいことに、これらのForm IDは、今まで生成されたIDを含めてすべてセーブデータに保存される。そのため長時間経過すると、大量のForm IDによってセーブデータが極度に肥大化し、ID生成ロジックで「動的に指定するID」が不足し始める。ベセスダゲームではこの問題を防ぐため、Form IDのリサイクルプロセスが実装されているのだが・・。

Form IDのリサイクル

通常、使われなくなったForm IDはオブジェクトのデスポーン後にリサイクルされ、新しいオブジェクト用に再利用される。ゲームが追跡/作成できるIDの数には厳しい制限が存在するが、これは意図的なもので、この制限によりセーブデータの肥大化を防いでいる。

2007年以降のベセスダゲームでは、このリサイクルプロセスが正常に機能していた。しかし残念なことに、現在のスターフィールドにおけるリサイクルプロセスは正常に機能していない。スターフィールドでは「超肥大化したIDリストから大量のIDをカウントするプロセス」にバグがあり、問題が発生しているリサイクルプロセス中に高い負荷が発生する。

クラッシュの発生

実際のゲームでは、セーブデータの肥大化(長時間のゲームプレイによる膨大なForm IDの蓄積)がクラッシュのトリガーになる。

セーブデータが肥大化すると、生成されたすべてのIDをカウントするのが難しくなり、IDをカウントするプロセス中に高い負荷が掛かってクラッシュが発生する。また、ID生成ロジックが指定できる数を使い果たし、例外(クラッシュ)が発生する場合もある。クラッシュはプレイ時間が長くなるほど頻度が高くなり、最終的にはゲームがプレイできない状態に陥る。

クラッシュの発生タイミングで最も一般的なのは、ファストトラベル後にロード画面から出るとき、船のカスタマイズを保存しているとき、惑星/月を探索しているとき。

いつ発生するのか? (プレイ時間)

200~800時間以上のプレイ時間でクラッシュ症状が発生することが多い。発生のタイミングはゲームプレイ(どれだけ探索を行ったか)によって差が出るため、症状の発生時期に一貫性は無いが、多くの人は前述のプレイ時間でクラッシュ症状が発生している。

上記のプレイ時間はNG+を考慮していない。NG+に入ると不要なIDがすべてリセットされセーブデータは大幅に軽量化するため、NG+後のプレイ時間を計算する必要がある。逆に言うとNG+の周回で症状の進行をリセットできる。

Form IDに関連するクラッシュは、言わば「時限爆弾」のような仕様であり、超長時間にわたってゲームプレイしているといつかは発生する厄介な問題である。

症状の進行具合を確認する

どこまでForm IDが生成されているか調べると、症状の進行具合を把握できる。これはドロップしたアイテムのIDを調べることで簡単に確認可能。(PC版限定)

1. アイテムを地面にドロップする

インベントリを開いて適当なアイテムを地面にドロップする。

2. コンソールでIDを確認する

コンソールを開いてドロップしたアイテムをクリックし、生成されたID(FF~)を確認する。もし、(FF3~)のようにIDの6桁目の数字が3に到達している場合、そのセーブデータはすでにリスクがある。

例えば、IDがFF3FDD7C(16進数)の場合、先頭のFFを取り除くと3FDD7C、これを(Windowsの電卓等で)10進数に変換すると約420万。つまりセーブデータ内に400万以上のIDが保存されている。

400万に近い、またはそれを超える数値が表示された場合は要注意。カウントプロセスが「生成された大量のID」に追いつかず、ID生成プロセス中に不具合が起こる可能性がある。(実際の数値はハードウェアによって異なる)

クラッシュ症状を治す方法

最も有効な対策はNG+に入る準備をしておくこと。メインクエストを進めてアーティファクトをすべて入手し、いつでもユニティに入れるようにしておく。NG+に入るとセーブデータはクリーンな状態にリセットされ、クラッシュの症状を先延ばしにできる。NG+に入るとすべてのアイテムを失うため根本的な解決にはならないが、ゲームが完全にプレイできなくなる前に対策は取っておきたい。

2024年2月20日のアップデート1.9.67で、Form IDバグは修正されました。