So, after some design work, here's what I ended up with:
- Level
- Health
- Mana (for spell-casting classes only)
For mechanics, the simplest is always best. Your level is essentially your "catch-all" skill check. A random "roll" is made and added to your level, and compared to a target value. If it equals or exceeds it, you succeed.
Instead of using a complex binary skill system, all special abilities are tied to classes. I also eliminated the idea of user-initiated abilities; most are passive and occur in specific situations. This means I don't have to develop any UI for it. (In fact, these changes will hopefully cut back on the memory footprint my status screens were generating.)
What about attributes? Well, they're gone, sort of. Instead of having an abstract value that has to be crunched to come up with something else, I just have flat "bonuses" added to the important game factors, as follows:
- Melee attack - add to level for hit in combat
- Melee damage - add to damage from hit
- Melee critical - add to critical range
- Ranged attack - add to level for hit in combat
- Ranged damage - add to damage from hit
- Ranged critical - add to critical range
- Spell attack - add to level for hit in combat
- Spell damage - add to damage from hit
- Spell critical - add to critical range
- Evade - Dodge an attack
- Armor - Amount damage reduced from a successful attack
- Block - Block an attack with a shield
- Parry - Parry an attack with a weapon
- Resist - Resist a non-attack spell
- Skill - Pick locks, disarm traps
Different classes have different values, so some are more effective than others. Various trinkets in game can be equipped to apply direct bonuses to these, and special items will even allow you to permanently raise some of them.
One particular change was dropping the idea of stamina and having "action" instead. Every class has identical action points; the only way to increase them is through spells or trinkets. I think 2 actions (move, attack, two attacks, two moves) is sufficient for tacticals. I'm debating having "readying" in the game, so that you have to spend an action point to switch from melee to ranged, or to change to a different active spell. It's extra work, and it would slow down combat, which may not be desirable.
Now that I have a basic structure in mind, I can start throwing together a framework program to start playing around in. The combat engine is, in effect, a sidebar from the main program, but I don't want to proceed with anything else until it's done to my satisfaction.