Last century, before you provided such nifty code, I would have looked at attackDefense this way,
Block[{b, r, p, s}, b = {{4, 1}, {3, 4}}; r = -Transpose@b;
p[x_] := {x[[1, 2]]/Det[x], x[[2, 1]]/Det[x]};
{s = p[#] & /@ {b, r}, Norm /@ Normalize /@ s} // Column
]
But I admit that I never understood the input. For example, what does the 3 mean? Is that blue’s value for thing 1 and Red’s value for thing 2? I got your books but I remain confused about the payoff versus the view, etc.