local killed = coroutine.create(function()
        print("Killed coroutine called")
        if script:FindFirstChild("Killed").Value == true then
            print("ending game")
            endgame("dead")
        end
    end)
    local timer = coroutine.create(function()
        for i = 0, 60, 1 do
            wait(1)
        end
        endgame("time")
    end)
    coroutine.resume(timer)
    script:FindFirstChild("Killed").Changed:connect(function()
        if script:FindFirstChild("Killed").Value == true then
            coroutine.resume(killed)
        end
    end)
end

function endgame(status)
    coroutine.yield(killed)
    coroutine.yield(timer)

This is a small portion of the script, don't worry too much about the ends.

Basically the script is supposed to listen for the variable "Killed" to turn true or until the time runs out, then it stops the other coroutine and carries on with the rest of the script.

What is wrong?