Tape to Tape Wiki All games ☕ Support me

Injuries#

From the in-game glossary: "Lowers an attribute until it heals. Small chance of occurring when knocked out."

Injuries are rolled only on knockouts, never on staggers. This page covers when that roll happens, the two chance formulas (one for Rogue runs, one for other modes), the four injury types and their stat penalties, healing time, and what prevents injuries.


1. When an injury roll happens#

Forward.Knockout decides between a forced injury and a normal roll.

A forced injury happens if any of these is true. It skips the chance roll entirely (AddRandomInjury).

Source Trigger
forceInjury argument Set by special callers
The Original Puck A teammate's slapshot near your skater KOs them (friendly fire)
The Original Glove talent KO'ing your own teammate
Nut Job relic The first knockout of the game always injures
Deca-Egg (EggTimer) Every 10th knockout by the owner's team injures, then the counter resets
Hard Boiled (HardBoiledEgg) A puck KO of the owner's opponent injures with chance 0.25 (Random.value ≤ injuryChance)
No-Fun Zone (SorestLoser) KO'ing a celebrating goal scorer injures; if that scorer is a "sorest loser", every injury type is added (AddAllInjuriesToForward)

Otherwise a normal roll (InjurySystem.TryInjuryAttempt) happens only when:

  • there is an attacker, and
  • the knockout type is PuckCollision, Stick, Bodycheck or Ability.

Explosion and Helmet knockouts never roll.

When an injury happens:

  • The knockout lasts +8 s longer (InjuryConfig.knockoutTime).
  • Double Yolk (DoubleIncision) adds 1 extra injury at level 1, or 2 at level 2.
  • Egg Shell Hands also targets the hands.

No roll happens at all if injuries are disabled for the match (AreInjuriesDisabledInMatch) or the victim has no injury types left to receive (GetPossibleInjuries is empty).

Source: Skaters.Forward::Knockout, InjurySystem::TryInjuryAttempt, catalog entries for the relics named above.


2. Injury chance in Rogue runs (pacing system)#

In Rogue mode (GameType.Rogue), the chance is not based on stats. InjuryPacingService.ShouldNaturalInjuryOccur uses a "due" counter instead:

due      = clamp01(KOsSinceLastNaturalInjury / KOsPerInjury) × baseInjuryRate
if this team already had a natural injury this game:  due ×= softCap
chance   = due × powerupMultiplier
injured if chance ≥ Random.Range(0,1)

Every knockout counts toward the KO counters, whether or not it causes an injury. A natural injury resets that team's "since last" counter to 0 (RecordNaturalInjury).

InjuryConfig value Value Meaning
playerKnockoutsPerInjury 25 Player team reaches the peak chance after 25 KOs since its last injury: 0.6% per KO up to 15%
cpuKnockoutsPerInjury 14 CPU teams ramp faster: about 1.07% per KO up to 15%
baseInjuryRate 0.15 Peak chance when "due"
softCapMultiplier (player) 0.10 2nd and later injuries in the same game: ×0.1
cpuSoftCapMultiplier 0.25 Same rule for CPU teams
maxPlayerInjuriesPerAct 3 Hard cap: once the player team has 3 natural injuries in an act, no more natural injuries ("Hard cap reached for Player")

Each KO adds to these counters: playerKnockoutsThisGame, ThisAct and SinceLastInjuryThisAct for the player team; cpuKnockoutsThisGame and SinceLastInjuryThisGame for CPU teams. So the player's counter runs across a whole act, while the CPU's resets every game.

powerupMultiplier is the product of three factors:

Factor Value
Attacker has Spiked Armor its injuryMultiplier: 1.0 at lvl 1, 1.5 at lvl 2
Attacker is Enraged and its team owns Deviled Egg (EnragedInjuryRelic) ×2
Victim's opponents own the Fragile relic ×2 at lvl 1 (baseMultiplier); ×3 at lvl 2 (baseMultiplier + upgradedMultiplier). The description says 3x at both levels

Source: InjurySystem::HandleInjury (rogue branch), InjuryPacingService::ShouldNaturalInjuryOccur, RecordNaturalInjury, IsPlayerHardCapReached, InjurySystem::GetEnragedInjuryMultiplier, GetFragileRelicMultiplier, InjuryConfig asset.


