Quick answer: GameMaker Sequence with a Broadcast Message track not running your code? The sequence broadcasts to the layer; your handler must be on an instance in that layer’s scope, or you must poll.

An animation sequence fires a ‘footstep’ broadcast at frame 12; nothing happens in code. The instance listening is on a different layer.

Broadcast vs Moment

Sequence tracks have Broadcast Messages (text fired on layer) and Moments (callbacks). Broadcasts go to the layer’s message queue; Moments call a function directly.

Read the Queue

var msgs = layer_sequence_get_messages(seq);
for (var i = 0; i < array_length(msgs); i++) {
    if (msgs[i] == "footstep") play_footstep_sound();
}

Poll each frame in the listening instance. Costs almost nothing.

Use Moments for One-Off

For unique gameplay reactions (boss attack at frame X), Moments are simpler — the sequence calls your function directly with arguments.

Layer Membership

If your listener is in a different layer than the sequence, broadcasts don’t arrive. Use a singleton manager on a globally-tracked layer for reliable cross-layer comms.

Verifying

Footstep sound plays at the configured frame every time the animation cycles. No silent misses.

“Broadcasts go to the sequence’s layer. Listen there or use Moments.”

Reserve Broadcasts for animation events (sound, particle) and Moments for gameplay-critical callbacks — each fits one well.