The film opens with a short voice-over monologue voiced by M. Emmet Walsh as various images of the Texas landscape are shown. The film then shifts to a conversation between Abby (Frances McDormand) and Ray (John Getz) in a car as it drives through a heavy downpour at night. They seem to be discussing Abby's bad marriage and Ray indicates that he's driving her to Houston. But instead of driving Abby to Houston, Ray drives to a motel and they have sex. We later find out that Julian Marty (Dan Hedaya), who owns a Texas bar, has suspected Abby's affair with Ray, one of his bartenders, so he hires private detective Loren Visser (M. Emmet Walsh) to take photos of them.When Visser reports back to Marty, he teases him about being cuckolded. The morning after their tryst, Marty makes a silent phone call to Ray and Abby.The following day Ray goes to the bar to collect his earnings, two weeks worth of work, but instead confronts Marty and quits his job. Marty threatens Ray's life and advises him not to trust Abby, that she will one day tell him she "hasn't done anything funny" and he won't believe her.Marty then hires Visser to kill the couple. Visser suggests he take a fishing trip to Corpus Christi to establish an alibi. He then breaks into Ray's home, steals Abby's gun, and photographs the sleeping couple through the bedroom window.Visser presents an edited photo of their fake corpses to Marty, who dumps four dead fish on his desk. Marty goes to the bathroom to vomit, then opens the safe to give Visser his $10,000 fee. Visser then shoots Marty with Abby's gun in a double cross, leaving her gun at the scene as evidence that she killed Marty. But he accidentally leaves his cigarette lighter and does not realize that Marty has stolen one of the incriminating photographs and locked it in the safe.Ray returns to the bar to get his last paycheck and accidentally kicks Abby's gun, firing it. He finds a motionless Marty and decides to cover up the murder. He cleans up the blood and disposes of evidence in a backyard incinerator, loading Marty's body into his back seat with Abby's gun in the body's coat pocket. While Ray is driving down a lonely country road at night to dispose of the body he sees that Marty is still alive and stops the car and runs into a field. When he catches his breath and returns to the car, Marty is out of the car slowly crawling down the road. Ray struggles to get him back into the car as a truck approaches. The scene jumps to Ray digging a grave in a freshly plowed field. As he throws dirt onto Marty's body, Marty pulls the gun out and tries twice to shoot Ray, but the gun just clicks at the empty chambers. Ray takes the gun and buries Marty alive. Ray calls Abby from a phone booth and tells her he loves her, and she thanks him. Ray suspects Abby tried to kill Marty by finding her gun at the scene.Visser burns the doctored photos, but realizes one is missing. He assumes Marty must have locked it in the bar's safe when he was taking out his payment. It is then that he also realizes that he left his cigarette lighter in Marty's office.A distraught Ray tells Abby, "I cleaned up your mess." Abby insists she "hasn't done anything funny." While arguing they are interrupted by a telephone call from Visser, who says nothing. Abby tells Ray that it was Marty again. A confused Ray storms out. At this point they both think the other has done something to harm Marty.Meanwhile, the other bartender, Meurice, listens to several old phone messages from Marty, accusing him or Ray of stealing money from the safe. Meurice arrives at Ray's house and accuses him of stealing the money. Ray is silent, hiding the blood in the back seat of his car.Visser goes to the bar to get the photo and the lighter. As he takes a hammer to the safe he is interrupted by Abby, who wants to find out why Ray has been acting so strangely. Visser hides while Abby finds the bar ransacked and bloodstained.Abby has a dream about Marty. She first thinks it's Ray in the dream until she realizes it's Marty warning her, before he vomits blood, "he'll kill you too." After Abby wakes up from her dream she finds Ray at his apartment, packing to leave. She tells him she thinks he killed Marty because he refused to pay him, and then broke into the safe and fought with him. Ray explains that he found her gun at the bar and that he buried Marty alive. She leaves with the misunderstanding still not resolved. Meurice later tries to assure her that Marty is still alive.Ray returns once more to the bar and finds Visser's faked photo, and leaves for Abby's apartment realizing she might be in danger. While there he notices headlights in his rear view mirror. When Abby arrives home she turns on a light and finds Ray looking out the large window. He tells her to turn off the light because he thinks someone is watching. She thinks Ray is threatening her and turns the light back on. Visser is on a nearby rooftop with a rifle, and shoots Ray dead through the window. Barely escaping a second shot, then hearing approaching footsteps, Abby knocks out the light bulb with her shoe. She hides in the bathroom as Visser arrives. He then enters the bathroom to kill her, muttering, "I don't know what you two thought you were going to pull off," but he finds the bathroom empty and the window open. Reaching out the window, he opens it to the next room, but Abby slams the sash down on his wrist and drives a knife through his gloved hand into the sill. Visser shoots holes through the wall, then punches through and removes the knife while Abby retreats and waits outside the bathroom, holding the gun Ray returned to her.As Visser is about to emerge, she fires through the door, hitting him. "I'm not afraid of you Marty," Abby says. Visser, lying on the bathroom floor, mortally wounded, bursts into cackling laughter, saying, "Well, ma'am, if I see him, I'll sure give him the message." The scene then focuses on a water droplet forming directly over his head from the pipes under the bathroom sink and as the droplet falls the screen cuts to black.
Output: Question: Where is Visser?, Answer: On a nearby rooftop