3. Injury chance outside Rogue (Quick Game and similar)#

InjurySystem.CalculateInjuryChance is used instead:

base   = sameTeam ? sameTeamInjuryChance (0.005) : newInjuryChance (0.09)
base  += victim.injuryCounter          // "pity" counter, see below
chance = base × prevInjuryMultiplier × powerupMultiplier

Pity counter. Every failed roll adds +0.02 to the victim's ForwardData.injuryCounter, up to a maximum of 0.25. A successful injury resets it to 0.

prevInjuryMultiplier depends on how many injuries the victim already has:

Current injuries on victim Human-controlled team Team without human players
0 ×1 ×1
1 ×0.25 ×0.5
2 ×0.10 ×0.5
3 ×0.05 ×0.5
4+ ×0.5 ×0.5

In this mode, a successful roll grants the victim the Fragile talent and fires an event. It does not add a pacing-tracked injury (how this shows up on screen is inferred).

Source: InjurySystem::CalculateInjuryChance, HandleInjury (non-rogue branch).


4. Fragile talent#

Fragile (Rogue.Powerups.Chaos.FragileTalent) reads: "10% chance of an injury each time this skater is knocked flat on the ice. Bench for a game or see the Nurse to recover."

If the victim has this talent, HandleFragileInjury replaces the normal roll and bypasses pacing and caps:

chance = fragileBaseChance (0.10) × SpikedArmor × EnragedInjury × FragileRelic

The pity counter still moves: +0.02 on a miss (max 0.25), reset on a hit.


5. Injury types and their stat penalties#

InjuryType has four values. ForwardStats.GetStatAfterInjuryCheck applies the penalty whenever the stat is read:

Injury Stat affected Penalty
Eye (0) Shot Accuracy − injuredStatPenalty = −100, floored at 0, so accuracy is effectively 0
Shoulder (1) Checking × injuredStatMultiplier = ×0.2 (keeps 20%)
Leg (2) Speed ×0.2
Arm (3) Shot Power ×0.2

The Shoulder penalty also feeds the bodycheck score, so injured skaters lose checks badly (see bodychecking).

Masochist (SadoMaso) removes the stat penalty: "Injuries give +10 (lvl 1) / +20 (lvl 2) attribute instead". It also makes injuries last +2 games longer (SadoMasoInjuryDurationBonusGames = 2, GetAdjustedHealingTime).


6. Duration and healing#

Injury length is counted in games. It is rolled when the injury is created:

Source Roll Result
In-game injury (GetRandomizedHealingTimeInGame) r < 0.05 1 game (5%)
0.05 ≤ r < 0.65 2 games (60%)
r ≥ 0.65 3 games (35%)
Event injury, e.g. map events and the Nurse "cripple" offer (GetRandomizedHealingTimeInEvent) r < 0.55 1 game (55%)
otherwise 2 games (45%)

After every game (OnGameFinished → UpdateInjuryHealingTime), each injury's HealingTime drops by 1. At 0 the injury is healed and shows on the "just healed" list.

Nurse. The Nurse map event can heal every injury (HealAllInjuries), or "cripple" a skater for 1–2 games in exchange for a power-up. The Butcher option trades an injury for a talent. These are event choices; their reward tables are outside the scope of this page.


7. Injury immunity and prevention#

InjurySystem.CanBeInjured, CanHaveInjuryType and WasInjuryPrevented:

Source Effect
Frozen Peas talent (BuiltDifferent) Skater can never be injured
InjuryImmuneChaos talent Skater can never be injured
Royal Treatment (GoldenHelmetInjuryImmuneRelic) A skater wearing the Golden Helmet cannot be injured
Impervious relic Team cannot be injured
Bubble Wrap lvl 1 blocks Speed (Leg) injuries; lvl 2 blocks Speed and Checking (Leg, Shoulder)
Steel Mitts (Cushioned) lvl 1 blocks Shot Power (Arm) injuries; lvl 2 blocks Shot Power and Accuracy (Arm, Eye)
Team Canada (id 8652786b-…) Cannot receive Eye injuries (hard-coded in CanHaveInjuryType)

A blocked type sets wasPrevented on the result, and no injury is applied.

Source: InjurySystem::CanBeInjured, CanHaveInjuryType, WasInjuryPrevented; catalog entries.