Game Mechanics

Misplays

we still are unsure of what misplays are. (we've checked a bunch of stoat-related things.) they honestly might just be random intervals

MISPLAYS ARE RANDOM LMAO

Also: I'll never change the Misplays stat hahaha and I'll never explain how it works you'll have to decompile the game to find out hahaha.

"Also: I'll never change the Misplays stat hahaha and I'll never explain how it works you'll have to decompile the game to find out hahaha."

Truly a beautiful act of trolling. Thanks Daniel.

- From the V0.20 patch notes

The actual misplay function, explained by WhisMoney

The code snippet here occurs at the end of every fight, updating at the conclusion of combat whether the player wins or loses.


TurnNumber starts at 0 and the loop runs three times for every turn taken in combat, i.e. three loops for a one-turn-kill and six for a two-turn-kill.


Each loop has a 5% chance to increase the num2 variable by one, and at the end of the loop the value of num2 is added to the Misplays stat for the run.

For the purpose of getting minimal misplays, it is optimal to take the least number of turns possible, with a 1-turn battle resulting in an 85.7375% chance of 0 misplays for the fight. With three fights per map (one turn each), three standard bosses (two turns each), and Leshy (three turns), a minimum of 18 turns are required. This gives a 6.2672% chance of 0 misplays with perfect play across all fights. If Leshy is not included in the turn count1, that would instead be a minimum of 15 turns and a 9.9440% chance given perfect play.


1 This seems to be the case, as taking infinite turns after the Moon is dead does not result in a massive increase in misplays.

You also get 1 misplay if you lose against a standard enemy (non boss).

Topdeck algorithm / GetFairHand / Hand manipulation

Present in the base game.

The algorithm for your opening hand tries to give you a card that is not a pelt, not free, and "playable by turn 2" according to a set of checks.


This means that by carefully managing your deck, you can force the game to always give you a specific card in your starting hand, like a Black Goat or a buffed Mantis God.

The main way to use hand manipulation is to have only one 1-blood card in your deck, and have all of your other cards cost 2/3/4 blood, or bones. This ensures that you'll get the 1-blood card in your starting hand. You cannot force free cards.


You can also take advantage of the algorithm with multiple 1-blood cards. Instead of trying to force a single 1-blood, you can ensure that all of your possible guaranteed draws have some ability to lead into your main strategy.


Forcing a 2 or 3-blood card is possible, but difficult, as you need the rest of your cards to be free. As such, this is much harder to pull off, and is not a common strategy.

In general, "GetFairHand" or "the topdeck algorithm" refers to the mechanic itself, while "hand manipulation" refers to using the algorithm to force certain cards into your starting hand.

How it works

When the game draws your opening hand, it does the following:

  1. Draw a Squirrel and two cards.

  2. Check to see if any of the cards are:

    • not free

  • not a pelt

  • playable next turn according to the following checks:


Since the algorithm applies to all Acts, it has a check for each cost type:

  • Blood:
    Check the number of free, sacrificable cards in your hand.
    Consider a card with a Blood cost less than or equal to that number playable next turn.

  • Bones:
    Check the number of free cards with Brittle in your hand.
    Consider a card with a Bones cost less than or equal to that number playable next turn.

  • Energy:
    Consider a card with an Energy cost less than or equal to 2 playable next turn.

  • Mox:
    For each Mox needed to play a card, check if your hand contains a card that grants you that Mox.
    If so, consider the card playable next turn.

  1. If none of the cards fit that criteria:
    G
    et a list of all the cards in your deck that do fit (not free, not a pelt and playable). Draw from that list for the third card.

    If a card
    does fit, or if there are no cards in your deck that fit the criteria:
    D
    raw a random card from your deck.

For Kaycee’s Mod, this means that in most cases, you will get a 1-blood card in your starting hand.


This is because you will always have one free, sacrificable card in your hand (the first Squirrel.)


However, if you naturally draw another free, sacrificable card, you are no longer guaranteed a 1-blood card, since you now have two free, sacrificable cards in your hand, and thus 2-blood cards are considered playable next turn.

Ijiraq messes with the algorithm, or at least how the algorithm appears.

Of course it does. See here for examples.


Since Ijiraq’s true form is a free card, it counts as another free, sacrificable card, even if it’s disguised as a higher cost card.

If this happens - if you get a hand of all 2 costs or higher and you have Ijiraq - you can be sure that Ijiraq is one of the first two cards. See the examples for explanation.

The Smoke does not affect your starting hand. While the Smoke appears to be added to your hand before the checks are run, the opening hand function is run independently, and the drawn cards are appended to your hand after The Smoke.

Current theory is that the Static card is counted as the card it transforms into, instead of itself. This means that when the Static card transforms into a 1-blood / free card, the game will not force the 3rd draw to be a 1-blood card.

Some other examples of the Static card affecting the starting hand.

To be added: some more example deck pictures.

A deck using hand manipulation from Igniter#6890.


The player's starting hand will always contain the Black Goat.

Flowchart of the full topdeck algorithm

See the KCM one for better readability - these checks are written based on the code.


I’ve skipped the fixedHand bit in DrawOpeningHand - in an encounter where a fixed set of cards is added to your starting hand, the fixedHand cards will be added to your hand after drawing from your side deck and before drawing the two cards, meaning that any cards in the fixedHand will affect the forced card draw.

Questions

AmethystEnd:

Is there a reason for this? Like, if you only had 1 free card and everything else in the deck was 2 blood or 3 blood, wouldn't that work fine?

Nope. Free cards are not counted as "valid" cards - the criteria is:

- not a pelt

- not free

- "playable by turn 2"


So when the game goes to force a third card - say you pull a 2-blood and a 3-blood. The free card is not counted as a valid card, so the game goes "🤷 no valid cards, oh well" and pulls any card.

In contrast
, when you have a 1-blood card - the game goes to check if you have any "valid" cards, and goes "oh, you have a 1-blood card! That's valid!" and forces that card.

zentaque:

it only counts when you draw it for the first 2 cards right?

but it wont count as valid for the third

Kind of. That's because of the "playable by turn 2" thing - basically, a card is considered "playable by turn 2" if its blood cost is less than or equal to the number of free, sacrificable cards in your hand.


Say you pull a Squirrel, a Geck, and a Wolf. The Wolf is now considered "playable by turn 2", since you have two free, sacrificable cards - the Squirrel and the Geck. Since the Wolf is now valid, it doesn't force the third card.


Basically, the distinction is that free cards are never valid - it's that free cards make higher-cost cards valid.

Bugs

V0.31: FIXED

The bone bug has finally been fixed.


From the patch notes:
Fixed: The infamous "GetFairHand" bug. It is a bit surreal to have players point out the exact line of code that is causing a bug that has been in the game for years...


Unfortunately, fixing this bug revealed a second
, smaller bug underneath. (See below.)

Previously:

This is more of a possible oversight than a bug, but the starting hand algorithm seems to include all Bone cost cards as playable on turn 2, even though they aren't.


There's a function DiskCardGame.Deck.CardCanBePlayedByTurn2WithHand, which appears to validate if a card can be played the next turn based on the current hand.


However, this is line 202:

flag2 = (hand.FindAll((CardInfo x) => x.CostTier == 0 && x.HasAbility(Ability.Brittle)).Count <= card.BonesCost);


This finds all cards that are 1) free, and 2) have the Brittle sigil, then compares that number to the current card's Bones cost. But the comparison checks if the number of free Brittle cards is less than or equal to the number of Bones needed to play the card.


