Recording switch press sequences problem

Ok, I got it working alot better. It records the button presses and will play them back, however it seems to mess the timing of the presses up upon playback. I have reviewed the code several times and cannot find out why its doing this. I believe it has something to do with the math to determine the length of the button presses and delay time between them because the play back gets slower the longer you wait from resetting the board as well as the delays getting longer the further into the "show" you get.
Here's the code for a button press and logging the times (each button is a copy of this with the variable names adjusted for the correct button)

//=============Record Show===========
void recordShow(){                                                  
  delay(250);
  unsigned long start_time = millis();                              //Log time recording starts
  bool isrec = true;                                                //Variable to keep recording until REC is pressed again
  memset(show_seq, 0, sizeof(show_seq[0][0])*100*3);                //Clear show
  int counter = 0;                                                  //Counter for show_seq indexing
  digitalWrite(rec_lite,HIGH);                                      //Turn on REC light

  while (isrec == true){                                            //Keep looping until REC is pressed again

    //----------Button 1-------------
    button1.update ();

    int but1state = button1.read ();
    if (but1state == LOW){                                         //Is button pressed?
      digitalWrite(LEDoutput[0], HIGH);                            //Echo button press on output
      show_seq[counter][0] = LEDoutput[0];                         //Register the button pressed in 1st column

      if (counter == 0){
        show_seq[counter][1] = millis() - start_time;              //Register time until button is pressed from start if first button press 2nd column
      }

      else{
        show_seq[counter][1] = millis() - show_seq[counter-1][2];  //Register time since last button press
      }

      while (digitalRead(button[0])==0){                           //Wait until button is released
        delay(10);
      }                                                           
      show_seq[counter][2] = millis() -  show_seq[counter][1];     //Register time button is held 3rd column
      digitalWrite(LEDoutput[0], LOW);
      counter++;
    }

And here's the code for the playback:

//============Play Show============
void playShow(){                                                    
  int counter = 0;
  digitalWrite(pla_lite,HIGH);                                      

  while (show_seq[counter][0] > 0){                                 //Play show as long as there is a button value present
    delay(show_seq[counter][1]);                                    
    digitalWrite(show_seq[counter][0], HIGH);
    delay(show_seq[counter][2]);
    digitalWrite(show_seq[counter][0], LOW);
    counter++;
  }
  digitalWrite(pla_lite,LOW);                                       //Turn off play light
}

Let me know if you want to see the entire program.