SWTOR: Empire Class Stories Ranked Worst to Best | HGG (2023)

");$( "#content-area" ).prepend($addFlag);} }// This function handles animation for the new ToC, which currently includes:// 1. Fading the ToC in and out to prevent it from covering up the Info section in the footer ; function handleTocAnim( $tocBox, winHeight, docHeight, scrollTop ) { // We're going to check if we're near the bottom for an animation to hide the ToC so we don't // cover up the Info section in the footer var bottomBuffer = 384; //px var isNearBottom = scrollTop + winHeight > docHeight - bottomBuffer; // Fetch the value for the animFlag key var tocAnimating = $tocBox.data( "animFlag" ); // If ToC has been hidden by the fade anim, display will be 'none' when // finished animating var tocHidden = $tocBox.css( 'display' ) === 'none'; if( isNearBottom ) { // If we're near the bottom, and the ToC is not animating // and not hidden, then hide it if( !tocAnimating && !tocHidden ) { $tocBox.data( "animFlag", true ) $tocBox.fadeOut( 400, function() { $tocBox.data( "animFlag", false ); }); } } else { // If we're not near the bottom, and the ToC is not animating // and hidden, then unhide it if( !tocAnimating && tocHidden ) { $tocBox.data( "animFlag", true ); $tocBox.fadeIn( 400, function() { $tocBox.data( "animFlag", false ); }); } } }// Calculate the available height for the ToC Box ; function calcAvailableHeight( height ) {return height * 80.0 / 100.0;}// This function resizes specific page elements, depending on // window size and whether the ToC is present, to keep things // consistent.// The boolean debug arg enables verbose logging. ; function handleReflow( $, winOuterWidth, winInnerHeight, maxMobileWidth, debug ) {if( debug ) {console.log( "Checking if page layout should be reflowed..." );}// We want to reflow the layout whether or not we have the TOC, // with the hasTOC bool as a flag for if it exists on the pagevar tocFlag = $("#content-side");var hasToC = true; // FORCE HAS TOC, DEPLOYING SITEWIDE -supersoup// Check number of H2 elements. If <= 3, early returnvar numH2 = $("h2");if( numH2.length <= 3 ) {return;}// Cache varsvar $mainContainer = $("#main-content");var $logoContainer = $(".hgg-logo-space");var $navContainer = $(".hgg-menu-icon");var $contentArea = $("#content-area");// Null-check variablesvar anyNull = $mainContainer.length && $logoContainer.length && $navContainer.length && $contentArea.length;if( !($mainContainer.length) && debug ) {console.log( "$mainContainer null in reflowLayout..." );}if( !($logoContainer.length) && debug ) {console.log( "$logoContainer null in reflowLayout..." );}if( !($navContainer.length) && debug ) {console.log( "$navContainer null in reflowLayout...")}if( !($contentArea.length) && debug ) {console.log( "$contentArea null in reflowLayout..." );} if( debug ) {console.log( "anyNull: " + anyNull );console.log( "hasTOC: " + hasToC );}if( hasToC ) {// The previous process for initializing offsetTopForView didn't play well when// refreshing the page while partially down the post, switching to pulling the // header height for consistency -supersoupvar offsetTopForView = $("header").height() ; //pxif (offsetTopForView === undefined || offsetTopForView < 0) {offsetTopForView = 0;}var $toc = $( ".toc-box" );if( $toc.length > 0 ) {var availableHeight = calcAvailableHeight( winInnerHeight - offsetTopForView );if( debug ) {console.log( "window.innerHeight: " + winInnerHeight );console.log( "availableHeight: " + availableHeight );console.log( "toc[0].scrollHeight: " + $toc[0].scrollHeight );console.log( "toc.height(): " + $toc.height() );}if( $toc.outerHeight() > availableHeight ) {$toc.css( 'height', availableHeight );if( debug ) {console.log( "Setting ToC height to ", availableHeight );}} else {var newHeight = availableHeight < $toc[0].scrollHeight ? availableHeight : $toc[0].scrollHeight;$toc.css( 'height', newHeight );if( debug ) {console.log( "Setting ToC height to ", newHeight );}}/*// Update largest sizevar maxSize = $toc.data( "maxSize" );var outerHeight = $toc.outerHeight;if( maxSize === 0 || maxSize == undefined || maxSize == NaN || maxSize < cssHeight ) {$toc.data( "maxSize", $toc.outerHeight);console.log( "maxSize is now " + $toc.outerHeight );}*/if( $toc.height() < $toc[0].scrollHeight ) {$toc.css( 'overflow-x', 'hidden' );$toc.css( 'overflow-y', 'auto' );}else {$toc.css( 'overflow-x', 'hidden' );$toc.css( 'overflow-y', 'none' );}}if( winOuterWidth >= 1600 ) {$mainContainer.css( "margin-left", "15.95rem" );$logoContainer.css( "margin-left", "-6.1rem" );$navContainer.css( "margin-right", "-8.0rem" );} else if( winOuterWidth < 1600 && winOuterWidth > maxMobileWidth ) {$mainContainer.css( "margin-left", "14.8rem" );$logoContainer.css( "margin-left", "-3.8rem" );$navContainer.css( "margin-right", "-3.8rem" );} else if( winOuterWidth <= maxMobileWidth ) {// Clear applied CSS$mainContainer.css( "margin-left", "0" );$logoContainer.css( "margin-left", "0" );$navContainer.css( "margin-right", "0" );} else {if( debug ) {console.log( "Unhandled window width in reflowLayout() - With ToC" );}}} else {if( winOuterWidth >= 1600 ) {// Don't do anything yet on non-ToC pages} else if( winOuterWidth < 1600 && winOuterWidth > maxMobileWidth ) {$contentArea.css( "margin-left", "0");} else if( winOuterWidth <= maxMobileWidth ) {// Don't do anything yet on non-ToC pages} else {if( debug ) {console.log( "Unhandled window width in reflowLayout() - Without ToC" );}}} }// Handles reflowing content on the page depending on different variables; (function (window, $, undefined) {$.fn.reflowLayout = function() {// Mobile width for reflow, probably want to sync// with max mobile width for the ToCconst MAX_MOBILE_WIDTH = 1438;// Should we enable verbose logging for debugging?// SHOULD NOT BE TRUE IN PRODUCTION! -supersoupvar debug = false;handleReflow( $, window.outerWidth, window.innerHeight, MAX_MOBILE_WIDTH, debug );$(window).on( 'load', function () {handleReflow( $, window.outerWidth, window.innerHeight, MAX_MOBILE_WIDTH, debug );});// For reflowing when browser size changes$(window).on( 'resize', function () {handleReflow( $, window.outerWidth, window.innerHeight, MAX_MOBILE_WIDTH, debug );});/*$(window).on( 'scroll', function () {var $toc = $( ".toc-box" );if( $toc.length === 0 )return;console.log( "availableHeight: " + calcAvailableHeight( window.innerHeight ) );console.log( "toc[0].scrollHeight: " + $toc[0].scrollHeight );console.log( "toc.outerHeight(): " + $toc.outerHeight() );});*/};})(this, jQuery);// Transform guide content by visually organizing it into cards ; (function(window, $, undefined) { $.fn.cardify = function() { var $contentBody = $("#content-body"); if($contentBody === 0) { return; } var $contentBodyChildren = $contentBody.children(); var $h2s = $contentBody.children("h2"); console.log("H2 children of #content-body: " + $h2s.length); if($h2s.length === 0) { return; } for(var i = 0; i < $h2s.length; i++) { var $array = $contentBodyChildren.nextUntil("h2"); $array.each( function(index) { console.log("Element " + index + ": " + $(this).html()); }); // console.log("Card " + i + ":" + $contentBodyChildren.nextUntil("h2").html()); } } }(this, jQuery));// Create the top level TOC before the first heading // The boolean debug arg enables verbose logging. ; function createTopLevelTOC( $, debug ) {var $contentBody = $("#content-body");if( $contentBody === 0 ) {return;}var headingsToFind = ["h2", "h3"]; var $headings = $contentBody.find(headingsToFind.join(","));if( debug ) {console.log(`Headings found: ${$headings.length}`);}if( $headings.length === 0 ) {return;}var tocContainer = document.createElement("div");tocContainer.id="top_toc_container";tocContainer.classList.add("top_toc_container");var tocTitle = document.createElement("p");tocTitle.classList.add("top_toc_title");tocTitle.innerHTML = "Table of Contents";tocContainer.append(tocTitle);var tocList = document.createElement("ul");tocList.classList.add("top_toc_list");let h2Count = 1;let h3Count = 1;for( let i = 0; i < $headings.length; i++ ) {var item = document.createElement("li");var itemTagName = $headings[i].tagName;var tagIsH3 = itemTagName === "H3";if ( debug ) {console.log(`Item ${i} tagName: ${itemTagName}`);}var count = i+1;if( tagIsH3 ) {item.classList.add("top_toc_item_h3");count = h3Count;h3Count++;}else {item.classList.add("top_toc_item_h2");count = h2Count;h3Count = 1; // Reset h3 counth2Count++;}var innerText = `${tagIsH3 ? " - " : ""} ${$headings[i].innerText}`;item.innerHTML =`${innerText}`;tocList.append(item);}tocContainer.append(tocList);var $topHeading = $headings[0];$topHeading.before(tocContainer);if( debug ) {console.log("Successfully added top level ToC");}}// The main function for creating, populating, and managing the new ToC ; (function (window, $, undefined) { $.fn.createTOC = function (settings) {const MAX_MOBILE_WIDTH = 1438;// Before anything else, if this is a post in a Category that we // specifically want to force the ToC on, let's handle that// THIS IS NO LONGER NEEDED, as we're pushing ToC sitewide -supersoup// handleForceToC( $ );// We want to create the inline top level ToC if we're not generating // the sidebar tocif ( $(window).width() <= MAX_MOBILE_WIDTH ) {createTopLevelTOC( $, false );}// For now, we only want to add the new ToC to manually flagged posts.// The post is flagged with the presence of a