For example, if you have 0 Brittle cards (which should be any hand in Act 1), then a Turkey Vulture that costs 8 Bones is considered a valid card, because 0 <= 8.

So any card that costs Bones will be considered "playable on turn 2" in Act 1 / Kaycee's Mod, because you'll always have 0 Brittle cards, and 0 will always be less than any Bone cost needed.

It also applies to the base game. Here is an opening hand dealt in Act 2, with a full deck of bone cards. All of the cards cost at least 1 Bone to play. If the player doesn't draw a free card the next turn, all of their cards will be unplayable.

1 Primadonna#0325 has created a mod (found here) that "fixes" the check and also accounts for the Bone Lord boons when considering what bone cards are playable.

V0.32: FIXED

1-Bone cards no longer count as free.

Previously:

(text from bug report)

The GetFairHand bug has been fixed!!!

Unfortunately, there's still a problem - the Curious Egg (or any other 1 Bone card) is considered to have CostTier 0, so it can still mess it up.


In DiskCardGame.CardInfo.CostTier:

return this.BloodCost + Mathf.RoundToInt((float)this.BonesCost / 3f) + Mathf.RoundToInt((float)this.energyCost / 2f) + this.gemsCost.Count;


The Egg only costs 1 Bone, so it rounds it down to 0, and the game thinks it's a free card.

This means that the Pack Rat here was considered playable (thanks to @Bert Sampson for the picture)

And the Mud Turtle here was considered playable (thanks to @CrushforceX for the picture)

Pelt costs

Pelt costs change depending on the map number.

KCM

Pelt fusion

Present in the base game.

Fusing pelts allows you to buy fused cards at the Trader node.


As long as you have at least 1 fused pelt, all of your options for that pelt type show up fused.


For example, if you have 1 fused Golden Pelt and 3 regular Golden Pelts, you can trade for 4 fused Rare cards.


