James McAvoy in Filth.

James McAvoy delivers his best performance yet in this morally vacant take on the sick novel by Irvine Welsh (Trainspotting).

McAvoy stars as Bruce Robertson, a Scottish cop strung out on drugs who is hearing voices in his head, hallucinating and behaving very badly. At the center of the film is a murder mystery that provides a final twist which cements the movie’s nutball pedigree.

McAvoy essentially gets to do his own riff on the Bad Lieutenant (a role that served both Nicolas Cage and Harvey Keitel well); he is able to go completely gonzo. What makes his turn different is that the movie allows him to have some truly genuine, emotional moments mixed in with the mayhem. This results in a surprisingly balanced, well-modulated performance despite the subject matter.

The supporting cast includes Jamie Bell as a fellow cop with a small member, and Eddie Marsan as Bladesey, a tightly wound member of the force who is Robertson’s best friend while also being one of his saddest victims. Robertson’s prank phone calls to Bladesey’s wife, Bunty (Shirley Henderson), are hilariously vile, and clearly indicate that Robertson doesn’t value Bladesey’s friendship all that much.

Bruce Robertson is one of those unreliable narrators, like Ed Norton’s narrator in Fight Club, who make viewing a movie like this a blessed adventure. You’ll never really know what’s truly going on until those final credits roll.

Filth is available via online sources including iTunes and Amazon.com.