The Archangel Michael (Paul Bettany) falls to Earth in Los Angeles and cuts off his wings. He steals a police car after a policeman is killed by another officer who is possessed. He travels towards the Paradise Falls Diner, near the edge of the Mojave Desert. Meanwhile, Kyle (Tyrese Gibson), a single father driving to Los Angeles, stops at the diner. He meets the owner, Bob Hanson (Dennis Quaid); Bob’s son, Jeep (Lucas Black); Percy (Charles S. Dutton), the short-order cook; Charlie (Adrianne Palicki), a pregnant waitress; Howard (Jon Tenney) and Sandra (Kate Walsh) Anderson, a married couple; and Audrey (Willa Holland), their rebellious teenage daughter. An old woman (Jeanette Miller) enters the diner and begins taunting the diner’s patrons. When Howard confronts her, she rips his throat open, screeches that they are all going to die, and climbs up the ceiling. Kyle shoots her before she can kill Jeep. Percy, Kyle, Sandra, Audrey and Charlie try to get Howard to the hospital but they are forced to turn back after passing through a swarm of flies.
Michael arrives and arms the patrons as the entire sky turns black. Hundreds of cars approach, filled with possessed people who begin to attack the diner. Michael leads the patrons in the fight, but Howard is dragged away. Later, Michael explains that God has lost faith in mankind and has sent His angels to destroy the human race. He also reveals that Charlie’s baby must stay alive, as it is destined to be the savior of mankind; Michael disobeyed God’s order to kill Charlie’s baby, as he still has faith in humanity. The next morning, Sandra discovers Howard crucified behind the restaurant and covered with huge boils. She tries to rescue him, but he violently explodes into acid. Percy dies shielding Sandra from the blast. Sandra is driven insane and must be restrained. Meanwhile, the remaining survivors hear a radio transmission that reveals there are other pockets of resistance. One such refuge is nearby, but Michael advises them not to go, since they would be too vulnerable on the move.
That night, a second wave of possessed attack. Kyle is lured into a trap and killed and Charlie goes into labor. Audrey and Michael help her deliver the baby as trumpets sound, signaling the approach of the Archangel Gabriel (Kevin Durand). In a panic, Sandra breaks her restraints and tries to give the baby to the possessed, but Michael kills her. Moments later, Gabriel enters the diner and seriously injures Bob. Michael urges the group to escape and tells Jeep to “find the prophets, learn to read the instructions”. The hordes of possessed humans are unable to approach Charlie’s baby; Jeep, Audrey, Charlie, and the baby go to Michael’s cruiser. Gabriel and Michael fight to a standstill before Gabriel stabs Michael through the chest with his morning star. Michael dies and his body disappears. Dying, Bob uses a lighter engraved “hope” to ignite the diner’s gas main and blow up the diner, incinerating himself and the remaining possessed.