Mix shader not combining alphas?

I’m trying to fix a shader that layers transparent textures over a base image. The shader is almost working as intended, but the second pattern has a masking effect on the first one. I think their alphas are not being properly combined, but I don’t know enough about shader programming to be sure. Any help would be greatly appreciated.

alt text

(Please excuse the temp assets lol, but you can see how the blue blobs in pattern1 are being masked by pattern2)

Here is my code so far (originally by @Namey5 ):

Shader "Custom/MonsterShader" {
 Properties {
         _BaseColor ("Pattern 1 Color", Color) = (1,1,1,1) 
         _PatternColor ("Pattern 2 Color", Color) = (1,1,1,1)
         _Pattern2Color ("Base Color", Color) = (1,1,1,1)
         _Pattern ("Pattern1", 2D) = "white" {}
         _Pattern2 ("Pattern2", 2D) = "white" {}
         _Overlay ("Texture Overlay", 2D) = "white" {}
     }
     SubShader {
         Pass {
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #pragma target 3.0
             #include "UnityCG.cginc"
 
             struct v2f {
                 float4 pos : SV_POSITION;
                 float2 uv : TEXCOORD0;
             };
 
             v2f vert (appdata_base v) {
                 v2f o;
                 o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
                 o.uv = v.texcoord.xy;
                 return o;
             }
 
             sampler2D _Pattern;
             float4 _Pattern_ST;
             sampler2D _Pattern2;
             float4 _Pattern2_ST;
             sampler2D _Overlay;
             float4 _Overlay_ST;
             fixed4 _BaseColor;
             fixed4 _PatternColor;
             fixed4 _Pattern2Color;
 
             half4 frag (v2f i) : SV_Target
             {
                  half4 c = lerp (_BaseColor, _PatternColor, tex2D (_Pattern, TRANSFORM_TEX (i.uv, _Pattern)).r);
 half4 c2 = lerp (c, _Pattern2Color, tex2D (_Pattern2, TRANSFORM_TEX (i.uv, _Pattern2)).r) ;
 return c2 * tex2D (_Overlay, TRANSFORM_TEX (i.uv, _Overlay));
             }
             ENDCG
         }
     }
 }

The shader was never meant for this purpose. From memory, it was a custom built masking-overlay shader rather than a mix shader. If you wish to combine the two, you can use the following (modified from the original);

 Shader "Custom/MonsterShader" {
  Properties {
          _BaseColor ("Pattern 1 Color", Color) = (1,1,1,1) 
          _PatternColor ("Pattern 2 Color", Color) = (1,1,1,1)
          _Pattern2Color ("Base Color", Color) = (1,1,1,1)
          _Pattern ("Pattern1", 2D) = "white" {}
          _Pattern2 ("Pattern2", 2D) = "white" {}
          _Overlay ("Texture Overlay", 2D) = "white" {}
      }
      SubShader {
          Pass {
              CGPROGRAM
              #pragma vertex vert
              #pragma fragment frag
              #pragma target 3.0
              #include "UnityCG.cginc"
  
              struct v2f {
                  float4 pos : SV_POSITION;
                  float2 uv : TEXCOORD0;
              };
  
              v2f vert (appdata_base v) {
                  v2f o;
                  o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
                  o.uv = v.texcoord.xy;
                  return o;
              }
  
              sampler2D _Pattern;
              float4 _Pattern_ST;
              sampler2D _Pattern2;
              float4 _Pattern2_ST;
              sampler2D _Overlay;
              float4 _Overlay_ST;
              fixed4 _BaseColor;
              fixed4 _PatternColor;
              fixed4 _Pattern2Color;
  
              half4 frag (v2f i) : SV_Target
              {
                   half4 c = lerp (tex2D (_Overlay, TRANSFORM_TEX (i.uv, _Overlay)) * _BaseColor, _PatternColor, tex2D (_Pattern, TRANSFORM_TEX (i.uv, _Pattern)).r);
                   half4 c2 = lerp (c, _Pattern2Color, tex2D (_Pattern2, TRANSFORM_TEX (i.uv, _Pattern2)).r) ;
                   return c2;
              }
              ENDCG
          }
      }
  }