Skip to content

Restore Arena Campaign scoring progression (#110) - #112

Merged
themuffinator merged 1 commit into
mainfrom
codex/issue-110-arena-warmup-scoring
Aug 15, 2026
Merged

Restore Arena Campaign scoring progression (#110)#112
themuffinator merged 1 commit into
mainfrom
codex/issue-110-arena-warmup-scoring

Conversation

@themuffinator

Copy link
Copy Markdown
Owner

What changed

  • Saved and transactionally zeroed si_warmupReadyPercentage whenever Arena disables ready-up.
  • Saved the player's g_matchProfile, forced Arena through the casual authored-CVar adapter, and explicitly refreshed that import for every card.
  • Restored both settings after the match.
  • Added a focused contract for the rule-boundary invariants and updated release-completion notes.

Root cause

Arena set si_useReady=false but left the clean-profile ready threshold at 0.51. The typed casual adapter therefore produced disabled readiness with a 5100-basis-point threshold. Validation rejected field 4/reason 17, and every WARMUP→COUNTDOWN transition was refused. The intro still unlocked combat, but the server remained in infinite WARMUP, where scoring is intentionally suppressed.

A second lifecycle defect was adjacent: the multiplayer object survives map shutdown, so two consecutive DM-backed campaign cards could reuse the first card's committed rule snapshot unless the profile selector was explicitly refreshed.

Validation

  • python tools/tests/validation_hardening.py
  • python tools/tests/arena_campaign.py
  • documentation, charset, Python compile, and diff checks
  • Windows x64 client compile and link
  • Windowed, no-input, engine-screenshot runtime against stock assets:
    • match 1 imported 8 frags / 6 minutes, reached a finite 5:43 clock, and recorded a forced self-kill as score -1
    • after disconnect/restoration, match 2 imported its own 12 frags / 7 minutes, reached a finite 6:43 clock, and recorded score -1
    • an archived competitive profile was restored after both matches
    • zero competitive rules rejected diagnostics and no fatal engine diagnostics

Fixes #110

Pair disabled readiness with a zero threshold, refresh the casual typed-rule import for every campaign card, and restore the player's archived profile after play.

Fixes #110
@themuffinator
themuffinator force-pushed the codex/issue-110-arena-warmup-scoring branch from c5181ca to 712e4a3 Compare August 15, 2026 10:58
@themuffinator

Copy link
Copy Markdown
Owner Author

Final hosted validation for 712e4a3: 21 checks passed, 4 failed, 0 pending. Commit Validation and ARM64 Cross Build passed completely, including ASan/UBSan and both universal2 assembly/package/smoke jobs. The four red macOS Push Verification jobs exactly reproduce the renderer-default-safety baseline on main and are unrelated to the Arena campaign rule change.

@themuffinator
themuffinator marked this pull request as ready for review August 15, 2026 16:50
@themuffinator
themuffinator merged commit f14ea1a into main Aug 15, 2026
21 of 25 checks passed
@themuffinator
themuffinator deleted the codex/issue-110-arena-warmup-scoring branch August 16, 2026 11:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Arena Campaign: scores remain zero during live combat

1 participant