Quick answer: _pressed is edge-triggered (first frame only) by design. For auto-repeat, use mouse_check_button with a cooldown timer.

A spell-casting RPG wants holding the mouse to fire repeatedly. mouse_check_button_pressed only fires on the initial click. Holding does nothing further. Expected behavior, but you want auto-repeat.

Trio of Functions

Pick by intent: pressed for single actions (clicking a button); held for charging or continuous fire.

Auto-Repeat Pattern

// Create event
fire_cooldown = 0;
initial_delay = 15;   // frames before repeat starts
repeat_rate = 5;       // frames between auto-shots

// Step event
if (mouse_check_button(mb_left)) {
    if (mouse_check_button_pressed(mb_left)) {
        fire();
        fire_cooldown = initial_delay;
    } else if (fire_cooldown <= 0) {
        fire();
        fire_cooldown = repeat_rate;
    } else {
        fire_cooldown -= 1;
    }
} else {
    fire_cooldown = 0;
}

Initial click fires; then waits initial_delay frames before auto-repeating at repeat_rate cadence. Standard text-editor key-repeat feel.

Continuous Fire (No Initial Delay)

if (mouse_check_button(mb_left) and fire_cooldown <= 0) {
    fire();
    fire_cooldown = 3;   // 20fps autofire at 60fps
}
fire_cooldown -= 1;

Simpler shmup-style: fires at fixed rate while held. No initial delay.

Verifying

Click and release: one shot. Hold: shots after delay at expected cadence. Release: resets. Cooldown should not persist across releases.

“Pressed for edges, button for level, timer for repeats. Three pieces, every input idiom.”

For shooter feel, gate auto-repeat behind a screenshake / muzzle flash — even a constant cadence reads as ‘feedback’ when each shot has weight.