Chris Taylor (Charlie Sheen) is a young American who has abandoned a privileged life at a university to enlist in the infantry, volunteering for combat duty in Vietnam. The year is September 1967. Upon arrival in Da Nang, South Vietnam, he sees dead soldiers in body bags being loaded into his plane, but more distressing to him is the shellshocked state of a departing soldier with the "thousand-yard stare." Taylor and several other replacements have been assigned to Bravo Company, 25th Infantry division, "somewhere near the Cambodian border." Worn down by the exhausting work and living conditions, his enthusiasm for the war wanes quickly and he develops an admiration for the more experienced soldiers, despite their reluctance to extend their friendship.
One day, another new arrival, platoon commander Lieutenant Wolfe (Mark Moses) discusses the plans for a patrol later that night with the platoon sergeants: the compassionate Sergeant Elias (Willem Dafoe), harsh but hard core Staff Sergeant Barnes (Tom Berenger), cowardly, sycophantic "lifer" Sergeant Red O'Neil (John C. McGinley), and drug addict Sergeant Warren (Tony Todd). Barnes and Elias argue over whether to send the new men out on a patrol that is likely to be ambushed. O'Neil insists that the new troops go out instead of several men under him who are nearly finished with their tours of duty. Barnes agrees, only on the condition that O'Neil goes out as well.
That night, North Vietnamese soldiers set upon Taylor's sleeping unit. Gardner (Bob Orwig), a fellow new recruit, is killed, and another soldier, Tex (David Neidorf), is maimed. Despite having passed the watch duty to Junior (Reggie Johnson), a more experienced but consistently irresponsible soldier who fell asleep, Taylor is blamed for the casualties (O'Neil is also to blame, having thrown the grenade that maimed Tex). Immediately after the fighting, Taylor discovers a light wound to his neck, and he is sent to the field hospital for treatment.
A few days later, Taylor returns to his unit from the hospital and, through a soldier named King (Keith David), gains acceptance from the "heads", a tight-knit group led by Elias that socializes, dances, and takes drugs in a private bunker. Next door, Barnes leads the more traditional members of the unit whom drink beer and play cards and don't smoke marijuana. Taylor becomes a more seasoned soldier as the patrols continue and soon no longer stands out amongst the others.
During one patrol on New Years Day, January 1, 1968, the platoon finds what appears to be an abandoned bunker. Elias explores a series of tunnels connected to the bunker. Two members of the platoon, Sandy (J. Adam Glover) and Sal (Richard Edson) are killed when they stumble upon a booby trap attached to a box of documents. Shortly after, a soldier named Manny Washington (Corkey Ford) goes missing. His mutilated body is found tied to a post close by. The platoon is infuriated by the senseless death of their comrade and are ordered to report to a nearby village of South Vietnamese citizens.
The platoon reaches the village, where a food and weapons cache is discovered. The other soldiers explore the village. In one house, Taylor discovers a mute and mentally disabled boy and his mother hiding in a hole beneath the floor. Taylor harasses and taunts the retarded boy by shooting his rifle at his feet, but stops himself short of killing the boy. However, Bunny (Kevin Dillon) takes over and beats the boy to death with his gun, even though Sgt. O'Neil orders them to leave the hut. While questioning the village chief, Barnes loses his patience and senselessly kills the man's wife despite his denials that they are aiding the Viet Cong. Barnes is about to murder the man's young daughter to force him to tell them to where the enemy is when Sergeant Elias arrives at the scene and starts a fistfight with Barnes. Lieutenant Wolfe, passive during the shooting of the wife, eventually ends the fight, and relays orders from his own superior officer to burn the village. As the men leave, a group of four soldiers, including Bunny and Junior, drag a young Vietnamese girl into the bushes with the intention of raping her. Taylor comes upon them and stops the group from raping the girl. His comrades ridicule him for stopping them.
Upon returning to base, Elias reports Barnes' actions to Captain Harris (Dale Dye), who cannot afford to remove Barnes due to a lack of personnel. However, Harris threatens to court martial Barnes if there is evidence that he murdered an unarmed civilian. O'Neil and Bunny, nervous about the possibility of an investigation, speak to Barnes and Bunny suggests "fragging" Elias. A narrating Taylor speaks of this as "a civil war in the platoon. Half with Elias, half with Barnes." Taylor talks with Elias one night and Elias tells him that the United States is due for a loss in war because they'd been mostly successful in past wars. He also confesses that he's disillusioned with America's mission in Southeast Asia, that he used to believe it was winnable even a few years ago, but knows now that it's not.
On their next patrol the platoon is ambushed and pinned down in a firefight by unseen enemy soldiers. Flash (Basile Achara) is killed and Sergeant Warren (Tony Todd) and Lerner (Johnny Depp) are badly injured in the resulting skirmish. Lieutenant Wolfe calls in wrong coordinates for artillery support, resulting in the deaths of Fu Sheng (Steve Barredo), Morehouse (Kevin Eshelman), and Tubbs (Andrew B. Clark) and the severe wounding of Ace (Terry McIlvain). Big Harold (Forest Whitaker) has his leg blown off by a trip-wired booby trap while trying to escape the artillery barrage. Elias, with Taylor, Rhah (Francesco Quinn), and Crawford (Chris Pedersen), go to intercept flanking enemy troops. Though Lt. Wolfe is commanding officer, Barnes takes command. He orders the rest of the platoon to retreat to be airlifted from the area, and goes back into the jungle to find Elias' group. After sending Taylor, Rhah, and Crawford (who has been shot in the lung) back, Barnes finds Elias. The two stare at each other for a few moments and then Barnes fires three rounds into Elias' chest and leaves him for dead. Barnes runs into Taylor and tells him that Elias is dead and that he'd seen his body nearby. Barnes orders Taylor back to the landing zone. After they take off, the men see a severely wounded Elias emerge from the jungle, running from a large group of NVA soldiers. He dies after being shot several more times by the NVA while the American helicopters futilely attempt to provide him cover overhead.
At the base, Taylor tries to talk his dwindling group of six "heads" into killing Barnes in retaliation, claiming that when he'd met Barnes in the forest after shooting Elias, that the look on Barnes' face told him the truth. While King agrees, Doc Gomez (Paul Sanchez) believes they should wait for "military justice" to decide Barnes' fate. Rhah reminds Taylor how much he admired Barnes when he first arrived, and that Barnes isn't meant to die, noting that on several previous occasions Barnes has sustained wounds that ought to have proved mortal: "the only thing that can kill Barnes, is Barnes." Barnes then appears, very drunk with a bottle of bourbon, having overheard Taylor calling for his murder. He enters the room, daring them to kill him. No one takes up the offer but as Barnes leaves, Taylor attacks him. Barnes quickly gets the upper hand, pins Taylor down and holds a knife to his face. Rhah urges him not to do it, telling Barnes he'll be court-martialed and imprisoned, and he leaves, slashing Taylor under the eye.
A few days later, the platoon is sent back to the ambush area in order to build and maintain heavy defensive positions against a potential attack. Rhah is promoted to Sergeant, commanding the remains of Elias' squad. The platoon is so severely weakened, though, that there are numerous gaps in their defense. When this fact is pointed out to him, Lt. Wolfe only replies that he doesn't "give a fuck" any more. The troops try to prepare for the incoming battle, during which they know the majority of them will die. Just hours before nightfall, King is allowed to go home as his tour of duty has come to an end. O'Neil tries to use Elias' R&R days for himself in order to escape the impending battle (in which he believes he will die). When he asks Barnes for permission, Barnes refuses, saying, "Everybody gotta die some time, Red." Junior tries to escape the battle by spraying mosquito repellent onto his feet and passing it off as trench foot, a ploy that Barnes recognizes right away. Bunny states that he feels no remorse for the murders he has committed, saying that he enjoys Vietnam, and goes on to proclaim himself to be "Audie Murphy", a famous and highly decorated World War II hero.
Francis (Corey Glover), one of the last few remaining "heads", is assigned to the same foxhole as Taylor. That night a large attack occurs and the American defensive perimeter is broken and the camp overrun by hundreds of attacking North Vietnamese troops. Taylor and Francis take on and cut down several attacking enemy troops until they both pause when they hear signal whistles from the unseen NVA sergeants ordering their men to cease fire. Hearing a Vietnamese voice over a bullhorn and understanding that the NVA are ordering RPGs up to the line to blow up the foxhole they are in, Taylor grabs Francis and both of them crawl out of the foxhole seconds before it's hit by an RPG. Taylor and Francis then attack and kill several enemy soldiers that overrun their destroyed foxhole until Taylor loses it during the fight and charges off into the carnage, shooting one enemy soldier after another.
Meanwhile, the NVA attack against the base continues relentlessly. The command bunker is destroyed by a NVA suicide bomber (Oliver Stone makes a cameo as the doomed battalion commander inside the bunker). During the massed North Vietnamese Army attack, many members of the platoon are killed, including Lt. Wolfe, Parker (Peter Hicks), Doc, Bunny, and Junior when their foxholes are overrun. O'Neil survives only by hiding himself under a dead body. The desperate company commander, Captain Harris, orders the Air Force pilots to "expend all remaining" inside his perimeter. During the chaos, Barnes and Taylor come face-to-face. As a crazed Barnes is about to beat Taylor with a shovel, the two are knocked unconscious by the last-ditch American napalm attack.
A wounded Taylor regains consciousness the next morning with a serious wound to his lower abdomen. He soon finds Barnes, who is also wounded after being shot in both legs during the battle. Taylor takes an AK-47 rifle from a dead enemy soldier and aims it at Barnes, who lays helpless on the ground. Nonetheless, Barnes feels at first not threatened, and he dismissively orders Taylor to call a medic. When Taylor does not comply, but instead continues to aim his weapon, Barnes (deranged to the last) dares him to pull the trigger by saying: "Do it!" Taylor shoots Barnes three times in the chest, killing him. Taylor then drops his rifle, collapses, and awaits medical attention.
Interestingly, although not in the script, Taylor is seen on the verge of pulling the pin of a grenade that he found, only to drop it as reinforcements come to Taylor. (Charlie Sheen thought that Taylor would be committing suicide after killing Barnes. Oliver Stone thought that the mistake was good so he decided to keep it in the film.)
Francis emerges from his foxhole and stabs himself in the thigh with a bayonet in order to be evacuated as a casualty. O'Neil is found by other Americans, and Harris (much to O'Neil's distress) gives him command of the platoon. As he is loaded onto the helicopter, Taylor is reminded by Francis that because they have been wounded twice, they can go home. Back at the bombed-out command post, hundreds of NVA bodies are being dumped into mass graves. After bidding farewell to Rhah, Francis, Tony Hoyt (Ivan Kane) and Ebenhoch (Mark Ebenhoch) (his last surviving friends in the platoon; the other survivors are Rodriguez (Chris Castillejo), Huffmeister (Robert Galotti), and O'Neil), Taylor boards his helicopter. The helicopter flies away and Taylor weeps as he stares down at the destruction, while he (from a future perspective) narrates that he will forever be in Vietnam, with Barnes and Elias battling for what Rhah called "possession of his soul", and that he believes he and other veterans must rebuild themselves, and find goodness and purpose in their lives.