Skip to content

Rift Types And Variables

Purpose

This document defines the official rift taxonomy for EchoSpire: Portals.

It covers the currently implemented rift node types, the design role of each type, and the variable set that should be available for authoring, balance, simulation, and UI presentation.

Terminology Rule

In current code, map nodes are represented as RiftNodeType values.

In design terms, these are the playable rift encounter and service types that structure a realm.

The official current set is:

  • Combat
  • Elite
  • Boss
  • Event
  • Shop
  • Rest
  • Treasure
  • Anchor
  • Protection
  • Sanctuary

Rift Design Principle

Rift types should not only answer the question, what screen do we show next?

They must also answer:

  • what kind of pressure is being applied
  • what kind of reward or recovery is offered
  • what quest purpose this node can serve
  • what variables content authors are allowed to tune

Shared Variables For All Rift Types

Every rift should support a shared baseline data model.

Recommended shared variables are:

  • riftType: the node family
  • displayName: player-facing title
  • subtitle: short flavor tag or operation label
  • realmId: source realm definition
  • questId: current owning quest
  • actIndex: campaign act or chapter placement
  • threatTier: combat and pressure rating
  • rewardTier: reward quality band
  • factionOwnerId: controlling or originating faction when relevant
  • resonanceTags: tags explaining narrative connection to the wider quest chain
  • passiveOverrides: local modifiers that stack with realm passives
  • introBeatId: optional pre-node narrative beat
  • completionBeatId: optional post-node narrative beat
  • failureBeatId: optional failure narrative beat
  • uxPresentationKey: presentation and VFX routing key
  • telemetryTags: analytics labels for simulation and balancing

Combat Rift

Purpose

The default conflict node. It establishes baseline pacing, enemy ecology, and card-economy pressure.

Key Variables

  • encounterPoolId
  • enemyGroupTemplateId
  • waveCount
  • spawnPattern
  • objectiveType such as eliminate, survive, hold, interrupt
  • turnPressureRule
  • hazardRules
  • openingModifiers
  • victoryRewards
  • failurePenalty

Elite Rift

Purpose

Higher-risk combat with sharper identity, stronger rewards, and more memorable mechanics.

Key Variables

  • all Combat Rift variables
  • eliteTraitSet
  • signatureMechanicId
  • rewardBias
  • relicChance
  • rareCardChance
  • narrativeWeight

Boss Rift

Purpose

The major climax node for a realm, quest chapter, or campaign act.

Key Variables

  • all Elite Rift variables
  • bossId
  • bossPhaseCount
  • bossArenaRule
  • phaseTransitionBeats
  • chapterClearRewards
  • campaignStateChange
  • legendFlag when this is a capstone outcome

Event Rift

Purpose

Narrative choice, risk-reward exchange, lore revelation, or anomaly interaction outside standard combat.

Event Rifts should not be treated as generic text encounters.

In EchoSpire, an Event Rift is a controlled moment where the player negotiates with instability: ideology, scarcity, compromised truth, contraband opportunity, or a local reality problem that cannot be reduced to a normal fight.

The player should leave an Event Rift feeling that they made a meaningful trade, not that they clicked the obviously correct option.

Key Variables

  • eventTemplateId
  • choiceSetId
  • skillCheckRules
  • resourceCosts
  • branchOutcomes
  • codexUnlocks
  • questFlagsSet
  • questFlagsRequired
  • canEscalateToCombat
  • canSpawnRivalHero

Event Rift Outcome Types

Event outcomes should usually land in one or more of these buckets:

  • immediate resource swing such as life, gold, card reward, or relic access
  • route information such as reveal, reroute, or hazard warning
  • deck manipulation such as add, remove, splice, mutate, or mark a card
  • quest consequence such as flag changes, ally loss, rival attention, or faction approval
  • future combat modifier such as opening bonus, ambush risk, instability tax, or temporary support unit
  • codex or lore unlock that reframes the realm or faction stakes

