The refactoring continues… part of which is the redesign of how weapons and armor work.
Playing World of Warcraft in the last few years has really made me recognize the serious problem of high-scaling. Basically, if you create a system in which bonuses continue to rise at a steady rate, eventually you make a system where more experienced characters just wipe the floor with lower-level encounters. In WoW, since the Cataclysm expansions, the attribute bonuses on items got so ludicrously high that a maxed-out character could solo heroic dungeons from the prior expansion with ease.
Dungeons & Dragons suffered a similar problem, although not quite as extreme, with the 3rd edition. Although it was better than most at higher levels, the 15-20 level range had characters overloaded with magical items that boosted their skill and attacks to extremely high bonuses.. so much so that the 1-20 random range became a non-factor. The epic level rules (which clearly had never been play-tested) made things even worse.
I’ve addressed some of this already in my designs by dropping levels as an abstract measure of power, and experience gained from monster slaying. However, I still had items featuring steadily increasing power levels, to the point that an item could make a significant difference in power level, plus a monster with high statistics could easily overpower a low-level party.
On my re-design, I took it one step further by redesigning weapons and armor to have static values for attack/defense bonus based on type. So a sword always has +4 to hit, and a cost of 2 action points to use. A suit of mail armor has a defensive bonus of +3, and a move cost of 3 action points. And so on. I also removed all the other defensive options such as dodge, parry, and block. (Too bad, since I already had some sound effects for them.)
So how are weapons different? Well, their potential damage (measured as a base amount and a range) is different for each weapon, as is the regular and magical damage reduction of armor. In addition, the last two bytes of the weapon/armor array serve as a generic index modifier. Basically, an item can adjust another statistic in the array. A rapier, for example, may give you a +1 defensive bonus.
The nice thing with this change is that it stabilizes your ability to hit to a static amount. So a high defensive score remains high, no matter how powerful the characters are. Damage will vary, but I plan on keeping that curve very slow. This means a higher strength encounter won’t automatically wipe the party out, although they may get reduced to doing only 1 point of damage per hit.
I didn’t remove QUITE as much code as I thought I would, removing the pre-processed action system. The refactoring of the attack routine did reveal quite a few small little bugs, though. Some of them were straight values used as addresses, which was probably what caused the increasing instability in my combat engine. So hopefully this will help debug and get the FX engine rolling.