光源に関しては知らないことが多すぎるので、また微妙なことやってるかもしれませんが。
Face Light使用中にtorch(松明)を使うと、Facelightで顔を照らしつつ、松明の光源が有効になっています。
一方、Osare Culort Outfit - UNPのCulort Nabeeを照明に使おうと装備してみると、松明と違ってFacelightの効果が消えず、Nabeeの光源が有効になりません。iMagicLightMaxCountは11になっているけど、Magic Effectの光源をキャラクタにくっつけるのに制限がある?とか、松明のようなMagic Effect通してない光源だとOK?とか、色々想像してみますが、僕のキャパ超えてます。そもそも僕の環境だけだったら記事自体スキップしてくださいまし・・・
Facelight.espでCandlelightとFacelightがスクリプトで排他仕様になっているので、何か秘密がありそうですが、これまた僕のキャパ超えててわかりません。
ということで、わからない時はとりあえずマネ見習ってみようということで、
- 松明の光源設定に合わせてみる
- Culort Nabeeに同じようなスクリプトを仕込んでみる
あたりを試してみます。
Osare Culort Outfit のファンネル
Osare CulortについてくるNabee。自キャラの周りをふわふわ飛んでます。
Facelightをつけた状態でNabeeを装備しても、光源になってくれません。アクセサリで使う分にはこれでもいいかもですが。
一方、松明を装備した場合です。周囲の明るさを見れば一目瞭然、松明が光源になっています。Facelightも潰れていません。
松明と同じ光源にしてみる
大抵Lightは、Magic Effectを経由して設定されてるかと思いますが、松明はLightそのものを装備するといった形になっていて、Magic Effectを通していません。光源周り詳しくないのでアレですが、あまり同様のものは無さそうな気がします。
松明の構造
松明です。アイテムを装備する以上はMISCカテゴリかと思いきや、「LIGH」そのものです。Lightのオブジェクトに直接メッシュとNameを設定してあります。
Nabeeのライトを直接装備してみる
ということで、松明と同じことをしてみました。NabeeのライトをNew Recordでコピーして、メッシュと名前を設定してみました。
※(20150428)実験で使ってた別パラメータのSSと間違えていたので差し替え。ライト色の変更と、「unknown」フラグが立ってました。
装備してみました。FacelightとNabee双方の光源が両立しています。しています・・が・・・
左手で見えない松明持ってます。
Lightに直接メッシュとName設定した場合、松明のモーションが適用されてしまう気がします。装備部位も左手限定になってしまいます。これ回避するのは至難の業な予感が。下手に潰すと松明が中に浮くことになりそうです。両立できてるだけに勿体無いですが。松明にあわせてNabeeの高さも上がってます。
Nabeeにスクリプトを仕込んでみる
Nabee装備中はFacelightを解除し、Nabeeを外したら復活させる。そんなスクリプトを考えます。はじめに少し触れた、FacelightとCandlelightを排他にするスクリプトの話です。作者さんのブログで1.3のソースが配布されていますので、参考にします。
過去のスクリプト記事も役に立ちます。装備する、外すをトリガにするスクリプト。
スクリプトのソース
とりあえずこんなの作ってみました。参考というより、作者さんのサイトにアップされているFacelightとCandlelightをトグルさせるスクリプトをベースに改造してみただけです。
Scriptname NabeeFaceLightCandleLightToggle extends ObjectReference
Spell property NabeeFacelight auto
bool bHasSpell = false
Event OnEquipped(Actor akActor)
Nabeefacelight = Game.GetFormFromFile(0x0007FFA2, "Facelight.esp") as Spell
If akActor.HasSpell(Nabeefacelight)
Game.GetPlayer().RemoveSpell(Nabeefacelight)
bHasSpell = true
endif
EndEvent
Event OnUnequipped(Actor akActor)
If bHasSpell
akActor.AddSpell(NabeeFacelight,false)
bHasSpell = false
Endif
EndEvent
スクリプトの説明
僕もスクリプト超初心者なので、説明書きながら勉強してるノリです。なもんで書き方良くないとかあるかも。いくつかに区切って説明します。
Scriptname NabeeFaceLightCandleLightToggle extends ObjectReference
Spell property NabeeFacelight auto
bool bHasSpell = false
「Nabeefacelight」という器を用意します。Facelightのアドレスを入れる予定地です。
「bHasSpell」というFlagを使って、Nabeeを装備する前にFacelightが使われていたのか否かを識別します。
Facelight未使用>Nabee装備>Nabee外す>Facelight付いちゃったテヘッ!
という流れにならない為のメモのようなもの。
次いきます。
Event OnEquipped(Actor akActor)
Nabeefacelight = Game.GetFormFromFile(0x0007FFA2, "Facelight.esp") as Spell
If akActor.HasSpell(Nabeefacelight)
Game.GetPlayer().RemoveSpell(Nabeefacelight)
bHasSpell = true
endifEndEvent
Nabeeを装備した状態(OnEquipped)になったときに発動するしかけです。
「Nabeefacelight」にはFacelightのアドレスを格納して、このスクリプトで直接Facelightをコントロールできるようにします。
GetFormFromFime()で特定esp内のアドレスを指定すると、現在のロードオーダーから割り出した上位2桁を足したアドレスを返してくれます。これによりFacelight.espをマスター指定しなくても、Facelightの現在のアドレスがわかります。ロードオーダーが変わっても大丈夫ですが、espファイル名とアドレスを直接指定しているので、Facelightが別のMODとマージされている場合は動きません。
※OnEquipedの中にこれ入れるのは微妙な気がするのですが(1回だけ取得すればいいから)、OnLoadだとうまく出来なかったので、とりあえずはこれで。
あとは、Facelightが使われていた場合はFacelightを取り外し(RemoveSpell)、付いてたことを覚えておき(bHasSpell=true)、終了します。
これでNabee装備時にはFacelightが外れます。
最後はNabeeを外した時です。
Event OnUnequipped(Actor akActor)
If bHasSpell
akActor.AddSpell(NabeeFacelight,false)
bHasSpell = false
EndifEndEvent
外した時にbHasSpellをチェックして、真であれば「Facelightが使われていた」ということになるので、Facelightを戻します(AddSpell)。
偽であれば、もともとFacelightが使われていなかったということなので、そのまま終わります。
スクリプトをNabeeにくっつける
CKで見たNabeeです。右下でスクリプトをくっつけてます。
Skyrimで確認
ゲームを起動してNabeeを装備してみます。Facelightが消えてNabeeの光源が有効になっています。顔ちょっとコワイ。
やっぱりMagic EffectのLightって、キャラクターに対して1個しか付けられないんですかね?光源として使うにはこれでいいですけど、松明みたいにMagic Effect通さないと共存できるようなので、何かいい方法あると良いのですが。
このゴーグルもほぼ同じようなスクリプト使ってライトと併用してます。Eventがちょっとだけ違うとか、その程度。Dwemer Goggles and Scouterのホットキーで呼ばれるスクリプト部分に突っ込んでます。
【おまけ】GetFormFromFile()の補足
GetFormFromFile()ですが、上記のように特定espを指定した上で、その中のアドレスを走査します。今回の例だと、もしFacelightを外していなかった場合は、
「探したけどそんなesp無かったよ!」という報告(スタックエラー)がデバッグログに出るだけでスキップされます。
Wet and Coldでログにでてくるやつがまさにこれです。対応MODがインストールされているかチェックしてます。無かった場合はエラーが出てるだけです。導入環境によっては出るに決まってるエラーです。
逆に言うと、この対応MODをマージしてしまうと、Wet and Coldが見つけてくれません。
※改造したMODの配布はしてないです。というかしちゃダメです。作者さんの許可あれば別ですけど。