Quick answer: Godot 4 touchscreen producing both ScreenTouch and MouseButton events? Touch-to-mouse emulation is on by default - disable in Project Settings or filter in _input.
Mobile player taps a button; _input fires twice (touch + mouse). Action runs twice.
Disable touch-to-mouse
Project Settings > Input Devices > Pointing > Emulate Mouse From Touch = false. Eliminates the duplicate event.
Or filter in handler
if event is InputEventMouseButton and event.device == -1:
return // emulatedDevice -1 indicates the emulation; skip those.
Keep mouse-to-touch for desktop testing
Enable Emulate Touch From Mouse for desktop development. Same actions; different source. Touch path tested without a phone.
“Touch emulation is a porting helper. In production, it's a duplicate-event source.”
Pick a strategy per project: touch-only, mouse-only, or both with separate handlers. Mixed emulation is the bug.