With a tile based engine, in my knowledge, is not possible to move a sprite into an irregular terrain. So which are the techniques to use for implementing that? Maybe an hexagonal tile based engine?
It remember me an interesting guide i saw: http://www.gamedev.net/page/resources/_/technical/game-programming/the-guide-to-implementing-2d-platformers-r2936
"The Tile based smooth" subject explain how it works for a game like Megaman. Hope it help!
(I agree with Eric B -probably not best to make it a tile game - but thought i would answer anwyay)
If the amount of variation is less then one tile, then you could have tiles that allow user movement through them, and a corresponding table of heights for those tiles. SO lets say you divide each tile up in to 16 px portions, (64px wide tiles / 16px parts = 4 per tile), then as the center of the player moves over the tile, you could determine which of the 4 parts your player was currently on, and adjust the height. If the player was wider or had wheels, you could do the same thing for each wheel, get the height and then rotate the player to match.
But, you still need to have tiles for each shape, so you would need a lot of tiles for this. Just an idea.
I'm sorry i cannot give credits : i can't remember where i saw this gem, but here's one technique that is worth mentionning :
1) how do you know the sprite is on the floor ?
2) how do i know the normal to the point of contact ?
Rq1) you might want to use a 5X5 or 7X7 grid. In fact in the article i saw that a 3X3 was perfect for a game with gentle slopes ( < Pi/8 ).
Rq3) if you go for a 5X5 matrix, compute first the norm of the 3X3, then end the matrix computation to get the 5X5 norm. if you compare the two norms you can know about a near edge : another magic !!!