SDA logo

Released in June 2001, Baldur's Gate II: Throne of Bhaal concludes the saga begun by the original Baldur's Gate and continued in Baldur's Gate II. Chaos grips the land as the remaining Bhaalspawn wage all-out war upon each other to claim their birthright as the new Lord of Murder. Explore vast new dungeons, gain incredible new powers and find such ridiculous amounts of high-level loot that even +3 swords become junk items — or ignore all of it and do a speedrun instead.


Best time: 0:05:11 by Eli 'Smilge' Chase and Mark 'ExplodingCabbage' Amery on 2012-12-23, done in 17 segments appended to one file.

Get Flash to see this player.

Author's comments:

Special Thanks to:

Welcome. This run has a fairly long history that we won't detail fully here. It exploits a vast collection of glitches in the Infinity Engine found over years of running of Infinity Engine games by both us (Smilge and ExplodingCabbage), Damurdoc (the guy who did the original BG2 and ToB runs on SDA) and the BG1 and Icewind Dale runners (julien, beenman, and clone_rizzo). At the time of writing, five of the six Infinity Engine games have runs on SDA (Icewind Dale 2 being the only one missing) and the sharing of tricks between runners of those games has benefited all, since many (though not all) of the glitches you will see here are transferable to some or all of the other five games.

There is a lot to explain here, but we will go through the run chronologically and try to explain each trick or glitch as we first reach it, giving credit to finders as we go.

Character Creation
SDA timing doesn't start until we get control of the character so we only tried to keep this fast for style reasons. Only our class choice (Sorcerer), alignment choice, and a few of our spells are important here. Gender, attributes, weapon proficiencies, and most of our spell choices have no impact at all on the rest of the run, and race matters only very slightly. We choose the Sorcerer class because we need to cast a bunch of wizard spells and we don't want to waste time memorizing them, which we would need to do if we chose Mage.

The spells chosen here that we will actually use over the course of the run are: Chromatic Orb, Find Familiar, Knock, Mirror Image, Haste, Skull Trap, Mislead, Finger Of Death, and Limited Wish.

The Stone Heads and the battle with Illasera
To kick everything off, we need to talk to the stone heads, but for the first few seconds of the game they aren't usable. We use the downtime to summon a Familiar because he saves some time in Saradush. The sharper amongst you may have thought “Wait, what?” when we mentioned earlier that our alignment choice mattered; this is because choosing True Neutral means we get the Rabbit familiar, who is the fastest in the game, easily outpacing a hasted party member.

As soon as the stones become active we use them and skip through the prophecy as quickly as possible. It turns out that even for something as simple as mashing through dialogue, there are some interesting factors to consider. There's a hard limit on how frequently the game will register a press of the Enter key or a click; in user-interface terminology  those inputs are 'debounced', and if you hammer too quickly, some of your inputs won't register. However, pressing Enter and clicking the dialogue are debounced separately - a press of enter will create a delay until the game will next acknowledge another press of enter, but won't create a delay to it acknowledging the next click - so doing both at once effectively doubles the maximum rate at which you can advance through dialogue. Thanks to beenman for this find. This is the sole reason that the dialogue here advances faster than you've ever seen in a Baldur's Gate speedrun before.

In the fight with Illasera, we use a combination of two new-found glitches.

The first is that there are a few spells that can be cast by pressing the hotkey for the spell, even if the spell is not memorized. The spell doesn't need to be known, and the character doesn't even have to be a mage. The only requirement is that the character is capable of casting a spell from either the priest or mage spellbook. The spells that this works for are all spells that immediately bring up some kind of menu when you select them, rather than starting casting immediately or bringing up a targeting cursor; in other words, the two Contingency spells, plus Nahal's Reckless Dweomer (which gives you a menu from which to select a spell to cast), Spell Immunity (which gives you a menu to select which spell school to protect against), and Enchanted Weapon (which gives you a menu to select which weapon type to create). Casting these spells from the hotkey even bypasses the one-spell-per-round cooldown. Thanks to Marty81 for this find.

In this run, we will repeatedly exploit this by casting Chain Contingency even though we are not high level enough to cast it, and casting Nahal's Reckless Dweomer even though we are not a Wild Mage.

