Out of curiosity, what are your testing procedures? There might be some damage you aren't accounting for. It is odd that the graph isn't linear. Nothing in code looks like anything your graph is showing.
Going on an assumption that light guns have 200 HP and heavy guns have 425 HP (correct me if I am wrong), I use chemical spray on a gun, and hit F6 until it gets damaged. the damage done to the gun is 12.5 on each hit (again, correct me if I am wrong.) . that way I can measure with 200 HP , 187.5 , 175 , 162.5 , 150 ... 12.5 or in heavy gun case - 425 , 412.5 , 400 , 387.5 , 375 , 362.5 , 350 ... 12.5 .
All that reloading in different HP values gets recorded and then put in a editing program to count the frames it took for the gun to finish reloading. number_of_frames * 0.03 ( recording in 30 FPS ) = total reload time in seconds. I then pair them all up and plot them in matlab.
Attaching a file comparing both expected values and measured values for comparison.
EDIT:which for some reason uploaded 2 files? idk whats going on..