-/* File: z-rand.c */
+/* File: z-rand.c */
/*
* Copyright (c) 1997 Ben Harrison, and others
/* Purpose: a simple random number generator -BEN- */
#include "term/z-rand.h"
-#include "util/rng-xoshiro.h"
-#include "world/world.h"
-
+#include "system/angband-system.h"
#include <algorithm>
#include <cmath>
#include <limits>
std::generate(Rand_state.begin(), Rand_state.end(), [&dist, &rd] { return dist(rd); });
} while (std::all_of(Rand_state.begin(), Rand_state.end(), [](auto s) { return s == 0; }));
- w_ptr->rng.set_state(Rand_state);
+ AngbandSystem::get_instance().rng.set_state(Rand_state);
}
int rand_range(int a, int b)
return a;
}
std::uniform_int_distribution<> d(a, b);
- return d(w_ptr->rng);
+ return d(AngbandSystem::get_instance().rng);
}
/*
*/
int16_t randnor(int mean, int stand)
{
+ if (stand <= 0) {
+ return static_cast<int16_t>(mean);
+ }
std::normal_distribution<> d(mean, stand);
- auto result = std::round(d(w_ptr->rng));
+ auto result = std::round(d(AngbandSystem::get_instance().rng));
return static_cast<int16_t>(result);
}
int16_t damroll(DICE_NUMBER num, DICE_SID sides)
{
int i, sum = 0;
- for (i = 0; i < num; i++)
+ for (i = 0; i < num; i++) {
sum += randint1(sides);
+ }
return (int16_t)(sum);
}
*/
int16_t maxroll(DICE_NUMBER num, DICE_SID sides)
{
- return (num * sides);
+ return num * sides;
}
/*
int32_t tmp;
/* Refuse to divide by zero */
- if (!d)
- return (n);
+ if (!d) {
+ return n;
+ }
/* Division */
tmp = n / d;
/* Rounding */
if ((std::abs(n) % std::abs(d)) > randint0(std::abs(d))) {
/* Increase the absolute value */
- if (n * d > 0L)
+ if (n * d > 0L) {
tmp += 1L;
- else
+ } else {
tmp -= 1L;
+ }
}
/* Return */
- return (tmp);
+ return tmp;
}
/*
static std::optional<Xoshiro128StarStar> urbg_external;
- if (!urbg_external.has_value()) {
+ if (!urbg_external) {
/* Initialize with new seed */
auto seed = static_cast<uint32_t>(time(nullptr));
urbg_external = Xoshiro128StarStar(seed);
}
std::uniform_int_distribution<> d(0, m - 1);
- return d(urbg_external.value());
+ return d(*urbg_external);
}