Error: image is invalid or non-existent
The assault on Stygga castle was an unprecedented event in the second war with Nilfgaard. It was ultimately during this battle that Vilgefortz was finally defeated and killed. There were actually two assaults on the castle. The first by Geralt of Rivia and his company, which was initiated to free Ciri and Yennefer, and the second assault which was undertaken by the Nilfgaardian Impera led by the Emperor himself.
Sequence of events
Double betrayal of Vilgefortz
Vilgefortz had originally fought as part of the group of 22 mages which won the Battle of Sodden Hill for the North. His talents also lead to his appointment as president of the Brotherhood of Sorcerers, and thus the representative of a prominent anti-Nilfgaardian group. What few were aware of, however, was the fact that Vilgefortz was a traitor. He had maintained friendly relations with Emperor Emhyr var Emreis.
At the emperor's command, Vilgefortz and his faithful servant Rience were sent to search for the blood of Lara Dorren, Emhyr's daughter - Ciri which he had been forced to abandon when his plans to take her to Nilfgaard where thwarted by his then wife. This ultimately took them both to Thanedd Island, to the congress of mages being held there. The emperor had also secretly sent in an elven commando lead by Isengrim Faoiltiarna and the young Nilfgaardian count Cahir aep Ceallach to capture Ciri.
During the chaos of the coup, Vilgefortz's double betrayal was revealed. The elves and Cahir failed to get Ciri for the emperor, but the mage decided to get her for his own sick and ambitious plans. It was only thanks to the intervention of Geralt that Ciri managed to escape through the portal in the Gulls' Tower. While Ciri got away, Geralt was gravely wounded by Vilgefortz.
Aftermath of the Thanedd coup
The coup had far-reaching repercussions for everyone. Vilgefortz was sought not only for his first betrayal - by Sigismund Dijkstra, Philippa Eilhart and the Redanian Secret Service for the North, but also for his second betrayal - by Vattier de Rideaux, head of Nilfgaardian Intelligence for Emperor Emhyr var Emreis. Vilgefortz was forced into hiding, being essentially a worldwide fugitive. He was forced to rely on his subordinates, Rience and Schirrú to accomplish anything.
Initially Redanian scryers managed to locate where he was hiding and Dijkstra set off to find the mage, only to discover the place empty. Vilgefortz then moved his base of operations to Stygga.
The location of the hideout was a classic "lion's jaw". In the mountains, on the north-west of Ebbing province, on a "lakebed" strewn with boulders to be more precise. Stygga castle had many levels, the highest levels were located at the very top of the lakebed and the lowest were built into the rocky cliff wall. The castle was filled with evil, dark and vibrating magic that suppressed any other sources of power, so Ciri was prevented from using her ability to travel through time and space. It also gave its master, Vilgefortz, nearly unlimited power.
Furthermore, the lakebed, were the castle was, was covered with shipwrecks which had been "sucked" there by Vilgefortz's magic maelstrom in the Sedna Abyss. The location of the hideout was top secret, with only the imperial coroner, Stefan Skellen, knowledgeable of its location as he was cooperating with Vilgefortz. However, the cover was blown when Geralt of Rivia overheard the name of the castle while investigating some underground caverns at a vineyard in Toussaint. There he overheard Skellen who was meeting with some Nilfgaardian nobles plotting to assassinate the emperor.
The witcher decided to find and attack Vilgefortz himself, but first he sent a message to Dijkstra, containing the name and location of the castle so as to have some sort of backup plan in case of failure. Dijkstra then sent a letter to Emhyr var Emreis, thereby alerting Nilfgaard to the whereabouts of Vilgefortz's hideout. At the time of assault, the castle reinforcements and guard were of considerable size.
The mercenaries guarding it consisted of Skellen and his own small army, a number of individuals directly loyal to Vilgefortz, the bounty hunter Leo Bonhart and Vilgefortz himself.
The first assault
At the first assault, the witcher and his companions arrived to rescue Ciri. The witcher's team had two advantages at their side. One of them was that Ciri had just arrived at Stygga Castle herself before being taken to the laboratory. This ensured that everyone in the castle was focused on Ciri, leaving only a small number of guards at the gate. Their second advantage was that Emiel Regis used his vampire powers to get them inside with few problems and killing most of the guards except Boreas Mun, who showed them the entrance through which they could reach Ciri.
Later in the battle, things degenerated into chaotic skirmishes and chases through the castle's labyrinth of hallways. The team split up with Geralt, Cahir, Angouleme, and Milva taking a more conventional approach and Regis using his shapeshifting to facilitate a bit of reconnaissance.
Regis managed to find Ciri in the lab and made quick work of Vilgefortz's assistants. In doing so, he broke his long abstinence from drinking blood. Ciri then insisted that he return to Geralt and warn him about Vilgefortz while she set off to find Yennefer. Meanwhile, Geralt and the rest of the team were set upon by crossbowmen and pinned down. They ultimately made it through, but Angoulême was wounded and Milva was killed, though not without decimating the crossbowmen. At that point, Geralt set off in one direction to find either Ciri or Yennefer (hopefully both!) and Cahir and Angoulême set off in another.
The castle guard also split up, with Leo Bonhart setting off alone to find and kill Ciri. Stefan Skellen found most of his men with failing hope, ready to run. He realized that as small groups in a single combat against the witcher's team, they did not have a chance of winning, so he gathered his men and blocked the only exit from the castle, the main hall where a large staircase descended. Next, two deciding battles occurred: Ciri versus Bonhart, and Geralt, Yennefer and Regis versus Vilgefortz.
As Ciri made her way through the endless corridors searching for Yennefer, she began to despair that she would ever find the sorceress and began calling her name. This alerted Bonhart to her location and he cornered her in a large vaulted chamber with a marble statue of some goddess. Ciri tried to use her teleporting ability to get away, and thought she had succeeded, only to realize that she'd only teleported to the other side of the chamber. Seeing two possible exits, she chose one but ran into Skellen's men and was forced to turn back. Upon re-entering the chamber with the statue, she was faced with her recurring nightmare: the black knight with the winged helmet.
As she was losing hope, she saw a young fair-haired girl behind the knight (Angoulême) and to her great relief, both the knight and the girl started fighting Skellen's men. Once the trio had routed the guards, brief introductions were made and Ciri finally learned Cahir's name, but their acquaintance was short-lived as Bonhart closed in on them. Trying to distract the bounty hunter, Ciri and Cahir pretended that the young knight was in fact "the witcher". Bonhart was not entirely convinced but chose to fight Cahir nonetheless while Ciri and Angoulême ran ahead. Though he put up a good fight, Bonhart's skills were superior and Cahir was killed.
As Ciri and Angoulême tried to run, Angoulême's wound slowed their progress and eventually the two were forced to stop. Ciri tried in vain to stop the bleeding and her new-found companion died in her arms. Then Bonhart closed in once again, simply stepping over Angoulême's body. He continued menacing Ciri and backed her to the far end of the corridor where she realized they had reached the ruined part of the castle. Most of the floor in the next chamber had collapsed with only a few beams remaining intact. What ensued was a harrowing battle but Ciri was able to use what she had learned at Kaer Morhen to finally defeat the bounty hunter.
Meanwhile, Geralt and Yennefer had found Vilgefortz and were busy trying to defeat him. Vilgefortz did not seem to be particularly stressed by their combined assault as he hurled fireball after fireball at them. In fact, he seemed to be gaining the upper hand when Regis arrived on the scene. The vampire's appearance provided enough distraction for Geralt and Yennefer to gather themselves, but Vilgefortz eventually prevailed and the vampire was destroyed most gruesomely. The battle then continued with the witcher, the sorceress, and the mage, with Vilgefortz again looking like he would win. Yennefer was seriously wounded and it came down to just the witcher and the mage. With just both men left, Vilgefortz materialised an iron rod to fight Geralt, a melee duel. Vilgefortz attacked Geralt and dominated the Witcher in terms of swordplay and maneuvering, wounding Geralt blow after blow. As Vilgerfortz prepared for the final blow, Geralt managed to cast a high level illusion using Fringilla Vigo's medalion, this caused Vilgefortz to miss his swing. Geralt, seizing this opportunity, slashed the surprised mage across the chest and thus killing Vilgerfortz.
In both duels, Geralt's party triumphed and both Vilgefortz and Bonhart were killed. However, these victories came at a great price. All the witcher's companions were dead, Milva had been shot, Angoulême died from the lance wound to the leg, Cahir was killed by Bonhart while defending Ciri and Emiel Regis was literally melted by Vilgefortz, while the vampire was protecting Yennefer. The only survivors were Geralt, Ciri and Yennefer.
At that point, Ciri, Geralt and Yennefer decided to leave the castle. Yennefer in particular stated that she simply wanted to see the sky once more (having spent months on end in Vilgefortz's dungeons). However, things were not quite that easy as the trio then encountered the remains of Skellen's men and were forced to fight their way down the main staircase. Side by side, Ciri and Geralt proceeded to kill everyone in their way. There's no telling what might have happened if not for the second assault which followed.
The second assault
The second assault was organized by Emhyr var Emreis, the emperor of Nilfgaard. He had found out from Dijkstra's letter where Vilgefortz was hiding and decided to attack without further delay, although all his armies were at the north fighting the Nordlings and occupying conquered regions. Emhyr took his personal fanatic brigade called the "Impera". The Nilfgaardians did not have much work left when they arrived as the witcher's team had already killed most of Vilgefortz's men. As they stormed the castle, Geralt and Ciri, backed by a wounded Yennefer, were descending the main staircase while fighting the remains of Skellen's troops.
The massive superiority in numbers caused Skellen's detachment to surrender without a fight while Geralt, Ciri, and Yennefer laid down their arms and sat on the staircase awaiting the Nilfgaardian's next move. Stefan Skellen was accused of treason by Emhyr var Emreis himself, and arrested along with his men. Emhyr then took Geralt aside for a long private conversation. At that point, Geralt let Emhyr know that he had figured out that he was in fact Duny, Ciri's father.
After the assaults
As the emperor explained that he planned to take Ciri and impregnate her himself to fulfill the prophecy and his destiny, Geralt expressed his disgust. Emhyr also explained that no one who knew the whole story could be allowed to live. Giving his assurances that he would never hurt Ciri (other than, of course, incestuously impregnating her) he explained to Geralt that he and Yennefer would have to die, but because he respected them and appreciated what they had done for Ciri over the last ten years, he would allow them to commit suicide by slitting their wrists in a warm bath. He also allowed Geralt and Yennefer to say their goodbyes to a shocked and confused Ciri.
Geralt and Yennefer agreed grudgingly and after saying goodbye, entered the heavily guarded bath chamber. Emhyr assured them that they could take as long as they wanted to, and that only once they were ready, they could call in his guards who would give them knives to complete the act. Before he left, Yennefer made him promise that he would never make "her daughter" cry. Though he was not initially in much of a romantic mood, Yennefer convinced Geralt that they might as well have one last romantic interlude before they slit their wrists. After this, they called in the guards.
But there was no response. They called again, and the door opened and none other than Ciri poked her head in. She then explained to the stunned pair that she had been prepared to leave with the emperor, and was in fact on her way out when she lost her composure and began sobbing about the loss of her foster parents. Realizing that he has just broken his promise to Yennefer, the Emperor decided to let them go. Without any more fanfare, he left with his "Impera" and returned to Nilfgaard.