// contained within the content of the post. Originally, this div was being used// to wrap the ToC, but I (supersoup) am going to move the ToC out to a new div.// So, the first thing we want to do is test for this div, early return if not // found, or remove it and recreate a #content-side div elsewhere if it is found.var tocFlag = $("#content-side");var hasToC = !(tocFlag.length === 0);// If #content-side element is foundif( hasToC ) {// Get rid of tosFlag #content-side elementtocFlag.remove();}// Check number of H2 and H3 elements. If <= 3, early returnvar numH2 = $("h2");var numH3 = $("h3");if( numH2.length + numH3.length <= 3 ) {return;}// Proceed with .CreateTOC() var option = $.extend({ title: "hgg-toc", insert: "body", }, settings); var ACTIVE_CLASS = 'active'; var list = ["h2", "h3"]; var $headings = this.find(list.join(",")); var tocBox = document.createElement("ul"); var $tocBox = $(tocBox); tocBox.className = "toc-box"; var idList = []; $headings.map(function (i, head) { var nodeName = head.nodeName; var id = 'toc_' + i + '_' + nodeName; head.id = id; idList.push(id); var row = document.createElement("li"); row.className = 'toc-item toc-' + nodeName; var link = document.createElement('a'); link.innerText = head.innerText; link.className = 'toc-item-link'; link.href = '#' + id; row.appendChild(link); tocBox.appendChild(row); }); // Control the takeover of the highlighted elements var isTakeOverByClick = false; // Event delegate, add click ,Highlight the currently clicked item $tocBox.on("click", ".toc-item", function (ev) { // Set as true ,Represents the click event to take over the control of the highlighted element isTakeOverByClick = true; var $item = $(this); var $itemSiblings = $item.siblings(); $itemSiblings.removeClass(ACTIVE_CLASS); $item.addClass(ACTIVE_CLASS); });// Recreate #content-side element in new locationvar $tocDiv = $("

