ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/pod/objects.pod
Revision: 1.6
Committed: Tue Dec 19 15:30:01 2006 UTC (17 years, 5 months ago) by elmex
Branch: MAIN
Changes since 1.5: +55 -0 lines
Log Message:
reverted the last change to move_apply and check_inv and fixed check_inv
differntly: as all the buttons and pedestals check themselves whether
the objects above them satisfy their conditions i thought the best
would be if check_inv would do the same. The new semantics are
compatible with the semantics used by the map makers (at least i hope that)
and won't end up in a broken state so easily now.

While fixing check_inv i documented inventory checkers in objects.pod

File Contents

# Content
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 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 =item speed <number>
80
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 Sets the flag FLAG_NO_DROP.
102 See Flags section below.
103
104 =item applied (0|1)
105
106 Sets the flag FLAG_APPLIED.
107 See Flags section below.
108
109 =item is_used_up (0|1)
110
111 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
119 =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 =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 =over 4
143
144 =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 If FLAG_APPLIED is not set the object is destroyed.
168
169 =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 =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 =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 =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
332 When this object is applied this object will be created.
333 This field is also used by FOOD and POISON.
334
335 =item subtypes <potion subtype>
336
337 see include/spells.h for possible potion subtypes, there are currently 4:
338
339 =over 4
340
341 =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
355 =item POT_BALM
356
357 Unused, default behaiour of a potion.
358
359 =back
360
361 =back
362
363 =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 =item dam <number>
379
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 =item food <number>
408
409 addition to food regeneration of the player
410
411 =item hp <number>
412
413 addition to health regeneration
414
415 =item sp <number>
416
417 addition to mana regeneration
418
419 =item grace <number>
420
421 addititon to grace regeneration
422
423 =item gen_sp_armour <number>
424
425 the players gen_sp_armour field (which is per default 10) is added the <number> amount.
426 gen_sp_armour seems to be a factor with which gen_sp in do_some_living()
427 is multiplied: gen_sp *= 10/<number>
428 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 =item resist_<resistnacy> <number>
440
441 this is the factor with which the difference of the players resistancy and 100%
442 is multiplied, something like this:
443
444 additional_resistancy = (100 - current_resistanct) * (<number>/100)
445
446 if <number> is negative it is added to the total vulnerabilities,
447 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 =item luck <number>
459
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 =item exp <number>
467
468 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
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 =item ac <number>
489
490 the amount of ac points the player's ac is decreased
491
492 =item wc <number>
493
494 the amount of wc points the player's wc is decreased
495
496 =back
497
498 =head4 Player inherits following flags from weapons:
499
500 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 =head3 CHECK_INV - type 64 - Inventory checkers
510
511 This object checks whether the player has a specific item in his
512 inventory when he moves above the inventory checker. If the player has
513 the item (or not, which can be controlled with a flag) a connection will be triggered.
514
515 If you set move_block you can deny players and monsters to reach the space where
516 the inventory checker is on, see 'move_block' description below.
517
518 The conditions specified by hp, slaying and race are concationated with OR.
519 So matching one of those conditions is enough.
520
521 =over 4
522
523 =item move_block <move type bitmask>
524
525 If you set this field to block a movetype the move code will block any moves
526 onto the space with the inventory checker, IF the moving object doesn't have
527 (or has - if last_sp = 0) the item that the checker is searching for.
528
529 =item last_sp (0|1)
530
531 If last_sp is 1 'having' the item that is being checked for will
532 activate the connection or make the space with the checker non-blocking.
533 If last_sp is 0 'not having' the item will activate the connection
534 or make the space with the checker non-blocking.
535
536 =item last_heal (0|1)
537
538 If last_heal is 1 the matching item will be removed if the inventory checker
539 activates a connection and finds the item in the inventory.
540
541 (A inventory checker that blocks a space won't remove anything from inventories)
542
543 =item hp <number>
544
545 If this field is not 0 the inventory checker will search for an object
546 with the type id <number>.
547
548 =item slaying <string>
549
550 If this field is set the inventory checker will search for an object that
551 has the same string in the slaying field (for example a key string of a key).
552
553 =item race <string>
554
555 If this field is set the inventory checker will search for an object which
556 has the archetype name that matches <string>.
557
558 =item connected <connection id>
559
560 This is the connection that will be activated.
561
562 =back
563
564 =head3 HOLE - type 94 - Holes
565
566 Holes are holes in the ground where objects can fall through. When the hole
567 opens and/or is completly open all objects above it fall through (more
568 precisely: if their head is above the hole).
569
570 Trapdoors can only transfer the one who falls through to other coordinates
571 on the B<same> map.
572
573 =over 4
574
575 =item maxsp (0|1)
576
577 This field negates the state of the connection: When maxsp is 1 the pit will
578 open/close when the connection is deactivated. Otherwise it will open/close
579 when the connection is activated. This field only has effect when the
580 connection is triggered. So if you put a closed hole on a map, and the
581 connection is deactivated, and maxsp is 1 the hole will remain closed until the
582 connection was triggered once.
583
584 =item connected <connection id>
585
586 This is the connection id, which lets the hole opening or closing when
587 activated. The flags FLAG_ACTIVATE_ON_PUSH and FLAG_ACTIVATE_ON_RELEASE control
588 at which connection state the object is activated.
589
590 For example: if FLAG_ACTIVATE_ON_RELEASE is set to 0 the hole won't react when
591 the connection is released.
592
593 =item wc <number> (internal)
594
595 This is an internal flag. If it is greater than 0 it means that the hole is not
596 yet fully open. More preciesly: this field is the animation-step and if it is
597 set to the 'closed' step of the animation the hole is closed and if it is on
598 the 'open' animation step (wc = 0), the hole is open.
599
600 =item sp <number>
601
602 The destination y coordinates on the same map.
603
604 =item hp <number>
605
606 The destination x coordinates on the same map.
607
608 =back
609
610 =head3 FORCE - type 114 - Forces
611
612 Forces are a very 'thin' type. They don't have much behaviour other than
613 disappearing after a time and/or affecting the player if they are in his
614 inventory.
615
616 Forces only take effect on the player if they have set FLAG_APPLIED.
617
618 Whether the duration field is processed or not a tick is controlled via the
619 speed and speed_left field. Look above at the generic description of these
620 fields.
621
622 =over 4
623
624 =item duration
625
626 While this field is greater than 0 the force/object is not destroyed. It is
627 decreased each tick by 1.
628
629 If it reaches 0 the force/object is destroyed.
630
631 This field can have this meaning for B<any> object if that object has
632 FLAG_IS_USED_UP and FLAG_APPLIED set. See the description of FLAG_IS_USED_UP
633 what happens then.
634
635 =back
636
637 =head3 POTION_EFFECT - type 115 - Potion effects (resistancies)
638
639 This object is generated by the POTION code when the potion is a resistance
640 giving potion. It has mainly the same behaviour as a FORCE.
641
642 The specialty of the potion effect is that the resistancy it gives is absolute,
643 so if you drin a resistancy potion of fire+60 you will get 60% resistancy to
644 fire.
645
646 Multiple potion effects only give you the maximum of their resistancy.