From 3088914c1db3e076d8013ad16889e8726cf3b8a8 Mon Sep 17 00:00:00 2001
From: jonwd7 <jon.wd7@gmail.com>
Date: Sun, 10 Apr 2016 23:58:52 -0400
Subject: [PATCH] [FO4] New shader flags

There were 16 changed shader flags between game versions.  This creates
a new set of enums for FO4 so that the proper descriptions can be shown
for the bits.

Also, the original vercond for Shader Flags 1/2 was unnecessary.  The
Skyrim NIFs that are User Version == 11 are actually structured like FO3
NIFs and use different shader blocks.  So changing the condition like I
did is a sound change, and I've already scanned all vanilla Skyrim NIFs.
---
 nif.xml | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 82 insertions(+), 6 deletions(-)

diff --git a/nif.xml b/nif.xml
index 3b4b956..d5f8f1c 100644
--- a/nif.xml
+++ b/nif.xml
@@ -5035,10 +5035,84 @@
         <option value="31" name="SLSF2_HD_LOD_Objects"></option>
     </bitflags>
 
+    <bitflags name="Fallout4ShaderPropertyFlags1" storage="uint">
+        Fallout 4 Shader Property Flags 1
+        <option value="0" name="FSF1_Specular" />
+        <option value="1" name="FSF1_Skinned" />
+        <option value="2" name="FSF1_Temp_Refraction" />
+        <option value="3" name="FSF1_Vertex_Alpha" />
+        <option value="4" name="FSF1_GreyscaleToPalette_Color" />
+        <option value="5" name="FSF1_GreyscaleToPalette_Alpha" />
+        <option value="6" name="FSF1_Use_Falloff" />
+        <option value="7" name="FSF1_Environment_Mapping" />
+        <option value="8" name="FSF1_RGB_Falloff" />
+        <option value="9" name="FSF1_Cast_Shadows" />
+        <option value="10" name="FSF1_Face" />
+        <option value="11" name="FSF1_UI_Mask_Rects" />
+        <option value="12" name="FSF1_Model_Space_Normals" />
+        <option value="13" name="FSF1_Non_Projective_Shadows" />
+        <option value="14" name="FSF1_Landscape" />
+        <option value="15" name="FSF1_Refraction" />
+        <option value="16" name="FSF1_Fire_Refraction" />
+        <option value="17" name="FSF1_Eye_Environment_Mapping" />
+        <option value="18" name="FSF1_Hair" />
+        <option value="19" name="FSF1_Screendoor_Alpha_Fade" />
+        <option value="20" name="FSF1_Localmap_Hide_Secret" />
+        <option value="21" name="FSF1_Skin_Tint" />
+        <option value="22" name="FSF1_Own_Emit" />
+        <option value="23" name="FSF1_Projected_UV" />
+        <option value="24" name="FSF1_Multiple_Textures" />
+        <option value="25" name="FSF1_Tessellate" />
+        <option value="26" name="FSF1_Decal" />
+        <option value="27" name="FSF1_Dynamic_Decal" />
+        <option value="28" name="FSF1_Character_Lighting" />
+        <option value="29" name="FSF1_External_Emittance" />
+        <option value="30" name="FSF1_Soft_Effect" />
+        <option value="31" name="FSF1_ZBuffer_Test" />
+    </bitflags>
+    
+    <bitflags name="Fallout4ShaderPropertyFlags2" storage="uint">
+        Fallout 4 Shader Property Flags 2
+        <option value="0" name="FSF2_ZBuffer_Write" />
+        <option value="1" name="FSF2_LOD_Landscape" />
+        <option value="2" name="FSF2_LOD_Objects" />
+        <option value="3" name="FSF2_No_Fade" />
+        <option value="4" name="FSF2_Double_Sided" />
+        <option value="5" name="FSF2_Vertex_Colors" />
+        <option value="6" name="FSF2_Glow_Map" />
+        <option value="7" name="FSF2_Transform_Changed" />
+        <option value="8" name="FSF2_Dismemberment_Meatcuff" />
+        <option value="9" name="FSF2_Tint" />
+        <option value="10" name="FSF2_Grass_Vertex_Lighting" />
+        <option value="11" name="FSF2_Grass_Uniform_Scale" />
+        <option value="12" name="FSF2_Grass_Fit_Slope" />
+        <option value="13" name="FSF2_Grass_Billboard" />
+        <option value="14" name="FSF2_No_LOD_Land_Blend" />
+        <option value="15" name="FSF2_Dismemberment" />
+        <option value="16" name="FSF2_Wireframe" />
+        <option value="17" name="FSF2_Weapon_Blood" />
+        <option value="18" name="FSF2_Hide_On_Local_Map" />
+        <option value="19" name="FSF2_Premult_Alpha" />
+        <option value="20" name="FSF2_VATS_Target" />
+        <option value="21" name="FSF2_Anisotropic_Lighting" />
+        <option value="22" name="FSF2_Skew_Specular_Alpha" />
+        <option value="23" name="FSF2_Menu_Screen" />
+        <option value="24" name="FSF2_Multi_Layer_Parallax" />
+        <option value="25" name="FSF2_Alpha_Test" />
+        <option value="26" name="FSF2_Gradient_Remap" />
+        <option value="27" name="FSF2_VATS_Target_Draw_All" />
+        <option value="28" name="FSF2_Pipboy_Screen" />
+        <option value="29" name="FSF2_Tree_Anim" />
+        <option value="30" name="FSF2_Effect_Lighting" />
+        <option value="31" name="FSF2_Refraction_Writes_Depth" />
+    </bitflags>
+
     <niobject name="BSLightingShaderProperty"  abstract="0" inherit="NiProperty">
