WARFRAME Wiki
WARFRAME Wiki
m (→‎MissionDecks Variables: brief description)
m (→‎DropTables Variables: brief description)
Line 450: Line 450:
   
 
==<code>DropTables</code> Variables==
 
==<code>DropTables</code> Variables==
  +
The following are some variables that are present within <code>/Lotus/Types/DropTables</code> enemy [[Drop Tables]].
  +
 
===Bias===
 
===Bias===
 
'''<code>[[wikipedia:Bias_(statistics)|Bias]]</code>''' is a variable exclusive to '''<code>DropTables</code>''' that unequally weighs items within '''<code>DropTables</code>''' (through a positive (+) or negative (-) value change), even if said items have identical rarity weights. Bias can be applied to specific items within a particular '''<code>DropTable</code>''' but is not global across all. The more bias an item has (larger value), the lower its drop chance is. Conversely, the less bias an item has (smaller value), the higher its drop chance. Additionally, because bias scales from the rarity weight that the item it is impacting is assigned to, items with rarity weights that hold more weight than others will still tend to drop more often, depending on the amount of bias that is present.<ref name="void_blog" />
 
'''<code>[[wikipedia:Bias_(statistics)|Bias]]</code>''' is a variable exclusive to '''<code>DropTables</code>''' that unequally weighs items within '''<code>DropTables</code>''' (through a positive (+) or negative (-) value change), even if said items have identical rarity weights. Bias can be applied to specific items within a particular '''<code>DropTable</code>''' but is not global across all. The more bias an item has (larger value), the lower its drop chance is. Conversely, the less bias an item has (smaller value), the higher its drop chance. Additionally, because bias scales from the rarity weight that the item it is impacting is assigned to, items with rarity weights that hold more weight than others will still tend to drop more often, depending on the amount of bias that is present.<ref name="void_blog" />

Revision as of 18:12, 24 November 2021

Sgt Nef AnyoIcon.png
“Orokin secrets cannot remain secret forever! Start talking!”
The following article/section is conjecture. Content is subjected to change/removal as the game progresses. Please do not use this article for critical in-game information.
Photo-4.png
“It's taking longer than I calculated.”
This page is actively being worked on and may not be completely correct. Please assist in making this page accurate.
If you see any wrong statements, please feel free to edit or write in the comment section what is incorrect.

Random number generation (or RNG) is the generation of a sequence of numbers that cannot be reasonably predicted better than by a random chance, usually through a random-number generator.[2] RNG is an essential feature in WARFRAME as it is involved in many components of the game such as graphics[1], weapon mechanics such as Critical Hits, generation of mission Tile Sets, and more. These game mechanics use varying degrees of randomness for performance purposes, with more rigorous methods taking longer to generate more "random" numbers as a tradeoff to computational speed.[1]

Most importantly, RNG is essential to the core gameplay loop with obtaining in-game items. The drop chance of an item can determine its trade value and influence a player's means of obtaining it such as farming, trading, or purchasing with in-game or real-world currency. This article will explain some details on RNG in relation to WARFRAME's Drop Tables and should only be used for educational purposes since these mechanics may not apply to WARFRAME in its current state.

Generating Random Numbers

As in many video games[3], random numbers are not generated non-deterministically since they use computational algorithms that give the appearance of a random sequence, also known as pseudorandom number generators. To the human eye, these numbers may look random, but they are actually from deterministic algorithms; under certain conditions and parameters, the algorithm will always return the same 'random' number. Throughout this article, the term "RNG" will refer to pseudorandom number generators.

RNG Fairness

