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 hasIsUnlockedByDefault = 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 categoryInjury(65536) and talent categoryInjury(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_IsDisabledreturns true whenCampaignUtil.IsPlayingSquad("lines"). - All Angus:
m_CustomSwapPoolreplaces 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
RefereeCampaignOpponentsinstead ofDefaultCampaignOpponents. 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 categoryReferee(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_SkaterMarkerPrefabtooltip). - 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:
eliteRewardRelicCategoryis2048for All Angus, Defense, Dominator, Gauntlet, SNES, Speedrun, Stats, Modern and Violence, and0for the rest. 2048 is not a namedRelicCategorymember, so its effect is unknown.
1.4 Squad unlock conditions#
IsUnlocked returns true when:
- the debug unlock-all flag (
Unlocks.UnlockSystemstatic) is set, or - the squad id is in
ProfileData.unlockedSquads, or - 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_IsDifficultyTooLowreturnscurrentRunDifficulty < 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 (
GetDesiredHolderCountreturns1 + 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:
falseif tierddoes not exist;trueif the unlock-all flag is set, or ifd < 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.
...Playervalues apply to the team with human players and...CPUto the other team (verified inDifficultyManager::GetDeltaSpeed, which checks the team's player count).DeltaAccuracy/Speed/Checkingare 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 isv. - Negative puck of value v: the code adds
vto the goal count of the scorer's team'sotherTeam, 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.
Comments