Hmmm... You have a strange habit of asking a question, getting an answer, ignoring it (or, at least not responding to it), and then asking the same or similar question again.
In this case, you already asked this (or something similar) here:
And I provided an answer, to the best of my ability, based on the limited amount of code you provided (and, you never followed up).
While you've provided more code here, any traction we gained in the other thread is completely lost when you "start over" in a new thread.
Please try to keep this stuff consolidated for the sake of those trying to help as well as those trying to use this forum as a resource for solving their problems in the future...
And, know that the people who assist here are volunteers who can certainly find other things to do with their time. Don't make it harder than necessary for them to help you.
Now, to your question(s)...
I'd say the underlying problem is the same as in the other question (linked above). You're going to process that
else side of your
_ready() function in every frame once your timer reaches zero. That'll cause your
game_over function to be called in every frame, which I assume isn't what you want.
While there are lots of things that could/should be cleaned up in the code you provided, you can get that GameOver stuff to be called only once by making this adjustment...
var game_over = false # <--- flag to track game_over status
if Globals.timeLeft > 0:
Globals.timeLeft -= delta
$TimerCount.text = str(Globals.timeLeft)
$TimerCount.text = "%d" % Globals.timeLeft
if !game_over: # <--- if game isn't over...
game_over = true # <--- now the game is over
Globals.timeLeft = 0
Also, you mention that your soundeffect is an autoload. While I don't know exactly what that means to you, if you're saying the sound can be played by calling a function in an autoload script, then you should be able to just call it from your