For authoring, Event Rifts should usually fall into one of these families:

  • moral_dilemma: choose between values, duty, mercy, or profit
  • unstable_bargain: take immediate power in exchange for future risk
  • reality_salvage: extract value from a broken space, artifact, or timeline fragment
  • faction_negotiation: interact with a vendor, official, dissident, archivist, or criminal contact
  • information_revelation: learn the truth about the realm, route, boss, or quest
  • escalation_event: a choice node that can turn into combat, a rival encounter, or a transit hazard

Official Event Design Rules

Event Rifts should follow these rules:

  1. The choice should be legible, but not trivial.
  2. The best option should depend on run state, not designer favoritism.
  3. At least one option should usually trade present safety for future leverage, or vice versa.
  4. Events should carry faction voice strongly enough that a Valerii event, Aethari event, and Salvari event do not feel interchangeable.
  5. Events should often alter the next few nodes, not only the current screen.

EchoSpire-Specific Event Identity

The distinctive Event Rift fantasy is not "random story card."

It is "you are making a binding decision inside a damaged reality machine."

That means Event Rifts should often involve:

  • incomplete information
  • ideologically loaded choices
  • asymmetrical trades
  • unstable truths
  • consequences that ripple forward into map, quest, or combat state

Shop Rift

Purpose

Controlled economy node for acquiring cards, relics, services, intelligence, or faction-specific contraband.

Key Variables

  • shopPoolId
  • inventoryBias
  • refreshRules
  • currencyTypes
  • factionVendorId
  • serviceOptions
  • blackMarketRisk
  • questExclusiveStock

Rest Rift

Purpose

Recovery node that trades tempo for stability.

Rest Rifts should be the light-touch recovery node, not a second Sanctuary.

If Sanctuary is a strategic maintenance chamber, Rest is a field-expedient pause: a dry pocket, a sealed alcove, a surviving chapel cell, a scaffold nest, a logic nook, a barricade shadow, a stolen breath.

The player should feel that a Rest Rift is about immediate survival discipline, not full-service long-run optimisation.

Key Variables

  • healAmountRule
  • alternateActions
  • upgradeOptionCount
  • removeCardOption
  • statusCleanseRules
  • storyRestBeatId

Rest Rift Outcome Types

Rest outcomes should usually sit inside this band:

  • immediate life recovery
  • one modest deck-maintenance action
  • a small cleanse or composure effect
  • a short next-combat preparation bonus
  • a lightweight story beat that reinforces the realm's emotional texture

Official Rest Design Rules

  1. Rest should be faster, narrower, and lower-ceiling than Sanctuary.
  2. Rest should answer an immediate survival question, not become a full planning hub.
  3. The player should usually choose between a small number of sharp options, not a service menu.
  4. Rest should feel vulnerable and temporary. It is shelter, not control.

EchoSpire-Specific Rest Identity

The distinctive Rest Rift fantasy is not "campfire scene."

It is "you found a pocket of temporary coherence inside a collapsing reality."

That means Rest Rifts should often involve:

  • a fragile or improvised safe zone
  • a sense that time is being bought, not owned
  • immediate composure and triage decisions
  • a smaller, more intimate emotional beat than Sanctuary

Treasure Rift

Purpose

High-value reward node that should feel discovered, stolen, excavated, or earned.

Treasure Rifts should not feel like free generosity from the map.

In EchoSpire, treasure should usually be sealed, trapped, buried in contradiction, defended by the realm, or morally compromised to claim.

The player's emotional read should be: "Can I get away with this?" not merely "Nice, loot."

Key Variables

  • treasurePoolId
  • relicTableId
  • riskGate
  • trapRules
  • questArtifactId
  • lorePayloadId
  • currencyRewardRule

Treasure Rift Outcome Types