If you triple-myco a pelt (fusing a fused pelt with a third pelt), the trader will not give you triple-myco-cards. You’ll get the same selection as you would when bringing a regular fused pelt.


Sigils on pelts do nothing for trading.

There is, however, a suggestion to make sigils affect the trader’s options. See it here.

Sigil limits

Present in the base game.

The normal limit is 7 total sigils: 2 innate, 4 added, and 1 totem.

With the Annoying Starters challenge, you can have 8 total sigils, with 3 innate instead of 2.

(You can also have 8 total sigils with a death card in the base game.)


You can only transfer sigils to a card once, so you can have either 1 or 2 sigils added without the Mycologist.


You can add up to 4 sigils (via Mycologist), but any sigils after that will just disappear.


See the Map Nodes > Mycologists section for examples.

Hidden sigils

Present in the base game.

In certain situations, more than one copy of a sigil can be present on a card, but since most sigils are not stackable, the second sigil is not displayed. However, it still takes up a slot and contributes to the sigil limit.


This can be seen at Goobert’s node or in Cave Trials. Was also previously seen at the Mycologists.

Goobert may change a hidden sigil, which appears as if a sigil was added.

In a Trial of Wisdom, for example, Leshy will say a card has 4 sigils when only 3 are visible.

todo: get some pictures for demonstration. In the meantime, you can see the Goobert map node section for examples.

Changes

V0.27:

After the Mycologists fix, cards can still have a duplicate sigil if the sigil is innate.

For example, a Flying Ant can have an added Airborne sigil.


However, any duplicate sigils that are added will be removed/consolidated into 1.

For example, when a Kingfisher with Airborne and Brood Parasite is fused with a Kingfisher with Airborne and Hoarder, the resulting Kingfisher will not have 4 added sigils (Airborne, Brood Parasite, Airborne, Hoarder), as it did previously. Instead, it will have 3 added sigils (Airborne, Brood Parasite, Hoarder).

Previously:

At the Mycologists, cards can end up “losing” sigils when fused, because they have hidden sigils contributing to the sigil limit.

Cards that inherit sigils

In summary, most everything else takes added sigils and no stat buffs, with the following exceptions

  • Dam Builder's an outlier for taking innate sigils.

  • Loose Tail's an outlier for taking fire buffs.

  • Ant Spawner's an outlier for taking nothing.

KCM

Stackable sigils

Present in the base game.

BUG FIXED. SIGILS NO LONGER STACK AS OF V0.27.

However, Totem Fecundity does still stack - you get two copies when playing the card, one from the added sigil and one from the Totem sigil. Unknown if oversight or intentional.


Previously:

These are stackable because of the Mycologists’ mergeable cards in Act 2.

Bone Digger

Fecundity

Sentry (Not available in KCM)

Mental Gemnastics (Not available in KCM)


No other sigils are stackable.

Surrenders

Present in the base game.

The logic for checking for surrendering can be found on DiskCardGame.Opponent.CanOfferSurrender.

Basically, if the opponent has no more cards to play, the sum of your attack* is greater than or equal to your opponent’s attack**, and the sum of your attack is not enough to win within one turn, the opponent can surrender.


* The sum of attacks doesn’t count cards on the ground with a “repulsive” sigil opposing it.

** The attack on the opposing side that comes from the greatest power on the ground is not counted towards this sum, unless “Squirrel Fish” challenge is active. This is because you can just draw the squirrels (or empty vessels in chapter 3) and chump block the biggest power on the ground indefinitely (until you run out).


The attacks are adjusted by effects such as leader, but when calculating the sums, the game does not consider sigils (double strike) on the cards or whether cards are blocked by other cards.

thank you RageLeague!!!

Some examples:

The sum of the player's attack is 1 (Worker Ant).

The sum of Leshy's attack is 0.

= The player's attack is greater than Leshy's attack.


The sum of the player's attack is less than 6 (points needed to win).

The sum of the player's attack is 4 (Stoat, Ant Queen).

The sum of Leshy's attack is 1 (Elk Fawn). Elk is not counted since Squirrel Fish is not active and the player can squirrel stall indefinitely.

= The player's attack is greater than Leshy's attack.


The sum of the player's attack is less than 6 (points needed to win).

The Moon

Moon’s Mercy

Instead of Starvation when you run out of cards to draw, the moon gains attack each turn. This is called “Moon’s Mercy” and is present in the base game.


Regular Starvation will not appear, even after the Moon is defeated.

Changes

V0.27:

Tidal Lock now also affects Rabbits and Aquasquirrels, per the line of code below.

bool flag = playerCard != null && (playerCard.Info.name == "Squirrel" || playerCard.Info.name == "AquaSquirrel" || playerCard.Info.name == "Rabbit");

