ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/doc/experience
Revision: 1.2
Committed: Thu Sep 7 21:42:42 2006 UTC (17 years, 8 months ago) by pippijn
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -0 lines
State: FILE REMOVED
Log Message:
Moved documents to doc/historic

File Contents

# User Rev Content
1 root 1.1
2    
3     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
4     A New EXPERIENCE/SKILLS system for CF
5     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
6    
7     This patch represents a "developer's" version of the exp/skills
8     system. While I have now achieved all of the objectives
9     in sections "B" and "C" of the coding proposal (see README.PROPOSAL)
10     and have play-tested as much of the code as possible, I am sure some
11     big bugs must remain. (One for sure is that exp gained when using
12     rod/horn/wand is wrong.)
13    
14     Below this section I outline 1) coding philosophy, 2) gross
15     description of how the code impinges/interacts within older
16     code. 3) designer's notes on the changes to the code.
17    
18     Comments on any area of this coding would be appreciated. Personally,
19     I would like to see the Pow stat and a 2-type system of magic
20     come into being. After all of you check out the code, I would
21     like to discuss enhancements/bug fixes/implementation. For instance,
22     is it too hard to figure out how to use the code!
23    
24     Sometime tomorrow exp2.tar.gz will be available in pub/thomas on
25     ftp.astro.psu.edu.
26    
27     b.t.
28    
29    
30     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
31     CODE PHILOSOPHY -
32     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
33    
34     To move CF over to a new skills-based experience system. In
35     this implementation several kinds of experience will exist. Players
36     will gain experience in each kind of experience (or category)
37     based on their actions in the game. The sum of all the various
38     categories of experience equals the player "score", from which
39     dam, wc, and hp are determined.
40    
41     All experience gaining actions will be through the use of
42     certain skills -- so called "associated skills". Associated skills
43     are each related to 1 kind of experience. Thus, for example,
44     "stealing" is a skill associated with "agility" experience.
45     There exists also "miscellaneous" skills which allow the use
46     of a unique skill, but which are not related to any kind of
47     experience and whose use does not generate experience points.
48    
49     In this implementation, skills and objects are both treated
50     as objects in the inventory of the user. Experience "objects"
51     each represent one kind of experience and are always invisible.
52     Skills objects each represent one kind of skill available in the
53     game. Skills objects may either be invisible or have an associated
54     bitmap (in which case they are "tools").
55    
56     All experience gaining actions will be through the use of
57     certain skills -- called "associated skills". Associated skills
58     are each related to 1 kind of experience. Thus, for example,
59     "stealing" is a skill associated with "agility" experience.
60    
61     Both Players and NPC's may only use skills which are in their
62     inventories. NPC's do not use experience objects.
63    
64     A breakdown of the properties of skills and exp objects objects is
65     as follows:
66    
67     Object Property NPC use?
68     ------ ----------------------------------- -------
69     Experience Each represents a different kind of NO
70     experience in the game. The object
71     in the player inventory keeps track
72     of player experience in that category.
73     Always is invisible.
74    
75     Skill- Represents a skill the player may YES
76     associated perform. May be either invisible or
77     visible as a "tool". Successful use
78     of this skill generates experience.
79     Experience is allocated to appropriate
80     experience object.
81    
82     Skill- Same as above, *but* this skill is not YES
83     miscell. related to any experience category, and
84     use of this skill generates *no*
85     experience.
86    
87    
88     Linking of associated skills to experience categories is done
89     during initialization of the code (in init()) based on the
90     shared stats of both.
91    
92     How skills and experience categories are named and linked may be
93     changed by editing the skills/experience object archetypes.
94    
95    
96     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
97     CODE STRUCTURE and IMPLEMENTATION -
98     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
99    
100     The most important thing is that I moved most of the code into
101     the server/skills.c and server/skill_util.c files. The skills code
102     is loosely implemented along the lines of the spell code. This is
103     to say that:
104    
105     1. skills use (do_skill) is called from fire().
106     2. there is a skills[] table similar to spells[].
107     3. server files skills.c and skill_util.c parallel
108     spell_effect.c and spell_util.c in respective
109     functionallity.
110    
111     Particular notes about the implementation are outlined below.
112    
113     Defines
114     -------
115    
116     #define MAX_EXP_CAT maximum number of exp categories. Must
117     be >= number in the game. Always include
118     the "NULL" exp object - EXP_NONE.
119     #define EXP_NONE (MAX_EXP_CAT - 1)
120     #define NROFSKILLS Equal to the number of elements in the
121     skills[] array. See skillist.h for more
122     info.
123     #define MAX_EXP_IN_OBJ (MAX_EXPERIENCE/MAX_EXP_CAT) the maximum
124     experience that an experience object
125     may have. See fuller description in
126     common/living.c
127    
128     Dump switch
129     -----------
130     How the experience and skills archetypes are configured in
131     any CF session can be seen by using the "-m5" flag. You must have
132     DUMP_SWITCHES defined.
133    
134    
135     Global parameters
136     -----------------
137     Unfortunately, I had to make use of several global parameters.
138     These are:
139     exp_cat[] - the default experience objects
140     nrofexpcat - number of exp categories in the
141     current session.
142    
143     New Flags used by the code
144     --------------------------
145    
146     FLAG_IS_WOODED -- needed by the woodsman skill. Should be set
147     on all "wooded" terrain (eg woods2, swamp, etc.)
148    
149     FLAG_IS_HILLY -- needed by the mountaineer skill. Should be
150     set on all "mountainous" terrain.
151    
152     FLAG_READY_WEAPON -- Code needs this for both players and monsters,
153     and its use differs for each.
154    
155     FLAG_READY_SKILL -- Code needs this for both players and monsters,
156     and its use differs for each.
157    
158     New structures
159     --------------
160     A couple of changes to the object structure where made:
161     (following excerpt taken from structs.h)
162    
163     /* These are used by the skills code */
164     struct obj *chosen_skill; /* the skill chosen to use */
165     struct obj *exp_obj; /* the exp. obj (category) assoc. w/ this object */
166     uint32 hide; /* The object is hidden, not invisible */
167    
168     And the 'skill' structure used by the skills[] table is:
169    
170     typedef struct skill_struct {
171     char *name; /* how to describe it to the player */
172     short category; /* the experience category to which this skill belongs */
173     long time; /* How many ticks it takes to use the skill */
174     long bexp; /* base exp gain for this skill */
175     float lexp; /* level multiplier of exp gain for using this skill */
176     short stat1; /* primary stat effecting use of this skill */
177     short stat2; /* secondary stat for this skill */
178     short stat3; /* tertiary stat for this skill */
179     } skill;
180    
181     Interaction of the skills patch with older code
182     -----------------------------------------------
183     Interaction of the skills "patch" with older code is minimized.
184     below is an outline of how skills/exp code impinges on older CF
185     code (did I miss anything here??)):
186    
187     -- in apply() and apply_special() changes were made to allow
188     the use of skill "tools" and to better handle the readying of
189     combat weapons (swords, bows, etc).
190    
191     -- in hit_player() changes made to allow skills control attacking.
192    
193     -- cosmetic changes (as in c_object.c to make pick_up() routine
194     monster friendly) Changes in c_wiz.c, input.c fall into this
195     category.
196    
197     -- new commands are inserted into the code 'skills' and
198     'use_skills'.
199    
200     -- In init() init_new_exp_system() is called. Linking of
201     exp objects/skills is done here.
202    
203     -- add_exp() was rewritten to accommodate changes needed.
204     new add_exp() is called from all same locations as before,
205     plus it is called by do_skill(). See calc_skill_exp() in
206     skills_util.c for details of how experience is calculated
207     in skill use.
208    
209     -- fix_player() changed to allow skills to affect player/monster
210     status.
211    
212     -- skill_attack() is called by hit_player().
213    
214     -- do_skill() is called from fire(). This is the core routine for
215     the use of skills. Only other way to use skills is by player
216     undertaking an action requiring a skill (a "key" skill). These
217     are currently:
218     (unimplemented skills in parenthesis)
219    
220     action skill(s) auto-readied Notes
221     ------ --------------------- ----------------------
222     combat - hand_weapons, Occurs when player:
223     missile_weapons. 1. readies a weapon
224     2. runs into opponent
225     *and* has ready weapon
226    
227     wand/rod/horn- use magic item Occurs when player zaps
228     approprite item.
229    
230     magic use - spellcasting, Occurs when player
231     (praying) attempts to cast a
232     spell of appropriate nature
233    
234     rod/horn/wand - (magic item use) Occurs when player
235     use uses wand/rod/horn.
236    
237     In all of these cases, skills are used merely as "keys" needed
238     by the player in order to perform an action. For example, if
239     a player doesn't have "spellcasting", they are unable to cast
240     spells.
241    
242    
243     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
244     DESIGNER'S NOTES - more nitty gritty
245     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
246    
247    
248     I have just taken the objectives from the crossfire proposal I
249     made earlier. Each is discussed one-by-one:
250    
251     > Part B - Multiple experience categories
252     > --------
253     > B1 - Multiple categories in which a player may gain experience.
254    
255     Experience objects owned by the player are not directly
256     viewed. The "skills" command does give some information.
257    
258     > B3 - Each experience category will have an associated stat(s)-
259    
260     There must exist an experience category with Str and Int
261     set. Otherwise, no wc, or sp will be gained after 1st
262     level. Multiple Str, Int experience objects could exist,
263     but will only accelerate player wc, sp gains.
264    
265     > B4 - Wc, hp and dam will become related to the appropriate
266    
267     Right now hp are related to the player "score" which
268     is the total of all player experience.
269    
270     > Part C - Skills
271     > --------
272    
273     > C1 - Two kinds of skills will be available: "associated" skills
274    
275     Implemented. Seems to work well.
276    
277     > C2 - Skills will be objects in the character inventory. These
278    
279     Implemented. Seems to work well.
280    
281     > C3 - experience will be now only be gained through the use of
282     > skills associated to one of the categories of experience.
283    
284     Implemented. Seems to work well.
285    
286     > C4 - Both NPC and players will be able to use skills.
287    
288     Implemented. Seems to work well.
289    
290     > C5 - Players will be able to learn skills by reading scrolls of
291    
292     Fixed a minor bug in this.
293    
294    
295     General background note on why experience objects change stats from
296     Brian Thomas, Aug 20, 1997:
297    
298     Nope. Stats are used by experience objects to 'tag' the
299     category of experience, ie
300    
301     "physique" exp objects have Str 1
302     "wisdom" exp object have Wis 1
303    
304     There shouldnt be an increase in the stat in question.
305    
306     [ now for a bit of explaination, longish...]
307    
308     This setup seems a bit arcane I know..so why this way?
309     Why not hardcode the experience archetypes, eg have type
310     EXP_FIGHTING, EXP_MAGIC, and so on?
311    
312     Well... at the time I did this, there was some debate about
313     what experience system was the best, as some ppl wanted to
314     have only 4 instead of 6 categories, and so on .. (*sigh*).
315    
316     In the attempt to make the experience system as flexible as
317     possible, I coded the experience 'categories' to be defined
318     by the archetypes and using various stats to differentiate
319     them. Properities of the experience categories are set by the
320     stat(s) they have defined. To my knowledge the stats have
321     the following properties:
322    
323     str --> gains experience, from fighting
324     con --> controls hp progression somewhat (if a define
325     in living.c is set).
326     dex --> gains exp from agility skills
327     wis --> gains exp from priest skills, effects grace
328     calculation
329     int --> gain exp from mental skills
330     cha --> gain exp from personality skills
331     pow --> gain exp from wizard skills, effects mana calc.
332    
333     So, If you didnt like the current 6 experience catagories and
334     wanted only 3 for your server, say "fighting" "presense" and
335     "holyness" you could remove all of the old experience archetypes
336     and define the following new ones:
337    
338     Name Properties Explaination
339     fighting Str 1, Con 1, Dex 1 Combines old physique, agility exp
340     presence Pow 1, Cha 1 Combines old magic, personality exp
341     holyness Wis 1 same as old wisdom exp
342    
343     So, every player on this server would only see 3 types of
344     experience to be gained. If you fight or steal something, then
345     experience points go to the "fighting" category.
346    
347     And note, since we DIDNT design an arch with Int 1, there will be
348     NO experience gained for use of mental skills (at least in theory
349     this should be the case. I dont recogmend leaving out a stat,
350     eg you should have a every stat covered between all of your new
351     experience archetypes).
352    
353     Even though I wrote a doc to help explain how to do this, probably
354     nobody but me (or maybe Peter) really is knowledgeable enough (and
355     has the desire) to reconfigure the game experience to suit their
356     individual tastes. This might be some code we could 'simplify'
357     (heh, remove it).
358    
359