OpenTTD Source: src/core/random_func.hpp File Reference

OpenTTD Source 14.0-RC3

Data Structures | Functions | Variables
random_func.hpp File Reference

Go to the source code of this file.

## Data Structures
struct | Randomizer
| Structure to encapsulate the pseudo random number generators. More...
struct | SavedRandomSeeds
| Stores the state of all random number generators. More...

## Functions
void | SaveRandomSeeds (SavedRandomSeeds *storage)
| Saves the current seeds. More...
void | RestoreRandomSeeds (const SavedRandomSeeds &storage)
| Restores previously saved seeds. More...
void | SetRandomSeed (uint32_t seed)
| (Re)set the state of the random number generators. More...
static uint32_t | Random ()
static uint32_t | RandomRange (uint32_t limit)
| Pick a random number between 0 and limit - 1, inclusive. More...
uint32_t | InteractiveRandom ()
uint32_t | InteractiveRandomRange (uint32_t limit)
bool | Chance16I (const uint a, const uint b, const uint32_t r)
| Checks if a given randomize-number is below a given probability. More...
bool | Chance16 (const uint a, const uint b)
| Flips a coin with given probability. More...
bool | Chance16R (const uint a, const uint b, uint32_t &r)
| Flips a coin with a given probability and saves the randomize-number in a variable. More...
void | RandomBytesWithFallback (std::span< uint8_t > buf)
| Fill the given buffer with random bytes. More...

## Variables
Randomizer | _random
| Random used in the game state calculations.
Randomizer | _interactive_random
| Random used everywhere else, where it does not (directly) influence the game state.

## Detailed Description

Pseudo random number generator.

Definition in file random_func.hpp.

## Function Documentation

## ◆ Chance16()

bool Chance16 | ( | const uint | a,
|  | const uint | b
| ) |  |
| inline

Flips a coin with given probability.

This function returns true with (a/b) probability.

See also
  Chance16I()

Parameters

  a | The nominator of the fraction
  b | The denominator of the fraction

Returns
  True with (a/b) probability

Definition at line 131 of file random_func.hpp.

References Chance16I().

Referenced by Disaster_Helicopter_Init(), DisasterTick_Submarine(), FindSubsidyCargoDestination(), IsRoadAllowedHere(), SetupFarmFieldFence(), and TownActionBribe().

## ◆ Chance16I()

bool Chance16I | ( | const uint | a,
|  | const uint | b,
|  | const uint32_t | r
| ) |  |
| inline

Checks if a given randomize-number is below a given probability.

This function is used to check if the given probability by the fraction of (a/b) is greater than low 16 bits of the given randomize-number r.

Do not use this function twice on the same random 16 bits as it will yield the same result. One can use a random number for two calls to Chance16I, where one call sends the low 16 bits and the other the high 16 bits.

Parameters

  a | The numerator of the fraction
  b | The denominator of the fraction, must of course not be null
  r | The given randomize-number

Returns
  True if the probability given by r is less or equal to (a/b)

Definition at line 112 of file random_func.hpp.

Referenced by Chance16().

## ◆ Chance16R()

bool Chance16R | ( | const uint | a,
|  | const uint | b,
|  | uint32_t & | r
| ) |  |
| inline

Flips a coin with a given probability and saves the randomize-number in a variable.

This function uses the same parameters as Chance16. The third parameter must be a variable the randomize-number from Random() is saved in.

The low 16 bits of r will already be used and can therefore not be passed to Chance16I. One can only send the high 16 bits to Chance16I.

See also
  Chance16I()

Parameters

  a | The numerator of the fraction
  b | The denominator of the fraction
  r | The variable to save the randomize-number from Random()

Returns
  True in (a/b) percent

Definition at line 155 of file random_func.hpp.

Referenced by AmbientSoundEffectCallback(), HandleCrashedAircraft(), and HandleCrashedTrain().

## ◆ RandomBytesWithFallback()

void RandomBytesWithFallback | ( | std::span< uint8_t > | buf | ) |

Fill the given buffer with random bytes.

This function will attempt to use a cryptographically-strong random generator, but will fall back to a weaker random generator if none is available.

In the end, the buffer will always be filled with some form of random bytes when this function returns.

Parameters

  buf | The buffer to fill with random bytes.

Definition at line 111 of file random_func.cpp.

References Debug.

Referenced by GenerateUid().

## ◆ RandomRange()

static uint32_t RandomRange | ( | uint32_t | limit | ) |
| inlinestatic

Pick a random number between 0 and limit - 1, inclusive.

That means 0 can be returned and limit - 1 can be returned, but limit can not be returned.

Parameters

  limit | Limit for the range to be picked from.

Returns
  A random number in [0,limit).

Definition at line 81 of file random_func.hpp.

References _random, and Randomizer::Next().

Referenced by Vehicle::Crash(), FindSubsidyIndustryCargoRoute(), FindSubsidyPassengerRoute(), Town::GetRandom(), Industry::GetRandom(), CYapfFollowShipT< Types >::GetRandomFollowUpTileTrackdir(), FlowStat::GetVia(), FlowStat::GetViaWithRestricted(), GrowTownWithBridge(), RandomDiagDir(), RandomHeight(), IndustryBuildData::SetupTargetCount(), StationCargoList::Truncate(), and IndustryBuildData::TryBuildNewIndustry().

## ◆ RestoreRandomSeeds()

void RestoreRandomSeeds | ( | const SavedRandomSeeds & | storage | ) |
| inline

Restores previously saved seeds.

Parameters

  storage | Storage where SaveRandomSeeds() stored th seeds

Definition at line 52 of file random_func.hpp.

References _interactive_random, and _random.

Referenced by CmdAutoreplaceVehicle().

## ◆ SaveRandomSeeds()

void SaveRandomSeeds | ( | SavedRandomSeeds * | storage | ) |
| inline

Saves the current seeds.

Parameters

  storage | Storage for saving

Definition at line 42 of file random_func.hpp.

References _interactive_random, and _random.

Referenced by CmdAutoreplaceVehicle(), and StartupOneEngine().

## ◆ SetRandomSeed()

void SetRandomSeed | ( | uint32_t | seed | ) |

(Re)set the state of the random number generators.

Parameters

  seed | the new state

Definition at line 77 of file random_func.cpp.

References _interactive_random, _random, and Randomizer::SetSeed().

Referenced by StartupOneEngine().