           console.log "Retries remaining: #{opts.times}".red.bold
           Sync.sleep(opts.wait)
           opts.times -= 1
-          @emit 'retrying', opts
         else
           throw e
 
     # Out of lives, time to give up...
     console.error "Out of lives... I give up.".red.underline
+    @emit 'retryLoopFail', opts, error
     if opts.silent
       @silentErrors = true
       console.error e.message.red.underline


    @registerPlugins()

    @emit "connecting", @client
    @client.connect (err) =>
      if err
        @emit 'connection-error', err
        console.error "Couldn't connect!".red.bold
        console.error err.message.red
      else
        @emit "adventuring"
        Sync (=> @adventure()), (err, result) =>
          @client.end()
          @emit 'adventure-finished', result
          if err or @silentErrors
            @emit 'adventure-error', err
            console.error "Errors occurred!".red.bold
            console.error err.message.red.underline if err
            console.error()

    params ?= []
    queries = render rawQueries ? queries, view
    if split
      @emit 'splitStart', queries, view
      queries = new Splitter(@splitter).split queries
      @emit 'splitFinish', queries, view
    result = null
    count = queries.length
    time 'Total Execution Time', =>
      @emit 'stepStart', queries, view
      for i, query of queries
        i = parseInt(i)
        counter = i
        console.log "\nNow executing #{counter+1} of #{count}"
        console.log "\n#{query}\n".green
        @emit 'queryStart', i, query
        if cb?
          @client.query(query, params, cb)
        else
          if @time
            result = time 'Execution Time', =>
              @client.query.sync(@client, query, params)
        @emit 'queryFinish', i, query
        console.log()
      @emit 'stepFinish', queries, view
      console.log()
    result
