Advertisement
Guest User

Untitled

a guest
Oct 13th, 2019
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.97 KB | None | 0 0
  1. #include <cstdint>
  2.  
  3. using u32 = std::uint32_t;
  4.  
  5. class Random {
  6. public:
  7. Random() = default;
  8.  
  9. void reset(u32 seed) {
  10. *this = {};
  11. do {
  12. a = 0x4F6CDD1D * (a ^ seed ^ ((a ^ seed) >> 0x15) ^ ((a ^ seed ^ ((a ^ seed) >> 0x15)) >> 4));
  13. b = 0x4F6CDD1D * (b ^ seed ^ ((b ^ seed) >> 0x15) ^ ((b ^ seed ^ ((b ^ seed) >> 0x15)) >> 4));
  14. c = 0x4F6CDD1D * (c ^ seed ^ ((c ^ seed) >> 0x15) ^ ((c ^ seed ^ ((c ^ seed) >> 0x15)) >> 4));
  15. d = 0x4F6CDD1D * (d ^ seed ^ ((d ^ seed) >> 0x15) ^ ((d ^ seed ^ ((d ^ seed) >> 0x15)) >> 4));
  16. } while (!(a | b | c | d));
  17. }
  18.  
  19. u32 getRandomU32() {
  20. const u32 s = a ^ (a << 0xB) ^ ((a ^ (a << 0xB)) >> 8) ^ d;
  21. const u32 new_c = s ^ (d >> 0x13);
  22. const u32 new_d = (b ^ (b << 0xB) ^ ((b ^ (b << 0xB)) >> 8) ^ new_c) ^ (s >> 0x13);
  23. a = c;
  24. b = d;
  25. c = new_c;
  26. d = new_d;
  27. return c;
  28. }
  29.  
  30. static Random& sInstance;
  31.  
  32. private:
  33. u32 a = 0x75BCD15;
  34. u32 b = 0x159A55E5;
  35. u32 c = 0x1F123BB5;
  36. u32 d = 0x5491333;
  37. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement