No; always suspect your code first.
Personally, I think Columbo is correct about the problem.
Second, look at:
Character_Health_Timer += 20 * ( deltaTicks / 1000.f );
How large is deltaTicks each frame?
Let's pretend it's 40 millaseconds:
Character_Health_Timer += 20 * ( 40 millaseconds / 1000.f );
Character_Health_Timer += 20 * ( 0.04 );
Character_Health_Timer += 0.8 // '0.8' gets rounded down to 0.0
Character_Health_Timer += 0.0 //Nothing changes
It only gets large enough to affect things if your deltaTime is larger than 50 millaseconds.
This means, if your framerate is larger than 20 FPS, your regeneration doesn't work!
So you need to do two things:
First, make sure your update functions doesn't get called until you accumulate a significant amount of 'deltaTime' (e.g. 1/30th of a second).
Second, for areas of code like this, you need to accumulate the millaseconds locally until you know you have enough time to do something with it.
This means something like:
void Character::Character_Stats_Controller(Uint32 deltaTicks)
{
if(Game_Mode == GAMEPLAY_MODE)
{
/////////////////////////////////
// HEALTH REGENERATION.
/////////////////////////////////
Character_Health_Accumulated_Time += deltaTicks;
// If the timer passes the wait time
while(Character_Health_Accumulated_Time >= Character_Health_Required_Time)
{
//This can just be a local variable.
int amountToHeal = (rand() % 3) + 1;
//Give the character health
Character_Health += amountToHeal;
//Subtrack the amount of time we used.
Character_Health_Accumulated_Time -= Character_Health_Required_Time;
//Set the amount of time we need to wait until we get healed again.
//Note: I'm keeping your time in millaseconds, hence the '* 1000'
Character_Health_Required_Time = ((rand() % 3) + 1) * 1000;
}
if(Character_Health > Max_Health)
{
Character_Health = Max_Health; /* Not a magic number */
}
}
}