'Copshop' ending explained: The screw-it-all action climax

Publish date: 2024-06-06

After Boss Level, Copshop is Joe Carnahan and Frank Grillo's second movie to come out this year. Starring Gerard Butler, Alexis Louder, and Toby Huss, Copshop is an action-packed thriller that was released in theaters in September. While the movie did not have much to offer in terms of story, it did manage to get decent reviews.

Being a low-budget film, Copshop may not appear very attractive at the outset, but it does not lack entertainment. The adrenaline rush and bullets flying around make up for the lack of a plot.

'Copshop' plot summary

Set somewhere on the dry outskirts of Nevada, most of the plot of Copshop takes place inside the Gun Creek police station. Officer Valerie Young (Alexis Louder) arrests Teddy Muretto (Frank Grillo) outside a casino when he sucker punches her. Muretto assumed he would be safe inside the prison until the man after his life, Bob Viddick (Gerard Butler), also gets himself arrested.

The first 50 minutes of Copshop might seem slow and low-key, but the movie really picks up when the psychopath, Anthony Lamb (Toby Huss), arrives. He unleashes total anarchy within the police station and brutally murders all but two police officers. Lamb came in to finish the job Viddick had been unable to do so far.

Amidst all the blood-splattering action and complete lawlessness, Anthony and Teddy wound up dead, and Bob managed to kill two contracts in one police station. The movie ends with Valerie chasing after Viddick in an ambulance.

'Copshop' ending explained

For the most part, Alexis Louder is the only woman in Copshop until Tracie Bonner shows up as Detective Deena Schier. As Muretto mentions in the movie that the mob after his life had their hooks everywhere, Deena too turned out to be with them. After a phone call with Valerie, she informed the mob boss that a rookie officer was sniffing around too much.

Enter Anthony Lamb, the psychopathic hitman who turned the police station into a battlefront. To save Teddy, Valerie locked herself inside the holding area and accidentally shot herself while keeping Lamb outside. She didn't have much time to live with the bullet inside her and had to make a choice between trusting a conman or a hitman.

Enraged by the news of his dead ex-wife and child, Teddy is set out to kill their killer – Anthony, and betrays Valerie. Viddick convinces Valerie that he can save her life and follows after Teddy. He finds Anthony before Teddy and slits his throat, offering Teddy the chance to end him and seek revenge. Teddy, however, shoots at Viddick before killing Anthony.

Before making a run for his freedom, Teddy lit the place on fire and decided to grab a sandwich from the kitchen. That's where he met Valerie, now in a bulletproof jacket. In the cross-fire that ensued, Valerie shoots at Teddy multiple times only to be shot at by Deena right before she takes one final shot at Teddy. Fortunately, Viddick had managed to survive the open fire by Teddy and came to Valerie's rescue by killing Deena.

In the end, Viddick walked out of the police station, having fulfilled two contracts and carrying a bag with Anthony's head. In the stolen police vehicle he used to get away, he informed his boss of the two kills. Meanwhile, Valerie is stitched up inside an ambulance which she then hijacks to chase after Viddick.

The 2021 action thriller Copshop is available to stream on various platforms including Amazon Video, YouTube, Google Play Movies, etc.

More from Sportskeeda

" modalPopup.closeOnEsc = false; modalPopup.setHeader("Why did you not like this content?"); modalPopup.setContentText(modalText); modalPopup.addCancelOkButton("Submit", resetRatingAndFeedbackForm, sendRating); modalPopup.removeCloseModalIcon(); modalPopup.disableDismissPopup(); modalPopup.open(); } else { sendRating(index); } } function sendRating() { var requestPayload = { "post_id": 947944, "rating_value": ratingValue } if (ratingValue > 3) { requestPayload.rating_feedback_type = null; requestPayload.rating_feedback = null; } else { if (!$('input[name="drone"]:checked') || !$('input[name="drone"]:checked').value) { showErrorMessage('option'); return; } if (!$(".post-rating-feedback-note textarea") || !$(".post-rating-feedback-note textarea").value) { showErrorMessage('note'); return; } var selectedOption = $('input[name="drone"]:checked').value; var feedbackNote = $(".post-rating-feedback-note textarea").value; requestPayload.rating_feedback_type = selectedOption; requestPayload.rating_feedback = feedbackNote; } pureJSAjaxPost(addratingAPI, requestPayload, onsaveRatingSuccess, onsaveRatingFail, function() {}, true); } function resetRatingAndFeedbackForm() { var activeStars = Array.from($all('.rating span.rating-star.active')); for (var i=0; i < activeStars.length; i++) { activeStars[i].classList.remove("active"); } if ($('input[name="drone"]:checked')) { $('input[name="drone"]:checked').checked = false; } var userNote = document.querySelector(".post-rating-feedback-note textarea"); userNote.value = ''; modalPopup.close(); } function onsaveRatingSuccess() { modalPopup.close(); savePostIdInUserRatedPostsCookie(); $("#post-rating-layout").classList.add("hidden"); $("#post-rating-message").classList.remove("hidden"); window.setInterval(function showMessage() { $("#post-rating-widget").classList.add("hidden"); }, 3000); } function onsaveRatingFail() { console.error('Saving post rating failed!'); modalPopup.close(); } function savePostIdInUserRatedPostsCookie() { userRatedPostIds.push(947944); var expiryTime = new Date(); expiryTime.setMonth(expiryTime.getMonth() + 12); // Expiry after 1 year setCookie("user_rated_post_ids", JSON.stringify(userRatedPostIds), expiryTime); } function isPostRatedByUser() { var userRatedPostIds = getCookie('user_rated_post_ids'); if (userRatedPostIds) { try { userRatedPostIds = JSON.parse(userRatedPostIds); } catch (err) { console.error(err); return false; } } else { return false; } if(userRatedPostIds.indexOf(947944) >= 0) { return true; } else { return false; } } function getRatingCountByPostId(postId) { return new Promise(function(resolve, reject) { pureJSAjaxGet( getRatingCountBaseURL + postId + '/rating/count', function(data) { try { data = JSON.parse(data); if (data.meta_value) { resolve(data.meta_value); } reject("Failed to fetch rating count for the post:" + postId); } catch (err) { reject("Failed to fetch rating count for the post:" + postId); } }, function(err) { reject("Failed to fetch rating count for the post:" + postId); }, true); }); } function showErrorMessage(messageType) { var messageContainerId = '#' + messageType + '-error'; $(messageContainerId).classList.remove('hidden'); window.setInterval(function () { $(messageContainerId).classList.add("hidden"); }, 5000); } (function() { var callFired = false; function lazyLoadPostRating() { if (callFired) return; callFired = true; if (!isPostRatedByUser()) { getRatingCountByPostId(947944) .then(function(ratingCount) { if (ratingCount < 10) { $("#post-rating-widget").classList.remove("hidden"); } }) .catch(function(err){ console.error(err); }); } } document.addEventListener("scroll", lazyLoadPostRating, { passive: true, once: true }); document.addEventListener("mousemove", lazyLoadPostRating, { passive: true, once: true }); document.addEventListener("touchmove", lazyLoadPostRating, { passive: true, once: true }); })();

ncG1vNJzZmivp6x7tLzOq6uso5WasaJ6wqikaKifpXqkwcutrKudX5i8sb%2FHqKdmnZ6Ztq%2BzjJ6vqaSRnrumsIytn55lo5i%2FpsOMoqtmmZyheqKv06Kmp2WTobaurdc%3D