Murphy didn’t talk to Spade for the better part of two decades. But if I didn’t subtract a star from my review of “Black Butterfly” due to a very, VERY late development, I wouldn’t blame you if you didn’t talk to ME for the next 20 years.

Ninety-nine percent of the way through “Black Butterfly” (and that’s no exaggeration), I was committed to giving the film a solid three-star recommendation.

All they had to do was fade to black and roll credits, and I was all set to tell you about this nifty little chiller with a “Misery” vibe and a delicious twist I didn’t see coming.

Alas, “Black Butterfly” didn’t have the good grace to exit on the right note. The twist on top of the twist was so amateurish, so hacky, so insulting to the viewer, I’m already thinking about apologizing to you guys for just the one-star demerit. The only reason I’m giving this film even two stars is to pay tribute to the performances and to a screenplay that was pretty dang great but ran about a page and a half too long.

Here’s the deal. Antonio Banderas plays Paul, a reclusive, downtrodden and alcoholic writer who has been living in near-squalor in his mountain retreat home ever since the mysterious disappearance (and apparent murder) of his wife — the first of a series of unsolved killings in the community.

Paul was once considered a hot property in literary circles and in Hollywood, but he hasn’t produced anything of value in years. The page on his old-fashioned typewriter contains a single phrase repeated again and again, “Shining” style. It reads: “I am stuck, I am stuck, I am stuck …”

On one of Paul’s rare forays into town, he’s nearly run off the road by an aggressive truck driver. The truck driver then confronts Paul at the local diner — but a drifter (Jonathan Rhys Meyers) who happens to be at the diner intervenes, dragging the truck driver out of the diner and sending him on his way.

Moments later, a grateful Paul picks up the hitchhiking drifter, and offers him a roof and a meal for the night.

The drifter introduces himself as Jack and tells Paul he’s an ex-con, recently released from prison. Paul doesn’t have a problem with that, which is our first indication something isn’t quite right here. Somebody’s playing somebody.

Jack inserts himself into Paul’s life and initiates a tough-love program designed to demolish Paul’s writer’s block and wean Paul from the booze. At first it seems as if Jack has Paul’s best interests at heart — but guns surface and doors are locked and threats are made, and we have a hostage situation.

A friendly real estate agent (Piper Perabo) trying to sell Paul’s house shows up at his doorstep at the wrong moment and is dragged into the drama. When a cop knocks on the door to ask if Paul has seen a woman who has just gone missing, things go from bad to worse.

Then comes the aforementioned twist, which is outlandish but holds up fairly well under flashback scrutiny.

Three stars! Well played!

But wait, there’s one more scene.

Look children — it’s a falling star.

★★

Lionsgate Premiere presents a film directed by Brian Goodman and written by Justin Stanley and Marc Frydman. Rated R (for language). Running time: 93 minutes. Opens Friday at AMC River East and on demand.