ByLewis Gordon,
a freelance writer who covers video games
Photo-Illustration: Vulture; Photos: SEGA, Capcom, Team ASOBI, A44 Games, Bloober Team
This list is updated monthly with new “Best of the Year”–worthy titles.
How does the video-game industry follow up 2023, a year that went down in history as one of the best ever for actual releases and one of the worst ever for its thousands of laid-off workers? By continuing both trends into 2024 with a similarly intense energy. Sticking to the good news, we’ve already enjoyed one bona fide Game of the Year contender, a dragon-slaying epic with truly devious design, and a handful more titles that have caused no end of delight. What stands out among this disparate bunch is the medium’s transportive potential: a Hawaiian sojourn with a motley crew of lovable weirdos, gardening in the outer reaches of the cosmos, a time-stricken Persian fortress. During a year when the world has been going through it, these games have felt like the most sacred, necessary of things: a sanctuary.
All games are listed chronologically in order of release, starting with the most recent.
Phoenix Springs
(PC)
Photo: Calligram Studio
Weird noirs have been a staple of the point-and-click adventure genre for practically all of the genre’s existence: classics like 1993’s Sam & Max Hit the Road and the delightfully wicked Grim Fandango, released in 1998. The visually ravishing Phoenix Springs is weird noir, but in a different way, taking its cues from so-called “weird fiction” popularized by the likes of China Miéville. This is a heady, serious work whose story nods to bioethics, toxic fungi, and a mysterious green paradise in the heart of a desert. Yet it is driven by an undeniably affecting mystery: A tech journalist is searching for her missing brother; how far is she willing to go to find him? Beyond its hyperstylized, graphic-novel-esque visuals, Phoenix Springs offers smart updates to the point-and-click formula. You are not combining objects to solve puzzles but ideas; you’re not delving into an inventory but a sprawling mindmap. The result is a supple, modern take on the genre governed by a free-associative dream logic. Like an arthouse movie, don’t expect this unsettlingly beautiful game to answer every one of its tantalizing questions.
Silent Hill 2
(Playstation 5, PC)
Photo: Bloober Team
Few titles in the history of video games have felt caught between eras quite like Silent Hill 2 did in 2001. In story and visuals, Konami’s seminal survival horror was undeniably modern — an accursed deep dive into a Freudian subconscious whose vibe was simultaneously pulpy and prestige. But in feel, Silent Hill 2 had more in common with Resident Evil games of the 1990s: a fixed camera (the result of hardware limitations) was creepy but ultimately unwieldy; the combat, meanwhile, was clunky and far too easy, undermining the game’s infernal, depraved atmosphere. The remaster, by Polish studio Bloober, addresses these issues while sacrificing nothing of what made the original great. It switches the viewpoint to a modern over-the-shoulder camera vantage; the combat is nervier and more desperate, as if you’re surviving each encounter by the skin of your teeth. You could make the argument that this remake plays it a little safe, often re-creating cinematics line-for-line and shot-for-shot. But that isn’t quite right: The 2024 version of Silent Hill 2 is a subtle, thoughtful reimagining of one of gaming’s true sacred cows. It is as brilliantly miserable as the esteemed original.
Astro Bot
(PlayStation 5)
Photo: Team ASOBI
A throwback platformer with an utterly modern sensibility, Astro Bot is a pleasure-center tickler of the highest order that doubles as fan fiction for its publisher, Sony. Where the most recent mainline Mario title, 2017’s Super Mario Odyssey, offers whimsical gameplay in large open spaces, Astro Bot serves an unashamedly linear set of levels jam-packed with delightful details, hard-to-find secrets, and Easter eggs. It’s perhaps 2024’s most pleasantly tactile game, both in terms of how materials look and behave onscreen, and how developer Team Asobi communicates this to the player through the next-level haptic feedback of the controller. Yes, Astro Bot is flagrant corporate cheerleading featuring much Sony-owned IP and a robotic hero who looks like a mass-produced electronic device. It’s also an endlessly inventive, artfully crafted title that, as much as celebrating the past, points to a bright, bold future of play.
Flock
(PlayStation 4/5, Xbox One, Xbox Series S/X, PC)
Photo: Hollow Ponds
The latest from indie auteurs Hollow Ponds and Richard Hogg riffs on Pokémon’s creature-collecting formula, albeit from a naturalist’s point of view. You identify adorable critters so you can fill out a field guide, then enlist them into your flock from some kind of kinship. The relaxed action takes place in an open world of mushroom caverns, mossy boulevards, and flat wetlands, all rendered in a beautifully odd, Pop Art aesthetic. As you fly about, the nature-inspired soundscape of trills, honks, and delicate rustlings offers clues to where to cast your gaze. It adds up to one of the year’s loveliest titles, a game of ruminative observation set in a world of wild splendor.
Flintlock: Siege of Dawn
(PC, PlayStation 5, Xbox Series S/X)
Photo: A44 Games
New Zealand studio A44 made its name with 2018’s Ashen, a confident, inviting take on the famously punishing Soulsborne genre. Flintlock: Siege of Dawn is even more accessible: quippy and vivacious, pairing magic with a steampunk aesthetic and a series of arresting, earthy locales. The combat exudes a wonderful crackle and pop: A pistol is used primarily for defense, while an axe rips through ornate armor. Exploration is artfully designed, whisking you through bone-white palaces; craggy, precarious mountains; and fishing villages that have fallen on hard times. Like most Soulsborne games, paths criss-cross while cosmic aerial shortcuts offer a thrilling new perspective on the entangled environment below. Flintlock: Siege of Dawn may lead with skull-piercing combat, but what lingers in the mind is its undeniable and unusual approach to cultivating wanderlust.
Kunitsu-Gami: Path of the Goddess
(PlayStation 4/5, Xbox One, Xbox Series S/X, PC)
Photo: Capcom
In a year already flush with weird, mechanically rich titles (Pacific Drive, Dragon’s Dogma 2, Animal Well), we can add the folkloric hack-and-slash of Kunitsu-Gami: Path of the Goddess to the pile. At first glance, it appears to be a mêlée combat game of the kind Japanese publishing giant Capcom has long won plaudits for (think: the Onimusha and Devil May Cry franchises). But then, tower defense and light strategy elements are introduced, giving you control of a cohort of villagers committed to helping you purge a picturesque mountain of ghoulish monsters. The presentation, which leans hard on photogrammetry, is ravishing in its ornateness. This speaks to the extent to which the game is a ritual, not just in terms of narrative setup but in the way every material, pattern, charge, and defense is imbued with an otherworldly meaning. This gorgeous, unconventional assembly of elements casts the most beguiling of spells.
Still Wakes the Deep
(PC, PlayStation 5, Xbox Series S/X)
Photo: The Chinese Room
Christmas 1975: an oil rig off the eastern coast of Scotland. In Still Wakes the Deep, you play as electrician Caz Mcleary, who has the unfortunate fate of being onboard when a cosmic horror entity is unearthed from the bedrock. What occurs is a brilliantly tense game of first-person hide-and-seek with a commanding sense of style: schlocky B-movie monster horror à la John Carpenter through the class-conscious lens of Ken Loach. The pacing is masterful, ratcheting with every duck, dive, crawl, and leap, all while serving as a cautionary tale of mankind’s hubris, its belief in a God-given right to strip the Earth of its natural resources. When not contending with vertigo-inducing heights or bootlicking middle managers, quieter moments shimmer with a strange, unknowable beauty — the calm, if we can call it that, amid the swirling storm that engulfs the doomed rig.
Lorelei and the Laser Eyes
(Nintendo Switch, PC)
Photo: Simogo
Lorelei and the Laser Eyes poses an odd yet tantalizing question: What if a compendium of word and number puzzles, the kind you might take on holiday, were scattered about a creepy hotel? And what if the aesthetic of this delightfully off-kilter, head-scratching experience were indebted to French new wave cinema, particularly Alain Resnais 1961 classic, Last Year at Marienbad? Disorientating at first, the designers at Swedish studio Simogo, gradually (and masterfully), teach you to recognize the patterns and logic which govern this metatextual world. Like Tetris, another classic of the puzzle genre, Lorelei and the Laser Eyes has the power to enter your dreams, only not as blocks but as maddening, endlessly recurring numbers. 1847 can go to hell.
Animal Well
(Nintendo Switch, PC, PlayStation 5)
Photo: Billy Basso
Dense and esoteric without feeling cold or inaccessible, the puzzle-platformer Animal Well is the project of lone designer, Billy Basso, developed over a remarkable seven years. In the Borgesian depths of the titular well reside a menagerie of bewitching creatures: gigantic flamingos, killer ostriches, an unnerving ghost cat. The lo-fi pixel-art graphics sell the dank, eerie loneliness of this setting. More tantalizingly, Animal Well possesses a wonderful, and rare, sense of physical cohesion. A Slinky (one of the pleasingly humdrum objects you pick up on your journey) cascades down the cavernous interiors; a Frisbee bounces about the echoey walls and can be used to distract ravenous dogs. It’s not just the fact that Animal Well feels like a real place that marks it out as something special; it behaves like one, too.
Indika
(PC, PlayStation 5, Xbox Series S/X)
Photo: Odd Meter
Who knew the third-person adventure game, popularized in the 1990s by a certain Lara Croft of Tomb Raider fame, could take such a daring and downright weird turn? Indika, unlike Croft, is not your typical video game protagonist, a Russian nun who is in communion with the Devil himself. You direct her across a series of strange fairy-tale locales through an endless expanse of snow-covered hills with architecture so wonky and supersize that it defies the laws of conventional physics. There are puzzles: Some rip the very fabric of Indika’s reality apart; others rearrange entire neighborhoods. It’s always a treat seeing Kazakhstan-based developer Odd Meter use the language of video games to take us deep into the mind of our unlikely hero. Consider it as much a beautifully nuanced character study as a hell-raising adventure.
Dragon’s Dogma 2
(PC, PlayStation 5, Xbox Series S/X)
Photo: Capcom
Unlike FromSoftware’s Dark Souls games, Dragon’s Dogma 2 is not necessarily a challenging game so much as one that demands effort. Sure, you’ll get pummeled by giant monsters, from griffins and ogres to lumbering cyclopses, but more than honing your combat skills, the game is all about internalizing its airtight logic and acting accordingly. Use the day-night cycle to your advantage, preparing while the sun is down, navigating when it is up. Talk to absolutely everyone because quests do not just fall into your lap. Listen to what they say because quest markers, for the most part, simply do not exist. Throw in the ambient multiplayer of the pawn system, one that lets you create a secondary character and download those of your friends’, and you have a clockwork set of mechanics that summon, with bravado, ingenuity, and no shortage of flair, the most highly coveted of interactive experiences: pure adventure.
Pacific Drive is destined to become an all-timer with a very specific type of video-game fetishist. It pairs crafting busywork with white-knuckle car rides through meteorological maelstroms, all while summoning an exquisitely quiet, lonely atmosphere reminiscent of the great Half-Life 2. It’s a weird mix — fitting, really, for a game that’s clearly indebted to the weird fiction of authors like Jeff VanderMeer. But it hangs together beautifully: Crafting is satisfying and meditative, driving is utterly exhilarating, and the presentation is simply ravishing (both the weather effects and your car’s gorgeously tactile dashboard). It adds up to a consistently absorbing and strangely alluring nightmare. You can practically smell the car fumes.
Balatro
(Mac, Nintendo Switch, PC, PlayStation 4, PlayStation 5, Xbox One, Xbox Series S/X)
Photo: LocalThunk
The roguelike deckbuilder, a genre mash-up of the run-based old-school physical deckbuilders (like Magic: The Gathering), has long made a strong case for being video games’ most compulsive genre. Balatro takes it to the next level with the introduction of a fiendish element: poker. At first, the game plays a lot like poker in the real world: Two pair? Fine. A flush? Even better. Full house? Now we’re talking. Between rounds, however, you get to spend your winnings in the shop, accruing modifying cards that flare the action off in genuinely bizarre directions. These might be holograph, steel, or gold versions of cards that confer multipliers or additional chips. Heck, tarot cards are even part of this unruly equation, transforming your deck in strange and interesting ways. Within a few rounds, Balatro becomes a kaleidoscopic blur of numbers and color. It’s poker, then, but not quite as you know it — poker that feels nearly psychedelic.
Ultros
(PC, PlayStation 4, PlayStation 5)
Photo: Hadoque
The second Metroidvania on this list elicits a strikingly different emotional register to the first. Yes, Ultros can make you feel acutely alone as you plot a route off its abandoned spaceship (here called the Sarcophagus), and it will likely inspire glee through its wonderful, viscera-slicing combat. But slowly, these feelings make way for something more nourishing. Ultros is also a game about gardening: You plant seeds in the ground, they yield fruits, and, more tantalizingly, they begin to alter the environment. The game’s great trick is that it doesn’t go out of its way to explain how this alien shrubbery works. So you experiment and hybridize, sometimes doing little more than letting time pass to ensure the bizarre flora can blossom into its true form. By the game’s end, the Sarcophagus is a tangled web of bioluminescent roots, shoots, and foliage — so pretty that you might not actually want to hop into the escape pod.
Like a Dragon: Infinite Wealth
(PC, PlayStation 4, PlayStation 5, Xbox One, Xbox Series S/X)
Photo: SEGA
In its Like a Dragon series, one of Ryu Ga Gotoku Studio’s many strokes of genius is the protagonists, who are the perfect anchors to the open-world, gangster mayhem unfolding around them. Ichiban Kasuga, possibly the sweetest, most well-meaning former yakuza to grace any piece of fiction (video games or otherwise), doesn’t question each increasingly silly plot twist or insane mini-game but throws himself into the action with naïve abandon. Sunny Hawaii, a land of blue sea, golden sand, and extreme income inequality, only exaggerates the franchise’s long-held eccentricities, but Ichiban is there, the gamest of guides, marshaling each bonkers moment to move onto the next.
(Nintendo Switch, PC, PlayStation 4, PlayStation 5, Xbox One, Xbox Series S/X)
Photo: Ubisoft
An idea so perfect and obvious that it’s a wonder nobody had thought of it before: Prince of Persia but a Metroidvania. For the genre born in the 1980s, labyrinthine settings have long been Metroidvania’s defining feature, and Prince of Persia: The Lost Crown delivers a doozy: a mountaintop fortress in which time has gone haywire. You must acrobatically navigate your way past false floors, guillotines, spiked pendulums, and secret doors, all while engaging in swordplay that truly earns the adjective swashbuckling. As mechanically engaging as it is, the lifeblood of The Lost Crown is the wonderfully unnerving sense of isolation it imparts through the eerie, temporally blighted location. Getting out doesn’t just require thumb-shredding dexterity, wit, and guile but also — fittingly for its premise — patience.
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();
// ]]