ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/pod/objects.pod
Revision: 1.29
Committed: Thu Dec 4 03:48:19 2008 UTC (15 years, 5 months ago) by root
Branch: MAIN
CVS Tags: rel-2_72, rel-2_73, rel-2_74, rel-2_75
Changes since 1.28: +2 -1 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 =head1 DELIANTRA OBJECT AND INTERNALS DOCUMENTATION
2
3 Here is all information about the object types Deliantra
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 the notation and terms
13
14 The term 'archetype' stands for a collection of fields.
15 The term 'object' stands for an archetype instance.
16 The term 'field' is used for an object fields and archetype fields.
17
18 Field names will be displayed like this: I<fieldname>
19
20 Type names will be displayed like this: B<TYPENAME>
21
22 Flag names will be displayer like this: FLAG_NAME
23
24 =head2 About archetypes and objects
25
26 Archetypes are 'templates' of objects. If an object is derived
27 from an archetype the object fields will be set to the corresponding
28 fields in the archetype.
29
30 When a map is instanciated (loaded), the 'object' description on the
31 map are considered patches of the archetype.
32
33 This document does explain the behaviour of the objects and the meaning of
34 their fields in the server engine, which are derived from archetypes.
35
36 This is an example of an archetype:
37
38 Object button_trigger
39 name button
40 type 30
41 face button_sma.111
42 anim
43 button_sma.111
44 button_sma.112
45 mina
46 is_animated 0
47 exp 30
48 no_pick 1
49 walk_on 1
50 walk_off 1
51 editable 48
52 visibility 50
53 weight 1
54 end
55
56 The first B<field> is I<name>: 'button_trigger', which basically means that
57 instances (objects) that are created/derived from this archetype have the
58 name 'button' (which means that the field I<name> of the object will be set
59 to the same value as the archetypes field I<name>).
60
61 The next field I<type> decides the behaviour of objects derived from this archetype.
62 For a comprehensive list of types see include/define.h. For this case
63 you might find a line like:
64
65 #define TRIGGER_BUTTON        30
66
67 The behaviour of objects is further determined by B<Flags>, like FLAG_APPLIED.
68 For more information on this look in the Flags subsection in the next section
69
70 The following documentation will also document the meaning of internal used
71 fields of objects. These fields are marked as (internal) and can't
72 or shouldn't be set by an archetype.
73
74 =head2 Description of (mostly) generic object fields
75
76 These are the fields that most of the objects have and/or their
77 default behaviour.
78
79 =over 4
80
81 =item I<name> <string>
82
83 The name of the object.
84
85 =item I<name_pl> <string>
86
87 The name of a collection of these objects (the plural of the name).
88
89 =item I<face> <facename>
90
91 The graphical appearance of this object.
92
93 =item I<x> <number>
94
95 The x position of the object when it is on a map.
96
97 =item I<y> <number>
98
99 The y position of the object when it is on a map.
100
101 =item I<map> (internal)
102
103 The map the object is on.
104
105 =item I<invisible> <number>
106
107 If the <number> is greater than 0 the object is invisible.
108 For players this field reflects the duration of the invisibility
109 and is decreased every tick by 1.
110
111 For non-player objects this field is not changed by server ticks.
112
113 =item I<glow_radius> <number>
114
115 This field indicates how far an object glows. Default is a radius of 0 (no
116 glowing at all). Negative glow radii darken areas - currently, negative
117 glow radii are stronger than positive ones.
118
119 =item I<speed> <number>
120
121 If this field is greater than MIN_ACTIVE_SPEED (~0.0001) the object is placed
122 on the active object list and will be processed each tick (see also speed_left!).
123
124 If I<speed> drops below the MIN_ACTIVE_SPEED the object is removed
125 from the active object list and it won't experience any processing per tick.
126
127 =item I<speed_left> <number>
128
129 If this field is greater than 0 and the object is on the
130 active list (mostly means it's speed is also greater than 0):
131
132 - speed_left is decreased by 1
133 - and this object is processed and experiences a server tick.
134
135 If the object is on the active list and I<speed_left> is lower or
136 equal to 0 the absolute value of the I<speed> is added to I<speed_left>
137 on the end of the tick.
138
139 This means: the lower I<speed> is (but still above MIN_ACTIVE_SPEED)
140 the more seldom the object is processed. And the higher I<speed> is
141 the more often the object is processed.
142
143 =item I<connected> <number>
144
145 When this field is set the object will be linked to a connection with the
146 id <number>. What happens when the connection is 'activated' depends on the
147 type of the object.
148
149 FLAG_ACTIVATE_ON_PUSH and FLAG_ACTIVATE_ON_RELEASE they will control
150 when to activate the object, see description of these below for further details.
151
152 =item I<no_drop> (0|1)
153
154 Sets the flag FLAG_NO_DROP.
155 See Flags section below.
156
157 =item I<applied> (0|1)
158
159 Sets the flag FLAG_APPLIED.
160 See Flags section below.
161
162 =item I<is_used_up> (0|1)
163
164 Sets the flag FLAG_IS_USED_UP.
165 See Flags section below.
166
167 =item I<changing> (0|1)
168
169 Sets the flag FLAG_CHANGING.
170 See Flags section below.
171
172 =item I<auto_apply> (0|1)
173
174 Sets the flag FLAG_AUTO_APPLY.
175 See Flags section below.
176
177 =item I<no_steal> (0|1)
178
179 Sets the flag FLAG_NO_STEAL.
180 See Flags section below.
181
182 =item I<reflecting> (0|1)
183
184 Sets the flag FLAG_REFLECTING.
185 See Flags section below.
186
187 =item I<reflect_spell> (0|1)
188
189 Sets the flag FLAG_REFL_SPELL.
190 See Flags section below.
191
192 =item I<no_skill_ident> (0|1)
193
194 Sets the flag FLAG_NO_SKILL_IDENT.
195 See Flags section below.
196
197 =item I<activate_on_push> (0|1) (default: 1)
198
199 Sets the flag FLAG_ACTIVATE_ON_PUSH.
200 See Flags section below.
201
202 =item I<activate_on_release> (0|1) (default: 1)
203
204 Sets the flag FLAG_ACTIVATE_ON_RELEASE.
205 See Flags section below.
206
207 =item I<is_lightable> (0|1)
208
209 Sets the flag FLAG_IS_LIGHTABLE.
210 See Flags section below.
211
212 =item I<editable> (more than deprecated)
213
214 This field had a special meaning for crossedit, which used parts
215 of the server code for editing. Wherever you see this field being
216 set in an archetype ignore it and/or remove it. No code interprets this
217 field anymore.
218
219 =back
220
221 =head3 Flags
222
223 Here are the effects of the flags described.
224
225 =over 4
226
227 =item FLAG_NO_DROP
228
229 An object can't be picked up and dropped.
230
231 =item FLAG_APPLIED
232
233 This flag mostly states whether this object has been 'applied' by the player.
234 For objects that are applied by the code or have this flag set in the archetype
235 it mostly means 'this object is active'.
236
237 For example the player adjustments of the I<hp>/I<sp>/I<grace> fields and inheritance
238 of flags from objects in his inventory is toggled by this flag.
239
240 =item FLAG_IS_USED_UP
241
242 This flag controls whether an object is 'used up'. If it is set I<food>
243 is decreased by 1 each tick, and will be removed when I<food> is lower or equal 0.
244
245 If also the flag FLAG_APPLIED is set, the I<duration> field controls whether
246 this object is removed or not, see the B<FORCE> type below for the meaning
247 of the duration field in this context.
248
249 If FLAG_APPLIED is not set the object is destroyed.
250
251 =item FLAG_CHANGING
252
253 If the I<state> field of the object is 0 the object will be processed periodically
254 (if I<speed> is set). If the I<state> field is 1 it won't be processed.
255
256 This flag indicates that the object is changing into a different object.
257 The object has to have the I<other_arch> field set. The object the changing object
258 changes into is derived from the archetype in I<other_arch>.
259
260 When the object does not have FLAG_ALIVE set the I<food> field will be decremented
261 each time the object is processed, and if I<food> reaches 0 one new object will be generated.
262
263 When the object has FLAG_ALIVE set the I<food> field is the number of objects that
264 will be generated.
265
266 After the new object is created the I<hp> field from the old object is copied into
267 the new one.
268
269 When the old object was a B<LAMP> it's I<food> fields value less 1 will be copied
270 to the new object.
271
272 =item FLAG_IS_A_TEMPLATE (internal use)
273
274 This flag is set on the inventory of generators like B<CREATOR>s and B<CONVERTER>s,
275 or other objects that have the flags FLAG_GENERATOR and FLAG_CONTENT_ON_GEN set.
276
277 =item FLAG_AUTO_APPLY
278
279 This flag has currently only meaning for the B<TREASURE> type, see below.
280
281 =item FLAG_ACTIVATE_ON_PUSH
282
283 This flag has only meaning for objects that can be linked together
284 by the I<connected> field and controls wether the object should
285 be activated when the connection is 'pushed' or it is 'released'.
286
287 What 'pushed' and 'released' means depends on the object that
288 activates the connection.
289
290 This flag is by default on.
291
292 =item FLAG_ACTIVATE_ON_RELEASE
293
294 This flag has only meaning for objects that can be linked together
295 by the I<connected> field and controls wether the object should
296 be activated when the connection is 'pushed' or it is 'released'.
297
298 What 'pushed' and 'released' means depends on the object that
299 activates the connection.
300
301 This flag is by default on.
302
303 =item FLAG_NO_STEAL
304
305 When this flag is set this object can't be stolen. The flag will be
306 reset once the object is placed on a map.
307
308 When this flag is set on a monster it can defend attempts at stealing
309 (but in this context the flag is only used internally).
310
311 =item FLAG_NO_SKILL_IDENT
312
313 This flag is mostly used internal and prevents unidentified objects
314 (objects which don't have FLAG_IDENTIFIED set) being identified
315 multiple times by skills.
316
317 This flag is used to mark objects which were unsuccessfully identified by a
318 players skill. So that multiple tries of identifying aren't more effective than
319 one.
320
321 =item FLAG_REFLECTING
322
323 This flag is used by spell effects (eg. SP_BOLT), B<THROWN_OBJ> and B<ARROW>
324 to indicate whether this object reflects off walls.
325
326 =item FLAG_REFL_SPELL
327
328 This flag indicates whether something reflects spells, like spell reflecting
329 amuletts.
330
331 =item FLAG_IS_LIGHTABLE
332
333 This flag indicates whether a B<LIGHTER> can light this object. See also the
334 description of the B<LIGHTER> type. How easy you can light an item depends
335 partially on the material of the object.
336
337 =back
338
339 =head2 Description of type specific fields and behaviour
340
341 The beginning of the headers of the following subsection
342 are the server internal names for the objects types, see include/define.h.
343
344 =head3 B<TRANSPORT> - type 2 - Player transports
345
346 This type is implemented by the transport extension and has currently no special
347 fields that affect it.
348
349 =head3 B<ROD>, B<HORN> - type 3, 35 - Rods that fire spells
350
351 Rods contain spells and can be fired by a player.
352
353 =over 4
354
355 =item I<level> <number>
356
357 This field is used for calculating the spell level that can be fired
358 with this rod, it's also the maximum level of the spell that can be fired.
359 The level of the spell that is being fired depends mostly on
360 the 'use magic item' skill level of the player and 1/10 of the level of the
361 rod is added as bonus.
362
363 =item I<hp> <number>
364
365 The amount of spellpoints this rod has left. Recharges at a rate of C<1 +
366 maxhp/10> per tick.
367
368 =item I<maxhp> <number>
369
370 The maximum amount of spellpoints this rod has.
371
372 =item I<skill> <skill name>
373
374 This field determines which skill you need to apply this object.
375
376 =back
377
378 =head3 B<TREASURE> - type 4 - Treasures
379
380 This type of objects are for random treasure generation in maps.
381 If this object is applied by a player it will replace itself with it's
382 inventory. If it is automatically applied
383 generate a treasure and replace itself with the generated treasure.
384
385 Chests are also of this type, their treasures are generated by
386 the auto apply code on map instantiation.
387
388 =over 4
389
390 =item I<hp> <number>
391
392 The number of treasures to generate.
393
394 =item I<exp> <level>
395
396 If FLAG_AUTO_APPLY is not set the exp field has no further meaning
397 and the difficulty for the treasurecode only depends on the maps difficulty,
398 otherwise the exp field has the following meaning:
399
400 If this field is not 0 it is passed as the difficulty
401 to the treasure generation code to determine how good, how much
402 worth a treasure is or what bonuses it is given by the treasure code.
403
404 If this field is not set or 0 the difficulty of the map is passed to the treasure
405 generation code.
406
407 =item I<randomitems> <treasurelist>
408
409 The treasurelist to use to generate the treasure which is put in the
410 treasure objects inventory.
411
412 =back
413
414 =head3 B<POTION> - type 5 - Potions for drinking and other nastynesses
415
416 These objects contain a spell and will emit it on apply, which most
417 of the time has the meaning of 'drinking'.
418
419 If no resistancy field, stat field or attacktype is set and no spell
420 is put in the potion by the sp field or the randomitems the
421 potion will become an artifact and the artifact code decides which kind
422 of potion will be generated.
423
424 If the potion has FLAG_CURSED or FLAG_DAMNED set the usage of this potion
425 will yield an explosion and hurt the player.
426
427 =over 4
428
429 =item I<Str>, I<Dex>, I<Con>, I<Int>, I<Wis>, I<Cha>, I<Pow> <number>
430
431 These stat fields determine how many stat points the player gets
432 when he applies this potion.
433
434 If FLAG_CURSED or FLAG_DAMNED is set the player will loose that many stat points.
435
436 =item I<sp> <number>
437
438 If this field is set and the randomitems field is not set
439 the field is interpreted as spell number, please look the right
440 number up in common/loader.C.
441
442 If this field is set the randomitems field will be unset by the
443 map loading code.
444
445 =item I<attacktype> <attacktype>
446
447 This field has some special meaning in potions, currently the
448 bits for AT_DEPLETE and AT_GODPOWER control whethere this is a
449 restoration potion or improvement potion.
450 See include/attackinc.h for the bits of these types.
451
452 If AT_DEPLETE is set the player will be restored and the ARCH_DEPLETION
453 will be removed from him. If the potion has FLAG_CURSED or FLAG_DAMNED
454 set the player will be drained a random stat by inserting an ARCH_DEPLETION
455 into him.
456
457 If AT_GODPOWER is enabled the player will gain +1 maxvalue in his hp, sp or grace stat.
458 When the potion has FLAG_CURSED or FLAG_DAMNED set he will loose one in one of these stats.
459
460 =item I<resist_RESISTANCY> <number>
461
462 If this stat is set and no spell is in the potion the potion
463 will create a force that give the player this specific resistancy.
464 The forces type will be changed to POTION_EFFECT (see POTION_EFFECT type below)
465 and the potion will last 10 times longer than the default force archetype
466 FORCE_NAME (at the moment of this writing spell/force.arc).
467
468 =item I<randomitems> <treasurelist>
469
470 The inventory/spell of the potion will be created by calling the treasure code
471 with the treasurelist specified here. (I guess it's highly undefined what
472 happens if there is not a spell in the potions inventory).
473
474 =item I<on_use_yield> <archetype>
475
476 When this object is applied an instance of <archetype> will be created.
477
478 =item I<subtypes> <potion subtype>
479
480 see include/spells.h for possible potion subtypes, there are currently 4:
481
482 =over 4
483
484 =item POT_SPELL
485
486 Unused, default behaiour of a potion.
487
488 =item POT_DUST
489
490 This potion can be thrown to cast the spell that it has in it's inventory,
491 the behaviour is not defined if there is not a B<SPELL> in the inventory and the
492 server will log an error.
493
494 =item POT_FIGURINE
495
496 Unused, default behaiour of a potion.
497
498 =item POT_BALM
499
500 Unused, default behaiour of a potion.
501
502 =back
503
504 =back
505
506 =head3 B<FOOD> - type 6 - Eatable stuff
507
508 This is for objects that are representing general eatables like
509 beef or bread.
510
511 The main difference between B<FOOD>, B<FLESH> and B<DRINK> is that they
512 give different messages.
513
514 The specialty of B<FLESH> is that it inherits the resistancies of the
515 monsters it was generated in and will let dragons raise their resistancies
516 with that. If the monster has the B<POISON> attacktype the B<FLESH>
517 will change into B<POISON>.
518
519 If a player runs low on food he will grab for B<FOOD>, B<DRINK> and B<POISON>
520 and if he doesn't find any of that he will start eating B<FLESH>.
521
522 =over 4
523
524 =item I<title> <string>
525
526 If the food has B<title> set or is cursed it is considered 'special', which
527 means that the fields I<Str>, I<Dex>, I<Con>, I<Int>, I<Wis>, I<Pow>,
528 I<resist_RESISTANCY>, I<hp> and I<sp> are interpreted and have further effects
529 on the player.
530
531 The higher the I<food> field is the longer the improvement of the player lasts
532 (except for I<hp> and I<sp>).
533
534 =item I<food> <number>
535
536 This is the amount of food points the player gets when he eats this.
537
538 =item I<on_use_yield> <archetype>
539
540 When this object is applied an instance of <archetype> will be created.
541
542 =back
543
544 =head3 B<POISON> - type 7 - Poisonous stuff
545
546 This type is for objects that can poison the player when he drinks/applies it.
547 When applied it will hit the attacked with AT_POISON and will create
548 a B<POISONING> object in the one who was hit.
549
550 =over 4
551
552 =item I<level> <number>
553
554 This field affects the probability of poisoning. The higher the level difference
555 between the one who is hit and the poision the more probable it is the attacked
556 one will be poisoned.
557
558 =item I<slaying> <race>
559
560 This field has the usual meaning of 'slaying', when the
561 poisoned's race matches the I<slaying> field the damage done by the poison
562 is multiplied by 3.
563
564 =item I<hp> <number>
565
566 This is the amount of damage the player will receive from applying this. The
567 attacktype AT_POISON will be used to hit the player and the damage will
568 determine the strenght, duration and depletion of stats of the poisoning. The
569 created B<POISONING> object which is being placed in the one who was attacked will
570 get the damage from this field (which is maybe adjusted by slaying or the
571 resistancies).
572
573 =item I<food> <number>
574
575 1/4 of <number> will be drained from the players I<food>.
576
577 =item I<on_use_yield> <archetype>
578
579 When this object is applied an instance of <archetype> will be created.
580
581 =back
582
583 =head3 B<BOOK> - type 8 - Readable books
584
585 This type is basically for representing text books in the game.
586
587 Reading a book also identifys it (if FLAG_NO_SKILL_IDENT is not set).
588
589 =over 4
590
591 =item I<msg> <text>
592
593 This is the contents of the book. When this field is unset
594 at treasure generation a random text will be inserted.
595
596 =item I<skill> <skill name>
597
598 The skill required to read this book. (The most resonable
599 skill would be literacy).
600
601 =item I<exp> <number>
602
603 The experience points the player get for reading this book.
604
605 =item I<subtype> <readable subtype>
606
607 This field determines the type of the readable.
608 Please see common/readable.C in the readable_message_types table.
609
610 =back
611
612 =head3 B<CLOCK> - type 9 - Clocks
613
614 This type of objects just display the time when being applied.
615
616 =head3 B<LIGHTNING> - type 12 - Lightnings (DEPRECATED: see B<SPELL_EFFECT> subtype SP_BOLT)
617
618 This is a spell effect of a moving bolt. It moves straigt forward
619 through the map until something blocks it.
620 If FLAG_REFLECTING is set it even reflects on walls.
621
622 FLAG_IS_TURNABLE should be set on these objects.
623
624 =over 4
625
626 =item I<move_type> <movetype>
627
628 This field affects the move type with which the lightning moves through
629 the map and which map cells will reflect or block it.
630
631 =item I<attacktype> <attacktype>
632
633 The attacktype with which it hits the objects on the map.
634
635 =item I<dam> <number>
636
637 The damage this bolt inflicts when it hits objects on the map.
638
639 =item I<Dex> <number>
640
641 This is the fork percentage, it is reduced by 10 per fork.
642 And the I<dam> field is halved on each fork.
643
644 =item I<Con> (internal)
645
646 This value is a percentage of which the forking lightning
647 is deflected to the left. This value should be mostly used internally.
648
649 =item I<duration> <number>
650
651 The duration the bolt stays on a map cell. This field is decreased each time
652 the object is processed (see the meaning of I<speed> and I<speed_left> fields in
653 the generic object field description).
654
655 =item I<range> <number>
656
657 This is the range of the bolt, each space it advances this field is decreased.
658
659 =back
660
661 =head3 B<ARROW> - type 13 - Arrows
662
663 This is the type for objects that represent projectiles like arrows.
664 The movement of B<THROWN_OBJ>s behave similar to this type.
665
666 Flying arrows are stopped either when they hit something blocking
667 (I<move_block>) or something which is alive.
668 If it hits something that is alive, which doesn't have FLAG_REFL_MISSILE
669 set, it will inflict damage. If FLAG_REFL_MISSILE is set it will inflict
670 damage with a small chance which is affected by the I<level> field of the arrow.
671
672 If FLAG_REFLECTING is set on the arrow it will bounce off everything
673 that is not alive and blocks it's movement.
674
675 When an arrow is being shot it's I<dam>, I<wc>, I<attacktype>, I<slaying>
676 fields will be saved in the I<sp>, I<hp>, I<grace> and I<spellarg> fields of
677 the object, to restore them once the arrow has been stopped.
678
679 =over 4
680
681 =item I<dam> <number>
682
683 The amount of damage that is being done to the victim that gets hit.
684 This field is recomputed when the arrow is fired and will consist
685 of the sum of a damage bonus (see description of the B<BOW> type),
686 the arrows I<dam> field, the bows I<dam> field, the bows I<magic> field
687 and the arrows I<magic> field.
688
689 =item I<wc> <number>
690
691 The weapon class of the arrow, which has effect on the probability of hitting.
692
693 It is recomputed when the arrow is being fired by this formula:
694
695 wc = 20 - bow->magic - arrow->magic - (skill->level or shooter->level)
696 - dex_bonus - thaco_bonus - arrow->stats.wc - bow->stats.wc + wc_mod
697
698 When the arrow is not being shot by an player dex_bonus and thaco_bonus and the
699 level is not added.
700
701 wc_mod is dependend on the fire mode of the bow. For a more detailed
702 explanation of dex_bonus, thaco_bonus and wc_mod please consult the code.
703
704 =item I<magic> <number>
705
706 This field is added to the damage of the arrow when it is shot and
707 will also improve it's I<speed> by 1/5 of it's value.
708
709 =item I<attacktype> <attacktype>
710
711 Bitfield which decides the attacktype of the damage, see include/attackinc.h
712 On fireing the I<attacktype> of the bow is added to the arrows I<attacktype>.
713
714 =item I<level> <number> (interally used)
715
716 The level of the arrow, this affects the probability of piercing FLAG_REFL_MISSILE,
717 see above in the B<ARROW> description.
718
719 The I<level> is set when the arrow is fired to either the skill level or the
720 shooters level.
721
722 =item I<speed> <number> (internal)
723
724 This field shouldn't be set directly in the archetype, the arrow will get it's
725 I<speed> from the bow. This fields value has to be at least 0.5 or otherwise the
726 arrow will be stopped immediatly.
727
728 On fireing the I<speed> of the arrow is computed of 1/5 of the
729 sum of the damage bonus (see BOW), bow I<magic> and arrow I<magic>. After that 1/7
730 of the bows I<dam> field is added to the I<speed> of the arrow.
731
732 The minimum I<speed> of an arrow is 1.0.
733
734 While flying the arrows I<speed> is decreased by 0.05 each time it's moved.
735
736 If the I<speed> is above 10.0 it goes straight through the creature it hits and
737 it's I<speed> is reduced by 1. If the I<speed> is lower or equal 10.0 the arrow is
738 stopped and either sticked into the victim (see I<weight> field description) or
739 put on it's map square (if it didn't break, see description of the I<food> field).
740
741 =item I<weight> <number>
742
743 This field is the weight of the arrow, if I<weight> is below or equal 5000 (5 kg)
744 the arrow will stick in the victim it hits. Otherwise it will fall to the ground.
745
746 =item I<food> <number>
747
748 The breaking percentage. 100 (%) means: breaks on usage for sure.
749
750 =item I<inventory> (internal)
751
752 If the flying/moving object has something in it's inventory and it stops, it
753 will be replaced with it's inventory. Otherwise it will be handled as usual,
754 which means: it will be calculated whether the arrow breaks and it will be
755 reset for reuse.
756
757 =item I<slaying> <string>
758
759 When the bow that fires this arrow has it's I<slaying> field set it is copied
760 to the arrows I<slaying> field. Otherwise the arrows I<slaying> field remains.
761
762 =item I<move_type> <movetype> (internally used)
763
764 This field is set when the arrow is shot to MOVE_FLY_LOW.
765
766 =item I<move_on> <movetype> (internally used)
767
768 This field is set when the arrow is shot to MOVE_FLY_LOW and MOVE_WALK.
769
770 =item I<race> <string>
771
772 The I<race> field is a unique key that assigns arrows, bows and quivers. When
773 shooting an arrow the bows I<race> is used to search for arrows (which have the
774 same I<race> as the bow) in the players inventory and will recursively search in
775 the containers (which are applied and have the same I<race> as the bow and the arrow).
776
777 =back
778
779 =head3 B<BOW> - type 14 - Bows, those that fire B<ARROW>s
780
781 TODO, but take into account B<ARROW> description above!
782
783 =head3 B<WEAPON> - type 15 - Weapons
784
785 This type is for general hack and slash weapons like swords, maces
786 and daggers and and ....
787
788 =over 4
789
790 =item I<weapontype> <type id>
791
792 decides what attackmessages are generated, see include/define.h
793
794 =item I<attacktype> <bitmask>
795
796 bitfield which decides the attacktype of the damage, see include/attackinc.h
797
798 =item I<dam> <number>
799
800 amount of damage being done with the attacktype
801
802 =item I<item_power> <level>
803
804 the itempower of this weapon.
805
806 =item I<name>
807
808 the name of the weapon.
809
810 =item I<level> (internal)
811
812 The improvement state of the weapon.
813 If this field is greater than 0 the I<name> field starts with the
814 characters name who improved this weapon.
815
816 =item I<last_eat> (internal)
817
818 This seems to be the amount of improvements of a weapon,
819 the formular for equipping a weapon seems to be (server/apply.C:check_weapon_power):
820
821 ((who->level / 5) + 5) >= op->last_eat
822
823 =item I<last_sp>
824
825 the weapon speed (see magic description)
826
827 =item I<food> <number>
828
829 addition to food regeneration of the player
830
831 =item I<hp> <number>
832
833 addition to health regeneration
834
835 =item I<sp> <number>
836
837 addition to mana regeneration
838
839 =item I<grace> <number>
840
841 addititon to grace regeneration
842
843 =item I<gen_sp_armour> <number>
844
845 the players I<gen_sp_armour> field (which is per default 10) is being added the
846 <number> amount. gen_sp_armour seems to be a factor with which gen_sp in
847 do_some_living() is multiplied: gen_sp *= 10/<number> meaning: values > 10 of
848 I<gen_sp_armour> limits the amout of regenerated spellpoints.
849
850 Generally this field on weapons is in ranges of 1-30 and decides the slowdown of the
851 I<sp> regeneration.
852
853 =item I<body_BODYSLOT>
854
855 The part/slot of the body you need to use this weapon, possible values for
856 C<BODYSLOT> should be looked up in common/item.C at body_locations.
857
858 The value (in the range C<-7..7>) gives the number of those body slots
859 used up by the item (if negative) or the number of body slots this object
860 has (if positive, e.g. for monsters or players). The special value C<0>
861 indicates that this object cannot equip items requiring these body slots.
862
863 =item I<resist_RESISTANCY> <number>
864
865 this is the factor with which the difference of the players resistancy and 100%
866 is multiplied, something like this:
867
868 additional_resistancy = (100 - current_resistancy) * (<number>/100)
869
870 if <number> is negative it is added to the total vulnerabilities,
871 and later the total resistance is decided by:
872
873 'total resistance = total protections - total vulnerabilities'
874
875 see also common/living.C:fix_player.
876
877 =item I<path_(attuned|repelled|denied)>
878
879 this field modifies the pathes the player is attuned to, see include/spells.h PATH_*
880 for the pathes.
881
882 =item I<luck> <number>
883
884 this luck is added to the players I<luck>
885
886 =item I<move_type>
887
888 if the weapon has a I<move_type> set the player inherits it's I<move_type>
889
890 =item I<exp> <number>
891
892 the added_speed and bonus_speed of the player is raised by <number>/3.
893 if <number> < 0 then the added_speed is decreased by <number>
894
895 =item I<weight>
896
897 the weight of the weapon
898
899 =item I<magic>
900
901 the I<magic> field affects the amounts of the following fields:
902
903 - wc : the players wc is adjusted by: player->wc -= (wc + magic)
904
905 - ac : the players ac is lowered by (ac + magic) if (player->ac + magic) > 0
906
907 - dam: the players dam is adjusted by: player->dam += (dam + magic)
908
909 - weapon speed (last_sp): weapon_speed is calculated by: (last_sp * 2 - magic) / 2
910 (minium is 0)
911
912 =item I<ac> <number>
913
914 the amount of ac points the player's I<ac> is decreased when applying this object.
915
916 =item I<wc> <number>
917
918 the amount of wc points the player's I<wc> is decreased when applying this object.
919
920 =back
921
922 =head4 Player inherits following flags from weapons:
923
924 FLAG_LIFESAVE
925 FLAG_REFL_SPELL
926 FLAG_REFL_MISSILE
927 FLAG_STEALTH
928 FLAG_XRAYS
929 FLAG_BLIND
930 FLAG_SEE_IN_DARK
931 FLAG_UNDEAD
932
933 =head3 B<GRIMREAPER> - type 28 - Grimreapers
934
935 These type are mostly used for monsters, they give the
936 monster the ability to dissapear after 10 hits with AT_DRAIN.
937
938 =over 4
939
940 =item I<value> <number>
941
942 This field stores the hits the monster did yet.
943
944 =back
945
946 =head3 B<CREATOR> - type 42 - Object creators
947
948 Once a creator is activated by a connection it creates a number of objects
949 (cloned from it's inventory or a new object derived from the archetype
950 named in the other_arch slot).
951
952 If FLAG_LIVESAFE is set the number of uses is unlimited.
953
954 =over 4
955
956 =item I<hp> <number>
957
958 If FLAG_LIVE_SAVE is not set it is the absolute number of times the creator can
959 be used.
960
961 =item I<speed> <number>
962
963 If I<speed> is set the creator will create an object periodically,
964 see I<speed> and I<speed_left> fields in the general object field description
965 for more details.
966
967 =item I<slaying> <string>
968
969 If set the generated object's name and title will be set to this.
970
971 =item I<other_arch> <string>
972
973 If the inventory of the creator is empty new objects will be derived from the
974 archetype named by <string>.
975
976 =item I<connected> <number>
977
978 See generic object field description.
979
980 =back
981
982 =head3 B<DRINK> - type 54 - Drinkable stuff
983
984 See B<FOOD> description.
985
986 =head3 B<CHECK_INV> - type 64 - Inventory checkers
987
988 This object checks whether the player has a specific item in his
989 inventory when he moves above the inventory checker. If the player has
990 the item (or not, which can be controlled with a flag) a connection will be triggered.
991
992 If you set I<move_block> you can deny players and monsters to reach the space where
993 the inventory checker is on, see I<move_block> description below.
994
995 The conditions specified by I<hp>, I<slaying> and I<race> are OR concationated.
996 So matching one of those conditions is enough.
997
998 =over 4
999
1000 =item I<move_block> <move type bitmask>
1001
1002 If you set this field to block a movetype the move code will block any moves
1003 onto the space with the inventory checker, IF the moving object doesn't have
1004 (or has - if I<last_sp> = 0) the item that the checker is searching for.
1005
1006 =item I<last_sp> (0|1)
1007
1008 If I<last_sp> is 1 'having' the item that is being checked for will
1009 activate the connection or make the space with the checker non-blocking.
1010 If I<last_sp> is 0 'not having' the item will activate the connection
1011 or make the space with the checker non-blocking.
1012
1013 =item I<last_heal> (0|1)
1014
1015 If I<last_heal> is 1 the matching item will be removed if the inventory checker
1016 activates a connection and finds the item in the inventory.
1017
1018 (A inventory checker that blocks a space won't remove anything from inventories)
1019
1020 =item I<hp> <number>
1021
1022 If this field is not 0 the inventory checker will search for an object
1023 with the type id <number>.
1024
1025 =item I<slaying> <string>
1026
1027 If this field is set the inventory checker will search for an object that
1028 has the same string in the I<slaying> field (for example a key string of a key).
1029
1030 =item I<race> <string>
1031
1032 If this field is set the inventory checker will search for an object which
1033 has the archetype name that matches <string>.
1034
1035 =item I<connected> <connection id>
1036
1037 This is the connection that will be activated. The connection is
1038 'pushed' when someone enters the space with the inventory checker,
1039 and it is 'released' when he leaves it.
1040
1041 See also the description of the I<connected> field in the generic object field
1042 section.
1043
1044 =back
1045
1046 =head3 B<MOOD_FLOOR> - type 65 - change mood of monsters
1047
1048 speed == 0 for triggered mood changes, speed != 0 for non-triggered mood
1049 changes.
1050
1051 (based on value that last_sp takes):
1052 0: 'furious' Makes all monsters aggressive
1053 1: 'angry' As above but pets are unaffected
1054 2: 'calm' Makes all monsters unaggressive
1055 3: 'sleep' Puts all monsters to sleep
1056 4: 'charm' Makes monster into a pet of person
1057 who triggers the square. This setting
1058 is not enabled for continous operation
1059 5: 'destroy mons' destroy any monsters on this space
1060 6: 'destroy pets' destroy friendly monsters on this space
1061
1062 =head3 B<FLESH> - type 72 - Organs and body parts
1063
1064 See B<FOOD> description.
1065
1066 =head3 B<MISC_OBJECT> - type 79 - Misc. objects
1067
1068 A type for any object that has no special behaviour.
1069
1070 =head3 B<LAMP> - type 82 - A lamp
1071
1072 This object represents a lamp, that can be carried and switched
1073 on and off and has a certain amount of fuel in it.
1074
1075 A lamp consists of two archetypes: the 'on' archetype and the 'off' archetype.
1076 Each of them should point at the other one with it's I<other_arch> field.
1077
1078 See the I<other_arch> field for the behaviour of a lamp object when it is applied.
1079
1080 If this object has FLAG_IS_LIGHTABLE set the lamp can be turned on and off
1081 with a B<LIGHTER>, see also the description of FLAG_IS_LIGHTABLE.
1082
1083 =over 4
1084
1085 =item I<glow_radius> <number>
1086
1087 The radius of the light that the lamp emits, see also I<glow_radius> in the
1088 generic object flags description.
1089
1090 =item I<speed> <number>
1091
1092 If FLAG_CHANGING is set the I<speed> field will indicate how fast the
1093 lamp burns it's fuel (I<food>).
1094
1095 Setting FLAG_CHANGING makes only sense on the archetype which represents
1096 the 'on' state of the lamp.
1097
1098 See also the description of FLAG_CHANGING.
1099
1100 Lamps which have no FLAG_CHANGING set would also make sense and represent
1101 lamps that never burn up.
1102
1103 =item I<other_arch> <number>
1104
1105 This is the field that points to the 'other' archetype which represents the
1106 opposite state of the lamp. The newly from I<other_arch> derived object will
1107 replace the current object and will get the value of I<food> of the replaced object.
1108
1109 Rationale:
1110
1111 When the lamp (on) is applied a new object is derived from the archetype
1112 in I<other_arch> and the I<food> value is copied to it ('the fuel is
1113 transferred'). The new lamp (off) object has to have a I<other_arch> field
1114 which points to the archetype from which a lamp (on) can be derived.
1115
1116 =item I<food> <number>
1117
1118 This fields stands for the fuel of the lamp.
1119
1120 =back
1121
1122 =head3 B<DUPLICATOR> - type 83 - Duplicators or: Multiplicators
1123
1124 This type of objects multiplies objects that are above it when it is activated.
1125 You can even multiply by 0, which will destroy the object.
1126
1127 =over 4
1128
1129 =item I<level> <number>
1130
1131 The multiplicator, if set to 0 or lower it will destroy the objects above it.
1132
1133 =item I<other_arch> <string>
1134
1135 The archetype name of the objects that should be multiplied.
1136
1137 =item I<connected> <number>
1138
1139 See generic object field description.
1140
1141 =back
1142
1143 =head3 B<HOLE> - type 94 - Holes
1144
1145 B<HOLE>s are holes in the ground where objects can fall through. When the hole
1146 opens and/or is completly open all objects above it fall through (more
1147 precisely: if their head is above the hole).
1148
1149 When the B<HOLE> is activated it's speed is set to 0.5.
1150
1151 These holes can only transfer the one who falls through to other coordinates
1152 on the same map.
1153
1154 =over 4
1155
1156 =item I<maxsp> (0|1)
1157
1158 This field negates the state of the connection: When maxsp is 1 the pit will
1159 open/close when the connection is deactivated. Otherwise it will open/close
1160 when the connection is activated. This field only has effect when the
1161 connection is triggered. So if you put a closed hole on a map, and the
1162 connection is deactivated, and I<maxsp> is 1 the hole will remain closed until the
1163 connection was triggered once.
1164
1165 =item I<connected> <connection id>
1166
1167 This is the connection id, which lets the hole opening or closing when
1168 activated. The flags FLAG_ACTIVATE_ON_PUSH and FLAG_ACTIVATE_ON_RELEASE control
1169 at which connection state the object is activated.
1170
1171 For example: if FLAG_ACTIVATE_ON_RELEASE is set to 0 the hole won't react when
1172 the connection is released.
1173
1174 =item I<wc> <number> (internal)
1175
1176 This is an internal field. If it is greater than 0 it means that the hole is not
1177 yet fully open. More preciesly: this field is the animation-step and if it is
1178 set to the 'closed' step of the animation the hole is closed and if it is on
1179 the 'open' animation step (I<wc> = 0), the hole is open.
1180
1181 =item I<sp> <number>
1182
1183 The destination y coordinates on the same map.
1184
1185 =item I<hp> <number>
1186
1187 The destination x coordinates on the same map.
1188
1189 =back
1190
1191 =head3 B<POISONING> - type 105 - The poisoning of players and monsters
1192
1193 This type is doing the actual damage to the ones who were attacked
1194 via AT_POISON (or drank B<POISON>).
1195
1196 The duration is handled via the FLAG_IS_USED_UP mechanism (please look
1197 there for details).
1198
1199 =over 4
1200
1201 =item I<dam> <number>
1202
1203 Each time the poisoning is proccessed (which is determined by the I<speed> and
1204 I<speed_left> fields, see the general object fields description above) it hits
1205 the player with <number> damage and the AT_INTERNAL attacktype (means: it will
1206 simply hit the player with no strings attached).
1207
1208 =item I<food> <number>
1209
1210 Just a note: The posioning is removed if I<food> == 1 and not if
1211 the whole I<duration> is up, because the B<POISONING> code has to remove
1212 the poison-effects from the player before the FLAG_IS_USED_UP mechanism
1213 deletes the B<POISONING> object.
1214
1215 =back
1216
1217 =head3 B<FORCE> - type 114 - Forces
1218
1219 Forces are a very 'thin' type. They don't have much behaviour other than
1220 disappearing after a time and/or affecting the player if they are in his
1221 inventory.
1222
1223 Forces only take effect on the player if they have FLAG_APPLIED set.
1224
1225 Whether the I<duration> field is processed or not per tick is controlled by the
1226 I<speed> and I<speed_left> fields. Look above in the generic object field description.
1227
1228 NOTE: If FLAG_IS_USED_UP is set on a B<FORCE> it's I<food> field will also
1229 interpreter like described in the description of the FLAG_IS_USED_UP flag.
1230 BUT: If I<food> reaches 0 before I<duration> and FLAG_APPLIED is set, the force
1231 will still last for I<duration>. If the FLAG_APPLIED is not set the force is
1232 removed when I<food> reaches 0. Generally this means: FLAG_IS_USED_UP doesn't
1233 have good semantics on forces, try to avoid it.
1234
1235 =over 4
1236
1237 =item I<duration>
1238
1239 While this field is greater than 0 the force/object is not destroyed. It is
1240 decreased each tick by 1.
1241
1242 If it reaches 0 the force/object is destroyed.
1243
1244 This field can have this meaning for B<any> object if that object has
1245 FLAG_IS_USED_UP and FLAG_APPLIED set. See the description of FLAG_IS_USED_UP
1246 what happens then.
1247
1248 =back
1249
1250 =head3 B<POTION_EFFECT> - type 115 - Potion effects (resistancies)
1251
1252 This object is generated by the B<POTION> code when the potion is a resistance
1253 giving potion. It has mainly the same behaviour as a B<FORCE>.
1254
1255 The specialty of the potion effect is that the resistancy it gives is absolute,
1256 so if you drink a resistancy potion of fire+60 you will get 60% absolute resistancy to
1257 fire.
1258
1259 Multiple potion effects only give you the maximum of their resistancy.