No, no, not at all. I must have confused you. The script only yields if you call one of the "blocking" methods (GoTo, Talk, TurnTo...), Sleep() or if you call a custom method which is defined in another script.
Well, exactly ! Originally I had two classes for my minigame: let's call them MiniGame and GameElement ; I only called the Update function for the MiniGame class once every 1/5 second from the level's script_init.script, but this function called a lot of methods on the GameElement objects. GameElements had their own script file and methods and so the main Update script would yield many, many times per iteration of the main loop.
I sorta solved this problem by removing the GameElement class and putting everything in functions in the same .script file as the Game class, but that's very poor code design. It works because it's a simple minigame but if I had to do something more complicated it would be hell to write and maintain...
Of course, WME is a point-and-click adventure game engine, not a tetris-like engine and minigames may not seem too important to you, but I believe that they add a lot to gameplay variety and they are definitely part of the genre: even Space Quest 1 had a landspeeder racing minigame (ok, it sucked but it exists
)
As a side note, I think that Entity.GetSprite and entity.SetSprite slow down the game a lot. It might or might not be related to the problem discussed above. Is there a way to prevent that ?