@ OlafSch. A lovely shot featuring the weird 'neon-sludge' city backdrop when the registers load badly! Great to know it's working on Aros, thankyou for testing it!
@ Havie. There are of course several ways; colour to colour, sprite to bob, zone to zone. Whichever you choose you'll use some way of working out the depth for this style of game.
You could leave your zones as they are, but add an additional check to see if the y axis is 'in range'.
If you don't want to check the Y axis you can make smaller zones. One way would be to make a zone around the attacking limb (say an arm) and work out a smaller zone for the baddies, say in their mid section. Adjust each zone so that it will miss if positioned too high or too low.
This engine uses (quite crude!) proximity detection which will trigger a hit on certain animation frames only. It worked out faster simply because the code was already there (used to work out AI) and was easy to adapt.
Certain PC languages allow for a Z axis and though it's not necessary for a 2d game you could use that to determine when at appropriate depth. The other thing that could pull the rug from your feet is airial attacks, you just need to work out where the 'ground' is and whether what's standing on it will be hit or not. For the same reason as Codetapper suggested above re. 'blitting order' make sure that your hotspots are at the feet of your characters, it makes working out the 'depth' a lot easier.
Just keep it simple as you'll be testing for each object per loop.