Opener Yashasvi Jaiswal smashed a rapid hundred before retiring hurt as India stretched their overall lead to 322 with eight wickets in hand to take control of the third Test against England in Rajkot on Saturday.
The hosts are left with 10 players for the rest of the match after Ravichandran Ashwin withdrew on Friday night due to a family emergency.
Mohammed Siraj (4/84) and Kuldeep Yadav (2/77) made up for the off-spinner's absence as they combined to skittle out England - who had started the day on a solid 207/2 - for 319 in reply to India's first innings total of 445.
India finished day three on 196/2 but Jaiswal, struggling with a back spasm, retired hurt after his scintillating 104, which included five sixes and nine fours.
Shubman Gill was unbeaten on 65 with nightwatchman Kuldeep on three at the other end.
"Since Ashwin is not available, the responsibility was on other bowlers to deliver," Siraj said afterwards.
"Initially they went after us but we waited for them to make mistakes and did not try anything extraordinary."
There was no inkling of England's batting meltdown when they resumed play with eight wickets left at the Saurashtra Cricket Association Stadium.
For many it was Joe Root's debatable reverse scoop when on 18 - attempted against India's premier bowler Jasprit Bumrah - that shifted the momentum in the hosts' favour.
Root has not been in great form in this series, and his lean run continued as Jaiswal took the tricky catch at second slip.
It was the ninth time in 21 Test innings that Root has fallen to his Indian nemesis.
Kuldeep bowled a terrific spell that had not just the English batters but even India wicketkeeper Dhruv Jurel guessing which way the ball would turn.
The left-arm wrist spinner trapped Jonny Bairstow lbw for a duck and was pleasantly surprised when his ordinary delivery ended Duckett's blistering 153, which contained two sixes and 23 fours.
Spilled by Rohit in the slip before he completed 150, Duckett slapped a half-tracker from Kuldeep to Gill at cover.
England were pushed further on to the back foot after the lunch break when they lost two wickets in two balls.
Skipper Ben Stokes (41) slog-swept Ravindra Jadeja to Bumrah, while Ben Foakes (13) was snapped up at mid-on by Rohit.
Siraj went on to york Rehan Ahmed and James Anderson as England gave up their last five wickets for a paltry 20 runs.
Root dismissed Rohit for 19 when India came out to bat in their second innings but Jaiswal tore into the England attack to swell India's lead.
The left-hander brought up his hundred with a four off Mark Wood and then dropped his bat, removed his gloves and stood in the middle blowing kisses and looking skywards in celebration.
Gill brought up his fifty soon after that with a six off Wood as India threatened to bat England out of the contest.