By default, Inform 7 has a “dual object hierarchy”: there’s the containment tree, and the “part-of” tree. This complicates various parts of the library that have to switch back and forth between the trees, with functions like
CoreOfParentOfCore (the part-ancestor of the containment-parent of the part-ancestor of an object).
Dialog instead has a single hierarchy, plus a property on objects that indicates which relation it has to its parent. This means that, for example, an object could be both a container and a supporter without ambiguity: some of its children would have their relationship property set to “on”, others to “in”. “Worn” and “part-of” are also implemented as relationships in the hierarchy.
How feasible would it be to implement something like this in Inform? The main difficulty I’m foreseeing is implementing the setters for “carried by”, “worn by”, etc, since I don’t know of a way to define a custom setter for an I7 relation.