I've done some simple tile based collision: Move character, look up the tiles moved into, and if solid, push them back out. I move on each axis independently, because this gets them to eject properly. My game uses 2D Sprites, but its physics is 3D, so this includes the X, Y, and Z axes.
I don't want every tile to feel like a brick of lead. I want walking into a bush to feel springy. I want to feel a bit of sag when walking on snow. I want running up a steep slope to feel harder than running down a decline. I want for some tiles to bounce you off like trampolines, and for others, to absorb the full impact so that you stop in your tracks.
All of this works very much against the "hard thing pushes out" design I have so far. It occurs to me to that with slopes, it might not to work to push against each axis individually. Now that I think about it, how do I handle collisions with more than one tile at once if they have different softness properties?
How does one accomplish this sort of thing using tiles-based (or in my case, more accurately, blocked-based) collision?