pub struct PicoRng { hi: u32, lo: u32 } impl PicoRng { // https://www.lexaloffle.com/bbs/?tid=51113 pub fn srand(seed: u32) -> PicoRng { let mut rng = if seed == 0 { PicoRng { hi: 0x60009755, lo: 0xdeadbeef } } else { PicoRng { hi: seed ^ 0xbead29ba, lo: seed } }; for _ in 0..0x20 { rng.rnd(0x10000); } return rng } pub fn rnd(&mut self, n: u32) -> u32 { self.hi = self.hi.rotate_left(0x10).wrapping_add(self.lo); self.lo = self.lo.wrapping_add(self.hi); return self.hi % n } }