Plot
Career criminal Neil McCauley (
Robert De Niro) and his crew — Chris Shiherlis (
Val Kilmer), Michael Cheritto (
Tom Sizemore), Trejo (
Danny Trejo), and Waingro (
Kevin Gage) — perpetrate an
armored car heist, stealing
$1.6 million in
bearer bonds from
money launderer Roger Van Zant (
William Fichtner). During the heist, Waingro impulsively kills one of the guards, forcing the crew to eliminate the remaining two guards out of necessity. An infuriated McCauley tries to kill Waingro afterward, but Waingro escapes. McCauley's
fence Nate (
Jon Voight) sets up a meeting with Van Zant to sell the bonds back. Van Zant ostensibly agrees, but instructs his men to kill McCauley as a warning to other thieves. With backup from his crew, McCauley thwarts the ambush and vows revenge.
Lieutenant Vincent Hanna (
Al Pacino) of the
LAPD Robbery-Homicide Division heads the investigation of the armored car heist and learns McCauley's crew plans to rob a
precious metals depository next. Hanna and his unit stake out the depository, but when an officer inadvertently makes a noise, McCauley is tipped off, and the crew abandon the robbery. Despite the police surveillance, McCauley and his crew decide to go through with a bank holdup with an estimated $12 million payoff. Waingro is revealed to be a
serial killer of prostitutes, with his latest victim falling under Hanna's jurisdiction. Hanna discovers that his wife Justine (
Diane Venora) is having an affair and moves to a hotel, and McCauley catches Charlene Shiherlis (
Ashley Judd) cheating on Chris with Alan Marciano (
Hank Azaria), a
Las Vegas liquor salesman with a criminal past.
.
Hanna deliberately intercepts McCauley during a surveillance operation and invites him to coffee, where he concedes the problems of his personal life; his concern for his
depressed stepdaughter Lauren (
Natalie Portman) and the failure of his third marriage due to his obsession with work. Likewise, McCauley confesses that life as a criminal forbids attachments and stresses mobility, making his relationship with his girlfriend Eady (
Amy Brenneman) tenuous. Having met face to face, Hanna and McCauley share a mutual respect, but readily admit that neither will hesitate to kill the other if the circumstances demand it.
.
Trejo is compromised just hours before the bank robbery. In need of a new getaway driver, McCauley recruits Donald Breeden (
Dennis Haysbert), an ex-convict frustrated with his demoralizing position as a short order cook at a diner. Hanna's unit is alerted to the robbery in-progress by a confidential
informant and surprises McCauley's crew as they exit the bank. Cherrito, Breeden, and several police officers, including Detective Bosko (
Ted Levine), are killed in the ensuing shootout. McCauley narrowly escapes with an injured Chris and leaves him with a doctor (
Jeremy Piven) to treat his wounds. He tracks down Trejo, who he finds at his home beaten to a bloody pulp. Trejo admits that Van Zant's men called in the tip on the robbery from information Waingro provided. McCauley executes Trejo at his request, then hunts down and kills Van Zant. He makes new arrangements to flee to
New Zealand with Eady, who is now fully aware of his criminal activities. The police surveil Waingro in a hotel near the airport, and Hanna attempts to bait McCauley into coming out of hiding by releasing Waingro's whereabouts to the network of
bookies,
bail bondsmen, and snitches he hopes will spread the word.
.
Charlene leaves Chris and goes with Marciano to a police
safe house, where Sergeant Drucker (
Mykelti Williamson) threatens to charge her as an accomplice and send her son to a foster home if she does not betray Chris to the police. Charlene initially agrees, but, when Chris shows up in disguise, she surreptitiously warns him about the police presence, and he slips through the
dragnet. Hanna finds Lauren unconscious in his hotel room from a
suicide attempt and rushes her to the hospital. As he and Justine wait in the lobby for the news of her recovery, they admit their marriage will never work. McCauley and Eady are en route to the airport when Nate calls with Waingro's location, and the temptation proves to be too much for the normally disciplined McCauley, who risks his assured freedom by detouring to exact his revenge. McCauley infiltrates the hotel, creates a distraction by pulling a fire alarm, and kills Waingro. Moments away from escape, he is forced to abandon Eady when he spots Hanna approaching in the crowd. Hanna chases McCauley into a field outside the
LAX freight terminal, and mortally wounds him. He then holds McCauley's hand as he dies.