Fix for hair rendering, update peds meta types to be expandable objects

This commit is contained in:
dexy 2019-11-08 14:22:10 +11:00
parent 12c8fca74e
commit 9fc219e332
3 changed files with 41 additions and 27 deletions

View File

@ -5878,7 +5878,7 @@ namespace CodeWalker.GameFiles
public struct CStreamingRequestRecord //40 bytes, Key:3825587854 //SRL YMT ROOT - in /streaming/ folder [TC(typeof(EXP))] public struct CStreamingRequestRecord //40 bytes, Key:3825587854 //SRL YMT ROOT - in /streaming/ folder
{ {
public Array_Structure Frames { get; set; } //0 0: Array: 0: Frames {0: Structure: CStreamingRequestFrame: 256} public Array_Structure Frames { get; set; } //0 0: Array: 0: Frames {0: Structure: CStreamingRequestFrame: 256}
public Array_Structure CommonSets { get; set; } //16 16: Array: 0: CommonSets {0: Structure: CStreamingRequestCommonSet: 256} public Array_Structure CommonSets { get; set; } //16 16: Array: 0: CommonSets {0: Structure: CStreamingRequestCommonSet: 256}
@ -5888,7 +5888,7 @@ namespace CodeWalker.GameFiles
public uint Unused2 { get; set; }//36 public uint Unused2 { get; set; }//36
} }
public struct CStreamingRequestFrame //112 bytes, Key:1112444512 //SRL frame... [TC(typeof(EXP))] public struct CStreamingRequestFrame //112 bytes, Key:1112444512 //SRL frame...
{ {
public Array_uint AddList { get; set; } //0 0: Array: 0: AddList//327274266 {0: Hash: 0: 256} public Array_uint AddList { get; set; } //0 0: Array: 0: AddList//327274266 {0: Hash: 0: 256}
public Array_uint RemoveList { get; set; } //16 16: Array: 0: RemoveList//3372321331 {0: Hash: 0: 256} public Array_uint RemoveList { get; set; } //16 16: Array: 0: RemoveList//3372321331 {0: Hash: 0: 256}
@ -5904,7 +5904,7 @@ namespace CodeWalker.GameFiles
public uint Unused4 { get; set; }//108 public uint Unused4 { get; set; }//108
} }
public struct CStreamingRequestFrame_v2 //96 bytes, Key:3672937465 //SRL frame... [TC(typeof(EXP))] public struct CStreamingRequestFrame_v2 //96 bytes, Key:3672937465 //SRL frame...
{ {
public Array_uint AddList { get; set; } //0 0: Array: 0: AddList//327274266 {0: Hash: 0: 256} public Array_uint AddList { get; set; } //0 0: Array: 0: AddList//327274266 {0: Hash: 0: 256}
public Array_uint RemoveList { get; set; } //16 16: Array: 0: RemoveList//3372321331 {0: Hash: 0: 256} public Array_uint RemoveList { get; set; } //16 16: Array: 0: RemoveList//3372321331 {0: Hash: 0: 256}
@ -5919,7 +5919,7 @@ namespace CodeWalker.GameFiles
public uint Unused4 { get; set; }//92 public uint Unused4 { get; set; }//92
} }
public struct CStreamingRequestCommonSet //16 bytes, Key:3710200606 //SRL common set [TC(typeof(EXP))] public struct CStreamingRequestCommonSet //16 bytes, Key:3710200606 //SRL common set
{ {
public Array_uint Requests { get; set; } //0 0: Array: 0: Requests {0: Hash: 0: 256} public Array_uint Requests { get; set; } //0 0: Array: 0: Requests {0: Hash: 0: 256}
} }
@ -5937,7 +5937,7 @@ namespace CodeWalker.GameFiles
public struct CCreatureMetaData //56 bytes, Key:2181653572 [TC(typeof(EXP))] public struct CCreatureMetaData //56 bytes, Key:2181653572
{ {
public uint Unused0 { get; set; }//0 public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4 public uint Unused1 { get; set; }//4
@ -5946,7 +5946,7 @@ namespace CodeWalker.GameFiles
public Array_Structure pedCompExpressions { get; set; } //40 40: Array: 0: pedCompExpressions {0: Structure: CPedCompExpressionData: 256} public Array_Structure pedCompExpressions { get; set; } //40 40: Array: 0: pedCompExpressions {0: Structure: CPedCompExpressionData: 256}
} }
public struct CShaderVariableComponent //72 bytes, Key:3085831725 [TC(typeof(EXP))] public struct CShaderVariableComponent //72 bytes, Key:3085831725
{ {
public uint Unused0 { get; set; }//0 public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4 public uint Unused1 { get; set; }//4
@ -5959,7 +5959,7 @@ namespace CodeWalker.GameFiles
public Array_byte components { get; set; } //56 56: Array: 0: components {0: UnsignedByte: 0: 256} public Array_byte components { get; set; } //56 56: Array: 0: components {0: UnsignedByte: 0: 256}
} }
public struct CPedPropExpressionData //88 bytes, Key:1355135810 [TC(typeof(EXP))] public struct CPedPropExpressionData //88 bytes, Key:1355135810
{ {
public uint Unused0 { get; set; }//0 public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4 public uint Unused1 { get; set; }//4
@ -5973,7 +5973,7 @@ namespace CodeWalker.GameFiles
public Array_byte components { get; set; } //72 72: Array: 0: components {0: UnsignedByte: 0: 256} public Array_byte components { get; set; } //72 72: Array: 0: components {0: UnsignedByte: 0: 256}
} }
public struct CPedCompExpressionData //88 bytes, Key:3458164745 [TC(typeof(EXP))] public struct CPedCompExpressionData //88 bytes, Key:3458164745
{ {
public uint Unused0 { get; set; }//0 public uint Unused0 { get; set; }//0
public uint Unused1 { get; set; }//4 public uint Unused1 { get; set; }//4
@ -5990,7 +5990,7 @@ namespace CodeWalker.GameFiles
public struct CPedVariationInfo : IPsoSwapEnd //112 bytes, Key:4030871161 //COMPONENT PEDS YMT ROOT - in componentpeds .rpf's [TC(typeof(EXP))] public struct CPedVariationInfo : IPsoSwapEnd //112 bytes, Key:4030871161 //COMPONENT PEDS YMT ROOT - in componentpeds .rpf's
{ {
public byte bHasTexVariations { get; set; } //0 0: Boolean: 0: bHasTexVariations public byte bHasTexVariations { get; set; } //0 0: Boolean: 0: bHasTexVariations
public byte bHasDrawblVariations { get; set; } //1 1: Boolean: 0: bHasDrawblVariations public byte bHasDrawblVariations { get; set; } //1 1: Boolean: 0: bHasDrawblVariations
@ -6013,7 +6013,7 @@ namespace CodeWalker.GameFiles
dlcName = MetaTypes.SwapBytes(dlcName); dlcName = MetaTypes.SwapBytes(dlcName);
} }
} }
public class MCPedVariationInfo : MetaWrapper [TC(typeof(EXP))] public class MCPedVariationInfo : MetaWrapper
{ {
public CPedVariationInfo _Data; public CPedVariationInfo _Data;
public CPedVariationInfo Data { get { return _Data; } } public CPedVariationInfo Data { get { return _Data; } }
@ -6119,7 +6119,7 @@ namespace CodeWalker.GameFiles
} }
public struct Unk_3538495220 //24 bytes, Key:2024084511 //COMPONENT PEDS component variations item [TC(typeof(EXP))] public struct Unk_3538495220 //24 bytes, Key:2024084511 //COMPONENT PEDS component variations item
{ {
public byte numAvailTex { get; set; } //0 0: UnsignedByte: 0: numAvailTex public byte numAvailTex { get; set; } //0 0: UnsignedByte: 0: numAvailTex
public byte Unused0 { get; set; }//1 public byte Unused0 { get; set; }//1
@ -6127,7 +6127,7 @@ namespace CodeWalker.GameFiles
public uint Unused2 { get; set; }//4 public uint Unused2 { get; set; }//4
public Array_Structure aDrawblData3 { get; set; } //8 8: Array: 0: aDrawblData3 {0: Structure: 1535046754: 256} public Array_Structure aDrawblData3 { get; set; } //8 8: Array: 0: aDrawblData3 {0: Structure: 1535046754: 256}
} }
public class MUnk_3538495220 : MetaWrapper [TC(typeof(EXP))] public class MUnk_3538495220 : MetaWrapper
{ {
public MCPedVariationInfo Owner { get; set; } public MCPedVariationInfo Owner { get; set; }
@ -6196,7 +6196,7 @@ namespace CodeWalker.GameFiles
} }
} }
public struct Unk_1535046754 //48 bytes, Key:124073662 //COMPONENT PEDS drawable info [TC(typeof(EXP))] public struct Unk_1535046754 //48 bytes, Key:124073662 //COMPONENT PEDS drawable info
{ {
public byte propMask { get; set; } //0 0: UnsignedByte: 0: propMask public byte propMask { get; set; } //0 0: UnsignedByte: 0: propMask
public byte numAlternatives { get; set; } //1 1: UnsignedByte: 0: 2806194106 public byte numAlternatives { get; set; } //1 1: UnsignedByte: 0: 2806194106
@ -6205,7 +6205,7 @@ namespace CodeWalker.GameFiles
public Array_Structure aTexData { get; set; } //8 8: Array: 0: aTexData {0: Structure: 1036962405: 256} public Array_Structure aTexData { get; set; } //8 8: Array: 0: aTexData {0: Structure: 1036962405: 256}
public Unk_2236980467 clothData { get; set; } //24 24: Structure: 2236980467: clothData public Unk_2236980467 clothData { get; set; } //24 24: Structure: 2236980467: clothData
} }
public class MUnk_1535046754 : MetaWrapper [TC(typeof(EXP))] public class MUnk_1535046754 : MetaWrapper
{ {
public MUnk_3538495220 Owner { get; set; } public MUnk_3538495220 Owner { get; set; }
@ -6273,14 +6273,14 @@ namespace CodeWalker.GameFiles
} }
} }
public struct Unk_1036962405 //3 bytes, Key:4272717794 //COMPONENT PEDS (cloth?) aTexData [TC(typeof(EXP))] public struct Unk_1036962405 //3 bytes, Key:4272717794 //COMPONENT PEDS (cloth?) aTexData
{ {
public byte texId { get; set; } //0 0: UnsignedByte: 0: texId public byte texId { get; set; } //0 0: UnsignedByte: 0: texId
public byte distribution { get; set; } //1 1: UnsignedByte: 0: distribution//914976023 public byte distribution { get; set; } //1 1: UnsignedByte: 0: distribution//914976023
public byte Unused0 { get; set; }//2 public byte Unused0 { get; set; }//2
} }
public struct Unk_2236980467 //24 bytes, Key:508935687 //COMPONENT PEDS clothData [TC(typeof(EXP))] public struct Unk_2236980467 //24 bytes, Key:508935687 //COMPONENT PEDS clothData
{ {
public byte ownsCloth { get; set; } //0 0: Boolean: 0: ownsCloth public byte ownsCloth { get; set; } //0 0: Boolean: 0: ownsCloth
public byte Unused0 { get; set; }//1 public byte Unused0 { get; set; }//1
@ -6292,7 +6292,7 @@ namespace CodeWalker.GameFiles
public uint Unused6 { get; set; }//20 public uint Unused6 { get; set; }//20
} }
public struct CPedSelectionSet //48 bytes, Key:3120284999 //COMPONENT PEDS [TC(typeof(EXP))] public struct CPedSelectionSet //48 bytes, Key:3120284999 //COMPONENT PEDS
{ {
public MetaHash name { get; set; } //0 0: Hash: 0: name public MetaHash name { get; set; } //0 0: Hash: 0: name
public ArrayOfBytes12 Unk_173599222 { get; set; } //4 4: ArrayOfBytes: 12: 173599222 public ArrayOfBytes12 Unk_173599222 { get; set; } //4 4: ArrayOfBytes: 12: 173599222
@ -6302,7 +6302,7 @@ namespace CodeWalker.GameFiles
public ArrayOfBytes6 Unk_672172037 { get; set; } //40 40: ArrayOfBytes: 6: 672172037 public ArrayOfBytes6 Unk_672172037 { get; set; } //40 40: ArrayOfBytes: 6: 672172037
public ushort Unused0 { get; set; }//46 public ushort Unused0 { get; set; }//46
} }
public class MCPedSelectionSet : MetaWrapper [TC(typeof(EXP))] public class MCPedSelectionSet : MetaWrapper
{ {
public MCPedVariationInfo Owner { get; set; } public MCPedVariationInfo Owner { get; set; }
@ -6327,7 +6327,7 @@ namespace CodeWalker.GameFiles
} }
} }
public struct CComponentInfo //48 bytes, Key:3693847250 //COMPONENT PEDS [TC(typeof(EXP))] public struct CComponentInfo //48 bytes, Key:3693847250 //COMPONENT PEDS
{ {
public MetaHash Unk_802196719 { get; set; } //0 0: Hash: 0: 802196719 public MetaHash Unk_802196719 { get; set; } //0 0: Hash: 0: 802196719
public MetaHash Unk_4233133352 { get; set; } //4 4: Hash: 0: 4233133352 public MetaHash Unk_4233133352 { get; set; } //4 4: Hash: 0: 4233133352
@ -6346,7 +6346,7 @@ namespace CodeWalker.GameFiles
public byte Unk_4196345791 { get; set; } //45 45: UnsignedByte: 0: 4196345791 public byte Unk_4196345791 { get; set; } //45 45: UnsignedByte: 0: 4196345791
public ushort Unused5 { get; set; }//46 public ushort Unused5 { get; set; }//46
} }
public class MCComponentInfo : MetaWrapper [TC(typeof(EXP))] public class MCComponentInfo : MetaWrapper
{ {
public MCPedVariationInfo Owner { get; set; } public MCPedVariationInfo Owner { get; set; }
@ -6381,7 +6381,7 @@ namespace CodeWalker.GameFiles
} }
} }
public struct CPedPropInfo //40 bytes, Key:1792487819 //COMPONENT PEDS [TC(typeof(EXP))] public struct CPedPropInfo //40 bytes, Key:1792487819 //COMPONENT PEDS
{ {
public byte numAvailProps { get; set; } //0 0: UnsignedByte: 0: numAvailProps public byte numAvailProps { get; set; } //0 0: UnsignedByte: 0: numAvailProps
public byte Unused0 { get; set; }//1 public byte Unused0 { get; set; }//1
@ -6396,7 +6396,7 @@ namespace CodeWalker.GameFiles
return this; return this;
} }
} }
public class MCPedPropInfo : MetaWrapper [TC(typeof(EXP))] public class MCPedPropInfo : MetaWrapper
{ {
public MCPedVariationInfo Owner { get; set; } public MCPedVariationInfo Owner { get; set; }
@ -6447,7 +6447,7 @@ namespace CodeWalker.GameFiles
} }
} }
public struct CPedPropMetaData //56 bytes, Key:2029738350 //COMPONENT PEDS [TC(typeof(EXP))] public struct CPedPropMetaData //56 bytes, Key:2029738350 //COMPONENT PEDS
{ {
public MetaHash audioId { get; set; } //0 0: Hash: 0: audioId public MetaHash audioId { get; set; } //0 0: Hash: 0: audioId
public ArrayOfBytes5 expressionMods { get; set; } //4 4: ArrayOfBytes: 5: expressionMods//942761829 public ArrayOfBytes5 expressionMods { get; set; } //4 4: ArrayOfBytes: 5: expressionMods//942761829
@ -6466,7 +6466,7 @@ namespace CodeWalker.GameFiles
public byte Unused5 { get; set; }//53 public byte Unused5 { get; set; }//53
public ushort Unused6 { get; set; }//54 public ushort Unused6 { get; set; }//54
} }
public class MCPedPropMetaData : MetaWrapper [TC(typeof(EXP))] public class MCPedPropMetaData : MetaWrapper
{ {
public MCPedPropInfo Owner { get; set; } public MCPedPropInfo Owner { get; set; }
@ -6494,7 +6494,7 @@ namespace CodeWalker.GameFiles
} }
} }
public struct CPedPropTexData //12 bytes, Key:2767296137 //COMPONENT PEDS [TC(typeof(EXP))] public struct CPedPropTexData //12 bytes, Key:2767296137 //COMPONENT PEDS
{ {
public int inclusions { get; set; } //0 0: IntFlags2: 0: inclusions public int inclusions { get; set; } //0 0: IntFlags2: 0: inclusions
public int exclusions { get; set; } //4 4: IntFlags2: 0: exclusions public int exclusions { get; set; } //4 4: IntFlags2: 0: exclusions
@ -6504,13 +6504,13 @@ namespace CodeWalker.GameFiles
public byte distribution { get; set; } //11 11: UnsignedByte: 0: distribution public byte distribution { get; set; } //11 11: UnsignedByte: 0: distribution
} }
public struct CAnchorProps //24 bytes, Key:403574180 //COMPONENT PEDS CAnchorProps [TC(typeof(EXP))] public struct CAnchorProps //24 bytes, Key:403574180 //COMPONENT PEDS CAnchorProps
{ {
public Array_byte props { get; set; } //0 0: Array: 0: props {0: UnsignedByte: 0: 256} public Array_byte props { get; set; } //0 0: Array: 0: props {0: UnsignedByte: 0: 256}
public eAnchorPoints anchor { get; set; } //16 16: IntEnum: eAnchorPoints: anchor public eAnchorPoints anchor { get; set; } //16 16: IntEnum: eAnchorPoints: anchor
public uint Unused0 { get; set; }//20 public uint Unused0 { get; set; }//20
} }
public class MCAnchorProps : MetaWrapper [TC(typeof(EXP))] public class MCAnchorProps : MetaWrapper
{ {
public MCPedPropInfo Owner { get; set; } public MCPedPropInfo Owner { get; set; }

View File

@ -743,6 +743,8 @@ namespace CodeWalker.Rendering
public bool HDTextureEnable = true; public bool HDTextureEnable = true;
public bool globalAnimUVEnable = false; public bool globalAnimUVEnable = false;
public ClipMapEntry ClipMapEntryUV = null; public ClipMapEntry ClipMapEntryUV = null;
public bool isHair = false;
public bool disableRendering = false;
public static ShaderParamNames[] GetTextureSamplerList() public static ShaderParamNames[] GetTextureSamplerList()
{ {
@ -854,6 +856,9 @@ namespace CodeWalker.Rendering
case 600733812://{decal_amb_only.sps} case 600733812://{decal_amb_only.sps}
SpecOnly = true; //this needs more work. SpecOnly = true; //this needs more work.
break; break;
case 100720695://{ped_hair_spiked.sps}
isHair = true;
break;
} }
@ -942,6 +947,10 @@ namespace CodeWalker.Rendering
case ShaderParamNames.DirtDecalMask: case ShaderParamNames.DirtDecalMask:
DirtDecalMask = ((Vector4)param.Data); DirtDecalMask = ((Vector4)param.Data);
break; break;
case ShaderParamNames.orderNumber:
//stops drawing hair geoms that apparently shouldn't be rendered... any better way to do this?
if (isHair && (((Vector4)param.Data).X > 0.0f)) disableRendering = true;
break;
} }
} }

View File

@ -2652,6 +2652,11 @@ namespace CodeWalker.Rendering
if (SelectionGeometryDrawFlags.ContainsKey(dgeom)) if (SelectionGeometryDrawFlags.ContainsKey(dgeom))
{ continue; } //filter out geometries in selected item that aren't flagged for drawing. { continue; } //filter out geometries in selected item that aren't flagged for drawing.
} }
else
{
if (geom.disableRendering)
{ continue; } //filter out certain geometries like certain hair parts that shouldn't render by default
}
rginst.Geom = geom; rginst.Geom = geom;