ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/pod/objects.pod
Revision: 1.5
Committed: Tue Dec 19 13:41:45 2006 UTC (17 years, 5 months ago) by elmex
Branch: MAIN
Changes since 1.4: +80 -6 lines
Log Message:
Added a parameter to move_apply that indicates whether something
moved on or off and changed check_inv to take the same additional argument.
An inventory checker is now mostly state-independend and a bad state
is corrected now if the inventory checker is activated.

While fixing that i've documented the HOLE type and FLAG_ACTIVATE_ON_(PUSH|RELEASE)
in objects.pod.

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 elmex 1.5 =item activate_on_push (0|1) (default: 1)
120    
121     Sets the flag FLAG_ACTIVATE_ON_PUSH.
122     See Flags section below.
123    
124     =item activate_on_release (0|1) (default: 1)
125    
126     Sets the flag FLAG_ACTIVATE_ON_RELEASE.
127     See Flags section below.
128    
129 elmex 1.2 =item editable (more than deprecated)
130    
131     This field had a special meaning for crossedit, which used parts
132     of the server code for editing. Wherever you see this attribute being
133     set in an archetype ignore it and/or remove it. No code interprets this
134     field anymore.
135    
136     =back
137    
138     =head3 Flags
139    
140     Here are the effects of the flags described.
141    
142 elmex 1.1 =over 4
143    
144 elmex 1.2 =item FLAG_NO_DROP
145    
146     An object can't be picked up and dropped.
147    
148     =item FLAG_APPLIED
149    
150     This flag mostly states whether this object has been 'applied' by the player.
151     For objects that are applied by the code or have this flag set in the archetype
152     it mostly means 'this object is active'.
153    
154     For example the player adjustments of the hp/sp/grace fields and inheritance
155     of flags from objects in his inventory is toggled by this flag.
156    
157     =item FLAG_IS_USED_UP
158    
159     This flag controls whether an object is 'used up'. If it is set the 'food' field
160     of the object is decreased by 1 each tick, and if it is lower or equal 0 after tha
161     it is removed.
162    
163     If also the flag FLAG_APPLIED is set, the 'duration' field controls whether
164     this object is removed or not, see the Force type below for the meaning
165     of the duration field in this context.
166    
167 elmex 1.3 If FLAG_APPLIED is not set the object is destroyed.
168    
169 elmex 1.4 =item FLAG_IS_A_TEMPLATE (internal use)
170    
171     This flag is set on the inventory of generators like CREATORs and CONVERTERs,
172     or other objects that have the flags FLAG_GENERATOR and FLAG_CONTENT_ON_GEN set.
173    
174     =item FLAG_AUTO_APPLY
175    
176     This flag has currently only meaning for the TREASURE type, see below.
177    
178 elmex 1.5 =item FLAG_ACTIVATE_ON_PUSH
179    
180     This flag has only meaning for objects that can be linked together
181     with the 'connected' field and controls wether the object should
182     be activated when the connection is 'pushed' or it is 'released'.
183    
184     This flag is by default on.
185    
186     =item FLAG_ACTIVATE_ON_RELEASE
187    
188     This flag has only meaning for objects that can be linked together
189     with the 'connected' field and controls wether the object should
190     be activated when the connection is 'pushed' or it is 'released'.
191    
192     This flag is by default on.
193    
194 elmex 1.1 =back
195    
196     =head2 Description of type specific attributes
197    
198     The beginning of the headers of the following subsection
199     are the server internal names for the objects types, see include/define.h.
200    
201 elmex 1.4 =head3 TRANSPORT - type 2 - Player transports
202    
203     This type is implemented by the transport extension and has currently no special
204     attributes that affect it.
205    
206     =head3 ROD - type 3 - Rods that fire spells
207    
208     Rods contain spells and can be fired by a player.
209    
210     =over 4
211    
212     =item level <number>
213    
214     This attribute is used for calculating the spell level that can be fired
215     with this rod, it's also the maximum level of the spell that can be fired.
216     The level of the spell that is being fired depends mostly on
217     the 'use magic item' skill level of the player and 1/10 of the level of the
218     rod is added as bonus.
219    
220     =item hp <number>
221    
222     The amount of spellpoints this rod has left.
223    
224     =item maxhp <number>
225    
226     The maximum amount of spellpoints this rod has.
227    
228     =item skill <skill name>
229    
230     This field determines which skill you need to apply this object.
231    
232     =back
233    
234     =head3 TREASURE - type 4 - Treasures
235    
236     This type of objects are for random treasure generation in maps.
237     If this object is applied by a player it will replace itself with it's
238     inventory. If it is automatically applied
239     generate a treasure and replace itself with the generated treasure.
240    
241     Chests are also of this type, their treasures are generated by
242     the auto apply code on map instantiation.
243    
244     =over 4
245    
246     =item hp <number>
247    
248     The number of treasures to generate.
249    
250     =item exp <level>
251    
252     If FLAG_AUTO_APPLY is not set the exp field has no further meaning
253     and the difficulty for the treasurecode only depends on the maps difficulty,
254     otherwise the exp field has the following meaning:
255    
256     If this field is not 0 it is passed as the difficulty
257     to the treasure generation code to determine how good, how much
258     worth a treasure is or what bonuses it is given by the treasure code.
259    
260     If this field is not set or 0 the difficulty of the map is passed to the treasure
261     generation code.
262    
263     =item randomitems <treasurelist>
264    
265     The treasurelist to use to generate the treasure which is put in the
266     treasure objects inventory.
267    
268     =back
269    
270     =head3 POTION - type 5 - Potions for drinking and other nastynesses
271    
272     These objects contain a spell and will emit it on apply, which most
273     of the time has the meaning of 'drinking'.
274    
275     If no resistancy field, stat field or attacktype is set and no spell
276     is put in the potion by the sp field or the randomitems the
277     potion will become an artifact and the artifact code decides which kind
278     of potion will be generated.
279    
280     If the potion has FLAG_CURSED or FLAG_DAMNED set the usage of this potion
281     will yield an explosion and hurt the player.
282    
283     =over 4
284    
285     =item Str, Dex, Con, Int, Wis, Cha, Pow <number>
286    
287     These stat fields determine how many stat points the player gets
288     when he applies this potion.
289    
290     If FLAG_CURSED or FLAG_DAMNED is set the player will loose that many stat points.
291    
292     =item sp <number>
293    
294     If this field is set and the randomitems field is not set
295     the field is interpreted as spell number, please look the right
296     number up in common/loader.C.
297    
298     If this field is set the randomitems field will be unset by the
299     map loading code.
300    
301     =item attacktype <attacktype>
302    
303     This field has some special meaning in potions, currently the
304     bits for AT_DEPLETE and AT_GODPOWER control whethere this is a
305     restoration potion or improvement potion.
306     See include/attackinc.h for the bits of these types.
307    
308     If AT_DEPLETE is set the player will be restored and the ARCH_DEPLETION
309     will be removed from him. If the potion has FLAG_CURSED or FLAG_DAMNED
310     set the player will be drained a random stat by inserting an ARCH_DEPLETION
311     into him.
312    
313     If AT_GODPOWER is enabled the player will gain +1 maxvalue in his hp, sp or grace stat.
314     When the potion has FLAG_CURSED or FLAG_DAMNED set he will loose one in one of these stats.
315    
316     =item resist_<resistancy> <number>
317    
318     If this stat is set and no spell is in the potion the potion
319     will create a force that give the player this specific resistancy.
320     The forces type will be changed to POTION_EFFECT (see POTION_EFFECT type below)
321     and the potion will last 10 times longer than the default force archetype
322     FORCE_NAME (at the moment of this writing spell/force.arc).
323    
324     =item randomitems <treasurelist>
325    
326     The inventory/spell of the potion will be created by calling the treasure code
327     with the treasurelist specified here. (I guess it's highly undefined what
328     happens if there is not a spell in the potions inventory).
329    
330     =item on_use_yield <archetype>
331 elmex 1.3
332 elmex 1.4 When this object is applied this object will be created.
333     This field is also used by FOOD and POISON.
334 elmex 1.3
335 elmex 1.4 =item subtypes <potion subtype>
336 elmex 1.3
337 elmex 1.4 see include/spells.h for possible potion subtypes, there are currently 4:
338 elmex 1.3
339     =over 4
340    
341 elmex 1.4 =item POT_SPELL
342    
343     Unused, default behaiour of a potion.
344    
345     =item POT_DUST
346    
347     This potion can be thrown to cast the spell that it has in it's inventory,
348     the behaviour is not defined if there is not a spell in the inventory and the
349     server will log an error.
350    
351     =item POT_FIGURINE
352    
353     Unused, default behaiour of a potion.
354 elmex 1.3
355 elmex 1.4 =item POT_BALM
356 elmex 1.3
357 elmex 1.4 Unused, default behaiour of a potion.
358 elmex 1.3
359 elmex 1.4 =back
360 elmex 1.3
361     =back
362    
363 elmex 1.1 =head3 WEAPON - type 15 - Weapons
364    
365     This type is for general hack and slash weapons like swords, maces
366     and daggers and and ....
367    
368     =over 4
369    
370     =item weapontype <type id>
371    
372     decides what attackmessages are generated, see include/define.h
373    
374     =item attacktype <bitmask>
375    
376     bitfield which decides the attacktype of the damage, see include/attackinc.h
377    
378 elmex 1.2 =item dam <number>
379 elmex 1.1
380     amount of damage being done with the attacktype
381    
382     =item item_power <level>
383    
384     the itempower of this weapon.
385    
386     =item name
387    
388     the name of the weapon.
389    
390     =item level (internal)
391    
392     The improvement state of the weapon.
393     If this field is greater than 0 the 'name' field starts with the
394     characters name who improved this weapon.
395    
396     =item last_eat (internal)
397    
398     seems to be the amount of improvements of a weapon,
399     the formular for equipping a weapon seems to be (server/apply.C:check_weapon_power):
400    
401     ((who->level / 5) + 5) >= op->last_eat
402    
403     =item last_sp
404    
405     the weapon speed (see magic description)
406    
407 elmex 1.2 =item food <number>
408 elmex 1.1
409     addition to food regeneration of the player
410    
411 elmex 1.2 =item hp <number>
412 elmex 1.1
413     addition to health regeneration
414    
415 elmex 1.2 =item sp <number>
416 elmex 1.1
417     addition to mana regeneration
418    
419 elmex 1.2 =item grace <number>
420 elmex 1.1
421     addititon to grace regeneration
422    
423 elmex 1.2 =item gen_sp_armour <number>
424 elmex 1.1
425 elmex 1.2 the players gen_sp_armour field (which is per default 10) is added the <number> amount.
426 elmex 1.1 gen_sp_armour seems to be a factor with which gen_sp in do_some_living()
427 elmex 1.2 is multiplied: gen_sp *= 10/<number>
428 elmex 1.1 meaning: values > 10 of gen_sp_armour limits the amout of regenerated
429     spellpoints.
430    
431     generally this field on weapons is in ranges of 1-30 and decides the slowdown of the
432     sp regeneration.
433    
434     =item body_<body slot/part>
435    
436     the part of the body you need to use this weapon, possible values should be
437     looked up in common/item.C at body_locations.
438    
439 elmex 1.2 =item resist_<resistnacy> <number>
440 elmex 1.1
441     this is the factor with which the difference of the players resistancy and 100%
442     is multiplied, something like this:
443    
444 elmex 1.2 additional_resistancy = (100 - current_resistanct) * (<number>/100)
445 elmex 1.1
446 elmex 1.2 if <number> is negative it is added to the total vulnerabilities,
447 elmex 1.1 and later the total resistance is decided by:
448    
449     'total resistance = total protections - total vulnerabilities'
450    
451     see also common/living.C:fix_player
452    
453     =item patch_(attuned|repelled|denied)
454    
455     this field modifies the pathes the player is attuned to, see include/spells.h PATH_*
456     for the pathes.
457    
458 elmex 1.2 =item luck <number>
459 elmex 1.1
460     this luck is added to the players luck
461    
462     =item move_type
463    
464     if the weapon has a move_type set the player inherits it's move_type
465    
466 elmex 1.2 =item exp <number>
467 elmex 1.1
468 elmex 1.2 the added_speed and bonus_speed of the player is raised by <number>/3.
469     if <number> < 0 then the added_speed is decreased by <number>
470 elmex 1.1
471     =item weight
472    
473     the weight of the weapon
474    
475     =item magic
476    
477     the magic field affects the amounts of the following fields:
478    
479     - wc : the players wc is adjusted by: player->wc -= (wc + magic)
480    
481     - ac : the players ac is lowered by (ac + magic) if (player->ac + magic) > 0
482    
483     - dam: the players dam is adjusted by: player->dam += (dam + magic)
484    
485     - weapon speed (last_sp): weapon_speed is calculated by: (last_sp * 2 - magic) / 2
486     (minium is 0)
487    
488 elmex 1.2 =item ac <number>
489 elmex 1.1
490     the amount of ac points the player's ac is decreased
491    
492 elmex 1.2 =item wc <number>
493 elmex 1.1
494 elmex 1.4 the amount of wc points the player's wc is decreased
495 elmex 1.1
496     =back
497    
498     =head4 Player inherits following flags from weapons:
499    
500 elmex 1.4 FLAG_LIFESAVE
501     FLAG_REFL_SPELL
502     FLAG_REFL_MISSILE
503     FLAG_STEALTH
504     FLAG_XRAYS
505     FLAG_BLIND
506     FLAG_SEE_IN_DARK
507     FLAG_UNDEAD
508    
509 elmex 1.5 =head3 HOLE - type 94 - Holes
510    
511     Holes are holes in the ground where objects can fall through. When the hole
512     opens and/or is completly open all objects above it fall through (more
513     precisely: if their head is above the hole).
514    
515     Trapdoors can only transfer the one who falls through to other coordinates
516     on the B<same> map.
517    
518     =over 4
519    
520     =item maxsp (0|1)
521    
522     This field negates the state of the connection: When maxsp is 1 the pit will
523     open/close when the connection is deactivated. Otherwise it will open/close
524     when the connection is activated. This field only has effect when the
525     connection is triggered. So if you put a closed hole on a map, and the
526     connection is deactivated, and maxsp is 1 the hole will remain closed until the
527     connection was triggered once.
528    
529     =item connected <connection id>
530    
531     This is the connection id, which lets the hole opening or closing when
532     activated. The flags FLAG_ACTIVATE_ON_PUSH and FLAG_ACTIVATE_ON_RELEASE control
533     at which connection state the object is activated.
534    
535     For example: if FLAG_ACTIVATE_ON_RELEASE is set to 0 the hole won't react when
536     the connection is released.
537    
538     =item wc <number> (internal)
539    
540     This is an internal flag. If it is greater than 0 it means that the hole is not
541     yet fully open. More preciesly: this field is the animation-step and if it is
542     set to the 'closed' step of the animation the hole is closed and if it is on
543     the 'open' animation step (wc = 0), the hole is open.
544    
545     =item sp <number>
546    
547     The destination y coordinates on the same map.
548    
549     =item hp <number>
550    
551     The destination x coordinates on the same map.
552    
553     =back
554    
555 elmex 1.4 =head3 FORCE - type 114 - Forces
556    
557     Forces are a very 'thin' type. They don't have much behaviour other than
558 elmex 1.5 disappearing after a time and/or affecting the player if they are in his
559     inventory.
560 elmex 1.4
561     Forces only take effect on the player if they have set FLAG_APPLIED.
562    
563     Whether the duration field is processed or not a tick is controlled via the
564     speed and speed_left field. Look above at the generic description of these
565     fields.
566    
567     =over 4
568    
569     =item duration
570    
571 elmex 1.5 While this field is greater than 0 the force/object is not destroyed. It is
572     decreased each tick by 1.
573 elmex 1.4
574     If it reaches 0 the force/object is destroyed.
575    
576     This field can have this meaning for B<any> object if that object has
577     FLAG_IS_USED_UP and FLAG_APPLIED set. See the description of FLAG_IS_USED_UP
578     what happens then.
579    
580     =back
581    
582     =head3 POTION_EFFECT - type 115 - Potion effects (resistancies)
583    
584 elmex 1.5 This object is generated by the POTION code when the potion is a resistance
585     giving potion. It has mainly the same behaviour as a FORCE.
586 elmex 1.4
587     The specialty of the potion effect is that the resistancy it gives is absolute,
588 elmex 1.5 so if you drin a resistancy potion of fire+60 you will get 60% resistancy to
589     fire.
590 elmex 1.4
591     Multiple potion effects only give you the maximum of their resistancy.