Things are going really well for Niantic Labs and its hit mobile game, Pokémon Go. The game released its first group of legendary Pokémon a couple of weeks ago — Articuno, Zapdos, Moltres and Lugia — and Raid Battles with these legendary birds have pushed the game back to the top of the revenue charts.

While players have been spending a lot of money on passes to the legendary Raids, the community is getting frustrated that bugs and poorly-conceived mechanics are basically stealing their opportunities to catch legendary Pokémon.

When Niantic announced its new “exclusive Raids” to catch Mewtwo on Aug. 14, the community reacted with frustration and disappointment. Players’ lack of faith in Niantic to handle the new mechanics isn’t unfair; they’re just reacting to how “well” things have worked in the past.

Pokémon Go has always been buggy, but you can’t add in complexity or more microtransactions while the systems remain this glitchy. It’s not fair to the players, and we’re getting to the point where the company has to give serious thought to refunds while these issues are being worked out.

Here’s how Raid Battles are supposed to work

Niantic added Raid Battles to the basic gym system back in June. When a Raid spawns on a gym, the Raid boss Pokémon will take over the gym for a while. Players nearby can see the Raid on their map, and they can travel to the gym and team up to battle the boss Pokémon, which has had its stats multiplied so that a large group of players must assemble to defeat it.

While highly coordinated teams of two or three players have been able to beat some legendary bosses with extremely optimized Pokémon lineups, unless you and your friends each have six max-level Tyranitar, it generally takes at least seven higher-level players, and probably 12 or 13 lower-level players, to take down a legendary boss.

If the players win the battle, they get some special items that are only available as raid rewards, and they get a chance to catch the boss Pokémon. Raids are the only way to catch the legendaries, in fact.

Raid boss Pokémon can only be caught with special Premier Balls, which players are assigned at the end of the battle.

You get a base award of five balls for defeating the boss. You can get up to an additional three balls depending on how much damage you dealt in the fight and up to three more balls based on the share of damage members of your team contributed to the battle.

You also get a two-ball bonus if your team controls the gym. That means that if you do a bunch of damage, members of your team do most of the total damage and your team controls the gym, you can get 13 Poké balls. But if you do low damage, your team does low damage and your team doesn’t control the gym? You can get as few as five.

The number of balls you get matters a lot, particularly for legendary Pokémon, because the odds of catching them for each throw is extremely low. The base catch chance is three percent. You can increase that by using a Golden Razz Berry, an item that only drops as a Raid reward, by hitting the Pokémon with a curveball throw and by timing your throw so it hits a shrinking target reticle that appears over the Pokémon when you’re trying to catch it.

There’s also a small bonus for having caught 200 Pokémon of the same type as the legendary you’re trying to catch. Most experienced players will have earned that number, but more casual players may not have caught that many ice- or electric-type Pokémon.

If you’ve got deadeye aim and can hit a great curveball throw after feeding the legendary Pokémon a golden berry, you have about a 19 percent chance to catch it. If you can do that five or six times, you’re more likely to catch it than not. If you can do it eight times, you’ll catch about four out of five Pokémon.

On the other hand, you lose the ball and one of your opportunities to catch the bird if you whiff the throw, if the bird moves or if it performs an attack animation that bats the ball away.

That’s the way it’s supposed to work. Your success rate is based on chance, with a few ways to increase your chances through skillful or at least dogged play.

Unfortunately, nearly every aspect of the system is plagued by serious bugs.

The last ball bug

For some reason, it seems impossible to catch a legendary Raid boss with your last Premier Ball; it always automatically breaks out. That means players effectively get one fewer Premier Ball than they are supposed to.

After extensive Reddit debate about whether this was just an incidence of people reading patterns into random events, the community reached the conclusion that nobody had ever caught a legendary with their last ball. It turns out there’s a bug where the Pokémon always breaks out.

Niantic acknowledged the problem by awarding players a base six balls instead of five, beginning on Aug. 7, but all the raids people did during the prior two weeks were affected.

The curveball bug

There is a catch mechanic in Pokémon Go called the curveball. If you make a spinning motion with your ball before you swipe to throw it, the ball will start spinning and stars will appear around it. It will then fly in a curved arc when thrown.

It is a lot more difficult to hit the circle for a great or excellent throw bonus when throwing curves, but if you can perfect your technique, hitting a Pokémon with a curved throw significantly improves your chance to catch it.

Unfortunately, the game doesn’t always seem to give you credit for your curveball, even when the star animation appears and the ball flies in a curved arc. Redditors have theories about why this happens — maybe the ball flies outside the screen on its curved arc and this causes the game to forget the curveball modifier, or part of the throwing-circle doesn’t register curveballs — but nobody knows for sure.

