I'm not pretty sure whether I could be talking nonsense, but I think the issue is you are making player the object condition for the zombie animation.
If you say compare if player is X then zombie do something, runtime doesn't know which zombie to pick. If there is just one zombie at a time it doesn't matter, yet if there are more... That would be why it doesn't recognize right or left, for it gets confuses about which zombie to reference. The main event where the check sub-event comes from is even an everytick.
The expression for checking distance/position in the expression box is just a system comparison, either true or false. It is not picking the zombie from the expression, but the player. Be the condition referenced to the zombie object and then into the expression box, distance from zombie to the player, the right one would be picked. As to say:
- System Compare Zombie (expression: distance to player, position...) >
> Zombie set animation to Zombie.Animation
Forgive me in advanced if I am unnecessarily messing and you already took that into notice or solved by other means of picking. I only say becaise recently I had the same issue regarding path lines which didn't properly aim to their own troop for they were not correctly picked and was creating a domino-like chain effect from a fore event. After using line objects to check the events, rather than troop object, it all started to work right away.