The above is not quite correct. It's more complicated than that.
(skip to the last paragraph for a more concise summary)
Here's the relevant source code:
// if the player's legs are damaged, then reduce our speed accordingly
newSpeed = defSpeed;
if ( Level.NetMode == NM_Standalone )
{
if (HealthLegLeft < 1)
newSpeed -= (defSpeed/2) * 0.25;
else if (HealthLegLeft < 34)
newSpeed -= (defSpeed/2) * 0.15;
else if (HealthLegLeft < 67)
newSpeed -= (defSpeed/2) * 0.10;
if (HealthLegRight < 1)
newSpeed -= (defSpeed/2) * 0.25;
else if (HealthLegRight < 34)
newSpeed -= (defSpeed/2) * 0.15;
else if (HealthLegRight < 67)
newSpeed -= (defSpeed/2) * 0.10;
if (HealthTorso < 67)
newSpeed -= (defSpeed/2) * 0.05;
}
// let the player pull themselves along with their hands even if both of
// their legs are blown off
if ((HealthLegLeft < 1) && (HealthLegRight < 1))
{
newSpeed = defSpeed * 0.8;
bIsWalking = True;
bForceDuck = True;
}
The basic point here is that your torso being damaged below about 2/3 (of max health) will slow you down a little, and a leg being damaged below 2/3 will slow you down more, with further penalties when below 1/3 and when totally destroyed. These are applied separately for each leg, but if both legs are blown off, the regular speed penalties are totally negated, and you are forced to crouch at 80% normal crouch-walking speed.
My guess, if you're not using mods that change this for some reason, is that you're simply not noticing a relatively small change to your running speed.
And here's the relevant source code regarding weapon accuracy being affected by health:
if (checkit)
{
if (HealthArmRight < 1)
accuracy += 0.5;
else if (HealthArmRight < BestArmRight * 0.34)
accuracy += 0.2;
else if (HealthArmRight < BestArmRight * 0.67)
accuracy += 0.1;
if (HealthArmLeft < 1)
accuracy += 0.5;
else if (HealthArmLeft < BestArmLeft * 0.34)
accuracy += 0.2;
else if (HealthArmLeft < BestArmLeft * 0.67)
accuracy += 0.1;
if (HealthHead < BestHead * 0.67)
accuracy += 0.1;
}
So basically, if your head or an arm is below 2/3 health, you get a bit of an accuracy penalty, and the arms get further penalties at lower health than that, with very severe penalties if one or both is blown off. Note, like legs, that each arm's penalty is applied separately, so having two damaged arms is worse than having one damaged arm and one arm at full health. If you're reading the code there, bear in mind that a higher accuracy number is actually bad (0.0 is 100% accuracy).
So: The takeaway here is that all body part damage matters, with the torso and legs affecting movement speed and the head and arms affecting accuracy, but that head and torso health only care if they're over 66%, and legs and arms have more severe penalties that get worse with decreasing health.