The advantage of the new system is that a lot less data is stored in code. While I still have to register classes, the classes no longer have to contain any data, and many monsters can just share a class.
Way to much of my time was spent replacing calls to the old system with calls to the new system. The API is similar, but now you have to reach it threw the world object rather then the loader being a global variable.
While working on this, I found a point of inflexibility in the code: Weapons can't define special attacks. The variation in weapons is a list of damage types, but I want to be able to define really weird weapons that don't use the normal system. I think that if a monster has a special attack, like "claw", but is wielding a weapon, it shouldn't be able to use it's weaponless default. If I define a "default attack" for every weapon slot, and modify monster that way, it might be more dynamic. I am unsure however how I should handle multiple weapon slots. Most games seem to work by either picking a random one, or all at the same time. Since for humans the default would be punching the enemy, neither is very realistic. I am thinking something along the lines of "Try to hit with your sword, if you miss, try to hit with your fist, if you miss, try to bite, etc. depending on what attacks are available. I would like your ideas about this.
Thanks for reading!
Keep on working. In a previous project of mine, once reached this point (let's move all this stuff in some external file!) I succumbed to boredom and left the project.