I need these two shaders combined

I’ve been trying and trying to get these two shaders to combine, but with no luck. It either is unlit, or the texture masking doesn’t work. I require the outline on a masked tint pixel lit diffuse surface.

If someone can figure this out, awesome. Could you also explain to me how it works.

Masked Tint:

Shader "Masked Tint" {


Properties
{
    _Color ("Tint Color", Color) = (1,1,1)
    _MainTex ("Texture  (A = Tint Mask)", 2D) = ""
}

SubShader 
{
    Pass
    {      
        // tint the texture
        SetTexture [_MainTex]
        {
            ConstantColor [_Color]
            combine texture * constant
        }
                
        // alpha blend between untinted and tinted
        SetTexture [_MainTex]
        {
            combine previous lerp(texture) texture
        }      
    }
}

 
}

Outlined Diffuse:

Shader "Outlined Diffuse" 
{ 
   Properties 
   { 
      _Color ("Main Color", Color) = (.5,.5,.5,1) 
      _OutlineColor ("Outline Color", Color) = (0,1,0,1) 
      _Outline ("Outline width", Range (0.002, 0.03)) = 0.01 
      _MainTex ("Base (RGB)", 2D) = "white" { } 
      //Not needed 
      //_ToonShade ("ToonShader Cubemap(RGB)", CUBE) = "" { Texgen CubeNormal } 
   } 

   SubShader 
   { 
      Tags { "RenderType"="Opaque" } 
      //Minor switch 
      //UsePass "Toon/Basic/BASE" 
      UsePass "Diffuse/BASE" 
      Pass 
      { 
         Name "OUTLINE" 
         Tags { "LightMode" = "Always" } 
          
         CGPROGRAM 
         #pragma vertex vert 

         struct appdata { 
             float4 vertex; 
             float3 normal; 
         }; 

         struct v2f { 
            float4 pos : POSITION; 
            float4 color : COLOR; 
            float fog : FOGC; 
         }; 
         uniform float _Outline; 
         uniform float4 _OutlineColor; 

         v2f vert(appdata v) { 
            v2f o; 
            o.pos = mul(glstate.matrix.mvp, v.vertex); 
            float3 norm = mul ((float3x3)glstate.matrix.modelview[0], v.normal); 
            norm.x *= glstate.matrix.projection[0][0]; 
            norm.y *= glstate.matrix.projection[1][1]; 
            o.pos.xy += norm.xy * o.pos.z * _Outline; 
    
            o.fog = o.pos.z; 
            o.color = _OutlineColor; 
            return o; 
         } 
         ENDCG 
          
         Cull Front 
         ZWrite On 
         ColorMask RGB 
         Blend SrcAlpha OneMinusSrcAlpha 
         //? -Note: I don't remember why I put a "?" here 
         SetTexture [_MainTex] { combine primary } 
      } 
   } 
    
   Fallback "Diffuse" 
}

What I thought would work, but doesn’t:

Shader "Masked Outline Diffuse" 
{ 
   Properties 
   { 
      _Color ("Main Color", Color) = (.5,.5,.5,1) 
      _OutlineColor ("Outline Color", Color) = (0,1,0,1) 
      _Outline ("Outline width", Range (0.002, 0.03)) = 0.01 
      _MainTex ("Texture  (A = Tint Mask)", 2D) = ""
      //Not needed 
      //_ToonShade ("ToonShader Cubemap(RGB)", CUBE) = "" { Texgen CubeNormal } 
   } 
	SubShader{
		Pass{
			SetTexture [_MainTex]
			{
				ConstantColor [_Color]
				combine texture * constant
			}
			SetTexture [_MainTex]
			{
				combine previous lerp(texture) texture
			}  
		}
	}
	SubShader 
	{ 
		Tags { "RenderType"="Opaque" } 
		//Minor switch 
		//UsePass "Toon/Basic/BASE" 
		UsePass "Diffuse/BASE"		 
		Pass 
		{ 
			Name "OUTLINE" 
			Tags { "LightMode" = "Always" } 
			  
			CGPROGRAM 
			#pragma vertex vert 

			struct appdata { 
				float4 vertex; 
				float3 normal; 
			}; 

			struct v2f { 
				float4 pos : POSITION; 
				float4 color : COLOR; 
				float fog : FOGC; 
			}; 
			uniform float _Outline; 
			uniform float4 _OutlineColor; 

			v2f vert(appdata v) { 
				v2f o; 
				o.pos = mul(glstate.matrix.mvp, v.vertex); 
				float3 norm = mul ((float3x3)glstate.matrix.modelview[0], v.normal); 
				norm.x *= glstate.matrix.projection[0][0]; 
				norm.y *= glstate.matrix.projection[1][1]; 
				o.pos.xy += norm.xy * o.pos.z * _Outline; 
		
				o.fog = o.pos.z; 
				o.color = _OutlineColor; 
				return o; 
			} 
			ENDCG 
			  
			Cull Front 
			ZWrite On 
			ColorMask RGB 
			Blend SrcAlpha OneMinusSrcAlpha 
			 //? -Note: I don't remember why I put a "?" here 
			SetTexture [_MainTex] { combine primary } 
		}
	}
	
	
    
   Fallback "Diffuse" 
}

