ADVERTISEMENT

STREAMING REVIEWS: Love kills

Published Nov 8, 2021 09:34 pm

The two films today are a strange pair; one purposely doesn’t set the bar high, and so succeeds. The second carries a lot of expectations, and dismally flops on that specific count. One is a RomCom, while the second is a horrible horror flick.

'lovehard'

Love Hard (Netflix USA) - It might not even be Thanksgiving yet, but never let it be said that Netflix doesn’t know how to jump the gun and offer us Christmas-themed content way before the season truly gets into full swing. Love Hard is a rom-com that takes on online dating and social media, contextualizing it within the premise of an online writer from LA who writes about the disasters and pitfalls of online dating, thinking she’s found her true match when she starts an online relationship with this outdoorsy kind of guy who lives across the country, in Lake Placid, New York. For Christmas, and without warning, she decides to surprise the guy, when the real surprise is she’s been catfished - and the guy isn’t the one who’s in the photos of his online profile.

From there, it’s a hop skip and jump to a Cyrano-type plot device as the wrong guy tries to help our heroine meet the one whose photo was used. There’s a diversity undertone, as the one who faked his profile is a nerd of Chinese-American descent. By not overtrying, this RomCom actually works in a ‘Don’t expect too much’ manner. The comedy stays crisp and topical, and the cast are enthusiastic and earnest in portraying their roles. Nina Dobrev plays low-key charming throughout, while stand-up comedian Jimmy O. Yang takes a straight man approach to his nerd role. Darren Barnet has his lumbering poster boy persona down pat - and so it’s just a matter of you deciding on the plausibility of the requisite RomCom ending that punctuates the film.

'Halloween Kills'

Halloween Kills (Video On Demand) - When David Gordon Green gave us his 2018 reboot of the Halloween film franchise, there was something refreshed, actually interesting and worth watching with the exercise. And we were thankful, as this John Carpenter original film had finally seen an extension worthy of its name. Too many sequels and prequels over the years had seen poor executions marring the name of the franchise and masked villain Michael Myers. So noting that both David Gordon Green and Jamie Lee Curtis were back for this reboot sequel, expectations were high that this would be a seasonal film that would follow in the luminous footsteps of the 2018 film. This early, I’m sorry to have to report that lightning does not strike twice in this case, and this is one dismal failure.

It commits the cardinal sin of not even bring scary. And what is that? You name your film Halloween Kills, and you can’t even provide genuine chilling moments and set-ups? Sure, there are jump scares, but more often than not, they’re triggered by artificial or trite premises, plus they come independently of the tired storyline. It’s like it some distant cousin of The Purge, mixed with the classic serial killer/slasher film. You have Jamie Lee Curtis, and it’s not like she’s in a coma, but you keep her bedridden in the hospital until the very end. I know you’re establishing the Part 3 in terms of heroine, but you still shouldn’t put Jamie’s character on a shelf while all this action swirls around her. Green falls into the same trap of previous Halloween sequels, and this one is all-Hollow.

Related Tags

lovehard halloweenkills
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.