The whole changeState engine is built within the scripts. If you want to understand how they work, when doit()s are executed, when they are executed, etc. look through the scripts.
I can assure you all there are no bugs with the changeStates, you are just not using them correctly. They were used in ALL sierra SCI games all the way through Leisure Suit Larry 1VGA,2,3,5,6,7, King's Quest, 1SCI,4,5,6,7, Space Quest, 1VGA,3,4,5,6, and all the others! Even Police Quest SWAT! The class system in the template game runs IDENTICAL to Leisure Suit Larry 3's as that is what it was based upon. In fact, it runs Leisure Suit Larry 3's rooms perfectly.
I have multiple explanations on how they work, including my EXTENSIVE help file, tutorial, and other random docs all over the place. Anyone who says SCI Studio lacks documentation (I'm looking at you Robin

) Hasn't given it much of a look. The help file documents the whole class system, all 29 scripts, 63 classes, all the methods in the classes, all the procedures, the 114 kernel functions, every syntax in SCI code, and along with the tutorial, every aspect needed to make a game with SCI Studio. If you want to know more about SCI, there is also the extensive FreeSCI documentation, and of course, the complete source codes to SCI Studio, FreeSCI, and all of their other tools.