If the Pokémon breaks out of the ball, you don’t even know whether it was registered as a curve or not, because it only tells you you hit a curveball on the screen where it awards you catch experience.

So players are dealing with significantly lower catch chances than they should be because the game isn’t giving credit for curveballs.

The team control bonus bug

It seems you’re supposed to get two extra balls when your team controls the gym where the raid is occurring. Sometimes you don’t.

Niantic customer service told players who contacted them about this that the bonus is not actually for all players on the team that controls the gym. Rather, it’s only supposed to be awarded to players who have a Pokémon currently defending the gym while the raid is going on. That seems incredible if that’s the case, since only six players can have Pokémon defending a gym, and raids support up to 20 players at a time, with many raids in large cities attracting multiple groups over their two-hour duration.

And sometimes players get the bonus when they don’t have Pokémon in the gym. And sometimes players with Pokémon in the gym don’t get the bonus.

So whatever this is supposed to do, it doesn’t work. The rules are either broken or described inaccurately. Both are hard to forgive in a game where people are paying money to increase their chances of catching specific Pokémon.

The dodge bug

Dodging an incoming attack is supposed to reduce the damage you take from it by 75 percent. This is a big deal when you’re dealing with charge moves like Moltres’ Overheat, which will knock off half a Golem’s health bar, despite rock-types’ resistance to fire.

When you dodge an attack that would deal lethal damage to your Pokémon if it landed, however, you take the full damage, even if you dodge successfully.

A good player dodging powerful charge attacks should be able to keep their best Pokémon alive for a long time in these battles, but right now anything below half-health probably dies to the next charge move.

It’s difficult for players to stay in the fight long enough to earn those bonus balls for damage contribution under these conditions, or contribute to their team damage bonus.

You lose your contribution when your Pokémon faint

If all six of your Pokémon faint in a battle with a Raid boss, you get kicked to a lobby screen where you can either rejoin the battle with different Pokémon or heal your original lineup with items.

If you rejoin the battle, your individual damage contribution and your contribution to team damage get reset. If you’ve ever been in a Raid where the team with the most players didn’t finish with the largest team damage contribution, this is probably why.

However, your contribution isn’t reset when you get kicked to the menu screen; it happens when you rejoin. That means that if your last Pokémon faints when the boss has 20 percent of his health left, you get credit for your contribution during that first 80 percent of the fight, even if you just wait out the battle in the lobby. You only get credit for your contribution during the last 20 percent if you rejoin, however. And thanks to the dodge bug, only advanced players with high-level, optimized lineups can survive the duration of a battle with a boss like Lugia.

Whatever this is supposed to do, it doesn’t work

Players have figured this out, so we’re seeing a lot of Raids where only two or three players are finishing the fight while everyone else waits in the lobby. If you’re one of the few players who can carry these battles, it’s a good situation for you. You virtually guarantee a three-ball individual contribution bonus and probably will earn three balls for your team as well.

But if there aren’t any sufficiently leveled players around, team members’ refusal to rejoin the fight can cause Raids to fail. And if some of the players are willing to tag back in to finish the boss off, they’re punished for it.

It’s not clear whether this is a bug or intended behavior, but it’s creating a bad situation for many players, especially due to the impact of the dodge bug. The best way to maximize your return works against the best way to win the overall battle, and that’s bad design.

Niantic should compensate players for the impact of these bugs

When Blizzard learned of a bug in Hearthstone that impacted how cards were dispersed, it gave players free packs equal to a third of whatever they’d opened while a bug was active when it learned of a bug in how powerful cards were dispersed. The cool thing about compensating people with digital goods is that it basically makes no dent in the company’s bottom line.

Niantic could award players 20 percent of the premium Raid passes they used during the legendary Pokémon events or 20 percent of the Pokécoins they spent during them. If Niantic doesn’t want to compensate players in virtual currency or cut into Raid pass sales going forward, it could (assuming it keeps track of things like this) give players the best specimen of each kind of legendary Pokémon that fled from them, as an acknowledgement that players’ catch chances on these Raid bosses were impacted by the numerous bugs.

Any of these things would restore a lot of goodwill among a community that is exhausted and frustrated with the current state of the game, and it’s important to make sure the players don’t feel taken advantage of if you want them to keep playing.

People are finding ways to work around these issues, and Niantic is addressing bugs as it finds them, but a lack of stability and communication means that players are crowd-sourcing a lot of the information about what’s not working and why. If Pokémon Go is to continue to grow and evolve, the Raid Battle system needs to be not just consistent, but transparent. Niantic has a long way to go in both areas.