EDIT: Found the issue: https://imgur.com/a/YCq4XMO
I was just playing it the other day and noticed that (like you said) the gem carriers are getting spawned without the upgrade. Which I believe only started occurring after I fixed an animation bug, go figure.
Anyways -- as far as damage goes, internally the damage model is bare bones. Everything is stored as an integer, and damage applying functions floor or ceil the decimal in your favor. So if you're dealing damage, the value is rounded up, and rounded down if you're getting hit. Here are all the constants related to damage in the game:
PLAYER_HEALTH 100 RAIDER_HEALTH 45 BIG_ROCK_HEALTH 6 SMALL_ROCK_HEALTH 2 HEALTH_POD_HEALTH 20 BASE_PLAYER_DAMAGE 1 RAIDER_BULLET_DAMAGE 15 BIG_ROCK_DAMAGE 25 SMALL_ROCK_DAMAGE 5
Honestly I'm surprised the game isn't more buggy than it is. The the main source file -- where all the game code resides in -- is 2600 lines of C, built on a handmade engine, and it's a mess. While I'd love to have the time (and by extension, money) to continue to improve this small game, it's not really an option right now. If you are interested, I've made a DevLog about the state of the game.