MadSci Network: Computer Science
Query:

Re: How does the game 'Monster Rancher' work?

Date: Thu Sep 9 15:21:40 1999
Posted By: Simon Krischer , Staff, Software Development , Information Builders
Area of science: Computer Science
ID: 934636421.Cs
Message:

Hi April!  I can't say that I know the game, but from its description, it
reminds me of two (very) old games... "Crush, Crumble, and Chomp" on the
Atari & Apple II, and a later revamp of it called "The Movie Monster Game"
on the Commodore 64.  (Does anyone know if "Monster Rancher" is a remake?)
Anyway, in those games, the player would define (I.E. Create) a monster by
supplying various characteristics to the game.  The object was, of course,
to create a monster that would win in as many "combat" situations as 
possible (like all such games).  [Computer Science Tidbit:  such values are 
stored as integers, rather than words because it is computationally cheaper
to deal with them.  Thus, if I wanted Color to be yellow, internally color
might be represented by 2 (e.g. Red=1, Orange=2, Yellow=3, ...) ]

Now, since what I really want to do is slash and maim, I really do not want
to take all the time to define my "monster".  I would be just as happy if
a Random Number Generator would supply values for me.  A Random Number
Generator is a small bit of code which supplies a sequence of numbers in
some APPARENTLY random order (The GNU Scientific Library has a nice 
writeup on them...see http://sourceware.cygnus.com/gsl/html/gsl-ref_4.html)

The BSD rand() generator is an example of a very common class of RNG's:

     x{n+1} = (a * x(n) + c) mod m

where a and m must be relatively prime.  BSD uses a = 1103515245, c = 12345 
and m = 2^{31}. The seed specifies the initial value, x(1). The period of 
this generator is 2^{31}.

The range of values returned by this function are integers in [0..m-1] 
(read as "from 0 to m-1, including both 0 and m-1").  But, since we want
an integer from 1-10 (for example), we can do the following "trick". 
Let us create a new function frand() which returns a floating-point value 
in the range of [0..1) "from 0 to 1, including 0, but excluding 1".  This 
can be done by (((float)rand()) / m). Now, if we want a random integer from
1 to Q, we can use (int)(frand() * Q) + 1. 

Note that this RNG is actually "Pseudo-Random", that it, with the same 
seed, the same random sequence gets generated.  This is actually very 
important, because scientists need a way to reproduce results.  (RNG are 
useful for more than just games;  Monte Carlo methods are a life saver for 
simulation programs).  For a game, we might seed the RNG with the current 
Time-Of-Day to get a more "random" sequence.

OK, enough of the computer science.  Back to the game.  The engineers at 
SONY (or whoever authored this game) wanted a real RNG.  But, from within a 
programming perspective, this is very difficult (pseudo is easy, but, here 
we DO NOT want to duplicate results).  So they came up with a clever 
solution.  Since a CD just contains a lot of digital data, they will read a 
few bytes off of it (and, since they are out of context [their correct 
context is music], they are truely random!) and map them (as above) into 
the correct range.  Since each CD has a different sequence of "values", 
each one will give you a different monster.

I hope this answers your question!!!  Enjoy!  



Current Queue | Current Queue for Computer Science | Computer Science archives

Try the links in the MadSci Library for more information on Computer Science.



MadSci Home | Information | Search | Random Knowledge Generator | MadSci Archives | Mad Library | MAD Labs | MAD FAQs | Ask a ? | Join Us! | Help Support MadSci


MadSci Network, webadmin@www.madsci.org
© 1995-1999. All rights reserved.