Arma 3 Scripting

Command in Math

random

Also available as Markdown and JSON, or read the original wiki page.

Description

#Syntax 1 generates a random floating point value
#Syntax 2 generates a Gaussian Distribution (ref: Technically, it is a rescaled https://en.wikipedia.org/wiki/Bates_distribution with n = 4.
The distribution is split in two at its midpoint and scaled linearly such that its maximum lies at the specified midpoint.). It uses the same method as setTriggerTimeout command and is quite useful for e.g spawning loot, making more valuable items more rare
#Syntax 3 generates a seed-based random number
#Syntax 4 generates a seed-based random noise (not Perlin) texture based on provided seed and returning the value at supplied coordinates

Syntax

Syntax 1

random x

Parameters:

Returns: Number from 0 (included) to x, excluded

Important

x was accidentally included due to a bug introduced in Arma 2 v1.00 and fixed in Arma 3 v2.18.

Syntax 2

since arma3 1.56

random [min, mid, max]

Parameters:

Returns: Number in range from min to max, weighted by mid - can be higher than max (maximum value is min + max - mid)

Syntax 3

since arma3 1.68

seed random x

Parameters:

Returns: Number from 0 (included) to x (included)

Syntax 4

since arma3 1.68

seed random [x, y]

Parameters:

Returns: Number from 0 (included) to 1 (excluded)

Examples

Example 1

_rNumber = random 1;

Example 2

_rNumber = random -10;

Example 3

Generate a random position inside a circle (see also Example Code: Random Area Distribution)

_center getPos [_radius * sqrt random 1, random 360];

Example 4

Select a random value from an array:

_array = ["apples", "pears", "bananas", "M16"];

_random = _array select floor random count _array;    // before Arma 2
_random = _array call BIS_fnc_selectRandom;            // since Arma 2
_random = selectRandom _array;                        // since Arma 3 v1.56

Example 5

Visualisation of #Syntax 4 (warning, it takes a bit to execute and draw):

private _parent = call BIS_fnc_displayMission;
if (is3DEN) then { _parent = findDisplay 313 };
private _display = _parent createDisplay "RscDisplayEmpty";
private _background = _disp ctrlCreate ["RscBackground", -1];

private _coef = 0.1;

for "_x" from 1 to 100 do
{
    for "_y" from 1 to 100 do
    {
        private _random = 0 random [_x * _coef, _y * _coef];
        private _dot = _display ctrlCreate ["RscBackground", -1];

        _dot ctrlSetPosition [0.5 + pixelW * _x, 0.5 + pixelH * _y, pixelW, pixelH];
        _dot ctrlSetBackgroundColor [_random, _random, _random, 1];
        _dot ctrlCommit 0;
    };
};

See also

selectRandom · selectRandomWeighted · Example Code: Random Area Distribution

Community notes

Hcpookie

Random selections including negative numbers can be obtained via:

_xRnd = round (random 200) - 100;

This will yield numbers between -100 and 100.

  • Be careful using random numbers in multiplayer, each client will come up with a different result. See multiplayer tutorials for more general information about locality.
  • The number returned is unlikely to be a whole number.

To return a whole number use either round, ceil or floor together with random

x = round    (random 5) // will return 0, 1, 2, 3, 4 or 5.    (non-uniform distribution, 0 and 5 are half as likely to be selected than any of the other numbers)
x = floor    (random 5) // will return 0, 1, 2, 3 or 4.        (uniform distribution, all numbers have the same probability of being selected)
x = ceil    (random 5) // will return 0, 1, 2, 3, 4 or 5.    (0 is very unlikely, but possible, as ceil 0 is 0)
Lou Montana
+ Repartition comparison Formula 0 1 2 3 4 5 6 7 8 9
sqf
floor random 10
10% 10% 10% 10% 10% 10% 10% 10% 10% 10%
sqf
floor random [0, 5, 10]
0% 2% 7% 17% 25% 25% 17% 7% 2% 0%
sqf
floor random [0, 10, 0]
0% 0% 1% 2% 5% 9% 14% 19% 24% 26%
sqf
floor random [0, 10, 5]
0% 0% 0% 1% 2% 5% 9% 16% 28% 38%