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

File Contents

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