Yesterday I hit a stumbling block that's set me back a day or so. As part of my reengineering I added IFrameListeners, for objects that need to be updated once per frame. When I tied the FrameListeners with the animation system I noticed that things had gone very screwy, the animations fell out of sync and then almost randomly flipped frames. It turns out that the problem is due to the objects each sharing the same animation and updating it each once per frame. The flaw is down to the Animation class holding current timing data; instead I need the object to hold AnimationInstance data, essentially meaning that the Animation class becomes a list of frames and loop flag data. It was an ill-planned assumption to make, but I'm glad I uncovered it now. The changes needed will probably mean that it's better to rip out and recreate the entire system, rather than try and work the errors out of the code. It's annoying, but it needs doing.
Time to prioritise the next work. As I see it, there's a couple of 'critical' things to work on before I can start working on the real game. The first is the key binding relay, this is a 'must' as there is no other way to translate input into actions. The second is the pixel-perfect collisions, although this can be done using basic collision tests for now - the pixel perfect work can be postponed for a while. The third is the set of game rules that will be used to control the game. I'm not expecting this to be too difficult, it will be fairly generic and controllable via script.
There's plenty to do and that doesn't count the amount of graphics work that will need to be done... 4 months is going to fly past.