DEV Community

Cover image for This is how Gacha Games get ya. Game Design Deconstruction and Simulation
Hiroshi TK
Hiroshi TK

Posted on

This is how Gacha Games get ya. Game Design Deconstruction and Simulation

You open the app. You have 10 pulls saved. You know the odds. You know there's a 1.6% chance of getting the legendary you want. You pull anyway. Then you pull again. Then you're somehow buying the starter pack.
This is not a bug. It's a system that was designed, tuned, and simulated before it ever shipped. Let's pull it apart.


What is Gacha, actually
Gacha comes from "gashapon" - those Japanese vending machines where you put in a coin and get a random toy capsule. The digital version is the same concept: you pay (or earn) currency, and you get a random item from a pool with different rarities.
The fantasy is that you might get the legendary. The reality is that the probability is carefully engineered so you almost never do — at least not right away.
Gacha is everywhere now. It's in Genshin Impact, in every mobile RPG, in FIFA Ultimate Team packs, in battle pass loot pools. And the reason it's everywhere is that it works.


The Probability Table
Here's the actual mechanic: every item has a rarity tier, and every rarity tier has a weight. At pull time, the game runs a weighted random - it picks a number, and based on where that number lands in the distribution, you get common, rare, epic, or legendary.

A simple table might look like this (raw weights, not percentages):

--------------------
Rarity    |   Weight
--------------------
Common    |       80
Rare      |       17
Epic      |      2.5
Legendary |      0.5 
--------------------
Enter fullscreen mode Exit fullscreen mode

To convert to probability: divide each weight by the total (100). So legendary = 0.5%. That's 1 in 200 pulls on average.
But "on average" is doing a lot of heavy lifting there. On average doesn't mean after exactly 200 pulls you're guaranteed one. You could hit it on pull 3. You could also go 600 pulls without one. That's the variance, and variance is what makes it feel exciting and unfair at the same time.


The Expected Value Trap

Here's where it gets mathematically interesting. The probability of NOT getting a legendary in a single pull is 99.5%. After 10 pulls, your chance of still having zero legendaries is 0.995^10 = 95.1%. After 100 pulls: 0.995^100 = 60.6%. After 200 pulls: 36.7%.
So even at the "average" pull count, you have a 37% chance of still not having it. This is why gacha feels rigged even when it isn't. You are fighting the geometric distribution, and it has no memory - each pull is independent.
This is exactly the psychology the system exploits. Humans are bad at geometric distributions. We expect things to "average out" sooner than they do, and when they don't, we feel like we're due. The gambler's fallacy is built into our intuition, and gacha banks on it.


Pity Systems: Designed Mercy

To prevent players from quitting in frustration (or the PR disaster of someone going 1000 pulls dry), gacha games introduced pity systems.
There are two flavors.
Hard pity is a guarantee. After N pulls without a legendary, the next pull is forced to be legendary. Genshin Impact does this at 90 pulls for 5-star characters. It's a ceiling on how bad your luck can be.
Soft pity is more interesting. It's a gradual increase in legendary probability as your pull count rises. Genshin starts increasing 5-star rates around pull 74 and ramps sharply toward 90. This means most players hit their legendary somewhere in the 75-90 range - it feels like the system "knew" they'd been struggling, even though it's just probability math.
The emotional effect of soft pity is powerful. Players report it feeling "fair" and "generous" - even though the baseline rates are still extremely low, and the guarantee just means you're spending more currency to get there in the worst case.


Simulating the System

I built a simulation of exactly this in itembase.dev/sim. Here's what the probability table in the sim looks like across 10 pull stages (columns 0 to 9):

Each column is a "stage." The simulation starts at column 0 (first pull) and advances one column each pull, cycling back to 0 after column 9.
Notice what's happening: at pull 0, you literally cannot get anything except common. The system is intentionally withholding. By pull 4, legendary opens up at 5%. By pull 9, you're at 18% for legendary. And then it resets.
This is a soft pity cycle compressed into 10 pulls. The weights are not real-world gacha numbers — they're tuned for the simulation to be demonstrative. But the architecture is identical to what actual gacha games ship.


The Node Graph: What's Actually Running

The simulation runs as a node graph where each tick executes this logic:

  1. Read the current pull stage (signal.col)
  2. Pull a column from the probability table using that index
  3. Run a weighted random against the column's weights — this picks a rarity index 0 to 3
  4. Map the index to a rarity name (common / rare / epic / legendary)
  5. Display it in the center
  6. Increment the counter for that rarity
  7. Advance the column by 1, and if it hits 10, reset to 0

That's it. No hidden variables, no secret streaks. Just a weighted random on a rotating probability table.

The counter table on the side accumulates every rarity dropped. After a long run, you start seeing the distribution converge toward the expected values - but getting there takes hundreds of pulls, which is exactly the point.


Why It Works Psychologically
A few things are happening beyond the math.
Variable reward schedules. This is the core mechanism, borrowed directly from behavioral psychology. Random rewards at variable intervals are more addictive than fixed ones. Your brain releases more dopamine in anticipation of a possible reward than for a guaranteed one. Gacha is a slot machine with a character portrait.
Sunk cost framing. Every pull you make is a step closer to pity. You can literally see your progress. Walking away at pull 60 "wastes" the 60 pulls you already did. This framing isn't rational, but it's effective.
Social pressure. Limited banners, time-limited characters, your friends already having the thing — these are scarcity and social proof layered on top of the probability system. The odds are already against you, and now there's a countdown timer.
Near-misses. Getting an epic when you wanted legendary feels like almost winning. The near-miss activates the same response as a win in some players. Gacha is full of near-misses.


Try the Simulation Yourself
The full simulation is live at itembase.dev/sim. You can run it, watch the counter fill up, edit the probability table, and experiment with different pity curves. It's built in itembase, a sandbox tool for game designers - you can modify the node graph, change the weights, build your own drop table logic.
If you're designing a gacha system, or just want to understand what you're playing, watching it run a few hundred times is more informative than any percentage tooltip in a menu.
The math isn't hidden. The design isn't mysterious. It's a weighted random on a rotating table, wrapped in particle effects and character animations. Knowing that doesn't make it less compelling - but it makes you a harder target.

Top comments (0)