Brawls, Farts, Referees and Match Rules#
This page covers brawls and the penalty box, farts, and the match rules: offside, period length, overtime and shootouts, and the mercy rule. It also lists the game-restriction modifiers.
1. Brawls (fighting)#
From the glossary: "A team-wide fight: skaters pair off and brawl until one side has nobody left standing. The losing team sends a skater to the penalty box."
Brawl offers#
A brawl starts from an offer, handled by Fighting.BrawlChallengeSystem and BrawlChallengeTriggers.
| Constant | Value |
|---|---|
OfferWindowSeconds |
5 s to accept |
EventOfferDelaySeconds |
2 s after the triggering event |
FaceoffOfferDelaySeconds |
1 s |
MinPeriodSecondsLeftForOffer |
No offer if fewer than 20 s remain in the period |
InjuryOfferChance |
5% chance of an offer after an injury |
DeniedGoalOfferChance |
20% after a denied goal |
BreakawayShotMaxAge |
5 s |
| Kazoo offer delay | 1–2 s |
Bodychecks also notify the trigger system (NotifyBodycheckLanded).
Fighter HP and damage#
These come from AI.Brawl.FightScaling and the FighterConfig asset.
Max HP.
MaxHP = 65 (BaseHp) + sizeRankOffset × 10 (sizeFightHpPerRank)
The config also holds fightHpMultiplier 1.25, cpuTeamFightHpMultiplier 1.15 and soccerTeamFightHpMultiplier 0.5. These are applied on top (where exactly is inferred). The Fighter prefab's default HP field is 100.
Damage multiplier.
damageMult = Lerp(0.8, 1.2, Ramp01(Checking)) × (1 + 0.08 × sizeRankOffset)
Ramp01 maps Checking 50 → 0 and Checking 150 → 1, clamped.
AI "punish reliability" scales with Checking from ×0.6 to ×1.4 (checkingPunishReliabilityMultiplierLow/High). Each size rank also changes the AI's reaction delay by +10% and its block correctness by −8%.
Moves (Fighting.MoveConfig)#
| Move | Damage | Time to apex | Combo window after apex | Knockback | Hit cone / range |
|---|---|---|---|---|---|
| Jab | 5 | 0.20 s | 0.15 s | 0.75 | 120°, 4.5 |
| Uppercut | 25 | 0.27 s | 0.50 s | 2.5 | 120°, 4.5 |
Other combat values from FighterConfig:
- A partially blocked hit takes ×0.5 damage (
partialBlockDamageMultiplier). - Fight move speed is ×0.7 forward and ×0.5 backward.
- Fight skating speed is clamped to 7–10.
- Stagger diminishing returns during fights: 2.5 s window, ×0.65 per chained stagger, maximum 3 in a row, then 1.5 s immunity (see bodychecking).
Brawl finisher. The final blow knocks the loser out with 6 horizontal and 10 vertical launch velocity (+2 more vertical for the launcher), plus slow motion: ×0.35 for 2.2 s. An uppercut KO re-launches at 7 upward velocity.
AI exchange tuning.
| Setting | Value |
|---|---|
| Punch cooldown | 0.15–0.30 s |
| Flurry length | 3–6 punches |
| Uppercut ratio | 50% (up to 65% when the fighter is "bloodied") |
| Block correctness | 95% |
| Anticipation guess | 70% |
| Reaction delay | 0.2 s |
Abilities in brawls. They can fire from 5 s into the brawl, every 10 s, with a 40% chance each time, at ×0.2 cooldown.
Penalty box#
Skaters.PenaltyBoxSystem:
PenaltyDurationSeconds = 60. The losing team plays shorthanded for one minute.- From the glossary: "If the other team scores, the penalty ends early."
Source: Fighting.BrawlChallengeSystem, BrawlChallengeTriggers constants, AI.Brawl.FightScaling (MaxHp, DamageMultiplier, Ramp01, SizeFactor), FighterConfig and MoveConfig assets, PenaltyBoxSystem.
2. Farts#
From the glossary: "A stinky gas cloud that can propel your skater or push nearby opponents, sticks, and loose pucks away."
Every fart source goes through Rogue.Powerups.Components.FartEffectUtility.Execute. It returns a FartExecutionResult(HomeTeamAffected, VisitorTeamAffected), which records whether the cloud touched skaters from each team.
Push strength. Objects inside the range are pushed directly away from the cloud:
speed = Lerp(minSpeed, maxSpeed, 1 − distance/range) × ForceFactor
The push is spread over several physics frames.
| Target | Base range | Speed range | Spread frames |
|---|---|---|---|
| Skaters | 4.5 | 10–16 (bonus ×0.5 based on facing; capped at 1.3× the pushed speed) | 10 |
| Puck | 7 | 18–25 | 12 |
| Sticks on the ice | 7 | 10–15 | 12 |
Range is scaled by the source's MaxRangeFactor (inferred).
| Source | Parameters |
|---|---|
Gas ability (FartRepellent) |
5 s cooldown. lvl 1: ForceFactor 1.0, RangeFactor 1.0. lvl 2: 1.2 / 1.15, and can be held to charge for up to 3 s (ChargedForceBonus 1.3, ChargedRangeBonus 0.6) |
| Farting Puck relic | The puck farts every 9 s; ForceFactor 0.8 |
| Goalie Fart | The goalie automatically farts the puck away from the crease |
Fartillery (FartKnockout) |
Fart bursts knock out every skater in range |
Hockey Bag (FartImmunity) |
2 s of Immune for the farter and for teammates hit by the cloud |
Special Undies (FartOvr) |
+1 OVR per fart (+1 more when upgraded); resets each game |
Source: FartEffectUtility constants, PushForward, PushRigidbody, FartExecutionResult; catalog entries.
3. Referees#
See bodychecking §8 for how referees are checked and knocked out.
The Skaters.Referee AI dodges pucks travelling faster than 4 m/s inside a 2 m ray radius, with 2.5 m clearance. It also escorts penalized skaters to the box (StartPenaltyEscort, 15 s timeout).
4. Offside#
From the glossary: "An optional rule: no attacker may enter the offensive zone before the puck. The settings choose the punishment: whistle, lost puck, or knockout. Enforced by some squads and power-ups."
Setting (GameplaySettings) |
Values |
|---|---|
offside |
on / off |
offsidePenalty (Settings.OffsidePenalty) |
0 Whistle, 1 LosePuck, 2 Knockout |
When the Knockout punishment applies, the offside skater is KO'd for 2 s (OffsideController.knockoutDuration).
Squads and power-ups can force the rule on through OffsideController.AddForceSource. The AI steers to avoid going offside; OffsideLookahead 1.5 and OffsideSafetyMargin 1 come from ClampSteeringForOffside.
5. Period length, overtime and shootout#
Period length. The default TimerRuleStateData ("timerRule") is:
numOfPeriod3periodLength2.5 (minutes (unit inferred))hasOvertime0
Game modes override these values at runtime (inferred).
From the glossary:
- Overtime is played when the score is tied after the final period. It is sudden death: the next goal wins (
EndOfGameConditionType.FirstGoalInOvertime). - Shootout: "Alternating one-on-one attempts between a shooter and a goalie; the most goals after the rounds wins."
Overtime periods before a shootout (State.EndPeriodHandler):
| Mode | Rule |
|---|---|
| Quick Game, tiebreaker InfiniteOvertime | Unlimited overtime periods |
| Quick Game, tiebreaker OvertimeAndShootout | 1 overtime period, then a shootout |
| Quick Game, tiebreaker Shootout | 0 overtime periods; straight to the shootout |
| Rogue, regular match node | 1 overtime period |
| Rogue, Elite node | 2 overtime periods |
| Rogue, Boss node | 3 overtime periods |
The GameplaySettings.overtimeShootout toggle also exists.
End conditions (EndOfGameConditionType): Timer, NextGoal, Mercy, FirstGoalInOvertime, MaxGoal. The default data asset uses Timer only.
6. Mercy rule#
From the glossary: "Ends a lopsided game early: if a team leads by a large enough margin, the match is called immediately. The required lead is shown on the scoreboard."
State.EndConditions.Mercy.IsGameEndingCondition works as follows:
- It is checked after goal replays (
OnAfterReplay). - The game ends when goal lead ≥
mercyDiff. The scoreboard shows "Have a {N}-goal lead". - In MaxGoal mode (flag at
+0x25), the game ends instead when either team reaches the goal target (+0x28). - Mercy cannot end the game during overtime when FirstGoalInOvertime is active.
The actual mercyDiff value is set on the scene or match object. It was not found in the extracted assets.
Mercy wins feed Pitiless (+OVR per mercy win) and the "Blowout King" achievement (win an elite game by mercy).
7. Game restrictions#
State.GameRestriction lists match modifiers that turn mechanics off:
- NoActiveAbilities
- NoBatting
- NoBodycheck
- NoLobbedPasses
- NoSlapshot
- NoWristShot
The default gameRestrictionData asset has none of them. Squads and challenges supply them.