ADVERTISEMENT

Savior and spice, and other-worldly vice: A review of 'Dune: Part Two'

Published Feb 27, 2024 12:54 am

At A Glance

  • If you believe it, Part Two works as a bigger, brighter version of Part One.
Screenshot 2024-02-27 at 8.52.02 AM.png
A scene from 'Dune: Part Two'

Director Denis Villeneuve hits it out of the ballpark with his Dune: Part Two. No longer saddled with establishing characters, storylines, and providing exposition, Part Two can throw us right into the action and be a stronger plot-driven narrative. Sure, it lasts for some two hours and 46 minutes - and there is a middle portion that could have been brisker; but all in all, there is terrific world-building, and Villeneuve knows how to end the film on a strong visual and narrative note (teasing us with the prospect of Part Three).

Imperialism, fascist rule, resistance, and romance are just some of the themes taken up in earnest here in Part Two, and it allows the film to ‘breathe’ - no longer straitjacketed by the need to ‘explain, explain’. If there was a shortcoming for me with the first Villeneuve Dune, it was the painstaking attention to exposition and detail. Yes, it was for us, the audience, to board the Dune ‘train’. But for those who had read the novel, this was too much wasted time, while for those who hadn’t, they may have been thankful but would, at times, be getting impatient.

image1.jpeg
 

Dune Two immediately brings us into the Arakkis desert, and there’s no confusion as to who is driving this story. As Paul Atreides (Timothee Chalamet) is the center of what will unfold. From budding lover and romantic lead to reluctant savior and executioner, an impressive arc must be fulfilled as prophecy is brought to life. That this may even involve killing his blood and kin are just some of the challenges brought upon this would-be Fremen leader who can see the future and, at one point, is running away from the said reckoning. He knows the price that will be paid if he follows this destined path. 

Chani (Zendaya) will be prominent in the desert, but we note how she holds herself back, aware that as a foot soldier, her relationship with Paul will always be complicated. Stilgar (Javier Bardem) is similarly omnipresent in these scenes, his male bonding with Paul sometimes overshadowing those stolen moments between Chani and Paul. And then there’s Lady Jessica (Rebecca Ferguson), who embarks on her narrative strand. The reappearance of Gurney (Josh Brolin) is welcome when it does happen.

image2.jpeg

Arrayed on the opposite side are Baron (Stellan Skarsgard) and his nephews Feyd-Rautha (Austin Butler) and Beast Rabban (Dave Bautista). Butler makes a truly impressive and memorable appearance as the psychotic Feyd-Rautha. The Emperor (Christopher Walken) and his daughter, Princess Irulan (Florence Pugh), play crucial roles as the narrative develops. 

If you believe it, Part Two works as a bigger, brighter version of Part One. I felt that brisker editing and cutting some scenes would have helped better sustain the tension within the narrative, but that’s me, as I know others loved the minute world-building and attention to detail. If this is as successful as I predict, there’ll certainly be a Part Three (based on Dune Messiah?) to look forward to. 

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.