Tape to Tape Wiki All games ☕ Tip on Ko-fi

Map NPCs and Events#

Every non-match node on the campaign map is an event: you meet an NPC, look at some cards, and pick one (or skip, where that's allowed). This page lists every event node, what it offers and the numbers behind it.

Conventions: "skater" means a forward on your roster. Stats are the four base attributes Shot Power, Accuracy, Checking, Speed (Overall = their average, see the attributes page).

Node types#

STS.Map.NodeType Map name (tooltip) Tooltip text Event asset
0 Challenge / 1 Elite / 2 Boss (matches) — match nodes, see run-structure.md
3 Conditioning — legacy value; no blueprint uses it now —
12 PlayerTraining Skater Training "Train {skater} to boost their attributes" RegularPlayerTraining "SkaterTraining"
13 TeamTraining Team Training "Train to boost the attributes of your whole team" TeamTraining
14 StatTraining Stat Training "Train {stat} to boost this attribute on a skater or the whole team" StatsTraining
4 Chaos Chaos "Gain a power-up with a drawback" ChaosEvent3Choice "chaos3Choice"
5 Nurse Nurse "Heal your skaters or let the Butcher operate" NurseEvent
6 Blademaster Blademaster "Gain or upgrade activatable abilities" BlademasterEvent
7 FanNumber1 Fan Number 1 "A special upgrade for {skater}" FanNumber1Event "fanEvent"
8 GeneralManager General Manager "Recruit a free agent" GeneralManagerEvent
9 Coach Coach "Choose a strong relic" CoachEvent

All events have canSkip = 1 except Chaos (canSkip = 0, so you have to take one of the cards). Every event lets you edit your lineup (canEditLineup = 1).

Several events pick a skater, or a set of candidate skaters, with CampaignUtil.GetEventEligibleForwards(team, onlyActive, minimum = 3). It returns forwards that are not flagged Never Rewarded. When onlyActive is set it uses only the players in your active lineup, but it falls back to the rest of the roster to reach at least 3 candidates (inferred from the minimum parameter).

Source: STS.Map.NodeType, STS.Map.NodeBlueprintRepository and *Blueprint assets (tooltip terms v2ui/world_map/node/*), STS.Map.EventNode assets, Tape2Tape.CampaignUtil::GetEventEligibleForwards.


Training (Skater / Stat / Team)#

All three training events pick from 4 stats. Data.RandomBasicStats.GetRandomStats() rolls one stat uniformly (25% each). GetRandomStats(3) draws 3 distinct stats, re-rolling duplicates.

Event Fixed on the map node Cards offered Reward
Skater Training one skater: a random eligible active forward, whose face shows on the node 3 cards, one per stat (3 distinct random stats) chosen stat +15 on that skater
Stat Training one stat (25% each), whose icon shows on the node 3 cards, one per skater: 3 random eligible active skaters (GetRandomElements(…,3)) that stat +15 on the chosen skater
Team Training nothing 3 cards, one per stat (3 distinct random stats) chosen stat +10 on every forward (TeamData.GetForwards, bench included; m_SelectOnlyActivePlayers = 0)

Asset values: SkaterTraining.statsBonus = 15, StatsTraining.statsBonus = 15, TeamTraining.statsBonusForward = 10.

Modifiers#

Source Effect
Can of Worms relic (Rogue.VanillaTraining, trainingMultiplier 0.5, trainingMultiplierUpgrade 0.5) bonus × (1 + 0.5) = ×1.5 at level 1; × (1 + 0.5 + 0.5) = ×2.0 at level 2. The result is rounded to an integer (15 → 23 / 30, 10 → 15 / 20). Each training visit also adds 1 to the relic's _trainingCount.
Quantum Sextant relic a training that would raise Speed raises Shot Power instead (GetTrainedStat)
Stat locks (ForwardData.TryGetStatLock) the card preview accounts for locked stats
Gauntlet mode displayed bonuses pass through GauntletStackBonusScaler.ScaleBonus

Formula (verified): bonus = RoundToInt(baseBonus × m), where m = 1 without the relic, 1 + trainingMultiplier at level 1 and 1 + trainingMultiplier + trainingMultiplierUpgrade at level 2.

Source: Rogue.NPC.ConditioningNPC.{RegularPlayerTraining,StatsTraining,TeamTraining}::Initialize, TrainingEvent::GetModifiedStatBonus / GetTrainedStat / MarkVisited, STS.NodeRewards.TrainingReward::GenerateReward, Data.RandomBasicStats::GetRandomStats.


Coach#

"Pick a Relic and let's get to work." The Coach offers 3 relics and you take 1. The CoachChoiceCount = 3 constant comes from IRelicRepository.GetRandomRelics(category, excluded, numberOfRelics: 3).

Coach node Relic pool (RelicCategory)
Starter node: the run's first node (runData.currentFloor == 0) Starter (0x1000000), 28 relics
Any other Coach node, e.g. act starts BossRelics (0x1000), 33 relics

Relics you already own are excluded. Two squads replace the pool:

  • Speedrun squad: a fixed set of starter relics at the starter node, and one not-yet-picked speedrun relic per act at later nodes (GetSpeedrunStarterRelics, GetSpeedrunActRelics).
  • Stat Rewards squad: stat-reward relics only (GetStatRewardRelics), weighted by Relic.GetRewardWeight.

Coach Coupon relic (Rogue.DoubleCoaching, "Gain a second pick when visiting the Coach"): NextChoices re-rolls a second set of 3 while fewer than 2 picks have been made, so you get 2 picks in total.

Level-1 relics in each pool:

  • Starter (28): Bench Charger, Blue Cone, Briefcase, Bubble Wrap, Can of Worms, Carrot on a Stick, Convenient Bag, D20, Deca-Egg, Deviled Egg, Double Yolk, Fragile, Frogeree, Gigantism, Golden Goose, Golden Wheats, Good Luck Puck, Jar of Tears, Macrocephalia, Nut Job, Pucky Charms, Rage Switch, Royal Treatment, Short Fuse, Shrimp Squad, Shrink Serum, Special D, Sweet Spot.
  • Boss (33): Benchwarmer Boost, Briberee, Buzzer Beater, Coach's Grunt, Comfy Cushion, Deca-Egg, Dentist Appointment, Double-Decker, Dry Noodle, Extra Reward, Fartillery, Gigantism, Ginger Fury, Holy Fungus, Last Minute, Lumberjack, Macrocephalia, Odd Fungus, Organ Donor, Pain Points, Quantum Sextant, Rage Burger, Random Abilities, Relic Freezer, Remarkable Rock, Spare Bucket, Spiked Armor Relic, The Improverizer, The Original Puck, The Squeezer, Wet Noodle, Whistle Blower.

Source: Rogue.NPC.CoachNPC.CoachEvent::Initialize / get_IsStarterNode / NextChoices, Rogue.Relics.Repository.RelicCategory, RelicRepository data.


Blademaster#

"I'll teach a skater a new ability... or upgrade something they already know." The map node decides in advance which of two modes the visit uses (BlademasterNodeReward, reward id "ability:<id>" or "upgrade").

Which mode the node rolls#

Let E be the skaters with no ability (SkaterData.ability == null), and U the number of upgradeable power-ups on eligible skaters (UpgradeHelper.GetUpgradeablePowerups):

Condition (checked in order) Mode
Playing the Tchel squad always Upgrade
E is empty Upgrade
U = 0 New Ability
Act 1 (runData._currentAct ≤ 1) New Ability
Otherwise 50% New Ability, 50% Upgrade (Random.Range(0,1) ≤ 0.5)

In New Ability mode, the ability itself is rolled when the node is generated: one random ability from the UsedInCampaignPool category (IAbilityRepository, category 0x100). It shows on the map node.

What the visit offers#

Mode Cards
New Ability Up to 3 skaters from E, in random order (ordered by a random GUID, then Take(3)). Each card reads "New: {Ability} for {Skater}"; pick one to equip the ability on that skater.
Upgrade All upgradeable abilities, talents and relics on eligible skaters, shuffled, 3 shown (Shuffle + Take(3)). Picking one upgrades it to its Level 2 version. If fewer than 3 upgrades exist, the remaining slots get new-ability offers for random skaters without an ability (OldBlademasterEvent).

Source: Rogue.NPC.BlademasterNPC.BlademasterEvent::{ShouldOfferNewAbility, GetPlayersEligibleForNewAbility, InitializeLockedAbilityChoices, InitializeUpgradeChoices, OldBlademasterEvent}, STS.NodeRewards.BlademasterNodeReward::GenerateReward.


Fan Number 1#

"I'm your skater's Number 1 Fan!" The node is tied to one skater (FanNodeReward): a random eligible forward, never one flagged Never Rewarded. The fan gives that skater a gift.

Standard visit: 3 of 4 gift types#

PrototypeRewardPoolSubEvent builds up to 4 candidate cards, shuffles them (Rand.Shuffled) and shows 3 (PrototypeChoiceCount = 3). A candidate that can't apply, such as a size change at the size limit, is dropped.

Card Effect
Grow / Shrink one size step up or down. If both are possible, it's 50/50 (Random.Range(0,2)); otherwise it's whichever is possible.
Random talent a random talent from the UsedInCampaignPool category (0x100) for this skater
Attribute Boost one random stat (25% each): +10 (20%), +15 (60%) or +20 (20%)
Ability if the skater already has an ability, an upgrade of it; otherwise a new random ability. The Tchel squad has special handling.

Attribute Boost roll (verified): r = Random.Range(0,1); r ≤ 0.2 → +10; r ≤ 0.8 → +15; otherwise +20.

Stat Rewards squad#

Playing the Stat Rewards squad replaces the visit with StatRewardFanTalentsSubEvent: 3 "stat reward" talents. The class also contains older sub-event types (AllStats, PowerupsOnly, PowerupsStats, MixedBag, AbilityOnly, GoalieTalents) chosen by weight. They appear to be legacy code that the current Initialize doesn't use (inferred).

Source: Rogue.NPC.FanNumber1NPC.FanNumber1Event::Initialize / SelectSkater, Events.PrototypeRewardPoolSubEvent::*, Events.FanNumber1SubEvent::GenerateStats (<>c__DisplayClass9_0::<GenerateStats>b__0).


Chaos#

"Free curses! You'll love what they do. You might hate what they also do..." The Chaos node is tied to one skater (ChaosNodeReward, random eligible forward). It offers 2 random Chaos-category talents (TalentCategory.Chaos 0x4000, m_NumChoices = 2) for that skater. Every card is a power-up with a built-in drawback, for example Anchor, Bedrock, Bee Sting, Critical Chaos, Cursed Noodle, Even Steven, Fire Cracker, Glass Cannon, Heavy Puck, Krill, Liquidation, Live Wire, Monkey's Paw, Paper Jet, Porcelain Hammer, Railgun, Rocket Skates, Shell Fish, Short Contract, Split Personality, Tail Wind, Top Gear and Unstable Chaos (the chaosTalents list). You can't skip it (canSkip = 0). Each talent is described on the talents page.

Source: Rogue.NPC.ChaosEvents.ChaosEvent3Choice::Initialize / SelectForward, TalentRepository.chaosTalents.


Nurse and Butcher#

"Welcome to the Infirmary. I can patch up every injury on your team. Or cause a fresh one..." The Nurse node always shows two offers: a Nurse card (healing) and a Butcher card (one surgical procedure with a cost).

How the offers are drawn#

Side Candidates (weight) How one is chosen
Nurse Full Recovery (1.0), Kinesiotherapy (1.0) Weighted random among the valid ones. If neither is valid (for example, nobody is injured), the card is Full Recovery shown as not interactable ("No injured skaters").
Butcher every other procedure (weights below), except InjuryForAttribute, which is disabled First the teaching order: the first procedure in the order below that has never been offered on this profile and is valid right now. Once every procedure has been offered, weighted random among the valid ones. If none is valid: "No procedure available today."

Teaching order (ButcherTeachingOrder, read from the static array data): Implant → Experimental Surgery → Transplant → Reconstruction → Transfusion → Organ Harvest → Cloning. "Offered" flags are saved to the profile, so they persist across runs (MarkOfferedAndSave → ProfileData.Save).

Procedures#

Procedure (UI name) Side Draw weight Effect Cost / restrictions
Full Recovery (HealAll) Nurse 1.0 Heals every injured skater (InjurySystem.HealAllInjuries). Needs at least one injured skater.
Kinesiotherapy (FrozenPeas) Nurse 1.0 Heals one player and makes them immune to new injuries ("{0} is healed and protected from new injuries"). Can't target a player who is already immune.
Implant (InjuryForTalent) Butcher 1.0 Pick a skater and accept a disclosed Butchery talent for them. That skater gets a random-body-part injury lasting 1 game (55%) or 2 games (45%). Target must be injurable and not already injured.
Experimental Surgery (ReplaceTalent) Butcher 1.0 Removes one talent and replaces it with 2 random Butchery talents (SurgeryTalentCount = 2). The removed talent is lost. Needs a replaceable talent and eligible Butchery talents.
Transplant (Transplant) Butcher 1.0 Moves one talent from a donor to a recipient. The donor loses it. Some talents are locked or non-movable. A recipient that already has the talent is not eligible.
Reconstruction (ExchangeAttributes) Butcher 1.0 Swaps the values of two attributes on one player. Not allowed if the values are equal or if the result exceeds an attribute cap.
Transfusion (SwapAttribute) Butcher 1.0 Swaps one attribute's value between two players. Not allowed for the same value or if the result exceeds an attribute cap.
Organ Harvest (Sacrifice) Butcher 0.35 Sacrifices a player: their attributes are split evenly among teammates, their talents go to random teammates, and their ability goes to a teammate with a free ability slot. The player leaves the team (removed from the run). Talents with no eligible teammate are lost ("Lost {talent}: No eligible teammate"), and so is the ability if no slot is free. Can't be used on the last player on the ice or on a player the squad requires.
Cloning (Cloning) Butcher 1.0 Creates an exact mini-clone of a player ("Who gets a tiny twin?"), with the same power-ups (CloneSkaterPowerups) and a renamed identity (see table below). The source is injured in every body part (Eye, Shoulder, Arm, Leg) for 3 games (CloneInjuryGames = 3). Needs room on the bench.
InjuryForAttribute — (1.0) Disabled: never drawn (IsDrawnOnSide excludes it). The code would trade an injury for Speed (InjuryForAttributeSpeed = 5). —

Attribute caps checked by Reconstruction and Transfusion (NurseProcedureState.AttributeCaps):

Overall Shot Power Accuracy Speed Checking
none 200 100 250 500

Butchery talent pool (TalentRepository.butcheryTalents, category 0x200), used by Implant and Experimental Surgery: Curve Ball, Slapshot Immunity (Deadzone), Pass Puncher, Point Sniper, Power Transfer, Slapshart, Sonic Slap, The Howitzer, Trickshot, Wild Shot, X-Ray Shot. Level 1 and Level 2 versions of these are in the list.

Banked talents: when a stacking stat talent is moved or replaced, its accumulated stat bonus is banked onto the skater it came from (inferred from BankTalentBonus). This applies to Momentum, Twig Tax, Try Hard, Cannon Arm, Game Winner Bonus, Target Practice, Growing Anger, Hat Trick, Silent Hero, Inflated Ego, Goal Based Stat Change, Assisted By Playmaker, Assist Count Goal OVR, Krill, Liquidation and Stat Stuffer.

Clone name table#

A clone of a known skater gets a fixed parody name (NurseCloneNameTable). Any other skater's clone gets the first name "Clone" (FallbackFirstName).

Source Clone Source Clone
Cam Amber Mac Camber Gawain Guretski Gawain Garetskey
Prince Tristan Arthur XIV Prince Tristan Arthur XV Walter Hoffman Walter Duffman
Fortune Banks Poorer Blanks Kelly Jelly Smelly Jelley
Mark Bench Marc Bunch Ricky Kirby Pricky Kirbo
Brad Bird Bradley Birdey Freddy Kovalski Fredo Kovalskiev
Clarabelle Boogins Clara Boogers Gedeon Lamoustache Gedeon Lemoustache
Jimothy Bowel Timothy Towel Sergei Lancelov Serge Lancoliev
Buster Brewster Baxter Broster Kent Levaylapuck Cant Liftthepuck
Willie Brie Willy Bro Clementine McShaggy Orange McShugger
Barry Butthead Barry Butterhead Rory McShaggy Brory McShugger
Gary Buttman Gary Butterman Wobbly McShatterface Bobby Shatternose
Maurice Cassoulet Gilles Patopoulet Norman Norm Normal Normie
Clive Chickensneeze Steve Chickensnooze Ozzie Oioioi Ozzie Aiaiai
Chloe Crockett Zoe Croquette Joan Ozark Juan OftheArk
Calvin Dord Kelvin Durd Ryan Pepito Bryan Pepiti
Boring Dude Exciting Dudelino Sally Poppins Salty Muffins
Johnny Faceless Johnny Faces Stu Stumple Stew Simple
Nigel Flincher Nigel Falincher Buck Wurst Worst Buck
Averell Foulton Averell Moulton Zinedine Zidanejad Zanedine Zanedijad
Ma Foulton Ma Moulton Bear Grohl Beer Grill

Source: Rogue.NPC.NurseNPC.NurseEvent, Procedures.NurseProcedures::{Draw, Commit, HealAll, InjureForTalent, InjureForClone, CreateClone, SetCloneIdentity, MoveTalent, ReplaceTalent, Sacrifice, RemoveFromRun, BankTalentBonus}, Procedures.NurseProcedureState::{.cctor (Definitions/weights, ButcherTeachingOrder, AttributeCaps), DrawWeighted, IsDrawnOnSide}, NurseProcedureRoster::{DrawButcheryTalent, SurgeryTalentCount}, Skaters.Injuries.InjurySystem::GetRandomizedHealingTimeInEvent, NurseCloneNameTable asset, loc v2ui/event_choice/nurse/*.


General Manager#

"I always know a Free Agent or two looking for ice time." The GM signs a free agent to your roster.

Offers#

  • Each offer round shows 2 free agents (GetRandomElements(pool, 2)); you sign one.
  • Number of rounds per visit = NumTimesToOfferChoices, set from the map layer's gmSelectionCount. In the General Manager squad's maps that is 6 at the act 1 start node and 2 at the act 2 and 3 start nodes. Everywhere else it is 1.
  • The GM offers nothing if the roster is full, meaning playing forwards ≥ the active maximum and no bench room. A signed player joins the active line if there is room, otherwise the bench.

Pool and filters#

The pool is CampaignState.freeAgents (30 skaters, below). A squad's m_CustomSwapPool replaces it when that list is non-empty. A candidate is skipped if any of these apply:

  • it is "Gawain" (Mini Gawain) and you are not in act 1;
  • its name was already offered or is already on your roster (_previouslyOfferedNames, inferred);
  • it is not unlocked (UnlockSystem.IsUnlocked; not checked when a custom squad pool is used);
  • the squad excludes it (IsForwardExcludedBySquad).

Free agent stats are rescaled#

ForwardData.AdjustPlayerStatsToMatchTeam rewrites every stat (verified):

stat = RoundToInt(baseStat × A / D) + RandomInt(−5 … +5), clamped to 0–300.

Squad A (target level) D (divisor) Contract Bonus random talents (campaign pool)
Normal squads average Overall of your current forwards (inferred: average of each forward's previewed stat) 50; 15% chance of Random.Range(35,45) instead, which makes a stronger agent none 1st talent 30%, 2nd talent 5%
General Manager squad 35 in act 1, 55 in act 2, 70 in act 3+ depends on contract length (below) 2–6 game contract (MaxGamesCondition) depends on contract length (below)

General Manager squad contracts: the length is drawn from [2,3,3,4,4,4,4,5,5,6]. Shorter contracts give stronger stats and more bonus talents.

Contract Chance D Stat multiplier A/D (act 1 / 2 / 3) P(1st bonus talent) P(2nd bonus talent)
2 games 10% 35 1.00 / 1.57 / 2.00 70% 25%
3 games 20% 43 0.81 / 1.28 / 1.63 50% 15%
4 games 40% 50 0.70 / 1.10 / 1.40 30% 5%
5 games 20% 65 0.54 / 0.85 / 1.08 15% 2%
6 games 10% 75 0.47 / 0.73 / 0.93 10% 1%

Other rules:

  • Bonus talents come from ITalentRepository category UsedInCampaignPool (0x100). The two rolls are independent: n = [r1 ≤ p1] + [r2 ≤ p2].
  • Talents the squad excludes are replaced by random campaign-pool talents.
  • On the Tchel squad, each free agent is also given a random ability.

Free agent pool (base data)#

Stats are the asset values before rescaling. "Avg" is the plain mean of the four stats.

Free agent Shot Pwr Acc Chk Spd Avg Size step Talents / ability
Brad Bird 75 82 76 67 75.0 2 Trenchcoat
Clarabelle Boogins 71 71 33 37 53.0 2 Propeller Helmet; ability Magnet
Clive Chickensneeze 0 100 21 122 60.8 2 —
Jimothy Bowel 25 25 50 100 50.0 2 Diarrhea
Ryan Pepito 69 70 0 62 50.2 1 One Strike
Kent Levaylapuck 83 83 39 43 62.0 2 Flat Puck; ability Yeet
Gawain Guretski (Mini Gawain, act 1 only) 60 60 6 80 51.5 0 Iron Helmet, Evolution
Nigel Flincher 130 50 25 25 57.5 2 Spasms
Bear Grohl 90 60 90 15 63.8 5 Bonecrusher
Willie Brie 41 52 40 36 42.2 3 Rebound Magnet, Mega Deflect
Sergei Lancelov 47 20 102 20 47.2 4 Iron Helmet
Rory McShaggy 51 47 55 47 50.0 3 X-Ray Shot; ability Tomahawk
Ozzie Oioioi 48 41 10 71 42.5 3 ability Disco Dance
Kelly Jelly 3 80 2 144 57.2 1 Puckless Rocket; ability Spin-O-Rama
Joan Ozark 44 54 53 58 52.2 2 Sonic Slap; ability Gas
Gedeon Lamoustache 54 40 55 30 44.8 2 No Goal; ability Kazoo
Clementine McShaggy 66 24 57 34 45.2 2 Triple Twig; ability Tomahawk
Chloe Crockett 38 49 34 66 46.8 2 Defensive Deflect, Flawless Feeder
Cam Amber 53 50 43 56 50.5 2 Bouncy McBounce
Calvin Dord 54 91 21 34 50.0 3 ability Yo-Yo
Buck Wurst 34 75 81 37 56.8 3 ability Grappling Hook
Zinedine Zidanejad 27 58 19 76 45.0 2 No Stick, Dribbler, Curve Ball; ability Headshot Redirect
Prince Tristan Arthur XIV 100 67 6 36 52.2 1 Charge Shot, X-Ray Shot
Gary Buttman 0 0 0 0 0.0 2 Butt Bench
Walter Hoffman 63 71 33 30 49.2 2 Cherry Picker
Norman Norm 50 50 50 50 50.0 2 Balanced Talent
Wobbly McShatterface 103 0 55 8 41.5 3 Golden Throne; ability Prod
Ma Foulton 50 20 25 85 45.0 1 ability Wet Towel
Averell Foulton 60 20 80 25 46.2 3 Ball and Chain
Fortune Banks 75 86 44 136 85.2 2 Performance Bonus

Source: Rogue.NPC.GeneralManagerNPC.GeneralManagerEvent::{NextChoices, CreatePlayerChoice}, Data.ForwardData::AdjustPlayerStatsToMatchTeam, <PrivateImplementationDetails> int array (contract lengths), State.CampaignState.freeAgents, STS.Map.MapLayerNodeType.gmSelectionCount.


Team Canada curses ("Canadian Tariff")#

Team Canada (team id 8652786b-…) is an elite opponent. Before the match, and again for the second period, it makes you take a curse:

  • Pick 1: "You want to play Team Canada? There is a tariff to pay."
  • Pick 2: "Still here? Then you pay again."

Each pick shows 3 random offerable curses (GetRandomElements(GetOfferable(team), 3)); you choose 1. The second pick draws from curses not offered in the first. If the menu closes without a choice, the first option is applied. Curses are relics implementing ICurse and last for that match.

Curse Key Effect Offered when
Tiny Team xs_team Your whole team becomes size XS (ISkaterSizeModifier). always
Angus Goes Cold angus_zero Angus plays with 0 OVR (Overall modifier forced to 0, applied last). only for an Angus squad ("allangus", inferred)
Deep Freeze freeze_two 2 of your relics are frozen (RelicsToFreeze = 2). you own a freezable relic (HasFreezableRelic)
Frog Duty frog_two 2 skaters on your team are frogged for 3600 s, i.e. the whole match (FrogCount = 2). always
Rusty Squad ovr_minus20 Your team gets −20 OVR. always
Heavy Legs speed_minus40 Your team gets −40 Speed. always
Glass Bones fragile_team Every skater on your team gains Fragile: 10% chance of an injury each time they are knocked flat. It is removed at game end, but the injuries remain. not on the Old School squad (inferred)
Canadian Insurance canada_briefcase Team Canada gains the Briefcase relic (reverts a goal). not on the Eliminator squad (inferred)
Bonecrusher Nation canada_bonecrusher Every Team Canada skater gains Bonecrusher (knocked-out skaters are thrown further and lose their stick). always

The pairing of each restriction with its curse was read from the order of the catalog's static constructor. The "allangus", "oldschool" and "eliminator" string tests are verified; which curse each one belongs to is inferred.

Source: CanadaCursePicker::{Run, RunSecondPick, RunPick, IsCanadaMatch}, Rogue.CanadaCurses.CanadaCurseCatalog::.cctor / GetOfferable, Rogue.CanadaCurses.* and *Controller classes (constants Bonus = -20, Penalty = -40, FrogCount = 2, FrogDuration = 3600, RelicsToFreeze = 2), loc relics/canada_curse_*.