Treasure outcomes should usually involve one or more of these:

  • immediate gold or shard payout
  • relic access
  • quest artifact recovery
  • codex or lore payload
  • trap or instability tax paid up front or deferred into the next node
  • route revelation tied to the cache's origin or defense system
  • sealed_cache: direct reward gated by trap, code, or hazard
  • reality_salvage: reward extracted from unstable architecture or drowned archive remains
  • forbidden_reliquary: lore-heavy artifact with attached consequence
  • heist_window: high-value take with alarm, rival attention, or future pursuit risk
  • buried_truth: reward and information bundled together, often with an ethical cost

Official Treasure Design Rules

  1. Treasure should usually involve some degree of exposure, trap, or commitment.
  2. Treasure should feel faster and more immediate than Shop, but riskier and less controllable.
  3. At least some Treasure Rifts should reveal something about the realm or quest, not only provide value.
  4. The best Treasure Rifts should make the player feel clever, greedy, or guilty.

EchoSpire-Specific Treasure Identity

The distinctive Treasure Rift fantasy is not "open chest."

It is "you are extracting value from a place reality did not intend to surrender cleanly."

That means Treasure Rifts should often involve:

  • sealed vaults, reliquaries, drowned caches, archive bones, or contraband lockers
  • traps, instability backlash, or attention from the realm
  • immediate payoff with a feeling of theft, salvage, excavation, or trespass
  • rewards that are materially useful but narratively loaded

Anchor Rift

Purpose

Stabilize the realm, reveal hidden routes, and interact directly with the reality state of the map.

This is a signature EchoSpire node type and should remain mechanically and narratively special.

Key Variables

  • anchorStrengthRequired
  • revealRadiusRule or fullRevealRule
  • stabilityShift
  • realmPassiveAdjustment
  • anomalyResistance
  • anchoringMiniObjective
  • anchorFailurePenalty
  • mapStateEffects
  • transitionUnlocks

Protection Rift

Purpose

Defend a named asset, person, machine, archive, convoy, or ritual for a defined survival window.

This type already exists in the current tutorial slice and should remain a first-class authored encounter type.

Protection Rifts must be designed so every class has at least one viable line of play.

That does not mean every class heals the target the same way. It means the encounter rules must allow multiple protection solutions: drawing aggro, intercepting hits, repairing assets, suppressing threats, spawning decoys, or reshaping space.

Key Variables

  • protectableEntityId
  • protectableName
  • protectableMaxHp
  • surviveTurns
  • friendlySupportRules
  • enemyTargetingBias
  • failurePenalty
  • scarCardId
  • questConsequences
  • successBonus
  • protectableType such as living, mechanical, ritual, convoy, archive
  • movementRule for stationary defense, escorted movement, or checkpoint progression
  • checkpointCount
  • repairable or healable
  • interceptAllowed
  • tauntSensitivity
  • enemyObjectivePriorityRule
  • lossThresholdRule
  • optionalDefenseBonusRule

Official Protection Design Rule

When a Protection Rift is authored, the content should be reviewed against all five class identities to make sure success is not locked to one narrow answer.

Examples:

  • Anchor should be able to absorb or redirect pressure.
  • Drifter should be able to delete or disrupt priority attackers.
  • Conduit should be able to clear waves and create emergency stabilization windows.
  • Machinist should be able to defend through Constructs, cover, and repair.
  • Catalyst should be able to use lures, mutation spikes, and unstable rescue tools.

Sanctuary Rift

Purpose

Strategic service node tied to longer-form run continuity, stability budget, repairs, recalibration, and faction-specific preparation.

This should be treated as more important than a simple rest stop.

Key Variables

  • stabilityBudget
  • availableServices
  • repairRules
  • recalibrationRules
  • defragmentRules
  • factionExclusiveOption
  • saveCheckpointRule
  • heroProgressHooks
  • questUpdateBeatId

Transit Interrupts

Transit interrupts are not currently a primary RiftNodeType, but they are an official structural part of the run.

