Jeremiah Dollins’s review published on Letterboxd:
David Gordon Green’s Halloween trilogy is a lot of things. It’s thrilling. It’s audacious. It’s polarizing. It’s devoted to its source material, yet is not compelled to be bound to it. It is also messy, at times dull, and sometimes brilliant.
With this in mind, Halloween Ends does not disappoint.
Picking up a few years after the shocking conclusion of Kills, Ends reunites us with Laurie (Jamie Lee Curtis) and her granddaughter Allyson (Andi Matichak) as they have established a new normal in Haddonfield in which they choose to live on despite their fear and trauma. It’s a sweet opening montage, one these two characters have earned, and it goes a long way towards planting the seeds of the tragedy to come.
Enter Corey Cunningham (Rohan Campbell). During that fateful night of Kills, he “accidentally” kills a child* he is babysitting. The ambiguity of the moment follows him as now he’s a pariah, hated as the local child murderer. A gang of band geeks—for reals, actual band geeks—bully him, which draws the protective eye of Laurie. She sees a kid in need of a friend, and introduces Corey to Allyson.
* We all agree this kid deserved to die, right? What a little shit!
Trauma unites these two crazy kids and they find themselves smitten. It would a cute story of romantic redemption if Michael Myers wasn’t still lingering around like a subterranean Dracula awaiting a Renfield to procure some fresh blood to restore him.
This is where Ends will go off the rails* for most. And while the performance of Campbell sold his inevitable descent into darkness, that won’t work for a lot of people who simply want Michael stabbing teenagers and eccentric bystanders as he continues his pursuit of Laurie Strode. Me? I love going on an adventure.
* For old school fans of the franchise, this twist is a new take on Halloweens 4-6, which I found endearing. Somewhere Danielle Harris is smiling as she thinks about that scarecrow mask.
I just wish the movie wasn’t so repetitive. It has a swift runtime of 110 minutes, yet feels 30 minutes longer because of the decision to leave in multiple scenes sharing the same ominous information about “evil” and the change in Corey’s eyes. By the time we get to the climatic showdown, it doesn’t feel like a moment that’s so much amped up, but instead feels like an exhausted sigh.
All this to say that Ends is ambitious, sometimes brilliant, and often messy. It is hard to be disappointed in a movie that takes such big swings, especially in a franchise as long in the tooth as Halloween.
Note: I loved seeing Diana Prince as the receptionist at the local Haddonfield radio station. She deserved more screen time and a more visceral kill.
Another note: A few months back, my cousin reached out to tell me he was an extra on this movie. He’s a cop in the finale. He got cast because of his awesome mustache. I looked for him, but could not spot him, I hope a future viewing will not result in the realization he was left on the cutting room floor, yet another victim of Michael Myers.
' ].join(''); if ( adsScript && adsScript === 'bandsintown' && adsPlatforms && ((window.isIOS && adsPlatforms.indexOf("iOS") >= 0) || (window.isAndroid && adsPlatforms.indexOf("Android") >= 0)) && adsLocations && adsMode && ( (adsMode === 'include' && adsLocations.indexOf(window.adsLocation) >= 0) || (adsMode === 'exclude' && adsLocations.indexOf(window.adsLocation) == -1) ) ) { var opts = { artist: "", song: "", adunit_id: 100005950, div_id: "cf_async_18c6d3b6-038c-4d3a-a0ad-d4dc3765fcb7" }; adUnit.id = opts.div_id; if (target) { target.insertAdjacentElement('beforeend', adUnit); } else { tag.insertAdjacentElement('afterend', adUnit); } var c=function(){cf.showAsyncAd(opts)};if(typeof window.cf !== 'undefined')c();else{cf_async=!0;var r=document.createElement("script"),s=document.getElementsByTagName("script")[0];r.async=!0;r.src="//srv.tunefindforfans.com/fruits/apricots.js";r.readyState?r.onreadystatechange=function(){if("loaded"==r.readyState||"complete"==r.readyState)r.onreadystatechange=null,c()}:r.onload=c;s.parentNode.insertBefore(r,s)}; } else { adUnit.id = 'pw-18c6d3b6-038c-4d3a-a0ad-d4dc3765fcb7'; adUnit.className = 'pw-div -tile300x250 -alignleft -bottommargin'; adUnit.setAttribute('data-pw-' + (renderMobile ? 'mobi' : 'desk'), 'med_rect_btf'); if (target) { target.insertAdjacentElement('beforeend', adUnit); } else { tag.insertAdjacentElement('afterend', adUnit); } window.addEventListener('DOMContentLoaded', (event) => { adUnit.insertAdjacentHTML('afterend', kicker); window.ramp.que.push(function () { window.ramp.addTag('pw-18c6d3b6-038c-4d3a-a0ad-d4dc3765fcb7'); }); }, { once: true }); } } tag.remove(); })(document.getElementById('script-18c6d3b6-038c-4d3a-a0ad-d4dc3765fcb7'));
' ].join(''); if ( adsScript && adsScript === 'bandsintown' && adsPlatforms && ((window.isIOS && adsPlatforms.indexOf("iOS") >= 0) || (window.isAndroid && adsPlatforms.indexOf("Android") >= 0)) && adsLocations && adsMode && ( (adsMode === 'include' && adsLocations.indexOf(window.adsLocation) >= 0) || (adsMode === 'exclude' && adsLocations.indexOf(window.adsLocation) == -1) ) ) { var opts = { artist: "", song: "", adunit_id: 100005950, div_id: "cf_async_476ff1e4-8353-4da0-97c2-f5ebea85d18d" }; adUnit.id = opts.div_id; if (target) { target.insertAdjacentElement('beforeend', adUnit); } else { tag.insertAdjacentElement('afterend', adUnit); } var c=function(){cf.showAsyncAd(opts)};if(typeof window.cf !== 'undefined')c();else{cf_async=!0;var r=document.createElement("script"),s=document.getElementsByTagName("script")[0];r.async=!0;r.src="//srv.tunefindforfans.com/fruits/apricots.js";r.readyState?r.onreadystatechange=function(){if("loaded"==r.readyState||"complete"==r.readyState)r.onreadystatechange=null,c()}:r.onload=c;s.parentNode.insertBefore(r,s)}; } else { adUnit.id = 'pw-476ff1e4-8353-4da0-97c2-f5ebea85d18d'; adUnit.className = 'pw-div'; adUnit.setAttribute('data-pw-' + (renderMobile ? 'mobi' : 'desk'), 'sky_btf'); if (target) { target.insertAdjacentElement('beforeend', adUnit); } else { tag.insertAdjacentElement('afterend', adUnit); } window.addEventListener('DOMContentLoaded', (event) => { adUnit.insertAdjacentHTML('afterend', kicker); window.ramp.que.push(function () { window.ramp.addTag('pw-476ff1e4-8353-4da0-97c2-f5ebea85d18d'); }); }, { once: true }); } } tag.remove(); })(document.getElementById('script-476ff1e4-8353-4da0-97c2-f5ebea85d18d'));