Quick answer: Tag each tween with a unique string, and filter the On Completed trigger by that tag. Remove any duplicate trigger subscriptions across event sheets that handle the same tween.

A coin animates its scale up, then back to normal, then awards points. Each pickup awards 2× the expected points. The animation looks fine; the trigger fires twice for one logical animation.

Tween Triggers Fire Per Tween Instance

When you chain two Tween actions on the same object (Tween scale up, then Tween scale down on completion), you have two distinct tween instances. The On Completed trigger fires for each. If both share the same handler without a tag filter, the handler runs twice.

Similarly, if two different objects have tweens completing on the same frame, the trigger fires per object — not necessarily a bug, but easy to misinterpret.

The Fix: Tag and Filter

// On pickup
Coin Tween Set scale to 1.5 over 0.1s tag "pickup_grow"

// On Completed Tween, tag = "pickup_grow"
Coin Tween Set scale to 1.0 over 0.1s tag "pickup_shrink"

// On Completed Tween, tag = "pickup_shrink"
System Add 1 to Score
Coin Destroy

Each trigger explicitly checks the tag. The first completion (grow) only triggers the second tween. The second completion (shrink) triggers the score increment and destroy.

Duplicate Triggers Across Event Sheets

If you split logic across multiple event sheets and both include a global On Completed trigger for the same tag, both fire. Include each sheet once, and put the handler logic in only one place.

To find duplicates, search event sheets for “On completed” with the same tag string.

Once-Only Action Patterns

For scenarios where you absolutely need to guarantee one-shot behavior even with potentially multiple firings, gate with an instance variable:

Coin On Completed Tween tag "pickup_shrink":
    if Coin.scored == 0:
        Coin scored = 1
        System Add 1 to Score
        Coin Destroy

The scored flag prevents a second increment if the trigger ever fires again.

Verifying

Add a Browser Log: "completed " & Tween.Tag. Pick up one coin. The log should show exactly two entries (grow + shrink) and the score should increment by 1. If three entries or score increments by 2, the trigger is over-firing — check tag filtering.

“Tween triggers fire per tween. Tag each tween and filter triggers by tag — otherwise unrelated animations cross-trigger your handlers.”

Adopt a project-wide tag naming convention (e.g., “feature_action”) so you never have collisions across event sheets.