Note: contains some mild spoilers.

It’s been roughly two years of heavy anticipation. Batman and Superman in one movie. That alone was going to be historic. Then Wonder Woman wound up in the mix and it was announced that BvS would be the precursor to a full-fledged live-action Justice League. The internet began chattering. Affleck would be Batman. Twitter exploded. Gal Gadot was cast as Wonder Woman and, in related news, Jason Momoa would lead an Aquaman flick! At some point, an exclusive Comic-Con teaser featuring a floating, red-eyed Superman staring down a white-eyed Batman in heavy armor was leaked onto the internet. Comic geeks burst with sheer delight. DC was finally, FINALLY bringing the Justice League universe to life. And BvS would be the epic trigger of it all.

Expectations weren’t just through the roof. They broke the stratosphere.

And here we are. The movie is out and the consensus is in. BvS has been declared a disaster and the critical shredding has been relentless. It’s been called “laughable”, “thunderingly dull”, and “a stink bucket of disappointment”. The movie currently holds a 29% rating on Rotten Tomatoes. There’s not a movie buff in the world, it seems, that hasn’t expressed an intense dislike for this film. One meme suggests this has all stunned Ben Affleck into silence.

But here’s the thing: BvS is a pretty good movie. It’s not perfect. It has problems. But it’s not an abysmal mess either. It’s a gorgeous love-letter to comic book fans that’s saddled with big ideas, impossible expectations, and a story that heaves along beneath herculean pressures.

What’s to like?

First off, Ben Affleck. What a courageous and excellent piece of casting. He makes a terrific Bruce Wayne/Batman. By day he’s a charismatic CEO with limitless money and a dangerous edge. By night he’s a hulking warrior who hunts his prey in the shadows. This is textbook Batman. And yet he’s also not your typical big screen Dark Knight.

He’s violent. He mows bad guys down with heavy artillery. He’s a badass brawler that can subdue a legion of heavies without breaking a sweat. He prowls, growls, and scowls –yet beneath the cowl, we have a Caped Crusader with heart. Affleck is spot on as Batman. He makes this film worth watching all on his own.

By the way, Alfred’s come a long way from being just Master Wayne’s butler. Jeremy Irons plays him like a grizzled detective/cranky hi-tech guru, more comfortable fixing engines and dishing out sly barbs than serving breakfast. Irons comfortably assumes this character. If Wayne has nightmares, I imagine he doesn’t wake up to a steaming cup of chamomile tea but to a locked and loaded Batmobile, courtesy of his worldly-wise manservant.

Wonder Woman is also wonderfully cast. When Gal Gadot’s name surfaced in the film’s early stages, few people had heard of her. But what a choice. She’s smart, beautiful, and holds her own against her two super allies. Being Israeli in real life, Gadot did two years in the Israel Defense Forces as a combat instructor, which means she probably has done more military service than the entire cast of BvS put together. Did this translate onscreen? Let’s just say that she kinda steals the show – sword, shield, lasso, and all. And when the Wonder Woman theme kicked in – it was a moment.

What’s not to like?

Henry Cavill is back as Superman and we all know he’s a worthy Man of Steel. He’s just saddled with a bland alter ego. Clark Kent is a reporter, nothing more, nothing less. Couldn’t they have done more to differentiate him from his true alien self?

I’m not saying he had to mimic Christopher Reeves’ ham-fisted, bumbling Clark Kent but there’s a reason we all cheered when that version of Clark ditched his clumsy self and changed into the bright and powerful Superman. By contrast, Cavill’s Kent has issues. He’s all mopey and discouraged with the world. It’s not exactly depressing but it’s not uplifting either. And Superman is meant to be uplifting. At least give him a sense of humor.

Amy Adams has even less to chew on as Lois Lane. Her character seems to exist just so Superman can save her from mortal danger, which happens on at least three separate occasions. Maybe, through these rescues, we’re supposed to feel the intense love Superman has for his girl? If only they had a modicum of chemistry.

This isn’t Adam’s fault. She’s an incredible actor who does her best with the material. There’s a moment when Superman arrives to save Lois Lane from the clutches of an African terrorist. When he lands in a puff of sand, Lane locks his gaze, her eyes full of joy, relief, hope, trust, and defiance all at the same time. It’s an amazing moment and Adams really elevates it.

