Hi,
for a uniform distribution of the members but one or two, encrease the limits of the range:
Code:
#define MEMBER_COUNT  5
#define LOWER_COUNT   2
//#define MIDDLE_COUNT  3 // MEMBER_COUNT - 2
//#define UPPER_COUNT   3
#define TOTAL_COUNT   8 // LOWER_COUNT + MIDDLE_COUNT + UPPER_COUNT

var itemID = clamp(floor(random(TOTAL_COUNT) - LOWER_COUNT), 0, MEMBER_COUNT - 1);



but when you call 'random' from many places in your code, the uniform distribution of random samples in a single place is lost so you need to build your own random sampler in order to mantain their uniformity. Maybe you are facing that.

Here goes the random apply I adapted from somewhere someday:

random_tail.h
Code:
#ifndef _RANDOM_TAIL_H_
#define _RANDOM_TAIL_H_

typedef struct {
	long a;
	long b;
} RANDOM_TAIL;

// Global random tail
void setRandomSeed (long _seed);
double getRandom (double _range);
double getRandom (); // 0<->1 range

// Custom random tail
RANDOM_TAIL *randomTailCreate (long _seed);
void randomTailRemove (RANDOM_TAIL *_rt);
void setRandomSeed (long _seed, RANDOM_TAIL *_rt);
double getRandom (double _range, RANDOM_TAIL *_rt);

#include "random_tail.c"
#endif



random_tail.c
Code:
RANDOM_TAIL randomTailGlobal;

void setRandomSeed (long _seed, RANDOM_TAIL *_rt) {
	if (_seed) {
		_rt->a = _rt->b =	_seed;
	} else {
		_rt->a = _rt->b =	(long)_rt + sys_hours + sys_minutes + sys_seconds + ~total_ticks; // pseudo random seed
		if (_rt->a == 0)
			_rt->a = 1;
	}
}

void randomTailGlobal_startup () {
	setRandomSeed (0, &randomTailGlobal);
}

void setRandomSeed (long _seed) {
	setRandomSeed (_seed, &randomTailGlobal);
}

long getRandomLong (RANDOM_TAIL *_rt) {
	_rt->a = 36969 * (_rt->a & 65535) + (_rt->a >> 16);
	_rt->b = 18000 * (_rt->b & 65535) + (_rt->b >> 16);
	return (_rt->a << 16) + _rt->b;
}

double getRandom (double _range, RANDOM_TAIL *_rt) {
	double _d = getRandomLong ( _rt );
	return ( _range * 0.5 ) + ( _d + 1.0 ) * _range * 2.328306435454494e-10;
}

double getRandom (double _range) {
	return getRandom (_range, &randomTailGlobal);
}

double getRandom () {
	return getRandom (1.0, &randomTailGlobal);
}

RANDOM_TAIL *randomTailCreate (long _seed) {
	RANDOM_TAIL *_rt = sys_malloc (sizeof(RANDOM_TAIL));
	setRandomSeed (_seed, _rt);
	return _rt;
}

void randomTailRemove (RANDOM_TAIL *_rt) {
	sys_free (_rt);
}



Salud!