Pitch Types

In short

Six pitches: Fastball, Sinker, Changeup, Curveball, Slider, Knuckleball. Each has a base speed, how far it breaks by the plate, how much it loops on the way (arc) and how hard it comes off the bat in each contact zone (hitPower*). Break is in metres, seen from the catcher, for a right-handed pitcher: -x is arm side (toward a right-handed batter), +x is glove side; negative vertical break is drop.

How it works

  • Pitchers list pitch types with weights (see Pitchers and Bosses). The Batting Cage machine can throw all of them or drill one (Tab cycles MIXED, then each type in this list’s order).
  • A pitch’s speed is speedMph x pitcher speedMultiplier x random 0.97..1.03, then x1.15 if it is a Super Fast ball.
  • The flight time is release distance / speed / speedScale, where speedScale = RunConfig.pitchSpeedScale (0.6) x the difficulty's pitch speed (x1, x1.08, x1.15). So the shown mph is the “real” speed while the ball travels slower than real time. See Pitching and Run Config.
  • wobble is a side-to-side flutter amplitude; each pitch rolls wobble x random -1..1.
  • Arc (#41): every pitch bows in one smooth loop over the flight, arc x 4t(1-t) metres (zero at the hand and at the plate, biggest midway), so it still ends where it was aimed. With arcSideways (curveball, changeup) the loop’s direction is picked per pitch anywhere from left (-90°) through up (0°) to right (+90°) (PitchData.arcAngle, own seeded stream 0xA2C); otherwise it always bows up. An Anti-Gravity ball’s loop flips: it sags first.
  • Hit power (#46): exit velocity is multiplied by the pitch’s hitPowerPerfect, hitPowerNice or hitPowerSour depending on where the ball met the bat (HitTables.PitchFactor). See Batting Explained.
  • spinRpm is visual only (the seams you see). The spin axis comes from the break.

Numbers

idNameSpeed (mph)Horizontal break (m)Vertical break (m)Wobble (m)Arc (m)Sideways arcSpin (rpm)Colour
fastballFastball94-0.050.0400.12no2300(1, 1, 1) white
sinkerSinker91-0.18-0.2800.15no2150(0.6, 0.85, 1)
changeupChangeup84-0.10-0.2000.35yes1750(0.6, 1, 0.6)
curveballCurveball780.14-0.4800.6yes2600(0.75, 0.6, 1)
sliderSlider860.32-0.1000.2no2450(1, 0.65, 0.35)
knuckleballKnuckleball700-0.120.120.35no60(1, 1, 0.5)

Hit power (x exit velocity by contact zone)

PitchPerfectNiceSour
Fastball1.0510.95
Sinker10.970.85
Changeup0.980.950.8
Curveball10.970.9
Slider1.020.980.9
Knuckleball10.950.8

Defaults for a new PitchTypeDefinition: speed 90 mph, spin 2200 rpm, no break, arc 0, arcSideways off, hit power 1 in every zone, white.

Who throws it, and which special balls can ride on it

PitchThrown bySpecial balls
FastballCoach Pete, The Junkballer, Groundball Gus, Flamethrower, The Ace, The Phantom, Backyard Benny, The Gale, The Alien$$$ (Sandlot), Super Fast (Windy City), Ghost (Midnight), Wiffle (Benny), Headwind / Tailwind (The Gale)
SinkerThe Junkballer, Groundball Gus, Flamethrower, The Ace, Farmer Fitz$$$, Ghost, Anti-Gravity (Moon)
ChangeupCoach Pete, The Junkballer, The Ace, The Phantom, Backyard Benny, Farmer Fitz, The Gale$$$, Ghost, Sticky (Farmyard), Anti-Gravity, Wiffle, Headwind / Tailwind
CurveballCoach Pete, The Junkballer, The Ace, The Phantom, Backyard Benny, The Alien$$$, Ghost, Sticky, Anti-Gravity, Wiffle
SliderGroundball Gus, Flamethrower, The Ace, The Gale, The Alien$$$, Ghost, Super Fast, Headwind / Tailwind
KnuckleballThe Junkballer, The Ace, Knuckle Sandwich, Farmer Fitz, The Alien$$$, Ghost, Sticky
boss ball only appears where that boss pitches (his own park's inning 9). ## In the code | File | What it does | |---|---| | `Assets/_Project/Scripts/Data/DefaultContent.cs` | `Pitch(id, name, mph, hBreak, vBreak, wobble, color)`, the `spinRpm`, `HitPower(...)` and `arc` lines | | `Assets/_Project/Scripts/Data/PitchTypeDefinition.cs` | Fields and their meaning | | `Assets/_Project/Scripts/Pitching/PitcherAI.cs` | `CreatePitch`: speed, wobble roll, arc angle, special ball rolls | | `Assets/_Project/Scripts/Pitching/PitchData.cs` | `PathAt`: break, wobble, wiffle swerve and the arc loop | | `Assets/_Project/Scripts/Batting/HitTables.cs` | `PitchFactor`: hit power by zone | ## Gotchas - The fastball's vertical break is +0.04: it "rises" a little compared with the others. - Special balls are matched by pitch **id** (`BallModifier.pitchIds`), so renaming an id silently removes it from a park's special ball. - The knuckleball barely spins (60 rpm) on purpose, so its seams are visible. - The arc angle has its own random stream, so it never changes which pitches come. The co-op pitch message carries `arcAngle` (protocol `HRD-COOP-7`). ## Related - [[Pitchers and Bosses]]: who throws what, and how often - [[Pitching]]: flight, break and the strike zone - [[Special Balls]]: effects that ride on pitches - [[Batting Explained]]: contact zones and exit velocity - [[Difficulty]]: pitch speed per difficulty