There's definitely a flaw here.
Let me try an explanation and again, forgive my frenglish.
So the game has 2 ways to pick up a random number:
- the first way is a native method of Actionscript called "Math.random()". If you're interested, see this:
http://www.adobe.com/support/flash/action_scripts/actionscript_dictionary/actionscript_dictionary466.htmlThis one should always work fine and give accurate (pseudo)random numbers.
- the second method consists in taking the number from a pool build by Zanzarino. That's the one used by the "mutation" code.
Here's the detailed algorithm of the second method:
- function newseed() picks up 200 random number (by calling Math.random()) between 0 and 9 and concatenates them in a string of size 200.
- function rand() has an internal counter called "nnn" that is increased by 1 each time the function is called and reset to 0 when it reaches 197. This function returns the substring (of size 4) from the previous 200 characters string, starting at position "nnn" and divided by 10000 to produce a number between 0 and 1.
This is probably quite hard to understand so here's an example:
Let's say the first function produces the string "12345678901234 ... 67890" (size 200)
Then the first call to rand() will return 0.1234 (first 4 characters divided by 10000)
The second call will return 0.2345 (4 characters starting at the next position in the long string)
Then 0.3456 and so on.
Obviously, there is a strong correlation between 2 consecutive numbers picked by rand().
And there is more: for unknown reasons, the function newseed() that produces the 200 characters string is only called at the launch of the game (and when I say "launch" I mean before the login screen, not each time you start a new battle).
So, while you don't refresh the page in your internet browser (and retype your login name/password), you'll keep on getting the same 197 numbers over and over again.
This is exactly why the odds to see the same exact creature on the battlefield are so high (1 out of 197 if you just mutate 1 creature, much more if you mutate more).
The second problem (only 197 different "random" numbers) looks to me like the most serious one. Pick up a pen and paper, mutate like hell, write down the stats of all the different creatures you get, and when your list counts 197 mutants you can be sure that all the next mutations will produce a mutant from the list. And if you don't reload the swf, you'll stick with this list forever.
The impact of the first problem (correlation between 2 consecutive call) is harder to evaluate as it is very hard for me to know what calls are consecutive without the original source code from Zanzarino. I spotted a link between mutant skill and life bonus as I'm sure those are consecutive:
if (mutant skill is hatch, burrow, steal, heal, paradox, scavenger, gravity pull, mutation, ablaze or deja vu) then life bonus is between 0 and 2, with higher chances to be 0 or 1.
if (mutant skill is freeze, destroy, dive, momentum, lycanthropy, infection, devour, growth, poison or immaterial) then life bonus is between 2 and 4, with higher chances to be 3 or 4.
As for a link between creature's appearance and skill, I'm not able to give you an answer, as I don't know if those calls are consecutive or not. PuppyChow said that he saw sparks with ablaze, deja vu and steal and I provided screenshots of other sparks with poison, immaterial and momentum. Without more evidence, I'll just suppose there is no link here.