If you have an intractable error, I find constructing a simpler case, whose purpose is to confirm base assumptions/design, can be very helpful.
Your code has many references to specific class/weapons (which is good in terms of features), but may obfuscate the core mechanisms under test - an...