Batters

In short

Four bean batters. Peapod is free; the others cost meta points (40, 60, 90) and can only be bought once your account level reaches 2, 4 or 6. Each batter’s stat modifiers and batting style (trajectory, pull side, curve) define how they hit, some start every run with a shop item, and each earns small trait perks at character levels 2, 5 and 10.

How it works

  • Picking: on the PLAY screen you page through batters. A locked batter shows LOCKED - <cost> PTS (or LOCKED - ACCOUNT LV <n> while the level is too low) and a button: REACH LV n (grey), UNLOCK with the points gem icon and the price (purple, #38), SELECTED or SELECT. Under the description a yellow line names the batting style, e.g. “HIGH TRAJECTORY - PULL HITTER” (MainMenuView.StyleLabel). See Meta Progression and Customization.

  • Buying: MetaProgression.TryBuy(batter) needs CanBuy (already owned, or account level >= requiredLevel) and enough points. Points are spent through TryUnlock(id, unlockCost).

  • In a run: the batter’s modifiers go into the run’s stats first, then their level perks, then upgrades and synergies (RunState.RecalculateStats). startingUpgradeIds are owned from the start of every run (and in the batting cage).

  • Batting style (#46, Mario Superstar Baseball style): three fields on BatterDefinition, read by Batting/HitTables when a swing is resolved. See Batting Explained.

    • trajectory (HitTrajectory Low / Mid / High): High shifts every launch-angle range up 4°, Low down 4° (HitTables.TrajectoryShiftDeg).
    • hitDirection (HitDirection Pull / Mid / Push): x exit velocity by where the ball goes, sampled every 22.5° from the pull line (spray -45°, a righty’s left field) to the opposite line (+45°) and blended between: Pull 1.02, 1.05, 1, 0.95, 0.85; Push the mirror (0.85, 0.95, 1, 1.05, 1.02); Mid always 1.
    • curve: x the ball’s sideways hook or slice in flight (HitTables.CurveAccel); 1 = normal, about 1.6 = “SUPER CURVE” (the label shows from 1.3).
  • Level perks: each batter has their own character level (max 10) from XP. Every perk at or below their level applies for the whole run. See XP and Levels.

  • Model: all four use BatterModel.Human: a rigged Blender bean (riggedModel) that gets a Humanoid avatar at runtime and plays the same clips. String Bean got a new model in #44 (Characters/StringBean.fbx): flat toon colours with no texture (riggedTexture null), smoother neck and waist weights, and a game-engine style skeleton (pelvis, spine_01 to spine_03, clavicle_l/r, upperarm_l…) that BeanRig maps alongside the older bean names; his hat socket is SOCKET_Head. shape is used only when CharacterLibrary.useBeans (off in the shipped asset) swaps everyone to the code-built beans. See Characters and Rigs.

  • Index: the main menu INDEX lists every batter under BATTERS with a subtitle of “Starter”, “Account level n” or “Unlockable” and their stat modifiers (Index Screen).

Numbers

idNameUnlocked by defaultPriceAccount levelStat modifiersStarting kit
rookiePeapodyes0nonenoneMaple Bat (maple_bat)
sluggerBaked Beanno40 PTS2+20% Power, -15% Timing Windownone
contactString Beanno60 PTS4+30% Contact, -8% PowerSweet Spot Tape (sweet_tape)
grinderPintono90 PTS6+2 Extra Outs (flat)Lucky Penny (lucky_penny)

Batting style (set by Style(...) in DefaultContent)

BatterTrajectoryHit directionCurveLabel on the PLAY screen
PeapodMidMid1MID TRAJECTORY - ALL FIELDS
Baked BeanHighPull1HIGH TRAJECTORY - PULL HITTER
String BeanLowPush1.6LOW TRAJECTORY - OPPO HITTER - SUPER CURVE
PintoMidMid1MID TRAJECTORY - ALL FIELDS

Defaults for a new BatterDefinition: Mid, Mid, curve 1.

Character level perks (each applies from that level on)

BatterLevel 2Level 5Level 10Total at level 10
Peapod+2% Timing Window+2% Timing Window+2% Timing Window+6% Timing Window
Baked Bean+1% Power+1% Power+1% Power+3% Power
String Bean+2% Contact+2% Contact+2% Contact+6% Contact
Pinto+1 Coins per HR+1 Coins per HR+1 Extra Outs+2 Coins per HR, +1 Extra Out

Descriptions and look

NameDescriptionColour / accentShapeRigged model / textureEye height / spacing (m)
Peapod”Quick, technical, slippery. Starts with a Maple Bat.”(0.95, 0.82, 0.32) / (0.2, 0.42, 0.9)PeapodCharacters/Peapod / Characters/peapod_albedo0.62 / 0.18
Baked Bean”Heavy hitter. High power, slow but strong.”(0.98, 0.72, 0.26) / (0.85, 0.2, 0.2)BakedCharacters/BakedBean / Characters/baked_bean_albedo0.86 / 0.26
String Bean”Fast, agile, high contact, tricky movement.”(0.45, 0.76, 0.28) / (0.9, 0.25, 0.25)StringCharacters/StringBean / none (flat toon colours)1.25 / 0.109
Pinto”Tough as nails: extra outs every round.”(0.74, 0.52, 0.32) / (0.97, 0.94, 0.86)PintoCharacters/Pinto / Characters/pinto_gradient1.0 / 0.2

Eye height and spacing place and size glasses cosmetics on the rigged model (0 = estimate).

In the code

FileWhat it does
Assets/_Project/Scripts/Data/DefaultContent.csBatter(...), RiggedBean(...), requiredLevel lines, Style(...), Perks(...)
Assets/_Project/Scripts/Data/BatterDefinition.csFields, BeanShape, BatterModel, HitTrajectory, HitDirection, LevelPerk
Assets/_Project/Scripts/Batting/HitTables.csLaunchRanges (trajectory), DirectionFactor, CurveAccel
Assets/_Project/Scripts/Batting/BeanRig.csMaps either bone naming to the Humanoid avatar; hat socket names
Assets/_Project/Scripts/Progression/MetaProgression.csIsUnlocked, CanBuy, TryBuy, LevelBonus, NextPerk
Assets/_Project/Scripts/UI/MainMenuView.csName tag, style line, stat bars (POWER, CONTACT, TIMING), unlock buttons, “+n OUTS EVERY ROUND”

Gotchas

  • Ids are not names: rookie is Peapod, slugger is Baked Bean, contact is String Bean, grinder is Pinto. The id slugger is also the Slugger synergy’s id (different list), and rookie is also a call sign id.
  • Unlock ids share one namespace with upgrades and cosmetics in SaveData.unlockedIds.
  • Pinto’s extra outs come only in whole numbers, which is why his first two perks are coins and the out comes at level 10.
  • Owning a batter always counts, even if a later change raises their requiredLevel.
  • Starting kit items count toward synergy tags (see Synergies).
  • hitDirection always treats spray -45° as the pull side: every batter bats right-handed, so “Pull” means left field.
  • The old String Bean texture (string_bean_hq_albedo.png) was deleted in #44; RiggedBean is passed null for it.