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.InningGoalmultiplies every goal byGoalMultiplier. - Pitch speed:
RunManager.InningContextsetspitchSpeedScale = RunConfig.pitchSpeedScale x PitchSpeed. - Special balls:
InningContextsetsballChanceScale = BallChance, which multiplies the park’s special-ball chance on each eligible pitch. See Special Balls. - Shop:
RunState.PriceOfmultiplies item prices and reroll costs byShopPrice, rounding up. - Outs:
RunManager.OutsPerInning = max(1, outsPerInning + OutsDelta), before Extra Outs. - Rewards:
MetaProgression.AwardRunandLeveling.RunXpmultiply byMetaPoints.
- Goals:
- 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
| What | Normal | Medium | Hard | Where to tune |
|---|---|---|---|---|
| Inning goals | x1 | x1.4 | x1.9 | Difficulties.GoalMultiplier |
| Pitch speed | x1 | x1.08 | x1.15 | Difficulties.PitchSpeed |
| Special-ball chance | x1 | x1.5 | x2 | Difficulties.BallChance |
| Shop prices and rerolls | x1 | x1.25 | x1.5 | Difficulties.ShopPrice |
| Outs per inning | +0 (3) | +0 (3) | -1 (2) | Difficulties.OutsDelta |
| Meta points and XP | x1 | x1.5 | x2.5 | Difficulties.MetaPoints |
| Colour | green | orange | red | Difficulties.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
| File | What it does |
|---|---|
Assets/_Project/Scripts/Data/Difficulty.cs | Difficulty enum and Difficulties: every multiplier, Label, Tint, Describe |
Assets/_Project/Scripts/Run/RunManager.cs | OutsPerInning, InningContext (pitch speed, ball chance) |
Assets/_Project/Scripts/Run/RunState.cs | InningGoal, PriceOf |
Assets/_Project/Scripts/Progression/MetaProgression.cs | AwardRun points multiplier |
Assets/_Project/Scripts/Progression/Leveling.cs | RunXp 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.Describefor 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.
Related
- Map Select and Unlocks: how each difficulty opens
- Run Structure: the goal formula
- Shop and Economy: prices and rerolls
- Meta Progression: meta points per run
- XP and Levels: XP per run
- Pitching: what the pitch speed scale feeds