Limited Mythic Pulls

A Deep Dive into the Anvil Calculator's Guarantee System.

It's a Two-Step Process

Acquiring a Limited Mythic (LM) champion isn't one roll of the dice; it's two separate events that happen in sequence. You must pass both layers, each with its own "pity" mechanic.

1. Pull ANY Mythic

This has a base probability and a hard pity counter.

2. Win the LM Roll

This determines if the mythic is the featured LM.

Layer 1: The Mythic Pull

The first hurdle is to pull a mythic champion of any kind. This layer has a standard pity system. Each non-mythic pull fills up a "pity" meter toward a guaranteed mythic.

Mythic Pity Counter

Hard Pity Reached!

If you don't get a mythic by chance, the counter fills and guarantees one at the `mythicHardPity` limit.

Guaranteed Mythic

Layer 2: The Limited Mythic Guarantee

Once you pull a mythic, this second pity system activates. It protects you from never getting the featured champion. You can only pull 3 Non-Mythic (NM) champions in a row. The next mythic is guaranteed to be the LM.

NM Pull #1

NM Pull #2

NM Pull #3

GUARANTEED LM

Putting It All Together: A Sample Journey

Let's walk through a hypothetical scenario to see how both pity systems work together. In this example, we'll use the actual Mythic Hard Pity of 50 pulls.

Pull #42: Lucky Mythic!

You pull a mythic before pity. Now Layer 2 activates.

Outcome: Mythic (M)

LM Pity Streak: 1

Pull #92: Hard Pity Mythic

50 pulls after the last mythic, pity guarantees another.

Outcome: Mythic (M)

LM Pity Streak: 2

Pull #142: Hard Pity Mythic

Another 50 pulls, another guaranteed mythic.

Outcome: Mythic (M)

LM Pity Streak: 3

Pull #192: GUARANTEED LM

A 4th mythic is pulled. Since the LM Pity streak was 3, this is a guaranteed LM.

Outcome: Limited Mythic!

LM Pity Streak resets to: 0

Anatomy of a Mythic Cycle

A "cycle" is complete once you obtain one Limited Mythic. This can happen on your first mythic pull of the cycle, or all the way to the fourth (the guarantee). Here's how the odds break down with a 50% actual LM rate:

50%

Path 1: LM on 1st Mythic

You win the 50/50 roll immediately.

25%

Path 2: LM on 2nd Mythic

You lose the first 50/50 (pull an NM), then win the second.

12.5%

Path 3: LM on 3rd Mythic

You lose two 50/50s in a row, then win the third.

12.5%

Path 4: LM on 4th Mythic (Guarantee)

You lose three 50/50s, triggering the guarantee. The fourth mythic MUST be an LM.

The "Black Box": Effective vs. Actual Rate

The Anvil Calculator asks for an "Effective LM Rate," not the base rate. Because of the guarantee system, the rate you actually experience is higher than the base number. The calculator works backward to find the true base rate for its simulation.

Your Input

The "Effective Rate" you enter

~53.3%

Anvil Calculator Logic

Simulation's Rate

The "Actual Rate" used in code

50%

The Code Behind the Curtain

For those interested, here are simplified snippets from the calculator's core logic. This shows how the simulation determines if a pull is successful based on the interlocking pity systems.

Simulating a Single Pull

This function simulates one anvil pull. It first checks for the hard pity on any mythic, then it checks for the LM guarantee if a mythic is pulled.

function simulateSingleRun(params) {
    // ... (variable setup) ...
    
    let mythicPityCounter = initialMythicPity;
    let nmFailStreak = initialLMPityStreak;

    const performPull = () => {
        mythicPityCounter++;

        // LAYER 1: Did we get a mythic?
        if (mythicPityCounter >= hardPity || Math.random() < mythicProb) {
            mythicPityCounter = 0; // Reset mythic pity

            // LAYER 2: Is the mythic an LM?
            const isLMPull = nmFailStreak >= nmGuarantee || Math.random() < lmRateUp;

            if (isLMPull) {
                nmFailStreak = 0; // Reset LM pity on success
                return { isLM: true };
            } else {
                nmFailStreak++; // Increment LM pity on failure
                return { isLM: false };
            }
        }
        return null; // Not a mythic pull
    };
    // ... (rest of simulation) ...
}