Dev Menu and Shortcuts
In short
F1 opens the dev menu in the Editor and in development builds only, never in a release build. It unlocks things, moves around a run, forces pitches or batted balls, and plays any cutscene. Everything it does to progress is saved at once, like a normal unlock. Two more hidden keys work in every build: Ctrl+Shift+F (Fit Mode) and Ctrl+Shift+N (NET TEST).
How it works
The dev menu
UIRoot.AwakeaddsDevMenuonly whenDevMenu.Available(Application.isEditor || Debug.isDebugBuild).- F1 toggles it; Esc or the X button closes it. It draws as a panel on the right at
GUI.depth -10, so it is on top and gets clicks first. - While open during an at-bat,
UIRootpauses the game (so a click never swings) and unpauses when it closes.
Always at the top: INSTA-HOME-RUN BAT: ON / OFF (AtBatController.DevInstaHomeRun). Every swing, even a miss, becomes a no-doubter: 116 mph, 29 deg launch, spray up to +-20 deg, quality 0.85 (SwingResolver.DevHomeRun). Works in runs, co-op turns and the cage.
Tabs: PROGRESS, RUN, PITCHING, CUTSCENES.
PROGRESS
| Section | Buttons | Calls |
|---|---|---|
| META POINTS n | +100, +1000, -100 | DevAddPoints |
| ACCOUNT LEVEL n (xp XP) | +100 XP, +1000 XP, LEVEL UP (off at level 50), RESET | DevAddAccountXp, DevSetAccountLevel(level + 1), DevSetAccountLevel(1) |
BATTER LEVELS, one row per batter: NAME LV n (xp XP, p perks) | +100 XP, LEVEL UP, MAX, RESET (first three off at level 10) | DevAddBatterXp, DevSetBatterLevel |
| RESET ALL LEVELS | DevResetLevels | |
| BATTERS, SHOP ITEMS, COSMETICS | UNLOCK ALL, LOCK ALL | DevUnlockAllItems, DevLockAllItems |
| MAPS | UNLOCK ALL MAPS, RESET MAPS | DevUnlockAllMaps, DevResetMaps |
| Per map (LOCKED tag if locked) | NONE, NORMAL, MEDIUM, HARD (difficulties beaten) | DevSetBeaten(park, 0..3) |
| SWING LOG (n pitches this session) | a note with the file path, OPEN THE LOG’S FOLDER | Opens Application.persistentDataPath, where swings.csv is (Swing Log) |
The levels section notes that perks apply from the next run or cage session, and that the results-screen XP bars show after RUN > BEAT MAP. (XP and Levels)
RUN (solo runs only)
Shows a note instead in the batting cage (“use the PITCHING tab”), in co-op (“refereed by the host”) or with no live solo run.
| Section | Buttons | What happens |
|---|---|---|
| Header | park, difficulty; inning n / 9, goal, run score, coins | |
| COINS | +10, +100, ZERO | edits RunState.Coins |
| JUMP TO INNING | <, INNING n, >, GO | RunManager.DevJumpToInning: earlier innings count as cleared at exactly their goals; lands on the map |
| THE RUN | OPEN SHOP, BEAT MAP, LOSE RUN | DevOpenShop (fresh visit), DevEndRun(true) (records the map, so unlocks fire), DevEndRun(false). Both go straight to the results with no cutscene. |
| REPLAY LAST HIT (only at bat; turns green: “REPLAY LAST HIT: BEFORE THE NEXT PITCH”) | AtBatController.DevReplayNext: the last hit’s instant replay plays before the next pitch (Hit Show) | |
| THIS INNING s / goal OUTS o / n (at bat only) | +100, +1000, CLEAR IT | AtBatController.DevAddScore; the inning ends after the pitch in flight |
| +1 OUT, -1 OUT, OUT OF OUTS | Count.AddOutsAllowed | |
| ATTRIBUTES | every stat, yellow when changed from base | read-only list of RunState.Stats |
| CLEAR ALL UPGRADES, STARTING KIT | RunState.ResetUpgrades(false / true) | |
| GIVE AN UPGRADE | GIVE per upgrade (OWNED when owned and it doesn’t stack) | RunState.AddUpgrade |
PITCHING
- TEST HITS: OFF, GROUNDER, LINE DRIVE, FLY OUT, OFF THE WALL, FOUL, JUST OVER, HOME RUN, MONSTER, TARGET, SCOREBOARD, UPPER DECK, RANDOM (
DevHit). From the next pitch every swing, even a miss, becomes that kind of batted ball, found by searching the real physics of the park you are on (DevHits.Find, done once when you pick, while the game is paused). Kinds that can’t happen at this park are greyed out; if a search finds none, a note says swings play for real. Scoring stays real. SetsAtBatController.DevForcedHit. Used to test the flight camera, the counter and the replays (Hit Show). - HIT REPLAYS: REPLAY EVERY HOME RUN: ON / OFF (
AtBatController.DevAlwaysReplay). Off, only big moments get the replay. Settings > REPLAYS still turns replays off entirely. - FORCE A SPECIAL BALL: OFF, NO SPECIAL BALLS, or one per
BallEffect($$$, Super Fast, Anti-Gravity, Ghost, Sticky…). SetsPitcherAI.DevForcedEffect. - FORCE A PITCH TYPE: OFF or one per pitch type. Sets
PitcherAI.DevForcedPitch. - Applies from the next pitch, in runs and the cage. The rolls still happen, so turning a force off leaves the sequence as it would have been (Seeds and Determinism).
CUTSCENES
| Section | Buttons | What happens |
|---|---|---|
| IN RUNS | CUTSCENES: ON / OFF | The same switch as Settings > CUTSCENES (skipCutscenes); saves at once. |
| SPEED | 1X, 1/2X, 1/4X | Playback speed for the previews below. |
| PARK | <, THE RUN’S PARK or a park name, > | THE RUN’S PARK = the run you’re on (its inning, pitcher and build), or the first park with your batter. |
| MATCH INTRO | PLAY MATCH INTRO | MatchIntroDirector.Preview(speed, park): the whole intro, no walk-up, then back to where you were. |
| END OF THE GAME | BOSS DOWN, MAP BEATEN, GAME OVER | OutroDirector.Preview(kind, speed, park), with a made-up winning homer. |
The previews only work from the title screen or a solo run’s map (not in co-op or the cage), and not while a cutscene is playing. In a scene, click reads on and Esc skips. See Cutscenes.
Every hidden and developer key
| Key | Where | Build | What |
|---|---|---|---|
| F1 | anywhere | Editor + development builds | Dev menu |
| Ctrl+Shift+F | Customize screen | any build | Fit Mode (Fit Mode) |
| Ctrl+Shift+N | title screen | any build | NET TEST transport overlay (Transports) |
| FIT button | Customize top bar | Editor only | Fit Mode |
| NET button | title screen top bar | Editor only | NET TEST |
| I | run map, solo | Editor only | Replay the match intro here (Shift+I: quarter speed) |
| B / V / G | run map, solo | Editor only | Preview BOSS DOWN / MAP BEATEN (victory) / GAME OVER (Shift: quarter speed) |
| Esc | at bat | any | Pause; also closes the dev menu, Fit Mode, popups, NET TEST, the lobby, the INDEX screen and map select |
| Esc | match intro, end-of-game cutscenes | any | Skip the cutscene (a short fade to black) |
| Tab | batting cage | any | Next pitch type |
| M | batting cage | any | Next park |
| Space / left click | replays, waits, results screen, cutscenes | any | Skip (results: fill the XP bars at once); in a cutscene, read on past a card |
| Arrows / WASD, 1 / 2 / 3, Enter | map select | any | Slide parks, step difficulty, pick Normal / Medium / Hard, PLAY (Map Select and Unlocks) |
| Arrow keys / WASD | Customize stage | any | Pan the camera |
Player controls (mouse aim, Space / click / gamepad A to swing) are in Controls.
Editor-only menu helpers
Tools > Home Run Derby > Smash Scoreboard (Play mode) breaks the board (Scoreboard); Preview Match Intro, Preview Match Intro (Quarter Speed) and Preview Outro: Boss Down / Victory / Defeat play the cutscenes in Play mode; Delete Save File resets progress. The full list is in Editor Tools and Tests.
Numbers
| What | Value | Where to tune |
|---|---|---|
| Panel width | 460 | DevMenu.PanelW |
| Insta-home-run swing | 116 mph, 29 deg, spray +-20 deg, quality 0.85 | SwingResolver.DevHomeRun* |
| Max account level / character level | 50 / 10 | Leveling.MaxAccountLevel, MaxCharacterLevel |
In the code
| File | What it does |
|---|---|
Scripts/UI/DevMenu.cs | The menu: DrawProgress, DrawLevels, DrawRun, DrawPitching, DrawTestHits, DrawCutscenes. |
Scripts/Batting/DevHits.cs | DevHit kinds, Label, CouldHappen, Find (searches the park’s physics), Make. |
Scripts/Batting/AtBatController.HitShow.cs | DevAlwaysReplay, DevReplayNext. |
Scripts/UI/RunMapView.cs | The Editor-only I / B / V / G preview keys. |
Scripts/Progression/MetaProgression.cs | Dev* methods; each saves at once. |
Scripts/Run/RunManager.cs | DevJumpToInning, DevOpenShop, DevEndRun. |
Scripts/Batting/AtBatController.cs | DevInstaHomeRun, DevForcedHit, DevAddScore. |
Scripts/Pitching/PitcherAI.cs | DevForcedPitch, DevForcedEffect. |
Gotchas
Dev actions write the real save
Every PROGRESS button calls
Persist(), so it writessave.jsonimmediately. Use Delete Save File to undo.
- The Windows zip from Build > Windows Player is a release build (
BuildOptions.None), so F1 does nothing there. Ctrl+Shift+F and Ctrl+Shift+N still work. - Forced pitches, TEST HITS, REPLAY EVERY HOME RUN and insta-home-run are static fields: they stay on until switched off or Play stops. TEST HITS wins over insta-home-run when both are on.
- Upgrades given mid-inning apply from the next inning; the current at-bat keeps its stats.