Punishing people who try and control the map just IS part of the meta-game this year. Zombie behavior is very well documented, not difficult to understand, and balanced for both teams. It's just a game mechanic, like the Mines or the Nuke from BC2013, or Milk from BC2014, or the Towers from BC2015. The effectiveness of each team hinges on how well they understand and utilize the mechanic. The only difference is that this year teams are more transparently punished for failing to deal with it effectively. I don't think this is bad, or broken. That's what makes this year so unique compared to previous years. You just need to understand the Zombie mechanic and design your Robot with that in mind.
If one player collects more parts, kills more zombie dens, and has units patrolling most of the map, he should be winning, right?
Victory doesn't just go to the team that finds all the things, builds the biggest army and destroys the most stuff. It never has. If you built a hundred guys, and your opponent only builds ten, but his guys destroy your HQ while your guys are all off exploring, then you lost. In Battlecode, no team is "winning" until they've won, in this years game just like any other year. And the winner this year is the team with the last Archon standing, not the team with the biggest army.
Since the sprint tournament, disappointingly, Zombie spawns were pretty much were nerfed into the dirt, even on maps that were extremely difficult in the Sprint. If you're still having problems with them overrunning you, then you may need to take a new approach for dealing with them. Build a squad of 5-6 soldiers whose only objective is to seek-and-destroy Dens. Send your scouts out to find Dens. And/or, when you see a zombie, destroy it and move towards the direction it came from. Thats where its den will be. Keep a lower map profile. Keep your forces together, strongly controlling small areas instead of spreading out and weakly controlling large ones. Spreading out leaves your units alone and unable to defend themselves against zombies, which helps the zombie swarm grow stronger when they die, and pulls their attention towards you and your troops. Cluster your forces together soon before a zombie spawn to reduce the number of Zombies that your team draws.
The Devs made a number of good balance changes to reduce the RNG from Zombies. At this point, there's little-to-no chance elements left. The winner isn't decided by chance, it's decided by which team can effectively combat their opponent while simultaneously dealing with the Zombie Apocalypse.
Introduce a core and weapon delay for zombies that is added when a zombie is spawned due to infection
I actually like this, a lot. Right now, if a sufficiently sized zombie wave crashes down on your troops, there's usually no way to save it from joining the swarm. But having freshly-infected units with delays (even as small as 5-10) right on the front line would provide a barrier between the Zombies and the rest of the troops, allowing you to fight back or even withdraw.
Plus it more accurately portrays most Zombie Apocalypse scenarios, where fallen allies distract/hold back hordes of zombies with their tasty flesh, and then the re-animated zombies need time to wake up, get up, and stumble around a bit before joining the horde.
In addition, the spec guarantee on zombie den distance is poor because it is based on squared distances
Squared distances are functionally equivalent to euclidean distance. The only difference is,
d = Δx^2 + Δy^2 instead of the square root. For all squared distances, there exists exactly one corresponding euclidean distance (
sqrt(d)), and for every pair of euclidean distances, if D1 >//</= S2. Distances are measured in square-distance in Battlecode so that players don't have to continuously perform expensive
sqrt operations throughout their code, and can use ints to represent distance instead of needing to deal with nasty floating point problems.
I could see 30% maybe not scaling linearly to squared distance (depending on how The Devs calculate that 30%), but if 30% is applied directly to square distances, this actually increases the distance apart (
sqrt(0.30%) > 30%).