Not sure what revision EZ was running on when that problem happened, but if it was rev 1398 or newer, it may have been related to this change:
// base fizzlechance is lets say 5%, we can make it lower for AA skills or whatever
float basefizzle = 10;
float fizzlechance = basefizzle - specialize + diff / 5.0;
// always at least 1% chance to fail or 5% to succeed
fizzlechance = fizzlechance < 1 ? 1 : (fizzlechance > 95 ? 95 : fizzlechance);
if(IsBardSong(spell_id))
{
fizzlechance -= GetAA(aaInternalMetronome) * 1.5f;
}
float fizzle_roll = MakeRandomFloat(0, 100);
mlog(SPELLS__CASTING, "Check Fizzle %s spell %d fizzlechance: %0.2f%% diff: %0.2f roll: %0.2f", GetName(), spell_id, fizzlechance, diff, fizzle_roll);
if(fizzle_roll > fizzlechance)
return(true);
return(false);
Do the bards that cause the crash all have the Internal Metronome AA? You could probably test with a bard that has it vs one that doesn't to see if one crashes and the other doesn't. I am not sure, but maybe if they have that AA, and if the roll for fizzlechance starts out as 1, then when it factors in the AA, fizzlechance goes into the negative. Not sure if that would cause a problem, but maybe. Even if it isn't the source of the crash, it is till something that may need to be fixed, as I don't think you should ever have a negative fizzle chance