// hair
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
// Parameters:
//
//   float4x3 BoneMatrices[75];
//   float4 CameraPositionVS;
//   float4 FogInScattering[4];
//   float4 FogMaxHeight;
//   float4 LightPositionAndInvRadius;
//   float4x4 LocalToWorld;
//   float3 MeshExtension;
//   float3 MeshOrigin;
//   float4 SharedFogParameter0;
//   float4 SharedFogParameter1;
//   float4 SharedFogParameter2;
//   float4 SharedFogParameter3;
//   float3 TemporalAAParameters;
//   float4 VSRRealDCoefficients1;
//   float4x4 ViewProjectionMatrix;
//   float4x3 WorldToLocal;
//   float bUseExponentialHeightFog;
//
//
// Registers:
//
//   Name                      Reg   Size
//   ------------------------- ----- ----
//   ViewProjectionMatrix      c0       4
//   CameraPositionVS          c4       1
//   VSRRealDCoefficients1     c6       1
//   BoneMatrices              c7     225
//   LocalToWorld              c232     4
//   FogInScattering           c236     4
//   WorldToLocal              c240     3
//   TemporalAAParameters      c243     1
//   MeshOrigin                c244     1
//   MeshExtension             c245     1
//   SharedFogParameter0       c246     1
//   SharedFogParameter1       c247     1
//   SharedFogParameter2       c248     1
//   SharedFogParameter3       c249     1
//   bUseExponentialHeightFog  c250     1
//   FogMaxHeight              c251     1
//   LightPositionAndInvRadius c252     1
//

    vs_3_0
    def c5, 3, 0.00784313772, -1, 1
    def c253, 9.98999977, 0.693147182, 1, 2
    def c254, 0, 0.00999999978, -0.00999999978, 0.00100000005
    def c255, 0.499000013, 0.5, 0, 0
    dcl_position v0
    dcl_tangent v1
    dcl_normal v2
    dcl_blendindices v3
    dcl_blendweight v4
    dcl_texcoord v5
    dcl_color o0.xyz
    dcl_color1 o1
    dcl_texcoord o2.xy
    dcl_texcoord3 o3
    dcl_texcoord4 o4
    dcl_texcoord6 o5
    dcl_texcoord7 o6.xyz
    dcl_texcoord5 o7
    dcl_position o8

