Bullets can be dodged sometimes, but high skill with guns makes it possible to still hit
int droll=t.skill_roll(SKILL_DODGE)/2;
Dodge rolls are capped at skill_roll/2. Maximum possible dodge roll is 9. Maximum possible attack roll is 18, plus a bonus based of "weapon accuracy".
This means someone with an effective skill with firearms of 9 or more can only be dodged half the time. Even with a dodge score of 99.
Looking at the code, dodge is almost worthless against anyone capable of hitting the side of a barn.
It really only makes getting shot less likely to be fatal.
Waitaminnit
if (melee && aroll < droll - 10 && t.blood>70 && t.animalgloss == ANIMALGLOSS_NONE
&& t.is_armed() && t.get_weapon().get_attack(false, true, true) != NULL)
Since dodge is capped at rolling 9, it's not actually possible to counter attack, since a counter requires "aroll < droll - 10"
And those two lines of code are the same in Terra Vitae, so it's been that way for a while....
Coming to an LCS near you,
Counter-Attacks: the Feature that was Never Fully Implemented!
Also, I'm going to make it possible to roll an 18 on a dodge. "t.skill_roll(SKILL_DODGE)/2" shall become "t.skill_roll(SKILL_DODGE/2)" (sort of, the actually implementation is more complicated) Meaning if your dodge skill is equal to double your opponent's attack skill, your chance of dodging equals your opponent's chance of hitting. That seems fair.