Ideas:chad3f:SkillsSystem
Skills System
Some of these ideas may have already been mentioned in some form, but this will cover my ideas as a whole.
Acquired Sklls
Instead of limiting skills to general attributes such as atk and def, create itemized skills that map to realistic real-world skills (where possible, as a few synthetic ones may be needed).
- Attack/Defense placement
- Range
- Close
(fists, hand dagger, knife, short sword) - Medium
(long sword, thrown dagger) - Extended
(arrow, ice/fireball)
- Close
- Elevation
- High
(head) - Medium
(torso, arms) - Low
(legs, feet)
- High
- Range
- Enemy experience
- General type
(elf, dwarf, orc) - Specific type
(archer_elf, leader_dwarf, hunter_orc)
- General type
- Enhierent skills
- Agility
- Strength
- Speed
- Endurance
Except for Enemy experience, all of these skills would also be assigned to creatures. And with persistent non-player storage support, even specific player experience could be a factor for creatures. So the more you fight a specific create (or type in an area), the better it is against you. as if it learns to anticipates your combat.
Item Skills
Like general learned skills, items (like weapons and armor) also have common properties that can be mastered over time.
- Experience
- General Type
(sword, dagger, hammer, club, shield, armor) - Specific Type
(great_sword, war_hammer, wood_shield)
- General Type
- Use styles
- Stab
- Slash
- Throw
Item Definitions
Items would then be defined as a [weighted] list of skills that makes up it's use. Here is a rough example of some hypothetical items/skills:
<item name="short_sword"> <skill name="sword" weight="20"/> <skill name="short_sword" weight="20"/> <skill name="slash" weight="10"/> <skill name="stab" weight="3"/> <skill name="range_close" weight="10"/> <skill name="range_medium" weight="2"/> <skill name="agility" weight="5"/> <skill name="strength" weight="5"/> </item> <item name="long_sword"> <skill name="sword" weight="20"/> <skill name="long_sword" weight="20"/> <skill name="slash" weight="10"/> <skill name="stab" weight="3"/> <skill name="range_close" weight="5"/> <skill name="range_medium" weight="10"/> <skill name="agility" weight="2"/> <skill name="strength" weight="10"/> </item> <item name="knife"> <skill name="knife" weight="20"/> <skill name="slash" weight="5"/> <skill name="stab" weight="15"/> <skill name="range_close" weight="10"/> <skill name="agility" weight="7"/> <skill name="strength" weight="1"/> </item>
The method for applying these attributes is to calculate the proportion that each is of the whole (this can be done up front in the code). The reason for using weights instead of raw percentages is so a person doesn't have to adjust all other values to total 100 just because they add/remove/change a single skill.
For the sake of calculations, all current player skill values are converted to a number in the range of 0.0 to 1.0. How this is done should remain independent of this portion of the skill system, but the values are assumed to be a linear value where 0.0 = complete novice, and 1.0 = perfect expert.
The proportional skills from the item is then scaled (multiplied) against the player's current value for the corresponding skill. All of these values are added together, which have a maximum total of 1.0. This total is then use to scale the item's normal potential (like atk, or whatever might replace it) and applied as needed. As skills are gained from use of an item, the gain is divided up based on the proportion each skill's weight and added to the player's skills (based on it's independent implementation).