       done()
     else
       $screen
-        .transition(width: finalSize, x: -halfSize, 250, 'easeInOutCubic')
-        .transition(height: finalSize, y: -halfSize, 250, 'easeInOutCubic')
-      setTimeout(done, 500)
+        .transition(width: finalSize, x: -halfSize, 250 * @speed, 'easeInOutCubic')
+        .transition(height: finalSize, y: -halfSize, 250 * @speed, 'easeInOutCubic')
+      setTimeout(done, 500 * @speed)
 
   unattachScreen: (player, slot, klass, done=->) =>
     if arguments.length == 3

      done()
      return

    $sprite.fadeOut 200, =>
      @renderPokemon $spriteContainer, ($image) ->
        $sprite.popover('destroy')
        $sprite.remove()
        $image.hide().fadeIn(200)

    # Don't waste time changing the sprite if we can't see it.
    if @model.getPokemon(player, slot).isFainted()
      done()
    else
      setTimeout(done, 400)

  changeWeather: (newWeather, done) =>
    $overlays = @$('.battle_overlays')
    $overlays.find('.weather').transition(opacity: 0, 500, -> $(this).remove())
    [overlayWidth, overlayHeight] = [600, 300]
    $weather = switch newWeather
      when Weather.RAIN

  returnToLobby: =>
    PokeBattle.navigation.focusLobby()

  changeBattleSpeed: (e) =>
    @speed = Number($(e.currentTarget).val()) || 1

  $pokemon: (player, slot) =>
    if arguments.length == 1
      pokemon = player
