1 |
pippijn |
1.1 |
SKILLS/EXPERIENCE DOCUMENTATION for DEVELOPERS |
2 |
|
|
---------------------------------------------- |
3 |
|
|
|
4 |
|
|
- Summary - |
5 |
|
|
|
6 |
|
|
0. Introduction |
7 |
|
|
|
8 |
|
|
1. Sketch of system |
9 |
|
|
a. Initialization - how skills and experience are linked |
10 |
|
|
|
11 |
|
|
2. How to add new skills |
12 |
|
|
a. creation of new skill: outline of needed steps |
13 |
|
|
|
14 |
|
|
3. Detail of skill archetype values. |
15 |
|
|
|
16 |
|
|
4. Skill Tools |
17 |
|
|
|
18 |
|
|
5. Skill Scrolls |
19 |
|
|
|
20 |
|
|
6. Other Objects |
21 |
|
|
|
22 |
|
|
7. Workings of the Skill System |
23 |
|
|
|
24 |
|
|
8. Changes & Limitations |
25 |
|
|
|
26 |
|
|
------------------------------------------------------------------------- |
27 |
|
|
0. Introduction |
28 |
|
|
--------------- |
29 |
|
|
|
30 |
|
|
Skills were redone to a large extent in April 2003. This document has been |
31 |
|
|
updated to reflect how the skills work. |
32 |
|
|
|
33 |
|
|
The main change is that experience categories were removed from the game. |
34 |
|
|
Instead, experience goes to the skill itself. Thus. how good a player is at |
35 |
|
|
the skills is directly proportional to how good they are at that skill, and |
36 |
|
|
not the category itself. |
37 |
|
|
|
38 |
|
|
1. Sketch of system |
39 |
|
|
------------------- |
40 |
|
|
|
41 |
|
|
In the skills/experience code, players gain experience for the activities |
42 |
|
|
which they perform in the game ("You are what you do"). The activities a |
43 |
|
|
player may engage in are controlled by the skills they possess. All players |
44 |
|
|
start with a basic set of skills which they may expand through adventuring. |
45 |
|
|
While monsters do not gain experience from the use of skills, they may use any |
46 |
|
|
skills which exist in their inventory if they have the can_use_skill flag set. |
47 |
|
|
|
48 |
|
|
In the code, skills are objects which exist in the player/monster inventory. |
49 |
|
|
Both NPC/monsters and players use the same skill archetypes. Not all skills |
50 |
|
|
are however enabled for monster use. Check the Skills_players.doc for |
51 |
|
|
available NPC skills. |
52 |
|
|
|
53 |
|
|
The experience one gets for a skill is greatly simplified. No longer |
54 |
|
|
is it weighted based on the stats of the player. Rather, the experience is |
55 |
|
|
based on what the skill was used for - opening a tough trap gets more |
56 |
|
|
exp than opening an easy trap. The stats the player has will improve |
57 |
|
|
the chances of success in most cases - this is bonus enough without also |
58 |
|
|
gaining additional experience. |
59 |
|
|
|
60 |
|
|
The chracters total experience is no longer related to the sum of experience |
61 |
|
|
in the players skills - A player could for example only of 1000 exp, but have |
62 |
|
|
skills with 2500 exp, 300 exp, etc. Removing the tie between skills and total |
63 |
|
|
experience allows for reasonable skill advancement - you can allow a player |
64 |
|
|
to easily get to level 20 in a skill without them now being level 20 player. |
65 |
|
|
|
66 |
|
|
Note also that the only tunables are now in the code or in the archetypes - |
67 |
|
|
if the exp for disarming is out of whack, the code would need to be changed |
68 |
|
|
to give more appropriate amounts. |
69 |
|
|
|
70 |
|
|
2. How to add new skills |
71 |
|
|
------------------------- |
72 |
|
|
|
73 |
|
|
Adding a new skill to CF is not overly difficult, it is little more difficult |
74 |
|
|
than adding new archetypes and a spell to the game. |
75 |
|
|
|
76 |
|
|
a. creation of new skill: outline of needed steps |
77 |
|
|
|
78 |
|
|
A number of steps are required to create a new skill. |
79 |
|
|
|
80 |
|
|
1) Edit a new skills archetype. See below for appropriate parameters. If |
81 |
|
|
you desire the skill to be a skill tool, edit a "face" for the new skill. |
82 |
|
|
If you want to have the skill to be learned via a skill scroll, edit a |
83 |
|
|
skillscroll for the skill. Place the new archetype(s) in the |
84 |
|
|
lib/arch/skills directory. Remember to name your new skill appropriately |
85 |
|
|
(ie skill_<new skill name>). Make sure you select a unique subtype |
86 |
|
|
for your new skill. |
87 |
|
|
|
88 |
|
|
2) Edit skill_util.c. Add an entry for the skill in do_skill() (so that it may |
89 |
|
|
be used as a "long-range attack"). If the new skill is a hth attack take a |
90 |
|
|
look at the attack_hth_skills[] table in do_skill_attack() -- where does |
91 |
|
|
the hth attack rank? The most useful attacks should occur earlier in the |
92 |
|
|
table. |
93 |
|
|
|
94 |
|
|
3) Create the skill code. If you created a hth attack, you probably can get |
95 |
|
|
away with just using attack_hth. For other skills, put the skill code in |
96 |
|
|
skills.c. If your new skill is to be an "associated" skill, then make sure |
97 |
|
|
that it returns the value of calc_skill_exp(). |
98 |
|
|
|
99 |
|
|
4) Edit treasures/artifacts file as needed (esp. if your skill will become one |
100 |
|
|
of the starting skills, or will show up in shops.) |
101 |
|
|
|
102 |
|
|
|
103 |
|
|
|
104 |
|
|
3. Detail of skill archetype values. |
105 |
|
|
------------------------------------ |
106 |
|
|
|
107 |
|
|
This section details the various object/archetype values. |
108 |
|
|
|
109 |
|
|
First, we detail skill objects: |
110 |
|
|
type: SKILL (43) |
111 |
|
|
subtype: subtype of skill |
112 |
|
|
invisible: 1 |
113 |
|
|
no_drop: 1 |
114 |
|
|
|
115 |
|
|
name: Name of the skill, used by things like 'use_skill', as well as output |
116 |
|
|
of 'skills' command. |
117 |
|
|
|
118 |
|
|
skill: Same as name - this simplifies code, so that we can look at |
119 |
|
|
op->skill for both skills and skill tools. It also means that if a skill |
120 |
|
|
named is passed, we can verify we have the matching entry. |
121 |
|
|
|
122 |
|
|
stats (Str, Dex, sp, grace, etc): These modify the abilities of the player, |
123 |
|
|
in a sense giving bonuses. |
124 |
|
|
|
125 |
|
|
expmul: this is the ratio of experience the players total should increase by |
126 |
|
|
when this skill is use. If this is zero, then experience only goes to |
127 |
|
|
to the skill. Values higher than 1 are allowed. Note that experience |
128 |
|
|
rewarded to the players total is in addition to that given to the |
129 |
|
|
skill. Eg, if player should get 500 exp for using a skill, and |
130 |
|
|
expmul is 1, the player will get 500 added to that skill as well as |
131 |
|
|
500 to their total. |
132 |
|
|
|
133 |
|
|
exp: The exp the player has in the skill (object). If this is an archetype, |
134 |
|
|
this contains the base amount the player gets for using the skill. |
135 |
|
|
exp will be set to 0 when the skill is given to the player. |
136 |
|
|
|
137 |
|
|
level: Object: The level of this skill - this is just determined from the exp |
138 |
|
|
above based on the experience table. Archetype: This is a percentage value |
139 |
|
|
that determines how the level difference effects experience rewards (like |
140 |
|
|
the old lexp value). Basically, if it is set to 100, the ratio is normal |
141 |
|
|
(eg, if opponent is twice level of player, player would get twice as much |
142 |
|
|
normal exp). If level is 200, player would get 4 times. If level if 50, |
143 |
|
|
player would half normal. If level is 0, then we don't adjust exp reward |
144 |
|
|
based on level. |
145 |
|
|
|
146 |
|
|
can_use_skill (flag): If this is set, the player knows the skill natively |
147 |
|
|
(eg, does not need a skill tool, see below). If this is not set, |
148 |
|
|
then this skill object is acting as a container for experience. |
149 |
|
|
For example, if a player is using a holy symbol in order to get his |
150 |
|
|
praying skill, we still need to have skill_praying in the players |
151 |
|
|
inventory to store the experience in. However, the player can't |
152 |
|
|
use that praying skill without a holy symbole until they learn it from a |
153 |
|
|
skill scroll. |
154 |
|
|
|
155 |
|
|
|
156 |
|
|
4. Skill Tools |
157 |
|
|
----------------- |
158 |
|
|
|
159 |
|
|
Skill tools are items that let a player use a skill they do not otherwise |
160 |
|
|
know. Skill tools may also have advantages, eg, spellpaths they grant to the |
161 |
|
|
caster, stat bonuses, etc. |
162 |
|
|
|
163 |
|
|
Most of the values for the skill tools are just like normal equipment |
164 |
|
|
(value, weight, face, body_..., ) fields. |
165 |
|
|
|
166 |
|
|
type: skill_tool (74) |
167 |
|
|
skill: Name of the skill this object allows the user of. |
168 |
|
|
|
169 |
|
|
Note - the old skill code used 'sp' to denote the skill to use. |
170 |
|
|
|
171 |
|
|
5. Skill Scrolls |
172 |
|
|
---------------- |
173 |
|
|
type: SKILLSCROLL |
174 |
|
|
skill: Name of the skill to be learned |
175 |
|
|
Rest of the values are per normal equipment (weight, value, identified, |
176 |
|
|
etc). |
177 |
|
|
|
178 |
|
|
|
179 |
|
|
6. Other Objects |
180 |
|
|
---------------- |
181 |
|
|
|
182 |
|
|
Many other objects will use the 'skill' field in their object to denote |
183 |
|
|
what skill is needed to use this object. Thus, for examples, readable |
184 |
|
|
objects have 'skill literacy' to denote that the literacy skill is |
185 |
|
|
needed to read them. Weapons have 'skill' values to denote what |
186 |
|
|
skill is needed to use the weapon. Same for spells. |
187 |
|
|
|
188 |
|
|
|
189 |
|
|
------------------------------- |
190 |
|
|
7. Workings of the Skill System |
191 |
|
|
------------------------------- |
192 |
|
|
|
193 |
|
|
This section attempts to briefly explain how this all works. |
194 |
|
|
|
195 |
|
|
Due to the addition of the skill pointer, it is no longer required |
196 |
|
|
that a skill be in the ready_skill position to gain experience. |
197 |
|
|
|
198 |
|
|
Whenever a player tries to use skill either directly (ready_skill ..) |
199 |
|
|
or indirectly (cast a spell which requires knowledge of the skill), the |
200 |
|
|
code will examine the players inventory to see if they an in fact |
201 |
|
|
use the skill. This first checks to see if the player has the appropriate |
202 |
|
|
skill archetype in their object. If they do, and can_use_skill is set |
203 |
|
|
to 1, nothing more is done. If that is not the case, we then look for |
204 |
|
|
a skill tool. If none is found, we tell the player the can't use the |
205 |
|
|
skill. If one is found, we try to apply the skill tool - if this can not |
206 |
|
|
be done, we also error out. |
207 |
|
|
|
208 |
|
|
Only if the player explicitly activates a skill with ready_skill do |
209 |
|
|
we change the players range pointer. Otherwise, it will remain as is |
210 |
|
|
(but not that casting a spell might also change the range pointer). |
211 |
|
|
|
212 |
|
|
add_exp has been modified to take two additional parameters - |
213 |
|
|
skill_name and flag. |
214 |
|
|
|
215 |
|
|
skill_name is the skill to add the experience to. By passing this |
216 |
|
|
to add exp, a lot of the code no longer needs to change chosen_skill, |
217 |
|
|
then reset it back again. |
218 |
|
|
|
219 |
|
|
|
220 |
|
|
flag determines what to do if the player does not currently have the |
221 |
|
|
skill pointer in their inventory. This can arise if the player |
222 |
|
|
is using a skill tool, or part of a party. |
223 |
|
|
|
224 |
|
|
In the default case of flag being 0, if the player does not currently |
225 |
|
|
have the skill in their inventory, this is added (with can_use_skill 0). |
226 |
|
|
If flag is 1, we add the exp to the players total exp, but don't |
227 |
|
|
give them any in the skill. If it is 2, the player gets nothing. |
228 |
|
|
|
229 |
|
|
This fixes many of the abuses of party combat - if a member of your |
230 |
|
|
party is killing things with wizardry, you'll get wizardry exp. If |
231 |
|
|
you don't have wizardry, you'll get some general exp, but you can't |
232 |
|
|
funnel it into things like alchemy anymore. |
233 |
|
|
|
234 |
|
|
The effect of flag 1 to add exp is so that that a player can't have |
235 |
|
|
thousands of exp in a skill and never have used in themselves - for a player |
236 |
|
|
to have any exp in a skill, he will have had to use it at least once. Note |
237 |
|
|
however that a player could have used the skill just once (to say kill a |
238 |
|
|
kobold) and yet get a bunch more exp from party members that are actually good |
239 |
|
|
wizards. |
240 |
|
|
|
241 |
|
|
The handling of add_exp with skill_name is pretty simple. In most cases, we |
242 |
|
|
know immediately the skill that was used (eg, melee combat, search, disarm, |
243 |
|
|
etc). In cases of indirect death (spells), we set the skill in the spell |
244 |
|
|
object to the skill that it should get awarded to. |
245 |
|
|
|
246 |
|
|
------------------------ |
247 |
|
|
8. Changes & Limitations |
248 |
|
|
------------------------ |
249 |
|
|
|
250 |
|
|
The old skill system had the idea of stats that effect the skill. There |
251 |
|
|
is no good way to do that within the new system - instead, the code |
252 |
|
|
the executes the skill will do this. This really isn't much worse |
253 |
|
|
than the old system anyways - the old code still did things like |
254 |
|
|
'stat average * 3' or otherwise determine how important the stats are. |
255 |
|
|
|
256 |
|
|
In addition, this allows for more flexibility for multi faceted |
257 |
|
|
skills. For example, the identification portion of some skills should |
258 |
|
|
probably use int, but the creation portion should perhaps be dex and strength. |
259 |
|
|
|
260 |
|
|
There is no more SK_level function - while this could still be useful |
261 |
|
|
to replace code like |
262 |
|
|
|
263 |
|
|
level= op->chosen_skill?op->chosen_skill->level:op->level; |
264 |
|
|
|
265 |
|
|
the use of automatically de-referencing the op->chosen_skill is not |
266 |
|
|
suggested - the new skill system is much more lenient on passing the |
267 |
|
|
appropriate skill object to functions that need it, so calls to |
268 |
|
|
SK_level in most cases may not really be the right approach - in many |
269 |
|
|
cases, the chosen_skill may not be what the code is really expecting. |
270 |
|
|
|