Mechanics of successful attack but no damage?

I really like the idea of the 2d20 system but am having trouble understanding one aspect of the mechanics. While running a “Learn the System” practice game with friends (happened to be Fallout 2d20 but could have been any other 2d20 game) this happened:
A player shot a raider with a 10mm pistol making a successful attack. The body location d20 roll indicated the raider was hit in the head. The raider in question had no armor covering his head. The player rolled for damage and only rolled blanks indicating no damage had occurred. The team had already spent all their Action Points at this time. I believe the player could have given the Overseer action points for more damage dice but the Overseer had a pretty big pool at the time and the player didn’t want to add to it. The player was also out of luck points. The raider was one of the last guys left in a combat encounter so the group had depleted most of their resources. I believe the player was even using his last ammo.
Mechanically we all understood what had happened according to the dice. But none of us could wrap our heads around a bullet hitting a raider (who didn’t even have a hat on) in the head and doing no damage.
So, is there an official ruling on what this means in game? Is it left up the the Overseer to decide how to describe it? Do people generally just describe the bullet parting the raider’s hair or taking out an ear but doing no serious damage? Or maybe describing the bullet zipping by the raider’s ear even though this describes a miss when the dice indicated a hit?
Or am I misunderstanding the rules in some way that wouldn’t let this happen?
Let me know any official ruling I missed and/or how everyone else handles this.

In the more recent 2d20 games where the damage code is only N[CD], N = number of damage dice, there is always the chance of rolling only blanks - causing no damage at all.
This can be described as a “minor hair injury” or some similar hit to absolutely non-lethal, non-injuring locations on the target’s body (like shooting through a fold in the coat, through the hair, etc.).

In older 2d20 games like Mutant Chronicles and Infinity, the old damage code is used: M+N[CD], M = fixed number of damage points, N number of damage dice. So you will always cause at least the fixed number M damage, even if the dice came up all blanks.

That’s good to know. I haven’t delved into Mutant Chronicles or Infinity yet. The old system seems to make more sense but it looks like the new system is becoming standard. I prefer systems that mechanically avoid whiff and ping issues. But those systems seem to have other bigger issues than this. Which early on in combat can be mitigated by using Action Points/Momentum, Luck/Fortune and/or Overseer Action Points/Doom/Threat. I was mainly curious how other groups handled this result when it comes up. I’ll continue with creative descriptions for rolling all blank damage dice. Of course I still have to put up with some players joking about “shooting blanks” but that’s a different issue.
Thanks for the information, FrankF. I appreciate it.
If anyone else would like to chime in I’d love to hear it.

With Dishonored or Dune, you don’t have damage dice at all. So no “no damage” hits.

If the players are concerned about rolling all blanks then they need to conserve their Luck for such a thing.

This is true, though as the number of dice increases, the odds of this happening rapidly become trivial. This is partly why we try and have most weapons inflcit at least 3d of damage, because the odds of 0 is only 3.7%. This drops to just over 1% for 4 dice, under 0.5% for 5 dice, and about 0.14% for 6 dice.

That was mainly because the chance of all-blanks was significantly higher (2-3 times higher), and the chance of dice format allowed us to avoid the more fiddly static+dice damage codes.


Your game, your rules!

If all of you are in disagreement of a rule, just change it!

You could simply say an attack that hits always do at least 1 damage.
Or allow to reroll damage dice on a complete blanks result.