");$( "#content-area" ).prepend($tocDiv); // Want it to be the first subdiv of #content-areavar headBox = document.createElement("div");headBox.className = "toc-titler";headBox.innerHTML = option.title;var wrapBox = document.createElement("div");wrapBox.className = "wrap-toc";wrapBox.appendChild(headBox);wrapBox.appendChild(tocBox);// If on mobile, set sidebar hiddenif( $(window).width() <= MAX_MOBILE_WIDTH ) {wrapBox.style.display = 'none';} else {wrapBox.style.display = null;}var $insertBox = $(option.insert);var $helperBox = $("

");$helperBox.append(wrapBox);$insertBox.prepend($helperBox);// The style of the storage container boxvar CACHE_WIDTH = $insertBox.css('width');var CACHE_PADDING_TOP = $insertBox.css('paddingTop');var CACHE_PADDING_RIGHT = $insertBox.css('paddingRight');var CACHE_PADDING_BOTTOM = $insertBox.css('paddingBottom');var CACHE_PADDING_LEFT = $insertBox.css('paddingLeft');var CACHE_MARGIN_TOP = $insertBox.css('marginTop'); // var scrollTop = $('html,body').scrollTop(); // var offsetTop = $insertBox.offset().top; // var marginTop = parseInt($insertBox.css('marginTop')); // var offsetTopForView = offsetTop - scrollTop - marginTop; // For initialization on load$(window).on( 'load', function () {initTocAnimData( $insertBox );}); // Rolling ceiling $(window).scroll(function () {// The previous process for initializing offsetTopForView didn't play well when// refreshing the page while partially down the post, switching to pulling the // main-header height for consistency -supersoupvar offsetTopForView = $(".hgg-top-nav").height() ; //px// IE6/7/8: // For pages without doctype declaration, document.body.scrollTop can be used to get the height of scrollTop; // For pages with doctype declaration, document.documentElement.scrollTop can be used;// Safari: // Safari is special, it has its own function to get scrollTop: window.pageYOffset;// Firefox: // Relatively standard browsers such as Firefox can save more worry, just use document.documentElement.scrollTop;var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop; // Scroll highlight // Only when the click event cancels the control of the highlighted element, the scroll event can have the control of the highlighted element !isTakeOverByClick && $.each(idList, function (index, id) { var $head = $('#' + id); var $item = $('[href="#' + id + '"]').parent(); var $itemSiblings = $item.siblings();var offsetBuffer = 64; // px, we want the class swap to trigger slightly before so we show an accurate active element// when zooming to a specific element var offsetTopHead = $head.offset().top - offsetBuffer; var isActived = $item.hasClass(ACTIVE_CLASS); if (scrollTop >= offsetTopHead) { $itemSiblings.removeClass(ACTIVE_CLASS); !isActived && $item.addClass(ACTIVE_CLASS); } else { $item.removeClass(ACTIVE_CLASS); } }); // Set to false, which means that the click event will cancel the control of the highlighted element isTakeOverByClick = false;// Handle animation for the ToChandleTocAnim( $insertBox, $(window).height(), $(document).height(), scrollTop );// Handle any changes to ToC CSS on scrollvar isFixed = $helperBox.css("position") === "fixed"; if (scrollTop >= offsetTopForView) {if (isFixed) return;$tocBox.css({overflow: 'auto',padding: 0,});$helperBox.css({position: 'fixed',top: CACHE_MARGIN_TOP,width: CACHE_WIDTH,paddingTop: CACHE_PADDING_TOP,paddingRight: CACHE_PADDING_RIGHT,paddingBottom: CACHE_PADDING_BOTTOM,paddingLeft: CACHE_PADDING_LEFT,backgroundColor: $tocBox.css('backgroundColor')});} else {if (!isFixed) return;$helperBox.css({position: 'static',padding: 0});$tocBox.css({overflow: 'auto',paddingTop: CACHE_PADDING_TOP,paddingRight: CACHE_PADDING_RIGHT,paddingBottom: CACHE_PADDING_BOTTOM,paddingLeft: CACHE_PADDING_LEFT,});} }); };}(this, jQuery));

