Odd Thomas

Odd Thomas (Yelchin) is a psychic who lives in a small town in California. He describes his ability as, "I see dead people, but then, by God, I do something about it." One morning the ghost of a teenage girl, Penny Kallisto, silently leads him to Harlo Landerson. Odd accuses Harlo of raping and murdering Penny. Harlo flees. Odd chases him into a child's bedroom in a stranger's house. Harlo and Odd fight and Harlo is knocked unconscious. Odd's friend, police chief Wyatt Porter (Dafoe), is aware of Odd's psychic gifts and promises to spin the story to keep public attention away from him.
Odd has a vision of faceless people wearing bowling shirts who cry out to him to save them. A faceless gunman shoots them all, including Odd. Recovering from the disturbing dream, he goes to his job as a short-order cook. He serves lunch to a strange man named Hensley, whose hair resembles some kind of mold. Hensley is surrounded by dozens of bodachs, invisible creatures that feed on evil and carnage that only Odd can see. Odd's co-worker, Viola Peabody (Mbatha-Raw), recounts a strange dream in which she saw herself shot dead with another man. The man's clothing is identical to that worn by the faceless people in Odd's vision.
Odd uses his psychic magnetism to find Hensley; the trail leads to the mall where Odd's girlfriend Stormy (Timlin) works at an ice cream shop. Odd borrows Stormy's scooter to follow Hensley home. When Hensley leaves again, Odd breaks into his house. He finds an ashtray with several brands of cigarette butts in it, indicating that Hensley had visitors. Odd learns that the man's real name is Bob Robertson; he and Stormy refer to him as "Fungus Bob". Odd finds a file containing newspaper clippings of mass murderers, arranged by name. There is also a blank calendar page for the next day; Odd realizes that Robertson is planning something bad on that date. Odd reports this to Chief Porter, who assigns two deputies to follow Fungus Bob.
Odd meets Stormy for dinner in the belfry of a church. They see Fungus Bob approaching and they flee to the sacristy. As they escape the church, Robertson destroys the sacristy. Stormy calls Chief Porter, who finds the church vandalized but no evidence to link it to Robertson.
Odd's psychic magnetism leads him and Stormy to a bowling alley, where the bowling shirts from his vision are sold. Chief Porter sends Officer Simon Varner (Tortorella) to watch the place on Odd's advice. Varner asks Odd about Robertson and is surprised to learn that Odd had encountered him only a few hours ago. He presses Odd for more information. Stormy interrupts by asking about Varner's visible tattoo, the letters "POD". Varner dismisses it as an embarrassment from his youth, an abbreviated obscenity that he won't discuss.
Viola remembers more details of her dream; she tells Odd that she and the man in the bowling shirt were not the only victims of the shooting, and a large group of people were killed. Odd sees bodachs hovering over Vi's daughters, and he advises her to leave town with her daughters immediately.
While driving home, Stormy is overcome with fear for Odd's safety and he tries to comfort her. They hear a woman screaming. Odd finds Lysette, a friend of Chief Porter and his wife, who has been mauled to death by dogs resembling those at Robertson's home. Another man tried to rescue the woman by shooting the dogs, but was too late. Returning to Stormy's apartment, Odd sees a van watching the building. After securing Stormy, he returns to his apartment.
He finds Fungus Bob shot to death in his bathtub, with evidence framing Odd for the murder. Odd surmises that if he goes to the police, Porter will be required to arrest him based on the evidence, preventing him from preventing the next day's disaster. He discovers that Bob has been dead for quite some time and deduces that the encounter at the church was with the dead man's restless spirit. Wrapping the body in sheets, Odd dumps the corpse in the execution chamber of an abandoned prison. As he drives back through town, the magnitude of the coming disaster is indicated by the swarming of hundreds of bodachs.
Chief Porter is shot in a home invasion. Odd rushes to the hospital and learns that Porter is alive thanks to a metal trinket Odd had given him, but in serious condition. Returning to Bob's home, Odd finds a receipt for a moving van and improvised explosives, and browser bookmarks for Satanic websites. Robertson's poltergeist destroys the house as Odd escapes.
Odd investigates Bob's fatal bullet wound, and finds a tattoo matching Varner's. He realizes that "POD" is an abbreviation for "Prince of Darkness". Odd realizes that Robertson was eliminated by his co-conspirators because Odd could identify him.
Odd's psychic magnetism leads him back to the mall. He finds Officer Eckles has murdered the mall security staff. Odd disables him with a baseball bat. He takes Eckles's pistol and seeks out Varner. Hearing screams from the end of the mall where Stormy works, he hurries to the site. He spots another gunman firing off an automatic weapon. Odd fires at him with Eckles's weapon as the gunman has emptied his magazine, he tries to reload Odd continues to shoot at him while being surrounded with bodachs. When the gunman inserts another magazine and is about to kill Odd, Odd reaches him and kills him instead. The lingering spirit of Lysette appears and directs him to the loading dock. Odd removes the gunman's mask and recognizes him as the man who tried to rescue Lysette. Odd rushes to the loading dock where he discovers Bob's moving van packed with explosives, apparently part of a plan to kill the shoppers in the mall. Varner emerges and shoots Odd, but Odd manages to start the van and drive it away from the mall. Varner clings to the outside of the van and attempts to kill Odd. Odd jumps from the van as Varner enters the cab, and the van crashes into a man-made canal and explodes, incinerating Varner but killing no one else. A black, shrieking spirit escapes from the flames.
Odd wakes in the hospital. Stormy is attending him. Viola greets him and tells him that Porter has been released from intensive care. Odd is a local hero. He retreats to Stormy's apartment to enjoy uninterrupted time with her. Porter, his wife, and Viola arrive and reveal what he already knows: Stormy was killed in the mall shooting and he has been spending time with her lingering spirit. Porter, realizing that Stormy is staying in this world only for Odd, advises him to let her go. Odd bids her a tearful farewell, promising her that they'll be reunited one day.
Odd travels to Las Vegas to continue his crusade to help the living and the lingering dead, believing that he is not yet worthy of an afterlife with Stormy.

Question: Who has officer Eckles murdered?
Answer: The mall security staff.