     @available_mappings = level.available_mappings
 
   requestBotMove: (dir) ->
-    @bot.x += dir.dx
-    @bot.y += dir.dy
-
-    return true
+    dest = {x: @bot.x + dir.dx, y: @bot.y + dir.dy}
+    if @level[dest.x][dest.y].type != 'obstacle'
+      @bot.x = dest.x
+      @bot.y = dest.y
+      return true
+    else
+      return false
 
 ################
 

        new_pos = @bot_sprite.computePos()
        @bot_sprite.animations.push(
          duration: 100
          x0: old_pos.x, y0: old_pos.y
          x1: new_pos.x, y1: new_pos.y
          dir: dir
        )

window.Dwim = Dwim

      @bot_sprite.dir = anim.dir
      if not anim.start_t?
        anim.start_t = absolute_t
        anim.start_t -= @bot_sprite.leftover_t
        @bot_sprite.leftover_t = 0
      t = (absolute_t - anim.start_t) / anim.duration

