The result: if accuracies are eligible for rerolls, 2.40 dmg/attack. If they are retained, 2.28 dmg, with quite a lot of swing. Overall, I think this is comparable to a Swarming TIE Interceptor, but with a bit higher variance.
dmg result : inverse chance, rounded
0: 1/10 (annoyingly frequent)
1: 1/5
2: 1/4
3: 1/4
4: 1/6
5: 1/16
6: 1/98
So, it turns out that you can use 2D convolutions to figure out the distribution of damage for a Z95 Headhunter under the influence of Lt. Blount in a closed form (ie, without resorting to Monte Carlo). The general idea is to write down a matrix with one type of result along one dimension (the probability of a specific amount of damage) and some other result along another dimension (in this case, the probability that I want to reroll that one die).
I convolve one red squadron die's probability matrix with itself twice to get a baseline attack matrix. This includes columns from 0 to 6 damage, and rows from zero to three eligible rerolls.
Policy choice: I re-roll dice one at a time, once for swarm, and once for Horn. So if my first reroll of one die is also a miss, then I can still reroll that die again. I'm newish to the game, so please correct me if that isn't true.
To implement the rerolls, I pick off the section of the matrix that is eligible, convolve that with one red die, and add it to the portion of the matrix that is not reroll eligible. Twice, for the two sequential rolls.
This function is executable in GNU Octave (it might also work in Matlab).
Enjoy!
function [dist, avg] = blount_rolls(keep_accuracy = true) % return the chances for each amount of damage, starting from zero, as well as % the average damage. % 2D probability map, with number of hits along columns, and number of % rerolled dice along the rows (0 or 1) sred = zeros(2, 3); if (keep_accuracy) sred = [1, 2, 1; 4, 0, 0]/8; else sred = [0, 2, 1; 5, 0, 0]/8; end % Two red anti-squadron dice sred2 = conv2(sred, sred); % Three red anti-squadron dice z95_base = conv2(sred2, sred) % z95_base with one swarm reroll z95_swarm = [z95_base(1,:); zeros(3, 7)] ... + conv2(sred, z95_base(2:end, 1:end-2)) % z95_swarm with one Lt. Blount reroll. The reroll is deliberately % sequential. z95_blount = [z95_swarm(1,:); zeros(3, 7)] ... + conv2(1red, z95_swarm(2:end, 1:end-2)) % Collapse the result into only the damage columns. dist = sum(z95_blount, 1); dmg = 0:1:6; % And also compute the expected value of the distribution (the average damage output). avg = dmg * dist'; end
Edited by jbrandmeyer
Correction: Lt. Blount and the Z-95's, not Corran Horn. Again. Grumble.. Doh!