Problems:
(Some of these are written as features, but I'm sure we all know the problem behind them, I'm just being a tad lazy)
* Animators can't program. (Later on, when we talk about scripting models, I'll dig up links that argue otherwise, but for now, this is a known problem)
* Rendering engine factoring yadayada
* Selectable/multiple moviepack support
* Can't exchange models (player customization of models, cycle trails, etc)
* Creating new game objects is damn near impossible, modeling them is a big part of the problem
So, to make it so that animators who can't program can animate models, I was wanting to tap into the ipkey thing that at least 3dsMax and Blender have in some form or other. A little discussion on how this works, or at least how it looks like it works.

So, you place your mesh in a position and mark it. Then you advance to the frame you want to advance to, reposition the model, and mark that. Those are the key frames. A standard transformation will be applied to the mesh to move it from the first frame to the second, and to do so smoothly. In Blender (and I assume others), you then go to the ipkey editor, where you see the graph of the transformation. It starts as a line with slope 1, where the first frame is the bottom left of the line and the last frame is the top right. You can edit this graph directly, and you're manipulating the underlying function that drives the transformation. So if you, say, want to oscillate a spinning wheel, you'd give it two ipkeys. One for the spin, in which case each key frame is just rotationally different. Then one for the wobble, in which case you'd make one key frame that has the wheel rotated slightly in the <insert right word> direction. (axis of rotation?) This second key you'd then go to the graph and apply a sin curve to it, which will make it oscillate. Adjust the amplitude or period to have the predictable effects on the wobble.
So I dreamed up this class, rGameObject, which doesn't exist. This class would contain everything needed to render a single game object. The game object class, gCycle for example, would tell the renderer what type of object it is, and the renderer should then search for the right class to render it. At first, and probably for the most part, all game objects would use rGameObject to render, because it'll be a pretty thick class. The renderer creates this object and tells the game object to associate itself with it.
The game object will do these things:
* Associate a state variable with an ipkey, such as velocity. It will do this as many times as needed to do this. (An alternate implementation would have rGameObject reading these associations from a file and doing it in the other direction, and the game object doesn't know about rGameObject, but this is a problematic setup. We should beat this around a bit)
* Initialize colors. These may come over the network, from user.cfg, whatever. It'll be player colors.
* Initialize player name, and optionally, team name.
* Initialize anything else rGameObject needs to know to render it that the game object owns.
rGameObject will contain, for the purposes of animating, a transformation function or three. Obviously subclasses could override these functions as needed. I'd expect that only one generic one is needed, but without cracking open Blender code and seeing what they do, I don't actually know how many transformations will be needed.
So what's in rGameObject, besides this stuff?
rGameObject will have some other things.

I think another class is needed to manage model media to isolate rGameObject from the resource manager and file access, but I'll probably be wrong about this. In any case, this other class would provide all art assets--anything that needs to be rendered. It would also provide loaders for models, textures, and whatever other art assets are needed (not music! that's separate). So rGameObject would say "Give me the model for the cycle at this address" and this other class would get it based on the preferences of the player/server admin/remote player/script/map/whatever. So it could come from a moviepack (or grid skin or whatever you want to call it at this point), it could come over the network, or whatever. It would turn over to rGameObject the rModels, rTextures, and ipkey information.
So, to get there from here, I was looking at gCycle. Specifically the model loading ad rendering. We could create rGameObject and make it capable of rendering a cycle. Then we get it tied into the resource system and adapt it pretty quickly to walls, trails, and zones. We go ahead and create it as a member of gCycle, the same way rModel and rCycleTextures are currently handled. And we'd call rGameObject::Render() from gCycle::Render(), and rGameObject::Timestep() from gCycle::Timestep(). After it's been adapted for all the game objects, we can look at how we're going to construct the scene graph and where the rGameObjects fit in. This should effectively remove all rendering code from the eGameObjects, leaving behind a skeleton to be removed when the rendering engine is brought in line with philippe's World model (which calls for a scenegraph, which we arguably have now, iirc).
I'm not too intimately familiar with the details of the renderer past whats in gCycle and gHud, so naturally feel free to throw in what you've got that's so blatantly obvious but I missed it.
So, the main thing this class would give us is lack of commitment.

The reason I mention it like this instead of just writing the damn thing is because besides having my hands full otherwise, the transformation function in particular calls for math that's still quite a ways beyond me. Maybe after this semester it won't be, but right now it is. So if it's going to get done before Christmas, someone with more math than I have will have to do at least that much. I can prototype it for you, I can do a lot of the housekeeping stuff that goes in it. I can even copy and paste large blocks of code from existing rendering into it. But I'm not far enough to finish the job.