Tape to Tape Wiki All games ☕ Support me

Squads, Difficulty, Benchwarmers & Unlocks#

This page covers the meta-progression layer of Tape to Tape: which squads you can start a run with and what makes each one different, the benchwarmers and their quests, the bench bonus, the Golden Helmet, the difficulty tiers (with every tuning value), the unlock system, and the special game modes (Timer vs. Max-goal, Dominator/Eliminator).


1. Squads#

A squad (State.RunSquadScriptableObject) is the run archetype you pick before a campaign. Each squad sets:

  • a starting TeamData (roster, goalie, bench size, hidden relics),
  • its own Angus variant (angusPlayer, also used by Mark Bench's quest), plus optional extra Anguses,
  • squad relics (m_RelicsData), which you always start with. Every squad relic in the current data has IsUnlockedByDefault = 1,
  • m_MaxBenchwarmersOnBench, the number of benchwarmers you can bring in at run start,
  • the supported game rules (m_SupportedGameModes: 0 = Timer, 1 = Maxgoal),
  • the maps (act configs) and the campaign opponent pool,
  • reward-pool exclusions (relic/talent/ability lists and category bitflags),
  • an unlock condition.

Squad names and descriptions come from the localization keys squads/<id>/name and squads/<id>/desc.

Source: State.RunSquadScriptableObject (fields, IsUnlocked, HasUnlockedDifficulty, HasUnlockedGameMode, get_LocalizedSquadName = "squads/"+id+"/name"), State.SquadIds, Data.TeamData.

1.1 Squad overview#

There are 19 playable squads in the data.

Squad (in-game name) id Description (in-game) Game rules Max benchwarmers Team bench size Starting squad relics
Vanilla Squad vanilla A simple, balanced team built for any playstyle Max-goal, Timer 1 5 none
Oldschool Squad oldschool No injuries. No bench. Old-school Tape to Tape rules. Max-goal, Timer 0 0 none
Defense Squad defense Goals scored by defensemen increase the team's OVR by 2. Max-goal, Timer 1 5 Brickie Plushie (+2 OVR when LD or RD scores), Blue Marker (LD and RD +OVR)
SNES Squad (team "16-Bit") snes Skaters have very low turning speed Timer, Max-goal 1 5 none
Trio Squad trio Play with only three skaters. Goals assisted by both teammates increase the team's OVR by 2. Max-goal, Timer 3 5 Cerbie Plushie (+2 OVR when a goal has 2 assists)
Speedy Squad speedy Skaters are extremely fast but easily knocked down. Max-goal, Timer 1 5 Cheeto Plushie (+40 Speed, -200 Checking)
Modern Squad tchel Modern hockey mechanics with offsides and manual pokechecks. Max-goal, Timer 1 5 none
Dominator Squad eliminator 4-on-4 hockey with random positive and negative Lucky Pucks. Max-goal only 1 5 none
Speedrun Squad speedrun Win before the end of the first period or lose the game. Max-goal only 1 5 Indecisive (+1 reroll per event), Remarkable Rock (first goal of a game counts as 2)
Slapshot Squad slapshot Slapshots are your only effective shots. All other shots are weak. Max-goal, Timer 1 5 Corn dog-stic (+Shot Power), Slapshot Plushie (every skater gets a slapshot power-up at run start)
Violence Squad violence Every bodycheck causes a knockout. Skaters recover from knockouts quickly. Max-goal, Timer 1 5 Violent Plushie (same effect as the description), Bowling Relic (knocked-out skaters become bowling pins)
Referee Squad (team "The Officials") referee Play every game 6-on-5 as a team of referees. Max-goal, Timer 1 5 Whistle Blower (referees join your team and can be controlled), Briefcase (revert 1 goal)
Solo Squad solo You are Player Locked to Angus throughout the entire run. Max-goal, Timer 1 5 none
Stats Squad statrewards A Squad focused on Attribute boosts Max-goal, Timer 1 5 none
General Manager Squad generalmanager Manage a rotating roster of Free Agents throughout your run. Max-goal, Timer 0 7 none
Double Decker Squad lines Two full lines that can be manually switched during games. Max-goal, Timer 5 5 none
Gauntlet Squad gauntlet Face every team in a single run. Max-goal, Timer 2 5 none (hidden "Gauntlet Bench Bonus", see 2.3)
Bum Squad bum Three Elite skaters start at 0 OVR but provide unique bonuses from the bench. Max-goal, Timer 1 5 none (hidden "Bum Bench Bonus")
All Angus Squad allangus Every skater is a different version of Angus. Max-goal, Timer 1 5 none

Almost every starting team also carries the hidden Bench Bonus relic (isHidden = 1, see §2.3). The exceptions are Oldschool, Dominator and Double Decker, whose teams have no relic. Bum and Gauntlet use their own variants of it.

The localization also contains squads that are not in the playable data: Monk, Talented (norelics), Prisoner (sinbin), Balanced, Defense Max, NES, Soccer, Small Team, and a squads/tmp "???: Upcoming squad / Coming with the full release" placeholder. State.SquadIds also defines constants for monk, norelics and sinbin. These squads are unreleased.

1.2 Starting rosters#

Starting TeamData assets only fill a few roster slots (slot order: 0 = LW, 1 = RW, 2 = C, 3 = LD, 4 = RD, 5+ = bench). Empty slots are filled at run start through the Skater Selection / benchwarmer screen, or the free-agent intro for squads with m_UsesFreeAgentIntro = 1 (inferred from the UI strings "Choose your Starters" and "All active positions must be filled"). Stats below are the base shotPower / speed / shotAccuracy / checking values of the squad's own ForwardData assets.

Squad Pre-filled skaters (slot) SP / SPD / ACC / CHK Size Ability / talents Free-agent intro
Vanilla Angus McShaggy (LD) 72 / 36 / 50 / 38 3 Tomahawk yes
Oldschool Angus McNineties (LW) 62 / 31 / 43 / 60 3 none no
Defense Angus McDefense (LD) 25 / 37 / 51 / 37 3 Point Sniper (+30% crit at blue line) yes
SNES Angus McRoenick (LW) 24 / 34 / 47 / 51 3 none yes
Trio Freddy Kovalski (C), Angus McTrois (LD) 19/59/37/18; 48/56/51/40 2; 3 Kovalski: Helmet Stack + quest. Angus: Yo-Yo yes
Speedy Angus McShortstuff (LW) 56 / 59 / 56 / 8 1 Rage Burst, Eggsplosion yes
Modern Annual McShaggy (C) 26 / 38 / 53 / 55 3 Deke yes
Dominator Angus McShaggynator (C) 24 / 35 / 48 / 51 3 none yes
Speedrun Angus Skip-Shaggy (LD) 33 / 48 / 65 / 69 3 Dash yes
Slapshot Bangus McClapper (LD) 40 / 22 / 32 / 44 3 none yes
Violence Angus EggShaggy (LW) 26 / 39 / 53 / 56 3 Prod, Eggsplosion yes
Referee Angus McFlurry (C) 50 / 25 / 35 / 26 3 Kazoo yes
Solo Angus LockShaggy (C) 35 / 32 / 55 / 34 3 Frozen Peas yes
Stats Angus McStastny (LW) 24 / 35 / 48 / 51 3 none yes
General Manager General McShaggy (LW) 20 / 10 / 14 / 20 3 Contract (leaves after 4 games) no
Gauntlet Angus McGauntlet (C) 17 / 24 / 33 / 35 3 none no
Bum Gary Buttman (LW), Barry Butthead (RW), Bungus McBooty (C) 0 / 0 / 0 / 0 each 2 Gary: Butt Bench (team gets 1.5x bench bonus when he is not benched). Barry: Healthy Scratch + Hidden Ace (goals count as 2). Bungus: Butt Reward (+1 talent reward) no
Double Decker 10 skaters in two lines (see below) n/a n/a n/a no
All Angus none (pool below) n/a n/a n/a no

All squads use a "Bobby Butcher" goalie variant, except Double Decker, which uses "Goalie Lines Meta".

1.3 Squad gimmicks (data-driven)#

  • Oldschool: maps = VanillaLevelsConfig Act 1 / VanillaLevelsConfig / VanillaLevelsConfig (the classic maps), bench size 0 and 0 benchwarmers. Excluded relic category Injury (65536) and talent category Injury (32768). Also excluded: Participation Trophy, Double Bench Bonus, Comfy Cushion, Bench Bonus, Benchwarmer Boost, Organ Donor, Royal Rest, Short-Handed, Short Contract, Bench Juice, Double-Decker talent and Butt Bench.
  • General Manager: GM maps (Level 1/2/3 Config GM), bench size 7, no benchwarmers, Short Contract excluded. Angus has the Contract talent.
  • Gauntlet: Gauntlet maps (GauntletLevel1/2/3Config) and 2 benchwarmers. The UI requires a full lineup plus a minimum number of bench players (benchwarmers/gauntlet_roster_invalid/message). Its weaker bench bonus is described in §2.3.
  • Double Decker: two full 5-skater lines that you switch manually. The starting team holds Kirby, Angus O'Liner, Kovalski, Mark Bench, Johnny Faceless, Cassoulet, Brewster, Stumple, Boring Dude and Angus FreshShaggy. The squad has one extra Angus (m_ExtraAnguses = Angus FreshShaggy, SP 51 / SPD 35 / ACC 55 / CHK 24, Yo-Yo) and allows 5 benchwarmers. It excludes every bench-bonus item (Participation Trophy, Double Bench Bonus, Comfy Cushion, Bench Bonus, Benchwarmer Boost, Organ Donor, Royal Rest, Short Contract, Bench Juice, Double-Decker talent, Butt Bench). Bench quests are disabled for this squad: BenchQuestSystem.get_IsDisabled returns true when CampaignUtil.IsPlayingSquad("lines").
  • All Angus: m_CustomSwapPool replaces the normal benchwarmer pool with 17 Angus variants. These pool variants have their own stats and signature talents:
Pool Angus SP/SPD/ACC/CHK Size Ability / talent
Angus McShaggy 43/43/43/43 3 Tomahawk
Angus McDefense 20/29/40/29 3 Blue Marker Talent
Angus McNineties 35/17/24/34 3 Frozen Peas
Angus EggShaggy 22/32/44/46 2 Prod, Eggsplosion
Annual McShaggy 26/38/53/55 3 Mega Pokecheck, Linesman
Angus McShortstuff 56/59/56/8 1 Rage Burst
Bangus McClapper 17/65/19/18 1 Slap Chot 4000
Angus Skip-Shaggy 33/48/65/69 3 Slowmo
Angus McFlurry 44/22/31/23 3 Part of the Play
General McShaggy 130/0/25/200 5 Contract (3 games)
Angus McTrois 33/38/35/27 3 Yo-Yo, Triangle Offense
Angus McRoenick 18/26/36/39 3 Dash
Bungus McBooty 0/0/0/0 2 Butt Reward
Angus McShaggynator 24/35/48/51 3 Loaded Puck
Angus McStastny 25/25/25/25 3 Stat Stuffer
Angus O'Liner 24/35/48/51 3 Bench Borrower
Angus LockShaggy 35/32/55/34 3 Lone Wolf
  • Referee: uses RefereeCampaignOpponents instead of DefaultCampaignOpponents. It excludes Convenient Bag, Fury Stick, Triple Twig, Twig Tax, Tomahawk (talent and ability), Stickpocket and other stick-throwing items.
  • Dominator (eliminator): Max-goal only, with the Lucky Puck queue (§5.2). It excludes relic category Referee (2097152) and the Briefcase relic.
  • Speedrun: Max-goal only. Per its description, you must win before the end of the first period or you lose the game.
  • SNES: excludes the Dash ability. It draws an NHL'94-style star marker under the active skater (m_SkaterMarkerPrefab tooltip).
  • Modern (tchel): excludes Random Abilities, Random Ability and Polymorphic Ability.
  • Speedy: excludes Armor.
  • Slapshot: excludes Sweet Spot (the one-timer crit relic).
  • Solo: excludes Participation Trophy and Short Contract.
  • Bum: excludes the Double Bench Bonus relic.
  • Elite reward relic category: eliteRewardRelicCategory is 2048 for All Angus, Defense, Dominator, Gauntlet, SNES, Speedrun, Stats, Modern and Violence, and 0 for the rest. 2048 is not a named RelicCategory member, so its effect is unknown.

1.4 Squad unlock conditions#

IsUnlocked returns true when:

  1. the debug unlock-all flag (Unlocks.UnlockSystem static) is set, or
  2. the squad id is in ProfileData.unlockedSquads, or
  3. the squad id is in SquadIds.ALWAYS_UNLOCKED = {vanilla, oldschool, defense}.

Every other squad is unlocked by its condition asset. The in-game text is built from the condition's own description key and values. Several hard-coded squads/<id>/unlock strings are stale: for example, Trio's says "Win with 6 different squads", but the data requires 1. The table below uses the data values.

Squad Condition asset (class) Requirement (data)
Vanilla, Oldschool, Defense none (always unlocked) none
SNES SnesCompletedCountCondition (SquadsCompletedCount) Win with 2 different squads on Pro or higher (minimumDifficulty = 1)
Trio TrioCompletedCountCondition (SquadsCompletedCount) Win with 1 squad on Pro+
Speedy SpeedyCompletedCountCondition Win with 6 different squads on Pro+
Bum BumCompletedCountCondition Win with 8 different squads on Pro+
Gauntlet GauntletCompletedCountCondition Win with 10 different squads on Pro+
Modern TchelCompletedCondition (SquadCompleted) Win with SNES on Pro+ (hidden until revealed: "Unlock more squads to reveal this condition")
Dominator EliminatorCompletedCondition (SquadCompleted) Win with Modern on Pro+ (hidden)
Speedrun SpeedrunTrioCompletedCondition (SquadCompleted) Win with Trio on Pro+ (hidden)
Double Decker DoubleDeckerCountCondition (BenchwarmerCount) 4 benchwarmers unlocked. The count includes the 3 always-unlocked ones (Boring Dude, Kovalski, Cassoulet), so in practice 1 more (inferred from get_CurrentProgress checking alwaysUnlocked or WasPreviouslyUnlocked) (hidden)
General Manager FreeAgentCountCondition 10 free agents unlocked
Violence ViolenceCondition (KnockoutCount) 200 knockouts in a single run (persistent stat MostKnockoutsInOneRun)
Slapshot SlapshotGoalsCondition 50 slapshot goals across all runs
Solo SoloAngusGoalsCondition (AngusGoals, countAllRuns = 1) 200 goals with any Angus across all runs
Stats StatsTrainingVisitsCondition Visit Training 50 times across all runs (plays a milestone dialogue)
Referee RefereeDefeatedCondition (TeamDefeated) Beat the referee team (all_refs) 10 times
All Angus AllAngusSquadsUnlockedCountCondition Have 17 squads unlocked

Each squad unlock also fires an achievement (UNLOCK_V2_SQUAD_<ID>; SNES uses UNLOCK_V2_SQUAD_16_BIT).

Source: Unlocks.*Condition assets (requiredCount, minimumDifficulty, requiredSquad, requiredGoals, requiredVisits, requiredWins), KnockoutCountCondition::get_CurrentProgress (stat id 0x49 = MostKnockoutsInOneRun), State.SquadIds::.cctor.


2. Benchwarmers, bench quests & bench bonus#

2.1 Benchwarmers#

Benchwarmers are special skaters defined in Rogue.BenchConfig. At run start you may move up to MaxBenchwarmersOnBench of them onto your team, set per squad (§1.1). Each benchwarmer has a quest. Completing it gives the benchwarmer a permanent reward, applied at the start of every later run: either a new power-up (AddNew) or an upgrade of a power-up they already have (UpgradeExisting).

Benchwarmer SP/SPD/ACC/CHK Starting kit Quest (requirement) Reward Reward type Availability
Boring Dude 36/35/35/24 none Have 8 talents at the same time Boring (+4 OVR per talent) AddNew always unlocked
Freddy Kovalski 19/59/37/18 Helmet Stack (2x helmet effects) Score 20 goals in a single run Helmet Stack upgrade UpgradeExisting always unlocked
Maurice Cassoulet 5/43/5/71 none Get 200 knockouts in a single run Bonecrusher AddNew always unlocked
Buster Brewster 61/31/10/24 Polymorphic Ability Use your ability 100 times in a single run Bench Charger (+% ability cooldown speed) AddNew unlock: win Act 1
Mark Bench 23/42/22/38 Double-Decker talent (+50% / +100% bench bonus) Mark Bench plays every game of the run, is never benched, and you win the run Double-Decker upgrade UpgradeExisting unlock: have 3 squads unlocked
Ricky Kirby 20/59/41/13 Stix (+10% crit chance) Shoot with at least 100% crit chance Stix upgrade UpgradeExisting unlock: lose 5 runs
Stu Stumple 32/40/46/13 Masochist (injuries give attributes) Have 4 injury types at the same time Masochist upgrade UpgradeExisting unlock: get injured 10 times
Sally Poppins 16/66/49/10 Status Extender Score 10 enraged goals in a single run Status Extender upgrade UpgradeExisting unlock: score 5 enraged goals in one run
Johnny Faceless 30/30/30/30 Faceless (turns into a clone of a random free agent at run start) none (no quest reward) none none unlock: win a run with General Manager

Quest rules:

  • Quest progress is not tracked on Training. BenchQuestSystem.get_IsDifficultyTooLow returns currentRunDifficulty < 1; the field holding the run's difficulty is inferred.
  • Quests are disabled in the Double Decker squad.
  • A quest reward is skipped if the current squad excludes it (IsRewardExcludedBySquad).
  • Completing a quest shows a "Quest Complete" toast with the text "X will receive/upgrade Y at the start of each run". Mark Bench's quest can fail ("X failed their quest").

Source: Rogue.BenchConfig (data), Rogue.BenchQuests.*Quest constants (RequiredTalents = 8, RequiredAbilityUses = 100, RequiredKnockouts = 200, RequiredCritPercent = 100, RequiredGoals = 20, RequiredInjuryTypes = 4, RequiredEnragedGoals = 10), BenchQuestSystem::get_IsDifficultyTooLow, ::get_IsDisabled, Rogue.Powerups.BenchQuestPowerups.* (quest-tracker talents with QuestProgress and QuestRequirement), loc powerups/*_quest/*.

2.2 Bench powers (unused)#

Rogue.BenchPowers.Repository.BenchPowerRepository lists 12 bench powers, and every SkaterData has a benchPower field. No skater asset has a bench power assigned (0 of 775 ForwardData), and none of the benchpowers/* localization keys exist. The feature looks unfinished or cut. The values in data:

Bench power Parameters
BossBonus +10 against bosses, -10 otherwise
BossMalus -10 against bosses, +10 otherwise
DefGainXray grants X-Ray Shot
EliteBonusBenchPower bonus 5
GainOverallBenchPower Bonus 5
SelfDefense const Bonus 20
OverBodycheck, OvershotBench, ShrinkTeam, SlowDef, SlowForward, BenchPowerTest no parameters

2.3 Bench Bonus#

Bench Bonus is a hidden relic present on most starting teams. Glossary: "A permanent attribute boost for a skater who sat on the bench for the entire match."

Variant OVR Speed Checking Shot Power Accuracy
Bench Bonus (default) +4 +8 +8 +8 +8
Bum Bench Bonus +4 +8 +8 +8 +8
Gauntlet Bench Bonus +3 +6 +6 +6 +6

At the end of each game, BenchBonusController.AddBenchBonus adds these values to each benched skater who did not play. Each value is multiplied by GetBenchBonusMultiplier(forward), the result is rounded to an int (rounding call inferred), and it accumulates per skater in the relic state (ForwardOvrBonuses and the other dictionaries). The Comfy Cushion relic can also give a random talent through the same controller (AddRandomTalent).

Multiplier, starting at 1.0, verified from BenchBonusController::GetBenchBonusMultiplier:

Source Effect
Double-Decker relic (DoubleBenchBonus, "2x bench bonus") x2
Royal Rest relic (GoldenHelmetBenchBonus), benched skater is a Golden Helmet holder at game start x3 x (Helmet Stack multiplier)
Butt Bench talent on any skater who did play x1.5
Double-Decker talent on the benched skater x(1 + 50/100) at level 1, x(1 + 100/100) at level 2

The multipliers stack multiplicatively. Matching each check to its relic or talent is inferred from the generic HasRelic/HasTalent calls and the matching descriptions.

Related items: Participation Trophy (+5 OVR after each win to skaters who did not play), Bench Juice (Benchwarmer talent: +OVR if benched last game), Benchwarmer Boost (benchwarmers +15 OVR), Organ Donor (2 benchwarmers lose all attributes and talents, which are spread to teammates).

Source: Rogue.BenchBonus (fields overallBonus, speedBonus, checkingBonus, shotPowerBonus, shotAccuracyBonus), Rogue.BenchBonusController (AddBenchBonus, GetBenchBonusMultiplier), Rogue.DoubleBenchTalent (levelOneBonusPercent = 50, levelTwoBonusPercent = 100).

2.4 Golden Helmet#

Glossary: "Awarded to the team's top goal scorer. On a tie, the helmet is given to the skater who scored first."

  • Holder selection (GoldenHelmetManager.CompareCandidates), in order of priority: 1. most cumulative goals this run; 2. the earlier match of the last goal; 3. the earlier goal order within that match; 4. the current holder keeps it; 5. the lower roster index.
  • Number of holders = 1, or 2 if the team owns a specific relic (GetDesiredHolderCount returns 1 + HasRelic(X)). X is inferred to be Golden Duo / "Spare Bucket" ("2nd best scorer also gets Golden Helmet"). The Golden Throne talent equips an extra golden helmet.
  • CPU teams also get a holder (DeriveCPUTeamHolder). The Golden Frog relic frogs opposing holders.
  • The helmet (Skaters.Equipment "GoldenHelmet") has no stat effect on its own. It can be knocked off: 2% chance on a knockout, and 1% on a bodycheck with power ≥ 8. Its value comes from relics that reward the holder:
Relic (asset) Effect
Golden Goose (Golden Hits) holder +30 Checking
Golden Wheats (Golden Sniper) holder +10% crit chance
Golden Showdown holder +15 OVR against bosses
Royal Treatment (Golden Resilience) holder cannot be injured
Lucky Bullion (Golden Potential) holder gains a random talent at game start
Spare Bucket (Golden Duo) 2nd-best scorer also gets a helmet
Royal Rest holder gets 3x bench bonus
Golden Frog opponents with the helmet are frogged

These relics have RelicCategory.GoldenHelmet (8388608) in their category flags.

Source: Rogue.GoldenHelmet.GoldenHelmetManager, Rogue.GoldenHelmet*Relic assets, Skaters.Equipment GoldenHelmet (dropOnKoChance = 0.02, dropOnBodyCheckedChance = 0.01, dropOnBodyCheckedPowerThreshold = 8).


3. Difficulty#

3.1 Tiers#

DifficultyManager.m_AllDifficulties holds 4 tiers. The default is Pro.

Index Name Description
0 Training A relaxed difficulty for learning the game. No stats tracked or unlocks earned.
1 Pro The recommended starting difficulty. A balanced and forgiving challenge.
2 Veteran A tougher challenge with stronger and more aggressive opponents.
3 Nightmare A relentless challenge where opponents are at their strongest and mistakes are costly.

Data.DifficultySettings maps easy to Training, medium to Pro, hard to Veteran and nightmare to Nightmare.

3.2 How difficulties unlock#

RunSquadScriptableObject.HasUnlockedDifficulty(d) works as follows:

  • false if tier d does not exist;
  • true if the unlock-all flag is set, or if d < 3 (Training, Pro and Veteran are always available);
  • otherwise (Nightmare): ProfileData.GetHighestDifficultyCompleted() + 1 >= d.

The parameterless overload of GetHighestDifficultyCompleted takes the maximum over all squads (-1 if nothing is completed), unless allDifficultiesUnlocked is set. Nightmare therefore unlocks once any squad has won a run on Veteran, even though the call is made on a specific squad. The UI string "Unlocked difficulty {0} for {1}" names a squad, but the gate itself is global.

HighestCompletedDifficulty (per squad) = GetHighestDifficultyCompleted(squad.id). It feeds squad-completion unlock conditions such as "Win with N squads on Pro".

Game rules are gated by HasUnlockedGameMode(rule), which simply checks m_SupportedGameModes.Contains(rule).

Source: State.RunSquadScriptableObject::HasUnlockedDifficulty, ::get_HighestCompletedDifficulty, ProfileData::GetHighestDifficultyCompleted (both overloads), Tape2Tape.Hockey.UI.ChooseMetaMenu::RefreshAvailableDifficultiesAndGameModes.

3.3 Difficulty parameters#

Each tier is a Data.DifficultyLevel asset, and DifficultyManager reads values from the current one.

  • ...Player values apply to the team with human players and ...CPU to the other team (verified in DifficultyManager::GetDeltaSpeed, which checks the team's player count).
  • DeltaAccuracy/Speed/Checking are attribute offsets added to that team's skaters (inferred: the call sites are inlined).
  • Goalie save bonuses are presumably percentage points of save chance (inferred).

Key differences:

  • Training: the human team gets +35 Accuracy, +20 Speed and +30 Checking. CPU skaters get -5 Accuracy, -20 Speed and -20 Checking. Your goalie gets +12 save chance, the CPU goalie -10. Your team auto-bodychecks.
  • Pro: +10 Accuracy and +20 Checking for the player, -10 Accuracy and -10 Speed for the CPU. CPU goalie +6, yours +8.
  • Veteran: player +15 Checking only. CPU -10 Accuracy, -5 Speed. CPU goalie +9, yours +6. The smarter AI behaviours are switched on (dangle abort and suppression, threat-aware steering, emergency passes) and bodychecks no longer miss.
  • Nightmare: no stat offsets on either side. CPU goalie +12 (+5 extra against one-timers), yours +3. Adds goalie quick-pass reads, early shot/pass decisions, finish-hit commitment and incoming-pass receiver targeting. Knight bosses hunt with up to 4 chargers.

Full table (all fields of Data.DifficultyLevel):

Parameter Training (0) Pro (1) Veteran (2) Nightmare (3)
DeltaAccuracyCPU -5 -10 -10 0
DeltaAccuracyPlayer 35 10 0 0
DeltaSpeedCPU -20 -10 -5 0
DeltaSpeedPlayer 20 0 0 0
DeltaCheckingCPU -20 0 0 0
DeltaCheckingPlayer 30 20 15 0
InterceptionDistancePlayer 0.15 0.5 0.27 0.27
InterceptionDistanceCPU 0.85 0.75 0.5 0.5
PokecheckDistancePlayer 0.15 0.8 0.55 0.45
PokecheckDistanceCPU 1 1.05 0.55 0.35
PokecheckDistanceImmunityPlayer 1.5 1 0.75 0.75
PokecheckDistanceImmunityCPU 0 0.25 0.2 0.2
InterceptionImmunityAfterPassPlayer 0.5 0.35 0.16 0.16
InterceptionImmunityAfterPassCPU 0.06 0.08 0.16 0.16
TimeToThrowStickMinimum 6 3 2 2
TimeToThrowStickMaximum 10 6 5 5
defenseOffsetBadPosition 3 0.1 0 0
stickThreatDistance 3 3 3.5 3.5
bodyThreatDistance 5.5 5.5 6 6
timeGate1 0.25 0.25 0.1 0.1
timeGate2 0.4 0.4 0.2 0.2
passCheckInterval 0.1 0.2 0.05 0.05
minTimeBeforePass 0.45 0.6 0.4 0.4
quickPassHoldResetThreshold 1.5 1.5 1.5 1.5
quickPassChain0Delay 0.35 0.35 0.35 0.35
quickPassChain1Delay 0.5 0.5 0.5 0.5
quickPassChain2PlusDelay 0.7 0.7 0.7 0.7
dangleMistakeChanceMin 0.15 0.15 0.03 0.03
dangleMistakeChanceMax 0.28 0.28 0.08 0.08
dangleAwarenessTime 0.05 0.05 0.02 0.02
enableDangleAutoReset 0 0 1 1
dangleAutoResetExtraTime 0.15 0.15 0.15 0.15
enableDangleInterruptRecalculate 0 0 1 1
dangleInterruptDistance 1.8 1.8 1.8 1.8
dangleInterruptMinRemaining 0.15 0.15 0.15 0.15
enableDangleAbort 0 0 1 1
dangleAbortMinPhaseTime 0.15 0.15 0.15 0.15
dangleAbortTowardThreatDot 0.3 0.3 0.3 0.3
enableDangleFrontalBlendReduction 0 0 1 1
dangleFrontalForwardBlendMin 0.15 0.15 0.15 0.15
pathInPathThreshold 0.55 0.55 0.35 0.35
pathClosingSpeedThreshold 0.3 0.3 0.1 0.1
pathSteeringStrength 0.85 0.85 1.3 1.3
enableThreatAngleWeighting 0 0 1 1
enablePathObstructionTargetOffset 0 0 1 1
enablePathObstructionStrengthMultiplier 0 0 1 1
enableSteeringThreatMemory 0 0 1 1
enableDangleSuppression 0 0 1 1
enableEmergencyPassWhenGettingHit 0 0 1 1
enableEarlyShotPassDecision 0 0 0 1
slotShotTimeGate 0.25 0.25 0.15 0.15
wideOpenNetTimeGate1 0.1 0.1 0.1 0.1
wideOpenNetTimeGate2 0.1 0.1 0.1 0.1
aiQuickHandTimeScale 0.6 0.8 1 1
staggerPuckLossThresholdPlayer 40 25 25 25
staggerPuckLossThresholdCpu 5 25 25 25
enableAggressivePursuit 0 1 1 1
aggressivePursuitIgnoresCarrierSpeed 0 0 1 1
aggressivePursuitMaxCarrierSpeedSqr 20 20 20 20
aggressivePursuitRecentPuckWindow 0.3 0.3 0.3 0.3
forecheckStalledCarrierDelay 0 3 2 1
enableDefenseBreakoutAggressiveChase 0 1 1 1
defenseBreakoutChaseMaxSpeedSqr 20 20 20 20
defenseBreakoutCloseChaseDistance 0 0 2 2
containmentStrength 1 1 1 1
enableFinishHitCommitment 0 0 0 1
bodycheckAimDotThreshold 0.866 0.866 0.866 0.866
bodycheckForecastWindow 0.12 0.12 0.12 0.12
finishHitLockDuration 0.5 0.5 0.5 0.5
bodycheckContactMargin 0.12 0.12 0.12 0.12
bodycheckEarlyDistanceBuffer 0.2 0.2 0.2 0.2
bodycheckFailureMargin 1 1 1 1
bodycheckCanMiss 1 1 0 0
bodycheckPuckCarryGraceTime 0.4 1 0.5 0.05
allowHumanTeamAutoBodycheck 1 0 0 0
bodycheckMinSpeedSqr 4 4 4 4
pursuitHitFailureThreshold 1 1 0.6 0.6
pressureHitFailureThreshold 0.5 0.5 1 1
defenseBreakoutHitFailureThreshold 1 1 0.6 0.6
ballChaserHitFailureThreshold 1 1 0.6 0.6
enableIncomingPassReceiverTargeting 0 0 0 1
incomingPassReceiverMaxGoalieDistance 10 10 10 10
humanGoalieSaveChanceBonus 12 8 6 3
cpuGoalieSaveChanceBonus -10 6 9 12
cpuGoalieOneTimerSaveBonus 0 0 0 5
goalPacingHumanSaveThreshold 6 6 6 6
goalPacingHumanPenaltyPerSave 3 3 3 3
goalPacingHumanMaxPenalty 20 20 20 20
goalPacingCpuSaveThreshold 4 4 5 5
goalPacingCpuPenaltyPerSave 4 4 4 4
goalPacingCpuMaxPenalty 25 25 25 25
goaliePokecheckDistanceMin 0.5 0.5 0.5 0.5
goaliePokecheckDistanceMax 1.75 1.75 1.75 1.75
goaliePokecheckDistanceMultiplier 0.5 1 1 1
goaliePokecheckForceMin 0.4 0.4 0.4 0.4
goaliePokecheckForceMax 0.7 0.7 0.7 0.7
goaliePokecheckForceMultiplier 0.5 1 1 1
enableGoalieQuickPassRead 0 0 0 1
goalieQuickPassReactionDelay 0.1 0.1 0.1 0.1
goalieDefaultPassReactionDelay 0.25 0.25 0.25 0.25
goalieQuickPassGlideEntryDelay 0 0 0 0
goalieDefaultPassGlideEntryDelay 0.1 0.1 0.1 0.1
goaliePassInterceptChance 0.1 0.45 0.25 0.65
cultistIncantationIntervalMin 5 5 4 4
cultistIncantationIntervalMax 8 8 7 7
knightChargeThreatRadius 6 8 10 15
knightChargeLeashRadius 9 11 13 18
knightChargeCheckCooldown 4 3 0.5 0.5
knightChargeMaxHunters 1 2 3 4
OddsOfMissingOpenNet 0.5 0.35 0.3 0.2
OddsOfMissingOpenNetPlayer 0 0.1 0.3 0.2
pokecheckConsecutiveFrames 8 6 3 1

Source: Data.DifficultyLevel assets training, pro, veteran, nightmare (resources.assets), DifficultyManager (m_AllDifficulties, m_DefaultDifficulty = pro, static getters).


4. Unlocks#

Unlocks.UnlocksRepository lists 72 unlockable rewards: 24 relics, 2 boss relics, 10 talents, 1 chaos talent, 2 goalie talents, 8 abilities, 19 free agents and 6 benchwarmers. Each unlock asset has:

  • a reward (the PowerUp or ForwardData it unlocks),
  • an unlockRequirement (the {0} in its text), plus extra fields for a few unlocks (statThreshold, deficitThreshold, requiredCount, cultistsTeamData),
  • a timing (UnlockTiming) that says when the check runs,
  • an achievement key.

Unlocked free agents join the General Manager's free-agent pool ("Unlock to add to GM's Free Agent pool"). Unlocked relics, talents and abilities join the campaign reward pools. Nothing is unlocked on Training (difficulty description).

UnlockTiming values: EndOfMatch = 0, EndOfAct = 1, EndOfRunWon = 2, EndOfAnyRun = 3, Immediate = 4, WorldMap = 5, SquadUnlock = 6.

The condition text below is the English localization (unlocks/<key>) with the data values filled in. The internal unlock-asset names often differ from the reward's display name; for example, SeeingRedUnlock unlocks Deviled Egg.

Source: Unlocks.UnlocksRepository, Unlocks.*Unlock assets (all in resources.assets), Unlocks.UnlockTiming, loc unlocks/*.

4.1 Relics#

Reward Unlock asset Condition (in-game text) Value Checked
Backdraft BackdraftUnlock Do 20 Slapshart or Shartslap requirement=20 Immediate
Bean Diet BeanDietUnlock Have 3 skaters with a fart power-up on the ice at the same time requirement=3 Immediate
Blowtorch BlowtorchUnlock Score a critical-shot goal while enraged requirement=1 Immediate
Can of Worms CanOfWormsUnlock Visit Training 30 times requirement=30 World map
Cripple CrippleUnlock Get over 100 knockouts in a game requirement=100 Immediate
D20 D20Unlock Trigger critical shots 8 times in the same game requirement=8 Immediate
Deviled Egg SeeingRedUnlock Injure an opponent while enraged requirement=1 Immediate
Fartillery FartKnockoutUnlock Fart while knocked down requirement=1 Immediate
Foiled FoiledUnlock Injure your opponent 5 times in the same game requirement=5 Immediate
Frogeree FrogereeUnlock Froggify a referee requirement=1 Immediate
Golden Goose GoldenHitsUnlock Have a Golden Helmet wearer with 200 checking requirement=200 Immediate
Grandma's Broth GrandmasBrothUnlock Heal 25 injuries requirement=25 Immediate
Hockey Bag FartImmunityUnlock Fart while immune requirement=1 Immediate
Jar of Tears JarOfTearsUnlock Lose 10 runs requirement=10 End of any run
Mush-a-roni MusharoniUnlock Have a skater with 100 shot power and 100 speed requirement=1, statThreshold=100 Immediate
Oven Mitts OvenMittsUnlock Register 40 shots in a game requirement=40 Immediate
Pain Points BloodBonusUnlock Score 5 goals with injured skaters in the same run requirement=5 Immediate
Royal Rest RoyalRestUnlock Play 10 games with a Golden Helmet wearer on the bench requirement=10 Immediate
Royal Treatment GoldenResilienceUnlock Get injured 5 times while wearing the Golden Helmet requirement=5 Immediate
Shrink Serum ShrinkSerumUnlock Win a run with at least 3 S or XS characters in your active lineup requirement=1, requiredCount=3 End of won run
Special Undies FartOvrUnlock Hear 20 farts in a single game requirement=20 Immediate
Sweet Spot SweetSpotUnlock Score 25 one-timer goals requirement=25 Immediate
Tribal Mask TribalMaskUnlock Recover from a 3 goal deficit and win the game requirement=1, deficitThreshold=3 End of match
Turbo Crutch TurboCrutchUnlock Have 3 players injured on the ice at the same time requirement=3 Immediate

4.2 Boss relics#

Reward Unlock asset Condition (in-game text) Value Checked
Briberee BribereeUnlock Knock out the referee 100 times requirement=100 Immediate
Relic Freezer RelicFreezerUnlock Win against the Cultists 10 times requirement=10, team=cultist End of match

4.3 Talents#

Reward Unlock asset Condition (in-game text) Value Checked
Extra Gravy ExtraGravyUnlock Have the same skater get 15 assists in a single run requirement=15 Immediate
Frozen Peas FrozenPeasUnlock Have a single skater receive 3 injuries in the same run requirement=3 Immediate
Hidden Ace HiddenAceUnlock Score a goal worth more than 1 goal 3 times requirement=3 Immediate
Pressure Cooker PressureCookerUnlock Win a run while your highest OVR skater has 0 goals requirement=1 End of won run
Sensitive Skin SensitiveSkinUnlock Become enraged 30 times in one game requirement=30 Immediate
Silent Hero SilentHeroUnlock Have a skater get 10 assists in a single run without scoring a goal requirement=10 Immediate
Slapshart SlapshartUnlock Use the Gas ability 50 times requirement=50 Immediate
Slapshot Slowmo SlapshotSlowmoUnlock Take a slapshot while your Slowmo ability is active requirement=1 Immediate
Twig Tax TwigTaxUnlock Break 50 sticks requirement=50 Immediate
Wild Shot WildShotUnlock Break 50 glass panes requirement=50 Immediate

4.4 Chaos talent#

Reward Unlock asset Condition (in-game text) Value Checked
Purgatory PurgatoryUnlock Have a skater score in 8 consecutive games requirement=8 Immediate

4.5 Goalie talents#

Reward Unlock asset Condition (in-game text) Value Checked
Goalie Headshot GoalieHeadshotUnlock Get knocked out by a Crusader goalie 10 times requirement=10 Immediate
The Fungus FungusUnlock Have 7 goalie assists in the same act requirement=7 Immediate

4.6 Abilities#

Reward Unlock asset Condition (in-game text) Value Checked
Dragon Shout DragonShoutUnlock Knock out every opposing skater on the ice at once requirement=1 Immediate
Exploding Puck ExplodingPuckUnlock Knock down 10 skaters with a shot requirement=10 Immediate
Prod ProbeUnlock Injure 10 skaters requirement=10 Immediate
Yo-Yo Shot (yoyoShot) YoyoShotUnlock Score 1 yoyo goal requirement=1 Immediate
Teleport DefenseTeleportUnlock Knock out 20 skaters on a breakaway with a bodycheck requirement=20 Immediate
Throwing Helmet ThrowingHelmetUnlock Knock 25 helmets off opponents requirement=25 Immediate
Totally Normal Puck FakePuckUnlock Win 1 brawl requirement=1 Immediate
Zap ZapUnlock Score 15 goals with Kelly Jelly requirement=15 Immediate

4.7 Free agents (General Manager pool)#

Reward Unlock asset Condition (in-game text) Value Checked
Bear Grohl BearGrohlUnlock Knock out Bear Grohl 5 times requirement=5 Immediate
Buck Wurst BuckWurstUnlock Hook 50 opponents with the grapple requirement=50 Immediate
Clarabelle Boogins ClarabelleBooginsUnlock Activate the Magnet ability 25 times requirement=25 Immediate
Clementine McShaggy ClementineMcShaggyUnlock Knock out 50 opponents with a thrown stick requirement=50 Immediate
Clive Chickensneeze CliveChickenSneezeUnlock Score 5 goals with a skater who has 0 shot power requirement=5 Immediate
Fortune Banks FortuneBanksUnlock Record 25 hat tricks requirement=25 Immediate
Gedeon Lamoustache GedeonLamoustacheUnlock Cause 20 puck losses with the kazoo requirement=20 Immediate
Jimothy Bowel JimothyBowelUnlock Use the Gas ability 100 times requirement=100 Immediate
Joan Ozark JoanOzarkUnlock Knock out 100 skaters from the Princess team requirement=100 End of match
Kent Levaylapuck KentLevaylapuckUnlock Yeet 25 skaters requirement=25 Immediate
Ma Foulton MaDaltonUnlock Hit 20 opponents with the wet towel requirement=20 End of match
Norman Norm NormanNormUnlock Have a skater with all attributes at 90 or above requirement=1, statThreshold=90 End of match
Ozzie Oioioi OzzieOioioiUnlock Make 1 or more opponent dance at once with Disco requirement=1 Immediate
Prince Tristan Arthur XIV PrinceTristanArthurUnlock Knock out Prince Tristan Arthur XIV 25 times requirement=25 End of match
Ryan Pepito JuanPepitoUnlock Injure 30 opponents requirement=30 Immediate
Sergei Lancelov SergeiLancelovUnlock Win 5 times against the Crusaders requirement=5 End of match
Walter Hoffman WalterHoffmanUnlock Score 25 breakaway goals requirement=25 Immediate
Wobbly McShatterface WobblyMcShatterfaceUnlock Break 10 glass panes requirement=10 Immediate
Zinedine Zidanejad ZinedineZidanejadUnlock Score 5 goals with a curve-ball shot requirement=5 End of match

4.8 Benchwarmers#

Reward Unlock asset Condition (in-game text) Value Checked
Buster Brewster BrewsterUnlock Win act 1 requirement=1 End of act
Johnny Faceless JohnnyUnlock Win a run with the General Manager squad requirement=1 End of won run
Mark Bench MarkBenchUnlock Unlock 3 squads requirement=3 On squad unlock
Ricky Kirby KirbyUnlock Lose 5 runs requirement=5 End of any run
Sally Poppins SallyUnlock Score 5 goals while enraged in a single run requirement=5 Immediate
Stu Stumple StumpleUnlock Get injured 10 times requirement=10 Immediate

Squad unlocks are covered in §1.4 and benchwarmer quests in §2.1. Starting squad relics have their own per-squad unlock hook (ProfileData.UnlockExtraRelicForSquad, SquadRelicData.UnlockCondition), but every squad relic in the current data is unlocked by default.


5. Game modes & rules#

5.1 Timer vs. Max-goal (GameRule)#

Value Rule Ends when UI text
0 Timer The clock runs out after 3 periods (State.EndConditions.TimerEnd; tie-breakers in TieBreakerType, FirstGoalInOvertime, NextGoal) "3 periods"
1 Maxgoal A team reaches MaxGoal.goalToScore (static) "FIRST TO {N} GOALS" / "First to {N}"

Each squad lists the rules it supports (§1.1), and the squad menu only offers those. Dominator and Speedrun are Max-goal only. Every other squad supports both.

A Mercy end condition (State.EndConditions.Mercy: mercyDiff, isElite, useGoalThreshold, goalToScore) can also end a game early. Its exact thresholds are set at runtime and were not traced.

Rule-specific content exists in the reward pools: RelicCategory.Timer (16384) and MaxGoal (32768), and TalentCategory.Timer (4096) and MaxGoal (8192). Examples are Buzzer Beater, the Electrolyte relics and Whistle of Time on the Timer side. These categories are presumably filtered by the active rule (inferred).

The separate GameMode enum (Normal = 0, Practice = 1, Shootout = 2) describes the match context, not the squad rule.

5.2 Dominator Squad: Lucky Puck queue (Rogue.Eliminator)#

The Dominator Squad (internal id eliminator) plays 4-on-4. Every goal is worth the value of the current Lucky Puck, and the upcoming pucks are shown in a 4-slot queue UI (EliminatorPuckQueueUI.SLOT_COUNT = 4). Glossary: "pucks rotate through different point values: high, low, even negative. The queue shows the values coming up."

Puck bag: the queue draws from a shuffled 20-puck bag (EliminatorPuckQueue.BagTemplate, read from the static array initializer in the metadata). A new shuffled bag is prepared in advance (_nextBag). ValidateBag requires that the first puck of a bag is not negative.

Puck type Value Count in bag Chance
Normal +1 8 40%
Bonus2 +2 4 20%
Bonus3 +3 2 10%
Negative1 -1 3 15%
Negative2 -2 2 10%
Negative3 -3 1 5%

Score adjustment (EliminatorGoalFlow::ApplyScoreAdjustment), on top of the normal +1 for the goal:

  • Positive puck of value v: the scorer's team's goals change by v - 1, so its total gain is v.
  • Negative puck of value v: the code adds v to the goal count of the scorer's team's otherTeam, clamped at 0.

Scores never go below 0. After each goal the queue advances (AdvanceQueue) and the puck visual and colour change. The game ends when a team reaches the Max-goal target (HasAnyTeamReachedGoalToScore), or on a Mercy condition (WillEndConditionEndGame).

Which team effectively loses goals in play depends on how the scoring skater and team are resolved for that event, which is not verified. Treat the exact meaning of negative pucks as (unverified).

Other Dominator details: it excludes Referee-category relics and the Briefcase. EliminatorAdBandDriver and EliminatorAdBandConfig drive the arena ad boards that display the puck info.

Source: Rogue.Eliminator.EliminatorPuckType, EliminatorPuckQueue (.cctor, GetGoalValue, ValidateBag), EliminatorGoalFlow (Awake only activates when IsPlayingSquad("eliminator"), ApplyScoreAdjustment, HasAnyTeamReachedGoalToScore).

5.3 Other squad-driven rules#

  • Speedrun: per its description, you must win before the end of the first period or lose the game. It starts with Indecisive and Remarkable Rock; the Coach event has special handling for it (CoachEvent.GetSpeedrunStarterRelics).
  • Gauntlet: "Face every team in a single run", using the Gauntlet map configs.
  • Referee: 6-on-5 through Whistle Blower, against RefereeCampaignOpponents.
  • Solo: player-locked to Angus.
  • Modern: offsides and manual pokechecks (the Linesman rule).
  • SNES: very low turning speed and no Dash.
  • Oldschool: no injuries and no bench, on the classic maps.

The exact in-match implementation of these rules sits in their squad relics and controllers, which are documented on the relic pages.