ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/pod/objects.pod
Revision: 1.8
Committed: Tue Dec 19 22:21:15 2006 UTC (17 years, 5 months ago) by elmex
Branch: MAIN
Changes since 1.7: +80 -1 lines
Log Message:
further documentation, this time: POISON and POISONING and FLAG_NO_STEAL

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 elmex 1.7 This means: the lower the speed field is (but still above MIN_ACTIVE_SPEED)
100     the more seldom the object is processed. And the higher the speed field is
101     the more often the object is processed.
102    
103 elmex 1.2 =item no_drop (0|1)
104    
105 elmex 1.4 Sets the flag FLAG_NO_DROP.
106     See Flags section below.
107 elmex 1.2
108     =item applied (0|1)
109    
110 elmex 1.4 Sets the flag FLAG_APPLIED.
111     See Flags section below.
112 elmex 1.2
113     =item is_used_up (0|1)
114    
115 elmex 1.4 Sets the flag FLAG_IS_USED_UP.
116     See Flags section below.
117    
118     =item auto_apply (0|1)
119    
120     Sets the flag FLAG_AUTO_APPLY.
121     See Flags section below.
122 elmex 1.2
123 elmex 1.8 =item no_steal (0|1)
124    
125     Sets the flag FLAG_NO_STEAL.
126     See Flags section below.
127    
128 elmex 1.5 =item activate_on_push (0|1) (default: 1)
129    
130     Sets the flag FLAG_ACTIVATE_ON_PUSH.
131     See Flags section below.
132    
133     =item activate_on_release (0|1) (default: 1)
134    
135     Sets the flag FLAG_ACTIVATE_ON_RELEASE.
136     See Flags section below.
137    
138 elmex 1.2 =item editable (more than deprecated)
139    
140     This field had a special meaning for crossedit, which used parts
141     of the server code for editing. Wherever you see this attribute being
142     set in an archetype ignore it and/or remove it. No code interprets this
143     field anymore.
144    
145     =back
146    
147     =head3 Flags
148    
149     Here are the effects of the flags described.
150    
151 elmex 1.1 =over 4
152    
153 elmex 1.2 =item FLAG_NO_DROP
154    
155     An object can't be picked up and dropped.
156    
157     =item FLAG_APPLIED
158    
159     This flag mostly states whether this object has been 'applied' by the player.
160     For objects that are applied by the code or have this flag set in the archetype
161     it mostly means 'this object is active'.
162    
163     For example the player adjustments of the hp/sp/grace fields and inheritance
164     of flags from objects in his inventory is toggled by this flag.
165    
166     =item FLAG_IS_USED_UP
167    
168     This flag controls whether an object is 'used up'. If it is set the 'food' field
169     of the object is decreased by 1 each tick, and if it is lower or equal 0 after tha
170     it is removed.
171    
172     If also the flag FLAG_APPLIED is set, the 'duration' field controls whether
173     this object is removed or not, see the Force type below for the meaning
174     of the duration field in this context.
175    
176 elmex 1.3 If FLAG_APPLIED is not set the object is destroyed.
177    
178 elmex 1.4 =item FLAG_IS_A_TEMPLATE (internal use)
179    
180     This flag is set on the inventory of generators like CREATORs and CONVERTERs,
181     or other objects that have the flags FLAG_GENERATOR and FLAG_CONTENT_ON_GEN set.
182    
183     =item FLAG_AUTO_APPLY
184    
185     This flag has currently only meaning for the TREASURE type, see below.
186    
187 elmex 1.5 =item FLAG_ACTIVATE_ON_PUSH
188    
189     This flag has only meaning for objects that can be linked together
190     with the 'connected' field and controls wether the object should
191     be activated when the connection is 'pushed' or it is 'released'.
192    
193     This flag is by default on.
194    
195     =item FLAG_ACTIVATE_ON_RELEASE
196    
197     This flag has only meaning for objects that can be linked together
198     with the 'connected' field and controls wether the object should
199     be activated when the connection is 'pushed' or it is 'released'.
200    
201     This flag is by default on.
202    
203 elmex 1.8 =item FLAG_NO_STEAL
204    
205     When this flag is set this object can't be stolen. The flag will be
206     resetted once the object is placed on a map.
207    
208     When this flag is set on a monster it can defent attempts of stealing
209     (but in this context the flag is only used internally).
210    
211 elmex 1.1 =back
212    
213     =head2 Description of type specific attributes
214    
215     The beginning of the headers of the following subsection
216     are the server internal names for the objects types, see include/define.h.
217    
218 elmex 1.4 =head3 TRANSPORT - type 2 - Player transports
219    
220     This type is implemented by the transport extension and has currently no special
221     attributes that affect it.
222    
223     =head3 ROD - type 3 - Rods that fire spells
224    
225     Rods contain spells and can be fired by a player.
226    
227     =over 4
228    
229     =item level <number>
230    
231     This attribute is used for calculating the spell level that can be fired
232     with this rod, it's also the maximum level of the spell that can be fired.
233     The level of the spell that is being fired depends mostly on
234     the 'use magic item' skill level of the player and 1/10 of the level of the
235     rod is added as bonus.
236    
237     =item hp <number>
238    
239     The amount of spellpoints this rod has left.
240    
241     =item maxhp <number>
242    
243     The maximum amount of spellpoints this rod has.
244    
245     =item skill <skill name>
246    
247     This field determines which skill you need to apply this object.
248    
249     =back
250    
251     =head3 TREASURE - type 4 - Treasures
252    
253     This type of objects are for random treasure generation in maps.
254     If this object is applied by a player it will replace itself with it's
255     inventory. If it is automatically applied
256     generate a treasure and replace itself with the generated treasure.
257    
258     Chests are also of this type, their treasures are generated by
259     the auto apply code on map instantiation.
260    
261     =over 4
262    
263     =item hp <number>
264    
265     The number of treasures to generate.
266    
267     =item exp <level>
268    
269     If FLAG_AUTO_APPLY is not set the exp field has no further meaning
270     and the difficulty for the treasurecode only depends on the maps difficulty,
271     otherwise the exp field has the following meaning:
272    
273     If this field is not 0 it is passed as the difficulty
274     to the treasure generation code to determine how good, how much
275     worth a treasure is or what bonuses it is given by the treasure code.
276    
277     If this field is not set or 0 the difficulty of the map is passed to the treasure
278     generation code.
279    
280     =item randomitems <treasurelist>
281    
282     The treasurelist to use to generate the treasure which is put in the
283     treasure objects inventory.
284    
285     =back
286    
287     =head3 POTION - type 5 - Potions for drinking and other nastynesses
288    
289     These objects contain a spell and will emit it on apply, which most
290     of the time has the meaning of 'drinking'.
291    
292     If no resistancy field, stat field or attacktype is set and no spell
293     is put in the potion by the sp field or the randomitems the
294     potion will become an artifact and the artifact code decides which kind
295     of potion will be generated.
296    
297     If the potion has FLAG_CURSED or FLAG_DAMNED set the usage of this potion
298     will yield an explosion and hurt the player.
299    
300     =over 4
301    
302     =item Str, Dex, Con, Int, Wis, Cha, Pow <number>
303    
304     These stat fields determine how many stat points the player gets
305     when he applies this potion.
306    
307     If FLAG_CURSED or FLAG_DAMNED is set the player will loose that many stat points.
308    
309     =item sp <number>
310    
311     If this field is set and the randomitems field is not set
312     the field is interpreted as spell number, please look the right
313     number up in common/loader.C.
314    
315     If this field is set the randomitems field will be unset by the
316     map loading code.
317    
318     =item attacktype <attacktype>
319    
320     This field has some special meaning in potions, currently the
321     bits for AT_DEPLETE and AT_GODPOWER control whethere this is a
322     restoration potion or improvement potion.
323     See include/attackinc.h for the bits of these types.
324    
325     If AT_DEPLETE is set the player will be restored and the ARCH_DEPLETION
326     will be removed from him. If the potion has FLAG_CURSED or FLAG_DAMNED
327     set the player will be drained a random stat by inserting an ARCH_DEPLETION
328     into him.
329    
330     If AT_GODPOWER is enabled the player will gain +1 maxvalue in his hp, sp or grace stat.
331     When the potion has FLAG_CURSED or FLAG_DAMNED set he will loose one in one of these stats.
332    
333     =item resist_<resistancy> <number>
334    
335     If this stat is set and no spell is in the potion the potion
336     will create a force that give the player this specific resistancy.
337     The forces type will be changed to POTION_EFFECT (see POTION_EFFECT type below)
338     and the potion will last 10 times longer than the default force archetype
339     FORCE_NAME (at the moment of this writing spell/force.arc).
340    
341     =item randomitems <treasurelist>
342    
343     The inventory/spell of the potion will be created by calling the treasure code
344     with the treasurelist specified here. (I guess it's highly undefined what
345     happens if there is not a spell in the potions inventory).
346    
347     =item on_use_yield <archetype>
348 elmex 1.3
349 elmex 1.7 When this object is applied an instance of <archetype> will be created.
350 elmex 1.3
351 elmex 1.4 =item subtypes <potion subtype>
352 elmex 1.3
353 elmex 1.4 see include/spells.h for possible potion subtypes, there are currently 4:
354 elmex 1.3
355     =over 4
356    
357 elmex 1.4 =item POT_SPELL
358    
359     Unused, default behaiour of a potion.
360    
361     =item POT_DUST
362    
363     This potion can be thrown to cast the spell that it has in it's inventory,
364     the behaviour is not defined if there is not a spell in the inventory and the
365     server will log an error.
366    
367     =item POT_FIGURINE
368    
369     Unused, default behaiour of a potion.
370 elmex 1.3
371 elmex 1.4 =item POT_BALM
372 elmex 1.3
373 elmex 1.4 Unused, default behaiour of a potion.
374 elmex 1.3
375 elmex 1.4 =back
376 elmex 1.3
377     =back
378    
379 elmex 1.7 =head3 FOOD - type 6 - Eatable stuff
380    
381     This is for objects that are representing general eatables like
382     beef or bread.
383    
384     The main difference between FOOD, FLESH and DRINK is that they
385     give different messages.
386    
387     The specialty of FLESH is that it inherits the resistancies of the
388     monsters it was generated in and will let dragons raise their resistancies
389 elmex 1.8 with that. If the monster has the POISON attacktype the FLESH
390     will change into POISON.
391 elmex 1.7
392     If a player runs low on food he will grab for FOOD, DRINK and POISON
393     and if he doesn't find any of that he will start eating FLESH.
394    
395     =over 4
396    
397     =item title <string>
398    
399     If the food has a title or is cursed it is considered 'special', which means that the
400     fields Str, Dex, Con, Int, Wis, Pow, resist_<resistancy>, hp and sp
401     are interpreted and have further effects on the player.
402    
403     The higher the food field is the longer the improvement of the player lasts
404     (except for hp and sp).
405    
406     =item food <number>
407    
408     This is the amount of food points the player gets when he eats this.
409    
410     =item on_use_yield <archetype>
411    
412     When this object is applied an instance of <archetype> will be created.
413    
414     =back
415    
416 elmex 1.8 =head3 POISON - type 7 - Poisonous stuff
417    
418     This type is for objects that can poison the player when drinking.
419     When applied it will hit the attacked with AT_POISON and will create
420     a POISONING object in the one who was hit.
421    
422     =over 4
423    
424     =item level <number>
425    
426     This field affects the propability of poisoning. The higher the level difference
427     between the one who is hit and the poision the mose propable it is the attacked
428     one will be poisoned.
429    
430     =item slaying <race>
431    
432     On poison this field has the usual meaning of 'slaying', when the
433     ones race matches the slaying field the damage done by the poison
434     is multiplied by 3.
435    
436     =item hp <number>
437    
438     This is the amount of damage the player will receive from applying this. The
439     attacktype AT_POISON will be used to hit the player and the damage will
440     determine the strenght, duration and depletion of stats of the poisoning. The
441     created POISONING object which is being placed in the one who was attacked will
442     get the damage from this field (which is maybe adjusted by slaying or the
443     resistancies).
444    
445     =item food <number>
446    
447     1/4 of <number> will be drained from the players food.
448    
449     =item on_use_yield <archetype>
450    
451     When this object is applied an instance of <archetype> will be created.
452    
453     =back
454    
455 elmex 1.1 =head3 WEAPON - type 15 - Weapons
456    
457     This type is for general hack and slash weapons like swords, maces
458     and daggers and and ....
459    
460     =over 4
461    
462     =item weapontype <type id>
463    
464     decides what attackmessages are generated, see include/define.h
465    
466     =item attacktype <bitmask>
467    
468     bitfield which decides the attacktype of the damage, see include/attackinc.h
469    
470 elmex 1.2 =item dam <number>
471 elmex 1.1
472     amount of damage being done with the attacktype
473    
474     =item item_power <level>
475    
476     the itempower of this weapon.
477    
478     =item name
479    
480     the name of the weapon.
481    
482     =item level (internal)
483    
484     The improvement state of the weapon.
485     If this field is greater than 0 the 'name' field starts with the
486     characters name who improved this weapon.
487    
488     =item last_eat (internal)
489    
490     seems to be the amount of improvements of a weapon,
491     the formular for equipping a weapon seems to be (server/apply.C:check_weapon_power):
492    
493     ((who->level / 5) + 5) >= op->last_eat
494    
495     =item last_sp
496    
497     the weapon speed (see magic description)
498    
499 elmex 1.2 =item food <number>
500 elmex 1.1
501     addition to food regeneration of the player
502    
503 elmex 1.2 =item hp <number>
504 elmex 1.1
505     addition to health regeneration
506    
507 elmex 1.2 =item sp <number>
508 elmex 1.1
509     addition to mana regeneration
510    
511 elmex 1.2 =item grace <number>
512 elmex 1.1
513     addititon to grace regeneration
514    
515 elmex 1.2 =item gen_sp_armour <number>
516 elmex 1.1
517 elmex 1.2 the players gen_sp_armour field (which is per default 10) is added the <number> amount.
518 elmex 1.1 gen_sp_armour seems to be a factor with which gen_sp in do_some_living()
519 elmex 1.2 is multiplied: gen_sp *= 10/<number>
520 elmex 1.1 meaning: values > 10 of gen_sp_armour limits the amout of regenerated
521     spellpoints.
522    
523     generally this field on weapons is in ranges of 1-30 and decides the slowdown of the
524     sp regeneration.
525    
526     =item body_<body slot/part>
527    
528     the part of the body you need to use this weapon, possible values should be
529     looked up in common/item.C at body_locations.
530    
531 elmex 1.2 =item resist_<resistnacy> <number>
532 elmex 1.1
533     this is the factor with which the difference of the players resistancy and 100%
534     is multiplied, something like this:
535    
536 elmex 1.2 additional_resistancy = (100 - current_resistanct) * (<number>/100)
537 elmex 1.1
538 elmex 1.2 if <number> is negative it is added to the total vulnerabilities,
539 elmex 1.1 and later the total resistance is decided by:
540    
541     'total resistance = total protections - total vulnerabilities'
542    
543     see also common/living.C:fix_player
544    
545     =item patch_(attuned|repelled|denied)
546    
547     this field modifies the pathes the player is attuned to, see include/spells.h PATH_*
548     for the pathes.
549    
550 elmex 1.2 =item luck <number>
551 elmex 1.1
552     this luck is added to the players luck
553    
554     =item move_type
555    
556     if the weapon has a move_type set the player inherits it's move_type
557    
558 elmex 1.2 =item exp <number>
559 elmex 1.1
560 elmex 1.2 the added_speed and bonus_speed of the player is raised by <number>/3.
561     if <number> < 0 then the added_speed is decreased by <number>
562 elmex 1.1
563     =item weight
564    
565     the weight of the weapon
566    
567     =item magic
568    
569     the magic field affects the amounts of the following fields:
570    
571     - wc : the players wc is adjusted by: player->wc -= (wc + magic)
572    
573     - ac : the players ac is lowered by (ac + magic) if (player->ac + magic) > 0
574    
575     - dam: the players dam is adjusted by: player->dam += (dam + magic)
576    
577     - weapon speed (last_sp): weapon_speed is calculated by: (last_sp * 2 - magic) / 2
578     (minium is 0)
579    
580 elmex 1.2 =item ac <number>
581 elmex 1.1
582     the amount of ac points the player's ac is decreased
583    
584 elmex 1.2 =item wc <number>
585 elmex 1.1
586 elmex 1.4 the amount of wc points the player's wc is decreased
587 elmex 1.1
588     =back
589    
590     =head4 Player inherits following flags from weapons:
591    
592 elmex 1.4 FLAG_LIFESAVE
593     FLAG_REFL_SPELL
594     FLAG_REFL_MISSILE
595     FLAG_STEALTH
596     FLAG_XRAYS
597     FLAG_BLIND
598     FLAG_SEE_IN_DARK
599     FLAG_UNDEAD
600    
601 elmex 1.7 =head3 DRINK - type 54 - Drinkable stuff
602    
603     See FOOD description.
604    
605 elmex 1.6 =head3 CHECK_INV - type 64 - Inventory checkers
606    
607     This object checks whether the player has a specific item in his
608     inventory when he moves above the inventory checker. If the player has
609     the item (or not, which can be controlled with a flag) a connection will be triggered.
610    
611     If you set move_block you can deny players and monsters to reach the space where
612     the inventory checker is on, see 'move_block' description below.
613    
614     The conditions specified by hp, slaying and race are concationated with OR.
615     So matching one of those conditions is enough.
616    
617     =over 4
618    
619     =item move_block <move type bitmask>
620    
621     If you set this field to block a movetype the move code will block any moves
622     onto the space with the inventory checker, IF the moving object doesn't have
623     (or has - if last_sp = 0) the item that the checker is searching for.
624    
625     =item last_sp (0|1)
626    
627     If last_sp is 1 'having' the item that is being checked for will
628     activate the connection or make the space with the checker non-blocking.
629     If last_sp is 0 'not having' the item will activate the connection
630     or make the space with the checker non-blocking.
631    
632     =item last_heal (0|1)
633    
634     If last_heal is 1 the matching item will be removed if the inventory checker
635     activates a connection and finds the item in the inventory.
636    
637     (A inventory checker that blocks a space won't remove anything from inventories)
638    
639     =item hp <number>
640    
641     If this field is not 0 the inventory checker will search for an object
642     with the type id <number>.
643    
644     =item slaying <string>
645    
646     If this field is set the inventory checker will search for an object that
647     has the same string in the slaying field (for example a key string of a key).
648    
649     =item race <string>
650    
651     If this field is set the inventory checker will search for an object which
652     has the archetype name that matches <string>.
653    
654     =item connected <connection id>
655    
656     This is the connection that will be activated.
657    
658     =back
659    
660 elmex 1.7 =head3 FLESH - type 72 - Organs and body parts
661    
662     See FOOD description.
663    
664 elmex 1.5 =head3 HOLE - type 94 - Holes
665    
666     Holes are holes in the ground where objects can fall through. When the hole
667     opens and/or is completly open all objects above it fall through (more
668     precisely: if their head is above the hole).
669    
670     Trapdoors can only transfer the one who falls through to other coordinates
671     on the B<same> map.
672    
673     =over 4
674    
675     =item maxsp (0|1)
676    
677     This field negates the state of the connection: When maxsp is 1 the pit will
678     open/close when the connection is deactivated. Otherwise it will open/close
679     when the connection is activated. This field only has effect when the
680     connection is triggered. So if you put a closed hole on a map, and the
681     connection is deactivated, and maxsp is 1 the hole will remain closed until the
682     connection was triggered once.
683    
684     =item connected <connection id>
685    
686     This is the connection id, which lets the hole opening or closing when
687     activated. The flags FLAG_ACTIVATE_ON_PUSH and FLAG_ACTIVATE_ON_RELEASE control
688     at which connection state the object is activated.
689    
690     For example: if FLAG_ACTIVATE_ON_RELEASE is set to 0 the hole won't react when
691     the connection is released.
692    
693     =item wc <number> (internal)
694    
695     This is an internal flag. If it is greater than 0 it means that the hole is not
696     yet fully open. More preciesly: this field is the animation-step and if it is
697     set to the 'closed' step of the animation the hole is closed and if it is on
698     the 'open' animation step (wc = 0), the hole is open.
699    
700     =item sp <number>
701    
702     The destination y coordinates on the same map.
703    
704     =item hp <number>
705    
706     The destination x coordinates on the same map.
707    
708     =back
709    
710 elmex 1.8 =head3 POISONING - type 105 - The poisoning of players and monsters
711    
712     This type is doing the actual damage to the ones who were attacked
713     via AT_POISON (or drank POISON).
714    
715     The duration is handled via the FLAG_IS_USED_UP mechanism (please look
716     there for details).
717    
718     =over 4
719    
720     =item dam <number>
721    
722     Each time the poisoning is processed (which is determined by the speed and speed_left
723     fields, see the general object attributes above) it hits the player with
724     <number> damage and the AT_INTERNAL attacktype (means: it will simply
725     hit the player with no strings attached).
726    
727     =item food <number>
728    
729     Just a note: The posion is removed when food == 1 and not when
730     the whole duration is up, because the POISONING code has to remove
731     the poison-effects from the player before the FLAG_IS_USED_UP mechanism
732     deletes the POISONING object.
733    
734     =back
735    
736 elmex 1.4 =head3 FORCE - type 114 - Forces
737    
738     Forces are a very 'thin' type. They don't have much behaviour other than
739 elmex 1.5 disappearing after a time and/or affecting the player if they are in his
740     inventory.
741 elmex 1.4
742     Forces only take effect on the player if they have set FLAG_APPLIED.
743    
744     Whether the duration field is processed or not a tick is controlled via the
745     speed and speed_left field. Look above at the generic description of these
746     fields.
747    
748 elmex 1.7 NOTE: Setting FLAG_IS_USED_UP on an force will also consider the 'food' field
749     like stated above in the FLAG_IS_USED_UP description. BUT: If the food field reaches
750     0 before duration and FLAG_APPLIED is set, the force will last for 'duration'.
751     If the FLAG_APPLIED is not set the force is removed when food reaches 0.
752     Generally this means: FLAG_IS_USED_UP doesn't have good semantics on forces.
753    
754 elmex 1.4 =over 4
755    
756     =item duration
757    
758 elmex 1.5 While this field is greater than 0 the force/object is not destroyed. It is
759     decreased each tick by 1.
760 elmex 1.4
761     If it reaches 0 the force/object is destroyed.
762    
763     This field can have this meaning for B<any> object if that object has
764     FLAG_IS_USED_UP and FLAG_APPLIED set. See the description of FLAG_IS_USED_UP
765     what happens then.
766    
767     =back
768    
769     =head3 POTION_EFFECT - type 115 - Potion effects (resistancies)
770    
771 elmex 1.5 This object is generated by the POTION code when the potion is a resistance
772     giving potion. It has mainly the same behaviour as a FORCE.
773 elmex 1.4
774     The specialty of the potion effect is that the resistancy it gives is absolute,
775 elmex 1.5 so if you drin a resistancy potion of fire+60 you will get 60% resistancy to
776     fire.
777 elmex 1.4
778     Multiple potion effects only give you the maximum of their resistancy.