except that wouldn’t work. After a bunch of fiddling and reading shader docs cause I’ve never done them before, I figured that in order to use diffuse lighting, I can’t set the tint color as the main material color, because the diffuse pass uses that color. So instead I made a new color _Tint, and use that. Also I changed the order of some stuff.

Shader "Masked Outline Diffuse" 
{ 
   Properties 
   { 
      _Color ("Main Color", Color) = (.5,.5,.5,1)
	  _Tint ("Tint Color", Color) = (.5,.5,.5,1)
      _OutlineColor ("Outline Color", Color) = (0,1,0,1) 
      _Outline ("Outline width", Range (0.002, 0.03)) = 0.01 
      _MainTex ("Texture  (A = Tint Mask)", 2D) = ""
   } 
	
	SubShader 
	{ 
		Tags { "RenderType"="Opaque" } 
		UsePass "Diffuse/BASE"
		Pass{
			Tags { "LightMode" = "Always" } 
			Cull Back 
			ZWrite On 
			ColorMask RGB 
			Blend SrcAlpha OneMinusSrcAlpha 
			 Material {
                Diffuse (1,1,1,1)
                Ambient (1,1,1,1)
            }
            Lighting On
			SetTexture[_MainTex]
			{
				combine texture * primary
			}
			SetTexture[_MainTex]
			{
				ConstantColor[_Tint]
				combine constant * previous double
			}
		}
		Pass 
		{ 
			Name "OUTLINE" 
			Tags { "LightMode" = "Always" } 
			  
			CGPROGRAM 
			#pragma vertex vert 

			struct appdata { 
				float4 vertex; 
				float3 normal; 
			}; 

			struct v2f { 
				float4 pos : POSITION; 
				float4 color : COLOR; 
				float fog : FOGC; 
			}; 
			uniform float _Outline; 
			uniform float4 _OutlineColor; 

			v2f vert(appdata v) { 
				v2f o; 
				o.pos = mul(glstate.matrix.mvp, v.vertex); 
				float3 norm = mul ((float3x3)glstate.matrix.modelview[0], v.normal); 
				norm.x *= glstate.matrix.projection[0][0]; 
				norm.y *= glstate.matrix.projection[1][1]; 
				o.pos.xy += norm.xy * o.pos.z * _Outline; 
		
				o.fog = o.pos.z; 
				o.color = _OutlineColor; 
				return o; 
			} 
			ENDCG 
			  
			Cull Front 
			ZWrite On 
			ColorMask RGB 
			Blend SrcAlpha OneMinusSrcAlpha 
		}
	}
	
	
    
   Fallback "Diffuse" 
}

So this works, but it’d be nice if someone could point on how to make it so that the diffuse pass could be give a different color or something, that way I can continue using material.color instead of having to use SetColor and GetColor cause I’m using a non-standard shader variable for the tint.

It doesn’t work if I don’t use it. I don’t know why :?

Also so that I can have pixel lit diffuse lighting.

in action:

Hi guys,

I cant make this shader to work properly, the tinted part works but not the outline.
Any help ?