A rabbit orbiting the moon.From Primsine.
A pair of Aquasquirrels orbiting the moon.Also from Primsine.

Overkill damage

Present in the base game.

Overkill damage is calculated as a second attack.


If a card dies right after attacking the front line card (for example, via Sharp Quills), the overkill attack will not take place. This is because overkill is calculated as a separate attack, and the card dies before it can take that attack.


Killing cards in the back line via overkill damage will not cause certain sigil / innate trait effects to happen.

This is because the effects only take place when the card is on the board, and the back line of cards has not yet been played - it’s showing what cards will be played the next turn.


For example, killing a Strange Frog in the Trapper’s back line will not spawn a Leaping trap on death.

Killing the death card with Frozen Away in Leshy’s phase 2 while it’s still in the back line will not spawn an Opossum.

Exceptions:

Killing a Skink in the back line will spawn a Wiggling Tail. Check if just hitting will or will not spawn?

Sharp Quills takes effect in the back line.


TODO: check a few other exceptions.

Movement sigil combos

Sprinter and Hefty present in the base game.

Movement sigils will take effect in the order they were added.

The order is:

  1. innate

  2. added

  3. totem

Αphie! 💫: i'm going to consider savescumming because what just happened

Αphie! 💫:

the bull rampaged twice??? and THEN the moose buck pushed the bull

Rampager activates twice - possibly has to do with the card order

https://discord.com/channels/529604048773578763/920010818114961408/946336789793234985

Roshibomb: bug successfully replicated!!

it is not caused by mycologists. simply adding a moving sigil to wild bull works :)

https://discord.com/channels/529604048773578763/920010818114961408/946383800496173197

TnT - Scrybe of Boom:

I think it might be, because i gave the bull i was using to test it hefty as well as sprinter, and it rampages twice and then does hefty

https://discord.com/channels/529604048773578763/920010818114961408/946479140578668595

video

https://discord.com/channels/529604048773578763/920010818114961408/946480039283810335

Reset mechanic

Aborting a run while in the first map will replace one or both of your starting Rabbit Pelts.

Doing so once will replace one pelt with an Opossum.

Doing so twice in a row will replace the second pelt with a Ring Worm.

You can restore your pelts by:

  • Defeating the first boss and going to the first node on Map 2. At any point after this, you can abort the run without penalty.

If you end the run on the starting node of Map 2, it will not register as Map 2, and will count as a run aborted on Map 1.

  • Dying to any battle.

Opossum / Rabbit Pelt

1 aborted run

Dialogue:

Your predecessor gave up too easily.

Less pelts for you.

Opossum / Ring Worm

2 aborted runs in a row

Dialogue:

You wish to start with 2 pelts?

Don’t surrender to me so willingly.

Opossum / Ring Worm

2 aborted runs in a row

Dialogue:

Are you surprised? Were you expected[sic] more pelts?

Be less of a coward.

Changes

V0.24:

From patch notes:
Only punish an aborted run if the End Run card is used during the first map. Losing legitimately will start the next run with the full 2 Rabbit Pelts. Also added dialogue to explain what is happening.

Previously:

This is based on the number of times you have defeated the first map boss in the past two runs.


Dying or ending a run before the first boss replaces one of your starting pelts with an Opossum.

If you die or end run before the first boss again, the second pelt is replaced with a Ringworm.

Beating the first boss once restores one pelt. Beating the first boss more than 1 time in a row restores the second pelt.


More simply, based on the past two runs:

0 first boss defeats = Opossum / Ringworm

1 first boss defeats = Opossum / Hare Pelt

2 first boss defeats = Hare Pelt / Hare Pelt


If you have no pelts at the start, you get a card choice node instead of the trader.


Note: previously, it seemed that you had to at least reach the first boss to restore your pelts and could either die during the fight, or defeat the boss and then end the run. Quitting during the boss fight would not restore them.

However, per radiish#9483, it seems that you need to actually beat the boss to get the pelts. This is currently being investigated in order to confirm it.

Niche mechanics

Absurdly small decks

If you have a deck with less than 3 cards, you draw your entire deck in the first turn.

What counts for the Squirrels Harmed stat

Amalgam is part of the Squirrel Tribe, but does not count as a Squirrel for the Squirrels Harmed stat

✅ squirrel is sacrificed / dies by combat

❌ squirrel is Hooked by Angler

✅ squirrel is Hooked by Angler and then killed

❌ squirrel is Hooked by Angler and pushed off the board by baiting him into hooking more stuff

❌ squirrel is Hooked by Angler and then removed from board when entering phase 2

✅ squirrel is pulled into orbit via Tidal Lock