Re: the doors and ontouch(), I suspect we need to extend the area checked. i.e. use the collision area to determine if you are touching a tile. onover() should be used for you being stood ON a tile, ontouch() should include you being within half a square of it (or thereabouts).
I guess this is also the reason for the doors sometimes being a bit dodgy bug...
I guess this is also the reason for the doors sometimes being a bit dodgy bug...