Quick answer: Event sheets evaluate top to bottom. Put the deactivate call before the group in the sheet, or the group runs once more this tick.
A pause action deactivates “Gameplay” group. The group runs anyway for one more tick after the pause press. Players see one extra frame of motion before the freeze.
Sheet Order Matters
Construct evaluates events top to bottom each tick. If the deactivate-group event sits below the group it deactivates, the group’s events execute first this tick. The deactivate takes effect on the next tick.
The Fix
Reorder the event sheet:
Event Sheet (top to bottom):
On pause pressed:
System Set group "Gameplay" active false
// Group below
Group "Gameplay":
Every tick: player move
Now the pause check runs first; if pressed, the group is deactivated and skipped this same tick.
Use System Wait 0 for Defer
If reordering breaks other dependencies:
On pause pressed:
System Wait 0 seconds
System Set group active false
Wait 0 yields to the next tick. The deactivate happens at the start of the next evaluation, before the group runs again. Costs one frame of pause delay, which is invisible to players.
Verify Group Names
System Set Group Active takes a string. Typo = silent no-op. Drag the group from the Project bar into the action’s name parameter when authoring — this confirms the name visually.
Gate with Variable Instead
For mechanics where pause should also delay sub-conditions:
On pause pressed:
System Set isPaused true
Group "Gameplay":
isPaused = false:
player move
enemies AI
Adds a level of indirection: the group remains active but its sub-events gate on isPaused. Slightly more verbose but doesn’t depend on sheet ordering.
Verifying
Add a tick counter to a group action. Press pause. The counter should stop immediately on this tick — not run one more tick before stopping.
“Sheets evaluate top to bottom. Put pause checks above the gameplay they pause.”
Group order in the sheet is part of your gameplay logic. Treat reordering with the same care as code refactoring.