Inform6 it's very powerful. You define the actions objects, and it does it very well by default. Objects have atributes (openable, stackable, decoration...lots of them) and you can even set the library messages on these actions after being done (or before).