Difficulty

In short

Every map is played at Normal, Medium or Hard. Higher difficulties raise inning goals, pitch speed, special-ball odds and shop prices, and Hard takes one out away. In return they multiply meta points and XP. All of it lives in Data/Difficulty.cs (Difficulties).

How it works

  • The difficulty is picked on map select and fixed for the run (RunState.Difficulty).
  • Each change is applied where it matters:
    • Goals: RunState.InningGoal multiplies every goal by GoalMultiplier.
    • Pitch speed: RunManager.InningContext sets pitchSpeedScale = RunConfig.pitchSpeedScale x PitchSpeed.
    • Special balls: InningContext sets ballChanceScale = BallChance, which multiplies the park’s special-ball chance on each eligible pitch. See Special Balls.
    • Shop: RunState.PriceOf multiplies item prices and reroll costs by ShopPrice, rounding up.
    • Outs: RunManager.OutsPerInning = max(1, outsPerInning + OutsDelta), before Extra Outs.
    • Rewards: MetaProgression.AwardRun and Leveling.RunXp multiply by MetaPoints.
  • The map select screen prints Difficulties.Describe, for example Medium: “Inning goals x1.4, pitches +8%, special balls x1.5, shop +25%. Points x1.5.” Normal says “The map as it comes.”

Numbers

WhatNormalMediumHardWhere to tune
Inning goalsx1x1.4x1.9Difficulties.GoalMultiplier
Pitch speedx1x1.08x1.15Difficulties.PitchSpeed
Special-ball chancex1x1.5x2Difficulties.BallChance
Shop prices and rerollsx1x1.25x1.5Difficulties.ShopPrice
Outs per inning+0 (3)+0 (3)-1 (2)Difficulties.OutsDelta
Meta points and XPx1x1.5x2.5Difficulties.MetaPoints
ColourgreenorangeredDifficulties.Tint

Examples from the code and its test: first inning of the first map is 500 / 700 / 950; an item costing 8 is 10 on Medium (ceil(8 x 1.25)); the base pitch speed scale is RunConfig.pitchSpeedScale = 0.6, so Hard pitches at 0.6 x 1.15 = 0.69 of real speed.

In the code

FileWhat it does
Assets/_Project/Scripts/Data/Difficulty.csDifficulty enum and Difficulties: every multiplier, Label, Tint, Describe
Assets/_Project/Scripts/Run/RunManager.csOutsPerInning, InningContext (pitch speed, ball chance)
Assets/_Project/Scripts/Run/RunState.csInningGoal, PriceOf
Assets/_Project/Scripts/Progression/MetaProgression.csAwardRun points multiplier
Assets/_Project/Scripts/Progression/Leveling.csRunXp uses the same multiplier

Gotchas

  • The special-ball multiplier is capped at every eligible pitch (a chance can’t go past 100%).
  • Outs never go below 1, whatever the delta.
  • Extra Outs from upgrades or Pinto are added after the Hard penalty, so Pinto on Hard still has 4 outs.
  • The daily run is always Normal.
  • The map select carousel prints Difficulties.Describe for the picked difficulty under the NORMAL / MEDIUM / HARD buttons (Map Select and Unlocks).
  • XP uses the meta point multiplier too, so a Hard run levels you 2.5x faster for the same innings and home runs.