by Noelle Roberts | Last Updated: May 25, 2023

SWTOR: Empire Class Stories Ranked Worst to Best | HGG (1)

(Image: BioWare and EA via HGG)

Star Wars: The Old Republic offers players 2 factions to choose from: the Galactic Republic and the Sith Empire. Both factions have 4 unique classes, each with their own unique story. For our readers who have a certain persuasion towards the darker side of the Star Wars galaxy, we’ve took it upon ourselves to identify the best empire questline in SWTOR.

Related Reading

  • SWTOR: Republic Class Stories Ranked

The Best Empire Questlines in SWTOR, Ranked Worst to Best

This was a hard ranking to do, because there simply isn’t a weak class story in SWTOR. Even though we may be starting out with the “worst” that certainly doesn’t mean you can’t have any fun with the class at position number 4.


Sith Inquisitor

SWTOR: Empire Class Stories Ranked Worst to Best | HGG (2)

Sith Inquisitors are the most terrifying, deceptive, and cunning members of the Sith Order. Think of the Sith Inquisitors as Emperor Palpatine, while the Sith Warriors are Darth Vader. Warriors will be concerned with using their lightsabers to cut wide swaths of destruction throughout the galaxy.

Meanwhile, the Inquisitors use far more subtlety in their endeavors. That is to say, Inquisitors are always crafting complex plans, mostly striking from the shadows via insidious plots. The Sith Inquisitor’s questline emphatically reflects these shady aspects.

