Status: root cause confirmed
Affects: matchmaking queue status display (reported against MultiplayerPvP Closed Beta v3)
Symptom
Tester report: "playing any singleplayer game while in queue breaks the queue timer." The "Queueing m:ss" status freezes at the moment a singleplayer run starts and never updates or clears again — even after returning to the menu — while the queue stays active server-side.
Root cause
api/matchmaking/queue_timer.lua drives its tick as a self-re-arming G.E_MANAGER Event (0.25s delay) that reschedules itself only from inside a tick, and the Event is not flagged no_delete. Balatro's run start (Game:start_run / G:delete_run) calls G.E_MANAGER:clear_queue(), which deletes the pending tick — killing the chain permanently. The elapsed value itself is wall-clock (love.timer.getTime()), so nothing resets; ticks just stop firing. stop() (queue_timer.lua:73-81) is only ever called from inside a tick, so the frozen status text can never clear either.
api/countdown.lua uses the identical recurring-event pattern safely because a countdown never crosses a run-start boundary.
Status: root cause confirmed
Affects: matchmaking queue status display (reported against MultiplayerPvP Closed Beta v3)
Symptom
Tester report: "playing any singleplayer game while in queue breaks the queue timer." The "Queueing m:ss" status freezes at the moment a singleplayer run starts and never updates or clears again — even after returning to the menu — while the queue stays active server-side.
Root cause
api/matchmaking/queue_timer.luadrives its tick as a self-re-armingG.E_MANAGEREvent (0.25s delay) that reschedules itself only from inside a tick, and the Event is not flaggedno_delete. Balatro's run start (Game:start_run/G:delete_run) callsG.E_MANAGER:clear_queue(), which deletes the pending tick — killing the chain permanently. The elapsed value itself is wall-clock (love.timer.getTime()), so nothing resets; ticks just stop firing.stop()(queue_timer.lua:73-81) is only ever called from inside a tick, so the frozen status text can never clear either.api/countdown.luauses the identical recurring-event pattern safely because a countdown never crosses a run-start boundary.