summaryrefslogtreecommitdiff
path: root/2026/games/asrael_io/source/src/rng.rs
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2026-08-04 04:35:44 -0400
committerLLLL Colonq <llll@colonq>2026-08-04 04:35:44 -0400
commit3c7796f066647090ed8436778bdfe25f11844c05 (patch)
tree0644a101004d91af4fcdc2f51fcc2e03f7f255ce /2026/games/asrael_io/source/src/rng.rs
parenta75221ab93f59d688f90cd83f0284ff98951fcfa (diff)
Prepare for upload
Diffstat (limited to '2026/games/asrael_io/source/src/rng.rs')
-rw-r--r--2026/games/asrael_io/source/src/rng.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/2026/games/asrael_io/source/src/rng.rs b/2026/games/asrael_io/source/src/rng.rs
new file mode 100644
index 0000000..6e46de0
--- /dev/null
+++ b/2026/games/asrael_io/source/src/rng.rs
@@ -0,0 +1,35 @@
+pub struct Rng(u32);
+
+impl Rng {
+ pub fn new(seed: u32) -> Self {
+ let mut rng = Self(seed.max(1));
+ rng.next();
+ rng
+ }
+
+ pub fn next(&mut self) -> u32 {
+ self.0 ^= self.0 << 13;
+ self.0 ^= self.0 >> 17;
+ self.0 ^= self.0 << 5;
+
+ self.0
+ }
+
+ pub fn range(&mut self, n: u32) -> u32 {
+ self.next() % n
+ }
+
+ pub fn f32(&mut self) -> f32 {
+ self.next() as f32 / u32::MAX as f32
+ }
+
+ pub fn chance(&mut self, p: f32) -> bool {
+ self.f32() < p
+ }
+}
+
+impl Default for Rng {
+ fn default() -> Self {
+ Self::new(u32::from_be_bytes(*b"CLNK"))
+ }
+}