Relationships change often in this class story. Although you have a loyal troupe of companions following you throughout, many supposed allies met during the Prologue will prove to be the Inquisitor’s greatest enemies further down the quest line.

SWTOR: Empire Class Stories Ranked Worst to Best | HGG (3)

Why is the Sith Inquisitor at the lowest place on this list? The primary reason is that the Inquisitor quest line just can’t compete with the other stories in the Imperial wheelhouse. Inquisitor’s aren’t given a particularly boring class story, but neither are they given a particularly interesting one. The general tone being that the Inquisitor never knows who to trust is exciting, the companions available can be compelling, and each major quest is dripping with intrigue.

Overall, there’s a lot to like in this class’ questline, but at the end of the day it’s a pretty average story with a few interesting twists. All things considered, a story that’s pretty good is being put up against some of the best questlines in SWTOR. Put into context with the classes placed in higher spots on this ranking, the Inquisitor just can’t keep up.


Bounty Hunter

SWTOR: Empire Class Stories Ranked Worst to Best | HGG (4)

Following the Sith Inquisitor is the host of one of SWTOR‘s most dynamic storylines: the Bounty Hunter. The Bounty Hunter is tons of fun in gameplay with their utilization of jet packs, missile launchers, and various other exciting gadgets. Their personal quest line is equally fun, with each chapter naturally flowing into each other and shaking things up often to keep it fresh.

Bounty Hunters start their class story as a participant in the Great Hunt, a contest for other Hunters in the form of a race. The Great Hunt sets up a phrenetic pace for the opening chapters, consistently raising the stakes and keeping the player on the edge of their seat. This is a great introduction to this story, and the quest line continues to pick up steam afterwards.

SWTOR: Empire Class Stories Ranked Worst to Best | HGG (5)

The Hunter doesn’t have any particular overarching goal or arch rival to hunt down throughout the story. Instead, each of the quest line’s 3 chapters is like a season of a TV show (such as The Mandalorian). The events of previous chapters build upon each other and come with their own goals for the player character.

By the end of the quest line, the Bounty Hunter has made countless allies, rivals, and adventures all throughout the galaxy. This keeps the story feeling fresh and exciting throughout. As well, it lets players live out the fantasy of traipsing around the galaxy looking for adventure. It may not be the most narratively deep class story, but it’s fun and engaging enough to make it one of SWTOR‘s best.


Imperial Agent

SWTOR: Empire Class Stories Ranked Worst to Best | HGG (6)

If you’ve ever wanted to see what would happen if James Bond was placed in the Star Wars galaxy, the Imperial Agent is for you. Their quest line is everything the Sith Inquisitor story should have been. The Republic of SWTOR already gave players the chance to play a clone/stormtrooper type, and so BioWare decided to have their alternate be something wholly original.

