How Rng works in games: drop rates, pity systems, and the illusion of control

8 минут чтения

In most titles, RNG in games is produced by a pseudorandom number generator gaming system that maps a uniform random value to outcomes via tables, weights, and rules (cooldowns, guarantees, streak-breakers). Drop rates define long-run frequencies, while a gacha pity system adds bounded protection against unlucky streaks. The illusion of control appears when players infer patterns from noise.

Core Concepts at a Glance

  • Pseudorandom ≠ truly random: results are generated by deterministic algorithms seeded with changing values.
  • Drop rate is a probability model: it predicts behavior over many trials, not what happens "next pull."
  • Weights, not percentages, often drive tables: UI may show percent, backend may store integer weights.
  • Pity systems reshape distributions: they change the chance of success over time, even if headline rates look constant.
  • Small samples mislead: streaks are expected under randomness; "fair" can still feel unfair.
  • Testing needs instrumentation: logs and reproducible seeds beat gut-feel and anecdotes.

How Pseudorandomness Shapes In-Game Outcomes

Most game RNG is pseudorandom: a deterministic algorithm outputs a sequence of numbers that looks random given a seed. When players talk about a "random roll," the game typically generates a value u in [0, 1) (or an integer range) and then selects an outcome by comparing u to cumulative thresholds.

What you experience as "chance" is usually a pipeline: seed → PRNG output → normalization → rule layer (eligibility, cooldowns, pity counters) → outcome. This means the "randomness" boundary is rarely the whole feature; the rules around it often dominate the final distribution.

Mini-scenarios: A Thai mobile RPG uses a server-seeded PRNG to avoid client tampering; a co-op shooter uses a per-match seed so all clients can deterministically replay loot outcomes; a single-player roguelike seeds per run to make daily challenges identical for everyone.

  • Verify where randomness is applied: before or after eligibility rules.
  • Document what is deterministic (seeded) vs variable (state-based modifiers).
  • Keep client-side RNG for cosmetics only; secure value drops server-side where applicable.

Calculating and Interpreting Drop Rates

"Drop rate" is the probability model for an event per trial (kill, chest open, pull). Many teams rely on a drop rate calculator mindset: compute expected outcomes and tune variance, then validate by simulation and telemetry.

  1. Per-trial probability: if an item has drop probability p, the chance of getting at least one in n independent trials is 1 - (1 - p)^n.
  2. Expected count: expected drops over n trials is n·p (useful for economy tuning, not for guaranteeing player experience).
  3. Weighted tables: store weights w_i; probability is w_i / Σw. UI percentages should be derived from these, not manually retyped.
  4. Conditional eligibility: "loot box drop rates" often depend on rarity tiers, player level brackets, or duplicate protection; these are conditional probabilities, not one global number.
  5. Stateful modifiers: event boosts, "first win of the day," or pity counters make p a function p(t) of attempts/time.
  6. Independence assumptions: if results are shuffled decks, bad-luck protection, or pity, trials are not independent; don't apply the simple formulas blindly.

Mini-scenario: You publish loot box drop rates as "1% legendary." If you also prevent back-to-back legendaries, the effective player-facing experience differs from a pure 1% Bernoulli process; you must clarify the rule layer in player-facing disclosures.

  • Use 1 - (1 - p)^n only when trials are independent and identically distributed.
  • Keep one source of truth for weights; generate UI rates from it.
  • State conditions (level brackets, pity, duplicate rules) alongside headline rates.

Design and Mechanics of Pity Systems

A pity system is any rule that increases the chance of a desired outcome (or guarantees it) after a sequence of failures. A gacha pity system is the common example, but the same design appears in crafting, loot drops, and matchmaking rewards.

  1. Hard pity (guarantee at N): if no success occurs by attempt N, attempt N becomes guaranteed.
  2. Soft pity (ramping probability): probability increases after a threshold (e.g., after 50 pulls, each pull adds Δp) until success.
  3. Token/fragment pity: failures award currency; after enough currency, the player redeems the item (bounded variance, clear progression).
  4. Streak-breaker: prevent long no-drop streaks for a category (e.g., "at least one rare every X chests").
  5. Duplicate protection: reduces repeats by reweighting or removing already-owned items from the pool.

Mini-scenarios: In a Thai gacha live-ops event, hard pity stabilizes spending predictability; in a looter ARPG, a token pity avoids player churn from dry streaks; in a collectible system, duplicate protection preserves perceived value of pulls.

  • Choose hard vs soft pity based on how strongly you need to cap worst-case outcomes.
  • Make counters explicit if transparency is a goal; hidden pity can backfire when detected.
  • Simulate distribution changes; pity reshapes tails even if average looks similar.

Statistical Pitfalls: Misreading Small Samples

Players (and sometimes teams) over-interpret short sequences. Random processes naturally produce streaks, and "I'm due" is not a statistical property unless you have a pity rule or another stateful mechanic.

  • Gambler's fallacy: after many failures, a success is not "more likely" in an independent system.
  • Hot-hand belief: after a success, players expect a continued streak without supporting mechanics.
  • Selection bias: players share extreme outcomes; typical runs are underreported.
  • Base-rate neglect: "I opened 20 boxes" feels large, but may still be a small sample for low probabilities.
  • What randomness is good at: long-run calibration, unpredictability, replay variety.
  • What it is bad at: guaranteeing short-run fairness, aligning with human intuition, preventing churn from unlucky tails.
  • Where to use pity: outcomes tied to progression, monetization sensitivity, or high emotional salience.

