delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2000/02/08/16:47:57

Message-ID: <38A020E4.9D28E963@tiscalinet.it>
Date: Tue, 08 Feb 2000 14:57:57 +0100
From: Night Walker <night DOT walker AT tiscalinet DOT it>
X-Mailer: Mozilla 4.7 [en] (Win95; I)
X-Accept-Language: en
MIME-Version: 1.0
To: djgpp AT delorie DOT com
Subject: Re: Allegro and random numbers.
References: <7qhljj$245$3 AT news6 DOT svr DOT pol DOT co DOT uk> <37CC9150 DOT 2BFD0245 AT hmc DOT edu>
Reply-To: djgpp AT delorie DOT com


Nate Eldredge wrote:

> Tom Morton wrote:
> >
> > Hello fellow human beings,
> >
> > I'm writing a game with allegro and djgpp and it requires a random
> > number generator that can have it's seed saved and changed. Until
> > now I have been using the rand() and srand() functions but I need
> > to be able to store the state of the random number generator.
>
> You can do this with `random', it seems from the docs.  Look at
> `initstate' and `setstate'.  Note that a glance at the source doesn't
> convince me that this actually works.
>
> Otherwise, you could take `rand' from DJGPP's source (unless you plan to
> sell this commercially without source); it should be obvious how to save
> and restore its state (the state is a single variable).
> --
>
> Nate Eldredge
> neldredge AT hmc DOT edu

You can also use a LookUpTable, with pre-defined values: it is more flexible
and faster.
This is the code used in DOOM:
=======================================================
//random LUT + random func.

unsigned char rndtable[256] = {
    0,   8, 109, 220, 222, 241, 149, 107,  75, 248, 254, 140,  16,  66 ,
    74,  21, 211,  47,  80, 242, 154,  27, 205, 128, 161,  89,  77,  36 ,
    95, 110,  85,  48, 212, 140, 211, 249,  22,  79, 200,  50,  28, 188 ,
    52, 140, 202, 120,  68, 145,  62,  70, 184, 190,  91, 197, 152, 224 ,
    149, 104,  25, 178, 252, 182, 202, 182, 141, 197,   4,  81, 181, 242 ,
    145,  42,  39, 227, 156, 198, 225, 193, 219,  93, 122, 175, 249,   0 ,
    175, 143,  70, 239,  46, 246, 163,  53, 163, 109, 168, 135,   2, 235 ,
    25,  92,  20, 145, 138,  77,  69, 166,  78, 176, 173, 212, 166, 113 ,
    94, 161,  41,  50, 239,  49, 111, 164,  70,  60,   2,  37, 171,  75 ,
    136, 156,  11,  56,  42, 146, 138, 229,  73, 146,  77,  61,  98, 196 ,
    135, 106,  63, 197, 195,  86,  96, 203, 113, 101, 170, 247, 181, 113 ,
    80, 250, 108,   7, 255, 237, 129, 226,  79, 107, 112, 166, 103, 241 ,
    24, 223, 239, 120, 198,  58,  60,  82, 128,   3, 184,  66, 143, 224 ,
    145, 224,  81, 206, 163,  45,  63,  90, 168, 114,  59,  33, 159,  95 ,
    28, 139, 123,  98, 125, 196,  15,  70, 194, 253,  54,  14, 109, 226 ,
    71,  17, 161,  93, 186,  87, 244, 138,  20,  52, 123, 251,  26,  36 ,
    17,  46,  52, 231, 232,  76,  31, 221,  84,  37, 216, 165, 212, 106 ,
    197, 242,  98,  43,  39, 175, 254, 145, 190,  84, 118, 222, 187, 136 ,
    120, 163, 236, 249
};

int rndindex = 0;

int X_random(void)
{
    rndindex = (rndindex+1)&0xff;
    return rndtable[rndindex];
}

void ClearRandom(void)
{
    rndindex = 0;
}
========================================================
Night Walker <night DOT walker AT tiscalinet DOT it>


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019