If you override a turf's Enter() proc to return 0, you can't enter it but Bump won't be called (the same happens with returning 0 in the Cross proc of a non-dense mob). In this case, how can the mob detect when an object has blocked its path?
If you override the mob's Move proc you can determine that the move failed, but short of re-creating the attempt to move when it fails there doesn't seem to be an easy way to find out what object (or objects) prevented you from making that move. With tile-based movement this isn't terribly difficult, but with pixel-based movement it is.
At first I thought this was a BYOND bug - if you're not able to enter a turf because it blocks your movement then you bumped it. I never used the Bump() proc much so I'm not sure if it always worked this way or not, but I have a feeling it's always been this way.
I had expected that the default Enter proc would check if you're allowed to enter or not, then, whatever proc calls Enter() would, based on the result, either perform the move or call Bump(). Another way of asking this question is, what causes bump to be called and is there any way to customize that behavior? The reference says that it's called when movement fails due to a dense blockage, but it seems like that's what Enter() lets you do - it lets you define when an object behaves as a dense blockage.