My While Loop Halts my program. Any advice?

So im working on a robot project for uni.
Currently working on facial expressions for my robot.
Got a nokia 5110 screen hooked up to my arduino at the moment and am trying to add a gimicky loading bar animation.
Only issue being is that the while loop im using to create the blocks of the loading bar are causing my program to halt/hang and i have no idea why.
Any advice/help would be awesomesauce.

Heres my code so far

#include <SPI.h> 
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
 
// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
 
#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH  16

int ctStartup = 9;
 
//##############################################################
//######################  SETUP VOID  ##########################
//##############################################################

void setup()  {
Serial.begin(9600);
  
display.begin();

display.setContrast(50); //Sets Display Contrast (Best viewing Setting)
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(7,10); //Set Display Cursor Location to initialise typing
display.println("Initialising");
display.setCursor(24,20); //Shift Typing down 2 pixels x axis same y Position (X,y)
display.println("Robots");
display.display();
delay(2500);


[b]
// THE LOADING BAR BIT 
[/b]

[i]
[b]
display.clearDisplay(); //Display Loading bar upon startup (little bit gimmicky but cool :D)
  display.drawRect(0, 13, 84, 20, BLACK);
  display.display();
  delay(200);
  display.drawRect(3, 15, 2, 16, BLACK);
  display.display();
  delay(200);
  display.drawRect(5, 15, 2, 16, BLACK);
  display.display();
  delay(100);
  display.drawRect(7, 15, 2, 16, BLACK);
  display.display();
  delay(500);
  
  do
  {
     display.fillRect(ctStartup, 15, 4, 16, BLACK);
    display.display();
    ctStartup = (ctStartup + 4);         
  }
  while (ctStartup < 45);
 
  delay(500); 
  display.drawRect(45, 15, 2, 16, BLACK);
  display.display();
  delay(200);
  display.drawRect(47, 15, 2, 16, BLACK);
  display.display();
  delay(200);
  
 do
 {
    display.fillRect(ctStartup, 15, 4, 16, BLACK);
    display.display();
    ctStartup = (ctStartup + 4);    // Displays the cool loading animation uppon startup
 }
 while (ctStartup < 80);
[/b]
[/i]

[b]  
// GETS STUCK HERE NEED IT TO GO ONTO THE STUFF BELOW :)
[/b]

display.clearDisplay(); //BATTLE ROBOTS Text
display.setTextSize(2); //Sets Larger text (MAY NEED TO CHANGE)
display.setTextColor(BLACK);
display.setCursor (7,20); //MAY NEED TO CHANGE TO FIT TEXT!!
display.println("BATTLE");
display.setCursor (24,20); //MAY NEED TO CHANGE!!!
display.println("ROBOTS");
display.setCursor (32,7);
display.println("INITIALISED");
delay(1000);
}

void loop(){
}

Dont worry guys, my amigo has just informed me i forgot to put the display.display(); at the end of the Battle robot code -_- small mistake that i was too blind to see

You have a lot of delay()s. They can't be helping. The demo several things at a time shows how to manage time without using the delay() functions.

...R