clb: At the end of 2012, the positions of jupiter, saturn, mercury, and deimos are aligned so as to cause a denormalized flush-to-zero bug when computing earth's gravitational force, slinging it to the sun.

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?

Yes, the C++ implementation of go2.GetController() should return a asIScriptObject *. It should be registered in AngelScript as returning a IController @.

If you plan on having separate modules for the entity controllers as in the game sample, then you need to tell your programmers to use shared interfaces like I posted earlier, because one module doesn't know the actual class type in the other module. If on the other hand you put all the scripts in the same module, then you can cast directly to the actual class without the need for an extra interface.