読者です 読者をやめる 読者になる 読者になる

Skyrim箱庭DIY

MODによる固有の環境不具合は自分で直して快適ゲーム。CTDにさようなら。Do It Yourself!!

(初心者におすすめ15)SkyrimにおけるBase IDとRef IDの違い



スポンサーリンク

アドレスには2種類ある、と言っておきながらすっかり忘れていましたので記事にします。

1つはBase ID。SteelArmorは00013952だとか、リディアさんは000A2C8Eだとか、今まで触ってきたアドレスです。

もう1つはRef ID。これは実際にゲーム上に現れたオブジェクトに対して割り振られるアドレスです。SteelArmorは00013952って決まってるんだから、そのままゲームで使えばよくない?という気もしますが、それだと不都合が出てきます。というわけで、なぜ2種類のアドレスが必要なのかを説明します。長めです。

※NPCのID知りたくて検索ランディングした場合は、こちらの記事をどうぞ。

アドレスが1種類だと困る理由

スイートロール1個

みんな大好きSweetRollです。アドレスは00064B3Dです。TES5Editで見ればすぐ分かります。コンソールで「player.additem.00064B3D 1」でゲットしました。

他のアドレスなど要らない気がしちゃいます。

 

スイートロール2個

コンソールでもう1個追加します。再度「player.additem.00064B3D 1」です。

ポケットの中にはSweeRollが2つです。2つ位なら食べられるでしょうか。

さて、2個見るとちょっと困りません?この「00064B3D」というのはどっちのSweetRollを指しているのでしょうか?両方SweetRollなので、どっちも00064B3Dな気がします。コンソールでもそのように打ってます。だとすると、片方食べて無くなった場合、もう片方も同時に消える?片方を拾うともう片方も拾ったことになる?それだとちょっと困ります(拾う分にはいいかもですが)。つまり問題は、同じ物2つをどう区別したらいいか?ということです。

オブジェクトを区別するための「Ref ID」

さっきのSweetRollを、MfgConsloeの機能を使って表示を拡張します。少し画像を加工しています。そのままだと無駄に大きな画像になるので。

スイートロール1個mfgconsole

右側に情報が表示されています。「Base ID」はコンソールに入力した通り、00064B3Dです。その上にもう1つ、ただ「ID」と書いてあります。これがRef IDです。「FF000D4F」となっています。なんのこっちゃと、1個だけではピンとこないかもしれませんので、もう1個のSweetRollも見てみます。

スイートロールmfgconsole

もう1個の情報です。Base IDはもちろん同じですが、「ID」ことRef IDは、「FF000C98」となっています。1個目のSweetRollとは違うRef IDが割り当てられています。Base IDでは、両方ともSweetRollという同一のオブジェクトを指していますが、Ref IDで見た場合は、「別の固体」として識別されることになります。

 

もしRef IDが無かったら?

分かったような分からないような、微妙!?かもしれません。逆にRef ID無しでSweetRollの固体識別をするとしたら、どうなるか考えてみます。「00064b3d」が1つのSweetRollだけを表すなら、このままではゲーム中に存在できるSweetRollは、全世界で1個だけです。2個目以降が欲しい場合は、CKやTES5Editで「SweetRoll2」といった別のデータを作らなければなりません。2個でも困るので100個ほど作ってみましょうか。「SweetRoll」、「SweetRoll2」、・・・「SweetRoll100」。TES5Editで書くだけでも大変な作業です。しかしこれだけやっても、世界で存在できるのは100個までです。101個目のSweetRollはありません。

これが山賊の鎧や武器にも当てはまるので、すべての装備を必要な数だけ全部作るハメになります。全く同じ外見、同じ性能なのに、100人の山賊が使うなら100個、データを作らなくてはなりません。それでも101人目には使えない、と。やってられませんよね?そんなの。MODのファイルも大きくなるし、アドレス枯渇しそうだし、いいこと無いです。

 

「オリジナル」と「ショートカット」のようなBase IDとRef ID

オリジナルを「Base」にしてRef IDを量産

Base IDで設定されているオブジェクトは、ゲーム内では絶対に無くならない「見本」のようなものです。SweetRollを持ったNPCがスポーンしたり、新しく導入したMODの家にSweetRollがあったりと、ゲーム内で必要になった場合は、「見本」を参照(Reference)して、ユニークなRef IDを作り、さながらWindowsのショートカットのように(MacOSだとエイリアスですが、Skyrimでエイリアスというと別の意味になってしまうので)、NPCや家の中に配置します。下の図のようなイメージです。

RefID説明図

一番最初の「player.additem.00064B3D 1」で取得したときのように、Ref IDは自動的に割り振ってくれます。3個目以降を取得しても同じです。Ref IDを割り振るアルゴリズムを考えてMODに実装する、なんてことは無いので大丈夫です。

ショートカットが消えても他に影響は無い

当たり前ですが、ゲーム内に置かれたSweetRollを1個食べても、他のRef IDのSweetRollが消えたり、ましてやオリジナルであるBase IDのSweetRollが消えたりしません。ショートカットが1個消えるだけです。

RefID説明図2

 

Base IDが無くなれば、Ref IDのオブジェクトは全て消える

ゲーム内でBase IDが消えることは有りませんが、SweetRollのBase IDを消すようなMODを入れた場合は、ゲーム内にある全てのRef IDが消滅します。絶滅です。

RefID説明図3

すべて無かったことになります。オリジナルとクローンみたいな関係を連想した人いるかもですが、オリジナルが消えるとクローンも全て消えてしまいます。2万個のSweetRollがあったとしても、Base ID無くなったら全部幻です。ただしセーブデータにゴミが残る、と思います。

 

CKでリディアさんのRef IDを見る

最後にCKでリディアさんのアドレスを見てみます。さんざん見てるよ!と言われそうですが、まあそう言わずに。CKでリディアさんのRef ID見られるんです。珍しく1stepづついってみます

 

Actorからリディアさんを探す

CKのActor欄にあるリディアさんです。右クリックで「Use Info」を見てみます。

リディアさんBaseID

 

ゲーム内に配置されたリディアさんの居場所を探す

Use Infoの窓です。Base IDとしてのリディアさんを使っている、なんらかのオブジェクト一覧になってます。

リディアさんUseInfo

下段に「Used in these Cells」という項目があります。リディアさんを使ってるセル、つまりゲーム内に配置されてるリディアさんの居る場所になります。みんな知ってることですけどBreezehomeに居ますね。

 

セルに移動してリディアさんを調べる

俗世に光臨されたリディアさんです。強そうですね。これをEditしてみます。

リディアさんセル内

 

こんなのが出てきます。BaseObjectのところに、ご存知リディアさんのBase ID、000A2C8Eが書いてあります。その上のReferenceEditor IDの欄外に、(000A2C94)と書いてあります。これがゲーム内で実際に出会うリディアさんのRef IDです。

リディアさんRefID

 

どっちが偽者だ!?正体を現せ!などと言わずとも、Ref IDで一発です。

赤と黄色のリディアさん

 

あらかじめ配置がesmやesp内で配置されているオブジェクトは、CKやTES5EditでRef IDを確認できます。Base IDと同様にRef IDの上位2桁はロードオーダーです。

ゲーム内で新規に生成されたオブジェクトのRef IDの上位2桁はFFになるようです。冒頭のSweetRollがそうでした。だからプラグインの上限は256個じゃなくて255個なんですね。(上位2桁00~FE)

 

お疲れ様でした。