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

Editor’s Note: Activision Publishing provided us with travel and accommodation to Los Angeles for the Modern Warfare review event. We played Call of Duty: Modern Warfare on PlayStation 4 Pro. 

Please note: Our post features spoilers for the campaign. If you’re interested in playing the campaign, please do not need until you complete it. Let us know your thoughts too! 

Impressions/Story Begins:

During our review event last week in LA, we had a chance to go hands with the Call of Duty: Modern Warfare Campaign. In fact, we got to the entire campaign from start to finish. 

Infinity Ward is known for delivering stories that capture people’s attention, stories that have an impact on people, and emotional connection with characters. Infinity Ward’s last title, Infinite Warfare, had one of the best campaigns in Call of Duty history. 

Does Modern Warfare’s campaign match up to that? 

After our play session: Yes. 

Modern Warfare’s campaign is real. Like, Infinity Ward was not messing around when they said they would tackle real events and real moments in this game. The stories and moments that the campaign touches — from real events in the Middle East to conflicts of large foreign powers — is on display in this game. 

It’s a campaign that people can actually relate to, and of course, Captain Price is back. It’s a different Captain Price, but as you play, you’ll see how Infinity Ward pays homage to the original character. 

The story is very real. You can see how certain real life events inspired this story and its overall goal.

For example, one of the main enemies in the game is ‘The Wolf.’ Infinity Ward tries to make this character almost the ‘Osama Bin Laden’ of Call of Duty: Modern Warfare with how big an impact he has on the outcome of certain events. He’s there…and an annoying person who has his hands in everything that happens. 

Playing this campaign, I don’t think there is any “No Russian” standout moment that really sticks — there are aspects throughout the game that have this. The waterboarding moments, the child crying, playing as the child, civilians in Piccadilly, and more. The game makes you choose in some situations, and it penalizes you if you make the wrong choice in other cases. The waterboarding moment makes you feel uneasy — the graphics, the effects, and more give you the sense of how horrifying that is. 

The game has the emotional aspect that Infinity Ward wanted to deliver. It makes you feel a connection to Farrah and her story and why she fights. Her back story helps explain what’s going through people’s minds in that region who have had their lives uprooted by war. They have to pick up what’s left and fight. The flashback scenes help lay the ground work for the connection for Farrah and even identifies the connection between Price and Farrah. 

Let’s talk about the ending. Major Spoilers now. 

I was waiting for another mission to happen after what happened between Captain Price and Laswell. He shows the documents of the original Modern Warfare characters, including Gaz, Ghost, and Soap, and it ends?! 

Infinity Ward is annoyingly good at making cliffhanger. They know how to keep those endings wide open for the future, especially Call of Duty: Ghosts, which to this day annoys me that we have no real closure to what happened there. 

And this story does the same. It leaves it open for….Modern Warfare 2, Part 2? Who knows what they can call their next game. But the ending does leave for a lot of possibilities. We don’t even know what can happen next, and I was really hoping for one more mission with Soap and Ghost to really drive home the overall connection back to Modern Warfare, but it does not happen. You don’t get to see Soap or Ghost in this game, which was a bit sad. 

And this is the first time that the campaign mode goes beyond just the campaign with a continuation of some themes in the Special Ops mode. You are greeted to an ending cut scene after the game’s credits that sets up Special Ops mode in Call of Duty: Modern Warfare. It’s an interesting idea — continuing the story into another mode, but at the same time leaves you wanting more of the story itself. 

Infinity Ward delivered a good story — one that makes you feel an emotional connection to the characters, a connection to the events as they’re ground in reality, and leaves you wondering what’s next for Infinity Ward. 

Overall, we’d recommend that you play the campaign. Infinity Ward built a good story that deserves a play through. 

comments below