Skip to content

Event System

Events occur when stepping on a ”?” tile (Unknown tile) on the map. However, ”?” tiles don’t always result in events — other room types may appear based on a probability table.


Room TypeBase ProbabilityNotes
Normal Combat10%
Elite Combat-1% (disabled)Does not normally occur
Treasure2%
Shop3%
Event~85%All remaining probability

Event probability is calculated as 1.0 - (sum of all positive non-event probabilities). Initially: 1.0 - (0.10 + 0.02 + 0.03) = 0.85 (85%).


Probabilities shift each time you step on a ? tile:

  1. A random roll is made using the current probability table
  2. Selected room type: Probability resets to its base value
  3. Unselected room types: Base value is added to their current probability

If a room type is not selected for multiple consecutive ? tiles, its probability gradually increases.

Example: Normal Combat (base 10%) not selected for 3 consecutive tiles:

CountCombat Probability
Initial10%
After 1 miss20%
After 2 misses30%
After 3 misses40%

Resets to 10% when selected.


On a player’s first run, special tutorial-like handling applies:

? Tile VisitResult
1stEvent (forced)
2ndEvent (forced)
3rdNormal Combat (forced)
4th+Normal probability table

RelicEffect
Juzu BraceletNormal Combat cannot occur from ? tiles
Golden CompassAll ? tiles in the acquired Act become fixed Events
PlanisphereHeal 5 HP when entering a ? tile (no effect on probabilities)
ModifierEffect
DeadlyEventsSets Elite Combat base probability to 10%. Treasure accumulation rate doubled. Juzu Bracelet removed from relic pool

The number of ? tiles is randomly determined during Act generation.

ActNumber of ? Tiles
Act 1 (Overgrowth / Underdocks)Gaussian: mean 12, std 1, range 10–14
Act 2 (Hive)Gaussian: mean 12, std 1, range 10–14, minus 1 (result: 9–13)
Act 3 (Glory)Gaussian: mean 12, std 1, range 10–14, minus 1 (result: 9–13)

Each Act’s event pool combines:

  1. Act-specific events: Events unique to that Act
  2. Shared events: 18 events common to all Acts

These are shuffled at Act generation and served in order.

1. Take the first event from the shuffled list
2. Check IsAllowed() (does it meet occurrence conditions?)
3. Check if already visited (seen during this run?)
4. If conditions not met → move to next event in list
5. If all events exhausted → loop from beginning (duplicates allowed)

Each event can define its own occurrence conditions. Condition types:

Condition TypeExample
Act restrictionOnly occurs in specific Acts
Gold requirementMust have a certain amount of gold
HP requirementMust have certain HP, or have taken damage
Deck conditionSpecific cards or enchantment targets in deck
Relic conditionSpecific relics owned/not owned
Pet conditionNo event pet owned
Floor conditionCertain number of floors passed
Potion conditionPotions in inventory

In multiplayer, all players must meet the conditions.


Each event has a “Multiplayer Shared” flag (code property: IsShared) that controls whether all players experience the event simultaneously in multiplayer. This is a separate concept from shared events (events included in every Act’s pool).

FlagBehavior
YesAll players share the same event screen in multiplayer, and choices are decided by vote. The RNG seed is shared across players
No (default)Each player experiences the event independently. RNG seeds differ per player

Ascension level progression does not directly change event choices or reward values.

However, indirect effects exist:

  • DeadlyEvents modifier: Elite Combat can occur from ? tiles
  • Map generation changes (fewer Rest Sites, etc.) may alter the relative importance of ? tiles