<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/correlated-randomness-in-slay-the-spire-2-8tnfr0vgp" -->

---
title: Correlated randomness in Slay the Spire 2 | daily.dev
description: Slay the Spire 2 has a significant correlated randomness bug (CRNG) caused by using C#&#x27;s System.Random class, whose internal state is entirely linear in the...
canonical: https://daily.dev/posts/correlated-randomness-in-slay-the-spire-2-8tnfr0vgp
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Correlated randomness in Slay the Spire 2 | daily.dev
og:description: Slay the Spire 2 has a significant correlated randomness bug (CRNG) caused by using C#&#x27;s System.Random class, whose internal state is entirely linear in the...
og:url: https://daily.dev/posts/correlated-randomness-in-slay-the-spire-2-8tnfr0vgp
og:image: https://api.daily.dev/og/posts/8tNFr0VGp.png
og:image:alt: Correlated randomness in Slay the Spire 2
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Correlated randomness in Slay the Spire 2

**[Lobsters](https://daily.dev/sources/lobsters)** · 28 min read · 0 upvotes · 0 comments

## Summary

Slay the Spire 2 has a significant correlated randomness bug (CRNG) caused by using C#'s System.Random class, whose internal state is entirely linear in the seed value. Because the game initializes multiple RNGs by adding fixed offsets to a base seed, their outputs are mathematically correlated. This means knowing one RNG's output gives predictive power over all others. Concrete consequences include: Neow's Bones giving Debt ~54% of the time in Underdocks, the card Rebound being literally impossible to obtain from the Trash Heap event, and first-fight potion drop rates varying from 4% to 76% depending on act. The post provides extensive tables of correlated outcomes across relics, events, combat rewards, and Act 2 encounters. A technical appendix explains why System.Random's subtraction-based initialization preserves linearity, and proposes a simple fix: replacing it with a nonlinear PRNG like PCG32, which would be a 3-line code change.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://tck.mn/blog/correlated-randomness-sts2>

## Questions this post answers

### Why does C#'s System.Random produce correlated output when seeded with nearby values?

Every entry of the internal SeedArray in System.Random's constructor is linear in the absolute value of the seed, meaning it can be expressed as x*S + y for constants x and y. Since InternalSample only performs subtractions between SeedArray entries, two RNGs whose seeds differ by a fixed amount d produce first outputs differing by exactly x*d, making them predictable from one another.

_Anyone debugging seeded randomness in C# games can dig into related writeups and fixes on daily.dev._

### Is it possible to get the card Rebound from the Trash Heap event in Slay the Spire 2 single player?

No, it is impossible in the current beta patch (v0.107.0). This happens because the Trash Heap RNG is correlated with the Act 1 selection RNG (Underdocks vs Overgrowth) due to C#'s System.Random producing linearly related outputs for seeds offset by a fixed amount, which constrains the Trash Heap's possible outcomes and excludes Rebound entirely.

_Players hunting Compendium completions can track game bugs and patch fixes like this via daily.dev._

### What percentage of the time does Neow's Bones give the Debt curse in Slay the Spire 2's Underdocks act?

Neow's Bones is about 54% likely to give the Debt curse in Underdocks, assuming neither relic from Neow's Bones is New Leaf or Kaleidoscope. This bias occurs because the curse pool relic choice at Neow, the Niche RNG used by Neow's Bones, and the Act 1 selection RNG are all correlated through C#'s linear System.Random seeding, skewing outcomes toward Debt far more than a true random distribution would.

_Strategy-focused players comparing relic odds can follow deep game-mechanics breakdowns like this on daily.dev._

## Similar posts on daily.dev

- [Correlated RNG](https://daily.dev/posts/correlated-rng-dm454zy39) · Lobsters · 0 upvotes · 0 comments
- [This is how the RNG works as an 'equalizer' in Dispatch](https://daily.dev/posts/this-is-how-the-rng-works-as-an-equalizer-in-dispatch-e9io08wla) · Game Developer · 0 upvotes · 0 comments

---

Tags: [#game-development](https://daily.dev/tags/game-development), [#c#](https://daily.dev/tags/c#)

[View this post on daily.dev](https://daily.dev/posts/correlated-randomness-in-slay-the-spire-2-8tnfr0vgp)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Correlated randomness in Slay the Spire 2","url":"https://daily.dev/posts/correlated-randomness-in-slay-the-spire-2-8tnfr0vgp","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/correlated-randomness-in-slay-the-spire-2-8tnfr0vgp"},"datePublished":"2026-06-16T19:18:40.113Z","dateModified":"2026-09-14T07:46:36.625Z","description":"Slay the Spire 2 has a significant correlated randomness bug (CRNG) caused by using C#'s System.Random class, whose internal state is entirely linear in the...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/20633c0541970b032717975b4c5812bc?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/20633c0541970b032717975b4c5812bc?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Lobsters","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Lobsters","logo":"https://media.daily.dev/image/upload/s--tl8v_Fku--/f_auto,t_logo/v1698841318/logos/lobste.jpg","url":"https://daily.dev/sources/lobsters"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/correlated-randomness-in-slay-the-spire-2-8tnfr0vgp","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"game-development,c#","timeRequired":"PT28M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Lobsters","item":"https://daily.dev/sources/lobsters"},{"@type":"ListItem","position":3,"name":"Correlated randomness in Slay the Spire 2"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/correlated-randomness-in-slay-the-spire-2-8tnfr0vgp#faq","mainEntity":[{"@type":"Question","name":"Why does C#'s System.Random produce correlated output when seeded with nearby values?","acceptedAnswer":{"@type":"Answer","text":"Every entry of the internal SeedArray in System.Random's constructor is linear in the absolute value of the seed, meaning it can be expressed as x*S + y for constants x and y. Since InternalSample only performs subtractions between SeedArray entries, two RNGs whose seeds differ by a fixed amount d produce first outputs differing by exactly x*d, making them predictable from one another. Anyone debugging seeded randomness in C# games can dig into related writeups and fixes on daily.dev."}},{"@type":"Question","name":"Is it possible to get the card Rebound from the Trash Heap event in Slay the Spire 2 single player?","acceptedAnswer":{"@type":"Answer","text":"No, it is impossible in the current beta patch (v0.107.0). This happens because the Trash Heap RNG is correlated with the Act 1 selection RNG (Underdocks vs Overgrowth) due to C#'s System.Random producing linearly related outputs for seeds offset by a fixed amount, which constrains the Trash Heap's possible outcomes and excludes Rebound entirely. Players hunting Compendium completions can track game bugs and patch fixes like this via daily.dev."}},{"@type":"Question","name":"What percentage of the time does Neow's Bones give the Debt curse in Slay the Spire 2's Underdocks act?","acceptedAnswer":{"@type":"Answer","text":"Neow's Bones is about 54% likely to give the Debt curse in Underdocks, assuming neither relic from Neow's Bones is New Leaf or Kaleidoscope. This bias occurs because the curse pool relic choice at Neow, the Niche RNG used by Neow's Bones, and the Act 1 selection RNG are all correlated through C#'s linear System.Random seeding, skewing outcomes toward Debt far more than a true random distribution would. Strategy-focused players comparing relic odds can follow deep game-mechanics breakdowns like this on daily.dev."}}]}
```

