Re: Animating MOSParticles
I did some thinking about this, and I think I have some understanding of what's going on.
Several weeks ago, I learned that MovableMan.Particles is actually a function that returns a table, not a Lua table itself (see image way below). I didn't understand why until now.
My guess is that MovableMan.Particles references a function in CC's game engine, not a function in Lua. I am assuming this because Lua functions use a ':' when called, while functions from programming languages like C/C++ and Java use a '.'. I don't know what language CC's engine is written in, but it'll most likely be some C based language. Unlike Lua, these languages do not support dynamic type.
The pointers returned by MovableMan.Particles are classes of MOPixels, MOSParticles, and AEmitters. However, each of these particle classes have different properties from each other. Pointers returned by MovableMan.Particles can only have properties that are common to these three classes, since the language that MovableMan.Particles is written in does not support dynamic type. (The actual type that's returned is probably either a MovableObject, or some Particle interface).
When these pointers are passed to Lua, it then adds in the properties of that pointer's specific class. However, any traits from super classes in between get lost in translation, since these pointers did not have these values when CC's engine passed the pointers over. So, Lua just fills in the gaps with 'nil's.
Keep in mind, this is only a hunch. I might be wrong on some minor points, but I think it might accurately explain why Movable.Actors, MovableMan.Particles, and such act weird.
Yet, I could also be completely wrong and just blowing confetti out my ass.
@Grif: Yes, you shouldn't of said why