I was looking over my current work on Riot2D, my game engine. I need a fairly robust sytem as the next several games will be based off it. It was already beginning to feel a bit forced. The high-level architecture was flawed from lack of design. I sat down with my UML editor and started planning out the design. I've made a fair amount of progress with the design but I'm going to have to put in a few more hours before I'll be happy.
I'm "borrowing" the ref counting universal base class from Superpigs Enginuity articles. I think its explained in article 2, but the code which comes with the article is more complete than whats presented in the article. I've used it before in various failed projects but it really is a very nice way to keep track of memory. I've decided to make this engine heavilly templated so I can't use dlls. I dont miss them that much actually. I don't really care about the ease of updating the game on the users machine. If I have to patch the game they can just download the fixed exe.
My biggest design issue at the moment is the resource loading system. I'm not quite sure how I'm going to work that. I'll probably just have a resource base class which contains various loading virtual functions. Then I'll have a templated resource manager class which will take care of each resource type, such as sprites or sounds. I still have to work out some of the specifics but I think this should work grand.
I also have to design how I store animated sprites and their bounding boxes. Animated sprites will probably be stored in as close to a square grid as I can get because I'm using textures and I don't want to waste much space. I'll probably define all associated data in a seperate binary file. I'll have to rig up up some editing software to deal with these but that shouldn't be more than a few days work. I'll probably lump static images and animated sprites together into the same system. I don't see there being much of a performance penalty.
Once I get down to work with a design driving me I shouldn't have many major problems.