ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/pod/objects.pod
Revision: 1.4
Committed: Mon Dec 18 16:53:04 2006 UTC (17 years, 5 months ago) by elmex
Branch: MAIN
Changes since 1.3: +216 -23 lines
Log Message:
Added a mostly comprehensive documentation about the types TRANSPORT, ROD, TREASURE, POTION, and POTION_EFFECT.

File Contents

# User Rev Content
1 elmex 1.1 =head1 CROSSFIRE+ OBJECT AND INTERNALS DOCUMENTATION
2    
3     Here is all information about the object types Crossfire+
4     supports at the moment. This is not a complete documentation (yet)
5     and browsing the source is still recommended to learn about
6     the objects that aren't documented here.
7    
8     This documentation is in a sketchy state. It's mostly
9     used to collect notes about the internal behaviour of the
10     objects.
11    
12     =head2 About archetypes and objects
13    
14     Field denotes an attribute of an archetype.
15     This is an example of an archetype:
16    
17     Object button_trigger
18     name button
19     type 30
20     face button_sma.111
21     anim
22     button_sma.111
23     button_sma.112
24     mina
25     is_animated 0
26     exp 30
27     no_pick 1
28     walk_on 1
29     walk_off 1
30     editable 48
31     visibility 50
32     weight 1
33     end
34    
35     This archetype has the name 'button_trigger' and the objects that
36     inherit from this archetype have the name 'button'.
37    
38     The next field 'type' decides the main behaviour of this archetype.
39     For a comprehensive list of types see include/define.h. For this case
40     you might find a line like:
41    
42     #define TRIGGER_BUTTON        30
43    
44     The server internally works with objects that 'inherit' attributes from
45     an archetype. They have a similar set of attributes.
46    
47     The following documentation will also document the meaning of code internal
48     attributes of objects. These attributes are marked as '(internal)' and can't
49     or shouldn't be set by an archetype. If the internal names differs the
50     external name (for the archetypes) for the attribute is written behind it.
51    
52     =head2 Description of generic archetype and object attributes
53    
54 elmex 1.2 These are the fields that most of the objects have and/or their
55     default behaviour.
56    
57     =over 4
58    
59     =item name <string>
60    
61     The name of the object.
62    
63     =item name_pl <string>
64    
65     The name of a collection of these objects (the plural of the name).
66    
67     =item face <facename>
68    
69     The graphical appearance of this object.
70    
71     =item invisible <number>
72    
73     If the <number> is greater than 0 the object is invisible.
74     For players this field reflects the duration of the invisibility
75     and is decreased every tick by 1.
76    
77     For non-player objects this field is not changed by server ticks.
78    
79 elmex 1.4 =item speed <number>
80 elmex 1.2
81     If this field is greater than MIN_ACTIVE_SPEED (~0.0001) the object is placed
82     on the active object list and will be processed each tick (see also speed_left!).
83    
84     If the speed field drops below the MIN_ACTIVE_SPEED the object is removed
85     from the active object list and it won't experience any processing per tick.
86    
87     =item speed_left <number>
88    
89     If this field is greater than 0 and the object is on the
90     active list (mostly means it's speed is also greater than 0):
91    
92     - speed_left is decreased by 1
93     - and this object is processed and experiences a server tick.
94    
95     If the object is on the active list and speed_left is lower or
96     equal to 0 the absolute value of the speed field is added to speed_left
97     on the end of the tick.
98    
99     =item no_drop (0|1)
100    
101 elmex 1.4 Sets the flag FLAG_NO_DROP.
102     See Flags section below.
103 elmex 1.2
104     =item applied (0|1)
105    
106 elmex 1.4 Sets the flag FLAG_APPLIED.
107     See Flags section below.
108 elmex 1.2
109     =item is_used_up (0|1)
110    
111 elmex 1.4 Sets the flag FLAG_IS_USED_UP.
112     See Flags section below.
113    
114     =item auto_apply (0|1)
115    
116     Sets the flag FLAG_AUTO_APPLY.
117     See Flags section below.
118 elmex 1.2
119     =item editable (more than deprecated)
120    
121     This field had a special meaning for crossedit, which used parts
122     of the server code for editing. Wherever you see this attribute being
123     set in an archetype ignore it and/or remove it. No code interprets this
124     field anymore.
125    
126     =back
127    
128     =head3 Flags
129    
130     Here are the effects of the flags described.
131    
132 elmex 1.1 =over 4
133    
134 elmex 1.2 =item FLAG_NO_DROP
135    
136     An object can't be picked up and dropped.
137    
138     =item FLAG_APPLIED
139    
140     This flag mostly states whether this object has been 'applied' by the player.
141     For objects that are applied by the code or have this flag set in the archetype
142     it mostly means 'this object is active'.
143    
144     For example the player adjustments of the hp/sp/grace fields and inheritance
145     of flags from objects in his inventory is toggled by this flag.
146    
147     =item FLAG_IS_USED_UP
148    
149     This flag controls whether an object is 'used up'. If it is set the 'food' field
150     of the object is decreased by 1 each tick, and if it is lower or equal 0 after tha
151     it is removed.
152    
153     If also the flag FLAG_APPLIED is set, the 'duration' field controls whether
154     this object is removed or not, see the Force type below for the meaning
155     of the duration field in this context.
156    
157 elmex 1.3 If FLAG_APPLIED is not set the object is destroyed.
158    
159 elmex 1.4 =item FLAG_IS_A_TEMPLATE (internal use)
160    
161     This flag is set on the inventory of generators like CREATORs and CONVERTERs,
162     or other objects that have the flags FLAG_GENERATOR and FLAG_CONTENT_ON_GEN set.
163    
164     =item FLAG_AUTO_APPLY
165    
166     This flag has currently only meaning for the TREASURE type, see below.
167    
168 elmex 1.1 =back
169    
170     =head2 Description of type specific attributes
171    
172     The beginning of the headers of the following subsection
173     are the server internal names for the objects types, see include/define.h.
174    
175 elmex 1.4 =head3 TRANSPORT - type 2 - Player transports
176    
177     This type is implemented by the transport extension and has currently no special
178     attributes that affect it.
179    
180     =head3 ROD - type 3 - Rods that fire spells
181    
182     Rods contain spells and can be fired by a player.
183    
184     =over 4
185    
186     =item level <number>
187    
188     This attribute is used for calculating the spell level that can be fired
189     with this rod, it's also the maximum level of the spell that can be fired.
190     The level of the spell that is being fired depends mostly on
191     the 'use magic item' skill level of the player and 1/10 of the level of the
192     rod is added as bonus.
193    
194     =item hp <number>
195    
196     The amount of spellpoints this rod has left.
197    
198     =item maxhp <number>
199    
200     The maximum amount of spellpoints this rod has.
201    
202     =item skill <skill name>
203    
204     This field determines which skill you need to apply this object.
205    
206     =back
207    
208     =head3 TREASURE - type 4 - Treasures
209    
210     This type of objects are for random treasure generation in maps.
211     If this object is applied by a player it will replace itself with it's
212     inventory. If it is automatically applied
213     generate a treasure and replace itself with the generated treasure.
214    
215     Chests are also of this type, their treasures are generated by
216     the auto apply code on map instantiation.
217    
218     =over 4
219    
220     =item hp <number>
221    
222     The number of treasures to generate.
223    
224     =item exp <level>
225    
226     If FLAG_AUTO_APPLY is not set the exp field has no further meaning
227     and the difficulty for the treasurecode only depends on the maps difficulty,
228     otherwise the exp field has the following meaning:
229    
230     If this field is not 0 it is passed as the difficulty
231     to the treasure generation code to determine how good, how much
232     worth a treasure is or what bonuses it is given by the treasure code.
233    
234     If this field is not set or 0 the difficulty of the map is passed to the treasure
235     generation code.
236    
237     =item randomitems <treasurelist>
238    
239     The treasurelist to use to generate the treasure which is put in the
240     treasure objects inventory.
241    
242     =back
243    
244     =head3 POTION - type 5 - Potions for drinking and other nastynesses
245    
246     These objects contain a spell and will emit it on apply, which most
247     of the time has the meaning of 'drinking'.
248    
249     If no resistancy field, stat field or attacktype is set and no spell
250     is put in the potion by the sp field or the randomitems the
251     potion will become an artifact and the artifact code decides which kind
252     of potion will be generated.
253    
254     If the potion has FLAG_CURSED or FLAG_DAMNED set the usage of this potion
255     will yield an explosion and hurt the player.
256    
257     =over 4
258    
259     =item Str, Dex, Con, Int, Wis, Cha, Pow <number>
260    
261     These stat fields determine how many stat points the player gets
262     when he applies this potion.
263    
264     If FLAG_CURSED or FLAG_DAMNED is set the player will loose that many stat points.
265    
266     =item sp <number>
267    
268     If this field is set and the randomitems field is not set
269     the field is interpreted as spell number, please look the right
270     number up in common/loader.C.
271    
272     If this field is set the randomitems field will be unset by the
273     map loading code.
274    
275     =item attacktype <attacktype>
276    
277     This field has some special meaning in potions, currently the
278     bits for AT_DEPLETE and AT_GODPOWER control whethere this is a
279     restoration potion or improvement potion.
280     See include/attackinc.h for the bits of these types.
281    
282     If AT_DEPLETE is set the player will be restored and the ARCH_DEPLETION
283     will be removed from him. If the potion has FLAG_CURSED or FLAG_DAMNED
284     set the player will be drained a random stat by inserting an ARCH_DEPLETION
285     into him.
286    
287     If AT_GODPOWER is enabled the player will gain +1 maxvalue in his hp, sp or grace stat.
288     When the potion has FLAG_CURSED or FLAG_DAMNED set he will loose one in one of these stats.
289    
290     =item resist_<resistancy> <number>
291    
292     If this stat is set and no spell is in the potion the potion
293     will create a force that give the player this specific resistancy.
294     The forces type will be changed to POTION_EFFECT (see POTION_EFFECT type below)
295     and the potion will last 10 times longer than the default force archetype
296     FORCE_NAME (at the moment of this writing spell/force.arc).
297    
298     =item randomitems <treasurelist>
299    
300     The inventory/spell of the potion will be created by calling the treasure code
301     with the treasurelist specified here. (I guess it's highly undefined what
302     happens if there is not a spell in the potions inventory).
303    
304     =item on_use_yield <archetype>
305 elmex 1.3
306 elmex 1.4 When this object is applied this object will be created.
307     This field is also used by FOOD and POISON.
308 elmex 1.3
309 elmex 1.4 =item subtypes <potion subtype>
310 elmex 1.3
311 elmex 1.4 see include/spells.h for possible potion subtypes, there are currently 4:
312 elmex 1.3
313     =over 4
314    
315 elmex 1.4 =item POT_SPELL
316    
317     Unused, default behaiour of a potion.
318    
319     =item POT_DUST
320    
321     This potion can be thrown to cast the spell that it has in it's inventory,
322     the behaviour is not defined if there is not a spell in the inventory and the
323     server will log an error.
324    
325     =item POT_FIGURINE
326    
327     Unused, default behaiour of a potion.
328 elmex 1.3
329 elmex 1.4 =item POT_BALM
330 elmex 1.3
331 elmex 1.4 Unused, default behaiour of a potion.
332 elmex 1.3
333 elmex 1.4 =back
334 elmex 1.3
335     =back
336    
337 elmex 1.1 =head3 WEAPON - type 15 - Weapons
338    
339     This type is for general hack and slash weapons like swords, maces
340     and daggers and and ....
341    
342     =over 4
343    
344     =item weapontype <type id>
345    
346     decides what attackmessages are generated, see include/define.h
347    
348     =item attacktype <bitmask>
349    
350     bitfield which decides the attacktype of the damage, see include/attackinc.h
351    
352 elmex 1.2 =item dam <number>
353 elmex 1.1
354     amount of damage being done with the attacktype
355    
356     =item item_power <level>
357    
358     the itempower of this weapon.
359    
360     =item name
361    
362     the name of the weapon.
363    
364     =item level (internal)
365    
366     The improvement state of the weapon.
367     If this field is greater than 0 the 'name' field starts with the
368     characters name who improved this weapon.
369    
370     =item last_eat (internal)
371    
372     seems to be the amount of improvements of a weapon,
373     the formular for equipping a weapon seems to be (server/apply.C:check_weapon_power):
374    
375     ((who->level / 5) + 5) >= op->last_eat
376    
377     =item last_sp
378    
379     the weapon speed (see magic description)
380    
381 elmex 1.2 =item food <number>
382 elmex 1.1
383     addition to food regeneration of the player
384    
385 elmex 1.2 =item hp <number>
386 elmex 1.1
387     addition to health regeneration
388    
389 elmex 1.2 =item sp <number>
390 elmex 1.1
391     addition to mana regeneration
392    
393 elmex 1.2 =item grace <number>
394 elmex 1.1
395     addititon to grace regeneration
396    
397 elmex 1.2 =item gen_sp_armour <number>
398 elmex 1.1
399 elmex 1.2 the players gen_sp_armour field (which is per default 10) is added the <number> amount.
400 elmex 1.1 gen_sp_armour seems to be a factor with which gen_sp in do_some_living()
401 elmex 1.2 is multiplied: gen_sp *= 10/<number>
402 elmex 1.1 meaning: values > 10 of gen_sp_armour limits the amout of regenerated
403     spellpoints.
404    
405     generally this field on weapons is in ranges of 1-30 and decides the slowdown of the
406     sp regeneration.
407    
408     =item body_<body slot/part>
409    
410     the part of the body you need to use this weapon, possible values should be
411     looked up in common/item.C at body_locations.
412    
413 elmex 1.2 =item resist_<resistnacy> <number>
414 elmex 1.1
415     this is the factor with which the difference of the players resistancy and 100%
416     is multiplied, something like this:
417    
418 elmex 1.2 additional_resistancy = (100 - current_resistanct) * (<number>/100)
419 elmex 1.1
420 elmex 1.2 if <number> is negative it is added to the total vulnerabilities,
421 elmex 1.1 and later the total resistance is decided by:
422    
423     'total resistance = total protections - total vulnerabilities'
424    
425     see also common/living.C:fix_player
426    
427     =item patch_(attuned|repelled|denied)
428    
429     this field modifies the pathes the player is attuned to, see include/spells.h PATH_*
430     for the pathes.
431    
432 elmex 1.2 =item luck <number>
433 elmex 1.1
434     this luck is added to the players luck
435    
436     =item move_type
437    
438     if the weapon has a move_type set the player inherits it's move_type
439    
440 elmex 1.2 =item exp <number>
441 elmex 1.1
442 elmex 1.2 the added_speed and bonus_speed of the player is raised by <number>/3.
443     if <number> < 0 then the added_speed is decreased by <number>
444 elmex 1.1
445     =item weight
446    
447     the weight of the weapon
448    
449     =item magic
450    
451     the magic field affects the amounts of the following fields:
452    
453     - wc : the players wc is adjusted by: player->wc -= (wc + magic)
454    
455     - ac : the players ac is lowered by (ac + magic) if (player->ac + magic) > 0
456    
457     - dam: the players dam is adjusted by: player->dam += (dam + magic)
458    
459     - weapon speed (last_sp): weapon_speed is calculated by: (last_sp * 2 - magic) / 2
460     (minium is 0)
461    
462 elmex 1.2 =item ac <number>
463 elmex 1.1
464     the amount of ac points the player's ac is decreased
465    
466 elmex 1.2 =item wc <number>
467 elmex 1.1
468 elmex 1.4 the amount of wc points the player's wc is decreased
469 elmex 1.1
470     =back
471    
472     =head4 Player inherits following flags from weapons:
473    
474 elmex 1.4 FLAG_LIFESAVE
475     FLAG_REFL_SPELL
476     FLAG_REFL_MISSILE
477     FLAG_STEALTH
478     FLAG_XRAYS
479     FLAG_BLIND
480     FLAG_SEE_IN_DARK
481     FLAG_UNDEAD
482    
483     =head3 FORCE - type 114 - Forces
484    
485     Forces are a very 'thin' type. They don't have much behaviour other than
486     disappearing after a time and/or affecting the player if they are in his inventory.
487    
488     Forces only take effect on the player if they have set FLAG_APPLIED.
489    
490     Whether the duration field is processed or not a tick is controlled via the
491     speed and speed_left field. Look above at the generic description of these
492     fields.
493    
494     =over 4
495    
496     =item duration
497    
498     While this field is greater than 0 the force/object is not destroyed.
499     It is decreased each tick by 1.
500    
501     If it reaches 0 the force/object is destroyed.
502    
503     This field can have this meaning for B<any> object if that object has
504     FLAG_IS_USED_UP and FLAG_APPLIED set. See the description of FLAG_IS_USED_UP
505     what happens then.
506    
507     =back
508    
509     =head3 POTION_EFFECT - type 115 - Potion effects (resistancies)
510    
511     This object is generated by the POTION code when the potion is a
512     resistance giving potion. It has mainly the same behaviour as a FORCE.
513    
514     The specialty of the potion effect is that the resistancy it gives is absolute,
515     so if you drin a resistancy potion of fire+60 you will get 60% resistancy to fire.
516    
517     Multiple potion effects only give you the maximum of their resistancy.