Face/Off

FBI Special Agent Sean Archer (John Travolta) survives an assassination attempt by freelance domestic terrorist and homicidal psychopath Castor Troy (Nicolas Cage), but the bullet pierces through Sean's chest and hits his son Michael, killing the boy.
Six years later, Sean's vendetta against Castor culminates in his team's ambush of Troy and his younger brother/accomplice Pollux (Alessandro Nivola) at Los Angeles International Airport. Castor goads Archer with knowledge of a bomb located somewhere in the city set to go off in a few days, but he is knocked into a coma before Archer can learn more.
Sean affirms the threat is real, but is unable to convince Pollux to reveal where the bomb is located. At suggestion of his partner Tito Biondi (Robert Wisdom), Sean secretly undergoes a highly experimental face transplant procedure by Dr. Malcolm Walsh (Colm Feore) to take on Castor's face and appearance. Sean is taken to the same high-security prison where Pollux is, and slowly convinces Pollux that he is Castor, gaining information on the bomb's location. Meanwhile, Castor wakes up from his coma prematurely and discovers his face missing. He calls his gang, and they force Dr. Walsh to put Sean's face on him.
Castor visits the prison and surprises Sean. He taunts his nemesis with how he burned down Dr. Walsh's lab with Walsh and Tito inside to eliminate all evidence of their switch and will take over Sean's life. He leaves Sean to languish while he convinces Pollux to "reveal" the bomb's location in exchange for release from prison. Disarming his bomb in a dramatic fashion, Castor-as-Sean gains respect from Sean's fellow FBI colleagues. Castor gets close to Sean's family that Sean neglected over his vendetta: he romances his wife Eve (Joan Allen) and saves his daughter Jamie (Dominique Swain) from an attempted rapist.
Sean starts a prison riot that allows him to escape, and he retreats to Castor's headquarters. There, Sean meets Sasha (Gina Gershon), the sister of Castor's primary drug kingpin, and her son Adam who reminds Sean of Michael. Sean learns that Adam is Castor's son, whom he once had planned to put under foster care. Castor learns of Sean's escape and hastily assembles a team to raid his headquarters. The raid turns bloody, killing many FBI agents and many of Castor's gang, including Pollux; Sean, Sasha, and Adam are able to escape. Sean's supervisor, Director Victor Lazarro (Harve Presnell) blames Castor for the numerous deaths. Castor, angered over Pollux's death, kills Victor and makes it look like a heart attack. Castor-as-Sean is promoted to Acting Director as plans are made for Lazarro's funeral.
Sean finds safety for Sasha and Adam and approaches Eve. He persuades her to take a sample of Castor's blood and his own to compare their blood types at the hospital where she works to prove he is Sean. Convinced of her husband's identity, she tells him that Castor will be vulnerable at Lazarro's funeral. At the funeral, Sean finds that Castor has anticipated his actions and takes Eve hostage. Sasha arrives, and a gunfight ensues; Sasha manages to save Eve after fatally taking a bullet. Before she dies, Sean promises to take care of Adam for her and not allow him to grow up with a life of crime.
Castor flees the church with Sean following him. After killing two FBI agents, Castor briefly takes Jamie hostage, but she escapes by stabbing him with a butterfly knife Castor ironically gave her earlier for self-defense. A speedboat chase ensues wherein Sean forces Castor to shore by collision, then bests Castor in a melee fight. Castor mutilates his/Archer's face to taunt him but Sean kills him with a spear gun. FBI agents arrive and address Sean by name, having been convinced by Eve of Sean's true identity. After the face transplant surgery is undone, Sean returns home, with Adam having been adopted into his family to keep his promise to Sasha.

Question: What weapon did Sean use to kill Castor?
Answer: A speargun.