The Agent gets to engage in some of the most interesting missions the game has to offer. When we said the Imperial Agent is James Bond in Star Wars, we meant it. Players are tasked with uncovering a complex, trope-heavy plot, including a supervillain with a doomsday machine.

Additionally, Agents are routinely given unique opportunities not seen in other class questlines. Assuming fake identities, conducting wet work in the name of the Empire, and utilizing a variety of neat gadgets are the Imperial Agent’s bread and butter.

SWTOR: Empire Class Stories Ranked Worst to Best | HGG (7)

In terms of narrative, the Imperial Agent boasts one of SWTOR’s most complex and interesting. The story gives you a genuine sense that you’re uncovering something larger than yourself, a conspiracy that was never meant to be discovered. The Agent’s questline consistently left us wanting more, glued to the screen every step of the way.

Furthermore, the companions who join the Agent’s team are some of the most intriguing in the game. From Doctor Lokin, essentially a Star Wars werewolf, to SCORPIO’s cold calculations, this may be SWOTR‘s best cast. A near-perfect amount of gripping twists, compelling characters, and narrative depth await any player who chooses the Imperial Agent.


Sith Warrior

SWTOR: Empire Class Stories Ranked Worst to Best | HGG (8)

The Sith Warrior is the poster child of the Empire. As said before, they’re SWTOR‘s Darth Vader equivalent. This questline is all about gaining power and moving up through the ranks of the Sith Order.

We won’t spoil anything here, but the Warrior ends up in a very special position within the congregation of Dark Jedi. As the story progresses from the Warrior merely being a fresh acolyte to reaching this high point, they visibly grow not just in power but as a character. During this storyline, the Sith Warrior experiences more development than any other class in SWTOR.

Furthermore, the writing doesn’t pigeonhole the player into a narrow, rail-roading story. Every class questline in SWTOR includes player choices, but the Warrior will make some of the furthest-reaching decisions with the most visible consequences. The player is given far more control here than in any other storyline.

SWTOR: Empire Class Stories Ranked Worst to Best | HGG (9)

The only major fault with the Sith Warrior questline is that some of the companions, such as Lieutenant Pierce, fall a bit flat. The Warrior’s allies do have some standouts, such as Broonmark, the only Talz companion. However, on the whole, they don’t match the heights of the Imperial Agent’s own motley crew. This in mind, the positives far outweigh the negatives in this class’ story. Combine genuine character development, interesting villains, and a captivating mid-story plot twist, and the Sith Warrior has the recipe for SWTOR‘s best Empire questline.

Join the High Ground

We hope you enjoyed our ranking of the best class questlines for The Old Republic‘s Empire. As a servant of the Dark Side, you should now have a bit more knowledge on how best to carry out your evil bidding and take the high ground!

Do you agree with our post? Do you disagree? Maybe you have some extra thoughts. Feel free to discuss our rating in the comments below. Also, be sure to subscribe to our weekly newsletter for extra SWTOR content.

Happy gaming, and may the force be with you!

  • SWTOR: Republic Class Stories Ranked Worst to Best

  • SWTOR: Empire Class Stories Ranked Worst to Best

  • How to Get More Stims in Jedi: Survivor

  • Best Lightsaber Stance in Jedi: Survivor, Ranked

  • Best Jedi Sentinel Builds in SWTOR (2023)

" );})(jQuery);

Submit a Comment

Top Articles
Latest Posts
Article information

Author: Annamae Dooley

Last Updated: 06/07/2023

Views: 6140

Rating: 4.4 / 5 (65 voted)

Reviews: 80% of readers found this page helpful

Author information

Name: Annamae Dooley

Birthday: 2001-07-26

Address: 9687 Tambra Meadow, Bradleyhaven, TN 53219

Phone: +9316045904039

Job: Future Coordinator

Hobby: Archery, Couponing, Poi, Kite flying, Knitting, Rappelling, Baseball

Introduction: My name is Annamae Dooley, I am a witty, quaint, lovely, clever, rich, sparkling, powerful person who loves writing and wants to share my knowledge and understanding with you.