In playing with limitless Chain Contingencies, a second new bug was found. Chain Contingency is strange in that there is no casting animation until after the spell is cast. For some reason, this delayed animation can make some cutscenes progress quicker than normal. We don't totally understand the mechanism behind this, but we have a fairly good idea of what's going on. When cutscenes are triggered, the game goes into 'Cutscene Mode' (that's the actual term used in-game and in the scripts). When entering cutscene mode, if any party members are currently casting spells, the first actions of the cutscene won't be executed until the party member has finished casting (presumably because some players got pissed off when their healer got teleported away by a cutscene halfway through casting their last high-level healing spell). Somewhere along the way, there must be some code that says “When a party member finishes casting a spell, if in Cutscene Mode, execute the next action in the cutscene's script.” But because of the weirdness in how Chain Contingency is animated, by spamming contingencies before a cutscene, we can cause lots of zero-length spellcasting animations to start and finish during the cutscene - and the cutscene logic we just described handles each of these as a spell finishing casting, and executes the next line of the cutscene script each time, without waiting for the currently executing line to finish. In effect, this lets us make lengthy cutscenes breeze by in under a second.

Not all cutscenes are vulnerable to this, because some of them set actions or other scripts to run after a timeout has expired, rather than simply executing a series of actions sequentially. Notably, we can't skip the wait we get when using the “Pocket Plane” Special Ability this way, which would've saved us some time later on if it were possible. We can skip most stuff, though.

In Illasera's case, we can end the cutscene before she gets into position to start dialog. This allows us to talk-lock her before she initiates dialog.

From there, we use Finger of Death to kill her. The odds aren't too bad; Illasera has a Save vs. Spells of 6 and Finger of Death makes her save at a -2 penalty, so we have a 8 in 20 chance of success. The original plan had been to use a Wild Surge: No Save - Chromatic Orb, since it casts faster, but casting Chromatic Orb prevents the player from resting for a few rounds (for some reason we don't know). After Illasera dies, there is a lengthy wait time before the player is teleported to the Pocket Plane - but, unusually, it's timed by the game world's 'calendar' (the current time in days and hours, advanced by both real time passing and by resting or some scripted events) rather than by real time. This means we can skip the wait instantly by resting, which we do. Once again we spam contingencies to make a cutscene go faster (this time it is the one with Solar).

The Pocket Plane - Our first visit
When Sarevok shows up, we refuse his help and say we want to look around the pocket plane - this gives us a chance to set ourselves up to break the cutscene that triggers after we accept his help. Then we summon Aerie and Anomen and cast haste.

We luckily benefit from a bug here; the dialogue the first time you talk to the Fate Spirit (the statue that summons party members for you) is different to the dialogue you get on subsequent clicks, and while usually there is a 6-second delay between conversations with the fate spirit, this doesn't happen after the very first conversation (presumably because the developers simply forgot to add it to the script). This lets us summon our party members quickly without having to wait around. We're going to use three party members over the course of the run: Anomen and Viconia, chosen because they are the only single-classed Clerics, and we need people who can cast high-level Cleric spells, and Aerie, chosen because she is the only remaining character out of the first 9 dialogue options (the ones that can be selected via keyboard) who has high enough Wisdom to select certain wishes offered by the Limited Wish Djinn. You will see the importance of these points in due course.

The timing of casting Haste has to be just right so that haste will land on Aerie but not Anomen, otherwise Anomen will talk to us too soon. Here we use a method to break out of cutscene mode. When an NPC initiates dialog during a cutscene, cutscene mode ends, making the UI visible again and returning control to the player. What happens to the rest of the queued actions in the cutscene script varies by cutscene, but usually the game treats them as though they are queued up orders for the main character - so if the player performs an action like moving or casting after breaking out of cutscene mode, the rest of the cutscene is skipped. We kick Anomen and Aerie out of the party so they will walk up and ask if they should leave the party. First Aerie breaks the part where Sarevok takes part of the player's soul. Then Anomen breaks the part where the first challenge room is opened. Normally there are two prerequisites for leaving: that you've given Sarevok a piece of your soul, and you've completed the first challenge room. However, the variable that says that you haven't beaten the first challenge room is initialized in between the time that the first challenge is open and the time that Sarevok asks to come with you. Since we're out of cutscene mode here, it never gets initialized  which luckily for us gets evaluated as though we'd beaten the challenge, and we're allowed to leave without even entering the challenge room.

Saradush, and the battle with Gromnir
We use the same cutscene breaking trick as before to get out of the opening cutscene in Saradush. This is good for a few reasons: it lets us skip all the dialog and waiting around when the townsfolk and guards argue (straightforwardly saving time), it places us a bit closer to the barracks where the key to the sewers is kept (our next destination), and it skips Melissan's very first dialog with us (which has helpful effects later on). Amusingly, the trigger to fade from black never gets a chance to fire, so we are in the dark until we transition to a new area.

