Fallout好き:主にFallout New Vegas

Fallout好き:主にFallout new Vegas

2013年8月19日月曜日

自作MOD:ED-Eの武器没収バグ(武装没収バグ)対処。YMT_EDEItemRestore

※この話は以前も一部書いているかもしれない。けれども今回気付いた事もあると思うので書く。長々くどくど書く。
※今回、自分でもややこしいけど「武器」と「武装」を書き分けている。武装とは「武器」とその弾を含む。
  なぜ書き分けているかというと、武器没収バグには弾も関係してると思われたため。

カジノでコンパニオンの武装まで没収されるというバグがある。

もっとも自分はPS3版で何周かプレイして遭遇した覚えがない。が、よく聞く話でもある。
以前GECKでスクリプトを見ていて、たまたまそれの対処らしき記述を見つけていた。

----------------------------------------------------------
ScriptName VNPCFollowersQuestSCRIPT
<省略>

short bWeaponCheck ; 1 = Player has set foot in an area where his weapons may be confiscated.
(訳:「1=プレイヤーは、彼の武器が没収されるかもしれない地域に足を踏み入れました」)
(実際のこのフラグの使われ方は、武装没収のチェック(そして必要なら補充)した後、5秒後の次の武装チェックを行わないために使われている。なんのためかは不明)

<省略>

BEGIN GameMode

<省略>

