DesignGddEndless Mode

Endless Mode

Status: Design Draft Created: 2026-04-07 Depends On: game-concept-v3.md, player-resources.md, enemy-data-ai.md, map-system.md


1. Overview

Endless Mode extends the standard 3-act, 45-floor run for players who defeat the Act 3 boss. Instead of a victory screen, the player is offered an opt-in prompt to continue into escalating "Cycles." Each Cycle repeats the full 15-floor structure of all 3 acts (45 floors), carries the player's existing build forward, and applies one or more stackable Cycle Modifiers that permanently increase difficulty and reward quality for that run's remainder. Difficulty scales through compound multipliers on enemy stats, new interference behaviors, and modifier-specific rule changes. Rewards scale through improved relic rarity distributions, gold bonuses, and exclusive cosmetic unlocks. There is no hard floor cap — the run ends when the player dies, creating a score metric based on Cycles cleared and a secondary metric of total damage dealt. Endless Mode is designed as a mastery outlet for optimized builds, not as standard progression content. Skill points are not awarded in Endless beyond normal run completion SP.


2. Player Fantasy

The player has just beaten the final boss. Their build is clicking. They feel powerful. Endless Mode asks: "How far can you push it?" The emotional arc shifts from "survive and progress" to "prove mastery against escalating resistance." The player should feel like they are stress-testing a machine they built — watching it hold together under pressure, then eventually fail in a way that feels earned rather than arbitrary.

Target MDA Aesthetics:

  • Challenge (primary): Escalating difficulty as a test of build optimization and mechanical skill. The core loop must stay engaging under modifier pressure.
  • Expression (secondary): Build identity becomes visible under stress. A Pyromaniac relic stack survives differently than a Bruiser HP stack.
  • Discovery (tertiary): Cycle Modifiers introduce rule mutations that create novel dice interactions the player has not encountered in the standard run.

Self-Determination Theory alignment:

  • Competence: Clear score feedback (Cycles cleared, total damage) makes skill growth legible. The player knows exactly when and why they died.
  • Autonomy: Opt-in at every Cycle boundary — the player chooses to continue or cash out for score. Modifier selection (see Section 3.4) provides meaningful build-informed choices.
  • Relatedness: Leaderboard score creates vicarious competition. Player-Echo Boss (see Section 3.6) creates a connection to the player's own past mastery.

3. Detailed Design

3.1 Opt-In Flow

After the Act 3 boss dies:

  1. The standard "Victory" music sting plays and the boss death animation completes.
  2. A modal prompt appears over the dungeon background — not the victory screen:
THE DUNGEON DOES NOT END.

You have shattered the Arch Demon. The Cycle begins again.
Further in, the darkness grows. Rewards grow with it.

[ CONTINUE INTO CYCLE 1 ]     [ CLAIM VICTORY ]
  • "CLAIM VICTORY" proceeds to the normal victory screen, run end, and SP award as usual. This is the default-highlighted option for new players.
  • "CONTINUE INTO CYCLE 1" begins Endless Mode. The run state is preserved — HP, relics, consumables, gold. The map regenerates for a new 45-floor structure.
  • The choice is persistent per-run. There is no returning to the standard victory state once the player enters Endless.
  • First-time players see a brief tooltip: "Endless Mode awards no additional Skill Points. Score is tracked on a separate leaderboard."

3.2 Cycle Structure

Each Cycle is a full 45-floor run (3 acts, 15 floors each) using the same map generation rules as the standard run, with the following changes:

What carries over from the previous Cycle (or standard run):

  • Current HP (not reset between Cycles — no inter-cycle full heal)
  • All equipped relics
  • All consumables in slots
  • Current gold

