The way it works right now...it wonky
Best shown by the example of the Granade launcher, which has 3 modes of fire and 3 types of ammo, meaning 9 different entries for fire modes.
Wouldn't it be better if ammo was a separate entity, with an entry of it's own?
In that case, for an assault rifle or grenade launcher, you only need to specify the 3 basic fire modes and what type of ammo it uses (40mm grenades)
Then you have an entry for 40mm grenades, that list grenade stats.
So something like:
<ammo>
<id>40mm
<type>IC
<model>40mmIC.md2
<desc>40mmIC
<damage_type>fire
<damage>200
<radius>3
<armor_penetration>10
</ammo>
<ammo>
<id>40mm
<type>HE
<model>40mmHE.md2
<desc>40mmHE
<damage_type>explosive
<damage>200
<radius>2
<armor_penetration>15
</ammo>
<ammo>
<id>7.62mm
<type>FMJ
<model>7.62FMJ.md2
<desc>7.62FM
<damage_type>kinetic
<damage>30
<radius>2
<armor_penetration>5
</ammo>
<ammo>
<id>7.62mm
<type>AP
<model>7.62AP.md2
<desc>7.62AP
<damage_type>kinetic
<damage>20
<radius>2
<armor_penetration>25
</ammo>
So if you specify 40mm as ammo type, the granade launcher will be able to use all ammo who's main ID is 40mm.
Note I also added Armor Penetration as a bullet property, since I feel it's lacking. Just having a damage value is not enough. AP value would basicly reduce the armor value of the enemy (for damage calculation purposes). So if a guy in a armor with 50% resistance to kinetic impact is hist with a bullet with a AP value of 20, then damage is calculated as if he had 30% ballistic resistance.
And honestly, I'd go further - by giving armor durabiltiy that degrades as it takes hits, reducing it's protective values.
Also, as someone mentioned, some weapons can kick the air out of your lungs and practicly incapacitate you. JA2 had a good thing going, with health (with bleeding), energy (sorta like stamina) and morale.
To simulate heavy hits and some hard punching weapons, we could have TU penalties.
This can either be tied to damage, or to the weapon/ammo (meaning, the bullet/ammo would have it's own value, something like stopping_power, that would be basicly used in conjuction with damage, to calculate how big a TU hit one gets.
A shot in the chest from a shotgun would then slow down or knock out even a armored alien, explosions would cause disorientation, and things like stun grenades would work properly.
NOTE: Some may notice that this ties damage exclusively to ammo type and not the rifle, and would argue that some rifles simply hit harder with the same bullet compared to another. Granted.
This can be easily simulated by giving the rifle a power value, that is added on top of bullet damage.
So a rifle with power 5, fireing a bullet with 20 damage, would do 25 points of damage.