Thomas Dagget, a Catholic seminary student, loses his faith when he sees visions of a war between angels. Years later, Thomas is a detective with the Los Angeles Police Department. Two angels fall to Earth: Simon briefly enters Thomas' home and warns him of coming events, while Usiel, a lieutenant of the Archangel Gabriel, is killed in an altercation with Simon. Investigating the disturbance, Thomas finds in Simon's apartment the obituary of recently deceased Korean War veteran Colonel Arnold Hawthorne, and a thesis about angels which Thomas himself wrote in seminary. Meanwhile, in Chimney Rock, Arizona, Simon finds Hawthorne awaiting burial and sucks his soul out of his body.
The medical examiner informs Thomas that Usiel's body has no eyes, no bones, hermaphroditism, and the blood chemistry of a fetus. His personal effects include an ancient Bible, with an expanded Book of Revelation that describes a second war in Heaven and prophecy that a "dark soul" will be found on Earth and used as a weapon.
Gabriel arrives on Earth. Needing a human helper, Gabriel catches a disappointed Jerry, a suicide, in the moment of his death. Jerry retrieves Usiel's belongings from the police station while Gabriel destroys Usiel's body in the morgue. Finding Hawthorne's obituary, Gabriel and Jerry head for Chimney Rock. Before Gabriel arrives, at the local reservation school Simon hides Hawthorne's soul in a little Native American girl, Mary, who immediately falls ill and is cared for by her teacher, Katherine.
After finding Usiel's burnt body, Thomas hurries to Chimney Rock. When Gabriel realizes Hawthorne's soul is missing, he confronts Simon. Hawthorne's soul will tip the balance to whichever side possesses it, and a win for the rebellious angels would make Heaven like Hell with Earth in its thrall. Gabriel tortures Simon, but he refuses to reveal its location, so Gabriel kills him. Mary shows signs of possession by Hawthorne, recounting an incident from Hawthorne's harrowing war experiences in first-person perspective. Meanwhile, Thomas examines Simon's remains and questions Katherine. In Hawthorne's home, he finds evidence of war crimes. Thomas visits a church to reflect in and is shaken by a verbal confrontation with Gabriel.
At school, Katherine finds Gabriel questioning the children. After he leaves, she rushes to Mary's home and finds Thomas. As Mary's condition worsens, Katherine takes Thomas to an abandoned mine where she had seen Gabriel. They find angelic script and experience together a terrible vision of the angelic war. Returning to Mary, they find Gabriel and Jerry. Thomas kills Jerry, while Katherine distracts Gabriel when her wild gunshot misses him and blows up Mary's trailer home. They take Mary to a Native American site to be exorcised. In a hospital, Gabriel recruits a new unwilling assistant, Rachael, just as she dies of a terminal illness.