"Blade Runner" Oscar Pistorius put on his artificial legs and walked across his bedroom before firing four shots through a locked toilet door, killing his cowering girlfriend in cold blood, prosecutors said on Tuesday.
Reeva Steenkamp, a 30-year-old law graduate and model, died after being hit by three rounds from a 9-mm pistol, prosecutor Gerrie Nel said.
Pistorius, 26, wept uncontrollably in court as Nel outlined details of a shooting that has stunned South Africa and the millions around the world who saw the double amputee's track glory as an inspiring tale of triumph over adversity.
Later, in a dramatic affidavit read out by defense lawyer Barry Roux, Pistorius said he had been "deeply in love" with Steenkamp, whom he had been dating since November, and had no intention of killing her.
Having had previous death threats and break-ins, Pistorius said he slept with a 9-mm pistol under his bed in his plush Pretoria home in the heart of a well-secured gated community.
He and Steenkamp went to sleep on Wednesday night - the eve of Valentine's Day - some time after 10 p.m., he said.
However, in the middle of the night, he awoke in pitch darkness and thought an intruder had climbed through a window and entered the toilet, Pistorius said.
Without putting on his prosthetic legs - contrary to the prosecution's version of events - he moved on his stumps into the bathroom adjoining his bedroom and noticed the closed toilet door. He did not realise Steenkamp was behind it, he said.
He shouted for the intruder to get out of his house then fired several shots into the door, before calling to Steenkamp to phone the police.
When she did not respond, he grabbed a cricket bat to beat down the door and found her slumped on the floor, he said.
"I was absolutely mortified by the events and the devastating loss of my beloved Reeva," he said in the affidavit.
As Roux read the statement, Pistorius sobbed unrestrainedly, prompting magistrate Desmond Nair to halt proceedings for several minutes. "You need to concentrate on what's going on," Nair told him.
The bail hearing was adjourned until 0700 GMT on Wednesday.