Cutscenes
In short
A run opens with the match intro (park, map bonuses, pitcher, lineup, then the batter’s real walk-up to the plate) and ends with an outro: BOSS DOWN! after a boss inning, MAP BEATEN! after the last inning, GAME OVER when the outs run out. Cards wait for a click; Esc skips. Everything is recorded and saved before an outro starts, so quitting mid-scene loses nothing. Settings > CUTSCENES turns them all off.
How it works
Shared machinery
- Each cutscene is a list of
Beats (IntroScript.Build/OutroScript.Build). A beat is either auto (plays for its seconds) or a reading stop (its card lands, then waits for a click). CutsceneRunnerwalks the list. Space / click (SwingInput.SwingPressed) at a stop moves on (even while the card is still landing); on an auto beat it fast-forwards to the next stop. Cuts happen at the midpoint of a slash wipe, so the eye never sees a camera jump. Stops show ”▶ CLICK TO CONTINUE” with page dots (for example 2 / 4).- The first 0.35 s ignore clicks and Esc (
SkipGrace), so the click that started the inning never skips anything. UI/BroadcastDraw.csis the shared graphics kit (bugs, slams, lower thirds, hints). The overlays only draw pre-formatted cards (MatchIntroCard,OutroCard), so every number shown is the one the game plays by.
The match intro (MatchIntroDirector, state GameState.Intro)
- Plays once per run, before inning 1 (solo:
RunManager.PlayCurrentRound; co-op:CoopRun.OnRoundStart). It also plays for the daily run and after CONTINUE on a run saved before inning 1. Never in the Batting Cage. - Running order: cold open on the scoreboard (HOME RUN DERBY, “LIVE FROM PARK”), crane, park tour, map arc that stops on the map card (BONUSES ON THE MAP, THE MAP, “n BONUS TARGETS” or “NO BONUS TARGETS: DISTANCE IS EVERYTHING”, special balls and payoffs), the pitcher’s entrance that stops on his card (TONIGHT’S PITCHER or A BOSS STEPS UP with BOSS BATTLE hazard tape; ARSENAL, SPECIAL BALLS HERE, AGAINST YOU), then for each batter a reveal that stops on their card (AT THE PLATE, or STARTING LINEUP in co-op; ITEMS, SYNERGY: chips, STATS), and the face-off ending in PLAY BALL!.
- Hints: “CLICK · NEXT ESC · SKIP INTRO”, and “CLICK · PLAY BALL” on the face-off.
- Esc fades to black, then goes straight to the walk-up (solo) or the face-off hold (co-op).
- Walk-up (
BeginWalkUp): a wipe, then the round starts withRoundContext.walkUpShotset, so the batter’s real walk-in clip plays under a tracking camera that lands exactly on the batting view while the HUD fades in (HudAlpha; the co-op watch overlay fades the same way). Then the at-bat runs as usual (At-Bat Loop).
flowchart LR A["Inning 1 starts"] --> B{"CUTSCENES on?"} B -->|no| P["At-bat"] B -->|yes| I["Match intro<br/>auto beats + reading stops"] I -->|Esc| F["Fade to black"] I -->|last beat| H["Face-off hold"] F --> H H -->|"solo: at once<br/>co-op: host's first TurnStart"| W["Walk-up wipe<br/>tracking camera, HUD fades in"] W --> P
The outros (OutroDirector, state GameState.Outro)
| Outro | When | Beats | Then |
|---|---|---|---|
| BOSS DOWN! | A boss inning is cleared and it was not the last inning | Replay (if any), knock-out (the boss topples backwards), reward card (BOSS DEFEATED, inning score bar, HOME RUNS, BOSS BONUS, COINS THIS INNING, “NEXT: THE SHOP”) | Shop |
MAP BEATEN! (OutroKind.Victory) | The last inning is cleared | Replay (if any), fireworks eruption (fanfare, crowd celebrates, scoreboard “FINAL”), FINAL BOSS DOWN! fall (if the inning had a final boss), hero orbit (CHAMPION / CHAMPIONS), final line score card, your run card (YOUR RUN / TEAM RUN) | Results |
GAME OVER (OutroKind.Defeat) | Out of outs | The long walk as the colour drains (crowd slumps, sad trombone, scoreboard “GAME OVER”), the GAME OVER slam, the SO CLOSE! card (or THE RUN ENDS HERE) | Results |
- The replay flies the inning’s last hit (
AtBatController.LastHit) along its recorded path with a tracer, titled WINNING HOMER or WINNING HIT. GAME OVER never replays. AtBatController.Outro.csstages the scene: the batter at the plate in their outfit and bat (StageOutro), the relaxed or stance pose, the replay ball, the pitcher’s topple (OutroScript.FallAngle), andEndOutroto clean up.- Hints: “CLICK · NEXT ESC · SKIP”. Esc goes straight to the next screen.
- From an at-bat it wipes in off the last play (
EntryWipe); anywhere else it cuts in. - ABANDON RUN and the Dev menu’s end-run buttons go straight to the results with no outro.
Co-op
- Intro sync. The host builds an
IntroGatewith every player in the session and holds the firstTurnStartuntil all are done or a deadline passes. A player is done when they finish, skip, or have cutscenes off: clients sendIntroDone(37); the host broadcastsIntroProgress(38). A player who leaves counts as done. While holding on the face-off each screen shows WAITING FOR ALEX, ALEX & SAM, 3 PLAYERS (1/4), or WAITING FOR TEAM…. - Every lineup card is built from the roster; before inning 1 each teammate’s build is their batter’s starting kit, so no extra data is sent.
- The first turn starts with the opener’s walk-up on every screen (spectators stay on the face-off until the batter’s
AtBatBeginarrives). See Co-op Run Flow. - Outros play on every machine from local state, each at its own pace, with no messages. The figure at the plate is whoever batted last (their batter, cosmetics and bat). The winning hit is replayed only on machines that saw it (batted or watched live). Team cards read CHAMPIONS, TEAM RUN and the scoreboard says WHAT A TEAM!.
- BOSS DOWN leads into the shop, whose READY gate already waits for everyone. A finished run is in phase
Overfrom the start of its outro, so a host leaving mid-cutscene doesn’t pull anyone back to the menu.
Numbers
| What | Value | Where to tune |
|---|---|---|
| Intro auto beats | cold open 2.5 s, crane 4.5, tour 5, map arc 3.5, pitcher entrance 3.5, each batter reveal 2.5, face-off 3 | IntroScript constants |
| A stop’s card landing | 1.2 s | IntroScript.CardLands, OutroScript.CardLands |
| Wipe / card exit | 0.25 s / 0.18 s | CutsceneRunner.WipeSeconds, ExitSeconds |
Intro camera time (AutoLength, stops and half-wipes included) | 28.85 s solo, +3.825 s per extra player (worked out from the constants) | IntroScript.AutoLength |
| Co-op gate deadline | AutoLength(players) + 90 s | CoopRun.IntroReadingAllowance |
| Click / Esc grace | 0.35 s | MatchIntroDirector.SkipGrace, OutroDirector.SkipGrace |
| Esc fade | 0.25 s | SkipFadeSeconds |
| Walk-up blend / HUD fade | 1.2 s / 0.6 s | WalkUpBlendSeconds, HudFadeSeconds |
| Outro beats | replay 3.2 s (victory 4), knock-out 2.6, eruption 4.5, fall 2.2, hero 5, long walk 4, game-over slam 2.2 | OutroScript constants |
| SO CLOSE! | fell short by at most 15% of the goal | OutroOverlayView |
| Dev preview speeds | 1x, 1/2x, 1/4x | DevMenu.CutsceneSpeeds |
In the code
| File | What it does |
|---|---|
Assets/_Project/Scripts/Intro/CutsceneRunner.cs | Beat and CutsceneRunner: stops, wipes, fast-forward, Finish; pure logic |
Assets/_Project/Scripts/Intro/IntroScript.cs / OutroScript.cs | Running orders and beat lengths; AutoLength, FallAngle |
Assets/_Project/Scripts/Intro/MatchIntroDirector.cs | Play, Skip, BeginWalkUp, Stop, Preview; HoldStatus, HudAlpha, InWalkUp |
Assets/_Project/Scripts/Intro/OutroDirector.cs | Play, Stop, Preview; fireworks, crowd, scoreboard and post-processing mood |
Assets/_Project/Scripts/Intro/MatchIntroCard.cs / OutroCard.cs | Everything the cards show, built once from the run |
Assets/_Project/Scripts/Intro/IntroCamera.cs | Every intro and outro camera shot |
Assets/_Project/Scripts/Intro/IntroGate.cs | Co-op: who is still reading; Ready when nobody is or the deadline passed |
Assets/_Project/Scripts/UI/IntroOverlayView.cs / OutroOverlayView.cs | Broadcast graphics; DrawTransition carries the walk-up and entry wipe over the next screen |
Assets/_Project/Scripts/Batting/AtBatController.Outro.cs | StageOutro, ShowReplayBall, TopplePitcher, EndOutro |
Assets/_Project/Scripts/Ballparks/Fireworks.cs | Code-built fireworks and dust puffs |
Assets/_Project/Scripts/Run/RunManager.cs / Run/CoopRun.cs | When each cutscene plays (PlayOutro, PlayMatchIntro, IntroFinishedHere) |
Assets/_Project/Editor/MatchIntroTest.cs, OutroTest.cs | Tools > Home Run Derby > Net > Run Match Intro Test / Run Outro Test |
Assets/_Project/Editor/MatchIntroTools.cs | Tools > Home Run Derby > Preview Match Intro (and Quarter Speed), Preview Outro: Boss Down / Victory / Defeat |
Gotchas
- One switch covers all of them:
GameSettings.skipCutscenes(Settings > CUTSCENES, also the Dev menu’s CUTSCENES: ON / OFF). It is on (cutscenes play) by default. - Solo BOSS DOWN opens and checkpoints the shop before the cutscene, so quitting mid-scene resumes in the shop.
- A clinching home run that leads into a cutscene skips its own instant replay (the outro replays it). In co-op a turn that clinches the inning never gets the big replay. See Hit Show.
- Esc inside the walk-up is an at-bat again: it pauses, it does not skip.
IntroScript’s comment says “about 24.5 s of camera work solo”: that counts auto beats only.AutoLength(used for the co-op deadline) also counts stop landings and half of each wipe.- Dev: Dev menu (F1) > CUTSCENES plays any of them at any speed on any park from the title screen or a solo run’s map. Editor only: on a solo run map, I replays the intro, B / V / G the outros (Shift: quarter speed). See Dev Menu and Shortcuts.
- No new character animation: outros use the existing poses plus camera, graphics and the pitcher’s topple.
Related
- Core Loop: where the intro and outros sit in a run
- Co-op Run Flow: the intro gate and outros in co-op
- Net Messages:
IntroDoneandIntroProgress - Pitchers and Bosses: the bosses BOSS DOWN and FINAL BOSS DOWN! knock over
- Hit Show: the replay rules around cutscenes
- Game States and Screens: the
IntroandOutrostates - Scoreboard: the messages shown during outros
- Audio: fanfare, firework and trombone sounds