ftp.nice.ch/pub/next/games/strategic/NetHack.s.tar.gz#/NetHackSource/src/rnd.c

This is rnd.c in view mode; [Download] [Up]

/*	SCCS Id: @(#)rnd.c	3.0	87/07/06
 */
/* NetHack may be freely redistributed.  See license for details. */

#include	"hack.h"

#if defined(LINT) && defined(UNIX)	/* rand() is long... */
extern int rand();
#define RND(x)	(rand() % x)
#else /* LINT */
/* rand() is either random() or lrand48() - see config.h. */
#ifdef UNIX
#define RND(x)	(int)(Rand() % (long)(x))
#else
/* Good luck: the bottom order bits are cyclic. */
#define RND(x)	(int)((Rand()>>3) % (x))
#endif
#endif /* LINT */

#ifdef OVL2

int
rn1(x,y)	/* y <= rn1(x,y) < (y+x) */
register int x, y;
{
	return(RND(x)+y);
}

#endif /* OVL2 */
#ifdef OVL0

int
rn2(x)		/* 0 <= rn2(x) < x */
register int x;
{
#ifdef DEBUG
	if (x == 0) {
		impossible("rn2(0) attempted");
		return(0);
	}
#endif
	return(RND(x));
}

#endif /* OVL0 */
#ifdef OVLB

int
rnl(x)		/* 0 <= rnl(x) < x; sometimes subtracting Luck */
register int x;	/* good luck approaches 0, bad luck approaches (x-1) */
{
	register int i = RND(x);

	if (Luck && rn2(50 - Luck)) {
	    i -= (x <= 15 && Luck >= -5 ? Luck/3 : Luck);
	    if (i < 0) i = 0;
	    else if (i >= x) i = x-1;
	}

	return i;
}

#endif /* OVLB */
#ifdef OVL0

int
rnd(x)		/* 1 <= rnd(x) <= x */
register int x;
{
#ifdef DEBUG
	if (x == 0) {
		impossible("rnd(0) attempted");
		return(1);
	}
#endif
	return(RND(x)+1);
}

#endif /* OVL0 */
#ifdef OVL1

int
d(n,x)		/* n <= d(n,x) <= (n*x) */
register int n, x;
{
	register int tmp = n;

	while(n--) tmp += RND(x);
	return(tmp);
}

#endif /* OVL1 */
#ifdef OVLB

int
rne(x)	  /* by stewr 870807 */
register int x;
{
	register int tmp = 1;
	while(!rn2(x)) tmp++;
	return(min(tmp,(u.ulevel < 15) ? 5 : (int)u.ulevel/3));
}

#ifdef THEOLOGY
int
rnz(i)
int i;
{
# ifdef LINT
	int x = i;
	int tmp = 1000;
# else
	register long x = i;
	register long tmp = 1000;
# endif
	tmp += rn2(1000);
	tmp *= rne(4);
	if (rn2(2)) { x *= tmp; x /= 1000; }
	else { x *= 1000; x /= tmp; }
	return((int)x);
}
#endif

#endif /* OVLB */

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.