Mini-scenario: A community claims "rates were nerfed" because three streamers whiffed on a banner. Without telemetry and confidence intervals, that claim is indistinguishable from normal variance-unless you changed eligibility rules, pooling, or pity thresholds.

  • Always distinguish independent RNG from stateful systems (pity, decks, protection).
  • Validate with simulation/telemetry, not anecdotes from small samples.
  • Communicate variance: explain that streaks are expected when no protection exists.

Player Perception and the Illusion of Control

The illusion of control arises when players believe their actions can influence outcomes governed by RNG, especially under ambiguous feedback. This is amplified when UI animations, timing, or "rituals" coincide with rare wins.

  1. Timing myths: "Pull at 00:00 for better rates" persists when players confuse coincidence with causation.
  2. Pattern hunting: players infer cycles from PRNG noise, particularly in short sessions.
  3. UI anchoring: near-miss presentations (almost got the rare) increase perceived agency without changing probabilities.
  4. Control-by-proxy: changing servers, devices, or party leaders is believed to affect rolls.
  5. Misread pity: players treat soft pity ramps as a guarantee "any moment now," then feel cheated before the ramp is significant.

Mini-scenarios: Players in an internet café in Bangkok swap accounts between phones to "reset luck"; a streamer invents a pre-pull ritual that viewers imitate; a clan believes only the leader should open chests. None of these affect outcomes unless the game explicitly ties RNG state to those variables.

  • Decide whether to reduce illusions (transparent counters) or safely accommodate them (cosmetic rituals only).
  • Avoid misleading near-miss UX if your goal is clarity and trust.
  • Explain stateful mechanics plainly: ramps, guarantees, counters, exclusions.

Practical Testing: Tools and Methods for Developers

To verify RNG, you need reproducibility (seeded runs), observability (logs), and statistical checks (distribution tests, tail monitoring). Don't rely on manual playthroughs; they are too small-sample and too biased.

Mini-case: You ship a loot table change and want to confirm "rare" outcomes match design after adding duplicate protection. Run an offline simulation, then compare with live telemetry segmented by player state (owned set size).

// Pseudocode: simulate weighted drops with optional hard pity
seed = 12345
rng = PRNG(seed)

pityCount = 0
for attempt in 1..N:
  if pityCount == HARD_PITY_N:
    drop = TARGET_ITEM
    pityCount = 0
  else:
    u = rng.uniform01()
    drop = pickByCumulativeWeight(u, tableFilteredByEligibility(state))
    pityCount = (drop == TARGET_ITEM) ? 0 : pityCount + 1
  log(attempt, drop, pityCount)
  • Instrument: log seed (or seed derivation), eligibility state, table version, and outcome.
  • Simulate: run large offline batches after any table/pity/protection change.
  • Monitor: track tail metrics (longest dry streaks) and state-segmented rates.

Self-check before release (design + implementation)

  • Can you explain the exact mapping from PRNG output to outcome, including eligibility filters and pity logic?
  • Are published rates derived from the same weights/config used by the server build?
  • Have you simulated and reviewed worst-case streaks, not only averages?
  • Do telemetry dashboards segment rates by relevant state (pity count, collection completion, level bracket)?
  • Is the UX consistent with the math (no misleading near-miss cues if transparency is intended)?

Common Design and Player Concerns

Is RNG in games truly random?

How RNG Works in Games: Drop Rates, Pity Systems, and the Illusion of Control - иллюстрация

Usually not; it's pseudorandomness from deterministic algorithms seeded with changing inputs. For gameplay and fairness, good PRNGs are sufficient when combined with correct rule logic.

Why do loot box drop rates feel "worse" than stated?

Because short sessions are small samples and streaks are expected. Also, conditional rules (eligibility, duplicates, pity) can make the experienced rate differ from a single headline number.

Does a drop rate calculator tell me when I will get the item?

No; it estimates probabilities over many attempts (e.g., chance of at least one success by n). It cannot predict the next outcome unless the system is stateful and you know its exact state.

How does a gacha pity system change the math?

It makes probability depend on attempt count (soft pity) or guarantees success at a cap (hard pity). That reduces extreme bad-luck tails even if the base rate looks unchanged.

Are "lucky times" or rituals real?

How RNG Works in Games: Drop Rates, Pity Systems, and the Illusion of Control - иллюстрация

Not unless the game explicitly ties RNG to time or player actions, which is uncommon and risky. Most such beliefs are the illusion of control driven by coincidence and selective memory.

Can developers verify randomness without exposing seeds to players?

Yes; keep seeds internal but log enough metadata to reproduce outcomes in a test environment. Use simulations and telemetry comparisons by table version and player state.

What's the most common implementation mistake?

Mismatching published rates and backend weights, or applying eligibility filters after roll selection, which silently changes probabilities. Another frequent issue is forgetting that pity/protection breaks independence assumptions.

Scroll to Top