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. But 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 Jyotiwardhan to kill Eklavya in a fit of rage but his brother betrays him and kills him and also his driver (Rajjo's father). And amidst the mayhem, the safely guarded secrets of the fort are unveiled.
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 death of the king. Shouting in denial, Eklavya kills Jyotiwardhan, knowing he must face the young Prince Harshwardhan, 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 muttering 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 Chohar finds a suicide note saying that Udaywardhan and Jyotiwardhan scared that they were about to be caught jumped in front of a train.