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). In other words, the random numbers the RNG outputs follow a uniform distribution over an extended period of time.
Say one is trying to get Gara Prime's main blueprint from a Radiant 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 Axi G6. In the long term, say after opening 1,000 Radiant 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.
- The in-game drop sources are incorrect and outdated (e.g. in the Codex or Chat item link descriptions)
- The official drop tables are incorrect and outdated (i.e. https://www.warframe.com/droptables)
- The wiki's manually updated drop tables are incorrect and outdated (e.g. Module:DropTables/data or Module:Void/data)
- 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.[7][8]
- 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 possibility that a player is astronomically (un)lucky with their drops.
- If the RNG is truly fair with no manipulation, we would expect a (very) small portion of the player base to experience the extremes since every possible sequence of values is equally likely to appear.[9]
- Say 30,000 players have farmed and built the Rhino Warframe. Knowing that the Rhino Neuroptics, Chassis, and Systems blueprints have a 38.72%, 38.72%, and 22.56% chance of dropping[10], we would say that there is a 0.2256 ^ 5 = 0.0584% probability for a player to get five Systems blueprints in a row (similar to rolling the same number on a 5-sided die five times in a row). Therefore, we would expect around 18 players out of that 30k to have this (un)lucky experience (since 30000 * (0.2256 ^ 5) = 17.5314).
- Randomness is not necessarily uniform, especially in small sample sizes; with a large enough sample size, there is clustering in any random distribution and players may experience either end of the drop experience (extremely 'lucky' or 'unlucky' with their reward drops). For example, a binary random number generator may produce the following sequence:
"1010111011101010010010011011100001011010000000011010000001111010011010001100001011010111110101111010"
. The value 0 is rolled eight times in a row which may seem nonrandom to humans since our cognitive understanding of probability tends to view randomness as a uniform process, where we immediately expect an equal number of 0's and 1's to be rolled between any given period of time.[citation needed]
- If the RNG is truly fair with no manipulation, we would expect a (very) small portion of the player base to experience the extremes since every possible sequence of values is equally likely to appear.[9]
- Player's confirmation bias through a relatively small sample size of drop experiences to support sweeping claims that drop tables are wrong. Player's method of sampling may be subjected to sampling bias.
- By the law of large numbers theorem, the average of the results should be close to expected value the more trials are done. In the context of WARFRAME, the more times a particular drop table is rolled, the closer that the resultant number of drops should match the expected number of drops calculated from drop chances.
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.
For seeding rudimentary random number generators, WARFRAME may use a machine-based random function (rand()
in C++) to produce returns a pseudo-random number in the range between 0
and RAND_MAX
.[11]
Based on EE.log, a modified srand()
is intialized with a unique, non-repeating 64-bit value between −(2^63)
to 2^63 − 1
(e.g. do not expect 1 or 2,222,222,222,222,222,222 to be the seed of the RNG).
Sample RNG seeds:
-7741523468968126435
2541993907054812653
-7134035214884351693
-3354772158446415432
9209242484211992089
-451729703806461350
1984020437910075226
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.
It is also known that randomized innate bonuses to Kuva and Tenet weapons are weighted towards the lower percentages.[12] Warframes chosen for Helminth Invigorations are also subjected to weighted values.[13]
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).[14][15]
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[16]: 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.[14][15]
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.[14]
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).
▾ 0 | 1 ▾ | |
22.00% Uncommon Drop | 2.00% Rare Drop | 76% No Item Drop |
▾ 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[]
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%) |
▾ 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%) |
- Note that official drop table repository rounds values to nearest two decimal places.
Rarity Classification[]
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.
Rarity Class | Drop Percentage Range | Possible Values In Drop Tables |
---|---|---|
Very Common | 60.00% ≤ x ≤ 100.00% | 100.00%, 91.67%, 86.44%, 77.78%, 77.44%, 75.50%, 68.18% |
Common | 33.33% ≤ x < 60.00% | 56.34%, 50.00%, 48.71%, 38.72%, 33.33% |
Uncommon | 10.00% ≤ x < 33.33% | 28.57%, 26.09%, 19.35%, 15.10%, 14.29%, 12.90%, 12.65%, 11.06%, 10.84%, 10.00% |
Rare | 2.00% ≤ x < 10.00% | 9.68%, 8.70%, 7.69%, 7.14%, 5.88%, 5.50%, 4.35%, 2.58%, 2.00% |
Ultra Rare | 1.00% < x < 2.00% | 1.84%, 1.58%, 1.36%, 1.01% |
Legendary | 0.10% < x ≤ 1.00% | 1.00%, 0.85%, 0.67%, 0.50%, 0.40%, 0.37%, 0.34%, 0.22%, 0.18% |
Beyond Legendary | x ≤ 0.10% | 0.00% (rounded to the nearest ten thousandths) |
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.
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% |
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, 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:
- Using Void Traces to upgrade Void Relics' quality:
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% |
- Having an active Resource Drop Chance Booster to double the chance at which resource drop tables are rolled.
- Having an active Mod Drop Chance Booster to double the chance at which mod drop tables are rolled.
- Having an active True Master's Font Resource Drop Chance blessing for 25% increase at which resource drop tables are rolled.
- Playing any The Steel Path mission for +100% Resource Drop Chance and +100% Mod Drop Chance increase.
- Playing any Dark Sector missions for a Resource Drop Chance bonus ranging from +10% to +35% depending on the node.
- Using certain Warframe abilities (e.g. Nekros' Desecrate) to reroll enemy drop tables under certain conditions. See Drop Tables#Rerolling Drop Tables Mechanic for details.
- Having an active Chroma's Effigy for up to a 60% chance for enemies to drop additional Credits on kill.
- Completing all bonus objectives for each stage of a single Bounty will reward players with another roll of the final stage's drop table (containing Uncommon and Rare rarity rewards of the bounty).
- Using a Madurai Transmute Core, Naramon Transmute Core, or Vazarin Transmute Core to force the polarity of the resultant mod during Transmutation.
- Using mods of different rarities to increase the chance of a specific mod of a desired rarity during Transmutation. See Transmutation#Use for more details.
- When transmuting four Riven Mods, the resultant Riven Mod will always be of the same type as one of the transmuted Rivens.
"Safety Nets" or "Pity System"[]
WARFRAME has no known system where players are guaranteed a rarer reward from a drop table after rolling a drop table's contents multiple times. Drop chances of items in drop tables are static with the exception of Void Relics of different refinements (which can be considered as separate drop tables, one for each refinement level) and multi-stage Bounties (a separate drop table is assigned per stage internally despite what the UI says).
Lich System[]
However, as of Update 31.1 (2022-02-09), players can decrease the weapon pool that an Adversary/Lich may generate with by choosing not perform a Mercy finisher on downed Progenitors (Kuva Larvlings or Candidates). The weapon pool will reset upon generating a new Adversary/Lich or if all possible weapons are rejected.[19]
For example, say a player is trying to get a Kuva Bramma from a Kuva Larvling, the chances of getting it naturally is 1/19 = 5.2632% as of Update 31.1 (2022-02-09). Without the "safety net", it would take an expected number of 19 attempts before the player sees their first Kuva Bramma with 90% of the player base seeing at least one Kuva Bramma within ~43 attempts.[20] With the "safety net", all players are guaranteed (100% chance) to get one Kuva Bramma by 19 attempts, with the chance of getting a Kuva Bramma increasing rapidly with each attempt. For example:
- 19 Kuva weapons in the pool (1/19 = 5.2632% chance), player sees a Kuva Drakgoon and skips, Kuva Drakgoon is removed from pool on mission completion
- 18 weapons (1/18 = 5.5556% chance), player sees a Kuva Seer and skips, Kuva Seer is removed from pool on mission completion
- 17 weapons (1/17 = 5.8824% chance), player sees a Kuva Tonkor and skips, Kuva Tonkor is removed from pool on mission completion
- ...
- 3 weapons (1/3 = 33.3333% chance), player sees a Kuva Grattler and skips, Kuva Grattler is removed from pool on mission completion
- 2 weapons (1/2 = 50% chance), player sees a Kuva Nukor and skips, Kuva Nukor is removed from pool on mission completion
- 1 weapon (1/1 = 100% chance), player sees a Kuva Bramma and chooses, pool is reset for next cycle (i.e. after current Lich is defeated)
Archon Shards[]
As of Update 32.3 (2023-02-15), Archon Hunts feature a pity system for Archon Shards where each time a player fails to get a Tauforged shard, the chance is increased by 20% until the player is guaranteed a Tauforged at 100%. This pity is tracked individually for each player in a squad and for each of the three shards: Tauforged Amber Archon Shard, Tauforged Azure Archon Shard, and Tauforged Crimson Archon Shard.
Diminishing Drop Chances[]
It is known that in very specific circumstances, the drop chances of certain items will decrease over multiple rolls as defined by the developers.[21][22]
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.[14]
Example of No Bias in Enemy Drop Tables[]
Elite Lancer | Mod Drop Chance: 3.00% | |
Revenge | Uncommon (25.29%) | |
Quickdraw | Uncommon (25.29%) | |
Redirection | Uncommon (25.29%) | |
Razor Shot | Uncommon (11.06%) | |
50 Endo | Uncommon (11.06%) | |
Thunderbolt | Legendary (0.67%) | |
Undying Will | Legendary (0.67%) | |
Crossing Snakes | Legendary (0.67%) |
▾ 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[]
Eidolon Teralyst | Mod Drop Chance: 100.00% | |
Lethal Momentum | Uncommon (22.22%) | |
Terminal Velocity | Uncommon (22.22%) | |
Fatal Acceleration | Uncommon (22.22%) | |
Collision Force | Rare (8.33%) | |
Pummel | Rare (8.33%) | |
Crash Course | Rare (8.33%) | |
Full Contact | Rare (8.33%) |
▾ 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. Internally, the game will probably use floating-point values with some truncation/rounding so that:
- Actual drop chances will add up to 100% exactly or
- The RNG will not generate numbers that are outside of the reward bins
In other words, there will never be an instance where a player will get no drops after successfully getting a chance to earn a reward from some drop table.
Another Example of Bias in Enemy Drop Tables[]
Feyarch Specter | Mod Drop Chance: 100.00% | |
Shotgun Amp | Common (51.52%) | |
Final Harbinger | Common (36.36%) | |
Empowered Blades | Rare (6.06%) | |
High Noon | Rare (6.06%) |
▾ 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[]
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%) |
▾ 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[]
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%) |
▾ 0 | 1 ▾ | ||
Steel Fiber | 200X Oxium | 2,500 Credits Cache | 100 Endo |
Common (25% * 4 = 100%) |
▾ 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%) |
▾ 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%) |
▾ 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.[14][24]
MissionDecks
Variables[]
The following are some variables that are present within /Lotus/Types/Game/MissionDecks
Mission Rewards tables.
Reward Seeds[]
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 SRandrewardSeed
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
.[14][25]
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)[]
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)[26]) 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[27]
- 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% |
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[27]:
- At Wave 5, they get Heated Charge. Now they know their initial seed was between 0.1897 inclusive and 0.3794 exclusive. The way this is determined is:
- 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.
- 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
- At Wave 10, they get 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
andincrement=0.1512
, then (0.2111 + 0.1512) mod 1 = 0.3623 - If
initial_seed=0.3345
andincrement=0.8556
, then (0.3345 + 0.8556) mod 1 = 0.1901 - If
initial_seed=0.3793
andincrement=0.9999
, then (0.3793 + 0.9999) mod 1 = 0.3792
- If
- 0.1897 ≤
- 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
andincrement=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
andincrement=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
andincrement=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
- If
- 0.9985 ≤
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:
- Graphics like special effects (SFX)[1] and bullet decals
- General gameplay
- Weapon mechanics such as Critical Hits, Status Effects, Multishot, Accuracy, and Recoil
- Stat bonus on Kuva Lich or Sisters of Parvos weapons and Railjack Armaments
- Buff & Debuff chance to trigger (such as from Arcane Enhancements)
- Enemy AI and spawning mechanics through AI Director
- Assassin appearances such as Stalker or Syndicate death squads
- Mining, Fishing, Conservation, and Hacking minigames
- Matchmaking
- The Warframes chosen for the week's Helminth Invigoration
- Mods
- Rewards
- World State
- Invasions availability and rewards
- The Steel Path incursions
- Syndicate missions
- Arbitrations
- Void Fissures
- Nightwave challenges
- Sortie missions
- Bounty types and bounty stages each Landscape cycle (2.5 hours)
- Nightmare Mode missions
- Daily Darvo Deals
- Sentient Anomaly location in Veil Proxima
- Lich System
- Weapon that is shown when Progenitor enemy is downed
- Requiem Mods sequence
- Reward tax on completing a node
- Requiem Murmur gain on mercy kills
- Mission node influence
- Whether or not the Lich spawns with an Ephemera
- Animations
- Parazon kills
- Idle animations
- Environment
- Generation of mission Tile Sets that comprise of a map
- Movement of Kuva Fortress across the Star Chart
- Weather system in Landscapes
- Physics
- Ragdolls
- Projectile trajectory
- Sound
- Chosing which dialogue to play from NPCs, enemies, and vendors
- Filters and modulation of in-game transmissions[28]
- Dynamic ambient/combat music
- Weapon sounds
- Kuva Lich and Sisters of Parvos voice profiles
- Beast Companions
External Links[]
- Borgwardt, Michael (n.d.) . Floating Point Numbers. Accessed 2022-02-14. Archived from the original on 2022-02-14.
- RNG
- Haahr, Mads (n.d.) . Introduction to Randomness and Random Numbers. Accessed 2022-02-09. Archived from the original on 2022-02-09.
- Foley, Louise (2001). Analysis of an On-line Random Number Generator. Accessed 2022-02-09. Archived from the original on 2022-02-09.
- Limbo, Harvey (2021, June 8). Implementing Weighted RNG in Unity. Accessed 2022-02-09. Archived from the original on 2022-02-09.
- Hill, Bruce (2017, February 2). A Faster Weighted Random Choice. Accessed 2022-02-09. Archived from the original on 2022-02-09.
- Egan, David (2020, June 8). Pseudo Random Numbers in a Range and Modulo Bias. Accessed 2022-02-09. Archived from the original on 2022-02-09.
- Cook, Daniel (2014, December 8). Loot Drop Tables. Accessed 2022-02-09. Archived from the original on 2022-02-09.
- Eiserloh, Squirrel [GDC] (2017). Noise-Based RNG. YouTube. Accessed 2022-02-09. Archived from the original on 2022-02-09. During Game Developers Conference 2017.
- Ko, Manny [GDC] (2015). Math for Game Programmers: Parallel Random Number Generation. YouTube. Accessed 2022-02-09. Archived from the original on 2022-02-09. During Game Developers Conference 2015.
- Brown, Mark [Game Maker's Toolkit] (2020, January 14). The Two Types of Random in Game Design. YouTube. Accessed 2022-02-09. Archived from the original on 2022-02-09.
- RNG in other games
- VaultHunter101 (2015, December 29). Vault Hunting 101: A Guide to RNG and LOOT!. Accessed 2022-02-09. Archived from the original on 2022-02-09. RNG in Borderlands series.
- (2021, November 2). Pseudorandom number generation in Pokémon. Accessed 2022-02-09. Archived from the original on 2022-02-09. On Bulbapedia, the community-driven Pokémon encyclopedia.
- UncommentatedPannen [UncommentatedPannen] (2016, May 15). RNG. YouTube. Accessed 2022-02-09. Archived from the original on 2022-02-09. About how RNG is used in Super Mario 64.
- Brown, Neil (n.d.) . Archive for the 'Probability in Game Design' Category. Accessed 2022-02-09. Archived from the original on 2022-02-09. Featuring XCOM series.
References[]
- ↑ 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 Sinclair, Steve (2013, November 5). Rng Algorithm Bugs/changes. Warframe Forums. Accessed 2022-07-26. Archived from the original on 2022-07-26.
- ↑ https://en.wikipedia.org/wiki/Random_number_generation
- ↑ See #External Links for some examples of random number generators in other games
- ↑ Ford, Rebecca (2022, January 25). The New War: Hotfix 31.0.11. Warframe Forums. Accessed 2022-08-17. Archived from the original on 2022-01-25. "Vaulted the Neo P2 Relic and replaced it with the Neo P4 Relic in the drop tables. The Neo P2 Relic was missed being Vaulted with Harrow Prime’s release.".
- ↑ Everett, Megan (2022, August 17). Khora Prime: Hotfix 31.7.2. Warframe Forums. Accessed 2022-08-17. Archived from the original on 2022-08-17. "Replaced the duplicate Meso H2 Relic dropping in Tier 2 Defense with the correct Meso H3 Relic.".
- ↑ Everett, Megan (2022, October 6). Veilbreaker: Revenant Prime: Hotfix 32.0.11. Accessed 2022-10-17. Archived from the original on 2022-10-17. "Swapped the unintentional duplicate Lith H5 Relic in the Void drop tables with a Lith P6.".
- ↑ "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
- ↑ 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."
- ↑ "So, why is it hard to test whether a given sequence of numbers is random? The reason is that if your random number generator (or your die) is good, each possible sequence of values (or die rolls) is equally likely to appear. This means that a good random number generator will also produce sequences that look nonrandom to the human eye (e.g., a series of ten rolls of six on our die) and which also fail any statistical tests that we might expose it to. If you flip enough coins, you will get sequences of coin flips that seen in isolation from the rest of the sequence don't look random at all." - https://www.random.org/analysis/
- ↑ From official Drop Tables, retrieved 2022-02-14
- ↑ https://www.cplusplus.com/reference/cstdlib/rand/
- ↑ Kuva Lich Data Weapon Drop Rates, Elemental Bonus Chance, Birth Places, Names (Archived)
- ↑ Voltage_WF (2021, July 8). Helminth weekly Invigorations are weighted. Reddit. Accessed 2022-07-12. Archived from the original on 2022-07-12.
- ↑ 14.0 14.1 14.2 14.3 14.4 14.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.
- ↑ Ko, Manny (2015). Math for Game Programmers: Parallel Random Number Generation @ 7:25. GDC. Accessed 2022-07-26. Archived from the original on 2022-02-09.
- ↑ 17.0 17.1 17.2 17.3 17.4 Obtained from the official drop table repository https://www.warframe.com/droptables on 2021-07-06
- ↑ See File:T1IsoVaultRewards.jpg
- ↑ "By skipping a Progenitor (choosing not to Mercy them) the spawned weapon is then put into a ‘reject’ pile for that round of Adversary generation, meaning that it will not appear again and ultimately reducing the weapon pool each time you ‘reject’. The list of rejected weapons is cleared once you accept an Adversary and the process would start again from a clean slate for both Sister or Kuva Lich the next time you go looking for an Adversary. This list clearing applies to both Sister and Kuva Lich, meaning once the chosen Adversary is Converted or Vanquished, the list clears for both factions. Test Cluster change: Kuva Lich/Sister of Parvos weapon reject list will now reset if you reject every possible weapon." - Update 31.1 (2022-02-09) patch notes
- ↑ To get the expected (average) number of attempts for a particular Kuva/Tenet weapon, we have to determine the distribution of the number of failures needed before getting one success. In other words, the average number of attempts without seeing a particular weapon before the player finally sees that weapon. The resultant probability distribution will follow a geometric distribution. 90% confidence level is determined using the geometric distribution's cumulative distribution function with 1/19 set as the probability for rolling a weapon.
- ↑ "An Orokin Cell farming exploit was brought to our attention by not only players, but also our internal flagging system when such a method is tripped for misuse. In short, players were forcing the Hyena’s to spawn infinitely by entering/exiting rooms knowing that their Orokin Cell drop rate is 100%. As a result of this misuse, the Orokin Cell drop rate for the Hyena’s in the Razorback mission will diminish the more you spawn, to still allow for multiple drop attempts but without giving away the entire cake." - Hotfix 25.8.1 (2019-10-09) patch notes
- ↑ "Cronus blueprint now only a guaranteed drop the first time Tolstoj is completed, % chance to drop continues to decrease on additional runs." - Update 7.8 (2013-04-19) patch notes
- ↑ From official drop tables, retrieved 2021-10-31
- ↑ DailyPermit (2020, August 17). Datamining shows DE messing up Steel Path droptables again. Reddit. Accessed 2022-11-20. Archived from the original on 2022-11-20. Snapshot of Steel Path Eximus drop tables shows presence of a "OverrideLevelAdjustedBiasAtten" field.
- ↑ This process can be partially observed in the game engine's log: EE.log
- ↑ https://forums.warframe.com/topic/809777-warframe-drop-rates-data/ - Warframe Drop Rates Data forum post
- ↑ 27.0 27.1 Pwnatron (2013, June 3). Defense Mission Rewards And Scaling. Reddit. Accessed 2022-07-26. Archived from the original on 2021-07-10.
- ↑ "Lotus 2.0! Lotus has recently had a major overhaul. Most of her lines have been re-recorded and now sound more consistent across the entire game. Lotus now uses a brand new DSP system to playback her audio files. Her voice has a more dynamic sound that makes use of some digital audio randomization so her voice effect will sound slightly different every time it plays." - Update 11.3 (2013-12-12) patch notes
Patch History[]
Update 31.1 (2022-02-09)
- ADVERSARY WEAPON GENERATION - QUALITY OF LIFE CHANGE
As the pool of Adversary weapons grows and your checklist fills out, the natural chance of finding a Progenitor (Larvling or Candidate) with the exact weapon you desire shrinks. This Adversary Weapon Generation Quality of Life change is meant to reduce randomness over time of what weapon a Progenitor Candidate (Sister) or Larvling (Kuva Lich) can spawn with.
- How it works:
By skipping a Progenitor (choosing not to Mercy them) the spawned weapon is then put into a ‘reject’ pile for that round of Adversary generation, meaning that it will not appear again and ultimately reducing the weapon pool each time you ‘reject’.
The list of rejected weapons is cleared once you accept an Adversary and the process would start again from a clean slate for both Sister or Kuva Lich the next time you go looking for an Adversary. This list clearing applies to both Sister and Kuva Lich, meaning once the chosen Adversary is Converted or Vanquished, the list clears for both factions.
Test Cluster change: Kuva Lich/Sister of Parvos weapon reject list will now reset if you reject every possible weapon.
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).