#include "rng.h" // Linear congruential generator (LCG) state static unsigned int g_seed = 1; // LCG parameters (from numerical recipes) #define LCG_A 1664525 #define LCG_C 1013904223 #define LCG_MOD 4294967294 // 2^32 - 2 (avoid 0) void rng_seed(unsigned int seed) { // Ensure seed is never 0 g_seed = (seed == 0) ? 1 : seed; } int rng_int(int min, int max) { // Generate next value g_seed = (LCG_A * g_seed + LCG_C) % LCG_MOD; // Map to [min, max] range return min + (int)((unsigned long long)g_seed % (max - min + 1)); }