A RNG is considered 'fair' when the random numbers it outputs correspond or results to the expected drop chances over an extended period of time (e.g. hundreds of runs) or throughout a population (in this case, WARFRAME's playerbase). Say one is trying to get GaraPrimeIcon.png Gara Prime's main blueprint from a Radiant VoidRelicGoldIcon64.png Axi G6. According to the official drop table repository, the blueprint has a 10% chance of dropping so a single player would expect to get the blueprint after opening an average of 1 / 10% = 10 Radiant VoidRelicGoldIcon64.png Axi G6. In the long term, say after opening 1,000 Radiant VoidRelicGoldIcon64.png Axi G6, the player would expect to get an average of 100 Gara Prime blueprints. These expected number of runs/drop table rolls or expected number of rewards over a number of runs/drop table rolls would be accurate if the written drop chances actually reflected on actual drop chances calculated by the in-game RNG. With a large sample size, if any deviation from these values is not within statistical error, then one could say that the 10% drop chance is "inaccurate".

Note that one cannot directly conclude that the drop tables are wrong or accurate from statistical methods (e.g. comparison of expected and observed count data using Chi-squared test), just the observations are statistically different from the expected drop rates. Use statistical analysis as a starting point for more research to be done (more sampling or rigorous tests) or to scrutinize drop tables' accuracy. There may be one or several reasons why your experience does not match expected rates:

  • The displayed drop chances are inaccurate from in-game chances
  • Players are farming the wrong mission/enemy or rolling the wrong drop table (like in the case of Disruption where squad performance affects whether or not a rotation reward pulls from A, B, or C drop table)
  • There is a bug/issue with the game's RNG[4][5]
  • There is an external factor that is not accounted for that is manipulating drop chances/RNG (e.g. having a squad member with a Mod Drop Chance Booster active)
  • The possiblility that a player is astronomically (un)lucky with their drops
  • Player's confirmation bias through a relatively small sample size of drop experiences to support sweeping claims that drop tables are wrong

Seeding RNG

It is unknown how WARFRAME generates the seed(s) for the random number generators that are used to determine drops from drop tables.

Weighted RNG

In a weighted random number generators, certain values will tend to appear more than others due to a bias (or weights) associated with those values. See #Rarity Weights and #Bias on how WARFRAME uses weighted values in their drop tables to make some rewards drop more frequently than others and vice versa.

Linear Congruential Generator

One of the algorithms WARFRAME uses for generating pseudo-random numbers is Donald Knuth's version of a Linear Congruential Generator (LCG), scaling off rarity weights that influence the drop chances of items in /Lotus/Types/DropTables (enemy drop tables) and /Lotus/Types/Game/MissionDecks (mission drop tables).[6][7]

Note that the following LCG formula only applies to endless missions that involve getting rewards over time, such as Defense and Survival.

Where is the sequence of pseudorandom values, and

— "modulus", WARFRAME uses 1
— "multiplier"
— "increment", randomly chosen based on seed value
— seed value for RNG
— current iteration or reward rotation number, an integer

This type of RNG is cyclical in nature, meaning that after a certain number of iterations or period, the generator will return the same sequence of values, subsquently completing a "cycle".

For example, a LCG with a short period can be created using the following parameters[8]: m = 8, a = 3, c = 4, seed = 2147483647 The resultant sequence of numbers will look like:

1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, ...

In the cases of missions like Capture and Exterminate where players earn a reward upon mission completion, they simply use the process explained in #Reward Seeds and do not use LCG for random number generation.

Rarity Weights

WARFRAME uses four rarity weights in its RNG algorithm(s). These weights are the same across DropTables and MissionDecks, with the exception of /Lotus/Types/Game/MissionDecks/SortieRewards, which uses FixedWeights that are manually assigned by the developers.[6][7]

DropTables and MissionDecks
Rarity Weight Percentage
Common 0.755 75.50%
Uncommon 0.22 22.00%
Rare 0.02 2.00%
Legendary 0.005 0.50%
0.755 + 0.22 + 0.02 + 0.005 = 1

Normalization

Normalization occurs when one or more of the rarity weights are not present in a DropTable or MissionDeck. It refers to the division of constants that are added up so values fall between zero (0) and one (1) within different data sets.[6]

Example Normalization Procedure

Say a drop table has 1 Common, 1 Uncommon, 1 Rare, and 0 Legendary drops.
Normalize the rarity weightings by dividing by the sum of present rarity weightings
in drop table to ensure weightings add up to 100% exactly.

  Common: 0.755 / (0.755 + 0.22 + 0.02) = 0.758793969849246 = 75.8793969849246% ≈ 75.88%
Uncommon: 0.22 / (0.755 + 0.22 + 0.02)  = 0.221105527638191 = 22.1105527638191% ≈ 22.11%
    Rare: 0.02 / (0.755 + 0.22 + 0.02)  = 0.020100502512562 = 2.01005025125628% ≈ 2.01%

0.758793969849246 + 0.221105527638191 + 0.201005025125628 = 1 = 100%

Normalization Visualization

The two bar visuals below will demonstrate rarity weightings before and after normalization in a situation where a drop table has only uncommon and rare rarity weightings assigned to its item drops. Notice how the normalized weightings take up the entire range of all possible values between 0 inclusive and 1 exclusive while maintaining the same relative size between the different rarity weight classes (i.e. the same 11:1 ratio is maintained between uncommon and rare drops before and after normalization).

Bar visualization of initial weights
▾ 0 1 ▾
22.00% Uncommon Drop 2.00% Rare Drop 76% No Item Drop

Bar visualization of normalized weights
▾ 0 1 ▾
91.6667% Uncommon Drop 8.3333% Rare Drop

Different Rarity Weightings after Normalization

Present Weights Rarity Normalized Weight Percentage
All Common 0.755 75.50%
Uncommon 0.22 22.00%
Rare 0.02 2.00%
Legendary 0.005 0.50%
0.755 + 0.22 + 0.02 + 0.005 = 1
Common, Uncommon, and Rare Common 0.755 / (0.755 + 0.22 + 0.02) = 0.7587939698 75.88%
Uncommon 0.22 / (0.755 + 0.22 + 0.02) = 0.2211055276 22.11%
Rare 0.02 / (0.755 + 0.22 + 0.02) = 0.0201005025 2.01%
Legendary 0.00 0.00%
0.7588 + 0.2211 + 0.0201 + 0.00 = 1
Common, Uncommon, and Legendary Common 0.755 / (0.755 + 0.22 + 0.005) = 0.7704081633 77.04%
Uncommon 0.22 / (0.755 + 0.22 + 0.005) = 0.2244897959 22.45%
Rare 0.00 0.00%
Legendary 0.005 / (0.755 + 0.22 + 0.005) = 0.0051020408 0.51%
0.7704 + 0.2245 + 0.00 + 0.0051 = 1
Common, Rare, and Legendary Common 0.755 / (0.755 + 0.02 + 0.005) = 0.9679487179 96.79%
Uncommon 0.00 0.00%
Rare 0.02 / (0.755 + 0.02 + 0.005) = 0.0256410256 2.56%
Legendary 0.005 / (0.755 + 0.02 + 0.005) = 0.0064102564 0.64%
0.96795 + 0.00 + 0.02564 + 0.00641 = 1
Uncommon, Rare, and Legendary Common 0.00 0.00%
Uncommon 0.22 / (0.22 + 0.02 + 0.005) = 0.8979591837 89.80%
Rare 0.02 / (0.22 + 0.02 + 0.005) = 0.0816326531 8.16%
Legendary 0.005 / (0.22 + 0.02 + 0.005) = 0.0204081633 2.04%
0.00 + 0.8980 + 0.0816 + 0.0204 = 1
Common and Uncommon Common 0.755 / (0.755 + 0.22) = 0.7743589744 77.44%
Uncommon 0.22 / (0.755 + 0.22) = 0.2256410256 22.56%
Rare 0.00 0.00%
Legendary 0.00 0.00%
0.7744 + 0.2256 + 0.00 + 0.00 = 1
Common and Rare Common 0.755 / (0.755 + 0.02) = 0.9741935484 97.42%
Uncommon 0.00 0.00%
Rare 0.02 / (0.755 + 0.02) = 0.0258064516 2.58%
Legendary 0.00 0.00%
0.9742 + 0.00 + 0.0258 + 0.00 = 1
Common and Legendary Common 0.755 / (0.755 + 0.005) = 0.9934210526 99.34%
Uncommon 0.00 0.00%
Rare 0.00 0.00%
Legendary 0.005 / (0.755 + 0.005) = 0.0065789474 0.66%
0.9934 + 0.00 + 0.00 + 0.0066 = 1
Uncommon and Rare Common 0.00 0.00%
Uncommon 0.22 / (0.22 + 0.02) = 0.9166666667 91.67%
Rare 0.02 / (0.22 + 0.02) = 0.0833333333 8.33%
Legendary 0.00 0.00%
0.00 + 0.9167 + 0.0833 + 0.00 = 1
Uncommon and Legendary Common 0.00 0.00%
Uncommon 0.22 / (0.22 + 0.005) = 0.9777777778 97.78%
Rare 0.00 0.00%
Legendary 0.005 / (0.22 + 0.005) = 0.0222222222 2.22%
0.00 + 0.9778 + 0.00 + 0.0222 = 1
Rare and Legendary Common 0.00 0.00%
Uncommon 0.00 0.00%
Rare 0.02 / (0.02 + 0.005) = 0.8 80%
Legendary 0.005 / (0.02 + 0.005) = 0.2 20%
0.00 + 0.00 + 0.80 + 0.20 = 1
Common only Common 1.00 100%
Uncommon 0.00 0.00%
Rare 0.00 0.00%
Legendary 0.00 0.00%
1.00 + 0.00 + 0.00 + 0.00 = 1
Uncommon only Common 0.00 0.00%
Uncommon 1.00 100%
Rare 0.00 0.00%
Legendary 0.00 0.00%
0.00 + 1.00 + 0.00 + 0.00 = 1
Rare only Common 0.00 0.00%
Uncommon 0.00 0.00%
Rare 1.00 100%
Legendary 0.00 0.00%
0.00 + 0.00 + 1.00 + 0.00 = 1
Legendary only Common 0.00 0.00%
Uncommon 0.00 0.00%
Rare 0.00 0.00%
Legendary 1.00 100%
0.00 + 0.00 + 0.00 + 1.00 = 1

Example of Other Rarity Weightings

In-game representation of item rarity in bounty drop tables; notice how items are ordered in ascending order by alphanumerical sorting and not by their drop chances

Evidence of different rarity weightings used in Isolation Vault Bounties[9]
Level 30 - 40 Isolation Vault
Rotation A
Final Stage
Residual Boils Uncommon (25.00%)
Necramech Redirection Uncommon (12.50%)
2X Orokin Orientation Matrix Rare (6.25%)
Meso P4 Relic Rare (6.25%)
Residual Shock Uncommon (15.00%)
Necramech Steel Fiber Rare (7.50%)
2X Orokin Ballistics Matrix Rare (3.75%)
Neo D3 Relic Ultra Rare (1.88%)
Neo T4 Relic Ultra Rare (1.88%)
Theorem Contagion Uncommon (10.00%)
Necramech Thrusters Rare (4.00%)
Damaged Necramech Weapon Barrel Rare (3.00%)
3X Scintillant Rare (2.00%)
2X Orokin Animus Matrix Legendary (0.50%)
Axi O5 Relic Legendary (0.50%)
Bar visualization using in-game representation of rarity weightings[10]
▾ 0 1 ▾
Residual Boils Necramech Redirection Residual Shock Theorem Contagion
 
Common (25% + 12.5% + 6.25% + 6.25% = 50%) Uncommon (15% + 7.5% + 3.75% + 1.88% + 1.88% = 30.01%) Rare (10% + 4% + 3% + 2% + 0.5% + 0.5% = 20%)

Rarity Classification

Main article: Drop Tables#Rarity Classification
Sgt Nef AnyoIcon.png
“Orokin secrets cannot remain secret forever! Start talking!”
The following article/section is conjecture. Content is subjected to change/removal as the game progresses. Please do not use this article for critical in-game information.

In the official drop table repository, each possible reward that can be randomly pulled from a drop table has a rarity classification based on their individual drop chance. Rarity weighting is a separate concept independent from classification and is used by the game internally to calculate an item's individual drop chance.

Drop Table Repository
Rarity Classification
Rarity Class Drop Percentage Range
Very Common 75.50% ≤ 100.00%
Common 33.33% ≤ 60.05%
Uncommon 10.00% ≤ 32.66%
Rare 2.00% ≤ 9.74%
Ultra Rare 1.00% ≤ 1.70%
Legendary 0.18% ≤ 0.86%
Beyond Legendary ≤ 0.09%

However, in-game, rarity classification of rewards in Codex entries, Sortie menu, Bounty menus, and Void Relics use different systems that are visual in presentation and are based on internal rarity weights after normalization. This classification applies to all items in the same rarity rather than individual drop chances.

Sortie Rarity Classification
Rarity Weight Approx. Color Scheme Hex Code Drop Percentage
(rounded two decimals)
IconCommon.png Common #bd9177 55.91%
IconUncommon.png Uncommon #d1d0d1 33.91%
IconRare.png Rare #ece175 10.00%
IconLegendary.png Legendary #b996db 0.18%
Total 100%
Relic Rarity Classification
Rarity Weight Approx. Color Scheme Hex Code Drop Percentage
(rounded two decimals)
Intact Refinement
IconCommon.png Common #bd9177 76.00%
IconUncommon.png Uncommon #d1d0d1 22.00%
IconRare.png Rare #ece175 2.00%
Total 100%
Exceptional Refinement
IconCommon.png Common #bd9177 70.00%
IconUncommon.png Uncommon #d1d0d1 26.00%
IconRare.png Rare #ece175 4.00%
Total 100%
Flawless Refinement
IconCommon.png Common #bd9177 60.00%
IconUncommon.png Uncommon #d1d0d1 34.00%
IconRare.png Rare #ece175 6.00%
Total 100%
Radiant Refinement
IconCommon.png Common #bd9177 50.00%
IconUncommon.png Uncommon #d1d0d1 40.00%
IconRare.png Rare #ece175 10.00%
Total 100%
Codex Rarity Classification
Rarity Weight Approx. Color Scheme Hex Code Drop Percentage
(rounded two decimals)
Common #bd9177 Varies based on rarity weightings present
Uncommon #d1d0d1 Varies based on rarity weightings present
Rare #ece175 Varies based on rarity weightings present
Total 100%
Common, Uncommon, and Rare present
(e.g. Elite Lancer and most enemies)
Common #bd9177 75.88%
Uncommon #d1d0d1 22.11%
Rare #ece175 2.01%
Total 100%
Common and Uncommon only
(e.g. Detron Crewman)
Common #bd9177 77.44%
Uncommon #d1d0d1 22.56%
Rare #ece175 0%
Total 100%
Common and Rare only
Common #bd9177 97.42%
Uncommon #d1d0d1 0%
Rare #ece175 2.58%
Total 100%
Uncommon and Rare only
(e.g. Feral Kavat, Battalyst, Kela De Thaym)
Common #bd9177 0%
Uncommon #d1d0d1 91.67%
Rare #ece175 8.33%
Total 100%
Rare only
(e.g. Torment, Corpus Cestra Target, Ved Xol)
Common #bd9177 0%
Uncommon #d1d0d1 0%
Rare #ece175 100%
Total 100%
Uncommon only
(e.g. Demolisher Nox)
Common #bd9177 0%
Uncommon #d1d0d1 100%
Rare #ece175 0%
Total 100%
Common only
(e.g. Kosma Gokstad Crewship, Vorac Crewship)
Common #bd9177 100%
Uncommon #d1d0d1 0%
Rare #ece175 0%
Total 100%
Bounties Rarity Classification
Rarity Weight Approx. Color Scheme Hex Code Drop Percentage
(rounded two decimals)
IconCommon.png Common #bd9177 Varies based on rarity weightings present
IconUncommon.png Uncommon #d1d0d1 Varies based on rarity weightings present
IconRare.png Rare #ece175 Varies based on rarity weightings present


Note that an item's drop chance's rarity weighting may not be the same as the item's rarity classification. For example, in the drop table shown in #Example of No Bias, Mod TT 20px.png Revenge uses the Common rarity weighting in calculating its drop chance, but its resultant drop chance falls between 10.00% - 33.32% so the drop table repository refers to it as an "Uncommon" reward.

"Manipulating" RNG

WARFRAME offers some in-game ways to increase player's chances of getting certain rewards. These include:

Quality Traces Common Uncommon Rare
Intact (default) 0 76% (25.33% each) 22% (11% each) 2%
Exceptional 25 70% (23.33% each) 26% (13% each) 4%
Flawless 50 60% (20% each) 34% (17% each) 6%
Radiant 100 50% (16.67% each) 40% (20% each) 10%

Calculating an Item's Drop Chance

The following formulae are used to determine the base drop chance per item before introducing #Bias to individual items.

Example Procedure

Say a drop table has 8 Common, 6 Uncommon, 4 Rare, and 2 Legendary drops.
The drop chances of each item rarity are (before presenting biases):

   Common: 0.755 / 8 = 0.094375           = 9.44%
 Uncommon: 0.22 / 6  = 0.0366666666667    = 3.67%
     Rare: 0.02 / 4  = 0.005              = 0.50%
Legendary: 0.005 / 2 = 0.0025             = 0.25%

Reversing operation to find chances of picking an item from a particular rarity tier:

   Common: 9.4375% × 8     = 75.5%
 Uncommon: 3.66666667% × 6 = 22%
     Rare: 0.5% × 4        = 2%
Legendary: 0.25% × 2       = 0.5%

DropTables Variables

The following are some variables that are present within /Lotus/Types/DropTables enemy Drop Tables.

Bias

Bias is a variable exclusive to DropTables that unequally weighs items within DropTables (through a positive (+) or negative (-) value change), even if said items have identical rarity weights. Bias can be applied to specific items within a particular DropTable but is not global across all. The more bias an item has (larger value), the lower its drop chance is. Conversely, the less bias an item has (smaller value), the higher its drop chance. Additionally, because bias scales from the rarity weight that the item it is impacting is assigned to, items with rarity weights that hold more weight than others will still tend to drop more often, depending on the amount of bias that is present.[6]

Example of No Bias in Enemy Drop Tables

EliteLancerCodex.jpg

No bias[9]
Elite Lancer Mod Drop Chance: 3.00%
Mod TT 20px.png Revenge Uncommon (25.29%)
Mod TT 20px.png Quickdraw Uncommon (25.29%)
Mod TT 20px.png Redirection Uncommon (25.29%)
Mod TT 20px.png Razor Shot Uncommon (11.06%)
50 Endo Uncommon (11.06%)
Mod TT 20px.png Thunderbolt Legendary (0.67%)
Mod TT 20px.png Undying Will Legendary (0.67%)
Mod TT 20px.png Crossing Snakes Legendary (0.67%)
Bar visualization
▾ 0 1 ▾
Revenge Quickdraw Redirection Razor Shot 50 Endo
 
Common (25.29% * 3 = 75.87% ≈ 75.88%) Uncommon (11.06% * 2 = 22.12% ≈ 22.11%) Rare (0.67% * 3 = 2.01%)
  • Note that drop chances shown in drop tables round to the nearest two decimal places, thus calculated rarity weightings may be off from the actual/expected numbers.
  • The rarity classifiers in the table considers only the final drop chance and has nothing to do with rarity weighting

Notice that there is a clear distinction of different classes of items with the same drop chances. From here, one can deduce the rarity weightings each item used:

  • Revenge, Quickdraw, and Redirection each have a 25.29% drop chance; 25.29% * 3 = 75.87% which is close to the Common rarity weighting after normalization
  • Razor Shot and 50 Endo each have a 11.06% drop chance; 11.06% * 2 = 22.12% which is close to the Uncommon rarity weighting after normalization
  • Thunderbolt, Undying Will, and Crossing Snakes each have a 0.67% drop chance; 0.67% * 3 = 2.01% which is close to the Rare rarity weighting after normalization

Alternatively, if one has a Codex entry of a particular enemy completed, the reward drops shown will be color-coded based on the rarity weighting it used. See #Rarity Classification for more details.

Example of Bias in Enemy Drop Tables

EidolonTeralystCodex.jpg

Bias[9]
Eidolon Teralyst Mod Drop Chance: 100.00%
Mod TT 20px.png Lethal Momentum Uncommon (22.22%)
Mod TT 20px.png Terminal Velocity Uncommon (22.22%)
Mod TT 20px.png Fatal Acceleration Uncommon (22.22%)
Mod TT 20px.png Collision Force Rare (8.33%)
Mod TT 20px.png Pummel Rare (8.33%)
Mod TT 20px.png Crash Course Rare (8.33%)
Mod TT 20px.png Full Contact Rare (8.33%)
Bar visualization
▾ 0 1 ▾
Lethal Momentum Terminal Velocity Fatal Acceleration Collision Force Pummel Crash Course Full Contact
 
Uncommon (22.22% * 3 = 66.66%) Rare (8.33% * 4 = 33.32%)
  • Note that because drop chance percentages in the official drop table repository are rounded to the nearest two decimals, the total drop chance will not always add up to 100% exactly.

Another Example of Bias in Enemy Drop Tables

FeyarchSpecterCodex.jpg

Bias[9]
Feyarch Specter Mod Drop Chance: 100.00%
Mod TT 20px.png Shotgun Amp Common (51.52%)
Mod TT 20px.png Final Harbinger Common (36.36%)
Mod TT 20px.png Empowered Blades Rare (6.06%)
Mod TT 20px.png High Noon Rare (6.06%)
Bar visualization
▾ 0 1 ▾
Shotgun Amp Final Harbinger Empowered Blades High Noon
   
Uncommon (51.52% + 36.36% = 87.88%) Rare (6.06% * 2 = 12.12%)

Example of Bias in End-of-Mission Rewards

Bias involved[9]
Void Storm (Veil Proxima)
6X Corrupted Holokey Uncommon (37.50%)
1200 Endo Uncommon (12.50%)
Sevagoth Chassis Blueprint Uncommon (10.00%)
Sevagoth Neuroptics Blueprint Uncommon (10.00%)
Sevagoth Systems Blueprint Uncommon (10.00%)
Veil Resource Bundle Rare (2.50%)
Axi O5 Relic (Radiant) Rare (2.50%)
Axi A13 Relic (Radiant) Rare (2.50%)
Axi N7 Relic (Radiant) Rare (2.50%)
Axi T7 Relic (Radiant) Rare (2.50%)
Axi G6 Relic (Radiant) Rare (2.50%)
Axi C6 Relic (Radiant) Rare (2.50%)
Axi I1 Relic (Radiant) Rare (2.50%)
Bar visualization
▾ 0 1 ▾
6X Corrupted Holokey 1200 Endo
 
Rare (37.50% + 12.50% + (10% * 3) = 80%) Legendary (2.50% * 8 = 20%)

Due to the drop table using only two rarity weightings (Rarity and Legendary), after #Normalization, Rare drop percentage is 2% / (2% + 0.5%) = 80% and Legendary is 0.5% / (2% + 0.5%) = 20%. Notice that despite 6X Corrupted Holokey, 1200 Endo, and Sevagoth's component blueprints using the Rare rarity weighting, they have different drop chances individually. This is due to bias involved to reduce/increase the drop chances of individual items. If there were no bias involved at all, we would expect each Rare item to have 80% / 5 items = 16% and each Legendary item to have 20% / 8 items = 2.5%.

Example of Bias in Bounties

Lvl10-30CetusBountyRotA.jpg

Bias in second Cetus bounty[11]
Level 10 - 30 Cetus Bounty
Rotation A
Stage 1
Steel Fiber Uncommon (25.00%)
200X Oxium Uncommon (25.00%)
2,500 Credits Cache Uncommon (25.00%)
100 Endo Uncommon (25.00%)
Stage 2, Stage 3 of 4, and Stage 3 of 5
Steel Fiber Uncommon (15.08%)
200X Oxium Uncommon (15.08%)
2,500 Credits Cache Uncommon (15.08%)
100 Endo Uncommon (15.08%)
Gara Systems Blueprint Rare (9.52%)
Charged Chamber Rare (9.52%)
Burning Wasp Rare (9.52%)
Lith B4 Relic Uncommon (11.11%)
Stage 4 of 5
Steel Fiber Uncommon (14.50%)
200X Oxium Uncommon (14.50%)
2,500 Credits Cache Uncommon (14.50%)
100 Endo Uncommon (14.50%)
Gara Systems Blueprint Rare (9.16%)
Charged Chamber Rare (9.16%)
Burning Wasp Rare (9.16%)
Lith B4 Relic Uncommon (10.69%)
2X Control Module Rare (3.82%)
Final Stage
Gara Systems Blueprint Uncommon (21.82%)
Charged Chamber Uncommon (21.82%)
Burning Wasp Uncommon (21.82%)
Lith B4 Relic Uncommon (25.45%)
2X Control Module Rare (9.09%)
Bar visualization of Stage 1
▾ 0 1 ▾
Steel Fiber 200X Oxium 2,500 Credits Cache 100 Endo
 
Common (25% * 4 = 100%)
Bar visualization of Stage 2, Stage 3 of 4, and Stage 3 of 5
▾ 0 1 ▾
Steel Fiber 200X Oxium 2,500 Credits Cache 100 Endo Gara Systems Blueprint Charged Chamber Burning Wasp Lith B4 Relic
 
Common (15.08% * 4 = 60.32%) Uncommon (9.52% * 3 + 11.11% = 39.67%)
Bar visualization of Stage 4 of 5
▾ 0 1 ▾
Steel Fiber 200X Oxium 2,500 Credits Cache 100 Endo Gara Systems Blueprint Charged Chamber Burning Wasp Lith B4 Relic 2X Control Module
 
Common (14.50% * 4 = 58%) Uncommon (9.16% * 3 + 10.69% = 38.17%) Rare (3.82%)
Bar visualization of Final Stage
▾ 0 1 ▾
Gara Systems Blueprint Charged Chamber Burning Wasp Lith B4 Relic 2X Control Module
 
Uncommon (21.82% * 3 + 25.45% = 90.91%) Rare (9.09%)
  • Lith B4 Relic has a slight bias applied, making it more likely to drop than the rest of the rewards that use the uncommon rarity weighting.

Attenuation (global bias)

Attenuation is a variable exclusive to DropTables. The boolean OverrideLevelAdjustedBiasAtten determines if attenuation is present in a DropTable or not. As the attenuation value increases, the drop chance of an item should decrease. However, because of how minor its set value (0.5) is (from one of the boolean's secondary variables, RareAttenMax), and that it impacts DropTables globally instead of individual items, it is impossible to accurately determine if it has a noticeable impact on items at all.[6]

MissionDecks Variables

The following are some variables that are present within /Lotus/Types/Game/MissionDecks Mission Rewards tables.

Reward Seeds

Photo-4.png
“It's taking longer than I calculated.”
This page is actively being worked on and may not be completely correct. Please assist in making this page accurate.
"Despite the SRand variable (the seeding for the random number generator, a pseudo-random integer between 0 and RAND_MAX)" does not match EE.log giving out a negative value for SRand

rewardSeed is a variable exclusive to MissionDecks. It is a 64-bit signed integer that determines the missionReward players receive at the end of a mission. It is granted to you by the game's servers at the start of the mission and remains with you until its completion. rewardSeeds are given to the host, and members of the host's group receive the sessionId in order to participate in the same matchmaking session. You will only receive a rewardSeed when your client needs to distribute it to players in a group (as the host). This means that you will receive a rewardSeed if you begin a Public, Friends Only, or Invite Only session, but if you begin a Solo session, you will not be given a rewardSeed. Despite the SRand variable (the seed for the random number generator) being different for each player, each player will always receive the same missionReward as the host because of their identical sessionIds.[6][12]

Examples of valid reward seeds:

  • 5981559039678745352
  • -2947528797702211811
  • -1912700803863294092
  • -3758848590968623960
  • Any value in the range of −(2^63) to 2^63 − 1 or −9223372036854775808 to +9223372036854775807 inclusive
Samples in EE.log

Note that when players start a matchmaking session, the rewardSeed will be set to -1 before being updated with a random value.

3.260 Sys [Diag]: SRand seeded with: -3443681654817279495
...
4217.029 Net [Info]: MatchingServiceWeb::HostSession - settings: {"maxPlayers":4,"minPlayers":1,"privateSlots":0,"scoreLimit":15,"timeLimit":900,"gameModeId":0,"eloRating":28,"regionId":3,"difficulty":0,"hasStarted":false,"enableVoice":true,"matchType":"NORMAL","maps":[],"originalSessionId":"","usingPlayNow":false,"customSettings":"","rewardSeed":-1,"guildId":"","buildId":526217994,"freePublic":3,"freePrivate":0}
...
4217.154 Net [Info]: HostSessionCallback
4217.154 Net [Info]: sessionId=60e53502b0a65e27a219ad33
4217.154 Net [Info]: HostSessionDone (1, sessionId=60e53502b0a65e27a219ad33, rewardSeed=5981559039678745352)
...
4227.948 Net [Info]: NAT bound for client to <PLAYER_IP_ADDRESS>:4955
4228.005 Net [Info]: DeleteSessionCallback(1, {"sessionId":"60e53502b0a65e27a219ad33","rewardSeed":-2947528797702211811}
4228.005 Net [Info]: Deleted session
...
4231.370 Net [Info]: IRC out: QUIT :Logged out of game
4231.476 Net [Info]: DeleteSessionCallback(1, {"rewardSeed":-1912700803863294092}
4231.477 Net [Info]: Deleted session

Prior to Hotfix 10.6.2 (2013-11-05)

Sgt Nef AnyoIcon.png
“Orokin secrets cannot remain secret forever! Start talking!”
The following article/section is conjecture. Content is subjected to change/removal as the game progresses. Please do not use this article for critical in-game information.

Prior to Hotfix 10.6.2 (2013-11-05) changes, WARFRAME's random number generator had a flawed distribution[1], resulting in abnormal number of streaks of bad/good luck in the reward drops compared to a more "randomly" distributed RNG. Recall that WARFRAME uses the following formula for RNG in endless missions:

Where is the sequence of pseudorandom values, and

— "modulus"
— "multiplier"
— "increment", randomly chosen based on seed with truncation of lower-order bits
— initial seed value based on seed
— current iteration or reward rotation number, an integer

When players enter a mission, they get a random seed. Depending on that seed, they get a value between 0 and 1 inclusive which we will call "initial seed". After reaching a reward rotation, players get a random reward based on their initial seed.

On the next reward rotation, players will get a new random number depending on the seed. This new random number will be added to the initial seed. In other words, if the initial seed was 0.5, the interval picking number will be equal to 0.5 + increment. However, this "random" value is the same for every checkpoint after due to truncation in the RNG.[1] For example, the 3rd reward rotation would be determined by 0.5 + increment + increment or 0.5 + (2 * increment).

The issue with this RNG is that it is more deterministic as one with this knowledge and the loot table drop chances (previously hidden from players until 2021-06-28 or just before Update 21.0 (2017-06-29)[13]) can determine their initial seed and on the 2nd reward rotation determine what increment is (approximately). By extension, one can calculate the approximate number of reward rotations until players get their desired reward. Another issue with this method is that players that rolled a low increment value may experience getting the same reward multiple reward rotations in a row; this is more prevalent if the player's first reward is a common item though it is possible for a player to receive consecutive rare drops with a very low or very high increment value.[1]

Sample Scenario (pre-Update 8.1 (2013-06-07))

Tier 3 Defense drop table[14]
  • Order matters in determining drops (pre-Hotfix 10.6.2 (2013-11-05) at least).
  • Drop chances are rounded to nearest two decimal places.
  • This pre-Update 8.1 (2013-06-07) drop table are from a time where there is no such thing as AABCCCC... reward rotations (i.e. three different drop tables labeled A, B, and C). Instead, each reward rotation pulls from the same drop table.
    • Each mission type has three difficulty tiers, each with a separate drop table labeled "Tier 1", "Tier 2", and "Tier 3" corresponding to "Easy", "Medium", and "Hard" respectively. Difficulty levels depend on starting enemy level ranges.
Tier 3 Defense
Hellfire 18.97%
Heated Charge 18.97%
Convulsion 3.16%
Deep Freeze 0.15%
North Wind 0.15%
Shocking Touch 0.15%
North Wind 0.15%
Hellfire 18.97%
Stormbringer 3.16%
Cryo Rounds 0.15%
Split Chamber 0.15%
Barrel Diffusion 0.15%
Hell's Chamber 0.15%
Stretch 0.15%
Redirection 3.16%
Streamline 18.97%
Enemy Sense 3.16%
Enemy Sense 0.15%
Rush 0.15%
Focus 3.16%
Banshee Helmet Blueprint 3.16%
Banshee Chassis Blueprint 0.15%
Banshee Systems Blueprint 3.16%
Orokin Tier 3 Extermination Key 0.15%
Bar visualization of the above drop table
Hellfire Heated Charge Hellfire Streamline Focus
↑ 0 ↑ 0.1897 ↑ 0.3794 1 ↑

For example, in a pre-Update 8.1 (2013-06-07) scenario where a player starts a Tier 3 Defense mission[14]:

  1. At Wave 5, they get Mod TT 20px.png Heated Charge. Now they know their initial seed was between 0.1897 inclusive and 0.3794 exclusive. The way this is determined is:
    1. Create an interval between 0 inclusive and 1 exclusive consisting of all the possible rewards (note that the sum of drop chances is 1 or 100%). For example, Hellfire is 0.0 - 0.1897, Heated Charge is 0.1897 - 0.3794, etc.
    2. Find out where the initial seed fits in and that is the item players will get. In this case, 0.1897 ≤ initial_seed < 0.3794
  2. At Wave 10, they get Mod TT 20px.png Heated Charge again. Now they know their increment was approximately between 0 inclusive and 0.1897 exclusive or between 0.8104 inclusive and 1 exclusive.
    • 0.1897 ≤ initial_seed + increment mod 1 < 0.3794
      • If initial_seed=0.2111 and increment=0.1512, then (0.2111 + 0.1512) mod 1 = 0.3623
      • If initial_seed=0.3345 and increment=0.8556, then (0.3345 + 0.8556) mod 1 = 0.1901
      • If initial_seed=0.3793 and increment=0.9999, then (0.3793 + 0.9999) mod 1 = 0.3792
  3. In order to get the Orokin Tier 3 Extermination key, the last drop in the table, players would need to get a value between 0.9985 inclusive and 1 exclusive.
    • 0.9985 ≤ initial_seed + (5 * increment) mod 1 < 1
      • If initial_seed=0.2111 and increment=0.1512, then players will need to play at least 574 reward rotations to get their first key drop
        0.2111 + (574 * 0.1512) mod 1 = 0.9671
      • If initial_seed=0.3345 and increment=0.8556, then players will need to play at least 217 reward rotations to get their first key drop
        0.3345 + (217 * 0.8556) mod 1 = 0.9671
      • If initial_seed=0.3793 and increment=0.9999, then players will need to play at least 3,794 reward rotations to get their first key drop, with the next 14 reward rotations also providing the key drop (15 consecutive rare rewards!)
        0.3793 + (3794 * 0.9999) mod 1 = 0.9999

Sample Code

The following Lua snippet provides a sample sequence of one thousand values (i.e. 1,000 reward rotations pre-Update 8.1 (2013-06-07)) based on the above scenario if initial_seed=0.2111 and increment=0.1512:

local initial_seed = 0.2111
local increment = 0.1512
local previous = initial_seed

-- Rotation #574, #865 will hit the threshold needed for 
-- Orokin Tier 3 Extermination key
for i = 1, 1000, 1 do
    local result = (previous + increment) % 1
    previous = result
    if (result >= 0.9985 and result < 1) then
        print(i, result, "hit") 
    else
        print(i, result)
    end
end

Other Uses of RNG

In WARFRAME, RNG is not just used to determine whether or not an item will drop for players. It is also used in, but not limited to:

External Links

In other games

References

  1. 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 Rng Algorithm Bugs/changes forum post by [DE]Steve https://forums.warframe.com/topic/128402-rng-algorithm-bugschanges/
  2. https://en.wikipedia.org/wiki/Random_number_generation
  3. See #External Links for some examples of random number generators in other games
  4. "Glen (our Tech Director) identified and fixed a serious distribution flaw with random number generation (RNG) in Warframe. While enemy drops were not seriously affected, a truncation in the random 'seed' within the mission reward script could result in a terrible chain of bad luck. While some players may have benefited from this (a chain of good luck) the distribution was terrible." - Hotfix 10.6.2 (2013-11-05) patch notes
  5. Hotfix 29.5.7 (2020-12-10) fixed a short-lived issue on Ayatan Amber Star drop rates: "Fixed Ayatan Amber Stars dropping far less frequently than before Deimos Arcana."
  6. 6.0 6.1 6.2 6.3 6.4 6.5 Devove, FineNerds, & VoiD_Glitch. (n.d.). WARFRAME - Rarity Weights and "Random" Number Generation. Retrieved from July 13, 2018 on VoiD_Glitch's Github (since takened down) Archived from the original on December 21, 2018.
  7. 7.0 7.1 Navarro, J. (2016). Random Number Generation in Warframe. Navarroj.me. https://navarroj.me/WarframeRNG.html Archived from the original on July 10, 2021.
  8. Math for Game Programmers: Parallel Random Number Generation - 7:25
  9. 9.0 9.1 9.2 9.3 9.4 Obtained from the official drop table repository https://www.warframe.com/droptables on 2021-07-06
  10. See File:T1IsoVaultRewards.jpg
  11. From official drop tables, retrieved 2021-10-31
  12. This process can be partially observed in the game engine's log: EE.log
  13. https://forums.warframe.com/topic/809777-warframe-drop-rates-data/ - Warframe Drop Rates Data forum post
  14. 14.0 14.1 According to u/Pwnatron in https://www.reddit.com/r/Warframe/comments/1fl18h/defense_mission_rewards_and_scaling/, posted on 2013-06-03

Patch History

Hotfix 10.6.2 (2013-11-05)
Improved distribution of random numbers generated by RNG. More information: https://forums.warframe.com/topic/128402-rng-algorithm-bugschanges/

NOV 5th, 2013 - RNG ALGORITHM CHANGES

If you are one of those players that feel like the RNG Gods are angry with you, starting today you may begin to notice a more fair and balanced hand from these divine beings.

Glen (our Tech Director) identified and fixed a serious distribution flaw with random number generation (RNG) in Warframe. While enemy drops were not seriously affected, a truncation in the random 'seed' within the mission reward script could result in a terrible chain of bad luck. While some players may have benefited from this (a chain of good luck) the distribution was terrible.

For context: Games use a lot of random numbers for things other than drops; for example when you blast one of those damned security cameras and a shower of sparks explodes out of it the each particle’s direction is determined by an RNG. Since games need a lot of RNG for effects and other things we actually have a very optimized RNG to make the game run quickly – the problem is you trade entropy (how random it is) for speed.

The RNG for drops needed to be slow and good to be fair and truly reflect the intended drop rates. The new code changes embraces a much slower and entropic means of determining drops of all kinds - weapons, Warframe parts, etc.

I'm very sorry for the frustration this has caused. We are committed to preventing future regression through automated tests... Attached to this post are contrast-boosted images from these tests. The bugged RNG, which is plainly giving dreadful runs. The 'fast' RNG without the truncation error - much better but still with an obvious pattern. Lastly, Glen's new code which shows a vastly improved distribution.

Thank you for reading and happy hunting Tenno!

Left to right: Bugged, Fast, Fixed (new hotness)

These pictures show the output of each RNG technique repeatedly flipping a coin: White is heads, Black is tails. In order for the loot tables to be fair and well distributed you want your RNG to output something that looks like static (which the new approach does).