
興味本位でやってみたらもの凄く苦労したので、自分が忘れないようにメモしておきます。
間違っている事を書いていましたらごめんなさい。
オーバーレイ枠の指定
通常オーバーレイ枠ならString strOverlay = “Face [Ovl0]”
独自オーバーレイ枠ならString strOverlay = “Face [SOvl0]”
独自オーバーレイ枠を使用する場合はRaceMenuのskee64.iniを開いて
[Overlays/Face] ; "Face [Ovl#]" and "Face [SOvl#]"
; Determines how many face overlays there should be
iNumOverlays=3 ; Default[3]
iSpellOverlays=1 ; Default[1]
iSpellOverlays=1以上に設定すれば、Face [SOvl0]が使用出来ます。
使用するテクスチャパスの記述方法
Dataから書き始めた事で認識しました。
Data/Textures/KimachuuBOKO2Face/F/01.dds
String変数を返す関数として用意しておくと、色んな種族や状況に対応しやすいです。
テクスチャの色味
R:69、G:69、B:62くらいの灰色で描いたらうまくいきました。
実行関数の例
以下みたいな関数を用意して、どこかで実行させます。
Function applyOverlayFace(Actor act01, String strTex, Float fAlpha = 1.0, Int iColor = 0x000000)
Bool isFemale = act01.GetLeveledActorBase().GetSex() == 1
String strOverlay = "Face [SOvl0]"
;9:Texture
NiOverride.AddNodeOverrideString(act01, isFemale, strOverlay, 9, 0, strTex, True)
;8:Alpha
NiOverride.AddNodeOverrideFloat(act01, isFemale, strOverlay, 8, -1, fAlpha, True)
;7:Color
NiOverride.AddNodeOverrideInt(act01, isFemale, strOverlay, 7, -1, iColor, True)
NiOverride.ApplyNodeOverrides(act01)
EndFunction
テクスチャのインデックスは0じゃないと認識しませんでした。
アルファは1.0を渡すと不透明、0.0を渡すと透明になります。}
アルファを0.0にしてから
NiOverride.RemoveAllNodeNameOverrides(actSelf, isFemale, strOverlay)
を続けて実行する事で、オーバーレイ枠を消す事が出来ました。
カラーはRGB値を16進数で入力するので、位置的には0xRRGGBBみたいになります。
人間種族以外を弾く
PapyrusUtilを使用したカジートとアルゴニアンを弾くBool関数の例です。
分かる人が見ると分かるのですが、SSLの種族弾きを参考にしました。
Bool Function validRace(Actor act01)
Race tempRace = act01.GetLeveledActorBase().GetRace()
String strRace = MiscUtil.GetRaceEditorID(tempRace)
If (StringUtil.Find(strRace, "Argonian") != -1) || (StringUtil.Find(strRace, "Khajiit") != -1)
tempRace = None
Return False
EndIf
tempRace = None
Return True
EndFunction
上記の関数でFalseを返した時に実行を中断させる場合は
Actor actSelf = Self.GetActorReference()
If !validRace(actSelf)
actSelf = None
Return
EndIf
が手っ取り早いと思います。
できそうな事
敗北ペナルティMODとの併用を想定して、倒れる度に顔の汚れが段階的に進行するといった事をしたかったので、それを実現する為に色々調べていました。
Effect Shaderとは別枠で自由度が高いので、汚れ以外の用途にも使える気がします。
コメント