Ketheric Thorm is the final boss of Baldur's Gate 3 Act 2, a character you must defeat to continue your progression. You'll be stuck in the second act unless you can defeat the ultimate foe. Beating him is a difficult task, but isn't impossible as long as you approach it in the correct fashion. But like all things in the game, there are different ways to execute your plans.
Ordinarily, defeating Ketheric Thorm involves besting him in a two-stage battle. Moreover, he has companions who you'll need to take down as well. It goes without saying that Thorm isn't nice, something that becomes obvious from your very first encounter with him. Incidentally, there might be a way in which you won't have to be the one to kill him in Baldur's Gate 3.
" loading="lazy" width="1440" height="220" alt="fortnite-promotional-banner">
Baldur's Gate 3 Ketheric Thorm battle stage 1
As mentioned earlier, the encounter with Ketheric Thorm involves two different stages. The first one begins on the rooftop of the Moonrise Towers, where you come across the immortal god. You'll get several dialog options, with some even having a possible activity check.
Note that some checks require you to roll a high number on your dice. Moreover, if you investigate the Moonrise Towers well enough, you will get an additional dialog option offering you more information about Thorm's wife, Melodia.
👉 For more insights, check out this resource.
No matter what dialog you choose, you'll have to fight the first boss battle, which ends when Thorm's health drops to around 50%. At this stage, he will go downstairs, where you have to find him.
Sparing Ketheric Thorm in Baldur's Gate 3
The second part of the quest against Thorm will take you down to a Mind Flayer Colony that's directly beneath the Moonrise Towers. To speak with him, you'll have to wait for an opportunity where the two of you are alone.
👉 Discover more in this in-depth guide.
You'll have an additional option if you successfully complete the persuasion checks on the rooftop. If you successfully pass the latest persuasion check, you won't have to fight against Thorm. Unfortunately, saving him is impossible, as he will toss himself into the pit.
Additionally, Myrkul will still want to fight you and your squad, which is unavoidable. However, passing the persuasion check allows you to technically not end Ketheric Thorm (as he chooses to dive into the pit himself).
If you're going for this ending, Act 2 will end once Myrkul is beaten. This will start the final act of Baldur's Gate 3, which takes you to a new area.
" modalPopup.closeOnEsc = false; modalPopup.setHeader("Why did you not like this content?"); modalPopup.setContentText(modalText); modalPopup.addCancelOkButton("Submit", resetRatingAndFeedbackForm, sendRating); modalPopup.removeCloseModalIcon(); modalPopup.disableDismissPopup(); modalPopup.open(); } else { sendRating(index); } } function sendRating() { var requestPayload = { "post_id": 1631353, "rating_value": ratingValue } if (ratingValue > 3) { requestPayload.rating_feedback_type = null; requestPayload.rating_feedback = null; } else { if (!$('input[name="drone"]:checked') || !$('input[name="drone"]:checked').value) { showErrorMessage('option'); return; } if (!$(".post-rating-feedback-note textarea") || !$(".post-rating-feedback-note textarea").value) { showErrorMessage('note'); return; } var selectedOption = $('input[name="drone"]:checked').value; var feedbackNote = $(".post-rating-feedback-note textarea").value; requestPayload.rating_feedback_type = selectedOption; requestPayload.rating_feedback = feedbackNote; } pureJSAjaxPost(addratingAPI, requestPayload, onsaveRatingSuccess, onsaveRatingFail, function() {}, true); } function resetRatingAndFeedbackForm() { var activeStars = Array.from($all('.rating span.rating-star.active')); for (var i=0; i < activeStars.length; i++) { activeStars[i].classList.remove("active"); } if ($('input[name="drone"]:checked')) { $('input[name="drone"]:checked').checked = false; } var userNote = document.querySelector(".post-rating-feedback-note textarea"); userNote.value = ''; modalPopup.close(); } function onsaveRatingSuccess() { modalPopup.close(); savePostIdInUserRatedPostsCookie(); $("#post-rating-layout").classList.add("hidden"); $("#post-rating-message").classList.remove("hidden"); window.setInterval(function showMessage() { $("#post-rating-widget").classList.add("hidden"); }, 3000); } function onsaveRatingFail() { console.error('Saving post rating failed!'); modalPopup.close(); } function savePostIdInUserRatedPostsCookie() { userRatedPostIds.push(1631353); var expiryTime = new Date(); expiryTime.setMonth(expiryTime.getMonth() + 12); // Expiry after 1 year setCookie("user_rated_post_ids", JSON.stringify(userRatedPostIds), expiryTime); } function isPostRatedByUser() { var userRatedPostIds = getCookie('user_rated_post_ids'); if (userRatedPostIds) { try { userRatedPostIds = JSON.parse(userRatedPostIds); } catch (err) { console.error(err); return false; } } else { return false; } if(userRatedPostIds.indexOf(1631353) >= 0) { return true; } else { return false; } } function getRatingCountByPostId(postId) { return new Promise(function(resolve, reject) { pureJSAjaxGet( getRatingCountBaseURL + postId + '/rating/count', function(data) { try { data = JSON.parse(data); if (data.meta_value) { resolve(data.meta_value); } reject("Failed to fetch rating count for the post:" + postId); } catch (err) { reject("Failed to fetch rating count for the post:" + postId); } }, function(err) { reject("Failed to fetch rating count for the post:" + postId); }, true); }); } function showErrorMessage(messageType) { var messageContainerId = '#' + messageType + '-error'; $(messageContainerId).classList.remove('hidden'); window.setInterval(function () { $(messageContainerId).classList.add("hidden"); }, 5000); } (function() { var callFired = false; function lazyLoadPostRating() { if (callFired) return; callFired = true; if (!isPostRatedByUser()) { getRatingCountByPostId(1631353) .then(function(ratingCount) { if (ratingCount < 10) { $("#post-rating-widget").classList.remove("hidden"); } }) .catch(function(err){ console.error(err); }); } } document.addEventListener("scroll", lazyLoadPostRating, { passive: true, once: true }); document.addEventListener("mousemove", lazyLoadPostRating, { passive: true, once: true }); document.addEventListener("touchmove", lazyLoadPostRating, { passive: true, once: true }); })();