Dominated in the opening spell, the Warriors lifted in the second half to turn the contest on its head.
In the second 40min, they kept the Roosters scoreless, scored four tries of their own and were held up over the line on three other occasions.
Victory for the side which qualified for the play-offs in the eighth and bottom spot means it has made it into the last four in the competition. It next faces Manly in Sydney next Saturday for a place in the grand final.
The result also extended Ruben Wiki's NRL career for at least another week.
Wiki, in his 311th match, produced one of the moments of the contest when he flattened compatriot Sia Soliola in a second half hit-up.
In front of a crowd of 25,585, the Warriors had a dream start, scoring off their first possession. With the help of a penalty they worked their way down field, before Michael Witt shaped to kick to Manu Vatuvei's wing.
Instead, Witt went the other way, the ball bounced off an upright and Lance Hohaia was on hand to force it down. Witt's conversion made it 6-0.
From then, however, the Roosters began to control proceedings with the tactical kicking of Braith Anasta and Mitchell Pearce proving a threat.
The Warriors were forced back into their own half and called on to do plenty of defence.
In the 27th minute, after a sustained period of pressure, their line finally broke .
Pearce went through two defenders to cross over with Craig Fitzgibbon converting to tie the game up.
It was worse for the Warriors 3min later when the Roosters broke down the right and Kiwi Setaimata Sa kicked ahead. Hohaia got a wicked bounce as he tried to clean up and, as the ball rolled into the in-goal, he was involved in a race with Anthony Minichiello.
However, video referees Steve Clark and Phil Cooley ruled that Hohaia had held Minichiello back illegally with his arm and awarded a rare penalty try.
Fitzgibbon added the easy conversion before Anasta closed out the half with a field goal for 13-6 lead.
Hohaia make quick amends in the second half when a Brent Tate kick forced the Roosters first line drop-out of the match. Hohaia finished off the ensuing attack by jinking his way through to dot down under the posts. The conversion made it a one-point ball game.
The momentum began to shift towards the Warriors, who twice crossed over in the next 10min through winger Aiden Kirk and second-rower Simon Mannering, only for both to be held up.
But they were not denied a minute later when Ian Henderson darted from dummy-half and forced his way over in traffic.
The video refs gave Henderson the benefit of the doubt and awarded the try.
The Warriors went further in front when a superb kick-chase forced another line drop-out and from the ensuing possession they worked the ball out to Vatuvei who scampered over in the corner.
Four minutes later, Kirk brought the house down, grabbing an intercept and racing 75m to dot down by the posts.
Skipper Steve Price said it had been a big week for the team.
"We have been treating every game as a special moment and today was no different.
"[For the second half] we just wanted to complete our sets - the Roosters had all the ball and field position in the first half and it was important we turned that around.
"It was a really big effort in second half. It was all about self belief," added Price, who said the team would immediately turn its attentions to the club's next game, against Manly.
Hohaia said the team had felt the buzz of the crowd "and that got us home".
"We sort of have been playing consistently for last six weeks or so. The last game [the win over minor premiers Melbourne Storm] gave us a lot of confidence.
"This was our home ground and we wanted to play really well in the second half and we did that."
Anasta said the Roosters would have no excuses.
"They were just too good for us."
• New Zealand Warriors 30 (Lance Hohaia 2, Ian Henderson, Manu Vatuvei, Aidan Kirk, tries; Michael Witt 5 goals), Sydney Roosters 13 (Mitchell Pearce, try; Anthony Minichiello, penalty try; Craig Fitzgibbon, 2 goals; Braith Anasta field goal). Half-time: 6-13.










