Clearly this wouldn’t be useful behaviour in all games. But, again, I think that part of the problem here is that, in the IF world, ‘normal application behaviour’ remains grounded in a 1980s programming model.
From an OO perspective (for example), it seems to me that the concept
player.go_to (drugstore)
(or wherever) is always semantically meaningful, so long as movement of any kind is a valid concept in the game. Of course, it may be impossible to make this movement, and there may be side-effects of making it even if it is possible. But it seems to me that it should be possible to conceive of such an action, at least. But if your programming model is such that, at some particular point in time the only valid user interactions amount to ‘yes’ or ‘no’, and you enter the equivalent of ‘go to drugstore’, then I can see how there comes to be a problem.
As for Windows and menus and whatnot: I can see the benefits of operating within the lowest-common-denominator of user interface features. But I can see the costs, as well. Whether the benefits outweigh the costs, I don’t know.
I’m pretty sure a lot of that was wrong in 2006, and I’m certain that most of it is wrong now. It’s always been possible to save a game state (or any kind of state) in Java by serializing an object tree to file, and it’s always been possible to implement an undo, of any depth, by doing this for every turn. Even in 2006 I doubt this would have created much of a memory or storage burden.
Java doesn’t have run-time typing of primitive types, because primitive types are type-immutable. This is feature, not a failure. But it is possible, and was possible in 2006, to wrap up primitive types inside objects which are type-able at run-time, and the machinery for doing this was partly automated. Now it’s fully automated – which I disapprove of, but that’s a different matter.
I presume by the different object model what they means is that Java lacks built-in operators to express concepts like ‘an instance of X is included in an instance of Y’. I’ve used TADS a bit, and it’s OO model is, indeed, well suited for modelling simple relationships between real-world objects and doing the right thing when these objects are operated upon.
But, honestly, these things are not hard to implement in Java. Or, indeed, in any reasonably competent OO language.