Variable doesn't seem to change in a loop

In your example code you are doing this:

spawn_info := class(creative_device):
    var TeleportNow<public>:logic = false

    OnBegin<override>()<suspends>:void =
        # PROBLEM: You're creating a new instance of spawn_info when you intended to
        # manipulate the values on the current instance instead.
        test:spawn_info = spawn_info{}
        loop:
            # Since you're referencing "test.TeleportNow" which was just constructed, the
            # value will always be false (the default for the TeleportNow variable).
            if (test.TeleportNow = true):
                #...
spawn_info := class(creative_device):
    var TeleportNow<public>:logic = false

    OnBegin<override>()<suspends>:void =
        # >>DELETE THE BELOW LINE
        # test:spawn_info = spawn_info{}
        loop:
            # Change from "test.TeleportNow" to "TeleportNow"
            if (TeleportNow = true):
                #...