// initialize jwplayer var playerInstance = jwplayer('player');// player dom elements var playerContainerEl = document.querySelector('.player-container');// returns video player position from top of document function getElementOffsetTop(el) { var boundingClientRect = el.getBoundingClientRect(); var bodyEl = document.body; var docEl = document.documentElement; var scrollTop = window.pageYOffset || docEl.scrollTop || bodyEl.scrollTop; var clientTop = docEl.clientTop || bodyEl.clientTop || 0; return Math.round(boundingClientRect.top + scrollTop - clientTop); }// returns the current y scroll position function getScrollTop() { var docEl = document.documentElement; return (window.pageYOffset || docEl.scrollTop) - (docEl.clientTop || 0); }// configure jwplayer instance playerInstance.setup({ autostart: true, playlist: 'https://cdn.jwplayer.com/v2/playlists/mYdavspX', primary: 'html5', setFullscreen: true, width: '100%' });// when jwplayer instance is ready playerInstance.on('ready', function() { var config = playerInstance.getConfig(); var utils = playerInstance.utils; // get height of player element var playerHeight = config.containerHeight; // flag determining whether close has been clicked var closed = true; // CHANGED // flag determing whether player is playing var playing = false; // ADDED // eventhandler for when close button is being pressed document.getElementsByClassName('icon-close')[0].addEventListener('click', () => { closed = true; onScrollViewHandler(); }); playerInstance.on('play', function() { closed = false; playing = true; // ADDED }).on('pause', function () { playing = false; // ADDED }).on('adPlay', function() { closed = false; // ADDED playing = true; // ADDED }).on('adPause', function() { playing = false; // ADDED });// get player element position from top of document var playerOffsetTop = getElementOffsetTop(playerContainerEl);// set player container to match height of actual video element playerContainerEl.style.height = playerHeight + 'px';// below we handle window scroll event without killing performance function onScrollViewHandler() { var minimized = getScrollTop() >= playerOffsetTop;if (closed && minimized) { minimized = false; jwplayer().pause(); playing = false; // ADDED } else if (!minimized && !playing) { closed = true; // ADDED } utils.toggleClass(playerContainerEl, 'player-minimize', minimized); // update the player's size so the controls are adjusted playerInstance.resize(); }// namespace for whether or not we are waiting for setTimeout() to finish var isScrollTimeout = false;// window onscroll event handler window.onscroll = function() { // skip if we're waiting on a scroll update timeout to finish if (isScrollTimeout) return; // flag that a new timeout will begin isScrollTimeout = true; // otherwise, call scroll event view handler onScrollViewHandler(); // set new timeout setTimeout(function() { // reset timeout flag to false (no longer waiting) isScrollTimeout = false; }, 80); };});

Ruin is a versatile and highly mobile Specialist with a dynamic and powerful ability set.

Ruin is the most in-your-face Specialist in Black Ops 4. His whole kit revolves around getting to objectives fast and causing quick, unrelenting damage. Ruin’s goal is to move quicker than the enemy and use his Slam to gain positional advantages for his team.

Let’s take a look at Ruin’s ability and special issue equipment. We’ll go over some of the best ways to use each and some things to avoid while playing Ruin.

Specialist Ability: Grav Slam

Ruin’s Grav Slam is a fairly reliable zone-clearing ability. Its instant kill and wide radius make it hard to avoid and gives you many opportunities for multi-kills.

The best way to use Grav Slam is to be as aggressive as possible. Constantly fly at the enemy, guns-blazing and make them afraid of your ability. Many players will back up from objectives on instinct when they see a Ruin approaching. You can use this to your advantage by furiously pushing objectives. Think of it as a “First one in, first one out” type of playstyle.

Once you are confident that you can cause maximum damage, don’t hesitate to pop your Slam. It is best used immediately when you see the opportunity for a multi-kill. Important to note is that the Grav Slam takes longer to land the higher the user is. You should always Grav Slam from as close to the ground as possible to prevent enemies from shooting you before the blast hits.

With this said, there are a few exceptions to this rule. More on that in the next section.

Special Issue Equipment: Grapple Gun

The Grapple Gun allows Ruin to travel quickly in straight lines and gives him the unique ability to periodically “fly”. Ruin can shoot in the air once he releases his grapple and can pull off some jetpack-like moves. If you can aim while moving very quickly, try shooting yourself up above objectives and raining down lead.

Other than shooting and traveling fast, the grapple is most useful when paired with the Grav Slam. This is where those “exceptions” kick in.

Though the Grav Slam does take longer to apply damage when used in the air, many objectives provide lots of vertical cover. This means Ruin can launch himself high above the action and Grav Slam from on high. This does not increase the radius of the blast, but it makes avoiding the blast a lot harder.

If enemies don’t notice your approach with the Grapple (hard due to the loud noise it makes), you can surprise attack with the Slam. This strategy does require superior map knowledge, so spend some time combing every map for potential Grapple spots for high Grav Slams.

We hope these tips will help you in your multiplayer experiences. Be sure to check us out on Twitter at @CharlieIntel for daily news, guides, and more.

comments below
A life-long Call of Duty player, Bachelor of Game Design, and a lover of eSports. Floodsye is my real name, Tommi is just the gamertag my parents gave me.