Warning: 13 Reasons Why spoilers are ahead.
The mystery of who killed Bryce Walker (Justin Prentice) looms over 13 Reasons Why season 3, and the key to solving this mystery comes back to what happened the night of homecoming.
A series of events at the homecoming game led to Bryce's death, and also to the drama that surrounds our core group in season 3. Since so much occurred on this fateful night, let's break it all down.
Before The Homecoming Game
The homecoming game pits Liberty High and Hillcrest against one another. Bryce is a new student at Hillcrest, having left Liberty following the events of season 2's trial. A convicted rapist, Bryce is not particularly popular at Hillcrest, but definitely not popular at Liberty. Jessica (Alisha Boe) plans a protest against rape culture in the middle of the game upon hearing that Bryce is returning to their campus.
Before the homecoming game, Bryce heads to the school and attempts to make amends with people he's done wrong. He talks to his ex-girlfriend Chloe (Anne Winters) who reveals she was pregnant and had an abortion. Zach (Ross Butler) helped her during that difficult time, which seems to upset Bryce.
Bryce confronts Montgomery (Timothy Granaderos) in the locker room and tells him that he knows Monty sexually assaulted Tyler (Devin Druid) last year. Bryce threatens Monty that he'll go to the police and spill about a ton of criminal stuff that Monty did, should Monty ever even look at Tyler again. Charlie (Tyler Barnhardt) witnesses this conversation, pretty shocked by Monty's casual admittance of crime against Tyler.
Later that night, Bryce goes to his friend Ani (Grace Saif), the daughter of his grandfather's nurse, whom he had been sleeping with for weeks. He kisses her, which Clay (Dylan Minnette) sees.
Bryce also finds Jessica before the game and tells her to meet him at the dock. He has something to give her, but doesn't tell her what it is. He tells her that if she feels more comfortable doing so, she can bring a friend along.
At The Homecoming Game
During the game, Bryce goes after Zach for "stealing" Chloe from him. Monty also gets in Bryce's face, and the two exchange barbs throughout the game. Monty sees new character Winston, the boy that Monty hooked up with and then beat up at the party months before, watching the game and taking photos.
This conversation with Bryce doesn't stop Jessica from going through with her protest. Jessica and other members of her sexual assault survivors group strip down and paint red handprints on their bodies, a symbol of all the unwanted contact made against their bodies over the years. During the protest, a member of the Hillcrest team grabs Jessica's breasts, leading to Justin (Brandon Flynn) and the rest of the team attacking the Hillcrest players.
During the fight, Bryce attacks Zach (Ross Butler) over Zach's "relationship" with Chloe, breaking his knees in the process. Clay also tries to attack Bryce, having just witnessed Bryce kiss Clay's crush Ani in the locker room. However, Justin pulls him back, stopping Clay from going through with it.
After The Homecoming Game
Clay texts Bryce threatening messages, to which Bryce just replies "Buddy, let's talk." Bryce also calls Tyler and leaves a message, telling him that he's taken care of his Monty problem.
Monty confronts Bryce at the Hillcrest bus, and threatens him. Bryce tells Monty that he won't go through with his claims, because Monty is just a "coward." Monty then sees Winston, taking photos by his car, and goes up to him to apologize for what he did to him last summer. Winston — not taking a lesson from the last time he asked Monty to hang out — invites him over to his house.
Instead of beating Winston to a pulp, Monty and Winston have sex. When Winston asks Monty if he needs a ride home, Monty says he wants to stay and hook up again — then adds, "But I'm not fucking gay." "You can be whatever you want to be," Winston tells Monty kindly. "No," Monty replies. "I can't."
Zach goes to confront Bryce at the docks, where Bryce is waiting for Jessica. Zach, angry that Bryce broke his knee and therefore ruined his chances at a football scholarship, beats Bryce up until he's a bloody mess. Zach throws Bryce's phone into the river and leaves him there.
It's Alex (Miles Heizer) and Jessica who find him on the dock. Jessica brought Alex with her to hear what Bryce had to say. As Alex attempts to help Bryce up, Bryce lashes out and raves against Zach, threatening to break his other knee and "ruin" his life. Then Bryce looks at Jessica: "You set me up," he says as Alex tries to keep Bryce on his feet. Jessica didn't, but Alex realizes that Bryce's rage will never stop, and that he'll only cause more pain. Alex shoves Bryce, and Bryce tumbles into the water. Jessica and Alex watch as Bryce calls out for help, before he ultimately drowns in the river.