There are several ways to get to Gromnir, but through the sewers is by far the quickest. First we need the key from the guard barracks. The PC casts Knock and we enter through the front door, and then we immediately end the segment. This is because we want to cast Knock again right away, but the 6 second cooldown between casting spells prevents us; saving and loading cancels that cooldown. When the next segment begins, the PC casts knock and grabs the key from the chest, and the familiar waits near the door. When we take the key, having the familiar next to the door saves us a little time by letting us leave without the PC walking back to the door.

When we get into the sewers, a very quick segment is devoted to revealing the map with a Wild Surge: Reveal Area. Clairvoiance as a spell does not work indoors (the scroll does, oddly, but we don't have one), and we need to have the area shown so we can set a contingency while we walk. The familiar is sent off to die because he only slows us down if we keep him at this point and he can easily be summoned again when needed. We send the PC to his destination and then use Chain Contingency at the same time we open the map. Thanks to the careless implementation of the feature - not present in vanilla Shadows of Amn but added in Throne of Bhaal - that lets you view the map without pausing the game, this allows us to set the contingency while the game is unpaused. We do the same thing later in the run to go to other menu screens, like the Priest Scroll, without pausing; just enter the map first and go to the menu screen from there, and the game doesn't pause. We put haste and two limited wishes in the contingency and set the trigger to 25% HP or less. We'll use this later during the battle with Yaga Shura.

We need to detect the hidden door at the north of the sewers to advance, and the time that this takes is luck-based. According to the manual, we get a bonus to our ability to detect secret doors thanks to being an Elf, but we never checked whether this actually works, and considering how buggy the game is, it's quite possible that race has no effect on secret door detection at all. Regardless, through good luck and lots of restarts we detect the door instantly and head upstairs to Grominr's castle. When we first enter the next area, Melissan is teleported in and forces us into dialogue. But since we skipped her very first dialog, and the game is keeping track of what she should say next using a counter of how many times she's spoken to us, she speaks as if we had just entered Saradush. We cast mislead for the invisibility (we'd get blocked and butchered by the enemies here otherwise) and head up to Gromnir's floor. Now we see Melissan again, but she still hasn't spoken to us about killing Gromnir. So rather than her dialog with Gromnir, she talks to us as if we had just finished defeating the guards that normally attack when we first enter Saradush. Because of this, Gromnir's dialog and cutscene where his guards take her away never fires.

Gromnir, like Illasera and unlike the later bosses, is not immune to death magic. Our fastest-casting death spell is Chromatic Orb, but if we cast it normally, Gromnir's saving throws are good enough that there is zero chance of him failing his save and dying. The fastest way to kill him, then, is using Nahal's Reckless Dweomer to cast Chromatic Orb, triggering a wild surge, and hoping we get the 'No Save' Wild Surge (a 1 in 100 chance) so that Gromnir doesn't get to save against it.

The problem with being unable to save the game for a while after casting Chromatic Orb doesn't harm us much here because there is a party-required, autosave-triggering area transition (the stairs) nearby and we can just run to that to force an autosave. (The game won't let you save manually in combat, near enemies, or in the aftermath of casting certain spells, but will cheerfully create an autosave during those conditions without any problems.) After several hundred attempts we finally get the correct wild surge and Gromnir falls. Melissan normally takes a while to show up after Gromnir dies, but appears instantly if you leave the area (or load a save). So we run over to the stairs and load the save. We cast Pocket Plane to teleport back to base, and with Gromnir dead we can now talk to the teleporter there and ask it to send us to Yaga-Shura. 


A second visit to the Pocket Plane, and the battle with Yaga-Shura.

In the pocket plane we pick up Aerie and Anomen as well as Viconia. These party members will win the rest of the game for us; our main character leaves most of the heavy lifting up to them from this point on. Just before we go through the map transition to Yaga-Shura's siege camp, we activate the contingency we had set up before by hitting the PC with a Chromatic Orb. This brings us down to less than 25% HP and when we load the save the contingency fires instantly.

