ADVERTISEMENT

Disappearing act: A review of 'Weapons'

Published Aug 8, 2025 12:45 pm
Julia Garner in 'Weapons'
Julia Garner in 'Weapons'

When Zack Cregger released his debut film Barbarian in 2022, his writing and directing were hailed as masterful, mixing suspense with horror in a manner that felt natural and organic. It was Airbnb from Hell, with a monster lurking underneath the floorboards. The premise of the overbooked Airbnb kicked off with the tension of ‘Is the guy who he says he is?’, then we had the rug pulled out from under us, as there was infinitely more to the story, and it was the secrets harbored by the house itself. 

So expectations ran high when Cregger announced his next project, Weapons. With a bigger budget, a bunch of stars in the cast, and more time to mold the screenplay, we were all hoping that Barbarian would not turn out to be a fluke or a case of first-time luck. In Weapons, we’re dealing with a classroom of children, and how 17 of them mysteriously disappear one night. This leaves the suburban community of Maybrook shocked and perplexed as to how and why. 

It’s the basic fear of the unknown and the uncanny driving this film. It’s trying to make sense of the disappearance through rational means, without resorting to the unnatural, spiritual, or magical. In terms of fairy tale references, one can throw in The Pied Piper, and Hansel & Gretel - but modernized, and placed in a contemporary setting. And to give credit to Cregger, the film scored 100 percent on Rotten Tomatoes, with critics saying it’s even better than Barbarian. 

Fresh from her stint as The Silver Surfer in Fantastic Four, Julia Garner is more recognizable as Justine Gandy, the teacher of the disappearing classmates. As a teacher, it falls on her to explain, and while we know that’s unfair, we also understand the parents grasping at straws. Justine, in turn, has something of a complicated relationship with the married police officer Paul Morgan (Alden Ehrenreich, a recent visitor to our country!). As the father of one of the disappeared kids, we have Josh Brolin, giving his usual solid portrayals. Austin Ames is James, a petty burglar and addict. And there’s Benedict Wong, as school principal, Andrew Marcus. 

Vying for screen time becomes something of an issue given this strong ensemble cast. You’ll have your favorites, and wish they had more scenes. But Cregger knows how to push the narrative along, and it’s done in anthology fashion, led by individual characters. If the first half is more seeking an explanation, the latter part is wishing we had not gone seeking. The horror and gore quotients go through the roof at that latter point, and do not back down. 

The requisite jump scares occur, and when the reveal is made, some may feel it comes out of nowhere. But that would be a minor complaint, given how effective the film has been in ratcheting up the tension. 

This is essentially a suburbia-themed film, and two of my sons, Quintin and Matteo, the family ‘experts’ on the horror genre, had this to comment - that the big bad of the story seems to come out of nowhere, visually creepy and odd, but with no valid reasons given for their actions. The film takes the position that sometimes, bad things happen, and it becomes a question of how we respond to those situations and obstacles. 

Weapons opened in cinemas Aug. 6, and it’s best watched on an SM IMAX screen - if you want to intensify the horror experience. 

Related Tags

Weapons
ADVERTISEMENT
.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1561_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1562_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1563_widget.title }}

{{ articles_filter_1564_widget.title }}

.mb-article-details { position: relative; } .mb-article-details .article-body-preview, .mb-article-details .article-body-summary{ font-size: 17px; line-height: 30px; font-family: "Libre Caslon Text", serif; color: #000; } .mb-article-details .article-body-preview iframe , .mb-article-details .article-body-summary iframe{ width: 100%; margin: auto; } .read-more-background { background: linear-gradient(180deg, color(display-p3 1.000 1.000 1.000 / 0) 13.75%, color(display-p3 1.000 1.000 1.000 / 0.8) 30.79%, color(display-p3 1.000 1.000 1.000) 72.5%); position: absolute; height: 200px; width: 100%; bottom: 0; display: flex; justify-content: center; align-items: center; padding: 0; } .read-more-background a{ color: #000; } .read-more-btn { padding: 17px 45px; font-family: Inter; font-weight: 700; font-size: 18px; line-height: 16px; text-align: center; vertical-align: middle; border: 1px solid black; background-color: white; } .hidden { display: none; }
function initializeAllSwipers() { // Get all hidden inputs with cms_article_id document.querySelectorAll('[id^="cms_article_id_"]').forEach(function (input) { const cmsArticleId = input.value; const articleSelector = '#article-' + cmsArticleId + ' .body_images'; const swiperElement = document.querySelector(articleSelector); if (swiperElement && !swiperElement.classList.contains('swiper-initialized')) { new Swiper(articleSelector, { loop: true, pagination: false, navigation: { nextEl: '#article-' + cmsArticleId + ' .swiper-button-next', prevEl: '#article-' + cmsArticleId + ' .swiper-button-prev', }, }); } }); } setTimeout(initializeAllSwipers, 3000); const intersectionObserver = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { const newUrl = entry.target.getAttribute("data-url"); if (newUrl) { history.pushState(null, null, newUrl); let article = entry.target; // Extract metadata const author = article.querySelector('.author-section').textContent.replace('By', '').trim(); const section = article.querySelector('.section-info ').textContent.replace(' ', ' '); const title = article.querySelector('.article-title h1').textContent; // Parse URL for Chartbeat path format const parsedUrl = new URL(newUrl, window.location.origin); const cleanUrl = parsedUrl.host + parsedUrl.pathname; // Update Chartbeat configuration if (typeof window._sf_async_config !== 'undefined') { window._sf_async_config.path = cleanUrl; window._sf_async_config.sections = section; window._sf_async_config.authors = author; } // Track virtual page view with Chartbeat if (typeof pSUPERFLY !== 'undefined' && typeof pSUPERFLY.virtualPage === 'function') { try { pSUPERFLY.virtualPage({ path: cleanUrl, title: title, sections: section, authors: author }); } catch (error) { console.error('ping error', error); } } // Optional: Update document title if (title && title !== document.title) { document.title = title; } } } }); }, { threshold: 0.1 } ); function showArticleBody(button) { const article = button.closest("article"); const summary = article.querySelector(".article-body-summary"); const body = article.querySelector(".article-body-preview"); const readMoreSection = article.querySelector(".read-more-background"); // Hide summary and read-more section summary.style.display = "none"; readMoreSection.style.display = "none"; // Show the full article body body.classList.remove("hidden"); } document.addEventListener("DOMContentLoaded", () => { let loadCount = 0; // Track how many times articles are loaded const offset = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // Offset values const currentUrl = window.location.pathname.substring(1); let isLoading = false; // Prevent multiple calls if (!currentUrl) { console.log("Current URL is invalid."); return; } const sentinel = document.getElementById("load-more-sentinel"); if (!sentinel) { console.log("Sentinel element not found."); return; } function isSentinelVisible() { const rect = sentinel.getBoundingClientRect(); return ( rect.top < window.innerHeight && rect.bottom >= 0 ); } function onScroll() { if (isLoading) return; if (isSentinelVisible()) { if (loadCount >= offset.length) { console.log("Maximum load attempts reached."); window.removeEventListener("scroll", onScroll); return; } isLoading = true; const currentOffset = offset[loadCount]; window.loadMoreItems().then(() => { let article = document.querySelector('#widget_1690 > div:nth-last-of-type(2) article'); intersectionObserver.observe(article) loadCount++; }).catch(error => { console.error("Error loading more items:", error); }).finally(() => { isLoading = false; }); } } window.addEventListener("scroll", onScroll); });

Sign up by email to receive news.