Enjoy the feast before what could be a looming famine.
ByLewis Gordon,
a freelance writer who covers video games
Photo-Illustration: Kris Andrew Small; Photos: Ubisoft, Sony Interactive Entertainment, Activision, Treyarch, Raven Software, Bloober Team
Photo-Illustration: Kris Andrew Small; Photos: Ubisoft, Sony Interactive Entertainment, Activision, Treyarch, Raven Software, Bloober Team
As the nights draw in, the clocks go back, and the temperature drops, you know the most hallowed time of the year has arrived: video-game season. Fall is typically when tentpole franchises unleash their latest blockbuster, just in time for holiday shopping: Headlining this year are a new Call of Duty and Assassin’sCreed. These will be competently made, absorbing in their own reliable, graphically resplendent ways, but the real innovation and excitement emanates from the strata of games that sits just below. Of these, we can look forward to the unhinged new horror game from Silent Hill creator Keiichiro Toyama, an effervescent mascot platformer courtesy of Sony, an original JRPG franchise from the talent who brought us the modern classic Persona 5, and a heap more.
In some ways, it’s remarkable that 2024 is putting on such an end-of-year spread. The video-game industry has certainly been going through it for the past couple of years, laying off workers at a brutal clip (including entire studios and publishing operations), dealing with a post-COVID comedown, declining console sales, and the drying up of cheap money that bankrolled many recent titles. It could be one of the last falls before these troubling developments begin to bite at the release calendar. Enjoy the feast before what could be a looming famine.
September
The Casting of Frank Stone (PC, PlayStation 5, Xbox Series S/X; September 3)
Since 2015’s frightfully good Until Dawn, U.K. studio Supermassive has carved out its own niche of cinematic, choice-driven horror games. Like 2022’s The Quarry and the Dark Pictures Anthology that arrived a few years earlier, The Casting of Frank Stone is an unabashed homage to teen horror movies — and that’s no bad thing. The premise is a tropey doozy: A group of teenagers sets out to film a horror movie at an abandoned steel mill that has ties to a murderer named Frank Stone. Alongside making decisions and executing split-second button prompts, as you did in previous Supermassive games, now you get to use a 8-mm. camera, which we hope will lead to some chilling The Descent–esque jump scares. Brace yourself for some expertly crafted, self-aware schlock.
Astro Bot (PlayStation 5; September 6)
For the past two and a half console generations, Sony has positioned itself as gaming’s foremost purveyor of serious-minded, prestige titles: The Last of Us; Ghosts of Tsushima; heck, even, the bloody action nonsense of God of War struck a po-faced tone in recent entries. Astro Bot marks a return to form, namely to the company’s mascot platformer days of the early aughts. Light combat is married with playful, physics-driven platforming, plus a gorgeous sense of texture: Balloons are perfectly rubbery; the paint that you spray to make a platform wibbles and wobbles just right. Throw in the hits of nostalgia that arise from the appearance of Sony-owned characters like Parappa the Rapper and Ico, and Astro Bot could be the company’s freshest, most exuberantly fun title in years.
Phoenix Springs (PC; September 16)
A point-and-click adventure with a brilliantly modern sensibility. In Phoenix Springs, rather than a suitcase for an inventory, you have a bottomless mindmap; you collect ideas and observations, not items, to solve puzzles. Story details remain scant, but in the above trailer we spy a DJ playing out to an eerily empty room and what looks like an orchard of rotting fruit, all rendered in a gorgeous, and genuinely unnerving, minimalist graphic novel style. The trailer ends with the line, “even the right leads can lead to the wrong place.” Color us intrigued.
UFO 50 (PC; September 18)
Once you learn the premise of UFO 50, it’s easy to understand why the game has been in development for seven years (at least). This is an 8-bit, 50-game anthology presented as the output of a long-forgotten, fictional 1980s video-game company. The variety is wild, ranging from a sci-fi golf game and some kind of boomerang sports title to a genuinely beautiful RPG dungeon crawler. These games will strike an authentic audiovisual tone, using only 32 colors and featuring chiptune audio, yet they wholeheartedly embrace modern design principles. With development handled by Mossmouth, the studio led by retro-game aficionado Derek Yu, creator of the acclaimed Spelunky series, we know players are in good hands. This could end up being the most forward-thinking retro game collection ever released.
Frostpunk 2 (PC; September 20)
If you’ve found the summer heat too stifling, cool down with the chilly survival strategy sequel Frostpunk 2. The first entry, a modern classic, offered society building and tough moral quandaries on a future planet Earth ravaged by a second Ice Age. Frostpunk 2 picks up the action 30 years later with the frozen apocalypse effectively bested, yet an immeasurably more scheming foe presenting itself: humanity — or at least what remains of it. Case in point, the factions in revolt whose names are delightfully on the nose: Engineers, Foragers, Technocrats, and, our favorite, the Icebloods. How you deal with these groups, all while managing a growing city, will determine the outcome of your political reign. It’s safe to say that in Frostpunk 2, fortune doesn’t favor the brave but the smartest and most ruthless.
The Legend of Zelda: Echoes of Wisdom (Nintendo Switch; September 26)
The game fans have long been clamoring for is finally set to arrive: in The Legend of Zelda: Echoes of Wisdom we get to play as Princess Zelda herself rather than longtime franchise protagonist, Link. This isn’t a fully blown open-world bonanza like Breath of the Wild or Tears of the Kingdom, so keep those expectations in check — rather, it’s a more modest top-down adventure whose toy-like graphical style evokes the 2019 remake of The Legend of Zelda: Link’s Awakening. That said, Nintendo’s trademark mechanical wit and ingenuity appears to be on full display: Zelda fights not with a sword but a staff which is able to create replicas of items she comes across. Ascend ledges by stacking tables, or, if you prefer, creating towers of water which you then swim up. At last, Zelda gets to be the star of her own series.
October
Silent Hill 2 (PC, PlayStation 4; October 8)
They couldn’t do it, could they? Silent Hill 2 is the definitive cult classic, a Lynchian slice of psychological horror which has cultivated a rabid fanbase in the 23 years since it was released. Polish horror specialist Bloober has the unenviable task of remaking it, satisfying those longtime devotees while modernizing Konami’s flagship horror franchise for the all-new Five Nights at Freddy’s generation. What we’ve seen looks competent enough: the famously obfuscating fog is suitably thick, and the genre-definingly creepy monster designs of Masahiro Ito are rendered more grotesquely than ever. Bloober’s output is patchy, ranging from the pretty great (2017’s Observer) to distinctly iffy (2021’s The Medium). Time will tell whether the studio is up to the most daunting of tasks, or whether this remake turns out to be something of a poisoned chalice.
Metaphor: ReFantazio (PC, PlayStation 4, PlayStation 5, Xbox Series S/X; October 11)
Metaphor: ReFantazio is a mouthful of a title, and neither is it especially subtle. The game takes place in a medieval fantasy setting, the United Kingdom of Euchronia (another tongue-twister!), which is intended to mirror our own world — indeed, to act as a metaphor for it. This is quite a departure for Tokyo-based studio, Atlus, best known for its seminal JRPG series, Persona, which takes place in modern Tokyo. However, fans of that series will feel immediately at home with the dungeon crawling exploration, turn-based battles, and swaggering sense of style (not least in its gorgeous UI — seriously, check it out). For all its boldness — the operatic drama, gaudy enemy designs, and preposterous fantasy hijinks — it appears that Atlus is still making the kind of game it is best at.
Call of Duty: Black Ops 6 (PC, PlayStation 4, PlayStation 5, Xbox One, Xbox Series S/X; October 25)
There’s a lot riding on this new Call of Duty entry for Microsoft, the first to hit digital and physical shelves since the tech giant acquired Activision Blizzard in October 2023. The business context is almost more interesting than the game itself: Game Pass subscribers, whose fees have just been jacked up, will gain access day one. The game is also coming to PlayStation consoles, thanks to a bitterly negotiated agreement made between Microsoft and Sony during said acquisition. As for the actual game, there’s three primary components: the single-player campaign, a high-octane spy thriller in the vein of a John McTiernan movie; online multiplayer, which is more of the same run-and-gun gameplay which has defined the series since 2007’s Call of Duty 4: Modern Warfare; zombie mode also makes a return. In spite of the acquisition, it appears to be business as usual for the ever-popular first-person shooter franchise.
Life Is Strange: Double Exposure (PC, PlayStation 4, PlayStation 5, Xbox Series S/X, Nintendo Switch; October 29)
Life Is Strange: Double Exposure isn’t a run-of-the-mill supernatural mystery: it’s also an ambitious narrative experiment that’s attempting to have its cake and eat it, too. 2015’s Life Is Strange ended with an all-timer of a moral quandary: save your best friend or an entire town. The new game respects both endings, and so, as per the “double exposure” of its title, you’ll be able to move back and forth between two parallel timelines. Judging by this extended gameplay showcase, we’re confident the YA drama, small-town paranoia, and dialogue-driven choices will be smart and engaging. The real question is how Life Is Strange: Double Exposure walks the narrative tightrope of its dual-reality premise.
November
Mario & Luigi: Brothership (Nintendo Switch; November 7)
The Mario & Luigi gamesare not quite as beloved as standalone Super Mario titles or even those of the Luigi’s Mansion series, but the action-RPG franchise is not without its charms. Just as in previous entries, Mario & Luigi: Brotheship will feature exploration, platforming, mini-games, and a healthy dollop of the series’ rhythmic turn-based combat. What’s new? Well, the cel-shaded graphics have a beautiful comic book quality, and this is the first time the series has been rendered in full 3D. This island-hopping adventure of warm sun and cerulean blue skies could make the perfect winter sojourn as the cold weather begins to bite.
Slitterhead (PC, PlayStation 4, PlayStation 5, Xbox Series X; November 8)
Arriving precisely a month after the remake of Silent Hill 2, Slitterhead is the latest project from Keiichiro Toyama, creator of that esteemed horror series. Gameplay appears to rest on a parasitic worm, which lets the player jump between people as they do battle with giant insectoid creatures roaming deserted city streets. Just like the Silent Hill franchise, there’s plenty of gore: in one scene, a biker’s arm is sliced off, only to be reattached mere moments later by a viscous spurt of blood and tendons. Elsewhere, creepy children gaze at you with piercing red eyes. It’s been seven long years since Toyama helmed a game, 2017’s bright, anime-esque adventure Gravity Rush 2. We’re hoping the feted Japanese designer hasn’t lost his horror juice.
Assassin’s Creed Shadows (PC, PlayStation 5, Xbox Series S/X; November 15)
Assassin’s Creed has always played like a ninja game. You skulk about rooftops before driving a concealed blade into an unaware target at an opportune moment. It’s long been rumored that the history-trotting franchise will visit Japan, and lo, it has finally happened. Our two protagonists are Naoe, a shinobi, and Yasuke, a samurai, who travel about the picturesque country on horseback in the sixteenth-century. In one extended gameplay segment, we see Yasuke moving through a sun-dappled forest to the outskirts of a town surrounded by pink cherry blossom and paddy fields, hopping off his steed to pet a shiba inu. It’s very on the nose, but then Assassin’s Creed has never been especially subtle, often delivering a greatest hits of its chosen historical setting. Prepare for another slice of stabby, beautiful realized virtual tourism.
S.T.A.L.K.E.R. 2: Heart of Chornobyl (PC, Xbox Series X/S; November 20)
Each of the pre-release trailers for S.T.A.L.K.E.R. 2: Heart of Chornobyl proudly states “made in Ukraine.” You can well understand why: during the development of the long-awaited return of the survival shooter series, Kyiv-based maker, GSC Game World, was forced to relocate en masse to Prague because of Russia’s invasion of the Ukraine. As a result, studio founder Sergiy Grygorovych has called it a “national product,” one whose rugged first-person action set in the Chornobyl Anomalous Exclusion Zone is intended to show the value of the country’s “cultural legacy.” In long-standing S.T.A.L.K.E.R. fashion, you’ll navigate physics-shredding anomalies, make friends with fellow stalkers (those who seek supernatural artifacts found in the region), and face off against a rogues’ gallery of mutants.
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"1":1,"6":6,"12":12,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(3),auth=require(12),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(1),appendLandingPageParams=require(136),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let o=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||o.classList.remove("open")})}function gtmSendReport(e,n,t){let o={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(o.eventLabel=n.href),gtm.reportNow(o)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const o=t.split("?"),i=new URLSearchParams(o[1]);for(let e of n.entries())i.set(e[0],e[1]);t=`${o[0]}?${i.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),auth.isSubscriber()&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"1":1,"3":3,"12":12,"124":124,"136":136}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(408),Fingerprint2=require(407),DS=require(406),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(107),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(408),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"107":107,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"408":408,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]