I cannot predict in advance what functions the "production" programmer will want to use. In your example, you wrote : go2.GetController(). What type does it returns exactly? An asIScriptObject* from a script that implement IController ?
Does that mean, like InvalidPointer suggested, that I can simply cast it?
Zombie @ctrl = cast<Zombie>(go2.GetController());
And let the production programmer call whatever they want in Zombie.as? Or I tell them to use interfaces?