I don't know why you're so keen on using floats. This does not make any sense from my point of view. You don't gain any more precision as you have to cast to the fixed types anyways. Why don't you just:
void rotateperhour(ENTITY* ent)
{
fixed ticks;
while(1)
{
ticks = (ticks+time_frame) % 57600; // or time_step when you want to use time_factor
ent.pan = ticks / 16 / 60 / 60;
wait(1);
}
}
Alternatively you can use a skill of the entities instead of the local variable.