Contemporary India. A majestic fort. A royal dynasty that no longer rules. A king without a kingdom. Yet Eklavya (Amitabh Bachchan), their royal guard, lives in a time warp. He lives only to protect the fort, the dynasty, and the king. For nine generations Eklavya's family has protected Devigarh, a centuries old citadel in Rajasthan.
His marksmanship is the stuff of legends. His unflinching loyalty inspires ballads. Eklavya has spent his entire life serving the royals and closely guarding their secrets but now he's getting old and increasingly blind. Unable to cope with the suffocating customs of his land, the heir, Prince Harshwardhan (Saif Ali Khan), has stayed away in London.
However, the sudden demise of the queen, Rani Suhasinidevi (Sharmila Tagore), forces the Prince back to the kingdom he had left behind. The queen leaves a letter for her son in which she tells him that his biological father is actually Eklavya.
The Prince's return brings a rush of joy into the moribund fort. His mentally challenged twin sister, Princess Nandini (Raima Sen), and his childhood love, Rajjo (Vidya Balan), are delighted to see him. But the joy of reunion is short-lived.
There is unrest in the kingdom: Farmers are being stripped of their lands. The king, Rana Jaywardhan (Boman Irani), influenced by his brother, Rana Jyotiwardhan (Jackie Shroff), supports the atrocities being forced upon the helpless peasants.
The king receives a death threat over the phone. An irreverent police officer, Pannalal Chohar (Sanjay Dutt), is called in to investigate. But he might be too late. The fragile peace of the land is suddenly shattered by a barrage of bullets. Jaywardhan instructs his brother to kill Eklavya in a fit of rage but his brother betrays him and kills him and his driver (Rajjo's father). And amidst the mayhem, the safely guarded secrets of the fort are revealed.
Eklavya suspects Jyotiwardhan and his son, Udaywardhan (Jimmy Shergill), are responsible for Jaywardhan's death. He kills Udaywardhan and leads Jyotiwardhan to Udaywardhan's body, intending to kill him and fulfill his oath, whereupon Jyotiwardhan reveals to Eklavya that it was the prince who ordered the murder of the king. Shouting in denial, Eklavya kills Jyotiwardhan, knowing he must face the young Prince, his own son, in order to finally fulfill his dharma.
Harshwardhan, overcome with guilt, reveals his own hand in the murder of Jaywardhan to Rajjo, who leaves him because his actions also caused the death of her father. When Eklavya comes to the palace to kill the Prince, he explains why he killed the king. The King had murdered the Queen when she, in her semi-conscious state, kept saying Eklavya's name.
Eklavya finally fulfills his dharma, by sparing his son's life and declaring the original Eklavya wrong. Rajjo eventually forgives Harshwardhan because she believes that he is truly sorry for his actions and Pannalal finds a suicide note saying that Udaywardhan and Jyotiwardhan, afraid that they were about to be caught, jumped in front of a train.