What resets at the start of each Cycle:

  • Map layout (regenerated procedurally)
  • Enemy spawn table (new random seeds)
  • Shop inventory (restocked with the Cycle's rarity distribution)

Inter-Cycle Checkpoint: Between Cycle N ending (Act 3 boss killed) and Cycle N+1 beginning, the player sees the Cycle Complete screen (see Section 3.5). This is where Modifier Selection occurs and the next Cycle's parameters are previewed.

HP Note: The act-transition full heal between Act 1→2 and Act 2→3 still occurs within each Cycle. There is no additional heal between Cycles. This creates a consistent attrition mechanic — players enter each successive Cycle with whatever HP they ended with.

3.3 Difficulty Scaling Per Cycle

Difficulty is calculated as a compound multiplier stack applied to base enemy stats. All multipliers apply simultaneously.

Enemy HP Multiplier

hp_mult(C) = base_act_mult * cycle_hp_scale^C

Where:

  • base_act_mult = the standard act multiplier (1.0 / 1.4 / 1.8 for Acts 1/2/3)
  • cycle_hp_scale = 1.20 (20% HP increase per Cycle, compounding)
  • C = Cycle number (1-indexed; standard run = Cycle 0)

Example: A basic Act 2 enemy with 40 HP base:

  • Standard run: 40 * 1.4 = 56 HP
  • Cycle 1: 40 * 1.4 * 1.20^1 = 67 HP
  • Cycle 3: 40 * 1.4 * 1.20^3 = 97 HP
  • Cycle 6: 40 * 1.4 * 1.20^6 = 168 HP

Enemy Damage Bonus

damage_bonus(C) = base_act_bonus + cycle_damage_increment * C

Where:

  • base_act_bonus = +0 / +2 / +4 for Acts 1 / 2 / 3 (unchanged from standard)
  • cycle_damage_increment = +2 flat per Cycle (additive, not multiplicative)
  • C = Cycle number (1-indexed)

Example: An Act 1 basic attack dealing 7 damage base:

  • Standard run: 7 + 0 = 7
  • Cycle 1: 7 + 0 + 2 = 9
  • Cycle 3: 7 + 0 + 6 = 13
  • Cycle 6: 7 + 0 + 12 = 19

Damage bonus is flat addition to the attack value before any other modifiers, including player block and relic effects.

Turn Limit Reduction

Each monster has a per-turn limit — if the player does not deal enough damage within the limit, the monster attacks. In Endless Mode:

turn_limit(C) = max(base_turn_limit - floor(C / 2), MIN_TURN_LIMIT)

Where:

  • base_turn_limit = the enemy's standard turn limit from enemy_database.gd
  • floor(C / 2) = reduces turn limit by 1 every 2 Cycles
  • MIN_TURN_LIMIT = 2 (hard floor — enemies always give at least 2 turns)

A monster with a base turn limit of 5:

  • Cycle 1: 5 - 0 = 5
  • Cycle 2: 5 - 1 = 4
  • Cycle 4: 5 - 2 = 3
  • Cycle 6: 5 - 3 = 2 (capped)

Interference Escalation

New interference tiers unlock at specific Cycle thresholds. These are additive to existing interference types, not replacements.

Cycle ThresholdNew Interference UnlockedDescription
Cycle 2+CHAIN_LOCKLocking one die also locks an adjacent die (by index)
Cycle 3+ELEMENTAL_DRAINOne elemental die per turn loses its element on enemy phase
Cycle 5+MIRROR_CHAOSCHAOS interference now affects held dice as well
Cycle 7+TURN_DEBTIf any monster hits the turn limit, the next enemy's turn limit is reduced by 1 for this combat
Cycle 10+CURSE_PERSISTCursed dice persist between turns (not cleared on new roll)

These new interference types are only introduced on enemies at or above the cycle threshold. They do not appear on early-act enemies in Cycle 2 — they phase in progressively as the player reaches higher acts within each Cycle.

3.4 Cycle Modifiers

At the Cycle Complete screen between each Cycle, the player is presented with a Modifier Selection. This is NOT optional — one modifier always applies. However, the player chooses which modifier from a randomly drawn set of 3.

Modifier draw rules:

  • 3 modifiers drawn randomly from the active modifier pool for that Cycle number
  • Each modifier has a rarity weight (Common / Uncommon / Rare)
  • Higher Cycles weight toward Uncommon and Rare modifiers
  • The same modifier cannot appear twice in the draw for a single selection

Modifier Rarity Weights Per Cycle

CycleCommon WeightUncommon WeightRare Weight
170%25%5%
2-355%35%10%
4-540%40%20%
6-825%45%30%
9+15%40%45%

Common Modifiers (Difficulty — build constraint)

NameEffect
Brittle DiceAll dice start each turn with a 10% chance to be pre-locked (cannot hold or reroll).
Greedy DungeonShop prices +25%. Gold from combat -10%.
Short MemoryHold limit reduced from 2 to 1 for this Cycle.
Bleeding OutLose 2 HP per combat floor (not per turn — once on floor entry).
Interference PlusAll enemy interference effects last 1 additional turn.
Dense EnemiesBasic combat encounters spawn 1 additional monster (up to the encounter cap).

Uncommon Modifiers (Mixed — constraint with upside)

NameEffect
Cursed RelicsAll relics in this Cycle have a 20% chance to have a negative secondary effect (random from curse table). Relics already held are exempt.
High StakesGold from elite and boss combat +50%. Gold from basic combat 0.
Unstable ElementsElemental dice change element randomly on hold. Combo damage +25%.
Elite Everywhere30% of basic combat nodes are upgraded to elite. Elite rewards apply.
Echo ChamberPlayer-Echo Boss (if active) gains +1 phase. See Section 3.6.
Thin IceYour HP maximum is reduced by 15 for this Cycle. Heal effects restore +5 more HP.
Reroll HungerEach reroll costs 5 gold (rerolls are not free). Reroll count +1.

Rare Modifiers (High Impact — may fundamentally change play)

NameEffect
Singularity Overload4-element combo (Singularity) cannot trigger this Cycle. All other combos deal +50% damage.
Mirror RunAll hand scoring is inverted — low-value hands (High Die, Pair) score the same as high-value hands (Five-of-a-Kind, Full Keep). Scoring table is reversed by rank.
The PurgeOn entering this Cycle, one random relic is permanently removed from your loadout. All remaining relics have +30% effect.
Dice FamineBase dice pool is 4d6 instead of 5d6 this Cycle (archetype effects that add dice are unaffected). Hands of 5+ still require 5 dice to form. +40% to all hand base chips this Cycle.
Burning WorldAll enemies gain permanent Burn immunity. Burn-based relics deal their effects to the player instead of enemies at 50% rate. Non-Burn combos deal +35% damage.
Iron GauntletNo shops this Cycle (all shop nodes become Shrine nodes). Begin this Cycle with +50 gold deposited as a pre-Cycle bonus (not spendable mid-Cycle, added to your gold total).

3.5 Cycle Complete Screen

When the player defeats the Act 3 boss of Cycle N, the Cycle Complete screen displays:

CYCLE N COMPLETE

Damage Dealt This Cycle: [X]
Total Damage (All Cycles): [Y]
Enemies Defeated: [Z]
Combos Triggered: [W]

CYCLE N+1 MODIFIER SELECTION
Choose one modifier for the next Cycle:

[ Option A: Name — brief description ]
[ Option B: Name — brief description ]
[ Option C: Name — brief description ]

[ CONTINUE TO CYCLE N+1 ]     [ END RUN — CLAIM SCORE ]

"END RUN — CLAIM SCORE" exits to the score screen with the player's current depth and metrics. Choosing to end here is equivalent to quitting at maximum depth — the score is still counted.

3.6 Player-Echo Boss Interaction

The Player-Echo Boss system (designed separately for Act 3) represents a previous player build as an enemy. In Endless Mode, this system extends with additional interactions:

Baseline behavior (unchanged from standard): The Act 3 boss in each Cycle ends with a Player-Echo phase that mirrors a previous player build from run history.

Endless Mode extensions:

  • The Echo boss in Cycle 1 mirrors the player's most recent completed standard run.
  • The Echo boss in Cycle N (N >= 2) mirrors the player's stats as they were at the end of Cycle N-1 (the Cycle just completed). This means the Echo boss gets stronger each Cycle, mirroring the player's own growing power.
  • The "Echo Chamber" Uncommon Modifier (Section 3.4) adds a second phase to the Echo boss for that Cycle: Phase 1 mirrors Cycle N-2, Phase 2 mirrors Cycle N-1.
  • If the player is in their first-ever Endless run (no prior run history), the Echo boss uses a seeded default build matching the standard player's base stats at Act 3.

Echo boss stat scaling in Endless: The Echo boss's stats scale with the same cycle_hp_scale and damage_bonus as regular enemies. The Echo's relics and scoring abilities are taken directly from the mirrored run's loadout — they do not get additional Cycle scaling beyond their innate effects. This means an Echo built around a damage-multiplying relic stack is inherently harder than a vanilla Echo, which is intentional — the player is fighting their own past excellence.

3.7 Reward Scaling

Rewards improve each Cycle to compensate for difficulty and provide meaningful incentive to push deeper.

Relic Rarity Distribution Shift

CycleCommon Drop RateUncommon Drop RateRare Drop Rate
Standard60%30%10%
Cycle 145%40%15%
Cycle 2-330%45%25%
Cycle 4-520%45%35%
Cycle 6+10%40%50%

These rates apply to post-combat relic reward draws. Shop rarity distributions scale by the same tier brackets but independently — shops in Cycle 6+ will routinely stock Rare relics.

Gold Scaling

gold_mult(C) = 1.0 + (gold_scale_factor * C)

Where gold_scale_factor = 0.15 (15% more gold per Cycle, additive).

Example: A basic combat that awards 10 gold in the standard run:

  • Cycle 1: 10 * 1.15 = 11.5 → 12 gold (rounded up)
  • Cycle 3: 10 * 1.45 = 14.5 → 15 gold
  • Cycle 6: 10 * 1.90 = 19 gold

Gold scaling applies to all combat reward gold (basic, elite, boss) and to skip reward bonuses. It does not apply to shop sale prices — shop prices are governed by the "Greedy Dungeon" modifier if active, otherwise fixed.

Exclusive Cycle Rewards (Cosmetic — no gameplay effect)

Cosmetic rewards are unlocked at specific Cycle milestones. They appear on the Cycle Complete screen and are permanently saved to the player's account (not run-specific). Cosmetics include die skin variants, board background themes, and a player title displayed on the leaderboard.

Cycle MilestoneReward
Cycle 1 clearedDie skin: "Worn Stone" (aged grey texture)
Cycle 3 clearedDie skin: "Cracked Obsidian"
Cycle 5 clearedBoard background: "Void Rift"
Cycle 7 clearedDie skin: "Bloodstained"
Cycle 10 clearedBoard background: "Singularity Core" + Title: "Endless Delver"
Cycle 15 clearedTitle: "The Undying"
Cycle 20 clearedDie skin: "Pure Light" (high-contrast white) + Title: "Cycle Breaker"

3.8 Soft Cap and Hard Cap Behavior

Soft cap: There is no enforced soft cap. Difficulty continues to scale by formula indefinitely. In practice, enemy HP scaling at 20% per Cycle compound and damage scaling at +2 flat per Cycle will outpace most builds by Cycle 10-15. This is intentional — the difficulty curve should feel oppressive but not mathematically guaranteed to end the run at a specific point. A sufficiently optimal build with favorable modifiers can theoretically continue further.

Hard cap reasoning: A hard cap (a maximum Cycle number) is explicitly avoided for two reasons:

  1. It removes the "how far can I go?" tension that motivates mastery play.
  2. Leaderboard differentiation depends on players being spread across different depths.

Practical impossibility window: Based on the scaling formulas, a basic Act 1 enemy at Cycle 15 will have approximately 40 * 1.20^15 = 307 HP and deal 7 + 30 = 37 damage per attack. At this depth, only builds with compound damage multipliers (Rare relic stacks, full elemental synergy, keystone interactions) will remain viable. This creates an emergent difficulty ceiling without a coded cap.

Leaderboard score normalization: Because some builds clear Cycles faster than others based on archetype, the leaderboard uses a composite score rather than raw Cycles cleared (see Section 3.9).

3.9 Leaderboard and Scoring

Primary score metric:

run_score = (cycles_cleared * 1000) + (floors_reached_in_final_cycle * 50) + floor(total_damage_dealt / 100)

Where:

  • cycles_cleared = number of full Cycles completed (Act 3 boss killed)
  • floors_reached_in_final_cycle = floor number in the Cycle where the player died (1-45)
  • total_damage_dealt = cumulative damage dealt across all Cycles of this run
  • The damage component acts as a tiebreaker between players who reached the same depth

Example scores:

  • Player dies floor 12 of Cycle 1, 4,500 total damage: (0 * 1000) + (12 * 50) + 45 = 645
  • Player clears Cycle 2, dies floor 8 of Cycle 3, 85,000 total damage: (2 * 1000) + (8 * 50) + 850 = 3,250
  • Player clears Cycle 5, dies floor 3 of Cycle 6, 310,000 total damage: (5 * 1000) + (3 * 50) + 3,100 = 8,250

Leaderboard fields:

  • Player name (from run settings)
  • Archetype used
  • Score
  • Cycles cleared
  • Total damage dealt
  • Highest single-hand damage dealt in run (bragging rights column)
  • Modifier stack at time of death (visible on click-through)

Score persistence: Each Endless run creates a separate leaderboard entry. Multiple attempts are allowed; the best score per player is displayed on the public leaderboard.


4. Formulas

4.1 Enemy HP

effective_hp = base_hp * base_act_mult * cycle_hp_scale^C

Variables:
  base_hp          = enemy base HP from enemy_database.gd (integer, range: 20-250)
  base_act_mult    = 1.0 (Act 1) | 1.4 (Act 2) | 1.8 (Act 3)  (float, fixed)
  cycle_hp_scale   = 1.20  (float, tuning knob — see Section 7)
  C                = current cycle number, 1-indexed (integer, range: 1-∞)

Example (Act 2 basic, 40 HP base, Cycle 4):
  effective_hp = 40 * 1.4 * 1.20^4 = 40 * 1.4 * 2.0736 = 116 HP

4.2 Enemy Damage

effective_damage = base_damage + base_act_bonus + (cycle_damage_increment * C)

Variables:
  base_damage              = enemy base attack value from enemy_database.gd (integer, range: 5-20)
  base_act_bonus           = 0 (Act 1) | 2 (Act 2) | 4 (Act 3)  (integer, fixed)
  cycle_damage_increment   = 2  (integer, tuning knob — see Section 7)
  C                        = current cycle number, 1-indexed (integer, range: 1-∞)

Example (Act 1 basic, 7 damage base, Cycle 5):
  effective_damage = 7 + 0 + (2 * 5) = 17 damage

4.3 Turn Limit

effective_turn_limit = max(base_turn_limit - floor(C / 2), MIN_TURN_LIMIT)

Variables:
  base_turn_limit   = enemy turn limit from enemy_database.gd (integer, range: 2-8)
  C                 = current cycle number, 1-indexed (integer, range: 1-∞)
  MIN_TURN_LIMIT    = 2  (integer constant — never reduces below 2)

Example (enemy with 6 base turns, Cycle 5):
  effective_turn_limit = max(6 - floor(5/2), 2) = max(6 - 2, 2) = 4 turns

4.4 Gold Scaling

effective_gold = base_gold_reward * (1.0 + gold_scale_factor * C)
Result is rounded up to nearest integer.

Variables:
  base_gold_reward    = gold amount in enemy_database / reward tables (integer)
  gold_scale_factor   = 0.15  (float, tuning knob — see Section 7)
  C                   = current cycle number, 1-indexed (integer, range: 1-∞)

Example (elite combat, 20 gold base, Cycle 4):
  effective_gold = 20 * (1.0 + 0.15 * 4) = 20 * 1.60 = 32 gold

4.5 Run Score

run_score = (cycles_cleared * 1000) + (floors_reached_in_final_cycle * 50) + floor(total_damage_dealt / 100)

Variables:
  cycles_cleared                = integer, number of Act 3 bosses killed in Endless (range: 0-∞)
  floors_reached_in_final_cycle = integer, floor number where player died or quit (range: 1-45)
  total_damage_dealt            = integer, cumulative damage dealt across all Cycles (range: 0-∞)
  floor()                       = floor division (rounds down)

Note: The damage component is deliberately weighted low (1 point per 100 damage) to prevent
damage-farming strategies from overtaking depth-based scores on the leaderboard.

4.6 Practical Impossibility Threshold

Estimated Cycle at which standard builds will die on Act 1 floor 1 (illustrative):

At Cycle C, a basic Act 1 enemy with 6 HP base (Skeleton Warrior) would have:

hp = 6 * 1.0 * 1.20^C

For a player dealing ~80 damage per turn (mid-relic standard build):
  1.20^C < 80 / 6 = 13.3
  C * ln(1.20) < ln(13.3)
  C < ln(13.3) / ln(1.20) = 14.5

Practical ceiling for a mid-tier build is approximately Cycle 14-16. Elite builds with multiplicative relic stacks may push to Cycle 20+.


5. Edge Cases

5.1 Player HP at Cycle Boundary

  • Scenario: Player defeats Act 3 boss with 1 HP.
  • Behavior: Carries 1 HP into Cycle N+1. No emergency heal is granted. Choosing to "END RUN" on the Cycle Complete screen is an explicit safety valve.
  • Rationale: Attrition is intentional. Persistent HP across Cycles is a core tension mechanic.

5.2 Zero Relics at Cycle Entry

  • Scenario: "The Purge" Rare Modifier removes the player's last relic.
  • Behavior: The Purge's +30% effect multiplier applies to no relics (no effect). The player continues with zero relics and unmodified base stats.
  • Design note: "The Purge" should not be offered as a choice if the player has fewer than 2 relics. Add a pre-draw filter: if player has 0 or 1 relics, remove "The Purge" from the draw pool for that selection.

5.3 Modifier Stacking Conflicts

  • Scenario: "Short Memory" (hold limit 1) is active and the player has a relic that grants +1 hold (bringing it to 2 in the standard run).
  • Behavior: Modifiers are applied as overrides to base values, not to relic-modified values. The hold limit before relic calculation = 1. The relic grants +1 to the base hold limit. Final hold limit = 2.
  • Clarification for implementation: Modifiers modify the base_hold_limit variable in player resources, not the final computed value after relic effects. Relic effects are always computed on top of the (modifier-adjusted) base.

5.4 "Dice Famine" With Archetype Dice Bonuses

  • Scenario: The Strategist archetype has 6 base dice. "Dice Famine" reduces the pool to 4d6. Strategist should have 6, not 5.
  • Behavior: "Dice Famine" sets BASE_DICE = 4. Archetype dice bonuses are additive on top of the base. Strategist's +1 die bonus applies: pool = 4 + 1 = 5d6 for this Cycle.
  • Rationale: This is stated explicitly in the modifier description ("archetype effects that add dice are unaffected") and must be implemented accordingly.

5.5 "Burning World" With Pyromaniac Keystone

  • Scenario: Pyromaniac keystone forces all elemental dice to be Fire. "Burning World" makes all enemies immune to Burn. Pyromaniac's core combo loop is entirely Burn-based.
  • Behavior: "Burning World" should not be offered to a player who has the Pyromaniac keystone allocated. Add a player-state check to the modifier draw: if Pyromaniac is active, remove "Burning World" from the draw pool.
  • Rationale: The modifier is intended to challenge Burn-reliant builds, not guarantee run failure for a specific keystone. An unwinnable modifier choice violates player autonomy.

5.6 "Mirror Run" Hand Scoring Inversion

  • Scenario: Player activates "Mirror Run". What is the damage value of a Six-of-a-Kind?
  • Behavior: The scoring table is rank-inverted by position. The 19 hands are ordered by rank (High Die = rank 1, Eight-of-a-Kind = rank 19). Under Mirror Run, hand rank is replaced with (20 - original_rank). High Die becomes rank 19, Eight-of-a-Kind becomes rank 1. The Chips and Mult values of the destination rank apply. The Min Dice requirement is unchanged (you still need 6 dice to form Six-of-a-Kind). Example: Six-of-a-Kind (rank 17) under Mirror Run → uses rank 3 values (Two Pair: 8 chips, x1.0 mult).
  • Implementation note: Mirror Run modifies the hand scoring lookup, not the hand detection. A Six-of-a-Kind is still detected and displayed as a Six-of-a-Kind. The scoring read replaces the chips/mult values at lookup time.

5.7 Player-Echo Boss With No Run History

  • Scenario: Player reaches Act 3 in their first-ever run and enters Endless Mode.
  • Behavior: Echo boss uses a seeded default build: base player stats, no relics, Wanderer archetype signature relic only. The seed is deterministic per-game-version so all new players face an identical default Echo.

5.8 "End Run" Mid-Cycle (Not at Cycle Boundary)

  • Scenario: Can the player quit during a Cycle (not at the Cycle Complete screen) and still get a score?
  • Behavior: No in-run quit-for-score option exists in Endless Mode. Death is the only run-ending event during a Cycle. The Cycle Complete screen "END RUN" option is the only voluntary exit with score preservation. This prevents score-farming via strategic quits at high floor numbers.

5.9 "Interference Plus" With New Interference Types

  • Scenario: "Interference Plus" is active (all interference effects last 1 additional turn). CHAIN_LOCK (Cycle 2 new interference) chains to an adjacent die. Does CHAIN_LOCK last +1 turn?
  • Behavior: Yes. "Interference Plus" applies to all interference effect durations universally. CHAIN_LOCK's lock on both dice lasts 1 additional turn. The modifier is intentionally general-purpose.

5.10 Score When Player Quits to Main Menu Mid-Run

  • Scenario: Player force-quits during Endless Mode without dying.
  • Behavior: Run is treated as if the player died on the floor they were currently on. Score is calculated using cycles_cleared (full cycles, not the current one) and floors_reached_in_final_cycle = current floor. Total damage dealt up to that point is preserved.

6. Dependencies

6.1 Systems This Document Reads From

SystemWhat Endless Mode ReadsDirection
enemy_database.gdbase_hp, base_damage, base_turn_limit, interference type tablesRead
player_resources.gdcurrent_hp, max_hp, base_dice_count, base_hold_limit, base_rerollsRead/Write
solo_game_manager.gdRun state, act transitions, floor progression, victory/defeat flowCalls into
map_system.gdMap generation (triggers regeneration per Cycle with new seeds)Calls into
relic_database.gdRelic rarity weights (modified per Cycle for reward distribution)Read
skill_tree_manager.gdKeystone flags (Pyromaniac, etc.) for modifier exclusion logicRead
archetype_data.gdArchetype dice bonuses (for Dice Famine edge case)Read
run_history (persistence)Previous run build data for Player-Echo Boss seedingRead
achievement_systemCycle milestone triggers for cosmetic unlocksCalls into

6.2 Systems This Document Writes To / Affects

SystemWhat Endless Mode ChangesDirection
solo_game_manager.gdSuppresses standard victory screen; injects Cycle Complete screen; modifies run lifecycleExtends
enemy_database.gdHP and damage values are scaled by cycle formula before instantiation (not stored, computed at spawn)Modifies computed values
reward_systemRarity distribution overrides injected at reward draw timeModifies
shop_systemRarity distribution overrides injected at shop stocking timeModifies
leaderboard (new)Writes run_score on run endCreates
player_resources.gdBase stat overrides from modifiers (hold limit, dice count, etc.) written as modifier layerWrites modifier layer
audio_manager.gdCycle Complete screen needs music transition (design note: different music loop for Endless, communicate to audio designer)Signals

6.3 New Systems Required

SystemPurposeOwned By
endless_mode_manager.gdTracks current cycle, active modifiers, accumulated score, modifier draw logicGame Designer specifies, Programmer implements
leaderboard.gdStores, retrieves, and displays Endless run scoresProgrammer implements
modifier_database.gd (or data file)Defines all modifiers, rarity weights, exclusion rulesGame Designer specifies (see Tuning Knobs)

6.4 Bidirectional Dependency Notes

The systems listed in Section 6.1 are not currently aware of Endless Mode. When Endless Mode is implemented, the following integration points must be added to the receiving systems (these are not Endless Mode's files to modify — they must be flagged for the implementing programmer):

  • solo_game_manager.gd: Must check for endless_mode_active flag before showing victory screen; must call endless_mode_manager.on_act3_boss_killed() as an integration hook.
  • enemy_database.gd: Enemy instantiation must accept an optional cycle_number parameter to apply HP/damage scaling at spawn time.
  • player_resources.gd: Must support a "modifier layer" for base stat adjustments (separate from relic adjustments) that can be applied and cleared per Cycle.

7. Tuning Knobs

All values below must live in an external data file at assets/data/endless_mode_config.json (or equivalent Godot resource). None are hardcoded.

Feel Knobs (Tune through playtesting intuition)

KnobCurrent ValueSafe RangeWhat It Affects
cycle_complete_screen_display_time3.0s (before allowing input)1.5-5.0sPrevents accidental continuation; affects perceived pacing
modifier_selection_time_limitNone (indefinite)N/A–60sPresently no time limit; add if playtesting shows deliberation fatigue

Curve Knobs (Tune through mathematical modeling)

KnobCurrent ValueSafe RangeWhat It Affects
cycle_hp_scale1.201.10–1.35Enemy HP per Cycle compound growth; primary difficulty lever
cycle_damage_increment+2 per Cycle+1–+4 per CycleEnemy damage flat increase per Cycle; secondary difficulty lever
gold_scale_factor0.150.08–0.25Gold reward increase per Cycle; reward pacing

Calibration target for cycle_hp_scale: A standard optimized build (60-70% win rate on standard run) should be expected to survive 6-8 Cycles. If median Cycle death is below 4, reduce cycle_hp_scale. If median Cycle death is above 10, increase cycle_hp_scale.

Calibration target for cycle_damage_increment: Flat damage increments should matter on floor 1 of each Cycle (where the player has not yet healed back to full). If the player trivially absorbs the first act of every Cycle, increase the increment.

Gate Knobs (Tune through session-length targets)

KnobCurrent ValueSafe RangeWhat It Affects
MIN_TURN_LIMIT21–3Minimum turns before monster attacks; prevents zero-turn monsters
turn_limit_reduction_rateEvery 2 CyclesEvery 1–3 CyclesHow quickly turn pressure increases
interference_escalation_thresholdsC2, C3, C5, C7, C10Spread across C1–C12When new interference types unlock; pacing of complexity introduction
modifier_rarity_shift_thresholdsC1, C2-3, C4-5, C6-8, C9+Adjustable per bracketWhen modifier pool tilts toward Rare; affects player power variance

Score Knobs

KnobCurrent ValueSafe RangeWhat It Affects
score_cycle_weight1000 per Cycle500–2000Weight of full Cycles in leaderboard score
score_floor_weight50 per floor20–100Weight of floors-in-final-cycle in leaderboard score
score_damage_divisor10050–500Normalization of total damage into score points

Note: score_damage_divisor should be calibrated so that the damage component represents no more than ~15% of a score at the same depth tier. This prevents damage-farming outliers.


8. Acceptance Criteria

Functional Criteria (Does it do the right thing?)

Opt-In Flow:

  • Defeating the Act 3 boss in a standard run shows the opt-in prompt, not the victory screen.
  • Selecting "CLAIM VICTORY" proceeds to the victory screen with correct SP calculation. No Endless state is preserved.
  • Selecting "CONTINUE INTO CYCLE 1" preserves current HP, relics, consumables, and gold exactly. Verification: save a snapshot of player state, trigger continuation, compare post-trigger state.
  • Player who has never won a standard run does not see the opt-in prompt (it is only shown on first-ever Act 3 boss kill or subsequent kills). Correction: all Act 3 boss kills trigger the prompt; first-win SP achievement fires regardless of opt-in choice.

Scaling:

  • At Cycle 1, Act 1, a basic enemy with 20 HP base spawns with approximately 24 HP (20 * 1.20). Verify via debug overlay in combat.
  • At Cycle 4, Act 2, a basic enemy with 40 HP base spawns with approximately 116 HP (40 * 1.4 * 1.20^4 = 116.6, rounded).
  • At Cycle 3, Act 1, a basic attack dealing 7 base damage deals 13 (7 + 0 + 2*3 = 13).
  • An enemy with base turn limit 5 has turn limit 4 at Cycle 2 (5 - floor(2/2) = 4).
  • MIN_TURN_LIMIT is never breached — no enemy has a turn limit below 2 regardless of Cycle.

Modifiers:

  • Modifier selection screen shows exactly 3 distinct modifiers at each Cycle boundary.
  • The same modifier does not appear twice in a single draw.
  • "The Purge" does not appear in the draw if player has 0 or 1 relics.
  • "Burning World" does not appear in the draw if player has Pyromaniac keystone active.
  • "Short Memory" sets effective hold limit to max(1, base) = 1, but relics adding hold still apply on top.
  • "Dice Famine" sets base dice to 4; Strategist archetype has 5d6 under this modifier.
  • "Mirror Run" causes a High Die to score using Two Pair values (8 chips, x1.0 mult). Verify with a single die roll, intentionally score the lowest hand.

Player-Echo Boss:

  • In Cycle 1, the Echo boss mirrors data from the player's most recent prior completed run.
  • In Cycle 2+, the Echo boss mirrors the player's state at the end of the previous Cycle.
  • "Echo Chamber" modifier adds a second phase to the Act 3 Echo boss.
  • With no run history, the Echo boss uses the seeded default build (consistent across fresh installs).

Scoring and Leaderboard:

  • Score formula produces correct values for known inputs: 2 Cycles cleared, died floor 8 of Cycle 3, 85,000 total damage = (2000) + (400) + (850) = 3250.
  • Leaderboard entry is created on run end (death or voluntary exit).
  • "END RUN" on Cycle Complete screen saves score using cycles_cleared as the number of full Cycles completed (N), floors_reached = 45 (if exiting after a full Cycle clear, the player survived to floor 45 of that Cycle).
  • Force-quit during Endless Mode creates a leaderboard entry with current state.

Cosmetic Unlocks:

  • Clearing Cycle 1 grants "Worn Stone" die skin in player cosmetic inventory.
  • Cosmetic unlocks persist across sessions (stored in save data, not run data).
  • Cosmetics have no gameplay effect — verify by ensuring cosmetic state has no code path to combat calculations.

Experiential Criteria (Does it FEEL right?)

Playtest Session 1 (First-ever Endless attempt):

  • Players should be able to reach Cycle 2. If median death is before Cycle 1 Act 2, cycle_hp_scale is too high.
  • The opt-in choice should feel consequential, not automatic. Observe whether players read the prompt or immediately click through.
  • Players should verbalize awareness of modifier effects mid-Cycle ("oh, the shop is empty" for Iron Gauntlet; "my hold limit is 1?" for Short Memory). If modifiers go unnoticed, they are too subtle.

Playtest Session 2 (Repeated Endless runs):

  • Players attempting a second Endless run should be making different modifier choices than their first run. Identical choices across multiple players suggest modifier variety is insufficient.
  • The depth metric (Cycles cleared) should be the thing players report, not damage dealt. Damage dealt should feel like a satisfying secondary bragging right.
  • The Echo boss should be recognized as "their own build" when it appears. If players do not make the connection, the Echo needs stronger visual communication.

Playtest Session 3 (Optimized builds):

  • A min-max player should be able to reach Cycle 8-12 on their best run. If the ceiling is below 6, scale back cycle_hp_scale. If no build can be killed before Cycle 20, scale up.
  • Rare modifiers should occasionally produce memorable "oh no" moments. If no Rare modifier has caused a run to end early, they are too weak.

9. New Achievements

All achievements below are Endless-specific. They award no Skill Points (Endless Mode does not grant SP). They unlock cosmetics, leaderboard flair, or simply provide a progression target for mastery players. Achievement data must be added to the existing achievement system.

AchievementTrigger ConditionReward
First DescentEnter Cycle 1 for the first time.None (milestone marker)
ClockworkClear Cycle 1 without dying in any combat (no game over screen seen)."Pristine" die skin variant (subtle gold pip tint)
Deeper StillClear Cycle 3 in a single run.Title: "Cycle Walker" (leaderboard display)
Echo HunterDefeat the Player-Echo Boss in 3 separate Endless runs.Unlocks Echo boss health bar annotation showing which run it mirrors
Modifier ArchivistEncounter every Rare modifier at least once across all runs combined.Board background: "The Archive" (bookshelf + scroll aesthetic)
Hoarder's CurseEnter Cycle 2 with 10 or more relics equipped.None (bragging rights)
Against the ClockClear a Cycle with the "Iron Gauntlet" modifier active (no shops that Cycle).+10% gold from basic combat permanently displayed on hub screen (cosmetic stat — no actual gameplay effect)
UnshackledClear a Cycle with the "Short Memory" modifier active (hold limit 1).Title: "The Patient"
Mirror MasteryDeal 200+ damage in a single hand while "Mirror Run" is active.Die skin: "Inverted" (black die, white pips)
Singularity SeekerTrigger Singularity (4-element combo) in Cycle 5 or higher.Title: "Elementalist Supreme"
The Long GameReach Cycle 10 in a single run.Die skin: "Singularity Core" (animated subtle pulse)
Untouchable CycleClear a full Cycle (all 45 floors) without taking any damage during Act 1.None (extreme challenge marker)
The UndyingClear Cycle 15 in a single run.Title: "The Undying" (also unlocked via cosmetic milestone in Section 3.7 — achievements and milestones share this)
ApotheosisClear Cycle 20 in a single run.Title: "Cycle Breaker" + board background: "Apotheosis" (pure white void aesthetic)

Achievement design notes:

  • "Clockwork" is deliberately attainable — it teaches the player that Endless can be played cleanly.
  • "Hoarder's Curse" has no reward intentionally. It is a recognition achievement, not an incentive.
  • "Untouchable Cycle" (no damage Act 1 of any Cycle) is nearly impossible. It is included as a pure mastery ceiling rather than an expected completion target.
  • No achievement in this list requires clearing beyond Cycle 20, which is estimated to be the practical ceiling for all but the most optimized builds. This prevents achievement anxiety about unreachable goals.
Built with LogoFlowershow