And the bad guys?

Jesse Eisenberg is a different Lex Luthor. A lot of fans have taken umbrage at his crazy, jittery take and they would be rightly upset; the comics Luthor is a scientific genius on par with Bruce Wayne in terms of intelligence and resources. In BvS he’s a nefarious young geek who likes to spaz out while waxing light about art and theology.

That’s not entirely bad; it’s certainly not the worst thing about him. Luthor’s biggest sin is that he’s one vague criminal mastermind. What’s his devious scheme? To kill Superman? Or Batman? Or both? Why the elaborate set up? What’s the deal with all his encrypted research? His semi-coherent babbling about something greater that has awakened in the universe?

Also, if Doomsday were to successfully triumph over the Super Friends, what then? How was Luthor going to contain this unearthly creature? Surely a beast that only gets stronger with each successive attack would have obliterated the earth in no time.

When Luthor advances his machinations, the plot thickens like unsweetened porridge. And this is where BvS derails itself. Once you get mired down trying to figure out the bad guy’s motives, everything else becomes slightly unhinged.

It doesn’t help that the grand finale is one giant CGI spectacle – Doomsday, looking like he was cooked up in a special effects lab rather than the Kryptonian Genesis Chamber, is mighty and formidable but brings no real tension to the proceedings. The all-out battle (on an abandoned island this time; the Red Cross must have felt so relieved) was a neat way to showcase the Super Friends in action but ultimately, it felt a little “meh”.

Batman V Superman

The brawl we really lined up to see was Superman v Batman. Most people unfamiliar with the comics have been scratching their heads the past two years, wondering how on earth is Batman supposed to put up a fight against an indestructible godlike being? Well, Bruce Wayne isn’t one of the most intelligent and well-funded men on the planet for nothing. And the way he deals with Superman makes perfect sense. That he survives being hurled around by the Man of Steel still requires a major suspension of disbelief, but then again, one can argue that Superman was just being merciful.

Anyway, this is where director Zack Snyder really shines. The man was born to direct action, that is indisputable. Every thump, every wallop, every crashing piece of glass and exploding wall of concrete is a sonic and visual delight. Batman wants to make Superman bleed. And he goes balls out against him, pulling together all his human wit and physical reserves to show the last Kryptonian just who is boss.

It’s a worthy fight. Sadly, it lacked an emotional core. Batman and Superman are trying to neutralize each other, but do we really care why?

Bruce Wayne thinks Superman is likely a threat to mankind. He mocks him as a freak who dresses like a clown. Most of his time in the film is spent looking for a way to take down the Man of Steel. When they meet for the final showdown, he pulls out all the stops and is practically bent on murder.

Superman on the other hand doesn’t want to fight Batman. But (mild spoiler alert) Lex Luthor has compelled him to fight, or else his mother gets it. That’s a good enough reason for him to confront Batman; unfortunately, we’re not sufficiently invested in the relationship between Martha and Clark Kent to really care. We can sympathize with Superman’s dilemma. But we haven’t been given enough to truly empathize.

So when the mighty smack down eventually happens, there’s no emotional heft to it. Batman wants to protect the human race but all we see is a bloodthirst. Superman has his hands tied and chooses to fight rather than pursue some rational chit chat. These points seriously hamper the moment.

That said, the battle succeeds because the wham-bang theatrics are enough to bury all other peripheral nonsense. Ultimately, that’s what sustains this film – the brutal eye-candy conceived in the mind of a visionary director. When Batman confronts a band of heavily armed hostiles, he doesn’t take them out in a blur of shadows and tight editing. No, Zack Snyder’s Batman is out in the open, a brute force visual poet dispatching bad guys like a pro-wrestler Jackie Chan. It’s a joy to behold.

If only…

…there was as much joy to the rest of the proceedings. BvS too serious for its own good. The film does have a couple of funny moments, but not enough to offset the film’s persistently dark and somber tones.

This, along with its other narrative shortcomings, is what keeps Batman v Superman from being an exceptional superhero movie alongside The Dark Knight, Spiderman 2, and Captain America: The Winter Soldier in all their beatific awesomeness. It’s still great to watch and not the absolute shambles that the critics would have you believe. BvS will dazzle your eyes and play with your head. Whether it wins your heart is a battle only you can decide.