       @session.updateKeyValueDb(_.cloneDeep(@surface.world.keyValueDb))
       @session.saveKeyValueDb()
 
+  subscribeShortcuts: ->
+    # Prevent controls (space and arrow keys) from scrolling the page
+    # since they can be used controls when playing the game
+    key?('space, left, up, right, down', 'play-game-dev-level-view-shortcut-scope', (event) ->
+      if event.target == document.body
+        event.preventDefault()
+    )
+
+  unsubscribeShortcuts: ->
+    key?.deleteScope('play-game-dev-level-view-shortcut-scope')
+
   destroy: ->
+    @unsubscribeShortcuts()
     @levelLoader?.destroy()
     @surface?.destroy()
     @god?.destroy()
     @goalManager?.destroy()
     @scriptManager?.destroy()
     delete window.world # not sure where this is set, but this is one way to clean it up
-    $(window).off("keydown")
     super()

      worldCreationOptions = {spells: @spells, preload: false, realTime: true, justBegin: false, keyValueDb: @session.get('keyValueDb') ? {}, synchronous: true}
      @god.createWorld(worldCreationOptions)
      @willUpdateFrontEnd = true

    .catch (e) =>
      throw e if e.stack
      @state.set('errorMessage', e.message)

      creatorString: ''
      isOwner: false
    })

    if utils.getQueryVariable 'dev'
      @supermodel.shouldSaveBackups = (model) ->  # Make sure to load possibly changed things from localStorage.