They represent disruptions during travel between nodes or realms.

Recommended transit-interrupt variables are:

  • interruptType
  • triggerChance
  • hazardRule
  • shortEncounterTemplateId
  • narrativeBeatId
  • rerouteRule
  • resourceTax

Rift Families By Function

For campaign authoring, rift types should also be understood by function:

  • pressure rifts: Combat, Elite, Boss, Protection
  • recovery rifts: Rest, Sanctuary
  • economy rifts: Shop, Treasure
  • narrative-control rifts: Event, Anchor

This functional grouping is useful for pacing rules, map generation, and quest authoring.

Rift Authoring Rules

1. The Rift Type Must Predict The Player's Question

Players should be able to infer the basic risk and opportunity profile from the node type.

2. The Variables Must Stay Data-Driven

Rift authoring should not require new code for every content variant. New code should be reserved for new behaviors, not new content records.

3. Quest Stakes Must Be Visible In The Rift Data

If a node matters to the story, that should be explicit through beats, flags, rewards, or consequences.

4. Realm Flavor Must Survive The Template

A Protection Rift in a frozen historical echo should not feel identical to a Protection Rift in a machine-scar maintenance district.

5. UI Needs Type-Specific Payloads

The UX layer should receive enough structured data to present distinct framing, warnings, and payoff language per rift type.

Rift Identity Matrix

This matrix is the compact reference for what each node is supposed to feel like.

Rift Type Player Question Primary Fun Primary Reward Shape EchoSpire Hook
Combat Can I survive the realm's baseline pressure? sequencing, attrition management, reading intent cards, gold, baseline progression realm-specific pressure profile rather than generic filler fight
Elite Can my build solve a sharper authored combat problem? stress test, pattern solving, high-risk payoff relic bias, rare-card bias, stronger rewards signature enemy mechanic that tests a deck weakness
Boss Can I survive the realm's ideological climax? multi-phase mastery, capstone tension chapter-clear rewards, state change, major unlocks realm thesis statement embodied as a fight
Event What instability am I willing to bargain with? dilemma, asymmetrical trade, forward consequence mixed outcomes: resources, flags, route effects, future modifiers binding decisions inside a damaged reality machine
Shop How do I cut apart and rewrite this build? build surgery, controlled optimisation, greed discipline cards, relics, services, splicing Black Market economy with buying, selling, and permanent card splicing
Rest What do I patch right now so I do not die later? triage, immediate recovery, small sharp choices heal, cleanse, minor prep temporary coherence in an unsafe place
Treasure Can I get away with taking this? heist energy, greed, risk acceptance immediate loot, relics, artifacts, lore payload salvage, theft, excavation, or trespass instead of a free chest
Anchor What certainty do I want to buy with limited stabilisation? route mastery, information control, tactical planning map reveal, hidden routes, hazard suppression Resonance Routing and reality stabilisation
Protection Can I preserve something other than myself? interception, priority control, alternate win condition success bonus, quest outcome, lower-risk progression third health bar, altered enemy intent, defend-the-fragile objective
Sanctuary How do I spend scarce stability for the long run? strategic budgeting, recovery planning, run continuity services, upgrades, repairs, save checkpoint, faction prep stabilisation node, not just a rest stop

Matrix Read Rule

If two rift types answer the same player question in the same way, one of them needs stronger identity.

This matrix should be used as a quick test during content authoring, UX review, and map-generation planning.

Official Direction Summary

The canonical direction is:

  • the current official playable rift types are the ten node families already reflected in the codebase
  • each type should expose a defined variable set for content authoring and simulation
  • Anchor, Protection, and Sanctuary are strategically important identity nodes for EchoSpire, not filler variants
  • transit interrupts should be treated as a formal secondary rift structure even if they remain outside the primary node enum
  • rift data should carry gameplay, narrative, telemetry, and presentation payloads together