Particle shaders Help

I’m trying to create a particle shader that casts and receives shadows but i keep getting an error saying i have a syntax error in line 28 does anyone know what is the error, thanks in advance

 Shader "Ethical Motion/Particles/Unity5/Lit Alpha Blend Emissive Soft Particle" {
    Properties {
        _TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5)
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _InvFade ("Soft Particles Factor", Range(0.01,3.0)) = 1.0
        _Thickness ("Thickness Factor", Range(0.0, 0.2)) = 0.05
        _Cutoff ("Alpha cutoff", Range(0,1) ) = 0.5
        _Color ("Main Color", Color) = (1.0, 1.0, 1.0, 1.0)
    }
    SubShader {
    Pass
    {
   
        Tags { "RenderType"="Transparent" "IgnoreProjector"="True" "Queue"="Transparent" }
        Blend SrcAlpha OneMinusSrcAlpha
        AlphaTest Greater .01
        Cull Back
        Zwrite Off
        Lighting Off
       
        CGPROGRAM
        #pragma surface surf SmokeSelfIlluminated vertex:vert noforwardadd addshadow alpha:fade nodynlightmap nodirlightmap 
        #pragma target 3.0
        #include "EMLighting.cginc"

        sampler2D _MainTex;
        sampler2D _CameraDepthTexture;
        fixed4 _TintColor;
        fixed _InvFade;
   
        struct Input {
            float2 uv_MainTex;
            float4 color : COLOR;
            float4 projPos : TEXCOORD1;
        };
       
        void vert(inout appdata_full v, out Input o) {
            UNITY_INITIALIZE_OUTPUT(Input, o);
            float4 pos = mul (UNITY_MATRIX_MVP, v.vertex);
            o.projPos = ComputeScreenPos (pos);
            COMPUTE_EYEDEPTH(o.projPos.z);
        }

        void surf (Input i, inout SurfaceOutputSmoke o) {
            float sceneZ = LinearEyeDepth (SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos)));
            float partZ = i.projPos.z;
            float fade = saturate (_InvFade * (sceneZ-partZ));
            i.color.a *= fade;
           
            fixed4 c = tex2D(_MainTex, i.uv_MainTex) *_TintColor * i.color.a; 
            o.Albedo = 2 * c.rgb;
            o.Alpha = 2 * c.a;
            o.SelfIllumin = i.color.rgb;
        }
        ENDCG
    } 
    Pass {
                Name "ShadowCollector"
                Tags { "LightMode" = "ShadowCollector" }
               
                Fog {Mode Off}
                ZWrite On ZTest LEqual
       
                CGPROGRAM
                    #pragma vertex vert
                    #pragma fragment frag
                    #pragma fragmentoption ARB_precision_hint_fastest
                    #pragma multi_compile_shadowcollector
                   
                    #define SHADOW_COLLECTOR_PASS
                    #include "UnityCG.cginc"
                    #include "AutoLightParticle.cginc"
                   
                    struct v2f {
                        V2F_SHADOW_COLLECTOR;
                        float2  uv : TEXCOORD5;
                    };
                   
                    uniform float4 _MainTex_ST;
                    float4x4 _Camera2World;
                   
                    v2f vert (appdata_base v)
                    {
                        v2f o;
                        TRANSFER_SHADOW_COLLECTOR_PARTICLE(o)
                        o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
                        return o;
                    }
                   
                    uniform sampler2D _MainTex;
                    uniform fixed _Cutoff;
                    uniform fixed4 _Color;
                   
                    fixed4 frag (v2f i) : COLOR
                    {
                        fixed4 texcol = tex2D( _MainTex, i.uv );
                        clip( texcol.a*_Color.a - _Cutoff );
                       
                        SHADOW_COLLECTOR_FRAGMENT(i)
                    }
                ENDCG
            }
            }
    Fallback "Hidden/Ethical Motion/Particles/Lit Alpha Blend Shadow Fallback"

}

A) It might be line 28 of your included EMLighting.cginc, not necessarily line 28 of your surface shader … also surface shaders are weird and the line numbers can lie.

B) Transparent queue cannot receive shadows. Unity simply doesn’t send the required information to the shader to do the shadow lookups in the shader. Also shadow collector is deprecated in Unity 5.0, you’re already using “addshadow” in your #pragma surface which should generate the necessary passes, and will override anything you add. You’ll want to remove the addshadow line and write a custom ShadowCaster pass instead (this gets used by the shadow collection pass in Unity 5, when it works).