In July 2011 I wrote about environment actions. They are still there, unfinished... but it's like that with large scale projects. Today I was looking at the thing again and decided to add an environment type to all objects as a general way to tell where the object is.
The object can sit on ground like it was another sunny day, but it can also be in number of other environments like lava, pit and even at the middle of air. Complexity requires generalization with another type of class on top of terrain types (or main types in this case, another generalization).
The way I try to tackle this is first make sure objects always know where they are. It's a good start. Then actions (the same actions left from July 2011) describes what happens when the environment changes. I think it's a plan that might work.