; JSH 11.15.10 - Restore a companion's weapons if they somehow lose them and they're not confiscated. 
(微妙な訳:「仲間がどうにか武器を失う、そして没収されないならば、仲間の武器を元に戻してください」。
(没収されないなら武器を戻すってなんだ?没収されなかったならそのままにしておけばいいのに)

if (vDialogueTops.PlayerFrisked == 0) && (VMS18.bPlayerFrisked == 0) && (vDialogueGomorrah.iInGomorrah == 0) && (GetQuestRunning FortEquipmentConfiscationQuest == 0) && (bWeaponCheck == 1)
(Frisk=ボディーチェックする。ちなみにお菓子のFRISKはふざけ、浮かれ騒ぎの意味のようだ。各クエストの(多分)武装没収フラグが立っていないことと、武装没収済み)

if (CraigBooneREF.GetItemCount NVBooneWeapons < 2)
CraigBooneREF.AddItem NVBooneWeapons 1;
CraigBooneREF.AddItem AmmoCompanion 1;
endif
(ブーンの持っているデフォルト武器の数が2未満ならば)
(ブーンにブーンのデフォルト武器を1つ追加)
(ブーンにコンパニオン用弾丸(デフォルト武器用の弾)を一つ追加)

if (ArcadeREF.GetItemCount NVArcadeWeapons < 2)
ArcadeREF.AddItem NVArcadeWeapons 1;
ArcadeREF.AddItem AmmoCompanion 1;
endif
(アルケイド用の武装補充設定。基本的にブーンと同様)

if (LilyREF.GetItemCount NVLilyWeapons < 2)
LilyREF.AddItem NVLilyWeapons 1;
LilyREF.AddItem AmmoCompanion 1;
endif

if (VeronicaREF.GetItemCount NVVeronicaWeapons < 2)
VeronicaREF.AddItem NVVeronicaWeapons 1;
VeronicaREF.AddItem AmmoCompanion 1;
endif

if (RoseofSharonCassidyREF.GetItemCount NVCassWeapons < 2)
RoseofSharonCassidyREF.AddItem NVCassWeapons 1;
RoseofSharonCassidyREF.AddItem AmmoCompanion 1;
endif

if (RaulREF.GetItemCount NVRaulWeapons < 2)
RaulREF.AddItem NVRaulWeapons 1;
RaulREF.AddItem AmmoCompanion 1;
endif

if (EDE1REF.GetItemCount EDEZapGun == 0)
EDE1REF.AddItem EDEZapGun 1;
EDE1REF.AddItem AmmoSmallEnergyCellRobot 1;
endif
(初期のED-E用の武装補充設定)

if (EDE3REF.GetItemCount EDEZapGun == 0)
EDE3REF.AddItem EDEZapGun 1;
EDE3REF.AddItem AmmoSmallEnergyCellRobot 1;
endif
(防御強化型ED-E用の武装補充設定。武装は初期のED-Eと同じなので、補充武装も同じ)

if (EDE2REF.GetItemCount EDEZapGunUpgrade == 0)
EDE2REF.AddItem EDEZapGunUpgrade 1;
EDE2REF.AddItem AmmoSmallEnergyCellRobot 1;
endif
(武器強化型ED-E用の武装補充設定。補充される武装が初期・防御ED-Eと異なる)

set bWeaponCheck to 0

elseif (bWeaponCheck == 0)

set bWeaponCheck  to 1;

endif

----------------------------------------------------------

このように、VNPCFollowersQuestSCRIPTにより、
武器没収される場所からされない場所に移動した時、
必要ならコンパニオンの武装が補充されるようになっている。
※ よく見ると不思議な所があるがそれはまたいつか。
スクリプトはこの VNPCFollowers というクエストに設定されている。
Script Processing Deley の Default にチェックがついているため、
大体5秒毎に実行される。
これなら武器没収バグに対処出来ていると思っていた。
でも武器没収バグの話は未だに
(最終パッチが出た後、つまりこのスクリプトが入っているはずの環境なのに)
聞くので不思議に思っていた。

今回、ED-Eの消失した武装補充MODを作ってみるついでに
なぜこのスクリプトで武装が補充されないのかもちょっと気になっていた。


武装の補充の様子を見るために、
初期型ED-Eの武装がインベントリに表示されるようにしたMODを作ってゲーム起動した。
単にED-Eの武装に Playable のチェックを入れただけのもの(以前も似たようなMODを作った)。

https://sites.google.com/site/yomotaxxx/file/YMT_EDEItemPlayable.esp

これを使って実際にゲーム中の武装補充の様子を見てみる。


インベントリ表示。
ED-Eには何も持たせていないが、
MODによりED-Eの武器と弾が表示されるようになった。

ちなみに、ED-Eを仲間にした時、
電気光線銃x2、エナジー・セルx2 になる場合もあるが、
今回それはスルー(わからないから)。
また、日本語になっているのはこの部分も有志翻訳があるから。

ちなみに英語だとこういう名前。

ED-Eの装備を取る(武器没収バグ状態を再現)

少し(5秒くらい)経ってから再度インベントリ表示。
武器と弾が補充されている。
5秒程でスクリプトによって補充されていると思われる。
試しに武器の方だけ没収してみた。

5秒程経って見てみると、
先ほどと同様に武器と弾が補充されている。

ん?
エナジー・セルがなんで2つ?
と思ってスクリプトを見直すと
「ED-Eの武器が無ければ武器と弾両方を補充する」となっているため。納得。

まあ、補充されるたびにエナジー・セルが増えていってしまうけど、
そう頻繁にバグが起こるわけでもないんだろう。
ゲームクリアまでに問題になることは多分無いんだろう。
確信は持てないけど、開発者はそう思ったんだろうな。
そもそも武器没収バグの原因がわかってないからこんな曖昧な対処をしているんだろう。
次にエナジー・セルを取ってみる。

5秒程経ったが補充されない
ゲーム内時刻を確認。19:07。
ゲーム内で  21:55 になった。

時間計算苦手。
超大雑把に2時間は経っている。
Timescaleはデフォルトの設定なので30。
つまりゲーム内時間はリアル時間の30倍早く進む。

2h=120分。120/30=4分
リアル時間で4分は経っている。
4分経っても武器も弾も補充されない。

しつこいけど、スクリプトの記述は
「ED-Eの武器が無ければ武器と弾両方を補充する」となっている。
この場合、ED-Eの武器はあるので当然スクリプトは補充しないわけだ。

なーるほど。あのスクリプトじゃ武器没収バグへの対処は不完全なのかもしれない。
武器没収バグは3パターン
(消失したものが武器のみ、弾のみ、両方)
考えられるが、

このうち弾のみ没収された場合、
武器はあっても使える弾が無いため撃てなくなる。

Fallout 3もFallout New Vegasも
どちらも天才かとんでもない努力家かその両方な人達が作ったんだろうけど
(GECKで色々なものを見ているとなおさらそう思う)
この対処は穴がありそうだ。
もっとも原因がわかってないバグへの対処だから
穴に気づかないこともあるんだろう。

と、ここまで偉そうに書いたなあと思いつつ
別の場所にも武器没収バグの記述があったら?
自分マヌケだなーと思って探してみたら
あった。。

が、今見つけたスクリプトでは
補充しているのは武器だけっぽい。

このスクリプト(と他にあるかもしれない何か)についてはまた別の機会に書くかもしれない。
・ED-Eの武器没収バグの対処MOD
https://sites.google.com/site/yomotaxxx/file/YMT_EDEItemRestoreV01.7z

このMODは「ED-Eの武器が無ければ武器を補充する」「ED-Eの弾が無ければ弾を補充する」という動作をする独自のスクリプトを走らせている。多分既存のバグ修正MODでも似たような事を行っているんだろう。もしくは根本的に武器没収バグ自体修正しているのかもしれない。

今回作ったMODは根本的な修正ではないが、根本的な原因がわかってそれを修正出来たとしても、それはバニラのスクリプトなどを修正することになるんだろう。バニラのスクリプトなどは他のMODで上書きされる可能性があるため、バニラとは別に対処させた今回のやり方の方が良いかもしれない。

今回ちょっと面白かったし、他のコンパニオンについても武器没収はまだあると聞いた気がするので、全コンパニオン用をそのうち作るかもしれない。

2 件のコメント:

  1. もしかしてこないだNV質問スレに書き込んでたのは...

    返信削除