Here you can play and experience Puck'n Hell on itch.io
Root cause
The win path honors that contract:
On match ended → Advance Arcade campaign → Load next opponent and reload
└─ loads the OD, THEN Reloads single player scene
The lose path didn't:
On lose try again clicked → Reset campaign ← Selected opponent = null
→ Reload single player scene ← immediately, OD never reloaded
So the fresh scene reached game manager and found 'Selected Opponent' == null, skipped activating ai paddle with opponent definition data and difficulty level and fell into the Inspector-defaults branch — no opponent definition, no AI, match never starts. Exactly our symptom.
I audited all five 'Reset Campaign' callers — the other four (give-up, match-lost, quit, campaign-complete) all head to the main menu, where difficulty selection panel re-runs async loading opponent definition data asset before entering. "OnLoseTryAgainClicked" was the only one that re-entered gameplay after nulling the opponent. That's why this one button, and only this one, broke.
The fix
In game manager the Arcade branch now loads the opponent before reloading, mirroring the win path.