Mercurial > touhou
changeset 39:493b503c81e0
Fix PRNG and add some methods to perform like EoSD
author | Thibaut Girka <thib@sitedethib.com> |
---|---|
date | Mon, 15 Aug 2011 00:38:19 +0200 |
parents | cb5b27011044 |
children | ce662b372ee0 |
files | pytouhou/utils/random.py |
diffstat | 1 files changed, 16 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/pytouhou/utils/random.py +++ b/pytouhou/utils/random.py @@ -16,7 +16,8 @@ from time import time class Random(object): def __init__(self, seed=None): if seed is None: - seed = int(time.time() % 65536) + seed = int(time() % 65536) + self.seed = seed self.counter = 0 @@ -25,12 +26,23 @@ class Random(object): self.counter = 0 - def cycle(self): - # Named this way because the actual return value may be different. + def rand_uint16(self): # Further reverse engineering might be needed. - x = ((seed ^ 0x9630) - 0x6553) & 0xffff + x = ((self.seed ^ 0x9630) - 0x6553) & 0xffff self.seed = (((x & 0x0c000) >> 0xe) + x*4) & 0xffff self.counter += 1 self.counter &= 0xffff return self.seed + + def rand_uint32(self): + # 102h.exe@0x41e7f0 + a = self.rand_uint16() << 16 + a |= self.rand_uint16() + return a + + + def rand_double(self): + # 102h.exe@0x41e820 + return float(self.rand_uint32()) / 0x100000000 +