Aerie quickly talks to both genies summoned by the Limited Wish spells in the contingency and gets Shapechange and Time Stop from them - this is why we needed somebody with high Wisdom. Since trolls run a bit quicker than humans, we have her turn into a troll to run over to Yaga-Shura. (Iron Golems are faster still, but are too fat to squeeze through the gaps between Yaga Shura's men on the bridge.) In the meantime, we use the unpaused map trick to level up Viconia and Anomen and set the spellbook to page 6. When Aerie arrives, she uses Mind Flayer form to drain Yaga-Shura's intellegence to 0, killing him despite his 'invulnerability'; attribute drain of any type bypasses all forms invulnerability in the Infinity Engine games, letting you kill characters who are supposed to be unkillable, and in this case letting us kill Yaga-Shura without first extinguishing his heart in the Marching Mountains. Normally we would be teleported to the pocket plane after Yaga-Shura's death for a tedious cutscene, but we break out of Cutscene Mode by removing Viconia before we are teleported so that she will talk to us - pretty much the same method as we've used to break out of cutscenes several times in this run already. We remove Aerie too because she is too far away and would keep us from leaving the area (and she has already served her only purpose, which was to be wise enough to eat Yaga-Shura's brains).

The battle with Balthazar
We go to Watcher's Keep because for some reason it lets us skip the Oasis and go straight to Amkethran. (Normally you'd have to exit the Oasis map from the east in order to unlock Amkethran on the world map, but exiting Watcher's Keep from the south apparently does it too. We didn't question the inner workings of this oddity too closely.) We need to wait for Melissan to spawn and talk to us first, however, so we use the very brief downtime waiting for her to appear to memorize a couple of spells. She assumes we have returned from our skipped cutscene-break in the pocket plane already, so she puts Amkethran on the map in her dialog.

When we arrive in Amkethran, we only need to kill Balthazar. Most bosses in Baldur's Gate games that also appear as neutral NPCs or in cutscenes have a 'boss' version and a 'neutral' version, but Balthazar is, luckily for us, an exception. Normally you would only get the chance to kill him after defeating Abazigal and Sendai and confronting Balthazar in the monastery, but there are a couple of ways to kill him early. The quickest way to do that is to break the cutscene in which he introduces himself to you and kill him before he disappears behind the locked gate.

Rather than removing party members, we found it was faster to let the guards that harass you when you try to sleep in the street break the cutscene for us. Once we get in range of the guard that summons Balthazar, we quickly rest three times and then save. The first - successful - rest is to advance the calendar 8 hours and make it day time (we'll explain the reason for that in a moment) and the other two get interrupted. When we load the save, the first guard talks to us, then the gate guard summons Balthazar, then the second guard talks to us and interrupts the cutscene.

We have Viconia cast Harm while Anomen gets into position. When Balthazar arrives, we cast Magic Resistance on him. Magic Resistance sets the target's magic resistance to a not-particularly-high value based upon the level of the caster, and it can't be resisted and has no save since it's a 'defensive' spell. This exploit has been floating around the internet in cheese guides as a way to reduce the magic resistance of high-MR characters like dragons since shortly after Shadows of Amn was released. In our case, it brings Balthazar's 127%+ magic resistance down to a manageable 38. From there, the PC casts Haste and Find Familiar, Viconia lands Harm, which brings Balthazar down to 1 HP, and Anomen finishes him off. Now we have Viconia cast a second Harm in preparation for the fight again Melissan, and the PC casts Pocket Plane. Irritatingly, we have to take everything a little slow here because of a bug with Harm; if you cast Harm a second time before the duration of the first casting has expired, then when the duration of the first Harm runs out, it will remove the second one from the caster. So we need to make sure that Vic doesn't cast the second Harm until the first one would have expired.

The final visit to the Pocket Plane
Before we disappear to the Pocket Plane, the familiar talks to the Mercenary Captain, a charming fellow who only spawns in the daytime (which is why we had to successfully rest for 8 hours earlier). Since he is a minor character, his dialogue doesn't pause the game, and so Pocket Plane carries on in the background. When we teleport out of Amkethran, the dialogue with the Mercenary Captain is broken, leaving our dialogue options from his conversation sitting in the log, where we can scroll up and click them later. This allows us to perform a giant time saving glitch.

Back in the pocket plane, we talk to the teleporter again. Since Balthazar is dead, we get a different conversation to what we would've gotten otherwise. The Balthazar-dead conversation looks like this:

Pocket Plane: Your journey is nearly complete.
1. Return me to where I was.
2. I am ready. It is time for the end. (Shown only if the challenges are complete)
3. I do not wish to leave at this time.
4. I am ready. It is time for the end. (Shown only if the challenges are NOT complete)

Normally, then, we would need to beat all the challenge rooms before being allowed to travel to the Throne of Bhaal. But remember that broken dialogue with the Mercenary Captain? If we scroll up and click on option 2 there, then the game just interprets this as 'Choose the second option in the current branch of the current dialogue tree', which selects option 2 from the conversation with the teleporter - the one that sends you to the Throne of Bhaal - even though that option is not visible and we don't meet the prerequisites.

Fun facts: You can use this glitch to select any dialogue option anywhere that you don't meet the prerequisites for. If you choose an option from the broken dialogue that is higher-numbered than the highest-numbered option available at the current branch of the current dialogue, you'll cause an index error in the game and it will crash to the desktop.

Anyway, we head to the Throne of Bhaal, and our final battle with Melissan, despite never having set foot in a challenge room.

The Final Battle
In normal play, this fight would proceed as follows:
1) Reduce Melissan to 50% HP or less, creating the bridge to the first energy pool
2) Defeat the guardian of the first energy pool and use it
3) Melissan reappears; reduce her to 15% HP or less, making the second energy pool available
4) Defeat the guardian and use the second pool
5) Reduce Melissan to 15% HP or less again
6) Defeat the guardian and use the third pool
7) Reduce Melissan to 15% HP or less again to win

