");$( "#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 // main-header height for consistency -supersoupvar offsetTopForView = $("#main-header").height() ; //pxvar $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 Joel Stadler | Aug 2, 2022
Image: Amazon Games via HGG / Joel Stadler
As most players know, MMORPGs (usually shortened to just MMOs) are massive multiplayer games that frequently involve playing with a lot of people at once. This doesn’t necessarily have to be the case, though — some players want to play solo instead of in a group, even a small one.
In this guide, we’ll cover the best solo builds for New World, including what it means to have a solo build, the qualities you’re looking for, and a few recommendations to get you going.
Let’s get started!
What Makes a “Best Solo Build”?
We’ll begin by clarifying the difference between the viable solo builds versus the best ones. Most builds in the game are viable, and you should ultimately play the build you want to play.
With that being said, some builds can be very fun, but might require janky or unreliable methods for beating certain enemies or bosses. What we’re looking for in this guide is the build that makes going through quests/story content the easiest for the player.
What To Look for in a New World Solo Build
For a really good solo build in New World, you’ll be primarily focused on survivability and damage. It’s important to have a balance of these two factors — going too hard on DPS means you won’t be able to tank big hits or face swarming enemies, and too much tanking means you won’t deal enough damage to get through fights.
It’s also important to consider when putting together a solo build that you’re going to be playing…well, solo. Your enemies won’t always be alone, and while some builds are good for 1v1 fights, they might crumble against a group. Ideally, the best solo build will be equipped to deal with multiple enemies at once.
The Best Solo Build in New World: The War Hammer Build
In my opinion, the War Hammer is the best weapon for solo play. There are many fun and viable builds in New World for solo play, but this build exemplifies what we’re looking for in solo play.
The Attributes
For this build, you’ll want to focus on Strength and Constitution. The War Hammer scales with Strength, so you’ll obviously need that for damage. Constitution gives you extra hit points, so it’s vital for tanking.
You can divide these points as you see fit, but personally, I put two points in Strength and one in Constitution at each level. It’s up to you, though!
The Equipment
To compliment your War Hammer, you’re going to want to wear the heaviest armor you can get your hands on. This build ideally wants to be attacking as much as possible and spending minimal time on blocking or dodging.
You should prioritize your armor ratings and gear score to maximize your defense, giving mobility the backseat. You want all your equipment (including the War Hammer itself) to be “of the barbarian,” since that will boost your Strength and Constitution.
It doesn’t hurt to also have a good stock of potions and food on hand in case you need healing. Hopefully your tankiness will be enough to carry you through, but having the potions and food in your bag just in case is a great backup.
New World Solo Build: Active Skills
For this build, you want high damage and a bit of crowd control. You’ll also get a lot of benefit from your passive skills, so keep an eye out for those.
1. Shockwave
Shockwave is the second-row active skill of the Crowd Crusher skill tree and by far your most important active skill in this build. You hit all enemies in a 3m radius for 80% weapon damage and stagger/stun them for 2s. This ability has grit and a 19.6s cooldown.
Shockwave is an AOE stun. You will run into situations where three to four, or sometimes more, enemies will be on you at once. Use Shockwave and you’ll be able to take out a few before the horde recovers.
The fact that Shockwave has grit makes it even better because it’s harder for enemies to interrupt the skill.
2. Armor Breaker
Armor Breaker is the first-row active skill in the Juggernaut skill tree. It does what it says on the tin. Armor Breaker does 140% weapon damage, ignores 35% of the target’s armor, and comes at an 11.8s cooldown.
It just does reliable damage. With the full upgrades, Armor Breaker becomes your best opener in ninety-nine percent of your fights.
3. Mighty Gavel
Mighty Gavel is your closer. Once Fully upgraded, you are not competing with Mighty Gavel for damage in this build. You leap toward your enemies and deal 170% weapon damage. This comes at a 19.6s second cooldown.
Mighty Gavel is an investment, but it is your best source of damage.
New World Solo Build: Passive Skills
The passive skills are actually a lot of the meat of this build. They allow you to get your heavy attack damage up really high, which is the goal in this build.
1. Crowd Crusher
First off, I recommend Outnumbered. It increases your damage absorption by 10% when you have at least two enemies within 3m. The skill on its own is good, but would not be good enough to be top priority. I recommend it first, because it lets you unlock Shockwave as quickly as possible.
Once you unlock Shockwave, grab the upgrades Frailty, which applies Weaken to enemies hit by Shockwave, and Meteoric Impact, which increases Shockwave from a 3m area to a 4m area. Once you have those passive skills, you can largely ignore the Crowd Crusher skill tree.
2. Juggernaut
This is where you can really boost your heavy attacks, which is something that should not be underestimated in this build. The active skills are certainly flashier, but don’t let that fool you into thinking they are all you need.
Both Epitome of Bonk! and Hammer Time from the first row are solid. Epitome of Bonk! increases armor penetration on all light and heavy War Hammer attacks by 10%. Hammer Time grants empower on your heavy attacks. This increases your damage by 20% for 4s.
Moving down to the second row, Hardened Steel is the must-pick skill. Hardened Steel gives your heavy attacks grit, and gives you a 12% damage reduction while grit is active. Grit is huge, meaning you can power through most enemy attacks and just keep piling on the damage, and the damage reduction is a nice cherry on top
Exhaustive Attack is a bit of a trap. It isn’t necessarily bad, but you don’t normally have to worry about enemies running away from you, so I would not prioritize it.
Justice for All: Mighty Gavel Upgrade
You might think racing to fully upgrade Mighty Gavel is the way to go. After all, Justice for All does a lot of damage. It does of course. But keep in mind that to unlock Justice for All, you first need ten other Juggernaut skills, one of which needs to be Expedite. In other words, you need to fully upgrade Mighty Gavel first.
But even if you race as quickly as you can, grabbing a first-row skill then going Mighty Gavel all the way, you will only have five Juggernaut skills in total, half what you need to unlock Justice for all. And that’s assuming you don’t grab and upgrade Shockwave first, which I would strongly recommend.
Save Mighty Gavel, and therefore Justice for All, for the end of the build.
Fighting with the War Hammer
Putting this build into practice is quite simple actually, which is part of why it’s the best solo build for New World. Ultimately, you just rush in and start bonking enemies on the head until they stop moving.
In most cases, Armor Breaker is going to be how you start the fight. Once you have it, Mighty Gavel is probably how you end the fight. If overwhelmed by enemies, apply Shockwave until the group is more manageable. Other than that, just keep heavy attacking. It’s simple, and should see you through most fights you engage in.
Join the High Ground
That’s it for our guide to the best solo builds in New World — thanks for reading! Feel free to leave a comment below, and don’t forget to subscribe to our newsletter for more content like this.
Happy gaming!
New World Fire Staff Build Guide
New World: Best Life Staff Build Guide