Hi,
I wrote a little module to manage the flux by a percent of success. It has no patterns or weird accumulations on a very simple process.

Code:
typedef struct 
{
	var percent;
	var balance;
} PERCBOOL;

PERCBOOL *pboolCreate ( var percent )
{
	PERCBOOL *pbool = sys_malloc ( sizeof(PERCBOOL) );
	pbool->percent = clamp ( percent, 0, 100 );
	pbool->balance = pbool->percent;
	return pbool;
}

void pboolRemove ( PERCBOOL *pbool )
{
	sys_free ( pbool );
}

BOOL pboolSample ( PERCBOOL *pbool )
{
	var percent = random ( 100 );
	if ( pbool->balance > percent )
	{
		pbool->balance -= 100 - pbool->percent;
		return TRUE;
	}
	else
	{
		pbool->balance += pbool->percent;
		return FALSE;
	}
}

void pboolModify ( PERCBOOL *pbool, var percent )
{
	pbool->percent = clamp ( percent, 0, 100 );
	pbool->balance = pbool->percent;
}



Code:
action actPlayer ()
{
   PERCBOOL pbCriticalHit;
   pboolModify ( &pbCriticalHit, 13.5 );
   ...
   if ( pboolSample ( &pbCriticalHit ) )
   ...
}



Salud!