The Last Picture Show

In 1951, Sonny Crawford (Timothy Bottoms) and Duane Jackson (Jeff Bridges) are high-school seniors and friends in a small, declining north Texas town, Anarene. Duane is dating Jacy Farrow (Cybill Shepherd), the prettiest (and wealthiest) girl in town. Sonny decides to break up with girlfriend Charlene Duggs (Sharon Ullrick).
At Christmastime, Sonny begins an affair with Ruth Popper (Cloris Leachman), the depressed, middle-aged wife of his high-school coach, Coach Popper (Bill Thurman). At the Christmas dance, Jacy is invited by Lester Marlow (Randy Quaid) to a naked indoor pool party, at the home of Bobby Sheen (Gary Brockette), a wealthy young man who seems a better prospect than Duane. Bobby tells Jacy he isn't interested in virgins and to come back after she's had sex.
The group of boys take their young intellectually disabled friend, Billy (Sam Bottoms), to a prostitute to lose his virginity but she hits Billy in the face when he ejaculates prematurely. When Duane and Sonny take Billy back home, Sam "the Lion" (Ben Johnson) tells them that since they cannot even take care of a friend, he is barring them from his pool hall, movie theater and cafe. Sonny later sneaks into the cafe and accepts the offer of a free hamburger from the waitress, Genevieve (Eileen Brennan), when Sam walks in and discovers him. Once Sam sees Sonny's genuine affection for Billy he accepts his apology.
Duane and Sonny go on a weekend road trip to Mexico, an event that happens off-screen. Before they drive off, Sam comes to encourage them about their trip and gives them some extra money. In the next scene they return hungover and tired and eventually learn that during their absence Sam has died of a stroke. He left the town's movie theater to the woman who ran the concession stand, the cafÃ© to Genevieve, $1000 to Joe Bob Blanton, and the pool hall to Sonny.
Jacy invites Duane to a motel for sex but he is unable to perform. She loses her virginity to him on their second attempt and then breaks up with him by phone. When Bobby marries another girl, Jacy is disappointed. Out of boredom, she has sex with Abilene (Clu Gulager), her mother's lover, though he is cold to her after their rendezvous. Jacy then sets her sights on Sonny, who drops Ruth without announcement. Duane quarrels with Sonny over Jacy, "his" girl and hits him over the head with a bottle. Duane then decides to join the Army to fight in Korea.
Jacy suggests to Sonny that they elope. On their way to their honeymoon, they are stopped by an Oklahoma state trooper; Jacy left a note telling her parents all about their plan. The couple are brought back to Anarene. On the trip back, Jacy's mother Lois (Ellen Burstyn) admits to Sonny she was Sam the Lion's paramour and tells him he was much better off with Ruth Popper than with Jacy.
Duane returns to town for a visit, before shipping out for Korea. He and Sonny are among the meager group attending the final screening at the movie house, which is closing down. The next morning, after Sonny sees Duane off on the Trailways bus, Billy is run over and killed as he sweeps the street. An upset Sonny seeks comfort from Ruth. Her first reaction is to vent her hurt and anger but then she takes his outstretched hand.

Question: who does sonny have affection for?
Answer: billy