         return moved
 
     checkCanMove: (newX, newY, character) ->
-        if newX < 0 or newX >= @gameManager.config.visual.grid.gridX\
-          or newY < 0 or newY >= @gameManager.config.visual.grid.gridY
+        ###
+            Returns true if the character CAN'T move.
+        ###
+        if character != @protagonist and\
+          (newX < 0 or newX >= @gameManager.config.visual.grid.gridX\
+          or newY < 0 or newY >= @gameManager.config.visual.grid.gridY)
             # Player is out of bounds of grid.
-            if character == @protagonist
-                if newX < -1 or newX >= @gameManager.config.visual.grid.gridX + 1\
-                  or newY < -1 or newY >= @gameManager.config.visual.grid.gridY + 1
-                    @gameLost()
-                else
-                    return false
             return true
 
         if character.group?

            @visual.pushCharacter @gameManager.config.visual, char.visual
        return

    checkEvents: (protagonistDoneMoving) ->
        # Just doing player collisions at the moment.
        triggers = {"victory": @gameWon, "loss": @gameLost, "fall": @protagonistFalls}
        for name, character of @gameConfig.characters
            if character == @protagonist

                    if character.AI.failed[command.key]?
                        for aiCommand in character.AI.failed[command.key]
                            @executeAICommand character, aiCommand
        if character == @protagonist and character.moves.length == 0
            @protagonistDoneMoving = true
        if character.AI? and character.moves.length == 0
            for aiCommand in character.AI.normal
                @executeAICommand character, aiCommand