def c220, 0, 1, 0.0625, 4.27
def c221, 0.01, 2, 3, 0
dcl_2d s3

    mov r0.xyz, c245
    mad r0.xyz, v0, r0, c244
    mul r1, c5.x, v3
    mova a0.xy, r1
    mul r2, v4.y, c7[a0.y]
    mul r3, v4.y, c8[a0.y]
    mul r4, v4.y, c9[a0.y]
    mad r2, v4.x, c7[a0.x], r2
    mad r3, v4.x, c8[a0.x], r3
    mad r4, v4.x, c9[a0.x], r4
    mova a0.x, r1.z
    mad r2, v4.z, c7[a0.x], r2
    mad r3, v4.z, c8[a0.x], r3
    mad r4, v4.z, c9[a0.x], r4
    mova a0.x, r1.w
    mad r1, v4.w, c7[a0.x], r2
    mad r2, v4.w, c8[a0.x], r3
    mad r3, v4.w, c9[a0.x], r4
    mad r4, v2, c5.y, c5.z
    mad r5.xyz, v1, c5.y, c5.z
    dp3 r6.x, r5, r1
    dp3 r6.y, r5, r2
    dp3 r6.z, r5, r3
    dp3 r5.x, r4, r1
    dp3 r5.y, r4, r2
    dp3 r5.z, r4, r3
    mul r4.xyz, r6.yzxw, r5.zxyw
    mad r4.xyz, r5.yzxw, r6.zxyw, -r4
    mul r4.xyz, r4.w, r4
    mov r0.w, c5.w
    dp4 r1.x, r0, r1
    dp4 r1.y, r0, r2
    dp4 r0.x, r0, r3
    mul r2, r1.y, c233
    mad r1, c232, r1.x, r2
    mad r0, c234, r0.x, r1
    add r0, r0, c235
    mul r1, r0.y, c1
    mad r1, c0, r0.x, r1
    mad r1, c2, r0.z, r1
    mad r1, c3, r0.w, r1
    add r0.w, r1.z, c253.x
    add r2.x, r0.w, c6.x
    log r2.x, r2.x
    mul r2.x, r2.x, c6.y
    mov r2.z, c6.z
    mad r2.y, r2.x, c253.y, r2.z
    mul r2.y, r2.y, c6.x
    mad r2.x, r2.x, -c253.y, c253.z
    add r2.x, r2.x, -c6.z
    rcp r2.x, r2.x
    mul r2.x, r2.x, r2.y
    rcp r0.w, r0.w
    mul r0.w, r0.w, r2.x
    rcp r0.w, r0.w
    add r0.w, r0.w, c5.z
    mul r0.w, r0.w, c6.w
    mad r1.x, r0.w, c253.w, r1.x
    mul r0.w, r1.w, c243.z
    mad r10.xy, r0.w, c243, r1
    mul r2.xy, r6.y, c233.xzzw
    mad r2.xy, c232.xzzw, r6.x, r2
    mad r2.xy, c234.xzzw, r6.z, r2
    mul r3.xy, r4.y, c233.xzzw
    mad r3.xy, c232.xzzw, r4.x, r3
    mad r3.xy, c234.xzzw, r4.z, r3
    mul r3.zw, r5.y, c233.xyxz
    mad r3.zw, c232.xyxz, r5.x, r3
    mad r3.zw, c234.xyxz, r5.z, r3
    mul o1.w, r4.w, c240.w
    mad r7.xyz, r0, -c4.w, c4
    mul r8.xyz, r7.y, c241
    mad r7.xyw, c240.xyzz, r7.x, r8.xyzz
    mad r7.xyz, c242, r7.z, r7.xyww
    dp3 o5.x, r6, r7
    dp3 o5.y, r4, r7
    dp3 o5.z, r5, r7
    mov r7.xyz, c252
    mul r8.xyz, r7.y, c241
    mad r7.xyw, c240.xyzz, r7.x, r8.xyzz
    mad r7.xyz, c242, r7.z, r7.xyww
    dp3 o3.x, r6, r7
    dp3 o3.y, r4, r7
    dp3 o3.z, r5, r7
    dp3 o6.x, r6, c242
    dp3 o6.y, r4, c242
    dp3 o6.z, r5, c242
    abs r0.w, c250.x
    if_lt -r0.w, r0.w
      add r4.xyz, r0, -c4
      dp3 r0.w, r4, r4
      rsq r0.w, r0.w
      rcp r4.w, r0.w
      add r4.w, r4.w, -c246.w
      max r4.w, r4.w, c254.x
      mul r4.w, r4.w, c246.x
      slt r5.x, c254.y, r4_abs.z
      add r5.y, r4.z, c254.z
      mad r5.x, r5.x, r5.y, c254.y
      mul r5.y, r5.x, -c246.y
      exp r5.y, r5.y
      add r5.y, -r5.y, c5.w
      mul r5.x, r5.x, c246.y
      rcp r5.x, r5.x
      mul r5.x, r5.x, r5.y
      mul r4.w, r4.w, r5.x
      mul r4.xyz, r0.w, r4
      dp3 r0.w, c249, r4
      mad r0.w, r0.w, -c255.x, c255.y
      pow r4.x, r0.w, c246.z
      mov r5.xyz, c248
      add r5.xyz, -r5, c247
      mad r4.xyz, r4.x, r5, c248
      exp r0.w, -r4.w
      min r0.w, r0.w, c5.w
      max r0.w, r0.w, c247.w
      add r4.w, -r0.w, c5.w
      mul o4.xyz, r4.w, r4
      mov o4.w, r0.w
    else
      add r0.xyz, r0, -c4
      dp3 r0.x, r0, r0
      rsq r0.x, r0.x
      rcp r0.x, r0.x
      mov r4.z, c4.z
      add r5, -r4.z, c249
      sge r0.y, c254.w, r0_abs.z
      lrp r4.x, r0.y, c254.w, r0.z
      rcp r0.y, r4.x
      mul_sat r5, r0.y, r5
      add r4, -r4.z, c251
      mul_sat r4, r0.y, r4
      add r0, r0.x, -c248
      max r0, r0, c254.x
      add r4, -r5, r4
      mul r0, r0, r4_abs
      slt r4, r0, c247
      mul r0, r0, c246
      exp r5.x, r0.x
      exp r5.y, r0.y
      exp r5.z, r0.z
      exp r5.w, r0.w
      mul r0, r4, r5
      mad r4, r4, r5, c5.z
      mul r5.xyz, r4.x, c236
      mov r5.w, r0.x
      mul r5, r0.y, r5
      mad r5.xyz, r4.y, c237, r5
      mul r5, r0.z, r5
      mad r5.xyz, r4.z, c238, r5
      mul r0, r0.w, r5
      mad o4.xyz, r4.w, c239, r0
      mov o4.w, r0.w
    endif
    mov r2.zw, r3.xyxz
    mov o0.xyz, r2.xzww
    mov o1.x, r2.y
    mov o1.yz, r3.xyww
    mov o2.xy, v5
    mov o3.w, c254.x
    mov o5.w, c5.w
    mov o7, r1
    mov r10.zw, r1

// approximately 167 instruction slots used

// Output adjustment inserted with DarkStarSword's shadertool.py:
// shadertool.py -i -f --stereo-sampler-vs=s3 --adjust=position Dumps/SingleShaders/VertexShader/VertexShader_59_CRC32_FC47DD36.txt
texldl r31, c220.z, s3
add r31.w, r10.w, -r31.y
mul r31.w, r31.w, r31.x
add r10.x, r10.x, r31.w

// Molotov Cocktails are misaligned even in 2D. Move bottles to the left to
// realign them. Separation preset keys also pass the separation in on Const1,
// which we can use to determine the amount to adjust this by (except in 2D) -
// ideally we would need the raw eye separation value instead.

// Get 1 / separation percentage:
mov r30, c200
mul r30.x, r30.x, c221.x
rcp r30.x, r30.x

abs r31.z, r31.x // r31.z = abs(separation)
if_ne r30.x, c220.x
	mul r31.z, r31.z, r30.x // r31.z = eye separation (or 0 if 2D - can't fix)
endif

mul r31.z, r31.z, r10.w // Scale by W
mul r31.z, r31.z, c220.w // Multiply by 3 for some reason

add r10.x, r10.x, -r31.z // Move 3 * eye separation to the left

mov o8, r10
