rem: SleepThreadUntil (bs->NextTime + BATTLE_FRAME_RATE);
add: SleepThreadUntil (bs->NextTime + BATTLE_FRAME_RATE / (battle_speed + 1));
context: DoBattle (BATTLE_STATE *bs){	extern UWORD nth_frame;	RECT r;	bs->MenuRepeatDelay = 0;	SetMenuSounds (MENU_SOUND_NONE, MENU_SOUND_NONE);	ProcessInput ();	LockMutex (GraphicsLock);	if (bs->first_time)	{		r.corner.x = SIS_ORG_X;		r.corner.y = SIS_ORG_Y;		r.extent.width = SIS_SCREEN_WIDTH;		r.extent.height = SIS_SCREEN_HEIGHT;		SetTransitionSource (&r);	}	BatchGraphics ();	if ((LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) &&			!(GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD)))		SeedUniverse ();	RedrawQueue (TRUE);	if (bs->first_time)	{		bs->first_time = FALSE;		ScreenTransition (3, &r);	}	UnbatchGraphics ();	UnlockMutex (GraphicsLock);	if ((!(GLOBAL (CurrentActivity) & IN_BATTLE)) ||			(GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD)))	{		return FALSE;	}	if (nth_frame)		TaskSwitch ();	else	{		SleepThreadUntil (bs->NextTime + BATTLE_FRAME_RATE);		bs->NextTime = GetTimeCounter ();	}	return (BOOLEAN) ((GLOBAL (CurrentActivity) & IN_BATTLE) != 0);}