-        Skyrim PP shader for assigning material/shader/texture.
-        <add name="Shader Flags 1" type="SkyrimShaderPropertyFlags1" vercond="User Version == 12" default="2185233153">Skyrim Shader Flags for setting render/shader options.</add>
-        <add name="Shader Flags 2" type="SkyrimShaderPropertyFlags2" vercond="User Version == 12" default="32801">Skyrim Shader Flags for setting render/shader options.</add>
+        Bethesda shader property for Skyrim and later.
+        <add name="Shader Flags 1" type="SkyrimShaderPropertyFlags1" vercond="(User Version 2 != 130)" default="2185233153">Skyrim Shader Flags for setting render/shader options.</add>
+        <add name="Shader Flags 2" type="SkyrimShaderPropertyFlags2" vercond="(User Version 2 != 130)" default="32801">Skyrim Shader Flags for setting render/shader options.</add>
+        <add name="Shader Flags 1" type="Fallout4ShaderPropertyFlags1" vercond="(User Version 2 == 130)" default="2151678465">Fallout 4 Shader Flags. Mostly overridden if "Name" is a path to a BGSM/BGEM file.</add>
+        <add name="Shader Flags 2" type="Fallout4ShaderPropertyFlags2" vercond="(User Version 2 == 130)" default="129">Fallout 4 Shader Flags. Mostly overridden if "Name" is a path to a BGSM/BGEM file.</add>
         <add name="UV Offset" type="TexCoord">Offset UVs</add>
         <add name="UV Scale" type="TexCoord" default="1.0, 1.0">Offset UV Scale to repeat tiling textures, see above.</add>
         <add name="Texture Set" type="Ref" template="BSShaderTextureSet">Texture Set, can have override in an esm/esp</add>
@@ -5082,9 +5156,11 @@
     </niobject>
 
     <niobject name="BSEffectShaderProperty" abstract="0" inherit="NiProperty">
-        Skyrim non-PP shader model, used primarily for transparency effects, often as decal.
-        <add name="Shader Flags 1" type="SkyrimShaderPropertyFlags1"></add>
-        <add name="Shader Flags 2" type="SkyrimShaderPropertyFlags2"></add>
+        Bethesda effect shader property for Skyrim and later.
+        <add name="Shader Flags 1" type="SkyrimShaderPropertyFlags1" vercond="(User Version 2 != 130)" />
+        <add name="Shader Flags 2" type="SkyrimShaderPropertyFlags2" vercond="(User Version 2 != 130)" />
+        <add name="Shader Flags 1" type="Fallout4ShaderPropertyFlags1" vercond="(User Version 2 == 130)" />
+        <add name="Shader Flags 2" type="Fallout4ShaderPropertyFlags2" vercond="(User Version 2 == 130)" />
         <add name="UV Offset" type="TexCoord">Offset UVs</add>
         <add name="UV Scale" type="TexCoord" default="1.0, 1.0">Offset UV Scale to repeat tiling textures</add>
         <add name="Source Texture"  type="SizedString">points to an external texture.</add>
-- 
GitLab