I think I see your problem here.

You want to have a smaller area near to the characters' feet as the only place where collisions are detected so that you interract with the background as if you were looking down from an angle over the game screen.

Well, to achieve this, you could always think outside the box

How about this idea.
You use 2 sprites.

You have a sprite with no image - just a bounding box, or at the most, it's a shadow circle. This is your main sprite... All background collision detection is done via this sprite. In fact, all movement is done via this sprite too.

Next, you create a second sprite. This is your player avatar sprite. This sprite does not react to background collisions, only to bullets. This sprite can shoot things but cannot move on its own.

The first sprite (the shadow) has reference to the avatar sprite and on each doMove, it updates the avatar sprite with the new X&Y co-ordinates. (positioned so that the characters' feet appear inside the shadow sprite) You can be sure that these co-ordinates are valid places on the map because you've already done those checks in the onCollide method.

Your shadow sprite moves when you press the arrow keys
Your avatar sprite fires bullets when you press the fire button.
The shadow sprite moves the avatar.
The avatar sprite has a Z-axis slightly higher than that of the shadow so it's always drawn on top.


Personally, I wouldn't do it this way, I'd use a collision array and check my position against it vs the walls. The collision map and the artwork are seperate that way. But my way involves more coding and this way uses more DelphiX internals. But it does involve 2 sprites instead on one... but that's no big deal. DelphiX can handle it.