// 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); };});

The ABR-223 is a three-round burst weapon with long range, decent fire rate, and a deadly attachment set.

The ABR-223 is a deadly weapon in Black Ops 4 mutliplayer, there’s no doubt about it. However, the ABR cannot perform to its maximum potential without knowing how to use it. The weapon falls into a rare “medium range, run-and-gun” role.

With the help of XclusiveAce’s stats, let’s go over what makes the ABR-223 a special weapon.

The ABR has a high damage profile with little dropoff, a characteristic shared by all three Tactical Rifles. Shooting 4-5 shots into any opponent that doesn’t pop a heal should finish them off. This gives the ABR decent 350-424ms kill times, faster than a majority of the other weapons.

The kicker of this kill time is the fact that the weapon is burst fire. Every burst fire weapon has a delay in between bursts. The ABR has a 125ms delay between every single trigger pull. This means 125ms of standing helplessly while other weapons can continue shooting at you. It’s a small note against the ABR, but a good thing to keep in mind.

ADS times on the ABR come out at a long 300ms, enough time for SMGs to kill at close range. As such Quickdraw is a recommended pickup, putting you in line with other weapons at 250ms.

Gungho gives big benefits to the Tactical Rifles, a whopping 125ms reduction in sprint-out times. The original 300ms can be quite harder to play with due to the need to sprint from objective to objective.

ADS strafe speeds with Stock can be brutal on the ABR. The base strafe speed clocks in at only 40% of base movement speed, a slow crawl. Packing a single stock bumps the value up to 66%, giving you much more freedom while shooting.

Stock 2, while great on the Saug 9mm, actually has double downsides for the ABR. Not only does the attachment only make for a 6% increase in movement speed, but it also will spread the ABR’s bullet further as you strafe. As a burst fire, not every shot comes out as you press the trigger, there is a slight delay in between each of the three. The faster you strafe, the more spread out the burst will be.

Taking the data above, let’s examine XclusiveAce’s class choices.

The attachment set begins with a Red Dot sight for better target tracking, Quickdraw & Stock for reasons mentioned above, and a Grip. The Grip helps tighten the bursts and helps with general recoil.

The Stim Shot is used to give faster healing with more frequent uses.

In terms of perks, the class has a balanced mix of goods. Scavenger will keep your magazine reserves full as you claim territory on the map. Gungho’s 125ms reduction in sprintout speeds will come in handy to allow for more sprinting without as much risk. Dead Silence finishes out the class by keeping your steps quiet, allowing for flanks around enemy position without their knowledge.

Check out XclusiveAce’s full video for even more stats on the ABR-223 as well as other weapons. You can find the video embedded below for your convenience.

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.