To begin with, we follow the same progression as normal play. The PC casts Mirror Image, which he'll need in a moment. Anomen quickly casts Champion's Strength on Viconia to improve her THAC0 and help her land Harm, and then Viconia smacks Melissan with Harm to reduce her to 1HP. (We need to land the hit and bypass Melissan's magic resistance. The net probability, with Champion's Strength, is 4%.) Up comes the bridge to the first pool, and we send the PC over to it and have him set up a Chain Contingency to throw three Skull Traps at himself when he sees an enemy. Next he casts Mislead, leaving a clone of himself on the bridge, and wanders over to Yan-C-Bin, the Elemental Prince who guards the first pool.

There are a few glitches we make use of here.

Firstly, we exploit the fact that party-unfriendly area-of-effect spells bypass magic resistance when targetted on the caster, which lets all our Skull Traps damage Yan-C-Bin despite his high MR. We still need to get very lucky with the damage rolls to be able to deal enough damage to kill him - and we need to get lucky and have the Skull Traps hit the PC's Mirror Images, instead of the PC, or we'll die - but the odds aren't too terrible on their own.

Secondly, after sending the PC over to Yan-C-Bin, we go to the options menu via the map (letting us be in the options menu with the game unpaused) and enter the Save menu. You're not meant to be allowed to save the game in combat - and for a while after casting the Skull Traps, the game counts us as in combat - but the 'in combat' check happens when you either press the quicksave key or, crucially, when you try to enter the save menu. Since you're not supposed to be in the save menu with the game unpaused anyway, there aren't any further checks to see if you're allowed to save when you actually click the save button within the save menu. With some good timing, this lets us save immediately after killing Yan-C-Bin, which is vital because we'll never get another chance to save before the end of the game, and we still need to land one more Harm on Melissan; if we had to defeat Yan-C-Bin and the final Melissan in the same segment, the odds would be low enough to make that segment extremely painful. Unfortunately this means Yan-C-Bin dies offscreen, and you, dear viewer, don't get to witness his defeat.

Thirdly, there's that Mislead clone that we left on the bridge. When we use the pool after defeating Yan-C-Bin, the cutscene that follows tries to remove the bridge leading to the pool. You can see that the graphic for it disappears normally, but because we have a clone left standing on the bridge, the game isn't able to make the region impassable again and we are left with an invisible bridge that we can cross at will. What's more, the pool never gets made unusable. You can probably see now where this is going.

Using the pool is, for some reason, on a mild cooldown, but we send the Rabbit (the fastest member of our strange band) over the invisible bridge to reuse it at the earliest possible moment, summoning a second Melissan alongside the one who appeared the first time we used the pool. At first we thought we'd need to summon three Melissans this way, and defeat two of them, to win the game, but the scripts here turn out to be even screwier than we anticipated. We smack the second Melissan with a lucky Harm... and that's all we have to do. The game triggers the next cutscene and removes the first Melissan, leaving behind the one on 1HP. (If you're losing track, this means we've now completed step 3 in the normal progression described above). Then the game once again notices the Melissan on 1HP, triggers the next cutscene and, for some reason, once again tries to remove the Melissan it's already removed, still leaving a Melissan on 1HP (so we've now completed step 5). Finally, the game once again sees Melissan on 1HP, and we win the game.

It is perhaps an anticlimactic final battle. But it is certainly a fast one.


Feel free to hit me up with an e-mail if you have any questions at peonuprsing AT gmail DOT com.

Thanks for watching!

Return to the Game List, the FAQ, or the Home Page.