While I have no doubt that exact answers can be worked out for this question, by far the easiest way to do this is via simulation. This means that the probabilities are approximate, not exact, but with a reasonable number of simulated rolls, the precision should be far greater than anything required to design or enjoy a game. Below is code in Mathematica for simulating dice rolls as you describe then for tabulating the probabilities followed by the results I got with 1,000,000 simulated rolls.
For what it's worth, I may have misunderstood your rolling schema, so if you can verify the accuracy of any of these cells, that would be useful (of course, I could also have made a mistake in the code). If you are a programmer and use some other language like Python, let me know and I'll translate this.
Here is some code that sets up the machinery we will want for simulating:
(* Generate simulated dice rolls. If more than 12 dice are requested,
the dice past the first 12 are always 6s. *)
Roll[ndice_, nsim_ : 1000000] := If[ndice > 12,
Join[
RandomInteger[{1, 6}, {12, nsim}],
ConstantArray[5, {ndice - 12, nsim}]],
RandomInteger[{1, 6}, {ndice, nsim}]];
(* Only 1s count toward botches, and only 4/5/6 count against;
we can sum -1s and 1s (per this key) to see if there are
enough success rolls to avoid a botch (sum of translated values
is >= 0) or if there are too many 1s (sum of translated values
is < 0). *)
onesKey = {1, 0, 0, 0, 0, 0};
(* If there isn't a botch, all that matters for success is whether
the values are 1/2/3 or 4/5/6. *)
successKey = {0, 0, 0, 1, 1, 1};
sixesKey = {0, 0, 0, 0, 0, 1};
(* The function that counts up the total number of successes in each
simulated roll of the dice. Returns totals for {success rolls, ones, sixes}. *)
Score[rolls_] := With[
{flatrolls = Flatten[rolls],
nsim = Last@Dimensions[rolls]},
{Total@Partition[successKey[[flatrolls]], nsim], (*Successes*)
Total@Partition[onesKey[[flatrolls]], nsim], (*Ones*)
Total@Partition[sixesKey[[flatrolls]], nsim]}] (*Sixes*)
We can then build up a table of probabilities for each dice-count between 1 and 14 and for each difficulty between 1 and 10:
table = Table[
With[
{scores = N@Score@Roll[ndice]},
With[
{n = Length[scores[[1]]],
nSucc = scores[[1]],
nOnes = scores[[2]],
nSixes = scores[[3]]},
Table[
With[
{success = Unitize[Sign[nSucc - diff] + 1],
botch = 1 - Unitize[Sign[nOnes - nSucc] - 1]},
Table[
(1/n)*Which[
lev === None,(*Botches*)
Total[(1 - success)*botch],
lev === All,(*Any success*)
Total[success],
lev == 4,(*4 or more*)
Total[success*Unitize[Sign[nSixes - 4] + 1]],
True,(*A specific level of success ()*)
Total[success*(1 - Unitize@Sign[nSixes - lev])]],
{lev, {None, 0, 1, 2, 3, 4, All}}]],
{diff, 1, 10}]]],
{ndice, 1, 14}];
Here are the tables; each cell in the table gives the probability of success for the given difficulty (by column) and the given number of dice rolled (by row).
